diff --git a/.dprint.jsonc b/.dprint.jsonc index 2280c3ecdd702..7ce72c32b5c71 100644 --- a/.dprint.jsonc +++ b/.dprint.jsonc @@ -1,71 +1,75 @@ -{ - // If updating this, also update the config in dtsBundler.mjs. - "indentWidth": 4, - "lineWidth": 1000, - "newLineKind": "auto", - "useTabs": false, - "typescript": { - "newLineKind": "crlf", - "semiColons": "always", - "quoteStyle": "preferDouble", - "quoteProps": "consistent", - "useBraces": "whenNotSingleLine", - "bracePosition": "sameLineUnlessHanging", - "singleBodyPosition": "sameLine", - "nextControlFlowPosition": "nextLine", // Stroustrup style braces. - "trailingCommas": "onlyMultiLine", - "preferHanging": false, - "operatorPosition": "maintain", - - "arrowFunction.useParentheses": "preferNone", - "conditionalExpression.linePerExpression": false, // Keep our "match/case"-ish conditionals. - "functionExpression.spaceAfterFunctionKeyword": true, - "importDeclaration.forceMultiLine": "whenMultiple", - "constructorType.spaceAfterNewKeyword": true, - "constructSignature.spaceAfterNewKeyword": true, - - "module.sortImportDeclarations": "caseInsensitive", - "module.sortExportDeclarations": "caseInsensitive", - "exportDeclaration.sortNamedExports": "caseInsensitive", - "importDeclaration.sortNamedImports": "caseInsensitive" - }, - "yaml": { - "indentWidth": 2, - "quotes": "preferSingle" - }, - "json": { - // This would be good to do in known-JSONC files, but VS Code warns on trailing commas. - "trailingCommas": "never" - }, - "gofumpt": { - "langVersion": "go1.26", - "modulePath": "github.com/microsoft/TypeScript/tsc" - }, - "excludes": [ - "**/.git", - "**/node_modules", - "**/*-lock.json", - "**/testdata", - "packages/vscode-typescript/l10n/**", - "tsc/internal/bundled/libs/**", - "tools/scripts/lsp/*.json", - "tools/scripts/lsp/metaModelSchema.mts", - // Needs to be LF to have a working shebang. - "packages/typescript/bin/tsc", - "tsc/internal/bundled/source/**", - "tsc/internal/diagnostics/diagnosticMessages.generated.json", - "tsc/internal/diagnostics/loc/*.generated.json", - "packages/typescript/dist/**", - "packages/typescript/tsconfig.tsbuildinfo", - "packages/vscode-typescript/dist/**", - "packages/vscode-typescript-nightly/dist/**", - "packages/typescript/vendor/**" - ], - // Note: if adding new languages, make sure settings.template.json is updated too. - "plugins": [ - "npm:@dprint/typescript", - "npm:@dprint/json", - "npm:dprint-plugin-yaml", - "npm:@jakebailey/dprint-plugin-gofumpt" - ] -} +{ + // If updating this, also update the config in dtsBundler.mjs. + "indentWidth": 4, + "lineWidth": 1000, + "newLineKind": "lf", + "useTabs": false, + "typescript": { + "newLineKind": "lf", + "semiColons": "always", + "quoteStyle": "preferDouble", + "quoteProps": "consistent", + "useBraces": "whenNotSingleLine", + "bracePosition": "sameLineUnlessHanging", + "singleBodyPosition": "sameLine", + "nextControlFlowPosition": "nextLine", // Stroustrup style braces. + "trailingCommas": "onlyMultiLine", + "preferHanging": false, + "operatorPosition": "maintain", + + "arrowFunction.useParentheses": "preferNone", + "conditionalExpression.linePerExpression": false, // Keep our "match/case"-ish conditionals. + "functionExpression.spaceAfterFunctionKeyword": true, + "importDeclaration.forceMultiLine": "whenMultiple", + "constructorType.spaceAfterNewKeyword": true, + "constructSignature.spaceAfterNewKeyword": true, + + "module.sortImportDeclarations": "caseInsensitive", + "module.sortExportDeclarations": "caseInsensitive", + "exportDeclaration.sortNamedExports": "caseInsensitive", + "importDeclaration.sortNamedImports": "caseInsensitive" + }, + "yaml": { + "indentWidth": 2, + "quotes": "preferSingle" + }, + "json": { + // This would be good to do in known-JSONC files, but VS Code warns on trailing commas. + "trailingCommas": "never" + }, + "gofumpt": { + "langVersion": "go1.26", + "modulePath": "github.com/microsoft/TypeScript/tsc" + }, + "excludes": [ + "**/.git", + "**/node_modules", + "**/*-lock.json", + "**/testdata", + "packages/vscode-typescript/l10n/**", + "tsc/internal/bundled/libs/lib.dom.d.ts", + "tsc/internal/bundled/libs/lib.dom.asynciterable.d.ts", + "tsc/internal/bundled/libs/lib.dom.iterable.d.ts", + "tsc/internal/bundled/libs/lib.webworker.d.ts", + "tsc/internal/bundled/libs/lib.webworker.asynciterable.d.ts", + "tsc/internal/bundled/libs/lib.webworker.iterable.d.ts", + "tools/scripts/lsp/*.json", + "tools/scripts/lsp/metaModelSchema.mts", + // Needs to be LF to have a working shebang. + "packages/typescript/bin/tsc", + "tsc/internal/diagnostics/diagnosticMessages.generated.json", + "tsc/internal/diagnostics/loc/*.generated.json", + "packages/typescript/dist/**", + "packages/typescript/tsconfig.tsbuildinfo", + "packages/vscode-typescript/dist/**", + "packages/vscode-typescript-nightly/dist/**", + "packages/typescript/vendor/**" + ], + // Note: if adding new languages, make sure settings.template.json is updated too. + "plugins": [ + "npm:@dprint/typescript", + "npm:@dprint/json", + "npm:dprint-plugin-yaml", + "npm:@jakebailey/dprint-plugin-gofumpt" + ] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000..c4ac2833d815a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[tsc/testdata/**] +end_of_line = unset +charset = unset +trim_trailing_whitespace = unset +insert_final_newline = unset + +[tools/loc/**/*.lcl] +end_of_line = unset +charset = unset +trim_trailing_whitespace = unset +insert_final_newline = unset diff --git a/.gitattributes b/.gitattributes index 6ecc3203dc4f8..70f02d00a07b3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,9 @@ *.js linguist-language=TypeScript **/*.json linguist-language=jsonc -* -text -*.go text eol=lf + +* text=auto eol=lf + +# Preserve line-ending-sensitive fixtures exactly. +tsc/testdata/** -text + +tools/loc/**/*.lcl -text diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index f57eb0a941c88..5ce1098e58375 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,19 +1,19 @@ - - -Fixes # + + +Fixes # diff --git a/.github/skills/mcfly/SKILL.md b/.github/skills/mcfly/SKILL.md index 040ea4d6cb622..f53704e138004 100644 --- a/.github/skills/mcfly/SKILL.md +++ b/.github/skills/mcfly/SKILL.md @@ -1,29 +1,29 @@ ---- -name: mcfly -description: Only invoke when explicitly instructed to ---- - -You need to "re-stack" your commits to match the following format: - * Testcase(s), including at least one that demonstrate the problem - this could be a test that directly fails, baselines that show the problem, or even both - * A commit, or series of commits, that fixes the failing test case - * If needed, a follow-up commit with modified baselines - -Since you can't force-push, start with a commit that undoes all your prior changes and gets you back to `main`. - -Then add your test case(s) in a single commit. -When you add testcases that create or modify baselines, commit the (pre-fix) baselines at the same time as the testcases themselves. -A test case isn't necessarily a new file; it could be a modification to an existing test or a change in the test configuration. -Ensure that at least one test in the full run fails - you might be operating on a bad PR that didn't actually introduce a failing scenario! -If zero tests failed, abort and post a message explaining what you observed. -Remember that baseline tests do not "fail" in the traditional sense; they are used to verify that the output matches the expected baseline. -Ensure that your test demonstrates the problem that the PR is intended to fix. - -Then, add your fix. -You can break this apart into multiple commits if it's more logical to review that way; use your judgment. -Ensure that this makes the test pass. -Again, be mindful of how baselines work - a failed baseline test just means a diff; review that diff for correctness vis a vis the goal of the PR. -Do not accept baseline diffs yet! - -Finally, if there are baseline diffs, commit those in a separate commit. - +--- +name: mcfly +description: Only invoke when explicitly instructed to +--- + +You need to "re-stack" your commits to match the following format: + * Testcase(s), including at least one that demonstrate the problem - this could be a test that directly fails, baselines that show the problem, or even both + * A commit, or series of commits, that fixes the failing test case + * If needed, a follow-up commit with modified baselines + +Since you can't force-push, start with a commit that undoes all your prior changes and gets you back to `main`. + +Then add your test case(s) in a single commit. +When you add testcases that create or modify baselines, commit the (pre-fix) baselines at the same time as the testcases themselves. +A test case isn't necessarily a new file; it could be a modification to an existing test or a change in the test configuration. +Ensure that at least one test in the full run fails - you might be operating on a bad PR that didn't actually introduce a failing scenario! +If zero tests failed, abort and post a message explaining what you observed. +Remember that baseline tests do not "fail" in the traditional sense; they are used to verify that the output matches the expected baseline. +Ensure that your test demonstrates the problem that the PR is intended to fix. + +Then, add your fix. +You can break this apart into multiple commits if it's more logical to review that way; use your judgment. +Ensure that this makes the test pass. +Again, be mindful of how baselines work - a failed baseline test just means a diff; review that diff for correctness vis a vis the goal of the PR. +Do not accept baseline diffs yet! + +Finally, if there are baseline diffs, commit those in a separate commit. + Ensure that the final diff you have matches the original diff you started with, as this process should not introduce any unintended changes. \ No newline at end of file diff --git a/.github/skills/security-report-check/SKILL.md b/.github/skills/security-report-check/SKILL.md index d6aeb74c97b43..4265e7ecf4673 100644 --- a/.github/skills/security-report-check/SKILL.md +++ b/.github/skills/security-report-check/SKILL.md @@ -1,122 +1,122 @@ ---- -name: security-report-check -description: > - Are you doing security research on this repo? - This document covers what guarantees and non-guarantees are provided. - Consult this document before reporting a security issue or conducting security research. ---- - -# Security Properties of `tsc` - -## Overview - -The TypeScript compiler (`tsc`) is a **build tool**, not a sandbox. -It transforms TypeScript source files into JavaScript output files and reports potential errors. -This document describes what `tsc` guarantees and does not guarantee when invoked on untrusted input. - -## Security Guarantees - -### No arbitrary code execution - -Running `tsc` on a malicious `.ts` or `tsconfig.json` file will never cause the input code to be executed. -The compiler parses, type-checks, and emits; it does not evaluate the programs it compiles. -There is no `eval`-at-compile-time, no macro system, and no plugin mechanism that runs author-supplied code during compilation. -This is the core security property of `tsc`. - -*Exception*: If content mappers are enabled, this *does* enable execution of third-party code. -Only pass the `--runExternalCode` flag if you have validated which content mappers are available and that you are OK with running them. - -**Limited default side effects.** - -Outside of explicitly enabled external code, compiler invocations interact with the system through file-system operations and process I/O. Depending on the options, `tsc` may write compiler, build-info, trace, or profile files, update output timestamps, or delete build outputs (for example, with `--build --clean`). - -The compiler does not make HTTP requests or spawn child processes except through content mappers. - - -**Safe exit.** -Certain adversarial inputs may cause crashes, but these crashes will unwind the process normally, and will not be a source of buffer overrun or other memory safety exploit vectors. - -## Non-Guarantees - -### Arbitrary file writes - -`tsc` writes compiler output to paths derived from its configuration (`outDir`, `outFile`, `declarationDir`, etc.) and the structure of the input project. -It is **expected** that a given `tsconfig.json` can direct output to any path writable by the calling user. -This is by design: writing files to disk *is the point* of a compiler. -Callers who need to constrain output locations must do so externally (e.g., filesystem permissions, containers, sandboxing). -Similarly, running `tsc --build --clean` may delete files from disk; crafted `.tsbuildinfo` or `tsconfig.json`s may cause any file to be deleted. - -### Input code is output code - -If an attacker has control of an input TS file, they can of course control the contents of the output JS file. -Attacks that depend on control of the input file and execution of the output file are not considered compiler security issues, because the attacker already has control of the input file. - -### File read sandboxing - -`tsc` will read files from paths specified in input files, and transitive references from there, including import paths and reference directives. -An attacker in control of these files may therefore cause a *read* of any file path the `tsc` process has privileges to read, and `tsc` may reprint certain file contents in its output messages. -In other words, for example, it is not generally safe to run `tsc` on untrusted code and print back the error message contents to an untrusted party, as this could expose local filesystem contents to the attacker. -Use of standard sandboxing strategies is recommended to secure scenarios similar to this. - -### Resource consumption - -TypeScript's type system is Turing-complete. -A crafted input file can cause `tsc` to consume unbounded CPU time or memory during type-checking, and in fact small type constructs that can consume a large amount of time are common and intentional. -Routine compilations of normal code can legitimately take multiple minutes and gigabytes of memory, so there is no reliable way to distinguish between a "normal" long-running compilation and an adversarially-constructed one. - -Callers operating on untrusted input should enforce resource limits externally (e.g., `ulimit`, cgroups, process timeouts). -You should not assume that an adverserially-constructed program will successfully typecheck in any bounded amount of time. -"Local Denial of Service (DoS)" is thus not a *security* report; if you encounter a performance problem, you can report this through the normal issue tracker. - -### Crashes - -`tsc` may gracefully crash, hang, or produce unexpected diagnostics when given adversarial input. -While crashes in "normal" code are treated as bugs and fixed when reported, the compiler does *not* guarantee non-crashing in the presence of all possible malformed inputs (e.g. an unbounded series of `f(f(f(f(...`). - -### tsbuildinfo - -The `.tsbuildinfo` file is a cache of compiler state that is used to speed up incremental compilation. -If this file is modified, it can cause `tsc` to e.g. fail to build a file because it thinks the file is up-to-date, or to recompile a file that has not changed. -.`tsbuildinfo` files should be considered as sensitive as `tsconfig.json` files in terms of security; an attacker who can modify them can cause arbitrary file reads and writes. - -## Language Service - -The TypeScript Language Service (LS) only executes in the context of a [trusted workspace (VS Code)](https://code.visualstudio.com/docs/editing/workspaces/workspace-trust) or [trusted folder (VS)](https://learn.microsoft.com/en-us/visualstudio/ide/trust-settings?view=visualstudio). -Similar to tsc, there are no guaranteed resource caps in the LS, and "hangs" may occur in the presence of adversarial inputs. - -### Workspace Trust is Your Responsibility - -Remember the definition of Workspace Trust (emphasis added): - -> The Workspace Trust feature lets you decide whether **code in your project** folder can be **executed** by VS Code and extensions **without your explicit approval**. - -Features like Content Mappers, including when they come from `node_modules`, are part of this "code in your project" and will run if you trust a workspace containing them. -This also includes TypeScript itself if you have enabled using the workspace version of TypeScript (again e.g. from `node_modules`). -The TypeScript Language Service doesn't provide additional barriers to this execution. -Remember to only enable Workspace Trust for workspaces that you trust, i.e. are willing to run code from. - -### Go Compiler CVEs - -The Go compiler is frequently updated to address CVEs in its core components and standard library. -These normally do not affect TypeScript - for example, a CVE in Go's HTTP library is not reachable from tsc, so is not relevant to TypeScript security. -We do not issue patch releases of TypeScript to adopt newer versions of Go **unless** there is an identified path to a particular CVE. -We recommend using `govulncheck` instead of a blanket version-based scan to identify potential issues. - -## Examples - -### Hypothetically Valid Security Reports - -- Running `tsc malicious.ts` executes top-level code from `malicious.ts`, even though `--runExternalCode` was not passed. -- A specially crafted source file causes `tsc` to launch an attacker-chosen executable, even though `--runExternalCode` was not passed. -- A malformed input exploits a memory-safety flaw to execute arbitrary native code rather than merely causing the `tsc` process to exit. - -### Hypothetically Invalid Security Reports - -- A recursive conditional type causes the reporter's local `tsc` process to use all available CPU or memory, hang, or terminate with a stack overflow. -- A malicious `tsconfig.json` directs emitted JavaScript or declarations to an unexpected path that is writable by the user running `tsc`. -- A project causes `tsc --build --clean` to delete a file that the invoking user has permission to delete. -- An import or reference directive causes `tsc` to read a local file, and a diagnostic reveals some of that file's contents to the caller. -- Attacker-controlled TypeScript produces attacker-controlled JavaScript that performs a malicious action when executed. -- A malformed source file crashes `tsc` without escaping the process or causing memory corruption. -- A content mapper executes code after the caller explicitly enables content mappers with `--runExternalCode`. - +--- +name: security-report-check +description: > + Are you doing security research on this repo? + This document covers what guarantees and non-guarantees are provided. + Consult this document before reporting a security issue or conducting security research. +--- + +# Security Properties of `tsc` + +## Overview + +The TypeScript compiler (`tsc`) is a **build tool**, not a sandbox. +It transforms TypeScript source files into JavaScript output files and reports potential errors. +This document describes what `tsc` guarantees and does not guarantee when invoked on untrusted input. + +## Security Guarantees + +### No arbitrary code execution + +Running `tsc` on a malicious `.ts` or `tsconfig.json` file will never cause the input code to be executed. +The compiler parses, type-checks, and emits; it does not evaluate the programs it compiles. +There is no `eval`-at-compile-time, no macro system, and no plugin mechanism that runs author-supplied code during compilation. +This is the core security property of `tsc`. + +*Exception*: If content mappers are enabled, this *does* enable execution of third-party code. +Only pass the `--runExternalCode` flag if you have validated which content mappers are available and that you are OK with running them. + +**Limited default side effects.** + +Outside of explicitly enabled external code, compiler invocations interact with the system through file-system operations and process I/O. Depending on the options, `tsc` may write compiler, build-info, trace, or profile files, update output timestamps, or delete build outputs (for example, with `--build --clean`). + +The compiler does not make HTTP requests or spawn child processes except through content mappers. + + +**Safe exit.** +Certain adversarial inputs may cause crashes, but these crashes will unwind the process normally, and will not be a source of buffer overrun or other memory safety exploit vectors. + +## Non-Guarantees + +### Arbitrary file writes + +`tsc` writes compiler output to paths derived from its configuration (`outDir`, `outFile`, `declarationDir`, etc.) and the structure of the input project. +It is **expected** that a given `tsconfig.json` can direct output to any path writable by the calling user. +This is by design: writing files to disk *is the point* of a compiler. +Callers who need to constrain output locations must do so externally (e.g., filesystem permissions, containers, sandboxing). +Similarly, running `tsc --build --clean` may delete files from disk; crafted `.tsbuildinfo` or `tsconfig.json`s may cause any file to be deleted. + +### Input code is output code + +If an attacker has control of an input TS file, they can of course control the contents of the output JS file. +Attacks that depend on control of the input file and execution of the output file are not considered compiler security issues, because the attacker already has control of the input file. + +### File read sandboxing + +`tsc` will read files from paths specified in input files, and transitive references from there, including import paths and reference directives. +An attacker in control of these files may therefore cause a *read* of any file path the `tsc` process has privileges to read, and `tsc` may reprint certain file contents in its output messages. +In other words, for example, it is not generally safe to run `tsc` on untrusted code and print back the error message contents to an untrusted party, as this could expose local filesystem contents to the attacker. +Use of standard sandboxing strategies is recommended to secure scenarios similar to this. + +### Resource consumption + +TypeScript's type system is Turing-complete. +A crafted input file can cause `tsc` to consume unbounded CPU time or memory during type-checking, and in fact small type constructs that can consume a large amount of time are common and intentional. +Routine compilations of normal code can legitimately take multiple minutes and gigabytes of memory, so there is no reliable way to distinguish between a "normal" long-running compilation and an adversarially-constructed one. + +Callers operating on untrusted input should enforce resource limits externally (e.g., `ulimit`, cgroups, process timeouts). +You should not assume that an adverserially-constructed program will successfully typecheck in any bounded amount of time. +"Local Denial of Service (DoS)" is thus not a *security* report; if you encounter a performance problem, you can report this through the normal issue tracker. + +### Crashes + +`tsc` may gracefully crash, hang, or produce unexpected diagnostics when given adversarial input. +While crashes in "normal" code are treated as bugs and fixed when reported, the compiler does *not* guarantee non-crashing in the presence of all possible malformed inputs (e.g. an unbounded series of `f(f(f(f(...`). + +### tsbuildinfo + +The `.tsbuildinfo` file is a cache of compiler state that is used to speed up incremental compilation. +If this file is modified, it can cause `tsc` to e.g. fail to build a file because it thinks the file is up-to-date, or to recompile a file that has not changed. +.`tsbuildinfo` files should be considered as sensitive as `tsconfig.json` files in terms of security; an attacker who can modify them can cause arbitrary file reads and writes. + +## Language Service + +The TypeScript Language Service (LS) only executes in the context of a [trusted workspace (VS Code)](https://code.visualstudio.com/docs/editing/workspaces/workspace-trust) or [trusted folder (VS)](https://learn.microsoft.com/en-us/visualstudio/ide/trust-settings?view=visualstudio). +Similar to tsc, there are no guaranteed resource caps in the LS, and "hangs" may occur in the presence of adversarial inputs. + +### Workspace Trust is Your Responsibility + +Remember the definition of Workspace Trust (emphasis added): + +> The Workspace Trust feature lets you decide whether **code in your project** folder can be **executed** by VS Code and extensions **without your explicit approval**. + +Features like Content Mappers, including when they come from `node_modules`, are part of this "code in your project" and will run if you trust a workspace containing them. +This also includes TypeScript itself if you have enabled using the workspace version of TypeScript (again e.g. from `node_modules`). +The TypeScript Language Service doesn't provide additional barriers to this execution. +Remember to only enable Workspace Trust for workspaces that you trust, i.e. are willing to run code from. + +### Go Compiler CVEs + +The Go compiler is frequently updated to address CVEs in its core components and standard library. +These normally do not affect TypeScript - for example, a CVE in Go's HTTP library is not reachable from tsc, so is not relevant to TypeScript security. +We do not issue patch releases of TypeScript to adopt newer versions of Go **unless** there is an identified path to a particular CVE. +We recommend using `govulncheck` instead of a blanket version-based scan to identify potential issues. + +## Examples + +### Hypothetically Valid Security Reports + +- Running `tsc malicious.ts` executes top-level code from `malicious.ts`, even though `--runExternalCode` was not passed. +- A specially crafted source file causes `tsc` to launch an attacker-chosen executable, even though `--runExternalCode` was not passed. +- A malformed input exploits a memory-safety flaw to execute arbitrary native code rather than merely causing the `tsc` process to exit. + +### Hypothetically Invalid Security Reports + +- A recursive conditional type causes the reporter's local `tsc` process to use all available CPU or memory, hang, or terminate with a stack overflow. +- A malicious `tsconfig.json` directs emitted JavaScript or declarations to an unexpected path that is writable by the user running `tsc`. +- A project causes `tsc --build --clean` to delete a file that the invoking user has permission to delete. +- An import or reference directive causes `tsc` to read a local file, and a diagnostic reveals some of that file's contents to the caller. +- Attacker-controlled TypeScript produces attacker-controlled JavaScript that performs a malicious action when executed. +- A malformed source file crashes `tsc` without escaping the process or causing memory corruption. +- A content mapper executes code after the caller explicitly enables content mappers with `--runExternalCode`. + diff --git a/.gitignore b/.gitignore index 198596e5aa56d..0e30c55082cd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,141 +1,141 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Profiling and coverage -*.prof -*.pb.gz -coverage -*.lcov -.nyc_output - -# Dependency and package-manager directories -node_modules/ -jspm_packages/ -web_modules/ -.npm -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# Build and package outputs -*.tsbuildinfo -*.tgz -dist -.eslintcache -.cache -.parcel-cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ -.vscode-test -/built -# https://github.com/golang/go/issues/63901 -/go.work.sum -/tsc/cmd/tsc/tsc -/tsc/tsc - -# Native compiler outputs -*.exe -*.exe~ -*.dll -*.so -*.dylib -*.wasm -*.test -__debug_bin* -*.out - -# Environment and editor files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local -.node_repl_history -**/.vscode/* -!**/.vscode/tasks.json -!**/.vscode/settings.template.json -!**/.vscode/launch.template.json -!**/.vscode/extensions.json -.DS_Store -.idea - -# Local compiler baselines and test output -tsc/testdata/baselines/local -tsc/testdata/baselines/tmp - -# Legacy Strada build and test output -/.node_modules/ -/test-args.txt -/rwc-report.html -/build.json -*.actual -/.parallelperf.* -/.failed-tests -/TEST-results.xml -/*v8.log -/lib/ -/internal/ -/scripts/eslint/built/ -/scripts/debug.bat -/scripts/run.bat -/scripts/**/*.js -/scripts/**/*.js.map -/src/harness/*.js -/src/compiler/diagnosticInformationMap.generated.ts -/src/compiler/diagnosticMessages.generated.json -/src/parser/diagnosticInformationMap.generated.ts -/src/parser/diagnosticMessages.generated.json -/tests/cases/rwc/ -/tests/cases/perf/ -/tests/cases/**/*.js -/tests/cases/**/*.js.map -/tests/baselines/local/ -/tests/baselines/local.old/ -/tests/baselines/prototyping/local/ -/tests/baselines/rwc/ -/tests/baselines/symlinks/ -/tests/baselines/reference/projectOutput/ -/tests/baselines/reference/testresults.tap -/tests/baselines/reference/dt -/tests/services/baselines/local/ -/tests/services/baselines/prototyping/local/ -/tests/services/browser/typescriptServices.js -/tests/webTestServer.js -/tests/webTestServer.js.map -/tests/webhost/*.d.ts -/tests/webhost/webtsc.js - -# Generated development tools -tools/custom-gcl -tools/custom-gcl.exe -tools/custom-gcl.hash -tools/custom-gcl.exe.hash -tools/gotestsum -tools/gotestsum.exe -tools/gotestsum.hash -tools/gotestsum.exe.hash - -# Keep tracked text assets that overlap broad output patterns -!tsc/testdata/baselines/reference/**/*.txt -!packages/typescript/vendor/**/*.txt -!tsc/testdata/submoduleAccepted.txt -!tsc/testdata/submoduleTriaged.txt +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Profiling and coverage +*.prof +*.pb.gz +coverage +*.lcov +.nyc_output + +# Dependency and package-manager directories +node_modules/ +jspm_packages/ +web_modules/ +.npm +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# Build and package outputs +*.tsbuildinfo +*.tgz +dist +.eslintcache +.cache +.parcel-cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ +.vscode-test +/built +# https://github.com/golang/go/issues/63901 +/go.work.sum +/tsc/cmd/tsc/tsc +/tsc/tsc + +# Native compiler outputs +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.wasm +*.test +__debug_bin* +*.out + +# Environment and editor files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local +.node_repl_history +**/.vscode/* +!**/.vscode/tasks.json +!**/.vscode/settings.template.json +!**/.vscode/launch.template.json +!**/.vscode/extensions.json +.DS_Store +.idea + +# Local compiler baselines and test output +tsc/testdata/baselines/local +tsc/testdata/baselines/tmp + +# Legacy Strada build and test output +/.node_modules/ +/test-args.txt +/rwc-report.html +/build.json +*.actual +/.parallelperf.* +/.failed-tests +/TEST-results.xml +/*v8.log +/lib/ +/internal/ +/scripts/eslint/built/ +/scripts/debug.bat +/scripts/run.bat +/scripts/**/*.js +/scripts/**/*.js.map +/src/harness/*.js +/src/compiler/diagnosticInformationMap.generated.ts +/src/compiler/diagnosticMessages.generated.json +/src/parser/diagnosticInformationMap.generated.ts +/src/parser/diagnosticMessages.generated.json +/tests/cases/rwc/ +/tests/cases/perf/ +/tests/cases/**/*.js +/tests/cases/**/*.js.map +/tests/baselines/local/ +/tests/baselines/local.old/ +/tests/baselines/prototyping/local/ +/tests/baselines/rwc/ +/tests/baselines/symlinks/ +/tests/baselines/reference/projectOutput/ +/tests/baselines/reference/testresults.tap +/tests/baselines/reference/dt +/tests/services/baselines/local/ +/tests/services/baselines/prototyping/local/ +/tests/services/browser/typescriptServices.js +/tests/webTestServer.js +/tests/webTestServer.js.map +/tests/webhost/*.d.ts +/tests/webhost/webtsc.js + +# Generated development tools +tools/custom-gcl +tools/custom-gcl.exe +tools/custom-gcl.hash +tools/custom-gcl.exe.hash +tools/gotestsum +tools/gotestsum.exe +tools/gotestsum.hash +tools/gotestsum.exe.hash + +# Keep tracked text assets that overlap broad output patterns +!tsc/testdata/baselines/reference/**/*.txt +!packages/typescript/vendor/**/*.txt +!tsc/testdata/submoduleAccepted.txt +!tsc/testdata/submoduleTriaged.txt diff --git a/.vscode/settings.template.json b/.vscode/settings.template.json index dd37e6f9e2ba7..517d357c09c59 100644 --- a/.vscode/settings.template.json +++ b/.vscode/settings.template.json @@ -1,12 +1,12 @@ // Rename this file 'settings.json' or merge its // contents into your existing settings. { + "files.eol": "\n", "[typescript][typescriptreact][javascript][javascriptreact][json][jsonc][yaml][github-actions-workflow]": { "editor.defaultFormatter": "dprint.dprint", "editor.formatOnSave": true }, "[go][go.mod][go.sum][go.work]": { - "files.eol": "\n", "files.insertFinalNewline": true, "editor.defaultFormatter": "golang.go", "editor.formatOnSave": true, diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 835019b61a4c5..c4057910f7aca 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,129 +1,129 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Build compiler", - "type": "npm", - "script": "build", - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": ["$go"] - }, - { - "label": "Watch compiler", - "type": "npm", - "script": "build:watch:debug", - "group": "build", - "isBackground": true, - "problemMatcher": { - "owner": "hereby", - "fileLocation": "autoDetect", - "source": "hereby", - "applyTo": "closedDocuments", - "pattern": { "regexp": "" }, - "background": { - "activeOnStart": true, - "beginsPattern": "\\[build:watch\\] changed due to", - "endsPattern": "\\[build:watch\\] run complete" - } - } - }, - { - "label": "Test", - "type": "shell", - "command": "npx", - "args": ["hereby", "test"], - "group": "test", - "problemMatcher": ["$go"] - }, - { - "label": "Lint", - "type": "shell", - "command": "npx", - "args": ["hereby", "lint"], - "problemMatcher": ["$go"] - }, - { - "label": "Generate", - "type": "shell", - "command": "npx", - "args": ["hereby", "generate"], - "problemMatcher": ["$go"] - }, - { - "label": "Build extension", - "type": "npm", - "script": "extension:build", - "group": "build", - "problemMatcher": [ - "$tsc", - // Copy-paste from https://github.com/connor4312/esbuild-problem-matchers to avoid the extension dependency - { - "owner": "esbuild", - "severity": "error", - "applyTo": "closedDocuments", - "source": "esbuild", - "fileLocation": "relative", - "pattern": [ - { - "regexp": "^[✘▲] \\[([A-Z]+)\\] (.+)", - "severity": 1, - "message": 2 - }, - { - "regexp": "^(?:\\t| {4})(?!\\s)([^:]+)(?::([0-9]+))?(?::([0-9]+))?:$", - "file": 1, - "line": 2, - "column": 3 - } - ] - } - ] - }, - { - "label": "Watch extension", - "type": "npm", - "script": "extension:watch", - "group": "build", - "isBackground": true, - "problemMatcher": [ - // Copy-paste from https://github.com/connor4312/esbuild-problem-matchers to avoid the extension dependency - { - "owner": "esbuild-watch", - "severity": "error", - "applyTo": "closedDocuments", - "source": "esbuild", - "fileLocation": "relative", - "pattern": [ - { - "regexp": "^[✘▲] \\[([A-Z]+)\\] (.+)", - "severity": 1, - "message": 2 - }, - { - "regexp": "^(?:\\t| {4})(?!\\s)([^:]+)(?::([0-9]+))?(?::([0-9]+))?:$", - "file": 1, - "line": 2, - "column": 3 - } - ], - "background": { - "activeOnStart": true, - "beginsPattern": { - "regexp": "\\[watch\\] build started" - }, - "endsPattern": { - "regexp": "\\[watch\\] build finished" - } - } - } - ] - }, - { - "label": "Watch for extension run", - "dependsOn": ["Watch extension", "Watch compiler"] - } - ] -} +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build compiler", + "type": "npm", + "script": "build", + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": ["$go"] + }, + { + "label": "Watch compiler", + "type": "npm", + "script": "build:watch:debug", + "group": "build", + "isBackground": true, + "problemMatcher": { + "owner": "hereby", + "fileLocation": "autoDetect", + "source": "hereby", + "applyTo": "closedDocuments", + "pattern": { "regexp": "" }, + "background": { + "activeOnStart": true, + "beginsPattern": "\\[build:watch\\] changed due to", + "endsPattern": "\\[build:watch\\] run complete" + } + } + }, + { + "label": "Test", + "type": "shell", + "command": "npx", + "args": ["hereby", "test"], + "group": "test", + "problemMatcher": ["$go"] + }, + { + "label": "Lint", + "type": "shell", + "command": "npx", + "args": ["hereby", "lint"], + "problemMatcher": ["$go"] + }, + { + "label": "Generate", + "type": "shell", + "command": "npx", + "args": ["hereby", "generate"], + "problemMatcher": ["$go"] + }, + { + "label": "Build extension", + "type": "npm", + "script": "extension:build", + "group": "build", + "problemMatcher": [ + "$tsc", + // Copy-paste from https://github.com/connor4312/esbuild-problem-matchers to avoid the extension dependency + { + "owner": "esbuild", + "severity": "error", + "applyTo": "closedDocuments", + "source": "esbuild", + "fileLocation": "relative", + "pattern": [ + { + "regexp": "^[✘▲] \\[([A-Z]+)\\] (.+)", + "severity": 1, + "message": 2 + }, + { + "regexp": "^(?:\\t| {4})(?!\\s)([^:]+)(?::([0-9]+))?(?::([0-9]+))?:$", + "file": 1, + "line": 2, + "column": 3 + } + ] + } + ] + }, + { + "label": "Watch extension", + "type": "npm", + "script": "extension:watch", + "group": "build", + "isBackground": true, + "problemMatcher": [ + // Copy-paste from https://github.com/connor4312/esbuild-problem-matchers to avoid the extension dependency + { + "owner": "esbuild-watch", + "severity": "error", + "applyTo": "closedDocuments", + "source": "esbuild", + "fileLocation": "relative", + "pattern": [ + { + "regexp": "^[✘▲] \\[([A-Z]+)\\] (.+)", + "severity": 1, + "message": 2 + }, + { + "regexp": "^(?:\\t| {4})(?!\\s)([^:]+)(?::([0-9]+))?(?::([0-9]+))?:$", + "file": 1, + "line": 2, + "column": 3 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "\\[watch\\] build started" + }, + "endsPattern": { + "regexp": "\\[watch\\] build finished" + } + } + } + ] + }, + { + "label": "Watch for extension run", + "dependsOn": ["Watch extension", "Watch compiler"] + } + ] +} diff --git a/Herebyfile.mjs b/Herebyfile.mjs index d84265355b9a2..9217867548b76 100644 --- a/Herebyfile.mjs +++ b/Herebyfile.mjs @@ -1,3016 +1,3071 @@ -// @ts-check - -import AdmZip from "adm-zip"; -import chokidar from "chokidar"; -import { task } from "hereby"; -import assert from "node:assert"; -import crypto from "node:crypto"; -import fs from "node:fs"; -import { createRequire } from "node:module"; -import os from "node:os"; -import path from "node:path"; -import url from "node:url"; -import { - parseArgs, - styleText, -} from "node:util"; -import * as tar from "tar"; -import { xSync } from "tinyexec"; -import { - enableFileFingerprintCache, - run, -} from "./tools/scripts/gen/utils.mts"; - -enableFileFingerprintCache(); - -if (process.platform === "win32") { - process.chdir(fs.realpathSync.native(process.cwd())); -} - -const __filename = url.fileURLToPath(new URL(import.meta.url)); -const __dirname = path.dirname(__filename); - -const isCI = !!process.env.CI || !!process.env.TF_BUILD; -const stableThreeComponentVersionPatternSource = String.raw`^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$`; -const stableThreeComponentVersionPattern = new RegExp(stableThreeComponentVersionPatternSource); - -/** @typedef {import("./tools/scripts/gen/utils.mts").RunOptions} RunOptions */ - -/** - * @param {string} command - * @param {readonly string[]} [args] - * @param {Omit} [options] - */ -function runOutput(command, args, options) { - return run(command, args, { ...options, captureOutput: true }); -} - -/** - * @param {string} name - * @param {boolean} defaultValue - * @returns {boolean} - */ -function parseEnvBoolean(name, defaultValue = false) { - name = "TSGO_HEREBY_" + name.toUpperCase(); - - const value = process.env[name]; - if (!value) { - return defaultValue; - } - switch (value.toUpperCase()) { - case "1": - case "TRUE": - case "YES": - case "ON": - return true; - case "0": - case "FALSE": - case "NO": - case "OFF": - return false; - } - throw new Error(`Invalid value for ${name}: ${value}`); -} - -const { values: rawOptions } = parseArgs({ - args: process.argv.slice(2), - options: { - tests: { type: "string", short: "t" }, - fix: { type: "boolean" }, - force: { type: "boolean", default: parseEnvBoolean("FORCE") }, - api: { type: "boolean" }, - all: { type: "boolean" }, - debug: { type: "boolean" }, - dirty: { type: "boolean" }, - release: { type: "boolean" }, - - setPrerelease: { type: "string" }, - forRelease: { type: "boolean" }, - respectGoEnv: { type: "boolean" }, - vscodeTypescriptRelease: { type: "boolean" }, - - race: { type: "boolean", default: parseEnvBoolean("RACE") }, - noembed: { type: "boolean", default: parseEnvBoolean("NOEMBED") }, - concurrentTestPrograms: { type: "boolean", default: parseEnvBoolean("CONCURRENT_TEST_PROGRAMS") }, - coverage: { type: "boolean", default: parseEnvBoolean("COVERAGE") }, - }, - strict: false, - allowPositionals: true, - allowNegative: true, -}); - -// We can't use parseArgs' strict mode as it errors on hereby's --tasks flag. -/** - * @typedef {{ [K in keyof typeof rawOptions as {} extends Record ? never : K]: typeof rawOptions[K] }} Options - */ -const options = /** @type {Options} */ (rawOptions); - -// Native release branches can edit these constants to publish a fixed stable version. -// Main publishes prerelease builds of the TypeScript package. -const nativePreviewReleaseProfile = /** @type {"native-preview" | "typescript"} */ ("typescript"); -const nativePreviewReleaseVersion = /** @type {string | undefined} */ (undefined); -const releaseVscodeTypescript = !!options.vscodeTypescriptRelease; -const produceNativePreviewVsix = releaseVscodeTypescript; -const produceTypeScriptNightlyVsix = !nativePreviewReleaseVersion && !releaseVscodeTypescript; -const usePublishedPlatformPackagesForVsix = releaseVscodeTypescript; -const produceAnyVsix = produceNativePreviewVsix || produceTypeScriptNightlyVsix; -const publishAsTypescript = nativePreviewReleaseProfile === "typescript"; - -if (releaseVscodeTypescript && options.setPrerelease) { - throw new Error("vscode-typescript releases use the extension's package.json version and do not accept setPrerelease"); -} -if (!releaseVscodeTypescript && options.forRelease && !options.setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix)) { - throw new Error("forRelease requires setPrerelease unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled"); -} -if (options.respectGoEnv && options.forRelease) { - throw new Error("respectGoEnv cannot be combined with forRelease"); -} -if (options.respectGoEnv && options.setPrerelease) { - throw new Error("respectGoEnv requires the version declared in the source"); -} -if (releaseVscodeTypescript && !publishAsTypescript) { - throw new Error("vscode-typescript releases require nativePreviewReleaseProfile to be 'typescript'"); -} - -const defaultGoBuildTags = [ - ...(options.noembed ? ["noembed"] : []), -]; - -/** - * @param {...string} extra - * @returns {string[]} - */ -function goBuildTags(...extra) { - const tags = new Set(defaultGoBuildTags.concat(extra)); - return tags.size ? [`-tags=${[...tags].join(",")}`] : []; -} - -const goBuildFlags = [ - ...(options.race ? ["-race"] : []), - // https://github.com/go-delve/delve/blob/62cd2d423c6a85991e49d6a70cc5cb3e97d6ceef/Documentation/usage/dlv_exec.md?plain=1#L12 - ...(options.debug ? ["-gcflags=all=-N -l"] : []), -]; - -const goBuildEnv = { - ...(options.race ? {} : { CGO_ENABLED: "0" }), -}; - -/** - * @template T - * @param {() => T} fn - * @returns {() => T} - */ -function memoize(fn) { - /** @type {T} */ - let value; - return () => { - if (fn !== undefined) { - value = fn(); - fn = /** @type {any} */ (undefined); - } - return value; - }; -} - -/** - * @param {string} pattern - * @param {string[]} [exclude] - */ -async function globFiles(pattern, exclude) { - const files = []; - const absolute = path.isAbsolute(pattern); - for await (const entry of fs.promises.glob(pattern, { exclude, withFileTypes: true })) { - if (entry.isFile()) { - const file = path.join(entry.parentPath, entry.name); - files.push(absolute ? file : path.relative(process.cwd(), file)); - } - } - return files; -} - -/** - * @param {(() => Promise)[]} tasks - * @param {number} concurrency - */ -async function runWithConcurrencyLimit(tasks, concurrency) { - const queue = tasks.values(); - /** @type {unknown[]} */ - const errors = []; - const workers = Array.from({ length: Math.min(concurrency, tasks.length) }, async () => { - for (const task of queue) { - try { - await task(); - } - catch (error) { - errors.push(error); - } - } - }); - await Promise.all(workers); - if (errors.length === 1) { - throw errors[0]; - } - if (errors.length > 1) { - throw new AggregateError(errors, `${errors.length} concurrent tasks failed`); - } -} - -const builtLocal = "./built/local"; - -const libsDir = "./tsc/internal/bundled/libs"; -const libsRegexp = /(?:^|[\\/])internal[\\/]bundled[\\/]libs[\\/]/; - -/** - * @param {string} out - */ -async function generateLibs(out) { - await fs.promises.mkdir(out, { recursive: true }); - - const libs = await fs.promises.readdir(libsDir); - - await Promise.all(libs.map(async lib => { - fs.promises.copyFile(path.join(libsDir, lib), path.join(out, lib)); - })); -} - -export const lib = task({ - name: "lib", - description: "Copies the libs to built/local.", - run: () => generateLibs(builtLocal), -}); - -/** - * Gets the release build flags for stripping debug info. - * @param {string} [versionOverride] Optional version to embed in the binary. - * @returns {string[]} - */ -function getReleaseBuildFlags(versionOverride) { - let ldflags = "-ldflags=-s -w"; - if (versionOverride) { - ldflags += ` -X github.com/microsoft/TypeScript/tsc/internal/core.version=${versionOverride}`; - } - return ["-trimpath", ldflags]; -} - -/** - * @param {object} [opts] - * @param {string} [opts.out] - * @param {AbortSignal} [opts.abortSignal] - * @param {Record} [opts.env] - * @param {string[]} [opts.extraFlags] - */ -function buildTsc(opts) { - opts ||= {}; - const out = opts.out ?? path.resolve("./built/local/tsc" + (process.platform === "win32" ? ".exe" : "")); - const env = { ...(options.respectGoEnv ? {} : goBuildEnv), ...opts.env }; - return run("go", ["build", ...goBuildFlags, ...(opts.extraFlags ?? []), ...goBuildTags("noembed"), "-o", out, "./cmd/tsc"], { - signal: opts.abortSignal, - env, - cwd: "./tsc", - }); -} - -export const tscBuild = task({ - name: "tsc:build", - description: "Builds the tsc binary.", - run: async () => { - await buildTsc({ extraFlags: options.release ? getReleaseBuildFlags() : [] }); - }, -}); - -export const tsgo = task({ - name: "tsgo", - dependencies: [lib, tscBuild], -}); - -export const local = task({ - name: "local", - dependencies: [tsgo], -}); - -export const build = task({ - name: "build", - dependencies: [local], -}); - -export const buildWatch = task({ - name: "build:watch", - description: "Builds the tsc binary and watches for changes.", - run: async () => { - await watchDebounced("build:watch", async (paths, abortSignal) => { - let libsChanged = false; - let goChanged = false; - - if (paths) { - for (const p of paths) { - if (libsRegexp.test(p)) { - libsChanged = true; - } - else if (p.endsWith(".go")) { - goChanged = true; - } - if (libsChanged && goChanged) { - break; - } - } - } - else { - libsChanged = true; - goChanged = true; - } - - if (libsChanged) { - console.log("Generating libs..."); - await generateLibs(builtLocal); - } - - if (goChanged) { - console.log("Building tsgo..."); - await buildTsc({ abortSignal }); - } - }, { - paths: ["tsc/cmd", "tsc/internal"], - ignored: path => /[\\/]testdata[\\/]/.test(path), - }); - }, -}); - -export const cleanBuilt = task({ - name: "clean:built", - hiddenFromTaskList: true, - run: () => rimraf("built"), -}); - -/** @type {(() => Promise)[]} */ -const goGenerateActions = []; - -async function runGenerateGo() { - for (const generate of goGenerateActions) { - await generate(); - } - // These generators load Go packages, so all generated Go sources must be current. - await runGenerateEnums(); - await runGenerateAPI(); -} - -export const generateGo = task({ - name: "generate:go", - description: "Runs the project's Go code generators directly. Pass --force to regenerate unchanged files.", - run: runGenerateGo, -}); - -const getGoGenerateEnvironment = memoize(async () => { - const { stdout } = await runOutput("go", ["env", "-json", "GOOS", "GOARCH", "GOROOT"], { cwd: "./tsc" }); - return /** @type {{ GOOS: string; GOARCH: string; GOROOT: string }} */ (JSON.parse(stdout)); -}); - -/** @typedef {import("./tools/scripts/gen/cache.mts").CacheOptions & { file: string }} GoGenerator */ - -/** - * @param {string} name - * @param {GoGenerator} generator - */ -async function runGoGenerator(name, { file, ...spec }) { - const { default: cache } = await import("./tools/scripts/gen/cache.mts"); - const sourcePath = path.resolve(__dirname, file); - const source = fs.readFileSync(sourcePath, "utf8"); - const packageName = /^package\s+(\w+)/m.exec(source)?.[1]; - const line = source.split(/\r?\n/).findIndex(line => line.trimEnd() === `//go:generate npx hereby ${name}`) + 1; - assert(packageName && line, `Missing package or generation directive in ${file}`); - const goEnv = await getGoGenerateEnvironment(); - const pathKey = process.platform === "win32" ? Object.keys(process.env).find(key => key.toUpperCase() === "PATH") ?? "PATH" : "PATH"; - const goBin = path.join(goEnv.GOROOT, "bin"); - const searchPath = (process.env[pathKey] ?? "").split(path.delimiter).filter(entry => path.resolve(entry) !== goBin); - await cache({ - ...spec, - cwd: spec.cwd ?? path.dirname(sourcePath), - inputs: [__filename, sourcePath, ...spec.inputs], - envInputs: [ - ...(spec.envInputs ?? ["GOOS", "GOARCH", "GOFLAGS", "GOTOOLCHAIN", "GOEXPERIMENT", "CGO_ENABLED", "GOWORK"]), - "GOROOT", - "GOFILE", - "GOLINE", - "GOPACKAGE", - "DOLLAR", - ], - env: { - ...goEnv, - GOFILE: path.basename(sourcePath), - GOLINE: String(line), - GOPACKAGE: packageName, - DOLLAR: "$", - [pathKey]: [goBin, ...searchPath].join(path.delimiter), - }, - force: !!options.force, - }); -} - -/** - * @param {string} name - * @param {GoGenerator[] | (() => Promise)} generators - */ -function goGenerateTask(name, generators) { - const run = typeof generators === "function" ? generators : async () => { - for (const generator of generators) await runGoGenerator(name, generator); - }; - goGenerateActions.push(run); - return task({ - name, - description: `Generates ${name.slice("generate:".length)} files. Pass --force to regenerate unchanged files.`, - run, - }); -} - -/** - * @param {string} file - * @param {string} type - * @param {string} output - * @param {string} [trimPrefix] - * @returns {GoGenerator} - */ -function stringerGenerator(file, type, output, trimPrefix) { - return { - file, - inputs: [], - outputs: [output], - commands: [ - ["go", "tool", "golang.org/x/tools/cmd/stringer", `-type=${type}`, ...(trimPrefix ? [`-trimprefix=${trimPrefix}`] : []), `-output=${output}`], - ["dprint", "fmt", output], - ], - }; -} - -/** - * @param {string} file - * @param {string} type - * @param {string} output - * @param {{ source?: string; packageName: string; inputs?: string[]; stub?: boolean }} options - * @returns {GoGenerator} - */ -function moqGenerator(file, type, output, { source = ".", packageName, inputs = [], stub = false }) { - return { - file, - inputs, - outputs: [output], - commands: [ - ["go", "tool", "github.com/matryer/moq", ...(stub ? ["-stub"] : []), "-fmt", "goimports", "-pkg", packageName, "-out", output, source, type], - ["dprint", "fmt", output], - ], - }; -} - -async function runGenerateASTStringer() { - await runGoGenerator("generate:ast-stringer", stringerGenerator("tsc/internal/ast/kind_generated.go", "Kind", "kind_stringer_generated.go")); -} - -export const generateASTStringer = goGenerateTask("generate:ast-stringer", runGenerateASTStringer); - -export const generateBundled = goGenerateTask("generate:bundled", [{ - file: "tsc/internal/bundled/bundled.go", - inputs: ["generate.go", "CopyrightNotice.txt", "libs/*"], - outputs: ["libs_generated.go", "embed_generated.go"], - commands: [["go", "run", "generate.go"]], -}]); - -export const generateChecker = goGenerateTask("generate:checker", [ - stringerGenerator("tsc/internal/checker/types.go", "SignatureKind", "stringer_generated.go"), -]); - -async function runGenerateOptionDefinitions() { - const { default: generate } = await import("./tools/scripts/tsc/generate-options.ts"); - await generate(!!options.force); -} - -async function runGenerateCompilerOptions() { - await runGenerateOptionDefinitions(); - await runGoGenerator("generate:compileroptions", stringerGenerator("tsc/internal/core/options_generated.go", "ModuleKind", "modulekind_stringer_generated.go", "ModuleKind")); - await runGoGenerator("generate:compileroptions", stringerGenerator("tsc/internal/core/options_generated.go", "ScriptTarget", "scripttarget_stringer_generated.go", "ScriptTarget")); -} - -goGenerateActions.push(runGenerateCompilerOptions); -export const generateCompilerOptions = task({ - name: "generate:compileroptions", - description: "Generates compiler options and their dependent API files. Pass --force to regenerate unchanged files.", - run: async () => { - await runGenerateCompilerOptions(); - await runGenerateEnums(); - await runGenerateAPI(); - }, -}); - -export const generateLanguageVariant = goGenerateTask("generate:languagevariant", [ - stringerGenerator("tsc/internal/core/languagevariant.go", "LanguageVariant", "languagevariant_stringer_generated.go"), -]); - -export const generateScriptKind = goGenerateTask("generate:scriptkind", [ - stringerGenerator("tsc/internal/core/scriptkind.go", "ScriptKind", "scriptkind_stringer_generated.go"), -]); - -export const generateTristate = goGenerateTask("generate:tristate", [ - stringerGenerator("tsc/internal/core/tristate.go", "Tristate", "tristate_stringer_generated.go"), -]); - -export const generateDiagnostics = goGenerateTask("generate:diagnostics", [ - { - file: "tsc/internal/diagnostics/diagnostics.go", - inputs: ["generate.go", "diagnosticMessages.json", "../../../tools/LocProject.json", "../{collections,json}/*.go", "loc/*.generated.json"], - exclude: ["**/*_test.go"], - outputs: ["diagnostics_generated.go", "diagnosticMessages.generated.json", "loc_generated.go", "loc/*.json.gz"], - commands: [ - [ - "go", - "run", - "generate.go", - "-diagnostics", - "diagnostics_generated.go", - "-loc", - "loc_generated.go", - "-locdir", - "loc", - "-locproject", - "../../../tools/LocProject.json", - "-locsource", - "diagnosticMessages.generated.json", - ], - ["dprint", "fmt", "diagnostics_generated.go", "loc_generated.go"], - ], - }, - stringerGenerator("tsc/internal/diagnostics/diagnostics.go", "Category", "stringer_generated.go"), -]); - -export const generateAutoImport = goGenerateTask("generate:autoimport", [ - stringerGenerator("tsc/internal/ls/autoimport/export.go", "ExportSyntax", "export_stringer_generated.go"), -]); - -export const generateProject = goGenerateTask("generate:project", [ - stringerGenerator("tsc/internal/project/project.go", "Kind", "project_stringer_generated.go", "Kind"), -]); - -export const generateProjectTestUtil = goGenerateTask("generate:projecttestutil", [ - moqGenerator("tsc/internal/testutil/projecttestutil/projecttestutil.go", "Client", "clientmock_generated.go", { - source: "../../project", - packageName: "projecttestutil", - inputs: ["../../project/client.go"], - stub: true, - }), - moqGenerator("tsc/internal/testutil/projecttestutil/projecttestutil.go", "NpmExecutor", "npmexecutormock_generated.go", { - source: "../../project/ata", - packageName: "projecttestutil", - inputs: ["../../project/ata/ata.go"], - stub: true, - }), -]); - -export const generateVFS = goGenerateTask("generate:vfs", [ - moqGenerator("tsc/internal/vfs/vfs.go", "FS", "vfsmock/mock_generated.go", { packageName: "vfsmock" }), -]); - -export const generateVFSMatch = goGenerateTask("generate:vfsmatch", [ - stringerGenerator("tsc/internal/vfs/vfsmatch/vfsmatch.go", "Usage", "stringer_generated.go", "Usage"), -]); - -export const generateUnicode = goGenerateTask("generate:unicode", async () => { - const { default: generate } = await import("./tsc/internal/stringutil/_scripts/generate-unicode-data.mts"); - await generate(!!options.force); -}); - -async function runGenerateExtension() { - const { default: cache } = await import("./tools/scripts/gen/cache.mts"); - await cache({ - cwd: __dirname, - inputs: [__filename, "tools/scripts/gen/extensionLocalization.mts", "packages/vscode-typescript/package.json", "packages/vscode-typescript/src/**/*"], - outputs: ["packages/vscode-typescript/l10n/bundle.l10n.json"], - commands: [["npm", "run", "-w", "native-preview", "generateLocBundle"]], - envInputs: [], - force: !!options.force, - }); -} - -export const generateExtension = task({ - name: "generate:extension", - description: "Generates files in the extension. Pass --force to regenerate unchanged files.", - run: runGenerateExtension, -}); - -async function runGenerateExtensionTest() { - const { default: cache } = await import("./tools/scripts/gen/cache.mts"); - await cache({ - cwd: __dirname, - inputs: [__filename, "tools/scripts/gen/extensionLocalization.mts", "packages/vscode-typescript/package.json", "packages/vscode-typescript/l10n/bundle.l10n.json", "packages/vscode-typescript/package.nls.json"], - outputs: ["packages/vscode-typescript/l10n/bundle.l10n.qps-ploc.json", "packages/vscode-typescript/package.nls.qps-ploc.json"], - commands: [["npm", "run", "-w", "native-preview", "generateLocTest"]], - envInputs: [], - force: !!options.force, - }); -} - -export const generateExtensionTest = task({ - name: "generate:extension-test", - description: "Generates pseudo-localized extension resources. Pass --force to regenerate unchanged files.", - dependencies: [generateExtension], - run: runGenerateExtensionTest, -}); - -async function runGenerateLSP() { - const { GeneratedFile } = await import("./tools/scripts/gen/generatedFile.mts"); - const directory = path.join(__dirname, "tools/scripts/lsp"); - const modelFiles = ["metaModel.json", "metaModelSchema.mts"].map(file => new GeneratedFile(path.join(directory, file), [path.join(directory, "fetchModel.mts"), path.join(__dirname, "package-lock.json")])); - if (!modelFiles.every(file => file.isCurrent(!!options.force))) { - for (const file of modelFiles) file.invalidate(); - const { default: fetchModel } = await import("./tools/scripts/lsp/fetchModel.mts"); - await fetchModel(); - for (const file of modelFiles) file.markCurrent(); - } - const output = new GeneratedFile(path.join(__dirname, "tsc/internal/lsp/lsproto/lsp_generated.go"), [ - __filename, - path.join(directory, "generate.mts"), - ...modelFiles.map(file => file.fileName), - ]); - if (!output.isCurrent(!!options.force)) { - output.invalidate(); - const { default: generate } = await import("./tools/scripts/lsp/generate.mts"); - await generate(); - output.markCurrent(); - } - else { - console.log("LSP bindings are up to date."); - } - const typeScriptOutput = new GeneratedFile(path.join(__dirname, "packages/typescript/src/vscode/protocol.generated.ts"), [ - __filename, - path.join(directory, "generate.mts"), - path.join(directory, "generateTypeScript.mts"), - path.join(directory, "typeScript.mts"), - path.join(__dirname, "packages/vscode-typescript/src/lspMiddleware.ts"), - ...modelFiles.map(file => file.fileName), - ]); - if (!typeScriptOutput.isCurrent(!!options.force)) { - typeScriptOutput.invalidate(); - const { default: generate } = await import("./tools/scripts/lsp/generateTypeScript.mts"); - await generate(); - typeScriptOutput.markCurrent(); - } -} - -export const generateLSP = task({ - name: "generate:lsp", - description: "Generates Go LSP bindings and extension API types from the pinned protocol model. Pass --force to regenerate unchanged files.", - run: runGenerateLSP, -}); - -async function runGenerateEnums() { - const { default: generate } = await import("./tools/scripts/tsc/generate-enums.ts"); - await generate(!!options.force); -} - -export const generateEnums = task({ - name: "generate:enums", - description: "Generates TypeScript enums from metadata and Go source. Pass --force to regenerate unchanged files.", - run: runGenerateEnums, -}); - -async function runGenerateAST() { - const { default: generate } = await import("./tools/scripts/tsc/generate.ts"); - generate(!!options.force); - await runGenerateASTStringer(); -} - -export const generateAST = task({ - name: "generate:ast", - description: "Generates AST, kind stringer, and encoder files from ast.json. Pass --force to regenerate unchanged files.", - run: runGenerateAST, -}); - -async function runGenerateSync() { - const { generateSync } = await import("./packages/typescript/scripts/generateSync.ts"); - generateSync(!!options.force); -} - -export const generateSync = task({ - name: "generate:sync", - description: "Generates synchronous and generator APIs and tests. Pass --force to regenerate unchanged files.", - run: runGenerateSync, -}); - -async function runGeneratePreferences() { - await runGoGenerator("generate:preferences", { - file: "tsc/internal/ls/lsutil/userpreferences.go", - cwd: __dirname, - inputs: ["tools/userPreferences.schema.json", "tools/gen-preferences/*.go"], - exclude: ["**/*_test.go"], - envInputs: [], - outputs: [ - "tsc/internal/ls/lsutil/userpreferences_generated.go", - "packages/typescript/src/api/userPreferences.generated.ts", - ], - commands: [ - ["go", "-C", "./tools", "run", "./gen-preferences", "./userPreferences.schema.json", "../tsc/internal/ls/lsutil/userpreferences_generated.go", "../packages/typescript/src/api/userPreferences.generated.ts"], - ["dprint", "fmt", "tsc/internal/ls/lsutil/userpreferences_generated.go", "packages/typescript/src/api/userPreferences.generated.ts"], - ], - }); -} - -export const generatePreferences = goGenerateTask("generate:preferences", runGeneratePreferences); - -async function runGenerateAPI() { - await runGeneratePreferences(); - await runGoGenerator("generate:api", { - file: "tsc/internal/api/proto.go", - cwd: __dirname, - inputs: [ - "tsc/internal/api/*.go", - "tsc/internal/api/requestfilesystem/*.go", - "tsc/internal/core/*.go", - "tsc/internal/checker/types.go", - "tsc/internal/diagnostics/diagnostics.go", - "tsc/internal/tspath/path.go", - "tools/gen-proto/*.go", - ], - exclude: ["**/*_test.go"], - envInputs: [], - outputs: ["packages/typescript/src/api/proto.generated.ts"], - commands: [ - ["go", "-C", "./tools", "run", "./gen-proto", "../tsc/internal/api/proto.go", "../packages/typescript/src/api/proto.generated.ts"], - ["dprint", "fmt", "packages/typescript/src/api/proto.generated.ts"], - ], - }); -} - -export const generateAPI = task({ - name: "generate:api", - description: "Generates API files. Pass --force to regenerate unchanged files.", - run: runGenerateAPI, -}); - -const vendorJsonrpcDir = "packages/typescript/vendor/vscode-jsonrpc"; -const vendorJsonrpcSrc = "node_modules/vscode-jsonrpc"; -// Files copied verbatim from the installed vscode-jsonrpc package into the -// vendored copy. Only the runtime files needed by the `#vscode-jsonrpc/node` -// import (lib + typings + package.json) plus license/readme are vendored. -const vendorJsonrpcFiles = ["package.json", "README.md", "License.txt", "lib", "typings"]; - -async function runGenerateVendor() { - const { GeneratedFile } = await import("./tools/scripts/gen/generatedFile.mts"); - const src = path.join(__dirname, vendorJsonrpcSrc); - const dest = path.join(__dirname, vendorJsonrpcDir); - if (!fs.existsSync(src)) { - throw new Error(`${vendorJsonrpcSrc} is not installed; run \`npm ci\` first.`); - } - const manifest = new GeneratedFile(path.join(dest, "package.json"), [__filename, path.join(src, "package.json")]); - if (manifest.isCurrent(!!options.force)) { - console.log("Vendored vscode-jsonrpc files are up to date."); - return; - } - manifest.invalidate(); - await rimraf(dest); - await fs.promises.mkdir(dest, { recursive: true }); - for (const file of vendorJsonrpcFiles) { - await cpRecursive(path.join(src, file), path.join(dest, file)); - } - manifest.markCurrent(); -} - -export const generateVendor = task({ - name: "generate:vendor", - description: "Updates the vendored copy of vscode-jsonrpc from node_modules. Pass --force to regenerate unchanged files.", - run: runGenerateVendor, -}); - -const generateCompiler = task({ - name: "generate:compiler", - hiddenFromTaskList: true, - dependencies: [generateAST, generateLSP], - run: runGenerateGo, -}); - -export const generate = task({ - name: "generate", - description: "Runs all code generation, including AST, LSP, APIs, extension localization, and vendored dependencies.", - dependencies: [generateCompiler, generateSync, generateExtensionTest, generateVendor], -}); - -const coverageDir = path.join(__dirname, "coverage"); - -const ensureCoverageDirExists = memoize(() => { - if (options.coverage) { - fs.mkdirSync(coverageDir, { recursive: true }); - } -}); - -/** - * @param {string} taskName - */ -function goTestFlags(taskName) { - ensureCoverageDirExists(); - return [ - ...goBuildFlags, - ...goBuildTags(), - ...(options.tests ? [`-run=${options.tests}`] : []), - ...(options.coverage ? [`-coverprofile=${path.join(coverageDir, "coverage." + taskName + ".out")}`, "-coverpkg=./..."] : []), - ]; -} - -function getGODEBUG() { - const key = "tracebackancestors"; - const setting = `${key}=10`; - const existing = process.env.GODEBUG ?? ""; - if (!existing) return setting; - if (existing.includes(`${key}=`)) return existing; - return `${existing},${setting}`; -} - -const goTestEnv = { - GODEBUG: getGODEBUG(), - ...(options.concurrentTestPrograms ? { TS_TEST_PROGRAM_SINGLE_THREADED: "false" } : {}), - // Go test caching takes a long time on Windows. - // https://github.com/golang/go/issues/72992 - ...(process.platform === "win32" ? { GOFLAGS: "-count=1" } : {}), -}; - -const baselineTrackingEnabled = false && ![ - options.tests, - options.noembed, - options.concurrentTestPrograms, - options.race, - options.dirty, -].some(Boolean); - -const goTestSumFlags = [ - "--format-hide-empty-pkg", - "--hide-summary", - "skipped", -]; - -/** - * Collects all baseline files that were used during the test run. - * @param {string} trackingDir - * @returns {Promise>} - */ -async function collectUsedBaselines(trackingDir) { - /** @type {Set} */ - const usedBaselines = new Set(); - if (!fs.existsSync(trackingDir)) { - return usedBaselines; - } - - const trackingFiles = await fs.promises.readdir(trackingDir); - for (const file of trackingFiles) { - const content = await fs.promises.readFile(path.join(trackingDir, file), "utf-8"); - for (const line of content.split("\n")) { - const trimmed = line.trim(); - if (trimmed) { - usedBaselines.add(trimmed); - } - } - } - return usedBaselines; -} - -/** - * Checks for unused baseline files and reports them. - * @param {string} trackingDir - * @returns {Promise} List of unused baseline file paths. - */ -async function checkUnusedBaselines(trackingDir) { - const usedBaselines = await collectUsedBaselines(trackingDir); - if (usedBaselines.size === 0) { - // No baselines recorded - either no tests ran or tracking wasn't set up properly - return []; - } - - const allBaselines = await globFiles(`${refBaseline}/**`); - const unusedBaselines = allBaselines - .map(p => path.relative(refBaseline, p)) - .filter(p => !usedBaselines.has(p)); - - return unusedBaselines; -} - -/** - * @param {string} taskName - */ -function gotestsumArgs(taskName) { - return [ - ...goTestSumFlags, - "--", - ...goTestFlags(taskName), - ]; -} - -/** - * @param {string} taskName - */ -function goTest(taskName) { - return ["go", "test"].concat(goTestFlags(taskName)); -} - -async function runTests() { - if (!options.dirty) { - await rimraf(localBaseline); - await fs.promises.mkdir(localBaseline, { recursive: true }); - } - - // Create a tmp directory for baseline tracking if enabled - /** @type {string | undefined} */ - let trackingDir; - /** @type {(() => Promise) | undefined} */ - let cleanupTracking; - - if (baselineTrackingEnabled) { - const tempTrackingDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-baseline-tracking-")); - trackingDir = tempTrackingDir; - cleanupTracking = () => rimraf(tempTrackingDir); - } - - try { - const testEnv = { - ...goTestEnv, - ...(trackingDir ? { TSGO_BASELINE_TRACKING_DIR: trackingDir } : {}), - }; - await gotestsumTool.run([...gotestsumArgs("tests"), "./...", ...(isCI ? ["--timeout=45m"] : [])], { - env: testEnv, - cwd: "./tsc", - }); - - // Check for unused baselines after tests complete - if (trackingDir) { - const unusedBaselines = await checkUnusedBaselines(trackingDir); - if (unusedBaselines.length > 0) { - console.error(styleText("red", `\nFound ${unusedBaselines.length} unused baseline file(s):`)); - for (const baseline of unusedBaselines.slice(0, 20)) { - console.error(styleText("red", ` ${baseline}`)); - } - if (unusedBaselines.length > 20) { - console.error(styleText("red", ` ... and ${unusedBaselines.length - 20} more`)); - } - - // Create .delete files for each unused baseline so baseline-accept can remove them - for (const baseline of unusedBaselines) { - const deleteFilePath = path.join(localBaseline, baseline + ".delete"); - await fs.promises.mkdir(path.dirname(deleteFilePath), { recursive: true }); - await fs.promises.writeFile(deleteFilePath, ""); - } - console.error(styleText("red", `\nRun 'hereby baseline-accept' to delete them.`)); - - throw new Error(`Found ${unusedBaselines.length} unused baseline file(s). Run 'hereby baseline-accept' to delete them.`); - } - } - } - finally { - if (cleanupTracking) { - await cleanupTracking(); - } - } -} - -async function runTestExtension() { - await run("npm", ["test", "-w", "native-preview"]); -} - -export const testTsc = task({ - name: "test:tsc", - description: "Runs all tests in the tsc module.", - run: runTests, -}); - -export const testExtension = task({ - name: "test:extension", - description: "Runs the VS Code extension tests.", - run: runTestExtension, -}); - -export const test = task({ - name: "test", - description: "Alias for test:tsc.", - dependencies: [testTsc], -}); - -async function runTestBenchmarks() { - // Run the benchmarks once to ensure they compile and run without errors. - const command = goTest("benchmarks"); - await run(command[0], [...command.slice(1), "-run=-", "-bench=.", "-benchtime=1x", "./..."], { env: goTestEnv, cwd: "./tsc" }); -} - -export const testBenchmarks = task({ - name: "test:benchmarks", - description: "Runs Go benchmarks once; excluded from validate.", - run: runTestBenchmarks, -}); - -async function runTestTools() { - await gotestsumTool.run([...gotestsumArgs("tools"), "./..."], { env: goTestEnv, cwd: path.join(__dirname, "tools") }); -} - -async function runTestAPI() { - // Running the package script doesn't work on Windows; some path escaping isn't done correctly and the test runner runs no tests. - await run("node", ["--conditions", "@typescript/source", "--test", "./test/**/*.test.ts"], { cwd: "./packages/typescript" }); -} - -async function runTestAPIBenchmarks() { - for (const variant of ["async", "sync", "generators"]) { - await run("node", ["--conditions", "@typescript/source", `./test/${variant}/api.bench.ts`, "--singleIteration"], { cwd: "./packages/typescript" }); - } -} - -export const testTools = task({ - name: "test:tools", - description: "Runs all tests in the tools module.", - run: runTestTools, -}); - -export const testCodegen = task({ - name: "test:codegen", - description: "Runs incremental codegen tests.", - run: async () => { - await run("go", ["-C", "tsc", "mod", "download"]); - await run("node", ["--test", "--test-concurrency=1", "./tools/scripts/gen/*.test.mts", "./tools/scripts/tsc/*.test.ts"]); - }, -}); - -export const buildAPI = task({ - name: "build:api", - description: "Builds @typescript/typescript JS API.", - run: async () => { - await run("npm", ["run", "-w", "@typescript/typescript", "build"]); - }, -}); - -async function runBuildAPITests(generateSources = true) { - if (generateSources) await runGenerateSync(); - await run("npm", ["run", "-w", "@typescript/typescript", "build:test"]); -} - -export const buildAPITests = task({ - name: "build:api:test", - description: "Builds the @typescript/typescript JS API tests.", - dependencies: [generateEnums, generateAPI], - run: runBuildAPITests, -}); - -export const testAPI = task({ - name: "test:api", - description: "Runs the @typescript/typescript JS API tests.", - dependencies: [tsgo, buildAPITests], - run: runTestAPI, -}); - -export const testAPIBenchmarks = task({ - name: "test:benchmarks:api", - description: "Runs async, sync, and generator API benchmarks once; excluded from validate.", - dependencies: [tsgo, buildAPITests], - run: runTestAPIBenchmarks, -}); - -export const testAll = task({ - name: "test:all", - description: "Runs compiler, extension, benchmark, tools, and API tests. Codegen tests are opt-in via test:codegen.", - dependencies: [tsgo, buildAPITests], - run: async () => { - // Prevent interleaving by running these directly instead of in parallel. - await runTests(); - await runTestExtension(); - await runTestBenchmarks(); - await runTestTools(); - await runTestAPI(); - await runTestAPIBenchmarks(); - }, -}); - -/** - * @param {{ - * toolPath: string; - * globs: string[]; - * build: (toolPath: string) => Promise; - * exclude?: string[]; - * }} spec - */ -function createCachedTool({ toolPath, globs, build, exclude }) { - toolPath = path.resolve(toolPath); - const hashPath = toolPath + ".hash"; - const files = fs.globSync(globs, { exclude }).filter(file => fs.statSync(file).isFile()).map(file => path.resolve(file)); - files.sort(); - - const ensure = memoize(async () => { - const hash = crypto.createHash("sha256"); - for (const file of files) { - hash.update(file); - hash.update(fs.readFileSync(file)); - } - const digest = hash.digest("hex") + "\n"; - if ( - fs.existsSync(toolPath) - && fs.existsSync(hashPath) - && fs.readFileSync(hashPath, "utf8") === digest - ) { - return; - } - - await build(toolPath); - fs.writeFileSync(hashPath, digest); - }); - - return { - ensure, - /** @param {string[]} args @param {RunOptions} [options] */ - run: async (args, options) => { - await ensure(); - return run(toolPath, args, options); - }, - }; -} - -const gotestsumTool = createCachedTool({ - toolPath: `./tools/gotestsum${process.platform === "win32" ? ".exe" : ""}`, - globs: ["./tools/go.mod", "./tools/go.sum"], - build: async () => { - await run("go", ["install", "gotest.tools/gotestsum"], { - cwd: "./tools", - env: { GOBIN: path.resolve("./tools") }, - }); - }, -}); - -const golangciLintPackage = memoize(() => { - const golangciLintYml = fs.readFileSync(".custom-gcl.yml", "utf8"); - const pattern = /^version:\s*(v\d+\.\d+\.\d+).*$/m; - const match = pattern.exec(golangciLintYml); - if (!match) { - throw new Error("Expected version in .custom-gcl.yml"); - } - const version = match[1]; - const major = version.split(".")[0]; - const versionSuffix = ["v0", "v1"].includes(major) ? "" : "/" + major; - - return `github.com/golangci/golangci-lint${versionSuffix}/cmd/golangci-lint@${version}`; -}); - -const customLinterTool = createCachedTool({ - toolPath: `./tools/custom-gcl${process.platform === "win32" ? ".exe" : ""}`, - globs: [ - "./tools/go.mod", - "./tools/customlint/**/*", - "./.custom-gcl.yml", - ], - exclude: ["**/testdata/**"], - build: async toolPath => { - await run("go", ["run", golangciLintPackage(), "custom"]); - await run(toolPath, ["cache", "clean"]); - }, -}); - -export const lint = task({ - name: "lint", - description: "Runs golangci-lint.", - run: runLint, -}); - -async function runLint() { - const lintArgs = ["run"]; - if (defaultGoBuildTags.length) { - lintArgs.push("--build-tags", defaultGoBuildTags.join(",")); - } - if (options.fix) { - lintArgs.push("--fix"); - } - - await customLinterTool.run([...lintArgs, "--config", "../.golangci.yml"], { cwd: "./tsc" }); - console.log("Linting tools"); - await customLinterTool.run([...lintArgs, "--config", "../.golangci.yml"], { cwd: "./tools" }); -} - -export const installTools = task({ - name: "install-tools", - description: "Installs optional tools for developing within the repo.", - run: async () => { - await Promise.all([ - gotestsumTool.ensure(), - customLinterTool.ensure(), - ]); - }, -}); - -export const format = task({ - name: "format", - description: "Formats the repo.", - run: runFormat, -}); - -async function runFormat() { - await run("dprint", ["fmt"]); -} - -export const validate = task({ - name: "validate", - description: "Generates, builds, tests, lints, and formats the repo. Pass --api to include API tests, or --all to include all code generation and ancillary repository tests Benchmarks are separate: test:benchmarks and test:benchmarks:api.", - dependencies: [options.all ? generate : generateGo], - run: async () => { - await generateLibs(builtLocal); - await buildTsc({ extraFlags: options.release ? getReleaseBuildFlags() : [] }); - - /** @type {{ name: string; error: unknown }[]} */ - const failures = []; - /** @param {string} name @param {() => Promise} action */ - const runValidation = async (name, action) => { - try { - await action(); - } - catch (error) { - failures.push({ name, error }); - console.error(styleText("red", `${name} failed; continuing validation.`)); - } - }; - - await runValidation("test:tsc", runTests); - await runValidation("test:extension", runTestExtension); - if (options.api || options.all) { - if (!options.all) await runGenerateEnums(); - await runBuildAPITests(!options.all); - await runValidation("test:api", runTestAPI); - } - if (options.all) { - await runValidation("test:tools", runTestTools); - await runValidation("test:options", async () => { - await run("node", ["--test", "./tools/scripts/tsc/options.test.ts"]); - }); - await runValidation("test:smoke", runSmokeTest); // in CI this is run with `--race` - } - await runValidation("lint", runLint); - await runValidation("format", runFormat); - - if (failures.length) { - throw new AggregateError( - failures.map(failure => failure.error), - `Validation failed: ${failures.map(failure => failure.name).join(", ")}`, - ); - } - }, -}); - -async function runSmokeTest() { - await run("./built/local/tsc", ["-p", "./tsc/testdata/fixtures/compiler", "--noEmit", "--singleThreaded"]); - await run("./built/local/tsc", ["-p", "./tsc/testdata/fixtures/compiler", "--noEmit"]); -} - -export const smokeTest = task({ - name: "test:smoke", - description: "Runs the smoke tests.", - dependencies: [build], - run: runSmokeTest, -}); - -export const checkFormat = task({ - name: "check:format", - description: "Checks that the repo is formatted.", - run: async () => { - await run("dprint", ["check"]); - }, -}); - -export const checkHerebyfile = task({ - name: "check:herebyfile", - description: "Type-checks Herebyfile.mjs.", - run: () => - run("node", [ - "./node_modules/typescript/bin/tsc", - "--noEmit", - "--allowJs", - "--allowImportingTsExtensions", - "--checkJs", - "--target", - "es2022", - "--lib", - "es2024,esnext.array,esnext.collection,esnext.iterator", - "--module", - "nodenext", - "--moduleResolution", - "nodenext", - "--types", - "node", - "--strict", - "--esModuleInterop", - "--skipLibCheck", - "Herebyfile.mjs", - ]), -}); - -export const checkVsceVersion = task({ - name: "check:vsce-version", - description: "Checks that Azure release jobs use the repository's pinned vsce version.", - run: () => { - for (const validVersion of ["0.0.0", "1.2.3", "10.20.30"]) { - assert(stableThreeComponentVersionPattern.test(validVersion), `${validVersion} should be a valid stable version.`); - } - for (const invalidVersion of ["01.0.0", "1.02.0", "1.2.03", "1.2", "1.2.3-beta"]) { - assert(!stableThreeComponentVersionPattern.test(invalidVersion), `${invalidVersion} should not be a valid stable version.`); - } - - const packageJson = JSON.parse(fs.readFileSync("./packages/vscode-typescript/package.json", "utf8")); - const packageLock = JSON.parse(fs.readFileSync("./package-lock.json", "utf8")); - const version = packageJson.devDependencies?.["@vscode/vsce"]; - if (typeof version !== "string" || !stableThreeComponentVersionPattern.test(version)) { - throw new Error(`packages/vscode-typescript must pin @vscode/vsce to an exact version, got ${JSON.stringify(version)}.`); - } - - const workspaceVersion = packageLock.packages?.["packages/vscode-typescript"]?.devDependencies?.["@vscode/vsce"]; - const installedVersion = packageLock.packages?.["node_modules/@vscode/vsce"]?.version; - if (workspaceVersion !== version || installedVersion !== version) { - throw new Error( - `@vscode/vsce version mismatch: package.json=${version}, package-lock workspace=${workspaceVersion}, package-lock package=${installedVersion}.`, - ); - } - - const setupVsce = fs.readFileSync("./tools/pipelines/steps/setup-vsce.yml", "utf8"); - const activeSetupLines = setupVsce.split(/\r?\n/).filter(line => !line.trimStart().startsWith("#")); - const installCommand = `- bash: npm install --no-save @vscode/vsce@${version}`; - if (activeSetupLines.filter(line => line.trim() === installCommand).length !== 1) { - throw new Error(`tools/pipelines/steps/setup-vsce.yml must install exactly @vscode/vsce@${version}.`); - } - }, -}); - -const scriptTsconfigs = [ - "./tools/scripts/gen/tsconfig.json", - "./tools/scripts/tsc/tsconfig.json", - "./tools/scripts/lsp/tsconfig.json", -]; - -export const checkScripts = task({ - name: "check:scripts", - description: "Type-checks TypeScript scripts.", - run: async () => { - for (const tsconfig of scriptTsconfigs) { - console.log(`Type-checking ${tsconfig}`); - await run("tsc", ["-p", tsconfig]); - } - }, -}); - -/** - * @param {string} localBaseline Path to the local copy of the baselines - * @param {string} refBaseline Path to the reference copy of the baselines - */ -function baselineAcceptTask(localBaseline, refBaseline) { - /** - * @param {string} p - */ - function localPathToRefPath(p) { - const relative = path.relative(localBaseline, p); - return path.join(refBaseline, relative); - } - - return async () => { - const toCopy = await globFiles(`${localBaseline}/**`, [`${localBaseline}/**/*.delete`]); - for (const p of toCopy) { - const out = localPathToRefPath(p); - await fs.promises.mkdir(path.dirname(out), { recursive: true }); - await fs.promises.copyFile(p, out); - } - const toDelete = await globFiles(`${localBaseline}/**/*.delete`); - for (const p of toDelete) { - const out = localPathToRefPath(p).replace(/\.delete$/, ""); - await rimraf(out); - await rimraf(p); // also delete the .delete file so that it no longer shows up in a diff tool. - } - }; -} - -const localBaseline = "tsc/testdata/baselines/local/"; -const refBaseline = "tsc/testdata/baselines/reference/"; - -export const baselineAccept = task({ - name: "baseline-accept", - description: "Makes the most recent test results the new baseline, overwriting the old baseline.", - run: baselineAcceptTask(localBaseline, refBaseline), -}); - -function getDiffTool() { - const program = process.env.DIFF; - if (!program) { - console.warn("Add the 'DIFF' environment variable to the path of the program you want to use."); - process.exit(1); - } - return program; -} - -export const diff = task({ - name: "diff", - description: "Diffs baselines using the diff tool specified by the 'DIFF' environment variable", - run: () => run(getDiffTool(), [refBaseline, localBaseline]), -}); - -/** - * @param {fs.PathLike} p - */ -function rimraf(p) { - // The rimraf package uses maxRetries=10 on Windows, but Node's fs.rm does not have that special case. - return fs.promises.rm(p, { recursive: true, force: true, maxRetries: process.platform === "win32" ? 10 : 0 }); -} - -/** @typedef {{ - * name: string; - * paths: string | string[]; - * ignored?: (path: string) => boolean; - * run: (paths: Set, abortSignal: AbortSignal) => void | Promise; - * }} WatchTask */ -void 0; - -/** - * @param {string} name - * @param {(paths: Set | undefined, abortSignal: AbortSignal) => void | Promise} run - * @param {object} options - * @param {string | string[]} options.paths - * @param {(path: string) => boolean} [options.ignored] - * @param {string} [options.name] - */ -async function watchDebounced(name, run, options) { - let watching = true; - let running = true; - let lastChangeTimeMs = Date.now(); - let changedDeferred = /** @type {Deferred} */ (new Deferred()); - let abortController = new AbortController(); - - const debouncer = new Debouncer(1_000, endRun); - const watcher = chokidar.watch(options.paths, { - ignored: options.ignored, - ignorePermissionErrors: true, - alwaysStat: true, - }); - // The paths that have changed since the last run. - /** @type {Set | undefined} */ - let paths; - - process.on("SIGINT", endWatchMode); - process.on("beforeExit", endWatchMode); - watcher.on("all", onChange); - - while (watching) { - const promise = changedDeferred.promise; - const token = abortController.signal; - if (!token.aborted) { - running = true; - try { - const thePaths = paths; - paths = new Set(); - await run(thePaths, token); - } - catch { - // ignore - } - running = false; - } - if (watching) { - console.log(styleText("yellowBright", `[${name}] run complete, waiting for changes...`)); - await promise; - } - } - - console.log("end"); - - /** - * @param {'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir' | 'all' | 'ready' | 'raw' | 'error'} eventName - * @param {string} path - * @param {fs.Stats | undefined} stats - */ - function onChange(eventName, path, stats) { - switch (eventName) { - case "change": - case "unlink": - case "unlinkDir": - break; - case "add": - case "addDir": - // skip files that are detected as 'add' but haven't actually changed since the last time we ran. - if (stats && stats.mtimeMs <= lastChangeTimeMs) { - return; - } - break; - } - beginRun(path); - } - - /** - * @param {string} path - */ - function beginRun(path) { - if (debouncer.empty) { - console.log(styleText("yellowBright", `[${name}] changed due to '${path}', restarting...`)); - if (running) { - console.log(styleText("yellowBright", `[${name}] aborting in-progress run...`)); - } - abortController.abort(); - abortController = new AbortController(); - } - - debouncer.enqueue(); - paths ??= new Set(); - paths.add(path); - } - - function endRun() { - lastChangeTimeMs = Date.now(); - changedDeferred.resolve(); - changedDeferred = /** @type {Deferred} */ (new Deferred()); - } - - function endWatchMode() { - if (watching) { - watching = false; - console.log(styleText("yellowBright", `[${name}] exiting watch mode...`)); - abortController.abort(); - watcher.close(); - } - } -} - -/** - * @template T - */ -export class Deferred { - constructor() { - /** @type {Promise} */ - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - } -} - -export class Debouncer { - /** - * @param {number} timeout - * @param {() => Promise | void} action - */ - constructor(timeout, action) { - this._timeout = timeout; - this._action = action; - /** @type {ReturnType | undefined} */ - this._timer = undefined; - /** @type {Deferred | undefined} */ - this._deferred = undefined; - } - - get empty() { - return !this._deferred; - } - - enqueue() { - if (this._timer) { - clearTimeout(this._timer); - this._timer = undefined; - } - - if (!this._deferred) { - this._deferred = new Deferred(); - } - - this._timer = setTimeout(() => this.run(), 100); - return this._deferred.promise; - } - - run() { - if (this._timer) { - clearTimeout(this._timer); - this._timer = undefined; - } - - const deferred = this._deferred; - assert(deferred); - this._deferred = undefined; - try { - deferred.resolve(this._action()); - } - catch (e) { - deferred.reject(e); - } - } -} - -const getVersion = memoize(() => { - if (nativePreviewReleaseVersion) { - return nativePreviewReleaseVersion; - } - - const f = fs.readFileSync("./tsc/internal/core/version.go", "utf8"); - - const match = f.match(/var version\s*=\s*"(\d+\.\d+\.\d+)(-[^"]+)?"/); - if (!match) { - throw new Error("Failed to extract version from version.go"); - } - - let version = match[1]; - if (options.setPrerelease) { - version += `-${options.setPrerelease}`; - } - else if (match[2]) { - version += match[2]; - } - - return version; -}); - -function getPublishTag() { - if (publishAsTypescript) { - const version = getVersion(); - if (!version) { - throw new Error("Publishing as 'typescript' requires a version before selecting an npm tag."); - } - const match = version.match(/-(dev|beta|rc)(?:[.-]|$)/); - if (match?.[1]) return match[1] === "dev" ? "next" : match[1]; - if (version === nativePreviewReleaseVersion && stableThreeComponentVersionPattern.test(version)) return "latest"; - throw new Error(`Refusing to publish 'typescript' with the latest tag from non-release version ${version}.`); - } - return "latest"; -} - -const extensionDir = path.resolve("./packages/vscode-typescript"); -const nightlyExtensionDir = path.resolve("./packages/vscode-typescript-nightly"); -const builtNpm = path.resolve("./built/npm"); -const builtVsix = path.resolve("./built/vsix"); -const typeScriptReleaseInfoPath = path.resolve("./built/typescript-release-info.json"); -const builtPublishedPlatformPackages = path.resolve("./built/published-platform-packages"); -const builtSignTmp = path.resolve("./built/sign-tmp"); -const publishedTypeScriptAliasPackageName = "@typescript/bundled-typescript"; -const releasePackageEnv = { COREPACK_ENABLE_STRICT: "0" }; -const getReleasePackageRegistry = memoize(async () => { - const { stdout } = await runOutput("npm", ["config", "get", "registry"], { env: releasePackageEnv }); - return stdout.trim(); -}); - -const getVscodeTypeScriptExtensionPackageJson = memoize(() => JSON.parse(fs.readFileSync(path.join(extensionDir, "package.json"), "utf8"))); - -function getVscodeTypeScriptExtensionVersion() { - const version = getVscodeTypeScriptExtensionPackageJson().version; - if (typeof version !== "string" || !stableThreeComponentVersionPattern.test(version)) { - throw new Error(`packages/vscode-typescript/package.json must contain a stable three-component version, got ${JSON.stringify(version)}.`); - } - return version; -} - -const getSignTempDir = memoize(async () => { - const dir = path.resolve(builtSignTmp); - await rimraf(dir); - await fs.promises.mkdir(dir, { recursive: true }); - return dir; -}); - -const cleanSignTempDirectory = task({ - name: "clean:sign-tmp", - hiddenFromTaskList: true, - run: runCleanSignTempDirectory, -}); - -function runCleanSignTempDirectory() { - return rimraf(builtSignTmp); -} - -let signCount = 0; - -/** - * @param {string} value - */ -function assertMsbuildXmlValue(value) { - assert(value.length > 0 && !/[^\w./\\: -]/.test(value), `Unsupported MSBuild XML value: ${JSON.stringify(value)}`); - return value; -} - -/** - * @typedef {{ - * SignFileRecordList: { - * SignFileList: { SrcPath: string; DstPath: string | null }[]; - * Certs: Cert; - * MacAppName: string | undefined - * }[] - * }} DDSignFileList - * - * @param {DDSignFileList} filelist - */ -async function sign(filelist, unchangedOutputOkay = false) { - console.log("filelist:", JSON.stringify(filelist, undefined, 4)); - - if (!process.env.MICROBUILD_PLUGIN_DIRECTORY) { - console.log(styleText("yellow", "Faking signing because MICROBUILD_PLUGIN_DIRECTORY is not set.")); - - // Fake signing for testing. - - for (const record of filelist.SignFileRecordList) { - for (const file of record.SignFileList) { - const src = file.SrcPath; - const dst = file.DstPath ?? src; - - if (!fs.existsSync(src)) { - throw new Error(`Source file does not exist: ${src}`); - } - - const dstDir = path.dirname(dst); - if (!fs.existsSync(dstDir)) { - throw new Error(`Destination directory does not exist: ${dstDir}`); - } - - if (dst.endsWith(".sig")) { - console.log(`Faking signature for ${src} -> ${dst}`); - // No great way to fake a signature. - await fs.promises.writeFile(dst, "fake signature"); - } - else { - if (src === dst) { - console.log(`Faking signing ${src}`); - } - else { - console.log(`Faking signing ${src} -> ${dst}`); - } - const contents = await fs.promises.readFile(src); - await fs.promises.writeFile(dst, contents); - } - } - } - - return; - } - - const signingWorkaround = true; - let signingFilelist = filelist; - - /** @type {{ source: string; target: string }[]} */ - const signingWorkaroundFiles = []; - - if (signingWorkaround) { - // DstPath is currently broken in the signing tool. - // Copy all of the files to a new tempdir and then leave DstPath unset - // so that it's overwritten, then move the file to the destination. - console.log("Working around DstPath bug"); - - /** @type {DDSignFileList} */ - const newFileList = { - SignFileRecordList: filelist.SignFileRecordList.map(list => { - return { - Certs: list.Certs, - SignFileList: list.SignFileList.map(file => { - const dstPath = file.DstPath; - if (dstPath === null) { - return file; - } - - const src = file.SrcPath; - // File extensions must be preserved; use a prefix. - const dstPathTemp = `${path.dirname(src)}/signing-temp-${path.basename(src)}`; - - console.log(`Copying: ${src} -> ${dstPathTemp}`); - fs.cpSync(src, dstPathTemp); - - signingWorkaroundFiles.push({ source: dstPathTemp, target: dstPath }); - - return { - SrcPath: dstPathTemp, - DstPath: null, - }; - }), - MacAppName: list.MacAppName, - }; - }), - }; - - signingFilelist = newFileList; - console.log("new filelist:", JSON.stringify(signingFilelist, undefined, 4)); - } - - /** @type {Map} */ - const srcHashes = new Map(); - - for (const record of filelist.SignFileRecordList) { - for (const file of record.SignFileList) { - const src = file.SrcPath; - const dst = file.DstPath ?? src; - - if (!fs.existsSync(src)) { - throw new Error(`Source file does not exist: ${src}`); - } - - const hash = crypto.createHash("sha256").update(fs.readFileSync(src)).digest("hex"); - srcHashes.set(src, hash); - - console.log(`Will sign ${src} -> ${dst}`); - console.log(` sha256: ${hash}`); - } - } - - const tmp = await getSignTempDir(); - const propsPath = path.resolve(tmp, `signing-items-${signCount++}.props`); - const signingItems = signingFilelist.SignFileRecordList.flatMap(record => record.SignFileList.map(file => ({ path: file.SrcPath, cert: record.Certs, macAppName: record.MacAppName }))); - const items = signingItems.map(({ path: filePath, cert, macAppName }) => - ` - ${assertMsbuildXmlValue(cert)} - None${ - macAppName ? ` - ${assertMsbuildXmlValue(macAppName)}` : "" - } - ` - ).join("\n"); - await fs.promises.writeFile( - propsPath, - ` - -${items} - - -`, - ); - - try { - await run("dotnet", [ - "build", - path.resolve("tools/signing/Sign.csproj"), - "--target:AfterBuild", - "--verbosity:normal", - "-p:SignType=real", - `-p:SignFilesDir=${path.resolve("built")}`, - `-p:FilesToSignPropsFile=${propsPath}`, - `-p:MicroBuildOverridePluginDirectory=${process.env.MICROBUILD_PLUGIN_DIRECTORY}`, - ]); - } - finally { - await fs.promises.unlink(propsPath); - } - - if (signingWorkaround) { - // Now, copy the files back. - for (const { source, target } of signingWorkaroundFiles) { - console.log(`Moving signed file: ${source} -> ${target}`); - await fs.promises.rename(source, target); - } - } - - /** @type {string[]} */ - let failures = []; - - for (const record of filelist.SignFileRecordList) { - for (const file of record.SignFileList) { - const src = file.SrcPath; - const dst = file.DstPath ?? src; - - if (!fs.existsSync(dst)) { - failures.push(`Signed file does not exist: ${dst}`); - const newSrcHash = crypto.createHash("sha256").update(fs.readFileSync(src)).digest("hex"); - const oldSrcHash = srcHashes.get(src); - assert(oldSrcHash); - if (oldSrcHash !== newSrcHash) { - failures.push(` Source file changed during signing: ${src}\n before: ${oldSrcHash}\n after: ${newSrcHash}`); - } - continue; - } - - const srcHash = srcHashes.get(src); - assert(srcHash); - const dstHash = crypto.createHash("sha256").update(fs.readFileSync(dst)).digest("hex"); - if (srcHash === dstHash) { - const message = `Signed file is identical to source file (not signed?): ${src} -> ${dst}\n sha256: ${dstHash}`; - if (unchangedOutputOkay) { - console.log(message); - } - else { - failures.push(message); - continue; - } - } - - if (src === dst) { - console.log(`Signed ${src}`); - } - else { - console.log(`Signed ${src} -> ${dst}`); - } - console.log(` sha256: ${dstHash}`); - } - } - - if (failures.length) { - throw new Error("Some files failed to sign:\n" + failures.map(f => " - " + f).join("\n")); - } -} - -/** - * @param {string} src - * @param {string} dest - * @param {(p: string) => boolean} [filter] - */ -function cpRecursive(src, dest, filter) { - return fs.promises.cp(src, dest, { - recursive: true, - filter: filter ? src => filter(src.replace(/\\/g, "/")) : undefined, - }); -} - -/** - * @param {string} src - * @param {string} dest - */ -function cpWithoutNodeModulesOrTsconfig(src, dest) { - return cpRecursive(src, dest, p => !p.endsWith("/node_modules") && !p.endsWith("/tsconfig.json")); -} - -const mainNativePreviewPackage = { - npmPackageName: publishAsTypescript ? "typescript" : "@typescript/typescript", - npmDir: path.join(builtNpm, publishAsTypescript ? "typescript" : "native-preview"), - npmTarball: path.join(builtNpm, publishAsTypescript ? "typescript.tgz" : "native-preview.tgz"), -}; - -const typescriptMacEntitlements = [ - "com.apple.security.cs.allow-dyld-environment-variables", - "com.apple.security.cs.disable-library-validation", -]; - -function createTypeScriptMacEntitlementsPlist() { - const entries = typescriptMacEntitlements.map(entitlement => ` ${entitlement}\n `).join("\n"); - return ` - - - -${entries} - - -`; -} - -/** - * @typedef {"win32" | "linux" | "darwin" | "aix" | "android" | "freebsd" | "netbsd" | "openbsd" | "sunos"} OS - * @typedef {"x64" | "arm" | "arm64" | "ia32" | "ppc64" | "loong64" | "mips64el" | "riscv64" | "s390x"} Arch - * @typedef {"Microsoft400" | "LinuxSign" | "MacDeveloperHarden" | "8020" | "VSCodePublisher"} Cert - * @typedef {`${OS | "alpine"}-${Exclude | "armhf"}`} VSCodeTarget - * @typedef {{ name: string; sourceDir: string }} VsixExtensionPackage - * @typedef {{ nodeOs: string; vscodeTarget: string; sourceDir: string; extensionDir: string; vsixPath: string; vsixManifestPath: string; vsixSignaturePath: string }} VsixExtension - * @typedef {{ GOOS: string; GOARCH: string }} GoDistTarget - * @typedef {{ os: OS; arch: Arch; cert?: Cert; vsix?: boolean; alpine?: boolean }} Platform - */ -void 0; - -/** @type {VsixExtensionPackage[]} */ -const vsixExtensionPackages = [ - ...(produceNativePreviewVsix ? [{ name: "native-preview", sourceDir: extensionDir }] : []), - ...(produceTypeScriptNightlyVsix ? [{ name: "vscode-typescript-nightly", sourceDir: nightlyExtensionDir }] : []), -]; - -/** - * npm package platforms supported by the native release. - * The native-preview package publishes only the entries with vsix: true; - * the typescript package publishes the full list. - * BSD targets that are not in Node's supported-platforms table are best-effort - * and limited to mainstream 64-bit x64/arm64 architectures. - * alpine is set only for the subset that also produces Alpine VSIXes. - * cert defaults to LinuxSign. - * @type {Platform[]} - */ -const platforms = [ - { os: "win32", arch: "x64", vsix: true, cert: "Microsoft400" }, - { os: "win32", arch: "arm64", vsix: true, cert: "Microsoft400" }, - { os: "linux", arch: "x64", vsix: true, alpine: true }, - { os: "linux", arch: "arm", vsix: true }, - { os: "linux", arch: "arm64", vsix: true, alpine: true }, - { os: "darwin", arch: "x64", vsix: true, cert: "MacDeveloperHarden" }, - { os: "darwin", arch: "arm64", vsix: true, cert: "MacDeveloperHarden" }, - { os: "aix", arch: "ppc64" }, - { os: "android", arch: "arm64" }, - { os: "freebsd", arch: "arm64" }, - { os: "freebsd", arch: "x64" }, - { os: "linux", arch: "loong64" }, - { os: "linux", arch: "mips64el" }, - { os: "linux", arch: "ppc64" }, - { os: "linux", arch: "riscv64" }, - { os: "linux", arch: "s390x" }, - { os: "netbsd", arch: "arm64" }, - { os: "netbsd", arch: "x64" }, - { os: "openbsd", arch: "arm64" }, - { os: "openbsd", arch: "x64" }, - { os: "sunos", arch: "x64" }, - // Wasm? -]; - -const ignoredGoTargets = new Map([ - ["android/386", "Android is not a Node runtime target TypeScript supports"], - ["android/amd64", "Android is not a Node runtime target TypeScript supports"], - ["android/arm", "Android is not a Node runtime target TypeScript supports"], - ["freebsd/386", "FreeBSD is experimental in Node and limited here to mainstream 64-bit x64/arm64"], - ["freebsd/arm", "FreeBSD is experimental in Node and limited here to mainstream 64-bit x64/arm64"], - ["linux/386", "ia32 means 32-bit x86, which TypeScript does not support for native packages"], - ["linux/ppc64", "Node supports Linux ppc64le; npm's ppc64 CPU name cannot select big-endian ppc64 separately"], - ["netbsd/386", "NetBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["netbsd/arm", "NetBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["openbsd/386", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["openbsd/arm", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["openbsd/ppc64", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["openbsd/riscv64", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], - ["solaris/amd64", "Node documents SmartOS/sunos rather than Oracle Solaris; sunos-x64 publishes illumos/amd64 for that runtime family"], - ["windows/386", "ia32 means 32-bit x86, which TypeScript does not support for native packages"], -]); - -/** - * @param {string} os - * @returns {"windows" | "illumos" | "darwin" | "linux" | "aix" | "android" | "freebsd" | "netbsd" | "openbsd"} - */ -function nodeToGOOS(os) { - switch (os) { - case "win32": - return "windows"; - case "sunos": - return "illumos"; - case "darwin": - case "linux": - case "aix": - case "android": - case "freebsd": - case "netbsd": - case "openbsd": - return os; - default: - throw new Error(`Unsupported OS: ${os}`); - } -} - -/** - * @param {string} arch - * @param {string} os - * @returns {"amd64" | "386" | "mips64le" | "ppc64" | "ppc64le" | "arm" | "arm64" | "loong64" | "riscv64" | "s390x"} - */ -function nodeToGOARCH(arch, os) { - switch (arch) { - case "x64": - return "amd64"; - case "ia32": - return "386"; - case "mips64el": - return "mips64le"; - case "ppc64": - return os === "aix" ? "ppc64" : "ppc64le"; - case "arm": - case "arm64": - case "loong64": - case "riscv64": - case "s390x": - return arch; - default: - throw new Error(`Unsupported ARCH: ${arch}`); - } -} - -const getPlatforms = memoize(() => { - const publishTag = releaseVscodeTypescript ? undefined : getPublishTag(); - let supportedPlatforms = !releaseVscodeTypescript && publishAsTypescript && publishTag !== "next" - ? platforms - : platforms.filter(({ vsix }) => vsix); - - if (!options.forRelease) { - supportedPlatforms = supportedPlatforms.filter(({ os, arch }) => os === process.platform && arch === process.arch); - assert.equal(supportedPlatforms.length, 1, "No supported platforms found"); - } - - return supportedPlatforms.map(({ os, arch, cert = "LinuxSign", vsix, alpine }) => { - const packageBaseName = publishAsTypescript ? "typescript" : "native-preview"; - const npmDirName = `${packageBaseName}-${os}-${arch}`; - const npmDir = path.join(builtNpm, npmDirName); - const npmTarball = `${npmDir}.tgz`; - const npmPackageName = `@typescript/${npmDirName}`; - - /** @type {VsixExtension[]} */ - let extensions = []; - if (produceAnyVsix && vsix) { - /** @type {string[]} */ - const vscodeTargets = [`${os}-${arch === "arm" ? "armhf" : arch}`]; - if (alpine) { - vscodeTargets.push(`alpine-${arch === "arm" ? "armhf" : arch}`); - } - - extensions = vscodeTargets.flatMap(vscodeTarget => - vsixExtensionPackages.map(({ name: packageName, sourceDir }) => { - const extensionDir = path.join(builtVsix, `${packageName}-${vscodeTarget}`); - const vsixPath = extensionDir + ".vsix"; - const vsixManifestPath = extensionDir + ".manifest"; - const vsixSignaturePath = extensionDir + ".signature.p7s"; - return { - nodeOs: os, - vscodeTarget, - sourceDir, - extensionDir, - vsixPath, - vsixManifestPath, - vsixSignaturePath, - }; - }) - ); - } - - return { - nodeOs: os, - nodeArch: arch, - goos: nodeToGOOS(os), - goarch: nodeToGOARCH(arch, os), - npmPackageName, - npmDirName, - npmDir, - npmTarball, - extensions, - cert, - }; - }); -}); - -export const checkPlatforms = task({ - name: "typescript:check-platforms", - hiddenFromTaskList: true, - run: runCheckPlatforms, -}); - -/** - * @param {GoDistTarget} target - */ -function goDistTargetToPlatform(target) { - const goTarget = `${target.GOOS}/${target.GOARCH}`; - if (ignoredGoTargets.has(goTarget)) { - return undefined; - } - - /** @type {OS | undefined} */ - let nodeOs; - switch (target.GOOS) { - case "windows": - nodeOs = "win32"; - break; - case "illumos": - nodeOs = "sunos"; - break; - case "aix": - case "android": - case "darwin": - case "freebsd": - case "linux": - case "netbsd": - case "openbsd": - nodeOs = target.GOOS; - break; - default: - return undefined; - } - - /** @type {Arch | undefined} */ - let nodeArch; - switch (target.GOARCH) { - case "386": - nodeArch = "ia32"; - break; - case "amd64": - nodeArch = "x64"; - break; - case "mips64le": - nodeArch = "mips64el"; - break; - case "ppc64": - nodeArch = "ppc64"; - break; - case "ppc64le": - nodeArch = "ppc64"; - break; - case "arm": - case "arm64": - case "loong64": - case "riscv64": - case "s390x": - nodeArch = target.GOARCH; - break; - default: - return undefined; - } - - return `${nodeOs}-${nodeArch}`; -} - -async function runCheckPlatforms() { - const { stdout } = await runOutput("go", ["tool", "dist", "list", "-json"]); - /** @type {GoDistTarget[]} */ - const goTargets = JSON.parse(stdout); - const goTargetSet = new Set(goTargets.map(({ GOOS, GOARCH }) => `${GOOS}/${GOARCH}`)); - - /** @type {[os: OS, arch: Arch][]} */ - const packagePlatforms = platforms.map(({ os, arch }) => /** @type {[OS, Arch]} */ ([os, arch])); - const actual = new Set(packagePlatforms.map(([os, arch]) => `${os}-${arch}`)); - const expected = new Set(goTargets.map(goDistTargetToPlatform).filter(platform => platform !== undefined)); - - const errors = []; - for (const [os, arch] of packagePlatforms) { - const goTarget = `${nodeToGOOS(os)}/${nodeToGOARCH(arch, os)}`; - if (!goTargetSet.has(goTarget)) { - errors.push(`Configured package platform ${os}-${arch} maps to unsupported Go target ${goTarget}.`); - } - } - - const missing = [...expected].filter(platform => !actual.has(platform)); - if (missing.length) { - errors.push(`Missing package platform(s) for the current Go toolchain: ${missing.join(", ")}.`); - } - - const extra = [...actual].filter(platform => !expected.has(platform)); - if (extra.length) { - errors.push(`Unexpected package platform(s), or missing exclusion policy: ${extra.join(", ")}.`); - } - - if (errors.length) { - throw new Error(`native-preview platform list is out of sync with 'go tool dist list':\n${errors.map(e => ` - ${e}`).join("\n")}`); - } -} - -/** - * Recursively strips `@typescript/source` export conditions from a package.json object. - * Processes `exports` and `imports` fields, skipping past subpath keys (starting with "." - * or "#") and recursing into condition objects. After removal, simplifies objects that have - * only a single `default` key down to their bare value. - * @param {Record} packageJson - */ -function stripSourceConditions(packageJson) { - for (const field of ["exports", "imports"]) { - if (packageJson[field] != null && typeof packageJson[field] === "object") { - packageJson[field] = stripConditionsFromValue(packageJson[field]); - } - } -} - -/** - * @param {any} value - * @returns {any} - */ -function stripConditionsFromValue(value) { - if (value == null || typeof value !== "object") { - return value; - } - delete value["@typescript/source"]; - for (const key of Object.keys(value)) { - value[key] = stripConditionsFromValue(value[key]); - } - // Simplify: if only "default" remains, collapse to its value. - const keys = Object.keys(value); - if (keys.length === 1 && keys[0] === "default") { - return value["default"]; - } - return value; -} - -export const buildNativePreviewPackages = task({ - name: "typescript:build", - description: "Builds TypeScript npm packages for the current platform. Pass --respectGoEnv to preserve caller-provided Go build settings.", - run: runBuildNativePreviewPackages, -}); - -export const writeTypeScriptReleaseInfo = task({ - name: "typescript:release-info", - hiddenFromTaskList: true, - run: async () => { - await fs.promises.mkdir(path.dirname(typeScriptReleaseInfoPath), { recursive: true }); - await fs.promises.writeFile( - typeScriptReleaseInfoPath, - JSON.stringify({ version: getVersion(), npmTag: getPublishTag() }, undefined, 4) + "\n", - ); - }, -}); - -async function runBuildNativePreviewPackages() { - if (usePublishedPlatformPackagesForVsix) { - checkPublishedPlatformPackagesForVsix(); - await rimraf(builtNpm); - console.log("Skipping npm package builds; VSIX packaging will use published platform packages."); - return; - } - - await rimraf(builtNpm); - - const platforms = getPlatforms(); - - const inputDir = "./packages/typescript"; - - const inputPackageJson = JSON.parse(fs.readFileSync(path.join(inputDir, "package.json"), "utf8")); - inputPackageJson.version = getVersion(); - delete inputPackageJson.private; - inputPackageJson.files = [...new Set([...(inputPackageJson.files ?? []), "NOTICE.txt"])]; - if (publishAsTypescript) { - inputPackageJson.bin = { - tsc: "./bin/tsc", - }; - inputPackageJson.description = "TypeScript is a language for application scale JavaScript development"; - inputPackageJson.homepage = "https://www.typescriptlang.org/"; - inputPackageJson.keywords = [ - "TypeScript", - "Microsoft", - "compiler", - "language", - "javascript", - ]; - inputPackageJson.bugs = { - url: "https://github.com/microsoft/TypeScript/issues", - }; - inputPackageJson.repository = { - type: "git", - url: "https://github.com/microsoft/TypeScript.git", - }; - delete inputPackageJson.scripts; - delete inputPackageJson.devDependencies; - } - stripSourceConditions(inputPackageJson); - - if (fs.existsSync(".git")) { - const { stdout: gitHead } = await runOutput("git", ["rev-parse", "HEAD"]); - inputPackageJson.gitHead = gitHead.trim(); - } - inputPackageJson.publishConfig = { - access: "public", - tag: getPublishTag(), - }; - - const mainPackage = { - ...inputPackageJson, - name: mainNativePreviewPackage.npmPackageName, - optionalDependencies: Object.fromEntries(platforms.map(p => [p.npmPackageName, getVersion()])), - }; - - const mainPackageDir = mainNativePreviewPackage.npmDir; - - await fs.promises.mkdir(mainPackageDir, { recursive: true }); - - // Copy package contents excluding node_modules and dist (dist is copied separately after build). - // The package.json "files" field controls what npm pack actually includes. - await cpRecursive(inputDir, mainPackageDir, p => !p.endsWith("/node_modules") && !p.includes("/dist")); - if (publishAsTypescript) { - await fs.promises.writeFile(path.join(mainPackageDir, "bin", "tsc"), '#!/usr/bin/env node\nimport "../lib/tsc.js";\n'); - await fs.promises.chmod(path.join(mainPackageDir, "bin", "tsc"), 0o755); - await fs.promises.copyFile(path.join(inputDir, "typescript-package-readme.md"), path.join(mainPackageDir, "README.md")); - } - - await fs.promises.writeFile(path.join(mainPackageDir, "package.json"), JSON.stringify(mainPackage, undefined, 4)); - await fs.promises.copyFile("LICENSE.txt", path.join(mainPackageDir, "LICENSE")); - await fs.promises.copyFile("NOTICE.txt", path.join(mainPackageDir, "NOTICE.txt")); - - // Build JS API and copy dist into the package. - await run("npm", ["run", "-w", "@typescript/typescript", "build"]); - await cpRecursive(path.join(inputDir, "dist"), path.join(mainPackageDir, "dist")); - - // Validate that .d.ts files contain no external imports (all imports must start with "." or "#"). - const dtsFiles = await globFiles(`${mainPackageDir}/dist/**/*.d.ts`); - const importErrors = []; - for (const dtsFile of dtsFiles) { - const content = await fs.promises.readFile(dtsFile, "utf-8"); - const relPath = path.relative(mainPackageDir, dtsFile); - for (const [i, line] of content.split("\n").entries()) { - // Match: import ... from "specifier" / export ... from "specifier" - const fromMatch = line.match(/(?:import|export)\s.*?\sfrom\s+["']([^"']+)["']/); - if (fromMatch && !fromMatch[1].startsWith(".") && !fromMatch[1].startsWith("#")) { - importErrors.push(`${relPath}:${i + 1}: external import declaration "${fromMatch[1]}"`); - } - // Match: import("specifier") - for (const m of line.matchAll(/import\(["']([^"']+)["']\)/g)) { - if (!m[1].startsWith(".") && !m[1].startsWith("#")) { - importErrors.push(`${relPath}:${i + 1}: external dynamic import "${m[1]}"`); - } - } - } - } - if (importErrors.length) { - throw new Error(`Found external imports in .d.ts files:\n${importErrors.map(e => " " + e).join("\n")}`); - } - - const extraFlags = options.respectGoEnv - ? [] - : getReleaseBuildFlags(options.setPrerelease || nativePreviewReleaseVersion ? getVersion() : undefined); - - const platformBuilders = platforms.map(({ npmDir, npmPackageName, nodeOs, nodeArch, goos, goarch }) => async () => { - const packageJson = { - ...inputPackageJson, - bin: undefined, - files: ["lib", "NOTICE.txt"], - imports: undefined, - dependencies: undefined, - name: npmPackageName, - os: [nodeOs], - cpu: [nodeArch], - exports: { - "./package.json": "./package.json", - }, - }; - - const out = path.join(npmDir, "lib"); - await fs.promises.mkdir(out, { recursive: true }); - await fs.promises.writeFile(path.join(npmDir, "package.json"), JSON.stringify(packageJson, undefined, 4)); - await fs.promises.copyFile("LICENSE.txt", path.join(npmDir, "LICENSE")); - await fs.promises.copyFile("NOTICE.txt", path.join(npmDir, "NOTICE.txt")); - - const readme = [ - `# \`${npmPackageName}\``, - "", - `This package provides ${nodeOs}-${nodeArch} support for [${mainNativePreviewPackage.npmPackageName}](https://www.npmjs.com/package/${mainNativePreviewPackage.npmPackageName}).`, - ]; - - await fs.promises.writeFile(path.join(npmDir, "README.md"), readme.join("\n") + "\n"); - - await generateLibs(out); - - const exeName = nativePreviewExeName(nodeOs); - await buildTsc({ - out: publishAsTypescript ? path.join(out, exeName) : out, - env: { - GOOS: goos, - GOARCH: goarch, - ...(options.respectGoEnv ? {} : { GOARM: "6", CGO_ENABLED: "0" }), - }, - extraFlags, - }); - }); - - if (isCI) { - for (const build of platformBuilders) { - await build(); - // Build machines have too little space. - // Clear the Go build cache between platforms. - await run("go", ["clean", "-cache"]); - } - } - else { - await runWithConcurrencyLimit(platformBuilders, os.availableParallelism()); - } -} - -/** - * @param {ReturnType} platforms - */ -async function testNativePreviewPackage(platforms) { - const hostPlatform = platforms.find(({ nodeOs, nodeArch }) => nodeOs === process.platform && nodeArch === process.arch); - assert(hostPlatform, `No package was built for the host platform ${process.platform}-${process.arch}`); - - const testRoot = path.resolve("built/package-test"); - const nodeModules = path.join(testRoot, "node_modules"); - const mainPackageDir = path.join(nodeModules, ...mainNativePreviewPackage.npmPackageName.split("/")); - const platformPackageDir = path.join(nodeModules, ...hostPlatform.npmPackageName.split("/")); - const sourceFile = path.join(testRoot, "index.ts"); - - await rimraf(testRoot); - try { - await cpRecursive(mainNativePreviewPackage.npmDir, mainPackageDir); - await cpRecursive(hostPlatform.npmDir, platformPackageDir); - await fs.promises.writeFile(sourceFile, 'export const value: string = "value";\n'); - - const require = createRequire(sourceFile); - const { stdout } = await runOutput("npm", ["pack", "--dry-run", "--json", mainPackageDir]); - /** @type {{ files: { path: string }[] }[]} */ - const packed = JSON.parse(stdout); - for (const name of ["tsconfig", "jsconfig"]) { - const schemaPath = `schemas/${name}.schema.json`; - assert(packed[0].files.some(file => file.path === schemaPath), `Package is missing ${schemaPath}`); - assert.deepEqual( - await fs.promises.readFile(path.join(mainPackageDir, schemaPath)), - await fs.promises.readFile(path.join("packages/typescript", schemaPath)), - ); - assert.equal(require.resolve(`${mainNativePreviewPackage.npmPackageName}/${schemaPath}`), path.join(mainPackageDir, schemaPath)); - } - - const binName = publishAsTypescript ? "tsc" : "tsgo"; - const binPath = path.join(mainPackageDir, "bin", binName); - const { stdout: versionOutput } = await runOutput(process.execPath, [binPath, "--version"]); - assert.equal(versionOutput.trim(), `Version ${getVersion()}`); - - const { stdout: listFilesOutput } = await runOutput(process.execPath, [binPath, "--noEmit", "--listFiles", sourceFile]); - assert(!listFilesOutput.includes("bundled:///"), "Packaged compiler listed an embedded library path"); - - const expectedLib = path.resolve(platformPackageDir, "lib", "lib.es5.d.ts"); - const listedFiles = listFilesOutput - .split(/\r?\n/) - .filter(Boolean) - .map(file => path.resolve(file)); - assert(listedFiles.includes(expectedLib), `Expected packaged compiler to list ${expectedLib}`); - } - finally { - await rimraf(testRoot); - } -} - -export const testNativePreviewPackageTask = task({ - name: "typescript:test-package", - description: "Tests the TypeScript npm package for the current platform.", - dependencies: options.forRelease ? undefined : [buildNativePreviewPackages], - run: () => testNativePreviewPackage(getPlatforms()), -}); - -export const signNativePreviewPackages = task({ - name: "typescript:sign", - hiddenFromTaskList: true, - run: runSignNativePreviewPackages, -}); - -/** - * @param {string} nodeOs - */ -function nativePreviewExeName(nodeOs) { - const baseName = publishAsTypescript ? "tsc" : "tsgo"; - return nodeOs === "win32" ? `${baseName}.exe` : baseName; -} - -async function runSignNativePreviewPackages() { - if (!options.forRelease) { - throw new Error("This task should not be run in non-release builds."); - } - if (usePublishedPlatformPackagesForVsix) { - checkPublishedPlatformPackagesForVsix(); - console.log("Skipping npm package signing; VSIX packaging will use published platform packages."); - return; - } - - const platforms = getPlatforms(); - - /** @type {Map} */ - const filelistByCert = new Map(); - for (const { npmDir, nodeOs, cert, npmDirName } of platforms) { - let certFilelist = filelistByCert.get(cert); - if (!certFilelist) { - filelistByCert.set(cert, certFilelist = []); - } - certFilelist.push({ - tmpName: npmDirName, - path: path.join(npmDir, "lib", nativePreviewExeName(nodeOs)), - }); - } - - const tmp = await getSignTempDir(); - const typescriptMacEntitlementsPath = path.join(tmp, "typescript-macos-entitlements.plist"); - await fs.promises.writeFile(typescriptMacEntitlementsPath, createTypeScriptMacEntitlementsPlist()); - - /** @type {DDSignFileList} */ - const filelist = { - SignFileRecordList: [], - }; - - /** @type {{ path: string; unsignedZipPath: string; signedZipPath: string; notarizedZipPath: string; }[]} */ - const macZips = []; - - // First, sign the files. - - for (const [cert, filelistPaths] of filelistByCert) { - switch (cert) { - case "Microsoft400": - filelist.SignFileRecordList.push({ - SignFileList: filelistPaths.map(p => ({ SrcPath: p.path, DstPath: null })), - Certs: cert, - MacAppName: undefined, - }); - break; - case "LinuxSign": - filelist.SignFileRecordList.push({ - SignFileList: filelistPaths.map(p => ({ SrcPath: p.path, DstPath: p.path + ".sig" })), - Certs: cert, - MacAppName: undefined, - }); - break; - case "MacDeveloperHarden": - // Mac signing requires putting files into zips and then signing those, - // along with a notarization step. - for (const p of filelistPaths) { - // ESRP preserves entitlements from an existing ad-hoc signature. - await runOutput("go", ["-C", "./tools", "run", "./cmd/machotool", "sign", typescriptMacEntitlementsPath, p.path]); - - const unsignedZipPath = path.join(tmp, `${p.tmpName}.unsigned.zip`); - const signedZipPath = path.join(tmp, `${p.tmpName}.signed.zip`); - const notarizedZipPath = path.join(tmp, `${p.tmpName}.notarized.zip`); - - const zip = new AdmZip(); - zip.addLocalFile(p.path); - zip.writeZip(unsignedZipPath); - - macZips.push({ - path: p.path, - unsignedZipPath, - signedZipPath, - notarizedZipPath, - }); - } - filelist.SignFileRecordList.push({ - SignFileList: macZips.map(p => ({ SrcPath: p.unsignedZipPath, DstPath: p.signedZipPath })), - Certs: cert, - MacAppName: undefined, // MacAppName is only for notarization - }); - break; - default: - throw new Error(`Unknown cert: ${cert}`); - } - } - - await sign(filelist); - - // All of the files have been signed in place / had signatures added. - - if (macZips.length) { - // Now, notarize the Mac files. - - /** @type {DDSignFileList} */ - const notarizeFilelist = { - SignFileRecordList: [ - { - SignFileList: macZips.map(p => ({ SrcPath: p.signedZipPath, DstPath: p.notarizedZipPath })), - Certs: "8020", // "MacNotarize" (friendly name not supported by the tooling) - MacAppName: "MicrosoftTypeScript", - }, - ], - }; - - // Notarizing does not change the file, it just sends it to Apple, so ignore the case - // where the input files are the same as the output files. - await sign(notarizeFilelist, /*unchangedOutputOkay*/ true); - - // Finally, unzip the notarized files and move them back to their original locations. - - for (const p of macZips) { - const zip = new AdmZip(p.notarizedZipPath); - zip.extractEntryTo(path.basename(p.path), path.dirname(p.path), false, true); - } - - // chmod +x the unzipped files. - - for (const p of macZips) { - await fs.promises.chmod(p.path, 0o755); - await runOutput("go", ["-C", "./tools", "run", "./cmd/machotool", "verify", typescriptMacEntitlementsPath, p.path]); - } - } -} - -export const packNativePreviewPackages = task({ - name: "typescript:pack", - hiddenFromTaskList: true, - dependencies: options.forRelease ? undefined : [buildNativePreviewPackages, cleanSignTempDirectory], - run: runPackNativePreviewPackages, -}); - -async function runPackNativePreviewPackages() { - if (usePublishedPlatformPackagesForVsix) { - checkPublishedPlatformPackagesForVsix(); - await rimraf(builtNpm); - console.log("Skipping npm package packing; VSIX packaging will use published platform packages."); - return; - } - - const platforms = getPlatforms(); - await Promise.all([mainNativePreviewPackage, ...platforms].map(async ({ npmDir, npmTarball }) => { - const { stdout } = await runOutput("npm", ["pack", "--json", npmDir]); - const filename = JSON.parse(stdout)[0].filename.replace("@", "").replace("/", "-"); - await fs.promises.rename(filename, npmTarball); - })); - - // npm packages need to be published in dependency order: platform packages - // first, then the main package that references them as optionalDependencies. - const publishManifest = { - stages: [ - platforms.map(p => ({ - filename: path.basename(p.npmTarball), - })), - [ - { - filename: path.basename(mainNativePreviewPackage.npmTarball), - }, - ], - ], - }; - - const publishManifestPath = path.join(builtNpm, "publish-manifest.json"); - await fs.promises.writeFile(publishManifestPath, JSON.stringify(publishManifest, undefined, 4) + "\n"); -} - -export const packVsixExtensions = task({ - name: "vscode-typescript:pack", - hiddenFromTaskList: true, - dependencies: options.forRelease || usePublishedPlatformPackagesForVsix ? undefined : [buildNativePreviewPackages, cleanSignTempDirectory], - run: runPackVsixExtensions, -}); - -/** @type {Map>} */ -const publishedPlatformPackageLibDirs = new Map(); - -const getPublishedTypeScriptPackageJson = memoize(() => { - const candidates = [ - path.join(extensionDir, "node_modules", publishedTypeScriptAliasPackageName, "package.json"), - path.join(__dirname, "node_modules", publishedTypeScriptAliasPackageName, "package.json"), - ]; - - for (const candidate of candidates) { - if (fs.existsSync(candidate)) { - const packageJson = JSON.parse(fs.readFileSync(candidate, "utf8")); - if (packageJson.name !== "typescript") { - throw new Error(`${publishedTypeScriptAliasPackageName} should alias the typescript package, but found ${packageJson.name}.`); - } - if (!packageJson.version || typeof packageJson.version !== "string") { - throw new Error(`${publishedTypeScriptAliasPackageName} package.json did not contain a version.`); - } - if (!packageJson.optionalDependencies || typeof packageJson.optionalDependencies !== "object") { - throw new Error(`${publishedTypeScriptAliasPackageName} package.json did not contain platform optionalDependencies.`); - } - return packageJson; - } - } - - throw new Error(`Could not find ${publishedTypeScriptAliasPackageName}; run npm install first.`); -}); - -function getPublishedTypeScriptVersion() { - const version = getPublishedTypeScriptPackageJson().version; - if (releaseVscodeTypescript && !stableThreeComponentVersionPattern.test(version)) { - throw new Error(`vscode-typescript releases require a stable three-component TypeScript version, got ${version}.`); - } - return version; -} - -function checkPublishedPlatformPackagesForVsix() { - if (!options.forRelease) { - throw new Error("usePublishedPlatformPackagesForVsix requires forRelease"); - } - getPublishedTypeScriptVersion(); -} - -const getPackageLock = memoize(() => JSON.parse(fs.readFileSync(path.join(__dirname, "package-lock.json"), "utf8"))); - -/** - * @param {string} npmPackageName - */ -async function getPublishedPlatformPackageLibDir(npmPackageName) { - let promise = publishedPlatformPackageLibDirs.get(npmPackageName); - if (!promise) { - promise = getPublishedPlatformPackageLibDirWorker(npmPackageName); - publishedPlatformPackageLibDirs.set(npmPackageName, promise); - } - return promise; -} - -/** - * @param {string} npmPackageName - */ -async function getPublishedPlatformPackageLibDirWorker(npmPackageName) { - const dest = path.join(builtPublishedPlatformPackages, "node_modules", ...npmPackageName.split("/")); - const lib = path.join(dest, "lib"); - if (fs.existsSync(lib)) { - return lib; - } - - await fs.promises.mkdir(dest, { recursive: true }); - - const tarballDestination = path.join(builtPublishedPlatformPackages, "tarballs"); - await fs.promises.mkdir(tarballDestination, { recursive: true }); - - const version = getPublishedTypeScriptPackageJson().optionalDependencies[npmPackageName]; - if (!version || typeof version !== "string") { - throw new Error(`${publishedTypeScriptAliasPackageName} does not depend on ${npmPackageName}.`); - } - - const lockEntry = getPackageLock().packages[`node_modules/${npmPackageName}`]; - if (!lockEntry) { - throw new Error(`package-lock.json does not contain ${npmPackageName}; run npm install.`); - } - if (lockEntry.version !== version) { - throw new Error(`package-lock.json has ${npmPackageName}@${lockEntry.version}, but ${publishedTypeScriptAliasPackageName} depends on ${version}.`); - } - if (!lockEntry.resolved || typeof lockEntry.resolved !== "string") { - throw new Error(`package-lock.json entry for ${npmPackageName}@${version} does not contain a tarball URL.`); - } - if (!lockEntry.integrity || typeof lockEntry.integrity !== "string") { - throw new Error(`package-lock.json entry for ${npmPackageName}@${version} does not contain an integrity hash.`); - } - - const resolved = new URL(lockEntry.resolved); - if (resolved.origin === "https://registry.npmjs.org") { - const registry = new URL(await getReleasePackageRegistry()); - resolved.protocol = registry.protocol; - resolved.host = registry.host; - resolved.pathname = path.posix.join(registry.pathname, resolved.pathname); - } - - console.log(`Fetching locked ${npmPackageName}@${version} tarball from ${resolved}.`); - const response = await fetch(resolved); - if (!response.ok) { - throw new Error(`Failed to fetch ${npmPackageName}@${version}: ${response.status} ${response.statusText}.`); - } - const tarball = Buffer.from(await response.arrayBuffer()); - const integrityMatch = /^sha512-(.+)$/.exec(lockEntry.integrity); - if (!integrityMatch) { - throw new Error(`Unsupported integrity hash for ${npmPackageName}@${version}: ${lockEntry.integrity}.`); - } - const expectedIntegrity = Buffer.from(integrityMatch[1], "base64"); - const actualIntegrity = crypto.createHash("sha512").update(tarball).digest(); - if (expectedIntegrity.length !== actualIntegrity.length || !crypto.timingSafeEqual(expectedIntegrity, actualIntegrity)) { - throw new Error(`Integrity check failed for ${npmPackageName}@${version}.`); - } - const tarballPath = path.join(tarballDestination, path.basename(resolved.pathname)); - await fs.promises.writeFile(tarballPath, tarball); - await tar.x({ file: tarballPath, cwd: dest, strip: 1 }); - - if (!fs.existsSync(lib)) { - throw new Error(`Published platform package ${npmPackageName}@${version} did not contain a lib directory.`); - } - - return lib; -} - -async function runPackVsixExtensions() { - await rimraf(builtVsix); - await fs.promises.mkdir(builtVsix, { recursive: true }); - if (usePublishedPlatformPackagesForVsix) { - checkPublishedPlatformPackagesForVsix(); - publishedPlatformPackageLibDirs.clear(); - await rimraf(builtPublishedPlatformPackages); - } - - const platforms = getPlatforms(); - const extensions = platforms.flatMap(({ npmDir, npmPackageName, extensions }) => extensions.map(e => ({ npmDir, npmPackageName, ...e }))); - if (!extensions.length) { - console.log("No VSIX targets configured; skipping extension packaging."); - return; - } - - // We don't use vscode:prepublish, as that would run the build for each package below. - await run("npm", ["run", "bundle:release"], { cwd: extensionDir, env: releasePackageEnv }); - - let version = "0.0.0"; - if (options.forRelease) { - if (releaseVscodeTypescript) { - version = getVscodeTypeScriptExtensionVersion(); - } - else { - // No real semver prerelease versioning. - // https://code.visualstudio.com/api/working-with-extensions/publishing-extension#prerelease-extensions - assert(options.setPrerelease, "forRelease is true but setPrerelease is not set"); - const prerelease = options.setPrerelease; - assert(typeof prerelease === "string", "setPrerelease is not a string"); - // parse `dev..`. - const match = prerelease.match(/dev\.(\d+)\.(\d+)/); - if (!match) { - throw new Error(`Prerelease version should be in the form of dev.., but got ${prerelease}`); - } - // Set version to `0..`. - version = `0.${match[1]}.${match[2]}`; - } - } - - console.log("Version:", version); - - await Promise.all(extensions.map(async ({ npmDir, npmPackageName, nodeOs, vscodeTarget, sourceDir, extensionDir: thisExtensionDir, vsixPath, vsixManifestPath, vsixSignaturePath }) => { - const npmLibDir = usePublishedPlatformPackagesForVsix - ? await getPublishedPlatformPackageLibDir(npmPackageName) - : path.join(npmDir, "lib"); - const extensionLibDir = path.join(thisExtensionDir, "lib"); - await fs.promises.mkdir(extensionLibDir, { recursive: true }); - - await cpWithoutNodeModulesOrTsconfig(sourceDir, thisExtensionDir); - await cpWithoutNodeModulesOrTsconfig(npmLibDir, extensionLibDir); - await fs.promises.chmod(path.join(extensionLibDir, nativePreviewExeName(nodeOs)), 0o755); - - const packageJsonPath = path.join(thisExtensionDir, "package.json"); - const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); - packageJson.version = version; - packageJson.bundledTypeScriptVersion = usePublishedPlatformPackagesForVsix ? getPublishedTypeScriptVersion() : getVersion(); - fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, undefined, 4)); - - await fs.promises.copyFile("NOTICE.txt", path.join(thisExtensionDir, "NOTICE.txt")); - - await run("vsce", ["package", version, "--no-update-package-json", "--no-dependencies", "--out", vsixPath, "--target", vscodeTarget], { - cwd: thisExtensionDir, - env: releasePackageEnv, - }); - - if (options.forRelease) { - await run("vsce", ["generate-manifest", "--packagePath", vsixPath, "--out", vsixManifestPath], { - cwd: thisExtensionDir, - env: releasePackageEnv, - }); - await fs.promises.cp(vsixManifestPath, vsixSignaturePath); - } - })); -} - -export const signVsixExtensions = task({ - name: "vscode-typescript:sign", - hiddenFromTaskList: true, - run: runSignVsixExtensions, -}); - -async function runSignVsixExtensions() { - if (!options.forRelease) { - throw new Error("This task should not be run in non-release builds."); - } - - const platforms = getPlatforms(); - const extensions = platforms.flatMap(({ npmDir, extensions }) => extensions.map(e => ({ npmDir, ...e }))); - if (!extensions.length) { - console.log("No VSIX targets configured; skipping extension signing."); - return; - } - - await sign({ - SignFileRecordList: [ - { - SignFileList: extensions.map(({ vsixSignaturePath }) => ({ SrcPath: vsixSignaturePath, DstPath: null })), - Certs: "VSCodePublisher", - MacAppName: undefined, - }, - ], - }); - - if (!process.env.MICROBUILD_PLUGIN_DIRECTORY) { - console.log("Skipping VSIX signature verification because signing was faked."); - return; - } - - for (const { vsixPath, vsixManifestPath, vsixSignaturePath } of extensions) { - await run("vsce", [ - "verify-signature", - "--packagePath", - vsixPath, - "--manifestPath", - vsixManifestPath, - "--signaturePath", - vsixSignaturePath, - ]); - } -} - -async function runWriteVscodeTypeScriptReleaseManifest() { - const platforms = getPlatforms(); - const extensions = platforms.flatMap(({ extensions }) => extensions); - /** @type {Record} */ - const artifacts = {}; - for (const extension of extensions) { - for (const artifactPath of [extension.vsixPath, extension.vsixManifestPath, extension.vsixSignaturePath]) { - const filename = path.basename(artifactPath); - artifacts[filename] = { - sha256: crypto.createHash("sha256").update(await fs.promises.readFile(artifactPath)).digest("hex"), - }; - } - } - - const packageJson = getVscodeTypeScriptExtensionPackageJson(); - const manifest = { - extension: `${packageJson.publisher}.${packageJson.name}`, - extensionVersion: getVscodeTypeScriptExtensionVersion(), - bundledTypeScriptVersion: getPublishedTypeScriptVersion(), - signType: process.env.VSCODE_TYPESCRIPT_SIGN_TYPE, - sourceRef: process.env.BUILD_SOURCEBRANCH || process.env.GITHUB_REF || undefined, - sourceCommit: process.env.BUILD_SOURCEVERSION || process.env.GITHUB_SHA || undefined, - targets: extensions.map(({ vscodeTarget }) => vscodeTarget), - artifacts, - }; - await fs.promises.writeFile(path.join(builtVsix, "release-manifest.json"), JSON.stringify(manifest, undefined, 4) + "\n"); -} - -export const vscodeTypescriptRelease = task({ - name: "vscode-typescript:release", - hiddenFromTaskList: true, - run: async () => { - if (!options.forRelease || !releaseVscodeTypescript) { - throw new Error("vscode-typescript:release requires --forRelease and --vscodeTypescriptRelease"); - } - await runPackVsixExtensions(); - await runSignVsixExtensions(); - await runWriteVscodeTypeScriptReleaseManifest(); - await runCleanSignTempDirectory(); - }, -}); - -export const nativePreviewRelease = task({ - name: "typescript:release", - hiddenFromTaskList: true, - run: async () => { - if (releaseVscodeTypescript) { - throw new Error("typescript:release cannot be used with --vscodeTypescriptRelease; use vscode-typescript:release"); - } - if (!options.forRelease || !options.setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix)) { - throw new Error("typescript:release requires --forRelease and --setPrerelease flags, unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled. Example: npx hereby typescript:release --forRelease --setPrerelease=dev.1.0"); - } - await runBuildNativePreviewPackages(); - await runSignNativePreviewPackages(); - await runPackNativePreviewPackages(); - await runPackVsixExtensions(); - await runSignVsixExtensions(); - await runCleanSignTempDirectory(); - }, -}); - -export const nativePreview = task({ - name: "native-preview", - hiddenFromTaskList: true, - dependencies: options.forRelease ? undefined : [packNativePreviewPackages, packVsixExtensions], - run: options.forRelease ? async () => { - throw new Error("This task should not be run in release builds."); - } : undefined, -}); - -export const allChecks = task({ - name: "all-checks", - description: "Runs all checks for the Go code (fourslash, lint, tests, etc.)", - run: async () => { - await runTests(); - await runFormat(); - await runLint(); - await runTests(); - }, -}); - -export const tidy = task({ - name: "tidy", - description: "Tidies both Go modules and synchronizes the workspace.", - run: async () => { - await run("go", ["mod", "tidy"], { cwd: "./tsc" }); - await run("go", ["mod", "tidy"], { cwd: "./tools" }); - await run("go", ["work", "sync"]); - }, -}); +// @ts-check + +import AdmZip from "adm-zip"; +import chokidar from "chokidar"; +import { task } from "hereby"; +import assert from "node:assert"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import { createRequire } from "node:module"; +import os from "node:os"; +import path from "node:path"; +import url from "node:url"; +import { + parseArgs, + styleText, +} from "node:util"; +import * as tar from "tar"; +import { xSync } from "tinyexec"; +import { + enableFileFingerprintCache, + run, +} from "./tools/scripts/gen/utils.mts"; + +enableFileFingerprintCache(); + +if (process.platform === "win32") { + process.chdir(fs.realpathSync.native(process.cwd())); +} + +const __filename = url.fileURLToPath(new URL(import.meta.url)); +const __dirname = path.dirname(__filename); + +const isCI = !!process.env.CI || !!process.env.TF_BUILD; +const stableThreeComponentVersionPatternSource = String.raw`^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$`; +const stableThreeComponentVersionPattern = new RegExp(stableThreeComponentVersionPatternSource); + +/** @typedef {import("./tools/scripts/gen/utils.mts").RunOptions} RunOptions */ + +/** + * @param {string} command + * @param {readonly string[]} [args] + * @param {Omit} [options] + */ +function runOutput(command, args, options) { + return run(command, args, { ...options, captureOutput: true }); +} + +/** + * @param {string} name + * @param {boolean} defaultValue + * @returns {boolean} + */ +function parseEnvBoolean(name, defaultValue = false) { + name = "TSGO_HEREBY_" + name.toUpperCase(); + + const value = process.env[name]; + if (!value) { + return defaultValue; + } + switch (value.toUpperCase()) { + case "1": + case "TRUE": + case "YES": + case "ON": + return true; + case "0": + case "FALSE": + case "NO": + case "OFF": + return false; + } + throw new Error(`Invalid value for ${name}: ${value}`); +} + +const { values: rawOptions } = parseArgs({ + args: process.argv.slice(2), + options: { + tests: { type: "string", short: "t" }, + fix: { type: "boolean" }, + force: { type: "boolean", default: parseEnvBoolean("FORCE") }, + api: { type: "boolean" }, + all: { type: "boolean" }, + debug: { type: "boolean" }, + dirty: { type: "boolean" }, + release: { type: "boolean" }, + + setPrerelease: { type: "string" }, + forRelease: { type: "boolean" }, + respectGoEnv: { type: "boolean" }, + vscodeTypescriptRelease: { type: "boolean" }, + + race: { type: "boolean", default: parseEnvBoolean("RACE") }, + noembed: { type: "boolean", default: parseEnvBoolean("NOEMBED") }, + concurrentTestPrograms: { type: "boolean", default: parseEnvBoolean("CONCURRENT_TEST_PROGRAMS") }, + coverage: { type: "boolean", default: parseEnvBoolean("COVERAGE") }, + }, + strict: false, + allowPositionals: true, + allowNegative: true, +}); + +// We can't use parseArgs' strict mode as it errors on hereby's --tasks flag. +/** + * @typedef {{ [K in keyof typeof rawOptions as {} extends Record ? never : K]: typeof rawOptions[K] }} Options + */ +const options = /** @type {Options} */ (rawOptions); + +// Native release branches can edit these constants to publish a fixed stable version. +// Main publishes prerelease builds of the TypeScript package. +const nativePreviewReleaseProfile = /** @type {"native-preview" | "typescript"} */ ("typescript"); +const nativePreviewReleaseVersion = /** @type {string | undefined} */ (undefined); +const releaseVscodeTypescript = !!options.vscodeTypescriptRelease; +const produceNativePreviewVsix = releaseVscodeTypescript; +const produceTypeScriptNightlyVsix = !nativePreviewReleaseVersion && !releaseVscodeTypescript; +const usePublishedPlatformPackagesForVsix = releaseVscodeTypescript; +const produceAnyVsix = produceNativePreviewVsix || produceTypeScriptNightlyVsix; +const publishAsTypescript = nativePreviewReleaseProfile === "typescript"; + +if (releaseVscodeTypescript && options.setPrerelease) { + throw new Error("vscode-typescript releases use the extension's package.json version and do not accept setPrerelease"); +} +if (!releaseVscodeTypescript && options.forRelease && !options.setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix)) { + throw new Error("forRelease requires setPrerelease unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled"); +} +if (options.respectGoEnv && options.forRelease) { + throw new Error("respectGoEnv cannot be combined with forRelease"); +} +if (options.respectGoEnv && options.setPrerelease) { + throw new Error("respectGoEnv requires the version declared in the source"); +} +if (releaseVscodeTypescript && !publishAsTypescript) { + throw new Error("vscode-typescript releases require nativePreviewReleaseProfile to be 'typescript'"); +} + +const defaultGoBuildTags = [ + ...(options.noembed ? ["noembed"] : []), +]; + +/** + * @param {...string} extra + * @returns {string[]} + */ +function goBuildTags(...extra) { + const tags = new Set(defaultGoBuildTags.concat(extra)); + return tags.size ? [`-tags=${[...tags].join(",")}`] : []; +} + +const goBuildFlags = [ + ...(options.race ? ["-race"] : []), + // https://github.com/go-delve/delve/blob/62cd2d423c6a85991e49d6a70cc5cb3e97d6ceef/Documentation/usage/dlv_exec.md?plain=1#L12 + ...(options.debug ? ["-gcflags=all=-N -l"] : []), +]; + +const goBuildEnv = { + ...(options.race ? {} : { CGO_ENABLED: "0" }), +}; + +/** + * @template T + * @param {() => T} fn + * @returns {() => T} + */ +function memoize(fn) { + /** @type {T} */ + let value; + return () => { + if (fn !== undefined) { + value = fn(); + fn = /** @type {any} */ (undefined); + } + return value; + }; +} + +/** + * @param {string} pattern + * @param {string[]} [exclude] + */ +async function globFiles(pattern, exclude) { + const files = []; + const absolute = path.isAbsolute(pattern); + for await (const entry of fs.promises.glob(pattern, { exclude, withFileTypes: true })) { + if (entry.isFile()) { + const file = path.join(entry.parentPath, entry.name); + files.push(absolute ? file : path.relative(process.cwd(), file)); + } + } + return files; +} + +/** + * @param {(() => Promise)[]} tasks + * @param {number} concurrency + */ +async function runWithConcurrencyLimit(tasks, concurrency) { + const queue = tasks.values(); + /** @type {unknown[]} */ + const errors = []; + const workers = Array.from({ length: Math.min(concurrency, tasks.length) }, async () => { + for (const task of queue) { + try { + await task(); + } + catch (error) { + errors.push(error); + } + } + }); + await Promise.all(workers); + if (errors.length === 1) { + throw errors[0]; + } + if (errors.length > 1) { + throw new AggregateError(errors, `${errors.length} concurrent tasks failed`); + } +} + +const builtLocal = "./built/local"; + +const libsDir = "./tsc/internal/bundled/libs"; +const libsRegexp = /(?:^|[\\/])internal[\\/]bundled[\\/]libs[\\/]/; + +/** + * @param {string} out + */ +async function generateLibs(out) { + await fs.promises.mkdir(out, { recursive: true }); + + const libs = await fs.promises.readdir(libsDir); + + await Promise.all(libs.map(async lib => { + fs.promises.copyFile(path.join(libsDir, lib), path.join(out, lib)); + })); +} + +export const lib = task({ + name: "lib", + description: "Copies the libs to built/local.", + run: () => generateLibs(builtLocal), +}); + +/** + * Gets the release build flags for stripping debug info. + * @param {string} [versionOverride] Optional version to embed in the binary. + * @returns {string[]} + */ +function getReleaseBuildFlags(versionOverride) { + let ldflags = "-ldflags=-s -w"; + if (versionOverride) { + ldflags += ` -X github.com/microsoft/TypeScript/tsc/internal/core.version=${versionOverride}`; + } + return ["-trimpath", ldflags]; +} + +/** + * @param {object} [opts] + * @param {string} [opts.out] + * @param {AbortSignal} [opts.abortSignal] + * @param {Record} [opts.env] + * @param {string[]} [opts.extraFlags] + */ +function buildTsc(opts) { + opts ||= {}; + const out = opts.out ?? path.resolve("./built/local/tsc" + (process.platform === "win32" ? ".exe" : "")); + const env = { ...(options.respectGoEnv ? {} : goBuildEnv), ...opts.env }; + return run("go", ["build", ...goBuildFlags, ...(opts.extraFlags ?? []), ...goBuildTags("noembed"), "-o", out, "./cmd/tsc"], { + signal: opts.abortSignal, + env, + cwd: "./tsc", + }); +} + +export const tscBuild = task({ + name: "tsc:build", + description: "Builds the tsc binary.", + run: async () => { + await buildTsc({ extraFlags: options.release ? getReleaseBuildFlags() : [] }); + }, +}); + +export const tsgo = task({ + name: "tsgo", + dependencies: [lib, tscBuild], +}); + +export const local = task({ + name: "local", + dependencies: [tsgo], +}); + +export const build = task({ + name: "build", + dependencies: [local], +}); + +export const buildWatch = task({ + name: "build:watch", + description: "Builds the tsc binary and watches for changes.", + run: async () => { + await watchDebounced("build:watch", async (paths, abortSignal) => { + let libsChanged = false; + let goChanged = false; + + if (paths) { + for (const p of paths) { + if (libsRegexp.test(p)) { + libsChanged = true; + } + else if (p.endsWith(".go")) { + goChanged = true; + } + if (libsChanged && goChanged) { + break; + } + } + } + else { + libsChanged = true; + goChanged = true; + } + + if (libsChanged) { + console.log("Generating libs..."); + await generateLibs(builtLocal); + } + + if (goChanged) { + console.log("Building tsgo..."); + await buildTsc({ abortSignal }); + } + }, { + paths: ["tsc/cmd", "tsc/internal"], + ignored: path => /[\\/]testdata[\\/]/.test(path), + }); + }, +}); + +export const cleanBuilt = task({ + name: "clean:built", + hiddenFromTaskList: true, + run: () => rimraf("built"), +}); + +/** @type {(() => Promise)[]} */ +const goGenerateActions = []; + +async function runGenerateGo() { + for (const generate of goGenerateActions) { + await generate(); + } + // These generators load Go packages, so all generated Go sources must be current. + await runGenerateEnums(); + await runGenerateAPI(); +} + +export const generateGo = task({ + name: "generate:go", + description: "Runs the project's Go code generators directly. Pass --force to regenerate unchanged files.", + run: runGenerateGo, +}); + +const getGoGenerateEnvironment = memoize(async () => { + const { stdout } = await runOutput("go", ["env", "-json", "GOOS", "GOARCH", "GOROOT"], { cwd: "./tsc" }); + return /** @type {{ GOOS: string; GOARCH: string; GOROOT: string }} */ (JSON.parse(stdout)); +}); + +/** @typedef {import("./tools/scripts/gen/cache.mts").CacheOptions & { file: string }} GoGenerator */ + +/** + * @param {string} name + * @param {GoGenerator} generator + */ +async function runGoGenerator(name, { file, ...spec }) { + const { default: cache } = await import("./tools/scripts/gen/cache.mts"); + const sourcePath = path.resolve(__dirname, file); + const source = fs.readFileSync(sourcePath, "utf8"); + const packageName = /^package\s+(\w+)/m.exec(source)?.[1]; + const line = source.split(/\r?\n/).findIndex(line => line.trimEnd() === `//go:generate npx hereby ${name}`) + 1; + assert(packageName && line, `Missing package or generation directive in ${file}`); + const goEnv = await getGoGenerateEnvironment(); + const pathKey = process.platform === "win32" ? Object.keys(process.env).find(key => key.toUpperCase() === "PATH") ?? "PATH" : "PATH"; + const goBin = path.join(goEnv.GOROOT, "bin"); + const searchPath = (process.env[pathKey] ?? "").split(path.delimiter).filter(entry => path.resolve(entry) !== goBin); + await cache({ + ...spec, + cwd: spec.cwd ?? path.dirname(sourcePath), + inputs: [__filename, sourcePath, ...spec.inputs], + envInputs: [ + ...(spec.envInputs ?? ["GOOS", "GOARCH", "GOFLAGS", "GOTOOLCHAIN", "GOEXPERIMENT", "CGO_ENABLED", "GOWORK"]), + "GOROOT", + "GOFILE", + "GOLINE", + "GOPACKAGE", + "DOLLAR", + ], + env: { + ...goEnv, + GOFILE: path.basename(sourcePath), + GOLINE: String(line), + GOPACKAGE: packageName, + DOLLAR: "$", + [pathKey]: [goBin, ...searchPath].join(path.delimiter), + }, + force: !!options.force, + }); +} + +/** + * @param {string} name + * @param {GoGenerator[] | (() => Promise)} generators + */ +function goGenerateTask(name, generators) { + const run = typeof generators === "function" ? generators : async () => { + for (const generator of generators) await runGoGenerator(name, generator); + }; + goGenerateActions.push(run); + return task({ + name, + description: `Generates ${name.slice("generate:".length)} files. Pass --force to regenerate unchanged files.`, + run, + }); +} + +/** + * @param {string} file + * @param {string} type + * @param {string} output + * @param {string} [trimPrefix] + * @returns {GoGenerator} + */ +function stringerGenerator(file, type, output, trimPrefix) { + return { + file, + inputs: [], + outputs: [output], + commands: [ + ["go", "tool", "golang.org/x/tools/cmd/stringer", `-type=${type}`, ...(trimPrefix ? [`-trimprefix=${trimPrefix}`] : []), `-output=${output}`], + ["dprint", "fmt", output], + ], + }; +} + +/** + * @param {string} file + * @param {string} type + * @param {string} output + * @param {{ source?: string; packageName: string; inputs?: string[]; stub?: boolean }} options + * @returns {GoGenerator} + */ +function moqGenerator(file, type, output, { source = ".", packageName, inputs = [], stub = false }) { + return { + file, + inputs, + outputs: [output], + commands: [ + ["go", "tool", "github.com/matryer/moq", ...(stub ? ["-stub"] : []), "-fmt", "goimports", "-pkg", packageName, "-out", output, source, type], + ["dprint", "fmt", output], + ], + }; +} + +async function runGenerateASTStringer() { + await runGoGenerator("generate:ast-stringer", stringerGenerator("tsc/internal/ast/kind_generated.go", "Kind", "kind_stringer_generated.go")); +} + +export const generateASTStringer = goGenerateTask("generate:ast-stringer", runGenerateASTStringer); + +export const generateBundled = goGenerateTask("generate:bundled", [{ + file: "tsc/internal/bundled/bundled.go", + inputs: ["generate.go", "CopyrightNotice.txt", "libs/*"], + outputs: ["libs_generated.go", "embed_generated.go"], + commands: [["go", "run", "generate.go"]], +}]); + +export const generateChecker = goGenerateTask("generate:checker", [ + stringerGenerator("tsc/internal/checker/types.go", "SignatureKind", "stringer_generated.go"), +]); + +async function runGenerateOptionDefinitions() { + const { default: generate } = await import("./tools/scripts/tsc/generate-options.ts"); + await generate(!!options.force); +} + +async function runGenerateCompilerOptions() { + await runGenerateOptionDefinitions(); + await runGoGenerator("generate:compileroptions", stringerGenerator("tsc/internal/core/options_generated.go", "ModuleKind", "modulekind_stringer_generated.go", "ModuleKind")); + await runGoGenerator("generate:compileroptions", stringerGenerator("tsc/internal/core/options_generated.go", "ScriptTarget", "scripttarget_stringer_generated.go", "ScriptTarget")); +} + +goGenerateActions.push(runGenerateCompilerOptions); +export const generateCompilerOptions = task({ + name: "generate:compileroptions", + description: "Generates compiler options and their dependent API files. Pass --force to regenerate unchanged files.", + run: async () => { + await runGenerateCompilerOptions(); + await runGenerateEnums(); + await runGenerateAPI(); + }, +}); + +export const generateLanguageVariant = goGenerateTask("generate:languagevariant", [ + stringerGenerator("tsc/internal/core/languagevariant.go", "LanguageVariant", "languagevariant_stringer_generated.go"), +]); + +export const generateScriptKind = goGenerateTask("generate:scriptkind", [ + stringerGenerator("tsc/internal/core/scriptkind.go", "ScriptKind", "scriptkind_stringer_generated.go"), +]); + +export const generateTristate = goGenerateTask("generate:tristate", [ + stringerGenerator("tsc/internal/core/tristate.go", "Tristate", "tristate_stringer_generated.go"), +]); + +export const generateDiagnostics = goGenerateTask("generate:diagnostics", [ + { + file: "tsc/internal/diagnostics/diagnostics.go", + inputs: ["generate.go", "diagnosticMessages.json", "../../../tools/LocProject.json", "../{collections,json}/*.go", "loc/*.generated.json"], + exclude: ["**/*_test.go"], + outputs: ["diagnostics_generated.go", "diagnosticMessages.generated.json", "loc_generated.go", "loc/*.json.gz"], + commands: [ + [ + "go", + "run", + "generate.go", + "-diagnostics", + "diagnostics_generated.go", + "-loc", + "loc_generated.go", + "-locdir", + "loc", + "-locproject", + "../../../tools/LocProject.json", + "-locsource", + "diagnosticMessages.generated.json", + ], + ["dprint", "fmt", "diagnostics_generated.go", "loc_generated.go"], + ], + }, + stringerGenerator("tsc/internal/diagnostics/diagnostics.go", "Category", "stringer_generated.go"), +]); + +export const generateAutoImport = goGenerateTask("generate:autoimport", [ + stringerGenerator("tsc/internal/ls/autoimport/export.go", "ExportSyntax", "export_stringer_generated.go"), +]); + +export const generateProject = goGenerateTask("generate:project", [ + stringerGenerator("tsc/internal/project/project.go", "Kind", "project_stringer_generated.go", "Kind"), +]); + +export const generateProjectTestUtil = goGenerateTask("generate:projecttestutil", [ + moqGenerator("tsc/internal/testutil/projecttestutil/projecttestutil.go", "Client", "clientmock_generated.go", { + source: "../../project", + packageName: "projecttestutil", + inputs: ["../../project/client.go"], + stub: true, + }), + moqGenerator("tsc/internal/testutil/projecttestutil/projecttestutil.go", "NpmExecutor", "npmexecutormock_generated.go", { + source: "../../project/ata", + packageName: "projecttestutil", + inputs: ["../../project/ata/ata.go"], + stub: true, + }), +]); + +export const generateVFS = goGenerateTask("generate:vfs", [ + moqGenerator("tsc/internal/vfs/vfs.go", "FS", "vfsmock/mock_generated.go", { packageName: "vfsmock" }), +]); + +export const generateVFSMatch = goGenerateTask("generate:vfsmatch", [ + stringerGenerator("tsc/internal/vfs/vfsmatch/vfsmatch.go", "Usage", "stringer_generated.go", "Usage"), +]); + +export const generateUnicode = goGenerateTask("generate:unicode", async () => { + const { default: generate } = await import("./tsc/internal/stringutil/_scripts/generate-unicode-data.mts"); + await generate(!!options.force); +}); + +async function runGenerateExtension() { + const { default: cache } = await import("./tools/scripts/gen/cache.mts"); + await cache({ + cwd: __dirname, + inputs: [__filename, "tools/scripts/gen/extensionLocalization.mts", "packages/vscode-typescript/package.json", "packages/vscode-typescript/src/**/*"], + outputs: ["packages/vscode-typescript/l10n/bundle.l10n.json"], + commands: [["npm", "run", "-w", "native-preview", "generateLocBundle"]], + envInputs: [], + force: !!options.force, + }); +} + +export const generateExtension = task({ + name: "generate:extension", + description: "Generates files in the extension. Pass --force to regenerate unchanged files.", + run: runGenerateExtension, +}); + +async function runGenerateExtensionTest() { + const { default: cache } = await import("./tools/scripts/gen/cache.mts"); + await cache({ + cwd: __dirname, + inputs: [__filename, "tools/scripts/gen/extensionLocalization.mts", "packages/vscode-typescript/package.json", "packages/vscode-typescript/l10n/bundle.l10n.json", "packages/vscode-typescript/package.nls.json"], + outputs: ["packages/vscode-typescript/l10n/bundle.l10n.qps-ploc.json", "packages/vscode-typescript/package.nls.qps-ploc.json"], + commands: [["npm", "run", "-w", "native-preview", "generateLocTest"]], + envInputs: [], + force: !!options.force, + }); +} + +export const generateExtensionTest = task({ + name: "generate:extension-test", + description: "Generates pseudo-localized extension resources. Pass --force to regenerate unchanged files.", + dependencies: [generateExtension], + run: runGenerateExtensionTest, +}); + +async function runGenerateLSP() { + const { GeneratedFile } = await import("./tools/scripts/gen/generatedFile.mts"); + const directory = path.join(__dirname, "tools/scripts/lsp"); + const modelFiles = ["metaModel.json", "metaModelSchema.mts"].map(file => new GeneratedFile(path.join(directory, file), [path.join(directory, "fetchModel.mts"), path.join(__dirname, "package-lock.json")])); + if (!modelFiles.every(file => file.isCurrent(!!options.force))) { + for (const file of modelFiles) file.invalidate(); + const { default: fetchModel } = await import("./tools/scripts/lsp/fetchModel.mts"); + await fetchModel(); + for (const file of modelFiles) file.markCurrent(); + } + const output = new GeneratedFile(path.join(__dirname, "tsc/internal/lsp/lsproto/lsp_generated.go"), [ + __filename, + path.join(directory, "generate.mts"), + ...modelFiles.map(file => file.fileName), + ]); + if (!output.isCurrent(!!options.force)) { + output.invalidate(); + const { default: generate } = await import("./tools/scripts/lsp/generate.mts"); + await generate(); + output.markCurrent(); + } + else { + console.log("LSP bindings are up to date."); + } + const typeScriptOutput = new GeneratedFile(path.join(__dirname, "packages/typescript/src/vscode/protocol.generated.ts"), [ + __filename, + path.join(directory, "generate.mts"), + path.join(directory, "generateTypeScript.mts"), + path.join(directory, "typeScript.mts"), + path.join(__dirname, "packages/vscode-typescript/src/lspMiddleware.ts"), + ...modelFiles.map(file => file.fileName), + ]); + if (!typeScriptOutput.isCurrent(!!options.force)) { + typeScriptOutput.invalidate(); + const { default: generate } = await import("./tools/scripts/lsp/generateTypeScript.mts"); + await generate(); + typeScriptOutput.markCurrent(); + } +} + +export const generateLSP = task({ + name: "generate:lsp", + description: "Generates Go LSP bindings and extension API types from the pinned protocol model. Pass --force to regenerate unchanged files.", + run: runGenerateLSP, +}); + +async function runGenerateEnums() { + const { default: generate } = await import("./tools/scripts/tsc/generate-enums.ts"); + await generate(!!options.force); +} + +export const generateEnums = task({ + name: "generate:enums", + description: "Generates TypeScript enums from metadata and Go source. Pass --force to regenerate unchanged files.", + run: runGenerateEnums, +}); + +async function runGenerateAST() { + const { default: generate } = await import("./tools/scripts/tsc/generate.ts"); + generate(!!options.force); + await runGenerateASTStringer(); +} + +export const generateAST = task({ + name: "generate:ast", + description: "Generates AST, kind stringer, and encoder files from ast.json. Pass --force to regenerate unchanged files.", + run: runGenerateAST, +}); + +async function runGenerateSync() { + const { generateSync } = await import("./packages/typescript/scripts/generateSync.ts"); + generateSync(!!options.force); +} + +export const generateSync = task({ + name: "generate:sync", + description: "Generates synchronous and generator APIs and tests. Pass --force to regenerate unchanged files.", + run: runGenerateSync, +}); + +async function runGeneratePreferences() { + await runGoGenerator("generate:preferences", { + file: "tsc/internal/ls/lsutil/userpreferences.go", + cwd: __dirname, + inputs: ["tools/userPreferences.schema.json", "tools/gen-preferences/*.go"], + exclude: ["**/*_test.go"], + envInputs: [], + outputs: [ + "tsc/internal/ls/lsutil/userpreferences_generated.go", + "packages/typescript/src/api/userPreferences.generated.ts", + ], + commands: [ + ["go", "-C", "./tools", "run", "./gen-preferences", "./userPreferences.schema.json", "../tsc/internal/ls/lsutil/userpreferences_generated.go", "../packages/typescript/src/api/userPreferences.generated.ts"], + ["dprint", "fmt", "tsc/internal/ls/lsutil/userpreferences_generated.go", "packages/typescript/src/api/userPreferences.generated.ts"], + ], + }); +} + +export const generatePreferences = goGenerateTask("generate:preferences", runGeneratePreferences); + +async function runGenerateAPI() { + await runGeneratePreferences(); + await runGoGenerator("generate:api", { + file: "tsc/internal/api/proto.go", + cwd: __dirname, + inputs: [ + "tsc/internal/api/*.go", + "tsc/internal/api/requestfilesystem/*.go", + "tsc/internal/core/*.go", + "tsc/internal/checker/types.go", + "tsc/internal/diagnostics/diagnostics.go", + "tsc/internal/tspath/path.go", + "tools/gen-proto/*.go", + ], + exclude: ["**/*_test.go"], + envInputs: [], + outputs: ["packages/typescript/src/api/proto.generated.ts"], + commands: [ + ["go", "-C", "./tools", "run", "./gen-proto", "../tsc/internal/api/proto.go", "../packages/typescript/src/api/proto.generated.ts"], + ["dprint", "fmt", "packages/typescript/src/api/proto.generated.ts"], + ], + }); +} + +export const generateAPI = task({ + name: "generate:api", + description: "Generates API files. Pass --force to regenerate unchanged files.", + run: runGenerateAPI, +}); + +const vendorJsonrpcDir = "packages/typescript/vendor/vscode-jsonrpc"; +const vendorJsonrpcSrc = "node_modules/vscode-jsonrpc"; +// Files copied verbatim from the installed vscode-jsonrpc package into the +// vendored copy. Only the runtime files needed by the `#vscode-jsonrpc/node` +// import (lib + typings + package.json) plus license/readme are vendored. +const vendorJsonrpcFiles = ["package.json", "README.md", "License.txt", "lib", "typings"]; + +async function runGenerateVendor() { + const { GeneratedFile } = await import("./tools/scripts/gen/generatedFile.mts"); + const src = path.join(__dirname, vendorJsonrpcSrc); + const dest = path.join(__dirname, vendorJsonrpcDir); + if (!fs.existsSync(src)) { + throw new Error(`${vendorJsonrpcSrc} is not installed; run \`npm ci\` first.`); + } + const manifest = new GeneratedFile(path.join(dest, "package.json"), [__filename, path.join(src, "package.json")]); + if (manifest.isCurrent(!!options.force)) { + console.log("Vendored vscode-jsonrpc files are up to date."); + return; + } + manifest.invalidate(); + await rimraf(dest); + await fs.promises.mkdir(dest, { recursive: true }); + for (const file of vendorJsonrpcFiles) { + await cpRecursive(path.join(src, file), path.join(dest, file)); + } + manifest.markCurrent(); +} + +export const generateVendor = task({ + name: "generate:vendor", + description: "Updates the vendored copy of vscode-jsonrpc from node_modules. Pass --force to regenerate unchanged files.", + run: runGenerateVendor, +}); + +const generateCompiler = task({ + name: "generate:compiler", + hiddenFromTaskList: true, + dependencies: [generateAST, generateLSP], + run: runGenerateGo, +}); + +export const generate = task({ + name: "generate", + description: "Runs all code generation, including AST, LSP, APIs, extension localization, and vendored dependencies.", + dependencies: [generateCompiler, generateSync, generateExtensionTest, generateVendor], +}); + +const coverageDir = path.join(__dirname, "coverage"); + +const ensureCoverageDirExists = memoize(() => { + if (options.coverage) { + fs.mkdirSync(coverageDir, { recursive: true }); + } +}); + +/** + * @param {string} taskName + */ +function goTestFlags(taskName) { + ensureCoverageDirExists(); + return [ + ...goBuildFlags, + ...goBuildTags(), + ...(options.tests ? [`-run=${options.tests}`] : []), + ...(options.coverage ? [`-coverprofile=${path.join(coverageDir, "coverage." + taskName + ".out")}`, "-coverpkg=./..."] : []), + ]; +} + +function getGODEBUG() { + const key = "tracebackancestors"; + const setting = `${key}=10`; + const existing = process.env.GODEBUG ?? ""; + if (!existing) return setting; + if (existing.includes(`${key}=`)) return existing; + return `${existing},${setting}`; +} + +const goTestEnv = { + GODEBUG: getGODEBUG(), + ...(options.concurrentTestPrograms ? { TS_TEST_PROGRAM_SINGLE_THREADED: "false" } : {}), + // Go test caching takes a long time on Windows. + // https://github.com/golang/go/issues/72992 + ...(process.platform === "win32" ? { GOFLAGS: "-count=1" } : {}), +}; + +const baselineTrackingEnabled = false && ![ + options.tests, + options.noembed, + options.concurrentTestPrograms, + options.race, + options.dirty, +].some(Boolean); + +const goTestSumFlags = [ + "--format-hide-empty-pkg", + "--hide-summary", + "skipped", +]; + +/** + * Collects all baseline files that were used during the test run. + * @param {string} trackingDir + * @returns {Promise>} + */ +async function collectUsedBaselines(trackingDir) { + /** @type {Set} */ + const usedBaselines = new Set(); + if (!fs.existsSync(trackingDir)) { + return usedBaselines; + } + + const trackingFiles = await fs.promises.readdir(trackingDir); + for (const file of trackingFiles) { + const content = await fs.promises.readFile(path.join(trackingDir, file), "utf-8"); + for (const line of content.split("\n")) { + const trimmed = line.trim(); + if (trimmed) { + usedBaselines.add(trimmed); + } + } + } + return usedBaselines; +} + +/** + * Checks for unused baseline files and reports them. + * @param {string} trackingDir + * @returns {Promise} List of unused baseline file paths. + */ +async function checkUnusedBaselines(trackingDir) { + const usedBaselines = await collectUsedBaselines(trackingDir); + if (usedBaselines.size === 0) { + // No baselines recorded - either no tests ran or tracking wasn't set up properly + return []; + } + + const allBaselines = await globFiles(`${refBaseline}/**`); + const unusedBaselines = allBaselines + .map(p => path.relative(refBaseline, p)) + .filter(p => !usedBaselines.has(p)); + + return unusedBaselines; +} + +/** + * @param {string} taskName + */ +function gotestsumArgs(taskName) { + return [ + ...goTestSumFlags, + "--", + ...goTestFlags(taskName), + ]; +} + +/** + * @param {string} taskName + */ +function goTest(taskName) { + return ["go", "test"].concat(goTestFlags(taskName)); +} + +async function runTests() { + if (!options.dirty) { + await rimraf(localBaseline); + await fs.promises.mkdir(localBaseline, { recursive: true }); + } + + // Create a tmp directory for baseline tracking if enabled + /** @type {string | undefined} */ + let trackingDir; + /** @type {(() => Promise) | undefined} */ + let cleanupTracking; + + if (baselineTrackingEnabled) { + const tempTrackingDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-baseline-tracking-")); + trackingDir = tempTrackingDir; + cleanupTracking = () => rimraf(tempTrackingDir); + } + + try { + const testEnv = { + ...goTestEnv, + ...(trackingDir ? { TSGO_BASELINE_TRACKING_DIR: trackingDir } : {}), + }; + await gotestsumTool.run([...gotestsumArgs("tests"), "./...", ...(isCI ? ["--timeout=45m"] : [])], { + env: testEnv, + cwd: "./tsc", + }); + + // Check for unused baselines after tests complete + if (trackingDir) { + const unusedBaselines = await checkUnusedBaselines(trackingDir); + if (unusedBaselines.length > 0) { + console.error(styleText("red", `\nFound ${unusedBaselines.length} unused baseline file(s):`)); + for (const baseline of unusedBaselines.slice(0, 20)) { + console.error(styleText("red", ` ${baseline}`)); + } + if (unusedBaselines.length > 20) { + console.error(styleText("red", ` ... and ${unusedBaselines.length - 20} more`)); + } + + // Create .delete files for each unused baseline so baseline-accept can remove them + for (const baseline of unusedBaselines) { + const deleteFilePath = path.join(localBaseline, baseline + ".delete"); + await fs.promises.mkdir(path.dirname(deleteFilePath), { recursive: true }); + await fs.promises.writeFile(deleteFilePath, ""); + } + console.error(styleText("red", `\nRun 'hereby baseline-accept' to delete them.`)); + + throw new Error(`Found ${unusedBaselines.length} unused baseline file(s). Run 'hereby baseline-accept' to delete them.`); + } + } + } + finally { + if (cleanupTracking) { + await cleanupTracking(); + } + } +} + +async function runTestExtension() { + await run("npm", ["test", "-w", "native-preview"]); +} + +export const testTsc = task({ + name: "test:tsc", + description: "Runs all tests in the tsc module.", + run: runTests, +}); + +export const testExtension = task({ + name: "test:extension", + description: "Runs the VS Code extension tests.", + run: runTestExtension, +}); + +export const test = task({ + name: "test", + description: "Alias for test:tsc.", + dependencies: [testTsc], +}); + +async function runTestBenchmarks() { + // Run the benchmarks once to ensure they compile and run without errors. + const command = goTest("benchmarks"); + await run(command[0], [...command.slice(1), "-run=-", "-bench=.", "-benchtime=1x", "./..."], { env: goTestEnv, cwd: "./tsc" }); +} + +export const testBenchmarks = task({ + name: "test:benchmarks", + description: "Runs Go benchmarks once; excluded from validate.", + run: runTestBenchmarks, +}); + +async function runTestTools() { + await gotestsumTool.run([...gotestsumArgs("tools"), "./..."], { env: goTestEnv, cwd: path.join(__dirname, "tools") }); +} + +async function runTestAPI() { + // Running the package script doesn't work on Windows; some path escaping isn't done correctly and the test runner runs no tests. + await run("node", ["--conditions", "@typescript/source", "--test", "./test/**/*.test.ts"], { cwd: "./packages/typescript" }); +} + +async function runTestAPIBenchmarks() { + for (const variant of ["async", "sync", "generators"]) { + await run("node", ["--conditions", "@typescript/source", `./test/${variant}/api.bench.ts`, "--singleIteration"], { cwd: "./packages/typescript" }); + } +} + +export const testTools = task({ + name: "test:tools", + description: "Runs all tests in the tools module.", + run: runTestTools, +}); + +export const testCodegen = task({ + name: "test:codegen", + description: "Runs incremental codegen tests.", + run: async () => { + await run("go", ["-C", "tsc", "mod", "download"]); + await run("node", ["--test", "--test-concurrency=1", "./tools/scripts/gen/*.test.mts", "./tools/scripts/tsc/*.test.ts"]); + }, +}); + +export const buildAPI = task({ + name: "build:api", + description: "Builds @typescript/typescript JS API.", + run: async () => { + await run("npm", ["run", "-w", "@typescript/typescript", "build"]); + }, +}); + +async function runBuildAPITests(generateSources = true) { + if (generateSources) await runGenerateSync(); + await run("npm", ["run", "-w", "@typescript/typescript", "build:test"]); +} + +export const buildAPITests = task({ + name: "build:api:test", + description: "Builds the @typescript/typescript JS API tests.", + dependencies: [generateEnums, generateAPI], + run: runBuildAPITests, +}); + +export const testAPI = task({ + name: "test:api", + description: "Runs the @typescript/typescript JS API tests.", + dependencies: [tsgo, buildAPITests], + run: runTestAPI, +}); + +export const testAPIBenchmarks = task({ + name: "test:benchmarks:api", + description: "Runs async, sync, and generator API benchmarks once; excluded from validate.", + dependencies: [tsgo, buildAPITests], + run: runTestAPIBenchmarks, +}); + +export const testAll = task({ + name: "test:all", + description: "Runs compiler, extension, benchmark, tools, and API tests. Codegen tests are opt-in via test:codegen.", + dependencies: [tsgo, buildAPITests], + run: async () => { + // Prevent interleaving by running these directly instead of in parallel. + await runTests(); + await runTestExtension(); + await runTestBenchmarks(); + await runTestTools(); + await runTestAPI(); + await runTestAPIBenchmarks(); + }, +}); + +/** + * @param {{ + * toolPath: string; + * globs: string[]; + * build: (toolPath: string) => Promise; + * exclude?: string[]; + * }} spec + */ +function createCachedTool({ toolPath, globs, build, exclude }) { + toolPath = path.resolve(toolPath); + const hashPath = toolPath + ".hash"; + const files = fs.globSync(globs, { exclude }).filter(file => fs.statSync(file).isFile()).map(file => path.resolve(file)); + files.sort(); + + const ensure = memoize(async () => { + const hash = crypto.createHash("sha256"); + for (const file of files) { + hash.update(file); + hash.update(fs.readFileSync(file)); + } + const digest = hash.digest("hex") + "\n"; + if ( + fs.existsSync(toolPath) + && fs.existsSync(hashPath) + && fs.readFileSync(hashPath, "utf8") === digest + ) { + return; + } + + await build(toolPath); + fs.writeFileSync(hashPath, digest); + }); + + return { + ensure, + /** @param {string[]} args @param {RunOptions} [options] */ + run: async (args, options) => { + await ensure(); + return run(toolPath, args, options); + }, + }; +} + +const gotestsumTool = createCachedTool({ + toolPath: `./tools/gotestsum${process.platform === "win32" ? ".exe" : ""}`, + globs: ["./tools/go.mod", "./tools/go.sum"], + build: async () => { + await run("go", ["install", "gotest.tools/gotestsum"], { + cwd: "./tools", + env: { GOBIN: path.resolve("./tools") }, + }); + }, +}); + +const golangciLintPackage = memoize(() => { + const golangciLintYml = fs.readFileSync(".custom-gcl.yml", "utf8"); + const pattern = /^version:\s*(v\d+\.\d+\.\d+).*$/m; + const match = pattern.exec(golangciLintYml); + if (!match) { + throw new Error("Expected version in .custom-gcl.yml"); + } + const version = match[1]; + const major = version.split(".")[0]; + const versionSuffix = ["v0", "v1"].includes(major) ? "" : "/" + major; + + return `github.com/golangci/golangci-lint${versionSuffix}/cmd/golangci-lint@${version}`; +}); + +const customLinterTool = createCachedTool({ + toolPath: `./tools/custom-gcl${process.platform === "win32" ? ".exe" : ""}`, + globs: [ + "./tools/go.mod", + "./tools/customlint/**/*", + "./.custom-gcl.yml", + ], + exclude: ["**/testdata/**"], + build: async toolPath => { + await run("go", ["run", golangciLintPackage(), "custom"]); + await run(toolPath, ["cache", "clean"]); + }, +}); + +export const lint = task({ + name: "lint", + description: "Runs golangci-lint.", + run: runLint, +}); + +async function runLint() { + const lintArgs = ["run"]; + if (defaultGoBuildTags.length) { + lintArgs.push("--build-tags", defaultGoBuildTags.join(",")); + } + if (options.fix) { + lintArgs.push("--fix"); + } + + await customLinterTool.run([...lintArgs, "--config", "../.golangci.yml"], { cwd: "./tsc" }); + console.log("Linting tools"); + await customLinterTool.run([...lintArgs, "--config", "../.golangci.yml"], { cwd: "./tools" }); +} + +export const installTools = task({ + name: "install-tools", + description: "Installs optional tools for developing within the repo.", + run: async () => { + await Promise.all([ + gotestsumTool.ensure(), + customLinterTool.ensure(), + ]); + }, +}); + +export const format = task({ + name: "format", + description: "Formats the repo.", + run: runFormat, +}); + +async function runFormat() { + await run("dprint", ["fmt"]); + await fixLineEndings(); +} + +const lineEndingExclusions = [ + ":(exclude)tsc/testdata/**", + ":(exclude)tools/loc/**/*.lcl", +]; + +export const fixLineEndingsTask = task({ + name: "fix:line-endings", + description: "Converts tracked files that Git expects to use LF.", + run: fixLineEndings, +}); + +async function fixLineEndings() { + const result = await runOutput("git", ["ls-files", "--eol", "-z", "--", ".", ...lineEndingExclusions]); + const files = []; + for (const record of result.stdout.split("\0")) { + if (!record) { + continue; + } + const separator = record.indexOf("\t"); + assert(separator !== -1); + const eolInfo = record.slice(0, separator); + if (!/\bw\/(?:crlf|mixed)\b/.test(eolInfo) || !eolInfo.includes("eol=lf")) { + continue; + } + files.push(record.slice(separator + 1)); + } + + await Promise.all(files.map(async file => { + const contents = await fs.promises.readFile(file); + const normalized = Buffer.from(contents.toString("latin1").replaceAll("\r\n", "\n"), "latin1"); + await fs.promises.writeFile(file, normalized); + })); + + if (files.length) { + console.log(`Converted ${files.length} file(s) to LF.`); + } +} + +export const validate = task({ + name: "validate", + description: "Generates, builds, tests, lints, and formats the repo. Pass --api to include API tests, or --all to include all code generation and ancillary repository tests Benchmarks are separate: test:benchmarks and test:benchmarks:api.", + dependencies: [options.all ? generate : generateGo], + run: async () => { + await generateLibs(builtLocal); + await buildTsc({ extraFlags: options.release ? getReleaseBuildFlags() : [] }); + + /** @type {{ name: string; error: unknown }[]} */ + const failures = []; + /** @param {string} name @param {() => Promise} action */ + const runValidation = async (name, action) => { + try { + await action(); + } + catch (error) { + failures.push({ name, error }); + console.error(styleText("red", `${name} failed; continuing validation.`)); + } + }; + + await runValidation("test:tsc", runTests); + await runValidation("test:extension", runTestExtension); + if (options.api || options.all) { + if (!options.all) await runGenerateEnums(); + await runBuildAPITests(!options.all); + await runValidation("test:api", runTestAPI); + } + if (options.all) { + await runValidation("test:tools", runTestTools); + await runValidation("test:options", async () => { + await run("node", ["--test", "./tools/scripts/tsc/options.test.ts"]); + }); + await runValidation("test:smoke", runSmokeTest); // in CI this is run with `--race` + } + await runValidation("lint", runLint); + await runValidation("format", runFormat); + + if (failures.length) { + throw new AggregateError( + failures.map(failure => failure.error), + `Validation failed: ${failures.map(failure => failure.name).join(", ")}`, + ); + } + }, +}); + +async function runSmokeTest() { + await run("./built/local/tsc", ["-p", "./tsc/testdata/fixtures/compiler", "--noEmit", "--singleThreaded"]); + await run("./built/local/tsc", ["-p", "./tsc/testdata/fixtures/compiler", "--noEmit"]); +} + +export const smokeTest = task({ + name: "test:smoke", + description: "Runs the smoke tests.", + dependencies: [build], + run: runSmokeTest, +}); + +export const checkFormat = task({ + name: "check:format", + description: "Checks that the repo is formatted.", + run: async () => { + await run("dprint", ["check"]); + await checkLineEndings(); + }, +}); + +async function checkLineEndings() { + const result = xSync( + "git", + ["grep", "--cached", "-Il", "\r", "--", ".", ...lineEndingExclusions], + { throwOnError: false, nodeOptions: { stdio: "pipe" } }, + ); + if (result.exitCode === 1) { + return; + } + if (result.exitCode !== 0) { + throw new Error(`Failed to check line endings:\n${result.stderr}`); + } + throw new Error(`Files must use LF line endings:\n${result.stdout}`); +} + +export const checkHerebyfile = task({ + name: "check:herebyfile", + description: "Type-checks Herebyfile.mjs.", + run: () => + run("node", [ + "./node_modules/typescript/bin/tsc", + "--noEmit", + "--allowJs", + "--allowImportingTsExtensions", + "--checkJs", + "--target", + "es2022", + "--lib", + "es2024,esnext.array,esnext.collection,esnext.iterator", + "--module", + "nodenext", + "--moduleResolution", + "nodenext", + "--types", + "node", + "--strict", + "--esModuleInterop", + "--skipLibCheck", + "Herebyfile.mjs", + ]), +}); + +export const checkVsceVersion = task({ + name: "check:vsce-version", + description: "Checks that Azure release jobs use the repository's pinned vsce version.", + run: () => { + for (const validVersion of ["0.0.0", "1.2.3", "10.20.30"]) { + assert(stableThreeComponentVersionPattern.test(validVersion), `${validVersion} should be a valid stable version.`); + } + for (const invalidVersion of ["01.0.0", "1.02.0", "1.2.03", "1.2", "1.2.3-beta"]) { + assert(!stableThreeComponentVersionPattern.test(invalidVersion), `${invalidVersion} should not be a valid stable version.`); + } + + const packageJson = JSON.parse(fs.readFileSync("./packages/vscode-typescript/package.json", "utf8")); + const packageLock = JSON.parse(fs.readFileSync("./package-lock.json", "utf8")); + const version = packageJson.devDependencies?.["@vscode/vsce"]; + if (typeof version !== "string" || !stableThreeComponentVersionPattern.test(version)) { + throw new Error(`packages/vscode-typescript must pin @vscode/vsce to an exact version, got ${JSON.stringify(version)}.`); + } + + const workspaceVersion = packageLock.packages?.["packages/vscode-typescript"]?.devDependencies?.["@vscode/vsce"]; + const installedVersion = packageLock.packages?.["node_modules/@vscode/vsce"]?.version; + if (workspaceVersion !== version || installedVersion !== version) { + throw new Error( + `@vscode/vsce version mismatch: package.json=${version}, package-lock workspace=${workspaceVersion}, package-lock package=${installedVersion}.`, + ); + } + + const setupVsce = fs.readFileSync("./tools/pipelines/steps/setup-vsce.yml", "utf8"); + const activeSetupLines = setupVsce.split(/\r?\n/).filter(line => !line.trimStart().startsWith("#")); + const installCommand = `- bash: npm install --no-save @vscode/vsce@${version}`; + if (activeSetupLines.filter(line => line.trim() === installCommand).length !== 1) { + throw new Error(`tools/pipelines/steps/setup-vsce.yml must install exactly @vscode/vsce@${version}.`); + } + }, +}); + +const scriptTsconfigs = [ + "./tools/scripts/gen/tsconfig.json", + "./tools/scripts/tsc/tsconfig.json", + "./tools/scripts/lsp/tsconfig.json", +]; + +export const checkScripts = task({ + name: "check:scripts", + description: "Type-checks TypeScript scripts.", + run: async () => { + for (const tsconfig of scriptTsconfigs) { + console.log(`Type-checking ${tsconfig}`); + await run("tsc", ["-p", tsconfig]); + } + }, +}); + +/** + * @param {string} localBaseline Path to the local copy of the baselines + * @param {string} refBaseline Path to the reference copy of the baselines + */ +function baselineAcceptTask(localBaseline, refBaseline) { + /** + * @param {string} p + */ + function localPathToRefPath(p) { + const relative = path.relative(localBaseline, p); + return path.join(refBaseline, relative); + } + + return async () => { + const toCopy = await globFiles(`${localBaseline}/**`, [`${localBaseline}/**/*.delete`]); + for (const p of toCopy) { + const out = localPathToRefPath(p); + await fs.promises.mkdir(path.dirname(out), { recursive: true }); + await fs.promises.copyFile(p, out); + } + const toDelete = await globFiles(`${localBaseline}/**/*.delete`); + for (const p of toDelete) { + const out = localPathToRefPath(p).replace(/\.delete$/, ""); + await rimraf(out); + await rimraf(p); // also delete the .delete file so that it no longer shows up in a diff tool. + } + }; +} + +const localBaseline = "tsc/testdata/baselines/local/"; +const refBaseline = "tsc/testdata/baselines/reference/"; + +export const baselineAccept = task({ + name: "baseline-accept", + description: "Makes the most recent test results the new baseline, overwriting the old baseline.", + run: baselineAcceptTask(localBaseline, refBaseline), +}); + +function getDiffTool() { + const program = process.env.DIFF; + if (!program) { + console.warn("Add the 'DIFF' environment variable to the path of the program you want to use."); + process.exit(1); + } + return program; +} + +export const diff = task({ + name: "diff", + description: "Diffs baselines using the diff tool specified by the 'DIFF' environment variable", + run: () => run(getDiffTool(), [refBaseline, localBaseline]), +}); + +/** + * @param {fs.PathLike} p + */ +function rimraf(p) { + // The rimraf package uses maxRetries=10 on Windows, but Node's fs.rm does not have that special case. + return fs.promises.rm(p, { recursive: true, force: true, maxRetries: process.platform === "win32" ? 10 : 0 }); +} + +/** @typedef {{ + * name: string; + * paths: string | string[]; + * ignored?: (path: string) => boolean; + * run: (paths: Set, abortSignal: AbortSignal) => void | Promise; + * }} WatchTask */ +void 0; + +/** + * @param {string} name + * @param {(paths: Set | undefined, abortSignal: AbortSignal) => void | Promise} run + * @param {object} options + * @param {string | string[]} options.paths + * @param {(path: string) => boolean} [options.ignored] + * @param {string} [options.name] + */ +async function watchDebounced(name, run, options) { + let watching = true; + let running = true; + let lastChangeTimeMs = Date.now(); + let changedDeferred = /** @type {Deferred} */ (new Deferred()); + let abortController = new AbortController(); + + const debouncer = new Debouncer(1_000, endRun); + const watcher = chokidar.watch(options.paths, { + ignored: options.ignored, + ignorePermissionErrors: true, + alwaysStat: true, + }); + // The paths that have changed since the last run. + /** @type {Set | undefined} */ + let paths; + + process.on("SIGINT", endWatchMode); + process.on("beforeExit", endWatchMode); + watcher.on("all", onChange); + + while (watching) { + const promise = changedDeferred.promise; + const token = abortController.signal; + if (!token.aborted) { + running = true; + try { + const thePaths = paths; + paths = new Set(); + await run(thePaths, token); + } + catch { + // ignore + } + running = false; + } + if (watching) { + console.log(styleText("yellowBright", `[${name}] run complete, waiting for changes...`)); + await promise; + } + } + + console.log("end"); + + /** + * @param {'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir' | 'all' | 'ready' | 'raw' | 'error'} eventName + * @param {string} path + * @param {fs.Stats | undefined} stats + */ + function onChange(eventName, path, stats) { + switch (eventName) { + case "change": + case "unlink": + case "unlinkDir": + break; + case "add": + case "addDir": + // skip files that are detected as 'add' but haven't actually changed since the last time we ran. + if (stats && stats.mtimeMs <= lastChangeTimeMs) { + return; + } + break; + } + beginRun(path); + } + + /** + * @param {string} path + */ + function beginRun(path) { + if (debouncer.empty) { + console.log(styleText("yellowBright", `[${name}] changed due to '${path}', restarting...`)); + if (running) { + console.log(styleText("yellowBright", `[${name}] aborting in-progress run...`)); + } + abortController.abort(); + abortController = new AbortController(); + } + + debouncer.enqueue(); + paths ??= new Set(); + paths.add(path); + } + + function endRun() { + lastChangeTimeMs = Date.now(); + changedDeferred.resolve(); + changedDeferred = /** @type {Deferred} */ (new Deferred()); + } + + function endWatchMode() { + if (watching) { + watching = false; + console.log(styleText("yellowBright", `[${name}] exiting watch mode...`)); + abortController.abort(); + watcher.close(); + } + } +} + +/** + * @template T + */ +export class Deferred { + constructor() { + /** @type {Promise} */ + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + } +} + +export class Debouncer { + /** + * @param {number} timeout + * @param {() => Promise | void} action + */ + constructor(timeout, action) { + this._timeout = timeout; + this._action = action; + /** @type {ReturnType | undefined} */ + this._timer = undefined; + /** @type {Deferred | undefined} */ + this._deferred = undefined; + } + + get empty() { + return !this._deferred; + } + + enqueue() { + if (this._timer) { + clearTimeout(this._timer); + this._timer = undefined; + } + + if (!this._deferred) { + this._deferred = new Deferred(); + } + + this._timer = setTimeout(() => this.run(), 100); + return this._deferred.promise; + } + + run() { + if (this._timer) { + clearTimeout(this._timer); + this._timer = undefined; + } + + const deferred = this._deferred; + assert(deferred); + this._deferred = undefined; + try { + deferred.resolve(this._action()); + } + catch (e) { + deferred.reject(e); + } + } +} + +const getVersion = memoize(() => { + if (nativePreviewReleaseVersion) { + return nativePreviewReleaseVersion; + } + + const f = fs.readFileSync("./tsc/internal/core/version.go", "utf8"); + + const match = f.match(/var version\s*=\s*"(\d+\.\d+\.\d+)(-[^"]+)?"/); + if (!match) { + throw new Error("Failed to extract version from version.go"); + } + + let version = match[1]; + if (options.setPrerelease) { + version += `-${options.setPrerelease}`; + } + else if (match[2]) { + version += match[2]; + } + + return version; +}); + +function getPublishTag() { + if (publishAsTypescript) { + const version = getVersion(); + if (!version) { + throw new Error("Publishing as 'typescript' requires a version before selecting an npm tag."); + } + const match = version.match(/-(dev|beta|rc)(?:[.-]|$)/); + if (match?.[1]) return match[1] === "dev" ? "next" : match[1]; + if (version === nativePreviewReleaseVersion && stableThreeComponentVersionPattern.test(version)) return "latest"; + throw new Error(`Refusing to publish 'typescript' with the latest tag from non-release version ${version}.`); + } + return "latest"; +} + +const extensionDir = path.resolve("./packages/vscode-typescript"); +const nightlyExtensionDir = path.resolve("./packages/vscode-typescript-nightly"); +const builtNpm = path.resolve("./built/npm"); +const builtVsix = path.resolve("./built/vsix"); +const typeScriptReleaseInfoPath = path.resolve("./built/typescript-release-info.json"); +const builtPublishedPlatformPackages = path.resolve("./built/published-platform-packages"); +const builtSignTmp = path.resolve("./built/sign-tmp"); +const publishedTypeScriptAliasPackageName = "@typescript/bundled-typescript"; +const releasePackageEnv = { COREPACK_ENABLE_STRICT: "0" }; +const getReleasePackageRegistry = memoize(async () => { + const { stdout } = await runOutput("npm", ["config", "get", "registry"], { env: releasePackageEnv }); + return stdout.trim(); +}); + +const getVscodeTypeScriptExtensionPackageJson = memoize(() => JSON.parse(fs.readFileSync(path.join(extensionDir, "package.json"), "utf8"))); + +function getVscodeTypeScriptExtensionVersion() { + const version = getVscodeTypeScriptExtensionPackageJson().version; + if (typeof version !== "string" || !stableThreeComponentVersionPattern.test(version)) { + throw new Error(`packages/vscode-typescript/package.json must contain a stable three-component version, got ${JSON.stringify(version)}.`); + } + return version; +} + +const getSignTempDir = memoize(async () => { + const dir = path.resolve(builtSignTmp); + await rimraf(dir); + await fs.promises.mkdir(dir, { recursive: true }); + return dir; +}); + +const cleanSignTempDirectory = task({ + name: "clean:sign-tmp", + hiddenFromTaskList: true, + run: runCleanSignTempDirectory, +}); + +function runCleanSignTempDirectory() { + return rimraf(builtSignTmp); +} + +let signCount = 0; + +/** + * @param {string} value + */ +function assertMsbuildXmlValue(value) { + assert(value.length > 0 && !/[^\w./\\: -]/.test(value), `Unsupported MSBuild XML value: ${JSON.stringify(value)}`); + return value; +} + +/** + * @typedef {{ + * SignFileRecordList: { + * SignFileList: { SrcPath: string; DstPath: string | null }[]; + * Certs: Cert; + * MacAppName: string | undefined + * }[] + * }} DDSignFileList + * + * @param {DDSignFileList} filelist + */ +async function sign(filelist, unchangedOutputOkay = false) { + console.log("filelist:", JSON.stringify(filelist, undefined, 4)); + + if (!process.env.MICROBUILD_PLUGIN_DIRECTORY) { + console.log(styleText("yellow", "Faking signing because MICROBUILD_PLUGIN_DIRECTORY is not set.")); + + // Fake signing for testing. + + for (const record of filelist.SignFileRecordList) { + for (const file of record.SignFileList) { + const src = file.SrcPath; + const dst = file.DstPath ?? src; + + if (!fs.existsSync(src)) { + throw new Error(`Source file does not exist: ${src}`); + } + + const dstDir = path.dirname(dst); + if (!fs.existsSync(dstDir)) { + throw new Error(`Destination directory does not exist: ${dstDir}`); + } + + if (dst.endsWith(".sig")) { + console.log(`Faking signature for ${src} -> ${dst}`); + // No great way to fake a signature. + await fs.promises.writeFile(dst, "fake signature"); + } + else { + if (src === dst) { + console.log(`Faking signing ${src}`); + } + else { + console.log(`Faking signing ${src} -> ${dst}`); + } + const contents = await fs.promises.readFile(src); + await fs.promises.writeFile(dst, contents); + } + } + } + + return; + } + + const signingWorkaround = true; + let signingFilelist = filelist; + + /** @type {{ source: string; target: string }[]} */ + const signingWorkaroundFiles = []; + + if (signingWorkaround) { + // DstPath is currently broken in the signing tool. + // Copy all of the files to a new tempdir and then leave DstPath unset + // so that it's overwritten, then move the file to the destination. + console.log("Working around DstPath bug"); + + /** @type {DDSignFileList} */ + const newFileList = { + SignFileRecordList: filelist.SignFileRecordList.map(list => { + return { + Certs: list.Certs, + SignFileList: list.SignFileList.map(file => { + const dstPath = file.DstPath; + if (dstPath === null) { + return file; + } + + const src = file.SrcPath; + // File extensions must be preserved; use a prefix. + const dstPathTemp = `${path.dirname(src)}/signing-temp-${path.basename(src)}`; + + console.log(`Copying: ${src} -> ${dstPathTemp}`); + fs.cpSync(src, dstPathTemp); + + signingWorkaroundFiles.push({ source: dstPathTemp, target: dstPath }); + + return { + SrcPath: dstPathTemp, + DstPath: null, + }; + }), + MacAppName: list.MacAppName, + }; + }), + }; + + signingFilelist = newFileList; + console.log("new filelist:", JSON.stringify(signingFilelist, undefined, 4)); + } + + /** @type {Map} */ + const srcHashes = new Map(); + + for (const record of filelist.SignFileRecordList) { + for (const file of record.SignFileList) { + const src = file.SrcPath; + const dst = file.DstPath ?? src; + + if (!fs.existsSync(src)) { + throw new Error(`Source file does not exist: ${src}`); + } + + const hash = crypto.createHash("sha256").update(fs.readFileSync(src)).digest("hex"); + srcHashes.set(src, hash); + + console.log(`Will sign ${src} -> ${dst}`); + console.log(` sha256: ${hash}`); + } + } + + const tmp = await getSignTempDir(); + const propsPath = path.resolve(tmp, `signing-items-${signCount++}.props`); + const signingItems = signingFilelist.SignFileRecordList.flatMap(record => record.SignFileList.map(file => ({ path: file.SrcPath, cert: record.Certs, macAppName: record.MacAppName }))); + const items = signingItems.map(({ path: filePath, cert, macAppName }) => + ` + ${assertMsbuildXmlValue(cert)} + None${ + macAppName ? ` + ${assertMsbuildXmlValue(macAppName)}` : "" + } + ` + ).join("\n"); + await fs.promises.writeFile( + propsPath, + ` + +${items} + + +`, + ); + + try { + await run("dotnet", [ + "build", + path.resolve("tools/signing/Sign.csproj"), + "--target:AfterBuild", + "--verbosity:normal", + "-p:SignType=real", + `-p:SignFilesDir=${path.resolve("built")}`, + `-p:FilesToSignPropsFile=${propsPath}`, + `-p:MicroBuildOverridePluginDirectory=${process.env.MICROBUILD_PLUGIN_DIRECTORY}`, + ]); + } + finally { + await fs.promises.unlink(propsPath); + } + + if (signingWorkaround) { + // Now, copy the files back. + for (const { source, target } of signingWorkaroundFiles) { + console.log(`Moving signed file: ${source} -> ${target}`); + await fs.promises.rename(source, target); + } + } + + /** @type {string[]} */ + let failures = []; + + for (const record of filelist.SignFileRecordList) { + for (const file of record.SignFileList) { + const src = file.SrcPath; + const dst = file.DstPath ?? src; + + if (!fs.existsSync(dst)) { + failures.push(`Signed file does not exist: ${dst}`); + const newSrcHash = crypto.createHash("sha256").update(fs.readFileSync(src)).digest("hex"); + const oldSrcHash = srcHashes.get(src); + assert(oldSrcHash); + if (oldSrcHash !== newSrcHash) { + failures.push(` Source file changed during signing: ${src}\n before: ${oldSrcHash}\n after: ${newSrcHash}`); + } + continue; + } + + const srcHash = srcHashes.get(src); + assert(srcHash); + const dstHash = crypto.createHash("sha256").update(fs.readFileSync(dst)).digest("hex"); + if (srcHash === dstHash) { + const message = `Signed file is identical to source file (not signed?): ${src} -> ${dst}\n sha256: ${dstHash}`; + if (unchangedOutputOkay) { + console.log(message); + } + else { + failures.push(message); + continue; + } + } + + if (src === dst) { + console.log(`Signed ${src}`); + } + else { + console.log(`Signed ${src} -> ${dst}`); + } + console.log(` sha256: ${dstHash}`); + } + } + + if (failures.length) { + throw new Error("Some files failed to sign:\n" + failures.map(f => " - " + f).join("\n")); + } +} + +/** + * @param {string} src + * @param {string} dest + * @param {(p: string) => boolean} [filter] + */ +function cpRecursive(src, dest, filter) { + return fs.promises.cp(src, dest, { + recursive: true, + filter: filter ? src => filter(src.replace(/\\/g, "/")) : undefined, + }); +} + +/** + * @param {string} src + * @param {string} dest + */ +function cpWithoutNodeModulesOrTsconfig(src, dest) { + return cpRecursive(src, dest, p => !p.endsWith("/node_modules") && !p.endsWith("/tsconfig.json")); +} + +const mainNativePreviewPackage = { + npmPackageName: publishAsTypescript ? "typescript" : "@typescript/typescript", + npmDir: path.join(builtNpm, publishAsTypescript ? "typescript" : "native-preview"), + npmTarball: path.join(builtNpm, publishAsTypescript ? "typescript.tgz" : "native-preview.tgz"), +}; + +const typescriptMacEntitlements = [ + "com.apple.security.cs.allow-dyld-environment-variables", + "com.apple.security.cs.disable-library-validation", +]; + +function createTypeScriptMacEntitlementsPlist() { + const entries = typescriptMacEntitlements.map(entitlement => ` ${entitlement}\n `).join("\n"); + return ` + + + +${entries} + + +`; +} + +/** + * @typedef {"win32" | "linux" | "darwin" | "aix" | "android" | "freebsd" | "netbsd" | "openbsd" | "sunos"} OS + * @typedef {"x64" | "arm" | "arm64" | "ia32" | "ppc64" | "loong64" | "mips64el" | "riscv64" | "s390x"} Arch + * @typedef {"Microsoft400" | "LinuxSign" | "MacDeveloperHarden" | "8020" | "VSCodePublisher"} Cert + * @typedef {`${OS | "alpine"}-${Exclude | "armhf"}`} VSCodeTarget + * @typedef {{ name: string; sourceDir: string }} VsixExtensionPackage + * @typedef {{ nodeOs: string; vscodeTarget: string; sourceDir: string; extensionDir: string; vsixPath: string; vsixManifestPath: string; vsixSignaturePath: string }} VsixExtension + * @typedef {{ GOOS: string; GOARCH: string }} GoDistTarget + * @typedef {{ os: OS; arch: Arch; cert?: Cert; vsix?: boolean; alpine?: boolean }} Platform + */ +void 0; + +/** @type {VsixExtensionPackage[]} */ +const vsixExtensionPackages = [ + ...(produceNativePreviewVsix ? [{ name: "native-preview", sourceDir: extensionDir }] : []), + ...(produceTypeScriptNightlyVsix ? [{ name: "vscode-typescript-nightly", sourceDir: nightlyExtensionDir }] : []), +]; + +/** + * npm package platforms supported by the native release. + * The native-preview package publishes only the entries with vsix: true; + * the typescript package publishes the full list. + * BSD targets that are not in Node's supported-platforms table are best-effort + * and limited to mainstream 64-bit x64/arm64 architectures. + * alpine is set only for the subset that also produces Alpine VSIXes. + * cert defaults to LinuxSign. + * @type {Platform[]} + */ +const platforms = [ + { os: "win32", arch: "x64", vsix: true, cert: "Microsoft400" }, + { os: "win32", arch: "arm64", vsix: true, cert: "Microsoft400" }, + { os: "linux", arch: "x64", vsix: true, alpine: true }, + { os: "linux", arch: "arm", vsix: true }, + { os: "linux", arch: "arm64", vsix: true, alpine: true }, + { os: "darwin", arch: "x64", vsix: true, cert: "MacDeveloperHarden" }, + { os: "darwin", arch: "arm64", vsix: true, cert: "MacDeveloperHarden" }, + { os: "aix", arch: "ppc64" }, + { os: "android", arch: "arm64" }, + { os: "freebsd", arch: "arm64" }, + { os: "freebsd", arch: "x64" }, + { os: "linux", arch: "loong64" }, + { os: "linux", arch: "mips64el" }, + { os: "linux", arch: "ppc64" }, + { os: "linux", arch: "riscv64" }, + { os: "linux", arch: "s390x" }, + { os: "netbsd", arch: "arm64" }, + { os: "netbsd", arch: "x64" }, + { os: "openbsd", arch: "arm64" }, + { os: "openbsd", arch: "x64" }, + { os: "sunos", arch: "x64" }, + // Wasm? +]; + +const ignoredGoTargets = new Map([ + ["android/386", "Android is not a Node runtime target TypeScript supports"], + ["android/amd64", "Android is not a Node runtime target TypeScript supports"], + ["android/arm", "Android is not a Node runtime target TypeScript supports"], + ["freebsd/386", "FreeBSD is experimental in Node and limited here to mainstream 64-bit x64/arm64"], + ["freebsd/arm", "FreeBSD is experimental in Node and limited here to mainstream 64-bit x64/arm64"], + ["linux/386", "ia32 means 32-bit x86, which TypeScript does not support for native packages"], + ["linux/ppc64", "Node supports Linux ppc64le; npm's ppc64 CPU name cannot select big-endian ppc64 separately"], + ["netbsd/386", "NetBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["netbsd/arm", "NetBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["openbsd/386", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["openbsd/arm", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["openbsd/ppc64", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["openbsd/riscv64", "OpenBSD is not in Node's supported-platforms table and is limited here to mainstream 64-bit x64/arm64"], + ["solaris/amd64", "Node documents SmartOS/sunos rather than Oracle Solaris; sunos-x64 publishes illumos/amd64 for that runtime family"], + ["windows/386", "ia32 means 32-bit x86, which TypeScript does not support for native packages"], +]); + +/** + * @param {string} os + * @returns {"windows" | "illumos" | "darwin" | "linux" | "aix" | "android" | "freebsd" | "netbsd" | "openbsd"} + */ +function nodeToGOOS(os) { + switch (os) { + case "win32": + return "windows"; + case "sunos": + return "illumos"; + case "darwin": + case "linux": + case "aix": + case "android": + case "freebsd": + case "netbsd": + case "openbsd": + return os; + default: + throw new Error(`Unsupported OS: ${os}`); + } +} + +/** + * @param {string} arch + * @param {string} os + * @returns {"amd64" | "386" | "mips64le" | "ppc64" | "ppc64le" | "arm" | "arm64" | "loong64" | "riscv64" | "s390x"} + */ +function nodeToGOARCH(arch, os) { + switch (arch) { + case "x64": + return "amd64"; + case "ia32": + return "386"; + case "mips64el": + return "mips64le"; + case "ppc64": + return os === "aix" ? "ppc64" : "ppc64le"; + case "arm": + case "arm64": + case "loong64": + case "riscv64": + case "s390x": + return arch; + default: + throw new Error(`Unsupported ARCH: ${arch}`); + } +} + +const getPlatforms = memoize(() => { + const publishTag = releaseVscodeTypescript ? undefined : getPublishTag(); + let supportedPlatforms = !releaseVscodeTypescript && publishAsTypescript && publishTag !== "next" + ? platforms + : platforms.filter(({ vsix }) => vsix); + + if (!options.forRelease) { + supportedPlatforms = supportedPlatforms.filter(({ os, arch }) => os === process.platform && arch === process.arch); + assert.equal(supportedPlatforms.length, 1, "No supported platforms found"); + } + + return supportedPlatforms.map(({ os, arch, cert = "LinuxSign", vsix, alpine }) => { + const packageBaseName = publishAsTypescript ? "typescript" : "native-preview"; + const npmDirName = `${packageBaseName}-${os}-${arch}`; + const npmDir = path.join(builtNpm, npmDirName); + const npmTarball = `${npmDir}.tgz`; + const npmPackageName = `@typescript/${npmDirName}`; + + /** @type {VsixExtension[]} */ + let extensions = []; + if (produceAnyVsix && vsix) { + /** @type {string[]} */ + const vscodeTargets = [`${os}-${arch === "arm" ? "armhf" : arch}`]; + if (alpine) { + vscodeTargets.push(`alpine-${arch === "arm" ? "armhf" : arch}`); + } + + extensions = vscodeTargets.flatMap(vscodeTarget => + vsixExtensionPackages.map(({ name: packageName, sourceDir }) => { + const extensionDir = path.join(builtVsix, `${packageName}-${vscodeTarget}`); + const vsixPath = extensionDir + ".vsix"; + const vsixManifestPath = extensionDir + ".manifest"; + const vsixSignaturePath = extensionDir + ".signature.p7s"; + return { + nodeOs: os, + vscodeTarget, + sourceDir, + extensionDir, + vsixPath, + vsixManifestPath, + vsixSignaturePath, + }; + }) + ); + } + + return { + nodeOs: os, + nodeArch: arch, + goos: nodeToGOOS(os), + goarch: nodeToGOARCH(arch, os), + npmPackageName, + npmDirName, + npmDir, + npmTarball, + extensions, + cert, + }; + }); +}); + +export const checkPlatforms = task({ + name: "typescript:check-platforms", + hiddenFromTaskList: true, + run: runCheckPlatforms, +}); + +/** + * @param {GoDistTarget} target + */ +function goDistTargetToPlatform(target) { + const goTarget = `${target.GOOS}/${target.GOARCH}`; + if (ignoredGoTargets.has(goTarget)) { + return undefined; + } + + /** @type {OS | undefined} */ + let nodeOs; + switch (target.GOOS) { + case "windows": + nodeOs = "win32"; + break; + case "illumos": + nodeOs = "sunos"; + break; + case "aix": + case "android": + case "darwin": + case "freebsd": + case "linux": + case "netbsd": + case "openbsd": + nodeOs = target.GOOS; + break; + default: + return undefined; + } + + /** @type {Arch | undefined} */ + let nodeArch; + switch (target.GOARCH) { + case "386": + nodeArch = "ia32"; + break; + case "amd64": + nodeArch = "x64"; + break; + case "mips64le": + nodeArch = "mips64el"; + break; + case "ppc64": + nodeArch = "ppc64"; + break; + case "ppc64le": + nodeArch = "ppc64"; + break; + case "arm": + case "arm64": + case "loong64": + case "riscv64": + case "s390x": + nodeArch = target.GOARCH; + break; + default: + return undefined; + } + + return `${nodeOs}-${nodeArch}`; +} + +async function runCheckPlatforms() { + const { stdout } = await runOutput("go", ["tool", "dist", "list", "-json"]); + /** @type {GoDistTarget[]} */ + const goTargets = JSON.parse(stdout); + const goTargetSet = new Set(goTargets.map(({ GOOS, GOARCH }) => `${GOOS}/${GOARCH}`)); + + /** @type {[os: OS, arch: Arch][]} */ + const packagePlatforms = platforms.map(({ os, arch }) => /** @type {[OS, Arch]} */ ([os, arch])); + const actual = new Set(packagePlatforms.map(([os, arch]) => `${os}-${arch}`)); + const expected = new Set(goTargets.map(goDistTargetToPlatform).filter(platform => platform !== undefined)); + + const errors = []; + for (const [os, arch] of packagePlatforms) { + const goTarget = `${nodeToGOOS(os)}/${nodeToGOARCH(arch, os)}`; + if (!goTargetSet.has(goTarget)) { + errors.push(`Configured package platform ${os}-${arch} maps to unsupported Go target ${goTarget}.`); + } + } + + const missing = [...expected].filter(platform => !actual.has(platform)); + if (missing.length) { + errors.push(`Missing package platform(s) for the current Go toolchain: ${missing.join(", ")}.`); + } + + const extra = [...actual].filter(platform => !expected.has(platform)); + if (extra.length) { + errors.push(`Unexpected package platform(s), or missing exclusion policy: ${extra.join(", ")}.`); + } + + if (errors.length) { + throw new Error(`native-preview platform list is out of sync with 'go tool dist list':\n${errors.map(e => ` - ${e}`).join("\n")}`); + } +} + +/** + * Recursively strips `@typescript/source` export conditions from a package.json object. + * Processes `exports` and `imports` fields, skipping past subpath keys (starting with "." + * or "#") and recursing into condition objects. After removal, simplifies objects that have + * only a single `default` key down to their bare value. + * @param {Record} packageJson + */ +function stripSourceConditions(packageJson) { + for (const field of ["exports", "imports"]) { + if (packageJson[field] != null && typeof packageJson[field] === "object") { + packageJson[field] = stripConditionsFromValue(packageJson[field]); + } + } +} + +/** + * @param {any} value + * @returns {any} + */ +function stripConditionsFromValue(value) { + if (value == null || typeof value !== "object") { + return value; + } + delete value["@typescript/source"]; + for (const key of Object.keys(value)) { + value[key] = stripConditionsFromValue(value[key]); + } + // Simplify: if only "default" remains, collapse to its value. + const keys = Object.keys(value); + if (keys.length === 1 && keys[0] === "default") { + return value["default"]; + } + return value; +} + +export const buildNativePreviewPackages = task({ + name: "typescript:build", + description: "Builds TypeScript npm packages for the current platform. Pass --respectGoEnv to preserve caller-provided Go build settings.", + run: runBuildNativePreviewPackages, +}); + +export const writeTypeScriptReleaseInfo = task({ + name: "typescript:release-info", + hiddenFromTaskList: true, + run: async () => { + await fs.promises.mkdir(path.dirname(typeScriptReleaseInfoPath), { recursive: true }); + await fs.promises.writeFile( + typeScriptReleaseInfoPath, + JSON.stringify({ version: getVersion(), npmTag: getPublishTag() }, undefined, 4) + "\n", + ); + }, +}); + +async function runBuildNativePreviewPackages() { + if (usePublishedPlatformPackagesForVsix) { + checkPublishedPlatformPackagesForVsix(); + await rimraf(builtNpm); + console.log("Skipping npm package builds; VSIX packaging will use published platform packages."); + return; + } + + await rimraf(builtNpm); + + const platforms = getPlatforms(); + + const inputDir = "./packages/typescript"; + + const inputPackageJson = JSON.parse(fs.readFileSync(path.join(inputDir, "package.json"), "utf8")); + inputPackageJson.version = getVersion(); + delete inputPackageJson.private; + inputPackageJson.files = [...new Set([...(inputPackageJson.files ?? []), "NOTICE.txt"])]; + if (publishAsTypescript) { + inputPackageJson.bin = { + tsc: "./bin/tsc", + }; + inputPackageJson.description = "TypeScript is a language for application scale JavaScript development"; + inputPackageJson.homepage = "https://www.typescriptlang.org/"; + inputPackageJson.keywords = [ + "TypeScript", + "Microsoft", + "compiler", + "language", + "javascript", + ]; + inputPackageJson.bugs = { + url: "https://github.com/microsoft/TypeScript/issues", + }; + inputPackageJson.repository = { + type: "git", + url: "https://github.com/microsoft/TypeScript.git", + }; + delete inputPackageJson.scripts; + delete inputPackageJson.devDependencies; + } + stripSourceConditions(inputPackageJson); + + if (fs.existsSync(".git")) { + const { stdout: gitHead } = await runOutput("git", ["rev-parse", "HEAD"]); + inputPackageJson.gitHead = gitHead.trim(); + } + inputPackageJson.publishConfig = { + access: "public", + tag: getPublishTag(), + }; + + const mainPackage = { + ...inputPackageJson, + name: mainNativePreviewPackage.npmPackageName, + optionalDependencies: Object.fromEntries(platforms.map(p => [p.npmPackageName, getVersion()])), + }; + + const mainPackageDir = mainNativePreviewPackage.npmDir; + + await fs.promises.mkdir(mainPackageDir, { recursive: true }); + + // Copy package contents excluding node_modules and dist (dist is copied separately after build). + // The package.json "files" field controls what npm pack actually includes. + await cpRecursive(inputDir, mainPackageDir, p => !p.endsWith("/node_modules") && !p.includes("/dist")); + if (publishAsTypescript) { + await fs.promises.writeFile(path.join(mainPackageDir, "bin", "tsc"), '#!/usr/bin/env node\nimport "../lib/tsc.js";\n'); + await fs.promises.chmod(path.join(mainPackageDir, "bin", "tsc"), 0o755); + await fs.promises.copyFile(path.join(inputDir, "typescript-package-readme.md"), path.join(mainPackageDir, "README.md")); + } + + await fs.promises.writeFile(path.join(mainPackageDir, "package.json"), JSON.stringify(mainPackage, undefined, 4)); + await fs.promises.copyFile("LICENSE.txt", path.join(mainPackageDir, "LICENSE")); + await fs.promises.copyFile("NOTICE.txt", path.join(mainPackageDir, "NOTICE.txt")); + + // Build JS API and copy dist into the package. + await run("npm", ["run", "-w", "@typescript/typescript", "build"]); + await cpRecursive(path.join(inputDir, "dist"), path.join(mainPackageDir, "dist")); + + // Validate that .d.ts files contain no external imports (all imports must start with "." or "#"). + const dtsFiles = await globFiles(`${mainPackageDir}/dist/**/*.d.ts`); + const importErrors = []; + for (const dtsFile of dtsFiles) { + const content = await fs.promises.readFile(dtsFile, "utf-8"); + const relPath = path.relative(mainPackageDir, dtsFile); + for (const [i, line] of content.split("\n").entries()) { + // Match: import ... from "specifier" / export ... from "specifier" + const fromMatch = line.match(/(?:import|export)\s.*?\sfrom\s+["']([^"']+)["']/); + if (fromMatch && !fromMatch[1].startsWith(".") && !fromMatch[1].startsWith("#")) { + importErrors.push(`${relPath}:${i + 1}: external import declaration "${fromMatch[1]}"`); + } + // Match: import("specifier") + for (const m of line.matchAll(/import\(["']([^"']+)["']\)/g)) { + if (!m[1].startsWith(".") && !m[1].startsWith("#")) { + importErrors.push(`${relPath}:${i + 1}: external dynamic import "${m[1]}"`); + } + } + } + } + if (importErrors.length) { + throw new Error(`Found external imports in .d.ts files:\n${importErrors.map(e => " " + e).join("\n")}`); + } + + const extraFlags = options.respectGoEnv + ? [] + : getReleaseBuildFlags(options.setPrerelease || nativePreviewReleaseVersion ? getVersion() : undefined); + + const platformBuilders = platforms.map(({ npmDir, npmPackageName, nodeOs, nodeArch, goos, goarch }) => async () => { + const packageJson = { + ...inputPackageJson, + bin: undefined, + files: ["lib", "NOTICE.txt"], + imports: undefined, + dependencies: undefined, + name: npmPackageName, + os: [nodeOs], + cpu: [nodeArch], + exports: { + "./package.json": "./package.json", + }, + }; + + const out = path.join(npmDir, "lib"); + await fs.promises.mkdir(out, { recursive: true }); + await fs.promises.writeFile(path.join(npmDir, "package.json"), JSON.stringify(packageJson, undefined, 4)); + await fs.promises.copyFile("LICENSE.txt", path.join(npmDir, "LICENSE")); + await fs.promises.copyFile("NOTICE.txt", path.join(npmDir, "NOTICE.txt")); + + const readme = [ + `# \`${npmPackageName}\``, + "", + `This package provides ${nodeOs}-${nodeArch} support for [${mainNativePreviewPackage.npmPackageName}](https://www.npmjs.com/package/${mainNativePreviewPackage.npmPackageName}).`, + ]; + + await fs.promises.writeFile(path.join(npmDir, "README.md"), readme.join("\n") + "\n"); + + await generateLibs(out); + + const exeName = nativePreviewExeName(nodeOs); + await buildTsc({ + out: publishAsTypescript ? path.join(out, exeName) : out, + env: { + GOOS: goos, + GOARCH: goarch, + ...(options.respectGoEnv ? {} : { GOARM: "6", CGO_ENABLED: "0" }), + }, + extraFlags, + }); + }); + + if (isCI) { + for (const build of platformBuilders) { + await build(); + // Build machines have too little space. + // Clear the Go build cache between platforms. + await run("go", ["clean", "-cache"]); + } + } + else { + await runWithConcurrencyLimit(platformBuilders, os.availableParallelism()); + } +} + +/** + * @param {ReturnType} platforms + */ +async function testNativePreviewPackage(platforms) { + const hostPlatform = platforms.find(({ nodeOs, nodeArch }) => nodeOs === process.platform && nodeArch === process.arch); + assert(hostPlatform, `No package was built for the host platform ${process.platform}-${process.arch}`); + + const testRoot = path.resolve("built/package-test"); + const nodeModules = path.join(testRoot, "node_modules"); + const mainPackageDir = path.join(nodeModules, ...mainNativePreviewPackage.npmPackageName.split("/")); + const platformPackageDir = path.join(nodeModules, ...hostPlatform.npmPackageName.split("/")); + const sourceFile = path.join(testRoot, "index.ts"); + + await rimraf(testRoot); + try { + await cpRecursive(mainNativePreviewPackage.npmDir, mainPackageDir); + await cpRecursive(hostPlatform.npmDir, platformPackageDir); + await fs.promises.writeFile(sourceFile, 'export const value: string = "value";\n'); + + const require = createRequire(sourceFile); + const { stdout } = await runOutput("npm", ["pack", "--dry-run", "--json", mainPackageDir]); + /** @type {{ files: { path: string }[] }[]} */ + const packed = JSON.parse(stdout); + for (const name of ["tsconfig", "jsconfig"]) { + const schemaPath = `schemas/${name}.schema.json`; + assert(packed[0].files.some(file => file.path === schemaPath), `Package is missing ${schemaPath}`); + assert.deepEqual( + await fs.promises.readFile(path.join(mainPackageDir, schemaPath)), + await fs.promises.readFile(path.join("packages/typescript", schemaPath)), + ); + assert.equal(require.resolve(`${mainNativePreviewPackage.npmPackageName}/${schemaPath}`), path.join(mainPackageDir, schemaPath)); + } + + const binName = publishAsTypescript ? "tsc" : "tsgo"; + const binPath = path.join(mainPackageDir, "bin", binName); + const { stdout: versionOutput } = await runOutput(process.execPath, [binPath, "--version"]); + assert.equal(versionOutput.trim(), `Version ${getVersion()}`); + + const { stdout: listFilesOutput } = await runOutput(process.execPath, [binPath, "--noEmit", "--listFiles", sourceFile]); + assert(!listFilesOutput.includes("bundled:///"), "Packaged compiler listed an embedded library path"); + + const expectedLib = path.resolve(platformPackageDir, "lib", "lib.es5.d.ts"); + const listedFiles = listFilesOutput + .split(/\r?\n/) + .filter(Boolean) + .map(file => path.resolve(file)); + assert(listedFiles.includes(expectedLib), `Expected packaged compiler to list ${expectedLib}`); + } + finally { + await rimraf(testRoot); + } +} + +export const testNativePreviewPackageTask = task({ + name: "typescript:test-package", + description: "Tests the TypeScript npm package for the current platform.", + dependencies: options.forRelease ? undefined : [buildNativePreviewPackages], + run: () => testNativePreviewPackage(getPlatforms()), +}); + +export const signNativePreviewPackages = task({ + name: "typescript:sign", + hiddenFromTaskList: true, + run: runSignNativePreviewPackages, +}); + +/** + * @param {string} nodeOs + */ +function nativePreviewExeName(nodeOs) { + const baseName = publishAsTypescript ? "tsc" : "tsgo"; + return nodeOs === "win32" ? `${baseName}.exe` : baseName; +} + +async function runSignNativePreviewPackages() { + if (!options.forRelease) { + throw new Error("This task should not be run in non-release builds."); + } + if (usePublishedPlatformPackagesForVsix) { + checkPublishedPlatformPackagesForVsix(); + console.log("Skipping npm package signing; VSIX packaging will use published platform packages."); + return; + } + + const platforms = getPlatforms(); + + /** @type {Map} */ + const filelistByCert = new Map(); + for (const { npmDir, nodeOs, cert, npmDirName } of platforms) { + let certFilelist = filelistByCert.get(cert); + if (!certFilelist) { + filelistByCert.set(cert, certFilelist = []); + } + certFilelist.push({ + tmpName: npmDirName, + path: path.join(npmDir, "lib", nativePreviewExeName(nodeOs)), + }); + } + + const tmp = await getSignTempDir(); + const typescriptMacEntitlementsPath = path.join(tmp, "typescript-macos-entitlements.plist"); + await fs.promises.writeFile(typescriptMacEntitlementsPath, createTypeScriptMacEntitlementsPlist()); + + /** @type {DDSignFileList} */ + const filelist = { + SignFileRecordList: [], + }; + + /** @type {{ path: string; unsignedZipPath: string; signedZipPath: string; notarizedZipPath: string; }[]} */ + const macZips = []; + + // First, sign the files. + + for (const [cert, filelistPaths] of filelistByCert) { + switch (cert) { + case "Microsoft400": + filelist.SignFileRecordList.push({ + SignFileList: filelistPaths.map(p => ({ SrcPath: p.path, DstPath: null })), + Certs: cert, + MacAppName: undefined, + }); + break; + case "LinuxSign": + filelist.SignFileRecordList.push({ + SignFileList: filelistPaths.map(p => ({ SrcPath: p.path, DstPath: p.path + ".sig" })), + Certs: cert, + MacAppName: undefined, + }); + break; + case "MacDeveloperHarden": + // Mac signing requires putting files into zips and then signing those, + // along with a notarization step. + for (const p of filelistPaths) { + // ESRP preserves entitlements from an existing ad-hoc signature. + await runOutput("go", ["-C", "./tools", "run", "./cmd/machotool", "sign", typescriptMacEntitlementsPath, p.path]); + + const unsignedZipPath = path.join(tmp, `${p.tmpName}.unsigned.zip`); + const signedZipPath = path.join(tmp, `${p.tmpName}.signed.zip`); + const notarizedZipPath = path.join(tmp, `${p.tmpName}.notarized.zip`); + + const zip = new AdmZip(); + zip.addLocalFile(p.path); + zip.writeZip(unsignedZipPath); + + macZips.push({ + path: p.path, + unsignedZipPath, + signedZipPath, + notarizedZipPath, + }); + } + filelist.SignFileRecordList.push({ + SignFileList: macZips.map(p => ({ SrcPath: p.unsignedZipPath, DstPath: p.signedZipPath })), + Certs: cert, + MacAppName: undefined, // MacAppName is only for notarization + }); + break; + default: + throw new Error(`Unknown cert: ${cert}`); + } + } + + await sign(filelist); + + // All of the files have been signed in place / had signatures added. + + if (macZips.length) { + // Now, notarize the Mac files. + + /** @type {DDSignFileList} */ + const notarizeFilelist = { + SignFileRecordList: [ + { + SignFileList: macZips.map(p => ({ SrcPath: p.signedZipPath, DstPath: p.notarizedZipPath })), + Certs: "8020", // "MacNotarize" (friendly name not supported by the tooling) + MacAppName: "MicrosoftTypeScript", + }, + ], + }; + + // Notarizing does not change the file, it just sends it to Apple, so ignore the case + // where the input files are the same as the output files. + await sign(notarizeFilelist, /*unchangedOutputOkay*/ true); + + // Finally, unzip the notarized files and move them back to their original locations. + + for (const p of macZips) { + const zip = new AdmZip(p.notarizedZipPath); + zip.extractEntryTo(path.basename(p.path), path.dirname(p.path), false, true); + } + + // chmod +x the unzipped files. + + for (const p of macZips) { + await fs.promises.chmod(p.path, 0o755); + await runOutput("go", ["-C", "./tools", "run", "./cmd/machotool", "verify", typescriptMacEntitlementsPath, p.path]); + } + } +} + +export const packNativePreviewPackages = task({ + name: "typescript:pack", + hiddenFromTaskList: true, + dependencies: options.forRelease ? undefined : [buildNativePreviewPackages, cleanSignTempDirectory], + run: runPackNativePreviewPackages, +}); + +async function runPackNativePreviewPackages() { + if (usePublishedPlatformPackagesForVsix) { + checkPublishedPlatformPackagesForVsix(); + await rimraf(builtNpm); + console.log("Skipping npm package packing; VSIX packaging will use published platform packages."); + return; + } + + const platforms = getPlatforms(); + await Promise.all([mainNativePreviewPackage, ...platforms].map(async ({ npmDir, npmTarball }) => { + const { stdout } = await runOutput("npm", ["pack", "--json", npmDir]); + const filename = JSON.parse(stdout)[0].filename.replace("@", "").replace("/", "-"); + await fs.promises.rename(filename, npmTarball); + })); + + // npm packages need to be published in dependency order: platform packages + // first, then the main package that references them as optionalDependencies. + const publishManifest = { + stages: [ + platforms.map(p => ({ + filename: path.basename(p.npmTarball), + })), + [ + { + filename: path.basename(mainNativePreviewPackage.npmTarball), + }, + ], + ], + }; + + const publishManifestPath = path.join(builtNpm, "publish-manifest.json"); + await fs.promises.writeFile(publishManifestPath, JSON.stringify(publishManifest, undefined, 4) + "\n"); +} + +export const packVsixExtensions = task({ + name: "vscode-typescript:pack", + hiddenFromTaskList: true, + dependencies: options.forRelease || usePublishedPlatformPackagesForVsix ? undefined : [buildNativePreviewPackages, cleanSignTempDirectory], + run: runPackVsixExtensions, +}); + +/** @type {Map>} */ +const publishedPlatformPackageLibDirs = new Map(); + +const getPublishedTypeScriptPackageJson = memoize(() => { + const candidates = [ + path.join(extensionDir, "node_modules", publishedTypeScriptAliasPackageName, "package.json"), + path.join(__dirname, "node_modules", publishedTypeScriptAliasPackageName, "package.json"), + ]; + + for (const candidate of candidates) { + if (fs.existsSync(candidate)) { + const packageJson = JSON.parse(fs.readFileSync(candidate, "utf8")); + if (packageJson.name !== "typescript") { + throw new Error(`${publishedTypeScriptAliasPackageName} should alias the typescript package, but found ${packageJson.name}.`); + } + if (!packageJson.version || typeof packageJson.version !== "string") { + throw new Error(`${publishedTypeScriptAliasPackageName} package.json did not contain a version.`); + } + if (!packageJson.optionalDependencies || typeof packageJson.optionalDependencies !== "object") { + throw new Error(`${publishedTypeScriptAliasPackageName} package.json did not contain platform optionalDependencies.`); + } + return packageJson; + } + } + + throw new Error(`Could not find ${publishedTypeScriptAliasPackageName}; run npm install first.`); +}); + +function getPublishedTypeScriptVersion() { + const version = getPublishedTypeScriptPackageJson().version; + if (releaseVscodeTypescript && !stableThreeComponentVersionPattern.test(version)) { + throw new Error(`vscode-typescript releases require a stable three-component TypeScript version, got ${version}.`); + } + return version; +} + +function checkPublishedPlatformPackagesForVsix() { + if (!options.forRelease) { + throw new Error("usePublishedPlatformPackagesForVsix requires forRelease"); + } + getPublishedTypeScriptVersion(); +} + +const getPackageLock = memoize(() => JSON.parse(fs.readFileSync(path.join(__dirname, "package-lock.json"), "utf8"))); + +/** + * @param {string} npmPackageName + */ +async function getPublishedPlatformPackageLibDir(npmPackageName) { + let promise = publishedPlatformPackageLibDirs.get(npmPackageName); + if (!promise) { + promise = getPublishedPlatformPackageLibDirWorker(npmPackageName); + publishedPlatformPackageLibDirs.set(npmPackageName, promise); + } + return promise; +} + +/** + * @param {string} npmPackageName + */ +async function getPublishedPlatformPackageLibDirWorker(npmPackageName) { + const dest = path.join(builtPublishedPlatformPackages, "node_modules", ...npmPackageName.split("/")); + const lib = path.join(dest, "lib"); + if (fs.existsSync(lib)) { + return lib; + } + + await fs.promises.mkdir(dest, { recursive: true }); + + const tarballDestination = path.join(builtPublishedPlatformPackages, "tarballs"); + await fs.promises.mkdir(tarballDestination, { recursive: true }); + + const version = getPublishedTypeScriptPackageJson().optionalDependencies[npmPackageName]; + if (!version || typeof version !== "string") { + throw new Error(`${publishedTypeScriptAliasPackageName} does not depend on ${npmPackageName}.`); + } + + const lockEntry = getPackageLock().packages[`node_modules/${npmPackageName}`]; + if (!lockEntry) { + throw new Error(`package-lock.json does not contain ${npmPackageName}; run npm install.`); + } + if (lockEntry.version !== version) { + throw new Error(`package-lock.json has ${npmPackageName}@${lockEntry.version}, but ${publishedTypeScriptAliasPackageName} depends on ${version}.`); + } + if (!lockEntry.resolved || typeof lockEntry.resolved !== "string") { + throw new Error(`package-lock.json entry for ${npmPackageName}@${version} does not contain a tarball URL.`); + } + if (!lockEntry.integrity || typeof lockEntry.integrity !== "string") { + throw new Error(`package-lock.json entry for ${npmPackageName}@${version} does not contain an integrity hash.`); + } + + const resolved = new URL(lockEntry.resolved); + if (resolved.origin === "https://registry.npmjs.org") { + const registry = new URL(await getReleasePackageRegistry()); + resolved.protocol = registry.protocol; + resolved.host = registry.host; + resolved.pathname = path.posix.join(registry.pathname, resolved.pathname); + } + + console.log(`Fetching locked ${npmPackageName}@${version} tarball from ${resolved}.`); + const response = await fetch(resolved); + if (!response.ok) { + throw new Error(`Failed to fetch ${npmPackageName}@${version}: ${response.status} ${response.statusText}.`); + } + const tarball = Buffer.from(await response.arrayBuffer()); + const integrityMatch = /^sha512-(.+)$/.exec(lockEntry.integrity); + if (!integrityMatch) { + throw new Error(`Unsupported integrity hash for ${npmPackageName}@${version}: ${lockEntry.integrity}.`); + } + const expectedIntegrity = Buffer.from(integrityMatch[1], "base64"); + const actualIntegrity = crypto.createHash("sha512").update(tarball).digest(); + if (expectedIntegrity.length !== actualIntegrity.length || !crypto.timingSafeEqual(expectedIntegrity, actualIntegrity)) { + throw new Error(`Integrity check failed for ${npmPackageName}@${version}.`); + } + const tarballPath = path.join(tarballDestination, path.basename(resolved.pathname)); + await fs.promises.writeFile(tarballPath, tarball); + await tar.x({ file: tarballPath, cwd: dest, strip: 1 }); + + if (!fs.existsSync(lib)) { + throw new Error(`Published platform package ${npmPackageName}@${version} did not contain a lib directory.`); + } + + return lib; +} + +async function runPackVsixExtensions() { + await rimraf(builtVsix); + await fs.promises.mkdir(builtVsix, { recursive: true }); + if (usePublishedPlatformPackagesForVsix) { + checkPublishedPlatformPackagesForVsix(); + publishedPlatformPackageLibDirs.clear(); + await rimraf(builtPublishedPlatformPackages); + } + + const platforms = getPlatforms(); + const extensions = platforms.flatMap(({ npmDir, npmPackageName, extensions }) => extensions.map(e => ({ npmDir, npmPackageName, ...e }))); + if (!extensions.length) { + console.log("No VSIX targets configured; skipping extension packaging."); + return; + } + + // We don't use vscode:prepublish, as that would run the build for each package below. + await run("npm", ["run", "bundle:release"], { cwd: extensionDir, env: releasePackageEnv }); + + let version = "0.0.0"; + if (options.forRelease) { + if (releaseVscodeTypescript) { + version = getVscodeTypeScriptExtensionVersion(); + } + else { + // No real semver prerelease versioning. + // https://code.visualstudio.com/api/working-with-extensions/publishing-extension#prerelease-extensions + assert(options.setPrerelease, "forRelease is true but setPrerelease is not set"); + const prerelease = options.setPrerelease; + assert(typeof prerelease === "string", "setPrerelease is not a string"); + // parse `dev..`. + const match = prerelease.match(/dev\.(\d+)\.(\d+)/); + if (!match) { + throw new Error(`Prerelease version should be in the form of dev.., but got ${prerelease}`); + } + // Set version to `0..`. + version = `0.${match[1]}.${match[2]}`; + } + } + + console.log("Version:", version); + + await Promise.all(extensions.map(async ({ npmDir, npmPackageName, nodeOs, vscodeTarget, sourceDir, extensionDir: thisExtensionDir, vsixPath, vsixManifestPath, vsixSignaturePath }) => { + const npmLibDir = usePublishedPlatformPackagesForVsix + ? await getPublishedPlatformPackageLibDir(npmPackageName) + : path.join(npmDir, "lib"); + const extensionLibDir = path.join(thisExtensionDir, "lib"); + await fs.promises.mkdir(extensionLibDir, { recursive: true }); + + await cpWithoutNodeModulesOrTsconfig(sourceDir, thisExtensionDir); + await cpWithoutNodeModulesOrTsconfig(npmLibDir, extensionLibDir); + await fs.promises.chmod(path.join(extensionLibDir, nativePreviewExeName(nodeOs)), 0o755); + + const packageJsonPath = path.join(thisExtensionDir, "package.json"); + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); + packageJson.version = version; + packageJson.bundledTypeScriptVersion = usePublishedPlatformPackagesForVsix ? getPublishedTypeScriptVersion() : getVersion(); + fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, undefined, 4)); + + await fs.promises.copyFile("NOTICE.txt", path.join(thisExtensionDir, "NOTICE.txt")); + + await run("vsce", ["package", version, "--no-update-package-json", "--no-dependencies", "--out", vsixPath, "--target", vscodeTarget], { + cwd: thisExtensionDir, + env: releasePackageEnv, + }); + + if (options.forRelease) { + await run("vsce", ["generate-manifest", "--packagePath", vsixPath, "--out", vsixManifestPath], { + cwd: thisExtensionDir, + env: releasePackageEnv, + }); + await fs.promises.cp(vsixManifestPath, vsixSignaturePath); + } + })); +} + +export const signVsixExtensions = task({ + name: "vscode-typescript:sign", + hiddenFromTaskList: true, + run: runSignVsixExtensions, +}); + +async function runSignVsixExtensions() { + if (!options.forRelease) { + throw new Error("This task should not be run in non-release builds."); + } + + const platforms = getPlatforms(); + const extensions = platforms.flatMap(({ npmDir, extensions }) => extensions.map(e => ({ npmDir, ...e }))); + if (!extensions.length) { + console.log("No VSIX targets configured; skipping extension signing."); + return; + } + + await sign({ + SignFileRecordList: [ + { + SignFileList: extensions.map(({ vsixSignaturePath }) => ({ SrcPath: vsixSignaturePath, DstPath: null })), + Certs: "VSCodePublisher", + MacAppName: undefined, + }, + ], + }); + + if (!process.env.MICROBUILD_PLUGIN_DIRECTORY) { + console.log("Skipping VSIX signature verification because signing was faked."); + return; + } + + for (const { vsixPath, vsixManifestPath, vsixSignaturePath } of extensions) { + await run("vsce", [ + "verify-signature", + "--packagePath", + vsixPath, + "--manifestPath", + vsixManifestPath, + "--signaturePath", + vsixSignaturePath, + ]); + } +} + +async function runWriteVscodeTypeScriptReleaseManifest() { + const platforms = getPlatforms(); + const extensions = platforms.flatMap(({ extensions }) => extensions); + /** @type {Record} */ + const artifacts = {}; + for (const extension of extensions) { + for (const artifactPath of [extension.vsixPath, extension.vsixManifestPath, extension.vsixSignaturePath]) { + const filename = path.basename(artifactPath); + artifacts[filename] = { + sha256: crypto.createHash("sha256").update(await fs.promises.readFile(artifactPath)).digest("hex"), + }; + } + } + + const packageJson = getVscodeTypeScriptExtensionPackageJson(); + const manifest = { + extension: `${packageJson.publisher}.${packageJson.name}`, + extensionVersion: getVscodeTypeScriptExtensionVersion(), + bundledTypeScriptVersion: getPublishedTypeScriptVersion(), + signType: process.env.VSCODE_TYPESCRIPT_SIGN_TYPE, + sourceRef: process.env.BUILD_SOURCEBRANCH || process.env.GITHUB_REF || undefined, + sourceCommit: process.env.BUILD_SOURCEVERSION || process.env.GITHUB_SHA || undefined, + targets: extensions.map(({ vscodeTarget }) => vscodeTarget), + artifacts, + }; + await fs.promises.writeFile(path.join(builtVsix, "release-manifest.json"), JSON.stringify(manifest, undefined, 4) + "\n"); +} + +export const vscodeTypescriptRelease = task({ + name: "vscode-typescript:release", + hiddenFromTaskList: true, + run: async () => { + if (!options.forRelease || !releaseVscodeTypescript) { + throw new Error("vscode-typescript:release requires --forRelease and --vscodeTypescriptRelease"); + } + await runPackVsixExtensions(); + await runSignVsixExtensions(); + await runWriteVscodeTypeScriptReleaseManifest(); + await runCleanSignTempDirectory(); + }, +}); + +export const nativePreviewRelease = task({ + name: "typescript:release", + hiddenFromTaskList: true, + run: async () => { + if (releaseVscodeTypescript) { + throw new Error("typescript:release cannot be used with --vscodeTypescriptRelease; use vscode-typescript:release"); + } + if (!options.forRelease || !options.setPrerelease && (!nativePreviewReleaseVersion || produceAnyVsix)) { + throw new Error("typescript:release requires --forRelease and --setPrerelease flags, unless nativePreviewReleaseVersion is hardcoded and VSIX production is disabled. Example: npx hereby typescript:release --forRelease --setPrerelease=dev.1.0"); + } + await runBuildNativePreviewPackages(); + await runSignNativePreviewPackages(); + await runPackNativePreviewPackages(); + await runPackVsixExtensions(); + await runSignVsixExtensions(); + await runCleanSignTempDirectory(); + }, +}); + +export const nativePreview = task({ + name: "native-preview", + hiddenFromTaskList: true, + dependencies: options.forRelease ? undefined : [packNativePreviewPackages, packVsixExtensions], + run: options.forRelease ? async () => { + throw new Error("This task should not be run in release builds."); + } : undefined, +}); + +export const allChecks = task({ + name: "all-checks", + description: "Runs all checks for the Go code (fourslash, lint, tests, etc.)", + run: async () => { + await runTests(); + await runFormat(); + await runLint(); + await runTests(); + }, +}); + +export const tidy = task({ + name: "tidy", + description: "Tidies both Go modules and synchronizes the workspace.", + run: async () => { + await run("go", ["mod", "tidy"], { cwd: "./tsc" }); + await run("go", ["mod", "tidy"], { cwd: "./tools" }); + await run("go", ["work", "sync"]); + }, +}); diff --git a/LICENSE.txt b/LICENSE.txt index 8746124b27791..edc24fd6e1409 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/NOTICE.txt b/NOTICE.txt index 78e42fe9213b6..265abe8718168 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,405 +1,405 @@ -NOTICES AND INFORMATION -Do Not Translate or Localize - -This software incorporates material from third parties. -Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com, -or you may send a check or money order for US $5.00, including the product name, -the open source component name, platform, and version number, to: - -Source Code Compliance Team -Microsoft Corporation -One Microsoft Way -Redmond, WA 98052 -USA - -Notwithstanding any other terms, you may reverse engineer this software to the extent -required to debug changes to any libraries licensed under the GNU Lesser General Public License. - - -------------------- DefinitelyTyped -------------------- -This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. -DefinitelyTyped -This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Provided for Informational Purposes Only - -MIT License -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------------- - -------------------- Unicode -------------------- -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright (c) 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. -------------------------------------------------------------------------------------- - --------------------Document Object Model----------------------------- -DOM - -W3C License -This work is being provided by the copyright holders under the following license. -By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. -Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following -on ALL copies of the work or portions thereof, including modifications: -* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. -* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. -* Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived -from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." -Disclaimers -THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR -FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. -The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. -Title to copyright in this work will at all times remain with copyright holders. - ---------- - -DOM -Copyright © 2018 WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License: Attribution 4.0 International -======================================================================= -Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: - -wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= -Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. - --------------------------------------------------------------------------------- - -----------------------Web Background Synchronization------------------------------ - -Web Background Synchronization Specification -Portions of spec © by W3C - -W3C Community Final Specification Agreement -To secure commitments from participants for the full text of a Community or Business Group Report, the group may call for voluntary commitments to the following terms; a "summary" is -available. See also the related "W3C Community Contributor License Agreement". -1. The Purpose of this Agreement. -This Agreement sets forth the terms under which I make certain copyright and patent rights available to you for your implementation of the Specification. -Any other capitalized terms not specifically defined herein have the same meaning as those terms have in the "W3C Patent Policy", and if not defined there, in the "W3C Process Document". -2. Copyrights. -2.1. Copyright Grant. I grant to you a perpetual (for the duration of the applicable copyright), worldwide, non-exclusive, no-charge, royalty-free, copyright license, without any obligation for accounting to me, to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, distribute, and implement the Specification to the full extent of my copyright interest in the Specification. -2.2. Attribution. As a condition of the copyright grant, you must include an attribution to the Specification in any derivative work you make based on the Specification. That attribution must include, at minimum, the Specification name and version number. -3. Patents. -3.1. Patent Licensing Commitment. I agree to license my Essential Claims under the W3C Community RF Licensing Requirements. This requirement includes Essential Claims that I own and any that I have the right to license without obligation of payment or other consideration to an unrelated third party. W3C Community RF Licensing Requirements obligations made concerning the Specification and described in this policy are binding on me for the life of the patents in question and encumber the patents containing Essential Claims, regardless of changes in participation status or W3C Membership. I also agree to license my Essential Claims under the W3C Community RF Licensing Requirements in derivative works of the Specification so long as all normative portions of the Specification are maintained and that this licensing commitment does not extend to any portion of the derivative work that was not included in the Specification. -3.2. Optional, Additional Patent Grant. In addition to the provisions of Section 3.1, I may also, at my option, make certain intellectual property rights infringed by implementations of the Specification, including Essential Claims, available by providing those terms via the W3C Web site. -4. No Other Rights. Except as specifically set forth in this Agreement, no other express or implied patent, trademark, copyright, or other property rights are granted under this Agreement, including by implication, waiver, or estoppel. -5. Antitrust Compliance. I acknowledge that I may compete with other participants, that I am under no obligation to implement the Specification, that each participant is free to develop competing technologies and standards, and that each party is free to license its patent rights to third parties, including for the purpose of enabling competing technologies and standards. -6. Non-Circumvention. I agree that I will not intentionally take or willfully assist any third party to take any action for the purpose of circumventing my obligations under this Agreement. -7. Transition to W3C Recommendation Track. The Specification developed by the Project may transition to the W3C Recommendation Track. The W3C Team is responsible for notifying me that a Corresponding Working Group has been chartered. I have no obligation to join the Corresponding Working Group. If the Specification developed by the Project transitions to the W3C Recommendation Track, the following terms apply: -7.1. If I join the Corresponding Working Group. If I join the Corresponding Working Group, I will be subject to all W3C rules, obligations, licensing commitments, and policies that govern that Corresponding Working Group. -7.2. If I Do Not Join the Corresponding Working Group. -7.2.1. Licensing Obligations to Resulting Specification. If I do not join the Corresponding Working Group, I agree to offer patent licenses according to the W3C Royalty-Free licensing requirements described in Section 5 of the W3C Patent Policy for the portions of the Specification included in the resulting Recommendation. This licensing commitment does not extend to any portion of an implementation of the Recommendation that was not included in the Specification. This licensing commitment may not be revoked but may be modified through the exclusion process defined in Section 4 of the W3C Patent Policy. I am not required to join the Corresponding Working Group to exclude patents from the W3C Royalty-Free licensing commitment, but must otherwise follow the normal exclusion procedures defined by the W3C Patent Policy. The W3C Team will notify me of any Call for Exclusion in the Corresponding Working Group as set forth in Section 4.5 of the W3C Patent Policy. -7.2.2. No Disclosure Obligation. If I do not join the Corresponding Working Group, I have no patent disclosure obligations outside of those set forth in Section 6 of the W3C Patent Policy. -8. Conflict of Interest. I will disclose significant relationships when those relationships might reasonably be perceived as creating a conflict of interest with my role. I will notify W3C of any change in my affiliation using W3C-provided mechanisms. -9. Representations, Warranties and Disclaimers. I represent and warrant that I am legally entitled to grant the rights and promises set forth in this Agreement. IN ALL OTHER RESPECTS THE SPECIFICATION IS PROVIDED “AS IS.” The entire risk as to implementing or otherwise using the Specification is assumed by the implementer and user. Except as stated herein, I expressly disclaim any warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to the Specification. IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF ANY KIND WITH RESPECT TO THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. All of my obligations under Section 3 regarding the transfer, successors in interest, or assignment of Granted Claims will be satisfied if I notify the transferee or assignee of any patent that I know contains Granted Claims of the obligations under Section 3. Nothing in this Agreement requires me to undertake a patent search. -10. Definitions. -10.1. Agreement. “Agreement” means this W3C Community Final Specification Agreement. -10.2. Corresponding Working Group. “Corresponding Working Group” is a W3C Working Group that is chartered to develop a Recommendation, as defined in the W3C Process Document, that takes the Specification as an input. -10.3. Essential Claims. “Essential Claims” shall mean all claims in any patent or patent application in any jurisdiction in the world that would necessarily be infringed by implementation of the Specification. A claim is necessarily infringed hereunder only when it is not possible to avoid infringing it because there is no non-infringing alternative for implementing the normative portions of the Specification. Existence of a non-infringing alternative shall be judged based on the state of the art at the time of the publication of the Specification. The following are expressly excluded from and shall not be deemed to constitute Essential Claims: -10.3.1. any claims other than as set forth above even if contained in the same patent as Essential Claims; and -10.3.2. claims which would be infringed only by: -portions of an implementation that are not specified in the normative portions of the Specification, or -enabling technologies that may be necessary to make or use any product or portion thereof that complies with the Specification and are not themselves expressly set forth in the Specification (e.g., semiconductor manufacturing technology, compiler technology, object-oriented technology, basic operating system technology, and the like); or -the implementation of technology developed elsewhere and merely incorporated by reference in the body of the Specification. -10.3.3. design patents and design registrations. -For purposes of this definition, the normative portions of the Specification shall be deemed to include only architectural and interoperability requirements. Optional features in the RFC 2119 sense are considered normative unless they are specifically identified as informative. Implementation examples or any other material that merely illustrate the requirements of the Specification are informative, rather than normative. -10.4. I, Me, or My. “I,” “me,” or “my” refers to the signatory. -10.5 Project. “Project” means the W3C Community Group or Business Group for which I executed this Agreement. -10.6. Specification. “Specification” means the Specification identified by the Project as the target of this agreement in a call for Final Specification Commitments. W3C shall provide the authoritative mechanisms for the identification of this Specification. -10.7. W3C Community RF Licensing Requirements. “W3C Community RF Licensing Requirements” license shall mean a non-assignable, non-sublicensable license to make, have made, use, sell, have sold, offer to sell, import, and distribute and dispose of implementations of the Specification that: -10.7.1. shall be available to all, worldwide, whether or not they are W3C Members; -10.7.2. shall extend to all Essential Claims owned or controlled by me; -10.7.3. may be limited to implementations of the Specification, and to what is required by the Specification; -10.7.4. may be conditioned on a grant of a reciprocal RF license (as defined in this policy) to all Essential Claims owned or controlled by the licensee. A reciprocal license may be required to be available to all, and a reciprocal license may itself be conditioned on a further reciprocal license from all. -10.7.5. may not be conditioned on payment of royalties, fees or other consideration; -10.7.6. may be suspended with respect to any licensee when licensor issued by licensee for infringement of claims essential to implement the Specification or any W3C Recommendation; -10.7.7. may not impose any further conditions or restrictions on the use of any technology, intellectual property rights, or other restrictions on behavior of the licensee, but may include reasonable, customary terms relating to operation or maintenance of the license relationship such as the following: choice of law and dispute resolution; -10.7.8. shall not be considered accepted by an implementer who manifests an intent not to accept the terms of the W3C Community RF Licensing Requirements license as offered by the licensor. -10.7.9. The RF license conforming to the requirements in this policy shall be made available by the licensor as long as the Specification is in effect. The term of such license shall be for the life of the patents in question. -I am encouraged to provide a contact from which licensing information can be obtained and other relevant licensing information. Any such information will be made publicly available. -10.8. You or Your. “You,” “you,” or “your” means any person or entity who exercises copyright or patent rights granted under this Agreement, and any person that person or entity controls. - -------------------------------------------------------------------------------------- - -------------------- WebGL ----------------------------- -Copyright (c) 2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Materials. - -THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. ------------------------------------------------------- - ---------------------------------------------------------- - -github.com/zeebo/xxh3 v1.1.0 - BSD-2-Clause - - -Copyright (c) 2019, Jeff Wendling -Copyright (c) 2012-2014, Yann Collet - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ---------------------------------------------------------- - ---------------------------------------------------------- - -golang.org/x/sync v0.23.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - - -Copyright 2009 The Go Authors -Copyright 2013 The Go Authors -Copyright 2016 The Go Authors -Copyright 2017 The Go Authors -Copyright 2019 The Go Authors - -BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - ---------------------------------------------------------- - ---------------------------------------------------------- - -golang.org/x/sys v0.48.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - - -Copyright 2009 The Go Authors -Copyright 2010 The Go Authors -Copyright 2011 The Go Authors -Copyright 2012 The Go Authors -Copyright 2013 The Go Authors -Copyright 2014 The Go Authors -Copyright 2015 The Go Authors -Copyright 2016 The Go Authors -Copyright 2017 The Go Authors -Copyright 2018 The Go Authors -Copyright 2019 The Go Authors -Copyright 2020 The Go Authors -Copyright 2021 The Go Authors -Copyright 2022 The Go Authors -Copyright 2023 The Go Authors -Copyright 2024 The Go Authors -Copyright 2025 The Go Authors -Copyright 2009,2010 The Go Authors - -BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - ---------------------------------------------------------- - ---------------------------------------------------------- - -golang.org/x/term v0.46.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - - -Copyright 2009 The Go Authors -Copyright 2011 The Go Authors -Copyright 2013 The Go Authors -Copyright 2019 The Go Authors -Copyright 2021 The Go Authors - -BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - ---------------------------------------------------------- - ---------------------------------------------------------- - -golang.org/x/text v0.42.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - - -(c) AeHa (c) -(c) EeAoq (c) -(c) EAiE (c) A -(c) lEEe (c) AE -(c) (c) AAEE (c) -(c) oav!A (c) AY -(c) aA"AE (c) 1AE (c) -Copyright 2009 The Go Authors -Copyright 2011 The Go Authors -Copyright 2012 The Go Authors -Copyright 2013 The Go Authors -Copyright 2014 The Go Authors -Copyright 2015 The Go Authors -Copyright 2016 The Go Authors -Copyright 2017 The Go Authors -Copyright 2018 The Go Authors -Copyright 2019 The Go Authors -Copyright 2021 The Go Authors -Copyright 2025 The Go Authors - -BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang - ---------------------------------------------------------- - ---------------------------------------------------------- - -github.com/klauspost/cpuid/v2 v2.2.10 - MIT - - -Copyright (c) 2015 Klaus Post -Copyright (c) 2020 Klaus Post -Copyright (c) 2021 Klaus Post -Copyright 2018 The Go Authors -Copyright (c) 2015- Klaus Post & Contributors - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---------------------------------------------------------- - ---------------------------------------------------------- - -github.com/Microsoft/go-winio v0.6.2 - MIT - - -Copyright (c) 2015 Microsoft -Copyright 2013 The Go Authors - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ---------------------------------------------------------- - ---------------------------------------------------------- - -github.com/mackerelio/go-osstat v0.2.8 - Apache-2.0 - - -Copyright 2017-2019 Hatena Co., Ltd. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - ---------------------------------------------------------- - ---------------------------------------------------------- - -parcel-bundler/watcher 8926bb8b281733bbfcaf69bb4e62ab7a1431c42a - MIT - - -Copyright Node.js contributors -Copyright 2012-2020 Facebook, Inc. -Copyright (c) 2017-present Devon Govett - -MIT License - -Copyright (c) 2017-present Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - ---------------------------------------------------------- +NOTICES AND INFORMATION +Do Not Translate or Localize + +This software incorporates material from third parties. +Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com, +or you may send a check or money order for US $5.00, including the product name, +the open source component name, platform, and version number, to: + +Source Code Compliance Team +Microsoft Corporation +One Microsoft Way +Redmond, WA 98052 +USA + +Notwithstanding any other terms, you may reverse engineer this software to the extent +required to debug changes to any libraries licensed under the GNU Lesser General Public License. + + +------------------- DefinitelyTyped -------------------- +This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. +DefinitelyTyped +This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. Provided for Informational Purposes Only + +MIT License +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------------- + +------------------- Unicode -------------------- +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +Unicode Data Files do not include PDF online code charts under the +directory http://www.unicode.org/Public/. + +Software includes any source code published in the Unicode Standard +or under the directories +http://www.unicode.org/Public/, http://www.unicode.org/reports/, +http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and +http://www.unicode.org/utility/trac/browser/. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. +------------------------------------------------------------------------------------- + +-------------------Document Object Model----------------------------- +DOM + +W3C License +This work is being provided by the copyright holders under the following license. +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following +on ALL copies of the work or portions thereof, including modifications: +* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +* Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived +from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR +FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. +Title to copyright in this work will at all times remain with copyright holders. + +--------- + +DOM +Copyright © 2018 WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License: Attribution 4.0 International +======================================================================= +Creative Commons Corporation ("Creative Commons") is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC- licensed material, or material used under an exception or limitation to copyright. More considerations for licensors: + +wiki.creativecommons.org/Considerations_for_licensors Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor's permission is not necessary for any reason--for example, because of any applicable exception or limitation to copyright--then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= +Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 -- Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 -- Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: a. reproduce and Share the Licensed Material, in whole or in part; and b. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. 5. Downstream recipients. a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 -- License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: a. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 -- Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 -- Disclaimer of Warranties and Limitation of Liability. a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 -- Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 -- Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 -- Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. ======================================================================= Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the "Licensor." Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. + +-------------------------------------------------------------------------------- + +----------------------Web Background Synchronization------------------------------ + +Web Background Synchronization Specification +Portions of spec © by W3C + +W3C Community Final Specification Agreement +To secure commitments from participants for the full text of a Community or Business Group Report, the group may call for voluntary commitments to the following terms; a "summary" is +available. See also the related "W3C Community Contributor License Agreement". +1. The Purpose of this Agreement. +This Agreement sets forth the terms under which I make certain copyright and patent rights available to you for your implementation of the Specification. +Any other capitalized terms not specifically defined herein have the same meaning as those terms have in the "W3C Patent Policy", and if not defined there, in the "W3C Process Document". +2. Copyrights. +2.1. Copyright Grant. I grant to you a perpetual (for the duration of the applicable copyright), worldwide, non-exclusive, no-charge, royalty-free, copyright license, without any obligation for accounting to me, to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, distribute, and implement the Specification to the full extent of my copyright interest in the Specification. +2.2. Attribution. As a condition of the copyright grant, you must include an attribution to the Specification in any derivative work you make based on the Specification. That attribution must include, at minimum, the Specification name and version number. +3. Patents. +3.1. Patent Licensing Commitment. I agree to license my Essential Claims under the W3C Community RF Licensing Requirements. This requirement includes Essential Claims that I own and any that I have the right to license without obligation of payment or other consideration to an unrelated third party. W3C Community RF Licensing Requirements obligations made concerning the Specification and described in this policy are binding on me for the life of the patents in question and encumber the patents containing Essential Claims, regardless of changes in participation status or W3C Membership. I also agree to license my Essential Claims under the W3C Community RF Licensing Requirements in derivative works of the Specification so long as all normative portions of the Specification are maintained and that this licensing commitment does not extend to any portion of the derivative work that was not included in the Specification. +3.2. Optional, Additional Patent Grant. In addition to the provisions of Section 3.1, I may also, at my option, make certain intellectual property rights infringed by implementations of the Specification, including Essential Claims, available by providing those terms via the W3C Web site. +4. No Other Rights. Except as specifically set forth in this Agreement, no other express or implied patent, trademark, copyright, or other property rights are granted under this Agreement, including by implication, waiver, or estoppel. +5. Antitrust Compliance. I acknowledge that I may compete with other participants, that I am under no obligation to implement the Specification, that each participant is free to develop competing technologies and standards, and that each party is free to license its patent rights to third parties, including for the purpose of enabling competing technologies and standards. +6. Non-Circumvention. I agree that I will not intentionally take or willfully assist any third party to take any action for the purpose of circumventing my obligations under this Agreement. +7. Transition to W3C Recommendation Track. The Specification developed by the Project may transition to the W3C Recommendation Track. The W3C Team is responsible for notifying me that a Corresponding Working Group has been chartered. I have no obligation to join the Corresponding Working Group. If the Specification developed by the Project transitions to the W3C Recommendation Track, the following terms apply: +7.1. If I join the Corresponding Working Group. If I join the Corresponding Working Group, I will be subject to all W3C rules, obligations, licensing commitments, and policies that govern that Corresponding Working Group. +7.2. If I Do Not Join the Corresponding Working Group. +7.2.1. Licensing Obligations to Resulting Specification. If I do not join the Corresponding Working Group, I agree to offer patent licenses according to the W3C Royalty-Free licensing requirements described in Section 5 of the W3C Patent Policy for the portions of the Specification included in the resulting Recommendation. This licensing commitment does not extend to any portion of an implementation of the Recommendation that was not included in the Specification. This licensing commitment may not be revoked but may be modified through the exclusion process defined in Section 4 of the W3C Patent Policy. I am not required to join the Corresponding Working Group to exclude patents from the W3C Royalty-Free licensing commitment, but must otherwise follow the normal exclusion procedures defined by the W3C Patent Policy. The W3C Team will notify me of any Call for Exclusion in the Corresponding Working Group as set forth in Section 4.5 of the W3C Patent Policy. +7.2.2. No Disclosure Obligation. If I do not join the Corresponding Working Group, I have no patent disclosure obligations outside of those set forth in Section 6 of the W3C Patent Policy. +8. Conflict of Interest. I will disclose significant relationships when those relationships might reasonably be perceived as creating a conflict of interest with my role. I will notify W3C of any change in my affiliation using W3C-provided mechanisms. +9. Representations, Warranties and Disclaimers. I represent and warrant that I am legally entitled to grant the rights and promises set forth in this Agreement. IN ALL OTHER RESPECTS THE SPECIFICATION IS PROVIDED “AS IS.” The entire risk as to implementing or otherwise using the Specification is assumed by the implementer and user. Except as stated herein, I expressly disclaim any warranties (express, implied, or otherwise), including implied warranties of merchantability, non-infringement, fitness for a particular purpose, or title, related to the Specification. IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF ANY KIND WITH RESPECT TO THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. All of my obligations under Section 3 regarding the transfer, successors in interest, or assignment of Granted Claims will be satisfied if I notify the transferee or assignee of any patent that I know contains Granted Claims of the obligations under Section 3. Nothing in this Agreement requires me to undertake a patent search. +10. Definitions. +10.1. Agreement. “Agreement” means this W3C Community Final Specification Agreement. +10.2. Corresponding Working Group. “Corresponding Working Group” is a W3C Working Group that is chartered to develop a Recommendation, as defined in the W3C Process Document, that takes the Specification as an input. +10.3. Essential Claims. “Essential Claims” shall mean all claims in any patent or patent application in any jurisdiction in the world that would necessarily be infringed by implementation of the Specification. A claim is necessarily infringed hereunder only when it is not possible to avoid infringing it because there is no non-infringing alternative for implementing the normative portions of the Specification. Existence of a non-infringing alternative shall be judged based on the state of the art at the time of the publication of the Specification. The following are expressly excluded from and shall not be deemed to constitute Essential Claims: +10.3.1. any claims other than as set forth above even if contained in the same patent as Essential Claims; and +10.3.2. claims which would be infringed only by: +portions of an implementation that are not specified in the normative portions of the Specification, or +enabling technologies that may be necessary to make or use any product or portion thereof that complies with the Specification and are not themselves expressly set forth in the Specification (e.g., semiconductor manufacturing technology, compiler technology, object-oriented technology, basic operating system technology, and the like); or +the implementation of technology developed elsewhere and merely incorporated by reference in the body of the Specification. +10.3.3. design patents and design registrations. +For purposes of this definition, the normative portions of the Specification shall be deemed to include only architectural and interoperability requirements. Optional features in the RFC 2119 sense are considered normative unless they are specifically identified as informative. Implementation examples or any other material that merely illustrate the requirements of the Specification are informative, rather than normative. +10.4. I, Me, or My. “I,” “me,” or “my” refers to the signatory. +10.5 Project. “Project” means the W3C Community Group or Business Group for which I executed this Agreement. +10.6. Specification. “Specification” means the Specification identified by the Project as the target of this agreement in a call for Final Specification Commitments. W3C shall provide the authoritative mechanisms for the identification of this Specification. +10.7. W3C Community RF Licensing Requirements. “W3C Community RF Licensing Requirements” license shall mean a non-assignable, non-sublicensable license to make, have made, use, sell, have sold, offer to sell, import, and distribute and dispose of implementations of the Specification that: +10.7.1. shall be available to all, worldwide, whether or not they are W3C Members; +10.7.2. shall extend to all Essential Claims owned or controlled by me; +10.7.3. may be limited to implementations of the Specification, and to what is required by the Specification; +10.7.4. may be conditioned on a grant of a reciprocal RF license (as defined in this policy) to all Essential Claims owned or controlled by the licensee. A reciprocal license may be required to be available to all, and a reciprocal license may itself be conditioned on a further reciprocal license from all. +10.7.5. may not be conditioned on payment of royalties, fees or other consideration; +10.7.6. may be suspended with respect to any licensee when licensor issued by licensee for infringement of claims essential to implement the Specification or any W3C Recommendation; +10.7.7. may not impose any further conditions or restrictions on the use of any technology, intellectual property rights, or other restrictions on behavior of the licensee, but may include reasonable, customary terms relating to operation or maintenance of the license relationship such as the following: choice of law and dispute resolution; +10.7.8. shall not be considered accepted by an implementer who manifests an intent not to accept the terms of the W3C Community RF Licensing Requirements license as offered by the licensor. +10.7.9. The RF license conforming to the requirements in this policy shall be made available by the licensor as long as the Specification is in effect. The term of such license shall be for the life of the patents in question. +I am encouraged to provide a contact from which licensing information can be obtained and other relevant licensing information. Any such information will be made publicly available. +10.8. You or Your. “You,” “you,” or “your” means any person or entity who exercises copyright or patent rights granted under this Agreement, and any person that person or entity controls. + +------------------------------------------------------------------------------------- + +------------------- WebGL ----------------------------- +Copyright (c) 2018 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +------------------------------------------------------ + +--------------------------------------------------------- + +github.com/zeebo/xxh3 v1.1.0 - BSD-2-Clause + + +Copyright (c) 2019, Jeff Wendling +Copyright (c) 2012-2014, Yann Collet + +Copyright (c) . All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +golang.org/x/sync v0.23.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + + +Copyright 2009 The Go Authors +Copyright 2013 The Go Authors +Copyright 2016 The Go Authors +Copyright 2017 The Go Authors +Copyright 2019 The Go Authors + +BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + +--------------------------------------------------------- + +--------------------------------------------------------- + +golang.org/x/sys v0.48.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + + +Copyright 2009 The Go Authors +Copyright 2010 The Go Authors +Copyright 2011 The Go Authors +Copyright 2012 The Go Authors +Copyright 2013 The Go Authors +Copyright 2014 The Go Authors +Copyright 2015 The Go Authors +Copyright 2016 The Go Authors +Copyright 2017 The Go Authors +Copyright 2018 The Go Authors +Copyright 2019 The Go Authors +Copyright 2020 The Go Authors +Copyright 2021 The Go Authors +Copyright 2022 The Go Authors +Copyright 2023 The Go Authors +Copyright 2024 The Go Authors +Copyright 2025 The Go Authors +Copyright 2009,2010 The Go Authors + +BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + +--------------------------------------------------------- + +--------------------------------------------------------- + +golang.org/x/term v0.46.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + + +Copyright 2009 The Go Authors +Copyright 2011 The Go Authors +Copyright 2013 The Go Authors +Copyright 2019 The Go Authors +Copyright 2021 The Go Authors + +BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + +--------------------------------------------------------- + +--------------------------------------------------------- + +golang.org/x/text v0.42.0 - BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + + +(c) AeHa (c) +(c) EeAoq (c) +(c) EAiE (c) A +(c) lEEe (c) AE +(c) (c) AAEE (c) +(c) oav!A (c) AY +(c) aA"AE (c) 1AE (c) +Copyright 2009 The Go Authors +Copyright 2011 The Go Authors +Copyright 2012 The Go Authors +Copyright 2013 The Go Authors +Copyright 2014 The Go Authors +Copyright 2015 The Go Authors +Copyright 2016 The Go Authors +Copyright 2017 The Go Authors +Copyright 2018 The Go Authors +Copyright 2019 The Go Authors +Copyright 2021 The Go Authors +Copyright 2025 The Go Authors + +BSD-3-Clause AND LicenseRef-scancode-google-patent-license-golang + +--------------------------------------------------------- + +--------------------------------------------------------- + +github.com/klauspost/cpuid/v2 v2.2.10 - MIT + + +Copyright (c) 2015 Klaus Post +Copyright (c) 2020 Klaus Post +Copyright (c) 2021 Klaus Post +Copyright 2018 The Go Authors +Copyright (c) 2015- Klaus Post & Contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +github.com/Microsoft/go-winio v0.6.2 - MIT + + +Copyright (c) 2015 Microsoft +Copyright 2013 The Go Authors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +github.com/mackerelio/go-osstat v0.2.8 - Apache-2.0 + + +Copyright 2017-2019 Hatena Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +parcel-bundler/watcher 8926bb8b281733bbfcaf69bb4e62ab7a1431c42a - MIT + + +Copyright Node.js contributors +Copyright 2012-2020 Facebook, Inc. +Copyright (c) 2017-present Devon Govett + +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- diff --git a/README.md b/README.md index 79adc1b165e39..6747f24816639 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,50 @@ - -# TypeScript - -[![CI](https://github.com/microsoft/TypeScript/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/TypeScript/actions/workflows/ci.yml) -[![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) -[![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) -[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/microsoft/TypeScript/badge)](https://securityscorecards.dev/viewer/?uri=github.com/microsoft/TypeScript) - - -[TypeScript](https://www.typescriptlang.org/) is a language for application-scale JavaScript. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the [playground](https://www.typescriptlang.org/play/), and stay up to date via [our blog](https://devblogs.microsoft.com/typescript/) and [Twitter account](https://twitter.com/typescript). - -Find others who are using TypeScript at [our community page](https://www.typescriptlang.org/community/). - -## Installing - -For the latest stable version: - -```bash -npm install -D typescript -``` - -For our nightly builds: - -```bash -npm install -D typescript@next -``` - -## Contribute - -There are many ways to [contribute](CONTRIBUTING.md) to TypeScript. -* [Submit bugs](https://github.com/microsoft/TypeScript/issues) and help us verify fixes as they are checked in. -* Review the [source code changes](https://github.com/microsoft/TypeScript/pulls). -* Engage with other TypeScript users and developers on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript). -* Help each other in the [TypeScript Community Discord](https://discord.gg/typescript). -* Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter. -* [Contribute bug fixes](CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see -the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) -with any additional questions or comments. - -## Documentation - -* [TypeScript in 5 minutes](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html) -* [Programming handbook](https://www.typescriptlang.org/docs/handbook/intro.html) -* [Homepage](https://www.typescriptlang.org/) - -## Roadmap - -For details on our planned features and future direction, please refer to our [roadmap](https://github.com/microsoft/TypeScript/wiki/Roadmap). + +# TypeScript + +[![CI](https://github.com/microsoft/TypeScript/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/TypeScript/actions/workflows/ci.yml) +[![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) +[![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/microsoft/TypeScript/badge)](https://securityscorecards.dev/viewer/?uri=github.com/microsoft/TypeScript) + + +[TypeScript](https://www.typescriptlang.org/) is a language for application-scale JavaScript. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the [playground](https://www.typescriptlang.org/play/), and stay up to date via [our blog](https://devblogs.microsoft.com/typescript/) and [Twitter account](https://twitter.com/typescript). + +Find others who are using TypeScript at [our community page](https://www.typescriptlang.org/community/). + +## Installing + +For the latest stable version: + +```bash +npm install -D typescript +``` + +For our nightly builds: + +```bash +npm install -D typescript@next +``` + +## Contribute + +There are many ways to [contribute](CONTRIBUTING.md) to TypeScript. +* [Submit bugs](https://github.com/microsoft/TypeScript/issues) and help us verify fixes as they are checked in. +* Review the [source code changes](https://github.com/microsoft/TypeScript/pulls). +* Engage with other TypeScript users and developers on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript). +* Help each other in the [TypeScript Community Discord](https://discord.gg/typescript). +* Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter. +* [Contribute bug fixes](CONTRIBUTING.md). + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see +the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) +with any additional questions or comments. + +## Documentation + +* [TypeScript in 5 minutes](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html) +* [Programming handbook](https://www.typescriptlang.org/docs/handbook/intro.html) +* [Homepage](https://www.typescriptlang.org/) + +## Roadmap + +For details on our planned features and future direction, please refer to our [roadmap](https://github.com/microsoft/TypeScript/wiki/Roadmap). diff --git a/packages/typescript/lib/getExePath.d.ts b/packages/typescript/lib/getExePath.d.ts index bf33fb7cf6882..b78ebd282ab9f 100644 --- a/packages/typescript/lib/getExePath.d.ts +++ b/packages/typescript/lib/getExePath.d.ts @@ -1,2 +1,2 @@ -declare function getExePath(): string; -export default getExePath; +declare function getExePath(): string; +export default getExePath; diff --git a/packages/typescript/lib/getExePath.js b/packages/typescript/lib/getExePath.js index 0bb4ab39e13e7..2de01d4c005a9 100644 --- a/packages/typescript/lib/getExePath.js +++ b/packages/typescript/lib/getExePath.js @@ -1,70 +1,70 @@ -import fs from "node:fs"; -import module from "node:module"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -// NOTE: Keep VS Code extension's resolveTsdkPathToExe in sync with this function. -export default function getExePath() { - const __dirname = path.dirname(fileURLToPath(import.meta.url)); - const normalizedDirname = __dirname.replace(/\\/g, "/"); - - const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf8")); - const pkgName = pkg.name; - const baseName = pkgName.startsWith("@") ? pkgName.split("/")[1] : pkgName; - const expectedBinName = baseName === "typescript" ? "tsc" : "tsgo"; - const binNames = pkg.bin && typeof pkg.bin === "object" ? Object.keys(pkg.bin) : []; - if (binNames.length !== 1 || binNames[0] !== expectedBinName) { - throw new Error(`Expected ${pkgName} to declare exactly one bin entry named ${expectedBinName}.`); - } - let binName = expectedBinName; - let exeDir; - - const expectedPackage = baseName + "-" + process.platform + "-" + process.arch; - - if (normalizedDirname.endsWith("/packages/" + baseName + "/lib")) { - // We're running directly from source in the repo. - // The local repo build (`hereby build`) always produces `tsgo`, regardless - // of the published `bin` name, so don't use binName here. - exeDir = path.resolve(__dirname, "..", "..", "..", "built", "local"); - binName = "tsc"; - } - else if (normalizedDirname.endsWith("/built/npm/" + baseName + "/lib")) { - // We're running from the built output. - exeDir = path.resolve(__dirname, "..", "..", expectedPackage, "lib"); - } - else { - // We're actually running from an installed package. - const platformPackageName = "@typescript/" + expectedPackage; - try { - if (typeof import.meta.resolve === "undefined") { - // v16.20.1 - const require = module.createRequire(import.meta.url); - const packageJson = require.resolve(platformPackageName + "/package.json"); - exeDir = path.join(path.dirname(packageJson), "lib"); - } - else { - // v20.6.0, v18.19.0 - const packageJson = import.meta.resolve(platformPackageName + "/package.json"); - const packageJsonPath = fileURLToPath(packageJson); - exeDir = path.join(path.dirname(packageJsonPath), "lib"); - } - } - catch (e) { - throw new Error("Unable to resolve " + platformPackageName + ". Either your platform is unsupported, or you are missing the package on disk."); - } - } - - let exe = path.join(exeDir, binName); - if (process.platform === "win32") { - exe += ".exe"; - if (exe.length >= 248) { - exe = "\\\\?\\" + exe; - } - } - - if (!fs.existsSync(exe)) { - throw new Error("Executable not found: " + exe); - } - - return exe; -} +import fs from "node:fs"; +import module from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +// NOTE: Keep VS Code extension's resolveTsdkPathToExe in sync with this function. +export default function getExePath() { + const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const normalizedDirname = __dirname.replace(/\\/g, "/"); + + const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf8")); + const pkgName = pkg.name; + const baseName = pkgName.startsWith("@") ? pkgName.split("/")[1] : pkgName; + const expectedBinName = baseName === "typescript" ? "tsc" : "tsgo"; + const binNames = pkg.bin && typeof pkg.bin === "object" ? Object.keys(pkg.bin) : []; + if (binNames.length !== 1 || binNames[0] !== expectedBinName) { + throw new Error(`Expected ${pkgName} to declare exactly one bin entry named ${expectedBinName}.`); + } + let binName = expectedBinName; + let exeDir; + + const expectedPackage = baseName + "-" + process.platform + "-" + process.arch; + + if (normalizedDirname.endsWith("/packages/" + baseName + "/lib")) { + // We're running directly from source in the repo. + // The local repo build (`hereby build`) always produces `tsgo`, regardless + // of the published `bin` name, so don't use binName here. + exeDir = path.resolve(__dirname, "..", "..", "..", "built", "local"); + binName = "tsc"; + } + else if (normalizedDirname.endsWith("/built/npm/" + baseName + "/lib")) { + // We're running from the built output. + exeDir = path.resolve(__dirname, "..", "..", expectedPackage, "lib"); + } + else { + // We're actually running from an installed package. + const platformPackageName = "@typescript/" + expectedPackage; + try { + if (typeof import.meta.resolve === "undefined") { + // v16.20.1 + const require = module.createRequire(import.meta.url); + const packageJson = require.resolve(platformPackageName + "/package.json"); + exeDir = path.join(path.dirname(packageJson), "lib"); + } + else { + // v20.6.0, v18.19.0 + const packageJson = import.meta.resolve(platformPackageName + "/package.json"); + const packageJsonPath = fileURLToPath(packageJson); + exeDir = path.join(path.dirname(packageJsonPath), "lib"); + } + } + catch (e) { + throw new Error("Unable to resolve " + platformPackageName + ". Either your platform is unsupported, or you are missing the package on disk."); + } + } + + let exe = path.join(exeDir, binName); + if (process.platform === "win32") { + exe += ".exe"; + if (exe.length >= 248) { + exe = "\\\\?\\" + exe; + } + } + + if (!fs.existsSync(exe)) { + throw new Error("Executable not found: " + exe); + } + + return exe; +} diff --git a/packages/typescript/lib/tsc.js b/packages/typescript/lib/tsc.js index eb869b715737e..721fde8fb13a8 100644 --- a/packages/typescript/lib/tsc.js +++ b/packages/typescript/lib/tsc.js @@ -1,28 +1,28 @@ -#!/usr/bin/env node - -import getExePath from "#getExePath"; -import { execFileSync } from "node:child_process"; - -const exe = getExePath(); - -if (process.platform !== "win32" && typeof process.execve === "function") { - // > v22.15.0 - try { - process.execve(exe, [exe, ...process.argv.slice(2)]); - } - catch { - // may not be available, ignore the error and fallback - } -} - -try { - execFileSync(exe, process.argv.slice(2), { stdio: "inherit" }); -} -catch (e) { - if (e.status) { - process.exitCode = e.status; - } - else { - throw e; - } -} +#!/usr/bin/env node + +import getExePath from "#getExePath"; +import { execFileSync } from "node:child_process"; + +const exe = getExePath(); + +if (process.platform !== "win32" && typeof process.execve === "function") { + // > v22.15.0 + try { + process.execve(exe, [exe, ...process.argv.slice(2)]); + } + catch { + // may not be available, ignore the error and fallback + } +} + +try { + execFileSync(exe, process.argv.slice(2), { stdio: "inherit" }); +} +catch (e) { + if (e.status) { + process.exitCode = e.status; + } + else { + throw e; + } +} diff --git a/packages/typescript/lib/version.cjs b/packages/typescript/lib/version.cjs index fde8484c9078a..fa8ef64d86786 100644 --- a/packages/typescript/lib/version.cjs +++ b/packages/typescript/lib/version.cjs @@ -1,3 +1,3 @@ -const { version } = require("../package.json"); -exports.version = version; -exports.versionMajorMinor = "7.1"; +const { version } = require("../package.json"); +exports.version = version; +exports.versionMajorMinor = "7.1"; diff --git a/packages/typescript/lib/version.d.cts b/packages/typescript/lib/version.d.cts index 1939756106417..3f8198b773b9a 100644 --- a/packages/typescript/lib/version.d.cts +++ b/packages/typescript/lib/version.d.cts @@ -1,2 +1,2 @@ -export declare const version: string; -export declare const versionMajorMinor = "7.1"; +export declare const version: string; +export declare const versionMajorMinor = "7.1"; diff --git a/packages/typescript/scripts/generate.ts b/packages/typescript/scripts/generate.ts index 19e9ba79521ef..24ce646c3cc4c 100644 --- a/packages/typescript/scripts/generate.ts +++ b/packages/typescript/scripts/generate.ts @@ -1,9 +1,9 @@ -import { parseGeneratorArgs } from "../../../tools/scripts/gen/utils.mts"; -import generateEncoder from "../../../tools/scripts/tsc/generate-encoder.ts"; -import generateAST from "../../../tools/scripts/tsc/generate-ts-ast.ts"; -import { generateSync } from "./generateSync.ts"; - -const { force } = parseGeneratorArgs({}); -generateAST(force); -generateEncoder(force); -generateSync(force); +import { parseGeneratorArgs } from "../../../tools/scripts/gen/utils.mts"; +import generateEncoder from "../../../tools/scripts/tsc/generate-encoder.ts"; +import generateAST from "../../../tools/scripts/tsc/generate-ts-ast.ts"; +import { generateSync } from "./generateSync.ts"; + +const { force } = parseGeneratorArgs({}); +generateAST(force); +generateEncoder(force); +generateSync(force); diff --git a/packages/typescript/scripts/generateSync.ts b/packages/typescript/scripts/generateSync.ts index d236ea091ca78..5820bb0935f63 100755 --- a/packages/typescript/scripts/generateSync.ts +++ b/packages/typescript/scripts/generateSync.ts @@ -1,690 +1,690 @@ -#!/usr/bin/env node - -/** - * Generates sync API from async API source files. - * - * Reads async/types.ts and async/api.ts, applies directive-based and - * AST-based transforms, and writes sync/types.ts and sync/api.ts. - * - * Directives (placed in comments in the async source): - * // @sync-skip — omit this line in sync output - * // @sync-skip-block-start/end — omit all lines between (inclusive) - * // @sync-only-start/end — uncomment lines between (strip "// " prefix) - * // @sync: — replace this line with (preserving indent) - * - * AST-based transforms (applied after directives using the TypeScript compiler API): - * - Generate synchronous implementations from async methods - * - Attach generator implementations as each synchronous method's `.gen` property - * - Unwrap `Promise` → `T` in synchronous type references - * - * Usage: - * node generateSync.ts - */ - -import { readFileSync } from "node:fs"; -import { - join, - relative, -} from "node:path"; -import ts from "typescript"; -import { GeneratedFile } from "../../../tools/scripts/gen/generatedFile.mts"; -import { - formatFilesSync, - parseGeneratorArgs, -} from "../../../tools/scripts/gen/utils.mts"; - -function generatedHeader(asyncSourceRelPath: string): string { - return [ - "//", - "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", - "// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!!", - "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", - "//", - `// Source: ${asyncSourceRelPath}`, - "// Regenerate: npm run generate (from packages/typescript)", - "//", - "", - ].join("\n"); -} - -const ROOT = join(import.meta.dirname!, ".."); -const SRC = join(ROOT, "src", "api"); -const TEST = join(ROOT, "test"); - -type SourceTransform = (source: string, fileName: string) => string; -type SyncVariant = "sync" | "generators"; - -function generateSyncFile( - srcPath: string, - destPath: string, - transform: SourceTransform, - force: boolean, - variant: SyncVariant = "sync", -): GeneratedFile | undefined { - const generated = new GeneratedFile(destPath, [import.meta.filename, srcPath]); - if (generated.isCurrent(force)) return; - const source = readFileSync(srcPath, "utf-8"); - - // Normalize line endings to LF - const normalized = source.replace(/\r/g, ""); - - // Phase 1: Process sync directives (text-based, operates on comments/lines) - const afterDirectives = processDirectives(normalized.split("\n"), variant).join("\n"); - - // Phase 2: AST-based async→sync transforms - const fileName = destPath.split("/").pop()!; - let result = transform(afterDirectives, fileName); - - // Prepend generated header pointing to async source - const srcRelPath = relative(ROOT, srcPath).replaceAll("\\", "/"); - result = generatedHeader(srcRelPath) + result; - - generated.write(result); - const label = relative(ROOT, srcPath).replaceAll("\\", "/"); - const destLabel = relative(ROOT, destPath).replaceAll("\\", "/"); - console.log(` ${label} → ${destLabel}`); - return generated; -} - -// ── Directive processing ───────────────────────────────────────── - -function processDirectives(lines: string[], variant: SyncVariant): string[] { - const output: string[] = []; - let skipBlock = false; - let syncOnlyBlock = false; - let generatorsOnlyBlock = false; - - for (const line of lines) { - const trimmed = line.trim(); - - if (trimmed === "// @generators-skip-block-start") { - skipBlock = variant === "generators"; - continue; - } - if (trimmed === "// @generators-skip-block-end") { - skipBlock = false; - continue; - } - - // Block-skip markers - if (trimmed === "// @sync-skip-block-start") { - skipBlock = true; - continue; - } - if (trimmed === "// @sync-skip-block-end") { - skipBlock = false; - continue; - } - if (skipBlock) continue; - - if (trimmed === "// @generators-only-start") { - generatorsOnlyBlock = true; - continue; - } - if (trimmed === "// @generators-only-end") { - generatorsOnlyBlock = false; - continue; - } - - if (generatorsOnlyBlock) { - if (variant === "generators") output.push(uncommentLine(line)); - continue; - } - - // Sync-only markers (uncomment block) - if (trimmed === "// @sync-only-start") { - syncOnlyBlock = true; - continue; - } - if (trimmed === "// @sync-only-end") { - syncOnlyBlock = false; - continue; - } - - if (syncOnlyBlock) { - output.push(uncommentLine(line)); - continue; - } - - if (variant === "generators" && line.includes("// @generators-skip")) { - continue; - } - - // Single-line skip - if (line.includes("// @sync-skip")) { - continue; - } - - // Single-line replacement: // @sync: - const generatorsReplaceMatch = line.match(/\/\/ @generators: (.+)$/); - if (variant === "generators" && generatorsReplaceMatch) { - const indent = line.match(/^(\s*)/)![1]; - output.push(indent + generatorsReplaceMatch[1]); - continue; - } - - const lineWithoutGeneratorsDirective = generatorsReplaceMatch - ? line.slice(0, generatorsReplaceMatch.index).trimEnd() - : line; - const syncReplaceMatch = lineWithoutGeneratorsDirective.match(/\/\/ @sync: (.+)$/); - if (syncReplaceMatch) { - const indent = lineWithoutGeneratorsDirective.match(/^(\s*)/)![1]; - output.push(indent + syncReplaceMatch[1]); - continue; - } - - output.push(lineWithoutGeneratorsDirective); - } - - return output; -} - -function uncommentLine(line: string): string { - const indent = line.match(/^(\s*)/)![1]; - const rest = line.slice(indent.length); - if (rest.startsWith("// ")) return indent + rest.slice(3); - if (rest === "//") return indent; - return line; -} - -// ── AST-based transforms ──────────────────────────────────────── - -interface Edit { - start: number; - end: number; - newText: string; -} - -function applyEdits(source: string, edits: Edit[]): string { - edits.sort((a, b) => b.start - a.start); - let result = source; - for (const edit of edits) { - result = result.slice(0, edit.start) + edit.newText + result.slice(edit.end); - } - return result; -} - -type TransformMode = "sync" | "generator"; - -function transformAsyncSource(source: string, fileName: string, attachGenerators: boolean): string { - const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true); - const edits: Edit[] = []; - const asyncMethodNames = new Set(); - const synchronousMethodNames = new Set(); - - for (const classDeclaration of getNamedClasses(sourceFile).values()) { - for (const group of getMethodGroups(classDeclaration).values()) { - const method = group.implementation; - if (isGeneratorMethod(method)) asyncMethodNames.add((method.name as ts.Identifier).text); - else synchronousMethodNames.add((method.name as ts.Identifier).text); - } - } - - visit(sourceFile); - return applyEdits(source, edits); - - function visit(node: ts.Node): void { - if (attachGenerators && ts.isClassDeclaration(node)) { - const replacedMethods = new Set(); - for (const group of getMethodGroups(node).values()) { - if (!isGeneratorMethod(group.implementation)) continue; - for (const declaration of group.declarations) replacedMethods.add(declaration); - edits.push({ - start: group.declarations[0].getStart(sourceFile), - end: group.implementation.end, - newText: createCombinedMethodFromAsync(group, source, sourceFile), - }); - } - for (const member of node.members) { - if (!ts.isMethodDeclaration(member) || !replacedMethods.has(member)) visit(member); - } - return; - } - - if (attachGenerators && ts.isInterfaceDeclaration(node)) { - const replacedSignatures = new Set(); - for (const [name, declarations] of getSignatureGroups(node)) { - if (!declarations.every(declaration => isPromiseType(declaration.type))) continue; - for (const declaration of declarations) replacedSignatures.add(declaration); - const indent = getIndent(source, declarations[0].getStart(sourceFile)); - const syncSignatures = declarations.map(declaration => `${indent} ${createAsyncCallSignature(declaration, "sync")}`).join("\n"); - const generatorSignatures = declarations.map(declaration => `${indent} gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); - edits.push({ - start: declarations[0].getStart(sourceFile), - end: declarations.at(-1)!.end, - newText: `${name}: {\n${syncSignatures}\n${generatorSignatures}\n${indent}};`, - }); - } - for (const member of node.members) { - if (!ts.isMethodSignature(member) || !replacedSignatures.has(member)) visit(member); - } - return; - } - - addSyncEdit(node, source, sourceFile, edits); - ts.forEachChild(node, visit); - } - - function createCombinedMethodFromAsync(group: MethodGroup, source: string, sourceFile: ts.SourceFile): string { - const method = group.implementation; - const name = (method.name as ts.Identifier).text; - const indent = getIndent(source, group.declarations[0].getStart(sourceFile)); - const modifiers = method.modifiers - ?.filter(modifier => modifier.kind !== ts.SyntaxKind.AsyncKeyword) - .map(modifier => source.slice(modifier.getStart(sourceFile), modifier.end)) - .join(" "); - const declarations = getPublicDeclarations(group); - const syncSignatures = declarations.map(declaration => `${indent} ${createAsyncCallSignature(declaration, "sync")}`).join("\n"); - const generatorSignatures = declarations.map(declaration => `${indent} gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); - const body = declarations.length > 1 - ? createAsyncOverloadedGetterBody(name, group, indent) - : `{\n${indent} const owner = this;\n${indent} return cacheGeneratorMethod(\n${indent} owner,\n${indent} "${name}",\n${indent} ${createAsyncFunction(method, "sync", false)},\n${indent} ${createAsyncFunction(method, "generator", true)},\n${indent} );\n${indent}}`; - return `${modifiers ? `${modifiers} ` : ""}get ${name}(): {\n${syncSignatures}\n${generatorSignatures}\n${indent}} ${body}`; - } - - function createAsyncOverloadedGetterBody(name: string, group: MethodGroup, indent: string): string { - const declarations = getPublicDeclarations(group); - const syncOverloads = declarations.map(declaration => `function ${name}${createAsyncCallSignature(declaration, "sync")}`).join("\n"); - const generatorOverloads = declarations.map(declaration => `function gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); - const syncImplementation = createAsyncNamedFunction(name, group.implementation, "sync", false); - const generatorImplementation = createAsyncNamedFunction("gen", group.implementation, "generator", true); - return `{\n${indent} const owner = this;\n${indent}${indentLines(syncOverloads, `${indent} `)}\n${indent}${indentLines(syncImplementation, `${indent} `)}\n${indent}${indentLines(generatorOverloads, `${indent} `)}\n${indent}${indentLines(generatorImplementation, `${indent} `)}\n${indent} return cacheGeneratorMethod(owner, "${name}", ${name}, gen);\n${indent}}`; - } - - function createAsyncCallSignature(node: ts.SignatureDeclarationBase, mode: TransformMode): string { - return `${getTypeParametersText(node, source, sourceFile)}(${getAsyncSignatureParameters(node, mode)}): ${getAsyncReturnType(node, mode)};`; - } - - function createAsyncFunction(node: ts.MethodDeclaration, mode: TransformMode, generator: boolean): string { - const parameters = node.parameters.map(parameter => transformNodeText(parameter, mode, true)).join(", "); - const body = transformNodeText(node.body!, mode, true); - return `function${generator ? "*" : ""} ${getTypeParametersText(node, source, sourceFile)}(${parameters}): ${getAsyncReturnType(node, mode)} ${body}`; - } - - function createAsyncNamedFunction(name: string, node: ts.MethodDeclaration, mode: TransformMode, generator: boolean): string { - const parameters = node.parameters.map(parameter => transformNodeText(parameter, mode, true)).join(", "); - const body = transformNodeText(node.body!, mode, true); - return `function${generator ? "*" : ""} ${name}${getTypeParametersText(node, source, sourceFile)}(${parameters}): ${getAsyncReturnType(node, mode)} ${body}`; - } - - function getAsyncSignatureParameters(node: ts.SignatureDeclarationBase, mode: TransformMode): string { - return node.parameters.map(parameter => { - const rest = parameter.dotDotDotToken ? "..." : ""; - const name = source.slice(parameter.name.getStart(sourceFile), parameter.name.end); - const optional = parameter.questionToken || parameter.initializer ? "?" : ""; - const type = parameter.type ? transformNodeText(parameter.type, mode, false) : "unknown"; - return `${rest}${name}${optional}: ${type}`; - }).join(", "); - } - - function getAsyncReturnType(node: ts.SignatureDeclarationBase, mode: TransformMode): string { - if (!node.type) return "void"; - if (mode === "generator" && isPromiseType(node.type)) { - const returnType = getUnwrappedPromiseText(node.type, source, sourceFile); - return `Generator`; - } - return transformNodeText(node.type, mode, false); - } - - function transformNodeText(node: ts.Node, mode: TransformMode, replaceThis: boolean): string { - const start = node.getStart(sourceFile); - const localEdits: Edit[] = []; - - function visitNode(current: ts.Node): void { - if (replaceThis && current.kind === ts.SyntaxKind.ThisKeyword) { - localEdits.push({ start: current.getStart(sourceFile) - start, end: current.end - start, newText: "owner" }); - return; - } - if (replaceThis && ts.isBlock(node) && current !== node && ts.isFunctionLike(current) && !ts.isArrowFunction(current)) return; - - if (mode === "sync") { - if (addSyncEdit(current, source, sourceFile, localEdits, start)) return; - } - else if (addGeneratorEdit(current, start, localEdits)) { - return; - } - ts.forEachChild(current, visitNode); - } - - visitNode(node); - return applyEdits(source.slice(start, node.end), localEdits); - } - - function addGeneratorEdit(node: ts.Node, offset: number, targetEdits: Edit[]): boolean { - if (ts.isAwaitExpression(node)) { - const replacement = getGeneratorAwaitText(node); - editsForNode(node, replacement, offset); - return true; - } - if (ts.isCallExpression(node) && isAPIRequestCall(node) && !ts.isAwaitExpression(node.parent)) { - const receiver = node.expression.expression; - if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "client") { - editsForNode(node, getRequestYieldText(node), offset); - return true; - } - } - if ( - ts.isCallExpression(node) && - !ts.isAwaitExpression(node.parent) && - isGeneratorCall(node) - ) { - const generatorCall = `yield* ${getGeneratorCallText(node)}`; - editsForNode(node, ts.isReturnStatement(node.parent) ? generatorCall : `(${generatorCall})`, offset); - return true; - } - if (ts.isTypeReferenceNode(node) && isPromiseType(node)) { - const replacement = isFunctionReturnType(node) - ? `Generator` - : getUnwrappedPromiseText(node, source, sourceFile); - editsForNode(node, replacement, offset); - return true; - } - return false; - - function editsForNode(current: ts.Node, replacement: string, base: number): void { - targetEdits.push({ start: current.getStart(sourceFile) - base, end: current.end - base, newText: replacement }); - } - } - - function getGeneratorAwaitText(node: ts.AwaitExpression): string { - if (isAPIRequestCall(node.expression)) { - const receiver = node.expression.expression.expression; - if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "client") return getRequestYieldText(node.expression); - return `yield ${getTextWithOwner(node.expression)}`; - } - if ( - ts.isCallExpression(node.expression) && - ts.isPropertyAccessExpression(node.expression.expression) && - ts.isPropertyAccessExpression(node.expression.expression.expression) && - node.expression.expression.expression.name.text === "client" - ) { - return getTextWithOwner(node.expression); - } - if (ts.isCallExpression(node.expression) && ts.isIdentifier(node.expression.expression) && node.expression.expression.text === "cb") { - return `yield* (${getTextWithOwner(node.expression)} ?? [])`; - } - const expression = ts.isCallExpression(node.expression) && ts.isPropertyAccessExpression(node.expression.expression) - ? getGeneratorCallText(node.expression) - : getTextWithOwner(node.expression); - return `(yield* ${expression})`; - } - - function getRequestYieldText(call: ts.CallExpression): string { - const [method, params] = call.arguments; - const methodText = getTextWithOwner(method); - const paramsText = params ? getTextWithOwner(params) : "undefined"; - const request = `yield* apiRequest(${methodText}, ${paramsText})`; - return ts.isPropertyAccessExpression(call.expression) && call.expression.name.text === "apiRequestBinary" - ? `sourceFileResponseToUint8Array((${request}))` - : request; - } - - function getGeneratorCallText(call: ts.CallExpression): string { - const expression = getTextWithOwner(call.expression); - const callText = getTextWithOwner(call); - return `${expression}.gen${callText.slice(expression.length)}`; - } - - function getTextWithOwner(node: ts.Node): string { - const start = node.getStart(sourceFile); - const ownerEdits: Edit[] = []; - - function visitNode(current: ts.Node): void { - if (current.kind === ts.SyntaxKind.ThisKeyword) { - ownerEdits.push({ start: current.getStart(sourceFile) - start, end: current.end - start, newText: "owner" }); - return; - } - if (current !== node && ts.isFunctionLike(current) && !ts.isArrowFunction(current)) return; - ts.forEachChild(current, visitNode); - } - - visitNode(node); - return applyEdits(source.slice(start, node.end), ownerEdits); - } - - function isGeneratorCall(node: ts.Expression): boolean { - if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node)) return isGeneratorCall(node.expression); - if (ts.isConditionalExpression(node)) return isGeneratorCall(node.whenTrue) && isGeneratorCall(node.whenFalse); - const call = getCallExpression(node); - return !!call && - ts.isPropertyAccessExpression(call.expression) && - !(ts.isPropertyAccessExpression(call.expression.expression) && call.expression.expression.name.text === "client") && - !synchronousMethodNames.has(call.expression.name.text) && - asyncMethodNames.has(call.expression.name.text); - } - - function isGeneratorMethod(node: ts.MethodDeclaration): boolean { - return !!node.body && (node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword) || isPromiseType(node.type)); - } - - function isPromiseType(node: ts.TypeNode | undefined): node is ts.TypeReferenceNode { - return !!node && - ts.isTypeReferenceNode(node) && - ts.isIdentifier(node.typeName) && - node.typeName.text === "Promise" && - node.typeArguments?.length === 1; - } - - function isAPIRequestCall(node: ts.Expression): node is ts.CallExpression & { expression: ts.PropertyAccessExpression; } { - return ts.isCallExpression(node) - && ts.isPropertyAccessExpression(node.expression) - && (node.expression.name.text === "apiRequest" || node.expression.name.text === "apiRequestBinary"); - } - - function getCallExpression(node: ts.Expression): ts.CallExpression | undefined { - while (ts.isAsExpression(node) || ts.isParenthesizedExpression(node)) node = node.expression; - return ts.isCallExpression(node) ? node : undefined; - } - - function isFunctionReturnType(node: ts.TypeNode): boolean { - let current: ts.Node = node; - while (ts.isTypeNode(current.parent)) { - if ((ts.isFunctionTypeNode(current.parent) || ts.isConstructorTypeNode(current.parent)) && current.parent.type === current) return true; - current = current.parent; - } - return ts.isFunctionLike(current.parent) && current.parent.type === current; - } -} - -function addSyncEdit(node: ts.Node, source: string, sourceFile: ts.SourceFile, edits: Edit[], offset: number = 0): boolean { - if ( - (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isArrowFunction(node) || ts.isFunctionExpression(node)) && - node.modifiers - ) { - for (const modifier of node.modifiers) { - if (modifier.kind !== ts.SyntaxKind.AsyncKeyword) continue; - let end = modifier.end; - while (end < source.length && source[end] === " ") end++; - edits.push({ start: modifier.getStart(sourceFile) - offset, end: end - offset, newText: "" }); - } - } - if (ts.isVariableDeclarationList(node) && (node.flags & ts.NodeFlags.AwaitUsing) === ts.NodeFlags.AwaitUsing) { - const awaitKeyword = node.getFirstToken(sourceFile); - if (awaitKeyword?.kind !== ts.SyntaxKind.AwaitKeyword) throw new Error("Expected await using declaration"); - edits.push({ start: awaitKeyword.getStart(sourceFile) - offset, end: awaitKeyword.end - offset, newText: "" }); - } - if (ts.isAwaitExpression(node)) { - edits.push({ - start: node.getStart(sourceFile) - offset, - end: node.expression.getStart(sourceFile) - offset, - newText: "", - }); - } - if (isPromiseTypeReference(node)) { - const innerText = getUnwrappedPromiseText(node, source, sourceFile); - if (ts.isUnionTypeNode(node.parent)) { - const unionTypes = node.parent.types; - const currentIndex = unionTypes.indexOf(node); - const representativeIndex = unionTypes.findIndex(type => getUnwrappedTypeText(type, source, sourceFile) === innerText); - if (representativeIndex !== currentIndex) { - if (currentIndex < representativeIndex) { - edits.push({ - start: node.getStart(sourceFile) - offset, - end: unionTypes[currentIndex + 1].getStart(sourceFile) - offset, - newText: "", - }); - } - else { - edits.push({ - start: unionTypes[currentIndex - 1].end - offset, - end: node.end - offset, - newText: "", - }); - } - return true; - } - } - edits.push({ start: node.getStart(sourceFile) - offset, end: node.end - offset, newText: innerText }); - return true; - } - return false; -} - -function isPromiseTypeReference(node: ts.Node | undefined): node is ts.TypeReferenceNode { - return !!node && - ts.isTypeReferenceNode(node) && - ts.isIdentifier(node.typeName) && - node.typeName.text === "Promise" && - node.typeArguments?.length === 1; -} - -function getUnwrappedPromiseText(node: ts.TypeNode, source: string, sourceFile: ts.SourceFile): string { - let current = node; - while (isPromiseTypeReference(current)) current = current.typeArguments![0]; - return source.slice(current.getStart(sourceFile), current.end); -} - -function getUnwrappedTypeText(node: ts.TypeNode, source: string, sourceFile: ts.SourceFile): string { - return isPromiseTypeReference(node) ? getUnwrappedPromiseText(node, source, sourceFile) : source.slice(node.getStart(sourceFile), node.end); -} - -interface MethodGroup { - declarations: readonly ts.MethodDeclaration[]; - implementation: ts.MethodDeclaration; -} - -function getNamedClasses(sourceFile: ts.SourceFile): Map { - const classes = new Map(); - for (const statement of sourceFile.statements) { - if (ts.isClassDeclaration(statement) && statement.name) classes.set(statement.name.text, statement); - } - return classes; -} - -function getMethodGroups(node: ts.ClassDeclaration): Map { - const groups = new Map(); - for (let index = 0; index < node.members.length; index++) { - const member = node.members[index]; - if (!ts.isMethodDeclaration(member) || !ts.isIdentifier(member.name)) continue; - - const declarations = [member]; - while (index + 1 < node.members.length) { - const nextMember = node.members[index + 1]; - if (!ts.isMethodDeclaration(nextMember) || !ts.isIdentifier(nextMember.name) || nextMember.name.text !== member.name.text) break; - declarations.push(nextMember); - index++; - } - const implementation = declarations.findLast(declaration => declaration.body); - if (!implementation) continue; - groups.set(getMethodKey(implementation), { declarations, implementation }); - } - return groups; -} - -function getSignatureGroups(node: ts.InterfaceDeclaration): Map { - const groups = new Map(); - for (const member of node.members) { - if (!ts.isMethodSignature(member) || !ts.isIdentifier(member.name)) continue; - const declarations = groups.get(member.name.text) ?? []; - declarations.push(member); - groups.set(member.name.text, declarations); - } - return groups; -} - -function getMethodKey(node: ts.MethodDeclaration): string { - return `${node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.StaticKeyword) ? "static:" : ""}${(node.name as ts.Identifier).text}`; -} - -function getPublicDeclarations(group: MethodGroup): readonly ts.MethodDeclaration[] { - const overloads = group.declarations.filter(declaration => !declaration.body); - return overloads.length ? overloads : [group.implementation]; -} - -function indentLines(text: string, indent: string): string { - return text.replaceAll("\n", `\n${indent}`); -} - -function getTypeParametersText(node: ts.SignatureDeclarationBase, source: string, sourceFile: ts.SourceFile): string { - if (!node.typeParameters?.length) return ""; - return `<${node.typeParameters.map(typeParameter => source.slice(typeParameter.getStart(sourceFile), typeParameter.end)).join(", ")}>`; -} - -function getIndent(source: string, position: number): string { - const lineStart = source.lastIndexOf("\n", position - 1) + 1; - return source.slice(lineStart, position); -} - -// ── Formatting ─────────────────────────────────────────────────── - -// ── Main ───────────────────────────────────────────────────────── - -export function generateSync(force = false): void { - console.log("Generating sync API from async source..."); - const generatedFiles: (GeneratedFile | undefined)[] = []; - - // Source files - for (const relPath of ["types.ts", "api.ts"]) { - generatedFiles.push(generateSyncFile( - join(SRC, "async", relPath), - join(SRC, "sync", relPath), - relPath === "api.ts" - ? (source, fileName) => - [ - 'import type { APIRequest as ProtocolRequest, APIResponse as ProtocolResponse } from "../proto.ts";', - 'import { apiRequest, cacheGeneratorMethod } from "./generatorSupport.ts";', - "", - transformAsyncSource(source, fileName, true), - ].join("\n") - : (source, fileName) => - [ - 'import type { APIRequest as ProtocolRequest, APIResponse as ProtocolResponse } from "../proto.ts";', - "", - transformAsyncSource(source, fileName, true), - ].join("\n"), - force, - )); - } - - // Test files - for (const relPath of ["api.test.ts", "api.bench.ts", "astnav.test.ts"]) { - generatedFiles.push(generateSyncFile( - join(TEST, "async", relPath), - join(TEST, "sync", relPath), - (source, fileName) => transformAsyncSource(source, fileName, false), - force, - )); - } - - generatedFiles.push(generateSyncFile( - join(TEST, "async", "api.bench.ts"), - join(TEST, "generators", "api.bench.ts"), - (source, fileName) => transformAsyncSource(source, fileName, false), - force, - "generators", - )); - - const changedFiles = generatedFiles.filter(file => file !== undefined); - if (!changedFiles.length) { - console.log("Sync API is up to date."); - return; - } - console.log("Formatting..."); - formatFilesSync(changedFiles.map(file => file.fileName)); - for (const file of changedFiles) file.markCurrent(); - console.log("Done."); -} - -if (process.argv[1] === import.meta.filename) { - generateSync(parseGeneratorArgs({}).force); -} +#!/usr/bin/env node + +/** + * Generates sync API from async API source files. + * + * Reads async/types.ts and async/api.ts, applies directive-based and + * AST-based transforms, and writes sync/types.ts and sync/api.ts. + * + * Directives (placed in comments in the async source): + * // @sync-skip — omit this line in sync output + * // @sync-skip-block-start/end — omit all lines between (inclusive) + * // @sync-only-start/end — uncomment lines between (strip "// " prefix) + * // @sync: — replace this line with (preserving indent) + * + * AST-based transforms (applied after directives using the TypeScript compiler API): + * - Generate synchronous implementations from async methods + * - Attach generator implementations as each synchronous method's `.gen` property + * - Unwrap `Promise` → `T` in synchronous type references + * + * Usage: + * node generateSync.ts + */ + +import { readFileSync } from "node:fs"; +import { + join, + relative, +} from "node:path"; +import ts from "typescript"; +import { GeneratedFile } from "../../../tools/scripts/gen/generatedFile.mts"; +import { + formatFilesSync, + parseGeneratorArgs, +} from "../../../tools/scripts/gen/utils.mts"; + +function generatedHeader(asyncSourceRelPath: string): string { + return [ + "//", + "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + "// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!!", + "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + "//", + `// Source: ${asyncSourceRelPath}`, + "// Regenerate: npm run generate (from packages/typescript)", + "//", + "", + ].join("\n"); +} + +const ROOT = join(import.meta.dirname!, ".."); +const SRC = join(ROOT, "src", "api"); +const TEST = join(ROOT, "test"); + +type SourceTransform = (source: string, fileName: string) => string; +type SyncVariant = "sync" | "generators"; + +function generateSyncFile( + srcPath: string, + destPath: string, + transform: SourceTransform, + force: boolean, + variant: SyncVariant = "sync", +): GeneratedFile | undefined { + const generated = new GeneratedFile(destPath, [import.meta.filename, srcPath]); + if (generated.isCurrent(force)) return; + const source = readFileSync(srcPath, "utf-8"); + + // Normalize line endings to LF + const normalized = source.replace(/\r/g, ""); + + // Phase 1: Process sync directives (text-based, operates on comments/lines) + const afterDirectives = processDirectives(normalized.split("\n"), variant).join("\n"); + + // Phase 2: AST-based async→sync transforms + const fileName = destPath.split("/").pop()!; + let result = transform(afterDirectives, fileName); + + // Prepend generated header pointing to async source + const srcRelPath = relative(ROOT, srcPath).replaceAll("\\", "/"); + result = generatedHeader(srcRelPath) + result; + + generated.write(result); + const label = relative(ROOT, srcPath).replaceAll("\\", "/"); + const destLabel = relative(ROOT, destPath).replaceAll("\\", "/"); + console.log(` ${label} → ${destLabel}`); + return generated; +} + +// ── Directive processing ───────────────────────────────────────── + +function processDirectives(lines: string[], variant: SyncVariant): string[] { + const output: string[] = []; + let skipBlock = false; + let syncOnlyBlock = false; + let generatorsOnlyBlock = false; + + for (const line of lines) { + const trimmed = line.trim(); + + if (trimmed === "// @generators-skip-block-start") { + skipBlock = variant === "generators"; + continue; + } + if (trimmed === "// @generators-skip-block-end") { + skipBlock = false; + continue; + } + + // Block-skip markers + if (trimmed === "// @sync-skip-block-start") { + skipBlock = true; + continue; + } + if (trimmed === "// @sync-skip-block-end") { + skipBlock = false; + continue; + } + if (skipBlock) continue; + + if (trimmed === "// @generators-only-start") { + generatorsOnlyBlock = true; + continue; + } + if (trimmed === "// @generators-only-end") { + generatorsOnlyBlock = false; + continue; + } + + if (generatorsOnlyBlock) { + if (variant === "generators") output.push(uncommentLine(line)); + continue; + } + + // Sync-only markers (uncomment block) + if (trimmed === "// @sync-only-start") { + syncOnlyBlock = true; + continue; + } + if (trimmed === "// @sync-only-end") { + syncOnlyBlock = false; + continue; + } + + if (syncOnlyBlock) { + output.push(uncommentLine(line)); + continue; + } + + if (variant === "generators" && line.includes("// @generators-skip")) { + continue; + } + + // Single-line skip + if (line.includes("// @sync-skip")) { + continue; + } + + // Single-line replacement: // @sync: + const generatorsReplaceMatch = line.match(/\/\/ @generators: (.+)$/); + if (variant === "generators" && generatorsReplaceMatch) { + const indent = line.match(/^(\s*)/)![1]; + output.push(indent + generatorsReplaceMatch[1]); + continue; + } + + const lineWithoutGeneratorsDirective = generatorsReplaceMatch + ? line.slice(0, generatorsReplaceMatch.index).trimEnd() + : line; + const syncReplaceMatch = lineWithoutGeneratorsDirective.match(/\/\/ @sync: (.+)$/); + if (syncReplaceMatch) { + const indent = lineWithoutGeneratorsDirective.match(/^(\s*)/)![1]; + output.push(indent + syncReplaceMatch[1]); + continue; + } + + output.push(lineWithoutGeneratorsDirective); + } + + return output; +} + +function uncommentLine(line: string): string { + const indent = line.match(/^(\s*)/)![1]; + const rest = line.slice(indent.length); + if (rest.startsWith("// ")) return indent + rest.slice(3); + if (rest === "//") return indent; + return line; +} + +// ── AST-based transforms ──────────────────────────────────────── + +interface Edit { + start: number; + end: number; + newText: string; +} + +function applyEdits(source: string, edits: Edit[]): string { + edits.sort((a, b) => b.start - a.start); + let result = source; + for (const edit of edits) { + result = result.slice(0, edit.start) + edit.newText + result.slice(edit.end); + } + return result; +} + +type TransformMode = "sync" | "generator"; + +function transformAsyncSource(source: string, fileName: string, attachGenerators: boolean): string { + const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true); + const edits: Edit[] = []; + const asyncMethodNames = new Set(); + const synchronousMethodNames = new Set(); + + for (const classDeclaration of getNamedClasses(sourceFile).values()) { + for (const group of getMethodGroups(classDeclaration).values()) { + const method = group.implementation; + if (isGeneratorMethod(method)) asyncMethodNames.add((method.name as ts.Identifier).text); + else synchronousMethodNames.add((method.name as ts.Identifier).text); + } + } + + visit(sourceFile); + return applyEdits(source, edits); + + function visit(node: ts.Node): void { + if (attachGenerators && ts.isClassDeclaration(node)) { + const replacedMethods = new Set(); + for (const group of getMethodGroups(node).values()) { + if (!isGeneratorMethod(group.implementation)) continue; + for (const declaration of group.declarations) replacedMethods.add(declaration); + edits.push({ + start: group.declarations[0].getStart(sourceFile), + end: group.implementation.end, + newText: createCombinedMethodFromAsync(group, source, sourceFile), + }); + } + for (const member of node.members) { + if (!ts.isMethodDeclaration(member) || !replacedMethods.has(member)) visit(member); + } + return; + } + + if (attachGenerators && ts.isInterfaceDeclaration(node)) { + const replacedSignatures = new Set(); + for (const [name, declarations] of getSignatureGroups(node)) { + if (!declarations.every(declaration => isPromiseType(declaration.type))) continue; + for (const declaration of declarations) replacedSignatures.add(declaration); + const indent = getIndent(source, declarations[0].getStart(sourceFile)); + const syncSignatures = declarations.map(declaration => `${indent} ${createAsyncCallSignature(declaration, "sync")}`).join("\n"); + const generatorSignatures = declarations.map(declaration => `${indent} gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); + edits.push({ + start: declarations[0].getStart(sourceFile), + end: declarations.at(-1)!.end, + newText: `${name}: {\n${syncSignatures}\n${generatorSignatures}\n${indent}};`, + }); + } + for (const member of node.members) { + if (!ts.isMethodSignature(member) || !replacedSignatures.has(member)) visit(member); + } + return; + } + + addSyncEdit(node, source, sourceFile, edits); + ts.forEachChild(node, visit); + } + + function createCombinedMethodFromAsync(group: MethodGroup, source: string, sourceFile: ts.SourceFile): string { + const method = group.implementation; + const name = (method.name as ts.Identifier).text; + const indent = getIndent(source, group.declarations[0].getStart(sourceFile)); + const modifiers = method.modifiers + ?.filter(modifier => modifier.kind !== ts.SyntaxKind.AsyncKeyword) + .map(modifier => source.slice(modifier.getStart(sourceFile), modifier.end)) + .join(" "); + const declarations = getPublicDeclarations(group); + const syncSignatures = declarations.map(declaration => `${indent} ${createAsyncCallSignature(declaration, "sync")}`).join("\n"); + const generatorSignatures = declarations.map(declaration => `${indent} gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); + const body = declarations.length > 1 + ? createAsyncOverloadedGetterBody(name, group, indent) + : `{\n${indent} const owner = this;\n${indent} return cacheGeneratorMethod(\n${indent} owner,\n${indent} "${name}",\n${indent} ${createAsyncFunction(method, "sync", false)},\n${indent} ${createAsyncFunction(method, "generator", true)},\n${indent} );\n${indent}}`; + return `${modifiers ? `${modifiers} ` : ""}get ${name}(): {\n${syncSignatures}\n${generatorSignatures}\n${indent}} ${body}`; + } + + function createAsyncOverloadedGetterBody(name: string, group: MethodGroup, indent: string): string { + const declarations = getPublicDeclarations(group); + const syncOverloads = declarations.map(declaration => `function ${name}${createAsyncCallSignature(declaration, "sync")}`).join("\n"); + const generatorOverloads = declarations.map(declaration => `function gen${createAsyncCallSignature(declaration, "generator")}`).join("\n"); + const syncImplementation = createAsyncNamedFunction(name, group.implementation, "sync", false); + const generatorImplementation = createAsyncNamedFunction("gen", group.implementation, "generator", true); + return `{\n${indent} const owner = this;\n${indent}${indentLines(syncOverloads, `${indent} `)}\n${indent}${indentLines(syncImplementation, `${indent} `)}\n${indent}${indentLines(generatorOverloads, `${indent} `)}\n${indent}${indentLines(generatorImplementation, `${indent} `)}\n${indent} return cacheGeneratorMethod(owner, "${name}", ${name}, gen);\n${indent}}`; + } + + function createAsyncCallSignature(node: ts.SignatureDeclarationBase, mode: TransformMode): string { + return `${getTypeParametersText(node, source, sourceFile)}(${getAsyncSignatureParameters(node, mode)}): ${getAsyncReturnType(node, mode)};`; + } + + function createAsyncFunction(node: ts.MethodDeclaration, mode: TransformMode, generator: boolean): string { + const parameters = node.parameters.map(parameter => transformNodeText(parameter, mode, true)).join(", "); + const body = transformNodeText(node.body!, mode, true); + return `function${generator ? "*" : ""} ${getTypeParametersText(node, source, sourceFile)}(${parameters}): ${getAsyncReturnType(node, mode)} ${body}`; + } + + function createAsyncNamedFunction(name: string, node: ts.MethodDeclaration, mode: TransformMode, generator: boolean): string { + const parameters = node.parameters.map(parameter => transformNodeText(parameter, mode, true)).join(", "); + const body = transformNodeText(node.body!, mode, true); + return `function${generator ? "*" : ""} ${name}${getTypeParametersText(node, source, sourceFile)}(${parameters}): ${getAsyncReturnType(node, mode)} ${body}`; + } + + function getAsyncSignatureParameters(node: ts.SignatureDeclarationBase, mode: TransformMode): string { + return node.parameters.map(parameter => { + const rest = parameter.dotDotDotToken ? "..." : ""; + const name = source.slice(parameter.name.getStart(sourceFile), parameter.name.end); + const optional = parameter.questionToken || parameter.initializer ? "?" : ""; + const type = parameter.type ? transformNodeText(parameter.type, mode, false) : "unknown"; + return `${rest}${name}${optional}: ${type}`; + }).join(", "); + } + + function getAsyncReturnType(node: ts.SignatureDeclarationBase, mode: TransformMode): string { + if (!node.type) return "void"; + if (mode === "generator" && isPromiseType(node.type)) { + const returnType = getUnwrappedPromiseText(node.type, source, sourceFile); + return `Generator`; + } + return transformNodeText(node.type, mode, false); + } + + function transformNodeText(node: ts.Node, mode: TransformMode, replaceThis: boolean): string { + const start = node.getStart(sourceFile); + const localEdits: Edit[] = []; + + function visitNode(current: ts.Node): void { + if (replaceThis && current.kind === ts.SyntaxKind.ThisKeyword) { + localEdits.push({ start: current.getStart(sourceFile) - start, end: current.end - start, newText: "owner" }); + return; + } + if (replaceThis && ts.isBlock(node) && current !== node && ts.isFunctionLike(current) && !ts.isArrowFunction(current)) return; + + if (mode === "sync") { + if (addSyncEdit(current, source, sourceFile, localEdits, start)) return; + } + else if (addGeneratorEdit(current, start, localEdits)) { + return; + } + ts.forEachChild(current, visitNode); + } + + visitNode(node); + return applyEdits(source.slice(start, node.end), localEdits); + } + + function addGeneratorEdit(node: ts.Node, offset: number, targetEdits: Edit[]): boolean { + if (ts.isAwaitExpression(node)) { + const replacement = getGeneratorAwaitText(node); + editsForNode(node, replacement, offset); + return true; + } + if (ts.isCallExpression(node) && isAPIRequestCall(node) && !ts.isAwaitExpression(node.parent)) { + const receiver = node.expression.expression; + if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "client") { + editsForNode(node, getRequestYieldText(node), offset); + return true; + } + } + if ( + ts.isCallExpression(node) && + !ts.isAwaitExpression(node.parent) && + isGeneratorCall(node) + ) { + const generatorCall = `yield* ${getGeneratorCallText(node)}`; + editsForNode(node, ts.isReturnStatement(node.parent) ? generatorCall : `(${generatorCall})`, offset); + return true; + } + if (ts.isTypeReferenceNode(node) && isPromiseType(node)) { + const replacement = isFunctionReturnType(node) + ? `Generator` + : getUnwrappedPromiseText(node, source, sourceFile); + editsForNode(node, replacement, offset); + return true; + } + return false; + + function editsForNode(current: ts.Node, replacement: string, base: number): void { + targetEdits.push({ start: current.getStart(sourceFile) - base, end: current.end - base, newText: replacement }); + } + } + + function getGeneratorAwaitText(node: ts.AwaitExpression): string { + if (isAPIRequestCall(node.expression)) { + const receiver = node.expression.expression.expression; + if (ts.isPropertyAccessExpression(receiver) && receiver.name.text === "client") return getRequestYieldText(node.expression); + return `yield ${getTextWithOwner(node.expression)}`; + } + if ( + ts.isCallExpression(node.expression) && + ts.isPropertyAccessExpression(node.expression.expression) && + ts.isPropertyAccessExpression(node.expression.expression.expression) && + node.expression.expression.expression.name.text === "client" + ) { + return getTextWithOwner(node.expression); + } + if (ts.isCallExpression(node.expression) && ts.isIdentifier(node.expression.expression) && node.expression.expression.text === "cb") { + return `yield* (${getTextWithOwner(node.expression)} ?? [])`; + } + const expression = ts.isCallExpression(node.expression) && ts.isPropertyAccessExpression(node.expression.expression) + ? getGeneratorCallText(node.expression) + : getTextWithOwner(node.expression); + return `(yield* ${expression})`; + } + + function getRequestYieldText(call: ts.CallExpression): string { + const [method, params] = call.arguments; + const methodText = getTextWithOwner(method); + const paramsText = params ? getTextWithOwner(params) : "undefined"; + const request = `yield* apiRequest(${methodText}, ${paramsText})`; + return ts.isPropertyAccessExpression(call.expression) && call.expression.name.text === "apiRequestBinary" + ? `sourceFileResponseToUint8Array((${request}))` + : request; + } + + function getGeneratorCallText(call: ts.CallExpression): string { + const expression = getTextWithOwner(call.expression); + const callText = getTextWithOwner(call); + return `${expression}.gen${callText.slice(expression.length)}`; + } + + function getTextWithOwner(node: ts.Node): string { + const start = node.getStart(sourceFile); + const ownerEdits: Edit[] = []; + + function visitNode(current: ts.Node): void { + if (current.kind === ts.SyntaxKind.ThisKeyword) { + ownerEdits.push({ start: current.getStart(sourceFile) - start, end: current.end - start, newText: "owner" }); + return; + } + if (current !== node && ts.isFunctionLike(current) && !ts.isArrowFunction(current)) return; + ts.forEachChild(current, visitNode); + } + + visitNode(node); + return applyEdits(source.slice(start, node.end), ownerEdits); + } + + function isGeneratorCall(node: ts.Expression): boolean { + if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node)) return isGeneratorCall(node.expression); + if (ts.isConditionalExpression(node)) return isGeneratorCall(node.whenTrue) && isGeneratorCall(node.whenFalse); + const call = getCallExpression(node); + return !!call && + ts.isPropertyAccessExpression(call.expression) && + !(ts.isPropertyAccessExpression(call.expression.expression) && call.expression.expression.name.text === "client") && + !synchronousMethodNames.has(call.expression.name.text) && + asyncMethodNames.has(call.expression.name.text); + } + + function isGeneratorMethod(node: ts.MethodDeclaration): boolean { + return !!node.body && (node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword) || isPromiseType(node.type)); + } + + function isPromiseType(node: ts.TypeNode | undefined): node is ts.TypeReferenceNode { + return !!node && + ts.isTypeReferenceNode(node) && + ts.isIdentifier(node.typeName) && + node.typeName.text === "Promise" && + node.typeArguments?.length === 1; + } + + function isAPIRequestCall(node: ts.Expression): node is ts.CallExpression & { expression: ts.PropertyAccessExpression; } { + return ts.isCallExpression(node) + && ts.isPropertyAccessExpression(node.expression) + && (node.expression.name.text === "apiRequest" || node.expression.name.text === "apiRequestBinary"); + } + + function getCallExpression(node: ts.Expression): ts.CallExpression | undefined { + while (ts.isAsExpression(node) || ts.isParenthesizedExpression(node)) node = node.expression; + return ts.isCallExpression(node) ? node : undefined; + } + + function isFunctionReturnType(node: ts.TypeNode): boolean { + let current: ts.Node = node; + while (ts.isTypeNode(current.parent)) { + if ((ts.isFunctionTypeNode(current.parent) || ts.isConstructorTypeNode(current.parent)) && current.parent.type === current) return true; + current = current.parent; + } + return ts.isFunctionLike(current.parent) && current.parent.type === current; + } +} + +function addSyncEdit(node: ts.Node, source: string, sourceFile: ts.SourceFile, edits: Edit[], offset: number = 0): boolean { + if ( + (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isArrowFunction(node) || ts.isFunctionExpression(node)) && + node.modifiers + ) { + for (const modifier of node.modifiers) { + if (modifier.kind !== ts.SyntaxKind.AsyncKeyword) continue; + let end = modifier.end; + while (end < source.length && source[end] === " ") end++; + edits.push({ start: modifier.getStart(sourceFile) - offset, end: end - offset, newText: "" }); + } + } + if (ts.isVariableDeclarationList(node) && (node.flags & ts.NodeFlags.AwaitUsing) === ts.NodeFlags.AwaitUsing) { + const awaitKeyword = node.getFirstToken(sourceFile); + if (awaitKeyword?.kind !== ts.SyntaxKind.AwaitKeyword) throw new Error("Expected await using declaration"); + edits.push({ start: awaitKeyword.getStart(sourceFile) - offset, end: awaitKeyword.end - offset, newText: "" }); + } + if (ts.isAwaitExpression(node)) { + edits.push({ + start: node.getStart(sourceFile) - offset, + end: node.expression.getStart(sourceFile) - offset, + newText: "", + }); + } + if (isPromiseTypeReference(node)) { + const innerText = getUnwrappedPromiseText(node, source, sourceFile); + if (ts.isUnionTypeNode(node.parent)) { + const unionTypes = node.parent.types; + const currentIndex = unionTypes.indexOf(node); + const representativeIndex = unionTypes.findIndex(type => getUnwrappedTypeText(type, source, sourceFile) === innerText); + if (representativeIndex !== currentIndex) { + if (currentIndex < representativeIndex) { + edits.push({ + start: node.getStart(sourceFile) - offset, + end: unionTypes[currentIndex + 1].getStart(sourceFile) - offset, + newText: "", + }); + } + else { + edits.push({ + start: unionTypes[currentIndex - 1].end - offset, + end: node.end - offset, + newText: "", + }); + } + return true; + } + } + edits.push({ start: node.getStart(sourceFile) - offset, end: node.end - offset, newText: innerText }); + return true; + } + return false; +} + +function isPromiseTypeReference(node: ts.Node | undefined): node is ts.TypeReferenceNode { + return !!node && + ts.isTypeReferenceNode(node) && + ts.isIdentifier(node.typeName) && + node.typeName.text === "Promise" && + node.typeArguments?.length === 1; +} + +function getUnwrappedPromiseText(node: ts.TypeNode, source: string, sourceFile: ts.SourceFile): string { + let current = node; + while (isPromiseTypeReference(current)) current = current.typeArguments![0]; + return source.slice(current.getStart(sourceFile), current.end); +} + +function getUnwrappedTypeText(node: ts.TypeNode, source: string, sourceFile: ts.SourceFile): string { + return isPromiseTypeReference(node) ? getUnwrappedPromiseText(node, source, sourceFile) : source.slice(node.getStart(sourceFile), node.end); +} + +interface MethodGroup { + declarations: readonly ts.MethodDeclaration[]; + implementation: ts.MethodDeclaration; +} + +function getNamedClasses(sourceFile: ts.SourceFile): Map { + const classes = new Map(); + for (const statement of sourceFile.statements) { + if (ts.isClassDeclaration(statement) && statement.name) classes.set(statement.name.text, statement); + } + return classes; +} + +function getMethodGroups(node: ts.ClassDeclaration): Map { + const groups = new Map(); + for (let index = 0; index < node.members.length; index++) { + const member = node.members[index]; + if (!ts.isMethodDeclaration(member) || !ts.isIdentifier(member.name)) continue; + + const declarations = [member]; + while (index + 1 < node.members.length) { + const nextMember = node.members[index + 1]; + if (!ts.isMethodDeclaration(nextMember) || !ts.isIdentifier(nextMember.name) || nextMember.name.text !== member.name.text) break; + declarations.push(nextMember); + index++; + } + const implementation = declarations.findLast(declaration => declaration.body); + if (!implementation) continue; + groups.set(getMethodKey(implementation), { declarations, implementation }); + } + return groups; +} + +function getSignatureGroups(node: ts.InterfaceDeclaration): Map { + const groups = new Map(); + for (const member of node.members) { + if (!ts.isMethodSignature(member) || !ts.isIdentifier(member.name)) continue; + const declarations = groups.get(member.name.text) ?? []; + declarations.push(member); + groups.set(member.name.text, declarations); + } + return groups; +} + +function getMethodKey(node: ts.MethodDeclaration): string { + return `${node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.StaticKeyword) ? "static:" : ""}${(node.name as ts.Identifier).text}`; +} + +function getPublicDeclarations(group: MethodGroup): readonly ts.MethodDeclaration[] { + const overloads = group.declarations.filter(declaration => !declaration.body); + return overloads.length ? overloads : [group.implementation]; +} + +function indentLines(text: string, indent: string): string { + return text.replaceAll("\n", `\n${indent}`); +} + +function getTypeParametersText(node: ts.SignatureDeclarationBase, source: string, sourceFile: ts.SourceFile): string { + if (!node.typeParameters?.length) return ""; + return `<${node.typeParameters.map(typeParameter => source.slice(typeParameter.getStart(sourceFile), typeParameter.end)).join(", ")}>`; +} + +function getIndent(source: string, position: number): string { + const lineStart = source.lastIndexOf("\n", position - 1) + 1; + return source.slice(lineStart, position); +} + +// ── Formatting ─────────────────────────────────────────────────── + +// ── Main ───────────────────────────────────────────────────────── + +export function generateSync(force = false): void { + console.log("Generating sync API from async source..."); + const generatedFiles: (GeneratedFile | undefined)[] = []; + + // Source files + for (const relPath of ["types.ts", "api.ts"]) { + generatedFiles.push(generateSyncFile( + join(SRC, "async", relPath), + join(SRC, "sync", relPath), + relPath === "api.ts" + ? (source, fileName) => + [ + 'import type { APIRequest as ProtocolRequest, APIResponse as ProtocolResponse } from "../proto.ts";', + 'import { apiRequest, cacheGeneratorMethod } from "./generatorSupport.ts";', + "", + transformAsyncSource(source, fileName, true), + ].join("\n") + : (source, fileName) => + [ + 'import type { APIRequest as ProtocolRequest, APIResponse as ProtocolResponse } from "../proto.ts";', + "", + transformAsyncSource(source, fileName, true), + ].join("\n"), + force, + )); + } + + // Test files + for (const relPath of ["api.test.ts", "api.bench.ts", "astnav.test.ts"]) { + generatedFiles.push(generateSyncFile( + join(TEST, "async", relPath), + join(TEST, "sync", relPath), + (source, fileName) => transformAsyncSource(source, fileName, false), + force, + )); + } + + generatedFiles.push(generateSyncFile( + join(TEST, "async", "api.bench.ts"), + join(TEST, "generators", "api.bench.ts"), + (source, fileName) => transformAsyncSource(source, fileName, false), + force, + "generators", + )); + + const changedFiles = generatedFiles.filter(file => file !== undefined); + if (!changedFiles.length) { + console.log("Sync API is up to date."); + return; + } + console.log("Formatting..."); + formatFilesSync(changedFiles.map(file => file.fileName)); + for (const file of changedFiles) file.markCurrent(); + console.log("Done."); +} + +if (process.argv[1] === import.meta.filename) { + generateSync(parseGeneratorArgs({}).force); +} diff --git a/packages/typescript/src/api/async/api.ts b/packages/typescript/src/api/async/api.ts index cf2b483f0e9c6..c04a4284501b5 100644 --- a/packages/typescript/src/api/async/api.ts +++ b/packages/typescript/src/api/async/api.ts @@ -1,3993 +1,3993 @@ -import { CheckFlags } from "#enums/checkFlags"; -import { CompletionItemKind } from "#enums/completionItemKind"; -import { DiagnosticCategory } from "#enums/diagnosticCategory"; -import { ElementFlags } from "#enums/elementFlags"; -import { EmitOnly } from "#enums/emitOnly"; -import { IndexKind } from "#enums/indexKind"; -import { JsxEmit } from "#enums/jsxEmit"; -import { ModuleKind } from "#enums/moduleKind"; -import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -import { NewLineKind } from "#enums/newLineKind"; -import { NodeBuilderFlags } from "#enums/nodeBuilderFlags"; -import { ObjectFlags } from "#enums/objectFlags"; -import { ScriptKind } from "#enums/scriptKind"; -import { SignatureFlags } from "#enums/signatureFlags"; -import { SignatureKind } from "#enums/signatureKind"; -import { SymbolFlags } from "#enums/symbolFlags"; -import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; -import { TypeFlags } from "#enums/typeFlags"; -import { TypeFormatFlags } from "#enums/typeFormatFlags"; -import { TypePredicateKind } from "#enums/typePredicateKind"; -import { - type __String, - type CallLikeExpression, - type Declaration, - type Expression, - type FileReference, - type Identifier, - type IndexSignatureDeclaration, - ModifierFlags, - type NamedTupleMember, - type Node, - type ParameterDeclaration, - type PathKey, - type RootedDirectoryPath, - type RootedFilePath, - type SourceFile, - type StringLiteralLikeNode, - type SyntaxKind, - type TypeNode, - unescapeLeadingUnderscores, -} from "../../ast/index.ts"; -import { assertNever } from "../../internal/utils.ts"; -import { - encodeNode, - uint8ArrayToBase64, -} from "../node/encoder.ts"; -import { - decodeNode, - getNodeId, - parseNodeHandleFromCompiler, - readParseOptionsKey, - readSourceFileHash, - readSourceFileLease, - RemoteNode, - RemoteSourceFile, -} from "../node/node.ts"; -import { Wtf8Decoder } from "../node/wtf8.ts"; -import type { - APIOptions, - LSPConnectionOptions, -} from "../options.ts"; -import { - canonicalize, - CaseSensitivity, - pathKey, - toRootedDirectoryPath, - toRootedPath, -} from "../path.ts"; -import { prepareCompilerOptions } from "../prepareCompilerOptions.generated.ts"; -import type { - BuildResponse, - CleanBuildResponse, - CompactSymbolReference, - CompilerOptions, - CompletionPreferences, - ConfiguredProjectId, - CreateBuildOrchestratorResponse, - CreateProgramOptions as ProtocolCreateProgramOptions, - CreateSnapshotParams as ProtocolCreateSnapshotParams, - CreateSnapshotProgramParams as ProtocolCreateSnapshotProgramParams, - CreateSnapshotResponse, - CreateSourceFileOptions, - Diagnostic, - DiagnosticResponse, - DocumentIdentifier, - DocumentPosition, - EmitOutputResponse as ProtocolEmitOutputResponse, - FileNotifications, - ImportAdderAction, - InferredProjectId, - IntrinsicTypeMethod, - LanguageServerSnapshotChanges as ProtocolLanguageServerSnapshotChanges, - ModuleResolutionEntry, - ModuleResolutionSpec, - PackageId, - ParsedCommandLine, - ProjectId, - ProjectReference, - ProjectResponse, - ProtocolSymbolResponse, - RawCompilerOptions, - ReadConfigFileResponse, - ReconfigureSnapshotProgramParams as ProtocolReconfigureSnapshotProgramParams, - ResolutionMode, - ResolvedModule, - ResolvedTypeReferenceDirective, - ResolveModuleNameResult, - SignaturePropertyMethod, - SignatureResponse, - SourceFileDescriptor, - SourceFileMetadata, - StaticModuleResolution, - SymbolPropertyMethod, - SymbolReference, - SymbolResponse, - SymbolsPropertyMethod, - SyntheticProjectId, - TextEdit, - TypeAcquisition, - TypePropertyMethod, - TypeResponse, - TypesPropertyMethod, - UserPreferences, -} from "../proto.ts"; -import { - resolveFileName, - toCreateSnapshotRequest, - validateSymbolResponse, -} from "../proto.ts"; -import { - type CachedSourceFile, - SourceFileCache, -} from "../sourceFileCache.ts"; -import type { - RequestTiming, - TimingAccumulators, - TimingCollector, - TimingInfo, -} from "../timing.ts"; -import { - Client, - type ClientSocketOptions, - type ClientSpawnOptions, -} from "./client.ts"; -import type { - AssertsIdentifierTypePredicate, - AssertsThisTypePredicate, - BigIntLiteralType, - BooleanLiteralType, - CompletionEntry, - CompletionInfo, - CompletionOptions, - ConditionalType, - EmitOutput, - EmitOutputFile, - EmitResult, - FormatDiagnosticsHost, - FreshableType, - GenericType, - GetImportEditsForSymbolsOptions, - IdentifierTypePredicate, - ImportAdderAction as APIImportAdderAction, - IndexedAccessType, - IndexInfo, - IndexType, - InterfaceType, - IntersectionType, - IntrinsicType, - JSDocTagInfo, - LiteralType, - MappedType, - NumberLiteralType, - ObjectType, - StringLiteralType, - StringMappingType, - StructuredType, - SubstitutionType, - TemplateLiteralType, - ThisTypePredicate, - TupleType, - TupleTypeReference, - Type, - TypeParameter, - TypePredicate, - TypePredicateBase, - TypeReference, - UnionOrIntersectionType, - UnionType, -} from "./types.ts"; - -export { formatDiagnostics, formatDiagnosticsWithColorAndContext } from "../diagnosticFormatter.ts"; -export { documentURIToFileName, fileNameToDocumentURI } from "../path.ts"; -export { CheckFlags, CompletionItemKind, DiagnosticCategory, ElementFlags, EmitOnly, IndexKind, JsxEmit, ModifierFlags, ModuleKind, ModuleResolutionKind, NodeBuilderFlags, ObjectFlags, ScriptKind, SignatureFlags, SignatureKind, SymbolFlags, SymbolOwnerKind, TypeFlags, TypeFormatFlags, TypePredicateKind }; -export type { - APIImportAdderAction as ImportAdderAction, - APIOptions, - AssertsIdentifierTypePredicate, - AssertsThisTypePredicate, - BigIntLiteralType, - BooleanLiteralType, - ClientSocketOptions, - ClientSpawnOptions, - CompilerOptions, - CompletionEntry, - CompletionInfo, - CompletionOptions, - CompletionPreferences, - ConditionalType, - ConfiguredProjectId, - CreateSourceFileOptions, - Diagnostic, - DocumentIdentifier, - DocumentPosition, - EmitOutput, - EmitOutputFile, - EmitResult, - FileNotifications, - FormatDiagnosticsHost, - FreshableType, - GenericType, - GetImportEditsForSymbolsOptions, - IdentifierTypePredicate, - IndexedAccessType, - IndexInfo, - IndexType, - InferredProjectId, - InterfaceType, - IntersectionType, - IntrinsicType, - JSDocTagInfo, - LiteralType, - LSPConnectionOptions, - MappedType, - ModuleResolutionEntry, - ModuleResolutionSpec, - NumberLiteralType, - ObjectType, - PackageId, - ParsedCommandLine, - ProjectId, - ProjectReference, - RawCompilerOptions, - ReadConfigFileResponse, - RequestTiming, - ResolutionMode, - ResolvedModule, - ResolvedTypeReferenceDirective, - ResolveModuleNameResult, - SourceFileMetadata, - StaticModuleResolution, - StringLiteralType, - StringMappingType, - StructuredType, - SubstitutionType, - SyntheticProjectId, - TemplateLiteralType, - TextEdit, - ThisTypePredicate, - TimingAccumulators, - TimingInfo, - TupleType, - TupleTypeReference, - Type, - TypeAcquisition, - TypeParameter, - TypePredicate, - TypePredicateBase, - TypeReference, - UnionOrIntersectionType, - UnionType, - UserPreferences, -}; - -export interface ModuleResolverOptions { - moduleResolutions?: ModuleResolutionSpec | undefined; - resolveModuleName?: ResolveModuleNameCallback | undefined; -} - -export interface ResolveModuleNameCallbackOptions { - snapshot: Snapshot | InProgressSnapshot | undefined; -} - -declare const inProgressSnapshotBrand: unique symbol; -export type InProgressSnapshot = number & { readonly [inProgressSnapshotBrand]: never; }; - -export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined | Promise; // @sync: export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined; - -export type CreateProgramOptions = Omit & { - moduleResolver?: ModuleResolver | undefined; - projectReferences?: readonly (Omit & { path: string; })[] | undefined; -}; -export type CreateSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; -export type ReconfigureSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; -export type CreateSnapshotParams = Omit & { - createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; - reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; -}; -export type LanguageServerSnapshotChanges = Omit & { - createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; - reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; -}; - -let nextModuleResolutionCallbackId = 0; -function registerModuleResolutionCallback(client: Client, callback: ResolveModuleNameCallback, getSnapshot: (id: number) => Snapshot | undefined): { name: string; dispose: () => void; } { - const name = `resolveModuleName/${++nextModuleResolutionCallbackId}`; - const dispose = client.registerCallback(name, params => { - const { moduleName, containingDirectory, resolutionMode, snapshot: snapshotId, inProgressSnapshot } = params as { - moduleName: string; - containingDirectory: string; - resolutionMode?: ResolutionMode; - snapshot?: number; - inProgressSnapshot?: number; - }; - let snapshot: Snapshot | InProgressSnapshot | undefined = snapshotId === undefined ? undefined : getSnapshot(snapshotId); - if (snapshotId !== undefined && snapshot === undefined) { - throw new Error(`Snapshot ${snapshotId} is inactive`); - } - if (inProgressSnapshot !== undefined) { - snapshot = -inProgressSnapshot as InProgressSnapshot; - } - return callback( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - ); - }); - return { name, dispose }; -} - -export interface TranspileOptions { - compilerOptions?: RawCompilerOptions | undefined; - fileName?: string | undefined; - reportDiagnostics?: boolean | undefined; -} - -export interface TranspileOutput { - outputText: string; - diagnostics?: readonly Diagnostic[] | undefined; - sourceMapText?: string | undefined; -} - -// @sync-only-start -// export { all, defer, type APIRequestGenerator, type AnyAPIRequestGenerator, type AllAPIRequestGenerator, type DeferredAPIRequestGenerator, type ExecutedGeneratorsResults } from "./generatorSupport.ts"; -// import {executeRequestGenerators, type ExecutedGeneratorsResults, type AnyAPIRequestGenerator} from "./generatorSupport.ts"; -// import { sourceFileResponseToUint8Array } from "../node/encoder.ts"; -// @sync-only-end - -export class API implements FormatDiagnosticsHost { - /** @internal */ - readonly client: Client; - /** @internal */ - readonly sourceFileCache: SourceFileCache; - private toPath: ((fileName: string, basePath?: string) => PathKey) | undefined; - private readonly decoder = new Wtf8Decoder(); - private currentDirectory: RootedDirectoryPath | undefined; - private caseSensitivity: CaseSensitivity | undefined; - private initialized: boolean = false; - private initializing: Promise | undefined; - private activeSnapshots: Map = new Map(); - private activeBuildOrchestrators: Set = new Set(); - private activeSourceFileLeases: Map = new Map(); - readonly printer: Printer; - readonly internal: InternalAPI; - - constructor(options: APIOptions | LSPConnectionOptions = {}) { - this.client = new Client(options); - this.sourceFileCache = new SourceFileCache(); - this.printer = new Printer(this.client); - this.internal = new InternalAPI(this.client, () => this.ensureInitialized()); // @sync: this.internal = new InternalAPI(this.client, this.ensureInitialized); - } - - /** - * Looks up a remote declaration's binder symbol. Throws for synthesized or configuration ASTs. - */ - async getSymbol(declaration: Declaration): Promise { - const file = getRemoteSourceFile(declaration); - if (!file) throw new Error(`Source file not found for declaration`); - const record = file.symbolCache as CachedSourceFile | undefined; - if (!record) throw new Error(`Cached source file not found for declaration`); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - const cached = record.symbolsByDeclarationNodeIndex.get(index); - if (cached) return cached; - // @sync-only-start - // return this.fetchDeclarationSymbol(record, index); - // @sync-only-end - // @sync-skip-block-start - let request = record.declarationSymbolRequests.get(index); - if (!request) { - request = this.fetchDeclarationSymbol(record, index); - record.declarationSymbolRequests.set(index, request); - } - try { - return await request; - } - finally { - record.declarationSymbolRequests.delete(index); - } - // @sync-skip-block-end - } - - private async fetchDeclarationSymbol(record: CachedSourceFile, index: number): Promise { - const data = await this.client.apiRequest("getSymbolOfDeclaration", { - file: record.descriptor, - index, - }); - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.File) { - throw new Error(`Symbol ${reference.id} is not file-owned`); - } - const fileOwner: SourceFileOwner = { record, api: this }; - const symbol = this.sourceFileCache.getOrCreateSymbol( - record, - reference.file, - reference.id, - () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), - ); - record.symbolsByDeclarationNodeIndex.set(index, symbol); - return symbol; - } - - /** - * Create an API instance from an existing LSP connection's API session. - * Use this when connecting to an API pipe provided by an LSP server via custom/initializeAPISession. - */ - static async fromLSPConnection(options: LSPConnectionOptions): Promise> { - const api = new API(options); - await api.ensureInitialized(); - return api; - } - - // @sync-skip-block-start - batchContext(): { [globalThis.Symbol.dispose](): void; } { - return this.client.batchContext(); - } - // @sync-skip-block-end - // @sync-only-start - // batch(...requestGenerators: T): ExecutedGeneratorsResults { - // return executeRequestGenerators(requestGenerators, requests => this.client.batchRequests(requests).responses); - // } - // @sync-only-end - - private async ensureInitialized(): Promise { - if (this.initialized) return; - return this.initializing ??= this.initializeWorker(); - } - - private async initializeWorker(): Promise { - try { - const response = await this.client.apiRequest("initialize", null); - this.currentDirectory = response.currentDirectory; - this.caseSensitivity = response.caseSensitivity; - this.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); - this.initialized = true; - } - catch (error) { - this.initializing = undefined; - throw error; - } - } - - getCurrentDirectory(): RootedDirectoryPath { - if (this.currentDirectory === undefined) { - throw new Error("API has not been initialized"); - } - return this.currentDirectory; - } - - getCanonicalFileName(fileName: string): string { - return canonicalize(fileName, this.getCaseSensitivity()); - } - - private getCaseSensitivity(): CaseSensitivity { - if (this.caseSensitivity === undefined) { - throw new Error("API has not been initialized"); - } - return this.caseSensitivity; - } - - getNewLine(): string { - return "\n"; - } - - async createBuildOrchestrator(rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Promise { - await this.ensureInitialized(); - const orchestratorResponse = await this.client.apiRequest("createBuildOrchestrator", { - ...buildOrchestratorOptions, - ...buildOrchestratorOptions.overrideCompilerOptions, - cwd: buildOrchestratorOptions.cwd === undefined - ? undefined - : toRootedDirectoryPath(buildOrchestratorOptions.cwd, this.getCurrentDirectory()), - rootNames, - }); - - const orchestrator = new BuildOrchestrator(this.client, orchestratorResponse, () => { - this.activeBuildOrchestrators.delete(orchestrator); - }); - this.activeBuildOrchestrators.add(orchestrator); - return orchestrator; - } - - async parseConfigFile(file: DocumentIdentifier): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("parseConfigFile", { file }); - } - - async parseCommandLine(commandLine: readonly string[]): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("parseCommandLine", { commandLine }); - } - - async readConfigFile(file: DocumentIdentifier): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("readConfigFile", { file }); - } - - async parseJsonConfigFileContent( - json: any, - options: - | { configDirectory: string; configFileName?: never; } - | { configFileName: DocumentIdentifier; configDirectory?: never; }, - ): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("parseJsonConfigFileContent", { json, ...options }); - } - - /** - * Create and retain a source file independently of a program. - * Dispose the returned lease when the source file no longer needs to remain available remotely. - */ - async createSourceFile(fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): Promise { - await this.ensureInitialized(); - const data = await this.client.apiRequestBinary("createSourceFile", { fileName, sourceText, options }); - if (!data) { - throw new Error("createSourceFile returned no source file"); - } - return this.retainSourceFileResponse(data); - } - - /** - * Read, create, and retain a source file independently of a program. - * Dispose the returned lease when the source file no longer needs to remain available remotely. - */ - async createSourceFileFromFile(file: DocumentIdentifier, options: CreateSourceFileOptions = {}): Promise { - await this.ensureInitialized(); - const data = await this.client.apiRequestBinary("createSourceFileFromFile", { fileName: resolveFileName(file), options }); - if (!data) { - throw new Error("createSourceFileFromFile returned no source file"); - } - return this.retainSourceFileResponse(data); - } - - /** - * Retain an ordinary remote source file independently of the snapshot or lease that produced it. - */ - async retainSourceFile(sourceFile: SourceFile): Promise { - await this.ensureInitialized(); - if (!(sourceFile instanceof RemoteSourceFile)) { - throw new TypeError("Only remote source files can be retained"); - } - const cached = this.sourceFileCache.get(sourceFile); - if (cached && cached !== sourceFile) { - throw new Error("Source file is no longer the canonical cached instance"); - } - const result = await this.client.apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); - return this.addSourceFileLease(sourceFile, result.lease); - } - - private retainSourceFileResponse(data: Uint8Array): RetainedSourceFile { - const view = new DataView(data.buffer, data.byteOffset, data.byteLength); - const lease = readSourceFileLease(view); - try { - const decoded = new RemoteSourceFile(data, this.decoder, this.client.getTimingCollector(), this); - return this.addSourceFileLease(decoded, lease); - } - catch (error) { - // @sync-skip-block-start - void this.client.apiRequest("releaseSourceFile", { lease }).catch(() => {}); - // @sync-skip-block-end - // @sync-only-start - // try { - // this.client.apiRequest("releaseSourceFile", { lease }); - // } - // catch {} - // @sync-only-end - throw error; - } - } - - private addSourceFileLease(sourceFile: RemoteSourceFile, lease: number): RetainedSourceFile { - const cached = this.sourceFileCache.setForLease(sourceFile, lease); - const retained = new RetainedSourceFile(cached as unknown as SourceFile, lease, () => { - this.activeSourceFileLeases.delete(lease); - this.sourceFileCache.releaseLease(lease); - }); - this.activeSourceFileLeases.set(lease, retained); - return retained; - } - - async transpileModule(input: string, options: TranspileOptions = {}): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("transpileModule", { input, options }); - } - - async transpileModuleFromFile(file: DocumentIdentifier, options: TranspileOptions = {}): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); - } - - async transpileDeclaration(input: string, options: TranspileOptions = {}): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("transpileDeclaration", { input, options }); - } - - async transpileDeclarationFromFile(file: DocumentIdentifier, options: TranspileOptions = {}): Promise { - await this.ensureInitialized(); - return this.client.apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); - } - - createSnapshot< - const CreatePrograms extends CreateSnapshotParams["createPrograms"] = undefined, - const OpenFiles extends CreateSnapshotParams["openFiles"] = undefined, - >(params: SnapshotOperationParams): Promise>; - createSnapshot(): Promise; - async createSnapshot(params?: CreateSnapshotParams): Promise { - await this.ensureInitialized(); - - const requestParams = toCreateSnapshotRequest(this.prepareCreateSnapshotParams(params)); - const data = await this.client.apiRequest("createSnapshot", requestParams); - - const snapshot = new Snapshot( - data, - this.toPath!, - this, - () => { - this.activeSnapshots.delete(snapshot.id); - this.sourceFileCache.releaseSnapshot(snapshot.id); - }, - this.createSnapshotUpdater(() => snapshot), - undefined, - ); - this.activeSnapshots.set(snapshot.id, snapshot); - - return snapshot; - } - - private async updateSnapshot(baseSnapshot: Snapshot, params: CreateSnapshotParams): Promise { - await this.ensureInitialized(); - if (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot update an inactive snapshot"); - } - - const data = await this.client.apiRequest("updateSnapshot", { - snapshot: baseSnapshot.id, - changes: toCreateSnapshotRequest(this.prepareCreateSnapshotParams(params)), - }); - if (data.snapshot === baseSnapshot.id) { - await this.client.apiRequest("release", { snapshot: data.snapshot }); - return baseSnapshot; - } - this.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - const snapshot = new Snapshot( - data, - this.toPath!, - this, - () => { - this.activeSnapshots.delete(snapshot.id); - this.sourceFileCache.releaseSnapshot(snapshot.id); - }, - this.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - this.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - } - - private prepareCreateSnapshotParams(params: CreateSnapshotParams | undefined): ProtocolCreateSnapshotParams | undefined { - if (!params) return undefined; - const prepareOptions = (options: CreateProgramOptions | undefined): ProtocolCreateProgramOptions | undefined => { - if (!options) return undefined; - const { moduleResolver, projectReferences, ...rest } = options; - moduleResolver?.ensureNotDisposed(); - return { - ...rest, - moduleResolver: moduleResolver?.id, - projectReferences: projectReferences?.map(reference => ({ - ...reference, - path: toRootedPath(reference.path, this.getCurrentDirectory()), - })), - }; - }; - return { - ...params, - createPrograms: params.createPrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), - reconfigurePrograms: params.reconfigurePrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), - }; - } - - private prepareLanguageServerSnapshotChanges(changes: LanguageServerSnapshotChanges | undefined): ProtocolLanguageServerSnapshotChanges | undefined { - if (!changes) return undefined; - const prepared = this.prepareCreateSnapshotParams(changes); - return prepared; - } - - private createSnapshotUpdater(getSnapshot: () => Snapshot): SnapshotUpdater { - const update: SnapshotUpdater = params => this.updateSnapshot(getSnapshot(), params); // @sync: const update = ((params: CreateSnapshotParams) => this.updateSnapshot(getSnapshot(), params)) as SnapshotUpdater; - // @sync-only-start - // const owner = this; - // update.gen = function* (params: CreateSnapshotParams) { return yield* owner.updateSnapshot.gen(getSnapshot(), params); }; - // @sync-only-end - return update; - } - - /** - * Returns the language server's current canonical snapshot after atomically - * adopting any supplied API-driven changes. Only available on LSP-connected APIs. - */ - getCurrentLanguageServerSnapshot< - const CreatePrograms extends LanguageServerSnapshotChanges["createPrograms"] = undefined, - const OpenFiles extends LanguageServerSnapshotChanges["openFiles"] = undefined, - >( - ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] - : [changes: never, baseSnapshot?: never] - ): Promise>; - getCurrentLanguageServerSnapshot( - ...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never] - ): Promise; - async getCurrentLanguageServerSnapshot( - ...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never] - ): Promise { - await this.ensureInitialized(); - - const changes = args[0] as LanguageServerSnapshotChanges | undefined; - const baseSnapshot = args[1] as Snapshot | undefined; - if (baseSnapshot && (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { - throw new Error("Cannot use an inactive snapshot as a response base"); - } - const data = await this.client.apiRequest("getCurrentLanguageServerSnapshot", { - baseSnapshot: baseSnapshot?.id, - changes: this.prepareLanguageServerSnapshotChanges(changes), - }); - if (baseSnapshot) { - this.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - } - const snapshot = new Snapshot( - data, - this.toPath!, - this, - () => { - this.activeSnapshots.delete(snapshot.id); - this.sourceFileCache.releaseSnapshot(snapshot.id); - }, - this.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - this.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - } - - async [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { - await this.close(); // @sync: this.close(); - } - - async close(): Promise { - await this.initializing?.catch(() => {}); // @sync-skip - try { - for (const retained of [...this.activeSourceFileLeases.values()]) { - await retained.dispose(); - } - } - finally { - try { - for (const orchestrator of [...this.activeBuildOrchestrators]) { - await orchestrator.dispose(); - } - for (const snapshot of [...this.activeSnapshots.values()]) { - await snapshot.dispose(); - } - this.sourceFileCache.clear(); - } - finally { - await this.client.close(); // always close the underlying connection - } - } - } - - async createModuleResolver(compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Promise { - await this.ensureInitialized(); - const callback = options?.resolveModuleName - ? registerModuleResolutionCallback(this.client, options.resolveModuleName, id => this.activeSnapshots.get(id)) - : undefined; - try { - const id = await this.client.apiRequest("createModuleResolver", { - compilerOptions: prepareCompilerOptions(compilerOptions, this.getCurrentDirectory()), - moduleResolutions: options?.moduleResolutions, - resolveModuleNameCallback: callback?.name, - }); - return new ModuleResolver(id, this.client, callback?.dispose); - } - catch (error) { - callback?.dispose(); - throw error; - } - } - - clearSourceFileCache(): void { - this.sourceFileCache.clear(); - } - - async runWithTemporaryFileUpdate(baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Promise): Promise { - await this.ensureInitialized(); - - if (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot run a temporary file update on an inactive snapshot"); - } - const snapshot = await baseSnapshot.update({ - fileSystem: { - kind: "layer", - files: { [resolveFileName(file)]: newText }, - }, - ensurePrograms: true, - }); - - try { - await cb(snapshot); - } - finally { - await snapshot.dispose(); - } - } - - /** - * Returns a snapshot of collected timing information for requests made - * through this API instance: client-measured round-trip latency and bytes - * transferred, folded together with the server's own per-request processing - * time and an estimated transport overhead (round-trip minus server time). - * - * Fetching the snapshot issues a lightweight request to the server to - * retrieve its timing collection. Collection must be enabled via the - * `collectTiming` option; when it is not, the returned snapshot has - * `enabled: false` and zeroed totals. - */ - getTimingInfo(): Promise { - return this.client.getTimingInfo(); - } - - /** Clears all accumulated timing totals and recent-request history, on both the client and the server. */ - resetTimingInfo(): Promise { - return this.client.resetTimingInfo(); - } - - /** Creates a program from current filesystem state. */ - async createProgram( - rootFiles: readonly DocumentIdentifier[], - compilerOptions: RawCompilerOptions, - createProgramOptions?: CreateProgramOptions, - ): Promise { - await this.ensureInitialized(); - - const snapshot = await this.createSnapshot({ - createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], - }); - const program = snapshot.operation.createdPrograms![0]; - if (!program) { - await snapshot.dispose(); - throw new Error("createProgram did not return a project"); - } - program.setOwnedSnapshot(snapshot); - return program; - } -} - -type EnsureInitialized = () => Promise; // @sync: type EnsureInitialized = (() => void) & { gen(): Generator; }; - -function sourceFileDescriptor(sourceFile: RemoteSourceFile): SourceFileDescriptor { - return { - fileName: sourceFile.fileName, - path: sourceFile.path, - contentHash: sourceFile.contentHash, - parseOptionsKey: sourceFile.parseOptionsKey, - scriptKind: sourceFile.scriptKind, - nodeId: sourceFile.nodeId, - }; -} - -function getRemoteSourceFile(node: Node): RemoteSourceFile | undefined { - if (!(node instanceof RemoteNode)) return undefined; - const file = node.getSourceFile(); - return file instanceof RemoteSourceFile && file.api ? file : undefined; -} - -function getNodeAPI(node: Node): API | undefined { - const api = getRemoteSourceFile(node)?.api; - if (!api) return undefined; - if (!(api instanceof API)) throw new Error("Source file does not belong to the async API"); // @sync: if (!(api instanceof API)) throw new Error("Source file does not belong to the sync API"); - return api; -} - -/** Looks up a remote declaration's binder symbol through its API. Throws for non-remote declarations. */ -export async function getSymbol(declaration: Declaration): Promise { - const api = getNodeAPI(declaration); - if (!api) throw new Error("Source file not found for declaration"); - return api.getSymbol(declaration); -} - -// @sync-only-start -// export declare namespace getSymbol { -// function gen(declaration: Declaration): Generator; -// } -// getSymbol.gen = function* (declaration: Declaration): Generator { -// const api = getNodeAPI(declaration); -// if (!api) throw new Error("Source file not found for declaration"); -// return yield* api.getSymbol.gen(declaration); -// }; -// @sync-only-end - -/** An independently retained source file and its disposable remote-lifetime lease. */ -export class RetainedSourceFile { - readonly sourceFile: SourceFile; - private readonly lease: number; - private readonly onDispose: () => void; - private disposed = false; - private disposePromise: Promise | undefined; - - constructor(sourceFile: SourceFile, lease: number, onDispose: () => void) { - this.sourceFile = sourceFile; - this.lease = lease; - this.onDispose = onDispose; - } - - [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { - return this.dispose(); // @sync: this.dispose(); - } - - dispose(): Promise { - return this.disposePromise ??= this.disposeWorker(); - } - - private async disposeWorker(): Promise { - if (this.disposed) return; - const api = getNodeAPI(this.sourceFile); - if (!api) throw new Error("Retained source file has no owning API"); - this.disposed = true; - try { - await api.client.apiRequest("releaseSourceFile", { lease: this.lease }); - } - finally { - this.onDispose(); - } - } -} - -export class InternalAPI { - private client: Client; - private ensureInitialized: EnsureInitialized; - - /** @internal */ - constructor(client: Client, ensureInitialized: EnsureInitialized) { - this.client = client; - this.ensureInitialized = ensureInitialized; - } - - async startCPUProfile(dir: string): Promise { - await this.ensureInitialized(); - await this.client.apiRequest("startCPUProfile", { dir }); - } - - async stopCPUProfile(): Promise { - await this.ensureInitialized(); - const result = await this.client.apiRequest("stopCPUProfile", null); - return result.file; - } - - async saveHeapProfile(dir: string): Promise { - await this.ensureInitialized(); - const result = await this.client.apiRequest("saveHeapProfile", { dir }); - return result.file; - } -} - -type SnapshotUpdater = (params: CreateSnapshotParams) => Promise; // @sync: type SnapshotUpdater = ((params: CreateSnapshotParams) => Snapshot) & { gen(params: CreateSnapshotParams): Generator; }; - -export interface SnapshotOperation { - readonly createdPrograms?: readonly Program[] | undefined; - readonly openedFiles?: readonly SnapshotOpenedFileOperation[] | undefined; -} - -export interface SnapshotOpenedFileOperation { - readonly project: Project; -} - -/** Replaces every element of a tuple while preserving its length and index structure. */ -type MapTupleTo = { - readonly [Index in keyof Tuple]: Result; -}; - -/** - * Keeps `Tuple` as an inference target while contextually typing each element from - * `Elements`. The mapped intersection supplies nested completions and excess-property - * checks without widening an inferred tuple to an array. - */ -type ContextualizeTuple< - Tuple extends readonly unknown[] | undefined, - Elements extends readonly unknown[] | undefined, -> = - & Tuple - & { - readonly [Index in keyof Tuple]: NonNullable[number]; - }; - -/** Substitutes the operation arrays with contextually typed, tuple-preserving versions. */ -type SnapshotOperationParams< - Params extends { createPrograms?: readonly unknown[] | undefined; openFiles?: readonly unknown[] | undefined; }, - CreatePrograms extends Params["createPrograms"], - OpenFiles extends Params["openFiles"], -> = Omit & { - createPrograms?: ContextualizeTuple | undefined; - openFiles?: ContextualizeTuple | undefined; -}; - -/** - * Refines a snapshot's operation results to required tuples when the corresponding - * operation arrays were supplied, preserving their lengths for indexed access. - */ -type SnapshotForOperationResults< - CreatePrograms extends readonly unknown[] | undefined, - OpenFiles extends readonly unknown[] | undefined, -> = Snapshot & { - readonly operation: - & SnapshotOperation - & (CreatePrograms extends readonly unknown[] ? { readonly createdPrograms: MapTupleTo>; } : unknown) - & (OpenFiles extends readonly unknown[] ? { readonly openedFiles: MapTupleTo; } : unknown); -}; - -/** Derives the refined snapshot result type from a complete operation parameter type. */ -export type SnapshotForOperation = SnapshotForOperationResults< - Params extends { createPrograms: infer CreatePrograms extends readonly unknown[]; } ? CreatePrograms : undefined, - Params extends { openFiles: infer OpenFiles extends readonly unknown[]; } ? OpenFiles : undefined ->; - -export class Snapshot { - readonly id: number; - readonly operation: SnapshotOperation; - private projectMap: Map; - private toPath: (fileName: string, basePath?: string) => PathKey; - private readonly api: API; - private disposed: boolean = false; - private disposePromise: Promise | undefined; - private onDispose: () => void; - private snapshotRegistry: SnapshotObjectRegistry; - private projectDataMap: Map; - private updateSnapshot: SnapshotUpdater; - readonly internal: SnapshotInternalAPI; - - private get client(): Client { - return this.api.client; - } - - constructor(data: CreateSnapshotResponse, toPath: (fileName: string, basePath?: string) => PathKey, api: API, onDispose: () => void, updateSnapshot: SnapshotUpdater, baseSnapshot?: Snapshot) { - this.id = data.snapshot; - this.api = api; - this.toPath = toPath; - this.onDispose = onDispose; - this.updateSnapshot = updateSnapshot; - this.projectMap = new Map(); - const projectDataMap = new Map(baseSnapshot?.projectDataMap); - for (const projectId of data.changes?.removedProjects ?? []) { - projectDataMap.delete(projectId); - } - for (const projectData of data.projects) { - projectDataMap.set(projectData.id, projectData); - } - this.projectDataMap = new Map([...projectDataMap].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)); - this.snapshotRegistry = new SnapshotObjectRegistry(this.id); - - for (const projData of this.projectDataMap.values()) { - const project = new Project(projData, this.id, toPath, api, this.snapshotRegistry); - this.projectMap.set(projData.id, project); - } - - this.operation = { - createdPrograms: data.operation.createdPrograms?.map(projectId => this.requireProject(projectId).program), - openedFiles: data.operation.openedFiles?.map(result => ({ project: this.requireProject(result.project) })), - }; - - this.internal = new SnapshotInternalAPI(this.id, api.client); - } - - getProjects(): readonly Project[] { - this.ensureNotDisposed(); - return [...this.projectMap.values()]; - } - - getConfiguredProject(configFileName: string): Project | undefined { - this.ensureNotDisposed(); - const id = this.toPath(configFileName) as ConfiguredProjectId; - return this.projectMap.get(id) as Project | undefined; - } - - getProject(projectId: Id): Project | undefined { - this.ensureNotDisposed(); - return this.projectMap.get(projectId) as Project | undefined; - } - - getProgram(projectId: Id): Program | undefined { - return this.getProject(projectId)?.program; - } - - update< - const CreatePrograms extends CreateSnapshotParams["createPrograms"] = undefined, - const OpenFiles extends CreateSnapshotParams["openFiles"] = undefined, - >(params: SnapshotOperationParams): Promise>; - update(params: CreateSnapshotParams): Promise; - update(params: CreateSnapshotParams): Promise { - this.ensureNotDisposed(); - return this.updateSnapshot(params); - } - - /** - * Gets the default project for a given file from the configured projects and - * inferred project already loaded in the snapshot. Synthetic projects are not - * considered. Files that have been opened with `openFiles` are guaranteed to - * have a result. - */ - async getDefaultProjectForFile(file: DocumentIdentifier): Promise { - this.ensureNotDisposed(); - const data = await this.client.apiRequest("getDefaultProjectForFile", { - snapshot: this.id, - file, - }); - if (!data) return undefined; - return this.projectMap.get(data.id); - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - dispose(): Promise { - return this.disposePromise ??= this.disposeWorker(); - } - - private async disposeWorker(): Promise { - if (this.disposed) return; - this.disposed = true; - for (const project of this.projectMap.values()) { - project.dispose(); - } - this.projectMap.clear(); - this.snapshotRegistry.clear(); - try { - await this.client.apiRequest("release", { snapshot: this.id }); - } - finally { - this.onDispose(); - } - } - - isDisposed(): boolean { - return this.disposed; - } - - private ensureNotDisposed(): void { - if (this.disposed) { - throw new Error("Snapshot is disposed"); - } - } - - private requireProject(projectId: Id): Project { - const project = this.projectMap.get(projectId); - if (!project) { - throw new Error(`Snapshot operation returned unknown project '${projectId}'`); - } - return project as Project; - } -} - -export class ModuleResolver { - readonly id: number; - private readonly client: Client; - private readonly disposeCallback: (() => void) | undefined; - private disposed = false; - - constructor(id: number, client: Client, disposeCallback: (() => void) | undefined) { - this.id = id; - this.client = client; - this.disposeCallback = disposeCallback; - } - - async resolveModuleName( - moduleName: string, - containingDirectory: DocumentIdentifier, - resolutionMode?: ResolutionMode, - options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }, - ): Promise { - this.ensureNotDisposed(); - if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { - throw new Error("Snapshot is disposed"); - } - return this.client.apiRequest("resolveModuleName", { - snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, - inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, - resolver: this.id, - moduleName, - containingDirectory, - resolutionMode, - }); - } - - [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { - return this.dispose(); - } - - async dispose(): Promise { - if (this.disposed) return; - await this.client.apiRequest("releaseModuleResolver", { resolver: this.id }); - this.disposed = true; - this.disposeCallback?.(); - } - - /** @internal */ - ensureNotDisposed(): void { - if (this.disposed) throw new Error("ModuleResolver is disposed"); - } -} - -class SnapshotObjectRegistry { - private readonly symbols: Map = new Map(); - private readonly projectRegistries: Map = new Map(); - private readonly snapshotId: number; - - constructor(snapshotId: number) { - this.snapshotId = snapshotId; - } - - addProjectRegistry(registry: ProjectObjectRegistry): void { - this.projectRegistries.set(registry.project.id, registry); - } - - getOrCreateSymbol(data: SymbolResponse): Symbol { - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.Snapshot) throw new Error(`Symbol ${reference.id} is not snapshot-owned`); - let symbol = this.symbols.get(reference.id); - if (!symbol) { - if (reference.snapshot !== this.snapshotId) { - throw new Error(`Symbol ${reference.id} belongs to snapshot ${reference.snapshot}, not ${this.snapshotId}`); - } - const registry = this.projectRegistries.get(reference.project); - if (!registry) throw new Error(`Symbol ${reference.id} references unknown project '${reference.project}'`); - symbol = new Symbol(data, { kind: SymbolOwnerKind.Snapshot, registry }); - this.symbols.set(reference.id, symbol); - } - return symbol; - } - - getSymbol(id: number): Symbol | undefined { - return this.symbols.get(id); - } - - clear(): void { - this.symbols.clear(); - } -} - -class ProjectObjectRegistry { - private snapshotId: number; - readonly project: Project; - private snapshotRegistry: SnapshotObjectRegistry; - private types: Map = new Map(); - private signatures: Map = new Map(); - private disposed = false; - - private get client(): Client { - return this.project.api.client; - } - - private get sourceFileCache(): SourceFileCache { - return this.project.api.sourceFileCache; - } - - constructor(snapshotId: number, project: Project, snapshotRegistry: SnapshotObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.snapshotRegistry = snapshotRegistry; - snapshotRegistry.addProjectRegistry(this); - } - - getOrCreateSymbol(data: ProtocolSymbolResponse): Symbol { - this.ensureNotDisposed(); - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind === SymbolOwnerKind.Snapshot) { - return this.snapshotRegistry.getOrCreateSymbol(data); - } - const record = this.sourceFileCache.getOrCreateRecord(reference.file, this.snapshotId, this.project.id); - return this.sourceFileCache.getOrCreateSymbol(record, reference.file, reference.id, () => - new Symbol(data, { - kind: SymbolOwnerKind.File, - owner: { record, api: this.project.api }, - })); - } - - /** Find an already-interned symbol and retain its file record for this registry. */ - getCachedSymbol(reference: CompactSymbolReference): Symbol | undefined { - this.ensureNotDisposed(); - if (reference.file === undefined) { - return this.snapshotRegistry.getSymbol(reference.id); - } - const record = this.sourceFileCache.findRecord(reference.file); - const symbol = record?.symbolsById.get(reference.id); - if (record && symbol) { - this.sourceFileCache.retainRecord(record, this.snapshotId, this.project.id); - } - return symbol; - } - - getOrCreateType(data: TypeResponse): TypeObject { - let type = this.types.get(data.id); - if (!type) { - type = new TypeObject(data, this); - this.types.set(data.id, type); - } - return type; - } - - getType(id: number): TypeObject | undefined { - return this.types.get(id); - } - - createNodeHandle(handle: string): NodeHandle { - return new NodeHandle(handle, this.project); - } - - getOrCreateSignature(data: SignatureResponse): Signature { - let sig = this.signatures.get(data.id); - if (!sig) { - sig = new Signature(data, this.project, this); - this.signatures.set(data.id, sig); - } - return sig; - } - - getSignature(id: number): Signature | undefined { - return this.signatures.get(id); - } - - clear(): void { - this.disposed = true; - this.types.clear(); - this.signatures.clear(); - } - - private ensureNotDisposed(): void { - if (this.disposed) throw new Error("Project object registry is disposed"); - } - - async fetchOptionalType(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Promise { - if (handle !== false) { - if (!handle) return undefined; - const cached = this.getType(handle); - if (cached) return cached as unknown as T; - } - - const data = await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - if (!data) return undefined; - return this.getOrCreateType(data) as unknown as T; - } - - async fetchType(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Promise { - const result = await this.fetchOptionalType(source, method, handle); - if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); - return result; - } - - async fetchSymbol(source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Promise { - if (!reference) return undefined as unknown as Symbol; - const cached = this.getCachedSymbol(reference); - if (cached) return cached; - const data = source instanceof Symbol - ? await this.client.apiRequest(method, { symbol: source.reference }) - : await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); - return this.getOrCreateSymbol(data); - } - - async fetchSignature(source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Promise { - if (!handle) return undefined as unknown as Signature; - const cached = this.getSignature(handle); - if (cached) return cached; - - const data = await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); - return this.getOrCreateSignature(data); - } - - async fetchTypes(source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Promise { - if (handles) { - const result = new Array(handles.length); - let allCached = true; - for (let i = 0; i < handles.length; i++) { - const cached = this.getType(handles[i]); - if (!cached) { - allCached = false; - break; - } - result[i] = cached; - } - if (allCached) return result; - } - const typesData = await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - if (typesData == null) return []; - else return typesData.map(data => this.getOrCreateType(data)); - } - - async fetchSymbols(source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Promise { - if (references) { - const result = new Array(references.length); - for (let i = 0; i < references.length; i++) { - const cached = this.getCachedSymbol(references[i]); - if (!cached) { - return this.fetchSymbolsFromServer(source, method); - } - result[i] = cached; - } - return result; - } - return this.fetchSymbolsFromServer(source, method); - } - - private async fetchSymbolsFromServer(source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Promise { - const data = source instanceof Symbol - ? await this.client.apiRequest(method, { symbol: source.reference }) - : await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - return data?.map(symbol => this.getOrCreateSymbol(symbol)) ?? []; - } - - // getBaseTypes is a checker-level endpoint keyed by `type` (not `objectId`), - // so it cannot go through fetchTypes. This helper reuses that server method. - async fetchBaseTypes(source: Type): Promise { - const typesData = await this.client.apiRequest("getBaseTypes", { - snapshot: this.snapshotId, - project: this.project.id, - type: source.id, - }); - if (typesData == null) return []; - return typesData.map(data => this.getOrCreateType(data)); - } - - async fetchPropertiesOfType(source: Type): Promise { - const data = await this.client.apiRequest("getPropertiesOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: source.id, - }); - return data ? data.map(symbol => this.getOrCreateSymbol(symbol)) : []; - } - - async fetchApparentPropertiesOfType(source: Type): Promise { - const data = await this.client.apiRequest("getApparentPropertiesOfType", { - snapshot: this.snapshotId, - project: this.project.id, - objectId: source.id, - }); - return data ? data.map(symbol => this.getOrCreateSymbol(symbol)) : []; - } - - async fetchPropertyOfType(source: Type, name: string): Promise { - const data = await this.client.apiRequest("getPropertyOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: source.id, - name, - }); - return data ? this.getOrCreateSymbol(data) : undefined; - } - - async fetchSignaturesOfType(source: Type, kind: SignatureKind): Promise { - const data = await this.client.apiRequest("getSignaturesOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: source.id, - kind, - }); - return data.map(signature => this.getOrCreateSignature(signature)); - } - - async fetchIndexInfosOfType(source: Type): Promise { - const data = await this.client.apiRequest("getIndexInfosOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: source.id, - }); - if (!data) return []; - return data.map(info => ({ - keyType: this.getOrCreateType(info.keyType), - valueType: this.getOrCreateType(info.valueType), - isReadonly: info.isReadonly ?? false, - declaration: info.declaration ? new NodeHandle(info.declaration, this.project) : undefined, - })); - } - - async fetchTypeParameterAtPosition(source: Signature, pos: number): Promise { - const data = await this.client.apiRequest("getTypeParameterAtPosition", { - snapshot: this.snapshotId, - project: this.project.id, - signature: source.id, - index: pos, - }); - return this.getOrCreateType(data); - } -} - -export class Project { - /** @internal */ - readonly api: API; - readonly id: Id; - readonly configFileName: RootedFilePath | undefined; - readonly currentDirectory: RootedDirectoryPath; - readonly dirty: boolean; - readonly parsedCommandLine: ParsedCommandLine; - /** @deprecated Use `parsedCommandLine.options`. */ - readonly compilerOptions: CompilerOptions; - /** @deprecated Use `parsedCommandLine.fileNames`. */ - readonly rootFiles: readonly RootedFilePath[]; - - readonly program: Program; - readonly checker: Checker; - readonly languageService: LanguageService; - private snapshotId: number; - - constructor(data: ProjectResponse, snapshotId: number, toPath: (fileName: string, basePath?: string) => PathKey, api: API, snapshotRegistry: SnapshotObjectRegistry) { - this.id = data.id as Id; - this.api = api; - this.configFileName = data.configFileName; - this.currentDirectory = data.currentDirectory; - this.dirty = data.dirty; - if (!data.parsedCommandLine?.options) { - throw new Error(`Project '${data.configFileName}' has no parsed command line`); - } - this.parsedCommandLine = data.parsedCommandLine; - this.compilerOptions = this.parsedCommandLine.options; - this.rootFiles = this.parsedCommandLine.fileNames; - this.snapshotId = snapshotId; - this.program = new Program(snapshotId, this, toPath); - const objectRegistry = new ProjectObjectRegistry(snapshotId, this, snapshotRegistry); - this.checker = new Checker(snapshotId, this, objectRegistry); - this.languageService = new LanguageService(snapshotId, this, objectRegistry); - } - - /** @deprecated Use `languageService.getImportAdderEdits`. */ - getImportAdderEdits(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Promise { - return this.languageService.getImportAdderEdits(file, actions); - } - - /** @deprecated Use `languageService.getImportEditsForSymbols`. */ - getImportEditsForSymbols(file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Promise { - return this.languageService.getImportEditsForSymbols(file, symbols, options); - } - - dispose(): void { - this.checker.dispose(); - } -} - -export class LanguageService { - private snapshotId: number; - private project: Project; - private objectRegistry: ProjectObjectRegistry; - - private get client(): Client { - return this.project.api.client; - } - - constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.objectRegistry = objectRegistry; - } - - async getImportAdderEdits(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Promise { - const requestActions: ImportAdderAction[] = actions.map(action => { - switch (action.kind) { - case "importSymbol": - const importSymbolAction: ImportAdderAction = { - kind: "importSymbol", - symbol: action.symbol.reference, - }; - if (action.isValidTypeOnlyUseSite !== undefined) { - importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; - } - return importSymbolAction; - default: - return assertNever(action.kind); - } - }); - - const data = await this.client.apiRequest("getImportAdderEdits", { - snapshot: this.snapshotId, - project: this.project.id, - file, - actions: requestActions, - }); - return data ?? []; - } - - async getImportEditsForSymbols(file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Promise { - return this.getImportAdderEdits( - file, - symbols.map((symbol): APIImportAdderAction => { - if (options.isValidTypeOnlyUseSite !== undefined) { - return { - kind: "importSymbol", - symbol, - isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, - }; - } - return { - kind: "importSymbol", - symbol, - }; - }), - ); - } - - async getReferencedSymbolsForNode(node: Node, position: number): Promise { - const data = await this.client.apiRequest("getReferencedSymbolsForNode", { - snapshot: this.snapshotId, - project: this.project.id, - node: getNodeId(node), - position, - }); - return (data ?? []).map(entry => ({ - definition: new NodeHandle(entry.definition, this.project), - symbol: entry.symbol ? this.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, - references: (entry.references ?? []).map(h => new NodeHandle(h, this.project)), - })); - } - - async getSignatureUsage(signatureDecl: Node): Promise { - const data = await this.client.apiRequest("getSignatureUsages", { - snapshot: this.snapshotId, - project: this.project.id, - signatureDecl: getNodeId(signatureDecl), - }); - return (data ?? []).map(entry => ({ - name: new NodeHandle(entry.name, this.project), - call: entry.call ? new NodeHandle(entry.call, this.project) : undefined, - })); - } - - async getCompletionsAtPosition(document: string, position: number, options?: CompletionOptions): Promise { - const data = await this.client.apiRequest("getCompletionsAtPosition", { - snapshot: this.snapshotId, - project: this.project.id, - file: document, - position, - triggerCharacter: options?.triggerCharacter, - includeSymbol: options?.includeSymbol, - }); - if (!data) return undefined; - return { - isIncomplete: data.isIncomplete, - entries: data.entries.map(e => ({ - ...e, - symbol: e.symbol ? this.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, - })), - }; - } -} - -export class Program implements FormatDiagnosticsHost { - /** @internal */ - readonly snapshotId: number; - readonly id: Id; - private readonly project: Project; - private readonly toPath: (fileName: string, basePath?: string) => PathKey; - private readonly decoder = new Wtf8Decoder(); - private readonly sourceFileMetadataCache = new Map>(); - private ownedSnapshot: Snapshot | undefined; - private disposePromise: Promise | undefined; - - private get client(): Client { - return this.project.api.client; - } - - private get sourceFileCache(): SourceFileCache { - return this.project.api.sourceFileCache; - } - - constructor(snapshotId: number, project: Project, toPath: (fileName: string, basePath?: string) => PathKey) { - this.snapshotId = snapshotId; - this.id = project.id; - this.project = project; - this.toPath = toPath; - } - - getCurrentDirectory(): RootedDirectoryPath { - return this.project.currentDirectory; - } - - getCanonicalFileName(fileName: string): string { - return this.project.api.getCanonicalFileName(fileName); - } - - getNewLine(): string { - return this.project.compilerOptions.newLine === NewLineKind.CRLF ? "\r\n" : "\n"; - } - - /** @internal */ - setOwnedSnapshot(snapshot: Snapshot): void { - this.ownedSnapshot = snapshot; - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - - dispose(): Promise { - return this.disposePromise ??= this.disposeWorker(); - } - - private async disposeWorker(): Promise { - const snapshot = this.ownedSnapshot; - this.ownedSnapshot = undefined; - if (snapshot) await snapshot.dispose(); - } - - getCompilerOptions(): CompilerOptions { - return this.project.compilerOptions; - } - - async getSourceFile(file: DocumentIdentifier): Promise { - const fileName = resolveFileName(file); - const path = this.pathKeyForFileName(fileName); - return this.getSourceFileWorker(file, path); - } - - /** - * Returns the source file for an already-canonical path. - * - * @internal - */ - getSourceFileByPath(path: PathKey): Promise { - // The wire format is a string, but the cache key remains the supplied - // PathKey and is never treated as a RootedPath. - return this.getSourceFileWorker(path, path); - } - - private async getSourceFileWorker(file: DocumentIdentifier, path: PathKey): Promise { - // Check if we already have a retained cache entry for this (snapshot, project) pair - const retained = this.sourceFileCache.getRetained(path, this.snapshotId, this.project.id); - if (retained) { - return retained as unknown as SourceFile; - } - - // Fetch from server - const binaryData = await this.client.apiRequestBinary("getSourceFile", { - snapshot: this.snapshotId, - project: this.project.id, - file, - }); - if (!binaryData) { - return undefined; - } - - // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) - const decoded = new RemoteSourceFile(binaryData, this.decoder, this.client.getTimingCollector(), this.project.api); - return this.sourceFileCache.set(decoded, this.snapshotId, this.project.id) as unknown as SourceFile; - } - - async getResolvedModule( - file: DocumentIdentifier, - moduleName: string, - mode: ModuleKind, - ): Promise { - const result = await this.client.apiRequest("getResolvedModule", { - snapshot: this.snapshotId, - project: this.project.id, - file, - moduleName, - mode, - }); - return result ?? undefined; - } - - async getModeForUsageLocation(file: DocumentIdentifier, usage: StringLiteralLikeNode): Promise { - return this.client.apiRequest("getModeForUsageLocation", { - snapshot: this.snapshotId, - project: this.project.id, - file, - usage: getNodeId(usage), - }); - } - - async getModeForResolutionAtIndex(file: DocumentIdentifier, index: number): Promise { - return this.client.apiRequest("getModeForResolutionAtIndex", { - snapshot: this.snapshotId, - project: this.project.id, - file, - index, - }); - } - - async getResolvedModuleFromModuleSpecifier( - moduleSpecifier: StringLiteralLikeNode, - sourceFile?: DocumentIdentifier, - ): Promise { - const result = await this.client.apiRequest("getResolvedModuleFromModuleSpecifier", { - snapshot: this.snapshotId, - project: this.project.id, - moduleSpecifier: getNodeId(moduleSpecifier), - sourceFile, - }); - return result ?? undefined; - } - - async getResolvedTypeReferenceDirective( - file: DocumentIdentifier, - typeDirectiveName: string, - mode: ModuleKind, - ): Promise { - const result = await this.client.apiRequest("getResolvedTypeReferenceDirective", { - snapshot: this.snapshotId, - project: this.project.id, - file, - typeDirectiveName, - mode, - }); - return result ?? undefined; - } - - async getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( - typeReferenceDirective: FileReference, - sourceFile: DocumentIdentifier, - ): Promise { - const result = await this.client.apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { - snapshot: this.snapshotId, - project: this.project.id, - sourceFile, - typeDirectiveName: typeReferenceDirective.fileName, - resolutionMode: typeReferenceDirective.resolutionMode, - }); - return result ?? undefined; - } - - async getSourceFileNames(): Promise { - const data = await this.client.apiRequest("getSourceFileNames", { - snapshot: this.snapshotId, - project: this.project.id, - }); - return data ?? []; - } - - /** - * Returns program-stored metadata for the given source file, or `undefined` if the file - * is not part of the program. Metadata is fetched lazily per file and cached on this - * `Program` instance. - */ - getSourceFileMetadata(file: DocumentIdentifier): Promise { - return this.getSourceFileMetadataByPath(this.pathKeyForFileName(resolveFileName(file))); - } - - /** - * Returns program-stored metadata for the source file at the given path, or `undefined` - * if the file is not part of the program. Like {@link getSourceFileMetadata}, but skips - * the file name to path conversion. Metadata is fetched lazily per file and cached on - * this `Program` instance. - */ - getSourceFileMetadataByPath(path: PathKey): Promise { - let metadata = this.sourceFileMetadataCache.get(path); - if (metadata === undefined) { - metadata = this.fetchSourceFileMetadata(path); - this.sourceFileMetadataCache.set(path, metadata); - } - return metadata; - } - - private async fetchSourceFileMetadata(path: PathKey): Promise { - // PathKey is serialized as a string; the server deliberately treats all - // client-provided path text as untrusted input. - const data = await this.client.apiRequest("getSourceFileMetadata", { - snapshot: this.snapshotId, - project: this.project.id, - file: path, - }); - return data ?? undefined; - } - - private pathKeyForFileName(fileName: string): PathKey { - return this.toPath(fileName, this.project.currentDirectory); - } - - /** - * Returns whether the given source file was loaded as part of an external library - * (e.g. a dependency resolved from `node_modules`). The underlying program metadata is - * fetched lazily per file and cached on this `Program` instance. - */ - async isSourceFileFromExternalLibrary(file: SourceFile): Promise { - const metadata = await this.getSourceFileMetadataByPath(file.path); - return metadata?.isFromExternalLibrary ?? false; - } - - /** - * Returns whether the given source file is a default library file (e.g. `lib.d.ts`). - * The underlying program metadata is fetched lazily per file and cached on this - * `Program` instance. - */ - async isSourceFileDefaultLibrary(file: SourceFile): Promise { - const metadata = await this.getSourceFileMetadataByPath(file.path); - return metadata?.isDefaultLibrary ?? false; - } - - /** - * Get all config source file names associated with this program's project config. - * Includes the root config file and any extended config files. - */ - async getConfigFileNames(): Promise { - const data = await this.client.apiRequest("getConfigFileNames", { - snapshot: this.snapshotId, - project: this.project.id, - }); - return data ?? []; - } - - /** - * Get a config source file by file name/URI. - * This can return the project's root tsconfig file or one of its extended config files. - */ - async getConfigSourceFile(file: DocumentIdentifier): Promise { - const binaryData = await this.client.apiRequestBinary("getConfigSourceFile", { - snapshot: this.snapshotId, - project: this.project.id, - file, - }); - if (!binaryData) { - return undefined; - } - - return new RemoteSourceFile(binaryData, this.decoder, undefined, this.project.api) as unknown as SourceFile; - } - - /** - * Get syntactic (parse) diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - async getSyntacticDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = await this.client.apiRequest("getSyntacticDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return data ?? []; - } - - /** - * Get binder diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - async getBindDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = await this.client.apiRequest("getBindDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return data ?? []; - } - - /** - * Get semantic (type-check) diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - async getSemanticDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = await this.client.apiRequest("getSemanticDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return data ?? []; - } - - /** - * Get suggestion diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - async getSuggestionDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = await this.client.apiRequest("getSuggestionDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return data ?? []; - } - - /** - * Get declaration emit diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - async getDeclarationDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = await this.client.apiRequest("getDeclarationDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return data ?? []; - } - - /** - * Get program-wide diagnostics for the project, including compiler options diagnostics. - */ - async getProgramDiagnostics(): Promise { - const data = await this.client.apiRequest("getProgramDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - }); - return data ?? []; - } - - /** - * Get global (non-file-specific) semantic diagnostics for the project. - */ - async getGlobalDiagnostics(): Promise { - const data = await this.client.apiRequest("getGlobalDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - }); - return data ?? []; - } - - /** - * Get config file parsing diagnostics for the project. - */ - async getConfigFileParsingDiagnostics(): Promise { - const data = await this.client.apiRequest("getConfigFileParsingDiagnostics", { - snapshot: this.snapshotId, - project: this.project.id, - }); - return data ?? []; - } - - /** - * Emits files to the configured filesystem. Layer and host filesystems are - * written through; full filesystems remain immutable and return emitted - * files in {@link EmitResult.fileSystem}. - */ - async emit(emitOnly?: EmitOnly): Promise { - const response = await this.client.apiRequest("emit", { - snapshot: this.snapshotId, - project: this.project.id, - emitOnly, - }); - const fileSystem = response.emittedFilesContents.length - ? { - kind: "layer" as const, - files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), - } - : undefined; - return { - emitSkipped: response.emitSkipped, - diagnostics: response.diagnostics, - emittedFiles: response.emittedFiles, - fileSystem, - }; - } - - /** - * Emits files and returns their contents without writing to the filesystem. - */ - async emitToString(emitOnly?: EmitOnly): Promise { - const response = await this.client.apiRequest("emitToString", { - snapshot: this.snapshotId, - project: this.project.id, - emitOnly, - }); - return toEmitOutput(response); - } - - /** - * Gets JavaScript output for selected files regardless of project `noEmit`, `emitDeclarationOnly`, and `noEmitOnError` settings. - */ - async getJavaScriptEmit(files: readonly DocumentIdentifier[]): Promise { - const response = await this.client.apiRequest("getJavaScriptEmit", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return toEmitOutput(response); - } - - /** - * Gets declaration output for selected files regardless of project `noEmit`, `declaration`, `emitDeclarationOnly`, and `noEmitOnError` settings. - */ - async getDeclarationEmit(files: readonly DocumentIdentifier[]): Promise { - const response = await this.client.apiRequest("getDeclarationEmit", { - snapshot: this.snapshotId, - project: this.project.id, - files, - }); - return toEmitOutput(response); - } - - getProject(): Project { - return this.project; - } -} - -export interface BuildOrchestratorOptions { - cwd?: string | undefined; - dry?: boolean; - force?: boolean; - verbose?: boolean; - stopBuildOnErrors?: boolean; - overrideCompilerOptions?: OverrideCompilerOptions; -} - -export interface OverrideCompilerOptions { - incremental?: boolean; - assumeChangesOnlyAffectDirectDependencies?: boolean; - declaration?: boolean; - declarationMap?: boolean; - emitDeclarationOnly?: boolean; - sourceMap?: boolean; - inlineSourceMap?: boolean; - traceResolution?: boolean; -} - -export class BuildOrchestrator { - private client: Client; - private id: number; - private disposed = false; - private disposePromise: Promise | undefined; - private onDispose: () => void; - - constructor( - client: Client, - orchestratorResponse: CreateBuildOrchestratorResponse, - onDispose: () => void, - ) { - this.client = client; - this.id = orchestratorResponse.buildOrchestratorID; - this.onDispose = onDispose; - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - dispose(): Promise { - return this.disposePromise ??= this.disposeWorker(); - } - - private async disposeWorker(): Promise { - if (this.disposed) return; - this.disposed = true; - try { - await this.client.apiRequest("disposeBuildOrchestrator", { - buildOrchestratorID: this.id, - }); - } - finally { - this.onDispose(); - } - } - - async build(project?: string): Promise { - this.ensureNotDisposed(); - const response = await this.client.apiRequest("build", { - buildOrchestratorID: this.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - } - async buildReferences(project: string): Promise { - this.ensureNotDisposed(); - const response = await this.client.apiRequest("buildReferences", { - buildOrchestratorID: this.id, - project, - }); - return response; - } - async clean(project?: string): Promise { - this.ensureNotDisposed(); - const response = await this.client.apiRequest("cleanBuild", { - buildOrchestratorID: this.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - } - async cleanReferences(project?: string): Promise { - this.ensureNotDisposed(); - const response = await this.client.apiRequest("cleanReferences", { - buildOrchestratorID: this.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - } - - isDisposed(): boolean { - return this.disposed; - } - - private ensureNotDisposed(): void { - if (this.disposed) { - throw new Error("Build orchestrator is disposed"); - } - } -} - -function toEmitOutput(response: ProtocolEmitOutputResponse): EmitOutput { - const outputFiles = new Map(); - for (const { fileName, ...outputFile } of response.outputFiles) { - outputFiles.set(fileName, outputFile); - } - return { - emitSkipped: response.emitSkipped, - diagnostics: response.diagnostics, - outputFiles, - }; -} - -export class Checker { - private snapshotId: number; - private project: Project; - private objectRegistry: ProjectObjectRegistry; - private wellKnownSymbols: Promise<{ unknown: number; undefined: number; arguments: number; }> | undefined; - private wellKnownSignatures: Promise<{ unknown: number; }> | undefined; - - private get client(): Client { - return this.project.api.client; - } - - constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.objectRegistry = objectRegistry; - } - - dispose(): void { - this.objectRegistry.clear(); - } - - /** Get the merged symbol, or the original symbol if it has not been merged. */ - async getMergedSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getMergedSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateSymbol(data); - } - - /** - * Get a node's merged symbol. For a declaration, prefer - * {@link Checker.getSymbolOfDeclaration} for a non-nullable result. - */ - async getSymbolOfNode(node: Node): Promise { - const data = await this.client.apiRequest("getSymbolOfNode", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** Get a declaration's merged symbol. */ - async getSymbolOfDeclaration(node: Declaration): Promise { - const data = await this.client.apiRequest("getSymbolOfDeclarationForChecker", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - // Declarations normally have symbols, but preserve unexpected null results at runtime. - return (data && this.objectRegistry.getOrCreateSymbol(data))!; - } - - /** Get a symbol's merged parent, if any. */ - async getParentOfSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getParentOfSymbolForChecker", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - getSymbolAtLocation(node: Node): Promise; - getSymbolAtLocation(nodes: readonly Node[]): Promise<(Symbol | undefined)[]>; - async getSymbolAtLocation(nodeOrNodes: Node | readonly Node[]): Promise { - if (Array.isArray(nodeOrNodes)) { - const data = await this.client.apiRequest("getSymbolsAtLocations", { - snapshot: this.snapshotId, - project: this.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = await this.client.apiRequest("getSymbolAtLocation", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - getSymbolAtPosition(file: DocumentIdentifier, position: number): Promise; - getSymbolAtPosition(file: DocumentIdentifier, positions: readonly number[]): Promise<(Symbol | undefined)[]>; - async getSymbolAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Promise { - if (typeof positionOrPositions === "number") { - const data = await this.client.apiRequest("getSymbolAtPosition", { - snapshot: this.snapshotId, - project: this.project.id, - file, - position: positionOrPositions, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - const data = await this.client.apiRequest("getSymbolsAtPositions", { - snapshot: this.snapshotId, - project: this.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); - } - - getSymbolOfSourceFile(file: DocumentIdentifier): Promise; - getSymbolOfSourceFile(files: readonly DocumentIdentifier[]): Promise<(Symbol | undefined)[]>; - async getSymbolOfSourceFile(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { - if (Array.isArray(fileOrFiles)) { - const data = await this.client.apiRequest("getSymbolsOfSourceFiles", { - snapshot: this.snapshotId, - project: this.project.id, - files: fileOrFiles, - }); - return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = await this.client.apiRequest("getSymbolOfSourceFile", { - snapshot: this.snapshotId, - project: this.project.id, - file: fileOrFiles as DocumentIdentifier, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** - * Get the type of a symbol. Always returns a type; for symbols whose type - * cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - getTypeOfSymbol(symbol: Symbol): Promise; - getTypeOfSymbol(symbols: readonly Symbol[]): Promise; - async getTypeOfSymbol(symbolOrSymbols: Symbol | readonly Symbol[]): Promise { - if (Array.isArray(symbolOrSymbols)) { - const data = await this.client.apiRequest("getTypesOfSymbols", { - snapshot: this.snapshotId, - project: this.project.id, - symbols: symbolOrSymbols.map(symbol => symbol.reference), - }); - return data.map(d => this.objectRegistry.getOrCreateType(d)); - } - const data = await this.client.apiRequest("getTypeOfSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: (symbolOrSymbols as Symbol).reference, - }); - return this.objectRegistry.getOrCreateType(data); - } - - /** - * Get the declared type of a symbol. Always returns a type; for symbols whose - * declared type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - async getDeclaredTypeOfSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getDeclaredTypeOfSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateType(data); - } - - /** - * Get the type of a symbol, excluding the missing type when - * `exactOptionalPropertyTypes: true` is set; for symbols whose - * type cannot be determined the checker yields the error type - * (use {@link Type.isErrorType} to detect it). - */ - async getNonMissingTypeOfSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getNonMissingTypeOfSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateType(data); - } - - async getReferencesToSymbolInFile(file: DocumentIdentifier, symbol: Symbol): Promise { - const data = await this.client.apiRequest("getReferencesToSymbolInFile", { - snapshot: this.snapshotId, - project: this.project.id, - file, - symbol: symbol.reference, - }); - return (data ?? []).map(h => new NodeHandle(h, this.project)); - } - - /** @deprecated Use `project.languageService.getReferencedSymbolsForNode`. */ - getReferencedSymbolsForNode(node: Node, position: number): Promise { - return this.project.languageService.getReferencedSymbolsForNode(node, position); - } - - /** @deprecated Use `project.languageService.getSignatureUsage`. */ - getSignatureUsage(signatureDecl: Node): Promise { - return this.project.languageService.getSignatureUsage(signatureDecl); - } - - /** @deprecated Use `project.languageService.getCompletionsAtPosition`. */ - getCompletionsAtPosition(document: string, position: number, options?: CompletionOptions): Promise { - return this.project.languageService.getCompletionsAtPosition(document, position, options); - } - - /** - * Get the type at a node location. Always returns a type; for nodes whose - * type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - getTypeAtLocation(node: Node): Promise; - getTypeAtLocation(nodes: readonly Node[]): Promise; - async getTypeAtLocation(nodeOrNodes: Node | readonly Node[]): Promise { - if (Array.isArray(nodeOrNodes)) { - const data = await this.client.apiRequest("getTypeAtLocations", { - snapshot: this.snapshotId, - project: this.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => this.objectRegistry.getOrCreateType(d)); - } - const data = await this.client.apiRequest("getTypeAtLocation", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return this.objectRegistry.getOrCreateType(data); - } - - async getSignaturesOfType(type: Type, kind: SignatureKind): Promise { - return kind === SignatureKind.Call ? type.getCallSignatures() : type.getConstructSignatures(); - } - - /** - * Get the resolved signature of a call-like expression. Always returns a - * signature; when a call cannot be resolved the checker yields the unknown - * signature (use {@link Checker.isUnknownSignature} to detect it). - */ - async getResolvedSignature(node: Node): Promise { - const data = await this.client.apiRequest("getResolvedSignature", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return this.objectRegistry.getOrCreateSignature(data); - } - - getTypeAtPosition(file: DocumentIdentifier, position: number): Promise; - getTypeAtPosition(file: DocumentIdentifier, positions: readonly number[]): Promise<(Type | undefined)[]>; - async getTypeAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Promise { - if (typeof positionOrPositions === "number") { - const data = await this.client.apiRequest("getTypeAtPosition", { - snapshot: this.snapshotId, - project: this.project.id, - file, - position: positionOrPositions, - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - const data = await this.client.apiRequest("getTypesAtPositions", { - snapshot: this.snapshotId, - project: this.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? this.objectRegistry.getOrCreateType(d) : undefined); - } - - async resolveName( - name: string, - meaning: SymbolFlags, - location?: Node | DocumentPosition, - excludeGlobals?: boolean, - ): Promise { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = location && "kind" in location; - const data = await this.client.apiRequest("resolveName", { - snapshot: this.snapshotId, - project: this.project.id, - name, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: !isNode && location ? (location as DocumentPosition).document : undefined, - position: !isNode && location ? (location as DocumentPosition).position : undefined, - excludeGlobals, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** - * Returns all symbols with the given meaning that are visible at `location`. - */ - async getSymbolsInScope(location: Node | DocumentPosition, meaning: SymbolFlags): Promise { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = "kind" in location; - const data = await this.client.apiRequest("getSymbolsInScope", { - snapshot: this.snapshotId, - project: this.project.id, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: isNode ? undefined : (location as DocumentPosition).document, - position: isNode ? undefined : (location as DocumentPosition).position, - }); - return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : []; - } - - async getResolvedSymbol(node: Identifier): Promise { - const text = node.text; - if (!text) return undefined; - return this.resolveName(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); - } - - async getContextualType(node: Expression): Promise { - const data = await this.client.apiRequest("getContextualType", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - - async getContextualTypeForArgumentAtIndex(node: CallLikeExpression, argIndex: number): Promise { - const data = await this.client.apiRequest("getContextualTypeForArgument", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - index: argIndex, - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - - async getAwaitedType(type: Type): Promise { - const data = await this.client.apiRequest("getAwaitedType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - - /** Get the base type of a literal type (e.g. `number` for `42`). Always returns a type. */ - async getBaseTypeOfLiteralType(type: Type): Promise { - const data = await this.client.apiRequest("getBaseTypeOfLiteralType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - return this.objectRegistry.getOrCreateType(data); - } - - /** Get the type with `null` and `undefined` removed. Always returns a type. */ - async getNonNullableType(type: Type): Promise { - return type.getNonNullableType(); - } - - /** - * Get the type for a type node. Always returns a type; for type nodes whose - * type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - async getTypeFromTypeNode(node: TypeNode): Promise { - const data = await this.client.apiRequest("getTypeFromTypeNode", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return this.objectRegistry.getOrCreateType(data); - } - - /** Get the widened type. Always returns a type. */ - async getWidenedType(type: Type): Promise { - const data = await this.client.apiRequest("getWidenedType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - return this.objectRegistry.getOrCreateType(data); - } - - /** - * Get the type of the parameter at the given index in a signature. Always - * returns a type; an out-of-range index yields the `any` type. - */ - async getParameterType(signature: Signature, index: number): Promise { - const data = await this.client.apiRequest("getParameterType", { - snapshot: this.snapshotId, - project: this.project.id, - signature: signature.id, - index, - }); - return this.objectRegistry.getOrCreateType(data); - } - - async isArrayLikeType(type: Type): Promise { - return this.client.apiRequest("isArrayLikeType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - } - - async isTypeAssignableTo(source: Type, target: Type): Promise { - return this.client.apiRequest("isTypeAssignableTo", { - snapshot: this.snapshotId, - project: this.project.id, - source: source.id, - target: target.id, - }); - } - - async getShorthandAssignmentValueSymbol(node: Node): Promise { - const data = await this.client.apiRequest("getShorthandAssignmentValueSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** - * Get the type of a symbol as narrowed at a specific location. Always returns - * a type; for symbols whose type cannot be determined the checker yields the - * error type (use {@link Type.isErrorType} to detect it). - */ - async getTypeOfSymbolAtLocation(symbol: Symbol, location: Node): Promise { - const data = await this.client.apiRequest("getTypeOfSymbolAtLocation", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - location: getNodeId(location), - }); - return this.objectRegistry.getOrCreateType(data); - } - - private async getIntrinsicType(method: IntrinsicTypeMethod): Promise { - const data = await this.client.apiRequest(method, { - snapshot: this.snapshotId, - project: this.project.id, - }); - return this.objectRegistry.getOrCreateType(data); - } - - async getAnyType(): Promise { - return this.getIntrinsicType("getAnyType"); - } - async getStringType(): Promise { - return this.getIntrinsicType("getStringType"); - } - async getNumberType(): Promise { - return this.getIntrinsicType("getNumberType"); - } - async getBooleanType(): Promise { - return this.getIntrinsicType("getBooleanType"); - } - async getVoidType(): Promise { - return this.getIntrinsicType("getVoidType"); - } - async getUndefinedType(): Promise { - return this.getIntrinsicType("getUndefinedType"); - } - async getNullType(): Promise { - return this.getIntrinsicType("getNullType"); - } - async getNeverType(): Promise { - return this.getIntrinsicType("getNeverType"); - } - async getUnknownType(): Promise { - return this.getIntrinsicType("getUnknownType"); - } - async getBigIntType(): Promise { - return this.getIntrinsicType("getBigIntType"); - } - async getESSymbolType(): Promise { - return this.getIntrinsicType("getESSymbolType"); - } - async getNonPrimitiveType(): Promise { - return this.getIntrinsicType("getNonPrimitiveType"); - } - - async typeToTypeNode(type: Type, enclosingDeclaration?: Node, flags?: number): Promise { - const binaryData = await this.client.apiRequestBinary("typeToTypeNode", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (!binaryData) return undefined; - return decodeNode(binaryData) as TypeNode; - } - - async signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Promise { - const binaryData = await this.client.apiRequestBinary("signatureToSignatureDeclaration", { - snapshot: this.snapshotId, - project: this.project.id, - signature: signature.id, - kind, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (!binaryData) return undefined; - return decodeNode(binaryData) as Node; - } - - async typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Promise { - const result = await this.client.apiRequest("typeToString", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); - return result; - } - - async isContextSensitive(node: Node): Promise { - return this.client.apiRequest("isContextSensitive", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - } - - async isArrayType(type: Type): Promise { - return this.client.apiRequest("isArrayType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - } - - async isTupleType(type: Type): Promise { - return type.isTupleType(); - } - - async isTupleTypeTarget(type: Type): Promise { - return type.isTupleTypeTarget(); - } - - /** - * The following symbols are considered read-only: - * - Properties with a `readonly` modifier - * - Variables declared with `const` - * - Get accessors without matching set accessors - * - Enum members - * - `Object.defineProperty` assignments with `writable: false` or no setter - * - Unions and intersections of the above - */ - async isReadonlySymbol(symbol: Symbol): Promise { - return this.client.apiRequest("isReadonlySymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - } - - /** Get the return type of a signature. Always returns a type. */ - async getReturnTypeOfSignature(signature: Signature): Promise { - return signature.getReturnType(); - } - - /** - * Get the rest type of a signature. Always returns a type; a signature with - * no rest parameter yields the `any` type. - */ - async getRestTypeOfSignature(signature: Signature): Promise { - const data = await this.client.apiRequest("getRestTypeOfSignature", { - snapshot: this.snapshotId, - project: this.project.id, - signature: signature.id, - }); - return this.objectRegistry.getOrCreateType(data); - } - - async getTypePredicateOfSignature(signature: Signature): Promise { - const data = await this.client.apiRequest("getTypePredicateOfSignature", { - snapshot: this.snapshotId, - project: this.project.id, - signature: signature.id, - }); - if (!data) return undefined; - return { - kind: data.kind, - parameterIndex: data.parameterIndex, - parameterName: data.parameterName, - type: data.type ? this.objectRegistry.getOrCreateType(data.type) : undefined, - } as TypePredicate; - } - - /** - * Get the base types of a class or interface type. A type with no base types - * yields an empty array. - */ - async getBaseTypes(type: InterfaceType): Promise { - return await type.getBaseTypes() ?? []; - } - - /** Get the apparent type of a type. Always returns a type. */ - async getApparentType(type: Type): Promise { - return type.getApparentType(); - } - - /** Get the reduced type of a type. Always returns a type. */ - async getReducedType(type: Type): Promise { - return type.getReducedType(); - } - - async getPropertiesOfType(type: Type): Promise { - return type.getProperties(); - } - - async getIndexInfosOfType(type: Type): Promise { - return type.getIndexInfos(); - } - - async getIndexInfoOfType(type: Type, kind: IndexKind): Promise { - const data = await this.client.apiRequest("getIndexInfoOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - kind, - }); - return data ? { - keyType: this.objectRegistry.getOrCreateType(data.keyType), - valueType: this.objectRegistry.getOrCreateType(data.valueType), - isReadonly: data.isReadonly ?? false, - declaration: data.declaration ? new NodeHandle(data.declaration, this.project) : undefined, - } : undefined; - } - - async getIndexTypeOfType(type: Type, kind: IndexKind): Promise { - return kind === IndexKind.String ? type.getStringIndexType() : type.getNumberIndexType(); - } - - async getTypeOfPropertyOfType(type: Type, propertyName: string): Promise { - const data = await this.client.apiRequest("getTypeOfPropertyOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - name: propertyName, - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - - /** - * Get the constraint of a type parameter (the `T` in ``), or - * undefined if it has none. - */ - async getConstraintOfTypeParameter(type: TypeParameter): Promise { - return type.getConstraint(); - } - - async getDefaultFromTypeParameter(type: TypeParameter): Promise { - return type.getDefault(); - } - - async getBaseConstraintOfType(type: Type): Promise { - const data = await this.client.apiRequest("getBaseConstraintOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - return data ? this.objectRegistry.getOrCreateType(data) : undefined; - } - - async getPropertyOfType(type: Type, name: string): Promise { - const data = await this.client.apiRequest("getPropertyOfType", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - name, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - async getConstantValue(node: Node): Promise { - const data = await this.client.apiRequest("getConstantValue", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { - return undefined; - } - if (data.isNumber && typeof data.value === "string") { - if (data.value === "+Infinity") { - return Infinity; - } - else if (data.value === "-Infinity") { - return -Infinity; - } - return NaN; - } - return data.value; - } - - /** Get the signature of a function-like declaration. Always returns a signature. */ - async getSignatureFromDeclaration(node: Node): Promise { - const data = await this.client.apiRequest("getSignatureFromDeclaration", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return this.objectRegistry.getOrCreateSignature(data); - } - - async getExportSpecifierLocalTargetSymbol(node: Node): Promise { - const data = await this.client.apiRequest("getExportSpecifierLocalTargetSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - location: getNodeId(node), - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** - * Follow all aliases to get the original symbol. Always returns a symbol; for - * an unresolved alias the checker yields the unknown symbol (use - * {@link Checker.isUnknownSymbol} to detect it). - */ - async getAliasedSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getAliasedSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateSymbol(data); - } - - /** - * Get the fully qualified name of a symbol, walking up its parent chain - * (e.g. `"/path/to/module".Namespace.Name`). - */ - async getFullyQualifiedName(symbol: Symbol): Promise { - return this.client.apiRequest("getFullyQualifiedName", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - } - - async getImmediateAliasedSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getImmediateAliasedSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - /** - * Get the target symbol if instantiated, or the provided symbol otherwise. - */ - async getTargetSymbol(symbol: Symbol): Promise { - if (symbol.checkFlags & CheckFlags.Instantiated) { - const data = await this.client.apiRequest("getTargetSymbol", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateSymbol(data); - } - return symbol; - } - - async getExportSymbolOfSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getExportSymbolOfSymbolForChecker", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return this.objectRegistry.getOrCreateSymbol(data); - } - - /** - * Fetch (once, then cache) the handle ids of the per-checker singleton - * symbols (unknown, undefined, arguments). These ids are stable for the life - * of the project's checker, so identity checks against them are local after - * the first call. - */ - private getWellKnownSymbols(): Promise<{ unknown: number; undefined: number; arguments: number; }> { - return this.wellKnownSymbols ??= this.client.apiRequest("getWellKnownSymbols", { - snapshot: this.snapshotId, - project: this.project.id, - }); - } - - /** - * Returns `true` if the symbol is the checker's "unknown" symbol (e.g. the - * result of {@link Checker.getAliasedSymbol} on an unresolved alias). - */ - async isUnknownSymbol(symbol: Symbol): Promise { - return symbol.id === (await this.getWellKnownSymbols()).unknown; - } - - /** - * Returns `true` if the symbol is the checker's "undefined" symbol. - */ - async isUndefinedSymbol(symbol: Symbol): Promise { - return symbol.id === (await this.getWellKnownSymbols()).undefined; - } - - /** - * Returns `true` if the symbol is the checker's "arguments" symbol. - */ - async isArgumentsSymbol(symbol: Symbol): Promise { - return symbol.id === (await this.getWellKnownSymbols()).arguments; - } - - /** - * Fetch (once, then cache) the handle id of the per-checker unknown - * signature. This id is stable for the life of the project's checker, so - * identity checks against it are local after the first call. - */ - private getWellKnownSignatures(): Promise<{ unknown: number; }> { - return this.wellKnownSignatures ??= this.client.apiRequest("getWellKnownSignatures", { - snapshot: this.snapshotId, - project: this.project.id, - }); - } - - /** - * Returns `true` if the signature is the checker's "unknown" signature (e.g. - * the result of {@link Checker.getResolvedSignature} on a call that cannot be - * resolved). - */ - async isUnknownSignature(signature: Signature): Promise { - return signature.id === (await this.getWellKnownSignatures()).unknown; - } - - async getExportsOfModule(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getExportsOfModule", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : []; - } - - async getMemberInModuleExports(symbol: Symbol, name: string): Promise { - const data = await this.client.apiRequest("getMemberInModuleExports", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - name, - }); - return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; - } - - async getJsDocTagsOfSymbol(symbol: Symbol): Promise { - const data = await this.client.apiRequest("getJsDocTags", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - return data ?? []; - } - - async getDocumentationCommentOfSymbol(symbol: Symbol): Promise { - return this.client.apiRequest("getDocumentationComment", { - snapshot: this.snapshotId, - project: this.project.id, - symbol: symbol.reference, - }); - } - - /** - * Get the type arguments of a type reference (e.g. the `string` in `Array`). - */ - async getTypeArguments(type: TypeReference): Promise { - const data = await this.client.apiRequest("getTypeArguments", { - snapshot: this.snapshotId, - project: this.project.id, - type: type.id, - }); - return data ? data.map(d => this.objectRegistry.getOrCreateType(d)) : []; - } -} - -export interface PrintNodeOptions { - preserveSourceNewlines?: boolean | undefined; - neverAsciiEscape?: boolean | undefined; - terminateUnterminatedLiterals?: boolean | undefined; -} - -export class Printer { - private client: Client; - - constructor(client: Client) { - this.client = client; - } - - async printNode(node: Node, options: PrintNodeOptions = {}): Promise { - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return this.client.apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - } - - async printFile(sourceFile: SourceFile, options: PrintNodeOptions = {}): Promise { - const encoded = encodeNode(sourceFile); - const base64 = uint8ArrayToBase64(encoded); - return this.client.apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - } -} - -export class SnapshotInternalAPI { - private snapshotId: number; - private client: Client; - - constructor(snapshotId: number, client: Client) { - this.snapshotId = snapshotId; - this.client = client; - } - - /** - * Format a synthesized node with the correct indentation for insertion at a - * specific position in an existing source file. - * - * @param node The synthesized AST node to format. - * @param file The target file where the node will be inserted. - * @param position The UTF-16 code-unit offset in the target file for insertion. - * @returns The formatted text of the node, indented for the insertion position. - */ - async formatNodeForInsertion(node: Node, file: DocumentIdentifier, position: number): Promise { - const data = await this.client.apiRequest("getDefaultProjectForFile", { - snapshot: this.snapshotId, - file, - }); - if (!data) { - throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); - } - - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return this.client.apiRequest("formatNodeForInsertion", { - snapshot: this.snapshotId, - project: data.id, - file, - position, - data: base64, - }); - } -} - -export class NodeHandle { - /** - * The project this handle was produced in, used as the default for {@link resolve}. - * Node handles are only meaningful within a project's program, so the producing project - * is remembered so callers don't have to pass it explicitly. - */ - private readonly canonicalProject: Project | undefined; - /** The owning source file of a file-owned symbol's declaration. */ - private readonly fileOwner: SourceFileOwner | undefined; - readonly index: number; - readonly kind: SyntaxKind; - readonly path: PathKey; - - constructor(handle: string, canonicalProject: Project | undefined, fileOwner?: SourceFileOwner) { - const parsed = parseNodeHandleFromCompiler(handle); - this.index = parsed.index; - this.kind = parsed.kind; - this.path = parsed.path; - this.canonicalProject = canonicalProject; - this.fileOwner = fileOwner; - } - - /** - * Resolve this handle to the actual AST node by fetching the source file from a project - * and looking up the node by index. If no project is passed, the project that produced - * the handle is used. Declarations of file-owned symbols identify an exact source file and - * resolve through it, independently of any project. - */ - async resolve(project: Project | undefined = this.canonicalProject): Promise { - if (this.fileOwner) { - const sourceFile = this.fileOwner.record.file ?? await this.fetchOwnerFile(this.fileOwner); - return sourceFile.getOrCreateNodeAtIndex(this.index) as T | undefined; - } - if (!project) throw new Error(`Node handle for '${this.path}' has no project context`); - const sourceFile = await project.program.getSourceFileByPath(this.path); - if (!sourceFile) { - return undefined; - } - return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(this.index) as T | undefined; - } - - private async fetchOwnerFile(fileOwner: SourceFileOwner): Promise { - const data = await fileOwner.api.client.apiRequestBinary("getCachedSourceFile", { file: fileOwner.record.descriptor }); - if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); - return fileOwner.api.sourceFileCache.attachFile( - fileOwner.record, - new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), - ); - } -} - -/** A symbol definition paired with all of its reference nodes. */ -export interface ReferencedSymbolEntry { - /** The node handle for the symbol's definition. */ - definition: NodeHandle; - /** The resolved symbol for the definition, if available. */ - symbol?: Symbol | undefined; - /** The node handles for each reference to the symbol. */ - references: NodeHandle[]; -} - -/** A single usage of a signature, pairing the reference name with its call expression (if any). */ -export interface SignatureUsage { - /** The node handle for the name reference. */ - name: NodeHandle; - /** The node handle for the call expression, if the reference is invoked. */ - call?: NodeHandle | undefined; -} - -/** A cached source-file record and its owning API. */ -interface SourceFileOwner { - readonly record: CachedSourceFile; - readonly api: API; -} - -type SymbolStorage = - | { readonly kind: typeof SymbolOwnerKind.File; readonly owner: SourceFileOwner; } - | { readonly kind: typeof SymbolOwnerKind.Snapshot; readonly registry: ProjectObjectRegistry; }; - -export class Symbol { - private readonly storage: SymbolStorage; - - get id(): number { - return this.reference.id; - } - /** The escaped (`__String`) name, used as the key in member/export tables. */ - readonly escapedName: __String; - /** The display name (escaped underscores removed). */ - readonly name: string; - readonly flags: SymbolFlags; - readonly checkFlags: CheckFlags; - /** @internal */ - readonly reference: SymbolReference; - readonly declarations: readonly NodeHandle[]; - readonly valueDeclaration: NodeHandle | undefined; - private readonly parent!: CompactSymbolReference; - private readonly exportSymbol!: CompactSymbolReference; - private membersCache: Promise> | undefined; - private exportsCache: Promise> | undefined; - - constructor(data: SymbolResponse, storage: SymbolStorage) { - if (data.reference.kind !== storage.kind) throw new Error(`Symbol ${data.reference.id} has mismatched ownership and storage`); - this.storage = storage; - this.reference = data.reference; - - this.escapedName = data.name as __String; - this.name = unescapeLeadingUnderscores(data.name as __String); - this.flags = data.flags; - this.checkFlags = data.checkFlags; - // A file-owned symbol has no canonical project; its declarations resolve through its file. - const project = storage.kind === SymbolOwnerKind.Snapshot ? storage.registry.project : undefined; - const fileOwner = storage.kind === SymbolOwnerKind.File ? storage.owner : undefined; - this.declarations = (data.declarations ?? []).map(handle => new NodeHandle(handle, project, fileOwner)); - this.valueDeclaration = data.valueDeclaration - ? new NodeHandle(data.valueDeclaration, project, fileOwner) - : undefined; - - if (data.parent !== undefined) this.parent = data.parent; - if (data.exportSymbol !== undefined) this.exportSymbol = data.exportSymbol; - } - - async getParent(): Promise { - if (!this.parent) return undefined; - return this.fetchSymbol("getParentOfSymbol", this.parent); - } - - /** - * Get this symbol's members keyed by escaped name. The result is cached on - * the symbol, so repeated calls do not round-trip to the server. - */ - getMembers(): Promise> { - return this.membersCache ??= this.fetchSymbolTable("getMembersOfSymbol"); - } - - /** - * Get this symbol's exports keyed by escaped name. The result is cached on - * the symbol, so repeated calls do not round-trip to the server. - */ - getExports(): Promise> { - return this.exportsCache ??= this.fetchSymbolTable("getExportsOfSymbol"); - } - - private async fetchSymbolTable(method: SymbolsPropertyMethod): Promise> { - const symbols = await this.fetchSymbols(method); - const table = new Map<__String, Symbol>(); - for (const symbol of symbols) { - table.set(symbol.escapedName, symbol); - } - return table; - } - - async getExportSymbol(): Promise { - if (!this.exportSymbol) return this; - return this.fetchSymbol("getExportSymbolOfSymbol", this.exportSymbol); - } - - async getJsDocTags(checker: Checker): Promise { - return checker.getJsDocTagsOfSymbol(this); - } - - async getDocumentationComment(checker: Checker): Promise { - return checker.getDocumentationCommentOfSymbol(this); - } - - private async fetchSymbol(method: SymbolPropertyMethod, reference: CompactSymbolReference): Promise { - if (this.storage.kind === SymbolOwnerKind.Snapshot) { - return this.storage.registry.fetchSymbol(this, method, reference); - } - const fileOwner = this.storage.owner; - // A file-owned symbol's relationships are always owned by the same file. - const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; - if (cached) return cached; - const data = await fileOwner.api.client.apiRequest(method, { symbol: this.reference }); - if (!data) throw new Error(`${method} returned null symbol for Symbol ${this.id}`); - return this.internFileSymbol(fileOwner, data); - } - - private async fetchSymbols(method: SymbolsPropertyMethod): Promise { - if (this.storage.kind === SymbolOwnerKind.Snapshot) { - return this.storage.registry.fetchSymbols(this, method); - } - const fileOwner = this.storage.owner; - const data = await fileOwner.api.client.apiRequest(method, { symbol: this.reference }); - return data?.map(symbol => this.internFileSymbol(fileOwner, symbol)) ?? []; - } - - private internFileSymbol(fileOwner: SourceFileOwner, data: ProtocolSymbolResponse): Symbol { - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.File) throw new Error(`Symbol ${reference.id} is not file-owned`); - return fileOwner.api.sourceFileCache.getOrCreateSymbol(fileOwner.record, reference.file, reference.id, () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner })); - } -} - -class TypeObject implements Type { - private objectRegistry: ProjectObjectRegistry; - - // Fields included in TypeResponse. References to other objects are stored as IDs - // and resolved lazily via the object registry. - readonly id: number; - readonly flags: TypeFlags; - readonly objectFlags!: ObjectFlags; - readonly symbol!: CompactSymbolReference; - readonly value!: string | number | boolean | bigint; - readonly intrinsicName!: string; - readonly isThisType!: boolean; - readonly freshType!: number; - readonly regularType!: number; - readonly target!: number; - private readonly tupleType: boolean; - readonly typeParameters!: readonly number[]; - readonly outerTypeParameters!: readonly number[]; - readonly localTypeParameters!: readonly number[]; - readonly thisType!: number; - readonly aliasTypeArguments!: readonly number[]; - readonly aliasSymbol!: CompactSymbolReference; - readonly elementFlags!: readonly ElementFlags[]; - readonly fixedLength!: number; - readonly readonly!: boolean; - readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; - readonly texts!: readonly string[]; - readonly objectType!: number; - readonly indexType!: number; - readonly checkType!: number; - readonly extendsType!: number; - readonly baseType!: number; - readonly substConstraint!: number; - readonly typeParameter!: number; - readonly constraintType!: number; - readonly nameType!: number; - readonly templateType!: number; - - // Cached results of lazy fetches, not included in TypeResponse - // (typically because they require some amount of computation or - // could cause an arbitrarily large number of types to be cached - // on the server for ID-based lookup). `false` is a sentinel value - // indicating a fetch has not yet occurred. - private trueType: number | false; - private falseType: number | false; - private constraint: number | false; - private default: number | false; - private nonNullableType: number | false; - private apparentType: number | false; - private reducedType: number | false; - private properties: readonly Symbol[] | false; - private apparentProperties: readonly Symbol[] | false; - private callSignatures: readonly Signature[] | false; - private constructSignatures: readonly Signature[] | false; - private indexInfos: readonly IndexInfo[] | false; - private baseTypes: readonly Type[] | false; - private types: readonly Type[] | false; - private stringIndexType: Type | undefined | false; - private numberIndexType: Type | undefined | false; - - constructor(data: TypeResponse, objectRegistry: ProjectObjectRegistry) { - this.objectRegistry = objectRegistry; - - this.id = data.id; - this.flags = data.flags; - if (data.objectFlags !== undefined) this.objectFlags = data.objectFlags; - if (data.symbol !== undefined) this.symbol = data.symbol; - if (data.value != null) { - // BigInt literal values are serialized as decimal strings (e.g. "-123") because - // JSON cannot represent bigint. Decode them back into a real bigint here. - const value = data.value as string | number | boolean; - if (data.flags & TypeFlags.BigIntLiteral) { - this.value = BigInt(value as string); - } - // JSON cannot represent infinities, so the API serializes them as strings. - else if (data.flags & TypeFlags.NumberLiteral && typeof value === "string") { - if (value === "+Infinity") { - this.value = Infinity; - } - else if (value === "-Infinity") { - this.value = -Infinity; - } - else { - this.value = NaN; - } - } - else { - this.value = value; - } - } - if (data.intrinsicName !== undefined) this.intrinsicName = data.intrinsicName; - if (data.isThisType !== undefined) this.isThisType = data.isThisType; - if (data.freshType !== undefined) this.freshType = data.freshType; - if (data.regularType !== undefined) this.regularType = data.regularType; - if (data.target !== undefined) this.target = data.target; - this.tupleType = data.isTupleType ?? false; - this.typeParameters = data.typeParameters ?? []; - this.outerTypeParameters = data.outerTypeParameters ?? []; - this.localTypeParameters = data.localTypeParameters ?? []; - if (data.thisType !== undefined) this.thisType = data.thisType; - this.aliasTypeArguments = data.aliasTypeArguments ?? []; - if (data.aliasSymbol !== undefined) this.aliasSymbol = data.aliasSymbol; - if (data.fixedLength !== undefined) { - this.elementFlags = data.elementFlags ?? []; - this.fixedLength = data.fixedLength; - } - if (data.readonly !== undefined) this.readonly = data.readonly; - if (data.labeledElementDeclarations !== undefined) { - this.labeledElementDeclarations = data.labeledElementDeclarations.map(handle => handle ? objectRegistry.createNodeHandle(handle) : undefined); - } - if (data.texts !== undefined) this.texts = data.texts; - if (data.objectType !== undefined) this.objectType = data.objectType; - if (data.indexType !== undefined) this.indexType = data.indexType; - if (data.checkType !== undefined) this.checkType = data.checkType; - if (data.extendsType !== undefined) this.extendsType = data.extendsType; - if (data.baseType !== undefined) this.baseType = data.baseType; - if (data.substConstraint !== undefined) this.substConstraint = data.substConstraint; - if (data.typeParameter !== undefined) this.typeParameter = data.typeParameter; - if (data.constraintType !== undefined) this.constraintType = data.constraintType; - if (data.nameType !== undefined) this.nameType = data.nameType; - if (data.templateType !== undefined) this.templateType = data.templateType; - - this.trueType = false; - this.falseType = false; - this.constraint = false; - this.default = false; - this.nonNullableType = false; - this.apparentType = false; - this.reducedType = false; - this.properties = false; - this.apparentProperties = false; - this.callSignatures = false; - this.constructSignatures = false; - this.indexInfos = false; - this.baseTypes = false; - this.types = false; - this.stringIndexType = false; - this.numberIndexType = false; - } - - async getSymbol(): Promise { - return this.objectRegistry.fetchSymbol(this, "getSymbolOfType", this.symbol); - } - - async getProperties(): Promise { - if (this.properties === false) { - this.properties = await this.objectRegistry.fetchPropertiesOfType(this); - } - return this.properties; - } - - getProperty(propertyName: string): Promise { - return this.objectRegistry.fetchPropertyOfType(this, propertyName); - } - - async getApparentProperties(): Promise { - if (this.apparentProperties === false) { - this.apparentProperties = await this.objectRegistry.fetchApparentPropertiesOfType(this); - } - return this.apparentProperties; - } - - async getCallSignatures(): Promise { - if (this.callSignatures === false) { - this.callSignatures = await this.objectRegistry.fetchSignaturesOfType(this, SignatureKind.Call); - } - return this.callSignatures; - } - - async getConstructSignatures(): Promise { - if (this.constructSignatures === false) { - this.constructSignatures = await this.objectRegistry.fetchSignaturesOfType(this, SignatureKind.Construct); - } - return this.constructSignatures; - } - - async getNonNullableType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getNonNullableType", this.nonNullableType); - this.nonNullableType = result.id; - return result; - } - - async getStringIndexType(): Promise { - if (this.stringIndexType === false) { - this.stringIndexType = await this.getStringIndexTypeWorker(); - } - return this.stringIndexType; - } - - private async getStringIndexTypeWorker(): Promise { - const infos = await this.getIndexInfos(); - return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; - } - - async getNumberIndexType(): Promise { - if (this.numberIndexType === false) { - this.numberIndexType = await this.getNumberIndexTypeWorker(); - } - return this.numberIndexType; - } - - private async getNumberIndexTypeWorker(): Promise { - const infos = await this.getIndexInfos(); - return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; - } - - async getApparentType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getApparentType", this.apparentType); - this.apparentType = result.id; - return result; - } - - async getReducedType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getReducedType", this.reducedType); - this.reducedType = result.id; - return result; - } - - async getIndexInfos(): Promise { - if (this.indexInfos === false) { - this.indexInfos = await this.objectRegistry.fetchIndexInfosOfType(this); - } - return this.indexInfos; - } - - async getAliasSymbol(): Promise { - return this.objectRegistry.fetchSymbol(this, "getAliasSymbolOfType", this.aliasSymbol); - } - - async getTarget(): Promise { - return this.objectRegistry.fetchType(this, "getTargetOfType", this.target); - } - - async getFreshType(): Promise { - return this.objectRegistry.fetchOptionalType(this, "getFreshTypeOfType", this.freshType); - } - - async getRegularType(): Promise { - return this.objectRegistry.fetchOptionalType(this, "getRegularTypeOfType", this.regularType); - } - - async getTypes(): Promise { - // Only union, intersection, and template literal types have constituent - // types; any other kind has none, so return undefined rather than sending - // a request the server cannot satisfy. - if (!(this.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { - return undefined; - } - if (this.types === false) { - this.types = await this.objectRegistry.fetchTypes(this, "getTypesOfType"); - } - return this.types; - } - - async getTypeParameters(): Promise { - return this.objectRegistry.fetchTypes(this, "getTypeParametersOfType", this.typeParameters) as Promise; - } - - async getOuterTypeParameters(): Promise { - return this.objectRegistry.fetchTypes(this, "getOuterTypeParametersOfType", this.outerTypeParameters) as Promise; - } - - async getLocalTypeParameters(): Promise { - return this.objectRegistry.fetchTypes(this, "getLocalTypeParametersOfType", this.localTypeParameters) as Promise; - } - - async getThisType(): Promise { - return this.objectRegistry.fetchOptionalType(this, "getThisTypeOfType", this.thisType) as Promise; - } - - async getAliasTypeArguments(): Promise { - return this.objectRegistry.fetchTypes(this, "getAliasTypeArgumentsOfType", this.aliasTypeArguments); - } - - async getTypeParameter(): Promise { - return this.objectRegistry.fetchType(this, "getTypeParameterOfMappedType", this.typeParameter); - } - - async getConstraintType(): Promise { - return this.objectRegistry.fetchType(this, "getConstraintTypeOfMappedType", this.constraintType); - } - - async getNameType(): Promise { - return this.objectRegistry.fetchOptionalType(this, "getNameTypeOfMappedType", this.nameType); - } - - async getTemplateType(): Promise { - return this.objectRegistry.fetchType(this, "getTemplateTypeOfMappedType", this.templateType); - } - - async getObjectType(): Promise { - return this.objectRegistry.fetchType(this, "getObjectTypeOfType", this.objectType); - } - - async getIndexType(): Promise { - return this.objectRegistry.fetchType(this, "getIndexTypeOfType", this.indexType); - } - - async getCheckType(): Promise { - return this.objectRegistry.fetchType(this, "getCheckTypeOfType", this.checkType); - } - - async getExtendsType(): Promise { - return this.objectRegistry.fetchType(this, "getExtendsTypeOfType", this.extendsType); - } - - async getBaseType(): Promise { - return this.objectRegistry.fetchType(this, "getBaseTypeOfType", this.baseType); - } - - async getConstraint(): Promise { - // Type parameters resolve their constraint lazily through the checker, - // whereas substitution types carry a preloaded constraint handle. - if (this.flags & TypeFlags.TypeParameter) { - const result = await this.objectRegistry.fetchOptionalType(this, "getConstraintOfTypeParameter", this.constraint); - this.constraint = result ? result.id : 0; - return result; - } - return this.objectRegistry.fetchType(this, "getConstraintOfType", this.substConstraint); - } - - async getDefault(): Promise { - const result = await this.objectRegistry.fetchOptionalType(this, "getDefaultFromTypeParameter", this.default); - this.default = result ? result.id : 0; - return result; - } - - async getTrueType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getTrueTypeOfConditionalType", this.trueType); - this.trueType = result.id; - return result; - } - - async getFalseType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getFalseTypeOfConditionalType", this.falseType); - this.falseType = result.id; - return result; - } - - /** - * Get the base types of this type. Returns `undefined` for any type that is - * not a class or interface. - */ - async getBaseTypes(): Promise { - if (!this.isClassOrInterface()) { - return undefined; - } - if (this.baseTypes === false) { - this.baseTypes = await this.objectRegistry.fetchBaseTypes(this); - } - return this.baseTypes; - } - - isClassOrInterface(): this is InterfaceType { - return isClassOrInterfaceType(this); - } - - isUnionType(): this is UnionType { - return isUnionType(this); - } - - isIntersectionType(): this is IntersectionType { - return isIntersectionType(this); - } - - isObjectType(): this is ObjectType { - return isObjectType(this); - } - - isIntrinsicType(): this is IntrinsicType { - return isIntrinsicType(this); - } - - isErrorType(): boolean { - return isErrorType(this); - } - - isLiteralType(): this is LiteralType { - return isLiteralType(this); - } - - isStringLiteralType(): this is StringLiteralType { - return isStringLiteralType(this); - } - - isNumberLiteralType(): this is NumberLiteralType { - return isNumberLiteralType(this); - } - - isBigIntLiteralType(): this is BigIntLiteralType { - return isBigIntLiteralType(this); - } - - isBooleanLiteralType(): this is BooleanLiteralType { - return isBooleanLiteralType(this); - } - - isTypeReference(): this is TypeReference { - return isTypeReference(this); - } - - isTupleType(): this is TupleTypeReference { - return this.tupleType; - } - - isTupleTypeTarget(): this is TupleType { - return this.fixedLength !== undefined; - } - - isIndexType(): this is IndexType { - return isIndexType(this); - } - - isIndexedAccessType(): this is IndexedAccessType { - return isIndexedAccessType(this); - } - - isConditionalType(): this is ConditionalType { - return isConditionalType(this); - } - - isSubstitutionType(): this is SubstitutionType { - return isSubstitutionType(this); - } - - isTemplateLiteralType(): this is TemplateLiteralType { - return isTemplateLiteralType(this); - } - - isStringMappingType(): this is StringMappingType { - return isStringMappingType(this); - } - - isTypeParameter(): this is TypeParameter { - return isTypeParameter(this); - } - - isMappedType(): this is MappedType { - return !!(this.flags & TypeFlags.Object) && !!(this.objectFlags & ObjectFlags.Mapped); - } -} - -export function isUnionType(type: Type): type is UnionType { - return (type.flags & TypeFlags.Union) !== 0; -} - -export function isIntersectionType(type: Type): type is IntersectionType { - return (type.flags & TypeFlags.Intersection) !== 0; -} - -export function isObjectType(type: Type): type is ObjectType { - return (type.flags & TypeFlags.Object) !== 0; -} - -export function isClassOrInterfaceType(type: Type): type is InterfaceType { - return isObjectType(type) && (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0; -} - -export function isIntrinsicType(type: Type): type is IntrinsicType { - return (type.flags & TypeFlags.Intrinsic) !== 0; -} - -/** - * Whether this is the error type — the placeholder the checker produces when a - * type cannot be determined (e.g. an unresolved reference). It is an intrinsic - * type named `"error"` (this covers both the singleton error type and the - * per-alias error types manufactured for unresolved type alias references). - */ -export function isErrorType(type: Type): boolean { - return isIntrinsicType(type) && type.intrinsicName === "error"; -} - -export function isLiteralType(type: Type): type is LiteralType { - return (type.flags & TypeFlags.Literal) !== 0; -} - -export function isStringLiteralType(type: Type): type is StringLiteralType { - return (type.flags & TypeFlags.StringLiteral) !== 0; -} - -export function isNumberLiteralType(type: Type): type is NumberLiteralType { - return (type.flags & TypeFlags.NumberLiteral) !== 0; -} - -export function isBigIntLiteralType(type: Type): type is BigIntLiteralType { - return (type.flags & TypeFlags.BigIntLiteral) !== 0; -} - -export function isBooleanLiteralType(type: Type): type is BooleanLiteralType { - return (type.flags & TypeFlags.BooleanLiteral) !== 0; -} - -export function isTypeReference(type: Type): type is TypeReference { - return isObjectType(type) && (type.objectFlags & ObjectFlags.Reference) !== 0; -} - -export function isTupleType(type: Type): type is TupleTypeReference { - return type.isTupleType(); -} - -export function isTupleTypeTarget(type: Type): type is TupleType { - return type.isTupleTypeTarget(); -} - -export function isIndexType(type: Type): type is IndexType { - return (type.flags & TypeFlags.Index) !== 0; -} - -export function isIndexedAccessType(type: Type): type is IndexedAccessType { - return (type.flags & TypeFlags.IndexedAccess) !== 0; -} - -export function isConditionalType(type: Type): type is ConditionalType { - return (type.flags & TypeFlags.Conditional) !== 0; -} - -export function isSubstitutionType(type: Type): type is SubstitutionType { - return (type.flags & TypeFlags.Substitution) !== 0; -} - -export function isTemplateLiteralType(type: Type): type is TemplateLiteralType { - return (type.flags & TypeFlags.TemplateLiteral) !== 0; -} - -export function isStringMappingType(type: Type): type is StringMappingType { - return (type.flags & TypeFlags.StringMapping) !== 0; -} - -export function isTypeParameter(type: Type): type is TypeParameter { - return (type.flags & TypeFlags.TypeParameter) !== 0; -} - -export class Signature { - private flags: number; - private objectRegistry: ProjectObjectRegistry; - - readonly id: number; - readonly declaration?: NodeHandle | undefined; - readonly typeParameters?: readonly number[] | undefined; - readonly parameters: readonly CompactSymbolReference[]; - readonly thisParameter?: CompactSymbolReference | undefined; - readonly target?: number | undefined; - private returnType: number | false; - - constructor(data: SignatureResponse, project: Project, objectRegistry: ProjectObjectRegistry) { - this.id = data.id; - this.flags = data.flags; - this.objectRegistry = objectRegistry; - this.declaration = data.declaration ? new NodeHandle(data.declaration, project) : undefined; - this.typeParameters = data.typeParameters ?? []; - this.parameters = data.parameters ?? []; - this.thisParameter = data.thisParameter; - this.target = data.target; - this.returnType = false; - } - - async getTypeParameters(): Promise { - return this.objectRegistry.fetchTypes(this, "getTypeParametersOfSignature", this.typeParameters) as Promise; - } - - async getParameters(): Promise { - return this.objectRegistry.fetchSymbols(this, "getParametersOfSignature", this.parameters); - } - - async getThisParameter(): Promise { - return this.objectRegistry.fetchSymbol(this, "getThisParameterOfSignature", this.thisParameter); - } - - async getTarget(): Promise { - return this.objectRegistry.fetchSignature(this, "getTargetOfSignature", this.target); - } - - async getReturnType(): Promise { - const result = await this.objectRegistry.fetchType(this, "getReturnTypeOfSignature", this.returnType); - this.returnType = result.id; - return result; - } - - getTypeParameterAtPosition(pos: number): Promise { - return this.objectRegistry.fetchTypeParameterAtPosition(this, pos); - } - - get hasRestParameter(): boolean { - return (this.flags & SignatureFlags.HasRestParameter) !== 0; - } - - get isConstruct(): boolean { - return (this.flags & SignatureFlags.Construct) !== 0; - } - - get isAbstract(): boolean { - return (this.flags & SignatureFlags.Abstract) !== 0; - } -} +import { CheckFlags } from "#enums/checkFlags"; +import { CompletionItemKind } from "#enums/completionItemKind"; +import { DiagnosticCategory } from "#enums/diagnosticCategory"; +import { ElementFlags } from "#enums/elementFlags"; +import { EmitOnly } from "#enums/emitOnly"; +import { IndexKind } from "#enums/indexKind"; +import { JsxEmit } from "#enums/jsxEmit"; +import { ModuleKind } from "#enums/moduleKind"; +import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +import { NewLineKind } from "#enums/newLineKind"; +import { NodeBuilderFlags } from "#enums/nodeBuilderFlags"; +import { ObjectFlags } from "#enums/objectFlags"; +import { ScriptKind } from "#enums/scriptKind"; +import { SignatureFlags } from "#enums/signatureFlags"; +import { SignatureKind } from "#enums/signatureKind"; +import { SymbolFlags } from "#enums/symbolFlags"; +import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; +import { TypeFlags } from "#enums/typeFlags"; +import { TypeFormatFlags } from "#enums/typeFormatFlags"; +import { TypePredicateKind } from "#enums/typePredicateKind"; +import { + type __String, + type CallLikeExpression, + type Declaration, + type Expression, + type FileReference, + type Identifier, + type IndexSignatureDeclaration, + ModifierFlags, + type NamedTupleMember, + type Node, + type ParameterDeclaration, + type PathKey, + type RootedDirectoryPath, + type RootedFilePath, + type SourceFile, + type StringLiteralLikeNode, + type SyntaxKind, + type TypeNode, + unescapeLeadingUnderscores, +} from "../../ast/index.ts"; +import { assertNever } from "../../internal/utils.ts"; +import { + encodeNode, + uint8ArrayToBase64, +} from "../node/encoder.ts"; +import { + decodeNode, + getNodeId, + parseNodeHandleFromCompiler, + readParseOptionsKey, + readSourceFileHash, + readSourceFileLease, + RemoteNode, + RemoteSourceFile, +} from "../node/node.ts"; +import { Wtf8Decoder } from "../node/wtf8.ts"; +import type { + APIOptions, + LSPConnectionOptions, +} from "../options.ts"; +import { + canonicalize, + CaseSensitivity, + pathKey, + toRootedDirectoryPath, + toRootedPath, +} from "../path.ts"; +import { prepareCompilerOptions } from "../prepareCompilerOptions.generated.ts"; +import type { + BuildResponse, + CleanBuildResponse, + CompactSymbolReference, + CompilerOptions, + CompletionPreferences, + ConfiguredProjectId, + CreateBuildOrchestratorResponse, + CreateProgramOptions as ProtocolCreateProgramOptions, + CreateSnapshotParams as ProtocolCreateSnapshotParams, + CreateSnapshotProgramParams as ProtocolCreateSnapshotProgramParams, + CreateSnapshotResponse, + CreateSourceFileOptions, + Diagnostic, + DiagnosticResponse, + DocumentIdentifier, + DocumentPosition, + EmitOutputResponse as ProtocolEmitOutputResponse, + FileNotifications, + ImportAdderAction, + InferredProjectId, + IntrinsicTypeMethod, + LanguageServerSnapshotChanges as ProtocolLanguageServerSnapshotChanges, + ModuleResolutionEntry, + ModuleResolutionSpec, + PackageId, + ParsedCommandLine, + ProjectId, + ProjectReference, + ProjectResponse, + ProtocolSymbolResponse, + RawCompilerOptions, + ReadConfigFileResponse, + ReconfigureSnapshotProgramParams as ProtocolReconfigureSnapshotProgramParams, + ResolutionMode, + ResolvedModule, + ResolvedTypeReferenceDirective, + ResolveModuleNameResult, + SignaturePropertyMethod, + SignatureResponse, + SourceFileDescriptor, + SourceFileMetadata, + StaticModuleResolution, + SymbolPropertyMethod, + SymbolReference, + SymbolResponse, + SymbolsPropertyMethod, + SyntheticProjectId, + TextEdit, + TypeAcquisition, + TypePropertyMethod, + TypeResponse, + TypesPropertyMethod, + UserPreferences, +} from "../proto.ts"; +import { + resolveFileName, + toCreateSnapshotRequest, + validateSymbolResponse, +} from "../proto.ts"; +import { + type CachedSourceFile, + SourceFileCache, +} from "../sourceFileCache.ts"; +import type { + RequestTiming, + TimingAccumulators, + TimingCollector, + TimingInfo, +} from "../timing.ts"; +import { + Client, + type ClientSocketOptions, + type ClientSpawnOptions, +} from "./client.ts"; +import type { + AssertsIdentifierTypePredicate, + AssertsThisTypePredicate, + BigIntLiteralType, + BooleanLiteralType, + CompletionEntry, + CompletionInfo, + CompletionOptions, + ConditionalType, + EmitOutput, + EmitOutputFile, + EmitResult, + FormatDiagnosticsHost, + FreshableType, + GenericType, + GetImportEditsForSymbolsOptions, + IdentifierTypePredicate, + ImportAdderAction as APIImportAdderAction, + IndexedAccessType, + IndexInfo, + IndexType, + InterfaceType, + IntersectionType, + IntrinsicType, + JSDocTagInfo, + LiteralType, + MappedType, + NumberLiteralType, + ObjectType, + StringLiteralType, + StringMappingType, + StructuredType, + SubstitutionType, + TemplateLiteralType, + ThisTypePredicate, + TupleType, + TupleTypeReference, + Type, + TypeParameter, + TypePredicate, + TypePredicateBase, + TypeReference, + UnionOrIntersectionType, + UnionType, +} from "./types.ts"; + +export { formatDiagnostics, formatDiagnosticsWithColorAndContext } from "../diagnosticFormatter.ts"; +export { documentURIToFileName, fileNameToDocumentURI } from "../path.ts"; +export { CheckFlags, CompletionItemKind, DiagnosticCategory, ElementFlags, EmitOnly, IndexKind, JsxEmit, ModifierFlags, ModuleKind, ModuleResolutionKind, NodeBuilderFlags, ObjectFlags, ScriptKind, SignatureFlags, SignatureKind, SymbolFlags, SymbolOwnerKind, TypeFlags, TypeFormatFlags, TypePredicateKind }; +export type { + APIImportAdderAction as ImportAdderAction, + APIOptions, + AssertsIdentifierTypePredicate, + AssertsThisTypePredicate, + BigIntLiteralType, + BooleanLiteralType, + ClientSocketOptions, + ClientSpawnOptions, + CompilerOptions, + CompletionEntry, + CompletionInfo, + CompletionOptions, + CompletionPreferences, + ConditionalType, + ConfiguredProjectId, + CreateSourceFileOptions, + Diagnostic, + DocumentIdentifier, + DocumentPosition, + EmitOutput, + EmitOutputFile, + EmitResult, + FileNotifications, + FormatDiagnosticsHost, + FreshableType, + GenericType, + GetImportEditsForSymbolsOptions, + IdentifierTypePredicate, + IndexedAccessType, + IndexInfo, + IndexType, + InferredProjectId, + InterfaceType, + IntersectionType, + IntrinsicType, + JSDocTagInfo, + LiteralType, + LSPConnectionOptions, + MappedType, + ModuleResolutionEntry, + ModuleResolutionSpec, + NumberLiteralType, + ObjectType, + PackageId, + ParsedCommandLine, + ProjectId, + ProjectReference, + RawCompilerOptions, + ReadConfigFileResponse, + RequestTiming, + ResolutionMode, + ResolvedModule, + ResolvedTypeReferenceDirective, + ResolveModuleNameResult, + SourceFileMetadata, + StaticModuleResolution, + StringLiteralType, + StringMappingType, + StructuredType, + SubstitutionType, + SyntheticProjectId, + TemplateLiteralType, + TextEdit, + ThisTypePredicate, + TimingAccumulators, + TimingInfo, + TupleType, + TupleTypeReference, + Type, + TypeAcquisition, + TypeParameter, + TypePredicate, + TypePredicateBase, + TypeReference, + UnionOrIntersectionType, + UnionType, + UserPreferences, +}; + +export interface ModuleResolverOptions { + moduleResolutions?: ModuleResolutionSpec | undefined; + resolveModuleName?: ResolveModuleNameCallback | undefined; +} + +export interface ResolveModuleNameCallbackOptions { + snapshot: Snapshot | InProgressSnapshot | undefined; +} + +declare const inProgressSnapshotBrand: unique symbol; +export type InProgressSnapshot = number & { readonly [inProgressSnapshotBrand]: never; }; + +export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined | Promise; // @sync: export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined; + +export type CreateProgramOptions = Omit & { + moduleResolver?: ModuleResolver | undefined; + projectReferences?: readonly (Omit & { path: string; })[] | undefined; +}; +export type CreateSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; +export type ReconfigureSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; +export type CreateSnapshotParams = Omit & { + createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; + reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; +}; +export type LanguageServerSnapshotChanges = Omit & { + createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; + reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; +}; + +let nextModuleResolutionCallbackId = 0; +function registerModuleResolutionCallback(client: Client, callback: ResolveModuleNameCallback, getSnapshot: (id: number) => Snapshot | undefined): { name: string; dispose: () => void; } { + const name = `resolveModuleName/${++nextModuleResolutionCallbackId}`; + const dispose = client.registerCallback(name, params => { + const { moduleName, containingDirectory, resolutionMode, snapshot: snapshotId, inProgressSnapshot } = params as { + moduleName: string; + containingDirectory: string; + resolutionMode?: ResolutionMode; + snapshot?: number; + inProgressSnapshot?: number; + }; + let snapshot: Snapshot | InProgressSnapshot | undefined = snapshotId === undefined ? undefined : getSnapshot(snapshotId); + if (snapshotId !== undefined && snapshot === undefined) { + throw new Error(`Snapshot ${snapshotId} is inactive`); + } + if (inProgressSnapshot !== undefined) { + snapshot = -inProgressSnapshot as InProgressSnapshot; + } + return callback( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + ); + }); + return { name, dispose }; +} + +export interface TranspileOptions { + compilerOptions?: RawCompilerOptions | undefined; + fileName?: string | undefined; + reportDiagnostics?: boolean | undefined; +} + +export interface TranspileOutput { + outputText: string; + diagnostics?: readonly Diagnostic[] | undefined; + sourceMapText?: string | undefined; +} + +// @sync-only-start +// export { all, defer, type APIRequestGenerator, type AnyAPIRequestGenerator, type AllAPIRequestGenerator, type DeferredAPIRequestGenerator, type ExecutedGeneratorsResults } from "./generatorSupport.ts"; +// import {executeRequestGenerators, type ExecutedGeneratorsResults, type AnyAPIRequestGenerator} from "./generatorSupport.ts"; +// import { sourceFileResponseToUint8Array } from "../node/encoder.ts"; +// @sync-only-end + +export class API implements FormatDiagnosticsHost { + /** @internal */ + readonly client: Client; + /** @internal */ + readonly sourceFileCache: SourceFileCache; + private toPath: ((fileName: string, basePath?: string) => PathKey) | undefined; + private readonly decoder = new Wtf8Decoder(); + private currentDirectory: RootedDirectoryPath | undefined; + private caseSensitivity: CaseSensitivity | undefined; + private initialized: boolean = false; + private initializing: Promise | undefined; + private activeSnapshots: Map = new Map(); + private activeBuildOrchestrators: Set = new Set(); + private activeSourceFileLeases: Map = new Map(); + readonly printer: Printer; + readonly internal: InternalAPI; + + constructor(options: APIOptions | LSPConnectionOptions = {}) { + this.client = new Client(options); + this.sourceFileCache = new SourceFileCache(); + this.printer = new Printer(this.client); + this.internal = new InternalAPI(this.client, () => this.ensureInitialized()); // @sync: this.internal = new InternalAPI(this.client, this.ensureInitialized); + } + + /** + * Looks up a remote declaration's binder symbol. Throws for synthesized or configuration ASTs. + */ + async getSymbol(declaration: Declaration): Promise { + const file = getRemoteSourceFile(declaration); + if (!file) throw new Error(`Source file not found for declaration`); + const record = file.symbolCache as CachedSourceFile | undefined; + if (!record) throw new Error(`Cached source file not found for declaration`); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + const cached = record.symbolsByDeclarationNodeIndex.get(index); + if (cached) return cached; + // @sync-only-start + // return this.fetchDeclarationSymbol(record, index); + // @sync-only-end + // @sync-skip-block-start + let request = record.declarationSymbolRequests.get(index); + if (!request) { + request = this.fetchDeclarationSymbol(record, index); + record.declarationSymbolRequests.set(index, request); + } + try { + return await request; + } + finally { + record.declarationSymbolRequests.delete(index); + } + // @sync-skip-block-end + } + + private async fetchDeclarationSymbol(record: CachedSourceFile, index: number): Promise { + const data = await this.client.apiRequest("getSymbolOfDeclaration", { + file: record.descriptor, + index, + }); + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.File) { + throw new Error(`Symbol ${reference.id} is not file-owned`); + } + const fileOwner: SourceFileOwner = { record, api: this }; + const symbol = this.sourceFileCache.getOrCreateSymbol( + record, + reference.file, + reference.id, + () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), + ); + record.symbolsByDeclarationNodeIndex.set(index, symbol); + return symbol; + } + + /** + * Create an API instance from an existing LSP connection's API session. + * Use this when connecting to an API pipe provided by an LSP server via custom/initializeAPISession. + */ + static async fromLSPConnection(options: LSPConnectionOptions): Promise> { + const api = new API(options); + await api.ensureInitialized(); + return api; + } + + // @sync-skip-block-start + batchContext(): { [globalThis.Symbol.dispose](): void; } { + return this.client.batchContext(); + } + // @sync-skip-block-end + // @sync-only-start + // batch(...requestGenerators: T): ExecutedGeneratorsResults { + // return executeRequestGenerators(requestGenerators, requests => this.client.batchRequests(requests).responses); + // } + // @sync-only-end + + private async ensureInitialized(): Promise { + if (this.initialized) return; + return this.initializing ??= this.initializeWorker(); + } + + private async initializeWorker(): Promise { + try { + const response = await this.client.apiRequest("initialize", null); + this.currentDirectory = response.currentDirectory; + this.caseSensitivity = response.caseSensitivity; + this.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); + this.initialized = true; + } + catch (error) { + this.initializing = undefined; + throw error; + } + } + + getCurrentDirectory(): RootedDirectoryPath { + if (this.currentDirectory === undefined) { + throw new Error("API has not been initialized"); + } + return this.currentDirectory; + } + + getCanonicalFileName(fileName: string): string { + return canonicalize(fileName, this.getCaseSensitivity()); + } + + private getCaseSensitivity(): CaseSensitivity { + if (this.caseSensitivity === undefined) { + throw new Error("API has not been initialized"); + } + return this.caseSensitivity; + } + + getNewLine(): string { + return "\n"; + } + + async createBuildOrchestrator(rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Promise { + await this.ensureInitialized(); + const orchestratorResponse = await this.client.apiRequest("createBuildOrchestrator", { + ...buildOrchestratorOptions, + ...buildOrchestratorOptions.overrideCompilerOptions, + cwd: buildOrchestratorOptions.cwd === undefined + ? undefined + : toRootedDirectoryPath(buildOrchestratorOptions.cwd, this.getCurrentDirectory()), + rootNames, + }); + + const orchestrator = new BuildOrchestrator(this.client, orchestratorResponse, () => { + this.activeBuildOrchestrators.delete(orchestrator); + }); + this.activeBuildOrchestrators.add(orchestrator); + return orchestrator; + } + + async parseConfigFile(file: DocumentIdentifier): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("parseConfigFile", { file }); + } + + async parseCommandLine(commandLine: readonly string[]): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("parseCommandLine", { commandLine }); + } + + async readConfigFile(file: DocumentIdentifier): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("readConfigFile", { file }); + } + + async parseJsonConfigFileContent( + json: any, + options: + | { configDirectory: string; configFileName?: never; } + | { configFileName: DocumentIdentifier; configDirectory?: never; }, + ): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("parseJsonConfigFileContent", { json, ...options }); + } + + /** + * Create and retain a source file independently of a program. + * Dispose the returned lease when the source file no longer needs to remain available remotely. + */ + async createSourceFile(fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): Promise { + await this.ensureInitialized(); + const data = await this.client.apiRequestBinary("createSourceFile", { fileName, sourceText, options }); + if (!data) { + throw new Error("createSourceFile returned no source file"); + } + return this.retainSourceFileResponse(data); + } + + /** + * Read, create, and retain a source file independently of a program. + * Dispose the returned lease when the source file no longer needs to remain available remotely. + */ + async createSourceFileFromFile(file: DocumentIdentifier, options: CreateSourceFileOptions = {}): Promise { + await this.ensureInitialized(); + const data = await this.client.apiRequestBinary("createSourceFileFromFile", { fileName: resolveFileName(file), options }); + if (!data) { + throw new Error("createSourceFileFromFile returned no source file"); + } + return this.retainSourceFileResponse(data); + } + + /** + * Retain an ordinary remote source file independently of the snapshot or lease that produced it. + */ + async retainSourceFile(sourceFile: SourceFile): Promise { + await this.ensureInitialized(); + if (!(sourceFile instanceof RemoteSourceFile)) { + throw new TypeError("Only remote source files can be retained"); + } + const cached = this.sourceFileCache.get(sourceFile); + if (cached && cached !== sourceFile) { + throw new Error("Source file is no longer the canonical cached instance"); + } + const result = await this.client.apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); + return this.addSourceFileLease(sourceFile, result.lease); + } + + private retainSourceFileResponse(data: Uint8Array): RetainedSourceFile { + const view = new DataView(data.buffer, data.byteOffset, data.byteLength); + const lease = readSourceFileLease(view); + try { + const decoded = new RemoteSourceFile(data, this.decoder, this.client.getTimingCollector(), this); + return this.addSourceFileLease(decoded, lease); + } + catch (error) { + // @sync-skip-block-start + void this.client.apiRequest("releaseSourceFile", { lease }).catch(() => {}); + // @sync-skip-block-end + // @sync-only-start + // try { + // this.client.apiRequest("releaseSourceFile", { lease }); + // } + // catch {} + // @sync-only-end + throw error; + } + } + + private addSourceFileLease(sourceFile: RemoteSourceFile, lease: number): RetainedSourceFile { + const cached = this.sourceFileCache.setForLease(sourceFile, lease); + const retained = new RetainedSourceFile(cached as unknown as SourceFile, lease, () => { + this.activeSourceFileLeases.delete(lease); + this.sourceFileCache.releaseLease(lease); + }); + this.activeSourceFileLeases.set(lease, retained); + return retained; + } + + async transpileModule(input: string, options: TranspileOptions = {}): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("transpileModule", { input, options }); + } + + async transpileModuleFromFile(file: DocumentIdentifier, options: TranspileOptions = {}): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); + } + + async transpileDeclaration(input: string, options: TranspileOptions = {}): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("transpileDeclaration", { input, options }); + } + + async transpileDeclarationFromFile(file: DocumentIdentifier, options: TranspileOptions = {}): Promise { + await this.ensureInitialized(); + return this.client.apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); + } + + createSnapshot< + const CreatePrograms extends CreateSnapshotParams["createPrograms"] = undefined, + const OpenFiles extends CreateSnapshotParams["openFiles"] = undefined, + >(params: SnapshotOperationParams): Promise>; + createSnapshot(): Promise; + async createSnapshot(params?: CreateSnapshotParams): Promise { + await this.ensureInitialized(); + + const requestParams = toCreateSnapshotRequest(this.prepareCreateSnapshotParams(params)); + const data = await this.client.apiRequest("createSnapshot", requestParams); + + const snapshot = new Snapshot( + data, + this.toPath!, + this, + () => { + this.activeSnapshots.delete(snapshot.id); + this.sourceFileCache.releaseSnapshot(snapshot.id); + }, + this.createSnapshotUpdater(() => snapshot), + undefined, + ); + this.activeSnapshots.set(snapshot.id, snapshot); + + return snapshot; + } + + private async updateSnapshot(baseSnapshot: Snapshot, params: CreateSnapshotParams): Promise { + await this.ensureInitialized(); + if (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot update an inactive snapshot"); + } + + const data = await this.client.apiRequest("updateSnapshot", { + snapshot: baseSnapshot.id, + changes: toCreateSnapshotRequest(this.prepareCreateSnapshotParams(params)), + }); + if (data.snapshot === baseSnapshot.id) { + await this.client.apiRequest("release", { snapshot: data.snapshot }); + return baseSnapshot; + } + this.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + const snapshot = new Snapshot( + data, + this.toPath!, + this, + () => { + this.activeSnapshots.delete(snapshot.id); + this.sourceFileCache.releaseSnapshot(snapshot.id); + }, + this.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + this.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + } + + private prepareCreateSnapshotParams(params: CreateSnapshotParams | undefined): ProtocolCreateSnapshotParams | undefined { + if (!params) return undefined; + const prepareOptions = (options: CreateProgramOptions | undefined): ProtocolCreateProgramOptions | undefined => { + if (!options) return undefined; + const { moduleResolver, projectReferences, ...rest } = options; + moduleResolver?.ensureNotDisposed(); + return { + ...rest, + moduleResolver: moduleResolver?.id, + projectReferences: projectReferences?.map(reference => ({ + ...reference, + path: toRootedPath(reference.path, this.getCurrentDirectory()), + })), + }; + }; + return { + ...params, + createPrograms: params.createPrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), + reconfigurePrograms: params.reconfigurePrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), + }; + } + + private prepareLanguageServerSnapshotChanges(changes: LanguageServerSnapshotChanges | undefined): ProtocolLanguageServerSnapshotChanges | undefined { + if (!changes) return undefined; + const prepared = this.prepareCreateSnapshotParams(changes); + return prepared; + } + + private createSnapshotUpdater(getSnapshot: () => Snapshot): SnapshotUpdater { + const update: SnapshotUpdater = params => this.updateSnapshot(getSnapshot(), params); // @sync: const update = ((params: CreateSnapshotParams) => this.updateSnapshot(getSnapshot(), params)) as SnapshotUpdater; + // @sync-only-start + // const owner = this; + // update.gen = function* (params: CreateSnapshotParams) { return yield* owner.updateSnapshot.gen(getSnapshot(), params); }; + // @sync-only-end + return update; + } + + /** + * Returns the language server's current canonical snapshot after atomically + * adopting any supplied API-driven changes. Only available on LSP-connected APIs. + */ + getCurrentLanguageServerSnapshot< + const CreatePrograms extends LanguageServerSnapshotChanges["createPrograms"] = undefined, + const OpenFiles extends LanguageServerSnapshotChanges["openFiles"] = undefined, + >( + ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] + : [changes: never, baseSnapshot?: never] + ): Promise>; + getCurrentLanguageServerSnapshot( + ...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never] + ): Promise; + async getCurrentLanguageServerSnapshot( + ...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never] + ): Promise { + await this.ensureInitialized(); + + const changes = args[0] as LanguageServerSnapshotChanges | undefined; + const baseSnapshot = args[1] as Snapshot | undefined; + if (baseSnapshot && (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { + throw new Error("Cannot use an inactive snapshot as a response base"); + } + const data = await this.client.apiRequest("getCurrentLanguageServerSnapshot", { + baseSnapshot: baseSnapshot?.id, + changes: this.prepareLanguageServerSnapshotChanges(changes), + }); + if (baseSnapshot) { + this.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + } + const snapshot = new Snapshot( + data, + this.toPath!, + this, + () => { + this.activeSnapshots.delete(snapshot.id); + this.sourceFileCache.releaseSnapshot(snapshot.id); + }, + this.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + this.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + } + + async [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { + await this.close(); // @sync: this.close(); + } + + async close(): Promise { + await this.initializing?.catch(() => {}); // @sync-skip + try { + for (const retained of [...this.activeSourceFileLeases.values()]) { + await retained.dispose(); + } + } + finally { + try { + for (const orchestrator of [...this.activeBuildOrchestrators]) { + await orchestrator.dispose(); + } + for (const snapshot of [...this.activeSnapshots.values()]) { + await snapshot.dispose(); + } + this.sourceFileCache.clear(); + } + finally { + await this.client.close(); // always close the underlying connection + } + } + } + + async createModuleResolver(compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Promise { + await this.ensureInitialized(); + const callback = options?.resolveModuleName + ? registerModuleResolutionCallback(this.client, options.resolveModuleName, id => this.activeSnapshots.get(id)) + : undefined; + try { + const id = await this.client.apiRequest("createModuleResolver", { + compilerOptions: prepareCompilerOptions(compilerOptions, this.getCurrentDirectory()), + moduleResolutions: options?.moduleResolutions, + resolveModuleNameCallback: callback?.name, + }); + return new ModuleResolver(id, this.client, callback?.dispose); + } + catch (error) { + callback?.dispose(); + throw error; + } + } + + clearSourceFileCache(): void { + this.sourceFileCache.clear(); + } + + async runWithTemporaryFileUpdate(baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Promise): Promise { + await this.ensureInitialized(); + + if (this.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot run a temporary file update on an inactive snapshot"); + } + const snapshot = await baseSnapshot.update({ + fileSystem: { + kind: "layer", + files: { [resolveFileName(file)]: newText }, + }, + ensurePrograms: true, + }); + + try { + await cb(snapshot); + } + finally { + await snapshot.dispose(); + } + } + + /** + * Returns a snapshot of collected timing information for requests made + * through this API instance: client-measured round-trip latency and bytes + * transferred, folded together with the server's own per-request processing + * time and an estimated transport overhead (round-trip minus server time). + * + * Fetching the snapshot issues a lightweight request to the server to + * retrieve its timing collection. Collection must be enabled via the + * `collectTiming` option; when it is not, the returned snapshot has + * `enabled: false` and zeroed totals. + */ + getTimingInfo(): Promise { + return this.client.getTimingInfo(); + } + + /** Clears all accumulated timing totals and recent-request history, on both the client and the server. */ + resetTimingInfo(): Promise { + return this.client.resetTimingInfo(); + } + + /** Creates a program from current filesystem state. */ + async createProgram( + rootFiles: readonly DocumentIdentifier[], + compilerOptions: RawCompilerOptions, + createProgramOptions?: CreateProgramOptions, + ): Promise { + await this.ensureInitialized(); + + const snapshot = await this.createSnapshot({ + createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], + }); + const program = snapshot.operation.createdPrograms![0]; + if (!program) { + await snapshot.dispose(); + throw new Error("createProgram did not return a project"); + } + program.setOwnedSnapshot(snapshot); + return program; + } +} + +type EnsureInitialized = () => Promise; // @sync: type EnsureInitialized = (() => void) & { gen(): Generator; }; + +function sourceFileDescriptor(sourceFile: RemoteSourceFile): SourceFileDescriptor { + return { + fileName: sourceFile.fileName, + path: sourceFile.path, + contentHash: sourceFile.contentHash, + parseOptionsKey: sourceFile.parseOptionsKey, + scriptKind: sourceFile.scriptKind, + nodeId: sourceFile.nodeId, + }; +} + +function getRemoteSourceFile(node: Node): RemoteSourceFile | undefined { + if (!(node instanceof RemoteNode)) return undefined; + const file = node.getSourceFile(); + return file instanceof RemoteSourceFile && file.api ? file : undefined; +} + +function getNodeAPI(node: Node): API | undefined { + const api = getRemoteSourceFile(node)?.api; + if (!api) return undefined; + if (!(api instanceof API)) throw new Error("Source file does not belong to the async API"); // @sync: if (!(api instanceof API)) throw new Error("Source file does not belong to the sync API"); + return api; +} + +/** Looks up a remote declaration's binder symbol through its API. Throws for non-remote declarations. */ +export async function getSymbol(declaration: Declaration): Promise { + const api = getNodeAPI(declaration); + if (!api) throw new Error("Source file not found for declaration"); + return api.getSymbol(declaration); +} + +// @sync-only-start +// export declare namespace getSymbol { +// function gen(declaration: Declaration): Generator; +// } +// getSymbol.gen = function* (declaration: Declaration): Generator { +// const api = getNodeAPI(declaration); +// if (!api) throw new Error("Source file not found for declaration"); +// return yield* api.getSymbol.gen(declaration); +// }; +// @sync-only-end + +/** An independently retained source file and its disposable remote-lifetime lease. */ +export class RetainedSourceFile { + readonly sourceFile: SourceFile; + private readonly lease: number; + private readonly onDispose: () => void; + private disposed = false; + private disposePromise: Promise | undefined; + + constructor(sourceFile: SourceFile, lease: number, onDispose: () => void) { + this.sourceFile = sourceFile; + this.lease = lease; + this.onDispose = onDispose; + } + + [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { + return this.dispose(); // @sync: this.dispose(); + } + + dispose(): Promise { + return this.disposePromise ??= this.disposeWorker(); + } + + private async disposeWorker(): Promise { + if (this.disposed) return; + const api = getNodeAPI(this.sourceFile); + if (!api) throw new Error("Retained source file has no owning API"); + this.disposed = true; + try { + await api.client.apiRequest("releaseSourceFile", { lease: this.lease }); + } + finally { + this.onDispose(); + } + } +} + +export class InternalAPI { + private client: Client; + private ensureInitialized: EnsureInitialized; + + /** @internal */ + constructor(client: Client, ensureInitialized: EnsureInitialized) { + this.client = client; + this.ensureInitialized = ensureInitialized; + } + + async startCPUProfile(dir: string): Promise { + await this.ensureInitialized(); + await this.client.apiRequest("startCPUProfile", { dir }); + } + + async stopCPUProfile(): Promise { + await this.ensureInitialized(); + const result = await this.client.apiRequest("stopCPUProfile", null); + return result.file; + } + + async saveHeapProfile(dir: string): Promise { + await this.ensureInitialized(); + const result = await this.client.apiRequest("saveHeapProfile", { dir }); + return result.file; + } +} + +type SnapshotUpdater = (params: CreateSnapshotParams) => Promise; // @sync: type SnapshotUpdater = ((params: CreateSnapshotParams) => Snapshot) & { gen(params: CreateSnapshotParams): Generator; }; + +export interface SnapshotOperation { + readonly createdPrograms?: readonly Program[] | undefined; + readonly openedFiles?: readonly SnapshotOpenedFileOperation[] | undefined; +} + +export interface SnapshotOpenedFileOperation { + readonly project: Project; +} + +/** Replaces every element of a tuple while preserving its length and index structure. */ +type MapTupleTo = { + readonly [Index in keyof Tuple]: Result; +}; + +/** + * Keeps `Tuple` as an inference target while contextually typing each element from + * `Elements`. The mapped intersection supplies nested completions and excess-property + * checks without widening an inferred tuple to an array. + */ +type ContextualizeTuple< + Tuple extends readonly unknown[] | undefined, + Elements extends readonly unknown[] | undefined, +> = + & Tuple + & { + readonly [Index in keyof Tuple]: NonNullable[number]; + }; + +/** Substitutes the operation arrays with contextually typed, tuple-preserving versions. */ +type SnapshotOperationParams< + Params extends { createPrograms?: readonly unknown[] | undefined; openFiles?: readonly unknown[] | undefined; }, + CreatePrograms extends Params["createPrograms"], + OpenFiles extends Params["openFiles"], +> = Omit & { + createPrograms?: ContextualizeTuple | undefined; + openFiles?: ContextualizeTuple | undefined; +}; + +/** + * Refines a snapshot's operation results to required tuples when the corresponding + * operation arrays were supplied, preserving their lengths for indexed access. + */ +type SnapshotForOperationResults< + CreatePrograms extends readonly unknown[] | undefined, + OpenFiles extends readonly unknown[] | undefined, +> = Snapshot & { + readonly operation: + & SnapshotOperation + & (CreatePrograms extends readonly unknown[] ? { readonly createdPrograms: MapTupleTo>; } : unknown) + & (OpenFiles extends readonly unknown[] ? { readonly openedFiles: MapTupleTo; } : unknown); +}; + +/** Derives the refined snapshot result type from a complete operation parameter type. */ +export type SnapshotForOperation = SnapshotForOperationResults< + Params extends { createPrograms: infer CreatePrograms extends readonly unknown[]; } ? CreatePrograms : undefined, + Params extends { openFiles: infer OpenFiles extends readonly unknown[]; } ? OpenFiles : undefined +>; + +export class Snapshot { + readonly id: number; + readonly operation: SnapshotOperation; + private projectMap: Map; + private toPath: (fileName: string, basePath?: string) => PathKey; + private readonly api: API; + private disposed: boolean = false; + private disposePromise: Promise | undefined; + private onDispose: () => void; + private snapshotRegistry: SnapshotObjectRegistry; + private projectDataMap: Map; + private updateSnapshot: SnapshotUpdater; + readonly internal: SnapshotInternalAPI; + + private get client(): Client { + return this.api.client; + } + + constructor(data: CreateSnapshotResponse, toPath: (fileName: string, basePath?: string) => PathKey, api: API, onDispose: () => void, updateSnapshot: SnapshotUpdater, baseSnapshot?: Snapshot) { + this.id = data.snapshot; + this.api = api; + this.toPath = toPath; + this.onDispose = onDispose; + this.updateSnapshot = updateSnapshot; + this.projectMap = new Map(); + const projectDataMap = new Map(baseSnapshot?.projectDataMap); + for (const projectId of data.changes?.removedProjects ?? []) { + projectDataMap.delete(projectId); + } + for (const projectData of data.projects) { + projectDataMap.set(projectData.id, projectData); + } + this.projectDataMap = new Map([...projectDataMap].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)); + this.snapshotRegistry = new SnapshotObjectRegistry(this.id); + + for (const projData of this.projectDataMap.values()) { + const project = new Project(projData, this.id, toPath, api, this.snapshotRegistry); + this.projectMap.set(projData.id, project); + } + + this.operation = { + createdPrograms: data.operation.createdPrograms?.map(projectId => this.requireProject(projectId).program), + openedFiles: data.operation.openedFiles?.map(result => ({ project: this.requireProject(result.project) })), + }; + + this.internal = new SnapshotInternalAPI(this.id, api.client); + } + + getProjects(): readonly Project[] { + this.ensureNotDisposed(); + return [...this.projectMap.values()]; + } + + getConfiguredProject(configFileName: string): Project | undefined { + this.ensureNotDisposed(); + const id = this.toPath(configFileName) as ConfiguredProjectId; + return this.projectMap.get(id) as Project | undefined; + } + + getProject(projectId: Id): Project | undefined { + this.ensureNotDisposed(); + return this.projectMap.get(projectId) as Project | undefined; + } + + getProgram(projectId: Id): Program | undefined { + return this.getProject(projectId)?.program; + } + + update< + const CreatePrograms extends CreateSnapshotParams["createPrograms"] = undefined, + const OpenFiles extends CreateSnapshotParams["openFiles"] = undefined, + >(params: SnapshotOperationParams): Promise>; + update(params: CreateSnapshotParams): Promise; + update(params: CreateSnapshotParams): Promise { + this.ensureNotDisposed(); + return this.updateSnapshot(params); + } + + /** + * Gets the default project for a given file from the configured projects and + * inferred project already loaded in the snapshot. Synthetic projects are not + * considered. Files that have been opened with `openFiles` are guaranteed to + * have a result. + */ + async getDefaultProjectForFile(file: DocumentIdentifier): Promise { + this.ensureNotDisposed(); + const data = await this.client.apiRequest("getDefaultProjectForFile", { + snapshot: this.id, + file, + }); + if (!data) return undefined; + return this.projectMap.get(data.id); + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + dispose(): Promise { + return this.disposePromise ??= this.disposeWorker(); + } + + private async disposeWorker(): Promise { + if (this.disposed) return; + this.disposed = true; + for (const project of this.projectMap.values()) { + project.dispose(); + } + this.projectMap.clear(); + this.snapshotRegistry.clear(); + try { + await this.client.apiRequest("release", { snapshot: this.id }); + } + finally { + this.onDispose(); + } + } + + isDisposed(): boolean { + return this.disposed; + } + + private ensureNotDisposed(): void { + if (this.disposed) { + throw new Error("Snapshot is disposed"); + } + } + + private requireProject(projectId: Id): Project { + const project = this.projectMap.get(projectId); + if (!project) { + throw new Error(`Snapshot operation returned unknown project '${projectId}'`); + } + return project as Project; + } +} + +export class ModuleResolver { + readonly id: number; + private readonly client: Client; + private readonly disposeCallback: (() => void) | undefined; + private disposed = false; + + constructor(id: number, client: Client, disposeCallback: (() => void) | undefined) { + this.id = id; + this.client = client; + this.disposeCallback = disposeCallback; + } + + async resolveModuleName( + moduleName: string, + containingDirectory: DocumentIdentifier, + resolutionMode?: ResolutionMode, + options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }, + ): Promise { + this.ensureNotDisposed(); + if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { + throw new Error("Snapshot is disposed"); + } + return this.client.apiRequest("resolveModuleName", { + snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, + inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, + resolver: this.id, + moduleName, + containingDirectory, + resolutionMode, + }); + } + + [globalThis.Symbol.asyncDispose](): Promise { // @sync: [globalThis.Symbol.dispose](): void { + return this.dispose(); + } + + async dispose(): Promise { + if (this.disposed) return; + await this.client.apiRequest("releaseModuleResolver", { resolver: this.id }); + this.disposed = true; + this.disposeCallback?.(); + } + + /** @internal */ + ensureNotDisposed(): void { + if (this.disposed) throw new Error("ModuleResolver is disposed"); + } +} + +class SnapshotObjectRegistry { + private readonly symbols: Map = new Map(); + private readonly projectRegistries: Map = new Map(); + private readonly snapshotId: number; + + constructor(snapshotId: number) { + this.snapshotId = snapshotId; + } + + addProjectRegistry(registry: ProjectObjectRegistry): void { + this.projectRegistries.set(registry.project.id, registry); + } + + getOrCreateSymbol(data: SymbolResponse): Symbol { + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.Snapshot) throw new Error(`Symbol ${reference.id} is not snapshot-owned`); + let symbol = this.symbols.get(reference.id); + if (!symbol) { + if (reference.snapshot !== this.snapshotId) { + throw new Error(`Symbol ${reference.id} belongs to snapshot ${reference.snapshot}, not ${this.snapshotId}`); + } + const registry = this.projectRegistries.get(reference.project); + if (!registry) throw new Error(`Symbol ${reference.id} references unknown project '${reference.project}'`); + symbol = new Symbol(data, { kind: SymbolOwnerKind.Snapshot, registry }); + this.symbols.set(reference.id, symbol); + } + return symbol; + } + + getSymbol(id: number): Symbol | undefined { + return this.symbols.get(id); + } + + clear(): void { + this.symbols.clear(); + } +} + +class ProjectObjectRegistry { + private snapshotId: number; + readonly project: Project; + private snapshotRegistry: SnapshotObjectRegistry; + private types: Map = new Map(); + private signatures: Map = new Map(); + private disposed = false; + + private get client(): Client { + return this.project.api.client; + } + + private get sourceFileCache(): SourceFileCache { + return this.project.api.sourceFileCache; + } + + constructor(snapshotId: number, project: Project, snapshotRegistry: SnapshotObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.snapshotRegistry = snapshotRegistry; + snapshotRegistry.addProjectRegistry(this); + } + + getOrCreateSymbol(data: ProtocolSymbolResponse): Symbol { + this.ensureNotDisposed(); + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind === SymbolOwnerKind.Snapshot) { + return this.snapshotRegistry.getOrCreateSymbol(data); + } + const record = this.sourceFileCache.getOrCreateRecord(reference.file, this.snapshotId, this.project.id); + return this.sourceFileCache.getOrCreateSymbol(record, reference.file, reference.id, () => + new Symbol(data, { + kind: SymbolOwnerKind.File, + owner: { record, api: this.project.api }, + })); + } + + /** Find an already-interned symbol and retain its file record for this registry. */ + getCachedSymbol(reference: CompactSymbolReference): Symbol | undefined { + this.ensureNotDisposed(); + if (reference.file === undefined) { + return this.snapshotRegistry.getSymbol(reference.id); + } + const record = this.sourceFileCache.findRecord(reference.file); + const symbol = record?.symbolsById.get(reference.id); + if (record && symbol) { + this.sourceFileCache.retainRecord(record, this.snapshotId, this.project.id); + } + return symbol; + } + + getOrCreateType(data: TypeResponse): TypeObject { + let type = this.types.get(data.id); + if (!type) { + type = new TypeObject(data, this); + this.types.set(data.id, type); + } + return type; + } + + getType(id: number): TypeObject | undefined { + return this.types.get(id); + } + + createNodeHandle(handle: string): NodeHandle { + return new NodeHandle(handle, this.project); + } + + getOrCreateSignature(data: SignatureResponse): Signature { + let sig = this.signatures.get(data.id); + if (!sig) { + sig = new Signature(data, this.project, this); + this.signatures.set(data.id, sig); + } + return sig; + } + + getSignature(id: number): Signature | undefined { + return this.signatures.get(id); + } + + clear(): void { + this.disposed = true; + this.types.clear(); + this.signatures.clear(); + } + + private ensureNotDisposed(): void { + if (this.disposed) throw new Error("Project object registry is disposed"); + } + + async fetchOptionalType(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Promise { + if (handle !== false) { + if (!handle) return undefined; + const cached = this.getType(handle); + if (cached) return cached as unknown as T; + } + + const data = await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + if (!data) return undefined; + return this.getOrCreateType(data) as unknown as T; + } + + async fetchType(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Promise { + const result = await this.fetchOptionalType(source, method, handle); + if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); + return result; + } + + async fetchSymbol(source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Promise { + if (!reference) return undefined as unknown as Symbol; + const cached = this.getCachedSymbol(reference); + if (cached) return cached; + const data = source instanceof Symbol + ? await this.client.apiRequest(method, { symbol: source.reference }) + : await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); + return this.getOrCreateSymbol(data); + } + + async fetchSignature(source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Promise { + if (!handle) return undefined as unknown as Signature; + const cached = this.getSignature(handle); + if (cached) return cached; + + const data = await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); + return this.getOrCreateSignature(data); + } + + async fetchTypes(source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Promise { + if (handles) { + const result = new Array(handles.length); + let allCached = true; + for (let i = 0; i < handles.length; i++) { + const cached = this.getType(handles[i]); + if (!cached) { + allCached = false; + break; + } + result[i] = cached; + } + if (allCached) return result; + } + const typesData = await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + if (typesData == null) return []; + else return typesData.map(data => this.getOrCreateType(data)); + } + + async fetchSymbols(source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Promise { + if (references) { + const result = new Array(references.length); + for (let i = 0; i < references.length; i++) { + const cached = this.getCachedSymbol(references[i]); + if (!cached) { + return this.fetchSymbolsFromServer(source, method); + } + result[i] = cached; + } + return result; + } + return this.fetchSymbolsFromServer(source, method); + } + + private async fetchSymbolsFromServer(source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Promise { + const data = source instanceof Symbol + ? await this.client.apiRequest(method, { symbol: source.reference }) + : await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + return data?.map(symbol => this.getOrCreateSymbol(symbol)) ?? []; + } + + // getBaseTypes is a checker-level endpoint keyed by `type` (not `objectId`), + // so it cannot go through fetchTypes. This helper reuses that server method. + async fetchBaseTypes(source: Type): Promise { + const typesData = await this.client.apiRequest("getBaseTypes", { + snapshot: this.snapshotId, + project: this.project.id, + type: source.id, + }); + if (typesData == null) return []; + return typesData.map(data => this.getOrCreateType(data)); + } + + async fetchPropertiesOfType(source: Type): Promise { + const data = await this.client.apiRequest("getPropertiesOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: source.id, + }); + return data ? data.map(symbol => this.getOrCreateSymbol(symbol)) : []; + } + + async fetchApparentPropertiesOfType(source: Type): Promise { + const data = await this.client.apiRequest("getApparentPropertiesOfType", { + snapshot: this.snapshotId, + project: this.project.id, + objectId: source.id, + }); + return data ? data.map(symbol => this.getOrCreateSymbol(symbol)) : []; + } + + async fetchPropertyOfType(source: Type, name: string): Promise { + const data = await this.client.apiRequest("getPropertyOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: source.id, + name, + }); + return data ? this.getOrCreateSymbol(data) : undefined; + } + + async fetchSignaturesOfType(source: Type, kind: SignatureKind): Promise { + const data = await this.client.apiRequest("getSignaturesOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: source.id, + kind, + }); + return data.map(signature => this.getOrCreateSignature(signature)); + } + + async fetchIndexInfosOfType(source: Type): Promise { + const data = await this.client.apiRequest("getIndexInfosOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: source.id, + }); + if (!data) return []; + return data.map(info => ({ + keyType: this.getOrCreateType(info.keyType), + valueType: this.getOrCreateType(info.valueType), + isReadonly: info.isReadonly ?? false, + declaration: info.declaration ? new NodeHandle(info.declaration, this.project) : undefined, + })); + } + + async fetchTypeParameterAtPosition(source: Signature, pos: number): Promise { + const data = await this.client.apiRequest("getTypeParameterAtPosition", { + snapshot: this.snapshotId, + project: this.project.id, + signature: source.id, + index: pos, + }); + return this.getOrCreateType(data); + } +} + +export class Project { + /** @internal */ + readonly api: API; + readonly id: Id; + readonly configFileName: RootedFilePath | undefined; + readonly currentDirectory: RootedDirectoryPath; + readonly dirty: boolean; + readonly parsedCommandLine: ParsedCommandLine; + /** @deprecated Use `parsedCommandLine.options`. */ + readonly compilerOptions: CompilerOptions; + /** @deprecated Use `parsedCommandLine.fileNames`. */ + readonly rootFiles: readonly RootedFilePath[]; + + readonly program: Program; + readonly checker: Checker; + readonly languageService: LanguageService; + private snapshotId: number; + + constructor(data: ProjectResponse, snapshotId: number, toPath: (fileName: string, basePath?: string) => PathKey, api: API, snapshotRegistry: SnapshotObjectRegistry) { + this.id = data.id as Id; + this.api = api; + this.configFileName = data.configFileName; + this.currentDirectory = data.currentDirectory; + this.dirty = data.dirty; + if (!data.parsedCommandLine?.options) { + throw new Error(`Project '${data.configFileName}' has no parsed command line`); + } + this.parsedCommandLine = data.parsedCommandLine; + this.compilerOptions = this.parsedCommandLine.options; + this.rootFiles = this.parsedCommandLine.fileNames; + this.snapshotId = snapshotId; + this.program = new Program(snapshotId, this, toPath); + const objectRegistry = new ProjectObjectRegistry(snapshotId, this, snapshotRegistry); + this.checker = new Checker(snapshotId, this, objectRegistry); + this.languageService = new LanguageService(snapshotId, this, objectRegistry); + } + + /** @deprecated Use `languageService.getImportAdderEdits`. */ + getImportAdderEdits(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Promise { + return this.languageService.getImportAdderEdits(file, actions); + } + + /** @deprecated Use `languageService.getImportEditsForSymbols`. */ + getImportEditsForSymbols(file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Promise { + return this.languageService.getImportEditsForSymbols(file, symbols, options); + } + + dispose(): void { + this.checker.dispose(); + } +} + +export class LanguageService { + private snapshotId: number; + private project: Project; + private objectRegistry: ProjectObjectRegistry; + + private get client(): Client { + return this.project.api.client; + } + + constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.objectRegistry = objectRegistry; + } + + async getImportAdderEdits(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Promise { + const requestActions: ImportAdderAction[] = actions.map(action => { + switch (action.kind) { + case "importSymbol": + const importSymbolAction: ImportAdderAction = { + kind: "importSymbol", + symbol: action.symbol.reference, + }; + if (action.isValidTypeOnlyUseSite !== undefined) { + importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; + } + return importSymbolAction; + default: + return assertNever(action.kind); + } + }); + + const data = await this.client.apiRequest("getImportAdderEdits", { + snapshot: this.snapshotId, + project: this.project.id, + file, + actions: requestActions, + }); + return data ?? []; + } + + async getImportEditsForSymbols(file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Promise { + return this.getImportAdderEdits( + file, + symbols.map((symbol): APIImportAdderAction => { + if (options.isValidTypeOnlyUseSite !== undefined) { + return { + kind: "importSymbol", + symbol, + isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, + }; + } + return { + kind: "importSymbol", + symbol, + }; + }), + ); + } + + async getReferencedSymbolsForNode(node: Node, position: number): Promise { + const data = await this.client.apiRequest("getReferencedSymbolsForNode", { + snapshot: this.snapshotId, + project: this.project.id, + node: getNodeId(node), + position, + }); + return (data ?? []).map(entry => ({ + definition: new NodeHandle(entry.definition, this.project), + symbol: entry.symbol ? this.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, + references: (entry.references ?? []).map(h => new NodeHandle(h, this.project)), + })); + } + + async getSignatureUsage(signatureDecl: Node): Promise { + const data = await this.client.apiRequest("getSignatureUsages", { + snapshot: this.snapshotId, + project: this.project.id, + signatureDecl: getNodeId(signatureDecl), + }); + return (data ?? []).map(entry => ({ + name: new NodeHandle(entry.name, this.project), + call: entry.call ? new NodeHandle(entry.call, this.project) : undefined, + })); + } + + async getCompletionsAtPosition(document: string, position: number, options?: CompletionOptions): Promise { + const data = await this.client.apiRequest("getCompletionsAtPosition", { + snapshot: this.snapshotId, + project: this.project.id, + file: document, + position, + triggerCharacter: options?.triggerCharacter, + includeSymbol: options?.includeSymbol, + }); + if (!data) return undefined; + return { + isIncomplete: data.isIncomplete, + entries: data.entries.map(e => ({ + ...e, + symbol: e.symbol ? this.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, + })), + }; + } +} + +export class Program implements FormatDiagnosticsHost { + /** @internal */ + readonly snapshotId: number; + readonly id: Id; + private readonly project: Project; + private readonly toPath: (fileName: string, basePath?: string) => PathKey; + private readonly decoder = new Wtf8Decoder(); + private readonly sourceFileMetadataCache = new Map>(); + private ownedSnapshot: Snapshot | undefined; + private disposePromise: Promise | undefined; + + private get client(): Client { + return this.project.api.client; + } + + private get sourceFileCache(): SourceFileCache { + return this.project.api.sourceFileCache; + } + + constructor(snapshotId: number, project: Project, toPath: (fileName: string, basePath?: string) => PathKey) { + this.snapshotId = snapshotId; + this.id = project.id; + this.project = project; + this.toPath = toPath; + } + + getCurrentDirectory(): RootedDirectoryPath { + return this.project.currentDirectory; + } + + getCanonicalFileName(fileName: string): string { + return this.project.api.getCanonicalFileName(fileName); + } + + getNewLine(): string { + return this.project.compilerOptions.newLine === NewLineKind.CRLF ? "\r\n" : "\n"; + } + + /** @internal */ + setOwnedSnapshot(snapshot: Snapshot): void { + this.ownedSnapshot = snapshot; + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + + dispose(): Promise { + return this.disposePromise ??= this.disposeWorker(); + } + + private async disposeWorker(): Promise { + const snapshot = this.ownedSnapshot; + this.ownedSnapshot = undefined; + if (snapshot) await snapshot.dispose(); + } + + getCompilerOptions(): CompilerOptions { + return this.project.compilerOptions; + } + + async getSourceFile(file: DocumentIdentifier): Promise { + const fileName = resolveFileName(file); + const path = this.pathKeyForFileName(fileName); + return this.getSourceFileWorker(file, path); + } + + /** + * Returns the source file for an already-canonical path. + * + * @internal + */ + getSourceFileByPath(path: PathKey): Promise { + // The wire format is a string, but the cache key remains the supplied + // PathKey and is never treated as a RootedPath. + return this.getSourceFileWorker(path, path); + } + + private async getSourceFileWorker(file: DocumentIdentifier, path: PathKey): Promise { + // Check if we already have a retained cache entry for this (snapshot, project) pair + const retained = this.sourceFileCache.getRetained(path, this.snapshotId, this.project.id); + if (retained) { + return retained as unknown as SourceFile; + } + + // Fetch from server + const binaryData = await this.client.apiRequestBinary("getSourceFile", { + snapshot: this.snapshotId, + project: this.project.id, + file, + }); + if (!binaryData) { + return undefined; + } + + // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) + const decoded = new RemoteSourceFile(binaryData, this.decoder, this.client.getTimingCollector(), this.project.api); + return this.sourceFileCache.set(decoded, this.snapshotId, this.project.id) as unknown as SourceFile; + } + + async getResolvedModule( + file: DocumentIdentifier, + moduleName: string, + mode: ModuleKind, + ): Promise { + const result = await this.client.apiRequest("getResolvedModule", { + snapshot: this.snapshotId, + project: this.project.id, + file, + moduleName, + mode, + }); + return result ?? undefined; + } + + async getModeForUsageLocation(file: DocumentIdentifier, usage: StringLiteralLikeNode): Promise { + return this.client.apiRequest("getModeForUsageLocation", { + snapshot: this.snapshotId, + project: this.project.id, + file, + usage: getNodeId(usage), + }); + } + + async getModeForResolutionAtIndex(file: DocumentIdentifier, index: number): Promise { + return this.client.apiRequest("getModeForResolutionAtIndex", { + snapshot: this.snapshotId, + project: this.project.id, + file, + index, + }); + } + + async getResolvedModuleFromModuleSpecifier( + moduleSpecifier: StringLiteralLikeNode, + sourceFile?: DocumentIdentifier, + ): Promise { + const result = await this.client.apiRequest("getResolvedModuleFromModuleSpecifier", { + snapshot: this.snapshotId, + project: this.project.id, + moduleSpecifier: getNodeId(moduleSpecifier), + sourceFile, + }); + return result ?? undefined; + } + + async getResolvedTypeReferenceDirective( + file: DocumentIdentifier, + typeDirectiveName: string, + mode: ModuleKind, + ): Promise { + const result = await this.client.apiRequest("getResolvedTypeReferenceDirective", { + snapshot: this.snapshotId, + project: this.project.id, + file, + typeDirectiveName, + mode, + }); + return result ?? undefined; + } + + async getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( + typeReferenceDirective: FileReference, + sourceFile: DocumentIdentifier, + ): Promise { + const result = await this.client.apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { + snapshot: this.snapshotId, + project: this.project.id, + sourceFile, + typeDirectiveName: typeReferenceDirective.fileName, + resolutionMode: typeReferenceDirective.resolutionMode, + }); + return result ?? undefined; + } + + async getSourceFileNames(): Promise { + const data = await this.client.apiRequest("getSourceFileNames", { + snapshot: this.snapshotId, + project: this.project.id, + }); + return data ?? []; + } + + /** + * Returns program-stored metadata for the given source file, or `undefined` if the file + * is not part of the program. Metadata is fetched lazily per file and cached on this + * `Program` instance. + */ + getSourceFileMetadata(file: DocumentIdentifier): Promise { + return this.getSourceFileMetadataByPath(this.pathKeyForFileName(resolveFileName(file))); + } + + /** + * Returns program-stored metadata for the source file at the given path, or `undefined` + * if the file is not part of the program. Like {@link getSourceFileMetadata}, but skips + * the file name to path conversion. Metadata is fetched lazily per file and cached on + * this `Program` instance. + */ + getSourceFileMetadataByPath(path: PathKey): Promise { + let metadata = this.sourceFileMetadataCache.get(path); + if (metadata === undefined) { + metadata = this.fetchSourceFileMetadata(path); + this.sourceFileMetadataCache.set(path, metadata); + } + return metadata; + } + + private async fetchSourceFileMetadata(path: PathKey): Promise { + // PathKey is serialized as a string; the server deliberately treats all + // client-provided path text as untrusted input. + const data = await this.client.apiRequest("getSourceFileMetadata", { + snapshot: this.snapshotId, + project: this.project.id, + file: path, + }); + return data ?? undefined; + } + + private pathKeyForFileName(fileName: string): PathKey { + return this.toPath(fileName, this.project.currentDirectory); + } + + /** + * Returns whether the given source file was loaded as part of an external library + * (e.g. a dependency resolved from `node_modules`). The underlying program metadata is + * fetched lazily per file and cached on this `Program` instance. + */ + async isSourceFileFromExternalLibrary(file: SourceFile): Promise { + const metadata = await this.getSourceFileMetadataByPath(file.path); + return metadata?.isFromExternalLibrary ?? false; + } + + /** + * Returns whether the given source file is a default library file (e.g. `lib.d.ts`). + * The underlying program metadata is fetched lazily per file and cached on this + * `Program` instance. + */ + async isSourceFileDefaultLibrary(file: SourceFile): Promise { + const metadata = await this.getSourceFileMetadataByPath(file.path); + return metadata?.isDefaultLibrary ?? false; + } + + /** + * Get all config source file names associated with this program's project config. + * Includes the root config file and any extended config files. + */ + async getConfigFileNames(): Promise { + const data = await this.client.apiRequest("getConfigFileNames", { + snapshot: this.snapshotId, + project: this.project.id, + }); + return data ?? []; + } + + /** + * Get a config source file by file name/URI. + * This can return the project's root tsconfig file or one of its extended config files. + */ + async getConfigSourceFile(file: DocumentIdentifier): Promise { + const binaryData = await this.client.apiRequestBinary("getConfigSourceFile", { + snapshot: this.snapshotId, + project: this.project.id, + file, + }); + if (!binaryData) { + return undefined; + } + + return new RemoteSourceFile(binaryData, this.decoder, undefined, this.project.api) as unknown as SourceFile; + } + + /** + * Get syntactic (parse) diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + async getSyntacticDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = await this.client.apiRequest("getSyntacticDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return data ?? []; + } + + /** + * Get binder diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + async getBindDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = await this.client.apiRequest("getBindDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return data ?? []; + } + + /** + * Get semantic (type-check) diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + async getSemanticDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = await this.client.apiRequest("getSemanticDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return data ?? []; + } + + /** + * Get suggestion diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + async getSuggestionDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = await this.client.apiRequest("getSuggestionDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return data ?? []; + } + + /** + * Get declaration emit diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + async getDeclarationDiagnostics(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = await this.client.apiRequest("getDeclarationDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return data ?? []; + } + + /** + * Get program-wide diagnostics for the project, including compiler options diagnostics. + */ + async getProgramDiagnostics(): Promise { + const data = await this.client.apiRequest("getProgramDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + }); + return data ?? []; + } + + /** + * Get global (non-file-specific) semantic diagnostics for the project. + */ + async getGlobalDiagnostics(): Promise { + const data = await this.client.apiRequest("getGlobalDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + }); + return data ?? []; + } + + /** + * Get config file parsing diagnostics for the project. + */ + async getConfigFileParsingDiagnostics(): Promise { + const data = await this.client.apiRequest("getConfigFileParsingDiagnostics", { + snapshot: this.snapshotId, + project: this.project.id, + }); + return data ?? []; + } + + /** + * Emits files to the configured filesystem. Layer and host filesystems are + * written through; full filesystems remain immutable and return emitted + * files in {@link EmitResult.fileSystem}. + */ + async emit(emitOnly?: EmitOnly): Promise { + const response = await this.client.apiRequest("emit", { + snapshot: this.snapshotId, + project: this.project.id, + emitOnly, + }); + const fileSystem = response.emittedFilesContents.length + ? { + kind: "layer" as const, + files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), + } + : undefined; + return { + emitSkipped: response.emitSkipped, + diagnostics: response.diagnostics, + emittedFiles: response.emittedFiles, + fileSystem, + }; + } + + /** + * Emits files and returns their contents without writing to the filesystem. + */ + async emitToString(emitOnly?: EmitOnly): Promise { + const response = await this.client.apiRequest("emitToString", { + snapshot: this.snapshotId, + project: this.project.id, + emitOnly, + }); + return toEmitOutput(response); + } + + /** + * Gets JavaScript output for selected files regardless of project `noEmit`, `emitDeclarationOnly`, and `noEmitOnError` settings. + */ + async getJavaScriptEmit(files: readonly DocumentIdentifier[]): Promise { + const response = await this.client.apiRequest("getJavaScriptEmit", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return toEmitOutput(response); + } + + /** + * Gets declaration output for selected files regardless of project `noEmit`, `declaration`, `emitDeclarationOnly`, and `noEmitOnError` settings. + */ + async getDeclarationEmit(files: readonly DocumentIdentifier[]): Promise { + const response = await this.client.apiRequest("getDeclarationEmit", { + snapshot: this.snapshotId, + project: this.project.id, + files, + }); + return toEmitOutput(response); + } + + getProject(): Project { + return this.project; + } +} + +export interface BuildOrchestratorOptions { + cwd?: string | undefined; + dry?: boolean; + force?: boolean; + verbose?: boolean; + stopBuildOnErrors?: boolean; + overrideCompilerOptions?: OverrideCompilerOptions; +} + +export interface OverrideCompilerOptions { + incremental?: boolean; + assumeChangesOnlyAffectDirectDependencies?: boolean; + declaration?: boolean; + declarationMap?: boolean; + emitDeclarationOnly?: boolean; + sourceMap?: boolean; + inlineSourceMap?: boolean; + traceResolution?: boolean; +} + +export class BuildOrchestrator { + private client: Client; + private id: number; + private disposed = false; + private disposePromise: Promise | undefined; + private onDispose: () => void; + + constructor( + client: Client, + orchestratorResponse: CreateBuildOrchestratorResponse, + onDispose: () => void, + ) { + this.client = client; + this.id = orchestratorResponse.buildOrchestratorID; + this.onDispose = onDispose; + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + dispose(): Promise { + return this.disposePromise ??= this.disposeWorker(); + } + + private async disposeWorker(): Promise { + if (this.disposed) return; + this.disposed = true; + try { + await this.client.apiRequest("disposeBuildOrchestrator", { + buildOrchestratorID: this.id, + }); + } + finally { + this.onDispose(); + } + } + + async build(project?: string): Promise { + this.ensureNotDisposed(); + const response = await this.client.apiRequest("build", { + buildOrchestratorID: this.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + } + async buildReferences(project: string): Promise { + this.ensureNotDisposed(); + const response = await this.client.apiRequest("buildReferences", { + buildOrchestratorID: this.id, + project, + }); + return response; + } + async clean(project?: string): Promise { + this.ensureNotDisposed(); + const response = await this.client.apiRequest("cleanBuild", { + buildOrchestratorID: this.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + } + async cleanReferences(project?: string): Promise { + this.ensureNotDisposed(); + const response = await this.client.apiRequest("cleanReferences", { + buildOrchestratorID: this.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + } + + isDisposed(): boolean { + return this.disposed; + } + + private ensureNotDisposed(): void { + if (this.disposed) { + throw new Error("Build orchestrator is disposed"); + } + } +} + +function toEmitOutput(response: ProtocolEmitOutputResponse): EmitOutput { + const outputFiles = new Map(); + for (const { fileName, ...outputFile } of response.outputFiles) { + outputFiles.set(fileName, outputFile); + } + return { + emitSkipped: response.emitSkipped, + diagnostics: response.diagnostics, + outputFiles, + }; +} + +export class Checker { + private snapshotId: number; + private project: Project; + private objectRegistry: ProjectObjectRegistry; + private wellKnownSymbols: Promise<{ unknown: number; undefined: number; arguments: number; }> | undefined; + private wellKnownSignatures: Promise<{ unknown: number; }> | undefined; + + private get client(): Client { + return this.project.api.client; + } + + constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.objectRegistry = objectRegistry; + } + + dispose(): void { + this.objectRegistry.clear(); + } + + /** Get the merged symbol, or the original symbol if it has not been merged. */ + async getMergedSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getMergedSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateSymbol(data); + } + + /** + * Get a node's merged symbol. For a declaration, prefer + * {@link Checker.getSymbolOfDeclaration} for a non-nullable result. + */ + async getSymbolOfNode(node: Node): Promise { + const data = await this.client.apiRequest("getSymbolOfNode", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** Get a declaration's merged symbol. */ + async getSymbolOfDeclaration(node: Declaration): Promise { + const data = await this.client.apiRequest("getSymbolOfDeclarationForChecker", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + // Declarations normally have symbols, but preserve unexpected null results at runtime. + return (data && this.objectRegistry.getOrCreateSymbol(data))!; + } + + /** Get a symbol's merged parent, if any. */ + async getParentOfSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getParentOfSymbolForChecker", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + getSymbolAtLocation(node: Node): Promise; + getSymbolAtLocation(nodes: readonly Node[]): Promise<(Symbol | undefined)[]>; + async getSymbolAtLocation(nodeOrNodes: Node | readonly Node[]): Promise { + if (Array.isArray(nodeOrNodes)) { + const data = await this.client.apiRequest("getSymbolsAtLocations", { + snapshot: this.snapshotId, + project: this.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = await this.client.apiRequest("getSymbolAtLocation", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + getSymbolAtPosition(file: DocumentIdentifier, position: number): Promise; + getSymbolAtPosition(file: DocumentIdentifier, positions: readonly number[]): Promise<(Symbol | undefined)[]>; + async getSymbolAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Promise { + if (typeof positionOrPositions === "number") { + const data = await this.client.apiRequest("getSymbolAtPosition", { + snapshot: this.snapshotId, + project: this.project.id, + file, + position: positionOrPositions, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + const data = await this.client.apiRequest("getSymbolsAtPositions", { + snapshot: this.snapshotId, + project: this.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); + } + + getSymbolOfSourceFile(file: DocumentIdentifier): Promise; + getSymbolOfSourceFile(files: readonly DocumentIdentifier[]): Promise<(Symbol | undefined)[]>; + async getSymbolOfSourceFile(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Promise { + if (Array.isArray(fileOrFiles)) { + const data = await this.client.apiRequest("getSymbolsOfSourceFiles", { + snapshot: this.snapshotId, + project: this.project.id, + files: fileOrFiles, + }); + return data.map(d => d ? this.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = await this.client.apiRequest("getSymbolOfSourceFile", { + snapshot: this.snapshotId, + project: this.project.id, + file: fileOrFiles as DocumentIdentifier, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** + * Get the type of a symbol. Always returns a type; for symbols whose type + * cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + getTypeOfSymbol(symbol: Symbol): Promise; + getTypeOfSymbol(symbols: readonly Symbol[]): Promise; + async getTypeOfSymbol(symbolOrSymbols: Symbol | readonly Symbol[]): Promise { + if (Array.isArray(symbolOrSymbols)) { + const data = await this.client.apiRequest("getTypesOfSymbols", { + snapshot: this.snapshotId, + project: this.project.id, + symbols: symbolOrSymbols.map(symbol => symbol.reference), + }); + return data.map(d => this.objectRegistry.getOrCreateType(d)); + } + const data = await this.client.apiRequest("getTypeOfSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: (symbolOrSymbols as Symbol).reference, + }); + return this.objectRegistry.getOrCreateType(data); + } + + /** + * Get the declared type of a symbol. Always returns a type; for symbols whose + * declared type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + async getDeclaredTypeOfSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getDeclaredTypeOfSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateType(data); + } + + /** + * Get the type of a symbol, excluding the missing type when + * `exactOptionalPropertyTypes: true` is set; for symbols whose + * type cannot be determined the checker yields the error type + * (use {@link Type.isErrorType} to detect it). + */ + async getNonMissingTypeOfSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getNonMissingTypeOfSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateType(data); + } + + async getReferencesToSymbolInFile(file: DocumentIdentifier, symbol: Symbol): Promise { + const data = await this.client.apiRequest("getReferencesToSymbolInFile", { + snapshot: this.snapshotId, + project: this.project.id, + file, + symbol: symbol.reference, + }); + return (data ?? []).map(h => new NodeHandle(h, this.project)); + } + + /** @deprecated Use `project.languageService.getReferencedSymbolsForNode`. */ + getReferencedSymbolsForNode(node: Node, position: number): Promise { + return this.project.languageService.getReferencedSymbolsForNode(node, position); + } + + /** @deprecated Use `project.languageService.getSignatureUsage`. */ + getSignatureUsage(signatureDecl: Node): Promise { + return this.project.languageService.getSignatureUsage(signatureDecl); + } + + /** @deprecated Use `project.languageService.getCompletionsAtPosition`. */ + getCompletionsAtPosition(document: string, position: number, options?: CompletionOptions): Promise { + return this.project.languageService.getCompletionsAtPosition(document, position, options); + } + + /** + * Get the type at a node location. Always returns a type; for nodes whose + * type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + getTypeAtLocation(node: Node): Promise; + getTypeAtLocation(nodes: readonly Node[]): Promise; + async getTypeAtLocation(nodeOrNodes: Node | readonly Node[]): Promise { + if (Array.isArray(nodeOrNodes)) { + const data = await this.client.apiRequest("getTypeAtLocations", { + snapshot: this.snapshotId, + project: this.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => this.objectRegistry.getOrCreateType(d)); + } + const data = await this.client.apiRequest("getTypeAtLocation", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return this.objectRegistry.getOrCreateType(data); + } + + async getSignaturesOfType(type: Type, kind: SignatureKind): Promise { + return kind === SignatureKind.Call ? type.getCallSignatures() : type.getConstructSignatures(); + } + + /** + * Get the resolved signature of a call-like expression. Always returns a + * signature; when a call cannot be resolved the checker yields the unknown + * signature (use {@link Checker.isUnknownSignature} to detect it). + */ + async getResolvedSignature(node: Node): Promise { + const data = await this.client.apiRequest("getResolvedSignature", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return this.objectRegistry.getOrCreateSignature(data); + } + + getTypeAtPosition(file: DocumentIdentifier, position: number): Promise; + getTypeAtPosition(file: DocumentIdentifier, positions: readonly number[]): Promise<(Type | undefined)[]>; + async getTypeAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Promise { + if (typeof positionOrPositions === "number") { + const data = await this.client.apiRequest("getTypeAtPosition", { + snapshot: this.snapshotId, + project: this.project.id, + file, + position: positionOrPositions, + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + const data = await this.client.apiRequest("getTypesAtPositions", { + snapshot: this.snapshotId, + project: this.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? this.objectRegistry.getOrCreateType(d) : undefined); + } + + async resolveName( + name: string, + meaning: SymbolFlags, + location?: Node | DocumentPosition, + excludeGlobals?: boolean, + ): Promise { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = location && "kind" in location; + const data = await this.client.apiRequest("resolveName", { + snapshot: this.snapshotId, + project: this.project.id, + name, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: !isNode && location ? (location as DocumentPosition).document : undefined, + position: !isNode && location ? (location as DocumentPosition).position : undefined, + excludeGlobals, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** + * Returns all symbols with the given meaning that are visible at `location`. + */ + async getSymbolsInScope(location: Node | DocumentPosition, meaning: SymbolFlags): Promise { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = "kind" in location; + const data = await this.client.apiRequest("getSymbolsInScope", { + snapshot: this.snapshotId, + project: this.project.id, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: isNode ? undefined : (location as DocumentPosition).document, + position: isNode ? undefined : (location as DocumentPosition).position, + }); + return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : []; + } + + async getResolvedSymbol(node: Identifier): Promise { + const text = node.text; + if (!text) return undefined; + return this.resolveName(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); + } + + async getContextualType(node: Expression): Promise { + const data = await this.client.apiRequest("getContextualType", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + + async getContextualTypeForArgumentAtIndex(node: CallLikeExpression, argIndex: number): Promise { + const data = await this.client.apiRequest("getContextualTypeForArgument", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + index: argIndex, + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + + async getAwaitedType(type: Type): Promise { + const data = await this.client.apiRequest("getAwaitedType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + + /** Get the base type of a literal type (e.g. `number` for `42`). Always returns a type. */ + async getBaseTypeOfLiteralType(type: Type): Promise { + const data = await this.client.apiRequest("getBaseTypeOfLiteralType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + return this.objectRegistry.getOrCreateType(data); + } + + /** Get the type with `null` and `undefined` removed. Always returns a type. */ + async getNonNullableType(type: Type): Promise { + return type.getNonNullableType(); + } + + /** + * Get the type for a type node. Always returns a type; for type nodes whose + * type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + async getTypeFromTypeNode(node: TypeNode): Promise { + const data = await this.client.apiRequest("getTypeFromTypeNode", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return this.objectRegistry.getOrCreateType(data); + } + + /** Get the widened type. Always returns a type. */ + async getWidenedType(type: Type): Promise { + const data = await this.client.apiRequest("getWidenedType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + return this.objectRegistry.getOrCreateType(data); + } + + /** + * Get the type of the parameter at the given index in a signature. Always + * returns a type; an out-of-range index yields the `any` type. + */ + async getParameterType(signature: Signature, index: number): Promise { + const data = await this.client.apiRequest("getParameterType", { + snapshot: this.snapshotId, + project: this.project.id, + signature: signature.id, + index, + }); + return this.objectRegistry.getOrCreateType(data); + } + + async isArrayLikeType(type: Type): Promise { + return this.client.apiRequest("isArrayLikeType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + } + + async isTypeAssignableTo(source: Type, target: Type): Promise { + return this.client.apiRequest("isTypeAssignableTo", { + snapshot: this.snapshotId, + project: this.project.id, + source: source.id, + target: target.id, + }); + } + + async getShorthandAssignmentValueSymbol(node: Node): Promise { + const data = await this.client.apiRequest("getShorthandAssignmentValueSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** + * Get the type of a symbol as narrowed at a specific location. Always returns + * a type; for symbols whose type cannot be determined the checker yields the + * error type (use {@link Type.isErrorType} to detect it). + */ + async getTypeOfSymbolAtLocation(symbol: Symbol, location: Node): Promise { + const data = await this.client.apiRequest("getTypeOfSymbolAtLocation", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + location: getNodeId(location), + }); + return this.objectRegistry.getOrCreateType(data); + } + + private async getIntrinsicType(method: IntrinsicTypeMethod): Promise { + const data = await this.client.apiRequest(method, { + snapshot: this.snapshotId, + project: this.project.id, + }); + return this.objectRegistry.getOrCreateType(data); + } + + async getAnyType(): Promise { + return this.getIntrinsicType("getAnyType"); + } + async getStringType(): Promise { + return this.getIntrinsicType("getStringType"); + } + async getNumberType(): Promise { + return this.getIntrinsicType("getNumberType"); + } + async getBooleanType(): Promise { + return this.getIntrinsicType("getBooleanType"); + } + async getVoidType(): Promise { + return this.getIntrinsicType("getVoidType"); + } + async getUndefinedType(): Promise { + return this.getIntrinsicType("getUndefinedType"); + } + async getNullType(): Promise { + return this.getIntrinsicType("getNullType"); + } + async getNeverType(): Promise { + return this.getIntrinsicType("getNeverType"); + } + async getUnknownType(): Promise { + return this.getIntrinsicType("getUnknownType"); + } + async getBigIntType(): Promise { + return this.getIntrinsicType("getBigIntType"); + } + async getESSymbolType(): Promise { + return this.getIntrinsicType("getESSymbolType"); + } + async getNonPrimitiveType(): Promise { + return this.getIntrinsicType("getNonPrimitiveType"); + } + + async typeToTypeNode(type: Type, enclosingDeclaration?: Node, flags?: number): Promise { + const binaryData = await this.client.apiRequestBinary("typeToTypeNode", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (!binaryData) return undefined; + return decodeNode(binaryData) as TypeNode; + } + + async signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Promise { + const binaryData = await this.client.apiRequestBinary("signatureToSignatureDeclaration", { + snapshot: this.snapshotId, + project: this.project.id, + signature: signature.id, + kind, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (!binaryData) return undefined; + return decodeNode(binaryData) as Node; + } + + async typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Promise { + const result = await this.client.apiRequest("typeToString", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); + return result; + } + + async isContextSensitive(node: Node): Promise { + return this.client.apiRequest("isContextSensitive", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + } + + async isArrayType(type: Type): Promise { + return this.client.apiRequest("isArrayType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + } + + async isTupleType(type: Type): Promise { + return type.isTupleType(); + } + + async isTupleTypeTarget(type: Type): Promise { + return type.isTupleTypeTarget(); + } + + /** + * The following symbols are considered read-only: + * - Properties with a `readonly` modifier + * - Variables declared with `const` + * - Get accessors without matching set accessors + * - Enum members + * - `Object.defineProperty` assignments with `writable: false` or no setter + * - Unions and intersections of the above + */ + async isReadonlySymbol(symbol: Symbol): Promise { + return this.client.apiRequest("isReadonlySymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + } + + /** Get the return type of a signature. Always returns a type. */ + async getReturnTypeOfSignature(signature: Signature): Promise { + return signature.getReturnType(); + } + + /** + * Get the rest type of a signature. Always returns a type; a signature with + * no rest parameter yields the `any` type. + */ + async getRestTypeOfSignature(signature: Signature): Promise { + const data = await this.client.apiRequest("getRestTypeOfSignature", { + snapshot: this.snapshotId, + project: this.project.id, + signature: signature.id, + }); + return this.objectRegistry.getOrCreateType(data); + } + + async getTypePredicateOfSignature(signature: Signature): Promise { + const data = await this.client.apiRequest("getTypePredicateOfSignature", { + snapshot: this.snapshotId, + project: this.project.id, + signature: signature.id, + }); + if (!data) return undefined; + return { + kind: data.kind, + parameterIndex: data.parameterIndex, + parameterName: data.parameterName, + type: data.type ? this.objectRegistry.getOrCreateType(data.type) : undefined, + } as TypePredicate; + } + + /** + * Get the base types of a class or interface type. A type with no base types + * yields an empty array. + */ + async getBaseTypes(type: InterfaceType): Promise { + return await type.getBaseTypes() ?? []; + } + + /** Get the apparent type of a type. Always returns a type. */ + async getApparentType(type: Type): Promise { + return type.getApparentType(); + } + + /** Get the reduced type of a type. Always returns a type. */ + async getReducedType(type: Type): Promise { + return type.getReducedType(); + } + + async getPropertiesOfType(type: Type): Promise { + return type.getProperties(); + } + + async getIndexInfosOfType(type: Type): Promise { + return type.getIndexInfos(); + } + + async getIndexInfoOfType(type: Type, kind: IndexKind): Promise { + const data = await this.client.apiRequest("getIndexInfoOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + kind, + }); + return data ? { + keyType: this.objectRegistry.getOrCreateType(data.keyType), + valueType: this.objectRegistry.getOrCreateType(data.valueType), + isReadonly: data.isReadonly ?? false, + declaration: data.declaration ? new NodeHandle(data.declaration, this.project) : undefined, + } : undefined; + } + + async getIndexTypeOfType(type: Type, kind: IndexKind): Promise { + return kind === IndexKind.String ? type.getStringIndexType() : type.getNumberIndexType(); + } + + async getTypeOfPropertyOfType(type: Type, propertyName: string): Promise { + const data = await this.client.apiRequest("getTypeOfPropertyOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + name: propertyName, + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + + /** + * Get the constraint of a type parameter (the `T` in ``), or + * undefined if it has none. + */ + async getConstraintOfTypeParameter(type: TypeParameter): Promise { + return type.getConstraint(); + } + + async getDefaultFromTypeParameter(type: TypeParameter): Promise { + return type.getDefault(); + } + + async getBaseConstraintOfType(type: Type): Promise { + const data = await this.client.apiRequest("getBaseConstraintOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + return data ? this.objectRegistry.getOrCreateType(data) : undefined; + } + + async getPropertyOfType(type: Type, name: string): Promise { + const data = await this.client.apiRequest("getPropertyOfType", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + name, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + async getConstantValue(node: Node): Promise { + const data = await this.client.apiRequest("getConstantValue", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { + return undefined; + } + if (data.isNumber && typeof data.value === "string") { + if (data.value === "+Infinity") { + return Infinity; + } + else if (data.value === "-Infinity") { + return -Infinity; + } + return NaN; + } + return data.value; + } + + /** Get the signature of a function-like declaration. Always returns a signature. */ + async getSignatureFromDeclaration(node: Node): Promise { + const data = await this.client.apiRequest("getSignatureFromDeclaration", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return this.objectRegistry.getOrCreateSignature(data); + } + + async getExportSpecifierLocalTargetSymbol(node: Node): Promise { + const data = await this.client.apiRequest("getExportSpecifierLocalTargetSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + location: getNodeId(node), + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** + * Follow all aliases to get the original symbol. Always returns a symbol; for + * an unresolved alias the checker yields the unknown symbol (use + * {@link Checker.isUnknownSymbol} to detect it). + */ + async getAliasedSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getAliasedSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateSymbol(data); + } + + /** + * Get the fully qualified name of a symbol, walking up its parent chain + * (e.g. `"/path/to/module".Namespace.Name`). + */ + async getFullyQualifiedName(symbol: Symbol): Promise { + return this.client.apiRequest("getFullyQualifiedName", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + } + + async getImmediateAliasedSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getImmediateAliasedSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + /** + * Get the target symbol if instantiated, or the provided symbol otherwise. + */ + async getTargetSymbol(symbol: Symbol): Promise { + if (symbol.checkFlags & CheckFlags.Instantiated) { + const data = await this.client.apiRequest("getTargetSymbol", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateSymbol(data); + } + return symbol; + } + + async getExportSymbolOfSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getExportSymbolOfSymbolForChecker", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return this.objectRegistry.getOrCreateSymbol(data); + } + + /** + * Fetch (once, then cache) the handle ids of the per-checker singleton + * symbols (unknown, undefined, arguments). These ids are stable for the life + * of the project's checker, so identity checks against them are local after + * the first call. + */ + private getWellKnownSymbols(): Promise<{ unknown: number; undefined: number; arguments: number; }> { + return this.wellKnownSymbols ??= this.client.apiRequest("getWellKnownSymbols", { + snapshot: this.snapshotId, + project: this.project.id, + }); + } + + /** + * Returns `true` if the symbol is the checker's "unknown" symbol (e.g. the + * result of {@link Checker.getAliasedSymbol} on an unresolved alias). + */ + async isUnknownSymbol(symbol: Symbol): Promise { + return symbol.id === (await this.getWellKnownSymbols()).unknown; + } + + /** + * Returns `true` if the symbol is the checker's "undefined" symbol. + */ + async isUndefinedSymbol(symbol: Symbol): Promise { + return symbol.id === (await this.getWellKnownSymbols()).undefined; + } + + /** + * Returns `true` if the symbol is the checker's "arguments" symbol. + */ + async isArgumentsSymbol(symbol: Symbol): Promise { + return symbol.id === (await this.getWellKnownSymbols()).arguments; + } + + /** + * Fetch (once, then cache) the handle id of the per-checker unknown + * signature. This id is stable for the life of the project's checker, so + * identity checks against it are local after the first call. + */ + private getWellKnownSignatures(): Promise<{ unknown: number; }> { + return this.wellKnownSignatures ??= this.client.apiRequest("getWellKnownSignatures", { + snapshot: this.snapshotId, + project: this.project.id, + }); + } + + /** + * Returns `true` if the signature is the checker's "unknown" signature (e.g. + * the result of {@link Checker.getResolvedSignature} on a call that cannot be + * resolved). + */ + async isUnknownSignature(signature: Signature): Promise { + return signature.id === (await this.getWellKnownSignatures()).unknown; + } + + async getExportsOfModule(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getExportsOfModule", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return data ? data.map(d => this.objectRegistry.getOrCreateSymbol(d)) : []; + } + + async getMemberInModuleExports(symbol: Symbol, name: string): Promise { + const data = await this.client.apiRequest("getMemberInModuleExports", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + name, + }); + return data ? this.objectRegistry.getOrCreateSymbol(data) : undefined; + } + + async getJsDocTagsOfSymbol(symbol: Symbol): Promise { + const data = await this.client.apiRequest("getJsDocTags", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + return data ?? []; + } + + async getDocumentationCommentOfSymbol(symbol: Symbol): Promise { + return this.client.apiRequest("getDocumentationComment", { + snapshot: this.snapshotId, + project: this.project.id, + symbol: symbol.reference, + }); + } + + /** + * Get the type arguments of a type reference (e.g. the `string` in `Array`). + */ + async getTypeArguments(type: TypeReference): Promise { + const data = await this.client.apiRequest("getTypeArguments", { + snapshot: this.snapshotId, + project: this.project.id, + type: type.id, + }); + return data ? data.map(d => this.objectRegistry.getOrCreateType(d)) : []; + } +} + +export interface PrintNodeOptions { + preserveSourceNewlines?: boolean | undefined; + neverAsciiEscape?: boolean | undefined; + terminateUnterminatedLiterals?: boolean | undefined; +} + +export class Printer { + private client: Client; + + constructor(client: Client) { + this.client = client; + } + + async printNode(node: Node, options: PrintNodeOptions = {}): Promise { + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return this.client.apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + } + + async printFile(sourceFile: SourceFile, options: PrintNodeOptions = {}): Promise { + const encoded = encodeNode(sourceFile); + const base64 = uint8ArrayToBase64(encoded); + return this.client.apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + } +} + +export class SnapshotInternalAPI { + private snapshotId: number; + private client: Client; + + constructor(snapshotId: number, client: Client) { + this.snapshotId = snapshotId; + this.client = client; + } + + /** + * Format a synthesized node with the correct indentation for insertion at a + * specific position in an existing source file. + * + * @param node The synthesized AST node to format. + * @param file The target file where the node will be inserted. + * @param position The UTF-16 code-unit offset in the target file for insertion. + * @returns The formatted text of the node, indented for the insertion position. + */ + async formatNodeForInsertion(node: Node, file: DocumentIdentifier, position: number): Promise { + const data = await this.client.apiRequest("getDefaultProjectForFile", { + snapshot: this.snapshotId, + file, + }); + if (!data) { + throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); + } + + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return this.client.apiRequest("formatNodeForInsertion", { + snapshot: this.snapshotId, + project: data.id, + file, + position, + data: base64, + }); + } +} + +export class NodeHandle { + /** + * The project this handle was produced in, used as the default for {@link resolve}. + * Node handles are only meaningful within a project's program, so the producing project + * is remembered so callers don't have to pass it explicitly. + */ + private readonly canonicalProject: Project | undefined; + /** The owning source file of a file-owned symbol's declaration. */ + private readonly fileOwner: SourceFileOwner | undefined; + readonly index: number; + readonly kind: SyntaxKind; + readonly path: PathKey; + + constructor(handle: string, canonicalProject: Project | undefined, fileOwner?: SourceFileOwner) { + const parsed = parseNodeHandleFromCompiler(handle); + this.index = parsed.index; + this.kind = parsed.kind; + this.path = parsed.path; + this.canonicalProject = canonicalProject; + this.fileOwner = fileOwner; + } + + /** + * Resolve this handle to the actual AST node by fetching the source file from a project + * and looking up the node by index. If no project is passed, the project that produced + * the handle is used. Declarations of file-owned symbols identify an exact source file and + * resolve through it, independently of any project. + */ + async resolve(project: Project | undefined = this.canonicalProject): Promise { + if (this.fileOwner) { + const sourceFile = this.fileOwner.record.file ?? await this.fetchOwnerFile(this.fileOwner); + return sourceFile.getOrCreateNodeAtIndex(this.index) as T | undefined; + } + if (!project) throw new Error(`Node handle for '${this.path}' has no project context`); + const sourceFile = await project.program.getSourceFileByPath(this.path); + if (!sourceFile) { + return undefined; + } + return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(this.index) as T | undefined; + } + + private async fetchOwnerFile(fileOwner: SourceFileOwner): Promise { + const data = await fileOwner.api.client.apiRequestBinary("getCachedSourceFile", { file: fileOwner.record.descriptor }); + if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); + return fileOwner.api.sourceFileCache.attachFile( + fileOwner.record, + new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), + ); + } +} + +/** A symbol definition paired with all of its reference nodes. */ +export interface ReferencedSymbolEntry { + /** The node handle for the symbol's definition. */ + definition: NodeHandle; + /** The resolved symbol for the definition, if available. */ + symbol?: Symbol | undefined; + /** The node handles for each reference to the symbol. */ + references: NodeHandle[]; +} + +/** A single usage of a signature, pairing the reference name with its call expression (if any). */ +export interface SignatureUsage { + /** The node handle for the name reference. */ + name: NodeHandle; + /** The node handle for the call expression, if the reference is invoked. */ + call?: NodeHandle | undefined; +} + +/** A cached source-file record and its owning API. */ +interface SourceFileOwner { + readonly record: CachedSourceFile; + readonly api: API; +} + +type SymbolStorage = + | { readonly kind: typeof SymbolOwnerKind.File; readonly owner: SourceFileOwner; } + | { readonly kind: typeof SymbolOwnerKind.Snapshot; readonly registry: ProjectObjectRegistry; }; + +export class Symbol { + private readonly storage: SymbolStorage; + + get id(): number { + return this.reference.id; + } + /** The escaped (`__String`) name, used as the key in member/export tables. */ + readonly escapedName: __String; + /** The display name (escaped underscores removed). */ + readonly name: string; + readonly flags: SymbolFlags; + readonly checkFlags: CheckFlags; + /** @internal */ + readonly reference: SymbolReference; + readonly declarations: readonly NodeHandle[]; + readonly valueDeclaration: NodeHandle | undefined; + private readonly parent!: CompactSymbolReference; + private readonly exportSymbol!: CompactSymbolReference; + private membersCache: Promise> | undefined; + private exportsCache: Promise> | undefined; + + constructor(data: SymbolResponse, storage: SymbolStorage) { + if (data.reference.kind !== storage.kind) throw new Error(`Symbol ${data.reference.id} has mismatched ownership and storage`); + this.storage = storage; + this.reference = data.reference; + + this.escapedName = data.name as __String; + this.name = unescapeLeadingUnderscores(data.name as __String); + this.flags = data.flags; + this.checkFlags = data.checkFlags; + // A file-owned symbol has no canonical project; its declarations resolve through its file. + const project = storage.kind === SymbolOwnerKind.Snapshot ? storage.registry.project : undefined; + const fileOwner = storage.kind === SymbolOwnerKind.File ? storage.owner : undefined; + this.declarations = (data.declarations ?? []).map(handle => new NodeHandle(handle, project, fileOwner)); + this.valueDeclaration = data.valueDeclaration + ? new NodeHandle(data.valueDeclaration, project, fileOwner) + : undefined; + + if (data.parent !== undefined) this.parent = data.parent; + if (data.exportSymbol !== undefined) this.exportSymbol = data.exportSymbol; + } + + async getParent(): Promise { + if (!this.parent) return undefined; + return this.fetchSymbol("getParentOfSymbol", this.parent); + } + + /** + * Get this symbol's members keyed by escaped name. The result is cached on + * the symbol, so repeated calls do not round-trip to the server. + */ + getMembers(): Promise> { + return this.membersCache ??= this.fetchSymbolTable("getMembersOfSymbol"); + } + + /** + * Get this symbol's exports keyed by escaped name. The result is cached on + * the symbol, so repeated calls do not round-trip to the server. + */ + getExports(): Promise> { + return this.exportsCache ??= this.fetchSymbolTable("getExportsOfSymbol"); + } + + private async fetchSymbolTable(method: SymbolsPropertyMethod): Promise> { + const symbols = await this.fetchSymbols(method); + const table = new Map<__String, Symbol>(); + for (const symbol of symbols) { + table.set(symbol.escapedName, symbol); + } + return table; + } + + async getExportSymbol(): Promise { + if (!this.exportSymbol) return this; + return this.fetchSymbol("getExportSymbolOfSymbol", this.exportSymbol); + } + + async getJsDocTags(checker: Checker): Promise { + return checker.getJsDocTagsOfSymbol(this); + } + + async getDocumentationComment(checker: Checker): Promise { + return checker.getDocumentationCommentOfSymbol(this); + } + + private async fetchSymbol(method: SymbolPropertyMethod, reference: CompactSymbolReference): Promise { + if (this.storage.kind === SymbolOwnerKind.Snapshot) { + return this.storage.registry.fetchSymbol(this, method, reference); + } + const fileOwner = this.storage.owner; + // A file-owned symbol's relationships are always owned by the same file. + const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; + if (cached) return cached; + const data = await fileOwner.api.client.apiRequest(method, { symbol: this.reference }); + if (!data) throw new Error(`${method} returned null symbol for Symbol ${this.id}`); + return this.internFileSymbol(fileOwner, data); + } + + private async fetchSymbols(method: SymbolsPropertyMethod): Promise { + if (this.storage.kind === SymbolOwnerKind.Snapshot) { + return this.storage.registry.fetchSymbols(this, method); + } + const fileOwner = this.storage.owner; + const data = await fileOwner.api.client.apiRequest(method, { symbol: this.reference }); + return data?.map(symbol => this.internFileSymbol(fileOwner, symbol)) ?? []; + } + + private internFileSymbol(fileOwner: SourceFileOwner, data: ProtocolSymbolResponse): Symbol { + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.File) throw new Error(`Symbol ${reference.id} is not file-owned`); + return fileOwner.api.sourceFileCache.getOrCreateSymbol(fileOwner.record, reference.file, reference.id, () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner })); + } +} + +class TypeObject implements Type { + private objectRegistry: ProjectObjectRegistry; + + // Fields included in TypeResponse. References to other objects are stored as IDs + // and resolved lazily via the object registry. + readonly id: number; + readonly flags: TypeFlags; + readonly objectFlags!: ObjectFlags; + readonly symbol!: CompactSymbolReference; + readonly value!: string | number | boolean | bigint; + readonly intrinsicName!: string; + readonly isThisType!: boolean; + readonly freshType!: number; + readonly regularType!: number; + readonly target!: number; + private readonly tupleType: boolean; + readonly typeParameters!: readonly number[]; + readonly outerTypeParameters!: readonly number[]; + readonly localTypeParameters!: readonly number[]; + readonly thisType!: number; + readonly aliasTypeArguments!: readonly number[]; + readonly aliasSymbol!: CompactSymbolReference; + readonly elementFlags!: readonly ElementFlags[]; + readonly fixedLength!: number; + readonly readonly!: boolean; + readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; + readonly texts!: readonly string[]; + readonly objectType!: number; + readonly indexType!: number; + readonly checkType!: number; + readonly extendsType!: number; + readonly baseType!: number; + readonly substConstraint!: number; + readonly typeParameter!: number; + readonly constraintType!: number; + readonly nameType!: number; + readonly templateType!: number; + + // Cached results of lazy fetches, not included in TypeResponse + // (typically because they require some amount of computation or + // could cause an arbitrarily large number of types to be cached + // on the server for ID-based lookup). `false` is a sentinel value + // indicating a fetch has not yet occurred. + private trueType: number | false; + private falseType: number | false; + private constraint: number | false; + private default: number | false; + private nonNullableType: number | false; + private apparentType: number | false; + private reducedType: number | false; + private properties: readonly Symbol[] | false; + private apparentProperties: readonly Symbol[] | false; + private callSignatures: readonly Signature[] | false; + private constructSignatures: readonly Signature[] | false; + private indexInfos: readonly IndexInfo[] | false; + private baseTypes: readonly Type[] | false; + private types: readonly Type[] | false; + private stringIndexType: Type | undefined | false; + private numberIndexType: Type | undefined | false; + + constructor(data: TypeResponse, objectRegistry: ProjectObjectRegistry) { + this.objectRegistry = objectRegistry; + + this.id = data.id; + this.flags = data.flags; + if (data.objectFlags !== undefined) this.objectFlags = data.objectFlags; + if (data.symbol !== undefined) this.symbol = data.symbol; + if (data.value != null) { + // BigInt literal values are serialized as decimal strings (e.g. "-123") because + // JSON cannot represent bigint. Decode them back into a real bigint here. + const value = data.value as string | number | boolean; + if (data.flags & TypeFlags.BigIntLiteral) { + this.value = BigInt(value as string); + } + // JSON cannot represent infinities, so the API serializes them as strings. + else if (data.flags & TypeFlags.NumberLiteral && typeof value === "string") { + if (value === "+Infinity") { + this.value = Infinity; + } + else if (value === "-Infinity") { + this.value = -Infinity; + } + else { + this.value = NaN; + } + } + else { + this.value = value; + } + } + if (data.intrinsicName !== undefined) this.intrinsicName = data.intrinsicName; + if (data.isThisType !== undefined) this.isThisType = data.isThisType; + if (data.freshType !== undefined) this.freshType = data.freshType; + if (data.regularType !== undefined) this.regularType = data.regularType; + if (data.target !== undefined) this.target = data.target; + this.tupleType = data.isTupleType ?? false; + this.typeParameters = data.typeParameters ?? []; + this.outerTypeParameters = data.outerTypeParameters ?? []; + this.localTypeParameters = data.localTypeParameters ?? []; + if (data.thisType !== undefined) this.thisType = data.thisType; + this.aliasTypeArguments = data.aliasTypeArguments ?? []; + if (data.aliasSymbol !== undefined) this.aliasSymbol = data.aliasSymbol; + if (data.fixedLength !== undefined) { + this.elementFlags = data.elementFlags ?? []; + this.fixedLength = data.fixedLength; + } + if (data.readonly !== undefined) this.readonly = data.readonly; + if (data.labeledElementDeclarations !== undefined) { + this.labeledElementDeclarations = data.labeledElementDeclarations.map(handle => handle ? objectRegistry.createNodeHandle(handle) : undefined); + } + if (data.texts !== undefined) this.texts = data.texts; + if (data.objectType !== undefined) this.objectType = data.objectType; + if (data.indexType !== undefined) this.indexType = data.indexType; + if (data.checkType !== undefined) this.checkType = data.checkType; + if (data.extendsType !== undefined) this.extendsType = data.extendsType; + if (data.baseType !== undefined) this.baseType = data.baseType; + if (data.substConstraint !== undefined) this.substConstraint = data.substConstraint; + if (data.typeParameter !== undefined) this.typeParameter = data.typeParameter; + if (data.constraintType !== undefined) this.constraintType = data.constraintType; + if (data.nameType !== undefined) this.nameType = data.nameType; + if (data.templateType !== undefined) this.templateType = data.templateType; + + this.trueType = false; + this.falseType = false; + this.constraint = false; + this.default = false; + this.nonNullableType = false; + this.apparentType = false; + this.reducedType = false; + this.properties = false; + this.apparentProperties = false; + this.callSignatures = false; + this.constructSignatures = false; + this.indexInfos = false; + this.baseTypes = false; + this.types = false; + this.stringIndexType = false; + this.numberIndexType = false; + } + + async getSymbol(): Promise { + return this.objectRegistry.fetchSymbol(this, "getSymbolOfType", this.symbol); + } + + async getProperties(): Promise { + if (this.properties === false) { + this.properties = await this.objectRegistry.fetchPropertiesOfType(this); + } + return this.properties; + } + + getProperty(propertyName: string): Promise { + return this.objectRegistry.fetchPropertyOfType(this, propertyName); + } + + async getApparentProperties(): Promise { + if (this.apparentProperties === false) { + this.apparentProperties = await this.objectRegistry.fetchApparentPropertiesOfType(this); + } + return this.apparentProperties; + } + + async getCallSignatures(): Promise { + if (this.callSignatures === false) { + this.callSignatures = await this.objectRegistry.fetchSignaturesOfType(this, SignatureKind.Call); + } + return this.callSignatures; + } + + async getConstructSignatures(): Promise { + if (this.constructSignatures === false) { + this.constructSignatures = await this.objectRegistry.fetchSignaturesOfType(this, SignatureKind.Construct); + } + return this.constructSignatures; + } + + async getNonNullableType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getNonNullableType", this.nonNullableType); + this.nonNullableType = result.id; + return result; + } + + async getStringIndexType(): Promise { + if (this.stringIndexType === false) { + this.stringIndexType = await this.getStringIndexTypeWorker(); + } + return this.stringIndexType; + } + + private async getStringIndexTypeWorker(): Promise { + const infos = await this.getIndexInfos(); + return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; + } + + async getNumberIndexType(): Promise { + if (this.numberIndexType === false) { + this.numberIndexType = await this.getNumberIndexTypeWorker(); + } + return this.numberIndexType; + } + + private async getNumberIndexTypeWorker(): Promise { + const infos = await this.getIndexInfos(); + return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; + } + + async getApparentType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getApparentType", this.apparentType); + this.apparentType = result.id; + return result; + } + + async getReducedType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getReducedType", this.reducedType); + this.reducedType = result.id; + return result; + } + + async getIndexInfos(): Promise { + if (this.indexInfos === false) { + this.indexInfos = await this.objectRegistry.fetchIndexInfosOfType(this); + } + return this.indexInfos; + } + + async getAliasSymbol(): Promise { + return this.objectRegistry.fetchSymbol(this, "getAliasSymbolOfType", this.aliasSymbol); + } + + async getTarget(): Promise { + return this.objectRegistry.fetchType(this, "getTargetOfType", this.target); + } + + async getFreshType(): Promise { + return this.objectRegistry.fetchOptionalType(this, "getFreshTypeOfType", this.freshType); + } + + async getRegularType(): Promise { + return this.objectRegistry.fetchOptionalType(this, "getRegularTypeOfType", this.regularType); + } + + async getTypes(): Promise { + // Only union, intersection, and template literal types have constituent + // types; any other kind has none, so return undefined rather than sending + // a request the server cannot satisfy. + if (!(this.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { + return undefined; + } + if (this.types === false) { + this.types = await this.objectRegistry.fetchTypes(this, "getTypesOfType"); + } + return this.types; + } + + async getTypeParameters(): Promise { + return this.objectRegistry.fetchTypes(this, "getTypeParametersOfType", this.typeParameters) as Promise; + } + + async getOuterTypeParameters(): Promise { + return this.objectRegistry.fetchTypes(this, "getOuterTypeParametersOfType", this.outerTypeParameters) as Promise; + } + + async getLocalTypeParameters(): Promise { + return this.objectRegistry.fetchTypes(this, "getLocalTypeParametersOfType", this.localTypeParameters) as Promise; + } + + async getThisType(): Promise { + return this.objectRegistry.fetchOptionalType(this, "getThisTypeOfType", this.thisType) as Promise; + } + + async getAliasTypeArguments(): Promise { + return this.objectRegistry.fetchTypes(this, "getAliasTypeArgumentsOfType", this.aliasTypeArguments); + } + + async getTypeParameter(): Promise { + return this.objectRegistry.fetchType(this, "getTypeParameterOfMappedType", this.typeParameter); + } + + async getConstraintType(): Promise { + return this.objectRegistry.fetchType(this, "getConstraintTypeOfMappedType", this.constraintType); + } + + async getNameType(): Promise { + return this.objectRegistry.fetchOptionalType(this, "getNameTypeOfMappedType", this.nameType); + } + + async getTemplateType(): Promise { + return this.objectRegistry.fetchType(this, "getTemplateTypeOfMappedType", this.templateType); + } + + async getObjectType(): Promise { + return this.objectRegistry.fetchType(this, "getObjectTypeOfType", this.objectType); + } + + async getIndexType(): Promise { + return this.objectRegistry.fetchType(this, "getIndexTypeOfType", this.indexType); + } + + async getCheckType(): Promise { + return this.objectRegistry.fetchType(this, "getCheckTypeOfType", this.checkType); + } + + async getExtendsType(): Promise { + return this.objectRegistry.fetchType(this, "getExtendsTypeOfType", this.extendsType); + } + + async getBaseType(): Promise { + return this.objectRegistry.fetchType(this, "getBaseTypeOfType", this.baseType); + } + + async getConstraint(): Promise { + // Type parameters resolve their constraint lazily through the checker, + // whereas substitution types carry a preloaded constraint handle. + if (this.flags & TypeFlags.TypeParameter) { + const result = await this.objectRegistry.fetchOptionalType(this, "getConstraintOfTypeParameter", this.constraint); + this.constraint = result ? result.id : 0; + return result; + } + return this.objectRegistry.fetchType(this, "getConstraintOfType", this.substConstraint); + } + + async getDefault(): Promise { + const result = await this.objectRegistry.fetchOptionalType(this, "getDefaultFromTypeParameter", this.default); + this.default = result ? result.id : 0; + return result; + } + + async getTrueType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getTrueTypeOfConditionalType", this.trueType); + this.trueType = result.id; + return result; + } + + async getFalseType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getFalseTypeOfConditionalType", this.falseType); + this.falseType = result.id; + return result; + } + + /** + * Get the base types of this type. Returns `undefined` for any type that is + * not a class or interface. + */ + async getBaseTypes(): Promise { + if (!this.isClassOrInterface()) { + return undefined; + } + if (this.baseTypes === false) { + this.baseTypes = await this.objectRegistry.fetchBaseTypes(this); + } + return this.baseTypes; + } + + isClassOrInterface(): this is InterfaceType { + return isClassOrInterfaceType(this); + } + + isUnionType(): this is UnionType { + return isUnionType(this); + } + + isIntersectionType(): this is IntersectionType { + return isIntersectionType(this); + } + + isObjectType(): this is ObjectType { + return isObjectType(this); + } + + isIntrinsicType(): this is IntrinsicType { + return isIntrinsicType(this); + } + + isErrorType(): boolean { + return isErrorType(this); + } + + isLiteralType(): this is LiteralType { + return isLiteralType(this); + } + + isStringLiteralType(): this is StringLiteralType { + return isStringLiteralType(this); + } + + isNumberLiteralType(): this is NumberLiteralType { + return isNumberLiteralType(this); + } + + isBigIntLiteralType(): this is BigIntLiteralType { + return isBigIntLiteralType(this); + } + + isBooleanLiteralType(): this is BooleanLiteralType { + return isBooleanLiteralType(this); + } + + isTypeReference(): this is TypeReference { + return isTypeReference(this); + } + + isTupleType(): this is TupleTypeReference { + return this.tupleType; + } + + isTupleTypeTarget(): this is TupleType { + return this.fixedLength !== undefined; + } + + isIndexType(): this is IndexType { + return isIndexType(this); + } + + isIndexedAccessType(): this is IndexedAccessType { + return isIndexedAccessType(this); + } + + isConditionalType(): this is ConditionalType { + return isConditionalType(this); + } + + isSubstitutionType(): this is SubstitutionType { + return isSubstitutionType(this); + } + + isTemplateLiteralType(): this is TemplateLiteralType { + return isTemplateLiteralType(this); + } + + isStringMappingType(): this is StringMappingType { + return isStringMappingType(this); + } + + isTypeParameter(): this is TypeParameter { + return isTypeParameter(this); + } + + isMappedType(): this is MappedType { + return !!(this.flags & TypeFlags.Object) && !!(this.objectFlags & ObjectFlags.Mapped); + } +} + +export function isUnionType(type: Type): type is UnionType { + return (type.flags & TypeFlags.Union) !== 0; +} + +export function isIntersectionType(type: Type): type is IntersectionType { + return (type.flags & TypeFlags.Intersection) !== 0; +} + +export function isObjectType(type: Type): type is ObjectType { + return (type.flags & TypeFlags.Object) !== 0; +} + +export function isClassOrInterfaceType(type: Type): type is InterfaceType { + return isObjectType(type) && (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0; +} + +export function isIntrinsicType(type: Type): type is IntrinsicType { + return (type.flags & TypeFlags.Intrinsic) !== 0; +} + +/** + * Whether this is the error type — the placeholder the checker produces when a + * type cannot be determined (e.g. an unresolved reference). It is an intrinsic + * type named `"error"` (this covers both the singleton error type and the + * per-alias error types manufactured for unresolved type alias references). + */ +export function isErrorType(type: Type): boolean { + return isIntrinsicType(type) && type.intrinsicName === "error"; +} + +export function isLiteralType(type: Type): type is LiteralType { + return (type.flags & TypeFlags.Literal) !== 0; +} + +export function isStringLiteralType(type: Type): type is StringLiteralType { + return (type.flags & TypeFlags.StringLiteral) !== 0; +} + +export function isNumberLiteralType(type: Type): type is NumberLiteralType { + return (type.flags & TypeFlags.NumberLiteral) !== 0; +} + +export function isBigIntLiteralType(type: Type): type is BigIntLiteralType { + return (type.flags & TypeFlags.BigIntLiteral) !== 0; +} + +export function isBooleanLiteralType(type: Type): type is BooleanLiteralType { + return (type.flags & TypeFlags.BooleanLiteral) !== 0; +} + +export function isTypeReference(type: Type): type is TypeReference { + return isObjectType(type) && (type.objectFlags & ObjectFlags.Reference) !== 0; +} + +export function isTupleType(type: Type): type is TupleTypeReference { + return type.isTupleType(); +} + +export function isTupleTypeTarget(type: Type): type is TupleType { + return type.isTupleTypeTarget(); +} + +export function isIndexType(type: Type): type is IndexType { + return (type.flags & TypeFlags.Index) !== 0; +} + +export function isIndexedAccessType(type: Type): type is IndexedAccessType { + return (type.flags & TypeFlags.IndexedAccess) !== 0; +} + +export function isConditionalType(type: Type): type is ConditionalType { + return (type.flags & TypeFlags.Conditional) !== 0; +} + +export function isSubstitutionType(type: Type): type is SubstitutionType { + return (type.flags & TypeFlags.Substitution) !== 0; +} + +export function isTemplateLiteralType(type: Type): type is TemplateLiteralType { + return (type.flags & TypeFlags.TemplateLiteral) !== 0; +} + +export function isStringMappingType(type: Type): type is StringMappingType { + return (type.flags & TypeFlags.StringMapping) !== 0; +} + +export function isTypeParameter(type: Type): type is TypeParameter { + return (type.flags & TypeFlags.TypeParameter) !== 0; +} + +export class Signature { + private flags: number; + private objectRegistry: ProjectObjectRegistry; + + readonly id: number; + readonly declaration?: NodeHandle | undefined; + readonly typeParameters?: readonly number[] | undefined; + readonly parameters: readonly CompactSymbolReference[]; + readonly thisParameter?: CompactSymbolReference | undefined; + readonly target?: number | undefined; + private returnType: number | false; + + constructor(data: SignatureResponse, project: Project, objectRegistry: ProjectObjectRegistry) { + this.id = data.id; + this.flags = data.flags; + this.objectRegistry = objectRegistry; + this.declaration = data.declaration ? new NodeHandle(data.declaration, project) : undefined; + this.typeParameters = data.typeParameters ?? []; + this.parameters = data.parameters ?? []; + this.thisParameter = data.thisParameter; + this.target = data.target; + this.returnType = false; + } + + async getTypeParameters(): Promise { + return this.objectRegistry.fetchTypes(this, "getTypeParametersOfSignature", this.typeParameters) as Promise; + } + + async getParameters(): Promise { + return this.objectRegistry.fetchSymbols(this, "getParametersOfSignature", this.parameters); + } + + async getThisParameter(): Promise { + return this.objectRegistry.fetchSymbol(this, "getThisParameterOfSignature", this.thisParameter); + } + + async getTarget(): Promise { + return this.objectRegistry.fetchSignature(this, "getTargetOfSignature", this.target); + } + + async getReturnType(): Promise { + const result = await this.objectRegistry.fetchType(this, "getReturnTypeOfSignature", this.returnType); + this.returnType = result.id; + return result; + } + + getTypeParameterAtPosition(pos: number): Promise { + return this.objectRegistry.fetchTypeParameterAtPosition(this, pos); + } + + get hasRestParameter(): boolean { + return (this.flags & SignatureFlags.HasRestParameter) !== 0; + } + + get isConstruct(): boolean { + return (this.flags & SignatureFlags.Construct) !== 0; + } + + get isAbstract(): boolean { + return (this.flags & SignatureFlags.Abstract) !== 0; + } +} diff --git a/packages/typescript/src/api/async/client.ts b/packages/typescript/src/api/async/client.ts index 9c3319a13b499..1254765356255 100644 --- a/packages/typescript/src/api/async/client.ts +++ b/packages/typescript/src/api/async/client.ts @@ -1,426 +1,426 @@ -import { - createMessageConnection, - type MessageConnection, - RequestType, - SocketMessageReader, - SocketMessageWriter, - StreamMessageReader, - StreamMessageWriter, -} from "#vscode-jsonrpc/node"; -import type { ChildProcess } from "node:child_process"; -import type { Socket } from "node:net"; -import type { - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../../ast/index.ts"; -import type { FileSystemCallbacks } from "../fs.ts"; -import { - configureFileSystemCallbacks, - encodeFileSystemCallbackResult, - type FileSystemCallbackConfiguration, -} from "../fsCallbacks.ts"; -import { - type ClientOptions, - type ClientSocketOptions, - type ClientSpawnOptions, - getAPIProcessArgs, - isSpawnOptions, - resolveExePath, -} from "../options.ts"; -import type { - APIMethodInfo, - APIRequest, - BatchRequestsParams, - BatchRequestsResponse, - SourceFileResponseMethod, -} from "../proto.ts"; -import { - combineTimingInfo, - disabledServerTimingInfo, - disabledTimingInfo, - type ServerTimingInfo, - TimingCollector, - type TimingInfo, -} from "../timing.ts"; - -export type { ClientOptions, ClientSocketOptions, ClientSpawnOptions }; - -/** - * Client handles communication with the TypeScript API server - * over STDIO (spawned process) or a Unix domain socket using JSON-RPC. - */ -export class Client { - private socket: Socket | undefined; - private process: ChildProcess | undefined; - private connection: MessageConnection | undefined; - private options: ClientOptions; - private connected = false; - private closed = false; - private connecting: Promise | undefined; - private timing: TimingCollector | undefined; - private batchedRequests: { method: APIRequest["method"]; params: APIRequest["params"]; resolve: (value: unknown) => void; reject: (reason?: any) => void; }[] = []; - private nextBatch: NodeJS.Immediate | "manual" | undefined; - - constructor(options: ClientOptions) { - this.options = options; - if (isSpawnOptions(options)) { - configureFileSystemCallbacks(options.fs); - if (options.collectTiming) { - this.timing = new TimingCollector(); - } - } - } - - connect(): Promise { - if (this.closed) return Promise.reject(new Error("Client is closed")); - if (this.connected) return Promise.resolve(); - return this.connecting ??= this.connectWorker().finally(() => { - this.connecting = undefined; - }); - } - - private async connectWorker(): Promise { - if (isSpawnOptions(this.options)) { - await this.connectViaSpawn(this.options); - } - else { - await this.connectViaSocket(this.options); - } - } - - private async connectViaSpawn(options: ClientSpawnOptions): Promise { - const { spawn } = await import("node:child_process"); - - return new Promise((resolve, reject) => { - const args = getAPIProcessArgs(options, true); - const fsConfiguration = configureFileSystemCallbacks(options.fs); - - if (fsConfiguration.arguments.length > 0) { - args.push(`--callbacks=${fsConfiguration.arguments.join(",")}`); - } - - this.process = spawn(resolveExePath(options), args, { - stdio: ["pipe", "pipe", "inherit"], - }); - - this.process.once("error", error => { - reject(new Error(`Failed to start tsgo process: ${error.message}`)); - }); - - this.process.once("spawn", () => { - this.connected = true; - resolve(); - }); - - const reader = new StreamMessageReader(this.process.stdout!); - const writer = new StreamMessageWriter(this.process.stdin!); - this.connection = createMessageConnection(reader, writer); - this.registerFSCallbacks(this.connection, options.fs, fsConfiguration); - this.connection.listen(); - }); - } - - private async connectViaSocket(options: ClientSocketOptions): Promise { - const { createConnection } = await import("node:net"); - - return new Promise((resolve, reject) => { - this.socket = createConnection(options.pipe, () => { - const reader = new SocketMessageReader(this.socket!); - const writer = new SocketMessageWriter(this.socket!); - this.connection = createMessageConnection(reader, writer); - this.connection.listen(); - this.connected = true; - resolve(); - }); - - this.socket.once("error", error => { - reject(new Error(`Socket error: ${error.message}`)); - }); - }); - } - - private registerFSCallbacks( - connection: MessageConnection, - fs: FileSystemCallbacks | undefined, - configuration: FileSystemCallbackConfiguration, - ): void { - if (!fs) return; - for (const name of configuration.callbackNames) { - switch (name) { - case "readFile": { - const callback = fs.readFile; - if (typeof callback !== "function") throw new Error("Invalid readFile callback configuration"); - connection.onRequest(new RequestType(name), fileName => { - return encodeFileSystemCallbackResult(name, callback(fileName)); - }); - break; - } - case "fileExists": { - const callback = fs.fileExists; - if (typeof callback !== "function") throw new Error("Invalid fileExists callback configuration"); - connection.onRequest(new RequestType(name), fileName => { - return encodeFileSystemCallbackResult(name, callback(fileName)); - }); - break; - } - case "directoryExists": { - const callback = fs.directoryExists; - if (typeof callback !== "function") throw new Error("Invalid directoryExists callback configuration"); - connection.onRequest(new RequestType(name), directoryName => { - return encodeFileSystemCallbackResult(name, callback(directoryName)); - }); - break; - } - case "getAccessibleEntries": { - const callback = fs.getAccessibleEntries; - if (typeof callback !== "function") throw new Error("Invalid getAccessibleEntries callback configuration"); - connection.onRequest(new RequestType(name), directoryName => { - return encodeFileSystemCallbackResult(name, callback(directoryName)); - }); - break; - } - case "realpath": { - const callback = fs.realpath; - if (typeof callback !== "function") throw new Error("Invalid realpath callback configuration"); - connection.onRequest(new RequestType(name), path => { - return encodeFileSystemCallbackResult(name, callback(path)); - }); - break; - } - case "stat": { - const callback = fs.stat; - if (typeof callback !== "function") throw new Error("Invalid stat callback configuration"); - connection.onRequest(new RequestType(name), path => { - return encodeFileSystemCallbackResult(name, callback(path)); - }); - break; - } - case "writeFile": { - const callback = fs.writeFile; - if (typeof callback !== "function") throw new Error("Invalid writeFile callback configuration"); - connection.onRequest(new RequestType<{ path: RootedFilePath; data: string; }, unknown, void>(name), arg => { - return encodeFileSystemCallbackResult(name, callback(arg.path, arg.data)); - }); - break; - } - case "removeFile": { - const callback = fs.removeFile; - if (typeof callback !== "function") throw new Error("Invalid removeFile callback configuration"); - connection.onRequest(new RequestType(name), path => { - return encodeFileSystemCallbackResult(name, callback(path)); - }); - break; - } - } - } - } - - private async sendRequestWithTiming(requestType: RequestType, params: unknown): Promise { - if (!this.connection) { - throw new Error("Connection not established"); - } - - if (!this.timing) { - return this.connection.sendRequest(requestType, params); - } - - // Round-trip latency is measured here; byte counts approximate the wire - // payload via the serialized JSON. Server-side processing time is not - // carried on the response; it is retrieved separately (via a - // getServerTiming request) and folded in by getTimingInfo(). - const bytesSent = params === undefined ? 0 : Buffer.byteLength(JSON.stringify(params), "utf-8"); - const start = performance.now(); - const result = await this.connection.sendRequest(requestType, params); - const roundTripMs = performance.now() - start; - this.timing.record({ - method: requestType.method, - roundTripMs, - bytesSent, - bytesReceived: result === undefined || result === null - ? 0 - : Buffer.byteLength(JSON.stringify(result), "utf-8"), - }); - return result; - } - - registerCallback(name: string, callback: (params: unknown) => unknown | Promise): () => void { - if (!this.connection) { - throw new Error("Connection not established"); - } - const disposable = this.connection.onRequest(new RequestType(name), callback); - return () => disposable.dispose(); - } - - private async doBatch(): Promise { - this.nextBatch = undefined; - if (!this.batchedRequests.length) return; - const requests = this.batchedRequests; - this.batchedRequests = []; - try { - if (!this.connected) { - await this.connect(); - } - if (!this.connection) { - throw new Error("Connection not established"); - } - - if (requests.length === 1) { - // send single queued requests directly instead of as a batched request - const requestType = new RequestType(requests[0].method); - const response = await this.sendRequestWithTiming(requestType, requests[0].params); - requests[0].resolve(response); - return; - } - - const requestType = new RequestType("batchRequests"); - const params: BatchRequestsParams = { requests: requests.map(request => ({ method: request.method, params: request.params })) }; - if (this.options.maxResponseBytesPerPage !== undefined) { - params.maxResponseBytesPerPage = this.options.maxResponseBytesPerPage; - } - const response = await this.sendRequestWithTiming(requestType, params); - let responses = response.responses; - let continuationToken = response.continuationToken; - while (continuationToken) { - const pageParams: BatchRequestsParams = { - requests: [], - continuationToken, - }; - if (this.options.maxResponseBytesPerPage !== undefined) { - pageParams.maxResponseBytesPerPage = this.options.maxResponseBytesPerPage; - } - const page = await this.sendRequestWithTiming(requestType, pageParams); - responses = responses.concat(page.responses); - continuationToken = page.continuationToken; - } - for (let i = 0; i < requests.length; i++) { - const { resolve, reject } = requests[i]; - const item = responses[i]; - if (item.error !== undefined) { - reject(new Error(item.error)); - } - else { - resolve(item.result); - } - } - } - catch (error) { - for (const { reject } of requests) reject(error); - } - } - - private scheduleImmediateBatch(): void { - if (this.nextBatch) return; - this.nextBatch = setImmediate(this.doBatch.bind(this)); - } - - batchContext(): { [Symbol.dispose](): void; } { - if (this.nextBatch === "manual") { - throw new Error("Already in a manual batch context"); - } - if (this.nextBatch) { - clearImmediate(this.nextBatch); - this.doBatch(); // empty the queue before entering a manual batch context - } - this.nextBatch = "manual"; - return { - [Symbol.dispose]: () => { - this.nextBatch = undefined; - this.scheduleImmediateBatch(); - }, - }; - } - - async apiRequest(method: K, params: APIMethodInfo[K]["params"]): Promise { - if (this.closed) throw new Error("Client is closed"); - if (!this.connected) { - await this.connect(); - } - if (!this.connection) { - throw new Error("Connection not established"); - } - - const resultPromise = new Promise((resolve, reject) => { - this.batchedRequests.push({ method, params, resolve, reject }); - this.scheduleImmediateBatch(); - }); - return resultPromise; - } - - async apiRequestBinary(method: K, params: APIMethodInfo[K]["params"]): Promise { - const response = await this.apiRequest(method, params); - if (!response) return undefined; - const buffer = Buffer.from(response.data, "base64"); - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - } - - /** - * Returns the timing collector that per-node materialization is reported - * into, or undefined when timing collection is disabled. The returned - * collector is the same one folded into {@link getTimingInfo}, so - * materialization totals surface alongside request timings. - */ - getTimingCollector(): TimingCollector | undefined { - return this.timing; - } - - /** - * Returns a combined timing snapshot: client-measured round-trip and byte - * counts folded together with the server's own per-request processing time - * (fetched via a getServerTiming request) and estimated transport overhead. - */ - async getTimingInfo(): Promise { - if (!this.timing) { - return disabledTimingInfo(); - } - const local = this.timing.getInfo(); - // No requests have been sent yet: nothing to fetch from the server. - if (!this.connected || !this.connection) { - return local; - } - return combineTimingInfo(local, await this.fetchServerTiming()); - } - - async resetTimingInfo(): Promise { - if (!this.timing) return; - this.timing.reset(); - if (this.connected && this.connection) { - // Keep the server's collection in sync so combined totals stay meaningful. - const requestType = new RequestType("resetServerTiming"); - await this.connection.sendRequest(requestType, undefined); - } - } - - private async fetchServerTiming(): Promise { - if (!this.connection) { - return disabledServerTimingInfo(); - } - // Fetch the server's own timing collection via a dedicated request. This - // bypasses the client-side collector so the query does not pollute it. - const requestType = new RequestType("getServerTiming"); - return this.connection.sendRequest(requestType, undefined); - } - - async close(): Promise { - await this.connecting?.catch(() => {}); // if connection is still in-progress, wait for it to finish before closing the connection - this.closed = true; - if (this.connection) { - this.connection.dispose(); - this.connection = undefined; - } - if (this.socket) { - this.socket.destroy(); - this.socket = undefined; - } - if (this.process) { - // Close stdin to unblock the server's read loop, allowing it to exit cleanly. - // The server is blocked on stdin.Read(), so just sending SIGTERM would deadlock: - // - Node won't exit while child is alive - // - Child can't process SIGTERM while blocked on read - // - Read won't error until stdin is closed - this.process.stdin?.end(); - this.process = undefined; - } - this.connected = false; - } -} +import { + createMessageConnection, + type MessageConnection, + RequestType, + SocketMessageReader, + SocketMessageWriter, + StreamMessageReader, + StreamMessageWriter, +} from "#vscode-jsonrpc/node"; +import type { ChildProcess } from "node:child_process"; +import type { Socket } from "node:net"; +import type { + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../../ast/index.ts"; +import type { FileSystemCallbacks } from "../fs.ts"; +import { + configureFileSystemCallbacks, + encodeFileSystemCallbackResult, + type FileSystemCallbackConfiguration, +} from "../fsCallbacks.ts"; +import { + type ClientOptions, + type ClientSocketOptions, + type ClientSpawnOptions, + getAPIProcessArgs, + isSpawnOptions, + resolveExePath, +} from "../options.ts"; +import type { + APIMethodInfo, + APIRequest, + BatchRequestsParams, + BatchRequestsResponse, + SourceFileResponseMethod, +} from "../proto.ts"; +import { + combineTimingInfo, + disabledServerTimingInfo, + disabledTimingInfo, + type ServerTimingInfo, + TimingCollector, + type TimingInfo, +} from "../timing.ts"; + +export type { ClientOptions, ClientSocketOptions, ClientSpawnOptions }; + +/** + * Client handles communication with the TypeScript API server + * over STDIO (spawned process) or a Unix domain socket using JSON-RPC. + */ +export class Client { + private socket: Socket | undefined; + private process: ChildProcess | undefined; + private connection: MessageConnection | undefined; + private options: ClientOptions; + private connected = false; + private closed = false; + private connecting: Promise | undefined; + private timing: TimingCollector | undefined; + private batchedRequests: { method: APIRequest["method"]; params: APIRequest["params"]; resolve: (value: unknown) => void; reject: (reason?: any) => void; }[] = []; + private nextBatch: NodeJS.Immediate | "manual" | undefined; + + constructor(options: ClientOptions) { + this.options = options; + if (isSpawnOptions(options)) { + configureFileSystemCallbacks(options.fs); + if (options.collectTiming) { + this.timing = new TimingCollector(); + } + } + } + + connect(): Promise { + if (this.closed) return Promise.reject(new Error("Client is closed")); + if (this.connected) return Promise.resolve(); + return this.connecting ??= this.connectWorker().finally(() => { + this.connecting = undefined; + }); + } + + private async connectWorker(): Promise { + if (isSpawnOptions(this.options)) { + await this.connectViaSpawn(this.options); + } + else { + await this.connectViaSocket(this.options); + } + } + + private async connectViaSpawn(options: ClientSpawnOptions): Promise { + const { spawn } = await import("node:child_process"); + + return new Promise((resolve, reject) => { + const args = getAPIProcessArgs(options, true); + const fsConfiguration = configureFileSystemCallbacks(options.fs); + + if (fsConfiguration.arguments.length > 0) { + args.push(`--callbacks=${fsConfiguration.arguments.join(",")}`); + } + + this.process = spawn(resolveExePath(options), args, { + stdio: ["pipe", "pipe", "inherit"], + }); + + this.process.once("error", error => { + reject(new Error(`Failed to start tsgo process: ${error.message}`)); + }); + + this.process.once("spawn", () => { + this.connected = true; + resolve(); + }); + + const reader = new StreamMessageReader(this.process.stdout!); + const writer = new StreamMessageWriter(this.process.stdin!); + this.connection = createMessageConnection(reader, writer); + this.registerFSCallbacks(this.connection, options.fs, fsConfiguration); + this.connection.listen(); + }); + } + + private async connectViaSocket(options: ClientSocketOptions): Promise { + const { createConnection } = await import("node:net"); + + return new Promise((resolve, reject) => { + this.socket = createConnection(options.pipe, () => { + const reader = new SocketMessageReader(this.socket!); + const writer = new SocketMessageWriter(this.socket!); + this.connection = createMessageConnection(reader, writer); + this.connection.listen(); + this.connected = true; + resolve(); + }); + + this.socket.once("error", error => { + reject(new Error(`Socket error: ${error.message}`)); + }); + }); + } + + private registerFSCallbacks( + connection: MessageConnection, + fs: FileSystemCallbacks | undefined, + configuration: FileSystemCallbackConfiguration, + ): void { + if (!fs) return; + for (const name of configuration.callbackNames) { + switch (name) { + case "readFile": { + const callback = fs.readFile; + if (typeof callback !== "function") throw new Error("Invalid readFile callback configuration"); + connection.onRequest(new RequestType(name), fileName => { + return encodeFileSystemCallbackResult(name, callback(fileName)); + }); + break; + } + case "fileExists": { + const callback = fs.fileExists; + if (typeof callback !== "function") throw new Error("Invalid fileExists callback configuration"); + connection.onRequest(new RequestType(name), fileName => { + return encodeFileSystemCallbackResult(name, callback(fileName)); + }); + break; + } + case "directoryExists": { + const callback = fs.directoryExists; + if (typeof callback !== "function") throw new Error("Invalid directoryExists callback configuration"); + connection.onRequest(new RequestType(name), directoryName => { + return encodeFileSystemCallbackResult(name, callback(directoryName)); + }); + break; + } + case "getAccessibleEntries": { + const callback = fs.getAccessibleEntries; + if (typeof callback !== "function") throw new Error("Invalid getAccessibleEntries callback configuration"); + connection.onRequest(new RequestType(name), directoryName => { + return encodeFileSystemCallbackResult(name, callback(directoryName)); + }); + break; + } + case "realpath": { + const callback = fs.realpath; + if (typeof callback !== "function") throw new Error("Invalid realpath callback configuration"); + connection.onRequest(new RequestType(name), path => { + return encodeFileSystemCallbackResult(name, callback(path)); + }); + break; + } + case "stat": { + const callback = fs.stat; + if (typeof callback !== "function") throw new Error("Invalid stat callback configuration"); + connection.onRequest(new RequestType(name), path => { + return encodeFileSystemCallbackResult(name, callback(path)); + }); + break; + } + case "writeFile": { + const callback = fs.writeFile; + if (typeof callback !== "function") throw new Error("Invalid writeFile callback configuration"); + connection.onRequest(new RequestType<{ path: RootedFilePath; data: string; }, unknown, void>(name), arg => { + return encodeFileSystemCallbackResult(name, callback(arg.path, arg.data)); + }); + break; + } + case "removeFile": { + const callback = fs.removeFile; + if (typeof callback !== "function") throw new Error("Invalid removeFile callback configuration"); + connection.onRequest(new RequestType(name), path => { + return encodeFileSystemCallbackResult(name, callback(path)); + }); + break; + } + } + } + } + + private async sendRequestWithTiming(requestType: RequestType, params: unknown): Promise { + if (!this.connection) { + throw new Error("Connection not established"); + } + + if (!this.timing) { + return this.connection.sendRequest(requestType, params); + } + + // Round-trip latency is measured here; byte counts approximate the wire + // payload via the serialized JSON. Server-side processing time is not + // carried on the response; it is retrieved separately (via a + // getServerTiming request) and folded in by getTimingInfo(). + const bytesSent = params === undefined ? 0 : Buffer.byteLength(JSON.stringify(params), "utf-8"); + const start = performance.now(); + const result = await this.connection.sendRequest(requestType, params); + const roundTripMs = performance.now() - start; + this.timing.record({ + method: requestType.method, + roundTripMs, + bytesSent, + bytesReceived: result === undefined || result === null + ? 0 + : Buffer.byteLength(JSON.stringify(result), "utf-8"), + }); + return result; + } + + registerCallback(name: string, callback: (params: unknown) => unknown | Promise): () => void { + if (!this.connection) { + throw new Error("Connection not established"); + } + const disposable = this.connection.onRequest(new RequestType(name), callback); + return () => disposable.dispose(); + } + + private async doBatch(): Promise { + this.nextBatch = undefined; + if (!this.batchedRequests.length) return; + const requests = this.batchedRequests; + this.batchedRequests = []; + try { + if (!this.connected) { + await this.connect(); + } + if (!this.connection) { + throw new Error("Connection not established"); + } + + if (requests.length === 1) { + // send single queued requests directly instead of as a batched request + const requestType = new RequestType(requests[0].method); + const response = await this.sendRequestWithTiming(requestType, requests[0].params); + requests[0].resolve(response); + return; + } + + const requestType = new RequestType("batchRequests"); + const params: BatchRequestsParams = { requests: requests.map(request => ({ method: request.method, params: request.params })) }; + if (this.options.maxResponseBytesPerPage !== undefined) { + params.maxResponseBytesPerPage = this.options.maxResponseBytesPerPage; + } + const response = await this.sendRequestWithTiming(requestType, params); + let responses = response.responses; + let continuationToken = response.continuationToken; + while (continuationToken) { + const pageParams: BatchRequestsParams = { + requests: [], + continuationToken, + }; + if (this.options.maxResponseBytesPerPage !== undefined) { + pageParams.maxResponseBytesPerPage = this.options.maxResponseBytesPerPage; + } + const page = await this.sendRequestWithTiming(requestType, pageParams); + responses = responses.concat(page.responses); + continuationToken = page.continuationToken; + } + for (let i = 0; i < requests.length; i++) { + const { resolve, reject } = requests[i]; + const item = responses[i]; + if (item.error !== undefined) { + reject(new Error(item.error)); + } + else { + resolve(item.result); + } + } + } + catch (error) { + for (const { reject } of requests) reject(error); + } + } + + private scheduleImmediateBatch(): void { + if (this.nextBatch) return; + this.nextBatch = setImmediate(this.doBatch.bind(this)); + } + + batchContext(): { [Symbol.dispose](): void; } { + if (this.nextBatch === "manual") { + throw new Error("Already in a manual batch context"); + } + if (this.nextBatch) { + clearImmediate(this.nextBatch); + this.doBatch(); // empty the queue before entering a manual batch context + } + this.nextBatch = "manual"; + return { + [Symbol.dispose]: () => { + this.nextBatch = undefined; + this.scheduleImmediateBatch(); + }, + }; + } + + async apiRequest(method: K, params: APIMethodInfo[K]["params"]): Promise { + if (this.closed) throw new Error("Client is closed"); + if (!this.connected) { + await this.connect(); + } + if (!this.connection) { + throw new Error("Connection not established"); + } + + const resultPromise = new Promise((resolve, reject) => { + this.batchedRequests.push({ method, params, resolve, reject }); + this.scheduleImmediateBatch(); + }); + return resultPromise; + } + + async apiRequestBinary(method: K, params: APIMethodInfo[K]["params"]): Promise { + const response = await this.apiRequest(method, params); + if (!response) return undefined; + const buffer = Buffer.from(response.data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + + /** + * Returns the timing collector that per-node materialization is reported + * into, or undefined when timing collection is disabled. The returned + * collector is the same one folded into {@link getTimingInfo}, so + * materialization totals surface alongside request timings. + */ + getTimingCollector(): TimingCollector | undefined { + return this.timing; + } + + /** + * Returns a combined timing snapshot: client-measured round-trip and byte + * counts folded together with the server's own per-request processing time + * (fetched via a getServerTiming request) and estimated transport overhead. + */ + async getTimingInfo(): Promise { + if (!this.timing) { + return disabledTimingInfo(); + } + const local = this.timing.getInfo(); + // No requests have been sent yet: nothing to fetch from the server. + if (!this.connected || !this.connection) { + return local; + } + return combineTimingInfo(local, await this.fetchServerTiming()); + } + + async resetTimingInfo(): Promise { + if (!this.timing) return; + this.timing.reset(); + if (this.connected && this.connection) { + // Keep the server's collection in sync so combined totals stay meaningful. + const requestType = new RequestType("resetServerTiming"); + await this.connection.sendRequest(requestType, undefined); + } + } + + private async fetchServerTiming(): Promise { + if (!this.connection) { + return disabledServerTimingInfo(); + } + // Fetch the server's own timing collection via a dedicated request. This + // bypasses the client-side collector so the query does not pollute it. + const requestType = new RequestType("getServerTiming"); + return this.connection.sendRequest(requestType, undefined); + } + + async close(): Promise { + await this.connecting?.catch(() => {}); // if connection is still in-progress, wait for it to finish before closing the connection + this.closed = true; + if (this.connection) { + this.connection.dispose(); + this.connection = undefined; + } + if (this.socket) { + this.socket.destroy(); + this.socket = undefined; + } + if (this.process) { + // Close stdin to unblock the server's read loop, allowing it to exit cleanly. + // The server is blocked on stdin.Read(), so just sending SIGTERM would deadlock: + // - Node won't exit while child is alive + // - Child can't process SIGTERM while blocked on read + // - Read won't error until stdin is closed + this.process.stdin?.end(); + this.process = undefined; + } + this.connected = false; + } +} diff --git a/packages/typescript/src/api/async/types.ts b/packages/typescript/src/api/async/types.ts index e1c7e0c8753e9..2d77d12689402 100644 --- a/packages/typescript/src/api/async/types.ts +++ b/packages/typescript/src/api/async/types.ts @@ -1,448 +1,448 @@ -import type { CompletionItemKind } from "#enums/completionItemKind"; -import type { ElementFlags } from "#enums/elementFlags"; -import type { ObjectFlags } from "#enums/objectFlags"; -import type { TypeFlags } from "#enums/typeFlags"; -import type { TypePredicateKind } from "#enums/typePredicateKind"; -import type { - IndexSignatureDeclaration, - NamedTupleMember, - ParameterDeclaration, -} from "../../ast/ast.ts"; -import type { RootedFilePath } from "../../ast/index.ts"; -import type { - Diagnostic, - RequestFileSystem, -} from "../proto.ts"; -import type { - NodeHandle, - Signature, - Symbol, -} from "./api.ts"; - -export type { Diagnostic } from "../proto.ts"; - -/** - * A TypeScript type. - * - * Use TypeFlags to determine the specific kind of type and access - * kind-specific properties. For example: - * - * ```ts - * if (type.flags & TypeFlags.StringLiteral) { - * console.log((type as StringLiteralType).value); // string - * } - * ``` - */ -export interface Type { - /** Type flags — use to determine the specific kind of type. */ - readonly flags: TypeFlags; - - /** Unique identifier for this type */ - readonly id: number; - - /** Get the symbol associated with this type, if any */ - getSymbol(): Promise; - - /** Get the properties of this type. */ - getProperties(): Promise; - - /** Get a named property of this type, if present. */ - getProperty(propertyName: string): Promise; - - /** Get the properties of the apparent type of this type. */ - getApparentProperties(): Promise; - - /** Get the apparent type of this type. */ - getApparentType(): Promise; - - /** Get the reduced type of this type. */ - getReducedType(): Promise; - - /** Get the call signatures of this type. */ - getCallSignatures(): Promise; - - /** Get the construct signatures of this type. */ - getConstructSignatures(): Promise; - - /** Get this type with `null` and `undefined` removed. */ - getNonNullableType(): Promise; - - /** Get this type's string index value type, if present. */ - getStringIndexType(): Promise; - - /** Get this type's number index value type, if present. */ - getNumberIndexType(): Promise; - - /** Get all index information for this type. */ - getIndexInfos(): Promise; - - /** Get the type arguments of the type alias this type was instantiated from, if any */ - getAliasTypeArguments(): Promise; - - /** Get the symbol of the type alias this type was instantiated from, if any */ - getAliasSymbol(): Promise; - - /** - * Get the base types of this type, or `undefined` if it is not a class or - * interface type. - */ - getBaseTypes(): Promise; - - /** Whether this type is a class or interface type */ - isClassOrInterface(): this is InterfaceType; - /** Whether this type is a union type */ - isUnionType(): this is UnionType; - /** Whether this type is an intersection type */ - isIntersectionType(): this is IntersectionType; - /** Whether this type is an object type */ - isObjectType(): this is ObjectType; - /** Whether this type is an intrinsic primitive type */ - isIntrinsicType(): this is IntrinsicType; - /** - * Whether this is the error type — the placeholder produced when a type - * cannot be determined (e.g. an unresolved reference). - */ - isErrorType(): boolean; - /** Whether this type is a literal type */ - isLiteralType(): this is LiteralType; - /** Whether this type is a string literal type */ - isStringLiteralType(): this is StringLiteralType; - /** Whether this type is a number literal type */ - isNumberLiteralType(): this is NumberLiteralType; - /** Whether this type is a bigint literal type */ - isBigIntLiteralType(): this is BigIntLiteralType; - /** Whether this type is a boolean literal type */ - isBooleanLiteralType(): this is BooleanLiteralType; - /** Whether this type is a type reference */ - isTypeReference(): this is TypeReference; - /** Whether this type is a tuple type reference */ - isTupleType(): this is TupleTypeReference; - /** Whether this type owns tuple metadata */ - isTupleTypeTarget(): this is TupleType; - /** Whether this type is an index type (`keyof T`) */ - isIndexType(): this is IndexType; - /** Whether this type is an indexed access type (`T[K]`) */ - isIndexedAccessType(): this is IndexedAccessType; - /** Whether this type is a conditional type */ - isConditionalType(): this is ConditionalType; - /** Whether this type is a substitution type */ - isSubstitutionType(): this is SubstitutionType; - /** Whether this type is a template literal type */ - isTemplateLiteralType(): this is TemplateLiteralType; - /** Whether this type is a string mapping type */ - isStringMappingType(): this is StringMappingType; - /** Whether this type is a type parameter */ - isTypeParameter(): this is TypeParameter; - /** Whether this is a mapped type */ - isMappedType(): this is MappedType; -} - -/** - * Freshable types (TypeFlags.Freshable) - literal types (TypeFlags.Literal) and computed enum types (TypeFlags.Enum). - */ -export interface FreshableType extends Type { - /** Get the fresh version of this type, if any */ - getFreshType(): Promise; - /** Get the regular (non-fresh) version of this type, if any */ - getRegularType(): Promise; -} - -/** Literal types: StringLiteral, NumberLiteral, BigIntLiteral, BooleanLiteral */ -export interface LiteralType extends FreshableType { - /** The literal value. Use TypeFlags to narrow to a specific literal subtype with a concrete value type. */ - readonly value: string | number | boolean | bigint; -} - -/** String literal types (TypeFlags.StringLiteral) */ -export interface StringLiteralType extends LiteralType { - /** The string value of the literal */ - readonly value: string; -} - -/** Numeric literal types (TypeFlags.NumberLiteral) */ -export interface NumberLiteralType extends LiteralType { - /** The numeric value of the literal */ - readonly value: number; -} - -/** BigInt literal types (TypeFlags.BigIntLiteral) */ -export interface BigIntLiteralType extends LiteralType { - /** The bigint value of the literal */ - readonly value: bigint; -} - -/** Boolean literal types (TypeFlags.BooleanLiteral) */ -export interface BooleanLiteralType extends LiteralType { - /** The boolean value of the literal */ - readonly value: boolean; -} - -/** Object types (TypeFlags.Object) */ -export interface ObjectType extends Type { - /** Object flags — use to determine the specific kind of object type. */ - readonly objectFlags: ObjectFlags; -} - -/** Mapped types (ObjectFlags.Mapped) */ -export interface MappedType extends ObjectType { - /** Get the type parameter iterated by the mapped type */ - getTypeParameter(): Promise; - /** Get the constraint over which the mapped type iterates */ - getConstraintType(): Promise; - /** Get the remapped property name type, if present */ - getNameType(): Promise; - /** Get the property value template type */ - getTemplateType(): Promise; -} - -/** Type references (ObjectFlags.Reference) — e.g. Array, Map */ -export interface TypeReference extends ObjectType { - /** Get the generic target type (e.g. Array for Array) */ - getTarget(): Promise; -} - -/** References to tuple types */ -export interface TupleTypeReference extends TypeReference { - /** Get the tuple type that describes this reference's shape */ - getTarget(): Promise; -} - -/** Interface types — classes and interfaces (ObjectFlags.ClassOrInterface) */ -export interface InterfaceType extends TypeReference { - /** Get all type parameters (outer + local, excluding thisType) */ - getTypeParameters(): Promise; - /** Get outer type parameters from enclosing declarations */ - getOuterTypeParameters(): Promise; - /** Get local type parameters declared on this interface/class */ - getLocalTypeParameters(): Promise; - /** Get the synthetic `this` type of this interface/class */ - getThisType(): Promise; -} - -/** Generic types */ -export interface GenericType extends InterfaceType, TypeReference { -} - -/** Tuple type targets (ObjectFlags.Tuple) */ -export interface TupleType extends GenericType { - /** Get this tuple target */ - getTarget(): Promise; - /** Per-element flags (Required, Optional, Rest, Variadic) */ - readonly elementFlags: readonly ElementFlags[]; - /** Number of initial required or optional elements */ - readonly fixedLength: number; - /** Whether the tuple is readonly */ - readonly readonly: boolean; - /** Declarations providing tuple element names */ - readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; -} - -/** Union or intersection types (TypeFlags.Union | TypeFlags.Intersection) */ -export interface UnionOrIntersectionType extends Type { - /** Get the constituent types */ - getTypes(): Promise; -} - -/** Union types (TypeFlags.Union) */ -export interface UnionType extends UnionOrIntersectionType { -} - -/** Intersection types (TypeFlags.Intersection) */ -export interface IntersectionType extends UnionOrIntersectionType { -} - -/** Structured types (TypeFlags.StructuredType) */ -export type StructuredType = ObjectType | UnionType | IntersectionType; - -/** Type parameters (TypeFlags.TypeParameter) */ -export interface TypeParameter extends Type { - /** True if this is the synthetic `this` type of an interface, class, or tuple */ - readonly isThisType?: boolean | undefined; - /** Get the constraint (the `T` in ``), or undefined if it has none */ - getConstraint(): Promise; - /** Get the default type (the `T` in ``), or undefined if it has none */ - getDefault(): Promise; -} - -/** Index types — keyof T (TypeFlags.Index) */ -export interface IndexType extends Type { - /** Get the target type T in `keyof T` */ - getTarget(): Promise; -} - -/** Indexed access types — T[K] (TypeFlags.IndexedAccess) */ -export interface IndexedAccessType extends Type { - /** Get the object type T in `T[K]` */ - getObjectType(): Promise; - /** Get the index type K in `T[K]` */ - getIndexType(): Promise; -} - -/** Conditional types — T extends U ? X : Y (TypeFlags.Conditional) */ -export interface ConditionalType extends Type { - /** Get the check type T in `T extends U ? X : Y` */ - getCheckType(): Promise; - /** Get the extends type U in `T extends U ? X : Y` */ - getExtendsType(): Promise; - /** Get the true type X in `T extends U ? X : Y` */ - getTrueType(): Promise; - /** Get the false type Y in `T extends U ? X : Y` */ - getFalseType(): Promise; -} - -/** Substitution types (TypeFlags.Substitution) */ -export interface SubstitutionType extends Type { - getBaseType(): Promise; - getConstraint(): Promise; -} - -/** Template literal types (TypeFlags.TemplateLiteral) */ -export interface TemplateLiteralType extends Type { - /** Text segments (always one more than the number of type spans) */ - readonly texts: readonly string[]; - /** Get the types interspersed between text segments */ - getTypes(): Promise; -} - -/** String mapping types — Uppercase, Lowercase, etc. (TypeFlags.StringMapping) */ -export interface StringMappingType extends Type { - /** Get the mapped type */ - getTarget(): Promise; -} - -/** Intrinsic types — any, unknown, string, number, bigint, symbol, void, undefined, null, never, object (TypeFlags.Intrinsic) */ -export interface IntrinsicType extends Type { - /** The intrinsic type name (e.g. "any", "string", "never") */ - readonly intrinsicName: string; -} - -/** Base for all type predicates */ -export interface TypePredicateBase { - readonly kind: TypePredicateKind; - readonly type: Type | undefined; -} - -/** `this is T` */ -export interface ThisTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.This; - readonly parameterName: undefined; - readonly parameterIndex: undefined; - readonly type: Type; -} - -/** `x is T` */ -export interface IdentifierTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.Identifier; - readonly parameterName: string; - readonly parameterIndex: number; - readonly type: Type; -} - -/** `asserts this is T` */ -export interface AssertsThisTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.AssertsThis; - readonly parameterName: undefined; - readonly parameterIndex: undefined; - readonly type: Type | undefined; -} - -/** `asserts x is T` */ -export interface AssertsIdentifierTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.AssertsIdentifier; - readonly parameterName: string; - readonly parameterIndex: number; - readonly type: Type | undefined; -} - -/** A type predicate — e.g. `x is T` or `asserts x is T` */ -export type TypePredicate = ThisTypePredicate | IdentifierTypePredicate | AssertsThisTypePredicate | AssertsIdentifierTypePredicate; - -/** An index signature — e.g. `[key: string]: T` */ -export interface IndexInfo { - /** The index key type (e.g. string or number) */ - readonly keyType: Type; - /** The index value type */ - readonly valueType: Type; - /** Whether the index signature is readonly */ - readonly isReadonly: boolean; - /** The index signature declaration, if any */ - readonly declaration?: NodeHandle | undefined; -} - -/** - * A single JSDoc tag attached to a symbol — e.g. `@param`, `@returns`. - */ -export interface JSDocTagInfo { - /** The tag name, without the leading `@` — e.g. `"param"`. */ - readonly name: string; - /** The rendered tag text, if any — e.g. `"a the first number"` for `@param a the first number`. */ - readonly text?: string | undefined; -} - -export interface CompletionEntryLabelDetails { - detail?: string | undefined; - description?: string | undefined; -} - -/** Options for {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionOptions { - triggerCharacter?: string | undefined; - /** Include a `symbol` property on each completion entry. Only populated for symbol-based completions (not keywords or literals). */ - includeSymbol?: boolean | undefined; -} - -/** A single completion item returned by {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionEntry { - readonly name: string; - readonly kind?: CompletionItemKind | undefined; - readonly sortText?: string | undefined; - readonly insertText?: string | undefined; - readonly filterText?: string | undefined; - readonly detail?: string | undefined; - readonly labelDetails?: CompletionEntryLabelDetails | undefined; - /** The symbol associated with this completion entry. Only set when `includeSymbol: true` is passed and a symbol is available. */ - readonly symbol?: Symbol | undefined; -} - -/** The result of {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionInfo { - readonly isIncomplete: boolean; - readonly entries: readonly CompletionEntry[]; -} - -export interface FormatDiagnosticsHost { - getCurrentDirectory(): string; - getCanonicalFileName(fileName: string): string; - getNewLine(): string; -} - -export interface EmitOutputFile { - readonly text: string; - readonly sourceFileName?: RootedFilePath | undefined; -} - -export interface EmitResult { - readonly emitSkipped: boolean; - readonly diagnostics: readonly Diagnostic[]; - readonly emittedFiles: readonly RootedFilePath[]; - /** Emitted files captured as a filesystem layer suitable for {@link Snapshot.update}. */ - readonly fileSystem?: RequestFileSystem | undefined; -} - -export interface EmitOutput { - readonly emitSkipped: boolean; - readonly diagnostics: readonly Diagnostic[]; - readonly outputFiles: ReadonlyMap; -} - -export interface ImportSymbolAction { - readonly kind: "importSymbol"; - readonly symbol: Symbol; - readonly isValidTypeOnlyUseSite?: boolean | undefined; -} - -export type ImportAdderAction = ImportSymbolAction; - -export interface GetImportEditsForSymbolsOptions { - readonly isValidTypeOnlyUseSite?: boolean | undefined; -} +import type { CompletionItemKind } from "#enums/completionItemKind"; +import type { ElementFlags } from "#enums/elementFlags"; +import type { ObjectFlags } from "#enums/objectFlags"; +import type { TypeFlags } from "#enums/typeFlags"; +import type { TypePredicateKind } from "#enums/typePredicateKind"; +import type { + IndexSignatureDeclaration, + NamedTupleMember, + ParameterDeclaration, +} from "../../ast/ast.ts"; +import type { RootedFilePath } from "../../ast/index.ts"; +import type { + Diagnostic, + RequestFileSystem, +} from "../proto.ts"; +import type { + NodeHandle, + Signature, + Symbol, +} from "./api.ts"; + +export type { Diagnostic } from "../proto.ts"; + +/** + * A TypeScript type. + * + * Use TypeFlags to determine the specific kind of type and access + * kind-specific properties. For example: + * + * ```ts + * if (type.flags & TypeFlags.StringLiteral) { + * console.log((type as StringLiteralType).value); // string + * } + * ``` + */ +export interface Type { + /** Type flags — use to determine the specific kind of type. */ + readonly flags: TypeFlags; + + /** Unique identifier for this type */ + readonly id: number; + + /** Get the symbol associated with this type, if any */ + getSymbol(): Promise; + + /** Get the properties of this type. */ + getProperties(): Promise; + + /** Get a named property of this type, if present. */ + getProperty(propertyName: string): Promise; + + /** Get the properties of the apparent type of this type. */ + getApparentProperties(): Promise; + + /** Get the apparent type of this type. */ + getApparentType(): Promise; + + /** Get the reduced type of this type. */ + getReducedType(): Promise; + + /** Get the call signatures of this type. */ + getCallSignatures(): Promise; + + /** Get the construct signatures of this type. */ + getConstructSignatures(): Promise; + + /** Get this type with `null` and `undefined` removed. */ + getNonNullableType(): Promise; + + /** Get this type's string index value type, if present. */ + getStringIndexType(): Promise; + + /** Get this type's number index value type, if present. */ + getNumberIndexType(): Promise; + + /** Get all index information for this type. */ + getIndexInfos(): Promise; + + /** Get the type arguments of the type alias this type was instantiated from, if any */ + getAliasTypeArguments(): Promise; + + /** Get the symbol of the type alias this type was instantiated from, if any */ + getAliasSymbol(): Promise; + + /** + * Get the base types of this type, or `undefined` if it is not a class or + * interface type. + */ + getBaseTypes(): Promise; + + /** Whether this type is a class or interface type */ + isClassOrInterface(): this is InterfaceType; + /** Whether this type is a union type */ + isUnionType(): this is UnionType; + /** Whether this type is an intersection type */ + isIntersectionType(): this is IntersectionType; + /** Whether this type is an object type */ + isObjectType(): this is ObjectType; + /** Whether this type is an intrinsic primitive type */ + isIntrinsicType(): this is IntrinsicType; + /** + * Whether this is the error type — the placeholder produced when a type + * cannot be determined (e.g. an unresolved reference). + */ + isErrorType(): boolean; + /** Whether this type is a literal type */ + isLiteralType(): this is LiteralType; + /** Whether this type is a string literal type */ + isStringLiteralType(): this is StringLiteralType; + /** Whether this type is a number literal type */ + isNumberLiteralType(): this is NumberLiteralType; + /** Whether this type is a bigint literal type */ + isBigIntLiteralType(): this is BigIntLiteralType; + /** Whether this type is a boolean literal type */ + isBooleanLiteralType(): this is BooleanLiteralType; + /** Whether this type is a type reference */ + isTypeReference(): this is TypeReference; + /** Whether this type is a tuple type reference */ + isTupleType(): this is TupleTypeReference; + /** Whether this type owns tuple metadata */ + isTupleTypeTarget(): this is TupleType; + /** Whether this type is an index type (`keyof T`) */ + isIndexType(): this is IndexType; + /** Whether this type is an indexed access type (`T[K]`) */ + isIndexedAccessType(): this is IndexedAccessType; + /** Whether this type is a conditional type */ + isConditionalType(): this is ConditionalType; + /** Whether this type is a substitution type */ + isSubstitutionType(): this is SubstitutionType; + /** Whether this type is a template literal type */ + isTemplateLiteralType(): this is TemplateLiteralType; + /** Whether this type is a string mapping type */ + isStringMappingType(): this is StringMappingType; + /** Whether this type is a type parameter */ + isTypeParameter(): this is TypeParameter; + /** Whether this is a mapped type */ + isMappedType(): this is MappedType; +} + +/** + * Freshable types (TypeFlags.Freshable) - literal types (TypeFlags.Literal) and computed enum types (TypeFlags.Enum). + */ +export interface FreshableType extends Type { + /** Get the fresh version of this type, if any */ + getFreshType(): Promise; + /** Get the regular (non-fresh) version of this type, if any */ + getRegularType(): Promise; +} + +/** Literal types: StringLiteral, NumberLiteral, BigIntLiteral, BooleanLiteral */ +export interface LiteralType extends FreshableType { + /** The literal value. Use TypeFlags to narrow to a specific literal subtype with a concrete value type. */ + readonly value: string | number | boolean | bigint; +} + +/** String literal types (TypeFlags.StringLiteral) */ +export interface StringLiteralType extends LiteralType { + /** The string value of the literal */ + readonly value: string; +} + +/** Numeric literal types (TypeFlags.NumberLiteral) */ +export interface NumberLiteralType extends LiteralType { + /** The numeric value of the literal */ + readonly value: number; +} + +/** BigInt literal types (TypeFlags.BigIntLiteral) */ +export interface BigIntLiteralType extends LiteralType { + /** The bigint value of the literal */ + readonly value: bigint; +} + +/** Boolean literal types (TypeFlags.BooleanLiteral) */ +export interface BooleanLiteralType extends LiteralType { + /** The boolean value of the literal */ + readonly value: boolean; +} + +/** Object types (TypeFlags.Object) */ +export interface ObjectType extends Type { + /** Object flags — use to determine the specific kind of object type. */ + readonly objectFlags: ObjectFlags; +} + +/** Mapped types (ObjectFlags.Mapped) */ +export interface MappedType extends ObjectType { + /** Get the type parameter iterated by the mapped type */ + getTypeParameter(): Promise; + /** Get the constraint over which the mapped type iterates */ + getConstraintType(): Promise; + /** Get the remapped property name type, if present */ + getNameType(): Promise; + /** Get the property value template type */ + getTemplateType(): Promise; +} + +/** Type references (ObjectFlags.Reference) — e.g. Array, Map */ +export interface TypeReference extends ObjectType { + /** Get the generic target type (e.g. Array for Array) */ + getTarget(): Promise; +} + +/** References to tuple types */ +export interface TupleTypeReference extends TypeReference { + /** Get the tuple type that describes this reference's shape */ + getTarget(): Promise; +} + +/** Interface types — classes and interfaces (ObjectFlags.ClassOrInterface) */ +export interface InterfaceType extends TypeReference { + /** Get all type parameters (outer + local, excluding thisType) */ + getTypeParameters(): Promise; + /** Get outer type parameters from enclosing declarations */ + getOuterTypeParameters(): Promise; + /** Get local type parameters declared on this interface/class */ + getLocalTypeParameters(): Promise; + /** Get the synthetic `this` type of this interface/class */ + getThisType(): Promise; +} + +/** Generic types */ +export interface GenericType extends InterfaceType, TypeReference { +} + +/** Tuple type targets (ObjectFlags.Tuple) */ +export interface TupleType extends GenericType { + /** Get this tuple target */ + getTarget(): Promise; + /** Per-element flags (Required, Optional, Rest, Variadic) */ + readonly elementFlags: readonly ElementFlags[]; + /** Number of initial required or optional elements */ + readonly fixedLength: number; + /** Whether the tuple is readonly */ + readonly readonly: boolean; + /** Declarations providing tuple element names */ + readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; +} + +/** Union or intersection types (TypeFlags.Union | TypeFlags.Intersection) */ +export interface UnionOrIntersectionType extends Type { + /** Get the constituent types */ + getTypes(): Promise; +} + +/** Union types (TypeFlags.Union) */ +export interface UnionType extends UnionOrIntersectionType { +} + +/** Intersection types (TypeFlags.Intersection) */ +export interface IntersectionType extends UnionOrIntersectionType { +} + +/** Structured types (TypeFlags.StructuredType) */ +export type StructuredType = ObjectType | UnionType | IntersectionType; + +/** Type parameters (TypeFlags.TypeParameter) */ +export interface TypeParameter extends Type { + /** True if this is the synthetic `this` type of an interface, class, or tuple */ + readonly isThisType?: boolean | undefined; + /** Get the constraint (the `T` in ``), or undefined if it has none */ + getConstraint(): Promise; + /** Get the default type (the `T` in ``), or undefined if it has none */ + getDefault(): Promise; +} + +/** Index types — keyof T (TypeFlags.Index) */ +export interface IndexType extends Type { + /** Get the target type T in `keyof T` */ + getTarget(): Promise; +} + +/** Indexed access types — T[K] (TypeFlags.IndexedAccess) */ +export interface IndexedAccessType extends Type { + /** Get the object type T in `T[K]` */ + getObjectType(): Promise; + /** Get the index type K in `T[K]` */ + getIndexType(): Promise; +} + +/** Conditional types — T extends U ? X : Y (TypeFlags.Conditional) */ +export interface ConditionalType extends Type { + /** Get the check type T in `T extends U ? X : Y` */ + getCheckType(): Promise; + /** Get the extends type U in `T extends U ? X : Y` */ + getExtendsType(): Promise; + /** Get the true type X in `T extends U ? X : Y` */ + getTrueType(): Promise; + /** Get the false type Y in `T extends U ? X : Y` */ + getFalseType(): Promise; +} + +/** Substitution types (TypeFlags.Substitution) */ +export interface SubstitutionType extends Type { + getBaseType(): Promise; + getConstraint(): Promise; +} + +/** Template literal types (TypeFlags.TemplateLiteral) */ +export interface TemplateLiteralType extends Type { + /** Text segments (always one more than the number of type spans) */ + readonly texts: readonly string[]; + /** Get the types interspersed between text segments */ + getTypes(): Promise; +} + +/** String mapping types — Uppercase, Lowercase, etc. (TypeFlags.StringMapping) */ +export interface StringMappingType extends Type { + /** Get the mapped type */ + getTarget(): Promise; +} + +/** Intrinsic types — any, unknown, string, number, bigint, symbol, void, undefined, null, never, object (TypeFlags.Intrinsic) */ +export interface IntrinsicType extends Type { + /** The intrinsic type name (e.g. "any", "string", "never") */ + readonly intrinsicName: string; +} + +/** Base for all type predicates */ +export interface TypePredicateBase { + readonly kind: TypePredicateKind; + readonly type: Type | undefined; +} + +/** `this is T` */ +export interface ThisTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.This; + readonly parameterName: undefined; + readonly parameterIndex: undefined; + readonly type: Type; +} + +/** `x is T` */ +export interface IdentifierTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.Identifier; + readonly parameterName: string; + readonly parameterIndex: number; + readonly type: Type; +} + +/** `asserts this is T` */ +export interface AssertsThisTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.AssertsThis; + readonly parameterName: undefined; + readonly parameterIndex: undefined; + readonly type: Type | undefined; +} + +/** `asserts x is T` */ +export interface AssertsIdentifierTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.AssertsIdentifier; + readonly parameterName: string; + readonly parameterIndex: number; + readonly type: Type | undefined; +} + +/** A type predicate — e.g. `x is T` or `asserts x is T` */ +export type TypePredicate = ThisTypePredicate | IdentifierTypePredicate | AssertsThisTypePredicate | AssertsIdentifierTypePredicate; + +/** An index signature — e.g. `[key: string]: T` */ +export interface IndexInfo { + /** The index key type (e.g. string or number) */ + readonly keyType: Type; + /** The index value type */ + readonly valueType: Type; + /** Whether the index signature is readonly */ + readonly isReadonly: boolean; + /** The index signature declaration, if any */ + readonly declaration?: NodeHandle | undefined; +} + +/** + * A single JSDoc tag attached to a symbol — e.g. `@param`, `@returns`. + */ +export interface JSDocTagInfo { + /** The tag name, without the leading `@` — e.g. `"param"`. */ + readonly name: string; + /** The rendered tag text, if any — e.g. `"a the first number"` for `@param a the first number`. */ + readonly text?: string | undefined; +} + +export interface CompletionEntryLabelDetails { + detail?: string | undefined; + description?: string | undefined; +} + +/** Options for {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionOptions { + triggerCharacter?: string | undefined; + /** Include a `symbol` property on each completion entry. Only populated for symbol-based completions (not keywords or literals). */ + includeSymbol?: boolean | undefined; +} + +/** A single completion item returned by {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionEntry { + readonly name: string; + readonly kind?: CompletionItemKind | undefined; + readonly sortText?: string | undefined; + readonly insertText?: string | undefined; + readonly filterText?: string | undefined; + readonly detail?: string | undefined; + readonly labelDetails?: CompletionEntryLabelDetails | undefined; + /** The symbol associated with this completion entry. Only set when `includeSymbol: true` is passed and a symbol is available. */ + readonly symbol?: Symbol | undefined; +} + +/** The result of {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionInfo { + readonly isIncomplete: boolean; + readonly entries: readonly CompletionEntry[]; +} + +export interface FormatDiagnosticsHost { + getCurrentDirectory(): string; + getCanonicalFileName(fileName: string): string; + getNewLine(): string; +} + +export interface EmitOutputFile { + readonly text: string; + readonly sourceFileName?: RootedFilePath | undefined; +} + +export interface EmitResult { + readonly emitSkipped: boolean; + readonly diagnostics: readonly Diagnostic[]; + readonly emittedFiles: readonly RootedFilePath[]; + /** Emitted files captured as a filesystem layer suitable for {@link Snapshot.update}. */ + readonly fileSystem?: RequestFileSystem | undefined; +} + +export interface EmitOutput { + readonly emitSkipped: boolean; + readonly diagnostics: readonly Diagnostic[]; + readonly outputFiles: ReadonlyMap; +} + +export interface ImportSymbolAction { + readonly kind: "importSymbol"; + readonly symbol: Symbol; + readonly isValidTypeOnlyUseSite?: boolean | undefined; +} + +export type ImportAdderAction = ImportSymbolAction; + +export interface GetImportEditsForSymbolsOptions { + readonly isValidTypeOnlyUseSite?: boolean | undefined; +} diff --git a/packages/typescript/src/api/compilerOptions.generated.ts b/packages/typescript/src/api/compilerOptions.generated.ts index c694de0043355..4e5ff53cc0cf0 100644 --- a/packages/typescript/src/api/compilerOptions.generated.ts +++ b/packages/typescript/src/api/compilerOptions.generated.ts @@ -1,134 +1,134 @@ -// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT. - -import type { JsxEmit } from "#enums/jsxEmit"; -import type { ModuleDetectionKind } from "#enums/moduleDetectionKind"; -import type { ModuleKind } from "#enums/moduleKind"; -import type { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -import type { NewLineKind } from "#enums/newLineKind"; -import type { ScriptTarget } from "#enums/scriptTarget"; -import type { - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../ast/index.ts"; - -export { JsxEmit } from "#enums/jsxEmit"; -export { ModuleDetectionKind } from "#enums/moduleDetectionKind"; -export { ModuleKind } from "#enums/moduleKind"; -export { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -export { NewLineKind } from "#enums/newLineKind"; -export { ScriptTarget } from "#enums/scriptTarget"; - -/** CompilerOptions contains the compiler options exposed by the API. */ -export interface CompilerOptions { - allowJs?: boolean | undefined; - allowArbitraryExtensions?: boolean | undefined; - allowImportingTsExtensions?: boolean | undefined; - allowNonTsExtensions?: boolean | undefined; - allowUmdGlobalAccess?: boolean | undefined; - allowUnreachableCode?: boolean | undefined; - allowUnusedLabels?: boolean | undefined; - assumeChangesOnlyAffectDirectDependencies?: boolean | undefined; - checkJs?: boolean | undefined; - customConditions?: string[] | undefined; - composite?: boolean | undefined; - emitDeclarationOnly?: boolean | undefined; - emitBOM?: boolean | undefined; - emitDecoratorMetadata?: boolean | undefined; - declaration?: boolean | undefined; - declarationDir?: RootedDirectoryPath | undefined; - declarationMap?: boolean | undefined; - deduplicatePackages?: boolean | undefined; - disableSizeLimit?: boolean | undefined; - disableSourceOfProjectReferenceRedirect?: boolean | undefined; - disableSolutionSearching?: boolean | undefined; - disableReferencedProjectLoad?: boolean | undefined; - erasableSyntaxOnly?: boolean | undefined; - exactOptionalPropertyTypes?: boolean | undefined; - experimentalDecorators?: boolean | undefined; - forceConsistentCasingInFileNames?: boolean | undefined; - isolatedModules?: boolean | undefined; - isolatedDeclarations?: boolean | undefined; - ignoreConfig?: boolean | undefined; - ignoreDeprecations?: string | undefined; - importHelpers?: boolean | undefined; - inlineSourceMap?: boolean | undefined; - inlineSources?: boolean | undefined; - init?: boolean | undefined; - incremental?: boolean | undefined; - jsx?: JsxEmit | undefined; - jsxFactory?: string | undefined; - jsxFragmentFactory?: string | undefined; - jsxImportSource?: string | undefined; - lib?: string[] | undefined; - libReplacement?: boolean | undefined; - locale?: string | undefined; - mapRoot?: string | undefined; - module?: ModuleKind | undefined; - moduleResolution?: ModuleResolutionKind | undefined; - moduleSuffixes?: string[] | undefined; - moduleDetection?: ModuleDetectionKind | undefined; - newLine?: NewLineKind | undefined; - noEmit?: boolean | undefined; - noCheck?: boolean | undefined; - noErrorTruncation?: boolean | undefined; - noFallthroughCasesInSwitch?: boolean | undefined; - noImplicitAny?: boolean | undefined; - noImplicitThis?: boolean | undefined; - noImplicitReturns?: boolean | undefined; - noEmitHelpers?: boolean | undefined; - noLib?: boolean | undefined; - noPropertyAccessFromIndexSignature?: boolean | undefined; - noUncheckedIndexedAccess?: boolean | undefined; - noEmitOnError?: boolean | undefined; - noUnusedLocals?: boolean | undefined; - noUnusedParameters?: boolean | undefined; - noResolve?: boolean | undefined; - noImplicitOverride?: boolean | undefined; - noUncheckedSideEffectImports?: boolean | undefined; - outDir?: RootedDirectoryPath | undefined; - paths?: Record | undefined; - /** Plugins are parsed only so tools can report that native TypeScript does not support them. */ - plugins?: PluginImport[] | undefined; - preserveConstEnums?: boolean | undefined; - preserveSymlinks?: boolean | undefined; - project?: RootedPath | undefined; - resolveJsonModule?: boolean | undefined; - resolvePackageJsonExports?: boolean | undefined; - resolvePackageJsonImports?: boolean | undefined; - removeComments?: boolean | undefined; - rewriteRelativeImportExtensions?: boolean | undefined; - reactNamespace?: string | undefined; - rootDir?: RootedDirectoryPath | undefined; - rootDirs?: RootedDirectoryPath[] | undefined; - skipLibCheck?: boolean | undefined; - stableTypeOrdering?: boolean | undefined; - strict?: boolean | undefined; - strictBindCallApply?: boolean | undefined; - strictBuiltinIteratorReturn?: boolean | undefined; - strictFunctionTypes?: boolean | undefined; - strictNullChecks?: boolean | undefined; - strictPropertyInitialization?: boolean | undefined; - stripInternal?: boolean | undefined; - skipDefaultLibCheck?: boolean | undefined; - sourceMap?: boolean | undefined; - sourceRoot?: string | undefined; - suppressOutputPathCheck?: boolean | undefined; - target?: ScriptTarget | undefined; - traceResolution?: boolean | undefined; - tsBuildInfoFile?: RootedFilePath | undefined; - typeRoots?: RootedDirectoryPath[] | undefined; - types?: string[] | undefined; - useDefineForClassFields?: boolean | undefined; - useUnknownInCatchVariables?: boolean | undefined; - verbatimModuleSyntax?: boolean | undefined; - maxNodeModuleJsDepth?: number | undefined; - - // Internal fields - - configFilePath?: RootedFilePath | undefined; -} - -export interface PluginImport { - name: string; -} +// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT. + +import type { JsxEmit } from "#enums/jsxEmit"; +import type { ModuleDetectionKind } from "#enums/moduleDetectionKind"; +import type { ModuleKind } from "#enums/moduleKind"; +import type { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +import type { NewLineKind } from "#enums/newLineKind"; +import type { ScriptTarget } from "#enums/scriptTarget"; +import type { + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../ast/index.ts"; + +export { JsxEmit } from "#enums/jsxEmit"; +export { ModuleDetectionKind } from "#enums/moduleDetectionKind"; +export { ModuleKind } from "#enums/moduleKind"; +export { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +export { NewLineKind } from "#enums/newLineKind"; +export { ScriptTarget } from "#enums/scriptTarget"; + +/** CompilerOptions contains the compiler options exposed by the API. */ +export interface CompilerOptions { + allowJs?: boolean | undefined; + allowArbitraryExtensions?: boolean | undefined; + allowImportingTsExtensions?: boolean | undefined; + allowNonTsExtensions?: boolean | undefined; + allowUmdGlobalAccess?: boolean | undefined; + allowUnreachableCode?: boolean | undefined; + allowUnusedLabels?: boolean | undefined; + assumeChangesOnlyAffectDirectDependencies?: boolean | undefined; + checkJs?: boolean | undefined; + customConditions?: string[] | undefined; + composite?: boolean | undefined; + emitDeclarationOnly?: boolean | undefined; + emitBOM?: boolean | undefined; + emitDecoratorMetadata?: boolean | undefined; + declaration?: boolean | undefined; + declarationDir?: RootedDirectoryPath | undefined; + declarationMap?: boolean | undefined; + deduplicatePackages?: boolean | undefined; + disableSizeLimit?: boolean | undefined; + disableSourceOfProjectReferenceRedirect?: boolean | undefined; + disableSolutionSearching?: boolean | undefined; + disableReferencedProjectLoad?: boolean | undefined; + erasableSyntaxOnly?: boolean | undefined; + exactOptionalPropertyTypes?: boolean | undefined; + experimentalDecorators?: boolean | undefined; + forceConsistentCasingInFileNames?: boolean | undefined; + isolatedModules?: boolean | undefined; + isolatedDeclarations?: boolean | undefined; + ignoreConfig?: boolean | undefined; + ignoreDeprecations?: string | undefined; + importHelpers?: boolean | undefined; + inlineSourceMap?: boolean | undefined; + inlineSources?: boolean | undefined; + init?: boolean | undefined; + incremental?: boolean | undefined; + jsx?: JsxEmit | undefined; + jsxFactory?: string | undefined; + jsxFragmentFactory?: string | undefined; + jsxImportSource?: string | undefined; + lib?: string[] | undefined; + libReplacement?: boolean | undefined; + locale?: string | undefined; + mapRoot?: string | undefined; + module?: ModuleKind | undefined; + moduleResolution?: ModuleResolutionKind | undefined; + moduleSuffixes?: string[] | undefined; + moduleDetection?: ModuleDetectionKind | undefined; + newLine?: NewLineKind | undefined; + noEmit?: boolean | undefined; + noCheck?: boolean | undefined; + noErrorTruncation?: boolean | undefined; + noFallthroughCasesInSwitch?: boolean | undefined; + noImplicitAny?: boolean | undefined; + noImplicitThis?: boolean | undefined; + noImplicitReturns?: boolean | undefined; + noEmitHelpers?: boolean | undefined; + noLib?: boolean | undefined; + noPropertyAccessFromIndexSignature?: boolean | undefined; + noUncheckedIndexedAccess?: boolean | undefined; + noEmitOnError?: boolean | undefined; + noUnusedLocals?: boolean | undefined; + noUnusedParameters?: boolean | undefined; + noResolve?: boolean | undefined; + noImplicitOverride?: boolean | undefined; + noUncheckedSideEffectImports?: boolean | undefined; + outDir?: RootedDirectoryPath | undefined; + paths?: Record | undefined; + /** Plugins are parsed only so tools can report that native TypeScript does not support them. */ + plugins?: PluginImport[] | undefined; + preserveConstEnums?: boolean | undefined; + preserveSymlinks?: boolean | undefined; + project?: RootedPath | undefined; + resolveJsonModule?: boolean | undefined; + resolvePackageJsonExports?: boolean | undefined; + resolvePackageJsonImports?: boolean | undefined; + removeComments?: boolean | undefined; + rewriteRelativeImportExtensions?: boolean | undefined; + reactNamespace?: string | undefined; + rootDir?: RootedDirectoryPath | undefined; + rootDirs?: RootedDirectoryPath[] | undefined; + skipLibCheck?: boolean | undefined; + stableTypeOrdering?: boolean | undefined; + strict?: boolean | undefined; + strictBindCallApply?: boolean | undefined; + strictBuiltinIteratorReturn?: boolean | undefined; + strictFunctionTypes?: boolean | undefined; + strictNullChecks?: boolean | undefined; + strictPropertyInitialization?: boolean | undefined; + stripInternal?: boolean | undefined; + skipDefaultLibCheck?: boolean | undefined; + sourceMap?: boolean | undefined; + sourceRoot?: string | undefined; + suppressOutputPathCheck?: boolean | undefined; + target?: ScriptTarget | undefined; + traceResolution?: boolean | undefined; + tsBuildInfoFile?: RootedFilePath | undefined; + typeRoots?: RootedDirectoryPath[] | undefined; + types?: string[] | undefined; + useDefineForClassFields?: boolean | undefined; + useUnknownInCatchVariables?: boolean | undefined; + verbatimModuleSyntax?: boolean | undefined; + maxNodeModuleJsDepth?: number | undefined; + + // Internal fields + + configFilePath?: RootedFilePath | undefined; +} + +export interface PluginImport { + name: string; +} diff --git a/packages/typescript/src/api/diagnosticFormatter.ts b/packages/typescript/src/api/diagnosticFormatter.ts index 0290ed060ef2b..ed5129bb215d0 100644 --- a/packages/typescript/src/api/diagnosticFormatter.ts +++ b/packages/typescript/src/api/diagnosticFormatter.ts @@ -1,204 +1,204 @@ -import type { RootedFilePath } from "../ast/index.ts"; -import { convertToRelativePath } from "./path.ts"; -import type { DiagnosticResponse as Diagnostic } from "./proto.generated.ts"; - -export interface FormatDiagnosticsHost { - getCurrentDirectory(): string; - getCanonicalFileName(fileName: string): string; - getNewLine(): string; -} - -const foregroundColorEscapeGrey = "\x1b[90m"; -const foregroundColorEscapeRed = "\x1b[91m"; -const foregroundColorEscapeYellow = "\x1b[93m"; -const foregroundColorEscapeBlue = "\x1b[94m"; -const foregroundColorEscapeCyan = "\x1b[96m"; -const gutterStyleSequence = "\x1b[7m"; -const gutterSeparator = " "; -const resetEscapeSequence = "\x1b[0m"; -const ellipsis = "..."; -const halfIndent = " "; -const indent = " "; -const fileAppearsToBeBinaryCode = 1490; - -function diagnosticCategoryName(category: number): string { - switch (category) { - case 0: - return "warning"; - case 1: - return "error"; - case 2: - return "suggestion"; - case 3: - return "message"; - default: - throw new Error(`Unknown diagnostic category: ${category}`); - } -} - -function getCategoryFormat(category: number): string { - switch (category) { - case 0: - return foregroundColorEscapeYellow; - case 1: - return foregroundColorEscapeRed; - case 2: - return foregroundColorEscapeGrey; - case 3: - return foregroundColorEscapeBlue; - default: - throw new Error(`Unknown diagnostic category: ${category}`); - } -} - -function formatColorAndReset(text: string, formatStyle: string): string { - return formatStyle + text + resetEscapeSequence; -} - -function diagnosticPrefix(diagnostic: Diagnostic): string { - return diagnostic.source || "TS"; -} - -function flattenDiagnosticMessage(diagnostic: Diagnostic, newLine: string, indentLevel = 0): string { - let result = ""; - if (indentLevel) { - result += newLine + " ".repeat(indentLevel); - } - result += diagnostic.text; - for (const child of diagnostic.messageChain ?? []) { - result += flattenDiagnosticMessage(child, newLine, indentLevel + 1); - } - return result; -} - -function relativeFileName(fileName: RootedFilePath, host: FormatDiagnosticsHost): string { - return convertToRelativePath( - fileName, - host.getCurrentDirectory(), - name => host.getCanonicalFileName(name), - ); -} - -function formatLocation(diagnostic: Diagnostic, host: FormatDiagnosticsHost): string { - if (!diagnostic.fileName || !diagnostic.startPosition) return ""; - const fileName = relativeFileName(diagnostic.fileName, host); - const { line, character } = diagnostic.startPosition; - return formatColorAndReset(fileName, foregroundColorEscapeCyan) + - ":" + - formatColorAndReset(`${line + 1}`, foregroundColorEscapeYellow) + - ":" + - formatColorAndReset(`${character + 1}`, foregroundColorEscapeYellow); -} - -function formatCodeSpan( - diagnostic: Diagnostic, - lineIndent: string, - squiggleColor: string, - host: FormatDiagnosticsHost, -): string { - const { startPosition, endPosition, sourceLines } = diagnostic; - if (!startPosition || !endPosition || !sourceLines?.length) return ""; - - const endCharacter = startPosition.line === endPosition.line && - startPosition.character === endPosition.character - ? endPosition.character + 1 - : endPosition.character; - const hasMoreThanFiveLines = endPosition.line - startPosition.line >= 4; - const gutterWidth = hasMoreThanFiveLines - ? Math.max(ellipsis.length, `${endPosition.line + 1}`.length) - : `${endPosition.line + 1}`.length; - let context = ""; - let previousLine: number | undefined; - - for (const sourceLine of sourceLines) { - if (previousLine !== undefined && sourceLine.line > previousLine + 1) { - context += host.getNewLine(); - context += lineIndent + - formatColorAndReset(ellipsis.padStart(gutterWidth), gutterStyleSequence) + - gutterSeparator; - } - - const lineContent = sourceLine.text.trimEnd().replace(/\t/g, " "); - context += host.getNewLine(); - context += lineIndent + - formatColorAndReset(`${sourceLine.line + 1}`.padStart(gutterWidth), gutterStyleSequence) + - gutterSeparator + - lineContent + - host.getNewLine(); - context += lineIndent + - formatColorAndReset("".padStart(gutterWidth), gutterStyleSequence) + - gutterSeparator + - squiggleColor; - - if (sourceLine.line === startPosition.line) { - const lastCharacter = sourceLine.line === endPosition.line - ? endCharacter - : lineContent.length; - context += " ".repeat(startPosition.character); - context += "~".repeat(Math.max(0, lastCharacter - startPosition.character)); - } - else if (sourceLine.line === endPosition.line) { - context += "~".repeat(endCharacter); - } - else { - context += "~".repeat(lineContent.length); - } - context += resetEscapeSequence; - previousLine = sourceLine.line; - } - - return context; -} - -export function formatDiagnostics(diagnostics: readonly Diagnostic[], host: FormatDiagnosticsHost): string { - let output = ""; - for (const diagnostic of diagnostics) { - const errorMessage = `${diagnosticCategoryName(diagnostic.category)} ${diagnosticPrefix(diagnostic)}${diagnostic.code}: ${flattenDiagnosticMessage(diagnostic, host.getNewLine())}${host.getNewLine()}`; - if (diagnostic.fileName && diagnostic.startPosition) { - const { line, character } = diagnostic.startPosition; - output += `${relativeFileName(diagnostic.fileName, host)}(${line + 1},${character + 1}): ${errorMessage}`; - } - else { - output += errorMessage; - } - } - return output; -} - -export function formatDiagnosticsWithColorAndContext( - diagnostics: readonly Diagnostic[], - host: FormatDiagnosticsHost, -): string { - let output = ""; - for (let i = 0; i < diagnostics.length; i++) { - if (i > 0) { - output += host.getNewLine(); - } - const diagnostic = diagnostics[i]; - if (diagnostic.fileName && diagnostic.startPosition) { - output += formatLocation(diagnostic, host) + " - "; - } - output += formatColorAndReset(diagnosticCategoryName(diagnostic.category), getCategoryFormat(diagnostic.category)); - output += formatColorAndReset(` ${diagnosticPrefix(diagnostic)}${diagnostic.code}: `, foregroundColorEscapeGrey); - output += flattenDiagnosticMessage(diagnostic, host.getNewLine()); - - if (diagnostic.fileName && diagnostic.code !== fileAppearsToBeBinaryCode) { - output += host.getNewLine(); - output += formatCodeSpan(diagnostic, "", getCategoryFormat(diagnostic.category), host); - output += host.getNewLine(); - } - - if (diagnostic.relatedInformation?.length) { - for (const related of diagnostic.relatedInformation) { - if (related.fileName && related.startPosition) { - output += host.getNewLine(); - output += halfIndent + formatLocation(related, host); - output += " - " + flattenDiagnosticMessage(related, host.getNewLine()); - output += formatCodeSpan(related, indent, foregroundColorEscapeCyan, host); - } - output += host.getNewLine(); - } - } - } - return output; -} +import type { RootedFilePath } from "../ast/index.ts"; +import { convertToRelativePath } from "./path.ts"; +import type { DiagnosticResponse as Diagnostic } from "./proto.generated.ts"; + +export interface FormatDiagnosticsHost { + getCurrentDirectory(): string; + getCanonicalFileName(fileName: string): string; + getNewLine(): string; +} + +const foregroundColorEscapeGrey = "\x1b[90m"; +const foregroundColorEscapeRed = "\x1b[91m"; +const foregroundColorEscapeYellow = "\x1b[93m"; +const foregroundColorEscapeBlue = "\x1b[94m"; +const foregroundColorEscapeCyan = "\x1b[96m"; +const gutterStyleSequence = "\x1b[7m"; +const gutterSeparator = " "; +const resetEscapeSequence = "\x1b[0m"; +const ellipsis = "..."; +const halfIndent = " "; +const indent = " "; +const fileAppearsToBeBinaryCode = 1490; + +function diagnosticCategoryName(category: number): string { + switch (category) { + case 0: + return "warning"; + case 1: + return "error"; + case 2: + return "suggestion"; + case 3: + return "message"; + default: + throw new Error(`Unknown diagnostic category: ${category}`); + } +} + +function getCategoryFormat(category: number): string { + switch (category) { + case 0: + return foregroundColorEscapeYellow; + case 1: + return foregroundColorEscapeRed; + case 2: + return foregroundColorEscapeGrey; + case 3: + return foregroundColorEscapeBlue; + default: + throw new Error(`Unknown diagnostic category: ${category}`); + } +} + +function formatColorAndReset(text: string, formatStyle: string): string { + return formatStyle + text + resetEscapeSequence; +} + +function diagnosticPrefix(diagnostic: Diagnostic): string { + return diagnostic.source || "TS"; +} + +function flattenDiagnosticMessage(diagnostic: Diagnostic, newLine: string, indentLevel = 0): string { + let result = ""; + if (indentLevel) { + result += newLine + " ".repeat(indentLevel); + } + result += diagnostic.text; + for (const child of diagnostic.messageChain ?? []) { + result += flattenDiagnosticMessage(child, newLine, indentLevel + 1); + } + return result; +} + +function relativeFileName(fileName: RootedFilePath, host: FormatDiagnosticsHost): string { + return convertToRelativePath( + fileName, + host.getCurrentDirectory(), + name => host.getCanonicalFileName(name), + ); +} + +function formatLocation(diagnostic: Diagnostic, host: FormatDiagnosticsHost): string { + if (!diagnostic.fileName || !diagnostic.startPosition) return ""; + const fileName = relativeFileName(diagnostic.fileName, host); + const { line, character } = diagnostic.startPosition; + return formatColorAndReset(fileName, foregroundColorEscapeCyan) + + ":" + + formatColorAndReset(`${line + 1}`, foregroundColorEscapeYellow) + + ":" + + formatColorAndReset(`${character + 1}`, foregroundColorEscapeYellow); +} + +function formatCodeSpan( + diagnostic: Diagnostic, + lineIndent: string, + squiggleColor: string, + host: FormatDiagnosticsHost, +): string { + const { startPosition, endPosition, sourceLines } = diagnostic; + if (!startPosition || !endPosition || !sourceLines?.length) return ""; + + const endCharacter = startPosition.line === endPosition.line && + startPosition.character === endPosition.character + ? endPosition.character + 1 + : endPosition.character; + const hasMoreThanFiveLines = endPosition.line - startPosition.line >= 4; + const gutterWidth = hasMoreThanFiveLines + ? Math.max(ellipsis.length, `${endPosition.line + 1}`.length) + : `${endPosition.line + 1}`.length; + let context = ""; + let previousLine: number | undefined; + + for (const sourceLine of sourceLines) { + if (previousLine !== undefined && sourceLine.line > previousLine + 1) { + context += host.getNewLine(); + context += lineIndent + + formatColorAndReset(ellipsis.padStart(gutterWidth), gutterStyleSequence) + + gutterSeparator; + } + + const lineContent = sourceLine.text.trimEnd().replace(/\t/g, " "); + context += host.getNewLine(); + context += lineIndent + + formatColorAndReset(`${sourceLine.line + 1}`.padStart(gutterWidth), gutterStyleSequence) + + gutterSeparator + + lineContent + + host.getNewLine(); + context += lineIndent + + formatColorAndReset("".padStart(gutterWidth), gutterStyleSequence) + + gutterSeparator + + squiggleColor; + + if (sourceLine.line === startPosition.line) { + const lastCharacter = sourceLine.line === endPosition.line + ? endCharacter + : lineContent.length; + context += " ".repeat(startPosition.character); + context += "~".repeat(Math.max(0, lastCharacter - startPosition.character)); + } + else if (sourceLine.line === endPosition.line) { + context += "~".repeat(endCharacter); + } + else { + context += "~".repeat(lineContent.length); + } + context += resetEscapeSequence; + previousLine = sourceLine.line; + } + + return context; +} + +export function formatDiagnostics(diagnostics: readonly Diagnostic[], host: FormatDiagnosticsHost): string { + let output = ""; + for (const diagnostic of diagnostics) { + const errorMessage = `${diagnosticCategoryName(diagnostic.category)} ${diagnosticPrefix(diagnostic)}${diagnostic.code}: ${flattenDiagnosticMessage(diagnostic, host.getNewLine())}${host.getNewLine()}`; + if (diagnostic.fileName && diagnostic.startPosition) { + const { line, character } = diagnostic.startPosition; + output += `${relativeFileName(diagnostic.fileName, host)}(${line + 1},${character + 1}): ${errorMessage}`; + } + else { + output += errorMessage; + } + } + return output; +} + +export function formatDiagnosticsWithColorAndContext( + diagnostics: readonly Diagnostic[], + host: FormatDiagnosticsHost, +): string { + let output = ""; + for (let i = 0; i < diagnostics.length; i++) { + if (i > 0) { + output += host.getNewLine(); + } + const diagnostic = diagnostics[i]; + if (diagnostic.fileName && diagnostic.startPosition) { + output += formatLocation(diagnostic, host) + " - "; + } + output += formatColorAndReset(diagnosticCategoryName(diagnostic.category), getCategoryFormat(diagnostic.category)); + output += formatColorAndReset(` ${diagnosticPrefix(diagnostic)}${diagnostic.code}: `, foregroundColorEscapeGrey); + output += flattenDiagnosticMessage(diagnostic, host.getNewLine()); + + if (diagnostic.fileName && diagnostic.code !== fileAppearsToBeBinaryCode) { + output += host.getNewLine(); + output += formatCodeSpan(diagnostic, "", getCategoryFormat(diagnostic.category), host); + output += host.getNewLine(); + } + + if (diagnostic.relatedInformation?.length) { + for (const related of diagnostic.relatedInformation) { + if (related.fileName && related.startPosition) { + output += host.getNewLine(); + output += halfIndent + formatLocation(related, host); + output += " - " + flattenDiagnosticMessage(related, host.getNewLine()); + output += formatCodeSpan(related, indent, foregroundColorEscapeCyan, host); + } + output += host.getNewLine(); + } + } + } + return output; +} diff --git a/packages/typescript/src/api/fs.ts b/packages/typescript/src/api/fs.ts index ea9c51291c085..d301124916b0a 100644 --- a/packages/typescript/src/api/fs.ts +++ b/packages/typescript/src/api/fs.ts @@ -1,193 +1,193 @@ -import getExePath from "#getExePath"; -import { dirname } from "node:path"; -import type { - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../ast/index.ts"; -import { normalizePath } from "./path.ts"; -import type { - RequestDirectoryEntries, - RequestFileSystem, - RequestSymlink, -} from "./proto.generated.ts"; -import { - type DocumentIdentifier, - resolveFileName, -} from "./proto.ts"; - -export interface FileSystemEntries { - files: string[]; - directories: string[]; - /** Names from `files` or `directories` that are symbolic links. */ - symlinks: string[] | undefined; -} - -export interface FileSystemStat { - /** POSIX-style file mode, matching Node.js `fs.Stats.mode`. */ - mode: number; - /** File size in bytes, matching Node.js `fs.Stats.size`. */ - size: number; - /** Last modification time, matching Node.js `fs.Stats.mtime`. */ - mtime: Date; -} - -const useOS: unique symbol = Symbol("useOS"); -const identity: unique symbol = Symbol("identity"); -const fakeStat: unique symbol = Symbol("fakeStat"); -const noop: unique symbol = Symbol("noop"); -const error: unique symbol = Symbol("error"); - -export const serverFS: { - /** Delegate the configured operation, or the current callback invocation, to the server's operating-system filesystem. */ - readonly useOS: typeof useOS; - /** Use the input path as its own real path without consulting a filesystem. Valid only for `realpath`. */ - readonly identity: typeof identity; - /** Synthesize stat information from `directoryExists` and `fileExists`. Valid only for `stat`. */ - readonly fakeStat: typeof fakeStat; - /** Ignore writes without invoking a callback or writing to the server's operating-system filesystem. Valid only for `writeFile`. */ - readonly noop: typeof noop; - /** Panic if the configured operation, or current callback invocation, reaches the server filesystem. */ - readonly error: typeof error; -} = { - useOS: useOS, - identity: identity, - fakeStat: fakeStat, - noop: noop, - error: error, -}; - -export interface FileSystemCallbacks { - directoryExists: - | ((directoryName: RootedDirectoryPath) => boolean | typeof serverFS.useOS | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.error; - fileExists: - | ((fileName: RootedFilePath) => boolean | typeof serverFS.useOS | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.error; - getAccessibleEntries: - | ((directoryName: RootedDirectoryPath) => FileSystemEntries | typeof serverFS.useOS | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.error; - /** - * Read a file's content. - * - Return the file content as a `string` (including `""` for empty files). - * - Return `undefined` to indicate the file does not exist. - * - Return {@link serverFS.useOS} to fall back to the server's operating-system filesystem. - */ - readFile: - | ((fileName: RootedFilePath) => string | undefined | typeof serverFS.useOS | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.error; - /** Relative results are resolved against the queried path's directory by the server. */ - realpath: - | ((path: RootedPath) => string | typeof serverFS.useOS | typeof serverFS.identity | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.identity - | typeof serverFS.error; - stat: - | ((path: RootedPath) => FileSystemStat | undefined | typeof serverFS.useOS | typeof serverFS.fakeStat | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.fakeStat - | typeof serverFS.error; - writeFile: - | ((path: RootedFilePath, content: string) => void | typeof serverFS.useOS | typeof serverFS.noop | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.noop - | typeof serverFS.error; - removeFile: - | ((path: RootedPath) => void | typeof serverFS.useOS | typeof serverFS.noop | typeof serverFS.error) - | typeof serverFS.useOS - | typeof serverFS.noop - | typeof serverFS.error; -} - -export interface CreateFileSystemOptions { - /** Complete directory listings. Full filesystems derive these from `files` when omitted. */ - directories?: Record | undefined; - symlinks?: Record | undefined; - /** Files or directory trees hidden from an underlying snapshot or host filesystem. */ - removedPaths?: readonly string[] | undefined; -} - -export interface CreateFileSystemWithLibOptions extends CreateFileSystemOptions { - /** Default library directory used by a custom or non-embedded compiler executable. */ - defaultLibraryPath?: string | undefined; -} - -/** - * Files supplied to a request filesystem. String identifiers are file names; - * use `{ uri }` when supplying a document URI so it can be decoded correctly. - */ -export type RequestFileEntries = readonly (readonly [id: DocumentIdentifier, content: string])[]; - -/** Creates a full request filesystem. The server derives directory listings when omitted. */ -export function createFileSystem( - files: RequestFileEntries, - options: CreateFileSystemOptions = {}, -): RequestFileSystem { - return createRequestFileSystem("full", files, options); -} - -/** - * Creates a full request filesystem with the compiler's default library - * directory mounted read-only through the host filesystem. - */ -export function createFileSystemWithLib( - files: RequestFileEntries, - options: CreateFileSystemWithLibOptions = {}, -): RequestFileSystem { - const defaultLibraryPaths = options.defaultLibraryPath - ? [normalizePath(options.defaultLibraryPath)] - : [normalizePath("bundled:///libs")]; - if (!options.defaultLibraryPath) { - try { - defaultLibraryPaths.push(normalizePath(dirname(getExePath()))); - } - catch { - // A socket-connected embedded server can provide bundled libs without - // a locally installed compiler executable. - } - } - const symlinks = { ...options.symlinks }; - for (const defaultLibraryPath of defaultLibraryPaths) { - symlinks[defaultLibraryPath] ??= { target: defaultLibraryPath, host: true }; - } - return createRequestFileSystem("full", files, { - symlinks, - directories: options.directories, - removedPaths: options.removedPaths?.length ? options.removedPaths : undefined, - }); -} - -/** Creates a request filesystem layer, merging base directory listings when omitted. */ -export function createFileSystemLayer( - files: RequestFileEntries, - options: CreateFileSystemOptions = {}, -): RequestFileSystem { - return createRequestFileSystem("layer", files, options); -} - -function createRequestFileSystem( - kind: RequestFileSystem["kind"], - files: RequestFileEntries, - options: CreateFileSystemOptions, -): RequestFileSystem { - const normalizedFiles = new Map(); - for (const [id, content] of files) { - const fileName = normalizePath(resolveFileName(id)); - if (normalizedFiles.has(fileName)) { - throw new Error(`Duplicate request filesystem path: ${fileName}`); - } - normalizedFiles.set(fileName, content); - } - const fileRecord = Object.fromEntries(normalizedFiles); - return { - kind, - files: fileRecord, - directories: options.directories, - symlinks: options.symlinks, - removedPaths: options.removedPaths?.length ? [...options.removedPaths] : undefined, - }; -} +import getExePath from "#getExePath"; +import { dirname } from "node:path"; +import type { + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../ast/index.ts"; +import { normalizePath } from "./path.ts"; +import type { + RequestDirectoryEntries, + RequestFileSystem, + RequestSymlink, +} from "./proto.generated.ts"; +import { + type DocumentIdentifier, + resolveFileName, +} from "./proto.ts"; + +export interface FileSystemEntries { + files: string[]; + directories: string[]; + /** Names from `files` or `directories` that are symbolic links. */ + symlinks: string[] | undefined; +} + +export interface FileSystemStat { + /** POSIX-style file mode, matching Node.js `fs.Stats.mode`. */ + mode: number; + /** File size in bytes, matching Node.js `fs.Stats.size`. */ + size: number; + /** Last modification time, matching Node.js `fs.Stats.mtime`. */ + mtime: Date; +} + +const useOS: unique symbol = Symbol("useOS"); +const identity: unique symbol = Symbol("identity"); +const fakeStat: unique symbol = Symbol("fakeStat"); +const noop: unique symbol = Symbol("noop"); +const error: unique symbol = Symbol("error"); + +export const serverFS: { + /** Delegate the configured operation, or the current callback invocation, to the server's operating-system filesystem. */ + readonly useOS: typeof useOS; + /** Use the input path as its own real path without consulting a filesystem. Valid only for `realpath`. */ + readonly identity: typeof identity; + /** Synthesize stat information from `directoryExists` and `fileExists`. Valid only for `stat`. */ + readonly fakeStat: typeof fakeStat; + /** Ignore writes without invoking a callback or writing to the server's operating-system filesystem. Valid only for `writeFile`. */ + readonly noop: typeof noop; + /** Panic if the configured operation, or current callback invocation, reaches the server filesystem. */ + readonly error: typeof error; +} = { + useOS: useOS, + identity: identity, + fakeStat: fakeStat, + noop: noop, + error: error, +}; + +export interface FileSystemCallbacks { + directoryExists: + | ((directoryName: RootedDirectoryPath) => boolean | typeof serverFS.useOS | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.error; + fileExists: + | ((fileName: RootedFilePath) => boolean | typeof serverFS.useOS | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.error; + getAccessibleEntries: + | ((directoryName: RootedDirectoryPath) => FileSystemEntries | typeof serverFS.useOS | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.error; + /** + * Read a file's content. + * - Return the file content as a `string` (including `""` for empty files). + * - Return `undefined` to indicate the file does not exist. + * - Return {@link serverFS.useOS} to fall back to the server's operating-system filesystem. + */ + readFile: + | ((fileName: RootedFilePath) => string | undefined | typeof serverFS.useOS | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.error; + /** Relative results are resolved against the queried path's directory by the server. */ + realpath: + | ((path: RootedPath) => string | typeof serverFS.useOS | typeof serverFS.identity | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.identity + | typeof serverFS.error; + stat: + | ((path: RootedPath) => FileSystemStat | undefined | typeof serverFS.useOS | typeof serverFS.fakeStat | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.fakeStat + | typeof serverFS.error; + writeFile: + | ((path: RootedFilePath, content: string) => void | typeof serverFS.useOS | typeof serverFS.noop | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.noop + | typeof serverFS.error; + removeFile: + | ((path: RootedPath) => void | typeof serverFS.useOS | typeof serverFS.noop | typeof serverFS.error) + | typeof serverFS.useOS + | typeof serverFS.noop + | typeof serverFS.error; +} + +export interface CreateFileSystemOptions { + /** Complete directory listings. Full filesystems derive these from `files` when omitted. */ + directories?: Record | undefined; + symlinks?: Record | undefined; + /** Files or directory trees hidden from an underlying snapshot or host filesystem. */ + removedPaths?: readonly string[] | undefined; +} + +export interface CreateFileSystemWithLibOptions extends CreateFileSystemOptions { + /** Default library directory used by a custom or non-embedded compiler executable. */ + defaultLibraryPath?: string | undefined; +} + +/** + * Files supplied to a request filesystem. String identifiers are file names; + * use `{ uri }` when supplying a document URI so it can be decoded correctly. + */ +export type RequestFileEntries = readonly (readonly [id: DocumentIdentifier, content: string])[]; + +/** Creates a full request filesystem. The server derives directory listings when omitted. */ +export function createFileSystem( + files: RequestFileEntries, + options: CreateFileSystemOptions = {}, +): RequestFileSystem { + return createRequestFileSystem("full", files, options); +} + +/** + * Creates a full request filesystem with the compiler's default library + * directory mounted read-only through the host filesystem. + */ +export function createFileSystemWithLib( + files: RequestFileEntries, + options: CreateFileSystemWithLibOptions = {}, +): RequestFileSystem { + const defaultLibraryPaths = options.defaultLibraryPath + ? [normalizePath(options.defaultLibraryPath)] + : [normalizePath("bundled:///libs")]; + if (!options.defaultLibraryPath) { + try { + defaultLibraryPaths.push(normalizePath(dirname(getExePath()))); + } + catch { + // A socket-connected embedded server can provide bundled libs without + // a locally installed compiler executable. + } + } + const symlinks = { ...options.symlinks }; + for (const defaultLibraryPath of defaultLibraryPaths) { + symlinks[defaultLibraryPath] ??= { target: defaultLibraryPath, host: true }; + } + return createRequestFileSystem("full", files, { + symlinks, + directories: options.directories, + removedPaths: options.removedPaths?.length ? options.removedPaths : undefined, + }); +} + +/** Creates a request filesystem layer, merging base directory listings when omitted. */ +export function createFileSystemLayer( + files: RequestFileEntries, + options: CreateFileSystemOptions = {}, +): RequestFileSystem { + return createRequestFileSystem("layer", files, options); +} + +function createRequestFileSystem( + kind: RequestFileSystem["kind"], + files: RequestFileEntries, + options: CreateFileSystemOptions, +): RequestFileSystem { + const normalizedFiles = new Map(); + for (const [id, content] of files) { + const fileName = normalizePath(resolveFileName(id)); + if (normalizedFiles.has(fileName)) { + throw new Error(`Duplicate request filesystem path: ${fileName}`); + } + normalizedFiles.set(fileName, content); + } + const fileRecord = Object.fromEntries(normalizedFiles); + return { + kind, + files: fileRecord, + directories: options.directories, + symlinks: options.symlinks, + removedPaths: options.removedPaths?.length ? [...options.removedPaths] : undefined, + }; +} diff --git a/packages/typescript/src/api/fsCallbacks.ts b/packages/typescript/src/api/fsCallbacks.ts index bba5efa4155e5..461957184f6cf 100644 --- a/packages/typescript/src/api/fsCallbacks.ts +++ b/packages/typescript/src/api/fsCallbacks.ts @@ -1,144 +1,144 @@ -import { - type FileSystemCallbacks, - serverFS, -} from "./fs.ts"; - -type ServerFSSentinelName = keyof typeof serverFS; -type ServerFSSentinel = typeof serverFS[ServerFSSentinelName]; -type ServerFSSentinelResponse = { - [K in ServerFSSentinelName]: { kind: K; }; -}[ServerFSSentinelName]; - -export type FileSystemCallbackResponse = - | { kind: "value"; value?: unknown; } - | { kind: "missing"; } - | ServerFSSentinelResponse; - -interface FileSystemCallbackDefinition { - serverFS: readonly ServerFSSentinel[]; -} - -const fileSystemCallbackTable: Record = { - readFile: { serverFS: [serverFS.useOS, serverFS.error] }, - fileExists: { serverFS: [serverFS.useOS, serverFS.error] }, - directoryExists: { serverFS: [serverFS.useOS, serverFS.error] }, - getAccessibleEntries: { serverFS: [serverFS.useOS, serverFS.error] }, - realpath: { - serverFS: [serverFS.useOS, serverFS.identity, serverFS.error], - }, - stat: { - serverFS: [serverFS.useOS, serverFS.fakeStat, serverFS.error], - }, - writeFile: { - serverFS: [serverFS.useOS, serverFS.noop, serverFS.error], - }, - removeFile: { - serverFS: [serverFS.useOS, serverFS.noop, serverFS.error], - }, -}; - -type FileSystemCallbackName = keyof typeof fileSystemCallbackTable; -const fsCallbackNames = Object.keys(fileSystemCallbackTable) as FileSystemCallbackName[]; -const serverFSSentinelNames = Object.keys(serverFS) as ServerFSSentinelName[]; - -export interface FileSystemCallbackConfiguration { - callbackNames: FileSystemCallbackName[]; - arguments: string[]; -} - -export function configureFileSystemCallbacks(fs: FileSystemCallbacks | undefined): FileSystemCallbackConfiguration { - if (!fs) { - return { callbackNames: [], arguments: [] }; - } - - const callbackNames: FileSystemCallbackName[] = []; - const args: string[] = []; - for (const name of fsCallbackNames) { - const value = fs[name]; - if (typeof value === "function") { - callbackNames.push(name); - continue; - } - const sentinel = fileSystemCallbackTable[name].serverFS.find(sentinel => sentinel === value); - if (sentinel) { - const sentinelName = getServerFSSentinelName(sentinel); - if (sentinelName !== "useOS") { - args.push(`${name}:${sentinelName}`); - } - continue; - } - throw new TypeError(`Invalid filesystem callback '${name}': expected a function or a supported serverFS sentinel`); - } - args.push(...callbackNames); - return { callbackNames, arguments: args }; -} - -export function encodeFileSystemCallbackResult( - name: FileSystemCallbackName, - result: unknown, -): FileSystemCallbackResponse { - const sentinel = fileSystemCallbackTable[name].serverFS.find(sentinel => sentinel === result); - if (sentinel) { - return { kind: getServerFSSentinelName(sentinel) }; - } - - let valid: boolean; - switch (name) { - case "directoryExists": - case "fileExists": - valid = typeof result === "boolean"; - break; - case "getAccessibleEntries": { - const entries = result as { files?: unknown; directories?: unknown; symlinks?: unknown; } | null; - valid = !!entries - && isStringArray(entries.files) - && isStringArray(entries.directories) - && (entries.symlinks === undefined || isStringArray(entries.symlinks)); - break; - } - case "readFile": - if (result === undefined) return { kind: "missing" }; - valid = typeof result === "string"; - break; - case "realpath": - valid = typeof result === "string"; - break; - case "stat": { - if (result === undefined) return { kind: "missing" }; - const stat = result as { mode?: unknown; size?: unknown; mtime?: unknown; } | undefined; - valid = !!stat - && typeof stat.mode === "number" - && Number.isSafeInteger(stat.mode) - && stat.mode >= 0 - && stat.mode <= 0xffff_ffff - && typeof stat.size === "number" - && Number.isSafeInteger(stat.size) - && stat.size >= 0 - && stat.mtime instanceof Date - && !Number.isNaN(stat.mtime.getTime()); - break; - } - case "writeFile": - case "removeFile": - valid = result === undefined; - break; - } - - if (!valid) { - throw new TypeError(`Invalid result from filesystem callback '${name}'`); - } - return name === "writeFile" || name === "removeFile" ? { kind: "value" } : { kind: "value", value: result }; -} - -function isStringArray(value: unknown): value is string[] { - return Array.isArray(value) && value.every(element => typeof element === "string"); -} - -function getServerFSSentinelName(sentinel: ServerFSSentinel): ServerFSSentinelName { - for (const name of serverFSSentinelNames) { - if (serverFS[name] === sentinel) { - return name; - } - } - throw new TypeError("Unknown serverFS sentinel"); -} +import { + type FileSystemCallbacks, + serverFS, +} from "./fs.ts"; + +type ServerFSSentinelName = keyof typeof serverFS; +type ServerFSSentinel = typeof serverFS[ServerFSSentinelName]; +type ServerFSSentinelResponse = { + [K in ServerFSSentinelName]: { kind: K; }; +}[ServerFSSentinelName]; + +export type FileSystemCallbackResponse = + | { kind: "value"; value?: unknown; } + | { kind: "missing"; } + | ServerFSSentinelResponse; + +interface FileSystemCallbackDefinition { + serverFS: readonly ServerFSSentinel[]; +} + +const fileSystemCallbackTable: Record = { + readFile: { serverFS: [serverFS.useOS, serverFS.error] }, + fileExists: { serverFS: [serverFS.useOS, serverFS.error] }, + directoryExists: { serverFS: [serverFS.useOS, serverFS.error] }, + getAccessibleEntries: { serverFS: [serverFS.useOS, serverFS.error] }, + realpath: { + serverFS: [serverFS.useOS, serverFS.identity, serverFS.error], + }, + stat: { + serverFS: [serverFS.useOS, serverFS.fakeStat, serverFS.error], + }, + writeFile: { + serverFS: [serverFS.useOS, serverFS.noop, serverFS.error], + }, + removeFile: { + serverFS: [serverFS.useOS, serverFS.noop, serverFS.error], + }, +}; + +type FileSystemCallbackName = keyof typeof fileSystemCallbackTable; +const fsCallbackNames = Object.keys(fileSystemCallbackTable) as FileSystemCallbackName[]; +const serverFSSentinelNames = Object.keys(serverFS) as ServerFSSentinelName[]; + +export interface FileSystemCallbackConfiguration { + callbackNames: FileSystemCallbackName[]; + arguments: string[]; +} + +export function configureFileSystemCallbacks(fs: FileSystemCallbacks | undefined): FileSystemCallbackConfiguration { + if (!fs) { + return { callbackNames: [], arguments: [] }; + } + + const callbackNames: FileSystemCallbackName[] = []; + const args: string[] = []; + for (const name of fsCallbackNames) { + const value = fs[name]; + if (typeof value === "function") { + callbackNames.push(name); + continue; + } + const sentinel = fileSystemCallbackTable[name].serverFS.find(sentinel => sentinel === value); + if (sentinel) { + const sentinelName = getServerFSSentinelName(sentinel); + if (sentinelName !== "useOS") { + args.push(`${name}:${sentinelName}`); + } + continue; + } + throw new TypeError(`Invalid filesystem callback '${name}': expected a function or a supported serverFS sentinel`); + } + args.push(...callbackNames); + return { callbackNames, arguments: args }; +} + +export function encodeFileSystemCallbackResult( + name: FileSystemCallbackName, + result: unknown, +): FileSystemCallbackResponse { + const sentinel = fileSystemCallbackTable[name].serverFS.find(sentinel => sentinel === result); + if (sentinel) { + return { kind: getServerFSSentinelName(sentinel) }; + } + + let valid: boolean; + switch (name) { + case "directoryExists": + case "fileExists": + valid = typeof result === "boolean"; + break; + case "getAccessibleEntries": { + const entries = result as { files?: unknown; directories?: unknown; symlinks?: unknown; } | null; + valid = !!entries + && isStringArray(entries.files) + && isStringArray(entries.directories) + && (entries.symlinks === undefined || isStringArray(entries.symlinks)); + break; + } + case "readFile": + if (result === undefined) return { kind: "missing" }; + valid = typeof result === "string"; + break; + case "realpath": + valid = typeof result === "string"; + break; + case "stat": { + if (result === undefined) return { kind: "missing" }; + const stat = result as { mode?: unknown; size?: unknown; mtime?: unknown; } | undefined; + valid = !!stat + && typeof stat.mode === "number" + && Number.isSafeInteger(stat.mode) + && stat.mode >= 0 + && stat.mode <= 0xffff_ffff + && typeof stat.size === "number" + && Number.isSafeInteger(stat.size) + && stat.size >= 0 + && stat.mtime instanceof Date + && !Number.isNaN(stat.mtime.getTime()); + break; + } + case "writeFile": + case "removeFile": + valid = result === undefined; + break; + } + + if (!valid) { + throw new TypeError(`Invalid result from filesystem callback '${name}'`); + } + return name === "writeFile" || name === "removeFile" ? { kind: "value" } : { kind: "value", value: result }; +} + +function isStringArray(value: unknown): value is string[] { + return Array.isArray(value) && value.every(element => typeof element === "string"); +} + +function getServerFSSentinelName(sentinel: ServerFSSentinel): ServerFSSentinelName { + for (const name of serverFSSentinelNames) { + if (serverFS[name] === sentinel) { + return name; + } + } + throw new TypeError("Unknown serverFS sentinel"); +} diff --git a/packages/typescript/src/api/node/encoder.generated.ts b/packages/typescript/src/api/node/encoder.generated.ts index 7b9c4de1425f6..a18384ec6ac90 100644 --- a/packages/typescript/src/api/node/encoder.generated.ts +++ b/packages/typescript/src/api/node/encoder.generated.ts @@ -1,104 +1,104 @@ -// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. - -import type { - ArrayLiteralExpression, - Block, - ExportAssignment, - ExportDeclaration, - ExportSpecifier, - HeritageClause, - ImportAttributes, - ImportClause, - ImportEqualsDeclaration, - ImportSpecifier, - ImportTypeNode, - JSDocParameterOrPropertyTag, - JSDocTypeLiteral, - JsxText, - MetaProperty, - ModuleDeclaration, - Node, - ObjectLiteralExpression, - PostfixUnaryExpression, - PrefixUnaryExpression, - SyntheticExpression, - TypeOperatorNode, -} from "../../ast/index.ts"; -import { SyntaxKind } from "../../ast/index.ts"; -import { - NODE_DATA_TYPE_CHILDREN, - NODE_DATA_TYPE_EXTENDED, - NODE_DATA_TYPE_STRING, -} from "./protocol.ts"; - -export function getNodeDataType(kind: SyntaxKind): number { - switch (kind) { - case SyntaxKind.Identifier: - case SyntaxKind.PrivateIdentifier: - case SyntaxKind.JsxText: - case SyntaxKind.JSDocText: - case SyntaxKind.JSDocLink: - case SyntaxKind.JSDocLinkPlain: - case SyntaxKind.JSDocLinkCode: - return NODE_DATA_TYPE_STRING; - case SyntaxKind.StringLiteral: - case SyntaxKind.NumericLiteral: - case SyntaxKind.BigIntLiteral: - case SyntaxKind.RegularExpressionLiteral: - case SyntaxKind.NoSubstitutionTemplateLiteral: - case SyntaxKind.TemplateHead: - case SyntaxKind.TemplateMiddle: - case SyntaxKind.TemplateTail: - case SyntaxKind.SourceFile: - return NODE_DATA_TYPE_EXTENDED; - default: - return NODE_DATA_TYPE_CHILDREN; - } -} - -export function getNodeCommonData(node: Node): number { - switch (node.kind) { - case SyntaxKind.Block: - return ((node as Block).multiLine ? 1 : 0) << 24; - case SyntaxKind.HeritageClause: - return ((node as HeritageClause).token === SyntaxKind.ImplementsKeyword ? 1 : 0) << 24; - case SyntaxKind.ExportAssignment: - return ((node as ExportAssignment).isExportEquals ? 1 : 0) << 24; - case SyntaxKind.ExportSpecifier: - return ((node as ExportSpecifier).isTypeOnly ? 1 : 0) << 24; - case SyntaxKind.PrefixUnaryExpression: - return ((node as PrefixUnaryExpression).operator === SyntaxKind.MinusToken ? 1 : (node as PrefixUnaryExpression).operator === SyntaxKind.TildeToken ? 2 : (node as PrefixUnaryExpression).operator === SyntaxKind.ExclamationToken ? 3 : (node as PrefixUnaryExpression).operator === SyntaxKind.PlusPlusToken ? 4 : (node as PrefixUnaryExpression).operator === SyntaxKind.MinusMinusToken ? 5 : 0) << 24; - case SyntaxKind.PostfixUnaryExpression: - return ((node as PostfixUnaryExpression).operator === SyntaxKind.MinusMinusToken ? 1 : 0) << 24; - case SyntaxKind.MetaProperty: - return ((node as MetaProperty).keywordToken === SyntaxKind.NewKeyword ? 1 : 0) << 24; - case SyntaxKind.ArrayLiteralExpression: - return ((node as ArrayLiteralExpression).multiLine ? 1 : 0) << 24; - case SyntaxKind.ObjectLiteralExpression: - return ((node as ObjectLiteralExpression).multiLine ? 1 : 0) << 24; - case SyntaxKind.TypeOperator: - return ((node as TypeOperatorNode).operator === SyntaxKind.ReadonlyKeyword ? 1 : (node as TypeOperatorNode).operator === SyntaxKind.UniqueKeyword ? 2 : 0) << 24; - case SyntaxKind.ImportAttributes: - return ((node as ImportAttributes).multiLine ? 1 : 0) << 24 | ((node as ImportAttributes).token === SyntaxKind.AssertKeyword ? 1 : 0) << 25; - case SyntaxKind.JsxText: - return ((node as JsxText).containsOnlyTriviaWhiteSpaces ? 1 : 0) << 24; - case SyntaxKind.ModuleDeclaration: - return ((node as ModuleDeclaration).keyword === SyntaxKind.NamespaceKeyword ? 1 : 0) << 24; - case SyntaxKind.ImportEqualsDeclaration: - return ((node as ImportEqualsDeclaration).isTypeOnly ? 1 : 0) << 24; - case SyntaxKind.ExportDeclaration: - return ((node as ExportDeclaration).isTypeOnly ? 1 : 0) << 24; - case SyntaxKind.ImportType: - return ((node as ImportTypeNode).isTypeOf ? 1 : 0) << 24; - case SyntaxKind.ImportClause: - return ((node as ImportClause).phaseModifier === SyntaxKind.TypeKeyword ? 1 : (node as ImportClause).phaseModifier === SyntaxKind.DeferKeyword ? 2 : (node as ImportClause).phaseModifier === SyntaxKind.SourceKeyword ? 3 : 0) << 24; - case SyntaxKind.ImportSpecifier: - return ((node as ImportSpecifier).isTypeOnly ? 1 : 0) << 24; - case SyntaxKind.JSDocTypeLiteral: - return ((node as JSDocTypeLiteral).isArrayType ? 1 : 0) << 24; - case SyntaxKind.JSDocParameterTag: - case SyntaxKind.JSDocPropertyTag: - return ((node as JSDocParameterOrPropertyTag).isBracketed ? 1 : 0) << 24 | ((node as JSDocParameterOrPropertyTag).isNameFirst ? 1 : 0) << 25; - } - return 0; -} +// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. + +import type { + ArrayLiteralExpression, + Block, + ExportAssignment, + ExportDeclaration, + ExportSpecifier, + HeritageClause, + ImportAttributes, + ImportClause, + ImportEqualsDeclaration, + ImportSpecifier, + ImportTypeNode, + JSDocParameterOrPropertyTag, + JSDocTypeLiteral, + JsxText, + MetaProperty, + ModuleDeclaration, + Node, + ObjectLiteralExpression, + PostfixUnaryExpression, + PrefixUnaryExpression, + SyntheticExpression, + TypeOperatorNode, +} from "../../ast/index.ts"; +import { SyntaxKind } from "../../ast/index.ts"; +import { + NODE_DATA_TYPE_CHILDREN, + NODE_DATA_TYPE_EXTENDED, + NODE_DATA_TYPE_STRING, +} from "./protocol.ts"; + +export function getNodeDataType(kind: SyntaxKind): number { + switch (kind) { + case SyntaxKind.Identifier: + case SyntaxKind.PrivateIdentifier: + case SyntaxKind.JsxText: + case SyntaxKind.JSDocText: + case SyntaxKind.JSDocLink: + case SyntaxKind.JSDocLinkPlain: + case SyntaxKind.JSDocLinkCode: + return NODE_DATA_TYPE_STRING; + case SyntaxKind.StringLiteral: + case SyntaxKind.NumericLiteral: + case SyntaxKind.BigIntLiteral: + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.NoSubstitutionTemplateLiteral: + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: + case SyntaxKind.TemplateTail: + case SyntaxKind.SourceFile: + return NODE_DATA_TYPE_EXTENDED; + default: + return NODE_DATA_TYPE_CHILDREN; + } +} + +export function getNodeCommonData(node: Node): number { + switch (node.kind) { + case SyntaxKind.Block: + return ((node as Block).multiLine ? 1 : 0) << 24; + case SyntaxKind.HeritageClause: + return ((node as HeritageClause).token === SyntaxKind.ImplementsKeyword ? 1 : 0) << 24; + case SyntaxKind.ExportAssignment: + return ((node as ExportAssignment).isExportEquals ? 1 : 0) << 24; + case SyntaxKind.ExportSpecifier: + return ((node as ExportSpecifier).isTypeOnly ? 1 : 0) << 24; + case SyntaxKind.PrefixUnaryExpression: + return ((node as PrefixUnaryExpression).operator === SyntaxKind.MinusToken ? 1 : (node as PrefixUnaryExpression).operator === SyntaxKind.TildeToken ? 2 : (node as PrefixUnaryExpression).operator === SyntaxKind.ExclamationToken ? 3 : (node as PrefixUnaryExpression).operator === SyntaxKind.PlusPlusToken ? 4 : (node as PrefixUnaryExpression).operator === SyntaxKind.MinusMinusToken ? 5 : 0) << 24; + case SyntaxKind.PostfixUnaryExpression: + return ((node as PostfixUnaryExpression).operator === SyntaxKind.MinusMinusToken ? 1 : 0) << 24; + case SyntaxKind.MetaProperty: + return ((node as MetaProperty).keywordToken === SyntaxKind.NewKeyword ? 1 : 0) << 24; + case SyntaxKind.ArrayLiteralExpression: + return ((node as ArrayLiteralExpression).multiLine ? 1 : 0) << 24; + case SyntaxKind.ObjectLiteralExpression: + return ((node as ObjectLiteralExpression).multiLine ? 1 : 0) << 24; + case SyntaxKind.TypeOperator: + return ((node as TypeOperatorNode).operator === SyntaxKind.ReadonlyKeyword ? 1 : (node as TypeOperatorNode).operator === SyntaxKind.UniqueKeyword ? 2 : 0) << 24; + case SyntaxKind.ImportAttributes: + return ((node as ImportAttributes).multiLine ? 1 : 0) << 24 | ((node as ImportAttributes).token === SyntaxKind.AssertKeyword ? 1 : 0) << 25; + case SyntaxKind.JsxText: + return ((node as JsxText).containsOnlyTriviaWhiteSpaces ? 1 : 0) << 24; + case SyntaxKind.ModuleDeclaration: + return ((node as ModuleDeclaration).keyword === SyntaxKind.NamespaceKeyword ? 1 : 0) << 24; + case SyntaxKind.ImportEqualsDeclaration: + return ((node as ImportEqualsDeclaration).isTypeOnly ? 1 : 0) << 24; + case SyntaxKind.ExportDeclaration: + return ((node as ExportDeclaration).isTypeOnly ? 1 : 0) << 24; + case SyntaxKind.ImportType: + return ((node as ImportTypeNode).isTypeOf ? 1 : 0) << 24; + case SyntaxKind.ImportClause: + return ((node as ImportClause).phaseModifier === SyntaxKind.TypeKeyword ? 1 : (node as ImportClause).phaseModifier === SyntaxKind.DeferKeyword ? 2 : (node as ImportClause).phaseModifier === SyntaxKind.SourceKeyword ? 3 : 0) << 24; + case SyntaxKind.ImportSpecifier: + return ((node as ImportSpecifier).isTypeOnly ? 1 : 0) << 24; + case SyntaxKind.JSDocTypeLiteral: + return ((node as JSDocTypeLiteral).isArrayType ? 1 : 0) << 24; + case SyntaxKind.JSDocParameterTag: + case SyntaxKind.JSDocPropertyTag: + return ((node as JSDocParameterOrPropertyTag).isBracketed ? 1 : 0) << 24 | ((node as JSDocParameterOrPropertyTag).isNameFirst ? 1 : 0) << 25; + } + return 0; +} diff --git a/packages/typescript/src/api/node/encoder.ts b/packages/typescript/src/api/node/encoder.ts index 0bfdcc2ff02e4..c88b4dbd6983a 100644 --- a/packages/typescript/src/api/node/encoder.ts +++ b/packages/typescript/src/api/node/encoder.ts @@ -1,382 +1,382 @@ -import type { - FileReference, - LiteralLikeNode, - Node, - NodeArray, - SourceFile, - TemplateLiteralLikeNode, -} from "../../ast/index.ts"; -import { SyntaxKind } from "../../ast/index.ts"; -import { - getNodeCommonData, - getNodeDataType, -} from "./encoder.generated.ts"; -import { MsgpackWriter } from "./msgpack.ts"; -import { - childProperties, - HEADER_OFFSET_EXTENDED_DATA, - HEADER_OFFSET_METADATA, - HEADER_OFFSET_NODES, - HEADER_OFFSET_STRING_TABLE, - HEADER_OFFSET_STRING_TABLE_OFFSETS, - HEADER_OFFSET_STRUCTURED_DATA, - HEADER_SIZE, - KIND_NODE_LIST, - NODE_DATA_TYPE_CHILDREN, - NODE_DATA_TYPE_EXTENDED, - NODE_DATA_TYPE_STRING, - NODE_LEN, - PROTOCOL_VERSION, -} from "./protocol.ts"; -import { encodeWtf8 } from "./wtf8.ts"; - -const NODE_FIELDS = NODE_LEN / 4; -const NODE_FIELD_NEXT = 3; -const NO_STRUCTURED_DATA = 0xFFFFFFFF; - -// String table that accumulates strings into a flat byte pool. -class StringTable { - private parts: Uint8Array[]; - private byteLen: number; - private offsets: number[]; - - constructor() { - this.parts = []; - this.byteLen = 0; - this.offsets = []; - } - - add(text: string): number { - const index = this.offsets.length; - const encoded = encodeWtf8(text); - const offset = this.byteLen; - this.parts.push(encoded); - this.byteLen += encoded.length; - this.offsets.push(offset, offset + encoded.length); - return index; - } - - encode(): Uint8Array { - const offsetBytes = new Uint8Array(this.offsets.length * 4); - const view = new DataView(offsetBytes.buffer); - for (let i = 0; i < this.offsets.length; i++) { - view.setUint32(i * 4, this.offsets[i], true); - } - const result = new Uint8Array(offsetBytes.length + this.byteLen); - result.set(offsetBytes, 0); - let offset = offsetBytes.length; - for (const part of this.parts) { - result.set(part, offset); - offset += part.length; - } - return result; - } - - stringByteLength(): number { - return this.byteLen; - } - - offsetsCount(): number { - return this.offsets.length; - } -} - -function getChildrenPropertyMask(node: Node): number { - const kind = node.kind; - - const props = childProperties[kind]; - if (!props) { - return 0; - } - const n = node as unknown as Record; - let mask = 0; - for (let i = 0; i < props.length; i++) { - const prop = props[i]; - if (prop !== undefined && isChildPresent(n[prop])) { - mask |= 1 << i; - } - } - return mask; -} - -// A child is "present" if it's non-null/non-undefined. -// This matches the Go encoder's behavior where non-nil NodeLists (even empty) -// are treated as present, and only nil NodeLists are absent. -function isChildPresent(v: unknown): boolean { - if (v === undefined || v === null) return false; - return true; -} - -function recordNodeStrings(node: Node, strs: StringTable): number { - return strs.add((node as LiteralLikeNode).text ?? ""); -} - -function encodeFileReferences(refs: readonly FileReference[] | undefined, writer: MsgpackWriter): number { - if (!refs || refs.length === 0) return NO_STRUCTURED_DATA; - const offset = writer.finish().length; - writer.writeArrayHeader(refs.length); - for (const ref of refs) { - writer.writeArrayHeader(5); - writer.writeUint(ref.pos); - writer.writeUint(ref.end); - writer.writeString(ref.fileName); - writer.writeUint(ref.resolutionMode ?? 0); - writer.writeBool(ref.preserve ?? false); - } - return offset; -} - -function recordExtendedData(node: Node, strs: StringTable, extendedData: number[], structuredWriter: MsgpackWriter): number { - const offset = extendedData.length * 4; - if (node.kind === SyntaxKind.SourceFile) { - const sf = node as SourceFile; - const textIndex = strs.add(sf.text); - const fileNameIndex = strs.add(sf.fileName); - const pathIndex = strs.add(sf.path); - const referencedFilesOffset = encodeFileReferences(sf.referencedFiles, structuredWriter); - const typeRefDirectivesOffset = encodeFileReferences(sf.typeReferenceDirectives, structuredWriter); - const libRefDirectivesOffset = encodeFileReferences(sf.libReferenceDirectives, structuredWriter); - // Content-mapper metadata is program-owned and supplied only by the Go encoder. - extendedData.push(textIndex, fileNameIndex, pathIndex, sf.languageVariant, sf.scriptKind, referencedFilesOffset, typeRefDirectivesOffset, libRefDirectivesOffset, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, 0, textIndex, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA); - } - else if ( - node.kind === SyntaxKind.TemplateHead || - node.kind === SyntaxKind.TemplateMiddle || - node.kind === SyntaxKind.TemplateTail - ) { - const tmpl = node as TemplateLiteralLikeNode; - const text: string = tmpl.text ?? ""; - const rawText: string = tmpl.rawText ?? ""; - const templateFlags: number = tmpl.templateFlags ?? 0; - const textIndex = strs.add(text); - const rawTextIndex = strs.add(rawText); - extendedData.push(textIndex, rawTextIndex, templateFlags); - } - else { - // StringLiteral, NumericLiteral, BigIntLiteral, RegularExpressionLiteral, - // NoSubstitutionTemplateLiteral — format: [textIndex, tokenFlags] - const n = node as any; - const text: string = n.text ?? ""; - const tokenFlags: number = n.tokenFlags ?? 0; - const textIndex = strs.add(text); - extendedData.push(textIndex, tokenFlags); - } - return offset; -} - -function getNodeData(node: Node, strs: StringTable, extendedData: number[], structuredWriter: MsgpackWriter): number { - const t = getNodeDataType(node.kind); - const common = getNodeCommonData(node); - switch (t) { - case NODE_DATA_TYPE_CHILDREN: - return t | common | getChildrenPropertyMask(node); - case NODE_DATA_TYPE_STRING: - return t | common | recordNodeStrings(node, strs); - case NODE_DATA_TYPE_EXTENDED: - return t | common | recordExtendedData(node, strs, extendedData, structuredWriter); - default: - throw new Error("unreachable"); - } -} - -function getChildPropertiesForNode(node: Node): readonly (string | undefined)[] | undefined { - return childProperties[node.kind]; -} - -// Returns whether a value is a NodeArray (array-like with pos and end). -function isNodeArray(value: any): value is NodeArray { - return Array.isArray(value) && typeof (value as any).pos === "number" && typeof (value as any).end === "number"; -} - -/** - * Encode a SourceFile AST node into the binary format. - */ -export function encodeSourceFile(sourceFile: SourceFile): Uint8Array { - return encodeNode(sourceFile); -} - -/** - * Encode an arbitrary AST node into the binary format. - * When encoding a non-SourceFile node, the header hash and parse options fields will be zero. - */ -export function encodeNode(node: Node): Uint8Array { - const strs = new StringTable(); - const extendedDataValues: number[] = []; - const structuredWriter = new MsgpackWriter(); - - // We'll build an array of uint32 values for the nodes section, 7 per node - const nodeValues: number[] = []; - - // Nil node (index 0) - nodeValues.push(0, 0, 0, 0, 0, 0, 0); - - let nodeCount = 0; - let parentIndex = 0; - let prevIndex = 0; - - function visitNode(node: Node): void { - nodeCount++; - const currentIndex = nodeCount; - - if (prevIndex !== 0) { - // Set next pointer on previous sibling - nodeValues[prevIndex * NODE_FIELDS + NODE_FIELD_NEXT] = currentIndex; - } - - const data = getNodeData(node, strs, extendedDataValues, structuredWriter); - nodeValues.push( - node.kind, - node.pos >= 0 ? node.pos : 0, - node.end >= 0 ? node.end : 0, - 0, // next (filled in later) - parentIndex, - data, - node.flags, - ); - - const saveParentIndex = parentIndex; - const savePrevIndex = prevIndex; - parentIndex = currentIndex; - prevIndex = 0; - - visitChildren(node); - - prevIndex = currentIndex; - parentIndex = saveParentIndex; - } - - function visitNodeList(list: NodeArray): void { - if (!list) { - return; - } - - nodeCount++; - const currentIndex = nodeCount; - - if (prevIndex !== 0) { - nodeValues[prevIndex * NODE_FIELDS + NODE_FIELD_NEXT] = currentIndex; - } - - nodeValues.push( - KIND_NODE_LIST, - list.pos >= 0 ? list.pos : 0, - list.end >= 0 ? list.end : 0, - 0, // next - parentIndex, - list.length, // data for NodeList is its length - list.hasTrailingComma ? 1 : 0, // NodeLists have no AST flags; this slot is reused for hasTrailingComma - ); - - const saveParentIndex = parentIndex; - parentIndex = currentIndex; - prevIndex = 0; - - for (const child of list) { - visitNode(child); - } - - prevIndex = currentIndex; - parentIndex = saveParentIndex; - } - - function visitChildren(node: Node): void { - const props = getChildPropertiesForNode(node); - const n = node as any; - - if (props) { - for (const propName of props) { - if (propName === undefined) continue; - const child = n[propName]; - if (child === undefined || child === null) continue; - if (isNodeArray(child)) { - visitNodeList(child); - } - else { - visitNode(child); - } - } - } - } - - // Encode root node - nodeCount++; - parentIndex++; - const rootData = getNodeData(node, strs, extendedDataValues, structuredWriter); - nodeValues.push( - node.kind, - node.pos >= 0 ? node.pos : 0, - node.end >= 0 ? node.end : 0, - 0, - 0, - rootData, - node.flags, - ); - - const saveParent = parentIndex; - prevIndex = 0; - parentIndex = 1; // root is at index 1 - visitChildren(node); - parentIndex = saveParent; - - // Encode extended data section - const extendedDataBytes = new Uint8Array(extendedDataValues.length * 4); - const extView = new DataView(extendedDataBytes.buffer); - for (let i = 0; i < extendedDataValues.length; i++) { - extView.setUint32(i * 4, extendedDataValues[i], true); - } - - // Encode structured data section - const structuredDataBytes = structuredWriter.finish(); - - // Encode string table - const strsBytes = strs.encode(); - - // Encode nodes section - const nodesBytes = new Uint8Array(nodeValues.length * 4); - const nodesView = new DataView(nodesBytes.buffer); - for (let i = 0; i < nodeValues.length; i++) { - nodesView.setUint32(i * 4, nodeValues[i] >>> 0, true); - } - - // Calculate section offsets - const offsetStringTableOffsets = HEADER_SIZE; - const offsetStringTableData = HEADER_SIZE + strs.offsetsCount() * 4; - const offsetExtendedData = offsetStringTableData + strs.stringByteLength(); - const offsetStructuredData = offsetExtendedData + extendedDataBytes.length; - const offsetNodes = offsetStructuredData + structuredDataBytes.length; - - // Build header - const header = new Uint8Array(HEADER_SIZE); - const headerView = new DataView(header.buffer); - const metadata = PROTOCOL_VERSION << 24; - headerView.setUint32(HEADER_OFFSET_METADATA, metadata, true); - // bytes 4-19: hash (zero for non-SourceFile, we don't have access to xxh3 here) - // byte 20-23: parse options (zero for non-SourceFile) - headerView.setUint32(HEADER_OFFSET_STRING_TABLE_OFFSETS, offsetStringTableOffsets, true); - headerView.setUint32(HEADER_OFFSET_STRING_TABLE, offsetStringTableData, true); - headerView.setUint32(HEADER_OFFSET_EXTENDED_DATA, offsetExtendedData, true); - headerView.setUint32(HEADER_OFFSET_STRUCTURED_DATA, offsetStructuredData, true); - headerView.setUint32(HEADER_OFFSET_NODES, offsetNodes, true); - - // Concatenate all sections - const result = new Uint8Array(header.length + strsBytes.length + extendedDataBytes.length + structuredDataBytes.length + nodesBytes.length); - result.set(header, 0); - result.set(strsBytes, HEADER_SIZE); - result.set(extendedDataBytes, offsetExtendedData); - result.set(structuredDataBytes, offsetStructuredData); - result.set(nodesBytes, offsetNodes); - return result; -} - -/** - * Encode a Uint8Array to a base64 string. - */ -export function uint8ArrayToBase64(data: Uint8Array): string { - return Buffer.from(data).toString("base64"); -} - -export function sourceFileResponseToUint8Array(response: { readonly data: string; } | null | undefined): Uint8Array | undefined { - if (!response) return undefined; - const buffer = Buffer.from(response.data, "base64"); - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); -} +import type { + FileReference, + LiteralLikeNode, + Node, + NodeArray, + SourceFile, + TemplateLiteralLikeNode, +} from "../../ast/index.ts"; +import { SyntaxKind } from "../../ast/index.ts"; +import { + getNodeCommonData, + getNodeDataType, +} from "./encoder.generated.ts"; +import { MsgpackWriter } from "./msgpack.ts"; +import { + childProperties, + HEADER_OFFSET_EXTENDED_DATA, + HEADER_OFFSET_METADATA, + HEADER_OFFSET_NODES, + HEADER_OFFSET_STRING_TABLE, + HEADER_OFFSET_STRING_TABLE_OFFSETS, + HEADER_OFFSET_STRUCTURED_DATA, + HEADER_SIZE, + KIND_NODE_LIST, + NODE_DATA_TYPE_CHILDREN, + NODE_DATA_TYPE_EXTENDED, + NODE_DATA_TYPE_STRING, + NODE_LEN, + PROTOCOL_VERSION, +} from "./protocol.ts"; +import { encodeWtf8 } from "./wtf8.ts"; + +const NODE_FIELDS = NODE_LEN / 4; +const NODE_FIELD_NEXT = 3; +const NO_STRUCTURED_DATA = 0xFFFFFFFF; + +// String table that accumulates strings into a flat byte pool. +class StringTable { + private parts: Uint8Array[]; + private byteLen: number; + private offsets: number[]; + + constructor() { + this.parts = []; + this.byteLen = 0; + this.offsets = []; + } + + add(text: string): number { + const index = this.offsets.length; + const encoded = encodeWtf8(text); + const offset = this.byteLen; + this.parts.push(encoded); + this.byteLen += encoded.length; + this.offsets.push(offset, offset + encoded.length); + return index; + } + + encode(): Uint8Array { + const offsetBytes = new Uint8Array(this.offsets.length * 4); + const view = new DataView(offsetBytes.buffer); + for (let i = 0; i < this.offsets.length; i++) { + view.setUint32(i * 4, this.offsets[i], true); + } + const result = new Uint8Array(offsetBytes.length + this.byteLen); + result.set(offsetBytes, 0); + let offset = offsetBytes.length; + for (const part of this.parts) { + result.set(part, offset); + offset += part.length; + } + return result; + } + + stringByteLength(): number { + return this.byteLen; + } + + offsetsCount(): number { + return this.offsets.length; + } +} + +function getChildrenPropertyMask(node: Node): number { + const kind = node.kind; + + const props = childProperties[kind]; + if (!props) { + return 0; + } + const n = node as unknown as Record; + let mask = 0; + for (let i = 0; i < props.length; i++) { + const prop = props[i]; + if (prop !== undefined && isChildPresent(n[prop])) { + mask |= 1 << i; + } + } + return mask; +} + +// A child is "present" if it's non-null/non-undefined. +// This matches the Go encoder's behavior where non-nil NodeLists (even empty) +// are treated as present, and only nil NodeLists are absent. +function isChildPresent(v: unknown): boolean { + if (v === undefined || v === null) return false; + return true; +} + +function recordNodeStrings(node: Node, strs: StringTable): number { + return strs.add((node as LiteralLikeNode).text ?? ""); +} + +function encodeFileReferences(refs: readonly FileReference[] | undefined, writer: MsgpackWriter): number { + if (!refs || refs.length === 0) return NO_STRUCTURED_DATA; + const offset = writer.finish().length; + writer.writeArrayHeader(refs.length); + for (const ref of refs) { + writer.writeArrayHeader(5); + writer.writeUint(ref.pos); + writer.writeUint(ref.end); + writer.writeString(ref.fileName); + writer.writeUint(ref.resolutionMode ?? 0); + writer.writeBool(ref.preserve ?? false); + } + return offset; +} + +function recordExtendedData(node: Node, strs: StringTable, extendedData: number[], structuredWriter: MsgpackWriter): number { + const offset = extendedData.length * 4; + if (node.kind === SyntaxKind.SourceFile) { + const sf = node as SourceFile; + const textIndex = strs.add(sf.text); + const fileNameIndex = strs.add(sf.fileName); + const pathIndex = strs.add(sf.path); + const referencedFilesOffset = encodeFileReferences(sf.referencedFiles, structuredWriter); + const typeRefDirectivesOffset = encodeFileReferences(sf.typeReferenceDirectives, structuredWriter); + const libRefDirectivesOffset = encodeFileReferences(sf.libReferenceDirectives, structuredWriter); + // Content-mapper metadata is program-owned and supplied only by the Go encoder. + extendedData.push(textIndex, fileNameIndex, pathIndex, sf.languageVariant, sf.scriptKind, referencedFilesOffset, typeRefDirectivesOffset, libRefDirectivesOffset, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, 0, textIndex, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA, NO_STRUCTURED_DATA); + } + else if ( + node.kind === SyntaxKind.TemplateHead || + node.kind === SyntaxKind.TemplateMiddle || + node.kind === SyntaxKind.TemplateTail + ) { + const tmpl = node as TemplateLiteralLikeNode; + const text: string = tmpl.text ?? ""; + const rawText: string = tmpl.rawText ?? ""; + const templateFlags: number = tmpl.templateFlags ?? 0; + const textIndex = strs.add(text); + const rawTextIndex = strs.add(rawText); + extendedData.push(textIndex, rawTextIndex, templateFlags); + } + else { + // StringLiteral, NumericLiteral, BigIntLiteral, RegularExpressionLiteral, + // NoSubstitutionTemplateLiteral — format: [textIndex, tokenFlags] + const n = node as any; + const text: string = n.text ?? ""; + const tokenFlags: number = n.tokenFlags ?? 0; + const textIndex = strs.add(text); + extendedData.push(textIndex, tokenFlags); + } + return offset; +} + +function getNodeData(node: Node, strs: StringTable, extendedData: number[], structuredWriter: MsgpackWriter): number { + const t = getNodeDataType(node.kind); + const common = getNodeCommonData(node); + switch (t) { + case NODE_DATA_TYPE_CHILDREN: + return t | common | getChildrenPropertyMask(node); + case NODE_DATA_TYPE_STRING: + return t | common | recordNodeStrings(node, strs); + case NODE_DATA_TYPE_EXTENDED: + return t | common | recordExtendedData(node, strs, extendedData, structuredWriter); + default: + throw new Error("unreachable"); + } +} + +function getChildPropertiesForNode(node: Node): readonly (string | undefined)[] | undefined { + return childProperties[node.kind]; +} + +// Returns whether a value is a NodeArray (array-like with pos and end). +function isNodeArray(value: any): value is NodeArray { + return Array.isArray(value) && typeof (value as any).pos === "number" && typeof (value as any).end === "number"; +} + +/** + * Encode a SourceFile AST node into the binary format. + */ +export function encodeSourceFile(sourceFile: SourceFile): Uint8Array { + return encodeNode(sourceFile); +} + +/** + * Encode an arbitrary AST node into the binary format. + * When encoding a non-SourceFile node, the header hash and parse options fields will be zero. + */ +export function encodeNode(node: Node): Uint8Array { + const strs = new StringTable(); + const extendedDataValues: number[] = []; + const structuredWriter = new MsgpackWriter(); + + // We'll build an array of uint32 values for the nodes section, 7 per node + const nodeValues: number[] = []; + + // Nil node (index 0) + nodeValues.push(0, 0, 0, 0, 0, 0, 0); + + let nodeCount = 0; + let parentIndex = 0; + let prevIndex = 0; + + function visitNode(node: Node): void { + nodeCount++; + const currentIndex = nodeCount; + + if (prevIndex !== 0) { + // Set next pointer on previous sibling + nodeValues[prevIndex * NODE_FIELDS + NODE_FIELD_NEXT] = currentIndex; + } + + const data = getNodeData(node, strs, extendedDataValues, structuredWriter); + nodeValues.push( + node.kind, + node.pos >= 0 ? node.pos : 0, + node.end >= 0 ? node.end : 0, + 0, // next (filled in later) + parentIndex, + data, + node.flags, + ); + + const saveParentIndex = parentIndex; + const savePrevIndex = prevIndex; + parentIndex = currentIndex; + prevIndex = 0; + + visitChildren(node); + + prevIndex = currentIndex; + parentIndex = saveParentIndex; + } + + function visitNodeList(list: NodeArray): void { + if (!list) { + return; + } + + nodeCount++; + const currentIndex = nodeCount; + + if (prevIndex !== 0) { + nodeValues[prevIndex * NODE_FIELDS + NODE_FIELD_NEXT] = currentIndex; + } + + nodeValues.push( + KIND_NODE_LIST, + list.pos >= 0 ? list.pos : 0, + list.end >= 0 ? list.end : 0, + 0, // next + parentIndex, + list.length, // data for NodeList is its length + list.hasTrailingComma ? 1 : 0, // NodeLists have no AST flags; this slot is reused for hasTrailingComma + ); + + const saveParentIndex = parentIndex; + parentIndex = currentIndex; + prevIndex = 0; + + for (const child of list) { + visitNode(child); + } + + prevIndex = currentIndex; + parentIndex = saveParentIndex; + } + + function visitChildren(node: Node): void { + const props = getChildPropertiesForNode(node); + const n = node as any; + + if (props) { + for (const propName of props) { + if (propName === undefined) continue; + const child = n[propName]; + if (child === undefined || child === null) continue; + if (isNodeArray(child)) { + visitNodeList(child); + } + else { + visitNode(child); + } + } + } + } + + // Encode root node + nodeCount++; + parentIndex++; + const rootData = getNodeData(node, strs, extendedDataValues, structuredWriter); + nodeValues.push( + node.kind, + node.pos >= 0 ? node.pos : 0, + node.end >= 0 ? node.end : 0, + 0, + 0, + rootData, + node.flags, + ); + + const saveParent = parentIndex; + prevIndex = 0; + parentIndex = 1; // root is at index 1 + visitChildren(node); + parentIndex = saveParent; + + // Encode extended data section + const extendedDataBytes = new Uint8Array(extendedDataValues.length * 4); + const extView = new DataView(extendedDataBytes.buffer); + for (let i = 0; i < extendedDataValues.length; i++) { + extView.setUint32(i * 4, extendedDataValues[i], true); + } + + // Encode structured data section + const structuredDataBytes = structuredWriter.finish(); + + // Encode string table + const strsBytes = strs.encode(); + + // Encode nodes section + const nodesBytes = new Uint8Array(nodeValues.length * 4); + const nodesView = new DataView(nodesBytes.buffer); + for (let i = 0; i < nodeValues.length; i++) { + nodesView.setUint32(i * 4, nodeValues[i] >>> 0, true); + } + + // Calculate section offsets + const offsetStringTableOffsets = HEADER_SIZE; + const offsetStringTableData = HEADER_SIZE + strs.offsetsCount() * 4; + const offsetExtendedData = offsetStringTableData + strs.stringByteLength(); + const offsetStructuredData = offsetExtendedData + extendedDataBytes.length; + const offsetNodes = offsetStructuredData + structuredDataBytes.length; + + // Build header + const header = new Uint8Array(HEADER_SIZE); + const headerView = new DataView(header.buffer); + const metadata = PROTOCOL_VERSION << 24; + headerView.setUint32(HEADER_OFFSET_METADATA, metadata, true); + // bytes 4-19: hash (zero for non-SourceFile, we don't have access to xxh3 here) + // byte 20-23: parse options (zero for non-SourceFile) + headerView.setUint32(HEADER_OFFSET_STRING_TABLE_OFFSETS, offsetStringTableOffsets, true); + headerView.setUint32(HEADER_OFFSET_STRING_TABLE, offsetStringTableData, true); + headerView.setUint32(HEADER_OFFSET_EXTENDED_DATA, offsetExtendedData, true); + headerView.setUint32(HEADER_OFFSET_STRUCTURED_DATA, offsetStructuredData, true); + headerView.setUint32(HEADER_OFFSET_NODES, offsetNodes, true); + + // Concatenate all sections + const result = new Uint8Array(header.length + strsBytes.length + extendedDataBytes.length + structuredDataBytes.length + nodesBytes.length); + result.set(header, 0); + result.set(strsBytes, HEADER_SIZE); + result.set(extendedDataBytes, offsetExtendedData); + result.set(structuredDataBytes, offsetStructuredData); + result.set(nodesBytes, offsetNodes); + return result; +} + +/** + * Encode a Uint8Array to a base64 string. + */ +export function uint8ArrayToBase64(data: Uint8Array): string { + return Buffer.from(data).toString("base64"); +} + +export function sourceFileResponseToUint8Array(response: { readonly data: string; } | null | undefined): Uint8Array | undefined { + if (!response) return undefined; + const buffer = Buffer.from(response.data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); +} diff --git a/packages/typescript/src/api/node/msgpack.ts b/packages/typescript/src/api/node/msgpack.ts index a219a9804c3e1..b5da5f0e1890b 100644 --- a/packages/typescript/src/api/node/msgpack.ts +++ b/packages/typescript/src/api/node/msgpack.ts @@ -1,226 +1,226 @@ -// Minimal msgpack encoder/decoder. -// Supports: arrays, unsigned integers, strings, booleans, binary data. - -import { - encodeWtf8, - Wtf8Decoder, -} from "./wtf8.ts"; - -// ── MessagePack format constants ──────────────────────────────────── -export const MSGPACK_FIXARRAY3 = 0x93; // 3-element fixarray -export const MSGPACK_BIN8 = 0xc4; -export const MSGPACK_BIN16 = 0xc5; -export const MSGPACK_BIN32 = 0xc6; -export const MSGPACK_UINT8 = 0xcc; - -// ── Bin header helpers ────────────────────────────────────────────── - -/** Compute the MessagePack bin header size for a given data length. */ -export function binHeaderSize(len: number): number { - if (len < 0x100) return 2; // BIN8: marker + 1-byte size - if (len < 0x10000) return 3; // BIN16: marker + 2-byte size - return 5; // BIN32: marker + 4-byte size -} - -/** Write a MessagePack bin header into `buf` at `off`, return new offset. */ -export function writeBinHeader(buf: Uint8Array, off: number, len: number): number { - if (len < 0x100) { - buf[off++] = MSGPACK_BIN8; - buf[off++] = len; - } - else if (len < 0x10000) { - buf[off++] = MSGPACK_BIN16; - buf[off++] = (len >>> 8) & 0xff; - buf[off++] = len & 0xff; - } - else { - buf[off++] = MSGPACK_BIN32; - buf[off++] = (len >>> 24) & 0xff; - buf[off++] = (len >>> 16) & 0xff; - buf[off++] = (len >>> 8) & 0xff; - buf[off++] = len & 0xff; - } - return off; -} - -const decoder = new Wtf8Decoder(); - -export class MsgpackWriter { - private buf: Uint8Array; - private view: DataView; - private pos: number; - - constructor(initialSize = 256) { - this.buf = new Uint8Array(initialSize); - this.view = new DataView(this.buf.buffer); - this.pos = 0; - } - - private ensure(n: number): void { - if (this.pos + n > this.buf.length) { - let newSize = this.buf.length * 2; - while (newSize < this.pos + n) newSize *= 2; - const next = new Uint8Array(newSize); - next.set(this.buf); - this.buf = next; - this.view = new DataView(this.buf.buffer); - } - } - - writeArrayHeader(length: number): void { - if (length <= 0x0f) { - this.ensure(1); - this.buf[this.pos++] = 0x90 | length; - } - else if (length <= 0xffff) { - this.ensure(3); - this.buf[this.pos++] = 0xdc; - this.view.setUint16(this.pos, length, false); - this.pos += 2; - } - else { - this.ensure(5); - this.buf[this.pos++] = 0xdd; - this.view.setUint32(this.pos, length, false); - this.pos += 4; - } - } - - writeUint(value: number): void { - if (value <= 0x7f) { - this.ensure(1); - this.buf[this.pos++] = value; - } - else if (value <= 0xff) { - this.ensure(2); - this.buf[this.pos++] = 0xcc; - this.buf[this.pos++] = value; - } - else if (value <= 0xffff) { - this.ensure(3); - this.buf[this.pos++] = 0xcd; - this.view.setUint16(this.pos, value, false); - this.pos += 2; - } - else { - this.ensure(5); - this.buf[this.pos++] = 0xce; - this.view.setUint32(this.pos, value, false); - this.pos += 4; - } - } - - writeString(str: string): void { - const encoded = encodeWtf8(str); - const len = encoded.length; - if (len <= 0x1f) { - this.ensure(1 + len); - this.buf[this.pos++] = 0xa0 | len; - } - else if (len <= 0xff) { - this.ensure(2 + len); - this.buf[this.pos++] = 0xd9; - this.buf[this.pos++] = len; - } - else if (len <= 0xffff) { - this.ensure(3 + len); - this.buf[this.pos++] = 0xda; - this.view.setUint16(this.pos, len, false); - this.pos += 2; - } - else { - this.ensure(5 + len); - this.buf[this.pos++] = 0xdb; - this.view.setUint32(this.pos, len, false); - this.pos += 4; - } - this.buf.set(encoded, this.pos); - this.pos += len; - } - - writeBool(value: boolean): void { - this.ensure(1); - this.buf[this.pos++] = value ? 0xc3 : 0xc2; - } - - finish(): Uint8Array { - return this.buf.subarray(0, this.pos); - } -} - -export class MsgpackReader { - private buf: Uint8Array; - private view: DataView; - private pos: number; - - constructor(data: Uint8Array, offset = 0) { - this.buf = data; - this.view = new DataView(data.buffer, data.byteOffset, data.byteLength); - this.pos = offset; - } - - readArrayHeader(): number { - const byte = this.buf[this.pos++]; - if ((byte & 0xf0) === 0x90) return byte & 0x0f; - if (byte === 0xdc) { - const len = this.view.getUint16(this.pos, false); - this.pos += 2; - return len; - } - if (byte === 0xdd) { - const len = this.view.getUint32(this.pos, false); - this.pos += 4; - return len; - } - throw new Error(`Expected array header, got 0x${byte.toString(16)}`); - } - - readUint(): number { - const byte = this.buf[this.pos++]; - if (byte <= 0x7f) return byte; - if (byte === 0xcc) return this.buf[this.pos++]; - if (byte === 0xcd) { - const val = this.view.getUint16(this.pos, false); - this.pos += 2; - return val; - } - if (byte === 0xce) { - const val = this.view.getUint32(this.pos, false); - this.pos += 4; - return val; - } - throw new Error(`Expected uint, got 0x${byte.toString(16)}`); - } - - readString(): string { - const byte = this.buf[this.pos++]; - let len: number; - if ((byte & 0xe0) === 0xa0) { - len = byte & 0x1f; - } - else if (byte === 0xd9) { - len = this.buf[this.pos++]; - } - else if (byte === 0xda) { - len = this.view.getUint16(this.pos, false); - this.pos += 2; - } - else if (byte === 0xdb) { - len = this.view.getUint32(this.pos, false); - this.pos += 4; - } - else { - throw new Error(`Expected string, got 0x${byte.toString(16)}`); - } - const str = decoder.decode(this.buf.subarray(this.pos, this.pos + len)); - this.pos += len; - return str; - } - - readBool(): boolean { - const byte = this.buf[this.pos++]; - if (byte === 0xc3) return true; - if (byte === 0xc2) return false; - throw new Error(`Expected bool, got 0x${byte.toString(16)}`); - } -} +// Minimal msgpack encoder/decoder. +// Supports: arrays, unsigned integers, strings, booleans, binary data. + +import { + encodeWtf8, + Wtf8Decoder, +} from "./wtf8.ts"; + +// ── MessagePack format constants ──────────────────────────────────── +export const MSGPACK_FIXARRAY3 = 0x93; // 3-element fixarray +export const MSGPACK_BIN8 = 0xc4; +export const MSGPACK_BIN16 = 0xc5; +export const MSGPACK_BIN32 = 0xc6; +export const MSGPACK_UINT8 = 0xcc; + +// ── Bin header helpers ────────────────────────────────────────────── + +/** Compute the MessagePack bin header size for a given data length. */ +export function binHeaderSize(len: number): number { + if (len < 0x100) return 2; // BIN8: marker + 1-byte size + if (len < 0x10000) return 3; // BIN16: marker + 2-byte size + return 5; // BIN32: marker + 4-byte size +} + +/** Write a MessagePack bin header into `buf` at `off`, return new offset. */ +export function writeBinHeader(buf: Uint8Array, off: number, len: number): number { + if (len < 0x100) { + buf[off++] = MSGPACK_BIN8; + buf[off++] = len; + } + else if (len < 0x10000) { + buf[off++] = MSGPACK_BIN16; + buf[off++] = (len >>> 8) & 0xff; + buf[off++] = len & 0xff; + } + else { + buf[off++] = MSGPACK_BIN32; + buf[off++] = (len >>> 24) & 0xff; + buf[off++] = (len >>> 16) & 0xff; + buf[off++] = (len >>> 8) & 0xff; + buf[off++] = len & 0xff; + } + return off; +} + +const decoder = new Wtf8Decoder(); + +export class MsgpackWriter { + private buf: Uint8Array; + private view: DataView; + private pos: number; + + constructor(initialSize = 256) { + this.buf = new Uint8Array(initialSize); + this.view = new DataView(this.buf.buffer); + this.pos = 0; + } + + private ensure(n: number): void { + if (this.pos + n > this.buf.length) { + let newSize = this.buf.length * 2; + while (newSize < this.pos + n) newSize *= 2; + const next = new Uint8Array(newSize); + next.set(this.buf); + this.buf = next; + this.view = new DataView(this.buf.buffer); + } + } + + writeArrayHeader(length: number): void { + if (length <= 0x0f) { + this.ensure(1); + this.buf[this.pos++] = 0x90 | length; + } + else if (length <= 0xffff) { + this.ensure(3); + this.buf[this.pos++] = 0xdc; + this.view.setUint16(this.pos, length, false); + this.pos += 2; + } + else { + this.ensure(5); + this.buf[this.pos++] = 0xdd; + this.view.setUint32(this.pos, length, false); + this.pos += 4; + } + } + + writeUint(value: number): void { + if (value <= 0x7f) { + this.ensure(1); + this.buf[this.pos++] = value; + } + else if (value <= 0xff) { + this.ensure(2); + this.buf[this.pos++] = 0xcc; + this.buf[this.pos++] = value; + } + else if (value <= 0xffff) { + this.ensure(3); + this.buf[this.pos++] = 0xcd; + this.view.setUint16(this.pos, value, false); + this.pos += 2; + } + else { + this.ensure(5); + this.buf[this.pos++] = 0xce; + this.view.setUint32(this.pos, value, false); + this.pos += 4; + } + } + + writeString(str: string): void { + const encoded = encodeWtf8(str); + const len = encoded.length; + if (len <= 0x1f) { + this.ensure(1 + len); + this.buf[this.pos++] = 0xa0 | len; + } + else if (len <= 0xff) { + this.ensure(2 + len); + this.buf[this.pos++] = 0xd9; + this.buf[this.pos++] = len; + } + else if (len <= 0xffff) { + this.ensure(3 + len); + this.buf[this.pos++] = 0xda; + this.view.setUint16(this.pos, len, false); + this.pos += 2; + } + else { + this.ensure(5 + len); + this.buf[this.pos++] = 0xdb; + this.view.setUint32(this.pos, len, false); + this.pos += 4; + } + this.buf.set(encoded, this.pos); + this.pos += len; + } + + writeBool(value: boolean): void { + this.ensure(1); + this.buf[this.pos++] = value ? 0xc3 : 0xc2; + } + + finish(): Uint8Array { + return this.buf.subarray(0, this.pos); + } +} + +export class MsgpackReader { + private buf: Uint8Array; + private view: DataView; + private pos: number; + + constructor(data: Uint8Array, offset = 0) { + this.buf = data; + this.view = new DataView(data.buffer, data.byteOffset, data.byteLength); + this.pos = offset; + } + + readArrayHeader(): number { + const byte = this.buf[this.pos++]; + if ((byte & 0xf0) === 0x90) return byte & 0x0f; + if (byte === 0xdc) { + const len = this.view.getUint16(this.pos, false); + this.pos += 2; + return len; + } + if (byte === 0xdd) { + const len = this.view.getUint32(this.pos, false); + this.pos += 4; + return len; + } + throw new Error(`Expected array header, got 0x${byte.toString(16)}`); + } + + readUint(): number { + const byte = this.buf[this.pos++]; + if (byte <= 0x7f) return byte; + if (byte === 0xcc) return this.buf[this.pos++]; + if (byte === 0xcd) { + const val = this.view.getUint16(this.pos, false); + this.pos += 2; + return val; + } + if (byte === 0xce) { + const val = this.view.getUint32(this.pos, false); + this.pos += 4; + return val; + } + throw new Error(`Expected uint, got 0x${byte.toString(16)}`); + } + + readString(): string { + const byte = this.buf[this.pos++]; + let len: number; + if ((byte & 0xe0) === 0xa0) { + len = byte & 0x1f; + } + else if (byte === 0xd9) { + len = this.buf[this.pos++]; + } + else if (byte === 0xda) { + len = this.view.getUint16(this.pos, false); + this.pos += 2; + } + else if (byte === 0xdb) { + len = this.view.getUint32(this.pos, false); + this.pos += 4; + } + else { + throw new Error(`Expected string, got 0x${byte.toString(16)}`); + } + const str = decoder.decode(this.buf.subarray(this.pos, this.pos + len)); + this.pos += len; + return str; + } + + readBool(): boolean { + const byte = this.buf[this.pos++]; + if (byte === 0xc3) return true; + if (byte === 0xc2) return false; + throw new Error(`Expected bool, got 0x${byte.toString(16)}`); + } +} diff --git a/packages/typescript/src/api/node/node.generated.ts b/packages/typescript/src/api/node/node.generated.ts index 0f69dbc63abd3..15782dc0b2a0a 100644 --- a/packages/typescript/src/api/node/node.generated.ts +++ b/packages/typescript/src/api/node/node.generated.ts @@ -1,979 +1,979 @@ -// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. - -import { - getChildren, - getFirstToken, - getLastToken, - getTokenPosOfNode, - ModifierFlags, - type Node, - type NodeArray, - type SourceFile, - SyntaxKind, -} from "../../ast/index.ts"; -import { - modifierToFlag, - NODE_CHILD_MASK, - NODE_DATA_TYPE_MASK, - NODE_EXTENDED_DATA_MASK, - NODE_STRING_INDEX_MASK, - type NodeDataType, - popcount8, - RemoteNodeBase, - type SourceFileInfo, -} from "./node.infrastructure.ts"; -import { - childProperties, - KIND_NODE_LIST, - NODE_DATA_TYPE_CHILDREN, - NODE_DATA_TYPE_EXTENDED, - NODE_DATA_TYPE_STRING, - NODE_LEN, - NODE_OFFSET_DATA, - NODE_OFFSET_END, - NODE_OFFSET_FLAGS, - NODE_OFFSET_KIND, - NODE_OFFSET_NEXT, - NODE_OFFSET_PARENT, - NODE_OFFSET_POS, -} from "./protocol.ts"; - -export class RemoteNodeList extends Array implements NodeArray { - // Inherited Array methods like filter/map/slice use ArraySpeciesCreate, which would - // otherwise call `new RemoteNodeList(length)` and fail. Produce a plain Array instead. - static get [Symbol.species](): ArrayConstructor { - return Array; - } - - parent: RemoteNode; - transformFlags: number = 0; - protected view: DataView; - protected index: number; - private _byteIndex: number; - // Cursor memoizing the last resolved (logical index -> node index) so that - // sequential forward access (index loops and list[i], plus forEach/map/ - // reduce/filter) resumes instead of re-walking from the head, turning an - // O(n) pass over the whole list from O(n^2) into O(n). - private _cursorIndex: number = 0; - private _cursorNodeIndex: number = 0; - - get pos(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_POS, true); - } - - get end(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_END, true); - } - - get next(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true); - } - - get firstNodeIndex(): number { - return this.index + 1; - } - - private get data(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true); - } - - get hasTrailingComma(): boolean { - return (this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true) & 1) !== 0; - } - - private sourceFile: SourceFileInfo; - - constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) { - super(view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_DATA, true)); - this.view = view; - this.index = index; - this.parent = parent; - this.sourceFile = sourceFile; - this._byteIndex = offsetNodes + index * NODE_LEN; - this._cursorNodeIndex = index + 1; - - const length = this.length; - for (let i = 16; i < length; i++) { - Object.defineProperty(this, i, { - get() { - return this.at(i); - }, - }); - } - } - get 0(): RemoteNode { - return this.at(0); - } - get 1(): RemoteNode { - return this.at(1); - } - get 2(): RemoteNode { - return this.at(2); - } - get 3(): RemoteNode { - return this.at(3); - } - get 4(): RemoteNode { - return this.at(4); - } - get 5(): RemoteNode { - return this.at(5); - } - get 6(): RemoteNode { - return this.at(6); - } - get 7(): RemoteNode { - return this.at(7); - } - get 8(): RemoteNode { - return this.at(8); - } - get 9(): RemoteNode { - return this.at(9); - } - get 10(): RemoteNode { - return this.at(10); - } - get 11(): RemoteNode { - return this.at(11); - } - get 12(): RemoteNode { - return this.at(12); - } - get 13(): RemoteNode { - return this.at(13); - } - get 14(): RemoteNode { - return this.at(14); - } - get 15(): RemoteNode { - return this.at(15); - } - - *[Symbol.iterator](): ArrayIterator { - if (!this.length) return; - let next = this.index + 1; - while (next) { - const child = this.getOrCreateChildAtNodeIndex(next); - next = child.next; - yield child as RemoteNode; - } - } - - forEachNode(visitNode: (node: RemoteNode) => T | undefined): T | undefined { - if (!this.length) return; - let next = this.index + 1; - while (next) { - const child = this.getOrCreateChildAtNodeIndex(next); - next = child.next; - const result = visitNode(child as RemoteNode); - if (result) return result; - } - } - - at(index: number): RemoteNode { - if (!Number.isInteger(index)) { - return undefined!; - } - if (index >= this.data || (index < 0 && -index > this.data)) { - return undefined!; - } - if (index < 0) { - index = this.length + index; - } - // Walk the raw buffer following each node's `next` pointer instead of - // materializing every intermediate RemoteNode just to read it. Resume from - // the memoized cursor when possible so sequential forward access is O(1) - // amortized (a full in-order pass is O(n) rather than O(n^2)). - const offsetNodes = this.sourceFile._offsetNodes; - let i: number; - let next: number; - if (index >= this._cursorIndex) { - i = this._cursorIndex; - next = this._cursorNodeIndex; - } - else { - i = 0; - next = this.index + 1; - } - for (; i < index; i++) { - next = this.view.getUint32(offsetNodes + next * NODE_LEN + NODE_OFFSET_NEXT, true); - } - this._cursorIndex = index; - this._cursorNodeIndex = next; - return this.getOrCreateChildAtNodeIndex(next) as RemoteNode; - } - - getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList { - let child = this.sourceFile.nodes[index]; - if (!child) { - const kind = this.view.getUint32(this.sourceFile._offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true); - if (kind === KIND_NODE_LIST) { - throw new Error("NodeList cannot directly contain another NodeList"); - } - const sf = this.sourceFile; - child = new RemoteNode(this.view, index, this.parent, sf, sf._offsetNodes); - sf.nodes[index] = child; - sf._timing?.recordMaterialization(); - } - return child; - } - - __print(): string { - const result = []; - result.push(`kind: NodeList`); - result.push(`index: ${this.index}`); - result.push(`byteIndex: ${this._byteIndex}`); - result.push(`length: ${this.length}`); - return result.join("\n"); - } -} - -export class RemoteNode extends RemoteNodeBase implements Node { - protected static NODE_LEN: number = NODE_LEN; - protected override get sourceFile(): SourceFileInfo { - return this._sourceFile; - } - protected _sourceFile: SourceFileInfo; - get id(): string { - return `${this.index}.${this.kind}.${this.sourceFile.path}`; - } - - constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) { - super(view, index, parent, offsetNodes + index * NODE_LEN); - this._sourceFile = sourceFile; - } - - forEachChild(visitNode: (node: Node) => T, visitList?: (list: NodeArray) => T): T | undefined { - if (this.hasChildren()) { - let next = this.index + 1; - do { - const child = this.getOrCreateChildAtNodeIndex(next); - if (child instanceof RemoteNodeList) { - if (visitList) { - const result = visitList(child); - if (result) { - return result; - } - } - else { - const result = child.forEachNode(visitNode); - if (result) { - return result; - } - } - } - else if (child.kind !== SyntaxKind.JSDoc) { - const result = visitNode(child); - if (result) { - return result; - } - } - next = child.next; - } - while (next); - } - } - - *childrenIter(): Generator { - if (this.hasChildren()) { - let next = this.index + 1; - do { - const child = this.getOrCreateChildAtNodeIndex(next); - if (child instanceof RemoteNodeList) { - if (child.length) { - let listNext = child.firstNodeIndex; - while (listNext) { - const node = child.getOrCreateChildAtNodeIndex(listNext) as RemoteNode; - listNext = node.next; - const result = yield node; - if (result) { - return result; - } - } - } - } - else if (child.kind !== SyntaxKind.JSDoc) { - const result = yield child; - if (result) { - return result; - } - } - next = child.next; - } - while (next); - } - } - - get jsDoc(): readonly Node[] | undefined { - if (!this.hasChildren()) { - return undefined; - } - let result: Node[] | undefined; - let next = this.index + 1; - do { - const child = this.getOrCreateChildAtNodeIndex(next); - if (!(child instanceof RemoteNodeList) && child.kind === SyntaxKind.JSDoc) { - (result ??= []).push(child); - } - next = child.next; - } - while (next); - return result; - } - - getSourceFile(): SourceFile { - return this.sourceFile as unknown as SourceFile; - } - - getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number { - return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment); - } - - getFullStart(): number { - return this.pos; - } - - getEnd(): number { - return this.end; - } - - getWidth(sourceFile?: SourceFile): number { - return this.getEnd() - this.getStart(sourceFile); - } - - getFullWidth(): number { - return this.end - this.pos; - } - - getLeadingTriviaWidth(sourceFile?: SourceFile): number { - return this.getStart(sourceFile) - this.pos; - } - - getFullText(sourceFile?: SourceFile): string { - return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end); - } - - getText(sourceFile?: SourceFile): string { - sourceFile ??= this.getSourceFile(); - return sourceFile.text.substring(this.getStart(sourceFile), this.end); - } - - getChildCount(sourceFile?: SourceFile): number { - return this.getChildren(sourceFile).length; - } - - getChildAt(index: number, sourceFile?: SourceFile): Node { - return this.getChildren(sourceFile)[index]; - } - - getChildren(sourceFile?: SourceFile): readonly Node[] { - return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } - - getFirstToken(sourceFile?: SourceFile): Node | undefined { - return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } - - getLastToken(sourceFile?: SourceFile): Node | undefined { - return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } - - protected getString(index: number): string { - const offsetStringTableOffsets = this.sourceFile._offsetStringTableOffsets; - const start = this.view.getUint32(offsetStringTableOffsets + index * 4, true); - const end = this.view.getUint32(offsetStringTableOffsets + (index + 1) * 4, true); - const offsetStringTable = this.sourceFile._offsetStringTable; - const text = new Uint8Array(this.view.buffer, this.view.byteOffset + offsetStringTable + start, end - start); - return this.sourceFile._decoder.decode(text); - } - - private getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList { - let child = this.sourceFile.nodes[index]; - if (!child) { - const sf = this.sourceFile; - const offsetNodes = sf._offsetNodes; - const kind = this.view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true); - child = kind === KIND_NODE_LIST - ? new RemoteNodeList(this.view, index, this, sf, offsetNodes) - : new RemoteNode(this.view, index, this, sf, offsetNodes); - sf.nodes[index] = child; - sf._timing?.recordMaterialization(); - } - return child; - } - - private hasChildren(): boolean { - if (this._byteIndex >= this.view.byteLength - NODE_LEN) { - return false; - } - const nextNodeParent = this.view.getUint32(this.sourceFile._offsetNodes + (this.index + 1) * NODE_LEN + NODE_OFFSET_PARENT, true); - return nextNodeParent === this.index; - } - - private getNamedChild(propertyName: string): RemoteNode | RemoteNodeList | undefined { - const kind = this.kind; - const propertyNames = childProperties[kind]; - if (!propertyNames) { - return undefined; - } - - const order = propertyNames.indexOf(propertyName); - if (order === -1) { - return undefined; - } - return this.getChildAtOrder(order); - } - - private getChildAtOrder(order: number): RemoteNode | RemoteNodeList | undefined { - if (!this.hasChildren()) return undefined; - const mask = this.childMask; - if (!(mask & (1 << order))) { - // Property is not present - return undefined; - } - - // The property index is `order`, minus the number of zeros in the mask that are in bit positions less - // than the `order`th bit. Example: - // - // This is a MethodDeclaration with mask 0b01110101. The possible properties are - // ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"] - // (it has modifiers, name, typeParameters, parameters, and type). - // - // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | - // | Value | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | - // | Name | body | type | parameters | typeParameters | postfixToken | name | asteriskToken | modifiers | - // - // We are trying to get the index of "parameters" (bit = 5). - // First, set all the more significant bits to 1: - // - // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | - // | Value | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | - // - // Then, flip the bits: - // - // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | - // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | - // | Value | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | - // - // Counting the 1s gives us the number of *missing properties* before the `order`th property. If every property - // were present, we would have `parameters = children[5]`, but since `postfixToken` and `astersiskToken` are - // missing, we have `parameters = children[5 - 2]`. - const propertyIndex = order - popcount8[~(mask | ((0xff << order) & 0xff)) & 0xff]; - let childIndex = this.index + 1; - for (let i = 0; i < propertyIndex; i++) { - // Walk through children via their `next` pointer until we get to the right property index - childIndex = this.view.getUint32(this.sourceFile._offsetNodes + childIndex * NODE_LEN + NODE_OFFSET_NEXT, true); - } - return this.getOrCreateChildAtNodeIndex(childIndex); - } - - __print(): string { - const result = []; - result.push(`index: ${this.index}`); - result.push(`byteIndex: ${this._byteIndex}`); - result.push(`kind: ${SyntaxKind[this.kind]}`); - result.push(`pos: ${this.pos}`); - result.push(`end: ${this.end}`); - result.push(`next: ${this.next}`); - result.push(`parent: ${this.parentIndex}`); - result.push(`data: ${this.data.toString(2).padStart(32, "0")}`); - const dataType = this.dataType === NODE_DATA_TYPE_CHILDREN ? "children" : - this.dataType === NODE_DATA_TYPE_STRING ? "string" : - "extended"; - result.push(`dataType: ${dataType}`); - if (this.dataType === NODE_DATA_TYPE_CHILDREN) { - result.push(`childMask: ${this.childMask.toString(2).padStart(8, "0")}`); - result.push(`childProperties: ${childProperties[this.kind]?.join(", ")}`); - } - return result.join("\n"); - } - - __printChildren(): string { - const result = []; - let next = this.index + 1; - while (next) { - const child = this.getOrCreateChildAtNodeIndex(next); - next = child.next; - result.push(child.__print()); - } - return result.join("\n\n"); - } - - __printSubtree(): string { - const result = [this.__print()]; - this.forEachChild(function visitNode(node) { - result.push((node as RemoteNode).__print()); - node.forEachChild(visitNode); - }, visitList => { - result.push((visitList as RemoteNodeList).__print()); - }); - return result.join("\n\n"); - } - - // ═══ Generated boolean property getters ═══ - - get containsOnlyTriviaWhiteSpaces(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get isArrayType(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get isBracketed(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get isExportEquals(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get isNameFirst(): boolean { - return (this.data & (1 << 25)) !== 0; - } - - get isTypeOf(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get isTypeOnly(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - get multiLine(): boolean { - return (this.data & (1 << 24)) !== 0; - } - - // ═══ Generated SyntaxKind union property getters ═══ - - get keyword(): SyntaxKind | undefined { - switch (this.kind) { - case SyntaxKind.ModuleDeclaration: - return (this.data >> 24) & 0x1 ? SyntaxKind.NamespaceKeyword : SyntaxKind.ModuleKeyword; - } - } - - get keywordToken(): SyntaxKind | undefined { - switch (this.kind) { - case SyntaxKind.MetaProperty: - return (this.data >> 24) & 0x1 ? SyntaxKind.NewKeyword : SyntaxKind.ImportKeyword; - } - } - - get operator(): SyntaxKind | undefined { - switch (this.kind) { - case SyntaxKind.PrefixUnaryExpression: { - const idx = (this.data >> 24) & 0x7; - if (idx === 1) return SyntaxKind.MinusToken; - if (idx === 2) return SyntaxKind.TildeToken; - if (idx === 3) return SyntaxKind.ExclamationToken; - if (idx === 4) return SyntaxKind.PlusPlusToken; - if (idx === 5) return SyntaxKind.MinusMinusToken; - return SyntaxKind.PlusToken; - } - case SyntaxKind.PostfixUnaryExpression: - return (this.data >> 24) & 0x1 ? SyntaxKind.MinusMinusToken : SyntaxKind.PlusPlusToken; - case SyntaxKind.TypeOperator: { - const idx = (this.data >> 24) & 0x3; - if (idx === 1) return SyntaxKind.ReadonlyKeyword; - if (idx === 2) return SyntaxKind.UniqueKeyword; - return SyntaxKind.KeyOfKeyword; - } - } - } - - get phaseModifier(): SyntaxKind | undefined { - switch (this.kind) { - case SyntaxKind.ImportClause: { - const idx = (this.data >> 24) & 0x3; - if (idx === 0) return undefined; - return idx === 1 ? SyntaxKind.TypeKeyword : idx === 2 ? SyntaxKind.DeferKeyword : idx === 3 ? SyntaxKind.SourceKeyword : undefined; - } - } - } - - get token(): SyntaxKind | undefined { - switch (this.kind) { - case SyntaxKind.HeritageClause: - return (this.data >> 24) & 0x1 ? SyntaxKind.ImplementsKeyword : SyntaxKind.ExtendsKeyword; - case SyntaxKind.ImportAttributes: - return (this.data >> 25) & 0x1 ? SyntaxKind.AssertKeyword : SyntaxKind.WithKeyword; - } - } - - get templateFlags(): number | undefined { - switch (this.kind) { - case SyntaxKind.TemplateHead: - case SyntaxKind.TemplateMiddle: - case SyntaxKind.TemplateTail: - const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); - return this.view.getUint32(extendedDataOffset + 8, true); - } - } - - get tokenFlags(): number { - switch (this.kind) { - case SyntaxKind.StringLiteral: - case SyntaxKind.NumericLiteral: - case SyntaxKind.BigIntLiteral: - case SyntaxKind.RegularExpressionLiteral: - const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); - return this.view.getUint32(extendedDataOffset + 4, true); - default: - return 0; - } - } - - // ═══ Generated child property getters ═══ - - get argument(): RemoteNode | undefined { - return this.getNamedChild("argument") as RemoteNode; - } - get argumentExpression(): RemoteNode | undefined { - return this.getNamedChild("argumentExpression") as RemoteNode; - } - get arguments(): RemoteNodeList | undefined { - return this.getNamedChild("arguments") as RemoteNodeList; - } - get assertsModifier(): RemoteNode | undefined { - return this.getNamedChild("assertsModifier") as RemoteNode; - } - get asteriskToken(): RemoteNode | undefined { - return this.getNamedChild("asteriskToken") as RemoteNode; - } - get attributes(): RemoteNode | RemoteNodeList | undefined { - return this.getNamedChild("attributes") as RemoteNode | RemoteNodeList; - } - get awaitModifier(): RemoteNode | undefined { - return this.getNamedChild("awaitModifier") as RemoteNode; - } - get block(): RemoteNode | undefined { - return this.getNamedChild("block") as RemoteNode; - } - get body(): RemoteNode | undefined { - return this.getNamedChild("body") as RemoteNode; - } - get caseBlock(): RemoteNode | undefined { - return this.getNamedChild("caseBlock") as RemoteNode; - } - get catchClause(): RemoteNode | undefined { - return this.getNamedChild("catchClause") as RemoteNode; - } - get checkType(): RemoteNode | undefined { - return this.getNamedChild("checkType") as RemoteNode; - } - get children(): RemoteNode | RemoteNodeList | undefined { - return this.getNamedChild("children") as RemoteNode | RemoteNodeList; - } - get className(): RemoteNode | undefined { - return this.getNamedChild("className") as RemoteNode; - } - get clauses(): RemoteNodeList | undefined { - return this.getNamedChild("clauses") as RemoteNodeList; - } - get closingElement(): RemoteNode | undefined { - return this.getNamedChild("closingElement") as RemoteNode; - } - get closingFragment(): RemoteNode | undefined { - return this.getNamedChild("closingFragment") as RemoteNode; - } - get colonToken(): RemoteNode | undefined { - return this.getNamedChild("colonToken") as RemoteNode; - } - get comment(): RemoteNodeList | undefined { - return this.getNamedChild("comment") as RemoteNodeList; - } - get condition(): RemoteNode | undefined { - return this.getNamedChild("condition") as RemoteNode; - } - get constraint(): RemoteNode | undefined { - return this.getNamedChild("constraint") as RemoteNode; - } - get declarationList(): RemoteNode | undefined { - return this.getNamedChild("declarationList") as RemoteNode; - } - get declarations(): RemoteNodeList | undefined { - return this.getNamedChild("declarations") as RemoteNodeList; - } - get defaultType(): RemoteNode | undefined { - return this.getNamedChild("defaultType") as RemoteNode; - } - get dotDotDotToken(): RemoteNode | undefined { - return this.getNamedChild("dotDotDotToken") as RemoteNode; - } - get elements(): RemoteNodeList | undefined { - return this.getNamedChild("elements") as RemoteNodeList; - } - get elementType(): RemoteNode | undefined { - return this.getNamedChild("elementType") as RemoteNode; - } - get elseStatement(): RemoteNode | undefined { - return this.getNamedChild("elseStatement") as RemoteNode; - } - get endOfFileToken(): RemoteNode | undefined { - return this.getNamedChild("endOfFileToken") as RemoteNode; - } - get equalsGreaterThanToken(): RemoteNode | undefined { - return this.getNamedChild("equalsGreaterThanToken") as RemoteNode; - } - get equalsToken(): RemoteNode | undefined { - return this.getNamedChild("equalsToken") as RemoteNode; - } - get exclamationToken(): RemoteNode | undefined { - return this.getNamedChild("exclamationToken") as RemoteNode; - } - get exportClause(): RemoteNode | undefined { - return this.getNamedChild("exportClause") as RemoteNode; - } - get expression(): RemoteNode | undefined { - return this.getNamedChild("expression") as RemoteNode; - } - get exprName(): RemoteNode | undefined { - return this.getNamedChild("exprName") as RemoteNode; - } - get extendsType(): RemoteNode | undefined { - return this.getNamedChild("extendsType") as RemoteNode; - } - get falseType(): RemoteNode | undefined { - return this.getNamedChild("falseType") as RemoteNode; - } - get finallyBlock(): RemoteNode | undefined { - return this.getNamedChild("finallyBlock") as RemoteNode; - } - get head(): RemoteNode | undefined { - return this.getNamedChild("head") as RemoteNode; - } - get heritageClauses(): RemoteNodeList | undefined { - return this.getNamedChild("heritageClauses") as RemoteNodeList; - } - get importClause(): RemoteNode | undefined { - return this.getNamedChild("importClause") as RemoteNode; - } - get incrementor(): RemoteNode | undefined { - return this.getNamedChild("incrementor") as RemoteNode; - } - get indexType(): RemoteNode | undefined { - return this.getNamedChild("indexType") as RemoteNode; - } - get initializer(): RemoteNode | undefined { - return this.getNamedChild("initializer") as RemoteNode; - } - get jsdocPropertyTags(): RemoteNode | undefined { - return this.getNamedChild("jsdocPropertyTags") as RemoteNode; - } - get label(): RemoteNode | undefined { - return this.getNamedChild("label") as RemoteNode; - } - get left(): RemoteNode | undefined { - return this.getNamedChild("left") as RemoteNode; - } - get literal(): RemoteNode | undefined { - return this.getNamedChild("literal") as RemoteNode; - } - get members(): RemoteNodeList | undefined { - return this.getNamedChild("members") as RemoteNodeList; - } - get modifiers(): RemoteNodeList | undefined { - return this.getNamedChild("modifiers") as RemoteNodeList; - } - get moduleReference(): RemoteNode | undefined { - return this.getNamedChild("moduleReference") as RemoteNode; - } - get moduleSpecifier(): RemoteNode | undefined { - return this.getNamedChild("moduleSpecifier") as RemoteNode; - } - get name(): RemoteNode | undefined { - return this.getNamedChild("name") as RemoteNode; - } - get namedBindings(): RemoteNode | undefined { - return this.getNamedChild("namedBindings") as RemoteNode; - } - get nameExpression(): RemoteNode | undefined { - return this.getNamedChild("nameExpression") as RemoteNode; - } - get namespace(): RemoteNode | undefined { - return this.getNamedChild("namespace") as RemoteNode; - } - get nameType(): RemoteNode | undefined { - return this.getNamedChild("nameType") as RemoteNode; - } - get objectAssignmentInitializer(): RemoteNode | undefined { - return this.getNamedChild("objectAssignmentInitializer") as RemoteNode; - } - get objectType(): RemoteNode | undefined { - return this.getNamedChild("objectType") as RemoteNode; - } - get openingElement(): RemoteNode | undefined { - return this.getNamedChild("openingElement") as RemoteNode; - } - get openingFragment(): RemoteNode | undefined { - return this.getNamedChild("openingFragment") as RemoteNode; - } - get operand(): RemoteNode | undefined { - return this.getNamedChild("operand") as RemoteNode; - } - get operatorToken(): RemoteNode | undefined { - return this.getNamedChild("operatorToken") as RemoteNode; - } - get parameterName(): RemoteNode | undefined { - return this.getNamedChild("parameterName") as RemoteNode; - } - get parameters(): RemoteNodeList | undefined { - return this.getNamedChild("parameters") as RemoteNodeList; - } - get postfixToken(): RemoteNode | undefined { - return this.getNamedChild("postfixToken") as RemoteNode; - } - get properties(): RemoteNodeList | undefined { - return this.getNamedChild("properties") as RemoteNodeList; - } - get propertyName(): RemoteNode | undefined { - return this.getNamedChild("propertyName") as RemoteNode; - } - get qualifier(): RemoteNode | undefined { - return this.getNamedChild("qualifier") as RemoteNode; - } - get questionDotToken(): RemoteNode | undefined { - return this.getNamedChild("questionDotToken") as RemoteNode; - } - get questionToken(): RemoteNode | undefined { - return this.getNamedChild("questionToken") as RemoteNode; - } - get readonlyToken(): RemoteNode | undefined { - return this.getNamedChild("readonlyToken") as RemoteNode; - } - get right(): RemoteNode | undefined { - return this.getNamedChild("right") as RemoteNode; - } - get statement(): RemoteNode | undefined { - return this.getNamedChild("statement") as RemoteNode; - } - get statements(): RemoteNodeList | undefined { - return this.getNamedChild("statements") as RemoteNodeList; - } - get tag(): RemoteNode | undefined { - return this.getNamedChild("tag") as RemoteNode; - } - get tagName(): RemoteNode | undefined { - return this.getNamedChild("tagName") as RemoteNode; - } - get tags(): RemoteNodeList | undefined { - return this.getNamedChild("tags") as RemoteNodeList; - } - get template(): RemoteNode | undefined { - return this.getNamedChild("template") as RemoteNode; - } - get templateSpans(): RemoteNodeList | undefined { - return this.getNamedChild("templateSpans") as RemoteNodeList; - } - get thenStatement(): RemoteNode | undefined { - return this.getNamedChild("thenStatement") as RemoteNode; - } - get thisArg(): RemoteNode | undefined { - return this.getNamedChild("thisArg") as RemoteNode; - } - get trueType(): RemoteNode | undefined { - return this.getNamedChild("trueType") as RemoteNode; - } - get tryBlock(): RemoteNode | undefined { - return this.getNamedChild("tryBlock") as RemoteNode; - } - get tupleNameSource(): RemoteNode | undefined { - return this.getNamedChild("tupleNameSource") as RemoteNode; - } - get type(): RemoteNode | undefined { - return this.getNamedChild("type") as RemoteNode; - } - get typeArguments(): RemoteNodeList | undefined { - return this.getNamedChild("typeArguments") as RemoteNodeList; - } - get typeExpression(): RemoteNode | undefined { - return this.getNamedChild("typeExpression") as RemoteNode; - } - get typeName(): RemoteNode | undefined { - return this.getNamedChild("typeName") as RemoteNode; - } - get typeParameter(): RemoteNode | undefined { - return this.getNamedChild("typeParameter") as RemoteNode; - } - get typeParameters(): RemoteNodeList | undefined { - return this.getNamedChild("typeParameters") as RemoteNodeList; - } - get types(): RemoteNodeList | undefined { - return this.getNamedChild("types") as RemoteNodeList; - } - get value(): RemoteNode | undefined { - return this.getNamedChild("value") as RemoteNode; - } - get variableDeclaration(): RemoteNode | undefined { - return this.getNamedChild("variableDeclaration") as RemoteNode; - } - get whenFalse(): RemoteNode | undefined { - return this.getNamedChild("whenFalse") as RemoteNode; - } - get whenTrue(): RemoteNode | undefined { - return this.getNamedChild("whenTrue") as RemoteNode; - } - - // ═══ Generated string property getters ═══ - - get text(): string | undefined { - switch (this.kind) { - case SyntaxKind.Identifier: - case SyntaxKind.PrivateIdentifier: - case SyntaxKind.JsxText: - case SyntaxKind.JSDocText: - case SyntaxKind.JSDocLink: - case SyntaxKind.JSDocLinkPlain: - case SyntaxKind.JSDocLinkCode: { - const stringIndex = this.data & NODE_STRING_INDEX_MASK; - return this.getString(stringIndex); - } - case SyntaxKind.StringLiteral: - case SyntaxKind.NumericLiteral: - case SyntaxKind.BigIntLiteral: - case SyntaxKind.RegularExpressionLiteral: - case SyntaxKind.NoSubstitutionTemplateLiteral: - case SyntaxKind.TemplateHead: - case SyntaxKind.TemplateMiddle: - case SyntaxKind.TemplateTail: - case SyntaxKind.SourceFile: { - const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); - const stringIndex = this.view.getUint32(extendedDataOffset, true); - return this.getString(stringIndex); - } - } - } - - get rawText(): string | undefined { - switch (this.kind) { - case SyntaxKind.TemplateHead: - case SyntaxKind.TemplateMiddle: - case SyntaxKind.TemplateTail: - const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); - const stringIndex = this.view.getUint32(extendedDataOffset + 4, true); - return this.getString(stringIndex); - } - } - - // ═══ Generated extended data property getters ═══ - - // ═══ Other property getters ═══ - - get flags(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true); - } - - get modifierFlags(): ModifierFlags { - const mods = this.modifiers; - if (!mods) return ModifierFlags.None; - let flags: ModifierFlags = ModifierFlags.None; - for (const mod of mods) { - flags |= modifierToFlag(mod.kind); - } - return flags; - } -} +// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. + +import { + getChildren, + getFirstToken, + getLastToken, + getTokenPosOfNode, + ModifierFlags, + type Node, + type NodeArray, + type SourceFile, + SyntaxKind, +} from "../../ast/index.ts"; +import { + modifierToFlag, + NODE_CHILD_MASK, + NODE_DATA_TYPE_MASK, + NODE_EXTENDED_DATA_MASK, + NODE_STRING_INDEX_MASK, + type NodeDataType, + popcount8, + RemoteNodeBase, + type SourceFileInfo, +} from "./node.infrastructure.ts"; +import { + childProperties, + KIND_NODE_LIST, + NODE_DATA_TYPE_CHILDREN, + NODE_DATA_TYPE_EXTENDED, + NODE_DATA_TYPE_STRING, + NODE_LEN, + NODE_OFFSET_DATA, + NODE_OFFSET_END, + NODE_OFFSET_FLAGS, + NODE_OFFSET_KIND, + NODE_OFFSET_NEXT, + NODE_OFFSET_PARENT, + NODE_OFFSET_POS, +} from "./protocol.ts"; + +export class RemoteNodeList extends Array implements NodeArray { + // Inherited Array methods like filter/map/slice use ArraySpeciesCreate, which would + // otherwise call `new RemoteNodeList(length)` and fail. Produce a plain Array instead. + static get [Symbol.species](): ArrayConstructor { + return Array; + } + + parent: RemoteNode; + transformFlags: number = 0; + protected view: DataView; + protected index: number; + private _byteIndex: number; + // Cursor memoizing the last resolved (logical index -> node index) so that + // sequential forward access (index loops and list[i], plus forEach/map/ + // reduce/filter) resumes instead of re-walking from the head, turning an + // O(n) pass over the whole list from O(n^2) into O(n). + private _cursorIndex: number = 0; + private _cursorNodeIndex: number = 0; + + get pos(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_POS, true); + } + + get end(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_END, true); + } + + get next(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true); + } + + get firstNodeIndex(): number { + return this.index + 1; + } + + private get data(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true); + } + + get hasTrailingComma(): boolean { + return (this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true) & 1) !== 0; + } + + private sourceFile: SourceFileInfo; + + constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) { + super(view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_DATA, true)); + this.view = view; + this.index = index; + this.parent = parent; + this.sourceFile = sourceFile; + this._byteIndex = offsetNodes + index * NODE_LEN; + this._cursorNodeIndex = index + 1; + + const length = this.length; + for (let i = 16; i < length; i++) { + Object.defineProperty(this, i, { + get() { + return this.at(i); + }, + }); + } + } + get 0(): RemoteNode { + return this.at(0); + } + get 1(): RemoteNode { + return this.at(1); + } + get 2(): RemoteNode { + return this.at(2); + } + get 3(): RemoteNode { + return this.at(3); + } + get 4(): RemoteNode { + return this.at(4); + } + get 5(): RemoteNode { + return this.at(5); + } + get 6(): RemoteNode { + return this.at(6); + } + get 7(): RemoteNode { + return this.at(7); + } + get 8(): RemoteNode { + return this.at(8); + } + get 9(): RemoteNode { + return this.at(9); + } + get 10(): RemoteNode { + return this.at(10); + } + get 11(): RemoteNode { + return this.at(11); + } + get 12(): RemoteNode { + return this.at(12); + } + get 13(): RemoteNode { + return this.at(13); + } + get 14(): RemoteNode { + return this.at(14); + } + get 15(): RemoteNode { + return this.at(15); + } + + *[Symbol.iterator](): ArrayIterator { + if (!this.length) return; + let next = this.index + 1; + while (next) { + const child = this.getOrCreateChildAtNodeIndex(next); + next = child.next; + yield child as RemoteNode; + } + } + + forEachNode(visitNode: (node: RemoteNode) => T | undefined): T | undefined { + if (!this.length) return; + let next = this.index + 1; + while (next) { + const child = this.getOrCreateChildAtNodeIndex(next); + next = child.next; + const result = visitNode(child as RemoteNode); + if (result) return result; + } + } + + at(index: number): RemoteNode { + if (!Number.isInteger(index)) { + return undefined!; + } + if (index >= this.data || (index < 0 && -index > this.data)) { + return undefined!; + } + if (index < 0) { + index = this.length + index; + } + // Walk the raw buffer following each node's `next` pointer instead of + // materializing every intermediate RemoteNode just to read it. Resume from + // the memoized cursor when possible so sequential forward access is O(1) + // amortized (a full in-order pass is O(n) rather than O(n^2)). + const offsetNodes = this.sourceFile._offsetNodes; + let i: number; + let next: number; + if (index >= this._cursorIndex) { + i = this._cursorIndex; + next = this._cursorNodeIndex; + } + else { + i = 0; + next = this.index + 1; + } + for (; i < index; i++) { + next = this.view.getUint32(offsetNodes + next * NODE_LEN + NODE_OFFSET_NEXT, true); + } + this._cursorIndex = index; + this._cursorNodeIndex = next; + return this.getOrCreateChildAtNodeIndex(next) as RemoteNode; + } + + getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList { + let child = this.sourceFile.nodes[index]; + if (!child) { + const kind = this.view.getUint32(this.sourceFile._offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true); + if (kind === KIND_NODE_LIST) { + throw new Error("NodeList cannot directly contain another NodeList"); + } + const sf = this.sourceFile; + child = new RemoteNode(this.view, index, this.parent, sf, sf._offsetNodes); + sf.nodes[index] = child; + sf._timing?.recordMaterialization(); + } + return child; + } + + __print(): string { + const result = []; + result.push(`kind: NodeList`); + result.push(`index: ${this.index}`); + result.push(`byteIndex: ${this._byteIndex}`); + result.push(`length: ${this.length}`); + return result.join("\n"); + } +} + +export class RemoteNode extends RemoteNodeBase implements Node { + protected static NODE_LEN: number = NODE_LEN; + protected override get sourceFile(): SourceFileInfo { + return this._sourceFile; + } + protected _sourceFile: SourceFileInfo; + get id(): string { + return `${this.index}.${this.kind}.${this.sourceFile.path}`; + } + + constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) { + super(view, index, parent, offsetNodes + index * NODE_LEN); + this._sourceFile = sourceFile; + } + + forEachChild(visitNode: (node: Node) => T, visitList?: (list: NodeArray) => T): T | undefined { + if (this.hasChildren()) { + let next = this.index + 1; + do { + const child = this.getOrCreateChildAtNodeIndex(next); + if (child instanceof RemoteNodeList) { + if (visitList) { + const result = visitList(child); + if (result) { + return result; + } + } + else { + const result = child.forEachNode(visitNode); + if (result) { + return result; + } + } + } + else if (child.kind !== SyntaxKind.JSDoc) { + const result = visitNode(child); + if (result) { + return result; + } + } + next = child.next; + } + while (next); + } + } + + *childrenIter(): Generator { + if (this.hasChildren()) { + let next = this.index + 1; + do { + const child = this.getOrCreateChildAtNodeIndex(next); + if (child instanceof RemoteNodeList) { + if (child.length) { + let listNext = child.firstNodeIndex; + while (listNext) { + const node = child.getOrCreateChildAtNodeIndex(listNext) as RemoteNode; + listNext = node.next; + const result = yield node; + if (result) { + return result; + } + } + } + } + else if (child.kind !== SyntaxKind.JSDoc) { + const result = yield child; + if (result) { + return result; + } + } + next = child.next; + } + while (next); + } + } + + get jsDoc(): readonly Node[] | undefined { + if (!this.hasChildren()) { + return undefined; + } + let result: Node[] | undefined; + let next = this.index + 1; + do { + const child = this.getOrCreateChildAtNodeIndex(next); + if (!(child instanceof RemoteNodeList) && child.kind === SyntaxKind.JSDoc) { + (result ??= []).push(child); + } + next = child.next; + } + while (next); + return result; + } + + getSourceFile(): SourceFile { + return this.sourceFile as unknown as SourceFile; + } + + getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number { + return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment); + } + + getFullStart(): number { + return this.pos; + } + + getEnd(): number { + return this.end; + } + + getWidth(sourceFile?: SourceFile): number { + return this.getEnd() - this.getStart(sourceFile); + } + + getFullWidth(): number { + return this.end - this.pos; + } + + getLeadingTriviaWidth(sourceFile?: SourceFile): number { + return this.getStart(sourceFile) - this.pos; + } + + getFullText(sourceFile?: SourceFile): string { + return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end); + } + + getText(sourceFile?: SourceFile): string { + sourceFile ??= this.getSourceFile(); + return sourceFile.text.substring(this.getStart(sourceFile), this.end); + } + + getChildCount(sourceFile?: SourceFile): number { + return this.getChildren(sourceFile).length; + } + + getChildAt(index: number, sourceFile?: SourceFile): Node { + return this.getChildren(sourceFile)[index]; + } + + getChildren(sourceFile?: SourceFile): readonly Node[] { + return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } + + getFirstToken(sourceFile?: SourceFile): Node | undefined { + return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } + + getLastToken(sourceFile?: SourceFile): Node | undefined { + return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } + + protected getString(index: number): string { + const offsetStringTableOffsets = this.sourceFile._offsetStringTableOffsets; + const start = this.view.getUint32(offsetStringTableOffsets + index * 4, true); + const end = this.view.getUint32(offsetStringTableOffsets + (index + 1) * 4, true); + const offsetStringTable = this.sourceFile._offsetStringTable; + const text = new Uint8Array(this.view.buffer, this.view.byteOffset + offsetStringTable + start, end - start); + return this.sourceFile._decoder.decode(text); + } + + private getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList { + let child = this.sourceFile.nodes[index]; + if (!child) { + const sf = this.sourceFile; + const offsetNodes = sf._offsetNodes; + const kind = this.view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true); + child = kind === KIND_NODE_LIST + ? new RemoteNodeList(this.view, index, this, sf, offsetNodes) + : new RemoteNode(this.view, index, this, sf, offsetNodes); + sf.nodes[index] = child; + sf._timing?.recordMaterialization(); + } + return child; + } + + private hasChildren(): boolean { + if (this._byteIndex >= this.view.byteLength - NODE_LEN) { + return false; + } + const nextNodeParent = this.view.getUint32(this.sourceFile._offsetNodes + (this.index + 1) * NODE_LEN + NODE_OFFSET_PARENT, true); + return nextNodeParent === this.index; + } + + private getNamedChild(propertyName: string): RemoteNode | RemoteNodeList | undefined { + const kind = this.kind; + const propertyNames = childProperties[kind]; + if (!propertyNames) { + return undefined; + } + + const order = propertyNames.indexOf(propertyName); + if (order === -1) { + return undefined; + } + return this.getChildAtOrder(order); + } + + private getChildAtOrder(order: number): RemoteNode | RemoteNodeList | undefined { + if (!this.hasChildren()) return undefined; + const mask = this.childMask; + if (!(mask & (1 << order))) { + // Property is not present + return undefined; + } + + // The property index is `order`, minus the number of zeros in the mask that are in bit positions less + // than the `order`th bit. Example: + // + // This is a MethodDeclaration with mask 0b01110101. The possible properties are + // ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"] + // (it has modifiers, name, typeParameters, parameters, and type). + // + // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | + // | Value | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | + // | Name | body | type | parameters | typeParameters | postfixToken | name | asteriskToken | modifiers | + // + // We are trying to get the index of "parameters" (bit = 5). + // First, set all the more significant bits to 1: + // + // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | + // | Value | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | + // + // Then, flip the bits: + // + // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- | + // | Value | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | + // + // Counting the 1s gives us the number of *missing properties* before the `order`th property. If every property + // were present, we would have `parameters = children[5]`, but since `postfixToken` and `astersiskToken` are + // missing, we have `parameters = children[5 - 2]`. + const propertyIndex = order - popcount8[~(mask | ((0xff << order) & 0xff)) & 0xff]; + let childIndex = this.index + 1; + for (let i = 0; i < propertyIndex; i++) { + // Walk through children via their `next` pointer until we get to the right property index + childIndex = this.view.getUint32(this.sourceFile._offsetNodes + childIndex * NODE_LEN + NODE_OFFSET_NEXT, true); + } + return this.getOrCreateChildAtNodeIndex(childIndex); + } + + __print(): string { + const result = []; + result.push(`index: ${this.index}`); + result.push(`byteIndex: ${this._byteIndex}`); + result.push(`kind: ${SyntaxKind[this.kind]}`); + result.push(`pos: ${this.pos}`); + result.push(`end: ${this.end}`); + result.push(`next: ${this.next}`); + result.push(`parent: ${this.parentIndex}`); + result.push(`data: ${this.data.toString(2).padStart(32, "0")}`); + const dataType = this.dataType === NODE_DATA_TYPE_CHILDREN ? "children" : + this.dataType === NODE_DATA_TYPE_STRING ? "string" : + "extended"; + result.push(`dataType: ${dataType}`); + if (this.dataType === NODE_DATA_TYPE_CHILDREN) { + result.push(`childMask: ${this.childMask.toString(2).padStart(8, "0")}`); + result.push(`childProperties: ${childProperties[this.kind]?.join(", ")}`); + } + return result.join("\n"); + } + + __printChildren(): string { + const result = []; + let next = this.index + 1; + while (next) { + const child = this.getOrCreateChildAtNodeIndex(next); + next = child.next; + result.push(child.__print()); + } + return result.join("\n\n"); + } + + __printSubtree(): string { + const result = [this.__print()]; + this.forEachChild(function visitNode(node) { + result.push((node as RemoteNode).__print()); + node.forEachChild(visitNode); + }, visitList => { + result.push((visitList as RemoteNodeList).__print()); + }); + return result.join("\n\n"); + } + + // ═══ Generated boolean property getters ═══ + + get containsOnlyTriviaWhiteSpaces(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get isArrayType(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get isBracketed(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get isExportEquals(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get isNameFirst(): boolean { + return (this.data & (1 << 25)) !== 0; + } + + get isTypeOf(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get isTypeOnly(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + get multiLine(): boolean { + return (this.data & (1 << 24)) !== 0; + } + + // ═══ Generated SyntaxKind union property getters ═══ + + get keyword(): SyntaxKind | undefined { + switch (this.kind) { + case SyntaxKind.ModuleDeclaration: + return (this.data >> 24) & 0x1 ? SyntaxKind.NamespaceKeyword : SyntaxKind.ModuleKeyword; + } + } + + get keywordToken(): SyntaxKind | undefined { + switch (this.kind) { + case SyntaxKind.MetaProperty: + return (this.data >> 24) & 0x1 ? SyntaxKind.NewKeyword : SyntaxKind.ImportKeyword; + } + } + + get operator(): SyntaxKind | undefined { + switch (this.kind) { + case SyntaxKind.PrefixUnaryExpression: { + const idx = (this.data >> 24) & 0x7; + if (idx === 1) return SyntaxKind.MinusToken; + if (idx === 2) return SyntaxKind.TildeToken; + if (idx === 3) return SyntaxKind.ExclamationToken; + if (idx === 4) return SyntaxKind.PlusPlusToken; + if (idx === 5) return SyntaxKind.MinusMinusToken; + return SyntaxKind.PlusToken; + } + case SyntaxKind.PostfixUnaryExpression: + return (this.data >> 24) & 0x1 ? SyntaxKind.MinusMinusToken : SyntaxKind.PlusPlusToken; + case SyntaxKind.TypeOperator: { + const idx = (this.data >> 24) & 0x3; + if (idx === 1) return SyntaxKind.ReadonlyKeyword; + if (idx === 2) return SyntaxKind.UniqueKeyword; + return SyntaxKind.KeyOfKeyword; + } + } + } + + get phaseModifier(): SyntaxKind | undefined { + switch (this.kind) { + case SyntaxKind.ImportClause: { + const idx = (this.data >> 24) & 0x3; + if (idx === 0) return undefined; + return idx === 1 ? SyntaxKind.TypeKeyword : idx === 2 ? SyntaxKind.DeferKeyword : idx === 3 ? SyntaxKind.SourceKeyword : undefined; + } + } + } + + get token(): SyntaxKind | undefined { + switch (this.kind) { + case SyntaxKind.HeritageClause: + return (this.data >> 24) & 0x1 ? SyntaxKind.ImplementsKeyword : SyntaxKind.ExtendsKeyword; + case SyntaxKind.ImportAttributes: + return (this.data >> 25) & 0x1 ? SyntaxKind.AssertKeyword : SyntaxKind.WithKeyword; + } + } + + get templateFlags(): number | undefined { + switch (this.kind) { + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: + case SyntaxKind.TemplateTail: + const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); + return this.view.getUint32(extendedDataOffset + 8, true); + } + } + + get tokenFlags(): number { + switch (this.kind) { + case SyntaxKind.StringLiteral: + case SyntaxKind.NumericLiteral: + case SyntaxKind.BigIntLiteral: + case SyntaxKind.RegularExpressionLiteral: + const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); + return this.view.getUint32(extendedDataOffset + 4, true); + default: + return 0; + } + } + + // ═══ Generated child property getters ═══ + + get argument(): RemoteNode | undefined { + return this.getNamedChild("argument") as RemoteNode; + } + get argumentExpression(): RemoteNode | undefined { + return this.getNamedChild("argumentExpression") as RemoteNode; + } + get arguments(): RemoteNodeList | undefined { + return this.getNamedChild("arguments") as RemoteNodeList; + } + get assertsModifier(): RemoteNode | undefined { + return this.getNamedChild("assertsModifier") as RemoteNode; + } + get asteriskToken(): RemoteNode | undefined { + return this.getNamedChild("asteriskToken") as RemoteNode; + } + get attributes(): RemoteNode | RemoteNodeList | undefined { + return this.getNamedChild("attributes") as RemoteNode | RemoteNodeList; + } + get awaitModifier(): RemoteNode | undefined { + return this.getNamedChild("awaitModifier") as RemoteNode; + } + get block(): RemoteNode | undefined { + return this.getNamedChild("block") as RemoteNode; + } + get body(): RemoteNode | undefined { + return this.getNamedChild("body") as RemoteNode; + } + get caseBlock(): RemoteNode | undefined { + return this.getNamedChild("caseBlock") as RemoteNode; + } + get catchClause(): RemoteNode | undefined { + return this.getNamedChild("catchClause") as RemoteNode; + } + get checkType(): RemoteNode | undefined { + return this.getNamedChild("checkType") as RemoteNode; + } + get children(): RemoteNode | RemoteNodeList | undefined { + return this.getNamedChild("children") as RemoteNode | RemoteNodeList; + } + get className(): RemoteNode | undefined { + return this.getNamedChild("className") as RemoteNode; + } + get clauses(): RemoteNodeList | undefined { + return this.getNamedChild("clauses") as RemoteNodeList; + } + get closingElement(): RemoteNode | undefined { + return this.getNamedChild("closingElement") as RemoteNode; + } + get closingFragment(): RemoteNode | undefined { + return this.getNamedChild("closingFragment") as RemoteNode; + } + get colonToken(): RemoteNode | undefined { + return this.getNamedChild("colonToken") as RemoteNode; + } + get comment(): RemoteNodeList | undefined { + return this.getNamedChild("comment") as RemoteNodeList; + } + get condition(): RemoteNode | undefined { + return this.getNamedChild("condition") as RemoteNode; + } + get constraint(): RemoteNode | undefined { + return this.getNamedChild("constraint") as RemoteNode; + } + get declarationList(): RemoteNode | undefined { + return this.getNamedChild("declarationList") as RemoteNode; + } + get declarations(): RemoteNodeList | undefined { + return this.getNamedChild("declarations") as RemoteNodeList; + } + get defaultType(): RemoteNode | undefined { + return this.getNamedChild("defaultType") as RemoteNode; + } + get dotDotDotToken(): RemoteNode | undefined { + return this.getNamedChild("dotDotDotToken") as RemoteNode; + } + get elements(): RemoteNodeList | undefined { + return this.getNamedChild("elements") as RemoteNodeList; + } + get elementType(): RemoteNode | undefined { + return this.getNamedChild("elementType") as RemoteNode; + } + get elseStatement(): RemoteNode | undefined { + return this.getNamedChild("elseStatement") as RemoteNode; + } + get endOfFileToken(): RemoteNode | undefined { + return this.getNamedChild("endOfFileToken") as RemoteNode; + } + get equalsGreaterThanToken(): RemoteNode | undefined { + return this.getNamedChild("equalsGreaterThanToken") as RemoteNode; + } + get equalsToken(): RemoteNode | undefined { + return this.getNamedChild("equalsToken") as RemoteNode; + } + get exclamationToken(): RemoteNode | undefined { + return this.getNamedChild("exclamationToken") as RemoteNode; + } + get exportClause(): RemoteNode | undefined { + return this.getNamedChild("exportClause") as RemoteNode; + } + get expression(): RemoteNode | undefined { + return this.getNamedChild("expression") as RemoteNode; + } + get exprName(): RemoteNode | undefined { + return this.getNamedChild("exprName") as RemoteNode; + } + get extendsType(): RemoteNode | undefined { + return this.getNamedChild("extendsType") as RemoteNode; + } + get falseType(): RemoteNode | undefined { + return this.getNamedChild("falseType") as RemoteNode; + } + get finallyBlock(): RemoteNode | undefined { + return this.getNamedChild("finallyBlock") as RemoteNode; + } + get head(): RemoteNode | undefined { + return this.getNamedChild("head") as RemoteNode; + } + get heritageClauses(): RemoteNodeList | undefined { + return this.getNamedChild("heritageClauses") as RemoteNodeList; + } + get importClause(): RemoteNode | undefined { + return this.getNamedChild("importClause") as RemoteNode; + } + get incrementor(): RemoteNode | undefined { + return this.getNamedChild("incrementor") as RemoteNode; + } + get indexType(): RemoteNode | undefined { + return this.getNamedChild("indexType") as RemoteNode; + } + get initializer(): RemoteNode | undefined { + return this.getNamedChild("initializer") as RemoteNode; + } + get jsdocPropertyTags(): RemoteNode | undefined { + return this.getNamedChild("jsdocPropertyTags") as RemoteNode; + } + get label(): RemoteNode | undefined { + return this.getNamedChild("label") as RemoteNode; + } + get left(): RemoteNode | undefined { + return this.getNamedChild("left") as RemoteNode; + } + get literal(): RemoteNode | undefined { + return this.getNamedChild("literal") as RemoteNode; + } + get members(): RemoteNodeList | undefined { + return this.getNamedChild("members") as RemoteNodeList; + } + get modifiers(): RemoteNodeList | undefined { + return this.getNamedChild("modifiers") as RemoteNodeList; + } + get moduleReference(): RemoteNode | undefined { + return this.getNamedChild("moduleReference") as RemoteNode; + } + get moduleSpecifier(): RemoteNode | undefined { + return this.getNamedChild("moduleSpecifier") as RemoteNode; + } + get name(): RemoteNode | undefined { + return this.getNamedChild("name") as RemoteNode; + } + get namedBindings(): RemoteNode | undefined { + return this.getNamedChild("namedBindings") as RemoteNode; + } + get nameExpression(): RemoteNode | undefined { + return this.getNamedChild("nameExpression") as RemoteNode; + } + get namespace(): RemoteNode | undefined { + return this.getNamedChild("namespace") as RemoteNode; + } + get nameType(): RemoteNode | undefined { + return this.getNamedChild("nameType") as RemoteNode; + } + get objectAssignmentInitializer(): RemoteNode | undefined { + return this.getNamedChild("objectAssignmentInitializer") as RemoteNode; + } + get objectType(): RemoteNode | undefined { + return this.getNamedChild("objectType") as RemoteNode; + } + get openingElement(): RemoteNode | undefined { + return this.getNamedChild("openingElement") as RemoteNode; + } + get openingFragment(): RemoteNode | undefined { + return this.getNamedChild("openingFragment") as RemoteNode; + } + get operand(): RemoteNode | undefined { + return this.getNamedChild("operand") as RemoteNode; + } + get operatorToken(): RemoteNode | undefined { + return this.getNamedChild("operatorToken") as RemoteNode; + } + get parameterName(): RemoteNode | undefined { + return this.getNamedChild("parameterName") as RemoteNode; + } + get parameters(): RemoteNodeList | undefined { + return this.getNamedChild("parameters") as RemoteNodeList; + } + get postfixToken(): RemoteNode | undefined { + return this.getNamedChild("postfixToken") as RemoteNode; + } + get properties(): RemoteNodeList | undefined { + return this.getNamedChild("properties") as RemoteNodeList; + } + get propertyName(): RemoteNode | undefined { + return this.getNamedChild("propertyName") as RemoteNode; + } + get qualifier(): RemoteNode | undefined { + return this.getNamedChild("qualifier") as RemoteNode; + } + get questionDotToken(): RemoteNode | undefined { + return this.getNamedChild("questionDotToken") as RemoteNode; + } + get questionToken(): RemoteNode | undefined { + return this.getNamedChild("questionToken") as RemoteNode; + } + get readonlyToken(): RemoteNode | undefined { + return this.getNamedChild("readonlyToken") as RemoteNode; + } + get right(): RemoteNode | undefined { + return this.getNamedChild("right") as RemoteNode; + } + get statement(): RemoteNode | undefined { + return this.getNamedChild("statement") as RemoteNode; + } + get statements(): RemoteNodeList | undefined { + return this.getNamedChild("statements") as RemoteNodeList; + } + get tag(): RemoteNode | undefined { + return this.getNamedChild("tag") as RemoteNode; + } + get tagName(): RemoteNode | undefined { + return this.getNamedChild("tagName") as RemoteNode; + } + get tags(): RemoteNodeList | undefined { + return this.getNamedChild("tags") as RemoteNodeList; + } + get template(): RemoteNode | undefined { + return this.getNamedChild("template") as RemoteNode; + } + get templateSpans(): RemoteNodeList | undefined { + return this.getNamedChild("templateSpans") as RemoteNodeList; + } + get thenStatement(): RemoteNode | undefined { + return this.getNamedChild("thenStatement") as RemoteNode; + } + get thisArg(): RemoteNode | undefined { + return this.getNamedChild("thisArg") as RemoteNode; + } + get trueType(): RemoteNode | undefined { + return this.getNamedChild("trueType") as RemoteNode; + } + get tryBlock(): RemoteNode | undefined { + return this.getNamedChild("tryBlock") as RemoteNode; + } + get tupleNameSource(): RemoteNode | undefined { + return this.getNamedChild("tupleNameSource") as RemoteNode; + } + get type(): RemoteNode | undefined { + return this.getNamedChild("type") as RemoteNode; + } + get typeArguments(): RemoteNodeList | undefined { + return this.getNamedChild("typeArguments") as RemoteNodeList; + } + get typeExpression(): RemoteNode | undefined { + return this.getNamedChild("typeExpression") as RemoteNode; + } + get typeName(): RemoteNode | undefined { + return this.getNamedChild("typeName") as RemoteNode; + } + get typeParameter(): RemoteNode | undefined { + return this.getNamedChild("typeParameter") as RemoteNode; + } + get typeParameters(): RemoteNodeList | undefined { + return this.getNamedChild("typeParameters") as RemoteNodeList; + } + get types(): RemoteNodeList | undefined { + return this.getNamedChild("types") as RemoteNodeList; + } + get value(): RemoteNode | undefined { + return this.getNamedChild("value") as RemoteNode; + } + get variableDeclaration(): RemoteNode | undefined { + return this.getNamedChild("variableDeclaration") as RemoteNode; + } + get whenFalse(): RemoteNode | undefined { + return this.getNamedChild("whenFalse") as RemoteNode; + } + get whenTrue(): RemoteNode | undefined { + return this.getNamedChild("whenTrue") as RemoteNode; + } + + // ═══ Generated string property getters ═══ + + get text(): string | undefined { + switch (this.kind) { + case SyntaxKind.Identifier: + case SyntaxKind.PrivateIdentifier: + case SyntaxKind.JsxText: + case SyntaxKind.JSDocText: + case SyntaxKind.JSDocLink: + case SyntaxKind.JSDocLinkPlain: + case SyntaxKind.JSDocLinkCode: { + const stringIndex = this.data & NODE_STRING_INDEX_MASK; + return this.getString(stringIndex); + } + case SyntaxKind.StringLiteral: + case SyntaxKind.NumericLiteral: + case SyntaxKind.BigIntLiteral: + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.NoSubstitutionTemplateLiteral: + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: + case SyntaxKind.TemplateTail: + case SyntaxKind.SourceFile: { + const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); + const stringIndex = this.view.getUint32(extendedDataOffset, true); + return this.getString(stringIndex); + } + } + } + + get rawText(): string | undefined { + switch (this.kind) { + case SyntaxKind.TemplateHead: + case SyntaxKind.TemplateMiddle: + case SyntaxKind.TemplateTail: + const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); + const stringIndex = this.view.getUint32(extendedDataOffset + 4, true); + return this.getString(stringIndex); + } + } + + // ═══ Generated extended data property getters ═══ + + // ═══ Other property getters ═══ + + get flags(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true); + } + + get modifierFlags(): ModifierFlags { + const mods = this.modifiers; + if (!mods) return ModifierFlags.None; + let flags: ModifierFlags = ModifierFlags.None; + for (const mod of mods) { + flags |= modifierToFlag(mod.kind); + } + return flags; + } +} diff --git a/packages/typescript/src/api/node/node.infrastructure.ts b/packages/typescript/src/api/node/node.infrastructure.ts index 9bfdbd49c89e2..70bc8546c3f55 100644 --- a/packages/typescript/src/api/node/node.infrastructure.ts +++ b/packages/typescript/src/api/node/node.infrastructure.ts @@ -1,179 +1,179 @@ -import { - type FileReference, - type Node, - type PathKey, - SyntaxKind, -} from "../../ast/index.ts"; -export { modifierToFlag } from "../../ast/modifiers.ts"; -import type { TimingCollector } from "../timing.ts"; -import { - HEADER_OFFSET_HASH_HI0, - HEADER_OFFSET_HASH_HI1, - HEADER_OFFSET_HASH_LO0, - HEADER_OFFSET_HASH_LO1, - HEADER_OFFSET_PARSE_OPTIONS, - HEADER_OFFSET_SOURCE_FILE_ID, - HEADER_OFFSET_SOURCE_FILE_LEASE, - NODE_DATA_TYPE_CHILDREN, - NODE_DATA_TYPE_EXTENDED, - NODE_DATA_TYPE_STRING, - NODE_OFFSET_DATA, - NODE_OFFSET_END, - NODE_OFFSET_KIND, - NODE_OFFSET_NEXT, - NODE_OFFSET_PARENT, - NODE_OFFSET_POS, -} from "./protocol.ts"; - -// ═══════════════════════════════════════════════════════════════════════════ -// Constants -// ═══════════════════════════════════════════════════════════════════════════ - -export const popcount8: number[] = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8]; - -export type NodeDataType = typeof NODE_DATA_TYPE_CHILDREN | typeof NODE_DATA_TYPE_STRING | typeof NODE_DATA_TYPE_EXTENDED; -export const NODE_DATA_TYPE_MASK = 0xc0_00_00_00; -export const NODE_CHILD_MASK = 0x00_00_00_ff; -export const NODE_STRING_INDEX_MASK = 0x00_ff_ff_ff; -export const NODE_EXTENDED_DATA_MASK = 0x00_ff_ff_ff; - -// ═══════════════════════════════════════════════════════════════════════════ -// SourceFileInfo — the interface RemoteNode/RemoteNodeList need from the -// source file, avoiding a direct dependency on RemoteSourceFile. -// ═══════════════════════════════════════════════════════════════════════════ - -// The global type is not available in earlier @types/node versions. -export interface TextDecoder { - decode(input?: Uint8Array): string; -} - -export interface SourceFileInfo { - readonly _offsetNodes: number; - readonly _offsetStringTableOffsets: number; - readonly _offsetStringTable: number; - readonly _offsetExtendedData: number; - readonly _offsetStructuredData: number; - readonly _decoder: TextDecoder; - nodes: any[]; - readonly path?: string | undefined; - /** - * The timing collector that per-node materialization is reported into, and - * that this source file registered itself with when fetched. Present only - * when timing collection is enabled; when undefined, materialization is not - * timed and no clock is read. - */ - readonly _timing?: TimingCollector | undefined; - readFileReferences(offset: number): readonly FileReference[]; - readNodeIndexArray(offset: number): readonly Node[]; - readStringArray(offset: number): readonly string[]; - getOrCreateNodeAtIndex(index: number): Node; -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Free functions -// ═══════════════════════════════════════════════════════════════════════════ - -/** - * Read the 128-bit content hash from a source file binary response as a hex string. - */ -export function readSourceFileHash(data: DataView): string { - const lo0 = data.getUint32(HEADER_OFFSET_HASH_LO0, true); - const lo1 = data.getUint32(HEADER_OFFSET_HASH_LO1, true); - const hi0 = data.getUint32(HEADER_OFFSET_HASH_HI0, true); - const hi1 = data.getUint32(HEADER_OFFSET_HASH_HI1, true); - return hex8(hi1) + hex8(hi0) + hex8(lo1) + hex8(lo0); -} - -/** - * Read the per-file parse options key from a source file binary response. - * This encodes the ExternalModuleIndicatorOptions bitmask as a string, - * allowing the client to distinguish files parsed with different options. - */ -export function readParseOptionsKey(data: DataView): string { - return data.getUint32(HEADER_OFFSET_PARSE_OPTIONS, true).toString(); -} - -export function readSourceFileLease(data: DataView): number { - const lease = data.getBigUint64(HEADER_OFFSET_SOURCE_FILE_LEASE, true); - if (lease === 0n) { - throw new Error("Source file response has no lease"); - } - if (lease > BigInt(Number.MAX_SAFE_INTEGER)) { - throw new Error(`Source file lease ${lease} exceeds the maximum safe integer`); - } - return Number(lease); -} - -export function readSourceFileNodeId(data: DataView): string { - const nodeId = data.getBigUint64(HEADER_OFFSET_SOURCE_FILE_ID, true); - if (nodeId === 0n) { - throw new Error("Source file response has no node ID"); - } - return nodeId.toString(); -} - -function hex8(n: number): string { - return (n >>> 0).toString(16).padStart(8, "0"); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// RemoteNodeBase -// ═══════════════════════════════════════════════════════════════════════════ - -export class RemoteNodeBase { - parent: any; // RemoteNode at runtime - view: DataView; - protected index: number; - protected _byteIndex: number; - - constructor(view: DataView, index: number, parent: any, byteIndex: number) { - this.view = view; - this.index = index; - this.parent = parent; - this._byteIndex = byteIndex; - } - - get kind(): SyntaxKind { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_KIND, true); - } - - get pos(): number { - return this.view.getInt32(this._byteIndex + NODE_OFFSET_POS, true); - } - - get end(): number { - return this.view.getInt32(this._byteIndex + NODE_OFFSET_END, true); - } - - get next(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true); - } - - protected get parentIndex(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_PARENT, true); - } - - protected get data(): number { - return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true); - } - - protected get dataType(): NodeDataType { - return (this.data & NODE_DATA_TYPE_MASK) as NodeDataType; - } - - protected get childMask(): number { - if (this.dataType !== NODE_DATA_TYPE_CHILDREN) { - return -1; - } - return this.data & NODE_CHILD_MASK; - } - - protected getFileText(start: number, end: number): string { - return this.sourceFile._decoder.decode(new Uint8Array(this.view.buffer, this.view.byteOffset + this.sourceFile._offsetStringTable + start, end - start)); - } - - protected get sourceFile(): SourceFileInfo { - // Overridden in RemoteNode; exists here for getFileText access - throw new Error("sourceFile not available on base"); - } -} +import { + type FileReference, + type Node, + type PathKey, + SyntaxKind, +} from "../../ast/index.ts"; +export { modifierToFlag } from "../../ast/modifiers.ts"; +import type { TimingCollector } from "../timing.ts"; +import { + HEADER_OFFSET_HASH_HI0, + HEADER_OFFSET_HASH_HI1, + HEADER_OFFSET_HASH_LO0, + HEADER_OFFSET_HASH_LO1, + HEADER_OFFSET_PARSE_OPTIONS, + HEADER_OFFSET_SOURCE_FILE_ID, + HEADER_OFFSET_SOURCE_FILE_LEASE, + NODE_DATA_TYPE_CHILDREN, + NODE_DATA_TYPE_EXTENDED, + NODE_DATA_TYPE_STRING, + NODE_OFFSET_DATA, + NODE_OFFSET_END, + NODE_OFFSET_KIND, + NODE_OFFSET_NEXT, + NODE_OFFSET_PARENT, + NODE_OFFSET_POS, +} from "./protocol.ts"; + +// ═══════════════════════════════════════════════════════════════════════════ +// Constants +// ═══════════════════════════════════════════════════════════════════════════ + +export const popcount8: number[] = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8]; + +export type NodeDataType = typeof NODE_DATA_TYPE_CHILDREN | typeof NODE_DATA_TYPE_STRING | typeof NODE_DATA_TYPE_EXTENDED; +export const NODE_DATA_TYPE_MASK = 0xc0_00_00_00; +export const NODE_CHILD_MASK = 0x00_00_00_ff; +export const NODE_STRING_INDEX_MASK = 0x00_ff_ff_ff; +export const NODE_EXTENDED_DATA_MASK = 0x00_ff_ff_ff; + +// ═══════════════════════════════════════════════════════════════════════════ +// SourceFileInfo — the interface RemoteNode/RemoteNodeList need from the +// source file, avoiding a direct dependency on RemoteSourceFile. +// ═══════════════════════════════════════════════════════════════════════════ + +// The global type is not available in earlier @types/node versions. +export interface TextDecoder { + decode(input?: Uint8Array): string; +} + +export interface SourceFileInfo { + readonly _offsetNodes: number; + readonly _offsetStringTableOffsets: number; + readonly _offsetStringTable: number; + readonly _offsetExtendedData: number; + readonly _offsetStructuredData: number; + readonly _decoder: TextDecoder; + nodes: any[]; + readonly path?: string | undefined; + /** + * The timing collector that per-node materialization is reported into, and + * that this source file registered itself with when fetched. Present only + * when timing collection is enabled; when undefined, materialization is not + * timed and no clock is read. + */ + readonly _timing?: TimingCollector | undefined; + readFileReferences(offset: number): readonly FileReference[]; + readNodeIndexArray(offset: number): readonly Node[]; + readStringArray(offset: number): readonly string[]; + getOrCreateNodeAtIndex(index: number): Node; +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Free functions +// ═══════════════════════════════════════════════════════════════════════════ + +/** + * Read the 128-bit content hash from a source file binary response as a hex string. + */ +export function readSourceFileHash(data: DataView): string { + const lo0 = data.getUint32(HEADER_OFFSET_HASH_LO0, true); + const lo1 = data.getUint32(HEADER_OFFSET_HASH_LO1, true); + const hi0 = data.getUint32(HEADER_OFFSET_HASH_HI0, true); + const hi1 = data.getUint32(HEADER_OFFSET_HASH_HI1, true); + return hex8(hi1) + hex8(hi0) + hex8(lo1) + hex8(lo0); +} + +/** + * Read the per-file parse options key from a source file binary response. + * This encodes the ExternalModuleIndicatorOptions bitmask as a string, + * allowing the client to distinguish files parsed with different options. + */ +export function readParseOptionsKey(data: DataView): string { + return data.getUint32(HEADER_OFFSET_PARSE_OPTIONS, true).toString(); +} + +export function readSourceFileLease(data: DataView): number { + const lease = data.getBigUint64(HEADER_OFFSET_SOURCE_FILE_LEASE, true); + if (lease === 0n) { + throw new Error("Source file response has no lease"); + } + if (lease > BigInt(Number.MAX_SAFE_INTEGER)) { + throw new Error(`Source file lease ${lease} exceeds the maximum safe integer`); + } + return Number(lease); +} + +export function readSourceFileNodeId(data: DataView): string { + const nodeId = data.getBigUint64(HEADER_OFFSET_SOURCE_FILE_ID, true); + if (nodeId === 0n) { + throw new Error("Source file response has no node ID"); + } + return nodeId.toString(); +} + +function hex8(n: number): string { + return (n >>> 0).toString(16).padStart(8, "0"); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// RemoteNodeBase +// ═══════════════════════════════════════════════════════════════════════════ + +export class RemoteNodeBase { + parent: any; // RemoteNode at runtime + view: DataView; + protected index: number; + protected _byteIndex: number; + + constructor(view: DataView, index: number, parent: any, byteIndex: number) { + this.view = view; + this.index = index; + this.parent = parent; + this._byteIndex = byteIndex; + } + + get kind(): SyntaxKind { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_KIND, true); + } + + get pos(): number { + return this.view.getInt32(this._byteIndex + NODE_OFFSET_POS, true); + } + + get end(): number { + return this.view.getInt32(this._byteIndex + NODE_OFFSET_END, true); + } + + get next(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true); + } + + protected get parentIndex(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_PARENT, true); + } + + protected get data(): number { + return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true); + } + + protected get dataType(): NodeDataType { + return (this.data & NODE_DATA_TYPE_MASK) as NodeDataType; + } + + protected get childMask(): number { + if (this.dataType !== NODE_DATA_TYPE_CHILDREN) { + return -1; + } + return this.data & NODE_CHILD_MASK; + } + + protected getFileText(start: number, end: number): string { + return this.sourceFile._decoder.decode(new Uint8Array(this.view.buffer, this.view.byteOffset + this.sourceFile._offsetStringTable + start, end - start)); + } + + protected get sourceFile(): SourceFileInfo { + // Overridden in RemoteNode; exists here for getFileText access + throw new Error("sourceFile not available on base"); + } +} diff --git a/packages/typescript/src/api/node/node.ts b/packages/typescript/src/api/node/node.ts index 99e2a1ed991bf..949038c658023 100644 --- a/packages/typescript/src/api/node/node.ts +++ b/packages/typescript/src/api/node/node.ts @@ -1,541 +1,541 @@ -import { - computeLineStarts, - type FileReference, - type LineAndCharacter, - type MappedDiagnosticDirective, - type Node, - NodeFlags, - type PathKey, - type RootedFilePath, - SpanMap, - SpanMapFeature, - SpanMapKind, - SyntaxKind, - TokenFlags, -} from "../../ast/index.ts"; -import type { API as AsyncAPI } from "../async/api.ts"; -import { tryPathKeyFromCanonical } from "../path.ts"; -import type { CachedSourceFile } from "../sourceFileCache.ts"; -import type { API as SyncAPI } from "../sync/api.ts"; -import type { TimingCollector } from "../timing.ts"; -import { MsgpackReader } from "./msgpack.ts"; -import { - RemoteNode, - RemoteNodeList, -} from "./node.generated.ts"; -import { - NODE_EXTENDED_DATA_MASK, - readParseOptionsKey, - readSourceFileHash, - readSourceFileNodeId, - type SourceFileInfo, - type TextDecoder, -} from "./node.infrastructure.ts"; -import { - HEADER_OFFSET_EXTENDED_DATA, - HEADER_OFFSET_NODES, - HEADER_OFFSET_STRING_TABLE, - HEADER_OFFSET_STRING_TABLE_OFFSETS, - HEADER_OFFSET_STRUCTURED_DATA, - KIND_NODE_LIST, - NODE_LEN, - NODE_OFFSET_KIND, - NODE_OFFSET_PARENT, -} from "./protocol.ts"; -import { Wtf8Decoder } from "./wtf8.ts"; - -// Re-export everything consumers need from the other two files. -export { RemoteNode, RemoteNodeList } from "./node.generated.ts"; -export { readParseOptionsKey, readSourceFileHash, readSourceFileLease, readSourceFileNodeId, RemoteNodeBase } from "./node.infrastructure.ts"; - -const sourceFileExtendedDataOffsets = { - Text: 0, - FileName: 4, - Path: 8, - LanguageVariant: 12, - ScriptKind: 16, - ReferencedFiles: 20, - TypeReferenceDirectives: 24, - LibReferenceDirectives: 28, - Imports: 32, - ModuleAugmentations: 36, - AmbientModuleNames: 40, - ExternalModuleIndicator: 44, - OriginalText: 48, - SpanMap: 52, - SupplementalSourceFileNames: 56, - CanonicalSourceFileName: 60, - ContentMapper: 64, - VirtualFileName: 68, - DiagnosticDirectives: 72, -} as const; - -for (const [index, offset] of Object.values(sourceFileExtendedDataOffsets).entries()) { - if (offset !== index * Uint32Array.BYTES_PER_ELEMENT) { - throw new Error(`Invalid SourceFile extended data offset ${offset} at index ${index}`); - } -} - -// ═══════════════════════════════════════════════════════════════════════════ -// RemoteSourceFile -// ═══════════════════════════════════════════════════════════════════════════ - -const NO_STRUCTURED_DATA = 0xFFFFFFFF; - -export class RemoteSourceFile extends RemoteNode implements SourceFileInfo { - readonly api: AsyncAPI | SyncAPI | undefined; - symbolCache: CachedSourceFile | undefined; - readonly nodes: (RemoteNode | RemoteNodeList)[]; - readonly _offsetNodes: number; - readonly _offsetStringTableOffsets: number; - readonly _offsetStringTable: number; - readonly _offsetExtendedData: number; - readonly _offsetStructuredData: number; - readonly _decoder: TextDecoder; - readonly _timing: TimingCollector | undefined; - private _lineStarts: readonly number[] | undefined; - private _cachedText: string | undefined; - private _cachedReferencedFiles: readonly FileReference[] | undefined; - private _cachedTypeReferenceDirectives: readonly FileReference[] | undefined; - private _cachedLibReferenceDirectives: readonly FileReference[] | undefined; - private _cachedImports: readonly Node[] | undefined; - private _cachedModuleAugmentations: readonly Node[] | undefined; - private _cachedAmbientModuleNames: readonly string[] | undefined; - private _cachedSpanMap: SpanMap | undefined; - private _spanMapRead = false; - private _cachedSupplementalSourceFileNames: readonly RootedFilePath[] | undefined; - private _cachedDiagnosticDirectives: readonly MappedDiagnosticDirective[] | undefined; - private _diagnosticDirectivesRead = false; - - constructor( - data: Uint8Array, - decoder: TextDecoder, - timing?: TimingCollector, - api?: AsyncAPI | SyncAPI | undefined, - ) { - const view = new DataView(data.buffer, data.byteOffset, data.byteLength); - const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); - super(view, 1, undefined!, undefined!, offsetNodes); - this._sourceFile = this; - this._offsetNodes = offsetNodes; - this._offsetStringTableOffsets = view.getUint32(HEADER_OFFSET_STRING_TABLE_OFFSETS, true); - this._offsetStringTable = view.getUint32(HEADER_OFFSET_STRING_TABLE, true); - this._offsetExtendedData = view.getUint32(HEADER_OFFSET_EXTENDED_DATA, true); - this._offsetStructuredData = view.getUint32(HEADER_OFFSET_STRUCTURED_DATA, true); - this._decoder = decoder; - this._timing = timing; - this.api = api; - this.nodes = Array((view.byteLength - offsetNodes) / NODE_LEN); - this.nodes[1] = this; - // Every node slot is materializable on demand except the nil sentinel at - // index 0 and the source-file node at index 1, which is pre-materialized. - timing?.recordSourceFileFetched(Math.max(0, this.nodes.length - 2)); - } - - /** @internal */ - get contentHash(): string { - return readSourceFileHash(this.view); - } - - /** @internal */ - get parseOptionsKey(): string { - return readParseOptionsKey(this.view); - } - - /** @internal */ - get nodeId(): string { - return readSourceFileNodeId(this.view); - } - - readFileReferences(structuredDataOffset: number): readonly FileReference[] { - if (structuredDataOffset === NO_STRUCTURED_DATA) { - return []; - } - const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); - const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); - const count = reader.readArrayHeader(); - const result: FileReference[] = []; - for (let i = 0; i < count; i++) { - reader.readArrayHeader(); // 5-element tuple - const pos = reader.readUint(); - const end = reader.readUint(); - const fileName = reader.readString(); - const resolutionMode = reader.readUint(); - const preserve = reader.readBool(); - result.push({ pos, end, fileName, resolutionMode, preserve }); - } - return result; - } - - readNodeIndexArray(structuredDataOffset: number): readonly Node[] { - if (structuredDataOffset === NO_STRUCTURED_DATA) { - return []; - } - const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); - const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); - const count = reader.readArrayHeader(); - const result: Node[] = []; - for (let i = 0; i < count; i++) { - const nodeIndex = reader.readUint(); - result.push(this.getOrCreateNodeAtIndex(nodeIndex)); - } - return result; - } - - readStringArray(structuredDataOffset: number): readonly string[] { - if (structuredDataOffset === NO_STRUCTURED_DATA) { - return []; - } - const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); - const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); - const count = reader.readArrayHeader(); - const result: string[] = []; - for (let i = 0; i < count; i++) { - result.push(reader.readString()); - } - return result; - } - - /** @internal */ - getOrCreateNodeAtIndex(index: number): Node { - let node = this.nodes[index]; - if (!node) { - // Resolve the real parent so that nodes looked up directly by index (e.g. via - // NodeHandle.resolve) report the correct `parent`, rather than always pointing at - // the source file. The stored parent index can refer to a synthetic NodeList - // container; skip those to mirror normal traversal, where list elements take the - // list's parent. The walk terminates at the source file, which occupies index 1 - // and is already cached. - let parentIndex = this.view.getUint32(this._offsetNodes + index * NODE_LEN + NODE_OFFSET_PARENT, true); - while ( - parentIndex !== index && - this.view.getUint32(this._offsetNodes + parentIndex * NODE_LEN + NODE_OFFSET_KIND, true) === KIND_NODE_LIST - ) { - parentIndex = this.view.getUint32(this._offsetNodes + parentIndex * NODE_LEN + NODE_OFFSET_PARENT, true); - } - const parent = parentIndex === index ? this : this.getOrCreateNodeAtIndex(parentIndex) as RemoteNode; - node = new RemoteNode(this.view, index, parent, this, this._offsetNodes); - this.nodes[index] = node; - this._timing?.recordMaterialization(); - } - return node as Node; - } - - // ═══ SourceFile-specific extended data getters ═══ - - private get extendedDataOffset(): number { - return this._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); - } - - private getFileName(stringIndex: number): RootedFilePath { - return this.getString(stringIndex) as RootedFilePath; - } - - private getPathKey(stringIndex: number): PathKey { - return this.getString(stringIndex) as PathKey; - } - - private readFileNameArray(structuredDataOffset: number): readonly RootedFilePath[] { - return this.readStringArray(structuredDataOffset) as readonly RootedFilePath[]; - } - - get fileName(): RootedFilePath { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.FileName, true); - return this.getFileName(stringIndex); - } - - get path(): PathKey { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.Path, true); - return this.getPathKey(stringIndex); - } - - get languageVariant(): number { - return this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.LanguageVariant, true); - } - - get scriptKind(): number { - return this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ScriptKind, true); - } - - get referencedFiles(): readonly FileReference[] { - if (this._cachedReferencedFiles !== undefined) return this._cachedReferencedFiles; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ReferencedFiles, true); - const files = this.readFileReferences(offset); - this._cachedReferencedFiles = files; - return files; - } - - get typeReferenceDirectives(): readonly FileReference[] { - if (this._cachedTypeReferenceDirectives !== undefined) return this._cachedTypeReferenceDirectives; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.TypeReferenceDirectives, true); - const directives = this.readFileReferences(offset); - this._cachedTypeReferenceDirectives = directives; - return directives; - } - - get libReferenceDirectives(): readonly FileReference[] { - if (this._cachedLibReferenceDirectives !== undefined) return this._cachedLibReferenceDirectives; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.LibReferenceDirectives, true); - const directives = this.readFileReferences(offset); - this._cachedLibReferenceDirectives = directives; - return directives; - } - - get imports(): readonly Node[] { - if (this._cachedImports !== undefined) return this._cachedImports; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.Imports, true); - const imports = this.readNodeIndexArray(offset); - this._cachedImports = imports; - return imports; - } - - get moduleAugmentations(): readonly Node[] { - if (this._cachedModuleAugmentations !== undefined) return this._cachedModuleAugmentations; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ModuleAugmentations, true); - const moduleAugmentations = this.readNodeIndexArray(offset); - this._cachedModuleAugmentations = moduleAugmentations; - return moduleAugmentations; - } - - get ambientModuleNames(): readonly string[] { - if (this._cachedAmbientModuleNames !== undefined) return this._cachedAmbientModuleNames; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.AmbientModuleNames, true); - const names = this.readStringArray(offset); - this._cachedAmbientModuleNames = names; - return names; - } - - get externalModuleIndicator(): Node | true | undefined { - const nodeIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ExternalModuleIndicator, true); - if (nodeIndex === 0) return undefined; - if (nodeIndex === this.index) return true; - return this.getOrCreateNodeAtIndex(nodeIndex) as Node; - } - - get originalText(): string { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.OriginalText, true); - return this.getString(stringIndex); - } - - get spanMap(): SpanMap | undefined { - if (this._spanMapRead) return this._cachedSpanMap; - this._spanMapRead = true; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.SpanMap, true); - if (offset === NO_STRUCTURED_DATA) return undefined; - const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); - const reader = new MsgpackReader(buf, this._offsetStructuredData + offset); - const count = reader.readArrayHeader(); - const segments = Array(count); - for (let i = 0; i < count; i++) { - const tupleLength = reader.readArrayHeader(); - if (tupleLength !== 5 && tupleLength !== 6) throw new Error("Invalid span map segment"); - const virtualStart = reader.readUint(); - const virtualLength = reader.readUint(); - const originalStart = reader.readUint(); - const originalLength = reader.readUint(); - const kind = reader.readUint(); - const features = tupleLength === 6 ? reader.readUint() as SpanMapFeature : SpanMapFeature.All; - if (kind !== SpanMapKind.Verbatim && kind !== SpanMapKind.Atom && kind !== SpanMapKind.Alias) throw new Error(`Invalid span map kind: ${kind}`); - segments[i] = { - virtualStart, - virtualEnd: virtualStart + virtualLength, - originalStart, - originalEnd: originalStart + originalLength, - kind, - features, - }; - } - return this._cachedSpanMap = new SpanMap(segments); - } - - get supplementalSourceFileNames(): readonly RootedFilePath[] | undefined { - if (this._cachedSupplementalSourceFileNames !== undefined) return this._cachedSupplementalSourceFileNames; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.SupplementalSourceFileNames, true); - if (offset === NO_STRUCTURED_DATA) return undefined; - return this._cachedSupplementalSourceFileNames = this.readFileNameArray(offset); - } - - get canonicalSourceFileName(): RootedFilePath | undefined { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.CanonicalSourceFileName, true); - return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getFileName(stringIndex); - } - - get contentMapper(): string | undefined { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ContentMapper, true); - return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getString(stringIndex); - } - - get virtualFileName(): RootedFilePath | undefined { - const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.VirtualFileName, true); - return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getFileName(stringIndex); - } - - get diagnosticDirectives(): readonly MappedDiagnosticDirective[] | undefined { - if (this._diagnosticDirectivesRead) return this._cachedDiagnosticDirectives; - this._diagnosticDirectivesRead = true; - const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.DiagnosticDirectives, true); - if (offset === NO_STRUCTURED_DATA) return undefined; - const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); - const reader = new MsgpackReader(buf, this._offsetStructuredData + offset); - const count = reader.readArrayHeader(); - const directives = Array(count); - for (let i = 0; i < count; i++) { - if (reader.readArrayHeader() !== 6) throw new Error("Invalid diagnostic directive"); - const originalStart = reader.readUint(); - const originalLength = reader.readUint(); - const virtualStart = reader.readUint(); - const virtualLength = reader.readUint(); - directives[i] = { - originalRange: { pos: originalStart, end: originalStart + originalLength }, - virtualRange: { pos: virtualStart, end: virtualStart + virtualLength }, - policy: reader.readUint(), - unusedCode: reader.readUint(), - }; - } - return this._cachedDiagnosticDirectives = directives; - } - - get isDeclarationFile(): boolean { - return (this.flags & NodeFlags.Ambient) !== 0; - } - - get text(): string { - if (this._cachedText !== undefined) return this._cachedText; - const text = super.text!; - this._cachedText = text; - return text; - } - - // ═══ Line/character position mapping ═══ - - getLineStarts(): readonly number[] { - return this._lineStarts ??= computeLineStarts(this.text ?? ""); - } - - getLineAndCharacterOfPosition(position: number): LineAndCharacter { - const lineStarts = this.getLineStarts(); - const line = computeLineOfPosition(lineStarts, position); - return { line, character: position - lineStarts[line] }; - } - - getPositionOfLineAndCharacter(line: number, character: number): number { - const lineStarts = this.getLineStarts(); - if (line < 0 || line >= lineStarts.length) { - throw new Error(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length}`); - } - return lineStarts[line] + character; - } -} - -/** - * Find the 0-based line number containing the given position via binary search. - * Assumes the first line starts at position 0 and `position` is non-negative. - */ -function computeLineOfPosition(lineStarts: readonly number[], position: number): number { - let low = 0; - let high = lineStarts.length - 1; - while (low <= high) { - const middle = low + ((high - low) >> 1); - const value = lineStarts[middle]; - if (value < position) { - low = middle + 1; - } - else if (value > position) { - high = middle - 1; - } - else { - return middle; - } - } - return low - 1; -} - -/** - * Find a descendant node at a specific position with matching kind and end position. - */ -export function findDescendant(root: Node, pos: number, end: number, kind: SyntaxKind): Node | undefined { - if (root.pos === pos && root.end === end && root.kind === kind) { - return root; - } - - // Search children - let result: Node | undefined; - root.forEachChild(child => { - if (result) return result; // Already found - // Only search in children that could contain our target - if (child.pos <= pos && child.end >= end) { - result = findDescendant(child, pos, end, kind); - } - return undefined; - }); - - return result; -} - -/** - * Parsed components of a node handle. - */ -export interface ParsedNodeHandle { - index: number; - kind: SyntaxKind; - path: PathKey; -} - -/** - * Parse a compiler-produced node handle into its components. - * Handle format: "index.kind.path" where path may contain dots. - */ -export function parseNodeHandleFromCompiler(handle: string): ParsedNodeHandle { - const firstDot = handle.indexOf("."); - if (firstDot === -1) { - throw new Error(`Invalid node handle: ${handle}`); - } - const secondDot = handle.indexOf(".", firstDot + 1); - if (secondDot === -1) { - throw new Error(`Invalid node handle: ${handle}`); - } - - const indexText = handle.slice(0, firstDot); - const kindText = handle.slice(firstDot + 1, secondDot); - const path = handle.slice(secondDot + 1); - const index = Number(indexText); - const kind = Number(kindText); - const key = tryPathKeyFromCanonical(path); - if ( - !Number.isSafeInteger(index) || - index < 0 || - String(index) !== indexText || - !Number.isSafeInteger(kind) || - kind < 0 || - String(kind) !== kindText || - key === undefined - ) { - throw new Error(`Invalid node handle: ${handle}`); - } - return { - index, - kind: kind as SyntaxKind, - path: key, - }; -} - -/** - * Decode binary-encoded AST data into a Node. - * Works for any binary-encoded node, including synthetic nodes - * (e.g. from typeToTypeNode) that don't have a source file. - */ -export function decodeNode(data: Uint8Array): Node { - const sf = new RemoteSourceFile(data, new Wtf8Decoder()); - return sf as unknown as Node; -} - -/** - * Get the unique ID string for a remote node. - * Throws if the node is not a RemoteNode (i.e. not decoded from binary data). - */ -export function getNodeId(node: Node): string { - if (!(node instanceof RemoteNode)) { - throw new Error("getNodeId requires a RemoteNode"); - } - return node.id; -} +import { + computeLineStarts, + type FileReference, + type LineAndCharacter, + type MappedDiagnosticDirective, + type Node, + NodeFlags, + type PathKey, + type RootedFilePath, + SpanMap, + SpanMapFeature, + SpanMapKind, + SyntaxKind, + TokenFlags, +} from "../../ast/index.ts"; +import type { API as AsyncAPI } from "../async/api.ts"; +import { tryPathKeyFromCanonical } from "../path.ts"; +import type { CachedSourceFile } from "../sourceFileCache.ts"; +import type { API as SyncAPI } from "../sync/api.ts"; +import type { TimingCollector } from "../timing.ts"; +import { MsgpackReader } from "./msgpack.ts"; +import { + RemoteNode, + RemoteNodeList, +} from "./node.generated.ts"; +import { + NODE_EXTENDED_DATA_MASK, + readParseOptionsKey, + readSourceFileHash, + readSourceFileNodeId, + type SourceFileInfo, + type TextDecoder, +} from "./node.infrastructure.ts"; +import { + HEADER_OFFSET_EXTENDED_DATA, + HEADER_OFFSET_NODES, + HEADER_OFFSET_STRING_TABLE, + HEADER_OFFSET_STRING_TABLE_OFFSETS, + HEADER_OFFSET_STRUCTURED_DATA, + KIND_NODE_LIST, + NODE_LEN, + NODE_OFFSET_KIND, + NODE_OFFSET_PARENT, +} from "./protocol.ts"; +import { Wtf8Decoder } from "./wtf8.ts"; + +// Re-export everything consumers need from the other two files. +export { RemoteNode, RemoteNodeList } from "./node.generated.ts"; +export { readParseOptionsKey, readSourceFileHash, readSourceFileLease, readSourceFileNodeId, RemoteNodeBase } from "./node.infrastructure.ts"; + +const sourceFileExtendedDataOffsets = { + Text: 0, + FileName: 4, + Path: 8, + LanguageVariant: 12, + ScriptKind: 16, + ReferencedFiles: 20, + TypeReferenceDirectives: 24, + LibReferenceDirectives: 28, + Imports: 32, + ModuleAugmentations: 36, + AmbientModuleNames: 40, + ExternalModuleIndicator: 44, + OriginalText: 48, + SpanMap: 52, + SupplementalSourceFileNames: 56, + CanonicalSourceFileName: 60, + ContentMapper: 64, + VirtualFileName: 68, + DiagnosticDirectives: 72, +} as const; + +for (const [index, offset] of Object.values(sourceFileExtendedDataOffsets).entries()) { + if (offset !== index * Uint32Array.BYTES_PER_ELEMENT) { + throw new Error(`Invalid SourceFile extended data offset ${offset} at index ${index}`); + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// RemoteSourceFile +// ═══════════════════════════════════════════════════════════════════════════ + +const NO_STRUCTURED_DATA = 0xFFFFFFFF; + +export class RemoteSourceFile extends RemoteNode implements SourceFileInfo { + readonly api: AsyncAPI | SyncAPI | undefined; + symbolCache: CachedSourceFile | undefined; + readonly nodes: (RemoteNode | RemoteNodeList)[]; + readonly _offsetNodes: number; + readonly _offsetStringTableOffsets: number; + readonly _offsetStringTable: number; + readonly _offsetExtendedData: number; + readonly _offsetStructuredData: number; + readonly _decoder: TextDecoder; + readonly _timing: TimingCollector | undefined; + private _lineStarts: readonly number[] | undefined; + private _cachedText: string | undefined; + private _cachedReferencedFiles: readonly FileReference[] | undefined; + private _cachedTypeReferenceDirectives: readonly FileReference[] | undefined; + private _cachedLibReferenceDirectives: readonly FileReference[] | undefined; + private _cachedImports: readonly Node[] | undefined; + private _cachedModuleAugmentations: readonly Node[] | undefined; + private _cachedAmbientModuleNames: readonly string[] | undefined; + private _cachedSpanMap: SpanMap | undefined; + private _spanMapRead = false; + private _cachedSupplementalSourceFileNames: readonly RootedFilePath[] | undefined; + private _cachedDiagnosticDirectives: readonly MappedDiagnosticDirective[] | undefined; + private _diagnosticDirectivesRead = false; + + constructor( + data: Uint8Array, + decoder: TextDecoder, + timing?: TimingCollector, + api?: AsyncAPI | SyncAPI | undefined, + ) { + const view = new DataView(data.buffer, data.byteOffset, data.byteLength); + const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); + super(view, 1, undefined!, undefined!, offsetNodes); + this._sourceFile = this; + this._offsetNodes = offsetNodes; + this._offsetStringTableOffsets = view.getUint32(HEADER_OFFSET_STRING_TABLE_OFFSETS, true); + this._offsetStringTable = view.getUint32(HEADER_OFFSET_STRING_TABLE, true); + this._offsetExtendedData = view.getUint32(HEADER_OFFSET_EXTENDED_DATA, true); + this._offsetStructuredData = view.getUint32(HEADER_OFFSET_STRUCTURED_DATA, true); + this._decoder = decoder; + this._timing = timing; + this.api = api; + this.nodes = Array((view.byteLength - offsetNodes) / NODE_LEN); + this.nodes[1] = this; + // Every node slot is materializable on demand except the nil sentinel at + // index 0 and the source-file node at index 1, which is pre-materialized. + timing?.recordSourceFileFetched(Math.max(0, this.nodes.length - 2)); + } + + /** @internal */ + get contentHash(): string { + return readSourceFileHash(this.view); + } + + /** @internal */ + get parseOptionsKey(): string { + return readParseOptionsKey(this.view); + } + + /** @internal */ + get nodeId(): string { + return readSourceFileNodeId(this.view); + } + + readFileReferences(structuredDataOffset: number): readonly FileReference[] { + if (structuredDataOffset === NO_STRUCTURED_DATA) { + return []; + } + const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); + const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); + const count = reader.readArrayHeader(); + const result: FileReference[] = []; + for (let i = 0; i < count; i++) { + reader.readArrayHeader(); // 5-element tuple + const pos = reader.readUint(); + const end = reader.readUint(); + const fileName = reader.readString(); + const resolutionMode = reader.readUint(); + const preserve = reader.readBool(); + result.push({ pos, end, fileName, resolutionMode, preserve }); + } + return result; + } + + readNodeIndexArray(structuredDataOffset: number): readonly Node[] { + if (structuredDataOffset === NO_STRUCTURED_DATA) { + return []; + } + const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); + const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); + const count = reader.readArrayHeader(); + const result: Node[] = []; + for (let i = 0; i < count; i++) { + const nodeIndex = reader.readUint(); + result.push(this.getOrCreateNodeAtIndex(nodeIndex)); + } + return result; + } + + readStringArray(structuredDataOffset: number): readonly string[] { + if (structuredDataOffset === NO_STRUCTURED_DATA) { + return []; + } + const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); + const reader = new MsgpackReader(buf, this._offsetStructuredData + structuredDataOffset); + const count = reader.readArrayHeader(); + const result: string[] = []; + for (let i = 0; i < count; i++) { + result.push(reader.readString()); + } + return result; + } + + /** @internal */ + getOrCreateNodeAtIndex(index: number): Node { + let node = this.nodes[index]; + if (!node) { + // Resolve the real parent so that nodes looked up directly by index (e.g. via + // NodeHandle.resolve) report the correct `parent`, rather than always pointing at + // the source file. The stored parent index can refer to a synthetic NodeList + // container; skip those to mirror normal traversal, where list elements take the + // list's parent. The walk terminates at the source file, which occupies index 1 + // and is already cached. + let parentIndex = this.view.getUint32(this._offsetNodes + index * NODE_LEN + NODE_OFFSET_PARENT, true); + while ( + parentIndex !== index && + this.view.getUint32(this._offsetNodes + parentIndex * NODE_LEN + NODE_OFFSET_KIND, true) === KIND_NODE_LIST + ) { + parentIndex = this.view.getUint32(this._offsetNodes + parentIndex * NODE_LEN + NODE_OFFSET_PARENT, true); + } + const parent = parentIndex === index ? this : this.getOrCreateNodeAtIndex(parentIndex) as RemoteNode; + node = new RemoteNode(this.view, index, parent, this, this._offsetNodes); + this.nodes[index] = node; + this._timing?.recordMaterialization(); + } + return node as Node; + } + + // ═══ SourceFile-specific extended data getters ═══ + + private get extendedDataOffset(): number { + return this._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK); + } + + private getFileName(stringIndex: number): RootedFilePath { + return this.getString(stringIndex) as RootedFilePath; + } + + private getPathKey(stringIndex: number): PathKey { + return this.getString(stringIndex) as PathKey; + } + + private readFileNameArray(structuredDataOffset: number): readonly RootedFilePath[] { + return this.readStringArray(structuredDataOffset) as readonly RootedFilePath[]; + } + + get fileName(): RootedFilePath { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.FileName, true); + return this.getFileName(stringIndex); + } + + get path(): PathKey { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.Path, true); + return this.getPathKey(stringIndex); + } + + get languageVariant(): number { + return this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.LanguageVariant, true); + } + + get scriptKind(): number { + return this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ScriptKind, true); + } + + get referencedFiles(): readonly FileReference[] { + if (this._cachedReferencedFiles !== undefined) return this._cachedReferencedFiles; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ReferencedFiles, true); + const files = this.readFileReferences(offset); + this._cachedReferencedFiles = files; + return files; + } + + get typeReferenceDirectives(): readonly FileReference[] { + if (this._cachedTypeReferenceDirectives !== undefined) return this._cachedTypeReferenceDirectives; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.TypeReferenceDirectives, true); + const directives = this.readFileReferences(offset); + this._cachedTypeReferenceDirectives = directives; + return directives; + } + + get libReferenceDirectives(): readonly FileReference[] { + if (this._cachedLibReferenceDirectives !== undefined) return this._cachedLibReferenceDirectives; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.LibReferenceDirectives, true); + const directives = this.readFileReferences(offset); + this._cachedLibReferenceDirectives = directives; + return directives; + } + + get imports(): readonly Node[] { + if (this._cachedImports !== undefined) return this._cachedImports; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.Imports, true); + const imports = this.readNodeIndexArray(offset); + this._cachedImports = imports; + return imports; + } + + get moduleAugmentations(): readonly Node[] { + if (this._cachedModuleAugmentations !== undefined) return this._cachedModuleAugmentations; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ModuleAugmentations, true); + const moduleAugmentations = this.readNodeIndexArray(offset); + this._cachedModuleAugmentations = moduleAugmentations; + return moduleAugmentations; + } + + get ambientModuleNames(): readonly string[] { + if (this._cachedAmbientModuleNames !== undefined) return this._cachedAmbientModuleNames; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.AmbientModuleNames, true); + const names = this.readStringArray(offset); + this._cachedAmbientModuleNames = names; + return names; + } + + get externalModuleIndicator(): Node | true | undefined { + const nodeIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ExternalModuleIndicator, true); + if (nodeIndex === 0) return undefined; + if (nodeIndex === this.index) return true; + return this.getOrCreateNodeAtIndex(nodeIndex) as Node; + } + + get originalText(): string { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.OriginalText, true); + return this.getString(stringIndex); + } + + get spanMap(): SpanMap | undefined { + if (this._spanMapRead) return this._cachedSpanMap; + this._spanMapRead = true; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.SpanMap, true); + if (offset === NO_STRUCTURED_DATA) return undefined; + const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); + const reader = new MsgpackReader(buf, this._offsetStructuredData + offset); + const count = reader.readArrayHeader(); + const segments = Array(count); + for (let i = 0; i < count; i++) { + const tupleLength = reader.readArrayHeader(); + if (tupleLength !== 5 && tupleLength !== 6) throw new Error("Invalid span map segment"); + const virtualStart = reader.readUint(); + const virtualLength = reader.readUint(); + const originalStart = reader.readUint(); + const originalLength = reader.readUint(); + const kind = reader.readUint(); + const features = tupleLength === 6 ? reader.readUint() as SpanMapFeature : SpanMapFeature.All; + if (kind !== SpanMapKind.Verbatim && kind !== SpanMapKind.Atom && kind !== SpanMapKind.Alias) throw new Error(`Invalid span map kind: ${kind}`); + segments[i] = { + virtualStart, + virtualEnd: virtualStart + virtualLength, + originalStart, + originalEnd: originalStart + originalLength, + kind, + features, + }; + } + return this._cachedSpanMap = new SpanMap(segments); + } + + get supplementalSourceFileNames(): readonly RootedFilePath[] | undefined { + if (this._cachedSupplementalSourceFileNames !== undefined) return this._cachedSupplementalSourceFileNames; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.SupplementalSourceFileNames, true); + if (offset === NO_STRUCTURED_DATA) return undefined; + return this._cachedSupplementalSourceFileNames = this.readFileNameArray(offset); + } + + get canonicalSourceFileName(): RootedFilePath | undefined { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.CanonicalSourceFileName, true); + return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getFileName(stringIndex); + } + + get contentMapper(): string | undefined { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.ContentMapper, true); + return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getString(stringIndex); + } + + get virtualFileName(): RootedFilePath | undefined { + const stringIndex = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.VirtualFileName, true); + return stringIndex === NO_STRUCTURED_DATA ? undefined : this.getFileName(stringIndex); + } + + get diagnosticDirectives(): readonly MappedDiagnosticDirective[] | undefined { + if (this._diagnosticDirectivesRead) return this._cachedDiagnosticDirectives; + this._diagnosticDirectivesRead = true; + const offset = this.view.getUint32(this.extendedDataOffset + sourceFileExtendedDataOffsets.DiagnosticDirectives, true); + if (offset === NO_STRUCTURED_DATA) return undefined; + const buf = new Uint8Array(this.view.buffer, this.view.byteOffset, this.view.byteLength); + const reader = new MsgpackReader(buf, this._offsetStructuredData + offset); + const count = reader.readArrayHeader(); + const directives = Array(count); + for (let i = 0; i < count; i++) { + if (reader.readArrayHeader() !== 6) throw new Error("Invalid diagnostic directive"); + const originalStart = reader.readUint(); + const originalLength = reader.readUint(); + const virtualStart = reader.readUint(); + const virtualLength = reader.readUint(); + directives[i] = { + originalRange: { pos: originalStart, end: originalStart + originalLength }, + virtualRange: { pos: virtualStart, end: virtualStart + virtualLength }, + policy: reader.readUint(), + unusedCode: reader.readUint(), + }; + } + return this._cachedDiagnosticDirectives = directives; + } + + get isDeclarationFile(): boolean { + return (this.flags & NodeFlags.Ambient) !== 0; + } + + get text(): string { + if (this._cachedText !== undefined) return this._cachedText; + const text = super.text!; + this._cachedText = text; + return text; + } + + // ═══ Line/character position mapping ═══ + + getLineStarts(): readonly number[] { + return this._lineStarts ??= computeLineStarts(this.text ?? ""); + } + + getLineAndCharacterOfPosition(position: number): LineAndCharacter { + const lineStarts = this.getLineStarts(); + const line = computeLineOfPosition(lineStarts, position); + return { line, character: position - lineStarts[line] }; + } + + getPositionOfLineAndCharacter(line: number, character: number): number { + const lineStarts = this.getLineStarts(); + if (line < 0 || line >= lineStarts.length) { + throw new Error(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length}`); + } + return lineStarts[line] + character; + } +} + +/** + * Find the 0-based line number containing the given position via binary search. + * Assumes the first line starts at position 0 and `position` is non-negative. + */ +function computeLineOfPosition(lineStarts: readonly number[], position: number): number { + let low = 0; + let high = lineStarts.length - 1; + while (low <= high) { + const middle = low + ((high - low) >> 1); + const value = lineStarts[middle]; + if (value < position) { + low = middle + 1; + } + else if (value > position) { + high = middle - 1; + } + else { + return middle; + } + } + return low - 1; +} + +/** + * Find a descendant node at a specific position with matching kind and end position. + */ +export function findDescendant(root: Node, pos: number, end: number, kind: SyntaxKind): Node | undefined { + if (root.pos === pos && root.end === end && root.kind === kind) { + return root; + } + + // Search children + let result: Node | undefined; + root.forEachChild(child => { + if (result) return result; // Already found + // Only search in children that could contain our target + if (child.pos <= pos && child.end >= end) { + result = findDescendant(child, pos, end, kind); + } + return undefined; + }); + + return result; +} + +/** + * Parsed components of a node handle. + */ +export interface ParsedNodeHandle { + index: number; + kind: SyntaxKind; + path: PathKey; +} + +/** + * Parse a compiler-produced node handle into its components. + * Handle format: "index.kind.path" where path may contain dots. + */ +export function parseNodeHandleFromCompiler(handle: string): ParsedNodeHandle { + const firstDot = handle.indexOf("."); + if (firstDot === -1) { + throw new Error(`Invalid node handle: ${handle}`); + } + const secondDot = handle.indexOf(".", firstDot + 1); + if (secondDot === -1) { + throw new Error(`Invalid node handle: ${handle}`); + } + + const indexText = handle.slice(0, firstDot); + const kindText = handle.slice(firstDot + 1, secondDot); + const path = handle.slice(secondDot + 1); + const index = Number(indexText); + const kind = Number(kindText); + const key = tryPathKeyFromCanonical(path); + if ( + !Number.isSafeInteger(index) || + index < 0 || + String(index) !== indexText || + !Number.isSafeInteger(kind) || + kind < 0 || + String(kind) !== kindText || + key === undefined + ) { + throw new Error(`Invalid node handle: ${handle}`); + } + return { + index, + kind: kind as SyntaxKind, + path: key, + }; +} + +/** + * Decode binary-encoded AST data into a Node. + * Works for any binary-encoded node, including synthetic nodes + * (e.g. from typeToTypeNode) that don't have a source file. + */ +export function decodeNode(data: Uint8Array): Node { + const sf = new RemoteSourceFile(data, new Wtf8Decoder()); + return sf as unknown as Node; +} + +/** + * Get the unique ID string for a remote node. + * Throws if the node is not a RemoteNode (i.e. not decoded from binary data). + */ +export function getNodeId(node: Node): string { + if (!(node instanceof RemoteNode)) { + throw new Error("getNodeId requires a RemoteNode"); + } + return node.id; +} diff --git a/packages/typescript/src/api/node/protocol.generated.ts b/packages/typescript/src/api/node/protocol.generated.ts index 3d8460a6f9031..9031c973f5243 100644 --- a/packages/typescript/src/api/node/protocol.generated.ts +++ b/packages/typescript/src/api/node/protocol.generated.ts @@ -1,243 +1,243 @@ -// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. - -import { SyntaxKind } from "../../ast/index.ts"; - -export const childProperties: Readonly>> = { - [SyntaxKind.QualifiedName]: ["left", "right"], - [SyntaxKind.ComputedPropertyName]: ["expression"], - [SyntaxKind.Decorator]: ["expression"], - [SyntaxKind.IfStatement]: ["expression", "thenStatement", "elseStatement"], - [SyntaxKind.DoStatement]: ["statement", "expression"], - [SyntaxKind.WhileStatement]: ["expression", "statement"], - [SyntaxKind.ForStatement]: ["initializer", "condition", "incrementor", "statement"], - [SyntaxKind.ForInStatement]: ["awaitModifier", "initializer", "expression", "statement"], - [SyntaxKind.ForOfStatement]: ["awaitModifier", "initializer", "expression", "statement"], - [SyntaxKind.BreakStatement]: ["label"], - [SyntaxKind.ContinueStatement]: ["label"], - [SyntaxKind.ReturnStatement]: ["expression"], - [SyntaxKind.WithStatement]: ["expression", "statement"], - [SyntaxKind.SwitchStatement]: ["expression", "caseBlock"], - [SyntaxKind.CaseBlock]: ["clauses"], - [SyntaxKind.CaseClause]: ["expression", "statements"], - [SyntaxKind.DefaultClause]: ["expression", "statements"], - [SyntaxKind.ThrowStatement]: ["expression"], - [SyntaxKind.TryStatement]: ["tryBlock", "catchClause", "finallyBlock"], - [SyntaxKind.CatchClause]: ["variableDeclaration", "block"], - [SyntaxKind.LabeledStatement]: ["label", "statement"], - [SyntaxKind.ExpressionStatement]: ["expression"], - [SyntaxKind.Block]: ["statements"], - [SyntaxKind.VariableStatement]: ["modifiers", "declarationList"], - [SyntaxKind.VariableDeclaration]: ["name", "exclamationToken", "type", "initializer"], - [SyntaxKind.VariableDeclarationList]: ["declarations"], - [SyntaxKind.ObjectBindingPattern]: ["elements"], - [SyntaxKind.ArrayBindingPattern]: ["elements"], - [SyntaxKind.Parameter]: ["modifiers", "dotDotDotToken", "name", "questionToken", "type", "initializer"], - [SyntaxKind.BindingElement]: ["dotDotDotToken", "propertyName", "name", "initializer"], - [SyntaxKind.MissingDeclaration]: ["modifiers"], - [SyntaxKind.FunctionDeclaration]: ["modifiers", "asteriskToken", "name", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.ClassDeclaration]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], - [SyntaxKind.ClassExpression]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], - [SyntaxKind.HeritageClause]: ["types"], - [SyntaxKind.InterfaceDeclaration]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], - [SyntaxKind.TypeAliasDeclaration]: ["modifiers", "name", "typeParameters", "type"], - [SyntaxKind.JSTypeAliasDeclaration]: ["modifiers", "name", "typeParameters", "type"], - [SyntaxKind.EnumMember]: ["name", "initializer"], - [SyntaxKind.EnumDeclaration]: ["modifiers", "name", "members"], - [SyntaxKind.ModuleBlock]: ["statements"], - [SyntaxKind.ImportDeclaration]: ["modifiers", "importClause", "moduleSpecifier", "attributes"], - [SyntaxKind.JSImportDeclaration]: ["modifiers", "importClause", "moduleSpecifier", "attributes"], - [SyntaxKind.ExternalModuleReference]: ["expression"], - [SyntaxKind.NamespaceImport]: ["name"], - [SyntaxKind.NamedImports]: ["elements"], - [SyntaxKind.ExportAssignment]: ["modifiers", "type", "expression"], - [SyntaxKind.NamespaceExportDeclaration]: ["modifiers", "name"], - [SyntaxKind.NamespaceExport]: ["name"], - [SyntaxKind.NamedExports]: ["elements"], - [SyntaxKind.ExportSpecifier]: ["propertyName", "name"], - [SyntaxKind.CallSignature]: ["typeParameters", "parameters", "type"], - [SyntaxKind.ConstructSignature]: ["typeParameters", "parameters", "type"], - [SyntaxKind.Constructor]: ["modifiers", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.GetAccessor]: ["modifiers", "name", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.SetAccessor]: ["modifiers", "name", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.IndexSignature]: ["modifiers", "parameters", "type"], - [SyntaxKind.MethodSignature]: ["modifiers", "name", "postfixToken", "typeParameters", "parameters", "type"], - [SyntaxKind.MethodDeclaration]: ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.PropertySignature]: ["modifiers", "name", "postfixToken", "type", "initializer"], - [SyntaxKind.PropertyDeclaration]: ["modifiers", "name", "postfixToken", "type", "initializer"], - [SyntaxKind.ClassStaticBlockDeclaration]: ["modifiers", "body"], - [SyntaxKind.BinaryExpression]: ["modifiers", "left", "type", "operatorToken", "right"], - [SyntaxKind.PrefixUnaryExpression]: ["operand"], - [SyntaxKind.PostfixUnaryExpression]: ["operand"], - [SyntaxKind.YieldExpression]: ["asteriskToken", "expression"], - [SyntaxKind.ArrowFunction]: ["modifiers", "typeParameters", "parameters", "type", "equalsGreaterThanToken", "body"], - [SyntaxKind.FunctionExpression]: ["modifiers", "asteriskToken", "name", "typeParameters", "parameters", "type", "body"], - [SyntaxKind.AsExpression]: ["expression", "type"], - [SyntaxKind.SatisfiesExpression]: ["expression", "type"], - [SyntaxKind.ConditionalExpression]: ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], - [SyntaxKind.PropertyAccessExpression]: ["expression", "questionDotToken", "name"], - [SyntaxKind.ElementAccessExpression]: ["expression", "questionDotToken", "argumentExpression"], - [SyntaxKind.CallExpression]: ["expression", "questionDotToken", "typeArguments", "arguments"], - [SyntaxKind.NewExpression]: ["expression", "typeArguments", "arguments"], - [SyntaxKind.MetaProperty]: ["name"], - [SyntaxKind.NonNullExpression]: ["expression"], - [SyntaxKind.SpreadElement]: ["expression"], - [SyntaxKind.TemplateExpression]: ["head", "templateSpans"], - [SyntaxKind.TemplateSpan]: ["expression", "literal"], - [SyntaxKind.TaggedTemplateExpression]: ["tag", "questionDotToken", "typeArguments", "template"], - [SyntaxKind.ParenthesizedExpression]: ["expression"], - [SyntaxKind.ArrayLiteralExpression]: ["elements"], - [SyntaxKind.ObjectLiteralExpression]: ["properties"], - [SyntaxKind.SpreadAssignment]: ["expression"], - [SyntaxKind.PropertyAssignment]: ["modifiers", "name", "postfixToken", "type", "initializer"], - [SyntaxKind.ShorthandPropertyAssignment]: ["modifiers", "name", "postfixToken", "type", "equalsToken", "objectAssignmentInitializer"], - [SyntaxKind.DeleteExpression]: ["expression"], - [SyntaxKind.TypeOfExpression]: ["expression"], - [SyntaxKind.VoidExpression]: ["expression"], - [SyntaxKind.AwaitExpression]: ["expression"], - [SyntaxKind.TypeAssertionExpression]: ["type", "expression"], - [SyntaxKind.UnionType]: ["types"], - [SyntaxKind.IntersectionType]: ["types"], - [SyntaxKind.ConditionalType]: ["checkType", "extendsType", "trueType", "falseType"], - [SyntaxKind.TypeOperator]: ["type"], - [SyntaxKind.InferType]: ["typeParameter"], - [SyntaxKind.ArrayType]: ["elementType"], - [SyntaxKind.IndexedAccessType]: ["objectType", "indexType"], - [SyntaxKind.TypeReference]: ["typeName", "typeArguments"], - [SyntaxKind.ExpressionWithTypeArguments]: ["expression", "typeArguments"], - [SyntaxKind.LiteralType]: ["literal"], - [SyntaxKind.TypePredicate]: ["assertsModifier", "parameterName", "type"], - [SyntaxKind.ImportAttribute]: ["name", "value"], - [SyntaxKind.ImportAttributes]: ["attributes"], - [SyntaxKind.TypeQuery]: ["exprName", "typeArguments"], - [SyntaxKind.MappedType]: ["readonlyToken", "typeParameter", "nameType", "questionToken", "type", "members"], - [SyntaxKind.TypeLiteral]: ["members"], - [SyntaxKind.TupleType]: ["elements"], - [SyntaxKind.NamedTupleMember]: ["dotDotDotToken", "name", "questionToken", "type"], - [SyntaxKind.OptionalType]: ["type"], - [SyntaxKind.RestType]: ["type"], - [SyntaxKind.ParenthesizedType]: ["type"], - [SyntaxKind.FunctionType]: ["typeParameters", "parameters", "type"], - [SyntaxKind.ConstructorType]: ["modifiers", "typeParameters", "parameters", "type"], - [SyntaxKind.TemplateLiteralType]: ["head", "templateSpans"], - [SyntaxKind.TemplateLiteralTypeSpan]: ["type", "literal"], - [SyntaxKind.SyntheticExpression]: ["tupleNameSource"], - [SyntaxKind.PartiallyEmittedExpression]: ["expression"], - [SyntaxKind.JsxElement]: ["openingElement", "children", "closingElement"], - [SyntaxKind.JsxAttributes]: ["properties"], - [SyntaxKind.JsxNamespacedName]: ["namespace", "name"], - [SyntaxKind.JsxOpeningElement]: ["tagName", "typeArguments", "attributes"], - [SyntaxKind.JsxSelfClosingElement]: ["tagName", "typeArguments", "attributes"], - [SyntaxKind.JsxFragment]: ["openingFragment", "children", "closingFragment"], - [SyntaxKind.JsxAttribute]: ["name", "initializer"], - [SyntaxKind.JsxSpreadAttribute]: ["expression"], - [SyntaxKind.JsxClosingElement]: ["tagName"], - [SyntaxKind.JsxExpression]: ["dotDotDotToken", "expression"], - [SyntaxKind.SyntaxList]: ["children"], - [SyntaxKind.JSDoc]: ["comment", "tags"], - [SyntaxKind.JSDocTypeExpression]: ["type"], - [SyntaxKind.JSDocNonNullableType]: ["type"], - [SyntaxKind.JSDocNullableType]: ["type"], - [SyntaxKind.JSDocVariadicType]: ["type"], - [SyntaxKind.JSDocOptionalType]: ["type"], - [SyntaxKind.JSDocTypeTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocUnknownTag]: ["tagName", "comment"], - [SyntaxKind.JSDocTemplateTag]: ["tagName", "constraint", "typeParameters", "comment"], - [SyntaxKind.JSDocReturnTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocPublicTag]: ["tagName", "comment"], - [SyntaxKind.JSDocPrivateTag]: ["tagName", "comment"], - [SyntaxKind.JSDocProtectedTag]: ["tagName", "comment"], - [SyntaxKind.JSDocReadonlyTag]: ["tagName", "comment"], - [SyntaxKind.JSDocOverrideTag]: ["tagName", "comment"], - [SyntaxKind.JSDocDeprecatedTag]: ["tagName", "comment"], - [SyntaxKind.JSDocSeeTag]: ["tagName", "nameExpression", "comment"], - [SyntaxKind.JSDocImplementsTag]: ["tagName", "className", "comment"], - [SyntaxKind.JSDocAugmentsTag]: ["tagName", "className", "comment"], - [SyntaxKind.JSDocSatisfiesTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocThrowsTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocThisTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocImportTag]: ["tagName", "importClause", "moduleSpecifier", "attributes", "comment"], - [SyntaxKind.JSDocCallbackTag]: ["tagName", "typeExpression", "name", "comment"], - [SyntaxKind.JSDocOverloadTag]: ["tagName", "typeExpression", "comment"], - [SyntaxKind.JSDocTypedefTag]: ["tagName", "typeExpression", "name", "comment"], - [SyntaxKind.JSDocSignature]: ["typeParameters", "parameters", "type"], - [SyntaxKind.JSDocNameReference]: ["name"], - [SyntaxKind.SourceFile]: ["statements", "endOfFileToken"], - [SyntaxKind.ModuleDeclaration]: ["modifiers", "name", "attributes", "body"], - [SyntaxKind.ImportEqualsDeclaration]: ["modifiers", "name", "moduleReference"], - [SyntaxKind.ExportDeclaration]: ["modifiers", "exportClause", "moduleSpecifier", "attributes"], - [SyntaxKind.ImportType]: ["argument", "attributes", "qualifier", "typeArguments"], - [SyntaxKind.ImportClause]: ["name", "namedBindings"], - [SyntaxKind.ImportSpecifier]: ["propertyName", "name"], - [SyntaxKind.JSDocLink]: ["name"], - [SyntaxKind.JSDocLinkPlain]: ["name"], - [SyntaxKind.JSDocLinkCode]: ["name"], - [SyntaxKind.TypeParameter]: ["modifiers", "name", "constraint", "expression", "defaultType"], - [SyntaxKind.SyntheticReferenceExpression]: ["expression", "thisArg"], - [SyntaxKind.JSDocTypeLiteral]: ["jsdocPropertyTags"], - [SyntaxKind.JSDocParameterTag]: ["tagName", "name", "typeExpression", "comment"], - [SyntaxKind.JSDocPropertyTag]: ["tagName", "name", "typeExpression", "comment"], -}; - -export const singleChildNodePropertyNames: Readonly>> = { - [SyntaxKind.ComputedPropertyName]: "expression", - [SyntaxKind.Decorator]: "expression", - [SyntaxKind.BreakStatement]: "label", - [SyntaxKind.ContinueStatement]: "label", - [SyntaxKind.ReturnStatement]: "expression", - [SyntaxKind.CaseBlock]: "clauses", - [SyntaxKind.ThrowStatement]: "expression", - [SyntaxKind.ExpressionStatement]: "expression", - [SyntaxKind.Block]: "statements", - [SyntaxKind.VariableDeclarationList]: "declarations", - [SyntaxKind.ObjectBindingPattern]: "elements", - [SyntaxKind.ArrayBindingPattern]: "elements", - [SyntaxKind.MissingDeclaration]: "modifiers", - [SyntaxKind.HeritageClause]: "types", - [SyntaxKind.ModuleBlock]: "statements", - [SyntaxKind.ExternalModuleReference]: "expression", - [SyntaxKind.NamespaceImport]: "name", - [SyntaxKind.NamedImports]: "elements", - [SyntaxKind.NamespaceExport]: "name", - [SyntaxKind.NamedExports]: "elements", - [SyntaxKind.PrefixUnaryExpression]: "operand", - [SyntaxKind.PostfixUnaryExpression]: "operand", - [SyntaxKind.MetaProperty]: "name", - [SyntaxKind.NonNullExpression]: "expression", - [SyntaxKind.SpreadElement]: "expression", - [SyntaxKind.ParenthesizedExpression]: "expression", - [SyntaxKind.ArrayLiteralExpression]: "elements", - [SyntaxKind.ObjectLiteralExpression]: "properties", - [SyntaxKind.SpreadAssignment]: "expression", - [SyntaxKind.DeleteExpression]: "expression", - [SyntaxKind.TypeOfExpression]: "expression", - [SyntaxKind.VoidExpression]: "expression", - [SyntaxKind.AwaitExpression]: "expression", - [SyntaxKind.UnionType]: "types", - [SyntaxKind.IntersectionType]: "types", - [SyntaxKind.TypeOperator]: "type", - [SyntaxKind.InferType]: "typeParameter", - [SyntaxKind.ArrayType]: "elementType", - [SyntaxKind.LiteralType]: "literal", - [SyntaxKind.ImportAttributes]: "attributes", - [SyntaxKind.TypeLiteral]: "members", - [SyntaxKind.TupleType]: "elements", - [SyntaxKind.OptionalType]: "type", - [SyntaxKind.RestType]: "type", - [SyntaxKind.ParenthesizedType]: "type", - [SyntaxKind.SyntheticExpression]: "tupleNameSource", - [SyntaxKind.PartiallyEmittedExpression]: "expression", - [SyntaxKind.JsxAttributes]: "properties", - [SyntaxKind.JsxSpreadAttribute]: "expression", - [SyntaxKind.JsxClosingElement]: "tagName", - [SyntaxKind.SyntaxList]: "children", - [SyntaxKind.JSDocTypeExpression]: "type", - [SyntaxKind.JSDocNonNullableType]: "type", - [SyntaxKind.JSDocNullableType]: "type", - [SyntaxKind.JSDocVariadicType]: "type", - [SyntaxKind.JSDocOptionalType]: "type", - [SyntaxKind.JSDocNameReference]: "name", - [SyntaxKind.JSDocLink]: "name", - [SyntaxKind.JSDocLinkPlain]: "name", - [SyntaxKind.JSDocLinkCode]: "name", - [SyntaxKind.JSDocTypeLiteral]: "jsdocPropertyTags", -}; +// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT. + +import { SyntaxKind } from "../../ast/index.ts"; + +export const childProperties: Readonly>> = { + [SyntaxKind.QualifiedName]: ["left", "right"], + [SyntaxKind.ComputedPropertyName]: ["expression"], + [SyntaxKind.Decorator]: ["expression"], + [SyntaxKind.IfStatement]: ["expression", "thenStatement", "elseStatement"], + [SyntaxKind.DoStatement]: ["statement", "expression"], + [SyntaxKind.WhileStatement]: ["expression", "statement"], + [SyntaxKind.ForStatement]: ["initializer", "condition", "incrementor", "statement"], + [SyntaxKind.ForInStatement]: ["awaitModifier", "initializer", "expression", "statement"], + [SyntaxKind.ForOfStatement]: ["awaitModifier", "initializer", "expression", "statement"], + [SyntaxKind.BreakStatement]: ["label"], + [SyntaxKind.ContinueStatement]: ["label"], + [SyntaxKind.ReturnStatement]: ["expression"], + [SyntaxKind.WithStatement]: ["expression", "statement"], + [SyntaxKind.SwitchStatement]: ["expression", "caseBlock"], + [SyntaxKind.CaseBlock]: ["clauses"], + [SyntaxKind.CaseClause]: ["expression", "statements"], + [SyntaxKind.DefaultClause]: ["expression", "statements"], + [SyntaxKind.ThrowStatement]: ["expression"], + [SyntaxKind.TryStatement]: ["tryBlock", "catchClause", "finallyBlock"], + [SyntaxKind.CatchClause]: ["variableDeclaration", "block"], + [SyntaxKind.LabeledStatement]: ["label", "statement"], + [SyntaxKind.ExpressionStatement]: ["expression"], + [SyntaxKind.Block]: ["statements"], + [SyntaxKind.VariableStatement]: ["modifiers", "declarationList"], + [SyntaxKind.VariableDeclaration]: ["name", "exclamationToken", "type", "initializer"], + [SyntaxKind.VariableDeclarationList]: ["declarations"], + [SyntaxKind.ObjectBindingPattern]: ["elements"], + [SyntaxKind.ArrayBindingPattern]: ["elements"], + [SyntaxKind.Parameter]: ["modifiers", "dotDotDotToken", "name", "questionToken", "type", "initializer"], + [SyntaxKind.BindingElement]: ["dotDotDotToken", "propertyName", "name", "initializer"], + [SyntaxKind.MissingDeclaration]: ["modifiers"], + [SyntaxKind.FunctionDeclaration]: ["modifiers", "asteriskToken", "name", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.ClassDeclaration]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], + [SyntaxKind.ClassExpression]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], + [SyntaxKind.HeritageClause]: ["types"], + [SyntaxKind.InterfaceDeclaration]: ["modifiers", "name", "typeParameters", "heritageClauses", "members"], + [SyntaxKind.TypeAliasDeclaration]: ["modifiers", "name", "typeParameters", "type"], + [SyntaxKind.JSTypeAliasDeclaration]: ["modifiers", "name", "typeParameters", "type"], + [SyntaxKind.EnumMember]: ["name", "initializer"], + [SyntaxKind.EnumDeclaration]: ["modifiers", "name", "members"], + [SyntaxKind.ModuleBlock]: ["statements"], + [SyntaxKind.ImportDeclaration]: ["modifiers", "importClause", "moduleSpecifier", "attributes"], + [SyntaxKind.JSImportDeclaration]: ["modifiers", "importClause", "moduleSpecifier", "attributes"], + [SyntaxKind.ExternalModuleReference]: ["expression"], + [SyntaxKind.NamespaceImport]: ["name"], + [SyntaxKind.NamedImports]: ["elements"], + [SyntaxKind.ExportAssignment]: ["modifiers", "type", "expression"], + [SyntaxKind.NamespaceExportDeclaration]: ["modifiers", "name"], + [SyntaxKind.NamespaceExport]: ["name"], + [SyntaxKind.NamedExports]: ["elements"], + [SyntaxKind.ExportSpecifier]: ["propertyName", "name"], + [SyntaxKind.CallSignature]: ["typeParameters", "parameters", "type"], + [SyntaxKind.ConstructSignature]: ["typeParameters", "parameters", "type"], + [SyntaxKind.Constructor]: ["modifiers", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.GetAccessor]: ["modifiers", "name", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.SetAccessor]: ["modifiers", "name", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.IndexSignature]: ["modifiers", "parameters", "type"], + [SyntaxKind.MethodSignature]: ["modifiers", "name", "postfixToken", "typeParameters", "parameters", "type"], + [SyntaxKind.MethodDeclaration]: ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.PropertySignature]: ["modifiers", "name", "postfixToken", "type", "initializer"], + [SyntaxKind.PropertyDeclaration]: ["modifiers", "name", "postfixToken", "type", "initializer"], + [SyntaxKind.ClassStaticBlockDeclaration]: ["modifiers", "body"], + [SyntaxKind.BinaryExpression]: ["modifiers", "left", "type", "operatorToken", "right"], + [SyntaxKind.PrefixUnaryExpression]: ["operand"], + [SyntaxKind.PostfixUnaryExpression]: ["operand"], + [SyntaxKind.YieldExpression]: ["asteriskToken", "expression"], + [SyntaxKind.ArrowFunction]: ["modifiers", "typeParameters", "parameters", "type", "equalsGreaterThanToken", "body"], + [SyntaxKind.FunctionExpression]: ["modifiers", "asteriskToken", "name", "typeParameters", "parameters", "type", "body"], + [SyntaxKind.AsExpression]: ["expression", "type"], + [SyntaxKind.SatisfiesExpression]: ["expression", "type"], + [SyntaxKind.ConditionalExpression]: ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], + [SyntaxKind.PropertyAccessExpression]: ["expression", "questionDotToken", "name"], + [SyntaxKind.ElementAccessExpression]: ["expression", "questionDotToken", "argumentExpression"], + [SyntaxKind.CallExpression]: ["expression", "questionDotToken", "typeArguments", "arguments"], + [SyntaxKind.NewExpression]: ["expression", "typeArguments", "arguments"], + [SyntaxKind.MetaProperty]: ["name"], + [SyntaxKind.NonNullExpression]: ["expression"], + [SyntaxKind.SpreadElement]: ["expression"], + [SyntaxKind.TemplateExpression]: ["head", "templateSpans"], + [SyntaxKind.TemplateSpan]: ["expression", "literal"], + [SyntaxKind.TaggedTemplateExpression]: ["tag", "questionDotToken", "typeArguments", "template"], + [SyntaxKind.ParenthesizedExpression]: ["expression"], + [SyntaxKind.ArrayLiteralExpression]: ["elements"], + [SyntaxKind.ObjectLiteralExpression]: ["properties"], + [SyntaxKind.SpreadAssignment]: ["expression"], + [SyntaxKind.PropertyAssignment]: ["modifiers", "name", "postfixToken", "type", "initializer"], + [SyntaxKind.ShorthandPropertyAssignment]: ["modifiers", "name", "postfixToken", "type", "equalsToken", "objectAssignmentInitializer"], + [SyntaxKind.DeleteExpression]: ["expression"], + [SyntaxKind.TypeOfExpression]: ["expression"], + [SyntaxKind.VoidExpression]: ["expression"], + [SyntaxKind.AwaitExpression]: ["expression"], + [SyntaxKind.TypeAssertionExpression]: ["type", "expression"], + [SyntaxKind.UnionType]: ["types"], + [SyntaxKind.IntersectionType]: ["types"], + [SyntaxKind.ConditionalType]: ["checkType", "extendsType", "trueType", "falseType"], + [SyntaxKind.TypeOperator]: ["type"], + [SyntaxKind.InferType]: ["typeParameter"], + [SyntaxKind.ArrayType]: ["elementType"], + [SyntaxKind.IndexedAccessType]: ["objectType", "indexType"], + [SyntaxKind.TypeReference]: ["typeName", "typeArguments"], + [SyntaxKind.ExpressionWithTypeArguments]: ["expression", "typeArguments"], + [SyntaxKind.LiteralType]: ["literal"], + [SyntaxKind.TypePredicate]: ["assertsModifier", "parameterName", "type"], + [SyntaxKind.ImportAttribute]: ["name", "value"], + [SyntaxKind.ImportAttributes]: ["attributes"], + [SyntaxKind.TypeQuery]: ["exprName", "typeArguments"], + [SyntaxKind.MappedType]: ["readonlyToken", "typeParameter", "nameType", "questionToken", "type", "members"], + [SyntaxKind.TypeLiteral]: ["members"], + [SyntaxKind.TupleType]: ["elements"], + [SyntaxKind.NamedTupleMember]: ["dotDotDotToken", "name", "questionToken", "type"], + [SyntaxKind.OptionalType]: ["type"], + [SyntaxKind.RestType]: ["type"], + [SyntaxKind.ParenthesizedType]: ["type"], + [SyntaxKind.FunctionType]: ["typeParameters", "parameters", "type"], + [SyntaxKind.ConstructorType]: ["modifiers", "typeParameters", "parameters", "type"], + [SyntaxKind.TemplateLiteralType]: ["head", "templateSpans"], + [SyntaxKind.TemplateLiteralTypeSpan]: ["type", "literal"], + [SyntaxKind.SyntheticExpression]: ["tupleNameSource"], + [SyntaxKind.PartiallyEmittedExpression]: ["expression"], + [SyntaxKind.JsxElement]: ["openingElement", "children", "closingElement"], + [SyntaxKind.JsxAttributes]: ["properties"], + [SyntaxKind.JsxNamespacedName]: ["namespace", "name"], + [SyntaxKind.JsxOpeningElement]: ["tagName", "typeArguments", "attributes"], + [SyntaxKind.JsxSelfClosingElement]: ["tagName", "typeArguments", "attributes"], + [SyntaxKind.JsxFragment]: ["openingFragment", "children", "closingFragment"], + [SyntaxKind.JsxAttribute]: ["name", "initializer"], + [SyntaxKind.JsxSpreadAttribute]: ["expression"], + [SyntaxKind.JsxClosingElement]: ["tagName"], + [SyntaxKind.JsxExpression]: ["dotDotDotToken", "expression"], + [SyntaxKind.SyntaxList]: ["children"], + [SyntaxKind.JSDoc]: ["comment", "tags"], + [SyntaxKind.JSDocTypeExpression]: ["type"], + [SyntaxKind.JSDocNonNullableType]: ["type"], + [SyntaxKind.JSDocNullableType]: ["type"], + [SyntaxKind.JSDocVariadicType]: ["type"], + [SyntaxKind.JSDocOptionalType]: ["type"], + [SyntaxKind.JSDocTypeTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocUnknownTag]: ["tagName", "comment"], + [SyntaxKind.JSDocTemplateTag]: ["tagName", "constraint", "typeParameters", "comment"], + [SyntaxKind.JSDocReturnTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocPublicTag]: ["tagName", "comment"], + [SyntaxKind.JSDocPrivateTag]: ["tagName", "comment"], + [SyntaxKind.JSDocProtectedTag]: ["tagName", "comment"], + [SyntaxKind.JSDocReadonlyTag]: ["tagName", "comment"], + [SyntaxKind.JSDocOverrideTag]: ["tagName", "comment"], + [SyntaxKind.JSDocDeprecatedTag]: ["tagName", "comment"], + [SyntaxKind.JSDocSeeTag]: ["tagName", "nameExpression", "comment"], + [SyntaxKind.JSDocImplementsTag]: ["tagName", "className", "comment"], + [SyntaxKind.JSDocAugmentsTag]: ["tagName", "className", "comment"], + [SyntaxKind.JSDocSatisfiesTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocThrowsTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocThisTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocImportTag]: ["tagName", "importClause", "moduleSpecifier", "attributes", "comment"], + [SyntaxKind.JSDocCallbackTag]: ["tagName", "typeExpression", "name", "comment"], + [SyntaxKind.JSDocOverloadTag]: ["tagName", "typeExpression", "comment"], + [SyntaxKind.JSDocTypedefTag]: ["tagName", "typeExpression", "name", "comment"], + [SyntaxKind.JSDocSignature]: ["typeParameters", "parameters", "type"], + [SyntaxKind.JSDocNameReference]: ["name"], + [SyntaxKind.SourceFile]: ["statements", "endOfFileToken"], + [SyntaxKind.ModuleDeclaration]: ["modifiers", "name", "attributes", "body"], + [SyntaxKind.ImportEqualsDeclaration]: ["modifiers", "name", "moduleReference"], + [SyntaxKind.ExportDeclaration]: ["modifiers", "exportClause", "moduleSpecifier", "attributes"], + [SyntaxKind.ImportType]: ["argument", "attributes", "qualifier", "typeArguments"], + [SyntaxKind.ImportClause]: ["name", "namedBindings"], + [SyntaxKind.ImportSpecifier]: ["propertyName", "name"], + [SyntaxKind.JSDocLink]: ["name"], + [SyntaxKind.JSDocLinkPlain]: ["name"], + [SyntaxKind.JSDocLinkCode]: ["name"], + [SyntaxKind.TypeParameter]: ["modifiers", "name", "constraint", "expression", "defaultType"], + [SyntaxKind.SyntheticReferenceExpression]: ["expression", "thisArg"], + [SyntaxKind.JSDocTypeLiteral]: ["jsdocPropertyTags"], + [SyntaxKind.JSDocParameterTag]: ["tagName", "name", "typeExpression", "comment"], + [SyntaxKind.JSDocPropertyTag]: ["tagName", "name", "typeExpression", "comment"], +}; + +export const singleChildNodePropertyNames: Readonly>> = { + [SyntaxKind.ComputedPropertyName]: "expression", + [SyntaxKind.Decorator]: "expression", + [SyntaxKind.BreakStatement]: "label", + [SyntaxKind.ContinueStatement]: "label", + [SyntaxKind.ReturnStatement]: "expression", + [SyntaxKind.CaseBlock]: "clauses", + [SyntaxKind.ThrowStatement]: "expression", + [SyntaxKind.ExpressionStatement]: "expression", + [SyntaxKind.Block]: "statements", + [SyntaxKind.VariableDeclarationList]: "declarations", + [SyntaxKind.ObjectBindingPattern]: "elements", + [SyntaxKind.ArrayBindingPattern]: "elements", + [SyntaxKind.MissingDeclaration]: "modifiers", + [SyntaxKind.HeritageClause]: "types", + [SyntaxKind.ModuleBlock]: "statements", + [SyntaxKind.ExternalModuleReference]: "expression", + [SyntaxKind.NamespaceImport]: "name", + [SyntaxKind.NamedImports]: "elements", + [SyntaxKind.NamespaceExport]: "name", + [SyntaxKind.NamedExports]: "elements", + [SyntaxKind.PrefixUnaryExpression]: "operand", + [SyntaxKind.PostfixUnaryExpression]: "operand", + [SyntaxKind.MetaProperty]: "name", + [SyntaxKind.NonNullExpression]: "expression", + [SyntaxKind.SpreadElement]: "expression", + [SyntaxKind.ParenthesizedExpression]: "expression", + [SyntaxKind.ArrayLiteralExpression]: "elements", + [SyntaxKind.ObjectLiteralExpression]: "properties", + [SyntaxKind.SpreadAssignment]: "expression", + [SyntaxKind.DeleteExpression]: "expression", + [SyntaxKind.TypeOfExpression]: "expression", + [SyntaxKind.VoidExpression]: "expression", + [SyntaxKind.AwaitExpression]: "expression", + [SyntaxKind.UnionType]: "types", + [SyntaxKind.IntersectionType]: "types", + [SyntaxKind.TypeOperator]: "type", + [SyntaxKind.InferType]: "typeParameter", + [SyntaxKind.ArrayType]: "elementType", + [SyntaxKind.LiteralType]: "literal", + [SyntaxKind.ImportAttributes]: "attributes", + [SyntaxKind.TypeLiteral]: "members", + [SyntaxKind.TupleType]: "elements", + [SyntaxKind.OptionalType]: "type", + [SyntaxKind.RestType]: "type", + [SyntaxKind.ParenthesizedType]: "type", + [SyntaxKind.SyntheticExpression]: "tupleNameSource", + [SyntaxKind.PartiallyEmittedExpression]: "expression", + [SyntaxKind.JsxAttributes]: "properties", + [SyntaxKind.JsxSpreadAttribute]: "expression", + [SyntaxKind.JsxClosingElement]: "tagName", + [SyntaxKind.SyntaxList]: "children", + [SyntaxKind.JSDocTypeExpression]: "type", + [SyntaxKind.JSDocNonNullableType]: "type", + [SyntaxKind.JSDocNullableType]: "type", + [SyntaxKind.JSDocVariadicType]: "type", + [SyntaxKind.JSDocOptionalType]: "type", + [SyntaxKind.JSDocNameReference]: "name", + [SyntaxKind.JSDocLink]: "name", + [SyntaxKind.JSDocLinkPlain]: "name", + [SyntaxKind.JSDocLinkCode]: "name", + [SyntaxKind.JSDocTypeLiteral]: "jsdocPropertyTags", +}; diff --git a/packages/typescript/src/api/node/protocol.ts b/packages/typescript/src/api/node/protocol.ts index 9218b00d13e3d..bf01e29560665 100644 --- a/packages/typescript/src/api/node/protocol.ts +++ b/packages/typescript/src/api/node/protocol.ts @@ -1,39 +1,39 @@ -export const PROTOCOL_VERSION = 9; - -export const HEADER_OFFSET_METADATA = 0; -export const HEADER_OFFSET_HASH_LO0 = 4; -export const HEADER_OFFSET_HASH_LO1 = 8; -export const HEADER_OFFSET_HASH_HI0 = 12; -export const HEADER_OFFSET_HASH_HI1 = 16; -export const HEADER_OFFSET_PARSE_OPTIONS = 20; -export const HEADER_OFFSET_STRING_TABLE_OFFSETS = 24; -export const HEADER_OFFSET_STRING_TABLE = 28; -export const HEADER_OFFSET_EXTENDED_DATA = 32; -export const HEADER_OFFSET_STRUCTURED_DATA = 36; -export const HEADER_OFFSET_NODES = 40; -export const HEADER_OFFSET_SOURCE_FILE_ID = 44; -export const HEADER_OFFSET_SOURCE_FILE_LEASE = 52; -export const HEADER_OFFSET_BINDER_DATA = 60; -export const HEADER_SIZE = 64; - -export const NODE_LEN = 28; - -export const NODE_OFFSET_KIND = 0; -export const NODE_OFFSET_POS = 4; -export const NODE_OFFSET_END = 8; -export const NODE_OFFSET_NEXT = 12; -export const NODE_OFFSET_PARENT = 16; -export const NODE_OFFSET_DATA = 20; -export const NODE_OFFSET_FLAGS = 24; - -export const KIND_NODE_LIST = 0xFFFFFFFF; - -export const NODE_DATA_TYPE_CHILDREN = 0x00000000; -export const NODE_DATA_TYPE_STRING = 0x40000000; -export const NODE_DATA_TYPE_EXTENDED = 0x80000000; - -export const NODE_STRING_INDEX_MASK = 0x00FFFFFF; -export const NODE_EXTENDED_DATA_MASK = 0x00FFFFFF; - -// Re-export generated child properties -export { childProperties, singleChildNodePropertyNames } from "./protocol.generated.ts"; +export const PROTOCOL_VERSION = 9; + +export const HEADER_OFFSET_METADATA = 0; +export const HEADER_OFFSET_HASH_LO0 = 4; +export const HEADER_OFFSET_HASH_LO1 = 8; +export const HEADER_OFFSET_HASH_HI0 = 12; +export const HEADER_OFFSET_HASH_HI1 = 16; +export const HEADER_OFFSET_PARSE_OPTIONS = 20; +export const HEADER_OFFSET_STRING_TABLE_OFFSETS = 24; +export const HEADER_OFFSET_STRING_TABLE = 28; +export const HEADER_OFFSET_EXTENDED_DATA = 32; +export const HEADER_OFFSET_STRUCTURED_DATA = 36; +export const HEADER_OFFSET_NODES = 40; +export const HEADER_OFFSET_SOURCE_FILE_ID = 44; +export const HEADER_OFFSET_SOURCE_FILE_LEASE = 52; +export const HEADER_OFFSET_BINDER_DATA = 60; +export const HEADER_SIZE = 64; + +export const NODE_LEN = 28; + +export const NODE_OFFSET_KIND = 0; +export const NODE_OFFSET_POS = 4; +export const NODE_OFFSET_END = 8; +export const NODE_OFFSET_NEXT = 12; +export const NODE_OFFSET_PARENT = 16; +export const NODE_OFFSET_DATA = 20; +export const NODE_OFFSET_FLAGS = 24; + +export const KIND_NODE_LIST = 0xFFFFFFFF; + +export const NODE_DATA_TYPE_CHILDREN = 0x00000000; +export const NODE_DATA_TYPE_STRING = 0x40000000; +export const NODE_DATA_TYPE_EXTENDED = 0x80000000; + +export const NODE_STRING_INDEX_MASK = 0x00FFFFFF; +export const NODE_EXTENDED_DATA_MASK = 0x00FFFFFF; + +// Re-export generated child properties +export { childProperties, singleChildNodePropertyNames } from "./protocol.generated.ts"; diff --git a/packages/typescript/src/api/node/wtf8.ts b/packages/typescript/src/api/node/wtf8.ts index 30321e734b872..0ff3231646b53 100644 --- a/packages/typescript/src/api/node/wtf8.ts +++ b/packages/typescript/src/api/node/wtf8.ts @@ -1,149 +1,149 @@ -import { Buffer } from "node:buffer"; - -const surrogateLeadByte = 0xED; -const surrogateSecondByteMin = 0xA0; -const surrogateSecondByteMax = 0xBF; -const continuationByteMin = 0x80; -const continuationByteMax = 0xBF; -const textEncoder = new TextEncoder(); -const replacementCharacterUtf8 = Buffer.from([0xEF, 0xBF, 0xBD]); -const loneSurrogateRegExp = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/; -const shortStringLength = 64; -type DecodeInput = ArrayBufferView | ArrayBufferLike | null; -interface DecodeOptions { - stream?: boolean | undefined; -} - -function isWtf8Surrogate(bytes: Uint8Array, index: number): boolean { - return index + 2 < bytes.length - && bytes[index] === surrogateLeadByte - && bytes[index + 1] >= surrogateSecondByteMin - && bytes[index + 1] <= surrogateSecondByteMax - && bytes[index + 2] >= continuationByteMin - && bytes[index + 2] <= continuationByteMax; -} - -function getSurrogateCodeUnit(bytes: Uint8Array, index: number): number { - return 0xD000 | ((bytes[index + 1] & 0x3F) << 6) | (bytes[index + 2] & 0x3F); -} - -function hasSurrogateLeadByte(bytes: Uint8Array): boolean { - return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).indexOf(surrogateLeadByte) >= 0; -} - -function toUint8Array(input: Exclude): Uint8Array { - if (input instanceof Uint8Array) { - return input; - } - if (ArrayBuffer.isView(input)) { - return new Uint8Array(input.buffer, input.byteOffset, input.byteLength); - } - return new Uint8Array(input); -} - -export function encodeWtf8(text: string): Uint8Array { - if (text.length > shortStringLength) { - const utf8 = textEncoder.encode(text); - if ( - Buffer.from(utf8.buffer, utf8.byteOffset, utf8.byteLength).indexOf(replacementCharacterUtf8) < 0 - || !loneSurrogateRegExp.test(text) - ) { - return utf8; - } - } - - let byteLength = 0; - for (let i = 0; i < text.length; i++) { - const codeUnit = text.charCodeAt(i); - if (codeUnit < 0x80) { - byteLength++; - } - else if (codeUnit < 0x800) { - byteLength += 2; - } - else if (codeUnit >= 0xD800 && codeUnit <= 0xDBFF && i + 1 < text.length) { - const low = text.charCodeAt(i + 1); - if (low >= 0xDC00 && low <= 0xDFFF) { - byteLength += 4; - i++; - } - else { - byteLength += 3; - } - } - else { - byteLength += 3; - } - } - - const bytes = new Uint8Array(byteLength); - let offset = 0; - for (let i = 0; i < text.length; i++) { - const codeUnit = text.charCodeAt(i); - if (codeUnit < 0x80) { - bytes[offset++] = codeUnit; - } - else if (codeUnit < 0x800) { - bytes[offset++] = 0xC0 | (codeUnit >> 6); - bytes[offset++] = 0x80 | (codeUnit & 0x3F); - } - else if (codeUnit >= 0xD800 && codeUnit <= 0xDBFF && i + 1 < text.length) { - const low = text.charCodeAt(i + 1); - if (low >= 0xDC00 && low <= 0xDFFF) { - const codePoint = 0x10000 + ((codeUnit - 0xD800) << 10) + (low - 0xDC00); - bytes[offset++] = 0xF0 | (codePoint >> 18); - bytes[offset++] = 0x80 | ((codePoint >> 12) & 0x3F); - bytes[offset++] = 0x80 | ((codePoint >> 6) & 0x3F); - bytes[offset++] = 0x80 | (codePoint & 0x3F); - i++; - continue; - } - bytes[offset++] = 0xE0 | (codeUnit >> 12); - bytes[offset++] = 0x80 | ((codeUnit >> 6) & 0x3F); - bytes[offset++] = 0x80 | (codeUnit & 0x3F); - } - else { - bytes[offset++] = 0xE0 | (codeUnit >> 12); - bytes[offset++] = 0x80 | ((codeUnit >> 6) & 0x3F); - bytes[offset++] = 0x80 | (codeUnit & 0x3F); - } - } - return bytes; -} - -export class Wtf8Decoder extends TextDecoder { - override decode(input?: DecodeInput, options?: DecodeOptions): string { - if (input == null) { - return super.decode(undefined, options); - } - - const bytes = toUint8Array(input); - if (!hasSurrogateLeadByte(bytes)) { - return super.decode(bytes, options); - } - - const parts: string[] = []; - let segmentStart = 0; - - for (let i = 0; i < bytes.length; i++) { - if (!isWtf8Surrogate(bytes, i)) { - continue; - } - - if (segmentStart < i) { - parts.push(super.decode(bytes.subarray(segmentStart, i), options)); - } - parts.push(String.fromCharCode(getSurrogateCodeUnit(bytes, i))); - i += 2; - segmentStart = i + 1; - } - - if (segmentStart === 0) { - return super.decode(bytes, options); - } - if (segmentStart < bytes.length) { - parts.push(super.decode(bytes.subarray(segmentStart), options)); - } - return parts.join(""); - } -} +import { Buffer } from "node:buffer"; + +const surrogateLeadByte = 0xED; +const surrogateSecondByteMin = 0xA0; +const surrogateSecondByteMax = 0xBF; +const continuationByteMin = 0x80; +const continuationByteMax = 0xBF; +const textEncoder = new TextEncoder(); +const replacementCharacterUtf8 = Buffer.from([0xEF, 0xBF, 0xBD]); +const loneSurrogateRegExp = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]/; +const shortStringLength = 64; +type DecodeInput = ArrayBufferView | ArrayBufferLike | null; +interface DecodeOptions { + stream?: boolean | undefined; +} + +function isWtf8Surrogate(bytes: Uint8Array, index: number): boolean { + return index + 2 < bytes.length + && bytes[index] === surrogateLeadByte + && bytes[index + 1] >= surrogateSecondByteMin + && bytes[index + 1] <= surrogateSecondByteMax + && bytes[index + 2] >= continuationByteMin + && bytes[index + 2] <= continuationByteMax; +} + +function getSurrogateCodeUnit(bytes: Uint8Array, index: number): number { + return 0xD000 | ((bytes[index + 1] & 0x3F) << 6) | (bytes[index + 2] & 0x3F); +} + +function hasSurrogateLeadByte(bytes: Uint8Array): boolean { + return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).indexOf(surrogateLeadByte) >= 0; +} + +function toUint8Array(input: Exclude): Uint8Array { + if (input instanceof Uint8Array) { + return input; + } + if (ArrayBuffer.isView(input)) { + return new Uint8Array(input.buffer, input.byteOffset, input.byteLength); + } + return new Uint8Array(input); +} + +export function encodeWtf8(text: string): Uint8Array { + if (text.length > shortStringLength) { + const utf8 = textEncoder.encode(text); + if ( + Buffer.from(utf8.buffer, utf8.byteOffset, utf8.byteLength).indexOf(replacementCharacterUtf8) < 0 + || !loneSurrogateRegExp.test(text) + ) { + return utf8; + } + } + + let byteLength = 0; + for (let i = 0; i < text.length; i++) { + const codeUnit = text.charCodeAt(i); + if (codeUnit < 0x80) { + byteLength++; + } + else if (codeUnit < 0x800) { + byteLength += 2; + } + else if (codeUnit >= 0xD800 && codeUnit <= 0xDBFF && i + 1 < text.length) { + const low = text.charCodeAt(i + 1); + if (low >= 0xDC00 && low <= 0xDFFF) { + byteLength += 4; + i++; + } + else { + byteLength += 3; + } + } + else { + byteLength += 3; + } + } + + const bytes = new Uint8Array(byteLength); + let offset = 0; + for (let i = 0; i < text.length; i++) { + const codeUnit = text.charCodeAt(i); + if (codeUnit < 0x80) { + bytes[offset++] = codeUnit; + } + else if (codeUnit < 0x800) { + bytes[offset++] = 0xC0 | (codeUnit >> 6); + bytes[offset++] = 0x80 | (codeUnit & 0x3F); + } + else if (codeUnit >= 0xD800 && codeUnit <= 0xDBFF && i + 1 < text.length) { + const low = text.charCodeAt(i + 1); + if (low >= 0xDC00 && low <= 0xDFFF) { + const codePoint = 0x10000 + ((codeUnit - 0xD800) << 10) + (low - 0xDC00); + bytes[offset++] = 0xF0 | (codePoint >> 18); + bytes[offset++] = 0x80 | ((codePoint >> 12) & 0x3F); + bytes[offset++] = 0x80 | ((codePoint >> 6) & 0x3F); + bytes[offset++] = 0x80 | (codePoint & 0x3F); + i++; + continue; + } + bytes[offset++] = 0xE0 | (codeUnit >> 12); + bytes[offset++] = 0x80 | ((codeUnit >> 6) & 0x3F); + bytes[offset++] = 0x80 | (codeUnit & 0x3F); + } + else { + bytes[offset++] = 0xE0 | (codeUnit >> 12); + bytes[offset++] = 0x80 | ((codeUnit >> 6) & 0x3F); + bytes[offset++] = 0x80 | (codeUnit & 0x3F); + } + } + return bytes; +} + +export class Wtf8Decoder extends TextDecoder { + override decode(input?: DecodeInput, options?: DecodeOptions): string { + if (input == null) { + return super.decode(undefined, options); + } + + const bytes = toUint8Array(input); + if (!hasSurrogateLeadByte(bytes)) { + return super.decode(bytes, options); + } + + const parts: string[] = []; + let segmentStart = 0; + + for (let i = 0; i < bytes.length; i++) { + if (!isWtf8Surrogate(bytes, i)) { + continue; + } + + if (segmentStart < i) { + parts.push(super.decode(bytes.subarray(segmentStart, i), options)); + } + parts.push(String.fromCharCode(getSurrogateCodeUnit(bytes, i))); + i += 2; + segmentStart = i + 1; + } + + if (segmentStart === 0) { + return super.decode(bytes, options); + } + if (segmentStart < bytes.length) { + parts.push(super.decode(bytes.subarray(segmentStart), options)); + } + return parts.join(""); + } +} diff --git a/packages/typescript/src/api/options.ts b/packages/typescript/src/api/options.ts index 2e8954c83a802..85d486b75e1f6 100644 --- a/packages/typescript/src/api/options.ts +++ b/packages/typescript/src/api/options.ts @@ -1,72 +1,72 @@ -/** - * Shared utilities for the TypeScript API client. - */ - -import getExePath from "#getExePath"; -import { existsSync } from "node:fs"; -import { fileURLToPath } from "node:url"; -import type { FileSystemCallbacks } from "./fs.ts"; - -export interface ClientSocketOptions { - /** Path to the Unix domain socket or Windows named pipe for API communication */ - pipe: string; - /** Maximum encoded byte size of each batch response page. Defaults to 300 million bytes. Individual responses can be larger than this size, but this controls where batch pages are cutoff. */ - maxResponseBytesPerPage?: number | undefined; -} - -export interface ClientSpawnOptions { - /** Path to the tsc executable. Defaults to the bundled tsc binary. */ - tsserverPath?: string | undefined; - /** Current working directory */ - cwd?: string | undefined; - /** Host filesystem callbacks. */ - fs?: FileSystemCallbacks | undefined; - /** Whether file names are case-sensitive. Inferred from the client filesystem when omitted. */ - useCaseSensitiveFileNames?: boolean | undefined; - /** Allow trusted projects to execute configured external content mapper processes. */ - runExternalCode?: boolean | undefined; - /** Maximum encoded byte size of each batch response page. Defaults to 300 million bytes. Individual responses can be larger than this size, but this controls where batch pages are cutoff. */ - maxResponseBytesPerPage?: number | undefined; - /** - * When true, collect timing information for each request. The client - * measures round-trip latency and bytes sent/received, and the server - * measures its own per-request processing time; both are combined (along - * with an estimated transport overhead) in the snapshot returned by - * {@link API.getTimingInfo}. - */ - collectTiming?: boolean | undefined; -} - -export type ClientOptions = ClientSocketOptions | ClientSpawnOptions; - -export function isSpawnOptions(options: ClientOptions): options is ClientSpawnOptions { - return !("pipe" in options); -} - -export function resolveExePath(options: ClientSpawnOptions): string { - return options.tsserverPath ?? getExePath(); -} - -export function getAPIProcessArgs(options: ClientSpawnOptions, async: boolean): string[] { - const args = ["--api"]; - if (async) args.push("--async"); - args.push("--cwd", options.cwd ?? process.cwd()); - args.push(`--useCaseSensitiveFileNames=${options.useCaseSensitiveFileNames ?? inferUseCaseSensitiveFileNames()}`); - if (options.runExternalCode) args.push("--runExternalCode"); - if (options.collectTiming) args.push("--timing"); - return args; -} - -function inferUseCaseSensitiveFileNames(): boolean { - if (process.platform === "win32") { - return false; - } - const fileName = fileURLToPath(import.meta.url); - return !existsSync(fileName.replace(/\w/g, char => char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())); -} - -export interface LSPConnectionOptions extends ClientSocketOptions { -} - -export interface APIOptions extends ClientSpawnOptions { -} +/** + * Shared utilities for the TypeScript API client. + */ + +import getExePath from "#getExePath"; +import { existsSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import type { FileSystemCallbacks } from "./fs.ts"; + +export interface ClientSocketOptions { + /** Path to the Unix domain socket or Windows named pipe for API communication */ + pipe: string; + /** Maximum encoded byte size of each batch response page. Defaults to 300 million bytes. Individual responses can be larger than this size, but this controls where batch pages are cutoff. */ + maxResponseBytesPerPage?: number | undefined; +} + +export interface ClientSpawnOptions { + /** Path to the tsc executable. Defaults to the bundled tsc binary. */ + tsserverPath?: string | undefined; + /** Current working directory */ + cwd?: string | undefined; + /** Host filesystem callbacks. */ + fs?: FileSystemCallbacks | undefined; + /** Whether file names are case-sensitive. Inferred from the client filesystem when omitted. */ + useCaseSensitiveFileNames?: boolean | undefined; + /** Allow trusted projects to execute configured external content mapper processes. */ + runExternalCode?: boolean | undefined; + /** Maximum encoded byte size of each batch response page. Defaults to 300 million bytes. Individual responses can be larger than this size, but this controls where batch pages are cutoff. */ + maxResponseBytesPerPage?: number | undefined; + /** + * When true, collect timing information for each request. The client + * measures round-trip latency and bytes sent/received, and the server + * measures its own per-request processing time; both are combined (along + * with an estimated transport overhead) in the snapshot returned by + * {@link API.getTimingInfo}. + */ + collectTiming?: boolean | undefined; +} + +export type ClientOptions = ClientSocketOptions | ClientSpawnOptions; + +export function isSpawnOptions(options: ClientOptions): options is ClientSpawnOptions { + return !("pipe" in options); +} + +export function resolveExePath(options: ClientSpawnOptions): string { + return options.tsserverPath ?? getExePath(); +} + +export function getAPIProcessArgs(options: ClientSpawnOptions, async: boolean): string[] { + const args = ["--api"]; + if (async) args.push("--async"); + args.push("--cwd", options.cwd ?? process.cwd()); + args.push(`--useCaseSensitiveFileNames=${options.useCaseSensitiveFileNames ?? inferUseCaseSensitiveFileNames()}`); + if (options.runExternalCode) args.push("--runExternalCode"); + if (options.collectTiming) args.push("--timing"); + return args; +} + +function inferUseCaseSensitiveFileNames(): boolean { + if (process.platform === "win32") { + return false; + } + const fileName = fileURLToPath(import.meta.url); + return !existsSync(fileName.replace(/\w/g, char => char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())); +} + +export interface LSPConnectionOptions extends ClientSocketOptions { +} + +export interface APIOptions extends ClientSpawnOptions { +} diff --git a/packages/typescript/src/api/path.ts b/packages/typescript/src/api/path.ts index a93656ec38989..02d49cbf0f7e1 100644 --- a/packages/typescript/src/api/path.ts +++ b/packages/typescript/src/api/path.ts @@ -1,982 +1,982 @@ -import { CaseSensitivity } from "#enums/caseSensitivity"; -import type { - PathKey, - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../ast/index.ts"; - -export { CaseSensitivity } from "#enums/caseSensitivity"; - -const CharacterCodesSlash = "/".charCodeAt(0); -const CharacterCodesBackslash = "\\".charCodeAt(0); -const CharacterCodesColon = ":".charCodeAt(0); -const CharacterCodesPercent = "%".charCodeAt(0); -const CharacterCodesCaret = "^".charCodeAt(0); -const CharacterCodes3 = "3".charCodeAt(0); -const CharacterCodesa = "a".charCodeAt(0); -const CharacterCodesz = "z".charCodeAt(0); -const CharacterCodesA = "A".charCodeAt(0); -const CharacterCodesZ = "Z".charCodeAt(0); -const CharacterCodesDot = ".".charCodeAt(0); -const directorySeparator = "/"; -const altDirectorySeparator = "\\"; -const urlSchemeSeparator = "://"; -const backslashRegExp = /\\/g; -// Preserve U+0130 as case-sensitive while avoiding work for common lowercase paths. -const fileNameLowerCaseRegExp = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g; -// check path for these segments: '', '.'. '..' -const relativePathSegmentRegExp = /\/\/|(?:^|\/)\.\.?(?:$|\/)/; - -/** - * Determines whether a charCode corresponds to `/` or `\\`. - */ -function isAnyDirectorySeparator(charCode: number): boolean { - return charCode === CharacterCodesSlash || charCode === CharacterCodesBackslash; -} - -function isVolumeCharacter(charCode: number) { - return (charCode >= CharacterCodesa && charCode <= CharacterCodesz) || - (charCode >= CharacterCodesA && charCode <= CharacterCodesZ); -} - -function getFileUrlVolumeSeparatorEnd(url: string, start: number) { - const ch0 = url.charCodeAt(start); - if (ch0 === CharacterCodesColon) return start + 1; - if (ch0 === CharacterCodesPercent && url.charCodeAt(start + 1) === CharacterCodes3) { - const ch2 = url.charCodeAt(start + 2); - if (ch2 === CharacterCodesa || ch2 === CharacterCodesA) return start + 3; - } - return -1; -} - -/** - * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). - * - * For example: - * ```ts - * getRootLength("a") === 0 // "" - * getRootLength("/") === 1 // "/" - * getRootLength("c:") === 2 // "c:" - * getRootLength("c:d") === 0 // "" - * getRootLength("c:/") === 3 // "c:/" - * getRootLength("c:\\") === 3 // "c:\\" - * getRootLength("//server") === 7 // "//server" - * getRootLength("//server/share") === 8 // "//server/" - * getRootLength("\\\\server") === 7 // "\\\\server" - * getRootLength("\\\\server\\share") === 8 // "\\\\server\\" - * getRootLength("file:///path") === 8 // "file:///" - * getRootLength("file:///c:") === 10 // "file:///c:" - * getRootLength("file:///c:d") === 8 // "file:///" - * getRootLength("file:///c:/path") === 11 // "file:///c:/" - * getRootLength("file://server") === 13 // "file://server" - * getRootLength("file://server/path") === 14 // "file://server/" - * getRootLength("http://server") === 13 // "http://server" - * getRootLength("http://server/path") === 14 // "http://server/" - * getRootLength("^/untitled/ts-nul-authority/Untitled-1") === 2 // "^/" - * ``` - * - * @internal - */ -export function getRootLength(path: string): number { - const rootLength = getEncodedRootLength(path); - return rootLength < 0 ? ~rootLength : rootLength; -} - -/** - * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). - * If the root is part of a URL, the twos-complement of the root length is returned. - */ -function getEncodedRootLength(path: string): number { - if (!path) return 0; - const ch0 = path.charCodeAt(0); - - // POSIX or UNC - if (ch0 === CharacterCodesSlash || ch0 === CharacterCodesBackslash) { - if (path.charCodeAt(1) !== ch0) return 1; // POSIX: "/" (or non-normalized "\") - - const p1 = path.indexOf(ch0 === CharacterCodesSlash ? directorySeparator : altDirectorySeparator, 2); - if (p1 < 0) return path.length; // UNC: "//server" or "\\server" - - return p1 + 1; // UNC: "//server/" or "\\server\" - } - - // Dynamic/virtual compiler file name. - if (ch0 === CharacterCodesCaret && path.charCodeAt(1) === CharacterCodesSlash) { - if (path.startsWith(dynamicURIFileNamePrefix)) { - const schemeEnd = path.indexOf(directorySeparator, dynamicURIFileNamePrefix.length); - if (schemeEnd !== -1) { - const authorityEnd = path.indexOf(directorySeparator, schemeEnd + 1); - if (authorityEnd !== -1) { - return authorityEnd + 1; - } - return ~path.length; - } - } - return 2; - } - - // DOS - if (isVolumeCharacter(ch0) && path.charCodeAt(1) === CharacterCodesColon) { - const ch2 = path.charCodeAt(2); - if (ch2 === CharacterCodesSlash || ch2 === CharacterCodesBackslash) return 3; // DOS: "c:/" or "c:\" - if (path.length === 2) return 2; // DOS: "c:" (but not "c:d") - } - - if (isDynamicFileName(path)) return 2; - - // URL - const schemeEnd = path.indexOf(urlSchemeSeparator); - if (schemeEnd !== -1) { - const authorityStart = schemeEnd + urlSchemeSeparator.length; - const authorityEnd = path.indexOf(directorySeparator, authorityStart); - if (authorityEnd !== -1) { // URL: "file:///", "file://server/", "file://server/path" - // For local "file" URLs, include the leading DOS volume (if present). - // Per https://www.ietf.org/rfc/rfc1738.txt, a host of "" or "localhost" is a - // special case interpreted as "the machine from which the URL is being interpreted". - const scheme = path.slice(0, schemeEnd); - const authority = path.slice(authorityStart, authorityEnd); - if ( - scheme.toLowerCase() === "file" && (authority === "" || authority.toLowerCase() === "localhost") && - isVolumeCharacter(path.charCodeAt(authorityEnd + 1)) - ) { - const volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2); - if (volumeSeparatorEnd !== -1) { - if (path.charCodeAt(volumeSeparatorEnd) === CharacterCodesSlash) { - // URL: "file:///c:/", "file://localhost/c:/", "file:///c%3a/", "file://localhost/c%3a/" - return ~(volumeSeparatorEnd + 1); - } - if (volumeSeparatorEnd === path.length) { - // URL: "file:///c:", "file://localhost/c:", "file:///c$3a", "file://localhost/c%3a" - // but not "file:///c:d" or "file:///c%3ad" - return ~volumeSeparatorEnd; - } - } - } - return ~(authorityEnd + 1); // URL: "file://server/", "http://server/" - } - return ~path.length; // URL: "file://server", "http://server" - } - - // relative - return 0; -} - -export function getPathComponents(path: string): string[] { - return pathComponents(path, getRootLength(path)); -} - -function pathComponents(path: string, rootLength: number) { - const root = path.substring(0, rootLength); - const rest = path.substring(rootLength).split("/"); - if (rest.length && !lastOrUndefined(rest)) rest.pop(); - return [root, ...rest]; -} - -function lastOrUndefined(array: T[]): T | undefined { - return array.length ? array[array.length - 1] : undefined; -} - -/** - * Determines whether a path has a trailing separator (`/` or `\\`). - */ -export function hasTrailingDirectorySeparator(path: string): boolean { - return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1)); -} - -/** - * Removes a trailing directory separator from a path, if it does not already have one. - */ -export function removeTrailingDirectorySeparator(path: string): string { - if (hasTrailingDirectorySeparator(path)) { - return path.substr(0, path.length - 1); - } - return path; -} - -/** - * Adds a trailing directory separator to a path, if it does not already have one. - */ -export function ensureTrailingDirectorySeparator(path: string): string { - if (!hasTrailingDirectorySeparator(path)) { - return path + directorySeparator; - } - return path; -} - -/** - * Normalize path separators, converting `\\` into `/`. - */ -export function normalizeSlashes(path: string): string { - return path.includes("\\") - ? path.replace(backslashRegExp, directorySeparator) - : path; -} - -/** - * Combines paths. If a path is absolute, it replaces any previous path. Relative paths are not simplified. - */ -export function combinePaths(path: string, ...paths: (string | undefined)[]): string { - if (path) path = normalizeSlashes(path); - for (let relativePath of paths) { - if (!relativePath) continue; - relativePath = normalizeSlashes(relativePath); - if (!path || getRootLength(relativePath) !== 0) { - path = relativePath; - } - else { - path = ensureTrailingDirectorySeparator(path) + relativePath; - } - } - return path; -} - -function simpleNormalizePath(path: string): string | undefined { - // Most paths don't require normalization - if (!relativePathSegmentRegExp.test(path)) { - return path; - } - // Some paths only require cleanup of `/./` or leading `./` - let simplified = path.replace(/\/\.\//g, "/"); - if (simplified.startsWith("./")) { - simplified = simplified.slice(2); - } - if (simplified !== path) { - path = simplified; - if (!relativePathSegmentRegExp.test(path)) { - return path; - } - } - return undefined; -} - -/** - * Returns the normalized absolute path, resolving `.` and `..` segments. - */ -export function getNormalizedAbsolutePath(path: string, currentDirectory: string | undefined): string { - let rootLength = getRootLength(path); - if (rootLength === 0 && currentDirectory) { - path = combinePaths(currentDirectory, path); - rootLength = getRootLength(path); - } - else { - // combinePaths normalizes slashes, so not necessary in the other branch - path = normalizeSlashes(path); - } - - const simpleNormalized = simpleNormalizePath(path); - if (simpleNormalized !== undefined) { - return simpleNormalized.length > rootLength ? removeTrailingDirectorySeparator(simpleNormalized) : simpleNormalized; - } - - const length = path.length; - const root = path.substring(0, rootLength); - // `normalized` is only initialized once `path` is determined to be non-normalized - let normalized: string | undefined; - let index = rootLength; - let segmentStart = index; - let normalizedUpTo = index; - let seenNonDotDotSegment = rootLength !== 0; - while (index < length) { - // At beginning of segment - segmentStart = index; - let ch = path.charCodeAt(index); - while (ch === CharacterCodesSlash && index + 1 < length) { - index++; - ch = path.charCodeAt(index); - } - if (index > segmentStart) { - // Seen superfluous separator - normalized ??= path.substring(0, segmentStart - 1); - segmentStart = index; - } - // Past any superfluous separators - let segmentEnd = path.indexOf(directorySeparator, index + 1); - if (segmentEnd === -1) { - segmentEnd = length; - } - const segmentLength = segmentEnd - segmentStart; - if (segmentLength === 1 && path.charCodeAt(index) === CharacterCodesDot) { - // "." segment (skip) - normalized ??= path.substring(0, normalizedUpTo); - } - else if (segmentLength === 2 && path.charCodeAt(index) === CharacterCodesDot && path.charCodeAt(index + 1) === CharacterCodesDot) { - // ".." segment - if (!seenNonDotDotSegment) { - if (normalized !== undefined) { - normalized += normalized.length === rootLength ? ".." : "/.."; - } - else { - normalizedUpTo = index + 2; - } - } - else if (normalized === undefined) { - if (normalizedUpTo - 2 >= 0) { - normalized = path.substring(0, Math.max(rootLength, path.lastIndexOf(directorySeparator, normalizedUpTo - 2))); - } - else { - normalized = path.substring(0, normalizedUpTo); - } - } - else { - const lastSlash = normalized.lastIndexOf(directorySeparator); - if (lastSlash !== -1) { - normalized = normalized.substring(0, Math.max(rootLength, lastSlash)); - } - else { - normalized = root; - } - if (normalized.length === rootLength) { - seenNonDotDotSegment = rootLength !== 0; - } - } - } - else if (normalized !== undefined) { - if (normalized.length !== rootLength) { - normalized += directorySeparator; - } - seenNonDotDotSegment = true; - normalized += path.substring(segmentStart, segmentEnd); - } - else { - seenNonDotDotSegment = true; - normalizedUpTo = segmentEnd; - } - index = segmentEnd + 1; - } - return normalized ?? (length > rootLength ? removeTrailingDirectorySeparator(path) : path); -} - -/** - * Normalizes a path, resolving `.` and `..` segments and converting backslashes to forward slashes. - */ -export function normalizePath(path: string): string { - path = normalizeSlashes(path); - let normalized = simpleNormalizePath(path); - if (normalized !== undefined) { - return normalized; - } - normalized = getNormalizedAbsolutePath(path, ""); - return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized; -} - -/** - * Determines whether a path is an absolute disk path (e.g. starts with `/`, or a DOS path - * like `c:`, `c:\\` or `c:/`). - */ -export function isRootedDiskPath(path: string): boolean { - return getEncodedRootLength(path) > 0; -} - -export function convertToRelativePath( - absoluteOrRelativePath: string, - basePath: string, - getCanonicalFileName: (path: string) => string, -): string { - if (!isRootedDiskPath(absoluteOrRelativePath)) { - return absoluteOrRelativePath; - } - - const fromComponents = getPathComponents(getNormalizedAbsolutePath(basePath, "")); - const toComponents = getPathComponents(getNormalizedAbsolutePath(absoluteOrRelativePath, "")); - let start = 0; - for (; start < fromComponents.length && start < toComponents.length; start++) { - const fromComponent = getCanonicalFileName(fromComponents[start]); - const toComponent = getCanonicalFileName(toComponents[start]); - const equal = start === 0 - ? fromComponent.toLowerCase() === toComponent.toLowerCase() - : fromComponent === toComponent; - if (!equal) { - break; - } - } - - if (start === 0) { - return pathFromComponents(toComponents); - } - - const relative = Array(fromComponents.length - start).fill(".."); - return pathFromComponents(["", ...relative, ...toComponents.slice(start)]); -} - -function pathFromComponents(components: readonly string[]): string { - if (components.length === 0) { - return ""; - } - const root = components[0] && ensureTrailingDirectorySeparator(components[0]); - return root + components.slice(1).join(directorySeparator); -} - -/** - * Returns the canonical key for an already rooted, normalized path under - * caseSensitivity. - */ -export function pathKey(path: RootedPath, caseSensitivity: CaseSensitivity): PathKey { - if (path.startsWith(dynamicURIFileNamePrefix)) { - let canonicalPath: string = path; - if (getRootLength(path) === path.length && !hasTrailingDirectorySeparator(path)) { - canonicalPath += directorySeparator; - } - return canonicalize(canonicalPath, CaseSensitivity.Sensitive) as PathKey; - } - return canonicalize(path, caseSensitivity) as PathKey; -} - -/** - * Validates a canonical path key received from a trusted producer without - * applying case sensitivity again. - */ -export function tryPathKeyFromCanonical(path: string): PathKey | undefined { - return tryRootedPathFromNormalized(path) === undefined ? undefined : path as PathKey; -} - -/** - * Resolves path against currentDirectory and normalizes it. - */ -export function toRootedPath(path: string, currentDirectory: RootedDirectoryPath | undefined): RootedPath { - if (path === "") { - throw new Error("Path must not be empty"); - } - if (hasRootedURLSuffix(path)) { - throw new Error(`Path must not contain a URL query or fragment: ${path}`); - } - if ( - getEncodedRootLength(path) === 0 && - currentDirectory !== undefined && - hasURLRoot(currentDirectory) && - /[?#]/.test(path) - ) { - throw new Error(`Relative URL path must not contain a query or fragment: ${path}`); - } - let normalized = getNormalizedAbsolutePath(path, currentDirectory); - if ( - normalized === "" || - getRootLength(normalized) === 0 || - hasRootedURLSuffix(normalized) - ) { - throw new Error(`Path is not rooted: ${normalized}`); - } - if (getRootLength(normalized) === normalized.length && !hasTrailingDirectorySeparator(normalized)) { - normalized += directorySeparator; - } - return normalized as RootedPath; -} - -/** - * Validates a path that is already rooted and normalized without changing it. - */ -export function rootedPathFromNormalized(path: string): RootedPath { - const result = tryRootedPathFromNormalized(path); - if (result === undefined) { - throw new Error(`Path is not rooted and normalized: ${path}`); - } - return result; -} - -/** - * Attempts to validate a path that is already rooted and normalized without - * changing it. - */ -export function tryRootedPathFromNormalized(path: string): RootedPath | undefined { - if (hasRootedURLSuffix(path)) { - return undefined; - } - const rootLength = getRootLength(path); - if ( - path === "" || - rootLength === 0 || - path.includes("\\") || - hasRelativePathSegment(path, rootLength) || - path.length === rootLength && !hasTrailingDirectorySeparator(path) || - path.length > rootLength && hasTrailingDirectorySeparator(path) - ) { - return undefined; - } - return path as RootedPath; -} - -function hasRootedURLSuffix(path: string): boolean { - if (!hasURLRoot(path)) { - return false; - } - const schemeEnd = path.indexOf(urlSchemeSeparator); - const suffixStart = path.search(/[?#]/); - return suffixStart >= schemeEnd + urlSchemeSeparator.length; -} - -function hasURLRoot(path: string): boolean { - return getEncodedRootLength(path) < 0 && path.includes(urlSchemeSeparator); -} - -function hasRelativePathSegment(path: string, start: number): boolean { - if (start === path.length) { - return false; - } - let segmentStart = start; - for (let index = start; index <= path.length; index++) { - if (index !== path.length && path.charCodeAt(index) !== CharacterCodesSlash) { - continue; - } - const segmentLength = index - segmentStart; - if ( - segmentLength === 0 || - segmentLength === 1 && path.charCodeAt(segmentStart) === CharacterCodesDot || - segmentLength === 2 && - path.charCodeAt(segmentStart) === CharacterCodesDot && - path.charCodeAt(segmentStart + 1) === CharacterCodesDot - ) { - return true; - } - segmentStart = index + 1; - } - return false; -} - -/** - * Resolves fileName against currentDirectory, normalizes it, and gives it file - * intent. - */ -export function toRootedFilePath(fileName: string, currentDirectory: RootedDirectoryPath | undefined): RootedFilePath { - return toRootedPath(fileName, currentDirectory) as RootedFilePath; -} - -/** - * Resolves directory against currentDirectory, normalizes it, and gives it - * directory intent. - */ -export function toRootedDirectoryPath(directory: string, currentDirectory: RootedDirectoryPath | undefined): RootedDirectoryPath { - return toRootedPath(directory, currentDirectory) as RootedDirectoryPath; -} - -/** - * Gives a RootedPath file intent without changing it. - */ -export function rootedFilePathFromPath(path: RootedPath): RootedFilePath { - return path as RootedFilePath; -} - -/** - * Gives a RootedPath directory intent without changing it. - */ -export function rootedDirectoryPathFromPath(path: RootedPath): RootedDirectoryPath { - return path as RootedDirectoryPath; -} - -/** - * Applies caseSensitivity to text used for path comparison or keys. - */ -export function canonicalize(text: string, caseSensitivity: CaseSensitivity): string { - return isCaseSensitive(caseSensitivity) ? text : toFileNameLowerCase(text); -} - -export function isCaseSensitive(caseSensitivity: CaseSensitivity): boolean { - return caseSensitivity === CaseSensitivity.Sensitive; -} - -export function isCaseInsensitive(caseSensitivity: CaseSensitivity): boolean { - return caseSensitivity === CaseSensitivity.Insensitive; -} - -function toLowerCasePerCodePoint(text: string): string { - let result = ""; - for (const char of text) { - result += char.toLowerCase(); - } - return result; -} - -function toFileNameLowerCase(fileName: string): string { - return fileNameLowerCaseRegExp.test(fileName) - ? fileName.replace(fileNameLowerCaseRegExp, toLowerCasePerCodePoint) - : fileName; -} - -const bundledScheme = "bundled:///"; -const dynamicURIFileNamePrefix = "^/~ts-uri~/"; -const dynamicURIPathSegmentEscapePrefix = "~ts-uri-escape~"; -const dynamicURIModuleSpecifierEscapePrefix = "~ts-uri-spec~"; -const dynamicURINoPathEscapePrefix = "~ts-uri-no-path~"; -const dynamicURIPathSegmentEscapeRegExp = /(?:^|\/)(?:\.{1,2}(?:\/|$)|~ts-uri-escape~|~ts-uri-spec~|~ts-uri-no-path~)/; - -/** - * Returns true if the path refers to a bundled library file. - */ -export function isBundled(path: string): boolean { - return path.startsWith(bundledScheme); -} - -/** - * Returns true if the file name represents a dynamic/virtual file - * that doesn't exist on disk (e.g., untitled files with paths like "^/untitled/..."). - */ -export function isDynamicFileName(fileName: string): boolean { - return fileName.startsWith("^/"); -} - -/** - * Splits a Windows volume (e.g., "c:") from the rest of the path. - * Returns [volume, rest, ok] where ok is true if a volume was found. - */ -export function splitVolumePath(path: string): [volume: string, rest: string, ok: boolean] { - if (path.length >= 2 && isVolumeCharacter(path.charCodeAt(0)) && path.charCodeAt(1) === CharacterCodesColon) { - return [path.substring(0, 2).toLowerCase(), path.substring(2), true]; - } - return ["", path, false]; -} - -function splitVolumePathPreservingCase(path: string): [volume: string, rest: string, ok: boolean] { - if (path.length >= 2 && isVolumeCharacter(path.charCodeAt(0)) && path.charCodeAt(1) === CharacterCodesColon) { - return [path.substring(0, 2), path.substring(2), true]; - } - return ["", path, false]; -} - -// Characters that need extra escaping in URI path segments -// https://github.com/microsoft/vscode-uri/blob/edfdccd976efaf4bb8fdeca87e97c47257721729/src/uri.ts#L455 -const extraEscapeChars: Record = { - ":": "%3A", - "/": "%2F", - "?": "%3F", - "#": "%23", - "[": "%5B", - "]": "%5D", - "@": "%40", - "!": "%21", - "$": "%24", - "&": "%26", - "'": "%27", - "(": "%28", - ")": "%29", - "*": "%2A", - "+": "%2B", - ",": "%2C", - ";": "%3B", - "=": "%3D", - " ": "%20", -}; - -function extraEscape(s: string): string { - let result = s; - for (const [char, escape] of Object.entries(extraEscapeChars)) { - result = result.replaceAll(char, escape); - } - return result; -} - -/** - * Converts a file name to a document URI. - * - * @example - * fileNameToDocumentURI("/path/to/file.ts") === "file:///path/to/file.ts" - * fileNameToDocumentURI("c:/path/to/file.ts") === "file:///c%3A/path/to/file.ts" - * fileNameToDocumentURI("^/untitled/ts-nul-authority/Untitled-1") === "untitled:Untitled-1" - * fileNameToDocumentURI("^/vscode-vfs/github/microsoft/TypeScript/file.ts") === "vscode-vfs://github/microsoft/TypeScript/file.ts" - */ -export function fileNameToDocumentURI(fileName: string): string { - // Bundled files are returned as-is - if (isBundled(fileName)) { - return fileName; - } - - // Dynamic/virtual files (untitled, vscode-vfs, etc.) need special handling - if (isDynamicFileName(fileName)) { - const encoded = fileName.startsWith(dynamicURIFileNamePrefix); - const withoutPrefix = fileName.substring(encoded ? dynamicURIFileNamePrefix.length : 2); - const firstSlash = withoutPrefix.indexOf("/"); - if (firstSlash === -1) { - throw new Error("invalid file name: " + fileName); - } - const scheme = withoutPrefix.substring(0, firstSlash); - const rest = withoutPrefix.substring(firstSlash + 1); - - const secondSlash = rest.indexOf("/"); - if (secondSlash === -1) { - throw new Error("invalid file name: " + fileName); - } - const encodedAuthority = rest.substring(0, secondSlash); - const hasAuthority = encodedAuthority !== "ts-nul-authority"; - const authority = encoded ? decodeDynamicURIPathSegment(encodedAuthority) : encodedAuthority; - const encodedPath = rest.substring(secondSlash + 1); - if (encoded && hasAuthority) { - const suffix = decodeDynamicURINoPath(encodedPath); - if (suffix !== undefined) { - return scheme + "://" + authority + suffix; - } - } - const path = encoded ? decodeDynamicURIPath(encodedPath) : encodedPath; - - // ts-nul-authority is a placeholder for URIs without an authority - if (!hasAuthority) { - return scheme + ":" + path; - } - return scheme + "://" + authority + "/" + path; - } - - // Regular file path - convert to file:// URI - let [volume, rest] = splitVolumePath(fileName); - if (volume !== "") { - volume = "/" + extraEscape(volume); - } - - // Remove leading // for UNC paths (already handled by file://) - if (rest.startsWith("//")) { - rest = rest.substring(2); - } - - const parts = rest.split("/"); - const encodedParts = parts.map(part => extraEscape(encodeURIComponent(part))); - - return "file://" + volume + encodedParts.join("/"); -} - -/** - * Converts a document URI to a file name. - * - * @example - * documentURIToFileName("file:///path/to/file.ts") === "/path/to/file.ts" - * documentURIToFileName("file:///c%3A/path/to/file.ts") === "c:/path/to/file.ts" - * documentURIToFileName("untitled:Untitled-1") === "^/untitled/ts-nul-authority/Untitled-1" - * documentURIToFileName("vscode-vfs://github/microsoft/TypeScript/file.ts") === "^/vscode-vfs/github/microsoft/TypeScript/file.ts" - */ -export function documentURIToFileName(uri: string): string { - // Bundled files are returned as-is - if (isBundled(uri)) { - return uri; - } - - // Handle file:// URIs - if (uri.startsWith("file://")) { - let parsed: URL; - try { - parsed = new URL(uri); - } - catch { - throw new Error("invalid file URI: " + uri); - } - - const path = decodeURIComponent(parsed.pathname); - - // UNC path: file://server/share/... - if (parsed.host !== "") { - return "//" + parsed.host + path; - } - - // Local file - fix Windows path by removing leading slash before volume - if (path.length >= 3 && path.charCodeAt(0) === CharacterCodesSlash) { - const [volume, rest, ok] = splitVolumePathPreservingCase(path.substring(1)); - if (ok) { - return volume + rest; - } - } - return path; - } - - // Leave all other URIs escaped so we can round-trip them. - // Convert to dynamic file name format: ^/scheme/authority/path - - const colonIndex = uri.indexOf(":"); - if (colonIndex === -1) { - throw new Error("invalid URI: " + uri); - } - - const scheme = uri.substring(0, colonIndex); - let path = uri.substring(colonIndex + 1); - let suffix = ""; - const suffixStart = path.search(/[?#]/); - if (suffixStart !== -1) { - suffix = path.substring(suffixStart); - path = path.substring(0, suffixStart); - } - - let authority = "ts-nul-authority"; - let hasAuthority = false; - let hasPath = true; - if (path.startsWith("//")) { - hasAuthority = true; - const rest = path.substring(2); - const slashIndex = rest.indexOf("/"); - if (slashIndex === -1) { - authority = rest; - path = ""; - hasPath = false; - } - else { - authority = rest.substring(0, slashIndex); - path = rest.substring(slashIndex + 1); - } - } - - let encodedAuthority = authority; - if (hasAuthority) { - encodedAuthority = authority === "ts-nul-authority" - ? forceEncodeDynamicURIPathSegment(authority, false) - : encodeDynamicURIPath(authority); - } - const encodedPath = hasPath - ? encodeDynamicURIPathWithSuffix(path, suffix) - : encodeDynamicURINoPath(suffix); - return dynamicURIFileNamePrefix + scheme + "/" + encodedAuthority + "/" + encodedPath; -} - -function encodeDynamicURIPath(path: string, preserveFinalExtension = true): string { - if (!dynamicURIPathNeedsEncoding(path)) { - if (!isRootedDiskPath(path)) { - return path; - } - } - const segments = path.split("/"); - for (let i = 0; i < segments.length; i++) { - segments[i] = encodeDynamicURIPathSegment(segments[i], preserveFinalExtension && i === segments.length - 1); - } - if (isRootedDiskPath(segments.join("/"))) { - segments[0] = forceEncodeDynamicURIPathSegment(segments[0], segments.length === 1 && preserveFinalExtension); - } - return segments.join("/"); -} - -function encodeDynamicURIPathWithSuffix(path: string, suffix: string): string { - if (suffix === "") { - return encodeDynamicURIPath(path); - } - const slash = path.lastIndexOf("/"); - const before = slash === -1 ? "" : encodeDynamicURIPath(path.substring(0, slash), false) + "/"; - return before + forceEncodeDynamicURIPathSegmentWithSuffix(path.substring(slash + 1), suffix); -} - -function dynamicURIPathNeedsEncoding(path: string): boolean { - return path === "" || - path.startsWith("/") || - path.endsWith("/") || - path.includes("//") || - path.includes("\\") || - dynamicURIPathSegmentEscapeRegExp.test(path); -} - -function dynamicURIPathSegmentNeedsEncoding(segment: string): boolean { - return segment === "" || - segment === "." || - segment === ".." || - segment.startsWith(dynamicURIPathSegmentEscapePrefix) || - segment.startsWith(dynamicURIModuleSpecifierEscapePrefix) || - segment.startsWith(dynamicURINoPathEscapePrefix) || - segment.includes("\\"); -} - -function encodeDynamicURIPathSegment(segment: string, preserveExtension: boolean): string { - if (dynamicURIPathSegmentNeedsEncoding(segment)) { - return forceEncodeDynamicURIPathSegment(segment, preserveExtension); - } - return segment; -} - -function forceEncodeDynamicURIPathSegment(segment: string, preserveExtension: boolean): string { - let extension = ""; - if (preserveExtension && segment !== "." && segment !== "..") { - [segment, extension] = splitDynamicURIFileExtension(segment); - } - let hex = ""; - const encoded = encodeURIComponent(segment); - for (let i = 0; i < encoded.length; i++) { - if (encoded.charCodeAt(i) === CharacterCodesPercent) { - hex += encoded.slice(i + 1, i + 3).toLowerCase(); - i += 2; - } - else { - hex += encoded.charCodeAt(i).toString(16).padStart(2, "0"); - } - } - return dynamicURIPathSegmentEscapePrefix + hex + "~" + extension; -} - -function forceEncodeDynamicURIPathSegmentWithSuffix(segment: string, suffix: string): string { - const [base, extension] = splitDynamicURIFileExtension(segment); - return forceEncodeDynamicURIPathSegment(base + "\0" + suffix, false) + extension; -} - -function splitDynamicURIFileExtension(segment: string): [base: string, extension: string] { - const extension = getDynamicURIFileExtension(segment); - return extension === "" - ? [segment, extension] - : [segment.substring(0, segment.length - extension.length), extension]; -} - -function getDynamicURIFileExtension(segment: string): string { - const baseStart = segment.lastIndexOf("\\") + 1; - for (const extension of [".d.ts", ".d.mts", ".d.cts"]) { - if (segment.endsWith(extension) && segment.length - extension.length >= baseStart) { - return extension; - } - } - if (segment.endsWith(".ts")) { - const declaration = segment.indexOf(".d.", baseStart); - if (declaration !== -1) { - return segment.substring(declaration); - } - } - const dot = segment.lastIndexOf("."); - return dot > segment.lastIndexOf("\\") ? segment.substring(dot) : ""; -} - -function decodeDynamicURIPath(path: string): string { - if (!path.includes(dynamicURIPathSegmentEscapePrefix)) { - return path; - } - return path.split("/").map(decodeDynamicURIPathSegment).join("/"); -} - -function decodeDynamicURIPathSegment(segment: string): string { - if (!segment.startsWith(dynamicURIPathSegmentEscapePrefix)) { - return segment; - } - - const separator = segment.indexOf("~", dynamicURIPathSegmentEscapePrefix.length); - if (separator === -1) { - return segment; - } - const encoded = segment.slice(dynamicURIPathSegmentEscapePrefix.length, separator); - const extension = segment.slice(separator + 1); - if (encoded.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(encoded)) { - return segment; - } - try { - const decoded = decodeURIComponent(encoded.replace(/../g, value => `%${value}`)); - const suffix = decoded.indexOf("\0"); - return suffix === -1 - ? decoded + extension - : decoded.substring(0, suffix) + extension + decoded.substring(suffix + 1); - } - catch { - return segment; - } -} - -function encodeDynamicURINoPath(suffix: string): string { - let hex = ""; - const encoded = encodeURIComponent(suffix); - for (let i = 0; i < encoded.length; i++) { - if (encoded.charCodeAt(i) === CharacterCodesPercent) { - hex += encoded.substring(i + 1, i + 3).toLowerCase(); - i += 2; - } - else { - hex += encoded.charCodeAt(i).toString(16).padStart(2, "0"); - } - } - return dynamicURINoPathEscapePrefix + hex + "~"; -} - -function decodeDynamicURINoPath(path: string): string | undefined { - if (!path.startsWith(dynamicURINoPathEscapePrefix) || !path.endsWith("~")) { - return undefined; - } - const encoded = path.substring(dynamicURINoPathEscapePrefix.length, path.length - 1); - if (encoded.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(encoded)) { - return undefined; - } - try { - return decodeURIComponent(encoded.replace(/../g, value => `%${value}`)); - } - catch { - return undefined; - } -} +import { CaseSensitivity } from "#enums/caseSensitivity"; +import type { + PathKey, + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../ast/index.ts"; + +export { CaseSensitivity } from "#enums/caseSensitivity"; + +const CharacterCodesSlash = "/".charCodeAt(0); +const CharacterCodesBackslash = "\\".charCodeAt(0); +const CharacterCodesColon = ":".charCodeAt(0); +const CharacterCodesPercent = "%".charCodeAt(0); +const CharacterCodesCaret = "^".charCodeAt(0); +const CharacterCodes3 = "3".charCodeAt(0); +const CharacterCodesa = "a".charCodeAt(0); +const CharacterCodesz = "z".charCodeAt(0); +const CharacterCodesA = "A".charCodeAt(0); +const CharacterCodesZ = "Z".charCodeAt(0); +const CharacterCodesDot = ".".charCodeAt(0); +const directorySeparator = "/"; +const altDirectorySeparator = "\\"; +const urlSchemeSeparator = "://"; +const backslashRegExp = /\\/g; +// Preserve U+0130 as case-sensitive while avoiding work for common lowercase paths. +const fileNameLowerCaseRegExp = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g; +// check path for these segments: '', '.'. '..' +const relativePathSegmentRegExp = /\/\/|(?:^|\/)\.\.?(?:$|\/)/; + +/** + * Determines whether a charCode corresponds to `/` or `\\`. + */ +function isAnyDirectorySeparator(charCode: number): boolean { + return charCode === CharacterCodesSlash || charCode === CharacterCodesBackslash; +} + +function isVolumeCharacter(charCode: number) { + return (charCode >= CharacterCodesa && charCode <= CharacterCodesz) || + (charCode >= CharacterCodesA && charCode <= CharacterCodesZ); +} + +function getFileUrlVolumeSeparatorEnd(url: string, start: number) { + const ch0 = url.charCodeAt(start); + if (ch0 === CharacterCodesColon) return start + 1; + if (ch0 === CharacterCodesPercent && url.charCodeAt(start + 1) === CharacterCodes3) { + const ch2 = url.charCodeAt(start + 2); + if (ch2 === CharacterCodesa || ch2 === CharacterCodesA) return start + 3; + } + return -1; +} + +/** + * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). + * + * For example: + * ```ts + * getRootLength("a") === 0 // "" + * getRootLength("/") === 1 // "/" + * getRootLength("c:") === 2 // "c:" + * getRootLength("c:d") === 0 // "" + * getRootLength("c:/") === 3 // "c:/" + * getRootLength("c:\\") === 3 // "c:\\" + * getRootLength("//server") === 7 // "//server" + * getRootLength("//server/share") === 8 // "//server/" + * getRootLength("\\\\server") === 7 // "\\\\server" + * getRootLength("\\\\server\\share") === 8 // "\\\\server\\" + * getRootLength("file:///path") === 8 // "file:///" + * getRootLength("file:///c:") === 10 // "file:///c:" + * getRootLength("file:///c:d") === 8 // "file:///" + * getRootLength("file:///c:/path") === 11 // "file:///c:/" + * getRootLength("file://server") === 13 // "file://server" + * getRootLength("file://server/path") === 14 // "file://server/" + * getRootLength("http://server") === 13 // "http://server" + * getRootLength("http://server/path") === 14 // "http://server/" + * getRootLength("^/untitled/ts-nul-authority/Untitled-1") === 2 // "^/" + * ``` + * + * @internal + */ +export function getRootLength(path: string): number { + const rootLength = getEncodedRootLength(path); + return rootLength < 0 ? ~rootLength : rootLength; +} + +/** + * Returns length of the root part of a path or URL (i.e. length of "/", "x:/", "//server/share/, file:///user/files"). + * If the root is part of a URL, the twos-complement of the root length is returned. + */ +function getEncodedRootLength(path: string): number { + if (!path) return 0; + const ch0 = path.charCodeAt(0); + + // POSIX or UNC + if (ch0 === CharacterCodesSlash || ch0 === CharacterCodesBackslash) { + if (path.charCodeAt(1) !== ch0) return 1; // POSIX: "/" (or non-normalized "\") + + const p1 = path.indexOf(ch0 === CharacterCodesSlash ? directorySeparator : altDirectorySeparator, 2); + if (p1 < 0) return path.length; // UNC: "//server" or "\\server" + + return p1 + 1; // UNC: "//server/" or "\\server\" + } + + // Dynamic/virtual compiler file name. + if (ch0 === CharacterCodesCaret && path.charCodeAt(1) === CharacterCodesSlash) { + if (path.startsWith(dynamicURIFileNamePrefix)) { + const schemeEnd = path.indexOf(directorySeparator, dynamicURIFileNamePrefix.length); + if (schemeEnd !== -1) { + const authorityEnd = path.indexOf(directorySeparator, schemeEnd + 1); + if (authorityEnd !== -1) { + return authorityEnd + 1; + } + return ~path.length; + } + } + return 2; + } + + // DOS + if (isVolumeCharacter(ch0) && path.charCodeAt(1) === CharacterCodesColon) { + const ch2 = path.charCodeAt(2); + if (ch2 === CharacterCodesSlash || ch2 === CharacterCodesBackslash) return 3; // DOS: "c:/" or "c:\" + if (path.length === 2) return 2; // DOS: "c:" (but not "c:d") + } + + if (isDynamicFileName(path)) return 2; + + // URL + const schemeEnd = path.indexOf(urlSchemeSeparator); + if (schemeEnd !== -1) { + const authorityStart = schemeEnd + urlSchemeSeparator.length; + const authorityEnd = path.indexOf(directorySeparator, authorityStart); + if (authorityEnd !== -1) { // URL: "file:///", "file://server/", "file://server/path" + // For local "file" URLs, include the leading DOS volume (if present). + // Per https://www.ietf.org/rfc/rfc1738.txt, a host of "" or "localhost" is a + // special case interpreted as "the machine from which the URL is being interpreted". + const scheme = path.slice(0, schemeEnd); + const authority = path.slice(authorityStart, authorityEnd); + if ( + scheme.toLowerCase() === "file" && (authority === "" || authority.toLowerCase() === "localhost") && + isVolumeCharacter(path.charCodeAt(authorityEnd + 1)) + ) { + const volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2); + if (volumeSeparatorEnd !== -1) { + if (path.charCodeAt(volumeSeparatorEnd) === CharacterCodesSlash) { + // URL: "file:///c:/", "file://localhost/c:/", "file:///c%3a/", "file://localhost/c%3a/" + return ~(volumeSeparatorEnd + 1); + } + if (volumeSeparatorEnd === path.length) { + // URL: "file:///c:", "file://localhost/c:", "file:///c$3a", "file://localhost/c%3a" + // but not "file:///c:d" or "file:///c%3ad" + return ~volumeSeparatorEnd; + } + } + } + return ~(authorityEnd + 1); // URL: "file://server/", "http://server/" + } + return ~path.length; // URL: "file://server", "http://server" + } + + // relative + return 0; +} + +export function getPathComponents(path: string): string[] { + return pathComponents(path, getRootLength(path)); +} + +function pathComponents(path: string, rootLength: number) { + const root = path.substring(0, rootLength); + const rest = path.substring(rootLength).split("/"); + if (rest.length && !lastOrUndefined(rest)) rest.pop(); + return [root, ...rest]; +} + +function lastOrUndefined(array: T[]): T | undefined { + return array.length ? array[array.length - 1] : undefined; +} + +/** + * Determines whether a path has a trailing separator (`/` or `\\`). + */ +export function hasTrailingDirectorySeparator(path: string): boolean { + return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1)); +} + +/** + * Removes a trailing directory separator from a path, if it does not already have one. + */ +export function removeTrailingDirectorySeparator(path: string): string { + if (hasTrailingDirectorySeparator(path)) { + return path.substr(0, path.length - 1); + } + return path; +} + +/** + * Adds a trailing directory separator to a path, if it does not already have one. + */ +export function ensureTrailingDirectorySeparator(path: string): string { + if (!hasTrailingDirectorySeparator(path)) { + return path + directorySeparator; + } + return path; +} + +/** + * Normalize path separators, converting `\\` into `/`. + */ +export function normalizeSlashes(path: string): string { + return path.includes("\\") + ? path.replace(backslashRegExp, directorySeparator) + : path; +} + +/** + * Combines paths. If a path is absolute, it replaces any previous path. Relative paths are not simplified. + */ +export function combinePaths(path: string, ...paths: (string | undefined)[]): string { + if (path) path = normalizeSlashes(path); + for (let relativePath of paths) { + if (!relativePath) continue; + relativePath = normalizeSlashes(relativePath); + if (!path || getRootLength(relativePath) !== 0) { + path = relativePath; + } + else { + path = ensureTrailingDirectorySeparator(path) + relativePath; + } + } + return path; +} + +function simpleNormalizePath(path: string): string | undefined { + // Most paths don't require normalization + if (!relativePathSegmentRegExp.test(path)) { + return path; + } + // Some paths only require cleanup of `/./` or leading `./` + let simplified = path.replace(/\/\.\//g, "/"); + if (simplified.startsWith("./")) { + simplified = simplified.slice(2); + } + if (simplified !== path) { + path = simplified; + if (!relativePathSegmentRegExp.test(path)) { + return path; + } + } + return undefined; +} + +/** + * Returns the normalized absolute path, resolving `.` and `..` segments. + */ +export function getNormalizedAbsolutePath(path: string, currentDirectory: string | undefined): string { + let rootLength = getRootLength(path); + if (rootLength === 0 && currentDirectory) { + path = combinePaths(currentDirectory, path); + rootLength = getRootLength(path); + } + else { + // combinePaths normalizes slashes, so not necessary in the other branch + path = normalizeSlashes(path); + } + + const simpleNormalized = simpleNormalizePath(path); + if (simpleNormalized !== undefined) { + return simpleNormalized.length > rootLength ? removeTrailingDirectorySeparator(simpleNormalized) : simpleNormalized; + } + + const length = path.length; + const root = path.substring(0, rootLength); + // `normalized` is only initialized once `path` is determined to be non-normalized + let normalized: string | undefined; + let index = rootLength; + let segmentStart = index; + let normalizedUpTo = index; + let seenNonDotDotSegment = rootLength !== 0; + while (index < length) { + // At beginning of segment + segmentStart = index; + let ch = path.charCodeAt(index); + while (ch === CharacterCodesSlash && index + 1 < length) { + index++; + ch = path.charCodeAt(index); + } + if (index > segmentStart) { + // Seen superfluous separator + normalized ??= path.substring(0, segmentStart - 1); + segmentStart = index; + } + // Past any superfluous separators + let segmentEnd = path.indexOf(directorySeparator, index + 1); + if (segmentEnd === -1) { + segmentEnd = length; + } + const segmentLength = segmentEnd - segmentStart; + if (segmentLength === 1 && path.charCodeAt(index) === CharacterCodesDot) { + // "." segment (skip) + normalized ??= path.substring(0, normalizedUpTo); + } + else if (segmentLength === 2 && path.charCodeAt(index) === CharacterCodesDot && path.charCodeAt(index + 1) === CharacterCodesDot) { + // ".." segment + if (!seenNonDotDotSegment) { + if (normalized !== undefined) { + normalized += normalized.length === rootLength ? ".." : "/.."; + } + else { + normalizedUpTo = index + 2; + } + } + else if (normalized === undefined) { + if (normalizedUpTo - 2 >= 0) { + normalized = path.substring(0, Math.max(rootLength, path.lastIndexOf(directorySeparator, normalizedUpTo - 2))); + } + else { + normalized = path.substring(0, normalizedUpTo); + } + } + else { + const lastSlash = normalized.lastIndexOf(directorySeparator); + if (lastSlash !== -1) { + normalized = normalized.substring(0, Math.max(rootLength, lastSlash)); + } + else { + normalized = root; + } + if (normalized.length === rootLength) { + seenNonDotDotSegment = rootLength !== 0; + } + } + } + else if (normalized !== undefined) { + if (normalized.length !== rootLength) { + normalized += directorySeparator; + } + seenNonDotDotSegment = true; + normalized += path.substring(segmentStart, segmentEnd); + } + else { + seenNonDotDotSegment = true; + normalizedUpTo = segmentEnd; + } + index = segmentEnd + 1; + } + return normalized ?? (length > rootLength ? removeTrailingDirectorySeparator(path) : path); +} + +/** + * Normalizes a path, resolving `.` and `..` segments and converting backslashes to forward slashes. + */ +export function normalizePath(path: string): string { + path = normalizeSlashes(path); + let normalized = simpleNormalizePath(path); + if (normalized !== undefined) { + return normalized; + } + normalized = getNormalizedAbsolutePath(path, ""); + return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized; +} + +/** + * Determines whether a path is an absolute disk path (e.g. starts with `/`, or a DOS path + * like `c:`, `c:\\` or `c:/`). + */ +export function isRootedDiskPath(path: string): boolean { + return getEncodedRootLength(path) > 0; +} + +export function convertToRelativePath( + absoluteOrRelativePath: string, + basePath: string, + getCanonicalFileName: (path: string) => string, +): string { + if (!isRootedDiskPath(absoluteOrRelativePath)) { + return absoluteOrRelativePath; + } + + const fromComponents = getPathComponents(getNormalizedAbsolutePath(basePath, "")); + const toComponents = getPathComponents(getNormalizedAbsolutePath(absoluteOrRelativePath, "")); + let start = 0; + for (; start < fromComponents.length && start < toComponents.length; start++) { + const fromComponent = getCanonicalFileName(fromComponents[start]); + const toComponent = getCanonicalFileName(toComponents[start]); + const equal = start === 0 + ? fromComponent.toLowerCase() === toComponent.toLowerCase() + : fromComponent === toComponent; + if (!equal) { + break; + } + } + + if (start === 0) { + return pathFromComponents(toComponents); + } + + const relative = Array(fromComponents.length - start).fill(".."); + return pathFromComponents(["", ...relative, ...toComponents.slice(start)]); +} + +function pathFromComponents(components: readonly string[]): string { + if (components.length === 0) { + return ""; + } + const root = components[0] && ensureTrailingDirectorySeparator(components[0]); + return root + components.slice(1).join(directorySeparator); +} + +/** + * Returns the canonical key for an already rooted, normalized path under + * caseSensitivity. + */ +export function pathKey(path: RootedPath, caseSensitivity: CaseSensitivity): PathKey { + if (path.startsWith(dynamicURIFileNamePrefix)) { + let canonicalPath: string = path; + if (getRootLength(path) === path.length && !hasTrailingDirectorySeparator(path)) { + canonicalPath += directorySeparator; + } + return canonicalize(canonicalPath, CaseSensitivity.Sensitive) as PathKey; + } + return canonicalize(path, caseSensitivity) as PathKey; +} + +/** + * Validates a canonical path key received from a trusted producer without + * applying case sensitivity again. + */ +export function tryPathKeyFromCanonical(path: string): PathKey | undefined { + return tryRootedPathFromNormalized(path) === undefined ? undefined : path as PathKey; +} + +/** + * Resolves path against currentDirectory and normalizes it. + */ +export function toRootedPath(path: string, currentDirectory: RootedDirectoryPath | undefined): RootedPath { + if (path === "") { + throw new Error("Path must not be empty"); + } + if (hasRootedURLSuffix(path)) { + throw new Error(`Path must not contain a URL query or fragment: ${path}`); + } + if ( + getEncodedRootLength(path) === 0 && + currentDirectory !== undefined && + hasURLRoot(currentDirectory) && + /[?#]/.test(path) + ) { + throw new Error(`Relative URL path must not contain a query or fragment: ${path}`); + } + let normalized = getNormalizedAbsolutePath(path, currentDirectory); + if ( + normalized === "" || + getRootLength(normalized) === 0 || + hasRootedURLSuffix(normalized) + ) { + throw new Error(`Path is not rooted: ${normalized}`); + } + if (getRootLength(normalized) === normalized.length && !hasTrailingDirectorySeparator(normalized)) { + normalized += directorySeparator; + } + return normalized as RootedPath; +} + +/** + * Validates a path that is already rooted and normalized without changing it. + */ +export function rootedPathFromNormalized(path: string): RootedPath { + const result = tryRootedPathFromNormalized(path); + if (result === undefined) { + throw new Error(`Path is not rooted and normalized: ${path}`); + } + return result; +} + +/** + * Attempts to validate a path that is already rooted and normalized without + * changing it. + */ +export function tryRootedPathFromNormalized(path: string): RootedPath | undefined { + if (hasRootedURLSuffix(path)) { + return undefined; + } + const rootLength = getRootLength(path); + if ( + path === "" || + rootLength === 0 || + path.includes("\\") || + hasRelativePathSegment(path, rootLength) || + path.length === rootLength && !hasTrailingDirectorySeparator(path) || + path.length > rootLength && hasTrailingDirectorySeparator(path) + ) { + return undefined; + } + return path as RootedPath; +} + +function hasRootedURLSuffix(path: string): boolean { + if (!hasURLRoot(path)) { + return false; + } + const schemeEnd = path.indexOf(urlSchemeSeparator); + const suffixStart = path.search(/[?#]/); + return suffixStart >= schemeEnd + urlSchemeSeparator.length; +} + +function hasURLRoot(path: string): boolean { + return getEncodedRootLength(path) < 0 && path.includes(urlSchemeSeparator); +} + +function hasRelativePathSegment(path: string, start: number): boolean { + if (start === path.length) { + return false; + } + let segmentStart = start; + for (let index = start; index <= path.length; index++) { + if (index !== path.length && path.charCodeAt(index) !== CharacterCodesSlash) { + continue; + } + const segmentLength = index - segmentStart; + if ( + segmentLength === 0 || + segmentLength === 1 && path.charCodeAt(segmentStart) === CharacterCodesDot || + segmentLength === 2 && + path.charCodeAt(segmentStart) === CharacterCodesDot && + path.charCodeAt(segmentStart + 1) === CharacterCodesDot + ) { + return true; + } + segmentStart = index + 1; + } + return false; +} + +/** + * Resolves fileName against currentDirectory, normalizes it, and gives it file + * intent. + */ +export function toRootedFilePath(fileName: string, currentDirectory: RootedDirectoryPath | undefined): RootedFilePath { + return toRootedPath(fileName, currentDirectory) as RootedFilePath; +} + +/** + * Resolves directory against currentDirectory, normalizes it, and gives it + * directory intent. + */ +export function toRootedDirectoryPath(directory: string, currentDirectory: RootedDirectoryPath | undefined): RootedDirectoryPath { + return toRootedPath(directory, currentDirectory) as RootedDirectoryPath; +} + +/** + * Gives a RootedPath file intent without changing it. + */ +export function rootedFilePathFromPath(path: RootedPath): RootedFilePath { + return path as RootedFilePath; +} + +/** + * Gives a RootedPath directory intent without changing it. + */ +export function rootedDirectoryPathFromPath(path: RootedPath): RootedDirectoryPath { + return path as RootedDirectoryPath; +} + +/** + * Applies caseSensitivity to text used for path comparison or keys. + */ +export function canonicalize(text: string, caseSensitivity: CaseSensitivity): string { + return isCaseSensitive(caseSensitivity) ? text : toFileNameLowerCase(text); +} + +export function isCaseSensitive(caseSensitivity: CaseSensitivity): boolean { + return caseSensitivity === CaseSensitivity.Sensitive; +} + +export function isCaseInsensitive(caseSensitivity: CaseSensitivity): boolean { + return caseSensitivity === CaseSensitivity.Insensitive; +} + +function toLowerCasePerCodePoint(text: string): string { + let result = ""; + for (const char of text) { + result += char.toLowerCase(); + } + return result; +} + +function toFileNameLowerCase(fileName: string): string { + return fileNameLowerCaseRegExp.test(fileName) + ? fileName.replace(fileNameLowerCaseRegExp, toLowerCasePerCodePoint) + : fileName; +} + +const bundledScheme = "bundled:///"; +const dynamicURIFileNamePrefix = "^/~ts-uri~/"; +const dynamicURIPathSegmentEscapePrefix = "~ts-uri-escape~"; +const dynamicURIModuleSpecifierEscapePrefix = "~ts-uri-spec~"; +const dynamicURINoPathEscapePrefix = "~ts-uri-no-path~"; +const dynamicURIPathSegmentEscapeRegExp = /(?:^|\/)(?:\.{1,2}(?:\/|$)|~ts-uri-escape~|~ts-uri-spec~|~ts-uri-no-path~)/; + +/** + * Returns true if the path refers to a bundled library file. + */ +export function isBundled(path: string): boolean { + return path.startsWith(bundledScheme); +} + +/** + * Returns true if the file name represents a dynamic/virtual file + * that doesn't exist on disk (e.g., untitled files with paths like "^/untitled/..."). + */ +export function isDynamicFileName(fileName: string): boolean { + return fileName.startsWith("^/"); +} + +/** + * Splits a Windows volume (e.g., "c:") from the rest of the path. + * Returns [volume, rest, ok] where ok is true if a volume was found. + */ +export function splitVolumePath(path: string): [volume: string, rest: string, ok: boolean] { + if (path.length >= 2 && isVolumeCharacter(path.charCodeAt(0)) && path.charCodeAt(1) === CharacterCodesColon) { + return [path.substring(0, 2).toLowerCase(), path.substring(2), true]; + } + return ["", path, false]; +} + +function splitVolumePathPreservingCase(path: string): [volume: string, rest: string, ok: boolean] { + if (path.length >= 2 && isVolumeCharacter(path.charCodeAt(0)) && path.charCodeAt(1) === CharacterCodesColon) { + return [path.substring(0, 2), path.substring(2), true]; + } + return ["", path, false]; +} + +// Characters that need extra escaping in URI path segments +// https://github.com/microsoft/vscode-uri/blob/edfdccd976efaf4bb8fdeca87e97c47257721729/src/uri.ts#L455 +const extraEscapeChars: Record = { + ":": "%3A", + "/": "%2F", + "?": "%3F", + "#": "%23", + "[": "%5B", + "]": "%5D", + "@": "%40", + "!": "%21", + "$": "%24", + "&": "%26", + "'": "%27", + "(": "%28", + ")": "%29", + "*": "%2A", + "+": "%2B", + ",": "%2C", + ";": "%3B", + "=": "%3D", + " ": "%20", +}; + +function extraEscape(s: string): string { + let result = s; + for (const [char, escape] of Object.entries(extraEscapeChars)) { + result = result.replaceAll(char, escape); + } + return result; +} + +/** + * Converts a file name to a document URI. + * + * @example + * fileNameToDocumentURI("/path/to/file.ts") === "file:///path/to/file.ts" + * fileNameToDocumentURI("c:/path/to/file.ts") === "file:///c%3A/path/to/file.ts" + * fileNameToDocumentURI("^/untitled/ts-nul-authority/Untitled-1") === "untitled:Untitled-1" + * fileNameToDocumentURI("^/vscode-vfs/github/microsoft/TypeScript/file.ts") === "vscode-vfs://github/microsoft/TypeScript/file.ts" + */ +export function fileNameToDocumentURI(fileName: string): string { + // Bundled files are returned as-is + if (isBundled(fileName)) { + return fileName; + } + + // Dynamic/virtual files (untitled, vscode-vfs, etc.) need special handling + if (isDynamicFileName(fileName)) { + const encoded = fileName.startsWith(dynamicURIFileNamePrefix); + const withoutPrefix = fileName.substring(encoded ? dynamicURIFileNamePrefix.length : 2); + const firstSlash = withoutPrefix.indexOf("/"); + if (firstSlash === -1) { + throw new Error("invalid file name: " + fileName); + } + const scheme = withoutPrefix.substring(0, firstSlash); + const rest = withoutPrefix.substring(firstSlash + 1); + + const secondSlash = rest.indexOf("/"); + if (secondSlash === -1) { + throw new Error("invalid file name: " + fileName); + } + const encodedAuthority = rest.substring(0, secondSlash); + const hasAuthority = encodedAuthority !== "ts-nul-authority"; + const authority = encoded ? decodeDynamicURIPathSegment(encodedAuthority) : encodedAuthority; + const encodedPath = rest.substring(secondSlash + 1); + if (encoded && hasAuthority) { + const suffix = decodeDynamicURINoPath(encodedPath); + if (suffix !== undefined) { + return scheme + "://" + authority + suffix; + } + } + const path = encoded ? decodeDynamicURIPath(encodedPath) : encodedPath; + + // ts-nul-authority is a placeholder for URIs without an authority + if (!hasAuthority) { + return scheme + ":" + path; + } + return scheme + "://" + authority + "/" + path; + } + + // Regular file path - convert to file:// URI + let [volume, rest] = splitVolumePath(fileName); + if (volume !== "") { + volume = "/" + extraEscape(volume); + } + + // Remove leading // for UNC paths (already handled by file://) + if (rest.startsWith("//")) { + rest = rest.substring(2); + } + + const parts = rest.split("/"); + const encodedParts = parts.map(part => extraEscape(encodeURIComponent(part))); + + return "file://" + volume + encodedParts.join("/"); +} + +/** + * Converts a document URI to a file name. + * + * @example + * documentURIToFileName("file:///path/to/file.ts") === "/path/to/file.ts" + * documentURIToFileName("file:///c%3A/path/to/file.ts") === "c:/path/to/file.ts" + * documentURIToFileName("untitled:Untitled-1") === "^/untitled/ts-nul-authority/Untitled-1" + * documentURIToFileName("vscode-vfs://github/microsoft/TypeScript/file.ts") === "^/vscode-vfs/github/microsoft/TypeScript/file.ts" + */ +export function documentURIToFileName(uri: string): string { + // Bundled files are returned as-is + if (isBundled(uri)) { + return uri; + } + + // Handle file:// URIs + if (uri.startsWith("file://")) { + let parsed: URL; + try { + parsed = new URL(uri); + } + catch { + throw new Error("invalid file URI: " + uri); + } + + const path = decodeURIComponent(parsed.pathname); + + // UNC path: file://server/share/... + if (parsed.host !== "") { + return "//" + parsed.host + path; + } + + // Local file - fix Windows path by removing leading slash before volume + if (path.length >= 3 && path.charCodeAt(0) === CharacterCodesSlash) { + const [volume, rest, ok] = splitVolumePathPreservingCase(path.substring(1)); + if (ok) { + return volume + rest; + } + } + return path; + } + + // Leave all other URIs escaped so we can round-trip them. + // Convert to dynamic file name format: ^/scheme/authority/path + + const colonIndex = uri.indexOf(":"); + if (colonIndex === -1) { + throw new Error("invalid URI: " + uri); + } + + const scheme = uri.substring(0, colonIndex); + let path = uri.substring(colonIndex + 1); + let suffix = ""; + const suffixStart = path.search(/[?#]/); + if (suffixStart !== -1) { + suffix = path.substring(suffixStart); + path = path.substring(0, suffixStart); + } + + let authority = "ts-nul-authority"; + let hasAuthority = false; + let hasPath = true; + if (path.startsWith("//")) { + hasAuthority = true; + const rest = path.substring(2); + const slashIndex = rest.indexOf("/"); + if (slashIndex === -1) { + authority = rest; + path = ""; + hasPath = false; + } + else { + authority = rest.substring(0, slashIndex); + path = rest.substring(slashIndex + 1); + } + } + + let encodedAuthority = authority; + if (hasAuthority) { + encodedAuthority = authority === "ts-nul-authority" + ? forceEncodeDynamicURIPathSegment(authority, false) + : encodeDynamicURIPath(authority); + } + const encodedPath = hasPath + ? encodeDynamicURIPathWithSuffix(path, suffix) + : encodeDynamicURINoPath(suffix); + return dynamicURIFileNamePrefix + scheme + "/" + encodedAuthority + "/" + encodedPath; +} + +function encodeDynamicURIPath(path: string, preserveFinalExtension = true): string { + if (!dynamicURIPathNeedsEncoding(path)) { + if (!isRootedDiskPath(path)) { + return path; + } + } + const segments = path.split("/"); + for (let i = 0; i < segments.length; i++) { + segments[i] = encodeDynamicURIPathSegment(segments[i], preserveFinalExtension && i === segments.length - 1); + } + if (isRootedDiskPath(segments.join("/"))) { + segments[0] = forceEncodeDynamicURIPathSegment(segments[0], segments.length === 1 && preserveFinalExtension); + } + return segments.join("/"); +} + +function encodeDynamicURIPathWithSuffix(path: string, suffix: string): string { + if (suffix === "") { + return encodeDynamicURIPath(path); + } + const slash = path.lastIndexOf("/"); + const before = slash === -1 ? "" : encodeDynamicURIPath(path.substring(0, slash), false) + "/"; + return before + forceEncodeDynamicURIPathSegmentWithSuffix(path.substring(slash + 1), suffix); +} + +function dynamicURIPathNeedsEncoding(path: string): boolean { + return path === "" || + path.startsWith("/") || + path.endsWith("/") || + path.includes("//") || + path.includes("\\") || + dynamicURIPathSegmentEscapeRegExp.test(path); +} + +function dynamicURIPathSegmentNeedsEncoding(segment: string): boolean { + return segment === "" || + segment === "." || + segment === ".." || + segment.startsWith(dynamicURIPathSegmentEscapePrefix) || + segment.startsWith(dynamicURIModuleSpecifierEscapePrefix) || + segment.startsWith(dynamicURINoPathEscapePrefix) || + segment.includes("\\"); +} + +function encodeDynamicURIPathSegment(segment: string, preserveExtension: boolean): string { + if (dynamicURIPathSegmentNeedsEncoding(segment)) { + return forceEncodeDynamicURIPathSegment(segment, preserveExtension); + } + return segment; +} + +function forceEncodeDynamicURIPathSegment(segment: string, preserveExtension: boolean): string { + let extension = ""; + if (preserveExtension && segment !== "." && segment !== "..") { + [segment, extension] = splitDynamicURIFileExtension(segment); + } + let hex = ""; + const encoded = encodeURIComponent(segment); + for (let i = 0; i < encoded.length; i++) { + if (encoded.charCodeAt(i) === CharacterCodesPercent) { + hex += encoded.slice(i + 1, i + 3).toLowerCase(); + i += 2; + } + else { + hex += encoded.charCodeAt(i).toString(16).padStart(2, "0"); + } + } + return dynamicURIPathSegmentEscapePrefix + hex + "~" + extension; +} + +function forceEncodeDynamicURIPathSegmentWithSuffix(segment: string, suffix: string): string { + const [base, extension] = splitDynamicURIFileExtension(segment); + return forceEncodeDynamicURIPathSegment(base + "\0" + suffix, false) + extension; +} + +function splitDynamicURIFileExtension(segment: string): [base: string, extension: string] { + const extension = getDynamicURIFileExtension(segment); + return extension === "" + ? [segment, extension] + : [segment.substring(0, segment.length - extension.length), extension]; +} + +function getDynamicURIFileExtension(segment: string): string { + const baseStart = segment.lastIndexOf("\\") + 1; + for (const extension of [".d.ts", ".d.mts", ".d.cts"]) { + if (segment.endsWith(extension) && segment.length - extension.length >= baseStart) { + return extension; + } + } + if (segment.endsWith(".ts")) { + const declaration = segment.indexOf(".d.", baseStart); + if (declaration !== -1) { + return segment.substring(declaration); + } + } + const dot = segment.lastIndexOf("."); + return dot > segment.lastIndexOf("\\") ? segment.substring(dot) : ""; +} + +function decodeDynamicURIPath(path: string): string { + if (!path.includes(dynamicURIPathSegmentEscapePrefix)) { + return path; + } + return path.split("/").map(decodeDynamicURIPathSegment).join("/"); +} + +function decodeDynamicURIPathSegment(segment: string): string { + if (!segment.startsWith(dynamicURIPathSegmentEscapePrefix)) { + return segment; + } + + const separator = segment.indexOf("~", dynamicURIPathSegmentEscapePrefix.length); + if (separator === -1) { + return segment; + } + const encoded = segment.slice(dynamicURIPathSegmentEscapePrefix.length, separator); + const extension = segment.slice(separator + 1); + if (encoded.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(encoded)) { + return segment; + } + try { + const decoded = decodeURIComponent(encoded.replace(/../g, value => `%${value}`)); + const suffix = decoded.indexOf("\0"); + return suffix === -1 + ? decoded + extension + : decoded.substring(0, suffix) + extension + decoded.substring(suffix + 1); + } + catch { + return segment; + } +} + +function encodeDynamicURINoPath(suffix: string): string { + let hex = ""; + const encoded = encodeURIComponent(suffix); + for (let i = 0; i < encoded.length; i++) { + if (encoded.charCodeAt(i) === CharacterCodesPercent) { + hex += encoded.substring(i + 1, i + 3).toLowerCase(); + i += 2; + } + else { + hex += encoded.charCodeAt(i).toString(16).padStart(2, "0"); + } + } + return dynamicURINoPathEscapePrefix + hex + "~"; +} + +function decodeDynamicURINoPath(path: string): string | undefined { + if (!path.startsWith(dynamicURINoPathEscapePrefix) || !path.endsWith("~")) { + return undefined; + } + const encoded = path.substring(dynamicURINoPathEscapePrefix.length, path.length - 1); + if (encoded.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(encoded)) { + return undefined; + } + try { + return decodeURIComponent(encoded.replace(/../g, value => `%${value}`)); + } + catch { + return undefined; + } +} diff --git a/packages/typescript/src/api/prepareCompilerOptions.generated.ts b/packages/typescript/src/api/prepareCompilerOptions.generated.ts index 3bd9f4e175a16..8180a6664c8b5 100644 --- a/packages/typescript/src/api/prepareCompilerOptions.generated.ts +++ b/packages/typescript/src/api/prepareCompilerOptions.generated.ts @@ -1,48 +1,48 @@ -// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT. - -import type { RootedDirectoryPath } from "../ast/index.ts"; -import type { CompilerOptions } from "./compilerOptions.generated.ts"; -import { - toRootedDirectoryPath, - toRootedFilePath, - toRootedPath, -} from "./path.ts"; -import type { RawCompilerOptions } from "./proto.generated.ts"; - -export function prepareCompilerOptions(options: RawCompilerOptions, currentDirectory: RootedDirectoryPath): CompilerOptions { - const { - declarationDir, - outDir, - project, - rootDir, - rootDirs, - tsBuildInfoFile, - typeRoots, - baseUrl, - outFile, - configFilePath, - pathsBasePath, - generateCpuProfile, - generateTrace, - pprofDir, - ...rest - } = options; - const result = { - ...rest, - declarationDir: declarationDir === undefined ? undefined : toRootedDirectoryPath(declarationDir, currentDirectory), - outDir: outDir === undefined ? undefined : toRootedDirectoryPath(outDir, currentDirectory), - project: project === undefined ? undefined : toRootedPath(project, currentDirectory), - rootDir: rootDir === undefined ? undefined : toRootedDirectoryPath(rootDir, currentDirectory), - rootDirs: rootDirs?.map(value => toRootedDirectoryPath(value, currentDirectory)), - tsBuildInfoFile: tsBuildInfoFile === undefined ? undefined : toRootedFilePath(tsBuildInfoFile, currentDirectory), - typeRoots: typeRoots?.map(value => toRootedDirectoryPath(value, currentDirectory)), - baseUrl: baseUrl === undefined ? undefined : toRootedDirectoryPath(baseUrl, currentDirectory), - outFile: outFile === undefined ? undefined : toRootedFilePath(outFile, currentDirectory), - configFilePath: configFilePath === undefined ? undefined : toRootedFilePath(configFilePath, currentDirectory), - pathsBasePath: pathsBasePath === undefined ? undefined : toRootedDirectoryPath(pathsBasePath, currentDirectory), - generateCpuProfile: generateCpuProfile === undefined ? undefined : toRootedFilePath(generateCpuProfile, currentDirectory), - generateTrace: generateTrace === undefined ? undefined : toRootedDirectoryPath(generateTrace, currentDirectory), - pprofDir: pprofDir === undefined ? undefined : toRootedDirectoryPath(pprofDir, currentDirectory), - }; - return result; -} +// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT. + +import type { RootedDirectoryPath } from "../ast/index.ts"; +import type { CompilerOptions } from "./compilerOptions.generated.ts"; +import { + toRootedDirectoryPath, + toRootedFilePath, + toRootedPath, +} from "./path.ts"; +import type { RawCompilerOptions } from "./proto.generated.ts"; + +export function prepareCompilerOptions(options: RawCompilerOptions, currentDirectory: RootedDirectoryPath): CompilerOptions { + const { + declarationDir, + outDir, + project, + rootDir, + rootDirs, + tsBuildInfoFile, + typeRoots, + baseUrl, + outFile, + configFilePath, + pathsBasePath, + generateCpuProfile, + generateTrace, + pprofDir, + ...rest + } = options; + const result = { + ...rest, + declarationDir: declarationDir === undefined ? undefined : toRootedDirectoryPath(declarationDir, currentDirectory), + outDir: outDir === undefined ? undefined : toRootedDirectoryPath(outDir, currentDirectory), + project: project === undefined ? undefined : toRootedPath(project, currentDirectory), + rootDir: rootDir === undefined ? undefined : toRootedDirectoryPath(rootDir, currentDirectory), + rootDirs: rootDirs?.map(value => toRootedDirectoryPath(value, currentDirectory)), + tsBuildInfoFile: tsBuildInfoFile === undefined ? undefined : toRootedFilePath(tsBuildInfoFile, currentDirectory), + typeRoots: typeRoots?.map(value => toRootedDirectoryPath(value, currentDirectory)), + baseUrl: baseUrl === undefined ? undefined : toRootedDirectoryPath(baseUrl, currentDirectory), + outFile: outFile === undefined ? undefined : toRootedFilePath(outFile, currentDirectory), + configFilePath: configFilePath === undefined ? undefined : toRootedFilePath(configFilePath, currentDirectory), + pathsBasePath: pathsBasePath === undefined ? undefined : toRootedDirectoryPath(pathsBasePath, currentDirectory), + generateCpuProfile: generateCpuProfile === undefined ? undefined : toRootedFilePath(generateCpuProfile, currentDirectory), + generateTrace: generateTrace === undefined ? undefined : toRootedDirectoryPath(generateTrace, currentDirectory), + pprofDir: pprofDir === undefined ? undefined : toRootedDirectoryPath(pprofDir, currentDirectory), + }; + return result; +} diff --git a/packages/typescript/src/api/proto.generated.ts b/packages/typescript/src/api/proto.generated.ts index 8d8489615ec6a..31b131823e298 100644 --- a/packages/typescript/src/api/proto.generated.ts +++ b/packages/typescript/src/api/proto.generated.ts @@ -1,1934 +1,1934 @@ -// Code generated by gen-proto; DO NOT EDIT. - -import { CaseSensitivity } from "#enums/caseSensitivity"; -import { JsxEmit } from "#enums/jsxEmit"; -import { ModuleDetectionKind } from "#enums/moduleDetectionKind"; -import { ModuleKind } from "#enums/moduleKind"; -import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -import { NewLineKind } from "#enums/newLineKind"; -import { ScriptKind } from "#enums/scriptKind"; -import { ScriptTarget } from "#enums/scriptTarget"; -import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; -import type { - PathKey, - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../ast/index.ts"; -import type { - CompilerOptions, - PluginImport, -} from "./compilerOptions.generated.ts"; -import type { UserPreferences } from "./userPreferences.generated.ts"; - -export { CaseSensitivity } from "#enums/caseSensitivity"; -export { JsxEmit } from "#enums/jsxEmit"; -export { ModuleDetectionKind } from "#enums/moduleDetectionKind"; -export { ModuleKind } from "#enums/moduleKind"; -export { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -export { NewLineKind } from "#enums/newLineKind"; -export { ScriptKind } from "#enums/scriptKind"; -export { ScriptTarget } from "#enums/scriptTarget"; -export { SymbolOwnerKind } from "#enums/symbolOwnerKind"; -export type { PathKey, RootedDirectoryPath, RootedFilePath, RootedPath } from "../ast/index.ts"; -export type { CompilerOptions, PluginImport } from "./compilerOptions.generated.ts"; -export * from "./compilerOptions.generated.ts"; -export type { UserPreferences } from "./userPreferences.generated.ts"; - -export type APIMethod = { params: TParams; result: TResult; }; - -export interface APIMethodInfo { - release: APIMethod; - releaseSourceFile: APIMethod; - retainSourceFile: APIMethod; - getCachedSourceFile: APIMethod; - getSymbolOfDeclaration: APIMethod; - batchRequests: APIMethod; - initialize: APIMethod; - createSnapshot: APIMethod; - updateSnapshot: APIMethod; - getCurrentLanguageServerSnapshot: APIMethod; - createBuildOrchestrator: APIMethod; - disposeBuildOrchestrator: APIMethod; - build: APIMethod; - buildReferences: APIMethod; - cleanBuild: APIMethod; - cleanReferences: APIMethod; - createModuleResolver: APIMethod; - releaseModuleResolver: APIMethod; - resolveModuleName: APIMethod; - parseCommandLine: APIMethod; - readConfigFile: APIMethod; - parseJsonConfigFileContent: APIMethod; - parseConfigFile: APIMethod; - createSourceFile: APIMethod; - createSourceFileFromFile: APIMethod; - transpileModule: APIMethod; - transpileModuleFromFile: APIMethod; - transpileDeclaration: APIMethod; - transpileDeclarationFromFile: APIMethod; - getDefaultProjectForFile: APIMethod; - getSymbolAtPosition: APIMethod; - getSymbolsAtPositions: APIMethod; - getSymbolAtLocation: APIMethod; - getSymbolsAtLocations: APIMethod; - getSymbolOfSourceFile: APIMethod; - getSymbolsOfSourceFiles: APIMethod; - getTypeOfSymbol: APIMethod; - getTypesOfSymbols: APIMethod; - getDeclaredTypeOfSymbol: APIMethod; - getNonMissingTypeOfSymbol: APIMethod; - getSourceFile: APIMethod; - getSourceFileNames: APIMethod; - getSourceFileMetadata: APIMethod; - getModeForUsageLocation: APIMethod; - getModeForResolutionAtIndex: APIMethod; - getResolvedModule: APIMethod; - getResolvedModuleFromModuleSpecifier: APIMethod; - getResolvedTypeReferenceDirective: APIMethod; - getResolvedTypeReferenceDirectiveFromTypeReferenceDirective: APIMethod; - getConfigFileNames: APIMethod; - getConfigSourceFile: APIMethod; - resolveName: APIMethod; - getSymbolsInScope: APIMethod; - getSignaturesOfType: APIMethod; - getResolvedSignature: APIMethod; - getTypeAtLocation: APIMethod; - getTypeAtLocations: APIMethod; - getTypeAtPosition: APIMethod; - getTypesAtPositions: APIMethod; - getParentOfSymbol: APIMethod; - getMembersOfSymbol: APIMethod; - getExportsOfSymbol: APIMethod; - getExportSymbolOfSymbol: APIMethod; - getSymbolOfType: APIMethod; - getTargetOfType: APIMethod; - getFreshTypeOfType: APIMethod; - getRegularTypeOfType: APIMethod; - getTypesOfType: APIMethod; - getTypeParametersOfType: APIMethod; - getOuterTypeParametersOfType: APIMethod; - getLocalTypeParametersOfType: APIMethod; - getThisTypeOfType: APIMethod; - getAliasTypeArgumentsOfType: APIMethod; - getAliasSymbolOfType: APIMethod; - getObjectTypeOfType: APIMethod; - getIndexTypeOfType: APIMethod; - getCheckTypeOfType: APIMethod; - getExtendsTypeOfType: APIMethod; - getBaseTypeOfType: APIMethod; - getConstraintOfType: APIMethod; - getTypeParameterOfMappedType: APIMethod; - getConstraintTypeOfMappedType: APIMethod; - getNameTypeOfMappedType: APIMethod; - getTemplateTypeOfMappedType: APIMethod; - getTypeParametersOfSignature: APIMethod; - getParametersOfSignature: APIMethod; - getThisParameterOfSignature: APIMethod; - getTargetOfSignature: APIMethod; - getContextualType: APIMethod; - getContextualTypeForArgument: APIMethod; - getAwaitedType: APIMethod; - getBaseTypeOfLiteralType: APIMethod; - getNonNullableType: APIMethod; - getTypeFromTypeNode: APIMethod; - getWidenedType: APIMethod; - getParameterType: APIMethod; - getTypeParameterAtPosition: APIMethod; - isArrayLikeType: APIMethod; - isTypeAssignableTo: APIMethod; - getShorthandAssignmentValueSymbol: APIMethod; - getTypeOfSymbolAtLocation: APIMethod; - typeToTypeNode: APIMethod; - signatureToSignatureDeclaration: APIMethod; - typeToString: APIMethod; - isContextSensitive: APIMethod; - getReturnTypeOfSignature: APIMethod; - getRestTypeOfSignature: APIMethod; - getTypePredicateOfSignature: APIMethod; - getBaseTypes: APIMethod; - getPropertiesOfType: APIMethod; - getApparentPropertiesOfType: APIMethod; - getApparentType: APIMethod; - getReducedType: APIMethod; - getPropertyOfType: APIMethod; - getTypeOfPropertyOfType: APIMethod; - getIndexInfoOfType: APIMethod; - getIndexInfosOfType: APIMethod; - getConstraintOfTypeParameter: APIMethod; - getDefaultFromTypeParameter: APIMethod; - getBaseConstraintOfType: APIMethod; - getTypeArguments: APIMethod; - getImportAdderEdits: APIMethod; - getTrueTypeOfConditionalType: APIMethod; - getFalseTypeOfConditionalType: APIMethod; - getConstantValue: APIMethod; - getSignatureFromDeclaration: APIMethod; - getExportSpecifierLocalTargetSymbol: APIMethod; - getAliasedSymbol: APIMethod; - getImmediateAliasedSymbol: APIMethod; - getTargetSymbol: APIMethod; - getMergedSymbol: APIMethod; - getSymbolOfNode: APIMethod; - getSymbolOfDeclarationForChecker: APIMethod; - getParentOfSymbolForChecker: APIMethod; - getExportSymbolOfSymbolForChecker: APIMethod; - getFullyQualifiedName: APIMethod; - getExportsOfModule: APIMethod; - getMemberInModuleExports: APIMethod; - getJsDocTags: APIMethod; - getDocumentationComment: APIMethod; - isArrayType: APIMethod; - isReadonlySymbol: APIMethod; - getReferencesToSymbolInFile: APIMethod; - getReferencedSymbolsForNode: APIMethod; - getSignatureUsages: APIMethod; - getCompletionsAtPosition: APIMethod; - getSyntacticDiagnostics: APIMethod; - getBindDiagnostics: APIMethod; - getSemanticDiagnostics: APIMethod; - getSuggestionDiagnostics: APIMethod; - getDeclarationDiagnostics: APIMethod; - getProgramDiagnostics: APIMethod; - getGlobalDiagnostics: APIMethod; - getConfigFileParsingDiagnostics: APIMethod; - printNode: APIMethod; - formatNodeForInsertion: APIMethod; - emit: APIMethod; - emitToString: APIMethod; - getJavaScriptEmit: APIMethod; - getDeclarationEmit: APIMethod; - getAnyType: APIMethod; - getStringType: APIMethod; - getNumberType: APIMethod; - getBooleanType: APIMethod; - getVoidType: APIMethod; - getUndefinedType: APIMethod; - getNullType: APIMethod; - getNeverType: APIMethod; - getUnknownType: APIMethod; - getBigIntType: APIMethod; - getESSymbolType: APIMethod; - getNonPrimitiveType: APIMethod; - getWellKnownSymbols: APIMethod; - getWellKnownSignatures: APIMethod; - startCPUProfile: APIMethod; - stopCPUProfile: APIMethod; - saveHeapProfile: APIMethod; -} - -export type DocumentIdentifier = string | { uri: string; }; - -export type ResolutionMode = ModuleKind.None | ModuleKind.CommonJS | ModuleKind.ESNext; - -export type EnsurePrograms = true | readonly ProjectId[]; - -export type InferredProjectId = string & { __inferredProjectIdBrand: any; }; -export type ConfiguredProjectId = PathKey & { __configuredProjectIdBrand: any; }; -export type SyntheticProjectId = string & { __syntheticProjectIdBrand: any; }; -export type ProjectId = InferredProjectId | ConfiguredProjectId | SyntheticProjectId; - -/** ReleaseParams are the parameters for the release method. */ -export interface ReleaseParams { - snapshot: number; -} - -export interface ReleaseSourceFileParams { - lease: number; -} - -export interface RetainSourceFileParams { - file: SourceFileDescriptor; -} - -export interface RetainSourceFileResponse { - lease: number; -} - -/** - * GetCachedSourceFileParams address an ordinary cached source file by its complete identity, - * independent of any snapshot or lease. - */ -export interface GetCachedSourceFileParams { - file: SourceFileDescriptor; -} - -/** - * SourceFileResponse contains the binary-encoded AST data for a source file. - * The Data field is base64-encoded binary data in the encoder's format. - */ -export interface SourceFileResponse { - /** Data is the base64-encoded binary AST data in the encoder's format. */ - data: string; -} - -export interface GetSymbolOfDeclarationParams { - file: SourceFileDescriptor; - index: number; -} - -export interface SymbolResponse { - reference: SymbolReference; - name: string; - flags: number; - checkFlags: number; - declarations?: string[] | undefined; - valueDeclaration?: string | undefined; - parent?: CompactSymbolReference | undefined; - exportSymbol?: CompactSymbolReference | undefined; -} - -export interface BatchRequestsParams { - requests: readonly BatchRequest[] | null; - continuationToken?: string | undefined; - maxResponseBytesPerPage?: number | undefined; -} - -export interface BatchRequestsResponse { - responses: BatchResponse[]; - continuationToken?: string | undefined; -} - -/** InitializeResponse is returned by the initialize method. */ -export interface InitializeResponse { - /** CaseSensitivity determines how the host file system compares paths. */ - caseSensitivity: CaseSensitivity; - /** CurrentDirectory is the server's current working directory. */ - currentDirectory: RootedDirectoryPath; -} - -/** CreateSnapshotParams are the parameters for creating a new independent snapshot. */ -export interface CreateSnapshotParams extends SnapshotRequestChangesParams { - /** UserPreferences configures language service behavior in the new snapshot. */ - userPreferences?: UserPreferences | undefined; - /** PrepareAutoImports identifies the file whose auto-import indexes should be ready in the new snapshot. */ - prepareAutoImports?: DocumentIdentifier | undefined; - /** FileNotifications describes host file system changes to invalidate while creating the snapshot. */ - fileNotifications?: FileNotifications | undefined; - /** - * FileSystem supplies file contents and directory listings for the new snapshot. - * A full filesystem is canonical and total. A filesystem layer is checked - * before falling back to the base snapshot or host filesystem. - */ - fileSystem?: RequestFileSystem | undefined; -} - -/** CreateSnapshotResponse is returned by createSnapshot. */ -export interface CreateSnapshotResponse { - /** Snapshot is the handle for the newly created snapshot. */ - snapshot: number; - /** - * Projects contains all projects when no response base was supplied, or only - * projects added or replaced relative to that base. - */ - projects: ProjectResponse[]; - /** Changes describes source file differences from the response base. */ - changes?: SnapshotChanges | undefined; - /** Operation describes results correlated with the request that produced the snapshot. */ - operation: SnapshotOperationResponse; -} - -export interface UpdateSnapshotParams { - snapshot: number; - changes?: CreateSnapshotParams | undefined; -} - -export interface GetCurrentLanguageServerSnapshotParams { - baseSnapshot?: number | undefined; - changes?: LanguageServerSnapshotChanges | undefined; -} - -export interface CreateBuildOrchestratorParams extends BuildOptions, CompilerOptions { - rootNames: readonly string[] | null; - cwd?: RootedDirectoryPath | undefined; -} - -export interface CreateBuildOrchestratorResponse { - buildOrchestratorID: number; -} - -export interface DisposeBuildOrchestratorParams { - buildOrchestratorID: number; -} - -export interface BuildParams { - buildOrchestratorID: number; - project?: string | undefined; -} - -export interface BuildResponse { - status: number; - diagnostics?: DiagnosticResponse[] | undefined; - statistics: Statistics; -} - -export interface CleanBuildParams { - buildOrchestratorID: number; - project?: string | undefined; -} - -export interface CleanBuildResponse { - status: number; - diagnostics?: DiagnosticResponse[] | undefined; - statistics: Statistics; - filesDeleted?: RootedFilePath[] | undefined; -} - -export interface CreateModuleResolverParams { - compilerOptions: CompilerOptions; - moduleResolutions?: ModuleResolutionSpec | undefined; - resolveModuleNameCallback?: string | undefined; -} - -export interface ReleaseModuleResolverParams { - resolver: number; -} - -export interface ResolveModuleNameParams { - snapshot?: number | undefined; - inProgressSnapshot?: number | undefined; - resolver: number; - moduleName: string; - containingDirectory: DocumentIdentifier; - resolutionMode?: ResolutionMode | undefined; -} - -export interface ResolveModuleNameResult { - resolvedModule?: ResolvedModule | undefined; - /** Trace is provided when compilerOptions.traceResolution is true. */ - trace?: string[] | undefined; -} - -export interface ParseCommandLineParams { - commandLine: readonly string[] | null; -} - -export interface ConfigFileResponse { - fileNames: RootedFilePath[]; - options: CompilerOptions; - buildOptions?: BuildOptions | undefined; - projectReferences?: ProjectReference[] | undefined; - typeAcquisition?: TypeAcquisition | undefined; - compileOnSave?: boolean | undefined; - raw?: unknown | undefined; - errors: DiagnosticResponse[]; -} - -export interface ReadConfigFileParams { - file: DocumentIdentifier; -} - -export interface ReadConfigFileResponse { - config: unknown; - error?: DiagnosticResponse | undefined; -} - -export interface ParseJsonConfigFileContentParams { - json: unknown; - configDirectory?: string | undefined; - configFileName?: DocumentIdentifier | undefined; -} - -export interface ParseConfigFileParams { - file: DocumentIdentifier; -} - -export interface CreateSourceFileParams { - fileName: string; - sourceText: string; - options: CreateSourceFileOptions; -} - -export interface CreateSourceFileFromFileParams { - fileName: string; - options: CreateSourceFileOptions; -} - -export interface TranspileParams { - input: string; - options: TranspileOptions; -} - -export interface TranspileOutputResponse { - outputText: string; - diagnostics?: DiagnosticResponse[] | undefined; - sourceMapText?: string | undefined; -} - -export interface TranspileFromFileParams { - fileName: string; - options: TranspileOptions; -} - -export interface GetDefaultProjectForFileParams { - snapshot: number; - file: DocumentIdentifier; -} - -export interface ProjectResponse { - id: ProjectId; - configFileName?: RootedFilePath | undefined; - currentDirectory: RootedDirectoryPath; - dirty: boolean; - parsedCommandLine: ConfigFileResponse; - /** @deprecated Use parsedCommandLine.fileNames. */ - rootFiles: RootedFilePath[]; - /** @deprecated Use parsedCommandLine.options. */ - compilerOptions: CompilerOptions; -} - -export interface GetSymbolAtPositionParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - position: number; -} - -export interface GetSymbolsAtPositionsParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - positions: readonly number[] | null; -} - -export interface GetSymbolAtLocationParams { - snapshot: number; - project: ProjectId; - location: string; -} - -export interface GetSymbolsAtLocationsParams { - snapshot: number; - project: ProjectId; - locations: readonly string[] | null; -} - -export interface GetSymbolOfSourceFileParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; -} - -export interface GetSymbolsOfSourceFilesParams { - snapshot: number; - project: ProjectId; - files: readonly DocumentIdentifier[] | null; -} - -export interface GetTypeOfSymbolParams { - snapshot: number; - project: ProjectId; - symbol: SymbolReference; -} - -export interface TypeResponse { - id: number; - flags: number; - objectFlags?: number | undefined; - isTupleType?: boolean | undefined; - /** - * Value is literal type data. BigInt literals are encoded as signed decimal - * strings because JSON cannot represent bigint; absent values are null. - */ - value: unknown; - /** ObjectType / TypeReference / StringMappingType / IndexType target */ - target?: number | undefined; - /** InterfaceType type parameters */ - typeParameters?: number[] | undefined; - outerTypeParameters?: number[] | undefined; - localTypeParameters?: number[] | undefined; - /** TupleType data */ - elementFlags?: number[] | undefined; - fixedLength?: number | undefined; - readonly?: boolean | undefined; - labeledElementDeclarations?: string[] | undefined; - /** IndexedAccessType data */ - objectType?: number | undefined; - indexType?: number | undefined; - /** ConditionalType data */ - checkType?: number | undefined; - extendsType?: number | undefined; - /** SubstitutionType data */ - baseType?: number | undefined; - substConstraint?: number | undefined; - /** MappedType data */ - typeParameter?: number | undefined; - constraintType?: number | undefined; - nameType?: number | undefined; - templateType?: number | undefined; - /** TemplateLiteralType text segments */ - texts?: string[] | undefined; - /** FreshableType data (LiteralType and computed enum types) */ - freshType?: number | undefined; - regularType?: number | undefined; - /** TypeParameter data */ - isThisType?: boolean | undefined; - /** InterfaceType data */ - thisType?: number | undefined; - /** IntrinsicType data */ - intrinsicName?: string | undefined; - /** TypeAlias data */ - aliasTypeArguments?: number[] | undefined; - aliasSymbol?: CompactSymbolReference | undefined; - /** Symbol associated with structured types */ - symbol?: CompactSymbolReference | undefined; -} - -export interface GetTypesOfSymbolsParams { - snapshot: number; - project: ProjectId; - symbols: readonly SymbolReference[] | null; -} - -export interface GetSourceFileParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; -} - -export interface GetSourceFileNamesParams { - snapshot: number; - project: ProjectId; -} - -/** SourceFileMetadata carries program-stored metadata about a single source file. */ -export interface SourceFileMetadata { - isDefaultLibrary: boolean; - isFromExternalLibrary: boolean; - packageJsonType: string; - packageJsonDirectory: RootedDirectoryPath; - impliedNodeFormat: ModuleKind; -} - -export interface GetModeForUsageLocationParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - usage: string; -} - -export interface GetModeForResolutionAtIndexParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - index: number; -} - -export interface GetResolvedModuleParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - moduleName: string; - mode: ModuleKind; -} - -export interface ResolvedModule { - resolvedFileName: string; - originalPath?: string | undefined; - extension: string; - resolvedUsingTsExtension?: boolean | undefined; - resolvedUsingExtraExtensions?: boolean | undefined; - packageId?: PackageId | undefined; - isExternalLibraryImport?: boolean | undefined; - alternateResult?: string | undefined; -} - -export interface GetResolvedModuleFromModuleSpecifierParams { - snapshot: number; - project: ProjectId; - moduleSpecifier: string; - sourceFile?: DocumentIdentifier | undefined; -} - -export interface GetResolvedTypeReferenceDirectiveParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - typeDirectiveName: string; - mode: ModuleKind; -} - -export interface ResolvedTypeReferenceDirective { - primary: boolean; - resolvedFileName: string; - originalPath?: string | undefined; - packageId?: PackageId | undefined; - isExternalLibraryImport?: boolean | undefined; -} - -export interface GetResolvedTypeReferenceDirectiveFromReferenceParams { - snapshot: number; - project: ProjectId; - sourceFile: DocumentIdentifier; - typeDirectiveName: string; - resolutionMode: ModuleKind; -} - -/** GetProjectDiagnosticsParams are parameters for project-wide diagnostic methods. */ -export interface GetProjectDiagnosticsParams { - snapshot: number; - project: ProjectId; -} - -export interface ResolveNameParams { - snapshot: number; - project: ProjectId; - name: string; - /** Optional: node handle for location context */ - location?: string | undefined; - /** Optional: file for location context (alternative to Location) */ - file?: DocumentIdentifier | undefined; - /** Optional: position in file for location context (with File) */ - position?: number | undefined; - /** SymbolFlags for what kind of symbol to find */ - meaning: number; - /** Whether to exclude global symbols */ - excludeGlobals?: boolean | undefined; -} - -/** - * GetSymbolsInScopeParams are parameters for getSymbolsInScope, which returns - * all symbols visible at a given location. - */ -export interface GetSymbolsInScopeParams { - snapshot: number; - project: ProjectId; - /** Optional: node handle for location context */ - location?: string | undefined; - /** Optional: file for location context (alternative to Location) */ - file?: DocumentIdentifier | undefined; - /** Optional: position in file for location context (with File) */ - position?: number | undefined; - /** SymbolFlags for what kind of symbols to find */ - meaning: number; -} - -export interface GetSignaturesOfTypeParams { - snapshot: number; - project: ProjectId; - type: number; - kind: number; -} - -export interface SignatureResponse { - id: number; - flags: number; - declaration?: string | undefined; - typeParameters?: number[] | undefined; - parameters?: CompactSymbolReference[] | undefined; - thisParameter?: CompactSymbolReference | undefined; - target?: number | undefined; -} - -export interface GetResolvedSignatureParams { - snapshot: number; - project: ProjectId; - location: string; -} - -export interface GetTypeAtLocationParams { - snapshot: number; - project: ProjectId; - location: string; -} - -export interface GetTypeAtLocationsParams { - snapshot: number; - project: ProjectId; - locations: readonly string[] | null; -} - -export interface GetTypeAtPositionParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - position: number; -} - -export interface GetTypesAtPositionsParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - positions: readonly number[] | null; -} - -/** GetSymbolPropertyParams is used for all symbol sub-property endpoints. */ -export interface GetSymbolPropertyParams { - symbol: SymbolReference; -} - -/** GetTypePropertyParams is used for all type sub-property endpoints. */ -export interface GetTypePropertyParams { - snapshot: number; - project: ProjectId; - objectId: number; -} - -/** GetSignaturePropertyParams is used for all signature sub-property endpoints. */ -export interface GetSignaturePropertyParams { - snapshot: number; - project: ProjectId; - objectId: number; -} - -/** GetContextualTypeParams returns the contextual type for a node. */ -export interface GetContextualTypeParams { - snapshot: number; - project: ProjectId; - location: string; -} - -export interface GetContextualTypeForArgumentParams { - snapshot: number; - project: ProjectId; - location: string; - index: number; -} - -/** CheckerTypeParams are parameters for checker methods that operate on a type. */ -export interface CheckerTypeParams { - snapshot: number; - project: ProjectId; - type: number; -} - -/** GetBaseTypeOfLiteralTypeParams returns the base type of a literal type. */ -export interface GetBaseTypeOfLiteralTypeParams { - snapshot: number; - project: ProjectId; - type: number; -} - -/** GetTypeFromTypeNodeParams are the parameters for the getTypeFromTypeNode method. */ -export interface GetTypeFromTypeNodeParams { - snapshot: number; - project: ProjectId; - location: string; -} - -/** GetWidenedTypeParams are the parameters for the getWidenedType method. */ -export interface GetWidenedTypeParams { - snapshot: number; - project: ProjectId; - type: number; -} - -/** GetParameterTypeParams are the parameters for the getParameterType method. */ -export interface GetParameterTypeParams { - snapshot: number; - project: ProjectId; - signature: number; - index: number; -} - -/** IsArrayLikeTypeParams checks whether a type is array-like. */ -export interface IsArrayLikeTypeParams { - snapshot: number; - project: ProjectId; - type: number; -} - -/** IsTypeAssignableToParams checks assignability between two types. */ -export interface IsTypeAssignableToParams { - snapshot: number; - project: ProjectId; - source: number; - target: number; -} - -/** GetTypeOfSymbolAtLocationParams returns the narrowed type of a symbol at a specific location. */ -export interface GetTypeOfSymbolAtLocationParams { - snapshot: number; - project: ProjectId; - symbol: SymbolReference; - location: string; -} - -/** TypeToTypeNodeParams are the parameters for the typeToTypeNode method. */ -export interface TypeToTypeNodeParams { - snapshot: number; - project: ProjectId; - type: number; - location?: string | undefined; - flags?: number | undefined; -} - -/** SignatureToSignatureDeclarationParams are the parameters for the signatureToSignatureDeclaration method. */ -export interface SignatureToSignatureDeclarationParams { - snapshot: number; - project: ProjectId; - signature: number; - kind: number; - location?: string | undefined; - flags?: number | undefined; -} - -/** CheckerSignatureParams are parameters for checker methods that operate on a signature. */ -export interface CheckerSignatureParams { - snapshot: number; - project: ProjectId; - signature: number; -} - -/** TypePredicateResponse is the response for getTypePredicateOfSignature. */ -export interface TypePredicateResponse { - kind: number; - parameterIndex: number; - parameterName?: string | undefined; - type?: TypeResponse | undefined; -} - -/** GetPropertyOfTypeParams are parameters for getPropertyOfType (a named property of a type). */ -export interface GetPropertyOfTypeParams { - snapshot: number; - project: ProjectId; - type: number; - name: string; -} - -export interface GetIndexInfoOfTypeParams { - snapshot: number; - project: ProjectId; - type: number; - kind: number; -} - -/** IndexInfoResponse represents a single index signature. */ -export interface IndexInfoResponse { - keyType: TypeResponse; - valueType: TypeResponse; - isReadonly?: boolean | undefined; - declaration?: string | undefined; -} - -export interface GetImportAdderEditsParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - actions: readonly ImportAdderAction[] | null; -} - -export interface TextEdit { - pos: number; - end: number; - newText: string; -} - -/** CheckerNodeParams are parameters for checker methods that operate on a node location. */ -export interface CheckerNodeParams { - snapshot: number; - project: ProjectId; - location: string; -} - -export interface ConstantValueResponse { - isNumber: boolean; - value: unknown; -} - -/** CheckerSymbolParams are parameters for checker methods that operate on a symbol. */ -export interface CheckerSymbolParams { - snapshot: number; - project: ProjectId; - symbol: SymbolReference; -} - -/** GetMemberInModuleExportsParams are parameters for getMemberInModuleExports. */ -export interface GetMemberInModuleExportsParams { - snapshot: number; - project: ProjectId; - symbol: SymbolReference; - name: string; -} - -/** - * JSDocTagInfo is a single JSDoc tag, mirroring Strada's JSDocTagInfo but with the tag text - * rendered as a plain string rather than SymbolDisplayPart[]. - */ -export interface JSDocTagInfo { - name: string; - text?: string | undefined; -} - -/** GetReferencesToSymbolInFileParams are the parameters for the getReferencesToSymbolInFile method. */ -export interface GetReferencesToSymbolInFileParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - symbol: SymbolReference; -} - -/** GetReferencedSymbolsForNodeParams are the parameters for the getReferencedSymbolsForNode method. */ -export interface GetReferencedSymbolsForNodeParams { - snapshot: number; - project: ProjectId; - node: string; - position: number; -} - -/** ReferencedSymbolEntry represents a symbol definition and its references. */ -export interface ReferencedSymbolEntry { - definition: string; - symbol?: SymbolResponse | undefined; - references: string[]; -} - -/** GetSignatureUsagesParams are the parameters for the getSignatureUsages method. */ -export interface GetSignatureUsagesParams { - snapshot: number; - project: ProjectId; - signatureDecl: string; -} - -/** SignatureUsageResponse represents a single usage of a signature as a name-call pair. */ -export interface SignatureUsageResponse { - name: string; - call?: string | undefined; -} - -/** GetCompletionsAtPositionParams are the parameters for the getCompletionsAtPosition method. */ -export interface GetCompletionsAtPositionParams { - snapshot: number; - project: ProjectId; - file: DocumentIdentifier; - position: number; - triggerCharacter?: string | undefined; - includeSymbol?: boolean | undefined; -} - -/** CompletionInfoResponse wraps a list of completion entries. */ -export interface CompletionInfoResponse { - isIncomplete: boolean; - entries: CompletionEntryResponse[]; -} - -/** GetDiagnosticsParams are parameters for per-file diagnostic methods. */ -export interface GetDiagnosticsParams { - snapshot: number; - project: ProjectId; - files?: readonly DocumentIdentifier[] | undefined; -} - -/** DiagnosticResponse is the API response for a single diagnostic. */ -export interface DiagnosticResponse { - /** The file name of the file this diagnostic belongs to, if any. */ - fileName?: RootedFilePath | undefined; - /** Pos is the start position of the diagnostic in the source file. */ - pos: number; - /** End is the end position of the diagnostic in the source file. */ - end: number; - /** StartPosition is the zero-based line and UTF-16 character position of Pos. */ - startPosition?: DiagnosticPositionResponse | undefined; - /** EndPosition is the zero-based line and UTF-16 character position of End. */ - endPosition?: DiagnosticPositionResponse | undefined; - /** SourceLines contains the source lines needed to render this diagnostic with context. */ - sourceLines?: DiagnosticSourceLineResponse[] | undefined; - /** Code is the diagnostic error code. */ - code: number; - /** Category is the diagnostic category (error, warning, suggestion, message). */ - category: number; - /** Source is a custom diagnostic-code prefix. An empty value uses the default "TS". */ - source?: string | undefined; - /** Text is the localized diagnostic message text. */ - text: string; - /** ReportsUnnecessary indicates this diagnostic highlights unnecessary code. */ - reportsUnnecessary?: boolean | undefined; - /** ReportsDeprecated indicates this diagnostic highlights deprecated code. */ - reportsDeprecated?: boolean | undefined; - /** MessageChain contains chained diagnostic messages, if any. */ - messageChain?: DiagnosticResponse[] | undefined; - /** RelatedInformation contains related diagnostic information, if any. */ - relatedInformation?: DiagnosticResponse[] | undefined; -} - -/** PrintNodeParams are the parameters for the printNode method. */ -export interface PrintNodeParams { - /** base64-encoded binary AST data */ - data: string; - preserveSourceNewlines?: boolean | undefined; - neverAsciiEscape?: boolean | undefined; - terminateUnterminatedLiterals?: boolean | undefined; -} - -/** FormatNodeForInsertionParams are the parameters for the formatNodeForInsertion method. */ -export interface FormatNodeForInsertionParams { - snapshot: number; - project: ProjectId; - /** target file where the node will be inserted */ - file: DocumentIdentifier; - /** UTF-16 code-unit offset of the insertion position in the target file */ - position: number; - /** base64-encoded binary AST data for the synthesized node */ - data: string; -} - -export interface EmitParams { - snapshot: number; - project: ProjectId; - emitOnly?: number | undefined; -} - -export interface EmitResponse { - emitSkipped: boolean; - diagnostics: DiagnosticResponse[]; - emittedFiles: RootedFilePath[]; - /** - * EmittedFilesContents contains contents parallel to EmittedFiles when the - * source snapshot uses a full filesystem. It is empty for write-through emits. - */ - emittedFilesContents: string[]; -} - -export interface EmitOutputResponse { - emitSkipped: boolean; - diagnostics: DiagnosticResponse[]; - outputFiles: EmitOutputFile[]; -} - -export interface SelectedFilesEmitParams { - snapshot: number; - project: ProjectId; - files: readonly DocumentIdentifier[] | null; -} - -/** GetIntrinsicTypeParams is used for intrinsic type getters (anyType, stringType, etc.). */ -export interface GetIntrinsicTypeParams { - snapshot: number; - project: ProjectId; -} - -/** - * WellKnownSymbolsResponse carries the handle ids of the per-checker singleton - * symbols (unknown, undefined, arguments) so the client can identify them by id - * without a round-trip on every check. - */ -export interface WellKnownSymbolsResponse { - unknown: number; - undefined: number; - arguments: number; -} - -/** - * WellKnownSignaturesResponse carries the handle id of the per-checker singleton - * unknown signature (the signature the checker yields when a call cannot be - * resolved) so the client can identify it by id without a round-trip on every check. - */ -export interface WellKnownSignaturesResponse { - unknown: number; -} - -export interface ProfileParams { - dir: string; -} - -export interface ProfileResult { - file: RootedFilePath; -} - -export interface SourceFileDescriptor { - fileName: RootedFilePath; - path: PathKey; - contentHash: string; - parseOptionsKey: string; - scriptKind: ScriptKind; - nodeId: string; -} - -/** SymbolReference identifies a symbol and its server-resolvable owner. */ -export interface SymbolReference extends SymbolOwner { - id: number; -} - -/** - * CompactSymbolReference is embedded in other responses. It identifies a cached - * symbol without repeating its owning file's full descriptor: File is the owning source file's - * node ID, or empty for a symbol owned by the response's snapshot. When the client has not cached - * the symbol, it fetches a full SymbolResponse through the corresponding property method. - */ -export interface CompactSymbolReference { - id: number; - file?: string | undefined; -} - -export interface BatchRequest { - method: - | "batchRequests" - | "build" - | "buildReferences" - | "cleanBuild" - | "cleanReferences" - | "createBuildOrchestrator" - | "createModuleResolver" - | "createSnapshot" - | "createSourceFile" - | "createSourceFileFromFile" - | "disposeBuildOrchestrator" - | "emit" - | "emitToString" - | "formatNodeForInsertion" - | "getAliasSymbolOfType" - | "getAliasTypeArgumentsOfType" - | "getAliasedSymbol" - | "getAnyType" - | "getApparentPropertiesOfType" - | "getApparentType" - | "getAwaitedType" - | "getBaseConstraintOfType" - | "getBaseTypeOfLiteralType" - | "getBaseTypeOfType" - | "getBaseTypes" - | "getBigIntType" - | "getBindDiagnostics" - | "getBooleanType" - | "getCachedSourceFile" - | "getCheckTypeOfType" - | "getCompletionsAtPosition" - | "getConfigFileNames" - | "getConfigFileParsingDiagnostics" - | "getConfigSourceFile" - | "getConstantValue" - | "getConstraintOfType" - | "getConstraintOfTypeParameter" - | "getConstraintTypeOfMappedType" - | "getContextualType" - | "getContextualTypeForArgument" - | "getCurrentLanguageServerSnapshot" - | "getDeclarationDiagnostics" - | "getDeclarationEmit" - | "getDeclaredTypeOfSymbol" - | "getDefaultFromTypeParameter" - | "getDefaultProjectForFile" - | "getDocumentationComment" - | "getESSymbolType" - | "getExportSpecifierLocalTargetSymbol" - | "getExportSymbolOfSymbol" - | "getExportSymbolOfSymbolForChecker" - | "getExportsOfModule" - | "getExportsOfSymbol" - | "getExtendsTypeOfType" - | "getFalseTypeOfConditionalType" - | "getFreshTypeOfType" - | "getFullyQualifiedName" - | "getGlobalDiagnostics" - | "getImmediateAliasedSymbol" - | "getImportAdderEdits" - | "getIndexInfoOfType" - | "getIndexInfosOfType" - | "getIndexTypeOfType" - | "getJavaScriptEmit" - | "getJsDocTags" - | "getLocalTypeParametersOfType" - | "getMemberInModuleExports" - | "getMembersOfSymbol" - | "getMergedSymbol" - | "getModeForResolutionAtIndex" - | "getModeForUsageLocation" - | "getNameTypeOfMappedType" - | "getNeverType" - | "getNonMissingTypeOfSymbol" - | "getNonNullableType" - | "getNonPrimitiveType" - | "getNullType" - | "getNumberType" - | "getObjectTypeOfType" - | "getOuterTypeParametersOfType" - | "getParameterType" - | "getParametersOfSignature" - | "getParentOfSymbol" - | "getParentOfSymbolForChecker" - | "getProgramDiagnostics" - | "getPropertiesOfType" - | "getPropertyOfType" - | "getReducedType" - | "getReferencedSymbolsForNode" - | "getReferencesToSymbolInFile" - | "getRegularTypeOfType" - | "getResolvedModule" - | "getResolvedModuleFromModuleSpecifier" - | "getResolvedSignature" - | "getResolvedTypeReferenceDirective" - | "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective" - | "getRestTypeOfSignature" - | "getReturnTypeOfSignature" - | "getSemanticDiagnostics" - | "getShorthandAssignmentValueSymbol" - | "getSignatureFromDeclaration" - | "getSignatureUsages" - | "getSignaturesOfType" - | "getSourceFile" - | "getSourceFileMetadata" - | "getSourceFileNames" - | "getStringType" - | "getSuggestionDiagnostics" - | "getSymbolAtLocation" - | "getSymbolAtPosition" - | "getSymbolOfDeclaration" - | "getSymbolOfDeclarationForChecker" - | "getSymbolOfNode" - | "getSymbolOfSourceFile" - | "getSymbolOfType" - | "getSymbolsAtLocations" - | "getSymbolsAtPositions" - | "getSymbolsInScope" - | "getSymbolsOfSourceFiles" - | "getSyntacticDiagnostics" - | "getTargetOfSignature" - | "getTargetOfType" - | "getTargetSymbol" - | "getTemplateTypeOfMappedType" - | "getThisParameterOfSignature" - | "getThisTypeOfType" - | "getTrueTypeOfConditionalType" - | "getTypeArguments" - | "getTypeAtLocation" - | "getTypeAtLocations" - | "getTypeAtPosition" - | "getTypeFromTypeNode" - | "getTypeOfPropertyOfType" - | "getTypeOfSymbol" - | "getTypeOfSymbolAtLocation" - | "getTypeParameterAtPosition" - | "getTypeParameterOfMappedType" - | "getTypeParametersOfSignature" - | "getTypeParametersOfType" - | "getTypePredicateOfSignature" - | "getTypesAtPositions" - | "getTypesOfSymbols" - | "getTypesOfType" - | "getUndefinedType" - | "getUnknownType" - | "getVoidType" - | "getWellKnownSignatures" - | "getWellKnownSymbols" - | "getWidenedType" - | "initialize" - | "isArrayLikeType" - | "isArrayType" - | "isContextSensitive" - | "isReadonlySymbol" - | "isTypeAssignableTo" - | "parseCommandLine" - | "parseConfigFile" - | "parseJsonConfigFileContent" - | "printNode" - | "readConfigFile" - | "release" - | "releaseModuleResolver" - | "releaseSourceFile" - | "resolveModuleName" - | "resolveName" - | "retainSourceFile" - | "saveHeapProfile" - | "signatureToSignatureDeclaration" - | "startCPUProfile" - | "stopCPUProfile" - | "transpileDeclaration" - | "transpileDeclarationFromFile" - | "transpileModule" - | "transpileModuleFromFile" - | "typeToString" - | "typeToTypeNode" - | "updateSnapshot"; - params?: unknown | undefined; -} - -export interface BatchResponse { - method: - | "batchRequests" - | "build" - | "buildReferences" - | "cleanBuild" - | "cleanReferences" - | "createBuildOrchestrator" - | "createModuleResolver" - | "createSnapshot" - | "createSourceFile" - | "createSourceFileFromFile" - | "disposeBuildOrchestrator" - | "emit" - | "emitToString" - | "formatNodeForInsertion" - | "getAliasSymbolOfType" - | "getAliasTypeArgumentsOfType" - | "getAliasedSymbol" - | "getAnyType" - | "getApparentPropertiesOfType" - | "getApparentType" - | "getAwaitedType" - | "getBaseConstraintOfType" - | "getBaseTypeOfLiteralType" - | "getBaseTypeOfType" - | "getBaseTypes" - | "getBigIntType" - | "getBindDiagnostics" - | "getBooleanType" - | "getCachedSourceFile" - | "getCheckTypeOfType" - | "getCompletionsAtPosition" - | "getConfigFileNames" - | "getConfigFileParsingDiagnostics" - | "getConfigSourceFile" - | "getConstantValue" - | "getConstraintOfType" - | "getConstraintOfTypeParameter" - | "getConstraintTypeOfMappedType" - | "getContextualType" - | "getContextualTypeForArgument" - | "getCurrentLanguageServerSnapshot" - | "getDeclarationDiagnostics" - | "getDeclarationEmit" - | "getDeclaredTypeOfSymbol" - | "getDefaultFromTypeParameter" - | "getDefaultProjectForFile" - | "getDocumentationComment" - | "getESSymbolType" - | "getExportSpecifierLocalTargetSymbol" - | "getExportSymbolOfSymbol" - | "getExportSymbolOfSymbolForChecker" - | "getExportsOfModule" - | "getExportsOfSymbol" - | "getExtendsTypeOfType" - | "getFalseTypeOfConditionalType" - | "getFreshTypeOfType" - | "getFullyQualifiedName" - | "getGlobalDiagnostics" - | "getImmediateAliasedSymbol" - | "getImportAdderEdits" - | "getIndexInfoOfType" - | "getIndexInfosOfType" - | "getIndexTypeOfType" - | "getJavaScriptEmit" - | "getJsDocTags" - | "getLocalTypeParametersOfType" - | "getMemberInModuleExports" - | "getMembersOfSymbol" - | "getMergedSymbol" - | "getModeForResolutionAtIndex" - | "getModeForUsageLocation" - | "getNameTypeOfMappedType" - | "getNeverType" - | "getNonMissingTypeOfSymbol" - | "getNonNullableType" - | "getNonPrimitiveType" - | "getNullType" - | "getNumberType" - | "getObjectTypeOfType" - | "getOuterTypeParametersOfType" - | "getParameterType" - | "getParametersOfSignature" - | "getParentOfSymbol" - | "getParentOfSymbolForChecker" - | "getProgramDiagnostics" - | "getPropertiesOfType" - | "getPropertyOfType" - | "getReducedType" - | "getReferencedSymbolsForNode" - | "getReferencesToSymbolInFile" - | "getRegularTypeOfType" - | "getResolvedModule" - | "getResolvedModuleFromModuleSpecifier" - | "getResolvedSignature" - | "getResolvedTypeReferenceDirective" - | "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective" - | "getRestTypeOfSignature" - | "getReturnTypeOfSignature" - | "getSemanticDiagnostics" - | "getShorthandAssignmentValueSymbol" - | "getSignatureFromDeclaration" - | "getSignatureUsages" - | "getSignaturesOfType" - | "getSourceFile" - | "getSourceFileMetadata" - | "getSourceFileNames" - | "getStringType" - | "getSuggestionDiagnostics" - | "getSymbolAtLocation" - | "getSymbolAtPosition" - | "getSymbolOfDeclaration" - | "getSymbolOfDeclarationForChecker" - | "getSymbolOfNode" - | "getSymbolOfSourceFile" - | "getSymbolOfType" - | "getSymbolsAtLocations" - | "getSymbolsAtPositions" - | "getSymbolsInScope" - | "getSymbolsOfSourceFiles" - | "getSyntacticDiagnostics" - | "getTargetOfSignature" - | "getTargetOfType" - | "getTargetSymbol" - | "getTemplateTypeOfMappedType" - | "getThisParameterOfSignature" - | "getThisTypeOfType" - | "getTrueTypeOfConditionalType" - | "getTypeArguments" - | "getTypeAtLocation" - | "getTypeAtLocations" - | "getTypeAtPosition" - | "getTypeFromTypeNode" - | "getTypeOfPropertyOfType" - | "getTypeOfSymbol" - | "getTypeOfSymbolAtLocation" - | "getTypeParameterAtPosition" - | "getTypeParameterOfMappedType" - | "getTypeParametersOfSignature" - | "getTypeParametersOfType" - | "getTypePredicateOfSignature" - | "getTypesAtPositions" - | "getTypesOfSymbols" - | "getTypesOfType" - | "getUndefinedType" - | "getUnknownType" - | "getVoidType" - | "getWellKnownSignatures" - | "getWellKnownSymbols" - | "getWidenedType" - | "initialize" - | "isArrayLikeType" - | "isArrayType" - | "isContextSensitive" - | "isReadonlySymbol" - | "isTypeAssignableTo" - | "parseCommandLine" - | "parseConfigFile" - | "parseJsonConfigFileContent" - | "printNode" - | "readConfigFile" - | "release" - | "releaseModuleResolver" - | "releaseSourceFile" - | "resolveModuleName" - | "resolveName" - | "retainSourceFile" - | "saveHeapProfile" - | "signatureToSignatureDeclaration" - | "startCPUProfile" - | "stopCPUProfile" - | "transpileDeclaration" - | "transpileDeclarationFromFile" - | "transpileModule" - | "transpileModuleFromFile" - | "typeToString" - | "typeToTypeNode" - | "updateSnapshot"; - result: unknown; - error?: string | undefined; -} - -/** - * SnapshotRequestChangesParams describes project, file, and program changes to apply - * while creating or updating a snapshot. - */ -export interface SnapshotRequestChangesParams { - /** OpenProjects lists tsconfig.json files to open/load in the new snapshot. */ - openProjects?: readonly DocumentIdentifier[] | undefined; - /** - * CloseProjects lists tsconfig.json files to release in the new snapshot. - * A project is only unloaded once every API client that opened it closes it. - */ - closeProjects?: readonly DocumentIdentifier[] | undefined; - /** - * OpenFiles lists files to open in the new snapshot, mirroring LSP's - * textDocument/didOpen. For each file, ancestor directories are searched for a - * tsconfig that contains it; if found, that configured project is loaded and - * becomes the file's default project. Otherwise the file is loaded into the - * inferred project (e.g. a node_modules d.ts not in any project's import graph). - * If a file cannot be loaded into any project, the request fails. - */ - openFiles?: readonly DocumentIdentifier[] | undefined; - /** - * CloseFiles lists files to release in the new snapshot. A file is only fully - * closed once every API client that opened it closes it. - */ - closeFiles?: readonly DocumentIdentifier[] | undefined; - /** CreatePrograms describes synthetic programs to create in the snapshot. */ - createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; - /** ReconfigurePrograms replaces the configuration of existing synthetic programs. */ - reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; - /** RemovePrograms lists synthetic project handles to remove from the snapshot. */ - removePrograms?: readonly SyntheticProjectId[] | undefined; - /** - * EnsurePrograms identifies projects whose programs should be updated if dirty, - * or all contained projects when true. - */ - ensurePrograms?: EnsurePrograms | undefined; -} - -/** - * FileNotifications describes changes to files that have occurred on the host - * file system, used to notify the session to reload cached files and reevaluate - * tsconfig.json `include` globs. Either InvalidateAll is true (discard all caches) - * or Changed/Created/Deleted list individual documents. - */ -export interface FileNotifications { - invalidateAll?: boolean | undefined; - changed?: DocumentIdentifier[] | undefined; - created?: DocumentIdentifier[] | undefined; - deleted?: DocumentIdentifier[] | undefined; -} - -/** - * RequestFileSystem supplies file contents and, optionally, directory listings - * for a request that creates a snapshot. - */ -export interface RequestFileSystem { - kind: "full" | "layer"; - /** Files maps file names to their complete contents. */ - files: Record; - /** - * Directories maps directory names to complete listing results. Directory - * structure implied by Files is derived when a listing is omitted. - */ - directories?: Record | undefined; - /** Symlinks maps link paths to targets in this filesystem or the host filesystem. */ - symlinks?: Record | undefined; - /** - * RemovedPaths lists files or directory trees that must be treated as missing - * even when present in an underlying snapshot or host filesystem. - */ - removedPaths?: string[] | undefined; -} - -/** - * SnapshotChanges describes what changed between a response base and a new - * snapshot. Changes are reported per-project so clients - * can track cache refs at the (snapshot, project) level. - */ -export interface SnapshotChanges { - /** - * ChangedProjects maps project handles to the file changes within that project. - * Projects not listed here (and not in RemovedProjects) are unchanged. - */ - changedProjects?: Record | undefined; - /** - * RemovedProjects lists project handles that were present in the previous - * snapshot but absent from the new one. - */ - removedProjects?: ProjectId[] | undefined; -} - -export interface SnapshotOperationResponse { - createdPrograms?: SyntheticProjectId[] | undefined; - openedFiles?: OpenedFileOperationResult[] | undefined; -} - -/** - * LanguageServerSnapshotChanges describes API-driven changes to adopt into the - * language server's canonical state. - */ -export interface LanguageServerSnapshotChanges extends SnapshotRequestChangesParams { -} - -export interface BuildOptions { - dry?: boolean | undefined; - force?: boolean | undefined; - verbose?: boolean | undefined; - builders?: number | undefined; - stopBuildOnErrors?: boolean | undefined; - clean?: boolean | undefined; -} - -export interface Statistics { - Projects: number; - ProjectsBuilt: number; - TimestampUpdates: number; -} - -export interface ModuleResolutionSpec { - fallback: "resolve" | "unresolved"; - entries: ModuleResolutionEntry[]; -} - -export interface ProjectReference { - /** Path is a normalized path on disk. */ - path: RootedPath; - /** OriginalPath is the path as it was originally written. */ - originalPath?: string | undefined; - /** Circular indicates that this reference is intended to form a circularity. */ - circular?: boolean | undefined; -} - -export interface TypeAcquisition { - enable?: boolean | undefined; - include?: string[] | undefined; - exclude?: string[] | undefined; - disableFilenameBasedTypeAcquisition?: boolean | undefined; -} - -export interface CreateSourceFileOptions { - scriptKind?: ScriptKind | undefined; -} - -export interface TranspileOptions { - compilerOptions?: RawCompilerOptions | undefined; - fileName?: string | undefined; - reportDiagnostics?: boolean | undefined; -} - -export interface PackageId { - name: string; - subModuleName: string; - version: string; - peerDependencies: string; -} - -export interface ImportAdderAction { - kind: "importSymbol"; - symbol?: SymbolReference | undefined; - isValidTypeOnlyUseSite?: boolean | undefined; -} - -/** CompletionEntryResponse represents a single completion item. */ -export interface CompletionEntryResponse { - name: string; - kind?: number | undefined; - sortText?: string | undefined; - insertText?: string | undefined; - filterText?: string | undefined; - detail?: string | undefined; - labelDetails?: CompletionEntryLabelDetailsResponse | undefined; - symbol?: SymbolResponse | undefined; -} - -export interface DiagnosticPositionResponse { - line: number; - character: number; -} - -export interface DiagnosticSourceLineResponse { - line: number; - text: string; -} - -export interface EmitOutputFile { - fileName: RootedFilePath; - text: string; - sourceFileName?: RootedFilePath | undefined; -} - -export interface SymbolOwner { - kind: SymbolOwnerKind; - file?: SourceFileDescriptor | undefined; - snapshot?: number | undefined; - project?: ProjectId | undefined; -} - -export interface CreateSnapshotProgramParams { - rootFiles: readonly DocumentIdentifier[] | null; - compilerOptions: RawCompilerOptions; - options?: CreateProgramOptions | undefined; -} - -export interface ReconfigureSnapshotProgramParams { - id: SyntheticProjectId; - rootFiles: readonly DocumentIdentifier[] | null; - compilerOptions: RawCompilerOptions; - options?: CreateProgramOptions | undefined; -} - -/** - * RequestDirectoryEntries is a cached directory listing. Entry names are - * relative to the directory, matching vfs.GetAccessibleEntries. - */ -export interface RequestDirectoryEntries { - files: string[]; - directories: string[]; -} - -/** RequestSymlink describes a symbolic link in a request filesystem. */ -export interface RequestSymlink { - /** - * Target is resolved relative to the directory containing the link, matching - * native symbolic-link semantics. - */ - target: string; - /** - * Host routes the target through the host filesystem. This is the only way a - * full filesystem can access paths not supplied in the request filesystem. - */ - host?: boolean | undefined; -} - -/** ProjectFileChanges describes what source files changed within a single project. */ -export interface ProjectFileChanges { - /** ChangedFiles lists source file paths whose content differs. */ - changedFiles?: PathKey[] | undefined; - /** DeletedFiles lists source file paths removed from the project's program. */ - deletedFiles?: PathKey[] | undefined; -} - -export interface OpenedFileOperationResult { - project: ProjectId; -} - -export interface ModuleResolutionEntry { - moduleName: string; - containingDirectory?: DocumentIdentifier | undefined; - resolutionMode?: ResolutionMode | undefined; - result: StaticModuleResolution; -} - -/** CompletionEntryLabelDetailsResponse holds additional label display text for a completion entry. */ -export interface CompletionEntryLabelDetailsResponse { - detail?: string | undefined; - description?: string | undefined; -} - -export interface CreateProgramOptions { - projectReferences?: ProjectReference[] | undefined; - configFileParsingDiagnostics?: DiagnosticResponse[] | undefined; - moduleResolver?: number | undefined; -} - -export interface StaticModuleResolution { - resolvedFileName?: DocumentIdentifier | undefined; - originalPath?: DocumentIdentifier | undefined; - packageId?: PackageId | undefined; -} - -/** - * RawCompilerOptions is the JSON/API representation of compiler options. - * Filesystem paths remain strings until Finalize resolves them against a base - * directory and constructs a CompilerOptions with typed path guarantees. - */ -export interface RawCompilerOptions { - allowJs?: boolean | undefined; - allowArbitraryExtensions?: boolean | undefined; - allowImportingTsExtensions?: boolean | undefined; - allowNonTsExtensions?: boolean | undefined; - allowUmdGlobalAccess?: boolean | undefined; - allowUnreachableCode?: boolean | undefined; - allowUnusedLabels?: boolean | undefined; - assumeChangesOnlyAffectDirectDependencies?: boolean | undefined; - checkJs?: boolean | undefined; - customConditions?: string[] | undefined; - composite?: boolean | undefined; - emitDeclarationOnly?: boolean | undefined; - emitBOM?: boolean | undefined; - emitDecoratorMetadata?: boolean | undefined; - declaration?: boolean | undefined; - declarationDir?: string | undefined; - declarationMap?: boolean | undefined; - deduplicatePackages?: boolean | undefined; - disableSizeLimit?: boolean | undefined; - disableSourceOfProjectReferenceRedirect?: boolean | undefined; - disableSolutionSearching?: boolean | undefined; - disableReferencedProjectLoad?: boolean | undefined; - erasableSyntaxOnly?: boolean | undefined; - exactOptionalPropertyTypes?: boolean | undefined; - experimentalDecorators?: boolean | undefined; - forceConsistentCasingInFileNames?: boolean | undefined; - isolatedModules?: boolean | undefined; - isolatedDeclarations?: boolean | undefined; - ignoreConfig?: boolean | undefined; - ignoreDeprecations?: string | undefined; - importHelpers?: boolean | undefined; - inlineSourceMap?: boolean | undefined; - inlineSources?: boolean | undefined; - init?: boolean | undefined; - incremental?: boolean | undefined; - jsx?: JsxEmit | undefined; - jsxFactory?: string | undefined; - jsxFragmentFactory?: string | undefined; - jsxImportSource?: string | undefined; - lib?: string[] | undefined; - libReplacement?: boolean | undefined; - locale?: string | undefined; - mapRoot?: string | undefined; - module?: ModuleKind | undefined; - moduleResolution?: ModuleResolutionKind | undefined; - moduleSuffixes?: string[] | undefined; - moduleDetection?: ModuleDetectionKind | undefined; - newLine?: NewLineKind | undefined; - noEmit?: boolean | undefined; - noCheck?: boolean | undefined; - noErrorTruncation?: boolean | undefined; - noFallthroughCasesInSwitch?: boolean | undefined; - noImplicitAny?: boolean | undefined; - noImplicitThis?: boolean | undefined; - noImplicitReturns?: boolean | undefined; - noEmitHelpers?: boolean | undefined; - noLib?: boolean | undefined; - noPropertyAccessFromIndexSignature?: boolean | undefined; - noUncheckedIndexedAccess?: boolean | undefined; - noEmitOnError?: boolean | undefined; - noUnusedLocals?: boolean | undefined; - noUnusedParameters?: boolean | undefined; - noResolve?: boolean | undefined; - noImplicitOverride?: boolean | undefined; - noUncheckedSideEffectImports?: boolean | undefined; - outDir?: string | undefined; - paths?: Record | undefined; - /** Plugins are parsed only so tools can report that native TypeScript does not support them. */ - plugins?: PluginImport[] | undefined; - preserveConstEnums?: boolean | undefined; - preserveSymlinks?: boolean | undefined; - project?: string | undefined; - resolveJsonModule?: boolean | undefined; - resolvePackageJsonExports?: boolean | undefined; - resolvePackageJsonImports?: boolean | undefined; - removeComments?: boolean | undefined; - rewriteRelativeImportExtensions?: boolean | undefined; - reactNamespace?: string | undefined; - rootDir?: string | undefined; - rootDirs?: string[] | undefined; - skipLibCheck?: boolean | undefined; - stableTypeOrdering?: boolean | undefined; - strict?: boolean | undefined; - strictBindCallApply?: boolean | undefined; - strictBuiltinIteratorReturn?: boolean | undefined; - strictFunctionTypes?: boolean | undefined; - strictNullChecks?: boolean | undefined; - strictPropertyInitialization?: boolean | undefined; - stripInternal?: boolean | undefined; - skipDefaultLibCheck?: boolean | undefined; - sourceMap?: boolean | undefined; - sourceRoot?: string | undefined; - suppressOutputPathCheck?: boolean | undefined; - target?: ScriptTarget | undefined; - traceResolution?: boolean | undefined; - tsBuildInfoFile?: string | undefined; - typeRoots?: string[] | undefined; - types?: string[] | undefined; - useDefineForClassFields?: boolean | undefined; - useUnknownInCatchVariables?: boolean | undefined; - verbatimModuleSyntax?: boolean | undefined; - maxNodeModuleJsDepth?: number | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - allowSyntheticDefaultImports?: boolean | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - alwaysStrict?: boolean | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - baseUrl?: string | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - downlevelIteration?: boolean | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - esModuleInterop?: boolean | undefined; - /** @deprecated Do not use outside of options parsing and validation. */ - outFile?: string | undefined; - configFilePath?: string | undefined; - noDtsResolution?: boolean | undefined; - pathsBasePath?: string | undefined; - diagnostics?: boolean | undefined; - extendedDiagnostics?: boolean | undefined; - generateCpuProfile?: string | undefined; - generateTrace?: string | undefined; - listEmittedFiles?: boolean | undefined; - listFiles?: boolean | undefined; - explainFiles?: boolean | undefined; - listFilesOnly?: boolean | undefined; - noEmitForJsFiles?: boolean | undefined; - preserveWatchOutput?: boolean | undefined; - pretty?: boolean | undefined; - version?: boolean | undefined; - watch?: boolean | undefined; - showConfig?: boolean | undefined; - build?: boolean | undefined; - help?: boolean | undefined; - all?: boolean | undefined; - runExternalCode?: boolean | undefined; - pprofDir?: string | undefined; - singleThreaded?: boolean | undefined; - quiet?: boolean | undefined; - checkers?: number | undefined; -} +// Code generated by gen-proto; DO NOT EDIT. + +import { CaseSensitivity } from "#enums/caseSensitivity"; +import { JsxEmit } from "#enums/jsxEmit"; +import { ModuleDetectionKind } from "#enums/moduleDetectionKind"; +import { ModuleKind } from "#enums/moduleKind"; +import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +import { NewLineKind } from "#enums/newLineKind"; +import { ScriptKind } from "#enums/scriptKind"; +import { ScriptTarget } from "#enums/scriptTarget"; +import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; +import type { + PathKey, + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../ast/index.ts"; +import type { + CompilerOptions, + PluginImport, +} from "./compilerOptions.generated.ts"; +import type { UserPreferences } from "./userPreferences.generated.ts"; + +export { CaseSensitivity } from "#enums/caseSensitivity"; +export { JsxEmit } from "#enums/jsxEmit"; +export { ModuleDetectionKind } from "#enums/moduleDetectionKind"; +export { ModuleKind } from "#enums/moduleKind"; +export { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +export { NewLineKind } from "#enums/newLineKind"; +export { ScriptKind } from "#enums/scriptKind"; +export { ScriptTarget } from "#enums/scriptTarget"; +export { SymbolOwnerKind } from "#enums/symbolOwnerKind"; +export type { PathKey, RootedDirectoryPath, RootedFilePath, RootedPath } from "../ast/index.ts"; +export type { CompilerOptions, PluginImport } from "./compilerOptions.generated.ts"; +export * from "./compilerOptions.generated.ts"; +export type { UserPreferences } from "./userPreferences.generated.ts"; + +export type APIMethod = { params: TParams; result: TResult; }; + +export interface APIMethodInfo { + release: APIMethod; + releaseSourceFile: APIMethod; + retainSourceFile: APIMethod; + getCachedSourceFile: APIMethod; + getSymbolOfDeclaration: APIMethod; + batchRequests: APIMethod; + initialize: APIMethod; + createSnapshot: APIMethod; + updateSnapshot: APIMethod; + getCurrentLanguageServerSnapshot: APIMethod; + createBuildOrchestrator: APIMethod; + disposeBuildOrchestrator: APIMethod; + build: APIMethod; + buildReferences: APIMethod; + cleanBuild: APIMethod; + cleanReferences: APIMethod; + createModuleResolver: APIMethod; + releaseModuleResolver: APIMethod; + resolveModuleName: APIMethod; + parseCommandLine: APIMethod; + readConfigFile: APIMethod; + parseJsonConfigFileContent: APIMethod; + parseConfigFile: APIMethod; + createSourceFile: APIMethod; + createSourceFileFromFile: APIMethod; + transpileModule: APIMethod; + transpileModuleFromFile: APIMethod; + transpileDeclaration: APIMethod; + transpileDeclarationFromFile: APIMethod; + getDefaultProjectForFile: APIMethod; + getSymbolAtPosition: APIMethod; + getSymbolsAtPositions: APIMethod; + getSymbolAtLocation: APIMethod; + getSymbolsAtLocations: APIMethod; + getSymbolOfSourceFile: APIMethod; + getSymbolsOfSourceFiles: APIMethod; + getTypeOfSymbol: APIMethod; + getTypesOfSymbols: APIMethod; + getDeclaredTypeOfSymbol: APIMethod; + getNonMissingTypeOfSymbol: APIMethod; + getSourceFile: APIMethod; + getSourceFileNames: APIMethod; + getSourceFileMetadata: APIMethod; + getModeForUsageLocation: APIMethod; + getModeForResolutionAtIndex: APIMethod; + getResolvedModule: APIMethod; + getResolvedModuleFromModuleSpecifier: APIMethod; + getResolvedTypeReferenceDirective: APIMethod; + getResolvedTypeReferenceDirectiveFromTypeReferenceDirective: APIMethod; + getConfigFileNames: APIMethod; + getConfigSourceFile: APIMethod; + resolveName: APIMethod; + getSymbolsInScope: APIMethod; + getSignaturesOfType: APIMethod; + getResolvedSignature: APIMethod; + getTypeAtLocation: APIMethod; + getTypeAtLocations: APIMethod; + getTypeAtPosition: APIMethod; + getTypesAtPositions: APIMethod; + getParentOfSymbol: APIMethod; + getMembersOfSymbol: APIMethod; + getExportsOfSymbol: APIMethod; + getExportSymbolOfSymbol: APIMethod; + getSymbolOfType: APIMethod; + getTargetOfType: APIMethod; + getFreshTypeOfType: APIMethod; + getRegularTypeOfType: APIMethod; + getTypesOfType: APIMethod; + getTypeParametersOfType: APIMethod; + getOuterTypeParametersOfType: APIMethod; + getLocalTypeParametersOfType: APIMethod; + getThisTypeOfType: APIMethod; + getAliasTypeArgumentsOfType: APIMethod; + getAliasSymbolOfType: APIMethod; + getObjectTypeOfType: APIMethod; + getIndexTypeOfType: APIMethod; + getCheckTypeOfType: APIMethod; + getExtendsTypeOfType: APIMethod; + getBaseTypeOfType: APIMethod; + getConstraintOfType: APIMethod; + getTypeParameterOfMappedType: APIMethod; + getConstraintTypeOfMappedType: APIMethod; + getNameTypeOfMappedType: APIMethod; + getTemplateTypeOfMappedType: APIMethod; + getTypeParametersOfSignature: APIMethod; + getParametersOfSignature: APIMethod; + getThisParameterOfSignature: APIMethod; + getTargetOfSignature: APIMethod; + getContextualType: APIMethod; + getContextualTypeForArgument: APIMethod; + getAwaitedType: APIMethod; + getBaseTypeOfLiteralType: APIMethod; + getNonNullableType: APIMethod; + getTypeFromTypeNode: APIMethod; + getWidenedType: APIMethod; + getParameterType: APIMethod; + getTypeParameterAtPosition: APIMethod; + isArrayLikeType: APIMethod; + isTypeAssignableTo: APIMethod; + getShorthandAssignmentValueSymbol: APIMethod; + getTypeOfSymbolAtLocation: APIMethod; + typeToTypeNode: APIMethod; + signatureToSignatureDeclaration: APIMethod; + typeToString: APIMethod; + isContextSensitive: APIMethod; + getReturnTypeOfSignature: APIMethod; + getRestTypeOfSignature: APIMethod; + getTypePredicateOfSignature: APIMethod; + getBaseTypes: APIMethod; + getPropertiesOfType: APIMethod; + getApparentPropertiesOfType: APIMethod; + getApparentType: APIMethod; + getReducedType: APIMethod; + getPropertyOfType: APIMethod; + getTypeOfPropertyOfType: APIMethod; + getIndexInfoOfType: APIMethod; + getIndexInfosOfType: APIMethod; + getConstraintOfTypeParameter: APIMethod; + getDefaultFromTypeParameter: APIMethod; + getBaseConstraintOfType: APIMethod; + getTypeArguments: APIMethod; + getImportAdderEdits: APIMethod; + getTrueTypeOfConditionalType: APIMethod; + getFalseTypeOfConditionalType: APIMethod; + getConstantValue: APIMethod; + getSignatureFromDeclaration: APIMethod; + getExportSpecifierLocalTargetSymbol: APIMethod; + getAliasedSymbol: APIMethod; + getImmediateAliasedSymbol: APIMethod; + getTargetSymbol: APIMethod; + getMergedSymbol: APIMethod; + getSymbolOfNode: APIMethod; + getSymbolOfDeclarationForChecker: APIMethod; + getParentOfSymbolForChecker: APIMethod; + getExportSymbolOfSymbolForChecker: APIMethod; + getFullyQualifiedName: APIMethod; + getExportsOfModule: APIMethod; + getMemberInModuleExports: APIMethod; + getJsDocTags: APIMethod; + getDocumentationComment: APIMethod; + isArrayType: APIMethod; + isReadonlySymbol: APIMethod; + getReferencesToSymbolInFile: APIMethod; + getReferencedSymbolsForNode: APIMethod; + getSignatureUsages: APIMethod; + getCompletionsAtPosition: APIMethod; + getSyntacticDiagnostics: APIMethod; + getBindDiagnostics: APIMethod; + getSemanticDiagnostics: APIMethod; + getSuggestionDiagnostics: APIMethod; + getDeclarationDiagnostics: APIMethod; + getProgramDiagnostics: APIMethod; + getGlobalDiagnostics: APIMethod; + getConfigFileParsingDiagnostics: APIMethod; + printNode: APIMethod; + formatNodeForInsertion: APIMethod; + emit: APIMethod; + emitToString: APIMethod; + getJavaScriptEmit: APIMethod; + getDeclarationEmit: APIMethod; + getAnyType: APIMethod; + getStringType: APIMethod; + getNumberType: APIMethod; + getBooleanType: APIMethod; + getVoidType: APIMethod; + getUndefinedType: APIMethod; + getNullType: APIMethod; + getNeverType: APIMethod; + getUnknownType: APIMethod; + getBigIntType: APIMethod; + getESSymbolType: APIMethod; + getNonPrimitiveType: APIMethod; + getWellKnownSymbols: APIMethod; + getWellKnownSignatures: APIMethod; + startCPUProfile: APIMethod; + stopCPUProfile: APIMethod; + saveHeapProfile: APIMethod; +} + +export type DocumentIdentifier = string | { uri: string; }; + +export type ResolutionMode = ModuleKind.None | ModuleKind.CommonJS | ModuleKind.ESNext; + +export type EnsurePrograms = true | readonly ProjectId[]; + +export type InferredProjectId = string & { __inferredProjectIdBrand: any; }; +export type ConfiguredProjectId = PathKey & { __configuredProjectIdBrand: any; }; +export type SyntheticProjectId = string & { __syntheticProjectIdBrand: any; }; +export type ProjectId = InferredProjectId | ConfiguredProjectId | SyntheticProjectId; + +/** ReleaseParams are the parameters for the release method. */ +export interface ReleaseParams { + snapshot: number; +} + +export interface ReleaseSourceFileParams { + lease: number; +} + +export interface RetainSourceFileParams { + file: SourceFileDescriptor; +} + +export interface RetainSourceFileResponse { + lease: number; +} + +/** + * GetCachedSourceFileParams address an ordinary cached source file by its complete identity, + * independent of any snapshot or lease. + */ +export interface GetCachedSourceFileParams { + file: SourceFileDescriptor; +} + +/** + * SourceFileResponse contains the binary-encoded AST data for a source file. + * The Data field is base64-encoded binary data in the encoder's format. + */ +export interface SourceFileResponse { + /** Data is the base64-encoded binary AST data in the encoder's format. */ + data: string; +} + +export interface GetSymbolOfDeclarationParams { + file: SourceFileDescriptor; + index: number; +} + +export interface SymbolResponse { + reference: SymbolReference; + name: string; + flags: number; + checkFlags: number; + declarations?: string[] | undefined; + valueDeclaration?: string | undefined; + parent?: CompactSymbolReference | undefined; + exportSymbol?: CompactSymbolReference | undefined; +} + +export interface BatchRequestsParams { + requests: readonly BatchRequest[] | null; + continuationToken?: string | undefined; + maxResponseBytesPerPage?: number | undefined; +} + +export interface BatchRequestsResponse { + responses: BatchResponse[]; + continuationToken?: string | undefined; +} + +/** InitializeResponse is returned by the initialize method. */ +export interface InitializeResponse { + /** CaseSensitivity determines how the host file system compares paths. */ + caseSensitivity: CaseSensitivity; + /** CurrentDirectory is the server's current working directory. */ + currentDirectory: RootedDirectoryPath; +} + +/** CreateSnapshotParams are the parameters for creating a new independent snapshot. */ +export interface CreateSnapshotParams extends SnapshotRequestChangesParams { + /** UserPreferences configures language service behavior in the new snapshot. */ + userPreferences?: UserPreferences | undefined; + /** PrepareAutoImports identifies the file whose auto-import indexes should be ready in the new snapshot. */ + prepareAutoImports?: DocumentIdentifier | undefined; + /** FileNotifications describes host file system changes to invalidate while creating the snapshot. */ + fileNotifications?: FileNotifications | undefined; + /** + * FileSystem supplies file contents and directory listings for the new snapshot. + * A full filesystem is canonical and total. A filesystem layer is checked + * before falling back to the base snapshot or host filesystem. + */ + fileSystem?: RequestFileSystem | undefined; +} + +/** CreateSnapshotResponse is returned by createSnapshot. */ +export interface CreateSnapshotResponse { + /** Snapshot is the handle for the newly created snapshot. */ + snapshot: number; + /** + * Projects contains all projects when no response base was supplied, or only + * projects added or replaced relative to that base. + */ + projects: ProjectResponse[]; + /** Changes describes source file differences from the response base. */ + changes?: SnapshotChanges | undefined; + /** Operation describes results correlated with the request that produced the snapshot. */ + operation: SnapshotOperationResponse; +} + +export interface UpdateSnapshotParams { + snapshot: number; + changes?: CreateSnapshotParams | undefined; +} + +export interface GetCurrentLanguageServerSnapshotParams { + baseSnapshot?: number | undefined; + changes?: LanguageServerSnapshotChanges | undefined; +} + +export interface CreateBuildOrchestratorParams extends BuildOptions, CompilerOptions { + rootNames: readonly string[] | null; + cwd?: RootedDirectoryPath | undefined; +} + +export interface CreateBuildOrchestratorResponse { + buildOrchestratorID: number; +} + +export interface DisposeBuildOrchestratorParams { + buildOrchestratorID: number; +} + +export interface BuildParams { + buildOrchestratorID: number; + project?: string | undefined; +} + +export interface BuildResponse { + status: number; + diagnostics?: DiagnosticResponse[] | undefined; + statistics: Statistics; +} + +export interface CleanBuildParams { + buildOrchestratorID: number; + project?: string | undefined; +} + +export interface CleanBuildResponse { + status: number; + diagnostics?: DiagnosticResponse[] | undefined; + statistics: Statistics; + filesDeleted?: RootedFilePath[] | undefined; +} + +export interface CreateModuleResolverParams { + compilerOptions: CompilerOptions; + moduleResolutions?: ModuleResolutionSpec | undefined; + resolveModuleNameCallback?: string | undefined; +} + +export interface ReleaseModuleResolverParams { + resolver: number; +} + +export interface ResolveModuleNameParams { + snapshot?: number | undefined; + inProgressSnapshot?: number | undefined; + resolver: number; + moduleName: string; + containingDirectory: DocumentIdentifier; + resolutionMode?: ResolutionMode | undefined; +} + +export interface ResolveModuleNameResult { + resolvedModule?: ResolvedModule | undefined; + /** Trace is provided when compilerOptions.traceResolution is true. */ + trace?: string[] | undefined; +} + +export interface ParseCommandLineParams { + commandLine: readonly string[] | null; +} + +export interface ConfigFileResponse { + fileNames: RootedFilePath[]; + options: CompilerOptions; + buildOptions?: BuildOptions | undefined; + projectReferences?: ProjectReference[] | undefined; + typeAcquisition?: TypeAcquisition | undefined; + compileOnSave?: boolean | undefined; + raw?: unknown | undefined; + errors: DiagnosticResponse[]; +} + +export interface ReadConfigFileParams { + file: DocumentIdentifier; +} + +export interface ReadConfigFileResponse { + config: unknown; + error?: DiagnosticResponse | undefined; +} + +export interface ParseJsonConfigFileContentParams { + json: unknown; + configDirectory?: string | undefined; + configFileName?: DocumentIdentifier | undefined; +} + +export interface ParseConfigFileParams { + file: DocumentIdentifier; +} + +export interface CreateSourceFileParams { + fileName: string; + sourceText: string; + options: CreateSourceFileOptions; +} + +export interface CreateSourceFileFromFileParams { + fileName: string; + options: CreateSourceFileOptions; +} + +export interface TranspileParams { + input: string; + options: TranspileOptions; +} + +export interface TranspileOutputResponse { + outputText: string; + diagnostics?: DiagnosticResponse[] | undefined; + sourceMapText?: string | undefined; +} + +export interface TranspileFromFileParams { + fileName: string; + options: TranspileOptions; +} + +export interface GetDefaultProjectForFileParams { + snapshot: number; + file: DocumentIdentifier; +} + +export interface ProjectResponse { + id: ProjectId; + configFileName?: RootedFilePath | undefined; + currentDirectory: RootedDirectoryPath; + dirty: boolean; + parsedCommandLine: ConfigFileResponse; + /** @deprecated Use parsedCommandLine.fileNames. */ + rootFiles: RootedFilePath[]; + /** @deprecated Use parsedCommandLine.options. */ + compilerOptions: CompilerOptions; +} + +export interface GetSymbolAtPositionParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + position: number; +} + +export interface GetSymbolsAtPositionsParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + positions: readonly number[] | null; +} + +export interface GetSymbolAtLocationParams { + snapshot: number; + project: ProjectId; + location: string; +} + +export interface GetSymbolsAtLocationsParams { + snapshot: number; + project: ProjectId; + locations: readonly string[] | null; +} + +export interface GetSymbolOfSourceFileParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; +} + +export interface GetSymbolsOfSourceFilesParams { + snapshot: number; + project: ProjectId; + files: readonly DocumentIdentifier[] | null; +} + +export interface GetTypeOfSymbolParams { + snapshot: number; + project: ProjectId; + symbol: SymbolReference; +} + +export interface TypeResponse { + id: number; + flags: number; + objectFlags?: number | undefined; + isTupleType?: boolean | undefined; + /** + * Value is literal type data. BigInt literals are encoded as signed decimal + * strings because JSON cannot represent bigint; absent values are null. + */ + value: unknown; + /** ObjectType / TypeReference / StringMappingType / IndexType target */ + target?: number | undefined; + /** InterfaceType type parameters */ + typeParameters?: number[] | undefined; + outerTypeParameters?: number[] | undefined; + localTypeParameters?: number[] | undefined; + /** TupleType data */ + elementFlags?: number[] | undefined; + fixedLength?: number | undefined; + readonly?: boolean | undefined; + labeledElementDeclarations?: string[] | undefined; + /** IndexedAccessType data */ + objectType?: number | undefined; + indexType?: number | undefined; + /** ConditionalType data */ + checkType?: number | undefined; + extendsType?: number | undefined; + /** SubstitutionType data */ + baseType?: number | undefined; + substConstraint?: number | undefined; + /** MappedType data */ + typeParameter?: number | undefined; + constraintType?: number | undefined; + nameType?: number | undefined; + templateType?: number | undefined; + /** TemplateLiteralType text segments */ + texts?: string[] | undefined; + /** FreshableType data (LiteralType and computed enum types) */ + freshType?: number | undefined; + regularType?: number | undefined; + /** TypeParameter data */ + isThisType?: boolean | undefined; + /** InterfaceType data */ + thisType?: number | undefined; + /** IntrinsicType data */ + intrinsicName?: string | undefined; + /** TypeAlias data */ + aliasTypeArguments?: number[] | undefined; + aliasSymbol?: CompactSymbolReference | undefined; + /** Symbol associated with structured types */ + symbol?: CompactSymbolReference | undefined; +} + +export interface GetTypesOfSymbolsParams { + snapshot: number; + project: ProjectId; + symbols: readonly SymbolReference[] | null; +} + +export interface GetSourceFileParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; +} + +export interface GetSourceFileNamesParams { + snapshot: number; + project: ProjectId; +} + +/** SourceFileMetadata carries program-stored metadata about a single source file. */ +export interface SourceFileMetadata { + isDefaultLibrary: boolean; + isFromExternalLibrary: boolean; + packageJsonType: string; + packageJsonDirectory: RootedDirectoryPath; + impliedNodeFormat: ModuleKind; +} + +export interface GetModeForUsageLocationParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + usage: string; +} + +export interface GetModeForResolutionAtIndexParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + index: number; +} + +export interface GetResolvedModuleParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + moduleName: string; + mode: ModuleKind; +} + +export interface ResolvedModule { + resolvedFileName: string; + originalPath?: string | undefined; + extension: string; + resolvedUsingTsExtension?: boolean | undefined; + resolvedUsingExtraExtensions?: boolean | undefined; + packageId?: PackageId | undefined; + isExternalLibraryImport?: boolean | undefined; + alternateResult?: string | undefined; +} + +export interface GetResolvedModuleFromModuleSpecifierParams { + snapshot: number; + project: ProjectId; + moduleSpecifier: string; + sourceFile?: DocumentIdentifier | undefined; +} + +export interface GetResolvedTypeReferenceDirectiveParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + typeDirectiveName: string; + mode: ModuleKind; +} + +export interface ResolvedTypeReferenceDirective { + primary: boolean; + resolvedFileName: string; + originalPath?: string | undefined; + packageId?: PackageId | undefined; + isExternalLibraryImport?: boolean | undefined; +} + +export interface GetResolvedTypeReferenceDirectiveFromReferenceParams { + snapshot: number; + project: ProjectId; + sourceFile: DocumentIdentifier; + typeDirectiveName: string; + resolutionMode: ModuleKind; +} + +/** GetProjectDiagnosticsParams are parameters for project-wide diagnostic methods. */ +export interface GetProjectDiagnosticsParams { + snapshot: number; + project: ProjectId; +} + +export interface ResolveNameParams { + snapshot: number; + project: ProjectId; + name: string; + /** Optional: node handle for location context */ + location?: string | undefined; + /** Optional: file for location context (alternative to Location) */ + file?: DocumentIdentifier | undefined; + /** Optional: position in file for location context (with File) */ + position?: number | undefined; + /** SymbolFlags for what kind of symbol to find */ + meaning: number; + /** Whether to exclude global symbols */ + excludeGlobals?: boolean | undefined; +} + +/** + * GetSymbolsInScopeParams are parameters for getSymbolsInScope, which returns + * all symbols visible at a given location. + */ +export interface GetSymbolsInScopeParams { + snapshot: number; + project: ProjectId; + /** Optional: node handle for location context */ + location?: string | undefined; + /** Optional: file for location context (alternative to Location) */ + file?: DocumentIdentifier | undefined; + /** Optional: position in file for location context (with File) */ + position?: number | undefined; + /** SymbolFlags for what kind of symbols to find */ + meaning: number; +} + +export interface GetSignaturesOfTypeParams { + snapshot: number; + project: ProjectId; + type: number; + kind: number; +} + +export interface SignatureResponse { + id: number; + flags: number; + declaration?: string | undefined; + typeParameters?: number[] | undefined; + parameters?: CompactSymbolReference[] | undefined; + thisParameter?: CompactSymbolReference | undefined; + target?: number | undefined; +} + +export interface GetResolvedSignatureParams { + snapshot: number; + project: ProjectId; + location: string; +} + +export interface GetTypeAtLocationParams { + snapshot: number; + project: ProjectId; + location: string; +} + +export interface GetTypeAtLocationsParams { + snapshot: number; + project: ProjectId; + locations: readonly string[] | null; +} + +export interface GetTypeAtPositionParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + position: number; +} + +export interface GetTypesAtPositionsParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + positions: readonly number[] | null; +} + +/** GetSymbolPropertyParams is used for all symbol sub-property endpoints. */ +export interface GetSymbolPropertyParams { + symbol: SymbolReference; +} + +/** GetTypePropertyParams is used for all type sub-property endpoints. */ +export interface GetTypePropertyParams { + snapshot: number; + project: ProjectId; + objectId: number; +} + +/** GetSignaturePropertyParams is used for all signature sub-property endpoints. */ +export interface GetSignaturePropertyParams { + snapshot: number; + project: ProjectId; + objectId: number; +} + +/** GetContextualTypeParams returns the contextual type for a node. */ +export interface GetContextualTypeParams { + snapshot: number; + project: ProjectId; + location: string; +} + +export interface GetContextualTypeForArgumentParams { + snapshot: number; + project: ProjectId; + location: string; + index: number; +} + +/** CheckerTypeParams are parameters for checker methods that operate on a type. */ +export interface CheckerTypeParams { + snapshot: number; + project: ProjectId; + type: number; +} + +/** GetBaseTypeOfLiteralTypeParams returns the base type of a literal type. */ +export interface GetBaseTypeOfLiteralTypeParams { + snapshot: number; + project: ProjectId; + type: number; +} + +/** GetTypeFromTypeNodeParams are the parameters for the getTypeFromTypeNode method. */ +export interface GetTypeFromTypeNodeParams { + snapshot: number; + project: ProjectId; + location: string; +} + +/** GetWidenedTypeParams are the parameters for the getWidenedType method. */ +export interface GetWidenedTypeParams { + snapshot: number; + project: ProjectId; + type: number; +} + +/** GetParameterTypeParams are the parameters for the getParameterType method. */ +export interface GetParameterTypeParams { + snapshot: number; + project: ProjectId; + signature: number; + index: number; +} + +/** IsArrayLikeTypeParams checks whether a type is array-like. */ +export interface IsArrayLikeTypeParams { + snapshot: number; + project: ProjectId; + type: number; +} + +/** IsTypeAssignableToParams checks assignability between two types. */ +export interface IsTypeAssignableToParams { + snapshot: number; + project: ProjectId; + source: number; + target: number; +} + +/** GetTypeOfSymbolAtLocationParams returns the narrowed type of a symbol at a specific location. */ +export interface GetTypeOfSymbolAtLocationParams { + snapshot: number; + project: ProjectId; + symbol: SymbolReference; + location: string; +} + +/** TypeToTypeNodeParams are the parameters for the typeToTypeNode method. */ +export interface TypeToTypeNodeParams { + snapshot: number; + project: ProjectId; + type: number; + location?: string | undefined; + flags?: number | undefined; +} + +/** SignatureToSignatureDeclarationParams are the parameters for the signatureToSignatureDeclaration method. */ +export interface SignatureToSignatureDeclarationParams { + snapshot: number; + project: ProjectId; + signature: number; + kind: number; + location?: string | undefined; + flags?: number | undefined; +} + +/** CheckerSignatureParams are parameters for checker methods that operate on a signature. */ +export interface CheckerSignatureParams { + snapshot: number; + project: ProjectId; + signature: number; +} + +/** TypePredicateResponse is the response for getTypePredicateOfSignature. */ +export interface TypePredicateResponse { + kind: number; + parameterIndex: number; + parameterName?: string | undefined; + type?: TypeResponse | undefined; +} + +/** GetPropertyOfTypeParams are parameters for getPropertyOfType (a named property of a type). */ +export interface GetPropertyOfTypeParams { + snapshot: number; + project: ProjectId; + type: number; + name: string; +} + +export interface GetIndexInfoOfTypeParams { + snapshot: number; + project: ProjectId; + type: number; + kind: number; +} + +/** IndexInfoResponse represents a single index signature. */ +export interface IndexInfoResponse { + keyType: TypeResponse; + valueType: TypeResponse; + isReadonly?: boolean | undefined; + declaration?: string | undefined; +} + +export interface GetImportAdderEditsParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + actions: readonly ImportAdderAction[] | null; +} + +export interface TextEdit { + pos: number; + end: number; + newText: string; +} + +/** CheckerNodeParams are parameters for checker methods that operate on a node location. */ +export interface CheckerNodeParams { + snapshot: number; + project: ProjectId; + location: string; +} + +export interface ConstantValueResponse { + isNumber: boolean; + value: unknown; +} + +/** CheckerSymbolParams are parameters for checker methods that operate on a symbol. */ +export interface CheckerSymbolParams { + snapshot: number; + project: ProjectId; + symbol: SymbolReference; +} + +/** GetMemberInModuleExportsParams are parameters for getMemberInModuleExports. */ +export interface GetMemberInModuleExportsParams { + snapshot: number; + project: ProjectId; + symbol: SymbolReference; + name: string; +} + +/** + * JSDocTagInfo is a single JSDoc tag, mirroring Strada's JSDocTagInfo but with the tag text + * rendered as a plain string rather than SymbolDisplayPart[]. + */ +export interface JSDocTagInfo { + name: string; + text?: string | undefined; +} + +/** GetReferencesToSymbolInFileParams are the parameters for the getReferencesToSymbolInFile method. */ +export interface GetReferencesToSymbolInFileParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + symbol: SymbolReference; +} + +/** GetReferencedSymbolsForNodeParams are the parameters for the getReferencedSymbolsForNode method. */ +export interface GetReferencedSymbolsForNodeParams { + snapshot: number; + project: ProjectId; + node: string; + position: number; +} + +/** ReferencedSymbolEntry represents a symbol definition and its references. */ +export interface ReferencedSymbolEntry { + definition: string; + symbol?: SymbolResponse | undefined; + references: string[]; +} + +/** GetSignatureUsagesParams are the parameters for the getSignatureUsages method. */ +export interface GetSignatureUsagesParams { + snapshot: number; + project: ProjectId; + signatureDecl: string; +} + +/** SignatureUsageResponse represents a single usage of a signature as a name-call pair. */ +export interface SignatureUsageResponse { + name: string; + call?: string | undefined; +} + +/** GetCompletionsAtPositionParams are the parameters for the getCompletionsAtPosition method. */ +export interface GetCompletionsAtPositionParams { + snapshot: number; + project: ProjectId; + file: DocumentIdentifier; + position: number; + triggerCharacter?: string | undefined; + includeSymbol?: boolean | undefined; +} + +/** CompletionInfoResponse wraps a list of completion entries. */ +export interface CompletionInfoResponse { + isIncomplete: boolean; + entries: CompletionEntryResponse[]; +} + +/** GetDiagnosticsParams are parameters for per-file diagnostic methods. */ +export interface GetDiagnosticsParams { + snapshot: number; + project: ProjectId; + files?: readonly DocumentIdentifier[] | undefined; +} + +/** DiagnosticResponse is the API response for a single diagnostic. */ +export interface DiagnosticResponse { + /** The file name of the file this diagnostic belongs to, if any. */ + fileName?: RootedFilePath | undefined; + /** Pos is the start position of the diagnostic in the source file. */ + pos: number; + /** End is the end position of the diagnostic in the source file. */ + end: number; + /** StartPosition is the zero-based line and UTF-16 character position of Pos. */ + startPosition?: DiagnosticPositionResponse | undefined; + /** EndPosition is the zero-based line and UTF-16 character position of End. */ + endPosition?: DiagnosticPositionResponse | undefined; + /** SourceLines contains the source lines needed to render this diagnostic with context. */ + sourceLines?: DiagnosticSourceLineResponse[] | undefined; + /** Code is the diagnostic error code. */ + code: number; + /** Category is the diagnostic category (error, warning, suggestion, message). */ + category: number; + /** Source is a custom diagnostic-code prefix. An empty value uses the default "TS". */ + source?: string | undefined; + /** Text is the localized diagnostic message text. */ + text: string; + /** ReportsUnnecessary indicates this diagnostic highlights unnecessary code. */ + reportsUnnecessary?: boolean | undefined; + /** ReportsDeprecated indicates this diagnostic highlights deprecated code. */ + reportsDeprecated?: boolean | undefined; + /** MessageChain contains chained diagnostic messages, if any. */ + messageChain?: DiagnosticResponse[] | undefined; + /** RelatedInformation contains related diagnostic information, if any. */ + relatedInformation?: DiagnosticResponse[] | undefined; +} + +/** PrintNodeParams are the parameters for the printNode method. */ +export interface PrintNodeParams { + /** base64-encoded binary AST data */ + data: string; + preserveSourceNewlines?: boolean | undefined; + neverAsciiEscape?: boolean | undefined; + terminateUnterminatedLiterals?: boolean | undefined; +} + +/** FormatNodeForInsertionParams are the parameters for the formatNodeForInsertion method. */ +export interface FormatNodeForInsertionParams { + snapshot: number; + project: ProjectId; + /** target file where the node will be inserted */ + file: DocumentIdentifier; + /** UTF-16 code-unit offset of the insertion position in the target file */ + position: number; + /** base64-encoded binary AST data for the synthesized node */ + data: string; +} + +export interface EmitParams { + snapshot: number; + project: ProjectId; + emitOnly?: number | undefined; +} + +export interface EmitResponse { + emitSkipped: boolean; + diagnostics: DiagnosticResponse[]; + emittedFiles: RootedFilePath[]; + /** + * EmittedFilesContents contains contents parallel to EmittedFiles when the + * source snapshot uses a full filesystem. It is empty for write-through emits. + */ + emittedFilesContents: string[]; +} + +export interface EmitOutputResponse { + emitSkipped: boolean; + diagnostics: DiagnosticResponse[]; + outputFiles: EmitOutputFile[]; +} + +export interface SelectedFilesEmitParams { + snapshot: number; + project: ProjectId; + files: readonly DocumentIdentifier[] | null; +} + +/** GetIntrinsicTypeParams is used for intrinsic type getters (anyType, stringType, etc.). */ +export interface GetIntrinsicTypeParams { + snapshot: number; + project: ProjectId; +} + +/** + * WellKnownSymbolsResponse carries the handle ids of the per-checker singleton + * symbols (unknown, undefined, arguments) so the client can identify them by id + * without a round-trip on every check. + */ +export interface WellKnownSymbolsResponse { + unknown: number; + undefined: number; + arguments: number; +} + +/** + * WellKnownSignaturesResponse carries the handle id of the per-checker singleton + * unknown signature (the signature the checker yields when a call cannot be + * resolved) so the client can identify it by id without a round-trip on every check. + */ +export interface WellKnownSignaturesResponse { + unknown: number; +} + +export interface ProfileParams { + dir: string; +} + +export interface ProfileResult { + file: RootedFilePath; +} + +export interface SourceFileDescriptor { + fileName: RootedFilePath; + path: PathKey; + contentHash: string; + parseOptionsKey: string; + scriptKind: ScriptKind; + nodeId: string; +} + +/** SymbolReference identifies a symbol and its server-resolvable owner. */ +export interface SymbolReference extends SymbolOwner { + id: number; +} + +/** + * CompactSymbolReference is embedded in other responses. It identifies a cached + * symbol without repeating its owning file's full descriptor: File is the owning source file's + * node ID, or empty for a symbol owned by the response's snapshot. When the client has not cached + * the symbol, it fetches a full SymbolResponse through the corresponding property method. + */ +export interface CompactSymbolReference { + id: number; + file?: string | undefined; +} + +export interface BatchRequest { + method: + | "batchRequests" + | "build" + | "buildReferences" + | "cleanBuild" + | "cleanReferences" + | "createBuildOrchestrator" + | "createModuleResolver" + | "createSnapshot" + | "createSourceFile" + | "createSourceFileFromFile" + | "disposeBuildOrchestrator" + | "emit" + | "emitToString" + | "formatNodeForInsertion" + | "getAliasSymbolOfType" + | "getAliasTypeArgumentsOfType" + | "getAliasedSymbol" + | "getAnyType" + | "getApparentPropertiesOfType" + | "getApparentType" + | "getAwaitedType" + | "getBaseConstraintOfType" + | "getBaseTypeOfLiteralType" + | "getBaseTypeOfType" + | "getBaseTypes" + | "getBigIntType" + | "getBindDiagnostics" + | "getBooleanType" + | "getCachedSourceFile" + | "getCheckTypeOfType" + | "getCompletionsAtPosition" + | "getConfigFileNames" + | "getConfigFileParsingDiagnostics" + | "getConfigSourceFile" + | "getConstantValue" + | "getConstraintOfType" + | "getConstraintOfTypeParameter" + | "getConstraintTypeOfMappedType" + | "getContextualType" + | "getContextualTypeForArgument" + | "getCurrentLanguageServerSnapshot" + | "getDeclarationDiagnostics" + | "getDeclarationEmit" + | "getDeclaredTypeOfSymbol" + | "getDefaultFromTypeParameter" + | "getDefaultProjectForFile" + | "getDocumentationComment" + | "getESSymbolType" + | "getExportSpecifierLocalTargetSymbol" + | "getExportSymbolOfSymbol" + | "getExportSymbolOfSymbolForChecker" + | "getExportsOfModule" + | "getExportsOfSymbol" + | "getExtendsTypeOfType" + | "getFalseTypeOfConditionalType" + | "getFreshTypeOfType" + | "getFullyQualifiedName" + | "getGlobalDiagnostics" + | "getImmediateAliasedSymbol" + | "getImportAdderEdits" + | "getIndexInfoOfType" + | "getIndexInfosOfType" + | "getIndexTypeOfType" + | "getJavaScriptEmit" + | "getJsDocTags" + | "getLocalTypeParametersOfType" + | "getMemberInModuleExports" + | "getMembersOfSymbol" + | "getMergedSymbol" + | "getModeForResolutionAtIndex" + | "getModeForUsageLocation" + | "getNameTypeOfMappedType" + | "getNeverType" + | "getNonMissingTypeOfSymbol" + | "getNonNullableType" + | "getNonPrimitiveType" + | "getNullType" + | "getNumberType" + | "getObjectTypeOfType" + | "getOuterTypeParametersOfType" + | "getParameterType" + | "getParametersOfSignature" + | "getParentOfSymbol" + | "getParentOfSymbolForChecker" + | "getProgramDiagnostics" + | "getPropertiesOfType" + | "getPropertyOfType" + | "getReducedType" + | "getReferencedSymbolsForNode" + | "getReferencesToSymbolInFile" + | "getRegularTypeOfType" + | "getResolvedModule" + | "getResolvedModuleFromModuleSpecifier" + | "getResolvedSignature" + | "getResolvedTypeReferenceDirective" + | "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective" + | "getRestTypeOfSignature" + | "getReturnTypeOfSignature" + | "getSemanticDiagnostics" + | "getShorthandAssignmentValueSymbol" + | "getSignatureFromDeclaration" + | "getSignatureUsages" + | "getSignaturesOfType" + | "getSourceFile" + | "getSourceFileMetadata" + | "getSourceFileNames" + | "getStringType" + | "getSuggestionDiagnostics" + | "getSymbolAtLocation" + | "getSymbolAtPosition" + | "getSymbolOfDeclaration" + | "getSymbolOfDeclarationForChecker" + | "getSymbolOfNode" + | "getSymbolOfSourceFile" + | "getSymbolOfType" + | "getSymbolsAtLocations" + | "getSymbolsAtPositions" + | "getSymbolsInScope" + | "getSymbolsOfSourceFiles" + | "getSyntacticDiagnostics" + | "getTargetOfSignature" + | "getTargetOfType" + | "getTargetSymbol" + | "getTemplateTypeOfMappedType" + | "getThisParameterOfSignature" + | "getThisTypeOfType" + | "getTrueTypeOfConditionalType" + | "getTypeArguments" + | "getTypeAtLocation" + | "getTypeAtLocations" + | "getTypeAtPosition" + | "getTypeFromTypeNode" + | "getTypeOfPropertyOfType" + | "getTypeOfSymbol" + | "getTypeOfSymbolAtLocation" + | "getTypeParameterAtPosition" + | "getTypeParameterOfMappedType" + | "getTypeParametersOfSignature" + | "getTypeParametersOfType" + | "getTypePredicateOfSignature" + | "getTypesAtPositions" + | "getTypesOfSymbols" + | "getTypesOfType" + | "getUndefinedType" + | "getUnknownType" + | "getVoidType" + | "getWellKnownSignatures" + | "getWellKnownSymbols" + | "getWidenedType" + | "initialize" + | "isArrayLikeType" + | "isArrayType" + | "isContextSensitive" + | "isReadonlySymbol" + | "isTypeAssignableTo" + | "parseCommandLine" + | "parseConfigFile" + | "parseJsonConfigFileContent" + | "printNode" + | "readConfigFile" + | "release" + | "releaseModuleResolver" + | "releaseSourceFile" + | "resolveModuleName" + | "resolveName" + | "retainSourceFile" + | "saveHeapProfile" + | "signatureToSignatureDeclaration" + | "startCPUProfile" + | "stopCPUProfile" + | "transpileDeclaration" + | "transpileDeclarationFromFile" + | "transpileModule" + | "transpileModuleFromFile" + | "typeToString" + | "typeToTypeNode" + | "updateSnapshot"; + params?: unknown | undefined; +} + +export interface BatchResponse { + method: + | "batchRequests" + | "build" + | "buildReferences" + | "cleanBuild" + | "cleanReferences" + | "createBuildOrchestrator" + | "createModuleResolver" + | "createSnapshot" + | "createSourceFile" + | "createSourceFileFromFile" + | "disposeBuildOrchestrator" + | "emit" + | "emitToString" + | "formatNodeForInsertion" + | "getAliasSymbolOfType" + | "getAliasTypeArgumentsOfType" + | "getAliasedSymbol" + | "getAnyType" + | "getApparentPropertiesOfType" + | "getApparentType" + | "getAwaitedType" + | "getBaseConstraintOfType" + | "getBaseTypeOfLiteralType" + | "getBaseTypeOfType" + | "getBaseTypes" + | "getBigIntType" + | "getBindDiagnostics" + | "getBooleanType" + | "getCachedSourceFile" + | "getCheckTypeOfType" + | "getCompletionsAtPosition" + | "getConfigFileNames" + | "getConfigFileParsingDiagnostics" + | "getConfigSourceFile" + | "getConstantValue" + | "getConstraintOfType" + | "getConstraintOfTypeParameter" + | "getConstraintTypeOfMappedType" + | "getContextualType" + | "getContextualTypeForArgument" + | "getCurrentLanguageServerSnapshot" + | "getDeclarationDiagnostics" + | "getDeclarationEmit" + | "getDeclaredTypeOfSymbol" + | "getDefaultFromTypeParameter" + | "getDefaultProjectForFile" + | "getDocumentationComment" + | "getESSymbolType" + | "getExportSpecifierLocalTargetSymbol" + | "getExportSymbolOfSymbol" + | "getExportSymbolOfSymbolForChecker" + | "getExportsOfModule" + | "getExportsOfSymbol" + | "getExtendsTypeOfType" + | "getFalseTypeOfConditionalType" + | "getFreshTypeOfType" + | "getFullyQualifiedName" + | "getGlobalDiagnostics" + | "getImmediateAliasedSymbol" + | "getImportAdderEdits" + | "getIndexInfoOfType" + | "getIndexInfosOfType" + | "getIndexTypeOfType" + | "getJavaScriptEmit" + | "getJsDocTags" + | "getLocalTypeParametersOfType" + | "getMemberInModuleExports" + | "getMembersOfSymbol" + | "getMergedSymbol" + | "getModeForResolutionAtIndex" + | "getModeForUsageLocation" + | "getNameTypeOfMappedType" + | "getNeverType" + | "getNonMissingTypeOfSymbol" + | "getNonNullableType" + | "getNonPrimitiveType" + | "getNullType" + | "getNumberType" + | "getObjectTypeOfType" + | "getOuterTypeParametersOfType" + | "getParameterType" + | "getParametersOfSignature" + | "getParentOfSymbol" + | "getParentOfSymbolForChecker" + | "getProgramDiagnostics" + | "getPropertiesOfType" + | "getPropertyOfType" + | "getReducedType" + | "getReferencedSymbolsForNode" + | "getReferencesToSymbolInFile" + | "getRegularTypeOfType" + | "getResolvedModule" + | "getResolvedModuleFromModuleSpecifier" + | "getResolvedSignature" + | "getResolvedTypeReferenceDirective" + | "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective" + | "getRestTypeOfSignature" + | "getReturnTypeOfSignature" + | "getSemanticDiagnostics" + | "getShorthandAssignmentValueSymbol" + | "getSignatureFromDeclaration" + | "getSignatureUsages" + | "getSignaturesOfType" + | "getSourceFile" + | "getSourceFileMetadata" + | "getSourceFileNames" + | "getStringType" + | "getSuggestionDiagnostics" + | "getSymbolAtLocation" + | "getSymbolAtPosition" + | "getSymbolOfDeclaration" + | "getSymbolOfDeclarationForChecker" + | "getSymbolOfNode" + | "getSymbolOfSourceFile" + | "getSymbolOfType" + | "getSymbolsAtLocations" + | "getSymbolsAtPositions" + | "getSymbolsInScope" + | "getSymbolsOfSourceFiles" + | "getSyntacticDiagnostics" + | "getTargetOfSignature" + | "getTargetOfType" + | "getTargetSymbol" + | "getTemplateTypeOfMappedType" + | "getThisParameterOfSignature" + | "getThisTypeOfType" + | "getTrueTypeOfConditionalType" + | "getTypeArguments" + | "getTypeAtLocation" + | "getTypeAtLocations" + | "getTypeAtPosition" + | "getTypeFromTypeNode" + | "getTypeOfPropertyOfType" + | "getTypeOfSymbol" + | "getTypeOfSymbolAtLocation" + | "getTypeParameterAtPosition" + | "getTypeParameterOfMappedType" + | "getTypeParametersOfSignature" + | "getTypeParametersOfType" + | "getTypePredicateOfSignature" + | "getTypesAtPositions" + | "getTypesOfSymbols" + | "getTypesOfType" + | "getUndefinedType" + | "getUnknownType" + | "getVoidType" + | "getWellKnownSignatures" + | "getWellKnownSymbols" + | "getWidenedType" + | "initialize" + | "isArrayLikeType" + | "isArrayType" + | "isContextSensitive" + | "isReadonlySymbol" + | "isTypeAssignableTo" + | "parseCommandLine" + | "parseConfigFile" + | "parseJsonConfigFileContent" + | "printNode" + | "readConfigFile" + | "release" + | "releaseModuleResolver" + | "releaseSourceFile" + | "resolveModuleName" + | "resolveName" + | "retainSourceFile" + | "saveHeapProfile" + | "signatureToSignatureDeclaration" + | "startCPUProfile" + | "stopCPUProfile" + | "transpileDeclaration" + | "transpileDeclarationFromFile" + | "transpileModule" + | "transpileModuleFromFile" + | "typeToString" + | "typeToTypeNode" + | "updateSnapshot"; + result: unknown; + error?: string | undefined; +} + +/** + * SnapshotRequestChangesParams describes project, file, and program changes to apply + * while creating or updating a snapshot. + */ +export interface SnapshotRequestChangesParams { + /** OpenProjects lists tsconfig.json files to open/load in the new snapshot. */ + openProjects?: readonly DocumentIdentifier[] | undefined; + /** + * CloseProjects lists tsconfig.json files to release in the new snapshot. + * A project is only unloaded once every API client that opened it closes it. + */ + closeProjects?: readonly DocumentIdentifier[] | undefined; + /** + * OpenFiles lists files to open in the new snapshot, mirroring LSP's + * textDocument/didOpen. For each file, ancestor directories are searched for a + * tsconfig that contains it; if found, that configured project is loaded and + * becomes the file's default project. Otherwise the file is loaded into the + * inferred project (e.g. a node_modules d.ts not in any project's import graph). + * If a file cannot be loaded into any project, the request fails. + */ + openFiles?: readonly DocumentIdentifier[] | undefined; + /** + * CloseFiles lists files to release in the new snapshot. A file is only fully + * closed once every API client that opened it closes it. + */ + closeFiles?: readonly DocumentIdentifier[] | undefined; + /** CreatePrograms describes synthetic programs to create in the snapshot. */ + createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; + /** ReconfigurePrograms replaces the configuration of existing synthetic programs. */ + reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; + /** RemovePrograms lists synthetic project handles to remove from the snapshot. */ + removePrograms?: readonly SyntheticProjectId[] | undefined; + /** + * EnsurePrograms identifies projects whose programs should be updated if dirty, + * or all contained projects when true. + */ + ensurePrograms?: EnsurePrograms | undefined; +} + +/** + * FileNotifications describes changes to files that have occurred on the host + * file system, used to notify the session to reload cached files and reevaluate + * tsconfig.json `include` globs. Either InvalidateAll is true (discard all caches) + * or Changed/Created/Deleted list individual documents. + */ +export interface FileNotifications { + invalidateAll?: boolean | undefined; + changed?: DocumentIdentifier[] | undefined; + created?: DocumentIdentifier[] | undefined; + deleted?: DocumentIdentifier[] | undefined; +} + +/** + * RequestFileSystem supplies file contents and, optionally, directory listings + * for a request that creates a snapshot. + */ +export interface RequestFileSystem { + kind: "full" | "layer"; + /** Files maps file names to their complete contents. */ + files: Record; + /** + * Directories maps directory names to complete listing results. Directory + * structure implied by Files is derived when a listing is omitted. + */ + directories?: Record | undefined; + /** Symlinks maps link paths to targets in this filesystem or the host filesystem. */ + symlinks?: Record | undefined; + /** + * RemovedPaths lists files or directory trees that must be treated as missing + * even when present in an underlying snapshot or host filesystem. + */ + removedPaths?: string[] | undefined; +} + +/** + * SnapshotChanges describes what changed between a response base and a new + * snapshot. Changes are reported per-project so clients + * can track cache refs at the (snapshot, project) level. + */ +export interface SnapshotChanges { + /** + * ChangedProjects maps project handles to the file changes within that project. + * Projects not listed here (and not in RemovedProjects) are unchanged. + */ + changedProjects?: Record | undefined; + /** + * RemovedProjects lists project handles that were present in the previous + * snapshot but absent from the new one. + */ + removedProjects?: ProjectId[] | undefined; +} + +export interface SnapshotOperationResponse { + createdPrograms?: SyntheticProjectId[] | undefined; + openedFiles?: OpenedFileOperationResult[] | undefined; +} + +/** + * LanguageServerSnapshotChanges describes API-driven changes to adopt into the + * language server's canonical state. + */ +export interface LanguageServerSnapshotChanges extends SnapshotRequestChangesParams { +} + +export interface BuildOptions { + dry?: boolean | undefined; + force?: boolean | undefined; + verbose?: boolean | undefined; + builders?: number | undefined; + stopBuildOnErrors?: boolean | undefined; + clean?: boolean | undefined; +} + +export interface Statistics { + Projects: number; + ProjectsBuilt: number; + TimestampUpdates: number; +} + +export interface ModuleResolutionSpec { + fallback: "resolve" | "unresolved"; + entries: ModuleResolutionEntry[]; +} + +export interface ProjectReference { + /** Path is a normalized path on disk. */ + path: RootedPath; + /** OriginalPath is the path as it was originally written. */ + originalPath?: string | undefined; + /** Circular indicates that this reference is intended to form a circularity. */ + circular?: boolean | undefined; +} + +export interface TypeAcquisition { + enable?: boolean | undefined; + include?: string[] | undefined; + exclude?: string[] | undefined; + disableFilenameBasedTypeAcquisition?: boolean | undefined; +} + +export interface CreateSourceFileOptions { + scriptKind?: ScriptKind | undefined; +} + +export interface TranspileOptions { + compilerOptions?: RawCompilerOptions | undefined; + fileName?: string | undefined; + reportDiagnostics?: boolean | undefined; +} + +export interface PackageId { + name: string; + subModuleName: string; + version: string; + peerDependencies: string; +} + +export interface ImportAdderAction { + kind: "importSymbol"; + symbol?: SymbolReference | undefined; + isValidTypeOnlyUseSite?: boolean | undefined; +} + +/** CompletionEntryResponse represents a single completion item. */ +export interface CompletionEntryResponse { + name: string; + kind?: number | undefined; + sortText?: string | undefined; + insertText?: string | undefined; + filterText?: string | undefined; + detail?: string | undefined; + labelDetails?: CompletionEntryLabelDetailsResponse | undefined; + symbol?: SymbolResponse | undefined; +} + +export interface DiagnosticPositionResponse { + line: number; + character: number; +} + +export interface DiagnosticSourceLineResponse { + line: number; + text: string; +} + +export interface EmitOutputFile { + fileName: RootedFilePath; + text: string; + sourceFileName?: RootedFilePath | undefined; +} + +export interface SymbolOwner { + kind: SymbolOwnerKind; + file?: SourceFileDescriptor | undefined; + snapshot?: number | undefined; + project?: ProjectId | undefined; +} + +export interface CreateSnapshotProgramParams { + rootFiles: readonly DocumentIdentifier[] | null; + compilerOptions: RawCompilerOptions; + options?: CreateProgramOptions | undefined; +} + +export interface ReconfigureSnapshotProgramParams { + id: SyntheticProjectId; + rootFiles: readonly DocumentIdentifier[] | null; + compilerOptions: RawCompilerOptions; + options?: CreateProgramOptions | undefined; +} + +/** + * RequestDirectoryEntries is a cached directory listing. Entry names are + * relative to the directory, matching vfs.GetAccessibleEntries. + */ +export interface RequestDirectoryEntries { + files: string[]; + directories: string[]; +} + +/** RequestSymlink describes a symbolic link in a request filesystem. */ +export interface RequestSymlink { + /** + * Target is resolved relative to the directory containing the link, matching + * native symbolic-link semantics. + */ + target: string; + /** + * Host routes the target through the host filesystem. This is the only way a + * full filesystem can access paths not supplied in the request filesystem. + */ + host?: boolean | undefined; +} + +/** ProjectFileChanges describes what source files changed within a single project. */ +export interface ProjectFileChanges { + /** ChangedFiles lists source file paths whose content differs. */ + changedFiles?: PathKey[] | undefined; + /** DeletedFiles lists source file paths removed from the project's program. */ + deletedFiles?: PathKey[] | undefined; +} + +export interface OpenedFileOperationResult { + project: ProjectId; +} + +export interface ModuleResolutionEntry { + moduleName: string; + containingDirectory?: DocumentIdentifier | undefined; + resolutionMode?: ResolutionMode | undefined; + result: StaticModuleResolution; +} + +/** CompletionEntryLabelDetailsResponse holds additional label display text for a completion entry. */ +export interface CompletionEntryLabelDetailsResponse { + detail?: string | undefined; + description?: string | undefined; +} + +export interface CreateProgramOptions { + projectReferences?: ProjectReference[] | undefined; + configFileParsingDiagnostics?: DiagnosticResponse[] | undefined; + moduleResolver?: number | undefined; +} + +export interface StaticModuleResolution { + resolvedFileName?: DocumentIdentifier | undefined; + originalPath?: DocumentIdentifier | undefined; + packageId?: PackageId | undefined; +} + +/** + * RawCompilerOptions is the JSON/API representation of compiler options. + * Filesystem paths remain strings until Finalize resolves them against a base + * directory and constructs a CompilerOptions with typed path guarantees. + */ +export interface RawCompilerOptions { + allowJs?: boolean | undefined; + allowArbitraryExtensions?: boolean | undefined; + allowImportingTsExtensions?: boolean | undefined; + allowNonTsExtensions?: boolean | undefined; + allowUmdGlobalAccess?: boolean | undefined; + allowUnreachableCode?: boolean | undefined; + allowUnusedLabels?: boolean | undefined; + assumeChangesOnlyAffectDirectDependencies?: boolean | undefined; + checkJs?: boolean | undefined; + customConditions?: string[] | undefined; + composite?: boolean | undefined; + emitDeclarationOnly?: boolean | undefined; + emitBOM?: boolean | undefined; + emitDecoratorMetadata?: boolean | undefined; + declaration?: boolean | undefined; + declarationDir?: string | undefined; + declarationMap?: boolean | undefined; + deduplicatePackages?: boolean | undefined; + disableSizeLimit?: boolean | undefined; + disableSourceOfProjectReferenceRedirect?: boolean | undefined; + disableSolutionSearching?: boolean | undefined; + disableReferencedProjectLoad?: boolean | undefined; + erasableSyntaxOnly?: boolean | undefined; + exactOptionalPropertyTypes?: boolean | undefined; + experimentalDecorators?: boolean | undefined; + forceConsistentCasingInFileNames?: boolean | undefined; + isolatedModules?: boolean | undefined; + isolatedDeclarations?: boolean | undefined; + ignoreConfig?: boolean | undefined; + ignoreDeprecations?: string | undefined; + importHelpers?: boolean | undefined; + inlineSourceMap?: boolean | undefined; + inlineSources?: boolean | undefined; + init?: boolean | undefined; + incremental?: boolean | undefined; + jsx?: JsxEmit | undefined; + jsxFactory?: string | undefined; + jsxFragmentFactory?: string | undefined; + jsxImportSource?: string | undefined; + lib?: string[] | undefined; + libReplacement?: boolean | undefined; + locale?: string | undefined; + mapRoot?: string | undefined; + module?: ModuleKind | undefined; + moduleResolution?: ModuleResolutionKind | undefined; + moduleSuffixes?: string[] | undefined; + moduleDetection?: ModuleDetectionKind | undefined; + newLine?: NewLineKind | undefined; + noEmit?: boolean | undefined; + noCheck?: boolean | undefined; + noErrorTruncation?: boolean | undefined; + noFallthroughCasesInSwitch?: boolean | undefined; + noImplicitAny?: boolean | undefined; + noImplicitThis?: boolean | undefined; + noImplicitReturns?: boolean | undefined; + noEmitHelpers?: boolean | undefined; + noLib?: boolean | undefined; + noPropertyAccessFromIndexSignature?: boolean | undefined; + noUncheckedIndexedAccess?: boolean | undefined; + noEmitOnError?: boolean | undefined; + noUnusedLocals?: boolean | undefined; + noUnusedParameters?: boolean | undefined; + noResolve?: boolean | undefined; + noImplicitOverride?: boolean | undefined; + noUncheckedSideEffectImports?: boolean | undefined; + outDir?: string | undefined; + paths?: Record | undefined; + /** Plugins are parsed only so tools can report that native TypeScript does not support them. */ + plugins?: PluginImport[] | undefined; + preserveConstEnums?: boolean | undefined; + preserveSymlinks?: boolean | undefined; + project?: string | undefined; + resolveJsonModule?: boolean | undefined; + resolvePackageJsonExports?: boolean | undefined; + resolvePackageJsonImports?: boolean | undefined; + removeComments?: boolean | undefined; + rewriteRelativeImportExtensions?: boolean | undefined; + reactNamespace?: string | undefined; + rootDir?: string | undefined; + rootDirs?: string[] | undefined; + skipLibCheck?: boolean | undefined; + stableTypeOrdering?: boolean | undefined; + strict?: boolean | undefined; + strictBindCallApply?: boolean | undefined; + strictBuiltinIteratorReturn?: boolean | undefined; + strictFunctionTypes?: boolean | undefined; + strictNullChecks?: boolean | undefined; + strictPropertyInitialization?: boolean | undefined; + stripInternal?: boolean | undefined; + skipDefaultLibCheck?: boolean | undefined; + sourceMap?: boolean | undefined; + sourceRoot?: string | undefined; + suppressOutputPathCheck?: boolean | undefined; + target?: ScriptTarget | undefined; + traceResolution?: boolean | undefined; + tsBuildInfoFile?: string | undefined; + typeRoots?: string[] | undefined; + types?: string[] | undefined; + useDefineForClassFields?: boolean | undefined; + useUnknownInCatchVariables?: boolean | undefined; + verbatimModuleSyntax?: boolean | undefined; + maxNodeModuleJsDepth?: number | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + allowSyntheticDefaultImports?: boolean | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + alwaysStrict?: boolean | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + baseUrl?: string | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + downlevelIteration?: boolean | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + esModuleInterop?: boolean | undefined; + /** @deprecated Do not use outside of options parsing and validation. */ + outFile?: string | undefined; + configFilePath?: string | undefined; + noDtsResolution?: boolean | undefined; + pathsBasePath?: string | undefined; + diagnostics?: boolean | undefined; + extendedDiagnostics?: boolean | undefined; + generateCpuProfile?: string | undefined; + generateTrace?: string | undefined; + listEmittedFiles?: boolean | undefined; + listFiles?: boolean | undefined; + explainFiles?: boolean | undefined; + listFilesOnly?: boolean | undefined; + noEmitForJsFiles?: boolean | undefined; + preserveWatchOutput?: boolean | undefined; + pretty?: boolean | undefined; + version?: boolean | undefined; + watch?: boolean | undefined; + showConfig?: boolean | undefined; + build?: boolean | undefined; + help?: boolean | undefined; + all?: boolean | undefined; + runExternalCode?: boolean | undefined; + pprofDir?: string | undefined; + singleThreaded?: boolean | undefined; + quiet?: boolean | undefined; + checkers?: number | undefined; +} diff --git a/packages/typescript/src/api/proto.ts b/packages/typescript/src/api/proto.ts index 2651e5a2e0d0d..3afbd40a5b6f3 100644 --- a/packages/typescript/src/api/proto.ts +++ b/packages/typescript/src/api/proto.ts @@ -1,160 +1,160 @@ -import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; -import { - documentURIToFileName, - fileNameToDocumentURI, -} from "./path.ts"; -import type { - APIMethodInfo, - CreateSnapshotParams as CoreCreateSnapshotParams, - DocumentIdentifier, - ProjectId, - SignatureResponse, - SourceFileDescriptor, - SourceFileResponse, - SymbolOwner as ProtocolSymbolOwner, - SymbolResponse as ProtocolSymbolResponse, - TypeResponse, -} from "./proto.generated.ts"; -export type { ConfigFileResponse as ParsedCommandLine, DiagnosticResponse as Diagnostic } from "./proto.generated.ts"; -export type { ProtocolSymbolResponse }; - -export * from "./proto.generated.ts"; -export * from "./userPreferences.generated.ts"; - -export interface FileSymbolOwner { - readonly kind: typeof SymbolOwnerKind.File; - readonly file: SourceFileDescriptor; - readonly snapshot?: never; - readonly project?: never; -} - -export interface SnapshotSymbolOwner { - readonly kind: typeof SymbolOwnerKind.Snapshot; - readonly file?: never; - readonly snapshot: number; - readonly project: ProjectId; -} - -export type SymbolOwner = FileSymbolOwner | SnapshotSymbolOwner; -export type SymbolReference = SymbolOwner & { readonly id: number; }; -export type SymbolResponse = Omit & { - readonly reference: SymbolReference; -}; - -export function validateSymbolOwner(owner: ProtocolSymbolOwner): asserts owner is SymbolOwner { - switch (owner.kind) { - case SymbolOwnerKind.File: - if (!owner.file || owner.snapshot !== undefined || owner.project !== undefined) { - throw new Error("Invalid file symbol owner"); - } - return; - case SymbolOwnerKind.Snapshot: - if (owner.file !== undefined || owner.snapshot === undefined || owner.project === undefined) { - throw new Error("Invalid snapshot symbol owner"); - } - return; - default: - throw new Error(`Invalid symbol owner kind '${owner.kind}'`); - } -} - -export function validateSymbolResponse(response: ProtocolSymbolResponse): asserts response is SymbolResponse { - validateSymbolOwner(response.reference); -} - -export type APIMethodsReturning = { [K in keyof APIMethodInfo]: [T] extends [NonNullable] ? [NonNullable] extends [T] ? K : never : never; }[keyof APIMethodInfo]; - -export type SourceFileResponseMethod = APIMethodsReturning; -export type SymbolPropertyMethod = APIMethodsReturning; -export type SymbolsPropertyMethod = APIMethodsReturning; -export type SignaturePropertyMethod = APIMethodsReturning; -export type TypePropertyMethod = Exclude, IntrinsicTypeMethod>; -export type TypesPropertyMethod = APIMethodsReturning; -export type IntrinsicTypeMethod = "getAnyType" | "getBigIntType" | "getBooleanType" | "getESSymbolType" | "getNeverType" | "getNonPrimitiveType" | "getNullType" | "getNumberType" | "getStringType" | "getUndefinedType" | "getUnknownType" | "getVoidType"; - -type BatchableAPIMethod = Exclude; -export type APIRequest = { [K in BatchableAPIMethod]: { method: K; params: APIMethodInfo[K]["params"]; }; }[BatchableAPIMethod]; -export type APIResponse = Request extends APIRequest ? - & { - method: Request["method"]; - } - & ({ - result: APIMethodInfo[Request["method"]]["result"]; - error?: undefined; - } | { - result: null; - error: string; - }) : - never; -export type APIResponseTuple = { - [Index in keyof Requests]: APIResponse; -}; - -/** - * A position within a document, combining a document identifier with an offset. - */ -export interface DocumentPosition { - /** The document containing the position */ - document: DocumentIdentifier; - /** The character offset within the document */ - position: number; -} - -/** - * Resolves a DocumentIdentifier to a file name. - * If the identifier contains a URI, it is converted to a file name. - */ -export function resolveFileName(identifier: DocumentIdentifier): string { - if (typeof identifier === "string") { - return identifier; - } - if (typeof identifier !== "object" || identifier === null || typeof identifier.uri !== "string") { - const received = typeof identifier === "object" && identifier !== null - ? `an object with keys: ${Object.keys(identifier).join(", ")}` - : String(identifier); - throw new TypeError(`Expected a string or { uri } for the document, received ${received}`); - } - return documentURIToFileName(identifier.uri); -} - -/** - * Resolves a DocumentIdentifier to a document URI. - * If the identifier contains a file name, it is converted to a URI. - */ -export function resolveDocumentURI(identifier: DocumentIdentifier): string { - if (typeof identifier === "string") { - return fileNameToDocumentURI(identifier); - } - return identifier.uri; -} - -/** - * Parameters for createSnapshot, including deprecated members handled by `toCreateSnapshotRequest` - */ -export interface CreateSnapshotParams extends CoreCreateSnapshotParams { - /** - * @deprecated Use {@link openProjects} instead. - * Path to a tsconfig.json file to open in the new snapshot. - */ - openProject?: string | undefined; -} - -export interface CreateBuildOrchestratorParams { - rootNames: readonly string[] | null; -} - -/** - * Builds the wire request for createSnapshot, applying the deprecated `openProject` - * compatibility shim: a single `openProject` is folded into `openProjects` and is - * never sent on the wire. - */ -export function toCreateSnapshotRequest(params?: CreateSnapshotParams): CreateSnapshotParams { - const { openProject, openProjects, ...rest } = params ?? {}; - const mergedOpenProjects = openProject !== undefined - ? [resolveFileName(openProject), ...(openProjects ?? [])] - : openProjects; - return { - ...rest, - openProjects: mergedOpenProjects, - }; -} +import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; +import { + documentURIToFileName, + fileNameToDocumentURI, +} from "./path.ts"; +import type { + APIMethodInfo, + CreateSnapshotParams as CoreCreateSnapshotParams, + DocumentIdentifier, + ProjectId, + SignatureResponse, + SourceFileDescriptor, + SourceFileResponse, + SymbolOwner as ProtocolSymbolOwner, + SymbolResponse as ProtocolSymbolResponse, + TypeResponse, +} from "./proto.generated.ts"; +export type { ConfigFileResponse as ParsedCommandLine, DiagnosticResponse as Diagnostic } from "./proto.generated.ts"; +export type { ProtocolSymbolResponse }; + +export * from "./proto.generated.ts"; +export * from "./userPreferences.generated.ts"; + +export interface FileSymbolOwner { + readonly kind: typeof SymbolOwnerKind.File; + readonly file: SourceFileDescriptor; + readonly snapshot?: never; + readonly project?: never; +} + +export interface SnapshotSymbolOwner { + readonly kind: typeof SymbolOwnerKind.Snapshot; + readonly file?: never; + readonly snapshot: number; + readonly project: ProjectId; +} + +export type SymbolOwner = FileSymbolOwner | SnapshotSymbolOwner; +export type SymbolReference = SymbolOwner & { readonly id: number; }; +export type SymbolResponse = Omit & { + readonly reference: SymbolReference; +}; + +export function validateSymbolOwner(owner: ProtocolSymbolOwner): asserts owner is SymbolOwner { + switch (owner.kind) { + case SymbolOwnerKind.File: + if (!owner.file || owner.snapshot !== undefined || owner.project !== undefined) { + throw new Error("Invalid file symbol owner"); + } + return; + case SymbolOwnerKind.Snapshot: + if (owner.file !== undefined || owner.snapshot === undefined || owner.project === undefined) { + throw new Error("Invalid snapshot symbol owner"); + } + return; + default: + throw new Error(`Invalid symbol owner kind '${owner.kind}'`); + } +} + +export function validateSymbolResponse(response: ProtocolSymbolResponse): asserts response is SymbolResponse { + validateSymbolOwner(response.reference); +} + +export type APIMethodsReturning = { [K in keyof APIMethodInfo]: [T] extends [NonNullable] ? [NonNullable] extends [T] ? K : never : never; }[keyof APIMethodInfo]; + +export type SourceFileResponseMethod = APIMethodsReturning; +export type SymbolPropertyMethod = APIMethodsReturning; +export type SymbolsPropertyMethod = APIMethodsReturning; +export type SignaturePropertyMethod = APIMethodsReturning; +export type TypePropertyMethod = Exclude, IntrinsicTypeMethod>; +export type TypesPropertyMethod = APIMethodsReturning; +export type IntrinsicTypeMethod = "getAnyType" | "getBigIntType" | "getBooleanType" | "getESSymbolType" | "getNeverType" | "getNonPrimitiveType" | "getNullType" | "getNumberType" | "getStringType" | "getUndefinedType" | "getUnknownType" | "getVoidType"; + +type BatchableAPIMethod = Exclude; +export type APIRequest = { [K in BatchableAPIMethod]: { method: K; params: APIMethodInfo[K]["params"]; }; }[BatchableAPIMethod]; +export type APIResponse = Request extends APIRequest ? + & { + method: Request["method"]; + } + & ({ + result: APIMethodInfo[Request["method"]]["result"]; + error?: undefined; + } | { + result: null; + error: string; + }) : + never; +export type APIResponseTuple = { + [Index in keyof Requests]: APIResponse; +}; + +/** + * A position within a document, combining a document identifier with an offset. + */ +export interface DocumentPosition { + /** The document containing the position */ + document: DocumentIdentifier; + /** The character offset within the document */ + position: number; +} + +/** + * Resolves a DocumentIdentifier to a file name. + * If the identifier contains a URI, it is converted to a file name. + */ +export function resolveFileName(identifier: DocumentIdentifier): string { + if (typeof identifier === "string") { + return identifier; + } + if (typeof identifier !== "object" || identifier === null || typeof identifier.uri !== "string") { + const received = typeof identifier === "object" && identifier !== null + ? `an object with keys: ${Object.keys(identifier).join(", ")}` + : String(identifier); + throw new TypeError(`Expected a string or { uri } for the document, received ${received}`); + } + return documentURIToFileName(identifier.uri); +} + +/** + * Resolves a DocumentIdentifier to a document URI. + * If the identifier contains a file name, it is converted to a URI. + */ +export function resolveDocumentURI(identifier: DocumentIdentifier): string { + if (typeof identifier === "string") { + return fileNameToDocumentURI(identifier); + } + return identifier.uri; +} + +/** + * Parameters for createSnapshot, including deprecated members handled by `toCreateSnapshotRequest` + */ +export interface CreateSnapshotParams extends CoreCreateSnapshotParams { + /** + * @deprecated Use {@link openProjects} instead. + * Path to a tsconfig.json file to open in the new snapshot. + */ + openProject?: string | undefined; +} + +export interface CreateBuildOrchestratorParams { + rootNames: readonly string[] | null; +} + +/** + * Builds the wire request for createSnapshot, applying the deprecated `openProject` + * compatibility shim: a single `openProject` is folded into `openProjects` and is + * never sent on the wire. + */ +export function toCreateSnapshotRequest(params?: CreateSnapshotParams): CreateSnapshotParams { + const { openProject, openProjects, ...rest } = params ?? {}; + const mergedOpenProjects = openProject !== undefined + ? [resolveFileName(openProject), ...(openProjects ?? [])] + : openProjects; + return { + ...rest, + openProjects: mergedOpenProjects, + }; +} diff --git a/packages/typescript/src/api/sourceFileCache.ts b/packages/typescript/src/api/sourceFileCache.ts index 0db0850c25fd2..73a8360165a38 100644 --- a/packages/typescript/src/api/sourceFileCache.ts +++ b/packages/typescript/src/api/sourceFileCache.ts @@ -1,346 +1,346 @@ -import type { PathKey } from "../ast/index.ts"; -import type { RemoteSourceFile } from "./node/node.ts"; -import type { - ProjectId, - SnapshotChanges, - SourceFileDescriptor, -} from "./proto.ts"; - -/** - * Builds a composite ref key from a snapshot ID and project ID. - */ -function snapshotRefKey(snapshotId: number, projectId: ProjectId): string { - return `snapshot:${snapshotId}:${projectId}`; -} - -function leaseRefKey(leaseId: number): string { - return `lease:${leaseId}`; -} - -function descriptorFromFile(file: RemoteSourceFile): SourceFileDescriptor { - return { - fileName: file.fileName, - path: file.path, - contentHash: file.contentHash, - parseOptionsKey: file.parseOptionsKey, - scriptKind: file.scriptKind, - nodeId: file.nodeId, - }; -} - -function descriptorsEqual(left: SourceFileDescriptor, right: SourceFileDescriptor): boolean { - return left.fileName === right.fileName && - left.path === right.path && - left.contentHash === right.contentHash && - left.parseOptionsKey === right.parseOptionsKey && - left.scriptKind === right.scriptKind && - left.nodeId === right.nodeId; -} - -/** - * A cached source file entry, identified by content hash. - */ -export interface CachedSourceFile { - /** The cached source file object, once its AST has been requested. */ - file?: RemoteSourceFile | undefined; - /** Complete identity available before an AST response is materialized. */ - readonly descriptor: SourceFileDescriptor; - /** Set of snapshot/project or direct-lease ref keys that reference this entry */ - refs: Set; - /** Binder symbols owned by this exact source-file incarnation. */ - readonly symbolsById: Map; - /** Successfully resolved declaration symbols. */ - readonly symbolsByDeclarationNodeIndex: Map; - /** In-flight async declaration symbol lookups. */ - readonly declarationSymbolRequests: Map>; -} - -/** - * Client-side cache for source files keyed by (path, fileName, scriptKind, parseOptionsKey, contentHash). - * - * Supports multiple versions of the same file at the same path (e.g., from - * different snapshots with different file contents). Each version is identified - * by its script kind, content hash, and parse options key. - * - * Entries are ref-counted by (snapshot, project) pairs and direct source-file - * leases. Releasing an owner evicts entries with no remaining references. - * - * When a new snapshot is created, unchanged cache entries from the previous - * snapshot are retained per-project. Only files within changed or removed - * projects are invalidated. - */ -export class SourceFileCache { - /** Map from path to all cached versions of that file */ - private cache: Map[]> = new Map(); - /** Map from snapshotId to (projectId → Set of paths fetched through that project) */ - private snapshotProjectPaths: Map>> = new Map(); - /** Map from direct lease ID to its retained path */ - private leasePaths: Map = new Map(); - /** Map from source-file node ID to its record, for resolving compact symbol references */ - private recordsByNodeId: Map> = new Map(); - - /** - * Get a cached source file already retained for the given (snapshot, project) pair. - * This does not require a content hash or parse options key — it returns the entry - * if one exists with a matching ref. Used to skip the server request entirely when - * retainForSnapshot has already carried over the ref. - * - * A given (snapshot, project) pair always parses a file the same way, so there is - * at most one matching entry per ref. - */ - getRetained(path: PathKey, snapshotId: number, projectId: ProjectId): RemoteSourceFile | undefined { - const entries = this.cache.get(path); - if (!entries) return undefined; - const key = snapshotRefKey(snapshotId, projectId); - const entry = entries.find(e => e.refs.has(key)); - return entry?.file; - } - - get(file: RemoteSourceFile): RemoteSourceFile | undefined { - return this.find(file)?.file; - } - - getOrCreateRecord(file: SourceFileDescriptor, snapshotId: number, projectId: ProjectId): CachedSourceFile { - let entries = this.cache.get(file.path); - if (!entries) { - entries = []; - this.cache.set(file.path, entries); - } - let record = this.findDescriptor(file, entries); - if (!record) { - record = this.addRecord(entries, { - descriptor: file, - refs: new Set(), - symbolsById: new Map(), - symbolsByDeclarationNodeIndex: new Map(), - declarationSymbolRequests: new Map(), - }); - } - this.retainRecordForSnapshot(record, snapshotId, projectId); - return record; - } - - /** Find the live record for a source-file node ID without creating or retaining one. */ - findRecord(nodeId: string): CachedSourceFile | undefined { - return this.recordsByNodeId.get(nodeId); - } - - /** Retain an existing record for a snapshot/project that reused one of its cached objects. */ - retainRecord(record: CachedSourceFile, snapshotId: number, projectId: ProjectId): void { - if (this.recordsByNodeId.get(record.descriptor.nodeId) !== record) { - throw new Error(`Source file record '${record.descriptor.fileName}' is no longer cached`); - } - this.retainRecordForSnapshot(record, snapshotId, projectId); - } - - /** Attach a source file fetched by its descriptor to its existing record. */ - attachFile(record: CachedSourceFile, file: RemoteSourceFile): RemoteSourceFile { - if (!descriptorsEqual(descriptorFromFile(file), record.descriptor)) { - throw new Error(`Source file does not match cached record '${record.descriptor.fileName}'`); - } - const result = record.file ??= file; - result.symbolCache = record; - return result; - } - - getOrCreateSymbol(record: CachedSourceFile, file: SourceFileDescriptor, id: number, create: () => TSymbol): TSymbol { - if (!descriptorsEqual(file, record.descriptor)) { - throw new Error(`Symbol ${id} does not belong to '${record.descriptor.fileName}'`); - } - let symbol = record.symbolsById.get(id); - if (!symbol) { - symbol = create(); - record.symbolsById.set(id, symbol); - } - return symbol; - } - - /** - * Store a source file in the cache and retain it for the given (snapshot, project) pair. - * Returns the cached file — which may be an existing entry if the hash matches. - */ - set(file: RemoteSourceFile, snapshotId: number, projectId: ProjectId): RemoteSourceFile { - const result = this.setWithRef(file, snapshotRefKey(snapshotId, projectId)); - this.trackPath(snapshotId, projectId, file.path); - return result; - } - - /** - * Store a source file in the cache and retain it for a direct lease. - * Returns the cached file so leased and program-owned files share identity. - */ - setForLease(file: RemoteSourceFile, leaseId: number): RemoteSourceFile { - if (this.leasePaths.has(leaseId)) { - throw new Error(`Source file lease ${leaseId} is already cached`); - } - const result = this.setWithRef(file, leaseRefKey(leaseId)); - this.leasePaths.set(leaseId, file.path); - return result; - } - - private setWithRef(file: RemoteSourceFile, ref: string): RemoteSourceFile { - let entries = this.cache.get(file.path); - if (!entries) { - entries = []; - this.cache.set(file.path, entries); - } - let record = this.find(file, entries); - if (!record) { - record = (file.symbolCache as CachedSourceFile | undefined) ?? { - descriptor: descriptorFromFile(file), - refs: new Set(), - symbolsById: new Map(), - symbolsByDeclarationNodeIndex: new Map(), - declarationSymbolRequests: new Map(), - }; - this.addRecord(entries, record); - } - record.refs.add(ref); - return this.attachFile(record, file); - } - - private addRecord(entries: CachedSourceFile[], record: CachedSourceFile): CachedSourceFile { - entries.push(record); - this.recordsByNodeId.set(record.descriptor.nodeId, record); - return record; - } - - private retainRecordForSnapshot(record: CachedSourceFile, snapshotId: number, projectId: ProjectId): void { - record.refs.add(snapshotRefKey(snapshotId, projectId)); - this.trackPath(snapshotId, projectId, record.descriptor.path); - } - - private find(file: RemoteSourceFile, entries = this.cache.get(file.path)): CachedSourceFile | undefined { - return this.findDescriptor(descriptorFromFile(file), entries); - } - - private findDescriptor(file: SourceFileDescriptor, entries = this.cache.get(file.path)): CachedSourceFile | undefined { - return entries?.find(entry => descriptorsEqual(entry.descriptor, file)); - } - - /** - * Retain cache entries from a previous snapshot for a new snapshot. - * For each project in the previous snapshot: - * - Removed projects: skip (don't retain any refs). - * - Changed projects: retain refs for files not listed in changedFiles/deletedFiles. - * - Unchanged projects: retain all refs. - */ - retainForSnapshot(newSnapshotId: number, previousSnapshotId: number, changes: SnapshotChanges | undefined): void { - const prevProjectMap = this.snapshotProjectPaths.get(previousSnapshotId); - if (!prevProjectMap) return; - - const removedProjects = new Set(changes?.removedProjects ?? []); - const changedProjects = changes?.changedProjects ?? {}; - - for (const [projectId, paths] of prevProjectMap) { - if (removedProjects.has(projectId)) continue; - - const projectChanges = changedProjects[projectId]; - let invalidPaths: Set | undefined; - if (projectChanges) { - invalidPaths = new Set(); - for (const p of projectChanges.changedFiles ?? []) invalidPaths.add(p); - for (const p of projectChanges.deletedFiles ?? []) invalidPaths.add(p); - } - - const prevRef = snapshotRefKey(previousSnapshotId, projectId); - const newRef = snapshotRefKey(newSnapshotId, projectId); - - for (const path of paths) { - if (invalidPaths?.has(path)) continue; - const entries = this.cache.get(path); - if (!entries) continue; - for (const entry of entries) { - if (entry.refs.has(prevRef)) { - entry.refs.add(newRef); - this.trackPath(newSnapshotId, projectId, path); - } - } - } - } - } - - /** - * Release all entries retained by the given snapshot across all projects. - * Only visits paths that the snapshot actually referenced. - * Entries with no remaining refs are evicted. - */ - releaseSnapshot(snapshotId: number): void { - const projectMap = this.snapshotProjectPaths.get(snapshotId); - if (!projectMap) return; - for (const [projectId, paths] of projectMap) { - const key = snapshotRefKey(snapshotId, projectId); - for (const path of paths) { - this.releaseRef(path, key); - } - } - this.snapshotProjectPaths.delete(snapshotId); - } - - releaseLease(leaseId: number): void { - const path = this.leasePaths.get(leaseId); - if (path === undefined) return; - this.releaseRef(path, leaseRefKey(leaseId)); - this.leasePaths.delete(leaseId); - } - - private releaseRef(path: PathKey, ref: string): void { - const entries = this.cache.get(path); - if (!entries) return; - for (let i = entries.length - 1; i >= 0; i--) { - entries[i].refs.delete(ref); - if (entries[i].refs.size === 0) { - const [evicted] = entries.splice(i, 1); - if (this.recordsByNodeId.get(evicted.descriptor.nodeId) === evicted) { - this.recordsByNodeId.delete(evicted.descriptor.nodeId); - } - } - } - if (entries.length === 0) { - this.cache.delete(path); - } - } - - private trackPath(snapshotId: number, projectId: ProjectId, path: PathKey): void { - let projectMap = this.snapshotProjectPaths.get(snapshotId); - if (!projectMap) { - projectMap = new Map>(); - this.snapshotProjectPaths.set(snapshotId, projectMap); - } - let paths = projectMap.get(projectId); - if (!paths) { - paths = new Set(); - projectMap.set(projectId, paths); - } - paths.add(path); - } - - /** - * Drop local cache ownership without releasing server-side snapshots or leases. - * Caller-held ASTs may keep detached records alive; newly cached records need not - * preserve object identity with those detached records. - */ - clear(): void { - for (const record of this.recordsByNodeId.values()) { - record.refs.clear(); - } - this.cache.clear(); - this.snapshotProjectPaths.clear(); - this.leasePaths.clear(); - this.recordsByNodeId.clear(); - } - - /** - * Get the number of unique paths in the cache. - */ - get size(): number { - return this.cache.size; - } - - /** - * Check if a path is in the cache. - */ - has(path: PathKey): boolean { - return this.cache.has(path); - } -} +import type { PathKey } from "../ast/index.ts"; +import type { RemoteSourceFile } from "./node/node.ts"; +import type { + ProjectId, + SnapshotChanges, + SourceFileDescriptor, +} from "./proto.ts"; + +/** + * Builds a composite ref key from a snapshot ID and project ID. + */ +function snapshotRefKey(snapshotId: number, projectId: ProjectId): string { + return `snapshot:${snapshotId}:${projectId}`; +} + +function leaseRefKey(leaseId: number): string { + return `lease:${leaseId}`; +} + +function descriptorFromFile(file: RemoteSourceFile): SourceFileDescriptor { + return { + fileName: file.fileName, + path: file.path, + contentHash: file.contentHash, + parseOptionsKey: file.parseOptionsKey, + scriptKind: file.scriptKind, + nodeId: file.nodeId, + }; +} + +function descriptorsEqual(left: SourceFileDescriptor, right: SourceFileDescriptor): boolean { + return left.fileName === right.fileName && + left.path === right.path && + left.contentHash === right.contentHash && + left.parseOptionsKey === right.parseOptionsKey && + left.scriptKind === right.scriptKind && + left.nodeId === right.nodeId; +} + +/** + * A cached source file entry, identified by content hash. + */ +export interface CachedSourceFile { + /** The cached source file object, once its AST has been requested. */ + file?: RemoteSourceFile | undefined; + /** Complete identity available before an AST response is materialized. */ + readonly descriptor: SourceFileDescriptor; + /** Set of snapshot/project or direct-lease ref keys that reference this entry */ + refs: Set; + /** Binder symbols owned by this exact source-file incarnation. */ + readonly symbolsById: Map; + /** Successfully resolved declaration symbols. */ + readonly symbolsByDeclarationNodeIndex: Map; + /** In-flight async declaration symbol lookups. */ + readonly declarationSymbolRequests: Map>; +} + +/** + * Client-side cache for source files keyed by (path, fileName, scriptKind, parseOptionsKey, contentHash). + * + * Supports multiple versions of the same file at the same path (e.g., from + * different snapshots with different file contents). Each version is identified + * by its script kind, content hash, and parse options key. + * + * Entries are ref-counted by (snapshot, project) pairs and direct source-file + * leases. Releasing an owner evicts entries with no remaining references. + * + * When a new snapshot is created, unchanged cache entries from the previous + * snapshot are retained per-project. Only files within changed or removed + * projects are invalidated. + */ +export class SourceFileCache { + /** Map from path to all cached versions of that file */ + private cache: Map[]> = new Map(); + /** Map from snapshotId to (projectId → Set of paths fetched through that project) */ + private snapshotProjectPaths: Map>> = new Map(); + /** Map from direct lease ID to its retained path */ + private leasePaths: Map = new Map(); + /** Map from source-file node ID to its record, for resolving compact symbol references */ + private recordsByNodeId: Map> = new Map(); + + /** + * Get a cached source file already retained for the given (snapshot, project) pair. + * This does not require a content hash or parse options key — it returns the entry + * if one exists with a matching ref. Used to skip the server request entirely when + * retainForSnapshot has already carried over the ref. + * + * A given (snapshot, project) pair always parses a file the same way, so there is + * at most one matching entry per ref. + */ + getRetained(path: PathKey, snapshotId: number, projectId: ProjectId): RemoteSourceFile | undefined { + const entries = this.cache.get(path); + if (!entries) return undefined; + const key = snapshotRefKey(snapshotId, projectId); + const entry = entries.find(e => e.refs.has(key)); + return entry?.file; + } + + get(file: RemoteSourceFile): RemoteSourceFile | undefined { + return this.find(file)?.file; + } + + getOrCreateRecord(file: SourceFileDescriptor, snapshotId: number, projectId: ProjectId): CachedSourceFile { + let entries = this.cache.get(file.path); + if (!entries) { + entries = []; + this.cache.set(file.path, entries); + } + let record = this.findDescriptor(file, entries); + if (!record) { + record = this.addRecord(entries, { + descriptor: file, + refs: new Set(), + symbolsById: new Map(), + symbolsByDeclarationNodeIndex: new Map(), + declarationSymbolRequests: new Map(), + }); + } + this.retainRecordForSnapshot(record, snapshotId, projectId); + return record; + } + + /** Find the live record for a source-file node ID without creating or retaining one. */ + findRecord(nodeId: string): CachedSourceFile | undefined { + return this.recordsByNodeId.get(nodeId); + } + + /** Retain an existing record for a snapshot/project that reused one of its cached objects. */ + retainRecord(record: CachedSourceFile, snapshotId: number, projectId: ProjectId): void { + if (this.recordsByNodeId.get(record.descriptor.nodeId) !== record) { + throw new Error(`Source file record '${record.descriptor.fileName}' is no longer cached`); + } + this.retainRecordForSnapshot(record, snapshotId, projectId); + } + + /** Attach a source file fetched by its descriptor to its existing record. */ + attachFile(record: CachedSourceFile, file: RemoteSourceFile): RemoteSourceFile { + if (!descriptorsEqual(descriptorFromFile(file), record.descriptor)) { + throw new Error(`Source file does not match cached record '${record.descriptor.fileName}'`); + } + const result = record.file ??= file; + result.symbolCache = record; + return result; + } + + getOrCreateSymbol(record: CachedSourceFile, file: SourceFileDescriptor, id: number, create: () => TSymbol): TSymbol { + if (!descriptorsEqual(file, record.descriptor)) { + throw new Error(`Symbol ${id} does not belong to '${record.descriptor.fileName}'`); + } + let symbol = record.symbolsById.get(id); + if (!symbol) { + symbol = create(); + record.symbolsById.set(id, symbol); + } + return symbol; + } + + /** + * Store a source file in the cache and retain it for the given (snapshot, project) pair. + * Returns the cached file — which may be an existing entry if the hash matches. + */ + set(file: RemoteSourceFile, snapshotId: number, projectId: ProjectId): RemoteSourceFile { + const result = this.setWithRef(file, snapshotRefKey(snapshotId, projectId)); + this.trackPath(snapshotId, projectId, file.path); + return result; + } + + /** + * Store a source file in the cache and retain it for a direct lease. + * Returns the cached file so leased and program-owned files share identity. + */ + setForLease(file: RemoteSourceFile, leaseId: number): RemoteSourceFile { + if (this.leasePaths.has(leaseId)) { + throw new Error(`Source file lease ${leaseId} is already cached`); + } + const result = this.setWithRef(file, leaseRefKey(leaseId)); + this.leasePaths.set(leaseId, file.path); + return result; + } + + private setWithRef(file: RemoteSourceFile, ref: string): RemoteSourceFile { + let entries = this.cache.get(file.path); + if (!entries) { + entries = []; + this.cache.set(file.path, entries); + } + let record = this.find(file, entries); + if (!record) { + record = (file.symbolCache as CachedSourceFile | undefined) ?? { + descriptor: descriptorFromFile(file), + refs: new Set(), + symbolsById: new Map(), + symbolsByDeclarationNodeIndex: new Map(), + declarationSymbolRequests: new Map(), + }; + this.addRecord(entries, record); + } + record.refs.add(ref); + return this.attachFile(record, file); + } + + private addRecord(entries: CachedSourceFile[], record: CachedSourceFile): CachedSourceFile { + entries.push(record); + this.recordsByNodeId.set(record.descriptor.nodeId, record); + return record; + } + + private retainRecordForSnapshot(record: CachedSourceFile, snapshotId: number, projectId: ProjectId): void { + record.refs.add(snapshotRefKey(snapshotId, projectId)); + this.trackPath(snapshotId, projectId, record.descriptor.path); + } + + private find(file: RemoteSourceFile, entries = this.cache.get(file.path)): CachedSourceFile | undefined { + return this.findDescriptor(descriptorFromFile(file), entries); + } + + private findDescriptor(file: SourceFileDescriptor, entries = this.cache.get(file.path)): CachedSourceFile | undefined { + return entries?.find(entry => descriptorsEqual(entry.descriptor, file)); + } + + /** + * Retain cache entries from a previous snapshot for a new snapshot. + * For each project in the previous snapshot: + * - Removed projects: skip (don't retain any refs). + * - Changed projects: retain refs for files not listed in changedFiles/deletedFiles. + * - Unchanged projects: retain all refs. + */ + retainForSnapshot(newSnapshotId: number, previousSnapshotId: number, changes: SnapshotChanges | undefined): void { + const prevProjectMap = this.snapshotProjectPaths.get(previousSnapshotId); + if (!prevProjectMap) return; + + const removedProjects = new Set(changes?.removedProjects ?? []); + const changedProjects = changes?.changedProjects ?? {}; + + for (const [projectId, paths] of prevProjectMap) { + if (removedProjects.has(projectId)) continue; + + const projectChanges = changedProjects[projectId]; + let invalidPaths: Set | undefined; + if (projectChanges) { + invalidPaths = new Set(); + for (const p of projectChanges.changedFiles ?? []) invalidPaths.add(p); + for (const p of projectChanges.deletedFiles ?? []) invalidPaths.add(p); + } + + const prevRef = snapshotRefKey(previousSnapshotId, projectId); + const newRef = snapshotRefKey(newSnapshotId, projectId); + + for (const path of paths) { + if (invalidPaths?.has(path)) continue; + const entries = this.cache.get(path); + if (!entries) continue; + for (const entry of entries) { + if (entry.refs.has(prevRef)) { + entry.refs.add(newRef); + this.trackPath(newSnapshotId, projectId, path); + } + } + } + } + } + + /** + * Release all entries retained by the given snapshot across all projects. + * Only visits paths that the snapshot actually referenced. + * Entries with no remaining refs are evicted. + */ + releaseSnapshot(snapshotId: number): void { + const projectMap = this.snapshotProjectPaths.get(snapshotId); + if (!projectMap) return; + for (const [projectId, paths] of projectMap) { + const key = snapshotRefKey(snapshotId, projectId); + for (const path of paths) { + this.releaseRef(path, key); + } + } + this.snapshotProjectPaths.delete(snapshotId); + } + + releaseLease(leaseId: number): void { + const path = this.leasePaths.get(leaseId); + if (path === undefined) return; + this.releaseRef(path, leaseRefKey(leaseId)); + this.leasePaths.delete(leaseId); + } + + private releaseRef(path: PathKey, ref: string): void { + const entries = this.cache.get(path); + if (!entries) return; + for (let i = entries.length - 1; i >= 0; i--) { + entries[i].refs.delete(ref); + if (entries[i].refs.size === 0) { + const [evicted] = entries.splice(i, 1); + if (this.recordsByNodeId.get(evicted.descriptor.nodeId) === evicted) { + this.recordsByNodeId.delete(evicted.descriptor.nodeId); + } + } + } + if (entries.length === 0) { + this.cache.delete(path); + } + } + + private trackPath(snapshotId: number, projectId: ProjectId, path: PathKey): void { + let projectMap = this.snapshotProjectPaths.get(snapshotId); + if (!projectMap) { + projectMap = new Map>(); + this.snapshotProjectPaths.set(snapshotId, projectMap); + } + let paths = projectMap.get(projectId); + if (!paths) { + paths = new Set(); + projectMap.set(projectId, paths); + } + paths.add(path); + } + + /** + * Drop local cache ownership without releasing server-side snapshots or leases. + * Caller-held ASTs may keep detached records alive; newly cached records need not + * preserve object identity with those detached records. + */ + clear(): void { + for (const record of this.recordsByNodeId.values()) { + record.refs.clear(); + } + this.cache.clear(); + this.snapshotProjectPaths.clear(); + this.leasePaths.clear(); + this.recordsByNodeId.clear(); + } + + /** + * Get the number of unique paths in the cache. + */ + get size(): number { + return this.cache.size; + } + + /** + * Check if a path is in the cache. + */ + has(path: PathKey): boolean { + return this.cache.has(path); + } +} diff --git a/packages/typescript/src/api/sync/api.ts b/packages/typescript/src/api/sync/api.ts index be67bd8ca2bc0..fd3491c29f696 100644 --- a/packages/typescript/src/api/sync/api.ts +++ b/packages/typescript/src/api/sync/api.ts @@ -1,8262 +1,8262 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: src/api/async/api.ts -// Regenerate: npm run generate (from packages/typescript) -// -import type { - APIRequest as ProtocolRequest, - APIResponse as ProtocolResponse, -} from "../proto.ts"; -import { - apiRequest, - cacheGeneratorMethod, -} from "./generatorSupport.ts"; - -import { CheckFlags } from "#enums/checkFlags"; -import { CompletionItemKind } from "#enums/completionItemKind"; -import { DiagnosticCategory } from "#enums/diagnosticCategory"; -import { ElementFlags } from "#enums/elementFlags"; -import { EmitOnly } from "#enums/emitOnly"; -import { IndexKind } from "#enums/indexKind"; -import { JsxEmit } from "#enums/jsxEmit"; -import { ModuleKind } from "#enums/moduleKind"; -import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; -import { NewLineKind } from "#enums/newLineKind"; -import { NodeBuilderFlags } from "#enums/nodeBuilderFlags"; -import { ObjectFlags } from "#enums/objectFlags"; -import { ScriptKind } from "#enums/scriptKind"; -import { SignatureFlags } from "#enums/signatureFlags"; -import { SignatureKind } from "#enums/signatureKind"; -import { SymbolFlags } from "#enums/symbolFlags"; -import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; -import { TypeFlags } from "#enums/typeFlags"; -import { TypeFormatFlags } from "#enums/typeFormatFlags"; -import { TypePredicateKind } from "#enums/typePredicateKind"; -import { - type __String, - type CallLikeExpression, - type Declaration, - type Expression, - type FileReference, - type Identifier, - type IndexSignatureDeclaration, - ModifierFlags, - type NamedTupleMember, - type Node, - type ParameterDeclaration, - type PathKey, - type RootedDirectoryPath, - type RootedFilePath, - type SourceFile, - type StringLiteralLikeNode, - type SyntaxKind, - type TypeNode, - unescapeLeadingUnderscores, -} from "../../ast/index.ts"; -import { assertNever } from "../../internal/utils.ts"; -import { - encodeNode, - uint8ArrayToBase64, -} from "../node/encoder.ts"; -import { - decodeNode, - getNodeId, - parseNodeHandleFromCompiler, - readParseOptionsKey, - readSourceFileHash, - readSourceFileLease, - RemoteNode, - RemoteSourceFile, -} from "../node/node.ts"; -import { Wtf8Decoder } from "../node/wtf8.ts"; -import type { - APIOptions, - LSPConnectionOptions, -} from "../options.ts"; -import { - canonicalize, - CaseSensitivity, - pathKey, - toRootedDirectoryPath, - toRootedPath, -} from "../path.ts"; -import { prepareCompilerOptions } from "../prepareCompilerOptions.generated.ts"; -import type { - BuildResponse, - CleanBuildResponse, - CompactSymbolReference, - CompilerOptions, - CompletionPreferences, - ConfiguredProjectId, - CreateBuildOrchestratorResponse, - CreateProgramOptions as ProtocolCreateProgramOptions, - CreateSnapshotParams as ProtocolCreateSnapshotParams, - CreateSnapshotProgramParams as ProtocolCreateSnapshotProgramParams, - CreateSnapshotResponse, - CreateSourceFileOptions, - Diagnostic, - DiagnosticResponse, - DocumentIdentifier, - DocumentPosition, - EmitOutputResponse as ProtocolEmitOutputResponse, - FileNotifications, - ImportAdderAction, - InferredProjectId, - IntrinsicTypeMethod, - LanguageServerSnapshotChanges as ProtocolLanguageServerSnapshotChanges, - ModuleResolutionEntry, - ModuleResolutionSpec, - PackageId, - ParsedCommandLine, - ProjectId, - ProjectReference, - ProjectResponse, - ProtocolSymbolResponse, - RawCompilerOptions, - ReadConfigFileResponse, - ReconfigureSnapshotProgramParams as ProtocolReconfigureSnapshotProgramParams, - ResolutionMode, - ResolvedModule, - ResolvedTypeReferenceDirective, - ResolveModuleNameResult, - SignaturePropertyMethod, - SignatureResponse, - SourceFileDescriptor, - SourceFileMetadata, - StaticModuleResolution, - SymbolPropertyMethod, - SymbolReference, - SymbolResponse, - SymbolsPropertyMethod, - SyntheticProjectId, - TextEdit, - TypeAcquisition, - TypePropertyMethod, - TypeResponse, - TypesPropertyMethod, - UserPreferences, -} from "../proto.ts"; -import { - resolveFileName, - toCreateSnapshotRequest, - validateSymbolResponse, -} from "../proto.ts"; -import { - type CachedSourceFile, - SourceFileCache, -} from "../sourceFileCache.ts"; -import type { - RequestTiming, - TimingAccumulators, - TimingCollector, - TimingInfo, -} from "../timing.ts"; -import { - Client, - type ClientSocketOptions, - type ClientSpawnOptions, -} from "./client.ts"; -import type { - AssertsIdentifierTypePredicate, - AssertsThisTypePredicate, - BigIntLiteralType, - BooleanLiteralType, - CompletionEntry, - CompletionInfo, - CompletionOptions, - ConditionalType, - EmitOutput, - EmitOutputFile, - EmitResult, - FormatDiagnosticsHost, - FreshableType, - GenericType, - GetImportEditsForSymbolsOptions, - IdentifierTypePredicate, - ImportAdderAction as APIImportAdderAction, - IndexedAccessType, - IndexInfo, - IndexType, - InterfaceType, - IntersectionType, - IntrinsicType, - JSDocTagInfo, - LiteralType, - MappedType, - NumberLiteralType, - ObjectType, - StringLiteralType, - StringMappingType, - StructuredType, - SubstitutionType, - TemplateLiteralType, - ThisTypePredicate, - TupleType, - TupleTypeReference, - Type, - TypeParameter, - TypePredicate, - TypePredicateBase, - TypeReference, - UnionOrIntersectionType, - UnionType, -} from "./types.ts"; - -export { formatDiagnostics, formatDiagnosticsWithColorAndContext } from "../diagnosticFormatter.ts"; -export { documentURIToFileName, fileNameToDocumentURI } from "../path.ts"; -export { CheckFlags, CompletionItemKind, DiagnosticCategory, ElementFlags, EmitOnly, IndexKind, JsxEmit, ModifierFlags, ModuleKind, ModuleResolutionKind, NodeBuilderFlags, ObjectFlags, ScriptKind, SignatureFlags, SignatureKind, SymbolFlags, SymbolOwnerKind, TypeFlags, TypeFormatFlags, TypePredicateKind }; -export type { - APIImportAdderAction as ImportAdderAction, - APIOptions, - AssertsIdentifierTypePredicate, - AssertsThisTypePredicate, - BigIntLiteralType, - BooleanLiteralType, - ClientSocketOptions, - ClientSpawnOptions, - CompilerOptions, - CompletionEntry, - CompletionInfo, - CompletionOptions, - CompletionPreferences, - ConditionalType, - ConfiguredProjectId, - CreateSourceFileOptions, - Diagnostic, - DocumentIdentifier, - DocumentPosition, - EmitOutput, - EmitOutputFile, - EmitResult, - FileNotifications, - FormatDiagnosticsHost, - FreshableType, - GenericType, - GetImportEditsForSymbolsOptions, - IdentifierTypePredicate, - IndexedAccessType, - IndexInfo, - IndexType, - InferredProjectId, - InterfaceType, - IntersectionType, - IntrinsicType, - JSDocTagInfo, - LiteralType, - LSPConnectionOptions, - MappedType, - ModuleResolutionEntry, - ModuleResolutionSpec, - NumberLiteralType, - ObjectType, - PackageId, - ParsedCommandLine, - ProjectId, - ProjectReference, - RawCompilerOptions, - ReadConfigFileResponse, - RequestTiming, - ResolutionMode, - ResolvedModule, - ResolvedTypeReferenceDirective, - ResolveModuleNameResult, - SourceFileMetadata, - StaticModuleResolution, - StringLiteralType, - StringMappingType, - StructuredType, - SubstitutionType, - SyntheticProjectId, - TemplateLiteralType, - TextEdit, - ThisTypePredicate, - TimingAccumulators, - TimingInfo, - TupleType, - TupleTypeReference, - Type, - TypeAcquisition, - TypeParameter, - TypePredicate, - TypePredicateBase, - TypeReference, - UnionOrIntersectionType, - UnionType, - UserPreferences, -}; - -export interface ModuleResolverOptions { - moduleResolutions?: ModuleResolutionSpec | undefined; - resolveModuleName?: ResolveModuleNameCallback | undefined; -} - -export interface ResolveModuleNameCallbackOptions { - snapshot: Snapshot | InProgressSnapshot | undefined; -} - -declare const inProgressSnapshotBrand: unique symbol; -export type InProgressSnapshot = number & { readonly [inProgressSnapshotBrand]: never; }; - -export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined; - -export type CreateProgramOptions = Omit & { - moduleResolver?: ModuleResolver | undefined; - projectReferences?: readonly (Omit & { path: string; })[] | undefined; -}; -export type CreateSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; -export type ReconfigureSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; -export type CreateSnapshotParams = Omit & { - createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; - reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; -}; -export type LanguageServerSnapshotChanges = Omit & { - createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; - reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; -}; - -let nextModuleResolutionCallbackId = 0; -function registerModuleResolutionCallback(client: Client, callback: ResolveModuleNameCallback, getSnapshot: (id: number) => Snapshot | undefined): { name: string; dispose: () => void; } { - const name = `resolveModuleName/${++nextModuleResolutionCallbackId}`; - const dispose = client.registerCallback(name, params => { - const { moduleName, containingDirectory, resolutionMode, snapshot: snapshotId, inProgressSnapshot } = params as { - moduleName: string; - containingDirectory: string; - resolutionMode?: ResolutionMode; - snapshot?: number; - inProgressSnapshot?: number; - }; - let snapshot: Snapshot | InProgressSnapshot | undefined = snapshotId === undefined ? undefined : getSnapshot(snapshotId); - if (snapshotId !== undefined && snapshot === undefined) { - throw new Error(`Snapshot ${snapshotId} is inactive`); - } - if (inProgressSnapshot !== undefined) { - snapshot = -inProgressSnapshot as InProgressSnapshot; - } - return callback( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - ); - }); - return { name, dispose }; -} - -export interface TranspileOptions { - compilerOptions?: RawCompilerOptions | undefined; - fileName?: string | undefined; - reportDiagnostics?: boolean | undefined; -} - -export interface TranspileOutput { - outputText: string; - diagnostics?: readonly Diagnostic[] | undefined; - sourceMapText?: string | undefined; -} - -export { all, type AllAPIRequestGenerator, type AnyAPIRequestGenerator, type APIRequestGenerator, defer, type DeferredAPIRequestGenerator, type ExecutedGeneratorsResults } from "./generatorSupport.ts"; -import { sourceFileResponseToUint8Array } from "../node/encoder.ts"; -import { - type AnyAPIRequestGenerator, - type ExecutedGeneratorsResults, - executeRequestGenerators, -} from "./generatorSupport.ts"; - -export class API implements FormatDiagnosticsHost { - /** @internal */ - readonly client: Client; - /** @internal */ - readonly sourceFileCache: SourceFileCache; - private toPath: ((fileName: string, basePath?: string) => PathKey) | undefined; - private readonly decoder = new Wtf8Decoder(); - private currentDirectory: RootedDirectoryPath | undefined; - private caseSensitivity: CaseSensitivity | undefined; - private initialized: boolean = false; - private initializing: void | undefined; - private activeSnapshots: Map = new Map(); - private activeBuildOrchestrators: Set = new Set(); - private activeSourceFileLeases: Map = new Map(); - readonly printer: Printer; - readonly internal: InternalAPI; - - constructor(options: APIOptions | LSPConnectionOptions = {}) { - this.client = new Client(options); - this.sourceFileCache = new SourceFileCache(); - this.printer = new Printer(this.client); - this.internal = new InternalAPI(this.client, this.ensureInitialized); - } - - /** - * Looks up a remote declaration's binder symbol. Throws for synthesized or configuration ASTs. - */ - get getSymbol(): { - (declaration: Declaration): Symbol; - gen(declaration: Declaration): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSymbol", - function (declaration: Declaration): Symbol { - const file = getRemoteSourceFile(declaration); - if (!file) throw new Error(`Source file not found for declaration`); - const record = file.symbolCache as CachedSourceFile | undefined; - if (!record) throw new Error(`Cached source file not found for declaration`); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - const cached = record.symbolsByDeclarationNodeIndex.get(index); - if (cached) return cached; - return owner.fetchDeclarationSymbol(record, index); - }, - function* (declaration: Declaration): Generator { - const file = getRemoteSourceFile(declaration); - if (!file) throw new Error(`Source file not found for declaration`); - const record = file.symbolCache as CachedSourceFile | undefined; - if (!record) throw new Error(`Cached source file not found for declaration`); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - const cached = record.symbolsByDeclarationNodeIndex.get(index); - if (cached) return cached; - return yield* owner.fetchDeclarationSymbol.gen(record, index); - }, - ); - } - - private get fetchDeclarationSymbol(): { - (record: CachedSourceFile, index: number): Symbol; - gen(record: CachedSourceFile, index: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchDeclarationSymbol", - function (record: CachedSourceFile, index: number): Symbol { - const data = owner.client.apiRequest("getSymbolOfDeclaration", { - file: record.descriptor, - index, - }); - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.File) { - throw new Error(`Symbol ${reference.id} is not file-owned`); - } - const fileOwner: SourceFileOwner = { record, api: owner }; - const symbol = owner.sourceFileCache.getOrCreateSymbol( - record, - reference.file, - reference.id, - () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), - ); - record.symbolsByDeclarationNodeIndex.set(index, symbol); - return symbol; - }, - function* (record: CachedSourceFile, index: number): Generator { - const data = yield* apiRequest("getSymbolOfDeclaration", { - file: record.descriptor, - index, - }); - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.File) { - throw new Error(`Symbol ${reference.id} is not file-owned`); - } - const fileOwner: SourceFileOwner = { record, api: owner }; - const symbol = owner.sourceFileCache.getOrCreateSymbol( - record, - reference.file, - reference.id, - () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), - ); - record.symbolsByDeclarationNodeIndex.set(index, symbol); - return symbol; - }, - ); - } - - /** - * Create an API instance from an existing LSP connection's API session. - * Use this when connecting to an API pipe provided by an LSP server via custom/initializeAPISession. - */ - static get fromLSPConnection(): { - (options: LSPConnectionOptions): API; - gen(options: LSPConnectionOptions): Generator, ProtocolResponse["result"]>; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fromLSPConnection", - function (options: LSPConnectionOptions): API { - const api = new API(options); - api.ensureInitialized(); - return api; - }, - function* (options: LSPConnectionOptions): Generator, ProtocolResponse["result"]> { - const api = new API(options); - yield* api.ensureInitialized.gen(); - return api; - }, - ); - } - - batch(...requestGenerators: T): ExecutedGeneratorsResults { - return executeRequestGenerators(requestGenerators, requests => this.client.batchRequests(requests).responses); - } - - private get ensureInitialized(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "ensureInitialized", - function (): void { - if (owner.initialized) return; - return owner.initializing ??= owner.initializeWorker(); - }, - function* (): Generator { - if (owner.initialized) return; - return owner.initializing ??= yield* owner.initializeWorker.gen(); - }, - ); - } - - private get initializeWorker(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "initializeWorker", - function (): void { - try { - const response = owner.client.apiRequest("initialize", null); - owner.currentDirectory = response.currentDirectory; - owner.caseSensitivity = response.caseSensitivity; - owner.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); - owner.initialized = true; - } - catch (error) { - owner.initializing = undefined; - throw error; - } - }, - function* (): Generator { - try { - const response = yield* apiRequest("initialize", null); - owner.currentDirectory = response.currentDirectory; - owner.caseSensitivity = response.caseSensitivity; - owner.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); - owner.initialized = true; - } - catch (error) { - owner.initializing = undefined; - throw error; - } - }, - ); - } - - getCurrentDirectory(): RootedDirectoryPath { - if (this.currentDirectory === undefined) { - throw new Error("API has not been initialized"); - } - return this.currentDirectory; - } - - getCanonicalFileName(fileName: string): string { - return canonicalize(fileName, this.getCaseSensitivity()); - } - - private getCaseSensitivity(): CaseSensitivity { - if (this.caseSensitivity === undefined) { - throw new Error("API has not been initialized"); - } - return this.caseSensitivity; - } - - getNewLine(): string { - return "\n"; - } - - get createBuildOrchestrator(): { - (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): BuildOrchestrator; - gen(rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "createBuildOrchestrator", - function (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): BuildOrchestrator { - owner.ensureInitialized(); - const orchestratorResponse = owner.client.apiRequest("createBuildOrchestrator", { - ...buildOrchestratorOptions, - ...buildOrchestratorOptions.overrideCompilerOptions, - cwd: buildOrchestratorOptions.cwd === undefined - ? undefined - : toRootedDirectoryPath(buildOrchestratorOptions.cwd, owner.getCurrentDirectory()), - rootNames, - }); - - const orchestrator = new BuildOrchestrator(owner.client, orchestratorResponse, () => { - owner.activeBuildOrchestrators.delete(orchestrator); - }); - owner.activeBuildOrchestrators.add(orchestrator); - return orchestrator; - }, - function* (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Generator { - yield* owner.ensureInitialized.gen(); - const orchestratorResponse = yield* apiRequest("createBuildOrchestrator", { - ...buildOrchestratorOptions, - ...buildOrchestratorOptions.overrideCompilerOptions, - cwd: buildOrchestratorOptions.cwd === undefined - ? undefined - : toRootedDirectoryPath(buildOrchestratorOptions.cwd, owner.getCurrentDirectory()), - rootNames, - }); - - const orchestrator = new BuildOrchestrator(owner.client, orchestratorResponse, () => { - owner.activeBuildOrchestrators.delete(orchestrator); - }); - owner.activeBuildOrchestrators.add(orchestrator); - return orchestrator; - }, - ); - } - - get parseConfigFile(): { - (file: DocumentIdentifier): ParsedCommandLine; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "parseConfigFile", - function (file: DocumentIdentifier): ParsedCommandLine { - owner.ensureInitialized(); - return owner.client.apiRequest("parseConfigFile", { file }); - }, - function* (file: DocumentIdentifier): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("parseConfigFile", { file }); - }, - ); - } - - get parseCommandLine(): { - (commandLine: readonly string[]): ParsedCommandLine; - gen(commandLine: readonly string[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "parseCommandLine", - function (commandLine: readonly string[]): ParsedCommandLine { - owner.ensureInitialized(); - return owner.client.apiRequest("parseCommandLine", { commandLine }); - }, - function* (commandLine: readonly string[]): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("parseCommandLine", { commandLine }); - }, - ); - } - - get readConfigFile(): { - (file: DocumentIdentifier): ReadConfigFileResponse; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "readConfigFile", - function (file: DocumentIdentifier): ReadConfigFileResponse { - owner.ensureInitialized(); - return owner.client.apiRequest("readConfigFile", { file }); - }, - function* (file: DocumentIdentifier): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("readConfigFile", { file }); - }, - ); - } - - get parseJsonConfigFileContent(): { - ( - json: any, - options: - | { configDirectory: string; configFileName?: never; } - | { configFileName: DocumentIdentifier; configDirectory?: never; }, - ): ParsedCommandLine; - gen( - json: any, - options: - | { configDirectory: string; configFileName?: never; } - | { configFileName: DocumentIdentifier; configDirectory?: never; }, - ): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "parseJsonConfigFileContent", - function ( - json: any, - options: - | { configDirectory: string; configFileName?: never; } - | { configFileName: DocumentIdentifier; configDirectory?: never; }, - ): ParsedCommandLine { - owner.ensureInitialized(); - return owner.client.apiRequest("parseJsonConfigFileContent", { json, ...options }); - }, - function* ( - json: any, - options: - | { configDirectory: string; configFileName?: never; } - | { configFileName: DocumentIdentifier; configDirectory?: never; }, - ): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("parseJsonConfigFileContent", { json, ...options }); - }, - ); - } - - /** - * Create and retain a source file independently of a program. - * Dispose the returned lease when the source file no longer needs to remain available remotely. - */ - get createSourceFile(): { - (fileName: string, sourceText: string, options?: CreateSourceFileOptions): RetainedSourceFile; - gen(fileName: string, sourceText: string, options?: CreateSourceFileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "createSourceFile", - function (fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): RetainedSourceFile { - owner.ensureInitialized(); - const data = owner.client.apiRequestBinary("createSourceFile", { fileName, sourceText, options }); - if (!data) { - throw new Error("createSourceFile returned no source file"); - } - return owner.retainSourceFileResponse(data); - }, - function* (fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - const data = sourceFileResponseToUint8Array(yield* apiRequest("createSourceFile", { fileName, sourceText, options })); - if (!data) { - throw new Error("createSourceFile returned no source file"); - } - return owner.retainSourceFileResponse(data); - }, - ); - } - - /** - * Read, create, and retain a source file independently of a program. - * Dispose the returned lease when the source file no longer needs to remain available remotely. - */ - get createSourceFileFromFile(): { - (file: DocumentIdentifier, options?: CreateSourceFileOptions): RetainedSourceFile; - gen(file: DocumentIdentifier, options?: CreateSourceFileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "createSourceFileFromFile", - function (file: DocumentIdentifier, options: CreateSourceFileOptions = {}): RetainedSourceFile { - owner.ensureInitialized(); - const data = owner.client.apiRequestBinary("createSourceFileFromFile", { fileName: resolveFileName(file), options }); - if (!data) { - throw new Error("createSourceFileFromFile returned no source file"); - } - return owner.retainSourceFileResponse(data); - }, - function* (file: DocumentIdentifier, options: CreateSourceFileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - const data = sourceFileResponseToUint8Array(yield* apiRequest("createSourceFileFromFile", { fileName: resolveFileName(file), options })); - if (!data) { - throw new Error("createSourceFileFromFile returned no source file"); - } - return owner.retainSourceFileResponse(data); - }, - ); - } - - /** - * Retain an ordinary remote source file independently of the snapshot or lease that produced it. - */ - get retainSourceFile(): { - (sourceFile: SourceFile): RetainedSourceFile; - gen(sourceFile: SourceFile): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "retainSourceFile", - function (sourceFile: SourceFile): RetainedSourceFile { - owner.ensureInitialized(); - if (!(sourceFile instanceof RemoteSourceFile)) { - throw new TypeError("Only remote source files can be retained"); - } - const cached = owner.sourceFileCache.get(sourceFile); - if (cached && cached !== sourceFile) { - throw new Error("Source file is no longer the canonical cached instance"); - } - const result = owner.client.apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); - return owner.addSourceFileLease(sourceFile, result.lease); - }, - function* (sourceFile: SourceFile): Generator { - yield* owner.ensureInitialized.gen(); - if (!(sourceFile instanceof RemoteSourceFile)) { - throw new TypeError("Only remote source files can be retained"); - } - const cached = owner.sourceFileCache.get(sourceFile); - if (cached && cached !== sourceFile) { - throw new Error("Source file is no longer the canonical cached instance"); - } - const result = yield* apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); - return owner.addSourceFileLease(sourceFile, result.lease); - }, - ); - } - - private retainSourceFileResponse(data: Uint8Array): RetainedSourceFile { - const view = new DataView(data.buffer, data.byteOffset, data.byteLength); - const lease = readSourceFileLease(view); - try { - const decoded = new RemoteSourceFile(data, this.decoder, this.client.getTimingCollector(), this); - return this.addSourceFileLease(decoded, lease); - } - catch (error) { - try { - this.client.apiRequest("releaseSourceFile", { lease }); - } - catch {} - throw error; - } - } - - private addSourceFileLease(sourceFile: RemoteSourceFile, lease: number): RetainedSourceFile { - const cached = this.sourceFileCache.setForLease(sourceFile, lease); - const retained = new RetainedSourceFile(cached as unknown as SourceFile, lease, () => { - this.activeSourceFileLeases.delete(lease); - this.sourceFileCache.releaseLease(lease); - }); - this.activeSourceFileLeases.set(lease, retained); - return retained; - } - - get transpileModule(): { - (input: string, options?: TranspileOptions): TranspileOutput; - gen(input: string, options?: TranspileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "transpileModule", - function (input: string, options: TranspileOptions = {}): TranspileOutput { - owner.ensureInitialized(); - return owner.client.apiRequest("transpileModule", { input, options }); - }, - function* (input: string, options: TranspileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("transpileModule", { input, options }); - }, - ); - } - - get transpileModuleFromFile(): { - (file: DocumentIdentifier, options?: TranspileOptions): TranspileOutput; - gen(file: DocumentIdentifier, options?: TranspileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "transpileModuleFromFile", - function (file: DocumentIdentifier, options: TranspileOptions = {}): TranspileOutput { - owner.ensureInitialized(); - return owner.client.apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); - }, - function* (file: DocumentIdentifier, options: TranspileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); - }, - ); - } - - get transpileDeclaration(): { - (input: string, options?: TranspileOptions): TranspileOutput; - gen(input: string, options?: TranspileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "transpileDeclaration", - function (input: string, options: TranspileOptions = {}): TranspileOutput { - owner.ensureInitialized(); - return owner.client.apiRequest("transpileDeclaration", { input, options }); - }, - function* (input: string, options: TranspileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("transpileDeclaration", { input, options }); - }, - ); - } - - get transpileDeclarationFromFile(): { - (file: DocumentIdentifier, options?: TranspileOptions): TranspileOutput; - gen(file: DocumentIdentifier, options?: TranspileOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "transpileDeclarationFromFile", - function (file: DocumentIdentifier, options: TranspileOptions = {}): TranspileOutput { - owner.ensureInitialized(); - return owner.client.apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); - }, - function* (file: DocumentIdentifier, options: TranspileOptions = {}): Generator { - yield* owner.ensureInitialized.gen(); - return yield* apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); - }, - ); - } - - get createSnapshot(): { - (params: SnapshotOperationParams): SnapshotForOperationResults; - (): Snapshot; - gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; - gen(): Generator; - } { - const owner = this; - function createSnapshot(params: SnapshotOperationParams): SnapshotForOperationResults; - function createSnapshot(): Snapshot; - function createSnapshot(params?: CreateSnapshotParams): Snapshot { - owner.ensureInitialized(); - - const requestParams = toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)); - const data = owner.client.apiRequest("createSnapshot", requestParams); - - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - undefined, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - - return snapshot; - } - function gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; - function gen(): Generator; - function* gen(params?: CreateSnapshotParams): Generator { - yield* owner.ensureInitialized.gen(); - - const requestParams = toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)); - const data = yield* apiRequest("createSnapshot", requestParams); - - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - undefined, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - - return snapshot; - } - return cacheGeneratorMethod(owner, "createSnapshot", createSnapshot, gen); - } - - private get updateSnapshot(): { - (baseSnapshot: Snapshot, params: CreateSnapshotParams): Snapshot; - gen(baseSnapshot: Snapshot, params: CreateSnapshotParams): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "updateSnapshot", - function (baseSnapshot: Snapshot, params: CreateSnapshotParams): Snapshot { - owner.ensureInitialized(); - if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot update an inactive snapshot"); - } - - const data = owner.client.apiRequest("updateSnapshot", { - snapshot: baseSnapshot.id, - changes: toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)), - }); - if (data.snapshot === baseSnapshot.id) { - owner.client.apiRequest("release", { snapshot: data.snapshot }); - return baseSnapshot; - } - owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - }, - function* (baseSnapshot: Snapshot, params: CreateSnapshotParams): Generator { - yield* owner.ensureInitialized.gen(); - if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot update an inactive snapshot"); - } - - const data = yield* apiRequest("updateSnapshot", { - snapshot: baseSnapshot.id, - changes: toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)), - }); - if (data.snapshot === baseSnapshot.id) { - yield* apiRequest("release", { snapshot: data.snapshot }); - return baseSnapshot; - } - owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - }, - ); - } - - private prepareCreateSnapshotParams(params: CreateSnapshotParams | undefined): ProtocolCreateSnapshotParams | undefined { - if (!params) return undefined; - const prepareOptions = (options: CreateProgramOptions | undefined): ProtocolCreateProgramOptions | undefined => { - if (!options) return undefined; - const { moduleResolver, projectReferences, ...rest } = options; - moduleResolver?.ensureNotDisposed(); - return { - ...rest, - moduleResolver: moduleResolver?.id, - projectReferences: projectReferences?.map(reference => ({ - ...reference, - path: toRootedPath(reference.path, this.getCurrentDirectory()), - })), - }; - }; - return { - ...params, - createPrograms: params.createPrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), - reconfigurePrograms: params.reconfigurePrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), - }; - } - - private prepareLanguageServerSnapshotChanges(changes: LanguageServerSnapshotChanges | undefined): ProtocolLanguageServerSnapshotChanges | undefined { - if (!changes) return undefined; - const prepared = this.prepareCreateSnapshotParams(changes); - return prepared; - } - - private createSnapshotUpdater(getSnapshot: () => Snapshot): SnapshotUpdater { - const update = ((params: CreateSnapshotParams) => this.updateSnapshot(getSnapshot(), params)) as SnapshotUpdater; - const owner = this; - update.gen = function* (params: CreateSnapshotParams) { - return yield* owner.updateSnapshot.gen(getSnapshot(), params); - }; - return update; - } - - /** - * Returns the language server's current canonical snapshot after atomically - * adopting any supplied API-driven changes. Only available on LSP-connected APIs. - */ - get getCurrentLanguageServerSnapshot(): { - ( - ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] - : [changes: never, baseSnapshot?: never] - ): SnapshotForOperationResults; - (...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot; - gen( - ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] - : [changes: never, baseSnapshot?: never] - ): Generator, ProtocolResponse["result"]>; - gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator; - } { - const owner = this; - function getCurrentLanguageServerSnapshot( - ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] - : [changes: never, baseSnapshot?: never] - ): SnapshotForOperationResults; - function getCurrentLanguageServerSnapshot(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot; - function getCurrentLanguageServerSnapshot(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot { - owner.ensureInitialized(); - - const changes = args[0] as LanguageServerSnapshotChanges | undefined; - const baseSnapshot = args[1] as Snapshot | undefined; - if (baseSnapshot && (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { - throw new Error("Cannot use an inactive snapshot as a response base"); - } - const data = owner.client.apiRequest("getCurrentLanguageServerSnapshot", { - baseSnapshot: baseSnapshot?.id, - changes: owner.prepareLanguageServerSnapshotChanges(changes), - }); - if (baseSnapshot) { - owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - } - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - } - function gen( - ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] - : [changes: never, baseSnapshot?: never] - ): Generator, ProtocolResponse["result"]>; - function gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator; - function* gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator { - yield* owner.ensureInitialized.gen(); - - const changes = args[0] as LanguageServerSnapshotChanges | undefined; - const baseSnapshot = args[1] as Snapshot | undefined; - if (baseSnapshot && (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { - throw new Error("Cannot use an inactive snapshot as a response base"); - } - const data = yield* apiRequest("getCurrentLanguageServerSnapshot", { - baseSnapshot: baseSnapshot?.id, - changes: owner.prepareLanguageServerSnapshotChanges(changes), - }); - if (baseSnapshot) { - owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); - } - const snapshot = new Snapshot( - data, - owner.toPath!, - owner, - () => { - owner.activeSnapshots.delete(snapshot.id); - owner.sourceFileCache.releaseSnapshot(snapshot.id); - }, - owner.createSnapshotUpdater(() => snapshot), - baseSnapshot, - ); - owner.activeSnapshots.set(snapshot.id, snapshot); - return snapshot; - } - return cacheGeneratorMethod(owner, "getCurrentLanguageServerSnapshot", getCurrentLanguageServerSnapshot, gen); - } - - [globalThis.Symbol.dispose](): void { - this.close(); - } - - get close(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "close", - function (): void { - try { - for (const retained of [...owner.activeSourceFileLeases.values()]) { - retained.dispose(); - } - } - finally { - try { - for (const orchestrator of [...owner.activeBuildOrchestrators]) { - orchestrator.dispose(); - } - for (const snapshot of [...owner.activeSnapshots.values()]) { - snapshot.dispose(); - } - owner.sourceFileCache.clear(); - } - finally { - owner.client.close(); // always close the underlying connection - } - } - }, - function* (): Generator { - try { - for (const retained of [...owner.activeSourceFileLeases.values()]) { - yield* retained.dispose.gen(); - } - } - finally { - try { - for (const orchestrator of [...owner.activeBuildOrchestrators]) { - yield* orchestrator.dispose.gen(); - } - for (const snapshot of [...owner.activeSnapshots.values()]) { - yield* snapshot.dispose.gen(); - } - owner.sourceFileCache.clear(); - } - finally { - owner.client.close(); // always close the underlying connection - } - } - }, - ); - } - - get createModuleResolver(): { - (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): ModuleResolver; - gen(compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "createModuleResolver", - function (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): ModuleResolver { - owner.ensureInitialized(); - const callback = options?.resolveModuleName - ? registerModuleResolutionCallback(owner.client, options.resolveModuleName, id => owner.activeSnapshots.get(id)) - : undefined; - try { - const id = owner.client.apiRequest("createModuleResolver", { - compilerOptions: prepareCompilerOptions(compilerOptions, owner.getCurrentDirectory()), - moduleResolutions: options?.moduleResolutions, - resolveModuleNameCallback: callback?.name, - }); - return new ModuleResolver(id, owner.client, callback?.dispose); - } - catch (error) { - callback?.dispose(); - throw error; - } - }, - function* (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Generator { - yield* owner.ensureInitialized.gen(); - const callback = options?.resolveModuleName - ? registerModuleResolutionCallback(owner.client, options.resolveModuleName, id => owner.activeSnapshots.get(id)) - : undefined; - try { - const id = yield* apiRequest("createModuleResolver", { - compilerOptions: prepareCompilerOptions(compilerOptions, owner.getCurrentDirectory()), - moduleResolutions: options?.moduleResolutions, - resolveModuleNameCallback: callback?.name, - }); - return new ModuleResolver(id, owner.client, callback?.dispose); - } - catch (error) { - callback?.dispose(); - throw error; - } - }, - ); - } - - clearSourceFileCache(): void { - this.sourceFileCache.clear(); - } - - get runWithTemporaryFileUpdate(): { - (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void): void; - gen(baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Generator): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "runWithTemporaryFileUpdate", - function (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void): void { - owner.ensureInitialized(); - - if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot run a temporary file update on an inactive snapshot"); - } - const snapshot = baseSnapshot.update({ - fileSystem: { - kind: "layer", - files: { [resolveFileName(file)]: newText }, - }, - ensurePrograms: true, - }); - - try { - cb(snapshot); - } - finally { - snapshot.dispose(); - } - }, - function* (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Generator): Generator { - yield* owner.ensureInitialized.gen(); - - if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { - throw new Error("Cannot run a temporary file update on an inactive snapshot"); - } - const snapshot = yield* baseSnapshot.update.gen({ - fileSystem: { - kind: "layer", - files: { [resolveFileName(file)]: newText }, - }, - ensurePrograms: true, - }); - - try { - yield* (cb(snapshot) ?? []); - } - finally { - yield* snapshot.dispose.gen(); - } - }, - ); - } - - /** - * Returns a snapshot of collected timing information for requests made - * through this API instance: client-measured round-trip latency and bytes - * transferred, folded together with the server's own per-request processing - * time and an estimated transport overhead (round-trip minus server time). - * - * Fetching the snapshot issues a lightweight request to the server to - * retrieve its timing collection. Collection must be enabled via the - * `collectTiming` option; when it is not, the returned snapshot has - * `enabled: false` and zeroed totals. - */ - get getTimingInfo(): { - (): TimingInfo; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTimingInfo", - function (): TimingInfo { - return owner.client.getTimingInfo(); - }, - function* (): Generator { - return owner.client.getTimingInfo(); - }, - ); - } - - /** Clears all accumulated timing totals and recent-request history, on both the client and the server. */ - get resetTimingInfo(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "resetTimingInfo", - function (): void { - return owner.client.resetTimingInfo(); - }, - function* (): Generator { - return owner.client.resetTimingInfo(); - }, - ); - } - - /** Creates a program from current filesystem state. */ - get createProgram(): { - (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Program; - gen(rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "createProgram", - function (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Program { - owner.ensureInitialized(); - - const snapshot = owner.createSnapshot({ - createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], - }); - const program = snapshot.operation.createdPrograms![0]; - if (!program) { - snapshot.dispose(); - throw new Error("createProgram did not return a project"); - } - program.setOwnedSnapshot(snapshot); - return program; - }, - function* (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Generator { - yield* owner.ensureInitialized.gen(); - - const snapshot = yield* owner.createSnapshot.gen({ - createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], - }); - const program = snapshot.operation.createdPrograms![0]; - if (!program) { - yield* snapshot.dispose.gen(); - throw new Error("createProgram did not return a project"); - } - program.setOwnedSnapshot(snapshot); - return program; - }, - ); - } -} - -type EnsureInitialized = (() => void) & { gen(): Generator; }; - -function sourceFileDescriptor(sourceFile: RemoteSourceFile): SourceFileDescriptor { - return { - fileName: sourceFile.fileName, - path: sourceFile.path, - contentHash: sourceFile.contentHash, - parseOptionsKey: sourceFile.parseOptionsKey, - scriptKind: sourceFile.scriptKind, - nodeId: sourceFile.nodeId, - }; -} - -function getRemoteSourceFile(node: Node): RemoteSourceFile | undefined { - if (!(node instanceof RemoteNode)) return undefined; - const file = node.getSourceFile(); - return file instanceof RemoteSourceFile && file.api ? file : undefined; -} - -function getNodeAPI(node: Node): API | undefined { - const api = getRemoteSourceFile(node)?.api; - if (!api) return undefined; - if (!(api instanceof API)) throw new Error("Source file does not belong to the sync API"); - return api; -} - -/** Looks up a remote declaration's binder symbol through its API. Throws for non-remote declarations. */ -export function getSymbol(declaration: Declaration): Symbol { - const api = getNodeAPI(declaration); - if (!api) throw new Error("Source file not found for declaration"); - return api.getSymbol(declaration); -} - -export declare namespace getSymbol { - function gen(declaration: Declaration): Generator; -} -getSymbol.gen = function* (declaration: Declaration): Generator { - const api = getNodeAPI(declaration); - if (!api) throw new Error("Source file not found for declaration"); - return yield* api.getSymbol.gen(declaration); -}; - -/** An independently retained source file and its disposable remote-lifetime lease. */ -export class RetainedSourceFile { - readonly sourceFile: SourceFile; - private readonly lease: number; - private readonly onDispose: () => void; - private disposed = false; - private disposePromise: void | undefined; - - constructor(sourceFile: SourceFile, lease: number, onDispose: () => void) { - this.sourceFile = sourceFile; - this.lease = lease; - this.onDispose = onDispose; - } - - [globalThis.Symbol.dispose](): void { - this.dispose(); - } - - get dispose(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "dispose", - function (): void { - return owner.disposePromise ??= owner.disposeWorker(); - }, - function* (): Generator { - return owner.disposePromise ??= yield* owner.disposeWorker.gen(); - }, - ); - } - - private get disposeWorker(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "disposeWorker", - function (): void { - if (owner.disposed) return; - const api = getNodeAPI(owner.sourceFile); - if (!api) throw new Error("Retained source file has no owning API"); - owner.disposed = true; - try { - api.client.apiRequest("releaseSourceFile", { lease: owner.lease }); - } - finally { - owner.onDispose(); - } - }, - function* (): Generator { - if (owner.disposed) return; - const api = getNodeAPI(owner.sourceFile); - if (!api) throw new Error("Retained source file has no owning API"); - owner.disposed = true; - try { - yield* apiRequest("releaseSourceFile", { lease: owner.lease }); - } - finally { - owner.onDispose(); - } - }, - ); - } -} - -export class InternalAPI { - private client: Client; - private ensureInitialized: EnsureInitialized; - - /** @internal */ - constructor(client: Client, ensureInitialized: EnsureInitialized) { - this.client = client; - this.ensureInitialized = ensureInitialized; - } - - get startCPUProfile(): { - (dir: string): void; - gen(dir: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "startCPUProfile", - function (dir: string): void { - owner.ensureInitialized(); - owner.client.apiRequest("startCPUProfile", { dir }); - }, - function* (dir: string): Generator { - yield* owner.ensureInitialized.gen(); - yield* apiRequest("startCPUProfile", { dir }); - }, - ); - } - - get stopCPUProfile(): { - (): RootedFilePath; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "stopCPUProfile", - function (): RootedFilePath { - owner.ensureInitialized(); - const result = owner.client.apiRequest("stopCPUProfile", null); - return result.file; - }, - function* (): Generator { - yield* owner.ensureInitialized.gen(); - const result = yield* apiRequest("stopCPUProfile", null); - return result.file; - }, - ); - } - - get saveHeapProfile(): { - (dir: string): RootedFilePath; - gen(dir: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "saveHeapProfile", - function (dir: string): RootedFilePath { - owner.ensureInitialized(); - const result = owner.client.apiRequest("saveHeapProfile", { dir }); - return result.file; - }, - function* (dir: string): Generator { - yield* owner.ensureInitialized.gen(); - const result = yield* apiRequest("saveHeapProfile", { dir }); - return result.file; - }, - ); - } -} - -type SnapshotUpdater = ((params: CreateSnapshotParams) => Snapshot) & { gen(params: CreateSnapshotParams): Generator; }; - -export interface SnapshotOperation { - readonly createdPrograms?: readonly Program[] | undefined; - readonly openedFiles?: readonly SnapshotOpenedFileOperation[] | undefined; -} - -export interface SnapshotOpenedFileOperation { - readonly project: Project; -} - -/** Replaces every element of a tuple while preserving its length and index structure. */ -type MapTupleTo = { - readonly [Index in keyof Tuple]: Result; -}; - -/** - * Keeps `Tuple` as an inference target while contextually typing each element from - * `Elements`. The mapped intersection supplies nested completions and excess-property - * checks without widening an inferred tuple to an array. - */ -type ContextualizeTuple< - Tuple extends readonly unknown[] | undefined, - Elements extends readonly unknown[] | undefined, -> = - & Tuple - & { - readonly [Index in keyof Tuple]: NonNullable[number]; - }; - -/** Substitutes the operation arrays with contextually typed, tuple-preserving versions. */ -type SnapshotOperationParams< - Params extends { createPrograms?: readonly unknown[] | undefined; openFiles?: readonly unknown[] | undefined; }, - CreatePrograms extends Params["createPrograms"], - OpenFiles extends Params["openFiles"], -> = Omit & { - createPrograms?: ContextualizeTuple | undefined; - openFiles?: ContextualizeTuple | undefined; -}; - -/** - * Refines a snapshot's operation results to required tuples when the corresponding - * operation arrays were supplied, preserving their lengths for indexed access. - */ -type SnapshotForOperationResults< - CreatePrograms extends readonly unknown[] | undefined, - OpenFiles extends readonly unknown[] | undefined, -> = Snapshot & { - readonly operation: - & SnapshotOperation - & (CreatePrograms extends readonly unknown[] ? { readonly createdPrograms: MapTupleTo>; } : unknown) - & (OpenFiles extends readonly unknown[] ? { readonly openedFiles: MapTupleTo; } : unknown); -}; - -/** Derives the refined snapshot result type from a complete operation parameter type. */ -export type SnapshotForOperation = SnapshotForOperationResults< - Params extends { createPrograms: infer CreatePrograms extends readonly unknown[]; } ? CreatePrograms : undefined, - Params extends { openFiles: infer OpenFiles extends readonly unknown[]; } ? OpenFiles : undefined ->; - -export class Snapshot { - readonly id: number; - readonly operation: SnapshotOperation; - private projectMap: Map; - private toPath: (fileName: string, basePath?: string) => PathKey; - private readonly api: API; - private disposed: boolean = false; - private disposePromise: void | undefined; - private onDispose: () => void; - private snapshotRegistry: SnapshotObjectRegistry; - private projectDataMap: Map; - private updateSnapshot: SnapshotUpdater; - readonly internal: SnapshotInternalAPI; - - private get client(): Client { - return this.api.client; - } - - constructor(data: CreateSnapshotResponse, toPath: (fileName: string, basePath?: string) => PathKey, api: API, onDispose: () => void, updateSnapshot: SnapshotUpdater, baseSnapshot?: Snapshot) { - this.id = data.snapshot; - this.api = api; - this.toPath = toPath; - this.onDispose = onDispose; - this.updateSnapshot = updateSnapshot; - this.projectMap = new Map(); - const projectDataMap = new Map(baseSnapshot?.projectDataMap); - for (const projectId of data.changes?.removedProjects ?? []) { - projectDataMap.delete(projectId); - } - for (const projectData of data.projects) { - projectDataMap.set(projectData.id, projectData); - } - this.projectDataMap = new Map([...projectDataMap].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)); - this.snapshotRegistry = new SnapshotObjectRegistry(this.id); - - for (const projData of this.projectDataMap.values()) { - const project = new Project(projData, this.id, toPath, api, this.snapshotRegistry); - this.projectMap.set(projData.id, project); - } - - this.operation = { - createdPrograms: data.operation.createdPrograms?.map(projectId => this.requireProject(projectId).program), - openedFiles: data.operation.openedFiles?.map(result => ({ project: this.requireProject(result.project) })), - }; - - this.internal = new SnapshotInternalAPI(this.id, api.client); - } - - getProjects(): readonly Project[] { - this.ensureNotDisposed(); - return [...this.projectMap.values()]; - } - - getConfiguredProject(configFileName: string): Project | undefined { - this.ensureNotDisposed(); - const id = this.toPath(configFileName) as ConfiguredProjectId; - return this.projectMap.get(id) as Project | undefined; - } - - getProject(projectId: Id): Project | undefined { - this.ensureNotDisposed(); - return this.projectMap.get(projectId) as Project | undefined; - } - - getProgram(projectId: Id): Program | undefined { - return this.getProject(projectId)?.program; - } - - get update(): { - (params: SnapshotOperationParams): SnapshotForOperationResults; - (params: CreateSnapshotParams): Snapshot; - gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; - gen(params: CreateSnapshotParams): Generator; - } { - const owner = this; - function update(params: SnapshotOperationParams): SnapshotForOperationResults; - function update(params: CreateSnapshotParams): Snapshot; - function update(params: CreateSnapshotParams): Snapshot { - owner.ensureNotDisposed(); - return owner.updateSnapshot(params); - } - function gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; - function gen(params: CreateSnapshotParams): Generator; - function* gen(params: CreateSnapshotParams): Generator { - owner.ensureNotDisposed(); - return yield* owner.updateSnapshot.gen(params); - } - return cacheGeneratorMethod(owner, "update", update, gen); - } - - /** - * Gets the default project for a given file from the configured projects and - * inferred project already loaded in the snapshot. Synthetic projects are not - * considered. Files that have been opened with `openFiles` are guaranteed to - * have a result. - */ - get getDefaultProjectForFile(): { - (file: DocumentIdentifier): Project | undefined; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDefaultProjectForFile", - function (file: DocumentIdentifier): Project | undefined { - owner.ensureNotDisposed(); - const data = owner.client.apiRequest("getDefaultProjectForFile", { - snapshot: owner.id, - file, - }); - if (!data) return undefined; - return owner.projectMap.get(data.id); - }, - function* (file: DocumentIdentifier): Generator { - owner.ensureNotDisposed(); - const data = yield* apiRequest("getDefaultProjectForFile", { - snapshot: owner.id, - file, - }); - if (!data) return undefined; - return owner.projectMap.get(data.id); - }, - ); - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - get dispose(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "dispose", - function (): void { - return owner.disposePromise ??= owner.disposeWorker(); - }, - function* (): Generator { - return owner.disposePromise ??= yield* owner.disposeWorker.gen(); - }, - ); - } - - private get disposeWorker(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "disposeWorker", - function (): void { - if (owner.disposed) return; - owner.disposed = true; - for (const project of owner.projectMap.values()) { - project.dispose(); - } - owner.projectMap.clear(); - owner.snapshotRegistry.clear(); - try { - owner.client.apiRequest("release", { snapshot: owner.id }); - } - finally { - owner.onDispose(); - } - }, - function* (): Generator { - if (owner.disposed) return; - owner.disposed = true; - for (const project of owner.projectMap.values()) { - project.dispose(); - } - owner.projectMap.clear(); - owner.snapshotRegistry.clear(); - try { - yield* apiRequest("release", { snapshot: owner.id }); - } - finally { - owner.onDispose(); - } - }, - ); - } - - isDisposed(): boolean { - return this.disposed; - } - - private ensureNotDisposed(): void { - if (this.disposed) { - throw new Error("Snapshot is disposed"); - } - } - - private requireProject(projectId: Id): Project { - const project = this.projectMap.get(projectId); - if (!project) { - throw new Error(`Snapshot operation returned unknown project '${projectId}'`); - } - return project as Project; - } -} - -export class ModuleResolver { - readonly id: number; - private readonly client: Client; - private readonly disposeCallback: (() => void) | undefined; - private disposed = false; - - constructor(id: number, client: Client, disposeCallback: (() => void) | undefined) { - this.id = id; - this.client = client; - this.disposeCallback = disposeCallback; - } - - get resolveModuleName(): { - (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): ResolveModuleNameResult; - gen(moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "resolveModuleName", - function (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): ResolveModuleNameResult { - owner.ensureNotDisposed(); - if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { - throw new Error("Snapshot is disposed"); - } - return owner.client.apiRequest("resolveModuleName", { - snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, - inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, - resolver: owner.id, - moduleName, - containingDirectory, - resolutionMode, - }); - }, - function* (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): Generator { - owner.ensureNotDisposed(); - if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { - throw new Error("Snapshot is disposed"); - } - return yield* apiRequest("resolveModuleName", { - snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, - inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, - resolver: owner.id, - moduleName, - containingDirectory, - resolutionMode, - }); - }, - ); - } - - [globalThis.Symbol.dispose](): void { - return this.dispose(); - } - - get dispose(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "dispose", - function (): void { - if (owner.disposed) return; - owner.client.apiRequest("releaseModuleResolver", { resolver: owner.id }); - owner.disposed = true; - owner.disposeCallback?.(); - }, - function* (): Generator { - if (owner.disposed) return; - yield* apiRequest("releaseModuleResolver", { resolver: owner.id }); - owner.disposed = true; - owner.disposeCallback?.(); - }, - ); - } - - /** @internal */ - ensureNotDisposed(): void { - if (this.disposed) throw new Error("ModuleResolver is disposed"); - } -} - -class SnapshotObjectRegistry { - private readonly symbols: Map = new Map(); - private readonly projectRegistries: Map = new Map(); - private readonly snapshotId: number; - - constructor(snapshotId: number) { - this.snapshotId = snapshotId; - } - - addProjectRegistry(registry: ProjectObjectRegistry): void { - this.projectRegistries.set(registry.project.id, registry); - } - - getOrCreateSymbol(data: SymbolResponse): Symbol { - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.Snapshot) throw new Error(`Symbol ${reference.id} is not snapshot-owned`); - let symbol = this.symbols.get(reference.id); - if (!symbol) { - if (reference.snapshot !== this.snapshotId) { - throw new Error(`Symbol ${reference.id} belongs to snapshot ${reference.snapshot}, not ${this.snapshotId}`); - } - const registry = this.projectRegistries.get(reference.project); - if (!registry) throw new Error(`Symbol ${reference.id} references unknown project '${reference.project}'`); - symbol = new Symbol(data, { kind: SymbolOwnerKind.Snapshot, registry }); - this.symbols.set(reference.id, symbol); - } - return symbol; - } - - getSymbol(id: number): Symbol | undefined { - return this.symbols.get(id); - } - - clear(): void { - this.symbols.clear(); - } -} - -class ProjectObjectRegistry { - private snapshotId: number; - readonly project: Project; - private snapshotRegistry: SnapshotObjectRegistry; - private types: Map = new Map(); - private signatures: Map = new Map(); - private disposed = false; - - private get client(): Client { - return this.project.api.client; - } - - private get sourceFileCache(): SourceFileCache { - return this.project.api.sourceFileCache; - } - - constructor(snapshotId: number, project: Project, snapshotRegistry: SnapshotObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.snapshotRegistry = snapshotRegistry; - snapshotRegistry.addProjectRegistry(this); - } - - getOrCreateSymbol(data: ProtocolSymbolResponse): Symbol { - this.ensureNotDisposed(); - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind === SymbolOwnerKind.Snapshot) { - return this.snapshotRegistry.getOrCreateSymbol(data); - } - const record = this.sourceFileCache.getOrCreateRecord(reference.file, this.snapshotId, this.project.id); - return this.sourceFileCache.getOrCreateSymbol(record, reference.file, reference.id, () => - new Symbol(data, { - kind: SymbolOwnerKind.File, - owner: { record, api: this.project.api }, - })); - } - - /** Find an already-interned symbol and retain its file record for this registry. */ - getCachedSymbol(reference: CompactSymbolReference): Symbol | undefined { - this.ensureNotDisposed(); - if (reference.file === undefined) { - return this.snapshotRegistry.getSymbol(reference.id); - } - const record = this.sourceFileCache.findRecord(reference.file); - const symbol = record?.symbolsById.get(reference.id); - if (record && symbol) { - this.sourceFileCache.retainRecord(record, this.snapshotId, this.project.id); - } - return symbol; - } - - getOrCreateType(data: TypeResponse): TypeObject { - let type = this.types.get(data.id); - if (!type) { - type = new TypeObject(data, this); - this.types.set(data.id, type); - } - return type; - } - - getType(id: number): TypeObject | undefined { - return this.types.get(id); - } - - createNodeHandle(handle: string): NodeHandle { - return new NodeHandle(handle, this.project); - } - - getOrCreateSignature(data: SignatureResponse): Signature { - let sig = this.signatures.get(data.id); - if (!sig) { - sig = new Signature(data, this.project, this); - this.signatures.set(data.id, sig); - } - return sig; - } - - getSignature(id: number): Signature | undefined { - return this.signatures.get(id); - } - - clear(): void { - this.disposed = true; - this.types.clear(); - this.signatures.clear(); - } - - private ensureNotDisposed(): void { - if (this.disposed) throw new Error("Project object registry is disposed"); - } - - get fetchOptionalType(): { - (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T | undefined; - gen(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchOptionalType", - function (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T | undefined { - if (handle !== false) { - if (!handle) return undefined; - const cached = owner.getType(handle); - if (cached) return cached as unknown as T; - } - - const data = owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) return undefined; - return owner.getOrCreateType(data) as unknown as T; - }, - function* (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator { - if (handle !== false) { - if (!handle) return undefined; - const cached = owner.getType(handle); - if (cached) return cached as unknown as T; - } - - const data = yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) return undefined; - return owner.getOrCreateType(data) as unknown as T; - }, - ); - } - - get fetchType(): { - (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T; - gen(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchType", - function (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T { - const result = owner.fetchOptionalType(source, method, handle); - if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); - return result; - }, - function* (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator { - const result = yield* owner.fetchOptionalType.gen(source, method, handle); - if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); - return result; - }, - ); - } - - get fetchSymbol(): { - (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Symbol; - gen(source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbol", - function (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Symbol { - if (!reference) return undefined as unknown as Symbol; - const cached = owner.getCachedSymbol(reference); - if (cached) return cached; - const data = source instanceof Symbol - ? owner.client.apiRequest(method, { symbol: source.reference }) - : owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); - return owner.getOrCreateSymbol(data); - }, - function* (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Generator { - if (!reference) return undefined as unknown as Symbol; - const cached = owner.getCachedSymbol(reference); - if (cached) return cached; - const data = source instanceof Symbol - ? yield* apiRequest(method, { symbol: source.reference }) - : yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); - return owner.getOrCreateSymbol(data); - }, - ); - } - - get fetchSignature(): { - (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Signature; - gen(source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSignature", - function (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Signature { - if (!handle) return undefined as unknown as Signature; - const cached = owner.getSignature(handle); - if (cached) return cached; - - const data = owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); - return owner.getOrCreateSignature(data); - }, - function* (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Generator { - if (!handle) return undefined as unknown as Signature; - const cached = owner.getSignature(handle); - if (cached) return cached; - - const data = yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); - return owner.getOrCreateSignature(data); - }, - ); - } - - get fetchTypes(): { - (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): readonly Type[]; - gen(source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchTypes", - function (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): readonly Type[] { - if (handles) { - const result = new Array(handles.length); - let allCached = true; - for (let i = 0; i < handles.length; i++) { - const cached = owner.getType(handles[i]); - if (!cached) { - allCached = false; - break; - } - result[i] = cached; - } - if (allCached) return result; - } - const typesData = owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (typesData == null) return []; - else return typesData.map(data => owner.getOrCreateType(data)); - }, - function* (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Generator { - if (handles) { - const result = new Array(handles.length); - let allCached = true; - for (let i = 0; i < handles.length; i++) { - const cached = owner.getType(handles[i]); - if (!cached) { - allCached = false; - break; - } - result[i] = cached; - } - if (allCached) return result; - } - const typesData = yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - if (typesData == null) return []; - else return typesData.map(data => owner.getOrCreateType(data)); - }, - ); - } - - get fetchSymbols(): { - (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): readonly Symbol[]; - gen(source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbols", - function (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): readonly Symbol[] { - if (references) { - const result = new Array(references.length); - for (let i = 0; i < references.length; i++) { - const cached = owner.getCachedSymbol(references[i]); - if (!cached) { - return owner.fetchSymbolsFromServer(source, method); - } - result[i] = cached; - } - return result; - } - return owner.fetchSymbolsFromServer(source, method); - }, - function* (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Generator { - if (references) { - const result = new Array(references.length); - for (let i = 0; i < references.length; i++) { - const cached = owner.getCachedSymbol(references[i]); - if (!cached) { - return yield* owner.fetchSymbolsFromServer.gen(source, method); - } - result[i] = cached; - } - return result; - } - return yield* owner.fetchSymbolsFromServer.gen(source, method); - }, - ); - } - - private get fetchSymbolsFromServer(): { - (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): readonly Symbol[]; - gen(source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbolsFromServer", - function (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): readonly Symbol[] { - const data = source instanceof Symbol - ? owner.client.apiRequest(method, { symbol: source.reference }) - : owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - return data?.map(symbol => owner.getOrCreateSymbol(symbol)) ?? []; - }, - function* (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Generator { - const data = source instanceof Symbol - ? yield* apiRequest(method, { symbol: source.reference }) - : yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - return data?.map(symbol => owner.getOrCreateSymbol(symbol)) ?? []; - }, - ); - } - - // getBaseTypes is a checker-level endpoint keyed by `type` (not `objectId`), - // so it cannot go through fetchTypes. This helper reuses that server method. - get fetchBaseTypes(): { - (source: Type): readonly Type[]; - gen(source: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchBaseTypes", - function (source: Type): readonly Type[] { - const typesData = owner.client.apiRequest("getBaseTypes", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - if (typesData == null) return []; - return typesData.map(data => owner.getOrCreateType(data)); - }, - function* (source: Type): Generator { - const typesData = yield* apiRequest("getBaseTypes", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - if (typesData == null) return []; - return typesData.map(data => owner.getOrCreateType(data)); - }, - ); - } - - get fetchPropertiesOfType(): { - (source: Type): readonly Symbol[]; - gen(source: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchPropertiesOfType", - function (source: Type): readonly Symbol[] { - const data = owner.client.apiRequest("getPropertiesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; - }, - function* (source: Type): Generator { - const data = yield* apiRequest("getPropertiesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; - }, - ); - } - - get fetchApparentPropertiesOfType(): { - (source: Type): readonly Symbol[]; - gen(source: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchApparentPropertiesOfType", - function (source: Type): readonly Symbol[] { - const data = owner.client.apiRequest("getApparentPropertiesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; - }, - function* (source: Type): Generator { - const data = yield* apiRequest("getApparentPropertiesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - objectId: source.id, - }); - return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; - }, - ); - } - - get fetchPropertyOfType(): { - (source: Type, name: string): Symbol | undefined; - gen(source: Type, name: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchPropertyOfType", - function (source: Type, name: string): Symbol | undefined { - const data = owner.client.apiRequest("getPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - name, - }); - return data ? owner.getOrCreateSymbol(data) : undefined; - }, - function* (source: Type, name: string): Generator { - const data = yield* apiRequest("getPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - name, - }); - return data ? owner.getOrCreateSymbol(data) : undefined; - }, - ); - } - - get fetchSignaturesOfType(): { - (source: Type, kind: SignatureKind): readonly Signature[]; - gen(source: Type, kind: SignatureKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSignaturesOfType", - function (source: Type, kind: SignatureKind): readonly Signature[] { - const data = owner.client.apiRequest("getSignaturesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - kind, - }); - return data.map(signature => owner.getOrCreateSignature(signature)); - }, - function* (source: Type, kind: SignatureKind): Generator { - const data = yield* apiRequest("getSignaturesOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - kind, - }); - return data.map(signature => owner.getOrCreateSignature(signature)); - }, - ); - } - - get fetchIndexInfosOfType(): { - (source: Type): readonly IndexInfo[]; - gen(source: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchIndexInfosOfType", - function (source: Type): readonly IndexInfo[] { - const data = owner.client.apiRequest("getIndexInfosOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - if (!data) return []; - return data.map(info => ({ - keyType: owner.getOrCreateType(info.keyType), - valueType: owner.getOrCreateType(info.valueType), - isReadonly: info.isReadonly ?? false, - declaration: info.declaration ? new NodeHandle(info.declaration, owner.project) : undefined, - })); - }, - function* (source: Type): Generator { - const data = yield* apiRequest("getIndexInfosOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: source.id, - }); - if (!data) return []; - return data.map(info => ({ - keyType: owner.getOrCreateType(info.keyType), - valueType: owner.getOrCreateType(info.valueType), - isReadonly: info.isReadonly ?? false, - declaration: info.declaration ? new NodeHandle(info.declaration, owner.project) : undefined, - })); - }, - ); - } - - get fetchTypeParameterAtPosition(): { - (source: Signature, pos: number): Type; - gen(source: Signature, pos: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchTypeParameterAtPosition", - function (source: Signature, pos: number): Type { - const data = owner.client.apiRequest("getTypeParameterAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: source.id, - index: pos, - }); - return owner.getOrCreateType(data); - }, - function* (source: Signature, pos: number): Generator { - const data = yield* apiRequest("getTypeParameterAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: source.id, - index: pos, - }); - return owner.getOrCreateType(data); - }, - ); - } -} - -export class Project { - /** @internal */ - readonly api: API; - readonly id: Id; - readonly configFileName: RootedFilePath | undefined; - readonly currentDirectory: RootedDirectoryPath; - readonly dirty: boolean; - readonly parsedCommandLine: ParsedCommandLine; - /** @deprecated Use `parsedCommandLine.options`. */ - readonly compilerOptions: CompilerOptions; - /** @deprecated Use `parsedCommandLine.fileNames`. */ - readonly rootFiles: readonly RootedFilePath[]; - - readonly program: Program; - readonly checker: Checker; - readonly languageService: LanguageService; - private snapshotId: number; - - constructor(data: ProjectResponse, snapshotId: number, toPath: (fileName: string, basePath?: string) => PathKey, api: API, snapshotRegistry: SnapshotObjectRegistry) { - this.id = data.id as Id; - this.api = api; - this.configFileName = data.configFileName; - this.currentDirectory = data.currentDirectory; - this.dirty = data.dirty; - if (!data.parsedCommandLine?.options) { - throw new Error(`Project '${data.configFileName}' has no parsed command line`); - } - this.parsedCommandLine = data.parsedCommandLine; - this.compilerOptions = this.parsedCommandLine.options; - this.rootFiles = this.parsedCommandLine.fileNames; - this.snapshotId = snapshotId; - this.program = new Program(snapshotId, this, toPath); - const objectRegistry = new ProjectObjectRegistry(snapshotId, this, snapshotRegistry); - this.checker = new Checker(snapshotId, this, objectRegistry); - this.languageService = new LanguageService(snapshotId, this, objectRegistry); - } - - /** @deprecated Use `languageService.getImportAdderEdits`. */ - get getImportAdderEdits(): { - (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[]; - gen(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getImportAdderEdits", - function (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[] { - return owner.languageService.getImportAdderEdits(file, actions); - }, - function* (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator { - return yield* owner.languageService.getImportAdderEdits.gen(file, actions); - }, - ); - } - - /** @deprecated Use `languageService.getImportEditsForSymbols`. */ - get getImportEditsForSymbols(): { - (file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): readonly TextEdit[]; - gen(file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getImportEditsForSymbols", - function (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): readonly TextEdit[] { - return owner.languageService.getImportEditsForSymbols(file, symbols, options); - }, - function* (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Generator { - return yield* owner.languageService.getImportEditsForSymbols.gen(file, symbols, options); - }, - ); - } - - dispose(): void { - this.checker.dispose(); - } -} - -export class LanguageService { - private snapshotId: number; - private project: Project; - private objectRegistry: ProjectObjectRegistry; - - private get client(): Client { - return this.project.api.client; - } - - constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.objectRegistry = objectRegistry; - } - - get getImportAdderEdits(): { - (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[]; - gen(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getImportAdderEdits", - function (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[] { - const requestActions: ImportAdderAction[] = actions.map(action => { - switch (action.kind) { - case "importSymbol": - const importSymbolAction: ImportAdderAction = { - kind: "importSymbol", - symbol: action.symbol.reference, - }; - if (action.isValidTypeOnlyUseSite !== undefined) { - importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; - } - return importSymbolAction; - default: - return assertNever(action.kind); - } - }); - - const data = owner.client.apiRequest("getImportAdderEdits", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - actions: requestActions, - }); - return data ?? []; - }, - function* (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator { - const requestActions: ImportAdderAction[] = actions.map(action => { - switch (action.kind) { - case "importSymbol": - const importSymbolAction: ImportAdderAction = { - kind: "importSymbol", - symbol: action.symbol.reference, - }; - if (action.isValidTypeOnlyUseSite !== undefined) { - importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; - } - return importSymbolAction; - default: - return assertNever(action.kind); - } - }); - - const data = yield* apiRequest("getImportAdderEdits", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - actions: requestActions, - }); - return data ?? []; - }, - ); - } - - get getImportEditsForSymbols(): { - (file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): readonly TextEdit[]; - gen(file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getImportEditsForSymbols", - function (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): readonly TextEdit[] { - return owner.getImportAdderEdits( - file, - symbols.map((symbol): APIImportAdderAction => { - if (options.isValidTypeOnlyUseSite !== undefined) { - return { - kind: "importSymbol", - symbol, - isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, - }; - } - return { - kind: "importSymbol", - symbol, - }; - }), - ); - }, - function* (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Generator { - return yield* owner.getImportAdderEdits.gen( - file, - symbols.map((symbol): APIImportAdderAction => { - if (options.isValidTypeOnlyUseSite !== undefined) { - return { - kind: "importSymbol", - symbol, - isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, - }; - } - return { - kind: "importSymbol", - symbol, - }; - }), - ); - }, - ); - } - - get getReferencedSymbolsForNode(): { - (node: Node, position: number): ReferencedSymbolEntry[]; - gen(node: Node, position: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReferencedSymbolsForNode", - function (node: Node, position: number): ReferencedSymbolEntry[] { - const data = owner.client.apiRequest("getReferencedSymbolsForNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - node: getNodeId(node), - position, - }); - return (data ?? []).map(entry => ({ - definition: new NodeHandle(entry.definition, owner.project), - symbol: entry.symbol ? owner.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, - references: (entry.references ?? []).map(h => new NodeHandle(h, owner.project)), - })); - }, - function* (node: Node, position: number): Generator { - const data = yield* apiRequest("getReferencedSymbolsForNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - node: getNodeId(node), - position, - }); - return (data ?? []).map(entry => ({ - definition: new NodeHandle(entry.definition, owner.project), - symbol: entry.symbol ? owner.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, - references: (entry.references ?? []).map(h => new NodeHandle(h, owner.project)), - })); - }, - ); - } - - get getSignatureUsage(): { - (signatureDecl: Node): SignatureUsage[]; - gen(signatureDecl: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSignatureUsage", - function (signatureDecl: Node): SignatureUsage[] { - const data = owner.client.apiRequest("getSignatureUsages", { - snapshot: owner.snapshotId, - project: owner.project.id, - signatureDecl: getNodeId(signatureDecl), - }); - return (data ?? []).map(entry => ({ - name: new NodeHandle(entry.name, owner.project), - call: entry.call ? new NodeHandle(entry.call, owner.project) : undefined, - })); - }, - function* (signatureDecl: Node): Generator { - const data = yield* apiRequest("getSignatureUsages", { - snapshot: owner.snapshotId, - project: owner.project.id, - signatureDecl: getNodeId(signatureDecl), - }); - return (data ?? []).map(entry => ({ - name: new NodeHandle(entry.name, owner.project), - call: entry.call ? new NodeHandle(entry.call, owner.project) : undefined, - })); - }, - ); - } - - get getCompletionsAtPosition(): { - (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined; - gen(document: string, position: number, options?: CompletionOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getCompletionsAtPosition", - function (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined { - const data = owner.client.apiRequest("getCompletionsAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: document, - position, - triggerCharacter: options?.triggerCharacter, - includeSymbol: options?.includeSymbol, - }); - if (!data) return undefined; - return { - isIncomplete: data.isIncomplete, - entries: data.entries.map(e => ({ - ...e, - symbol: e.symbol ? owner.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, - })), - }; - }, - function* (document: string, position: number, options?: CompletionOptions): Generator { - const data = yield* apiRequest("getCompletionsAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: document, - position, - triggerCharacter: options?.triggerCharacter, - includeSymbol: options?.includeSymbol, - }); - if (!data) return undefined; - return { - isIncomplete: data.isIncomplete, - entries: data.entries.map(e => ({ - ...e, - symbol: e.symbol ? owner.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, - })), - }; - }, - ); - } -} - -export class Program implements FormatDiagnosticsHost { - /** @internal */ - readonly snapshotId: number; - readonly id: Id; - private readonly project: Project; - private readonly toPath: (fileName: string, basePath?: string) => PathKey; - private readonly decoder = new Wtf8Decoder(); - private readonly sourceFileMetadataCache = new Map(); - private ownedSnapshot: Snapshot | undefined; - private disposePromise: void | undefined; - - private get client(): Client { - return this.project.api.client; - } - - private get sourceFileCache(): SourceFileCache { - return this.project.api.sourceFileCache; - } - - constructor(snapshotId: number, project: Project, toPath: (fileName: string, basePath?: string) => PathKey) { - this.snapshotId = snapshotId; - this.id = project.id; - this.project = project; - this.toPath = toPath; - } - - getCurrentDirectory(): RootedDirectoryPath { - return this.project.currentDirectory; - } - - getCanonicalFileName(fileName: string): string { - return this.project.api.getCanonicalFileName(fileName); - } - - getNewLine(): string { - return this.project.compilerOptions.newLine === NewLineKind.CRLF ? "\r\n" : "\n"; - } - - /** @internal */ - setOwnedSnapshot(snapshot: Snapshot): void { - this.ownedSnapshot = snapshot; - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - - get dispose(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "dispose", - function (): void { - return owner.disposePromise ??= owner.disposeWorker(); - }, - function* (): Generator { - return owner.disposePromise ??= yield* owner.disposeWorker.gen(); - }, - ); - } - - private get disposeWorker(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "disposeWorker", - function (): void { - const snapshot = owner.ownedSnapshot; - owner.ownedSnapshot = undefined; - if (snapshot) snapshot.dispose(); - }, - function* (): Generator { - const snapshot = owner.ownedSnapshot; - owner.ownedSnapshot = undefined; - if (snapshot) yield* snapshot.dispose.gen(); - }, - ); - } - - getCompilerOptions(): CompilerOptions { - return this.project.compilerOptions; - } - - get getSourceFile(): { - (file: DocumentIdentifier): SourceFile | undefined; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFile", - function (file: DocumentIdentifier): SourceFile | undefined { - const fileName = resolveFileName(file); - const path = owner.pathKeyForFileName(fileName); - return owner.getSourceFileWorker(file, path); - }, - function* (file: DocumentIdentifier): Generator { - const fileName = resolveFileName(file); - const path = owner.pathKeyForFileName(fileName); - return yield* owner.getSourceFileWorker.gen(file, path); - }, - ); - } - - /** - * Returns the source file for an already-canonical path. - * - * @internal - */ - get getSourceFileByPath(): { - (path: PathKey): SourceFile | undefined; - gen(path: PathKey): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFileByPath", - function (path: PathKey): SourceFile | undefined { - // The wire format is a string, but the cache key remains the supplied - // PathKey and is never treated as a RootedPath. - return owner.getSourceFileWorker(path, path); - }, - function* (path: PathKey): Generator { - // The wire format is a string, but the cache key remains the supplied - // PathKey and is never treated as a RootedPath. - return yield* owner.getSourceFileWorker.gen(path, path); - }, - ); - } - - private get getSourceFileWorker(): { - (file: DocumentIdentifier, path: PathKey): SourceFile | undefined; - gen(file: DocumentIdentifier, path: PathKey): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFileWorker", - function (file: DocumentIdentifier, path: PathKey): SourceFile | undefined { - // Check if we already have a retained cache entry for this (snapshot, project) pair - const retained = owner.sourceFileCache.getRetained(path, owner.snapshotId, owner.project.id); - if (retained) { - return retained as unknown as SourceFile; - } - - // Fetch from server - const binaryData = owner.client.apiRequestBinary("getSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - }); - if (!binaryData) { - return undefined; - } - - // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) - const decoded = new RemoteSourceFile(binaryData, owner.decoder, owner.client.getTimingCollector(), owner.project.api); - return owner.sourceFileCache.set(decoded, owner.snapshotId, owner.project.id) as unknown as SourceFile; - }, - function* (file: DocumentIdentifier, path: PathKey): Generator { - // Check if we already have a retained cache entry for this (snapshot, project) pair - const retained = owner.sourceFileCache.getRetained(path, owner.snapshotId, owner.project.id); - if (retained) { - return retained as unknown as SourceFile; - } - - // Fetch from server - const binaryData = sourceFileResponseToUint8Array( - yield* apiRequest("getSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - }), - ); - if (!binaryData) { - return undefined; - } - - // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) - const decoded = new RemoteSourceFile(binaryData, owner.decoder, owner.client.getTimingCollector(), owner.project.api); - return owner.sourceFileCache.set(decoded, owner.snapshotId, owner.project.id) as unknown as SourceFile; - }, - ); - } - - get getResolvedModule(): { - (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): ResolvedModule | undefined; - gen(file: DocumentIdentifier, moduleName: string, mode: ModuleKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedModule", - function (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): ResolvedModule | undefined { - const result = owner.client.apiRequest("getResolvedModule", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - moduleName, - mode, - }); - return result ?? undefined; - }, - function* (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): Generator { - const result = yield* apiRequest("getResolvedModule", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - moduleName, - mode, - }); - return result ?? undefined; - }, - ); - } - - get getModeForUsageLocation(): { - (file: DocumentIdentifier, usage: StringLiteralLikeNode): ModuleKind; - gen(file: DocumentIdentifier, usage: StringLiteralLikeNode): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getModeForUsageLocation", - function (file: DocumentIdentifier, usage: StringLiteralLikeNode): ModuleKind { - return owner.client.apiRequest("getModeForUsageLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - usage: getNodeId(usage), - }); - }, - function* (file: DocumentIdentifier, usage: StringLiteralLikeNode): Generator { - return yield* apiRequest("getModeForUsageLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - usage: getNodeId(usage), - }); - }, - ); - } - - get getModeForResolutionAtIndex(): { - (file: DocumentIdentifier, index: number): ModuleKind; - gen(file: DocumentIdentifier, index: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getModeForResolutionAtIndex", - function (file: DocumentIdentifier, index: number): ModuleKind { - return owner.client.apiRequest("getModeForResolutionAtIndex", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - index, - }); - }, - function* (file: DocumentIdentifier, index: number): Generator { - return yield* apiRequest("getModeForResolutionAtIndex", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - index, - }); - }, - ); - } - - get getResolvedModuleFromModuleSpecifier(): { - (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): ResolvedModule | undefined; - gen(moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedModuleFromModuleSpecifier", - function (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): ResolvedModule | undefined { - const result = owner.client.apiRequest("getResolvedModuleFromModuleSpecifier", { - snapshot: owner.snapshotId, - project: owner.project.id, - moduleSpecifier: getNodeId(moduleSpecifier), - sourceFile, - }); - return result ?? undefined; - }, - function* (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): Generator { - const result = yield* apiRequest("getResolvedModuleFromModuleSpecifier", { - snapshot: owner.snapshotId, - project: owner.project.id, - moduleSpecifier: getNodeId(moduleSpecifier), - sourceFile, - }); - return result ?? undefined; - }, - ); - } - - get getResolvedTypeReferenceDirective(): { - (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): ResolvedTypeReferenceDirective | undefined; - gen(file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedTypeReferenceDirective", - function (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): ResolvedTypeReferenceDirective | undefined { - const result = owner.client.apiRequest("getResolvedTypeReferenceDirective", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - typeDirectiveName, - mode, - }); - return result ?? undefined; - }, - function* (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): Generator { - const result = yield* apiRequest("getResolvedTypeReferenceDirective", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - typeDirectiveName, - mode, - }); - return result ?? undefined; - }, - ); - } - - get getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(): { - (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): ResolvedTypeReferenceDirective | undefined; - gen(typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", - function (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): ResolvedTypeReferenceDirective | undefined { - const result = owner.client.apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { - snapshot: owner.snapshotId, - project: owner.project.id, - sourceFile, - typeDirectiveName: typeReferenceDirective.fileName, - resolutionMode: typeReferenceDirective.resolutionMode, - }); - return result ?? undefined; - }, - function* (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): Generator { - const result = yield* apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { - snapshot: owner.snapshotId, - project: owner.project.id, - sourceFile, - typeDirectiveName: typeReferenceDirective.fileName, - resolutionMode: typeReferenceDirective.resolutionMode, - }); - return result ?? undefined; - }, - ); - } - - get getSourceFileNames(): { - (): readonly RootedFilePath[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFileNames", - function (): readonly RootedFilePath[] { - const data = owner.client.apiRequest("getSourceFileNames", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - function* (): Generator { - const data = yield* apiRequest("getSourceFileNames", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - ); - } - - /** - * Returns program-stored metadata for the given source file, or `undefined` if the file - * is not part of the program. Metadata is fetched lazily per file and cached on this - * `Program` instance. - */ - get getSourceFileMetadata(): { - (file: DocumentIdentifier): SourceFileMetadata | undefined; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFileMetadata", - function (file: DocumentIdentifier): SourceFileMetadata | undefined { - return owner.getSourceFileMetadataByPath(owner.pathKeyForFileName(resolveFileName(file))); - }, - function* (file: DocumentIdentifier): Generator { - return yield* owner.getSourceFileMetadataByPath.gen(owner.pathKeyForFileName(resolveFileName(file))); - }, - ); - } - - /** - * Returns program-stored metadata for the source file at the given path, or `undefined` - * if the file is not part of the program. Like {@link getSourceFileMetadata}, but skips - * the file name to path conversion. Metadata is fetched lazily per file and cached on - * this `Program` instance. - */ - get getSourceFileMetadataByPath(): { - (path: PathKey): SourceFileMetadata | undefined; - gen(path: PathKey): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSourceFileMetadataByPath", - function (path: PathKey): SourceFileMetadata | undefined { - let metadata = owner.sourceFileMetadataCache.get(path); - if (metadata === undefined) { - metadata = owner.fetchSourceFileMetadata(path); - owner.sourceFileMetadataCache.set(path, metadata); - } - return metadata; - }, - function* (path: PathKey): Generator { - let metadata = owner.sourceFileMetadataCache.get(path); - if (metadata === undefined) { - metadata = yield* owner.fetchSourceFileMetadata.gen(path); - owner.sourceFileMetadataCache.set(path, metadata); - } - return metadata; - }, - ); - } - - private get fetchSourceFileMetadata(): { - (path: PathKey): SourceFileMetadata | undefined; - gen(path: PathKey): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSourceFileMetadata", - function (path: PathKey): SourceFileMetadata | undefined { - // PathKey is serialized as a string; the server deliberately treats all - // client-provided path text as untrusted input. - const data = owner.client.apiRequest("getSourceFileMetadata", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: path, - }); - return data ?? undefined; - }, - function* (path: PathKey): Generator { - // PathKey is serialized as a string; the server deliberately treats all - // client-provided path text as untrusted input. - const data = yield* apiRequest("getSourceFileMetadata", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: path, - }); - return data ?? undefined; - }, - ); - } - - private pathKeyForFileName(fileName: string): PathKey { - return this.toPath(fileName, this.project.currentDirectory); - } - - /** - * Returns whether the given source file was loaded as part of an external library - * (e.g. a dependency resolved from `node_modules`). The underlying program metadata is - * fetched lazily per file and cached on this `Program` instance. - */ - get isSourceFileFromExternalLibrary(): { - (file: SourceFile): boolean; - gen(file: SourceFile): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isSourceFileFromExternalLibrary", - function (file: SourceFile): boolean { - const metadata = owner.getSourceFileMetadataByPath(file.path); - return metadata?.isFromExternalLibrary ?? false; - }, - function* (file: SourceFile): Generator { - const metadata = yield* owner.getSourceFileMetadataByPath.gen(file.path); - return metadata?.isFromExternalLibrary ?? false; - }, - ); - } - - /** - * Returns whether the given source file is a default library file (e.g. `lib.d.ts`). - * The underlying program metadata is fetched lazily per file and cached on this - * `Program` instance. - */ - get isSourceFileDefaultLibrary(): { - (file: SourceFile): boolean; - gen(file: SourceFile): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isSourceFileDefaultLibrary", - function (file: SourceFile): boolean { - const metadata = owner.getSourceFileMetadataByPath(file.path); - return metadata?.isDefaultLibrary ?? false; - }, - function* (file: SourceFile): Generator { - const metadata = yield* owner.getSourceFileMetadataByPath.gen(file.path); - return metadata?.isDefaultLibrary ?? false; - }, - ); - } - - /** - * Get all config source file names associated with this program's project config. - * Includes the root config file and any extended config files. - */ - get getConfigFileNames(): { - (): readonly RootedFilePath[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConfigFileNames", - function (): readonly RootedFilePath[] { - const data = owner.client.apiRequest("getConfigFileNames", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - function* (): Generator { - const data = yield* apiRequest("getConfigFileNames", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - ); - } - - /** - * Get a config source file by file name/URI. - * This can return the project's root tsconfig file or one of its extended config files. - */ - get getConfigSourceFile(): { - (file: DocumentIdentifier): SourceFile | undefined; - gen(file: DocumentIdentifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConfigSourceFile", - function (file: DocumentIdentifier): SourceFile | undefined { - const binaryData = owner.client.apiRequestBinary("getConfigSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - }); - if (!binaryData) { - return undefined; - } - - return new RemoteSourceFile(binaryData, owner.decoder, undefined, owner.project.api) as unknown as SourceFile; - }, - function* (file: DocumentIdentifier): Generator { - const binaryData = sourceFileResponseToUint8Array( - yield* apiRequest("getConfigSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - }), - ); - if (!binaryData) { - return undefined; - } - - return new RemoteSourceFile(binaryData, owner.decoder, undefined, owner.project.api) as unknown as SourceFile; - }, - ); - } - - /** - * Get syntactic (parse) diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - get getSyntacticDiagnostics(): { - (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; - gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSyntacticDiagnostics", - function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = owner.client.apiRequest("getSyntacticDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = yield* apiRequest("getSyntacticDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - ); - } - - /** - * Get binder diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - get getBindDiagnostics(): { - (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; - gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBindDiagnostics", - function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = owner.client.apiRequest("getBindDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = yield* apiRequest("getBindDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - ); - } - - /** - * Get semantic (type-check) diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - get getSemanticDiagnostics(): { - (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; - gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSemanticDiagnostics", - function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = owner.client.apiRequest("getSemanticDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = yield* apiRequest("getSemanticDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - ); - } - - /** - * Get suggestion diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - get getSuggestionDiagnostics(): { - (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; - gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSuggestionDiagnostics", - function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = owner.client.apiRequest("getSuggestionDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = yield* apiRequest("getSuggestionDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - ); - } - - /** - * Get declaration emit diagnostics for specific files or all files. - * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. - */ - get getDeclarationDiagnostics(): { - (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; - gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDeclarationDiagnostics", - function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = owner.client.apiRequest("getDeclarationDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - const files = file === undefined ? undefined - : Array.isArray(file) ? file - : [file]; - const data = yield* apiRequest("getDeclarationDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return data ?? []; - }, - ); - } - - /** - * Get program-wide diagnostics for the project, including compiler options diagnostics. - */ - get getProgramDiagnostics(): { - (): readonly Diagnostic[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getProgramDiagnostics", - function (): readonly Diagnostic[] { - const data = owner.client.apiRequest("getProgramDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - function* (): Generator { - const data = yield* apiRequest("getProgramDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - ); - } - - /** - * Get global (non-file-specific) semantic diagnostics for the project. - */ - get getGlobalDiagnostics(): { - (): readonly Diagnostic[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getGlobalDiagnostics", - function (): readonly Diagnostic[] { - const data = owner.client.apiRequest("getGlobalDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - function* (): Generator { - const data = yield* apiRequest("getGlobalDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - ); - } - - /** - * Get config file parsing diagnostics for the project. - */ - get getConfigFileParsingDiagnostics(): { - (): readonly Diagnostic[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConfigFileParsingDiagnostics", - function (): readonly Diagnostic[] { - const data = owner.client.apiRequest("getConfigFileParsingDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - function* (): Generator { - const data = yield* apiRequest("getConfigFileParsingDiagnostics", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return data ?? []; - }, - ); - } - - /** - * Emits files to the configured filesystem. Layer and host filesystems are - * written through; full filesystems remain immutable and return emitted - * files in {@link EmitResult.fileSystem}. - */ - get emit(): { - (emitOnly?: EmitOnly): EmitResult; - gen(emitOnly?: EmitOnly): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "emit", - function (emitOnly?: EmitOnly): EmitResult { - const response = owner.client.apiRequest("emit", { - snapshot: owner.snapshotId, - project: owner.project.id, - emitOnly, - }); - const fileSystem = response.emittedFilesContents.length - ? { - kind: "layer" as const, - files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), - } - : undefined; - return { - emitSkipped: response.emitSkipped, - diagnostics: response.diagnostics, - emittedFiles: response.emittedFiles, - fileSystem, - }; - }, - function* (emitOnly?: EmitOnly): Generator { - const response = yield* apiRequest("emit", { - snapshot: owner.snapshotId, - project: owner.project.id, - emitOnly, - }); - const fileSystem = response.emittedFilesContents.length - ? { - kind: "layer" as const, - files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), - } - : undefined; - return { - emitSkipped: response.emitSkipped, - diagnostics: response.diagnostics, - emittedFiles: response.emittedFiles, - fileSystem, - }; - }, - ); - } - - /** - * Emits files and returns their contents without writing to the filesystem. - */ - get emitToString(): { - (emitOnly?: EmitOnly): EmitOutput; - gen(emitOnly?: EmitOnly): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "emitToString", - function (emitOnly?: EmitOnly): EmitOutput { - const response = owner.client.apiRequest("emitToString", { - snapshot: owner.snapshotId, - project: owner.project.id, - emitOnly, - }); - return toEmitOutput(response); - }, - function* (emitOnly?: EmitOnly): Generator { - const response = yield* apiRequest("emitToString", { - snapshot: owner.snapshotId, - project: owner.project.id, - emitOnly, - }); - return toEmitOutput(response); - }, - ); - } - - /** - * Gets JavaScript output for selected files regardless of project `noEmit`, `emitDeclarationOnly`, and `noEmitOnError` settings. - */ - get getJavaScriptEmit(): { - (files: readonly DocumentIdentifier[]): EmitOutput; - gen(files: readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getJavaScriptEmit", - function (files: readonly DocumentIdentifier[]): EmitOutput { - const response = owner.client.apiRequest("getJavaScriptEmit", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return toEmitOutput(response); - }, - function* (files: readonly DocumentIdentifier[]): Generator { - const response = yield* apiRequest("getJavaScriptEmit", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return toEmitOutput(response); - }, - ); - } - - /** - * Gets declaration output for selected files regardless of project `noEmit`, `declaration`, `emitDeclarationOnly`, and `noEmitOnError` settings. - */ - get getDeclarationEmit(): { - (files: readonly DocumentIdentifier[]): EmitOutput; - gen(files: readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDeclarationEmit", - function (files: readonly DocumentIdentifier[]): EmitOutput { - const response = owner.client.apiRequest("getDeclarationEmit", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return toEmitOutput(response); - }, - function* (files: readonly DocumentIdentifier[]): Generator { - const response = yield* apiRequest("getDeclarationEmit", { - snapshot: owner.snapshotId, - project: owner.project.id, - files, - }); - return toEmitOutput(response); - }, - ); - } - - getProject(): Project { - return this.project; - } -} - -export interface BuildOrchestratorOptions { - cwd?: string | undefined; - dry?: boolean; - force?: boolean; - verbose?: boolean; - stopBuildOnErrors?: boolean; - overrideCompilerOptions?: OverrideCompilerOptions; -} - -export interface OverrideCompilerOptions { - incremental?: boolean; - assumeChangesOnlyAffectDirectDependencies?: boolean; - declaration?: boolean; - declarationMap?: boolean; - emitDeclarationOnly?: boolean; - sourceMap?: boolean; - inlineSourceMap?: boolean; - traceResolution?: boolean; -} - -export class BuildOrchestrator { - private client: Client; - private id: number; - private disposed = false; - private disposePromise: void | undefined; - private onDispose: () => void; - - constructor( - client: Client, - orchestratorResponse: CreateBuildOrchestratorResponse, - onDispose: () => void, - ) { - this.client = client; - this.id = orchestratorResponse.buildOrchestratorID; - this.onDispose = onDispose; - } - - [globalThis.Symbol.dispose](): void { - void this.dispose(); - } - get dispose(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "dispose", - function (): void { - return owner.disposePromise ??= owner.disposeWorker(); - }, - function* (): Generator { - return owner.disposePromise ??= yield* owner.disposeWorker.gen(); - }, - ); - } - - private get disposeWorker(): { - (): void; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "disposeWorker", - function (): void { - if (owner.disposed) return; - owner.disposed = true; - try { - owner.client.apiRequest("disposeBuildOrchestrator", { - buildOrchestratorID: owner.id, - }); - } - finally { - owner.onDispose(); - } - }, - function* (): Generator { - if (owner.disposed) return; - owner.disposed = true; - try { - yield* apiRequest("disposeBuildOrchestrator", { - buildOrchestratorID: owner.id, - }); - } - finally { - owner.onDispose(); - } - }, - ); - } - - get build(): { - (project?: string): BuildResponse; - gen(project?: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "build", - function (project?: string): BuildResponse { - owner.ensureNotDisposed(); - const response = owner.client.apiRequest("build", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - function* (project?: string): Generator { - owner.ensureNotDisposed(); - const response = yield* apiRequest("build", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - ); - } - get buildReferences(): { - (project: string): BuildResponse; - gen(project: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "buildReferences", - function (project: string): BuildResponse { - owner.ensureNotDisposed(); - const response = owner.client.apiRequest("buildReferences", { - buildOrchestratorID: owner.id, - project, - }); - return response; - }, - function* (project: string): Generator { - owner.ensureNotDisposed(); - const response = yield* apiRequest("buildReferences", { - buildOrchestratorID: owner.id, - project, - }); - return response; - }, - ); - } - get clean(): { - (project?: string): CleanBuildResponse; - gen(project?: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "clean", - function (project?: string): CleanBuildResponse { - owner.ensureNotDisposed(); - const response = owner.client.apiRequest("cleanBuild", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - function* (project?: string): Generator { - owner.ensureNotDisposed(); - const response = yield* apiRequest("cleanBuild", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - ); - } - get cleanReferences(): { - (project?: string): CleanBuildResponse; - gen(project?: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "cleanReferences", - function (project?: string): CleanBuildResponse { - owner.ensureNotDisposed(); - const response = owner.client.apiRequest("cleanReferences", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - function* (project?: string): Generator { - owner.ensureNotDisposed(); - const response = yield* apiRequest("cleanReferences", { - buildOrchestratorID: owner.id, - ...(project !== undefined ? { project } : {}), - }); - return response; - }, - ); - } - - isDisposed(): boolean { - return this.disposed; - } - - private ensureNotDisposed(): void { - if (this.disposed) { - throw new Error("Build orchestrator is disposed"); - } - } -} - -function toEmitOutput(response: ProtocolEmitOutputResponse): EmitOutput { - const outputFiles = new Map(); - for (const { fileName, ...outputFile } of response.outputFiles) { - outputFiles.set(fileName, outputFile); - } - return { - emitSkipped: response.emitSkipped, - diagnostics: response.diagnostics, - outputFiles, - }; -} - -export class Checker { - private snapshotId: number; - private project: Project; - private objectRegistry: ProjectObjectRegistry; - private wellKnownSymbols: { unknown: number; undefined: number; arguments: number; } | undefined; - private wellKnownSignatures: { unknown: number; } | undefined; - - private get client(): Client { - return this.project.api.client; - } - - constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { - this.snapshotId = snapshotId; - this.project = project; - this.objectRegistry = objectRegistry; - } - - dispose(): void { - this.objectRegistry.clear(); - } - - /** Get the merged symbol, or the original symbol if it has not been merged. */ - get getMergedSymbol(): { - (symbol: Symbol): Symbol; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getMergedSymbol", - function (symbol: Symbol): Symbol { - const data = owner.client.apiRequest("getMergedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getMergedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - ); - } - - /** - * Get a node's merged symbol. For a declaration, prefer - * {@link Checker.getSymbolOfDeclaration} for a non-nullable result. - */ - get getSymbolOfNode(): { - (node: Node): Symbol | undefined; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSymbolOfNode", - function (node: Node): Symbol | undefined { - const data = owner.client.apiRequest("getSymbolOfNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getSymbolOfNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - /** Get a declaration's merged symbol. */ - get getSymbolOfDeclaration(): { - (node: Declaration): Symbol; - gen(node: Declaration): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSymbolOfDeclaration", - function (node: Declaration): Symbol { - const data = owner.client.apiRequest("getSymbolOfDeclarationForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - // Declarations normally have symbols, but preserve unexpected null results at runtime. - return (data && owner.objectRegistry.getOrCreateSymbol(data))!; - }, - function* (node: Declaration): Generator { - const data = yield* apiRequest("getSymbolOfDeclarationForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - // Declarations normally have symbols, but preserve unexpected null results at runtime. - return (data && owner.objectRegistry.getOrCreateSymbol(data))!; - }, - ); - } - - /** Get a symbol's merged parent, if any. */ - get getParentOfSymbol(): { - (symbol: Symbol): Symbol | undefined; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getParentOfSymbol", - function (symbol: Symbol): Symbol | undefined { - const data = owner.client.apiRequest("getParentOfSymbolForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getParentOfSymbolForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - get getSymbolAtLocation(): { - (node: Node): Symbol | undefined; - (nodes: readonly Node[]): (Symbol | undefined)[]; - gen(node: Node): Generator; - gen(nodes: readonly Node[]): Generator; - } { - const owner = this; - function getSymbolAtLocation(node: Node): Symbol | undefined; - function getSymbolAtLocation(nodes: readonly Node[]): (Symbol | undefined)[]; - function getSymbolAtLocation(nodeOrNodes: Node | readonly Node[]): Symbol | (Symbol | undefined)[] | undefined { - if (Array.isArray(nodeOrNodes)) { - const data = owner.client.apiRequest("getSymbolsAtLocations", { - snapshot: owner.snapshotId, - project: owner.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = owner.client.apiRequest("getSymbolAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - function gen(node: Node): Generator; - function gen(nodes: readonly Node[]): Generator; - function* gen(nodeOrNodes: Node | readonly Node[]): Generator { - if (Array.isArray(nodeOrNodes)) { - const data = yield* apiRequest("getSymbolsAtLocations", { - snapshot: owner.snapshotId, - project: owner.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = yield* apiRequest("getSymbolAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - return cacheGeneratorMethod(owner, "getSymbolAtLocation", getSymbolAtLocation, gen); - } - - get getSymbolAtPosition(): { - (file: DocumentIdentifier, position: number): Symbol | undefined; - (file: DocumentIdentifier, positions: readonly number[]): (Symbol | undefined)[]; - gen(file: DocumentIdentifier, position: number): Generator; - gen(file: DocumentIdentifier, positions: readonly number[]): Generator; - } { - const owner = this; - function getSymbolAtPosition(file: DocumentIdentifier, position: number): Symbol | undefined; - function getSymbolAtPosition(file: DocumentIdentifier, positions: readonly number[]): (Symbol | undefined)[]; - function getSymbolAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Symbol | (Symbol | undefined)[] | undefined { - if (typeof positionOrPositions === "number") { - const data = owner.client.apiRequest("getSymbolAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - position: positionOrPositions, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - const data = owner.client.apiRequest("getSymbolsAtPositions", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - function gen(file: DocumentIdentifier, position: number): Generator; - function gen(file: DocumentIdentifier, positions: readonly number[]): Generator; - function* gen(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Generator { - if (typeof positionOrPositions === "number") { - const data = yield* apiRequest("getSymbolAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - position: positionOrPositions, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - const data = yield* apiRequest("getSymbolsAtPositions", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - return cacheGeneratorMethod(owner, "getSymbolAtPosition", getSymbolAtPosition, gen); - } - - get getSymbolOfSourceFile(): { - (file: DocumentIdentifier): Symbol | undefined; - (files: readonly DocumentIdentifier[]): (Symbol | undefined)[]; - gen(file: DocumentIdentifier): Generator; - gen(files: readonly DocumentIdentifier[]): Generator; - } { - const owner = this; - function getSymbolOfSourceFile(file: DocumentIdentifier): Symbol | undefined; - function getSymbolOfSourceFile(files: readonly DocumentIdentifier[]): (Symbol | undefined)[]; - function getSymbolOfSourceFile(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Symbol | (Symbol | undefined)[] | undefined { - if (Array.isArray(fileOrFiles)) { - const data = owner.client.apiRequest("getSymbolsOfSourceFiles", { - snapshot: owner.snapshotId, - project: owner.project.id, - files: fileOrFiles, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = owner.client.apiRequest("getSymbolOfSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: fileOrFiles as DocumentIdentifier, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - function gen(file: DocumentIdentifier): Generator; - function gen(files: readonly DocumentIdentifier[]): Generator; - function* gen(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { - if (Array.isArray(fileOrFiles)) { - const data = yield* apiRequest("getSymbolsOfSourceFiles", { - snapshot: owner.snapshotId, - project: owner.project.id, - files: fileOrFiles, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); - } - const data = yield* apiRequest("getSymbolOfSourceFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file: fileOrFiles as DocumentIdentifier, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - } - return cacheGeneratorMethod(owner, "getSymbolOfSourceFile", getSymbolOfSourceFile, gen); - } - - /** - * Get the type of a symbol. Always returns a type; for symbols whose type - * cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - get getTypeOfSymbol(): { - (symbol: Symbol): Type; - (symbols: readonly Symbol[]): Type[]; - gen(symbol: Symbol): Generator; - gen(symbols: readonly Symbol[]): Generator; - } { - const owner = this; - function getTypeOfSymbol(symbol: Symbol): Type; - function getTypeOfSymbol(symbols: readonly Symbol[]): Type[]; - function getTypeOfSymbol(symbolOrSymbols: Symbol | readonly Symbol[]): Type | Type[] { - if (Array.isArray(symbolOrSymbols)) { - const data = owner.client.apiRequest("getTypesOfSymbols", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbols: symbolOrSymbols.map(symbol => symbol.reference), - }); - return data.map(d => owner.objectRegistry.getOrCreateType(d)); - } - const data = owner.client.apiRequest("getTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: (symbolOrSymbols as Symbol).reference, - }); - return owner.objectRegistry.getOrCreateType(data); - } - function gen(symbol: Symbol): Generator; - function gen(symbols: readonly Symbol[]): Generator; - function* gen(symbolOrSymbols: Symbol | readonly Symbol[]): Generator { - if (Array.isArray(symbolOrSymbols)) { - const data = yield* apiRequest("getTypesOfSymbols", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbols: symbolOrSymbols.map(symbol => symbol.reference), - }); - return data.map(d => owner.objectRegistry.getOrCreateType(d)); - } - const data = yield* apiRequest("getTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: (symbolOrSymbols as Symbol).reference, - }); - return owner.objectRegistry.getOrCreateType(data); - } - return cacheGeneratorMethod(owner, "getTypeOfSymbol", getTypeOfSymbol, gen); - } - - /** - * Get the declared type of a symbol. Always returns a type; for symbols whose - * declared type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - get getDeclaredTypeOfSymbol(): { - (symbol: Symbol): Type; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDeclaredTypeOfSymbol", - function (symbol: Symbol): Type { - const data = owner.client.apiRequest("getDeclaredTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getDeclaredTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - /** - * Get the type of a symbol, excluding the missing type when - * `exactOptionalPropertyTypes: true` is set; for symbols whose - * type cannot be determined the checker yields the error type - * (use {@link Type.isErrorType} to detect it). - */ - get getNonMissingTypeOfSymbol(): { - (symbol: Symbol): Type; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNonMissingTypeOfSymbol", - function (symbol: Symbol): Type { - const data = owner.client.apiRequest("getNonMissingTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getNonMissingTypeOfSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - get getReferencesToSymbolInFile(): { - (file: DocumentIdentifier, symbol: Symbol): NodeHandle[]; - gen(file: DocumentIdentifier, symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReferencesToSymbolInFile", - function (file: DocumentIdentifier, symbol: Symbol): NodeHandle[] { - const data = owner.client.apiRequest("getReferencesToSymbolInFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - symbol: symbol.reference, - }); - return (data ?? []).map(h => new NodeHandle(h, owner.project)); - }, - function* (file: DocumentIdentifier, symbol: Symbol): Generator { - const data = yield* apiRequest("getReferencesToSymbolInFile", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - symbol: symbol.reference, - }); - return (data ?? []).map(h => new NodeHandle(h, owner.project)); - }, - ); - } - - /** @deprecated Use `project.languageService.getReferencedSymbolsForNode`. */ - get getReferencedSymbolsForNode(): { - (node: Node, position: number): ReferencedSymbolEntry[]; - gen(node: Node, position: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReferencedSymbolsForNode", - function (node: Node, position: number): ReferencedSymbolEntry[] { - return owner.project.languageService.getReferencedSymbolsForNode(node, position); - }, - function* (node: Node, position: number): Generator { - return yield* owner.project.languageService.getReferencedSymbolsForNode.gen(node, position); - }, - ); - } - - /** @deprecated Use `project.languageService.getSignatureUsage`. */ - get getSignatureUsage(): { - (signatureDecl: Node): SignatureUsage[]; - gen(signatureDecl: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSignatureUsage", - function (signatureDecl: Node): SignatureUsage[] { - return owner.project.languageService.getSignatureUsage(signatureDecl); - }, - function* (signatureDecl: Node): Generator { - return yield* owner.project.languageService.getSignatureUsage.gen(signatureDecl); - }, - ); - } - - /** @deprecated Use `project.languageService.getCompletionsAtPosition`. */ - get getCompletionsAtPosition(): { - (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined; - gen(document: string, position: number, options?: CompletionOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getCompletionsAtPosition", - function (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined { - return owner.project.languageService.getCompletionsAtPosition(document, position, options); - }, - function* (document: string, position: number, options?: CompletionOptions): Generator { - return yield* owner.project.languageService.getCompletionsAtPosition.gen(document, position, options); - }, - ); - } - - /** - * Get the type at a node location. Always returns a type; for nodes whose - * type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - get getTypeAtLocation(): { - (node: Node): Type; - (nodes: readonly Node[]): Type[]; - gen(node: Node): Generator; - gen(nodes: readonly Node[]): Generator; - } { - const owner = this; - function getTypeAtLocation(node: Node): Type; - function getTypeAtLocation(nodes: readonly Node[]): Type[]; - function getTypeAtLocation(nodeOrNodes: Node | readonly Node[]): Type | Type[] { - if (Array.isArray(nodeOrNodes)) { - const data = owner.client.apiRequest("getTypeAtLocations", { - snapshot: owner.snapshotId, - project: owner.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => owner.objectRegistry.getOrCreateType(d)); - } - const data = owner.client.apiRequest("getTypeAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return owner.objectRegistry.getOrCreateType(data); - } - function gen(node: Node): Generator; - function gen(nodes: readonly Node[]): Generator; - function* gen(nodeOrNodes: Node | readonly Node[]): Generator { - if (Array.isArray(nodeOrNodes)) { - const data = yield* apiRequest("getTypeAtLocations", { - snapshot: owner.snapshotId, - project: owner.project.id, - locations: nodeOrNodes.map(node => getNodeId(node)), - }); - return data.map(d => owner.objectRegistry.getOrCreateType(d)); - } - const data = yield* apiRequest("getTypeAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(nodeOrNodes as Node), - }); - return owner.objectRegistry.getOrCreateType(data); - } - return cacheGeneratorMethod(owner, "getTypeAtLocation", getTypeAtLocation, gen); - } - - get getSignaturesOfType(): { - (type: Type, kind: SignatureKind): readonly Signature[]; - gen(type: Type, kind: SignatureKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSignaturesOfType", - function (type: Type, kind: SignatureKind): readonly Signature[] { - return kind === SignatureKind.Call ? type.getCallSignatures() : type.getConstructSignatures(); - }, - function* (type: Type, kind: SignatureKind): Generator { - return kind === SignatureKind.Call ? (yield* type.getCallSignatures.gen()) : (yield* type.getConstructSignatures.gen()); - }, - ); - } - - /** - * Get the resolved signature of a call-like expression. Always returns a - * signature; when a call cannot be resolved the checker yields the unknown - * signature (use {@link Checker.isUnknownSignature} to detect it). - */ - get getResolvedSignature(): { - (node: Node): Signature; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedSignature", - function (node: Node): Signature { - const data = owner.client.apiRequest("getResolvedSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateSignature(data); - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getResolvedSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateSignature(data); - }, - ); - } - - get getTypeAtPosition(): { - (file: DocumentIdentifier, position: number): Type | undefined; - (file: DocumentIdentifier, positions: readonly number[]): (Type | undefined)[]; - gen(file: DocumentIdentifier, position: number): Generator; - gen(file: DocumentIdentifier, positions: readonly number[]): Generator; - } { - const owner = this; - function getTypeAtPosition(file: DocumentIdentifier, position: number): Type | undefined; - function getTypeAtPosition(file: DocumentIdentifier, positions: readonly number[]): (Type | undefined)[]; - function getTypeAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Type | (Type | undefined)[] | undefined { - if (typeof positionOrPositions === "number") { - const data = owner.client.apiRequest("getTypeAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - position: positionOrPositions, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - } - const data = owner.client.apiRequest("getTypesAtPositions", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateType(d) : undefined); - } - function gen(file: DocumentIdentifier, position: number): Generator; - function gen(file: DocumentIdentifier, positions: readonly number[]): Generator; - function* gen(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Generator { - if (typeof positionOrPositions === "number") { - const data = yield* apiRequest("getTypeAtPosition", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - position: positionOrPositions, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - } - const data = yield* apiRequest("getTypesAtPositions", { - snapshot: owner.snapshotId, - project: owner.project.id, - file, - positions: positionOrPositions, - }); - return data.map(d => d ? owner.objectRegistry.getOrCreateType(d) : undefined); - } - return cacheGeneratorMethod(owner, "getTypeAtPosition", getTypeAtPosition, gen); - } - - get resolveName(): { - (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Symbol | undefined; - gen(name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "resolveName", - function (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Symbol | undefined { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = location && "kind" in location; - const data = owner.client.apiRequest("resolveName", { - snapshot: owner.snapshotId, - project: owner.project.id, - name, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: !isNode && location ? (location as DocumentPosition).document : undefined, - position: !isNode && location ? (location as DocumentPosition).position : undefined, - excludeGlobals, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Generator { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = location && "kind" in location; - const data = yield* apiRequest("resolveName", { - snapshot: owner.snapshotId, - project: owner.project.id, - name, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: !isNode && location ? (location as DocumentPosition).document : undefined, - position: !isNode && location ? (location as DocumentPosition).position : undefined, - excludeGlobals, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - /** - * Returns all symbols with the given meaning that are visible at `location`. - */ - get getSymbolsInScope(): { - (location: Node | DocumentPosition, meaning: SymbolFlags): readonly Symbol[]; - gen(location: Node | DocumentPosition, meaning: SymbolFlags): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSymbolsInScope", - function (location: Node | DocumentPosition, meaning: SymbolFlags): readonly Symbol[] { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = "kind" in location; - const data = owner.client.apiRequest("getSymbolsInScope", { - snapshot: owner.snapshotId, - project: owner.project.id, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: isNode ? undefined : (location as DocumentPosition).document, - position: isNode ? undefined : (location as DocumentPosition).position, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; - }, - function* (location: Node | DocumentPosition, meaning: SymbolFlags): Generator { - // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) - const isNode = "kind" in location; - const data = yield* apiRequest("getSymbolsInScope", { - snapshot: owner.snapshotId, - project: owner.project.id, - meaning, - location: isNode ? getNodeId(location as Node) : undefined, - file: isNode ? undefined : (location as DocumentPosition).document, - position: isNode ? undefined : (location as DocumentPosition).position, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; - }, - ); - } - - get getResolvedSymbol(): { - (node: Identifier): Symbol | undefined; - gen(node: Identifier): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getResolvedSymbol", - function (node: Identifier): Symbol | undefined { - const text = node.text; - if (!text) return undefined; - return owner.resolveName(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); - }, - function* (node: Identifier): Generator { - const text = node.text; - if (!text) return undefined; - return yield* owner.resolveName.gen(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); - }, - ); - } - - get getContextualType(): { - (node: Expression): Type | undefined; - gen(node: Expression): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getContextualType", - function (node: Expression): Type | undefined { - const data = owner.client.apiRequest("getContextualType", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - function* (node: Expression): Generator { - const data = yield* apiRequest("getContextualType", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - ); - } - - get getContextualTypeForArgumentAtIndex(): { - (node: CallLikeExpression, argIndex: number): Type | undefined; - gen(node: CallLikeExpression, argIndex: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getContextualTypeForArgumentAtIndex", - function (node: CallLikeExpression, argIndex: number): Type | undefined { - const data = owner.client.apiRequest("getContextualTypeForArgument", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - index: argIndex, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - function* (node: CallLikeExpression, argIndex: number): Generator { - const data = yield* apiRequest("getContextualTypeForArgument", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - index: argIndex, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - ); - } - - get getAwaitedType(): { - (type: Type): Type | undefined; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getAwaitedType", - function (type: Type): Type | undefined { - const data = owner.client.apiRequest("getAwaitedType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - function* (type: Type): Generator { - const data = yield* apiRequest("getAwaitedType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - ); - } - - /** Get the base type of a literal type (e.g. `number` for `42`). Always returns a type. */ - get getBaseTypeOfLiteralType(): { - (type: Type): Type; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBaseTypeOfLiteralType", - function (type: Type): Type { - const data = owner.client.apiRequest("getBaseTypeOfLiteralType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (type: Type): Generator { - const data = yield* apiRequest("getBaseTypeOfLiteralType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - /** Get the type with `null` and `undefined` removed. Always returns a type. */ - get getNonNullableType(): { - (type: Type): Type; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNonNullableType", - function (type: Type): Type { - return type.getNonNullableType(); - }, - function* (type: Type): Generator { - return yield* type.getNonNullableType.gen(); - }, - ); - } - - /** - * Get the type for a type node. Always returns a type; for type nodes whose - * type cannot be determined the checker yields the error type (use - * {@link Type.isErrorType} to detect it). - */ - get getTypeFromTypeNode(): { - (node: TypeNode): Type; - gen(node: TypeNode): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeFromTypeNode", - function (node: TypeNode): Type { - const data = owner.client.apiRequest("getTypeFromTypeNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (node: TypeNode): Generator { - const data = yield* apiRequest("getTypeFromTypeNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - /** Get the widened type. Always returns a type. */ - get getWidenedType(): { - (type: Type): Type; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getWidenedType", - function (type: Type): Type { - const data = owner.client.apiRequest("getWidenedType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (type: Type): Generator { - const data = yield* apiRequest("getWidenedType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - /** - * Get the type of the parameter at the given index in a signature. Always - * returns a type; an out-of-range index yields the `any` type. - */ - get getParameterType(): { - (signature: Signature, index: number): Type; - gen(signature: Signature, index: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getParameterType", - function (signature: Signature, index: number): Type { - const data = owner.client.apiRequest("getParameterType", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - index, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (signature: Signature, index: number): Generator { - const data = yield* apiRequest("getParameterType", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - index, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - get isArrayLikeType(): { - (type: Type): boolean; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isArrayLikeType", - function (type: Type): boolean { - return owner.client.apiRequest("isArrayLikeType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - }, - function* (type: Type): Generator { - return yield* apiRequest("isArrayLikeType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - }, - ); - } - - get isTypeAssignableTo(): { - (source: Type, target: Type): boolean; - gen(source: Type, target: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isTypeAssignableTo", - function (source: Type, target: Type): boolean { - return owner.client.apiRequest("isTypeAssignableTo", { - snapshot: owner.snapshotId, - project: owner.project.id, - source: source.id, - target: target.id, - }); - }, - function* (source: Type, target: Type): Generator { - return yield* apiRequest("isTypeAssignableTo", { - snapshot: owner.snapshotId, - project: owner.project.id, - source: source.id, - target: target.id, - }); - }, - ); - } - - get getShorthandAssignmentValueSymbol(): { - (node: Node): Symbol | undefined; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getShorthandAssignmentValueSymbol", - function (node: Node): Symbol | undefined { - const data = owner.client.apiRequest("getShorthandAssignmentValueSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getShorthandAssignmentValueSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - /** - * Get the type of a symbol as narrowed at a specific location. Always returns - * a type; for symbols whose type cannot be determined the checker yields the - * error type (use {@link Type.isErrorType} to detect it). - */ - get getTypeOfSymbolAtLocation(): { - (symbol: Symbol, location: Node): Type; - gen(symbol: Symbol, location: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeOfSymbolAtLocation", - function (symbol: Symbol, location: Node): Type { - const data = owner.client.apiRequest("getTypeOfSymbolAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - location: getNodeId(location), - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (symbol: Symbol, location: Node): Generator { - const data = yield* apiRequest("getTypeOfSymbolAtLocation", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - location: getNodeId(location), - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - private get getIntrinsicType(): { - (method: IntrinsicTypeMethod): Type; - gen(method: IntrinsicTypeMethod): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIntrinsicType", - function (method: IntrinsicTypeMethod): Type { - const data = owner.client.apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (method: IntrinsicTypeMethod): Generator { - const data = yield* apiRequest(method, { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - get getAnyType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getAnyType", - function (): Type { - return owner.getIntrinsicType("getAnyType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getAnyType"); - }, - ); - } - get getStringType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getStringType", - function (): Type { - return owner.getIntrinsicType("getStringType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getStringType"); - }, - ); - } - get getNumberType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNumberType", - function (): Type { - return owner.getIntrinsicType("getNumberType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getNumberType"); - }, - ); - } - get getBooleanType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBooleanType", - function (): Type { - return owner.getIntrinsicType("getBooleanType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getBooleanType"); - }, - ); - } - get getVoidType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getVoidType", - function (): Type { - return owner.getIntrinsicType("getVoidType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getVoidType"); - }, - ); - } - get getUndefinedType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getUndefinedType", - function (): Type { - return owner.getIntrinsicType("getUndefinedType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getUndefinedType"); - }, - ); - } - get getNullType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNullType", - function (): Type { - return owner.getIntrinsicType("getNullType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getNullType"); - }, - ); - } - get getNeverType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNeverType", - function (): Type { - return owner.getIntrinsicType("getNeverType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getNeverType"); - }, - ); - } - get getUnknownType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getUnknownType", - function (): Type { - return owner.getIntrinsicType("getUnknownType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getUnknownType"); - }, - ); - } - get getBigIntType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBigIntType", - function (): Type { - return owner.getIntrinsicType("getBigIntType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getBigIntType"); - }, - ); - } - get getESSymbolType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getESSymbolType", - function (): Type { - return owner.getIntrinsicType("getESSymbolType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getESSymbolType"); - }, - ); - } - get getNonPrimitiveType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNonPrimitiveType", - function (): Type { - return owner.getIntrinsicType("getNonPrimitiveType"); - }, - function* (): Generator { - return yield* owner.getIntrinsicType.gen("getNonPrimitiveType"); - }, - ); - } - - get typeToTypeNode(): { - (type: Type, enclosingDeclaration?: Node, flags?: number): TypeNode | undefined; - gen(type: Type, enclosingDeclaration?: Node, flags?: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "typeToTypeNode", - function (type: Type, enclosingDeclaration?: Node, flags?: number): TypeNode | undefined { - const binaryData = owner.client.apiRequestBinary("typeToTypeNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (!binaryData) return undefined; - return decodeNode(binaryData) as TypeNode; - }, - function* (type: Type, enclosingDeclaration?: Node, flags?: number): Generator { - const binaryData = sourceFileResponseToUint8Array( - yield* apiRequest("typeToTypeNode", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }), - ); - if (!binaryData) return undefined; - return decodeNode(binaryData) as TypeNode; - }, - ); - } - - get signatureToSignatureDeclaration(): { - (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Node | undefined; - gen(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "signatureToSignatureDeclaration", - function (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Node | undefined { - const binaryData = owner.client.apiRequestBinary("signatureToSignatureDeclaration", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - kind, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (!binaryData) return undefined; - return decodeNode(binaryData) as Node; - }, - function* (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Generator { - const binaryData = sourceFileResponseToUint8Array( - yield* apiRequest("signatureToSignatureDeclaration", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - kind, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }), - ); - if (!binaryData) return undefined; - return decodeNode(binaryData) as Node; - }, - ); - } - - get typeToString(): { - (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; - gen(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "typeToString", - function (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string { - const result = owner.client.apiRequest("typeToString", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); - return result; - }, - function* (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Generator { - const result = yield* apiRequest("typeToString", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, - flags, - }); - if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); - return result; - }, - ); - } - - get isContextSensitive(): { - (node: Node): boolean; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isContextSensitive", - function (node: Node): boolean { - return owner.client.apiRequest("isContextSensitive", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - }, - function* (node: Node): Generator { - return yield* apiRequest("isContextSensitive", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - }, - ); - } - - get isArrayType(): { - (type: Type): boolean; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isArrayType", - function (type: Type): boolean { - return owner.client.apiRequest("isArrayType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - }, - function* (type: Type): Generator { - return yield* apiRequest("isArrayType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - }, - ); - } - - get isTupleType(): { - (type: Type): boolean; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isTupleType", - function (type: Type): boolean { - return type.isTupleType(); - }, - function* (type: Type): Generator { - return type.isTupleType(); - }, - ); - } - - get isTupleTypeTarget(): { - (type: Type): boolean; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isTupleTypeTarget", - function (type: Type): boolean { - return type.isTupleTypeTarget(); - }, - function* (type: Type): Generator { - return type.isTupleTypeTarget(); - }, - ); - } - - /** - * The following symbols are considered read-only: - * - Properties with a `readonly` modifier - * - Variables declared with `const` - * - Get accessors without matching set accessors - * - Enum members - * - `Object.defineProperty` assignments with `writable: false` or no setter - * - Unions and intersections of the above - */ - get isReadonlySymbol(): { - (symbol: Symbol): boolean; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isReadonlySymbol", - function (symbol: Symbol): boolean { - return owner.client.apiRequest("isReadonlySymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - function* (symbol: Symbol): Generator { - return yield* apiRequest("isReadonlySymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - ); - } - - /** Get the return type of a signature. Always returns a type. */ - get getReturnTypeOfSignature(): { - (signature: Signature): Type; - gen(signature: Signature): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReturnTypeOfSignature", - function (signature: Signature): Type { - return signature.getReturnType(); - }, - function* (signature: Signature): Generator { - return yield* signature.getReturnType.gen(); - }, - ); - } - - /** - * Get the rest type of a signature. Always returns a type; a signature with - * no rest parameter yields the `any` type. - */ - get getRestTypeOfSignature(): { - (signature: Signature): Type; - gen(signature: Signature): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getRestTypeOfSignature", - function (signature: Signature): Type { - const data = owner.client.apiRequest("getRestTypeOfSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - function* (signature: Signature): Generator { - const data = yield* apiRequest("getRestTypeOfSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - }); - return owner.objectRegistry.getOrCreateType(data); - }, - ); - } - - get getTypePredicateOfSignature(): { - (signature: Signature): TypePredicate | undefined; - gen(signature: Signature): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypePredicateOfSignature", - function (signature: Signature): TypePredicate | undefined { - const data = owner.client.apiRequest("getTypePredicateOfSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - }); - if (!data) return undefined; - return { - kind: data.kind, - parameterIndex: data.parameterIndex, - parameterName: data.parameterName, - type: data.type ? owner.objectRegistry.getOrCreateType(data.type) : undefined, - } as TypePredicate; - }, - function* (signature: Signature): Generator { - const data = yield* apiRequest("getTypePredicateOfSignature", { - snapshot: owner.snapshotId, - project: owner.project.id, - signature: signature.id, - }); - if (!data) return undefined; - return { - kind: data.kind, - parameterIndex: data.parameterIndex, - parameterName: data.parameterName, - type: data.type ? owner.objectRegistry.getOrCreateType(data.type) : undefined, - } as TypePredicate; - }, - ); - } - - /** - * Get the base types of a class or interface type. A type with no base types - * yields an empty array. - */ - get getBaseTypes(): { - (type: InterfaceType): readonly Type[]; - gen(type: InterfaceType): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBaseTypes", - function (type: InterfaceType): readonly Type[] { - return type.getBaseTypes() ?? []; - }, - function* (type: InterfaceType): Generator { - return (yield* type.getBaseTypes.gen()) ?? []; - }, - ); - } - - /** Get the apparent type of a type. Always returns a type. */ - get getApparentType(): { - (type: Type): Type; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getApparentType", - function (type: Type): Type { - return type.getApparentType(); - }, - function* (type: Type): Generator { - return yield* type.getApparentType.gen(); - }, - ); - } - - /** Get the reduced type of a type. Always returns a type. */ - get getReducedType(): { - (type: Type): Type; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReducedType", - function (type: Type): Type { - return type.getReducedType(); - }, - function* (type: Type): Generator { - return yield* type.getReducedType.gen(); - }, - ); - } - - get getPropertiesOfType(): { - (type: Type): readonly Symbol[]; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getPropertiesOfType", - function (type: Type): readonly Symbol[] { - return type.getProperties(); - }, - function* (type: Type): Generator { - return yield* type.getProperties.gen(); - }, - ); - } - - get getIndexInfosOfType(): { - (type: Type): readonly IndexInfo[]; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIndexInfosOfType", - function (type: Type): readonly IndexInfo[] { - return type.getIndexInfos(); - }, - function* (type: Type): Generator { - return yield* type.getIndexInfos.gen(); - }, - ); - } - - get getIndexInfoOfType(): { - (type: Type, kind: IndexKind): IndexInfo | undefined; - gen(type: Type, kind: IndexKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIndexInfoOfType", - function (type: Type, kind: IndexKind): IndexInfo | undefined { - const data = owner.client.apiRequest("getIndexInfoOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - kind, - }); - return data ? { - keyType: owner.objectRegistry.getOrCreateType(data.keyType), - valueType: owner.objectRegistry.getOrCreateType(data.valueType), - isReadonly: data.isReadonly ?? false, - declaration: data.declaration ? new NodeHandle(data.declaration, owner.project) : undefined, - } : undefined; - }, - function* (type: Type, kind: IndexKind): Generator { - const data = yield* apiRequest("getIndexInfoOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - kind, - }); - return data ? { - keyType: owner.objectRegistry.getOrCreateType(data.keyType), - valueType: owner.objectRegistry.getOrCreateType(data.valueType), - isReadonly: data.isReadonly ?? false, - declaration: data.declaration ? new NodeHandle(data.declaration, owner.project) : undefined, - } : undefined; - }, - ); - } - - get getIndexTypeOfType(): { - (type: Type, kind: IndexKind): Type | undefined; - gen(type: Type, kind: IndexKind): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIndexTypeOfType", - function (type: Type, kind: IndexKind): Type | undefined { - return kind === IndexKind.String ? type.getStringIndexType() : type.getNumberIndexType(); - }, - function* (type: Type, kind: IndexKind): Generator { - return kind === IndexKind.String ? (yield* type.getStringIndexType.gen()) : (yield* type.getNumberIndexType.gen()); - }, - ); - } - - get getTypeOfPropertyOfType(): { - (type: Type, propertyName: string): Type | undefined; - gen(type: Type, propertyName: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeOfPropertyOfType", - function (type: Type, propertyName: string): Type | undefined { - const data = owner.client.apiRequest("getTypeOfPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - name: propertyName, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - function* (type: Type, propertyName: string): Generator { - const data = yield* apiRequest("getTypeOfPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - name: propertyName, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - ); - } - - /** - * Get the constraint of a type parameter (the `T` in ``), or - * undefined if it has none. - */ - get getConstraintOfTypeParameter(): { - (type: TypeParameter): Type | undefined; - gen(type: TypeParameter): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConstraintOfTypeParameter", - function (type: TypeParameter): Type | undefined { - return type.getConstraint(); - }, - function* (type: TypeParameter): Generator { - return yield* type.getConstraint.gen(); - }, - ); - } - - get getDefaultFromTypeParameter(): { - (type: TypeParameter): Type | undefined; - gen(type: TypeParameter): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDefaultFromTypeParameter", - function (type: TypeParameter): Type | undefined { - return type.getDefault(); - }, - function* (type: TypeParameter): Generator { - return yield* type.getDefault.gen(); - }, - ); - } - - get getBaseConstraintOfType(): { - (type: Type): Type | undefined; - gen(type: Type): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBaseConstraintOfType", - function (type: Type): Type | undefined { - const data = owner.client.apiRequest("getBaseConstraintOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - function* (type: Type): Generator { - const data = yield* apiRequest("getBaseConstraintOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? owner.objectRegistry.getOrCreateType(data) : undefined; - }, - ); - } - - get getPropertyOfType(): { - (type: Type, name: string): Symbol | undefined; - gen(type: Type, name: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getPropertyOfType", - function (type: Type, name: string): Symbol | undefined { - const data = owner.client.apiRequest("getPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - name, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (type: Type, name: string): Generator { - const data = yield* apiRequest("getPropertyOfType", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - name, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - get getConstantValue(): { - (node: Node): string | number | undefined; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConstantValue", - function (node: Node): string | number | undefined { - const data = owner.client.apiRequest("getConstantValue", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { - return undefined; - } - if (data.isNumber && typeof data.value === "string") { - if (data.value === "+Infinity") { - return Infinity; - } - else if (data.value === "-Infinity") { - return -Infinity; - } - return NaN; - } - return data.value; - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getConstantValue", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { - return undefined; - } - if (data.isNumber && typeof data.value === "string") { - if (data.value === "+Infinity") { - return Infinity; - } - else if (data.value === "-Infinity") { - return -Infinity; - } - return NaN; - } - return data.value; - }, - ); - } - - /** Get the signature of a function-like declaration. Always returns a signature. */ - get getSignatureFromDeclaration(): { - (node: Node): Signature; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSignatureFromDeclaration", - function (node: Node): Signature { - const data = owner.client.apiRequest("getSignatureFromDeclaration", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateSignature(data); - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getSignatureFromDeclaration", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return owner.objectRegistry.getOrCreateSignature(data); - }, - ); - } - - get getExportSpecifierLocalTargetSymbol(): { - (node: Node): Symbol | undefined; - gen(node: Node): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExportSpecifierLocalTargetSymbol", - function (node: Node): Symbol | undefined { - const data = owner.client.apiRequest("getExportSpecifierLocalTargetSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (node: Node): Generator { - const data = yield* apiRequest("getExportSpecifierLocalTargetSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - location: getNodeId(node), - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - /** - * Follow all aliases to get the original symbol. Always returns a symbol; for - * an unresolved alias the checker yields the unknown symbol (use - * {@link Checker.isUnknownSymbol} to detect it). - */ - get getAliasedSymbol(): { - (symbol: Symbol): Symbol; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getAliasedSymbol", - function (symbol: Symbol): Symbol { - const data = owner.client.apiRequest("getAliasedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getAliasedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - ); - } - - /** - * Get the fully qualified name of a symbol, walking up its parent chain - * (e.g. `"/path/to/module".Namespace.Name`). - */ - get getFullyQualifiedName(): { - (symbol: Symbol): string; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getFullyQualifiedName", - function (symbol: Symbol): string { - return owner.client.apiRequest("getFullyQualifiedName", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - function* (symbol: Symbol): Generator { - return yield* apiRequest("getFullyQualifiedName", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - ); - } - - get getImmediateAliasedSymbol(): { - (symbol: Symbol): Symbol | undefined; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getImmediateAliasedSymbol", - function (symbol: Symbol): Symbol | undefined { - const data = owner.client.apiRequest("getImmediateAliasedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getImmediateAliasedSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - /** - * Get the target symbol if instantiated, or the provided symbol otherwise. - */ - get getTargetSymbol(): { - (symbol: Symbol): Symbol; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTargetSymbol", - function (symbol: Symbol): Symbol { - if (symbol.checkFlags & CheckFlags.Instantiated) { - const data = owner.client.apiRequest("getTargetSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - } - return symbol; - }, - function* (symbol: Symbol): Generator { - if (symbol.checkFlags & CheckFlags.Instantiated) { - const data = yield* apiRequest("getTargetSymbol", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - } - return symbol; - }, - ); - } - - get getExportSymbolOfSymbol(): { - (symbol: Symbol): Symbol; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExportSymbolOfSymbol", - function (symbol: Symbol): Symbol { - const data = owner.client.apiRequest("getExportSymbolOfSymbolForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getExportSymbolOfSymbolForChecker", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return owner.objectRegistry.getOrCreateSymbol(data); - }, - ); - } - - /** - * Fetch (once, then cache) the handle ids of the per-checker singleton - * symbols (unknown, undefined, arguments). These ids are stable for the life - * of the project's checker, so identity checks against them are local after - * the first call. - */ - private get getWellKnownSymbols(): { - (): { unknown: number; undefined: number; arguments: number; }; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getWellKnownSymbols", - function (): { unknown: number; undefined: number; arguments: number; } { - return owner.wellKnownSymbols ??= owner.client.apiRequest("getWellKnownSymbols", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - }, - function* (): Generator { - return owner.wellKnownSymbols ??= yield* apiRequest("getWellKnownSymbols", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - }, - ); - } - - /** - * Returns `true` if the symbol is the checker's "unknown" symbol (e.g. the - * result of {@link Checker.getAliasedSymbol} on an unresolved alias). - */ - get isUnknownSymbol(): { - (symbol: Symbol): boolean; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isUnknownSymbol", - function (symbol: Symbol): boolean { - return symbol.id === (owner.getWellKnownSymbols()).unknown; - }, - function* (symbol: Symbol): Generator { - return symbol.id === (yield* owner.getWellKnownSymbols.gen()).unknown; - }, - ); - } - - /** - * Returns `true` if the symbol is the checker's "undefined" symbol. - */ - get isUndefinedSymbol(): { - (symbol: Symbol): boolean; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isUndefinedSymbol", - function (symbol: Symbol): boolean { - return symbol.id === (owner.getWellKnownSymbols()).undefined; - }, - function* (symbol: Symbol): Generator { - return symbol.id === (yield* owner.getWellKnownSymbols.gen()).undefined; - }, - ); - } - - /** - * Returns `true` if the symbol is the checker's "arguments" symbol. - */ - get isArgumentsSymbol(): { - (symbol: Symbol): boolean; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isArgumentsSymbol", - function (symbol: Symbol): boolean { - return symbol.id === (owner.getWellKnownSymbols()).arguments; - }, - function* (symbol: Symbol): Generator { - return symbol.id === (yield* owner.getWellKnownSymbols.gen()).arguments; - }, - ); - } - - /** - * Fetch (once, then cache) the handle id of the per-checker unknown - * signature. This id is stable for the life of the project's checker, so - * identity checks against it are local after the first call. - */ - private get getWellKnownSignatures(): { - (): { unknown: number; }; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getWellKnownSignatures", - function (): { unknown: number; } { - return owner.wellKnownSignatures ??= owner.client.apiRequest("getWellKnownSignatures", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - }, - function* (): Generator { - return owner.wellKnownSignatures ??= yield* apiRequest("getWellKnownSignatures", { - snapshot: owner.snapshotId, - project: owner.project.id, - }); - }, - ); - } - - /** - * Returns `true` if the signature is the checker's "unknown" signature (e.g. - * the result of {@link Checker.getResolvedSignature} on a call that cannot be - * resolved). - */ - get isUnknownSignature(): { - (signature: Signature): boolean; - gen(signature: Signature): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "isUnknownSignature", - function (signature: Signature): boolean { - return signature.id === (owner.getWellKnownSignatures()).unknown; - }, - function* (signature: Signature): Generator { - return signature.id === (yield* owner.getWellKnownSignatures.gen()).unknown; - }, - ); - } - - get getExportsOfModule(): { - (symbol: Symbol): readonly Symbol[]; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExportsOfModule", - function (symbol: Symbol): readonly Symbol[] { - const data = owner.client.apiRequest("getExportsOfModule", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getExportsOfModule", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; - }, - ); - } - - get getMemberInModuleExports(): { - (symbol: Symbol, name: string): Symbol | undefined; - gen(symbol: Symbol, name: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getMemberInModuleExports", - function (symbol: Symbol, name: string): Symbol | undefined { - const data = owner.client.apiRequest("getMemberInModuleExports", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - name, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - function* (symbol: Symbol, name: string): Generator { - const data = yield* apiRequest("getMemberInModuleExports", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - name, - }); - return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; - }, - ); - } - - get getJsDocTagsOfSymbol(): { - (symbol: Symbol): readonly JSDocTagInfo[]; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getJsDocTagsOfSymbol", - function (symbol: Symbol): readonly JSDocTagInfo[] { - const data = owner.client.apiRequest("getJsDocTags", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ?? []; - }, - function* (symbol: Symbol): Generator { - const data = yield* apiRequest("getJsDocTags", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - return data ?? []; - }, - ); - } - - get getDocumentationCommentOfSymbol(): { - (symbol: Symbol): string; - gen(symbol: Symbol): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDocumentationCommentOfSymbol", - function (symbol: Symbol): string { - return owner.client.apiRequest("getDocumentationComment", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - function* (symbol: Symbol): Generator { - return yield* apiRequest("getDocumentationComment", { - snapshot: owner.snapshotId, - project: owner.project.id, - symbol: symbol.reference, - }); - }, - ); - } - - /** - * Get the type arguments of a type reference (e.g. the `string` in `Array`). - */ - get getTypeArguments(): { - (type: TypeReference): readonly Type[]; - gen(type: TypeReference): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeArguments", - function (type: TypeReference): readonly Type[] { - const data = owner.client.apiRequest("getTypeArguments", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateType(d)) : []; - }, - function* (type: TypeReference): Generator { - const data = yield* apiRequest("getTypeArguments", { - snapshot: owner.snapshotId, - project: owner.project.id, - type: type.id, - }); - return data ? data.map(d => owner.objectRegistry.getOrCreateType(d)) : []; - }, - ); - } -} - -export interface PrintNodeOptions { - preserveSourceNewlines?: boolean | undefined; - neverAsciiEscape?: boolean | undefined; - terminateUnterminatedLiterals?: boolean | undefined; -} - -export class Printer { - private client: Client; - - constructor(client: Client) { - this.client = client; - } - - get printNode(): { - (node: Node, options?: PrintNodeOptions): string; - gen(node: Node, options?: PrintNodeOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "printNode", - function (node: Node, options: PrintNodeOptions = {}): string { - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return owner.client.apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - }, - function* (node: Node, options: PrintNodeOptions = {}): Generator { - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return yield* apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - }, - ); - } - - get printFile(): { - (sourceFile: SourceFile, options?: PrintNodeOptions): string; - gen(sourceFile: SourceFile, options?: PrintNodeOptions): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "printFile", - function (sourceFile: SourceFile, options: PrintNodeOptions = {}): string { - const encoded = encodeNode(sourceFile); - const base64 = uint8ArrayToBase64(encoded); - return owner.client.apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - }, - function* (sourceFile: SourceFile, options: PrintNodeOptions = {}): Generator { - const encoded = encodeNode(sourceFile); - const base64 = uint8ArrayToBase64(encoded); - return yield* apiRequest("printNode", { - data: base64, - preserveSourceNewlines: options.preserveSourceNewlines, - neverAsciiEscape: options.neverAsciiEscape, - terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, - }); - }, - ); - } -} - -export class SnapshotInternalAPI { - private snapshotId: number; - private client: Client; - - constructor(snapshotId: number, client: Client) { - this.snapshotId = snapshotId; - this.client = client; - } - - /** - * Format a synthesized node with the correct indentation for insertion at a - * specific position in an existing source file. - * - * @param node The synthesized AST node to format. - * @param file The target file where the node will be inserted. - * @param position The UTF-16 code-unit offset in the target file for insertion. - * @returns The formatted text of the node, indented for the insertion position. - */ - get formatNodeForInsertion(): { - (node: Node, file: DocumentIdentifier, position: number): string; - gen(node: Node, file: DocumentIdentifier, position: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "formatNodeForInsertion", - function (node: Node, file: DocumentIdentifier, position: number): string { - const data = owner.client.apiRequest("getDefaultProjectForFile", { - snapshot: owner.snapshotId, - file, - }); - if (!data) { - throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); - } - - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return owner.client.apiRequest("formatNodeForInsertion", { - snapshot: owner.snapshotId, - project: data.id, - file, - position, - data: base64, - }); - }, - function* (node: Node, file: DocumentIdentifier, position: number): Generator { - const data = yield* apiRequest("getDefaultProjectForFile", { - snapshot: owner.snapshotId, - file, - }); - if (!data) { - throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); - } - - const encoded = encodeNode(node); - const base64 = uint8ArrayToBase64(encoded); - return yield* apiRequest("formatNodeForInsertion", { - snapshot: owner.snapshotId, - project: data.id, - file, - position, - data: base64, - }); - }, - ); - } -} - -export class NodeHandle { - /** - * The project this handle was produced in, used as the default for {@link resolve}. - * Node handles are only meaningful within a project's program, so the producing project - * is remembered so callers don't have to pass it explicitly. - */ - private readonly canonicalProject: Project | undefined; - /** The owning source file of a file-owned symbol's declaration. */ - private readonly fileOwner: SourceFileOwner | undefined; - readonly index: number; - readonly kind: SyntaxKind; - readonly path: PathKey; - - constructor(handle: string, canonicalProject: Project | undefined, fileOwner?: SourceFileOwner) { - const parsed = parseNodeHandleFromCompiler(handle); - this.index = parsed.index; - this.kind = parsed.kind; - this.path = parsed.path; - this.canonicalProject = canonicalProject; - this.fileOwner = fileOwner; - } - - /** - * Resolve this handle to the actual AST node by fetching the source file from a project - * and looking up the node by index. If no project is passed, the project that produced - * the handle is used. Declarations of file-owned symbols identify an exact source file and - * resolve through it, independently of any project. - */ - get resolve(): { - (project?: Project | undefined): T | undefined; - gen(project?: Project | undefined): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "resolve", - function (project: Project | undefined = owner.canonicalProject): T | undefined { - if (owner.fileOwner) { - const sourceFile = owner.fileOwner.record.file ?? owner.fetchOwnerFile(owner.fileOwner); - return sourceFile.getOrCreateNodeAtIndex(owner.index) as T | undefined; - } - if (!project) throw new Error(`Node handle for '${owner.path}' has no project context`); - const sourceFile = project.program.getSourceFileByPath(owner.path); - if (!sourceFile) { - return undefined; - } - return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(owner.index) as T | undefined; - }, - function* (project: Project | undefined = owner.canonicalProject): Generator { - if (owner.fileOwner) { - const sourceFile = owner.fileOwner.record.file ?? (yield* owner.fetchOwnerFile.gen(owner.fileOwner)); - return sourceFile.getOrCreateNodeAtIndex(owner.index) as T | undefined; - } - if (!project) throw new Error(`Node handle for '${owner.path}' has no project context`); - const sourceFile = yield* project.program.getSourceFileByPath.gen(owner.path); - if (!sourceFile) { - return undefined; - } - return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(owner.index) as T | undefined; - }, - ); - } - - private get fetchOwnerFile(): { - (fileOwner: SourceFileOwner): RemoteSourceFile; - gen(fileOwner: SourceFileOwner): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchOwnerFile", - function (fileOwner: SourceFileOwner): RemoteSourceFile { - const data = fileOwner.api.client.apiRequestBinary("getCachedSourceFile", { file: fileOwner.record.descriptor }); - if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); - return fileOwner.api.sourceFileCache.attachFile( - fileOwner.record, - new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), - ); - }, - function* (fileOwner: SourceFileOwner): Generator { - const data = sourceFileResponseToUint8Array(yield* apiRequest("getCachedSourceFile", { file: fileOwner.record.descriptor })); - if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); - return fileOwner.api.sourceFileCache.attachFile( - fileOwner.record, - new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), - ); - }, - ); - } -} - -/** A symbol definition paired with all of its reference nodes. */ -export interface ReferencedSymbolEntry { - /** The node handle for the symbol's definition. */ - definition: NodeHandle; - /** The resolved symbol for the definition, if available. */ - symbol?: Symbol | undefined; - /** The node handles for each reference to the symbol. */ - references: NodeHandle[]; -} - -/** A single usage of a signature, pairing the reference name with its call expression (if any). */ -export interface SignatureUsage { - /** The node handle for the name reference. */ - name: NodeHandle; - /** The node handle for the call expression, if the reference is invoked. */ - call?: NodeHandle | undefined; -} - -/** A cached source-file record and its owning API. */ -interface SourceFileOwner { - readonly record: CachedSourceFile; - readonly api: API; -} - -type SymbolStorage = - | { readonly kind: typeof SymbolOwnerKind.File; readonly owner: SourceFileOwner; } - | { readonly kind: typeof SymbolOwnerKind.Snapshot; readonly registry: ProjectObjectRegistry; }; - -export class Symbol { - private readonly storage: SymbolStorage; - - get id(): number { - return this.reference.id; - } - /** The escaped (`__String`) name, used as the key in member/export tables. */ - readonly escapedName: __String; - /** The display name (escaped underscores removed). */ - readonly name: string; - readonly flags: SymbolFlags; - readonly checkFlags: CheckFlags; - /** @internal */ - readonly reference: SymbolReference; - readonly declarations: readonly NodeHandle[]; - readonly valueDeclaration: NodeHandle | undefined; - private readonly parent!: CompactSymbolReference; - private readonly exportSymbol!: CompactSymbolReference; - private membersCache: ReadonlyMap<__String, Symbol> | undefined; - private exportsCache: ReadonlyMap<__String, Symbol> | undefined; - - constructor(data: SymbolResponse, storage: SymbolStorage) { - if (data.reference.kind !== storage.kind) throw new Error(`Symbol ${data.reference.id} has mismatched ownership and storage`); - this.storage = storage; - this.reference = data.reference; - - this.escapedName = data.name as __String; - this.name = unescapeLeadingUnderscores(data.name as __String); - this.flags = data.flags; - this.checkFlags = data.checkFlags; - // A file-owned symbol has no canonical project; its declarations resolve through its file. - const project = storage.kind === SymbolOwnerKind.Snapshot ? storage.registry.project : undefined; - const fileOwner = storage.kind === SymbolOwnerKind.File ? storage.owner : undefined; - this.declarations = (data.declarations ?? []).map(handle => new NodeHandle(handle, project, fileOwner)); - this.valueDeclaration = data.valueDeclaration - ? new NodeHandle(data.valueDeclaration, project, fileOwner) - : undefined; - - if (data.parent !== undefined) this.parent = data.parent; - if (data.exportSymbol !== undefined) this.exportSymbol = data.exportSymbol; - } - - get getParent(): { - (): Symbol | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getParent", - function (): Symbol | undefined { - if (!owner.parent) return undefined; - return owner.fetchSymbol("getParentOfSymbol", owner.parent); - }, - function* (): Generator { - if (!owner.parent) return undefined; - return yield* owner.fetchSymbol.gen("getParentOfSymbol", owner.parent); - }, - ); - } - - /** - * Get this symbol's members keyed by escaped name. The result is cached on - * the symbol, so repeated calls do not round-trip to the server. - */ - get getMembers(): { - (): ReadonlyMap<__String, Symbol>; - gen(): Generator, ProtocolResponse["result"]>; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getMembers", - function (): ReadonlyMap<__String, Symbol> { - return owner.membersCache ??= owner.fetchSymbolTable("getMembersOfSymbol"); - }, - function* (): Generator, ProtocolResponse["result"]> { - return owner.membersCache ??= yield* owner.fetchSymbolTable.gen("getMembersOfSymbol"); - }, - ); - } - - /** - * Get this symbol's exports keyed by escaped name. The result is cached on - * the symbol, so repeated calls do not round-trip to the server. - */ - get getExports(): { - (): ReadonlyMap<__String, Symbol>; - gen(): Generator, ProtocolResponse["result"]>; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExports", - function (): ReadonlyMap<__String, Symbol> { - return owner.exportsCache ??= owner.fetchSymbolTable("getExportsOfSymbol"); - }, - function* (): Generator, ProtocolResponse["result"]> { - return owner.exportsCache ??= yield* owner.fetchSymbolTable.gen("getExportsOfSymbol"); - }, - ); - } - - private get fetchSymbolTable(): { - (method: SymbolsPropertyMethod): ReadonlyMap<__String, Symbol>; - gen(method: SymbolsPropertyMethod): Generator, ProtocolResponse["result"]>; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbolTable", - function (method: SymbolsPropertyMethod): ReadonlyMap<__String, Symbol> { - const symbols = owner.fetchSymbols(method); - const table = new Map<__String, Symbol>(); - for (const symbol of symbols) { - table.set(symbol.escapedName, symbol); - } - return table; - }, - function* (method: SymbolsPropertyMethod): Generator, ProtocolResponse["result"]> { - const symbols = yield* owner.fetchSymbols.gen(method); - const table = new Map<__String, Symbol>(); - for (const symbol of symbols) { - table.set(symbol.escapedName, symbol); - } - return table; - }, - ); - } - - get getExportSymbol(): { - (): Symbol; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExportSymbol", - function (): Symbol { - if (!owner.exportSymbol) return owner; - return owner.fetchSymbol("getExportSymbolOfSymbol", owner.exportSymbol); - }, - function* (): Generator { - if (!owner.exportSymbol) return owner; - return yield* owner.fetchSymbol.gen("getExportSymbolOfSymbol", owner.exportSymbol); - }, - ); - } - - get getJsDocTags(): { - (checker: Checker): readonly JSDocTagInfo[]; - gen(checker: Checker): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getJsDocTags", - function (checker: Checker): readonly JSDocTagInfo[] { - return checker.getJsDocTagsOfSymbol(owner); - }, - function* (checker: Checker): Generator { - return yield* checker.getJsDocTagsOfSymbol.gen(owner); - }, - ); - } - - get getDocumentationComment(): { - (checker: Checker): string; - gen(checker: Checker): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDocumentationComment", - function (checker: Checker): string { - return checker.getDocumentationCommentOfSymbol(owner); - }, - function* (checker: Checker): Generator { - return yield* checker.getDocumentationCommentOfSymbol.gen(owner); - }, - ); - } - - private get fetchSymbol(): { - (method: SymbolPropertyMethod, reference: CompactSymbolReference): Symbol; - gen(method: SymbolPropertyMethod, reference: CompactSymbolReference): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbol", - function (method: SymbolPropertyMethod, reference: CompactSymbolReference): Symbol { - if (owner.storage.kind === SymbolOwnerKind.Snapshot) { - return owner.storage.registry.fetchSymbol(owner, method, reference); - } - const fileOwner = owner.storage.owner; - // A file-owned symbol's relationships are always owned by the same file. - const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; - if (cached) return cached; - const data = fileOwner.api.client.apiRequest(method, { symbol: owner.reference }); - if (!data) throw new Error(`${method} returned null symbol for Symbol ${owner.id}`); - return owner.internFileSymbol(fileOwner, data); - }, - function* (method: SymbolPropertyMethod, reference: CompactSymbolReference): Generator { - if (owner.storage.kind === SymbolOwnerKind.Snapshot) { - return yield* owner.storage.registry.fetchSymbol.gen(owner, method, reference); - } - const fileOwner = owner.storage.owner; - // A file-owned symbol's relationships are always owned by the same file. - const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; - if (cached) return cached; - const data = yield* apiRequest(method, { symbol: owner.reference }); - if (!data) throw new Error(`${method} returned null symbol for Symbol ${owner.id}`); - return owner.internFileSymbol(fileOwner, data); - }, - ); - } - - private get fetchSymbols(): { - (method: SymbolsPropertyMethod): readonly Symbol[]; - gen(method: SymbolsPropertyMethod): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "fetchSymbols", - function (method: SymbolsPropertyMethod): readonly Symbol[] { - if (owner.storage.kind === SymbolOwnerKind.Snapshot) { - return owner.storage.registry.fetchSymbols(owner, method); - } - const fileOwner = owner.storage.owner; - const data = fileOwner.api.client.apiRequest(method, { symbol: owner.reference }); - return data?.map(symbol => owner.internFileSymbol(fileOwner, symbol)) ?? []; - }, - function* (method: SymbolsPropertyMethod): Generator { - if (owner.storage.kind === SymbolOwnerKind.Snapshot) { - return yield* owner.storage.registry.fetchSymbols.gen(owner, method); - } - const fileOwner = owner.storage.owner; - const data = yield* apiRequest(method, { symbol: owner.reference }); - return data?.map(symbol => owner.internFileSymbol(fileOwner, symbol)) ?? []; - }, - ); - } - - private internFileSymbol(fileOwner: SourceFileOwner, data: ProtocolSymbolResponse): Symbol { - validateSymbolResponse(data); - const reference = data.reference; - if (reference.kind !== SymbolOwnerKind.File) throw new Error(`Symbol ${reference.id} is not file-owned`); - return fileOwner.api.sourceFileCache.getOrCreateSymbol(fileOwner.record, reference.file, reference.id, () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner })); - } -} - -class TypeObject implements Type { - private objectRegistry: ProjectObjectRegistry; - - // Fields included in TypeResponse. References to other objects are stored as IDs - // and resolved lazily via the object registry. - readonly id: number; - readonly flags: TypeFlags; - readonly objectFlags!: ObjectFlags; - readonly symbol!: CompactSymbolReference; - readonly value!: string | number | boolean | bigint; - readonly intrinsicName!: string; - readonly isThisType!: boolean; - readonly freshType!: number; - readonly regularType!: number; - readonly target!: number; - private readonly tupleType: boolean; - readonly typeParameters!: readonly number[]; - readonly outerTypeParameters!: readonly number[]; - readonly localTypeParameters!: readonly number[]; - readonly thisType!: number; - readonly aliasTypeArguments!: readonly number[]; - readonly aliasSymbol!: CompactSymbolReference; - readonly elementFlags!: readonly ElementFlags[]; - readonly fixedLength!: number; - readonly readonly!: boolean; - readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; - readonly texts!: readonly string[]; - readonly objectType!: number; - readonly indexType!: number; - readonly checkType!: number; - readonly extendsType!: number; - readonly baseType!: number; - readonly substConstraint!: number; - readonly typeParameter!: number; - readonly constraintType!: number; - readonly nameType!: number; - readonly templateType!: number; - - // Cached results of lazy fetches, not included in TypeResponse - // (typically because they require some amount of computation or - // could cause an arbitrarily large number of types to be cached - // on the server for ID-based lookup). `false` is a sentinel value - // indicating a fetch has not yet occurred. - private trueType: number | false; - private falseType: number | false; - private constraint: number | false; - private default: number | false; - private nonNullableType: number | false; - private apparentType: number | false; - private reducedType: number | false; - private properties: readonly Symbol[] | false; - private apparentProperties: readonly Symbol[] | false; - private callSignatures: readonly Signature[] | false; - private constructSignatures: readonly Signature[] | false; - private indexInfos: readonly IndexInfo[] | false; - private baseTypes: readonly Type[] | false; - private types: readonly Type[] | false; - private stringIndexType: Type | undefined | false; - private numberIndexType: Type | undefined | false; - - constructor(data: TypeResponse, objectRegistry: ProjectObjectRegistry) { - this.objectRegistry = objectRegistry; - - this.id = data.id; - this.flags = data.flags; - if (data.objectFlags !== undefined) this.objectFlags = data.objectFlags; - if (data.symbol !== undefined) this.symbol = data.symbol; - if (data.value != null) { - // BigInt literal values are serialized as decimal strings (e.g. "-123") because - // JSON cannot represent bigint. Decode them back into a real bigint here. - const value = data.value as string | number | boolean; - if (data.flags & TypeFlags.BigIntLiteral) { - this.value = BigInt(value as string); - } - // JSON cannot represent infinities, so the API serializes them as strings. - else if (data.flags & TypeFlags.NumberLiteral && typeof value === "string") { - if (value === "+Infinity") { - this.value = Infinity; - } - else if (value === "-Infinity") { - this.value = -Infinity; - } - else { - this.value = NaN; - } - } - else { - this.value = value; - } - } - if (data.intrinsicName !== undefined) this.intrinsicName = data.intrinsicName; - if (data.isThisType !== undefined) this.isThisType = data.isThisType; - if (data.freshType !== undefined) this.freshType = data.freshType; - if (data.regularType !== undefined) this.regularType = data.regularType; - if (data.target !== undefined) this.target = data.target; - this.tupleType = data.isTupleType ?? false; - this.typeParameters = data.typeParameters ?? []; - this.outerTypeParameters = data.outerTypeParameters ?? []; - this.localTypeParameters = data.localTypeParameters ?? []; - if (data.thisType !== undefined) this.thisType = data.thisType; - this.aliasTypeArguments = data.aliasTypeArguments ?? []; - if (data.aliasSymbol !== undefined) this.aliasSymbol = data.aliasSymbol; - if (data.fixedLength !== undefined) { - this.elementFlags = data.elementFlags ?? []; - this.fixedLength = data.fixedLength; - } - if (data.readonly !== undefined) this.readonly = data.readonly; - if (data.labeledElementDeclarations !== undefined) { - this.labeledElementDeclarations = data.labeledElementDeclarations.map(handle => handle ? objectRegistry.createNodeHandle(handle) : undefined); - } - if (data.texts !== undefined) this.texts = data.texts; - if (data.objectType !== undefined) this.objectType = data.objectType; - if (data.indexType !== undefined) this.indexType = data.indexType; - if (data.checkType !== undefined) this.checkType = data.checkType; - if (data.extendsType !== undefined) this.extendsType = data.extendsType; - if (data.baseType !== undefined) this.baseType = data.baseType; - if (data.substConstraint !== undefined) this.substConstraint = data.substConstraint; - if (data.typeParameter !== undefined) this.typeParameter = data.typeParameter; - if (data.constraintType !== undefined) this.constraintType = data.constraintType; - if (data.nameType !== undefined) this.nameType = data.nameType; - if (data.templateType !== undefined) this.templateType = data.templateType; - - this.trueType = false; - this.falseType = false; - this.constraint = false; - this.default = false; - this.nonNullableType = false; - this.apparentType = false; - this.reducedType = false; - this.properties = false; - this.apparentProperties = false; - this.callSignatures = false; - this.constructSignatures = false; - this.indexInfos = false; - this.baseTypes = false; - this.types = false; - this.stringIndexType = false; - this.numberIndexType = false; - } - - get getSymbol(): { - (): Symbol | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getSymbol", - function (): Symbol | undefined { - return owner.objectRegistry.fetchSymbol(owner, "getSymbolOfType", owner.symbol); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getSymbolOfType", owner.symbol); - }, - ); - } - - get getProperties(): { - (): readonly Symbol[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getProperties", - function (): readonly Symbol[] { - if (owner.properties === false) { - owner.properties = owner.objectRegistry.fetchPropertiesOfType(owner); - } - return owner.properties; - }, - function* (): Generator { - if (owner.properties === false) { - owner.properties = yield* owner.objectRegistry.fetchPropertiesOfType.gen(owner); - } - return owner.properties; - }, - ); - } - - get getProperty(): { - (propertyName: string): Symbol | undefined; - gen(propertyName: string): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getProperty", - function (propertyName: string): Symbol | undefined { - return owner.objectRegistry.fetchPropertyOfType(owner, propertyName); - }, - function* (propertyName: string): Generator { - return yield* owner.objectRegistry.fetchPropertyOfType.gen(owner, propertyName); - }, - ); - } - - get getApparentProperties(): { - (): readonly Symbol[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getApparentProperties", - function (): readonly Symbol[] { - if (owner.apparentProperties === false) { - owner.apparentProperties = owner.objectRegistry.fetchApparentPropertiesOfType(owner); - } - return owner.apparentProperties; - }, - function* (): Generator { - if (owner.apparentProperties === false) { - owner.apparentProperties = yield* owner.objectRegistry.fetchApparentPropertiesOfType.gen(owner); - } - return owner.apparentProperties; - }, - ); - } - - get getCallSignatures(): { - (): readonly Signature[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getCallSignatures", - function (): readonly Signature[] { - if (owner.callSignatures === false) { - owner.callSignatures = owner.objectRegistry.fetchSignaturesOfType(owner, SignatureKind.Call); - } - return owner.callSignatures; - }, - function* (): Generator { - if (owner.callSignatures === false) { - owner.callSignatures = yield* owner.objectRegistry.fetchSignaturesOfType.gen(owner, SignatureKind.Call); - } - return owner.callSignatures; - }, - ); - } - - get getConstructSignatures(): { - (): readonly Signature[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConstructSignatures", - function (): readonly Signature[] { - if (owner.constructSignatures === false) { - owner.constructSignatures = owner.objectRegistry.fetchSignaturesOfType(owner, SignatureKind.Construct); - } - return owner.constructSignatures; - }, - function* (): Generator { - if (owner.constructSignatures === false) { - owner.constructSignatures = yield* owner.objectRegistry.fetchSignaturesOfType.gen(owner, SignatureKind.Construct); - } - return owner.constructSignatures; - }, - ); - } - - get getNonNullableType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNonNullableType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getNonNullableType", owner.nonNullableType); - owner.nonNullableType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getNonNullableType", owner.nonNullableType); - owner.nonNullableType = result.id; - return result; - }, - ); - } - - get getStringIndexType(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getStringIndexType", - function (): Type | undefined { - if (owner.stringIndexType === false) { - owner.stringIndexType = owner.getStringIndexTypeWorker(); - } - return owner.stringIndexType; - }, - function* (): Generator { - if (owner.stringIndexType === false) { - owner.stringIndexType = yield* owner.getStringIndexTypeWorker.gen(); - } - return owner.stringIndexType; - }, - ); - } - - private get getStringIndexTypeWorker(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getStringIndexTypeWorker", - function (): Type | undefined { - const infos = owner.getIndexInfos(); - return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; - }, - function* (): Generator { - const infos = yield* owner.getIndexInfos.gen(); - return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; - }, - ); - } - - get getNumberIndexType(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNumberIndexType", - function (): Type | undefined { - if (owner.numberIndexType === false) { - owner.numberIndexType = owner.getNumberIndexTypeWorker(); - } - return owner.numberIndexType; - }, - function* (): Generator { - if (owner.numberIndexType === false) { - owner.numberIndexType = yield* owner.getNumberIndexTypeWorker.gen(); - } - return owner.numberIndexType; - }, - ); - } - - private get getNumberIndexTypeWorker(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNumberIndexTypeWorker", - function (): Type | undefined { - const infos = owner.getIndexInfos(); - return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; - }, - function* (): Generator { - const infos = yield* owner.getIndexInfos.gen(); - return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; - }, - ); - } - - get getApparentType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getApparentType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getApparentType", owner.apparentType); - owner.apparentType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getApparentType", owner.apparentType); - owner.apparentType = result.id; - return result; - }, - ); - } - - get getReducedType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReducedType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getReducedType", owner.reducedType); - owner.reducedType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getReducedType", owner.reducedType); - owner.reducedType = result.id; - return result; - }, - ); - } - - get getIndexInfos(): { - (): readonly IndexInfo[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIndexInfos", - function (): readonly IndexInfo[] { - if (owner.indexInfos === false) { - owner.indexInfos = owner.objectRegistry.fetchIndexInfosOfType(owner); - } - return owner.indexInfos; - }, - function* (): Generator { - if (owner.indexInfos === false) { - owner.indexInfos = yield* owner.objectRegistry.fetchIndexInfosOfType.gen(owner); - } - return owner.indexInfos; - }, - ); - } - - get getAliasSymbol(): { - (): Symbol | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getAliasSymbol", - function (): Symbol | undefined { - return owner.objectRegistry.fetchSymbol(owner, "getAliasSymbolOfType", owner.aliasSymbol); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getAliasSymbolOfType", owner.aliasSymbol); - }, - ); - } - - get getTarget(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTarget", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getTargetOfType", owner.target); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getTargetOfType", owner.target); - }, - ); - } - - get getFreshType(): { - (): FreshableType | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getFreshType", - function (): FreshableType | undefined { - return owner.objectRegistry.fetchOptionalType(owner, "getFreshTypeOfType", owner.freshType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getFreshTypeOfType", owner.freshType); - }, - ); - } - - get getRegularType(): { - (): FreshableType | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getRegularType", - function (): FreshableType | undefined { - return owner.objectRegistry.fetchOptionalType(owner, "getRegularTypeOfType", owner.regularType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getRegularTypeOfType", owner.regularType); - }, - ); - } - - get getTypes(): { - (): readonly Type[] | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypes", - function (): readonly Type[] | undefined { - // Only union, intersection, and template literal types have constituent - // types; any other kind has none, so return undefined rather than sending - // a request the server cannot satisfy. - if (!(owner.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { - return undefined; - } - if (owner.types === false) { - owner.types = owner.objectRegistry.fetchTypes(owner, "getTypesOfType"); - } - return owner.types; - }, - function* (): Generator { - // Only union, intersection, and template literal types have constituent - // types; any other kind has none, so return undefined rather than sending - // a request the server cannot satisfy. - if (!(owner.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { - return undefined; - } - if (owner.types === false) { - owner.types = yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypesOfType"); - } - return owner.types; - }, - ); - } - - get getTypeParameters(): { - (): readonly TypeParameter[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeParameters", - function (): readonly TypeParameter[] { - return owner.objectRegistry.fetchTypes(owner, "getTypeParametersOfType", owner.typeParameters) as readonly TypeParameter[]; - }, - function* (): Generator { - return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypeParametersOfType", owner.typeParameters)) as readonly TypeParameter[]; - }, - ); - } - - get getOuterTypeParameters(): { - (): readonly TypeParameter[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getOuterTypeParameters", - function (): readonly TypeParameter[] { - return owner.objectRegistry.fetchTypes(owner, "getOuterTypeParametersOfType", owner.outerTypeParameters) as readonly TypeParameter[]; - }, - function* (): Generator { - return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getOuterTypeParametersOfType", owner.outerTypeParameters)) as readonly TypeParameter[]; - }, - ); - } - - get getLocalTypeParameters(): { - (): readonly TypeParameter[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getLocalTypeParameters", - function (): readonly TypeParameter[] { - return owner.objectRegistry.fetchTypes(owner, "getLocalTypeParametersOfType", owner.localTypeParameters) as readonly TypeParameter[]; - }, - function* (): Generator { - return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getLocalTypeParametersOfType", owner.localTypeParameters)) as readonly TypeParameter[]; - }, - ); - } - - get getThisType(): { - (): TypeParameter | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getThisType", - function (): TypeParameter | undefined { - return owner.objectRegistry.fetchOptionalType(owner, "getThisTypeOfType", owner.thisType) as TypeParameter | undefined; - }, - function* (): Generator { - return (yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getThisTypeOfType", owner.thisType)) as TypeParameter | undefined; - }, - ); - } - - get getAliasTypeArguments(): { - (): readonly Type[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getAliasTypeArguments", - function (): readonly Type[] { - return owner.objectRegistry.fetchTypes(owner, "getAliasTypeArgumentsOfType", owner.aliasTypeArguments); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchTypes.gen(owner, "getAliasTypeArgumentsOfType", owner.aliasTypeArguments); - }, - ); - } - - get getTypeParameter(): { - (): TypeParameter; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeParameter", - function (): TypeParameter { - return owner.objectRegistry.fetchType(owner, "getTypeParameterOfMappedType", owner.typeParameter); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getTypeParameterOfMappedType", owner.typeParameter); - }, - ); - } - - get getConstraintType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConstraintType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getConstraintTypeOfMappedType", owner.constraintType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getConstraintTypeOfMappedType", owner.constraintType); - }, - ); - } - - get getNameType(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getNameType", - function (): Type | undefined { - return owner.objectRegistry.fetchOptionalType(owner, "getNameTypeOfMappedType", owner.nameType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getNameTypeOfMappedType", owner.nameType); - }, - ); - } - - get getTemplateType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTemplateType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getTemplateTypeOfMappedType", owner.templateType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getTemplateTypeOfMappedType", owner.templateType); - }, - ); - } - - get getObjectType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getObjectType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getObjectTypeOfType", owner.objectType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getObjectTypeOfType", owner.objectType); - }, - ); - } - - get getIndexType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getIndexType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getIndexTypeOfType", owner.indexType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getIndexTypeOfType", owner.indexType); - }, - ); - } - - get getCheckType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getCheckType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getCheckTypeOfType", owner.checkType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getCheckTypeOfType", owner.checkType); - }, - ); - } - - get getExtendsType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getExtendsType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getExtendsTypeOfType", owner.extendsType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getExtendsTypeOfType", owner.extendsType); - }, - ); - } - - get getBaseType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBaseType", - function (): Type { - return owner.objectRegistry.fetchType(owner, "getBaseTypeOfType", owner.baseType); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchType.gen(owner, "getBaseTypeOfType", owner.baseType); - }, - ); - } - - get getConstraint(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getConstraint", - function (): Type | undefined { - // Type parameters resolve their constraint lazily through the checker, - // whereas substitution types carry a preloaded constraint handle. - if (owner.flags & TypeFlags.TypeParameter) { - const result = owner.objectRegistry.fetchOptionalType(owner, "getConstraintOfTypeParameter", owner.constraint); - owner.constraint = result ? result.id : 0; - return result; - } - return owner.objectRegistry.fetchType(owner, "getConstraintOfType", owner.substConstraint); - }, - function* (): Generator { - // Type parameters resolve their constraint lazily through the checker, - // whereas substitution types carry a preloaded constraint handle. - if (owner.flags & TypeFlags.TypeParameter) { - const result = yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getConstraintOfTypeParameter", owner.constraint); - owner.constraint = result ? result.id : 0; - return result; - } - return yield* owner.objectRegistry.fetchType.gen(owner, "getConstraintOfType", owner.substConstraint); - }, - ); - } - - get getDefault(): { - (): Type | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getDefault", - function (): Type | undefined { - const result = owner.objectRegistry.fetchOptionalType(owner, "getDefaultFromTypeParameter", owner.default); - owner.default = result ? result.id : 0; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getDefaultFromTypeParameter", owner.default); - owner.default = result ? result.id : 0; - return result; - }, - ); - } - - get getTrueType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTrueType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getTrueTypeOfConditionalType", owner.trueType); - owner.trueType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getTrueTypeOfConditionalType", owner.trueType); - owner.trueType = result.id; - return result; - }, - ); - } - - get getFalseType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getFalseType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getFalseTypeOfConditionalType", owner.falseType); - owner.falseType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getFalseTypeOfConditionalType", owner.falseType); - owner.falseType = result.id; - return result; - }, - ); - } - - /** - * Get the base types of this type. Returns `undefined` for any type that is - * not a class or interface. - */ - get getBaseTypes(): { - (): readonly Type[] | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getBaseTypes", - function (): readonly Type[] | undefined { - if (!owner.isClassOrInterface()) { - return undefined; - } - if (owner.baseTypes === false) { - owner.baseTypes = owner.objectRegistry.fetchBaseTypes(owner); - } - return owner.baseTypes; - }, - function* (): Generator { - if (!owner.isClassOrInterface()) { - return undefined; - } - if (owner.baseTypes === false) { - owner.baseTypes = yield* owner.objectRegistry.fetchBaseTypes.gen(owner); - } - return owner.baseTypes; - }, - ); - } - - isClassOrInterface(): this is InterfaceType { - return isClassOrInterfaceType(this); - } - - isUnionType(): this is UnionType { - return isUnionType(this); - } - - isIntersectionType(): this is IntersectionType { - return isIntersectionType(this); - } - - isObjectType(): this is ObjectType { - return isObjectType(this); - } - - isIntrinsicType(): this is IntrinsicType { - return isIntrinsicType(this); - } - - isErrorType(): boolean { - return isErrorType(this); - } - - isLiteralType(): this is LiteralType { - return isLiteralType(this); - } - - isStringLiteralType(): this is StringLiteralType { - return isStringLiteralType(this); - } - - isNumberLiteralType(): this is NumberLiteralType { - return isNumberLiteralType(this); - } - - isBigIntLiteralType(): this is BigIntLiteralType { - return isBigIntLiteralType(this); - } - - isBooleanLiteralType(): this is BooleanLiteralType { - return isBooleanLiteralType(this); - } - - isTypeReference(): this is TypeReference { - return isTypeReference(this); - } - - isTupleType(): this is TupleTypeReference { - return this.tupleType; - } - - isTupleTypeTarget(): this is TupleType { - return this.fixedLength !== undefined; - } - - isIndexType(): this is IndexType { - return isIndexType(this); - } - - isIndexedAccessType(): this is IndexedAccessType { - return isIndexedAccessType(this); - } - - isConditionalType(): this is ConditionalType { - return isConditionalType(this); - } - - isSubstitutionType(): this is SubstitutionType { - return isSubstitutionType(this); - } - - isTemplateLiteralType(): this is TemplateLiteralType { - return isTemplateLiteralType(this); - } - - isStringMappingType(): this is StringMappingType { - return isStringMappingType(this); - } - - isTypeParameter(): this is TypeParameter { - return isTypeParameter(this); - } - - isMappedType(): this is MappedType { - return !!(this.flags & TypeFlags.Object) && !!(this.objectFlags & ObjectFlags.Mapped); - } -} - -export function isUnionType(type: Type): type is UnionType { - return (type.flags & TypeFlags.Union) !== 0; -} - -export function isIntersectionType(type: Type): type is IntersectionType { - return (type.flags & TypeFlags.Intersection) !== 0; -} - -export function isObjectType(type: Type): type is ObjectType { - return (type.flags & TypeFlags.Object) !== 0; -} - -export function isClassOrInterfaceType(type: Type): type is InterfaceType { - return isObjectType(type) && (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0; -} - -export function isIntrinsicType(type: Type): type is IntrinsicType { - return (type.flags & TypeFlags.Intrinsic) !== 0; -} - -/** - * Whether this is the error type — the placeholder the checker produces when a - * type cannot be determined (e.g. an unresolved reference). It is an intrinsic - * type named `"error"` (this covers both the singleton error type and the - * per-alias error types manufactured for unresolved type alias references). - */ -export function isErrorType(type: Type): boolean { - return isIntrinsicType(type) && type.intrinsicName === "error"; -} - -export function isLiteralType(type: Type): type is LiteralType { - return (type.flags & TypeFlags.Literal) !== 0; -} - -export function isStringLiteralType(type: Type): type is StringLiteralType { - return (type.flags & TypeFlags.StringLiteral) !== 0; -} - -export function isNumberLiteralType(type: Type): type is NumberLiteralType { - return (type.flags & TypeFlags.NumberLiteral) !== 0; -} - -export function isBigIntLiteralType(type: Type): type is BigIntLiteralType { - return (type.flags & TypeFlags.BigIntLiteral) !== 0; -} - -export function isBooleanLiteralType(type: Type): type is BooleanLiteralType { - return (type.flags & TypeFlags.BooleanLiteral) !== 0; -} - -export function isTypeReference(type: Type): type is TypeReference { - return isObjectType(type) && (type.objectFlags & ObjectFlags.Reference) !== 0; -} - -export function isTupleType(type: Type): type is TupleTypeReference { - return type.isTupleType(); -} - -export function isTupleTypeTarget(type: Type): type is TupleType { - return type.isTupleTypeTarget(); -} - -export function isIndexType(type: Type): type is IndexType { - return (type.flags & TypeFlags.Index) !== 0; -} - -export function isIndexedAccessType(type: Type): type is IndexedAccessType { - return (type.flags & TypeFlags.IndexedAccess) !== 0; -} - -export function isConditionalType(type: Type): type is ConditionalType { - return (type.flags & TypeFlags.Conditional) !== 0; -} - -export function isSubstitutionType(type: Type): type is SubstitutionType { - return (type.flags & TypeFlags.Substitution) !== 0; -} - -export function isTemplateLiteralType(type: Type): type is TemplateLiteralType { - return (type.flags & TypeFlags.TemplateLiteral) !== 0; -} - -export function isStringMappingType(type: Type): type is StringMappingType { - return (type.flags & TypeFlags.StringMapping) !== 0; -} - -export function isTypeParameter(type: Type): type is TypeParameter { - return (type.flags & TypeFlags.TypeParameter) !== 0; -} - -export class Signature { - private flags: number; - private objectRegistry: ProjectObjectRegistry; - - readonly id: number; - readonly declaration?: NodeHandle | undefined; - readonly typeParameters?: readonly number[] | undefined; - readonly parameters: readonly CompactSymbolReference[]; - readonly thisParameter?: CompactSymbolReference | undefined; - readonly target?: number | undefined; - private returnType: number | false; - - constructor(data: SignatureResponse, project: Project, objectRegistry: ProjectObjectRegistry) { - this.id = data.id; - this.flags = data.flags; - this.objectRegistry = objectRegistry; - this.declaration = data.declaration ? new NodeHandle(data.declaration, project) : undefined; - this.typeParameters = data.typeParameters ?? []; - this.parameters = data.parameters ?? []; - this.thisParameter = data.thisParameter; - this.target = data.target; - this.returnType = false; - } - - get getTypeParameters(): { - (): readonly TypeParameter[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeParameters", - function (): readonly TypeParameter[] { - return owner.objectRegistry.fetchTypes(owner, "getTypeParametersOfSignature", owner.typeParameters) as readonly TypeParameter[]; - }, - function* (): Generator { - return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypeParametersOfSignature", owner.typeParameters)) as readonly TypeParameter[]; - }, - ); - } - - get getParameters(): { - (): readonly Symbol[]; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getParameters", - function (): readonly Symbol[] { - return owner.objectRegistry.fetchSymbols(owner, "getParametersOfSignature", owner.parameters); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchSymbols.gen(owner, "getParametersOfSignature", owner.parameters); - }, - ); - } - - get getThisParameter(): { - (): Symbol | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getThisParameter", - function (): Symbol | undefined { - return owner.objectRegistry.fetchSymbol(owner, "getThisParameterOfSignature", owner.thisParameter); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getThisParameterOfSignature", owner.thisParameter); - }, - ); - } - - get getTarget(): { - (): Signature | undefined; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTarget", - function (): Signature | undefined { - return owner.objectRegistry.fetchSignature(owner, "getTargetOfSignature", owner.target); - }, - function* (): Generator { - return yield* owner.objectRegistry.fetchSignature.gen(owner, "getTargetOfSignature", owner.target); - }, - ); - } - - get getReturnType(): { - (): Type; - gen(): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getReturnType", - function (): Type { - const result = owner.objectRegistry.fetchType(owner, "getReturnTypeOfSignature", owner.returnType); - owner.returnType = result.id; - return result; - }, - function* (): Generator { - const result = yield* owner.objectRegistry.fetchType.gen(owner, "getReturnTypeOfSignature", owner.returnType); - owner.returnType = result.id; - return result; - }, - ); - } - - get getTypeParameterAtPosition(): { - (pos: number): Type; - gen(pos: number): Generator; - } { - const owner = this; - return cacheGeneratorMethod( - owner, - "getTypeParameterAtPosition", - function (pos: number): Type { - return owner.objectRegistry.fetchTypeParameterAtPosition(owner, pos); - }, - function* (pos: number): Generator { - return yield* owner.objectRegistry.fetchTypeParameterAtPosition.gen(owner, pos); - }, - ); - } - - get hasRestParameter(): boolean { - return (this.flags & SignatureFlags.HasRestParameter) !== 0; - } - - get isConstruct(): boolean { - return (this.flags & SignatureFlags.Construct) !== 0; - } - - get isAbstract(): boolean { - return (this.flags & SignatureFlags.Abstract) !== 0; - } -} +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: src/api/async/api.ts +// Regenerate: npm run generate (from packages/typescript) +// +import type { + APIRequest as ProtocolRequest, + APIResponse as ProtocolResponse, +} from "../proto.ts"; +import { + apiRequest, + cacheGeneratorMethod, +} from "./generatorSupport.ts"; + +import { CheckFlags } from "#enums/checkFlags"; +import { CompletionItemKind } from "#enums/completionItemKind"; +import { DiagnosticCategory } from "#enums/diagnosticCategory"; +import { ElementFlags } from "#enums/elementFlags"; +import { EmitOnly } from "#enums/emitOnly"; +import { IndexKind } from "#enums/indexKind"; +import { JsxEmit } from "#enums/jsxEmit"; +import { ModuleKind } from "#enums/moduleKind"; +import { ModuleResolutionKind } from "#enums/moduleResolutionKind"; +import { NewLineKind } from "#enums/newLineKind"; +import { NodeBuilderFlags } from "#enums/nodeBuilderFlags"; +import { ObjectFlags } from "#enums/objectFlags"; +import { ScriptKind } from "#enums/scriptKind"; +import { SignatureFlags } from "#enums/signatureFlags"; +import { SignatureKind } from "#enums/signatureKind"; +import { SymbolFlags } from "#enums/symbolFlags"; +import { SymbolOwnerKind } from "#enums/symbolOwnerKind"; +import { TypeFlags } from "#enums/typeFlags"; +import { TypeFormatFlags } from "#enums/typeFormatFlags"; +import { TypePredicateKind } from "#enums/typePredicateKind"; +import { + type __String, + type CallLikeExpression, + type Declaration, + type Expression, + type FileReference, + type Identifier, + type IndexSignatureDeclaration, + ModifierFlags, + type NamedTupleMember, + type Node, + type ParameterDeclaration, + type PathKey, + type RootedDirectoryPath, + type RootedFilePath, + type SourceFile, + type StringLiteralLikeNode, + type SyntaxKind, + type TypeNode, + unescapeLeadingUnderscores, +} from "../../ast/index.ts"; +import { assertNever } from "../../internal/utils.ts"; +import { + encodeNode, + uint8ArrayToBase64, +} from "../node/encoder.ts"; +import { + decodeNode, + getNodeId, + parseNodeHandleFromCompiler, + readParseOptionsKey, + readSourceFileHash, + readSourceFileLease, + RemoteNode, + RemoteSourceFile, +} from "../node/node.ts"; +import { Wtf8Decoder } from "../node/wtf8.ts"; +import type { + APIOptions, + LSPConnectionOptions, +} from "../options.ts"; +import { + canonicalize, + CaseSensitivity, + pathKey, + toRootedDirectoryPath, + toRootedPath, +} from "../path.ts"; +import { prepareCompilerOptions } from "../prepareCompilerOptions.generated.ts"; +import type { + BuildResponse, + CleanBuildResponse, + CompactSymbolReference, + CompilerOptions, + CompletionPreferences, + ConfiguredProjectId, + CreateBuildOrchestratorResponse, + CreateProgramOptions as ProtocolCreateProgramOptions, + CreateSnapshotParams as ProtocolCreateSnapshotParams, + CreateSnapshotProgramParams as ProtocolCreateSnapshotProgramParams, + CreateSnapshotResponse, + CreateSourceFileOptions, + Diagnostic, + DiagnosticResponse, + DocumentIdentifier, + DocumentPosition, + EmitOutputResponse as ProtocolEmitOutputResponse, + FileNotifications, + ImportAdderAction, + InferredProjectId, + IntrinsicTypeMethod, + LanguageServerSnapshotChanges as ProtocolLanguageServerSnapshotChanges, + ModuleResolutionEntry, + ModuleResolutionSpec, + PackageId, + ParsedCommandLine, + ProjectId, + ProjectReference, + ProjectResponse, + ProtocolSymbolResponse, + RawCompilerOptions, + ReadConfigFileResponse, + ReconfigureSnapshotProgramParams as ProtocolReconfigureSnapshotProgramParams, + ResolutionMode, + ResolvedModule, + ResolvedTypeReferenceDirective, + ResolveModuleNameResult, + SignaturePropertyMethod, + SignatureResponse, + SourceFileDescriptor, + SourceFileMetadata, + StaticModuleResolution, + SymbolPropertyMethod, + SymbolReference, + SymbolResponse, + SymbolsPropertyMethod, + SyntheticProjectId, + TextEdit, + TypeAcquisition, + TypePropertyMethod, + TypeResponse, + TypesPropertyMethod, + UserPreferences, +} from "../proto.ts"; +import { + resolveFileName, + toCreateSnapshotRequest, + validateSymbolResponse, +} from "../proto.ts"; +import { + type CachedSourceFile, + SourceFileCache, +} from "../sourceFileCache.ts"; +import type { + RequestTiming, + TimingAccumulators, + TimingCollector, + TimingInfo, +} from "../timing.ts"; +import { + Client, + type ClientSocketOptions, + type ClientSpawnOptions, +} from "./client.ts"; +import type { + AssertsIdentifierTypePredicate, + AssertsThisTypePredicate, + BigIntLiteralType, + BooleanLiteralType, + CompletionEntry, + CompletionInfo, + CompletionOptions, + ConditionalType, + EmitOutput, + EmitOutputFile, + EmitResult, + FormatDiagnosticsHost, + FreshableType, + GenericType, + GetImportEditsForSymbolsOptions, + IdentifierTypePredicate, + ImportAdderAction as APIImportAdderAction, + IndexedAccessType, + IndexInfo, + IndexType, + InterfaceType, + IntersectionType, + IntrinsicType, + JSDocTagInfo, + LiteralType, + MappedType, + NumberLiteralType, + ObjectType, + StringLiteralType, + StringMappingType, + StructuredType, + SubstitutionType, + TemplateLiteralType, + ThisTypePredicate, + TupleType, + TupleTypeReference, + Type, + TypeParameter, + TypePredicate, + TypePredicateBase, + TypeReference, + UnionOrIntersectionType, + UnionType, +} from "./types.ts"; + +export { formatDiagnostics, formatDiagnosticsWithColorAndContext } from "../diagnosticFormatter.ts"; +export { documentURIToFileName, fileNameToDocumentURI } from "../path.ts"; +export { CheckFlags, CompletionItemKind, DiagnosticCategory, ElementFlags, EmitOnly, IndexKind, JsxEmit, ModifierFlags, ModuleKind, ModuleResolutionKind, NodeBuilderFlags, ObjectFlags, ScriptKind, SignatureFlags, SignatureKind, SymbolFlags, SymbolOwnerKind, TypeFlags, TypeFormatFlags, TypePredicateKind }; +export type { + APIImportAdderAction as ImportAdderAction, + APIOptions, + AssertsIdentifierTypePredicate, + AssertsThisTypePredicate, + BigIntLiteralType, + BooleanLiteralType, + ClientSocketOptions, + ClientSpawnOptions, + CompilerOptions, + CompletionEntry, + CompletionInfo, + CompletionOptions, + CompletionPreferences, + ConditionalType, + ConfiguredProjectId, + CreateSourceFileOptions, + Diagnostic, + DocumentIdentifier, + DocumentPosition, + EmitOutput, + EmitOutputFile, + EmitResult, + FileNotifications, + FormatDiagnosticsHost, + FreshableType, + GenericType, + GetImportEditsForSymbolsOptions, + IdentifierTypePredicate, + IndexedAccessType, + IndexInfo, + IndexType, + InferredProjectId, + InterfaceType, + IntersectionType, + IntrinsicType, + JSDocTagInfo, + LiteralType, + LSPConnectionOptions, + MappedType, + ModuleResolutionEntry, + ModuleResolutionSpec, + NumberLiteralType, + ObjectType, + PackageId, + ParsedCommandLine, + ProjectId, + ProjectReference, + RawCompilerOptions, + ReadConfigFileResponse, + RequestTiming, + ResolutionMode, + ResolvedModule, + ResolvedTypeReferenceDirective, + ResolveModuleNameResult, + SourceFileMetadata, + StaticModuleResolution, + StringLiteralType, + StringMappingType, + StructuredType, + SubstitutionType, + SyntheticProjectId, + TemplateLiteralType, + TextEdit, + ThisTypePredicate, + TimingAccumulators, + TimingInfo, + TupleType, + TupleTypeReference, + Type, + TypeAcquisition, + TypeParameter, + TypePredicate, + TypePredicateBase, + TypeReference, + UnionOrIntersectionType, + UnionType, + UserPreferences, +}; + +export interface ModuleResolverOptions { + moduleResolutions?: ModuleResolutionSpec | undefined; + resolveModuleName?: ResolveModuleNameCallback | undefined; +} + +export interface ResolveModuleNameCallbackOptions { + snapshot: Snapshot | InProgressSnapshot | undefined; +} + +declare const inProgressSnapshotBrand: unique symbol; +export type InProgressSnapshot = number & { readonly [inProgressSnapshotBrand]: never; }; + +export type ResolveModuleNameCallback = (moduleName: string, containingDirectory: string, resolutionMode: ResolutionMode | undefined, options: ResolveModuleNameCallbackOptions) => StaticModuleResolution | undefined; + +export type CreateProgramOptions = Omit & { + moduleResolver?: ModuleResolver | undefined; + projectReferences?: readonly (Omit & { path: string; })[] | undefined; +}; +export type CreateSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; +export type ReconfigureSnapshotProgramParams = Omit & { options?: CreateProgramOptions | undefined; }; +export type CreateSnapshotParams = Omit & { + createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; + reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; +}; +export type LanguageServerSnapshotChanges = Omit & { + createPrograms?: readonly CreateSnapshotProgramParams[] | undefined; + reconfigurePrograms?: readonly ReconfigureSnapshotProgramParams[] | undefined; +}; + +let nextModuleResolutionCallbackId = 0; +function registerModuleResolutionCallback(client: Client, callback: ResolveModuleNameCallback, getSnapshot: (id: number) => Snapshot | undefined): { name: string; dispose: () => void; } { + const name = `resolveModuleName/${++nextModuleResolutionCallbackId}`; + const dispose = client.registerCallback(name, params => { + const { moduleName, containingDirectory, resolutionMode, snapshot: snapshotId, inProgressSnapshot } = params as { + moduleName: string; + containingDirectory: string; + resolutionMode?: ResolutionMode; + snapshot?: number; + inProgressSnapshot?: number; + }; + let snapshot: Snapshot | InProgressSnapshot | undefined = snapshotId === undefined ? undefined : getSnapshot(snapshotId); + if (snapshotId !== undefined && snapshot === undefined) { + throw new Error(`Snapshot ${snapshotId} is inactive`); + } + if (inProgressSnapshot !== undefined) { + snapshot = -inProgressSnapshot as InProgressSnapshot; + } + return callback( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + ); + }); + return { name, dispose }; +} + +export interface TranspileOptions { + compilerOptions?: RawCompilerOptions | undefined; + fileName?: string | undefined; + reportDiagnostics?: boolean | undefined; +} + +export interface TranspileOutput { + outputText: string; + diagnostics?: readonly Diagnostic[] | undefined; + sourceMapText?: string | undefined; +} + +export { all, type AllAPIRequestGenerator, type AnyAPIRequestGenerator, type APIRequestGenerator, defer, type DeferredAPIRequestGenerator, type ExecutedGeneratorsResults } from "./generatorSupport.ts"; +import { sourceFileResponseToUint8Array } from "../node/encoder.ts"; +import { + type AnyAPIRequestGenerator, + type ExecutedGeneratorsResults, + executeRequestGenerators, +} from "./generatorSupport.ts"; + +export class API implements FormatDiagnosticsHost { + /** @internal */ + readonly client: Client; + /** @internal */ + readonly sourceFileCache: SourceFileCache; + private toPath: ((fileName: string, basePath?: string) => PathKey) | undefined; + private readonly decoder = new Wtf8Decoder(); + private currentDirectory: RootedDirectoryPath | undefined; + private caseSensitivity: CaseSensitivity | undefined; + private initialized: boolean = false; + private initializing: void | undefined; + private activeSnapshots: Map = new Map(); + private activeBuildOrchestrators: Set = new Set(); + private activeSourceFileLeases: Map = new Map(); + readonly printer: Printer; + readonly internal: InternalAPI; + + constructor(options: APIOptions | LSPConnectionOptions = {}) { + this.client = new Client(options); + this.sourceFileCache = new SourceFileCache(); + this.printer = new Printer(this.client); + this.internal = new InternalAPI(this.client, this.ensureInitialized); + } + + /** + * Looks up a remote declaration's binder symbol. Throws for synthesized or configuration ASTs. + */ + get getSymbol(): { + (declaration: Declaration): Symbol; + gen(declaration: Declaration): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSymbol", + function (declaration: Declaration): Symbol { + const file = getRemoteSourceFile(declaration); + if (!file) throw new Error(`Source file not found for declaration`); + const record = file.symbolCache as CachedSourceFile | undefined; + if (!record) throw new Error(`Cached source file not found for declaration`); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + const cached = record.symbolsByDeclarationNodeIndex.get(index); + if (cached) return cached; + return owner.fetchDeclarationSymbol(record, index); + }, + function* (declaration: Declaration): Generator { + const file = getRemoteSourceFile(declaration); + if (!file) throw new Error(`Source file not found for declaration`); + const record = file.symbolCache as CachedSourceFile | undefined; + if (!record) throw new Error(`Cached source file not found for declaration`); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + const cached = record.symbolsByDeclarationNodeIndex.get(index); + if (cached) return cached; + return yield* owner.fetchDeclarationSymbol.gen(record, index); + }, + ); + } + + private get fetchDeclarationSymbol(): { + (record: CachedSourceFile, index: number): Symbol; + gen(record: CachedSourceFile, index: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchDeclarationSymbol", + function (record: CachedSourceFile, index: number): Symbol { + const data = owner.client.apiRequest("getSymbolOfDeclaration", { + file: record.descriptor, + index, + }); + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.File) { + throw new Error(`Symbol ${reference.id} is not file-owned`); + } + const fileOwner: SourceFileOwner = { record, api: owner }; + const symbol = owner.sourceFileCache.getOrCreateSymbol( + record, + reference.file, + reference.id, + () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), + ); + record.symbolsByDeclarationNodeIndex.set(index, symbol); + return symbol; + }, + function* (record: CachedSourceFile, index: number): Generator { + const data = yield* apiRequest("getSymbolOfDeclaration", { + file: record.descriptor, + index, + }); + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.File) { + throw new Error(`Symbol ${reference.id} is not file-owned`); + } + const fileOwner: SourceFileOwner = { record, api: owner }; + const symbol = owner.sourceFileCache.getOrCreateSymbol( + record, + reference.file, + reference.id, + () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner }), + ); + record.symbolsByDeclarationNodeIndex.set(index, symbol); + return symbol; + }, + ); + } + + /** + * Create an API instance from an existing LSP connection's API session. + * Use this when connecting to an API pipe provided by an LSP server via custom/initializeAPISession. + */ + static get fromLSPConnection(): { + (options: LSPConnectionOptions): API; + gen(options: LSPConnectionOptions): Generator, ProtocolResponse["result"]>; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fromLSPConnection", + function (options: LSPConnectionOptions): API { + const api = new API(options); + api.ensureInitialized(); + return api; + }, + function* (options: LSPConnectionOptions): Generator, ProtocolResponse["result"]> { + const api = new API(options); + yield* api.ensureInitialized.gen(); + return api; + }, + ); + } + + batch(...requestGenerators: T): ExecutedGeneratorsResults { + return executeRequestGenerators(requestGenerators, requests => this.client.batchRequests(requests).responses); + } + + private get ensureInitialized(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "ensureInitialized", + function (): void { + if (owner.initialized) return; + return owner.initializing ??= owner.initializeWorker(); + }, + function* (): Generator { + if (owner.initialized) return; + return owner.initializing ??= yield* owner.initializeWorker.gen(); + }, + ); + } + + private get initializeWorker(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "initializeWorker", + function (): void { + try { + const response = owner.client.apiRequest("initialize", null); + owner.currentDirectory = response.currentDirectory; + owner.caseSensitivity = response.caseSensitivity; + owner.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); + owner.initialized = true; + } + catch (error) { + owner.initializing = undefined; + throw error; + } + }, + function* (): Generator { + try { + const response = yield* apiRequest("initialize", null); + owner.currentDirectory = response.currentDirectory; + owner.caseSensitivity = response.caseSensitivity; + owner.toPath = (fileName: string, basePath = response.currentDirectory) => pathKey(toRootedPath(fileName, toRootedDirectoryPath(basePath, response.currentDirectory)), response.caseSensitivity); + owner.initialized = true; + } + catch (error) { + owner.initializing = undefined; + throw error; + } + }, + ); + } + + getCurrentDirectory(): RootedDirectoryPath { + if (this.currentDirectory === undefined) { + throw new Error("API has not been initialized"); + } + return this.currentDirectory; + } + + getCanonicalFileName(fileName: string): string { + return canonicalize(fileName, this.getCaseSensitivity()); + } + + private getCaseSensitivity(): CaseSensitivity { + if (this.caseSensitivity === undefined) { + throw new Error("API has not been initialized"); + } + return this.caseSensitivity; + } + + getNewLine(): string { + return "\n"; + } + + get createBuildOrchestrator(): { + (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): BuildOrchestrator; + gen(rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "createBuildOrchestrator", + function (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): BuildOrchestrator { + owner.ensureInitialized(); + const orchestratorResponse = owner.client.apiRequest("createBuildOrchestrator", { + ...buildOrchestratorOptions, + ...buildOrchestratorOptions.overrideCompilerOptions, + cwd: buildOrchestratorOptions.cwd === undefined + ? undefined + : toRootedDirectoryPath(buildOrchestratorOptions.cwd, owner.getCurrentDirectory()), + rootNames, + }); + + const orchestrator = new BuildOrchestrator(owner.client, orchestratorResponse, () => { + owner.activeBuildOrchestrators.delete(orchestrator); + }); + owner.activeBuildOrchestrators.add(orchestrator); + return orchestrator; + }, + function* (rootNames: readonly string[], buildOrchestratorOptions: BuildOrchestratorOptions): Generator { + yield* owner.ensureInitialized.gen(); + const orchestratorResponse = yield* apiRequest("createBuildOrchestrator", { + ...buildOrchestratorOptions, + ...buildOrchestratorOptions.overrideCompilerOptions, + cwd: buildOrchestratorOptions.cwd === undefined + ? undefined + : toRootedDirectoryPath(buildOrchestratorOptions.cwd, owner.getCurrentDirectory()), + rootNames, + }); + + const orchestrator = new BuildOrchestrator(owner.client, orchestratorResponse, () => { + owner.activeBuildOrchestrators.delete(orchestrator); + }); + owner.activeBuildOrchestrators.add(orchestrator); + return orchestrator; + }, + ); + } + + get parseConfigFile(): { + (file: DocumentIdentifier): ParsedCommandLine; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "parseConfigFile", + function (file: DocumentIdentifier): ParsedCommandLine { + owner.ensureInitialized(); + return owner.client.apiRequest("parseConfigFile", { file }); + }, + function* (file: DocumentIdentifier): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("parseConfigFile", { file }); + }, + ); + } + + get parseCommandLine(): { + (commandLine: readonly string[]): ParsedCommandLine; + gen(commandLine: readonly string[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "parseCommandLine", + function (commandLine: readonly string[]): ParsedCommandLine { + owner.ensureInitialized(); + return owner.client.apiRequest("parseCommandLine", { commandLine }); + }, + function* (commandLine: readonly string[]): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("parseCommandLine", { commandLine }); + }, + ); + } + + get readConfigFile(): { + (file: DocumentIdentifier): ReadConfigFileResponse; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "readConfigFile", + function (file: DocumentIdentifier): ReadConfigFileResponse { + owner.ensureInitialized(); + return owner.client.apiRequest("readConfigFile", { file }); + }, + function* (file: DocumentIdentifier): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("readConfigFile", { file }); + }, + ); + } + + get parseJsonConfigFileContent(): { + ( + json: any, + options: + | { configDirectory: string; configFileName?: never; } + | { configFileName: DocumentIdentifier; configDirectory?: never; }, + ): ParsedCommandLine; + gen( + json: any, + options: + | { configDirectory: string; configFileName?: never; } + | { configFileName: DocumentIdentifier; configDirectory?: never; }, + ): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "parseJsonConfigFileContent", + function ( + json: any, + options: + | { configDirectory: string; configFileName?: never; } + | { configFileName: DocumentIdentifier; configDirectory?: never; }, + ): ParsedCommandLine { + owner.ensureInitialized(); + return owner.client.apiRequest("parseJsonConfigFileContent", { json, ...options }); + }, + function* ( + json: any, + options: + | { configDirectory: string; configFileName?: never; } + | { configFileName: DocumentIdentifier; configDirectory?: never; }, + ): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("parseJsonConfigFileContent", { json, ...options }); + }, + ); + } + + /** + * Create and retain a source file independently of a program. + * Dispose the returned lease when the source file no longer needs to remain available remotely. + */ + get createSourceFile(): { + (fileName: string, sourceText: string, options?: CreateSourceFileOptions): RetainedSourceFile; + gen(fileName: string, sourceText: string, options?: CreateSourceFileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "createSourceFile", + function (fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): RetainedSourceFile { + owner.ensureInitialized(); + const data = owner.client.apiRequestBinary("createSourceFile", { fileName, sourceText, options }); + if (!data) { + throw new Error("createSourceFile returned no source file"); + } + return owner.retainSourceFileResponse(data); + }, + function* (fileName: string, sourceText: string, options: CreateSourceFileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + const data = sourceFileResponseToUint8Array(yield* apiRequest("createSourceFile", { fileName, sourceText, options })); + if (!data) { + throw new Error("createSourceFile returned no source file"); + } + return owner.retainSourceFileResponse(data); + }, + ); + } + + /** + * Read, create, and retain a source file independently of a program. + * Dispose the returned lease when the source file no longer needs to remain available remotely. + */ + get createSourceFileFromFile(): { + (file: DocumentIdentifier, options?: CreateSourceFileOptions): RetainedSourceFile; + gen(file: DocumentIdentifier, options?: CreateSourceFileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "createSourceFileFromFile", + function (file: DocumentIdentifier, options: CreateSourceFileOptions = {}): RetainedSourceFile { + owner.ensureInitialized(); + const data = owner.client.apiRequestBinary("createSourceFileFromFile", { fileName: resolveFileName(file), options }); + if (!data) { + throw new Error("createSourceFileFromFile returned no source file"); + } + return owner.retainSourceFileResponse(data); + }, + function* (file: DocumentIdentifier, options: CreateSourceFileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + const data = sourceFileResponseToUint8Array(yield* apiRequest("createSourceFileFromFile", { fileName: resolveFileName(file), options })); + if (!data) { + throw new Error("createSourceFileFromFile returned no source file"); + } + return owner.retainSourceFileResponse(data); + }, + ); + } + + /** + * Retain an ordinary remote source file independently of the snapshot or lease that produced it. + */ + get retainSourceFile(): { + (sourceFile: SourceFile): RetainedSourceFile; + gen(sourceFile: SourceFile): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "retainSourceFile", + function (sourceFile: SourceFile): RetainedSourceFile { + owner.ensureInitialized(); + if (!(sourceFile instanceof RemoteSourceFile)) { + throw new TypeError("Only remote source files can be retained"); + } + const cached = owner.sourceFileCache.get(sourceFile); + if (cached && cached !== sourceFile) { + throw new Error("Source file is no longer the canonical cached instance"); + } + const result = owner.client.apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); + return owner.addSourceFileLease(sourceFile, result.lease); + }, + function* (sourceFile: SourceFile): Generator { + yield* owner.ensureInitialized.gen(); + if (!(sourceFile instanceof RemoteSourceFile)) { + throw new TypeError("Only remote source files can be retained"); + } + const cached = owner.sourceFileCache.get(sourceFile); + if (cached && cached !== sourceFile) { + throw new Error("Source file is no longer the canonical cached instance"); + } + const result = yield* apiRequest("retainSourceFile", { file: sourceFileDescriptor(sourceFile) }); + return owner.addSourceFileLease(sourceFile, result.lease); + }, + ); + } + + private retainSourceFileResponse(data: Uint8Array): RetainedSourceFile { + const view = new DataView(data.buffer, data.byteOffset, data.byteLength); + const lease = readSourceFileLease(view); + try { + const decoded = new RemoteSourceFile(data, this.decoder, this.client.getTimingCollector(), this); + return this.addSourceFileLease(decoded, lease); + } + catch (error) { + try { + this.client.apiRequest("releaseSourceFile", { lease }); + } + catch {} + throw error; + } + } + + private addSourceFileLease(sourceFile: RemoteSourceFile, lease: number): RetainedSourceFile { + const cached = this.sourceFileCache.setForLease(sourceFile, lease); + const retained = new RetainedSourceFile(cached as unknown as SourceFile, lease, () => { + this.activeSourceFileLeases.delete(lease); + this.sourceFileCache.releaseLease(lease); + }); + this.activeSourceFileLeases.set(lease, retained); + return retained; + } + + get transpileModule(): { + (input: string, options?: TranspileOptions): TranspileOutput; + gen(input: string, options?: TranspileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "transpileModule", + function (input: string, options: TranspileOptions = {}): TranspileOutput { + owner.ensureInitialized(); + return owner.client.apiRequest("transpileModule", { input, options }); + }, + function* (input: string, options: TranspileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("transpileModule", { input, options }); + }, + ); + } + + get transpileModuleFromFile(): { + (file: DocumentIdentifier, options?: TranspileOptions): TranspileOutput; + gen(file: DocumentIdentifier, options?: TranspileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "transpileModuleFromFile", + function (file: DocumentIdentifier, options: TranspileOptions = {}): TranspileOutput { + owner.ensureInitialized(); + return owner.client.apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); + }, + function* (file: DocumentIdentifier, options: TranspileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("transpileModuleFromFile", { fileName: resolveFileName(file), options }); + }, + ); + } + + get transpileDeclaration(): { + (input: string, options?: TranspileOptions): TranspileOutput; + gen(input: string, options?: TranspileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "transpileDeclaration", + function (input: string, options: TranspileOptions = {}): TranspileOutput { + owner.ensureInitialized(); + return owner.client.apiRequest("transpileDeclaration", { input, options }); + }, + function* (input: string, options: TranspileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("transpileDeclaration", { input, options }); + }, + ); + } + + get transpileDeclarationFromFile(): { + (file: DocumentIdentifier, options?: TranspileOptions): TranspileOutput; + gen(file: DocumentIdentifier, options?: TranspileOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "transpileDeclarationFromFile", + function (file: DocumentIdentifier, options: TranspileOptions = {}): TranspileOutput { + owner.ensureInitialized(); + return owner.client.apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); + }, + function* (file: DocumentIdentifier, options: TranspileOptions = {}): Generator { + yield* owner.ensureInitialized.gen(); + return yield* apiRequest("transpileDeclarationFromFile", { fileName: resolveFileName(file), options }); + }, + ); + } + + get createSnapshot(): { + (params: SnapshotOperationParams): SnapshotForOperationResults; + (): Snapshot; + gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; + gen(): Generator; + } { + const owner = this; + function createSnapshot(params: SnapshotOperationParams): SnapshotForOperationResults; + function createSnapshot(): Snapshot; + function createSnapshot(params?: CreateSnapshotParams): Snapshot { + owner.ensureInitialized(); + + const requestParams = toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)); + const data = owner.client.apiRequest("createSnapshot", requestParams); + + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + undefined, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + + return snapshot; + } + function gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; + function gen(): Generator; + function* gen(params?: CreateSnapshotParams): Generator { + yield* owner.ensureInitialized.gen(); + + const requestParams = toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)); + const data = yield* apiRequest("createSnapshot", requestParams); + + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + undefined, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + + return snapshot; + } + return cacheGeneratorMethod(owner, "createSnapshot", createSnapshot, gen); + } + + private get updateSnapshot(): { + (baseSnapshot: Snapshot, params: CreateSnapshotParams): Snapshot; + gen(baseSnapshot: Snapshot, params: CreateSnapshotParams): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "updateSnapshot", + function (baseSnapshot: Snapshot, params: CreateSnapshotParams): Snapshot { + owner.ensureInitialized(); + if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot update an inactive snapshot"); + } + + const data = owner.client.apiRequest("updateSnapshot", { + snapshot: baseSnapshot.id, + changes: toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)), + }); + if (data.snapshot === baseSnapshot.id) { + owner.client.apiRequest("release", { snapshot: data.snapshot }); + return baseSnapshot; + } + owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + }, + function* (baseSnapshot: Snapshot, params: CreateSnapshotParams): Generator { + yield* owner.ensureInitialized.gen(); + if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot update an inactive snapshot"); + } + + const data = yield* apiRequest("updateSnapshot", { + snapshot: baseSnapshot.id, + changes: toCreateSnapshotRequest(owner.prepareCreateSnapshotParams(params)), + }); + if (data.snapshot === baseSnapshot.id) { + yield* apiRequest("release", { snapshot: data.snapshot }); + return baseSnapshot; + } + owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + }, + ); + } + + private prepareCreateSnapshotParams(params: CreateSnapshotParams | undefined): ProtocolCreateSnapshotParams | undefined { + if (!params) return undefined; + const prepareOptions = (options: CreateProgramOptions | undefined): ProtocolCreateProgramOptions | undefined => { + if (!options) return undefined; + const { moduleResolver, projectReferences, ...rest } = options; + moduleResolver?.ensureNotDisposed(); + return { + ...rest, + moduleResolver: moduleResolver?.id, + projectReferences: projectReferences?.map(reference => ({ + ...reference, + path: toRootedPath(reference.path, this.getCurrentDirectory()), + })), + }; + }; + return { + ...params, + createPrograms: params.createPrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), + reconfigurePrograms: params.reconfigurePrograms?.map(program => ({ ...program, options: prepareOptions(program.options) })), + }; + } + + private prepareLanguageServerSnapshotChanges(changes: LanguageServerSnapshotChanges | undefined): ProtocolLanguageServerSnapshotChanges | undefined { + if (!changes) return undefined; + const prepared = this.prepareCreateSnapshotParams(changes); + return prepared; + } + + private createSnapshotUpdater(getSnapshot: () => Snapshot): SnapshotUpdater { + const update = ((params: CreateSnapshotParams) => this.updateSnapshot(getSnapshot(), params)) as SnapshotUpdater; + const owner = this; + update.gen = function* (params: CreateSnapshotParams) { + return yield* owner.updateSnapshot.gen(getSnapshot(), params); + }; + return update; + } + + /** + * Returns the language server's current canonical snapshot after atomically + * adopting any supplied API-driven changes. Only available on LSP-connected APIs. + */ + get getCurrentLanguageServerSnapshot(): { + ( + ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] + : [changes: never, baseSnapshot?: never] + ): SnapshotForOperationResults; + (...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot; + gen( + ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] + : [changes: never, baseSnapshot?: never] + ): Generator, ProtocolResponse["result"]>; + gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator; + } { + const owner = this; + function getCurrentLanguageServerSnapshot( + ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] + : [changes: never, baseSnapshot?: never] + ): SnapshotForOperationResults; + function getCurrentLanguageServerSnapshot(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot; + function getCurrentLanguageServerSnapshot(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Snapshot { + owner.ensureInitialized(); + + const changes = args[0] as LanguageServerSnapshotChanges | undefined; + const baseSnapshot = args[1] as Snapshot | undefined; + if (baseSnapshot && (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { + throw new Error("Cannot use an inactive snapshot as a response base"); + } + const data = owner.client.apiRequest("getCurrentLanguageServerSnapshot", { + baseSnapshot: baseSnapshot?.id, + changes: owner.prepareLanguageServerSnapshotChanges(changes), + }); + if (baseSnapshot) { + owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + } + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + } + function gen( + ...args: FromLSP extends true ? [changes: SnapshotOperationParams, baseSnapshot?: Snapshot] + : [changes: never, baseSnapshot?: never] + ): Generator, ProtocolResponse["result"]>; + function gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator; + function* gen(...args: FromLSP extends true ? [changes?: LanguageServerSnapshotChanges, baseSnapshot?: Snapshot] : [changes: never, baseSnapshot?: never]): Generator { + yield* owner.ensureInitialized.gen(); + + const changes = args[0] as LanguageServerSnapshotChanges | undefined; + const baseSnapshot = args[1] as Snapshot | undefined; + if (baseSnapshot && (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed())) { + throw new Error("Cannot use an inactive snapshot as a response base"); + } + const data = yield* apiRequest("getCurrentLanguageServerSnapshot", { + baseSnapshot: baseSnapshot?.id, + changes: owner.prepareLanguageServerSnapshotChanges(changes), + }); + if (baseSnapshot) { + owner.sourceFileCache.retainForSnapshot(data.snapshot, baseSnapshot.id, data.changes); + } + const snapshot = new Snapshot( + data, + owner.toPath!, + owner, + () => { + owner.activeSnapshots.delete(snapshot.id); + owner.sourceFileCache.releaseSnapshot(snapshot.id); + }, + owner.createSnapshotUpdater(() => snapshot), + baseSnapshot, + ); + owner.activeSnapshots.set(snapshot.id, snapshot); + return snapshot; + } + return cacheGeneratorMethod(owner, "getCurrentLanguageServerSnapshot", getCurrentLanguageServerSnapshot, gen); + } + + [globalThis.Symbol.dispose](): void { + this.close(); + } + + get close(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "close", + function (): void { + try { + for (const retained of [...owner.activeSourceFileLeases.values()]) { + retained.dispose(); + } + } + finally { + try { + for (const orchestrator of [...owner.activeBuildOrchestrators]) { + orchestrator.dispose(); + } + for (const snapshot of [...owner.activeSnapshots.values()]) { + snapshot.dispose(); + } + owner.sourceFileCache.clear(); + } + finally { + owner.client.close(); // always close the underlying connection + } + } + }, + function* (): Generator { + try { + for (const retained of [...owner.activeSourceFileLeases.values()]) { + yield* retained.dispose.gen(); + } + } + finally { + try { + for (const orchestrator of [...owner.activeBuildOrchestrators]) { + yield* orchestrator.dispose.gen(); + } + for (const snapshot of [...owner.activeSnapshots.values()]) { + yield* snapshot.dispose.gen(); + } + owner.sourceFileCache.clear(); + } + finally { + owner.client.close(); // always close the underlying connection + } + } + }, + ); + } + + get createModuleResolver(): { + (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): ModuleResolver; + gen(compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "createModuleResolver", + function (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): ModuleResolver { + owner.ensureInitialized(); + const callback = options?.resolveModuleName + ? registerModuleResolutionCallback(owner.client, options.resolveModuleName, id => owner.activeSnapshots.get(id)) + : undefined; + try { + const id = owner.client.apiRequest("createModuleResolver", { + compilerOptions: prepareCompilerOptions(compilerOptions, owner.getCurrentDirectory()), + moduleResolutions: options?.moduleResolutions, + resolveModuleNameCallback: callback?.name, + }); + return new ModuleResolver(id, owner.client, callback?.dispose); + } + catch (error) { + callback?.dispose(); + throw error; + } + }, + function* (compilerOptions: RawCompilerOptions, options?: ModuleResolverOptions): Generator { + yield* owner.ensureInitialized.gen(); + const callback = options?.resolveModuleName + ? registerModuleResolutionCallback(owner.client, options.resolveModuleName, id => owner.activeSnapshots.get(id)) + : undefined; + try { + const id = yield* apiRequest("createModuleResolver", { + compilerOptions: prepareCompilerOptions(compilerOptions, owner.getCurrentDirectory()), + moduleResolutions: options?.moduleResolutions, + resolveModuleNameCallback: callback?.name, + }); + return new ModuleResolver(id, owner.client, callback?.dispose); + } + catch (error) { + callback?.dispose(); + throw error; + } + }, + ); + } + + clearSourceFileCache(): void { + this.sourceFileCache.clear(); + } + + get runWithTemporaryFileUpdate(): { + (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void): void; + gen(baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Generator): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "runWithTemporaryFileUpdate", + function (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void): void { + owner.ensureInitialized(); + + if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot run a temporary file update on an inactive snapshot"); + } + const snapshot = baseSnapshot.update({ + fileSystem: { + kind: "layer", + files: { [resolveFileName(file)]: newText }, + }, + ensurePrograms: true, + }); + + try { + cb(snapshot); + } + finally { + snapshot.dispose(); + } + }, + function* (baseSnapshot: Snapshot, file: DocumentIdentifier, newText: string, cb: (newSnapshot: Snapshot) => void | Generator): Generator { + yield* owner.ensureInitialized.gen(); + + if (owner.activeSnapshots.get(baseSnapshot.id) !== baseSnapshot || baseSnapshot.isDisposed()) { + throw new Error("Cannot run a temporary file update on an inactive snapshot"); + } + const snapshot = yield* baseSnapshot.update.gen({ + fileSystem: { + kind: "layer", + files: { [resolveFileName(file)]: newText }, + }, + ensurePrograms: true, + }); + + try { + yield* (cb(snapshot) ?? []); + } + finally { + yield* snapshot.dispose.gen(); + } + }, + ); + } + + /** + * Returns a snapshot of collected timing information for requests made + * through this API instance: client-measured round-trip latency and bytes + * transferred, folded together with the server's own per-request processing + * time and an estimated transport overhead (round-trip minus server time). + * + * Fetching the snapshot issues a lightweight request to the server to + * retrieve its timing collection. Collection must be enabled via the + * `collectTiming` option; when it is not, the returned snapshot has + * `enabled: false` and zeroed totals. + */ + get getTimingInfo(): { + (): TimingInfo; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTimingInfo", + function (): TimingInfo { + return owner.client.getTimingInfo(); + }, + function* (): Generator { + return owner.client.getTimingInfo(); + }, + ); + } + + /** Clears all accumulated timing totals and recent-request history, on both the client and the server. */ + get resetTimingInfo(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "resetTimingInfo", + function (): void { + return owner.client.resetTimingInfo(); + }, + function* (): Generator { + return owner.client.resetTimingInfo(); + }, + ); + } + + /** Creates a program from current filesystem state. */ + get createProgram(): { + (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Program; + gen(rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "createProgram", + function (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Program { + owner.ensureInitialized(); + + const snapshot = owner.createSnapshot({ + createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], + }); + const program = snapshot.operation.createdPrograms![0]; + if (!program) { + snapshot.dispose(); + throw new Error("createProgram did not return a project"); + } + program.setOwnedSnapshot(snapshot); + return program; + }, + function* (rootFiles: readonly DocumentIdentifier[], compilerOptions: RawCompilerOptions, createProgramOptions?: CreateProgramOptions): Generator { + yield* owner.ensureInitialized.gen(); + + const snapshot = yield* owner.createSnapshot.gen({ + createPrograms: [{ rootFiles, compilerOptions, options: createProgramOptions }], + }); + const program = snapshot.operation.createdPrograms![0]; + if (!program) { + yield* snapshot.dispose.gen(); + throw new Error("createProgram did not return a project"); + } + program.setOwnedSnapshot(snapshot); + return program; + }, + ); + } +} + +type EnsureInitialized = (() => void) & { gen(): Generator; }; + +function sourceFileDescriptor(sourceFile: RemoteSourceFile): SourceFileDescriptor { + return { + fileName: sourceFile.fileName, + path: sourceFile.path, + contentHash: sourceFile.contentHash, + parseOptionsKey: sourceFile.parseOptionsKey, + scriptKind: sourceFile.scriptKind, + nodeId: sourceFile.nodeId, + }; +} + +function getRemoteSourceFile(node: Node): RemoteSourceFile | undefined { + if (!(node instanceof RemoteNode)) return undefined; + const file = node.getSourceFile(); + return file instanceof RemoteSourceFile && file.api ? file : undefined; +} + +function getNodeAPI(node: Node): API | undefined { + const api = getRemoteSourceFile(node)?.api; + if (!api) return undefined; + if (!(api instanceof API)) throw new Error("Source file does not belong to the sync API"); + return api; +} + +/** Looks up a remote declaration's binder symbol through its API. Throws for non-remote declarations. */ +export function getSymbol(declaration: Declaration): Symbol { + const api = getNodeAPI(declaration); + if (!api) throw new Error("Source file not found for declaration"); + return api.getSymbol(declaration); +} + +export declare namespace getSymbol { + function gen(declaration: Declaration): Generator; +} +getSymbol.gen = function* (declaration: Declaration): Generator { + const api = getNodeAPI(declaration); + if (!api) throw new Error("Source file not found for declaration"); + return yield* api.getSymbol.gen(declaration); +}; + +/** An independently retained source file and its disposable remote-lifetime lease. */ +export class RetainedSourceFile { + readonly sourceFile: SourceFile; + private readonly lease: number; + private readonly onDispose: () => void; + private disposed = false; + private disposePromise: void | undefined; + + constructor(sourceFile: SourceFile, lease: number, onDispose: () => void) { + this.sourceFile = sourceFile; + this.lease = lease; + this.onDispose = onDispose; + } + + [globalThis.Symbol.dispose](): void { + this.dispose(); + } + + get dispose(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "dispose", + function (): void { + return owner.disposePromise ??= owner.disposeWorker(); + }, + function* (): Generator { + return owner.disposePromise ??= yield* owner.disposeWorker.gen(); + }, + ); + } + + private get disposeWorker(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "disposeWorker", + function (): void { + if (owner.disposed) return; + const api = getNodeAPI(owner.sourceFile); + if (!api) throw new Error("Retained source file has no owning API"); + owner.disposed = true; + try { + api.client.apiRequest("releaseSourceFile", { lease: owner.lease }); + } + finally { + owner.onDispose(); + } + }, + function* (): Generator { + if (owner.disposed) return; + const api = getNodeAPI(owner.sourceFile); + if (!api) throw new Error("Retained source file has no owning API"); + owner.disposed = true; + try { + yield* apiRequest("releaseSourceFile", { lease: owner.lease }); + } + finally { + owner.onDispose(); + } + }, + ); + } +} + +export class InternalAPI { + private client: Client; + private ensureInitialized: EnsureInitialized; + + /** @internal */ + constructor(client: Client, ensureInitialized: EnsureInitialized) { + this.client = client; + this.ensureInitialized = ensureInitialized; + } + + get startCPUProfile(): { + (dir: string): void; + gen(dir: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "startCPUProfile", + function (dir: string): void { + owner.ensureInitialized(); + owner.client.apiRequest("startCPUProfile", { dir }); + }, + function* (dir: string): Generator { + yield* owner.ensureInitialized.gen(); + yield* apiRequest("startCPUProfile", { dir }); + }, + ); + } + + get stopCPUProfile(): { + (): RootedFilePath; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "stopCPUProfile", + function (): RootedFilePath { + owner.ensureInitialized(); + const result = owner.client.apiRequest("stopCPUProfile", null); + return result.file; + }, + function* (): Generator { + yield* owner.ensureInitialized.gen(); + const result = yield* apiRequest("stopCPUProfile", null); + return result.file; + }, + ); + } + + get saveHeapProfile(): { + (dir: string): RootedFilePath; + gen(dir: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "saveHeapProfile", + function (dir: string): RootedFilePath { + owner.ensureInitialized(); + const result = owner.client.apiRequest("saveHeapProfile", { dir }); + return result.file; + }, + function* (dir: string): Generator { + yield* owner.ensureInitialized.gen(); + const result = yield* apiRequest("saveHeapProfile", { dir }); + return result.file; + }, + ); + } +} + +type SnapshotUpdater = ((params: CreateSnapshotParams) => Snapshot) & { gen(params: CreateSnapshotParams): Generator; }; + +export interface SnapshotOperation { + readonly createdPrograms?: readonly Program[] | undefined; + readonly openedFiles?: readonly SnapshotOpenedFileOperation[] | undefined; +} + +export interface SnapshotOpenedFileOperation { + readonly project: Project; +} + +/** Replaces every element of a tuple while preserving its length and index structure. */ +type MapTupleTo = { + readonly [Index in keyof Tuple]: Result; +}; + +/** + * Keeps `Tuple` as an inference target while contextually typing each element from + * `Elements`. The mapped intersection supplies nested completions and excess-property + * checks without widening an inferred tuple to an array. + */ +type ContextualizeTuple< + Tuple extends readonly unknown[] | undefined, + Elements extends readonly unknown[] | undefined, +> = + & Tuple + & { + readonly [Index in keyof Tuple]: NonNullable[number]; + }; + +/** Substitutes the operation arrays with contextually typed, tuple-preserving versions. */ +type SnapshotOperationParams< + Params extends { createPrograms?: readonly unknown[] | undefined; openFiles?: readonly unknown[] | undefined; }, + CreatePrograms extends Params["createPrograms"], + OpenFiles extends Params["openFiles"], +> = Omit & { + createPrograms?: ContextualizeTuple | undefined; + openFiles?: ContextualizeTuple | undefined; +}; + +/** + * Refines a snapshot's operation results to required tuples when the corresponding + * operation arrays were supplied, preserving their lengths for indexed access. + */ +type SnapshotForOperationResults< + CreatePrograms extends readonly unknown[] | undefined, + OpenFiles extends readonly unknown[] | undefined, +> = Snapshot & { + readonly operation: + & SnapshotOperation + & (CreatePrograms extends readonly unknown[] ? { readonly createdPrograms: MapTupleTo>; } : unknown) + & (OpenFiles extends readonly unknown[] ? { readonly openedFiles: MapTupleTo; } : unknown); +}; + +/** Derives the refined snapshot result type from a complete operation parameter type. */ +export type SnapshotForOperation = SnapshotForOperationResults< + Params extends { createPrograms: infer CreatePrograms extends readonly unknown[]; } ? CreatePrograms : undefined, + Params extends { openFiles: infer OpenFiles extends readonly unknown[]; } ? OpenFiles : undefined +>; + +export class Snapshot { + readonly id: number; + readonly operation: SnapshotOperation; + private projectMap: Map; + private toPath: (fileName: string, basePath?: string) => PathKey; + private readonly api: API; + private disposed: boolean = false; + private disposePromise: void | undefined; + private onDispose: () => void; + private snapshotRegistry: SnapshotObjectRegistry; + private projectDataMap: Map; + private updateSnapshot: SnapshotUpdater; + readonly internal: SnapshotInternalAPI; + + private get client(): Client { + return this.api.client; + } + + constructor(data: CreateSnapshotResponse, toPath: (fileName: string, basePath?: string) => PathKey, api: API, onDispose: () => void, updateSnapshot: SnapshotUpdater, baseSnapshot?: Snapshot) { + this.id = data.snapshot; + this.api = api; + this.toPath = toPath; + this.onDispose = onDispose; + this.updateSnapshot = updateSnapshot; + this.projectMap = new Map(); + const projectDataMap = new Map(baseSnapshot?.projectDataMap); + for (const projectId of data.changes?.removedProjects ?? []) { + projectDataMap.delete(projectId); + } + for (const projectData of data.projects) { + projectDataMap.set(projectData.id, projectData); + } + this.projectDataMap = new Map([...projectDataMap].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)); + this.snapshotRegistry = new SnapshotObjectRegistry(this.id); + + for (const projData of this.projectDataMap.values()) { + const project = new Project(projData, this.id, toPath, api, this.snapshotRegistry); + this.projectMap.set(projData.id, project); + } + + this.operation = { + createdPrograms: data.operation.createdPrograms?.map(projectId => this.requireProject(projectId).program), + openedFiles: data.operation.openedFiles?.map(result => ({ project: this.requireProject(result.project) })), + }; + + this.internal = new SnapshotInternalAPI(this.id, api.client); + } + + getProjects(): readonly Project[] { + this.ensureNotDisposed(); + return [...this.projectMap.values()]; + } + + getConfiguredProject(configFileName: string): Project | undefined { + this.ensureNotDisposed(); + const id = this.toPath(configFileName) as ConfiguredProjectId; + return this.projectMap.get(id) as Project | undefined; + } + + getProject(projectId: Id): Project | undefined { + this.ensureNotDisposed(); + return this.projectMap.get(projectId) as Project | undefined; + } + + getProgram(projectId: Id): Program | undefined { + return this.getProject(projectId)?.program; + } + + get update(): { + (params: SnapshotOperationParams): SnapshotForOperationResults; + (params: CreateSnapshotParams): Snapshot; + gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; + gen(params: CreateSnapshotParams): Generator; + } { + const owner = this; + function update(params: SnapshotOperationParams): SnapshotForOperationResults; + function update(params: CreateSnapshotParams): Snapshot; + function update(params: CreateSnapshotParams): Snapshot { + owner.ensureNotDisposed(); + return owner.updateSnapshot(params); + } + function gen(params: SnapshotOperationParams): Generator, ProtocolResponse["result"]>; + function gen(params: CreateSnapshotParams): Generator; + function* gen(params: CreateSnapshotParams): Generator { + owner.ensureNotDisposed(); + return yield* owner.updateSnapshot.gen(params); + } + return cacheGeneratorMethod(owner, "update", update, gen); + } + + /** + * Gets the default project for a given file from the configured projects and + * inferred project already loaded in the snapshot. Synthetic projects are not + * considered. Files that have been opened with `openFiles` are guaranteed to + * have a result. + */ + get getDefaultProjectForFile(): { + (file: DocumentIdentifier): Project | undefined; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDefaultProjectForFile", + function (file: DocumentIdentifier): Project | undefined { + owner.ensureNotDisposed(); + const data = owner.client.apiRequest("getDefaultProjectForFile", { + snapshot: owner.id, + file, + }); + if (!data) return undefined; + return owner.projectMap.get(data.id); + }, + function* (file: DocumentIdentifier): Generator { + owner.ensureNotDisposed(); + const data = yield* apiRequest("getDefaultProjectForFile", { + snapshot: owner.id, + file, + }); + if (!data) return undefined; + return owner.projectMap.get(data.id); + }, + ); + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + get dispose(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "dispose", + function (): void { + return owner.disposePromise ??= owner.disposeWorker(); + }, + function* (): Generator { + return owner.disposePromise ??= yield* owner.disposeWorker.gen(); + }, + ); + } + + private get disposeWorker(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "disposeWorker", + function (): void { + if (owner.disposed) return; + owner.disposed = true; + for (const project of owner.projectMap.values()) { + project.dispose(); + } + owner.projectMap.clear(); + owner.snapshotRegistry.clear(); + try { + owner.client.apiRequest("release", { snapshot: owner.id }); + } + finally { + owner.onDispose(); + } + }, + function* (): Generator { + if (owner.disposed) return; + owner.disposed = true; + for (const project of owner.projectMap.values()) { + project.dispose(); + } + owner.projectMap.clear(); + owner.snapshotRegistry.clear(); + try { + yield* apiRequest("release", { snapshot: owner.id }); + } + finally { + owner.onDispose(); + } + }, + ); + } + + isDisposed(): boolean { + return this.disposed; + } + + private ensureNotDisposed(): void { + if (this.disposed) { + throw new Error("Snapshot is disposed"); + } + } + + private requireProject(projectId: Id): Project { + const project = this.projectMap.get(projectId); + if (!project) { + throw new Error(`Snapshot operation returned unknown project '${projectId}'`); + } + return project as Project; + } +} + +export class ModuleResolver { + readonly id: number; + private readonly client: Client; + private readonly disposeCallback: (() => void) | undefined; + private disposed = false; + + constructor(id: number, client: Client, disposeCallback: (() => void) | undefined) { + this.id = id; + this.client = client; + this.disposeCallback = disposeCallback; + } + + get resolveModuleName(): { + (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): ResolveModuleNameResult; + gen(moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "resolveModuleName", + function (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): ResolveModuleNameResult { + owner.ensureNotDisposed(); + if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { + throw new Error("Snapshot is disposed"); + } + return owner.client.apiRequest("resolveModuleName", { + snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, + inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, + resolver: owner.id, + moduleName, + containingDirectory, + resolutionMode, + }); + }, + function* (moduleName: string, containingDirectory: DocumentIdentifier, resolutionMode?: ResolutionMode, options?: { snapshot?: Snapshot | InProgressSnapshot | undefined; }): Generator { + owner.ensureNotDisposed(); + if (options?.snapshot instanceof Snapshot && options.snapshot.isDisposed()) { + throw new Error("Snapshot is disposed"); + } + return yield* apiRequest("resolveModuleName", { + snapshot: options?.snapshot instanceof Snapshot ? options.snapshot.id : undefined, + inProgressSnapshot: typeof options?.snapshot === "number" ? -options.snapshot : undefined, + resolver: owner.id, + moduleName, + containingDirectory, + resolutionMode, + }); + }, + ); + } + + [globalThis.Symbol.dispose](): void { + return this.dispose(); + } + + get dispose(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "dispose", + function (): void { + if (owner.disposed) return; + owner.client.apiRequest("releaseModuleResolver", { resolver: owner.id }); + owner.disposed = true; + owner.disposeCallback?.(); + }, + function* (): Generator { + if (owner.disposed) return; + yield* apiRequest("releaseModuleResolver", { resolver: owner.id }); + owner.disposed = true; + owner.disposeCallback?.(); + }, + ); + } + + /** @internal */ + ensureNotDisposed(): void { + if (this.disposed) throw new Error("ModuleResolver is disposed"); + } +} + +class SnapshotObjectRegistry { + private readonly symbols: Map = new Map(); + private readonly projectRegistries: Map = new Map(); + private readonly snapshotId: number; + + constructor(snapshotId: number) { + this.snapshotId = snapshotId; + } + + addProjectRegistry(registry: ProjectObjectRegistry): void { + this.projectRegistries.set(registry.project.id, registry); + } + + getOrCreateSymbol(data: SymbolResponse): Symbol { + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.Snapshot) throw new Error(`Symbol ${reference.id} is not snapshot-owned`); + let symbol = this.symbols.get(reference.id); + if (!symbol) { + if (reference.snapshot !== this.snapshotId) { + throw new Error(`Symbol ${reference.id} belongs to snapshot ${reference.snapshot}, not ${this.snapshotId}`); + } + const registry = this.projectRegistries.get(reference.project); + if (!registry) throw new Error(`Symbol ${reference.id} references unknown project '${reference.project}'`); + symbol = new Symbol(data, { kind: SymbolOwnerKind.Snapshot, registry }); + this.symbols.set(reference.id, symbol); + } + return symbol; + } + + getSymbol(id: number): Symbol | undefined { + return this.symbols.get(id); + } + + clear(): void { + this.symbols.clear(); + } +} + +class ProjectObjectRegistry { + private snapshotId: number; + readonly project: Project; + private snapshotRegistry: SnapshotObjectRegistry; + private types: Map = new Map(); + private signatures: Map = new Map(); + private disposed = false; + + private get client(): Client { + return this.project.api.client; + } + + private get sourceFileCache(): SourceFileCache { + return this.project.api.sourceFileCache; + } + + constructor(snapshotId: number, project: Project, snapshotRegistry: SnapshotObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.snapshotRegistry = snapshotRegistry; + snapshotRegistry.addProjectRegistry(this); + } + + getOrCreateSymbol(data: ProtocolSymbolResponse): Symbol { + this.ensureNotDisposed(); + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind === SymbolOwnerKind.Snapshot) { + return this.snapshotRegistry.getOrCreateSymbol(data); + } + const record = this.sourceFileCache.getOrCreateRecord(reference.file, this.snapshotId, this.project.id); + return this.sourceFileCache.getOrCreateSymbol(record, reference.file, reference.id, () => + new Symbol(data, { + kind: SymbolOwnerKind.File, + owner: { record, api: this.project.api }, + })); + } + + /** Find an already-interned symbol and retain its file record for this registry. */ + getCachedSymbol(reference: CompactSymbolReference): Symbol | undefined { + this.ensureNotDisposed(); + if (reference.file === undefined) { + return this.snapshotRegistry.getSymbol(reference.id); + } + const record = this.sourceFileCache.findRecord(reference.file); + const symbol = record?.symbolsById.get(reference.id); + if (record && symbol) { + this.sourceFileCache.retainRecord(record, this.snapshotId, this.project.id); + } + return symbol; + } + + getOrCreateType(data: TypeResponse): TypeObject { + let type = this.types.get(data.id); + if (!type) { + type = new TypeObject(data, this); + this.types.set(data.id, type); + } + return type; + } + + getType(id: number): TypeObject | undefined { + return this.types.get(id); + } + + createNodeHandle(handle: string): NodeHandle { + return new NodeHandle(handle, this.project); + } + + getOrCreateSignature(data: SignatureResponse): Signature { + let sig = this.signatures.get(data.id); + if (!sig) { + sig = new Signature(data, this.project, this); + this.signatures.set(data.id, sig); + } + return sig; + } + + getSignature(id: number): Signature | undefined { + return this.signatures.get(id); + } + + clear(): void { + this.disposed = true; + this.types.clear(); + this.signatures.clear(); + } + + private ensureNotDisposed(): void { + if (this.disposed) throw new Error("Project object registry is disposed"); + } + + get fetchOptionalType(): { + (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T | undefined; + gen(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchOptionalType", + function (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T | undefined { + if (handle !== false) { + if (!handle) return undefined; + const cached = owner.getType(handle); + if (cached) return cached as unknown as T; + } + + const data = owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) return undefined; + return owner.getOrCreateType(data) as unknown as T; + }, + function* (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator { + if (handle !== false) { + if (!handle) return undefined; + const cached = owner.getType(handle); + if (cached) return cached as unknown as T; + } + + const data = yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) return undefined; + return owner.getOrCreateType(data) as unknown as T; + }, + ); + } + + get fetchType(): { + (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T; + gen(source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchType", + function (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): T { + const result = owner.fetchOptionalType(source, method, handle); + if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); + return result; + }, + function* (source: Symbol | Signature | Type, method: TypePropertyMethod, handle: number | false | undefined): Generator { + const result = yield* owner.fetchOptionalType.gen(source, method, handle); + if (result === undefined) throw new Error(`${method} returned no type for ${source.constructor.name} ${source.id}`); + return result; + }, + ); + } + + get fetchSymbol(): { + (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Symbol; + gen(source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbol", + function (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Symbol { + if (!reference) return undefined as unknown as Symbol; + const cached = owner.getCachedSymbol(reference); + if (cached) return cached; + const data = source instanceof Symbol + ? owner.client.apiRequest(method, { symbol: source.reference }) + : owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); + return owner.getOrCreateSymbol(data); + }, + function* (source: Symbol | Signature | Type, method: SymbolPropertyMethod, reference: CompactSymbolReference | undefined): Generator { + if (!reference) return undefined as unknown as Symbol; + const cached = owner.getCachedSymbol(reference); + if (cached) return cached; + const data = source instanceof Symbol + ? yield* apiRequest(method, { symbol: source.reference }) + : yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null symbol for ${source.constructor.name} ${source.id}`); + return owner.getOrCreateSymbol(data); + }, + ); + } + + get fetchSignature(): { + (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Signature; + gen(source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSignature", + function (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Signature { + if (!handle) return undefined as unknown as Signature; + const cached = owner.getSignature(handle); + if (cached) return cached; + + const data = owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); + return owner.getOrCreateSignature(data); + }, + function* (source: Symbol | Signature | Type, method: SignaturePropertyMethod, handle: number | undefined): Generator { + if (!handle) return undefined as unknown as Signature; + const cached = owner.getSignature(handle); + if (cached) return cached; + + const data = yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (!data) throw new Error(`${method} returned null signature for ${source.constructor.name} ${source.id}`); + return owner.getOrCreateSignature(data); + }, + ); + } + + get fetchTypes(): { + (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): readonly Type[]; + gen(source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchTypes", + function (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): readonly Type[] { + if (handles) { + const result = new Array(handles.length); + let allCached = true; + for (let i = 0; i < handles.length; i++) { + const cached = owner.getType(handles[i]); + if (!cached) { + allCached = false; + break; + } + result[i] = cached; + } + if (allCached) return result; + } + const typesData = owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (typesData == null) return []; + else return typesData.map(data => owner.getOrCreateType(data)); + }, + function* (source: Symbol | Signature | Type, method: TypesPropertyMethod, handles?: readonly number[]): Generator { + if (handles) { + const result = new Array(handles.length); + let allCached = true; + for (let i = 0; i < handles.length; i++) { + const cached = owner.getType(handles[i]); + if (!cached) { + allCached = false; + break; + } + result[i] = cached; + } + if (allCached) return result; + } + const typesData = yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + if (typesData == null) return []; + else return typesData.map(data => owner.getOrCreateType(data)); + }, + ); + } + + get fetchSymbols(): { + (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): readonly Symbol[]; + gen(source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbols", + function (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): readonly Symbol[] { + if (references) { + const result = new Array(references.length); + for (let i = 0; i < references.length; i++) { + const cached = owner.getCachedSymbol(references[i]); + if (!cached) { + return owner.fetchSymbolsFromServer(source, method); + } + result[i] = cached; + } + return result; + } + return owner.fetchSymbolsFromServer(source, method); + }, + function* (source: Symbol | Signature | Type, method: SymbolsPropertyMethod, references?: readonly CompactSymbolReference[]): Generator { + if (references) { + const result = new Array(references.length); + for (let i = 0; i < references.length; i++) { + const cached = owner.getCachedSymbol(references[i]); + if (!cached) { + return yield* owner.fetchSymbolsFromServer.gen(source, method); + } + result[i] = cached; + } + return result; + } + return yield* owner.fetchSymbolsFromServer.gen(source, method); + }, + ); + } + + private get fetchSymbolsFromServer(): { + (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): readonly Symbol[]; + gen(source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbolsFromServer", + function (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): readonly Symbol[] { + const data = source instanceof Symbol + ? owner.client.apiRequest(method, { symbol: source.reference }) + : owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + return data?.map(symbol => owner.getOrCreateSymbol(symbol)) ?? []; + }, + function* (source: Symbol | Signature | Type, method: SymbolsPropertyMethod): Generator { + const data = source instanceof Symbol + ? yield* apiRequest(method, { symbol: source.reference }) + : yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + return data?.map(symbol => owner.getOrCreateSymbol(symbol)) ?? []; + }, + ); + } + + // getBaseTypes is a checker-level endpoint keyed by `type` (not `objectId`), + // so it cannot go through fetchTypes. This helper reuses that server method. + get fetchBaseTypes(): { + (source: Type): readonly Type[]; + gen(source: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchBaseTypes", + function (source: Type): readonly Type[] { + const typesData = owner.client.apiRequest("getBaseTypes", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + if (typesData == null) return []; + return typesData.map(data => owner.getOrCreateType(data)); + }, + function* (source: Type): Generator { + const typesData = yield* apiRequest("getBaseTypes", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + if (typesData == null) return []; + return typesData.map(data => owner.getOrCreateType(data)); + }, + ); + } + + get fetchPropertiesOfType(): { + (source: Type): readonly Symbol[]; + gen(source: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchPropertiesOfType", + function (source: Type): readonly Symbol[] { + const data = owner.client.apiRequest("getPropertiesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; + }, + function* (source: Type): Generator { + const data = yield* apiRequest("getPropertiesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; + }, + ); + } + + get fetchApparentPropertiesOfType(): { + (source: Type): readonly Symbol[]; + gen(source: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchApparentPropertiesOfType", + function (source: Type): readonly Symbol[] { + const data = owner.client.apiRequest("getApparentPropertiesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; + }, + function* (source: Type): Generator { + const data = yield* apiRequest("getApparentPropertiesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + objectId: source.id, + }); + return data ? data.map(symbol => owner.getOrCreateSymbol(symbol)) : []; + }, + ); + } + + get fetchPropertyOfType(): { + (source: Type, name: string): Symbol | undefined; + gen(source: Type, name: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchPropertyOfType", + function (source: Type, name: string): Symbol | undefined { + const data = owner.client.apiRequest("getPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + name, + }); + return data ? owner.getOrCreateSymbol(data) : undefined; + }, + function* (source: Type, name: string): Generator { + const data = yield* apiRequest("getPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + name, + }); + return data ? owner.getOrCreateSymbol(data) : undefined; + }, + ); + } + + get fetchSignaturesOfType(): { + (source: Type, kind: SignatureKind): readonly Signature[]; + gen(source: Type, kind: SignatureKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSignaturesOfType", + function (source: Type, kind: SignatureKind): readonly Signature[] { + const data = owner.client.apiRequest("getSignaturesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + kind, + }); + return data.map(signature => owner.getOrCreateSignature(signature)); + }, + function* (source: Type, kind: SignatureKind): Generator { + const data = yield* apiRequest("getSignaturesOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + kind, + }); + return data.map(signature => owner.getOrCreateSignature(signature)); + }, + ); + } + + get fetchIndexInfosOfType(): { + (source: Type): readonly IndexInfo[]; + gen(source: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchIndexInfosOfType", + function (source: Type): readonly IndexInfo[] { + const data = owner.client.apiRequest("getIndexInfosOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + if (!data) return []; + return data.map(info => ({ + keyType: owner.getOrCreateType(info.keyType), + valueType: owner.getOrCreateType(info.valueType), + isReadonly: info.isReadonly ?? false, + declaration: info.declaration ? new NodeHandle(info.declaration, owner.project) : undefined, + })); + }, + function* (source: Type): Generator { + const data = yield* apiRequest("getIndexInfosOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: source.id, + }); + if (!data) return []; + return data.map(info => ({ + keyType: owner.getOrCreateType(info.keyType), + valueType: owner.getOrCreateType(info.valueType), + isReadonly: info.isReadonly ?? false, + declaration: info.declaration ? new NodeHandle(info.declaration, owner.project) : undefined, + })); + }, + ); + } + + get fetchTypeParameterAtPosition(): { + (source: Signature, pos: number): Type; + gen(source: Signature, pos: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchTypeParameterAtPosition", + function (source: Signature, pos: number): Type { + const data = owner.client.apiRequest("getTypeParameterAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: source.id, + index: pos, + }); + return owner.getOrCreateType(data); + }, + function* (source: Signature, pos: number): Generator { + const data = yield* apiRequest("getTypeParameterAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: source.id, + index: pos, + }); + return owner.getOrCreateType(data); + }, + ); + } +} + +export class Project { + /** @internal */ + readonly api: API; + readonly id: Id; + readonly configFileName: RootedFilePath | undefined; + readonly currentDirectory: RootedDirectoryPath; + readonly dirty: boolean; + readonly parsedCommandLine: ParsedCommandLine; + /** @deprecated Use `parsedCommandLine.options`. */ + readonly compilerOptions: CompilerOptions; + /** @deprecated Use `parsedCommandLine.fileNames`. */ + readonly rootFiles: readonly RootedFilePath[]; + + readonly program: Program; + readonly checker: Checker; + readonly languageService: LanguageService; + private snapshotId: number; + + constructor(data: ProjectResponse, snapshotId: number, toPath: (fileName: string, basePath?: string) => PathKey, api: API, snapshotRegistry: SnapshotObjectRegistry) { + this.id = data.id as Id; + this.api = api; + this.configFileName = data.configFileName; + this.currentDirectory = data.currentDirectory; + this.dirty = data.dirty; + if (!data.parsedCommandLine?.options) { + throw new Error(`Project '${data.configFileName}' has no parsed command line`); + } + this.parsedCommandLine = data.parsedCommandLine; + this.compilerOptions = this.parsedCommandLine.options; + this.rootFiles = this.parsedCommandLine.fileNames; + this.snapshotId = snapshotId; + this.program = new Program(snapshotId, this, toPath); + const objectRegistry = new ProjectObjectRegistry(snapshotId, this, snapshotRegistry); + this.checker = new Checker(snapshotId, this, objectRegistry); + this.languageService = new LanguageService(snapshotId, this, objectRegistry); + } + + /** @deprecated Use `languageService.getImportAdderEdits`. */ + get getImportAdderEdits(): { + (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[]; + gen(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getImportAdderEdits", + function (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[] { + return owner.languageService.getImportAdderEdits(file, actions); + }, + function* (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator { + return yield* owner.languageService.getImportAdderEdits.gen(file, actions); + }, + ); + } + + /** @deprecated Use `languageService.getImportEditsForSymbols`. */ + get getImportEditsForSymbols(): { + (file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): readonly TextEdit[]; + gen(file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getImportEditsForSymbols", + function (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): readonly TextEdit[] { + return owner.languageService.getImportEditsForSymbols(file, symbols, options); + }, + function* (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Generator { + return yield* owner.languageService.getImportEditsForSymbols.gen(file, symbols, options); + }, + ); + } + + dispose(): void { + this.checker.dispose(); + } +} + +export class LanguageService { + private snapshotId: number; + private project: Project; + private objectRegistry: ProjectObjectRegistry; + + private get client(): Client { + return this.project.api.client; + } + + constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.objectRegistry = objectRegistry; + } + + get getImportAdderEdits(): { + (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[]; + gen(file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getImportAdderEdits", + function (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): readonly TextEdit[] { + const requestActions: ImportAdderAction[] = actions.map(action => { + switch (action.kind) { + case "importSymbol": + const importSymbolAction: ImportAdderAction = { + kind: "importSymbol", + symbol: action.symbol.reference, + }; + if (action.isValidTypeOnlyUseSite !== undefined) { + importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; + } + return importSymbolAction; + default: + return assertNever(action.kind); + } + }); + + const data = owner.client.apiRequest("getImportAdderEdits", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + actions: requestActions, + }); + return data ?? []; + }, + function* (file: DocumentIdentifier, actions: readonly APIImportAdderAction[]): Generator { + const requestActions: ImportAdderAction[] = actions.map(action => { + switch (action.kind) { + case "importSymbol": + const importSymbolAction: ImportAdderAction = { + kind: "importSymbol", + symbol: action.symbol.reference, + }; + if (action.isValidTypeOnlyUseSite !== undefined) { + importSymbolAction.isValidTypeOnlyUseSite = action.isValidTypeOnlyUseSite; + } + return importSymbolAction; + default: + return assertNever(action.kind); + } + }); + + const data = yield* apiRequest("getImportAdderEdits", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + actions: requestActions, + }); + return data ?? []; + }, + ); + } + + get getImportEditsForSymbols(): { + (file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): readonly TextEdit[]; + gen(file: DocumentIdentifier, symbols: readonly Symbol[], options?: GetImportEditsForSymbolsOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getImportEditsForSymbols", + function (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): readonly TextEdit[] { + return owner.getImportAdderEdits( + file, + symbols.map((symbol): APIImportAdderAction => { + if (options.isValidTypeOnlyUseSite !== undefined) { + return { + kind: "importSymbol", + symbol, + isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, + }; + } + return { + kind: "importSymbol", + symbol, + }; + }), + ); + }, + function* (file: DocumentIdentifier, symbols: readonly Symbol[], options: GetImportEditsForSymbolsOptions = {}): Generator { + return yield* owner.getImportAdderEdits.gen( + file, + symbols.map((symbol): APIImportAdderAction => { + if (options.isValidTypeOnlyUseSite !== undefined) { + return { + kind: "importSymbol", + symbol, + isValidTypeOnlyUseSite: options.isValidTypeOnlyUseSite, + }; + } + return { + kind: "importSymbol", + symbol, + }; + }), + ); + }, + ); + } + + get getReferencedSymbolsForNode(): { + (node: Node, position: number): ReferencedSymbolEntry[]; + gen(node: Node, position: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReferencedSymbolsForNode", + function (node: Node, position: number): ReferencedSymbolEntry[] { + const data = owner.client.apiRequest("getReferencedSymbolsForNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + node: getNodeId(node), + position, + }); + return (data ?? []).map(entry => ({ + definition: new NodeHandle(entry.definition, owner.project), + symbol: entry.symbol ? owner.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, + references: (entry.references ?? []).map(h => new NodeHandle(h, owner.project)), + })); + }, + function* (node: Node, position: number): Generator { + const data = yield* apiRequest("getReferencedSymbolsForNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + node: getNodeId(node), + position, + }); + return (data ?? []).map(entry => ({ + definition: new NodeHandle(entry.definition, owner.project), + symbol: entry.symbol ? owner.objectRegistry.getOrCreateSymbol(entry.symbol) : undefined, + references: (entry.references ?? []).map(h => new NodeHandle(h, owner.project)), + })); + }, + ); + } + + get getSignatureUsage(): { + (signatureDecl: Node): SignatureUsage[]; + gen(signatureDecl: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSignatureUsage", + function (signatureDecl: Node): SignatureUsage[] { + const data = owner.client.apiRequest("getSignatureUsages", { + snapshot: owner.snapshotId, + project: owner.project.id, + signatureDecl: getNodeId(signatureDecl), + }); + return (data ?? []).map(entry => ({ + name: new NodeHandle(entry.name, owner.project), + call: entry.call ? new NodeHandle(entry.call, owner.project) : undefined, + })); + }, + function* (signatureDecl: Node): Generator { + const data = yield* apiRequest("getSignatureUsages", { + snapshot: owner.snapshotId, + project: owner.project.id, + signatureDecl: getNodeId(signatureDecl), + }); + return (data ?? []).map(entry => ({ + name: new NodeHandle(entry.name, owner.project), + call: entry.call ? new NodeHandle(entry.call, owner.project) : undefined, + })); + }, + ); + } + + get getCompletionsAtPosition(): { + (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined; + gen(document: string, position: number, options?: CompletionOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getCompletionsAtPosition", + function (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined { + const data = owner.client.apiRequest("getCompletionsAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: document, + position, + triggerCharacter: options?.triggerCharacter, + includeSymbol: options?.includeSymbol, + }); + if (!data) return undefined; + return { + isIncomplete: data.isIncomplete, + entries: data.entries.map(e => ({ + ...e, + symbol: e.symbol ? owner.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, + })), + }; + }, + function* (document: string, position: number, options?: CompletionOptions): Generator { + const data = yield* apiRequest("getCompletionsAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: document, + position, + triggerCharacter: options?.triggerCharacter, + includeSymbol: options?.includeSymbol, + }); + if (!data) return undefined; + return { + isIncomplete: data.isIncomplete, + entries: data.entries.map(e => ({ + ...e, + symbol: e.symbol ? owner.objectRegistry.getOrCreateSymbol(e.symbol) : undefined, + })), + }; + }, + ); + } +} + +export class Program implements FormatDiagnosticsHost { + /** @internal */ + readonly snapshotId: number; + readonly id: Id; + private readonly project: Project; + private readonly toPath: (fileName: string, basePath?: string) => PathKey; + private readonly decoder = new Wtf8Decoder(); + private readonly sourceFileMetadataCache = new Map(); + private ownedSnapshot: Snapshot | undefined; + private disposePromise: void | undefined; + + private get client(): Client { + return this.project.api.client; + } + + private get sourceFileCache(): SourceFileCache { + return this.project.api.sourceFileCache; + } + + constructor(snapshotId: number, project: Project, toPath: (fileName: string, basePath?: string) => PathKey) { + this.snapshotId = snapshotId; + this.id = project.id; + this.project = project; + this.toPath = toPath; + } + + getCurrentDirectory(): RootedDirectoryPath { + return this.project.currentDirectory; + } + + getCanonicalFileName(fileName: string): string { + return this.project.api.getCanonicalFileName(fileName); + } + + getNewLine(): string { + return this.project.compilerOptions.newLine === NewLineKind.CRLF ? "\r\n" : "\n"; + } + + /** @internal */ + setOwnedSnapshot(snapshot: Snapshot): void { + this.ownedSnapshot = snapshot; + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + + get dispose(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "dispose", + function (): void { + return owner.disposePromise ??= owner.disposeWorker(); + }, + function* (): Generator { + return owner.disposePromise ??= yield* owner.disposeWorker.gen(); + }, + ); + } + + private get disposeWorker(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "disposeWorker", + function (): void { + const snapshot = owner.ownedSnapshot; + owner.ownedSnapshot = undefined; + if (snapshot) snapshot.dispose(); + }, + function* (): Generator { + const snapshot = owner.ownedSnapshot; + owner.ownedSnapshot = undefined; + if (snapshot) yield* snapshot.dispose.gen(); + }, + ); + } + + getCompilerOptions(): CompilerOptions { + return this.project.compilerOptions; + } + + get getSourceFile(): { + (file: DocumentIdentifier): SourceFile | undefined; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFile", + function (file: DocumentIdentifier): SourceFile | undefined { + const fileName = resolveFileName(file); + const path = owner.pathKeyForFileName(fileName); + return owner.getSourceFileWorker(file, path); + }, + function* (file: DocumentIdentifier): Generator { + const fileName = resolveFileName(file); + const path = owner.pathKeyForFileName(fileName); + return yield* owner.getSourceFileWorker.gen(file, path); + }, + ); + } + + /** + * Returns the source file for an already-canonical path. + * + * @internal + */ + get getSourceFileByPath(): { + (path: PathKey): SourceFile | undefined; + gen(path: PathKey): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFileByPath", + function (path: PathKey): SourceFile | undefined { + // The wire format is a string, but the cache key remains the supplied + // PathKey and is never treated as a RootedPath. + return owner.getSourceFileWorker(path, path); + }, + function* (path: PathKey): Generator { + // The wire format is a string, but the cache key remains the supplied + // PathKey and is never treated as a RootedPath. + return yield* owner.getSourceFileWorker.gen(path, path); + }, + ); + } + + private get getSourceFileWorker(): { + (file: DocumentIdentifier, path: PathKey): SourceFile | undefined; + gen(file: DocumentIdentifier, path: PathKey): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFileWorker", + function (file: DocumentIdentifier, path: PathKey): SourceFile | undefined { + // Check if we already have a retained cache entry for this (snapshot, project) pair + const retained = owner.sourceFileCache.getRetained(path, owner.snapshotId, owner.project.id); + if (retained) { + return retained as unknown as SourceFile; + } + + // Fetch from server + const binaryData = owner.client.apiRequestBinary("getSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + }); + if (!binaryData) { + return undefined; + } + + // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) + const decoded = new RemoteSourceFile(binaryData, owner.decoder, owner.client.getTimingCollector(), owner.project.api); + return owner.sourceFileCache.set(decoded, owner.snapshotId, owner.project.id) as unknown as SourceFile; + }, + function* (file: DocumentIdentifier, path: PathKey): Generator { + // Check if we already have a retained cache entry for this (snapshot, project) pair + const retained = owner.sourceFileCache.getRetained(path, owner.snapshotId, owner.project.id); + if (retained) { + return retained as unknown as SourceFile; + } + + // Fetch from server + const binaryData = sourceFileResponseToUint8Array( + yield* apiRequest("getSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + }), + ); + if (!binaryData) { + return undefined; + } + + // Create a new RemoteSourceFile and cache it (set returns existing if hash matches) + const decoded = new RemoteSourceFile(binaryData, owner.decoder, owner.client.getTimingCollector(), owner.project.api); + return owner.sourceFileCache.set(decoded, owner.snapshotId, owner.project.id) as unknown as SourceFile; + }, + ); + } + + get getResolvedModule(): { + (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): ResolvedModule | undefined; + gen(file: DocumentIdentifier, moduleName: string, mode: ModuleKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedModule", + function (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): ResolvedModule | undefined { + const result = owner.client.apiRequest("getResolvedModule", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + moduleName, + mode, + }); + return result ?? undefined; + }, + function* (file: DocumentIdentifier, moduleName: string, mode: ModuleKind): Generator { + const result = yield* apiRequest("getResolvedModule", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + moduleName, + mode, + }); + return result ?? undefined; + }, + ); + } + + get getModeForUsageLocation(): { + (file: DocumentIdentifier, usage: StringLiteralLikeNode): ModuleKind; + gen(file: DocumentIdentifier, usage: StringLiteralLikeNode): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getModeForUsageLocation", + function (file: DocumentIdentifier, usage: StringLiteralLikeNode): ModuleKind { + return owner.client.apiRequest("getModeForUsageLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + usage: getNodeId(usage), + }); + }, + function* (file: DocumentIdentifier, usage: StringLiteralLikeNode): Generator { + return yield* apiRequest("getModeForUsageLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + usage: getNodeId(usage), + }); + }, + ); + } + + get getModeForResolutionAtIndex(): { + (file: DocumentIdentifier, index: number): ModuleKind; + gen(file: DocumentIdentifier, index: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getModeForResolutionAtIndex", + function (file: DocumentIdentifier, index: number): ModuleKind { + return owner.client.apiRequest("getModeForResolutionAtIndex", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + index, + }); + }, + function* (file: DocumentIdentifier, index: number): Generator { + return yield* apiRequest("getModeForResolutionAtIndex", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + index, + }); + }, + ); + } + + get getResolvedModuleFromModuleSpecifier(): { + (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): ResolvedModule | undefined; + gen(moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedModuleFromModuleSpecifier", + function (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): ResolvedModule | undefined { + const result = owner.client.apiRequest("getResolvedModuleFromModuleSpecifier", { + snapshot: owner.snapshotId, + project: owner.project.id, + moduleSpecifier: getNodeId(moduleSpecifier), + sourceFile, + }); + return result ?? undefined; + }, + function* (moduleSpecifier: StringLiteralLikeNode, sourceFile?: DocumentIdentifier): Generator { + const result = yield* apiRequest("getResolvedModuleFromModuleSpecifier", { + snapshot: owner.snapshotId, + project: owner.project.id, + moduleSpecifier: getNodeId(moduleSpecifier), + sourceFile, + }); + return result ?? undefined; + }, + ); + } + + get getResolvedTypeReferenceDirective(): { + (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): ResolvedTypeReferenceDirective | undefined; + gen(file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedTypeReferenceDirective", + function (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): ResolvedTypeReferenceDirective | undefined { + const result = owner.client.apiRequest("getResolvedTypeReferenceDirective", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + typeDirectiveName, + mode, + }); + return result ?? undefined; + }, + function* (file: DocumentIdentifier, typeDirectiveName: string, mode: ModuleKind): Generator { + const result = yield* apiRequest("getResolvedTypeReferenceDirective", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + typeDirectiveName, + mode, + }); + return result ?? undefined; + }, + ); + } + + get getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(): { + (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): ResolvedTypeReferenceDirective | undefined; + gen(typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", + function (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): ResolvedTypeReferenceDirective | undefined { + const result = owner.client.apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { + snapshot: owner.snapshotId, + project: owner.project.id, + sourceFile, + typeDirectiveName: typeReferenceDirective.fileName, + resolutionMode: typeReferenceDirective.resolutionMode, + }); + return result ?? undefined; + }, + function* (typeReferenceDirective: FileReference, sourceFile: DocumentIdentifier): Generator { + const result = yield* apiRequest("getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", { + snapshot: owner.snapshotId, + project: owner.project.id, + sourceFile, + typeDirectiveName: typeReferenceDirective.fileName, + resolutionMode: typeReferenceDirective.resolutionMode, + }); + return result ?? undefined; + }, + ); + } + + get getSourceFileNames(): { + (): readonly RootedFilePath[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFileNames", + function (): readonly RootedFilePath[] { + const data = owner.client.apiRequest("getSourceFileNames", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + function* (): Generator { + const data = yield* apiRequest("getSourceFileNames", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + ); + } + + /** + * Returns program-stored metadata for the given source file, or `undefined` if the file + * is not part of the program. Metadata is fetched lazily per file and cached on this + * `Program` instance. + */ + get getSourceFileMetadata(): { + (file: DocumentIdentifier): SourceFileMetadata | undefined; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFileMetadata", + function (file: DocumentIdentifier): SourceFileMetadata | undefined { + return owner.getSourceFileMetadataByPath(owner.pathKeyForFileName(resolveFileName(file))); + }, + function* (file: DocumentIdentifier): Generator { + return yield* owner.getSourceFileMetadataByPath.gen(owner.pathKeyForFileName(resolveFileName(file))); + }, + ); + } + + /** + * Returns program-stored metadata for the source file at the given path, or `undefined` + * if the file is not part of the program. Like {@link getSourceFileMetadata}, but skips + * the file name to path conversion. Metadata is fetched lazily per file and cached on + * this `Program` instance. + */ + get getSourceFileMetadataByPath(): { + (path: PathKey): SourceFileMetadata | undefined; + gen(path: PathKey): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSourceFileMetadataByPath", + function (path: PathKey): SourceFileMetadata | undefined { + let metadata = owner.sourceFileMetadataCache.get(path); + if (metadata === undefined) { + metadata = owner.fetchSourceFileMetadata(path); + owner.sourceFileMetadataCache.set(path, metadata); + } + return metadata; + }, + function* (path: PathKey): Generator { + let metadata = owner.sourceFileMetadataCache.get(path); + if (metadata === undefined) { + metadata = yield* owner.fetchSourceFileMetadata.gen(path); + owner.sourceFileMetadataCache.set(path, metadata); + } + return metadata; + }, + ); + } + + private get fetchSourceFileMetadata(): { + (path: PathKey): SourceFileMetadata | undefined; + gen(path: PathKey): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSourceFileMetadata", + function (path: PathKey): SourceFileMetadata | undefined { + // PathKey is serialized as a string; the server deliberately treats all + // client-provided path text as untrusted input. + const data = owner.client.apiRequest("getSourceFileMetadata", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: path, + }); + return data ?? undefined; + }, + function* (path: PathKey): Generator { + // PathKey is serialized as a string; the server deliberately treats all + // client-provided path text as untrusted input. + const data = yield* apiRequest("getSourceFileMetadata", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: path, + }); + return data ?? undefined; + }, + ); + } + + private pathKeyForFileName(fileName: string): PathKey { + return this.toPath(fileName, this.project.currentDirectory); + } + + /** + * Returns whether the given source file was loaded as part of an external library + * (e.g. a dependency resolved from `node_modules`). The underlying program metadata is + * fetched lazily per file and cached on this `Program` instance. + */ + get isSourceFileFromExternalLibrary(): { + (file: SourceFile): boolean; + gen(file: SourceFile): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isSourceFileFromExternalLibrary", + function (file: SourceFile): boolean { + const metadata = owner.getSourceFileMetadataByPath(file.path); + return metadata?.isFromExternalLibrary ?? false; + }, + function* (file: SourceFile): Generator { + const metadata = yield* owner.getSourceFileMetadataByPath.gen(file.path); + return metadata?.isFromExternalLibrary ?? false; + }, + ); + } + + /** + * Returns whether the given source file is a default library file (e.g. `lib.d.ts`). + * The underlying program metadata is fetched lazily per file and cached on this + * `Program` instance. + */ + get isSourceFileDefaultLibrary(): { + (file: SourceFile): boolean; + gen(file: SourceFile): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isSourceFileDefaultLibrary", + function (file: SourceFile): boolean { + const metadata = owner.getSourceFileMetadataByPath(file.path); + return metadata?.isDefaultLibrary ?? false; + }, + function* (file: SourceFile): Generator { + const metadata = yield* owner.getSourceFileMetadataByPath.gen(file.path); + return metadata?.isDefaultLibrary ?? false; + }, + ); + } + + /** + * Get all config source file names associated with this program's project config. + * Includes the root config file and any extended config files. + */ + get getConfigFileNames(): { + (): readonly RootedFilePath[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConfigFileNames", + function (): readonly RootedFilePath[] { + const data = owner.client.apiRequest("getConfigFileNames", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + function* (): Generator { + const data = yield* apiRequest("getConfigFileNames", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + ); + } + + /** + * Get a config source file by file name/URI. + * This can return the project's root tsconfig file or one of its extended config files. + */ + get getConfigSourceFile(): { + (file: DocumentIdentifier): SourceFile | undefined; + gen(file: DocumentIdentifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConfigSourceFile", + function (file: DocumentIdentifier): SourceFile | undefined { + const binaryData = owner.client.apiRequestBinary("getConfigSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + }); + if (!binaryData) { + return undefined; + } + + return new RemoteSourceFile(binaryData, owner.decoder, undefined, owner.project.api) as unknown as SourceFile; + }, + function* (file: DocumentIdentifier): Generator { + const binaryData = sourceFileResponseToUint8Array( + yield* apiRequest("getConfigSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + }), + ); + if (!binaryData) { + return undefined; + } + + return new RemoteSourceFile(binaryData, owner.decoder, undefined, owner.project.api) as unknown as SourceFile; + }, + ); + } + + /** + * Get syntactic (parse) diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + get getSyntacticDiagnostics(): { + (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; + gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSyntacticDiagnostics", + function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = owner.client.apiRequest("getSyntacticDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = yield* apiRequest("getSyntacticDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + ); + } + + /** + * Get binder diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + get getBindDiagnostics(): { + (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; + gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBindDiagnostics", + function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = owner.client.apiRequest("getBindDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = yield* apiRequest("getBindDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + ); + } + + /** + * Get semantic (type-check) diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + get getSemanticDiagnostics(): { + (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; + gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSemanticDiagnostics", + function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = owner.client.apiRequest("getSemanticDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = yield* apiRequest("getSemanticDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + ); + } + + /** + * Get suggestion diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + get getSuggestionDiagnostics(): { + (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; + gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSuggestionDiagnostics", + function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = owner.client.apiRequest("getSuggestionDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = yield* apiRequest("getSuggestionDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + ); + } + + /** + * Get declaration emit diagnostics for specific files or all files. + * @param file - Optional file(s) to get diagnostics for. If omitted, returns diagnostics for all files. + */ + get getDeclarationDiagnostics(): { + (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[]; + gen(file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDeclarationDiagnostics", + function (file?: DocumentIdentifier | readonly DocumentIdentifier[]): readonly Diagnostic[] { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = owner.client.apiRequest("getDeclarationDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + function* (file?: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + const files = file === undefined ? undefined + : Array.isArray(file) ? file + : [file]; + const data = yield* apiRequest("getDeclarationDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return data ?? []; + }, + ); + } + + /** + * Get program-wide diagnostics for the project, including compiler options diagnostics. + */ + get getProgramDiagnostics(): { + (): readonly Diagnostic[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getProgramDiagnostics", + function (): readonly Diagnostic[] { + const data = owner.client.apiRequest("getProgramDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + function* (): Generator { + const data = yield* apiRequest("getProgramDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + ); + } + + /** + * Get global (non-file-specific) semantic diagnostics for the project. + */ + get getGlobalDiagnostics(): { + (): readonly Diagnostic[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getGlobalDiagnostics", + function (): readonly Diagnostic[] { + const data = owner.client.apiRequest("getGlobalDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + function* (): Generator { + const data = yield* apiRequest("getGlobalDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + ); + } + + /** + * Get config file parsing diagnostics for the project. + */ + get getConfigFileParsingDiagnostics(): { + (): readonly Diagnostic[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConfigFileParsingDiagnostics", + function (): readonly Diagnostic[] { + const data = owner.client.apiRequest("getConfigFileParsingDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + function* (): Generator { + const data = yield* apiRequest("getConfigFileParsingDiagnostics", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return data ?? []; + }, + ); + } + + /** + * Emits files to the configured filesystem. Layer and host filesystems are + * written through; full filesystems remain immutable and return emitted + * files in {@link EmitResult.fileSystem}. + */ + get emit(): { + (emitOnly?: EmitOnly): EmitResult; + gen(emitOnly?: EmitOnly): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "emit", + function (emitOnly?: EmitOnly): EmitResult { + const response = owner.client.apiRequest("emit", { + snapshot: owner.snapshotId, + project: owner.project.id, + emitOnly, + }); + const fileSystem = response.emittedFilesContents.length + ? { + kind: "layer" as const, + files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), + } + : undefined; + return { + emitSkipped: response.emitSkipped, + diagnostics: response.diagnostics, + emittedFiles: response.emittedFiles, + fileSystem, + }; + }, + function* (emitOnly?: EmitOnly): Generator { + const response = yield* apiRequest("emit", { + snapshot: owner.snapshotId, + project: owner.project.id, + emitOnly, + }); + const fileSystem = response.emittedFilesContents.length + ? { + kind: "layer" as const, + files: Object.fromEntries(response.emittedFiles.map((fileName, index) => [fileName, response.emittedFilesContents[index]])), + } + : undefined; + return { + emitSkipped: response.emitSkipped, + diagnostics: response.diagnostics, + emittedFiles: response.emittedFiles, + fileSystem, + }; + }, + ); + } + + /** + * Emits files and returns their contents without writing to the filesystem. + */ + get emitToString(): { + (emitOnly?: EmitOnly): EmitOutput; + gen(emitOnly?: EmitOnly): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "emitToString", + function (emitOnly?: EmitOnly): EmitOutput { + const response = owner.client.apiRequest("emitToString", { + snapshot: owner.snapshotId, + project: owner.project.id, + emitOnly, + }); + return toEmitOutput(response); + }, + function* (emitOnly?: EmitOnly): Generator { + const response = yield* apiRequest("emitToString", { + snapshot: owner.snapshotId, + project: owner.project.id, + emitOnly, + }); + return toEmitOutput(response); + }, + ); + } + + /** + * Gets JavaScript output for selected files regardless of project `noEmit`, `emitDeclarationOnly`, and `noEmitOnError` settings. + */ + get getJavaScriptEmit(): { + (files: readonly DocumentIdentifier[]): EmitOutput; + gen(files: readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getJavaScriptEmit", + function (files: readonly DocumentIdentifier[]): EmitOutput { + const response = owner.client.apiRequest("getJavaScriptEmit", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return toEmitOutput(response); + }, + function* (files: readonly DocumentIdentifier[]): Generator { + const response = yield* apiRequest("getJavaScriptEmit", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return toEmitOutput(response); + }, + ); + } + + /** + * Gets declaration output for selected files regardless of project `noEmit`, `declaration`, `emitDeclarationOnly`, and `noEmitOnError` settings. + */ + get getDeclarationEmit(): { + (files: readonly DocumentIdentifier[]): EmitOutput; + gen(files: readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDeclarationEmit", + function (files: readonly DocumentIdentifier[]): EmitOutput { + const response = owner.client.apiRequest("getDeclarationEmit", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return toEmitOutput(response); + }, + function* (files: readonly DocumentIdentifier[]): Generator { + const response = yield* apiRequest("getDeclarationEmit", { + snapshot: owner.snapshotId, + project: owner.project.id, + files, + }); + return toEmitOutput(response); + }, + ); + } + + getProject(): Project { + return this.project; + } +} + +export interface BuildOrchestratorOptions { + cwd?: string | undefined; + dry?: boolean; + force?: boolean; + verbose?: boolean; + stopBuildOnErrors?: boolean; + overrideCompilerOptions?: OverrideCompilerOptions; +} + +export interface OverrideCompilerOptions { + incremental?: boolean; + assumeChangesOnlyAffectDirectDependencies?: boolean; + declaration?: boolean; + declarationMap?: boolean; + emitDeclarationOnly?: boolean; + sourceMap?: boolean; + inlineSourceMap?: boolean; + traceResolution?: boolean; +} + +export class BuildOrchestrator { + private client: Client; + private id: number; + private disposed = false; + private disposePromise: void | undefined; + private onDispose: () => void; + + constructor( + client: Client, + orchestratorResponse: CreateBuildOrchestratorResponse, + onDispose: () => void, + ) { + this.client = client; + this.id = orchestratorResponse.buildOrchestratorID; + this.onDispose = onDispose; + } + + [globalThis.Symbol.dispose](): void { + void this.dispose(); + } + get dispose(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "dispose", + function (): void { + return owner.disposePromise ??= owner.disposeWorker(); + }, + function* (): Generator { + return owner.disposePromise ??= yield* owner.disposeWorker.gen(); + }, + ); + } + + private get disposeWorker(): { + (): void; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "disposeWorker", + function (): void { + if (owner.disposed) return; + owner.disposed = true; + try { + owner.client.apiRequest("disposeBuildOrchestrator", { + buildOrchestratorID: owner.id, + }); + } + finally { + owner.onDispose(); + } + }, + function* (): Generator { + if (owner.disposed) return; + owner.disposed = true; + try { + yield* apiRequest("disposeBuildOrchestrator", { + buildOrchestratorID: owner.id, + }); + } + finally { + owner.onDispose(); + } + }, + ); + } + + get build(): { + (project?: string): BuildResponse; + gen(project?: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "build", + function (project?: string): BuildResponse { + owner.ensureNotDisposed(); + const response = owner.client.apiRequest("build", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + function* (project?: string): Generator { + owner.ensureNotDisposed(); + const response = yield* apiRequest("build", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + ); + } + get buildReferences(): { + (project: string): BuildResponse; + gen(project: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "buildReferences", + function (project: string): BuildResponse { + owner.ensureNotDisposed(); + const response = owner.client.apiRequest("buildReferences", { + buildOrchestratorID: owner.id, + project, + }); + return response; + }, + function* (project: string): Generator { + owner.ensureNotDisposed(); + const response = yield* apiRequest("buildReferences", { + buildOrchestratorID: owner.id, + project, + }); + return response; + }, + ); + } + get clean(): { + (project?: string): CleanBuildResponse; + gen(project?: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "clean", + function (project?: string): CleanBuildResponse { + owner.ensureNotDisposed(); + const response = owner.client.apiRequest("cleanBuild", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + function* (project?: string): Generator { + owner.ensureNotDisposed(); + const response = yield* apiRequest("cleanBuild", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + ); + } + get cleanReferences(): { + (project?: string): CleanBuildResponse; + gen(project?: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "cleanReferences", + function (project?: string): CleanBuildResponse { + owner.ensureNotDisposed(); + const response = owner.client.apiRequest("cleanReferences", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + function* (project?: string): Generator { + owner.ensureNotDisposed(); + const response = yield* apiRequest("cleanReferences", { + buildOrchestratorID: owner.id, + ...(project !== undefined ? { project } : {}), + }); + return response; + }, + ); + } + + isDisposed(): boolean { + return this.disposed; + } + + private ensureNotDisposed(): void { + if (this.disposed) { + throw new Error("Build orchestrator is disposed"); + } + } +} + +function toEmitOutput(response: ProtocolEmitOutputResponse): EmitOutput { + const outputFiles = new Map(); + for (const { fileName, ...outputFile } of response.outputFiles) { + outputFiles.set(fileName, outputFile); + } + return { + emitSkipped: response.emitSkipped, + diagnostics: response.diagnostics, + outputFiles, + }; +} + +export class Checker { + private snapshotId: number; + private project: Project; + private objectRegistry: ProjectObjectRegistry; + private wellKnownSymbols: { unknown: number; undefined: number; arguments: number; } | undefined; + private wellKnownSignatures: { unknown: number; } | undefined; + + private get client(): Client { + return this.project.api.client; + } + + constructor(snapshotId: number, project: Project, objectRegistry: ProjectObjectRegistry) { + this.snapshotId = snapshotId; + this.project = project; + this.objectRegistry = objectRegistry; + } + + dispose(): void { + this.objectRegistry.clear(); + } + + /** Get the merged symbol, or the original symbol if it has not been merged. */ + get getMergedSymbol(): { + (symbol: Symbol): Symbol; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getMergedSymbol", + function (symbol: Symbol): Symbol { + const data = owner.client.apiRequest("getMergedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getMergedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + ); + } + + /** + * Get a node's merged symbol. For a declaration, prefer + * {@link Checker.getSymbolOfDeclaration} for a non-nullable result. + */ + get getSymbolOfNode(): { + (node: Node): Symbol | undefined; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSymbolOfNode", + function (node: Node): Symbol | undefined { + const data = owner.client.apiRequest("getSymbolOfNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getSymbolOfNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + /** Get a declaration's merged symbol. */ + get getSymbolOfDeclaration(): { + (node: Declaration): Symbol; + gen(node: Declaration): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSymbolOfDeclaration", + function (node: Declaration): Symbol { + const data = owner.client.apiRequest("getSymbolOfDeclarationForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + // Declarations normally have symbols, but preserve unexpected null results at runtime. + return (data && owner.objectRegistry.getOrCreateSymbol(data))!; + }, + function* (node: Declaration): Generator { + const data = yield* apiRequest("getSymbolOfDeclarationForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + // Declarations normally have symbols, but preserve unexpected null results at runtime. + return (data && owner.objectRegistry.getOrCreateSymbol(data))!; + }, + ); + } + + /** Get a symbol's merged parent, if any. */ + get getParentOfSymbol(): { + (symbol: Symbol): Symbol | undefined; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getParentOfSymbol", + function (symbol: Symbol): Symbol | undefined { + const data = owner.client.apiRequest("getParentOfSymbolForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getParentOfSymbolForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + get getSymbolAtLocation(): { + (node: Node): Symbol | undefined; + (nodes: readonly Node[]): (Symbol | undefined)[]; + gen(node: Node): Generator; + gen(nodes: readonly Node[]): Generator; + } { + const owner = this; + function getSymbolAtLocation(node: Node): Symbol | undefined; + function getSymbolAtLocation(nodes: readonly Node[]): (Symbol | undefined)[]; + function getSymbolAtLocation(nodeOrNodes: Node | readonly Node[]): Symbol | (Symbol | undefined)[] | undefined { + if (Array.isArray(nodeOrNodes)) { + const data = owner.client.apiRequest("getSymbolsAtLocations", { + snapshot: owner.snapshotId, + project: owner.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = owner.client.apiRequest("getSymbolAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + function gen(node: Node): Generator; + function gen(nodes: readonly Node[]): Generator; + function* gen(nodeOrNodes: Node | readonly Node[]): Generator { + if (Array.isArray(nodeOrNodes)) { + const data = yield* apiRequest("getSymbolsAtLocations", { + snapshot: owner.snapshotId, + project: owner.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = yield* apiRequest("getSymbolAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + return cacheGeneratorMethod(owner, "getSymbolAtLocation", getSymbolAtLocation, gen); + } + + get getSymbolAtPosition(): { + (file: DocumentIdentifier, position: number): Symbol | undefined; + (file: DocumentIdentifier, positions: readonly number[]): (Symbol | undefined)[]; + gen(file: DocumentIdentifier, position: number): Generator; + gen(file: DocumentIdentifier, positions: readonly number[]): Generator; + } { + const owner = this; + function getSymbolAtPosition(file: DocumentIdentifier, position: number): Symbol | undefined; + function getSymbolAtPosition(file: DocumentIdentifier, positions: readonly number[]): (Symbol | undefined)[]; + function getSymbolAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Symbol | (Symbol | undefined)[] | undefined { + if (typeof positionOrPositions === "number") { + const data = owner.client.apiRequest("getSymbolAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + position: positionOrPositions, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + const data = owner.client.apiRequest("getSymbolsAtPositions", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + function gen(file: DocumentIdentifier, position: number): Generator; + function gen(file: DocumentIdentifier, positions: readonly number[]): Generator; + function* gen(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Generator { + if (typeof positionOrPositions === "number") { + const data = yield* apiRequest("getSymbolAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + position: positionOrPositions, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + const data = yield* apiRequest("getSymbolsAtPositions", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + return cacheGeneratorMethod(owner, "getSymbolAtPosition", getSymbolAtPosition, gen); + } + + get getSymbolOfSourceFile(): { + (file: DocumentIdentifier): Symbol | undefined; + (files: readonly DocumentIdentifier[]): (Symbol | undefined)[]; + gen(file: DocumentIdentifier): Generator; + gen(files: readonly DocumentIdentifier[]): Generator; + } { + const owner = this; + function getSymbolOfSourceFile(file: DocumentIdentifier): Symbol | undefined; + function getSymbolOfSourceFile(files: readonly DocumentIdentifier[]): (Symbol | undefined)[]; + function getSymbolOfSourceFile(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Symbol | (Symbol | undefined)[] | undefined { + if (Array.isArray(fileOrFiles)) { + const data = owner.client.apiRequest("getSymbolsOfSourceFiles", { + snapshot: owner.snapshotId, + project: owner.project.id, + files: fileOrFiles, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = owner.client.apiRequest("getSymbolOfSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: fileOrFiles as DocumentIdentifier, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + function gen(file: DocumentIdentifier): Generator; + function gen(files: readonly DocumentIdentifier[]): Generator; + function* gen(fileOrFiles: DocumentIdentifier | readonly DocumentIdentifier[]): Generator { + if (Array.isArray(fileOrFiles)) { + const data = yield* apiRequest("getSymbolsOfSourceFiles", { + snapshot: owner.snapshotId, + project: owner.project.id, + files: fileOrFiles, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateSymbol(d) : undefined); + } + const data = yield* apiRequest("getSymbolOfSourceFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file: fileOrFiles as DocumentIdentifier, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + } + return cacheGeneratorMethod(owner, "getSymbolOfSourceFile", getSymbolOfSourceFile, gen); + } + + /** + * Get the type of a symbol. Always returns a type; for symbols whose type + * cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + get getTypeOfSymbol(): { + (symbol: Symbol): Type; + (symbols: readonly Symbol[]): Type[]; + gen(symbol: Symbol): Generator; + gen(symbols: readonly Symbol[]): Generator; + } { + const owner = this; + function getTypeOfSymbol(symbol: Symbol): Type; + function getTypeOfSymbol(symbols: readonly Symbol[]): Type[]; + function getTypeOfSymbol(symbolOrSymbols: Symbol | readonly Symbol[]): Type | Type[] { + if (Array.isArray(symbolOrSymbols)) { + const data = owner.client.apiRequest("getTypesOfSymbols", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbols: symbolOrSymbols.map(symbol => symbol.reference), + }); + return data.map(d => owner.objectRegistry.getOrCreateType(d)); + } + const data = owner.client.apiRequest("getTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: (symbolOrSymbols as Symbol).reference, + }); + return owner.objectRegistry.getOrCreateType(data); + } + function gen(symbol: Symbol): Generator; + function gen(symbols: readonly Symbol[]): Generator; + function* gen(symbolOrSymbols: Symbol | readonly Symbol[]): Generator { + if (Array.isArray(symbolOrSymbols)) { + const data = yield* apiRequest("getTypesOfSymbols", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbols: symbolOrSymbols.map(symbol => symbol.reference), + }); + return data.map(d => owner.objectRegistry.getOrCreateType(d)); + } + const data = yield* apiRequest("getTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: (symbolOrSymbols as Symbol).reference, + }); + return owner.objectRegistry.getOrCreateType(data); + } + return cacheGeneratorMethod(owner, "getTypeOfSymbol", getTypeOfSymbol, gen); + } + + /** + * Get the declared type of a symbol. Always returns a type; for symbols whose + * declared type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + get getDeclaredTypeOfSymbol(): { + (symbol: Symbol): Type; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDeclaredTypeOfSymbol", + function (symbol: Symbol): Type { + const data = owner.client.apiRequest("getDeclaredTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getDeclaredTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + /** + * Get the type of a symbol, excluding the missing type when + * `exactOptionalPropertyTypes: true` is set; for symbols whose + * type cannot be determined the checker yields the error type + * (use {@link Type.isErrorType} to detect it). + */ + get getNonMissingTypeOfSymbol(): { + (symbol: Symbol): Type; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNonMissingTypeOfSymbol", + function (symbol: Symbol): Type { + const data = owner.client.apiRequest("getNonMissingTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getNonMissingTypeOfSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + get getReferencesToSymbolInFile(): { + (file: DocumentIdentifier, symbol: Symbol): NodeHandle[]; + gen(file: DocumentIdentifier, symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReferencesToSymbolInFile", + function (file: DocumentIdentifier, symbol: Symbol): NodeHandle[] { + const data = owner.client.apiRequest("getReferencesToSymbolInFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + symbol: symbol.reference, + }); + return (data ?? []).map(h => new NodeHandle(h, owner.project)); + }, + function* (file: DocumentIdentifier, symbol: Symbol): Generator { + const data = yield* apiRequest("getReferencesToSymbolInFile", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + symbol: symbol.reference, + }); + return (data ?? []).map(h => new NodeHandle(h, owner.project)); + }, + ); + } + + /** @deprecated Use `project.languageService.getReferencedSymbolsForNode`. */ + get getReferencedSymbolsForNode(): { + (node: Node, position: number): ReferencedSymbolEntry[]; + gen(node: Node, position: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReferencedSymbolsForNode", + function (node: Node, position: number): ReferencedSymbolEntry[] { + return owner.project.languageService.getReferencedSymbolsForNode(node, position); + }, + function* (node: Node, position: number): Generator { + return yield* owner.project.languageService.getReferencedSymbolsForNode.gen(node, position); + }, + ); + } + + /** @deprecated Use `project.languageService.getSignatureUsage`. */ + get getSignatureUsage(): { + (signatureDecl: Node): SignatureUsage[]; + gen(signatureDecl: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSignatureUsage", + function (signatureDecl: Node): SignatureUsage[] { + return owner.project.languageService.getSignatureUsage(signatureDecl); + }, + function* (signatureDecl: Node): Generator { + return yield* owner.project.languageService.getSignatureUsage.gen(signatureDecl); + }, + ); + } + + /** @deprecated Use `project.languageService.getCompletionsAtPosition`. */ + get getCompletionsAtPosition(): { + (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined; + gen(document: string, position: number, options?: CompletionOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getCompletionsAtPosition", + function (document: string, position: number, options?: CompletionOptions): CompletionInfo | undefined { + return owner.project.languageService.getCompletionsAtPosition(document, position, options); + }, + function* (document: string, position: number, options?: CompletionOptions): Generator { + return yield* owner.project.languageService.getCompletionsAtPosition.gen(document, position, options); + }, + ); + } + + /** + * Get the type at a node location. Always returns a type; for nodes whose + * type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + get getTypeAtLocation(): { + (node: Node): Type; + (nodes: readonly Node[]): Type[]; + gen(node: Node): Generator; + gen(nodes: readonly Node[]): Generator; + } { + const owner = this; + function getTypeAtLocation(node: Node): Type; + function getTypeAtLocation(nodes: readonly Node[]): Type[]; + function getTypeAtLocation(nodeOrNodes: Node | readonly Node[]): Type | Type[] { + if (Array.isArray(nodeOrNodes)) { + const data = owner.client.apiRequest("getTypeAtLocations", { + snapshot: owner.snapshotId, + project: owner.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => owner.objectRegistry.getOrCreateType(d)); + } + const data = owner.client.apiRequest("getTypeAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return owner.objectRegistry.getOrCreateType(data); + } + function gen(node: Node): Generator; + function gen(nodes: readonly Node[]): Generator; + function* gen(nodeOrNodes: Node | readonly Node[]): Generator { + if (Array.isArray(nodeOrNodes)) { + const data = yield* apiRequest("getTypeAtLocations", { + snapshot: owner.snapshotId, + project: owner.project.id, + locations: nodeOrNodes.map(node => getNodeId(node)), + }); + return data.map(d => owner.objectRegistry.getOrCreateType(d)); + } + const data = yield* apiRequest("getTypeAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(nodeOrNodes as Node), + }); + return owner.objectRegistry.getOrCreateType(data); + } + return cacheGeneratorMethod(owner, "getTypeAtLocation", getTypeAtLocation, gen); + } + + get getSignaturesOfType(): { + (type: Type, kind: SignatureKind): readonly Signature[]; + gen(type: Type, kind: SignatureKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSignaturesOfType", + function (type: Type, kind: SignatureKind): readonly Signature[] { + return kind === SignatureKind.Call ? type.getCallSignatures() : type.getConstructSignatures(); + }, + function* (type: Type, kind: SignatureKind): Generator { + return kind === SignatureKind.Call ? (yield* type.getCallSignatures.gen()) : (yield* type.getConstructSignatures.gen()); + }, + ); + } + + /** + * Get the resolved signature of a call-like expression. Always returns a + * signature; when a call cannot be resolved the checker yields the unknown + * signature (use {@link Checker.isUnknownSignature} to detect it). + */ + get getResolvedSignature(): { + (node: Node): Signature; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedSignature", + function (node: Node): Signature { + const data = owner.client.apiRequest("getResolvedSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateSignature(data); + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getResolvedSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateSignature(data); + }, + ); + } + + get getTypeAtPosition(): { + (file: DocumentIdentifier, position: number): Type | undefined; + (file: DocumentIdentifier, positions: readonly number[]): (Type | undefined)[]; + gen(file: DocumentIdentifier, position: number): Generator; + gen(file: DocumentIdentifier, positions: readonly number[]): Generator; + } { + const owner = this; + function getTypeAtPosition(file: DocumentIdentifier, position: number): Type | undefined; + function getTypeAtPosition(file: DocumentIdentifier, positions: readonly number[]): (Type | undefined)[]; + function getTypeAtPosition(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Type | (Type | undefined)[] | undefined { + if (typeof positionOrPositions === "number") { + const data = owner.client.apiRequest("getTypeAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + position: positionOrPositions, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + } + const data = owner.client.apiRequest("getTypesAtPositions", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateType(d) : undefined); + } + function gen(file: DocumentIdentifier, position: number): Generator; + function gen(file: DocumentIdentifier, positions: readonly number[]): Generator; + function* gen(file: DocumentIdentifier, positionOrPositions: number | readonly number[]): Generator { + if (typeof positionOrPositions === "number") { + const data = yield* apiRequest("getTypeAtPosition", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + position: positionOrPositions, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + } + const data = yield* apiRequest("getTypesAtPositions", { + snapshot: owner.snapshotId, + project: owner.project.id, + file, + positions: positionOrPositions, + }); + return data.map(d => d ? owner.objectRegistry.getOrCreateType(d) : undefined); + } + return cacheGeneratorMethod(owner, "getTypeAtPosition", getTypeAtPosition, gen); + } + + get resolveName(): { + (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Symbol | undefined; + gen(name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "resolveName", + function (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Symbol | undefined { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = location && "kind" in location; + const data = owner.client.apiRequest("resolveName", { + snapshot: owner.snapshotId, + project: owner.project.id, + name, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: !isNode && location ? (location as DocumentPosition).document : undefined, + position: !isNode && location ? (location as DocumentPosition).position : undefined, + excludeGlobals, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (name: string, meaning: SymbolFlags, location?: Node | DocumentPosition, excludeGlobals?: boolean): Generator { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = location && "kind" in location; + const data = yield* apiRequest("resolveName", { + snapshot: owner.snapshotId, + project: owner.project.id, + name, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: !isNode && location ? (location as DocumentPosition).document : undefined, + position: !isNode && location ? (location as DocumentPosition).position : undefined, + excludeGlobals, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + /** + * Returns all symbols with the given meaning that are visible at `location`. + */ + get getSymbolsInScope(): { + (location: Node | DocumentPosition, meaning: SymbolFlags): readonly Symbol[]; + gen(location: Node | DocumentPosition, meaning: SymbolFlags): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSymbolsInScope", + function (location: Node | DocumentPosition, meaning: SymbolFlags): readonly Symbol[] { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = "kind" in location; + const data = owner.client.apiRequest("getSymbolsInScope", { + snapshot: owner.snapshotId, + project: owner.project.id, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: isNode ? undefined : (location as DocumentPosition).document, + position: isNode ? undefined : (location as DocumentPosition).position, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; + }, + function* (location: Node | DocumentPosition, meaning: SymbolFlags): Generator { + // Distinguish Node (has `kind`) from DocumentPosition (has `document` and `position`) + const isNode = "kind" in location; + const data = yield* apiRequest("getSymbolsInScope", { + snapshot: owner.snapshotId, + project: owner.project.id, + meaning, + location: isNode ? getNodeId(location as Node) : undefined, + file: isNode ? undefined : (location as DocumentPosition).document, + position: isNode ? undefined : (location as DocumentPosition).position, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; + }, + ); + } + + get getResolvedSymbol(): { + (node: Identifier): Symbol | undefined; + gen(node: Identifier): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getResolvedSymbol", + function (node: Identifier): Symbol | undefined { + const text = node.text; + if (!text) return undefined; + return owner.resolveName(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); + }, + function* (node: Identifier): Generator { + const text = node.text; + if (!text) return undefined; + return yield* owner.resolveName.gen(text, SymbolFlags.Value | SymbolFlags.ExportValue, node); + }, + ); + } + + get getContextualType(): { + (node: Expression): Type | undefined; + gen(node: Expression): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getContextualType", + function (node: Expression): Type | undefined { + const data = owner.client.apiRequest("getContextualType", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + function* (node: Expression): Generator { + const data = yield* apiRequest("getContextualType", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + ); + } + + get getContextualTypeForArgumentAtIndex(): { + (node: CallLikeExpression, argIndex: number): Type | undefined; + gen(node: CallLikeExpression, argIndex: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getContextualTypeForArgumentAtIndex", + function (node: CallLikeExpression, argIndex: number): Type | undefined { + const data = owner.client.apiRequest("getContextualTypeForArgument", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + index: argIndex, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + function* (node: CallLikeExpression, argIndex: number): Generator { + const data = yield* apiRequest("getContextualTypeForArgument", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + index: argIndex, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + ); + } + + get getAwaitedType(): { + (type: Type): Type | undefined; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getAwaitedType", + function (type: Type): Type | undefined { + const data = owner.client.apiRequest("getAwaitedType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + function* (type: Type): Generator { + const data = yield* apiRequest("getAwaitedType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + ); + } + + /** Get the base type of a literal type (e.g. `number` for `42`). Always returns a type. */ + get getBaseTypeOfLiteralType(): { + (type: Type): Type; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBaseTypeOfLiteralType", + function (type: Type): Type { + const data = owner.client.apiRequest("getBaseTypeOfLiteralType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (type: Type): Generator { + const data = yield* apiRequest("getBaseTypeOfLiteralType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + /** Get the type with `null` and `undefined` removed. Always returns a type. */ + get getNonNullableType(): { + (type: Type): Type; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNonNullableType", + function (type: Type): Type { + return type.getNonNullableType(); + }, + function* (type: Type): Generator { + return yield* type.getNonNullableType.gen(); + }, + ); + } + + /** + * Get the type for a type node. Always returns a type; for type nodes whose + * type cannot be determined the checker yields the error type (use + * {@link Type.isErrorType} to detect it). + */ + get getTypeFromTypeNode(): { + (node: TypeNode): Type; + gen(node: TypeNode): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeFromTypeNode", + function (node: TypeNode): Type { + const data = owner.client.apiRequest("getTypeFromTypeNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (node: TypeNode): Generator { + const data = yield* apiRequest("getTypeFromTypeNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + /** Get the widened type. Always returns a type. */ + get getWidenedType(): { + (type: Type): Type; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getWidenedType", + function (type: Type): Type { + const data = owner.client.apiRequest("getWidenedType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (type: Type): Generator { + const data = yield* apiRequest("getWidenedType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + /** + * Get the type of the parameter at the given index in a signature. Always + * returns a type; an out-of-range index yields the `any` type. + */ + get getParameterType(): { + (signature: Signature, index: number): Type; + gen(signature: Signature, index: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getParameterType", + function (signature: Signature, index: number): Type { + const data = owner.client.apiRequest("getParameterType", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + index, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (signature: Signature, index: number): Generator { + const data = yield* apiRequest("getParameterType", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + index, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + get isArrayLikeType(): { + (type: Type): boolean; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isArrayLikeType", + function (type: Type): boolean { + return owner.client.apiRequest("isArrayLikeType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + }, + function* (type: Type): Generator { + return yield* apiRequest("isArrayLikeType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + }, + ); + } + + get isTypeAssignableTo(): { + (source: Type, target: Type): boolean; + gen(source: Type, target: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isTypeAssignableTo", + function (source: Type, target: Type): boolean { + return owner.client.apiRequest("isTypeAssignableTo", { + snapshot: owner.snapshotId, + project: owner.project.id, + source: source.id, + target: target.id, + }); + }, + function* (source: Type, target: Type): Generator { + return yield* apiRequest("isTypeAssignableTo", { + snapshot: owner.snapshotId, + project: owner.project.id, + source: source.id, + target: target.id, + }); + }, + ); + } + + get getShorthandAssignmentValueSymbol(): { + (node: Node): Symbol | undefined; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getShorthandAssignmentValueSymbol", + function (node: Node): Symbol | undefined { + const data = owner.client.apiRequest("getShorthandAssignmentValueSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getShorthandAssignmentValueSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + /** + * Get the type of a symbol as narrowed at a specific location. Always returns + * a type; for symbols whose type cannot be determined the checker yields the + * error type (use {@link Type.isErrorType} to detect it). + */ + get getTypeOfSymbolAtLocation(): { + (symbol: Symbol, location: Node): Type; + gen(symbol: Symbol, location: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeOfSymbolAtLocation", + function (symbol: Symbol, location: Node): Type { + const data = owner.client.apiRequest("getTypeOfSymbolAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + location: getNodeId(location), + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (symbol: Symbol, location: Node): Generator { + const data = yield* apiRequest("getTypeOfSymbolAtLocation", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + location: getNodeId(location), + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + private get getIntrinsicType(): { + (method: IntrinsicTypeMethod): Type; + gen(method: IntrinsicTypeMethod): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIntrinsicType", + function (method: IntrinsicTypeMethod): Type { + const data = owner.client.apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (method: IntrinsicTypeMethod): Generator { + const data = yield* apiRequest(method, { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + get getAnyType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getAnyType", + function (): Type { + return owner.getIntrinsicType("getAnyType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getAnyType"); + }, + ); + } + get getStringType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getStringType", + function (): Type { + return owner.getIntrinsicType("getStringType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getStringType"); + }, + ); + } + get getNumberType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNumberType", + function (): Type { + return owner.getIntrinsicType("getNumberType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getNumberType"); + }, + ); + } + get getBooleanType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBooleanType", + function (): Type { + return owner.getIntrinsicType("getBooleanType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getBooleanType"); + }, + ); + } + get getVoidType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getVoidType", + function (): Type { + return owner.getIntrinsicType("getVoidType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getVoidType"); + }, + ); + } + get getUndefinedType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getUndefinedType", + function (): Type { + return owner.getIntrinsicType("getUndefinedType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getUndefinedType"); + }, + ); + } + get getNullType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNullType", + function (): Type { + return owner.getIntrinsicType("getNullType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getNullType"); + }, + ); + } + get getNeverType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNeverType", + function (): Type { + return owner.getIntrinsicType("getNeverType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getNeverType"); + }, + ); + } + get getUnknownType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getUnknownType", + function (): Type { + return owner.getIntrinsicType("getUnknownType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getUnknownType"); + }, + ); + } + get getBigIntType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBigIntType", + function (): Type { + return owner.getIntrinsicType("getBigIntType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getBigIntType"); + }, + ); + } + get getESSymbolType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getESSymbolType", + function (): Type { + return owner.getIntrinsicType("getESSymbolType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getESSymbolType"); + }, + ); + } + get getNonPrimitiveType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNonPrimitiveType", + function (): Type { + return owner.getIntrinsicType("getNonPrimitiveType"); + }, + function* (): Generator { + return yield* owner.getIntrinsicType.gen("getNonPrimitiveType"); + }, + ); + } + + get typeToTypeNode(): { + (type: Type, enclosingDeclaration?: Node, flags?: number): TypeNode | undefined; + gen(type: Type, enclosingDeclaration?: Node, flags?: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "typeToTypeNode", + function (type: Type, enclosingDeclaration?: Node, flags?: number): TypeNode | undefined { + const binaryData = owner.client.apiRequestBinary("typeToTypeNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (!binaryData) return undefined; + return decodeNode(binaryData) as TypeNode; + }, + function* (type: Type, enclosingDeclaration?: Node, flags?: number): Generator { + const binaryData = sourceFileResponseToUint8Array( + yield* apiRequest("typeToTypeNode", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }), + ); + if (!binaryData) return undefined; + return decodeNode(binaryData) as TypeNode; + }, + ); + } + + get signatureToSignatureDeclaration(): { + (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Node | undefined; + gen(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "signatureToSignatureDeclaration", + function (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Node | undefined { + const binaryData = owner.client.apiRequestBinary("signatureToSignatureDeclaration", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + kind, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (!binaryData) return undefined; + return decodeNode(binaryData) as Node; + }, + function* (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Generator { + const binaryData = sourceFileResponseToUint8Array( + yield* apiRequest("signatureToSignatureDeclaration", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + kind, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }), + ); + if (!binaryData) return undefined; + return decodeNode(binaryData) as Node; + }, + ); + } + + get typeToString(): { + (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; + gen(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "typeToString", + function (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string { + const result = owner.client.apiRequest("typeToString", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); + return result; + }, + function* (type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): Generator { + const result = yield* apiRequest("typeToString", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + location: enclosingDeclaration ? getNodeId(enclosingDeclaration) : undefined, + flags, + }); + if (typeof result !== "string") throw new TypeError("typeToString returned a non-string result"); + return result; + }, + ); + } + + get isContextSensitive(): { + (node: Node): boolean; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isContextSensitive", + function (node: Node): boolean { + return owner.client.apiRequest("isContextSensitive", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + }, + function* (node: Node): Generator { + return yield* apiRequest("isContextSensitive", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + }, + ); + } + + get isArrayType(): { + (type: Type): boolean; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isArrayType", + function (type: Type): boolean { + return owner.client.apiRequest("isArrayType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + }, + function* (type: Type): Generator { + return yield* apiRequest("isArrayType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + }, + ); + } + + get isTupleType(): { + (type: Type): boolean; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isTupleType", + function (type: Type): boolean { + return type.isTupleType(); + }, + function* (type: Type): Generator { + return type.isTupleType(); + }, + ); + } + + get isTupleTypeTarget(): { + (type: Type): boolean; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isTupleTypeTarget", + function (type: Type): boolean { + return type.isTupleTypeTarget(); + }, + function* (type: Type): Generator { + return type.isTupleTypeTarget(); + }, + ); + } + + /** + * The following symbols are considered read-only: + * - Properties with a `readonly` modifier + * - Variables declared with `const` + * - Get accessors without matching set accessors + * - Enum members + * - `Object.defineProperty` assignments with `writable: false` or no setter + * - Unions and intersections of the above + */ + get isReadonlySymbol(): { + (symbol: Symbol): boolean; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isReadonlySymbol", + function (symbol: Symbol): boolean { + return owner.client.apiRequest("isReadonlySymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + function* (symbol: Symbol): Generator { + return yield* apiRequest("isReadonlySymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + ); + } + + /** Get the return type of a signature. Always returns a type. */ + get getReturnTypeOfSignature(): { + (signature: Signature): Type; + gen(signature: Signature): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReturnTypeOfSignature", + function (signature: Signature): Type { + return signature.getReturnType(); + }, + function* (signature: Signature): Generator { + return yield* signature.getReturnType.gen(); + }, + ); + } + + /** + * Get the rest type of a signature. Always returns a type; a signature with + * no rest parameter yields the `any` type. + */ + get getRestTypeOfSignature(): { + (signature: Signature): Type; + gen(signature: Signature): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getRestTypeOfSignature", + function (signature: Signature): Type { + const data = owner.client.apiRequest("getRestTypeOfSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + function* (signature: Signature): Generator { + const data = yield* apiRequest("getRestTypeOfSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + }); + return owner.objectRegistry.getOrCreateType(data); + }, + ); + } + + get getTypePredicateOfSignature(): { + (signature: Signature): TypePredicate | undefined; + gen(signature: Signature): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypePredicateOfSignature", + function (signature: Signature): TypePredicate | undefined { + const data = owner.client.apiRequest("getTypePredicateOfSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + }); + if (!data) return undefined; + return { + kind: data.kind, + parameterIndex: data.parameterIndex, + parameterName: data.parameterName, + type: data.type ? owner.objectRegistry.getOrCreateType(data.type) : undefined, + } as TypePredicate; + }, + function* (signature: Signature): Generator { + const data = yield* apiRequest("getTypePredicateOfSignature", { + snapshot: owner.snapshotId, + project: owner.project.id, + signature: signature.id, + }); + if (!data) return undefined; + return { + kind: data.kind, + parameterIndex: data.parameterIndex, + parameterName: data.parameterName, + type: data.type ? owner.objectRegistry.getOrCreateType(data.type) : undefined, + } as TypePredicate; + }, + ); + } + + /** + * Get the base types of a class or interface type. A type with no base types + * yields an empty array. + */ + get getBaseTypes(): { + (type: InterfaceType): readonly Type[]; + gen(type: InterfaceType): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBaseTypes", + function (type: InterfaceType): readonly Type[] { + return type.getBaseTypes() ?? []; + }, + function* (type: InterfaceType): Generator { + return (yield* type.getBaseTypes.gen()) ?? []; + }, + ); + } + + /** Get the apparent type of a type. Always returns a type. */ + get getApparentType(): { + (type: Type): Type; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getApparentType", + function (type: Type): Type { + return type.getApparentType(); + }, + function* (type: Type): Generator { + return yield* type.getApparentType.gen(); + }, + ); + } + + /** Get the reduced type of a type. Always returns a type. */ + get getReducedType(): { + (type: Type): Type; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReducedType", + function (type: Type): Type { + return type.getReducedType(); + }, + function* (type: Type): Generator { + return yield* type.getReducedType.gen(); + }, + ); + } + + get getPropertiesOfType(): { + (type: Type): readonly Symbol[]; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getPropertiesOfType", + function (type: Type): readonly Symbol[] { + return type.getProperties(); + }, + function* (type: Type): Generator { + return yield* type.getProperties.gen(); + }, + ); + } + + get getIndexInfosOfType(): { + (type: Type): readonly IndexInfo[]; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIndexInfosOfType", + function (type: Type): readonly IndexInfo[] { + return type.getIndexInfos(); + }, + function* (type: Type): Generator { + return yield* type.getIndexInfos.gen(); + }, + ); + } + + get getIndexInfoOfType(): { + (type: Type, kind: IndexKind): IndexInfo | undefined; + gen(type: Type, kind: IndexKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIndexInfoOfType", + function (type: Type, kind: IndexKind): IndexInfo | undefined { + const data = owner.client.apiRequest("getIndexInfoOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + kind, + }); + return data ? { + keyType: owner.objectRegistry.getOrCreateType(data.keyType), + valueType: owner.objectRegistry.getOrCreateType(data.valueType), + isReadonly: data.isReadonly ?? false, + declaration: data.declaration ? new NodeHandle(data.declaration, owner.project) : undefined, + } : undefined; + }, + function* (type: Type, kind: IndexKind): Generator { + const data = yield* apiRequest("getIndexInfoOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + kind, + }); + return data ? { + keyType: owner.objectRegistry.getOrCreateType(data.keyType), + valueType: owner.objectRegistry.getOrCreateType(data.valueType), + isReadonly: data.isReadonly ?? false, + declaration: data.declaration ? new NodeHandle(data.declaration, owner.project) : undefined, + } : undefined; + }, + ); + } + + get getIndexTypeOfType(): { + (type: Type, kind: IndexKind): Type | undefined; + gen(type: Type, kind: IndexKind): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIndexTypeOfType", + function (type: Type, kind: IndexKind): Type | undefined { + return kind === IndexKind.String ? type.getStringIndexType() : type.getNumberIndexType(); + }, + function* (type: Type, kind: IndexKind): Generator { + return kind === IndexKind.String ? (yield* type.getStringIndexType.gen()) : (yield* type.getNumberIndexType.gen()); + }, + ); + } + + get getTypeOfPropertyOfType(): { + (type: Type, propertyName: string): Type | undefined; + gen(type: Type, propertyName: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeOfPropertyOfType", + function (type: Type, propertyName: string): Type | undefined { + const data = owner.client.apiRequest("getTypeOfPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + name: propertyName, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + function* (type: Type, propertyName: string): Generator { + const data = yield* apiRequest("getTypeOfPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + name: propertyName, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + ); + } + + /** + * Get the constraint of a type parameter (the `T` in ``), or + * undefined if it has none. + */ + get getConstraintOfTypeParameter(): { + (type: TypeParameter): Type | undefined; + gen(type: TypeParameter): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConstraintOfTypeParameter", + function (type: TypeParameter): Type | undefined { + return type.getConstraint(); + }, + function* (type: TypeParameter): Generator { + return yield* type.getConstraint.gen(); + }, + ); + } + + get getDefaultFromTypeParameter(): { + (type: TypeParameter): Type | undefined; + gen(type: TypeParameter): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDefaultFromTypeParameter", + function (type: TypeParameter): Type | undefined { + return type.getDefault(); + }, + function* (type: TypeParameter): Generator { + return yield* type.getDefault.gen(); + }, + ); + } + + get getBaseConstraintOfType(): { + (type: Type): Type | undefined; + gen(type: Type): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBaseConstraintOfType", + function (type: Type): Type | undefined { + const data = owner.client.apiRequest("getBaseConstraintOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + function* (type: Type): Generator { + const data = yield* apiRequest("getBaseConstraintOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? owner.objectRegistry.getOrCreateType(data) : undefined; + }, + ); + } + + get getPropertyOfType(): { + (type: Type, name: string): Symbol | undefined; + gen(type: Type, name: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getPropertyOfType", + function (type: Type, name: string): Symbol | undefined { + const data = owner.client.apiRequest("getPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + name, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (type: Type, name: string): Generator { + const data = yield* apiRequest("getPropertyOfType", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + name, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + get getConstantValue(): { + (node: Node): string | number | undefined; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConstantValue", + function (node: Node): string | number | undefined { + const data = owner.client.apiRequest("getConstantValue", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { + return undefined; + } + if (data.isNumber && typeof data.value === "string") { + if (data.value === "+Infinity") { + return Infinity; + } + else if (data.value === "-Infinity") { + return -Infinity; + } + return NaN; + } + return data.value; + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getConstantValue", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + if (!data || (typeof data.value !== "string" && typeof data.value !== "number")) { + return undefined; + } + if (data.isNumber && typeof data.value === "string") { + if (data.value === "+Infinity") { + return Infinity; + } + else if (data.value === "-Infinity") { + return -Infinity; + } + return NaN; + } + return data.value; + }, + ); + } + + /** Get the signature of a function-like declaration. Always returns a signature. */ + get getSignatureFromDeclaration(): { + (node: Node): Signature; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSignatureFromDeclaration", + function (node: Node): Signature { + const data = owner.client.apiRequest("getSignatureFromDeclaration", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateSignature(data); + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getSignatureFromDeclaration", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return owner.objectRegistry.getOrCreateSignature(data); + }, + ); + } + + get getExportSpecifierLocalTargetSymbol(): { + (node: Node): Symbol | undefined; + gen(node: Node): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExportSpecifierLocalTargetSymbol", + function (node: Node): Symbol | undefined { + const data = owner.client.apiRequest("getExportSpecifierLocalTargetSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (node: Node): Generator { + const data = yield* apiRequest("getExportSpecifierLocalTargetSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + location: getNodeId(node), + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + /** + * Follow all aliases to get the original symbol. Always returns a symbol; for + * an unresolved alias the checker yields the unknown symbol (use + * {@link Checker.isUnknownSymbol} to detect it). + */ + get getAliasedSymbol(): { + (symbol: Symbol): Symbol; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getAliasedSymbol", + function (symbol: Symbol): Symbol { + const data = owner.client.apiRequest("getAliasedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getAliasedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + ); + } + + /** + * Get the fully qualified name of a symbol, walking up its parent chain + * (e.g. `"/path/to/module".Namespace.Name`). + */ + get getFullyQualifiedName(): { + (symbol: Symbol): string; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getFullyQualifiedName", + function (symbol: Symbol): string { + return owner.client.apiRequest("getFullyQualifiedName", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + function* (symbol: Symbol): Generator { + return yield* apiRequest("getFullyQualifiedName", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + ); + } + + get getImmediateAliasedSymbol(): { + (symbol: Symbol): Symbol | undefined; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getImmediateAliasedSymbol", + function (symbol: Symbol): Symbol | undefined { + const data = owner.client.apiRequest("getImmediateAliasedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getImmediateAliasedSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + /** + * Get the target symbol if instantiated, or the provided symbol otherwise. + */ + get getTargetSymbol(): { + (symbol: Symbol): Symbol; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTargetSymbol", + function (symbol: Symbol): Symbol { + if (symbol.checkFlags & CheckFlags.Instantiated) { + const data = owner.client.apiRequest("getTargetSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + } + return symbol; + }, + function* (symbol: Symbol): Generator { + if (symbol.checkFlags & CheckFlags.Instantiated) { + const data = yield* apiRequest("getTargetSymbol", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + } + return symbol; + }, + ); + } + + get getExportSymbolOfSymbol(): { + (symbol: Symbol): Symbol; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExportSymbolOfSymbol", + function (symbol: Symbol): Symbol { + const data = owner.client.apiRequest("getExportSymbolOfSymbolForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getExportSymbolOfSymbolForChecker", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return owner.objectRegistry.getOrCreateSymbol(data); + }, + ); + } + + /** + * Fetch (once, then cache) the handle ids of the per-checker singleton + * symbols (unknown, undefined, arguments). These ids are stable for the life + * of the project's checker, so identity checks against them are local after + * the first call. + */ + private get getWellKnownSymbols(): { + (): { unknown: number; undefined: number; arguments: number; }; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getWellKnownSymbols", + function (): { unknown: number; undefined: number; arguments: number; } { + return owner.wellKnownSymbols ??= owner.client.apiRequest("getWellKnownSymbols", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + }, + function* (): Generator { + return owner.wellKnownSymbols ??= yield* apiRequest("getWellKnownSymbols", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + }, + ); + } + + /** + * Returns `true` if the symbol is the checker's "unknown" symbol (e.g. the + * result of {@link Checker.getAliasedSymbol} on an unresolved alias). + */ + get isUnknownSymbol(): { + (symbol: Symbol): boolean; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isUnknownSymbol", + function (symbol: Symbol): boolean { + return symbol.id === (owner.getWellKnownSymbols()).unknown; + }, + function* (symbol: Symbol): Generator { + return symbol.id === (yield* owner.getWellKnownSymbols.gen()).unknown; + }, + ); + } + + /** + * Returns `true` if the symbol is the checker's "undefined" symbol. + */ + get isUndefinedSymbol(): { + (symbol: Symbol): boolean; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isUndefinedSymbol", + function (symbol: Symbol): boolean { + return symbol.id === (owner.getWellKnownSymbols()).undefined; + }, + function* (symbol: Symbol): Generator { + return symbol.id === (yield* owner.getWellKnownSymbols.gen()).undefined; + }, + ); + } + + /** + * Returns `true` if the symbol is the checker's "arguments" symbol. + */ + get isArgumentsSymbol(): { + (symbol: Symbol): boolean; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isArgumentsSymbol", + function (symbol: Symbol): boolean { + return symbol.id === (owner.getWellKnownSymbols()).arguments; + }, + function* (symbol: Symbol): Generator { + return symbol.id === (yield* owner.getWellKnownSymbols.gen()).arguments; + }, + ); + } + + /** + * Fetch (once, then cache) the handle id of the per-checker unknown + * signature. This id is stable for the life of the project's checker, so + * identity checks against it are local after the first call. + */ + private get getWellKnownSignatures(): { + (): { unknown: number; }; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getWellKnownSignatures", + function (): { unknown: number; } { + return owner.wellKnownSignatures ??= owner.client.apiRequest("getWellKnownSignatures", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + }, + function* (): Generator { + return owner.wellKnownSignatures ??= yield* apiRequest("getWellKnownSignatures", { + snapshot: owner.snapshotId, + project: owner.project.id, + }); + }, + ); + } + + /** + * Returns `true` if the signature is the checker's "unknown" signature (e.g. + * the result of {@link Checker.getResolvedSignature} on a call that cannot be + * resolved). + */ + get isUnknownSignature(): { + (signature: Signature): boolean; + gen(signature: Signature): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "isUnknownSignature", + function (signature: Signature): boolean { + return signature.id === (owner.getWellKnownSignatures()).unknown; + }, + function* (signature: Signature): Generator { + return signature.id === (yield* owner.getWellKnownSignatures.gen()).unknown; + }, + ); + } + + get getExportsOfModule(): { + (symbol: Symbol): readonly Symbol[]; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExportsOfModule", + function (symbol: Symbol): readonly Symbol[] { + const data = owner.client.apiRequest("getExportsOfModule", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getExportsOfModule", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateSymbol(d)) : []; + }, + ); + } + + get getMemberInModuleExports(): { + (symbol: Symbol, name: string): Symbol | undefined; + gen(symbol: Symbol, name: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getMemberInModuleExports", + function (symbol: Symbol, name: string): Symbol | undefined { + const data = owner.client.apiRequest("getMemberInModuleExports", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + name, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + function* (symbol: Symbol, name: string): Generator { + const data = yield* apiRequest("getMemberInModuleExports", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + name, + }); + return data ? owner.objectRegistry.getOrCreateSymbol(data) : undefined; + }, + ); + } + + get getJsDocTagsOfSymbol(): { + (symbol: Symbol): readonly JSDocTagInfo[]; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getJsDocTagsOfSymbol", + function (symbol: Symbol): readonly JSDocTagInfo[] { + const data = owner.client.apiRequest("getJsDocTags", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ?? []; + }, + function* (symbol: Symbol): Generator { + const data = yield* apiRequest("getJsDocTags", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + return data ?? []; + }, + ); + } + + get getDocumentationCommentOfSymbol(): { + (symbol: Symbol): string; + gen(symbol: Symbol): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDocumentationCommentOfSymbol", + function (symbol: Symbol): string { + return owner.client.apiRequest("getDocumentationComment", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + function* (symbol: Symbol): Generator { + return yield* apiRequest("getDocumentationComment", { + snapshot: owner.snapshotId, + project: owner.project.id, + symbol: symbol.reference, + }); + }, + ); + } + + /** + * Get the type arguments of a type reference (e.g. the `string` in `Array`). + */ + get getTypeArguments(): { + (type: TypeReference): readonly Type[]; + gen(type: TypeReference): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeArguments", + function (type: TypeReference): readonly Type[] { + const data = owner.client.apiRequest("getTypeArguments", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateType(d)) : []; + }, + function* (type: TypeReference): Generator { + const data = yield* apiRequest("getTypeArguments", { + snapshot: owner.snapshotId, + project: owner.project.id, + type: type.id, + }); + return data ? data.map(d => owner.objectRegistry.getOrCreateType(d)) : []; + }, + ); + } +} + +export interface PrintNodeOptions { + preserveSourceNewlines?: boolean | undefined; + neverAsciiEscape?: boolean | undefined; + terminateUnterminatedLiterals?: boolean | undefined; +} + +export class Printer { + private client: Client; + + constructor(client: Client) { + this.client = client; + } + + get printNode(): { + (node: Node, options?: PrintNodeOptions): string; + gen(node: Node, options?: PrintNodeOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "printNode", + function (node: Node, options: PrintNodeOptions = {}): string { + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return owner.client.apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + }, + function* (node: Node, options: PrintNodeOptions = {}): Generator { + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return yield* apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + }, + ); + } + + get printFile(): { + (sourceFile: SourceFile, options?: PrintNodeOptions): string; + gen(sourceFile: SourceFile, options?: PrintNodeOptions): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "printFile", + function (sourceFile: SourceFile, options: PrintNodeOptions = {}): string { + const encoded = encodeNode(sourceFile); + const base64 = uint8ArrayToBase64(encoded); + return owner.client.apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + }, + function* (sourceFile: SourceFile, options: PrintNodeOptions = {}): Generator { + const encoded = encodeNode(sourceFile); + const base64 = uint8ArrayToBase64(encoded); + return yield* apiRequest("printNode", { + data: base64, + preserveSourceNewlines: options.preserveSourceNewlines, + neverAsciiEscape: options.neverAsciiEscape, + terminateUnterminatedLiterals: options.terminateUnterminatedLiterals, + }); + }, + ); + } +} + +export class SnapshotInternalAPI { + private snapshotId: number; + private client: Client; + + constructor(snapshotId: number, client: Client) { + this.snapshotId = snapshotId; + this.client = client; + } + + /** + * Format a synthesized node with the correct indentation for insertion at a + * specific position in an existing source file. + * + * @param node The synthesized AST node to format. + * @param file The target file where the node will be inserted. + * @param position The UTF-16 code-unit offset in the target file for insertion. + * @returns The formatted text of the node, indented for the insertion position. + */ + get formatNodeForInsertion(): { + (node: Node, file: DocumentIdentifier, position: number): string; + gen(node: Node, file: DocumentIdentifier, position: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "formatNodeForInsertion", + function (node: Node, file: DocumentIdentifier, position: number): string { + const data = owner.client.apiRequest("getDefaultProjectForFile", { + snapshot: owner.snapshotId, + file, + }); + if (!data) { + throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); + } + + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return owner.client.apiRequest("formatNodeForInsertion", { + snapshot: owner.snapshotId, + project: data.id, + file, + position, + data: base64, + }); + }, + function* (node: Node, file: DocumentIdentifier, position: number): Generator { + const data = yield* apiRequest("getDefaultProjectForFile", { + snapshot: owner.snapshotId, + file, + }); + if (!data) { + throw new Error(`No project found for file: ${typeof file === "string" ? file : file.uri}`); + } + + const encoded = encodeNode(node); + const base64 = uint8ArrayToBase64(encoded); + return yield* apiRequest("formatNodeForInsertion", { + snapshot: owner.snapshotId, + project: data.id, + file, + position, + data: base64, + }); + }, + ); + } +} + +export class NodeHandle { + /** + * The project this handle was produced in, used as the default for {@link resolve}. + * Node handles are only meaningful within a project's program, so the producing project + * is remembered so callers don't have to pass it explicitly. + */ + private readonly canonicalProject: Project | undefined; + /** The owning source file of a file-owned symbol's declaration. */ + private readonly fileOwner: SourceFileOwner | undefined; + readonly index: number; + readonly kind: SyntaxKind; + readonly path: PathKey; + + constructor(handle: string, canonicalProject: Project | undefined, fileOwner?: SourceFileOwner) { + const parsed = parseNodeHandleFromCompiler(handle); + this.index = parsed.index; + this.kind = parsed.kind; + this.path = parsed.path; + this.canonicalProject = canonicalProject; + this.fileOwner = fileOwner; + } + + /** + * Resolve this handle to the actual AST node by fetching the source file from a project + * and looking up the node by index. If no project is passed, the project that produced + * the handle is used. Declarations of file-owned symbols identify an exact source file and + * resolve through it, independently of any project. + */ + get resolve(): { + (project?: Project | undefined): T | undefined; + gen(project?: Project | undefined): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "resolve", + function (project: Project | undefined = owner.canonicalProject): T | undefined { + if (owner.fileOwner) { + const sourceFile = owner.fileOwner.record.file ?? owner.fetchOwnerFile(owner.fileOwner); + return sourceFile.getOrCreateNodeAtIndex(owner.index) as T | undefined; + } + if (!project) throw new Error(`Node handle for '${owner.path}' has no project context`); + const sourceFile = project.program.getSourceFileByPath(owner.path); + if (!sourceFile) { + return undefined; + } + return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(owner.index) as T | undefined; + }, + function* (project: Project | undefined = owner.canonicalProject): Generator { + if (owner.fileOwner) { + const sourceFile = owner.fileOwner.record.file ?? (yield* owner.fetchOwnerFile.gen(owner.fileOwner)); + return sourceFile.getOrCreateNodeAtIndex(owner.index) as T | undefined; + } + if (!project) throw new Error(`Node handle for '${owner.path}' has no project context`); + const sourceFile = yield* project.program.getSourceFileByPath.gen(owner.path); + if (!sourceFile) { + return undefined; + } + return (sourceFile as unknown as RemoteSourceFile).getOrCreateNodeAtIndex(owner.index) as T | undefined; + }, + ); + } + + private get fetchOwnerFile(): { + (fileOwner: SourceFileOwner): RemoteSourceFile; + gen(fileOwner: SourceFileOwner): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchOwnerFile", + function (fileOwner: SourceFileOwner): RemoteSourceFile { + const data = fileOwner.api.client.apiRequestBinary("getCachedSourceFile", { file: fileOwner.record.descriptor }); + if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); + return fileOwner.api.sourceFileCache.attachFile( + fileOwner.record, + new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), + ); + }, + function* (fileOwner: SourceFileOwner): Generator { + const data = sourceFileResponseToUint8Array(yield* apiRequest("getCachedSourceFile", { file: fileOwner.record.descriptor })); + if (!data) throw new Error(`Source file '${fileOwner.record.descriptor.fileName}' is not available`); + return fileOwner.api.sourceFileCache.attachFile( + fileOwner.record, + new RemoteSourceFile(data, new Wtf8Decoder(), fileOwner.api.client.getTimingCollector(), fileOwner.api), + ); + }, + ); + } +} + +/** A symbol definition paired with all of its reference nodes. */ +export interface ReferencedSymbolEntry { + /** The node handle for the symbol's definition. */ + definition: NodeHandle; + /** The resolved symbol for the definition, if available. */ + symbol?: Symbol | undefined; + /** The node handles for each reference to the symbol. */ + references: NodeHandle[]; +} + +/** A single usage of a signature, pairing the reference name with its call expression (if any). */ +export interface SignatureUsage { + /** The node handle for the name reference. */ + name: NodeHandle; + /** The node handle for the call expression, if the reference is invoked. */ + call?: NodeHandle | undefined; +} + +/** A cached source-file record and its owning API. */ +interface SourceFileOwner { + readonly record: CachedSourceFile; + readonly api: API; +} + +type SymbolStorage = + | { readonly kind: typeof SymbolOwnerKind.File; readonly owner: SourceFileOwner; } + | { readonly kind: typeof SymbolOwnerKind.Snapshot; readonly registry: ProjectObjectRegistry; }; + +export class Symbol { + private readonly storage: SymbolStorage; + + get id(): number { + return this.reference.id; + } + /** The escaped (`__String`) name, used as the key in member/export tables. */ + readonly escapedName: __String; + /** The display name (escaped underscores removed). */ + readonly name: string; + readonly flags: SymbolFlags; + readonly checkFlags: CheckFlags; + /** @internal */ + readonly reference: SymbolReference; + readonly declarations: readonly NodeHandle[]; + readonly valueDeclaration: NodeHandle | undefined; + private readonly parent!: CompactSymbolReference; + private readonly exportSymbol!: CompactSymbolReference; + private membersCache: ReadonlyMap<__String, Symbol> | undefined; + private exportsCache: ReadonlyMap<__String, Symbol> | undefined; + + constructor(data: SymbolResponse, storage: SymbolStorage) { + if (data.reference.kind !== storage.kind) throw new Error(`Symbol ${data.reference.id} has mismatched ownership and storage`); + this.storage = storage; + this.reference = data.reference; + + this.escapedName = data.name as __String; + this.name = unescapeLeadingUnderscores(data.name as __String); + this.flags = data.flags; + this.checkFlags = data.checkFlags; + // A file-owned symbol has no canonical project; its declarations resolve through its file. + const project = storage.kind === SymbolOwnerKind.Snapshot ? storage.registry.project : undefined; + const fileOwner = storage.kind === SymbolOwnerKind.File ? storage.owner : undefined; + this.declarations = (data.declarations ?? []).map(handle => new NodeHandle(handle, project, fileOwner)); + this.valueDeclaration = data.valueDeclaration + ? new NodeHandle(data.valueDeclaration, project, fileOwner) + : undefined; + + if (data.parent !== undefined) this.parent = data.parent; + if (data.exportSymbol !== undefined) this.exportSymbol = data.exportSymbol; + } + + get getParent(): { + (): Symbol | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getParent", + function (): Symbol | undefined { + if (!owner.parent) return undefined; + return owner.fetchSymbol("getParentOfSymbol", owner.parent); + }, + function* (): Generator { + if (!owner.parent) return undefined; + return yield* owner.fetchSymbol.gen("getParentOfSymbol", owner.parent); + }, + ); + } + + /** + * Get this symbol's members keyed by escaped name. The result is cached on + * the symbol, so repeated calls do not round-trip to the server. + */ + get getMembers(): { + (): ReadonlyMap<__String, Symbol>; + gen(): Generator, ProtocolResponse["result"]>; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getMembers", + function (): ReadonlyMap<__String, Symbol> { + return owner.membersCache ??= owner.fetchSymbolTable("getMembersOfSymbol"); + }, + function* (): Generator, ProtocolResponse["result"]> { + return owner.membersCache ??= yield* owner.fetchSymbolTable.gen("getMembersOfSymbol"); + }, + ); + } + + /** + * Get this symbol's exports keyed by escaped name. The result is cached on + * the symbol, so repeated calls do not round-trip to the server. + */ + get getExports(): { + (): ReadonlyMap<__String, Symbol>; + gen(): Generator, ProtocolResponse["result"]>; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExports", + function (): ReadonlyMap<__String, Symbol> { + return owner.exportsCache ??= owner.fetchSymbolTable("getExportsOfSymbol"); + }, + function* (): Generator, ProtocolResponse["result"]> { + return owner.exportsCache ??= yield* owner.fetchSymbolTable.gen("getExportsOfSymbol"); + }, + ); + } + + private get fetchSymbolTable(): { + (method: SymbolsPropertyMethod): ReadonlyMap<__String, Symbol>; + gen(method: SymbolsPropertyMethod): Generator, ProtocolResponse["result"]>; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbolTable", + function (method: SymbolsPropertyMethod): ReadonlyMap<__String, Symbol> { + const symbols = owner.fetchSymbols(method); + const table = new Map<__String, Symbol>(); + for (const symbol of symbols) { + table.set(symbol.escapedName, symbol); + } + return table; + }, + function* (method: SymbolsPropertyMethod): Generator, ProtocolResponse["result"]> { + const symbols = yield* owner.fetchSymbols.gen(method); + const table = new Map<__String, Symbol>(); + for (const symbol of symbols) { + table.set(symbol.escapedName, symbol); + } + return table; + }, + ); + } + + get getExportSymbol(): { + (): Symbol; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExportSymbol", + function (): Symbol { + if (!owner.exportSymbol) return owner; + return owner.fetchSymbol("getExportSymbolOfSymbol", owner.exportSymbol); + }, + function* (): Generator { + if (!owner.exportSymbol) return owner; + return yield* owner.fetchSymbol.gen("getExportSymbolOfSymbol", owner.exportSymbol); + }, + ); + } + + get getJsDocTags(): { + (checker: Checker): readonly JSDocTagInfo[]; + gen(checker: Checker): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getJsDocTags", + function (checker: Checker): readonly JSDocTagInfo[] { + return checker.getJsDocTagsOfSymbol(owner); + }, + function* (checker: Checker): Generator { + return yield* checker.getJsDocTagsOfSymbol.gen(owner); + }, + ); + } + + get getDocumentationComment(): { + (checker: Checker): string; + gen(checker: Checker): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDocumentationComment", + function (checker: Checker): string { + return checker.getDocumentationCommentOfSymbol(owner); + }, + function* (checker: Checker): Generator { + return yield* checker.getDocumentationCommentOfSymbol.gen(owner); + }, + ); + } + + private get fetchSymbol(): { + (method: SymbolPropertyMethod, reference: CompactSymbolReference): Symbol; + gen(method: SymbolPropertyMethod, reference: CompactSymbolReference): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbol", + function (method: SymbolPropertyMethod, reference: CompactSymbolReference): Symbol { + if (owner.storage.kind === SymbolOwnerKind.Snapshot) { + return owner.storage.registry.fetchSymbol(owner, method, reference); + } + const fileOwner = owner.storage.owner; + // A file-owned symbol's relationships are always owned by the same file. + const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; + if (cached) return cached; + const data = fileOwner.api.client.apiRequest(method, { symbol: owner.reference }); + if (!data) throw new Error(`${method} returned null symbol for Symbol ${owner.id}`); + return owner.internFileSymbol(fileOwner, data); + }, + function* (method: SymbolPropertyMethod, reference: CompactSymbolReference): Generator { + if (owner.storage.kind === SymbolOwnerKind.Snapshot) { + return yield* owner.storage.registry.fetchSymbol.gen(owner, method, reference); + } + const fileOwner = owner.storage.owner; + // A file-owned symbol's relationships are always owned by the same file. + const cached = reference.file === fileOwner.record.descriptor.nodeId ? fileOwner.record.symbolsById.get(reference.id) : undefined; + if (cached) return cached; + const data = yield* apiRequest(method, { symbol: owner.reference }); + if (!data) throw new Error(`${method} returned null symbol for Symbol ${owner.id}`); + return owner.internFileSymbol(fileOwner, data); + }, + ); + } + + private get fetchSymbols(): { + (method: SymbolsPropertyMethod): readonly Symbol[]; + gen(method: SymbolsPropertyMethod): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "fetchSymbols", + function (method: SymbolsPropertyMethod): readonly Symbol[] { + if (owner.storage.kind === SymbolOwnerKind.Snapshot) { + return owner.storage.registry.fetchSymbols(owner, method); + } + const fileOwner = owner.storage.owner; + const data = fileOwner.api.client.apiRequest(method, { symbol: owner.reference }); + return data?.map(symbol => owner.internFileSymbol(fileOwner, symbol)) ?? []; + }, + function* (method: SymbolsPropertyMethod): Generator { + if (owner.storage.kind === SymbolOwnerKind.Snapshot) { + return yield* owner.storage.registry.fetchSymbols.gen(owner, method); + } + const fileOwner = owner.storage.owner; + const data = yield* apiRequest(method, { symbol: owner.reference }); + return data?.map(symbol => owner.internFileSymbol(fileOwner, symbol)) ?? []; + }, + ); + } + + private internFileSymbol(fileOwner: SourceFileOwner, data: ProtocolSymbolResponse): Symbol { + validateSymbolResponse(data); + const reference = data.reference; + if (reference.kind !== SymbolOwnerKind.File) throw new Error(`Symbol ${reference.id} is not file-owned`); + return fileOwner.api.sourceFileCache.getOrCreateSymbol(fileOwner.record, reference.file, reference.id, () => new Symbol(data, { kind: SymbolOwnerKind.File, owner: fileOwner })); + } +} + +class TypeObject implements Type { + private objectRegistry: ProjectObjectRegistry; + + // Fields included in TypeResponse. References to other objects are stored as IDs + // and resolved lazily via the object registry. + readonly id: number; + readonly flags: TypeFlags; + readonly objectFlags!: ObjectFlags; + readonly symbol!: CompactSymbolReference; + readonly value!: string | number | boolean | bigint; + readonly intrinsicName!: string; + readonly isThisType!: boolean; + readonly freshType!: number; + readonly regularType!: number; + readonly target!: number; + private readonly tupleType: boolean; + readonly typeParameters!: readonly number[]; + readonly outerTypeParameters!: readonly number[]; + readonly localTypeParameters!: readonly number[]; + readonly thisType!: number; + readonly aliasTypeArguments!: readonly number[]; + readonly aliasSymbol!: CompactSymbolReference; + readonly elementFlags!: readonly ElementFlags[]; + readonly fixedLength!: number; + readonly readonly!: boolean; + readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; + readonly texts!: readonly string[]; + readonly objectType!: number; + readonly indexType!: number; + readonly checkType!: number; + readonly extendsType!: number; + readonly baseType!: number; + readonly substConstraint!: number; + readonly typeParameter!: number; + readonly constraintType!: number; + readonly nameType!: number; + readonly templateType!: number; + + // Cached results of lazy fetches, not included in TypeResponse + // (typically because they require some amount of computation or + // could cause an arbitrarily large number of types to be cached + // on the server for ID-based lookup). `false` is a sentinel value + // indicating a fetch has not yet occurred. + private trueType: number | false; + private falseType: number | false; + private constraint: number | false; + private default: number | false; + private nonNullableType: number | false; + private apparentType: number | false; + private reducedType: number | false; + private properties: readonly Symbol[] | false; + private apparentProperties: readonly Symbol[] | false; + private callSignatures: readonly Signature[] | false; + private constructSignatures: readonly Signature[] | false; + private indexInfos: readonly IndexInfo[] | false; + private baseTypes: readonly Type[] | false; + private types: readonly Type[] | false; + private stringIndexType: Type | undefined | false; + private numberIndexType: Type | undefined | false; + + constructor(data: TypeResponse, objectRegistry: ProjectObjectRegistry) { + this.objectRegistry = objectRegistry; + + this.id = data.id; + this.flags = data.flags; + if (data.objectFlags !== undefined) this.objectFlags = data.objectFlags; + if (data.symbol !== undefined) this.symbol = data.symbol; + if (data.value != null) { + // BigInt literal values are serialized as decimal strings (e.g. "-123") because + // JSON cannot represent bigint. Decode them back into a real bigint here. + const value = data.value as string | number | boolean; + if (data.flags & TypeFlags.BigIntLiteral) { + this.value = BigInt(value as string); + } + // JSON cannot represent infinities, so the API serializes them as strings. + else if (data.flags & TypeFlags.NumberLiteral && typeof value === "string") { + if (value === "+Infinity") { + this.value = Infinity; + } + else if (value === "-Infinity") { + this.value = -Infinity; + } + else { + this.value = NaN; + } + } + else { + this.value = value; + } + } + if (data.intrinsicName !== undefined) this.intrinsicName = data.intrinsicName; + if (data.isThisType !== undefined) this.isThisType = data.isThisType; + if (data.freshType !== undefined) this.freshType = data.freshType; + if (data.regularType !== undefined) this.regularType = data.regularType; + if (data.target !== undefined) this.target = data.target; + this.tupleType = data.isTupleType ?? false; + this.typeParameters = data.typeParameters ?? []; + this.outerTypeParameters = data.outerTypeParameters ?? []; + this.localTypeParameters = data.localTypeParameters ?? []; + if (data.thisType !== undefined) this.thisType = data.thisType; + this.aliasTypeArguments = data.aliasTypeArguments ?? []; + if (data.aliasSymbol !== undefined) this.aliasSymbol = data.aliasSymbol; + if (data.fixedLength !== undefined) { + this.elementFlags = data.elementFlags ?? []; + this.fixedLength = data.fixedLength; + } + if (data.readonly !== undefined) this.readonly = data.readonly; + if (data.labeledElementDeclarations !== undefined) { + this.labeledElementDeclarations = data.labeledElementDeclarations.map(handle => handle ? objectRegistry.createNodeHandle(handle) : undefined); + } + if (data.texts !== undefined) this.texts = data.texts; + if (data.objectType !== undefined) this.objectType = data.objectType; + if (data.indexType !== undefined) this.indexType = data.indexType; + if (data.checkType !== undefined) this.checkType = data.checkType; + if (data.extendsType !== undefined) this.extendsType = data.extendsType; + if (data.baseType !== undefined) this.baseType = data.baseType; + if (data.substConstraint !== undefined) this.substConstraint = data.substConstraint; + if (data.typeParameter !== undefined) this.typeParameter = data.typeParameter; + if (data.constraintType !== undefined) this.constraintType = data.constraintType; + if (data.nameType !== undefined) this.nameType = data.nameType; + if (data.templateType !== undefined) this.templateType = data.templateType; + + this.trueType = false; + this.falseType = false; + this.constraint = false; + this.default = false; + this.nonNullableType = false; + this.apparentType = false; + this.reducedType = false; + this.properties = false; + this.apparentProperties = false; + this.callSignatures = false; + this.constructSignatures = false; + this.indexInfos = false; + this.baseTypes = false; + this.types = false; + this.stringIndexType = false; + this.numberIndexType = false; + } + + get getSymbol(): { + (): Symbol | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getSymbol", + function (): Symbol | undefined { + return owner.objectRegistry.fetchSymbol(owner, "getSymbolOfType", owner.symbol); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getSymbolOfType", owner.symbol); + }, + ); + } + + get getProperties(): { + (): readonly Symbol[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getProperties", + function (): readonly Symbol[] { + if (owner.properties === false) { + owner.properties = owner.objectRegistry.fetchPropertiesOfType(owner); + } + return owner.properties; + }, + function* (): Generator { + if (owner.properties === false) { + owner.properties = yield* owner.objectRegistry.fetchPropertiesOfType.gen(owner); + } + return owner.properties; + }, + ); + } + + get getProperty(): { + (propertyName: string): Symbol | undefined; + gen(propertyName: string): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getProperty", + function (propertyName: string): Symbol | undefined { + return owner.objectRegistry.fetchPropertyOfType(owner, propertyName); + }, + function* (propertyName: string): Generator { + return yield* owner.objectRegistry.fetchPropertyOfType.gen(owner, propertyName); + }, + ); + } + + get getApparentProperties(): { + (): readonly Symbol[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getApparentProperties", + function (): readonly Symbol[] { + if (owner.apparentProperties === false) { + owner.apparentProperties = owner.objectRegistry.fetchApparentPropertiesOfType(owner); + } + return owner.apparentProperties; + }, + function* (): Generator { + if (owner.apparentProperties === false) { + owner.apparentProperties = yield* owner.objectRegistry.fetchApparentPropertiesOfType.gen(owner); + } + return owner.apparentProperties; + }, + ); + } + + get getCallSignatures(): { + (): readonly Signature[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getCallSignatures", + function (): readonly Signature[] { + if (owner.callSignatures === false) { + owner.callSignatures = owner.objectRegistry.fetchSignaturesOfType(owner, SignatureKind.Call); + } + return owner.callSignatures; + }, + function* (): Generator { + if (owner.callSignatures === false) { + owner.callSignatures = yield* owner.objectRegistry.fetchSignaturesOfType.gen(owner, SignatureKind.Call); + } + return owner.callSignatures; + }, + ); + } + + get getConstructSignatures(): { + (): readonly Signature[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConstructSignatures", + function (): readonly Signature[] { + if (owner.constructSignatures === false) { + owner.constructSignatures = owner.objectRegistry.fetchSignaturesOfType(owner, SignatureKind.Construct); + } + return owner.constructSignatures; + }, + function* (): Generator { + if (owner.constructSignatures === false) { + owner.constructSignatures = yield* owner.objectRegistry.fetchSignaturesOfType.gen(owner, SignatureKind.Construct); + } + return owner.constructSignatures; + }, + ); + } + + get getNonNullableType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNonNullableType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getNonNullableType", owner.nonNullableType); + owner.nonNullableType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getNonNullableType", owner.nonNullableType); + owner.nonNullableType = result.id; + return result; + }, + ); + } + + get getStringIndexType(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getStringIndexType", + function (): Type | undefined { + if (owner.stringIndexType === false) { + owner.stringIndexType = owner.getStringIndexTypeWorker(); + } + return owner.stringIndexType; + }, + function* (): Generator { + if (owner.stringIndexType === false) { + owner.stringIndexType = yield* owner.getStringIndexTypeWorker.gen(); + } + return owner.stringIndexType; + }, + ); + } + + private get getStringIndexTypeWorker(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getStringIndexTypeWorker", + function (): Type | undefined { + const infos = owner.getIndexInfos(); + return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; + }, + function* (): Generator { + const infos = yield* owner.getIndexInfos.gen(); + return infos.find(info => (info.keyType.flags & TypeFlags.String) !== 0)?.valueType; + }, + ); + } + + get getNumberIndexType(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNumberIndexType", + function (): Type | undefined { + if (owner.numberIndexType === false) { + owner.numberIndexType = owner.getNumberIndexTypeWorker(); + } + return owner.numberIndexType; + }, + function* (): Generator { + if (owner.numberIndexType === false) { + owner.numberIndexType = yield* owner.getNumberIndexTypeWorker.gen(); + } + return owner.numberIndexType; + }, + ); + } + + private get getNumberIndexTypeWorker(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNumberIndexTypeWorker", + function (): Type | undefined { + const infos = owner.getIndexInfos(); + return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; + }, + function* (): Generator { + const infos = yield* owner.getIndexInfos.gen(); + return infos.find(info => (info.keyType.flags & TypeFlags.Number) !== 0)?.valueType; + }, + ); + } + + get getApparentType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getApparentType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getApparentType", owner.apparentType); + owner.apparentType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getApparentType", owner.apparentType); + owner.apparentType = result.id; + return result; + }, + ); + } + + get getReducedType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReducedType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getReducedType", owner.reducedType); + owner.reducedType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getReducedType", owner.reducedType); + owner.reducedType = result.id; + return result; + }, + ); + } + + get getIndexInfos(): { + (): readonly IndexInfo[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIndexInfos", + function (): readonly IndexInfo[] { + if (owner.indexInfos === false) { + owner.indexInfos = owner.objectRegistry.fetchIndexInfosOfType(owner); + } + return owner.indexInfos; + }, + function* (): Generator { + if (owner.indexInfos === false) { + owner.indexInfos = yield* owner.objectRegistry.fetchIndexInfosOfType.gen(owner); + } + return owner.indexInfos; + }, + ); + } + + get getAliasSymbol(): { + (): Symbol | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getAliasSymbol", + function (): Symbol | undefined { + return owner.objectRegistry.fetchSymbol(owner, "getAliasSymbolOfType", owner.aliasSymbol); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getAliasSymbolOfType", owner.aliasSymbol); + }, + ); + } + + get getTarget(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTarget", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getTargetOfType", owner.target); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getTargetOfType", owner.target); + }, + ); + } + + get getFreshType(): { + (): FreshableType | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getFreshType", + function (): FreshableType | undefined { + return owner.objectRegistry.fetchOptionalType(owner, "getFreshTypeOfType", owner.freshType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getFreshTypeOfType", owner.freshType); + }, + ); + } + + get getRegularType(): { + (): FreshableType | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getRegularType", + function (): FreshableType | undefined { + return owner.objectRegistry.fetchOptionalType(owner, "getRegularTypeOfType", owner.regularType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getRegularTypeOfType", owner.regularType); + }, + ); + } + + get getTypes(): { + (): readonly Type[] | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypes", + function (): readonly Type[] | undefined { + // Only union, intersection, and template literal types have constituent + // types; any other kind has none, so return undefined rather than sending + // a request the server cannot satisfy. + if (!(owner.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { + return undefined; + } + if (owner.types === false) { + owner.types = owner.objectRegistry.fetchTypes(owner, "getTypesOfType"); + } + return owner.types; + }, + function* (): Generator { + // Only union, intersection, and template literal types have constituent + // types; any other kind has none, so return undefined rather than sending + // a request the server cannot satisfy. + if (!(owner.flags & (TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral))) { + return undefined; + } + if (owner.types === false) { + owner.types = yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypesOfType"); + } + return owner.types; + }, + ); + } + + get getTypeParameters(): { + (): readonly TypeParameter[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeParameters", + function (): readonly TypeParameter[] { + return owner.objectRegistry.fetchTypes(owner, "getTypeParametersOfType", owner.typeParameters) as readonly TypeParameter[]; + }, + function* (): Generator { + return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypeParametersOfType", owner.typeParameters)) as readonly TypeParameter[]; + }, + ); + } + + get getOuterTypeParameters(): { + (): readonly TypeParameter[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getOuterTypeParameters", + function (): readonly TypeParameter[] { + return owner.objectRegistry.fetchTypes(owner, "getOuterTypeParametersOfType", owner.outerTypeParameters) as readonly TypeParameter[]; + }, + function* (): Generator { + return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getOuterTypeParametersOfType", owner.outerTypeParameters)) as readonly TypeParameter[]; + }, + ); + } + + get getLocalTypeParameters(): { + (): readonly TypeParameter[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getLocalTypeParameters", + function (): readonly TypeParameter[] { + return owner.objectRegistry.fetchTypes(owner, "getLocalTypeParametersOfType", owner.localTypeParameters) as readonly TypeParameter[]; + }, + function* (): Generator { + return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getLocalTypeParametersOfType", owner.localTypeParameters)) as readonly TypeParameter[]; + }, + ); + } + + get getThisType(): { + (): TypeParameter | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getThisType", + function (): TypeParameter | undefined { + return owner.objectRegistry.fetchOptionalType(owner, "getThisTypeOfType", owner.thisType) as TypeParameter | undefined; + }, + function* (): Generator { + return (yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getThisTypeOfType", owner.thisType)) as TypeParameter | undefined; + }, + ); + } + + get getAliasTypeArguments(): { + (): readonly Type[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getAliasTypeArguments", + function (): readonly Type[] { + return owner.objectRegistry.fetchTypes(owner, "getAliasTypeArgumentsOfType", owner.aliasTypeArguments); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchTypes.gen(owner, "getAliasTypeArgumentsOfType", owner.aliasTypeArguments); + }, + ); + } + + get getTypeParameter(): { + (): TypeParameter; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeParameter", + function (): TypeParameter { + return owner.objectRegistry.fetchType(owner, "getTypeParameterOfMappedType", owner.typeParameter); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getTypeParameterOfMappedType", owner.typeParameter); + }, + ); + } + + get getConstraintType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConstraintType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getConstraintTypeOfMappedType", owner.constraintType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getConstraintTypeOfMappedType", owner.constraintType); + }, + ); + } + + get getNameType(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getNameType", + function (): Type | undefined { + return owner.objectRegistry.fetchOptionalType(owner, "getNameTypeOfMappedType", owner.nameType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getNameTypeOfMappedType", owner.nameType); + }, + ); + } + + get getTemplateType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTemplateType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getTemplateTypeOfMappedType", owner.templateType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getTemplateTypeOfMappedType", owner.templateType); + }, + ); + } + + get getObjectType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getObjectType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getObjectTypeOfType", owner.objectType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getObjectTypeOfType", owner.objectType); + }, + ); + } + + get getIndexType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getIndexType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getIndexTypeOfType", owner.indexType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getIndexTypeOfType", owner.indexType); + }, + ); + } + + get getCheckType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getCheckType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getCheckTypeOfType", owner.checkType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getCheckTypeOfType", owner.checkType); + }, + ); + } + + get getExtendsType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getExtendsType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getExtendsTypeOfType", owner.extendsType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getExtendsTypeOfType", owner.extendsType); + }, + ); + } + + get getBaseType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBaseType", + function (): Type { + return owner.objectRegistry.fetchType(owner, "getBaseTypeOfType", owner.baseType); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchType.gen(owner, "getBaseTypeOfType", owner.baseType); + }, + ); + } + + get getConstraint(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getConstraint", + function (): Type | undefined { + // Type parameters resolve their constraint lazily through the checker, + // whereas substitution types carry a preloaded constraint handle. + if (owner.flags & TypeFlags.TypeParameter) { + const result = owner.objectRegistry.fetchOptionalType(owner, "getConstraintOfTypeParameter", owner.constraint); + owner.constraint = result ? result.id : 0; + return result; + } + return owner.objectRegistry.fetchType(owner, "getConstraintOfType", owner.substConstraint); + }, + function* (): Generator { + // Type parameters resolve their constraint lazily through the checker, + // whereas substitution types carry a preloaded constraint handle. + if (owner.flags & TypeFlags.TypeParameter) { + const result = yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getConstraintOfTypeParameter", owner.constraint); + owner.constraint = result ? result.id : 0; + return result; + } + return yield* owner.objectRegistry.fetchType.gen(owner, "getConstraintOfType", owner.substConstraint); + }, + ); + } + + get getDefault(): { + (): Type | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getDefault", + function (): Type | undefined { + const result = owner.objectRegistry.fetchOptionalType(owner, "getDefaultFromTypeParameter", owner.default); + owner.default = result ? result.id : 0; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchOptionalType.gen(owner, "getDefaultFromTypeParameter", owner.default); + owner.default = result ? result.id : 0; + return result; + }, + ); + } + + get getTrueType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTrueType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getTrueTypeOfConditionalType", owner.trueType); + owner.trueType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getTrueTypeOfConditionalType", owner.trueType); + owner.trueType = result.id; + return result; + }, + ); + } + + get getFalseType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getFalseType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getFalseTypeOfConditionalType", owner.falseType); + owner.falseType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getFalseTypeOfConditionalType", owner.falseType); + owner.falseType = result.id; + return result; + }, + ); + } + + /** + * Get the base types of this type. Returns `undefined` for any type that is + * not a class or interface. + */ + get getBaseTypes(): { + (): readonly Type[] | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getBaseTypes", + function (): readonly Type[] | undefined { + if (!owner.isClassOrInterface()) { + return undefined; + } + if (owner.baseTypes === false) { + owner.baseTypes = owner.objectRegistry.fetchBaseTypes(owner); + } + return owner.baseTypes; + }, + function* (): Generator { + if (!owner.isClassOrInterface()) { + return undefined; + } + if (owner.baseTypes === false) { + owner.baseTypes = yield* owner.objectRegistry.fetchBaseTypes.gen(owner); + } + return owner.baseTypes; + }, + ); + } + + isClassOrInterface(): this is InterfaceType { + return isClassOrInterfaceType(this); + } + + isUnionType(): this is UnionType { + return isUnionType(this); + } + + isIntersectionType(): this is IntersectionType { + return isIntersectionType(this); + } + + isObjectType(): this is ObjectType { + return isObjectType(this); + } + + isIntrinsicType(): this is IntrinsicType { + return isIntrinsicType(this); + } + + isErrorType(): boolean { + return isErrorType(this); + } + + isLiteralType(): this is LiteralType { + return isLiteralType(this); + } + + isStringLiteralType(): this is StringLiteralType { + return isStringLiteralType(this); + } + + isNumberLiteralType(): this is NumberLiteralType { + return isNumberLiteralType(this); + } + + isBigIntLiteralType(): this is BigIntLiteralType { + return isBigIntLiteralType(this); + } + + isBooleanLiteralType(): this is BooleanLiteralType { + return isBooleanLiteralType(this); + } + + isTypeReference(): this is TypeReference { + return isTypeReference(this); + } + + isTupleType(): this is TupleTypeReference { + return this.tupleType; + } + + isTupleTypeTarget(): this is TupleType { + return this.fixedLength !== undefined; + } + + isIndexType(): this is IndexType { + return isIndexType(this); + } + + isIndexedAccessType(): this is IndexedAccessType { + return isIndexedAccessType(this); + } + + isConditionalType(): this is ConditionalType { + return isConditionalType(this); + } + + isSubstitutionType(): this is SubstitutionType { + return isSubstitutionType(this); + } + + isTemplateLiteralType(): this is TemplateLiteralType { + return isTemplateLiteralType(this); + } + + isStringMappingType(): this is StringMappingType { + return isStringMappingType(this); + } + + isTypeParameter(): this is TypeParameter { + return isTypeParameter(this); + } + + isMappedType(): this is MappedType { + return !!(this.flags & TypeFlags.Object) && !!(this.objectFlags & ObjectFlags.Mapped); + } +} + +export function isUnionType(type: Type): type is UnionType { + return (type.flags & TypeFlags.Union) !== 0; +} + +export function isIntersectionType(type: Type): type is IntersectionType { + return (type.flags & TypeFlags.Intersection) !== 0; +} + +export function isObjectType(type: Type): type is ObjectType { + return (type.flags & TypeFlags.Object) !== 0; +} + +export function isClassOrInterfaceType(type: Type): type is InterfaceType { + return isObjectType(type) && (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0; +} + +export function isIntrinsicType(type: Type): type is IntrinsicType { + return (type.flags & TypeFlags.Intrinsic) !== 0; +} + +/** + * Whether this is the error type — the placeholder the checker produces when a + * type cannot be determined (e.g. an unresolved reference). It is an intrinsic + * type named `"error"` (this covers both the singleton error type and the + * per-alias error types manufactured for unresolved type alias references). + */ +export function isErrorType(type: Type): boolean { + return isIntrinsicType(type) && type.intrinsicName === "error"; +} + +export function isLiteralType(type: Type): type is LiteralType { + return (type.flags & TypeFlags.Literal) !== 0; +} + +export function isStringLiteralType(type: Type): type is StringLiteralType { + return (type.flags & TypeFlags.StringLiteral) !== 0; +} + +export function isNumberLiteralType(type: Type): type is NumberLiteralType { + return (type.flags & TypeFlags.NumberLiteral) !== 0; +} + +export function isBigIntLiteralType(type: Type): type is BigIntLiteralType { + return (type.flags & TypeFlags.BigIntLiteral) !== 0; +} + +export function isBooleanLiteralType(type: Type): type is BooleanLiteralType { + return (type.flags & TypeFlags.BooleanLiteral) !== 0; +} + +export function isTypeReference(type: Type): type is TypeReference { + return isObjectType(type) && (type.objectFlags & ObjectFlags.Reference) !== 0; +} + +export function isTupleType(type: Type): type is TupleTypeReference { + return type.isTupleType(); +} + +export function isTupleTypeTarget(type: Type): type is TupleType { + return type.isTupleTypeTarget(); +} + +export function isIndexType(type: Type): type is IndexType { + return (type.flags & TypeFlags.Index) !== 0; +} + +export function isIndexedAccessType(type: Type): type is IndexedAccessType { + return (type.flags & TypeFlags.IndexedAccess) !== 0; +} + +export function isConditionalType(type: Type): type is ConditionalType { + return (type.flags & TypeFlags.Conditional) !== 0; +} + +export function isSubstitutionType(type: Type): type is SubstitutionType { + return (type.flags & TypeFlags.Substitution) !== 0; +} + +export function isTemplateLiteralType(type: Type): type is TemplateLiteralType { + return (type.flags & TypeFlags.TemplateLiteral) !== 0; +} + +export function isStringMappingType(type: Type): type is StringMappingType { + return (type.flags & TypeFlags.StringMapping) !== 0; +} + +export function isTypeParameter(type: Type): type is TypeParameter { + return (type.flags & TypeFlags.TypeParameter) !== 0; +} + +export class Signature { + private flags: number; + private objectRegistry: ProjectObjectRegistry; + + readonly id: number; + readonly declaration?: NodeHandle | undefined; + readonly typeParameters?: readonly number[] | undefined; + readonly parameters: readonly CompactSymbolReference[]; + readonly thisParameter?: CompactSymbolReference | undefined; + readonly target?: number | undefined; + private returnType: number | false; + + constructor(data: SignatureResponse, project: Project, objectRegistry: ProjectObjectRegistry) { + this.id = data.id; + this.flags = data.flags; + this.objectRegistry = objectRegistry; + this.declaration = data.declaration ? new NodeHandle(data.declaration, project) : undefined; + this.typeParameters = data.typeParameters ?? []; + this.parameters = data.parameters ?? []; + this.thisParameter = data.thisParameter; + this.target = data.target; + this.returnType = false; + } + + get getTypeParameters(): { + (): readonly TypeParameter[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeParameters", + function (): readonly TypeParameter[] { + return owner.objectRegistry.fetchTypes(owner, "getTypeParametersOfSignature", owner.typeParameters) as readonly TypeParameter[]; + }, + function* (): Generator { + return (yield* owner.objectRegistry.fetchTypes.gen(owner, "getTypeParametersOfSignature", owner.typeParameters)) as readonly TypeParameter[]; + }, + ); + } + + get getParameters(): { + (): readonly Symbol[]; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getParameters", + function (): readonly Symbol[] { + return owner.objectRegistry.fetchSymbols(owner, "getParametersOfSignature", owner.parameters); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchSymbols.gen(owner, "getParametersOfSignature", owner.parameters); + }, + ); + } + + get getThisParameter(): { + (): Symbol | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getThisParameter", + function (): Symbol | undefined { + return owner.objectRegistry.fetchSymbol(owner, "getThisParameterOfSignature", owner.thisParameter); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchSymbol.gen(owner, "getThisParameterOfSignature", owner.thisParameter); + }, + ); + } + + get getTarget(): { + (): Signature | undefined; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTarget", + function (): Signature | undefined { + return owner.objectRegistry.fetchSignature(owner, "getTargetOfSignature", owner.target); + }, + function* (): Generator { + return yield* owner.objectRegistry.fetchSignature.gen(owner, "getTargetOfSignature", owner.target); + }, + ); + } + + get getReturnType(): { + (): Type; + gen(): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getReturnType", + function (): Type { + const result = owner.objectRegistry.fetchType(owner, "getReturnTypeOfSignature", owner.returnType); + owner.returnType = result.id; + return result; + }, + function* (): Generator { + const result = yield* owner.objectRegistry.fetchType.gen(owner, "getReturnTypeOfSignature", owner.returnType); + owner.returnType = result.id; + return result; + }, + ); + } + + get getTypeParameterAtPosition(): { + (pos: number): Type; + gen(pos: number): Generator; + } { + const owner = this; + return cacheGeneratorMethod( + owner, + "getTypeParameterAtPosition", + function (pos: number): Type { + return owner.objectRegistry.fetchTypeParameterAtPosition(owner, pos); + }, + function* (pos: number): Generator { + return yield* owner.objectRegistry.fetchTypeParameterAtPosition.gen(owner, pos); + }, + ); + } + + get hasRestParameter(): boolean { + return (this.flags & SignatureFlags.HasRestParameter) !== 0; + } + + get isConstruct(): boolean { + return (this.flags & SignatureFlags.Construct) !== 0; + } + + get isAbstract(): boolean { + return (this.flags & SignatureFlags.Abstract) !== 0; + } +} diff --git a/packages/typescript/src/api/sync/client.ts b/packages/typescript/src/api/sync/client.ts index 42255e9513a1b..1c9661481af10 100644 --- a/packages/typescript/src/api/sync/client.ts +++ b/packages/typescript/src/api/sync/client.ts @@ -1,189 +1,189 @@ -import { - configureFileSystemCallbacks, - encodeFileSystemCallbackResult, -} from "../fsCallbacks.ts"; -import { - type ClientOptions, - type ClientSocketOptions, - type ClientSpawnOptions, - getAPIProcessArgs, - isSpawnOptions, - resolveExePath, -} from "../options.ts"; -import type { - APIMethodInfo, - APIRequest, - BatchRequestsParams, - BatchRequestsResponse, - SourceFileResponseMethod, -} from "../proto.ts"; -import { SyncRpcChannel } from "../syncChannel.ts"; -import { - combineTimingInfo, - disabledTimingInfo, - type ServerTimingInfo, - TimingCollector, - type TimingInfo, -} from "../timing.ts"; - -export type { ClientOptions, ClientSocketOptions, ClientSpawnOptions }; - -export class Client { - private channel: SyncRpcChannel; - private encoder = new TextEncoder(); - private timing: TimingCollector | undefined; - private maxResponseBytesPerPage: number | undefined; - - constructor(options: ClientOptions) { - if (!isSpawnOptions(options)) { - throw new Error("Socket connections are not yet supported in the sync client"); - } - - const args = getAPIProcessArgs(options, false); - this.maxResponseBytesPerPage = options.maxResponseBytesPerPage; - - const fsConfiguration = configureFileSystemCallbacks(options.fs); - if (fsConfiguration.arguments.length > 0) { - args.push(`--callbacks=${fsConfiguration.arguments.join(",")}`); - } - - const collectTiming = options.collectTiming ?? false; - if (collectTiming) { - this.timing = new TimingCollector(); - } - - const channel = new SyncRpcChannel(resolveExePath(options), args, collectTiming); - this.channel = channel; - - if (options.fs) { - for (const name of fsConfiguration.callbackNames) { - if (name === "writeFile") { - const callback = options.fs.writeFile; - if (typeof callback !== "function") throw new Error("Invalid writeFile callback configuration"); - - channel.registerCallback(name, (_, arg) => { - const { path, data } = JSON.parse(arg); - return JSON.stringify(encodeFileSystemCallbackResult(name, callback(path, data))); - }); - - continue; - } - - const callback = options.fs[name]; - if (typeof callback !== "function") throw new Error(`Invalid ${name} callback configuration`); - channel.registerCallback(name, (_, arg) => { - return JSON.stringify(encodeFileSystemCallbackResult(name, callback(JSON.parse(arg)))); - }); - } - } - } - - apiRequest(method: K, params?: APIMethodInfo[K]["params"]): APIMethodInfo[K]["result"] { - const encodedPayload = JSON.stringify(params); - const start = performance.now(); - const result = this.channel.requestSync(method, encodedPayload); - this.recordTiming(method, start); - if (result.length) { - return JSON.parse(result) as APIMethodInfo[K]["result"]; - } - - return undefined as APIMethodInfo[K]["result"]; - } - - registerCallback(name: string, callback: (params: unknown) => unknown): () => void { - this.channel.registerCallback(name, (_, payload) => JSON.stringify(callback(JSON.parse(payload))) ?? ""); - return () => this.channel.unregisterCallback(name); - } - - batchRequests(requests: readonly APIRequest[]): BatchRequestsResponse { - const params: BatchRequestsParams = { requests }; - if (this.maxResponseBytesPerPage !== undefined) { - params.maxResponseBytesPerPage = this.maxResponseBytesPerPage; - } - const response = this.apiRequest("batchRequests", params); - let responses = response.responses; - let continuationToken = response.continuationToken; - while (continuationToken) { - const pageParams: BatchRequestsParams = { - requests: [], - continuationToken, - }; - if (this.maxResponseBytesPerPage !== undefined) { - pageParams.maxResponseBytesPerPage = this.maxResponseBytesPerPage; - } - const page = this.apiRequest("batchRequests", pageParams); - if (page.responses.length < 200) { - responses.push(...page.responses); - } - else { - // If the number of responses is approaching the max argument length, we need to concat instead of push - responses = responses.concat(page.responses); - } - continuationToken = page.continuationToken; - } - return { responses }; - } - - apiRequestBinary(method: K, params?: APIMethodInfo[K]["params"]): Uint8Array | undefined { - const start = performance.now(); - const result = this.channel.requestBinarySync(method, this.encoder.encode(JSON.stringify(params))); - this.recordTiming(method, start); - if (result.length === 0) return undefined; - return result; - } - - echo(payload: string): string { - return this.channel.requestSync("echo", payload); - } - - echoBinary(payload: Uint8Array): Uint8Array { - return this.channel.requestBinarySync("echo", payload); - } - - /** - * Returns a combined timing snapshot: client-measured round-trip and byte - * counts folded together with the server's own per-request processing time - * (fetched via a getServerTiming request) and estimated transport overhead. - */ - getTimingInfo(): TimingInfo { - if (!this.timing) { - return disabledTimingInfo(); - } - const local = this.timing.getInfo(); - // requestSync bypasses recordTiming, so this query does not pollute the - // client-side collector. - const result = this.channel.requestSync("getServerTiming", ""); - return combineTimingInfo(local, JSON.parse(result) as ServerTimingInfo); - } - - resetTimingInfo(): void { - if (!this.timing) return; - this.timing.reset(); - // Keep the server's collection in sync so combined totals stay meaningful. - this.channel.requestSync("resetServerTiming", ""); - } - - /** - * Returns the timing collector that per-node materialization is reported - * into, or undefined when timing collection is disabled. The returned - * collector is the same one folded into {@link getTimingInfo}, so - * materialization totals surface alongside request timings. - */ - getTimingCollector(): TimingCollector | undefined { - return this.timing; - } - - private recordTiming(method: string, start: number): void { - if (!this.timing) return; - this.timing.record({ - method, - roundTripMs: performance.now() - start, - bytesSent: this.channel.lastBytesSent, - bytesReceived: this.channel.lastBytesReceived, - }); - } - - close(): void { - this.channel.close(); - } -} +import { + configureFileSystemCallbacks, + encodeFileSystemCallbackResult, +} from "../fsCallbacks.ts"; +import { + type ClientOptions, + type ClientSocketOptions, + type ClientSpawnOptions, + getAPIProcessArgs, + isSpawnOptions, + resolveExePath, +} from "../options.ts"; +import type { + APIMethodInfo, + APIRequest, + BatchRequestsParams, + BatchRequestsResponse, + SourceFileResponseMethod, +} from "../proto.ts"; +import { SyncRpcChannel } from "../syncChannel.ts"; +import { + combineTimingInfo, + disabledTimingInfo, + type ServerTimingInfo, + TimingCollector, + type TimingInfo, +} from "../timing.ts"; + +export type { ClientOptions, ClientSocketOptions, ClientSpawnOptions }; + +export class Client { + private channel: SyncRpcChannel; + private encoder = new TextEncoder(); + private timing: TimingCollector | undefined; + private maxResponseBytesPerPage: number | undefined; + + constructor(options: ClientOptions) { + if (!isSpawnOptions(options)) { + throw new Error("Socket connections are not yet supported in the sync client"); + } + + const args = getAPIProcessArgs(options, false); + this.maxResponseBytesPerPage = options.maxResponseBytesPerPage; + + const fsConfiguration = configureFileSystemCallbacks(options.fs); + if (fsConfiguration.arguments.length > 0) { + args.push(`--callbacks=${fsConfiguration.arguments.join(",")}`); + } + + const collectTiming = options.collectTiming ?? false; + if (collectTiming) { + this.timing = new TimingCollector(); + } + + const channel = new SyncRpcChannel(resolveExePath(options), args, collectTiming); + this.channel = channel; + + if (options.fs) { + for (const name of fsConfiguration.callbackNames) { + if (name === "writeFile") { + const callback = options.fs.writeFile; + if (typeof callback !== "function") throw new Error("Invalid writeFile callback configuration"); + + channel.registerCallback(name, (_, arg) => { + const { path, data } = JSON.parse(arg); + return JSON.stringify(encodeFileSystemCallbackResult(name, callback(path, data))); + }); + + continue; + } + + const callback = options.fs[name]; + if (typeof callback !== "function") throw new Error(`Invalid ${name} callback configuration`); + channel.registerCallback(name, (_, arg) => { + return JSON.stringify(encodeFileSystemCallbackResult(name, callback(JSON.parse(arg)))); + }); + } + } + } + + apiRequest(method: K, params?: APIMethodInfo[K]["params"]): APIMethodInfo[K]["result"] { + const encodedPayload = JSON.stringify(params); + const start = performance.now(); + const result = this.channel.requestSync(method, encodedPayload); + this.recordTiming(method, start); + if (result.length) { + return JSON.parse(result) as APIMethodInfo[K]["result"]; + } + + return undefined as APIMethodInfo[K]["result"]; + } + + registerCallback(name: string, callback: (params: unknown) => unknown): () => void { + this.channel.registerCallback(name, (_, payload) => JSON.stringify(callback(JSON.parse(payload))) ?? ""); + return () => this.channel.unregisterCallback(name); + } + + batchRequests(requests: readonly APIRequest[]): BatchRequestsResponse { + const params: BatchRequestsParams = { requests }; + if (this.maxResponseBytesPerPage !== undefined) { + params.maxResponseBytesPerPage = this.maxResponseBytesPerPage; + } + const response = this.apiRequest("batchRequests", params); + let responses = response.responses; + let continuationToken = response.continuationToken; + while (continuationToken) { + const pageParams: BatchRequestsParams = { + requests: [], + continuationToken, + }; + if (this.maxResponseBytesPerPage !== undefined) { + pageParams.maxResponseBytesPerPage = this.maxResponseBytesPerPage; + } + const page = this.apiRequest("batchRequests", pageParams); + if (page.responses.length < 200) { + responses.push(...page.responses); + } + else { + // If the number of responses is approaching the max argument length, we need to concat instead of push + responses = responses.concat(page.responses); + } + continuationToken = page.continuationToken; + } + return { responses }; + } + + apiRequestBinary(method: K, params?: APIMethodInfo[K]["params"]): Uint8Array | undefined { + const start = performance.now(); + const result = this.channel.requestBinarySync(method, this.encoder.encode(JSON.stringify(params))); + this.recordTiming(method, start); + if (result.length === 0) return undefined; + return result; + } + + echo(payload: string): string { + return this.channel.requestSync("echo", payload); + } + + echoBinary(payload: Uint8Array): Uint8Array { + return this.channel.requestBinarySync("echo", payload); + } + + /** + * Returns a combined timing snapshot: client-measured round-trip and byte + * counts folded together with the server's own per-request processing time + * (fetched via a getServerTiming request) and estimated transport overhead. + */ + getTimingInfo(): TimingInfo { + if (!this.timing) { + return disabledTimingInfo(); + } + const local = this.timing.getInfo(); + // requestSync bypasses recordTiming, so this query does not pollute the + // client-side collector. + const result = this.channel.requestSync("getServerTiming", ""); + return combineTimingInfo(local, JSON.parse(result) as ServerTimingInfo); + } + + resetTimingInfo(): void { + if (!this.timing) return; + this.timing.reset(); + // Keep the server's collection in sync so combined totals stay meaningful. + this.channel.requestSync("resetServerTiming", ""); + } + + /** + * Returns the timing collector that per-node materialization is reported + * into, or undefined when timing collection is disabled. The returned + * collector is the same one folded into {@link getTimingInfo}, so + * materialization totals surface alongside request timings. + */ + getTimingCollector(): TimingCollector | undefined { + return this.timing; + } + + private recordTiming(method: string, start: number): void { + if (!this.timing) return; + this.timing.record({ + method, + roundTripMs: performance.now() - start, + bytesSent: this.channel.lastBytesSent, + bytesReceived: this.channel.lastBytesReceived, + }); + } + + close(): void { + this.channel.close(); + } +} diff --git a/packages/typescript/src/api/sync/generatorSupport.ts b/packages/typescript/src/api/sync/generatorSupport.ts index fbb7aefc0dfcc..d43bdadcb6a1a 100644 --- a/packages/typescript/src/api/sync/generatorSupport.ts +++ b/packages/typescript/src/api/sync/generatorSupport.ts @@ -1,389 +1,389 @@ -import type { - APIMethodInfo, - APIRequest, - APIResponse, -} from "../proto.ts"; - -export function cacheGeneratorMethod any, Gen extends (...args: any[]) => AnyAPIRequestGenerator>( - owner: object, - name: PropertyKey, - sync: Sync, - gen: Gen, -): Sync & { readonly gen: Gen; } { - const method = Object.assign(sync, { gen }); - Object.defineProperty(owner, name, { configurable: true, value: method }); - return method; -} - -export function apiRequest( - method: Method, - params: APIMethodInfo[Method]["params"], -): Generator; -export function* apiRequest(method: PropertyKey, params: unknown): Generator<{ method: PropertyKey; params: unknown; }, unknown, unknown> { - return yield { method, params }; -} -const deferredGeneratorMarker: unique symbol = Symbol(); -const allGeneratorMarker: unique symbol = Symbol(); -interface DeferredAPIRequest { - readonly method: "__defer"; - readonly deferred: APIRequestGenerator; -} -interface AllAPIRequest { - readonly method: "__all"; - readonly generators: readonly AnyAPIRequestGenerator[]; -} -type APIRequestGeneratorYield = APIRequest | readonly APIRequest[] | DeferredAPIRequest | AllAPIRequest; -export type APIRequestGenerator = Generator; -export type DeferredAPIRequestGenerator = Generator & { readonly [deferredGeneratorMarker]: true; }; -export type AllAPIRequestGenerator = Generator; -export type AnyAPIRequestGenerator = APIRequestGenerator | DeferredAPIRequestGenerator | AllAPIRequestGenerator; -type GeneratorReturn = T extends Generator ? R : never; -export type ExecutedGeneratorsResults = number extends T["length"] ? GeneratorReturn>[] - : T extends readonly [infer Head extends AnyAPIRequestGenerator, ...infer Tail extends readonly AnyAPIRequestGenerator[]] ? Head extends DeferredAPIRequestGenerator ? ExecutedGeneratorsResults : [GeneratorReturn, ...ExecutedGeneratorsResults] - : []; - -interface GeneratorResponse { - result: unknown; - error?: string | undefined; -} - -interface GeneratorState { - generator: AnyAPIRequestGenerator; - parent: GeneratorGroup | undefined; - resultIndex: number; - previous: GeneratorState | undefined; - next: GeneratorState | undefined; - active: boolean; - request?: APIRequest | readonly APIRequest[] | undefined; - group?: GeneratorGroup | undefined; -} - -interface GeneratorGroup { - parent: GeneratorState | undefined; - children: GeneratorState[]; - results: unknown[]; - wrappers?: AllRequestGenerator[] | undefined; - remaining: number; - initializing: boolean; - failed: boolean; - error?: unknown; -} - -export function all( - ...requestGenerators: T -): AllAPIRequestGenerator> { - return new AllRequestGenerator(requestGenerators); -} - -/** - * This single-message iterator avoids native generator setup/resumption overhead. - * Keeping pending children on the instance also lets the executor collapse nested - * all helpers without allocating a scheduler group for each wrapper. - */ -class AllRequestGenerator implements AllAPIRequestGenerator { - readonly [allGeneratorMarker] = true; - generators: readonly AnyAPIRequestGenerator[] | undefined; - private done = false; - - constructor(generators: readonly AnyAPIRequestGenerator[]) { - this.generators = generators; - } - - next(value?: Return): IteratorResult { - if (this.generators) { - const generators = this.generators; - this.generators = undefined; - return { done: false, value: { method: "__all", generators } }; - } - if (this.done) return { done: true, value: undefined as Return }; - this.done = true; - return { done: true, value: value as Return }; - } - - return(value: Return): IteratorResult { - this.generators = undefined; - this.done = true; - return { done: true, value }; - } - - throw(error?: unknown): IteratorResult { - this.generators = undefined; - this.done = true; - throw error; - } - - [Symbol.iterator](): AllAPIRequestGenerator { - return this; - } - - [Symbol.dispose](): void { - this.return(undefined as Return); - } -} - -export function executeRequestGenerators( - requestGenerators: T, - executeRequests: (requests: APIRequest[]) => readonly GeneratorResponse[], -): ExecutedGeneratorsResults { - const registeredGenerators = new WeakSet(); - let firstGenerator: GeneratorState | undefined; - let lastGenerator: GeneratorState | undefined; - const root = startGroup(requestGenerators); - if (root.failed) throw root.error; - while (firstGenerator) { - const requests: APIRequest[] = []; - const responseIndexByDeduplicationKey = new Map(); - const addRequest = (request: APIRequest): number => { - const deduplicationKey = getRequestDeduplicationKey(request); - let responseIndex = deduplicationKey === undefined ? undefined : responseIndexByDeduplicationKey.get(deduplicationKey); - if (responseIndex === undefined) { - responseIndex = requests.length; - requests.push(request); - if (deduplicationKey !== undefined) responseIndexByDeduplicationKey.set(deduplicationKey, responseIndex); - } - return responseIndex; - }; - const roundGenerators: GeneratorState[] = []; - const responseIndices: (number | readonly number[])[] = []; - for (let state: GeneratorState | undefined = firstGenerator; state; state = state.next) { - if (state.request === undefined) continue; - roundGenerators.push(state); - responseIndices.push(isRequestGroup(state.request) ? state.request.map(addRequest) : addRequest(state.request)); - } - - const responses = requests.length ? executeRequests(requests) : []; - for (let index = 0; index < roundGenerators.length; index++) { - const state = roundGenerators[index]; - if (!state.active) continue; - const responseIndex = responseIndices[index]; - if (typeof responseIndex === "number") { - const response = responses[responseIndex]; - advanceGenerator(state, response.result, response.error ? { error: new Error(response.error) } : undefined); - } - else { - advanceGenerator(state, responseIndex.map(index => responses[index])); - } - } - } - return getGroupResults(root) as ExecutedGeneratorsResults; - - function advanceGenerator(state: GeneratorState, value?: unknown, failure?: { error: unknown; }): void { - state.request = undefined; - state.group = undefined; - while (true) { - let next: IteratorResult; - try { - next = failure ? state.generator.throw(failure.error) : state.generator.next(value); - } - catch (error) { - removeGenerator(state); - if (!state.parent) throw error; - failGroup(state.parent, error); - return; - } - value = undefined; - failure = undefined; - if (next.done) { - removeGenerator(state); - const parent = state.parent; - if (parent) { - if (state.resultIndex !== -1) parent.results[state.resultIndex] = next.value; - if (--parent.remaining === 0 && !parent.initializing) { - const results = getGroupResults(parent); - if (parent.parent) advanceGenerator(parent.parent, results); - } - } - return; - } - const request = next.value; - if (isRequestGroup(request)) { - state.request = request; - return; - } - switch (request.method) { - case "__defer": - addGenerator(request.deferred); - break; - case "__all": { - const group = startGroup(request.generators, state); - if (!group.failed && group.remaining) return; - state.group = undefined; - value = group.failed ? undefined : getGroupResults(group); - failure = group.failed ? { error: group.error } : undefined; - break; - } - default: - state.request = request; - return; - } - } - } - - function addGenerator(generator: AnyAPIRequestGenerator, parent?: GeneratorGroup): void { - if (registeredGenerators.has(generator)) { - const error = new Error("Cannot execute the same generator instance more than once"); - if (!parent) throw error; - failGroup(parent, error); - return; - } - registeredGenerators.add(generator); - const next = parent?.parent; - const previous = next ? next.previous : lastGenerator; - const state: GeneratorState = { - generator, - parent, - resultIndex: parent && !isDeferredGenerator(generator) ? parent.results.push(undefined) - 1 : -1, - previous, - next, - active: true, - }; - if (previous) previous.next = state; - else firstGenerator = state; - if (next) next.previous = state; - else lastGenerator = state; - parent?.children.push(state); - advanceGenerator(state); - } - - function removeGenerator(state: GeneratorState): void { - if (!state.active) return; - if (state.previous) state.previous.next = state.next; - else firstGenerator = state.next; - if (state.next) state.next.previous = state.previous; - else lastGenerator = state.previous; - state.previous = undefined; - state.next = undefined; - state.active = false; - } - - function startGroup(generators: readonly AnyAPIRequestGenerator[], parent?: GeneratorState): GeneratorGroup { - const group: GeneratorGroup = { parent, children: [], results: [], remaining: generators.length, initializing: true, failed: false }; - if (parent) parent.group = group; - while (parent && generators.length === 1) { - const generator = generators[0]; - if (!(allGeneratorMarker in generator)) break; - const wrapper = generator as AllRequestGenerator; - const pending = wrapper.generators; - if (!pending) break; - if (registeredGenerators.has(wrapper)) { - failGroup(group, new Error("Cannot execute the same generator instance more than once")); - group.initializing = false; - return group; - } - registeredGenerators.add(wrapper); - wrapper.next(); - (group.wrappers ??= []).push(wrapper); - generators = pending; - } - group.remaining = generators.length; - for (const generator of generators) { - addGenerator(generator, group); - if (group.failed) break; - } - group.initializing = false; - if (!group.failed && !group.remaining) getGroupResults(group); - return group; - } - - function getGroupResults(group: GeneratorGroup): unknown[] { - let results = group.results; - if (group.wrappers) { - for (let index = group.wrappers.length - 1; index >= 0; index--) { - results = [group.wrappers[index].next(results).value]; - } - group.results = results; - group.wrappers = undefined; - } - return results; - } - - function failGroup(group: GeneratorGroup, error: unknown): void { - group.failed = true; - group.error = error; - cancelGroup(group); - if (group.wrappers) { - for (let index = group.wrappers.length - 1; index >= 0; index--) { - try { - group.wrappers[index].throw(error); - } - catch (failure) { - error = failure; - } - } - group.error = error; - } - if (!group.initializing) { - if (!group.parent) throw error; - advanceGenerator(group.parent, undefined, { error }); - } - } - - function cancelGroup(group: GeneratorGroup): void { - for (const child of group.children) { - removeGenerator(child); - if (child.group) cancelGroup(child.group); - } - } -} - -function isDeferredGenerator(generator: AnyAPIRequestGenerator): generator is DeferredAPIRequestGenerator { - return deferredGeneratorMarker in generator; -} - -function isRequestGroup(request: APIRequestGeneratorYield): request is readonly APIRequest[] { - return Array.isArray(request); -} - -function getRequestDeduplicationKey(request: APIRequest): string | undefined { - switch (request.method) { - case "initialize": - return request.method; - default: - return undefined; - } -} - -export function defer(gen: APIRequestGenerator): DeferredAPIRequestGenerator { - return new DeferredRequestGenerator(gen); -} - -/** - * The API comparison benchmarks show this single-message iterator is cheaper than - * wrapping and branding a native generator, even with a shared generator factory. - * Shared prototype methods also avoid creating a generator function per defer call. - */ -class DeferredRequestGenerator implements DeferredAPIRequestGenerator { - readonly [deferredGeneratorMarker] = true; - private generator: APIRequestGenerator | undefined; - - constructor(generator: APIRequestGenerator) { - this.generator = generator; - } - - next(): IteratorResult { - if (this.generator) { - const generator = this.generator; - this.generator = undefined; - return { done: false, value: { method: "__defer", deferred: generator } }; - } - return { done: true, value: undefined }; - } - - return(value: void): IteratorResult { - this.generator = undefined; - return { done: true, value }; - } - - throw(error?: unknown): IteratorResult { - this.generator = undefined; - throw error; - } - - [Symbol.iterator](): DeferredAPIRequestGenerator { - return this; - } - - [Symbol.dispose](): void { - this.return(undefined); - } -} +import type { + APIMethodInfo, + APIRequest, + APIResponse, +} from "../proto.ts"; + +export function cacheGeneratorMethod any, Gen extends (...args: any[]) => AnyAPIRequestGenerator>( + owner: object, + name: PropertyKey, + sync: Sync, + gen: Gen, +): Sync & { readonly gen: Gen; } { + const method = Object.assign(sync, { gen }); + Object.defineProperty(owner, name, { configurable: true, value: method }); + return method; +} + +export function apiRequest( + method: Method, + params: APIMethodInfo[Method]["params"], +): Generator; +export function* apiRequest(method: PropertyKey, params: unknown): Generator<{ method: PropertyKey; params: unknown; }, unknown, unknown> { + return yield { method, params }; +} +const deferredGeneratorMarker: unique symbol = Symbol(); +const allGeneratorMarker: unique symbol = Symbol(); +interface DeferredAPIRequest { + readonly method: "__defer"; + readonly deferred: APIRequestGenerator; +} +interface AllAPIRequest { + readonly method: "__all"; + readonly generators: readonly AnyAPIRequestGenerator[]; +} +type APIRequestGeneratorYield = APIRequest | readonly APIRequest[] | DeferredAPIRequest | AllAPIRequest; +export type APIRequestGenerator = Generator; +export type DeferredAPIRequestGenerator = Generator & { readonly [deferredGeneratorMarker]: true; }; +export type AllAPIRequestGenerator = Generator; +export type AnyAPIRequestGenerator = APIRequestGenerator | DeferredAPIRequestGenerator | AllAPIRequestGenerator; +type GeneratorReturn = T extends Generator ? R : never; +export type ExecutedGeneratorsResults = number extends T["length"] ? GeneratorReturn>[] + : T extends readonly [infer Head extends AnyAPIRequestGenerator, ...infer Tail extends readonly AnyAPIRequestGenerator[]] ? Head extends DeferredAPIRequestGenerator ? ExecutedGeneratorsResults : [GeneratorReturn, ...ExecutedGeneratorsResults] + : []; + +interface GeneratorResponse { + result: unknown; + error?: string | undefined; +} + +interface GeneratorState { + generator: AnyAPIRequestGenerator; + parent: GeneratorGroup | undefined; + resultIndex: number; + previous: GeneratorState | undefined; + next: GeneratorState | undefined; + active: boolean; + request?: APIRequest | readonly APIRequest[] | undefined; + group?: GeneratorGroup | undefined; +} + +interface GeneratorGroup { + parent: GeneratorState | undefined; + children: GeneratorState[]; + results: unknown[]; + wrappers?: AllRequestGenerator[] | undefined; + remaining: number; + initializing: boolean; + failed: boolean; + error?: unknown; +} + +export function all( + ...requestGenerators: T +): AllAPIRequestGenerator> { + return new AllRequestGenerator(requestGenerators); +} + +/** + * This single-message iterator avoids native generator setup/resumption overhead. + * Keeping pending children on the instance also lets the executor collapse nested + * all helpers without allocating a scheduler group for each wrapper. + */ +class AllRequestGenerator implements AllAPIRequestGenerator { + readonly [allGeneratorMarker] = true; + generators: readonly AnyAPIRequestGenerator[] | undefined; + private done = false; + + constructor(generators: readonly AnyAPIRequestGenerator[]) { + this.generators = generators; + } + + next(value?: Return): IteratorResult { + if (this.generators) { + const generators = this.generators; + this.generators = undefined; + return { done: false, value: { method: "__all", generators } }; + } + if (this.done) return { done: true, value: undefined as Return }; + this.done = true; + return { done: true, value: value as Return }; + } + + return(value: Return): IteratorResult { + this.generators = undefined; + this.done = true; + return { done: true, value }; + } + + throw(error?: unknown): IteratorResult { + this.generators = undefined; + this.done = true; + throw error; + } + + [Symbol.iterator](): AllAPIRequestGenerator { + return this; + } + + [Symbol.dispose](): void { + this.return(undefined as Return); + } +} + +export function executeRequestGenerators( + requestGenerators: T, + executeRequests: (requests: APIRequest[]) => readonly GeneratorResponse[], +): ExecutedGeneratorsResults { + const registeredGenerators = new WeakSet(); + let firstGenerator: GeneratorState | undefined; + let lastGenerator: GeneratorState | undefined; + const root = startGroup(requestGenerators); + if (root.failed) throw root.error; + while (firstGenerator) { + const requests: APIRequest[] = []; + const responseIndexByDeduplicationKey = new Map(); + const addRequest = (request: APIRequest): number => { + const deduplicationKey = getRequestDeduplicationKey(request); + let responseIndex = deduplicationKey === undefined ? undefined : responseIndexByDeduplicationKey.get(deduplicationKey); + if (responseIndex === undefined) { + responseIndex = requests.length; + requests.push(request); + if (deduplicationKey !== undefined) responseIndexByDeduplicationKey.set(deduplicationKey, responseIndex); + } + return responseIndex; + }; + const roundGenerators: GeneratorState[] = []; + const responseIndices: (number | readonly number[])[] = []; + for (let state: GeneratorState | undefined = firstGenerator; state; state = state.next) { + if (state.request === undefined) continue; + roundGenerators.push(state); + responseIndices.push(isRequestGroup(state.request) ? state.request.map(addRequest) : addRequest(state.request)); + } + + const responses = requests.length ? executeRequests(requests) : []; + for (let index = 0; index < roundGenerators.length; index++) { + const state = roundGenerators[index]; + if (!state.active) continue; + const responseIndex = responseIndices[index]; + if (typeof responseIndex === "number") { + const response = responses[responseIndex]; + advanceGenerator(state, response.result, response.error ? { error: new Error(response.error) } : undefined); + } + else { + advanceGenerator(state, responseIndex.map(index => responses[index])); + } + } + } + return getGroupResults(root) as ExecutedGeneratorsResults; + + function advanceGenerator(state: GeneratorState, value?: unknown, failure?: { error: unknown; }): void { + state.request = undefined; + state.group = undefined; + while (true) { + let next: IteratorResult; + try { + next = failure ? state.generator.throw(failure.error) : state.generator.next(value); + } + catch (error) { + removeGenerator(state); + if (!state.parent) throw error; + failGroup(state.parent, error); + return; + } + value = undefined; + failure = undefined; + if (next.done) { + removeGenerator(state); + const parent = state.parent; + if (parent) { + if (state.resultIndex !== -1) parent.results[state.resultIndex] = next.value; + if (--parent.remaining === 0 && !parent.initializing) { + const results = getGroupResults(parent); + if (parent.parent) advanceGenerator(parent.parent, results); + } + } + return; + } + const request = next.value; + if (isRequestGroup(request)) { + state.request = request; + return; + } + switch (request.method) { + case "__defer": + addGenerator(request.deferred); + break; + case "__all": { + const group = startGroup(request.generators, state); + if (!group.failed && group.remaining) return; + state.group = undefined; + value = group.failed ? undefined : getGroupResults(group); + failure = group.failed ? { error: group.error } : undefined; + break; + } + default: + state.request = request; + return; + } + } + } + + function addGenerator(generator: AnyAPIRequestGenerator, parent?: GeneratorGroup): void { + if (registeredGenerators.has(generator)) { + const error = new Error("Cannot execute the same generator instance more than once"); + if (!parent) throw error; + failGroup(parent, error); + return; + } + registeredGenerators.add(generator); + const next = parent?.parent; + const previous = next ? next.previous : lastGenerator; + const state: GeneratorState = { + generator, + parent, + resultIndex: parent && !isDeferredGenerator(generator) ? parent.results.push(undefined) - 1 : -1, + previous, + next, + active: true, + }; + if (previous) previous.next = state; + else firstGenerator = state; + if (next) next.previous = state; + else lastGenerator = state; + parent?.children.push(state); + advanceGenerator(state); + } + + function removeGenerator(state: GeneratorState): void { + if (!state.active) return; + if (state.previous) state.previous.next = state.next; + else firstGenerator = state.next; + if (state.next) state.next.previous = state.previous; + else lastGenerator = state.previous; + state.previous = undefined; + state.next = undefined; + state.active = false; + } + + function startGroup(generators: readonly AnyAPIRequestGenerator[], parent?: GeneratorState): GeneratorGroup { + const group: GeneratorGroup = { parent, children: [], results: [], remaining: generators.length, initializing: true, failed: false }; + if (parent) parent.group = group; + while (parent && generators.length === 1) { + const generator = generators[0]; + if (!(allGeneratorMarker in generator)) break; + const wrapper = generator as AllRequestGenerator; + const pending = wrapper.generators; + if (!pending) break; + if (registeredGenerators.has(wrapper)) { + failGroup(group, new Error("Cannot execute the same generator instance more than once")); + group.initializing = false; + return group; + } + registeredGenerators.add(wrapper); + wrapper.next(); + (group.wrappers ??= []).push(wrapper); + generators = pending; + } + group.remaining = generators.length; + for (const generator of generators) { + addGenerator(generator, group); + if (group.failed) break; + } + group.initializing = false; + if (!group.failed && !group.remaining) getGroupResults(group); + return group; + } + + function getGroupResults(group: GeneratorGroup): unknown[] { + let results = group.results; + if (group.wrappers) { + for (let index = group.wrappers.length - 1; index >= 0; index--) { + results = [group.wrappers[index].next(results).value]; + } + group.results = results; + group.wrappers = undefined; + } + return results; + } + + function failGroup(group: GeneratorGroup, error: unknown): void { + group.failed = true; + group.error = error; + cancelGroup(group); + if (group.wrappers) { + for (let index = group.wrappers.length - 1; index >= 0; index--) { + try { + group.wrappers[index].throw(error); + } + catch (failure) { + error = failure; + } + } + group.error = error; + } + if (!group.initializing) { + if (!group.parent) throw error; + advanceGenerator(group.parent, undefined, { error }); + } + } + + function cancelGroup(group: GeneratorGroup): void { + for (const child of group.children) { + removeGenerator(child); + if (child.group) cancelGroup(child.group); + } + } +} + +function isDeferredGenerator(generator: AnyAPIRequestGenerator): generator is DeferredAPIRequestGenerator { + return deferredGeneratorMarker in generator; +} + +function isRequestGroup(request: APIRequestGeneratorYield): request is readonly APIRequest[] { + return Array.isArray(request); +} + +function getRequestDeduplicationKey(request: APIRequest): string | undefined { + switch (request.method) { + case "initialize": + return request.method; + default: + return undefined; + } +} + +export function defer(gen: APIRequestGenerator): DeferredAPIRequestGenerator { + return new DeferredRequestGenerator(gen); +} + +/** + * The API comparison benchmarks show this single-message iterator is cheaper than + * wrapping and branding a native generator, even with a shared generator factory. + * Shared prototype methods also avoid creating a generator function per defer call. + */ +class DeferredRequestGenerator implements DeferredAPIRequestGenerator { + readonly [deferredGeneratorMarker] = true; + private generator: APIRequestGenerator | undefined; + + constructor(generator: APIRequestGenerator) { + this.generator = generator; + } + + next(): IteratorResult { + if (this.generator) { + const generator = this.generator; + this.generator = undefined; + return { done: false, value: { method: "__defer", deferred: generator } }; + } + return { done: true, value: undefined }; + } + + return(value: void): IteratorResult { + this.generator = undefined; + return { done: true, value }; + } + + throw(error?: unknown): IteratorResult { + this.generator = undefined; + throw error; + } + + [Symbol.iterator](): DeferredAPIRequestGenerator { + return this; + } + + [Symbol.dispose](): void { + this.return(undefined); + } +} diff --git a/packages/typescript/src/api/sync/types.ts b/packages/typescript/src/api/sync/types.ts index 2f466b6b684ae..a842ed26526fe 100644 --- a/packages/typescript/src/api/sync/types.ts +++ b/packages/typescript/src/api/sync/types.ts @@ -1,587 +1,587 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: src/api/async/types.ts -// Regenerate: npm run generate (from packages/typescript) -// -import type { - APIRequest as ProtocolRequest, - APIResponse as ProtocolResponse, -} from "../proto.ts"; - -import type { CompletionItemKind } from "#enums/completionItemKind"; -import type { ElementFlags } from "#enums/elementFlags"; -import type { ObjectFlags } from "#enums/objectFlags"; -import type { TypeFlags } from "#enums/typeFlags"; -import type { TypePredicateKind } from "#enums/typePredicateKind"; -import type { - IndexSignatureDeclaration, - NamedTupleMember, - ParameterDeclaration, -} from "../../ast/ast.ts"; -import type { RootedFilePath } from "../../ast/index.ts"; -import type { - Diagnostic, - RequestFileSystem, -} from "../proto.ts"; -import type { - NodeHandle, - Signature, - Symbol, -} from "./api.ts"; - -export type { Diagnostic } from "../proto.ts"; - -/** - * A TypeScript type. - * - * Use TypeFlags to determine the specific kind of type and access - * kind-specific properties. For example: - * - * ```ts - * if (type.flags & TypeFlags.StringLiteral) { - * console.log((type as StringLiteralType).value); // string - * } - * ``` - */ -export interface Type { - /** Type flags — use to determine the specific kind of type. */ - readonly flags: TypeFlags; - - /** Unique identifier for this type */ - readonly id: number; - - /** Get the symbol associated with this type, if any */ - getSymbol: { - (): Symbol | undefined; - gen(): Generator; - }; - - /** Get the properties of this type. */ - getProperties: { - (): readonly Symbol[]; - gen(): Generator; - }; - - /** Get a named property of this type, if present. */ - getProperty: { - (propertyName: string): Symbol | undefined; - gen(propertyName: string): Generator; - }; - - /** Get the properties of the apparent type of this type. */ - getApparentProperties: { - (): readonly Symbol[]; - gen(): Generator; - }; - - /** Get the apparent type of this type. */ - getApparentType: { - (): Type; - gen(): Generator; - }; - - /** Get the reduced type of this type. */ - getReducedType: { - (): Type; - gen(): Generator; - }; - - /** Get the call signatures of this type. */ - getCallSignatures: { - (): readonly Signature[]; - gen(): Generator; - }; - - /** Get the construct signatures of this type. */ - getConstructSignatures: { - (): readonly Signature[]; - gen(): Generator; - }; - - /** Get this type with `null` and `undefined` removed. */ - getNonNullableType: { - (): Type; - gen(): Generator; - }; - - /** Get this type's string index value type, if present. */ - getStringIndexType: { - (): Type | undefined; - gen(): Generator; - }; - - /** Get this type's number index value type, if present. */ - getNumberIndexType: { - (): Type | undefined; - gen(): Generator; - }; - - /** Get all index information for this type. */ - getIndexInfos: { - (): readonly IndexInfo[]; - gen(): Generator; - }; - - /** Get the type arguments of the type alias this type was instantiated from, if any */ - getAliasTypeArguments: { - (): readonly Type[]; - gen(): Generator; - }; - - /** Get the symbol of the type alias this type was instantiated from, if any */ - getAliasSymbol: { - (): Symbol | undefined; - gen(): Generator; - }; - - /** - * Get the base types of this type, or `undefined` if it is not a class or - * interface type. - */ - getBaseTypes: { - (): readonly Type[] | undefined; - gen(): Generator; - }; - - /** Whether this type is a class or interface type */ - isClassOrInterface(): this is InterfaceType; - /** Whether this type is a union type */ - isUnionType(): this is UnionType; - /** Whether this type is an intersection type */ - isIntersectionType(): this is IntersectionType; - /** Whether this type is an object type */ - isObjectType(): this is ObjectType; - /** Whether this type is an intrinsic primitive type */ - isIntrinsicType(): this is IntrinsicType; - /** - * Whether this is the error type — the placeholder produced when a type - * cannot be determined (e.g. an unresolved reference). - */ - isErrorType(): boolean; - /** Whether this type is a literal type */ - isLiteralType(): this is LiteralType; - /** Whether this type is a string literal type */ - isStringLiteralType(): this is StringLiteralType; - /** Whether this type is a number literal type */ - isNumberLiteralType(): this is NumberLiteralType; - /** Whether this type is a bigint literal type */ - isBigIntLiteralType(): this is BigIntLiteralType; - /** Whether this type is a boolean literal type */ - isBooleanLiteralType(): this is BooleanLiteralType; - /** Whether this type is a type reference */ - isTypeReference(): this is TypeReference; - /** Whether this type is a tuple type reference */ - isTupleType(): this is TupleTypeReference; - /** Whether this type owns tuple metadata */ - isTupleTypeTarget(): this is TupleType; - /** Whether this type is an index type (`keyof T`) */ - isIndexType(): this is IndexType; - /** Whether this type is an indexed access type (`T[K]`) */ - isIndexedAccessType(): this is IndexedAccessType; - /** Whether this type is a conditional type */ - isConditionalType(): this is ConditionalType; - /** Whether this type is a substitution type */ - isSubstitutionType(): this is SubstitutionType; - /** Whether this type is a template literal type */ - isTemplateLiteralType(): this is TemplateLiteralType; - /** Whether this type is a string mapping type */ - isStringMappingType(): this is StringMappingType; - /** Whether this type is a type parameter */ - isTypeParameter(): this is TypeParameter; - /** Whether this is a mapped type */ - isMappedType(): this is MappedType; -} - -/** - * Freshable types (TypeFlags.Freshable) - literal types (TypeFlags.Literal) and computed enum types (TypeFlags.Enum). - */ -export interface FreshableType extends Type { - /** Get the fresh version of this type, if any */ - getFreshType: { - (): FreshableType | undefined; - gen(): Generator; - }; - /** Get the regular (non-fresh) version of this type, if any */ - getRegularType: { - (): FreshableType | undefined; - gen(): Generator; - }; -} - -/** Literal types: StringLiteral, NumberLiteral, BigIntLiteral, BooleanLiteral */ -export interface LiteralType extends FreshableType { - /** The literal value. Use TypeFlags to narrow to a specific literal subtype with a concrete value type. */ - readonly value: string | number | boolean | bigint; -} - -/** String literal types (TypeFlags.StringLiteral) */ -export interface StringLiteralType extends LiteralType { - /** The string value of the literal */ - readonly value: string; -} - -/** Numeric literal types (TypeFlags.NumberLiteral) */ -export interface NumberLiteralType extends LiteralType { - /** The numeric value of the literal */ - readonly value: number; -} - -/** BigInt literal types (TypeFlags.BigIntLiteral) */ -export interface BigIntLiteralType extends LiteralType { - /** The bigint value of the literal */ - readonly value: bigint; -} - -/** Boolean literal types (TypeFlags.BooleanLiteral) */ -export interface BooleanLiteralType extends LiteralType { - /** The boolean value of the literal */ - readonly value: boolean; -} - -/** Object types (TypeFlags.Object) */ -export interface ObjectType extends Type { - /** Object flags — use to determine the specific kind of object type. */ - readonly objectFlags: ObjectFlags; -} - -/** Mapped types (ObjectFlags.Mapped) */ -export interface MappedType extends ObjectType { - /** Get the type parameter iterated by the mapped type */ - getTypeParameter: { - (): TypeParameter; - gen(): Generator; - }; - /** Get the constraint over which the mapped type iterates */ - getConstraintType: { - (): Type; - gen(): Generator; - }; - /** Get the remapped property name type, if present */ - getNameType: { - (): Type | undefined; - gen(): Generator; - }; - /** Get the property value template type */ - getTemplateType: { - (): Type; - gen(): Generator; - }; -} - -/** Type references (ObjectFlags.Reference) — e.g. Array, Map */ -export interface TypeReference extends ObjectType { - /** Get the generic target type (e.g. Array for Array) */ - getTarget: { - (): GenericType; - gen(): Generator; - }; -} - -/** References to tuple types */ -export interface TupleTypeReference extends TypeReference { - /** Get the tuple type that describes this reference's shape */ - getTarget: { - (): TupleType; - gen(): Generator; - }; -} - -/** Interface types — classes and interfaces (ObjectFlags.ClassOrInterface) */ -export interface InterfaceType extends TypeReference { - /** Get all type parameters (outer + local, excluding thisType) */ - getTypeParameters: { - (): readonly TypeParameter[]; - gen(): Generator; - }; - /** Get outer type parameters from enclosing declarations */ - getOuterTypeParameters: { - (): readonly TypeParameter[]; - gen(): Generator; - }; - /** Get local type parameters declared on this interface/class */ - getLocalTypeParameters: { - (): readonly TypeParameter[]; - gen(): Generator; - }; - /** Get the synthetic `this` type of this interface/class */ - getThisType: { - (): TypeParameter | undefined; - gen(): Generator; - }; -} - -/** Generic types */ -export interface GenericType extends InterfaceType, TypeReference { -} - -/** Tuple type targets (ObjectFlags.Tuple) */ -export interface TupleType extends GenericType { - /** Get this tuple target */ - getTarget: { - (): TupleType; - gen(): Generator; - }; - /** Per-element flags (Required, Optional, Rest, Variadic) */ - readonly elementFlags: readonly ElementFlags[]; - /** Number of initial required or optional elements */ - readonly fixedLength: number; - /** Whether the tuple is readonly */ - readonly readonly: boolean; - /** Declarations providing tuple element names */ - readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; -} - -/** Union or intersection types (TypeFlags.Union | TypeFlags.Intersection) */ -export interface UnionOrIntersectionType extends Type { - /** Get the constituent types */ - getTypes: { - (): readonly Type[]; - gen(): Generator; - }; -} - -/** Union types (TypeFlags.Union) */ -export interface UnionType extends UnionOrIntersectionType { -} - -/** Intersection types (TypeFlags.Intersection) */ -export interface IntersectionType extends UnionOrIntersectionType { -} - -/** Structured types (TypeFlags.StructuredType) */ -export type StructuredType = ObjectType | UnionType | IntersectionType; - -/** Type parameters (TypeFlags.TypeParameter) */ -export interface TypeParameter extends Type { - /** True if this is the synthetic `this` type of an interface, class, or tuple */ - readonly isThisType?: boolean | undefined; - /** Get the constraint (the `T` in ``), or undefined if it has none */ - getConstraint: { - (): Type | undefined; - gen(): Generator; - }; - /** Get the default type (the `T` in ``), or undefined if it has none */ - getDefault: { - (): Type | undefined; - gen(): Generator; - }; -} - -/** Index types — keyof T (TypeFlags.Index) */ -export interface IndexType extends Type { - /** Get the target type T in `keyof T` */ - getTarget: { - (): Type; - gen(): Generator; - }; -} - -/** Indexed access types — T[K] (TypeFlags.IndexedAccess) */ -export interface IndexedAccessType extends Type { - /** Get the object type T in `T[K]` */ - getObjectType: { - (): Type; - gen(): Generator; - }; - /** Get the index type K in `T[K]` */ - getIndexType: { - (): Type; - gen(): Generator; - }; -} - -/** Conditional types — T extends U ? X : Y (TypeFlags.Conditional) */ -export interface ConditionalType extends Type { - /** Get the check type T in `T extends U ? X : Y` */ - getCheckType: { - (): Type; - gen(): Generator; - }; - /** Get the extends type U in `T extends U ? X : Y` */ - getExtendsType: { - (): Type; - gen(): Generator; - }; - /** Get the true type X in `T extends U ? X : Y` */ - getTrueType: { - (): Type; - gen(): Generator; - }; - /** Get the false type Y in `T extends U ? X : Y` */ - getFalseType: { - (): Type; - gen(): Generator; - }; -} - -/** Substitution types (TypeFlags.Substitution) */ -export interface SubstitutionType extends Type { - getBaseType: { - (): Type; - gen(): Generator; - }; - getConstraint: { - (): Type; - gen(): Generator; - }; -} - -/** Template literal types (TypeFlags.TemplateLiteral) */ -export interface TemplateLiteralType extends Type { - /** Text segments (always one more than the number of type spans) */ - readonly texts: readonly string[]; - /** Get the types interspersed between text segments */ - getTypes: { - (): readonly Type[]; - gen(): Generator; - }; -} - -/** String mapping types — Uppercase, Lowercase, etc. (TypeFlags.StringMapping) */ -export interface StringMappingType extends Type { - /** Get the mapped type */ - getTarget: { - (): Type; - gen(): Generator; - }; -} - -/** Intrinsic types — any, unknown, string, number, bigint, symbol, void, undefined, null, never, object (TypeFlags.Intrinsic) */ -export interface IntrinsicType extends Type { - /** The intrinsic type name (e.g. "any", "string", "never") */ - readonly intrinsicName: string; -} - -/** Base for all type predicates */ -export interface TypePredicateBase { - readonly kind: TypePredicateKind; - readonly type: Type | undefined; -} - -/** `this is T` */ -export interface ThisTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.This; - readonly parameterName: undefined; - readonly parameterIndex: undefined; - readonly type: Type; -} - -/** `x is T` */ -export interface IdentifierTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.Identifier; - readonly parameterName: string; - readonly parameterIndex: number; - readonly type: Type; -} - -/** `asserts this is T` */ -export interface AssertsThisTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.AssertsThis; - readonly parameterName: undefined; - readonly parameterIndex: undefined; - readonly type: Type | undefined; -} - -/** `asserts x is T` */ -export interface AssertsIdentifierTypePredicate extends TypePredicateBase { - readonly kind: TypePredicateKind.AssertsIdentifier; - readonly parameterName: string; - readonly parameterIndex: number; - readonly type: Type | undefined; -} - -/** A type predicate — e.g. `x is T` or `asserts x is T` */ -export type TypePredicate = ThisTypePredicate | IdentifierTypePredicate | AssertsThisTypePredicate | AssertsIdentifierTypePredicate; - -/** An index signature — e.g. `[key: string]: T` */ -export interface IndexInfo { - /** The index key type (e.g. string or number) */ - readonly keyType: Type; - /** The index value type */ - readonly valueType: Type; - /** Whether the index signature is readonly */ - readonly isReadonly: boolean; - /** The index signature declaration, if any */ - readonly declaration?: NodeHandle | undefined; -} - -/** - * A single JSDoc tag attached to a symbol — e.g. `@param`, `@returns`. - */ -export interface JSDocTagInfo { - /** The tag name, without the leading `@` — e.g. `"param"`. */ - readonly name: string; - /** The rendered tag text, if any — e.g. `"a the first number"` for `@param a the first number`. */ - readonly text?: string | undefined; -} - -export interface CompletionEntryLabelDetails { - detail?: string | undefined; - description?: string | undefined; -} - -/** Options for {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionOptions { - triggerCharacter?: string | undefined; - /** Include a `symbol` property on each completion entry. Only populated for symbol-based completions (not keywords or literals). */ - includeSymbol?: boolean | undefined; -} - -/** A single completion item returned by {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionEntry { - readonly name: string; - readonly kind?: CompletionItemKind | undefined; - readonly sortText?: string | undefined; - readonly insertText?: string | undefined; - readonly filterText?: string | undefined; - readonly detail?: string | undefined; - readonly labelDetails?: CompletionEntryLabelDetails | undefined; - /** The symbol associated with this completion entry. Only set when `includeSymbol: true` is passed and a symbol is available. */ - readonly symbol?: Symbol | undefined; -} - -/** The result of {@link LanguageService.getCompletionsAtPosition}. */ -export interface CompletionInfo { - readonly isIncomplete: boolean; - readonly entries: readonly CompletionEntry[]; -} - -export interface FormatDiagnosticsHost { - getCurrentDirectory(): string; - getCanonicalFileName(fileName: string): string; - getNewLine(): string; -} - -export interface EmitOutputFile { - readonly text: string; - readonly sourceFileName?: RootedFilePath | undefined; -} - -export interface EmitResult { - readonly emitSkipped: boolean; - readonly diagnostics: readonly Diagnostic[]; - readonly emittedFiles: readonly RootedFilePath[]; - /** Emitted files captured as a filesystem layer suitable for {@link Snapshot.update}. */ - readonly fileSystem?: RequestFileSystem | undefined; -} - -export interface EmitOutput { - readonly emitSkipped: boolean; - readonly diagnostics: readonly Diagnostic[]; - readonly outputFiles: ReadonlyMap; -} - -export interface ImportSymbolAction { - readonly kind: "importSymbol"; - readonly symbol: Symbol; - readonly isValidTypeOnlyUseSite?: boolean | undefined; -} - -export type ImportAdderAction = ImportSymbolAction; - -export interface GetImportEditsForSymbolsOptions { - readonly isValidTypeOnlyUseSite?: boolean | undefined; -} +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: src/api/async/types.ts +// Regenerate: npm run generate (from packages/typescript) +// +import type { + APIRequest as ProtocolRequest, + APIResponse as ProtocolResponse, +} from "../proto.ts"; + +import type { CompletionItemKind } from "#enums/completionItemKind"; +import type { ElementFlags } from "#enums/elementFlags"; +import type { ObjectFlags } from "#enums/objectFlags"; +import type { TypeFlags } from "#enums/typeFlags"; +import type { TypePredicateKind } from "#enums/typePredicateKind"; +import type { + IndexSignatureDeclaration, + NamedTupleMember, + ParameterDeclaration, +} from "../../ast/ast.ts"; +import type { RootedFilePath } from "../../ast/index.ts"; +import type { + Diagnostic, + RequestFileSystem, +} from "../proto.ts"; +import type { + NodeHandle, + Signature, + Symbol, +} from "./api.ts"; + +export type { Diagnostic } from "../proto.ts"; + +/** + * A TypeScript type. + * + * Use TypeFlags to determine the specific kind of type and access + * kind-specific properties. For example: + * + * ```ts + * if (type.flags & TypeFlags.StringLiteral) { + * console.log((type as StringLiteralType).value); // string + * } + * ``` + */ +export interface Type { + /** Type flags — use to determine the specific kind of type. */ + readonly flags: TypeFlags; + + /** Unique identifier for this type */ + readonly id: number; + + /** Get the symbol associated with this type, if any */ + getSymbol: { + (): Symbol | undefined; + gen(): Generator; + }; + + /** Get the properties of this type. */ + getProperties: { + (): readonly Symbol[]; + gen(): Generator; + }; + + /** Get a named property of this type, if present. */ + getProperty: { + (propertyName: string): Symbol | undefined; + gen(propertyName: string): Generator; + }; + + /** Get the properties of the apparent type of this type. */ + getApparentProperties: { + (): readonly Symbol[]; + gen(): Generator; + }; + + /** Get the apparent type of this type. */ + getApparentType: { + (): Type; + gen(): Generator; + }; + + /** Get the reduced type of this type. */ + getReducedType: { + (): Type; + gen(): Generator; + }; + + /** Get the call signatures of this type. */ + getCallSignatures: { + (): readonly Signature[]; + gen(): Generator; + }; + + /** Get the construct signatures of this type. */ + getConstructSignatures: { + (): readonly Signature[]; + gen(): Generator; + }; + + /** Get this type with `null` and `undefined` removed. */ + getNonNullableType: { + (): Type; + gen(): Generator; + }; + + /** Get this type's string index value type, if present. */ + getStringIndexType: { + (): Type | undefined; + gen(): Generator; + }; + + /** Get this type's number index value type, if present. */ + getNumberIndexType: { + (): Type | undefined; + gen(): Generator; + }; + + /** Get all index information for this type. */ + getIndexInfos: { + (): readonly IndexInfo[]; + gen(): Generator; + }; + + /** Get the type arguments of the type alias this type was instantiated from, if any */ + getAliasTypeArguments: { + (): readonly Type[]; + gen(): Generator; + }; + + /** Get the symbol of the type alias this type was instantiated from, if any */ + getAliasSymbol: { + (): Symbol | undefined; + gen(): Generator; + }; + + /** + * Get the base types of this type, or `undefined` if it is not a class or + * interface type. + */ + getBaseTypes: { + (): readonly Type[] | undefined; + gen(): Generator; + }; + + /** Whether this type is a class or interface type */ + isClassOrInterface(): this is InterfaceType; + /** Whether this type is a union type */ + isUnionType(): this is UnionType; + /** Whether this type is an intersection type */ + isIntersectionType(): this is IntersectionType; + /** Whether this type is an object type */ + isObjectType(): this is ObjectType; + /** Whether this type is an intrinsic primitive type */ + isIntrinsicType(): this is IntrinsicType; + /** + * Whether this is the error type — the placeholder produced when a type + * cannot be determined (e.g. an unresolved reference). + */ + isErrorType(): boolean; + /** Whether this type is a literal type */ + isLiteralType(): this is LiteralType; + /** Whether this type is a string literal type */ + isStringLiteralType(): this is StringLiteralType; + /** Whether this type is a number literal type */ + isNumberLiteralType(): this is NumberLiteralType; + /** Whether this type is a bigint literal type */ + isBigIntLiteralType(): this is BigIntLiteralType; + /** Whether this type is a boolean literal type */ + isBooleanLiteralType(): this is BooleanLiteralType; + /** Whether this type is a type reference */ + isTypeReference(): this is TypeReference; + /** Whether this type is a tuple type reference */ + isTupleType(): this is TupleTypeReference; + /** Whether this type owns tuple metadata */ + isTupleTypeTarget(): this is TupleType; + /** Whether this type is an index type (`keyof T`) */ + isIndexType(): this is IndexType; + /** Whether this type is an indexed access type (`T[K]`) */ + isIndexedAccessType(): this is IndexedAccessType; + /** Whether this type is a conditional type */ + isConditionalType(): this is ConditionalType; + /** Whether this type is a substitution type */ + isSubstitutionType(): this is SubstitutionType; + /** Whether this type is a template literal type */ + isTemplateLiteralType(): this is TemplateLiteralType; + /** Whether this type is a string mapping type */ + isStringMappingType(): this is StringMappingType; + /** Whether this type is a type parameter */ + isTypeParameter(): this is TypeParameter; + /** Whether this is a mapped type */ + isMappedType(): this is MappedType; +} + +/** + * Freshable types (TypeFlags.Freshable) - literal types (TypeFlags.Literal) and computed enum types (TypeFlags.Enum). + */ +export interface FreshableType extends Type { + /** Get the fresh version of this type, if any */ + getFreshType: { + (): FreshableType | undefined; + gen(): Generator; + }; + /** Get the regular (non-fresh) version of this type, if any */ + getRegularType: { + (): FreshableType | undefined; + gen(): Generator; + }; +} + +/** Literal types: StringLiteral, NumberLiteral, BigIntLiteral, BooleanLiteral */ +export interface LiteralType extends FreshableType { + /** The literal value. Use TypeFlags to narrow to a specific literal subtype with a concrete value type. */ + readonly value: string | number | boolean | bigint; +} + +/** String literal types (TypeFlags.StringLiteral) */ +export interface StringLiteralType extends LiteralType { + /** The string value of the literal */ + readonly value: string; +} + +/** Numeric literal types (TypeFlags.NumberLiteral) */ +export interface NumberLiteralType extends LiteralType { + /** The numeric value of the literal */ + readonly value: number; +} + +/** BigInt literal types (TypeFlags.BigIntLiteral) */ +export interface BigIntLiteralType extends LiteralType { + /** The bigint value of the literal */ + readonly value: bigint; +} + +/** Boolean literal types (TypeFlags.BooleanLiteral) */ +export interface BooleanLiteralType extends LiteralType { + /** The boolean value of the literal */ + readonly value: boolean; +} + +/** Object types (TypeFlags.Object) */ +export interface ObjectType extends Type { + /** Object flags — use to determine the specific kind of object type. */ + readonly objectFlags: ObjectFlags; +} + +/** Mapped types (ObjectFlags.Mapped) */ +export interface MappedType extends ObjectType { + /** Get the type parameter iterated by the mapped type */ + getTypeParameter: { + (): TypeParameter; + gen(): Generator; + }; + /** Get the constraint over which the mapped type iterates */ + getConstraintType: { + (): Type; + gen(): Generator; + }; + /** Get the remapped property name type, if present */ + getNameType: { + (): Type | undefined; + gen(): Generator; + }; + /** Get the property value template type */ + getTemplateType: { + (): Type; + gen(): Generator; + }; +} + +/** Type references (ObjectFlags.Reference) — e.g. Array, Map */ +export interface TypeReference extends ObjectType { + /** Get the generic target type (e.g. Array for Array) */ + getTarget: { + (): GenericType; + gen(): Generator; + }; +} + +/** References to tuple types */ +export interface TupleTypeReference extends TypeReference { + /** Get the tuple type that describes this reference's shape */ + getTarget: { + (): TupleType; + gen(): Generator; + }; +} + +/** Interface types — classes and interfaces (ObjectFlags.ClassOrInterface) */ +export interface InterfaceType extends TypeReference { + /** Get all type parameters (outer + local, excluding thisType) */ + getTypeParameters: { + (): readonly TypeParameter[]; + gen(): Generator; + }; + /** Get outer type parameters from enclosing declarations */ + getOuterTypeParameters: { + (): readonly TypeParameter[]; + gen(): Generator; + }; + /** Get local type parameters declared on this interface/class */ + getLocalTypeParameters: { + (): readonly TypeParameter[]; + gen(): Generator; + }; + /** Get the synthetic `this` type of this interface/class */ + getThisType: { + (): TypeParameter | undefined; + gen(): Generator; + }; +} + +/** Generic types */ +export interface GenericType extends InterfaceType, TypeReference { +} + +/** Tuple type targets (ObjectFlags.Tuple) */ +export interface TupleType extends GenericType { + /** Get this tuple target */ + getTarget: { + (): TupleType; + gen(): Generator; + }; + /** Per-element flags (Required, Optional, Rest, Variadic) */ + readonly elementFlags: readonly ElementFlags[]; + /** Number of initial required or optional elements */ + readonly fixedLength: number; + /** Whether the tuple is readonly */ + readonly readonly: boolean; + /** Declarations providing tuple element names */ + readonly labeledElementDeclarations?: readonly (NodeHandle | undefined)[]; +} + +/** Union or intersection types (TypeFlags.Union | TypeFlags.Intersection) */ +export interface UnionOrIntersectionType extends Type { + /** Get the constituent types */ + getTypes: { + (): readonly Type[]; + gen(): Generator; + }; +} + +/** Union types (TypeFlags.Union) */ +export interface UnionType extends UnionOrIntersectionType { +} + +/** Intersection types (TypeFlags.Intersection) */ +export interface IntersectionType extends UnionOrIntersectionType { +} + +/** Structured types (TypeFlags.StructuredType) */ +export type StructuredType = ObjectType | UnionType | IntersectionType; + +/** Type parameters (TypeFlags.TypeParameter) */ +export interface TypeParameter extends Type { + /** True if this is the synthetic `this` type of an interface, class, or tuple */ + readonly isThisType?: boolean | undefined; + /** Get the constraint (the `T` in ``), or undefined if it has none */ + getConstraint: { + (): Type | undefined; + gen(): Generator; + }; + /** Get the default type (the `T` in ``), or undefined if it has none */ + getDefault: { + (): Type | undefined; + gen(): Generator; + }; +} + +/** Index types — keyof T (TypeFlags.Index) */ +export interface IndexType extends Type { + /** Get the target type T in `keyof T` */ + getTarget: { + (): Type; + gen(): Generator; + }; +} + +/** Indexed access types — T[K] (TypeFlags.IndexedAccess) */ +export interface IndexedAccessType extends Type { + /** Get the object type T in `T[K]` */ + getObjectType: { + (): Type; + gen(): Generator; + }; + /** Get the index type K in `T[K]` */ + getIndexType: { + (): Type; + gen(): Generator; + }; +} + +/** Conditional types — T extends U ? X : Y (TypeFlags.Conditional) */ +export interface ConditionalType extends Type { + /** Get the check type T in `T extends U ? X : Y` */ + getCheckType: { + (): Type; + gen(): Generator; + }; + /** Get the extends type U in `T extends U ? X : Y` */ + getExtendsType: { + (): Type; + gen(): Generator; + }; + /** Get the true type X in `T extends U ? X : Y` */ + getTrueType: { + (): Type; + gen(): Generator; + }; + /** Get the false type Y in `T extends U ? X : Y` */ + getFalseType: { + (): Type; + gen(): Generator; + }; +} + +/** Substitution types (TypeFlags.Substitution) */ +export interface SubstitutionType extends Type { + getBaseType: { + (): Type; + gen(): Generator; + }; + getConstraint: { + (): Type; + gen(): Generator; + }; +} + +/** Template literal types (TypeFlags.TemplateLiteral) */ +export interface TemplateLiteralType extends Type { + /** Text segments (always one more than the number of type spans) */ + readonly texts: readonly string[]; + /** Get the types interspersed between text segments */ + getTypes: { + (): readonly Type[]; + gen(): Generator; + }; +} + +/** String mapping types — Uppercase, Lowercase, etc. (TypeFlags.StringMapping) */ +export interface StringMappingType extends Type { + /** Get the mapped type */ + getTarget: { + (): Type; + gen(): Generator; + }; +} + +/** Intrinsic types — any, unknown, string, number, bigint, symbol, void, undefined, null, never, object (TypeFlags.Intrinsic) */ +export interface IntrinsicType extends Type { + /** The intrinsic type name (e.g. "any", "string", "never") */ + readonly intrinsicName: string; +} + +/** Base for all type predicates */ +export interface TypePredicateBase { + readonly kind: TypePredicateKind; + readonly type: Type | undefined; +} + +/** `this is T` */ +export interface ThisTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.This; + readonly parameterName: undefined; + readonly parameterIndex: undefined; + readonly type: Type; +} + +/** `x is T` */ +export interface IdentifierTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.Identifier; + readonly parameterName: string; + readonly parameterIndex: number; + readonly type: Type; +} + +/** `asserts this is T` */ +export interface AssertsThisTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.AssertsThis; + readonly parameterName: undefined; + readonly parameterIndex: undefined; + readonly type: Type | undefined; +} + +/** `asserts x is T` */ +export interface AssertsIdentifierTypePredicate extends TypePredicateBase { + readonly kind: TypePredicateKind.AssertsIdentifier; + readonly parameterName: string; + readonly parameterIndex: number; + readonly type: Type | undefined; +} + +/** A type predicate — e.g. `x is T` or `asserts x is T` */ +export type TypePredicate = ThisTypePredicate | IdentifierTypePredicate | AssertsThisTypePredicate | AssertsIdentifierTypePredicate; + +/** An index signature — e.g. `[key: string]: T` */ +export interface IndexInfo { + /** The index key type (e.g. string or number) */ + readonly keyType: Type; + /** The index value type */ + readonly valueType: Type; + /** Whether the index signature is readonly */ + readonly isReadonly: boolean; + /** The index signature declaration, if any */ + readonly declaration?: NodeHandle | undefined; +} + +/** + * A single JSDoc tag attached to a symbol — e.g. `@param`, `@returns`. + */ +export interface JSDocTagInfo { + /** The tag name, without the leading `@` — e.g. `"param"`. */ + readonly name: string; + /** The rendered tag text, if any — e.g. `"a the first number"` for `@param a the first number`. */ + readonly text?: string | undefined; +} + +export interface CompletionEntryLabelDetails { + detail?: string | undefined; + description?: string | undefined; +} + +/** Options for {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionOptions { + triggerCharacter?: string | undefined; + /** Include a `symbol` property on each completion entry. Only populated for symbol-based completions (not keywords or literals). */ + includeSymbol?: boolean | undefined; +} + +/** A single completion item returned by {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionEntry { + readonly name: string; + readonly kind?: CompletionItemKind | undefined; + readonly sortText?: string | undefined; + readonly insertText?: string | undefined; + readonly filterText?: string | undefined; + readonly detail?: string | undefined; + readonly labelDetails?: CompletionEntryLabelDetails | undefined; + /** The symbol associated with this completion entry. Only set when `includeSymbol: true` is passed and a symbol is available. */ + readonly symbol?: Symbol | undefined; +} + +/** The result of {@link LanguageService.getCompletionsAtPosition}. */ +export interface CompletionInfo { + readonly isIncomplete: boolean; + readonly entries: readonly CompletionEntry[]; +} + +export interface FormatDiagnosticsHost { + getCurrentDirectory(): string; + getCanonicalFileName(fileName: string): string; + getNewLine(): string; +} + +export interface EmitOutputFile { + readonly text: string; + readonly sourceFileName?: RootedFilePath | undefined; +} + +export interface EmitResult { + readonly emitSkipped: boolean; + readonly diagnostics: readonly Diagnostic[]; + readonly emittedFiles: readonly RootedFilePath[]; + /** Emitted files captured as a filesystem layer suitable for {@link Snapshot.update}. */ + readonly fileSystem?: RequestFileSystem | undefined; +} + +export interface EmitOutput { + readonly emitSkipped: boolean; + readonly diagnostics: readonly Diagnostic[]; + readonly outputFiles: ReadonlyMap; +} + +export interface ImportSymbolAction { + readonly kind: "importSymbol"; + readonly symbol: Symbol; + readonly isValidTypeOnlyUseSite?: boolean | undefined; +} + +export type ImportAdderAction = ImportSymbolAction; + +export interface GetImportEditsForSymbolsOptions { + readonly isValidTypeOnlyUseSite?: boolean | undefined; +} diff --git a/packages/typescript/src/api/syncChannel.ts b/packages/typescript/src/api/syncChannel.ts index 6672c5aa79971..38d42b04227e7 100644 --- a/packages/typescript/src/api/syncChannel.ts +++ b/packages/typescript/src/api/syncChannel.ts @@ -1,624 +1,624 @@ -/** - * Pure JS replacement for @typescript/libsyncrpc. - * - * Spawns a child process and communicates with it synchronously over - * stdin/stdout pipes using the same MessagePack-based tuple protocol: - * [MessageType (u8), method (bin), payload (bin)] - * - * Synchronous I/O is achieved by calling fs.readSync / fs.writeSync - * directly on the pipe file descriptors obtained from the spawned - * ChildProcess. - */ - -import { - type ChildProcess, - spawn, -} from "node:child_process"; -import { - closeSync, - openSync, - readSync, - writeSync, -} from "node:fs"; -import type { - Readable, - Writable, -} from "node:stream"; - -interface StdioHandle { - fd: number; - setBlocking?: ((value: boolean) => void) | undefined; -} - -interface StdoutWithHandle extends Readable { - _handle: StdioHandle; - unref: () => void; -} - -interface StdinWithHandle extends Writable { - _handle: StdioHandle; - unref: () => void; -} - -import { - binHeaderSize, - MSGPACK_BIN16, - MSGPACK_BIN32, - MSGPACK_BIN8, - MSGPACK_FIXARRAY3, - MSGPACK_UINT8, - writeBinHeader, -} from "./node/msgpack.ts"; - -// ── MessageType constants ──────────────────────────────────────────── -// Sent by channel (parent → child) -const MSG_REQUEST = 1; -const MSG_CALL_RESPONSE = 2; -const MSG_CALL_ERROR = 3; -// Sent by child (child → parent) -const MSG_RESPONSE = 4; -const MSG_ERROR = 5; -const MSG_CALL = 6; - -// Pre-allocated buffer used by Atomics.wait for tiny sleeps when a -// non-blocking fd returns EAGAIN. -const sleepBuf = new Int32Array(new SharedArrayBuffer(4)); - -// Shared empty buffer – avoids allocating Buffer.alloc(0) on every -// zero-length bin field. -const EMPTY_BUF = Buffer.alloc(0); - -// ── Global cleanup tracking ───────────────────────────────────────── -// Track all live child processes so they can be killed on process exit. -// This mimics the auto-cleanup behavior of the native libsyncrpc module, -// whose Rust/C++ destructors would kill children automatically. -const liveChildren = new Set(); - -process.on("exit", () => { - for (const child of liveChildren) { - try { - child.kill(); - } - catch { - // swallow – process may already be dead - } - } - liveChildren.clear(); -}); - -/** - * SyncRpcChannel – drop-in replacement for the native libsyncrpc class. - * - * API surface intentionally matches the original: - * - constructor(exe, args) - * - requestSync(method, payload): string - * - requestBinarySync(method, payload): Uint8Array - * - registerCallback(name, cb) - * - close() - * - * The protocol is unversioned; both sides (this JS channel and the Go - * child process) must be built from the same tree. - * - * This class is **not** thread-safe. All calls must originate from a - * single thread — do not share an instance across worker threads. - */ -export class SyncRpcChannel { - private child: ChildProcess; - private readFd: number; - private writeFd: number; - private pipeFd: number | undefined; - private callbacks = new Map string>(); - - private methodBufCache = new Map(); - - // When true, the payload byte lengths of each request/response are recorded - // and exposed via the `last*` fields below. These count only the JSON/binary - // payload bytes, not the MessagePack tuple framing (message type, method - // name, and length headers). - private readonly collectTiming: boolean; - - // Per-request payload byte measurements for the most recently completed - // request. Only meaningful when `collectTiming` is true. Callers read these - // immediately after a request returns (the channel is strictly serial). - lastBytesSent = 0; - lastBytesReceived = 0; - - private _msgType = 0; - private _msgName: Buffer = EMPTY_BUF; - private _msgPayload: Buffer = EMPTY_BUF; - - private headerBuf = Buffer.allocUnsafe(4); - - // Read-ahead buffer – reduces readSync syscalls by buffering data from the pipe. - private readBuf = Buffer.allocUnsafe(65536); - private readBufPos = 0; - private readBufLen = 0; - - // Write buffer – assembles entire tuples for a single writeSync. - private writeBuf = Buffer.allocUnsafe(65536); - - constructor(exe: string, args: string[], collectTiming = false) { - this.collectTiming = collectTiming; - const isWindows = process.platform === "win32"; - - if (isWindows) { - // On Windows, libuv pipe handles don't expose POSIX fds, so - // readSync/writeSync can't be used on stdio pipes. Instead, - // we create a Windows named pipe path, pass it to the child - // via --pipe, and open it with fs.openSync which returns a - // real C-runtime fd backed by a proper HANDLE. - const pipePath = `\\\\.\\pipe\\tsgo-sync-${process.pid}-${Date.now()}`; - this.child = spawn(exe, [...args, "--pipe", pipePath], { - stdio: ["ignore", "ignore", "inherit"], - }); - - // Retry openSync until the child creates the named pipe. - let fd: number | undefined; - for (let i = 0; i < 500; i++) { - try { - fd = openSync(pipePath, "r+"); - break; - } - catch { - if (this.child.exitCode !== null) { - throw new Error( - `Child process exited with code ${this.child.exitCode} before pipe was ready`, - ); - } - Atomics.wait(sleepBuf, 0, 0, 10); - } - } - if (fd === undefined) { - this.child.kill(); - throw new Error("SyncRpcChannel: timed out connecting to named pipe"); - } - this.readFd = fd; - this.writeFd = fd; - this.pipeFd = fd; - } - else { - // POSIX: use stdio pipe file descriptors directly. - this.child = spawn(exe, args, { - stdio: ["pipe", "pipe", "inherit"], - }); - - const stdout = this.child.stdout! as StdoutWithHandle; - const stdin = this.child.stdin! as StdinWithHandle; - - this.readFd = stdout._handle.fd; - this.writeFd = stdin._handle.fd; - - if (typeof this.readFd !== "number" || this.readFd < 0 || typeof this.writeFd !== "number" || this.writeFd < 0) { - stdout.destroy(); - stdin.destroy(); - this.child.kill(); - throw new Error( - "SyncRpcChannel: could not obtain pipe file descriptors.", - ); - } - - // Set the pipe handles to blocking mode. Under node --test's - // process isolation, pipes are created in non-blocking mode - // (for the IPC channel). This causes readSync/writeSync to get - // EAGAIN, requiring costly 1ms sleeps per retry. Setting - // blocking mode ensures readSync blocks properly until data - // arrives, matching the behavior of the native libsyncrpc. - stdout._handle.setBlocking?.(true); - stdin._handle.setBlocking?.(true); - - // Prevent Node's event-loop from reading stdout or keeping the - // process alive – we will use fs.readSync exclusively. - stdout.pause(); - stdout.unref(); - stdin.unref(); - } - - // Track for auto-cleanup on process exit. - liveChildren.add(this.child); - this.child.unref(); - } - - // ── Public API ────────────────────────────────────────────────── - - /** - * Send a request and synchronously wait for the response (string). - * Handles Call (callback) messages from the child inline. - */ - requestSync(method: string, payload: string): string { - this.ensureOpen(); - const result = this.requestBytesSync(method, payload); - return result.toString("utf-8"); - } - - /** - * Send a request and synchronously wait for the response (binary). - * Handles Call (callback) messages from the child inline. - */ - requestBinarySync(method: string, payload: Uint8Array): Uint8Array { - this.ensureOpen(); - return this.requestBytesSync(method, payload); - } - - /** Register a string→string callback that the child may invoke. */ - registerCallback(name: string, callback: (name: string, payload: string) => string): void { - this.callbacks.set(name, callback); - } - - unregisterCallback(name: string): void { - this.callbacks.delete(name); - } - - /** Kill the child process and release resources. */ - close(): void { - try { - liveChildren.delete(this.child); - if (this.pipeFd !== undefined) { - closeSync(this.pipeFd); - this.pipeFd = undefined; - } - // Destroy the stdio streams so that their pipe handles are closed - // and no longer prevent the event loop from draining. - this.child.stdout?.destroy(); - this.child.stdin?.destroy(); - this.child.kill(); - this.readFd = -1; - this.writeFd = -1; - } - catch { - // swallow – process may already be dead - } - } - - // ── Core request loop ─────────────────────────────────────────── - - private ensureOpen(): void { - if (this.readFd < 0) { - throw new Error("SyncRpcChannel is closed"); - } - } - - private getMethodBuf(method: string): Buffer { - let buf = this.methodBufCache.get(method); - if (buf === undefined) { - buf = Buffer.from(method, "utf-8"); - this.methodBufCache.set(method, buf); - } - return buf; - } - - private requestBytesSync(method: string, payload: Buffer | Uint8Array | string): Buffer { - const methodBuf = this.getMethodBuf(method); - if (this.collectTiming) { - this.lastBytesSent = typeof payload === "string" - ? Buffer.byteLength(payload, "utf-8") - : payload.length; - this.lastBytesReceived = 0; - } - this.writeTuple(MSG_REQUEST, methodBuf, payload); - - for (;;) { - this.readTuple(); - - switch (this._msgType) { - case MSG_RESPONSE: { - // Compare raw bytes instead of decoding to string. - if (!methodBuf.equals(this._msgName)) { - throw new Error( - `name mismatch for response: expected \`${method}\`, got \`${this._msgName.toString("utf-8")}\``, - ); - } - if (this.collectTiming) { - this.lastBytesReceived = this._msgPayload.length; - } - return this._msgPayload; - } - case MSG_ERROR: { - if (methodBuf.equals(this._msgName)) { - throw new Error(this._msgPayload.toString("utf-8")); - } - throw new Error( - `name mismatch for response: expected \`${method}\`, got \`${this._msgName.toString("utf-8")}\``, - ); - } - case MSG_CALL: { - this.handleCall(this._msgName.toString("utf-8"), this._msgPayload); - break; - } - default: - throw new Error(`Invalid message type from child: ${this._msgType}`); - } - } - } - - // ── Callback handling ─────────────────────────────────────────── - - /** - * Handle an incoming MSG_CALL from the child process. - * - * After sending the error response back to the child, this method - * intentionally re-throws to abort the caller's request loop. - * A failed callback is treated as unrecoverable to match the - * behavior of the native libsyncrpc addon. - */ - private handleCall(name: string, payload: Buffer): void { - const cb = this.callbacks.get(name); - if (!cb) { - const errMsg = `unknown callback: \`${name}\`. Please make sure to register it on the JavaScript side before invoking it.`; - this.writeTuple( - MSG_CALL_ERROR, - Buffer.from(name, "utf-8"), - Buffer.from(errMsg, "utf-8"), - ); - throw new Error(`no callback named \`${name}\` found`); - } - - try { - const result = cb(name, payload.toString("utf-8")); - this.writeTuple( - MSG_CALL_RESPONSE, - Buffer.from(name, "utf-8"), - Buffer.from(result, "utf-8"), - ); - } - catch (e: unknown) { - const errMsg = String(e instanceof Error ? e.message : e).trim(); - this.writeTuple( - MSG_CALL_ERROR, - Buffer.from(name, "utf-8"), - Buffer.from(errMsg, "utf-8"), - ); - throw new Error(`Error calling callback \`${name}\`: ${errMsg}`); - } - } - - // ── MessagePack tuple write ───────────────────────────────────── - - /** - * Write a complete [type, name, payload] tuple in as few writeSync - * calls as possible. For messages that fit in the pre-allocated - * write buffer (64 KB), everything is assembled and sent in a single - * syscall. Larger messages use two syscalls: one for the header - * portion and one for the payload data. - */ - private writeTuple(type: number, name: Buffer, payload: Buffer | Uint8Array | string): void { - const nameLen = name.length; - const payloadIsString = typeof payload === "string"; - const payloadLen = payloadIsString ? Buffer.byteLength(payload, "utf-8") : payload.length; - const nameHdrSize = binHeaderSize(nameLen); - const payloadHdrSize = binHeaderSize(payloadLen); - const headerSize = 2 + nameHdrSize + nameLen + payloadHdrSize; - const totalSize = headerSize + payloadLen; - - if (totalSize <= this.writeBuf.length) { - // Small message: assemble into write buffer, one syscall - let off = 0; - this.writeBuf[off++] = MSGPACK_FIXARRAY3; - this.writeBuf[off++] = type; - off = writeBinHeader(this.writeBuf, off, nameLen); - name.copy(this.writeBuf, off); - off += nameLen; - off = writeBinHeader(this.writeBuf, off, payloadLen); - if (payloadLen > 0) { - if (payloadIsString) { - // Encode string directly into write buffer — avoids - // Buffer.from(string, 'utf-8') allocation entirely. - this.writeBuf.write(payload as string, off, payloadLen, "utf-8"); - } - else if (payload instanceof Buffer) { - (payload as Buffer).copy(this.writeBuf, off); - } - else { - this.writeBuf.set(payload as Uint8Array, off); - } - } - this.writeAllBuf(this.writeBuf, totalSize); - } - else { - // Large message: header + name in one call, payload in another - let off = 0; - this.writeBuf[off++] = MSGPACK_FIXARRAY3; - this.writeBuf[off++] = type; - off = writeBinHeader(this.writeBuf, off, nameLen); - name.copy(this.writeBuf, off); - off += nameLen; - off = writeBinHeader(this.writeBuf, off, payloadLen); - this.writeAllBuf(this.writeBuf, off); - if (payloadLen > 0) { - if (payloadIsString) { - // Large string: must allocate (can't stream-encode - // across multiple writeSync calls). - this.writeAllBuf(Buffer.from(payload as string, "utf-8")); - } - else { - this.writeAllBuf(payload as Buffer | Uint8Array); - } - } - } - } - - // ── MessagePack tuple read ────────────────────────────────────── - - /** - * Read a [type, name, payload] tuple into instance fields - * (_msgType, _msgName, _msgPayload) to avoid allocating a - * short-lived 3-element array on every call. - */ - private readTuple(): void { - // Fixed 3-element array marker - const marker = this.readByte(); - if (marker !== MSGPACK_FIXARRAY3) { - throw new Error( - `Expected fixed 3-element array (0x93), received: 0x${marker.toString(16)}`, - ); - } - - // Message type – positive fixint or uint8 - const tb = this.readByte(); - if (tb <= 0x7f) { - this._msgType = tb; - } - else if (tb === MSGPACK_UINT8) { - this._msgType = this.readByte(); - } - else { - throw new Error( - `Expected positive fixint or uint8 marker, received: 0x${tb.toString(16)}`, - ); - } - - this._msgName = this.readBin(); - this._msgPayload = this.readBin(); - } - - /** - * Read a MessagePack bin field. - */ - private readBin(): Buffer { - const marker = this.readByte(); - let size: number; - switch (marker) { - case MSGPACK_BIN8: - size = this.readByte(); - break; - case MSGPACK_BIN16: - this.readExactInto(this.headerBuf, 2); - size = (this.headerBuf[0] << 8) | this.headerBuf[1]; - break; - case MSGPACK_BIN32: - this.readExactInto(this.headerBuf, 4); - size = this.headerBuf.readUInt32BE(0); - break; - default: - throw new Error( - `Expected binary data (0xc4-0xc6), received: 0x${marker.toString(16)}`, - ); - } - if (size === 0) return EMPTY_BUF; - return this.readExact(size); - } - - // ── Low-level synchronous I/O ─────────────────────────────────── - - /** Build an EOF error with the child's exit code/signal if available. */ - private eofError(): Error { - const code = this.child.exitCode; - const signal = this.child.signalCode; - const detail = signal ? `killed by signal ${signal}` : code !== null ? `exited with code ${code}` : "unknown reason"; - return new Error(`Unexpected EOF while reading from child process (${detail})`); - } - - /** Read a single byte from the buffered read-ahead. */ - private readByte(): number { - if (this.readBufPos >= this.readBufLen) { - this.fillReadBuffer(); - } - return this.readBuf[this.readBufPos++]; - } - - private readExact(length: number): Buffer { - // Use allocUnsafeSlow (not allocUnsafe) so the buffer has its own - // backing ArrayBuffer at byteOffset 0. This is critical because - // callers such as RemoteSourceFile create DataView/Uint8Array over - // buffer.buffer with absolute offsets. Buffer.allocUnsafe returns - // slices of a shared pool whose byteOffset is non-zero, corrupting - // those downstream views. - // - // allocUnsafeSlow (vs alloc) skips zero-fill, which matters for - // large transfers — e.g. checker.ts at ~57 MB saves ~5 ms of - // unnecessary memset. The buffer is immediately filled by - // readExactInto so uninitialized memory is never exposed. - const buf = Buffer.allocUnsafeSlow(length); - this.readExactInto(buf, length); - return buf; - } - - /** - * Fill the internal read-ahead buffer from the pipe fd. - * Retries on EAGAIN for non-blocking mode compatibility. - */ - private fillReadBuffer(): void { - this.readBufPos = 0; - this.readBufLen = 0; - for (;;) { - try { - const n = readSync(this.readFd, this.readBuf, 0, this.readBuf.length, null); - if (n === 0) { - throw this.eofError(); - } - this.readBufLen = n; - return; - } - catch (e: unknown) { - if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { - Atomics.wait(sleepBuf, 0, 0, 1); - continue; - } - throw e; - } - } - } - - /** - * Synchronously read exactly `length` bytes into `buffer`. - * Serves from the internal read-ahead buffer first; for large reads - * that exceed the buffer size, reads directly from the fd to avoid - * an extra copy. - */ - private readExactInto(buffer: Buffer, length: number): void { - let pos = 0; - while (pos < length) { - const avail = this.readBufLen - this.readBufPos; - if (avail > 0) { - // Serve from read-ahead buffer - const toCopy = Math.min(avail, length - pos); - this.readBuf.copy(buffer, pos, this.readBufPos, this.readBufPos + toCopy); - this.readBufPos += toCopy; - pos += toCopy; - } - else if (length - pos >= this.readBuf.length) { - // Remaining data is larger than read buffer; read directly - // into the target to avoid unnecessary copying. - try { - const n = readSync(this.readFd, buffer, pos, length - pos, null); - if (n === 0) { - throw this.eofError(); - } - pos += n; - } - catch (e: unknown) { - if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { - Atomics.wait(sleepBuf, 0, 0, 1); - continue; - } - throw e; - } - } - else { - // Refill the read-ahead buffer - this.fillReadBuffer(); - } - } - } - - /** - * Synchronously write all bytes from `data` (up to `length`). - * Retries on EAGAIN. - */ - private writeAllBuf(data: Buffer | Uint8Array, length?: number): void { - const total = length ?? data.length; - let pos = 0; - while (pos < total) { - try { - const n = writeSync(this.writeFd, data, pos, total - pos); - pos += n; - } - catch (e: unknown) { - if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { - Atomics.wait(sleepBuf, 0, 0, 1); - continue; - } - throw e; - } - } - } -} +/** + * Pure JS replacement for @typescript/libsyncrpc. + * + * Spawns a child process and communicates with it synchronously over + * stdin/stdout pipes using the same MessagePack-based tuple protocol: + * [MessageType (u8), method (bin), payload (bin)] + * + * Synchronous I/O is achieved by calling fs.readSync / fs.writeSync + * directly on the pipe file descriptors obtained from the spawned + * ChildProcess. + */ + +import { + type ChildProcess, + spawn, +} from "node:child_process"; +import { + closeSync, + openSync, + readSync, + writeSync, +} from "node:fs"; +import type { + Readable, + Writable, +} from "node:stream"; + +interface StdioHandle { + fd: number; + setBlocking?: ((value: boolean) => void) | undefined; +} + +interface StdoutWithHandle extends Readable { + _handle: StdioHandle; + unref: () => void; +} + +interface StdinWithHandle extends Writable { + _handle: StdioHandle; + unref: () => void; +} + +import { + binHeaderSize, + MSGPACK_BIN16, + MSGPACK_BIN32, + MSGPACK_BIN8, + MSGPACK_FIXARRAY3, + MSGPACK_UINT8, + writeBinHeader, +} from "./node/msgpack.ts"; + +// ── MessageType constants ──────────────────────────────────────────── +// Sent by channel (parent → child) +const MSG_REQUEST = 1; +const MSG_CALL_RESPONSE = 2; +const MSG_CALL_ERROR = 3; +// Sent by child (child → parent) +const MSG_RESPONSE = 4; +const MSG_ERROR = 5; +const MSG_CALL = 6; + +// Pre-allocated buffer used by Atomics.wait for tiny sleeps when a +// non-blocking fd returns EAGAIN. +const sleepBuf = new Int32Array(new SharedArrayBuffer(4)); + +// Shared empty buffer – avoids allocating Buffer.alloc(0) on every +// zero-length bin field. +const EMPTY_BUF = Buffer.alloc(0); + +// ── Global cleanup tracking ───────────────────────────────────────── +// Track all live child processes so they can be killed on process exit. +// This mimics the auto-cleanup behavior of the native libsyncrpc module, +// whose Rust/C++ destructors would kill children automatically. +const liveChildren = new Set(); + +process.on("exit", () => { + for (const child of liveChildren) { + try { + child.kill(); + } + catch { + // swallow – process may already be dead + } + } + liveChildren.clear(); +}); + +/** + * SyncRpcChannel – drop-in replacement for the native libsyncrpc class. + * + * API surface intentionally matches the original: + * - constructor(exe, args) + * - requestSync(method, payload): string + * - requestBinarySync(method, payload): Uint8Array + * - registerCallback(name, cb) + * - close() + * + * The protocol is unversioned; both sides (this JS channel and the Go + * child process) must be built from the same tree. + * + * This class is **not** thread-safe. All calls must originate from a + * single thread — do not share an instance across worker threads. + */ +export class SyncRpcChannel { + private child: ChildProcess; + private readFd: number; + private writeFd: number; + private pipeFd: number | undefined; + private callbacks = new Map string>(); + + private methodBufCache = new Map(); + + // When true, the payload byte lengths of each request/response are recorded + // and exposed via the `last*` fields below. These count only the JSON/binary + // payload bytes, not the MessagePack tuple framing (message type, method + // name, and length headers). + private readonly collectTiming: boolean; + + // Per-request payload byte measurements for the most recently completed + // request. Only meaningful when `collectTiming` is true. Callers read these + // immediately after a request returns (the channel is strictly serial). + lastBytesSent = 0; + lastBytesReceived = 0; + + private _msgType = 0; + private _msgName: Buffer = EMPTY_BUF; + private _msgPayload: Buffer = EMPTY_BUF; + + private headerBuf = Buffer.allocUnsafe(4); + + // Read-ahead buffer – reduces readSync syscalls by buffering data from the pipe. + private readBuf = Buffer.allocUnsafe(65536); + private readBufPos = 0; + private readBufLen = 0; + + // Write buffer – assembles entire tuples for a single writeSync. + private writeBuf = Buffer.allocUnsafe(65536); + + constructor(exe: string, args: string[], collectTiming = false) { + this.collectTiming = collectTiming; + const isWindows = process.platform === "win32"; + + if (isWindows) { + // On Windows, libuv pipe handles don't expose POSIX fds, so + // readSync/writeSync can't be used on stdio pipes. Instead, + // we create a Windows named pipe path, pass it to the child + // via --pipe, and open it with fs.openSync which returns a + // real C-runtime fd backed by a proper HANDLE. + const pipePath = `\\\\.\\pipe\\tsgo-sync-${process.pid}-${Date.now()}`; + this.child = spawn(exe, [...args, "--pipe", pipePath], { + stdio: ["ignore", "ignore", "inherit"], + }); + + // Retry openSync until the child creates the named pipe. + let fd: number | undefined; + for (let i = 0; i < 500; i++) { + try { + fd = openSync(pipePath, "r+"); + break; + } + catch { + if (this.child.exitCode !== null) { + throw new Error( + `Child process exited with code ${this.child.exitCode} before pipe was ready`, + ); + } + Atomics.wait(sleepBuf, 0, 0, 10); + } + } + if (fd === undefined) { + this.child.kill(); + throw new Error("SyncRpcChannel: timed out connecting to named pipe"); + } + this.readFd = fd; + this.writeFd = fd; + this.pipeFd = fd; + } + else { + // POSIX: use stdio pipe file descriptors directly. + this.child = spawn(exe, args, { + stdio: ["pipe", "pipe", "inherit"], + }); + + const stdout = this.child.stdout! as StdoutWithHandle; + const stdin = this.child.stdin! as StdinWithHandle; + + this.readFd = stdout._handle.fd; + this.writeFd = stdin._handle.fd; + + if (typeof this.readFd !== "number" || this.readFd < 0 || typeof this.writeFd !== "number" || this.writeFd < 0) { + stdout.destroy(); + stdin.destroy(); + this.child.kill(); + throw new Error( + "SyncRpcChannel: could not obtain pipe file descriptors.", + ); + } + + // Set the pipe handles to blocking mode. Under node --test's + // process isolation, pipes are created in non-blocking mode + // (for the IPC channel). This causes readSync/writeSync to get + // EAGAIN, requiring costly 1ms sleeps per retry. Setting + // blocking mode ensures readSync blocks properly until data + // arrives, matching the behavior of the native libsyncrpc. + stdout._handle.setBlocking?.(true); + stdin._handle.setBlocking?.(true); + + // Prevent Node's event-loop from reading stdout or keeping the + // process alive – we will use fs.readSync exclusively. + stdout.pause(); + stdout.unref(); + stdin.unref(); + } + + // Track for auto-cleanup on process exit. + liveChildren.add(this.child); + this.child.unref(); + } + + // ── Public API ────────────────────────────────────────────────── + + /** + * Send a request and synchronously wait for the response (string). + * Handles Call (callback) messages from the child inline. + */ + requestSync(method: string, payload: string): string { + this.ensureOpen(); + const result = this.requestBytesSync(method, payload); + return result.toString("utf-8"); + } + + /** + * Send a request and synchronously wait for the response (binary). + * Handles Call (callback) messages from the child inline. + */ + requestBinarySync(method: string, payload: Uint8Array): Uint8Array { + this.ensureOpen(); + return this.requestBytesSync(method, payload); + } + + /** Register a string→string callback that the child may invoke. */ + registerCallback(name: string, callback: (name: string, payload: string) => string): void { + this.callbacks.set(name, callback); + } + + unregisterCallback(name: string): void { + this.callbacks.delete(name); + } + + /** Kill the child process and release resources. */ + close(): void { + try { + liveChildren.delete(this.child); + if (this.pipeFd !== undefined) { + closeSync(this.pipeFd); + this.pipeFd = undefined; + } + // Destroy the stdio streams so that their pipe handles are closed + // and no longer prevent the event loop from draining. + this.child.stdout?.destroy(); + this.child.stdin?.destroy(); + this.child.kill(); + this.readFd = -1; + this.writeFd = -1; + } + catch { + // swallow – process may already be dead + } + } + + // ── Core request loop ─────────────────────────────────────────── + + private ensureOpen(): void { + if (this.readFd < 0) { + throw new Error("SyncRpcChannel is closed"); + } + } + + private getMethodBuf(method: string): Buffer { + let buf = this.methodBufCache.get(method); + if (buf === undefined) { + buf = Buffer.from(method, "utf-8"); + this.methodBufCache.set(method, buf); + } + return buf; + } + + private requestBytesSync(method: string, payload: Buffer | Uint8Array | string): Buffer { + const methodBuf = this.getMethodBuf(method); + if (this.collectTiming) { + this.lastBytesSent = typeof payload === "string" + ? Buffer.byteLength(payload, "utf-8") + : payload.length; + this.lastBytesReceived = 0; + } + this.writeTuple(MSG_REQUEST, methodBuf, payload); + + for (;;) { + this.readTuple(); + + switch (this._msgType) { + case MSG_RESPONSE: { + // Compare raw bytes instead of decoding to string. + if (!methodBuf.equals(this._msgName)) { + throw new Error( + `name mismatch for response: expected \`${method}\`, got \`${this._msgName.toString("utf-8")}\``, + ); + } + if (this.collectTiming) { + this.lastBytesReceived = this._msgPayload.length; + } + return this._msgPayload; + } + case MSG_ERROR: { + if (methodBuf.equals(this._msgName)) { + throw new Error(this._msgPayload.toString("utf-8")); + } + throw new Error( + `name mismatch for response: expected \`${method}\`, got \`${this._msgName.toString("utf-8")}\``, + ); + } + case MSG_CALL: { + this.handleCall(this._msgName.toString("utf-8"), this._msgPayload); + break; + } + default: + throw new Error(`Invalid message type from child: ${this._msgType}`); + } + } + } + + // ── Callback handling ─────────────────────────────────────────── + + /** + * Handle an incoming MSG_CALL from the child process. + * + * After sending the error response back to the child, this method + * intentionally re-throws to abort the caller's request loop. + * A failed callback is treated as unrecoverable to match the + * behavior of the native libsyncrpc addon. + */ + private handleCall(name: string, payload: Buffer): void { + const cb = this.callbacks.get(name); + if (!cb) { + const errMsg = `unknown callback: \`${name}\`. Please make sure to register it on the JavaScript side before invoking it.`; + this.writeTuple( + MSG_CALL_ERROR, + Buffer.from(name, "utf-8"), + Buffer.from(errMsg, "utf-8"), + ); + throw new Error(`no callback named \`${name}\` found`); + } + + try { + const result = cb(name, payload.toString("utf-8")); + this.writeTuple( + MSG_CALL_RESPONSE, + Buffer.from(name, "utf-8"), + Buffer.from(result, "utf-8"), + ); + } + catch (e: unknown) { + const errMsg = String(e instanceof Error ? e.message : e).trim(); + this.writeTuple( + MSG_CALL_ERROR, + Buffer.from(name, "utf-8"), + Buffer.from(errMsg, "utf-8"), + ); + throw new Error(`Error calling callback \`${name}\`: ${errMsg}`); + } + } + + // ── MessagePack tuple write ───────────────────────────────────── + + /** + * Write a complete [type, name, payload] tuple in as few writeSync + * calls as possible. For messages that fit in the pre-allocated + * write buffer (64 KB), everything is assembled and sent in a single + * syscall. Larger messages use two syscalls: one for the header + * portion and one for the payload data. + */ + private writeTuple(type: number, name: Buffer, payload: Buffer | Uint8Array | string): void { + const nameLen = name.length; + const payloadIsString = typeof payload === "string"; + const payloadLen = payloadIsString ? Buffer.byteLength(payload, "utf-8") : payload.length; + const nameHdrSize = binHeaderSize(nameLen); + const payloadHdrSize = binHeaderSize(payloadLen); + const headerSize = 2 + nameHdrSize + nameLen + payloadHdrSize; + const totalSize = headerSize + payloadLen; + + if (totalSize <= this.writeBuf.length) { + // Small message: assemble into write buffer, one syscall + let off = 0; + this.writeBuf[off++] = MSGPACK_FIXARRAY3; + this.writeBuf[off++] = type; + off = writeBinHeader(this.writeBuf, off, nameLen); + name.copy(this.writeBuf, off); + off += nameLen; + off = writeBinHeader(this.writeBuf, off, payloadLen); + if (payloadLen > 0) { + if (payloadIsString) { + // Encode string directly into write buffer — avoids + // Buffer.from(string, 'utf-8') allocation entirely. + this.writeBuf.write(payload as string, off, payloadLen, "utf-8"); + } + else if (payload instanceof Buffer) { + (payload as Buffer).copy(this.writeBuf, off); + } + else { + this.writeBuf.set(payload as Uint8Array, off); + } + } + this.writeAllBuf(this.writeBuf, totalSize); + } + else { + // Large message: header + name in one call, payload in another + let off = 0; + this.writeBuf[off++] = MSGPACK_FIXARRAY3; + this.writeBuf[off++] = type; + off = writeBinHeader(this.writeBuf, off, nameLen); + name.copy(this.writeBuf, off); + off += nameLen; + off = writeBinHeader(this.writeBuf, off, payloadLen); + this.writeAllBuf(this.writeBuf, off); + if (payloadLen > 0) { + if (payloadIsString) { + // Large string: must allocate (can't stream-encode + // across multiple writeSync calls). + this.writeAllBuf(Buffer.from(payload as string, "utf-8")); + } + else { + this.writeAllBuf(payload as Buffer | Uint8Array); + } + } + } + } + + // ── MessagePack tuple read ────────────────────────────────────── + + /** + * Read a [type, name, payload] tuple into instance fields + * (_msgType, _msgName, _msgPayload) to avoid allocating a + * short-lived 3-element array on every call. + */ + private readTuple(): void { + // Fixed 3-element array marker + const marker = this.readByte(); + if (marker !== MSGPACK_FIXARRAY3) { + throw new Error( + `Expected fixed 3-element array (0x93), received: 0x${marker.toString(16)}`, + ); + } + + // Message type – positive fixint or uint8 + const tb = this.readByte(); + if (tb <= 0x7f) { + this._msgType = tb; + } + else if (tb === MSGPACK_UINT8) { + this._msgType = this.readByte(); + } + else { + throw new Error( + `Expected positive fixint or uint8 marker, received: 0x${tb.toString(16)}`, + ); + } + + this._msgName = this.readBin(); + this._msgPayload = this.readBin(); + } + + /** + * Read a MessagePack bin field. + */ + private readBin(): Buffer { + const marker = this.readByte(); + let size: number; + switch (marker) { + case MSGPACK_BIN8: + size = this.readByte(); + break; + case MSGPACK_BIN16: + this.readExactInto(this.headerBuf, 2); + size = (this.headerBuf[0] << 8) | this.headerBuf[1]; + break; + case MSGPACK_BIN32: + this.readExactInto(this.headerBuf, 4); + size = this.headerBuf.readUInt32BE(0); + break; + default: + throw new Error( + `Expected binary data (0xc4-0xc6), received: 0x${marker.toString(16)}`, + ); + } + if (size === 0) return EMPTY_BUF; + return this.readExact(size); + } + + // ── Low-level synchronous I/O ─────────────────────────────────── + + /** Build an EOF error with the child's exit code/signal if available. */ + private eofError(): Error { + const code = this.child.exitCode; + const signal = this.child.signalCode; + const detail = signal ? `killed by signal ${signal}` : code !== null ? `exited with code ${code}` : "unknown reason"; + return new Error(`Unexpected EOF while reading from child process (${detail})`); + } + + /** Read a single byte from the buffered read-ahead. */ + private readByte(): number { + if (this.readBufPos >= this.readBufLen) { + this.fillReadBuffer(); + } + return this.readBuf[this.readBufPos++]; + } + + private readExact(length: number): Buffer { + // Use allocUnsafeSlow (not allocUnsafe) so the buffer has its own + // backing ArrayBuffer at byteOffset 0. This is critical because + // callers such as RemoteSourceFile create DataView/Uint8Array over + // buffer.buffer with absolute offsets. Buffer.allocUnsafe returns + // slices of a shared pool whose byteOffset is non-zero, corrupting + // those downstream views. + // + // allocUnsafeSlow (vs alloc) skips zero-fill, which matters for + // large transfers — e.g. checker.ts at ~57 MB saves ~5 ms of + // unnecessary memset. The buffer is immediately filled by + // readExactInto so uninitialized memory is never exposed. + const buf = Buffer.allocUnsafeSlow(length); + this.readExactInto(buf, length); + return buf; + } + + /** + * Fill the internal read-ahead buffer from the pipe fd. + * Retries on EAGAIN for non-blocking mode compatibility. + */ + private fillReadBuffer(): void { + this.readBufPos = 0; + this.readBufLen = 0; + for (;;) { + try { + const n = readSync(this.readFd, this.readBuf, 0, this.readBuf.length, null); + if (n === 0) { + throw this.eofError(); + } + this.readBufLen = n; + return; + } + catch (e: unknown) { + if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { + Atomics.wait(sleepBuf, 0, 0, 1); + continue; + } + throw e; + } + } + } + + /** + * Synchronously read exactly `length` bytes into `buffer`. + * Serves from the internal read-ahead buffer first; for large reads + * that exceed the buffer size, reads directly from the fd to avoid + * an extra copy. + */ + private readExactInto(buffer: Buffer, length: number): void { + let pos = 0; + while (pos < length) { + const avail = this.readBufLen - this.readBufPos; + if (avail > 0) { + // Serve from read-ahead buffer + const toCopy = Math.min(avail, length - pos); + this.readBuf.copy(buffer, pos, this.readBufPos, this.readBufPos + toCopy); + this.readBufPos += toCopy; + pos += toCopy; + } + else if (length - pos >= this.readBuf.length) { + // Remaining data is larger than read buffer; read directly + // into the target to avoid unnecessary copying. + try { + const n = readSync(this.readFd, buffer, pos, length - pos, null); + if (n === 0) { + throw this.eofError(); + } + pos += n; + } + catch (e: unknown) { + if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { + Atomics.wait(sleepBuf, 0, 0, 1); + continue; + } + throw e; + } + } + else { + // Refill the read-ahead buffer + this.fillReadBuffer(); + } + } + } + + /** + * Synchronously write all bytes from `data` (up to `length`). + * Retries on EAGAIN. + */ + private writeAllBuf(data: Buffer | Uint8Array, length?: number): void { + const total = length ?? data.length; + let pos = 0; + while (pos < total) { + try { + const n = writeSync(this.writeFd, data, pos, total - pos); + pos += n; + } + catch (e: unknown) { + if (e instanceof Error && ("code" in e) && ((e as NodeJS.ErrnoException).code === "EAGAIN" || (e as NodeJS.ErrnoException).code === "EWOULDBLOCK")) { + Atomics.wait(sleepBuf, 0, 0, 1); + continue; + } + throw e; + } + } + } +} diff --git a/packages/typescript/src/api/timing.ts b/packages/typescript/src/api/timing.ts index a2297b7c25f56..10a8f72cad2ef 100644 --- a/packages/typescript/src/api/timing.ts +++ b/packages/typescript/src/api/timing.ts @@ -1,288 +1,288 @@ -/** - * Client-side collection of per-request timing and transfer measurements. - * - * When enabled, each request records its round-trip latency and the number of - * payload bytes sent and received, accumulated into running totals and a - * fixed-size ring buffer of the most recent requests. - * - * The server measures its own per-request processing time independently. When a - * timing snapshot is requested, the client fetches the server's collection via - * a `getServerTiming` request and folds it into the returned {@link TimingInfo}, - * yielding per-request and total server processing time and an estimated - * transport overhead (round-trip minus server processing time). Normal response - * messages are left unchanged. - */ - -/** Number of most-recent requests retained in the ring buffer. */ -export const RECENT_REQUEST_CAPACITY = 5; - -/** A single request's measured timing and transfer sample. */ -export interface RequestTiming { - /** The API method that was invoked. */ - method: string; - /** Wall-clock round-trip time measured by the client, in milliseconds. */ - roundTripMs: number; - /** Number of request payload bytes sent to the server. */ - bytesSent: number; - /** Number of response payload bytes received from the server. */ - bytesReceived: number; - /** Wall-clock timestamp ({@link Date.now}) captured when the request completed. */ - timestamp: number; - /** - * Server-side processing time for this request, in milliseconds, as folded - * in from the server's own timing collection. Undefined when server timing - * for the request could not be matched. - */ - serverTimeMs?: number | undefined; - /** - * Estimated transport overhead for this request, in milliseconds - * (`roundTripMs - serverTimeMs`, clamped to be non-negative). Present - * exactly when {@link serverTimeMs} is. - */ - transportOverheadMs?: number | undefined; -} - -/** Running totals accumulated across every measured request. */ -export interface TimingAccumulators { - /** Number of requests measured. */ - requestCount: number; - /** Sum of round-trip latencies, in milliseconds. */ - roundTripMs: number; - /** Sum of request payload bytes sent. */ - bytesSent: number; - /** Sum of response payload bytes received. */ - bytesReceived: number; - /** Sum of server-side processing time, in milliseconds. */ - serverTimeMs: number; - /** - * Estimated total transport overhead, in milliseconds - * (`roundTripMs - serverTimeMs`, clamped to be non-negative). - */ - transportOverheadMs: number; - /** - * Number of AST nodes materialized from binary source-file responses as the - * client walked the returned trees. Materialization is lazy and happens on - * demand, so this accrues after the originating request completes. - */ - nodesMaterialized: number; - /** - * Number of source files fetched from the server (each decoded into a - * lazily-materialized tree). - */ - sourceFilesFetched: number; - /** - * Number of AST nodes across all fetched source files that can be - * materialized on demand. Each fetched file contributes its full node count - * (excluding the pre-materialized source-file node), whether or not those - * nodes are ever walked. Serves as the denominator for the share of fetched - * nodes that end up materialized (`nodesMaterialized / nodesFetched`). - */ - nodesFetched: number; -} - -/** A point-in-time snapshot of collected timing information. */ -export interface TimingInfo { - /** Whether timing collection is enabled for this API instance. */ - enabled: boolean; - /** Running totals across every measured request. */ - totals: TimingAccumulators; - /** - * The most recent requests, up to {@link RECENT_REQUEST_CAPACITY}, ordered - * from oldest to newest. - */ - recentRequests: RequestTiming[]; -} - -/** A raw measurement handed to {@link TimingCollector.record}. */ -export interface TimingSample { - method: string; - roundTripMs: number; - bytesSent: number; - bytesReceived: number; -} - -/** - * A single server-side request's processing-time sample, as returned by a - * `getServerTiming` request. This is an internal wire shape; consumers see the - * folded-in {@link RequestTiming.serverTimeMs}. - */ -export interface ServerRequestTiming { - /** The API method that was handled. */ - method: string; - /** Server-side processing time, in milliseconds. */ - processingTimeMs: number; - /** Unix timestamp in milliseconds captured when the request completed. */ - timestamp: number; -} - -/** Running totals accumulated on the server across every handled request. */ -export interface ServerTimingTotals { - /** Total number of requests handled. */ - requestCount: number; - /** Sum of server-side processing time, in milliseconds. */ - totalProcessingTimeMs: number; -} - -/** - * A snapshot of the server's own timing collection, retrieved via a - * `getServerTiming` request. This is an internal wire shape used to compute the - * server-derived fields of {@link TimingInfo}. - */ -export interface ServerTimingInfo { - /** Whether server-side timing collection is enabled. */ - enabled: boolean; - /** Running totals across every request the server handled. */ - totals: ServerTimingTotals; - /** - * The most recent requests as seen by the server, ordered from oldest to - * newest. - */ - recentRequests: ServerRequestTiming[]; -} - -function emptyAccumulators(): TimingAccumulators { - return { - requestCount: 0, - roundTripMs: 0, - bytesSent: 0, - bytesReceived: 0, - serverTimeMs: 0, - transportOverheadMs: 0, - nodesMaterialized: 0, - sourceFilesFetched: 0, - nodesFetched: 0, - }; -} - -/** Returns a snapshot representing a disabled (never-collecting) timing state. */ -export function disabledTimingInfo(): TimingInfo { - return { - enabled: false, - totals: emptyAccumulators(), - recentRequests: [], - }; -} - -/** Returns a snapshot representing disabled server-side timing collection. */ -export function disabledServerTimingInfo(): ServerTimingInfo { - return { - enabled: false, - totals: { requestCount: 0, totalProcessingTimeMs: 0 }, - recentRequests: [], - }; -} - -/** - * Folds a server-side timing snapshot into a client-side snapshot, producing a - * combined {@link TimingInfo} with per-request and total server processing time - * plus estimated transport overhead. - * - * Recent requests are paired newest-to-newest and only matched when the method - * names agree, so that requests recorded by only one side (e.g. the meta - * requests used to fetch timing) do not misalign the two ring buffers. - */ -export function combineTimingInfo(client: TimingInfo, server: ServerTimingInfo): TimingInfo { - if (!client.enabled) { - return client; - } - - const serverTimeMs = server.totals.totalProcessingTimeMs; - const totals: TimingAccumulators = { - ...client.totals, - serverTimeMs, - transportOverheadMs: Math.max(0, client.totals.roundTripMs - serverTimeMs), - }; - - const recentRequests = client.recentRequests.map(r => ({ ...r })); - const serverRecent = server.recentRequests; - const pairs = Math.min(recentRequests.length, serverRecent.length); - for (let i = 1; i <= pairs; i++) { - const c = recentRequests[recentRequests.length - i]; - const s = serverRecent[serverRecent.length - i]; - if (c.method === s.method) { - c.serverTimeMs = s.processingTimeMs; - c.transportOverheadMs = Math.max(0, c.roundTripMs - s.processingTimeMs); - } - } - - return { - enabled: true, - totals, - recentRequests, - }; -} - -/** - * Accumulates request timing samples into running totals and a fixed-size ring - * buffer of the most recent requests. - */ -export class TimingCollector { - private totals: TimingAccumulators = emptyAccumulators(); - // Ring buffer of the most recent requests. `ring` grows to at most - // RECENT_REQUEST_CAPACITY; once full, `head` marks the oldest entry. - private ring: RequestTiming[] = []; - private head = 0; - - /** Records a single request's measurements. */ - record(sample: TimingSample): void { - this.totals.requestCount++; - this.totals.roundTripMs += sample.roundTripMs; - this.totals.bytesSent += sample.bytesSent; - this.totals.bytesReceived += sample.bytesReceived; - - const entry: RequestTiming = { - method: sample.method, - roundTripMs: sample.roundTripMs, - bytesSent: sample.bytesSent, - bytesReceived: sample.bytesReceived, - timestamp: Date.now(), - }; - - if (this.ring.length < RECENT_REQUEST_CAPACITY) { - this.ring.push(entry); - } - else { - this.ring[this.head] = entry; - this.head = (this.head + 1) % RECENT_REQUEST_CAPACITY; - } - } - - /** - * Records a single AST node materialization. Called on demand as the consumer - * walks a binary source-file response's tree, so it is not tied to any one - * request. - */ - recordMaterialization(): void { - this.totals.nodesMaterialized++; - } - - /** - * Records a fetched source file: increments the fetched-file counter and adds - * the file's materializable node count to the fetched-node total, which serves - * as the denominator for the share of fetched nodes that end up materialized. - */ - recordSourceFileFetched(materializableNodeCount: number): void { - this.totals.sourceFilesFetched++; - this.totals.nodesFetched += materializableNodeCount; - } - - /** Returns a snapshot of the collected timing information. */ - getInfo(): TimingInfo { - const recentRequests: RequestTiming[] = []; - for (let i = 0; i < this.ring.length; i++) { - recentRequests.push(this.ring[(this.head + i) % this.ring.length]); - } - return { - enabled: true, - totals: { ...this.totals }, - recentRequests, - }; - } - - /** Clears all accumulated totals and recent-request history. */ - reset(): void { - this.totals = emptyAccumulators(); - this.ring = []; - this.head = 0; - } -} +/** + * Client-side collection of per-request timing and transfer measurements. + * + * When enabled, each request records its round-trip latency and the number of + * payload bytes sent and received, accumulated into running totals and a + * fixed-size ring buffer of the most recent requests. + * + * The server measures its own per-request processing time independently. When a + * timing snapshot is requested, the client fetches the server's collection via + * a `getServerTiming` request and folds it into the returned {@link TimingInfo}, + * yielding per-request and total server processing time and an estimated + * transport overhead (round-trip minus server processing time). Normal response + * messages are left unchanged. + */ + +/** Number of most-recent requests retained in the ring buffer. */ +export const RECENT_REQUEST_CAPACITY = 5; + +/** A single request's measured timing and transfer sample. */ +export interface RequestTiming { + /** The API method that was invoked. */ + method: string; + /** Wall-clock round-trip time measured by the client, in milliseconds. */ + roundTripMs: number; + /** Number of request payload bytes sent to the server. */ + bytesSent: number; + /** Number of response payload bytes received from the server. */ + bytesReceived: number; + /** Wall-clock timestamp ({@link Date.now}) captured when the request completed. */ + timestamp: number; + /** + * Server-side processing time for this request, in milliseconds, as folded + * in from the server's own timing collection. Undefined when server timing + * for the request could not be matched. + */ + serverTimeMs?: number | undefined; + /** + * Estimated transport overhead for this request, in milliseconds + * (`roundTripMs - serverTimeMs`, clamped to be non-negative). Present + * exactly when {@link serverTimeMs} is. + */ + transportOverheadMs?: number | undefined; +} + +/** Running totals accumulated across every measured request. */ +export interface TimingAccumulators { + /** Number of requests measured. */ + requestCount: number; + /** Sum of round-trip latencies, in milliseconds. */ + roundTripMs: number; + /** Sum of request payload bytes sent. */ + bytesSent: number; + /** Sum of response payload bytes received. */ + bytesReceived: number; + /** Sum of server-side processing time, in milliseconds. */ + serverTimeMs: number; + /** + * Estimated total transport overhead, in milliseconds + * (`roundTripMs - serverTimeMs`, clamped to be non-negative). + */ + transportOverheadMs: number; + /** + * Number of AST nodes materialized from binary source-file responses as the + * client walked the returned trees. Materialization is lazy and happens on + * demand, so this accrues after the originating request completes. + */ + nodesMaterialized: number; + /** + * Number of source files fetched from the server (each decoded into a + * lazily-materialized tree). + */ + sourceFilesFetched: number; + /** + * Number of AST nodes across all fetched source files that can be + * materialized on demand. Each fetched file contributes its full node count + * (excluding the pre-materialized source-file node), whether or not those + * nodes are ever walked. Serves as the denominator for the share of fetched + * nodes that end up materialized (`nodesMaterialized / nodesFetched`). + */ + nodesFetched: number; +} + +/** A point-in-time snapshot of collected timing information. */ +export interface TimingInfo { + /** Whether timing collection is enabled for this API instance. */ + enabled: boolean; + /** Running totals across every measured request. */ + totals: TimingAccumulators; + /** + * The most recent requests, up to {@link RECENT_REQUEST_CAPACITY}, ordered + * from oldest to newest. + */ + recentRequests: RequestTiming[]; +} + +/** A raw measurement handed to {@link TimingCollector.record}. */ +export interface TimingSample { + method: string; + roundTripMs: number; + bytesSent: number; + bytesReceived: number; +} + +/** + * A single server-side request's processing-time sample, as returned by a + * `getServerTiming` request. This is an internal wire shape; consumers see the + * folded-in {@link RequestTiming.serverTimeMs}. + */ +export interface ServerRequestTiming { + /** The API method that was handled. */ + method: string; + /** Server-side processing time, in milliseconds. */ + processingTimeMs: number; + /** Unix timestamp in milliseconds captured when the request completed. */ + timestamp: number; +} + +/** Running totals accumulated on the server across every handled request. */ +export interface ServerTimingTotals { + /** Total number of requests handled. */ + requestCount: number; + /** Sum of server-side processing time, in milliseconds. */ + totalProcessingTimeMs: number; +} + +/** + * A snapshot of the server's own timing collection, retrieved via a + * `getServerTiming` request. This is an internal wire shape used to compute the + * server-derived fields of {@link TimingInfo}. + */ +export interface ServerTimingInfo { + /** Whether server-side timing collection is enabled. */ + enabled: boolean; + /** Running totals across every request the server handled. */ + totals: ServerTimingTotals; + /** + * The most recent requests as seen by the server, ordered from oldest to + * newest. + */ + recentRequests: ServerRequestTiming[]; +} + +function emptyAccumulators(): TimingAccumulators { + return { + requestCount: 0, + roundTripMs: 0, + bytesSent: 0, + bytesReceived: 0, + serverTimeMs: 0, + transportOverheadMs: 0, + nodesMaterialized: 0, + sourceFilesFetched: 0, + nodesFetched: 0, + }; +} + +/** Returns a snapshot representing a disabled (never-collecting) timing state. */ +export function disabledTimingInfo(): TimingInfo { + return { + enabled: false, + totals: emptyAccumulators(), + recentRequests: [], + }; +} + +/** Returns a snapshot representing disabled server-side timing collection. */ +export function disabledServerTimingInfo(): ServerTimingInfo { + return { + enabled: false, + totals: { requestCount: 0, totalProcessingTimeMs: 0 }, + recentRequests: [], + }; +} + +/** + * Folds a server-side timing snapshot into a client-side snapshot, producing a + * combined {@link TimingInfo} with per-request and total server processing time + * plus estimated transport overhead. + * + * Recent requests are paired newest-to-newest and only matched when the method + * names agree, so that requests recorded by only one side (e.g. the meta + * requests used to fetch timing) do not misalign the two ring buffers. + */ +export function combineTimingInfo(client: TimingInfo, server: ServerTimingInfo): TimingInfo { + if (!client.enabled) { + return client; + } + + const serverTimeMs = server.totals.totalProcessingTimeMs; + const totals: TimingAccumulators = { + ...client.totals, + serverTimeMs, + transportOverheadMs: Math.max(0, client.totals.roundTripMs - serverTimeMs), + }; + + const recentRequests = client.recentRequests.map(r => ({ ...r })); + const serverRecent = server.recentRequests; + const pairs = Math.min(recentRequests.length, serverRecent.length); + for (let i = 1; i <= pairs; i++) { + const c = recentRequests[recentRequests.length - i]; + const s = serverRecent[serverRecent.length - i]; + if (c.method === s.method) { + c.serverTimeMs = s.processingTimeMs; + c.transportOverheadMs = Math.max(0, c.roundTripMs - s.processingTimeMs); + } + } + + return { + enabled: true, + totals, + recentRequests, + }; +} + +/** + * Accumulates request timing samples into running totals and a fixed-size ring + * buffer of the most recent requests. + */ +export class TimingCollector { + private totals: TimingAccumulators = emptyAccumulators(); + // Ring buffer of the most recent requests. `ring` grows to at most + // RECENT_REQUEST_CAPACITY; once full, `head` marks the oldest entry. + private ring: RequestTiming[] = []; + private head = 0; + + /** Records a single request's measurements. */ + record(sample: TimingSample): void { + this.totals.requestCount++; + this.totals.roundTripMs += sample.roundTripMs; + this.totals.bytesSent += sample.bytesSent; + this.totals.bytesReceived += sample.bytesReceived; + + const entry: RequestTiming = { + method: sample.method, + roundTripMs: sample.roundTripMs, + bytesSent: sample.bytesSent, + bytesReceived: sample.bytesReceived, + timestamp: Date.now(), + }; + + if (this.ring.length < RECENT_REQUEST_CAPACITY) { + this.ring.push(entry); + } + else { + this.ring[this.head] = entry; + this.head = (this.head + 1) % RECENT_REQUEST_CAPACITY; + } + } + + /** + * Records a single AST node materialization. Called on demand as the consumer + * walks a binary source-file response's tree, so it is not tied to any one + * request. + */ + recordMaterialization(): void { + this.totals.nodesMaterialized++; + } + + /** + * Records a fetched source file: increments the fetched-file counter and adds + * the file's materializable node count to the fetched-node total, which serves + * as the denominator for the share of fetched nodes that end up materialized. + */ + recordSourceFileFetched(materializableNodeCount: number): void { + this.totals.sourceFilesFetched++; + this.totals.nodesFetched += materializableNodeCount; + } + + /** Returns a snapshot of the collected timing information. */ + getInfo(): TimingInfo { + const recentRequests: RequestTiming[] = []; + for (let i = 0; i < this.ring.length; i++) { + recentRequests.push(this.ring[(this.head + i) % this.ring.length]); + } + return { + enabled: true, + totals: { ...this.totals }, + recentRequests, + }; + } + + /** Clears all accumulated totals and recent-request history. */ + reset(): void { + this.totals = emptyAccumulators(); + this.ring = []; + this.head = 0; + } +} diff --git a/packages/typescript/src/api/typedPaths.ts b/packages/typescript/src/api/typedPaths.ts index fd6da5b6227ed..a0cdd41412c9a 100644 --- a/packages/typescript/src/api/typedPaths.ts +++ b/packages/typescript/src/api/typedPaths.ts @@ -1,2 +1,2 @@ -export type { PathKey, RootedDirectoryPath, RootedFilePath, RootedPath } from "../ast/index.ts"; -export { canonicalize, CaseSensitivity, isCaseInsensitive, isCaseSensitive, pathKey, rootedDirectoryPathFromPath, rootedFilePathFromPath, rootedPathFromNormalized, toRootedDirectoryPath, toRootedFilePath, toRootedPath, tryPathKeyFromCanonical, tryRootedPathFromNormalized } from "./path.ts"; +export type { PathKey, RootedDirectoryPath, RootedFilePath, RootedPath } from "../ast/index.ts"; +export { canonicalize, CaseSensitivity, isCaseInsensitive, isCaseSensitive, pathKey, rootedDirectoryPathFromPath, rootedFilePathFromPath, rootedPathFromNormalized, toRootedDirectoryPath, toRootedFilePath, toRootedPath, tryPathKeyFromCanonical, tryRootedPathFromNormalized } from "./path.ts"; diff --git a/packages/typescript/src/api/userPreferences.generated.ts b/packages/typescript/src/api/userPreferences.generated.ts index bf1e2110b88ea..2c9eb4ecd2fa4 100644 --- a/packages/typescript/src/api/userPreferences.generated.ts +++ b/packages/typescript/src/api/userPreferences.generated.ts @@ -1,201 +1,201 @@ -// Code generated by gen-preferences from tools/userPreferences.schema.json; DO NOT EDIT. - -export interface CodeLensUserPreferences { - implementationsCodeLensEnabled?: boolean | undefined; - implementationsCodeLensShowOnAllClassMethods?: boolean | undefined; - implementationsCodeLensShowOnInterfaceMethods?: boolean | undefined; - referencesCodeLensEnabled?: boolean | undefined; - referencesCodeLensShowOnAllFunctions?: boolean | undefined; -} - -/** - * CompletionPreferences contains preferences used while producing completions. - */ -export interface CompletionPreferences { - /** - * Unless this option is `false`, member completion lists triggered with `.` will include entries - * on potentially-null and potentially-undefined values, with insertion text to replace - * preceding `.` tokens with `?.`. - */ - includeAutomaticOptionalChainCompletions?: boolean | undefined; - /** - * Enables auto-import-style completions on partially-typed import statements. E.g., allows - * `import write|` to be completed to `import { writeResult } from "./utils.js"`. - */ - includeCompletionsForImportStatements?: boolean | undefined; - /** - * If enabled, TypeScript will search through all external modules' exports and add them to the completions list. - * This affects lone identifier completions but not completions on the right hand side of `obj.`. - */ - includeCompletionsForModuleExports?: boolean | undefined; - /** - * If enabled, completions for class members (e.g. methods and properties) will include - * a whole declaration for the member. - */ - includeCompletionsWithClassMemberSnippets?: boolean | undefined; - /** - * If enabled, object literal methods will have a method declaration completion entry in addition - * to the regular completion entry containing just the method name. - */ - includeCompletionsWithObjectLiteralMethodSnippets?: boolean | undefined; - jsxAttributeCompletionStyle?: "auto" | "braces" | "none" | undefined; -} - -export interface EditorSettings { - baseIndentSize?: number | undefined; - convertTabsToSpaces?: boolean | undefined; - indentSize?: number | undefined; - indentStyle?: "none" | "block" | "smart" | undefined; - newLineCharacter?: string | undefined; - tabSize?: number | undefined; - trimTrailingWhitespace?: boolean | undefined; -} - -export interface FormatCodeSettings extends EditorSettings { - indentMultiLineObjectLiteralBeginningOnBlankLine?: boolean | undefined; - indentSwitchCase?: boolean | undefined; - insertSpaceAfterCommaDelimiter?: boolean | undefined; - insertSpaceAfterConstructor?: boolean | undefined; - insertSpaceAfterFunctionKeywordForAnonymousFunctions?: boolean | undefined; - insertSpaceAfterKeywordsInControlFlowStatements?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingEmptyBraces?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis?: boolean | undefined; - insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean | undefined; - insertSpaceAfterSemicolonInForStatements?: boolean | undefined; - insertSpaceAfterTypeAssertion?: boolean | undefined; - insertSpaceBeforeAndAfterBinaryOperators?: boolean | undefined; - insertSpaceBeforeFunctionParenthesis?: boolean | undefined; - insertSpaceBeforeTypeAnnotation?: boolean | undefined; - placeOpenBraceOnNewLineForControlBlocks?: boolean | undefined; - placeOpenBraceOnNewLineForFunctions?: boolean | undefined; - semicolons?: "ignore" | "insert" | "remove" | undefined; -} - -export interface InlayHintsPreferences { - includeInlayEnumMemberValueHints?: boolean | undefined; - includeInlayFunctionLikeReturnTypeHints?: boolean | undefined; - includeInlayFunctionParameterTypeHints?: boolean | undefined; - includeInlayParameterNameHints?: "none" | "literals" | "all" | undefined; - includeInlayParameterNameHintsWhenArgumentMatchesName?: boolean | undefined; - includeInlayPropertyDeclarationTypeHints?: boolean | undefined; - includeInlayVariableTypeHints?: boolean | undefined; - includeInlayVariableTypeHintsWhenTypeMatchesName?: boolean | undefined; -} - -/** - * UserPreferences represents TypeScript language service preferences. - */ -export interface UserPreferences extends FormatCodeSettings, CompletionPreferences, InlayHintsPreferences, CodeLensUserPreferences { - allowRenameOfImportPath?: boolean | undefined; - allowTextChangesInNewFiles?: boolean | undefined; - autoClosingTags?: boolean | undefined; - autoImportEntrypointDirectorySearch?: boolean | undefined; - autoImportFileExcludePatterns?: string[] | undefined; - autoImportSpecifierExcludeRegexes?: string[] | undefined; - /** - * AutomaticTypeAcquisitionEnabled is the unified setting from tsserver.automaticTypeAcquisition.enabled under the js/ts section. - * When set, it takes precedence over DisableAutomaticTypeAcquisition. - */ - automaticTypeAcquisitionEnabled?: boolean | undefined; - completeJSDocs?: boolean | undefined; - /** - * CustomConfigFileName specifies a custom config file name to use before defaulting to tsconfig.json/jsconfig.json. - */ - customConfigFileName?: string | undefined; - /** - * DisableAutomaticTypeAcquisition is the deprecated setting from typescript.disableAutomaticTypeAcquisition. - */ - disableAutomaticTypeAcquisition?: boolean | undefined; - disableLineTextInReferences?: boolean | undefined; - disableSuggestions?: boolean | undefined; - displayPartsForJSDoc?: boolean | undefined; - excludeLibrarySymbolsInNavTo?: boolean | undefined; - formatEnabled?: boolean | undefined; - generateReturnInDocTemplate?: boolean | undefined; - /** - * Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" - */ - importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js" | undefined; - importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative" | undefined; - lazyConfiguredProjectsFromExternalProject?: boolean | undefined; - locale?: string | undefined; - /** - * A positive integer indicating the maximum length of a hover text before it is truncated. - * - * Default: `500` - */ - maximumHoverLength?: number | undefined; - /** - * Indicates whether accents and other diacritic marks are considered unequal for the purpose of sorting. - * - * This preference is ignored if organizeImportsCollation is not `unicode`. - * - * Default: `true` - */ - organizeImportsAccentCollation?: boolean | undefined; - /** - * Indicates whether upper case or lower case should sort first. - * - * This permission is ignored if: - * - organizeImportsCollation is not `unicode` - * - organizeImportsIgnoreCase is `true` - * - organizeImportsIgnoreCase is `auto` and the auto-detected case sensitivity is case-insensitive. - * - * Default: `false` - */ - organizeImportsCaseFirst?: "default" | "lower" | "upper" | undefined; - /** - * Indicates whether imports should be organized via an "ordinal" (binary) comparison using the numeric value of their - * code points, or via "unicode" natural sorting. This implementation is locale-agnostic and approximates the practical - * import-sorting behavior rather than the full Unicode Collation Algorithm. - * - * Default: Ordinal - */ - organizeImportsCollation?: "ordinal" | "unicode" | undefined; - /** - * Indicates whether imports should be organized in a case-insensitive manner. - * - * If unspecified, case sensitivity is detected. - */ - organizeImportsIgnoreCase?: boolean | undefined; - /** - * Indicates the locale to use for "unicode" collation in legacy clients. This is accepted for compatibility, but - * currently ignored because organize-import sorting is deterministic and locale-agnostic. - * - * This preference is ignored if organizeImportsCollation is not `unicode`. - * - * Default: `"en"` - */ - organizeImportsLocale?: string | undefined; - /** - * Indicates whether numeric collation should be used for digit sequences in strings. When `true`, will collate - * strings such that `a1z < a2z < a100z`. When `false`, will collate strings such that `a1z < a100z < a2z`. - * - * This preference is ignored if organizeImportsCollation is not `unicode`. - * - * Default: `false` - */ - organizeImportsNumericCollation?: boolean | undefined; - /** - * Indicates which deterministic preset should be used to sort imports. - * "auto" detects the existing ordinal case sensitivity where possible. - */ - organizeImportsSort?: "auto" | "ordinal" | "ordinalIgnoreCase" | "natural" | "naturalIgnoreCase" | undefined; - /** - * Indicates where named type-only imports should sort. "inline" sorts named imports without regard to if the import is type-only. - * - * Default: `auto`, which defaults to `last` - */ - organizeImportsTypeOrder?: "auto" | "last" | "inline" | "first" | undefined; - preferGoToSourceDefinition?: boolean | undefined; - preferTypeOnlyAutoImports?: boolean | undefined; - providePrefixAndSuffixTextForRename?: boolean | undefined; - provideRefactorNotApplicableReason?: boolean | undefined; - quotePreference?: "auto" | "double" | "single" | undefined; - reportStyleChecksAsWarnings?: boolean | undefined; - validateEnabled?: boolean | undefined; - workspaceSymbolsScope?: "allOpenProjects" | "currentProject" | undefined; -} +// Code generated by gen-preferences from tools/userPreferences.schema.json; DO NOT EDIT. + +export interface CodeLensUserPreferences { + implementationsCodeLensEnabled?: boolean | undefined; + implementationsCodeLensShowOnAllClassMethods?: boolean | undefined; + implementationsCodeLensShowOnInterfaceMethods?: boolean | undefined; + referencesCodeLensEnabled?: boolean | undefined; + referencesCodeLensShowOnAllFunctions?: boolean | undefined; +} + +/** + * CompletionPreferences contains preferences used while producing completions. + */ +export interface CompletionPreferences { + /** + * Unless this option is `false`, member completion lists triggered with `.` will include entries + * on potentially-null and potentially-undefined values, with insertion text to replace + * preceding `.` tokens with `?.`. + */ + includeAutomaticOptionalChainCompletions?: boolean | undefined; + /** + * Enables auto-import-style completions on partially-typed import statements. E.g., allows + * `import write|` to be completed to `import { writeResult } from "./utils.js"`. + */ + includeCompletionsForImportStatements?: boolean | undefined; + /** + * If enabled, TypeScript will search through all external modules' exports and add them to the completions list. + * This affects lone identifier completions but not completions on the right hand side of `obj.`. + */ + includeCompletionsForModuleExports?: boolean | undefined; + /** + * If enabled, completions for class members (e.g. methods and properties) will include + * a whole declaration for the member. + */ + includeCompletionsWithClassMemberSnippets?: boolean | undefined; + /** + * If enabled, object literal methods will have a method declaration completion entry in addition + * to the regular completion entry containing just the method name. + */ + includeCompletionsWithObjectLiteralMethodSnippets?: boolean | undefined; + jsxAttributeCompletionStyle?: "auto" | "braces" | "none" | undefined; +} + +export interface EditorSettings { + baseIndentSize?: number | undefined; + convertTabsToSpaces?: boolean | undefined; + indentSize?: number | undefined; + indentStyle?: "none" | "block" | "smart" | undefined; + newLineCharacter?: string | undefined; + tabSize?: number | undefined; + trimTrailingWhitespace?: boolean | undefined; +} + +export interface FormatCodeSettings extends EditorSettings { + indentMultiLineObjectLiteralBeginningOnBlankLine?: boolean | undefined; + indentSwitchCase?: boolean | undefined; + insertSpaceAfterCommaDelimiter?: boolean | undefined; + insertSpaceAfterConstructor?: boolean | undefined; + insertSpaceAfterFunctionKeywordForAnonymousFunctions?: boolean | undefined; + insertSpaceAfterKeywordsInControlFlowStatements?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingEmptyBraces?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis?: boolean | undefined; + insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean | undefined; + insertSpaceAfterSemicolonInForStatements?: boolean | undefined; + insertSpaceAfterTypeAssertion?: boolean | undefined; + insertSpaceBeforeAndAfterBinaryOperators?: boolean | undefined; + insertSpaceBeforeFunctionParenthesis?: boolean | undefined; + insertSpaceBeforeTypeAnnotation?: boolean | undefined; + placeOpenBraceOnNewLineForControlBlocks?: boolean | undefined; + placeOpenBraceOnNewLineForFunctions?: boolean | undefined; + semicolons?: "ignore" | "insert" | "remove" | undefined; +} + +export interface InlayHintsPreferences { + includeInlayEnumMemberValueHints?: boolean | undefined; + includeInlayFunctionLikeReturnTypeHints?: boolean | undefined; + includeInlayFunctionParameterTypeHints?: boolean | undefined; + includeInlayParameterNameHints?: "none" | "literals" | "all" | undefined; + includeInlayParameterNameHintsWhenArgumentMatchesName?: boolean | undefined; + includeInlayPropertyDeclarationTypeHints?: boolean | undefined; + includeInlayVariableTypeHints?: boolean | undefined; + includeInlayVariableTypeHintsWhenTypeMatchesName?: boolean | undefined; +} + +/** + * UserPreferences represents TypeScript language service preferences. + */ +export interface UserPreferences extends FormatCodeSettings, CompletionPreferences, InlayHintsPreferences, CodeLensUserPreferences { + allowRenameOfImportPath?: boolean | undefined; + allowTextChangesInNewFiles?: boolean | undefined; + autoClosingTags?: boolean | undefined; + autoImportEntrypointDirectorySearch?: boolean | undefined; + autoImportFileExcludePatterns?: string[] | undefined; + autoImportSpecifierExcludeRegexes?: string[] | undefined; + /** + * AutomaticTypeAcquisitionEnabled is the unified setting from tsserver.automaticTypeAcquisition.enabled under the js/ts section. + * When set, it takes precedence over DisableAutomaticTypeAcquisition. + */ + automaticTypeAcquisitionEnabled?: boolean | undefined; + completeJSDocs?: boolean | undefined; + /** + * CustomConfigFileName specifies a custom config file name to use before defaulting to tsconfig.json/jsconfig.json. + */ + customConfigFileName?: string | undefined; + /** + * DisableAutomaticTypeAcquisition is the deprecated setting from typescript.disableAutomaticTypeAcquisition. + */ + disableAutomaticTypeAcquisition?: boolean | undefined; + disableLineTextInReferences?: boolean | undefined; + disableSuggestions?: boolean | undefined; + displayPartsForJSDoc?: boolean | undefined; + excludeLibrarySymbolsInNavTo?: boolean | undefined; + formatEnabled?: boolean | undefined; + generateReturnInDocTemplate?: boolean | undefined; + /** + * Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" + */ + importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js" | undefined; + importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative" | undefined; + lazyConfiguredProjectsFromExternalProject?: boolean | undefined; + locale?: string | undefined; + /** + * A positive integer indicating the maximum length of a hover text before it is truncated. + * + * Default: `500` + */ + maximumHoverLength?: number | undefined; + /** + * Indicates whether accents and other diacritic marks are considered unequal for the purpose of sorting. + * + * This preference is ignored if organizeImportsCollation is not `unicode`. + * + * Default: `true` + */ + organizeImportsAccentCollation?: boolean | undefined; + /** + * Indicates whether upper case or lower case should sort first. + * + * This permission is ignored if: + * - organizeImportsCollation is not `unicode` + * - organizeImportsIgnoreCase is `true` + * - organizeImportsIgnoreCase is `auto` and the auto-detected case sensitivity is case-insensitive. + * + * Default: `false` + */ + organizeImportsCaseFirst?: "default" | "lower" | "upper" | undefined; + /** + * Indicates whether imports should be organized via an "ordinal" (binary) comparison using the numeric value of their + * code points, or via "unicode" natural sorting. This implementation is locale-agnostic and approximates the practical + * import-sorting behavior rather than the full Unicode Collation Algorithm. + * + * Default: Ordinal + */ + organizeImportsCollation?: "ordinal" | "unicode" | undefined; + /** + * Indicates whether imports should be organized in a case-insensitive manner. + * + * If unspecified, case sensitivity is detected. + */ + organizeImportsIgnoreCase?: boolean | undefined; + /** + * Indicates the locale to use for "unicode" collation in legacy clients. This is accepted for compatibility, but + * currently ignored because organize-import sorting is deterministic and locale-agnostic. + * + * This preference is ignored if organizeImportsCollation is not `unicode`. + * + * Default: `"en"` + */ + organizeImportsLocale?: string | undefined; + /** + * Indicates whether numeric collation should be used for digit sequences in strings. When `true`, will collate + * strings such that `a1z < a2z < a100z`. When `false`, will collate strings such that `a1z < a100z < a2z`. + * + * This preference is ignored if organizeImportsCollation is not `unicode`. + * + * Default: `false` + */ + organizeImportsNumericCollation?: boolean | undefined; + /** + * Indicates which deterministic preset should be used to sort imports. + * "auto" detects the existing ordinal case sensitivity where possible. + */ + organizeImportsSort?: "auto" | "ordinal" | "ordinalIgnoreCase" | "natural" | "naturalIgnoreCase" | undefined; + /** + * Indicates where named type-only imports should sort. "inline" sorts named imports without regard to if the import is type-only. + * + * Default: `auto`, which defaults to `last` + */ + organizeImportsTypeOrder?: "auto" | "last" | "inline" | "first" | undefined; + preferGoToSourceDefinition?: boolean | undefined; + preferTypeOnlyAutoImports?: boolean | undefined; + providePrefixAndSuffixTextForRename?: boolean | undefined; + provideRefactorNotApplicableReason?: boolean | undefined; + quotePreference?: "auto" | "double" | "single" | undefined; + reportStyleChecksAsWarnings?: boolean | undefined; + validateEnabled?: boolean | undefined; + workspaceSymbolsScope?: "allOpenProjects" | "currentProject" | undefined; +} diff --git a/packages/typescript/src/ast/ast.generated.ts b/packages/typescript/src/ast/ast.generated.ts index 723093189f812..78b538fb5cd06 100644 --- a/packages/typescript/src/ast/ast.generated.ts +++ b/packages/typescript/src/ast/ast.generated.ts @@ -1,1527 +1,1527 @@ -// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. - -import type { ModifierFlags } from "#enums/modifierFlags"; -import type { NodeFlags } from "#enums/nodeFlags"; -import { SyntaxKind } from "#enums/syntaxKind"; -import { TokenFlags } from "#enums/tokenFlags"; -import type { - JsxTagNamePropertyAccess, - Node, - NodeArray, -} from "./ast.ts"; -export type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ConflictMarkerTrivia; -export type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral; -export type PseudoLiteralSyntaxKind = SyntaxKind.TemplateHead | SyntaxKind.TemplateMiddle | SyntaxKind.TemplateTail; -export type PunctuationSyntaxKind = - | SyntaxKind.OpenBraceToken - | SyntaxKind.CloseBraceToken - | SyntaxKind.OpenParenToken - | SyntaxKind.CloseParenToken - | SyntaxKind.OpenBracketToken - | SyntaxKind.CloseBracketToken - | SyntaxKind.DotToken - | SyntaxKind.DotDotDotToken - | SyntaxKind.SemicolonToken - | SyntaxKind.CommaToken - | SyntaxKind.QuestionDotToken - | SyntaxKind.LessThanToken - | SyntaxKind.LessThanSlashToken - | SyntaxKind.GreaterThanToken - | SyntaxKind.LessThanEqualsToken - | SyntaxKind.GreaterThanEqualsToken - | SyntaxKind.EqualsEqualsToken - | SyntaxKind.ExclamationEqualsToken - | SyntaxKind.EqualsEqualsEqualsToken - | SyntaxKind.ExclamationEqualsEqualsToken - | SyntaxKind.EqualsGreaterThanToken - | SyntaxKind.PlusToken - | SyntaxKind.MinusToken - | SyntaxKind.AsteriskToken - | SyntaxKind.AsteriskAsteriskToken - | SyntaxKind.SlashToken - | SyntaxKind.PercentToken - | SyntaxKind.PlusPlusToken - | SyntaxKind.MinusMinusToken - | SyntaxKind.LessThanLessThanToken - | SyntaxKind.GreaterThanGreaterThanToken - | SyntaxKind.GreaterThanGreaterThanGreaterThanToken - | SyntaxKind.AmpersandToken - | SyntaxKind.BarToken - | SyntaxKind.CaretToken - | SyntaxKind.ExclamationToken - | SyntaxKind.TildeToken - | SyntaxKind.AmpersandAmpersandToken - | SyntaxKind.BarBarToken - | SyntaxKind.QuestionToken - | SyntaxKind.ColonToken - | SyntaxKind.AtToken - | SyntaxKind.QuestionQuestionToken - | SyntaxKind.BacktickToken - | SyntaxKind.HashToken - | SyntaxKind.EqualsToken - | SyntaxKind.PlusEqualsToken - | SyntaxKind.MinusEqualsToken - | SyntaxKind.AsteriskEqualsToken - | SyntaxKind.AsteriskAsteriskEqualsToken - | SyntaxKind.SlashEqualsToken - | SyntaxKind.PercentEqualsToken - | SyntaxKind.LessThanLessThanEqualsToken - | SyntaxKind.GreaterThanGreaterThanEqualsToken - | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken - | SyntaxKind.AmpersandEqualsToken - | SyntaxKind.BarEqualsToken - | SyntaxKind.BarBarEqualsToken - | SyntaxKind.AmpersandAmpersandEqualsToken - | SyntaxKind.QuestionQuestionEqualsToken - | SyntaxKind.CaretEqualsToken; -export type KeywordSyntaxKind = - | SyntaxKind.BreakKeyword - | SyntaxKind.CaseKeyword - | SyntaxKind.CatchKeyword - | SyntaxKind.ClassKeyword - | SyntaxKind.ConstKeyword - | SyntaxKind.ContinueKeyword - | SyntaxKind.DebuggerKeyword - | SyntaxKind.DefaultKeyword - | SyntaxKind.DeleteKeyword - | SyntaxKind.DoKeyword - | SyntaxKind.ElseKeyword - | SyntaxKind.EnumKeyword - | SyntaxKind.ExportKeyword - | SyntaxKind.ExtendsKeyword - | SyntaxKind.FalseKeyword - | SyntaxKind.FinallyKeyword - | SyntaxKind.ForKeyword - | SyntaxKind.FunctionKeyword - | SyntaxKind.IfKeyword - | SyntaxKind.ImportKeyword - | SyntaxKind.InKeyword - | SyntaxKind.InstanceOfKeyword - | SyntaxKind.NewKeyword - | SyntaxKind.NullKeyword - | SyntaxKind.ReturnKeyword - | SyntaxKind.SuperKeyword - | SyntaxKind.SwitchKeyword - | SyntaxKind.ThisKeyword - | SyntaxKind.ThrowKeyword - | SyntaxKind.TrueKeyword - | SyntaxKind.TryKeyword - | SyntaxKind.TypeOfKeyword - | SyntaxKind.VarKeyword - | SyntaxKind.VoidKeyword - | SyntaxKind.WhileKeyword - | SyntaxKind.WithKeyword - | SyntaxKind.ImplementsKeyword - | SyntaxKind.InterfaceKeyword - | SyntaxKind.LetKeyword - | SyntaxKind.PackageKeyword - | SyntaxKind.PrivateKeyword - | SyntaxKind.ProtectedKeyword - | SyntaxKind.PublicKeyword - | SyntaxKind.StaticKeyword - | SyntaxKind.YieldKeyword - | SyntaxKind.AbstractKeyword - | SyntaxKind.AccessorKeyword - | SyntaxKind.AsKeyword - | SyntaxKind.AssertsKeyword - | SyntaxKind.AssertKeyword - | SyntaxKind.AnyKeyword - | SyntaxKind.AsyncKeyword - | SyntaxKind.AwaitKeyword - | SyntaxKind.BooleanKeyword - | SyntaxKind.ConstructorKeyword - | SyntaxKind.DeclareKeyword - | SyntaxKind.GetKeyword - | SyntaxKind.ImmediateKeyword - | SyntaxKind.InferKeyword - | SyntaxKind.IntrinsicKeyword - | SyntaxKind.IsKeyword - | SyntaxKind.KeyOfKeyword - | SyntaxKind.ModuleKeyword - | SyntaxKind.NamespaceKeyword - | SyntaxKind.NeverKeyword - | SyntaxKind.OutKeyword - | SyntaxKind.ReadonlyKeyword - | SyntaxKind.RequireKeyword - | SyntaxKind.NumberKeyword - | SyntaxKind.ObjectKeyword - | SyntaxKind.SatisfiesKeyword - | SyntaxKind.SetKeyword - | SyntaxKind.StringKeyword - | SyntaxKind.SymbolKeyword - | SyntaxKind.TypeKeyword - | SyntaxKind.UndefinedKeyword - | SyntaxKind.UniqueKeyword - | SyntaxKind.UnknownKeyword - | SyntaxKind.UsingKeyword - | SyntaxKind.FromKeyword - | SyntaxKind.GlobalKeyword - | SyntaxKind.BigIntKeyword - | SyntaxKind.OverrideKeyword - | SyntaxKind.OfKeyword - | SyntaxKind.DeferKeyword - | SyntaxKind.SourceKeyword; -export type ModifierSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AccessorKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.ConstKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.ExportKeyword | SyntaxKind.InKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OutKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.StaticKeyword; -export type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword; -export type KeywordExpressionSyntaxKind = SyntaxKind.NullKeyword | SyntaxKind.TrueKeyword | SyntaxKind.FalseKeyword | SyntaxKind.ThisKeyword | SyntaxKind.SuperKeyword | SyntaxKind.ImportKeyword; -export type TokenSyntaxKind = - | SyntaxKind.Unknown - | SyntaxKind.EndOfFile - | SyntaxKind.SingleLineCommentTrivia - | SyntaxKind.MultiLineCommentTrivia - | SyntaxKind.NewLineTrivia - | SyntaxKind.WhitespaceTrivia - | SyntaxKind.ConflictMarkerTrivia - | SyntaxKind.NonTextFileMarkerTrivia - | SyntaxKind.NumericLiteral - | SyntaxKind.BigIntLiteral - | SyntaxKind.StringLiteral - | SyntaxKind.JsxText - | SyntaxKind.JsxTextAllWhiteSpaces - | SyntaxKind.RegularExpressionLiteral - | SyntaxKind.NoSubstitutionTemplateLiteral - | SyntaxKind.TemplateHead - | SyntaxKind.TemplateMiddle - | SyntaxKind.TemplateTail - | SyntaxKind.OpenBraceToken - | SyntaxKind.CloseBraceToken - | SyntaxKind.OpenParenToken - | SyntaxKind.CloseParenToken - | SyntaxKind.OpenBracketToken - | SyntaxKind.CloseBracketToken - | SyntaxKind.DotToken - | SyntaxKind.DotDotDotToken - | SyntaxKind.SemicolonToken - | SyntaxKind.CommaToken - | SyntaxKind.QuestionDotToken - | SyntaxKind.LessThanToken - | SyntaxKind.LessThanSlashToken - | SyntaxKind.GreaterThanToken - | SyntaxKind.LessThanEqualsToken - | SyntaxKind.GreaterThanEqualsToken - | SyntaxKind.EqualsEqualsToken - | SyntaxKind.ExclamationEqualsToken - | SyntaxKind.EqualsEqualsEqualsToken - | SyntaxKind.ExclamationEqualsEqualsToken - | SyntaxKind.EqualsGreaterThanToken - | SyntaxKind.PlusToken - | SyntaxKind.MinusToken - | SyntaxKind.AsteriskToken - | SyntaxKind.AsteriskAsteriskToken - | SyntaxKind.SlashToken - | SyntaxKind.PercentToken - | SyntaxKind.PlusPlusToken - | SyntaxKind.MinusMinusToken - | SyntaxKind.LessThanLessThanToken - | SyntaxKind.GreaterThanGreaterThanToken - | SyntaxKind.GreaterThanGreaterThanGreaterThanToken - | SyntaxKind.AmpersandToken - | SyntaxKind.BarToken - | SyntaxKind.CaretToken - | SyntaxKind.ExclamationToken - | SyntaxKind.TildeToken - | SyntaxKind.AmpersandAmpersandToken - | SyntaxKind.BarBarToken - | SyntaxKind.QuestionToken - | SyntaxKind.ColonToken - | SyntaxKind.AtToken - | SyntaxKind.QuestionQuestionToken - | SyntaxKind.BacktickToken - | SyntaxKind.HashToken - | SyntaxKind.EqualsToken - | SyntaxKind.PlusEqualsToken - | SyntaxKind.MinusEqualsToken - | SyntaxKind.AsteriskEqualsToken - | SyntaxKind.AsteriskAsteriskEqualsToken - | SyntaxKind.SlashEqualsToken - | SyntaxKind.PercentEqualsToken - | SyntaxKind.LessThanLessThanEqualsToken - | SyntaxKind.GreaterThanGreaterThanEqualsToken - | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken - | SyntaxKind.AmpersandEqualsToken - | SyntaxKind.BarEqualsToken - | SyntaxKind.BarBarEqualsToken - | SyntaxKind.AmpersandAmpersandEqualsToken - | SyntaxKind.QuestionQuestionEqualsToken - | SyntaxKind.CaretEqualsToken - | SyntaxKind.Identifier - | SyntaxKind.PrivateIdentifier - | SyntaxKind.JSDocCommentTextToken - | SyntaxKind.BreakKeyword - | SyntaxKind.CaseKeyword - | SyntaxKind.CatchKeyword - | SyntaxKind.ClassKeyword - | SyntaxKind.ConstKeyword - | SyntaxKind.ContinueKeyword - | SyntaxKind.DebuggerKeyword - | SyntaxKind.DefaultKeyword - | SyntaxKind.DeleteKeyword - | SyntaxKind.DoKeyword - | SyntaxKind.ElseKeyword - | SyntaxKind.EnumKeyword - | SyntaxKind.ExportKeyword - | SyntaxKind.ExtendsKeyword - | SyntaxKind.FalseKeyword - | SyntaxKind.FinallyKeyword - | SyntaxKind.ForKeyword - | SyntaxKind.FunctionKeyword - | SyntaxKind.IfKeyword - | SyntaxKind.ImportKeyword - | SyntaxKind.InKeyword - | SyntaxKind.InstanceOfKeyword - | SyntaxKind.NewKeyword - | SyntaxKind.NullKeyword - | SyntaxKind.ReturnKeyword - | SyntaxKind.SuperKeyword - | SyntaxKind.SwitchKeyword - | SyntaxKind.ThisKeyword - | SyntaxKind.ThrowKeyword - | SyntaxKind.TrueKeyword - | SyntaxKind.TryKeyword - | SyntaxKind.TypeOfKeyword - | SyntaxKind.VarKeyword - | SyntaxKind.VoidKeyword - | SyntaxKind.WhileKeyword - | SyntaxKind.WithKeyword - | SyntaxKind.ImplementsKeyword - | SyntaxKind.InterfaceKeyword - | SyntaxKind.LetKeyword - | SyntaxKind.PackageKeyword - | SyntaxKind.PrivateKeyword - | SyntaxKind.ProtectedKeyword - | SyntaxKind.PublicKeyword - | SyntaxKind.StaticKeyword - | SyntaxKind.YieldKeyword - | SyntaxKind.AbstractKeyword - | SyntaxKind.AccessorKeyword - | SyntaxKind.AsKeyword - | SyntaxKind.AssertsKeyword - | SyntaxKind.AssertKeyword - | SyntaxKind.AnyKeyword - | SyntaxKind.AsyncKeyword - | SyntaxKind.AwaitKeyword - | SyntaxKind.BooleanKeyword - | SyntaxKind.ConstructorKeyword - | SyntaxKind.DeclareKeyword - | SyntaxKind.GetKeyword - | SyntaxKind.ImmediateKeyword - | SyntaxKind.InferKeyword - | SyntaxKind.IntrinsicKeyword - | SyntaxKind.IsKeyword - | SyntaxKind.KeyOfKeyword - | SyntaxKind.ModuleKeyword - | SyntaxKind.NamespaceKeyword - | SyntaxKind.NeverKeyword - | SyntaxKind.OutKeyword - | SyntaxKind.ReadonlyKeyword - | SyntaxKind.RequireKeyword - | SyntaxKind.NumberKeyword - | SyntaxKind.ObjectKeyword - | SyntaxKind.SatisfiesKeyword - | SyntaxKind.SetKeyword - | SyntaxKind.StringKeyword - | SyntaxKind.SymbolKeyword - | SyntaxKind.TypeKeyword - | SyntaxKind.UndefinedKeyword - | SyntaxKind.UniqueKeyword - | SyntaxKind.UnknownKeyword - | SyntaxKind.UsingKeyword - | SyntaxKind.FromKeyword - | SyntaxKind.GlobalKeyword - | SyntaxKind.BigIntKeyword - | SyntaxKind.OverrideKeyword - | SyntaxKind.OfKeyword - | SyntaxKind.DeferKeyword - | SyntaxKind.SourceKeyword; -export type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFile | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken; -export type JSDocNodeSyntaxKind = - | SyntaxKind.JSDocTypeExpression - | SyntaxKind.JSDocNameReference - | SyntaxKind.JSDocAllType - | SyntaxKind.JSDocNullableType - | SyntaxKind.JSDocNonNullableType - | SyntaxKind.JSDocOptionalType - | SyntaxKind.JSDocVariadicType - | SyntaxKind.JSDoc - | SyntaxKind.JSDocText - | SyntaxKind.JSDocTypeLiteral - | SyntaxKind.JSDocSignature - | SyntaxKind.JSDocLink - | SyntaxKind.JSDocLinkCode - | SyntaxKind.JSDocLinkPlain - | SyntaxKind.JSDocUnknownTag - | SyntaxKind.JSDocAugmentsTag - | SyntaxKind.JSDocImplementsTag - | SyntaxKind.JSDocDeprecatedTag - | SyntaxKind.JSDocPublicTag - | SyntaxKind.JSDocPrivateTag - | SyntaxKind.JSDocProtectedTag - | SyntaxKind.JSDocReadonlyTag - | SyntaxKind.JSDocOverrideTag - | SyntaxKind.JSDocCallbackTag - | SyntaxKind.JSDocOverloadTag - | SyntaxKind.JSDocParameterTag - | SyntaxKind.JSDocReturnTag - | SyntaxKind.JSDocThisTag - | SyntaxKind.JSDocTypeTag - | SyntaxKind.JSDocTemplateTag - | SyntaxKind.JSDocTypedefTag - | SyntaxKind.JSDocSeeTag - | SyntaxKind.JSDocPropertyTag - | SyntaxKind.JSDocThrowsTag - | SyntaxKind.JSDocSatisfiesTag - | SyntaxKind.JSDocImportTag; -export type ImportPhaseModifierSyntaxKind = SyntaxKind.TypeKeyword | SyntaxKind.DeferKeyword | SyntaxKind.SourceKeyword; -export type PostfixUnaryOperator = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; -export type PrefixUnaryOperator = SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; -export type AssignmentOperator = SyntaxKind.EqualsToken | CompoundAssignmentOperator; -export type BinaryOperator = AssignmentOperatorOrHigher | SyntaxKind.CommaToken; -export type ExponentiationOperator = SyntaxKind.AsteriskAsteriskToken; -export type MultiplicativeOperator = SyntaxKind.AsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken; -export type MultiplicativeOperatorOrHigher = ExponentiationOperator | MultiplicativeOperator; -export type AdditiveOperator = SyntaxKind.PlusToken | SyntaxKind.MinusToken; -export type AdditiveOperatorOrHigher = MultiplicativeOperatorOrHigher | AdditiveOperator; -export type ShiftOperator = SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken; -export type ShiftOperatorOrHigher = AdditiveOperatorOrHigher | ShiftOperator; -export type RelationalOperator = SyntaxKind.LessThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.InstanceOfKeyword | SyntaxKind.InKeyword; -export type RelationalOperatorOrHigher = ShiftOperatorOrHigher | RelationalOperator; -export type EqualityOperator = SyntaxKind.EqualsEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.ExclamationEqualsToken; -export type EqualityOperatorOrHigher = RelationalOperatorOrHigher | EqualityOperator; -export type BitwiseOperator = SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken; -export type BitwiseOperatorOrHigher = EqualityOperatorOrHigher | BitwiseOperator; -export type LogicalOperator = SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken; -export type LogicalOperatorOrHigher = BitwiseOperatorOrHigher | LogicalOperator; -export type CompoundAssignmentOperator = SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.BarBarEqualsToken | SyntaxKind.AmpersandAmpersandEqualsToken | SyntaxKind.QuestionQuestionEqualsToken; -export type AssignmentOperatorOrHigher = SyntaxKind.QuestionQuestionToken | LogicalOperatorOrHigher | AssignmentOperator; -export type LogicalOrCoalescingAssignmentOperator = SyntaxKind.AmpersandAmpersandEqualsToken | SyntaxKind.BarBarEqualsToken | SyntaxKind.QuestionQuestionEqualsToken; - -export interface NodeBase extends Node { - readonly flags: NodeFlags; -} -export interface StatementBase extends NodeBase { - readonly _statementBrand: any; -} -export interface IterationStatementBase extends StatementBase { - readonly statement: Statement; -} -export interface ExpressionBase extends NodeBase { - readonly _expressionBrand: any; -} -export interface UnaryExpressionBase extends ExpressionBase { - readonly _unaryExpressionBrand: any; -} -export interface UpdateExpressionBase extends UnaryExpressionBase { - readonly _updateExpressionBrand: any; -} -export interface LeftHandSideExpressionBase extends UpdateExpressionBase { - readonly _leftHandSideExpressionBrand: any; -} -export interface MemberExpressionBase extends LeftHandSideExpressionBase { - readonly _memberExpressionBrand: any; -} -export interface PrimaryExpressionBase extends MemberExpressionBase { - readonly _primaryExpressionBrand: any; -} -export interface TypeNodeBase extends NodeBase { - readonly _typeNodeBrand: any; -} -export interface NodeWithTypeArgumentsBase extends TypeNodeBase { - readonly typeArguments?: NodeArray; -} -export interface JSDocTypeBase extends TypeNodeBase { - readonly _jsDocTypeBrand: any; -} -export interface DeclarationBase extends Node { - readonly _declarationBrand: any; -} -export interface ModifiersBase extends Node { - readonly modifiers?: NodeArray; - readonly modifierFlags: ModifierFlags; -} -export interface FunctionLikeBase extends Node { - readonly _declarationBrand: any; - readonly typeParameters?: NodeArray; - readonly parameters: NodeArray; - readonly type?: TypeNode; - readonly fullSignature?: TypeNode; -} -export interface BodyBase extends Node { - readonly asteriskToken?: AsteriskToken; - readonly body?: NodeBody; -} -export interface FunctionLikeWithBodyBase extends FunctionLikeBase, BodyBase { - readonly _functionLikeDeclarationBrand: any; - readonly body?: BlockOrExpression; -} -export interface ClassLikeBase extends ModifiersBase { - readonly _declarationBrand: any; - readonly name?: Identifier; - readonly typeParameters?: NodeArray; - readonly heritageClauses?: NodeArray; - readonly members: NodeArray; -} -export interface LiteralLikeNodeBase extends Node { - readonly text: string; - readonly tokenFlags: TokenFlags; -} -export interface LiteralExpressionBase extends PrimaryExpressionBase, LiteralLikeNodeBase { - readonly _literalExpressionBrand: any; -} -export interface TemplateLiteralLikeNodeBase extends LiteralLikeNodeBase { - readonly rawText: string; - readonly templateFlags: TokenFlags; -} -export interface TypeElementBase extends DeclarationBase { - readonly _typeElementBrand: any; -} -export interface ClassElementBase extends DeclarationBase { - readonly _classElementBrand: any; -} -export interface NamedMemberBase extends ModifiersBase { - readonly _declarationBrand: any; - readonly name: PropertyName; - readonly postfixToken?: QuestionToken | ExclamationToken; -} -export interface ObjectLiteralElementBase extends DeclarationBase { - readonly _objectLiteralBrand: any; -} -export interface UnionOrIntersectionTypeNodeBase extends TypeNodeBase { - readonly types: NodeArray; -} -export interface JSDocTagBase extends NodeBase { - readonly tagName: Identifier; - readonly comment?: NodeArray; -} -export interface JSDocCommentBase extends NodeBase { - readonly text: string; -} - -export interface Token extends NodeBase { - readonly kind: TKind; -} -export interface Identifier extends PrimaryExpressionBase { - readonly kind: SyntaxKind.Identifier; - readonly text: string; -} -export interface PrivateIdentifier extends PrimaryExpressionBase { - readonly kind: SyntaxKind.PrivateIdentifier; - readonly text: string; -} -export interface QualifiedName extends NodeBase { - readonly kind: SyntaxKind.QualifiedName; - readonly left: EntityName; - readonly right: MemberName; -} -export interface ComputedPropertyName extends NodeBase { - readonly kind: SyntaxKind.ComputedPropertyName; - readonly expression: Expression; -} -export interface Decorator extends NodeBase { - readonly kind: SyntaxKind.Decorator; - readonly expression: LeftHandSideExpression; -} -export interface EmptyStatement extends StatementBase { - readonly kind: SyntaxKind.EmptyStatement; -} -export interface IfStatement extends StatementBase { - readonly kind: SyntaxKind.IfStatement; - readonly expression: Expression; - readonly thenStatement: Statement; - readonly elseStatement?: Statement; -} -export interface DoStatement extends IterationStatementBase { - readonly kind: SyntaxKind.DoStatement; - readonly expression: Expression; -} -export interface WhileStatement extends IterationStatementBase { - readonly kind: SyntaxKind.WhileStatement; - readonly expression: Expression; -} -export interface ForStatement extends IterationStatementBase { - readonly kind: SyntaxKind.ForStatement; - readonly initializer?: ForInitializer; - readonly condition?: Expression; - readonly incrementor?: Expression; -} -export interface BreakStatement extends StatementBase { - readonly kind: SyntaxKind.BreakStatement; - readonly label?: Identifier; -} -export interface ContinueStatement extends StatementBase { - readonly kind: SyntaxKind.ContinueStatement; - readonly label?: Identifier; -} -export interface ReturnStatement extends StatementBase { - readonly kind: SyntaxKind.ReturnStatement; - readonly expression?: Expression; -} -export interface WithStatement extends StatementBase { - readonly kind: SyntaxKind.WithStatement; - readonly expression: Expression; - readonly statement: Statement; -} -export interface SwitchStatement extends StatementBase { - readonly kind: SyntaxKind.SwitchStatement; - readonly expression: Expression; - readonly caseBlock: CaseBlock; -} -export interface CaseBlock extends NodeBase { - readonly kind: SyntaxKind.CaseBlock; - readonly clauses: NodeArray; -} -export interface ThrowStatement extends StatementBase { - readonly kind: SyntaxKind.ThrowStatement; - readonly expression: Expression; -} -export interface TryStatement extends StatementBase { - readonly kind: SyntaxKind.TryStatement; - readonly tryBlock: Block; - readonly catchClause?: CatchClause; - readonly finallyBlock?: Block; -} -export interface CatchClause extends NodeBase { - readonly kind: SyntaxKind.CatchClause; - readonly variableDeclaration?: VariableDeclaration; - readonly block: Block; -} -export interface DebuggerStatement extends StatementBase { - readonly kind: SyntaxKind.DebuggerStatement; -} -export interface LabeledStatement extends StatementBase { - readonly kind: SyntaxKind.LabeledStatement; - readonly label: Identifier; - readonly statement: Statement; -} -export interface ExpressionStatement extends StatementBase { - readonly kind: SyntaxKind.ExpressionStatement; - readonly expression: Expression; -} -export interface Block extends StatementBase { - readonly kind: SyntaxKind.Block; - readonly statements: NodeArray; - readonly multiLine: boolean; -} -export interface VariableStatement extends StatementBase, ModifiersBase { - readonly kind: SyntaxKind.VariableStatement; - readonly declarationList: VariableDeclarationList; -} -export interface VariableDeclaration extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.VariableDeclaration; - readonly name: BindingName; - readonly exclamationToken?: ExclamationToken; - readonly type?: TypeNode; - readonly initializer?: Expression; -} -export interface VariableDeclarationList extends NodeBase { - readonly kind: SyntaxKind.VariableDeclarationList; - readonly declarations: NodeArray; -} -export interface ParameterDeclaration extends NodeBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.Parameter; - readonly dotDotDotToken?: DotDotDotToken; - readonly name: BindingName; - readonly questionToken?: QuestionToken; - readonly type?: TypeNode; - readonly initializer?: Expression; -} -export interface BindingElement extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.BindingElement; - readonly dotDotDotToken?: DotDotDotToken; - readonly propertyName?: PropertyName; - readonly name?: BindingName; - readonly initializer?: Expression; -} -export interface MissingDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.MissingDeclaration; -} -export interface FunctionDeclaration extends StatementBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { - readonly kind: SyntaxKind.FunctionDeclaration; - readonly name?: Identifier; - readonly body?: FunctionBody; -} -export interface ClassDeclaration extends StatementBase, DeclarationBase, ClassLikeBase { - readonly kind: SyntaxKind.ClassDeclaration; -} -export interface ClassExpression extends PrimaryExpressionBase, DeclarationBase, ClassLikeBase { - readonly kind: SyntaxKind.ClassExpression; -} -export interface HeritageClause extends NodeBase { - readonly kind: SyntaxKind.HeritageClause; - readonly token: SyntaxKind.ExtendsKeyword | SyntaxKind.ImplementsKeyword; - readonly types: NodeArray; -} -export interface InterfaceDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.InterfaceDeclaration; - readonly name: Identifier; - readonly typeParameters?: NodeArray; - readonly heritageClauses?: NodeArray; - readonly members: NodeArray; -} -export interface TypeAliasDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.TypeAliasDeclaration; - readonly name: Identifier; - readonly typeParameters?: NodeArray; - readonly type: TypeNode; -} -export interface EnumMember extends NodeBase, DeclarationBase, NamedMemberBase { - readonly kind: SyntaxKind.EnumMember; - readonly initializer?: Expression; -} -export interface EnumDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.EnumDeclaration; - readonly name: Identifier; - readonly members: NodeArray; -} -export interface ModuleBlock extends StatementBase { - readonly kind: SyntaxKind.ModuleBlock; - readonly statements: NodeArray; -} -export interface NotEmittedStatement extends StatementBase { - readonly kind: SyntaxKind.NotEmittedStatement; -} -export interface NotEmittedTypeElement extends NodeBase, TypeElementBase { - readonly kind: SyntaxKind.NotEmittedTypeElement; -} -export interface ImportDeclaration extends StatementBase, ModifiersBase, DeclarationBase { - readonly kind: SyntaxKind.ImportDeclaration; - readonly importClause?: ImportClause; - readonly moduleSpecifier: Expression; - readonly attributes?: ImportAttributes; -} -export interface ExternalModuleReference extends NodeBase { - readonly kind: SyntaxKind.ExternalModuleReference; - readonly expression: Expression; -} -export interface NamespaceImport extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.NamespaceImport; - readonly name: Identifier; -} -export interface NamedImports extends NodeBase { - readonly kind: SyntaxKind.NamedImports; - readonly elements: NodeArray; -} -export interface ExportAssignment extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.ExportAssignment; - readonly isExportEquals: boolean; - readonly type: TypeNode; - readonly expression: Expression; -} -export interface NamespaceExportDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.NamespaceExportDeclaration; - readonly name: Identifier; -} -export interface NamespaceExport extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.NamespaceExport; - readonly name: ModuleExportName; -} -export interface NamedExports extends NodeBase { - readonly kind: SyntaxKind.NamedExports; - readonly elements: NodeArray; -} -export interface ExportSpecifier extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.ExportSpecifier; - readonly isTypeOnly: boolean; - readonly propertyName?: ModuleExportName; - readonly name: ModuleExportName; -} -export interface CallSignatureDeclaration extends NodeBase, DeclarationBase, FunctionLikeBase, TypeElementBase { - readonly kind: SyntaxKind.CallSignature; -} -export interface ConstructSignatureDeclaration extends NodeBase, DeclarationBase, FunctionLikeBase, TypeElementBase { - readonly kind: SyntaxKind.ConstructSignature; -} -export interface ConstructorDeclaration extends NodeBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase, ClassElementBase { - readonly kind: SyntaxKind.Constructor; - readonly body?: FunctionBody; -} -export interface GetAccessorDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, TypeElementBase, ClassElementBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.GetAccessor; - readonly body?: FunctionBody; -} -export interface SetAccessorDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, TypeElementBase, ClassElementBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.SetAccessor; - readonly body?: FunctionBody; -} -export interface IndexSignatureDeclaration extends NodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase, TypeElementBase, ClassElementBase { - readonly kind: SyntaxKind.IndexSignature; - readonly type: TypeNode; -} -export interface MethodSignatureDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeBase, TypeElementBase { - readonly kind: SyntaxKind.MethodSignature; -} -export interface MethodDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, ClassElementBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.MethodDeclaration; - readonly body?: FunctionBody; -} -export interface PropertySignatureDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, TypeElementBase { - readonly kind: SyntaxKind.PropertySignature; - readonly type: TypeNode; - readonly initializer: Expression; -} -export interface PropertyDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, ClassElementBase { - readonly kind: SyntaxKind.PropertyDeclaration; - readonly type?: TypeNode; - readonly initializer?: Expression; -} -export interface SemicolonClassElement extends NodeBase, DeclarationBase, ClassElementBase { - readonly kind: SyntaxKind.SemicolonClassElement; -} -export interface ClassStaticBlockDeclaration extends NodeBase, DeclarationBase, ModifiersBase, ClassElementBase { - readonly kind: SyntaxKind.ClassStaticBlockDeclaration; - readonly body: Block; -} -export interface OmittedExpression extends ExpressionBase { - readonly kind: SyntaxKind.OmittedExpression; -} -export interface KeywordExpression extends ExpressionBase { - readonly kind: TKind; -} -export interface StringLiteral extends LiteralExpressionBase { - readonly kind: SyntaxKind.StringLiteral; -} -export interface NumericLiteral extends LiteralExpressionBase { - readonly kind: SyntaxKind.NumericLiteral; -} -export interface BigIntLiteral extends LiteralExpressionBase { - readonly kind: SyntaxKind.BigIntLiteral; -} -export interface RegularExpressionLiteral extends LiteralExpressionBase { - readonly kind: SyntaxKind.RegularExpressionLiteral; -} -export interface NoSubstitutionTemplateLiteral extends ExpressionBase, TemplateLiteralLikeNodeBase, DeclarationBase { - readonly kind: SyntaxKind.NoSubstitutionTemplateLiteral; -} -export interface BinaryExpression extends ExpressionBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.BinaryExpression; - readonly left: Expression; - readonly type?: TypeNode; - readonly operatorToken: BinaryOperatorToken; - readonly right: Expression; -} -export interface PrefixUnaryExpression extends UpdateExpressionBase { - readonly kind: SyntaxKind.PrefixUnaryExpression; - readonly operator: SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; - readonly operand: Expression; -} -export interface PostfixUnaryExpression extends UpdateExpressionBase { - readonly kind: SyntaxKind.PostfixUnaryExpression; - readonly operand: Expression; - readonly operator: SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; -} -export interface YieldExpression extends ExpressionBase { - readonly kind: SyntaxKind.YieldExpression; - readonly asteriskToken?: AsteriskToken; - readonly expression?: Expression; -} -export interface ArrowFunction extends ExpressionBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { - readonly kind: SyntaxKind.ArrowFunction; - readonly equalsGreaterThanToken: EqualsGreaterThanToken; - readonly body: ConciseBody; -} -export interface FunctionExpression extends PrimaryExpressionBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { - readonly kind: SyntaxKind.FunctionExpression; - readonly name?: Identifier; - readonly body: FunctionBody; -} -export interface AsExpression extends ExpressionBase { - readonly kind: SyntaxKind.AsExpression; - readonly expression: Expression; - readonly type: TypeNode; -} -export interface SatisfiesExpression extends ExpressionBase { - readonly kind: SyntaxKind.SatisfiesExpression; - readonly expression: Expression; - readonly type: TypeNode; -} -export interface ConditionalExpression extends ExpressionBase { - readonly kind: SyntaxKind.ConditionalExpression; - readonly condition: Expression; - readonly questionToken: QuestionToken; - readonly whenTrue: Expression; - readonly colonToken: ColonToken; - readonly whenFalse: Expression; -} -export interface PropertyAccessExpression extends MemberExpressionBase { - readonly kind: SyntaxKind.PropertyAccessExpression; - readonly expression: Expression; - readonly questionDotToken?: QuestionDotToken; - readonly name: MemberName; -} -export interface ElementAccessExpression extends MemberExpressionBase { - readonly kind: SyntaxKind.ElementAccessExpression; - readonly expression: Expression; - readonly questionDotToken?: QuestionDotToken; - readonly argumentExpression: Expression; -} -export interface CallExpression extends LeftHandSideExpressionBase, DeclarationBase { - readonly kind: SyntaxKind.CallExpression; - readonly expression: Expression; - readonly questionDotToken?: QuestionDotToken; - readonly typeArguments?: NodeArray; - readonly arguments: NodeArray; -} -export interface NewExpression extends PrimaryExpressionBase { - readonly kind: SyntaxKind.NewExpression; - readonly expression: Expression; - readonly typeArguments?: NodeArray; - readonly arguments?: NodeArray; -} -export interface MetaProperty extends PrimaryExpressionBase { - readonly kind: SyntaxKind.MetaProperty; - readonly keywordToken: SyntaxKind.ImportKeyword | SyntaxKind.NewKeyword; - readonly name: Identifier; -} -export interface NonNullExpression extends LeftHandSideExpressionBase { - readonly kind: SyntaxKind.NonNullExpression; - readonly expression: Expression; -} -export interface SpreadElement extends ExpressionBase { - readonly kind: SyntaxKind.SpreadElement; - readonly expression: Expression; -} -export interface TemplateExpression extends PrimaryExpressionBase { - readonly kind: SyntaxKind.TemplateExpression; - readonly head: TemplateHead; - readonly templateSpans: NodeArray; -} -export interface TemplateSpan extends NodeBase { - readonly kind: SyntaxKind.TemplateSpan; - readonly expression: Expression; - readonly literal: TemplateMiddleOrTail; -} -export interface TaggedTemplateExpression extends MemberExpressionBase { - readonly kind: SyntaxKind.TaggedTemplateExpression; - readonly tag: Expression; - readonly questionDotToken: QuestionDotToken; - readonly typeArguments?: NodeArray; - readonly template: TemplateLiteral; -} -export interface ParenthesizedExpression extends PrimaryExpressionBase { - readonly kind: SyntaxKind.ParenthesizedExpression; - readonly expression: Expression; -} -export interface ArrayLiteralExpression extends PrimaryExpressionBase { - readonly kind: SyntaxKind.ArrayLiteralExpression; - readonly elements: NodeArray; - readonly multiLine: boolean; -} -export interface ObjectLiteralExpression extends PrimaryExpressionBase, DeclarationBase { - readonly kind: SyntaxKind.ObjectLiteralExpression; - readonly properties: NodeArray; - readonly multiLine: boolean; -} -export interface SpreadAssignment extends NodeBase, DeclarationBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.SpreadAssignment; - readonly expression: Expression; -} -export interface PropertyAssignment extends NodeBase, DeclarationBase, NamedMemberBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.PropertyAssignment; - readonly type: TypeNode; - readonly initializer: Expression; -} -export interface ShorthandPropertyAssignment extends NodeBase, DeclarationBase, NamedMemberBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.ShorthandPropertyAssignment; - readonly type: TypeNode; - readonly equalsToken?: EqualsToken; - readonly objectAssignmentInitializer?: Expression; -} -export interface DeleteExpression extends UnaryExpressionBase { - readonly kind: SyntaxKind.DeleteExpression; - readonly expression: Expression; -} -export interface TypeOfExpression extends UnaryExpressionBase { - readonly kind: SyntaxKind.TypeOfExpression; - readonly expression: Expression; -} -export interface VoidExpression extends UnaryExpressionBase { - readonly kind: SyntaxKind.VoidExpression; - readonly expression: Expression; -} -export interface AwaitExpression extends UnaryExpressionBase { - readonly kind: SyntaxKind.AwaitExpression; - readonly expression: Expression; -} -export interface TypeAssertion extends UnaryExpressionBase { - readonly kind: SyntaxKind.TypeAssertionExpression; - readonly type: TypeNode; - readonly expression: Expression; -} -export interface KeywordTypeNode extends TypeNodeBase { - readonly kind: TKind; -} -export interface UnionTypeNode extends UnionOrIntersectionTypeNodeBase { - readonly kind: SyntaxKind.UnionType; -} -export interface IntersectionTypeNode extends UnionOrIntersectionTypeNodeBase { - readonly kind: SyntaxKind.IntersectionType; -} -export interface ConditionalTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.ConditionalType; - readonly checkType: TypeNode; - readonly extendsType: TypeNode; - readonly trueType: TypeNode; - readonly falseType: TypeNode; -} -export interface TypeOperatorNode extends TypeNodeBase { - readonly kind: SyntaxKind.TypeOperator; - readonly operator: SyntaxKind.KeyOfKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.UniqueKeyword; - readonly type: TypeNode; -} -export interface InferTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.InferType; - readonly typeParameter: TypeParameterDeclaration; -} -export interface ArrayTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.ArrayType; - readonly elementType: TypeNode; -} -export interface IndexedAccessTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.IndexedAccessType; - readonly objectType: TypeNode; - readonly indexType: TypeNode; -} -export interface TypeReferenceNode extends NodeWithTypeArgumentsBase { - readonly kind: SyntaxKind.TypeReference; - readonly typeName: EntityName; -} -export interface ExpressionWithTypeArguments extends MemberExpressionBase { - readonly kind: SyntaxKind.ExpressionWithTypeArguments; - readonly expression: Expression; - readonly typeArguments?: NodeArray; -} -export interface LiteralTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.LiteralType; - readonly literal: Node; -} -export interface ThisTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.ThisType; -} -export interface TypePredicateNode extends TypeNodeBase { - readonly kind: SyntaxKind.TypePredicate; - readonly assertsModifier?: AssertsKeyword; - readonly parameterName: TypePredicateParameterName; - readonly type?: TypeNode; -} -export interface ImportAttribute extends NodeBase { - readonly kind: SyntaxKind.ImportAttribute; - readonly name: ImportAttributeName; - readonly value: Expression; -} -export interface ImportAttributes extends NodeBase { - readonly kind: SyntaxKind.ImportAttributes; - readonly token: SyntaxKind.WithKeyword | SyntaxKind.AssertKeyword; - readonly attributes: NodeArray; - readonly multiLine: boolean; -} -export interface TypeQueryNode extends NodeWithTypeArgumentsBase { - readonly kind: SyntaxKind.TypeQuery; - readonly exprName: EntityName; -} -export interface MappedTypeNode extends TypeNodeBase, DeclarationBase { - readonly kind: SyntaxKind.MappedType; - readonly readonlyToken?: ReadonlyKeyword | PlusToken | MinusToken; - readonly typeParameter: TypeParameterDeclaration; - readonly nameType?: TypeNode; - readonly questionToken?: QuestionToken | PlusToken | MinusToken; - readonly type?: TypeNode; - readonly members?: NodeArray; -} -export interface TypeLiteralNode extends TypeNodeBase, DeclarationBase { - readonly kind: SyntaxKind.TypeLiteral; - readonly members: NodeArray; -} -export interface TupleTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.TupleType; - readonly elements: NodeArray; -} -export interface NamedTupleMember extends TypeNodeBase, DeclarationBase { - readonly kind: SyntaxKind.NamedTupleMember; - readonly dotDotDotToken?: DotDotDotToken; - readonly name: Identifier; - readonly questionToken?: QuestionToken; - readonly type: TypeNode; -} -export interface OptionalTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.OptionalType; - readonly type: TypeNode; -} -export interface RestTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.RestType; - readonly type: TypeNode; -} -export interface ParenthesizedTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.ParenthesizedType; - readonly type: TypeNode; -} -export interface FunctionTypeNode extends TypeNodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase { - readonly kind: SyntaxKind.FunctionType; -} -export interface ConstructorTypeNode extends TypeNodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase { - readonly kind: SyntaxKind.ConstructorType; -} -export interface TemplateHead extends NodeBase, TemplateLiteralLikeNodeBase { - readonly kind: SyntaxKind.TemplateHead; -} -export interface TemplateMiddle extends NodeBase, TemplateLiteralLikeNodeBase { - readonly kind: SyntaxKind.TemplateMiddle; -} -export interface TemplateTail extends NodeBase, TemplateLiteralLikeNodeBase { - readonly kind: SyntaxKind.TemplateTail; -} -export interface TemplateLiteralTypeNode extends TypeNodeBase { - readonly kind: SyntaxKind.TemplateLiteralType; - readonly head: TemplateHead; - readonly templateSpans: NodeArray; -} -export interface TemplateLiteralTypeSpan extends TypeNodeBase { - readonly kind: SyntaxKind.TemplateLiteralTypeSpan; - readonly type: TypeNode; - readonly literal: TemplateMiddleOrTail; -} -export interface SyntheticExpression extends ExpressionBase { - readonly kind: SyntaxKind.SyntheticExpression; - readonly type: any; - readonly isSpread: boolean; - readonly tupleNameSource?: Node; -} -export interface PartiallyEmittedExpression extends LeftHandSideExpressionBase { - readonly kind: SyntaxKind.PartiallyEmittedExpression; - readonly expression: Expression; -} -export interface JsxElement extends PrimaryExpressionBase { - readonly kind: SyntaxKind.JsxElement; - readonly openingElement: JsxOpeningElement; - readonly children: NodeArray; - readonly closingElement: JsxClosingElement; -} -export interface JsxAttributes extends PrimaryExpressionBase, DeclarationBase { - readonly kind: SyntaxKind.JsxAttributes; - readonly properties: NodeArray; -} -export interface JsxNamespacedName extends ExpressionBase { - readonly kind: SyntaxKind.JsxNamespacedName; - readonly namespace: Identifier; - readonly name: Identifier; -} -export interface JsxOpeningElement extends ExpressionBase { - readonly kind: SyntaxKind.JsxOpeningElement; - readonly tagName: JsxTagNameExpression; - readonly typeArguments?: NodeArray; - readonly attributes: JsxAttributes; -} -export interface JsxSelfClosingElement extends PrimaryExpressionBase { - readonly kind: SyntaxKind.JsxSelfClosingElement; - readonly tagName: JsxTagNameExpression; - readonly typeArguments?: NodeArray; - readonly attributes: JsxAttributes; -} -export interface JsxFragment extends PrimaryExpressionBase { - readonly kind: SyntaxKind.JsxFragment; - readonly openingFragment: JsxOpeningFragment; - readonly children: NodeArray; - readonly closingFragment: JsxClosingFragment; -} -export interface JsxOpeningFragment extends ExpressionBase { - readonly kind: SyntaxKind.JsxOpeningFragment; -} -export interface JsxClosingFragment extends ExpressionBase { - readonly kind: SyntaxKind.JsxClosingFragment; -} -export interface JsxAttribute extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.JsxAttribute; - readonly name: JsxAttributeName; - readonly initializer?: JsxAttributeValue; -} -export interface JsxSpreadAttribute extends NodeBase, ObjectLiteralElementBase { - readonly kind: SyntaxKind.JsxSpreadAttribute; - readonly expression: Expression; -} -export interface JsxClosingElement extends NodeBase { - readonly kind: SyntaxKind.JsxClosingElement; - readonly tagName: JsxTagNameExpression; -} -export interface JsxExpression extends ExpressionBase { - readonly kind: SyntaxKind.JsxExpression; - readonly dotDotDotToken?: DotDotDotToken; - readonly expression?: Expression; -} -export interface JsxText extends ExpressionBase, LiteralLikeNodeBase { - readonly kind: SyntaxKind.JsxText; - readonly containsOnlyTriviaWhiteSpaces: boolean; -} -export interface SyntaxList extends NodeBase { - readonly kind: SyntaxKind.SyntaxList; - readonly children: readonly Node[]; -} -export interface JSDoc extends NodeBase { - readonly kind: SyntaxKind.JSDoc; - readonly comment: NodeArray; - readonly tags?: NodeArray; -} -export interface JSDocTypeExpression extends TypeNodeBase { - readonly kind: SyntaxKind.JSDocTypeExpression; - readonly type: TypeNode; -} -export interface JSDocNonNullableType extends JSDocTypeBase { - readonly kind: SyntaxKind.JSDocNonNullableType; - readonly type: TypeNode; -} -export interface JSDocNullableType extends JSDocTypeBase { - readonly kind: SyntaxKind.JSDocNullableType; - readonly type: TypeNode; -} -export interface JSDocAllType extends JSDocTypeBase { - readonly kind: SyntaxKind.JSDocAllType; -} -export interface JSDocVariadicType extends JSDocTypeBase { - readonly kind: SyntaxKind.JSDocVariadicType; - readonly type: TypeNode; -} -export interface JSDocOptionalType extends JSDocTypeBase { - readonly kind: SyntaxKind.JSDocOptionalType; - readonly type: TypeNode; -} -export interface JSDocTypeTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocTypeTag; - readonly typeExpression: Node; -} -export interface JSDocUnknownTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocUnknownTag; -} -export interface JSDocTemplateTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocTemplateTag; - readonly constraint: Node; - readonly typeParameters: NodeArray; -} -export interface JSDocReturnTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocReturnTag; - readonly typeExpression?: TypeNode; -} -export interface JSDocPublicTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocPublicTag; -} -export interface JSDocPrivateTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocPrivateTag; -} -export interface JSDocProtectedTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocProtectedTag; -} -export interface JSDocReadonlyTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocReadonlyTag; -} -export interface JSDocOverrideTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocOverrideTag; -} -export interface JSDocDeprecatedTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocDeprecatedTag; -} -export interface JSDocSeeTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocSeeTag; - readonly nameExpression: TypeNode; -} -export interface JSDocImplementsTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocImplementsTag; - readonly className: ExpressionWithTypeArguments; -} -export interface JSDocAugmentsTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocAugmentsTag; - readonly className: ExpressionWithTypeArguments; -} -export interface JSDocSatisfiesTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocSatisfiesTag; - readonly typeExpression: TypeNode; -} -export interface JSDocThrowsTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocThrowsTag; - readonly typeExpression?: TypeNode; -} -export interface JSDocThisTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocThisTag; - readonly typeExpression: TypeNode; -} -export interface JSDocImportTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocImportTag; - readonly importClause?: ImportClause; - readonly moduleSpecifier: Expression; - readonly attributes?: ImportAttributes; -} -export interface JSDocCallbackTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocCallbackTag; - readonly typeExpression: TypeNode; - readonly name?: JSDocFullName; -} -export interface JSDocOverloadTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocOverloadTag; - readonly typeExpression: TypeNode; -} -export interface JSDocTypedefTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocTypedefTag; - readonly typeExpression?: Node; - readonly name?: JSDocFullName; -} -export interface JSDocSignature extends JSDocTypeBase, DeclarationBase, FunctionLikeBase { - readonly kind: SyntaxKind.JSDocSignature; -} -export interface JSDocNameReference extends TypeNodeBase { - readonly kind: SyntaxKind.JSDocNameReference; - readonly name: EntityName; -} -export interface ModuleDeclaration extends StatementBase, DeclarationBase, ModifiersBase, BodyBase { - readonly kind: SyntaxKind.ModuleDeclaration; - readonly keyword: SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword; - readonly name: ModuleName; - readonly attributes?: TypeLiteralNode; - readonly body?: ModuleBody; -} -export interface ImportEqualsDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.ImportEqualsDeclaration; - readonly isTypeOnly: boolean; - readonly name: Identifier; - readonly moduleReference: ModuleReference; -} -export interface ExportDeclaration extends StatementBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.ExportDeclaration; - readonly isTypeOnly: boolean; - readonly exportClause?: NamedExportBindings; - readonly moduleSpecifier?: Expression; - readonly attributes?: ImportAttributes; -} -export interface ImportTypeNode extends NodeWithTypeArgumentsBase { - readonly kind: SyntaxKind.ImportType; - readonly isTypeOf: boolean; - readonly argument: TypeNode; - readonly attributes?: ImportAttributes; - readonly qualifier?: EntityName; -} -export interface ImportClause extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.ImportClause; - readonly phaseModifier?: ImportPhaseModifierSyntaxKind; - readonly name?: Identifier; - readonly namedBindings?: NamedImportBindings; -} -export interface ImportSpecifier extends NodeBase, DeclarationBase { - readonly kind: SyntaxKind.ImportSpecifier; - readonly isTypeOnly: boolean; - readonly propertyName?: ModuleExportName; - readonly name: Identifier; -} -export interface JSDocText extends JSDocCommentBase { - readonly kind: SyntaxKind.JSDocText; -} -export interface JSDocLink extends JSDocCommentBase { - readonly kind: SyntaxKind.JSDocLink; - readonly name?: EntityName; -} -export interface JSDocLinkPlain extends JSDocCommentBase { - readonly kind: SyntaxKind.JSDocLinkPlain; - readonly name?: EntityName; -} -export interface JSDocLinkCode extends JSDocCommentBase { - readonly kind: SyntaxKind.JSDocLinkCode; - readonly name?: EntityName; -} -export interface TypeParameterDeclaration extends NodeBase, DeclarationBase, ModifiersBase { - readonly kind: SyntaxKind.TypeParameter; - readonly name: Identifier; - readonly constraint?: TypeNode; - readonly expression?: Expression; - readonly defaultType?: TypeNode; -} -export interface SyntheticReferenceExpression extends ExpressionBase { - readonly kind: SyntaxKind.SyntheticReferenceExpression; - readonly expression: Expression; - readonly thisArg: Expression; -} -export interface JSDocTypeLiteral extends JSDocTypeBase, DeclarationBase { - readonly kind: SyntaxKind.JSDocTypeLiteral; - readonly jsdocPropertyTags?: readonly JSDocTag[]; - readonly isArrayType: boolean; -} - -export type Expression = ExpressionBase; -export type Statement = StatementBase; -export type TypeNode = TypeNodeBase; -export type HeritageClauseElement = ExpressionWithTypeArguments | TypeReferenceNode; -export type BlockOrExpression = Block | Expression; -export type NodeBody = Block | Expression | ModuleBlock | ModuleDeclaration; -export type AccessExpression = PropertyAccessExpression | ElementAccessExpression; -export type DeclarationName = Identifier | PrivateIdentifier | StringLiteral | NumericLiteral | BigIntLiteral | NoSubstitutionTemplateLiteral | ComputedPropertyName | BindingPattern | PropertyAccessExpression | ElementAccessExpression; -export type ModuleName = Identifier | StringLiteral; -export type ModuleExportName = Identifier | StringLiteral; -export type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier | BigIntLiteral; -export type ModuleBody = ModuleBlock | ModuleDeclaration; -export type JSDocFullName = Identifier | ModuleDeclaration; -export type ForInitializer = Expression | MissingDeclaration | VariableDeclarationList; -export type ModuleReference = Identifier | QualifiedName | ExternalModuleReference; -export type NamedImportBindings = NamespaceImport | NamedImports; -export type NamedExportBindings = NamespaceExport | NamedExports; -export type MemberName = Identifier | PrivateIdentifier; -export type EntityName = Identifier | QualifiedName; -export type BindingName = Identifier | BindingPattern; -export type ModifierLike = Modifier | Decorator; -export type JsxChild = JsxText | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; -export type JsxAttributeLike = JsxAttribute | JsxSpreadAttribute; -export type JsxAttributeName = Identifier | JsxNamespacedName; -export type JsxAttributeValue = StringLiteral | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; -export type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess | JsxNamespacedName; -export type ClassLikeDeclaration = ClassDeclaration | ClassExpression; -export type AccessorDeclaration = GetAccessorDeclaration | SetAccessorDeclaration; -export type LiteralLikeNode = StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | TemplateLiteralLikeNode | JsxText; -export type LiteralExpression = StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | NoSubstitutionTemplateLiteral; -export type UnionOrIntersectionTypeNode = UnionTypeNode | IntersectionTypeNode; -export type TemplateLiteralLikeNode = TemplateHead | TemplateMiddle | TemplateTail; -export type TemplateMiddleOrTail = TemplateMiddle | TemplateTail; -export type TemplateLiteral = TemplateExpression | NoSubstitutionTemplateLiteral; -export type TypePredicateParameterName = Identifier | ThisTypeNode; -export type ImportAttributeName = Identifier | StringLiteral; -export type LeftHandSideExpression = LeftHandSideExpressionBase; -export type JSDocComment = JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain; -export type SignatureDeclaration = CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignatureDeclaration | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | FunctionDeclaration | MethodDeclaration | ConstructorDeclaration | AccessorDeclaration | FunctionExpression | ArrowFunction; -export type StringLiteralLikeNode = StringLiteral | NoSubstitutionTemplateLiteral; -export type NumericOrStringLikeLiteral = StringLiteralLikeNode | NumericLiteral; -export type ObjectLiteralLikeNode = ObjectLiteralExpression | ObjectBindingPattern; -export type ObjectTypeDeclaration = ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode; -export type JsxOpeningLikeElement = JsxOpeningElement | JsxSelfClosingElement; -export type NamedImportsOrExports = NamedImports | NamedExports; -export type BreakOrContinueStatement = BreakStatement | ContinueStatement; -export type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator | JsxOpeningLikeElement | BinaryExpression; -export type FunctionLikeDeclaration = FunctionDeclaration | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | ConstructorDeclaration | FunctionExpression | ArrowFunction; -export type VariableOrParameterDeclaration = VariableDeclaration | ParameterDeclaration; -export type VariableOrPropertyDeclaration = VariableDeclaration | PropertyDeclaration; -export type CallOrNewExpression = CallExpression | NewExpression; -export type ImportClauseOrBindingPattern = ImportClause | BindingPattern; -export type AnyImportSyntax = ImportDeclaration | ImportEqualsDeclaration; -export type Declaration = DeclarationBase; -export type ClassElement = ClassElementBase; -export type TypeElement = TypeElementBase; -export type ObjectLiteralElement = ObjectLiteralElementBase; -export type JSDocTag = JSDocTagBase; -export type ArrayBindingElement = BindingElement | OmittedExpression; -export type AssertionExpression = TypeAssertion | AsExpression; -export type BooleanLiteral = TrueLiteral | FalseLiteral; -export type ConciseBody = Block | Expression; -export type DestructuringAssignment = ObjectDestructuringAssignment | ArrayDestructuringAssignment; -export type LiteralToken = NumericLiteral | BigIntLiteral | StringLiteral | JsxText | RegularExpressionLiteral | NoSubstitutionTemplateLiteral; -export type Modifier = AbstractKeyword | AccessorKeyword | AsyncKeyword | ConstKeyword | DeclareKeyword | DefaultKeyword | ExportKeyword | InKeyword | PrivateKeyword | ProtectedKeyword | PublicKeyword | ReadonlyKeyword | OutKeyword | OverrideKeyword | StaticKeyword; -export type ObjectLiteralElementLike = PropertyAssignment | ShorthandPropertyAssignment | SpreadAssignment | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration; -export type PropertyNameLiteral = Identifier | StringLiteral | NumericLiteral; -export type PseudoLiteralToken = TemplateHead | TemplateMiddle | TemplateTail; -export type TemplateLiteralToken = NoSubstitutionTemplateLiteral | PseudoLiteralToken; -export type ArrayDestructuringAssignment = BinaryExpression; -export type ObjectDestructuringAssignment = BinaryExpression; -export type FunctionBody = Block; -export type IncrementExpression = UpdateExpressionBase; - -export interface ForInStatement extends StatementBase { - readonly kind: SyntaxKind.ForInStatement; - readonly awaitModifier?: AwaitKeyword; - readonly initializer: ForInitializer; - readonly expression: Expression; - readonly statement: Statement; -} -export interface ForOfStatement extends StatementBase { - readonly kind: SyntaxKind.ForOfStatement; - readonly awaitModifier?: AwaitKeyword; - readonly initializer: ForInitializer; - readonly expression: Expression; - readonly statement: Statement; -} -export interface CaseClause extends NodeBase { - readonly kind: SyntaxKind.CaseClause; - readonly expression: Expression; - readonly statements: NodeArray; -} -export interface DefaultClause extends NodeBase { - readonly kind: SyntaxKind.DefaultClause; - readonly expression: Expression; - readonly statements: NodeArray; -} -export interface ObjectBindingPattern extends NodeBase { - readonly kind: SyntaxKind.ObjectBindingPattern; - readonly elements: NodeArray; -} -export interface ArrayBindingPattern extends NodeBase { - readonly kind: SyntaxKind.ArrayBindingPattern; - readonly elements: NodeArray; -} -export interface JSDocParameterTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocParameterTag; - readonly name: EntityName; - readonly isBracketed: boolean; - readonly typeExpression?: TypeNode; - readonly isNameFirst: boolean; -} -export interface JSDocPropertyTag extends JSDocTagBase { - readonly kind: SyntaxKind.JSDocPropertyTag; - readonly name: EntityName; - readonly isBracketed: boolean; - readonly typeExpression?: TypeNode; - readonly isNameFirst: boolean; -} -export type ForInOrOfStatement = ForInStatement | ForOfStatement; -export type CaseOrDefaultClause = CaseClause | DefaultClause; -export type BindingPattern = ObjectBindingPattern | ArrayBindingPattern; -export type JSDocParameterOrPropertyTag = JSDocParameterTag | JSDocPropertyTag; -export type EndOfFile = Token; -export type DotToken = Token; -export type DotDotDotToken = Token; -export type QuestionToken = Token; -export type ExclamationToken = Token; -export type ColonToken = Token; -export type EqualsToken = Token; -export type AsteriskToken = Token; -export type EqualsGreaterThanToken = Token; -export type PlusToken = Token; -export type MinusToken = Token; -export type QuestionDotToken = Token; -export type AssertsKeyword = Token; -export type AssertKeyword = Token; -export type AwaitKeyword = Token; -export type CaseKeyword = Token; -export type AbstractKeyword = Token; -export type AccessorKeyword = Token; -export type AsyncKeyword = Token; -export type ConstKeyword = Token; -export type DeclareKeyword = Token; -export type DefaultKeyword = Token; -export type ExportKeyword = Token; -export type InKeyword = Token; -export type PrivateKeyword = Token; -export type ProtectedKeyword = Token; -export type PublicKeyword = Token; -export type ReadonlyKeyword = Token; -export type OutKeyword = Token; -export type OverrideKeyword = Token; -export type StaticKeyword = Token; -export type BinaryOperatorToken = Token; -export type AssignmentOperatorToken = Token; -export type NullLiteral = KeywordExpression; -export type TrueLiteral = KeywordExpression; -export type FalseLiteral = KeywordExpression; -export type ThisExpression = KeywordExpression; -export type SuperExpression = KeywordExpression; -export type ImportExpression = KeywordExpression; -export type StatementList = NodeArray; -export type CaseClausesList = NodeArray; -export type VariableDeclarationNodeList = NodeArray; -export type BindingElementList = NodeArray; -export type TypeParameterList = NodeArray; -export type ParameterList = NodeArray; -export type HeritageClauseList = NodeArray; -export type ClassElementList = NodeArray; -export type TypeElementList = NodeArray; -export type ExpressionWithTypeArgumentsList = NodeArray; -export type HeritageClauseElementList = NodeArray; -export type EnumMemberList = NodeArray; -export type ImportSpecifierList = NodeArray; -export type ExportSpecifierList = NodeArray; -export type TypeArgumentList = NodeArray; -export type ArgumentList = NodeArray; -export type TemplateSpanList = NodeArray; -export type ElementList = NodeArray; -export type PropertyDefinitionList = NodeArray; -export type TypeList = NodeArray; -export type ImportAttributeList = NodeArray; -export type TemplateLiteralTypeSpanList = NodeArray; -export type JsxChildList = NodeArray; -export type JsxAttributeList = NodeArray; +// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. + +import type { ModifierFlags } from "#enums/modifierFlags"; +import type { NodeFlags } from "#enums/nodeFlags"; +import { SyntaxKind } from "#enums/syntaxKind"; +import { TokenFlags } from "#enums/tokenFlags"; +import type { + JsxTagNamePropertyAccess, + Node, + NodeArray, +} from "./ast.ts"; +export type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ConflictMarkerTrivia; +export type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral; +export type PseudoLiteralSyntaxKind = SyntaxKind.TemplateHead | SyntaxKind.TemplateMiddle | SyntaxKind.TemplateTail; +export type PunctuationSyntaxKind = + | SyntaxKind.OpenBraceToken + | SyntaxKind.CloseBraceToken + | SyntaxKind.OpenParenToken + | SyntaxKind.CloseParenToken + | SyntaxKind.OpenBracketToken + | SyntaxKind.CloseBracketToken + | SyntaxKind.DotToken + | SyntaxKind.DotDotDotToken + | SyntaxKind.SemicolonToken + | SyntaxKind.CommaToken + | SyntaxKind.QuestionDotToken + | SyntaxKind.LessThanToken + | SyntaxKind.LessThanSlashToken + | SyntaxKind.GreaterThanToken + | SyntaxKind.LessThanEqualsToken + | SyntaxKind.GreaterThanEqualsToken + | SyntaxKind.EqualsEqualsToken + | SyntaxKind.ExclamationEqualsToken + | SyntaxKind.EqualsEqualsEqualsToken + | SyntaxKind.ExclamationEqualsEqualsToken + | SyntaxKind.EqualsGreaterThanToken + | SyntaxKind.PlusToken + | SyntaxKind.MinusToken + | SyntaxKind.AsteriskToken + | SyntaxKind.AsteriskAsteriskToken + | SyntaxKind.SlashToken + | SyntaxKind.PercentToken + | SyntaxKind.PlusPlusToken + | SyntaxKind.MinusMinusToken + | SyntaxKind.LessThanLessThanToken + | SyntaxKind.GreaterThanGreaterThanToken + | SyntaxKind.GreaterThanGreaterThanGreaterThanToken + | SyntaxKind.AmpersandToken + | SyntaxKind.BarToken + | SyntaxKind.CaretToken + | SyntaxKind.ExclamationToken + | SyntaxKind.TildeToken + | SyntaxKind.AmpersandAmpersandToken + | SyntaxKind.BarBarToken + | SyntaxKind.QuestionToken + | SyntaxKind.ColonToken + | SyntaxKind.AtToken + | SyntaxKind.QuestionQuestionToken + | SyntaxKind.BacktickToken + | SyntaxKind.HashToken + | SyntaxKind.EqualsToken + | SyntaxKind.PlusEqualsToken + | SyntaxKind.MinusEqualsToken + | SyntaxKind.AsteriskEqualsToken + | SyntaxKind.AsteriskAsteriskEqualsToken + | SyntaxKind.SlashEqualsToken + | SyntaxKind.PercentEqualsToken + | SyntaxKind.LessThanLessThanEqualsToken + | SyntaxKind.GreaterThanGreaterThanEqualsToken + | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken + | SyntaxKind.AmpersandEqualsToken + | SyntaxKind.BarEqualsToken + | SyntaxKind.BarBarEqualsToken + | SyntaxKind.AmpersandAmpersandEqualsToken + | SyntaxKind.QuestionQuestionEqualsToken + | SyntaxKind.CaretEqualsToken; +export type KeywordSyntaxKind = + | SyntaxKind.BreakKeyword + | SyntaxKind.CaseKeyword + | SyntaxKind.CatchKeyword + | SyntaxKind.ClassKeyword + | SyntaxKind.ConstKeyword + | SyntaxKind.ContinueKeyword + | SyntaxKind.DebuggerKeyword + | SyntaxKind.DefaultKeyword + | SyntaxKind.DeleteKeyword + | SyntaxKind.DoKeyword + | SyntaxKind.ElseKeyword + | SyntaxKind.EnumKeyword + | SyntaxKind.ExportKeyword + | SyntaxKind.ExtendsKeyword + | SyntaxKind.FalseKeyword + | SyntaxKind.FinallyKeyword + | SyntaxKind.ForKeyword + | SyntaxKind.FunctionKeyword + | SyntaxKind.IfKeyword + | SyntaxKind.ImportKeyword + | SyntaxKind.InKeyword + | SyntaxKind.InstanceOfKeyword + | SyntaxKind.NewKeyword + | SyntaxKind.NullKeyword + | SyntaxKind.ReturnKeyword + | SyntaxKind.SuperKeyword + | SyntaxKind.SwitchKeyword + | SyntaxKind.ThisKeyword + | SyntaxKind.ThrowKeyword + | SyntaxKind.TrueKeyword + | SyntaxKind.TryKeyword + | SyntaxKind.TypeOfKeyword + | SyntaxKind.VarKeyword + | SyntaxKind.VoidKeyword + | SyntaxKind.WhileKeyword + | SyntaxKind.WithKeyword + | SyntaxKind.ImplementsKeyword + | SyntaxKind.InterfaceKeyword + | SyntaxKind.LetKeyword + | SyntaxKind.PackageKeyword + | SyntaxKind.PrivateKeyword + | SyntaxKind.ProtectedKeyword + | SyntaxKind.PublicKeyword + | SyntaxKind.StaticKeyword + | SyntaxKind.YieldKeyword + | SyntaxKind.AbstractKeyword + | SyntaxKind.AccessorKeyword + | SyntaxKind.AsKeyword + | SyntaxKind.AssertsKeyword + | SyntaxKind.AssertKeyword + | SyntaxKind.AnyKeyword + | SyntaxKind.AsyncKeyword + | SyntaxKind.AwaitKeyword + | SyntaxKind.BooleanKeyword + | SyntaxKind.ConstructorKeyword + | SyntaxKind.DeclareKeyword + | SyntaxKind.GetKeyword + | SyntaxKind.ImmediateKeyword + | SyntaxKind.InferKeyword + | SyntaxKind.IntrinsicKeyword + | SyntaxKind.IsKeyword + | SyntaxKind.KeyOfKeyword + | SyntaxKind.ModuleKeyword + | SyntaxKind.NamespaceKeyword + | SyntaxKind.NeverKeyword + | SyntaxKind.OutKeyword + | SyntaxKind.ReadonlyKeyword + | SyntaxKind.RequireKeyword + | SyntaxKind.NumberKeyword + | SyntaxKind.ObjectKeyword + | SyntaxKind.SatisfiesKeyword + | SyntaxKind.SetKeyword + | SyntaxKind.StringKeyword + | SyntaxKind.SymbolKeyword + | SyntaxKind.TypeKeyword + | SyntaxKind.UndefinedKeyword + | SyntaxKind.UniqueKeyword + | SyntaxKind.UnknownKeyword + | SyntaxKind.UsingKeyword + | SyntaxKind.FromKeyword + | SyntaxKind.GlobalKeyword + | SyntaxKind.BigIntKeyword + | SyntaxKind.OverrideKeyword + | SyntaxKind.OfKeyword + | SyntaxKind.DeferKeyword + | SyntaxKind.SourceKeyword; +export type ModifierSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AccessorKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.ConstKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.ExportKeyword | SyntaxKind.InKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OutKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.StaticKeyword; +export type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword; +export type KeywordExpressionSyntaxKind = SyntaxKind.NullKeyword | SyntaxKind.TrueKeyword | SyntaxKind.FalseKeyword | SyntaxKind.ThisKeyword | SyntaxKind.SuperKeyword | SyntaxKind.ImportKeyword; +export type TokenSyntaxKind = + | SyntaxKind.Unknown + | SyntaxKind.EndOfFile + | SyntaxKind.SingleLineCommentTrivia + | SyntaxKind.MultiLineCommentTrivia + | SyntaxKind.NewLineTrivia + | SyntaxKind.WhitespaceTrivia + | SyntaxKind.ConflictMarkerTrivia + | SyntaxKind.NonTextFileMarkerTrivia + | SyntaxKind.NumericLiteral + | SyntaxKind.BigIntLiteral + | SyntaxKind.StringLiteral + | SyntaxKind.JsxText + | SyntaxKind.JsxTextAllWhiteSpaces + | SyntaxKind.RegularExpressionLiteral + | SyntaxKind.NoSubstitutionTemplateLiteral + | SyntaxKind.TemplateHead + | SyntaxKind.TemplateMiddle + | SyntaxKind.TemplateTail + | SyntaxKind.OpenBraceToken + | SyntaxKind.CloseBraceToken + | SyntaxKind.OpenParenToken + | SyntaxKind.CloseParenToken + | SyntaxKind.OpenBracketToken + | SyntaxKind.CloseBracketToken + | SyntaxKind.DotToken + | SyntaxKind.DotDotDotToken + | SyntaxKind.SemicolonToken + | SyntaxKind.CommaToken + | SyntaxKind.QuestionDotToken + | SyntaxKind.LessThanToken + | SyntaxKind.LessThanSlashToken + | SyntaxKind.GreaterThanToken + | SyntaxKind.LessThanEqualsToken + | SyntaxKind.GreaterThanEqualsToken + | SyntaxKind.EqualsEqualsToken + | SyntaxKind.ExclamationEqualsToken + | SyntaxKind.EqualsEqualsEqualsToken + | SyntaxKind.ExclamationEqualsEqualsToken + | SyntaxKind.EqualsGreaterThanToken + | SyntaxKind.PlusToken + | SyntaxKind.MinusToken + | SyntaxKind.AsteriskToken + | SyntaxKind.AsteriskAsteriskToken + | SyntaxKind.SlashToken + | SyntaxKind.PercentToken + | SyntaxKind.PlusPlusToken + | SyntaxKind.MinusMinusToken + | SyntaxKind.LessThanLessThanToken + | SyntaxKind.GreaterThanGreaterThanToken + | SyntaxKind.GreaterThanGreaterThanGreaterThanToken + | SyntaxKind.AmpersandToken + | SyntaxKind.BarToken + | SyntaxKind.CaretToken + | SyntaxKind.ExclamationToken + | SyntaxKind.TildeToken + | SyntaxKind.AmpersandAmpersandToken + | SyntaxKind.BarBarToken + | SyntaxKind.QuestionToken + | SyntaxKind.ColonToken + | SyntaxKind.AtToken + | SyntaxKind.QuestionQuestionToken + | SyntaxKind.BacktickToken + | SyntaxKind.HashToken + | SyntaxKind.EqualsToken + | SyntaxKind.PlusEqualsToken + | SyntaxKind.MinusEqualsToken + | SyntaxKind.AsteriskEqualsToken + | SyntaxKind.AsteriskAsteriskEqualsToken + | SyntaxKind.SlashEqualsToken + | SyntaxKind.PercentEqualsToken + | SyntaxKind.LessThanLessThanEqualsToken + | SyntaxKind.GreaterThanGreaterThanEqualsToken + | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken + | SyntaxKind.AmpersandEqualsToken + | SyntaxKind.BarEqualsToken + | SyntaxKind.BarBarEqualsToken + | SyntaxKind.AmpersandAmpersandEqualsToken + | SyntaxKind.QuestionQuestionEqualsToken + | SyntaxKind.CaretEqualsToken + | SyntaxKind.Identifier + | SyntaxKind.PrivateIdentifier + | SyntaxKind.JSDocCommentTextToken + | SyntaxKind.BreakKeyword + | SyntaxKind.CaseKeyword + | SyntaxKind.CatchKeyword + | SyntaxKind.ClassKeyword + | SyntaxKind.ConstKeyword + | SyntaxKind.ContinueKeyword + | SyntaxKind.DebuggerKeyword + | SyntaxKind.DefaultKeyword + | SyntaxKind.DeleteKeyword + | SyntaxKind.DoKeyword + | SyntaxKind.ElseKeyword + | SyntaxKind.EnumKeyword + | SyntaxKind.ExportKeyword + | SyntaxKind.ExtendsKeyword + | SyntaxKind.FalseKeyword + | SyntaxKind.FinallyKeyword + | SyntaxKind.ForKeyword + | SyntaxKind.FunctionKeyword + | SyntaxKind.IfKeyword + | SyntaxKind.ImportKeyword + | SyntaxKind.InKeyword + | SyntaxKind.InstanceOfKeyword + | SyntaxKind.NewKeyword + | SyntaxKind.NullKeyword + | SyntaxKind.ReturnKeyword + | SyntaxKind.SuperKeyword + | SyntaxKind.SwitchKeyword + | SyntaxKind.ThisKeyword + | SyntaxKind.ThrowKeyword + | SyntaxKind.TrueKeyword + | SyntaxKind.TryKeyword + | SyntaxKind.TypeOfKeyword + | SyntaxKind.VarKeyword + | SyntaxKind.VoidKeyword + | SyntaxKind.WhileKeyword + | SyntaxKind.WithKeyword + | SyntaxKind.ImplementsKeyword + | SyntaxKind.InterfaceKeyword + | SyntaxKind.LetKeyword + | SyntaxKind.PackageKeyword + | SyntaxKind.PrivateKeyword + | SyntaxKind.ProtectedKeyword + | SyntaxKind.PublicKeyword + | SyntaxKind.StaticKeyword + | SyntaxKind.YieldKeyword + | SyntaxKind.AbstractKeyword + | SyntaxKind.AccessorKeyword + | SyntaxKind.AsKeyword + | SyntaxKind.AssertsKeyword + | SyntaxKind.AssertKeyword + | SyntaxKind.AnyKeyword + | SyntaxKind.AsyncKeyword + | SyntaxKind.AwaitKeyword + | SyntaxKind.BooleanKeyword + | SyntaxKind.ConstructorKeyword + | SyntaxKind.DeclareKeyword + | SyntaxKind.GetKeyword + | SyntaxKind.ImmediateKeyword + | SyntaxKind.InferKeyword + | SyntaxKind.IntrinsicKeyword + | SyntaxKind.IsKeyword + | SyntaxKind.KeyOfKeyword + | SyntaxKind.ModuleKeyword + | SyntaxKind.NamespaceKeyword + | SyntaxKind.NeverKeyword + | SyntaxKind.OutKeyword + | SyntaxKind.ReadonlyKeyword + | SyntaxKind.RequireKeyword + | SyntaxKind.NumberKeyword + | SyntaxKind.ObjectKeyword + | SyntaxKind.SatisfiesKeyword + | SyntaxKind.SetKeyword + | SyntaxKind.StringKeyword + | SyntaxKind.SymbolKeyword + | SyntaxKind.TypeKeyword + | SyntaxKind.UndefinedKeyword + | SyntaxKind.UniqueKeyword + | SyntaxKind.UnknownKeyword + | SyntaxKind.UsingKeyword + | SyntaxKind.FromKeyword + | SyntaxKind.GlobalKeyword + | SyntaxKind.BigIntKeyword + | SyntaxKind.OverrideKeyword + | SyntaxKind.OfKeyword + | SyntaxKind.DeferKeyword + | SyntaxKind.SourceKeyword; +export type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFile | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken; +export type JSDocNodeSyntaxKind = + | SyntaxKind.JSDocTypeExpression + | SyntaxKind.JSDocNameReference + | SyntaxKind.JSDocAllType + | SyntaxKind.JSDocNullableType + | SyntaxKind.JSDocNonNullableType + | SyntaxKind.JSDocOptionalType + | SyntaxKind.JSDocVariadicType + | SyntaxKind.JSDoc + | SyntaxKind.JSDocText + | SyntaxKind.JSDocTypeLiteral + | SyntaxKind.JSDocSignature + | SyntaxKind.JSDocLink + | SyntaxKind.JSDocLinkCode + | SyntaxKind.JSDocLinkPlain + | SyntaxKind.JSDocUnknownTag + | SyntaxKind.JSDocAugmentsTag + | SyntaxKind.JSDocImplementsTag + | SyntaxKind.JSDocDeprecatedTag + | SyntaxKind.JSDocPublicTag + | SyntaxKind.JSDocPrivateTag + | SyntaxKind.JSDocProtectedTag + | SyntaxKind.JSDocReadonlyTag + | SyntaxKind.JSDocOverrideTag + | SyntaxKind.JSDocCallbackTag + | SyntaxKind.JSDocOverloadTag + | SyntaxKind.JSDocParameterTag + | SyntaxKind.JSDocReturnTag + | SyntaxKind.JSDocThisTag + | SyntaxKind.JSDocTypeTag + | SyntaxKind.JSDocTemplateTag + | SyntaxKind.JSDocTypedefTag + | SyntaxKind.JSDocSeeTag + | SyntaxKind.JSDocPropertyTag + | SyntaxKind.JSDocThrowsTag + | SyntaxKind.JSDocSatisfiesTag + | SyntaxKind.JSDocImportTag; +export type ImportPhaseModifierSyntaxKind = SyntaxKind.TypeKeyword | SyntaxKind.DeferKeyword | SyntaxKind.SourceKeyword; +export type PostfixUnaryOperator = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; +export type PrefixUnaryOperator = SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; +export type AssignmentOperator = SyntaxKind.EqualsToken | CompoundAssignmentOperator; +export type BinaryOperator = AssignmentOperatorOrHigher | SyntaxKind.CommaToken; +export type ExponentiationOperator = SyntaxKind.AsteriskAsteriskToken; +export type MultiplicativeOperator = SyntaxKind.AsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken; +export type MultiplicativeOperatorOrHigher = ExponentiationOperator | MultiplicativeOperator; +export type AdditiveOperator = SyntaxKind.PlusToken | SyntaxKind.MinusToken; +export type AdditiveOperatorOrHigher = MultiplicativeOperatorOrHigher | AdditiveOperator; +export type ShiftOperator = SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken; +export type ShiftOperatorOrHigher = AdditiveOperatorOrHigher | ShiftOperator; +export type RelationalOperator = SyntaxKind.LessThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.InstanceOfKeyword | SyntaxKind.InKeyword; +export type RelationalOperatorOrHigher = ShiftOperatorOrHigher | RelationalOperator; +export type EqualityOperator = SyntaxKind.EqualsEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.ExclamationEqualsToken; +export type EqualityOperatorOrHigher = RelationalOperatorOrHigher | EqualityOperator; +export type BitwiseOperator = SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken; +export type BitwiseOperatorOrHigher = EqualityOperatorOrHigher | BitwiseOperator; +export type LogicalOperator = SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken; +export type LogicalOperatorOrHigher = BitwiseOperatorOrHigher | LogicalOperator; +export type CompoundAssignmentOperator = SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.BarBarEqualsToken | SyntaxKind.AmpersandAmpersandEqualsToken | SyntaxKind.QuestionQuestionEqualsToken; +export type AssignmentOperatorOrHigher = SyntaxKind.QuestionQuestionToken | LogicalOperatorOrHigher | AssignmentOperator; +export type LogicalOrCoalescingAssignmentOperator = SyntaxKind.AmpersandAmpersandEqualsToken | SyntaxKind.BarBarEqualsToken | SyntaxKind.QuestionQuestionEqualsToken; + +export interface NodeBase extends Node { + readonly flags: NodeFlags; +} +export interface StatementBase extends NodeBase { + readonly _statementBrand: any; +} +export interface IterationStatementBase extends StatementBase { + readonly statement: Statement; +} +export interface ExpressionBase extends NodeBase { + readonly _expressionBrand: any; +} +export interface UnaryExpressionBase extends ExpressionBase { + readonly _unaryExpressionBrand: any; +} +export interface UpdateExpressionBase extends UnaryExpressionBase { + readonly _updateExpressionBrand: any; +} +export interface LeftHandSideExpressionBase extends UpdateExpressionBase { + readonly _leftHandSideExpressionBrand: any; +} +export interface MemberExpressionBase extends LeftHandSideExpressionBase { + readonly _memberExpressionBrand: any; +} +export interface PrimaryExpressionBase extends MemberExpressionBase { + readonly _primaryExpressionBrand: any; +} +export interface TypeNodeBase extends NodeBase { + readonly _typeNodeBrand: any; +} +export interface NodeWithTypeArgumentsBase extends TypeNodeBase { + readonly typeArguments?: NodeArray; +} +export interface JSDocTypeBase extends TypeNodeBase { + readonly _jsDocTypeBrand: any; +} +export interface DeclarationBase extends Node { + readonly _declarationBrand: any; +} +export interface ModifiersBase extends Node { + readonly modifiers?: NodeArray; + readonly modifierFlags: ModifierFlags; +} +export interface FunctionLikeBase extends Node { + readonly _declarationBrand: any; + readonly typeParameters?: NodeArray; + readonly parameters: NodeArray; + readonly type?: TypeNode; + readonly fullSignature?: TypeNode; +} +export interface BodyBase extends Node { + readonly asteriskToken?: AsteriskToken; + readonly body?: NodeBody; +} +export interface FunctionLikeWithBodyBase extends FunctionLikeBase, BodyBase { + readonly _functionLikeDeclarationBrand: any; + readonly body?: BlockOrExpression; +} +export interface ClassLikeBase extends ModifiersBase { + readonly _declarationBrand: any; + readonly name?: Identifier; + readonly typeParameters?: NodeArray; + readonly heritageClauses?: NodeArray; + readonly members: NodeArray; +} +export interface LiteralLikeNodeBase extends Node { + readonly text: string; + readonly tokenFlags: TokenFlags; +} +export interface LiteralExpressionBase extends PrimaryExpressionBase, LiteralLikeNodeBase { + readonly _literalExpressionBrand: any; +} +export interface TemplateLiteralLikeNodeBase extends LiteralLikeNodeBase { + readonly rawText: string; + readonly templateFlags: TokenFlags; +} +export interface TypeElementBase extends DeclarationBase { + readonly _typeElementBrand: any; +} +export interface ClassElementBase extends DeclarationBase { + readonly _classElementBrand: any; +} +export interface NamedMemberBase extends ModifiersBase { + readonly _declarationBrand: any; + readonly name: PropertyName; + readonly postfixToken?: QuestionToken | ExclamationToken; +} +export interface ObjectLiteralElementBase extends DeclarationBase { + readonly _objectLiteralBrand: any; +} +export interface UnionOrIntersectionTypeNodeBase extends TypeNodeBase { + readonly types: NodeArray; +} +export interface JSDocTagBase extends NodeBase { + readonly tagName: Identifier; + readonly comment?: NodeArray; +} +export interface JSDocCommentBase extends NodeBase { + readonly text: string; +} + +export interface Token extends NodeBase { + readonly kind: TKind; +} +export interface Identifier extends PrimaryExpressionBase { + readonly kind: SyntaxKind.Identifier; + readonly text: string; +} +export interface PrivateIdentifier extends PrimaryExpressionBase { + readonly kind: SyntaxKind.PrivateIdentifier; + readonly text: string; +} +export interface QualifiedName extends NodeBase { + readonly kind: SyntaxKind.QualifiedName; + readonly left: EntityName; + readonly right: MemberName; +} +export interface ComputedPropertyName extends NodeBase { + readonly kind: SyntaxKind.ComputedPropertyName; + readonly expression: Expression; +} +export interface Decorator extends NodeBase { + readonly kind: SyntaxKind.Decorator; + readonly expression: LeftHandSideExpression; +} +export interface EmptyStatement extends StatementBase { + readonly kind: SyntaxKind.EmptyStatement; +} +export interface IfStatement extends StatementBase { + readonly kind: SyntaxKind.IfStatement; + readonly expression: Expression; + readonly thenStatement: Statement; + readonly elseStatement?: Statement; +} +export interface DoStatement extends IterationStatementBase { + readonly kind: SyntaxKind.DoStatement; + readonly expression: Expression; +} +export interface WhileStatement extends IterationStatementBase { + readonly kind: SyntaxKind.WhileStatement; + readonly expression: Expression; +} +export interface ForStatement extends IterationStatementBase { + readonly kind: SyntaxKind.ForStatement; + readonly initializer?: ForInitializer; + readonly condition?: Expression; + readonly incrementor?: Expression; +} +export interface BreakStatement extends StatementBase { + readonly kind: SyntaxKind.BreakStatement; + readonly label?: Identifier; +} +export interface ContinueStatement extends StatementBase { + readonly kind: SyntaxKind.ContinueStatement; + readonly label?: Identifier; +} +export interface ReturnStatement extends StatementBase { + readonly kind: SyntaxKind.ReturnStatement; + readonly expression?: Expression; +} +export interface WithStatement extends StatementBase { + readonly kind: SyntaxKind.WithStatement; + readonly expression: Expression; + readonly statement: Statement; +} +export interface SwitchStatement extends StatementBase { + readonly kind: SyntaxKind.SwitchStatement; + readonly expression: Expression; + readonly caseBlock: CaseBlock; +} +export interface CaseBlock extends NodeBase { + readonly kind: SyntaxKind.CaseBlock; + readonly clauses: NodeArray; +} +export interface ThrowStatement extends StatementBase { + readonly kind: SyntaxKind.ThrowStatement; + readonly expression: Expression; +} +export interface TryStatement extends StatementBase { + readonly kind: SyntaxKind.TryStatement; + readonly tryBlock: Block; + readonly catchClause?: CatchClause; + readonly finallyBlock?: Block; +} +export interface CatchClause extends NodeBase { + readonly kind: SyntaxKind.CatchClause; + readonly variableDeclaration?: VariableDeclaration; + readonly block: Block; +} +export interface DebuggerStatement extends StatementBase { + readonly kind: SyntaxKind.DebuggerStatement; +} +export interface LabeledStatement extends StatementBase { + readonly kind: SyntaxKind.LabeledStatement; + readonly label: Identifier; + readonly statement: Statement; +} +export interface ExpressionStatement extends StatementBase { + readonly kind: SyntaxKind.ExpressionStatement; + readonly expression: Expression; +} +export interface Block extends StatementBase { + readonly kind: SyntaxKind.Block; + readonly statements: NodeArray; + readonly multiLine: boolean; +} +export interface VariableStatement extends StatementBase, ModifiersBase { + readonly kind: SyntaxKind.VariableStatement; + readonly declarationList: VariableDeclarationList; +} +export interface VariableDeclaration extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.VariableDeclaration; + readonly name: BindingName; + readonly exclamationToken?: ExclamationToken; + readonly type?: TypeNode; + readonly initializer?: Expression; +} +export interface VariableDeclarationList extends NodeBase { + readonly kind: SyntaxKind.VariableDeclarationList; + readonly declarations: NodeArray; +} +export interface ParameterDeclaration extends NodeBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.Parameter; + readonly dotDotDotToken?: DotDotDotToken; + readonly name: BindingName; + readonly questionToken?: QuestionToken; + readonly type?: TypeNode; + readonly initializer?: Expression; +} +export interface BindingElement extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.BindingElement; + readonly dotDotDotToken?: DotDotDotToken; + readonly propertyName?: PropertyName; + readonly name?: BindingName; + readonly initializer?: Expression; +} +export interface MissingDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.MissingDeclaration; +} +export interface FunctionDeclaration extends StatementBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { + readonly kind: SyntaxKind.FunctionDeclaration; + readonly name?: Identifier; + readonly body?: FunctionBody; +} +export interface ClassDeclaration extends StatementBase, DeclarationBase, ClassLikeBase { + readonly kind: SyntaxKind.ClassDeclaration; +} +export interface ClassExpression extends PrimaryExpressionBase, DeclarationBase, ClassLikeBase { + readonly kind: SyntaxKind.ClassExpression; +} +export interface HeritageClause extends NodeBase { + readonly kind: SyntaxKind.HeritageClause; + readonly token: SyntaxKind.ExtendsKeyword | SyntaxKind.ImplementsKeyword; + readonly types: NodeArray; +} +export interface InterfaceDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.InterfaceDeclaration; + readonly name: Identifier; + readonly typeParameters?: NodeArray; + readonly heritageClauses?: NodeArray; + readonly members: NodeArray; +} +export interface TypeAliasDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.TypeAliasDeclaration; + readonly name: Identifier; + readonly typeParameters?: NodeArray; + readonly type: TypeNode; +} +export interface EnumMember extends NodeBase, DeclarationBase, NamedMemberBase { + readonly kind: SyntaxKind.EnumMember; + readonly initializer?: Expression; +} +export interface EnumDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.EnumDeclaration; + readonly name: Identifier; + readonly members: NodeArray; +} +export interface ModuleBlock extends StatementBase { + readonly kind: SyntaxKind.ModuleBlock; + readonly statements: NodeArray; +} +export interface NotEmittedStatement extends StatementBase { + readonly kind: SyntaxKind.NotEmittedStatement; +} +export interface NotEmittedTypeElement extends NodeBase, TypeElementBase { + readonly kind: SyntaxKind.NotEmittedTypeElement; +} +export interface ImportDeclaration extends StatementBase, ModifiersBase, DeclarationBase { + readonly kind: SyntaxKind.ImportDeclaration; + readonly importClause?: ImportClause; + readonly moduleSpecifier: Expression; + readonly attributes?: ImportAttributes; +} +export interface ExternalModuleReference extends NodeBase { + readonly kind: SyntaxKind.ExternalModuleReference; + readonly expression: Expression; +} +export interface NamespaceImport extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.NamespaceImport; + readonly name: Identifier; +} +export interface NamedImports extends NodeBase { + readonly kind: SyntaxKind.NamedImports; + readonly elements: NodeArray; +} +export interface ExportAssignment extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.ExportAssignment; + readonly isExportEquals: boolean; + readonly type: TypeNode; + readonly expression: Expression; +} +export interface NamespaceExportDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.NamespaceExportDeclaration; + readonly name: Identifier; +} +export interface NamespaceExport extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.NamespaceExport; + readonly name: ModuleExportName; +} +export interface NamedExports extends NodeBase { + readonly kind: SyntaxKind.NamedExports; + readonly elements: NodeArray; +} +export interface ExportSpecifier extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.ExportSpecifier; + readonly isTypeOnly: boolean; + readonly propertyName?: ModuleExportName; + readonly name: ModuleExportName; +} +export interface CallSignatureDeclaration extends NodeBase, DeclarationBase, FunctionLikeBase, TypeElementBase { + readonly kind: SyntaxKind.CallSignature; +} +export interface ConstructSignatureDeclaration extends NodeBase, DeclarationBase, FunctionLikeBase, TypeElementBase { + readonly kind: SyntaxKind.ConstructSignature; +} +export interface ConstructorDeclaration extends NodeBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase, ClassElementBase { + readonly kind: SyntaxKind.Constructor; + readonly body?: FunctionBody; +} +export interface GetAccessorDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, TypeElementBase, ClassElementBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.GetAccessor; + readonly body?: FunctionBody; +} +export interface SetAccessorDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, TypeElementBase, ClassElementBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.SetAccessor; + readonly body?: FunctionBody; +} +export interface IndexSignatureDeclaration extends NodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase, TypeElementBase, ClassElementBase { + readonly kind: SyntaxKind.IndexSignature; + readonly type: TypeNode; +} +export interface MethodSignatureDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeBase, TypeElementBase { + readonly kind: SyntaxKind.MethodSignature; +} +export interface MethodDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, FunctionLikeWithBodyBase, ClassElementBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.MethodDeclaration; + readonly body?: FunctionBody; +} +export interface PropertySignatureDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, TypeElementBase { + readonly kind: SyntaxKind.PropertySignature; + readonly type: TypeNode; + readonly initializer: Expression; +} +export interface PropertyDeclaration extends NodeBase, DeclarationBase, NamedMemberBase, ClassElementBase { + readonly kind: SyntaxKind.PropertyDeclaration; + readonly type?: TypeNode; + readonly initializer?: Expression; +} +export interface SemicolonClassElement extends NodeBase, DeclarationBase, ClassElementBase { + readonly kind: SyntaxKind.SemicolonClassElement; +} +export interface ClassStaticBlockDeclaration extends NodeBase, DeclarationBase, ModifiersBase, ClassElementBase { + readonly kind: SyntaxKind.ClassStaticBlockDeclaration; + readonly body: Block; +} +export interface OmittedExpression extends ExpressionBase { + readonly kind: SyntaxKind.OmittedExpression; +} +export interface KeywordExpression extends ExpressionBase { + readonly kind: TKind; +} +export interface StringLiteral extends LiteralExpressionBase { + readonly kind: SyntaxKind.StringLiteral; +} +export interface NumericLiteral extends LiteralExpressionBase { + readonly kind: SyntaxKind.NumericLiteral; +} +export interface BigIntLiteral extends LiteralExpressionBase { + readonly kind: SyntaxKind.BigIntLiteral; +} +export interface RegularExpressionLiteral extends LiteralExpressionBase { + readonly kind: SyntaxKind.RegularExpressionLiteral; +} +export interface NoSubstitutionTemplateLiteral extends ExpressionBase, TemplateLiteralLikeNodeBase, DeclarationBase { + readonly kind: SyntaxKind.NoSubstitutionTemplateLiteral; +} +export interface BinaryExpression extends ExpressionBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.BinaryExpression; + readonly left: Expression; + readonly type?: TypeNode; + readonly operatorToken: BinaryOperatorToken; + readonly right: Expression; +} +export interface PrefixUnaryExpression extends UpdateExpressionBase { + readonly kind: SyntaxKind.PrefixUnaryExpression; + readonly operator: SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; + readonly operand: Expression; +} +export interface PostfixUnaryExpression extends UpdateExpressionBase { + readonly kind: SyntaxKind.PostfixUnaryExpression; + readonly operand: Expression; + readonly operator: SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken; +} +export interface YieldExpression extends ExpressionBase { + readonly kind: SyntaxKind.YieldExpression; + readonly asteriskToken?: AsteriskToken; + readonly expression?: Expression; +} +export interface ArrowFunction extends ExpressionBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { + readonly kind: SyntaxKind.ArrowFunction; + readonly equalsGreaterThanToken: EqualsGreaterThanToken; + readonly body: ConciseBody; +} +export interface FunctionExpression extends PrimaryExpressionBase, DeclarationBase, ModifiersBase, FunctionLikeWithBodyBase { + readonly kind: SyntaxKind.FunctionExpression; + readonly name?: Identifier; + readonly body: FunctionBody; +} +export interface AsExpression extends ExpressionBase { + readonly kind: SyntaxKind.AsExpression; + readonly expression: Expression; + readonly type: TypeNode; +} +export interface SatisfiesExpression extends ExpressionBase { + readonly kind: SyntaxKind.SatisfiesExpression; + readonly expression: Expression; + readonly type: TypeNode; +} +export interface ConditionalExpression extends ExpressionBase { + readonly kind: SyntaxKind.ConditionalExpression; + readonly condition: Expression; + readonly questionToken: QuestionToken; + readonly whenTrue: Expression; + readonly colonToken: ColonToken; + readonly whenFalse: Expression; +} +export interface PropertyAccessExpression extends MemberExpressionBase { + readonly kind: SyntaxKind.PropertyAccessExpression; + readonly expression: Expression; + readonly questionDotToken?: QuestionDotToken; + readonly name: MemberName; +} +export interface ElementAccessExpression extends MemberExpressionBase { + readonly kind: SyntaxKind.ElementAccessExpression; + readonly expression: Expression; + readonly questionDotToken?: QuestionDotToken; + readonly argumentExpression: Expression; +} +export interface CallExpression extends LeftHandSideExpressionBase, DeclarationBase { + readonly kind: SyntaxKind.CallExpression; + readonly expression: Expression; + readonly questionDotToken?: QuestionDotToken; + readonly typeArguments?: NodeArray; + readonly arguments: NodeArray; +} +export interface NewExpression extends PrimaryExpressionBase { + readonly kind: SyntaxKind.NewExpression; + readonly expression: Expression; + readonly typeArguments?: NodeArray; + readonly arguments?: NodeArray; +} +export interface MetaProperty extends PrimaryExpressionBase { + readonly kind: SyntaxKind.MetaProperty; + readonly keywordToken: SyntaxKind.ImportKeyword | SyntaxKind.NewKeyword; + readonly name: Identifier; +} +export interface NonNullExpression extends LeftHandSideExpressionBase { + readonly kind: SyntaxKind.NonNullExpression; + readonly expression: Expression; +} +export interface SpreadElement extends ExpressionBase { + readonly kind: SyntaxKind.SpreadElement; + readonly expression: Expression; +} +export interface TemplateExpression extends PrimaryExpressionBase { + readonly kind: SyntaxKind.TemplateExpression; + readonly head: TemplateHead; + readonly templateSpans: NodeArray; +} +export interface TemplateSpan extends NodeBase { + readonly kind: SyntaxKind.TemplateSpan; + readonly expression: Expression; + readonly literal: TemplateMiddleOrTail; +} +export interface TaggedTemplateExpression extends MemberExpressionBase { + readonly kind: SyntaxKind.TaggedTemplateExpression; + readonly tag: Expression; + readonly questionDotToken: QuestionDotToken; + readonly typeArguments?: NodeArray; + readonly template: TemplateLiteral; +} +export interface ParenthesizedExpression extends PrimaryExpressionBase { + readonly kind: SyntaxKind.ParenthesizedExpression; + readonly expression: Expression; +} +export interface ArrayLiteralExpression extends PrimaryExpressionBase { + readonly kind: SyntaxKind.ArrayLiteralExpression; + readonly elements: NodeArray; + readonly multiLine: boolean; +} +export interface ObjectLiteralExpression extends PrimaryExpressionBase, DeclarationBase { + readonly kind: SyntaxKind.ObjectLiteralExpression; + readonly properties: NodeArray; + readonly multiLine: boolean; +} +export interface SpreadAssignment extends NodeBase, DeclarationBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.SpreadAssignment; + readonly expression: Expression; +} +export interface PropertyAssignment extends NodeBase, DeclarationBase, NamedMemberBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.PropertyAssignment; + readonly type: TypeNode; + readonly initializer: Expression; +} +export interface ShorthandPropertyAssignment extends NodeBase, DeclarationBase, NamedMemberBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.ShorthandPropertyAssignment; + readonly type: TypeNode; + readonly equalsToken?: EqualsToken; + readonly objectAssignmentInitializer?: Expression; +} +export interface DeleteExpression extends UnaryExpressionBase { + readonly kind: SyntaxKind.DeleteExpression; + readonly expression: Expression; +} +export interface TypeOfExpression extends UnaryExpressionBase { + readonly kind: SyntaxKind.TypeOfExpression; + readonly expression: Expression; +} +export interface VoidExpression extends UnaryExpressionBase { + readonly kind: SyntaxKind.VoidExpression; + readonly expression: Expression; +} +export interface AwaitExpression extends UnaryExpressionBase { + readonly kind: SyntaxKind.AwaitExpression; + readonly expression: Expression; +} +export interface TypeAssertion extends UnaryExpressionBase { + readonly kind: SyntaxKind.TypeAssertionExpression; + readonly type: TypeNode; + readonly expression: Expression; +} +export interface KeywordTypeNode extends TypeNodeBase { + readonly kind: TKind; +} +export interface UnionTypeNode extends UnionOrIntersectionTypeNodeBase { + readonly kind: SyntaxKind.UnionType; +} +export interface IntersectionTypeNode extends UnionOrIntersectionTypeNodeBase { + readonly kind: SyntaxKind.IntersectionType; +} +export interface ConditionalTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.ConditionalType; + readonly checkType: TypeNode; + readonly extendsType: TypeNode; + readonly trueType: TypeNode; + readonly falseType: TypeNode; +} +export interface TypeOperatorNode extends TypeNodeBase { + readonly kind: SyntaxKind.TypeOperator; + readonly operator: SyntaxKind.KeyOfKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.UniqueKeyword; + readonly type: TypeNode; +} +export interface InferTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.InferType; + readonly typeParameter: TypeParameterDeclaration; +} +export interface ArrayTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.ArrayType; + readonly elementType: TypeNode; +} +export interface IndexedAccessTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.IndexedAccessType; + readonly objectType: TypeNode; + readonly indexType: TypeNode; +} +export interface TypeReferenceNode extends NodeWithTypeArgumentsBase { + readonly kind: SyntaxKind.TypeReference; + readonly typeName: EntityName; +} +export interface ExpressionWithTypeArguments extends MemberExpressionBase { + readonly kind: SyntaxKind.ExpressionWithTypeArguments; + readonly expression: Expression; + readonly typeArguments?: NodeArray; +} +export interface LiteralTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.LiteralType; + readonly literal: Node; +} +export interface ThisTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.ThisType; +} +export interface TypePredicateNode extends TypeNodeBase { + readonly kind: SyntaxKind.TypePredicate; + readonly assertsModifier?: AssertsKeyword; + readonly parameterName: TypePredicateParameterName; + readonly type?: TypeNode; +} +export interface ImportAttribute extends NodeBase { + readonly kind: SyntaxKind.ImportAttribute; + readonly name: ImportAttributeName; + readonly value: Expression; +} +export interface ImportAttributes extends NodeBase { + readonly kind: SyntaxKind.ImportAttributes; + readonly token: SyntaxKind.WithKeyword | SyntaxKind.AssertKeyword; + readonly attributes: NodeArray; + readonly multiLine: boolean; +} +export interface TypeQueryNode extends NodeWithTypeArgumentsBase { + readonly kind: SyntaxKind.TypeQuery; + readonly exprName: EntityName; +} +export interface MappedTypeNode extends TypeNodeBase, DeclarationBase { + readonly kind: SyntaxKind.MappedType; + readonly readonlyToken?: ReadonlyKeyword | PlusToken | MinusToken; + readonly typeParameter: TypeParameterDeclaration; + readonly nameType?: TypeNode; + readonly questionToken?: QuestionToken | PlusToken | MinusToken; + readonly type?: TypeNode; + readonly members?: NodeArray; +} +export interface TypeLiteralNode extends TypeNodeBase, DeclarationBase { + readonly kind: SyntaxKind.TypeLiteral; + readonly members: NodeArray; +} +export interface TupleTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.TupleType; + readonly elements: NodeArray; +} +export interface NamedTupleMember extends TypeNodeBase, DeclarationBase { + readonly kind: SyntaxKind.NamedTupleMember; + readonly dotDotDotToken?: DotDotDotToken; + readonly name: Identifier; + readonly questionToken?: QuestionToken; + readonly type: TypeNode; +} +export interface OptionalTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.OptionalType; + readonly type: TypeNode; +} +export interface RestTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.RestType; + readonly type: TypeNode; +} +export interface ParenthesizedTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.ParenthesizedType; + readonly type: TypeNode; +} +export interface FunctionTypeNode extends TypeNodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase { + readonly kind: SyntaxKind.FunctionType; +} +export interface ConstructorTypeNode extends TypeNodeBase, DeclarationBase, ModifiersBase, FunctionLikeBase { + readonly kind: SyntaxKind.ConstructorType; +} +export interface TemplateHead extends NodeBase, TemplateLiteralLikeNodeBase { + readonly kind: SyntaxKind.TemplateHead; +} +export interface TemplateMiddle extends NodeBase, TemplateLiteralLikeNodeBase { + readonly kind: SyntaxKind.TemplateMiddle; +} +export interface TemplateTail extends NodeBase, TemplateLiteralLikeNodeBase { + readonly kind: SyntaxKind.TemplateTail; +} +export interface TemplateLiteralTypeNode extends TypeNodeBase { + readonly kind: SyntaxKind.TemplateLiteralType; + readonly head: TemplateHead; + readonly templateSpans: NodeArray; +} +export interface TemplateLiteralTypeSpan extends TypeNodeBase { + readonly kind: SyntaxKind.TemplateLiteralTypeSpan; + readonly type: TypeNode; + readonly literal: TemplateMiddleOrTail; +} +export interface SyntheticExpression extends ExpressionBase { + readonly kind: SyntaxKind.SyntheticExpression; + readonly type: any; + readonly isSpread: boolean; + readonly tupleNameSource?: Node; +} +export interface PartiallyEmittedExpression extends LeftHandSideExpressionBase { + readonly kind: SyntaxKind.PartiallyEmittedExpression; + readonly expression: Expression; +} +export interface JsxElement extends PrimaryExpressionBase { + readonly kind: SyntaxKind.JsxElement; + readonly openingElement: JsxOpeningElement; + readonly children: NodeArray; + readonly closingElement: JsxClosingElement; +} +export interface JsxAttributes extends PrimaryExpressionBase, DeclarationBase { + readonly kind: SyntaxKind.JsxAttributes; + readonly properties: NodeArray; +} +export interface JsxNamespacedName extends ExpressionBase { + readonly kind: SyntaxKind.JsxNamespacedName; + readonly namespace: Identifier; + readonly name: Identifier; +} +export interface JsxOpeningElement extends ExpressionBase { + readonly kind: SyntaxKind.JsxOpeningElement; + readonly tagName: JsxTagNameExpression; + readonly typeArguments?: NodeArray; + readonly attributes: JsxAttributes; +} +export interface JsxSelfClosingElement extends PrimaryExpressionBase { + readonly kind: SyntaxKind.JsxSelfClosingElement; + readonly tagName: JsxTagNameExpression; + readonly typeArguments?: NodeArray; + readonly attributes: JsxAttributes; +} +export interface JsxFragment extends PrimaryExpressionBase { + readonly kind: SyntaxKind.JsxFragment; + readonly openingFragment: JsxOpeningFragment; + readonly children: NodeArray; + readonly closingFragment: JsxClosingFragment; +} +export interface JsxOpeningFragment extends ExpressionBase { + readonly kind: SyntaxKind.JsxOpeningFragment; +} +export interface JsxClosingFragment extends ExpressionBase { + readonly kind: SyntaxKind.JsxClosingFragment; +} +export interface JsxAttribute extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.JsxAttribute; + readonly name: JsxAttributeName; + readonly initializer?: JsxAttributeValue; +} +export interface JsxSpreadAttribute extends NodeBase, ObjectLiteralElementBase { + readonly kind: SyntaxKind.JsxSpreadAttribute; + readonly expression: Expression; +} +export interface JsxClosingElement extends NodeBase { + readonly kind: SyntaxKind.JsxClosingElement; + readonly tagName: JsxTagNameExpression; +} +export interface JsxExpression extends ExpressionBase { + readonly kind: SyntaxKind.JsxExpression; + readonly dotDotDotToken?: DotDotDotToken; + readonly expression?: Expression; +} +export interface JsxText extends ExpressionBase, LiteralLikeNodeBase { + readonly kind: SyntaxKind.JsxText; + readonly containsOnlyTriviaWhiteSpaces: boolean; +} +export interface SyntaxList extends NodeBase { + readonly kind: SyntaxKind.SyntaxList; + readonly children: readonly Node[]; +} +export interface JSDoc extends NodeBase { + readonly kind: SyntaxKind.JSDoc; + readonly comment: NodeArray; + readonly tags?: NodeArray; +} +export interface JSDocTypeExpression extends TypeNodeBase { + readonly kind: SyntaxKind.JSDocTypeExpression; + readonly type: TypeNode; +} +export interface JSDocNonNullableType extends JSDocTypeBase { + readonly kind: SyntaxKind.JSDocNonNullableType; + readonly type: TypeNode; +} +export interface JSDocNullableType extends JSDocTypeBase { + readonly kind: SyntaxKind.JSDocNullableType; + readonly type: TypeNode; +} +export interface JSDocAllType extends JSDocTypeBase { + readonly kind: SyntaxKind.JSDocAllType; +} +export interface JSDocVariadicType extends JSDocTypeBase { + readonly kind: SyntaxKind.JSDocVariadicType; + readonly type: TypeNode; +} +export interface JSDocOptionalType extends JSDocTypeBase { + readonly kind: SyntaxKind.JSDocOptionalType; + readonly type: TypeNode; +} +export interface JSDocTypeTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocTypeTag; + readonly typeExpression: Node; +} +export interface JSDocUnknownTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocUnknownTag; +} +export interface JSDocTemplateTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocTemplateTag; + readonly constraint: Node; + readonly typeParameters: NodeArray; +} +export interface JSDocReturnTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocReturnTag; + readonly typeExpression?: TypeNode; +} +export interface JSDocPublicTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocPublicTag; +} +export interface JSDocPrivateTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocPrivateTag; +} +export interface JSDocProtectedTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocProtectedTag; +} +export interface JSDocReadonlyTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocReadonlyTag; +} +export interface JSDocOverrideTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocOverrideTag; +} +export interface JSDocDeprecatedTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocDeprecatedTag; +} +export interface JSDocSeeTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocSeeTag; + readonly nameExpression: TypeNode; +} +export interface JSDocImplementsTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocImplementsTag; + readonly className: ExpressionWithTypeArguments; +} +export interface JSDocAugmentsTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocAugmentsTag; + readonly className: ExpressionWithTypeArguments; +} +export interface JSDocSatisfiesTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocSatisfiesTag; + readonly typeExpression: TypeNode; +} +export interface JSDocThrowsTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocThrowsTag; + readonly typeExpression?: TypeNode; +} +export interface JSDocThisTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocThisTag; + readonly typeExpression: TypeNode; +} +export interface JSDocImportTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocImportTag; + readonly importClause?: ImportClause; + readonly moduleSpecifier: Expression; + readonly attributes?: ImportAttributes; +} +export interface JSDocCallbackTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocCallbackTag; + readonly typeExpression: TypeNode; + readonly name?: JSDocFullName; +} +export interface JSDocOverloadTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocOverloadTag; + readonly typeExpression: TypeNode; +} +export interface JSDocTypedefTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocTypedefTag; + readonly typeExpression?: Node; + readonly name?: JSDocFullName; +} +export interface JSDocSignature extends JSDocTypeBase, DeclarationBase, FunctionLikeBase { + readonly kind: SyntaxKind.JSDocSignature; +} +export interface JSDocNameReference extends TypeNodeBase { + readonly kind: SyntaxKind.JSDocNameReference; + readonly name: EntityName; +} +export interface ModuleDeclaration extends StatementBase, DeclarationBase, ModifiersBase, BodyBase { + readonly kind: SyntaxKind.ModuleDeclaration; + readonly keyword: SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword; + readonly name: ModuleName; + readonly attributes?: TypeLiteralNode; + readonly body?: ModuleBody; +} +export interface ImportEqualsDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.ImportEqualsDeclaration; + readonly isTypeOnly: boolean; + readonly name: Identifier; + readonly moduleReference: ModuleReference; +} +export interface ExportDeclaration extends StatementBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.ExportDeclaration; + readonly isTypeOnly: boolean; + readonly exportClause?: NamedExportBindings; + readonly moduleSpecifier?: Expression; + readonly attributes?: ImportAttributes; +} +export interface ImportTypeNode extends NodeWithTypeArgumentsBase { + readonly kind: SyntaxKind.ImportType; + readonly isTypeOf: boolean; + readonly argument: TypeNode; + readonly attributes?: ImportAttributes; + readonly qualifier?: EntityName; +} +export interface ImportClause extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.ImportClause; + readonly phaseModifier?: ImportPhaseModifierSyntaxKind; + readonly name?: Identifier; + readonly namedBindings?: NamedImportBindings; +} +export interface ImportSpecifier extends NodeBase, DeclarationBase { + readonly kind: SyntaxKind.ImportSpecifier; + readonly isTypeOnly: boolean; + readonly propertyName?: ModuleExportName; + readonly name: Identifier; +} +export interface JSDocText extends JSDocCommentBase { + readonly kind: SyntaxKind.JSDocText; +} +export interface JSDocLink extends JSDocCommentBase { + readonly kind: SyntaxKind.JSDocLink; + readonly name?: EntityName; +} +export interface JSDocLinkPlain extends JSDocCommentBase { + readonly kind: SyntaxKind.JSDocLinkPlain; + readonly name?: EntityName; +} +export interface JSDocLinkCode extends JSDocCommentBase { + readonly kind: SyntaxKind.JSDocLinkCode; + readonly name?: EntityName; +} +export interface TypeParameterDeclaration extends NodeBase, DeclarationBase, ModifiersBase { + readonly kind: SyntaxKind.TypeParameter; + readonly name: Identifier; + readonly constraint?: TypeNode; + readonly expression?: Expression; + readonly defaultType?: TypeNode; +} +export interface SyntheticReferenceExpression extends ExpressionBase { + readonly kind: SyntaxKind.SyntheticReferenceExpression; + readonly expression: Expression; + readonly thisArg: Expression; +} +export interface JSDocTypeLiteral extends JSDocTypeBase, DeclarationBase { + readonly kind: SyntaxKind.JSDocTypeLiteral; + readonly jsdocPropertyTags?: readonly JSDocTag[]; + readonly isArrayType: boolean; +} + +export type Expression = ExpressionBase; +export type Statement = StatementBase; +export type TypeNode = TypeNodeBase; +export type HeritageClauseElement = ExpressionWithTypeArguments | TypeReferenceNode; +export type BlockOrExpression = Block | Expression; +export type NodeBody = Block | Expression | ModuleBlock | ModuleDeclaration; +export type AccessExpression = PropertyAccessExpression | ElementAccessExpression; +export type DeclarationName = Identifier | PrivateIdentifier | StringLiteral | NumericLiteral | BigIntLiteral | NoSubstitutionTemplateLiteral | ComputedPropertyName | BindingPattern | PropertyAccessExpression | ElementAccessExpression; +export type ModuleName = Identifier | StringLiteral; +export type ModuleExportName = Identifier | StringLiteral; +export type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier | BigIntLiteral; +export type ModuleBody = ModuleBlock | ModuleDeclaration; +export type JSDocFullName = Identifier | ModuleDeclaration; +export type ForInitializer = Expression | MissingDeclaration | VariableDeclarationList; +export type ModuleReference = Identifier | QualifiedName | ExternalModuleReference; +export type NamedImportBindings = NamespaceImport | NamedImports; +export type NamedExportBindings = NamespaceExport | NamedExports; +export type MemberName = Identifier | PrivateIdentifier; +export type EntityName = Identifier | QualifiedName; +export type BindingName = Identifier | BindingPattern; +export type ModifierLike = Modifier | Decorator; +export type JsxChild = JsxText | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; +export type JsxAttributeLike = JsxAttribute | JsxSpreadAttribute; +export type JsxAttributeName = Identifier | JsxNamespacedName; +export type JsxAttributeValue = StringLiteral | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment; +export type JsxTagNameExpression = Identifier | ThisExpression | JsxTagNamePropertyAccess | JsxNamespacedName; +export type ClassLikeDeclaration = ClassDeclaration | ClassExpression; +export type AccessorDeclaration = GetAccessorDeclaration | SetAccessorDeclaration; +export type LiteralLikeNode = StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | TemplateLiteralLikeNode | JsxText; +export type LiteralExpression = StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | NoSubstitutionTemplateLiteral; +export type UnionOrIntersectionTypeNode = UnionTypeNode | IntersectionTypeNode; +export type TemplateLiteralLikeNode = TemplateHead | TemplateMiddle | TemplateTail; +export type TemplateMiddleOrTail = TemplateMiddle | TemplateTail; +export type TemplateLiteral = TemplateExpression | NoSubstitutionTemplateLiteral; +export type TypePredicateParameterName = Identifier | ThisTypeNode; +export type ImportAttributeName = Identifier | StringLiteral; +export type LeftHandSideExpression = LeftHandSideExpressionBase; +export type JSDocComment = JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain; +export type SignatureDeclaration = CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignatureDeclaration | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | FunctionDeclaration | MethodDeclaration | ConstructorDeclaration | AccessorDeclaration | FunctionExpression | ArrowFunction; +export type StringLiteralLikeNode = StringLiteral | NoSubstitutionTemplateLiteral; +export type NumericOrStringLikeLiteral = StringLiteralLikeNode | NumericLiteral; +export type ObjectLiteralLikeNode = ObjectLiteralExpression | ObjectBindingPattern; +export type ObjectTypeDeclaration = ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode; +export type JsxOpeningLikeElement = JsxOpeningElement | JsxSelfClosingElement; +export type NamedImportsOrExports = NamedImports | NamedExports; +export type BreakOrContinueStatement = BreakStatement | ContinueStatement; +export type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator | JsxOpeningLikeElement | BinaryExpression; +export type FunctionLikeDeclaration = FunctionDeclaration | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | ConstructorDeclaration | FunctionExpression | ArrowFunction; +export type VariableOrParameterDeclaration = VariableDeclaration | ParameterDeclaration; +export type VariableOrPropertyDeclaration = VariableDeclaration | PropertyDeclaration; +export type CallOrNewExpression = CallExpression | NewExpression; +export type ImportClauseOrBindingPattern = ImportClause | BindingPattern; +export type AnyImportSyntax = ImportDeclaration | ImportEqualsDeclaration; +export type Declaration = DeclarationBase; +export type ClassElement = ClassElementBase; +export type TypeElement = TypeElementBase; +export type ObjectLiteralElement = ObjectLiteralElementBase; +export type JSDocTag = JSDocTagBase; +export type ArrayBindingElement = BindingElement | OmittedExpression; +export type AssertionExpression = TypeAssertion | AsExpression; +export type BooleanLiteral = TrueLiteral | FalseLiteral; +export type ConciseBody = Block | Expression; +export type DestructuringAssignment = ObjectDestructuringAssignment | ArrayDestructuringAssignment; +export type LiteralToken = NumericLiteral | BigIntLiteral | StringLiteral | JsxText | RegularExpressionLiteral | NoSubstitutionTemplateLiteral; +export type Modifier = AbstractKeyword | AccessorKeyword | AsyncKeyword | ConstKeyword | DeclareKeyword | DefaultKeyword | ExportKeyword | InKeyword | PrivateKeyword | ProtectedKeyword | PublicKeyword | ReadonlyKeyword | OutKeyword | OverrideKeyword | StaticKeyword; +export type ObjectLiteralElementLike = PropertyAssignment | ShorthandPropertyAssignment | SpreadAssignment | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration; +export type PropertyNameLiteral = Identifier | StringLiteral | NumericLiteral; +export type PseudoLiteralToken = TemplateHead | TemplateMiddle | TemplateTail; +export type TemplateLiteralToken = NoSubstitutionTemplateLiteral | PseudoLiteralToken; +export type ArrayDestructuringAssignment = BinaryExpression; +export type ObjectDestructuringAssignment = BinaryExpression; +export type FunctionBody = Block; +export type IncrementExpression = UpdateExpressionBase; + +export interface ForInStatement extends StatementBase { + readonly kind: SyntaxKind.ForInStatement; + readonly awaitModifier?: AwaitKeyword; + readonly initializer: ForInitializer; + readonly expression: Expression; + readonly statement: Statement; +} +export interface ForOfStatement extends StatementBase { + readonly kind: SyntaxKind.ForOfStatement; + readonly awaitModifier?: AwaitKeyword; + readonly initializer: ForInitializer; + readonly expression: Expression; + readonly statement: Statement; +} +export interface CaseClause extends NodeBase { + readonly kind: SyntaxKind.CaseClause; + readonly expression: Expression; + readonly statements: NodeArray; +} +export interface DefaultClause extends NodeBase { + readonly kind: SyntaxKind.DefaultClause; + readonly expression: Expression; + readonly statements: NodeArray; +} +export interface ObjectBindingPattern extends NodeBase { + readonly kind: SyntaxKind.ObjectBindingPattern; + readonly elements: NodeArray; +} +export interface ArrayBindingPattern extends NodeBase { + readonly kind: SyntaxKind.ArrayBindingPattern; + readonly elements: NodeArray; +} +export interface JSDocParameterTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocParameterTag; + readonly name: EntityName; + readonly isBracketed: boolean; + readonly typeExpression?: TypeNode; + readonly isNameFirst: boolean; +} +export interface JSDocPropertyTag extends JSDocTagBase { + readonly kind: SyntaxKind.JSDocPropertyTag; + readonly name: EntityName; + readonly isBracketed: boolean; + readonly typeExpression?: TypeNode; + readonly isNameFirst: boolean; +} +export type ForInOrOfStatement = ForInStatement | ForOfStatement; +export type CaseOrDefaultClause = CaseClause | DefaultClause; +export type BindingPattern = ObjectBindingPattern | ArrayBindingPattern; +export type JSDocParameterOrPropertyTag = JSDocParameterTag | JSDocPropertyTag; +export type EndOfFile = Token; +export type DotToken = Token; +export type DotDotDotToken = Token; +export type QuestionToken = Token; +export type ExclamationToken = Token; +export type ColonToken = Token; +export type EqualsToken = Token; +export type AsteriskToken = Token; +export type EqualsGreaterThanToken = Token; +export type PlusToken = Token; +export type MinusToken = Token; +export type QuestionDotToken = Token; +export type AssertsKeyword = Token; +export type AssertKeyword = Token; +export type AwaitKeyword = Token; +export type CaseKeyword = Token; +export type AbstractKeyword = Token; +export type AccessorKeyword = Token; +export type AsyncKeyword = Token; +export type ConstKeyword = Token; +export type DeclareKeyword = Token; +export type DefaultKeyword = Token; +export type ExportKeyword = Token; +export type InKeyword = Token; +export type PrivateKeyword = Token; +export type ProtectedKeyword = Token; +export type PublicKeyword = Token; +export type ReadonlyKeyword = Token; +export type OutKeyword = Token; +export type OverrideKeyword = Token; +export type StaticKeyword = Token; +export type BinaryOperatorToken = Token; +export type AssignmentOperatorToken = Token; +export type NullLiteral = KeywordExpression; +export type TrueLiteral = KeywordExpression; +export type FalseLiteral = KeywordExpression; +export type ThisExpression = KeywordExpression; +export type SuperExpression = KeywordExpression; +export type ImportExpression = KeywordExpression; +export type StatementList = NodeArray; +export type CaseClausesList = NodeArray; +export type VariableDeclarationNodeList = NodeArray; +export type BindingElementList = NodeArray; +export type TypeParameterList = NodeArray; +export type ParameterList = NodeArray; +export type HeritageClauseList = NodeArray; +export type ClassElementList = NodeArray; +export type TypeElementList = NodeArray; +export type ExpressionWithTypeArgumentsList = NodeArray; +export type HeritageClauseElementList = NodeArray; +export type EnumMemberList = NodeArray; +export type ImportSpecifierList = NodeArray; +export type ExportSpecifierList = NodeArray; +export type TypeArgumentList = NodeArray; +export type ArgumentList = NodeArray; +export type TemplateSpanList = NodeArray; +export type ElementList = NodeArray; +export type PropertyDefinitionList = NodeArray; +export type TypeList = NodeArray; +export type ImportAttributeList = NodeArray; +export type TemplateLiteralTypeSpanList = NodeArray; +export type JsxChildList = NodeArray; +export type JsxAttributeList = NodeArray; diff --git a/packages/typescript/src/ast/ast.ts b/packages/typescript/src/ast/ast.ts index 058a67de9165a..82ce3a6f786ca 100644 --- a/packages/typescript/src/ast/ast.ts +++ b/packages/typescript/src/ast/ast.ts @@ -1,280 +1,280 @@ -// ast.ts — Hand-written AST type definitions -// Generated types are in ast.generated.ts - -import type { DiagnosticDirectivePolicy } from "#enums/diagnosticDirectivePolicy"; -import type { InternalSymbolName } from "#enums/internalSymbolName"; -import type { LanguageVariant } from "#enums/languageVariant"; -import type { NodeFlags } from "#enums/nodeFlags"; -import type { ScriptKind } from "#enums/scriptKind"; -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - AssertionExpression, - BindingElement, - CaseClause, - ComputedPropertyName, - Decorator, - DefaultClause, - DoStatement, - EndOfFile, - EntityName, - EnumMember, - Expression, - ExpressionStatement, - ForInStatement, - ForOfStatement, - ForStatement, - Identifier, - IfStatement, - JsxAttribute, - JsxExpression, - JsxSpreadAttribute, - KeywordSyntaxKind, - ModifierSyntaxKind, - ParameterDeclaration, - PropertyAccessExpression, - PropertyAssignment, - PropertyDeclaration, - PropertySignatureDeclaration, - PunctuationSyntaxKind, - ReturnStatement, - SatisfiesExpression, - ShorthandPropertyAssignment, - SpreadAssignment, - Statement, - SwitchStatement, - TemplateSpan, - ThisExpression, - ThrowStatement, - Token, - VariableDeclaration, - WhileStatement, - WithStatement, -} from "./ast.generated.ts"; -import type { SpanMap } from "./spanMap.ts"; - -export { SyntaxKind } from "#enums/syntaxKind"; -export { TokenFlags } from "#enums/tokenFlags"; - -export * from "./ast.generated.ts"; - -// ── Core types ── - -declare const rootedPathBrand: unique symbol; -declare const rootedFilePathBrand: unique symbol; -declare const rootedDirectoryPathBrand: unique symbol; -declare const pathKeyBrand: unique symbol; - -/** - * A rooted, slash-normalized, lexically normalized path that may represent - * either a file or a directory. It preserves path casing. - * - * Rooted path types and canonical path keys are related as follows: - * - * ```text - * RootedFilePath - * / - * string --> RootedPath - * \ - * RootedDirectoryPath - * - * RootedPath + CaseSensitivity --> PathKey - * ``` - * - * Use `toRootedPath`, `toRootedFilePath`, or `toRootedDirectoryPath` for a - * path that may be relative and needs resolution against a current directory. - * Use `rootedPathFromNormalized` only when the input is already rooted and - * normalized. Use `pathKey` only when a canonical key is needed for a - * comparison, set, or map lookup. - */ -export type RootedPath = string & { readonly [rootedPathBrand]: void; }; - -/** - * A {@link RootedPath} intended to be used as a file path. It does not assert - * that the path exists or is a file on a filesystem. - */ -export type RootedFilePath = RootedPath & { readonly [rootedFilePathBrand]: void; }; - -/** - * A {@link RootedPath} intended to be used as a directory path. It does not - * assert that the path exists or is a directory on a filesystem, and does not - * guarantee a trailing directory separator. - */ -export type RootedDirectoryPath = RootedPath & { readonly [rootedDirectoryPathBrand]: void; }; - -/** - * A canonical key for a rooted, normalized path under a caller-selected - * `CaseSensitivity`. Keys are comparable only when they use the same - * `CaseSensitivity`. A `PathKey` is for comparison and lookup, and must not be - * used as a {@link RootedPath} because canonicalization may have changed its - * casing. It does not assert that the path exists. - */ -export type PathKey = string & { readonly [pathKeyBrand]: void; }; - -/** - * The escaped form of a symbol/identifier name. Internal compiler names are - * prefixed with `__` (e.g. `__type`, `__call`), and user names that already - * begin with `__` carry an extra leading underscore. Use - * {@link unescapeLeadingUnderscores} to recover the display name and - * {@link escapeLeadingUnderscores} to produce a key from a display name. - */ -export type __String = (string & { __escapedIdentifier: void; }) | InternalSymbolName; - -export interface TextRange { - pos: number; - end: number; -} - -export interface ReadonlyTextRange { - readonly pos: number; - readonly end: number; -} - -export interface NodeArray extends ReadonlyArray, ReadonlyTextRange { - hasTrailingComma?: boolean; - transformFlags: number; -} - -export interface Node extends ReadonlyTextRange { - readonly kind: SyntaxKind; - readonly flags: NodeFlags; - readonly parent: Node; - readonly jsDoc?: readonly Node[] | undefined; - childrenIter(): Generator; - forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined; - getSourceFile(): SourceFile; - getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number; - getFullStart(): number; - getEnd(): number; - getWidth(sourceFile?: SourceFile): number; - getFullWidth(): number; - getLeadingTriviaWidth(sourceFile?: SourceFile): number; - getFullText(sourceFile?: SourceFile): string; - getText(sourceFile?: SourceFile): string; - getChildCount(sourceFile?: SourceFile): number; - getChildAt(index: number, sourceFile?: SourceFile): Node; - getChildren(sourceFile?: SourceFile): readonly Node[]; - getFirstToken(sourceFile?: SourceFile): Node | undefined; - getLastToken(sourceFile?: SourceFile): Node | undefined; -} - -export interface FileReference extends TextRange { - readonly fileName: string; - readonly resolutionMode: number; - readonly preserve: boolean; -} - -export interface LineAndCharacter { - /** 0-based line number. */ - readonly line: number; - /** 0-based character offset, in UTF-16 code units, from the start of the line. */ - readonly character: number; -} - -export interface MappedDiagnosticDirective { - readonly originalRange: ReadonlyTextRange; - readonly virtualRange: ReadonlyTextRange; - readonly policy: DiagnosticDirectivePolicy; - readonly unusedCode: number; -} - -export interface SourceFile extends Node { - readonly kind: SyntaxKind.SourceFile; - readonly statements: NodeArray; - readonly endOfFileToken: EndOfFile; - readonly text: string; - readonly originalText: string; - readonly spanMap: SpanMap | undefined; - /** Identity of the content mapper that produced this source file. */ - readonly contentMapper?: string; - /** Filename used to determine the syntax and module semantics of the transformed content. */ - readonly virtualFileName?: RootedFilePath; - /** Framework-specific diagnostic directives applied to the transformed content. */ - readonly diagnosticDirectives?: readonly MappedDiagnosticDirective[]; - /** Compiler-assigned filenames of supplemental outputs associated with this canonical source file. */ - readonly supplementalSourceFileNames?: readonly RootedFilePath[]; - /** Canonical source filename associated with this supplemental output, if this is supplemental. */ - readonly canonicalSourceFileName?: RootedFilePath; - readonly fileName: RootedFilePath; - readonly path: PathKey; - readonly languageVariant: LanguageVariant; - readonly scriptKind: ScriptKind; - readonly isDeclarationFile: boolean; - readonly referencedFiles: readonly FileReference[]; - readonly typeReferenceDirectives: readonly FileReference[]; - readonly libReferenceDirectives: readonly FileReference[]; - readonly imports: readonly Node[]; - readonly moduleAugmentations: readonly Node[]; - readonly ambientModuleNames: readonly string[]; - readonly externalModuleIndicator: Node | true | undefined; - /** Returns the UTF-16 code unit offset of the start of each line. */ - getLineStarts(): readonly number[]; - /** Converts a UTF-16 code unit position into a 0-based line and character. */ - getLineAndCharacterOfPosition(position: number): LineAndCharacter; - /** Converts a 0-based line and character into a UTF-16 code unit position. */ - getPositionOfLineAndCharacter(line: number, character: number): number; - /** @internal */ - tokenCache?: Map; - /** @internal */ - childrenCache?: Map; -} - -// ── Token hierarchy ── - -export type PunctuationToken = Token; -export type KeywordToken = Token; -export type ModifierToken = KeywordToken; - -// ── Narrowing interfaces ── - -export interface PropertyAccessEntityNameExpression extends PropertyAccessExpression { - readonly expression: EntityNameExpression; - readonly name: Identifier; -} - -export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression; -export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression; - -export interface JsxTagNamePropertyAccess extends PropertyAccessExpression { - readonly expression: Identifier | ThisExpression | JsxTagNamePropertyAccess; -} - -export type HasExpressionInitializer = - | VariableDeclaration - | ParameterDeclaration - | BindingElement - | PropertyDeclaration - | PropertyAssignment - | EnumMember; - -export type HasInitializer = - | HasExpressionInitializer - | ForStatement - | ForInStatement - | ForOfStatement - | JsxAttribute; - -export type HasIllegalExpressionInitializer = PropertySignatureDeclaration; - -export type HasExpression = - | ExpressionStatement - | IfStatement - | DoStatement - | WhileStatement - | ReturnStatement - | WithStatement - | SwitchStatement - | CaseClause - | DefaultClause - | ThrowStatement - | AssertionExpression - | TemplateSpan - | ComputedPropertyName - | Decorator - | JsxExpression - | JsxSpreadAttribute - | SpreadAssignment - | SatisfiesExpression; - -export interface ObjectAssignmentInitializer extends ShorthandPropertyAssignment { - readonly objectAssignmentInitializer: Expression; -} +// ast.ts — Hand-written AST type definitions +// Generated types are in ast.generated.ts + +import type { DiagnosticDirectivePolicy } from "#enums/diagnosticDirectivePolicy"; +import type { InternalSymbolName } from "#enums/internalSymbolName"; +import type { LanguageVariant } from "#enums/languageVariant"; +import type { NodeFlags } from "#enums/nodeFlags"; +import type { ScriptKind } from "#enums/scriptKind"; +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + AssertionExpression, + BindingElement, + CaseClause, + ComputedPropertyName, + Decorator, + DefaultClause, + DoStatement, + EndOfFile, + EntityName, + EnumMember, + Expression, + ExpressionStatement, + ForInStatement, + ForOfStatement, + ForStatement, + Identifier, + IfStatement, + JsxAttribute, + JsxExpression, + JsxSpreadAttribute, + KeywordSyntaxKind, + ModifierSyntaxKind, + ParameterDeclaration, + PropertyAccessExpression, + PropertyAssignment, + PropertyDeclaration, + PropertySignatureDeclaration, + PunctuationSyntaxKind, + ReturnStatement, + SatisfiesExpression, + ShorthandPropertyAssignment, + SpreadAssignment, + Statement, + SwitchStatement, + TemplateSpan, + ThisExpression, + ThrowStatement, + Token, + VariableDeclaration, + WhileStatement, + WithStatement, +} from "./ast.generated.ts"; +import type { SpanMap } from "./spanMap.ts"; + +export { SyntaxKind } from "#enums/syntaxKind"; +export { TokenFlags } from "#enums/tokenFlags"; + +export * from "./ast.generated.ts"; + +// ── Core types ── + +declare const rootedPathBrand: unique symbol; +declare const rootedFilePathBrand: unique symbol; +declare const rootedDirectoryPathBrand: unique symbol; +declare const pathKeyBrand: unique symbol; + +/** + * A rooted, slash-normalized, lexically normalized path that may represent + * either a file or a directory. It preserves path casing. + * + * Rooted path types and canonical path keys are related as follows: + * + * ```text + * RootedFilePath + * / + * string --> RootedPath + * \ + * RootedDirectoryPath + * + * RootedPath + CaseSensitivity --> PathKey + * ``` + * + * Use `toRootedPath`, `toRootedFilePath`, or `toRootedDirectoryPath` for a + * path that may be relative and needs resolution against a current directory. + * Use `rootedPathFromNormalized` only when the input is already rooted and + * normalized. Use `pathKey` only when a canonical key is needed for a + * comparison, set, or map lookup. + */ +export type RootedPath = string & { readonly [rootedPathBrand]: void; }; + +/** + * A {@link RootedPath} intended to be used as a file path. It does not assert + * that the path exists or is a file on a filesystem. + */ +export type RootedFilePath = RootedPath & { readonly [rootedFilePathBrand]: void; }; + +/** + * A {@link RootedPath} intended to be used as a directory path. It does not + * assert that the path exists or is a directory on a filesystem, and does not + * guarantee a trailing directory separator. + */ +export type RootedDirectoryPath = RootedPath & { readonly [rootedDirectoryPathBrand]: void; }; + +/** + * A canonical key for a rooted, normalized path under a caller-selected + * `CaseSensitivity`. Keys are comparable only when they use the same + * `CaseSensitivity`. A `PathKey` is for comparison and lookup, and must not be + * used as a {@link RootedPath} because canonicalization may have changed its + * casing. It does not assert that the path exists. + */ +export type PathKey = string & { readonly [pathKeyBrand]: void; }; + +/** + * The escaped form of a symbol/identifier name. Internal compiler names are + * prefixed with `__` (e.g. `__type`, `__call`), and user names that already + * begin with `__` carry an extra leading underscore. Use + * {@link unescapeLeadingUnderscores} to recover the display name and + * {@link escapeLeadingUnderscores} to produce a key from a display name. + */ +export type __String = (string & { __escapedIdentifier: void; }) | InternalSymbolName; + +export interface TextRange { + pos: number; + end: number; +} + +export interface ReadonlyTextRange { + readonly pos: number; + readonly end: number; +} + +export interface NodeArray extends ReadonlyArray, ReadonlyTextRange { + hasTrailingComma?: boolean; + transformFlags: number; +} + +export interface Node extends ReadonlyTextRange { + readonly kind: SyntaxKind; + readonly flags: NodeFlags; + readonly parent: Node; + readonly jsDoc?: readonly Node[] | undefined; + childrenIter(): Generator; + forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined; + getSourceFile(): SourceFile; + getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number; + getFullStart(): number; + getEnd(): number; + getWidth(sourceFile?: SourceFile): number; + getFullWidth(): number; + getLeadingTriviaWidth(sourceFile?: SourceFile): number; + getFullText(sourceFile?: SourceFile): string; + getText(sourceFile?: SourceFile): string; + getChildCount(sourceFile?: SourceFile): number; + getChildAt(index: number, sourceFile?: SourceFile): Node; + getChildren(sourceFile?: SourceFile): readonly Node[]; + getFirstToken(sourceFile?: SourceFile): Node | undefined; + getLastToken(sourceFile?: SourceFile): Node | undefined; +} + +export interface FileReference extends TextRange { + readonly fileName: string; + readonly resolutionMode: number; + readonly preserve: boolean; +} + +export interface LineAndCharacter { + /** 0-based line number. */ + readonly line: number; + /** 0-based character offset, in UTF-16 code units, from the start of the line. */ + readonly character: number; +} + +export interface MappedDiagnosticDirective { + readonly originalRange: ReadonlyTextRange; + readonly virtualRange: ReadonlyTextRange; + readonly policy: DiagnosticDirectivePolicy; + readonly unusedCode: number; +} + +export interface SourceFile extends Node { + readonly kind: SyntaxKind.SourceFile; + readonly statements: NodeArray; + readonly endOfFileToken: EndOfFile; + readonly text: string; + readonly originalText: string; + readonly spanMap: SpanMap | undefined; + /** Identity of the content mapper that produced this source file. */ + readonly contentMapper?: string; + /** Filename used to determine the syntax and module semantics of the transformed content. */ + readonly virtualFileName?: RootedFilePath; + /** Framework-specific diagnostic directives applied to the transformed content. */ + readonly diagnosticDirectives?: readonly MappedDiagnosticDirective[]; + /** Compiler-assigned filenames of supplemental outputs associated with this canonical source file. */ + readonly supplementalSourceFileNames?: readonly RootedFilePath[]; + /** Canonical source filename associated with this supplemental output, if this is supplemental. */ + readonly canonicalSourceFileName?: RootedFilePath; + readonly fileName: RootedFilePath; + readonly path: PathKey; + readonly languageVariant: LanguageVariant; + readonly scriptKind: ScriptKind; + readonly isDeclarationFile: boolean; + readonly referencedFiles: readonly FileReference[]; + readonly typeReferenceDirectives: readonly FileReference[]; + readonly libReferenceDirectives: readonly FileReference[]; + readonly imports: readonly Node[]; + readonly moduleAugmentations: readonly Node[]; + readonly ambientModuleNames: readonly string[]; + readonly externalModuleIndicator: Node | true | undefined; + /** Returns the UTF-16 code unit offset of the start of each line. */ + getLineStarts(): readonly number[]; + /** Converts a UTF-16 code unit position into a 0-based line and character. */ + getLineAndCharacterOfPosition(position: number): LineAndCharacter; + /** Converts a 0-based line and character into a UTF-16 code unit position. */ + getPositionOfLineAndCharacter(line: number, character: number): number; + /** @internal */ + tokenCache?: Map; + /** @internal */ + childrenCache?: Map; +} + +// ── Token hierarchy ── + +export type PunctuationToken = Token; +export type KeywordToken = Token; +export type ModifierToken = KeywordToken; + +// ── Narrowing interfaces ── + +export interface PropertyAccessEntityNameExpression extends PropertyAccessExpression { + readonly expression: EntityNameExpression; + readonly name: Identifier; +} + +export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression; +export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression; + +export interface JsxTagNamePropertyAccess extends PropertyAccessExpression { + readonly expression: Identifier | ThisExpression | JsxTagNamePropertyAccess; +} + +export type HasExpressionInitializer = + | VariableDeclaration + | ParameterDeclaration + | BindingElement + | PropertyDeclaration + | PropertyAssignment + | EnumMember; + +export type HasInitializer = + | HasExpressionInitializer + | ForStatement + | ForInStatement + | ForOfStatement + | JsxAttribute; + +export type HasIllegalExpressionInitializer = PropertySignatureDeclaration; + +export type HasExpression = + | ExpressionStatement + | IfStatement + | DoStatement + | WhileStatement + | ReturnStatement + | WithStatement + | SwitchStatement + | CaseClause + | DefaultClause + | ThrowStatement + | AssertionExpression + | TemplateSpan + | ComputedPropertyName + | Decorator + | JsxExpression + | JsxSpreadAttribute + | SpreadAssignment + | SatisfiesExpression; + +export interface ObjectAssignmentInitializer extends ShorthandPropertyAssignment { + readonly objectAssignmentInitializer: Expression; +} diff --git a/packages/typescript/src/ast/astnav.ts b/packages/typescript/src/ast/astnav.ts index f401215034b9d..e48564f199dea 100644 --- a/packages/typescript/src/ast/astnav.ts +++ b/packages/typescript/src/ast/astnav.ts @@ -1,849 +1,849 @@ -import { NodeFlags } from "#enums/nodeFlags"; -import { SyntaxKind } from "#enums/syntaxKind"; -import type { TokenSyntaxKind } from "./ast.generated.ts"; -import type { - Node, - NodeArray, - SourceFile, -} from "./ast.ts"; -import { - createSyntaxList, - createToken, -} from "./factory.generated.ts"; -import { - isJSDocNodeKind, - isKeywordKind, - isPrivateIdentifier, - isPropertyNameLiteral, - isTokenKind, -} from "./is.ts"; -import type { Scanner } from "./scanner.ts"; -import { - createScanner, - skipTrivia, -} from "./scanner.ts"; - -export function getTokenAtPosition(sourceFile: SourceFile, position: number): Node { - return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ true, /*includePrecedingTokenAtEndPosition*/ undefined); -} - -export function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node { - return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, node => isPropertyNameLiteral(node) || isKeywordKind(node.kind) || isPrivateIdentifier(node)); -} - -export function getTouchingToken(sourceFile: SourceFile, position: number): Node { - return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, /*includePrecedingTokenAtEndPosition*/ undefined); -} - -/** - * Finds the token that starts immediately after `previousToken` ends, searching - * within `parent`. Returns `undefined` if no such token exists. - */ -export function findNextToken(previousToken: Node, parent: Node, sourceFile: SourceFile): Node | undefined { - return find(parent); - - function find(n: Node): Node | undefined { - if (isTokenKind(n.kind) && n.pos === previousToken.end) { - // This is the token that starts at the end of previousToken – return it. - return n; - } - - // Find the child node that contains `previousToken` or starts immediately after it. - let foundNode: Node | undefined; - - const visitChild = (node: Node) => { - if (node.flags & NodeFlags.Reparsed) { - return undefined; - } - if (node.pos <= previousToken.end && node.end > previousToken.end) { - foundNode = node; - } - return undefined; - }; - - // Visit JSDoc children first (mirrors Go's VisitEachChildAndJSDoc). - if (n.jsDoc) { - for (const jsdoc of n.jsDoc) { - visitChild(jsdoc); - } - } - - n.forEachChild( - visitChild, - nodes => { - if (nodes.length > 0 && foundNode === undefined) { - for (const node of nodes) { - if (node.flags & NodeFlags.Reparsed) continue; - if (node.pos > previousToken.end) break; - if (node.end > previousToken.end) { - foundNode = node; - break; - } - } - } - return undefined; - }, - ); - - // Recurse into the found child. - if (foundNode !== undefined) { - return find(foundNode); - } - - // No AST child covers the position; use the scanner to find the syntactic token. - // The scanner is initialized at `previousToken.end`, so tokenFullStart === previousToken.end. - const startPos = previousToken.end; - if (startPos >= n.pos && startPos < n.end) { - const scanner = getScannerForSourceFile(sourceFile, startPos); - const token = scanner.getToken(); - const tokenFullStart = scanner.getTokenFullStart(); - const tokenEnd = scanner.getTokenEnd(); - const flags = scanner.getTokenFlags(); - return getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, n, flags); - } - - return undefined; - } -} - -/** - * Finds the leftmost token satisfying `position < token.end`. - * If the position is in the trivia of that leftmost token, or the token is invalid, - * returns the rightmost valid token with `token.end <= position`. - * Excludes `JsxText` tokens containing only whitespace. - */ -export function findPrecedingToken(sourceFile: SourceFile, position: number): Node | undefined { - return findPrecedingTokenImpl(sourceFile, position, sourceFile); -} - -function getTokenAtPositionImpl( - sourceFile: SourceFile, - position: number, - allowPositionInLeadingTrivia: boolean, - includePrecedingTokenAtEndPosition: ((node: Node) => boolean) | undefined, -): Node { - let current: Node = sourceFile; - let nodeAfterLeft: Node | undefined; - const state: { - next: Node | undefined; - prevSubtree: Node | undefined; - left: number; - } = { - next: undefined, - prevSubtree: undefined, - left: 0, - }; - - const getIncludedPrecedingToken = (subtree: Node): Node | undefined => { - const child = findPrecedingTokenImpl(sourceFile, position, subtree); - if (child !== undefined && child.end === position && includePrecedingTokenAtEndPosition!(child)) { - return child; - } - return undefined; - }; - - const testNode = (node: Node): number => { - if (node.kind !== SyntaxKind.EndOfFile && node.end === position && includePrecedingTokenAtEndPosition !== undefined) { - if (state.prevSubtree !== undefined && getIncludedPrecedingToken(state.prevSubtree) !== undefined) { - return 0; - } - state.prevSubtree = node; - } - // A node "contains" the position if position < end, except nodes at the file end - // treat end as inclusive (there's nowhere else to look). This applies to the EOF - // token itself, and to JSDoc nodes reaching EOF (e.g. unterminated JSDoc comments). - if ( - node.end < position || node.end === position && - node.kind !== SyntaxKind.EndOfFile && - (!isJSDocNodeKind(node.kind) || node.end !== sourceFile.endOfFileToken.end) - ) { - return -1; - } - const nodePos = getPosition(node, sourceFile, allowPositionInLeadingTrivia); - if (nodePos > position) { - return 1; - } - return 0; - }; - - while (true) { - // Visit each child of current to find the one containing the position. - state.next = undefined; - nodeAfterLeft = undefined as Node | undefined; - - // In Strada, JSDoc nodes with a single comment represent that comment as a string - // property (not a child node), so forEachChild does not visit it. We replicate this - // by detecting single-comment NodeLists in visitList and skipping their elements in visitNode. - let skipSingleCommentChildren = false; - - const visitNode = (node: Node) => { - if (node.flags & NodeFlags.Reparsed) { - return undefined; - } - if (skipSingleCommentChildren && isJSDocCommentChildKind(node.kind)) { - return undefined; - } - if (nodeAfterLeft === undefined) { - nodeAfterLeft = node; - } - if (state.next === undefined) { - const result = testNode(node); - switch (result) { - case -1: - if (!isJSDocNodeKind(node.kind)) { - state.left = node.end; - } - nodeAfterLeft = undefined; - break; - case 0: - state.next = node; - break; - } - } - return undefined; - }; - - // Visit JSDoc children first, then regular children (mirrors Go's VisitEachChildAndJSDoc). - if (current.jsDoc) { - for (const jsdoc of current.jsDoc) { - visitNode(jsdoc); - } - } - - current.forEachChild( - visitNode, - nodes => { - // Track whether this NodeList is a single-comment list that should be skipped. - // The flag affects the subsequent forEachNode(visitNode) calls for this NodeList. - skipSingleCommentChildren = isJSDocSingleCommentNodeList(nodes); - if (nodes.length === 0 || skipSingleCommentChildren) { - return undefined; - } - if (nodeAfterLeft === undefined) { - for (const node of nodes) { - if (!(node.flags & NodeFlags.Reparsed)) { - nodeAfterLeft = node; - break; - } - } - } - if (state.next === undefined) { - if (nodes.end === position && includePrecedingTokenAtEndPosition !== undefined) { - state.left = nodes.end; - nodeAfterLeft = undefined; - state.prevSubtree = nodes[nodes.length - 1]; - } - else if (nodes.end <= position) { - state.left = nodes.end; - nodeAfterLeft = undefined; - } - else if (nodes.pos <= position) { - binarySearchNodeList(nodes, testNode, (node, middle, arr) => { - state.left = node.end; - nodeAfterLeft = undefined; - for (let i = middle + 1; i < arr.length; i++) { - if (!(arr[i].flags & NodeFlags.Reparsed)) { - nodeAfterLeft = arr[i]; - break; - } - } - }, found => { - state.next = found; - }); - } - } - return undefined; - }, - ); - - // If prevSubtree was set, check if the rightmost token of prevSubtree should be returned. - if (state.prevSubtree !== undefined) { - const child = getIncludedPrecedingToken(state.prevSubtree); - if (child !== undefined) { - return child; - } - state.prevSubtree = undefined; - } - - if (state.next === undefined) { - if (isTokenKind(current.kind) || shouldSkipChild(current)) { - return current; - } - // Use the scanner to find a token not stored in the AST. - const scanner = getScannerForSourceFile(sourceFile, state.left); - let end = current.end; - const afterLeft = nodeAfterLeft; - if (afterLeft !== undefined) { - end = afterLeft.pos; - } - while (state.left < end) { - const token = scanner.getToken(); - const tokenFullStart = scanner.getTokenFullStart(); - const tokenStart = allowPositionInLeadingTrivia ? tokenFullStart : scanner.getTokenStart(); - const tokenEnd = scanner.getTokenEnd(); - const flags = scanner.getTokenFlags(); - if (tokenEnd > end) { - break; - } - if (tokenStart <= position && position < tokenEnd) { - if (token === SyntaxKind.Identifier || !isTokenKind(token)) { - if (isJSDocNodeKind(current.kind)) { - return current; - } - throw new Error(`did not expect ${SyntaxKind[current.kind]} to have ${SyntaxKind[token]} in its trivia`); - } - return getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, current, flags); - } - if (includePrecedingTokenAtEndPosition !== undefined && tokenEnd === position) { - const prevToken = getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, current, flags); - if (includePrecedingTokenAtEndPosition(prevToken)) { - return prevToken; - } - } - state.left = tokenEnd; - scanner.scan(); - } - return current; - } - - current = state.next; - state.left = current.pos; - nodeAfterLeft = undefined; - } -} - -function getPosition(node: Node, sourceFile: SourceFile, allowPositionInLeadingTrivia: boolean): number { - if (allowPositionInLeadingTrivia) { - return node.pos; - } - return getTokenPosOfNode(node, sourceFile, /*includeJSDoc*/ true); -} - -/** @internal */ -export function getTokenPosOfNode(node: Node, sourceFile: SourceFile, includeJSDoc?: boolean): number { - // With nodes that have no width (i.e. 'Missing' nodes), we actually *don't* - // want to skip trivia because this will launch us forward to the next token. - if (nodeIsMissing(node)) { - return node.pos; - } - if (isJSDocNodeKind(node.kind) || node.kind === SyntaxKind.JsxText) { - return skipTrivia(sourceFile.text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ true); - } - if (includeJSDoc && node.jsDoc && node.jsDoc.length > 0) { - return getTokenPosOfNode(node.jsDoc[0], sourceFile, /*includeJSDoc*/ false); - } - return skipTrivia(sourceFile.text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ false, /*inJSDoc*/ !!(node.flags & NodeFlags.JSDoc)); -} - -function nodeIsMissing(node: Node): boolean { - return node.pos === node.end && node.pos >= 0 && node.kind !== SyntaxKind.EndOfFile; -} - -function findPrecedingTokenImpl(sourceFile: SourceFile, position: number, startNode: Node): Node | undefined { - const find = (n: Node): Node | undefined => { - if (isTokenKind(n.kind) && n.kind !== SyntaxKind.EndOfFile) { - return n; - } - - let foundChild: Node | undefined; - let prevChild: Node | undefined; - - // Visit JSDoc nodes first (mirrors Go's VisitEachChildAndJSDoc). - if (n.jsDoc) { - for (const jsdoc of n.jsDoc) { - if (jsdoc.flags & NodeFlags.Reparsed) continue; - if (foundChild !== undefined) break; - if (position < jsdoc.end && (prevChild === undefined || prevChild.end <= position)) { - foundChild = jsdoc; - } - else { - prevChild = jsdoc; - } - } - } - - let skipSingleCommentChildrenImpl = false; - n.forEachChild( - node => { - if (node.flags & NodeFlags.Reparsed) { - return undefined; - } - if (skipSingleCommentChildrenImpl && isJSDocCommentChildKind(node.kind)) { - return undefined; - } - if (foundChild !== undefined) { - return undefined; - } - if (position < node.end && (prevChild === undefined || prevChild.end <= position)) { - foundChild = node; - } - else { - prevChild = node; - } - return undefined; - }, - nodes => { - skipSingleCommentChildrenImpl = isJSDocSingleCommentNodeList(nodes); - if (foundChild !== undefined) { - return undefined; - } - if (nodes.length > 0 && !skipSingleCommentChildrenImpl) { - const index = binarySearchForPrecedingToken(nodes, position); - if (index >= 0 && !(nodes[index].flags & NodeFlags.Reparsed)) { - foundChild = nodes[index]; - } - const lookupIndex = index >= 0 ? index - 1 : nodes.length - 1; - for (let i = lookupIndex; i >= 0; i--) { - if (!(nodes[i].flags & NodeFlags.Reparsed)) { - if (prevChild === undefined) { - prevChild = nodes[i]; - } - break; - } - } - } - return undefined; - }, - ); - - if (foundChild !== undefined) { - const start = getTokenPosOfNode(foundChild, sourceFile, /*includeJSDoc*/ true); - if (start >= position) { - if (position >= foundChild.pos) { - // We are in the leading trivia of foundChild. Check for JSDoc nodes of n - // preceding foundChild, mirroring Go's findPrecedingToken logic. - let jsDoc: Node | undefined; - if (n.jsDoc) { - for (let i = n.jsDoc.length - 1; i >= 0; i--) { - if (n.jsDoc[i].pos >= foundChild.pos) { - jsDoc = n.jsDoc[i]; - break; - } - } - } - if (jsDoc !== undefined) { - if (position < jsDoc.end) { - return find(jsDoc); - } - return findRightmostValidToken(sourceFile, jsDoc.end, n, position); - } - return findRightmostValidToken(sourceFile, foundChild.pos, n, -1); - } - // Answer is in tokens between two visited children. - return findRightmostValidToken(sourceFile, foundChild.pos, n, position); - } - return find(foundChild); - } - - if (position >= n.end) { - return findRightmostValidToken(sourceFile, n.end, n, -1); - } - return findRightmostValidToken(sourceFile, n.end, n, position); - }; - - return find(startNode); -} - -function findRightmostValidToken(sourceFile: SourceFile, endPos: number, containingNode: Node, position: number): Node | undefined { - if (position === -1) { - position = containingNode.end; - } - - const find = (n: Node, endPos: number): Node | undefined => { - if (isTokenKind(n.kind) && n.kind !== SyntaxKind.EndOfFile) { - return n; - } - - let rightmostValidNode: Node | undefined; - let hasChildren = false; - - // Visit JSDoc nodes first (mirrors Go's VisitEachChildAndJSDoc). - if (n.jsDoc) { - hasChildren = true; - for (const jsdoc of n.jsDoc) { - if (jsdoc.flags & NodeFlags.Reparsed) continue; - if (jsdoc.end > endPos || getTokenPosOfNode(jsdoc, sourceFile) >= position) continue; - if (isValidPrecedingNode(jsdoc, sourceFile)) { - rightmostValidNode = jsdoc; - } - } - } - - let skipSingleCommentChildren = false; - n.forEachChild( - node => { - if (node.flags & NodeFlags.Reparsed) { - return undefined; - } - if (skipSingleCommentChildren && isJSDocCommentChildKind(node.kind)) { - return undefined; - } - hasChildren = true; - if (node.end > endPos || getTokenPosOfNode(node, sourceFile) >= position) { - return undefined; - } - if (isValidPrecedingNode(node, sourceFile)) { - rightmostValidNode = node; - } - return undefined; - }, - nodes => { - // Skip single-comment JSDoc NodeLists (e.g. JSDocText children of a JSDoc node): - // In Go, these are stored as string properties and are never visited as children. - skipSingleCommentChildren = isJSDocSingleCommentNodeList(nodes); - if (nodes.length > 0 && !skipSingleCommentChildren) { - hasChildren = true; - for (let i = nodes.length - 1; i >= 0; i--) { - const node = nodes[i]; - if (node.flags & NodeFlags.Reparsed) continue; - if (node.end > endPos || getTokenPosOfNode(node, sourceFile) >= position) continue; - if (isValidPrecedingNode(node, sourceFile)) { - rightmostValidNode = node; - break; - } - } - } - return undefined; - }, - ); - - // Scan for syntactic tokens (e.g. `{`, `,`) between AST nodes, matching Go's - // findRightmostValidToken scanner step. - if (!shouldSkipChild(n)) { - const startPos = rightmostValidNode !== undefined ? rightmostValidNode.end : n.pos; - const targetEnd = Math.min(endPos, position); - if (startPos < targetEnd) { - const scanner = getScannerForSourceFile(sourceFile, startPos); - let pos = startPos; - let lastScannedToken: Node | undefined; - while (pos < targetEnd) { - const tokenStart = scanner.getTokenStart(); - if (tokenStart >= position) break; - const tokenFullStart = scanner.getTokenFullStart(); - const tokenEnd = scanner.getTokenEnd(); - const token = scanner.getToken(); - const flags = scanner.getTokenFlags(); - lastScannedToken = getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, n, flags); - pos = tokenEnd; - scanner.scan(); - } - if (lastScannedToken !== undefined) { - return lastScannedToken; - } - } - } - - if (!hasChildren) { - if (n !== containingNode) { - return n; - } - return undefined; - } - - if (rightmostValidNode !== undefined) { - return find(rightmostValidNode, rightmostValidNode.end); - } - return undefined; - }; - - return find(containingNode, endPos); -} - -function isValidPrecedingNode(node: Node, sourceFile: SourceFile): boolean { - if (node.kind === SyntaxKind.EndOfFile) { - return false; - } - const start = getTokenPosOfNode(node, sourceFile); - const width = node.end - start; - return width > 0; -} - -function shouldSkipChild(node: Node): boolean { - return node.kind === SyntaxKind.JSDoc || - node.kind === SyntaxKind.JSDocText || - node.kind === SyntaxKind.JSDocTypeLiteral || - node.kind === SyntaxKind.JSDocSignature || - node.kind === SyntaxKind.JSDocLink || - node.kind === SyntaxKind.JSDocLinkCode || - node.kind === SyntaxKind.JSDocLinkPlain || - isJSDocTag(node); -} - -function isJSDocTag(node: Node): boolean { - return node.kind >= SyntaxKind.FirstJSDocTagNode && node.kind <= SyntaxKind.LastJSDocTagNode; -} - -// In Strada, if a JSDoc node has a single comment, that comment is represented as a string -// property as a simplification, and therefore that comment is not visited by forEachChild. -// To match, we skip single-element comment NodeLists within JSDoc/JSDocTag nodes. -function isJSDocCommentChildKind(kind: SyntaxKind): boolean { - switch (kind) { - case SyntaxKind.JSDocText: - case SyntaxKind.JSDocLink: - case SyntaxKind.JSDocLinkCode: - case SyntaxKind.JSDocLinkPlain: - return true; - default: - return false; - } -} - -function isJSDocSingleCommentNodeList(nodes: NodeArray): boolean { - return nodes.length === 1 && isJSDocCommentChildKind(nodes[0].kind); -} - -function getScannerForSourceFile(sourceFile: SourceFile, pos: number) { - const scanner = createScanner(/*skipTrivia*/ true, sourceFile.languageVariant, sourceFile.text); - scanner.resetTokenState(pos); - scanner.scan(); - return scanner; -} - -type Mutable = { -readonly [K in keyof T]: T[K]; }; - -function getOrCreateToken(sourceFile: SourceFile, kind: SyntaxKind, pos: number, end: number, parent: Node, _flags: number): Node { - const key = `${pos}_${end}`; - if (!sourceFile.tokenCache) { - sourceFile.tokenCache = new Map(); - } - - const existing = sourceFile.tokenCache.get(key); - if (existing !== undefined) { - return existing; - } - - const token: Mutable = createToken(kind as TokenSyntaxKind); - token.pos = pos; - token.end = end; - token.parent = parent; - sourceFile.tokenCache.set(key, token); - return token; -} - -const emptyArray: readonly Node[] = []; - -function assertHasRealPosition(node: Node): void { - if (node.pos < 0 || node.end < 0) { - throw new Error("Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine"); - } -} - -export function getChildren(node: Node, sourceFile: SourceFile = node.getSourceFile()): readonly Node[] { - // A SyntaxList already holds its (pre-materialized) children. - if (node.kind === SyntaxKind.SyntaxList) { - return (node as unknown as { children: readonly Node[]; }).children; - } - - if (isTokenKind(node.kind)) { - // EndOfFile may carry leading JSDoc; every other token has no children. The EndOfFile - // result must go through the cache: remote nodes rebuild .jsDoc on every access. - if (node.kind !== SyntaxKind.EndOfFile) { - return emptyArray; - } - } - else { - assertHasRealPosition(node); - } - - const cache = (sourceFile.childrenCache ??= new Map()); - const cached = cache.get(node); - - if (cached !== undefined) { - return cached; - } - - const children = node.kind === SyntaxKind.EndOfFile - ? node.jsDoc ?? emptyArray - : createChildren(node, sourceFile); - cache.set(node, children); - return children; -} - -function createChildren(node: Node, sourceFile: SourceFile): readonly Node[] { - const children: Node[] = []; - - // Inside a JSDoc comment there are no real tokens to synthesize. - if (shouldSkipChild(node)) { - node.forEachChild(child => void children.push(child)); - return children; - } - - // One scanner serves every run of synthetic tokens materialized for this node. - const scanner = createScanner(/*skipTrivia*/ true, sourceFile.languageVariant, sourceFile.text); - let pos = node.pos; - const processNode = (child: Node): undefined => { - // Reparsed subtrees (JSDoc types materialized into the AST) have positions inside - // the comment, not in this node's token range. - if (child.flags & NodeFlags.Reparsed) { - return; - } - addSyntheticNodes(children, pos, child.pos, node, sourceFile, scanner); - children.push(child); - pos = child.end; - }; - const processNodes = (nodes: NodeArray): undefined => { - if (nodes.length > 0 && !nodes.some(child => !(child.flags & NodeFlags.Reparsed))) { - return; - } - addSyntheticNodes(children, pos, nodes.pos, node, sourceFile, scanner); - children.push(createSyntaxListNode(nodes, node, sourceFile, scanner)); - pos = nodes.end; - }; - - // JSDoc attached to the node is leading content, processed first. - if (node.jsDoc) { - for (const jsDoc of node.jsDoc) { - processNode(jsDoc); - } - } - pos = node.pos; - node.forEachChild(processNode, processNodes); - addSyntheticNodes(children, pos, node.end, node, sourceFile, scanner); - return children; -} - -function addSyntheticNodes(children: Node[], pos: number, end: number, parent: Node, sourceFile: SourceFile, scanner: Scanner): void { - if (pos >= end) { - return; - } - scanner.resetTokenState(pos); - scanner.scan(); - while (pos < end) { - const token = scanner.getToken(); - const tokenEnd = scanner.getTokenEnd(); - if (tokenEnd <= end) { - // An identifier should never appear as trivia between AST children; skip defensively. - if (token !== SyntaxKind.Identifier) { - children.push(getOrCreateToken(sourceFile, token, pos, tokenEnd, parent, scanner.getTokenFlags())); - } - } - pos = tokenEnd; - if (token === SyntaxKind.EndOfFile) { - break; - } - scanner.scan(); - } -} - -function createSyntaxListNode(nodes: NodeArray, parent: Node, sourceFile: SourceFile, scanner: Scanner): Node { - const listChildren: Node[] = []; - let pos = nodes.pos; - for (const child of nodes) { - if (child.flags & NodeFlags.Reparsed) { - continue; - } - addSyntheticNodes(listChildren, pos, child.pos, parent, sourceFile, scanner); - listChildren.push(child); - pos = child.end; - } - addSyntheticNodes(listChildren, pos, nodes.end, parent, sourceFile, scanner); - const list = createSyntaxList(listChildren) as Mutable; - list.pos = nodes.pos; - list.end = nodes.end; - list.parent = parent; - return list as Node; -} - -export function getFirstToken(node: Node, sourceFile: SourceFile = node.getSourceFile()): Node | undefined { - if (isTokenKind(node.kind)) { - return undefined; - } - assertHasRealPosition(node); - const children = getChildren(node, sourceFile); - const child = children.find(kid => kid.kind < SyntaxKind.FirstJSDocNode || kid.kind > SyntaxKind.LastJSDocNode); - if (child === undefined) { - return undefined; - } - return child.kind < SyntaxKind.FirstNode ? child : getFirstToken(child, sourceFile); -} - -export function getLastToken(node: Node, sourceFile: SourceFile = node.getSourceFile()): Node | undefined { - if (isTokenKind(node.kind)) { - return undefined; - } - assertHasRealPosition(node); - const children = getChildren(node, sourceFile); - const child = children.length ? children[children.length - 1] : undefined; - if (child === undefined) { - return undefined; - } - return child.kind < SyntaxKind.FirstNode ? child : getLastToken(child, sourceFile); -} - -/** Binary search a node list for the node containing position. */ -function binarySearchNodeList( - nodes: NodeArray, - testNode: (node: Node) => number, - onLeft: (node: Node, index: number, arr: NodeArray) => void, - onMatch: (node: Node) => void, -): void { - let lo = 0; - let hi = nodes.length - 1; - while (lo <= hi) { - const mid = (lo + hi) >>> 1; - const node = nodes[mid]; - if (node.flags & NodeFlags.Reparsed) { - // Skip reparsed nodes: try to find a non-reparsed node nearby - let found = false; - for (let i = mid + 1; i <= hi; i++) { - if (!(nodes[i].flags & NodeFlags.Reparsed)) { - const cmp = testNode(nodes[i]); - if (cmp < 0) { - onLeft(nodes[i], i, nodes); - lo = i + 1; - } - else if (cmp > 0) { - hi = i - 1; - } - else { - onMatch(nodes[i]); - return; - } - found = true; - break; - } - } - if (!found) { - hi = mid - 1; - } - continue; - } - const cmp = testNode(node); - if (cmp < 0) { - onLeft(node, mid, nodes); - lo = mid + 1; - } - else if (cmp > 0) { - hi = mid - 1; - } - else { - onMatch(node); - return; - } - } -} - -function binarySearchForPrecedingToken(nodes: NodeArray, position: number): number { - let lo = 0; - let hi = nodes.length - 1; - let result = -1; - while (lo <= hi) { - const mid = (lo + hi) >>> 1; - const node = nodes[mid]; - if (node.flags & NodeFlags.Reparsed) { - lo = mid + 1; - continue; - } - if (position < node.end) { - if (mid === 0 || position >= nodes[mid - 1].end) { - result = mid; - break; - } - hi = mid - 1; - } - else { - lo = mid + 1; - } - } - return result; -} +import { NodeFlags } from "#enums/nodeFlags"; +import { SyntaxKind } from "#enums/syntaxKind"; +import type { TokenSyntaxKind } from "./ast.generated.ts"; +import type { + Node, + NodeArray, + SourceFile, +} from "./ast.ts"; +import { + createSyntaxList, + createToken, +} from "./factory.generated.ts"; +import { + isJSDocNodeKind, + isKeywordKind, + isPrivateIdentifier, + isPropertyNameLiteral, + isTokenKind, +} from "./is.ts"; +import type { Scanner } from "./scanner.ts"; +import { + createScanner, + skipTrivia, +} from "./scanner.ts"; + +export function getTokenAtPosition(sourceFile: SourceFile, position: number): Node { + return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ true, /*includePrecedingTokenAtEndPosition*/ undefined); +} + +export function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node { + return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, node => isPropertyNameLiteral(node) || isKeywordKind(node.kind) || isPrivateIdentifier(node)); +} + +export function getTouchingToken(sourceFile: SourceFile, position: number): Node { + return getTokenAtPositionImpl(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, /*includePrecedingTokenAtEndPosition*/ undefined); +} + +/** + * Finds the token that starts immediately after `previousToken` ends, searching + * within `parent`. Returns `undefined` if no such token exists. + */ +export function findNextToken(previousToken: Node, parent: Node, sourceFile: SourceFile): Node | undefined { + return find(parent); + + function find(n: Node): Node | undefined { + if (isTokenKind(n.kind) && n.pos === previousToken.end) { + // This is the token that starts at the end of previousToken – return it. + return n; + } + + // Find the child node that contains `previousToken` or starts immediately after it. + let foundNode: Node | undefined; + + const visitChild = (node: Node) => { + if (node.flags & NodeFlags.Reparsed) { + return undefined; + } + if (node.pos <= previousToken.end && node.end > previousToken.end) { + foundNode = node; + } + return undefined; + }; + + // Visit JSDoc children first (mirrors Go's VisitEachChildAndJSDoc). + if (n.jsDoc) { + for (const jsdoc of n.jsDoc) { + visitChild(jsdoc); + } + } + + n.forEachChild( + visitChild, + nodes => { + if (nodes.length > 0 && foundNode === undefined) { + for (const node of nodes) { + if (node.flags & NodeFlags.Reparsed) continue; + if (node.pos > previousToken.end) break; + if (node.end > previousToken.end) { + foundNode = node; + break; + } + } + } + return undefined; + }, + ); + + // Recurse into the found child. + if (foundNode !== undefined) { + return find(foundNode); + } + + // No AST child covers the position; use the scanner to find the syntactic token. + // The scanner is initialized at `previousToken.end`, so tokenFullStart === previousToken.end. + const startPos = previousToken.end; + if (startPos >= n.pos && startPos < n.end) { + const scanner = getScannerForSourceFile(sourceFile, startPos); + const token = scanner.getToken(); + const tokenFullStart = scanner.getTokenFullStart(); + const tokenEnd = scanner.getTokenEnd(); + const flags = scanner.getTokenFlags(); + return getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, n, flags); + } + + return undefined; + } +} + +/** + * Finds the leftmost token satisfying `position < token.end`. + * If the position is in the trivia of that leftmost token, or the token is invalid, + * returns the rightmost valid token with `token.end <= position`. + * Excludes `JsxText` tokens containing only whitespace. + */ +export function findPrecedingToken(sourceFile: SourceFile, position: number): Node | undefined { + return findPrecedingTokenImpl(sourceFile, position, sourceFile); +} + +function getTokenAtPositionImpl( + sourceFile: SourceFile, + position: number, + allowPositionInLeadingTrivia: boolean, + includePrecedingTokenAtEndPosition: ((node: Node) => boolean) | undefined, +): Node { + let current: Node = sourceFile; + let nodeAfterLeft: Node | undefined; + const state: { + next: Node | undefined; + prevSubtree: Node | undefined; + left: number; + } = { + next: undefined, + prevSubtree: undefined, + left: 0, + }; + + const getIncludedPrecedingToken = (subtree: Node): Node | undefined => { + const child = findPrecedingTokenImpl(sourceFile, position, subtree); + if (child !== undefined && child.end === position && includePrecedingTokenAtEndPosition!(child)) { + return child; + } + return undefined; + }; + + const testNode = (node: Node): number => { + if (node.kind !== SyntaxKind.EndOfFile && node.end === position && includePrecedingTokenAtEndPosition !== undefined) { + if (state.prevSubtree !== undefined && getIncludedPrecedingToken(state.prevSubtree) !== undefined) { + return 0; + } + state.prevSubtree = node; + } + // A node "contains" the position if position < end, except nodes at the file end + // treat end as inclusive (there's nowhere else to look). This applies to the EOF + // token itself, and to JSDoc nodes reaching EOF (e.g. unterminated JSDoc comments). + if ( + node.end < position || node.end === position && + node.kind !== SyntaxKind.EndOfFile && + (!isJSDocNodeKind(node.kind) || node.end !== sourceFile.endOfFileToken.end) + ) { + return -1; + } + const nodePos = getPosition(node, sourceFile, allowPositionInLeadingTrivia); + if (nodePos > position) { + return 1; + } + return 0; + }; + + while (true) { + // Visit each child of current to find the one containing the position. + state.next = undefined; + nodeAfterLeft = undefined as Node | undefined; + + // In Strada, JSDoc nodes with a single comment represent that comment as a string + // property (not a child node), so forEachChild does not visit it. We replicate this + // by detecting single-comment NodeLists in visitList and skipping their elements in visitNode. + let skipSingleCommentChildren = false; + + const visitNode = (node: Node) => { + if (node.flags & NodeFlags.Reparsed) { + return undefined; + } + if (skipSingleCommentChildren && isJSDocCommentChildKind(node.kind)) { + return undefined; + } + if (nodeAfterLeft === undefined) { + nodeAfterLeft = node; + } + if (state.next === undefined) { + const result = testNode(node); + switch (result) { + case -1: + if (!isJSDocNodeKind(node.kind)) { + state.left = node.end; + } + nodeAfterLeft = undefined; + break; + case 0: + state.next = node; + break; + } + } + return undefined; + }; + + // Visit JSDoc children first, then regular children (mirrors Go's VisitEachChildAndJSDoc). + if (current.jsDoc) { + for (const jsdoc of current.jsDoc) { + visitNode(jsdoc); + } + } + + current.forEachChild( + visitNode, + nodes => { + // Track whether this NodeList is a single-comment list that should be skipped. + // The flag affects the subsequent forEachNode(visitNode) calls for this NodeList. + skipSingleCommentChildren = isJSDocSingleCommentNodeList(nodes); + if (nodes.length === 0 || skipSingleCommentChildren) { + return undefined; + } + if (nodeAfterLeft === undefined) { + for (const node of nodes) { + if (!(node.flags & NodeFlags.Reparsed)) { + nodeAfterLeft = node; + break; + } + } + } + if (state.next === undefined) { + if (nodes.end === position && includePrecedingTokenAtEndPosition !== undefined) { + state.left = nodes.end; + nodeAfterLeft = undefined; + state.prevSubtree = nodes[nodes.length - 1]; + } + else if (nodes.end <= position) { + state.left = nodes.end; + nodeAfterLeft = undefined; + } + else if (nodes.pos <= position) { + binarySearchNodeList(nodes, testNode, (node, middle, arr) => { + state.left = node.end; + nodeAfterLeft = undefined; + for (let i = middle + 1; i < arr.length; i++) { + if (!(arr[i].flags & NodeFlags.Reparsed)) { + nodeAfterLeft = arr[i]; + break; + } + } + }, found => { + state.next = found; + }); + } + } + return undefined; + }, + ); + + // If prevSubtree was set, check if the rightmost token of prevSubtree should be returned. + if (state.prevSubtree !== undefined) { + const child = getIncludedPrecedingToken(state.prevSubtree); + if (child !== undefined) { + return child; + } + state.prevSubtree = undefined; + } + + if (state.next === undefined) { + if (isTokenKind(current.kind) || shouldSkipChild(current)) { + return current; + } + // Use the scanner to find a token not stored in the AST. + const scanner = getScannerForSourceFile(sourceFile, state.left); + let end = current.end; + const afterLeft = nodeAfterLeft; + if (afterLeft !== undefined) { + end = afterLeft.pos; + } + while (state.left < end) { + const token = scanner.getToken(); + const tokenFullStart = scanner.getTokenFullStart(); + const tokenStart = allowPositionInLeadingTrivia ? tokenFullStart : scanner.getTokenStart(); + const tokenEnd = scanner.getTokenEnd(); + const flags = scanner.getTokenFlags(); + if (tokenEnd > end) { + break; + } + if (tokenStart <= position && position < tokenEnd) { + if (token === SyntaxKind.Identifier || !isTokenKind(token)) { + if (isJSDocNodeKind(current.kind)) { + return current; + } + throw new Error(`did not expect ${SyntaxKind[current.kind]} to have ${SyntaxKind[token]} in its trivia`); + } + return getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, current, flags); + } + if (includePrecedingTokenAtEndPosition !== undefined && tokenEnd === position) { + const prevToken = getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, current, flags); + if (includePrecedingTokenAtEndPosition(prevToken)) { + return prevToken; + } + } + state.left = tokenEnd; + scanner.scan(); + } + return current; + } + + current = state.next; + state.left = current.pos; + nodeAfterLeft = undefined; + } +} + +function getPosition(node: Node, sourceFile: SourceFile, allowPositionInLeadingTrivia: boolean): number { + if (allowPositionInLeadingTrivia) { + return node.pos; + } + return getTokenPosOfNode(node, sourceFile, /*includeJSDoc*/ true); +} + +/** @internal */ +export function getTokenPosOfNode(node: Node, sourceFile: SourceFile, includeJSDoc?: boolean): number { + // With nodes that have no width (i.e. 'Missing' nodes), we actually *don't* + // want to skip trivia because this will launch us forward to the next token. + if (nodeIsMissing(node)) { + return node.pos; + } + if (isJSDocNodeKind(node.kind) || node.kind === SyntaxKind.JsxText) { + return skipTrivia(sourceFile.text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ true); + } + if (includeJSDoc && node.jsDoc && node.jsDoc.length > 0) { + return getTokenPosOfNode(node.jsDoc[0], sourceFile, /*includeJSDoc*/ false); + } + return skipTrivia(sourceFile.text, node.pos, /*stopAfterLineBreak*/ false, /*stopAtComments*/ false, /*inJSDoc*/ !!(node.flags & NodeFlags.JSDoc)); +} + +function nodeIsMissing(node: Node): boolean { + return node.pos === node.end && node.pos >= 0 && node.kind !== SyntaxKind.EndOfFile; +} + +function findPrecedingTokenImpl(sourceFile: SourceFile, position: number, startNode: Node): Node | undefined { + const find = (n: Node): Node | undefined => { + if (isTokenKind(n.kind) && n.kind !== SyntaxKind.EndOfFile) { + return n; + } + + let foundChild: Node | undefined; + let prevChild: Node | undefined; + + // Visit JSDoc nodes first (mirrors Go's VisitEachChildAndJSDoc). + if (n.jsDoc) { + for (const jsdoc of n.jsDoc) { + if (jsdoc.flags & NodeFlags.Reparsed) continue; + if (foundChild !== undefined) break; + if (position < jsdoc.end && (prevChild === undefined || prevChild.end <= position)) { + foundChild = jsdoc; + } + else { + prevChild = jsdoc; + } + } + } + + let skipSingleCommentChildrenImpl = false; + n.forEachChild( + node => { + if (node.flags & NodeFlags.Reparsed) { + return undefined; + } + if (skipSingleCommentChildrenImpl && isJSDocCommentChildKind(node.kind)) { + return undefined; + } + if (foundChild !== undefined) { + return undefined; + } + if (position < node.end && (prevChild === undefined || prevChild.end <= position)) { + foundChild = node; + } + else { + prevChild = node; + } + return undefined; + }, + nodes => { + skipSingleCommentChildrenImpl = isJSDocSingleCommentNodeList(nodes); + if (foundChild !== undefined) { + return undefined; + } + if (nodes.length > 0 && !skipSingleCommentChildrenImpl) { + const index = binarySearchForPrecedingToken(nodes, position); + if (index >= 0 && !(nodes[index].flags & NodeFlags.Reparsed)) { + foundChild = nodes[index]; + } + const lookupIndex = index >= 0 ? index - 1 : nodes.length - 1; + for (let i = lookupIndex; i >= 0; i--) { + if (!(nodes[i].flags & NodeFlags.Reparsed)) { + if (prevChild === undefined) { + prevChild = nodes[i]; + } + break; + } + } + } + return undefined; + }, + ); + + if (foundChild !== undefined) { + const start = getTokenPosOfNode(foundChild, sourceFile, /*includeJSDoc*/ true); + if (start >= position) { + if (position >= foundChild.pos) { + // We are in the leading trivia of foundChild. Check for JSDoc nodes of n + // preceding foundChild, mirroring Go's findPrecedingToken logic. + let jsDoc: Node | undefined; + if (n.jsDoc) { + for (let i = n.jsDoc.length - 1; i >= 0; i--) { + if (n.jsDoc[i].pos >= foundChild.pos) { + jsDoc = n.jsDoc[i]; + break; + } + } + } + if (jsDoc !== undefined) { + if (position < jsDoc.end) { + return find(jsDoc); + } + return findRightmostValidToken(sourceFile, jsDoc.end, n, position); + } + return findRightmostValidToken(sourceFile, foundChild.pos, n, -1); + } + // Answer is in tokens between two visited children. + return findRightmostValidToken(sourceFile, foundChild.pos, n, position); + } + return find(foundChild); + } + + if (position >= n.end) { + return findRightmostValidToken(sourceFile, n.end, n, -1); + } + return findRightmostValidToken(sourceFile, n.end, n, position); + }; + + return find(startNode); +} + +function findRightmostValidToken(sourceFile: SourceFile, endPos: number, containingNode: Node, position: number): Node | undefined { + if (position === -1) { + position = containingNode.end; + } + + const find = (n: Node, endPos: number): Node | undefined => { + if (isTokenKind(n.kind) && n.kind !== SyntaxKind.EndOfFile) { + return n; + } + + let rightmostValidNode: Node | undefined; + let hasChildren = false; + + // Visit JSDoc nodes first (mirrors Go's VisitEachChildAndJSDoc). + if (n.jsDoc) { + hasChildren = true; + for (const jsdoc of n.jsDoc) { + if (jsdoc.flags & NodeFlags.Reparsed) continue; + if (jsdoc.end > endPos || getTokenPosOfNode(jsdoc, sourceFile) >= position) continue; + if (isValidPrecedingNode(jsdoc, sourceFile)) { + rightmostValidNode = jsdoc; + } + } + } + + let skipSingleCommentChildren = false; + n.forEachChild( + node => { + if (node.flags & NodeFlags.Reparsed) { + return undefined; + } + if (skipSingleCommentChildren && isJSDocCommentChildKind(node.kind)) { + return undefined; + } + hasChildren = true; + if (node.end > endPos || getTokenPosOfNode(node, sourceFile) >= position) { + return undefined; + } + if (isValidPrecedingNode(node, sourceFile)) { + rightmostValidNode = node; + } + return undefined; + }, + nodes => { + // Skip single-comment JSDoc NodeLists (e.g. JSDocText children of a JSDoc node): + // In Go, these are stored as string properties and are never visited as children. + skipSingleCommentChildren = isJSDocSingleCommentNodeList(nodes); + if (nodes.length > 0 && !skipSingleCommentChildren) { + hasChildren = true; + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (node.flags & NodeFlags.Reparsed) continue; + if (node.end > endPos || getTokenPosOfNode(node, sourceFile) >= position) continue; + if (isValidPrecedingNode(node, sourceFile)) { + rightmostValidNode = node; + break; + } + } + } + return undefined; + }, + ); + + // Scan for syntactic tokens (e.g. `{`, `,`) between AST nodes, matching Go's + // findRightmostValidToken scanner step. + if (!shouldSkipChild(n)) { + const startPos = rightmostValidNode !== undefined ? rightmostValidNode.end : n.pos; + const targetEnd = Math.min(endPos, position); + if (startPos < targetEnd) { + const scanner = getScannerForSourceFile(sourceFile, startPos); + let pos = startPos; + let lastScannedToken: Node | undefined; + while (pos < targetEnd) { + const tokenStart = scanner.getTokenStart(); + if (tokenStart >= position) break; + const tokenFullStart = scanner.getTokenFullStart(); + const tokenEnd = scanner.getTokenEnd(); + const token = scanner.getToken(); + const flags = scanner.getTokenFlags(); + lastScannedToken = getOrCreateToken(sourceFile, token, tokenFullStart, tokenEnd, n, flags); + pos = tokenEnd; + scanner.scan(); + } + if (lastScannedToken !== undefined) { + return lastScannedToken; + } + } + } + + if (!hasChildren) { + if (n !== containingNode) { + return n; + } + return undefined; + } + + if (rightmostValidNode !== undefined) { + return find(rightmostValidNode, rightmostValidNode.end); + } + return undefined; + }; + + return find(containingNode, endPos); +} + +function isValidPrecedingNode(node: Node, sourceFile: SourceFile): boolean { + if (node.kind === SyntaxKind.EndOfFile) { + return false; + } + const start = getTokenPosOfNode(node, sourceFile); + const width = node.end - start; + return width > 0; +} + +function shouldSkipChild(node: Node): boolean { + return node.kind === SyntaxKind.JSDoc || + node.kind === SyntaxKind.JSDocText || + node.kind === SyntaxKind.JSDocTypeLiteral || + node.kind === SyntaxKind.JSDocSignature || + node.kind === SyntaxKind.JSDocLink || + node.kind === SyntaxKind.JSDocLinkCode || + node.kind === SyntaxKind.JSDocLinkPlain || + isJSDocTag(node); +} + +function isJSDocTag(node: Node): boolean { + return node.kind >= SyntaxKind.FirstJSDocTagNode && node.kind <= SyntaxKind.LastJSDocTagNode; +} + +// In Strada, if a JSDoc node has a single comment, that comment is represented as a string +// property as a simplification, and therefore that comment is not visited by forEachChild. +// To match, we skip single-element comment NodeLists within JSDoc/JSDocTag nodes. +function isJSDocCommentChildKind(kind: SyntaxKind): boolean { + switch (kind) { + case SyntaxKind.JSDocText: + case SyntaxKind.JSDocLink: + case SyntaxKind.JSDocLinkCode: + case SyntaxKind.JSDocLinkPlain: + return true; + default: + return false; + } +} + +function isJSDocSingleCommentNodeList(nodes: NodeArray): boolean { + return nodes.length === 1 && isJSDocCommentChildKind(nodes[0].kind); +} + +function getScannerForSourceFile(sourceFile: SourceFile, pos: number) { + const scanner = createScanner(/*skipTrivia*/ true, sourceFile.languageVariant, sourceFile.text); + scanner.resetTokenState(pos); + scanner.scan(); + return scanner; +} + +type Mutable = { -readonly [K in keyof T]: T[K]; }; + +function getOrCreateToken(sourceFile: SourceFile, kind: SyntaxKind, pos: number, end: number, parent: Node, _flags: number): Node { + const key = `${pos}_${end}`; + if (!sourceFile.tokenCache) { + sourceFile.tokenCache = new Map(); + } + + const existing = sourceFile.tokenCache.get(key); + if (existing !== undefined) { + return existing; + } + + const token: Mutable = createToken(kind as TokenSyntaxKind); + token.pos = pos; + token.end = end; + token.parent = parent; + sourceFile.tokenCache.set(key, token); + return token; +} + +const emptyArray: readonly Node[] = []; + +function assertHasRealPosition(node: Node): void { + if (node.pos < 0 || node.end < 0) { + throw new Error("Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine"); + } +} + +export function getChildren(node: Node, sourceFile: SourceFile = node.getSourceFile()): readonly Node[] { + // A SyntaxList already holds its (pre-materialized) children. + if (node.kind === SyntaxKind.SyntaxList) { + return (node as unknown as { children: readonly Node[]; }).children; + } + + if (isTokenKind(node.kind)) { + // EndOfFile may carry leading JSDoc; every other token has no children. The EndOfFile + // result must go through the cache: remote nodes rebuild .jsDoc on every access. + if (node.kind !== SyntaxKind.EndOfFile) { + return emptyArray; + } + } + else { + assertHasRealPosition(node); + } + + const cache = (sourceFile.childrenCache ??= new Map()); + const cached = cache.get(node); + + if (cached !== undefined) { + return cached; + } + + const children = node.kind === SyntaxKind.EndOfFile + ? node.jsDoc ?? emptyArray + : createChildren(node, sourceFile); + cache.set(node, children); + return children; +} + +function createChildren(node: Node, sourceFile: SourceFile): readonly Node[] { + const children: Node[] = []; + + // Inside a JSDoc comment there are no real tokens to synthesize. + if (shouldSkipChild(node)) { + node.forEachChild(child => void children.push(child)); + return children; + } + + // One scanner serves every run of synthetic tokens materialized for this node. + const scanner = createScanner(/*skipTrivia*/ true, sourceFile.languageVariant, sourceFile.text); + let pos = node.pos; + const processNode = (child: Node): undefined => { + // Reparsed subtrees (JSDoc types materialized into the AST) have positions inside + // the comment, not in this node's token range. + if (child.flags & NodeFlags.Reparsed) { + return; + } + addSyntheticNodes(children, pos, child.pos, node, sourceFile, scanner); + children.push(child); + pos = child.end; + }; + const processNodes = (nodes: NodeArray): undefined => { + if (nodes.length > 0 && !nodes.some(child => !(child.flags & NodeFlags.Reparsed))) { + return; + } + addSyntheticNodes(children, pos, nodes.pos, node, sourceFile, scanner); + children.push(createSyntaxListNode(nodes, node, sourceFile, scanner)); + pos = nodes.end; + }; + + // JSDoc attached to the node is leading content, processed first. + if (node.jsDoc) { + for (const jsDoc of node.jsDoc) { + processNode(jsDoc); + } + } + pos = node.pos; + node.forEachChild(processNode, processNodes); + addSyntheticNodes(children, pos, node.end, node, sourceFile, scanner); + return children; +} + +function addSyntheticNodes(children: Node[], pos: number, end: number, parent: Node, sourceFile: SourceFile, scanner: Scanner): void { + if (pos >= end) { + return; + } + scanner.resetTokenState(pos); + scanner.scan(); + while (pos < end) { + const token = scanner.getToken(); + const tokenEnd = scanner.getTokenEnd(); + if (tokenEnd <= end) { + // An identifier should never appear as trivia between AST children; skip defensively. + if (token !== SyntaxKind.Identifier) { + children.push(getOrCreateToken(sourceFile, token, pos, tokenEnd, parent, scanner.getTokenFlags())); + } + } + pos = tokenEnd; + if (token === SyntaxKind.EndOfFile) { + break; + } + scanner.scan(); + } +} + +function createSyntaxListNode(nodes: NodeArray, parent: Node, sourceFile: SourceFile, scanner: Scanner): Node { + const listChildren: Node[] = []; + let pos = nodes.pos; + for (const child of nodes) { + if (child.flags & NodeFlags.Reparsed) { + continue; + } + addSyntheticNodes(listChildren, pos, child.pos, parent, sourceFile, scanner); + listChildren.push(child); + pos = child.end; + } + addSyntheticNodes(listChildren, pos, nodes.end, parent, sourceFile, scanner); + const list = createSyntaxList(listChildren) as Mutable; + list.pos = nodes.pos; + list.end = nodes.end; + list.parent = parent; + return list as Node; +} + +export function getFirstToken(node: Node, sourceFile: SourceFile = node.getSourceFile()): Node | undefined { + if (isTokenKind(node.kind)) { + return undefined; + } + assertHasRealPosition(node); + const children = getChildren(node, sourceFile); + const child = children.find(kid => kid.kind < SyntaxKind.FirstJSDocNode || kid.kind > SyntaxKind.LastJSDocNode); + if (child === undefined) { + return undefined; + } + return child.kind < SyntaxKind.FirstNode ? child : getFirstToken(child, sourceFile); +} + +export function getLastToken(node: Node, sourceFile: SourceFile = node.getSourceFile()): Node | undefined { + if (isTokenKind(node.kind)) { + return undefined; + } + assertHasRealPosition(node); + const children = getChildren(node, sourceFile); + const child = children.length ? children[children.length - 1] : undefined; + if (child === undefined) { + return undefined; + } + return child.kind < SyntaxKind.FirstNode ? child : getLastToken(child, sourceFile); +} + +/** Binary search a node list for the node containing position. */ +function binarySearchNodeList( + nodes: NodeArray, + testNode: (node: Node) => number, + onLeft: (node: Node, index: number, arr: NodeArray) => void, + onMatch: (node: Node) => void, +): void { + let lo = 0; + let hi = nodes.length - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const node = nodes[mid]; + if (node.flags & NodeFlags.Reparsed) { + // Skip reparsed nodes: try to find a non-reparsed node nearby + let found = false; + for (let i = mid + 1; i <= hi; i++) { + if (!(nodes[i].flags & NodeFlags.Reparsed)) { + const cmp = testNode(nodes[i]); + if (cmp < 0) { + onLeft(nodes[i], i, nodes); + lo = i + 1; + } + else if (cmp > 0) { + hi = i - 1; + } + else { + onMatch(nodes[i]); + return; + } + found = true; + break; + } + } + if (!found) { + hi = mid - 1; + } + continue; + } + const cmp = testNode(node); + if (cmp < 0) { + onLeft(node, mid, nodes); + lo = mid + 1; + } + else if (cmp > 0) { + hi = mid - 1; + } + else { + onMatch(node); + return; + } + } +} + +function binarySearchForPrecedingToken(nodes: NodeArray, position: number): number { + let lo = 0; + let hi = nodes.length - 1; + let result = -1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const node = nodes[mid]; + if (node.flags & NodeFlags.Reparsed) { + lo = mid + 1; + continue; + } + if (position < node.end) { + if (mid === 0 || position >= nodes[mid - 1].end) { + result = mid; + break; + } + hi = mid - 1; + } + else { + lo = mid + 1; + } + } + return result; +} diff --git a/packages/typescript/src/ast/clone.ts b/packages/typescript/src/ast/clone.ts index f36af7617a1a8..5b132bbb261bc 100644 --- a/packages/typescript/src/ast/clone.ts +++ b/packages/typescript/src/ast/clone.ts @@ -1,141 +1,141 @@ -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - Node, - NodeArray, - NumericLiteral, - ReadonlyTextRange, - StringLiteral, -} from "./ast.ts"; -import { - cloneNode, - createNodeArray, - createNumericLiteral, - createStringLiteral, -} from "./factory.generated.ts"; -import { visitEachChild } from "./visitor.ts"; - -function isArray(value: any): value is readonly unknown[] { - // See: https://github.com/microsoft/TypeScript/issues/17002 - return Array.isArray(value); -} - -function forEachChildRecursively(rootNode: Node, cbNode: (node: Node, parent: Node) => T | "skip" | undefined, cbNodes?: (nodes: NodeArray, parent: Node) => T | "skip" | undefined): T | undefined { - const queue: (Node | NodeArray)[] = gatherPossibleChildren(rootNode); - const parents: Node[] = []; // tracks parent references for elements in queue - while (parents.length < queue.length) { - parents.push(rootNode); - } - while (queue.length !== 0) { - const current = queue.pop()!; - const parent = parents.pop()!; - if (isArray(current)) { - if (cbNodes) { - const res = cbNodes(current, parent); - if (res) { - if (res === "skip") continue; - return res; - } - } - for (let i = current.length - 1; i >= 0; --i) { - queue.push(current[i]); - parents.push(parent); - } - } - else { - const res = cbNode(current, parent); - if (res) { - if (res === "skip") continue; - return res; - } - if (current.kind >= SyntaxKind.FirstNode) { - // add children in reverse order to the queue, so popping gives the first child - for (const child of gatherPossibleChildren(current)) { - queue.push(child); - parents.push(current); - } - } - } - } -} - -function gatherPossibleChildren(node: Node) { - const children: (Node | NodeArray)[] = []; - node.forEachChild(addWorkItem, addWorkItem); // By using a stack above and `unshift` here, we emulate a depth-first preorder traversal - return children; - - function addWorkItem(n: Node | NodeArray) { - children.unshift(n); - } -} - -function setParentRecursive(rootNode: T | undefined): T | undefined { - if (rootNode === undefined) return rootNode; - forEachChildRecursively(rootNode, (child, parent) => { - (child as any).parent = parent; - return undefined; - }); - return rootNode; -} - -function setTextRange(node: T, range: ReadonlyTextRange | undefined): T { - if (range) { - (node as any).pos = range.pos; - (node as any).end = range.end; - } - return node; -} - -/** - * Creates a deep clone of a node and its subtree, synthesizing new nodes for every child. - * The resulting tree has fully set parent pointers. - * - * @param node The node to clone. - * @param includeTrivia Whether to preserve the text range (pos/end) on the clone. - */ -export function getSynthesizedDeepClone(node: T, includeTrivia?: boolean): T; -export function getSynthesizedDeepClone(node: T | undefined, includeTrivia?: boolean): T | undefined; -export function getSynthesizedDeepClone(node: T | undefined, includeTrivia = true): T | undefined { - const clone = node && getSynthesizedDeepCloneWorker(node); - if (clone && !includeTrivia) { - (clone as any).pos = -1; - (clone as any).end = -1; - } - return setParentRecursive(clone); -} - -/** - * Creates deep clones of a NodeArray and all its elements. - */ -export function getSynthesizedDeepClones(nodes: NodeArray, includeTrivia?: boolean): NodeArray; -export function getSynthesizedDeepClones(nodes: NodeArray | undefined, includeTrivia?: boolean): NodeArray | undefined; -export function getSynthesizedDeepClones(nodes: NodeArray | undefined, includeTrivia = true): NodeArray | undefined { - if (nodes) { - const cloned = createNodeArray( - nodes.map(n => getSynthesizedDeepClone(n, includeTrivia)), - nodes.pos, - nodes.end, - ); - return cloned; - } - return nodes; -} - -function getSynthesizedDeepCloneWorker(node: T): T { - const visited = visitEachChild(node, n => getSynthesizedDeepCloneWorker(n)); - - if (visited === node) { - // Leaf node — visitEachChild returned the same node since there are no children. - // We need to explicitly clone it. - const clone = node.kind === SyntaxKind.StringLiteral - ? createStringLiteral((node as Node as StringLiteral).text, (node as Node as StringLiteral).tokenFlags) as Node as T - : node.kind === SyntaxKind.NumericLiteral - ? createNumericLiteral((node as Node as NumericLiteral).text, (node as Node as NumericLiteral).tokenFlags) as Node as T - : cloneNode(node); - return setTextRange(clone, node); - } - - // visitEachChild already created a new node with visited children. - // Clear the parent since setParentRecursive will set it later. - (visited as any).parent = undefined!; - return visited; -} +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + Node, + NodeArray, + NumericLiteral, + ReadonlyTextRange, + StringLiteral, +} from "./ast.ts"; +import { + cloneNode, + createNodeArray, + createNumericLiteral, + createStringLiteral, +} from "./factory.generated.ts"; +import { visitEachChild } from "./visitor.ts"; + +function isArray(value: any): value is readonly unknown[] { + // See: https://github.com/microsoft/TypeScript/issues/17002 + return Array.isArray(value); +} + +function forEachChildRecursively(rootNode: Node, cbNode: (node: Node, parent: Node) => T | "skip" | undefined, cbNodes?: (nodes: NodeArray, parent: Node) => T | "skip" | undefined): T | undefined { + const queue: (Node | NodeArray)[] = gatherPossibleChildren(rootNode); + const parents: Node[] = []; // tracks parent references for elements in queue + while (parents.length < queue.length) { + parents.push(rootNode); + } + while (queue.length !== 0) { + const current = queue.pop()!; + const parent = parents.pop()!; + if (isArray(current)) { + if (cbNodes) { + const res = cbNodes(current, parent); + if (res) { + if (res === "skip") continue; + return res; + } + } + for (let i = current.length - 1; i >= 0; --i) { + queue.push(current[i]); + parents.push(parent); + } + } + else { + const res = cbNode(current, parent); + if (res) { + if (res === "skip") continue; + return res; + } + if (current.kind >= SyntaxKind.FirstNode) { + // add children in reverse order to the queue, so popping gives the first child + for (const child of gatherPossibleChildren(current)) { + queue.push(child); + parents.push(current); + } + } + } + } +} + +function gatherPossibleChildren(node: Node) { + const children: (Node | NodeArray)[] = []; + node.forEachChild(addWorkItem, addWorkItem); // By using a stack above and `unshift` here, we emulate a depth-first preorder traversal + return children; + + function addWorkItem(n: Node | NodeArray) { + children.unshift(n); + } +} + +function setParentRecursive(rootNode: T | undefined): T | undefined { + if (rootNode === undefined) return rootNode; + forEachChildRecursively(rootNode, (child, parent) => { + (child as any).parent = parent; + return undefined; + }); + return rootNode; +} + +function setTextRange(node: T, range: ReadonlyTextRange | undefined): T { + if (range) { + (node as any).pos = range.pos; + (node as any).end = range.end; + } + return node; +} + +/** + * Creates a deep clone of a node and its subtree, synthesizing new nodes for every child. + * The resulting tree has fully set parent pointers. + * + * @param node The node to clone. + * @param includeTrivia Whether to preserve the text range (pos/end) on the clone. + */ +export function getSynthesizedDeepClone(node: T, includeTrivia?: boolean): T; +export function getSynthesizedDeepClone(node: T | undefined, includeTrivia?: boolean): T | undefined; +export function getSynthesizedDeepClone(node: T | undefined, includeTrivia = true): T | undefined { + const clone = node && getSynthesizedDeepCloneWorker(node); + if (clone && !includeTrivia) { + (clone as any).pos = -1; + (clone as any).end = -1; + } + return setParentRecursive(clone); +} + +/** + * Creates deep clones of a NodeArray and all its elements. + */ +export function getSynthesizedDeepClones(nodes: NodeArray, includeTrivia?: boolean): NodeArray; +export function getSynthesizedDeepClones(nodes: NodeArray | undefined, includeTrivia?: boolean): NodeArray | undefined; +export function getSynthesizedDeepClones(nodes: NodeArray | undefined, includeTrivia = true): NodeArray | undefined { + if (nodes) { + const cloned = createNodeArray( + nodes.map(n => getSynthesizedDeepClone(n, includeTrivia)), + nodes.pos, + nodes.end, + ); + return cloned; + } + return nodes; +} + +function getSynthesizedDeepCloneWorker(node: T): T { + const visited = visitEachChild(node, n => getSynthesizedDeepCloneWorker(n)); + + if (visited === node) { + // Leaf node — visitEachChild returned the same node since there are no children. + // We need to explicitly clone it. + const clone = node.kind === SyntaxKind.StringLiteral + ? createStringLiteral((node as Node as StringLiteral).text, (node as Node as StringLiteral).tokenFlags) as Node as T + : node.kind === SyntaxKind.NumericLiteral + ? createNumericLiteral((node as Node as NumericLiteral).text, (node as Node as NumericLiteral).tokenFlags) as Node as T + : cloneNode(node); + return setTextRange(clone, node); + } + + // visitEachChild already created a new node with visited children. + // Clear the parent since setParentRecursive will set it later. + (visited as any).parent = undefined!; + return visited; +} diff --git a/packages/typescript/src/ast/factory.generated.ts b/packages/typescript/src/ast/factory.generated.ts index 7a7a19b78457c..556e264c52ac4 100644 --- a/packages/typescript/src/ast/factory.generated.ts +++ b/packages/typescript/src/ast/factory.generated.ts @@ -1,6096 +1,6096 @@ -// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. - -import { NodeFlags } from "#enums/nodeFlags"; -import { SyntaxKind } from "#enums/syntaxKind"; -import { TokenFlags } from "#enums/tokenFlags"; -import type { - ArrayBindingPattern, - ArrayLiteralExpression, - ArrayTypeNode, - ArrowFunction, - AsExpression, - AssertsKeyword, - AsteriskToken, - AwaitExpression, - AwaitKeyword, - BigIntLiteral, - BinaryExpression, - BinaryOperatorToken, - BindingElement, - BindingName, - Block, - BreakStatement, - CallExpression, - CallSignatureDeclaration, - CaseBlock, - CaseClause, - CaseOrDefaultClause, - CatchClause, - ClassDeclaration, - ClassElement, - ClassExpression, - ClassStaticBlockDeclaration, - ColonToken, - ComputedPropertyName, - ConciseBody, - ConditionalExpression, - ConditionalTypeNode, - ConstructorDeclaration, - ConstructorTypeNode, - ConstructSignatureDeclaration, - ContinueStatement, - DebuggerStatement, - Decorator, - DefaultClause, - DeleteExpression, - DoStatement, - DotDotDotToken, - ElementAccessExpression, - EmptyStatement, - EndOfFile, - EntityName, - EnumDeclaration, - EnumMember, - EqualsGreaterThanToken, - EqualsToken, - ExclamationToken, - ExportAssignment, - ExportDeclaration, - ExportSpecifier, - Expression, - ExpressionStatement, - ExpressionWithTypeArguments, - ExternalModuleReference, - ForInitializer, - ForInStatement, - ForOfStatement, - ForStatement, - FunctionBody, - FunctionDeclaration, - FunctionExpression, - FunctionTypeNode, - GetAccessorDeclaration, - HeritageClause, - HeritageClauseElement, - Identifier, - IfStatement, - ImportAttribute, - ImportAttributeName, - ImportAttributes, - ImportClause, - ImportDeclaration, - ImportEqualsDeclaration, - ImportPhaseModifierSyntaxKind, - ImportSpecifier, - ImportTypeNode, - IndexedAccessTypeNode, - IndexSignatureDeclaration, - InferTypeNode, - InterfaceDeclaration, - IntersectionTypeNode, - JSDoc, - JSDocAllType, - JSDocAugmentsTag, - JSDocCallbackTag, - JSDocComment, - JSDocDeprecatedTag, - JSDocFullName, - JSDocImplementsTag, - JSDocImportTag, - JSDocLink, - JSDocLinkCode, - JSDocLinkPlain, - JSDocNameReference, - JSDocNonNullableType, - JSDocNullableType, - JSDocOptionalType, - JSDocOverloadTag, - JSDocOverrideTag, - JSDocParameterTag, - JSDocPrivateTag, - JSDocPropertyTag, - JSDocProtectedTag, - JSDocPublicTag, - JSDocReadonlyTag, - JSDocReturnTag, - JSDocSatisfiesTag, - JSDocSeeTag, - JSDocSignature, - JSDocTag, - JSDocTemplateTag, - JSDocText, - JSDocThisTag, - JSDocThrowsTag, - JSDocTypedefTag, - JSDocTypeExpression, - JSDocTypeLiteral, - JSDocTypeTag, - JSDocUnknownTag, - JSDocVariadicType, - JsxAttribute, - JsxAttributeLike, - JsxAttributeName, - JsxAttributes, - JsxAttributeValue, - JsxChild, - JsxClosingElement, - JsxClosingFragment, - JsxElement, - JsxExpression, - JsxFragment, - JsxNamespacedName, - JsxOpeningElement, - JsxOpeningFragment, - JsxSelfClosingElement, - JsxSpreadAttribute, - JsxTagNameExpression, - JsxText, - KeywordExpression, - KeywordExpressionSyntaxKind, - KeywordTypeNode, - KeywordTypeSyntaxKind, - LabeledStatement, - LeftHandSideExpression, - LiteralTypeNode, - MappedTypeNode, - MemberName, - MetaProperty, - MethodDeclaration, - MethodSignatureDeclaration, - MinusToken, - MissingDeclaration, - ModifierLike, - ModuleBlock, - ModuleBody, - ModuleDeclaration, - ModuleExportName, - ModuleName, - ModuleReference, - NamedExportBindings, - NamedExports, - NamedImportBindings, - NamedImports, - NamedTupleMember, - NamespaceExport, - NamespaceExportDeclaration, - NamespaceImport, - NewExpression, - Node, - NodeArray, - NonNullExpression, - NoSubstitutionTemplateLiteral, - NotEmittedStatement, - NotEmittedTypeElement, - NumericLiteral, - ObjectBindingPattern, - ObjectLiteralElementLike, - ObjectLiteralExpression, - OmittedExpression, - OptionalTypeNode, - ParameterDeclaration, - ParenthesizedExpression, - ParenthesizedTypeNode, - PartiallyEmittedExpression, - PathKey, - PlusToken, - PostfixUnaryExpression, - PrefixUnaryExpression, - PrivateIdentifier, - PropertyAccessExpression, - PropertyAssignment, - PropertyDeclaration, - PropertyName, - PropertySignatureDeclaration, - QualifiedName, - QuestionDotToken, - QuestionToken, - ReadonlyKeyword, - RegularExpressionLiteral, - RestTypeNode, - ReturnStatement, - RootedFilePath, - SatisfiesExpression, - SemicolonClassElement, - SetAccessorDeclaration, - ShorthandPropertyAssignment, - SourceFile, - SpreadAssignment, - SpreadElement, - Statement, - StringLiteral, - SwitchStatement, - SyntaxList, - SyntheticExpression, - SyntheticReferenceExpression, - TaggedTemplateExpression, - TemplateExpression, - TemplateHead, - TemplateLiteral, - TemplateLiteralTypeNode, - TemplateLiteralTypeSpan, - TemplateMiddle, - TemplateMiddleOrTail, - TemplateSpan, - TemplateTail, - ThisTypeNode, - ThrowStatement, - Token, - TokenSyntaxKind, - TryStatement, - TupleTypeNode, - TypeAliasDeclaration, - TypeAssertion, - TypeElement, - TypeLiteralNode, - TypeNode, - TypeOfExpression, - TypeOperatorNode, - TypeParameterDeclaration, - TypePredicateNode, - TypePredicateParameterName, - TypeQueryNode, - TypeReferenceNode, - UnionTypeNode, - VariableDeclaration, - VariableDeclarationList, - VariableStatement, - VoidExpression, - WhileStatement, - WithStatement, - YieldExpression, -} from "./ast.ts"; -import { - getChildren, - getFirstToken, - getLastToken, - getTokenPosOfNode, -} from "./astnav.ts"; -import { cloneSourceFileData } from "./utils.ts"; -import { - forEachChildOfJSDocParameterTag, - forEachChildOfJSDocPropertyTag, - yieldEachChildOfJSDocParameterTag, - yieldEachChildOfJSDocPropertyTag, -} from "./visitor.ts"; - -export class NodeObject { - readonly kind: SyntaxKind; - flags: NodeFlags = 0 as NodeFlags; - readonly pos: number = -1; - readonly end: number = -1; - parent: Node = undefined!; - _data: any; - - constructor(kind: SyntaxKind, data: any) { - this.kind = kind; - this._data = data; - } - - get ambientModuleNames(): any { - return this._data?.ambientModuleNames; - } - get argument(): any { - return this._data?.argument; - } - get argumentExpression(): any { - return this._data?.argumentExpression; - } - get arguments(): any { - return this._data?.arguments; - } - get assertsModifier(): any { - return this._data?.assertsModifier; - } - get asteriskToken(): any { - return this._data?.asteriskToken; - } - get attributes(): any { - return this._data?.attributes; - } - get awaitModifier(): any { - return this._data?.awaitModifier; - } - get block(): any { - return this._data?.block; - } - get body(): any { - return this._data?.body; - } - get canonicalSourceFileName(): any { - return this._data?.canonicalSourceFileName; - } - get caseBlock(): any { - return this._data?.caseBlock; - } - get catchClause(): any { - return this._data?.catchClause; - } - get checkType(): any { - return this._data?.checkType; - } - get children(): any { - return this._data?.children; - } - get className(): any { - return this._data?.className; - } - get clauses(): any { - return this._data?.clauses; - } - get closingElement(): any { - return this._data?.closingElement; - } - get closingFragment(): any { - return this._data?.closingFragment; - } - get colonToken(): any { - return this._data?.colonToken; - } - get comment(): any { - return this._data?.comment; - } - get condition(): any { - return this._data?.condition; - } - get constraint(): any { - return this._data?.constraint; - } - get containsOnlyTriviaWhiteSpaces(): any { - return this._data?.containsOnlyTriviaWhiteSpaces; - } - get contentMapper(): any { - return this._data?.contentMapper; - } - get declarationList(): any { - return this._data?.declarationList; - } - get declarations(): any { - return this._data?.declarations; - } - get defaultType(): any { - return this._data?.defaultType; - } - get diagnosticDirectives(): any { - return this._data?.diagnosticDirectives; - } - get dotDotDotToken(): any { - return this._data?.dotDotDotToken; - } - get elementType(): any { - return this._data?.elementType; - } - get elements(): any { - return this._data?.elements; - } - get elseStatement(): any { - return this._data?.elseStatement; - } - get endOfFileToken(): any { - return this._data?.endOfFileToken; - } - get equalsGreaterThanToken(): any { - return this._data?.equalsGreaterThanToken; - } - get equalsToken(): any { - return this._data?.equalsToken; - } - get exclamationToken(): any { - return this._data?.exclamationToken; - } - get exportClause(): any { - return this._data?.exportClause; - } - get exprName(): any { - return this._data?.exprName; - } - get expression(): any { - return this._data?.expression; - } - get extendsType(): any { - return this._data?.extendsType; - } - get externalModuleIndicator(): any { - return this._data?.externalModuleIndicator; - } - get falseType(): any { - return this._data?.falseType; - } - get fileName(): any { - return this._data?.fileName; - } - get finallyBlock(): any { - return this._data?.finallyBlock; - } - get head(): any { - return this._data?.head; - } - get heritageClauses(): any { - return this._data?.heritageClauses; - } - get importClause(): any { - return this._data?.importClause; - } - get imports(): any { - return this._data?.imports; - } - get incrementor(): any { - return this._data?.incrementor; - } - get indexType(): any { - return this._data?.indexType; - } - get initializer(): any { - return this._data?.initializer; - } - get isArrayType(): any { - return this._data?.isArrayType; - } - get isBracketed(): any { - return this._data?.isBracketed; - } - get isDeclarationFile(): any { - return this._data?.isDeclarationFile; - } - get isExportEquals(): any { - return this._data?.isExportEquals; - } - get isNameFirst(): any { - return this._data?.isNameFirst; - } - get isSpread(): any { - return this._data?.isSpread; - } - get isTypeOf(): any { - return this._data?.isTypeOf; - } - get isTypeOnly(): any { - return this._data?.isTypeOnly; - } - get jsdocPropertyTags(): any { - return this._data?.jsdocPropertyTags; - } - get keyword(): any { - return this._data?.keyword; - } - get keywordToken(): any { - return this._data?.keywordToken; - } - get label(): any { - return this._data?.label; - } - get languageVariant(): any { - return this._data?.languageVariant; - } - get left(): any { - return this._data?.left; - } - get libReferenceDirectives(): any { - return this._data?.libReferenceDirectives; - } - get literal(): any { - return this._data?.literal; - } - get members(): any { - return this._data?.members; - } - get modifiers(): any { - return this._data?.modifiers; - } - get moduleAugmentations(): any { - return this._data?.moduleAugmentations; - } - get moduleReference(): any { - return this._data?.moduleReference; - } - get moduleSpecifier(): any { - return this._data?.moduleSpecifier; - } - get multiLine(): any { - return this._data?.multiLine; - } - get name(): any { - return this._data?.name; - } - get nameExpression(): any { - return this._data?.nameExpression; - } - get nameType(): any { - return this._data?.nameType; - } - get namedBindings(): any { - return this._data?.namedBindings; - } - get namespace(): any { - return this._data?.namespace; - } - get objectAssignmentInitializer(): any { - return this._data?.objectAssignmentInitializer; - } - get objectType(): any { - return this._data?.objectType; - } - get openingElement(): any { - return this._data?.openingElement; - } - get openingFragment(): any { - return this._data?.openingFragment; - } - get operand(): any { - return this._data?.operand; - } - get operator(): any { - return this._data?.operator; - } - get operatorToken(): any { - return this._data?.operatorToken; - } - get originalText(): any { - return this._data?.originalText; - } - get parameterName(): any { - return this._data?.parameterName; - } - get parameters(): any { - return this._data?.parameters; - } - get path(): any { - return this._data?.path; - } - get phaseModifier(): any { - return this._data?.phaseModifier; - } - get postfixToken(): any { - return this._data?.postfixToken; - } - get properties(): any { - return this._data?.properties; - } - get propertyName(): any { - return this._data?.propertyName; - } - get qualifier(): any { - return this._data?.qualifier; - } - get questionDotToken(): any { - return this._data?.questionDotToken; - } - get questionToken(): any { - return this._data?.questionToken; - } - get rawText(): any { - return this._data?.rawText; - } - get readonlyToken(): any { - return this._data?.readonlyToken; - } - get referencedFiles(): any { - return this._data?.referencedFiles; - } - get right(): any { - return this._data?.right; - } - get scriptKind(): any { - return this._data?.scriptKind; - } - get spanMap(): any { - return this._data?.spanMap; - } - get statement(): any { - return this._data?.statement; - } - get statements(): any { - return this._data?.statements; - } - get supplementalSourceFileNames(): any { - return this._data?.supplementalSourceFileNames; - } - get tag(): any { - return this._data?.tag; - } - get tagName(): any { - return this._data?.tagName; - } - get tags(): any { - return this._data?.tags; - } - get template(): any { - return this._data?.template; - } - get templateFlags(): any { - return this._data?.templateFlags; - } - get templateSpans(): any { - return this._data?.templateSpans; - } - get text(): any { - return this._data?.text; - } - get thenStatement(): any { - return this._data?.thenStatement; - } - get thisArg(): any { - return this._data?.thisArg; - } - get token(): any { - return this._data?.token; - } - get tokenCache(): any { - return this._data?.tokenCache; - } - get tokenFlags(): any { - return this._data?.tokenFlags; - } - get trueType(): any { - return this._data?.trueType; - } - get tryBlock(): any { - return this._data?.tryBlock; - } - get tupleNameSource(): any { - return this._data?.tupleNameSource; - } - get type(): any { - return this._data?.type; - } - get typeArguments(): any { - return this._data?.typeArguments; - } - get typeExpression(): any { - return this._data?.typeExpression; - } - get typeName(): any { - return this._data?.typeName; - } - get typeParameter(): any { - return this._data?.typeParameter; - } - get typeParameters(): any { - return this._data?.typeParameters; - } - get typeReferenceDirectives(): any { - return this._data?.typeReferenceDirectives; - } - get types(): any { - return this._data?.types; - } - get value(): any { - return this._data?.value; - } - get variableDeclaration(): any { - return this._data?.variableDeclaration; - } - get virtualFileName(): any { - return this._data?.virtualFileName; - } - get whenFalse(): any { - return this._data?.whenFalse; - } - get whenTrue(): any { - return this._data?.whenTrue; - } - - forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined { - const fn = forEachChildTable[this.kind]; - return fn ? fn(this._data, visitor, visitArray) : undefined; - } - - childrenIter(): Generator { - const fn = yieldEachChildTable[this.kind]; - return fn ? fn(this._data) : emptyChildrenIter(); - } - - getSourceFile(): SourceFile { - let node: Node = this as unknown as Node; - while (node.parent) node = node.parent; - return node as unknown as SourceFile; - } - - getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number { - return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment); - } - - getFullStart(): number { - return this.pos; - } - - getEnd(): number { - return this.end; - } - - getWidth(sourceFile?: SourceFile): number { - return this.getEnd() - this.getStart(sourceFile); - } - - getFullWidth(): number { - return this.end - this.pos; - } - - getLeadingTriviaWidth(sourceFile?: SourceFile): number { - return this.getStart(sourceFile) - this.pos; - } - - getFullText(sourceFile?: SourceFile): string { - return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end); - } - - getText(sourceFile?: SourceFile): string { - sourceFile ??= this.getSourceFile(); - return sourceFile.text.substring(this.getStart(sourceFile), this.end); - } - - getChildCount(sourceFile?: SourceFile): number { - return this.getChildren(sourceFile).length; - } - - getChildAt(index: number, sourceFile?: SourceFile): Node { - return this.getChildren(sourceFile)[index]; - } - - getChildren(sourceFile?: SourceFile): readonly Node[] { - return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } - - getFirstToken(sourceFile?: SourceFile): Node | undefined { - return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } - - getLastToken(sourceFile?: SourceFile): Node | undefined { - return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); - } -} - -function isNodeArray(array: readonly T[]): array is NodeArray { - return "pos" in array && "end" in array; -} - -export function createNodeArray(elements: readonly T[], pos: number = -1, end: number = -1): NodeArray { - if (isNodeArray(elements)) return elements; - const arr = elements.slice() as unknown as NodeArray & { pos: number; end: number; }; - arr.pos = pos; - arr.end = end; - return arr; -} - -export function cloneNode(node: T): T { - const data = cloneNodeData(node); - const clone = new NodeObject(node.kind, data); - (clone as any).flags = node.flags; - (clone as any).pos = node.pos; - (clone as any).end = node.end; - return clone as unknown as T; -} - -function cloneNodeData(node: Node): any { - const n = node as any; - switch (node.kind) { - case SyntaxKind.Identifier: - return { text: n.text }; - case SyntaxKind.PrivateIdentifier: - return { text: n.text }; - case SyntaxKind.QualifiedName: - return { left: n.left, right: n.right }; - case SyntaxKind.ComputedPropertyName: - return { expression: n.expression }; - case SyntaxKind.Decorator: - return { expression: n.expression }; - case SyntaxKind.IfStatement: - return { expression: n.expression, thenStatement: n.thenStatement, elseStatement: n.elseStatement }; - case SyntaxKind.DoStatement: - return { statement: n.statement, expression: n.expression }; - case SyntaxKind.WhileStatement: - return { expression: n.expression, statement: n.statement }; - case SyntaxKind.ForStatement: - return { initializer: n.initializer, condition: n.condition, incrementor: n.incrementor, statement: n.statement }; - case SyntaxKind.BreakStatement: - return { label: n.label }; - case SyntaxKind.ContinueStatement: - return { label: n.label }; - case SyntaxKind.ReturnStatement: - return { expression: n.expression }; - case SyntaxKind.WithStatement: - return { expression: n.expression, statement: n.statement }; - case SyntaxKind.SwitchStatement: - return { expression: n.expression, caseBlock: n.caseBlock }; - case SyntaxKind.CaseBlock: - return { clauses: n.clauses }; - case SyntaxKind.ThrowStatement: - return { expression: n.expression }; - case SyntaxKind.TryStatement: - return { tryBlock: n.tryBlock, catchClause: n.catchClause, finallyBlock: n.finallyBlock }; - case SyntaxKind.CatchClause: - return { variableDeclaration: n.variableDeclaration, block: n.block }; - case SyntaxKind.LabeledStatement: - return { label: n.label, statement: n.statement }; - case SyntaxKind.ExpressionStatement: - return { expression: n.expression }; - case SyntaxKind.Block: - return { statements: n.statements, multiLine: n.multiLine }; - case SyntaxKind.VariableStatement: - return { modifiers: n.modifiers, declarationList: n.declarationList }; - case SyntaxKind.VariableDeclaration: - return { name: n.name, exclamationToken: n.exclamationToken, type: n.type, initializer: n.initializer }; - case SyntaxKind.VariableDeclarationList: - return { declarations: n.declarations }; - case SyntaxKind.Parameter: - return { modifiers: n.modifiers, dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type, initializer: n.initializer }; - case SyntaxKind.BindingElement: - return { dotDotDotToken: n.dotDotDotToken, propertyName: n.propertyName, name: n.name, initializer: n.initializer }; - case SyntaxKind.MissingDeclaration: - return { modifiers: n.modifiers }; - case SyntaxKind.FunctionDeclaration: - return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.ClassDeclaration: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; - case SyntaxKind.ClassExpression: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; - case SyntaxKind.HeritageClause: - return { token: n.token, types: n.types }; - case SyntaxKind.InterfaceDeclaration: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; - case SyntaxKind.TypeAliasDeclaration: - case SyntaxKind.JSTypeAliasDeclaration: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, type: n.type }; - case SyntaxKind.EnumMember: - return { name: n.name, initializer: n.initializer }; - case SyntaxKind.EnumDeclaration: - return { modifiers: n.modifiers, name: n.name, members: n.members }; - case SyntaxKind.ModuleBlock: - return { statements: n.statements }; - case SyntaxKind.ImportDeclaration: - case SyntaxKind.JSImportDeclaration: - return { modifiers: n.modifiers, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; - case SyntaxKind.ExternalModuleReference: - return { expression: n.expression }; - case SyntaxKind.NamespaceImport: - return { name: n.name }; - case SyntaxKind.NamedImports: - return { elements: n.elements }; - case SyntaxKind.ExportAssignment: - return { modifiers: n.modifiers, isExportEquals: n.isExportEquals, type: n.type, expression: n.expression }; - case SyntaxKind.NamespaceExportDeclaration: - return { modifiers: n.modifiers, name: n.name }; - case SyntaxKind.NamespaceExport: - return { name: n.name }; - case SyntaxKind.NamedExports: - return { elements: n.elements }; - case SyntaxKind.ExportSpecifier: - return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; - case SyntaxKind.CallSignature: - return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.ConstructSignature: - return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.Constructor: - return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.GetAccessor: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.SetAccessor: - return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.IndexSignature: - return { modifiers: n.modifiers, parameters: n.parameters, type: n.type }; - case SyntaxKind.MethodSignature: - return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.MethodDeclaration: - return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.PropertySignature: - return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; - case SyntaxKind.PropertyDeclaration: - return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; - case SyntaxKind.ClassStaticBlockDeclaration: - return { modifiers: n.modifiers, body: n.body }; - case SyntaxKind.StringLiteral: - return { text: n.text, tokenFlags: n.tokenFlags }; - case SyntaxKind.NumericLiteral: - return { text: n.text, tokenFlags: n.tokenFlags }; - case SyntaxKind.BigIntLiteral: - return { text: n.text, tokenFlags: n.tokenFlags }; - case SyntaxKind.RegularExpressionLiteral: - return { text: n.text, tokenFlags: n.tokenFlags }; - case SyntaxKind.NoSubstitutionTemplateLiteral: - return { text: n.text, templateFlags: n.templateFlags }; - case SyntaxKind.BinaryExpression: - return { modifiers: n.modifiers, left: n.left, type: n.type, operatorToken: n.operatorToken, right: n.right }; - case SyntaxKind.PrefixUnaryExpression: - return { operator: n.operator, operand: n.operand }; - case SyntaxKind.PostfixUnaryExpression: - return { operand: n.operand, operator: n.operator }; - case SyntaxKind.YieldExpression: - return { asteriskToken: n.asteriskToken, expression: n.expression }; - case SyntaxKind.ArrowFunction: - return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, equalsGreaterThanToken: n.equalsGreaterThanToken, body: n.body }; - case SyntaxKind.FunctionExpression: - return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; - case SyntaxKind.AsExpression: - return { expression: n.expression, type: n.type }; - case SyntaxKind.SatisfiesExpression: - return { expression: n.expression, type: n.type }; - case SyntaxKind.ConditionalExpression: - return { condition: n.condition, questionToken: n.questionToken, whenTrue: n.whenTrue, colonToken: n.colonToken, whenFalse: n.whenFalse }; - case SyntaxKind.PropertyAccessExpression: - return { expression: n.expression, questionDotToken: n.questionDotToken, name: n.name }; - case SyntaxKind.ElementAccessExpression: - return { expression: n.expression, questionDotToken: n.questionDotToken, argumentExpression: n.argumentExpression }; - case SyntaxKind.CallExpression: - return { expression: n.expression, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, arguments: n.arguments }; - case SyntaxKind.NewExpression: - return { expression: n.expression, typeArguments: n.typeArguments, arguments: n.arguments }; - case SyntaxKind.MetaProperty: - return { keywordToken: n.keywordToken, name: n.name }; - case SyntaxKind.NonNullExpression: - return { expression: n.expression }; - case SyntaxKind.SpreadElement: - return { expression: n.expression }; - case SyntaxKind.TemplateExpression: - return { head: n.head, templateSpans: n.templateSpans }; - case SyntaxKind.TemplateSpan: - return { expression: n.expression, literal: n.literal }; - case SyntaxKind.TaggedTemplateExpression: - return { tag: n.tag, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, template: n.template }; - case SyntaxKind.ParenthesizedExpression: - return { expression: n.expression }; - case SyntaxKind.ArrayLiteralExpression: - return { elements: n.elements, multiLine: n.multiLine }; - case SyntaxKind.ObjectLiteralExpression: - return { properties: n.properties, multiLine: n.multiLine }; - case SyntaxKind.SpreadAssignment: - return { expression: n.expression }; - case SyntaxKind.PropertyAssignment: - return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; - case SyntaxKind.ShorthandPropertyAssignment: - return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, equalsToken: n.equalsToken, objectAssignmentInitializer: n.objectAssignmentInitializer }; - case SyntaxKind.DeleteExpression: - return { expression: n.expression }; - case SyntaxKind.TypeOfExpression: - return { expression: n.expression }; - case SyntaxKind.VoidExpression: - return { expression: n.expression }; - case SyntaxKind.AwaitExpression: - return { expression: n.expression }; - case SyntaxKind.TypeAssertionExpression: - return { type: n.type, expression: n.expression }; - case SyntaxKind.UnionType: - return { types: n.types }; - case SyntaxKind.IntersectionType: - return { types: n.types }; - case SyntaxKind.ConditionalType: - return { checkType: n.checkType, extendsType: n.extendsType, trueType: n.trueType, falseType: n.falseType }; - case SyntaxKind.TypeOperator: - return { operator: n.operator, type: n.type }; - case SyntaxKind.InferType: - return { typeParameter: n.typeParameter }; - case SyntaxKind.ArrayType: - return { elementType: n.elementType }; - case SyntaxKind.IndexedAccessType: - return { objectType: n.objectType, indexType: n.indexType }; - case SyntaxKind.TypeReference: - return { typeName: n.typeName, typeArguments: n.typeArguments }; - case SyntaxKind.ExpressionWithTypeArguments: - return { expression: n.expression, typeArguments: n.typeArguments }; - case SyntaxKind.LiteralType: - return { literal: n.literal }; - case SyntaxKind.TypePredicate: - return { assertsModifier: n.assertsModifier, parameterName: n.parameterName, type: n.type }; - case SyntaxKind.ImportAttribute: - return { name: n.name, value: n.value }; - case SyntaxKind.ImportAttributes: - return { token: n.token, attributes: n.attributes, multiLine: n.multiLine }; - case SyntaxKind.TypeQuery: - return { exprName: n.exprName, typeArguments: n.typeArguments }; - case SyntaxKind.MappedType: - return { readonlyToken: n.readonlyToken, typeParameter: n.typeParameter, nameType: n.nameType, questionToken: n.questionToken, type: n.type, members: n.members }; - case SyntaxKind.TypeLiteral: - return { members: n.members }; - case SyntaxKind.TupleType: - return { elements: n.elements }; - case SyntaxKind.NamedTupleMember: - return { dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type }; - case SyntaxKind.OptionalType: - return { type: n.type }; - case SyntaxKind.RestType: - return { type: n.type }; - case SyntaxKind.ParenthesizedType: - return { type: n.type }; - case SyntaxKind.FunctionType: - return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.ConstructorType: - return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.TemplateHead: - return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; - case SyntaxKind.TemplateMiddle: - return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; - case SyntaxKind.TemplateTail: - return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; - case SyntaxKind.TemplateLiteralType: - return { head: n.head, templateSpans: n.templateSpans }; - case SyntaxKind.TemplateLiteralTypeSpan: - return { type: n.type, literal: n.literal }; - case SyntaxKind.SyntheticExpression: - return { type: n.type, isSpread: n.isSpread, tupleNameSource: n.tupleNameSource }; - case SyntaxKind.PartiallyEmittedExpression: - return { expression: n.expression }; - case SyntaxKind.JsxElement: - return { openingElement: n.openingElement, children: n.children, closingElement: n.closingElement }; - case SyntaxKind.JsxAttributes: - return { properties: n.properties }; - case SyntaxKind.JsxNamespacedName: - return { namespace: n.namespace, name: n.name }; - case SyntaxKind.JsxOpeningElement: - return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; - case SyntaxKind.JsxSelfClosingElement: - return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; - case SyntaxKind.JsxFragment: - return { openingFragment: n.openingFragment, children: n.children, closingFragment: n.closingFragment }; - case SyntaxKind.JsxAttribute: - return { name: n.name, initializer: n.initializer }; - case SyntaxKind.JsxSpreadAttribute: - return { expression: n.expression }; - case SyntaxKind.JsxClosingElement: - return { tagName: n.tagName }; - case SyntaxKind.JsxExpression: - return { dotDotDotToken: n.dotDotDotToken, expression: n.expression }; - case SyntaxKind.JsxText: - return { text: n.text, containsOnlyTriviaWhiteSpaces: n.containsOnlyTriviaWhiteSpaces }; - case SyntaxKind.SyntaxList: - return { children: n.children }; - case SyntaxKind.JSDoc: - return { comment: n.comment, tags: n.tags }; - case SyntaxKind.JSDocTypeExpression: - return { type: n.type }; - case SyntaxKind.JSDocNonNullableType: - return { type: n.type }; - case SyntaxKind.JSDocNullableType: - return { type: n.type }; - case SyntaxKind.JSDocVariadicType: - return { type: n.type }; - case SyntaxKind.JSDocOptionalType: - return { type: n.type }; - case SyntaxKind.JSDocTypeTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocUnknownTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocTemplateTag: - return { tagName: n.tagName, constraint: n.constraint, typeParameters: n.typeParameters, comment: n.comment }; - case SyntaxKind.JSDocReturnTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocPublicTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocPrivateTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocProtectedTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocReadonlyTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocOverrideTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocDeprecatedTag: - return { tagName: n.tagName, comment: n.comment }; - case SyntaxKind.JSDocSeeTag: - return { tagName: n.tagName, nameExpression: n.nameExpression, comment: n.comment }; - case SyntaxKind.JSDocImplementsTag: - return { tagName: n.tagName, className: n.className, comment: n.comment }; - case SyntaxKind.JSDocAugmentsTag: - return { tagName: n.tagName, className: n.className, comment: n.comment }; - case SyntaxKind.JSDocSatisfiesTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocThrowsTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocThisTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocImportTag: - return { tagName: n.tagName, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes, comment: n.comment }; - case SyntaxKind.JSDocCallbackTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; - case SyntaxKind.JSDocOverloadTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; - case SyntaxKind.JSDocTypedefTag: - return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; - case SyntaxKind.JSDocSignature: - return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; - case SyntaxKind.JSDocNameReference: - return { name: n.name }; - case SyntaxKind.ModuleDeclaration: - return { modifiers: n.modifiers, keyword: n.keyword, name: n.name, attributes: n.attributes, body: n.body }; - case SyntaxKind.ImportEqualsDeclaration: - return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, name: n.name, moduleReference: n.moduleReference }; - case SyntaxKind.ExportDeclaration: - return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, exportClause: n.exportClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; - case SyntaxKind.ImportType: - return { isTypeOf: n.isTypeOf, argument: n.argument, attributes: n.attributes, qualifier: n.qualifier, typeArguments: n.typeArguments }; - case SyntaxKind.ImportClause: - return { phaseModifier: n.phaseModifier, name: n.name, namedBindings: n.namedBindings }; - case SyntaxKind.ImportSpecifier: - return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; - case SyntaxKind.JSDocText: - return { text: n.text }; - case SyntaxKind.JSDocLink: - return { name: n.name, text: n.text }; - case SyntaxKind.JSDocLinkPlain: - return { name: n.name, text: n.text }; - case SyntaxKind.JSDocLinkCode: - return { name: n.name, text: n.text }; - case SyntaxKind.TypeParameter: - return { modifiers: n.modifiers, name: n.name, constraint: n.constraint, expression: n.expression, defaultType: n.defaultType }; - case SyntaxKind.SyntheticReferenceExpression: - return { expression: n.expression, thisArg: n.thisArg }; - case SyntaxKind.JSDocTypeLiteral: - return { jsdocPropertyTags: n.jsdocPropertyTags, isArrayType: n.isArrayType }; - case SyntaxKind.ForInStatement: - return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; - case SyntaxKind.ForOfStatement: - return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; - case SyntaxKind.CaseClause: - return { expression: n.expression, statements: n.statements }; - case SyntaxKind.DefaultClause: - return { expression: n.expression, statements: n.statements }; - case SyntaxKind.ObjectBindingPattern: - return { elements: n.elements }; - case SyntaxKind.ArrayBindingPattern: - return { elements: n.elements }; - case SyntaxKind.JSDocParameterTag: - return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; - case SyntaxKind.JSDocPropertyTag: - return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; - case SyntaxKind.SourceFile: - return cloneSourceFileData(n); - default: - return undefined; - } -} - -type ForEachChildFunction = (data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined) => T | undefined; - -const forEachChildTable: Record = { - [SyntaxKind.QualifiedName]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.left) || - visitNode(cbNode, data.right), - [SyntaxKind.ComputedPropertyName]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.Decorator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.IfStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.thenStatement) || - visitNode(cbNode, data.elseStatement), - [SyntaxKind.DoStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.statement) || - visitNode(cbNode, data.expression), - [SyntaxKind.WhileStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.statement), - [SyntaxKind.ForStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.initializer) || - visitNode(cbNode, data.condition) || - visitNode(cbNode, data.incrementor) || - visitNode(cbNode, data.statement), - [SyntaxKind.BreakStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), - [SyntaxKind.ContinueStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), - [SyntaxKind.ReturnStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.WithStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.statement), - [SyntaxKind.SwitchStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.caseBlock), - [SyntaxKind.CaseBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.clauses), - [SyntaxKind.ThrowStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.TryStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tryBlock) || - visitNode(cbNode, data.catchClause) || - visitNode(cbNode, data.finallyBlock), - [SyntaxKind.CatchClause]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.variableDeclaration) || - visitNode(cbNode, data.block), - [SyntaxKind.LabeledStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.label) || - visitNode(cbNode, data.statement), - [SyntaxKind.ExpressionStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.Block]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), - [SyntaxKind.VariableStatement]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.declarationList), - [SyntaxKind.VariableDeclaration]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.name) || - visitNode(cbNode, data.exclamationToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.initializer), - [SyntaxKind.VariableDeclarationList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.declarations), - [SyntaxKind.Parameter]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.dotDotDotToken) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.questionToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.initializer), - [SyntaxKind.BindingElement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.dotDotDotToken) || - visitNode(cbNode, data.propertyName) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.initializer), - [SyntaxKind.MissingDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers), - [SyntaxKind.FunctionDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.asteriskToken) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.ClassDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.heritageClauses) || - visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.ClassExpression]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.heritageClauses) || - visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.HeritageClause]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), - [SyntaxKind.InterfaceDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.heritageClauses) || - visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.TypeAliasDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNode(cbNode, data.type), - [SyntaxKind.JSTypeAliasDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNode(cbNode, data.type), - [SyntaxKind.EnumMember]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.name) || - visitNode(cbNode, data.initializer), - [SyntaxKind.EnumDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.ModuleBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), - [SyntaxKind.ImportDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.importClause) || - visitNode(cbNode, data.moduleSpecifier) || - visitNode(cbNode, data.attributes), - [SyntaxKind.JSImportDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.importClause) || - visitNode(cbNode, data.moduleSpecifier) || - visitNode(cbNode, data.attributes), - [SyntaxKind.ExternalModuleReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.NamespaceImport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.NamedImports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.ExportAssignment]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.expression), - [SyntaxKind.NamespaceExportDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name), - [SyntaxKind.NamespaceExport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.NamedExports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.ExportSpecifier]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.propertyName) || - visitNode(cbNode, data.name), - [SyntaxKind.CallSignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.ConstructSignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.Constructor]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.GetAccessor]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.SetAccessor]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.IndexSignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.MethodSignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.MethodDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.asteriskToken) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.PropertySignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.initializer), - [SyntaxKind.PropertyDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.initializer), - [SyntaxKind.ClassStaticBlockDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.body), - [SyntaxKind.BinaryExpression]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.left) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.operatorToken) || - visitNode(cbNode, data.right), - [SyntaxKind.PrefixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), - [SyntaxKind.PostfixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), - [SyntaxKind.YieldExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.asteriskToken) || - visitNode(cbNode, data.expression), - [SyntaxKind.ArrowFunction]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.equalsGreaterThanToken) || - visitNode(cbNode, data.body), - [SyntaxKind.FunctionExpression]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.asteriskToken) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.body), - [SyntaxKind.AsExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.type), - [SyntaxKind.SatisfiesExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.type), - [SyntaxKind.ConditionalExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.condition) || - visitNode(cbNode, data.questionToken) || - visitNode(cbNode, data.whenTrue) || - visitNode(cbNode, data.colonToken) || - visitNode(cbNode, data.whenFalse), - [SyntaxKind.PropertyAccessExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.questionDotToken) || - visitNode(cbNode, data.name), - [SyntaxKind.ElementAccessExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.questionDotToken) || - visitNode(cbNode, data.argumentExpression), - [SyntaxKind.CallExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.questionDotToken) || - visitNodes(cbNode, cbNodes, data.typeArguments) || - visitNodes(cbNode, cbNodes, data.arguments), - [SyntaxKind.NewExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNodes(cbNode, cbNodes, data.typeArguments) || - visitNodes(cbNode, cbNodes, data.arguments), - [SyntaxKind.MetaProperty]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.NonNullExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.SpreadElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.TemplateExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.head) || - visitNodes(cbNode, cbNodes, data.templateSpans), - [SyntaxKind.TemplateSpan]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.literal), - [SyntaxKind.TaggedTemplateExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tag) || - visitNode(cbNode, data.questionDotToken) || - visitNodes(cbNode, cbNodes, data.typeArguments) || - visitNode(cbNode, data.template), - [SyntaxKind.ParenthesizedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.ArrayLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.ObjectLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), - [SyntaxKind.SpreadAssignment]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.PropertyAssignment]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.initializer), - [SyntaxKind.ShorthandPropertyAssignment]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.postfixToken) || - visitNode(cbNode, data.type) || - visitNode(cbNode, data.equalsToken) || - visitNode(cbNode, data.objectAssignmentInitializer), - [SyntaxKind.DeleteExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.TypeOfExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.VoidExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.AwaitExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.TypeAssertionExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.type) || - visitNode(cbNode, data.expression), - [SyntaxKind.UnionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), - [SyntaxKind.IntersectionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), - [SyntaxKind.ConditionalType]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.checkType) || - visitNode(cbNode, data.extendsType) || - visitNode(cbNode, data.trueType) || - visitNode(cbNode, data.falseType), - [SyntaxKind.TypeOperator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.InferType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.typeParameter), - [SyntaxKind.ArrayType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.elementType), - [SyntaxKind.IndexedAccessType]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.objectType) || - visitNode(cbNode, data.indexType), - [SyntaxKind.TypeReference]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.typeName) || - visitNodes(cbNode, cbNodes, data.typeArguments), - [SyntaxKind.ExpressionWithTypeArguments]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNodes(cbNode, cbNodes, data.typeArguments), - [SyntaxKind.LiteralType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.literal), - [SyntaxKind.TypePredicate]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.assertsModifier) || - visitNode(cbNode, data.parameterName) || - visitNode(cbNode, data.type), - [SyntaxKind.ImportAttribute]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.name) || - visitNode(cbNode, data.value), - [SyntaxKind.ImportAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.attributes), - [SyntaxKind.TypeQuery]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.exprName) || - visitNodes(cbNode, cbNodes, data.typeArguments), - [SyntaxKind.MappedType]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.readonlyToken) || - visitNode(cbNode, data.typeParameter) || - visitNode(cbNode, data.nameType) || - visitNode(cbNode, data.questionToken) || - visitNode(cbNode, data.type) || - visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.TypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.members), - [SyntaxKind.TupleType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.NamedTupleMember]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.dotDotDotToken) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.questionToken) || - visitNode(cbNode, data.type), - [SyntaxKind.OptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.RestType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.ParenthesizedType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.FunctionType]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.ConstructorType]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.TemplateLiteralType]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.head) || - visitNodes(cbNode, cbNodes, data.templateSpans), - [SyntaxKind.TemplateLiteralTypeSpan]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.type) || - visitNode(cbNode, data.literal), - [SyntaxKind.SyntheticExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tupleNameSource), - [SyntaxKind.PartiallyEmittedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.JsxElement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.openingElement) || - visitNodes(cbNode, cbNodes, data.children) || - visitNode(cbNode, data.closingElement), - [SyntaxKind.JsxAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), - [SyntaxKind.JsxNamespacedName]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.namespace) || - visitNode(cbNode, data.name), - [SyntaxKind.JsxOpeningElement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.typeArguments) || - visitNode(cbNode, data.attributes), - [SyntaxKind.JsxSelfClosingElement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.typeArguments) || - visitNode(cbNode, data.attributes), - [SyntaxKind.JsxFragment]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.openingFragment) || - visitNodes(cbNode, cbNodes, data.children) || - visitNode(cbNode, data.closingFragment), - [SyntaxKind.JsxAttribute]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.name) || - visitNode(cbNode, data.initializer), - [SyntaxKind.JsxSpreadAttribute]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), - [SyntaxKind.JsxClosingElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName), - [SyntaxKind.JsxExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.dotDotDotToken) || - visitNode(cbNode, data.expression), - [SyntaxKind.SyntaxList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.children), - [SyntaxKind.JSDoc]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.comment) || - visitNodes(cbNode, cbNodes, data.tags), - [SyntaxKind.JSDocTypeExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.JSDocNonNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.JSDocNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.JSDocVariadicType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.JSDocOptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), - [SyntaxKind.JSDocTypeTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocUnknownTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocTemplateTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.constraint) || - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocReturnTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocPublicTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocPrivateTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocProtectedTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocReadonlyTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocOverrideTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocDeprecatedTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocSeeTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.nameExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocImplementsTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.className) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocAugmentsTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.className) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocSatisfiesTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocThrowsTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocThisTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocImportTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.importClause) || - visitNode(cbNode, data.moduleSpecifier) || - visitNode(cbNode, data.attributes) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocCallbackTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocOverloadTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocTypedefTag]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.tagName) || - visitNode(cbNode, data.typeExpression) || - visitNode(cbNode, data.name) || - visitNodes(cbNode, cbNodes, data.comment), - [SyntaxKind.JSDocSignature]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.typeParameters) || - visitNodes(cbNode, cbNodes, data.parameters) || - visitNode(cbNode, data.type), - [SyntaxKind.JSDocNameReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.ModuleDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.attributes) || - visitNode(cbNode, data.body), - [SyntaxKind.ImportEqualsDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.moduleReference), - [SyntaxKind.ExportDeclaration]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.exportClause) || - visitNode(cbNode, data.moduleSpecifier) || - visitNode(cbNode, data.attributes), - [SyntaxKind.ImportType]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.argument) || - visitNode(cbNode, data.attributes) || - visitNode(cbNode, data.qualifier) || - visitNodes(cbNode, cbNodes, data.typeArguments), - [SyntaxKind.ImportClause]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.name) || - visitNode(cbNode, data.namedBindings), - [SyntaxKind.ImportSpecifier]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.propertyName) || - visitNode(cbNode, data.name), - [SyntaxKind.JSDocLink]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.JSDocLinkPlain]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.JSDocLinkCode]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), - [SyntaxKind.TypeParameter]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.modifiers) || - visitNode(cbNode, data.name) || - visitNode(cbNode, data.constraint) || - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.defaultType), - [SyntaxKind.SyntheticReferenceExpression]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.thisArg), - [SyntaxKind.JSDocTypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.jsdocPropertyTags), - [SyntaxKind.ForInStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.awaitModifier) || - visitNode(cbNode, data.initializer) || - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.statement), - [SyntaxKind.ForOfStatement]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.awaitModifier) || - visitNode(cbNode, data.initializer) || - visitNode(cbNode, data.expression) || - visitNode(cbNode, data.statement), - [SyntaxKind.CaseClause]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNodes(cbNode, cbNodes, data.statements), - [SyntaxKind.DefaultClause]: (data, cbNode, cbNodes) => - visitNode(cbNode, data.expression) || - visitNodes(cbNode, cbNodes, data.statements), - [SyntaxKind.ObjectBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.ArrayBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), - [SyntaxKind.JSDocParameterTag]: forEachChildOfJSDocParameterTag, - [SyntaxKind.JSDocPropertyTag]: forEachChildOfJSDocPropertyTag, - [SyntaxKind.SourceFile]: (data, cbNode, cbNodes) => - visitNodes(cbNode, cbNodes, data.statements) || - visitNode(cbNode, data.endOfFileToken), -}; - -type YieldEachChildFunction = (data: any) => Generator; - -function* emptyChildrenIter(): Generator { - return undefined; -} - -const yieldEachChildTable: Record = { - [SyntaxKind.QualifiedName]: function* (data) { - if (data.left) { - const res = yield data.left; - if (res) return res; - } - if (data.right) { - const res = yield data.right; - if (res) return res; - } - }, - [SyntaxKind.ComputedPropertyName]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.Decorator]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.IfStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.thenStatement) { - const res = yield data.thenStatement; - if (res) return res; - } - if (data.elseStatement) { - const res = yield data.elseStatement; - if (res) return res; - } - }, - [SyntaxKind.DoStatement]: function* (data) { - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.WhileStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.ForStatement]: function* (data) { - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - if (data.condition) { - const res = yield data.condition; - if (res) return res; - } - if (data.incrementor) { - const res = yield data.incrementor; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.BreakStatement]: function* (data) { - if (data.label) { - const res = yield data.label; - if (res) return res; - } - }, - [SyntaxKind.ContinueStatement]: function* (data) { - if (data.label) { - const res = yield data.label; - if (res) return res; - } - }, - [SyntaxKind.ReturnStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.WithStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.SwitchStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.caseBlock) { - const res = yield data.caseBlock; - if (res) return res; - } - }, - [SyntaxKind.CaseBlock]: function* (data) { - for (const n of data.clauses) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ThrowStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.TryStatement]: function* (data) { - if (data.tryBlock) { - const res = yield data.tryBlock; - if (res) return res; - } - if (data.catchClause) { - const res = yield data.catchClause; - if (res) return res; - } - if (data.finallyBlock) { - const res = yield data.finallyBlock; - if (res) return res; - } - }, - [SyntaxKind.CatchClause]: function* (data) { - if (data.variableDeclaration) { - const res = yield data.variableDeclaration; - if (res) return res; - } - if (data.block) { - const res = yield data.block; - if (res) return res; - } - }, - [SyntaxKind.LabeledStatement]: function* (data) { - if (data.label) { - const res = yield data.label; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.ExpressionStatement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.Block]: function* (data) { - for (const n of data.statements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.VariableStatement]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.declarationList) { - const res = yield data.declarationList; - if (res) return res; - } - }, - [SyntaxKind.VariableDeclaration]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.exclamationToken) { - const res = yield data.exclamationToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.VariableDeclarationList]: function* (data) { - for (const n of data.declarations) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.Parameter]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.dotDotDotToken) { - const res = yield data.dotDotDotToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.questionToken) { - const res = yield data.questionToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.BindingElement]: function* (data) { - if (data.dotDotDotToken) { - const res = yield data.dotDotDotToken; - if (res) return res; - } - if (data.propertyName) { - const res = yield data.propertyName; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.MissingDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.FunctionDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.asteriskToken) { - const res = yield data.asteriskToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.ClassDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - if (data.heritageClauses) { - for (const n of data.heritageClauses) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ClassExpression]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - if (data.heritageClauses) { - for (const n of data.heritageClauses) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.HeritageClause]: function* (data) { - for (const n of data.types) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.InterfaceDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - if (data.heritageClauses) { - for (const n of data.heritageClauses) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.TypeAliasDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSTypeAliasDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.EnumMember]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.EnumDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ModuleBlock]: function* (data) { - for (const n of data.statements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ImportDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.importClause) { - const res = yield data.importClause; - if (res) return res; - } - if (data.moduleSpecifier) { - const res = yield data.moduleSpecifier; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - }, - [SyntaxKind.JSImportDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.importClause) { - const res = yield data.importClause; - if (res) return res; - } - if (data.moduleSpecifier) { - const res = yield data.moduleSpecifier; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - }, - [SyntaxKind.ExternalModuleReference]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.NamespaceImport]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.NamedImports]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ExportAssignment]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.NamespaceExportDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.NamespaceExport]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.NamedExports]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ExportSpecifier]: function* (data) { - if (data.propertyName) { - const res = yield data.propertyName; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.CallSignature]: function* (data) { - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.ConstructSignature]: function* (data) { - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.Constructor]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.GetAccessor]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.SetAccessor]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.IndexSignature]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.MethodSignature]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.MethodDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.asteriskToken) { - const res = yield data.asteriskToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.PropertySignature]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.PropertyDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.ClassStaticBlockDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.BinaryExpression]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.left) { - const res = yield data.left; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.operatorToken) { - const res = yield data.operatorToken; - if (res) return res; - } - if (data.right) { - const res = yield data.right; - if (res) return res; - } - }, - [SyntaxKind.PrefixUnaryExpression]: function* (data) { - if (data.operand) { - const res = yield data.operand; - if (res) return res; - } - }, - [SyntaxKind.PostfixUnaryExpression]: function* (data) { - if (data.operand) { - const res = yield data.operand; - if (res) return res; - } - }, - [SyntaxKind.YieldExpression]: function* (data) { - if (data.asteriskToken) { - const res = yield data.asteriskToken; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.ArrowFunction]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.equalsGreaterThanToken) { - const res = yield data.equalsGreaterThanToken; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.FunctionExpression]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.asteriskToken) { - const res = yield data.asteriskToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.AsExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.SatisfiesExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.ConditionalExpression]: function* (data) { - if (data.condition) { - const res = yield data.condition; - if (res) return res; - } - if (data.questionToken) { - const res = yield data.questionToken; - if (res) return res; - } - if (data.whenTrue) { - const res = yield data.whenTrue; - if (res) return res; - } - if (data.colonToken) { - const res = yield data.colonToken; - if (res) return res; - } - if (data.whenFalse) { - const res = yield data.whenFalse; - if (res) return res; - } - }, - [SyntaxKind.PropertyAccessExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.questionDotToken) { - const res = yield data.questionDotToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.ElementAccessExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.questionDotToken) { - const res = yield data.questionDotToken; - if (res) return res; - } - if (data.argumentExpression) { - const res = yield data.argumentExpression; - if (res) return res; - } - }, - [SyntaxKind.CallExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.questionDotToken) { - const res = yield data.questionDotToken; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.arguments) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.NewExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - if (data.arguments) { - for (const n of data.arguments) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.MetaProperty]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.NonNullExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.SpreadElement]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.TemplateExpression]: function* (data) { - if (data.head) { - const res = yield data.head; - if (res) return res; - } - for (const n of data.templateSpans) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.TemplateSpan]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.literal) { - const res = yield data.literal; - if (res) return res; - } - }, - [SyntaxKind.TaggedTemplateExpression]: function* (data) { - if (data.tag) { - const res = yield data.tag; - if (res) return res; - } - if (data.questionDotToken) { - const res = yield data.questionDotToken; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - if (data.template) { - const res = yield data.template; - if (res) return res; - } - }, - [SyntaxKind.ParenthesizedExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.ArrayLiteralExpression]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ObjectLiteralExpression]: function* (data) { - for (const n of data.properties) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.SpreadAssignment]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.PropertyAssignment]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.ShorthandPropertyAssignment]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.postfixToken) { - const res = yield data.postfixToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.equalsToken) { - const res = yield data.equalsToken; - if (res) return res; - } - if (data.objectAssignmentInitializer) { - const res = yield data.objectAssignmentInitializer; - if (res) return res; - } - }, - [SyntaxKind.DeleteExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.TypeOfExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.VoidExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.AwaitExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.TypeAssertionExpression]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.UnionType]: function* (data) { - for (const n of data.types) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.IntersectionType]: function* (data) { - for (const n of data.types) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ConditionalType]: function* (data) { - if (data.checkType) { - const res = yield data.checkType; - if (res) return res; - } - if (data.extendsType) { - const res = yield data.extendsType; - if (res) return res; - } - if (data.trueType) { - const res = yield data.trueType; - if (res) return res; - } - if (data.falseType) { - const res = yield data.falseType; - if (res) return res; - } - }, - [SyntaxKind.TypeOperator]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.InferType]: function* (data) { - if (data.typeParameter) { - const res = yield data.typeParameter; - if (res) return res; - } - }, - [SyntaxKind.ArrayType]: function* (data) { - if (data.elementType) { - const res = yield data.elementType; - if (res) return res; - } - }, - [SyntaxKind.IndexedAccessType]: function* (data) { - if (data.objectType) { - const res = yield data.objectType; - if (res) return res; - } - if (data.indexType) { - const res = yield data.indexType; - if (res) return res; - } - }, - [SyntaxKind.TypeReference]: function* (data) { - if (data.typeName) { - const res = yield data.typeName; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.ExpressionWithTypeArguments]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.LiteralType]: function* (data) { - if (data.literal) { - const res = yield data.literal; - if (res) return res; - } - }, - [SyntaxKind.TypePredicate]: function* (data) { - if (data.assertsModifier) { - const res = yield data.assertsModifier; - if (res) return res; - } - if (data.parameterName) { - const res = yield data.parameterName; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.ImportAttribute]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.value) { - const res = yield data.value; - if (res) return res; - } - }, - [SyntaxKind.ImportAttributes]: function* (data) { - for (const n of data.attributes) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.TypeQuery]: function* (data) { - if (data.exprName) { - const res = yield data.exprName; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.MappedType]: function* (data) { - if (data.readonlyToken) { - const res = yield data.readonlyToken; - if (res) return res; - } - if (data.typeParameter) { - const res = yield data.typeParameter; - if (res) return res; - } - if (data.nameType) { - const res = yield data.nameType; - if (res) return res; - } - if (data.questionToken) { - const res = yield data.questionToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.members) { - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.TypeLiteral]: function* (data) { - for (const n of data.members) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.TupleType]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.NamedTupleMember]: function* (data) { - if (data.dotDotDotToken) { - const res = yield data.dotDotDotToken; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.questionToken) { - const res = yield data.questionToken; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.OptionalType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.RestType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.ParenthesizedType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.FunctionType]: function* (data) { - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.ConstructorType]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.TemplateLiteralType]: function* (data) { - if (data.head) { - const res = yield data.head; - if (res) return res; - } - for (const n of data.templateSpans) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.TemplateLiteralTypeSpan]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - if (data.literal) { - const res = yield data.literal; - if (res) return res; - } - }, - [SyntaxKind.SyntheticExpression]: function* (data) { - if (data.tupleNameSource) { - const res = yield data.tupleNameSource; - if (res) return res; - } - }, - [SyntaxKind.PartiallyEmittedExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.JsxElement]: function* (data) { - if (data.openingElement) { - const res = yield data.openingElement; - if (res) return res; - } - for (const n of data.children) { - const res = yield n; - if (res) return res; - } - if (data.closingElement) { - const res = yield data.closingElement; - if (res) return res; - } - }, - [SyntaxKind.JsxAttributes]: function* (data) { - for (const n of data.properties) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.JsxNamespacedName]: function* (data) { - if (data.namespace) { - const res = yield data.namespace; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.JsxOpeningElement]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - }, - [SyntaxKind.JsxSelfClosingElement]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - }, - [SyntaxKind.JsxFragment]: function* (data) { - if (data.openingFragment) { - const res = yield data.openingFragment; - if (res) return res; - } - for (const n of data.children) { - const res = yield n; - if (res) return res; - } - if (data.closingFragment) { - const res = yield data.closingFragment; - if (res) return res; - } - }, - [SyntaxKind.JsxAttribute]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - }, - [SyntaxKind.JsxSpreadAttribute]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.JsxClosingElement]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - }, - [SyntaxKind.JsxExpression]: function* (data) { - if (data.dotDotDotToken) { - const res = yield data.dotDotDotToken; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - }, - [SyntaxKind.SyntaxList]: function* (data) { - for (const n of data.children) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.JSDoc]: function* (data) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - if (data.tags) { - for (const n of data.tags) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocTypeExpression]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocNonNullableType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocNullableType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocVariadicType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocOptionalType]: function* (data) { - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocTypeTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocUnknownTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocTemplateTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.constraint) { - const res = yield data.constraint; - if (res) return res; - } - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocReturnTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocPublicTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocPrivateTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocProtectedTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocReadonlyTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocOverrideTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocDeprecatedTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocSeeTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.nameExpression) { - const res = yield data.nameExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocImplementsTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.className) { - const res = yield data.className; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocAugmentsTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.className) { - const res = yield data.className; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocSatisfiesTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocThrowsTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocThisTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocImportTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.importClause) { - const res = yield data.importClause; - if (res) return res; - } - if (data.moduleSpecifier) { - const res = yield data.moduleSpecifier; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocCallbackTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocOverloadTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocTypedefTag]: function* (data) { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.comment) { - for (const n of data.comment) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.JSDocSignature]: function* (data) { - if (data.typeParameters) { - for (const n of data.typeParameters) { - const res = yield n; - if (res) return res; - } - } - for (const n of data.parameters) { - const res = yield n; - if (res) return res; - } - if (data.type) { - const res = yield data.type; - if (res) return res; - } - }, - [SyntaxKind.JSDocNameReference]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.ModuleDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - if (data.body) { - const res = yield data.body; - if (res) return res; - } - }, - [SyntaxKind.ImportEqualsDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.moduleReference) { - const res = yield data.moduleReference; - if (res) return res; - } - }, - [SyntaxKind.ExportDeclaration]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.exportClause) { - const res = yield data.exportClause; - if (res) return res; - } - if (data.moduleSpecifier) { - const res = yield data.moduleSpecifier; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - }, - [SyntaxKind.ImportType]: function* (data) { - if (data.argument) { - const res = yield data.argument; - if (res) return res; - } - if (data.attributes) { - const res = yield data.attributes; - if (res) return res; - } - if (data.qualifier) { - const res = yield data.qualifier; - if (res) return res; - } - if (data.typeArguments) { - for (const n of data.typeArguments) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.ImportClause]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.namedBindings) { - const res = yield data.namedBindings; - if (res) return res; - } - }, - [SyntaxKind.ImportSpecifier]: function* (data) { - if (data.propertyName) { - const res = yield data.propertyName; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.JSDocLink]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.JSDocLinkPlain]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.JSDocLinkCode]: function* (data) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - }, - [SyntaxKind.TypeParameter]: function* (data) { - if (data.modifiers) { - for (const n of data.modifiers) { - const res = yield n; - if (res) return res; - } - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.constraint) { - const res = yield data.constraint; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.defaultType) { - const res = yield data.defaultType; - if (res) return res; - } - }, - [SyntaxKind.SyntheticReferenceExpression]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.thisArg) { - const res = yield data.thisArg; - if (res) return res; - } - }, - [SyntaxKind.JSDocTypeLiteral]: function* (data) { - if (data.jsdocPropertyTags) { - for (const n of data.jsdocPropertyTags) { - const res = yield n; - if (res) return res; - } - } - }, - [SyntaxKind.ForInStatement]: function* (data) { - if (data.awaitModifier) { - const res = yield data.awaitModifier; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.ForOfStatement]: function* (data) { - if (data.awaitModifier) { - const res = yield data.awaitModifier; - if (res) return res; - } - if (data.initializer) { - const res = yield data.initializer; - if (res) return res; - } - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - if (data.statement) { - const res = yield data.statement; - if (res) return res; - } - }, - [SyntaxKind.CaseClause]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - for (const n of data.statements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.DefaultClause]: function* (data) { - if (data.expression) { - const res = yield data.expression; - if (res) return res; - } - for (const n of data.statements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ObjectBindingPattern]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.ArrayBindingPattern]: function* (data) { - for (const n of data.elements) { - const res = yield n; - if (res) return res; - } - }, - [SyntaxKind.JSDocParameterTag]: yieldEachChildOfJSDocParameterTag, - [SyntaxKind.JSDocPropertyTag]: yieldEachChildOfJSDocPropertyTag, - [SyntaxKind.SourceFile]: function* (data) { - for (const n of data.statements) { - const res = yield n; - if (res) return res; - } - const res = yield data.endOfFileToken; - if (res) return res; - }, -}; - -function visitNode(cbNode: (node: Node) => T, node: Node | undefined): T | undefined { - return node ? cbNode(node) : undefined; -} - -function visitNodes(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined { - if (!nodes) return undefined; - if (cbNodes) return cbNodes(nodes); - for (const node of nodes) { - const result = cbNode(node); - if (result) return result; - } - return undefined; -} - -export function createToken(kind: TKind): Token { - return new NodeObject(kind, undefined) as unknown as Token; -} - -export function createIdentifier(text: string): Identifier { - return new NodeObject(SyntaxKind.Identifier, { - text, - }) as unknown as Identifier; -} - -export function createPrivateIdentifier(text: string): PrivateIdentifier { - return new NodeObject(SyntaxKind.PrivateIdentifier, { - text, - }) as unknown as PrivateIdentifier; -} - -export function createQualifiedName(left: EntityName, right: MemberName): QualifiedName { - return new NodeObject(SyntaxKind.QualifiedName, { - left, - right, - }) as unknown as QualifiedName; -} - -export function createComputedPropertyName(expression: Expression): ComputedPropertyName { - return new NodeObject(SyntaxKind.ComputedPropertyName, { - expression, - }) as unknown as ComputedPropertyName; -} - -export function createDecorator(expression: LeftHandSideExpression): Decorator { - return new NodeObject(SyntaxKind.Decorator, { - expression, - }) as unknown as Decorator; -} - -export function createEmptyStatement(): EmptyStatement { - return new NodeObject(SyntaxKind.EmptyStatement, undefined) as unknown as EmptyStatement; -} - -export function createIfStatement(expression: Expression, thenStatement: Statement, elseStatement?: Statement): IfStatement { - return new NodeObject(SyntaxKind.IfStatement, { - expression, - thenStatement, - elseStatement, - }) as unknown as IfStatement; -} - -export function createDoStatement(statement: Statement, expression: Expression): DoStatement { - return new NodeObject(SyntaxKind.DoStatement, { - statement, - expression, - }) as unknown as DoStatement; -} - -export function createWhileStatement(expression: Expression, statement: Statement): WhileStatement { - return new NodeObject(SyntaxKind.WhileStatement, { - expression, - statement, - }) as unknown as WhileStatement; -} - -export function createForStatement(initializer: ForInitializer | undefined, condition: Expression | undefined, incrementor: Expression | undefined, statement: Statement): ForStatement { - return new NodeObject(SyntaxKind.ForStatement, { - initializer, - condition, - incrementor, - statement, - }) as unknown as ForStatement; -} - -export function createBreakStatement(label?: Identifier): BreakStatement { - return new NodeObject(SyntaxKind.BreakStatement, { - label, - }) as unknown as BreakStatement; -} - -export function createContinueStatement(label?: Identifier): ContinueStatement { - return new NodeObject(SyntaxKind.ContinueStatement, { - label, - }) as unknown as ContinueStatement; -} - -export function createReturnStatement(expression?: Expression): ReturnStatement { - return new NodeObject(SyntaxKind.ReturnStatement, { - expression, - }) as unknown as ReturnStatement; -} - -export function createWithStatement(expression: Expression, statement: Statement): WithStatement { - return new NodeObject(SyntaxKind.WithStatement, { - expression, - statement, - }) as unknown as WithStatement; -} - -export function createSwitchStatement(expression: Expression, caseBlock: CaseBlock): SwitchStatement { - return new NodeObject(SyntaxKind.SwitchStatement, { - expression, - caseBlock, - }) as unknown as SwitchStatement; -} - -export function createCaseBlock(clauses: readonly CaseOrDefaultClause[]): CaseBlock { - return new NodeObject(SyntaxKind.CaseBlock, { - clauses: createNodeArray(clauses), - }) as unknown as CaseBlock; -} - -export function createThrowStatement(expression: Expression): ThrowStatement { - return new NodeObject(SyntaxKind.ThrowStatement, { - expression, - }) as unknown as ThrowStatement; -} - -export function createTryStatement(tryBlock: Block, catchClause?: CatchClause, finallyBlock?: Block): TryStatement { - return new NodeObject(SyntaxKind.TryStatement, { - tryBlock, - catchClause, - finallyBlock, - }) as unknown as TryStatement; -} - -export function createCatchClause(variableDeclaration: VariableDeclaration | undefined, block: Block): CatchClause { - return new NodeObject(SyntaxKind.CatchClause, { - variableDeclaration, - block, - }) as unknown as CatchClause; -} - -export function createDebuggerStatement(): DebuggerStatement { - return new NodeObject(SyntaxKind.DebuggerStatement, undefined) as unknown as DebuggerStatement; -} - -export function createLabeledStatement(label: Identifier, statement: Statement): LabeledStatement { - return new NodeObject(SyntaxKind.LabeledStatement, { - label, - statement, - }) as unknown as LabeledStatement; -} - -export function createExpressionStatement(expression: Expression): ExpressionStatement { - return new NodeObject(SyntaxKind.ExpressionStatement, { - expression, - }) as unknown as ExpressionStatement; -} - -export function createBlock(statements: readonly Statement[], multiLine?: boolean): Block { - return new NodeObject(SyntaxKind.Block, { - statements: createNodeArray(statements), - multiLine, - }) as unknown as Block; -} - -export function createVariableStatement(modifiers: readonly ModifierLike[] | undefined, declarationList: VariableDeclarationList): VariableStatement { - return new NodeObject(SyntaxKind.VariableStatement, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - declarationList, - }) as unknown as VariableStatement; -} - -export function createVariableDeclaration(name: BindingName, exclamationToken?: ExclamationToken, type?: TypeNode, initializer?: Expression): VariableDeclaration { - return new NodeObject(SyntaxKind.VariableDeclaration, { - name, - exclamationToken, - type, - initializer, - }) as unknown as VariableDeclaration; -} - -export function createVariableDeclarationList(declarations: readonly VariableDeclaration[], flags: NodeFlags): VariableDeclarationList { - const node = new NodeObject(SyntaxKind.VariableDeclarationList, { - declarations: createNodeArray(declarations), - }) as unknown as VariableDeclarationList; - (node as any).flags = flags; - return node; -} - -export function createParameterDeclaration(modifiers: readonly ModifierLike[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression): ParameterDeclaration { - return new NodeObject(SyntaxKind.Parameter, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - dotDotDotToken, - name, - questionToken, - type, - initializer, - }) as unknown as ParameterDeclaration; -} - -export function createBindingElement(dotDotDotToken?: DotDotDotToken, propertyName?: PropertyName, name?: BindingName, initializer?: Expression): BindingElement { - return new NodeObject(SyntaxKind.BindingElement, { - dotDotDotToken, - propertyName, - name, - initializer, - }) as unknown as BindingElement; -} - -export function createMissingDeclaration(modifiers?: readonly ModifierLike[]): MissingDeclaration { - return new NodeObject(SyntaxKind.MissingDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - }) as unknown as MissingDeclaration; -} - -export function createFunctionDeclaration(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): FunctionDeclaration { - return new NodeObject(SyntaxKind.FunctionDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - asteriskToken, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as FunctionDeclaration; -} - -export function createClassDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassDeclaration { - return new NodeObject(SyntaxKind.ClassDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, - members: createNodeArray(members), - }) as unknown as ClassDeclaration; -} - -export function createClassExpression(modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassExpression { - return new NodeObject(SyntaxKind.ClassExpression, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, - members: createNodeArray(members), - }) as unknown as ClassExpression; -} - -export function createHeritageClause(token: SyntaxKind.ExtendsKeyword | SyntaxKind.ImplementsKeyword, types: readonly HeritageClauseElement[]): HeritageClause { - return new NodeObject(SyntaxKind.HeritageClause, { - token, - types: createNodeArray(types), - }) as unknown as HeritageClause; -} - -export function createInterfaceDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly TypeElement[]): InterfaceDeclaration { - return new NodeObject(SyntaxKind.InterfaceDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, - members: createNodeArray(members), - }) as unknown as InterfaceDeclaration; -} - -export function createTypeAliasDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, type: TypeNode): TypeAliasDeclaration { - return new NodeObject(SyntaxKind.TypeAliasDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - type, - }) as unknown as TypeAliasDeclaration; -} - -export function createEnumMember(name: PropertyName, initializer?: Expression): EnumMember { - return new NodeObject(SyntaxKind.EnumMember, { - name, - initializer, - }) as unknown as EnumMember; -} - -export function createEnumDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, members: readonly EnumMember[]): EnumDeclaration { - return new NodeObject(SyntaxKind.EnumDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - members: createNodeArray(members), - }) as unknown as EnumDeclaration; -} - -export function createModuleBlock(statements: readonly Statement[]): ModuleBlock { - return new NodeObject(SyntaxKind.ModuleBlock, { - statements: createNodeArray(statements), - }) as unknown as ModuleBlock; -} - -export function createNotEmittedStatement(): NotEmittedStatement { - return new NodeObject(SyntaxKind.NotEmittedStatement, undefined) as unknown as NotEmittedStatement; -} - -export function createNotEmittedTypeElement(): NotEmittedTypeElement { - return new NodeObject(SyntaxKind.NotEmittedTypeElement, undefined) as unknown as NotEmittedTypeElement; -} - -export function createImportDeclaration(modifiers: readonly ModifierLike[] | undefined, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes): ImportDeclaration { - return new NodeObject(SyntaxKind.ImportDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - importClause, - moduleSpecifier, - attributes, - }) as unknown as ImportDeclaration; -} - -export function createExternalModuleReference(expression: Expression): ExternalModuleReference { - return new NodeObject(SyntaxKind.ExternalModuleReference, { - expression, - }) as unknown as ExternalModuleReference; -} - -export function createNamespaceImport(name: Identifier): NamespaceImport { - return new NodeObject(SyntaxKind.NamespaceImport, { - name, - }) as unknown as NamespaceImport; -} - -export function createNamedImports(elements: readonly ImportSpecifier[]): NamedImports { - return new NodeObject(SyntaxKind.NamedImports, { - elements: createNodeArray(elements), - }) as unknown as NamedImports; -} - -export function createExportAssignment(modifiers: readonly ModifierLike[] | undefined, isExportEquals: boolean = false, type: TypeNode, expression: Expression): ExportAssignment { - return new NodeObject(SyntaxKind.ExportAssignment, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - isExportEquals, - type, - expression, - }) as unknown as ExportAssignment; -} - -export function createNamespaceExportDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier): NamespaceExportDeclaration { - return new NodeObject(SyntaxKind.NamespaceExportDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - }) as unknown as NamespaceExportDeclaration; -} - -export function createNamespaceExport(name: ModuleExportName): NamespaceExport { - return new NodeObject(SyntaxKind.NamespaceExport, { - name, - }) as unknown as NamespaceExport; -} - -export function createNamedExports(elements: readonly ExportSpecifier[]): NamedExports { - return new NodeObject(SyntaxKind.NamedExports, { - elements: createNodeArray(elements), - }) as unknown as NamedExports; -} - -export function createExportSpecifier(isTypeOnly: boolean = false, propertyName: ModuleExportName | undefined, name: ModuleExportName): ExportSpecifier { - return new NodeObject(SyntaxKind.ExportSpecifier, { - isTypeOnly, - propertyName, - name, - }) as unknown as ExportSpecifier; -} - -export function createCallSignatureDeclaration(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): CallSignatureDeclaration { - return new NodeObject(SyntaxKind.CallSignature, { - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as CallSignatureDeclaration; -} - -export function createConstructSignatureDeclaration(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructSignatureDeclaration { - return new NodeObject(SyntaxKind.ConstructSignature, { - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as ConstructSignatureDeclaration; -} - -export function createConstructorDeclaration(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): ConstructorDeclaration { - return new NodeObject(SyntaxKind.Constructor, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as ConstructorDeclaration; -} - -export function createGetAccessorDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): GetAccessorDeclaration { - return new NodeObject(SyntaxKind.GetAccessor, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as GetAccessorDeclaration; -} - -export function createSetAccessorDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): SetAccessorDeclaration { - return new NodeObject(SyntaxKind.SetAccessor, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as SetAccessorDeclaration; -} - -export function createIndexSignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { - return new NodeObject(SyntaxKind.IndexSignature, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as IndexSignatureDeclaration; -} - -export function createMethodSignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): MethodSignatureDeclaration { - return new NodeObject(SyntaxKind.MethodSignature, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - postfixToken, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as MethodSignatureDeclaration; -} - -export function createMethodDeclaration(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): MethodDeclaration { - return new NodeObject(SyntaxKind.MethodDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - asteriskToken, - name, - postfixToken, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as MethodDeclaration; -} - -export function createPropertySignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertySignatureDeclaration { - return new NodeObject(SyntaxKind.PropertySignature, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - postfixToken, - type, - initializer, - }) as unknown as PropertySignatureDeclaration; -} - -export function createPropertyDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken?: QuestionToken | ExclamationToken, type?: TypeNode, initializer?: Expression): PropertyDeclaration { - return new NodeObject(SyntaxKind.PropertyDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - postfixToken, - type, - initializer, - }) as unknown as PropertyDeclaration; -} - -export function createSemicolonClassElement(): SemicolonClassElement { - return new NodeObject(SyntaxKind.SemicolonClassElement, undefined) as unknown as SemicolonClassElement; -} - -export function createClassStaticBlockDeclaration(modifiers: readonly ModifierLike[] | undefined, body: Block): ClassStaticBlockDeclaration { - return new NodeObject(SyntaxKind.ClassStaticBlockDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - body, - }) as unknown as ClassStaticBlockDeclaration; -} - -export function createOmittedExpression(): OmittedExpression { - return new NodeObject(SyntaxKind.OmittedExpression, undefined) as unknown as OmittedExpression; -} - -export function createKeywordExpression(kind: TKind): KeywordExpression { - return new NodeObject(kind, undefined) as unknown as KeywordExpression; -} - -export function createStringLiteral(text: string, tokenFlags: TokenFlags): StringLiteral { - return new NodeObject(SyntaxKind.StringLiteral, { - text, - tokenFlags, - }) as unknown as StringLiteral; -} - -export function createNumericLiteral(text: string, tokenFlags: TokenFlags): NumericLiteral { - return new NodeObject(SyntaxKind.NumericLiteral, { - text, - tokenFlags, - }) as unknown as NumericLiteral; -} - -export function createBigIntLiteral(text: string, tokenFlags: TokenFlags): BigIntLiteral { - return new NodeObject(SyntaxKind.BigIntLiteral, { - text, - tokenFlags, - }) as unknown as BigIntLiteral; -} - -export function createRegularExpressionLiteral(text: string, tokenFlags: TokenFlags): RegularExpressionLiteral { - return new NodeObject(SyntaxKind.RegularExpressionLiteral, { - text, - tokenFlags, - }) as unknown as RegularExpressionLiteral; -} - -export function createNoSubstitutionTemplateLiteral(text: string, templateFlags: TokenFlags): NoSubstitutionTemplateLiteral { - return new NodeObject(SyntaxKind.NoSubstitutionTemplateLiteral, { - text, - templateFlags, - }) as unknown as NoSubstitutionTemplateLiteral; -} - -export function createBinaryExpression(modifiers: readonly ModifierLike[] | undefined, left: Expression, type: TypeNode | undefined, operatorToken: BinaryOperatorToken, right: Expression): BinaryExpression { - return new NodeObject(SyntaxKind.BinaryExpression, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - left, - type, - operatorToken, - right, - }) as unknown as BinaryExpression; -} - -export function createPrefixUnaryExpression(operator: SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken, operand: Expression): PrefixUnaryExpression { - return new NodeObject(SyntaxKind.PrefixUnaryExpression, { - operator, - operand, - }) as unknown as PrefixUnaryExpression; -} - -export function createPostfixUnaryExpression(operand: Expression, operator: SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken): PostfixUnaryExpression { - return new NodeObject(SyntaxKind.PostfixUnaryExpression, { - operand, - operator, - }) as unknown as PostfixUnaryExpression; -} - -export function createYieldExpression(asteriskToken?: AsteriskToken, expression?: Expression): YieldExpression { - return new NodeObject(SyntaxKind.YieldExpression, { - asteriskToken, - expression, - }) as unknown as YieldExpression; -} - -export function createArrowFunction(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, equalsGreaterThanToken: EqualsGreaterThanToken, body: ConciseBody): ArrowFunction { - return new NodeObject(SyntaxKind.ArrowFunction, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - equalsGreaterThanToken, - body, - }) as unknown as ArrowFunction; -} - -export function createFunctionExpression(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, body: FunctionBody): FunctionExpression { - return new NodeObject(SyntaxKind.FunctionExpression, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - asteriskToken, - name, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - body, - }) as unknown as FunctionExpression; -} - -export function createAsExpression(expression: Expression, type: TypeNode): AsExpression { - return new NodeObject(SyntaxKind.AsExpression, { - expression, - type, - }) as unknown as AsExpression; -} - -export function createSatisfiesExpression(expression: Expression, type: TypeNode): SatisfiesExpression { - return new NodeObject(SyntaxKind.SatisfiesExpression, { - expression, - type, - }) as unknown as SatisfiesExpression; -} - -export function createConditionalExpression(condition: Expression, questionToken: QuestionToken, whenTrue: Expression, colonToken: ColonToken, whenFalse: Expression): ConditionalExpression { - return new NodeObject(SyntaxKind.ConditionalExpression, { - condition, - questionToken, - whenTrue, - colonToken, - whenFalse, - }) as unknown as ConditionalExpression; -} - -export function createPropertyAccessExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, name: MemberName, flags: NodeFlags): PropertyAccessExpression { - const node = new NodeObject(SyntaxKind.PropertyAccessExpression, { - expression, - questionDotToken, - name, - }) as unknown as PropertyAccessExpression; - (node as any).flags = flags; - return node; -} - -export function createElementAccessExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, argumentExpression: Expression, flags: NodeFlags): ElementAccessExpression { - const node = new NodeObject(SyntaxKind.ElementAccessExpression, { - expression, - questionDotToken, - argumentExpression, - }) as unknown as ElementAccessExpression; - (node as any).flags = flags; - return node; -} - -export function createCallExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, typeArguments: readonly TypeNode[] | undefined, arguments_: readonly Expression[], flags: NodeFlags): CallExpression { - const node = new NodeObject(SyntaxKind.CallExpression, { - expression, - questionDotToken, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - arguments: createNodeArray(arguments_), - }) as unknown as CallExpression; - (node as any).flags = flags; - return node; -} - -export function createNewExpression(expression: Expression, typeArguments?: readonly TypeNode[], arguments_?: readonly Expression[]): NewExpression { - return new NodeObject(SyntaxKind.NewExpression, { - expression, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - arguments: arguments_ ? createNodeArray(arguments_) : undefined, - }) as unknown as NewExpression; -} - -export function createMetaProperty(keywordToken: SyntaxKind.ImportKeyword | SyntaxKind.NewKeyword, name: Identifier): MetaProperty { - return new NodeObject(SyntaxKind.MetaProperty, { - keywordToken, - name, - }) as unknown as MetaProperty; -} - -export function createNonNullExpression(expression: Expression, flags: NodeFlags): NonNullExpression { - const node = new NodeObject(SyntaxKind.NonNullExpression, { - expression, - }) as unknown as NonNullExpression; - (node as any).flags = flags; - return node; -} - -export function createSpreadElement(expression: Expression): SpreadElement { - return new NodeObject(SyntaxKind.SpreadElement, { - expression, - }) as unknown as SpreadElement; -} - -export function createTemplateExpression(head: TemplateHead, templateSpans: readonly TemplateSpan[]): TemplateExpression { - return new NodeObject(SyntaxKind.TemplateExpression, { - head, - templateSpans: createNodeArray(templateSpans), - }) as unknown as TemplateExpression; -} - -export function createTemplateSpan(expression: Expression, literal: TemplateMiddleOrTail): TemplateSpan { - return new NodeObject(SyntaxKind.TemplateSpan, { - expression, - literal, - }) as unknown as TemplateSpan; -} - -export function createTaggedTemplateExpression(tag: Expression, questionDotToken: QuestionDotToken, typeArguments: readonly TypeNode[] | undefined, template: TemplateLiteral, flags: NodeFlags): TaggedTemplateExpression { - const node = new NodeObject(SyntaxKind.TaggedTemplateExpression, { - tag, - questionDotToken, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - template, - }) as unknown as TaggedTemplateExpression; - (node as any).flags = flags; - return node; -} - -export function createParenthesizedExpression(expression: Expression): ParenthesizedExpression { - return new NodeObject(SyntaxKind.ParenthesizedExpression, { - expression, - }) as unknown as ParenthesizedExpression; -} - -export function createArrayLiteralExpression(elements: readonly Expression[], multiLine?: boolean): ArrayLiteralExpression { - return new NodeObject(SyntaxKind.ArrayLiteralExpression, { - elements: createNodeArray(elements), - multiLine, - }) as unknown as ArrayLiteralExpression; -} - -export function createObjectLiteralExpression(properties: readonly ObjectLiteralElementLike[], multiLine?: boolean): ObjectLiteralExpression { - return new NodeObject(SyntaxKind.ObjectLiteralExpression, { - properties: createNodeArray(properties), - multiLine, - }) as unknown as ObjectLiteralExpression; -} - -export function createSpreadAssignment(expression: Expression): SpreadAssignment { - return new NodeObject(SyntaxKind.SpreadAssignment, { - expression, - }) as unknown as SpreadAssignment; -} - -export function createPropertyAssignment(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertyAssignment { - return new NodeObject(SyntaxKind.PropertyAssignment, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - postfixToken, - type, - initializer, - }) as unknown as PropertyAssignment; -} - -export function createShorthandPropertyAssignment(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, equalsToken?: EqualsToken, objectAssignmentInitializer?: Expression): ShorthandPropertyAssignment { - return new NodeObject(SyntaxKind.ShorthandPropertyAssignment, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - postfixToken, - type, - equalsToken, - objectAssignmentInitializer, - }) as unknown as ShorthandPropertyAssignment; -} - -export function createDeleteExpression(expression: Expression): DeleteExpression { - return new NodeObject(SyntaxKind.DeleteExpression, { - expression, - }) as unknown as DeleteExpression; -} - -export function createTypeOfExpression(expression: Expression): TypeOfExpression { - return new NodeObject(SyntaxKind.TypeOfExpression, { - expression, - }) as unknown as TypeOfExpression; -} - -export function createVoidExpression(expression: Expression): VoidExpression { - return new NodeObject(SyntaxKind.VoidExpression, { - expression, - }) as unknown as VoidExpression; -} - -export function createAwaitExpression(expression: Expression): AwaitExpression { - return new NodeObject(SyntaxKind.AwaitExpression, { - expression, - }) as unknown as AwaitExpression; -} - -export function createTypeAssertion(type: TypeNode, expression: Expression): TypeAssertion { - return new NodeObject(SyntaxKind.TypeAssertionExpression, { - type, - expression, - }) as unknown as TypeAssertion; -} - -export function createKeywordTypeNode(kind: TKind): KeywordTypeNode { - return new NodeObject(kind, undefined) as unknown as KeywordTypeNode; -} - -export function createUnionTypeNode(types: readonly TypeNode[]): UnionTypeNode { - return new NodeObject(SyntaxKind.UnionType, { - types: createNodeArray(types), - }) as unknown as UnionTypeNode; -} - -export function createIntersectionTypeNode(types: readonly TypeNode[]): IntersectionTypeNode { - return new NodeObject(SyntaxKind.IntersectionType, { - types: createNodeArray(types), - }) as unknown as IntersectionTypeNode; -} - -export function createConditionalTypeNode(checkType: TypeNode, extendsType: TypeNode, trueType: TypeNode, falseType: TypeNode): ConditionalTypeNode { - return new NodeObject(SyntaxKind.ConditionalType, { - checkType, - extendsType, - trueType, - falseType, - }) as unknown as ConditionalTypeNode; -} - -export function createTypeOperatorNode(operator: SyntaxKind.KeyOfKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.UniqueKeyword, type: TypeNode): TypeOperatorNode { - return new NodeObject(SyntaxKind.TypeOperator, { - operator, - type, - }) as unknown as TypeOperatorNode; -} - -export function createInferTypeNode(typeParameter: TypeParameterDeclaration): InferTypeNode { - return new NodeObject(SyntaxKind.InferType, { - typeParameter, - }) as unknown as InferTypeNode; -} - -export function createArrayTypeNode(elementType: TypeNode): ArrayTypeNode { - return new NodeObject(SyntaxKind.ArrayType, { - elementType, - }) as unknown as ArrayTypeNode; -} - -export function createIndexedAccessTypeNode(objectType: TypeNode, indexType: TypeNode): IndexedAccessTypeNode { - return new NodeObject(SyntaxKind.IndexedAccessType, { - objectType, - indexType, - }) as unknown as IndexedAccessTypeNode; -} - -export function createTypeReferenceNode(typeName: EntityName, typeArguments?: readonly TypeNode[]): TypeReferenceNode { - return new NodeObject(SyntaxKind.TypeReference, { - typeName, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - }) as unknown as TypeReferenceNode; -} - -export function createExpressionWithTypeArguments(expression: Expression, typeArguments?: readonly TypeNode[]): ExpressionWithTypeArguments { - return new NodeObject(SyntaxKind.ExpressionWithTypeArguments, { - expression, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - }) as unknown as ExpressionWithTypeArguments; -} - -export function createLiteralTypeNode(literal: Node): LiteralTypeNode { - return new NodeObject(SyntaxKind.LiteralType, { - literal, - }) as unknown as LiteralTypeNode; -} - -export function createThisTypeNode(): ThisTypeNode { - return new NodeObject(SyntaxKind.ThisType, undefined) as unknown as ThisTypeNode; -} - -export function createTypePredicateNode(assertsModifier: AssertsKeyword | undefined, parameterName: TypePredicateParameterName, type?: TypeNode): TypePredicateNode { - return new NodeObject(SyntaxKind.TypePredicate, { - assertsModifier, - parameterName, - type, - }) as unknown as TypePredicateNode; -} - -export function createImportAttribute(name: ImportAttributeName, value: Expression): ImportAttribute { - return new NodeObject(SyntaxKind.ImportAttribute, { - name, - value, - }) as unknown as ImportAttribute; -} - -export function createImportAttributes(token: SyntaxKind.WithKeyword | SyntaxKind.AssertKeyword, attributes: readonly ImportAttribute[], multiLine?: boolean): ImportAttributes { - return new NodeObject(SyntaxKind.ImportAttributes, { - token, - attributes: createNodeArray(attributes), - multiLine, - }) as unknown as ImportAttributes; -} - -export function createTypeQueryNode(exprName: EntityName, typeArguments?: readonly TypeNode[]): TypeQueryNode { - return new NodeObject(SyntaxKind.TypeQuery, { - exprName, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - }) as unknown as TypeQueryNode; -} - -export function createMappedTypeNode(readonlyToken: ReadonlyKeyword | PlusToken | MinusToken | undefined, typeParameter: TypeParameterDeclaration, nameType?: TypeNode, questionToken?: QuestionToken | PlusToken | MinusToken, type?: TypeNode, members?: readonly TypeElement[]): MappedTypeNode { - return new NodeObject(SyntaxKind.MappedType, { - readonlyToken, - typeParameter, - nameType, - questionToken, - type, - members: members ? createNodeArray(members) : undefined, - }) as unknown as MappedTypeNode; -} - -export function createTypeLiteralNode(members: readonly TypeElement[]): TypeLiteralNode { - return new NodeObject(SyntaxKind.TypeLiteral, { - members: createNodeArray(members), - }) as unknown as TypeLiteralNode; -} - -export function createTupleTypeNode(elements: readonly TypeNode[]): TupleTypeNode { - return new NodeObject(SyntaxKind.TupleType, { - elements: createNodeArray(elements), - }) as unknown as TupleTypeNode; -} - -export function createNamedTupleMember(dotDotDotToken: DotDotDotToken | undefined, name: Identifier, questionToken: QuestionToken | undefined, type: TypeNode): NamedTupleMember { - return new NodeObject(SyntaxKind.NamedTupleMember, { - dotDotDotToken, - name, - questionToken, - type, - }) as unknown as NamedTupleMember; -} - -export function createOptionalTypeNode(type: TypeNode): OptionalTypeNode { - return new NodeObject(SyntaxKind.OptionalType, { - type, - }) as unknown as OptionalTypeNode; -} - -export function createRestTypeNode(type: TypeNode): RestTypeNode { - return new NodeObject(SyntaxKind.RestType, { - type, - }) as unknown as RestTypeNode; -} - -export function createParenthesizedTypeNode(type: TypeNode): ParenthesizedTypeNode { - return new NodeObject(SyntaxKind.ParenthesizedType, { - type, - }) as unknown as ParenthesizedTypeNode; -} - -export function createFunctionTypeNode(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): FunctionTypeNode { - return new NodeObject(SyntaxKind.FunctionType, { - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as FunctionTypeNode; -} - -export function createConstructorTypeNode(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructorTypeNode { - return new NodeObject(SyntaxKind.ConstructorType, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as ConstructorTypeNode; -} - -export function createTemplateHead(text: string, rawText: string, templateFlags: TokenFlags): TemplateHead { - return new NodeObject(SyntaxKind.TemplateHead, { - text, - rawText, - templateFlags, - }) as unknown as TemplateHead; -} - -export function createTemplateMiddle(text: string, rawText: string, templateFlags: TokenFlags): TemplateMiddle { - return new NodeObject(SyntaxKind.TemplateMiddle, { - text, - rawText, - templateFlags, - }) as unknown as TemplateMiddle; -} - -export function createTemplateTail(text: string, rawText: string, templateFlags: TokenFlags): TemplateTail { - return new NodeObject(SyntaxKind.TemplateTail, { - text, - rawText, - templateFlags, - }) as unknown as TemplateTail; -} - -export function createTemplateLiteralTypeNode(head: TemplateHead, templateSpans: readonly TemplateLiteralTypeSpan[]): TemplateLiteralTypeNode { - return new NodeObject(SyntaxKind.TemplateLiteralType, { - head, - templateSpans: createNodeArray(templateSpans), - }) as unknown as TemplateLiteralTypeNode; -} - -export function createTemplateLiteralTypeSpan(type: TypeNode, literal: TemplateMiddleOrTail): TemplateLiteralTypeSpan { - return new NodeObject(SyntaxKind.TemplateLiteralTypeSpan, { - type, - literal, - }) as unknown as TemplateLiteralTypeSpan; -} - -export function createSyntheticExpression(type: any, isSpread?: boolean, tupleNameSource?: Node): SyntheticExpression { - return new NodeObject(SyntaxKind.SyntheticExpression, { - type, - isSpread, - tupleNameSource, - }) as unknown as SyntheticExpression; -} - -export function createPartiallyEmittedExpression(expression: Expression): PartiallyEmittedExpression { - return new NodeObject(SyntaxKind.PartiallyEmittedExpression, { - expression, - }) as unknown as PartiallyEmittedExpression; -} - -export function createJsxElement(openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement { - return new NodeObject(SyntaxKind.JsxElement, { - openingElement, - children: createNodeArray(children), - closingElement, - }) as unknown as JsxElement; -} - -export function createJsxAttributes(properties: readonly JsxAttributeLike[]): JsxAttributes { - return new NodeObject(SyntaxKind.JsxAttributes, { - properties: createNodeArray(properties), - }) as unknown as JsxAttributes; -} - -export function createJsxNamespacedName(namespace: Identifier, name: Identifier): JsxNamespacedName { - return new NodeObject(SyntaxKind.JsxNamespacedName, { - namespace, - name, - }) as unknown as JsxNamespacedName; -} - -export function createJsxOpeningElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxOpeningElement { - return new NodeObject(SyntaxKind.JsxOpeningElement, { - tagName, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - attributes, - }) as unknown as JsxOpeningElement; -} - -export function createJsxSelfClosingElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement { - return new NodeObject(SyntaxKind.JsxSelfClosingElement, { - tagName, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - attributes, - }) as unknown as JsxSelfClosingElement; -} - -export function createJsxFragment(openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment { - return new NodeObject(SyntaxKind.JsxFragment, { - openingFragment, - children: createNodeArray(children), - closingFragment, - }) as unknown as JsxFragment; -} - -export function createJsxOpeningFragment(): JsxOpeningFragment { - return new NodeObject(SyntaxKind.JsxOpeningFragment, undefined) as unknown as JsxOpeningFragment; -} - -export function createJsxClosingFragment(): JsxClosingFragment { - return new NodeObject(SyntaxKind.JsxClosingFragment, undefined) as unknown as JsxClosingFragment; -} - -export function createJsxAttribute(name: JsxAttributeName, initializer?: JsxAttributeValue): JsxAttribute { - return new NodeObject(SyntaxKind.JsxAttribute, { - name, - initializer, - }) as unknown as JsxAttribute; -} - -export function createJsxSpreadAttribute(expression: Expression): JsxSpreadAttribute { - return new NodeObject(SyntaxKind.JsxSpreadAttribute, { - expression, - }) as unknown as JsxSpreadAttribute; -} - -export function createJsxClosingElement(tagName: JsxTagNameExpression): JsxClosingElement { - return new NodeObject(SyntaxKind.JsxClosingElement, { - tagName, - }) as unknown as JsxClosingElement; -} - -export function createJsxExpression(dotDotDotToken?: DotDotDotToken, expression?: Expression): JsxExpression { - return new NodeObject(SyntaxKind.JsxExpression, { - dotDotDotToken, - expression, - }) as unknown as JsxExpression; -} - -export function createJsxText(text: string, containsOnlyTriviaWhiteSpaces?: boolean): JsxText { - return new NodeObject(SyntaxKind.JsxText, { - text, - containsOnlyTriviaWhiteSpaces, - }) as unknown as JsxText; -} - -export function createSyntaxList(children: readonly Node[]): SyntaxList { - return new NodeObject(SyntaxKind.SyntaxList, { - children, - }) as unknown as SyntaxList; -} - -export function createJSDoc(comment: readonly JSDocComment[], tags?: readonly JSDocTag[]): JSDoc { - return new NodeObject(SyntaxKind.JSDoc, { - comment: createNodeArray(comment), - tags: tags ? createNodeArray(tags) : undefined, - }) as unknown as JSDoc; -} - -export function createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression { - return new NodeObject(SyntaxKind.JSDocTypeExpression, { - type, - }) as unknown as JSDocTypeExpression; -} - -export function createJSDocNonNullableType(type: TypeNode): JSDocNonNullableType { - return new NodeObject(SyntaxKind.JSDocNonNullableType, { - type, - }) as unknown as JSDocNonNullableType; -} - -export function createJSDocNullableType(type: TypeNode): JSDocNullableType { - return new NodeObject(SyntaxKind.JSDocNullableType, { - type, - }) as unknown as JSDocNullableType; -} - -export function createJSDocAllType(): JSDocAllType { - return new NodeObject(SyntaxKind.JSDocAllType, undefined) as unknown as JSDocAllType; -} - -export function createJSDocVariadicType(type: TypeNode): JSDocVariadicType { - return new NodeObject(SyntaxKind.JSDocVariadicType, { - type, - }) as unknown as JSDocVariadicType; -} - -export function createJSDocOptionalType(type: TypeNode): JSDocOptionalType { - return new NodeObject(SyntaxKind.JSDocOptionalType, { - type, - }) as unknown as JSDocOptionalType; -} - -export function createJSDocTypeTag(tagName: Identifier, typeExpression: Node, comment?: readonly JSDocComment[]): JSDocTypeTag { - return new NodeObject(SyntaxKind.JSDocTypeTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocTypeTag; -} - -export function createJSDocUnknownTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocUnknownTag { - return new NodeObject(SyntaxKind.JSDocUnknownTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocUnknownTag; -} - -export function createJSDocTemplateTag(tagName: Identifier, constraint: Node, typeParameters: readonly TypeParameterDeclaration[], comment?: readonly JSDocComment[]): JSDocTemplateTag { - return new NodeObject(SyntaxKind.JSDocTemplateTag, { - tagName, - constraint, - typeParameters: createNodeArray(typeParameters), - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocTemplateTag; -} - -export function createJSDocReturnTag(tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocReturnTag { - return new NodeObject(SyntaxKind.JSDocReturnTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocReturnTag; -} - -export function createJSDocPublicTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPublicTag { - return new NodeObject(SyntaxKind.JSDocPublicTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocPublicTag; -} - -export function createJSDocPrivateTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPrivateTag { - return new NodeObject(SyntaxKind.JSDocPrivateTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocPrivateTag; -} - -export function createJSDocProtectedTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocProtectedTag { - return new NodeObject(SyntaxKind.JSDocProtectedTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocProtectedTag; -} - -export function createJSDocReadonlyTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocReadonlyTag { - return new NodeObject(SyntaxKind.JSDocReadonlyTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocReadonlyTag; -} - -export function createJSDocOverrideTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocOverrideTag { - return new NodeObject(SyntaxKind.JSDocOverrideTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocOverrideTag; -} - -export function createJSDocDeprecatedTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocDeprecatedTag { - return new NodeObject(SyntaxKind.JSDocDeprecatedTag, { - tagName, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocDeprecatedTag; -} - -export function createJSDocSeeTag(tagName: Identifier, nameExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSeeTag { - return new NodeObject(SyntaxKind.JSDocSeeTag, { - tagName, - nameExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocSeeTag; -} - -export function createJSDocImplementsTag(tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocImplementsTag { - return new NodeObject(SyntaxKind.JSDocImplementsTag, { - tagName, - className, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocImplementsTag; -} - -export function createJSDocAugmentsTag(tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocAugmentsTag { - return new NodeObject(SyntaxKind.JSDocAugmentsTag, { - tagName, - className, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocAugmentsTag; -} - -export function createJSDocSatisfiesTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSatisfiesTag { - return new NodeObject(SyntaxKind.JSDocSatisfiesTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocSatisfiesTag; -} - -export function createJSDocThrowsTag(tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocThrowsTag { - return new NodeObject(SyntaxKind.JSDocThrowsTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocThrowsTag; -} - -export function createJSDocThisTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocThisTag { - return new NodeObject(SyntaxKind.JSDocThisTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocThisTag; -} - -export function createJSDocImportTag(tagName: Identifier, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes, comment?: readonly JSDocComment[]): JSDocImportTag { - return new NodeObject(SyntaxKind.JSDocImportTag, { - tagName, - importClause, - moduleSpecifier, - attributes, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocImportTag; -} - -export function createJSDocCallbackTag(tagName: Identifier, typeExpression: TypeNode, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocCallbackTag { - return new NodeObject(SyntaxKind.JSDocCallbackTag, { - tagName, - typeExpression, - name, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocCallbackTag; -} - -export function createJSDocOverloadTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocOverloadTag { - return new NodeObject(SyntaxKind.JSDocOverloadTag, { - tagName, - typeExpression, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocOverloadTag; -} - -export function createJSDocTypedefTag(tagName: Identifier, typeExpression?: Node, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocTypedefTag { - return new NodeObject(SyntaxKind.JSDocTypedefTag, { - tagName, - typeExpression, - name, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocTypedefTag; -} - -export function createJSDocSignature(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): JSDocSignature { - return new NodeObject(SyntaxKind.JSDocSignature, { - typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, - parameters: createNodeArray(parameters), - type, - }) as unknown as JSDocSignature; -} - -export function createJSDocNameReference(name: EntityName): JSDocNameReference { - return new NodeObject(SyntaxKind.JSDocNameReference, { - name, - }) as unknown as JSDocNameReference; -} - -export function createModuleDeclaration(modifiers: readonly ModifierLike[] | undefined, keyword: SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword, name: ModuleName, attributes?: TypeLiteralNode, body?: ModuleBody): ModuleDeclaration { - return new NodeObject(SyntaxKind.ModuleDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - keyword, - name, - attributes, - body, - }) as unknown as ModuleDeclaration; -} - -export function createImportEqualsDeclaration(modifiers: readonly ModifierLike[] | undefined, isTypeOnly: boolean = false, name: Identifier, moduleReference: ModuleReference): ImportEqualsDeclaration { - return new NodeObject(SyntaxKind.ImportEqualsDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - isTypeOnly, - name, - moduleReference, - }) as unknown as ImportEqualsDeclaration; -} - -export function createExportDeclaration(modifiers?: readonly ModifierLike[], isTypeOnly?: boolean, exportClause?: NamedExportBindings, moduleSpecifier?: Expression, attributes?: ImportAttributes): ExportDeclaration { - return new NodeObject(SyntaxKind.ExportDeclaration, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - isTypeOnly, - exportClause, - moduleSpecifier, - attributes, - }) as unknown as ExportDeclaration; -} - -export function createImportTypeNode(isTypeOf: boolean = false, argument: TypeNode, attributes?: ImportAttributes, qualifier?: EntityName, typeArguments?: readonly TypeNode[]): ImportTypeNode { - return new NodeObject(SyntaxKind.ImportType, { - isTypeOf, - argument, - attributes, - qualifier, - typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, - }) as unknown as ImportTypeNode; -} - -export function createImportClause(phaseModifier?: ImportPhaseModifierSyntaxKind, name?: Identifier, namedBindings?: NamedImportBindings): ImportClause { - return new NodeObject(SyntaxKind.ImportClause, { - phaseModifier, - name, - namedBindings, - }) as unknown as ImportClause; -} - -export function createImportSpecifier(isTypeOnly: boolean = false, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier { - return new NodeObject(SyntaxKind.ImportSpecifier, { - isTypeOnly, - propertyName, - name, - }) as unknown as ImportSpecifier; -} - -export function createJSDocText(text: string): JSDocText { - return new NodeObject(SyntaxKind.JSDocText, { - text, - }) as unknown as JSDocText; -} - -export function createJSDocLink(name: EntityName | undefined, text: string): JSDocLink { - return new NodeObject(SyntaxKind.JSDocLink, { - name, - text, - }) as unknown as JSDocLink; -} - -export function createJSDocLinkPlain(name: EntityName | undefined, text: string): JSDocLinkPlain { - return new NodeObject(SyntaxKind.JSDocLinkPlain, { - name, - text, - }) as unknown as JSDocLinkPlain; -} - -export function createJSDocLinkCode(name: EntityName | undefined, text: string): JSDocLinkCode { - return new NodeObject(SyntaxKind.JSDocLinkCode, { - name, - text, - }) as unknown as JSDocLinkCode; -} - -export function createTypeParameterDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, constraint?: TypeNode, expression?: Expression, defaultType?: TypeNode): TypeParameterDeclaration { - return new NodeObject(SyntaxKind.TypeParameter, { - modifiers: modifiers ? createNodeArray(modifiers) : undefined, - name, - constraint, - expression, - defaultType, - }) as unknown as TypeParameterDeclaration; -} - -export function createSyntheticReferenceExpression(expression: Expression, thisArg: Expression): SyntheticReferenceExpression { - return new NodeObject(SyntaxKind.SyntheticReferenceExpression, { - expression, - thisArg, - }) as unknown as SyntheticReferenceExpression; -} - -export function createJSDocTypeLiteral(jsdocPropertyTags?: readonly JSDocTag[], isArrayType?: boolean): JSDocTypeLiteral { - return new NodeObject(SyntaxKind.JSDocTypeLiteral, { - jsdocPropertyTags, - isArrayType, - }) as unknown as JSDocTypeLiteral; -} - -export function createForInStatement(awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForInStatement { - return new NodeObject(SyntaxKind.ForInStatement, { - awaitModifier, - initializer, - expression, - statement, - }) as unknown as ForInStatement; -} - -export function createForOfStatement(awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForOfStatement { - return new NodeObject(SyntaxKind.ForOfStatement, { - awaitModifier, - initializer, - expression, - statement, - }) as unknown as ForOfStatement; -} - -export function createCaseClause(expression: Expression, statements: readonly Statement[]): CaseClause { - return new NodeObject(SyntaxKind.CaseClause, { - expression, - statements: createNodeArray(statements), - }) as unknown as CaseClause; -} - -export function createDefaultClause(expression: Expression, statements: readonly Statement[]): DefaultClause { - return new NodeObject(SyntaxKind.DefaultClause, { - expression, - statements: createNodeArray(statements), - }) as unknown as DefaultClause; -} - -export function createObjectBindingPattern(elements: readonly BindingElement[]): ObjectBindingPattern { - return new NodeObject(SyntaxKind.ObjectBindingPattern, { - elements: createNodeArray(elements), - }) as unknown as ObjectBindingPattern; -} - -export function createArrayBindingPattern(elements: readonly BindingElement[]): ArrayBindingPattern { - return new NodeObject(SyntaxKind.ArrayBindingPattern, { - elements: createNodeArray(elements), - }) as unknown as ArrayBindingPattern; -} - -export function createJSDocParameterTag(tagName: Identifier, name: EntityName, isBracketed: boolean, typeExpression: TypeNode | undefined, isNameFirst: boolean, comment: readonly JSDocComment[] | undefined): JSDocParameterTag { - return new NodeObject(SyntaxKind.JSDocParameterTag, { - tagName, - name, - isBracketed, - typeExpression, - isNameFirst, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocParameterTag; -} - -export function createJSDocPropertyTag(tagName: Identifier, name: EntityName, isBracketed: boolean, typeExpression: TypeNode | undefined, isNameFirst: boolean, comment: readonly JSDocComment[] | undefined): JSDocPropertyTag { - return new NodeObject(SyntaxKind.JSDocPropertyTag, { - tagName, - name, - isBracketed, - typeExpression, - isNameFirst, - comment: comment ? createNodeArray(comment) : undefined, - }) as unknown as JSDocPropertyTag; -} - -export function updateQualifiedName(node: QualifiedName, left: EntityName, right: MemberName): QualifiedName { - return node.left !== left || node.right !== right ? createQualifiedName(left, right) : node; -} - -export function updateComputedPropertyName(node: ComputedPropertyName, expression: Expression): ComputedPropertyName { - return node.expression !== expression ? createComputedPropertyName(expression) : node; -} - -export function updateDecorator(node: Decorator, expression: LeftHandSideExpression): Decorator { - return node.expression !== expression ? createDecorator(expression) : node; -} - -export function updateIfStatement(node: IfStatement, expression: Expression, thenStatement: Statement, elseStatement?: Statement): IfStatement { - return node.expression !== expression || node.thenStatement !== thenStatement || node.elseStatement !== elseStatement ? createIfStatement(expression, thenStatement, elseStatement) : node; -} - -export function updateDoStatement(node: DoStatement, statement: Statement, expression: Expression): DoStatement { - return node.statement !== statement || node.expression !== expression ? createDoStatement(statement, expression) : node; -} - -export function updateWhileStatement(node: WhileStatement, expression: Expression, statement: Statement): WhileStatement { - return node.expression !== expression || node.statement !== statement ? createWhileStatement(expression, statement) : node; -} - -export function updateForStatement(node: ForStatement, initializer: ForInitializer | undefined, condition: Expression | undefined, incrementor: Expression | undefined, statement: Statement): ForStatement { - return node.initializer !== initializer || node.condition !== condition || node.incrementor !== incrementor || node.statement !== statement ? createForStatement(initializer, condition, incrementor, statement) : node; -} - -export function updateBreakStatement(node: BreakStatement, label?: Identifier): BreakStatement { - return node.label !== label ? createBreakStatement(label) : node; -} - -export function updateContinueStatement(node: ContinueStatement, label?: Identifier): ContinueStatement { - return node.label !== label ? createContinueStatement(label) : node; -} - -export function updateReturnStatement(node: ReturnStatement, expression?: Expression): ReturnStatement { - return node.expression !== expression ? createReturnStatement(expression) : node; -} - -export function updateWithStatement(node: WithStatement, expression: Expression, statement: Statement): WithStatement { - return node.expression !== expression || node.statement !== statement ? createWithStatement(expression, statement) : node; -} - -export function updateSwitchStatement(node: SwitchStatement, expression: Expression, caseBlock: CaseBlock): SwitchStatement { - return node.expression !== expression || node.caseBlock !== caseBlock ? createSwitchStatement(expression, caseBlock) : node; -} - -export function updateCaseBlock(node: CaseBlock, clauses: readonly CaseOrDefaultClause[]): CaseBlock { - return node.clauses !== clauses ? createCaseBlock(clauses) : node; -} - -export function updateThrowStatement(node: ThrowStatement, expression: Expression): ThrowStatement { - return node.expression !== expression ? createThrowStatement(expression) : node; -} - -export function updateTryStatement(node: TryStatement, tryBlock: Block, catchClause?: CatchClause, finallyBlock?: Block): TryStatement { - return node.tryBlock !== tryBlock || node.catchClause !== catchClause || node.finallyBlock !== finallyBlock ? createTryStatement(tryBlock, catchClause, finallyBlock) : node; -} - -export function updateCatchClause(node: CatchClause, variableDeclaration: VariableDeclaration | undefined, block: Block): CatchClause { - return node.variableDeclaration !== variableDeclaration || node.block !== block ? createCatchClause(variableDeclaration, block) : node; -} - -export function updateLabeledStatement(node: LabeledStatement, label: Identifier, statement: Statement): LabeledStatement { - return node.label !== label || node.statement !== statement ? createLabeledStatement(label, statement) : node; -} - -export function updateExpressionStatement(node: ExpressionStatement, expression: Expression): ExpressionStatement { - return node.expression !== expression ? createExpressionStatement(expression) : node; -} - -export function updateBlock(node: Block, statements: readonly Statement[]): Block { - return node.statements !== statements ? createBlock(statements, node.multiLine) : node; -} - -export function updateVariableStatement(node: VariableStatement, modifiers: readonly ModifierLike[] | undefined, declarationList: VariableDeclarationList): VariableStatement { - return node.modifiers !== modifiers || node.declarationList !== declarationList ? createVariableStatement(modifiers, declarationList) : node; -} - -export function updateVariableDeclaration(node: VariableDeclaration, name: BindingName, exclamationToken?: ExclamationToken, type?: TypeNode, initializer?: Expression): VariableDeclaration { - return node.name !== name || node.exclamationToken !== exclamationToken || node.type !== type || node.initializer !== initializer ? createVariableDeclaration(name, exclamationToken, type, initializer) : node; -} - -export function updateVariableDeclarationList(node: VariableDeclarationList, declarations: readonly VariableDeclaration[]): VariableDeclarationList { - return node.declarations !== declarations ? createVariableDeclarationList(declarations, node.flags) : node; -} - -export function updateParameterDeclaration(node: ParameterDeclaration, modifiers: readonly ModifierLike[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression): ParameterDeclaration { - return node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) : node; -} - -export function updateBindingElement(node: BindingElement, dotDotDotToken?: DotDotDotToken, propertyName?: PropertyName, name?: BindingName, initializer?: Expression): BindingElement { - return node.dotDotDotToken !== dotDotDotToken || node.propertyName !== propertyName || node.name !== name || node.initializer !== initializer ? createBindingElement(dotDotDotToken, propertyName, name, initializer) : node; -} - -export function updateMissingDeclaration(node: MissingDeclaration, modifiers?: readonly ModifierLike[]): MissingDeclaration { - return node.modifiers !== modifiers ? createMissingDeclaration(modifiers) : node; -} - -export function updateFunctionDeclaration(node: FunctionDeclaration, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): FunctionDeclaration { - return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; -} - -export function updateClassDeclaration(node: ClassDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; -} - -export function updateClassExpression(node: ClassExpression, modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassExpression { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassExpression(modifiers, name, typeParameters, heritageClauses, members) : node; -} - -export function updateHeritageClause(node: HeritageClause, types: readonly HeritageClauseElement[]): HeritageClause { - return node.types !== types ? createHeritageClause(node.token, types) : node; -} - -export function updateInterfaceDeclaration(node: InterfaceDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly TypeElement[]): InterfaceDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; -} - -export function updateTypeAliasDeclaration(node: TypeAliasDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, type: TypeNode): TypeAliasDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.type !== type ? createTypeAliasDeclaration(modifiers, name, typeParameters, type) : node; -} - -export function updateEnumMember(node: EnumMember, name: PropertyName, initializer?: Expression): EnumMember { - return node.name !== name || node.initializer !== initializer ? createEnumMember(name, initializer) : node; -} - -export function updateEnumDeclaration(node: EnumDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, members: readonly EnumMember[]): EnumDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.members !== members ? createEnumDeclaration(modifiers, name, members) : node; -} - -export function updateModuleBlock(node: ModuleBlock, statements: readonly Statement[]): ModuleBlock { - return node.statements !== statements ? createModuleBlock(statements) : node; -} - -export function updateImportDeclaration(node: ImportDeclaration, modifiers: readonly ModifierLike[] | undefined, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes): ImportDeclaration { - return node.modifiers !== modifiers || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes) : node; -} - -export function updateExternalModuleReference(node: ExternalModuleReference, expression: Expression): ExternalModuleReference { - return node.expression !== expression ? createExternalModuleReference(expression) : node; -} - -export function updateNamespaceImport(node: NamespaceImport, name: Identifier): NamespaceImport { - return node.name !== name ? createNamespaceImport(name) : node; -} - -export function updateNamedImports(node: NamedImports, elements: readonly ImportSpecifier[]): NamedImports { - return node.elements !== elements ? createNamedImports(elements) : node; -} - -export function updateExportAssignment(node: ExportAssignment, modifiers: readonly ModifierLike[] | undefined, type: TypeNode, expression: Expression): ExportAssignment { - return node.modifiers !== modifiers || node.type !== type || node.expression !== expression ? createExportAssignment(modifiers, node.isExportEquals, type, expression) : node; -} - -export function updateNamespaceExportDeclaration(node: NamespaceExportDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier): NamespaceExportDeclaration { - return node.modifiers !== modifiers || node.name !== name ? createNamespaceExportDeclaration(modifiers, name) : node; -} - -export function updateNamespaceExport(node: NamespaceExport, name: ModuleExportName): NamespaceExport { - return node.name !== name ? createNamespaceExport(name) : node; -} - -export function updateNamedExports(node: NamedExports, elements: readonly ExportSpecifier[]): NamedExports { - return node.elements !== elements ? createNamedExports(elements) : node; -} - -export function updateExportSpecifier(node: ExportSpecifier, propertyName: ModuleExportName | undefined, name: ModuleExportName): ExportSpecifier { - return node.propertyName !== propertyName || node.name !== name ? createExportSpecifier(node.isTypeOnly, propertyName, name) : node; -} - -export function updateCallSignatureDeclaration(node: CallSignatureDeclaration, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): CallSignatureDeclaration { - return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createCallSignatureDeclaration(typeParameters, parameters, type) : node; -} - -export function updateConstructSignatureDeclaration(node: ConstructSignatureDeclaration, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructSignatureDeclaration { - return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructSignatureDeclaration(typeParameters, parameters, type) : node; -} - -export function updateConstructorDeclaration(node: ConstructorDeclaration, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): ConstructorDeclaration { - return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createConstructorDeclaration(modifiers, typeParameters, parameters, type, body) : node; -} - -export function updateGetAccessorDeclaration(node: GetAccessorDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): GetAccessorDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createGetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; -} - -export function updateSetAccessorDeclaration(node: SetAccessorDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): SetAccessorDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createSetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; -} - -export function updateIndexSignatureDeclaration(node: IndexSignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { - return node.modifiers !== modifiers || node.parameters !== parameters || node.type !== type ? createIndexSignatureDeclaration(modifiers, parameters, type) : node; -} - -export function updateMethodSignatureDeclaration(node: MethodSignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): MethodSignatureDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createMethodSignatureDeclaration(modifiers, name, postfixToken, typeParameters, parameters, type) : node; -} - -export function updateMethodDeclaration(node: MethodDeclaration, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): MethodDeclaration { - return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createMethodDeclaration(modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, type, body) : node; -} - -export function updatePropertySignatureDeclaration(node: PropertySignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertySignatureDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertySignatureDeclaration(modifiers, name, postfixToken, type, initializer) : node; -} - -export function updatePropertyDeclaration(node: PropertyDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken?: QuestionToken | ExclamationToken, type?: TypeNode, initializer?: Expression): PropertyDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyDeclaration(modifiers, name, postfixToken, type, initializer) : node; -} - -export function updateClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration, modifiers: readonly ModifierLike[] | undefined, body: Block): ClassStaticBlockDeclaration { - return node.modifiers !== modifiers || node.body !== body ? createClassStaticBlockDeclaration(modifiers, body) : node; -} - -export function updateBinaryExpression(node: BinaryExpression, modifiers: readonly ModifierLike[] | undefined, left: Expression, type: TypeNode | undefined, operatorToken: BinaryOperatorToken, right: Expression): BinaryExpression { - return node.modifiers !== modifiers || node.left !== left || node.type !== type || node.operatorToken !== operatorToken || node.right !== right ? createBinaryExpression(modifiers, left, type, operatorToken, right) : node; -} - -export function updatePrefixUnaryExpression(node: PrefixUnaryExpression, operand: Expression): PrefixUnaryExpression { - return node.operand !== operand ? createPrefixUnaryExpression(node.operator, operand) : node; -} - -export function updatePostfixUnaryExpression(node: PostfixUnaryExpression, operand: Expression): PostfixUnaryExpression { - return node.operand !== operand ? createPostfixUnaryExpression(operand, node.operator) : node; -} - -export function updateYieldExpression(node: YieldExpression, asteriskToken?: AsteriskToken, expression?: Expression): YieldExpression { - return node.asteriskToken !== asteriskToken || node.expression !== expression ? createYieldExpression(asteriskToken, expression) : node; -} - -export function updateArrowFunction(node: ArrowFunction, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, equalsGreaterThanToken: EqualsGreaterThanToken, body: ConciseBody): ArrowFunction { - return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.equalsGreaterThanToken !== equalsGreaterThanToken || node.body !== body ? createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) : node; -} - -export function updateFunctionExpression(node: FunctionExpression, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, body: FunctionBody): FunctionExpression { - return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; -} - -export function updateAsExpression(node: AsExpression, expression: Expression, type: TypeNode): AsExpression { - return node.expression !== expression || node.type !== type ? createAsExpression(expression, type) : node; -} - -export function updateSatisfiesExpression(node: SatisfiesExpression, expression: Expression, type: TypeNode): SatisfiesExpression { - return node.expression !== expression || node.type !== type ? createSatisfiesExpression(expression, type) : node; -} - -export function updateConditionalExpression(node: ConditionalExpression, condition: Expression, questionToken: QuestionToken, whenTrue: Expression, colonToken: ColonToken, whenFalse: Expression): ConditionalExpression { - return node.condition !== condition || node.questionToken !== questionToken || node.whenTrue !== whenTrue || node.colonToken !== colonToken || node.whenFalse !== whenFalse ? createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) : node; -} - -export function updatePropertyAccessExpression(node: PropertyAccessExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, name: MemberName): PropertyAccessExpression { - return node.expression !== expression || node.questionDotToken !== questionDotToken || node.name !== name ? createPropertyAccessExpression(expression, questionDotToken, name, node.flags) : node; -} - -export function updateElementAccessExpression(node: ElementAccessExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, argumentExpression: Expression): ElementAccessExpression { - return node.expression !== expression || node.questionDotToken !== questionDotToken || node.argumentExpression !== argumentExpression ? createElementAccessExpression(expression, questionDotToken, argumentExpression, node.flags) : node; -} - -export function updateCallExpression(node: CallExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, typeArguments: readonly TypeNode[] | undefined, arguments_: readonly Expression[]): CallExpression { - return node.expression !== expression || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createCallExpression(expression, questionDotToken, typeArguments, arguments_, node.flags) : node; -} - -export function updateNewExpression(node: NewExpression, expression: Expression, typeArguments?: readonly TypeNode[], arguments_?: readonly Expression[]): NewExpression { - return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createNewExpression(expression, typeArguments, arguments_) : node; -} - -export function updateMetaProperty(node: MetaProperty, name: Identifier): MetaProperty { - return node.name !== name ? createMetaProperty(node.keywordToken, name) : node; -} - -export function updateNonNullExpression(node: NonNullExpression, expression: Expression): NonNullExpression { - return node.expression !== expression ? createNonNullExpression(expression, node.flags) : node; -} - -export function updateSpreadElement(node: SpreadElement, expression: Expression): SpreadElement { - return node.expression !== expression ? createSpreadElement(expression) : node; -} - -export function updateTemplateExpression(node: TemplateExpression, head: TemplateHead, templateSpans: readonly TemplateSpan[]): TemplateExpression { - return node.head !== head || node.templateSpans !== templateSpans ? createTemplateExpression(head, templateSpans) : node; -} - -export function updateTemplateSpan(node: TemplateSpan, expression: Expression, literal: TemplateMiddleOrTail): TemplateSpan { - return node.expression !== expression || node.literal !== literal ? createTemplateSpan(expression, literal) : node; -} - -export function updateTaggedTemplateExpression(node: TaggedTemplateExpression, tag: Expression, questionDotToken: QuestionDotToken, typeArguments: readonly TypeNode[] | undefined, template: TemplateLiteral): TaggedTemplateExpression { - return node.tag !== tag || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.template !== template ? createTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, node.flags) : node; -} - -export function updateParenthesizedExpression(node: ParenthesizedExpression, expression: Expression): ParenthesizedExpression { - return node.expression !== expression ? createParenthesizedExpression(expression) : node; -} - -export function updateArrayLiteralExpression(node: ArrayLiteralExpression, elements: readonly Expression[]): ArrayLiteralExpression { - return node.elements !== elements ? createArrayLiteralExpression(elements, node.multiLine) : node; -} - -export function updateObjectLiteralExpression(node: ObjectLiteralExpression, properties: readonly ObjectLiteralElementLike[]): ObjectLiteralExpression { - return node.properties !== properties ? createObjectLiteralExpression(properties, node.multiLine) : node; -} - -export function updateSpreadAssignment(node: SpreadAssignment, expression: Expression): SpreadAssignment { - return node.expression !== expression ? createSpreadAssignment(expression) : node; -} - -export function updatePropertyAssignment(node: PropertyAssignment, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertyAssignment { - return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyAssignment(modifiers, name, postfixToken, type, initializer) : node; -} - -export function updateShorthandPropertyAssignment(node: ShorthandPropertyAssignment, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, equalsToken?: EqualsToken, objectAssignmentInitializer?: Expression): ShorthandPropertyAssignment { - return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.equalsToken !== equalsToken || node.objectAssignmentInitializer !== objectAssignmentInitializer ? createShorthandPropertyAssignment(modifiers, name, postfixToken, type, equalsToken, objectAssignmentInitializer) : node; -} - -export function updateDeleteExpression(node: DeleteExpression, expression: Expression): DeleteExpression { - return node.expression !== expression ? createDeleteExpression(expression) : node; -} - -export function updateTypeOfExpression(node: TypeOfExpression, expression: Expression): TypeOfExpression { - return node.expression !== expression ? createTypeOfExpression(expression) : node; -} - -export function updateVoidExpression(node: VoidExpression, expression: Expression): VoidExpression { - return node.expression !== expression ? createVoidExpression(expression) : node; -} - -export function updateAwaitExpression(node: AwaitExpression, expression: Expression): AwaitExpression { - return node.expression !== expression ? createAwaitExpression(expression) : node; -} - -export function updateTypeAssertion(node: TypeAssertion, type: TypeNode, expression: Expression): TypeAssertion { - return node.type !== type || node.expression !== expression ? createTypeAssertion(type, expression) : node; -} - -export function updateUnionTypeNode(node: UnionTypeNode, types: readonly TypeNode[]): UnionTypeNode { - return node.types !== types ? createUnionTypeNode(types) : node; -} - -export function updateIntersectionTypeNode(node: IntersectionTypeNode, types: readonly TypeNode[]): IntersectionTypeNode { - return node.types !== types ? createIntersectionTypeNode(types) : node; -} - -export function updateConditionalTypeNode(node: ConditionalTypeNode, checkType: TypeNode, extendsType: TypeNode, trueType: TypeNode, falseType: TypeNode): ConditionalTypeNode { - return node.checkType !== checkType || node.extendsType !== extendsType || node.trueType !== trueType || node.falseType !== falseType ? createConditionalTypeNode(checkType, extendsType, trueType, falseType) : node; -} - -export function updateTypeOperatorNode(node: TypeOperatorNode, type: TypeNode): TypeOperatorNode { - return node.type !== type ? createTypeOperatorNode(node.operator, type) : node; -} - -export function updateInferTypeNode(node: InferTypeNode, typeParameter: TypeParameterDeclaration): InferTypeNode { - return node.typeParameter !== typeParameter ? createInferTypeNode(typeParameter) : node; -} - -export function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode { - return node.elementType !== elementType ? createArrayTypeNode(elementType) : node; -} - -export function updateIndexedAccessTypeNode(node: IndexedAccessTypeNode, objectType: TypeNode, indexType: TypeNode): IndexedAccessTypeNode { - return node.objectType !== objectType || node.indexType !== indexType ? createIndexedAccessTypeNode(objectType, indexType) : node; -} - -export function updateTypeReferenceNode(node: TypeReferenceNode, typeName: EntityName, typeArguments?: readonly TypeNode[]): TypeReferenceNode { - return node.typeName !== typeName || node.typeArguments !== typeArguments ? createTypeReferenceNode(typeName, typeArguments) : node; -} - -export function updateExpressionWithTypeArguments(node: ExpressionWithTypeArguments, expression: Expression, typeArguments?: readonly TypeNode[]): ExpressionWithTypeArguments { - return node.expression !== expression || node.typeArguments !== typeArguments ? createExpressionWithTypeArguments(expression, typeArguments) : node; -} - -export function updateLiteralTypeNode(node: LiteralTypeNode, literal: Node): LiteralTypeNode { - return node.literal !== literal ? createLiteralTypeNode(literal) : node; -} - -export function updateTypePredicateNode(node: TypePredicateNode, assertsModifier: AssertsKeyword | undefined, parameterName: TypePredicateParameterName, type?: TypeNode): TypePredicateNode { - return node.assertsModifier !== assertsModifier || node.parameterName !== parameterName || node.type !== type ? createTypePredicateNode(assertsModifier, parameterName, type) : node; -} - -export function updateImportAttribute(node: ImportAttribute, name: ImportAttributeName, value: Expression): ImportAttribute { - return node.name !== name || node.value !== value ? createImportAttribute(name, value) : node; -} - -export function updateImportAttributes(node: ImportAttributes, attributes: readonly ImportAttribute[]): ImportAttributes { - return node.attributes !== attributes ? createImportAttributes(node.token, attributes, node.multiLine) : node; -} - -export function updateTypeQueryNode(node: TypeQueryNode, exprName: EntityName, typeArguments?: readonly TypeNode[]): TypeQueryNode { - return node.exprName !== exprName || node.typeArguments !== typeArguments ? createTypeQueryNode(exprName, typeArguments) : node; -} - -export function updateMappedTypeNode(node: MappedTypeNode, readonlyToken: ReadonlyKeyword | PlusToken | MinusToken | undefined, typeParameter: TypeParameterDeclaration, nameType?: TypeNode, questionToken?: QuestionToken | PlusToken | MinusToken, type?: TypeNode, members?: readonly TypeElement[]): MappedTypeNode { - return node.readonlyToken !== readonlyToken || node.typeParameter !== typeParameter || node.nameType !== nameType || node.questionToken !== questionToken || node.type !== type || node.members !== members ? createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) : node; -} - -export function updateTypeLiteralNode(node: TypeLiteralNode, members: readonly TypeElement[]): TypeLiteralNode { - return node.members !== members ? createTypeLiteralNode(members) : node; -} - -export function updateTupleTypeNode(node: TupleTypeNode, elements: readonly TypeNode[]): TupleTypeNode { - return node.elements !== elements ? createTupleTypeNode(elements) : node; -} - -export function updateNamedTupleMember(node: NamedTupleMember, dotDotDotToken: DotDotDotToken | undefined, name: Identifier, questionToken: QuestionToken | undefined, type: TypeNode): NamedTupleMember { - return node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type ? createNamedTupleMember(dotDotDotToken, name, questionToken, type) : node; -} - -export function updateOptionalTypeNode(node: OptionalTypeNode, type: TypeNode): OptionalTypeNode { - return node.type !== type ? createOptionalTypeNode(type) : node; -} - -export function updateRestTypeNode(node: RestTypeNode, type: TypeNode): RestTypeNode { - return node.type !== type ? createRestTypeNode(type) : node; -} - -export function updateParenthesizedTypeNode(node: ParenthesizedTypeNode, type: TypeNode): ParenthesizedTypeNode { - return node.type !== type ? createParenthesizedTypeNode(type) : node; -} - -export function updateFunctionTypeNode(node: FunctionTypeNode, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): FunctionTypeNode { - return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createFunctionTypeNode(typeParameters, parameters, type) : node; -} - -export function updateConstructorTypeNode(node: ConstructorTypeNode, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructorTypeNode { - return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructorTypeNode(modifiers, typeParameters, parameters, type) : node; -} - -export function updateTemplateLiteralTypeNode(node: TemplateLiteralTypeNode, head: TemplateHead, templateSpans: readonly TemplateLiteralTypeSpan[]): TemplateLiteralTypeNode { - return node.head !== head || node.templateSpans !== templateSpans ? createTemplateLiteralTypeNode(head, templateSpans) : node; -} - -export function updateTemplateLiteralTypeSpan(node: TemplateLiteralTypeSpan, type: TypeNode, literal: TemplateMiddleOrTail): TemplateLiteralTypeSpan { - return node.type !== type || node.literal !== literal ? createTemplateLiteralTypeSpan(type, literal) : node; -} - -export function updateSyntheticExpression(node: SyntheticExpression, tupleNameSource?: Node): SyntheticExpression { - return node.tupleNameSource !== tupleNameSource ? createSyntheticExpression(node.type, node.isSpread, tupleNameSource) : node; -} - -export function updatePartiallyEmittedExpression(node: PartiallyEmittedExpression, expression: Expression): PartiallyEmittedExpression { - return node.expression !== expression ? createPartiallyEmittedExpression(expression) : node; -} - -export function updateJsxElement(node: JsxElement, openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement { - return node.openingElement !== openingElement || node.children !== children || node.closingElement !== closingElement ? createJsxElement(openingElement, children, closingElement) : node; -} - -export function updateJsxAttributes(node: JsxAttributes, properties: readonly JsxAttributeLike[]): JsxAttributes { - return node.properties !== properties ? createJsxAttributes(properties) : node; -} - -export function updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier): JsxNamespacedName { - return node.namespace !== namespace || node.name !== name ? createJsxNamespacedName(namespace, name) : node; -} - -export function updateJsxOpeningElement(node: JsxOpeningElement, tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxOpeningElement { - return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxOpeningElement(tagName, typeArguments, attributes) : node; -} - -export function updateJsxSelfClosingElement(node: JsxSelfClosingElement, tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement { - return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxSelfClosingElement(tagName, typeArguments, attributes) : node; -} - -export function updateJsxFragment(node: JsxFragment, openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment { - return node.openingFragment !== openingFragment || node.children !== children || node.closingFragment !== closingFragment ? createJsxFragment(openingFragment, children, closingFragment) : node; -} - -export function updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer?: JsxAttributeValue): JsxAttribute { - return node.name !== name || node.initializer !== initializer ? createJsxAttribute(name, initializer) : node; -} - -export function updateJsxSpreadAttribute(node: JsxSpreadAttribute, expression: Expression): JsxSpreadAttribute { - return node.expression !== expression ? createJsxSpreadAttribute(expression) : node; -} - -export function updateJsxClosingElement(node: JsxClosingElement, tagName: JsxTagNameExpression): JsxClosingElement { - return node.tagName !== tagName ? createJsxClosingElement(tagName) : node; -} - -export function updateJsxExpression(node: JsxExpression, dotDotDotToken?: DotDotDotToken, expression?: Expression): JsxExpression { - return node.dotDotDotToken !== dotDotDotToken || node.expression !== expression ? createJsxExpression(dotDotDotToken, expression) : node; -} - -export function updateSyntaxList(node: SyntaxList, children: readonly Node[]): SyntaxList { - return node.children !== children ? createSyntaxList(children) : node; -} - -export function updateJSDoc(node: JSDoc, comment: readonly JSDocComment[], tags?: readonly JSDocTag[]): JSDoc { - return node.comment !== comment || node.tags !== tags ? createJSDoc(comment, tags) : node; -} - -export function updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression { - return node.type !== type ? createJSDocTypeExpression(type) : node; -} - -export function updateJSDocNonNullableType(node: JSDocNonNullableType, type: TypeNode): JSDocNonNullableType { - return node.type !== type ? createJSDocNonNullableType(type) : node; -} - -export function updateJSDocNullableType(node: JSDocNullableType, type: TypeNode): JSDocNullableType { - return node.type !== type ? createJSDocNullableType(type) : node; -} - -export function updateJSDocVariadicType(node: JSDocVariadicType, type: TypeNode): JSDocVariadicType { - return node.type !== type ? createJSDocVariadicType(type) : node; -} - -export function updateJSDocOptionalType(node: JSDocOptionalType, type: TypeNode): JSDocOptionalType { - return node.type !== type ? createJSDocOptionalType(type) : node; -} - -export function updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier, typeExpression: Node, comment?: readonly JSDocComment[]): JSDocTypeTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocTypeTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocUnknownTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocUnknownTag(tagName, comment) : node; -} - -export function updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier, constraint: Node, typeParameters: readonly TypeParameterDeclaration[], comment?: readonly JSDocComment[]): JSDocTemplateTag { - return node.tagName !== tagName || node.constraint !== constraint || node.typeParameters !== typeParameters || node.comment !== comment ? createJSDocTemplateTag(tagName, constraint, typeParameters, comment) : node; -} - -export function updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocReturnTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocReturnTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPublicTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocPublicTag(tagName, comment) : node; -} - -export function updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPrivateTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocPrivateTag(tagName, comment) : node; -} - -export function updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocProtectedTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocProtectedTag(tagName, comment) : node; -} - -export function updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocReadonlyTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocReadonlyTag(tagName, comment) : node; -} - -export function updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocOverrideTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocOverrideTag(tagName, comment) : node; -} - -export function updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocDeprecatedTag { - return node.tagName !== tagName || node.comment !== comment ? createJSDocDeprecatedTag(tagName, comment) : node; -} - -export function updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier, nameExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSeeTag { - return node.tagName !== tagName || node.nameExpression !== nameExpression || node.comment !== comment ? createJSDocSeeTag(tagName, nameExpression, comment) : node; -} - -export function updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocImplementsTag { - return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocImplementsTag(tagName, className, comment) : node; -} - -export function updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocAugmentsTag { - return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocAugmentsTag(tagName, className, comment) : node; -} - -export function updateJSDocSatisfiesTag(node: JSDocSatisfiesTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSatisfiesTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocSatisfiesTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocThrowsTag(node: JSDocThrowsTag, tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocThrowsTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThrowsTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocThisTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThisTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocImportTag(node: JSDocImportTag, tagName: Identifier, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes, comment?: readonly JSDocComment[]): JSDocImportTag { - return node.tagName !== tagName || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes || node.comment !== comment ? createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) : node; -} - -export function updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier, typeExpression: TypeNode, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocCallbackTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocCallbackTag(tagName, typeExpression, name, comment) : node; -} - -export function updateJSDocOverloadTag(node: JSDocOverloadTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocOverloadTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocOverloadTag(tagName, typeExpression, comment) : node; -} - -export function updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier, typeExpression?: Node, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocTypedefTag { - return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocTypedefTag(tagName, typeExpression, name, comment) : node; -} - -export function updateJSDocSignature(node: JSDocSignature, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): JSDocSignature { - return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createJSDocSignature(typeParameters, parameters, type) : node; -} - -export function updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference { - return node.name !== name ? createJSDocNameReference(name) : node; -} - -export function updateModuleDeclaration(node: ModuleDeclaration, modifiers: readonly ModifierLike[] | undefined, name: ModuleName, attributes?: TypeLiteralNode, body?: ModuleBody): ModuleDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.attributes !== attributes || node.body !== body ? createModuleDeclaration(modifiers, node.keyword, name, attributes, body) : node; -} - -export function updateImportEqualsDeclaration(node: ImportEqualsDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, moduleReference: ModuleReference): ImportEqualsDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.moduleReference !== moduleReference ? createImportEqualsDeclaration(modifiers, node.isTypeOnly, name, moduleReference) : node; -} - -export function updateExportDeclaration(node: ExportDeclaration, modifiers?: readonly ModifierLike[], exportClause?: NamedExportBindings, moduleSpecifier?: Expression, attributes?: ImportAttributes): ExportDeclaration { - return node.modifiers !== modifiers || node.exportClause !== exportClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createExportDeclaration(modifiers, node.isTypeOnly, exportClause, moduleSpecifier, attributes) : node; -} - -export function updateImportTypeNode(node: ImportTypeNode, argument: TypeNode, attributes?: ImportAttributes, qualifier?: EntityName, typeArguments?: readonly TypeNode[]): ImportTypeNode { - return node.argument !== argument || node.attributes !== attributes || node.qualifier !== qualifier || node.typeArguments !== typeArguments ? createImportTypeNode(node.isTypeOf, argument, attributes, qualifier, typeArguments) : node; -} - -export function updateImportClause(node: ImportClause, name?: Identifier, namedBindings?: NamedImportBindings): ImportClause { - return node.name !== name || node.namedBindings !== namedBindings ? createImportClause(node.phaseModifier, name, namedBindings) : node; -} - -export function updateImportSpecifier(node: ImportSpecifier, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier { - return node.propertyName !== propertyName || node.name !== name ? createImportSpecifier(node.isTypeOnly, propertyName, name) : node; -} - -export function updateJSDocLink(node: JSDocLink, name?: EntityName): JSDocLink { - return node.name !== name ? createJSDocLink(name, node.text) : node; -} - -export function updateJSDocLinkPlain(node: JSDocLinkPlain, name?: EntityName): JSDocLinkPlain { - return node.name !== name ? createJSDocLinkPlain(name, node.text) : node; -} - -export function updateJSDocLinkCode(node: JSDocLinkCode, name?: EntityName): JSDocLinkCode { - return node.name !== name ? createJSDocLinkCode(name, node.text) : node; -} - -export function updateTypeParameterDeclaration(node: TypeParameterDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, constraint?: TypeNode, expression?: Expression, defaultType?: TypeNode): TypeParameterDeclaration { - return node.modifiers !== modifiers || node.name !== name || node.constraint !== constraint || node.expression !== expression || node.defaultType !== defaultType ? createTypeParameterDeclaration(modifiers, name, constraint, expression, defaultType) : node; -} - -export function updateSyntheticReferenceExpression(node: SyntheticReferenceExpression, expression: Expression, thisArg: Expression): SyntheticReferenceExpression { - return node.expression !== expression || node.thisArg !== thisArg ? createSyntheticReferenceExpression(expression, thisArg) : node; -} - -export function updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsdocPropertyTags?: readonly JSDocTag[]): JSDocTypeLiteral { - return node.jsdocPropertyTags !== jsdocPropertyTags ? createJSDocTypeLiteral(jsdocPropertyTags, node.isArrayType) : node; -} - -export function updateForInStatement(node: ForInStatement, awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForInStatement { - return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForInStatement(awaitModifier, initializer, expression, statement) : node; -} - -export function updateForOfStatement(node: ForOfStatement, awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForOfStatement { - return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForOfStatement(awaitModifier, initializer, expression, statement) : node; -} - -export function updateCaseClause(node: CaseClause, expression: Expression, statements: readonly Statement[]): CaseClause { - return node.expression !== expression || node.statements !== statements ? createCaseClause(expression, statements) : node; -} - -export function updateDefaultClause(node: DefaultClause, expression: Expression, statements: readonly Statement[]): DefaultClause { - return node.expression !== expression || node.statements !== statements ? createDefaultClause(expression, statements) : node; -} - -export function updateObjectBindingPattern(node: ObjectBindingPattern, elements: readonly BindingElement[]): ObjectBindingPattern { - return node.elements !== elements ? createObjectBindingPattern(elements) : node; -} - -export function updateArrayBindingPattern(node: ArrayBindingPattern, elements: readonly BindingElement[]): ArrayBindingPattern { - return node.elements !== elements ? createArrayBindingPattern(elements) : node; -} - -export function updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier, name: EntityName, typeExpression: TypeNode | undefined, comment: readonly JSDocComment[] | undefined): JSDocParameterTag { - return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocParameterTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; -} - -export function updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier, name: EntityName, typeExpression: TypeNode | undefined, comment: readonly JSDocComment[] | undefined): JSDocPropertyTag { - return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocPropertyTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; -} - -export function createSourceFile(statements: readonly Statement[], endOfFileToken: EndOfFile, text: string, fileName: RootedFilePath, path: PathKey): SourceFile { - return new NodeObject(SyntaxKind.SourceFile, { - statements: createNodeArray(statements), - endOfFileToken, - text, - originalText: text, - spanMap: undefined, - contentMapper: undefined, - virtualFileName: undefined, - diagnosticDirectives: undefined, - fileName, - path, - }) as unknown as SourceFile; -} - -function cloneSourceFileWithChanges(source: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile { - return new NodeObject(SyntaxKind.SourceFile, { - ...cloneSourceFileData(source), - statements: createNodeArray(statements), - endOfFileToken, - }) as unknown as SourceFile; -} - -export function updateSourceFile(node: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile { - return node.statements !== statements || node.endOfFileToken !== endOfFileToken - ? cloneSourceFileWithChanges(node, statements, endOfFileToken) - : node; -} +// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. + +import { NodeFlags } from "#enums/nodeFlags"; +import { SyntaxKind } from "#enums/syntaxKind"; +import { TokenFlags } from "#enums/tokenFlags"; +import type { + ArrayBindingPattern, + ArrayLiteralExpression, + ArrayTypeNode, + ArrowFunction, + AsExpression, + AssertsKeyword, + AsteriskToken, + AwaitExpression, + AwaitKeyword, + BigIntLiteral, + BinaryExpression, + BinaryOperatorToken, + BindingElement, + BindingName, + Block, + BreakStatement, + CallExpression, + CallSignatureDeclaration, + CaseBlock, + CaseClause, + CaseOrDefaultClause, + CatchClause, + ClassDeclaration, + ClassElement, + ClassExpression, + ClassStaticBlockDeclaration, + ColonToken, + ComputedPropertyName, + ConciseBody, + ConditionalExpression, + ConditionalTypeNode, + ConstructorDeclaration, + ConstructorTypeNode, + ConstructSignatureDeclaration, + ContinueStatement, + DebuggerStatement, + Decorator, + DefaultClause, + DeleteExpression, + DoStatement, + DotDotDotToken, + ElementAccessExpression, + EmptyStatement, + EndOfFile, + EntityName, + EnumDeclaration, + EnumMember, + EqualsGreaterThanToken, + EqualsToken, + ExclamationToken, + ExportAssignment, + ExportDeclaration, + ExportSpecifier, + Expression, + ExpressionStatement, + ExpressionWithTypeArguments, + ExternalModuleReference, + ForInitializer, + ForInStatement, + ForOfStatement, + ForStatement, + FunctionBody, + FunctionDeclaration, + FunctionExpression, + FunctionTypeNode, + GetAccessorDeclaration, + HeritageClause, + HeritageClauseElement, + Identifier, + IfStatement, + ImportAttribute, + ImportAttributeName, + ImportAttributes, + ImportClause, + ImportDeclaration, + ImportEqualsDeclaration, + ImportPhaseModifierSyntaxKind, + ImportSpecifier, + ImportTypeNode, + IndexedAccessTypeNode, + IndexSignatureDeclaration, + InferTypeNode, + InterfaceDeclaration, + IntersectionTypeNode, + JSDoc, + JSDocAllType, + JSDocAugmentsTag, + JSDocCallbackTag, + JSDocComment, + JSDocDeprecatedTag, + JSDocFullName, + JSDocImplementsTag, + JSDocImportTag, + JSDocLink, + JSDocLinkCode, + JSDocLinkPlain, + JSDocNameReference, + JSDocNonNullableType, + JSDocNullableType, + JSDocOptionalType, + JSDocOverloadTag, + JSDocOverrideTag, + JSDocParameterTag, + JSDocPrivateTag, + JSDocPropertyTag, + JSDocProtectedTag, + JSDocPublicTag, + JSDocReadonlyTag, + JSDocReturnTag, + JSDocSatisfiesTag, + JSDocSeeTag, + JSDocSignature, + JSDocTag, + JSDocTemplateTag, + JSDocText, + JSDocThisTag, + JSDocThrowsTag, + JSDocTypedefTag, + JSDocTypeExpression, + JSDocTypeLiteral, + JSDocTypeTag, + JSDocUnknownTag, + JSDocVariadicType, + JsxAttribute, + JsxAttributeLike, + JsxAttributeName, + JsxAttributes, + JsxAttributeValue, + JsxChild, + JsxClosingElement, + JsxClosingFragment, + JsxElement, + JsxExpression, + JsxFragment, + JsxNamespacedName, + JsxOpeningElement, + JsxOpeningFragment, + JsxSelfClosingElement, + JsxSpreadAttribute, + JsxTagNameExpression, + JsxText, + KeywordExpression, + KeywordExpressionSyntaxKind, + KeywordTypeNode, + KeywordTypeSyntaxKind, + LabeledStatement, + LeftHandSideExpression, + LiteralTypeNode, + MappedTypeNode, + MemberName, + MetaProperty, + MethodDeclaration, + MethodSignatureDeclaration, + MinusToken, + MissingDeclaration, + ModifierLike, + ModuleBlock, + ModuleBody, + ModuleDeclaration, + ModuleExportName, + ModuleName, + ModuleReference, + NamedExportBindings, + NamedExports, + NamedImportBindings, + NamedImports, + NamedTupleMember, + NamespaceExport, + NamespaceExportDeclaration, + NamespaceImport, + NewExpression, + Node, + NodeArray, + NonNullExpression, + NoSubstitutionTemplateLiteral, + NotEmittedStatement, + NotEmittedTypeElement, + NumericLiteral, + ObjectBindingPattern, + ObjectLiteralElementLike, + ObjectLiteralExpression, + OmittedExpression, + OptionalTypeNode, + ParameterDeclaration, + ParenthesizedExpression, + ParenthesizedTypeNode, + PartiallyEmittedExpression, + PathKey, + PlusToken, + PostfixUnaryExpression, + PrefixUnaryExpression, + PrivateIdentifier, + PropertyAccessExpression, + PropertyAssignment, + PropertyDeclaration, + PropertyName, + PropertySignatureDeclaration, + QualifiedName, + QuestionDotToken, + QuestionToken, + ReadonlyKeyword, + RegularExpressionLiteral, + RestTypeNode, + ReturnStatement, + RootedFilePath, + SatisfiesExpression, + SemicolonClassElement, + SetAccessorDeclaration, + ShorthandPropertyAssignment, + SourceFile, + SpreadAssignment, + SpreadElement, + Statement, + StringLiteral, + SwitchStatement, + SyntaxList, + SyntheticExpression, + SyntheticReferenceExpression, + TaggedTemplateExpression, + TemplateExpression, + TemplateHead, + TemplateLiteral, + TemplateLiteralTypeNode, + TemplateLiteralTypeSpan, + TemplateMiddle, + TemplateMiddleOrTail, + TemplateSpan, + TemplateTail, + ThisTypeNode, + ThrowStatement, + Token, + TokenSyntaxKind, + TryStatement, + TupleTypeNode, + TypeAliasDeclaration, + TypeAssertion, + TypeElement, + TypeLiteralNode, + TypeNode, + TypeOfExpression, + TypeOperatorNode, + TypeParameterDeclaration, + TypePredicateNode, + TypePredicateParameterName, + TypeQueryNode, + TypeReferenceNode, + UnionTypeNode, + VariableDeclaration, + VariableDeclarationList, + VariableStatement, + VoidExpression, + WhileStatement, + WithStatement, + YieldExpression, +} from "./ast.ts"; +import { + getChildren, + getFirstToken, + getLastToken, + getTokenPosOfNode, +} from "./astnav.ts"; +import { cloneSourceFileData } from "./utils.ts"; +import { + forEachChildOfJSDocParameterTag, + forEachChildOfJSDocPropertyTag, + yieldEachChildOfJSDocParameterTag, + yieldEachChildOfJSDocPropertyTag, +} from "./visitor.ts"; + +export class NodeObject { + readonly kind: SyntaxKind; + flags: NodeFlags = 0 as NodeFlags; + readonly pos: number = -1; + readonly end: number = -1; + parent: Node = undefined!; + _data: any; + + constructor(kind: SyntaxKind, data: any) { + this.kind = kind; + this._data = data; + } + + get ambientModuleNames(): any { + return this._data?.ambientModuleNames; + } + get argument(): any { + return this._data?.argument; + } + get argumentExpression(): any { + return this._data?.argumentExpression; + } + get arguments(): any { + return this._data?.arguments; + } + get assertsModifier(): any { + return this._data?.assertsModifier; + } + get asteriskToken(): any { + return this._data?.asteriskToken; + } + get attributes(): any { + return this._data?.attributes; + } + get awaitModifier(): any { + return this._data?.awaitModifier; + } + get block(): any { + return this._data?.block; + } + get body(): any { + return this._data?.body; + } + get canonicalSourceFileName(): any { + return this._data?.canonicalSourceFileName; + } + get caseBlock(): any { + return this._data?.caseBlock; + } + get catchClause(): any { + return this._data?.catchClause; + } + get checkType(): any { + return this._data?.checkType; + } + get children(): any { + return this._data?.children; + } + get className(): any { + return this._data?.className; + } + get clauses(): any { + return this._data?.clauses; + } + get closingElement(): any { + return this._data?.closingElement; + } + get closingFragment(): any { + return this._data?.closingFragment; + } + get colonToken(): any { + return this._data?.colonToken; + } + get comment(): any { + return this._data?.comment; + } + get condition(): any { + return this._data?.condition; + } + get constraint(): any { + return this._data?.constraint; + } + get containsOnlyTriviaWhiteSpaces(): any { + return this._data?.containsOnlyTriviaWhiteSpaces; + } + get contentMapper(): any { + return this._data?.contentMapper; + } + get declarationList(): any { + return this._data?.declarationList; + } + get declarations(): any { + return this._data?.declarations; + } + get defaultType(): any { + return this._data?.defaultType; + } + get diagnosticDirectives(): any { + return this._data?.diagnosticDirectives; + } + get dotDotDotToken(): any { + return this._data?.dotDotDotToken; + } + get elementType(): any { + return this._data?.elementType; + } + get elements(): any { + return this._data?.elements; + } + get elseStatement(): any { + return this._data?.elseStatement; + } + get endOfFileToken(): any { + return this._data?.endOfFileToken; + } + get equalsGreaterThanToken(): any { + return this._data?.equalsGreaterThanToken; + } + get equalsToken(): any { + return this._data?.equalsToken; + } + get exclamationToken(): any { + return this._data?.exclamationToken; + } + get exportClause(): any { + return this._data?.exportClause; + } + get exprName(): any { + return this._data?.exprName; + } + get expression(): any { + return this._data?.expression; + } + get extendsType(): any { + return this._data?.extendsType; + } + get externalModuleIndicator(): any { + return this._data?.externalModuleIndicator; + } + get falseType(): any { + return this._data?.falseType; + } + get fileName(): any { + return this._data?.fileName; + } + get finallyBlock(): any { + return this._data?.finallyBlock; + } + get head(): any { + return this._data?.head; + } + get heritageClauses(): any { + return this._data?.heritageClauses; + } + get importClause(): any { + return this._data?.importClause; + } + get imports(): any { + return this._data?.imports; + } + get incrementor(): any { + return this._data?.incrementor; + } + get indexType(): any { + return this._data?.indexType; + } + get initializer(): any { + return this._data?.initializer; + } + get isArrayType(): any { + return this._data?.isArrayType; + } + get isBracketed(): any { + return this._data?.isBracketed; + } + get isDeclarationFile(): any { + return this._data?.isDeclarationFile; + } + get isExportEquals(): any { + return this._data?.isExportEquals; + } + get isNameFirst(): any { + return this._data?.isNameFirst; + } + get isSpread(): any { + return this._data?.isSpread; + } + get isTypeOf(): any { + return this._data?.isTypeOf; + } + get isTypeOnly(): any { + return this._data?.isTypeOnly; + } + get jsdocPropertyTags(): any { + return this._data?.jsdocPropertyTags; + } + get keyword(): any { + return this._data?.keyword; + } + get keywordToken(): any { + return this._data?.keywordToken; + } + get label(): any { + return this._data?.label; + } + get languageVariant(): any { + return this._data?.languageVariant; + } + get left(): any { + return this._data?.left; + } + get libReferenceDirectives(): any { + return this._data?.libReferenceDirectives; + } + get literal(): any { + return this._data?.literal; + } + get members(): any { + return this._data?.members; + } + get modifiers(): any { + return this._data?.modifiers; + } + get moduleAugmentations(): any { + return this._data?.moduleAugmentations; + } + get moduleReference(): any { + return this._data?.moduleReference; + } + get moduleSpecifier(): any { + return this._data?.moduleSpecifier; + } + get multiLine(): any { + return this._data?.multiLine; + } + get name(): any { + return this._data?.name; + } + get nameExpression(): any { + return this._data?.nameExpression; + } + get nameType(): any { + return this._data?.nameType; + } + get namedBindings(): any { + return this._data?.namedBindings; + } + get namespace(): any { + return this._data?.namespace; + } + get objectAssignmentInitializer(): any { + return this._data?.objectAssignmentInitializer; + } + get objectType(): any { + return this._data?.objectType; + } + get openingElement(): any { + return this._data?.openingElement; + } + get openingFragment(): any { + return this._data?.openingFragment; + } + get operand(): any { + return this._data?.operand; + } + get operator(): any { + return this._data?.operator; + } + get operatorToken(): any { + return this._data?.operatorToken; + } + get originalText(): any { + return this._data?.originalText; + } + get parameterName(): any { + return this._data?.parameterName; + } + get parameters(): any { + return this._data?.parameters; + } + get path(): any { + return this._data?.path; + } + get phaseModifier(): any { + return this._data?.phaseModifier; + } + get postfixToken(): any { + return this._data?.postfixToken; + } + get properties(): any { + return this._data?.properties; + } + get propertyName(): any { + return this._data?.propertyName; + } + get qualifier(): any { + return this._data?.qualifier; + } + get questionDotToken(): any { + return this._data?.questionDotToken; + } + get questionToken(): any { + return this._data?.questionToken; + } + get rawText(): any { + return this._data?.rawText; + } + get readonlyToken(): any { + return this._data?.readonlyToken; + } + get referencedFiles(): any { + return this._data?.referencedFiles; + } + get right(): any { + return this._data?.right; + } + get scriptKind(): any { + return this._data?.scriptKind; + } + get spanMap(): any { + return this._data?.spanMap; + } + get statement(): any { + return this._data?.statement; + } + get statements(): any { + return this._data?.statements; + } + get supplementalSourceFileNames(): any { + return this._data?.supplementalSourceFileNames; + } + get tag(): any { + return this._data?.tag; + } + get tagName(): any { + return this._data?.tagName; + } + get tags(): any { + return this._data?.tags; + } + get template(): any { + return this._data?.template; + } + get templateFlags(): any { + return this._data?.templateFlags; + } + get templateSpans(): any { + return this._data?.templateSpans; + } + get text(): any { + return this._data?.text; + } + get thenStatement(): any { + return this._data?.thenStatement; + } + get thisArg(): any { + return this._data?.thisArg; + } + get token(): any { + return this._data?.token; + } + get tokenCache(): any { + return this._data?.tokenCache; + } + get tokenFlags(): any { + return this._data?.tokenFlags; + } + get trueType(): any { + return this._data?.trueType; + } + get tryBlock(): any { + return this._data?.tryBlock; + } + get tupleNameSource(): any { + return this._data?.tupleNameSource; + } + get type(): any { + return this._data?.type; + } + get typeArguments(): any { + return this._data?.typeArguments; + } + get typeExpression(): any { + return this._data?.typeExpression; + } + get typeName(): any { + return this._data?.typeName; + } + get typeParameter(): any { + return this._data?.typeParameter; + } + get typeParameters(): any { + return this._data?.typeParameters; + } + get typeReferenceDirectives(): any { + return this._data?.typeReferenceDirectives; + } + get types(): any { + return this._data?.types; + } + get value(): any { + return this._data?.value; + } + get variableDeclaration(): any { + return this._data?.variableDeclaration; + } + get virtualFileName(): any { + return this._data?.virtualFileName; + } + get whenFalse(): any { + return this._data?.whenFalse; + } + get whenTrue(): any { + return this._data?.whenTrue; + } + + forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined { + const fn = forEachChildTable[this.kind]; + return fn ? fn(this._data, visitor, visitArray) : undefined; + } + + childrenIter(): Generator { + const fn = yieldEachChildTable[this.kind]; + return fn ? fn(this._data) : emptyChildrenIter(); + } + + getSourceFile(): SourceFile { + let node: Node = this as unknown as Node; + while (node.parent) node = node.parent; + return node as unknown as SourceFile; + } + + getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number { + return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment); + } + + getFullStart(): number { + return this.pos; + } + + getEnd(): number { + return this.end; + } + + getWidth(sourceFile?: SourceFile): number { + return this.getEnd() - this.getStart(sourceFile); + } + + getFullWidth(): number { + return this.end - this.pos; + } + + getLeadingTriviaWidth(sourceFile?: SourceFile): number { + return this.getStart(sourceFile) - this.pos; + } + + getFullText(sourceFile?: SourceFile): string { + return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end); + } + + getText(sourceFile?: SourceFile): string { + sourceFile ??= this.getSourceFile(); + return sourceFile.text.substring(this.getStart(sourceFile), this.end); + } + + getChildCount(sourceFile?: SourceFile): number { + return this.getChildren(sourceFile).length; + } + + getChildAt(index: number, sourceFile?: SourceFile): Node { + return this.getChildren(sourceFile)[index]; + } + + getChildren(sourceFile?: SourceFile): readonly Node[] { + return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } + + getFirstToken(sourceFile?: SourceFile): Node | undefined { + return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } + + getLastToken(sourceFile?: SourceFile): Node | undefined { + return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile()); + } +} + +function isNodeArray(array: readonly T[]): array is NodeArray { + return "pos" in array && "end" in array; +} + +export function createNodeArray(elements: readonly T[], pos: number = -1, end: number = -1): NodeArray { + if (isNodeArray(elements)) return elements; + const arr = elements.slice() as unknown as NodeArray & { pos: number; end: number; }; + arr.pos = pos; + arr.end = end; + return arr; +} + +export function cloneNode(node: T): T { + const data = cloneNodeData(node); + const clone = new NodeObject(node.kind, data); + (clone as any).flags = node.flags; + (clone as any).pos = node.pos; + (clone as any).end = node.end; + return clone as unknown as T; +} + +function cloneNodeData(node: Node): any { + const n = node as any; + switch (node.kind) { + case SyntaxKind.Identifier: + return { text: n.text }; + case SyntaxKind.PrivateIdentifier: + return { text: n.text }; + case SyntaxKind.QualifiedName: + return { left: n.left, right: n.right }; + case SyntaxKind.ComputedPropertyName: + return { expression: n.expression }; + case SyntaxKind.Decorator: + return { expression: n.expression }; + case SyntaxKind.IfStatement: + return { expression: n.expression, thenStatement: n.thenStatement, elseStatement: n.elseStatement }; + case SyntaxKind.DoStatement: + return { statement: n.statement, expression: n.expression }; + case SyntaxKind.WhileStatement: + return { expression: n.expression, statement: n.statement }; + case SyntaxKind.ForStatement: + return { initializer: n.initializer, condition: n.condition, incrementor: n.incrementor, statement: n.statement }; + case SyntaxKind.BreakStatement: + return { label: n.label }; + case SyntaxKind.ContinueStatement: + return { label: n.label }; + case SyntaxKind.ReturnStatement: + return { expression: n.expression }; + case SyntaxKind.WithStatement: + return { expression: n.expression, statement: n.statement }; + case SyntaxKind.SwitchStatement: + return { expression: n.expression, caseBlock: n.caseBlock }; + case SyntaxKind.CaseBlock: + return { clauses: n.clauses }; + case SyntaxKind.ThrowStatement: + return { expression: n.expression }; + case SyntaxKind.TryStatement: + return { tryBlock: n.tryBlock, catchClause: n.catchClause, finallyBlock: n.finallyBlock }; + case SyntaxKind.CatchClause: + return { variableDeclaration: n.variableDeclaration, block: n.block }; + case SyntaxKind.LabeledStatement: + return { label: n.label, statement: n.statement }; + case SyntaxKind.ExpressionStatement: + return { expression: n.expression }; + case SyntaxKind.Block: + return { statements: n.statements, multiLine: n.multiLine }; + case SyntaxKind.VariableStatement: + return { modifiers: n.modifiers, declarationList: n.declarationList }; + case SyntaxKind.VariableDeclaration: + return { name: n.name, exclamationToken: n.exclamationToken, type: n.type, initializer: n.initializer }; + case SyntaxKind.VariableDeclarationList: + return { declarations: n.declarations }; + case SyntaxKind.Parameter: + return { modifiers: n.modifiers, dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type, initializer: n.initializer }; + case SyntaxKind.BindingElement: + return { dotDotDotToken: n.dotDotDotToken, propertyName: n.propertyName, name: n.name, initializer: n.initializer }; + case SyntaxKind.MissingDeclaration: + return { modifiers: n.modifiers }; + case SyntaxKind.FunctionDeclaration: + return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.ClassDeclaration: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; + case SyntaxKind.ClassExpression: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; + case SyntaxKind.HeritageClause: + return { token: n.token, types: n.types }; + case SyntaxKind.InterfaceDeclaration: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, heritageClauses: n.heritageClauses, members: n.members }; + case SyntaxKind.TypeAliasDeclaration: + case SyntaxKind.JSTypeAliasDeclaration: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, type: n.type }; + case SyntaxKind.EnumMember: + return { name: n.name, initializer: n.initializer }; + case SyntaxKind.EnumDeclaration: + return { modifiers: n.modifiers, name: n.name, members: n.members }; + case SyntaxKind.ModuleBlock: + return { statements: n.statements }; + case SyntaxKind.ImportDeclaration: + case SyntaxKind.JSImportDeclaration: + return { modifiers: n.modifiers, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; + case SyntaxKind.ExternalModuleReference: + return { expression: n.expression }; + case SyntaxKind.NamespaceImport: + return { name: n.name }; + case SyntaxKind.NamedImports: + return { elements: n.elements }; + case SyntaxKind.ExportAssignment: + return { modifiers: n.modifiers, isExportEquals: n.isExportEquals, type: n.type, expression: n.expression }; + case SyntaxKind.NamespaceExportDeclaration: + return { modifiers: n.modifiers, name: n.name }; + case SyntaxKind.NamespaceExport: + return { name: n.name }; + case SyntaxKind.NamedExports: + return { elements: n.elements }; + case SyntaxKind.ExportSpecifier: + return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; + case SyntaxKind.CallSignature: + return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.ConstructSignature: + return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.Constructor: + return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.GetAccessor: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.SetAccessor: + return { modifiers: n.modifiers, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.IndexSignature: + return { modifiers: n.modifiers, parameters: n.parameters, type: n.type }; + case SyntaxKind.MethodSignature: + return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.MethodDeclaration: + return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, postfixToken: n.postfixToken, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.PropertySignature: + return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; + case SyntaxKind.PropertyDeclaration: + return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; + case SyntaxKind.ClassStaticBlockDeclaration: + return { modifiers: n.modifiers, body: n.body }; + case SyntaxKind.StringLiteral: + return { text: n.text, tokenFlags: n.tokenFlags }; + case SyntaxKind.NumericLiteral: + return { text: n.text, tokenFlags: n.tokenFlags }; + case SyntaxKind.BigIntLiteral: + return { text: n.text, tokenFlags: n.tokenFlags }; + case SyntaxKind.RegularExpressionLiteral: + return { text: n.text, tokenFlags: n.tokenFlags }; + case SyntaxKind.NoSubstitutionTemplateLiteral: + return { text: n.text, templateFlags: n.templateFlags }; + case SyntaxKind.BinaryExpression: + return { modifiers: n.modifiers, left: n.left, type: n.type, operatorToken: n.operatorToken, right: n.right }; + case SyntaxKind.PrefixUnaryExpression: + return { operator: n.operator, operand: n.operand }; + case SyntaxKind.PostfixUnaryExpression: + return { operand: n.operand, operator: n.operator }; + case SyntaxKind.YieldExpression: + return { asteriskToken: n.asteriskToken, expression: n.expression }; + case SyntaxKind.ArrowFunction: + return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, equalsGreaterThanToken: n.equalsGreaterThanToken, body: n.body }; + case SyntaxKind.FunctionExpression: + return { modifiers: n.modifiers, asteriskToken: n.asteriskToken, name: n.name, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type, body: n.body }; + case SyntaxKind.AsExpression: + return { expression: n.expression, type: n.type }; + case SyntaxKind.SatisfiesExpression: + return { expression: n.expression, type: n.type }; + case SyntaxKind.ConditionalExpression: + return { condition: n.condition, questionToken: n.questionToken, whenTrue: n.whenTrue, colonToken: n.colonToken, whenFalse: n.whenFalse }; + case SyntaxKind.PropertyAccessExpression: + return { expression: n.expression, questionDotToken: n.questionDotToken, name: n.name }; + case SyntaxKind.ElementAccessExpression: + return { expression: n.expression, questionDotToken: n.questionDotToken, argumentExpression: n.argumentExpression }; + case SyntaxKind.CallExpression: + return { expression: n.expression, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, arguments: n.arguments }; + case SyntaxKind.NewExpression: + return { expression: n.expression, typeArguments: n.typeArguments, arguments: n.arguments }; + case SyntaxKind.MetaProperty: + return { keywordToken: n.keywordToken, name: n.name }; + case SyntaxKind.NonNullExpression: + return { expression: n.expression }; + case SyntaxKind.SpreadElement: + return { expression: n.expression }; + case SyntaxKind.TemplateExpression: + return { head: n.head, templateSpans: n.templateSpans }; + case SyntaxKind.TemplateSpan: + return { expression: n.expression, literal: n.literal }; + case SyntaxKind.TaggedTemplateExpression: + return { tag: n.tag, questionDotToken: n.questionDotToken, typeArguments: n.typeArguments, template: n.template }; + case SyntaxKind.ParenthesizedExpression: + return { expression: n.expression }; + case SyntaxKind.ArrayLiteralExpression: + return { elements: n.elements, multiLine: n.multiLine }; + case SyntaxKind.ObjectLiteralExpression: + return { properties: n.properties, multiLine: n.multiLine }; + case SyntaxKind.SpreadAssignment: + return { expression: n.expression }; + case SyntaxKind.PropertyAssignment: + return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, initializer: n.initializer }; + case SyntaxKind.ShorthandPropertyAssignment: + return { modifiers: n.modifiers, name: n.name, postfixToken: n.postfixToken, type: n.type, equalsToken: n.equalsToken, objectAssignmentInitializer: n.objectAssignmentInitializer }; + case SyntaxKind.DeleteExpression: + return { expression: n.expression }; + case SyntaxKind.TypeOfExpression: + return { expression: n.expression }; + case SyntaxKind.VoidExpression: + return { expression: n.expression }; + case SyntaxKind.AwaitExpression: + return { expression: n.expression }; + case SyntaxKind.TypeAssertionExpression: + return { type: n.type, expression: n.expression }; + case SyntaxKind.UnionType: + return { types: n.types }; + case SyntaxKind.IntersectionType: + return { types: n.types }; + case SyntaxKind.ConditionalType: + return { checkType: n.checkType, extendsType: n.extendsType, trueType: n.trueType, falseType: n.falseType }; + case SyntaxKind.TypeOperator: + return { operator: n.operator, type: n.type }; + case SyntaxKind.InferType: + return { typeParameter: n.typeParameter }; + case SyntaxKind.ArrayType: + return { elementType: n.elementType }; + case SyntaxKind.IndexedAccessType: + return { objectType: n.objectType, indexType: n.indexType }; + case SyntaxKind.TypeReference: + return { typeName: n.typeName, typeArguments: n.typeArguments }; + case SyntaxKind.ExpressionWithTypeArguments: + return { expression: n.expression, typeArguments: n.typeArguments }; + case SyntaxKind.LiteralType: + return { literal: n.literal }; + case SyntaxKind.TypePredicate: + return { assertsModifier: n.assertsModifier, parameterName: n.parameterName, type: n.type }; + case SyntaxKind.ImportAttribute: + return { name: n.name, value: n.value }; + case SyntaxKind.ImportAttributes: + return { token: n.token, attributes: n.attributes, multiLine: n.multiLine }; + case SyntaxKind.TypeQuery: + return { exprName: n.exprName, typeArguments: n.typeArguments }; + case SyntaxKind.MappedType: + return { readonlyToken: n.readonlyToken, typeParameter: n.typeParameter, nameType: n.nameType, questionToken: n.questionToken, type: n.type, members: n.members }; + case SyntaxKind.TypeLiteral: + return { members: n.members }; + case SyntaxKind.TupleType: + return { elements: n.elements }; + case SyntaxKind.NamedTupleMember: + return { dotDotDotToken: n.dotDotDotToken, name: n.name, questionToken: n.questionToken, type: n.type }; + case SyntaxKind.OptionalType: + return { type: n.type }; + case SyntaxKind.RestType: + return { type: n.type }; + case SyntaxKind.ParenthesizedType: + return { type: n.type }; + case SyntaxKind.FunctionType: + return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.ConstructorType: + return { modifiers: n.modifiers, typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.TemplateHead: + return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; + case SyntaxKind.TemplateMiddle: + return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; + case SyntaxKind.TemplateTail: + return { text: n.text, rawText: n.rawText, templateFlags: n.templateFlags }; + case SyntaxKind.TemplateLiteralType: + return { head: n.head, templateSpans: n.templateSpans }; + case SyntaxKind.TemplateLiteralTypeSpan: + return { type: n.type, literal: n.literal }; + case SyntaxKind.SyntheticExpression: + return { type: n.type, isSpread: n.isSpread, tupleNameSource: n.tupleNameSource }; + case SyntaxKind.PartiallyEmittedExpression: + return { expression: n.expression }; + case SyntaxKind.JsxElement: + return { openingElement: n.openingElement, children: n.children, closingElement: n.closingElement }; + case SyntaxKind.JsxAttributes: + return { properties: n.properties }; + case SyntaxKind.JsxNamespacedName: + return { namespace: n.namespace, name: n.name }; + case SyntaxKind.JsxOpeningElement: + return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; + case SyntaxKind.JsxSelfClosingElement: + return { tagName: n.tagName, typeArguments: n.typeArguments, attributes: n.attributes }; + case SyntaxKind.JsxFragment: + return { openingFragment: n.openingFragment, children: n.children, closingFragment: n.closingFragment }; + case SyntaxKind.JsxAttribute: + return { name: n.name, initializer: n.initializer }; + case SyntaxKind.JsxSpreadAttribute: + return { expression: n.expression }; + case SyntaxKind.JsxClosingElement: + return { tagName: n.tagName }; + case SyntaxKind.JsxExpression: + return { dotDotDotToken: n.dotDotDotToken, expression: n.expression }; + case SyntaxKind.JsxText: + return { text: n.text, containsOnlyTriviaWhiteSpaces: n.containsOnlyTriviaWhiteSpaces }; + case SyntaxKind.SyntaxList: + return { children: n.children }; + case SyntaxKind.JSDoc: + return { comment: n.comment, tags: n.tags }; + case SyntaxKind.JSDocTypeExpression: + return { type: n.type }; + case SyntaxKind.JSDocNonNullableType: + return { type: n.type }; + case SyntaxKind.JSDocNullableType: + return { type: n.type }; + case SyntaxKind.JSDocVariadicType: + return { type: n.type }; + case SyntaxKind.JSDocOptionalType: + return { type: n.type }; + case SyntaxKind.JSDocTypeTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocUnknownTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocTemplateTag: + return { tagName: n.tagName, constraint: n.constraint, typeParameters: n.typeParameters, comment: n.comment }; + case SyntaxKind.JSDocReturnTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocPublicTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocPrivateTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocProtectedTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocReadonlyTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocOverrideTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocDeprecatedTag: + return { tagName: n.tagName, comment: n.comment }; + case SyntaxKind.JSDocSeeTag: + return { tagName: n.tagName, nameExpression: n.nameExpression, comment: n.comment }; + case SyntaxKind.JSDocImplementsTag: + return { tagName: n.tagName, className: n.className, comment: n.comment }; + case SyntaxKind.JSDocAugmentsTag: + return { tagName: n.tagName, className: n.className, comment: n.comment }; + case SyntaxKind.JSDocSatisfiesTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocThrowsTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocThisTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocImportTag: + return { tagName: n.tagName, importClause: n.importClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes, comment: n.comment }; + case SyntaxKind.JSDocCallbackTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; + case SyntaxKind.JSDocOverloadTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, comment: n.comment }; + case SyntaxKind.JSDocTypedefTag: + return { tagName: n.tagName, typeExpression: n.typeExpression, name: n.name, comment: n.comment }; + case SyntaxKind.JSDocSignature: + return { typeParameters: n.typeParameters, parameters: n.parameters, type: n.type }; + case SyntaxKind.JSDocNameReference: + return { name: n.name }; + case SyntaxKind.ModuleDeclaration: + return { modifiers: n.modifiers, keyword: n.keyword, name: n.name, attributes: n.attributes, body: n.body }; + case SyntaxKind.ImportEqualsDeclaration: + return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, name: n.name, moduleReference: n.moduleReference }; + case SyntaxKind.ExportDeclaration: + return { modifiers: n.modifiers, isTypeOnly: n.isTypeOnly, exportClause: n.exportClause, moduleSpecifier: n.moduleSpecifier, attributes: n.attributes }; + case SyntaxKind.ImportType: + return { isTypeOf: n.isTypeOf, argument: n.argument, attributes: n.attributes, qualifier: n.qualifier, typeArguments: n.typeArguments }; + case SyntaxKind.ImportClause: + return { phaseModifier: n.phaseModifier, name: n.name, namedBindings: n.namedBindings }; + case SyntaxKind.ImportSpecifier: + return { isTypeOnly: n.isTypeOnly, propertyName: n.propertyName, name: n.name }; + case SyntaxKind.JSDocText: + return { text: n.text }; + case SyntaxKind.JSDocLink: + return { name: n.name, text: n.text }; + case SyntaxKind.JSDocLinkPlain: + return { name: n.name, text: n.text }; + case SyntaxKind.JSDocLinkCode: + return { name: n.name, text: n.text }; + case SyntaxKind.TypeParameter: + return { modifiers: n.modifiers, name: n.name, constraint: n.constraint, expression: n.expression, defaultType: n.defaultType }; + case SyntaxKind.SyntheticReferenceExpression: + return { expression: n.expression, thisArg: n.thisArg }; + case SyntaxKind.JSDocTypeLiteral: + return { jsdocPropertyTags: n.jsdocPropertyTags, isArrayType: n.isArrayType }; + case SyntaxKind.ForInStatement: + return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; + case SyntaxKind.ForOfStatement: + return { awaitModifier: n.awaitModifier, initializer: n.initializer, expression: n.expression, statement: n.statement }; + case SyntaxKind.CaseClause: + return { expression: n.expression, statements: n.statements }; + case SyntaxKind.DefaultClause: + return { expression: n.expression, statements: n.statements }; + case SyntaxKind.ObjectBindingPattern: + return { elements: n.elements }; + case SyntaxKind.ArrayBindingPattern: + return { elements: n.elements }; + case SyntaxKind.JSDocParameterTag: + return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; + case SyntaxKind.JSDocPropertyTag: + return { tagName: n.tagName, name: n.name, isBracketed: n.isBracketed, typeExpression: n.typeExpression, isNameFirst: n.isNameFirst, comment: n.comment }; + case SyntaxKind.SourceFile: + return cloneSourceFileData(n); + default: + return undefined; + } +} + +type ForEachChildFunction = (data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined) => T | undefined; + +const forEachChildTable: Record = { + [SyntaxKind.QualifiedName]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.left) || + visitNode(cbNode, data.right), + [SyntaxKind.ComputedPropertyName]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.Decorator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.IfStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.thenStatement) || + visitNode(cbNode, data.elseStatement), + [SyntaxKind.DoStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.statement) || + visitNode(cbNode, data.expression), + [SyntaxKind.WhileStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.statement), + [SyntaxKind.ForStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.initializer) || + visitNode(cbNode, data.condition) || + visitNode(cbNode, data.incrementor) || + visitNode(cbNode, data.statement), + [SyntaxKind.BreakStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), + [SyntaxKind.ContinueStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.label), + [SyntaxKind.ReturnStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.WithStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.statement), + [SyntaxKind.SwitchStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.caseBlock), + [SyntaxKind.CaseBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.clauses), + [SyntaxKind.ThrowStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.TryStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tryBlock) || + visitNode(cbNode, data.catchClause) || + visitNode(cbNode, data.finallyBlock), + [SyntaxKind.CatchClause]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.variableDeclaration) || + visitNode(cbNode, data.block), + [SyntaxKind.LabeledStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.label) || + visitNode(cbNode, data.statement), + [SyntaxKind.ExpressionStatement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.Block]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), + [SyntaxKind.VariableStatement]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.declarationList), + [SyntaxKind.VariableDeclaration]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.name) || + visitNode(cbNode, data.exclamationToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.initializer), + [SyntaxKind.VariableDeclarationList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.declarations), + [SyntaxKind.Parameter]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.dotDotDotToken) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.questionToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.initializer), + [SyntaxKind.BindingElement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.dotDotDotToken) || + visitNode(cbNode, data.propertyName) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.initializer), + [SyntaxKind.MissingDeclaration]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.modifiers), + [SyntaxKind.FunctionDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.asteriskToken) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.ClassDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.heritageClauses) || + visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.ClassExpression]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.heritageClauses) || + visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.HeritageClause]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), + [SyntaxKind.InterfaceDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.heritageClauses) || + visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.TypeAliasDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNode(cbNode, data.type), + [SyntaxKind.JSTypeAliasDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNode(cbNode, data.type), + [SyntaxKind.EnumMember]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.name) || + visitNode(cbNode, data.initializer), + [SyntaxKind.EnumDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.ModuleBlock]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.statements), + [SyntaxKind.ImportDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.importClause) || + visitNode(cbNode, data.moduleSpecifier) || + visitNode(cbNode, data.attributes), + [SyntaxKind.JSImportDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.importClause) || + visitNode(cbNode, data.moduleSpecifier) || + visitNode(cbNode, data.attributes), + [SyntaxKind.ExternalModuleReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.NamespaceImport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.NamedImports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.ExportAssignment]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.expression), + [SyntaxKind.NamespaceExportDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name), + [SyntaxKind.NamespaceExport]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.NamedExports]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.ExportSpecifier]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.propertyName) || + visitNode(cbNode, data.name), + [SyntaxKind.CallSignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.ConstructSignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.Constructor]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.GetAccessor]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.SetAccessor]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.IndexSignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.MethodSignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.MethodDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.asteriskToken) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.PropertySignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.initializer), + [SyntaxKind.PropertyDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.initializer), + [SyntaxKind.ClassStaticBlockDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.body), + [SyntaxKind.BinaryExpression]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.left) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.operatorToken) || + visitNode(cbNode, data.right), + [SyntaxKind.PrefixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), + [SyntaxKind.PostfixUnaryExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.operand), + [SyntaxKind.YieldExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.asteriskToken) || + visitNode(cbNode, data.expression), + [SyntaxKind.ArrowFunction]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.equalsGreaterThanToken) || + visitNode(cbNode, data.body), + [SyntaxKind.FunctionExpression]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.asteriskToken) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.body), + [SyntaxKind.AsExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.type), + [SyntaxKind.SatisfiesExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.type), + [SyntaxKind.ConditionalExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.condition) || + visitNode(cbNode, data.questionToken) || + visitNode(cbNode, data.whenTrue) || + visitNode(cbNode, data.colonToken) || + visitNode(cbNode, data.whenFalse), + [SyntaxKind.PropertyAccessExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.questionDotToken) || + visitNode(cbNode, data.name), + [SyntaxKind.ElementAccessExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.questionDotToken) || + visitNode(cbNode, data.argumentExpression), + [SyntaxKind.CallExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.questionDotToken) || + visitNodes(cbNode, cbNodes, data.typeArguments) || + visitNodes(cbNode, cbNodes, data.arguments), + [SyntaxKind.NewExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNodes(cbNode, cbNodes, data.typeArguments) || + visitNodes(cbNode, cbNodes, data.arguments), + [SyntaxKind.MetaProperty]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.NonNullExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.SpreadElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.TemplateExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.head) || + visitNodes(cbNode, cbNodes, data.templateSpans), + [SyntaxKind.TemplateSpan]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.literal), + [SyntaxKind.TaggedTemplateExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tag) || + visitNode(cbNode, data.questionDotToken) || + visitNodes(cbNode, cbNodes, data.typeArguments) || + visitNode(cbNode, data.template), + [SyntaxKind.ParenthesizedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.ArrayLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.ObjectLiteralExpression]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), + [SyntaxKind.SpreadAssignment]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.PropertyAssignment]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.initializer), + [SyntaxKind.ShorthandPropertyAssignment]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.postfixToken) || + visitNode(cbNode, data.type) || + visitNode(cbNode, data.equalsToken) || + visitNode(cbNode, data.objectAssignmentInitializer), + [SyntaxKind.DeleteExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.TypeOfExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.VoidExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.AwaitExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.TypeAssertionExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.type) || + visitNode(cbNode, data.expression), + [SyntaxKind.UnionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), + [SyntaxKind.IntersectionType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.types), + [SyntaxKind.ConditionalType]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.checkType) || + visitNode(cbNode, data.extendsType) || + visitNode(cbNode, data.trueType) || + visitNode(cbNode, data.falseType), + [SyntaxKind.TypeOperator]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.InferType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.typeParameter), + [SyntaxKind.ArrayType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.elementType), + [SyntaxKind.IndexedAccessType]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.objectType) || + visitNode(cbNode, data.indexType), + [SyntaxKind.TypeReference]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.typeName) || + visitNodes(cbNode, cbNodes, data.typeArguments), + [SyntaxKind.ExpressionWithTypeArguments]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNodes(cbNode, cbNodes, data.typeArguments), + [SyntaxKind.LiteralType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.literal), + [SyntaxKind.TypePredicate]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.assertsModifier) || + visitNode(cbNode, data.parameterName) || + visitNode(cbNode, data.type), + [SyntaxKind.ImportAttribute]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.name) || + visitNode(cbNode, data.value), + [SyntaxKind.ImportAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.attributes), + [SyntaxKind.TypeQuery]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.exprName) || + visitNodes(cbNode, cbNodes, data.typeArguments), + [SyntaxKind.MappedType]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.readonlyToken) || + visitNode(cbNode, data.typeParameter) || + visitNode(cbNode, data.nameType) || + visitNode(cbNode, data.questionToken) || + visitNode(cbNode, data.type) || + visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.TypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.members), + [SyntaxKind.TupleType]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.NamedTupleMember]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.dotDotDotToken) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.questionToken) || + visitNode(cbNode, data.type), + [SyntaxKind.OptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.RestType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.ParenthesizedType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.FunctionType]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.ConstructorType]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.TemplateLiteralType]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.head) || + visitNodes(cbNode, cbNodes, data.templateSpans), + [SyntaxKind.TemplateLiteralTypeSpan]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.type) || + visitNode(cbNode, data.literal), + [SyntaxKind.SyntheticExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tupleNameSource), + [SyntaxKind.PartiallyEmittedExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.JsxElement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.openingElement) || + visitNodes(cbNode, cbNodes, data.children) || + visitNode(cbNode, data.closingElement), + [SyntaxKind.JsxAttributes]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.properties), + [SyntaxKind.JsxNamespacedName]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.namespace) || + visitNode(cbNode, data.name), + [SyntaxKind.JsxOpeningElement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.typeArguments) || + visitNode(cbNode, data.attributes), + [SyntaxKind.JsxSelfClosingElement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.typeArguments) || + visitNode(cbNode, data.attributes), + [SyntaxKind.JsxFragment]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.openingFragment) || + visitNodes(cbNode, cbNodes, data.children) || + visitNode(cbNode, data.closingFragment), + [SyntaxKind.JsxAttribute]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.name) || + visitNode(cbNode, data.initializer), + [SyntaxKind.JsxSpreadAttribute]: (data, cbNode, cbNodes) => visitNode(cbNode, data.expression), + [SyntaxKind.JsxClosingElement]: (data, cbNode, cbNodes) => visitNode(cbNode, data.tagName), + [SyntaxKind.JsxExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.dotDotDotToken) || + visitNode(cbNode, data.expression), + [SyntaxKind.SyntaxList]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.children), + [SyntaxKind.JSDoc]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.comment) || + visitNodes(cbNode, cbNodes, data.tags), + [SyntaxKind.JSDocTypeExpression]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.JSDocNonNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.JSDocNullableType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.JSDocVariadicType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.JSDocOptionalType]: (data, cbNode, cbNodes) => visitNode(cbNode, data.type), + [SyntaxKind.JSDocTypeTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocUnknownTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocTemplateTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.constraint) || + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocReturnTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocPublicTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocPrivateTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocProtectedTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocReadonlyTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocOverrideTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocDeprecatedTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocSeeTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.nameExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocImplementsTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.className) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocAugmentsTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.className) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocSatisfiesTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocThrowsTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocThisTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocImportTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.importClause) || + visitNode(cbNode, data.moduleSpecifier) || + visitNode(cbNode, data.attributes) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocCallbackTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocOverloadTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocTypedefTag]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.tagName) || + visitNode(cbNode, data.typeExpression) || + visitNode(cbNode, data.name) || + visitNodes(cbNode, cbNodes, data.comment), + [SyntaxKind.JSDocSignature]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.typeParameters) || + visitNodes(cbNode, cbNodes, data.parameters) || + visitNode(cbNode, data.type), + [SyntaxKind.JSDocNameReference]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.ModuleDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.attributes) || + visitNode(cbNode, data.body), + [SyntaxKind.ImportEqualsDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.moduleReference), + [SyntaxKind.ExportDeclaration]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.exportClause) || + visitNode(cbNode, data.moduleSpecifier) || + visitNode(cbNode, data.attributes), + [SyntaxKind.ImportType]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.argument) || + visitNode(cbNode, data.attributes) || + visitNode(cbNode, data.qualifier) || + visitNodes(cbNode, cbNodes, data.typeArguments), + [SyntaxKind.ImportClause]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.name) || + visitNode(cbNode, data.namedBindings), + [SyntaxKind.ImportSpecifier]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.propertyName) || + visitNode(cbNode, data.name), + [SyntaxKind.JSDocLink]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.JSDocLinkPlain]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.JSDocLinkCode]: (data, cbNode, cbNodes) => visitNode(cbNode, data.name), + [SyntaxKind.TypeParameter]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.modifiers) || + visitNode(cbNode, data.name) || + visitNode(cbNode, data.constraint) || + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.defaultType), + [SyntaxKind.SyntheticReferenceExpression]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.thisArg), + [SyntaxKind.JSDocTypeLiteral]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.jsdocPropertyTags), + [SyntaxKind.ForInStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.awaitModifier) || + visitNode(cbNode, data.initializer) || + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.statement), + [SyntaxKind.ForOfStatement]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.awaitModifier) || + visitNode(cbNode, data.initializer) || + visitNode(cbNode, data.expression) || + visitNode(cbNode, data.statement), + [SyntaxKind.CaseClause]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNodes(cbNode, cbNodes, data.statements), + [SyntaxKind.DefaultClause]: (data, cbNode, cbNodes) => + visitNode(cbNode, data.expression) || + visitNodes(cbNode, cbNodes, data.statements), + [SyntaxKind.ObjectBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.ArrayBindingPattern]: (data, cbNode, cbNodes) => visitNodes(cbNode, cbNodes, data.elements), + [SyntaxKind.JSDocParameterTag]: forEachChildOfJSDocParameterTag, + [SyntaxKind.JSDocPropertyTag]: forEachChildOfJSDocPropertyTag, + [SyntaxKind.SourceFile]: (data, cbNode, cbNodes) => + visitNodes(cbNode, cbNodes, data.statements) || + visitNode(cbNode, data.endOfFileToken), +}; + +type YieldEachChildFunction = (data: any) => Generator; + +function* emptyChildrenIter(): Generator { + return undefined; +} + +const yieldEachChildTable: Record = { + [SyntaxKind.QualifiedName]: function* (data) { + if (data.left) { + const res = yield data.left; + if (res) return res; + } + if (data.right) { + const res = yield data.right; + if (res) return res; + } + }, + [SyntaxKind.ComputedPropertyName]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.Decorator]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.IfStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.thenStatement) { + const res = yield data.thenStatement; + if (res) return res; + } + if (data.elseStatement) { + const res = yield data.elseStatement; + if (res) return res; + } + }, + [SyntaxKind.DoStatement]: function* (data) { + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.WhileStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.ForStatement]: function* (data) { + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + if (data.condition) { + const res = yield data.condition; + if (res) return res; + } + if (data.incrementor) { + const res = yield data.incrementor; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.BreakStatement]: function* (data) { + if (data.label) { + const res = yield data.label; + if (res) return res; + } + }, + [SyntaxKind.ContinueStatement]: function* (data) { + if (data.label) { + const res = yield data.label; + if (res) return res; + } + }, + [SyntaxKind.ReturnStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.WithStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.SwitchStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.caseBlock) { + const res = yield data.caseBlock; + if (res) return res; + } + }, + [SyntaxKind.CaseBlock]: function* (data) { + for (const n of data.clauses) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ThrowStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.TryStatement]: function* (data) { + if (data.tryBlock) { + const res = yield data.tryBlock; + if (res) return res; + } + if (data.catchClause) { + const res = yield data.catchClause; + if (res) return res; + } + if (data.finallyBlock) { + const res = yield data.finallyBlock; + if (res) return res; + } + }, + [SyntaxKind.CatchClause]: function* (data) { + if (data.variableDeclaration) { + const res = yield data.variableDeclaration; + if (res) return res; + } + if (data.block) { + const res = yield data.block; + if (res) return res; + } + }, + [SyntaxKind.LabeledStatement]: function* (data) { + if (data.label) { + const res = yield data.label; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.ExpressionStatement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.Block]: function* (data) { + for (const n of data.statements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.VariableStatement]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.declarationList) { + const res = yield data.declarationList; + if (res) return res; + } + }, + [SyntaxKind.VariableDeclaration]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.exclamationToken) { + const res = yield data.exclamationToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.VariableDeclarationList]: function* (data) { + for (const n of data.declarations) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.Parameter]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.dotDotDotToken) { + const res = yield data.dotDotDotToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.questionToken) { + const res = yield data.questionToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.BindingElement]: function* (data) { + if (data.dotDotDotToken) { + const res = yield data.dotDotDotToken; + if (res) return res; + } + if (data.propertyName) { + const res = yield data.propertyName; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.MissingDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.FunctionDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.asteriskToken) { + const res = yield data.asteriskToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.ClassDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + if (data.heritageClauses) { + for (const n of data.heritageClauses) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ClassExpression]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + if (data.heritageClauses) { + for (const n of data.heritageClauses) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.HeritageClause]: function* (data) { + for (const n of data.types) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.InterfaceDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + if (data.heritageClauses) { + for (const n of data.heritageClauses) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.TypeAliasDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSTypeAliasDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.EnumMember]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.EnumDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ModuleBlock]: function* (data) { + for (const n of data.statements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ImportDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.importClause) { + const res = yield data.importClause; + if (res) return res; + } + if (data.moduleSpecifier) { + const res = yield data.moduleSpecifier; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + }, + [SyntaxKind.JSImportDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.importClause) { + const res = yield data.importClause; + if (res) return res; + } + if (data.moduleSpecifier) { + const res = yield data.moduleSpecifier; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + }, + [SyntaxKind.ExternalModuleReference]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.NamespaceImport]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.NamedImports]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ExportAssignment]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.NamespaceExportDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.NamespaceExport]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.NamedExports]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ExportSpecifier]: function* (data) { + if (data.propertyName) { + const res = yield data.propertyName; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.CallSignature]: function* (data) { + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.ConstructSignature]: function* (data) { + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.Constructor]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.GetAccessor]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.SetAccessor]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.IndexSignature]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.MethodSignature]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.MethodDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.asteriskToken) { + const res = yield data.asteriskToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.PropertySignature]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.PropertyDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.ClassStaticBlockDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.BinaryExpression]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.left) { + const res = yield data.left; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.operatorToken) { + const res = yield data.operatorToken; + if (res) return res; + } + if (data.right) { + const res = yield data.right; + if (res) return res; + } + }, + [SyntaxKind.PrefixUnaryExpression]: function* (data) { + if (data.operand) { + const res = yield data.operand; + if (res) return res; + } + }, + [SyntaxKind.PostfixUnaryExpression]: function* (data) { + if (data.operand) { + const res = yield data.operand; + if (res) return res; + } + }, + [SyntaxKind.YieldExpression]: function* (data) { + if (data.asteriskToken) { + const res = yield data.asteriskToken; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.ArrowFunction]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.equalsGreaterThanToken) { + const res = yield data.equalsGreaterThanToken; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.FunctionExpression]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.asteriskToken) { + const res = yield data.asteriskToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.AsExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.SatisfiesExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.ConditionalExpression]: function* (data) { + if (data.condition) { + const res = yield data.condition; + if (res) return res; + } + if (data.questionToken) { + const res = yield data.questionToken; + if (res) return res; + } + if (data.whenTrue) { + const res = yield data.whenTrue; + if (res) return res; + } + if (data.colonToken) { + const res = yield data.colonToken; + if (res) return res; + } + if (data.whenFalse) { + const res = yield data.whenFalse; + if (res) return res; + } + }, + [SyntaxKind.PropertyAccessExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.questionDotToken) { + const res = yield data.questionDotToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.ElementAccessExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.questionDotToken) { + const res = yield data.questionDotToken; + if (res) return res; + } + if (data.argumentExpression) { + const res = yield data.argumentExpression; + if (res) return res; + } + }, + [SyntaxKind.CallExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.questionDotToken) { + const res = yield data.questionDotToken; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.arguments) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.NewExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + if (data.arguments) { + for (const n of data.arguments) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.MetaProperty]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.NonNullExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.SpreadElement]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.TemplateExpression]: function* (data) { + if (data.head) { + const res = yield data.head; + if (res) return res; + } + for (const n of data.templateSpans) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.TemplateSpan]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.literal) { + const res = yield data.literal; + if (res) return res; + } + }, + [SyntaxKind.TaggedTemplateExpression]: function* (data) { + if (data.tag) { + const res = yield data.tag; + if (res) return res; + } + if (data.questionDotToken) { + const res = yield data.questionDotToken; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + if (data.template) { + const res = yield data.template; + if (res) return res; + } + }, + [SyntaxKind.ParenthesizedExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.ArrayLiteralExpression]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ObjectLiteralExpression]: function* (data) { + for (const n of data.properties) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.SpreadAssignment]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.PropertyAssignment]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.ShorthandPropertyAssignment]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.postfixToken) { + const res = yield data.postfixToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.equalsToken) { + const res = yield data.equalsToken; + if (res) return res; + } + if (data.objectAssignmentInitializer) { + const res = yield data.objectAssignmentInitializer; + if (res) return res; + } + }, + [SyntaxKind.DeleteExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.TypeOfExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.VoidExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.AwaitExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.TypeAssertionExpression]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.UnionType]: function* (data) { + for (const n of data.types) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.IntersectionType]: function* (data) { + for (const n of data.types) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ConditionalType]: function* (data) { + if (data.checkType) { + const res = yield data.checkType; + if (res) return res; + } + if (data.extendsType) { + const res = yield data.extendsType; + if (res) return res; + } + if (data.trueType) { + const res = yield data.trueType; + if (res) return res; + } + if (data.falseType) { + const res = yield data.falseType; + if (res) return res; + } + }, + [SyntaxKind.TypeOperator]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.InferType]: function* (data) { + if (data.typeParameter) { + const res = yield data.typeParameter; + if (res) return res; + } + }, + [SyntaxKind.ArrayType]: function* (data) { + if (data.elementType) { + const res = yield data.elementType; + if (res) return res; + } + }, + [SyntaxKind.IndexedAccessType]: function* (data) { + if (data.objectType) { + const res = yield data.objectType; + if (res) return res; + } + if (data.indexType) { + const res = yield data.indexType; + if (res) return res; + } + }, + [SyntaxKind.TypeReference]: function* (data) { + if (data.typeName) { + const res = yield data.typeName; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.ExpressionWithTypeArguments]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.LiteralType]: function* (data) { + if (data.literal) { + const res = yield data.literal; + if (res) return res; + } + }, + [SyntaxKind.TypePredicate]: function* (data) { + if (data.assertsModifier) { + const res = yield data.assertsModifier; + if (res) return res; + } + if (data.parameterName) { + const res = yield data.parameterName; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.ImportAttribute]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.value) { + const res = yield data.value; + if (res) return res; + } + }, + [SyntaxKind.ImportAttributes]: function* (data) { + for (const n of data.attributes) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.TypeQuery]: function* (data) { + if (data.exprName) { + const res = yield data.exprName; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.MappedType]: function* (data) { + if (data.readonlyToken) { + const res = yield data.readonlyToken; + if (res) return res; + } + if (data.typeParameter) { + const res = yield data.typeParameter; + if (res) return res; + } + if (data.nameType) { + const res = yield data.nameType; + if (res) return res; + } + if (data.questionToken) { + const res = yield data.questionToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.members) { + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.TypeLiteral]: function* (data) { + for (const n of data.members) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.TupleType]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.NamedTupleMember]: function* (data) { + if (data.dotDotDotToken) { + const res = yield data.dotDotDotToken; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.questionToken) { + const res = yield data.questionToken; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.OptionalType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.RestType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.ParenthesizedType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.FunctionType]: function* (data) { + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.ConstructorType]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.TemplateLiteralType]: function* (data) { + if (data.head) { + const res = yield data.head; + if (res) return res; + } + for (const n of data.templateSpans) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.TemplateLiteralTypeSpan]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + if (data.literal) { + const res = yield data.literal; + if (res) return res; + } + }, + [SyntaxKind.SyntheticExpression]: function* (data) { + if (data.tupleNameSource) { + const res = yield data.tupleNameSource; + if (res) return res; + } + }, + [SyntaxKind.PartiallyEmittedExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.JsxElement]: function* (data) { + if (data.openingElement) { + const res = yield data.openingElement; + if (res) return res; + } + for (const n of data.children) { + const res = yield n; + if (res) return res; + } + if (data.closingElement) { + const res = yield data.closingElement; + if (res) return res; + } + }, + [SyntaxKind.JsxAttributes]: function* (data) { + for (const n of data.properties) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.JsxNamespacedName]: function* (data) { + if (data.namespace) { + const res = yield data.namespace; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.JsxOpeningElement]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + }, + [SyntaxKind.JsxSelfClosingElement]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + }, + [SyntaxKind.JsxFragment]: function* (data) { + if (data.openingFragment) { + const res = yield data.openingFragment; + if (res) return res; + } + for (const n of data.children) { + const res = yield n; + if (res) return res; + } + if (data.closingFragment) { + const res = yield data.closingFragment; + if (res) return res; + } + }, + [SyntaxKind.JsxAttribute]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + }, + [SyntaxKind.JsxSpreadAttribute]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.JsxClosingElement]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + }, + [SyntaxKind.JsxExpression]: function* (data) { + if (data.dotDotDotToken) { + const res = yield data.dotDotDotToken; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + }, + [SyntaxKind.SyntaxList]: function* (data) { + for (const n of data.children) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.JSDoc]: function* (data) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + if (data.tags) { + for (const n of data.tags) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocTypeExpression]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocNonNullableType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocNullableType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocVariadicType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocOptionalType]: function* (data) { + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocTypeTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocUnknownTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocTemplateTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.constraint) { + const res = yield data.constraint; + if (res) return res; + } + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocReturnTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocPublicTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocPrivateTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocProtectedTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocReadonlyTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocOverrideTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocDeprecatedTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocSeeTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.nameExpression) { + const res = yield data.nameExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocImplementsTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.className) { + const res = yield data.className; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocAugmentsTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.className) { + const res = yield data.className; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocSatisfiesTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocThrowsTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocThisTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocImportTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.importClause) { + const res = yield data.importClause; + if (res) return res; + } + if (data.moduleSpecifier) { + const res = yield data.moduleSpecifier; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocCallbackTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocOverloadTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocTypedefTag]: function* (data) { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.comment) { + for (const n of data.comment) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.JSDocSignature]: function* (data) { + if (data.typeParameters) { + for (const n of data.typeParameters) { + const res = yield n; + if (res) return res; + } + } + for (const n of data.parameters) { + const res = yield n; + if (res) return res; + } + if (data.type) { + const res = yield data.type; + if (res) return res; + } + }, + [SyntaxKind.JSDocNameReference]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.ModuleDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + if (data.body) { + const res = yield data.body; + if (res) return res; + } + }, + [SyntaxKind.ImportEqualsDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.moduleReference) { + const res = yield data.moduleReference; + if (res) return res; + } + }, + [SyntaxKind.ExportDeclaration]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.exportClause) { + const res = yield data.exportClause; + if (res) return res; + } + if (data.moduleSpecifier) { + const res = yield data.moduleSpecifier; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + }, + [SyntaxKind.ImportType]: function* (data) { + if (data.argument) { + const res = yield data.argument; + if (res) return res; + } + if (data.attributes) { + const res = yield data.attributes; + if (res) return res; + } + if (data.qualifier) { + const res = yield data.qualifier; + if (res) return res; + } + if (data.typeArguments) { + for (const n of data.typeArguments) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.ImportClause]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.namedBindings) { + const res = yield data.namedBindings; + if (res) return res; + } + }, + [SyntaxKind.ImportSpecifier]: function* (data) { + if (data.propertyName) { + const res = yield data.propertyName; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.JSDocLink]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.JSDocLinkPlain]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.JSDocLinkCode]: function* (data) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + }, + [SyntaxKind.TypeParameter]: function* (data) { + if (data.modifiers) { + for (const n of data.modifiers) { + const res = yield n; + if (res) return res; + } + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.constraint) { + const res = yield data.constraint; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.defaultType) { + const res = yield data.defaultType; + if (res) return res; + } + }, + [SyntaxKind.SyntheticReferenceExpression]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.thisArg) { + const res = yield data.thisArg; + if (res) return res; + } + }, + [SyntaxKind.JSDocTypeLiteral]: function* (data) { + if (data.jsdocPropertyTags) { + for (const n of data.jsdocPropertyTags) { + const res = yield n; + if (res) return res; + } + } + }, + [SyntaxKind.ForInStatement]: function* (data) { + if (data.awaitModifier) { + const res = yield data.awaitModifier; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.ForOfStatement]: function* (data) { + if (data.awaitModifier) { + const res = yield data.awaitModifier; + if (res) return res; + } + if (data.initializer) { + const res = yield data.initializer; + if (res) return res; + } + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + if (data.statement) { + const res = yield data.statement; + if (res) return res; + } + }, + [SyntaxKind.CaseClause]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + for (const n of data.statements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.DefaultClause]: function* (data) { + if (data.expression) { + const res = yield data.expression; + if (res) return res; + } + for (const n of data.statements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ObjectBindingPattern]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.ArrayBindingPattern]: function* (data) { + for (const n of data.elements) { + const res = yield n; + if (res) return res; + } + }, + [SyntaxKind.JSDocParameterTag]: yieldEachChildOfJSDocParameterTag, + [SyntaxKind.JSDocPropertyTag]: yieldEachChildOfJSDocPropertyTag, + [SyntaxKind.SourceFile]: function* (data) { + for (const n of data.statements) { + const res = yield n; + if (res) return res; + } + const res = yield data.endOfFileToken; + if (res) return res; + }, +}; + +function visitNode(cbNode: (node: Node) => T, node: Node | undefined): T | undefined { + return node ? cbNode(node) : undefined; +} + +function visitNodes(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined { + if (!nodes) return undefined; + if (cbNodes) return cbNodes(nodes); + for (const node of nodes) { + const result = cbNode(node); + if (result) return result; + } + return undefined; +} + +export function createToken(kind: TKind): Token { + return new NodeObject(kind, undefined) as unknown as Token; +} + +export function createIdentifier(text: string): Identifier { + return new NodeObject(SyntaxKind.Identifier, { + text, + }) as unknown as Identifier; +} + +export function createPrivateIdentifier(text: string): PrivateIdentifier { + return new NodeObject(SyntaxKind.PrivateIdentifier, { + text, + }) as unknown as PrivateIdentifier; +} + +export function createQualifiedName(left: EntityName, right: MemberName): QualifiedName { + return new NodeObject(SyntaxKind.QualifiedName, { + left, + right, + }) as unknown as QualifiedName; +} + +export function createComputedPropertyName(expression: Expression): ComputedPropertyName { + return new NodeObject(SyntaxKind.ComputedPropertyName, { + expression, + }) as unknown as ComputedPropertyName; +} + +export function createDecorator(expression: LeftHandSideExpression): Decorator { + return new NodeObject(SyntaxKind.Decorator, { + expression, + }) as unknown as Decorator; +} + +export function createEmptyStatement(): EmptyStatement { + return new NodeObject(SyntaxKind.EmptyStatement, undefined) as unknown as EmptyStatement; +} + +export function createIfStatement(expression: Expression, thenStatement: Statement, elseStatement?: Statement): IfStatement { + return new NodeObject(SyntaxKind.IfStatement, { + expression, + thenStatement, + elseStatement, + }) as unknown as IfStatement; +} + +export function createDoStatement(statement: Statement, expression: Expression): DoStatement { + return new NodeObject(SyntaxKind.DoStatement, { + statement, + expression, + }) as unknown as DoStatement; +} + +export function createWhileStatement(expression: Expression, statement: Statement): WhileStatement { + return new NodeObject(SyntaxKind.WhileStatement, { + expression, + statement, + }) as unknown as WhileStatement; +} + +export function createForStatement(initializer: ForInitializer | undefined, condition: Expression | undefined, incrementor: Expression | undefined, statement: Statement): ForStatement { + return new NodeObject(SyntaxKind.ForStatement, { + initializer, + condition, + incrementor, + statement, + }) as unknown as ForStatement; +} + +export function createBreakStatement(label?: Identifier): BreakStatement { + return new NodeObject(SyntaxKind.BreakStatement, { + label, + }) as unknown as BreakStatement; +} + +export function createContinueStatement(label?: Identifier): ContinueStatement { + return new NodeObject(SyntaxKind.ContinueStatement, { + label, + }) as unknown as ContinueStatement; +} + +export function createReturnStatement(expression?: Expression): ReturnStatement { + return new NodeObject(SyntaxKind.ReturnStatement, { + expression, + }) as unknown as ReturnStatement; +} + +export function createWithStatement(expression: Expression, statement: Statement): WithStatement { + return new NodeObject(SyntaxKind.WithStatement, { + expression, + statement, + }) as unknown as WithStatement; +} + +export function createSwitchStatement(expression: Expression, caseBlock: CaseBlock): SwitchStatement { + return new NodeObject(SyntaxKind.SwitchStatement, { + expression, + caseBlock, + }) as unknown as SwitchStatement; +} + +export function createCaseBlock(clauses: readonly CaseOrDefaultClause[]): CaseBlock { + return new NodeObject(SyntaxKind.CaseBlock, { + clauses: createNodeArray(clauses), + }) as unknown as CaseBlock; +} + +export function createThrowStatement(expression: Expression): ThrowStatement { + return new NodeObject(SyntaxKind.ThrowStatement, { + expression, + }) as unknown as ThrowStatement; +} + +export function createTryStatement(tryBlock: Block, catchClause?: CatchClause, finallyBlock?: Block): TryStatement { + return new NodeObject(SyntaxKind.TryStatement, { + tryBlock, + catchClause, + finallyBlock, + }) as unknown as TryStatement; +} + +export function createCatchClause(variableDeclaration: VariableDeclaration | undefined, block: Block): CatchClause { + return new NodeObject(SyntaxKind.CatchClause, { + variableDeclaration, + block, + }) as unknown as CatchClause; +} + +export function createDebuggerStatement(): DebuggerStatement { + return new NodeObject(SyntaxKind.DebuggerStatement, undefined) as unknown as DebuggerStatement; +} + +export function createLabeledStatement(label: Identifier, statement: Statement): LabeledStatement { + return new NodeObject(SyntaxKind.LabeledStatement, { + label, + statement, + }) as unknown as LabeledStatement; +} + +export function createExpressionStatement(expression: Expression): ExpressionStatement { + return new NodeObject(SyntaxKind.ExpressionStatement, { + expression, + }) as unknown as ExpressionStatement; +} + +export function createBlock(statements: readonly Statement[], multiLine?: boolean): Block { + return new NodeObject(SyntaxKind.Block, { + statements: createNodeArray(statements), + multiLine, + }) as unknown as Block; +} + +export function createVariableStatement(modifiers: readonly ModifierLike[] | undefined, declarationList: VariableDeclarationList): VariableStatement { + return new NodeObject(SyntaxKind.VariableStatement, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + declarationList, + }) as unknown as VariableStatement; +} + +export function createVariableDeclaration(name: BindingName, exclamationToken?: ExclamationToken, type?: TypeNode, initializer?: Expression): VariableDeclaration { + return new NodeObject(SyntaxKind.VariableDeclaration, { + name, + exclamationToken, + type, + initializer, + }) as unknown as VariableDeclaration; +} + +export function createVariableDeclarationList(declarations: readonly VariableDeclaration[], flags: NodeFlags): VariableDeclarationList { + const node = new NodeObject(SyntaxKind.VariableDeclarationList, { + declarations: createNodeArray(declarations), + }) as unknown as VariableDeclarationList; + (node as any).flags = flags; + return node; +} + +export function createParameterDeclaration(modifiers: readonly ModifierLike[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression): ParameterDeclaration { + return new NodeObject(SyntaxKind.Parameter, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + dotDotDotToken, + name, + questionToken, + type, + initializer, + }) as unknown as ParameterDeclaration; +} + +export function createBindingElement(dotDotDotToken?: DotDotDotToken, propertyName?: PropertyName, name?: BindingName, initializer?: Expression): BindingElement { + return new NodeObject(SyntaxKind.BindingElement, { + dotDotDotToken, + propertyName, + name, + initializer, + }) as unknown as BindingElement; +} + +export function createMissingDeclaration(modifiers?: readonly ModifierLike[]): MissingDeclaration { + return new NodeObject(SyntaxKind.MissingDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + }) as unknown as MissingDeclaration; +} + +export function createFunctionDeclaration(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): FunctionDeclaration { + return new NodeObject(SyntaxKind.FunctionDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + asteriskToken, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as FunctionDeclaration; +} + +export function createClassDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassDeclaration { + return new NodeObject(SyntaxKind.ClassDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, + members: createNodeArray(members), + }) as unknown as ClassDeclaration; +} + +export function createClassExpression(modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassExpression { + return new NodeObject(SyntaxKind.ClassExpression, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, + members: createNodeArray(members), + }) as unknown as ClassExpression; +} + +export function createHeritageClause(token: SyntaxKind.ExtendsKeyword | SyntaxKind.ImplementsKeyword, types: readonly HeritageClauseElement[]): HeritageClause { + return new NodeObject(SyntaxKind.HeritageClause, { + token, + types: createNodeArray(types), + }) as unknown as HeritageClause; +} + +export function createInterfaceDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly TypeElement[]): InterfaceDeclaration { + return new NodeObject(SyntaxKind.InterfaceDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + heritageClauses: heritageClauses ? createNodeArray(heritageClauses) : undefined, + members: createNodeArray(members), + }) as unknown as InterfaceDeclaration; +} + +export function createTypeAliasDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, type: TypeNode): TypeAliasDeclaration { + return new NodeObject(SyntaxKind.TypeAliasDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + type, + }) as unknown as TypeAliasDeclaration; +} + +export function createEnumMember(name: PropertyName, initializer?: Expression): EnumMember { + return new NodeObject(SyntaxKind.EnumMember, { + name, + initializer, + }) as unknown as EnumMember; +} + +export function createEnumDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, members: readonly EnumMember[]): EnumDeclaration { + return new NodeObject(SyntaxKind.EnumDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + members: createNodeArray(members), + }) as unknown as EnumDeclaration; +} + +export function createModuleBlock(statements: readonly Statement[]): ModuleBlock { + return new NodeObject(SyntaxKind.ModuleBlock, { + statements: createNodeArray(statements), + }) as unknown as ModuleBlock; +} + +export function createNotEmittedStatement(): NotEmittedStatement { + return new NodeObject(SyntaxKind.NotEmittedStatement, undefined) as unknown as NotEmittedStatement; +} + +export function createNotEmittedTypeElement(): NotEmittedTypeElement { + return new NodeObject(SyntaxKind.NotEmittedTypeElement, undefined) as unknown as NotEmittedTypeElement; +} + +export function createImportDeclaration(modifiers: readonly ModifierLike[] | undefined, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes): ImportDeclaration { + return new NodeObject(SyntaxKind.ImportDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + importClause, + moduleSpecifier, + attributes, + }) as unknown as ImportDeclaration; +} + +export function createExternalModuleReference(expression: Expression): ExternalModuleReference { + return new NodeObject(SyntaxKind.ExternalModuleReference, { + expression, + }) as unknown as ExternalModuleReference; +} + +export function createNamespaceImport(name: Identifier): NamespaceImport { + return new NodeObject(SyntaxKind.NamespaceImport, { + name, + }) as unknown as NamespaceImport; +} + +export function createNamedImports(elements: readonly ImportSpecifier[]): NamedImports { + return new NodeObject(SyntaxKind.NamedImports, { + elements: createNodeArray(elements), + }) as unknown as NamedImports; +} + +export function createExportAssignment(modifiers: readonly ModifierLike[] | undefined, isExportEquals: boolean = false, type: TypeNode, expression: Expression): ExportAssignment { + return new NodeObject(SyntaxKind.ExportAssignment, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + isExportEquals, + type, + expression, + }) as unknown as ExportAssignment; +} + +export function createNamespaceExportDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier): NamespaceExportDeclaration { + return new NodeObject(SyntaxKind.NamespaceExportDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + }) as unknown as NamespaceExportDeclaration; +} + +export function createNamespaceExport(name: ModuleExportName): NamespaceExport { + return new NodeObject(SyntaxKind.NamespaceExport, { + name, + }) as unknown as NamespaceExport; +} + +export function createNamedExports(elements: readonly ExportSpecifier[]): NamedExports { + return new NodeObject(SyntaxKind.NamedExports, { + elements: createNodeArray(elements), + }) as unknown as NamedExports; +} + +export function createExportSpecifier(isTypeOnly: boolean = false, propertyName: ModuleExportName | undefined, name: ModuleExportName): ExportSpecifier { + return new NodeObject(SyntaxKind.ExportSpecifier, { + isTypeOnly, + propertyName, + name, + }) as unknown as ExportSpecifier; +} + +export function createCallSignatureDeclaration(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): CallSignatureDeclaration { + return new NodeObject(SyntaxKind.CallSignature, { + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as CallSignatureDeclaration; +} + +export function createConstructSignatureDeclaration(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructSignatureDeclaration { + return new NodeObject(SyntaxKind.ConstructSignature, { + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as ConstructSignatureDeclaration; +} + +export function createConstructorDeclaration(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): ConstructorDeclaration { + return new NodeObject(SyntaxKind.Constructor, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as ConstructorDeclaration; +} + +export function createGetAccessorDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): GetAccessorDeclaration { + return new NodeObject(SyntaxKind.GetAccessor, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as GetAccessorDeclaration; +} + +export function createSetAccessorDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): SetAccessorDeclaration { + return new NodeObject(SyntaxKind.SetAccessor, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as SetAccessorDeclaration; +} + +export function createIndexSignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { + return new NodeObject(SyntaxKind.IndexSignature, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as IndexSignatureDeclaration; +} + +export function createMethodSignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): MethodSignatureDeclaration { + return new NodeObject(SyntaxKind.MethodSignature, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + postfixToken, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as MethodSignatureDeclaration; +} + +export function createMethodDeclaration(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): MethodDeclaration { + return new NodeObject(SyntaxKind.MethodDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + asteriskToken, + name, + postfixToken, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as MethodDeclaration; +} + +export function createPropertySignatureDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertySignatureDeclaration { + return new NodeObject(SyntaxKind.PropertySignature, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + postfixToken, + type, + initializer, + }) as unknown as PropertySignatureDeclaration; +} + +export function createPropertyDeclaration(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken?: QuestionToken | ExclamationToken, type?: TypeNode, initializer?: Expression): PropertyDeclaration { + return new NodeObject(SyntaxKind.PropertyDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + postfixToken, + type, + initializer, + }) as unknown as PropertyDeclaration; +} + +export function createSemicolonClassElement(): SemicolonClassElement { + return new NodeObject(SyntaxKind.SemicolonClassElement, undefined) as unknown as SemicolonClassElement; +} + +export function createClassStaticBlockDeclaration(modifiers: readonly ModifierLike[] | undefined, body: Block): ClassStaticBlockDeclaration { + return new NodeObject(SyntaxKind.ClassStaticBlockDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + body, + }) as unknown as ClassStaticBlockDeclaration; +} + +export function createOmittedExpression(): OmittedExpression { + return new NodeObject(SyntaxKind.OmittedExpression, undefined) as unknown as OmittedExpression; +} + +export function createKeywordExpression(kind: TKind): KeywordExpression { + return new NodeObject(kind, undefined) as unknown as KeywordExpression; +} + +export function createStringLiteral(text: string, tokenFlags: TokenFlags): StringLiteral { + return new NodeObject(SyntaxKind.StringLiteral, { + text, + tokenFlags, + }) as unknown as StringLiteral; +} + +export function createNumericLiteral(text: string, tokenFlags: TokenFlags): NumericLiteral { + return new NodeObject(SyntaxKind.NumericLiteral, { + text, + tokenFlags, + }) as unknown as NumericLiteral; +} + +export function createBigIntLiteral(text: string, tokenFlags: TokenFlags): BigIntLiteral { + return new NodeObject(SyntaxKind.BigIntLiteral, { + text, + tokenFlags, + }) as unknown as BigIntLiteral; +} + +export function createRegularExpressionLiteral(text: string, tokenFlags: TokenFlags): RegularExpressionLiteral { + return new NodeObject(SyntaxKind.RegularExpressionLiteral, { + text, + tokenFlags, + }) as unknown as RegularExpressionLiteral; +} + +export function createNoSubstitutionTemplateLiteral(text: string, templateFlags: TokenFlags): NoSubstitutionTemplateLiteral { + return new NodeObject(SyntaxKind.NoSubstitutionTemplateLiteral, { + text, + templateFlags, + }) as unknown as NoSubstitutionTemplateLiteral; +} + +export function createBinaryExpression(modifiers: readonly ModifierLike[] | undefined, left: Expression, type: TypeNode | undefined, operatorToken: BinaryOperatorToken, right: Expression): BinaryExpression { + return new NodeObject(SyntaxKind.BinaryExpression, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + left, + type, + operatorToken, + right, + }) as unknown as BinaryExpression; +} + +export function createPrefixUnaryExpression(operator: SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken, operand: Expression): PrefixUnaryExpression { + return new NodeObject(SyntaxKind.PrefixUnaryExpression, { + operator, + operand, + }) as unknown as PrefixUnaryExpression; +} + +export function createPostfixUnaryExpression(operand: Expression, operator: SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken): PostfixUnaryExpression { + return new NodeObject(SyntaxKind.PostfixUnaryExpression, { + operand, + operator, + }) as unknown as PostfixUnaryExpression; +} + +export function createYieldExpression(asteriskToken?: AsteriskToken, expression?: Expression): YieldExpression { + return new NodeObject(SyntaxKind.YieldExpression, { + asteriskToken, + expression, + }) as unknown as YieldExpression; +} + +export function createArrowFunction(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, equalsGreaterThanToken: EqualsGreaterThanToken, body: ConciseBody): ArrowFunction { + return new NodeObject(SyntaxKind.ArrowFunction, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + equalsGreaterThanToken, + body, + }) as unknown as ArrowFunction; +} + +export function createFunctionExpression(modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, body: FunctionBody): FunctionExpression { + return new NodeObject(SyntaxKind.FunctionExpression, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + asteriskToken, + name, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + body, + }) as unknown as FunctionExpression; +} + +export function createAsExpression(expression: Expression, type: TypeNode): AsExpression { + return new NodeObject(SyntaxKind.AsExpression, { + expression, + type, + }) as unknown as AsExpression; +} + +export function createSatisfiesExpression(expression: Expression, type: TypeNode): SatisfiesExpression { + return new NodeObject(SyntaxKind.SatisfiesExpression, { + expression, + type, + }) as unknown as SatisfiesExpression; +} + +export function createConditionalExpression(condition: Expression, questionToken: QuestionToken, whenTrue: Expression, colonToken: ColonToken, whenFalse: Expression): ConditionalExpression { + return new NodeObject(SyntaxKind.ConditionalExpression, { + condition, + questionToken, + whenTrue, + colonToken, + whenFalse, + }) as unknown as ConditionalExpression; +} + +export function createPropertyAccessExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, name: MemberName, flags: NodeFlags): PropertyAccessExpression { + const node = new NodeObject(SyntaxKind.PropertyAccessExpression, { + expression, + questionDotToken, + name, + }) as unknown as PropertyAccessExpression; + (node as any).flags = flags; + return node; +} + +export function createElementAccessExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, argumentExpression: Expression, flags: NodeFlags): ElementAccessExpression { + const node = new NodeObject(SyntaxKind.ElementAccessExpression, { + expression, + questionDotToken, + argumentExpression, + }) as unknown as ElementAccessExpression; + (node as any).flags = flags; + return node; +} + +export function createCallExpression(expression: Expression, questionDotToken: QuestionDotToken | undefined, typeArguments: readonly TypeNode[] | undefined, arguments_: readonly Expression[], flags: NodeFlags): CallExpression { + const node = new NodeObject(SyntaxKind.CallExpression, { + expression, + questionDotToken, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + arguments: createNodeArray(arguments_), + }) as unknown as CallExpression; + (node as any).flags = flags; + return node; +} + +export function createNewExpression(expression: Expression, typeArguments?: readonly TypeNode[], arguments_?: readonly Expression[]): NewExpression { + return new NodeObject(SyntaxKind.NewExpression, { + expression, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + arguments: arguments_ ? createNodeArray(arguments_) : undefined, + }) as unknown as NewExpression; +} + +export function createMetaProperty(keywordToken: SyntaxKind.ImportKeyword | SyntaxKind.NewKeyword, name: Identifier): MetaProperty { + return new NodeObject(SyntaxKind.MetaProperty, { + keywordToken, + name, + }) as unknown as MetaProperty; +} + +export function createNonNullExpression(expression: Expression, flags: NodeFlags): NonNullExpression { + const node = new NodeObject(SyntaxKind.NonNullExpression, { + expression, + }) as unknown as NonNullExpression; + (node as any).flags = flags; + return node; +} + +export function createSpreadElement(expression: Expression): SpreadElement { + return new NodeObject(SyntaxKind.SpreadElement, { + expression, + }) as unknown as SpreadElement; +} + +export function createTemplateExpression(head: TemplateHead, templateSpans: readonly TemplateSpan[]): TemplateExpression { + return new NodeObject(SyntaxKind.TemplateExpression, { + head, + templateSpans: createNodeArray(templateSpans), + }) as unknown as TemplateExpression; +} + +export function createTemplateSpan(expression: Expression, literal: TemplateMiddleOrTail): TemplateSpan { + return new NodeObject(SyntaxKind.TemplateSpan, { + expression, + literal, + }) as unknown as TemplateSpan; +} + +export function createTaggedTemplateExpression(tag: Expression, questionDotToken: QuestionDotToken, typeArguments: readonly TypeNode[] | undefined, template: TemplateLiteral, flags: NodeFlags): TaggedTemplateExpression { + const node = new NodeObject(SyntaxKind.TaggedTemplateExpression, { + tag, + questionDotToken, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + template, + }) as unknown as TaggedTemplateExpression; + (node as any).flags = flags; + return node; +} + +export function createParenthesizedExpression(expression: Expression): ParenthesizedExpression { + return new NodeObject(SyntaxKind.ParenthesizedExpression, { + expression, + }) as unknown as ParenthesizedExpression; +} + +export function createArrayLiteralExpression(elements: readonly Expression[], multiLine?: boolean): ArrayLiteralExpression { + return new NodeObject(SyntaxKind.ArrayLiteralExpression, { + elements: createNodeArray(elements), + multiLine, + }) as unknown as ArrayLiteralExpression; +} + +export function createObjectLiteralExpression(properties: readonly ObjectLiteralElementLike[], multiLine?: boolean): ObjectLiteralExpression { + return new NodeObject(SyntaxKind.ObjectLiteralExpression, { + properties: createNodeArray(properties), + multiLine, + }) as unknown as ObjectLiteralExpression; +} + +export function createSpreadAssignment(expression: Expression): SpreadAssignment { + return new NodeObject(SyntaxKind.SpreadAssignment, { + expression, + }) as unknown as SpreadAssignment; +} + +export function createPropertyAssignment(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertyAssignment { + return new NodeObject(SyntaxKind.PropertyAssignment, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + postfixToken, + type, + initializer, + }) as unknown as PropertyAssignment; +} + +export function createShorthandPropertyAssignment(modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, equalsToken?: EqualsToken, objectAssignmentInitializer?: Expression): ShorthandPropertyAssignment { + return new NodeObject(SyntaxKind.ShorthandPropertyAssignment, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + postfixToken, + type, + equalsToken, + objectAssignmentInitializer, + }) as unknown as ShorthandPropertyAssignment; +} + +export function createDeleteExpression(expression: Expression): DeleteExpression { + return new NodeObject(SyntaxKind.DeleteExpression, { + expression, + }) as unknown as DeleteExpression; +} + +export function createTypeOfExpression(expression: Expression): TypeOfExpression { + return new NodeObject(SyntaxKind.TypeOfExpression, { + expression, + }) as unknown as TypeOfExpression; +} + +export function createVoidExpression(expression: Expression): VoidExpression { + return new NodeObject(SyntaxKind.VoidExpression, { + expression, + }) as unknown as VoidExpression; +} + +export function createAwaitExpression(expression: Expression): AwaitExpression { + return new NodeObject(SyntaxKind.AwaitExpression, { + expression, + }) as unknown as AwaitExpression; +} + +export function createTypeAssertion(type: TypeNode, expression: Expression): TypeAssertion { + return new NodeObject(SyntaxKind.TypeAssertionExpression, { + type, + expression, + }) as unknown as TypeAssertion; +} + +export function createKeywordTypeNode(kind: TKind): KeywordTypeNode { + return new NodeObject(kind, undefined) as unknown as KeywordTypeNode; +} + +export function createUnionTypeNode(types: readonly TypeNode[]): UnionTypeNode { + return new NodeObject(SyntaxKind.UnionType, { + types: createNodeArray(types), + }) as unknown as UnionTypeNode; +} + +export function createIntersectionTypeNode(types: readonly TypeNode[]): IntersectionTypeNode { + return new NodeObject(SyntaxKind.IntersectionType, { + types: createNodeArray(types), + }) as unknown as IntersectionTypeNode; +} + +export function createConditionalTypeNode(checkType: TypeNode, extendsType: TypeNode, trueType: TypeNode, falseType: TypeNode): ConditionalTypeNode { + return new NodeObject(SyntaxKind.ConditionalType, { + checkType, + extendsType, + trueType, + falseType, + }) as unknown as ConditionalTypeNode; +} + +export function createTypeOperatorNode(operator: SyntaxKind.KeyOfKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.UniqueKeyword, type: TypeNode): TypeOperatorNode { + return new NodeObject(SyntaxKind.TypeOperator, { + operator, + type, + }) as unknown as TypeOperatorNode; +} + +export function createInferTypeNode(typeParameter: TypeParameterDeclaration): InferTypeNode { + return new NodeObject(SyntaxKind.InferType, { + typeParameter, + }) as unknown as InferTypeNode; +} + +export function createArrayTypeNode(elementType: TypeNode): ArrayTypeNode { + return new NodeObject(SyntaxKind.ArrayType, { + elementType, + }) as unknown as ArrayTypeNode; +} + +export function createIndexedAccessTypeNode(objectType: TypeNode, indexType: TypeNode): IndexedAccessTypeNode { + return new NodeObject(SyntaxKind.IndexedAccessType, { + objectType, + indexType, + }) as unknown as IndexedAccessTypeNode; +} + +export function createTypeReferenceNode(typeName: EntityName, typeArguments?: readonly TypeNode[]): TypeReferenceNode { + return new NodeObject(SyntaxKind.TypeReference, { + typeName, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + }) as unknown as TypeReferenceNode; +} + +export function createExpressionWithTypeArguments(expression: Expression, typeArguments?: readonly TypeNode[]): ExpressionWithTypeArguments { + return new NodeObject(SyntaxKind.ExpressionWithTypeArguments, { + expression, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + }) as unknown as ExpressionWithTypeArguments; +} + +export function createLiteralTypeNode(literal: Node): LiteralTypeNode { + return new NodeObject(SyntaxKind.LiteralType, { + literal, + }) as unknown as LiteralTypeNode; +} + +export function createThisTypeNode(): ThisTypeNode { + return new NodeObject(SyntaxKind.ThisType, undefined) as unknown as ThisTypeNode; +} + +export function createTypePredicateNode(assertsModifier: AssertsKeyword | undefined, parameterName: TypePredicateParameterName, type?: TypeNode): TypePredicateNode { + return new NodeObject(SyntaxKind.TypePredicate, { + assertsModifier, + parameterName, + type, + }) as unknown as TypePredicateNode; +} + +export function createImportAttribute(name: ImportAttributeName, value: Expression): ImportAttribute { + return new NodeObject(SyntaxKind.ImportAttribute, { + name, + value, + }) as unknown as ImportAttribute; +} + +export function createImportAttributes(token: SyntaxKind.WithKeyword | SyntaxKind.AssertKeyword, attributes: readonly ImportAttribute[], multiLine?: boolean): ImportAttributes { + return new NodeObject(SyntaxKind.ImportAttributes, { + token, + attributes: createNodeArray(attributes), + multiLine, + }) as unknown as ImportAttributes; +} + +export function createTypeQueryNode(exprName: EntityName, typeArguments?: readonly TypeNode[]): TypeQueryNode { + return new NodeObject(SyntaxKind.TypeQuery, { + exprName, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + }) as unknown as TypeQueryNode; +} + +export function createMappedTypeNode(readonlyToken: ReadonlyKeyword | PlusToken | MinusToken | undefined, typeParameter: TypeParameterDeclaration, nameType?: TypeNode, questionToken?: QuestionToken | PlusToken | MinusToken, type?: TypeNode, members?: readonly TypeElement[]): MappedTypeNode { + return new NodeObject(SyntaxKind.MappedType, { + readonlyToken, + typeParameter, + nameType, + questionToken, + type, + members: members ? createNodeArray(members) : undefined, + }) as unknown as MappedTypeNode; +} + +export function createTypeLiteralNode(members: readonly TypeElement[]): TypeLiteralNode { + return new NodeObject(SyntaxKind.TypeLiteral, { + members: createNodeArray(members), + }) as unknown as TypeLiteralNode; +} + +export function createTupleTypeNode(elements: readonly TypeNode[]): TupleTypeNode { + return new NodeObject(SyntaxKind.TupleType, { + elements: createNodeArray(elements), + }) as unknown as TupleTypeNode; +} + +export function createNamedTupleMember(dotDotDotToken: DotDotDotToken | undefined, name: Identifier, questionToken: QuestionToken | undefined, type: TypeNode): NamedTupleMember { + return new NodeObject(SyntaxKind.NamedTupleMember, { + dotDotDotToken, + name, + questionToken, + type, + }) as unknown as NamedTupleMember; +} + +export function createOptionalTypeNode(type: TypeNode): OptionalTypeNode { + return new NodeObject(SyntaxKind.OptionalType, { + type, + }) as unknown as OptionalTypeNode; +} + +export function createRestTypeNode(type: TypeNode): RestTypeNode { + return new NodeObject(SyntaxKind.RestType, { + type, + }) as unknown as RestTypeNode; +} + +export function createParenthesizedTypeNode(type: TypeNode): ParenthesizedTypeNode { + return new NodeObject(SyntaxKind.ParenthesizedType, { + type, + }) as unknown as ParenthesizedTypeNode; +} + +export function createFunctionTypeNode(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): FunctionTypeNode { + return new NodeObject(SyntaxKind.FunctionType, { + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as FunctionTypeNode; +} + +export function createConstructorTypeNode(modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructorTypeNode { + return new NodeObject(SyntaxKind.ConstructorType, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as ConstructorTypeNode; +} + +export function createTemplateHead(text: string, rawText: string, templateFlags: TokenFlags): TemplateHead { + return new NodeObject(SyntaxKind.TemplateHead, { + text, + rawText, + templateFlags, + }) as unknown as TemplateHead; +} + +export function createTemplateMiddle(text: string, rawText: string, templateFlags: TokenFlags): TemplateMiddle { + return new NodeObject(SyntaxKind.TemplateMiddle, { + text, + rawText, + templateFlags, + }) as unknown as TemplateMiddle; +} + +export function createTemplateTail(text: string, rawText: string, templateFlags: TokenFlags): TemplateTail { + return new NodeObject(SyntaxKind.TemplateTail, { + text, + rawText, + templateFlags, + }) as unknown as TemplateTail; +} + +export function createTemplateLiteralTypeNode(head: TemplateHead, templateSpans: readonly TemplateLiteralTypeSpan[]): TemplateLiteralTypeNode { + return new NodeObject(SyntaxKind.TemplateLiteralType, { + head, + templateSpans: createNodeArray(templateSpans), + }) as unknown as TemplateLiteralTypeNode; +} + +export function createTemplateLiteralTypeSpan(type: TypeNode, literal: TemplateMiddleOrTail): TemplateLiteralTypeSpan { + return new NodeObject(SyntaxKind.TemplateLiteralTypeSpan, { + type, + literal, + }) as unknown as TemplateLiteralTypeSpan; +} + +export function createSyntheticExpression(type: any, isSpread?: boolean, tupleNameSource?: Node): SyntheticExpression { + return new NodeObject(SyntaxKind.SyntheticExpression, { + type, + isSpread, + tupleNameSource, + }) as unknown as SyntheticExpression; +} + +export function createPartiallyEmittedExpression(expression: Expression): PartiallyEmittedExpression { + return new NodeObject(SyntaxKind.PartiallyEmittedExpression, { + expression, + }) as unknown as PartiallyEmittedExpression; +} + +export function createJsxElement(openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement { + return new NodeObject(SyntaxKind.JsxElement, { + openingElement, + children: createNodeArray(children), + closingElement, + }) as unknown as JsxElement; +} + +export function createJsxAttributes(properties: readonly JsxAttributeLike[]): JsxAttributes { + return new NodeObject(SyntaxKind.JsxAttributes, { + properties: createNodeArray(properties), + }) as unknown as JsxAttributes; +} + +export function createJsxNamespacedName(namespace: Identifier, name: Identifier): JsxNamespacedName { + return new NodeObject(SyntaxKind.JsxNamespacedName, { + namespace, + name, + }) as unknown as JsxNamespacedName; +} + +export function createJsxOpeningElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxOpeningElement { + return new NodeObject(SyntaxKind.JsxOpeningElement, { + tagName, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + attributes, + }) as unknown as JsxOpeningElement; +} + +export function createJsxSelfClosingElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement { + return new NodeObject(SyntaxKind.JsxSelfClosingElement, { + tagName, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + attributes, + }) as unknown as JsxSelfClosingElement; +} + +export function createJsxFragment(openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment { + return new NodeObject(SyntaxKind.JsxFragment, { + openingFragment, + children: createNodeArray(children), + closingFragment, + }) as unknown as JsxFragment; +} + +export function createJsxOpeningFragment(): JsxOpeningFragment { + return new NodeObject(SyntaxKind.JsxOpeningFragment, undefined) as unknown as JsxOpeningFragment; +} + +export function createJsxClosingFragment(): JsxClosingFragment { + return new NodeObject(SyntaxKind.JsxClosingFragment, undefined) as unknown as JsxClosingFragment; +} + +export function createJsxAttribute(name: JsxAttributeName, initializer?: JsxAttributeValue): JsxAttribute { + return new NodeObject(SyntaxKind.JsxAttribute, { + name, + initializer, + }) as unknown as JsxAttribute; +} + +export function createJsxSpreadAttribute(expression: Expression): JsxSpreadAttribute { + return new NodeObject(SyntaxKind.JsxSpreadAttribute, { + expression, + }) as unknown as JsxSpreadAttribute; +} + +export function createJsxClosingElement(tagName: JsxTagNameExpression): JsxClosingElement { + return new NodeObject(SyntaxKind.JsxClosingElement, { + tagName, + }) as unknown as JsxClosingElement; +} + +export function createJsxExpression(dotDotDotToken?: DotDotDotToken, expression?: Expression): JsxExpression { + return new NodeObject(SyntaxKind.JsxExpression, { + dotDotDotToken, + expression, + }) as unknown as JsxExpression; +} + +export function createJsxText(text: string, containsOnlyTriviaWhiteSpaces?: boolean): JsxText { + return new NodeObject(SyntaxKind.JsxText, { + text, + containsOnlyTriviaWhiteSpaces, + }) as unknown as JsxText; +} + +export function createSyntaxList(children: readonly Node[]): SyntaxList { + return new NodeObject(SyntaxKind.SyntaxList, { + children, + }) as unknown as SyntaxList; +} + +export function createJSDoc(comment: readonly JSDocComment[], tags?: readonly JSDocTag[]): JSDoc { + return new NodeObject(SyntaxKind.JSDoc, { + comment: createNodeArray(comment), + tags: tags ? createNodeArray(tags) : undefined, + }) as unknown as JSDoc; +} + +export function createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression { + return new NodeObject(SyntaxKind.JSDocTypeExpression, { + type, + }) as unknown as JSDocTypeExpression; +} + +export function createJSDocNonNullableType(type: TypeNode): JSDocNonNullableType { + return new NodeObject(SyntaxKind.JSDocNonNullableType, { + type, + }) as unknown as JSDocNonNullableType; +} + +export function createJSDocNullableType(type: TypeNode): JSDocNullableType { + return new NodeObject(SyntaxKind.JSDocNullableType, { + type, + }) as unknown as JSDocNullableType; +} + +export function createJSDocAllType(): JSDocAllType { + return new NodeObject(SyntaxKind.JSDocAllType, undefined) as unknown as JSDocAllType; +} + +export function createJSDocVariadicType(type: TypeNode): JSDocVariadicType { + return new NodeObject(SyntaxKind.JSDocVariadicType, { + type, + }) as unknown as JSDocVariadicType; +} + +export function createJSDocOptionalType(type: TypeNode): JSDocOptionalType { + return new NodeObject(SyntaxKind.JSDocOptionalType, { + type, + }) as unknown as JSDocOptionalType; +} + +export function createJSDocTypeTag(tagName: Identifier, typeExpression: Node, comment?: readonly JSDocComment[]): JSDocTypeTag { + return new NodeObject(SyntaxKind.JSDocTypeTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocTypeTag; +} + +export function createJSDocUnknownTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocUnknownTag { + return new NodeObject(SyntaxKind.JSDocUnknownTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocUnknownTag; +} + +export function createJSDocTemplateTag(tagName: Identifier, constraint: Node, typeParameters: readonly TypeParameterDeclaration[], comment?: readonly JSDocComment[]): JSDocTemplateTag { + return new NodeObject(SyntaxKind.JSDocTemplateTag, { + tagName, + constraint, + typeParameters: createNodeArray(typeParameters), + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocTemplateTag; +} + +export function createJSDocReturnTag(tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocReturnTag { + return new NodeObject(SyntaxKind.JSDocReturnTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocReturnTag; +} + +export function createJSDocPublicTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPublicTag { + return new NodeObject(SyntaxKind.JSDocPublicTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocPublicTag; +} + +export function createJSDocPrivateTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPrivateTag { + return new NodeObject(SyntaxKind.JSDocPrivateTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocPrivateTag; +} + +export function createJSDocProtectedTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocProtectedTag { + return new NodeObject(SyntaxKind.JSDocProtectedTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocProtectedTag; +} + +export function createJSDocReadonlyTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocReadonlyTag { + return new NodeObject(SyntaxKind.JSDocReadonlyTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocReadonlyTag; +} + +export function createJSDocOverrideTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocOverrideTag { + return new NodeObject(SyntaxKind.JSDocOverrideTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocOverrideTag; +} + +export function createJSDocDeprecatedTag(tagName: Identifier, comment?: readonly JSDocComment[]): JSDocDeprecatedTag { + return new NodeObject(SyntaxKind.JSDocDeprecatedTag, { + tagName, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocDeprecatedTag; +} + +export function createJSDocSeeTag(tagName: Identifier, nameExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSeeTag { + return new NodeObject(SyntaxKind.JSDocSeeTag, { + tagName, + nameExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocSeeTag; +} + +export function createJSDocImplementsTag(tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocImplementsTag { + return new NodeObject(SyntaxKind.JSDocImplementsTag, { + tagName, + className, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocImplementsTag; +} + +export function createJSDocAugmentsTag(tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocAugmentsTag { + return new NodeObject(SyntaxKind.JSDocAugmentsTag, { + tagName, + className, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocAugmentsTag; +} + +export function createJSDocSatisfiesTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSatisfiesTag { + return new NodeObject(SyntaxKind.JSDocSatisfiesTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocSatisfiesTag; +} + +export function createJSDocThrowsTag(tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocThrowsTag { + return new NodeObject(SyntaxKind.JSDocThrowsTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocThrowsTag; +} + +export function createJSDocThisTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocThisTag { + return new NodeObject(SyntaxKind.JSDocThisTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocThisTag; +} + +export function createJSDocImportTag(tagName: Identifier, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes, comment?: readonly JSDocComment[]): JSDocImportTag { + return new NodeObject(SyntaxKind.JSDocImportTag, { + tagName, + importClause, + moduleSpecifier, + attributes, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocImportTag; +} + +export function createJSDocCallbackTag(tagName: Identifier, typeExpression: TypeNode, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocCallbackTag { + return new NodeObject(SyntaxKind.JSDocCallbackTag, { + tagName, + typeExpression, + name, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocCallbackTag; +} + +export function createJSDocOverloadTag(tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocOverloadTag { + return new NodeObject(SyntaxKind.JSDocOverloadTag, { + tagName, + typeExpression, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocOverloadTag; +} + +export function createJSDocTypedefTag(tagName: Identifier, typeExpression?: Node, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocTypedefTag { + return new NodeObject(SyntaxKind.JSDocTypedefTag, { + tagName, + typeExpression, + name, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocTypedefTag; +} + +export function createJSDocSignature(typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): JSDocSignature { + return new NodeObject(SyntaxKind.JSDocSignature, { + typeParameters: typeParameters ? createNodeArray(typeParameters) : undefined, + parameters: createNodeArray(parameters), + type, + }) as unknown as JSDocSignature; +} + +export function createJSDocNameReference(name: EntityName): JSDocNameReference { + return new NodeObject(SyntaxKind.JSDocNameReference, { + name, + }) as unknown as JSDocNameReference; +} + +export function createModuleDeclaration(modifiers: readonly ModifierLike[] | undefined, keyword: SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword, name: ModuleName, attributes?: TypeLiteralNode, body?: ModuleBody): ModuleDeclaration { + return new NodeObject(SyntaxKind.ModuleDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + keyword, + name, + attributes, + body, + }) as unknown as ModuleDeclaration; +} + +export function createImportEqualsDeclaration(modifiers: readonly ModifierLike[] | undefined, isTypeOnly: boolean = false, name: Identifier, moduleReference: ModuleReference): ImportEqualsDeclaration { + return new NodeObject(SyntaxKind.ImportEqualsDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + isTypeOnly, + name, + moduleReference, + }) as unknown as ImportEqualsDeclaration; +} + +export function createExportDeclaration(modifiers?: readonly ModifierLike[], isTypeOnly?: boolean, exportClause?: NamedExportBindings, moduleSpecifier?: Expression, attributes?: ImportAttributes): ExportDeclaration { + return new NodeObject(SyntaxKind.ExportDeclaration, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + isTypeOnly, + exportClause, + moduleSpecifier, + attributes, + }) as unknown as ExportDeclaration; +} + +export function createImportTypeNode(isTypeOf: boolean = false, argument: TypeNode, attributes?: ImportAttributes, qualifier?: EntityName, typeArguments?: readonly TypeNode[]): ImportTypeNode { + return new NodeObject(SyntaxKind.ImportType, { + isTypeOf, + argument, + attributes, + qualifier, + typeArguments: typeArguments ? createNodeArray(typeArguments) : undefined, + }) as unknown as ImportTypeNode; +} + +export function createImportClause(phaseModifier?: ImportPhaseModifierSyntaxKind, name?: Identifier, namedBindings?: NamedImportBindings): ImportClause { + return new NodeObject(SyntaxKind.ImportClause, { + phaseModifier, + name, + namedBindings, + }) as unknown as ImportClause; +} + +export function createImportSpecifier(isTypeOnly: boolean = false, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier { + return new NodeObject(SyntaxKind.ImportSpecifier, { + isTypeOnly, + propertyName, + name, + }) as unknown as ImportSpecifier; +} + +export function createJSDocText(text: string): JSDocText { + return new NodeObject(SyntaxKind.JSDocText, { + text, + }) as unknown as JSDocText; +} + +export function createJSDocLink(name: EntityName | undefined, text: string): JSDocLink { + return new NodeObject(SyntaxKind.JSDocLink, { + name, + text, + }) as unknown as JSDocLink; +} + +export function createJSDocLinkPlain(name: EntityName | undefined, text: string): JSDocLinkPlain { + return new NodeObject(SyntaxKind.JSDocLinkPlain, { + name, + text, + }) as unknown as JSDocLinkPlain; +} + +export function createJSDocLinkCode(name: EntityName | undefined, text: string): JSDocLinkCode { + return new NodeObject(SyntaxKind.JSDocLinkCode, { + name, + text, + }) as unknown as JSDocLinkCode; +} + +export function createTypeParameterDeclaration(modifiers: readonly ModifierLike[] | undefined, name: Identifier, constraint?: TypeNode, expression?: Expression, defaultType?: TypeNode): TypeParameterDeclaration { + return new NodeObject(SyntaxKind.TypeParameter, { + modifiers: modifiers ? createNodeArray(modifiers) : undefined, + name, + constraint, + expression, + defaultType, + }) as unknown as TypeParameterDeclaration; +} + +export function createSyntheticReferenceExpression(expression: Expression, thisArg: Expression): SyntheticReferenceExpression { + return new NodeObject(SyntaxKind.SyntheticReferenceExpression, { + expression, + thisArg, + }) as unknown as SyntheticReferenceExpression; +} + +export function createJSDocTypeLiteral(jsdocPropertyTags?: readonly JSDocTag[], isArrayType?: boolean): JSDocTypeLiteral { + return new NodeObject(SyntaxKind.JSDocTypeLiteral, { + jsdocPropertyTags, + isArrayType, + }) as unknown as JSDocTypeLiteral; +} + +export function createForInStatement(awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForInStatement { + return new NodeObject(SyntaxKind.ForInStatement, { + awaitModifier, + initializer, + expression, + statement, + }) as unknown as ForInStatement; +} + +export function createForOfStatement(awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForOfStatement { + return new NodeObject(SyntaxKind.ForOfStatement, { + awaitModifier, + initializer, + expression, + statement, + }) as unknown as ForOfStatement; +} + +export function createCaseClause(expression: Expression, statements: readonly Statement[]): CaseClause { + return new NodeObject(SyntaxKind.CaseClause, { + expression, + statements: createNodeArray(statements), + }) as unknown as CaseClause; +} + +export function createDefaultClause(expression: Expression, statements: readonly Statement[]): DefaultClause { + return new NodeObject(SyntaxKind.DefaultClause, { + expression, + statements: createNodeArray(statements), + }) as unknown as DefaultClause; +} + +export function createObjectBindingPattern(elements: readonly BindingElement[]): ObjectBindingPattern { + return new NodeObject(SyntaxKind.ObjectBindingPattern, { + elements: createNodeArray(elements), + }) as unknown as ObjectBindingPattern; +} + +export function createArrayBindingPattern(elements: readonly BindingElement[]): ArrayBindingPattern { + return new NodeObject(SyntaxKind.ArrayBindingPattern, { + elements: createNodeArray(elements), + }) as unknown as ArrayBindingPattern; +} + +export function createJSDocParameterTag(tagName: Identifier, name: EntityName, isBracketed: boolean, typeExpression: TypeNode | undefined, isNameFirst: boolean, comment: readonly JSDocComment[] | undefined): JSDocParameterTag { + return new NodeObject(SyntaxKind.JSDocParameterTag, { + tagName, + name, + isBracketed, + typeExpression, + isNameFirst, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocParameterTag; +} + +export function createJSDocPropertyTag(tagName: Identifier, name: EntityName, isBracketed: boolean, typeExpression: TypeNode | undefined, isNameFirst: boolean, comment: readonly JSDocComment[] | undefined): JSDocPropertyTag { + return new NodeObject(SyntaxKind.JSDocPropertyTag, { + tagName, + name, + isBracketed, + typeExpression, + isNameFirst, + comment: comment ? createNodeArray(comment) : undefined, + }) as unknown as JSDocPropertyTag; +} + +export function updateQualifiedName(node: QualifiedName, left: EntityName, right: MemberName): QualifiedName { + return node.left !== left || node.right !== right ? createQualifiedName(left, right) : node; +} + +export function updateComputedPropertyName(node: ComputedPropertyName, expression: Expression): ComputedPropertyName { + return node.expression !== expression ? createComputedPropertyName(expression) : node; +} + +export function updateDecorator(node: Decorator, expression: LeftHandSideExpression): Decorator { + return node.expression !== expression ? createDecorator(expression) : node; +} + +export function updateIfStatement(node: IfStatement, expression: Expression, thenStatement: Statement, elseStatement?: Statement): IfStatement { + return node.expression !== expression || node.thenStatement !== thenStatement || node.elseStatement !== elseStatement ? createIfStatement(expression, thenStatement, elseStatement) : node; +} + +export function updateDoStatement(node: DoStatement, statement: Statement, expression: Expression): DoStatement { + return node.statement !== statement || node.expression !== expression ? createDoStatement(statement, expression) : node; +} + +export function updateWhileStatement(node: WhileStatement, expression: Expression, statement: Statement): WhileStatement { + return node.expression !== expression || node.statement !== statement ? createWhileStatement(expression, statement) : node; +} + +export function updateForStatement(node: ForStatement, initializer: ForInitializer | undefined, condition: Expression | undefined, incrementor: Expression | undefined, statement: Statement): ForStatement { + return node.initializer !== initializer || node.condition !== condition || node.incrementor !== incrementor || node.statement !== statement ? createForStatement(initializer, condition, incrementor, statement) : node; +} + +export function updateBreakStatement(node: BreakStatement, label?: Identifier): BreakStatement { + return node.label !== label ? createBreakStatement(label) : node; +} + +export function updateContinueStatement(node: ContinueStatement, label?: Identifier): ContinueStatement { + return node.label !== label ? createContinueStatement(label) : node; +} + +export function updateReturnStatement(node: ReturnStatement, expression?: Expression): ReturnStatement { + return node.expression !== expression ? createReturnStatement(expression) : node; +} + +export function updateWithStatement(node: WithStatement, expression: Expression, statement: Statement): WithStatement { + return node.expression !== expression || node.statement !== statement ? createWithStatement(expression, statement) : node; +} + +export function updateSwitchStatement(node: SwitchStatement, expression: Expression, caseBlock: CaseBlock): SwitchStatement { + return node.expression !== expression || node.caseBlock !== caseBlock ? createSwitchStatement(expression, caseBlock) : node; +} + +export function updateCaseBlock(node: CaseBlock, clauses: readonly CaseOrDefaultClause[]): CaseBlock { + return node.clauses !== clauses ? createCaseBlock(clauses) : node; +} + +export function updateThrowStatement(node: ThrowStatement, expression: Expression): ThrowStatement { + return node.expression !== expression ? createThrowStatement(expression) : node; +} + +export function updateTryStatement(node: TryStatement, tryBlock: Block, catchClause?: CatchClause, finallyBlock?: Block): TryStatement { + return node.tryBlock !== tryBlock || node.catchClause !== catchClause || node.finallyBlock !== finallyBlock ? createTryStatement(tryBlock, catchClause, finallyBlock) : node; +} + +export function updateCatchClause(node: CatchClause, variableDeclaration: VariableDeclaration | undefined, block: Block): CatchClause { + return node.variableDeclaration !== variableDeclaration || node.block !== block ? createCatchClause(variableDeclaration, block) : node; +} + +export function updateLabeledStatement(node: LabeledStatement, label: Identifier, statement: Statement): LabeledStatement { + return node.label !== label || node.statement !== statement ? createLabeledStatement(label, statement) : node; +} + +export function updateExpressionStatement(node: ExpressionStatement, expression: Expression): ExpressionStatement { + return node.expression !== expression ? createExpressionStatement(expression) : node; +} + +export function updateBlock(node: Block, statements: readonly Statement[]): Block { + return node.statements !== statements ? createBlock(statements, node.multiLine) : node; +} + +export function updateVariableStatement(node: VariableStatement, modifiers: readonly ModifierLike[] | undefined, declarationList: VariableDeclarationList): VariableStatement { + return node.modifiers !== modifiers || node.declarationList !== declarationList ? createVariableStatement(modifiers, declarationList) : node; +} + +export function updateVariableDeclaration(node: VariableDeclaration, name: BindingName, exclamationToken?: ExclamationToken, type?: TypeNode, initializer?: Expression): VariableDeclaration { + return node.name !== name || node.exclamationToken !== exclamationToken || node.type !== type || node.initializer !== initializer ? createVariableDeclaration(name, exclamationToken, type, initializer) : node; +} + +export function updateVariableDeclarationList(node: VariableDeclarationList, declarations: readonly VariableDeclaration[]): VariableDeclarationList { + return node.declarations !== declarations ? createVariableDeclarationList(declarations, node.flags) : node; +} + +export function updateParameterDeclaration(node: ParameterDeclaration, modifiers: readonly ModifierLike[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression): ParameterDeclaration { + return node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) : node; +} + +export function updateBindingElement(node: BindingElement, dotDotDotToken?: DotDotDotToken, propertyName?: PropertyName, name?: BindingName, initializer?: Expression): BindingElement { + return node.dotDotDotToken !== dotDotDotToken || node.propertyName !== propertyName || node.name !== name || node.initializer !== initializer ? createBindingElement(dotDotDotToken, propertyName, name, initializer) : node; +} + +export function updateMissingDeclaration(node: MissingDeclaration, modifiers?: readonly ModifierLike[]): MissingDeclaration { + return node.modifiers !== modifiers ? createMissingDeclaration(modifiers) : node; +} + +export function updateFunctionDeclaration(node: FunctionDeclaration, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): FunctionDeclaration { + return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; +} + +export function updateClassDeclaration(node: ClassDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; +} + +export function updateClassExpression(node: ClassExpression, modifiers: readonly ModifierLike[] | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly ClassElement[]): ClassExpression { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createClassExpression(modifiers, name, typeParameters, heritageClauses, members) : node; +} + +export function updateHeritageClause(node: HeritageClause, types: readonly HeritageClauseElement[]): HeritageClause { + return node.types !== types ? createHeritageClause(node.token, types) : node; +} + +export function updateInterfaceDeclaration(node: InterfaceDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, heritageClauses: readonly HeritageClause[] | undefined, members: readonly TypeElement[]): InterfaceDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) : node; +} + +export function updateTypeAliasDeclaration(node: TypeAliasDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, typeParameters: readonly TypeParameterDeclaration[] | undefined, type: TypeNode): TypeAliasDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.type !== type ? createTypeAliasDeclaration(modifiers, name, typeParameters, type) : node; +} + +export function updateEnumMember(node: EnumMember, name: PropertyName, initializer?: Expression): EnumMember { + return node.name !== name || node.initializer !== initializer ? createEnumMember(name, initializer) : node; +} + +export function updateEnumDeclaration(node: EnumDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, members: readonly EnumMember[]): EnumDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.members !== members ? createEnumDeclaration(modifiers, name, members) : node; +} + +export function updateModuleBlock(node: ModuleBlock, statements: readonly Statement[]): ModuleBlock { + return node.statements !== statements ? createModuleBlock(statements) : node; +} + +export function updateImportDeclaration(node: ImportDeclaration, modifiers: readonly ModifierLike[] | undefined, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes): ImportDeclaration { + return node.modifiers !== modifiers || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes) : node; +} + +export function updateExternalModuleReference(node: ExternalModuleReference, expression: Expression): ExternalModuleReference { + return node.expression !== expression ? createExternalModuleReference(expression) : node; +} + +export function updateNamespaceImport(node: NamespaceImport, name: Identifier): NamespaceImport { + return node.name !== name ? createNamespaceImport(name) : node; +} + +export function updateNamedImports(node: NamedImports, elements: readonly ImportSpecifier[]): NamedImports { + return node.elements !== elements ? createNamedImports(elements) : node; +} + +export function updateExportAssignment(node: ExportAssignment, modifiers: readonly ModifierLike[] | undefined, type: TypeNode, expression: Expression): ExportAssignment { + return node.modifiers !== modifiers || node.type !== type || node.expression !== expression ? createExportAssignment(modifiers, node.isExportEquals, type, expression) : node; +} + +export function updateNamespaceExportDeclaration(node: NamespaceExportDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier): NamespaceExportDeclaration { + return node.modifiers !== modifiers || node.name !== name ? createNamespaceExportDeclaration(modifiers, name) : node; +} + +export function updateNamespaceExport(node: NamespaceExport, name: ModuleExportName): NamespaceExport { + return node.name !== name ? createNamespaceExport(name) : node; +} + +export function updateNamedExports(node: NamedExports, elements: readonly ExportSpecifier[]): NamedExports { + return node.elements !== elements ? createNamedExports(elements) : node; +} + +export function updateExportSpecifier(node: ExportSpecifier, propertyName: ModuleExportName | undefined, name: ModuleExportName): ExportSpecifier { + return node.propertyName !== propertyName || node.name !== name ? createExportSpecifier(node.isTypeOnly, propertyName, name) : node; +} + +export function updateCallSignatureDeclaration(node: CallSignatureDeclaration, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): CallSignatureDeclaration { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createCallSignatureDeclaration(typeParameters, parameters, type) : node; +} + +export function updateConstructSignatureDeclaration(node: ConstructSignatureDeclaration, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructSignatureDeclaration { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructSignatureDeclaration(typeParameters, parameters, type) : node; +} + +export function updateConstructorDeclaration(node: ConstructorDeclaration, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): ConstructorDeclaration { + return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createConstructorDeclaration(modifiers, typeParameters, parameters, type, body) : node; +} + +export function updateGetAccessorDeclaration(node: GetAccessorDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): GetAccessorDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createGetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; +} + +export function updateSetAccessorDeclaration(node: SetAccessorDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): SetAccessorDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createSetAccessorDeclaration(modifiers, name, typeParameters, parameters, type, body) : node; +} + +export function updateIndexSignatureDeclaration(node: IndexSignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { + return node.modifiers !== modifiers || node.parameters !== parameters || node.type !== type ? createIndexSignatureDeclaration(modifiers, parameters, type) : node; +} + +export function updateMethodSignatureDeclaration(node: MethodSignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): MethodSignatureDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createMethodSignatureDeclaration(modifiers, name, postfixToken, typeParameters, parameters, type) : node; +} + +export function updateMethodDeclaration(node: MethodDeclaration, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode, body?: FunctionBody): MethodDeclaration { + return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.postfixToken !== postfixToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createMethodDeclaration(modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, type, body) : node; +} + +export function updatePropertySignatureDeclaration(node: PropertySignatureDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertySignatureDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertySignatureDeclaration(modifiers, name, postfixToken, type, initializer) : node; +} + +export function updatePropertyDeclaration(node: PropertyDeclaration, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken?: QuestionToken | ExclamationToken, type?: TypeNode, initializer?: Expression): PropertyDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyDeclaration(modifiers, name, postfixToken, type, initializer) : node; +} + +export function updateClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration, modifiers: readonly ModifierLike[] | undefined, body: Block): ClassStaticBlockDeclaration { + return node.modifiers !== modifiers || node.body !== body ? createClassStaticBlockDeclaration(modifiers, body) : node; +} + +export function updateBinaryExpression(node: BinaryExpression, modifiers: readonly ModifierLike[] | undefined, left: Expression, type: TypeNode | undefined, operatorToken: BinaryOperatorToken, right: Expression): BinaryExpression { + return node.modifiers !== modifiers || node.left !== left || node.type !== type || node.operatorToken !== operatorToken || node.right !== right ? createBinaryExpression(modifiers, left, type, operatorToken, right) : node; +} + +export function updatePrefixUnaryExpression(node: PrefixUnaryExpression, operand: Expression): PrefixUnaryExpression { + return node.operand !== operand ? createPrefixUnaryExpression(node.operator, operand) : node; +} + +export function updatePostfixUnaryExpression(node: PostfixUnaryExpression, operand: Expression): PostfixUnaryExpression { + return node.operand !== operand ? createPostfixUnaryExpression(operand, node.operator) : node; +} + +export function updateYieldExpression(node: YieldExpression, asteriskToken?: AsteriskToken, expression?: Expression): YieldExpression { + return node.asteriskToken !== asteriskToken || node.expression !== expression ? createYieldExpression(asteriskToken, expression) : node; +} + +export function updateArrowFunction(node: ArrowFunction, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, equalsGreaterThanToken: EqualsGreaterThanToken, body: ConciseBody): ArrowFunction { + return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.equalsGreaterThanToken !== equalsGreaterThanToken || node.body !== body ? createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) : node; +} + +export function updateFunctionExpression(node: FunctionExpression, modifiers: readonly ModifierLike[] | undefined, asteriskToken: AsteriskToken | undefined, name: Identifier | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode | undefined, body: FunctionBody): FunctionExpression { + return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) : node; +} + +export function updateAsExpression(node: AsExpression, expression: Expression, type: TypeNode): AsExpression { + return node.expression !== expression || node.type !== type ? createAsExpression(expression, type) : node; +} + +export function updateSatisfiesExpression(node: SatisfiesExpression, expression: Expression, type: TypeNode): SatisfiesExpression { + return node.expression !== expression || node.type !== type ? createSatisfiesExpression(expression, type) : node; +} + +export function updateConditionalExpression(node: ConditionalExpression, condition: Expression, questionToken: QuestionToken, whenTrue: Expression, colonToken: ColonToken, whenFalse: Expression): ConditionalExpression { + return node.condition !== condition || node.questionToken !== questionToken || node.whenTrue !== whenTrue || node.colonToken !== colonToken || node.whenFalse !== whenFalse ? createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) : node; +} + +export function updatePropertyAccessExpression(node: PropertyAccessExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, name: MemberName): PropertyAccessExpression { + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.name !== name ? createPropertyAccessExpression(expression, questionDotToken, name, node.flags) : node; +} + +export function updateElementAccessExpression(node: ElementAccessExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, argumentExpression: Expression): ElementAccessExpression { + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.argumentExpression !== argumentExpression ? createElementAccessExpression(expression, questionDotToken, argumentExpression, node.flags) : node; +} + +export function updateCallExpression(node: CallExpression, expression: Expression, questionDotToken: QuestionDotToken | undefined, typeArguments: readonly TypeNode[] | undefined, arguments_: readonly Expression[]): CallExpression { + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createCallExpression(expression, questionDotToken, typeArguments, arguments_, node.flags) : node; +} + +export function updateNewExpression(node: NewExpression, expression: Expression, typeArguments?: readonly TypeNode[], arguments_?: readonly Expression[]): NewExpression { + return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== arguments_ ? createNewExpression(expression, typeArguments, arguments_) : node; +} + +export function updateMetaProperty(node: MetaProperty, name: Identifier): MetaProperty { + return node.name !== name ? createMetaProperty(node.keywordToken, name) : node; +} + +export function updateNonNullExpression(node: NonNullExpression, expression: Expression): NonNullExpression { + return node.expression !== expression ? createNonNullExpression(expression, node.flags) : node; +} + +export function updateSpreadElement(node: SpreadElement, expression: Expression): SpreadElement { + return node.expression !== expression ? createSpreadElement(expression) : node; +} + +export function updateTemplateExpression(node: TemplateExpression, head: TemplateHead, templateSpans: readonly TemplateSpan[]): TemplateExpression { + return node.head !== head || node.templateSpans !== templateSpans ? createTemplateExpression(head, templateSpans) : node; +} + +export function updateTemplateSpan(node: TemplateSpan, expression: Expression, literal: TemplateMiddleOrTail): TemplateSpan { + return node.expression !== expression || node.literal !== literal ? createTemplateSpan(expression, literal) : node; +} + +export function updateTaggedTemplateExpression(node: TaggedTemplateExpression, tag: Expression, questionDotToken: QuestionDotToken, typeArguments: readonly TypeNode[] | undefined, template: TemplateLiteral): TaggedTemplateExpression { + return node.tag !== tag || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.template !== template ? createTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, node.flags) : node; +} + +export function updateParenthesizedExpression(node: ParenthesizedExpression, expression: Expression): ParenthesizedExpression { + return node.expression !== expression ? createParenthesizedExpression(expression) : node; +} + +export function updateArrayLiteralExpression(node: ArrayLiteralExpression, elements: readonly Expression[]): ArrayLiteralExpression { + return node.elements !== elements ? createArrayLiteralExpression(elements, node.multiLine) : node; +} + +export function updateObjectLiteralExpression(node: ObjectLiteralExpression, properties: readonly ObjectLiteralElementLike[]): ObjectLiteralExpression { + return node.properties !== properties ? createObjectLiteralExpression(properties, node.multiLine) : node; +} + +export function updateSpreadAssignment(node: SpreadAssignment, expression: Expression): SpreadAssignment { + return node.expression !== expression ? createSpreadAssignment(expression) : node; +} + +export function updatePropertyAssignment(node: PropertyAssignment, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, initializer: Expression): PropertyAssignment { + return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.initializer !== initializer ? createPropertyAssignment(modifiers, name, postfixToken, type, initializer) : node; +} + +export function updateShorthandPropertyAssignment(node: ShorthandPropertyAssignment, modifiers: readonly ModifierLike[] | undefined, name: PropertyName, postfixToken: QuestionToken | ExclamationToken | undefined, type: TypeNode, equalsToken?: EqualsToken, objectAssignmentInitializer?: Expression): ShorthandPropertyAssignment { + return node.modifiers !== modifiers || node.name !== name || node.postfixToken !== postfixToken || node.type !== type || node.equalsToken !== equalsToken || node.objectAssignmentInitializer !== objectAssignmentInitializer ? createShorthandPropertyAssignment(modifiers, name, postfixToken, type, equalsToken, objectAssignmentInitializer) : node; +} + +export function updateDeleteExpression(node: DeleteExpression, expression: Expression): DeleteExpression { + return node.expression !== expression ? createDeleteExpression(expression) : node; +} + +export function updateTypeOfExpression(node: TypeOfExpression, expression: Expression): TypeOfExpression { + return node.expression !== expression ? createTypeOfExpression(expression) : node; +} + +export function updateVoidExpression(node: VoidExpression, expression: Expression): VoidExpression { + return node.expression !== expression ? createVoidExpression(expression) : node; +} + +export function updateAwaitExpression(node: AwaitExpression, expression: Expression): AwaitExpression { + return node.expression !== expression ? createAwaitExpression(expression) : node; +} + +export function updateTypeAssertion(node: TypeAssertion, type: TypeNode, expression: Expression): TypeAssertion { + return node.type !== type || node.expression !== expression ? createTypeAssertion(type, expression) : node; +} + +export function updateUnionTypeNode(node: UnionTypeNode, types: readonly TypeNode[]): UnionTypeNode { + return node.types !== types ? createUnionTypeNode(types) : node; +} + +export function updateIntersectionTypeNode(node: IntersectionTypeNode, types: readonly TypeNode[]): IntersectionTypeNode { + return node.types !== types ? createIntersectionTypeNode(types) : node; +} + +export function updateConditionalTypeNode(node: ConditionalTypeNode, checkType: TypeNode, extendsType: TypeNode, trueType: TypeNode, falseType: TypeNode): ConditionalTypeNode { + return node.checkType !== checkType || node.extendsType !== extendsType || node.trueType !== trueType || node.falseType !== falseType ? createConditionalTypeNode(checkType, extendsType, trueType, falseType) : node; +} + +export function updateTypeOperatorNode(node: TypeOperatorNode, type: TypeNode): TypeOperatorNode { + return node.type !== type ? createTypeOperatorNode(node.operator, type) : node; +} + +export function updateInferTypeNode(node: InferTypeNode, typeParameter: TypeParameterDeclaration): InferTypeNode { + return node.typeParameter !== typeParameter ? createInferTypeNode(typeParameter) : node; +} + +export function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode { + return node.elementType !== elementType ? createArrayTypeNode(elementType) : node; +} + +export function updateIndexedAccessTypeNode(node: IndexedAccessTypeNode, objectType: TypeNode, indexType: TypeNode): IndexedAccessTypeNode { + return node.objectType !== objectType || node.indexType !== indexType ? createIndexedAccessTypeNode(objectType, indexType) : node; +} + +export function updateTypeReferenceNode(node: TypeReferenceNode, typeName: EntityName, typeArguments?: readonly TypeNode[]): TypeReferenceNode { + return node.typeName !== typeName || node.typeArguments !== typeArguments ? createTypeReferenceNode(typeName, typeArguments) : node; +} + +export function updateExpressionWithTypeArguments(node: ExpressionWithTypeArguments, expression: Expression, typeArguments?: readonly TypeNode[]): ExpressionWithTypeArguments { + return node.expression !== expression || node.typeArguments !== typeArguments ? createExpressionWithTypeArguments(expression, typeArguments) : node; +} + +export function updateLiteralTypeNode(node: LiteralTypeNode, literal: Node): LiteralTypeNode { + return node.literal !== literal ? createLiteralTypeNode(literal) : node; +} + +export function updateTypePredicateNode(node: TypePredicateNode, assertsModifier: AssertsKeyword | undefined, parameterName: TypePredicateParameterName, type?: TypeNode): TypePredicateNode { + return node.assertsModifier !== assertsModifier || node.parameterName !== parameterName || node.type !== type ? createTypePredicateNode(assertsModifier, parameterName, type) : node; +} + +export function updateImportAttribute(node: ImportAttribute, name: ImportAttributeName, value: Expression): ImportAttribute { + return node.name !== name || node.value !== value ? createImportAttribute(name, value) : node; +} + +export function updateImportAttributes(node: ImportAttributes, attributes: readonly ImportAttribute[]): ImportAttributes { + return node.attributes !== attributes ? createImportAttributes(node.token, attributes, node.multiLine) : node; +} + +export function updateTypeQueryNode(node: TypeQueryNode, exprName: EntityName, typeArguments?: readonly TypeNode[]): TypeQueryNode { + return node.exprName !== exprName || node.typeArguments !== typeArguments ? createTypeQueryNode(exprName, typeArguments) : node; +} + +export function updateMappedTypeNode(node: MappedTypeNode, readonlyToken: ReadonlyKeyword | PlusToken | MinusToken | undefined, typeParameter: TypeParameterDeclaration, nameType?: TypeNode, questionToken?: QuestionToken | PlusToken | MinusToken, type?: TypeNode, members?: readonly TypeElement[]): MappedTypeNode { + return node.readonlyToken !== readonlyToken || node.typeParameter !== typeParameter || node.nameType !== nameType || node.questionToken !== questionToken || node.type !== type || node.members !== members ? createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) : node; +} + +export function updateTypeLiteralNode(node: TypeLiteralNode, members: readonly TypeElement[]): TypeLiteralNode { + return node.members !== members ? createTypeLiteralNode(members) : node; +} + +export function updateTupleTypeNode(node: TupleTypeNode, elements: readonly TypeNode[]): TupleTypeNode { + return node.elements !== elements ? createTupleTypeNode(elements) : node; +} + +export function updateNamedTupleMember(node: NamedTupleMember, dotDotDotToken: DotDotDotToken | undefined, name: Identifier, questionToken: QuestionToken | undefined, type: TypeNode): NamedTupleMember { + return node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type ? createNamedTupleMember(dotDotDotToken, name, questionToken, type) : node; +} + +export function updateOptionalTypeNode(node: OptionalTypeNode, type: TypeNode): OptionalTypeNode { + return node.type !== type ? createOptionalTypeNode(type) : node; +} + +export function updateRestTypeNode(node: RestTypeNode, type: TypeNode): RestTypeNode { + return node.type !== type ? createRestTypeNode(type) : node; +} + +export function updateParenthesizedTypeNode(node: ParenthesizedTypeNode, type: TypeNode): ParenthesizedTypeNode { + return node.type !== type ? createParenthesizedTypeNode(type) : node; +} + +export function updateFunctionTypeNode(node: FunctionTypeNode, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): FunctionTypeNode { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createFunctionTypeNode(typeParameters, parameters, type) : node; +} + +export function updateConstructorTypeNode(node: ConstructorTypeNode, modifiers: readonly ModifierLike[] | undefined, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): ConstructorTypeNode { + return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createConstructorTypeNode(modifiers, typeParameters, parameters, type) : node; +} + +export function updateTemplateLiteralTypeNode(node: TemplateLiteralTypeNode, head: TemplateHead, templateSpans: readonly TemplateLiteralTypeSpan[]): TemplateLiteralTypeNode { + return node.head !== head || node.templateSpans !== templateSpans ? createTemplateLiteralTypeNode(head, templateSpans) : node; +} + +export function updateTemplateLiteralTypeSpan(node: TemplateLiteralTypeSpan, type: TypeNode, literal: TemplateMiddleOrTail): TemplateLiteralTypeSpan { + return node.type !== type || node.literal !== literal ? createTemplateLiteralTypeSpan(type, literal) : node; +} + +export function updateSyntheticExpression(node: SyntheticExpression, tupleNameSource?: Node): SyntheticExpression { + return node.tupleNameSource !== tupleNameSource ? createSyntheticExpression(node.type, node.isSpread, tupleNameSource) : node; +} + +export function updatePartiallyEmittedExpression(node: PartiallyEmittedExpression, expression: Expression): PartiallyEmittedExpression { + return node.expression !== expression ? createPartiallyEmittedExpression(expression) : node; +} + +export function updateJsxElement(node: JsxElement, openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement { + return node.openingElement !== openingElement || node.children !== children || node.closingElement !== closingElement ? createJsxElement(openingElement, children, closingElement) : node; +} + +export function updateJsxAttributes(node: JsxAttributes, properties: readonly JsxAttributeLike[]): JsxAttributes { + return node.properties !== properties ? createJsxAttributes(properties) : node; +} + +export function updateJsxNamespacedName(node: JsxNamespacedName, namespace: Identifier, name: Identifier): JsxNamespacedName { + return node.namespace !== namespace || node.name !== name ? createJsxNamespacedName(namespace, name) : node; +} + +export function updateJsxOpeningElement(node: JsxOpeningElement, tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxOpeningElement { + return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxOpeningElement(tagName, typeArguments, attributes) : node; +} + +export function updateJsxSelfClosingElement(node: JsxSelfClosingElement, tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement { + return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? createJsxSelfClosingElement(tagName, typeArguments, attributes) : node; +} + +export function updateJsxFragment(node: JsxFragment, openingFragment: JsxOpeningFragment, children: readonly JsxChild[], closingFragment: JsxClosingFragment): JsxFragment { + return node.openingFragment !== openingFragment || node.children !== children || node.closingFragment !== closingFragment ? createJsxFragment(openingFragment, children, closingFragment) : node; +} + +export function updateJsxAttribute(node: JsxAttribute, name: JsxAttributeName, initializer?: JsxAttributeValue): JsxAttribute { + return node.name !== name || node.initializer !== initializer ? createJsxAttribute(name, initializer) : node; +} + +export function updateJsxSpreadAttribute(node: JsxSpreadAttribute, expression: Expression): JsxSpreadAttribute { + return node.expression !== expression ? createJsxSpreadAttribute(expression) : node; +} + +export function updateJsxClosingElement(node: JsxClosingElement, tagName: JsxTagNameExpression): JsxClosingElement { + return node.tagName !== tagName ? createJsxClosingElement(tagName) : node; +} + +export function updateJsxExpression(node: JsxExpression, dotDotDotToken?: DotDotDotToken, expression?: Expression): JsxExpression { + return node.dotDotDotToken !== dotDotDotToken || node.expression !== expression ? createJsxExpression(dotDotDotToken, expression) : node; +} + +export function updateSyntaxList(node: SyntaxList, children: readonly Node[]): SyntaxList { + return node.children !== children ? createSyntaxList(children) : node; +} + +export function updateJSDoc(node: JSDoc, comment: readonly JSDocComment[], tags?: readonly JSDocTag[]): JSDoc { + return node.comment !== comment || node.tags !== tags ? createJSDoc(comment, tags) : node; +} + +export function updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression { + return node.type !== type ? createJSDocTypeExpression(type) : node; +} + +export function updateJSDocNonNullableType(node: JSDocNonNullableType, type: TypeNode): JSDocNonNullableType { + return node.type !== type ? createJSDocNonNullableType(type) : node; +} + +export function updateJSDocNullableType(node: JSDocNullableType, type: TypeNode): JSDocNullableType { + return node.type !== type ? createJSDocNullableType(type) : node; +} + +export function updateJSDocVariadicType(node: JSDocVariadicType, type: TypeNode): JSDocVariadicType { + return node.type !== type ? createJSDocVariadicType(type) : node; +} + +export function updateJSDocOptionalType(node: JSDocOptionalType, type: TypeNode): JSDocOptionalType { + return node.type !== type ? createJSDocOptionalType(type) : node; +} + +export function updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier, typeExpression: Node, comment?: readonly JSDocComment[]): JSDocTypeTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocTypeTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocUnknownTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocUnknownTag(tagName, comment) : node; +} + +export function updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier, constraint: Node, typeParameters: readonly TypeParameterDeclaration[], comment?: readonly JSDocComment[]): JSDocTemplateTag { + return node.tagName !== tagName || node.constraint !== constraint || node.typeParameters !== typeParameters || node.comment !== comment ? createJSDocTemplateTag(tagName, constraint, typeParameters, comment) : node; +} + +export function updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocReturnTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocReturnTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPublicTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocPublicTag(tagName, comment) : node; +} + +export function updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocPrivateTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocPrivateTag(tagName, comment) : node; +} + +export function updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocProtectedTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocProtectedTag(tagName, comment) : node; +} + +export function updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocReadonlyTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocReadonlyTag(tagName, comment) : node; +} + +export function updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocOverrideTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocOverrideTag(tagName, comment) : node; +} + +export function updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: readonly JSDocComment[]): JSDocDeprecatedTag { + return node.tagName !== tagName || node.comment !== comment ? createJSDocDeprecatedTag(tagName, comment) : node; +} + +export function updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier, nameExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSeeTag { + return node.tagName !== tagName || node.nameExpression !== nameExpression || node.comment !== comment ? createJSDocSeeTag(tagName, nameExpression, comment) : node; +} + +export function updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocImplementsTag { + return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocImplementsTag(tagName, className, comment) : node; +} + +export function updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier, className: ExpressionWithTypeArguments, comment?: readonly JSDocComment[]): JSDocAugmentsTag { + return node.tagName !== tagName || node.className !== className || node.comment !== comment ? createJSDocAugmentsTag(tagName, className, comment) : node; +} + +export function updateJSDocSatisfiesTag(node: JSDocSatisfiesTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocSatisfiesTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocSatisfiesTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocThrowsTag(node: JSDocThrowsTag, tagName: Identifier, typeExpression?: TypeNode, comment?: readonly JSDocComment[]): JSDocThrowsTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThrowsTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocThisTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocThisTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocImportTag(node: JSDocImportTag, tagName: Identifier, importClause: ImportClause | undefined, moduleSpecifier: Expression, attributes?: ImportAttributes, comment?: readonly JSDocComment[]): JSDocImportTag { + return node.tagName !== tagName || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes || node.comment !== comment ? createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) : node; +} + +export function updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier, typeExpression: TypeNode, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocCallbackTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocCallbackTag(tagName, typeExpression, name, comment) : node; +} + +export function updateJSDocOverloadTag(node: JSDocOverloadTag, tagName: Identifier, typeExpression: TypeNode, comment?: readonly JSDocComment[]): JSDocOverloadTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocOverloadTag(tagName, typeExpression, comment) : node; +} + +export function updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier, typeExpression?: Node, name?: JSDocFullName, comment?: readonly JSDocComment[]): JSDocTypedefTag { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.name !== name || node.comment !== comment ? createJSDocTypedefTag(tagName, typeExpression, name, comment) : node; +} + +export function updateJSDocSignature(node: JSDocSignature, typeParameters: readonly TypeParameterDeclaration[] | undefined, parameters: readonly ParameterDeclaration[], type?: TypeNode): JSDocSignature { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? createJSDocSignature(typeParameters, parameters, type) : node; +} + +export function updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference { + return node.name !== name ? createJSDocNameReference(name) : node; +} + +export function updateModuleDeclaration(node: ModuleDeclaration, modifiers: readonly ModifierLike[] | undefined, name: ModuleName, attributes?: TypeLiteralNode, body?: ModuleBody): ModuleDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.attributes !== attributes || node.body !== body ? createModuleDeclaration(modifiers, node.keyword, name, attributes, body) : node; +} + +export function updateImportEqualsDeclaration(node: ImportEqualsDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, moduleReference: ModuleReference): ImportEqualsDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.moduleReference !== moduleReference ? createImportEqualsDeclaration(modifiers, node.isTypeOnly, name, moduleReference) : node; +} + +export function updateExportDeclaration(node: ExportDeclaration, modifiers?: readonly ModifierLike[], exportClause?: NamedExportBindings, moduleSpecifier?: Expression, attributes?: ImportAttributes): ExportDeclaration { + return node.modifiers !== modifiers || node.exportClause !== exportClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? createExportDeclaration(modifiers, node.isTypeOnly, exportClause, moduleSpecifier, attributes) : node; +} + +export function updateImportTypeNode(node: ImportTypeNode, argument: TypeNode, attributes?: ImportAttributes, qualifier?: EntityName, typeArguments?: readonly TypeNode[]): ImportTypeNode { + return node.argument !== argument || node.attributes !== attributes || node.qualifier !== qualifier || node.typeArguments !== typeArguments ? createImportTypeNode(node.isTypeOf, argument, attributes, qualifier, typeArguments) : node; +} + +export function updateImportClause(node: ImportClause, name?: Identifier, namedBindings?: NamedImportBindings): ImportClause { + return node.name !== name || node.namedBindings !== namedBindings ? createImportClause(node.phaseModifier, name, namedBindings) : node; +} + +export function updateImportSpecifier(node: ImportSpecifier, propertyName: ModuleExportName | undefined, name: Identifier): ImportSpecifier { + return node.propertyName !== propertyName || node.name !== name ? createImportSpecifier(node.isTypeOnly, propertyName, name) : node; +} + +export function updateJSDocLink(node: JSDocLink, name?: EntityName): JSDocLink { + return node.name !== name ? createJSDocLink(name, node.text) : node; +} + +export function updateJSDocLinkPlain(node: JSDocLinkPlain, name?: EntityName): JSDocLinkPlain { + return node.name !== name ? createJSDocLinkPlain(name, node.text) : node; +} + +export function updateJSDocLinkCode(node: JSDocLinkCode, name?: EntityName): JSDocLinkCode { + return node.name !== name ? createJSDocLinkCode(name, node.text) : node; +} + +export function updateTypeParameterDeclaration(node: TypeParameterDeclaration, modifiers: readonly ModifierLike[] | undefined, name: Identifier, constraint?: TypeNode, expression?: Expression, defaultType?: TypeNode): TypeParameterDeclaration { + return node.modifiers !== modifiers || node.name !== name || node.constraint !== constraint || node.expression !== expression || node.defaultType !== defaultType ? createTypeParameterDeclaration(modifiers, name, constraint, expression, defaultType) : node; +} + +export function updateSyntheticReferenceExpression(node: SyntheticReferenceExpression, expression: Expression, thisArg: Expression): SyntheticReferenceExpression { + return node.expression !== expression || node.thisArg !== thisArg ? createSyntheticReferenceExpression(expression, thisArg) : node; +} + +export function updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsdocPropertyTags?: readonly JSDocTag[]): JSDocTypeLiteral { + return node.jsdocPropertyTags !== jsdocPropertyTags ? createJSDocTypeLiteral(jsdocPropertyTags, node.isArrayType) : node; +} + +export function updateForInStatement(node: ForInStatement, awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForInStatement { + return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForInStatement(awaitModifier, initializer, expression, statement) : node; +} + +export function updateForOfStatement(node: ForOfStatement, awaitModifier: AwaitKeyword | undefined, initializer: ForInitializer, expression: Expression, statement: Statement): ForOfStatement { + return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? createForOfStatement(awaitModifier, initializer, expression, statement) : node; +} + +export function updateCaseClause(node: CaseClause, expression: Expression, statements: readonly Statement[]): CaseClause { + return node.expression !== expression || node.statements !== statements ? createCaseClause(expression, statements) : node; +} + +export function updateDefaultClause(node: DefaultClause, expression: Expression, statements: readonly Statement[]): DefaultClause { + return node.expression !== expression || node.statements !== statements ? createDefaultClause(expression, statements) : node; +} + +export function updateObjectBindingPattern(node: ObjectBindingPattern, elements: readonly BindingElement[]): ObjectBindingPattern { + return node.elements !== elements ? createObjectBindingPattern(elements) : node; +} + +export function updateArrayBindingPattern(node: ArrayBindingPattern, elements: readonly BindingElement[]): ArrayBindingPattern { + return node.elements !== elements ? createArrayBindingPattern(elements) : node; +} + +export function updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier, name: EntityName, typeExpression: TypeNode | undefined, comment: readonly JSDocComment[] | undefined): JSDocParameterTag { + return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocParameterTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; +} + +export function updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier, name: EntityName, typeExpression: TypeNode | undefined, comment: readonly JSDocComment[] | undefined): JSDocPropertyTag { + return node.tagName !== tagName || node.name !== name || node.typeExpression !== typeExpression || node.comment !== comment ? createJSDocPropertyTag(tagName, name, node.isBracketed, typeExpression, node.isNameFirst, comment) : node; +} + +export function createSourceFile(statements: readonly Statement[], endOfFileToken: EndOfFile, text: string, fileName: RootedFilePath, path: PathKey): SourceFile { + return new NodeObject(SyntaxKind.SourceFile, { + statements: createNodeArray(statements), + endOfFileToken, + text, + originalText: text, + spanMap: undefined, + contentMapper: undefined, + virtualFileName: undefined, + diagnosticDirectives: undefined, + fileName, + path, + }) as unknown as SourceFile; +} + +function cloneSourceFileWithChanges(source: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile { + return new NodeObject(SyntaxKind.SourceFile, { + ...cloneSourceFileData(source), + statements: createNodeArray(statements), + endOfFileToken, + }) as unknown as SourceFile; +} + +export function updateSourceFile(node: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile { + return node.statements !== statements || node.endOfFileToken !== endOfFileToken + ? cloneSourceFileWithChanges(node, statements, endOfFileToken) + : node; +} diff --git a/packages/typescript/src/ast/index.ts b/packages/typescript/src/ast/index.ts index fcef01b579dc5..81875d6685f29 100644 --- a/packages/typescript/src/ast/index.ts +++ b/packages/typescript/src/ast/index.ts @@ -1,24 +1,24 @@ -export { CharacterCodes } from "#enums/characterCodes"; -export { CommentDirectiveType } from "#enums/commentDirectiveType"; -export { DiagnosticDirectivePolicy } from "#enums/diagnosticDirectivePolicy"; -export { InternalSymbolName } from "#enums/internalSymbolName"; -export { LanguageVariant } from "#enums/languageVariant"; -export { ModifierFlags } from "#enums/modifierFlags"; -export { NodeFlags } from "#enums/nodeFlags"; -export { RegularExpressionFlags } from "#enums/regularExpressionFlags"; -export { ScriptKind } from "#enums/scriptKind"; -export { ScriptTarget } from "#enums/scriptTarget"; -export { SpanMapFeature } from "#enums/spanMapFeature"; -export { SpanMapFidelity } from "#enums/spanMapFidelity"; -export { SpanMapKind } from "#enums/spanMapKind"; -export { SyntaxKind } from "#enums/syntaxKind"; -export { TokenFlags } from "#enums/tokenFlags"; -export * from "./ast.ts"; -export * from "./astnav.ts"; -export * from "./clone.ts"; -export * from "./is.ts"; -export * from "./jsdoc.ts"; -export * from "./scanner.ts"; -export * from "./spanMap.ts"; -export * from "./utils.ts"; -export * from "./visitor.ts"; +export { CharacterCodes } from "#enums/characterCodes"; +export { CommentDirectiveType } from "#enums/commentDirectiveType"; +export { DiagnosticDirectivePolicy } from "#enums/diagnosticDirectivePolicy"; +export { InternalSymbolName } from "#enums/internalSymbolName"; +export { LanguageVariant } from "#enums/languageVariant"; +export { ModifierFlags } from "#enums/modifierFlags"; +export { NodeFlags } from "#enums/nodeFlags"; +export { RegularExpressionFlags } from "#enums/regularExpressionFlags"; +export { ScriptKind } from "#enums/scriptKind"; +export { ScriptTarget } from "#enums/scriptTarget"; +export { SpanMapFeature } from "#enums/spanMapFeature"; +export { SpanMapFidelity } from "#enums/spanMapFidelity"; +export { SpanMapKind } from "#enums/spanMapKind"; +export { SyntaxKind } from "#enums/syntaxKind"; +export { TokenFlags } from "#enums/tokenFlags"; +export * from "./ast.ts"; +export * from "./astnav.ts"; +export * from "./clone.ts"; +export * from "./is.ts"; +export * from "./jsdoc.ts"; +export * from "./scanner.ts"; +export * from "./spanMap.ts"; +export * from "./utils.ts"; +export * from "./visitor.ts"; diff --git a/packages/typescript/src/ast/is.generated.ts b/packages/typescript/src/ast/is.generated.ts index ca0e420be64b2..52da24b61f7d1 100644 --- a/packages/typescript/src/ast/is.generated.ts +++ b/packages/typescript/src/ast/is.generated.ts @@ -1,3325 +1,3325 @@ -// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. - -import { SyntaxKind } from "#enums/syntaxKind"; -import type { NodeHandle as AsyncNodeHandle } from "../api/async/api.ts"; -import type { NodeHandle as SyncNodeHandle } from "../api/sync/api.ts"; -import type { - AbstractKeyword, - AccessExpression, - AccessorDeclaration, - AccessorKeyword, - AdditiveOperator, - AdditiveOperatorOrHigher, - AnyImportSyntax, - ArrayBindingElement, - ArrayBindingPattern, - ArrayDestructuringAssignment, - ArrayLiteralExpression, - ArrayTypeNode, - ArrowFunction, - AsExpression, - AssertionExpression, - AssertKeyword, - AssertsKeyword, - AssignmentOperator, - AssignmentOperatorOrHigher, - AssignmentOperatorToken, - AsteriskToken, - AsyncKeyword, - AwaitExpression, - AwaitKeyword, - BigIntLiteral, - BinaryExpression, - BinaryOperator, - BinaryOperatorToken, - BindingElement, - BindingName, - BitwiseOperator, - BitwiseOperatorOrHigher, - Block, - BooleanLiteral, - BreakOrContinueStatement, - BreakStatement, - CallExpression, - CallLikeExpression, - CallOrNewExpression, - CallSignatureDeclaration, - CaseBlock, - CaseClause, - CaseKeyword, - CatchClause, - ClassDeclaration, - ClassExpression, - ClassLikeDeclaration, - ClassStaticBlockDeclaration, - ColonToken, - CompoundAssignmentOperator, - ComputedPropertyName, - ConditionalExpression, - ConditionalTypeNode, - ConstKeyword, - ConstructorDeclaration, - ConstructorTypeNode, - ConstructSignatureDeclaration, - ContinueStatement, - DebuggerStatement, - DeclarationName, - DeclareKeyword, - Decorator, - DefaultClause, - DefaultKeyword, - DeleteExpression, - DestructuringAssignment, - DoStatement, - DotDotDotToken, - DotToken, - ElementAccessExpression, - EmptyStatement, - EndOfFile, - EntityName, - EnumDeclaration, - EnumMember, - EqualityOperator, - EqualityOperatorOrHigher, - EqualsGreaterThanToken, - EqualsToken, - ExclamationToken, - ExponentiationOperator, - ExportAssignment, - ExportDeclaration, - ExportKeyword, - ExportSpecifier, - ExpressionStatement, - ExpressionWithTypeArguments, - ExternalModuleReference, - FalseLiteral, - ForInStatement, - ForOfStatement, - ForStatement, - FunctionBody, - FunctionDeclaration, - FunctionExpression, - FunctionLikeDeclaration, - FunctionTypeNode, - GetAccessorDeclaration, - HeritageClause, - HeritageClauseElement, - Identifier, - IfStatement, - ImportAttribute, - ImportAttributeName, - ImportAttributes, - ImportClause, - ImportClauseOrBindingPattern, - ImportDeclaration, - ImportEqualsDeclaration, - ImportExpression, - ImportPhaseModifierSyntaxKind, - ImportSpecifier, - ImportTypeNode, - IndexedAccessTypeNode, - IndexSignatureDeclaration, - InferTypeNode, - InKeyword, - InterfaceDeclaration, - IntersectionTypeNode, - JSDoc, - JSDocAllType, - JSDocAugmentsTag, - JSDocCallbackTag, - JSDocComment, - JSDocDeprecatedTag, - JSDocFullName, - JSDocImplementsTag, - JSDocImportTag, - JSDocLink, - JSDocLinkCode, - JSDocLinkPlain, - JSDocNameReference, - JSDocNonNullableType, - JSDocNullableType, - JSDocOptionalType, - JSDocOverloadTag, - JSDocOverrideTag, - JSDocParameterTag, - JSDocPrivateTag, - JSDocPropertyTag, - JSDocProtectedTag, - JSDocPublicTag, - JSDocReadonlyTag, - JSDocReturnTag, - JSDocSatisfiesTag, - JSDocSeeTag, - JSDocSignature, - JSDocTemplateTag, - JSDocText, - JSDocThisTag, - JSDocThrowsTag, - JSDocTypedefTag, - JSDocTypeExpression, - JSDocTypeLiteral, - JSDocTypeTag, - JSDocUnknownTag, - JSDocVariadicType, - JsxAttribute, - JsxAttributeLike, - JsxAttributeName, - JsxAttributes, - JsxAttributeValue, - JsxChild, - JsxClosingElement, - JsxClosingFragment, - JsxElement, - JsxExpression, - JsxFragment, - JsxNamespacedName, - JsxOpeningElement, - JsxOpeningFragment, - JsxOpeningLikeElement, - JsxSelfClosingElement, - JsxSpreadAttribute, - JsxText, - JsxTokenSyntaxKind, - KeywordExpression, - KeywordExpressionSyntaxKind, - KeywordTypeNode, - KeywordTypeSyntaxKind, - LabeledStatement, - LiteralExpression, - LiteralLikeNode, - LiteralToken, - LiteralTypeNode, - LogicalOperator, - LogicalOperatorOrHigher, - LogicalOrCoalescingAssignmentOperator, - MappedTypeNode, - MemberName, - MetaProperty, - MethodDeclaration, - MethodSignatureDeclaration, - MinusToken, - MissingDeclaration, - Modifier, - ModifierLike, - ModifierSyntaxKind, - ModuleBlock, - ModuleBody, - ModuleDeclaration, - ModuleExportName, - ModuleName, - ModuleReference, - MultiplicativeOperator, - MultiplicativeOperatorOrHigher, - NamedExportBindings, - NamedExports, - NamedImportBindings, - NamedImports, - NamedImportsOrExports, - NamedTupleMember, - NamespaceExport, - NamespaceExportDeclaration, - NamespaceImport, - NewExpression, - Node, - NonNullExpression, - NoSubstitutionTemplateLiteral, - NotEmittedStatement, - NotEmittedTypeElement, - NullLiteral, - NumericLiteral, - NumericOrStringLikeLiteral, - ObjectBindingPattern, - ObjectDestructuringAssignment, - ObjectLiteralElementLike, - ObjectLiteralExpression, - ObjectLiteralLikeNode, - ObjectTypeDeclaration, - OmittedExpression, - OptionalTypeNode, - OutKeyword, - OverrideKeyword, - ParameterDeclaration, - ParenthesizedExpression, - ParenthesizedTypeNode, - PartiallyEmittedExpression, - PlusToken, - PostfixUnaryExpression, - PostfixUnaryOperator, - PrefixUnaryExpression, - PrefixUnaryOperator, - PrivateIdentifier, - PrivateKeyword, - PropertyAccessExpression, - PropertyAssignment, - PropertyDeclaration, - PropertyName, - PropertyNameLiteral, - PropertySignatureDeclaration, - ProtectedKeyword, - PseudoLiteralSyntaxKind, - PseudoLiteralToken, - PublicKeyword, - QualifiedName, - QuestionDotToken, - QuestionToken, - ReadonlyKeyword, - RegularExpressionLiteral, - RelationalOperator, - RelationalOperatorOrHigher, - RestTypeNode, - ReturnStatement, - SatisfiesExpression, - SemicolonClassElement, - SetAccessorDeclaration, - ShiftOperator, - ShiftOperatorOrHigher, - ShorthandPropertyAssignment, - SignatureDeclaration, - SourceFile, - SpreadAssignment, - SpreadElement, - StaticKeyword, - StringLiteral, - StringLiteralLikeNode, - SuperExpression, - SwitchStatement, - SyntaxList, - SyntheticExpression, - SyntheticReferenceExpression, - TaggedTemplateExpression, - TemplateExpression, - TemplateHead, - TemplateLiteral, - TemplateLiteralLikeNode, - TemplateLiteralToken, - TemplateLiteralTypeNode, - TemplateLiteralTypeSpan, - TemplateMiddle, - TemplateMiddleOrTail, - TemplateSpan, - TemplateTail, - ThisExpression, - ThisTypeNode, - ThrowStatement, - Token, - TriviaSyntaxKind, - TrueLiteral, - TryStatement, - TupleTypeNode, - TypeAliasDeclaration, - TypeAssertion, - TypeLiteralNode, - TypeOfExpression, - TypeOperatorNode, - TypeParameterDeclaration, - TypePredicateNode, - TypePredicateParameterName, - TypeQueryNode, - TypeReferenceNode, - UnionOrIntersectionTypeNode, - UnionTypeNode, - VariableDeclaration, - VariableDeclarationList, - VariableOrParameterDeclaration, - VariableOrPropertyDeclaration, - VariableStatement, - VoidExpression, - WhileStatement, - WithStatement, - YieldExpression, -} from "./ast.ts"; -type NodeHandleLike = { kind: SyntaxKind; resolve(...args: any): any; }; -type SpecializeNodeHandle, U extends Node> = T extends AsyncNodeHandle ? AsyncNodeHandle & T : SyncNodeHandle & T; - -export function isToken(node: Node): node is Token { - return isTokenKind(node.kind); -} - -export declare namespace isToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isToken.Handle = isToken as any; - -export function isIdentifier(node: Node): node is Identifier { - return node.kind === SyntaxKind.Identifier; -} - -export declare namespace isIdentifier { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isIdentifier.Handle = isIdentifier as any; - -export function isPrivateIdentifier(node: Node): node is PrivateIdentifier { - return node.kind === SyntaxKind.PrivateIdentifier; -} - -export declare namespace isPrivateIdentifier { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPrivateIdentifier.Handle = isPrivateIdentifier as any; - -export function isQualifiedName(node: Node): node is QualifiedName { - return node.kind === SyntaxKind.QualifiedName; -} - -export declare namespace isQualifiedName { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isQualifiedName.Handle = isQualifiedName as any; - -export function isComputedPropertyName(node: Node): node is ComputedPropertyName { - return node.kind === SyntaxKind.ComputedPropertyName; -} - -export declare namespace isComputedPropertyName { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isComputedPropertyName.Handle = isComputedPropertyName as any; - -export function isDecorator(node: Node): node is Decorator { - return node.kind === SyntaxKind.Decorator; -} - -export declare namespace isDecorator { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isDecorator.Handle = isDecorator as any; - -export function isEmptyStatement(node: Node): node is EmptyStatement { - return node.kind === SyntaxKind.EmptyStatement; -} - -export declare namespace isEmptyStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isEmptyStatement.Handle = isEmptyStatement as any; - -export function isIfStatement(node: Node): node is IfStatement { - return node.kind === SyntaxKind.IfStatement; -} - -export declare namespace isIfStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isIfStatement.Handle = isIfStatement as any; - -export function isDoStatement(node: Node): node is DoStatement { - return node.kind === SyntaxKind.DoStatement; -} - -export declare namespace isDoStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isDoStatement.Handle = isDoStatement as any; - -export function isWhileStatement(node: Node): node is WhileStatement { - return node.kind === SyntaxKind.WhileStatement; -} - -export declare namespace isWhileStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isWhileStatement.Handle = isWhileStatement as any; - -export function isForStatement(node: Node): node is ForStatement { - return node.kind === SyntaxKind.ForStatement; -} - -export declare namespace isForStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isForStatement.Handle = isForStatement as any; - -export function isBreakStatement(node: Node): node is BreakStatement { - return node.kind === SyntaxKind.BreakStatement; -} - -export declare namespace isBreakStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isBreakStatement.Handle = isBreakStatement as any; - -export function isContinueStatement(node: Node): node is ContinueStatement { - return node.kind === SyntaxKind.ContinueStatement; -} - -export declare namespace isContinueStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isContinueStatement.Handle = isContinueStatement as any; - -export function isReturnStatement(node: Node): node is ReturnStatement { - return node.kind === SyntaxKind.ReturnStatement; -} - -export declare namespace isReturnStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isReturnStatement.Handle = isReturnStatement as any; - -export function isWithStatement(node: Node): node is WithStatement { - return node.kind === SyntaxKind.WithStatement; -} - -export declare namespace isWithStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isWithStatement.Handle = isWithStatement as any; - -export function isSwitchStatement(node: Node): node is SwitchStatement { - return node.kind === SyntaxKind.SwitchStatement; -} - -export declare namespace isSwitchStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSwitchStatement.Handle = isSwitchStatement as any; - -export function isCaseBlock(node: Node): node is CaseBlock { - return node.kind === SyntaxKind.CaseBlock; -} - -export declare namespace isCaseBlock { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isCaseBlock.Handle = isCaseBlock as any; - -export function isThrowStatement(node: Node): node is ThrowStatement { - return node.kind === SyntaxKind.ThrowStatement; -} - -export declare namespace isThrowStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isThrowStatement.Handle = isThrowStatement as any; - -export function isTryStatement(node: Node): node is TryStatement { - return node.kind === SyntaxKind.TryStatement; -} - -export declare namespace isTryStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTryStatement.Handle = isTryStatement as any; - -export function isCatchClause(node: Node): node is CatchClause { - return node.kind === SyntaxKind.CatchClause; -} - -export declare namespace isCatchClause { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isCatchClause.Handle = isCatchClause as any; - -export function isDebuggerStatement(node: Node): node is DebuggerStatement { - return node.kind === SyntaxKind.DebuggerStatement; -} - -export declare namespace isDebuggerStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isDebuggerStatement.Handle = isDebuggerStatement as any; - -export function isLabeledStatement(node: Node): node is LabeledStatement { - return node.kind === SyntaxKind.LabeledStatement; -} - -export declare namespace isLabeledStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isLabeledStatement.Handle = isLabeledStatement as any; - -export function isExpressionStatement(node: Node): node is ExpressionStatement { - return node.kind === SyntaxKind.ExpressionStatement; -} - -export declare namespace isExpressionStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExpressionStatement.Handle = isExpressionStatement as any; - -export function isBlock(node: Node): node is Block { - return node.kind === SyntaxKind.Block; -} - -export declare namespace isBlock { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isBlock.Handle = isBlock as any; - -export function isVariableStatement(node: Node): node is VariableStatement { - return node.kind === SyntaxKind.VariableStatement; -} - -export declare namespace isVariableStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isVariableStatement.Handle = isVariableStatement as any; - -export function isVariableDeclaration(node: Node): node is VariableDeclaration { - return node.kind === SyntaxKind.VariableDeclaration; -} - -export declare namespace isVariableDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isVariableDeclaration.Handle = isVariableDeclaration as any; - -export function isVariableDeclarationList(node: Node): node is VariableDeclarationList { - return node.kind === SyntaxKind.VariableDeclarationList; -} - -export declare namespace isVariableDeclarationList { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isVariableDeclarationList.Handle = isVariableDeclarationList as any; - -export function isParameterDeclaration(node: Node): node is ParameterDeclaration { - return node.kind === SyntaxKind.Parameter; -} - -export declare namespace isParameterDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isParameterDeclaration.Handle = isParameterDeclaration as any; - -export function isBindingElement(node: Node): node is BindingElement { - return node.kind === SyntaxKind.BindingElement; -} - -export declare namespace isBindingElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isBindingElement.Handle = isBindingElement as any; - -export function isMissingDeclaration(node: Node): node is MissingDeclaration { - return node.kind === SyntaxKind.MissingDeclaration; -} - -export declare namespace isMissingDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isMissingDeclaration.Handle = isMissingDeclaration as any; - -export function isFunctionDeclaration(node: Node): node is FunctionDeclaration { - return node.kind === SyntaxKind.FunctionDeclaration; -} - -export declare namespace isFunctionDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isFunctionDeclaration.Handle = isFunctionDeclaration as any; - -export function isClassDeclaration(node: Node): node is ClassDeclaration { - return node.kind === SyntaxKind.ClassDeclaration; -} - -export declare namespace isClassDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isClassDeclaration.Handle = isClassDeclaration as any; - -export function isClassExpression(node: Node): node is ClassExpression { - return node.kind === SyntaxKind.ClassExpression; -} - -export declare namespace isClassExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isClassExpression.Handle = isClassExpression as any; - -export function isHeritageClause(node: Node): node is HeritageClause { - return node.kind === SyntaxKind.HeritageClause; -} - -export declare namespace isHeritageClause { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isHeritageClause.Handle = isHeritageClause as any; - -export function isInterfaceDeclaration(node: Node): node is InterfaceDeclaration { - return node.kind === SyntaxKind.InterfaceDeclaration; -} - -export declare namespace isInterfaceDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isInterfaceDeclaration.Handle = isInterfaceDeclaration as any; - -export function isTypeAliasDeclaration(node: Node): node is TypeAliasDeclaration { - switch (node.kind) { - case SyntaxKind.TypeAliasDeclaration: - case SyntaxKind.JSTypeAliasDeclaration: - return true; - default: - return false; - } -} - -export declare namespace isTypeAliasDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeAliasDeclaration.Handle = isTypeAliasDeclaration as any; - -export function isEnumMember(node: Node): node is EnumMember { - return node.kind === SyntaxKind.EnumMember; -} - -export declare namespace isEnumMember { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isEnumMember.Handle = isEnumMember as any; - -export function isEnumDeclaration(node: Node): node is EnumDeclaration { - return node.kind === SyntaxKind.EnumDeclaration; -} - -export declare namespace isEnumDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isEnumDeclaration.Handle = isEnumDeclaration as any; - -export function isModuleBlock(node: Node): node is ModuleBlock { - return node.kind === SyntaxKind.ModuleBlock; -} - -export declare namespace isModuleBlock { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isModuleBlock.Handle = isModuleBlock as any; - -export function isNotEmittedStatement(node: Node): node is NotEmittedStatement { - return node.kind === SyntaxKind.NotEmittedStatement; -} - -export declare namespace isNotEmittedStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNotEmittedStatement.Handle = isNotEmittedStatement as any; - -export function isNotEmittedTypeElement(node: Node): node is NotEmittedTypeElement { - return node.kind === SyntaxKind.NotEmittedTypeElement; -} - -export declare namespace isNotEmittedTypeElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNotEmittedTypeElement.Handle = isNotEmittedTypeElement as any; - -export function isImportDeclaration(node: Node): node is ImportDeclaration { - switch (node.kind) { - case SyntaxKind.ImportDeclaration: - case SyntaxKind.JSImportDeclaration: - return true; - default: - return false; - } -} - -export declare namespace isImportDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportDeclaration.Handle = isImportDeclaration as any; - -export function isExternalModuleReference(node: Node): node is ExternalModuleReference { - return node.kind === SyntaxKind.ExternalModuleReference; -} - -export declare namespace isExternalModuleReference { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExternalModuleReference.Handle = isExternalModuleReference as any; - -export function isNamespaceImport(node: Node): node is NamespaceImport { - return node.kind === SyntaxKind.NamespaceImport; -} - -export declare namespace isNamespaceImport { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamespaceImport.Handle = isNamespaceImport as any; - -export function isNamedImports(node: Node): node is NamedImports { - return node.kind === SyntaxKind.NamedImports; -} - -export declare namespace isNamedImports { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamedImports.Handle = isNamedImports as any; - -export function isExportAssignment(node: Node): node is ExportAssignment { - return node.kind === SyntaxKind.ExportAssignment; -} - -export declare namespace isExportAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExportAssignment.Handle = isExportAssignment as any; - -export function isNamespaceExportDeclaration(node: Node): node is NamespaceExportDeclaration { - return node.kind === SyntaxKind.NamespaceExportDeclaration; -} - -export declare namespace isNamespaceExportDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamespaceExportDeclaration.Handle = isNamespaceExportDeclaration as any; - -export function isNamespaceExport(node: Node): node is NamespaceExport { - return node.kind === SyntaxKind.NamespaceExport; -} - -export declare namespace isNamespaceExport { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamespaceExport.Handle = isNamespaceExport as any; - -export function isNamedExports(node: Node): node is NamedExports { - return node.kind === SyntaxKind.NamedExports; -} - -export declare namespace isNamedExports { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamedExports.Handle = isNamedExports as any; - -export function isExportSpecifier(node: Node): node is ExportSpecifier { - return node.kind === SyntaxKind.ExportSpecifier; -} - -export declare namespace isExportSpecifier { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExportSpecifier.Handle = isExportSpecifier as any; - -export function isCallSignatureDeclaration(node: Node): node is CallSignatureDeclaration { - return node.kind === SyntaxKind.CallSignature; -} - -export declare namespace isCallSignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isCallSignatureDeclaration.Handle = isCallSignatureDeclaration as any; - -export function isConstructSignatureDeclaration(node: Node): node is ConstructSignatureDeclaration { - return node.kind === SyntaxKind.ConstructSignature; -} - -export declare namespace isConstructSignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isConstructSignatureDeclaration.Handle = isConstructSignatureDeclaration as any; - -export function isConstructorDeclaration(node: Node): node is ConstructorDeclaration { - return node.kind === SyntaxKind.Constructor; -} - -export declare namespace isConstructorDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isConstructorDeclaration.Handle = isConstructorDeclaration as any; - -export function isGetAccessorDeclaration(node: Node): node is GetAccessorDeclaration { - return node.kind === SyntaxKind.GetAccessor; -} - -export declare namespace isGetAccessorDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isGetAccessorDeclaration.Handle = isGetAccessorDeclaration as any; - -export function isSetAccessorDeclaration(node: Node): node is SetAccessorDeclaration { - return node.kind === SyntaxKind.SetAccessor; -} - -export declare namespace isSetAccessorDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSetAccessorDeclaration.Handle = isSetAccessorDeclaration as any; - -export function isIndexSignatureDeclaration(node: Node): node is IndexSignatureDeclaration { - return node.kind === SyntaxKind.IndexSignature; -} - -export declare namespace isIndexSignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isIndexSignatureDeclaration.Handle = isIndexSignatureDeclaration as any; - -export function isMethodSignatureDeclaration(node: Node): node is MethodSignatureDeclaration { - return node.kind === SyntaxKind.MethodSignature; -} - -export declare namespace isMethodSignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isMethodSignatureDeclaration.Handle = isMethodSignatureDeclaration as any; - -export function isMethodDeclaration(node: Node): node is MethodDeclaration { - return node.kind === SyntaxKind.MethodDeclaration; -} - -export declare namespace isMethodDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isMethodDeclaration.Handle = isMethodDeclaration as any; - -export function isPropertySignatureDeclaration(node: Node): node is PropertySignatureDeclaration { - return node.kind === SyntaxKind.PropertySignature; -} - -export declare namespace isPropertySignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPropertySignatureDeclaration.Handle = isPropertySignatureDeclaration as any; - -export function isPropertyDeclaration(node: Node): node is PropertyDeclaration { - return node.kind === SyntaxKind.PropertyDeclaration; -} - -export declare namespace isPropertyDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPropertyDeclaration.Handle = isPropertyDeclaration as any; - -export function isSemicolonClassElement(node: Node): node is SemicolonClassElement { - return node.kind === SyntaxKind.SemicolonClassElement; -} - -export declare namespace isSemicolonClassElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSemicolonClassElement.Handle = isSemicolonClassElement as any; - -export function isClassStaticBlockDeclaration(node: Node): node is ClassStaticBlockDeclaration { - return node.kind === SyntaxKind.ClassStaticBlockDeclaration; -} - -export declare namespace isClassStaticBlockDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isClassStaticBlockDeclaration.Handle = isClassStaticBlockDeclaration as any; - -export function isOmittedExpression(node: Node): node is OmittedExpression { - return node.kind === SyntaxKind.OmittedExpression; -} - -export declare namespace isOmittedExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isOmittedExpression.Handle = isOmittedExpression as any; - -export function isKeywordExpression(node: Node): node is KeywordExpression { - return isKeywordExpressionKind(node.kind); -} - -export declare namespace isKeywordExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isKeywordExpression.Handle = isKeywordExpression as any; - -export function isStringLiteral(node: Node): node is StringLiteral { - return node.kind === SyntaxKind.StringLiteral; -} - -export declare namespace isStringLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isStringLiteral.Handle = isStringLiteral as any; - -export function isNumericLiteral(node: Node): node is NumericLiteral { - return node.kind === SyntaxKind.NumericLiteral; -} - -export declare namespace isNumericLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNumericLiteral.Handle = isNumericLiteral as any; - -export function isBigIntLiteral(node: Node): node is BigIntLiteral { - return node.kind === SyntaxKind.BigIntLiteral; -} - -export declare namespace isBigIntLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isBigIntLiteral.Handle = isBigIntLiteral as any; - -export function isRegularExpressionLiteral(node: Node): node is RegularExpressionLiteral { - return node.kind === SyntaxKind.RegularExpressionLiteral; -} - -export declare namespace isRegularExpressionLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isRegularExpressionLiteral.Handle = isRegularExpressionLiteral as any; - -export function isNoSubstitutionTemplateLiteral(node: Node): node is NoSubstitutionTemplateLiteral { - return node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; -} - -export declare namespace isNoSubstitutionTemplateLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNoSubstitutionTemplateLiteral.Handle = isNoSubstitutionTemplateLiteral as any; - -export function isBinaryExpression(node: Node): node is BinaryExpression { - return node.kind === SyntaxKind.BinaryExpression; -} - -export declare namespace isBinaryExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isBinaryExpression.Handle = isBinaryExpression as any; - -export function isPrefixUnaryExpression(node: Node): node is PrefixUnaryExpression { - return node.kind === SyntaxKind.PrefixUnaryExpression; -} - -export declare namespace isPrefixUnaryExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPrefixUnaryExpression.Handle = isPrefixUnaryExpression as any; - -export function isPostfixUnaryExpression(node: Node): node is PostfixUnaryExpression { - return node.kind === SyntaxKind.PostfixUnaryExpression; -} - -export declare namespace isPostfixUnaryExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPostfixUnaryExpression.Handle = isPostfixUnaryExpression as any; - -export function isYieldExpression(node: Node): node is YieldExpression { - return node.kind === SyntaxKind.YieldExpression; -} - -export declare namespace isYieldExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isYieldExpression.Handle = isYieldExpression as any; - -export function isArrowFunction(node: Node): node is ArrowFunction { - return node.kind === SyntaxKind.ArrowFunction; -} - -export declare namespace isArrowFunction { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isArrowFunction.Handle = isArrowFunction as any; - -export function isFunctionExpression(node: Node): node is FunctionExpression { - return node.kind === SyntaxKind.FunctionExpression; -} - -export declare namespace isFunctionExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isFunctionExpression.Handle = isFunctionExpression as any; - -export function isAsExpression(node: Node): node is AsExpression { - return node.kind === SyntaxKind.AsExpression; -} - -export declare namespace isAsExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isAsExpression.Handle = isAsExpression as any; - -export function isSatisfiesExpression(node: Node): node is SatisfiesExpression { - return node.kind === SyntaxKind.SatisfiesExpression; -} - -export declare namespace isSatisfiesExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSatisfiesExpression.Handle = isSatisfiesExpression as any; - -export function isConditionalExpression(node: Node): node is ConditionalExpression { - return node.kind === SyntaxKind.ConditionalExpression; -} - -export declare namespace isConditionalExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isConditionalExpression.Handle = isConditionalExpression as any; - -export function isPropertyAccessExpression(node: Node): node is PropertyAccessExpression { - return node.kind === SyntaxKind.PropertyAccessExpression; -} - -export declare namespace isPropertyAccessExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPropertyAccessExpression.Handle = isPropertyAccessExpression as any; - -export function isElementAccessExpression(node: Node): node is ElementAccessExpression { - return node.kind === SyntaxKind.ElementAccessExpression; -} - -export declare namespace isElementAccessExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isElementAccessExpression.Handle = isElementAccessExpression as any; - -export function isCallExpression(node: Node): node is CallExpression { - return node.kind === SyntaxKind.CallExpression; -} - -export declare namespace isCallExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isCallExpression.Handle = isCallExpression as any; - -export function isNewExpression(node: Node): node is NewExpression { - return node.kind === SyntaxKind.NewExpression; -} - -export declare namespace isNewExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNewExpression.Handle = isNewExpression as any; - -export function isMetaProperty(node: Node): node is MetaProperty { - return node.kind === SyntaxKind.MetaProperty; -} - -export declare namespace isMetaProperty { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isMetaProperty.Handle = isMetaProperty as any; - -export function isNonNullExpression(node: Node): node is NonNullExpression { - return node.kind === SyntaxKind.NonNullExpression; -} - -export declare namespace isNonNullExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNonNullExpression.Handle = isNonNullExpression as any; - -export function isSpreadElement(node: Node): node is SpreadElement { - return node.kind === SyntaxKind.SpreadElement; -} - -export declare namespace isSpreadElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSpreadElement.Handle = isSpreadElement as any; - -export function isTemplateExpression(node: Node): node is TemplateExpression { - return node.kind === SyntaxKind.TemplateExpression; -} - -export declare namespace isTemplateExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateExpression.Handle = isTemplateExpression as any; - -export function isTemplateSpan(node: Node): node is TemplateSpan { - return node.kind === SyntaxKind.TemplateSpan; -} - -export declare namespace isTemplateSpan { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateSpan.Handle = isTemplateSpan as any; - -export function isTaggedTemplateExpression(node: Node): node is TaggedTemplateExpression { - return node.kind === SyntaxKind.TaggedTemplateExpression; -} - -export declare namespace isTaggedTemplateExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTaggedTemplateExpression.Handle = isTaggedTemplateExpression as any; - -export function isParenthesizedExpression(node: Node): node is ParenthesizedExpression { - return node.kind === SyntaxKind.ParenthesizedExpression; -} - -export declare namespace isParenthesizedExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isParenthesizedExpression.Handle = isParenthesizedExpression as any; - -export function isArrayLiteralExpression(node: Node): node is ArrayLiteralExpression { - return node.kind === SyntaxKind.ArrayLiteralExpression; -} - -export declare namespace isArrayLiteralExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isArrayLiteralExpression.Handle = isArrayLiteralExpression as any; - -export function isObjectLiteralExpression(node: Node): node is ObjectLiteralExpression { - return node.kind === SyntaxKind.ObjectLiteralExpression; -} - -export declare namespace isObjectLiteralExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isObjectLiteralExpression.Handle = isObjectLiteralExpression as any; - -export function isSpreadAssignment(node: Node): node is SpreadAssignment { - return node.kind === SyntaxKind.SpreadAssignment; -} - -export declare namespace isSpreadAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSpreadAssignment.Handle = isSpreadAssignment as any; - -export function isPropertyAssignment(node: Node): node is PropertyAssignment { - return node.kind === SyntaxKind.PropertyAssignment; -} - -export declare namespace isPropertyAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPropertyAssignment.Handle = isPropertyAssignment as any; - -export function isShorthandPropertyAssignment(node: Node): node is ShorthandPropertyAssignment { - return node.kind === SyntaxKind.ShorthandPropertyAssignment; -} - -export declare namespace isShorthandPropertyAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isShorthandPropertyAssignment.Handle = isShorthandPropertyAssignment as any; - -export function isDeleteExpression(node: Node): node is DeleteExpression { - return node.kind === SyntaxKind.DeleteExpression; -} - -export declare namespace isDeleteExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isDeleteExpression.Handle = isDeleteExpression as any; - -export function isTypeOfExpression(node: Node): node is TypeOfExpression { - return node.kind === SyntaxKind.TypeOfExpression; -} - -export declare namespace isTypeOfExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeOfExpression.Handle = isTypeOfExpression as any; - -export function isVoidExpression(node: Node): node is VoidExpression { - return node.kind === SyntaxKind.VoidExpression; -} - -export declare namespace isVoidExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isVoidExpression.Handle = isVoidExpression as any; - -export function isAwaitExpression(node: Node): node is AwaitExpression { - return node.kind === SyntaxKind.AwaitExpression; -} - -export declare namespace isAwaitExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isAwaitExpression.Handle = isAwaitExpression as any; - -export function isTypeAssertion(node: Node): node is TypeAssertion { - return node.kind === SyntaxKind.TypeAssertionExpression; -} - -export declare namespace isTypeAssertion { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeAssertion.Handle = isTypeAssertion as any; - -export function isKeywordTypeNode(node: Node): node is KeywordTypeNode { - return isKeywordTypeKind(node.kind); -} - -export declare namespace isKeywordTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isKeywordTypeNode.Handle = isKeywordTypeNode as any; - -export function isUnionTypeNode(node: Node): node is UnionTypeNode { - return node.kind === SyntaxKind.UnionType; -} - -export declare namespace isUnionTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isUnionTypeNode.Handle = isUnionTypeNode as any; - -export function isIntersectionTypeNode(node: Node): node is IntersectionTypeNode { - return node.kind === SyntaxKind.IntersectionType; -} - -export declare namespace isIntersectionTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isIntersectionTypeNode.Handle = isIntersectionTypeNode as any; - -export function isConditionalTypeNode(node: Node): node is ConditionalTypeNode { - return node.kind === SyntaxKind.ConditionalType; -} - -export declare namespace isConditionalTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isConditionalTypeNode.Handle = isConditionalTypeNode as any; - -export function isTypeOperatorNode(node: Node): node is TypeOperatorNode { - return node.kind === SyntaxKind.TypeOperator; -} - -export declare namespace isTypeOperatorNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeOperatorNode.Handle = isTypeOperatorNode as any; - -export function isInferTypeNode(node: Node): node is InferTypeNode { - return node.kind === SyntaxKind.InferType; -} - -export declare namespace isInferTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isInferTypeNode.Handle = isInferTypeNode as any; - -export function isArrayTypeNode(node: Node): node is ArrayTypeNode { - return node.kind === SyntaxKind.ArrayType; -} - -export declare namespace isArrayTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isArrayTypeNode.Handle = isArrayTypeNode as any; - -export function isIndexedAccessTypeNode(node: Node): node is IndexedAccessTypeNode { - return node.kind === SyntaxKind.IndexedAccessType; -} - -export declare namespace isIndexedAccessTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isIndexedAccessTypeNode.Handle = isIndexedAccessTypeNode as any; - -export function isTypeReferenceNode(node: Node): node is TypeReferenceNode { - return node.kind === SyntaxKind.TypeReference; -} - -export declare namespace isTypeReferenceNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeReferenceNode.Handle = isTypeReferenceNode as any; - -export function isExpressionWithTypeArguments(node: Node): node is ExpressionWithTypeArguments { - return node.kind === SyntaxKind.ExpressionWithTypeArguments; -} - -export declare namespace isExpressionWithTypeArguments { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExpressionWithTypeArguments.Handle = isExpressionWithTypeArguments as any; - -export function isLiteralTypeNode(node: Node): node is LiteralTypeNode { - return node.kind === SyntaxKind.LiteralType; -} - -export declare namespace isLiteralTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isLiteralTypeNode.Handle = isLiteralTypeNode as any; - -export function isThisTypeNode(node: Node): node is ThisTypeNode { - return node.kind === SyntaxKind.ThisType; -} - -export declare namespace isThisTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isThisTypeNode.Handle = isThisTypeNode as any; - -export function isTypePredicateNode(node: Node): node is TypePredicateNode { - return node.kind === SyntaxKind.TypePredicate; -} - -export declare namespace isTypePredicateNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypePredicateNode.Handle = isTypePredicateNode as any; - -export function isImportAttribute(node: Node): node is ImportAttribute { - return node.kind === SyntaxKind.ImportAttribute; -} - -export declare namespace isImportAttribute { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportAttribute.Handle = isImportAttribute as any; - -export function isImportAttributes(node: Node): node is ImportAttributes { - return node.kind === SyntaxKind.ImportAttributes; -} - -export declare namespace isImportAttributes { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportAttributes.Handle = isImportAttributes as any; - -export function isTypeQueryNode(node: Node): node is TypeQueryNode { - return node.kind === SyntaxKind.TypeQuery; -} - -export declare namespace isTypeQueryNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeQueryNode.Handle = isTypeQueryNode as any; - -export function isMappedTypeNode(node: Node): node is MappedTypeNode { - return node.kind === SyntaxKind.MappedType; -} - -export declare namespace isMappedTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isMappedTypeNode.Handle = isMappedTypeNode as any; - -export function isTypeLiteralNode(node: Node): node is TypeLiteralNode { - return node.kind === SyntaxKind.TypeLiteral; -} - -export declare namespace isTypeLiteralNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeLiteralNode.Handle = isTypeLiteralNode as any; - -export function isTupleTypeNode(node: Node): node is TupleTypeNode { - return node.kind === SyntaxKind.TupleType; -} - -export declare namespace isTupleTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTupleTypeNode.Handle = isTupleTypeNode as any; - -export function isNamedTupleMember(node: Node): node is NamedTupleMember { - return node.kind === SyntaxKind.NamedTupleMember; -} - -export declare namespace isNamedTupleMember { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isNamedTupleMember.Handle = isNamedTupleMember as any; - -export function isOptionalTypeNode(node: Node): node is OptionalTypeNode { - return node.kind === SyntaxKind.OptionalType; -} - -export declare namespace isOptionalTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isOptionalTypeNode.Handle = isOptionalTypeNode as any; - -export function isRestTypeNode(node: Node): node is RestTypeNode { - return node.kind === SyntaxKind.RestType; -} - -export declare namespace isRestTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isRestTypeNode.Handle = isRestTypeNode as any; - -export function isParenthesizedTypeNode(node: Node): node is ParenthesizedTypeNode { - return node.kind === SyntaxKind.ParenthesizedType; -} - -export declare namespace isParenthesizedTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isParenthesizedTypeNode.Handle = isParenthesizedTypeNode as any; - -export function isFunctionTypeNode(node: Node): node is FunctionTypeNode { - return node.kind === SyntaxKind.FunctionType; -} - -export declare namespace isFunctionTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isFunctionTypeNode.Handle = isFunctionTypeNode as any; - -export function isConstructorTypeNode(node: Node): node is ConstructorTypeNode { - return node.kind === SyntaxKind.ConstructorType; -} - -export declare namespace isConstructorTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isConstructorTypeNode.Handle = isConstructorTypeNode as any; - -export function isTemplateHead(node: Node): node is TemplateHead { - return node.kind === SyntaxKind.TemplateHead; -} - -export declare namespace isTemplateHead { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateHead.Handle = isTemplateHead as any; - -export function isTemplateMiddle(node: Node): node is TemplateMiddle { - return node.kind === SyntaxKind.TemplateMiddle; -} - -export declare namespace isTemplateMiddle { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateMiddle.Handle = isTemplateMiddle as any; - -export function isTemplateTail(node: Node): node is TemplateTail { - return node.kind === SyntaxKind.TemplateTail; -} - -export declare namespace isTemplateTail { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateTail.Handle = isTemplateTail as any; - -export function isTemplateLiteralTypeNode(node: Node): node is TemplateLiteralTypeNode { - return node.kind === SyntaxKind.TemplateLiteralType; -} - -export declare namespace isTemplateLiteralTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateLiteralTypeNode.Handle = isTemplateLiteralTypeNode as any; - -export function isTemplateLiteralTypeSpan(node: Node): node is TemplateLiteralTypeSpan { - return node.kind === SyntaxKind.TemplateLiteralTypeSpan; -} - -export declare namespace isTemplateLiteralTypeSpan { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTemplateLiteralTypeSpan.Handle = isTemplateLiteralTypeSpan as any; - -export function isSyntheticExpression(node: Node): node is SyntheticExpression { - return node.kind === SyntaxKind.SyntheticExpression; -} - -export declare namespace isSyntheticExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSyntheticExpression.Handle = isSyntheticExpression as any; - -export function isPartiallyEmittedExpression(node: Node): node is PartiallyEmittedExpression { - return node.kind === SyntaxKind.PartiallyEmittedExpression; -} - -export declare namespace isPartiallyEmittedExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isPartiallyEmittedExpression.Handle = isPartiallyEmittedExpression as any; - -export function isJsxElement(node: Node): node is JsxElement { - return node.kind === SyntaxKind.JsxElement; -} - -export declare namespace isJsxElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxElement.Handle = isJsxElement as any; - -export function isJsxAttributes(node: Node): node is JsxAttributes { - return node.kind === SyntaxKind.JsxAttributes; -} - -export declare namespace isJsxAttributes { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxAttributes.Handle = isJsxAttributes as any; - -export function isJsxNamespacedName(node: Node): node is JsxNamespacedName { - return node.kind === SyntaxKind.JsxNamespacedName; -} - -export declare namespace isJsxNamespacedName { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxNamespacedName.Handle = isJsxNamespacedName as any; - -export function isJsxOpeningElement(node: Node): node is JsxOpeningElement { - return node.kind === SyntaxKind.JsxOpeningElement; -} - -export declare namespace isJsxOpeningElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxOpeningElement.Handle = isJsxOpeningElement as any; - -export function isJsxSelfClosingElement(node: Node): node is JsxSelfClosingElement { - return node.kind === SyntaxKind.JsxSelfClosingElement; -} - -export declare namespace isJsxSelfClosingElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxSelfClosingElement.Handle = isJsxSelfClosingElement as any; - -export function isJsxFragment(node: Node): node is JsxFragment { - return node.kind === SyntaxKind.JsxFragment; -} - -export declare namespace isJsxFragment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxFragment.Handle = isJsxFragment as any; - -export function isJsxOpeningFragment(node: Node): node is JsxOpeningFragment { - return node.kind === SyntaxKind.JsxOpeningFragment; -} - -export declare namespace isJsxOpeningFragment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxOpeningFragment.Handle = isJsxOpeningFragment as any; - -export function isJsxClosingFragment(node: Node): node is JsxClosingFragment { - return node.kind === SyntaxKind.JsxClosingFragment; -} - -export declare namespace isJsxClosingFragment { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxClosingFragment.Handle = isJsxClosingFragment as any; - -export function isJsxAttribute(node: Node): node is JsxAttribute { - return node.kind === SyntaxKind.JsxAttribute; -} - -export declare namespace isJsxAttribute { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxAttribute.Handle = isJsxAttribute as any; - -export function isJsxSpreadAttribute(node: Node): node is JsxSpreadAttribute { - return node.kind === SyntaxKind.JsxSpreadAttribute; -} - -export declare namespace isJsxSpreadAttribute { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxSpreadAttribute.Handle = isJsxSpreadAttribute as any; - -export function isJsxClosingElement(node: Node): node is JsxClosingElement { - return node.kind === SyntaxKind.JsxClosingElement; -} - -export declare namespace isJsxClosingElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxClosingElement.Handle = isJsxClosingElement as any; - -export function isJsxExpression(node: Node): node is JsxExpression { - return node.kind === SyntaxKind.JsxExpression; -} - -export declare namespace isJsxExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxExpression.Handle = isJsxExpression as any; - -export function isJsxText(node: Node): node is JsxText { - return node.kind === SyntaxKind.JsxText; -} - -export declare namespace isJsxText { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJsxText.Handle = isJsxText as any; - -export function isSyntaxList(node: Node): node is SyntaxList { - return node.kind === SyntaxKind.SyntaxList; -} - -export declare namespace isSyntaxList { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSyntaxList.Handle = isSyntaxList as any; - -export function isJSDoc(node: Node): node is JSDoc { - return node.kind === SyntaxKind.JSDoc; -} - -export declare namespace isJSDoc { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDoc.Handle = isJSDoc as any; - -export function isJSDocTypeExpression(node: Node): node is JSDocTypeExpression { - return node.kind === SyntaxKind.JSDocTypeExpression; -} - -export declare namespace isJSDocTypeExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocTypeExpression.Handle = isJSDocTypeExpression as any; - -export function isJSDocNonNullableType(node: Node): node is JSDocNonNullableType { - return node.kind === SyntaxKind.JSDocNonNullableType; -} - -export declare namespace isJSDocNonNullableType { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocNonNullableType.Handle = isJSDocNonNullableType as any; - -export function isJSDocNullableType(node: Node): node is JSDocNullableType { - return node.kind === SyntaxKind.JSDocNullableType; -} - -export declare namespace isJSDocNullableType { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocNullableType.Handle = isJSDocNullableType as any; - -export function isJSDocAllType(node: Node): node is JSDocAllType { - return node.kind === SyntaxKind.JSDocAllType; -} - -export declare namespace isJSDocAllType { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocAllType.Handle = isJSDocAllType as any; - -export function isJSDocVariadicType(node: Node): node is JSDocVariadicType { - return node.kind === SyntaxKind.JSDocVariadicType; -} - -export declare namespace isJSDocVariadicType { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocVariadicType.Handle = isJSDocVariadicType as any; - -export function isJSDocOptionalType(node: Node): node is JSDocOptionalType { - return node.kind === SyntaxKind.JSDocOptionalType; -} - -export declare namespace isJSDocOptionalType { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocOptionalType.Handle = isJSDocOptionalType as any; - -export function isJSDocTypeTag(node: Node): node is JSDocTypeTag { - return node.kind === SyntaxKind.JSDocTypeTag; -} - -export declare namespace isJSDocTypeTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocTypeTag.Handle = isJSDocTypeTag as any; - -export function isJSDocUnknownTag(node: Node): node is JSDocUnknownTag { - return node.kind === SyntaxKind.JSDocUnknownTag; -} - -export declare namespace isJSDocUnknownTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocUnknownTag.Handle = isJSDocUnknownTag as any; - -export function isJSDocTemplateTag(node: Node): node is JSDocTemplateTag { - return node.kind === SyntaxKind.JSDocTemplateTag; -} - -export declare namespace isJSDocTemplateTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocTemplateTag.Handle = isJSDocTemplateTag as any; - -export function isJSDocReturnTag(node: Node): node is JSDocReturnTag { - return node.kind === SyntaxKind.JSDocReturnTag; -} - -export declare namespace isJSDocReturnTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocReturnTag.Handle = isJSDocReturnTag as any; - -export function isJSDocPublicTag(node: Node): node is JSDocPublicTag { - return node.kind === SyntaxKind.JSDocPublicTag; -} - -export declare namespace isJSDocPublicTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocPublicTag.Handle = isJSDocPublicTag as any; - -export function isJSDocPrivateTag(node: Node): node is JSDocPrivateTag { - return node.kind === SyntaxKind.JSDocPrivateTag; -} - -export declare namespace isJSDocPrivateTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocPrivateTag.Handle = isJSDocPrivateTag as any; - -export function isJSDocProtectedTag(node: Node): node is JSDocProtectedTag { - return node.kind === SyntaxKind.JSDocProtectedTag; -} - -export declare namespace isJSDocProtectedTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocProtectedTag.Handle = isJSDocProtectedTag as any; - -export function isJSDocReadonlyTag(node: Node): node is JSDocReadonlyTag { - return node.kind === SyntaxKind.JSDocReadonlyTag; -} - -export declare namespace isJSDocReadonlyTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocReadonlyTag.Handle = isJSDocReadonlyTag as any; - -export function isJSDocOverrideTag(node: Node): node is JSDocOverrideTag { - return node.kind === SyntaxKind.JSDocOverrideTag; -} - -export declare namespace isJSDocOverrideTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocOverrideTag.Handle = isJSDocOverrideTag as any; - -export function isJSDocDeprecatedTag(node: Node): node is JSDocDeprecatedTag { - return node.kind === SyntaxKind.JSDocDeprecatedTag; -} - -export declare namespace isJSDocDeprecatedTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocDeprecatedTag.Handle = isJSDocDeprecatedTag as any; - -export function isJSDocSeeTag(node: Node): node is JSDocSeeTag { - return node.kind === SyntaxKind.JSDocSeeTag; -} - -export declare namespace isJSDocSeeTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocSeeTag.Handle = isJSDocSeeTag as any; - -export function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag { - return node.kind === SyntaxKind.JSDocImplementsTag; -} - -export declare namespace isJSDocImplementsTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocImplementsTag.Handle = isJSDocImplementsTag as any; - -export function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag { - return node.kind === SyntaxKind.JSDocAugmentsTag; -} - -export declare namespace isJSDocAugmentsTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocAugmentsTag.Handle = isJSDocAugmentsTag as any; - -export function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag { - return node.kind === SyntaxKind.JSDocSatisfiesTag; -} - -export declare namespace isJSDocSatisfiesTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocSatisfiesTag.Handle = isJSDocSatisfiesTag as any; - -export function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag { - return node.kind === SyntaxKind.JSDocThrowsTag; -} - -export declare namespace isJSDocThrowsTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocThrowsTag.Handle = isJSDocThrowsTag as any; - -export function isJSDocThisTag(node: Node): node is JSDocThisTag { - return node.kind === SyntaxKind.JSDocThisTag; -} - -export declare namespace isJSDocThisTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocThisTag.Handle = isJSDocThisTag as any; - -export function isJSDocImportTag(node: Node): node is JSDocImportTag { - return node.kind === SyntaxKind.JSDocImportTag; -} - -export declare namespace isJSDocImportTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocImportTag.Handle = isJSDocImportTag as any; - -export function isJSDocCallbackTag(node: Node): node is JSDocCallbackTag { - return node.kind === SyntaxKind.JSDocCallbackTag; -} - -export declare namespace isJSDocCallbackTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocCallbackTag.Handle = isJSDocCallbackTag as any; - -export function isJSDocOverloadTag(node: Node): node is JSDocOverloadTag { - return node.kind === SyntaxKind.JSDocOverloadTag; -} - -export declare namespace isJSDocOverloadTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocOverloadTag.Handle = isJSDocOverloadTag as any; - -export function isJSDocTypedefTag(node: Node): node is JSDocTypedefTag { - return node.kind === SyntaxKind.JSDocTypedefTag; -} - -export declare namespace isJSDocTypedefTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocTypedefTag.Handle = isJSDocTypedefTag as any; - -export function isJSDocSignature(node: Node): node is JSDocSignature { - return node.kind === SyntaxKind.JSDocSignature; -} - -export declare namespace isJSDocSignature { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocSignature.Handle = isJSDocSignature as any; - -export function isJSDocNameReference(node: Node): node is JSDocNameReference { - return node.kind === SyntaxKind.JSDocNameReference; -} - -export declare namespace isJSDocNameReference { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocNameReference.Handle = isJSDocNameReference as any; - -export function isSourceFile(node: Node): node is SourceFile { - return node.kind === SyntaxKind.SourceFile; -} - -export declare namespace isSourceFile { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSourceFile.Handle = isSourceFile as any; - -export function isModuleDeclaration(node: Node): node is ModuleDeclaration { - return node.kind === SyntaxKind.ModuleDeclaration; -} - -export declare namespace isModuleDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isModuleDeclaration.Handle = isModuleDeclaration as any; - -export function isImportEqualsDeclaration(node: Node): node is ImportEqualsDeclaration { - return node.kind === SyntaxKind.ImportEqualsDeclaration; -} - -export declare namespace isImportEqualsDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportEqualsDeclaration.Handle = isImportEqualsDeclaration as any; - -export function isExportDeclaration(node: Node): node is ExportDeclaration { - return node.kind === SyntaxKind.ExportDeclaration; -} - -export declare namespace isExportDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isExportDeclaration.Handle = isExportDeclaration as any; - -export function isImportTypeNode(node: Node): node is ImportTypeNode { - return node.kind === SyntaxKind.ImportType; -} - -export declare namespace isImportTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportTypeNode.Handle = isImportTypeNode as any; - -export function isImportClause(node: Node): node is ImportClause { - return node.kind === SyntaxKind.ImportClause; -} - -export declare namespace isImportClause { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportClause.Handle = isImportClause as any; - -export function isImportSpecifier(node: Node): node is ImportSpecifier { - return node.kind === SyntaxKind.ImportSpecifier; -} - -export declare namespace isImportSpecifier { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isImportSpecifier.Handle = isImportSpecifier as any; - -export function isJSDocText(node: Node): node is JSDocText { - return node.kind === SyntaxKind.JSDocText; -} - -export declare namespace isJSDocText { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocText.Handle = isJSDocText as any; - -export function isJSDocLink(node: Node): node is JSDocLink { - return node.kind === SyntaxKind.JSDocLink; -} - -export declare namespace isJSDocLink { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocLink.Handle = isJSDocLink as any; - -export function isJSDocLinkPlain(node: Node): node is JSDocLinkPlain { - return node.kind === SyntaxKind.JSDocLinkPlain; -} - -export declare namespace isJSDocLinkPlain { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocLinkPlain.Handle = isJSDocLinkPlain as any; - -export function isJSDocLinkCode(node: Node): node is JSDocLinkCode { - return node.kind === SyntaxKind.JSDocLinkCode; -} - -export declare namespace isJSDocLinkCode { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocLinkCode.Handle = isJSDocLinkCode as any; - -export function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration { - return node.kind === SyntaxKind.TypeParameter; -} - -export declare namespace isTypeParameterDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isTypeParameterDeclaration.Handle = isTypeParameterDeclaration as any; - -export function isSyntheticReferenceExpression(node: Node): node is SyntheticReferenceExpression { - return node.kind === SyntaxKind.SyntheticReferenceExpression; -} - -export declare namespace isSyntheticReferenceExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isSyntheticReferenceExpression.Handle = isSyntheticReferenceExpression as any; - -export function isJSDocTypeLiteral(node: Node): node is JSDocTypeLiteral { - return node.kind === SyntaxKind.JSDocTypeLiteral; -} - -export declare namespace isJSDocTypeLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocTypeLiteral.Handle = isJSDocTypeLiteral as any; - -export function isForInStatement(node: Node): node is ForInStatement { - return node.kind === SyntaxKind.ForInStatement; -} - -export declare namespace isForInStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isForInStatement.Handle = isForInStatement as any; - -export function isForOfStatement(node: Node): node is ForOfStatement { - return node.kind === SyntaxKind.ForOfStatement; -} - -export declare namespace isForOfStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isForOfStatement.Handle = isForOfStatement as any; - -export function isCaseClause(node: Node): node is CaseClause { - return node.kind === SyntaxKind.CaseClause; -} - -export declare namespace isCaseClause { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isCaseClause.Handle = isCaseClause as any; - -export function isDefaultClause(node: Node): node is DefaultClause { - return node.kind === SyntaxKind.DefaultClause; -} - -export declare namespace isDefaultClause { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isDefaultClause.Handle = isDefaultClause as any; - -export function isObjectBindingPattern(node: Node): node is ObjectBindingPattern { - return node.kind === SyntaxKind.ObjectBindingPattern; -} - -export declare namespace isObjectBindingPattern { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isObjectBindingPattern.Handle = isObjectBindingPattern as any; - -export function isArrayBindingPattern(node: Node): node is ArrayBindingPattern { - return node.kind === SyntaxKind.ArrayBindingPattern; -} - -export declare namespace isArrayBindingPattern { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isArrayBindingPattern.Handle = isArrayBindingPattern as any; - -export function isJSDocParameterTag(node: Node): node is JSDocParameterTag { - return node.kind === SyntaxKind.JSDocParameterTag; -} - -export declare namespace isJSDocParameterTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocParameterTag.Handle = isJSDocParameterTag as any; - -export function isJSDocPropertyTag(node: Node): node is JSDocPropertyTag { - return node.kind === SyntaxKind.JSDocPropertyTag; -} - -export declare namespace isJSDocPropertyTag { - function Handle>(node: T): node is SpecializeNodeHandle; -} -isJSDocPropertyTag.Handle = isJSDocPropertyTag as any; - -export function isHeritageClauseElement(node: Node): node is HeritageClauseElement { - return node.kind === SyntaxKind.ExpressionWithTypeArguments || node.kind === SyntaxKind.TypeReference; -} - -export declare namespace isHeritageClauseElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isHeritageClauseElement.Handle = isHeritageClauseElement as any; - -export function isAccessExpression(node: Node): node is AccessExpression { - return node.kind === SyntaxKind.PropertyAccessExpression || node.kind === SyntaxKind.ElementAccessExpression; -} - -export declare namespace isAccessExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAccessExpression.Handle = isAccessExpression as any; - -export function isDeclarationName(node: Node): node is DeclarationName { - const kind = node.kind; - return kind === SyntaxKind.Identifier || kind === SyntaxKind.PrivateIdentifier || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.ComputedPropertyName || kind === SyntaxKind.ObjectBindingPattern || kind === SyntaxKind.ArrayBindingPattern || kind === SyntaxKind.PropertyAccessExpression || kind === SyntaxKind.ElementAccessExpression; -} - -export declare namespace isDeclarationName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDeclarationName.Handle = isDeclarationName as any; - -export function isModuleName(node: Node): node is ModuleName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; -} - -export declare namespace isModuleName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModuleName.Handle = isModuleName as any; - -export function isModuleExportName(node: Node): node is ModuleExportName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; -} - -export declare namespace isModuleExportName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModuleExportName.Handle = isModuleExportName as any; - -export function isPropertyName(node: Node): node is PropertyName { - const kind = node.kind; - return kind === SyntaxKind.Identifier || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.ComputedPropertyName || kind === SyntaxKind.PrivateIdentifier || kind === SyntaxKind.BigIntLiteral; -} - -export declare namespace isPropertyName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPropertyName.Handle = isPropertyName as any; - -export function isModuleBody(node: Node): node is ModuleBody { - return node.kind === SyntaxKind.ModuleBlock || node.kind === SyntaxKind.ModuleDeclaration; -} - -export declare namespace isModuleBody { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModuleBody.Handle = isModuleBody as any; - -export function isJSDocFullName(node: Node): node is JSDocFullName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ModuleDeclaration; -} - -export declare namespace isJSDocFullName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJSDocFullName.Handle = isJSDocFullName as any; - -export function isModuleReference(node: Node): node is ModuleReference { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.ExternalModuleReference; -} - -export declare namespace isModuleReference { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModuleReference.Handle = isModuleReference as any; - -export function isNamedImportBindings(node: Node): node is NamedImportBindings { - return node.kind === SyntaxKind.NamespaceImport || node.kind === SyntaxKind.NamedImports; -} - -export declare namespace isNamedImportBindings { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isNamedImportBindings.Handle = isNamedImportBindings as any; - -export function isNamedExportBindings(node: Node): node is NamedExportBindings { - return node.kind === SyntaxKind.NamespaceExport || node.kind === SyntaxKind.NamedExports; -} - -export declare namespace isNamedExportBindings { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isNamedExportBindings.Handle = isNamedExportBindings as any; - -export function isMemberName(node: Node): node is MemberName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PrivateIdentifier; -} - -export declare namespace isMemberName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isMemberName.Handle = isMemberName as any; - -export function isEntityName(node: Node): node is EntityName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName; -} - -export declare namespace isEntityName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isEntityName.Handle = isEntityName as any; - -export function isBindingName(node: Node): node is BindingName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; -} - -export declare namespace isBindingName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isBindingName.Handle = isBindingName as any; - -export function isModifierLike(node: Node): node is ModifierLike { - const kind = node.kind; - return kind === SyntaxKind.AbstractKeyword || kind === SyntaxKind.AccessorKeyword || kind === SyntaxKind.AsyncKeyword || kind === SyntaxKind.ConstKeyword || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.DefaultKeyword || kind === SyntaxKind.ExportKeyword || kind === SyntaxKind.InKeyword || kind === SyntaxKind.PrivateKeyword || kind === SyntaxKind.ProtectedKeyword || kind === SyntaxKind.PublicKeyword || kind === SyntaxKind.ReadonlyKeyword || kind === SyntaxKind.OutKeyword || kind === SyntaxKind.OverrideKeyword || kind === SyntaxKind.StaticKeyword || kind === SyntaxKind.Decorator; -} - -export declare namespace isModifierLike { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModifierLike.Handle = isModifierLike as any; - -export function isJsxChild(node: Node): node is JsxChild { - const kind = node.kind; - return kind === SyntaxKind.JsxText || kind === SyntaxKind.JsxExpression || kind === SyntaxKind.JsxElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment; -} - -export declare namespace isJsxChild { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJsxChild.Handle = isJsxChild as any; - -export function isJsxAttributeLike(node: Node): node is JsxAttributeLike { - return node.kind === SyntaxKind.JsxAttribute || node.kind === SyntaxKind.JsxSpreadAttribute; -} - -export declare namespace isJsxAttributeLike { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJsxAttributeLike.Handle = isJsxAttributeLike as any; - -export function isJsxAttributeName(node: Node): node is JsxAttributeName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.JsxNamespacedName; -} - -export declare namespace isJsxAttributeName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJsxAttributeName.Handle = isJsxAttributeName as any; - -export function isJsxAttributeValue(node: Node): node is JsxAttributeValue { - const kind = node.kind; - return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.JsxExpression || kind === SyntaxKind.JsxElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment; -} - -export declare namespace isJsxAttributeValue { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJsxAttributeValue.Handle = isJsxAttributeValue as any; - -export function isClassLikeDeclaration(node: Node): node is ClassLikeDeclaration { - return node.kind === SyntaxKind.ClassDeclaration || node.kind === SyntaxKind.ClassExpression; -} - -export declare namespace isClassLikeDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isClassLikeDeclaration.Handle = isClassLikeDeclaration as any; - -export function isAccessorDeclaration(node: Node): node is AccessorDeclaration { - return node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor; -} - -export declare namespace isAccessorDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAccessorDeclaration.Handle = isAccessorDeclaration as any; - -export function isLiteralLikeNode(node: Node): node is LiteralLikeNode { - const kind = node.kind; - return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.TemplateHead || kind === SyntaxKind.TemplateMiddle || kind === SyntaxKind.TemplateTail || kind === SyntaxKind.JsxText; -} - -export declare namespace isLiteralLikeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isLiteralLikeNode.Handle = isLiteralLikeNode as any; - -export function isLiteralExpression(node: Node): node is LiteralExpression { - const kind = node.kind; - return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral; -} - -export declare namespace isLiteralExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isLiteralExpression.Handle = isLiteralExpression as any; - -export function isUnionOrIntersectionTypeNode(node: Node): node is UnionOrIntersectionTypeNode { - return node.kind === SyntaxKind.UnionType || node.kind === SyntaxKind.IntersectionType; -} - -export declare namespace isUnionOrIntersectionTypeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isUnionOrIntersectionTypeNode.Handle = isUnionOrIntersectionTypeNode as any; - -export function isTemplateLiteralLikeNode(node: Node): node is TemplateLiteralLikeNode { - const kind = node.kind; - return isPseudoLiteralKind(kind); -} - -export declare namespace isTemplateLiteralLikeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTemplateLiteralLikeNode.Handle = isTemplateLiteralLikeNode as any; - -export function isTemplateMiddleOrTail(node: Node): node is TemplateMiddleOrTail { - return node.kind === SyntaxKind.TemplateMiddle || node.kind === SyntaxKind.TemplateTail; -} - -export declare namespace isTemplateMiddleOrTail { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTemplateMiddleOrTail.Handle = isTemplateMiddleOrTail as any; - -export function isTemplateLiteral(node: Node): node is TemplateLiteral { - return node.kind === SyntaxKind.TemplateExpression || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; -} - -export declare namespace isTemplateLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTemplateLiteral.Handle = isTemplateLiteral as any; - -export function isTypePredicateParameterName(node: Node): node is TypePredicateParameterName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisType; -} - -export declare namespace isTypePredicateParameterName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTypePredicateParameterName.Handle = isTypePredicateParameterName as any; - -export function isImportAttributeName(node: Node): node is ImportAttributeName { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; -} - -export declare namespace isImportAttributeName { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isImportAttributeName.Handle = isImportAttributeName as any; - -export function isJSDocComment(node: Node): node is JSDocComment { - const kind = node.kind; - return kind === SyntaxKind.JSDocText || kind === SyntaxKind.JSDocLink || kind === SyntaxKind.JSDocLinkCode || kind === SyntaxKind.JSDocLinkPlain; -} - -export declare namespace isJSDocComment { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJSDocComment.Handle = isJSDocComment as any; - -export function isSignatureDeclaration(node: Node): node is SignatureDeclaration { - const kind = node.kind; - return kind === SyntaxKind.CallSignature || kind === SyntaxKind.ConstructSignature || kind === SyntaxKind.MethodSignature || kind === SyntaxKind.IndexSignature || kind === SyntaxKind.FunctionType || kind === SyntaxKind.ConstructorType || kind === SyntaxKind.FunctionDeclaration || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.Constructor || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ArrowFunction; -} - -export declare namespace isSignatureDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isSignatureDeclaration.Handle = isSignatureDeclaration as any; - -export function isStringLiteralLikeNode(node: Node): node is StringLiteralLikeNode { - return node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; -} - -export declare namespace isStringLiteralLikeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isStringLiteralLikeNode.Handle = isStringLiteralLikeNode as any; - -export function isNumericOrStringLikeLiteral(node: Node): node is NumericOrStringLikeLiteral { - return node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral || node.kind === SyntaxKind.NumericLiteral; -} - -export declare namespace isNumericOrStringLikeLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isNumericOrStringLikeLiteral.Handle = isNumericOrStringLikeLiteral as any; - -export function isObjectLiteralLikeNode(node: Node): node is ObjectLiteralLikeNode { - return node.kind === SyntaxKind.ObjectLiteralExpression || node.kind === SyntaxKind.ObjectBindingPattern; -} - -export declare namespace isObjectLiteralLikeNode { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isObjectLiteralLikeNode.Handle = isObjectLiteralLikeNode as any; - -export function isObjectTypeDeclaration(node: Node): node is ObjectTypeDeclaration { - const kind = node.kind; - return kind === SyntaxKind.ClassDeclaration || kind === SyntaxKind.ClassExpression || kind === SyntaxKind.InterfaceDeclaration || kind === SyntaxKind.TypeLiteral; -} - -export declare namespace isObjectTypeDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isObjectTypeDeclaration.Handle = isObjectTypeDeclaration as any; - -export function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement { - return node.kind === SyntaxKind.JsxOpeningElement || node.kind === SyntaxKind.JsxSelfClosingElement; -} - -export declare namespace isJsxOpeningLikeElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isJsxOpeningLikeElement.Handle = isJsxOpeningLikeElement as any; - -export function isNamedImportsOrExports(node: Node): node is NamedImportsOrExports { - return node.kind === SyntaxKind.NamedImports || node.kind === SyntaxKind.NamedExports; -} - -export declare namespace isNamedImportsOrExports { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isNamedImportsOrExports.Handle = isNamedImportsOrExports as any; - -export function isBreakOrContinueStatement(node: Node): node is BreakOrContinueStatement { - return node.kind === SyntaxKind.BreakStatement || node.kind === SyntaxKind.ContinueStatement; -} - -export declare namespace isBreakOrContinueStatement { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isBreakOrContinueStatement.Handle = isBreakOrContinueStatement as any; - -export function isCallLikeExpression(node: Node): node is CallLikeExpression { - const kind = node.kind; - return kind === SyntaxKind.CallExpression || kind === SyntaxKind.NewExpression || kind === SyntaxKind.TaggedTemplateExpression || kind === SyntaxKind.Decorator || kind === SyntaxKind.JsxOpeningElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.BinaryExpression; -} - -export declare namespace isCallLikeExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isCallLikeExpression.Handle = isCallLikeExpression as any; - -export function isFunctionLikeDeclaration(node: Node): node is FunctionLikeDeclaration { - const kind = node.kind; - return kind === SyntaxKind.FunctionDeclaration || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor || kind === SyntaxKind.Constructor || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ArrowFunction; -} - -export declare namespace isFunctionLikeDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isFunctionLikeDeclaration.Handle = isFunctionLikeDeclaration as any; - -export function isVariableOrParameterDeclaration(node: Node): node is VariableOrParameterDeclaration { - return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.Parameter; -} - -export declare namespace isVariableOrParameterDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isVariableOrParameterDeclaration.Handle = isVariableOrParameterDeclaration as any; - -export function isVariableOrPropertyDeclaration(node: Node): node is VariableOrPropertyDeclaration { - return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.PropertyDeclaration; -} - -export declare namespace isVariableOrPropertyDeclaration { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isVariableOrPropertyDeclaration.Handle = isVariableOrPropertyDeclaration as any; - -export function isCallOrNewExpression(node: Node): node is CallOrNewExpression { - return node.kind === SyntaxKind.CallExpression || node.kind === SyntaxKind.NewExpression; -} - -export declare namespace isCallOrNewExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isCallOrNewExpression.Handle = isCallOrNewExpression as any; - -export function isImportClauseOrBindingPattern(node: Node): node is ImportClauseOrBindingPattern { - return node.kind === SyntaxKind.ImportClause || node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; -} - -export declare namespace isImportClauseOrBindingPattern { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isImportClauseOrBindingPattern.Handle = isImportClauseOrBindingPattern as any; - -export function isAnyImportSyntax(node: Node): node is AnyImportSyntax { - return node.kind === SyntaxKind.ImportDeclaration || node.kind === SyntaxKind.JSImportDeclaration || node.kind === SyntaxKind.ImportEqualsDeclaration; -} - -export declare namespace isAnyImportSyntax { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAnyImportSyntax.Handle = isAnyImportSyntax as any; - -export function isArrayBindingElement(node: Node): node is ArrayBindingElement { - return node.kind === SyntaxKind.BindingElement || node.kind === SyntaxKind.OmittedExpression; -} - -export declare namespace isArrayBindingElement { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isArrayBindingElement.Handle = isArrayBindingElement as any; - -export function isAssertionExpression(node: Node): node is AssertionExpression { - return node.kind === SyntaxKind.TypeAssertionExpression || node.kind === SyntaxKind.AsExpression; -} - -export declare namespace isAssertionExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAssertionExpression.Handle = isAssertionExpression as any; - -export function isBooleanLiteral(node: Node): node is BooleanLiteral { - return node.kind === SyntaxKind.TrueKeyword || node.kind === SyntaxKind.FalseKeyword; -} - -export declare namespace isBooleanLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isBooleanLiteral.Handle = isBooleanLiteral as any; - -export function isDestructuringAssignment(node: Node): node is DestructuringAssignment { - return node.kind === SyntaxKind.BinaryExpression; -} - -export declare namespace isDestructuringAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDestructuringAssignment.Handle = isDestructuringAssignment as any; - -export function isLiteralToken(node: Node): node is LiteralToken { - const kind = node.kind; - return kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.JsxText || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral; -} - -export declare namespace isLiteralToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isLiteralToken.Handle = isLiteralToken as any; - -export function isModifier(node: Node): node is Modifier { - const kind = node.kind; - return isModifierKind(kind); -} - -export declare namespace isModifier { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isModifier.Handle = isModifier as any; - -export function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike { - const kind = node.kind; - return kind === SyntaxKind.PropertyAssignment || kind === SyntaxKind.ShorthandPropertyAssignment || kind === SyntaxKind.SpreadAssignment || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor; -} - -export declare namespace isObjectLiteralElementLike { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isObjectLiteralElementLike.Handle = isObjectLiteralElementLike as any; - -export function isPropertyNameLiteral(node: Node): node is PropertyNameLiteral { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral; -} - -export declare namespace isPropertyNameLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPropertyNameLiteral.Handle = isPropertyNameLiteral as any; - -export function isPseudoLiteralToken(node: Node): node is PseudoLiteralToken { - const kind = node.kind; - return isPseudoLiteralKind(kind); -} - -export declare namespace isPseudoLiteralToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPseudoLiteralToken.Handle = isPseudoLiteralToken as any; - -export function isTemplateLiteralToken(node: Node): node is TemplateLiteralToken { - const kind = node.kind; - return kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.TemplateHead || kind === SyntaxKind.TemplateMiddle || kind === SyntaxKind.TemplateTail; -} - -export declare namespace isTemplateLiteralToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTemplateLiteralToken.Handle = isTemplateLiteralToken as any; - -export function isArrayDestructuringAssignment(node: Node): node is ArrayDestructuringAssignment { - return node.kind === SyntaxKind.BinaryExpression; -} - -export declare namespace isArrayDestructuringAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isArrayDestructuringAssignment.Handle = isArrayDestructuringAssignment as any; - -export function isObjectDestructuringAssignment(node: Node): node is ObjectDestructuringAssignment { - return node.kind === SyntaxKind.BinaryExpression; -} - -export declare namespace isObjectDestructuringAssignment { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isObjectDestructuringAssignment.Handle = isObjectDestructuringAssignment as any; - -export function isFunctionBody(node: Node): node is FunctionBody { - return node.kind === SyntaxKind.Block; -} - -export declare namespace isFunctionBody { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isFunctionBody.Handle = isFunctionBody as any; - -export function isTriviaKind(kind: SyntaxKind): kind is TriviaSyntaxKind { - return kind === SyntaxKind.SingleLineCommentTrivia - || kind === SyntaxKind.MultiLineCommentTrivia - || kind === SyntaxKind.NewLineTrivia - || kind === SyntaxKind.WhitespaceTrivia - || kind === SyntaxKind.ConflictMarkerTrivia; -} - -export function isPseudoLiteralKind(kind: SyntaxKind): kind is PseudoLiteralSyntaxKind { - return kind === SyntaxKind.TemplateHead - || kind === SyntaxKind.TemplateMiddle - || kind === SyntaxKind.TemplateTail; -} - -export function isModifierKind(kind: SyntaxKind): kind is ModifierSyntaxKind { - return kind === SyntaxKind.AbstractKeyword - || kind === SyntaxKind.AccessorKeyword - || kind === SyntaxKind.AsyncKeyword - || kind === SyntaxKind.ConstKeyword - || kind === SyntaxKind.DeclareKeyword - || kind === SyntaxKind.DefaultKeyword - || kind === SyntaxKind.ExportKeyword - || kind === SyntaxKind.InKeyword - || kind === SyntaxKind.PrivateKeyword - || kind === SyntaxKind.ProtectedKeyword - || kind === SyntaxKind.PublicKeyword - || kind === SyntaxKind.ReadonlyKeyword - || kind === SyntaxKind.OutKeyword - || kind === SyntaxKind.OverrideKeyword - || kind === SyntaxKind.StaticKeyword; -} - -export function isKeywordTypeKind(kind: SyntaxKind): kind is KeywordTypeSyntaxKind { - return kind === SyntaxKind.AnyKeyword - || kind === SyntaxKind.BigIntKeyword - || kind === SyntaxKind.BooleanKeyword - || kind === SyntaxKind.IntrinsicKeyword - || kind === SyntaxKind.NeverKeyword - || kind === SyntaxKind.NumberKeyword - || kind === SyntaxKind.ObjectKeyword - || kind === SyntaxKind.StringKeyword - || kind === SyntaxKind.SymbolKeyword - || kind === SyntaxKind.UndefinedKeyword - || kind === SyntaxKind.UnknownKeyword - || kind === SyntaxKind.VoidKeyword; -} - -export function isKeywordExpressionKind(kind: SyntaxKind): kind is KeywordExpressionSyntaxKind { - return kind === SyntaxKind.NullKeyword - || kind === SyntaxKind.TrueKeyword - || kind === SyntaxKind.FalseKeyword - || kind === SyntaxKind.ThisKeyword - || kind === SyntaxKind.SuperKeyword - || kind === SyntaxKind.ImportKeyword; -} - -export function isJsxTokenKind(kind: SyntaxKind): kind is JsxTokenSyntaxKind { - return kind === SyntaxKind.LessThanSlashToken - || kind === SyntaxKind.EndOfFile - || kind === SyntaxKind.ConflictMarkerTrivia - || kind === SyntaxKind.JsxText - || kind === SyntaxKind.JsxTextAllWhiteSpaces - || kind === SyntaxKind.OpenBraceToken - || kind === SyntaxKind.LessThanToken; -} - -export function isImportPhaseModifierKind(kind: SyntaxKind): kind is ImportPhaseModifierSyntaxKind { - return kind === SyntaxKind.TypeKeyword - || kind === SyntaxKind.DeferKeyword - || kind === SyntaxKind.SourceKeyword; -} - -export function isPostfixUnaryOperator(kind: SyntaxKind): kind is PostfixUnaryOperator { - return kind === SyntaxKind.PlusPlusToken - || kind === SyntaxKind.MinusMinusToken; -} - -export function isPrefixUnaryOperator(kind: SyntaxKind): kind is PrefixUnaryOperator { - return kind === SyntaxKind.PlusToken - || kind === SyntaxKind.MinusToken - || kind === SyntaxKind.TildeToken - || kind === SyntaxKind.ExclamationToken - || kind === SyntaxKind.PlusPlusToken - || kind === SyntaxKind.MinusMinusToken; -} - -export function isAssignmentOperator(kind: SyntaxKind): kind is AssignmentOperator { - return kind === SyntaxKind.EqualsToken - || isCompoundAssignmentOperator(kind); -} - -export function isBinaryOperator(kind: SyntaxKind): kind is BinaryOperator { - return isAssignmentOperatorOrHigher(kind) - || kind === SyntaxKind.CommaToken; -} - -export function isExponentiationOperator(kind: SyntaxKind): kind is ExponentiationOperator { - return kind === SyntaxKind.AsteriskAsteriskToken; -} - -export function isMultiplicativeOperator(kind: SyntaxKind): kind is MultiplicativeOperator { - return kind === SyntaxKind.AsteriskToken - || kind === SyntaxKind.SlashToken - || kind === SyntaxKind.PercentToken; -} - -export function isMultiplicativeOperatorOrHigher(kind: SyntaxKind): kind is MultiplicativeOperatorOrHigher { - return isExponentiationOperator(kind) - || isMultiplicativeOperator(kind); -} - -export function isAdditiveOperator(kind: SyntaxKind): kind is AdditiveOperator { - return kind === SyntaxKind.PlusToken - || kind === SyntaxKind.MinusToken; -} - -export function isAdditiveOperatorOrHigher(kind: SyntaxKind): kind is AdditiveOperatorOrHigher { - return isMultiplicativeOperatorOrHigher(kind) - || isAdditiveOperator(kind); -} - -export function isShiftOperator(kind: SyntaxKind): kind is ShiftOperator { - return kind === SyntaxKind.LessThanLessThanToken - || kind === SyntaxKind.GreaterThanGreaterThanToken - || kind === SyntaxKind.GreaterThanGreaterThanGreaterThanToken; -} - -export function isShiftOperatorOrHigher(kind: SyntaxKind): kind is ShiftOperatorOrHigher { - return isAdditiveOperatorOrHigher(kind) - || isShiftOperator(kind); -} - -export function isRelationalOperator(kind: SyntaxKind): kind is RelationalOperator { - return kind === SyntaxKind.LessThanToken - || kind === SyntaxKind.LessThanEqualsToken - || kind === SyntaxKind.GreaterThanToken - || kind === SyntaxKind.GreaterThanEqualsToken - || kind === SyntaxKind.InstanceOfKeyword - || kind === SyntaxKind.InKeyword; -} - -export function isRelationalOperatorOrHigher(kind: SyntaxKind): kind is RelationalOperatorOrHigher { - return isShiftOperatorOrHigher(kind) - || isRelationalOperator(kind); -} - -export function isEqualityOperator(kind: SyntaxKind): kind is EqualityOperator { - return kind === SyntaxKind.EqualsEqualsToken - || kind === SyntaxKind.EqualsEqualsEqualsToken - || kind === SyntaxKind.ExclamationEqualsEqualsToken - || kind === SyntaxKind.ExclamationEqualsToken; -} - -export function isEqualityOperatorOrHigher(kind: SyntaxKind): kind is EqualityOperatorOrHigher { - return isRelationalOperatorOrHigher(kind) - || isEqualityOperator(kind); -} - -export function isBitwiseOperator(kind: SyntaxKind): kind is BitwiseOperator { - return kind === SyntaxKind.AmpersandToken - || kind === SyntaxKind.BarToken - || kind === SyntaxKind.CaretToken; -} - -export function isBitwiseOperatorOrHigher(kind: SyntaxKind): kind is BitwiseOperatorOrHigher { - return isEqualityOperatorOrHigher(kind) - || isBitwiseOperator(kind); -} - -export function isLogicalOperator(kind: SyntaxKind): kind is LogicalOperator { - return kind === SyntaxKind.AmpersandAmpersandToken - || kind === SyntaxKind.BarBarToken; -} - -export function isLogicalOperatorOrHigher(kind: SyntaxKind): kind is LogicalOperatorOrHigher { - return isBitwiseOperatorOrHigher(kind) - || isLogicalOperator(kind); -} - -export function isCompoundAssignmentOperator(kind: SyntaxKind): kind is CompoundAssignmentOperator { - return kind === SyntaxKind.PlusEqualsToken - || kind === SyntaxKind.MinusEqualsToken - || kind === SyntaxKind.AsteriskAsteriskEqualsToken - || kind === SyntaxKind.AsteriskEqualsToken - || kind === SyntaxKind.SlashEqualsToken - || kind === SyntaxKind.PercentEqualsToken - || kind === SyntaxKind.AmpersandEqualsToken - || kind === SyntaxKind.BarEqualsToken - || kind === SyntaxKind.CaretEqualsToken - || kind === SyntaxKind.LessThanLessThanEqualsToken - || kind === SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken - || kind === SyntaxKind.GreaterThanGreaterThanEqualsToken - || kind === SyntaxKind.BarBarEqualsToken - || kind === SyntaxKind.AmpersandAmpersandEqualsToken - || kind === SyntaxKind.QuestionQuestionEqualsToken; -} - -export function isAssignmentOperatorOrHigher(kind: SyntaxKind): kind is AssignmentOperatorOrHigher { - return kind === SyntaxKind.QuestionQuestionToken - || isLogicalOperatorOrHigher(kind) - || isAssignmentOperator(kind); -} - -export function isLogicalOrCoalescingAssignmentOperator(kind: SyntaxKind): kind is LogicalOrCoalescingAssignmentOperator { - return kind === SyntaxKind.AmpersandAmpersandEqualsToken - || kind === SyntaxKind.BarBarEqualsToken - || kind === SyntaxKind.QuestionQuestionEqualsToken; -} - -export function isLiteralKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstLiteralToken && kind <= SyntaxKind.LastLiteralToken; -} - -export function isPunctuationKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstPunctuation && kind <= SyntaxKind.LastPunctuation; -} - -export function isKeywordKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstKeyword && kind <= SyntaxKind.LastKeyword; -} - -export function isTokenKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstToken && kind <= SyntaxKind.LastToken; -} - -export function isJSDocNodeKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstJSDocNode && kind <= SyntaxKind.LastJSDocNode; -} - -export function isEndOfFile(node: Node): node is EndOfFile { - return node.kind === SyntaxKind.EndOfFile; -} - -export declare namespace isEndOfFile { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isEndOfFile.Handle = isEndOfFile as any; - -export function isDotToken(node: Node): node is DotToken { - return node.kind === SyntaxKind.DotToken; -} - -export declare namespace isDotToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDotToken.Handle = isDotToken as any; - -export function isDotDotDotToken(node: Node): node is DotDotDotToken { - return node.kind === SyntaxKind.DotDotDotToken; -} - -export declare namespace isDotDotDotToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDotDotDotToken.Handle = isDotDotDotToken as any; - -export function isQuestionToken(node: Node): node is QuestionToken { - return node.kind === SyntaxKind.QuestionToken; -} - -export declare namespace isQuestionToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isQuestionToken.Handle = isQuestionToken as any; - -export function isExclamationToken(node: Node): node is ExclamationToken { - return node.kind === SyntaxKind.ExclamationToken; -} - -export declare namespace isExclamationToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isExclamationToken.Handle = isExclamationToken as any; - -export function isColonToken(node: Node): node is ColonToken { - return node.kind === SyntaxKind.ColonToken; -} - -export declare namespace isColonToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isColonToken.Handle = isColonToken as any; - -export function isEqualsToken(node: Node): node is EqualsToken { - return node.kind === SyntaxKind.EqualsToken; -} - -export declare namespace isEqualsToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isEqualsToken.Handle = isEqualsToken as any; - -export function isAsteriskToken(node: Node): node is AsteriskToken { - return node.kind === SyntaxKind.AsteriskToken; -} - -export declare namespace isAsteriskToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAsteriskToken.Handle = isAsteriskToken as any; - -export function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken { - return node.kind === SyntaxKind.EqualsGreaterThanToken; -} - -export declare namespace isEqualsGreaterThanToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isEqualsGreaterThanToken.Handle = isEqualsGreaterThanToken as any; - -export function isPlusToken(node: Node): node is PlusToken { - return node.kind === SyntaxKind.PlusToken; -} - -export declare namespace isPlusToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPlusToken.Handle = isPlusToken as any; - -export function isMinusToken(node: Node): node is MinusToken { - return node.kind === SyntaxKind.MinusToken; -} - -export declare namespace isMinusToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isMinusToken.Handle = isMinusToken as any; - -export function isQuestionDotToken(node: Node): node is QuestionDotToken { - return node.kind === SyntaxKind.QuestionDotToken; -} - -export declare namespace isQuestionDotToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isQuestionDotToken.Handle = isQuestionDotToken as any; - -export function isAssertsKeyword(node: Node): node is AssertsKeyword { - return node.kind === SyntaxKind.AssertsKeyword; -} - -export declare namespace isAssertsKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAssertsKeyword.Handle = isAssertsKeyword as any; - -export function isAssertKeyword(node: Node): node is AssertKeyword { - return node.kind === SyntaxKind.AssertKeyword; -} - -export declare namespace isAssertKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAssertKeyword.Handle = isAssertKeyword as any; - -export function isAwaitKeyword(node: Node): node is AwaitKeyword { - return node.kind === SyntaxKind.AwaitKeyword; -} - -export declare namespace isAwaitKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAwaitKeyword.Handle = isAwaitKeyword as any; - -export function isCaseKeyword(node: Node): node is CaseKeyword { - return node.kind === SyntaxKind.CaseKeyword; -} - -export declare namespace isCaseKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isCaseKeyword.Handle = isCaseKeyword as any; - -export function isAbstractKeyword(node: Node): node is AbstractKeyword { - return node.kind === SyntaxKind.AbstractKeyword; -} - -export declare namespace isAbstractKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAbstractKeyword.Handle = isAbstractKeyword as any; - -export function isAccessorKeyword(node: Node): node is AccessorKeyword { - return node.kind === SyntaxKind.AccessorKeyword; -} - -export declare namespace isAccessorKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAccessorKeyword.Handle = isAccessorKeyword as any; - -export function isAsyncKeyword(node: Node): node is AsyncKeyword { - return node.kind === SyntaxKind.AsyncKeyword; -} - -export declare namespace isAsyncKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAsyncKeyword.Handle = isAsyncKeyword as any; - -export function isConstKeyword(node: Node): node is ConstKeyword { - return node.kind === SyntaxKind.ConstKeyword; -} - -export declare namespace isConstKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isConstKeyword.Handle = isConstKeyword as any; - -export function isDeclareKeyword(node: Node): node is DeclareKeyword { - return node.kind === SyntaxKind.DeclareKeyword; -} - -export declare namespace isDeclareKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDeclareKeyword.Handle = isDeclareKeyword as any; - -export function isDefaultKeyword(node: Node): node is DefaultKeyword { - return node.kind === SyntaxKind.DefaultKeyword; -} - -export declare namespace isDefaultKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isDefaultKeyword.Handle = isDefaultKeyword as any; - -export function isExportKeyword(node: Node): node is ExportKeyword { - return node.kind === SyntaxKind.ExportKeyword; -} - -export declare namespace isExportKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isExportKeyword.Handle = isExportKeyword as any; - -export function isInKeyword(node: Node): node is InKeyword { - return node.kind === SyntaxKind.InKeyword; -} - -export declare namespace isInKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isInKeyword.Handle = isInKeyword as any; - -export function isPrivateKeyword(node: Node): node is PrivateKeyword { - return node.kind === SyntaxKind.PrivateKeyword; -} - -export declare namespace isPrivateKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPrivateKeyword.Handle = isPrivateKeyword as any; - -export function isProtectedKeyword(node: Node): node is ProtectedKeyword { - return node.kind === SyntaxKind.ProtectedKeyword; -} - -export declare namespace isProtectedKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isProtectedKeyword.Handle = isProtectedKeyword as any; - -export function isPublicKeyword(node: Node): node is PublicKeyword { - return node.kind === SyntaxKind.PublicKeyword; -} - -export declare namespace isPublicKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isPublicKeyword.Handle = isPublicKeyword as any; - -export function isReadonlyKeyword(node: Node): node is ReadonlyKeyword { - return node.kind === SyntaxKind.ReadonlyKeyword; -} - -export declare namespace isReadonlyKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isReadonlyKeyword.Handle = isReadonlyKeyword as any; - -export function isOutKeyword(node: Node): node is OutKeyword { - return node.kind === SyntaxKind.OutKeyword; -} - -export declare namespace isOutKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isOutKeyword.Handle = isOutKeyword as any; - -export function isOverrideKeyword(node: Node): node is OverrideKeyword { - return node.kind === SyntaxKind.OverrideKeyword; -} - -export declare namespace isOverrideKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isOverrideKeyword.Handle = isOverrideKeyword as any; - -export function isStaticKeyword(node: Node): node is StaticKeyword { - return node.kind === SyntaxKind.StaticKeyword; -} - -export declare namespace isStaticKeyword { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isStaticKeyword.Handle = isStaticKeyword as any; - -export function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken { - return isBinaryOperator(node.kind); -} - -export declare namespace isBinaryOperatorToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isBinaryOperatorToken.Handle = isBinaryOperatorToken as any; - -export function isAssignmentOperatorToken(node: Node): node is AssignmentOperatorToken { - return isAssignmentOperator(node.kind); -} - -export declare namespace isAssignmentOperatorToken { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isAssignmentOperatorToken.Handle = isAssignmentOperatorToken as any; - -export function isNullLiteral(node: Node): node is NullLiteral { - return node.kind === SyntaxKind.NullKeyword; -} - -export declare namespace isNullLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isNullLiteral.Handle = isNullLiteral as any; - -export function isTrueLiteral(node: Node): node is TrueLiteral { - return node.kind === SyntaxKind.TrueKeyword; -} - -export declare namespace isTrueLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isTrueLiteral.Handle = isTrueLiteral as any; - -export function isFalseLiteral(node: Node): node is FalseLiteral { - return node.kind === SyntaxKind.FalseKeyword; -} - -export declare namespace isFalseLiteral { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isFalseLiteral.Handle = isFalseLiteral as any; - -export function isThisExpression(node: Node): node is ThisExpression { - return node.kind === SyntaxKind.ThisKeyword; -} - -export declare namespace isThisExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isThisExpression.Handle = isThisExpression as any; - -export function isSuperExpression(node: Node): node is SuperExpression { - return node.kind === SyntaxKind.SuperKeyword; -} - -export declare namespace isSuperExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isSuperExpression.Handle = isSuperExpression as any; - -export function isImportExpression(node: Node): node is ImportExpression { - return node.kind === SyntaxKind.ImportKeyword; -} - -export declare namespace isImportExpression { - function Handle>(node: T): node is SpecializeNodeHandle; -} - -isImportExpression.Handle = isImportExpression as any; +// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. + +import { SyntaxKind } from "#enums/syntaxKind"; +import type { NodeHandle as AsyncNodeHandle } from "../api/async/api.ts"; +import type { NodeHandle as SyncNodeHandle } from "../api/sync/api.ts"; +import type { + AbstractKeyword, + AccessExpression, + AccessorDeclaration, + AccessorKeyword, + AdditiveOperator, + AdditiveOperatorOrHigher, + AnyImportSyntax, + ArrayBindingElement, + ArrayBindingPattern, + ArrayDestructuringAssignment, + ArrayLiteralExpression, + ArrayTypeNode, + ArrowFunction, + AsExpression, + AssertionExpression, + AssertKeyword, + AssertsKeyword, + AssignmentOperator, + AssignmentOperatorOrHigher, + AssignmentOperatorToken, + AsteriskToken, + AsyncKeyword, + AwaitExpression, + AwaitKeyword, + BigIntLiteral, + BinaryExpression, + BinaryOperator, + BinaryOperatorToken, + BindingElement, + BindingName, + BitwiseOperator, + BitwiseOperatorOrHigher, + Block, + BooleanLiteral, + BreakOrContinueStatement, + BreakStatement, + CallExpression, + CallLikeExpression, + CallOrNewExpression, + CallSignatureDeclaration, + CaseBlock, + CaseClause, + CaseKeyword, + CatchClause, + ClassDeclaration, + ClassExpression, + ClassLikeDeclaration, + ClassStaticBlockDeclaration, + ColonToken, + CompoundAssignmentOperator, + ComputedPropertyName, + ConditionalExpression, + ConditionalTypeNode, + ConstKeyword, + ConstructorDeclaration, + ConstructorTypeNode, + ConstructSignatureDeclaration, + ContinueStatement, + DebuggerStatement, + DeclarationName, + DeclareKeyword, + Decorator, + DefaultClause, + DefaultKeyword, + DeleteExpression, + DestructuringAssignment, + DoStatement, + DotDotDotToken, + DotToken, + ElementAccessExpression, + EmptyStatement, + EndOfFile, + EntityName, + EnumDeclaration, + EnumMember, + EqualityOperator, + EqualityOperatorOrHigher, + EqualsGreaterThanToken, + EqualsToken, + ExclamationToken, + ExponentiationOperator, + ExportAssignment, + ExportDeclaration, + ExportKeyword, + ExportSpecifier, + ExpressionStatement, + ExpressionWithTypeArguments, + ExternalModuleReference, + FalseLiteral, + ForInStatement, + ForOfStatement, + ForStatement, + FunctionBody, + FunctionDeclaration, + FunctionExpression, + FunctionLikeDeclaration, + FunctionTypeNode, + GetAccessorDeclaration, + HeritageClause, + HeritageClauseElement, + Identifier, + IfStatement, + ImportAttribute, + ImportAttributeName, + ImportAttributes, + ImportClause, + ImportClauseOrBindingPattern, + ImportDeclaration, + ImportEqualsDeclaration, + ImportExpression, + ImportPhaseModifierSyntaxKind, + ImportSpecifier, + ImportTypeNode, + IndexedAccessTypeNode, + IndexSignatureDeclaration, + InferTypeNode, + InKeyword, + InterfaceDeclaration, + IntersectionTypeNode, + JSDoc, + JSDocAllType, + JSDocAugmentsTag, + JSDocCallbackTag, + JSDocComment, + JSDocDeprecatedTag, + JSDocFullName, + JSDocImplementsTag, + JSDocImportTag, + JSDocLink, + JSDocLinkCode, + JSDocLinkPlain, + JSDocNameReference, + JSDocNonNullableType, + JSDocNullableType, + JSDocOptionalType, + JSDocOverloadTag, + JSDocOverrideTag, + JSDocParameterTag, + JSDocPrivateTag, + JSDocPropertyTag, + JSDocProtectedTag, + JSDocPublicTag, + JSDocReadonlyTag, + JSDocReturnTag, + JSDocSatisfiesTag, + JSDocSeeTag, + JSDocSignature, + JSDocTemplateTag, + JSDocText, + JSDocThisTag, + JSDocThrowsTag, + JSDocTypedefTag, + JSDocTypeExpression, + JSDocTypeLiteral, + JSDocTypeTag, + JSDocUnknownTag, + JSDocVariadicType, + JsxAttribute, + JsxAttributeLike, + JsxAttributeName, + JsxAttributes, + JsxAttributeValue, + JsxChild, + JsxClosingElement, + JsxClosingFragment, + JsxElement, + JsxExpression, + JsxFragment, + JsxNamespacedName, + JsxOpeningElement, + JsxOpeningFragment, + JsxOpeningLikeElement, + JsxSelfClosingElement, + JsxSpreadAttribute, + JsxText, + JsxTokenSyntaxKind, + KeywordExpression, + KeywordExpressionSyntaxKind, + KeywordTypeNode, + KeywordTypeSyntaxKind, + LabeledStatement, + LiteralExpression, + LiteralLikeNode, + LiteralToken, + LiteralTypeNode, + LogicalOperator, + LogicalOperatorOrHigher, + LogicalOrCoalescingAssignmentOperator, + MappedTypeNode, + MemberName, + MetaProperty, + MethodDeclaration, + MethodSignatureDeclaration, + MinusToken, + MissingDeclaration, + Modifier, + ModifierLike, + ModifierSyntaxKind, + ModuleBlock, + ModuleBody, + ModuleDeclaration, + ModuleExportName, + ModuleName, + ModuleReference, + MultiplicativeOperator, + MultiplicativeOperatorOrHigher, + NamedExportBindings, + NamedExports, + NamedImportBindings, + NamedImports, + NamedImportsOrExports, + NamedTupleMember, + NamespaceExport, + NamespaceExportDeclaration, + NamespaceImport, + NewExpression, + Node, + NonNullExpression, + NoSubstitutionTemplateLiteral, + NotEmittedStatement, + NotEmittedTypeElement, + NullLiteral, + NumericLiteral, + NumericOrStringLikeLiteral, + ObjectBindingPattern, + ObjectDestructuringAssignment, + ObjectLiteralElementLike, + ObjectLiteralExpression, + ObjectLiteralLikeNode, + ObjectTypeDeclaration, + OmittedExpression, + OptionalTypeNode, + OutKeyword, + OverrideKeyword, + ParameterDeclaration, + ParenthesizedExpression, + ParenthesizedTypeNode, + PartiallyEmittedExpression, + PlusToken, + PostfixUnaryExpression, + PostfixUnaryOperator, + PrefixUnaryExpression, + PrefixUnaryOperator, + PrivateIdentifier, + PrivateKeyword, + PropertyAccessExpression, + PropertyAssignment, + PropertyDeclaration, + PropertyName, + PropertyNameLiteral, + PropertySignatureDeclaration, + ProtectedKeyword, + PseudoLiteralSyntaxKind, + PseudoLiteralToken, + PublicKeyword, + QualifiedName, + QuestionDotToken, + QuestionToken, + ReadonlyKeyword, + RegularExpressionLiteral, + RelationalOperator, + RelationalOperatorOrHigher, + RestTypeNode, + ReturnStatement, + SatisfiesExpression, + SemicolonClassElement, + SetAccessorDeclaration, + ShiftOperator, + ShiftOperatorOrHigher, + ShorthandPropertyAssignment, + SignatureDeclaration, + SourceFile, + SpreadAssignment, + SpreadElement, + StaticKeyword, + StringLiteral, + StringLiteralLikeNode, + SuperExpression, + SwitchStatement, + SyntaxList, + SyntheticExpression, + SyntheticReferenceExpression, + TaggedTemplateExpression, + TemplateExpression, + TemplateHead, + TemplateLiteral, + TemplateLiteralLikeNode, + TemplateLiteralToken, + TemplateLiteralTypeNode, + TemplateLiteralTypeSpan, + TemplateMiddle, + TemplateMiddleOrTail, + TemplateSpan, + TemplateTail, + ThisExpression, + ThisTypeNode, + ThrowStatement, + Token, + TriviaSyntaxKind, + TrueLiteral, + TryStatement, + TupleTypeNode, + TypeAliasDeclaration, + TypeAssertion, + TypeLiteralNode, + TypeOfExpression, + TypeOperatorNode, + TypeParameterDeclaration, + TypePredicateNode, + TypePredicateParameterName, + TypeQueryNode, + TypeReferenceNode, + UnionOrIntersectionTypeNode, + UnionTypeNode, + VariableDeclaration, + VariableDeclarationList, + VariableOrParameterDeclaration, + VariableOrPropertyDeclaration, + VariableStatement, + VoidExpression, + WhileStatement, + WithStatement, + YieldExpression, +} from "./ast.ts"; +type NodeHandleLike = { kind: SyntaxKind; resolve(...args: any): any; }; +type SpecializeNodeHandle, U extends Node> = T extends AsyncNodeHandle ? AsyncNodeHandle & T : SyncNodeHandle & T; + +export function isToken(node: Node): node is Token { + return isTokenKind(node.kind); +} + +export declare namespace isToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isToken.Handle = isToken as any; + +export function isIdentifier(node: Node): node is Identifier { + return node.kind === SyntaxKind.Identifier; +} + +export declare namespace isIdentifier { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isIdentifier.Handle = isIdentifier as any; + +export function isPrivateIdentifier(node: Node): node is PrivateIdentifier { + return node.kind === SyntaxKind.PrivateIdentifier; +} + +export declare namespace isPrivateIdentifier { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPrivateIdentifier.Handle = isPrivateIdentifier as any; + +export function isQualifiedName(node: Node): node is QualifiedName { + return node.kind === SyntaxKind.QualifiedName; +} + +export declare namespace isQualifiedName { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isQualifiedName.Handle = isQualifiedName as any; + +export function isComputedPropertyName(node: Node): node is ComputedPropertyName { + return node.kind === SyntaxKind.ComputedPropertyName; +} + +export declare namespace isComputedPropertyName { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isComputedPropertyName.Handle = isComputedPropertyName as any; + +export function isDecorator(node: Node): node is Decorator { + return node.kind === SyntaxKind.Decorator; +} + +export declare namespace isDecorator { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isDecorator.Handle = isDecorator as any; + +export function isEmptyStatement(node: Node): node is EmptyStatement { + return node.kind === SyntaxKind.EmptyStatement; +} + +export declare namespace isEmptyStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isEmptyStatement.Handle = isEmptyStatement as any; + +export function isIfStatement(node: Node): node is IfStatement { + return node.kind === SyntaxKind.IfStatement; +} + +export declare namespace isIfStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isIfStatement.Handle = isIfStatement as any; + +export function isDoStatement(node: Node): node is DoStatement { + return node.kind === SyntaxKind.DoStatement; +} + +export declare namespace isDoStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isDoStatement.Handle = isDoStatement as any; + +export function isWhileStatement(node: Node): node is WhileStatement { + return node.kind === SyntaxKind.WhileStatement; +} + +export declare namespace isWhileStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isWhileStatement.Handle = isWhileStatement as any; + +export function isForStatement(node: Node): node is ForStatement { + return node.kind === SyntaxKind.ForStatement; +} + +export declare namespace isForStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isForStatement.Handle = isForStatement as any; + +export function isBreakStatement(node: Node): node is BreakStatement { + return node.kind === SyntaxKind.BreakStatement; +} + +export declare namespace isBreakStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isBreakStatement.Handle = isBreakStatement as any; + +export function isContinueStatement(node: Node): node is ContinueStatement { + return node.kind === SyntaxKind.ContinueStatement; +} + +export declare namespace isContinueStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isContinueStatement.Handle = isContinueStatement as any; + +export function isReturnStatement(node: Node): node is ReturnStatement { + return node.kind === SyntaxKind.ReturnStatement; +} + +export declare namespace isReturnStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isReturnStatement.Handle = isReturnStatement as any; + +export function isWithStatement(node: Node): node is WithStatement { + return node.kind === SyntaxKind.WithStatement; +} + +export declare namespace isWithStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isWithStatement.Handle = isWithStatement as any; + +export function isSwitchStatement(node: Node): node is SwitchStatement { + return node.kind === SyntaxKind.SwitchStatement; +} + +export declare namespace isSwitchStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSwitchStatement.Handle = isSwitchStatement as any; + +export function isCaseBlock(node: Node): node is CaseBlock { + return node.kind === SyntaxKind.CaseBlock; +} + +export declare namespace isCaseBlock { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isCaseBlock.Handle = isCaseBlock as any; + +export function isThrowStatement(node: Node): node is ThrowStatement { + return node.kind === SyntaxKind.ThrowStatement; +} + +export declare namespace isThrowStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isThrowStatement.Handle = isThrowStatement as any; + +export function isTryStatement(node: Node): node is TryStatement { + return node.kind === SyntaxKind.TryStatement; +} + +export declare namespace isTryStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTryStatement.Handle = isTryStatement as any; + +export function isCatchClause(node: Node): node is CatchClause { + return node.kind === SyntaxKind.CatchClause; +} + +export declare namespace isCatchClause { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isCatchClause.Handle = isCatchClause as any; + +export function isDebuggerStatement(node: Node): node is DebuggerStatement { + return node.kind === SyntaxKind.DebuggerStatement; +} + +export declare namespace isDebuggerStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isDebuggerStatement.Handle = isDebuggerStatement as any; + +export function isLabeledStatement(node: Node): node is LabeledStatement { + return node.kind === SyntaxKind.LabeledStatement; +} + +export declare namespace isLabeledStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isLabeledStatement.Handle = isLabeledStatement as any; + +export function isExpressionStatement(node: Node): node is ExpressionStatement { + return node.kind === SyntaxKind.ExpressionStatement; +} + +export declare namespace isExpressionStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExpressionStatement.Handle = isExpressionStatement as any; + +export function isBlock(node: Node): node is Block { + return node.kind === SyntaxKind.Block; +} + +export declare namespace isBlock { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isBlock.Handle = isBlock as any; + +export function isVariableStatement(node: Node): node is VariableStatement { + return node.kind === SyntaxKind.VariableStatement; +} + +export declare namespace isVariableStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isVariableStatement.Handle = isVariableStatement as any; + +export function isVariableDeclaration(node: Node): node is VariableDeclaration { + return node.kind === SyntaxKind.VariableDeclaration; +} + +export declare namespace isVariableDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isVariableDeclaration.Handle = isVariableDeclaration as any; + +export function isVariableDeclarationList(node: Node): node is VariableDeclarationList { + return node.kind === SyntaxKind.VariableDeclarationList; +} + +export declare namespace isVariableDeclarationList { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isVariableDeclarationList.Handle = isVariableDeclarationList as any; + +export function isParameterDeclaration(node: Node): node is ParameterDeclaration { + return node.kind === SyntaxKind.Parameter; +} + +export declare namespace isParameterDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isParameterDeclaration.Handle = isParameterDeclaration as any; + +export function isBindingElement(node: Node): node is BindingElement { + return node.kind === SyntaxKind.BindingElement; +} + +export declare namespace isBindingElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isBindingElement.Handle = isBindingElement as any; + +export function isMissingDeclaration(node: Node): node is MissingDeclaration { + return node.kind === SyntaxKind.MissingDeclaration; +} + +export declare namespace isMissingDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isMissingDeclaration.Handle = isMissingDeclaration as any; + +export function isFunctionDeclaration(node: Node): node is FunctionDeclaration { + return node.kind === SyntaxKind.FunctionDeclaration; +} + +export declare namespace isFunctionDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isFunctionDeclaration.Handle = isFunctionDeclaration as any; + +export function isClassDeclaration(node: Node): node is ClassDeclaration { + return node.kind === SyntaxKind.ClassDeclaration; +} + +export declare namespace isClassDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isClassDeclaration.Handle = isClassDeclaration as any; + +export function isClassExpression(node: Node): node is ClassExpression { + return node.kind === SyntaxKind.ClassExpression; +} + +export declare namespace isClassExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isClassExpression.Handle = isClassExpression as any; + +export function isHeritageClause(node: Node): node is HeritageClause { + return node.kind === SyntaxKind.HeritageClause; +} + +export declare namespace isHeritageClause { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isHeritageClause.Handle = isHeritageClause as any; + +export function isInterfaceDeclaration(node: Node): node is InterfaceDeclaration { + return node.kind === SyntaxKind.InterfaceDeclaration; +} + +export declare namespace isInterfaceDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isInterfaceDeclaration.Handle = isInterfaceDeclaration as any; + +export function isTypeAliasDeclaration(node: Node): node is TypeAliasDeclaration { + switch (node.kind) { + case SyntaxKind.TypeAliasDeclaration: + case SyntaxKind.JSTypeAliasDeclaration: + return true; + default: + return false; + } +} + +export declare namespace isTypeAliasDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeAliasDeclaration.Handle = isTypeAliasDeclaration as any; + +export function isEnumMember(node: Node): node is EnumMember { + return node.kind === SyntaxKind.EnumMember; +} + +export declare namespace isEnumMember { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isEnumMember.Handle = isEnumMember as any; + +export function isEnumDeclaration(node: Node): node is EnumDeclaration { + return node.kind === SyntaxKind.EnumDeclaration; +} + +export declare namespace isEnumDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isEnumDeclaration.Handle = isEnumDeclaration as any; + +export function isModuleBlock(node: Node): node is ModuleBlock { + return node.kind === SyntaxKind.ModuleBlock; +} + +export declare namespace isModuleBlock { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isModuleBlock.Handle = isModuleBlock as any; + +export function isNotEmittedStatement(node: Node): node is NotEmittedStatement { + return node.kind === SyntaxKind.NotEmittedStatement; +} + +export declare namespace isNotEmittedStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNotEmittedStatement.Handle = isNotEmittedStatement as any; + +export function isNotEmittedTypeElement(node: Node): node is NotEmittedTypeElement { + return node.kind === SyntaxKind.NotEmittedTypeElement; +} + +export declare namespace isNotEmittedTypeElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNotEmittedTypeElement.Handle = isNotEmittedTypeElement as any; + +export function isImportDeclaration(node: Node): node is ImportDeclaration { + switch (node.kind) { + case SyntaxKind.ImportDeclaration: + case SyntaxKind.JSImportDeclaration: + return true; + default: + return false; + } +} + +export declare namespace isImportDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportDeclaration.Handle = isImportDeclaration as any; + +export function isExternalModuleReference(node: Node): node is ExternalModuleReference { + return node.kind === SyntaxKind.ExternalModuleReference; +} + +export declare namespace isExternalModuleReference { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExternalModuleReference.Handle = isExternalModuleReference as any; + +export function isNamespaceImport(node: Node): node is NamespaceImport { + return node.kind === SyntaxKind.NamespaceImport; +} + +export declare namespace isNamespaceImport { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamespaceImport.Handle = isNamespaceImport as any; + +export function isNamedImports(node: Node): node is NamedImports { + return node.kind === SyntaxKind.NamedImports; +} + +export declare namespace isNamedImports { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamedImports.Handle = isNamedImports as any; + +export function isExportAssignment(node: Node): node is ExportAssignment { + return node.kind === SyntaxKind.ExportAssignment; +} + +export declare namespace isExportAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExportAssignment.Handle = isExportAssignment as any; + +export function isNamespaceExportDeclaration(node: Node): node is NamespaceExportDeclaration { + return node.kind === SyntaxKind.NamespaceExportDeclaration; +} + +export declare namespace isNamespaceExportDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamespaceExportDeclaration.Handle = isNamespaceExportDeclaration as any; + +export function isNamespaceExport(node: Node): node is NamespaceExport { + return node.kind === SyntaxKind.NamespaceExport; +} + +export declare namespace isNamespaceExport { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamespaceExport.Handle = isNamespaceExport as any; + +export function isNamedExports(node: Node): node is NamedExports { + return node.kind === SyntaxKind.NamedExports; +} + +export declare namespace isNamedExports { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamedExports.Handle = isNamedExports as any; + +export function isExportSpecifier(node: Node): node is ExportSpecifier { + return node.kind === SyntaxKind.ExportSpecifier; +} + +export declare namespace isExportSpecifier { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExportSpecifier.Handle = isExportSpecifier as any; + +export function isCallSignatureDeclaration(node: Node): node is CallSignatureDeclaration { + return node.kind === SyntaxKind.CallSignature; +} + +export declare namespace isCallSignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isCallSignatureDeclaration.Handle = isCallSignatureDeclaration as any; + +export function isConstructSignatureDeclaration(node: Node): node is ConstructSignatureDeclaration { + return node.kind === SyntaxKind.ConstructSignature; +} + +export declare namespace isConstructSignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isConstructSignatureDeclaration.Handle = isConstructSignatureDeclaration as any; + +export function isConstructorDeclaration(node: Node): node is ConstructorDeclaration { + return node.kind === SyntaxKind.Constructor; +} + +export declare namespace isConstructorDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isConstructorDeclaration.Handle = isConstructorDeclaration as any; + +export function isGetAccessorDeclaration(node: Node): node is GetAccessorDeclaration { + return node.kind === SyntaxKind.GetAccessor; +} + +export declare namespace isGetAccessorDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isGetAccessorDeclaration.Handle = isGetAccessorDeclaration as any; + +export function isSetAccessorDeclaration(node: Node): node is SetAccessorDeclaration { + return node.kind === SyntaxKind.SetAccessor; +} + +export declare namespace isSetAccessorDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSetAccessorDeclaration.Handle = isSetAccessorDeclaration as any; + +export function isIndexSignatureDeclaration(node: Node): node is IndexSignatureDeclaration { + return node.kind === SyntaxKind.IndexSignature; +} + +export declare namespace isIndexSignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isIndexSignatureDeclaration.Handle = isIndexSignatureDeclaration as any; + +export function isMethodSignatureDeclaration(node: Node): node is MethodSignatureDeclaration { + return node.kind === SyntaxKind.MethodSignature; +} + +export declare namespace isMethodSignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isMethodSignatureDeclaration.Handle = isMethodSignatureDeclaration as any; + +export function isMethodDeclaration(node: Node): node is MethodDeclaration { + return node.kind === SyntaxKind.MethodDeclaration; +} + +export declare namespace isMethodDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isMethodDeclaration.Handle = isMethodDeclaration as any; + +export function isPropertySignatureDeclaration(node: Node): node is PropertySignatureDeclaration { + return node.kind === SyntaxKind.PropertySignature; +} + +export declare namespace isPropertySignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPropertySignatureDeclaration.Handle = isPropertySignatureDeclaration as any; + +export function isPropertyDeclaration(node: Node): node is PropertyDeclaration { + return node.kind === SyntaxKind.PropertyDeclaration; +} + +export declare namespace isPropertyDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPropertyDeclaration.Handle = isPropertyDeclaration as any; + +export function isSemicolonClassElement(node: Node): node is SemicolonClassElement { + return node.kind === SyntaxKind.SemicolonClassElement; +} + +export declare namespace isSemicolonClassElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSemicolonClassElement.Handle = isSemicolonClassElement as any; + +export function isClassStaticBlockDeclaration(node: Node): node is ClassStaticBlockDeclaration { + return node.kind === SyntaxKind.ClassStaticBlockDeclaration; +} + +export declare namespace isClassStaticBlockDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isClassStaticBlockDeclaration.Handle = isClassStaticBlockDeclaration as any; + +export function isOmittedExpression(node: Node): node is OmittedExpression { + return node.kind === SyntaxKind.OmittedExpression; +} + +export declare namespace isOmittedExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isOmittedExpression.Handle = isOmittedExpression as any; + +export function isKeywordExpression(node: Node): node is KeywordExpression { + return isKeywordExpressionKind(node.kind); +} + +export declare namespace isKeywordExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isKeywordExpression.Handle = isKeywordExpression as any; + +export function isStringLiteral(node: Node): node is StringLiteral { + return node.kind === SyntaxKind.StringLiteral; +} + +export declare namespace isStringLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isStringLiteral.Handle = isStringLiteral as any; + +export function isNumericLiteral(node: Node): node is NumericLiteral { + return node.kind === SyntaxKind.NumericLiteral; +} + +export declare namespace isNumericLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNumericLiteral.Handle = isNumericLiteral as any; + +export function isBigIntLiteral(node: Node): node is BigIntLiteral { + return node.kind === SyntaxKind.BigIntLiteral; +} + +export declare namespace isBigIntLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isBigIntLiteral.Handle = isBigIntLiteral as any; + +export function isRegularExpressionLiteral(node: Node): node is RegularExpressionLiteral { + return node.kind === SyntaxKind.RegularExpressionLiteral; +} + +export declare namespace isRegularExpressionLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isRegularExpressionLiteral.Handle = isRegularExpressionLiteral as any; + +export function isNoSubstitutionTemplateLiteral(node: Node): node is NoSubstitutionTemplateLiteral { + return node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; +} + +export declare namespace isNoSubstitutionTemplateLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNoSubstitutionTemplateLiteral.Handle = isNoSubstitutionTemplateLiteral as any; + +export function isBinaryExpression(node: Node): node is BinaryExpression { + return node.kind === SyntaxKind.BinaryExpression; +} + +export declare namespace isBinaryExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isBinaryExpression.Handle = isBinaryExpression as any; + +export function isPrefixUnaryExpression(node: Node): node is PrefixUnaryExpression { + return node.kind === SyntaxKind.PrefixUnaryExpression; +} + +export declare namespace isPrefixUnaryExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPrefixUnaryExpression.Handle = isPrefixUnaryExpression as any; + +export function isPostfixUnaryExpression(node: Node): node is PostfixUnaryExpression { + return node.kind === SyntaxKind.PostfixUnaryExpression; +} + +export declare namespace isPostfixUnaryExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPostfixUnaryExpression.Handle = isPostfixUnaryExpression as any; + +export function isYieldExpression(node: Node): node is YieldExpression { + return node.kind === SyntaxKind.YieldExpression; +} + +export declare namespace isYieldExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isYieldExpression.Handle = isYieldExpression as any; + +export function isArrowFunction(node: Node): node is ArrowFunction { + return node.kind === SyntaxKind.ArrowFunction; +} + +export declare namespace isArrowFunction { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isArrowFunction.Handle = isArrowFunction as any; + +export function isFunctionExpression(node: Node): node is FunctionExpression { + return node.kind === SyntaxKind.FunctionExpression; +} + +export declare namespace isFunctionExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isFunctionExpression.Handle = isFunctionExpression as any; + +export function isAsExpression(node: Node): node is AsExpression { + return node.kind === SyntaxKind.AsExpression; +} + +export declare namespace isAsExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isAsExpression.Handle = isAsExpression as any; + +export function isSatisfiesExpression(node: Node): node is SatisfiesExpression { + return node.kind === SyntaxKind.SatisfiesExpression; +} + +export declare namespace isSatisfiesExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSatisfiesExpression.Handle = isSatisfiesExpression as any; + +export function isConditionalExpression(node: Node): node is ConditionalExpression { + return node.kind === SyntaxKind.ConditionalExpression; +} + +export declare namespace isConditionalExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isConditionalExpression.Handle = isConditionalExpression as any; + +export function isPropertyAccessExpression(node: Node): node is PropertyAccessExpression { + return node.kind === SyntaxKind.PropertyAccessExpression; +} + +export declare namespace isPropertyAccessExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPropertyAccessExpression.Handle = isPropertyAccessExpression as any; + +export function isElementAccessExpression(node: Node): node is ElementAccessExpression { + return node.kind === SyntaxKind.ElementAccessExpression; +} + +export declare namespace isElementAccessExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isElementAccessExpression.Handle = isElementAccessExpression as any; + +export function isCallExpression(node: Node): node is CallExpression { + return node.kind === SyntaxKind.CallExpression; +} + +export declare namespace isCallExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isCallExpression.Handle = isCallExpression as any; + +export function isNewExpression(node: Node): node is NewExpression { + return node.kind === SyntaxKind.NewExpression; +} + +export declare namespace isNewExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNewExpression.Handle = isNewExpression as any; + +export function isMetaProperty(node: Node): node is MetaProperty { + return node.kind === SyntaxKind.MetaProperty; +} + +export declare namespace isMetaProperty { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isMetaProperty.Handle = isMetaProperty as any; + +export function isNonNullExpression(node: Node): node is NonNullExpression { + return node.kind === SyntaxKind.NonNullExpression; +} + +export declare namespace isNonNullExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNonNullExpression.Handle = isNonNullExpression as any; + +export function isSpreadElement(node: Node): node is SpreadElement { + return node.kind === SyntaxKind.SpreadElement; +} + +export declare namespace isSpreadElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSpreadElement.Handle = isSpreadElement as any; + +export function isTemplateExpression(node: Node): node is TemplateExpression { + return node.kind === SyntaxKind.TemplateExpression; +} + +export declare namespace isTemplateExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateExpression.Handle = isTemplateExpression as any; + +export function isTemplateSpan(node: Node): node is TemplateSpan { + return node.kind === SyntaxKind.TemplateSpan; +} + +export declare namespace isTemplateSpan { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateSpan.Handle = isTemplateSpan as any; + +export function isTaggedTemplateExpression(node: Node): node is TaggedTemplateExpression { + return node.kind === SyntaxKind.TaggedTemplateExpression; +} + +export declare namespace isTaggedTemplateExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTaggedTemplateExpression.Handle = isTaggedTemplateExpression as any; + +export function isParenthesizedExpression(node: Node): node is ParenthesizedExpression { + return node.kind === SyntaxKind.ParenthesizedExpression; +} + +export declare namespace isParenthesizedExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isParenthesizedExpression.Handle = isParenthesizedExpression as any; + +export function isArrayLiteralExpression(node: Node): node is ArrayLiteralExpression { + return node.kind === SyntaxKind.ArrayLiteralExpression; +} + +export declare namespace isArrayLiteralExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isArrayLiteralExpression.Handle = isArrayLiteralExpression as any; + +export function isObjectLiteralExpression(node: Node): node is ObjectLiteralExpression { + return node.kind === SyntaxKind.ObjectLiteralExpression; +} + +export declare namespace isObjectLiteralExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isObjectLiteralExpression.Handle = isObjectLiteralExpression as any; + +export function isSpreadAssignment(node: Node): node is SpreadAssignment { + return node.kind === SyntaxKind.SpreadAssignment; +} + +export declare namespace isSpreadAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSpreadAssignment.Handle = isSpreadAssignment as any; + +export function isPropertyAssignment(node: Node): node is PropertyAssignment { + return node.kind === SyntaxKind.PropertyAssignment; +} + +export declare namespace isPropertyAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPropertyAssignment.Handle = isPropertyAssignment as any; + +export function isShorthandPropertyAssignment(node: Node): node is ShorthandPropertyAssignment { + return node.kind === SyntaxKind.ShorthandPropertyAssignment; +} + +export declare namespace isShorthandPropertyAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isShorthandPropertyAssignment.Handle = isShorthandPropertyAssignment as any; + +export function isDeleteExpression(node: Node): node is DeleteExpression { + return node.kind === SyntaxKind.DeleteExpression; +} + +export declare namespace isDeleteExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isDeleteExpression.Handle = isDeleteExpression as any; + +export function isTypeOfExpression(node: Node): node is TypeOfExpression { + return node.kind === SyntaxKind.TypeOfExpression; +} + +export declare namespace isTypeOfExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeOfExpression.Handle = isTypeOfExpression as any; + +export function isVoidExpression(node: Node): node is VoidExpression { + return node.kind === SyntaxKind.VoidExpression; +} + +export declare namespace isVoidExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isVoidExpression.Handle = isVoidExpression as any; + +export function isAwaitExpression(node: Node): node is AwaitExpression { + return node.kind === SyntaxKind.AwaitExpression; +} + +export declare namespace isAwaitExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isAwaitExpression.Handle = isAwaitExpression as any; + +export function isTypeAssertion(node: Node): node is TypeAssertion { + return node.kind === SyntaxKind.TypeAssertionExpression; +} + +export declare namespace isTypeAssertion { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeAssertion.Handle = isTypeAssertion as any; + +export function isKeywordTypeNode(node: Node): node is KeywordTypeNode { + return isKeywordTypeKind(node.kind); +} + +export declare namespace isKeywordTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isKeywordTypeNode.Handle = isKeywordTypeNode as any; + +export function isUnionTypeNode(node: Node): node is UnionTypeNode { + return node.kind === SyntaxKind.UnionType; +} + +export declare namespace isUnionTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isUnionTypeNode.Handle = isUnionTypeNode as any; + +export function isIntersectionTypeNode(node: Node): node is IntersectionTypeNode { + return node.kind === SyntaxKind.IntersectionType; +} + +export declare namespace isIntersectionTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isIntersectionTypeNode.Handle = isIntersectionTypeNode as any; + +export function isConditionalTypeNode(node: Node): node is ConditionalTypeNode { + return node.kind === SyntaxKind.ConditionalType; +} + +export declare namespace isConditionalTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isConditionalTypeNode.Handle = isConditionalTypeNode as any; + +export function isTypeOperatorNode(node: Node): node is TypeOperatorNode { + return node.kind === SyntaxKind.TypeOperator; +} + +export declare namespace isTypeOperatorNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeOperatorNode.Handle = isTypeOperatorNode as any; + +export function isInferTypeNode(node: Node): node is InferTypeNode { + return node.kind === SyntaxKind.InferType; +} + +export declare namespace isInferTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isInferTypeNode.Handle = isInferTypeNode as any; + +export function isArrayTypeNode(node: Node): node is ArrayTypeNode { + return node.kind === SyntaxKind.ArrayType; +} + +export declare namespace isArrayTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isArrayTypeNode.Handle = isArrayTypeNode as any; + +export function isIndexedAccessTypeNode(node: Node): node is IndexedAccessTypeNode { + return node.kind === SyntaxKind.IndexedAccessType; +} + +export declare namespace isIndexedAccessTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isIndexedAccessTypeNode.Handle = isIndexedAccessTypeNode as any; + +export function isTypeReferenceNode(node: Node): node is TypeReferenceNode { + return node.kind === SyntaxKind.TypeReference; +} + +export declare namespace isTypeReferenceNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeReferenceNode.Handle = isTypeReferenceNode as any; + +export function isExpressionWithTypeArguments(node: Node): node is ExpressionWithTypeArguments { + return node.kind === SyntaxKind.ExpressionWithTypeArguments; +} + +export declare namespace isExpressionWithTypeArguments { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExpressionWithTypeArguments.Handle = isExpressionWithTypeArguments as any; + +export function isLiteralTypeNode(node: Node): node is LiteralTypeNode { + return node.kind === SyntaxKind.LiteralType; +} + +export declare namespace isLiteralTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isLiteralTypeNode.Handle = isLiteralTypeNode as any; + +export function isThisTypeNode(node: Node): node is ThisTypeNode { + return node.kind === SyntaxKind.ThisType; +} + +export declare namespace isThisTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isThisTypeNode.Handle = isThisTypeNode as any; + +export function isTypePredicateNode(node: Node): node is TypePredicateNode { + return node.kind === SyntaxKind.TypePredicate; +} + +export declare namespace isTypePredicateNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypePredicateNode.Handle = isTypePredicateNode as any; + +export function isImportAttribute(node: Node): node is ImportAttribute { + return node.kind === SyntaxKind.ImportAttribute; +} + +export declare namespace isImportAttribute { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportAttribute.Handle = isImportAttribute as any; + +export function isImportAttributes(node: Node): node is ImportAttributes { + return node.kind === SyntaxKind.ImportAttributes; +} + +export declare namespace isImportAttributes { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportAttributes.Handle = isImportAttributes as any; + +export function isTypeQueryNode(node: Node): node is TypeQueryNode { + return node.kind === SyntaxKind.TypeQuery; +} + +export declare namespace isTypeQueryNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeQueryNode.Handle = isTypeQueryNode as any; + +export function isMappedTypeNode(node: Node): node is MappedTypeNode { + return node.kind === SyntaxKind.MappedType; +} + +export declare namespace isMappedTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isMappedTypeNode.Handle = isMappedTypeNode as any; + +export function isTypeLiteralNode(node: Node): node is TypeLiteralNode { + return node.kind === SyntaxKind.TypeLiteral; +} + +export declare namespace isTypeLiteralNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeLiteralNode.Handle = isTypeLiteralNode as any; + +export function isTupleTypeNode(node: Node): node is TupleTypeNode { + return node.kind === SyntaxKind.TupleType; +} + +export declare namespace isTupleTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTupleTypeNode.Handle = isTupleTypeNode as any; + +export function isNamedTupleMember(node: Node): node is NamedTupleMember { + return node.kind === SyntaxKind.NamedTupleMember; +} + +export declare namespace isNamedTupleMember { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isNamedTupleMember.Handle = isNamedTupleMember as any; + +export function isOptionalTypeNode(node: Node): node is OptionalTypeNode { + return node.kind === SyntaxKind.OptionalType; +} + +export declare namespace isOptionalTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isOptionalTypeNode.Handle = isOptionalTypeNode as any; + +export function isRestTypeNode(node: Node): node is RestTypeNode { + return node.kind === SyntaxKind.RestType; +} + +export declare namespace isRestTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isRestTypeNode.Handle = isRestTypeNode as any; + +export function isParenthesizedTypeNode(node: Node): node is ParenthesizedTypeNode { + return node.kind === SyntaxKind.ParenthesizedType; +} + +export declare namespace isParenthesizedTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isParenthesizedTypeNode.Handle = isParenthesizedTypeNode as any; + +export function isFunctionTypeNode(node: Node): node is FunctionTypeNode { + return node.kind === SyntaxKind.FunctionType; +} + +export declare namespace isFunctionTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isFunctionTypeNode.Handle = isFunctionTypeNode as any; + +export function isConstructorTypeNode(node: Node): node is ConstructorTypeNode { + return node.kind === SyntaxKind.ConstructorType; +} + +export declare namespace isConstructorTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isConstructorTypeNode.Handle = isConstructorTypeNode as any; + +export function isTemplateHead(node: Node): node is TemplateHead { + return node.kind === SyntaxKind.TemplateHead; +} + +export declare namespace isTemplateHead { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateHead.Handle = isTemplateHead as any; + +export function isTemplateMiddle(node: Node): node is TemplateMiddle { + return node.kind === SyntaxKind.TemplateMiddle; +} + +export declare namespace isTemplateMiddle { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateMiddle.Handle = isTemplateMiddle as any; + +export function isTemplateTail(node: Node): node is TemplateTail { + return node.kind === SyntaxKind.TemplateTail; +} + +export declare namespace isTemplateTail { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateTail.Handle = isTemplateTail as any; + +export function isTemplateLiteralTypeNode(node: Node): node is TemplateLiteralTypeNode { + return node.kind === SyntaxKind.TemplateLiteralType; +} + +export declare namespace isTemplateLiteralTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateLiteralTypeNode.Handle = isTemplateLiteralTypeNode as any; + +export function isTemplateLiteralTypeSpan(node: Node): node is TemplateLiteralTypeSpan { + return node.kind === SyntaxKind.TemplateLiteralTypeSpan; +} + +export declare namespace isTemplateLiteralTypeSpan { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTemplateLiteralTypeSpan.Handle = isTemplateLiteralTypeSpan as any; + +export function isSyntheticExpression(node: Node): node is SyntheticExpression { + return node.kind === SyntaxKind.SyntheticExpression; +} + +export declare namespace isSyntheticExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSyntheticExpression.Handle = isSyntheticExpression as any; + +export function isPartiallyEmittedExpression(node: Node): node is PartiallyEmittedExpression { + return node.kind === SyntaxKind.PartiallyEmittedExpression; +} + +export declare namespace isPartiallyEmittedExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isPartiallyEmittedExpression.Handle = isPartiallyEmittedExpression as any; + +export function isJsxElement(node: Node): node is JsxElement { + return node.kind === SyntaxKind.JsxElement; +} + +export declare namespace isJsxElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxElement.Handle = isJsxElement as any; + +export function isJsxAttributes(node: Node): node is JsxAttributes { + return node.kind === SyntaxKind.JsxAttributes; +} + +export declare namespace isJsxAttributes { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxAttributes.Handle = isJsxAttributes as any; + +export function isJsxNamespacedName(node: Node): node is JsxNamespacedName { + return node.kind === SyntaxKind.JsxNamespacedName; +} + +export declare namespace isJsxNamespacedName { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxNamespacedName.Handle = isJsxNamespacedName as any; + +export function isJsxOpeningElement(node: Node): node is JsxOpeningElement { + return node.kind === SyntaxKind.JsxOpeningElement; +} + +export declare namespace isJsxOpeningElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxOpeningElement.Handle = isJsxOpeningElement as any; + +export function isJsxSelfClosingElement(node: Node): node is JsxSelfClosingElement { + return node.kind === SyntaxKind.JsxSelfClosingElement; +} + +export declare namespace isJsxSelfClosingElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxSelfClosingElement.Handle = isJsxSelfClosingElement as any; + +export function isJsxFragment(node: Node): node is JsxFragment { + return node.kind === SyntaxKind.JsxFragment; +} + +export declare namespace isJsxFragment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxFragment.Handle = isJsxFragment as any; + +export function isJsxOpeningFragment(node: Node): node is JsxOpeningFragment { + return node.kind === SyntaxKind.JsxOpeningFragment; +} + +export declare namespace isJsxOpeningFragment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxOpeningFragment.Handle = isJsxOpeningFragment as any; + +export function isJsxClosingFragment(node: Node): node is JsxClosingFragment { + return node.kind === SyntaxKind.JsxClosingFragment; +} + +export declare namespace isJsxClosingFragment { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxClosingFragment.Handle = isJsxClosingFragment as any; + +export function isJsxAttribute(node: Node): node is JsxAttribute { + return node.kind === SyntaxKind.JsxAttribute; +} + +export declare namespace isJsxAttribute { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxAttribute.Handle = isJsxAttribute as any; + +export function isJsxSpreadAttribute(node: Node): node is JsxSpreadAttribute { + return node.kind === SyntaxKind.JsxSpreadAttribute; +} + +export declare namespace isJsxSpreadAttribute { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxSpreadAttribute.Handle = isJsxSpreadAttribute as any; + +export function isJsxClosingElement(node: Node): node is JsxClosingElement { + return node.kind === SyntaxKind.JsxClosingElement; +} + +export declare namespace isJsxClosingElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxClosingElement.Handle = isJsxClosingElement as any; + +export function isJsxExpression(node: Node): node is JsxExpression { + return node.kind === SyntaxKind.JsxExpression; +} + +export declare namespace isJsxExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxExpression.Handle = isJsxExpression as any; + +export function isJsxText(node: Node): node is JsxText { + return node.kind === SyntaxKind.JsxText; +} + +export declare namespace isJsxText { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJsxText.Handle = isJsxText as any; + +export function isSyntaxList(node: Node): node is SyntaxList { + return node.kind === SyntaxKind.SyntaxList; +} + +export declare namespace isSyntaxList { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSyntaxList.Handle = isSyntaxList as any; + +export function isJSDoc(node: Node): node is JSDoc { + return node.kind === SyntaxKind.JSDoc; +} + +export declare namespace isJSDoc { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDoc.Handle = isJSDoc as any; + +export function isJSDocTypeExpression(node: Node): node is JSDocTypeExpression { + return node.kind === SyntaxKind.JSDocTypeExpression; +} + +export declare namespace isJSDocTypeExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocTypeExpression.Handle = isJSDocTypeExpression as any; + +export function isJSDocNonNullableType(node: Node): node is JSDocNonNullableType { + return node.kind === SyntaxKind.JSDocNonNullableType; +} + +export declare namespace isJSDocNonNullableType { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocNonNullableType.Handle = isJSDocNonNullableType as any; + +export function isJSDocNullableType(node: Node): node is JSDocNullableType { + return node.kind === SyntaxKind.JSDocNullableType; +} + +export declare namespace isJSDocNullableType { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocNullableType.Handle = isJSDocNullableType as any; + +export function isJSDocAllType(node: Node): node is JSDocAllType { + return node.kind === SyntaxKind.JSDocAllType; +} + +export declare namespace isJSDocAllType { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocAllType.Handle = isJSDocAllType as any; + +export function isJSDocVariadicType(node: Node): node is JSDocVariadicType { + return node.kind === SyntaxKind.JSDocVariadicType; +} + +export declare namespace isJSDocVariadicType { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocVariadicType.Handle = isJSDocVariadicType as any; + +export function isJSDocOptionalType(node: Node): node is JSDocOptionalType { + return node.kind === SyntaxKind.JSDocOptionalType; +} + +export declare namespace isJSDocOptionalType { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocOptionalType.Handle = isJSDocOptionalType as any; + +export function isJSDocTypeTag(node: Node): node is JSDocTypeTag { + return node.kind === SyntaxKind.JSDocTypeTag; +} + +export declare namespace isJSDocTypeTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocTypeTag.Handle = isJSDocTypeTag as any; + +export function isJSDocUnknownTag(node: Node): node is JSDocUnknownTag { + return node.kind === SyntaxKind.JSDocUnknownTag; +} + +export declare namespace isJSDocUnknownTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocUnknownTag.Handle = isJSDocUnknownTag as any; + +export function isJSDocTemplateTag(node: Node): node is JSDocTemplateTag { + return node.kind === SyntaxKind.JSDocTemplateTag; +} + +export declare namespace isJSDocTemplateTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocTemplateTag.Handle = isJSDocTemplateTag as any; + +export function isJSDocReturnTag(node: Node): node is JSDocReturnTag { + return node.kind === SyntaxKind.JSDocReturnTag; +} + +export declare namespace isJSDocReturnTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocReturnTag.Handle = isJSDocReturnTag as any; + +export function isJSDocPublicTag(node: Node): node is JSDocPublicTag { + return node.kind === SyntaxKind.JSDocPublicTag; +} + +export declare namespace isJSDocPublicTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocPublicTag.Handle = isJSDocPublicTag as any; + +export function isJSDocPrivateTag(node: Node): node is JSDocPrivateTag { + return node.kind === SyntaxKind.JSDocPrivateTag; +} + +export declare namespace isJSDocPrivateTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocPrivateTag.Handle = isJSDocPrivateTag as any; + +export function isJSDocProtectedTag(node: Node): node is JSDocProtectedTag { + return node.kind === SyntaxKind.JSDocProtectedTag; +} + +export declare namespace isJSDocProtectedTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocProtectedTag.Handle = isJSDocProtectedTag as any; + +export function isJSDocReadonlyTag(node: Node): node is JSDocReadonlyTag { + return node.kind === SyntaxKind.JSDocReadonlyTag; +} + +export declare namespace isJSDocReadonlyTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocReadonlyTag.Handle = isJSDocReadonlyTag as any; + +export function isJSDocOverrideTag(node: Node): node is JSDocOverrideTag { + return node.kind === SyntaxKind.JSDocOverrideTag; +} + +export declare namespace isJSDocOverrideTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocOverrideTag.Handle = isJSDocOverrideTag as any; + +export function isJSDocDeprecatedTag(node: Node): node is JSDocDeprecatedTag { + return node.kind === SyntaxKind.JSDocDeprecatedTag; +} + +export declare namespace isJSDocDeprecatedTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocDeprecatedTag.Handle = isJSDocDeprecatedTag as any; + +export function isJSDocSeeTag(node: Node): node is JSDocSeeTag { + return node.kind === SyntaxKind.JSDocSeeTag; +} + +export declare namespace isJSDocSeeTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocSeeTag.Handle = isJSDocSeeTag as any; + +export function isJSDocImplementsTag(node: Node): node is JSDocImplementsTag { + return node.kind === SyntaxKind.JSDocImplementsTag; +} + +export declare namespace isJSDocImplementsTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocImplementsTag.Handle = isJSDocImplementsTag as any; + +export function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag { + return node.kind === SyntaxKind.JSDocAugmentsTag; +} + +export declare namespace isJSDocAugmentsTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocAugmentsTag.Handle = isJSDocAugmentsTag as any; + +export function isJSDocSatisfiesTag(node: Node): node is JSDocSatisfiesTag { + return node.kind === SyntaxKind.JSDocSatisfiesTag; +} + +export declare namespace isJSDocSatisfiesTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocSatisfiesTag.Handle = isJSDocSatisfiesTag as any; + +export function isJSDocThrowsTag(node: Node): node is JSDocThrowsTag { + return node.kind === SyntaxKind.JSDocThrowsTag; +} + +export declare namespace isJSDocThrowsTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocThrowsTag.Handle = isJSDocThrowsTag as any; + +export function isJSDocThisTag(node: Node): node is JSDocThisTag { + return node.kind === SyntaxKind.JSDocThisTag; +} + +export declare namespace isJSDocThisTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocThisTag.Handle = isJSDocThisTag as any; + +export function isJSDocImportTag(node: Node): node is JSDocImportTag { + return node.kind === SyntaxKind.JSDocImportTag; +} + +export declare namespace isJSDocImportTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocImportTag.Handle = isJSDocImportTag as any; + +export function isJSDocCallbackTag(node: Node): node is JSDocCallbackTag { + return node.kind === SyntaxKind.JSDocCallbackTag; +} + +export declare namespace isJSDocCallbackTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocCallbackTag.Handle = isJSDocCallbackTag as any; + +export function isJSDocOverloadTag(node: Node): node is JSDocOverloadTag { + return node.kind === SyntaxKind.JSDocOverloadTag; +} + +export declare namespace isJSDocOverloadTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocOverloadTag.Handle = isJSDocOverloadTag as any; + +export function isJSDocTypedefTag(node: Node): node is JSDocTypedefTag { + return node.kind === SyntaxKind.JSDocTypedefTag; +} + +export declare namespace isJSDocTypedefTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocTypedefTag.Handle = isJSDocTypedefTag as any; + +export function isJSDocSignature(node: Node): node is JSDocSignature { + return node.kind === SyntaxKind.JSDocSignature; +} + +export declare namespace isJSDocSignature { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocSignature.Handle = isJSDocSignature as any; + +export function isJSDocNameReference(node: Node): node is JSDocNameReference { + return node.kind === SyntaxKind.JSDocNameReference; +} + +export declare namespace isJSDocNameReference { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocNameReference.Handle = isJSDocNameReference as any; + +export function isSourceFile(node: Node): node is SourceFile { + return node.kind === SyntaxKind.SourceFile; +} + +export declare namespace isSourceFile { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSourceFile.Handle = isSourceFile as any; + +export function isModuleDeclaration(node: Node): node is ModuleDeclaration { + return node.kind === SyntaxKind.ModuleDeclaration; +} + +export declare namespace isModuleDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isModuleDeclaration.Handle = isModuleDeclaration as any; + +export function isImportEqualsDeclaration(node: Node): node is ImportEqualsDeclaration { + return node.kind === SyntaxKind.ImportEqualsDeclaration; +} + +export declare namespace isImportEqualsDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportEqualsDeclaration.Handle = isImportEqualsDeclaration as any; + +export function isExportDeclaration(node: Node): node is ExportDeclaration { + return node.kind === SyntaxKind.ExportDeclaration; +} + +export declare namespace isExportDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isExportDeclaration.Handle = isExportDeclaration as any; + +export function isImportTypeNode(node: Node): node is ImportTypeNode { + return node.kind === SyntaxKind.ImportType; +} + +export declare namespace isImportTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportTypeNode.Handle = isImportTypeNode as any; + +export function isImportClause(node: Node): node is ImportClause { + return node.kind === SyntaxKind.ImportClause; +} + +export declare namespace isImportClause { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportClause.Handle = isImportClause as any; + +export function isImportSpecifier(node: Node): node is ImportSpecifier { + return node.kind === SyntaxKind.ImportSpecifier; +} + +export declare namespace isImportSpecifier { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isImportSpecifier.Handle = isImportSpecifier as any; + +export function isJSDocText(node: Node): node is JSDocText { + return node.kind === SyntaxKind.JSDocText; +} + +export declare namespace isJSDocText { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocText.Handle = isJSDocText as any; + +export function isJSDocLink(node: Node): node is JSDocLink { + return node.kind === SyntaxKind.JSDocLink; +} + +export declare namespace isJSDocLink { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocLink.Handle = isJSDocLink as any; + +export function isJSDocLinkPlain(node: Node): node is JSDocLinkPlain { + return node.kind === SyntaxKind.JSDocLinkPlain; +} + +export declare namespace isJSDocLinkPlain { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocLinkPlain.Handle = isJSDocLinkPlain as any; + +export function isJSDocLinkCode(node: Node): node is JSDocLinkCode { + return node.kind === SyntaxKind.JSDocLinkCode; +} + +export declare namespace isJSDocLinkCode { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocLinkCode.Handle = isJSDocLinkCode as any; + +export function isTypeParameterDeclaration(node: Node): node is TypeParameterDeclaration { + return node.kind === SyntaxKind.TypeParameter; +} + +export declare namespace isTypeParameterDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isTypeParameterDeclaration.Handle = isTypeParameterDeclaration as any; + +export function isSyntheticReferenceExpression(node: Node): node is SyntheticReferenceExpression { + return node.kind === SyntaxKind.SyntheticReferenceExpression; +} + +export declare namespace isSyntheticReferenceExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isSyntheticReferenceExpression.Handle = isSyntheticReferenceExpression as any; + +export function isJSDocTypeLiteral(node: Node): node is JSDocTypeLiteral { + return node.kind === SyntaxKind.JSDocTypeLiteral; +} + +export declare namespace isJSDocTypeLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocTypeLiteral.Handle = isJSDocTypeLiteral as any; + +export function isForInStatement(node: Node): node is ForInStatement { + return node.kind === SyntaxKind.ForInStatement; +} + +export declare namespace isForInStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isForInStatement.Handle = isForInStatement as any; + +export function isForOfStatement(node: Node): node is ForOfStatement { + return node.kind === SyntaxKind.ForOfStatement; +} + +export declare namespace isForOfStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isForOfStatement.Handle = isForOfStatement as any; + +export function isCaseClause(node: Node): node is CaseClause { + return node.kind === SyntaxKind.CaseClause; +} + +export declare namespace isCaseClause { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isCaseClause.Handle = isCaseClause as any; + +export function isDefaultClause(node: Node): node is DefaultClause { + return node.kind === SyntaxKind.DefaultClause; +} + +export declare namespace isDefaultClause { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isDefaultClause.Handle = isDefaultClause as any; + +export function isObjectBindingPattern(node: Node): node is ObjectBindingPattern { + return node.kind === SyntaxKind.ObjectBindingPattern; +} + +export declare namespace isObjectBindingPattern { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isObjectBindingPattern.Handle = isObjectBindingPattern as any; + +export function isArrayBindingPattern(node: Node): node is ArrayBindingPattern { + return node.kind === SyntaxKind.ArrayBindingPattern; +} + +export declare namespace isArrayBindingPattern { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isArrayBindingPattern.Handle = isArrayBindingPattern as any; + +export function isJSDocParameterTag(node: Node): node is JSDocParameterTag { + return node.kind === SyntaxKind.JSDocParameterTag; +} + +export declare namespace isJSDocParameterTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocParameterTag.Handle = isJSDocParameterTag as any; + +export function isJSDocPropertyTag(node: Node): node is JSDocPropertyTag { + return node.kind === SyntaxKind.JSDocPropertyTag; +} + +export declare namespace isJSDocPropertyTag { + function Handle>(node: T): node is SpecializeNodeHandle; +} +isJSDocPropertyTag.Handle = isJSDocPropertyTag as any; + +export function isHeritageClauseElement(node: Node): node is HeritageClauseElement { + return node.kind === SyntaxKind.ExpressionWithTypeArguments || node.kind === SyntaxKind.TypeReference; +} + +export declare namespace isHeritageClauseElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isHeritageClauseElement.Handle = isHeritageClauseElement as any; + +export function isAccessExpression(node: Node): node is AccessExpression { + return node.kind === SyntaxKind.PropertyAccessExpression || node.kind === SyntaxKind.ElementAccessExpression; +} + +export declare namespace isAccessExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAccessExpression.Handle = isAccessExpression as any; + +export function isDeclarationName(node: Node): node is DeclarationName { + const kind = node.kind; + return kind === SyntaxKind.Identifier || kind === SyntaxKind.PrivateIdentifier || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.ComputedPropertyName || kind === SyntaxKind.ObjectBindingPattern || kind === SyntaxKind.ArrayBindingPattern || kind === SyntaxKind.PropertyAccessExpression || kind === SyntaxKind.ElementAccessExpression; +} + +export declare namespace isDeclarationName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDeclarationName.Handle = isDeclarationName as any; + +export function isModuleName(node: Node): node is ModuleName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; +} + +export declare namespace isModuleName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModuleName.Handle = isModuleName as any; + +export function isModuleExportName(node: Node): node is ModuleExportName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; +} + +export declare namespace isModuleExportName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModuleExportName.Handle = isModuleExportName as any; + +export function isPropertyName(node: Node): node is PropertyName { + const kind = node.kind; + return kind === SyntaxKind.Identifier || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.ComputedPropertyName || kind === SyntaxKind.PrivateIdentifier || kind === SyntaxKind.BigIntLiteral; +} + +export declare namespace isPropertyName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPropertyName.Handle = isPropertyName as any; + +export function isModuleBody(node: Node): node is ModuleBody { + return node.kind === SyntaxKind.ModuleBlock || node.kind === SyntaxKind.ModuleDeclaration; +} + +export declare namespace isModuleBody { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModuleBody.Handle = isModuleBody as any; + +export function isJSDocFullName(node: Node): node is JSDocFullName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ModuleDeclaration; +} + +export declare namespace isJSDocFullName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJSDocFullName.Handle = isJSDocFullName as any; + +export function isModuleReference(node: Node): node is ModuleReference { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.ExternalModuleReference; +} + +export declare namespace isModuleReference { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModuleReference.Handle = isModuleReference as any; + +export function isNamedImportBindings(node: Node): node is NamedImportBindings { + return node.kind === SyntaxKind.NamespaceImport || node.kind === SyntaxKind.NamedImports; +} + +export declare namespace isNamedImportBindings { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isNamedImportBindings.Handle = isNamedImportBindings as any; + +export function isNamedExportBindings(node: Node): node is NamedExportBindings { + return node.kind === SyntaxKind.NamespaceExport || node.kind === SyntaxKind.NamedExports; +} + +export declare namespace isNamedExportBindings { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isNamedExportBindings.Handle = isNamedExportBindings as any; + +export function isMemberName(node: Node): node is MemberName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PrivateIdentifier; +} + +export declare namespace isMemberName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isMemberName.Handle = isMemberName as any; + +export function isEntityName(node: Node): node is EntityName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName; +} + +export declare namespace isEntityName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isEntityName.Handle = isEntityName as any; + +export function isBindingName(node: Node): node is BindingName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; +} + +export declare namespace isBindingName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isBindingName.Handle = isBindingName as any; + +export function isModifierLike(node: Node): node is ModifierLike { + const kind = node.kind; + return kind === SyntaxKind.AbstractKeyword || kind === SyntaxKind.AccessorKeyword || kind === SyntaxKind.AsyncKeyword || kind === SyntaxKind.ConstKeyword || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.DefaultKeyword || kind === SyntaxKind.ExportKeyword || kind === SyntaxKind.InKeyword || kind === SyntaxKind.PrivateKeyword || kind === SyntaxKind.ProtectedKeyword || kind === SyntaxKind.PublicKeyword || kind === SyntaxKind.ReadonlyKeyword || kind === SyntaxKind.OutKeyword || kind === SyntaxKind.OverrideKeyword || kind === SyntaxKind.StaticKeyword || kind === SyntaxKind.Decorator; +} + +export declare namespace isModifierLike { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModifierLike.Handle = isModifierLike as any; + +export function isJsxChild(node: Node): node is JsxChild { + const kind = node.kind; + return kind === SyntaxKind.JsxText || kind === SyntaxKind.JsxExpression || kind === SyntaxKind.JsxElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment; +} + +export declare namespace isJsxChild { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJsxChild.Handle = isJsxChild as any; + +export function isJsxAttributeLike(node: Node): node is JsxAttributeLike { + return node.kind === SyntaxKind.JsxAttribute || node.kind === SyntaxKind.JsxSpreadAttribute; +} + +export declare namespace isJsxAttributeLike { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJsxAttributeLike.Handle = isJsxAttributeLike as any; + +export function isJsxAttributeName(node: Node): node is JsxAttributeName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.JsxNamespacedName; +} + +export declare namespace isJsxAttributeName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJsxAttributeName.Handle = isJsxAttributeName as any; + +export function isJsxAttributeValue(node: Node): node is JsxAttributeValue { + const kind = node.kind; + return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.JsxExpression || kind === SyntaxKind.JsxElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment; +} + +export declare namespace isJsxAttributeValue { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJsxAttributeValue.Handle = isJsxAttributeValue as any; + +export function isClassLikeDeclaration(node: Node): node is ClassLikeDeclaration { + return node.kind === SyntaxKind.ClassDeclaration || node.kind === SyntaxKind.ClassExpression; +} + +export declare namespace isClassLikeDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isClassLikeDeclaration.Handle = isClassLikeDeclaration as any; + +export function isAccessorDeclaration(node: Node): node is AccessorDeclaration { + return node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor; +} + +export declare namespace isAccessorDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAccessorDeclaration.Handle = isAccessorDeclaration as any; + +export function isLiteralLikeNode(node: Node): node is LiteralLikeNode { + const kind = node.kind; + return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.TemplateHead || kind === SyntaxKind.TemplateMiddle || kind === SyntaxKind.TemplateTail || kind === SyntaxKind.JsxText; +} + +export declare namespace isLiteralLikeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isLiteralLikeNode.Handle = isLiteralLikeNode as any; + +export function isLiteralExpression(node: Node): node is LiteralExpression { + const kind = node.kind; + return kind === SyntaxKind.StringLiteral || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral; +} + +export declare namespace isLiteralExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isLiteralExpression.Handle = isLiteralExpression as any; + +export function isUnionOrIntersectionTypeNode(node: Node): node is UnionOrIntersectionTypeNode { + return node.kind === SyntaxKind.UnionType || node.kind === SyntaxKind.IntersectionType; +} + +export declare namespace isUnionOrIntersectionTypeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isUnionOrIntersectionTypeNode.Handle = isUnionOrIntersectionTypeNode as any; + +export function isTemplateLiteralLikeNode(node: Node): node is TemplateLiteralLikeNode { + const kind = node.kind; + return isPseudoLiteralKind(kind); +} + +export declare namespace isTemplateLiteralLikeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTemplateLiteralLikeNode.Handle = isTemplateLiteralLikeNode as any; + +export function isTemplateMiddleOrTail(node: Node): node is TemplateMiddleOrTail { + return node.kind === SyntaxKind.TemplateMiddle || node.kind === SyntaxKind.TemplateTail; +} + +export declare namespace isTemplateMiddleOrTail { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTemplateMiddleOrTail.Handle = isTemplateMiddleOrTail as any; + +export function isTemplateLiteral(node: Node): node is TemplateLiteral { + return node.kind === SyntaxKind.TemplateExpression || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; +} + +export declare namespace isTemplateLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTemplateLiteral.Handle = isTemplateLiteral as any; + +export function isTypePredicateParameterName(node: Node): node is TypePredicateParameterName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisType; +} + +export declare namespace isTypePredicateParameterName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTypePredicateParameterName.Handle = isTypePredicateParameterName as any; + +export function isImportAttributeName(node: Node): node is ImportAttributeName { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral; +} + +export declare namespace isImportAttributeName { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isImportAttributeName.Handle = isImportAttributeName as any; + +export function isJSDocComment(node: Node): node is JSDocComment { + const kind = node.kind; + return kind === SyntaxKind.JSDocText || kind === SyntaxKind.JSDocLink || kind === SyntaxKind.JSDocLinkCode || kind === SyntaxKind.JSDocLinkPlain; +} + +export declare namespace isJSDocComment { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJSDocComment.Handle = isJSDocComment as any; + +export function isSignatureDeclaration(node: Node): node is SignatureDeclaration { + const kind = node.kind; + return kind === SyntaxKind.CallSignature || kind === SyntaxKind.ConstructSignature || kind === SyntaxKind.MethodSignature || kind === SyntaxKind.IndexSignature || kind === SyntaxKind.FunctionType || kind === SyntaxKind.ConstructorType || kind === SyntaxKind.FunctionDeclaration || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.Constructor || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ArrowFunction; +} + +export declare namespace isSignatureDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isSignatureDeclaration.Handle = isSignatureDeclaration as any; + +export function isStringLiteralLikeNode(node: Node): node is StringLiteralLikeNode { + return node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral; +} + +export declare namespace isStringLiteralLikeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isStringLiteralLikeNode.Handle = isStringLiteralLikeNode as any; + +export function isNumericOrStringLikeLiteral(node: Node): node is NumericOrStringLikeLiteral { + return node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NoSubstitutionTemplateLiteral || node.kind === SyntaxKind.NumericLiteral; +} + +export declare namespace isNumericOrStringLikeLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isNumericOrStringLikeLiteral.Handle = isNumericOrStringLikeLiteral as any; + +export function isObjectLiteralLikeNode(node: Node): node is ObjectLiteralLikeNode { + return node.kind === SyntaxKind.ObjectLiteralExpression || node.kind === SyntaxKind.ObjectBindingPattern; +} + +export declare namespace isObjectLiteralLikeNode { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isObjectLiteralLikeNode.Handle = isObjectLiteralLikeNode as any; + +export function isObjectTypeDeclaration(node: Node): node is ObjectTypeDeclaration { + const kind = node.kind; + return kind === SyntaxKind.ClassDeclaration || kind === SyntaxKind.ClassExpression || kind === SyntaxKind.InterfaceDeclaration || kind === SyntaxKind.TypeLiteral; +} + +export declare namespace isObjectTypeDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isObjectTypeDeclaration.Handle = isObjectTypeDeclaration as any; + +export function isJsxOpeningLikeElement(node: Node): node is JsxOpeningLikeElement { + return node.kind === SyntaxKind.JsxOpeningElement || node.kind === SyntaxKind.JsxSelfClosingElement; +} + +export declare namespace isJsxOpeningLikeElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isJsxOpeningLikeElement.Handle = isJsxOpeningLikeElement as any; + +export function isNamedImportsOrExports(node: Node): node is NamedImportsOrExports { + return node.kind === SyntaxKind.NamedImports || node.kind === SyntaxKind.NamedExports; +} + +export declare namespace isNamedImportsOrExports { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isNamedImportsOrExports.Handle = isNamedImportsOrExports as any; + +export function isBreakOrContinueStatement(node: Node): node is BreakOrContinueStatement { + return node.kind === SyntaxKind.BreakStatement || node.kind === SyntaxKind.ContinueStatement; +} + +export declare namespace isBreakOrContinueStatement { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isBreakOrContinueStatement.Handle = isBreakOrContinueStatement as any; + +export function isCallLikeExpression(node: Node): node is CallLikeExpression { + const kind = node.kind; + return kind === SyntaxKind.CallExpression || kind === SyntaxKind.NewExpression || kind === SyntaxKind.TaggedTemplateExpression || kind === SyntaxKind.Decorator || kind === SyntaxKind.JsxOpeningElement || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.BinaryExpression; +} + +export declare namespace isCallLikeExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isCallLikeExpression.Handle = isCallLikeExpression as any; + +export function isFunctionLikeDeclaration(node: Node): node is FunctionLikeDeclaration { + const kind = node.kind; + return kind === SyntaxKind.FunctionDeclaration || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor || kind === SyntaxKind.Constructor || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ArrowFunction; +} + +export declare namespace isFunctionLikeDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isFunctionLikeDeclaration.Handle = isFunctionLikeDeclaration as any; + +export function isVariableOrParameterDeclaration(node: Node): node is VariableOrParameterDeclaration { + return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.Parameter; +} + +export declare namespace isVariableOrParameterDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isVariableOrParameterDeclaration.Handle = isVariableOrParameterDeclaration as any; + +export function isVariableOrPropertyDeclaration(node: Node): node is VariableOrPropertyDeclaration { + return node.kind === SyntaxKind.VariableDeclaration || node.kind === SyntaxKind.PropertyDeclaration; +} + +export declare namespace isVariableOrPropertyDeclaration { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isVariableOrPropertyDeclaration.Handle = isVariableOrPropertyDeclaration as any; + +export function isCallOrNewExpression(node: Node): node is CallOrNewExpression { + return node.kind === SyntaxKind.CallExpression || node.kind === SyntaxKind.NewExpression; +} + +export declare namespace isCallOrNewExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isCallOrNewExpression.Handle = isCallOrNewExpression as any; + +export function isImportClauseOrBindingPattern(node: Node): node is ImportClauseOrBindingPattern { + return node.kind === SyntaxKind.ImportClause || node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; +} + +export declare namespace isImportClauseOrBindingPattern { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isImportClauseOrBindingPattern.Handle = isImportClauseOrBindingPattern as any; + +export function isAnyImportSyntax(node: Node): node is AnyImportSyntax { + return node.kind === SyntaxKind.ImportDeclaration || node.kind === SyntaxKind.JSImportDeclaration || node.kind === SyntaxKind.ImportEqualsDeclaration; +} + +export declare namespace isAnyImportSyntax { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAnyImportSyntax.Handle = isAnyImportSyntax as any; + +export function isArrayBindingElement(node: Node): node is ArrayBindingElement { + return node.kind === SyntaxKind.BindingElement || node.kind === SyntaxKind.OmittedExpression; +} + +export declare namespace isArrayBindingElement { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isArrayBindingElement.Handle = isArrayBindingElement as any; + +export function isAssertionExpression(node: Node): node is AssertionExpression { + return node.kind === SyntaxKind.TypeAssertionExpression || node.kind === SyntaxKind.AsExpression; +} + +export declare namespace isAssertionExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAssertionExpression.Handle = isAssertionExpression as any; + +export function isBooleanLiteral(node: Node): node is BooleanLiteral { + return node.kind === SyntaxKind.TrueKeyword || node.kind === SyntaxKind.FalseKeyword; +} + +export declare namespace isBooleanLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isBooleanLiteral.Handle = isBooleanLiteral as any; + +export function isDestructuringAssignment(node: Node): node is DestructuringAssignment { + return node.kind === SyntaxKind.BinaryExpression; +} + +export declare namespace isDestructuringAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDestructuringAssignment.Handle = isDestructuringAssignment as any; + +export function isLiteralToken(node: Node): node is LiteralToken { + const kind = node.kind; + return kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.JsxText || kind === SyntaxKind.RegularExpressionLiteral || kind === SyntaxKind.NoSubstitutionTemplateLiteral; +} + +export declare namespace isLiteralToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isLiteralToken.Handle = isLiteralToken as any; + +export function isModifier(node: Node): node is Modifier { + const kind = node.kind; + return isModifierKind(kind); +} + +export declare namespace isModifier { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isModifier.Handle = isModifier as any; + +export function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike { + const kind = node.kind; + return kind === SyntaxKind.PropertyAssignment || kind === SyntaxKind.ShorthandPropertyAssignment || kind === SyntaxKind.SpreadAssignment || kind === SyntaxKind.MethodDeclaration || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor; +} + +export declare namespace isObjectLiteralElementLike { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isObjectLiteralElementLike.Handle = isObjectLiteralElementLike as any; + +export function isPropertyNameLiteral(node: Node): node is PropertyNameLiteral { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral; +} + +export declare namespace isPropertyNameLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPropertyNameLiteral.Handle = isPropertyNameLiteral as any; + +export function isPseudoLiteralToken(node: Node): node is PseudoLiteralToken { + const kind = node.kind; + return isPseudoLiteralKind(kind); +} + +export declare namespace isPseudoLiteralToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPseudoLiteralToken.Handle = isPseudoLiteralToken as any; + +export function isTemplateLiteralToken(node: Node): node is TemplateLiteralToken { + const kind = node.kind; + return kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.TemplateHead || kind === SyntaxKind.TemplateMiddle || kind === SyntaxKind.TemplateTail; +} + +export declare namespace isTemplateLiteralToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTemplateLiteralToken.Handle = isTemplateLiteralToken as any; + +export function isArrayDestructuringAssignment(node: Node): node is ArrayDestructuringAssignment { + return node.kind === SyntaxKind.BinaryExpression; +} + +export declare namespace isArrayDestructuringAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isArrayDestructuringAssignment.Handle = isArrayDestructuringAssignment as any; + +export function isObjectDestructuringAssignment(node: Node): node is ObjectDestructuringAssignment { + return node.kind === SyntaxKind.BinaryExpression; +} + +export declare namespace isObjectDestructuringAssignment { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isObjectDestructuringAssignment.Handle = isObjectDestructuringAssignment as any; + +export function isFunctionBody(node: Node): node is FunctionBody { + return node.kind === SyntaxKind.Block; +} + +export declare namespace isFunctionBody { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isFunctionBody.Handle = isFunctionBody as any; + +export function isTriviaKind(kind: SyntaxKind): kind is TriviaSyntaxKind { + return kind === SyntaxKind.SingleLineCommentTrivia + || kind === SyntaxKind.MultiLineCommentTrivia + || kind === SyntaxKind.NewLineTrivia + || kind === SyntaxKind.WhitespaceTrivia + || kind === SyntaxKind.ConflictMarkerTrivia; +} + +export function isPseudoLiteralKind(kind: SyntaxKind): kind is PseudoLiteralSyntaxKind { + return kind === SyntaxKind.TemplateHead + || kind === SyntaxKind.TemplateMiddle + || kind === SyntaxKind.TemplateTail; +} + +export function isModifierKind(kind: SyntaxKind): kind is ModifierSyntaxKind { + return kind === SyntaxKind.AbstractKeyword + || kind === SyntaxKind.AccessorKeyword + || kind === SyntaxKind.AsyncKeyword + || kind === SyntaxKind.ConstKeyword + || kind === SyntaxKind.DeclareKeyword + || kind === SyntaxKind.DefaultKeyword + || kind === SyntaxKind.ExportKeyword + || kind === SyntaxKind.InKeyword + || kind === SyntaxKind.PrivateKeyword + || kind === SyntaxKind.ProtectedKeyword + || kind === SyntaxKind.PublicKeyword + || kind === SyntaxKind.ReadonlyKeyword + || kind === SyntaxKind.OutKeyword + || kind === SyntaxKind.OverrideKeyword + || kind === SyntaxKind.StaticKeyword; +} + +export function isKeywordTypeKind(kind: SyntaxKind): kind is KeywordTypeSyntaxKind { + return kind === SyntaxKind.AnyKeyword + || kind === SyntaxKind.BigIntKeyword + || kind === SyntaxKind.BooleanKeyword + || kind === SyntaxKind.IntrinsicKeyword + || kind === SyntaxKind.NeverKeyword + || kind === SyntaxKind.NumberKeyword + || kind === SyntaxKind.ObjectKeyword + || kind === SyntaxKind.StringKeyword + || kind === SyntaxKind.SymbolKeyword + || kind === SyntaxKind.UndefinedKeyword + || kind === SyntaxKind.UnknownKeyword + || kind === SyntaxKind.VoidKeyword; +} + +export function isKeywordExpressionKind(kind: SyntaxKind): kind is KeywordExpressionSyntaxKind { + return kind === SyntaxKind.NullKeyword + || kind === SyntaxKind.TrueKeyword + || kind === SyntaxKind.FalseKeyword + || kind === SyntaxKind.ThisKeyword + || kind === SyntaxKind.SuperKeyword + || kind === SyntaxKind.ImportKeyword; +} + +export function isJsxTokenKind(kind: SyntaxKind): kind is JsxTokenSyntaxKind { + return kind === SyntaxKind.LessThanSlashToken + || kind === SyntaxKind.EndOfFile + || kind === SyntaxKind.ConflictMarkerTrivia + || kind === SyntaxKind.JsxText + || kind === SyntaxKind.JsxTextAllWhiteSpaces + || kind === SyntaxKind.OpenBraceToken + || kind === SyntaxKind.LessThanToken; +} + +export function isImportPhaseModifierKind(kind: SyntaxKind): kind is ImportPhaseModifierSyntaxKind { + return kind === SyntaxKind.TypeKeyword + || kind === SyntaxKind.DeferKeyword + || kind === SyntaxKind.SourceKeyword; +} + +export function isPostfixUnaryOperator(kind: SyntaxKind): kind is PostfixUnaryOperator { + return kind === SyntaxKind.PlusPlusToken + || kind === SyntaxKind.MinusMinusToken; +} + +export function isPrefixUnaryOperator(kind: SyntaxKind): kind is PrefixUnaryOperator { + return kind === SyntaxKind.PlusToken + || kind === SyntaxKind.MinusToken + || kind === SyntaxKind.TildeToken + || kind === SyntaxKind.ExclamationToken + || kind === SyntaxKind.PlusPlusToken + || kind === SyntaxKind.MinusMinusToken; +} + +export function isAssignmentOperator(kind: SyntaxKind): kind is AssignmentOperator { + return kind === SyntaxKind.EqualsToken + || isCompoundAssignmentOperator(kind); +} + +export function isBinaryOperator(kind: SyntaxKind): kind is BinaryOperator { + return isAssignmentOperatorOrHigher(kind) + || kind === SyntaxKind.CommaToken; +} + +export function isExponentiationOperator(kind: SyntaxKind): kind is ExponentiationOperator { + return kind === SyntaxKind.AsteriskAsteriskToken; +} + +export function isMultiplicativeOperator(kind: SyntaxKind): kind is MultiplicativeOperator { + return kind === SyntaxKind.AsteriskToken + || kind === SyntaxKind.SlashToken + || kind === SyntaxKind.PercentToken; +} + +export function isMultiplicativeOperatorOrHigher(kind: SyntaxKind): kind is MultiplicativeOperatorOrHigher { + return isExponentiationOperator(kind) + || isMultiplicativeOperator(kind); +} + +export function isAdditiveOperator(kind: SyntaxKind): kind is AdditiveOperator { + return kind === SyntaxKind.PlusToken + || kind === SyntaxKind.MinusToken; +} + +export function isAdditiveOperatorOrHigher(kind: SyntaxKind): kind is AdditiveOperatorOrHigher { + return isMultiplicativeOperatorOrHigher(kind) + || isAdditiveOperator(kind); +} + +export function isShiftOperator(kind: SyntaxKind): kind is ShiftOperator { + return kind === SyntaxKind.LessThanLessThanToken + || kind === SyntaxKind.GreaterThanGreaterThanToken + || kind === SyntaxKind.GreaterThanGreaterThanGreaterThanToken; +} + +export function isShiftOperatorOrHigher(kind: SyntaxKind): kind is ShiftOperatorOrHigher { + return isAdditiveOperatorOrHigher(kind) + || isShiftOperator(kind); +} + +export function isRelationalOperator(kind: SyntaxKind): kind is RelationalOperator { + return kind === SyntaxKind.LessThanToken + || kind === SyntaxKind.LessThanEqualsToken + || kind === SyntaxKind.GreaterThanToken + || kind === SyntaxKind.GreaterThanEqualsToken + || kind === SyntaxKind.InstanceOfKeyword + || kind === SyntaxKind.InKeyword; +} + +export function isRelationalOperatorOrHigher(kind: SyntaxKind): kind is RelationalOperatorOrHigher { + return isShiftOperatorOrHigher(kind) + || isRelationalOperator(kind); +} + +export function isEqualityOperator(kind: SyntaxKind): kind is EqualityOperator { + return kind === SyntaxKind.EqualsEqualsToken + || kind === SyntaxKind.EqualsEqualsEqualsToken + || kind === SyntaxKind.ExclamationEqualsEqualsToken + || kind === SyntaxKind.ExclamationEqualsToken; +} + +export function isEqualityOperatorOrHigher(kind: SyntaxKind): kind is EqualityOperatorOrHigher { + return isRelationalOperatorOrHigher(kind) + || isEqualityOperator(kind); +} + +export function isBitwiseOperator(kind: SyntaxKind): kind is BitwiseOperator { + return kind === SyntaxKind.AmpersandToken + || kind === SyntaxKind.BarToken + || kind === SyntaxKind.CaretToken; +} + +export function isBitwiseOperatorOrHigher(kind: SyntaxKind): kind is BitwiseOperatorOrHigher { + return isEqualityOperatorOrHigher(kind) + || isBitwiseOperator(kind); +} + +export function isLogicalOperator(kind: SyntaxKind): kind is LogicalOperator { + return kind === SyntaxKind.AmpersandAmpersandToken + || kind === SyntaxKind.BarBarToken; +} + +export function isLogicalOperatorOrHigher(kind: SyntaxKind): kind is LogicalOperatorOrHigher { + return isBitwiseOperatorOrHigher(kind) + || isLogicalOperator(kind); +} + +export function isCompoundAssignmentOperator(kind: SyntaxKind): kind is CompoundAssignmentOperator { + return kind === SyntaxKind.PlusEqualsToken + || kind === SyntaxKind.MinusEqualsToken + || kind === SyntaxKind.AsteriskAsteriskEqualsToken + || kind === SyntaxKind.AsteriskEqualsToken + || kind === SyntaxKind.SlashEqualsToken + || kind === SyntaxKind.PercentEqualsToken + || kind === SyntaxKind.AmpersandEqualsToken + || kind === SyntaxKind.BarEqualsToken + || kind === SyntaxKind.CaretEqualsToken + || kind === SyntaxKind.LessThanLessThanEqualsToken + || kind === SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken + || kind === SyntaxKind.GreaterThanGreaterThanEqualsToken + || kind === SyntaxKind.BarBarEqualsToken + || kind === SyntaxKind.AmpersandAmpersandEqualsToken + || kind === SyntaxKind.QuestionQuestionEqualsToken; +} + +export function isAssignmentOperatorOrHigher(kind: SyntaxKind): kind is AssignmentOperatorOrHigher { + return kind === SyntaxKind.QuestionQuestionToken + || isLogicalOperatorOrHigher(kind) + || isAssignmentOperator(kind); +} + +export function isLogicalOrCoalescingAssignmentOperator(kind: SyntaxKind): kind is LogicalOrCoalescingAssignmentOperator { + return kind === SyntaxKind.AmpersandAmpersandEqualsToken + || kind === SyntaxKind.BarBarEqualsToken + || kind === SyntaxKind.QuestionQuestionEqualsToken; +} + +export function isLiteralKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstLiteralToken && kind <= SyntaxKind.LastLiteralToken; +} + +export function isPunctuationKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstPunctuation && kind <= SyntaxKind.LastPunctuation; +} + +export function isKeywordKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstKeyword && kind <= SyntaxKind.LastKeyword; +} + +export function isTokenKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstToken && kind <= SyntaxKind.LastToken; +} + +export function isJSDocNodeKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstJSDocNode && kind <= SyntaxKind.LastJSDocNode; +} + +export function isEndOfFile(node: Node): node is EndOfFile { + return node.kind === SyntaxKind.EndOfFile; +} + +export declare namespace isEndOfFile { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isEndOfFile.Handle = isEndOfFile as any; + +export function isDotToken(node: Node): node is DotToken { + return node.kind === SyntaxKind.DotToken; +} + +export declare namespace isDotToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDotToken.Handle = isDotToken as any; + +export function isDotDotDotToken(node: Node): node is DotDotDotToken { + return node.kind === SyntaxKind.DotDotDotToken; +} + +export declare namespace isDotDotDotToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDotDotDotToken.Handle = isDotDotDotToken as any; + +export function isQuestionToken(node: Node): node is QuestionToken { + return node.kind === SyntaxKind.QuestionToken; +} + +export declare namespace isQuestionToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isQuestionToken.Handle = isQuestionToken as any; + +export function isExclamationToken(node: Node): node is ExclamationToken { + return node.kind === SyntaxKind.ExclamationToken; +} + +export declare namespace isExclamationToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isExclamationToken.Handle = isExclamationToken as any; + +export function isColonToken(node: Node): node is ColonToken { + return node.kind === SyntaxKind.ColonToken; +} + +export declare namespace isColonToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isColonToken.Handle = isColonToken as any; + +export function isEqualsToken(node: Node): node is EqualsToken { + return node.kind === SyntaxKind.EqualsToken; +} + +export declare namespace isEqualsToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isEqualsToken.Handle = isEqualsToken as any; + +export function isAsteriskToken(node: Node): node is AsteriskToken { + return node.kind === SyntaxKind.AsteriskToken; +} + +export declare namespace isAsteriskToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAsteriskToken.Handle = isAsteriskToken as any; + +export function isEqualsGreaterThanToken(node: Node): node is EqualsGreaterThanToken { + return node.kind === SyntaxKind.EqualsGreaterThanToken; +} + +export declare namespace isEqualsGreaterThanToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isEqualsGreaterThanToken.Handle = isEqualsGreaterThanToken as any; + +export function isPlusToken(node: Node): node is PlusToken { + return node.kind === SyntaxKind.PlusToken; +} + +export declare namespace isPlusToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPlusToken.Handle = isPlusToken as any; + +export function isMinusToken(node: Node): node is MinusToken { + return node.kind === SyntaxKind.MinusToken; +} + +export declare namespace isMinusToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isMinusToken.Handle = isMinusToken as any; + +export function isQuestionDotToken(node: Node): node is QuestionDotToken { + return node.kind === SyntaxKind.QuestionDotToken; +} + +export declare namespace isQuestionDotToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isQuestionDotToken.Handle = isQuestionDotToken as any; + +export function isAssertsKeyword(node: Node): node is AssertsKeyword { + return node.kind === SyntaxKind.AssertsKeyword; +} + +export declare namespace isAssertsKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAssertsKeyword.Handle = isAssertsKeyword as any; + +export function isAssertKeyword(node: Node): node is AssertKeyword { + return node.kind === SyntaxKind.AssertKeyword; +} + +export declare namespace isAssertKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAssertKeyword.Handle = isAssertKeyword as any; + +export function isAwaitKeyword(node: Node): node is AwaitKeyword { + return node.kind === SyntaxKind.AwaitKeyword; +} + +export declare namespace isAwaitKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAwaitKeyword.Handle = isAwaitKeyword as any; + +export function isCaseKeyword(node: Node): node is CaseKeyword { + return node.kind === SyntaxKind.CaseKeyword; +} + +export declare namespace isCaseKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isCaseKeyword.Handle = isCaseKeyword as any; + +export function isAbstractKeyword(node: Node): node is AbstractKeyword { + return node.kind === SyntaxKind.AbstractKeyword; +} + +export declare namespace isAbstractKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAbstractKeyword.Handle = isAbstractKeyword as any; + +export function isAccessorKeyword(node: Node): node is AccessorKeyword { + return node.kind === SyntaxKind.AccessorKeyword; +} + +export declare namespace isAccessorKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAccessorKeyword.Handle = isAccessorKeyword as any; + +export function isAsyncKeyword(node: Node): node is AsyncKeyword { + return node.kind === SyntaxKind.AsyncKeyword; +} + +export declare namespace isAsyncKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAsyncKeyword.Handle = isAsyncKeyword as any; + +export function isConstKeyword(node: Node): node is ConstKeyword { + return node.kind === SyntaxKind.ConstKeyword; +} + +export declare namespace isConstKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isConstKeyword.Handle = isConstKeyword as any; + +export function isDeclareKeyword(node: Node): node is DeclareKeyword { + return node.kind === SyntaxKind.DeclareKeyword; +} + +export declare namespace isDeclareKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDeclareKeyword.Handle = isDeclareKeyword as any; + +export function isDefaultKeyword(node: Node): node is DefaultKeyword { + return node.kind === SyntaxKind.DefaultKeyword; +} + +export declare namespace isDefaultKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isDefaultKeyword.Handle = isDefaultKeyword as any; + +export function isExportKeyword(node: Node): node is ExportKeyword { + return node.kind === SyntaxKind.ExportKeyword; +} + +export declare namespace isExportKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isExportKeyword.Handle = isExportKeyword as any; + +export function isInKeyword(node: Node): node is InKeyword { + return node.kind === SyntaxKind.InKeyword; +} + +export declare namespace isInKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isInKeyword.Handle = isInKeyword as any; + +export function isPrivateKeyword(node: Node): node is PrivateKeyword { + return node.kind === SyntaxKind.PrivateKeyword; +} + +export declare namespace isPrivateKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPrivateKeyword.Handle = isPrivateKeyword as any; + +export function isProtectedKeyword(node: Node): node is ProtectedKeyword { + return node.kind === SyntaxKind.ProtectedKeyword; +} + +export declare namespace isProtectedKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isProtectedKeyword.Handle = isProtectedKeyword as any; + +export function isPublicKeyword(node: Node): node is PublicKeyword { + return node.kind === SyntaxKind.PublicKeyword; +} + +export declare namespace isPublicKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isPublicKeyword.Handle = isPublicKeyword as any; + +export function isReadonlyKeyword(node: Node): node is ReadonlyKeyword { + return node.kind === SyntaxKind.ReadonlyKeyword; +} + +export declare namespace isReadonlyKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isReadonlyKeyword.Handle = isReadonlyKeyword as any; + +export function isOutKeyword(node: Node): node is OutKeyword { + return node.kind === SyntaxKind.OutKeyword; +} + +export declare namespace isOutKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isOutKeyword.Handle = isOutKeyword as any; + +export function isOverrideKeyword(node: Node): node is OverrideKeyword { + return node.kind === SyntaxKind.OverrideKeyword; +} + +export declare namespace isOverrideKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isOverrideKeyword.Handle = isOverrideKeyword as any; + +export function isStaticKeyword(node: Node): node is StaticKeyword { + return node.kind === SyntaxKind.StaticKeyword; +} + +export declare namespace isStaticKeyword { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isStaticKeyword.Handle = isStaticKeyword as any; + +export function isBinaryOperatorToken(node: Node): node is BinaryOperatorToken { + return isBinaryOperator(node.kind); +} + +export declare namespace isBinaryOperatorToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isBinaryOperatorToken.Handle = isBinaryOperatorToken as any; + +export function isAssignmentOperatorToken(node: Node): node is AssignmentOperatorToken { + return isAssignmentOperator(node.kind); +} + +export declare namespace isAssignmentOperatorToken { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isAssignmentOperatorToken.Handle = isAssignmentOperatorToken as any; + +export function isNullLiteral(node: Node): node is NullLiteral { + return node.kind === SyntaxKind.NullKeyword; +} + +export declare namespace isNullLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isNullLiteral.Handle = isNullLiteral as any; + +export function isTrueLiteral(node: Node): node is TrueLiteral { + return node.kind === SyntaxKind.TrueKeyword; +} + +export declare namespace isTrueLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isTrueLiteral.Handle = isTrueLiteral as any; + +export function isFalseLiteral(node: Node): node is FalseLiteral { + return node.kind === SyntaxKind.FalseKeyword; +} + +export declare namespace isFalseLiteral { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isFalseLiteral.Handle = isFalseLiteral as any; + +export function isThisExpression(node: Node): node is ThisExpression { + return node.kind === SyntaxKind.ThisKeyword; +} + +export declare namespace isThisExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isThisExpression.Handle = isThisExpression as any; + +export function isSuperExpression(node: Node): node is SuperExpression { + return node.kind === SyntaxKind.SuperKeyword; +} + +export declare namespace isSuperExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isSuperExpression.Handle = isSuperExpression as any; + +export function isImportExpression(node: Node): node is ImportExpression { + return node.kind === SyntaxKind.ImportKeyword; +} + +export declare namespace isImportExpression { + function Handle>(node: T): node is SpecializeNodeHandle; +} + +isImportExpression.Handle = isImportExpression as any; diff --git a/packages/typescript/src/ast/is.ts b/packages/typescript/src/ast/is.ts index ecf91f4c74f3b..963f045edc1a3 100644 --- a/packages/typescript/src/ast/is.ts +++ b/packages/typescript/src/ast/is.ts @@ -1,582 +1,582 @@ -// is.ts — Hand-written type guard functions -// Generated guards are in is.generated.ts - -import { ModifierFlags } from "#enums/modifierFlags"; -import { NodeFlags } from "#enums/nodeFlags"; -import { OuterExpressionKinds } from "#enums/outerExpressionKinds"; -import { ScriptKind } from "#enums/scriptKind"; -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - AsExpression, - BindingPattern, - BlockOrExpression, - BooleanLiteral, - ComputedPropertyName, - ConciseBody, - ExclamationToken, - Expression, - ExpressionWithTypeArguments, - ForInitializer, - ForInOrOfStatement, - ForStatement, - Identifier, - JSDocTypeExpression, - JSDocTypeLiteral, - JsxTagNameExpression, - LeftHandSideExpression, - LiteralExpression, - MetaProperty, - MinusToken, - ModuleDeclaration, - Node, - NonNullExpression, - NullLiteral, - ParenthesizedExpression, - PartiallyEmittedExpression, - PlusToken, - PrefixUnaryExpression, - QuestionToken, - ReadonlyKeyword, - SatisfiesExpression, - Statement, - TemplateMiddle, - TemplateTail, - ThisTypeNode, - TypeAssertion, - TypeNode, - UnaryExpressionBase, -} from "./ast.ts"; -import { - isBinaryExpression, - isClassLikeDeclaration, - isComputedPropertyName, - isHeritageClause, - isIdentifier, - isJSDocAugmentsTag, - isJSDocImplementsTag, - isJSDocLink, - isJSDocLinkCode, - isJSDocLinkPlain, - isJSDocNameReference, - isLiteralExpression, - isShorthandPropertyAssignment, -} from "./is.generated.ts"; -import { - hasExpression, - hasInitializer, - hasObjectAssignmentInitializer, -} from "./utils.ts"; - -export * from "./is.generated.ts"; - -type JSDocNamespaceDeclaration = ModuleDeclaration; - -type WrappedExpression = - | ParenthesizedExpression - | TypeAssertion - | AsExpression - | SatisfiesExpression - | ExpressionWithTypeArguments - | NonNullExpression - | PartiallyEmittedExpression; - -type OuterExpression = WrappedExpression; - -export function isTypeNode(node: Node): node is TypeNode { - return isTypeNodeKind(node.kind); -} - -function isTypeNodeKind(kind: SyntaxKind): boolean { - return kind >= SyntaxKind.FirstTypeNode && kind <= SyntaxKind.LastTypeNode - || kind === SyntaxKind.AnyKeyword - || kind === SyntaxKind.UnknownKeyword - || kind === SyntaxKind.NumberKeyword - || kind === SyntaxKind.BigIntKeyword - || kind === SyntaxKind.ObjectKeyword - || kind === SyntaxKind.BooleanKeyword - || kind === SyntaxKind.StringKeyword - || kind === SyntaxKind.SymbolKeyword - || kind === SyntaxKind.VoidKeyword - || kind === SyntaxKind.UndefinedKeyword - || kind === SyntaxKind.NeverKeyword - || kind === SyntaxKind.IntrinsicKeyword - || kind === SyntaxKind.ExpressionWithTypeArguments - || kind === SyntaxKind.JSDocAllType - || kind === SyntaxKind.JSDocNullableType - || kind === SyntaxKind.JSDocNonNullableType - || kind === SyntaxKind.JSDocOptionalType - || kind === SyntaxKind.JSDocVariadicType - || kind === SyntaxKind.JSDocTypeExpression - || kind === SyntaxKind.JSDocTypeLiteral - || kind === SyntaxKind.JSDocSignature; -} - -export function isStatement(node: Node): node is Statement { - const kind = node.kind; - return kind === SyntaxKind.VariableStatement || kind === SyntaxKind.EmptyStatement - || kind === SyntaxKind.ExpressionStatement || kind === SyntaxKind.IfStatement - || kind === SyntaxKind.DoStatement || kind === SyntaxKind.WhileStatement - || kind === SyntaxKind.ForStatement || kind === SyntaxKind.ForInStatement - || kind === SyntaxKind.ForOfStatement || kind === SyntaxKind.ContinueStatement - || kind === SyntaxKind.BreakStatement || kind === SyntaxKind.ReturnStatement - || kind === SyntaxKind.WithStatement || kind === SyntaxKind.SwitchStatement - || kind === SyntaxKind.LabeledStatement || kind === SyntaxKind.ThrowStatement - || kind === SyntaxKind.TryStatement || kind === SyntaxKind.DebuggerStatement - || kind === SyntaxKind.InterfaceDeclaration || kind === SyntaxKind.TypeAliasDeclaration - || kind === SyntaxKind.EnumDeclaration || kind === SyntaxKind.ModuleDeclaration - || kind === SyntaxKind.ImportDeclaration || kind === SyntaxKind.ImportEqualsDeclaration - || kind === SyntaxKind.ExportDeclaration || kind === SyntaxKind.ExportAssignment - || kind === SyntaxKind.NamespaceExportDeclaration || kind === SyntaxKind.FunctionDeclaration - || kind === SyntaxKind.ClassDeclaration || kind === SyntaxKind.MissingDeclaration - || kind === SyntaxKind.NotEmittedStatement || kind === SyntaxKind.Block; -} - -export function isExpression(node: Node): node is Expression { - const kind = node.kind; - return kind === SyntaxKind.ConditionalExpression || kind === SyntaxKind.YieldExpression - || kind === SyntaxKind.ArrowFunction || kind === SyntaxKind.BinaryExpression - || kind === SyntaxKind.SpreadElement || kind === SyntaxKind.AsExpression - || kind === SyntaxKind.OmittedExpression - || kind === SyntaxKind.SatisfiesExpression - || kind === SyntaxKind.PrefixUnaryExpression || kind === SyntaxKind.PostfixUnaryExpression - || kind === SyntaxKind.DeleteExpression || kind === SyntaxKind.TypeOfExpression - || kind === SyntaxKind.VoidExpression || kind === SyntaxKind.AwaitExpression - || kind === SyntaxKind.TypeAssertionExpression - || kind === SyntaxKind.CallExpression || kind === SyntaxKind.NewExpression - || kind === SyntaxKind.TaggedTemplateExpression || kind === SyntaxKind.NonNullExpression - || kind === SyntaxKind.MetaProperty || kind === SyntaxKind.JsxExpression - || kind === SyntaxKind.PropertyAccessExpression || kind === SyntaxKind.ElementAccessExpression - || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ClassExpression - || kind === SyntaxKind.ParenthesizedExpression || kind === SyntaxKind.ArrayLiteralExpression - || kind === SyntaxKind.ObjectLiteralExpression || kind === SyntaxKind.TemplateExpression - || kind === SyntaxKind.Identifier - || kind === SyntaxKind.PrivateIdentifier - || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral - || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.RegularExpressionLiteral - || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.JsxElement - || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment - || kind === SyntaxKind.NullKeyword || kind === SyntaxKind.TrueKeyword - || kind === SyntaxKind.FalseKeyword || kind === SyntaxKind.ThisKeyword - || kind === SyntaxKind.SuperKeyword || kind === SyntaxKind.ImportKeyword - || kind === SyntaxKind.ExpressionWithTypeArguments; -} - -export function isValidTypeOnlyAliasUseSite(useSite: Node): boolean { - return !!(useSite.flags & NodeFlags.Ambient) - || isInJSDoc(useSite) - || isPartOfTypeQuery(useSite) - || isIdentifierInNonEmittingHeritageClause(useSite) - || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) - || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite)); -} - -function isInJSDoc(node: Node): boolean { - return !!(node.flags & NodeFlags.JSDoc); -} - -function isPartOfTypeQuery(node: Node): boolean { - while (node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.Identifier) { - node = node.parent; - } - return node.kind === SyntaxKind.TypeQuery; -} - -function isIdentifierInNonEmittingHeritageClause(node: Node): boolean { - if (!isIdentifier(node)) return false; - - const heritageClause = findAncestor(node.parent, parent => { - switch (parent.kind) { - case SyntaxKind.HeritageClause: - return true; - case SyntaxKind.PropertyAccessExpression: - case SyntaxKind.ExpressionWithTypeArguments: - return false; - default: - return "quit"; - } - }); - - return heritageClause !== undefined && - isHeritageClause(heritageClause) && - (heritageClause.token === SyntaxKind.ImplementsKeyword || heritageClause.parent.kind === SyntaxKind.InterfaceDeclaration); -} - -function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node: Node): boolean { - while (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PropertyAccessExpression) { - node = node.parent; - } - if (!isComputedPropertyName(node)) { - return false; - } - if (hasModifierFlags(node.parent) && node.parent.modifierFlags & ModifierFlags.Abstract) { - return true; - } - const containerKind = node.parent.parent.kind; - return containerKind === SyntaxKind.InterfaceDeclaration || containerKind === SyntaxKind.TypeLiteral; -} - -function isShorthandPropertyNameUseSite(useSite: Node): boolean { - return isIdentifier(useSite) && isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite; -} - -type AncestorCallbackResult = boolean | "quit"; - -function findAncestor(node: Node, callback: (node: Node) => AncestorCallbackResult): Node | undefined { - while (node) { - const result = callback(node); - if (result === "quit") { - return undefined; - } - if (result) { - return node; - } - node = node.parent; - } -} - -function hasModifierFlags(node: Node): node is Node & { readonly modifierFlags: ModifierFlags; } { - return "modifierFlags" in node; -} - -function isExpressionNode(node: Node): boolean { - switch (node.kind) { - case SyntaxKind.SuperKeyword: - case SyntaxKind.NullKeyword: - case SyntaxKind.TrueKeyword: - case SyntaxKind.FalseKeyword: - case SyntaxKind.RegularExpressionLiteral: - case SyntaxKind.ArrayLiteralExpression: - case SyntaxKind.ObjectLiteralExpression: - case SyntaxKind.PropertyAccessExpression: - case SyntaxKind.ElementAccessExpression: - case SyntaxKind.CallExpression: - case SyntaxKind.NewExpression: - case SyntaxKind.TaggedTemplateExpression: - case SyntaxKind.AsExpression: - case SyntaxKind.TypeAssertionExpression: - case SyntaxKind.SatisfiesExpression: - case SyntaxKind.NonNullExpression: - case SyntaxKind.ParenthesizedExpression: - case SyntaxKind.FunctionExpression: - case SyntaxKind.ClassExpression: - case SyntaxKind.ArrowFunction: - case SyntaxKind.VoidExpression: - case SyntaxKind.DeleteExpression: - case SyntaxKind.TypeOfExpression: - case SyntaxKind.PrefixUnaryExpression: - case SyntaxKind.PostfixUnaryExpression: - case SyntaxKind.BinaryExpression: - case SyntaxKind.ConditionalExpression: - case SyntaxKind.SpreadElement: - case SyntaxKind.TemplateExpression: - case SyntaxKind.OmittedExpression: - case SyntaxKind.JsxElement: - case SyntaxKind.JsxSelfClosingElement: - case SyntaxKind.JsxFragment: - case SyntaxKind.YieldExpression: - case SyntaxKind.AwaitExpression: - return true; - case SyntaxKind.MetaProperty: - return !isImportCall(node.parent) || node.parent.expression !== node; - case SyntaxKind.ExpressionWithTypeArguments: - return !isHeritageClause(node.parent); - case SyntaxKind.QualifiedName: - while (node.parent.kind === SyntaxKind.QualifiedName) { - node = node.parent; - } - return node.parent.kind === SyntaxKind.TypeQuery || isInJSDocNameReference(node) || isJSXTagName(node); - case SyntaxKind.PrivateIdentifier: - return isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === SyntaxKind.InKeyword; - case SyntaxKind.Identifier: - if (node.parent.kind === SyntaxKind.TypeQuery || isInJSDocNameReference(node) || isJSXTagName(node)) { - return true; - } - // falls through - case SyntaxKind.NumericLiteral: - case SyntaxKind.BigIntLiteral: - case SyntaxKind.StringLiteral: - case SyntaxKind.NoSubstitutionTemplateLiteral: - case SyntaxKind.ThisKeyword: - return isInExpressionContext(node); - default: - return false; - } -} - -function isImportCall(node: Node): node is Node & { readonly expression: MetaProperty; } { - if (node.kind !== SyntaxKind.CallExpression || !hasExpression(node) || !node.expression) { - return false; - } - return node.expression.kind === SyntaxKind.MetaProperty - && (node.expression as MetaProperty).keywordToken === SyntaxKind.ImportKeyword; -} - -function isJSDocLinkLike(node: Node): boolean { - return isJSDocLink(node) || isJSDocLinkCode(node) || isJSDocLinkPlain(node); -} - -function isInJSDocNameReference(node: Node): boolean { - return isJSDocLinkLike(node.parent) || isJSDocNameReference(node.parent); -} - -function isInExpressionContext(node: Node): boolean { - const parent = node.parent; - switch (parent.kind) { - case SyntaxKind.VariableDeclaration: - case SyntaxKind.Parameter: - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.PropertySignature: - case SyntaxKind.EnumMember: - case SyntaxKind.PropertyAssignment: - case SyntaxKind.BindingElement: - return hasInitializer(parent) && parent.initializer === node; - case SyntaxKind.ExpressionStatement: - case SyntaxKind.IfStatement: - case SyntaxKind.DoStatement: - case SyntaxKind.WhileStatement: - case SyntaxKind.ReturnStatement: - case SyntaxKind.WithStatement: - case SyntaxKind.SwitchStatement: - case SyntaxKind.CaseClause: - case SyntaxKind.DefaultClause: - case SyntaxKind.ThrowStatement: - return hasExpression(parent) && parent.expression === node; - case SyntaxKind.ForStatement: - return isForStatementExpression(node, parent as ForStatement); - case SyntaxKind.ForInStatement: - case SyntaxKind.ForOfStatement: - return isForInOrOfStatementExpression(node, parent as ForInOrOfStatement); - case SyntaxKind.TypeAssertionExpression: - case SyntaxKind.AsExpression: - return hasExpression(parent) && parent.expression === node; - case SyntaxKind.TemplateSpan: - return hasExpression(parent) && parent.expression === node; - case SyntaxKind.ComputedPropertyName: - return (parent as ComputedPropertyName).expression === node; - case SyntaxKind.Decorator: - case SyntaxKind.JsxExpression: - case SyntaxKind.JsxSpreadAttribute: - case SyntaxKind.SpreadAssignment: - return true; - case SyntaxKind.ExpressionWithTypeArguments: - return (parent as ExpressionWithTypeArguments).expression === node && !isPartOfTypeExpressionWithTypeArguments(parent as ExpressionWithTypeArguments); - case SyntaxKind.ShorthandPropertyAssignment: - return hasObjectAssignmentInitializer(parent) && parent.objectAssignmentInitializer === node; - case SyntaxKind.SatisfiesExpression: - return hasExpression(parent) && parent.expression === node; - default: - return isExpressionNode(parent); - } -} - -function isPartOfTypeExpressionWithTypeArguments(node: ExpressionWithTypeArguments): boolean { - const parent = node.parent; - return isHeritageClause(parent) && (!isClassLikeDeclaration(parent.parent) || parent.token === SyntaxKind.ImplementsKeyword) || - isJSDocImplementsTag(parent) || - isJSDocAugmentsTag(parent); -} - -function isForStatementExpression(node: Node, parent: ForStatement): boolean { - return parent.initializer === node && parent.initializer.kind !== SyntaxKind.VariableDeclarationList || - parent.condition === node || - parent.incrementor === node; -} - -function isForInOrOfStatementExpression(node: Node, parent: ForInOrOfStatement): boolean { - return parent.initializer === node && parent.initializer.kind !== SyntaxKind.VariableDeclarationList || - parent.expression === node; -} - -function isJSXTagName(node: Node): boolean { - const parent = node.parent; - switch (parent.kind) { - case SyntaxKind.JsxOpeningElement: - case SyntaxKind.JsxSelfClosingElement: - case SyntaxKind.JsxClosingElement: - return hasTagName(parent) && parent.tagName === node; - default: - return false; - } -} - -function hasTagName(node: Node): node is Node & { readonly tagName: Node; } { - return "tagName" in node; -} - -export function isBlockOrExpression(node: Node): node is BlockOrExpression { - return node.kind === SyntaxKind.Block || isExpression(node); -} - -export function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression { - return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind); -} - -export function skipPartiallyEmittedExpressions(node: Expression): Expression; -export function skipPartiallyEmittedExpressions(node: Node): Node; -export function skipPartiallyEmittedExpressions(node: Node) { - return skipOuterExpressions(node, OuterExpressionKinds.PartiallyEmittedExpressions); -} - -function isLeftHandSideExpressionKind(kind: SyntaxKind): boolean { - switch (kind) { - case SyntaxKind.PropertyAccessExpression: - case SyntaxKind.ElementAccessExpression: - case SyntaxKind.NewExpression: - case SyntaxKind.CallExpression: - case SyntaxKind.JsxElement: - case SyntaxKind.JsxSelfClosingElement: - case SyntaxKind.JsxFragment: - case SyntaxKind.TaggedTemplateExpression: - case SyntaxKind.ArrayLiteralExpression: - case SyntaxKind.ParenthesizedExpression: - case SyntaxKind.ObjectLiteralExpression: - case SyntaxKind.ClassExpression: - case SyntaxKind.FunctionExpression: - case SyntaxKind.Identifier: - case SyntaxKind.PrivateIdentifier: // technically this is only an Expression if it's in a `#field in expr` BinaryExpression - case SyntaxKind.RegularExpressionLiteral: - case SyntaxKind.NumericLiteral: - case SyntaxKind.BigIntLiteral: - case SyntaxKind.StringLiteral: - case SyntaxKind.NoSubstitutionTemplateLiteral: - case SyntaxKind.TemplateExpression: - case SyntaxKind.FalseKeyword: - case SyntaxKind.NullKeyword: - case SyntaxKind.ThisKeyword: - case SyntaxKind.TrueKeyword: - case SyntaxKind.SuperKeyword: - case SyntaxKind.NonNullExpression: - case SyntaxKind.ExpressionWithTypeArguments: - case SyntaxKind.MetaProperty: - case SyntaxKind.ImportKeyword: // technically this is only an Expression if it's in a CallExpression - case SyntaxKind.MissingDeclaration: - return true; - default: - return false; - } -} - -export function isUnaryExpression(node: Node): node is UnaryExpressionBase { - return isUnaryExpressionKind(skipPartiallyEmittedExpressions(node).kind); -} - -function isUnaryExpressionKind(kind: SyntaxKind): boolean { - switch (kind) { - case SyntaxKind.PrefixUnaryExpression: - case SyntaxKind.PostfixUnaryExpression: - case SyntaxKind.DeleteExpression: - case SyntaxKind.TypeOfExpression: - case SyntaxKind.VoidExpression: - case SyntaxKind.AwaitExpression: - case SyntaxKind.TypeAssertionExpression: - return true; - default: - return isLeftHandSideExpressionKind(kind); - } -} - -/** @internal */ -export function isOuterExpression(node: Node, kinds: OuterExpressionKinds = OuterExpressionKinds.All): node is OuterExpression { - switch (node.kind) { - case SyntaxKind.ParenthesizedExpression: - if (kinds & OuterExpressionKinds.ExcludeJSDocTypeAssertion && isJSDocTypeAssertion(node as ParenthesizedExpression)) { - return false; - } - return (kinds & OuterExpressionKinds.Parentheses) !== 0; - case SyntaxKind.TypeAssertionExpression: - case SyntaxKind.AsExpression: - return (kinds & OuterExpressionKinds.TypeAssertions) !== 0; - case SyntaxKind.SatisfiesExpression: - return (kinds & (OuterExpressionKinds.ExpressionsWithTypeArguments | OuterExpressionKinds.Satisfies)) !== 0; - case SyntaxKind.ExpressionWithTypeArguments: - return (kinds & OuterExpressionKinds.ExpressionsWithTypeArguments) !== 0; - case SyntaxKind.NonNullExpression: - return (kinds & OuterExpressionKinds.NonNullAssertions) !== 0; - case SyntaxKind.PartiallyEmittedExpression: - return (kinds & OuterExpressionKinds.PartiallyEmittedExpressions) !== 0; - } - return false; -} - -/** @internal */ -export function skipOuterExpressions(node: WrappedExpression): T; -/** @internal */ -export function skipOuterExpressions(node: Expression, kinds?: OuterExpressionKinds): Expression; -/** @internal */ -export function skipOuterExpressions(node: Node, kinds?: OuterExpressionKinds): Node; -/** @internal */ -export function skipOuterExpressions(node: Node, kinds = OuterExpressionKinds.All) { - while (isOuterExpression(node, kinds)) { - node = node.expression; - } - return node; -} - -function isJSDocTypeAssertion(node: ParenthesizedExpression): boolean { - const sourceFile = node.getSourceFile(); - if (sourceFile.scriptKind !== ScriptKind.JS && sourceFile.scriptKind !== ScriptKind.JSX) { - return false; - } - const expression = node.expression; - if (expression.kind !== SyntaxKind.AsExpression) { - return false; - } - const asExpression = expression as AsExpression; - return !!asExpression.type - && (asExpression.type.flags & NodeFlags.Reparsed) !== 0; -} - -export function isBindingPattern(node: Node): node is BindingPattern { - return node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; -} - -export function isConciseBody(node: Node): node is ConciseBody { - return node.kind === SyntaxKind.Block || isExpression(node); -} - -export function isForInitializer(node: Node): node is ForInitializer { - return node.kind === SyntaxKind.VariableDeclarationList || isExpression(node); -} - -export function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken { - return node.kind === SyntaxKind.QuestionToken || node.kind === SyntaxKind.ExclamationToken; -} - -export function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisType; -} - -export function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken { - return node.kind === SyntaxKind.ReadonlyKeyword || node.kind === SyntaxKind.PlusToken || node.kind === SyntaxKind.MinusToken; -} - -export function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken { - return node.kind === SyntaxKind.QuestionToken || node.kind === SyntaxKind.PlusToken || node.kind === SyntaxKind.MinusToken; -} - -export function isTemplateMiddleOrTemplateTail(node: Node): node is TemplateMiddle | TemplateTail { - return node.kind === SyntaxKind.TemplateMiddle || node.kind === SyntaxKind.TemplateTail; -} - -export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { - const kind = node.kind; - return kind === SyntaxKind.NullKeyword || kind === SyntaxKind.TrueKeyword - || kind === SyntaxKind.FalseKeyword || kind === SyntaxKind.PrefixUnaryExpression - || isLiteralExpression(node); -} - -export function isIdentifierOrJSDocNamespaceDeclaration(node: Node): node is Identifier | JSDocNamespaceDeclaration { - return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ModuleDeclaration; -} - -export function isJSDocTypeExpressionOrJSDocTypeLiteral(node: Node): node is JSDocTypeExpression | JSDocTypeLiteral { - return node.kind === SyntaxKind.JSDocTypeExpression || node.kind === SyntaxKind.JSDocTypeLiteral; -} - -export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression { - const kind = node.kind; - return kind === SyntaxKind.ThisKeyword - || kind === SyntaxKind.Identifier - || kind === SyntaxKind.PropertyAccessExpression - || kind === SyntaxKind.JsxNamespacedName; -} +// is.ts — Hand-written type guard functions +// Generated guards are in is.generated.ts + +import { ModifierFlags } from "#enums/modifierFlags"; +import { NodeFlags } from "#enums/nodeFlags"; +import { OuterExpressionKinds } from "#enums/outerExpressionKinds"; +import { ScriptKind } from "#enums/scriptKind"; +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + AsExpression, + BindingPattern, + BlockOrExpression, + BooleanLiteral, + ComputedPropertyName, + ConciseBody, + ExclamationToken, + Expression, + ExpressionWithTypeArguments, + ForInitializer, + ForInOrOfStatement, + ForStatement, + Identifier, + JSDocTypeExpression, + JSDocTypeLiteral, + JsxTagNameExpression, + LeftHandSideExpression, + LiteralExpression, + MetaProperty, + MinusToken, + ModuleDeclaration, + Node, + NonNullExpression, + NullLiteral, + ParenthesizedExpression, + PartiallyEmittedExpression, + PlusToken, + PrefixUnaryExpression, + QuestionToken, + ReadonlyKeyword, + SatisfiesExpression, + Statement, + TemplateMiddle, + TemplateTail, + ThisTypeNode, + TypeAssertion, + TypeNode, + UnaryExpressionBase, +} from "./ast.ts"; +import { + isBinaryExpression, + isClassLikeDeclaration, + isComputedPropertyName, + isHeritageClause, + isIdentifier, + isJSDocAugmentsTag, + isJSDocImplementsTag, + isJSDocLink, + isJSDocLinkCode, + isJSDocLinkPlain, + isJSDocNameReference, + isLiteralExpression, + isShorthandPropertyAssignment, +} from "./is.generated.ts"; +import { + hasExpression, + hasInitializer, + hasObjectAssignmentInitializer, +} from "./utils.ts"; + +export * from "./is.generated.ts"; + +type JSDocNamespaceDeclaration = ModuleDeclaration; + +type WrappedExpression = + | ParenthesizedExpression + | TypeAssertion + | AsExpression + | SatisfiesExpression + | ExpressionWithTypeArguments + | NonNullExpression + | PartiallyEmittedExpression; + +type OuterExpression = WrappedExpression; + +export function isTypeNode(node: Node): node is TypeNode { + return isTypeNodeKind(node.kind); +} + +function isTypeNodeKind(kind: SyntaxKind): boolean { + return kind >= SyntaxKind.FirstTypeNode && kind <= SyntaxKind.LastTypeNode + || kind === SyntaxKind.AnyKeyword + || kind === SyntaxKind.UnknownKeyword + || kind === SyntaxKind.NumberKeyword + || kind === SyntaxKind.BigIntKeyword + || kind === SyntaxKind.ObjectKeyword + || kind === SyntaxKind.BooleanKeyword + || kind === SyntaxKind.StringKeyword + || kind === SyntaxKind.SymbolKeyword + || kind === SyntaxKind.VoidKeyword + || kind === SyntaxKind.UndefinedKeyword + || kind === SyntaxKind.NeverKeyword + || kind === SyntaxKind.IntrinsicKeyword + || kind === SyntaxKind.ExpressionWithTypeArguments + || kind === SyntaxKind.JSDocAllType + || kind === SyntaxKind.JSDocNullableType + || kind === SyntaxKind.JSDocNonNullableType + || kind === SyntaxKind.JSDocOptionalType + || kind === SyntaxKind.JSDocVariadicType + || kind === SyntaxKind.JSDocTypeExpression + || kind === SyntaxKind.JSDocTypeLiteral + || kind === SyntaxKind.JSDocSignature; +} + +export function isStatement(node: Node): node is Statement { + const kind = node.kind; + return kind === SyntaxKind.VariableStatement || kind === SyntaxKind.EmptyStatement + || kind === SyntaxKind.ExpressionStatement || kind === SyntaxKind.IfStatement + || kind === SyntaxKind.DoStatement || kind === SyntaxKind.WhileStatement + || kind === SyntaxKind.ForStatement || kind === SyntaxKind.ForInStatement + || kind === SyntaxKind.ForOfStatement || kind === SyntaxKind.ContinueStatement + || kind === SyntaxKind.BreakStatement || kind === SyntaxKind.ReturnStatement + || kind === SyntaxKind.WithStatement || kind === SyntaxKind.SwitchStatement + || kind === SyntaxKind.LabeledStatement || kind === SyntaxKind.ThrowStatement + || kind === SyntaxKind.TryStatement || kind === SyntaxKind.DebuggerStatement + || kind === SyntaxKind.InterfaceDeclaration || kind === SyntaxKind.TypeAliasDeclaration + || kind === SyntaxKind.EnumDeclaration || kind === SyntaxKind.ModuleDeclaration + || kind === SyntaxKind.ImportDeclaration || kind === SyntaxKind.ImportEqualsDeclaration + || kind === SyntaxKind.ExportDeclaration || kind === SyntaxKind.ExportAssignment + || kind === SyntaxKind.NamespaceExportDeclaration || kind === SyntaxKind.FunctionDeclaration + || kind === SyntaxKind.ClassDeclaration || kind === SyntaxKind.MissingDeclaration + || kind === SyntaxKind.NotEmittedStatement || kind === SyntaxKind.Block; +} + +export function isExpression(node: Node): node is Expression { + const kind = node.kind; + return kind === SyntaxKind.ConditionalExpression || kind === SyntaxKind.YieldExpression + || kind === SyntaxKind.ArrowFunction || kind === SyntaxKind.BinaryExpression + || kind === SyntaxKind.SpreadElement || kind === SyntaxKind.AsExpression + || kind === SyntaxKind.OmittedExpression + || kind === SyntaxKind.SatisfiesExpression + || kind === SyntaxKind.PrefixUnaryExpression || kind === SyntaxKind.PostfixUnaryExpression + || kind === SyntaxKind.DeleteExpression || kind === SyntaxKind.TypeOfExpression + || kind === SyntaxKind.VoidExpression || kind === SyntaxKind.AwaitExpression + || kind === SyntaxKind.TypeAssertionExpression + || kind === SyntaxKind.CallExpression || kind === SyntaxKind.NewExpression + || kind === SyntaxKind.TaggedTemplateExpression || kind === SyntaxKind.NonNullExpression + || kind === SyntaxKind.MetaProperty || kind === SyntaxKind.JsxExpression + || kind === SyntaxKind.PropertyAccessExpression || kind === SyntaxKind.ElementAccessExpression + || kind === SyntaxKind.FunctionExpression || kind === SyntaxKind.ClassExpression + || kind === SyntaxKind.ParenthesizedExpression || kind === SyntaxKind.ArrayLiteralExpression + || kind === SyntaxKind.ObjectLiteralExpression || kind === SyntaxKind.TemplateExpression + || kind === SyntaxKind.Identifier + || kind === SyntaxKind.PrivateIdentifier + || kind === SyntaxKind.NumericLiteral || kind === SyntaxKind.BigIntLiteral + || kind === SyntaxKind.StringLiteral || kind === SyntaxKind.RegularExpressionLiteral + || kind === SyntaxKind.NoSubstitutionTemplateLiteral || kind === SyntaxKind.JsxElement + || kind === SyntaxKind.JsxSelfClosingElement || kind === SyntaxKind.JsxFragment + || kind === SyntaxKind.NullKeyword || kind === SyntaxKind.TrueKeyword + || kind === SyntaxKind.FalseKeyword || kind === SyntaxKind.ThisKeyword + || kind === SyntaxKind.SuperKeyword || kind === SyntaxKind.ImportKeyword + || kind === SyntaxKind.ExpressionWithTypeArguments; +} + +export function isValidTypeOnlyAliasUseSite(useSite: Node): boolean { + return !!(useSite.flags & NodeFlags.Ambient) + || isInJSDoc(useSite) + || isPartOfTypeQuery(useSite) + || isIdentifierInNonEmittingHeritageClause(useSite) + || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) + || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite)); +} + +function isInJSDoc(node: Node): boolean { + return !!(node.flags & NodeFlags.JSDoc); +} + +function isPartOfTypeQuery(node: Node): boolean { + while (node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.Identifier) { + node = node.parent; + } + return node.kind === SyntaxKind.TypeQuery; +} + +function isIdentifierInNonEmittingHeritageClause(node: Node): boolean { + if (!isIdentifier(node)) return false; + + const heritageClause = findAncestor(node.parent, parent => { + switch (parent.kind) { + case SyntaxKind.HeritageClause: + return true; + case SyntaxKind.PropertyAccessExpression: + case SyntaxKind.ExpressionWithTypeArguments: + return false; + default: + return "quit"; + } + }); + + return heritageClause !== undefined && + isHeritageClause(heritageClause) && + (heritageClause.token === SyntaxKind.ImplementsKeyword || heritageClause.parent.kind === SyntaxKind.InterfaceDeclaration); +} + +function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node: Node): boolean { + while (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PropertyAccessExpression) { + node = node.parent; + } + if (!isComputedPropertyName(node)) { + return false; + } + if (hasModifierFlags(node.parent) && node.parent.modifierFlags & ModifierFlags.Abstract) { + return true; + } + const containerKind = node.parent.parent.kind; + return containerKind === SyntaxKind.InterfaceDeclaration || containerKind === SyntaxKind.TypeLiteral; +} + +function isShorthandPropertyNameUseSite(useSite: Node): boolean { + return isIdentifier(useSite) && isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite; +} + +type AncestorCallbackResult = boolean | "quit"; + +function findAncestor(node: Node, callback: (node: Node) => AncestorCallbackResult): Node | undefined { + while (node) { + const result = callback(node); + if (result === "quit") { + return undefined; + } + if (result) { + return node; + } + node = node.parent; + } +} + +function hasModifierFlags(node: Node): node is Node & { readonly modifierFlags: ModifierFlags; } { + return "modifierFlags" in node; +} + +function isExpressionNode(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.SuperKeyword: + case SyntaxKind.NullKeyword: + case SyntaxKind.TrueKeyword: + case SyntaxKind.FalseKeyword: + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.ArrayLiteralExpression: + case SyntaxKind.ObjectLiteralExpression: + case SyntaxKind.PropertyAccessExpression: + case SyntaxKind.ElementAccessExpression: + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + case SyntaxKind.TaggedTemplateExpression: + case SyntaxKind.AsExpression: + case SyntaxKind.TypeAssertionExpression: + case SyntaxKind.SatisfiesExpression: + case SyntaxKind.NonNullExpression: + case SyntaxKind.ParenthesizedExpression: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ClassExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.VoidExpression: + case SyntaxKind.DeleteExpression: + case SyntaxKind.TypeOfExpression: + case SyntaxKind.PrefixUnaryExpression: + case SyntaxKind.PostfixUnaryExpression: + case SyntaxKind.BinaryExpression: + case SyntaxKind.ConditionalExpression: + case SyntaxKind.SpreadElement: + case SyntaxKind.TemplateExpression: + case SyntaxKind.OmittedExpression: + case SyntaxKind.JsxElement: + case SyntaxKind.JsxSelfClosingElement: + case SyntaxKind.JsxFragment: + case SyntaxKind.YieldExpression: + case SyntaxKind.AwaitExpression: + return true; + case SyntaxKind.MetaProperty: + return !isImportCall(node.parent) || node.parent.expression !== node; + case SyntaxKind.ExpressionWithTypeArguments: + return !isHeritageClause(node.parent); + case SyntaxKind.QualifiedName: + while (node.parent.kind === SyntaxKind.QualifiedName) { + node = node.parent; + } + return node.parent.kind === SyntaxKind.TypeQuery || isInJSDocNameReference(node) || isJSXTagName(node); + case SyntaxKind.PrivateIdentifier: + return isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === SyntaxKind.InKeyword; + case SyntaxKind.Identifier: + if (node.parent.kind === SyntaxKind.TypeQuery || isInJSDocNameReference(node) || isJSXTagName(node)) { + return true; + } + // falls through + case SyntaxKind.NumericLiteral: + case SyntaxKind.BigIntLiteral: + case SyntaxKind.StringLiteral: + case SyntaxKind.NoSubstitutionTemplateLiteral: + case SyntaxKind.ThisKeyword: + return isInExpressionContext(node); + default: + return false; + } +} + +function isImportCall(node: Node): node is Node & { readonly expression: MetaProperty; } { + if (node.kind !== SyntaxKind.CallExpression || !hasExpression(node) || !node.expression) { + return false; + } + return node.expression.kind === SyntaxKind.MetaProperty + && (node.expression as MetaProperty).keywordToken === SyntaxKind.ImportKeyword; +} + +function isJSDocLinkLike(node: Node): boolean { + return isJSDocLink(node) || isJSDocLinkCode(node) || isJSDocLinkPlain(node); +} + +function isInJSDocNameReference(node: Node): boolean { + return isJSDocLinkLike(node.parent) || isJSDocNameReference(node.parent); +} + +function isInExpressionContext(node: Node): boolean { + const parent = node.parent; + switch (parent.kind) { + case SyntaxKind.VariableDeclaration: + case SyntaxKind.Parameter: + case SyntaxKind.PropertyDeclaration: + case SyntaxKind.PropertySignature: + case SyntaxKind.EnumMember: + case SyntaxKind.PropertyAssignment: + case SyntaxKind.BindingElement: + return hasInitializer(parent) && parent.initializer === node; + case SyntaxKind.ExpressionStatement: + case SyntaxKind.IfStatement: + case SyntaxKind.DoStatement: + case SyntaxKind.WhileStatement: + case SyntaxKind.ReturnStatement: + case SyntaxKind.WithStatement: + case SyntaxKind.SwitchStatement: + case SyntaxKind.CaseClause: + case SyntaxKind.DefaultClause: + case SyntaxKind.ThrowStatement: + return hasExpression(parent) && parent.expression === node; + case SyntaxKind.ForStatement: + return isForStatementExpression(node, parent as ForStatement); + case SyntaxKind.ForInStatement: + case SyntaxKind.ForOfStatement: + return isForInOrOfStatementExpression(node, parent as ForInOrOfStatement); + case SyntaxKind.TypeAssertionExpression: + case SyntaxKind.AsExpression: + return hasExpression(parent) && parent.expression === node; + case SyntaxKind.TemplateSpan: + return hasExpression(parent) && parent.expression === node; + case SyntaxKind.ComputedPropertyName: + return (parent as ComputedPropertyName).expression === node; + case SyntaxKind.Decorator: + case SyntaxKind.JsxExpression: + case SyntaxKind.JsxSpreadAttribute: + case SyntaxKind.SpreadAssignment: + return true; + case SyntaxKind.ExpressionWithTypeArguments: + return (parent as ExpressionWithTypeArguments).expression === node && !isPartOfTypeExpressionWithTypeArguments(parent as ExpressionWithTypeArguments); + case SyntaxKind.ShorthandPropertyAssignment: + return hasObjectAssignmentInitializer(parent) && parent.objectAssignmentInitializer === node; + case SyntaxKind.SatisfiesExpression: + return hasExpression(parent) && parent.expression === node; + default: + return isExpressionNode(parent); + } +} + +function isPartOfTypeExpressionWithTypeArguments(node: ExpressionWithTypeArguments): boolean { + const parent = node.parent; + return isHeritageClause(parent) && (!isClassLikeDeclaration(parent.parent) || parent.token === SyntaxKind.ImplementsKeyword) || + isJSDocImplementsTag(parent) || + isJSDocAugmentsTag(parent); +} + +function isForStatementExpression(node: Node, parent: ForStatement): boolean { + return parent.initializer === node && parent.initializer.kind !== SyntaxKind.VariableDeclarationList || + parent.condition === node || + parent.incrementor === node; +} + +function isForInOrOfStatementExpression(node: Node, parent: ForInOrOfStatement): boolean { + return parent.initializer === node && parent.initializer.kind !== SyntaxKind.VariableDeclarationList || + parent.expression === node; +} + +function isJSXTagName(node: Node): boolean { + const parent = node.parent; + switch (parent.kind) { + case SyntaxKind.JsxOpeningElement: + case SyntaxKind.JsxSelfClosingElement: + case SyntaxKind.JsxClosingElement: + return hasTagName(parent) && parent.tagName === node; + default: + return false; + } +} + +function hasTagName(node: Node): node is Node & { readonly tagName: Node; } { + return "tagName" in node; +} + +export function isBlockOrExpression(node: Node): node is BlockOrExpression { + return node.kind === SyntaxKind.Block || isExpression(node); +} + +export function isLeftHandSideExpression(node: Node): node is LeftHandSideExpression { + return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind); +} + +export function skipPartiallyEmittedExpressions(node: Expression): Expression; +export function skipPartiallyEmittedExpressions(node: Node): Node; +export function skipPartiallyEmittedExpressions(node: Node) { + return skipOuterExpressions(node, OuterExpressionKinds.PartiallyEmittedExpressions); +} + +function isLeftHandSideExpressionKind(kind: SyntaxKind): boolean { + switch (kind) { + case SyntaxKind.PropertyAccessExpression: + case SyntaxKind.ElementAccessExpression: + case SyntaxKind.NewExpression: + case SyntaxKind.CallExpression: + case SyntaxKind.JsxElement: + case SyntaxKind.JsxSelfClosingElement: + case SyntaxKind.JsxFragment: + case SyntaxKind.TaggedTemplateExpression: + case SyntaxKind.ArrayLiteralExpression: + case SyntaxKind.ParenthesizedExpression: + case SyntaxKind.ObjectLiteralExpression: + case SyntaxKind.ClassExpression: + case SyntaxKind.FunctionExpression: + case SyntaxKind.Identifier: + case SyntaxKind.PrivateIdentifier: // technically this is only an Expression if it's in a `#field in expr` BinaryExpression + case SyntaxKind.RegularExpressionLiteral: + case SyntaxKind.NumericLiteral: + case SyntaxKind.BigIntLiteral: + case SyntaxKind.StringLiteral: + case SyntaxKind.NoSubstitutionTemplateLiteral: + case SyntaxKind.TemplateExpression: + case SyntaxKind.FalseKeyword: + case SyntaxKind.NullKeyword: + case SyntaxKind.ThisKeyword: + case SyntaxKind.TrueKeyword: + case SyntaxKind.SuperKeyword: + case SyntaxKind.NonNullExpression: + case SyntaxKind.ExpressionWithTypeArguments: + case SyntaxKind.MetaProperty: + case SyntaxKind.ImportKeyword: // technically this is only an Expression if it's in a CallExpression + case SyntaxKind.MissingDeclaration: + return true; + default: + return false; + } +} + +export function isUnaryExpression(node: Node): node is UnaryExpressionBase { + return isUnaryExpressionKind(skipPartiallyEmittedExpressions(node).kind); +} + +function isUnaryExpressionKind(kind: SyntaxKind): boolean { + switch (kind) { + case SyntaxKind.PrefixUnaryExpression: + case SyntaxKind.PostfixUnaryExpression: + case SyntaxKind.DeleteExpression: + case SyntaxKind.TypeOfExpression: + case SyntaxKind.VoidExpression: + case SyntaxKind.AwaitExpression: + case SyntaxKind.TypeAssertionExpression: + return true; + default: + return isLeftHandSideExpressionKind(kind); + } +} + +/** @internal */ +export function isOuterExpression(node: Node, kinds: OuterExpressionKinds = OuterExpressionKinds.All): node is OuterExpression { + switch (node.kind) { + case SyntaxKind.ParenthesizedExpression: + if (kinds & OuterExpressionKinds.ExcludeJSDocTypeAssertion && isJSDocTypeAssertion(node as ParenthesizedExpression)) { + return false; + } + return (kinds & OuterExpressionKinds.Parentheses) !== 0; + case SyntaxKind.TypeAssertionExpression: + case SyntaxKind.AsExpression: + return (kinds & OuterExpressionKinds.TypeAssertions) !== 0; + case SyntaxKind.SatisfiesExpression: + return (kinds & (OuterExpressionKinds.ExpressionsWithTypeArguments | OuterExpressionKinds.Satisfies)) !== 0; + case SyntaxKind.ExpressionWithTypeArguments: + return (kinds & OuterExpressionKinds.ExpressionsWithTypeArguments) !== 0; + case SyntaxKind.NonNullExpression: + return (kinds & OuterExpressionKinds.NonNullAssertions) !== 0; + case SyntaxKind.PartiallyEmittedExpression: + return (kinds & OuterExpressionKinds.PartiallyEmittedExpressions) !== 0; + } + return false; +} + +/** @internal */ +export function skipOuterExpressions(node: WrappedExpression): T; +/** @internal */ +export function skipOuterExpressions(node: Expression, kinds?: OuterExpressionKinds): Expression; +/** @internal */ +export function skipOuterExpressions(node: Node, kinds?: OuterExpressionKinds): Node; +/** @internal */ +export function skipOuterExpressions(node: Node, kinds = OuterExpressionKinds.All) { + while (isOuterExpression(node, kinds)) { + node = node.expression; + } + return node; +} + +function isJSDocTypeAssertion(node: ParenthesizedExpression): boolean { + const sourceFile = node.getSourceFile(); + if (sourceFile.scriptKind !== ScriptKind.JS && sourceFile.scriptKind !== ScriptKind.JSX) { + return false; + } + const expression = node.expression; + if (expression.kind !== SyntaxKind.AsExpression) { + return false; + } + const asExpression = expression as AsExpression; + return !!asExpression.type + && (asExpression.type.flags & NodeFlags.Reparsed) !== 0; +} + +export function isBindingPattern(node: Node): node is BindingPattern { + return node.kind === SyntaxKind.ObjectBindingPattern || node.kind === SyntaxKind.ArrayBindingPattern; +} + +export function isConciseBody(node: Node): node is ConciseBody { + return node.kind === SyntaxKind.Block || isExpression(node); +} + +export function isForInitializer(node: Node): node is ForInitializer { + return node.kind === SyntaxKind.VariableDeclarationList || isExpression(node); +} + +export function isQuestionOrExclamationToken(node: Node): node is QuestionToken | ExclamationToken { + return node.kind === SyntaxKind.QuestionToken || node.kind === SyntaxKind.ExclamationToken; +} + +export function isIdentifierOrThisTypeNode(node: Node): node is Identifier | ThisTypeNode { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisType; +} + +export function isReadonlyKeywordOrPlusOrMinusToken(node: Node): node is ReadonlyKeyword | PlusToken | MinusToken { + return node.kind === SyntaxKind.ReadonlyKeyword || node.kind === SyntaxKind.PlusToken || node.kind === SyntaxKind.MinusToken; +} + +export function isQuestionOrPlusOrMinusToken(node: Node): node is QuestionToken | PlusToken | MinusToken { + return node.kind === SyntaxKind.QuestionToken || node.kind === SyntaxKind.PlusToken || node.kind === SyntaxKind.MinusToken; +} + +export function isTemplateMiddleOrTemplateTail(node: Node): node is TemplateMiddle | TemplateTail { + return node.kind === SyntaxKind.TemplateMiddle || node.kind === SyntaxKind.TemplateTail; +} + +export function isLiteralTypeLiteral(node: Node): node is NullLiteral | BooleanLiteral | LiteralExpression | PrefixUnaryExpression { + const kind = node.kind; + return kind === SyntaxKind.NullKeyword || kind === SyntaxKind.TrueKeyword + || kind === SyntaxKind.FalseKeyword || kind === SyntaxKind.PrefixUnaryExpression + || isLiteralExpression(node); +} + +export function isIdentifierOrJSDocNamespaceDeclaration(node: Node): node is Identifier | JSDocNamespaceDeclaration { + return node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ModuleDeclaration; +} + +export function isJSDocTypeExpressionOrJSDocTypeLiteral(node: Node): node is JSDocTypeExpression | JSDocTypeLiteral { + return node.kind === SyntaxKind.JSDocTypeExpression || node.kind === SyntaxKind.JSDocTypeLiteral; +} + +export function isJsxTagNameExpression(node: Node): node is JsxTagNameExpression { + const kind = node.kind; + return kind === SyntaxKind.ThisKeyword + || kind === SyntaxKind.Identifier + || kind === SyntaxKind.PropertyAccessExpression + || kind === SyntaxKind.JsxNamespacedName; +} diff --git a/packages/typescript/src/ast/jsdoc.ts b/packages/typescript/src/ast/jsdoc.ts index 8a90f3989786c..6b6370a8e7022 100644 --- a/packages/typescript/src/ast/jsdoc.ts +++ b/packages/typescript/src/ast/jsdoc.ts @@ -1,253 +1,253 @@ -import { assertNever } from "../internal/utils.ts"; -import type { - JSDoc, - JSDocComment, - JSDocLink, - JSDocLinkCode, - JSDocLinkPlain, - JSDocParameterTag, - JSDocTag, - JSDocTemplateTag, - JsxTagNameExpression, - ParameterDeclaration, - PrivateIdentifier, - TypeParameterDeclaration, - VariableDeclarationList, -} from "./ast.generated.ts"; -import { - type EntityNameOrEntityNameExpression, - type Node, - type NodeArray, - SyntaxKind, -} from "./ast.ts"; -import { - isIdentifier, - isJSDoc, - isJSDocOverloadTag, - isJSDocParameterTag, - isJSDocSatisfiesTag, - isJSDocTemplateTag, - isJSDocTypeTag, - isParenthesizedExpression, - isPrivateIdentifier, -} from "./is.generated.ts"; - -/** Get all JSDoc tags related to a node, including those on parent nodes. */ -export function getJSDocTags(node: Node): readonly JSDocTag[] { - return getJSDocCommentsAndTags(node).flatMap(j => isJSDoc(j) ? j.tags ?? [] : j); -} - -/** Gets all JSDoc tags that match a specified predicate */ -export function getAllJSDocTags(node: Node, predicate: (tag: JSDocTag) => tag is T): readonly T[] { - return getJSDocTags(node).filter(predicate); -} - -/** Gets all JSDoc tags of a specified kind */ -export function getAllJSDocTagsOfKind(node: Node, kind: SyntaxKind): readonly JSDocTag[] { - return getJSDocTags(node).filter(doc => doc.kind === kind); -} - -/** Gets the text of a jsdoc comment, flattening links to their text. */ -export function getTextOfJSDocComment(comment?: string | NodeArray): string | undefined { - return typeof comment === "string" ? comment - : comment?.map(c => c.kind === SyntaxKind.JSDocText ? c.text : formatJSDocLink(c)).join(""); -} - -function isVariableLike(node: Node): boolean { - switch (node.kind) { - case SyntaxKind.BindingElement: - case SyntaxKind.EnumMember: - case SyntaxKind.Parameter: - case SyntaxKind.PropertyAssignment: - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.PropertySignature: - case SyntaxKind.ShorthandPropertyAssignment: - case SyntaxKind.VariableDeclaration: - return true; - } - return false; -} - -function getJSDocNodes(node: Node): JSDoc[] { - const jsDoc = node.jsDoc; - if (!jsDoc || jsDoc.length === 0) { - return []; - } - const result: JSDoc[] = []; - for (const j of jsDoc) { - if (isJSDoc(j)) { - result.push(j); - } - } - return result; -} - -/** - * Determines whether a host node owns a JSDoc tag. A `@type` / `@satisfies` tag - * attached to a parenthesized expression belongs only to that expression. - */ -function ownsJSDocTag(hostNode: Node, tag: JSDocTag): boolean { - return !(isJSDocTypeTag(tag) || isJSDocSatisfiesTag(tag)) - || !tag.parent - || !isJSDoc(tag.parent) - || !tag.parent.parent - || !isParenthesizedExpression(tag.parent.parent) - || tag.parent.parent === hostNode; -} - -function filterOwnedJSDocTags(hostNode: Node, comments: JSDoc[]): (JSDoc | JSDocTag)[] { - const result: (JSDoc | JSDocTag)[] = []; - const lastJSDoc = comments[comments.length - 1]; - for (const jsDoc of comments) { - if (jsDoc === lastJSDoc) { - const onlyOwnTags = jsDoc.tags?.every(t => ownsJSDocTag(hostNode, t)) ?? true; - if (!onlyOwnTags && jsDoc.tags) { - for (const tag of jsDoc.tags) { - if (ownsJSDocTag(hostNode, tag)) { - result.push(tag); - } - } - } - else { - result.push(jsDoc); - } - } - else { - if (!jsDoc.tags) { - continue; - } - // Tags from earlier comments only contribute their `@overload` tags. - for (const tag of jsDoc.tags) { - if (isJSDocOverloadTag(tag)) { - result.push(tag); - } - } - } - } - return result; -} - -function getJSDocParameterTags(param: ParameterDeclaration): JSDocParameterTag[] { - const result: JSDocParameterTag[] = []; - const name = param.name; - const parentTags = getJSDocTags(param.parent); - if (name && isIdentifier(name)) { - for (const tag of parentTags) { - if (isJSDocParameterTag(tag) && isIdentifier(tag.name) && tag.name.text === name.text) { - result.push(tag); - } - } - } - else if (name) { - // Binding patterns and JSDoc function syntax match parameter tags by position. - const parameters = (param.parent as { parameters?: readonly Node[]; }).parameters; - const i = parameters ? [...parameters].indexOf(param) : -1; - if (i > -1) { - const paramTags = parentTags.filter(isJSDocParameterTag); - if (i < paramTags.length) { - result.push(paramTags[i]); - } - } - } - return result; -} - -function getJSDocTypeParameterTags(typeParam: TypeParameterDeclaration): JSDocTemplateTag[] { - const result: JSDocTemplateTag[] = []; - const name = typeParam.name.text; - for (const tag of getJSDocTags(typeParam.parent)) { - if (isJSDocTemplateTag(tag) && [...tag.typeParameters].some(tp => tp.name.text === name)) { - result.push(tag); - } - } - return result; -} - -// Keep in sync with ast.GetNextJSDocCommentLocation. -function getNextJSDocCommentLocation(node: Node): Node | undefined { - const parent = node.parent; - if (parent) { - switch (parent.kind) { - case SyntaxKind.PropertyAssignment: - case SyntaxKind.ExportAssignment: - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.VariableDeclaration: - case SyntaxKind.SatisfiesExpression: - case SyntaxKind.ReturnStatement: - case SyntaxKind.VariableStatement: - case SyntaxKind.ExpressionStatement: - return parent; - case SyntaxKind.VariableDeclarationList: - if ((parent as VariableDeclarationList).declarations[0] === node) { - return parent; - } - break; - } - } - return undefined; -} - -export function getJSDocCommentsAndTags(hostNode: Node): (JSDoc | JSDocTag)[] { - const result: (JSDoc | JSDocTag)[] = []; - // Pull parameter comments from a declaring initializer (e.g. `var x = function () {}`). - if (isVariableLike(hostNode)) { - const initializer = (hostNode as { initializer?: Node; }).initializer; - if (initializer) { - const initJSDoc = getJSDocNodes(initializer); - if (initJSDoc.length) { - result.push(...filterOwnedJSDocTags(hostNode, initJSDoc)); - } - } - } - - let node: Node | undefined = hostNode; - while (node && node.parent) { - const jsDocNodes = getJSDocNodes(node); - if (jsDocNodes.length) { - result.push(...filterOwnedJSDocTags(hostNode, jsDocNodes)); - } - - if (node.kind === SyntaxKind.Parameter) { - result.push(...getJSDocParameterTags(node as ParameterDeclaration)); - break; - } - if (node.kind === SyntaxKind.TypeParameter) { - result.push(...getJSDocTypeParameterTags(node as TypeParameterDeclaration)); - break; - } - node = getNextJSDocCommentLocation(node); - } - return result; -} - -function formatJSDocLink(link: JSDocLink | JSDocLinkCode | JSDocLinkPlain) { - const kind = link.kind === SyntaxKind.JSDocLink ? "link" - : link.kind === SyntaxKind.JSDocLinkCode ? "linkcode" - : "linkplain"; - const name = link.name ? entityNameToString(link.name) : ""; - const space = link.name && (link.text === "" || link.text.startsWith("://")) ? "" : " "; - return `{@${kind} ${name}${space}${link.text}}`; -} - -function entityNameToString(name: EntityNameOrEntityNameExpression | JsxTagNameExpression | PrivateIdentifier): string { - switch (name.kind) { - case SyntaxKind.ThisKeyword: - return "this"; - case SyntaxKind.PrivateIdentifier: - case SyntaxKind.Identifier: - return name.getFullWidth() === 0 ? name.text : name.getText(); - case SyntaxKind.QualifiedName: - return entityNameToString(name.left) + "." + entityNameToString(name.right); - case SyntaxKind.PropertyAccessExpression: - if (isIdentifier(name.name) || isPrivateIdentifier(name.name)) { - return entityNameToString(name.expression) + "." + entityNameToString(name.name); - } - else { - return assertNever(name.name); - } - case SyntaxKind.JsxNamespacedName: - return entityNameToString(name.namespace) + ":" + entityNameToString(name.name); - default: - return assertNever(name); - } -} +import { assertNever } from "../internal/utils.ts"; +import type { + JSDoc, + JSDocComment, + JSDocLink, + JSDocLinkCode, + JSDocLinkPlain, + JSDocParameterTag, + JSDocTag, + JSDocTemplateTag, + JsxTagNameExpression, + ParameterDeclaration, + PrivateIdentifier, + TypeParameterDeclaration, + VariableDeclarationList, +} from "./ast.generated.ts"; +import { + type EntityNameOrEntityNameExpression, + type Node, + type NodeArray, + SyntaxKind, +} from "./ast.ts"; +import { + isIdentifier, + isJSDoc, + isJSDocOverloadTag, + isJSDocParameterTag, + isJSDocSatisfiesTag, + isJSDocTemplateTag, + isJSDocTypeTag, + isParenthesizedExpression, + isPrivateIdentifier, +} from "./is.generated.ts"; + +/** Get all JSDoc tags related to a node, including those on parent nodes. */ +export function getJSDocTags(node: Node): readonly JSDocTag[] { + return getJSDocCommentsAndTags(node).flatMap(j => isJSDoc(j) ? j.tags ?? [] : j); +} + +/** Gets all JSDoc tags that match a specified predicate */ +export function getAllJSDocTags(node: Node, predicate: (tag: JSDocTag) => tag is T): readonly T[] { + return getJSDocTags(node).filter(predicate); +} + +/** Gets all JSDoc tags of a specified kind */ +export function getAllJSDocTagsOfKind(node: Node, kind: SyntaxKind): readonly JSDocTag[] { + return getJSDocTags(node).filter(doc => doc.kind === kind); +} + +/** Gets the text of a jsdoc comment, flattening links to their text. */ +export function getTextOfJSDocComment(comment?: string | NodeArray): string | undefined { + return typeof comment === "string" ? comment + : comment?.map(c => c.kind === SyntaxKind.JSDocText ? c.text : formatJSDocLink(c)).join(""); +} + +function isVariableLike(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.BindingElement: + case SyntaxKind.EnumMember: + case SyntaxKind.Parameter: + case SyntaxKind.PropertyAssignment: + case SyntaxKind.PropertyDeclaration: + case SyntaxKind.PropertySignature: + case SyntaxKind.ShorthandPropertyAssignment: + case SyntaxKind.VariableDeclaration: + return true; + } + return false; +} + +function getJSDocNodes(node: Node): JSDoc[] { + const jsDoc = node.jsDoc; + if (!jsDoc || jsDoc.length === 0) { + return []; + } + const result: JSDoc[] = []; + for (const j of jsDoc) { + if (isJSDoc(j)) { + result.push(j); + } + } + return result; +} + +/** + * Determines whether a host node owns a JSDoc tag. A `@type` / `@satisfies` tag + * attached to a parenthesized expression belongs only to that expression. + */ +function ownsJSDocTag(hostNode: Node, tag: JSDocTag): boolean { + return !(isJSDocTypeTag(tag) || isJSDocSatisfiesTag(tag)) + || !tag.parent + || !isJSDoc(tag.parent) + || !tag.parent.parent + || !isParenthesizedExpression(tag.parent.parent) + || tag.parent.parent === hostNode; +} + +function filterOwnedJSDocTags(hostNode: Node, comments: JSDoc[]): (JSDoc | JSDocTag)[] { + const result: (JSDoc | JSDocTag)[] = []; + const lastJSDoc = comments[comments.length - 1]; + for (const jsDoc of comments) { + if (jsDoc === lastJSDoc) { + const onlyOwnTags = jsDoc.tags?.every(t => ownsJSDocTag(hostNode, t)) ?? true; + if (!onlyOwnTags && jsDoc.tags) { + for (const tag of jsDoc.tags) { + if (ownsJSDocTag(hostNode, tag)) { + result.push(tag); + } + } + } + else { + result.push(jsDoc); + } + } + else { + if (!jsDoc.tags) { + continue; + } + // Tags from earlier comments only contribute their `@overload` tags. + for (const tag of jsDoc.tags) { + if (isJSDocOverloadTag(tag)) { + result.push(tag); + } + } + } + } + return result; +} + +function getJSDocParameterTags(param: ParameterDeclaration): JSDocParameterTag[] { + const result: JSDocParameterTag[] = []; + const name = param.name; + const parentTags = getJSDocTags(param.parent); + if (name && isIdentifier(name)) { + for (const tag of parentTags) { + if (isJSDocParameterTag(tag) && isIdentifier(tag.name) && tag.name.text === name.text) { + result.push(tag); + } + } + } + else if (name) { + // Binding patterns and JSDoc function syntax match parameter tags by position. + const parameters = (param.parent as { parameters?: readonly Node[]; }).parameters; + const i = parameters ? [...parameters].indexOf(param) : -1; + if (i > -1) { + const paramTags = parentTags.filter(isJSDocParameterTag); + if (i < paramTags.length) { + result.push(paramTags[i]); + } + } + } + return result; +} + +function getJSDocTypeParameterTags(typeParam: TypeParameterDeclaration): JSDocTemplateTag[] { + const result: JSDocTemplateTag[] = []; + const name = typeParam.name.text; + for (const tag of getJSDocTags(typeParam.parent)) { + if (isJSDocTemplateTag(tag) && [...tag.typeParameters].some(tp => tp.name.text === name)) { + result.push(tag); + } + } + return result; +} + +// Keep in sync with ast.GetNextJSDocCommentLocation. +function getNextJSDocCommentLocation(node: Node): Node | undefined { + const parent = node.parent; + if (parent) { + switch (parent.kind) { + case SyntaxKind.PropertyAssignment: + case SyntaxKind.ExportAssignment: + case SyntaxKind.PropertyDeclaration: + case SyntaxKind.VariableDeclaration: + case SyntaxKind.SatisfiesExpression: + case SyntaxKind.ReturnStatement: + case SyntaxKind.VariableStatement: + case SyntaxKind.ExpressionStatement: + return parent; + case SyntaxKind.VariableDeclarationList: + if ((parent as VariableDeclarationList).declarations[0] === node) { + return parent; + } + break; + } + } + return undefined; +} + +export function getJSDocCommentsAndTags(hostNode: Node): (JSDoc | JSDocTag)[] { + const result: (JSDoc | JSDocTag)[] = []; + // Pull parameter comments from a declaring initializer (e.g. `var x = function () {}`). + if (isVariableLike(hostNode)) { + const initializer = (hostNode as { initializer?: Node; }).initializer; + if (initializer) { + const initJSDoc = getJSDocNodes(initializer); + if (initJSDoc.length) { + result.push(...filterOwnedJSDocTags(hostNode, initJSDoc)); + } + } + } + + let node: Node | undefined = hostNode; + while (node && node.parent) { + const jsDocNodes = getJSDocNodes(node); + if (jsDocNodes.length) { + result.push(...filterOwnedJSDocTags(hostNode, jsDocNodes)); + } + + if (node.kind === SyntaxKind.Parameter) { + result.push(...getJSDocParameterTags(node as ParameterDeclaration)); + break; + } + if (node.kind === SyntaxKind.TypeParameter) { + result.push(...getJSDocTypeParameterTags(node as TypeParameterDeclaration)); + break; + } + node = getNextJSDocCommentLocation(node); + } + return result; +} + +function formatJSDocLink(link: JSDocLink | JSDocLinkCode | JSDocLinkPlain) { + const kind = link.kind === SyntaxKind.JSDocLink ? "link" + : link.kind === SyntaxKind.JSDocLinkCode ? "linkcode" + : "linkplain"; + const name = link.name ? entityNameToString(link.name) : ""; + const space = link.name && (link.text === "" || link.text.startsWith("://")) ? "" : " "; + return `{@${kind} ${name}${space}${link.text}}`; +} + +function entityNameToString(name: EntityNameOrEntityNameExpression | JsxTagNameExpression | PrivateIdentifier): string { + switch (name.kind) { + case SyntaxKind.ThisKeyword: + return "this"; + case SyntaxKind.PrivateIdentifier: + case SyntaxKind.Identifier: + return name.getFullWidth() === 0 ? name.text : name.getText(); + case SyntaxKind.QualifiedName: + return entityNameToString(name.left) + "." + entityNameToString(name.right); + case SyntaxKind.PropertyAccessExpression: + if (isIdentifier(name.name) || isPrivateIdentifier(name.name)) { + return entityNameToString(name.expression) + "." + entityNameToString(name.name); + } + else { + return assertNever(name.name); + } + case SyntaxKind.JsxNamespacedName: + return entityNameToString(name.namespace) + ":" + entityNameToString(name.name); + default: + return assertNever(name); + } +} diff --git a/packages/typescript/src/ast/modifiers.ts b/packages/typescript/src/ast/modifiers.ts index cc00e1651b00a..6df38edf83297 100644 --- a/packages/typescript/src/ast/modifiers.ts +++ b/packages/typescript/src/ast/modifiers.ts @@ -1,41 +1,41 @@ -import { ModifierFlags } from "#enums/modifierFlags"; -import { SyntaxKind } from "#enums/syntaxKind"; - -export function modifierToFlag(kind: SyntaxKind): ModifierFlags { - switch (kind) { - case SyntaxKind.StaticKeyword: - return ModifierFlags.Static; - case SyntaxKind.PublicKeyword: - return ModifierFlags.Public; - case SyntaxKind.ProtectedKeyword: - return ModifierFlags.Protected; - case SyntaxKind.PrivateKeyword: - return ModifierFlags.Private; - case SyntaxKind.AbstractKeyword: - return ModifierFlags.Abstract; - case SyntaxKind.AccessorKeyword: - return ModifierFlags.Accessor; - case SyntaxKind.ExportKeyword: - return ModifierFlags.Export; - case SyntaxKind.DeclareKeyword: - return ModifierFlags.Ambient; - case SyntaxKind.ConstKeyword: - return ModifierFlags.Const; - case SyntaxKind.DefaultKeyword: - return ModifierFlags.Default; - case SyntaxKind.AsyncKeyword: - return ModifierFlags.Async; - case SyntaxKind.ReadonlyKeyword: - return ModifierFlags.Readonly; - case SyntaxKind.OverrideKeyword: - return ModifierFlags.Override; - case SyntaxKind.InKeyword: - return ModifierFlags.In; - case SyntaxKind.OutKeyword: - return ModifierFlags.Out; - case SyntaxKind.Decorator: - return ModifierFlags.Decorator; - default: - return ModifierFlags.None; - } -} +import { ModifierFlags } from "#enums/modifierFlags"; +import { SyntaxKind } from "#enums/syntaxKind"; + +export function modifierToFlag(kind: SyntaxKind): ModifierFlags { + switch (kind) { + case SyntaxKind.StaticKeyword: + return ModifierFlags.Static; + case SyntaxKind.PublicKeyword: + return ModifierFlags.Public; + case SyntaxKind.ProtectedKeyword: + return ModifierFlags.Protected; + case SyntaxKind.PrivateKeyword: + return ModifierFlags.Private; + case SyntaxKind.AbstractKeyword: + return ModifierFlags.Abstract; + case SyntaxKind.AccessorKeyword: + return ModifierFlags.Accessor; + case SyntaxKind.ExportKeyword: + return ModifierFlags.Export; + case SyntaxKind.DeclareKeyword: + return ModifierFlags.Ambient; + case SyntaxKind.ConstKeyword: + return ModifierFlags.Const; + case SyntaxKind.DefaultKeyword: + return ModifierFlags.Default; + case SyntaxKind.AsyncKeyword: + return ModifierFlags.Async; + case SyntaxKind.ReadonlyKeyword: + return ModifierFlags.Readonly; + case SyntaxKind.OverrideKeyword: + return ModifierFlags.Override; + case SyntaxKind.InKeyword: + return ModifierFlags.In; + case SyntaxKind.OutKeyword: + return ModifierFlags.Out; + case SyntaxKind.Decorator: + return ModifierFlags.Decorator; + default: + return ModifierFlags.None; + } +} diff --git a/packages/typescript/src/ast/scanner.ts b/packages/typescript/src/ast/scanner.ts index 7b103bad149ca..919c98e3a0ed3 100644 --- a/packages/typescript/src/ast/scanner.ts +++ b/packages/typescript/src/ast/scanner.ts @@ -1,2533 +1,2533 @@ -import { CharacterCodes } from "#enums/characterCodes"; -import { CommentDirectiveType } from "#enums/commentDirectiveType"; -import { LanguageVariant } from "#enums/languageVariant"; -import { RegularExpressionFlags } from "#enums/regularExpressionFlags"; -import { ScriptTarget } from "#enums/scriptTarget"; -import { SyntaxKind } from "#enums/syntaxKind"; -import { TokenFlags } from "#enums/tokenFlags"; -import type { - JsxTokenSyntaxKind, - KeywordSyntaxKind, -} from "./ast.ts"; - -export type JSDocTokenKind = SyntaxKind.EndOfFile | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind; - -export interface CommentDirective { - range: { pos: number; end: number; }; - type: CommentDirectiveType; -} - -// Internal-only, not exported -const EscapeSequenceScanningFlags = { - String: 1 << 0, - ReportErrors: 1 << 1, - RegularExpression: 1 << 2, - AnnexB: 1 << 3, - AnyUnicodeMode: 1 << 4, - AtomEscape: 1 << 5, - ReportInvalidEscapeErrors: (1 << 2) | (1 << 1), - AllowExtendedUnicodeEscape: (1 << 0) | (1 << 4), -} as const; -type EscapeSequenceScanningFlags = typeof EscapeSequenceScanningFlags[keyof typeof EscapeSequenceScanningFlags]; - -export function tokenIsIdentifierOrKeyword(token: SyntaxKind): boolean { - return token >= SyntaxKind.Identifier; -} - -export function tokenIsIdentifierOrKeywordOrGreaterThan(token: SyntaxKind): boolean { - return token === SyntaxKind.GreaterThanToken || tokenIsIdentifierOrKeyword(token); -} - -export interface Scanner { - getTokenFullStart(): number; - getToken(): SyntaxKind; - getTokenStart(): number; - getTokenEnd(): number; - getTokenText(): string; - getTokenValue(): string; - hasUnicodeEscape(): boolean; - hasExtendedUnicodeEscape(): boolean; - hasPrecedingLineBreak(): boolean; - hasPrecedingJSDocComment(): boolean; - hasPrecedingJSDocLeadingAsterisks(): boolean; - hasPrecedingJSDocWithDeprecatedTag(): boolean; - hasPrecedingJSDocWithSeeOrLink(): boolean; - isIdentifier(): boolean; - isReservedWord(): boolean; - isUnterminated(): boolean; - getNumericLiteralFlags(): TokenFlags; - getCommentDirectives(): CommentDirective[] | undefined; - getTokenFlags(): TokenFlags; - reScanGreaterToken(): SyntaxKind; - reScanSlashToken(): SyntaxKind; - reScanAsteriskEqualsToken(): SyntaxKind; - reScanTemplateToken(isTaggedTemplate: boolean): SyntaxKind; - reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind; - scanJsxIdentifier(): SyntaxKind; - scanJsxAttributeValue(): SyntaxKind; - reScanJsxAttributeValue(): SyntaxKind; - reScanJsxToken(allowMultilineJsxText?: boolean): JsxTokenSyntaxKind; - reScanLessThanToken(): SyntaxKind; - reScanHashToken(): SyntaxKind; - reScanQuestionToken(): SyntaxKind; - reScanInvalidIdentifier(): SyntaxKind; - scanJsxToken(): JsxTokenSyntaxKind; - scanJsDocToken(): JSDocTokenKind; - scanJSDocCommentTextToken(inBackticks: boolean): JSDocTokenKind | SyntaxKind.JSDocCommentTextToken; - scan(): SyntaxKind; - - getText(): string; - clearCommentDirectives(): void; - setText(text: string | undefined, start?: number, length?: number): void; - setLanguageVariant(variant: LanguageVariant): void; - resetTokenState(pos: number): void; - setSkipJsDocLeadingAsterisks(skip: boolean): void; - lookAhead(callback: () => T): T; - scanRange(start: number, length: number, callback: () => T): T; - tryScan(callback: () => T): T; -} - -export const textToKeywordObj: Record = { - abstract: SyntaxKind.AbstractKeyword, - accessor: SyntaxKind.AccessorKeyword, - any: SyntaxKind.AnyKeyword, - as: SyntaxKind.AsKeyword, - asserts: SyntaxKind.AssertsKeyword, - assert: SyntaxKind.AssertKeyword, - bigint: SyntaxKind.BigIntKeyword, - boolean: SyntaxKind.BooleanKeyword, - break: SyntaxKind.BreakKeyword, - case: SyntaxKind.CaseKeyword, - catch: SyntaxKind.CatchKeyword, - class: SyntaxKind.ClassKeyword, - continue: SyntaxKind.ContinueKeyword, - const: SyntaxKind.ConstKeyword, - ["" + "constructor"]: SyntaxKind.ConstructorKeyword, - debugger: SyntaxKind.DebuggerKeyword, - declare: SyntaxKind.DeclareKeyword, - default: SyntaxKind.DefaultKeyword, - defer: SyntaxKind.DeferKeyword, - delete: SyntaxKind.DeleteKeyword, - do: SyntaxKind.DoKeyword, - else: SyntaxKind.ElseKeyword, - enum: SyntaxKind.EnumKeyword, - export: SyntaxKind.ExportKeyword, - extends: SyntaxKind.ExtendsKeyword, - false: SyntaxKind.FalseKeyword, - finally: SyntaxKind.FinallyKeyword, - for: SyntaxKind.ForKeyword, - from: SyntaxKind.FromKeyword, - function: SyntaxKind.FunctionKeyword, - get: SyntaxKind.GetKeyword, - if: SyntaxKind.IfKeyword, - implements: SyntaxKind.ImplementsKeyword, - import: SyntaxKind.ImportKeyword, - in: SyntaxKind.InKeyword, - infer: SyntaxKind.InferKeyword, - instanceof: SyntaxKind.InstanceOfKeyword, - interface: SyntaxKind.InterfaceKeyword, - intrinsic: SyntaxKind.IntrinsicKeyword, - is: SyntaxKind.IsKeyword, - keyof: SyntaxKind.KeyOfKeyword, - let: SyntaxKind.LetKeyword, - module: SyntaxKind.ModuleKeyword, - namespace: SyntaxKind.NamespaceKeyword, - never: SyntaxKind.NeverKeyword, - new: SyntaxKind.NewKeyword, - null: SyntaxKind.NullKeyword, - number: SyntaxKind.NumberKeyword, - object: SyntaxKind.ObjectKeyword, - package: SyntaxKind.PackageKeyword, - private: SyntaxKind.PrivateKeyword, - protected: SyntaxKind.ProtectedKeyword, - public: SyntaxKind.PublicKeyword, - override: SyntaxKind.OverrideKeyword, - out: SyntaxKind.OutKeyword, - readonly: SyntaxKind.ReadonlyKeyword, - require: SyntaxKind.RequireKeyword, - global: SyntaxKind.GlobalKeyword, - return: SyntaxKind.ReturnKeyword, - satisfies: SyntaxKind.SatisfiesKeyword, - set: SyntaxKind.SetKeyword, - source: SyntaxKind.SourceKeyword, - static: SyntaxKind.StaticKeyword, - string: SyntaxKind.StringKeyword, - super: SyntaxKind.SuperKeyword, - switch: SyntaxKind.SwitchKeyword, - symbol: SyntaxKind.SymbolKeyword, - this: SyntaxKind.ThisKeyword, - throw: SyntaxKind.ThrowKeyword, - true: SyntaxKind.TrueKeyword, - try: SyntaxKind.TryKeyword, - type: SyntaxKind.TypeKeyword, - typeof: SyntaxKind.TypeOfKeyword, - undefined: SyntaxKind.UndefinedKeyword, - unique: SyntaxKind.UniqueKeyword, - unknown: SyntaxKind.UnknownKeyword, - using: SyntaxKind.UsingKeyword, - var: SyntaxKind.VarKeyword, - void: SyntaxKind.VoidKeyword, - while: SyntaxKind.WhileKeyword, - with: SyntaxKind.WithKeyword, - yield: SyntaxKind.YieldKeyword, - async: SyntaxKind.AsyncKeyword, - await: SyntaxKind.AwaitKeyword, - of: SyntaxKind.OfKeyword, -}; - -const textToKeyword = new Map(Object.entries(textToKeywordObj)); - -const textToToken = new Map(Object.entries({ - ...textToKeywordObj, - "{": SyntaxKind.OpenBraceToken, - "}": SyntaxKind.CloseBraceToken, - "(": SyntaxKind.OpenParenToken, - ")": SyntaxKind.CloseParenToken, - "[": SyntaxKind.OpenBracketToken, - "]": SyntaxKind.CloseBracketToken, - ".": SyntaxKind.DotToken, - "...": SyntaxKind.DotDotDotToken, - ";": SyntaxKind.SemicolonToken, - ",": SyntaxKind.CommaToken, - "<": SyntaxKind.LessThanToken, - ">": SyntaxKind.GreaterThanToken, - "<=": SyntaxKind.LessThanEqualsToken, - ">=": SyntaxKind.GreaterThanEqualsToken, - "==": SyntaxKind.EqualsEqualsToken, - "!=": SyntaxKind.ExclamationEqualsToken, - "===": SyntaxKind.EqualsEqualsEqualsToken, - "!==": SyntaxKind.ExclamationEqualsEqualsToken, - "=>": SyntaxKind.EqualsGreaterThanToken, - "+": SyntaxKind.PlusToken, - "-": SyntaxKind.MinusToken, - "**": SyntaxKind.AsteriskAsteriskToken, - "*": SyntaxKind.AsteriskToken, - "/": SyntaxKind.SlashToken, - "%": SyntaxKind.PercentToken, - "++": SyntaxKind.PlusPlusToken, - "--": SyntaxKind.MinusMinusToken, - "<<": SyntaxKind.LessThanLessThanToken, - ">": SyntaxKind.GreaterThanGreaterThanToken, - ">>>": SyntaxKind.GreaterThanGreaterThanGreaterThanToken, - "&": SyntaxKind.AmpersandToken, - "|": SyntaxKind.BarToken, - "^": SyntaxKind.CaretToken, - "!": SyntaxKind.ExclamationToken, - "~": SyntaxKind.TildeToken, - "&&": SyntaxKind.AmpersandAmpersandToken, - "||": SyntaxKind.BarBarToken, - "?": SyntaxKind.QuestionToken, - "??": SyntaxKind.QuestionQuestionToken, - "?.": SyntaxKind.QuestionDotToken, - ":": SyntaxKind.ColonToken, - "=": SyntaxKind.EqualsToken, - "+=": SyntaxKind.PlusEqualsToken, - "-=": SyntaxKind.MinusEqualsToken, - "*=": SyntaxKind.AsteriskEqualsToken, - "**=": SyntaxKind.AsteriskAsteriskEqualsToken, - "/=": SyntaxKind.SlashEqualsToken, - "%=": SyntaxKind.PercentEqualsToken, - "<<=": SyntaxKind.LessThanLessThanEqualsToken, - ">>=": SyntaxKind.GreaterThanGreaterThanEqualsToken, - ">>>=": SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken, - "&=": SyntaxKind.AmpersandEqualsToken, - "|=": SyntaxKind.BarEqualsToken, - "^=": SyntaxKind.CaretEqualsToken, - "||=": SyntaxKind.BarBarEqualsToken, - "&&=": SyntaxKind.AmpersandAmpersandEqualsToken, - "??=": SyntaxKind.QuestionQuestionEqualsToken, - "@": SyntaxKind.AtToken, - "#": SyntaxKind.HashToken, - "`": SyntaxKind.BacktickToken, -} as Record)); - -const charCodeToRegExpFlag = new Map([ - [CharacterCodes.d, RegularExpressionFlags.HasIndices], - [CharacterCodes.g, RegularExpressionFlags.Global], - [CharacterCodes.i, RegularExpressionFlags.IgnoreCase], - [CharacterCodes.m, RegularExpressionFlags.Multiline], - [CharacterCodes.s, RegularExpressionFlags.DotAll], - [CharacterCodes.u, RegularExpressionFlags.Unicode], - [CharacterCodes.v, RegularExpressionFlags.UnicodeSets], - [CharacterCodes.y, RegularExpressionFlags.Sticky], -]); - -/** - * Generated by scripts/regenerate-unicode-identifier-parts.mjs on node v22.1.0 with unicode 15.1 - * based on http://www.unicode.org/reports/tr31/ and https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords - * unicodeESNextIdentifierStart corresponds to the ID_Start and Other_ID_Start property, and - * unicodeESNextIdentifierPart corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start - */ -// dprint-ignore -const unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2160, 2183, 2185, 2190, 2208, 2249, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3165, 3165, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3293, 3294, 3296, 3297, 3313, 3314, 3332, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5905, 5919, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6988, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69248, 69289, 69296, 69297, 69376, 69404, 69415, 69415, 69424, 69445, 69488, 69505, 69552, 69572, 69600, 69622, 69635, 69687, 69745, 69746, 69749, 69749, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69959, 69959, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70207, 70208, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70753, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71488, 71494, 71680, 71723, 71840, 71903, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71983, 71999, 71999, 72001, 72001, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73474, 73474, 73476, 73488, 73490, 73523, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78913, 78918, 82944, 83526, 92160, 92728, 92736, 92766, 92784, 92862, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 122624, 122654, 122661, 122666, 122928, 122989, 123136, 123180, 123191, 123197, 123214, 123214, 123536, 123565, 123584, 123627, 124112, 124139, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743]; -// dprint-ignore -const unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2160, 2183, 2185, 2190, 2200, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2901, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3132, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3165, 3165, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3293, 3294, 3296, 3299, 3302, 3311, 3313, 3315, 3328, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3457, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3790, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5909, 5919, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6159, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6847, 6862, 6912, 6988, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43047, 43052, 43052, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69248, 69289, 69291, 69292, 69296, 69297, 69373, 69404, 69415, 69415, 69424, 69456, 69488, 69509, 69552, 69572, 69600, 69622, 69632, 69702, 69734, 69749, 69759, 69818, 69826, 69826, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69959, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70094, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70209, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70753, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71488, 71494, 71680, 71738, 71840, 71913, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71989, 71991, 71992, 71995, 72003, 72016, 72025, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73472, 73488, 73490, 73530, 73534, 73538, 73552, 73561, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78912, 78933, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92784, 92862, 92864, 92873, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94180, 94192, 94193, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 118528, 118573, 118576, 118598, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122624, 122654, 122661, 122666, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 122928, 122989, 123023, 123023, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123536, 123566, 123584, 123641, 124112, 124153, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 130032, 130041, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743, 917760, 917999]; - -const commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/; -const commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/; - -const jsDocTagTerminators = new Set([" ", "\t", "\n", "\r", "}", "*"]); - -function hasJSDocTag(text: string, offset: number, ...tags: string[]): boolean { - for (const tag of tags) { - if (text.startsWith(tag, offset)) { - if (offset + tag.length === text.length) { - return true; - } - if (jsDocTagTerminators.has(text[offset + tag.length])) { - return true; - } - } - } - return false; -} - -function scanJSDocCommentForTags(text: string, tokenFlags: TokenFlags): TokenFlags { - let offset = 0; - while (true) { - const i = text.indexOf("@", offset); - if (i < 0) { - return tokenFlags; - } - offset = i + 1; - if (!(tokenFlags & TokenFlags.PrecedingJSDocWithDeprecated) && hasJSDocTag(text, offset, "deprecated")) { - tokenFlags |= TokenFlags.PrecedingJSDocWithDeprecated; - } - if (!(tokenFlags & TokenFlags.PrecedingJSDocWithSeeOrLink) && hasJSDocTag(text, offset, "see", "link", "linkcode", "linkplain")) { - tokenFlags |= TokenFlags.PrecedingJSDocWithSeeOrLink; - } - if ( - (tokenFlags & (TokenFlags.PrecedingJSDocWithDeprecated | TokenFlags.PrecedingJSDocWithSeeOrLink)) === - (TokenFlags.PrecedingJSDocWithDeprecated | TokenFlags.PrecedingJSDocWithSeeOrLink) - ) { - return tokenFlags; - } - } -} - -function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { - if (code < map[0]) { - return false; - } - - let lo = 0; - let hi: number = map.length; - let mid: number; - - while (lo + 1 < hi) { - mid = lo + (hi - lo) / 2; - mid -= mid % 2; - if (map[mid] <= code && code <= map[mid + 1]) { - return true; - } - - if (code < map[mid]) { - hi = mid; - } - else { - lo = mid + 2; - } - } - - return false; -} - -export function isUnicodeIdentifierStart(code: number): boolean { - return lookupInUnicodeMap(code, unicodeESNextIdentifierStart); -} - -function isUnicodeIdentifierPart(code: number): boolean { - return lookupInUnicodeMap(code, unicodeESNextIdentifierPart); -} - -function makeReverseMap(source: Map): T[] { - const result: T[] = []; - source.forEach((value, name) => { - result[value] = name; - }); - return result; -} - -const tokenStrings = makeReverseMap(textToToken); - -export function tokenToString(t: SyntaxKind): string | undefined { - return tokenStrings[t]; -} - -export function stringToToken(s: string): SyntaxKind | undefined { - return textToToken.get(s); -} - -export function characterCodeToRegularExpressionFlag(ch: number): RegularExpressionFlags | undefined { - return charCodeToRegExpFlag.get(ch); -} - -export function computeLineStarts(text: string): number[] { - const result: number[] = []; - let pos = 0; - let lineStart = 0; - while (pos < text.length) { - const ch = text.charCodeAt(pos); - pos++; - switch (ch) { - case CharacterCodes.carriageReturn: - if (text.charCodeAt(pos) === CharacterCodes.lineFeed) { - pos++; - } - // falls through - case CharacterCodes.lineFeed: - result.push(lineStart); - lineStart = pos; - break; - default: - if (ch > CharacterCodes.maxAsciiCharacter && isLineBreak(ch)) { - result.push(lineStart); - lineStart = pos; - } - break; - } - } - result.push(lineStart); - return result; -} - -export function isWhiteSpaceLike(ch: number): boolean { - return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); -} - -export function isWhiteSpaceSingleLine(ch: number): boolean { - return ch === CharacterCodes.space || - ch === CharacterCodes.tab || - ch === CharacterCodes.verticalTab || - ch === CharacterCodes.formFeed || - ch === CharacterCodes.nonBreakingSpace || - ch === CharacterCodes.nextLine || - ch === CharacterCodes.ogham || - ch >= CharacterCodes.enQuad && ch <= CharacterCodes.zeroWidthSpace || - ch === CharacterCodes.narrowNoBreakSpace || - ch === CharacterCodes.mathematicalSpace || - ch === CharacterCodes.ideographicSpace || - ch === CharacterCodes.byteOrderMark; -} - -export function isLineBreak(ch: number): boolean { - return ch === CharacterCodes.lineFeed || - ch === CharacterCodes.carriageReturn || - ch === CharacterCodes.lineSeparator || - ch === CharacterCodes.paragraphSeparator; -} - -function isDigit(ch: number): boolean { - return ch >= CharacterCodes._0 && ch <= CharacterCodes._9; -} - -function isHexDigit(ch: number): boolean { - return isDigit(ch) || ch >= CharacterCodes.A && ch <= CharacterCodes.F || ch >= CharacterCodes.a && ch <= CharacterCodes.f; -} - -function isOctalDigit(ch: number): boolean { - return ch >= CharacterCodes._0 && ch <= CharacterCodes._7; -} - -export function couldStartTrivia(text: string, pos: number): boolean { - const ch = text.charCodeAt(pos); - switch (ch) { - case CharacterCodes.carriageReturn: - case CharacterCodes.lineFeed: - case CharacterCodes.tab: - case CharacterCodes.verticalTab: - case CharacterCodes.formFeed: - case CharacterCodes.space: - case CharacterCodes.slash: - case CharacterCodes.lessThan: - case CharacterCodes.bar: - case CharacterCodes.equals: - case CharacterCodes.greaterThan: - return true; - case CharacterCodes.hash: - return pos === 0; - default: - return ch > CharacterCodes.maxAsciiCharacter; - } -} - -export function skipTrivia(text: string, pos: number, stopAfterLineBreak?: boolean, stopAtComments?: boolean, inJSDoc?: boolean): number { - if (pos < 0) { - return pos; - } - - let canConsumeStar = false; - while (true) { - const ch = text.charCodeAt(pos); - switch (ch) { - case CharacterCodes.carriageReturn: - if (text.charCodeAt(pos + 1) === CharacterCodes.lineFeed) { - pos++; - } - // falls through - case CharacterCodes.lineFeed: - pos++; - if (stopAfterLineBreak) { - return pos; - } - canConsumeStar = !!inJSDoc; - continue; - case CharacterCodes.tab: - case CharacterCodes.verticalTab: - case CharacterCodes.formFeed: - case CharacterCodes.space: - pos++; - continue; - case CharacterCodes.slash: - if (stopAtComments) { - break; - } - if (text.charCodeAt(pos + 1) === CharacterCodes.slash) { - pos += 2; - while (pos < text.length) { - if (isLineBreak(text.charCodeAt(pos))) { - break; - } - pos++; - } - canConsumeStar = false; - continue; - } - if (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) { - pos += 2; - while (pos < text.length) { - if (text.charCodeAt(pos) === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) { - pos += 2; - break; - } - pos++; - } - canConsumeStar = false; - continue; - } - break; - - case CharacterCodes.lessThan: - case CharacterCodes.bar: - case CharacterCodes.equals: - case CharacterCodes.greaterThan: - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - canConsumeStar = false; - continue; - } - break; - - case CharacterCodes.hash: - if (pos === 0 && isShebangTrivia(text, pos)) { - pos = scanShebangTrivia(text, pos); - continue; - } - break; - - case CharacterCodes.asterisk: - if (canConsumeStar) { - pos++; - canConsumeStar = false; - continue; - } - break; - - default: - if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { - pos++; - continue; - } - break; - } - return pos; - } -} - -function isConflictMarkerTrivia(text: string, pos: number) { - if (pos >= text.length) { - return false; - } - - const ch = text.charCodeAt(pos); - - if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { - if (ch === CharacterCodes.lessThan || ch === CharacterCodes.greaterThan || ch === CharacterCodes.equals) { - if (pos + 6 < text.length && text.charCodeAt(pos + 1) === ch && text.charCodeAt(pos + 2) === ch && text.charCodeAt(pos + 3) === ch && text.charCodeAt(pos + 4) === ch && text.charCodeAt(pos + 5) === ch && text.charCodeAt(pos + 6) === ch) { - return ch === CharacterCodes.equals || text.charCodeAt(pos + 7) === CharacterCodes.space; - } - } - if (ch === CharacterCodes.bar && pos + 6 < text.length && text.charCodeAt(pos + 1) === ch && text.charCodeAt(pos + 2) === ch && text.charCodeAt(pos + 3) === ch && text.charCodeAt(pos + 4) === ch && text.charCodeAt(pos + 5) === ch && text.charCodeAt(pos + 6) === ch) { - return true; - } - } - - return false; -} - -function scanConflictMarkerTrivia(text: string, pos: number): number { - const ch = text.charCodeAt(pos); - const len = text.length; - - if (ch === CharacterCodes.lessThan || ch === CharacterCodes.greaterThan) { - while (pos < len && !isLineBreak(text.charCodeAt(pos))) { - pos++; - } - } - else { - // Consume everything from the start of a ||||||| or ======= marker to the start - // of the next ======= or >>>>>>> marker. - pos += 7; // skip marker - while (pos < len) { - const currentChar = text.charCodeAt(pos); - if ((currentChar === CharacterCodes.equals || currentChar === CharacterCodes.greaterThan) && isConflictMarkerTrivia(text, pos)) { - break; - } - pos++; - } - } - - return pos; -} - -function isShebangTrivia(text: string, pos: number) { - return pos === 0 && text.charCodeAt(0) === CharacterCodes.hash && text.charCodeAt(1) === CharacterCodes.exclamation; -} - -function scanShebangTrivia(text: string, pos: number) { - pos += 2; - while (pos < text.length) { - if (isLineBreak(text.charCodeAt(pos))) { - break; - } - pos++; - } - return pos; -} - -export type CommentKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia; - -export interface CommentRange { - pos: number; - end: number; - hasTrailingNewLine?: boolean; - kind: CommentKind; -} - -function iterateCommentRanges( - reduce: boolean, - text: string, - pos: number, - trailing: boolean, - cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U | undefined) => U, - state: T, - initial?: U, -): U | undefined { - let pendingPos!: number; - let pendingEnd!: number; - let pendingKind!: CommentKind; - let pendingHasTrailingNewLine!: boolean; - let hasPendingCommentRange = false; - let collecting = trailing; - let accumulator = initial; - if (pos === 0) { - collecting = true; - const shebang = getShebang(text); - if (shebang) { - pos = shebang.length; - } - } - scan: - while (pos >= 0 && pos < text.length) { - const ch = text.charCodeAt(pos); - switch (ch) { - case CharacterCodes.carriageReturn: - if (text.charCodeAt(pos + 1) === CharacterCodes.lineFeed) { - pos++; - } - // falls through - case CharacterCodes.lineFeed: - pos++; - if (trailing) { - break scan; - } - collecting = true; - if (hasPendingCommentRange) { - pendingHasTrailingNewLine = true; - } - continue; - case CharacterCodes.tab: - case CharacterCodes.verticalTab: - case CharacterCodes.formFeed: - case CharacterCodes.space: - pos++; - continue; - case CharacterCodes.slash: - const nextChar = text.charCodeAt(pos + 1); - let hasTrailingNewLine = false; - if (nextChar === CharacterCodes.slash || nextChar === CharacterCodes.asterisk) { - const kind: CommentKind = nextChar === CharacterCodes.slash ? SyntaxKind.SingleLineCommentTrivia : SyntaxKind.MultiLineCommentTrivia; - const startPos = pos; - pos += 2; - if (nextChar === CharacterCodes.slash) { - while (pos < text.length) { - if (isLineBreak(text.charCodeAt(pos))) { - hasTrailingNewLine = true; - break; - } - pos++; - } - } - else { - while (pos < text.length) { - if (text.charCodeAt(pos) === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) { - pos += 2; - break; - } - pos++; - } - } - - if (collecting) { - if (hasPendingCommentRange) { - accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); - if (!reduce && accumulator) { - return accumulator; - } - } - - pendingPos = startPos; - pendingEnd = pos; - pendingKind = kind; - pendingHasTrailingNewLine = hasTrailingNewLine; - hasPendingCommentRange = true; - } - continue; - } - break scan; - default: - if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { - if (hasPendingCommentRange && isLineBreak(ch)) { - pendingHasTrailingNewLine = true; - } - pos++; - continue; - } - break scan; - } - } - - if (hasPendingCommentRange) { - accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); - } - - return accumulator; -} - -function appendCommentRange(pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, _state: any, comments: CommentRange[] = []) { - comments.push({ kind, pos, end, hasTrailingNewLine }); - return comments; -} - -export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; -export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; -export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state?: T): U | undefined { - return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ false, cb, state!, /*initial*/ undefined); -} - -export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; -export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; -export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state?: T): U | undefined { - return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ true, cb, state!, /*initial*/ undefined); -} - -export function reduceEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T, initial: U): U | undefined { - return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ false, cb, state, initial); -} - -export function reduceEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T, initial: U): U | undefined { - return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ true, cb, state, initial); -} - -export function getLeadingCommentRanges(text: string, pos: number): CommentRange[] | undefined { - return reduceEachLeadingCommentRange(text, pos, appendCommentRange, /*state*/ undefined as any, /*initial*/ undefined as any as CommentRange[]); -} - -export function getTrailingCommentRanges(text: string, pos: number): CommentRange[] | undefined { - return reduceEachTrailingCommentRange(text, pos, appendCommentRange, /*state*/ undefined as any, /*initial*/ undefined as any as CommentRange[]); -} - -export function getShebang(text: string): string | undefined { - const shebang = /^#!.*/; - if (isShebangTrivia(text, 0)) { - const match = shebang.exec(text); - if (match) { - return match[0]; - } - } - return undefined; -} - -export function isIdentifierStart(ch: number, _languageVersion?: ScriptTarget): boolean { - return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || - ch === CharacterCodes.$ || ch === CharacterCodes._ || - ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierStart(ch); -} - -export function isIdentifierPart(ch: number, _languageVersion?: ScriptTarget, identifierVariant?: LanguageVariant): boolean { - return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || - ch >= CharacterCodes._0 && ch <= CharacterCodes._9 || ch === CharacterCodes.$ || ch === CharacterCodes._ || - // "-" and ":" are valid in JSX Identifiers - (identifierVariant === LanguageVariant.JSX ? (ch === CharacterCodes.minus || ch === CharacterCodes.colon) : false) || - ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch); -} - -export function isIdentifierText(name: string, _languageVersion?: ScriptTarget, identifierVariant?: LanguageVariant): boolean { - let ch = name.codePointAt(0)!; - if (!isIdentifierStart(ch)) { - return false; - } - - for (let i = charSize(ch); i < name.length; i += charSize(ch)) { - if (!isIdentifierPart(ch = name.codePointAt(i)!, undefined, identifierVariant)) { - return false; - } - } - - return true; -} - -function codePointAt(s: string, i: number): number { - return s.codePointAt(i)!; -} - -function charSize(ch: number) { - if (ch >= 0x10000) { - return 2; - } - if (ch === CharacterCodes.EOF) { - return 0; - } - return 1; -} - -export function utf16EncodeAsString(codePoint: number): string { - return String.fromCodePoint(codePoint); -} - -function parsePseudoBigInt(stringValue: string): string { - let log2Base: number; - switch (stringValue.charCodeAt(1)) { - case CharacterCodes.b: - case CharacterCodes.B: - log2Base = 1; - break; - case CharacterCodes.o: - case CharacterCodes.O: - log2Base = 3; - break; - case CharacterCodes.x: - case CharacterCodes.X: - log2Base = 4; - break; - default: - // decimals for now just peel the trailing "n" and return - const nIndex = stringValue.length - 1; - let nonZeroStart = 0; - while (stringValue.charCodeAt(nonZeroStart) === CharacterCodes._0) { - nonZeroStart++; - } - return stringValue.slice(nonZeroStart, nIndex) || "0"; - } - // exit early for zero - const startIndex = 2; - const endIndex = stringValue.length - 1; - const bitsNeeded = (endIndex - startIndex) * log2Base; - // Stores the value specified by the string as a LE array of 16-bit integers - // using Uint16 instead of Uint32 so combining steps can use bitwise operators - const segments = new Uint16Array((bitsNeeded >>> 4) + (bitsNeeded & 15 ? 1 : 0)); - // Add the digits, one at a time - for (let i = endIndex - 1, bitOffset = 0; i >= startIndex; i--, bitOffset += log2Base) { - const segment = bitOffset >>> 4; - const digitChar = stringValue.charCodeAt(i); - // Find character value - const digit = digitChar <= CharacterCodes._9 - ? digitChar - CharacterCodes._0 - : 10 + digitChar - (digitChar <= CharacterCodes.F ? CharacterCodes.A : CharacterCodes.a); - // Add bits into segment - const shiftedDigit = digit << (bitOffset & 15); - segments[segment] |= shiftedDigit; - // overflow to next segment - const residual = shiftedDigit >>> 16; - if (residual) segments[segment + 1] |= residual; - } - // Repeatedly divide by 10 to find each decimal digit - let base10Value = ""; - let firstNonzeroSegment = segments.length - 1; - let segmentsRemaining = true; - while (segmentsRemaining) { - let mod10 = 0; - segmentsRemaining = false; - for (let segment = firstNonzeroSegment; segment >= 0; segment--) { - const newSegment = mod10 << 16 | segments[segment]; - const segmentValue = (newSegment / 10) | 0; - segments[segment] = segmentValue; - mod10 = newSegment - segmentValue * 10; - if (segmentValue && !segmentsRemaining) { - firstNonzeroSegment = segment; - segmentsRemaining = true; - } - } - base10Value = mod10 + base10Value; - } - return base10Value; -} - -// Creates a scanner over a (possibly unspecified) range of a piece of text. -export function createScanner( - skipTrivia: boolean, - languageVariant: LanguageVariant = LanguageVariant.Standard, - textInitial?: string, - start?: number, - length?: number, -): Scanner { - // Why var? It avoids TDZ checks in the runtime which can be costly. - // See: https://github.com/microsoft/TypeScript/issues/52924 - /* eslint-disable no-var */ - var text = textInitial!; - - // Current position (end position of text of current token) - var pos: number; - - // end of text - var end: number; - - // Start position of whitespace before current token - var fullStartPos: number; - - // Start position of text of current token - var tokenStart: number; - - var token: SyntaxKind; - var tokenValue!: string; - var tokenFlags: TokenFlags; - - var commentDirectives: CommentDirective[] | undefined; - var skipJsDocLeadingAsterisks = 0; - - setText(text, start, length); - - var scanner: Scanner = { - getTokenFullStart: () => fullStartPos, - getTokenEnd: () => pos, - getToken: () => token, - getTokenStart: () => tokenStart, - getTokenText: () => text.substring(tokenStart, pos), - getTokenValue: () => tokenValue, - hasUnicodeEscape: () => (tokenFlags & TokenFlags.UnicodeEscape) !== 0, - hasExtendedUnicodeEscape: () => (tokenFlags & TokenFlags.ExtendedUnicodeEscape) !== 0, - hasPrecedingLineBreak: () => (tokenFlags & TokenFlags.PrecedingLineBreak) !== 0, - hasPrecedingJSDocComment: () => (tokenFlags & TokenFlags.PrecedingJSDocComment) !== 0, - hasPrecedingJSDocLeadingAsterisks: () => (tokenFlags & TokenFlags.PrecedingJSDocLeadingAsterisks) !== 0, - hasPrecedingJSDocWithDeprecatedTag: () => (tokenFlags & TokenFlags.PrecedingJSDocWithDeprecated) !== 0, - hasPrecedingJSDocWithSeeOrLink: () => (tokenFlags & TokenFlags.PrecedingJSDocWithSeeOrLink) !== 0, - isIdentifier: () => token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord, - isReservedWord: () => token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord, - isUnterminated: () => (tokenFlags & TokenFlags.Unterminated) !== 0, - getCommentDirectives: () => commentDirectives, - getNumericLiteralFlags: () => tokenFlags & TokenFlags.NumericLiteralFlags, - getTokenFlags: () => tokenFlags, - reScanGreaterToken, - reScanAsteriskEqualsToken, - reScanSlashToken, - reScanTemplateToken, - reScanTemplateHeadOrNoSubstitutionTemplate, - scanJsxIdentifier, - scanJsxAttributeValue, - reScanJsxAttributeValue, - reScanJsxToken, - reScanLessThanToken, - reScanHashToken, - reScanQuestionToken, - reScanInvalidIdentifier, - scanJsxToken, - scanJsDocToken, - scanJSDocCommentTextToken, - scan, - getText, - clearCommentDirectives, - setText, - setLanguageVariant, - resetTokenState, - setSkipJsDocLeadingAsterisks, - tryScan, - lookAhead, - scanRange, - }; - /* eslint-enable no-var */ - - return scanner; - - function codePointUnchecked(pos: number) { - return codePointAt(text, pos); - } - - function codePointChecked(pos: number) { - return pos >= 0 && pos < end ? codePointUnchecked(pos) : CharacterCodes.EOF; - } - - function charCodeUnchecked(pos: number) { - return text.charCodeAt(pos); - } - - function charCodeChecked(pos: number) { - return pos >= 0 && pos < end ? charCodeUnchecked(pos) : CharacterCodes.EOF; - } - - function scanNumberFragment(): string { - let start = pos; - let allowSeparator = false; - let isPreviousTokenSeparator = false; - let result = ""; - while (true) { - const ch = charCodeUnchecked(pos); - if (ch === CharacterCodes._) { - tokenFlags |= TokenFlags.ContainsSeparator; - if (allowSeparator) { - allowSeparator = false; - isPreviousTokenSeparator = true; - result += text.substring(start, pos); - } - else { - tokenFlags |= TokenFlags.ContainsInvalidSeparator; - } - pos++; - start = pos; - continue; - } - if (isDigit(ch)) { - allowSeparator = true; - isPreviousTokenSeparator = false; - pos++; - continue; - } - break; - } - if (charCodeUnchecked(pos - 1) === CharacterCodes._) { - tokenFlags |= TokenFlags.ContainsInvalidSeparator; - } - return result + text.substring(start, pos); - } - - function scanNumber(): SyntaxKind { - let start = pos; - let mainFragment: string; - if (charCodeUnchecked(pos) === CharacterCodes._0) { - pos++; - if (charCodeUnchecked(pos) === CharacterCodes._) { - tokenFlags |= TokenFlags.ContainsSeparator | TokenFlags.ContainsInvalidSeparator; - pos--; - mainFragment = scanNumberFragment(); - } - else if (!scanDigits()) { - tokenFlags |= TokenFlags.ContainsLeadingZero; - mainFragment = "" + +tokenValue; - } - else if (!tokenValue) { - mainFragment = "0"; - } - else { - tokenValue = "" + parseInt(tokenValue, 8); - tokenFlags |= TokenFlags.Octal; - const withMinus = token === SyntaxKind.MinusToken; - const literal = (withMinus ? "-" : "") + "0o" + (+tokenValue).toString(8); - if (withMinus) start--; - return SyntaxKind.NumericLiteral; - } - } - else { - mainFragment = scanNumberFragment(); - } - let decimalFragment: string | undefined; - let scientificFragment: string | undefined; - if (charCodeUnchecked(pos) === CharacterCodes.dot) { - pos++; - decimalFragment = scanNumberFragment(); - } - let end = pos; - if (charCodeUnchecked(pos) === CharacterCodes.E || charCodeUnchecked(pos) === CharacterCodes.e) { - pos++; - tokenFlags |= TokenFlags.Scientific; - if (charCodeUnchecked(pos) === CharacterCodes.plus || charCodeUnchecked(pos) === CharacterCodes.minus) pos++; - const preNumericPart = pos; - const finalFragment = scanNumberFragment(); - if (finalFragment) { - scientificFragment = text.substring(end, preNumericPart) + finalFragment; - end = pos; - } - } - let result: string; - if (tokenFlags & TokenFlags.ContainsSeparator) { - result = mainFragment; - if (decimalFragment) { - result += "." + decimalFragment; - } - if (scientificFragment) { - result += scientificFragment; - } - } - else { - result = text.substring(start, end); - } - - if (tokenFlags & TokenFlags.ContainsLeadingZero) { - tokenValue = "" + +result; - return SyntaxKind.NumericLiteral; - } - - if (decimalFragment !== undefined || tokenFlags & TokenFlags.Scientific) { - checkForIdentifierStartAfterNumericLiteral(); - tokenValue = "" + +result; - return SyntaxKind.NumericLiteral; - } - else { - tokenValue = result; - const type = checkBigIntSuffix(); - checkForIdentifierStartAfterNumericLiteral(); - return type; - } - } - - function checkForIdentifierStartAfterNumericLiteral() { - if (!isIdentifierStart(codePointUnchecked(pos))) { - return; - } - - const identifierStart = pos; - const { length } = scanIdentifierParts(); - - if (!(length === 1 && text[identifierStart] === "n")) { - pos = identifierStart; - } - } - - function scanDigits(): boolean { - const start = pos; - let isOctal = true; - while (isDigit(charCodeChecked(pos))) { - if (!isOctalDigit(charCodeUnchecked(pos))) { - isOctal = false; - } - pos++; - } - tokenValue = text.substring(start, pos); - return isOctal; - } - - function scanExactNumberOfHexDigits(count: number, canHaveSeparators: boolean): number { - const valueString = scanHexDigits(count, /*scanAsManyAsPossible*/ false, canHaveSeparators); - return valueString ? parseInt(valueString, 16) : -1; - } - - function scanMinimumNumberOfHexDigits(count: number, canHaveSeparators: boolean): string { - return scanHexDigits(count, /*scanAsManyAsPossible*/ true, canHaveSeparators); - } - - function scanHexDigits(minCount: number, scanAsManyAsPossible: boolean, canHaveSeparators: boolean): string { - let valueChars: number[] = []; - let allowSeparator = false; - while (valueChars.length < minCount || scanAsManyAsPossible) { - let ch = charCodeUnchecked(pos); - if (canHaveSeparators && ch === CharacterCodes._) { - tokenFlags |= TokenFlags.ContainsSeparator; - if (allowSeparator) { - allowSeparator = false; - } - pos++; - continue; - } - allowSeparator = canHaveSeparators; - if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) { - ch += CharacterCodes.a - CharacterCodes.A; - } - else if ( - !((ch >= CharacterCodes._0 && ch <= CharacterCodes._9) || - (ch >= CharacterCodes.a && ch <= CharacterCodes.f)) - ) { - break; - } - valueChars.push(ch); - pos++; - } - if (valueChars.length < minCount) { - valueChars = []; - } - return String.fromCharCode(...valueChars); - } - - function scanString(jsxAttributeString = false): string { - const quote = charCodeUnchecked(pos); - pos++; - let result = ""; - let start = pos; - while (true) { - if (pos >= end) { - result += text.substring(start, pos); - tokenFlags |= TokenFlags.Unterminated; - break; - } - const ch = charCodeUnchecked(pos); - if (ch === quote) { - result += text.substring(start, pos); - pos++; - break; - } - if (ch === CharacterCodes.backslash && !jsxAttributeString) { - result += text.substring(start, pos); - result += scanEscapeSequence(EscapeSequenceScanningFlags.String | EscapeSequenceScanningFlags.ReportErrors); - start = pos; - continue; - } - - if ((ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn) && !jsxAttributeString) { - result += text.substring(start, pos); - tokenFlags |= TokenFlags.Unterminated; - break; - } - pos++; - } - return result; - } - - function scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError: boolean): SyntaxKind { - const startedWithBacktick = charCodeUnchecked(pos) === CharacterCodes.backtick; - - pos++; - let start = pos; - let contents = ""; - let resultingToken!: SyntaxKind; - - while (true) { - if (pos >= end) { - contents += text.substring(start, pos); - tokenFlags |= TokenFlags.Unterminated; - resultingToken = startedWithBacktick ? SyntaxKind.NoSubstitutionTemplateLiteral : SyntaxKind.TemplateTail; - break; - } - - const currChar = charCodeUnchecked(pos); - - if (currChar === CharacterCodes.backtick) { - contents += text.substring(start, pos); - pos++; - resultingToken = startedWithBacktick ? SyntaxKind.NoSubstitutionTemplateLiteral : SyntaxKind.TemplateTail; - break; - } - - if (currChar === CharacterCodes.$ && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.openBrace) { - contents += text.substring(start, pos); - pos += 2; - resultingToken = startedWithBacktick ? SyntaxKind.TemplateHead : SyntaxKind.TemplateMiddle; - break; - } - - if (currChar === CharacterCodes.backslash) { - contents += text.substring(start, pos); - contents += scanEscapeSequence(EscapeSequenceScanningFlags.String | (shouldEmitInvalidEscapeError ? EscapeSequenceScanningFlags.ReportErrors : 0)); - start = pos; - continue; - } - - if (currChar === CharacterCodes.carriageReturn) { - contents += text.substring(start, pos); - pos++; - - if (pos < end && charCodeUnchecked(pos) === CharacterCodes.lineFeed) { - pos++; - } - - contents += "\n"; - start = pos; - continue; - } - - pos++; - } - - tokenValue = contents; - return resultingToken; - } - - function scanEscapeSequence(flags: EscapeSequenceScanningFlags): string { - const start = pos; - pos++; - if (pos >= end) { - return ""; - } - const ch = charCodeUnchecked(pos); - pos++; - switch (ch) { - case CharacterCodes._0: - if (pos >= end || !isDigit(charCodeUnchecked(pos))) { - return "\0"; - } - // falls through - case CharacterCodes._1: - case CharacterCodes._2: - case CharacterCodes._3: - if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { - pos++; - } - // falls through - case CharacterCodes._4: - case CharacterCodes._5: - case CharacterCodes._6: - case CharacterCodes._7: - if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { - pos++; - } - tokenFlags |= TokenFlags.ContainsInvalidEscape; - if (flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors) { - const code = parseInt(text.substring(start + 1, pos), 8); - return String.fromCharCode(code); - } - return text.substring(start, pos); - case CharacterCodes._8: - case CharacterCodes._9: - tokenFlags |= TokenFlags.ContainsInvalidEscape; - if (flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors) { - return String.fromCharCode(ch); - } - return text.substring(start, pos); - case CharacterCodes.b: - return "\b"; - case CharacterCodes.t: - return "\t"; - case CharacterCodes.n: - return "\n"; - case CharacterCodes.v: - return "\v"; - case CharacterCodes.f: - return "\f"; - case CharacterCodes.r: - return "\r"; - case CharacterCodes.singleQuote: - return "'"; - case CharacterCodes.doubleQuote: - return '"'; - case CharacterCodes.u: - if (pos < end && charCodeUnchecked(pos) === CharacterCodes.openBrace) { - pos -= 2; - const result = scanExtendedUnicodeEscape(); - if (!(flags & EscapeSequenceScanningFlags.AllowExtendedUnicodeEscape)) { - tokenFlags |= TokenFlags.ContainsInvalidEscape; - } - return result; - } - // '\uDDDD' - for (; pos < start + 6; pos++) { - if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { - tokenFlags |= TokenFlags.ContainsInvalidEscape; - return text.substring(start, pos); - } - } - tokenFlags |= TokenFlags.UnicodeEscape; - { - const escapedValue = parseInt(text.substring(start + 2, pos), 16); - const escapedValueString = String.fromCharCode(escapedValue); - if ( - flags & EscapeSequenceScanningFlags.AnyUnicodeMode && escapedValue >= 0xD800 && escapedValue <= 0xDBFF && - pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && charCodeUnchecked(pos + 2) !== CharacterCodes.openBrace - ) { - const nextStart = pos; - let nextPos = pos + 2; - for (; nextPos < nextStart + 6; nextPos++) { - if (!isHexDigit(charCodeUnchecked(nextPos))) { - return escapedValueString; - } - } - const nextEscapedValue = parseInt(text.substring(nextStart + 2, nextPos), 16); - if (nextEscapedValue >= 0xDC00 && nextEscapedValue <= 0xDFFF) { - pos = nextPos; - return escapedValueString + String.fromCharCode(nextEscapedValue); - } - } - return escapedValueString; - } - - case CharacterCodes.x: - for (; pos < start + 4; pos++) { - if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { - tokenFlags |= TokenFlags.ContainsInvalidEscape; - return text.substring(start, pos); - } - } - tokenFlags |= TokenFlags.HexEscape; - return String.fromCharCode(parseInt(text.substring(start + 2, pos), 16)); - - case CharacterCodes.carriageReturn: - if (pos < end && charCodeUnchecked(pos) === CharacterCodes.lineFeed) { - pos++; - } - // falls through - case CharacterCodes.lineFeed: - case CharacterCodes.lineSeparator: - case CharacterCodes.paragraphSeparator: - return ""; - default: - return String.fromCharCode(ch); - } - } - - function scanExtendedUnicodeEscape(): string { - const start = pos; - pos += 3; - const escapedValueString = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false); - const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; - let isInvalidExtendedEscape = false; - - if (escapedValue < 0) { - isInvalidExtendedEscape = true; - } - else if (escapedValue > 0x10FFFF) { - isInvalidExtendedEscape = true; - } - - if (pos >= end) { - isInvalidExtendedEscape = true; - } - else if (charCodeUnchecked(pos) === CharacterCodes.closeBrace) { - pos++; - } - else { - isInvalidExtendedEscape = true; - } - - if (isInvalidExtendedEscape) { - tokenFlags |= TokenFlags.ContainsInvalidEscape; - return text.substring(start, pos); - } - - tokenFlags |= TokenFlags.ExtendedUnicodeEscape; - return utf16EncodeAsString(escapedValue); - } - - function peekUnicodeEscape(): number { - if (pos + 5 < end && charCodeUnchecked(pos + 1) === CharacterCodes.u) { - const start = pos; - pos += 2; - const value = scanExactNumberOfHexDigits(4, /*canHaveSeparators*/ false); - pos = start; - return value; - } - return -1; - } - - function peekExtendedUnicodeEscape(): number { - if (codePointUnchecked(pos + 1) === CharacterCodes.u && codePointUnchecked(pos + 2) === CharacterCodes.openBrace) { - const start = pos; - pos += 3; - const escapedValueString = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false); - const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; - pos = start; - return escapedValue; - } - return -1; - } - - function scanIdentifierParts(): string { - let result = ""; - let start = pos; - while (pos < end) { - let ch = codePointUnchecked(pos); - if (isIdentifierPart(ch)) { - pos += charSize(ch); - } - else if (ch === CharacterCodes.backslash) { - ch = peekExtendedUnicodeEscape(); - if (ch >= 0 && isIdentifierPart(ch)) { - result += scanExtendedUnicodeEscape(); - start = pos; - continue; - } - ch = peekUnicodeEscape(); - if (!(ch >= 0 && isIdentifierPart(ch))) { - break; - } - tokenFlags |= TokenFlags.UnicodeEscape; - result += text.substring(start, pos); - result += utf16EncodeAsString(ch); - pos += 6; - start = pos; - } - else { - break; - } - } - result += text.substring(start, pos); - return result; - } - - function getIdentifierToken(): SyntaxKind.Identifier | KeywordSyntaxKind { - const len = tokenValue.length; - if (len >= 2 && len <= 12) { - const ch = tokenValue.charCodeAt(0); - if (ch >= CharacterCodes.a && ch <= CharacterCodes.z) { - const keyword = textToKeyword.get(tokenValue); - if (keyword !== undefined) { - return token = keyword; - } - } - } - return token = SyntaxKind.Identifier; - } - - function scanBinaryOrOctalDigits(base: 2 | 8): string { - let value = ""; - let separatorAllowed = false; - let isPreviousTokenSeparator = false; - while (true) { - const ch = charCodeUnchecked(pos); - if (ch === CharacterCodes._) { - tokenFlags |= TokenFlags.ContainsSeparator; - if (separatorAllowed) { - separatorAllowed = false; - isPreviousTokenSeparator = true; - } - pos++; - continue; - } - separatorAllowed = true; - if (!isDigit(ch) || ch - CharacterCodes._0 >= base) { - break; - } - value += text[pos]; - pos++; - isPreviousTokenSeparator = false; - } - return value; - } - - function checkBigIntSuffix(): SyntaxKind { - if (charCodeUnchecked(pos) === CharacterCodes.n) { - tokenValue += "n"; - if (tokenFlags & TokenFlags.BinaryOrOctalSpecifier) { - tokenValue = parsePseudoBigInt(tokenValue) + "n"; - } - pos++; - return SyntaxKind.BigIntLiteral; - } - else { - const numericValue = tokenFlags & TokenFlags.BinarySpecifier - ? parseInt(tokenValue.slice(2), 2) - : tokenFlags & TokenFlags.OctalSpecifier - ? parseInt(tokenValue.slice(2), 8) - : +tokenValue; - tokenValue = "" + numericValue; - return SyntaxKind.NumericLiteral; - } - } - - function scan(): SyntaxKind { - fullStartPos = pos; - tokenFlags = TokenFlags.None; - while (true) { - tokenStart = pos; - if (pos >= end) { - return token = SyntaxKind.EndOfFile; - } - - const ch = codePointUnchecked(pos); - if (pos === 0) { - if (ch === CharacterCodes.hash && isShebangTrivia(text, pos)) { - pos = scanShebangTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.Unknown; - } - } - } - - switch (ch) { - case CharacterCodes.lineFeed: - case CharacterCodes.carriageReturn: - tokenFlags |= TokenFlags.PrecedingLineBreak; - if (skipTrivia) { - pos++; - continue; - } - else { - if (ch === CharacterCodes.carriageReturn && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.lineFeed) { - pos += 2; - } - else { - pos++; - } - return token = SyntaxKind.NewLineTrivia; - } - case CharacterCodes.tab: - case CharacterCodes.verticalTab: - case CharacterCodes.formFeed: - case CharacterCodes.space: - case CharacterCodes.nonBreakingSpace: - case CharacterCodes.ogham: - case CharacterCodes.enQuad: - case CharacterCodes.emQuad: - case CharacterCodes.enSpace: - case CharacterCodes.emSpace: - case CharacterCodes.threePerEmSpace: - case CharacterCodes.fourPerEmSpace: - case CharacterCodes.sixPerEmSpace: - case CharacterCodes.figureSpace: - case CharacterCodes.punctuationSpace: - case CharacterCodes.thinSpace: - case CharacterCodes.hairSpace: - case CharacterCodes.zeroWidthSpace: - case CharacterCodes.narrowNoBreakSpace: - case CharacterCodes.mathematicalSpace: - case CharacterCodes.ideographicSpace: - case CharacterCodes.byteOrderMark: - if (skipTrivia) { - pos++; - continue; - } - else { - while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { - pos++; - } - return token = SyntaxKind.WhitespaceTrivia; - } - case CharacterCodes.exclamation: - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.ExclamationEqualsEqualsToken; - } - return pos += 2, token = SyntaxKind.ExclamationEqualsToken; - } - pos++; - return token = SyntaxKind.ExclamationToken; - case CharacterCodes.doubleQuote: - case CharacterCodes.singleQuote: - tokenValue = scanString(); - return token = SyntaxKind.StringLiteral; - case CharacterCodes.backtick: - return token = scanTemplateAndSetTokenValue(/*shouldEmitInvalidEscapeError*/ false); - case CharacterCodes.percent: - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.PercentEqualsToken; - } - pos++; - return token = SyntaxKind.PercentToken; - case CharacterCodes.ampersand: - if (charCodeUnchecked(pos + 1) === CharacterCodes.ampersand) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.AmpersandAmpersandEqualsToken; - } - return pos += 2, token = SyntaxKind.AmpersandAmpersandToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.AmpersandEqualsToken; - } - pos++; - return token = SyntaxKind.AmpersandToken; - case CharacterCodes.openParen: - pos++; - return token = SyntaxKind.OpenParenToken; - case CharacterCodes.closeParen: - pos++; - return token = SyntaxKind.CloseParenToken; - case CharacterCodes.asterisk: - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.AsteriskEqualsToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.asterisk) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.AsteriskAsteriskEqualsToken; - } - return pos += 2, token = SyntaxKind.AsteriskAsteriskToken; - } - pos++; - if ( - skipJsDocLeadingAsterisks && - (tokenFlags & TokenFlags.PrecedingJSDocLeadingAsterisks) === 0 && - (tokenFlags & TokenFlags.PrecedingLineBreak) - ) { - tokenFlags |= TokenFlags.PrecedingJSDocLeadingAsterisks; - continue; - } - return token = SyntaxKind.AsteriskToken; - case CharacterCodes.plus: - if (charCodeUnchecked(pos + 1) === CharacterCodes.plus) { - return pos += 2, token = SyntaxKind.PlusPlusToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.PlusEqualsToken; - } - pos++; - return token = SyntaxKind.PlusToken; - case CharacterCodes.comma: - pos++; - return token = SyntaxKind.CommaToken; - case CharacterCodes.minus: - if (charCodeUnchecked(pos + 1) === CharacterCodes.minus) { - return pos += 2, token = SyntaxKind.MinusMinusToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.MinusEqualsToken; - } - pos++; - return token = SyntaxKind.MinusToken; - case CharacterCodes.dot: - if (isDigit(charCodeUnchecked(pos + 1))) { - scanNumber(); - return token = SyntaxKind.NumericLiteral; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.dot && charCodeUnchecked(pos + 2) === CharacterCodes.dot) { - return pos += 3, token = SyntaxKind.DotDotDotToken; - } - pos++; - return token = SyntaxKind.DotToken; - case CharacterCodes.slash: - // Single-line comment - if (charCodeUnchecked(pos + 1) === CharacterCodes.slash) { - pos += 2; - - while (pos < end) { - if (isLineBreak(charCodeUnchecked(pos))) { - break; - } - pos++; - } - - commentDirectives = appendIfCommentDirective( - commentDirectives, - text.slice(tokenStart, pos), - commentDirectiveRegExSingleLine, - tokenStart, - ); - - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.SingleLineCommentTrivia; - } - } - // Multi-line comment - if (charCodeUnchecked(pos + 1) === CharacterCodes.asterisk) { - pos += 2; - const isJSDoc = charCodeUnchecked(pos) === CharacterCodes.asterisk && charCodeUnchecked(pos + 1) !== CharacterCodes.slash; - - let commentClosed = false; - let lastLineStart = tokenStart; - while (pos < end) { - const ch = charCodeUnchecked(pos); - - if (ch === CharacterCodes.asterisk && charCodeUnchecked(pos + 1) === CharacterCodes.slash) { - pos += 2; - commentClosed = true; - break; - } - - pos++; - - if (isLineBreak(ch)) { - lastLineStart = pos; - tokenFlags |= TokenFlags.PrecedingLineBreak; - } - } - - if (isJSDoc) { - tokenFlags |= TokenFlags.PrecedingJSDocComment; - tokenFlags = scanJSDocCommentForTags(text.slice(tokenStart, pos), tokenFlags); - } - - commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart); - - if (skipTrivia) { - continue; - } - else { - if (!commentClosed) { - tokenFlags |= TokenFlags.Unterminated; - } - return token = SyntaxKind.MultiLineCommentTrivia; - } - } - - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.SlashEqualsToken; - } - - pos++; - return token = SyntaxKind.SlashToken; - - case CharacterCodes._0: - if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.X || charCodeUnchecked(pos + 1) === CharacterCodes.x)) { - pos += 2; - tokenValue = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ true); - if (!tokenValue) { - tokenValue = "0"; - } - tokenValue = "0x" + tokenValue; - tokenFlags |= TokenFlags.HexSpecifier; - return token = checkBigIntSuffix(); - } - else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.B || charCodeUnchecked(pos + 1) === CharacterCodes.b)) { - pos += 2; - tokenValue = scanBinaryOrOctalDigits(2); - if (!tokenValue) { - tokenValue = "0"; - } - tokenValue = "0b" + tokenValue; - tokenFlags |= TokenFlags.BinarySpecifier; - return token = checkBigIntSuffix(); - } - else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.O || charCodeUnchecked(pos + 1) === CharacterCodes.o)) { - pos += 2; - tokenValue = scanBinaryOrOctalDigits(8); - if (!tokenValue) { - tokenValue = "0"; - } - tokenValue = "0o" + tokenValue; - tokenFlags |= TokenFlags.OctalSpecifier; - return token = checkBigIntSuffix(); - } - // falls through - case CharacterCodes._1: - case CharacterCodes._2: - case CharacterCodes._3: - case CharacterCodes._4: - case CharacterCodes._5: - case CharacterCodes._6: - case CharacterCodes._7: - case CharacterCodes._8: - case CharacterCodes._9: - return token = scanNumber(); - case CharacterCodes.colon: - pos++; - return token = SyntaxKind.ColonToken; - case CharacterCodes.semicolon: - pos++; - return token = SyntaxKind.SemicolonToken; - case CharacterCodes.lessThan: - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.ConflictMarkerTrivia; - } - } - - if (charCodeUnchecked(pos + 1) === CharacterCodes.lessThan) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.LessThanLessThanEqualsToken; - } - return pos += 2, token = SyntaxKind.LessThanLessThanToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.LessThanEqualsToken; - } - if ( - languageVariant === LanguageVariant.JSX && - charCodeUnchecked(pos + 1) === CharacterCodes.slash && - charCodeUnchecked(pos + 2) !== CharacterCodes.asterisk - ) { - return pos += 2, token = SyntaxKind.LessThanSlashToken; - } - pos++; - return token = SyntaxKind.LessThanToken; - case CharacterCodes.equals: - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.ConflictMarkerTrivia; - } - } - - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.EqualsEqualsEqualsToken; - } - return pos += 2, token = SyntaxKind.EqualsEqualsToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.greaterThan) { - return pos += 2, token = SyntaxKind.EqualsGreaterThanToken; - } - pos++; - return token = SyntaxKind.EqualsToken; - case CharacterCodes.greaterThan: - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.ConflictMarkerTrivia; - } - } - - pos++; - return token = SyntaxKind.GreaterThanToken; - case CharacterCodes.question: - if (charCodeUnchecked(pos + 1) === CharacterCodes.dot && !isDigit(charCodeUnchecked(pos + 2))) { - return pos += 2, token = SyntaxKind.QuestionDotToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.question) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.QuestionQuestionEqualsToken; - } - return pos += 2, token = SyntaxKind.QuestionQuestionToken; - } - pos++; - return token = SyntaxKind.QuestionToken; - case CharacterCodes.openBracket: - pos++; - return token = SyntaxKind.OpenBracketToken; - case CharacterCodes.closeBracket: - pos++; - return token = SyntaxKind.CloseBracketToken; - case CharacterCodes.caret: - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.CaretEqualsToken; - } - pos++; - return token = SyntaxKind.CaretToken; - case CharacterCodes.openBrace: - pos++; - return token = SyntaxKind.OpenBraceToken; - case CharacterCodes.bar: - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.ConflictMarkerTrivia; - } - } - - if (charCodeUnchecked(pos + 1) === CharacterCodes.bar) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.BarBarEqualsToken; - } - return pos += 2, token = SyntaxKind.BarBarToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.BarEqualsToken; - } - pos++; - return token = SyntaxKind.BarToken; - case CharacterCodes.closeBrace: - pos++; - return token = SyntaxKind.CloseBraceToken; - case CharacterCodes.tilde: - pos++; - return token = SyntaxKind.TildeToken; - case CharacterCodes.at: - pos++; - return token = SyntaxKind.AtToken; - case CharacterCodes.backslash: { - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { - tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - pos++; - return token = SyntaxKind.Unknown; - } - case CharacterCodes.hash: - if (pos !== 0 && text[pos + 1] === "!") { - pos++; - return token = SyntaxKind.Unknown; - } - - { - const charAfterHash = codePointUnchecked(pos + 1); - if (charAfterHash === CharacterCodes.backslash) { - pos++; - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { - tokenValue = "#" + scanExtendedUnicodeEscape() + scanIdentifierParts(); - return token = SyntaxKind.PrivateIdentifier; - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = "#" + String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = SyntaxKind.PrivateIdentifier; - } - pos--; - } - - if (isIdentifierStart(charAfterHash)) { - pos++; - scanIdentifier(charAfterHash); - } - else { - tokenValue = "#"; - } - return token = SyntaxKind.PrivateIdentifier; - } - case CharacterCodes.replacementCharacter: - pos = end; - return token = SyntaxKind.NonTextFileMarkerTrivia; - default: { - const identifierKind = scanIdentifier(ch); - if (identifierKind) { - return token = identifierKind; - } - else if (isWhiteSpaceSingleLine(ch)) { - pos += charSize(ch); - continue; - } - else if (isLineBreak(ch)) { - tokenFlags |= TokenFlags.PrecedingLineBreak; - pos += charSize(ch); - continue; - } - const size = charSize(ch); - pos += size; - return token = SyntaxKind.Unknown; - } - } - } - } - - function reScanInvalidIdentifier(): SyntaxKind { - pos = tokenStart = fullStartPos; - tokenFlags = 0; - const ch = codePointUnchecked(pos); - const identifierKind = scanIdentifier(ch); - if (identifierKind) { - return token = identifierKind; - } - pos += charSize(ch); - return token; // Still `SyntaxKind.Unknown` - } - - function scanIdentifier(startCharacter: number) { - let ch = startCharacter; - if (isIdentifierStart(ch)) { - pos += charSize(ch); - while (pos < end && isIdentifierPart(ch = codePointUnchecked(pos))) pos += charSize(ch); - tokenValue = text.substring(tokenStart, pos); - if (ch === CharacterCodes.backslash) { - tokenValue += scanIdentifierParts(); - } - return getIdentifierToken(); - } - } - - function reScanGreaterToken(): SyntaxKind { - if (token === SyntaxKind.GreaterThanToken) { - if (charCodeUnchecked(pos) === CharacterCodes.greaterThan) { - if (charCodeUnchecked(pos + 1) === CharacterCodes.greaterThan) { - if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { - return pos += 3, token = SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken; - } - return pos += 2, token = SyntaxKind.GreaterThanGreaterThanGreaterThanToken; - } - if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { - return pos += 2, token = SyntaxKind.GreaterThanGreaterThanEqualsToken; - } - pos++; - return token = SyntaxKind.GreaterThanGreaterThanToken; - } - if (charCodeUnchecked(pos) === CharacterCodes.equals) { - pos++; - return token = SyntaxKind.GreaterThanEqualsToken; - } - } - return token; - } - - function reScanAsteriskEqualsToken(): SyntaxKind { - pos = tokenStart + 1; - return token = SyntaxKind.EqualsToken; - } - - function reScanSlashToken(): SyntaxKind { - if (token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) { - const startOfRegExpBody = tokenStart + 1; - pos = startOfRegExpBody; - let inEscape = false; - let inCharacterClass = false; - while (true) { - const ch = charCodeChecked(pos); - if (ch === CharacterCodes.EOF || isLineBreak(ch)) { - tokenFlags |= TokenFlags.Unterminated; - break; - } - - if (inEscape) { - inEscape = false; - } - else if (ch === CharacterCodes.slash && !inCharacterClass) { - break; - } - else if (ch === CharacterCodes.openBracket) { - inCharacterClass = true; - } - else if (ch === CharacterCodes.backslash) { - inEscape = true; - } - else if (ch === CharacterCodes.closeBracket) { - inCharacterClass = false; - } - pos++; - } - - if (tokenFlags & TokenFlags.Unterminated) { - // Find best recovery position - pos = startOfRegExpBody; - inEscape = false; - let characterClassDepth = 0; - let inDecimalQuantifier = false; - let groupDepth = 0; - while (pos < end && !isLineBreak(charCodeUnchecked(pos))) { - const ch = charCodeUnchecked(pos); - if (inEscape) { - inEscape = false; - } - else if (ch === CharacterCodes.backslash) { - inEscape = true; - } - else if (ch === CharacterCodes.openBracket) { - characterClassDepth++; - } - else if (ch === CharacterCodes.closeBracket && characterClassDepth) { - characterClassDepth--; - } - else if (!characterClassDepth) { - if (ch === CharacterCodes.openBrace) { - inDecimalQuantifier = true; - } - else if (ch === CharacterCodes.closeBrace && inDecimalQuantifier) { - inDecimalQuantifier = false; - } - else if (!inDecimalQuantifier) { - if (ch === CharacterCodes.openParen) { - groupDepth++; - } - else if (ch === CharacterCodes.closeParen && groupDepth) { - groupDepth--; - } - else if (ch === CharacterCodes.closeParen || ch === CharacterCodes.closeBracket || ch === CharacterCodes.closeBrace) { - break; - } - } - } - pos++; - } - while (isWhiteSpaceLike(charCodeChecked(pos - 1)) || charCodeChecked(pos - 1) === CharacterCodes.semicolon) pos--; - } - else { - pos++; - let regExpFlags: number = RegularExpressionFlags.None; - while (true) { - const ch = codePointChecked(pos); - if (ch === CharacterCodes.EOF || !isIdentifierPart(ch)) { - break; - } - const size = charSize(ch); - const flag = characterCodeToRegularExpressionFlag(ch); - if (flag !== undefined) { - regExpFlags |= flag; - } - pos += size; - } - } - tokenValue = text.substring(tokenStart, pos); - token = SyntaxKind.RegularExpressionLiteral; - } - return token; - } - - function appendIfCommentDirective( - commentDirectives: CommentDirective[] | undefined, - text: string, - commentDirectiveRegEx: RegExp, - lineStart: number, - ) { - const type = getDirectiveFromComment(text.trimStart(), commentDirectiveRegEx); - if (type === undefined) { - return commentDirectives; - } - - if (!commentDirectives) { - commentDirectives = []; - } - commentDirectives.push({ - range: { pos: lineStart, end: pos }, - type, - }); - return commentDirectives; - } - - function getDirectiveFromComment(text: string, commentDirectiveRegEx: RegExp) { - const match = commentDirectiveRegEx.exec(text); - if (!match) { - return undefined; - } - - switch (match[1]) { - case "ts-expect-error": - return CommentDirectiveType.ExpectError; - case "ts-ignore": - return CommentDirectiveType.Ignore; - } - - return undefined; - } - - function reScanTemplateToken(isTaggedTemplate: boolean): SyntaxKind { - pos = tokenStart; - return token = scanTemplateAndSetTokenValue(!isTaggedTemplate); - } - - function reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind { - pos = tokenStart; - return token = scanTemplateAndSetTokenValue(/*shouldEmitInvalidEscapeError*/ true); - } - - function reScanJsxToken(allowMultilineJsxText = true): JsxTokenSyntaxKind { - pos = tokenStart = fullStartPos; - return token = scanJsxToken(allowMultilineJsxText); - } - - function reScanLessThanToken(): SyntaxKind { - if (token === SyntaxKind.LessThanLessThanToken) { - pos = tokenStart + 1; - return token = SyntaxKind.LessThanToken; - } - return token; - } - - function reScanHashToken(): SyntaxKind { - if (token === SyntaxKind.PrivateIdentifier) { - pos = tokenStart + 1; - return token = SyntaxKind.HashToken; - } - return token; - } - - function reScanQuestionToken(): SyntaxKind { - pos = tokenStart + 1; - return token = SyntaxKind.QuestionToken; - } - - function scanJsxToken(allowMultilineJsxText = true): JsxTokenSyntaxKind { - fullStartPos = tokenStart = pos; - - if (pos >= end) { - return token = SyntaxKind.EndOfFile; - } - - let char = charCodeUnchecked(pos); - if (char === CharacterCodes.lessThan) { - if (charCodeUnchecked(pos + 1) === CharacterCodes.slash) { - pos += 2; - return token = SyntaxKind.LessThanSlashToken; - } - pos++; - return token = SyntaxKind.LessThanToken; - } - - if (char === CharacterCodes.openBrace) { - pos++; - return token = SyntaxKind.OpenBraceToken; - } - - let firstNonWhitespace = 0; - - while (pos < end) { - char = charCodeUnchecked(pos); - if (char === CharacterCodes.openBrace) { - break; - } - if (char === CharacterCodes.lessThan) { - if (isConflictMarkerTrivia(text, pos)) { - pos = scanConflictMarkerTrivia(text, pos); - return token = SyntaxKind.ConflictMarkerTrivia; - } - break; - } - - if (isLineBreak(char) && firstNonWhitespace === 0) { - firstNonWhitespace = -1; - } - else if (!allowMultilineJsxText && isLineBreak(char) && firstNonWhitespace > 0) { - break; - } - else if (!isWhiteSpaceLike(char)) { - firstNonWhitespace = pos; - } - - pos++; - } - - tokenValue = text.substring(fullStartPos, pos); - - return firstNonWhitespace === -1 ? SyntaxKind.JsxTextAllWhiteSpaces : SyntaxKind.JsxText; - } - - function scanJsxIdentifier(): SyntaxKind { - if (tokenIsIdentifierOrKeyword(token)) { - while (pos < end) { - const ch = charCodeUnchecked(pos); - if (ch === CharacterCodes.minus) { - tokenValue += "-"; - pos++; - continue; - } - const oldPos = pos; - tokenValue += scanIdentifierParts(); - if (pos === oldPos) { - break; - } - } - return getIdentifierToken(); - } - return token; - } - - function scanJsxAttributeValue(): SyntaxKind { - fullStartPos = pos; - - switch (charCodeUnchecked(pos)) { - case CharacterCodes.doubleQuote: - case CharacterCodes.singleQuote: - tokenValue = scanString(/*jsxAttributeString*/ true); - return token = SyntaxKind.StringLiteral; - default: - return scan(); - } - } - - function reScanJsxAttributeValue(): SyntaxKind { - pos = tokenStart = fullStartPos; - return scanJsxAttributeValue(); - } - - function scanJSDocCommentTextToken(inBackticks: boolean): JSDocTokenKind | SyntaxKind.JSDocCommentTextToken { - fullStartPos = tokenStart = pos; - tokenFlags = TokenFlags.None; - if (pos >= end) { - return token = SyntaxKind.EndOfFile; - } - for (let ch = charCodeUnchecked(pos); pos < end && (!isLineBreak(ch) && ch !== CharacterCodes.backtick); ch = codePointUnchecked(++pos)) { - if (!inBackticks) { - if (ch === CharacterCodes.openBrace) { - break; - } - else if ( - ch === CharacterCodes.at - && pos - 1 >= 0 && isWhiteSpaceSingleLine(charCodeUnchecked(pos - 1)) - && pos + 1 < end && isIdentifierStart(charCodeUnchecked(pos + 1)) - ) { - break; - } - } - } - if (pos === tokenStart) { - return scanJsDocToken(); - } - tokenValue = text.substring(tokenStart, pos); - return token = SyntaxKind.JSDocCommentTextToken; - } - - function scanJsDocToken(): JSDocTokenKind { - fullStartPos = tokenStart = pos; - tokenFlags = TokenFlags.None; - if (pos >= end) { - return token = SyntaxKind.EndOfFile; - } - - const ch = codePointUnchecked(pos); - pos += charSize(ch); - switch (ch) { - case CharacterCodes.tab: - case CharacterCodes.verticalTab: - case CharacterCodes.formFeed: - case CharacterCodes.space: - while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { - pos++; - } - return token = SyntaxKind.WhitespaceTrivia; - case CharacterCodes.at: - return token = SyntaxKind.AtToken; - case CharacterCodes.carriageReturn: - if (charCodeUnchecked(pos) === CharacterCodes.lineFeed) { - pos++; - } - // falls through - case CharacterCodes.lineFeed: - tokenFlags |= TokenFlags.PrecedingLineBreak; - return token = SyntaxKind.NewLineTrivia; - case CharacterCodes.asterisk: - return token = SyntaxKind.AsteriskToken; - case CharacterCodes.openBrace: - return token = SyntaxKind.OpenBraceToken; - case CharacterCodes.closeBrace: - return token = SyntaxKind.CloseBraceToken; - case CharacterCodes.openBracket: - return token = SyntaxKind.OpenBracketToken; - case CharacterCodes.closeBracket: - return token = SyntaxKind.CloseBracketToken; - case CharacterCodes.openParen: - return token = SyntaxKind.OpenParenToken; - case CharacterCodes.closeParen: - return token = SyntaxKind.CloseParenToken; - case CharacterCodes.lessThan: - return token = SyntaxKind.LessThanToken; - case CharacterCodes.greaterThan: - return token = SyntaxKind.GreaterThanToken; - case CharacterCodes.equals: - return token = SyntaxKind.EqualsToken; - case CharacterCodes.comma: - return token = SyntaxKind.CommaToken; - case CharacterCodes.dot: - return token = SyntaxKind.DotToken; - case CharacterCodes.backtick: - return token = SyntaxKind.BacktickToken; - case CharacterCodes.hash: - return token = SyntaxKind.HashToken; - case CharacterCodes.backslash: - pos--; - { - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { - tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - } - pos++; - return token = SyntaxKind.Unknown; - } - - if (isIdentifierStart(ch)) { - let char = ch; - while (pos < end && (isIdentifierPart(char = codePointUnchecked(pos)) || char === CharacterCodes.minus)) pos += charSize(char); - tokenValue = text.substring(tokenStart, pos); - if (char === CharacterCodes.backslash) { - tokenValue += scanIdentifierParts(); - } - return token = getIdentifierToken(); - } - else { - return token = SyntaxKind.Unknown; - } - } - - function speculationHelper(callback: () => T, isLookahead: boolean): T { - const savePos = pos; - const saveStartPos = fullStartPos; - const saveTokenPos = tokenStart; - const saveToken = token; - const saveTokenValue = tokenValue; - const saveTokenFlags = tokenFlags; - const result = callback(); - - if (!result || isLookahead) { - pos = savePos; - fullStartPos = saveStartPos; - tokenStart = saveTokenPos; - token = saveToken; - tokenValue = saveTokenValue; - tokenFlags = saveTokenFlags; - } - return result; - } - - function scanRange(start: number, length: number, callback: () => T): T { - const saveEnd = end; - const savePos = pos; - const saveStartPos = fullStartPos; - const saveTokenPos = tokenStart; - const saveToken = token; - const saveTokenValue = tokenValue; - const saveTokenFlags = tokenFlags; - const saveErrorExpectations = commentDirectives; - - setText(text, start, length); - const result = callback(); - - end = saveEnd; - pos = savePos; - fullStartPos = saveStartPos; - tokenStart = saveTokenPos; - token = saveToken; - tokenValue = saveTokenValue; - tokenFlags = saveTokenFlags; - commentDirectives = saveErrorExpectations; - - return result; - } - - function lookAhead(callback: () => T): T { - return speculationHelper(callback, /*isLookahead*/ true); - } - - function tryScan(callback: () => T): T { - return speculationHelper(callback, /*isLookahead*/ false); - } - - function getText(): string { - return text; - } - - function clearCommentDirectives() { - commentDirectives = undefined; - } - - function setText(newText: string | undefined, start: number | undefined, length: number | undefined) { - text = newText || ""; - end = length === undefined ? text.length : start! + length; - resetTokenState(start || 0); - } - - function setLanguageVariant(variant: LanguageVariant) { - languageVariant = variant; - } - - function resetTokenState(position: number) { - pos = position; - fullStartPos = position; - tokenStart = position; - token = SyntaxKind.Unknown; - tokenValue = undefined!; - tokenFlags = TokenFlags.None; - } - - function setSkipJsDocLeadingAsterisks(skip: boolean) { - skipJsDocLeadingAsterisks += skip ? 1 : -1; - } -} +import { CharacterCodes } from "#enums/characterCodes"; +import { CommentDirectiveType } from "#enums/commentDirectiveType"; +import { LanguageVariant } from "#enums/languageVariant"; +import { RegularExpressionFlags } from "#enums/regularExpressionFlags"; +import { ScriptTarget } from "#enums/scriptTarget"; +import { SyntaxKind } from "#enums/syntaxKind"; +import { TokenFlags } from "#enums/tokenFlags"; +import type { + JsxTokenSyntaxKind, + KeywordSyntaxKind, +} from "./ast.ts"; + +export type JSDocTokenKind = SyntaxKind.EndOfFile | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind; + +export interface CommentDirective { + range: { pos: number; end: number; }; + type: CommentDirectiveType; +} + +// Internal-only, not exported +const EscapeSequenceScanningFlags = { + String: 1 << 0, + ReportErrors: 1 << 1, + RegularExpression: 1 << 2, + AnnexB: 1 << 3, + AnyUnicodeMode: 1 << 4, + AtomEscape: 1 << 5, + ReportInvalidEscapeErrors: (1 << 2) | (1 << 1), + AllowExtendedUnicodeEscape: (1 << 0) | (1 << 4), +} as const; +type EscapeSequenceScanningFlags = typeof EscapeSequenceScanningFlags[keyof typeof EscapeSequenceScanningFlags]; + +export function tokenIsIdentifierOrKeyword(token: SyntaxKind): boolean { + return token >= SyntaxKind.Identifier; +} + +export function tokenIsIdentifierOrKeywordOrGreaterThan(token: SyntaxKind): boolean { + return token === SyntaxKind.GreaterThanToken || tokenIsIdentifierOrKeyword(token); +} + +export interface Scanner { + getTokenFullStart(): number; + getToken(): SyntaxKind; + getTokenStart(): number; + getTokenEnd(): number; + getTokenText(): string; + getTokenValue(): string; + hasUnicodeEscape(): boolean; + hasExtendedUnicodeEscape(): boolean; + hasPrecedingLineBreak(): boolean; + hasPrecedingJSDocComment(): boolean; + hasPrecedingJSDocLeadingAsterisks(): boolean; + hasPrecedingJSDocWithDeprecatedTag(): boolean; + hasPrecedingJSDocWithSeeOrLink(): boolean; + isIdentifier(): boolean; + isReservedWord(): boolean; + isUnterminated(): boolean; + getNumericLiteralFlags(): TokenFlags; + getCommentDirectives(): CommentDirective[] | undefined; + getTokenFlags(): TokenFlags; + reScanGreaterToken(): SyntaxKind; + reScanSlashToken(): SyntaxKind; + reScanAsteriskEqualsToken(): SyntaxKind; + reScanTemplateToken(isTaggedTemplate: boolean): SyntaxKind; + reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind; + scanJsxIdentifier(): SyntaxKind; + scanJsxAttributeValue(): SyntaxKind; + reScanJsxAttributeValue(): SyntaxKind; + reScanJsxToken(allowMultilineJsxText?: boolean): JsxTokenSyntaxKind; + reScanLessThanToken(): SyntaxKind; + reScanHashToken(): SyntaxKind; + reScanQuestionToken(): SyntaxKind; + reScanInvalidIdentifier(): SyntaxKind; + scanJsxToken(): JsxTokenSyntaxKind; + scanJsDocToken(): JSDocTokenKind; + scanJSDocCommentTextToken(inBackticks: boolean): JSDocTokenKind | SyntaxKind.JSDocCommentTextToken; + scan(): SyntaxKind; + + getText(): string; + clearCommentDirectives(): void; + setText(text: string | undefined, start?: number, length?: number): void; + setLanguageVariant(variant: LanguageVariant): void; + resetTokenState(pos: number): void; + setSkipJsDocLeadingAsterisks(skip: boolean): void; + lookAhead(callback: () => T): T; + scanRange(start: number, length: number, callback: () => T): T; + tryScan(callback: () => T): T; +} + +export const textToKeywordObj: Record = { + abstract: SyntaxKind.AbstractKeyword, + accessor: SyntaxKind.AccessorKeyword, + any: SyntaxKind.AnyKeyword, + as: SyntaxKind.AsKeyword, + asserts: SyntaxKind.AssertsKeyword, + assert: SyntaxKind.AssertKeyword, + bigint: SyntaxKind.BigIntKeyword, + boolean: SyntaxKind.BooleanKeyword, + break: SyntaxKind.BreakKeyword, + case: SyntaxKind.CaseKeyword, + catch: SyntaxKind.CatchKeyword, + class: SyntaxKind.ClassKeyword, + continue: SyntaxKind.ContinueKeyword, + const: SyntaxKind.ConstKeyword, + ["" + "constructor"]: SyntaxKind.ConstructorKeyword, + debugger: SyntaxKind.DebuggerKeyword, + declare: SyntaxKind.DeclareKeyword, + default: SyntaxKind.DefaultKeyword, + defer: SyntaxKind.DeferKeyword, + delete: SyntaxKind.DeleteKeyword, + do: SyntaxKind.DoKeyword, + else: SyntaxKind.ElseKeyword, + enum: SyntaxKind.EnumKeyword, + export: SyntaxKind.ExportKeyword, + extends: SyntaxKind.ExtendsKeyword, + false: SyntaxKind.FalseKeyword, + finally: SyntaxKind.FinallyKeyword, + for: SyntaxKind.ForKeyword, + from: SyntaxKind.FromKeyword, + function: SyntaxKind.FunctionKeyword, + get: SyntaxKind.GetKeyword, + if: SyntaxKind.IfKeyword, + implements: SyntaxKind.ImplementsKeyword, + import: SyntaxKind.ImportKeyword, + in: SyntaxKind.InKeyword, + infer: SyntaxKind.InferKeyword, + instanceof: SyntaxKind.InstanceOfKeyword, + interface: SyntaxKind.InterfaceKeyword, + intrinsic: SyntaxKind.IntrinsicKeyword, + is: SyntaxKind.IsKeyword, + keyof: SyntaxKind.KeyOfKeyword, + let: SyntaxKind.LetKeyword, + module: SyntaxKind.ModuleKeyword, + namespace: SyntaxKind.NamespaceKeyword, + never: SyntaxKind.NeverKeyword, + new: SyntaxKind.NewKeyword, + null: SyntaxKind.NullKeyword, + number: SyntaxKind.NumberKeyword, + object: SyntaxKind.ObjectKeyword, + package: SyntaxKind.PackageKeyword, + private: SyntaxKind.PrivateKeyword, + protected: SyntaxKind.ProtectedKeyword, + public: SyntaxKind.PublicKeyword, + override: SyntaxKind.OverrideKeyword, + out: SyntaxKind.OutKeyword, + readonly: SyntaxKind.ReadonlyKeyword, + require: SyntaxKind.RequireKeyword, + global: SyntaxKind.GlobalKeyword, + return: SyntaxKind.ReturnKeyword, + satisfies: SyntaxKind.SatisfiesKeyword, + set: SyntaxKind.SetKeyword, + source: SyntaxKind.SourceKeyword, + static: SyntaxKind.StaticKeyword, + string: SyntaxKind.StringKeyword, + super: SyntaxKind.SuperKeyword, + switch: SyntaxKind.SwitchKeyword, + symbol: SyntaxKind.SymbolKeyword, + this: SyntaxKind.ThisKeyword, + throw: SyntaxKind.ThrowKeyword, + true: SyntaxKind.TrueKeyword, + try: SyntaxKind.TryKeyword, + type: SyntaxKind.TypeKeyword, + typeof: SyntaxKind.TypeOfKeyword, + undefined: SyntaxKind.UndefinedKeyword, + unique: SyntaxKind.UniqueKeyword, + unknown: SyntaxKind.UnknownKeyword, + using: SyntaxKind.UsingKeyword, + var: SyntaxKind.VarKeyword, + void: SyntaxKind.VoidKeyword, + while: SyntaxKind.WhileKeyword, + with: SyntaxKind.WithKeyword, + yield: SyntaxKind.YieldKeyword, + async: SyntaxKind.AsyncKeyword, + await: SyntaxKind.AwaitKeyword, + of: SyntaxKind.OfKeyword, +}; + +const textToKeyword = new Map(Object.entries(textToKeywordObj)); + +const textToToken = new Map(Object.entries({ + ...textToKeywordObj, + "{": SyntaxKind.OpenBraceToken, + "}": SyntaxKind.CloseBraceToken, + "(": SyntaxKind.OpenParenToken, + ")": SyntaxKind.CloseParenToken, + "[": SyntaxKind.OpenBracketToken, + "]": SyntaxKind.CloseBracketToken, + ".": SyntaxKind.DotToken, + "...": SyntaxKind.DotDotDotToken, + ";": SyntaxKind.SemicolonToken, + ",": SyntaxKind.CommaToken, + "<": SyntaxKind.LessThanToken, + ">": SyntaxKind.GreaterThanToken, + "<=": SyntaxKind.LessThanEqualsToken, + ">=": SyntaxKind.GreaterThanEqualsToken, + "==": SyntaxKind.EqualsEqualsToken, + "!=": SyntaxKind.ExclamationEqualsToken, + "===": SyntaxKind.EqualsEqualsEqualsToken, + "!==": SyntaxKind.ExclamationEqualsEqualsToken, + "=>": SyntaxKind.EqualsGreaterThanToken, + "+": SyntaxKind.PlusToken, + "-": SyntaxKind.MinusToken, + "**": SyntaxKind.AsteriskAsteriskToken, + "*": SyntaxKind.AsteriskToken, + "/": SyntaxKind.SlashToken, + "%": SyntaxKind.PercentToken, + "++": SyntaxKind.PlusPlusToken, + "--": SyntaxKind.MinusMinusToken, + "<<": SyntaxKind.LessThanLessThanToken, + ">": SyntaxKind.GreaterThanGreaterThanToken, + ">>>": SyntaxKind.GreaterThanGreaterThanGreaterThanToken, + "&": SyntaxKind.AmpersandToken, + "|": SyntaxKind.BarToken, + "^": SyntaxKind.CaretToken, + "!": SyntaxKind.ExclamationToken, + "~": SyntaxKind.TildeToken, + "&&": SyntaxKind.AmpersandAmpersandToken, + "||": SyntaxKind.BarBarToken, + "?": SyntaxKind.QuestionToken, + "??": SyntaxKind.QuestionQuestionToken, + "?.": SyntaxKind.QuestionDotToken, + ":": SyntaxKind.ColonToken, + "=": SyntaxKind.EqualsToken, + "+=": SyntaxKind.PlusEqualsToken, + "-=": SyntaxKind.MinusEqualsToken, + "*=": SyntaxKind.AsteriskEqualsToken, + "**=": SyntaxKind.AsteriskAsteriskEqualsToken, + "/=": SyntaxKind.SlashEqualsToken, + "%=": SyntaxKind.PercentEqualsToken, + "<<=": SyntaxKind.LessThanLessThanEqualsToken, + ">>=": SyntaxKind.GreaterThanGreaterThanEqualsToken, + ">>>=": SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken, + "&=": SyntaxKind.AmpersandEqualsToken, + "|=": SyntaxKind.BarEqualsToken, + "^=": SyntaxKind.CaretEqualsToken, + "||=": SyntaxKind.BarBarEqualsToken, + "&&=": SyntaxKind.AmpersandAmpersandEqualsToken, + "??=": SyntaxKind.QuestionQuestionEqualsToken, + "@": SyntaxKind.AtToken, + "#": SyntaxKind.HashToken, + "`": SyntaxKind.BacktickToken, +} as Record)); + +const charCodeToRegExpFlag = new Map([ + [CharacterCodes.d, RegularExpressionFlags.HasIndices], + [CharacterCodes.g, RegularExpressionFlags.Global], + [CharacterCodes.i, RegularExpressionFlags.IgnoreCase], + [CharacterCodes.m, RegularExpressionFlags.Multiline], + [CharacterCodes.s, RegularExpressionFlags.DotAll], + [CharacterCodes.u, RegularExpressionFlags.Unicode], + [CharacterCodes.v, RegularExpressionFlags.UnicodeSets], + [CharacterCodes.y, RegularExpressionFlags.Sticky], +]); + +/** + * Generated by scripts/regenerate-unicode-identifier-parts.mjs on node v22.1.0 with unicode 15.1 + * based on http://www.unicode.org/reports/tr31/ and https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords + * unicodeESNextIdentifierStart corresponds to the ID_Start and Other_ID_Start property, and + * unicodeESNextIdentifierPart corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start + */ +// dprint-ignore +const unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2160, 2183, 2185, 2190, 2208, 2249, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3165, 3165, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3293, 3294, 3296, 3297, 3313, 3314, 3332, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5905, 5919, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6988, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69248, 69289, 69296, 69297, 69376, 69404, 69415, 69415, 69424, 69445, 69488, 69505, 69552, 69572, 69600, 69622, 69635, 69687, 69745, 69746, 69749, 69749, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69959, 69959, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70207, 70208, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70753, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71488, 71494, 71680, 71723, 71840, 71903, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71983, 71999, 71999, 72001, 72001, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73474, 73474, 73476, 73488, 73490, 73523, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78913, 78918, 82944, 83526, 92160, 92728, 92736, 92766, 92784, 92862, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 122624, 122654, 122661, 122666, 122928, 122989, 123136, 123180, 123191, 123197, 123214, 123214, 123536, 123565, 123584, 123627, 124112, 124139, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743]; +// dprint-ignore +const unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2160, 2183, 2185, 2190, 2200, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2901, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3132, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3165, 3165, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3293, 3294, 3296, 3299, 3302, 3311, 3313, 3315, 3328, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3457, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3790, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5909, 5919, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6159, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6847, 6862, 6912, 6988, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43047, 43052, 43052, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69248, 69289, 69291, 69292, 69296, 69297, 69373, 69404, 69415, 69415, 69424, 69456, 69488, 69509, 69552, 69572, 69600, 69622, 69632, 69702, 69734, 69749, 69759, 69818, 69826, 69826, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69959, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70094, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70209, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70753, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71488, 71494, 71680, 71738, 71840, 71913, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71989, 71991, 71992, 71995, 72003, 72016, 72025, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73472, 73488, 73490, 73530, 73534, 73538, 73552, 73561, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78912, 78933, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92784, 92862, 92864, 92873, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94180, 94192, 94193, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 118528, 118573, 118576, 118598, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122624, 122654, 122661, 122666, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 122928, 122989, 123023, 123023, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123536, 123566, 123584, 123641, 124112, 124153, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 130032, 130041, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743, 917760, 917999]; + +const commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/; +const commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/; + +const jsDocTagTerminators = new Set([" ", "\t", "\n", "\r", "}", "*"]); + +function hasJSDocTag(text: string, offset: number, ...tags: string[]): boolean { + for (const tag of tags) { + if (text.startsWith(tag, offset)) { + if (offset + tag.length === text.length) { + return true; + } + if (jsDocTagTerminators.has(text[offset + tag.length])) { + return true; + } + } + } + return false; +} + +function scanJSDocCommentForTags(text: string, tokenFlags: TokenFlags): TokenFlags { + let offset = 0; + while (true) { + const i = text.indexOf("@", offset); + if (i < 0) { + return tokenFlags; + } + offset = i + 1; + if (!(tokenFlags & TokenFlags.PrecedingJSDocWithDeprecated) && hasJSDocTag(text, offset, "deprecated")) { + tokenFlags |= TokenFlags.PrecedingJSDocWithDeprecated; + } + if (!(tokenFlags & TokenFlags.PrecedingJSDocWithSeeOrLink) && hasJSDocTag(text, offset, "see", "link", "linkcode", "linkplain")) { + tokenFlags |= TokenFlags.PrecedingJSDocWithSeeOrLink; + } + if ( + (tokenFlags & (TokenFlags.PrecedingJSDocWithDeprecated | TokenFlags.PrecedingJSDocWithSeeOrLink)) === + (TokenFlags.PrecedingJSDocWithDeprecated | TokenFlags.PrecedingJSDocWithSeeOrLink) + ) { + return tokenFlags; + } + } +} + +function lookupInUnicodeMap(code: number, map: readonly number[]): boolean { + if (code < map[0]) { + return false; + } + + let lo = 0; + let hi: number = map.length; + let mid: number; + + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { + return true; + } + + if (code < map[mid]) { + hi = mid; + } + else { + lo = mid + 2; + } + } + + return false; +} + +export function isUnicodeIdentifierStart(code: number): boolean { + return lookupInUnicodeMap(code, unicodeESNextIdentifierStart); +} + +function isUnicodeIdentifierPart(code: number): boolean { + return lookupInUnicodeMap(code, unicodeESNextIdentifierPart); +} + +function makeReverseMap(source: Map): T[] { + const result: T[] = []; + source.forEach((value, name) => { + result[value] = name; + }); + return result; +} + +const tokenStrings = makeReverseMap(textToToken); + +export function tokenToString(t: SyntaxKind): string | undefined { + return tokenStrings[t]; +} + +export function stringToToken(s: string): SyntaxKind | undefined { + return textToToken.get(s); +} + +export function characterCodeToRegularExpressionFlag(ch: number): RegularExpressionFlags | undefined { + return charCodeToRegExpFlag.get(ch); +} + +export function computeLineStarts(text: string): number[] { + const result: number[] = []; + let pos = 0; + let lineStart = 0; + while (pos < text.length) { + const ch = text.charCodeAt(pos); + pos++; + switch (ch) { + case CharacterCodes.carriageReturn: + if (text.charCodeAt(pos) === CharacterCodes.lineFeed) { + pos++; + } + // falls through + case CharacterCodes.lineFeed: + result.push(lineStart); + lineStart = pos; + break; + default: + if (ch > CharacterCodes.maxAsciiCharacter && isLineBreak(ch)) { + result.push(lineStart); + lineStart = pos; + } + break; + } + } + result.push(lineStart); + return result; +} + +export function isWhiteSpaceLike(ch: number): boolean { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); +} + +export function isWhiteSpaceSingleLine(ch: number): boolean { + return ch === CharacterCodes.space || + ch === CharacterCodes.tab || + ch === CharacterCodes.verticalTab || + ch === CharacterCodes.formFeed || + ch === CharacterCodes.nonBreakingSpace || + ch === CharacterCodes.nextLine || + ch === CharacterCodes.ogham || + ch >= CharacterCodes.enQuad && ch <= CharacterCodes.zeroWidthSpace || + ch === CharacterCodes.narrowNoBreakSpace || + ch === CharacterCodes.mathematicalSpace || + ch === CharacterCodes.ideographicSpace || + ch === CharacterCodes.byteOrderMark; +} + +export function isLineBreak(ch: number): boolean { + return ch === CharacterCodes.lineFeed || + ch === CharacterCodes.carriageReturn || + ch === CharacterCodes.lineSeparator || + ch === CharacterCodes.paragraphSeparator; +} + +function isDigit(ch: number): boolean { + return ch >= CharacterCodes._0 && ch <= CharacterCodes._9; +} + +function isHexDigit(ch: number): boolean { + return isDigit(ch) || ch >= CharacterCodes.A && ch <= CharacterCodes.F || ch >= CharacterCodes.a && ch <= CharacterCodes.f; +} + +function isOctalDigit(ch: number): boolean { + return ch >= CharacterCodes._0 && ch <= CharacterCodes._7; +} + +export function couldStartTrivia(text: string, pos: number): boolean { + const ch = text.charCodeAt(pos); + switch (ch) { + case CharacterCodes.carriageReturn: + case CharacterCodes.lineFeed: + case CharacterCodes.tab: + case CharacterCodes.verticalTab: + case CharacterCodes.formFeed: + case CharacterCodes.space: + case CharacterCodes.slash: + case CharacterCodes.lessThan: + case CharacterCodes.bar: + case CharacterCodes.equals: + case CharacterCodes.greaterThan: + return true; + case CharacterCodes.hash: + return pos === 0; + default: + return ch > CharacterCodes.maxAsciiCharacter; + } +} + +export function skipTrivia(text: string, pos: number, stopAfterLineBreak?: boolean, stopAtComments?: boolean, inJSDoc?: boolean): number { + if (pos < 0) { + return pos; + } + + let canConsumeStar = false; + while (true) { + const ch = text.charCodeAt(pos); + switch (ch) { + case CharacterCodes.carriageReturn: + if (text.charCodeAt(pos + 1) === CharacterCodes.lineFeed) { + pos++; + } + // falls through + case CharacterCodes.lineFeed: + pos++; + if (stopAfterLineBreak) { + return pos; + } + canConsumeStar = !!inJSDoc; + continue; + case CharacterCodes.tab: + case CharacterCodes.verticalTab: + case CharacterCodes.formFeed: + case CharacterCodes.space: + pos++; + continue; + case CharacterCodes.slash: + if (stopAtComments) { + break; + } + if (text.charCodeAt(pos + 1) === CharacterCodes.slash) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + canConsumeStar = false; + continue; + } + if (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) { + pos += 2; + while (pos < text.length) { + if (text.charCodeAt(pos) === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) { + pos += 2; + break; + } + pos++; + } + canConsumeStar = false; + continue; + } + break; + + case CharacterCodes.lessThan: + case CharacterCodes.bar: + case CharacterCodes.equals: + case CharacterCodes.greaterThan: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + canConsumeStar = false; + continue; + } + break; + + case CharacterCodes.hash: + if (pos === 0 && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + continue; + } + break; + + case CharacterCodes.asterisk: + if (canConsumeStar) { + pos++; + canConsumeStar = false; + continue; + } + break; + + default: + if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { + pos++; + continue; + } + break; + } + return pos; + } +} + +function isConflictMarkerTrivia(text: string, pos: number) { + if (pos >= text.length) { + return false; + } + + const ch = text.charCodeAt(pos); + + if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { + if (ch === CharacterCodes.lessThan || ch === CharacterCodes.greaterThan || ch === CharacterCodes.equals) { + if (pos + 6 < text.length && text.charCodeAt(pos + 1) === ch && text.charCodeAt(pos + 2) === ch && text.charCodeAt(pos + 3) === ch && text.charCodeAt(pos + 4) === ch && text.charCodeAt(pos + 5) === ch && text.charCodeAt(pos + 6) === ch) { + return ch === CharacterCodes.equals || text.charCodeAt(pos + 7) === CharacterCodes.space; + } + } + if (ch === CharacterCodes.bar && pos + 6 < text.length && text.charCodeAt(pos + 1) === ch && text.charCodeAt(pos + 2) === ch && text.charCodeAt(pos + 3) === ch && text.charCodeAt(pos + 4) === ch && text.charCodeAt(pos + 5) === ch && text.charCodeAt(pos + 6) === ch) { + return true; + } + } + + return false; +} + +function scanConflictMarkerTrivia(text: string, pos: number): number { + const ch = text.charCodeAt(pos); + const len = text.length; + + if (ch === CharacterCodes.lessThan || ch === CharacterCodes.greaterThan) { + while (pos < len && !isLineBreak(text.charCodeAt(pos))) { + pos++; + } + } + else { + // Consume everything from the start of a ||||||| or ======= marker to the start + // of the next ======= or >>>>>>> marker. + pos += 7; // skip marker + while (pos < len) { + const currentChar = text.charCodeAt(pos); + if ((currentChar === CharacterCodes.equals || currentChar === CharacterCodes.greaterThan) && isConflictMarkerTrivia(text, pos)) { + break; + } + pos++; + } + } + + return pos; +} + +function isShebangTrivia(text: string, pos: number) { + return pos === 0 && text.charCodeAt(0) === CharacterCodes.hash && text.charCodeAt(1) === CharacterCodes.exclamation; +} + +function scanShebangTrivia(text: string, pos: number) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + return pos; +} + +export type CommentKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia; + +export interface CommentRange { + pos: number; + end: number; + hasTrailingNewLine?: boolean; + kind: CommentKind; +} + +function iterateCommentRanges( + reduce: boolean, + text: string, + pos: number, + trailing: boolean, + cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U | undefined) => U, + state: T, + initial?: U, +): U | undefined { + let pendingPos!: number; + let pendingEnd!: number; + let pendingKind!: CommentKind; + let pendingHasTrailingNewLine!: boolean; + let hasPendingCommentRange = false; + let collecting = trailing; + let accumulator = initial; + if (pos === 0) { + collecting = true; + const shebang = getShebang(text); + if (shebang) { + pos = shebang.length; + } + } + scan: + while (pos >= 0 && pos < text.length) { + const ch = text.charCodeAt(pos); + switch (ch) { + case CharacterCodes.carriageReturn: + if (text.charCodeAt(pos + 1) === CharacterCodes.lineFeed) { + pos++; + } + // falls through + case CharacterCodes.lineFeed: + pos++; + if (trailing) { + break scan; + } + collecting = true; + if (hasPendingCommentRange) { + pendingHasTrailingNewLine = true; + } + continue; + case CharacterCodes.tab: + case CharacterCodes.verticalTab: + case CharacterCodes.formFeed: + case CharacterCodes.space: + pos++; + continue; + case CharacterCodes.slash: + const nextChar = text.charCodeAt(pos + 1); + let hasTrailingNewLine = false; + if (nextChar === CharacterCodes.slash || nextChar === CharacterCodes.asterisk) { + const kind: CommentKind = nextChar === CharacterCodes.slash ? SyntaxKind.SingleLineCommentTrivia : SyntaxKind.MultiLineCommentTrivia; + const startPos = pos; + pos += 2; + if (nextChar === CharacterCodes.slash) { + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; + break; + } + pos++; + } + } + else { + while (pos < text.length) { + if (text.charCodeAt(pos) === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) { + pos += 2; + break; + } + pos++; + } + } + + if (collecting) { + if (hasPendingCommentRange) { + accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); + if (!reduce && accumulator) { + return accumulator; + } + } + + pendingPos = startPos; + pendingEnd = pos; + pendingKind = kind; + pendingHasTrailingNewLine = hasTrailingNewLine; + hasPendingCommentRange = true; + } + continue; + } + break scan; + default: + if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { + if (hasPendingCommentRange && isLineBreak(ch)) { + pendingHasTrailingNewLine = true; + } + pos++; + continue; + } + break scan; + } + } + + if (hasPendingCommentRange) { + accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); + } + + return accumulator; +} + +function appendCommentRange(pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, _state: any, comments: CommentRange[] = []) { + comments.push({ kind, pos, end, hasTrailingNewLine }); + return comments; +} + +export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; +export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; +export function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state?: T): U | undefined { + return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ false, cb, state!, /*initial*/ undefined); +} + +export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; +export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; +export function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state?: T): U | undefined { + return iterateCommentRanges(/*reduce*/ false, text, pos, /*trailing*/ true, cb, state!, /*initial*/ undefined); +} + +export function reduceEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T, initial: U): U | undefined { + return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ false, cb, state, initial); +} + +export function reduceEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T, initial: U): U | undefined { + return iterateCommentRanges(/*reduce*/ true, text, pos, /*trailing*/ true, cb, state, initial); +} + +export function getLeadingCommentRanges(text: string, pos: number): CommentRange[] | undefined { + return reduceEachLeadingCommentRange(text, pos, appendCommentRange, /*state*/ undefined as any, /*initial*/ undefined as any as CommentRange[]); +} + +export function getTrailingCommentRanges(text: string, pos: number): CommentRange[] | undefined { + return reduceEachTrailingCommentRange(text, pos, appendCommentRange, /*state*/ undefined as any, /*initial*/ undefined as any as CommentRange[]); +} + +export function getShebang(text: string): string | undefined { + const shebang = /^#!.*/; + if (isShebangTrivia(text, 0)) { + const match = shebang.exec(text); + if (match) { + return match[0]; + } + } + return undefined; +} + +export function isIdentifierStart(ch: number, _languageVersion?: ScriptTarget): boolean { + return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || + ch === CharacterCodes.$ || ch === CharacterCodes._ || + ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierStart(ch); +} + +export function isIdentifierPart(ch: number, _languageVersion?: ScriptTarget, identifierVariant?: LanguageVariant): boolean { + return ch >= CharacterCodes.A && ch <= CharacterCodes.Z || ch >= CharacterCodes.a && ch <= CharacterCodes.z || + ch >= CharacterCodes._0 && ch <= CharacterCodes._9 || ch === CharacterCodes.$ || ch === CharacterCodes._ || + // "-" and ":" are valid in JSX Identifiers + (identifierVariant === LanguageVariant.JSX ? (ch === CharacterCodes.minus || ch === CharacterCodes.colon) : false) || + ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch); +} + +export function isIdentifierText(name: string, _languageVersion?: ScriptTarget, identifierVariant?: LanguageVariant): boolean { + let ch = name.codePointAt(0)!; + if (!isIdentifierStart(ch)) { + return false; + } + + for (let i = charSize(ch); i < name.length; i += charSize(ch)) { + if (!isIdentifierPart(ch = name.codePointAt(i)!, undefined, identifierVariant)) { + return false; + } + } + + return true; +} + +function codePointAt(s: string, i: number): number { + return s.codePointAt(i)!; +} + +function charSize(ch: number) { + if (ch >= 0x10000) { + return 2; + } + if (ch === CharacterCodes.EOF) { + return 0; + } + return 1; +} + +export function utf16EncodeAsString(codePoint: number): string { + return String.fromCodePoint(codePoint); +} + +function parsePseudoBigInt(stringValue: string): string { + let log2Base: number; + switch (stringValue.charCodeAt(1)) { + case CharacterCodes.b: + case CharacterCodes.B: + log2Base = 1; + break; + case CharacterCodes.o: + case CharacterCodes.O: + log2Base = 3; + break; + case CharacterCodes.x: + case CharacterCodes.X: + log2Base = 4; + break; + default: + // decimals for now just peel the trailing "n" and return + const nIndex = stringValue.length - 1; + let nonZeroStart = 0; + while (stringValue.charCodeAt(nonZeroStart) === CharacterCodes._0) { + nonZeroStart++; + } + return stringValue.slice(nonZeroStart, nIndex) || "0"; + } + // exit early for zero + const startIndex = 2; + const endIndex = stringValue.length - 1; + const bitsNeeded = (endIndex - startIndex) * log2Base; + // Stores the value specified by the string as a LE array of 16-bit integers + // using Uint16 instead of Uint32 so combining steps can use bitwise operators + const segments = new Uint16Array((bitsNeeded >>> 4) + (bitsNeeded & 15 ? 1 : 0)); + // Add the digits, one at a time + for (let i = endIndex - 1, bitOffset = 0; i >= startIndex; i--, bitOffset += log2Base) { + const segment = bitOffset >>> 4; + const digitChar = stringValue.charCodeAt(i); + // Find character value + const digit = digitChar <= CharacterCodes._9 + ? digitChar - CharacterCodes._0 + : 10 + digitChar - (digitChar <= CharacterCodes.F ? CharacterCodes.A : CharacterCodes.a); + // Add bits into segment + const shiftedDigit = digit << (bitOffset & 15); + segments[segment] |= shiftedDigit; + // overflow to next segment + const residual = shiftedDigit >>> 16; + if (residual) segments[segment + 1] |= residual; + } + // Repeatedly divide by 10 to find each decimal digit + let base10Value = ""; + let firstNonzeroSegment = segments.length - 1; + let segmentsRemaining = true; + while (segmentsRemaining) { + let mod10 = 0; + segmentsRemaining = false; + for (let segment = firstNonzeroSegment; segment >= 0; segment--) { + const newSegment = mod10 << 16 | segments[segment]; + const segmentValue = (newSegment / 10) | 0; + segments[segment] = segmentValue; + mod10 = newSegment - segmentValue * 10; + if (segmentValue && !segmentsRemaining) { + firstNonzeroSegment = segment; + segmentsRemaining = true; + } + } + base10Value = mod10 + base10Value; + } + return base10Value; +} + +// Creates a scanner over a (possibly unspecified) range of a piece of text. +export function createScanner( + skipTrivia: boolean, + languageVariant: LanguageVariant = LanguageVariant.Standard, + textInitial?: string, + start?: number, + length?: number, +): Scanner { + // Why var? It avoids TDZ checks in the runtime which can be costly. + // See: https://github.com/microsoft/TypeScript/issues/52924 + /* eslint-disable no-var */ + var text = textInitial!; + + // Current position (end position of text of current token) + var pos: number; + + // end of text + var end: number; + + // Start position of whitespace before current token + var fullStartPos: number; + + // Start position of text of current token + var tokenStart: number; + + var token: SyntaxKind; + var tokenValue!: string; + var tokenFlags: TokenFlags; + + var commentDirectives: CommentDirective[] | undefined; + var skipJsDocLeadingAsterisks = 0; + + setText(text, start, length); + + var scanner: Scanner = { + getTokenFullStart: () => fullStartPos, + getTokenEnd: () => pos, + getToken: () => token, + getTokenStart: () => tokenStart, + getTokenText: () => text.substring(tokenStart, pos), + getTokenValue: () => tokenValue, + hasUnicodeEscape: () => (tokenFlags & TokenFlags.UnicodeEscape) !== 0, + hasExtendedUnicodeEscape: () => (tokenFlags & TokenFlags.ExtendedUnicodeEscape) !== 0, + hasPrecedingLineBreak: () => (tokenFlags & TokenFlags.PrecedingLineBreak) !== 0, + hasPrecedingJSDocComment: () => (tokenFlags & TokenFlags.PrecedingJSDocComment) !== 0, + hasPrecedingJSDocLeadingAsterisks: () => (tokenFlags & TokenFlags.PrecedingJSDocLeadingAsterisks) !== 0, + hasPrecedingJSDocWithDeprecatedTag: () => (tokenFlags & TokenFlags.PrecedingJSDocWithDeprecated) !== 0, + hasPrecedingJSDocWithSeeOrLink: () => (tokenFlags & TokenFlags.PrecedingJSDocWithSeeOrLink) !== 0, + isIdentifier: () => token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord, + isReservedWord: () => token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord, + isUnterminated: () => (tokenFlags & TokenFlags.Unterminated) !== 0, + getCommentDirectives: () => commentDirectives, + getNumericLiteralFlags: () => tokenFlags & TokenFlags.NumericLiteralFlags, + getTokenFlags: () => tokenFlags, + reScanGreaterToken, + reScanAsteriskEqualsToken, + reScanSlashToken, + reScanTemplateToken, + reScanTemplateHeadOrNoSubstitutionTemplate, + scanJsxIdentifier, + scanJsxAttributeValue, + reScanJsxAttributeValue, + reScanJsxToken, + reScanLessThanToken, + reScanHashToken, + reScanQuestionToken, + reScanInvalidIdentifier, + scanJsxToken, + scanJsDocToken, + scanJSDocCommentTextToken, + scan, + getText, + clearCommentDirectives, + setText, + setLanguageVariant, + resetTokenState, + setSkipJsDocLeadingAsterisks, + tryScan, + lookAhead, + scanRange, + }; + /* eslint-enable no-var */ + + return scanner; + + function codePointUnchecked(pos: number) { + return codePointAt(text, pos); + } + + function codePointChecked(pos: number) { + return pos >= 0 && pos < end ? codePointUnchecked(pos) : CharacterCodes.EOF; + } + + function charCodeUnchecked(pos: number) { + return text.charCodeAt(pos); + } + + function charCodeChecked(pos: number) { + return pos >= 0 && pos < end ? charCodeUnchecked(pos) : CharacterCodes.EOF; + } + + function scanNumberFragment(): string { + let start = pos; + let allowSeparator = false; + let isPreviousTokenSeparator = false; + let result = ""; + while (true) { + const ch = charCodeUnchecked(pos); + if (ch === CharacterCodes._) { + tokenFlags |= TokenFlags.ContainsSeparator; + if (allowSeparator) { + allowSeparator = false; + isPreviousTokenSeparator = true; + result += text.substring(start, pos); + } + else { + tokenFlags |= TokenFlags.ContainsInvalidSeparator; + } + pos++; + start = pos; + continue; + } + if (isDigit(ch)) { + allowSeparator = true; + isPreviousTokenSeparator = false; + pos++; + continue; + } + break; + } + if (charCodeUnchecked(pos - 1) === CharacterCodes._) { + tokenFlags |= TokenFlags.ContainsInvalidSeparator; + } + return result + text.substring(start, pos); + } + + function scanNumber(): SyntaxKind { + let start = pos; + let mainFragment: string; + if (charCodeUnchecked(pos) === CharacterCodes._0) { + pos++; + if (charCodeUnchecked(pos) === CharacterCodes._) { + tokenFlags |= TokenFlags.ContainsSeparator | TokenFlags.ContainsInvalidSeparator; + pos--; + mainFragment = scanNumberFragment(); + } + else if (!scanDigits()) { + tokenFlags |= TokenFlags.ContainsLeadingZero; + mainFragment = "" + +tokenValue; + } + else if (!tokenValue) { + mainFragment = "0"; + } + else { + tokenValue = "" + parseInt(tokenValue, 8); + tokenFlags |= TokenFlags.Octal; + const withMinus = token === SyntaxKind.MinusToken; + const literal = (withMinus ? "-" : "") + "0o" + (+tokenValue).toString(8); + if (withMinus) start--; + return SyntaxKind.NumericLiteral; + } + } + else { + mainFragment = scanNumberFragment(); + } + let decimalFragment: string | undefined; + let scientificFragment: string | undefined; + if (charCodeUnchecked(pos) === CharacterCodes.dot) { + pos++; + decimalFragment = scanNumberFragment(); + } + let end = pos; + if (charCodeUnchecked(pos) === CharacterCodes.E || charCodeUnchecked(pos) === CharacterCodes.e) { + pos++; + tokenFlags |= TokenFlags.Scientific; + if (charCodeUnchecked(pos) === CharacterCodes.plus || charCodeUnchecked(pos) === CharacterCodes.minus) pos++; + const preNumericPart = pos; + const finalFragment = scanNumberFragment(); + if (finalFragment) { + scientificFragment = text.substring(end, preNumericPart) + finalFragment; + end = pos; + } + } + let result: string; + if (tokenFlags & TokenFlags.ContainsSeparator) { + result = mainFragment; + if (decimalFragment) { + result += "." + decimalFragment; + } + if (scientificFragment) { + result += scientificFragment; + } + } + else { + result = text.substring(start, end); + } + + if (tokenFlags & TokenFlags.ContainsLeadingZero) { + tokenValue = "" + +result; + return SyntaxKind.NumericLiteral; + } + + if (decimalFragment !== undefined || tokenFlags & TokenFlags.Scientific) { + checkForIdentifierStartAfterNumericLiteral(); + tokenValue = "" + +result; + return SyntaxKind.NumericLiteral; + } + else { + tokenValue = result; + const type = checkBigIntSuffix(); + checkForIdentifierStartAfterNumericLiteral(); + return type; + } + } + + function checkForIdentifierStartAfterNumericLiteral() { + if (!isIdentifierStart(codePointUnchecked(pos))) { + return; + } + + const identifierStart = pos; + const { length } = scanIdentifierParts(); + + if (!(length === 1 && text[identifierStart] === "n")) { + pos = identifierStart; + } + } + + function scanDigits(): boolean { + const start = pos; + let isOctal = true; + while (isDigit(charCodeChecked(pos))) { + if (!isOctalDigit(charCodeUnchecked(pos))) { + isOctal = false; + } + pos++; + } + tokenValue = text.substring(start, pos); + return isOctal; + } + + function scanExactNumberOfHexDigits(count: number, canHaveSeparators: boolean): number { + const valueString = scanHexDigits(count, /*scanAsManyAsPossible*/ false, canHaveSeparators); + return valueString ? parseInt(valueString, 16) : -1; + } + + function scanMinimumNumberOfHexDigits(count: number, canHaveSeparators: boolean): string { + return scanHexDigits(count, /*scanAsManyAsPossible*/ true, canHaveSeparators); + } + + function scanHexDigits(minCount: number, scanAsManyAsPossible: boolean, canHaveSeparators: boolean): string { + let valueChars: number[] = []; + let allowSeparator = false; + while (valueChars.length < minCount || scanAsManyAsPossible) { + let ch = charCodeUnchecked(pos); + if (canHaveSeparators && ch === CharacterCodes._) { + tokenFlags |= TokenFlags.ContainsSeparator; + if (allowSeparator) { + allowSeparator = false; + } + pos++; + continue; + } + allowSeparator = canHaveSeparators; + if (ch >= CharacterCodes.A && ch <= CharacterCodes.F) { + ch += CharacterCodes.a - CharacterCodes.A; + } + else if ( + !((ch >= CharacterCodes._0 && ch <= CharacterCodes._9) || + (ch >= CharacterCodes.a && ch <= CharacterCodes.f)) + ) { + break; + } + valueChars.push(ch); + pos++; + } + if (valueChars.length < minCount) { + valueChars = []; + } + return String.fromCharCode(...valueChars); + } + + function scanString(jsxAttributeString = false): string { + const quote = charCodeUnchecked(pos); + pos++; + let result = ""; + let start = pos; + while (true) { + if (pos >= end) { + result += text.substring(start, pos); + tokenFlags |= TokenFlags.Unterminated; + break; + } + const ch = charCodeUnchecked(pos); + if (ch === quote) { + result += text.substring(start, pos); + pos++; + break; + } + if (ch === CharacterCodes.backslash && !jsxAttributeString) { + result += text.substring(start, pos); + result += scanEscapeSequence(EscapeSequenceScanningFlags.String | EscapeSequenceScanningFlags.ReportErrors); + start = pos; + continue; + } + + if ((ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn) && !jsxAttributeString) { + result += text.substring(start, pos); + tokenFlags |= TokenFlags.Unterminated; + break; + } + pos++; + } + return result; + } + + function scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError: boolean): SyntaxKind { + const startedWithBacktick = charCodeUnchecked(pos) === CharacterCodes.backtick; + + pos++; + let start = pos; + let contents = ""; + let resultingToken!: SyntaxKind; + + while (true) { + if (pos >= end) { + contents += text.substring(start, pos); + tokenFlags |= TokenFlags.Unterminated; + resultingToken = startedWithBacktick ? SyntaxKind.NoSubstitutionTemplateLiteral : SyntaxKind.TemplateTail; + break; + } + + const currChar = charCodeUnchecked(pos); + + if (currChar === CharacterCodes.backtick) { + contents += text.substring(start, pos); + pos++; + resultingToken = startedWithBacktick ? SyntaxKind.NoSubstitutionTemplateLiteral : SyntaxKind.TemplateTail; + break; + } + + if (currChar === CharacterCodes.$ && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.openBrace) { + contents += text.substring(start, pos); + pos += 2; + resultingToken = startedWithBacktick ? SyntaxKind.TemplateHead : SyntaxKind.TemplateMiddle; + break; + } + + if (currChar === CharacterCodes.backslash) { + contents += text.substring(start, pos); + contents += scanEscapeSequence(EscapeSequenceScanningFlags.String | (shouldEmitInvalidEscapeError ? EscapeSequenceScanningFlags.ReportErrors : 0)); + start = pos; + continue; + } + + if (currChar === CharacterCodes.carriageReturn) { + contents += text.substring(start, pos); + pos++; + + if (pos < end && charCodeUnchecked(pos) === CharacterCodes.lineFeed) { + pos++; + } + + contents += "\n"; + start = pos; + continue; + } + + pos++; + } + + tokenValue = contents; + return resultingToken; + } + + function scanEscapeSequence(flags: EscapeSequenceScanningFlags): string { + const start = pos; + pos++; + if (pos >= end) { + return ""; + } + const ch = charCodeUnchecked(pos); + pos++; + switch (ch) { + case CharacterCodes._0: + if (pos >= end || !isDigit(charCodeUnchecked(pos))) { + return "\0"; + } + // falls through + case CharacterCodes._1: + case CharacterCodes._2: + case CharacterCodes._3: + if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { + pos++; + } + // falls through + case CharacterCodes._4: + case CharacterCodes._5: + case CharacterCodes._6: + case CharacterCodes._7: + if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { + pos++; + } + tokenFlags |= TokenFlags.ContainsInvalidEscape; + if (flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors) { + const code = parseInt(text.substring(start + 1, pos), 8); + return String.fromCharCode(code); + } + return text.substring(start, pos); + case CharacterCodes._8: + case CharacterCodes._9: + tokenFlags |= TokenFlags.ContainsInvalidEscape; + if (flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors) { + return String.fromCharCode(ch); + } + return text.substring(start, pos); + case CharacterCodes.b: + return "\b"; + case CharacterCodes.t: + return "\t"; + case CharacterCodes.n: + return "\n"; + case CharacterCodes.v: + return "\v"; + case CharacterCodes.f: + return "\f"; + case CharacterCodes.r: + return "\r"; + case CharacterCodes.singleQuote: + return "'"; + case CharacterCodes.doubleQuote: + return '"'; + case CharacterCodes.u: + if (pos < end && charCodeUnchecked(pos) === CharacterCodes.openBrace) { + pos -= 2; + const result = scanExtendedUnicodeEscape(); + if (!(flags & EscapeSequenceScanningFlags.AllowExtendedUnicodeEscape)) { + tokenFlags |= TokenFlags.ContainsInvalidEscape; + } + return result; + } + // '\uDDDD' + for (; pos < start + 6; pos++) { + if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { + tokenFlags |= TokenFlags.ContainsInvalidEscape; + return text.substring(start, pos); + } + } + tokenFlags |= TokenFlags.UnicodeEscape; + { + const escapedValue = parseInt(text.substring(start + 2, pos), 16); + const escapedValueString = String.fromCharCode(escapedValue); + if ( + flags & EscapeSequenceScanningFlags.AnyUnicodeMode && escapedValue >= 0xD800 && escapedValue <= 0xDBFF && + pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && charCodeUnchecked(pos + 2) !== CharacterCodes.openBrace + ) { + const nextStart = pos; + let nextPos = pos + 2; + for (; nextPos < nextStart + 6; nextPos++) { + if (!isHexDigit(charCodeUnchecked(nextPos))) { + return escapedValueString; + } + } + const nextEscapedValue = parseInt(text.substring(nextStart + 2, nextPos), 16); + if (nextEscapedValue >= 0xDC00 && nextEscapedValue <= 0xDFFF) { + pos = nextPos; + return escapedValueString + String.fromCharCode(nextEscapedValue); + } + } + return escapedValueString; + } + + case CharacterCodes.x: + for (; pos < start + 4; pos++) { + if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { + tokenFlags |= TokenFlags.ContainsInvalidEscape; + return text.substring(start, pos); + } + } + tokenFlags |= TokenFlags.HexEscape; + return String.fromCharCode(parseInt(text.substring(start + 2, pos), 16)); + + case CharacterCodes.carriageReturn: + if (pos < end && charCodeUnchecked(pos) === CharacterCodes.lineFeed) { + pos++; + } + // falls through + case CharacterCodes.lineFeed: + case CharacterCodes.lineSeparator: + case CharacterCodes.paragraphSeparator: + return ""; + default: + return String.fromCharCode(ch); + } + } + + function scanExtendedUnicodeEscape(): string { + const start = pos; + pos += 3; + const escapedValueString = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false); + const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; + let isInvalidExtendedEscape = false; + + if (escapedValue < 0) { + isInvalidExtendedEscape = true; + } + else if (escapedValue > 0x10FFFF) { + isInvalidExtendedEscape = true; + } + + if (pos >= end) { + isInvalidExtendedEscape = true; + } + else if (charCodeUnchecked(pos) === CharacterCodes.closeBrace) { + pos++; + } + else { + isInvalidExtendedEscape = true; + } + + if (isInvalidExtendedEscape) { + tokenFlags |= TokenFlags.ContainsInvalidEscape; + return text.substring(start, pos); + } + + tokenFlags |= TokenFlags.ExtendedUnicodeEscape; + return utf16EncodeAsString(escapedValue); + } + + function peekUnicodeEscape(): number { + if (pos + 5 < end && charCodeUnchecked(pos + 1) === CharacterCodes.u) { + const start = pos; + pos += 2; + const value = scanExactNumberOfHexDigits(4, /*canHaveSeparators*/ false); + pos = start; + return value; + } + return -1; + } + + function peekExtendedUnicodeEscape(): number { + if (codePointUnchecked(pos + 1) === CharacterCodes.u && codePointUnchecked(pos + 2) === CharacterCodes.openBrace) { + const start = pos; + pos += 3; + const escapedValueString = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ false); + const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; + pos = start; + return escapedValue; + } + return -1; + } + + function scanIdentifierParts(): string { + let result = ""; + let start = pos; + while (pos < end) { + let ch = codePointUnchecked(pos); + if (isIdentifierPart(ch)) { + pos += charSize(ch); + } + else if (ch === CharacterCodes.backslash) { + ch = peekExtendedUnicodeEscape(); + if (ch >= 0 && isIdentifierPart(ch)) { + result += scanExtendedUnicodeEscape(); + start = pos; + continue; + } + ch = peekUnicodeEscape(); + if (!(ch >= 0 && isIdentifierPart(ch))) { + break; + } + tokenFlags |= TokenFlags.UnicodeEscape; + result += text.substring(start, pos); + result += utf16EncodeAsString(ch); + pos += 6; + start = pos; + } + else { + break; + } + } + result += text.substring(start, pos); + return result; + } + + function getIdentifierToken(): SyntaxKind.Identifier | KeywordSyntaxKind { + const len = tokenValue.length; + if (len >= 2 && len <= 12) { + const ch = tokenValue.charCodeAt(0); + if (ch >= CharacterCodes.a && ch <= CharacterCodes.z) { + const keyword = textToKeyword.get(tokenValue); + if (keyword !== undefined) { + return token = keyword; + } + } + } + return token = SyntaxKind.Identifier; + } + + function scanBinaryOrOctalDigits(base: 2 | 8): string { + let value = ""; + let separatorAllowed = false; + let isPreviousTokenSeparator = false; + while (true) { + const ch = charCodeUnchecked(pos); + if (ch === CharacterCodes._) { + tokenFlags |= TokenFlags.ContainsSeparator; + if (separatorAllowed) { + separatorAllowed = false; + isPreviousTokenSeparator = true; + } + pos++; + continue; + } + separatorAllowed = true; + if (!isDigit(ch) || ch - CharacterCodes._0 >= base) { + break; + } + value += text[pos]; + pos++; + isPreviousTokenSeparator = false; + } + return value; + } + + function checkBigIntSuffix(): SyntaxKind { + if (charCodeUnchecked(pos) === CharacterCodes.n) { + tokenValue += "n"; + if (tokenFlags & TokenFlags.BinaryOrOctalSpecifier) { + tokenValue = parsePseudoBigInt(tokenValue) + "n"; + } + pos++; + return SyntaxKind.BigIntLiteral; + } + else { + const numericValue = tokenFlags & TokenFlags.BinarySpecifier + ? parseInt(tokenValue.slice(2), 2) + : tokenFlags & TokenFlags.OctalSpecifier + ? parseInt(tokenValue.slice(2), 8) + : +tokenValue; + tokenValue = "" + numericValue; + return SyntaxKind.NumericLiteral; + } + } + + function scan(): SyntaxKind { + fullStartPos = pos; + tokenFlags = TokenFlags.None; + while (true) { + tokenStart = pos; + if (pos >= end) { + return token = SyntaxKind.EndOfFile; + } + + const ch = codePointUnchecked(pos); + if (pos === 0) { + if (ch === CharacterCodes.hash && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.Unknown; + } + } + } + + switch (ch) { + case CharacterCodes.lineFeed: + case CharacterCodes.carriageReturn: + tokenFlags |= TokenFlags.PrecedingLineBreak; + if (skipTrivia) { + pos++; + continue; + } + else { + if (ch === CharacterCodes.carriageReturn && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.lineFeed) { + pos += 2; + } + else { + pos++; + } + return token = SyntaxKind.NewLineTrivia; + } + case CharacterCodes.tab: + case CharacterCodes.verticalTab: + case CharacterCodes.formFeed: + case CharacterCodes.space: + case CharacterCodes.nonBreakingSpace: + case CharacterCodes.ogham: + case CharacterCodes.enQuad: + case CharacterCodes.emQuad: + case CharacterCodes.enSpace: + case CharacterCodes.emSpace: + case CharacterCodes.threePerEmSpace: + case CharacterCodes.fourPerEmSpace: + case CharacterCodes.sixPerEmSpace: + case CharacterCodes.figureSpace: + case CharacterCodes.punctuationSpace: + case CharacterCodes.thinSpace: + case CharacterCodes.hairSpace: + case CharacterCodes.zeroWidthSpace: + case CharacterCodes.narrowNoBreakSpace: + case CharacterCodes.mathematicalSpace: + case CharacterCodes.ideographicSpace: + case CharacterCodes.byteOrderMark: + if (skipTrivia) { + pos++; + continue; + } + else { + while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { + pos++; + } + return token = SyntaxKind.WhitespaceTrivia; + } + case CharacterCodes.exclamation: + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.ExclamationEqualsEqualsToken; + } + return pos += 2, token = SyntaxKind.ExclamationEqualsToken; + } + pos++; + return token = SyntaxKind.ExclamationToken; + case CharacterCodes.doubleQuote: + case CharacterCodes.singleQuote: + tokenValue = scanString(); + return token = SyntaxKind.StringLiteral; + case CharacterCodes.backtick: + return token = scanTemplateAndSetTokenValue(/*shouldEmitInvalidEscapeError*/ false); + case CharacterCodes.percent: + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.PercentEqualsToken; + } + pos++; + return token = SyntaxKind.PercentToken; + case CharacterCodes.ampersand: + if (charCodeUnchecked(pos + 1) === CharacterCodes.ampersand) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.AmpersandAmpersandEqualsToken; + } + return pos += 2, token = SyntaxKind.AmpersandAmpersandToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.AmpersandEqualsToken; + } + pos++; + return token = SyntaxKind.AmpersandToken; + case CharacterCodes.openParen: + pos++; + return token = SyntaxKind.OpenParenToken; + case CharacterCodes.closeParen: + pos++; + return token = SyntaxKind.CloseParenToken; + case CharacterCodes.asterisk: + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.AsteriskEqualsToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.asterisk) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.AsteriskAsteriskEqualsToken; + } + return pos += 2, token = SyntaxKind.AsteriskAsteriskToken; + } + pos++; + if ( + skipJsDocLeadingAsterisks && + (tokenFlags & TokenFlags.PrecedingJSDocLeadingAsterisks) === 0 && + (tokenFlags & TokenFlags.PrecedingLineBreak) + ) { + tokenFlags |= TokenFlags.PrecedingJSDocLeadingAsterisks; + continue; + } + return token = SyntaxKind.AsteriskToken; + case CharacterCodes.plus: + if (charCodeUnchecked(pos + 1) === CharacterCodes.plus) { + return pos += 2, token = SyntaxKind.PlusPlusToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.PlusEqualsToken; + } + pos++; + return token = SyntaxKind.PlusToken; + case CharacterCodes.comma: + pos++; + return token = SyntaxKind.CommaToken; + case CharacterCodes.minus: + if (charCodeUnchecked(pos + 1) === CharacterCodes.minus) { + return pos += 2, token = SyntaxKind.MinusMinusToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.MinusEqualsToken; + } + pos++; + return token = SyntaxKind.MinusToken; + case CharacterCodes.dot: + if (isDigit(charCodeUnchecked(pos + 1))) { + scanNumber(); + return token = SyntaxKind.NumericLiteral; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.dot && charCodeUnchecked(pos + 2) === CharacterCodes.dot) { + return pos += 3, token = SyntaxKind.DotDotDotToken; + } + pos++; + return token = SyntaxKind.DotToken; + case CharacterCodes.slash: + // Single-line comment + if (charCodeUnchecked(pos + 1) === CharacterCodes.slash) { + pos += 2; + + while (pos < end) { + if (isLineBreak(charCodeUnchecked(pos))) { + break; + } + pos++; + } + + commentDirectives = appendIfCommentDirective( + commentDirectives, + text.slice(tokenStart, pos), + commentDirectiveRegExSingleLine, + tokenStart, + ); + + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.SingleLineCommentTrivia; + } + } + // Multi-line comment + if (charCodeUnchecked(pos + 1) === CharacterCodes.asterisk) { + pos += 2; + const isJSDoc = charCodeUnchecked(pos) === CharacterCodes.asterisk && charCodeUnchecked(pos + 1) !== CharacterCodes.slash; + + let commentClosed = false; + let lastLineStart = tokenStart; + while (pos < end) { + const ch = charCodeUnchecked(pos); + + if (ch === CharacterCodes.asterisk && charCodeUnchecked(pos + 1) === CharacterCodes.slash) { + pos += 2; + commentClosed = true; + break; + } + + pos++; + + if (isLineBreak(ch)) { + lastLineStart = pos; + tokenFlags |= TokenFlags.PrecedingLineBreak; + } + } + + if (isJSDoc) { + tokenFlags |= TokenFlags.PrecedingJSDocComment; + tokenFlags = scanJSDocCommentForTags(text.slice(tokenStart, pos), tokenFlags); + } + + commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart); + + if (skipTrivia) { + continue; + } + else { + if (!commentClosed) { + tokenFlags |= TokenFlags.Unterminated; + } + return token = SyntaxKind.MultiLineCommentTrivia; + } + } + + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.SlashEqualsToken; + } + + pos++; + return token = SyntaxKind.SlashToken; + + case CharacterCodes._0: + if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.X || charCodeUnchecked(pos + 1) === CharacterCodes.x)) { + pos += 2; + tokenValue = scanMinimumNumberOfHexDigits(1, /*canHaveSeparators*/ true); + if (!tokenValue) { + tokenValue = "0"; + } + tokenValue = "0x" + tokenValue; + tokenFlags |= TokenFlags.HexSpecifier; + return token = checkBigIntSuffix(); + } + else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.B || charCodeUnchecked(pos + 1) === CharacterCodes.b)) { + pos += 2; + tokenValue = scanBinaryOrOctalDigits(2); + if (!tokenValue) { + tokenValue = "0"; + } + tokenValue = "0b" + tokenValue; + tokenFlags |= TokenFlags.BinarySpecifier; + return token = checkBigIntSuffix(); + } + else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === CharacterCodes.O || charCodeUnchecked(pos + 1) === CharacterCodes.o)) { + pos += 2; + tokenValue = scanBinaryOrOctalDigits(8); + if (!tokenValue) { + tokenValue = "0"; + } + tokenValue = "0o" + tokenValue; + tokenFlags |= TokenFlags.OctalSpecifier; + return token = checkBigIntSuffix(); + } + // falls through + case CharacterCodes._1: + case CharacterCodes._2: + case CharacterCodes._3: + case CharacterCodes._4: + case CharacterCodes._5: + case CharacterCodes._6: + case CharacterCodes._7: + case CharacterCodes._8: + case CharacterCodes._9: + return token = scanNumber(); + case CharacterCodes.colon: + pos++; + return token = SyntaxKind.ColonToken; + case CharacterCodes.semicolon: + pos++; + return token = SyntaxKind.SemicolonToken; + case CharacterCodes.lessThan: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.ConflictMarkerTrivia; + } + } + + if (charCodeUnchecked(pos + 1) === CharacterCodes.lessThan) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.LessThanLessThanEqualsToken; + } + return pos += 2, token = SyntaxKind.LessThanLessThanToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.LessThanEqualsToken; + } + if ( + languageVariant === LanguageVariant.JSX && + charCodeUnchecked(pos + 1) === CharacterCodes.slash && + charCodeUnchecked(pos + 2) !== CharacterCodes.asterisk + ) { + return pos += 2, token = SyntaxKind.LessThanSlashToken; + } + pos++; + return token = SyntaxKind.LessThanToken; + case CharacterCodes.equals: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.ConflictMarkerTrivia; + } + } + + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.EqualsEqualsEqualsToken; + } + return pos += 2, token = SyntaxKind.EqualsEqualsToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.greaterThan) { + return pos += 2, token = SyntaxKind.EqualsGreaterThanToken; + } + pos++; + return token = SyntaxKind.EqualsToken; + case CharacterCodes.greaterThan: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.ConflictMarkerTrivia; + } + } + + pos++; + return token = SyntaxKind.GreaterThanToken; + case CharacterCodes.question: + if (charCodeUnchecked(pos + 1) === CharacterCodes.dot && !isDigit(charCodeUnchecked(pos + 2))) { + return pos += 2, token = SyntaxKind.QuestionDotToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.question) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.QuestionQuestionEqualsToken; + } + return pos += 2, token = SyntaxKind.QuestionQuestionToken; + } + pos++; + return token = SyntaxKind.QuestionToken; + case CharacterCodes.openBracket: + pos++; + return token = SyntaxKind.OpenBracketToken; + case CharacterCodes.closeBracket: + pos++; + return token = SyntaxKind.CloseBracketToken; + case CharacterCodes.caret: + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.CaretEqualsToken; + } + pos++; + return token = SyntaxKind.CaretToken; + case CharacterCodes.openBrace: + pos++; + return token = SyntaxKind.OpenBraceToken; + case CharacterCodes.bar: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.ConflictMarkerTrivia; + } + } + + if (charCodeUnchecked(pos + 1) === CharacterCodes.bar) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.BarBarEqualsToken; + } + return pos += 2, token = SyntaxKind.BarBarToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.BarEqualsToken; + } + pos++; + return token = SyntaxKind.BarToken; + case CharacterCodes.closeBrace: + pos++; + return token = SyntaxKind.CloseBraceToken; + case CharacterCodes.tilde: + pos++; + return token = SyntaxKind.TildeToken; + case CharacterCodes.at: + pos++; + return token = SyntaxKind.AtToken; + case CharacterCodes.backslash: { + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { + tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts(); + return token = getIdentifierToken(); + } + + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { + pos += 6; + tokenFlags |= TokenFlags.UnicodeEscape; + tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + + pos++; + return token = SyntaxKind.Unknown; + } + case CharacterCodes.hash: + if (pos !== 0 && text[pos + 1] === "!") { + pos++; + return token = SyntaxKind.Unknown; + } + + { + const charAfterHash = codePointUnchecked(pos + 1); + if (charAfterHash === CharacterCodes.backslash) { + pos++; + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { + tokenValue = "#" + scanExtendedUnicodeEscape() + scanIdentifierParts(); + return token = SyntaxKind.PrivateIdentifier; + } + + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { + pos += 6; + tokenFlags |= TokenFlags.UnicodeEscape; + tokenValue = "#" + String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = SyntaxKind.PrivateIdentifier; + } + pos--; + } + + if (isIdentifierStart(charAfterHash)) { + pos++; + scanIdentifier(charAfterHash); + } + else { + tokenValue = "#"; + } + return token = SyntaxKind.PrivateIdentifier; + } + case CharacterCodes.replacementCharacter: + pos = end; + return token = SyntaxKind.NonTextFileMarkerTrivia; + default: { + const identifierKind = scanIdentifier(ch); + if (identifierKind) { + return token = identifierKind; + } + else if (isWhiteSpaceSingleLine(ch)) { + pos += charSize(ch); + continue; + } + else if (isLineBreak(ch)) { + tokenFlags |= TokenFlags.PrecedingLineBreak; + pos += charSize(ch); + continue; + } + const size = charSize(ch); + pos += size; + return token = SyntaxKind.Unknown; + } + } + } + } + + function reScanInvalidIdentifier(): SyntaxKind { + pos = tokenStart = fullStartPos; + tokenFlags = 0; + const ch = codePointUnchecked(pos); + const identifierKind = scanIdentifier(ch); + if (identifierKind) { + return token = identifierKind; + } + pos += charSize(ch); + return token; // Still `SyntaxKind.Unknown` + } + + function scanIdentifier(startCharacter: number) { + let ch = startCharacter; + if (isIdentifierStart(ch)) { + pos += charSize(ch); + while (pos < end && isIdentifierPart(ch = codePointUnchecked(pos))) pos += charSize(ch); + tokenValue = text.substring(tokenStart, pos); + if (ch === CharacterCodes.backslash) { + tokenValue += scanIdentifierParts(); + } + return getIdentifierToken(); + } + } + + function reScanGreaterToken(): SyntaxKind { + if (token === SyntaxKind.GreaterThanToken) { + if (charCodeUnchecked(pos) === CharacterCodes.greaterThan) { + if (charCodeUnchecked(pos + 1) === CharacterCodes.greaterThan) { + if (charCodeUnchecked(pos + 2) === CharacterCodes.equals) { + return pos += 3, token = SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken; + } + return pos += 2, token = SyntaxKind.GreaterThanGreaterThanGreaterThanToken; + } + if (charCodeUnchecked(pos + 1) === CharacterCodes.equals) { + return pos += 2, token = SyntaxKind.GreaterThanGreaterThanEqualsToken; + } + pos++; + return token = SyntaxKind.GreaterThanGreaterThanToken; + } + if (charCodeUnchecked(pos) === CharacterCodes.equals) { + pos++; + return token = SyntaxKind.GreaterThanEqualsToken; + } + } + return token; + } + + function reScanAsteriskEqualsToken(): SyntaxKind { + pos = tokenStart + 1; + return token = SyntaxKind.EqualsToken; + } + + function reScanSlashToken(): SyntaxKind { + if (token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) { + const startOfRegExpBody = tokenStart + 1; + pos = startOfRegExpBody; + let inEscape = false; + let inCharacterClass = false; + while (true) { + const ch = charCodeChecked(pos); + if (ch === CharacterCodes.EOF || isLineBreak(ch)) { + tokenFlags |= TokenFlags.Unterminated; + break; + } + + if (inEscape) { + inEscape = false; + } + else if (ch === CharacterCodes.slash && !inCharacterClass) { + break; + } + else if (ch === CharacterCodes.openBracket) { + inCharacterClass = true; + } + else if (ch === CharacterCodes.backslash) { + inEscape = true; + } + else if (ch === CharacterCodes.closeBracket) { + inCharacterClass = false; + } + pos++; + } + + if (tokenFlags & TokenFlags.Unterminated) { + // Find best recovery position + pos = startOfRegExpBody; + inEscape = false; + let characterClassDepth = 0; + let inDecimalQuantifier = false; + let groupDepth = 0; + while (pos < end && !isLineBreak(charCodeUnchecked(pos))) { + const ch = charCodeUnchecked(pos); + if (inEscape) { + inEscape = false; + } + else if (ch === CharacterCodes.backslash) { + inEscape = true; + } + else if (ch === CharacterCodes.openBracket) { + characterClassDepth++; + } + else if (ch === CharacterCodes.closeBracket && characterClassDepth) { + characterClassDepth--; + } + else if (!characterClassDepth) { + if (ch === CharacterCodes.openBrace) { + inDecimalQuantifier = true; + } + else if (ch === CharacterCodes.closeBrace && inDecimalQuantifier) { + inDecimalQuantifier = false; + } + else if (!inDecimalQuantifier) { + if (ch === CharacterCodes.openParen) { + groupDepth++; + } + else if (ch === CharacterCodes.closeParen && groupDepth) { + groupDepth--; + } + else if (ch === CharacterCodes.closeParen || ch === CharacterCodes.closeBracket || ch === CharacterCodes.closeBrace) { + break; + } + } + } + pos++; + } + while (isWhiteSpaceLike(charCodeChecked(pos - 1)) || charCodeChecked(pos - 1) === CharacterCodes.semicolon) pos--; + } + else { + pos++; + let regExpFlags: number = RegularExpressionFlags.None; + while (true) { + const ch = codePointChecked(pos); + if (ch === CharacterCodes.EOF || !isIdentifierPart(ch)) { + break; + } + const size = charSize(ch); + const flag = characterCodeToRegularExpressionFlag(ch); + if (flag !== undefined) { + regExpFlags |= flag; + } + pos += size; + } + } + tokenValue = text.substring(tokenStart, pos); + token = SyntaxKind.RegularExpressionLiteral; + } + return token; + } + + function appendIfCommentDirective( + commentDirectives: CommentDirective[] | undefined, + text: string, + commentDirectiveRegEx: RegExp, + lineStart: number, + ) { + const type = getDirectiveFromComment(text.trimStart(), commentDirectiveRegEx); + if (type === undefined) { + return commentDirectives; + } + + if (!commentDirectives) { + commentDirectives = []; + } + commentDirectives.push({ + range: { pos: lineStart, end: pos }, + type, + }); + return commentDirectives; + } + + function getDirectiveFromComment(text: string, commentDirectiveRegEx: RegExp) { + const match = commentDirectiveRegEx.exec(text); + if (!match) { + return undefined; + } + + switch (match[1]) { + case "ts-expect-error": + return CommentDirectiveType.ExpectError; + case "ts-ignore": + return CommentDirectiveType.Ignore; + } + + return undefined; + } + + function reScanTemplateToken(isTaggedTemplate: boolean): SyntaxKind { + pos = tokenStart; + return token = scanTemplateAndSetTokenValue(!isTaggedTemplate); + } + + function reScanTemplateHeadOrNoSubstitutionTemplate(): SyntaxKind { + pos = tokenStart; + return token = scanTemplateAndSetTokenValue(/*shouldEmitInvalidEscapeError*/ true); + } + + function reScanJsxToken(allowMultilineJsxText = true): JsxTokenSyntaxKind { + pos = tokenStart = fullStartPos; + return token = scanJsxToken(allowMultilineJsxText); + } + + function reScanLessThanToken(): SyntaxKind { + if (token === SyntaxKind.LessThanLessThanToken) { + pos = tokenStart + 1; + return token = SyntaxKind.LessThanToken; + } + return token; + } + + function reScanHashToken(): SyntaxKind { + if (token === SyntaxKind.PrivateIdentifier) { + pos = tokenStart + 1; + return token = SyntaxKind.HashToken; + } + return token; + } + + function reScanQuestionToken(): SyntaxKind { + pos = tokenStart + 1; + return token = SyntaxKind.QuestionToken; + } + + function scanJsxToken(allowMultilineJsxText = true): JsxTokenSyntaxKind { + fullStartPos = tokenStart = pos; + + if (pos >= end) { + return token = SyntaxKind.EndOfFile; + } + + let char = charCodeUnchecked(pos); + if (char === CharacterCodes.lessThan) { + if (charCodeUnchecked(pos + 1) === CharacterCodes.slash) { + pos += 2; + return token = SyntaxKind.LessThanSlashToken; + } + pos++; + return token = SyntaxKind.LessThanToken; + } + + if (char === CharacterCodes.openBrace) { + pos++; + return token = SyntaxKind.OpenBraceToken; + } + + let firstNonWhitespace = 0; + + while (pos < end) { + char = charCodeUnchecked(pos); + if (char === CharacterCodes.openBrace) { + break; + } + if (char === CharacterCodes.lessThan) { + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + return token = SyntaxKind.ConflictMarkerTrivia; + } + break; + } + + if (isLineBreak(char) && firstNonWhitespace === 0) { + firstNonWhitespace = -1; + } + else if (!allowMultilineJsxText && isLineBreak(char) && firstNonWhitespace > 0) { + break; + } + else if (!isWhiteSpaceLike(char)) { + firstNonWhitespace = pos; + } + + pos++; + } + + tokenValue = text.substring(fullStartPos, pos); + + return firstNonWhitespace === -1 ? SyntaxKind.JsxTextAllWhiteSpaces : SyntaxKind.JsxText; + } + + function scanJsxIdentifier(): SyntaxKind { + if (tokenIsIdentifierOrKeyword(token)) { + while (pos < end) { + const ch = charCodeUnchecked(pos); + if (ch === CharacterCodes.minus) { + tokenValue += "-"; + pos++; + continue; + } + const oldPos = pos; + tokenValue += scanIdentifierParts(); + if (pos === oldPos) { + break; + } + } + return getIdentifierToken(); + } + return token; + } + + function scanJsxAttributeValue(): SyntaxKind { + fullStartPos = pos; + + switch (charCodeUnchecked(pos)) { + case CharacterCodes.doubleQuote: + case CharacterCodes.singleQuote: + tokenValue = scanString(/*jsxAttributeString*/ true); + return token = SyntaxKind.StringLiteral; + default: + return scan(); + } + } + + function reScanJsxAttributeValue(): SyntaxKind { + pos = tokenStart = fullStartPos; + return scanJsxAttributeValue(); + } + + function scanJSDocCommentTextToken(inBackticks: boolean): JSDocTokenKind | SyntaxKind.JSDocCommentTextToken { + fullStartPos = tokenStart = pos; + tokenFlags = TokenFlags.None; + if (pos >= end) { + return token = SyntaxKind.EndOfFile; + } + for (let ch = charCodeUnchecked(pos); pos < end && (!isLineBreak(ch) && ch !== CharacterCodes.backtick); ch = codePointUnchecked(++pos)) { + if (!inBackticks) { + if (ch === CharacterCodes.openBrace) { + break; + } + else if ( + ch === CharacterCodes.at + && pos - 1 >= 0 && isWhiteSpaceSingleLine(charCodeUnchecked(pos - 1)) + && pos + 1 < end && isIdentifierStart(charCodeUnchecked(pos + 1)) + ) { + break; + } + } + } + if (pos === tokenStart) { + return scanJsDocToken(); + } + tokenValue = text.substring(tokenStart, pos); + return token = SyntaxKind.JSDocCommentTextToken; + } + + function scanJsDocToken(): JSDocTokenKind { + fullStartPos = tokenStart = pos; + tokenFlags = TokenFlags.None; + if (pos >= end) { + return token = SyntaxKind.EndOfFile; + } + + const ch = codePointUnchecked(pos); + pos += charSize(ch); + switch (ch) { + case CharacterCodes.tab: + case CharacterCodes.verticalTab: + case CharacterCodes.formFeed: + case CharacterCodes.space: + while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { + pos++; + } + return token = SyntaxKind.WhitespaceTrivia; + case CharacterCodes.at: + return token = SyntaxKind.AtToken; + case CharacterCodes.carriageReturn: + if (charCodeUnchecked(pos) === CharacterCodes.lineFeed) { + pos++; + } + // falls through + case CharacterCodes.lineFeed: + tokenFlags |= TokenFlags.PrecedingLineBreak; + return token = SyntaxKind.NewLineTrivia; + case CharacterCodes.asterisk: + return token = SyntaxKind.AsteriskToken; + case CharacterCodes.openBrace: + return token = SyntaxKind.OpenBraceToken; + case CharacterCodes.closeBrace: + return token = SyntaxKind.CloseBraceToken; + case CharacterCodes.openBracket: + return token = SyntaxKind.OpenBracketToken; + case CharacterCodes.closeBracket: + return token = SyntaxKind.CloseBracketToken; + case CharacterCodes.openParen: + return token = SyntaxKind.OpenParenToken; + case CharacterCodes.closeParen: + return token = SyntaxKind.CloseParenToken; + case CharacterCodes.lessThan: + return token = SyntaxKind.LessThanToken; + case CharacterCodes.greaterThan: + return token = SyntaxKind.GreaterThanToken; + case CharacterCodes.equals: + return token = SyntaxKind.EqualsToken; + case CharacterCodes.comma: + return token = SyntaxKind.CommaToken; + case CharacterCodes.dot: + return token = SyntaxKind.DotToken; + case CharacterCodes.backtick: + return token = SyntaxKind.BacktickToken; + case CharacterCodes.hash: + return token = SyntaxKind.HashToken; + case CharacterCodes.backslash: + pos--; + { + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar)) { + tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts(); + return token = getIdentifierToken(); + } + + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar)) { + pos += 6; + tokenFlags |= TokenFlags.UnicodeEscape; + tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + } + pos++; + return token = SyntaxKind.Unknown; + } + + if (isIdentifierStart(ch)) { + let char = ch; + while (pos < end && (isIdentifierPart(char = codePointUnchecked(pos)) || char === CharacterCodes.minus)) pos += charSize(char); + tokenValue = text.substring(tokenStart, pos); + if (char === CharacterCodes.backslash) { + tokenValue += scanIdentifierParts(); + } + return token = getIdentifierToken(); + } + else { + return token = SyntaxKind.Unknown; + } + } + + function speculationHelper(callback: () => T, isLookahead: boolean): T { + const savePos = pos; + const saveStartPos = fullStartPos; + const saveTokenPos = tokenStart; + const saveToken = token; + const saveTokenValue = tokenValue; + const saveTokenFlags = tokenFlags; + const result = callback(); + + if (!result || isLookahead) { + pos = savePos; + fullStartPos = saveStartPos; + tokenStart = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + tokenFlags = saveTokenFlags; + } + return result; + } + + function scanRange(start: number, length: number, callback: () => T): T { + const saveEnd = end; + const savePos = pos; + const saveStartPos = fullStartPos; + const saveTokenPos = tokenStart; + const saveToken = token; + const saveTokenValue = tokenValue; + const saveTokenFlags = tokenFlags; + const saveErrorExpectations = commentDirectives; + + setText(text, start, length); + const result = callback(); + + end = saveEnd; + pos = savePos; + fullStartPos = saveStartPos; + tokenStart = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + tokenFlags = saveTokenFlags; + commentDirectives = saveErrorExpectations; + + return result; + } + + function lookAhead(callback: () => T): T { + return speculationHelper(callback, /*isLookahead*/ true); + } + + function tryScan(callback: () => T): T { + return speculationHelper(callback, /*isLookahead*/ false); + } + + function getText(): string { + return text; + } + + function clearCommentDirectives() { + commentDirectives = undefined; + } + + function setText(newText: string | undefined, start: number | undefined, length: number | undefined) { + text = newText || ""; + end = length === undefined ? text.length : start! + length; + resetTokenState(start || 0); + } + + function setLanguageVariant(variant: LanguageVariant) { + languageVariant = variant; + } + + function resetTokenState(position: number) { + pos = position; + fullStartPos = position; + tokenStart = position; + token = SyntaxKind.Unknown; + tokenValue = undefined!; + tokenFlags = TokenFlags.None; + } + + function setSkipJsDocLeadingAsterisks(skip: boolean) { + skipJsDocLeadingAsterisks += skip ? 1 : -1; + } +} diff --git a/packages/typescript/src/ast/spanMap.ts b/packages/typescript/src/ast/spanMap.ts index dee0610ab2bee..09648de559e17 100644 --- a/packages/typescript/src/ast/spanMap.ts +++ b/packages/typescript/src/ast/spanMap.ts @@ -1,483 +1,483 @@ -import { SpanMapFeature } from "#enums/spanMapFeature"; -import { SpanMapFidelity } from "#enums/spanMapFidelity"; -import { SpanMapKind } from "#enums/spanMapKind"; -import type { ReadonlyTextRange } from "./ast.ts"; - -export { SpanMapFeature, SpanMapFidelity, SpanMapKind }; - -// Keep this in sync with spanmap.go - -/** Maps one half-open virtual range to one half-open original range. */ -export interface SpanMapSegment { - readonly virtualStart: number; - readonly virtualEnd: number; - readonly originalStart: number; - readonly originalEnd: number; - readonly kind: SpanMapKind; - readonly features?: SpanMapFeature; -} - -/** Internal segment representation after omitted features have been normalized to `All`. */ -type NormalizedSpanMapSegment = SpanMapSegment & { readonly features: SpanMapFeature; }; - -/** Lazily built interval index for original-to-virtual lookups. */ -interface OriginalIndex { - readonly segments: readonly NormalizedSpanMapSegment[]; - readonly leafCount: number; - readonly maxEnds: readonly number[]; -} - -/** One virtual projection of an original position and its mapping fidelity. */ -export interface MappedPosition { - readonly position: number; - readonly fidelity: SpanMapFidelity; -} - -/** One virtual projection of an original range and its mapping fidelity. */ -export interface MappedRange { - readonly range: ReadonlyTextRange; - readonly fidelity: SpanMapFidelity; -} - -/** Provides bidirectional span-aware mapping between virtual and original text. */ -export class SpanMap { - readonly segments: readonly NormalizedSpanMapSegment[]; - private originalIndex: OriginalIndex | undefined; - - /** Copies and sorts segments by virtual start, normalizing omitted features to `All`. */ - constructor(segments: readonly SpanMapSegment[]) { - this.segments = segments - .map(segment => ({ ...segment, features: segment.features ?? SpanMapFeature.All })) - .sort((left, right) => left.virtualStart - right.virtualStart); - } - - /** Reports whether a mapping is a precise, edit-safe projection through one verbatim segment. */ - static isExact(fidelity: SpanMapFidelity): boolean { - return fidelity === SpanMapFidelity.Exact; - } - - /** Reports whether a mapping lies in one verbatim or atom segment. */ - static isSingleSegment(fidelity: SpanMapFidelity): boolean { - return fidelity === SpanMapFidelity.Exact || fidelity === SpanMapFidelity.Atom; - } - - /** Reports whether the input had no counterpart in the target text. */ - static isNone(fidelity: SpanMapFidelity): boolean { - return fidelity === SpanMapFidelity.None; - } - - /** - * Maps a virtual range to original text. Gaps map to insertion points with `None` fidelity, - * and ranges crossing segment boundaries map their endpoints with `Approximate` fidelity. - */ - virtualToOriginalSpan(range: ReadonlyTextRange): MappedRange { - return this.mapRange(range, this.segments, false); - } - - /** Maps a visible LS result only when every covered segment participates in `feature`. */ - virtualToOriginalSpanForFeature(range: ReadonlyTextRange, feature: SpanMapFeature): MappedRange { - const mapped = this.virtualToOriginalSpan(range); - return this.virtualRangeSupportsFeature(range, feature) ? mapped : { ...mapped, fidelity: SpanMapFidelity.None }; - } - - /** Maps a virtual position to original text, using `None` fidelity for synthesized gaps. */ - virtualToOriginalPosition(position: number): MappedPosition { - return this.mapPoint(position, this.segments, false); - } - - virtualToOriginalPositionForFeature(position: number, feature: SpanMapFeature): MappedPosition { - const mapped = this.virtualToOriginalPosition(position); - const [index, inside] = segmentIndexAt(this.segments, position, false); - return inside && supportsFeature(this.segments[index], feature) ? mapped : { ...mapped, fidelity: SpanMapFidelity.None }; - } - - /** - * Returns every virtual projection of an original position whose segment participates in `feature`. - * Segment ends are inclusive for point mapping, so adjacent spans may both produce projections. - * Results are ordered by virtual position; uncovered or disabled positions produce no results. - */ - originalToVirtualPositions(position: number, feature: SpanMapFeature): readonly MappedPosition[] { - const groups = segmentGroupsAtOriginalPosition(this.getOriginalIndex(), position); - const results: MappedPosition[] = []; - for (const group of groups) { - for (const segment of group.segments) { - if (!supportsFeature(segment, feature)) continue; - const mapped = segment.kind === SpanMapKind.Verbatim - ? { position: mapVerbatimPosition(segment, position, true), fidelity: SpanMapFidelity.Exact } - : { position: group.atEnd ? segment.virtualEnd : segment.virtualStart, fidelity: SpanMapFidelity.Atom }; - if (!results.some(result => result.position === mapped.position && result.fidelity === mapped.fidelity)) { - results.push(mapped); - } - } - } - return results.sort((left, right) => left.position - right.position); - } - - /** - * Returns every feature-compatible virtual projection of an original range. - * A range contained by one or more segments produces one exact or atom result per matching segment. - * - * A range that starts in one group and ends in another can have several possible virtual ranges. For - * example, suppose two original segments are each copied twice into the virtual text: - * - * ```text - * original: [ A ][ B ] - * [---) range from inside A to inside B - * - * virtual: [ A ][ B ] [ A ][ B ] - * ^ ^ ^ ^ - * start end start end - * 1 3 11 13 - * ``` - * - * The map says that the range may start at 1 or 11 and end at 3 or 13, but it does not say which copy of A - * belongs with which copy of B. We choose the smallest range around each possible location, producing [1,3) - * and [11,13). We do not return [1,13), because it contains both smaller candidates and would include code - * that may be unrelated to the original range. These cross-group results have approximate fidelity. - */ - originalToVirtualSpans(range: ReadonlyTextRange, feature: SpanMapFeature): readonly MappedRange[] { - const start = range.pos; - const end = Math.max(range.end, start); - if (start === end) { - return this.originalToVirtualPositions(start, feature).map(({ position, fidelity }) => ({ - range: { pos: position, end: position }, - fidelity, - })); - } - const lastCharacter = end - 1; - const originalIndex = this.getOriginalIndex(); - const startSegments = segmentsAtOriginalPosition(originalIndex, start); - const endSegments = segmentsAtOriginalPosition(originalIndex, lastCharacter); - if (!startSegments || !endSegments) return []; - const containing = startSegments.filter(segment => end <= segment.originalEnd); - if (containing.length > 0) { - const results = [...originalToVirtualSpansInSegments(containing, start, end, feature)]; - if (results.length > 0) return results.sort((left, right) => left.range.pos - right.range.pos); - } - const starts = [...originalStartProjections(startSegments, start, feature)].sort((left, right) => left - right); - const ends = [...originalEndProjections(endSegments, end, feature)].sort((left, right) => left - right); - if (starts.length === 0 || ends.length === 0) return []; - return starts.flatMap((virtualStart, index) => { - const virtualEnd = ends.find(end => end >= virtualStart); - return virtualEnd === undefined || index + 1 < starts.length && starts[index + 1] <= virtualEnd - ? [] - : [{ range: { pos: virtualStart, end: virtualEnd }, fidelity: SpanMapFidelity.Approximate }]; - }); - } - - /** Maps one range through an ordered segment index in the direction selected by `reverse`. */ - private mapRange(range: ReadonlyTextRange, segments: readonly SpanMapSegment[], reverse: boolean): MappedRange { - const start = range.pos; - const end = Math.max(range.end, start); - if (start === end) { - const { position, fidelity } = this.mapPoint(start, segments, reverse); - return { range: { pos: position, end: position }, fidelity }; - } - const [startIndex, startInside] = segmentIndexAt(segments, start, reverse); - const endProbe = end - 1; - const [endIndex, endInside] = segmentIndexAt(segments, endProbe, reverse); - - if (startIndex === endIndex && startInside === endInside) { - if (startInside) { - const segment = segments[startIndex]; - if (segment.kind === SpanMapKind.Verbatim) { - const mappedStart = mapVerbatimPosition(segment, start, reverse); - const mappedEnd = Math.max(mappedStart, mapVerbatimPosition(segment, end, reverse)); - return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Exact }; - } - return { range: targetRange(segment, reverse), fidelity: SpanMapFidelity.Atom }; - } - const position = insertionPoint(segments, startIndex, reverse); - return { range: { pos: position, end: position }, fidelity: SpanMapFidelity.None }; - } - - const mappedStart = mapBoundary(segments, start, startIndex, startInside, reverse, false); - const mappedEnd = Math.max(mappedStart, mapBoundary(segments, end, endIndex, endInside, reverse, true)); - return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Approximate }; - } - - /** Maps one position through an ordered segment index in the direction selected by `reverse`. */ - private mapPoint(position: number, segments: readonly SpanMapSegment[], reverse: boolean): MappedPosition { - const [index, inside] = segmentIndexAt(segments, position, reverse); - if (!inside) { - return { position: insertionPoint(segments, index, reverse), fidelity: SpanMapFidelity.None }; - } - const segment = segments[index]; - if (segment.kind === SpanMapKind.Verbatim) { - return { position: mapVerbatimPosition(segment, position, reverse), fidelity: SpanMapFidelity.Exact }; - } - return { - position: reverse ? segment.virtualStart : segment.originalStart, - fidelity: SpanMapFidelity.Atom, - }; - } - - /** Returns the lazily built original-text interval index. */ - private getOriginalIndex(): OriginalIndex { - if (this.originalIndex) return this.originalIndex; - const segments = [...this.segments].sort((left, right) => - left.originalStart - right.originalStart - || left.originalEnd - right.originalEnd - || left.virtualStart - right.virtualStart - ); - let leafCount = 1; - while (leafCount < segments.length) leafCount *= 2; - const maxEnds = new Array(2 * leafCount).fill(0); - for (let i = 0; i < segments.length; i++) maxEnds[leafCount + i] = segments[i].originalEnd; - for (let i = leafCount - 1; i > 0; i--) maxEnds[i] = Math.max(maxEnds[2 * i], maxEnds[2 * i + 1]); - return this.originalIndex = { segments, leafCount, maxEnds }; - } - - private virtualRangeSupportsFeature(range: ReadonlyTextRange, feature: SpanMapFeature): boolean { - const start = range.pos; - const end = Math.max(range.end, start); - if (start === end) { - const [index, inside] = segmentIndexAt(this.segments, start, false); - return inside && supportsFeature(this.segments[index], feature); - } - let [index, inside] = segmentIndexAt(this.segments, start, false); - if (!inside) return false; - let coveredThrough = start; - while (index < this.segments.length && coveredThrough < end) { - const segment = this.segments[index]; - if (segment.virtualStart > coveredThrough || segment.virtualEnd <= coveredThrough || !supportsFeature(segment, feature)) return false; - coveredThrough = segment.virtualEnd; - index++; - } - return coveredThrough >= end; - } -} - -/** - * Maps the inclusive start of an original range through every matching segment. Verbatim segments preserve - * the offset within the segment; atoms map to their virtual start. - * - * ```text - * original: [---------) - * ^ start - * - * virtual: [---------) [---------) - * ^ ^ - * result result - * ``` - */ -function originalStartProjections(segments: readonly NormalizedSpanMapSegment[], start: number, feature: SpanMapFeature): readonly number[] { - return segments - .filter(segment => supportsFeature(segment, feature)) - .map(segment => - segment.kind === SpanMapKind.Verbatim - ? mapVerbatimPosition(segment, start, true) - : segment.virtualStart - ); -} - -/** - * Maps the exclusive end of an original range through every matching segment. The caller uses `end - 1` - * to find the segment containing the final character, while this helper maps the `end` boundary itself. - * - * ```text - * original: [---------)[ next segment ) - * ^`-- end - * `--- end - 1 - * - * virtual: [---------) [---------) - * ^ ^ - * result result - * ``` - */ -function originalEndProjections(segments: readonly NormalizedSpanMapSegment[], end: number, feature: SpanMapFeature): readonly number[] { - return segments - .filter(segment => supportsFeature(segment, feature)) - .map(segment => - segment.kind === SpanMapKind.Verbatim - ? mapVerbatimPosition(segment, end, true) - : segment.virtualEnd - ); -} - -/** Maps a range fully contained by each segment. */ -function originalToVirtualSpansInSegments(segments: readonly NormalizedSpanMapSegment[], start: number, end: number, feature: SpanMapFeature): readonly MappedRange[] { - return segments - .filter(segment => supportsFeature(segment, feature)) - .map(segment => { - if (segment.kind === SpanMapKind.Verbatim) { - const mappedStart = mapVerbatimPosition(segment, start, true); - const mappedEnd = Math.max(mappedStart, mapVerbatimPosition(segment, end, true)); - return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Exact }; - } - return { range: { pos: segment.virtualStart, end: segment.virtualEnd }, fidelity: SpanMapFidelity.Atom }; - }); -} - -/** Reports whether two segments belong to the same duplicate group. */ -function sameOriginalRange(left: SpanMapSegment, right: SpanMapSegment): boolean { - return left.originalStart === right.originalStart && left.originalEnd === right.originalEnd; -} - -/** - * Returns every mapping segment containing the original-text `position`. - * Segment ends are exclusive; starts, including zero-length segment starts, are included. - */ -function segmentsAtOriginalPosition(index: OriginalIndex, position: number): readonly NormalizedSpanMapSegment[] | undefined { - // Query intervals that contain position strictly before their exclusive end. Segments starting exactly at - // position are appended separately so zero-length segments are included while maxEnd <= position is pruned. - const start = firstOriginalSegmentAtOrAfter(index.segments, position); - const results = segmentsEndingAtOrAfter(index, start, position, false); - const end = firstOriginalSegmentAfter(index.segments, position); - results.push(...index.segments.slice(start, end)); - return results.length > 0 ? results : undefined; -} - -/** Returns segments among `[0, limit)` whose original end reaches `position`. */ -function segmentsEndingAtOrAfter(index: OriginalIndex, limit: number, position: number, includeEnd: boolean): NormalizedSpanMapSegment[] { - const results: NormalizedSpanMapSegment[] = []; - collectSegmentsEndingAtOrAfter(index, 1, 0, index.leafCount, limit, position, includeEnd, results); - return results; -} - -/** Walks the flat max-end tree left-to-right, preserving original-text order. */ -function collectSegmentsEndingAtOrAfter( - index: OriginalIndex, - node: number, - start: number, - end: number, - limit: number, - position: number, - includeEnd: boolean, - results: NormalizedSpanMapSegment[], -): void { - const maxEnd = index.maxEnds[node]; - if (start >= limit || maxEnd < position || !includeEnd && maxEnd === position) return; - if (end - start === 1) { - results.push(index.segments[start]); - return; - } - const middle = start + ((end - start) >>> 1); - collectSegmentsEndingAtOrAfter(index, 2 * node, start, middle, limit, position, includeEnd, results); - collectSegmentsEndingAtOrAfter(index, 2 * node + 1, middle, end, limit, position, includeEnd, results); -} - -/** Returns the first original-ordered segment whose start is greater than or equal to `position`. */ -function firstOriginalSegmentAtOrAfter(segments: readonly NormalizedSpanMapSegment[], position: number): number { - let low = 0; - let high = segments.length; - while (low < high) { - const middle = (low + high) >>> 1; - if (segments[middle].originalStart < position) low = middle + 1; - else high = middle; - } - return low; -} - -/** Returns the first original-ordered segment whose start is greater than `position`. */ -function firstOriginalSegmentAfter(segments: readonly NormalizedSpanMapSegment[], position: number): number { - let low = 0; - let high = segments.length; - while (low < high) { - const middle = (low + high) >>> 1; - if (segments[middle].originalStart <= position) low = middle + 1; - else high = middle; - } - return low; -} - -interface SegmentGroupAtOriginalPosition { - readonly segments: readonly NormalizedSpanMapSegment[]; - readonly atEnd: boolean; -} - -/** - * Returns every group of equal-range mapping segments containing or touching the original-text `position`. - * Segment ends are included for point mapping: - * - * ```text - * original: [--- A ---)[--- B ---) - * ^ position - * - * virtual: [ A1 ) [ A2 ) [ B1 ) [ B2 ) - * left group right group - * atEnd: true atEnd: false - * ``` - */ -function segmentGroupsAtOriginalPosition(index: OriginalIndex, position: number): readonly SegmentGroupAtOriginalPosition[] { - const limit = firstOriginalSegmentAfter(index.segments, position); - const segments = segmentsEndingAtOrAfter(index, limit, position, true); - const groups: SegmentGroupAtOriginalPosition[] = []; - for (let start = 0; start < segments.length;) { - let end = start + 1; - while (end < segments.length && sameOriginalRange(segments[start], segments[end])) end++; - const segment = segments[start]; - if (position <= segment.originalEnd) { - groups.push({ - segments: segments.slice(start, end), - atEnd: position === segment.originalEnd && position !== segment.originalStart, - }); - } - start = end; - } - return groups; -} - -/** Reports whether a segment participates in an original-to-virtual query for `features`. */ -function supportsFeature(segment: NormalizedSpanMapSegment, feature: SpanMapFeature): boolean { - return (segment.features & feature) !== 0; -} - -/** - * Finds the segment containing `position`, or the preceding segment when `position` is in a gap. - * The boolean distinguishes containment from a gap; `reverse` selects original rather than virtual coordinates. - */ -function segmentIndexAt(segments: readonly SpanMapSegment[], position: number, reverse: boolean): [number, boolean] { - let low = 0; - let high = segments.length; - while (low < high) { - const middle = (low + high) >>> 1; - const start = reverse ? segments[middle].originalStart : segments[middle].virtualStart; - if (start < position) low = middle + 1; - else high = middle; - } - if (low < segments.length && (reverse ? segments[low].originalStart : segments[low].virtualStart) === position) { - return [low, true]; - } - const previous = low - 1; - if (previous >= 0) { - const end = reverse ? segments[previous].originalEnd : segments[previous].virtualEnd; - if (position < end || previous === segments.length - 1 && position === end) return [previous, true]; - } - return [previous, false]; -} - -/** Returns the target insertion point for a gap following `previous`, or zero before the first segment. */ -function insertionPoint(segments: readonly SpanMapSegment[], previous: number, reverse: boolean): number { - if (previous < 0) return 0; - return reverse ? segments[previous].virtualEnd : segments[previous].originalEnd; -} - -/** Linearly maps and clamps a position within a length-preserving verbatim segment. */ -function mapVerbatimPosition(segment: SpanMapSegment, position: number, reverse: boolean): number { - const sourceStart = reverse ? segment.originalStart : segment.virtualStart; - const targetStart = reverse ? segment.virtualStart : segment.originalStart; - const targetEnd = reverse ? segment.virtualEnd : segment.originalEnd; - return clamp(targetStart + position - sourceStart, targetStart, targetEnd); -} - -/** Maps a range boundary, using insertion points for gaps and the selected endpoint for atoms. */ -function mapBoundary(segments: readonly SpanMapSegment[], position: number, index: number, inside: boolean, reverse: boolean, high: boolean): number { - if (!inside) return insertionPoint(segments, index, reverse); - const segment = segments[index]; - if (segment.kind === SpanMapKind.Verbatim) return mapVerbatimPosition(segment, position, reverse); - if (reverse) return high ? segment.virtualEnd : segment.virtualStart; - return high ? segment.originalEnd : segment.originalStart; -} - -/** Returns the complete target range of a segment in the selected direction. */ -function targetRange(segment: SpanMapSegment, reverse: boolean): ReadonlyTextRange { - return reverse - ? { pos: segment.virtualStart, end: segment.virtualEnd } - : { pos: segment.originalStart, end: segment.originalEnd }; -} - -/** Confines `value` to the inclusive interval [`low`, `high`]. */ -function clamp(value: number, low: number, high: number): number { - return Math.max(low, Math.min(value, high)); -} +import { SpanMapFeature } from "#enums/spanMapFeature"; +import { SpanMapFidelity } from "#enums/spanMapFidelity"; +import { SpanMapKind } from "#enums/spanMapKind"; +import type { ReadonlyTextRange } from "./ast.ts"; + +export { SpanMapFeature, SpanMapFidelity, SpanMapKind }; + +// Keep this in sync with spanmap.go + +/** Maps one half-open virtual range to one half-open original range. */ +export interface SpanMapSegment { + readonly virtualStart: number; + readonly virtualEnd: number; + readonly originalStart: number; + readonly originalEnd: number; + readonly kind: SpanMapKind; + readonly features?: SpanMapFeature; +} + +/** Internal segment representation after omitted features have been normalized to `All`. */ +type NormalizedSpanMapSegment = SpanMapSegment & { readonly features: SpanMapFeature; }; + +/** Lazily built interval index for original-to-virtual lookups. */ +interface OriginalIndex { + readonly segments: readonly NormalizedSpanMapSegment[]; + readonly leafCount: number; + readonly maxEnds: readonly number[]; +} + +/** One virtual projection of an original position and its mapping fidelity. */ +export interface MappedPosition { + readonly position: number; + readonly fidelity: SpanMapFidelity; +} + +/** One virtual projection of an original range and its mapping fidelity. */ +export interface MappedRange { + readonly range: ReadonlyTextRange; + readonly fidelity: SpanMapFidelity; +} + +/** Provides bidirectional span-aware mapping between virtual and original text. */ +export class SpanMap { + readonly segments: readonly NormalizedSpanMapSegment[]; + private originalIndex: OriginalIndex | undefined; + + /** Copies and sorts segments by virtual start, normalizing omitted features to `All`. */ + constructor(segments: readonly SpanMapSegment[]) { + this.segments = segments + .map(segment => ({ ...segment, features: segment.features ?? SpanMapFeature.All })) + .sort((left, right) => left.virtualStart - right.virtualStart); + } + + /** Reports whether a mapping is a precise, edit-safe projection through one verbatim segment. */ + static isExact(fidelity: SpanMapFidelity): boolean { + return fidelity === SpanMapFidelity.Exact; + } + + /** Reports whether a mapping lies in one verbatim or atom segment. */ + static isSingleSegment(fidelity: SpanMapFidelity): boolean { + return fidelity === SpanMapFidelity.Exact || fidelity === SpanMapFidelity.Atom; + } + + /** Reports whether the input had no counterpart in the target text. */ + static isNone(fidelity: SpanMapFidelity): boolean { + return fidelity === SpanMapFidelity.None; + } + + /** + * Maps a virtual range to original text. Gaps map to insertion points with `None` fidelity, + * and ranges crossing segment boundaries map their endpoints with `Approximate` fidelity. + */ + virtualToOriginalSpan(range: ReadonlyTextRange): MappedRange { + return this.mapRange(range, this.segments, false); + } + + /** Maps a visible LS result only when every covered segment participates in `feature`. */ + virtualToOriginalSpanForFeature(range: ReadonlyTextRange, feature: SpanMapFeature): MappedRange { + const mapped = this.virtualToOriginalSpan(range); + return this.virtualRangeSupportsFeature(range, feature) ? mapped : { ...mapped, fidelity: SpanMapFidelity.None }; + } + + /** Maps a virtual position to original text, using `None` fidelity for synthesized gaps. */ + virtualToOriginalPosition(position: number): MappedPosition { + return this.mapPoint(position, this.segments, false); + } + + virtualToOriginalPositionForFeature(position: number, feature: SpanMapFeature): MappedPosition { + const mapped = this.virtualToOriginalPosition(position); + const [index, inside] = segmentIndexAt(this.segments, position, false); + return inside && supportsFeature(this.segments[index], feature) ? mapped : { ...mapped, fidelity: SpanMapFidelity.None }; + } + + /** + * Returns every virtual projection of an original position whose segment participates in `feature`. + * Segment ends are inclusive for point mapping, so adjacent spans may both produce projections. + * Results are ordered by virtual position; uncovered or disabled positions produce no results. + */ + originalToVirtualPositions(position: number, feature: SpanMapFeature): readonly MappedPosition[] { + const groups = segmentGroupsAtOriginalPosition(this.getOriginalIndex(), position); + const results: MappedPosition[] = []; + for (const group of groups) { + for (const segment of group.segments) { + if (!supportsFeature(segment, feature)) continue; + const mapped = segment.kind === SpanMapKind.Verbatim + ? { position: mapVerbatimPosition(segment, position, true), fidelity: SpanMapFidelity.Exact } + : { position: group.atEnd ? segment.virtualEnd : segment.virtualStart, fidelity: SpanMapFidelity.Atom }; + if (!results.some(result => result.position === mapped.position && result.fidelity === mapped.fidelity)) { + results.push(mapped); + } + } + } + return results.sort((left, right) => left.position - right.position); + } + + /** + * Returns every feature-compatible virtual projection of an original range. + * A range contained by one or more segments produces one exact or atom result per matching segment. + * + * A range that starts in one group and ends in another can have several possible virtual ranges. For + * example, suppose two original segments are each copied twice into the virtual text: + * + * ```text + * original: [ A ][ B ] + * [---) range from inside A to inside B + * + * virtual: [ A ][ B ] [ A ][ B ] + * ^ ^ ^ ^ + * start end start end + * 1 3 11 13 + * ``` + * + * The map says that the range may start at 1 or 11 and end at 3 or 13, but it does not say which copy of A + * belongs with which copy of B. We choose the smallest range around each possible location, producing [1,3) + * and [11,13). We do not return [1,13), because it contains both smaller candidates and would include code + * that may be unrelated to the original range. These cross-group results have approximate fidelity. + */ + originalToVirtualSpans(range: ReadonlyTextRange, feature: SpanMapFeature): readonly MappedRange[] { + const start = range.pos; + const end = Math.max(range.end, start); + if (start === end) { + return this.originalToVirtualPositions(start, feature).map(({ position, fidelity }) => ({ + range: { pos: position, end: position }, + fidelity, + })); + } + const lastCharacter = end - 1; + const originalIndex = this.getOriginalIndex(); + const startSegments = segmentsAtOriginalPosition(originalIndex, start); + const endSegments = segmentsAtOriginalPosition(originalIndex, lastCharacter); + if (!startSegments || !endSegments) return []; + const containing = startSegments.filter(segment => end <= segment.originalEnd); + if (containing.length > 0) { + const results = [...originalToVirtualSpansInSegments(containing, start, end, feature)]; + if (results.length > 0) return results.sort((left, right) => left.range.pos - right.range.pos); + } + const starts = [...originalStartProjections(startSegments, start, feature)].sort((left, right) => left - right); + const ends = [...originalEndProjections(endSegments, end, feature)].sort((left, right) => left - right); + if (starts.length === 0 || ends.length === 0) return []; + return starts.flatMap((virtualStart, index) => { + const virtualEnd = ends.find(end => end >= virtualStart); + return virtualEnd === undefined || index + 1 < starts.length && starts[index + 1] <= virtualEnd + ? [] + : [{ range: { pos: virtualStart, end: virtualEnd }, fidelity: SpanMapFidelity.Approximate }]; + }); + } + + /** Maps one range through an ordered segment index in the direction selected by `reverse`. */ + private mapRange(range: ReadonlyTextRange, segments: readonly SpanMapSegment[], reverse: boolean): MappedRange { + const start = range.pos; + const end = Math.max(range.end, start); + if (start === end) { + const { position, fidelity } = this.mapPoint(start, segments, reverse); + return { range: { pos: position, end: position }, fidelity }; + } + const [startIndex, startInside] = segmentIndexAt(segments, start, reverse); + const endProbe = end - 1; + const [endIndex, endInside] = segmentIndexAt(segments, endProbe, reverse); + + if (startIndex === endIndex && startInside === endInside) { + if (startInside) { + const segment = segments[startIndex]; + if (segment.kind === SpanMapKind.Verbatim) { + const mappedStart = mapVerbatimPosition(segment, start, reverse); + const mappedEnd = Math.max(mappedStart, mapVerbatimPosition(segment, end, reverse)); + return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Exact }; + } + return { range: targetRange(segment, reverse), fidelity: SpanMapFidelity.Atom }; + } + const position = insertionPoint(segments, startIndex, reverse); + return { range: { pos: position, end: position }, fidelity: SpanMapFidelity.None }; + } + + const mappedStart = mapBoundary(segments, start, startIndex, startInside, reverse, false); + const mappedEnd = Math.max(mappedStart, mapBoundary(segments, end, endIndex, endInside, reverse, true)); + return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Approximate }; + } + + /** Maps one position through an ordered segment index in the direction selected by `reverse`. */ + private mapPoint(position: number, segments: readonly SpanMapSegment[], reverse: boolean): MappedPosition { + const [index, inside] = segmentIndexAt(segments, position, reverse); + if (!inside) { + return { position: insertionPoint(segments, index, reverse), fidelity: SpanMapFidelity.None }; + } + const segment = segments[index]; + if (segment.kind === SpanMapKind.Verbatim) { + return { position: mapVerbatimPosition(segment, position, reverse), fidelity: SpanMapFidelity.Exact }; + } + return { + position: reverse ? segment.virtualStart : segment.originalStart, + fidelity: SpanMapFidelity.Atom, + }; + } + + /** Returns the lazily built original-text interval index. */ + private getOriginalIndex(): OriginalIndex { + if (this.originalIndex) return this.originalIndex; + const segments = [...this.segments].sort((left, right) => + left.originalStart - right.originalStart + || left.originalEnd - right.originalEnd + || left.virtualStart - right.virtualStart + ); + let leafCount = 1; + while (leafCount < segments.length) leafCount *= 2; + const maxEnds = new Array(2 * leafCount).fill(0); + for (let i = 0; i < segments.length; i++) maxEnds[leafCount + i] = segments[i].originalEnd; + for (let i = leafCount - 1; i > 0; i--) maxEnds[i] = Math.max(maxEnds[2 * i], maxEnds[2 * i + 1]); + return this.originalIndex = { segments, leafCount, maxEnds }; + } + + private virtualRangeSupportsFeature(range: ReadonlyTextRange, feature: SpanMapFeature): boolean { + const start = range.pos; + const end = Math.max(range.end, start); + if (start === end) { + const [index, inside] = segmentIndexAt(this.segments, start, false); + return inside && supportsFeature(this.segments[index], feature); + } + let [index, inside] = segmentIndexAt(this.segments, start, false); + if (!inside) return false; + let coveredThrough = start; + while (index < this.segments.length && coveredThrough < end) { + const segment = this.segments[index]; + if (segment.virtualStart > coveredThrough || segment.virtualEnd <= coveredThrough || !supportsFeature(segment, feature)) return false; + coveredThrough = segment.virtualEnd; + index++; + } + return coveredThrough >= end; + } +} + +/** + * Maps the inclusive start of an original range through every matching segment. Verbatim segments preserve + * the offset within the segment; atoms map to their virtual start. + * + * ```text + * original: [---------) + * ^ start + * + * virtual: [---------) [---------) + * ^ ^ + * result result + * ``` + */ +function originalStartProjections(segments: readonly NormalizedSpanMapSegment[], start: number, feature: SpanMapFeature): readonly number[] { + return segments + .filter(segment => supportsFeature(segment, feature)) + .map(segment => + segment.kind === SpanMapKind.Verbatim + ? mapVerbatimPosition(segment, start, true) + : segment.virtualStart + ); +} + +/** + * Maps the exclusive end of an original range through every matching segment. The caller uses `end - 1` + * to find the segment containing the final character, while this helper maps the `end` boundary itself. + * + * ```text + * original: [---------)[ next segment ) + * ^`-- end + * `--- end - 1 + * + * virtual: [---------) [---------) + * ^ ^ + * result result + * ``` + */ +function originalEndProjections(segments: readonly NormalizedSpanMapSegment[], end: number, feature: SpanMapFeature): readonly number[] { + return segments + .filter(segment => supportsFeature(segment, feature)) + .map(segment => + segment.kind === SpanMapKind.Verbatim + ? mapVerbatimPosition(segment, end, true) + : segment.virtualEnd + ); +} + +/** Maps a range fully contained by each segment. */ +function originalToVirtualSpansInSegments(segments: readonly NormalizedSpanMapSegment[], start: number, end: number, feature: SpanMapFeature): readonly MappedRange[] { + return segments + .filter(segment => supportsFeature(segment, feature)) + .map(segment => { + if (segment.kind === SpanMapKind.Verbatim) { + const mappedStart = mapVerbatimPosition(segment, start, true); + const mappedEnd = Math.max(mappedStart, mapVerbatimPosition(segment, end, true)); + return { range: { pos: mappedStart, end: mappedEnd }, fidelity: SpanMapFidelity.Exact }; + } + return { range: { pos: segment.virtualStart, end: segment.virtualEnd }, fidelity: SpanMapFidelity.Atom }; + }); +} + +/** Reports whether two segments belong to the same duplicate group. */ +function sameOriginalRange(left: SpanMapSegment, right: SpanMapSegment): boolean { + return left.originalStart === right.originalStart && left.originalEnd === right.originalEnd; +} + +/** + * Returns every mapping segment containing the original-text `position`. + * Segment ends are exclusive; starts, including zero-length segment starts, are included. + */ +function segmentsAtOriginalPosition(index: OriginalIndex, position: number): readonly NormalizedSpanMapSegment[] | undefined { + // Query intervals that contain position strictly before their exclusive end. Segments starting exactly at + // position are appended separately so zero-length segments are included while maxEnd <= position is pruned. + const start = firstOriginalSegmentAtOrAfter(index.segments, position); + const results = segmentsEndingAtOrAfter(index, start, position, false); + const end = firstOriginalSegmentAfter(index.segments, position); + results.push(...index.segments.slice(start, end)); + return results.length > 0 ? results : undefined; +} + +/** Returns segments among `[0, limit)` whose original end reaches `position`. */ +function segmentsEndingAtOrAfter(index: OriginalIndex, limit: number, position: number, includeEnd: boolean): NormalizedSpanMapSegment[] { + const results: NormalizedSpanMapSegment[] = []; + collectSegmentsEndingAtOrAfter(index, 1, 0, index.leafCount, limit, position, includeEnd, results); + return results; +} + +/** Walks the flat max-end tree left-to-right, preserving original-text order. */ +function collectSegmentsEndingAtOrAfter( + index: OriginalIndex, + node: number, + start: number, + end: number, + limit: number, + position: number, + includeEnd: boolean, + results: NormalizedSpanMapSegment[], +): void { + const maxEnd = index.maxEnds[node]; + if (start >= limit || maxEnd < position || !includeEnd && maxEnd === position) return; + if (end - start === 1) { + results.push(index.segments[start]); + return; + } + const middle = start + ((end - start) >>> 1); + collectSegmentsEndingAtOrAfter(index, 2 * node, start, middle, limit, position, includeEnd, results); + collectSegmentsEndingAtOrAfter(index, 2 * node + 1, middle, end, limit, position, includeEnd, results); +} + +/** Returns the first original-ordered segment whose start is greater than or equal to `position`. */ +function firstOriginalSegmentAtOrAfter(segments: readonly NormalizedSpanMapSegment[], position: number): number { + let low = 0; + let high = segments.length; + while (low < high) { + const middle = (low + high) >>> 1; + if (segments[middle].originalStart < position) low = middle + 1; + else high = middle; + } + return low; +} + +/** Returns the first original-ordered segment whose start is greater than `position`. */ +function firstOriginalSegmentAfter(segments: readonly NormalizedSpanMapSegment[], position: number): number { + let low = 0; + let high = segments.length; + while (low < high) { + const middle = (low + high) >>> 1; + if (segments[middle].originalStart <= position) low = middle + 1; + else high = middle; + } + return low; +} + +interface SegmentGroupAtOriginalPosition { + readonly segments: readonly NormalizedSpanMapSegment[]; + readonly atEnd: boolean; +} + +/** + * Returns every group of equal-range mapping segments containing or touching the original-text `position`. + * Segment ends are included for point mapping: + * + * ```text + * original: [--- A ---)[--- B ---) + * ^ position + * + * virtual: [ A1 ) [ A2 ) [ B1 ) [ B2 ) + * left group right group + * atEnd: true atEnd: false + * ``` + */ +function segmentGroupsAtOriginalPosition(index: OriginalIndex, position: number): readonly SegmentGroupAtOriginalPosition[] { + const limit = firstOriginalSegmentAfter(index.segments, position); + const segments = segmentsEndingAtOrAfter(index, limit, position, true); + const groups: SegmentGroupAtOriginalPosition[] = []; + for (let start = 0; start < segments.length;) { + let end = start + 1; + while (end < segments.length && sameOriginalRange(segments[start], segments[end])) end++; + const segment = segments[start]; + if (position <= segment.originalEnd) { + groups.push({ + segments: segments.slice(start, end), + atEnd: position === segment.originalEnd && position !== segment.originalStart, + }); + } + start = end; + } + return groups; +} + +/** Reports whether a segment participates in an original-to-virtual query for `features`. */ +function supportsFeature(segment: NormalizedSpanMapSegment, feature: SpanMapFeature): boolean { + return (segment.features & feature) !== 0; +} + +/** + * Finds the segment containing `position`, or the preceding segment when `position` is in a gap. + * The boolean distinguishes containment from a gap; `reverse` selects original rather than virtual coordinates. + */ +function segmentIndexAt(segments: readonly SpanMapSegment[], position: number, reverse: boolean): [number, boolean] { + let low = 0; + let high = segments.length; + while (low < high) { + const middle = (low + high) >>> 1; + const start = reverse ? segments[middle].originalStart : segments[middle].virtualStart; + if (start < position) low = middle + 1; + else high = middle; + } + if (low < segments.length && (reverse ? segments[low].originalStart : segments[low].virtualStart) === position) { + return [low, true]; + } + const previous = low - 1; + if (previous >= 0) { + const end = reverse ? segments[previous].originalEnd : segments[previous].virtualEnd; + if (position < end || previous === segments.length - 1 && position === end) return [previous, true]; + } + return [previous, false]; +} + +/** Returns the target insertion point for a gap following `previous`, or zero before the first segment. */ +function insertionPoint(segments: readonly SpanMapSegment[], previous: number, reverse: boolean): number { + if (previous < 0) return 0; + return reverse ? segments[previous].virtualEnd : segments[previous].originalEnd; +} + +/** Linearly maps and clamps a position within a length-preserving verbatim segment. */ +function mapVerbatimPosition(segment: SpanMapSegment, position: number, reverse: boolean): number { + const sourceStart = reverse ? segment.originalStart : segment.virtualStart; + const targetStart = reverse ? segment.virtualStart : segment.originalStart; + const targetEnd = reverse ? segment.virtualEnd : segment.originalEnd; + return clamp(targetStart + position - sourceStart, targetStart, targetEnd); +} + +/** Maps a range boundary, using insertion points for gaps and the selected endpoint for atoms. */ +function mapBoundary(segments: readonly SpanMapSegment[], position: number, index: number, inside: boolean, reverse: boolean, high: boolean): number { + if (!inside) return insertionPoint(segments, index, reverse); + const segment = segments[index]; + if (segment.kind === SpanMapKind.Verbatim) return mapVerbatimPosition(segment, position, reverse); + if (reverse) return high ? segment.virtualEnd : segment.virtualStart; + return high ? segment.originalEnd : segment.originalStart; +} + +/** Returns the complete target range of a segment in the selected direction. */ +function targetRange(segment: SpanMapSegment, reverse: boolean): ReadonlyTextRange { + return reverse + ? { pos: segment.virtualStart, end: segment.virtualEnd } + : { pos: segment.originalStart, end: segment.originalEnd }; +} + +/** Confines `value` to the inclusive interval [`low`, `high`]. */ +function clamp(value: number, low: number, high: number): number { + return Math.max(low, Math.min(value, high)); +} diff --git a/packages/typescript/src/ast/utils.ts b/packages/typescript/src/ast/utils.ts index aef39a99abd87..00ad45334cbcc 100644 --- a/packages/typescript/src/ast/utils.ts +++ b/packages/typescript/src/ast/utils.ts @@ -1,366 +1,366 @@ -import { CharacterCodes } from "#enums/characterCodes"; -import { JSDeclarationKind } from "#enums/jsDeclarationKind"; -import { ModifierFlags } from "#enums/modifierFlags"; -import { NodeFlags } from "#enums/nodeFlags"; -import { OuterExpressionKinds } from "#enums/outerExpressionKinds"; -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - __String, - AccessExpression, - BinaryExpression, - BindingElement, - CallExpression, - Declaration, - DeclarationName, - ElementAccessExpression, - ExportAssignment, - Expression, - HasExpression, - HasInitializer, - ModifierLike, - ObjectAssignmentInitializer, - PropertyAccessExpression, - PropertyAssignment, - SourceFile, - VariableDeclaration, -} from "./ast.ts"; -import type { Node } from "./ast.ts"; -import { - isAccessExpression, - isIdentifier, - isNumericLiteral, - isStringLiteralLikeNode, -} from "./is.generated.ts"; -import { skipOuterExpressions } from "./is.ts"; -import { modifierToFlag } from "./modifiers.ts"; - -let syntaxKindNames: Map | undefined; -function getSyntaxKindNames(): Map { - if (!syntaxKindNames) { - syntaxKindNames = new Map(); - for (const name of Object.keys(SyntaxKind)) { - const val = SyntaxKind[name as keyof typeof SyntaxKind]; - if (typeof val === "number" && !syntaxKindNames.has(val)) { - syntaxKindNames.set(val, name); - } - } - syntaxKindNames.set(SyntaxKind.EndOfFile, "EndOfFileToken"); - } - return syntaxKindNames; -} - -export function formatSyntaxKind(kind: SyntaxKind): string { - return getSyntaxKindNames().get(kind) ?? `Unknown(${kind})`; -} - -/** - * Remove one extra leading underscore from an identifier name, recovering the - * display form from its escaped {@link __String} key. - */ -export function unescapeLeadingUnderscores(identifier: __String): string { - const id = identifier as string; - return id.length >= 3 && id.charCodeAt(0) === CharacterCodes._ && id.charCodeAt(1) === CharacterCodes._ && id.charCodeAt(2) === CharacterCodes._ - ? id.slice(1) - : id; -} - -/** - * Add an extra leading underscore to a display name that already begins with - * `__`, producing its escaped {@link __String} key. - */ -export function escapeLeadingUnderscores(identifier: string): __String { - return (identifier.length >= 2 && identifier.charCodeAt(0) === CharacterCodes._ && identifier.charCodeAt(1) === CharacterCodes._ - ? "_" + identifier - : identifier) as __String; -} - -/** - * Gets the module specifier represented by an ambient module symbol's escaped - * name, or `undefined` when the name does not identify an ambient module. - */ -export function tryGetAmbientModuleNameFromSymbolName(name: __String): string | undefined { - const text = name as string; - if (text.charCodeAt(0) === CharacterCodes.doubleQuote && text.charCodeAt(text.length - 1) === CharacterCodes.doubleQuote) { - return text.slice(1, -1); - } - - const patternPrefix = '__"'; - if (!text.startsWith(patternPrefix)) return undefined; - const markerIndex = text.lastIndexOf('"pattern@'); - return markerIndex > patternPrefix.length ? text.slice(patternPrefix.length, markerIndex) : undefined; -} - -export function tryCast(value: TIn | undefined, test: (value: TIn) => value is TOut): TOut | undefined { - return value !== undefined && test(value) ? value : undefined; -} - -export function cast(value: TIn | undefined, test: (value: TIn) => value is TOut): TOut { - if (value !== undefined && test(value)) return value; - - throw new Error(`Invalid cast. The supplied value ${value} did not pass the test '${test.name}'.`); -} - -export function hasExpression(node: Node): node is HasExpression { - return "expression" in node; -} - -export function hasInitializer(node: Node): node is HasInitializer { - return "initializer" in node; -} - -export function hasObjectAssignmentInitializer(node: Node): node is ObjectAssignmentInitializer { - return "objectAssignmentInitializer" in node; -} - -export function isExternalModule(file: SourceFile): boolean { - return file.externalModuleIndicator !== undefined; -} - -function getRootDeclaration(node: Node): Node { - while (node.kind === SyntaxKind.BindingElement) { - node = node.parent.parent; - } - return node; -} - -function getModifierFlags(node: Node): ModifierFlags { - const modifiers = "modifiers" in node - ? (node as Node & { readonly modifiers?: readonly ModifierLike[]; }).modifiers - : undefined; - let flags = ModifierFlags.None; - if (modifiers) { - for (const modifier of modifiers) { - flags |= modifierToFlag(modifier.kind); - } - } - return flags; -} - -export function getCombinedModifierFlags(node: Declaration): ModifierFlags { - let current: Node | undefined = getRootDeclaration(node); - let flags = getModifierFlags(current); - if (current.kind === SyntaxKind.VariableDeclaration) { - current = current.parent; - } - if (current?.kind === SyntaxKind.VariableDeclarationList) { - flags |= getModifierFlags(current); - current = current.parent; - } - if (current?.kind === SyntaxKind.VariableStatement) { - flags |= getModifierFlags(current); - } - return flags; -} - -function skipParentheses(node: Expression): Expression { - return skipOuterExpressions(node, OuterExpressionKinds.Parentheses); -} - -function isStringOrNumericLiteralLike(node: Node): node is DeclarationName { - return isStringLiteralLikeNode(node) || isNumericLiteral(node); -} - -function getElementOrPropertyAccessName(node: AccessExpression): DeclarationName | undefined { - if (node.kind === SyntaxKind.PropertyAccessExpression) { - return isIdentifier(node.name) ? node.name : undefined; - } - const argument = skipParentheses(node.argumentExpression); - return isStringOrNumericLiteralLike(argument) ? argument : undefined; -} - -function getNameText(node: DeclarationName | undefined): string | undefined { - return node && "text" in node && typeof node.text === "string" ? node.text : undefined; -} - -function isEntityNameExpression(node: Node, allowJS = false): boolean { - if (isIdentifier(node)) return true; - if (node.kind === SyntaxKind.PropertyAccessExpression) { - const access = node as PropertyAccessExpression; - return isIdentifier(access.name) && isEntityNameExpression(access.expression, allowJS); - } - if (!allowJS) return false; - if (node.kind === SyntaxKind.ThisKeyword) return true; - if (node.kind !== SyntaxKind.ElementAccessExpression) return false; - const access = node as ElementAccessExpression; - return isStringOrNumericLiteralLike(access.argumentExpression) && - isEntityNameExpression(access.expression, true); -} - -function isBindableStaticAccessExpression(node: Node, excludeThisKeyword: boolean): node is AccessExpression { - if (node.kind === SyntaxKind.PropertyAccessExpression) { - const access = node as PropertyAccessExpression; - return !excludeThisKeyword && access.expression.kind === SyntaxKind.ThisKeyword || - isIdentifier(access.name) && isBindableStaticNameExpression(access.expression, true); - } - if (node.kind !== SyntaxKind.ElementAccessExpression) return false; - const access = node as ElementAccessExpression; - return isStringOrNumericLiteralLike(access.argumentExpression) && - (!excludeThisKeyword && access.expression.kind === SyntaxKind.ThisKeyword || - isEntityNameExpression(access.expression) || - isBindableStaticAccessExpression(access.expression, true)); -} - -function isBindableStaticNameExpression(node: Node, excludeThisKeyword: boolean): boolean { - return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword); -} - -function isModuleExportsAccessExpression(node: Node): boolean { - return isAccessExpression(node) && - isIdentifier(node.expression) && - node.expression.text === "module" && - getNameText(getElementOrPropertyAccessName(node)) === "exports"; -} - -function isBindableObjectDefinePropertyCall(node: CallExpression): boolean { - if (node.arguments.length !== 3) return false; - const expression = node.expression; - if (expression.kind !== SyntaxKind.PropertyAccessExpression) return false; - const access = expression as PropertyAccessExpression; - return isIdentifier(access.expression) && - access.expression.text === "Object" && - access.name.text === "defineProperty" && - isStringOrNumericLiteralLike(node.arguments[1]) && - isBindableStaticNameExpression(node.arguments[0], true); -} - -function getAssignmentDeclarationKind(node: BinaryExpression | CallExpression): JSDeclarationKind { - if (node.kind === SyntaxKind.BinaryExpression) { - if (node.operatorToken.kind !== SyntaxKind.EqualsToken || !isAccessExpression(node.left)) { - return JSDeclarationKind.None; - } - const left = node.left; - const isInJSFile = (left.flags & NodeFlags.JavaScriptFile) !== 0; - if (isInJSFile) { - if (isModuleExportsAccessExpression(left) && !(isIdentifier(node.right) && node.right.text === "exports")) { - return JSDeclarationKind.ModuleExports; - } - if ( - (isModuleExportsAccessExpression(left.expression) || - isIdentifier(left.expression) && left.expression.text === "exports") && - getElementOrPropertyAccessName(left) - ) { - return JSDeclarationKind.ExportsProperty; - } - if (left.expression.kind === SyntaxKind.ThisKeyword) { - return JSDeclarationKind.ThisProperty; - } - } - if ( - left.kind === SyntaxKind.PropertyAccessExpression && - isEntityNameExpression(left.expression, isInJSFile) && - isIdentifier(left.name) || - left.kind === SyntaxKind.ElementAccessExpression && - isEntityNameExpression(left.expression, isInJSFile) - ) { - return JSDeclarationKind.Property; - } - return JSDeclarationKind.None; - } - - if ( - (node.flags & NodeFlags.JavaScriptFile) !== 0 && - isBindableObjectDefinePropertyCall(node) - ) { - const entityName = node.arguments[0]; - return isIdentifier(entityName) && entityName.text === "exports" || - isModuleExportsAccessExpression(entityName) - ? JSDeclarationKind.ObjectDefinePropertyExports - : JSDeclarationKind.ObjectDefinePropertyValue; - } - return JSDeclarationKind.None; -} - -function getDeclaredName(declaration: Declaration | Expression): DeclarationName | undefined { - return (declaration as (Declaration | Expression) & { readonly name?: DeclarationName; }).name; -} - -function getNonAssignedNameOfDeclaration(declaration: Declaration | Expression): DeclarationName | undefined { - if (declaration.kind === SyntaxKind.BinaryExpression || declaration.kind === SyntaxKind.CallExpression) { - switch (getAssignmentDeclarationKind(declaration as BinaryExpression | CallExpression)) { - case JSDeclarationKind.Property: - case JSDeclarationKind.ThisProperty: - case JSDeclarationKind.ExportsProperty: { - const left = (declaration as BinaryExpression).left as AccessExpression; - return getElementOrPropertyAccessName(left) ?? left; - } - case JSDeclarationKind.ObjectDefinePropertyValue: - case JSDeclarationKind.ObjectDefinePropertyExports: - return (declaration as CallExpression).arguments[1] as DeclarationName; - default: - return undefined; - } - } - if (declaration.kind === SyntaxKind.ExportAssignment) { - const expression = (declaration as ExportAssignment).expression; - return isIdentifier(expression) ? expression : undefined; - } - return getDeclaredName(declaration); -} - -function getAssignedName(node: Node): DeclarationName | undefined { - const parent = node.parent; - if (!parent) return undefined; - switch (parent.kind) { - case SyntaxKind.PropertyAssignment: - return (parent as PropertyAssignment).name; - case SyntaxKind.BindingElement: - return (parent as BindingElement).name; - case SyntaxKind.BinaryExpression: { - const binary = parent as BinaryExpression; - if (node !== binary.right) return undefined; - const left = binary.left; - if (isIdentifier(left)) return left; - if (left.kind === SyntaxKind.PropertyAccessExpression) return (left as PropertyAccessExpression).name; - if (left.kind === SyntaxKind.ElementAccessExpression) { - const argument = skipParentheses((left as ElementAccessExpression).argumentExpression); - return isStringOrNumericLiteralLike(argument) ? argument : undefined; - } - return undefined; - } - case SyntaxKind.VariableDeclaration: { - const name = (parent as VariableDeclaration).name; - return isIdentifier(name) ? name : undefined; - } - default: - return undefined; - } -} - -export function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined { - if (declaration === undefined) return undefined; - const nonAssignedName = getNonAssignedNameOfDeclaration(declaration); - if (nonAssignedName !== undefined) return nonAssignedName; - return declaration.kind === SyntaxKind.FunctionExpression || - declaration.kind === SyntaxKind.ArrowFunction || - declaration.kind === SyntaxKind.ClassExpression - ? getAssignedName(declaration) - : undefined; -} - -export function cloneSourceFileData(sourceFile: SourceFile): Record { - return { - statements: sourceFile.statements, - endOfFileToken: sourceFile.endOfFileToken, - text: sourceFile.text, - originalText: sourceFile.originalText, - spanMap: sourceFile.spanMap, - contentMapper: sourceFile.contentMapper, - virtualFileName: sourceFile.virtualFileName, - diagnosticDirectives: sourceFile.diagnosticDirectives, - supplementalSourceFileNames: sourceFile.supplementalSourceFileNames, - canonicalSourceFileName: sourceFile.canonicalSourceFileName, - fileName: sourceFile.fileName, - path: sourceFile.path, - languageVariant: sourceFile.languageVariant, - scriptKind: sourceFile.scriptKind, - isDeclarationFile: sourceFile.isDeclarationFile, - referencedFiles: sourceFile.referencedFiles, - typeReferenceDirectives: sourceFile.typeReferenceDirectives, - libReferenceDirectives: sourceFile.libReferenceDirectives, - imports: sourceFile.imports, - moduleAugmentations: sourceFile.moduleAugmentations, - ambientModuleNames: sourceFile.ambientModuleNames, - externalModuleIndicator: sourceFile.externalModuleIndicator, - tokenCache: undefined, - }; -} +import { CharacterCodes } from "#enums/characterCodes"; +import { JSDeclarationKind } from "#enums/jsDeclarationKind"; +import { ModifierFlags } from "#enums/modifierFlags"; +import { NodeFlags } from "#enums/nodeFlags"; +import { OuterExpressionKinds } from "#enums/outerExpressionKinds"; +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + __String, + AccessExpression, + BinaryExpression, + BindingElement, + CallExpression, + Declaration, + DeclarationName, + ElementAccessExpression, + ExportAssignment, + Expression, + HasExpression, + HasInitializer, + ModifierLike, + ObjectAssignmentInitializer, + PropertyAccessExpression, + PropertyAssignment, + SourceFile, + VariableDeclaration, +} from "./ast.ts"; +import type { Node } from "./ast.ts"; +import { + isAccessExpression, + isIdentifier, + isNumericLiteral, + isStringLiteralLikeNode, +} from "./is.generated.ts"; +import { skipOuterExpressions } from "./is.ts"; +import { modifierToFlag } from "./modifiers.ts"; + +let syntaxKindNames: Map | undefined; +function getSyntaxKindNames(): Map { + if (!syntaxKindNames) { + syntaxKindNames = new Map(); + for (const name of Object.keys(SyntaxKind)) { + const val = SyntaxKind[name as keyof typeof SyntaxKind]; + if (typeof val === "number" && !syntaxKindNames.has(val)) { + syntaxKindNames.set(val, name); + } + } + syntaxKindNames.set(SyntaxKind.EndOfFile, "EndOfFileToken"); + } + return syntaxKindNames; +} + +export function formatSyntaxKind(kind: SyntaxKind): string { + return getSyntaxKindNames().get(kind) ?? `Unknown(${kind})`; +} + +/** + * Remove one extra leading underscore from an identifier name, recovering the + * display form from its escaped {@link __String} key. + */ +export function unescapeLeadingUnderscores(identifier: __String): string { + const id = identifier as string; + return id.length >= 3 && id.charCodeAt(0) === CharacterCodes._ && id.charCodeAt(1) === CharacterCodes._ && id.charCodeAt(2) === CharacterCodes._ + ? id.slice(1) + : id; +} + +/** + * Add an extra leading underscore to a display name that already begins with + * `__`, producing its escaped {@link __String} key. + */ +export function escapeLeadingUnderscores(identifier: string): __String { + return (identifier.length >= 2 && identifier.charCodeAt(0) === CharacterCodes._ && identifier.charCodeAt(1) === CharacterCodes._ + ? "_" + identifier + : identifier) as __String; +} + +/** + * Gets the module specifier represented by an ambient module symbol's escaped + * name, or `undefined` when the name does not identify an ambient module. + */ +export function tryGetAmbientModuleNameFromSymbolName(name: __String): string | undefined { + const text = name as string; + if (text.charCodeAt(0) === CharacterCodes.doubleQuote && text.charCodeAt(text.length - 1) === CharacterCodes.doubleQuote) { + return text.slice(1, -1); + } + + const patternPrefix = '__"'; + if (!text.startsWith(patternPrefix)) return undefined; + const markerIndex = text.lastIndexOf('"pattern@'); + return markerIndex > patternPrefix.length ? text.slice(patternPrefix.length, markerIndex) : undefined; +} + +export function tryCast(value: TIn | undefined, test: (value: TIn) => value is TOut): TOut | undefined { + return value !== undefined && test(value) ? value : undefined; +} + +export function cast(value: TIn | undefined, test: (value: TIn) => value is TOut): TOut { + if (value !== undefined && test(value)) return value; + + throw new Error(`Invalid cast. The supplied value ${value} did not pass the test '${test.name}'.`); +} + +export function hasExpression(node: Node): node is HasExpression { + return "expression" in node; +} + +export function hasInitializer(node: Node): node is HasInitializer { + return "initializer" in node; +} + +export function hasObjectAssignmentInitializer(node: Node): node is ObjectAssignmentInitializer { + return "objectAssignmentInitializer" in node; +} + +export function isExternalModule(file: SourceFile): boolean { + return file.externalModuleIndicator !== undefined; +} + +function getRootDeclaration(node: Node): Node { + while (node.kind === SyntaxKind.BindingElement) { + node = node.parent.parent; + } + return node; +} + +function getModifierFlags(node: Node): ModifierFlags { + const modifiers = "modifiers" in node + ? (node as Node & { readonly modifiers?: readonly ModifierLike[]; }).modifiers + : undefined; + let flags = ModifierFlags.None; + if (modifiers) { + for (const modifier of modifiers) { + flags |= modifierToFlag(modifier.kind); + } + } + return flags; +} + +export function getCombinedModifierFlags(node: Declaration): ModifierFlags { + let current: Node | undefined = getRootDeclaration(node); + let flags = getModifierFlags(current); + if (current.kind === SyntaxKind.VariableDeclaration) { + current = current.parent; + } + if (current?.kind === SyntaxKind.VariableDeclarationList) { + flags |= getModifierFlags(current); + current = current.parent; + } + if (current?.kind === SyntaxKind.VariableStatement) { + flags |= getModifierFlags(current); + } + return flags; +} + +function skipParentheses(node: Expression): Expression { + return skipOuterExpressions(node, OuterExpressionKinds.Parentheses); +} + +function isStringOrNumericLiteralLike(node: Node): node is DeclarationName { + return isStringLiteralLikeNode(node) || isNumericLiteral(node); +} + +function getElementOrPropertyAccessName(node: AccessExpression): DeclarationName | undefined { + if (node.kind === SyntaxKind.PropertyAccessExpression) { + return isIdentifier(node.name) ? node.name : undefined; + } + const argument = skipParentheses(node.argumentExpression); + return isStringOrNumericLiteralLike(argument) ? argument : undefined; +} + +function getNameText(node: DeclarationName | undefined): string | undefined { + return node && "text" in node && typeof node.text === "string" ? node.text : undefined; +} + +function isEntityNameExpression(node: Node, allowJS = false): boolean { + if (isIdentifier(node)) return true; + if (node.kind === SyntaxKind.PropertyAccessExpression) { + const access = node as PropertyAccessExpression; + return isIdentifier(access.name) && isEntityNameExpression(access.expression, allowJS); + } + if (!allowJS) return false; + if (node.kind === SyntaxKind.ThisKeyword) return true; + if (node.kind !== SyntaxKind.ElementAccessExpression) return false; + const access = node as ElementAccessExpression; + return isStringOrNumericLiteralLike(access.argumentExpression) && + isEntityNameExpression(access.expression, true); +} + +function isBindableStaticAccessExpression(node: Node, excludeThisKeyword: boolean): node is AccessExpression { + if (node.kind === SyntaxKind.PropertyAccessExpression) { + const access = node as PropertyAccessExpression; + return !excludeThisKeyword && access.expression.kind === SyntaxKind.ThisKeyword || + isIdentifier(access.name) && isBindableStaticNameExpression(access.expression, true); + } + if (node.kind !== SyntaxKind.ElementAccessExpression) return false; + const access = node as ElementAccessExpression; + return isStringOrNumericLiteralLike(access.argumentExpression) && + (!excludeThisKeyword && access.expression.kind === SyntaxKind.ThisKeyword || + isEntityNameExpression(access.expression) || + isBindableStaticAccessExpression(access.expression, true)); +} + +function isBindableStaticNameExpression(node: Node, excludeThisKeyword: boolean): boolean { + return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword); +} + +function isModuleExportsAccessExpression(node: Node): boolean { + return isAccessExpression(node) && + isIdentifier(node.expression) && + node.expression.text === "module" && + getNameText(getElementOrPropertyAccessName(node)) === "exports"; +} + +function isBindableObjectDefinePropertyCall(node: CallExpression): boolean { + if (node.arguments.length !== 3) return false; + const expression = node.expression; + if (expression.kind !== SyntaxKind.PropertyAccessExpression) return false; + const access = expression as PropertyAccessExpression; + return isIdentifier(access.expression) && + access.expression.text === "Object" && + access.name.text === "defineProperty" && + isStringOrNumericLiteralLike(node.arguments[1]) && + isBindableStaticNameExpression(node.arguments[0], true); +} + +function getAssignmentDeclarationKind(node: BinaryExpression | CallExpression): JSDeclarationKind { + if (node.kind === SyntaxKind.BinaryExpression) { + if (node.operatorToken.kind !== SyntaxKind.EqualsToken || !isAccessExpression(node.left)) { + return JSDeclarationKind.None; + } + const left = node.left; + const isInJSFile = (left.flags & NodeFlags.JavaScriptFile) !== 0; + if (isInJSFile) { + if (isModuleExportsAccessExpression(left) && !(isIdentifier(node.right) && node.right.text === "exports")) { + return JSDeclarationKind.ModuleExports; + } + if ( + (isModuleExportsAccessExpression(left.expression) || + isIdentifier(left.expression) && left.expression.text === "exports") && + getElementOrPropertyAccessName(left) + ) { + return JSDeclarationKind.ExportsProperty; + } + if (left.expression.kind === SyntaxKind.ThisKeyword) { + return JSDeclarationKind.ThisProperty; + } + } + if ( + left.kind === SyntaxKind.PropertyAccessExpression && + isEntityNameExpression(left.expression, isInJSFile) && + isIdentifier(left.name) || + left.kind === SyntaxKind.ElementAccessExpression && + isEntityNameExpression(left.expression, isInJSFile) + ) { + return JSDeclarationKind.Property; + } + return JSDeclarationKind.None; + } + + if ( + (node.flags & NodeFlags.JavaScriptFile) !== 0 && + isBindableObjectDefinePropertyCall(node) + ) { + const entityName = node.arguments[0]; + return isIdentifier(entityName) && entityName.text === "exports" || + isModuleExportsAccessExpression(entityName) + ? JSDeclarationKind.ObjectDefinePropertyExports + : JSDeclarationKind.ObjectDefinePropertyValue; + } + return JSDeclarationKind.None; +} + +function getDeclaredName(declaration: Declaration | Expression): DeclarationName | undefined { + return (declaration as (Declaration | Expression) & { readonly name?: DeclarationName; }).name; +} + +function getNonAssignedNameOfDeclaration(declaration: Declaration | Expression): DeclarationName | undefined { + if (declaration.kind === SyntaxKind.BinaryExpression || declaration.kind === SyntaxKind.CallExpression) { + switch (getAssignmentDeclarationKind(declaration as BinaryExpression | CallExpression)) { + case JSDeclarationKind.Property: + case JSDeclarationKind.ThisProperty: + case JSDeclarationKind.ExportsProperty: { + const left = (declaration as BinaryExpression).left as AccessExpression; + return getElementOrPropertyAccessName(left) ?? left; + } + case JSDeclarationKind.ObjectDefinePropertyValue: + case JSDeclarationKind.ObjectDefinePropertyExports: + return (declaration as CallExpression).arguments[1] as DeclarationName; + default: + return undefined; + } + } + if (declaration.kind === SyntaxKind.ExportAssignment) { + const expression = (declaration as ExportAssignment).expression; + return isIdentifier(expression) ? expression : undefined; + } + return getDeclaredName(declaration); +} + +function getAssignedName(node: Node): DeclarationName | undefined { + const parent = node.parent; + if (!parent) return undefined; + switch (parent.kind) { + case SyntaxKind.PropertyAssignment: + return (parent as PropertyAssignment).name; + case SyntaxKind.BindingElement: + return (parent as BindingElement).name; + case SyntaxKind.BinaryExpression: { + const binary = parent as BinaryExpression; + if (node !== binary.right) return undefined; + const left = binary.left; + if (isIdentifier(left)) return left; + if (left.kind === SyntaxKind.PropertyAccessExpression) return (left as PropertyAccessExpression).name; + if (left.kind === SyntaxKind.ElementAccessExpression) { + const argument = skipParentheses((left as ElementAccessExpression).argumentExpression); + return isStringOrNumericLiteralLike(argument) ? argument : undefined; + } + return undefined; + } + case SyntaxKind.VariableDeclaration: { + const name = (parent as VariableDeclaration).name; + return isIdentifier(name) ? name : undefined; + } + default: + return undefined; + } +} + +export function getNameOfDeclaration(declaration: Declaration | Expression | undefined): DeclarationName | undefined { + if (declaration === undefined) return undefined; + const nonAssignedName = getNonAssignedNameOfDeclaration(declaration); + if (nonAssignedName !== undefined) return nonAssignedName; + return declaration.kind === SyntaxKind.FunctionExpression || + declaration.kind === SyntaxKind.ArrowFunction || + declaration.kind === SyntaxKind.ClassExpression + ? getAssignedName(declaration) + : undefined; +} + +export function cloneSourceFileData(sourceFile: SourceFile): Record { + return { + statements: sourceFile.statements, + endOfFileToken: sourceFile.endOfFileToken, + text: sourceFile.text, + originalText: sourceFile.originalText, + spanMap: sourceFile.spanMap, + contentMapper: sourceFile.contentMapper, + virtualFileName: sourceFile.virtualFileName, + diagnosticDirectives: sourceFile.diagnosticDirectives, + supplementalSourceFileNames: sourceFile.supplementalSourceFileNames, + canonicalSourceFileName: sourceFile.canonicalSourceFileName, + fileName: sourceFile.fileName, + path: sourceFile.path, + languageVariant: sourceFile.languageVariant, + scriptKind: sourceFile.scriptKind, + isDeclarationFile: sourceFile.isDeclarationFile, + referencedFiles: sourceFile.referencedFiles, + typeReferenceDirectives: sourceFile.typeReferenceDirectives, + libReferenceDirectives: sourceFile.libReferenceDirectives, + imports: sourceFile.imports, + moduleAugmentations: sourceFile.moduleAugmentations, + ambientModuleNames: sourceFile.ambientModuleNames, + externalModuleIndicator: sourceFile.externalModuleIndicator, + tokenCache: undefined, + }; +} diff --git a/packages/typescript/src/ast/visitor.generated.ts b/packages/typescript/src/ast/visitor.generated.ts index 7554a06a2eb3e..0885919eeca5e 100644 --- a/packages/typescript/src/ast/visitor.generated.ts +++ b/packages/typescript/src/ast/visitor.generated.ts @@ -1,1443 +1,1443 @@ -// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. - -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - ArrayBindingPattern, - ArrayLiteralExpression, - ArrayTypeNode, - ArrowFunction, - AsExpression, - AwaitExpression, - BinaryExpression, - BindingElement, - Block, - BreakStatement, - CallExpression, - CallSignatureDeclaration, - CaseBlock, - CaseClause, - CatchClause, - ClassDeclaration, - ClassExpression, - ClassStaticBlockDeclaration, - ComputedPropertyName, - ConditionalExpression, - ConditionalTypeNode, - ConstructorDeclaration, - ConstructorTypeNode, - ConstructSignatureDeclaration, - ContinueStatement, - Decorator, - DefaultClause, - DeleteExpression, - DoStatement, - ElementAccessExpression, - EnumDeclaration, - EnumMember, - ExportAssignment, - ExportDeclaration, - ExportSpecifier, - ExpressionStatement, - ExpressionWithTypeArguments, - ExternalModuleReference, - ForInStatement, - ForOfStatement, - ForStatement, - FunctionDeclaration, - FunctionExpression, - FunctionTypeNode, - GetAccessorDeclaration, - HeritageClause, - IfStatement, - ImportAttribute, - ImportAttributes, - ImportClause, - ImportDeclaration, - ImportEqualsDeclaration, - ImportSpecifier, - ImportTypeNode, - IndexedAccessTypeNode, - IndexSignatureDeclaration, - InferTypeNode, - InterfaceDeclaration, - IntersectionTypeNode, - JSDoc, - JSDocAugmentsTag, - JSDocCallbackTag, - JSDocDeprecatedTag, - JSDocImplementsTag, - JSDocImportTag, - JSDocLink, - JSDocLinkCode, - JSDocLinkPlain, - JSDocNameReference, - JSDocNonNullableType, - JSDocNullableType, - JSDocOptionalType, - JSDocOverloadTag, - JSDocOverrideTag, - JSDocParameterTag, - JSDocPrivateTag, - JSDocPropertyTag, - JSDocProtectedTag, - JSDocPublicTag, - JSDocReadonlyTag, - JSDocReturnTag, - JSDocSatisfiesTag, - JSDocSeeTag, - JSDocSignature, - JSDocTemplateTag, - JSDocThisTag, - JSDocThrowsTag, - JSDocTypedefTag, - JSDocTypeExpression, - JSDocTypeLiteral, - JSDocTypeTag, - JSDocUnknownTag, - JSDocVariadicType, - JsxAttribute, - JsxAttributes, - JsxClosingElement, - JsxElement, - JsxExpression, - JsxFragment, - JsxNamespacedName, - JsxOpeningElement, - JsxSelfClosingElement, - JsxSpreadAttribute, - LabeledStatement, - LiteralTypeNode, - MappedTypeNode, - MetaProperty, - MethodDeclaration, - MethodSignatureDeclaration, - MissingDeclaration, - ModuleBlock, - ModuleDeclaration, - NamedExports, - NamedImports, - NamedTupleMember, - NamespaceExport, - NamespaceExportDeclaration, - NamespaceImport, - NewExpression, - Node, - NodeArray, - NonNullExpression, - ObjectBindingPattern, - ObjectLiteralExpression, - OptionalTypeNode, - ParameterDeclaration, - ParenthesizedExpression, - ParenthesizedTypeNode, - PartiallyEmittedExpression, - PostfixUnaryExpression, - PrefixUnaryExpression, - PropertyAccessExpression, - PropertyAssignment, - PropertyDeclaration, - PropertySignatureDeclaration, - QualifiedName, - RestTypeNode, - ReturnStatement, - SatisfiesExpression, - SetAccessorDeclaration, - ShorthandPropertyAssignment, - SourceFile, - SpreadAssignment, - SpreadElement, - SwitchStatement, - SyntaxList, - SyntheticExpression, - SyntheticReferenceExpression, - TaggedTemplateExpression, - TemplateExpression, - TemplateLiteralTypeNode, - TemplateLiteralTypeSpan, - TemplateSpan, - ThrowStatement, - TryStatement, - TupleTypeNode, - TypeAliasDeclaration, - TypeAssertion, - TypeLiteralNode, - TypeOfExpression, - TypeOperatorNode, - TypeParameterDeclaration, - TypePredicateNode, - TypeQueryNode, - TypeReferenceNode, - UnionTypeNode, - VariableDeclaration, - VariableDeclarationList, - VariableStatement, - VoidExpression, - WhileStatement, - WithStatement, - YieldExpression, -} from "./ast.ts"; -import { - createNodeArray, - updateArrayBindingPattern, - updateArrayLiteralExpression, - updateArrayTypeNode, - updateArrowFunction, - updateAsExpression, - updateAwaitExpression, - updateBinaryExpression, - updateBindingElement, - updateBlock, - updateBreakStatement, - updateCallExpression, - updateCallSignatureDeclaration, - updateCaseBlock, - updateCaseClause, - updateCatchClause, - updateClassDeclaration, - updateClassExpression, - updateClassStaticBlockDeclaration, - updateComputedPropertyName, - updateConditionalExpression, - updateConditionalTypeNode, - updateConstructorDeclaration, - updateConstructorTypeNode, - updateConstructSignatureDeclaration, - updateContinueStatement, - updateDecorator, - updateDefaultClause, - updateDeleteExpression, - updateDoStatement, - updateElementAccessExpression, - updateEnumDeclaration, - updateEnumMember, - updateExportAssignment, - updateExportDeclaration, - updateExportSpecifier, - updateExpressionStatement, - updateExpressionWithTypeArguments, - updateExternalModuleReference, - updateForInStatement, - updateForOfStatement, - updateForStatement, - updateFunctionDeclaration, - updateFunctionExpression, - updateFunctionTypeNode, - updateGetAccessorDeclaration, - updateHeritageClause, - updateIfStatement, - updateImportAttribute, - updateImportAttributes, - updateImportClause, - updateImportDeclaration, - updateImportEqualsDeclaration, - updateImportSpecifier, - updateImportTypeNode, - updateIndexedAccessTypeNode, - updateIndexSignatureDeclaration, - updateInferTypeNode, - updateInterfaceDeclaration, - updateIntersectionTypeNode, - updateJSDoc, - updateJSDocAugmentsTag, - updateJSDocCallbackTag, - updateJSDocDeprecatedTag, - updateJSDocImplementsTag, - updateJSDocImportTag, - updateJSDocLink, - updateJSDocLinkCode, - updateJSDocLinkPlain, - updateJSDocNameReference, - updateJSDocNonNullableType, - updateJSDocNullableType, - updateJSDocOptionalType, - updateJSDocOverloadTag, - updateJSDocOverrideTag, - updateJSDocPrivateTag, - updateJSDocProtectedTag, - updateJSDocPublicTag, - updateJSDocReadonlyTag, - updateJSDocReturnTag, - updateJSDocSatisfiesTag, - updateJSDocSeeTag, - updateJSDocSignature, - updateJSDocTemplateTag, - updateJSDocThisTag, - updateJSDocThrowsTag, - updateJSDocTypedefTag, - updateJSDocTypeExpression, - updateJSDocTypeLiteral, - updateJSDocTypeTag, - updateJSDocUnknownTag, - updateJSDocVariadicType, - updateJsxAttribute, - updateJsxAttributes, - updateJsxClosingElement, - updateJsxElement, - updateJsxExpression, - updateJsxFragment, - updateJsxNamespacedName, - updateJsxOpeningElement, - updateJsxSelfClosingElement, - updateJsxSpreadAttribute, - updateLabeledStatement, - updateLiteralTypeNode, - updateMappedTypeNode, - updateMetaProperty, - updateMethodDeclaration, - updateMethodSignatureDeclaration, - updateMissingDeclaration, - updateModuleBlock, - updateModuleDeclaration, - updateNamedExports, - updateNamedImports, - updateNamedTupleMember, - updateNamespaceExport, - updateNamespaceExportDeclaration, - updateNamespaceImport, - updateNewExpression, - updateNonNullExpression, - updateObjectBindingPattern, - updateObjectLiteralExpression, - updateOptionalTypeNode, - updateParameterDeclaration, - updateParenthesizedExpression, - updateParenthesizedTypeNode, - updatePartiallyEmittedExpression, - updatePostfixUnaryExpression, - updatePrefixUnaryExpression, - updatePropertyAccessExpression, - updatePropertyAssignment, - updatePropertyDeclaration, - updatePropertySignatureDeclaration, - updateQualifiedName, - updateRestTypeNode, - updateReturnStatement, - updateSatisfiesExpression, - updateSetAccessorDeclaration, - updateShorthandPropertyAssignment, - updateSourceFile, - updateSpreadAssignment, - updateSpreadElement, - updateSwitchStatement, - updateSyntaxList, - updateSyntheticExpression, - updateSyntheticReferenceExpression, - updateTaggedTemplateExpression, - updateTemplateExpression, - updateTemplateLiteralTypeNode, - updateTemplateLiteralTypeSpan, - updateTemplateSpan, - updateThrowStatement, - updateTryStatement, - updateTupleTypeNode, - updateTypeAliasDeclaration, - updateTypeAssertion, - updateTypeLiteralNode, - updateTypeOfExpression, - updateTypeOperatorNode, - updateTypeParameterDeclaration, - updateTypePredicateNode, - updateTypeQueryNode, - updateTypeReferenceNode, - updateUnionTypeNode, - updateVariableDeclaration, - updateVariableDeclarationList, - updateVariableStatement, - updateVoidExpression, - updateWhileStatement, - updateWithStatement, - updateYieldExpression, -} from "./factory.generated.ts"; -import { - isAssertsKeyword, - isAsteriskToken, - isAwaitKeyword, - isBinaryOperatorToken, - isBindingName, - isBlock, - isCaseBlock, - isCatchClause, - isColonToken, - isConciseBody, - isDotDotDotToken, - isEndOfFile, - isEntityName, - isEqualsGreaterThanToken, - isEqualsToken, - isExclamationToken, - isExpression, - isExpressionWithTypeArguments, - isForInitializer, - isFunctionBody, - isIdentifier, - isImportAttributeName, - isImportAttributes, - isImportClause, - isJSDocFullName, - isJsxAttributeName, - isJsxAttributes, - isJsxAttributeValue, - isJsxClosingElement, - isJsxClosingFragment, - isJsxOpeningElement, - isJsxOpeningFragment, - isJsxTagNameExpression, - isLeftHandSideExpression, - isMemberName, - isModuleBody, - isModuleExportName, - isModuleName, - isModuleReference, - isNamedExportBindings, - isNamedImportBindings, - isPropertyName, - isQuestionDotToken, - isQuestionOrExclamationToken, - isQuestionOrPlusOrMinusToken, - isQuestionToken, - isReadonlyKeywordOrPlusOrMinusToken, - isStatement, - isTemplateHead, - isTemplateLiteral, - isTemplateMiddleOrTail, - isTypeLiteralNode, - isTypeNode, - isTypeParameterDeclaration, - isTypePredicateParameterName, - isVariableDeclaration, - isVariableDeclarationList, -} from "./is.ts"; -import { - visitEachChildOfJSDocParameterTag, - visitEachChildOfJSDocPropertyTag, -} from "./visitor.ts"; - -/** - * A callback that receives a node and returns a visited node (or undefined to remove it). - */ -export type Visitor = (node: Node) => Node | undefined; - -/** - * Visits a Node using the supplied visitor, possibly returning a new Node in its place. - * - * - If the input node is undefined, then the output is undefined. - * - If the visitor returns undefined, then the output is undefined. - * - If the output node is not undefined, then it will satisfy the test function. - * - In order to obtain a return type that is more specific than `Node`, a test - * function must be provided, and that function must be a type predicate. - * - * @param node The Node to visit. - * @param visitor The callback used to visit the Node. - * @param test A callback to execute to verify the Node is valid. - */ -export function visitNode( - node: TIn, - visitor: Visitor, - test: (node: Node) => node is TOut, -): TOut | (TIn & undefined); -/** - * Visits a Node using the supplied visitor, possibly returning a new Node in its place. - * - * - If the input node is undefined, then the output is undefined. - * - If the visitor returns undefined, then the output is undefined. - * - * @param node The Node to visit. - * @param visitor The callback used to visit the Node. - * @param test An optional callback to execute to verify the Node is valid. - */ -export function visitNode( - node: TIn, - visitor: Visitor, - test?: (node: Node) => boolean, -): Node | (TIn & undefined); -export function visitNode(node: Node | undefined, visitor: Visitor, test?: (node: Node) => boolean): Node | undefined { - if (node === undefined) return undefined; - const visited = visitor(node); - if (visited !== undefined && test !== undefined && !test(visited)) { - throw new Error("Visited node failed test assertion."); - } - return visited; -} - -/** - * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place. - * - * - If the input node array is undefined, the output is undefined. - * - If the visitor returns undefined for a node, that node is dropped from the result. - */ -export function visitNodes(nodes: NodeArray, visitor: Visitor): NodeArray; -export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined; -export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined { - if (nodes === undefined) return undefined; - const updated = visitNodesArray(nodes, visitor); - if (updated === nodes) { - return nodes; - } - return createNodeArray(updated, nodes.pos, nodes.end); -} - -export function visitNodesArray(nodes: readonly T[], visitor: Visitor): readonly T[]; -export function visitNodesArray(nodes: readonly T[] | undefined, visitor: Visitor): readonly T[] | undefined; -export function visitNodesArray(nodes: readonly Node[] | undefined, visitor: Visitor): readonly Node[] | undefined { - if (nodes === undefined) return undefined; - let updated: Node[] | undefined; - for (let i = 0; i < nodes.length; i++) { - const node = nodes[i]; - const visited = visitor(node); - if (updated) { - if (visited) updated.push(visited); - } - else if (visited !== node) { - updated = []; - for (let j = 0; j < i; j++) updated.push(nodes[j]); - if (visited) updated.push(visited); - } - } - return updated ?? nodes; -} - -/** - * Visits each child of a Node using the supplied visitor, possibly returning a new Node of the same kind in its place. - * - * @param node The Node whose children will be visited. - * @param visitor The callback used to visit each child. - * @returns The original node if no children changed, or a new node with visited children. - */ -export function visitEachChild(node: T, visitor: Visitor): T; -export function visitEachChild(node: T | undefined, visitor: Visitor): T | undefined; -export function visitEachChild(node: Node | undefined, visitor: Visitor): Node | undefined { - if (node === undefined) return undefined; - const fn = visitEachChildTable[node.kind]; - return fn ? fn(node, visitor) : node; -} - -type VisitEachChildFunction = (node: any, visitor: Visitor) => Node; - -const visitEachChildTable: Record = { - [SyntaxKind.QualifiedName]: (node: QualifiedName, visitor: Visitor): QualifiedName => { - const _left = visitNode(node.left, visitor, isEntityName); - const _right = visitNode(node.right, visitor, isMemberName); - return updateQualifiedName(node, _left, _right); - }, - [SyntaxKind.ComputedPropertyName]: (node: ComputedPropertyName, visitor: Visitor): ComputedPropertyName => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateComputedPropertyName(node, _expression); - }, - [SyntaxKind.Decorator]: (node: Decorator, visitor: Visitor): Decorator => { - const _expression = visitNode(node.expression, visitor, isLeftHandSideExpression); - return updateDecorator(node, _expression); - }, - [SyntaxKind.IfStatement]: (node: IfStatement, visitor: Visitor): IfStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _thenStatement = visitNode(node.thenStatement, visitor, isStatement); - const _elseStatement = visitNode(node.elseStatement, visitor, isStatement); - return updateIfStatement(node, _expression, _thenStatement, _elseStatement); - }, - [SyntaxKind.DoStatement]: (node: DoStatement, visitor: Visitor): DoStatement => { - const _statement = visitNode(node.statement, visitor, isStatement); - const _expression = visitNode(node.expression, visitor, isExpression); - return updateDoStatement(node, _statement, _expression); - }, - [SyntaxKind.WhileStatement]: (node: WhileStatement, visitor: Visitor): WhileStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateWhileStatement(node, _expression, _statement); - }, - [SyntaxKind.ForStatement]: (node: ForStatement, visitor: Visitor): ForStatement => { - const _initializer = visitNode(node.initializer, visitor, isForInitializer); - const _condition = visitNode(node.condition, visitor, isExpression); - const _incrementor = visitNode(node.incrementor, visitor, isExpression); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateForStatement(node, _initializer, _condition, _incrementor, _statement); - }, - [SyntaxKind.BreakStatement]: (node: BreakStatement, visitor: Visitor): BreakStatement => { - const _label = visitNode(node.label, visitor, isIdentifier); - return updateBreakStatement(node, _label); - }, - [SyntaxKind.ContinueStatement]: (node: ContinueStatement, visitor: Visitor): ContinueStatement => { - const _label = visitNode(node.label, visitor, isIdentifier); - return updateContinueStatement(node, _label); - }, - [SyntaxKind.ReturnStatement]: (node: ReturnStatement, visitor: Visitor): ReturnStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateReturnStatement(node, _expression); - }, - [SyntaxKind.WithStatement]: (node: WithStatement, visitor: Visitor): WithStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateWithStatement(node, _expression, _statement); - }, - [SyntaxKind.SwitchStatement]: (node: SwitchStatement, visitor: Visitor): SwitchStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _caseBlock = visitNode(node.caseBlock, visitor, isCaseBlock); - return updateSwitchStatement(node, _expression, _caseBlock); - }, - [SyntaxKind.CaseBlock]: (node: CaseBlock, visitor: Visitor): CaseBlock => { - const _clauses = visitNodes(node.clauses, visitor); - return updateCaseBlock(node, _clauses); - }, - [SyntaxKind.ThrowStatement]: (node: ThrowStatement, visitor: Visitor): ThrowStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateThrowStatement(node, _expression); - }, - [SyntaxKind.TryStatement]: (node: TryStatement, visitor: Visitor): TryStatement => { - const _tryBlock = visitNode(node.tryBlock, visitor, isBlock); - const _catchClause = visitNode(node.catchClause, visitor, isCatchClause); - const _finallyBlock = visitNode(node.finallyBlock, visitor, isBlock); - return updateTryStatement(node, _tryBlock, _catchClause, _finallyBlock); - }, - [SyntaxKind.CatchClause]: (node: CatchClause, visitor: Visitor): CatchClause => { - const _variableDeclaration = visitNode(node.variableDeclaration, visitor, isVariableDeclaration); - const _block = visitNode(node.block, visitor, isBlock); - return updateCatchClause(node, _variableDeclaration, _block); - }, - [SyntaxKind.LabeledStatement]: (node: LabeledStatement, visitor: Visitor): LabeledStatement => { - const _label = visitNode(node.label, visitor, isIdentifier); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateLabeledStatement(node, _label, _statement); - }, - [SyntaxKind.ExpressionStatement]: (node: ExpressionStatement, visitor: Visitor): ExpressionStatement => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateExpressionStatement(node, _expression); - }, - [SyntaxKind.Block]: (node: Block, visitor: Visitor): Block => { - const _statements = visitNodes(node.statements, visitor); - return updateBlock(node, _statements); - }, - [SyntaxKind.VariableStatement]: (node: VariableStatement, visitor: Visitor): VariableStatement => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _declarationList = visitNode(node.declarationList, visitor, isVariableDeclarationList); - return updateVariableStatement(node, _modifiers, _declarationList); - }, - [SyntaxKind.VariableDeclaration]: (node: VariableDeclaration, visitor: Visitor): VariableDeclaration => { - const _name = visitNode(node.name, visitor, isBindingName); - const _exclamationToken = visitNode(node.exclamationToken, visitor, isExclamationToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updateVariableDeclaration(node, _name, _exclamationToken, _type, _initializer); - }, - [SyntaxKind.VariableDeclarationList]: (node: VariableDeclarationList, visitor: Visitor): VariableDeclarationList => { - const _declarations = visitNodes(node.declarations, visitor); - return updateVariableDeclarationList(node, _declarations); - }, - [SyntaxKind.Parameter]: (node: ParameterDeclaration, visitor: Visitor): ParameterDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); - const _name = visitNode(node.name, visitor, isBindingName); - const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updateParameterDeclaration(node, _modifiers, _dotDotDotToken, _name, _questionToken, _type, _initializer); - }, - [SyntaxKind.BindingElement]: (node: BindingElement, visitor: Visitor): BindingElement => { - const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); - const _propertyName = visitNode(node.propertyName, visitor, isPropertyName); - const _name = visitNode(node.name, visitor, isBindingName); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updateBindingElement(node, _dotDotDotToken, _propertyName, _name, _initializer); - }, - [SyntaxKind.MissingDeclaration]: (node: MissingDeclaration, visitor: Visitor): MissingDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - return updateMissingDeclaration(node, _modifiers); - }, - [SyntaxKind.FunctionDeclaration]: (node: FunctionDeclaration, visitor: Visitor): FunctionDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateFunctionDeclaration(node, _modifiers, _asteriskToken, _name, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.ClassDeclaration]: (node: ClassDeclaration, visitor: Visitor): ClassDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _heritageClauses = visitNodes(node.heritageClauses, visitor); - const _members = visitNodes(node.members, visitor); - return updateClassDeclaration(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); - }, - [SyntaxKind.ClassExpression]: (node: ClassExpression, visitor: Visitor): ClassExpression => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _heritageClauses = visitNodes(node.heritageClauses, visitor); - const _members = visitNodes(node.members, visitor); - return updateClassExpression(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); - }, - [SyntaxKind.HeritageClause]: (node: HeritageClause, visitor: Visitor): HeritageClause => { - const _types = visitNodes(node.types, visitor); - return updateHeritageClause(node, _types); - }, - [SyntaxKind.InterfaceDeclaration]: (node: InterfaceDeclaration, visitor: Visitor): InterfaceDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _heritageClauses = visitNodes(node.heritageClauses, visitor); - const _members = visitNodes(node.members, visitor); - return updateInterfaceDeclaration(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); - }, - [SyntaxKind.TypeAliasDeclaration]: (node: TypeAliasDeclaration, visitor: Visitor): TypeAliasDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateTypeAliasDeclaration(node, _modifiers, _name, _typeParameters, _type); - }, - [SyntaxKind.EnumMember]: (node: EnumMember, visitor: Visitor): EnumMember => { - const _name = visitNode(node.name, visitor, isPropertyName); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updateEnumMember(node, _name, _initializer); - }, - [SyntaxKind.EnumDeclaration]: (node: EnumDeclaration, visitor: Visitor): EnumDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _members = visitNodes(node.members, visitor); - return updateEnumDeclaration(node, _modifiers, _name, _members); - }, - [SyntaxKind.ModuleBlock]: (node: ModuleBlock, visitor: Visitor): ModuleBlock => { - const _statements = visitNodes(node.statements, visitor); - return updateModuleBlock(node, _statements); - }, - [SyntaxKind.ImportDeclaration]: (node: ImportDeclaration, visitor: Visitor): ImportDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _importClause = visitNode(node.importClause, visitor, isImportClause); - const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); - const _attributes = visitNode(node.attributes, visitor, isImportAttributes); - return updateImportDeclaration(node, _modifiers, _importClause, _moduleSpecifier, _attributes); - }, - [SyntaxKind.ExternalModuleReference]: (node: ExternalModuleReference, visitor: Visitor): ExternalModuleReference => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateExternalModuleReference(node, _expression); - }, - [SyntaxKind.NamespaceImport]: (node: NamespaceImport, visitor: Visitor): NamespaceImport => { - const _name = visitNode(node.name, visitor, isIdentifier); - return updateNamespaceImport(node, _name); - }, - [SyntaxKind.NamedImports]: (node: NamedImports, visitor: Visitor): NamedImports => { - const _elements = visitNodes(node.elements, visitor); - return updateNamedImports(node, _elements); - }, - [SyntaxKind.ExportAssignment]: (node: ExportAssignment, visitor: Visitor): ExportAssignment => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _expression = visitNode(node.expression, visitor, isExpression); - return updateExportAssignment(node, _modifiers, _type, _expression); - }, - [SyntaxKind.NamespaceExportDeclaration]: (node: NamespaceExportDeclaration, visitor: Visitor): NamespaceExportDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - return updateNamespaceExportDeclaration(node, _modifiers, _name); - }, - [SyntaxKind.NamespaceExport]: (node: NamespaceExport, visitor: Visitor): NamespaceExport => { - const _name = visitNode(node.name, visitor, isModuleExportName); - return updateNamespaceExport(node, _name); - }, - [SyntaxKind.NamedExports]: (node: NamedExports, visitor: Visitor): NamedExports => { - const _elements = visitNodes(node.elements, visitor); - return updateNamedExports(node, _elements); - }, - [SyntaxKind.ExportSpecifier]: (node: ExportSpecifier, visitor: Visitor): ExportSpecifier => { - const _propertyName = visitNode(node.propertyName, visitor, isModuleExportName); - const _name = visitNode(node.name, visitor, isModuleExportName); - return updateExportSpecifier(node, _propertyName, _name); - }, - [SyntaxKind.CallSignature]: (node: CallSignatureDeclaration, visitor: Visitor): CallSignatureDeclaration => { - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateCallSignatureDeclaration(node, _typeParameters, _parameters, _type); - }, - [SyntaxKind.ConstructSignature]: (node: ConstructSignatureDeclaration, visitor: Visitor): ConstructSignatureDeclaration => { - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateConstructSignatureDeclaration(node, _typeParameters, _parameters, _type); - }, - [SyntaxKind.Constructor]: (node: ConstructorDeclaration, visitor: Visitor): ConstructorDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateConstructorDeclaration(node, _modifiers, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.GetAccessor]: (node: GetAccessorDeclaration, visitor: Visitor): GetAccessorDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateGetAccessorDeclaration(node, _modifiers, _name, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.SetAccessor]: (node: SetAccessorDeclaration, visitor: Visitor): SetAccessorDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateSetAccessorDeclaration(node, _modifiers, _name, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.IndexSignature]: (node: IndexSignatureDeclaration, visitor: Visitor): IndexSignatureDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateIndexSignatureDeclaration(node, _modifiers, _parameters, _type); - }, - [SyntaxKind.MethodSignature]: (node: MethodSignatureDeclaration, visitor: Visitor): MethodSignatureDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateMethodSignatureDeclaration(node, _modifiers, _name, _postfixToken, _typeParameters, _parameters, _type); - }, - [SyntaxKind.MethodDeclaration]: (node: MethodDeclaration, visitor: Visitor): MethodDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateMethodDeclaration(node, _modifiers, _asteriskToken, _name, _postfixToken, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.PropertySignature]: (node: PropertySignatureDeclaration, visitor: Visitor): PropertySignatureDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updatePropertySignatureDeclaration(node, _modifiers, _name, _postfixToken, _type, _initializer); - }, - [SyntaxKind.PropertyDeclaration]: (node: PropertyDeclaration, visitor: Visitor): PropertyDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updatePropertyDeclaration(node, _modifiers, _name, _postfixToken, _type, _initializer); - }, - [SyntaxKind.ClassStaticBlockDeclaration]: (node: ClassStaticBlockDeclaration, visitor: Visitor): ClassStaticBlockDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _body = visitNode(node.body, visitor, isBlock); - return updateClassStaticBlockDeclaration(node, _modifiers, _body); - }, - [SyntaxKind.BinaryExpression]: (node: BinaryExpression, visitor: Visitor): BinaryExpression => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _left = visitNode(node.left, visitor, isExpression); - const _type = visitNode(node.type, visitor, isTypeNode); - const _operatorToken = visitNode(node.operatorToken, visitor, isBinaryOperatorToken); - const _right = visitNode(node.right, visitor, isExpression); - return updateBinaryExpression(node, _modifiers, _left, _type, _operatorToken, _right); - }, - [SyntaxKind.PrefixUnaryExpression]: (node: PrefixUnaryExpression, visitor: Visitor): PrefixUnaryExpression => { - const _operand = visitNode(node.operand, visitor, isExpression); - return updatePrefixUnaryExpression(node, _operand); - }, - [SyntaxKind.PostfixUnaryExpression]: (node: PostfixUnaryExpression, visitor: Visitor): PostfixUnaryExpression => { - const _operand = visitNode(node.operand, visitor, isExpression); - return updatePostfixUnaryExpression(node, _operand); - }, - [SyntaxKind.YieldExpression]: (node: YieldExpression, visitor: Visitor): YieldExpression => { - const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); - const _expression = visitNode(node.expression, visitor, isExpression); - return updateYieldExpression(node, _asteriskToken, _expression); - }, - [SyntaxKind.ArrowFunction]: (node: ArrowFunction, visitor: Visitor): ArrowFunction => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _equalsGreaterThanToken = visitNode(node.equalsGreaterThanToken, visitor, isEqualsGreaterThanToken); - const _body = visitNode(node.body, visitor, isConciseBody); - return updateArrowFunction(node, _modifiers, _typeParameters, _parameters, _type, _equalsGreaterThanToken, _body); - }, - [SyntaxKind.FunctionExpression]: (node: FunctionExpression, visitor: Visitor): FunctionExpression => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); - const _name = visitNode(node.name, visitor, isIdentifier); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - const _body = visitNode(node.body, visitor, isFunctionBody); - return updateFunctionExpression(node, _modifiers, _asteriskToken, _name, _typeParameters, _parameters, _type, _body); - }, - [SyntaxKind.AsExpression]: (node: AsExpression, visitor: Visitor): AsExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateAsExpression(node, _expression, _type); - }, - [SyntaxKind.SatisfiesExpression]: (node: SatisfiesExpression, visitor: Visitor): SatisfiesExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateSatisfiesExpression(node, _expression, _type); - }, - [SyntaxKind.ConditionalExpression]: (node: ConditionalExpression, visitor: Visitor): ConditionalExpression => { - const _condition = visitNode(node.condition, visitor, isExpression); - const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); - const _whenTrue = visitNode(node.whenTrue, visitor, isExpression); - const _colonToken = visitNode(node.colonToken, visitor, isColonToken); - const _whenFalse = visitNode(node.whenFalse, visitor, isExpression); - return updateConditionalExpression(node, _condition, _questionToken, _whenTrue, _colonToken, _whenFalse); - }, - [SyntaxKind.PropertyAccessExpression]: (node: PropertyAccessExpression, visitor: Visitor): PropertyAccessExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); - const _name = visitNode(node.name, visitor, isMemberName); - return updatePropertyAccessExpression(node, _expression, _questionDotToken, _name); - }, - [SyntaxKind.ElementAccessExpression]: (node: ElementAccessExpression, visitor: Visitor): ElementAccessExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); - const _argumentExpression = visitNode(node.argumentExpression, visitor, isExpression); - return updateElementAccessExpression(node, _expression, _questionDotToken, _argumentExpression); - }, - [SyntaxKind.CallExpression]: (node: CallExpression, visitor: Visitor): CallExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); - const _typeArguments = visitNodes(node.typeArguments, visitor); - const _arguments = visitNodes(node.arguments, visitor); - return updateCallExpression(node, _expression, _questionDotToken, _typeArguments, _arguments); - }, - [SyntaxKind.NewExpression]: (node: NewExpression, visitor: Visitor): NewExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _typeArguments = visitNodes(node.typeArguments, visitor); - const _arguments = visitNodes(node.arguments, visitor); - return updateNewExpression(node, _expression, _typeArguments, _arguments); - }, - [SyntaxKind.MetaProperty]: (node: MetaProperty, visitor: Visitor): MetaProperty => { - const _name = visitNode(node.name, visitor, isIdentifier); - return updateMetaProperty(node, _name); - }, - [SyntaxKind.NonNullExpression]: (node: NonNullExpression, visitor: Visitor): NonNullExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateNonNullExpression(node, _expression); - }, - [SyntaxKind.SpreadElement]: (node: SpreadElement, visitor: Visitor): SpreadElement => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateSpreadElement(node, _expression); - }, - [SyntaxKind.TemplateExpression]: (node: TemplateExpression, visitor: Visitor): TemplateExpression => { - const _head = visitNode(node.head, visitor, isTemplateHead); - const _templateSpans = visitNodes(node.templateSpans, visitor); - return updateTemplateExpression(node, _head, _templateSpans); - }, - [SyntaxKind.TemplateSpan]: (node: TemplateSpan, visitor: Visitor): TemplateSpan => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _literal = visitNode(node.literal, visitor, isTemplateMiddleOrTail); - return updateTemplateSpan(node, _expression, _literal); - }, - [SyntaxKind.TaggedTemplateExpression]: (node: TaggedTemplateExpression, visitor: Visitor): TaggedTemplateExpression => { - const _tag = visitNode(node.tag, visitor, isExpression); - const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); - const _typeArguments = visitNodes(node.typeArguments, visitor); - const _template = visitNode(node.template, visitor, isTemplateLiteral); - return updateTaggedTemplateExpression(node, _tag, _questionDotToken, _typeArguments, _template); - }, - [SyntaxKind.ParenthesizedExpression]: (node: ParenthesizedExpression, visitor: Visitor): ParenthesizedExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateParenthesizedExpression(node, _expression); - }, - [SyntaxKind.ArrayLiteralExpression]: (node: ArrayLiteralExpression, visitor: Visitor): ArrayLiteralExpression => { - const _elements = visitNodes(node.elements, visitor); - return updateArrayLiteralExpression(node, _elements); - }, - [SyntaxKind.ObjectLiteralExpression]: (node: ObjectLiteralExpression, visitor: Visitor): ObjectLiteralExpression => { - const _properties = visitNodes(node.properties, visitor); - return updateObjectLiteralExpression(node, _properties); - }, - [SyntaxKind.SpreadAssignment]: (node: SpreadAssignment, visitor: Visitor): SpreadAssignment => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateSpreadAssignment(node, _expression); - }, - [SyntaxKind.PropertyAssignment]: (node: PropertyAssignment, visitor: Visitor): PropertyAssignment => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _initializer = visitNode(node.initializer, visitor, isExpression); - return updatePropertyAssignment(node, _modifiers, _name, _postfixToken, _type, _initializer); - }, - [SyntaxKind.ShorthandPropertyAssignment]: (node: ShorthandPropertyAssignment, visitor: Visitor): ShorthandPropertyAssignment => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isPropertyName); - const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _equalsToken = visitNode(node.equalsToken, visitor, isEqualsToken); - const _objectAssignmentInitializer = visitNode(node.objectAssignmentInitializer, visitor, isExpression); - return updateShorthandPropertyAssignment(node, _modifiers, _name, _postfixToken, _type, _equalsToken, _objectAssignmentInitializer); - }, - [SyntaxKind.DeleteExpression]: (node: DeleteExpression, visitor: Visitor): DeleteExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateDeleteExpression(node, _expression); - }, - [SyntaxKind.TypeOfExpression]: (node: TypeOfExpression, visitor: Visitor): TypeOfExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateTypeOfExpression(node, _expression); - }, - [SyntaxKind.VoidExpression]: (node: VoidExpression, visitor: Visitor): VoidExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateVoidExpression(node, _expression); - }, - [SyntaxKind.AwaitExpression]: (node: AwaitExpression, visitor: Visitor): AwaitExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateAwaitExpression(node, _expression); - }, - [SyntaxKind.TypeAssertionExpression]: (node: TypeAssertion, visitor: Visitor): TypeAssertion => { - const _type = visitNode(node.type, visitor, isTypeNode); - const _expression = visitNode(node.expression, visitor, isExpression); - return updateTypeAssertion(node, _type, _expression); - }, - [SyntaxKind.UnionType]: (node: UnionTypeNode, visitor: Visitor): UnionTypeNode => { - const _types = visitNodes(node.types, visitor); - return updateUnionTypeNode(node, _types); - }, - [SyntaxKind.IntersectionType]: (node: IntersectionTypeNode, visitor: Visitor): IntersectionTypeNode => { - const _types = visitNodes(node.types, visitor); - return updateIntersectionTypeNode(node, _types); - }, - [SyntaxKind.ConditionalType]: (node: ConditionalTypeNode, visitor: Visitor): ConditionalTypeNode => { - const _checkType = visitNode(node.checkType, visitor, isTypeNode); - const _extendsType = visitNode(node.extendsType, visitor, isTypeNode); - const _trueType = visitNode(node.trueType, visitor, isTypeNode); - const _falseType = visitNode(node.falseType, visitor, isTypeNode); - return updateConditionalTypeNode(node, _checkType, _extendsType, _trueType, _falseType); - }, - [SyntaxKind.TypeOperator]: (node: TypeOperatorNode, visitor: Visitor): TypeOperatorNode => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateTypeOperatorNode(node, _type); - }, - [SyntaxKind.InferType]: (node: InferTypeNode, visitor: Visitor): InferTypeNode => { - const _typeParameter = visitNode(node.typeParameter, visitor, isTypeParameterDeclaration); - return updateInferTypeNode(node, _typeParameter); - }, - [SyntaxKind.ArrayType]: (node: ArrayTypeNode, visitor: Visitor): ArrayTypeNode => { - const _elementType = visitNode(node.elementType, visitor, isTypeNode); - return updateArrayTypeNode(node, _elementType); - }, - [SyntaxKind.IndexedAccessType]: (node: IndexedAccessTypeNode, visitor: Visitor): IndexedAccessTypeNode => { - const _objectType = visitNode(node.objectType, visitor, isTypeNode); - const _indexType = visitNode(node.indexType, visitor, isTypeNode); - return updateIndexedAccessTypeNode(node, _objectType, _indexType); - }, - [SyntaxKind.TypeReference]: (node: TypeReferenceNode, visitor: Visitor): TypeReferenceNode => { - const _typeName = visitNode(node.typeName, visitor, isEntityName); - const _typeArguments = visitNodes(node.typeArguments, visitor); - return updateTypeReferenceNode(node, _typeName, _typeArguments); - }, - [SyntaxKind.ExpressionWithTypeArguments]: (node: ExpressionWithTypeArguments, visitor: Visitor): ExpressionWithTypeArguments => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _typeArguments = visitNodes(node.typeArguments, visitor); - return updateExpressionWithTypeArguments(node, _expression, _typeArguments); - }, - [SyntaxKind.LiteralType]: (node: LiteralTypeNode, visitor: Visitor): LiteralTypeNode => { - const _literal = visitNode(node.literal, visitor); - return updateLiteralTypeNode(node, _literal); - }, - [SyntaxKind.TypePredicate]: (node: TypePredicateNode, visitor: Visitor): TypePredicateNode => { - const _assertsModifier = visitNode(node.assertsModifier, visitor, isAssertsKeyword); - const _parameterName = visitNode(node.parameterName, visitor, isTypePredicateParameterName); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateTypePredicateNode(node, _assertsModifier, _parameterName, _type); - }, - [SyntaxKind.ImportAttribute]: (node: ImportAttribute, visitor: Visitor): ImportAttribute => { - const _name = visitNode(node.name, visitor, isImportAttributeName); - const _value = visitNode(node.value, visitor, isExpression); - return updateImportAttribute(node, _name, _value); - }, - [SyntaxKind.ImportAttributes]: (node: ImportAttributes, visitor: Visitor): ImportAttributes => { - const _attributes = visitNodes(node.attributes, visitor); - return updateImportAttributes(node, _attributes); - }, - [SyntaxKind.TypeQuery]: (node: TypeQueryNode, visitor: Visitor): TypeQueryNode => { - const _exprName = visitNode(node.exprName, visitor, isEntityName); - const _typeArguments = visitNodes(node.typeArguments, visitor); - return updateTypeQueryNode(node, _exprName, _typeArguments); - }, - [SyntaxKind.MappedType]: (node: MappedTypeNode, visitor: Visitor): MappedTypeNode => { - const _readonlyToken = visitNode(node.readonlyToken, visitor, isReadonlyKeywordOrPlusOrMinusToken); - const _typeParameter = visitNode(node.typeParameter, visitor, isTypeParameterDeclaration); - const _nameType = visitNode(node.nameType, visitor, isTypeNode); - const _questionToken = visitNode(node.questionToken, visitor, isQuestionOrPlusOrMinusToken); - const _type = visitNode(node.type, visitor, isTypeNode); - const _members = visitNodes(node.members, visitor); - return updateMappedTypeNode(node, _readonlyToken, _typeParameter, _nameType, _questionToken, _type, _members); - }, - [SyntaxKind.TypeLiteral]: (node: TypeLiteralNode, visitor: Visitor): TypeLiteralNode => { - const _members = visitNodes(node.members, visitor); - return updateTypeLiteralNode(node, _members); - }, - [SyntaxKind.TupleType]: (node: TupleTypeNode, visitor: Visitor): TupleTypeNode => { - const _elements = visitNodes(node.elements, visitor); - return updateTupleTypeNode(node, _elements); - }, - [SyntaxKind.NamedTupleMember]: (node: NamedTupleMember, visitor: Visitor): NamedTupleMember => { - const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); - const _name = visitNode(node.name, visitor, isIdentifier); - const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateNamedTupleMember(node, _dotDotDotToken, _name, _questionToken, _type); - }, - [SyntaxKind.OptionalType]: (node: OptionalTypeNode, visitor: Visitor): OptionalTypeNode => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateOptionalTypeNode(node, _type); - }, - [SyntaxKind.RestType]: (node: RestTypeNode, visitor: Visitor): RestTypeNode => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateRestTypeNode(node, _type); - }, - [SyntaxKind.ParenthesizedType]: (node: ParenthesizedTypeNode, visitor: Visitor): ParenthesizedTypeNode => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateParenthesizedTypeNode(node, _type); - }, - [SyntaxKind.FunctionType]: (node: FunctionTypeNode, visitor: Visitor): FunctionTypeNode => { - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateFunctionTypeNode(node, _typeParameters, _parameters, _type); - }, - [SyntaxKind.ConstructorType]: (node: ConstructorTypeNode, visitor: Visitor): ConstructorTypeNode => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateConstructorTypeNode(node, _modifiers, _typeParameters, _parameters, _type); - }, - [SyntaxKind.TemplateLiteralType]: (node: TemplateLiteralTypeNode, visitor: Visitor): TemplateLiteralTypeNode => { - const _head = visitNode(node.head, visitor, isTemplateHead); - const _templateSpans = visitNodes(node.templateSpans, visitor); - return updateTemplateLiteralTypeNode(node, _head, _templateSpans); - }, - [SyntaxKind.TemplateLiteralTypeSpan]: (node: TemplateLiteralTypeSpan, visitor: Visitor): TemplateLiteralTypeSpan => { - const _type = visitNode(node.type, visitor, isTypeNode); - const _literal = visitNode(node.literal, visitor, isTemplateMiddleOrTail); - return updateTemplateLiteralTypeSpan(node, _type, _literal); - }, - [SyntaxKind.SyntheticExpression]: (node: SyntheticExpression, visitor: Visitor): SyntheticExpression => { - const _tupleNameSource = visitNode(node.tupleNameSource, visitor); - return updateSyntheticExpression(node, _tupleNameSource); - }, - [SyntaxKind.PartiallyEmittedExpression]: (node: PartiallyEmittedExpression, visitor: Visitor): PartiallyEmittedExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updatePartiallyEmittedExpression(node, _expression); - }, - [SyntaxKind.JsxElement]: (node: JsxElement, visitor: Visitor): JsxElement => { - const _openingElement = visitNode(node.openingElement, visitor, isJsxOpeningElement); - const _children = visitNodes(node.children, visitor); - const _closingElement = visitNode(node.closingElement, visitor, isJsxClosingElement); - return updateJsxElement(node, _openingElement, _children, _closingElement); - }, - [SyntaxKind.JsxAttributes]: (node: JsxAttributes, visitor: Visitor): JsxAttributes => { - const _properties = visitNodes(node.properties, visitor); - return updateJsxAttributes(node, _properties); - }, - [SyntaxKind.JsxNamespacedName]: (node: JsxNamespacedName, visitor: Visitor): JsxNamespacedName => { - const _namespace = visitNode(node.namespace, visitor, isIdentifier); - const _name = visitNode(node.name, visitor, isIdentifier); - return updateJsxNamespacedName(node, _namespace, _name); - }, - [SyntaxKind.JsxOpeningElement]: (node: JsxOpeningElement, visitor: Visitor): JsxOpeningElement => { - const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); - const _typeArguments = visitNodes(node.typeArguments, visitor); - const _attributes = visitNode(node.attributes, visitor, isJsxAttributes); - return updateJsxOpeningElement(node, _tagName, _typeArguments, _attributes); - }, - [SyntaxKind.JsxSelfClosingElement]: (node: JsxSelfClosingElement, visitor: Visitor): JsxSelfClosingElement => { - const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); - const _typeArguments = visitNodes(node.typeArguments, visitor); - const _attributes = visitNode(node.attributes, visitor, isJsxAttributes); - return updateJsxSelfClosingElement(node, _tagName, _typeArguments, _attributes); - }, - [SyntaxKind.JsxFragment]: (node: JsxFragment, visitor: Visitor): JsxFragment => { - const _openingFragment = visitNode(node.openingFragment, visitor, isJsxOpeningFragment); - const _children = visitNodes(node.children, visitor); - const _closingFragment = visitNode(node.closingFragment, visitor, isJsxClosingFragment); - return updateJsxFragment(node, _openingFragment, _children, _closingFragment); - }, - [SyntaxKind.JsxAttribute]: (node: JsxAttribute, visitor: Visitor): JsxAttribute => { - const _name = visitNode(node.name, visitor, isJsxAttributeName); - const _initializer = visitNode(node.initializer, visitor, isJsxAttributeValue); - return updateJsxAttribute(node, _name, _initializer); - }, - [SyntaxKind.JsxSpreadAttribute]: (node: JsxSpreadAttribute, visitor: Visitor): JsxSpreadAttribute => { - const _expression = visitNode(node.expression, visitor, isExpression); - return updateJsxSpreadAttribute(node, _expression); - }, - [SyntaxKind.JsxClosingElement]: (node: JsxClosingElement, visitor: Visitor): JsxClosingElement => { - const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); - return updateJsxClosingElement(node, _tagName); - }, - [SyntaxKind.JsxExpression]: (node: JsxExpression, visitor: Visitor): JsxExpression => { - const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); - const _expression = visitNode(node.expression, visitor, isExpression); - return updateJsxExpression(node, _dotDotDotToken, _expression); - }, - [SyntaxKind.SyntaxList]: (node: SyntaxList, visitor: Visitor): SyntaxList => { - const _children = visitNodesArray(node.children, visitor); - return updateSyntaxList(node, _children); - }, - [SyntaxKind.JSDoc]: (node: JSDoc, visitor: Visitor): JSDoc => { - const _comment = visitNodes(node.comment, visitor); - const _tags = visitNodes(node.tags, visitor); - return updateJSDoc(node, _comment, _tags); - }, - [SyntaxKind.JSDocTypeExpression]: (node: JSDocTypeExpression, visitor: Visitor): JSDocTypeExpression => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocTypeExpression(node, _type); - }, - [SyntaxKind.JSDocNonNullableType]: (node: JSDocNonNullableType, visitor: Visitor): JSDocNonNullableType => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocNonNullableType(node, _type); - }, - [SyntaxKind.JSDocNullableType]: (node: JSDocNullableType, visitor: Visitor): JSDocNullableType => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocNullableType(node, _type); - }, - [SyntaxKind.JSDocVariadicType]: (node: JSDocVariadicType, visitor: Visitor): JSDocVariadicType => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocVariadicType(node, _type); - }, - [SyntaxKind.JSDocOptionalType]: (node: JSDocOptionalType, visitor: Visitor): JSDocOptionalType => { - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocOptionalType(node, _type); - }, - [SyntaxKind.JSDocTypeTag]: (node: JSDocTypeTag, visitor: Visitor): JSDocTypeTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocTypeTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocUnknownTag]: (node: JSDocUnknownTag, visitor: Visitor): JSDocUnknownTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocUnknownTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocTemplateTag]: (node: JSDocTemplateTag, visitor: Visitor): JSDocTemplateTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _constraint = visitNode(node.constraint, visitor); - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocTemplateTag(node, _tagName, _constraint, _typeParameters, _comment); - }, - [SyntaxKind.JSDocReturnTag]: (node: JSDocReturnTag, visitor: Visitor): JSDocReturnTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocReturnTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocPublicTag]: (node: JSDocPublicTag, visitor: Visitor): JSDocPublicTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocPublicTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocPrivateTag]: (node: JSDocPrivateTag, visitor: Visitor): JSDocPrivateTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocPrivateTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocProtectedTag]: (node: JSDocProtectedTag, visitor: Visitor): JSDocProtectedTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocProtectedTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocReadonlyTag]: (node: JSDocReadonlyTag, visitor: Visitor): JSDocReadonlyTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocReadonlyTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocOverrideTag]: (node: JSDocOverrideTag, visitor: Visitor): JSDocOverrideTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocOverrideTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocDeprecatedTag]: (node: JSDocDeprecatedTag, visitor: Visitor): JSDocDeprecatedTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocDeprecatedTag(node, _tagName, _comment); - }, - [SyntaxKind.JSDocSeeTag]: (node: JSDocSeeTag, visitor: Visitor): JSDocSeeTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _nameExpression = visitNode(node.nameExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocSeeTag(node, _tagName, _nameExpression, _comment); - }, - [SyntaxKind.JSDocImplementsTag]: (node: JSDocImplementsTag, visitor: Visitor): JSDocImplementsTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _className = visitNode(node.className, visitor, isExpressionWithTypeArguments); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocImplementsTag(node, _tagName, _className, _comment); - }, - [SyntaxKind.JSDocAugmentsTag]: (node: JSDocAugmentsTag, visitor: Visitor): JSDocAugmentsTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _className = visitNode(node.className, visitor, isExpressionWithTypeArguments); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocAugmentsTag(node, _tagName, _className, _comment); - }, - [SyntaxKind.JSDocSatisfiesTag]: (node: JSDocSatisfiesTag, visitor: Visitor): JSDocSatisfiesTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocSatisfiesTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocThrowsTag]: (node: JSDocThrowsTag, visitor: Visitor): JSDocThrowsTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocThrowsTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocThisTag]: (node: JSDocThisTag, visitor: Visitor): JSDocThisTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocThisTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocImportTag]: (node: JSDocImportTag, visitor: Visitor): JSDocImportTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _importClause = visitNode(node.importClause, visitor, isImportClause); - const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); - const _attributes = visitNode(node.attributes, visitor, isImportAttributes); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocImportTag(node, _tagName, _importClause, _moduleSpecifier, _attributes, _comment); - }, - [SyntaxKind.JSDocCallbackTag]: (node: JSDocCallbackTag, visitor: Visitor): JSDocCallbackTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _name = visitNode(node.name, visitor, isJSDocFullName); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocCallbackTag(node, _tagName, _typeExpression, _name, _comment); - }, - [SyntaxKind.JSDocOverloadTag]: (node: JSDocOverloadTag, visitor: Visitor): JSDocOverloadTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocOverloadTag(node, _tagName, _typeExpression, _comment); - }, - [SyntaxKind.JSDocTypedefTag]: (node: JSDocTypedefTag, visitor: Visitor): JSDocTypedefTag => { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _typeExpression = visitNode(node.typeExpression, visitor); - const _name = visitNode(node.name, visitor, isJSDocFullName); - const _comment = visitNodes(node.comment, visitor); - return updateJSDocTypedefTag(node, _tagName, _typeExpression, _name, _comment); - }, - [SyntaxKind.JSDocSignature]: (node: JSDocSignature, visitor: Visitor): JSDocSignature => { - const _typeParameters = visitNodes(node.typeParameters, visitor); - const _parameters = visitNodes(node.parameters, visitor); - const _type = visitNode(node.type, visitor, isTypeNode); - return updateJSDocSignature(node, _typeParameters, _parameters, _type); - }, - [SyntaxKind.JSDocNameReference]: (node: JSDocNameReference, visitor: Visitor): JSDocNameReference => { - const _name = visitNode(node.name, visitor, isEntityName); - return updateJSDocNameReference(node, _name); - }, - [SyntaxKind.SourceFile]: (node: SourceFile, visitor: Visitor): SourceFile => { - const _statements = visitNodes(node.statements, visitor); - const _endOfFileToken = visitNode(node.endOfFileToken, visitor, isEndOfFile); - return updateSourceFile(node, _statements, _endOfFileToken); - }, - [SyntaxKind.ModuleDeclaration]: (node: ModuleDeclaration, visitor: Visitor): ModuleDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isModuleName); - const _attributes = visitNode(node.attributes, visitor, isTypeLiteralNode); - const _body = visitNode(node.body, visitor, isModuleBody); - return updateModuleDeclaration(node, _modifiers, _name, _attributes, _body); - }, - [SyntaxKind.ImportEqualsDeclaration]: (node: ImportEqualsDeclaration, visitor: Visitor): ImportEqualsDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _moduleReference = visitNode(node.moduleReference, visitor, isModuleReference); - return updateImportEqualsDeclaration(node, _modifiers, _name, _moduleReference); - }, - [SyntaxKind.ExportDeclaration]: (node: ExportDeclaration, visitor: Visitor): ExportDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _exportClause = visitNode(node.exportClause, visitor, isNamedExportBindings); - const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); - const _attributes = visitNode(node.attributes, visitor, isImportAttributes); - return updateExportDeclaration(node, _modifiers, _exportClause, _moduleSpecifier, _attributes); - }, - [SyntaxKind.ImportType]: (node: ImportTypeNode, visitor: Visitor): ImportTypeNode => { - const _argument = visitNode(node.argument, visitor, isTypeNode); - const _attributes = visitNode(node.attributes, visitor, isImportAttributes); - const _qualifier = visitNode(node.qualifier, visitor, isEntityName); - const _typeArguments = visitNodes(node.typeArguments, visitor); - return updateImportTypeNode(node, _argument, _attributes, _qualifier, _typeArguments); - }, - [SyntaxKind.ImportClause]: (node: ImportClause, visitor: Visitor): ImportClause => { - const _name = visitNode(node.name, visitor, isIdentifier); - const _namedBindings = visitNode(node.namedBindings, visitor, isNamedImportBindings); - return updateImportClause(node, _name, _namedBindings); - }, - [SyntaxKind.ImportSpecifier]: (node: ImportSpecifier, visitor: Visitor): ImportSpecifier => { - const _propertyName = visitNode(node.propertyName, visitor, isModuleExportName); - const _name = visitNode(node.name, visitor, isIdentifier); - return updateImportSpecifier(node, _propertyName, _name); - }, - [SyntaxKind.JSDocLink]: (node: JSDocLink, visitor: Visitor): JSDocLink => { - const _name = visitNode(node.name, visitor, isEntityName); - return updateJSDocLink(node, _name); - }, - [SyntaxKind.JSDocLinkPlain]: (node: JSDocLinkPlain, visitor: Visitor): JSDocLinkPlain => { - const _name = visitNode(node.name, visitor, isEntityName); - return updateJSDocLinkPlain(node, _name); - }, - [SyntaxKind.JSDocLinkCode]: (node: JSDocLinkCode, visitor: Visitor): JSDocLinkCode => { - const _name = visitNode(node.name, visitor, isEntityName); - return updateJSDocLinkCode(node, _name); - }, - [SyntaxKind.TypeParameter]: (node: TypeParameterDeclaration, visitor: Visitor): TypeParameterDeclaration => { - const _modifiers = visitNodes(node.modifiers, visitor); - const _name = visitNode(node.name, visitor, isIdentifier); - const _constraint = visitNode(node.constraint, visitor, isTypeNode); - const _expression = visitNode(node.expression, visitor, isExpression); - const _defaultType = visitNode(node.defaultType, visitor, isTypeNode); - return updateTypeParameterDeclaration(node, _modifiers, _name, _constraint, _expression, _defaultType); - }, - [SyntaxKind.SyntheticReferenceExpression]: (node: SyntheticReferenceExpression, visitor: Visitor): SyntheticReferenceExpression => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _thisArg = visitNode(node.thisArg, visitor, isExpression); - return updateSyntheticReferenceExpression(node, _expression, _thisArg); - }, - [SyntaxKind.JSDocTypeLiteral]: (node: JSDocTypeLiteral, visitor: Visitor): JSDocTypeLiteral => { - const _jsdocPropertyTags = visitNodesArray(node.jsdocPropertyTags, visitor); - return updateJSDocTypeLiteral(node, _jsdocPropertyTags); - }, - [SyntaxKind.ForInStatement]: (node: ForInStatement, visitor: Visitor): ForInStatement => { - const _awaitModifier = visitNode(node.awaitModifier, visitor, isAwaitKeyword); - const _initializer = visitNode(node.initializer, visitor, isForInitializer); - const _expression = visitNode(node.expression, visitor, isExpression); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateForInStatement(node, _awaitModifier, _initializer, _expression, _statement); - }, - [SyntaxKind.ForOfStatement]: (node: ForOfStatement, visitor: Visitor): ForOfStatement => { - const _awaitModifier = visitNode(node.awaitModifier, visitor, isAwaitKeyword); - const _initializer = visitNode(node.initializer, visitor, isForInitializer); - const _expression = visitNode(node.expression, visitor, isExpression); - const _statement = visitNode(node.statement, visitor, isStatement); - return updateForOfStatement(node, _awaitModifier, _initializer, _expression, _statement); - }, - [SyntaxKind.CaseClause]: (node: CaseClause, visitor: Visitor): CaseClause => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _statements = visitNodes(node.statements, visitor); - return updateCaseClause(node, _expression, _statements); - }, - [SyntaxKind.DefaultClause]: (node: DefaultClause, visitor: Visitor): DefaultClause => { - const _expression = visitNode(node.expression, visitor, isExpression); - const _statements = visitNodes(node.statements, visitor); - return updateDefaultClause(node, _expression, _statements); - }, - [SyntaxKind.ObjectBindingPattern]: (node: ObjectBindingPattern, visitor: Visitor): ObjectBindingPattern => { - const _elements = visitNodes(node.elements, visitor); - return updateObjectBindingPattern(node, _elements); - }, - [SyntaxKind.ArrayBindingPattern]: (node: ArrayBindingPattern, visitor: Visitor): ArrayBindingPattern => { - const _elements = visitNodes(node.elements, visitor); - return updateArrayBindingPattern(node, _elements); - }, - [SyntaxKind.JSDocParameterTag]: visitEachChildOfJSDocParameterTag, - [SyntaxKind.JSDocPropertyTag]: visitEachChildOfJSDocPropertyTag, -}; +// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. + +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + ArrayBindingPattern, + ArrayLiteralExpression, + ArrayTypeNode, + ArrowFunction, + AsExpression, + AwaitExpression, + BinaryExpression, + BindingElement, + Block, + BreakStatement, + CallExpression, + CallSignatureDeclaration, + CaseBlock, + CaseClause, + CatchClause, + ClassDeclaration, + ClassExpression, + ClassStaticBlockDeclaration, + ComputedPropertyName, + ConditionalExpression, + ConditionalTypeNode, + ConstructorDeclaration, + ConstructorTypeNode, + ConstructSignatureDeclaration, + ContinueStatement, + Decorator, + DefaultClause, + DeleteExpression, + DoStatement, + ElementAccessExpression, + EnumDeclaration, + EnumMember, + ExportAssignment, + ExportDeclaration, + ExportSpecifier, + ExpressionStatement, + ExpressionWithTypeArguments, + ExternalModuleReference, + ForInStatement, + ForOfStatement, + ForStatement, + FunctionDeclaration, + FunctionExpression, + FunctionTypeNode, + GetAccessorDeclaration, + HeritageClause, + IfStatement, + ImportAttribute, + ImportAttributes, + ImportClause, + ImportDeclaration, + ImportEqualsDeclaration, + ImportSpecifier, + ImportTypeNode, + IndexedAccessTypeNode, + IndexSignatureDeclaration, + InferTypeNode, + InterfaceDeclaration, + IntersectionTypeNode, + JSDoc, + JSDocAugmentsTag, + JSDocCallbackTag, + JSDocDeprecatedTag, + JSDocImplementsTag, + JSDocImportTag, + JSDocLink, + JSDocLinkCode, + JSDocLinkPlain, + JSDocNameReference, + JSDocNonNullableType, + JSDocNullableType, + JSDocOptionalType, + JSDocOverloadTag, + JSDocOverrideTag, + JSDocParameterTag, + JSDocPrivateTag, + JSDocPropertyTag, + JSDocProtectedTag, + JSDocPublicTag, + JSDocReadonlyTag, + JSDocReturnTag, + JSDocSatisfiesTag, + JSDocSeeTag, + JSDocSignature, + JSDocTemplateTag, + JSDocThisTag, + JSDocThrowsTag, + JSDocTypedefTag, + JSDocTypeExpression, + JSDocTypeLiteral, + JSDocTypeTag, + JSDocUnknownTag, + JSDocVariadicType, + JsxAttribute, + JsxAttributes, + JsxClosingElement, + JsxElement, + JsxExpression, + JsxFragment, + JsxNamespacedName, + JsxOpeningElement, + JsxSelfClosingElement, + JsxSpreadAttribute, + LabeledStatement, + LiteralTypeNode, + MappedTypeNode, + MetaProperty, + MethodDeclaration, + MethodSignatureDeclaration, + MissingDeclaration, + ModuleBlock, + ModuleDeclaration, + NamedExports, + NamedImports, + NamedTupleMember, + NamespaceExport, + NamespaceExportDeclaration, + NamespaceImport, + NewExpression, + Node, + NodeArray, + NonNullExpression, + ObjectBindingPattern, + ObjectLiteralExpression, + OptionalTypeNode, + ParameterDeclaration, + ParenthesizedExpression, + ParenthesizedTypeNode, + PartiallyEmittedExpression, + PostfixUnaryExpression, + PrefixUnaryExpression, + PropertyAccessExpression, + PropertyAssignment, + PropertyDeclaration, + PropertySignatureDeclaration, + QualifiedName, + RestTypeNode, + ReturnStatement, + SatisfiesExpression, + SetAccessorDeclaration, + ShorthandPropertyAssignment, + SourceFile, + SpreadAssignment, + SpreadElement, + SwitchStatement, + SyntaxList, + SyntheticExpression, + SyntheticReferenceExpression, + TaggedTemplateExpression, + TemplateExpression, + TemplateLiteralTypeNode, + TemplateLiteralTypeSpan, + TemplateSpan, + ThrowStatement, + TryStatement, + TupleTypeNode, + TypeAliasDeclaration, + TypeAssertion, + TypeLiteralNode, + TypeOfExpression, + TypeOperatorNode, + TypeParameterDeclaration, + TypePredicateNode, + TypeQueryNode, + TypeReferenceNode, + UnionTypeNode, + VariableDeclaration, + VariableDeclarationList, + VariableStatement, + VoidExpression, + WhileStatement, + WithStatement, + YieldExpression, +} from "./ast.ts"; +import { + createNodeArray, + updateArrayBindingPattern, + updateArrayLiteralExpression, + updateArrayTypeNode, + updateArrowFunction, + updateAsExpression, + updateAwaitExpression, + updateBinaryExpression, + updateBindingElement, + updateBlock, + updateBreakStatement, + updateCallExpression, + updateCallSignatureDeclaration, + updateCaseBlock, + updateCaseClause, + updateCatchClause, + updateClassDeclaration, + updateClassExpression, + updateClassStaticBlockDeclaration, + updateComputedPropertyName, + updateConditionalExpression, + updateConditionalTypeNode, + updateConstructorDeclaration, + updateConstructorTypeNode, + updateConstructSignatureDeclaration, + updateContinueStatement, + updateDecorator, + updateDefaultClause, + updateDeleteExpression, + updateDoStatement, + updateElementAccessExpression, + updateEnumDeclaration, + updateEnumMember, + updateExportAssignment, + updateExportDeclaration, + updateExportSpecifier, + updateExpressionStatement, + updateExpressionWithTypeArguments, + updateExternalModuleReference, + updateForInStatement, + updateForOfStatement, + updateForStatement, + updateFunctionDeclaration, + updateFunctionExpression, + updateFunctionTypeNode, + updateGetAccessorDeclaration, + updateHeritageClause, + updateIfStatement, + updateImportAttribute, + updateImportAttributes, + updateImportClause, + updateImportDeclaration, + updateImportEqualsDeclaration, + updateImportSpecifier, + updateImportTypeNode, + updateIndexedAccessTypeNode, + updateIndexSignatureDeclaration, + updateInferTypeNode, + updateInterfaceDeclaration, + updateIntersectionTypeNode, + updateJSDoc, + updateJSDocAugmentsTag, + updateJSDocCallbackTag, + updateJSDocDeprecatedTag, + updateJSDocImplementsTag, + updateJSDocImportTag, + updateJSDocLink, + updateJSDocLinkCode, + updateJSDocLinkPlain, + updateJSDocNameReference, + updateJSDocNonNullableType, + updateJSDocNullableType, + updateJSDocOptionalType, + updateJSDocOverloadTag, + updateJSDocOverrideTag, + updateJSDocPrivateTag, + updateJSDocProtectedTag, + updateJSDocPublicTag, + updateJSDocReadonlyTag, + updateJSDocReturnTag, + updateJSDocSatisfiesTag, + updateJSDocSeeTag, + updateJSDocSignature, + updateJSDocTemplateTag, + updateJSDocThisTag, + updateJSDocThrowsTag, + updateJSDocTypedefTag, + updateJSDocTypeExpression, + updateJSDocTypeLiteral, + updateJSDocTypeTag, + updateJSDocUnknownTag, + updateJSDocVariadicType, + updateJsxAttribute, + updateJsxAttributes, + updateJsxClosingElement, + updateJsxElement, + updateJsxExpression, + updateJsxFragment, + updateJsxNamespacedName, + updateJsxOpeningElement, + updateJsxSelfClosingElement, + updateJsxSpreadAttribute, + updateLabeledStatement, + updateLiteralTypeNode, + updateMappedTypeNode, + updateMetaProperty, + updateMethodDeclaration, + updateMethodSignatureDeclaration, + updateMissingDeclaration, + updateModuleBlock, + updateModuleDeclaration, + updateNamedExports, + updateNamedImports, + updateNamedTupleMember, + updateNamespaceExport, + updateNamespaceExportDeclaration, + updateNamespaceImport, + updateNewExpression, + updateNonNullExpression, + updateObjectBindingPattern, + updateObjectLiteralExpression, + updateOptionalTypeNode, + updateParameterDeclaration, + updateParenthesizedExpression, + updateParenthesizedTypeNode, + updatePartiallyEmittedExpression, + updatePostfixUnaryExpression, + updatePrefixUnaryExpression, + updatePropertyAccessExpression, + updatePropertyAssignment, + updatePropertyDeclaration, + updatePropertySignatureDeclaration, + updateQualifiedName, + updateRestTypeNode, + updateReturnStatement, + updateSatisfiesExpression, + updateSetAccessorDeclaration, + updateShorthandPropertyAssignment, + updateSourceFile, + updateSpreadAssignment, + updateSpreadElement, + updateSwitchStatement, + updateSyntaxList, + updateSyntheticExpression, + updateSyntheticReferenceExpression, + updateTaggedTemplateExpression, + updateTemplateExpression, + updateTemplateLiteralTypeNode, + updateTemplateLiteralTypeSpan, + updateTemplateSpan, + updateThrowStatement, + updateTryStatement, + updateTupleTypeNode, + updateTypeAliasDeclaration, + updateTypeAssertion, + updateTypeLiteralNode, + updateTypeOfExpression, + updateTypeOperatorNode, + updateTypeParameterDeclaration, + updateTypePredicateNode, + updateTypeQueryNode, + updateTypeReferenceNode, + updateUnionTypeNode, + updateVariableDeclaration, + updateVariableDeclarationList, + updateVariableStatement, + updateVoidExpression, + updateWhileStatement, + updateWithStatement, + updateYieldExpression, +} from "./factory.generated.ts"; +import { + isAssertsKeyword, + isAsteriskToken, + isAwaitKeyword, + isBinaryOperatorToken, + isBindingName, + isBlock, + isCaseBlock, + isCatchClause, + isColonToken, + isConciseBody, + isDotDotDotToken, + isEndOfFile, + isEntityName, + isEqualsGreaterThanToken, + isEqualsToken, + isExclamationToken, + isExpression, + isExpressionWithTypeArguments, + isForInitializer, + isFunctionBody, + isIdentifier, + isImportAttributeName, + isImportAttributes, + isImportClause, + isJSDocFullName, + isJsxAttributeName, + isJsxAttributes, + isJsxAttributeValue, + isJsxClosingElement, + isJsxClosingFragment, + isJsxOpeningElement, + isJsxOpeningFragment, + isJsxTagNameExpression, + isLeftHandSideExpression, + isMemberName, + isModuleBody, + isModuleExportName, + isModuleName, + isModuleReference, + isNamedExportBindings, + isNamedImportBindings, + isPropertyName, + isQuestionDotToken, + isQuestionOrExclamationToken, + isQuestionOrPlusOrMinusToken, + isQuestionToken, + isReadonlyKeywordOrPlusOrMinusToken, + isStatement, + isTemplateHead, + isTemplateLiteral, + isTemplateMiddleOrTail, + isTypeLiteralNode, + isTypeNode, + isTypeParameterDeclaration, + isTypePredicateParameterName, + isVariableDeclaration, + isVariableDeclarationList, +} from "./is.ts"; +import { + visitEachChildOfJSDocParameterTag, + visitEachChildOfJSDocPropertyTag, +} from "./visitor.ts"; + +/** + * A callback that receives a node and returns a visited node (or undefined to remove it). + */ +export type Visitor = (node: Node) => Node | undefined; + +/** + * Visits a Node using the supplied visitor, possibly returning a new Node in its place. + * + * - If the input node is undefined, then the output is undefined. + * - If the visitor returns undefined, then the output is undefined. + * - If the output node is not undefined, then it will satisfy the test function. + * - In order to obtain a return type that is more specific than `Node`, a test + * function must be provided, and that function must be a type predicate. + * + * @param node The Node to visit. + * @param visitor The callback used to visit the Node. + * @param test A callback to execute to verify the Node is valid. + */ +export function visitNode( + node: TIn, + visitor: Visitor, + test: (node: Node) => node is TOut, +): TOut | (TIn & undefined); +/** + * Visits a Node using the supplied visitor, possibly returning a new Node in its place. + * + * - If the input node is undefined, then the output is undefined. + * - If the visitor returns undefined, then the output is undefined. + * + * @param node The Node to visit. + * @param visitor The callback used to visit the Node. + * @param test An optional callback to execute to verify the Node is valid. + */ +export function visitNode( + node: TIn, + visitor: Visitor, + test?: (node: Node) => boolean, +): Node | (TIn & undefined); +export function visitNode(node: Node | undefined, visitor: Visitor, test?: (node: Node) => boolean): Node | undefined { + if (node === undefined) return undefined; + const visited = visitor(node); + if (visited !== undefined && test !== undefined && !test(visited)) { + throw new Error("Visited node failed test assertion."); + } + return visited; +} + +/** + * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place. + * + * - If the input node array is undefined, the output is undefined. + * - If the visitor returns undefined for a node, that node is dropped from the result. + */ +export function visitNodes(nodes: NodeArray, visitor: Visitor): NodeArray; +export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined; +export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined { + if (nodes === undefined) return undefined; + const updated = visitNodesArray(nodes, visitor); + if (updated === nodes) { + return nodes; + } + return createNodeArray(updated, nodes.pos, nodes.end); +} + +export function visitNodesArray(nodes: readonly T[], visitor: Visitor): readonly T[]; +export function visitNodesArray(nodes: readonly T[] | undefined, visitor: Visitor): readonly T[] | undefined; +export function visitNodesArray(nodes: readonly Node[] | undefined, visitor: Visitor): readonly Node[] | undefined { + if (nodes === undefined) return undefined; + let updated: Node[] | undefined; + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + const visited = visitor(node); + if (updated) { + if (visited) updated.push(visited); + } + else if (visited !== node) { + updated = []; + for (let j = 0; j < i; j++) updated.push(nodes[j]); + if (visited) updated.push(visited); + } + } + return updated ?? nodes; +} + +/** + * Visits each child of a Node using the supplied visitor, possibly returning a new Node of the same kind in its place. + * + * @param node The Node whose children will be visited. + * @param visitor The callback used to visit each child. + * @returns The original node if no children changed, or a new node with visited children. + */ +export function visitEachChild(node: T, visitor: Visitor): T; +export function visitEachChild(node: T | undefined, visitor: Visitor): T | undefined; +export function visitEachChild(node: Node | undefined, visitor: Visitor): Node | undefined { + if (node === undefined) return undefined; + const fn = visitEachChildTable[node.kind]; + return fn ? fn(node, visitor) : node; +} + +type VisitEachChildFunction = (node: any, visitor: Visitor) => Node; + +const visitEachChildTable: Record = { + [SyntaxKind.QualifiedName]: (node: QualifiedName, visitor: Visitor): QualifiedName => { + const _left = visitNode(node.left, visitor, isEntityName); + const _right = visitNode(node.right, visitor, isMemberName); + return updateQualifiedName(node, _left, _right); + }, + [SyntaxKind.ComputedPropertyName]: (node: ComputedPropertyName, visitor: Visitor): ComputedPropertyName => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateComputedPropertyName(node, _expression); + }, + [SyntaxKind.Decorator]: (node: Decorator, visitor: Visitor): Decorator => { + const _expression = visitNode(node.expression, visitor, isLeftHandSideExpression); + return updateDecorator(node, _expression); + }, + [SyntaxKind.IfStatement]: (node: IfStatement, visitor: Visitor): IfStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _thenStatement = visitNode(node.thenStatement, visitor, isStatement); + const _elseStatement = visitNode(node.elseStatement, visitor, isStatement); + return updateIfStatement(node, _expression, _thenStatement, _elseStatement); + }, + [SyntaxKind.DoStatement]: (node: DoStatement, visitor: Visitor): DoStatement => { + const _statement = visitNode(node.statement, visitor, isStatement); + const _expression = visitNode(node.expression, visitor, isExpression); + return updateDoStatement(node, _statement, _expression); + }, + [SyntaxKind.WhileStatement]: (node: WhileStatement, visitor: Visitor): WhileStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateWhileStatement(node, _expression, _statement); + }, + [SyntaxKind.ForStatement]: (node: ForStatement, visitor: Visitor): ForStatement => { + const _initializer = visitNode(node.initializer, visitor, isForInitializer); + const _condition = visitNode(node.condition, visitor, isExpression); + const _incrementor = visitNode(node.incrementor, visitor, isExpression); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateForStatement(node, _initializer, _condition, _incrementor, _statement); + }, + [SyntaxKind.BreakStatement]: (node: BreakStatement, visitor: Visitor): BreakStatement => { + const _label = visitNode(node.label, visitor, isIdentifier); + return updateBreakStatement(node, _label); + }, + [SyntaxKind.ContinueStatement]: (node: ContinueStatement, visitor: Visitor): ContinueStatement => { + const _label = visitNode(node.label, visitor, isIdentifier); + return updateContinueStatement(node, _label); + }, + [SyntaxKind.ReturnStatement]: (node: ReturnStatement, visitor: Visitor): ReturnStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateReturnStatement(node, _expression); + }, + [SyntaxKind.WithStatement]: (node: WithStatement, visitor: Visitor): WithStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateWithStatement(node, _expression, _statement); + }, + [SyntaxKind.SwitchStatement]: (node: SwitchStatement, visitor: Visitor): SwitchStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _caseBlock = visitNode(node.caseBlock, visitor, isCaseBlock); + return updateSwitchStatement(node, _expression, _caseBlock); + }, + [SyntaxKind.CaseBlock]: (node: CaseBlock, visitor: Visitor): CaseBlock => { + const _clauses = visitNodes(node.clauses, visitor); + return updateCaseBlock(node, _clauses); + }, + [SyntaxKind.ThrowStatement]: (node: ThrowStatement, visitor: Visitor): ThrowStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateThrowStatement(node, _expression); + }, + [SyntaxKind.TryStatement]: (node: TryStatement, visitor: Visitor): TryStatement => { + const _tryBlock = visitNode(node.tryBlock, visitor, isBlock); + const _catchClause = visitNode(node.catchClause, visitor, isCatchClause); + const _finallyBlock = visitNode(node.finallyBlock, visitor, isBlock); + return updateTryStatement(node, _tryBlock, _catchClause, _finallyBlock); + }, + [SyntaxKind.CatchClause]: (node: CatchClause, visitor: Visitor): CatchClause => { + const _variableDeclaration = visitNode(node.variableDeclaration, visitor, isVariableDeclaration); + const _block = visitNode(node.block, visitor, isBlock); + return updateCatchClause(node, _variableDeclaration, _block); + }, + [SyntaxKind.LabeledStatement]: (node: LabeledStatement, visitor: Visitor): LabeledStatement => { + const _label = visitNode(node.label, visitor, isIdentifier); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateLabeledStatement(node, _label, _statement); + }, + [SyntaxKind.ExpressionStatement]: (node: ExpressionStatement, visitor: Visitor): ExpressionStatement => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateExpressionStatement(node, _expression); + }, + [SyntaxKind.Block]: (node: Block, visitor: Visitor): Block => { + const _statements = visitNodes(node.statements, visitor); + return updateBlock(node, _statements); + }, + [SyntaxKind.VariableStatement]: (node: VariableStatement, visitor: Visitor): VariableStatement => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _declarationList = visitNode(node.declarationList, visitor, isVariableDeclarationList); + return updateVariableStatement(node, _modifiers, _declarationList); + }, + [SyntaxKind.VariableDeclaration]: (node: VariableDeclaration, visitor: Visitor): VariableDeclaration => { + const _name = visitNode(node.name, visitor, isBindingName); + const _exclamationToken = visitNode(node.exclamationToken, visitor, isExclamationToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updateVariableDeclaration(node, _name, _exclamationToken, _type, _initializer); + }, + [SyntaxKind.VariableDeclarationList]: (node: VariableDeclarationList, visitor: Visitor): VariableDeclarationList => { + const _declarations = visitNodes(node.declarations, visitor); + return updateVariableDeclarationList(node, _declarations); + }, + [SyntaxKind.Parameter]: (node: ParameterDeclaration, visitor: Visitor): ParameterDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); + const _name = visitNode(node.name, visitor, isBindingName); + const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updateParameterDeclaration(node, _modifiers, _dotDotDotToken, _name, _questionToken, _type, _initializer); + }, + [SyntaxKind.BindingElement]: (node: BindingElement, visitor: Visitor): BindingElement => { + const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); + const _propertyName = visitNode(node.propertyName, visitor, isPropertyName); + const _name = visitNode(node.name, visitor, isBindingName); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updateBindingElement(node, _dotDotDotToken, _propertyName, _name, _initializer); + }, + [SyntaxKind.MissingDeclaration]: (node: MissingDeclaration, visitor: Visitor): MissingDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + return updateMissingDeclaration(node, _modifiers); + }, + [SyntaxKind.FunctionDeclaration]: (node: FunctionDeclaration, visitor: Visitor): FunctionDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateFunctionDeclaration(node, _modifiers, _asteriskToken, _name, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.ClassDeclaration]: (node: ClassDeclaration, visitor: Visitor): ClassDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _heritageClauses = visitNodes(node.heritageClauses, visitor); + const _members = visitNodes(node.members, visitor); + return updateClassDeclaration(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); + }, + [SyntaxKind.ClassExpression]: (node: ClassExpression, visitor: Visitor): ClassExpression => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _heritageClauses = visitNodes(node.heritageClauses, visitor); + const _members = visitNodes(node.members, visitor); + return updateClassExpression(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); + }, + [SyntaxKind.HeritageClause]: (node: HeritageClause, visitor: Visitor): HeritageClause => { + const _types = visitNodes(node.types, visitor); + return updateHeritageClause(node, _types); + }, + [SyntaxKind.InterfaceDeclaration]: (node: InterfaceDeclaration, visitor: Visitor): InterfaceDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _heritageClauses = visitNodes(node.heritageClauses, visitor); + const _members = visitNodes(node.members, visitor); + return updateInterfaceDeclaration(node, _modifiers, _name, _typeParameters, _heritageClauses, _members); + }, + [SyntaxKind.TypeAliasDeclaration]: (node: TypeAliasDeclaration, visitor: Visitor): TypeAliasDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateTypeAliasDeclaration(node, _modifiers, _name, _typeParameters, _type); + }, + [SyntaxKind.EnumMember]: (node: EnumMember, visitor: Visitor): EnumMember => { + const _name = visitNode(node.name, visitor, isPropertyName); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updateEnumMember(node, _name, _initializer); + }, + [SyntaxKind.EnumDeclaration]: (node: EnumDeclaration, visitor: Visitor): EnumDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _members = visitNodes(node.members, visitor); + return updateEnumDeclaration(node, _modifiers, _name, _members); + }, + [SyntaxKind.ModuleBlock]: (node: ModuleBlock, visitor: Visitor): ModuleBlock => { + const _statements = visitNodes(node.statements, visitor); + return updateModuleBlock(node, _statements); + }, + [SyntaxKind.ImportDeclaration]: (node: ImportDeclaration, visitor: Visitor): ImportDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _importClause = visitNode(node.importClause, visitor, isImportClause); + const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); + const _attributes = visitNode(node.attributes, visitor, isImportAttributes); + return updateImportDeclaration(node, _modifiers, _importClause, _moduleSpecifier, _attributes); + }, + [SyntaxKind.ExternalModuleReference]: (node: ExternalModuleReference, visitor: Visitor): ExternalModuleReference => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateExternalModuleReference(node, _expression); + }, + [SyntaxKind.NamespaceImport]: (node: NamespaceImport, visitor: Visitor): NamespaceImport => { + const _name = visitNode(node.name, visitor, isIdentifier); + return updateNamespaceImport(node, _name); + }, + [SyntaxKind.NamedImports]: (node: NamedImports, visitor: Visitor): NamedImports => { + const _elements = visitNodes(node.elements, visitor); + return updateNamedImports(node, _elements); + }, + [SyntaxKind.ExportAssignment]: (node: ExportAssignment, visitor: Visitor): ExportAssignment => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _expression = visitNode(node.expression, visitor, isExpression); + return updateExportAssignment(node, _modifiers, _type, _expression); + }, + [SyntaxKind.NamespaceExportDeclaration]: (node: NamespaceExportDeclaration, visitor: Visitor): NamespaceExportDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + return updateNamespaceExportDeclaration(node, _modifiers, _name); + }, + [SyntaxKind.NamespaceExport]: (node: NamespaceExport, visitor: Visitor): NamespaceExport => { + const _name = visitNode(node.name, visitor, isModuleExportName); + return updateNamespaceExport(node, _name); + }, + [SyntaxKind.NamedExports]: (node: NamedExports, visitor: Visitor): NamedExports => { + const _elements = visitNodes(node.elements, visitor); + return updateNamedExports(node, _elements); + }, + [SyntaxKind.ExportSpecifier]: (node: ExportSpecifier, visitor: Visitor): ExportSpecifier => { + const _propertyName = visitNode(node.propertyName, visitor, isModuleExportName); + const _name = visitNode(node.name, visitor, isModuleExportName); + return updateExportSpecifier(node, _propertyName, _name); + }, + [SyntaxKind.CallSignature]: (node: CallSignatureDeclaration, visitor: Visitor): CallSignatureDeclaration => { + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateCallSignatureDeclaration(node, _typeParameters, _parameters, _type); + }, + [SyntaxKind.ConstructSignature]: (node: ConstructSignatureDeclaration, visitor: Visitor): ConstructSignatureDeclaration => { + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateConstructSignatureDeclaration(node, _typeParameters, _parameters, _type); + }, + [SyntaxKind.Constructor]: (node: ConstructorDeclaration, visitor: Visitor): ConstructorDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateConstructorDeclaration(node, _modifiers, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.GetAccessor]: (node: GetAccessorDeclaration, visitor: Visitor): GetAccessorDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateGetAccessorDeclaration(node, _modifiers, _name, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.SetAccessor]: (node: SetAccessorDeclaration, visitor: Visitor): SetAccessorDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateSetAccessorDeclaration(node, _modifiers, _name, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.IndexSignature]: (node: IndexSignatureDeclaration, visitor: Visitor): IndexSignatureDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateIndexSignatureDeclaration(node, _modifiers, _parameters, _type); + }, + [SyntaxKind.MethodSignature]: (node: MethodSignatureDeclaration, visitor: Visitor): MethodSignatureDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateMethodSignatureDeclaration(node, _modifiers, _name, _postfixToken, _typeParameters, _parameters, _type); + }, + [SyntaxKind.MethodDeclaration]: (node: MethodDeclaration, visitor: Visitor): MethodDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateMethodDeclaration(node, _modifiers, _asteriskToken, _name, _postfixToken, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.PropertySignature]: (node: PropertySignatureDeclaration, visitor: Visitor): PropertySignatureDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updatePropertySignatureDeclaration(node, _modifiers, _name, _postfixToken, _type, _initializer); + }, + [SyntaxKind.PropertyDeclaration]: (node: PropertyDeclaration, visitor: Visitor): PropertyDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updatePropertyDeclaration(node, _modifiers, _name, _postfixToken, _type, _initializer); + }, + [SyntaxKind.ClassStaticBlockDeclaration]: (node: ClassStaticBlockDeclaration, visitor: Visitor): ClassStaticBlockDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _body = visitNode(node.body, visitor, isBlock); + return updateClassStaticBlockDeclaration(node, _modifiers, _body); + }, + [SyntaxKind.BinaryExpression]: (node: BinaryExpression, visitor: Visitor): BinaryExpression => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _left = visitNode(node.left, visitor, isExpression); + const _type = visitNode(node.type, visitor, isTypeNode); + const _operatorToken = visitNode(node.operatorToken, visitor, isBinaryOperatorToken); + const _right = visitNode(node.right, visitor, isExpression); + return updateBinaryExpression(node, _modifiers, _left, _type, _operatorToken, _right); + }, + [SyntaxKind.PrefixUnaryExpression]: (node: PrefixUnaryExpression, visitor: Visitor): PrefixUnaryExpression => { + const _operand = visitNode(node.operand, visitor, isExpression); + return updatePrefixUnaryExpression(node, _operand); + }, + [SyntaxKind.PostfixUnaryExpression]: (node: PostfixUnaryExpression, visitor: Visitor): PostfixUnaryExpression => { + const _operand = visitNode(node.operand, visitor, isExpression); + return updatePostfixUnaryExpression(node, _operand); + }, + [SyntaxKind.YieldExpression]: (node: YieldExpression, visitor: Visitor): YieldExpression => { + const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); + const _expression = visitNode(node.expression, visitor, isExpression); + return updateYieldExpression(node, _asteriskToken, _expression); + }, + [SyntaxKind.ArrowFunction]: (node: ArrowFunction, visitor: Visitor): ArrowFunction => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _equalsGreaterThanToken = visitNode(node.equalsGreaterThanToken, visitor, isEqualsGreaterThanToken); + const _body = visitNode(node.body, visitor, isConciseBody); + return updateArrowFunction(node, _modifiers, _typeParameters, _parameters, _type, _equalsGreaterThanToken, _body); + }, + [SyntaxKind.FunctionExpression]: (node: FunctionExpression, visitor: Visitor): FunctionExpression => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _asteriskToken = visitNode(node.asteriskToken, visitor, isAsteriskToken); + const _name = visitNode(node.name, visitor, isIdentifier); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + const _body = visitNode(node.body, visitor, isFunctionBody); + return updateFunctionExpression(node, _modifiers, _asteriskToken, _name, _typeParameters, _parameters, _type, _body); + }, + [SyntaxKind.AsExpression]: (node: AsExpression, visitor: Visitor): AsExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateAsExpression(node, _expression, _type); + }, + [SyntaxKind.SatisfiesExpression]: (node: SatisfiesExpression, visitor: Visitor): SatisfiesExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateSatisfiesExpression(node, _expression, _type); + }, + [SyntaxKind.ConditionalExpression]: (node: ConditionalExpression, visitor: Visitor): ConditionalExpression => { + const _condition = visitNode(node.condition, visitor, isExpression); + const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); + const _whenTrue = visitNode(node.whenTrue, visitor, isExpression); + const _colonToken = visitNode(node.colonToken, visitor, isColonToken); + const _whenFalse = visitNode(node.whenFalse, visitor, isExpression); + return updateConditionalExpression(node, _condition, _questionToken, _whenTrue, _colonToken, _whenFalse); + }, + [SyntaxKind.PropertyAccessExpression]: (node: PropertyAccessExpression, visitor: Visitor): PropertyAccessExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); + const _name = visitNode(node.name, visitor, isMemberName); + return updatePropertyAccessExpression(node, _expression, _questionDotToken, _name); + }, + [SyntaxKind.ElementAccessExpression]: (node: ElementAccessExpression, visitor: Visitor): ElementAccessExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); + const _argumentExpression = visitNode(node.argumentExpression, visitor, isExpression); + return updateElementAccessExpression(node, _expression, _questionDotToken, _argumentExpression); + }, + [SyntaxKind.CallExpression]: (node: CallExpression, visitor: Visitor): CallExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); + const _typeArguments = visitNodes(node.typeArguments, visitor); + const _arguments = visitNodes(node.arguments, visitor); + return updateCallExpression(node, _expression, _questionDotToken, _typeArguments, _arguments); + }, + [SyntaxKind.NewExpression]: (node: NewExpression, visitor: Visitor): NewExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _typeArguments = visitNodes(node.typeArguments, visitor); + const _arguments = visitNodes(node.arguments, visitor); + return updateNewExpression(node, _expression, _typeArguments, _arguments); + }, + [SyntaxKind.MetaProperty]: (node: MetaProperty, visitor: Visitor): MetaProperty => { + const _name = visitNode(node.name, visitor, isIdentifier); + return updateMetaProperty(node, _name); + }, + [SyntaxKind.NonNullExpression]: (node: NonNullExpression, visitor: Visitor): NonNullExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateNonNullExpression(node, _expression); + }, + [SyntaxKind.SpreadElement]: (node: SpreadElement, visitor: Visitor): SpreadElement => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateSpreadElement(node, _expression); + }, + [SyntaxKind.TemplateExpression]: (node: TemplateExpression, visitor: Visitor): TemplateExpression => { + const _head = visitNode(node.head, visitor, isTemplateHead); + const _templateSpans = visitNodes(node.templateSpans, visitor); + return updateTemplateExpression(node, _head, _templateSpans); + }, + [SyntaxKind.TemplateSpan]: (node: TemplateSpan, visitor: Visitor): TemplateSpan => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _literal = visitNode(node.literal, visitor, isTemplateMiddleOrTail); + return updateTemplateSpan(node, _expression, _literal); + }, + [SyntaxKind.TaggedTemplateExpression]: (node: TaggedTemplateExpression, visitor: Visitor): TaggedTemplateExpression => { + const _tag = visitNode(node.tag, visitor, isExpression); + const _questionDotToken = visitNode(node.questionDotToken, visitor, isQuestionDotToken); + const _typeArguments = visitNodes(node.typeArguments, visitor); + const _template = visitNode(node.template, visitor, isTemplateLiteral); + return updateTaggedTemplateExpression(node, _tag, _questionDotToken, _typeArguments, _template); + }, + [SyntaxKind.ParenthesizedExpression]: (node: ParenthesizedExpression, visitor: Visitor): ParenthesizedExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateParenthesizedExpression(node, _expression); + }, + [SyntaxKind.ArrayLiteralExpression]: (node: ArrayLiteralExpression, visitor: Visitor): ArrayLiteralExpression => { + const _elements = visitNodes(node.elements, visitor); + return updateArrayLiteralExpression(node, _elements); + }, + [SyntaxKind.ObjectLiteralExpression]: (node: ObjectLiteralExpression, visitor: Visitor): ObjectLiteralExpression => { + const _properties = visitNodes(node.properties, visitor); + return updateObjectLiteralExpression(node, _properties); + }, + [SyntaxKind.SpreadAssignment]: (node: SpreadAssignment, visitor: Visitor): SpreadAssignment => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateSpreadAssignment(node, _expression); + }, + [SyntaxKind.PropertyAssignment]: (node: PropertyAssignment, visitor: Visitor): PropertyAssignment => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _initializer = visitNode(node.initializer, visitor, isExpression); + return updatePropertyAssignment(node, _modifiers, _name, _postfixToken, _type, _initializer); + }, + [SyntaxKind.ShorthandPropertyAssignment]: (node: ShorthandPropertyAssignment, visitor: Visitor): ShorthandPropertyAssignment => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isPropertyName); + const _postfixToken = visitNode(node.postfixToken, visitor, isQuestionOrExclamationToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _equalsToken = visitNode(node.equalsToken, visitor, isEqualsToken); + const _objectAssignmentInitializer = visitNode(node.objectAssignmentInitializer, visitor, isExpression); + return updateShorthandPropertyAssignment(node, _modifiers, _name, _postfixToken, _type, _equalsToken, _objectAssignmentInitializer); + }, + [SyntaxKind.DeleteExpression]: (node: DeleteExpression, visitor: Visitor): DeleteExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateDeleteExpression(node, _expression); + }, + [SyntaxKind.TypeOfExpression]: (node: TypeOfExpression, visitor: Visitor): TypeOfExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateTypeOfExpression(node, _expression); + }, + [SyntaxKind.VoidExpression]: (node: VoidExpression, visitor: Visitor): VoidExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateVoidExpression(node, _expression); + }, + [SyntaxKind.AwaitExpression]: (node: AwaitExpression, visitor: Visitor): AwaitExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateAwaitExpression(node, _expression); + }, + [SyntaxKind.TypeAssertionExpression]: (node: TypeAssertion, visitor: Visitor): TypeAssertion => { + const _type = visitNode(node.type, visitor, isTypeNode); + const _expression = visitNode(node.expression, visitor, isExpression); + return updateTypeAssertion(node, _type, _expression); + }, + [SyntaxKind.UnionType]: (node: UnionTypeNode, visitor: Visitor): UnionTypeNode => { + const _types = visitNodes(node.types, visitor); + return updateUnionTypeNode(node, _types); + }, + [SyntaxKind.IntersectionType]: (node: IntersectionTypeNode, visitor: Visitor): IntersectionTypeNode => { + const _types = visitNodes(node.types, visitor); + return updateIntersectionTypeNode(node, _types); + }, + [SyntaxKind.ConditionalType]: (node: ConditionalTypeNode, visitor: Visitor): ConditionalTypeNode => { + const _checkType = visitNode(node.checkType, visitor, isTypeNode); + const _extendsType = visitNode(node.extendsType, visitor, isTypeNode); + const _trueType = visitNode(node.trueType, visitor, isTypeNode); + const _falseType = visitNode(node.falseType, visitor, isTypeNode); + return updateConditionalTypeNode(node, _checkType, _extendsType, _trueType, _falseType); + }, + [SyntaxKind.TypeOperator]: (node: TypeOperatorNode, visitor: Visitor): TypeOperatorNode => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateTypeOperatorNode(node, _type); + }, + [SyntaxKind.InferType]: (node: InferTypeNode, visitor: Visitor): InferTypeNode => { + const _typeParameter = visitNode(node.typeParameter, visitor, isTypeParameterDeclaration); + return updateInferTypeNode(node, _typeParameter); + }, + [SyntaxKind.ArrayType]: (node: ArrayTypeNode, visitor: Visitor): ArrayTypeNode => { + const _elementType = visitNode(node.elementType, visitor, isTypeNode); + return updateArrayTypeNode(node, _elementType); + }, + [SyntaxKind.IndexedAccessType]: (node: IndexedAccessTypeNode, visitor: Visitor): IndexedAccessTypeNode => { + const _objectType = visitNode(node.objectType, visitor, isTypeNode); + const _indexType = visitNode(node.indexType, visitor, isTypeNode); + return updateIndexedAccessTypeNode(node, _objectType, _indexType); + }, + [SyntaxKind.TypeReference]: (node: TypeReferenceNode, visitor: Visitor): TypeReferenceNode => { + const _typeName = visitNode(node.typeName, visitor, isEntityName); + const _typeArguments = visitNodes(node.typeArguments, visitor); + return updateTypeReferenceNode(node, _typeName, _typeArguments); + }, + [SyntaxKind.ExpressionWithTypeArguments]: (node: ExpressionWithTypeArguments, visitor: Visitor): ExpressionWithTypeArguments => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _typeArguments = visitNodes(node.typeArguments, visitor); + return updateExpressionWithTypeArguments(node, _expression, _typeArguments); + }, + [SyntaxKind.LiteralType]: (node: LiteralTypeNode, visitor: Visitor): LiteralTypeNode => { + const _literal = visitNode(node.literal, visitor); + return updateLiteralTypeNode(node, _literal); + }, + [SyntaxKind.TypePredicate]: (node: TypePredicateNode, visitor: Visitor): TypePredicateNode => { + const _assertsModifier = visitNode(node.assertsModifier, visitor, isAssertsKeyword); + const _parameterName = visitNode(node.parameterName, visitor, isTypePredicateParameterName); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateTypePredicateNode(node, _assertsModifier, _parameterName, _type); + }, + [SyntaxKind.ImportAttribute]: (node: ImportAttribute, visitor: Visitor): ImportAttribute => { + const _name = visitNode(node.name, visitor, isImportAttributeName); + const _value = visitNode(node.value, visitor, isExpression); + return updateImportAttribute(node, _name, _value); + }, + [SyntaxKind.ImportAttributes]: (node: ImportAttributes, visitor: Visitor): ImportAttributes => { + const _attributes = visitNodes(node.attributes, visitor); + return updateImportAttributes(node, _attributes); + }, + [SyntaxKind.TypeQuery]: (node: TypeQueryNode, visitor: Visitor): TypeQueryNode => { + const _exprName = visitNode(node.exprName, visitor, isEntityName); + const _typeArguments = visitNodes(node.typeArguments, visitor); + return updateTypeQueryNode(node, _exprName, _typeArguments); + }, + [SyntaxKind.MappedType]: (node: MappedTypeNode, visitor: Visitor): MappedTypeNode => { + const _readonlyToken = visitNode(node.readonlyToken, visitor, isReadonlyKeywordOrPlusOrMinusToken); + const _typeParameter = visitNode(node.typeParameter, visitor, isTypeParameterDeclaration); + const _nameType = visitNode(node.nameType, visitor, isTypeNode); + const _questionToken = visitNode(node.questionToken, visitor, isQuestionOrPlusOrMinusToken); + const _type = visitNode(node.type, visitor, isTypeNode); + const _members = visitNodes(node.members, visitor); + return updateMappedTypeNode(node, _readonlyToken, _typeParameter, _nameType, _questionToken, _type, _members); + }, + [SyntaxKind.TypeLiteral]: (node: TypeLiteralNode, visitor: Visitor): TypeLiteralNode => { + const _members = visitNodes(node.members, visitor); + return updateTypeLiteralNode(node, _members); + }, + [SyntaxKind.TupleType]: (node: TupleTypeNode, visitor: Visitor): TupleTypeNode => { + const _elements = visitNodes(node.elements, visitor); + return updateTupleTypeNode(node, _elements); + }, + [SyntaxKind.NamedTupleMember]: (node: NamedTupleMember, visitor: Visitor): NamedTupleMember => { + const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); + const _name = visitNode(node.name, visitor, isIdentifier); + const _questionToken = visitNode(node.questionToken, visitor, isQuestionToken); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateNamedTupleMember(node, _dotDotDotToken, _name, _questionToken, _type); + }, + [SyntaxKind.OptionalType]: (node: OptionalTypeNode, visitor: Visitor): OptionalTypeNode => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateOptionalTypeNode(node, _type); + }, + [SyntaxKind.RestType]: (node: RestTypeNode, visitor: Visitor): RestTypeNode => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateRestTypeNode(node, _type); + }, + [SyntaxKind.ParenthesizedType]: (node: ParenthesizedTypeNode, visitor: Visitor): ParenthesizedTypeNode => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateParenthesizedTypeNode(node, _type); + }, + [SyntaxKind.FunctionType]: (node: FunctionTypeNode, visitor: Visitor): FunctionTypeNode => { + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateFunctionTypeNode(node, _typeParameters, _parameters, _type); + }, + [SyntaxKind.ConstructorType]: (node: ConstructorTypeNode, visitor: Visitor): ConstructorTypeNode => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateConstructorTypeNode(node, _modifiers, _typeParameters, _parameters, _type); + }, + [SyntaxKind.TemplateLiteralType]: (node: TemplateLiteralTypeNode, visitor: Visitor): TemplateLiteralTypeNode => { + const _head = visitNode(node.head, visitor, isTemplateHead); + const _templateSpans = visitNodes(node.templateSpans, visitor); + return updateTemplateLiteralTypeNode(node, _head, _templateSpans); + }, + [SyntaxKind.TemplateLiteralTypeSpan]: (node: TemplateLiteralTypeSpan, visitor: Visitor): TemplateLiteralTypeSpan => { + const _type = visitNode(node.type, visitor, isTypeNode); + const _literal = visitNode(node.literal, visitor, isTemplateMiddleOrTail); + return updateTemplateLiteralTypeSpan(node, _type, _literal); + }, + [SyntaxKind.SyntheticExpression]: (node: SyntheticExpression, visitor: Visitor): SyntheticExpression => { + const _tupleNameSource = visitNode(node.tupleNameSource, visitor); + return updateSyntheticExpression(node, _tupleNameSource); + }, + [SyntaxKind.PartiallyEmittedExpression]: (node: PartiallyEmittedExpression, visitor: Visitor): PartiallyEmittedExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updatePartiallyEmittedExpression(node, _expression); + }, + [SyntaxKind.JsxElement]: (node: JsxElement, visitor: Visitor): JsxElement => { + const _openingElement = visitNode(node.openingElement, visitor, isJsxOpeningElement); + const _children = visitNodes(node.children, visitor); + const _closingElement = visitNode(node.closingElement, visitor, isJsxClosingElement); + return updateJsxElement(node, _openingElement, _children, _closingElement); + }, + [SyntaxKind.JsxAttributes]: (node: JsxAttributes, visitor: Visitor): JsxAttributes => { + const _properties = visitNodes(node.properties, visitor); + return updateJsxAttributes(node, _properties); + }, + [SyntaxKind.JsxNamespacedName]: (node: JsxNamespacedName, visitor: Visitor): JsxNamespacedName => { + const _namespace = visitNode(node.namespace, visitor, isIdentifier); + const _name = visitNode(node.name, visitor, isIdentifier); + return updateJsxNamespacedName(node, _namespace, _name); + }, + [SyntaxKind.JsxOpeningElement]: (node: JsxOpeningElement, visitor: Visitor): JsxOpeningElement => { + const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); + const _typeArguments = visitNodes(node.typeArguments, visitor); + const _attributes = visitNode(node.attributes, visitor, isJsxAttributes); + return updateJsxOpeningElement(node, _tagName, _typeArguments, _attributes); + }, + [SyntaxKind.JsxSelfClosingElement]: (node: JsxSelfClosingElement, visitor: Visitor): JsxSelfClosingElement => { + const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); + const _typeArguments = visitNodes(node.typeArguments, visitor); + const _attributes = visitNode(node.attributes, visitor, isJsxAttributes); + return updateJsxSelfClosingElement(node, _tagName, _typeArguments, _attributes); + }, + [SyntaxKind.JsxFragment]: (node: JsxFragment, visitor: Visitor): JsxFragment => { + const _openingFragment = visitNode(node.openingFragment, visitor, isJsxOpeningFragment); + const _children = visitNodes(node.children, visitor); + const _closingFragment = visitNode(node.closingFragment, visitor, isJsxClosingFragment); + return updateJsxFragment(node, _openingFragment, _children, _closingFragment); + }, + [SyntaxKind.JsxAttribute]: (node: JsxAttribute, visitor: Visitor): JsxAttribute => { + const _name = visitNode(node.name, visitor, isJsxAttributeName); + const _initializer = visitNode(node.initializer, visitor, isJsxAttributeValue); + return updateJsxAttribute(node, _name, _initializer); + }, + [SyntaxKind.JsxSpreadAttribute]: (node: JsxSpreadAttribute, visitor: Visitor): JsxSpreadAttribute => { + const _expression = visitNode(node.expression, visitor, isExpression); + return updateJsxSpreadAttribute(node, _expression); + }, + [SyntaxKind.JsxClosingElement]: (node: JsxClosingElement, visitor: Visitor): JsxClosingElement => { + const _tagName = visitNode(node.tagName, visitor, isJsxTagNameExpression); + return updateJsxClosingElement(node, _tagName); + }, + [SyntaxKind.JsxExpression]: (node: JsxExpression, visitor: Visitor): JsxExpression => { + const _dotDotDotToken = visitNode(node.dotDotDotToken, visitor, isDotDotDotToken); + const _expression = visitNode(node.expression, visitor, isExpression); + return updateJsxExpression(node, _dotDotDotToken, _expression); + }, + [SyntaxKind.SyntaxList]: (node: SyntaxList, visitor: Visitor): SyntaxList => { + const _children = visitNodesArray(node.children, visitor); + return updateSyntaxList(node, _children); + }, + [SyntaxKind.JSDoc]: (node: JSDoc, visitor: Visitor): JSDoc => { + const _comment = visitNodes(node.comment, visitor); + const _tags = visitNodes(node.tags, visitor); + return updateJSDoc(node, _comment, _tags); + }, + [SyntaxKind.JSDocTypeExpression]: (node: JSDocTypeExpression, visitor: Visitor): JSDocTypeExpression => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocTypeExpression(node, _type); + }, + [SyntaxKind.JSDocNonNullableType]: (node: JSDocNonNullableType, visitor: Visitor): JSDocNonNullableType => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocNonNullableType(node, _type); + }, + [SyntaxKind.JSDocNullableType]: (node: JSDocNullableType, visitor: Visitor): JSDocNullableType => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocNullableType(node, _type); + }, + [SyntaxKind.JSDocVariadicType]: (node: JSDocVariadicType, visitor: Visitor): JSDocVariadicType => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocVariadicType(node, _type); + }, + [SyntaxKind.JSDocOptionalType]: (node: JSDocOptionalType, visitor: Visitor): JSDocOptionalType => { + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocOptionalType(node, _type); + }, + [SyntaxKind.JSDocTypeTag]: (node: JSDocTypeTag, visitor: Visitor): JSDocTypeTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocTypeTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocUnknownTag]: (node: JSDocUnknownTag, visitor: Visitor): JSDocUnknownTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocUnknownTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocTemplateTag]: (node: JSDocTemplateTag, visitor: Visitor): JSDocTemplateTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _constraint = visitNode(node.constraint, visitor); + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocTemplateTag(node, _tagName, _constraint, _typeParameters, _comment); + }, + [SyntaxKind.JSDocReturnTag]: (node: JSDocReturnTag, visitor: Visitor): JSDocReturnTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocReturnTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocPublicTag]: (node: JSDocPublicTag, visitor: Visitor): JSDocPublicTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocPublicTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocPrivateTag]: (node: JSDocPrivateTag, visitor: Visitor): JSDocPrivateTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocPrivateTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocProtectedTag]: (node: JSDocProtectedTag, visitor: Visitor): JSDocProtectedTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocProtectedTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocReadonlyTag]: (node: JSDocReadonlyTag, visitor: Visitor): JSDocReadonlyTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocReadonlyTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocOverrideTag]: (node: JSDocOverrideTag, visitor: Visitor): JSDocOverrideTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocOverrideTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocDeprecatedTag]: (node: JSDocDeprecatedTag, visitor: Visitor): JSDocDeprecatedTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocDeprecatedTag(node, _tagName, _comment); + }, + [SyntaxKind.JSDocSeeTag]: (node: JSDocSeeTag, visitor: Visitor): JSDocSeeTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _nameExpression = visitNode(node.nameExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocSeeTag(node, _tagName, _nameExpression, _comment); + }, + [SyntaxKind.JSDocImplementsTag]: (node: JSDocImplementsTag, visitor: Visitor): JSDocImplementsTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _className = visitNode(node.className, visitor, isExpressionWithTypeArguments); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocImplementsTag(node, _tagName, _className, _comment); + }, + [SyntaxKind.JSDocAugmentsTag]: (node: JSDocAugmentsTag, visitor: Visitor): JSDocAugmentsTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _className = visitNode(node.className, visitor, isExpressionWithTypeArguments); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocAugmentsTag(node, _tagName, _className, _comment); + }, + [SyntaxKind.JSDocSatisfiesTag]: (node: JSDocSatisfiesTag, visitor: Visitor): JSDocSatisfiesTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocSatisfiesTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocThrowsTag]: (node: JSDocThrowsTag, visitor: Visitor): JSDocThrowsTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocThrowsTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocThisTag]: (node: JSDocThisTag, visitor: Visitor): JSDocThisTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocThisTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocImportTag]: (node: JSDocImportTag, visitor: Visitor): JSDocImportTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _importClause = visitNode(node.importClause, visitor, isImportClause); + const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); + const _attributes = visitNode(node.attributes, visitor, isImportAttributes); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocImportTag(node, _tagName, _importClause, _moduleSpecifier, _attributes, _comment); + }, + [SyntaxKind.JSDocCallbackTag]: (node: JSDocCallbackTag, visitor: Visitor): JSDocCallbackTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _name = visitNode(node.name, visitor, isJSDocFullName); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocCallbackTag(node, _tagName, _typeExpression, _name, _comment); + }, + [SyntaxKind.JSDocOverloadTag]: (node: JSDocOverloadTag, visitor: Visitor): JSDocOverloadTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocOverloadTag(node, _tagName, _typeExpression, _comment); + }, + [SyntaxKind.JSDocTypedefTag]: (node: JSDocTypedefTag, visitor: Visitor): JSDocTypedefTag => { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _typeExpression = visitNode(node.typeExpression, visitor); + const _name = visitNode(node.name, visitor, isJSDocFullName); + const _comment = visitNodes(node.comment, visitor); + return updateJSDocTypedefTag(node, _tagName, _typeExpression, _name, _comment); + }, + [SyntaxKind.JSDocSignature]: (node: JSDocSignature, visitor: Visitor): JSDocSignature => { + const _typeParameters = visitNodes(node.typeParameters, visitor); + const _parameters = visitNodes(node.parameters, visitor); + const _type = visitNode(node.type, visitor, isTypeNode); + return updateJSDocSignature(node, _typeParameters, _parameters, _type); + }, + [SyntaxKind.JSDocNameReference]: (node: JSDocNameReference, visitor: Visitor): JSDocNameReference => { + const _name = visitNode(node.name, visitor, isEntityName); + return updateJSDocNameReference(node, _name); + }, + [SyntaxKind.SourceFile]: (node: SourceFile, visitor: Visitor): SourceFile => { + const _statements = visitNodes(node.statements, visitor); + const _endOfFileToken = visitNode(node.endOfFileToken, visitor, isEndOfFile); + return updateSourceFile(node, _statements, _endOfFileToken); + }, + [SyntaxKind.ModuleDeclaration]: (node: ModuleDeclaration, visitor: Visitor): ModuleDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isModuleName); + const _attributes = visitNode(node.attributes, visitor, isTypeLiteralNode); + const _body = visitNode(node.body, visitor, isModuleBody); + return updateModuleDeclaration(node, _modifiers, _name, _attributes, _body); + }, + [SyntaxKind.ImportEqualsDeclaration]: (node: ImportEqualsDeclaration, visitor: Visitor): ImportEqualsDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _moduleReference = visitNode(node.moduleReference, visitor, isModuleReference); + return updateImportEqualsDeclaration(node, _modifiers, _name, _moduleReference); + }, + [SyntaxKind.ExportDeclaration]: (node: ExportDeclaration, visitor: Visitor): ExportDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _exportClause = visitNode(node.exportClause, visitor, isNamedExportBindings); + const _moduleSpecifier = visitNode(node.moduleSpecifier, visitor, isExpression); + const _attributes = visitNode(node.attributes, visitor, isImportAttributes); + return updateExportDeclaration(node, _modifiers, _exportClause, _moduleSpecifier, _attributes); + }, + [SyntaxKind.ImportType]: (node: ImportTypeNode, visitor: Visitor): ImportTypeNode => { + const _argument = visitNode(node.argument, visitor, isTypeNode); + const _attributes = visitNode(node.attributes, visitor, isImportAttributes); + const _qualifier = visitNode(node.qualifier, visitor, isEntityName); + const _typeArguments = visitNodes(node.typeArguments, visitor); + return updateImportTypeNode(node, _argument, _attributes, _qualifier, _typeArguments); + }, + [SyntaxKind.ImportClause]: (node: ImportClause, visitor: Visitor): ImportClause => { + const _name = visitNode(node.name, visitor, isIdentifier); + const _namedBindings = visitNode(node.namedBindings, visitor, isNamedImportBindings); + return updateImportClause(node, _name, _namedBindings); + }, + [SyntaxKind.ImportSpecifier]: (node: ImportSpecifier, visitor: Visitor): ImportSpecifier => { + const _propertyName = visitNode(node.propertyName, visitor, isModuleExportName); + const _name = visitNode(node.name, visitor, isIdentifier); + return updateImportSpecifier(node, _propertyName, _name); + }, + [SyntaxKind.JSDocLink]: (node: JSDocLink, visitor: Visitor): JSDocLink => { + const _name = visitNode(node.name, visitor, isEntityName); + return updateJSDocLink(node, _name); + }, + [SyntaxKind.JSDocLinkPlain]: (node: JSDocLinkPlain, visitor: Visitor): JSDocLinkPlain => { + const _name = visitNode(node.name, visitor, isEntityName); + return updateJSDocLinkPlain(node, _name); + }, + [SyntaxKind.JSDocLinkCode]: (node: JSDocLinkCode, visitor: Visitor): JSDocLinkCode => { + const _name = visitNode(node.name, visitor, isEntityName); + return updateJSDocLinkCode(node, _name); + }, + [SyntaxKind.TypeParameter]: (node: TypeParameterDeclaration, visitor: Visitor): TypeParameterDeclaration => { + const _modifiers = visitNodes(node.modifiers, visitor); + const _name = visitNode(node.name, visitor, isIdentifier); + const _constraint = visitNode(node.constraint, visitor, isTypeNode); + const _expression = visitNode(node.expression, visitor, isExpression); + const _defaultType = visitNode(node.defaultType, visitor, isTypeNode); + return updateTypeParameterDeclaration(node, _modifiers, _name, _constraint, _expression, _defaultType); + }, + [SyntaxKind.SyntheticReferenceExpression]: (node: SyntheticReferenceExpression, visitor: Visitor): SyntheticReferenceExpression => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _thisArg = visitNode(node.thisArg, visitor, isExpression); + return updateSyntheticReferenceExpression(node, _expression, _thisArg); + }, + [SyntaxKind.JSDocTypeLiteral]: (node: JSDocTypeLiteral, visitor: Visitor): JSDocTypeLiteral => { + const _jsdocPropertyTags = visitNodesArray(node.jsdocPropertyTags, visitor); + return updateJSDocTypeLiteral(node, _jsdocPropertyTags); + }, + [SyntaxKind.ForInStatement]: (node: ForInStatement, visitor: Visitor): ForInStatement => { + const _awaitModifier = visitNode(node.awaitModifier, visitor, isAwaitKeyword); + const _initializer = visitNode(node.initializer, visitor, isForInitializer); + const _expression = visitNode(node.expression, visitor, isExpression); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateForInStatement(node, _awaitModifier, _initializer, _expression, _statement); + }, + [SyntaxKind.ForOfStatement]: (node: ForOfStatement, visitor: Visitor): ForOfStatement => { + const _awaitModifier = visitNode(node.awaitModifier, visitor, isAwaitKeyword); + const _initializer = visitNode(node.initializer, visitor, isForInitializer); + const _expression = visitNode(node.expression, visitor, isExpression); + const _statement = visitNode(node.statement, visitor, isStatement); + return updateForOfStatement(node, _awaitModifier, _initializer, _expression, _statement); + }, + [SyntaxKind.CaseClause]: (node: CaseClause, visitor: Visitor): CaseClause => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _statements = visitNodes(node.statements, visitor); + return updateCaseClause(node, _expression, _statements); + }, + [SyntaxKind.DefaultClause]: (node: DefaultClause, visitor: Visitor): DefaultClause => { + const _expression = visitNode(node.expression, visitor, isExpression); + const _statements = visitNodes(node.statements, visitor); + return updateDefaultClause(node, _expression, _statements); + }, + [SyntaxKind.ObjectBindingPattern]: (node: ObjectBindingPattern, visitor: Visitor): ObjectBindingPattern => { + const _elements = visitNodes(node.elements, visitor); + return updateObjectBindingPattern(node, _elements); + }, + [SyntaxKind.ArrayBindingPattern]: (node: ArrayBindingPattern, visitor: Visitor): ArrayBindingPattern => { + const _elements = visitNodes(node.elements, visitor); + return updateArrayBindingPattern(node, _elements); + }, + [SyntaxKind.JSDocParameterTag]: visitEachChildOfJSDocParameterTag, + [SyntaxKind.JSDocPropertyTag]: visitEachChildOfJSDocPropertyTag, +}; diff --git a/packages/typescript/src/ast/visitor.ts b/packages/typescript/src/ast/visitor.ts index c26259a46514c..a6d49ad9a485f 100644 --- a/packages/typescript/src/ast/visitor.ts +++ b/packages/typescript/src/ast/visitor.ts @@ -1,111 +1,111 @@ -/** - * Hand-written visitor implementations for nodes with runtime-dependent - * child ordering. Generated code in visitor.generated.ts and factory.generated.ts - * delegates to these functions. - */ - -import { SyntaxKind } from "#enums/syntaxKind"; -import type { - JSDocComment, - JSDocParameterOrPropertyTag, - JSDocParameterTag, - JSDocPropertyTag, - Node, - NodeArray, -} from "./ast.ts"; -import { - updateJSDocParameterTag, - updateJSDocPropertyTag, -} from "./factory.generated.ts"; -import { - isEntityName, - isIdentifier, - isTypeNode, -} from "./is.ts"; -import type { Visitor } from "./visitor.generated.ts"; -import { - visitNode, - visitNodes, -} from "./visitor.generated.ts"; - -export type { Visitor }; -export { visitEachChild, visitNode, visitNodes, visitNodesArray } from "./visitor.generated.ts"; - -// ── forEachChild helpers (same signature as forEachChildTable entries) ── - -function visitNodeForEachChild(cbNode: (node: Node) => T, node: Node | undefined): T | undefined { - return node ? cbNode(node) : undefined; -} - -function visitNodesForEachChild(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined { - if (!nodes) return undefined; - if (cbNodes) return cbNodes(nodes); - for (const node of nodes) { - const result = cbNode(node); - if (result) return result; - } - return undefined; -} - -// ── forEachChild implementations ── - -function forEachChildOfJSDocParameterOrPropertyTag(data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined): T | undefined { - return visitNodeForEachChild(cbNode, data.tagName) || - (data.isNameFirst - ? visitNodeForEachChild(cbNode, data.name) || visitNodeForEachChild(cbNode, data.typeExpression) - : visitNodeForEachChild(cbNode, data.typeExpression) || visitNodeForEachChild(cbNode, data.name)) || - visitNodesForEachChild(cbNode, cbNodes, data.comment); -} - -export { forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocParameterTag, forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocPropertyTag }; - -// ── yieldEachChild implementations ── - -function* yieldEachChildOfJSDocParameterOrPropertyTag(data: any): Generator { - if (data.tagName) { - const res = yield data.tagName; - if (res) return res; - } - if (data.isNameFirst) { - if (data.name) { - const res = yield data.name; - if (res) return res; - } - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - } - else { - if (data.typeExpression) { - const res = yield data.typeExpression; - if (res) return res; - } - if (data.name) { - const res = yield data.name; - if (res) return res; - } - } - if (data.comment) { - for (const node of data.comment) { - const res = yield node; - if (res) return res; - } - } -} - -export { yieldEachChildOfJSDocParameterOrPropertyTag as yieldEachChildOfJSDocParameterTag, yieldEachChildOfJSDocParameterOrPropertyTag as yieldEachChildOfJSDocPropertyTag }; - -// ── visitEachChild implementations ── - -function visitEachChildOfJSDocParameterOrPropertyTag(node: JSDocParameterOrPropertyTag, visitor: Visitor): JSDocParameterOrPropertyTag { - const _tagName = visitNode(node.tagName, visitor, isIdentifier); - const _name = visitNode(node.name, visitor, isEntityName); - const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); - const _comment = visitNodes(node.comment, visitor); - return node.kind === SyntaxKind.JSDocParameterTag - ? updateJSDocParameterTag(node, _tagName, _name, _typeExpression, _comment) - : updateJSDocPropertyTag(node, _tagName, _name, _typeExpression, _comment); -} - -export { visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocParameterTag, visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocPropertyTag }; +/** + * Hand-written visitor implementations for nodes with runtime-dependent + * child ordering. Generated code in visitor.generated.ts and factory.generated.ts + * delegates to these functions. + */ + +import { SyntaxKind } from "#enums/syntaxKind"; +import type { + JSDocComment, + JSDocParameterOrPropertyTag, + JSDocParameterTag, + JSDocPropertyTag, + Node, + NodeArray, +} from "./ast.ts"; +import { + updateJSDocParameterTag, + updateJSDocPropertyTag, +} from "./factory.generated.ts"; +import { + isEntityName, + isIdentifier, + isTypeNode, +} from "./is.ts"; +import type { Visitor } from "./visitor.generated.ts"; +import { + visitNode, + visitNodes, +} from "./visitor.generated.ts"; + +export type { Visitor }; +export { visitEachChild, visitNode, visitNodes, visitNodesArray } from "./visitor.generated.ts"; + +// ── forEachChild helpers (same signature as forEachChildTable entries) ── + +function visitNodeForEachChild(cbNode: (node: Node) => T, node: Node | undefined): T | undefined { + return node ? cbNode(node) : undefined; +} + +function visitNodesForEachChild(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined { + if (!nodes) return undefined; + if (cbNodes) return cbNodes(nodes); + for (const node of nodes) { + const result = cbNode(node); + if (result) return result; + } + return undefined; +} + +// ── forEachChild implementations ── + +function forEachChildOfJSDocParameterOrPropertyTag(data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined): T | undefined { + return visitNodeForEachChild(cbNode, data.tagName) || + (data.isNameFirst + ? visitNodeForEachChild(cbNode, data.name) || visitNodeForEachChild(cbNode, data.typeExpression) + : visitNodeForEachChild(cbNode, data.typeExpression) || visitNodeForEachChild(cbNode, data.name)) || + visitNodesForEachChild(cbNode, cbNodes, data.comment); +} + +export { forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocParameterTag, forEachChildOfJSDocParameterOrPropertyTag as forEachChildOfJSDocPropertyTag }; + +// ── yieldEachChild implementations ── + +function* yieldEachChildOfJSDocParameterOrPropertyTag(data: any): Generator { + if (data.tagName) { + const res = yield data.tagName; + if (res) return res; + } + if (data.isNameFirst) { + if (data.name) { + const res = yield data.name; + if (res) return res; + } + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + } + else { + if (data.typeExpression) { + const res = yield data.typeExpression; + if (res) return res; + } + if (data.name) { + const res = yield data.name; + if (res) return res; + } + } + if (data.comment) { + for (const node of data.comment) { + const res = yield node; + if (res) return res; + } + } +} + +export { yieldEachChildOfJSDocParameterOrPropertyTag as yieldEachChildOfJSDocParameterTag, yieldEachChildOfJSDocParameterOrPropertyTag as yieldEachChildOfJSDocPropertyTag }; + +// ── visitEachChild implementations ── + +function visitEachChildOfJSDocParameterOrPropertyTag(node: JSDocParameterOrPropertyTag, visitor: Visitor): JSDocParameterOrPropertyTag { + const _tagName = visitNode(node.tagName, visitor, isIdentifier); + const _name = visitNode(node.name, visitor, isEntityName); + const _typeExpression = visitNode(node.typeExpression, visitor, isTypeNode); + const _comment = visitNodes(node.comment, visitor); + return node.kind === SyntaxKind.JSDocParameterTag + ? updateJSDocParameterTag(node, _tagName, _name, _typeExpression, _comment) + : updateJSDocPropertyTag(node, _tagName, _name, _typeExpression, _comment); +} + +export { visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocParameterTag, visitEachChildOfJSDocParameterOrPropertyTag as visitEachChildOfJSDocPropertyTag }; diff --git a/packages/typescript/src/enums/caseSensitivity.enum.ts b/packages/typescript/src/enums/caseSensitivity.enum.ts index f3d0c88fcc60d..72634584882c6 100644 --- a/packages/typescript/src/enums/caseSensitivity.enum.ts +++ b/packages/typescript/src/enums/caseSensitivity.enum.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/tspath/path.go. DO NOT EDIT. - -export enum CaseSensitivity { - Insensitive = 0, - Sensitive = 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/tspath/path.go. DO NOT EDIT. + +export enum CaseSensitivity { + Insensitive = 0, + Sensitive = 1, +} diff --git a/packages/typescript/src/enums/caseSensitivity.ts b/packages/typescript/src/enums/caseSensitivity.ts index 57d30370ccd5c..360981aec3234 100644 --- a/packages/typescript/src/enums/caseSensitivity.ts +++ b/packages/typescript/src/enums/caseSensitivity.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/tspath/path.go. DO NOT EDIT. -export var CaseSensitivity: any; -(function (CaseSensitivity) { - CaseSensitivity[CaseSensitivity["Insensitive"] = 0] = "Insensitive"; - CaseSensitivity[CaseSensitivity["Sensitive"] = 1] = "Sensitive"; -})(CaseSensitivity || (CaseSensitivity = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/tspath/path.go. DO NOT EDIT. +export var CaseSensitivity: any; +(function (CaseSensitivity) { + CaseSensitivity[CaseSensitivity["Insensitive"] = 0] = "Insensitive"; + CaseSensitivity[CaseSensitivity["Sensitive"] = 1] = "Sensitive"; +})(CaseSensitivity || (CaseSensitivity = {})); diff --git a/packages/typescript/src/enums/characterCodes.enum.ts b/packages/typescript/src/enums/characterCodes.enum.ts index 052c7e8feb896..0e7fe5a8c8323 100644 --- a/packages/typescript/src/enums/characterCodes.enum.ts +++ b/packages/typescript/src/enums/characterCodes.enum.ts @@ -1,139 +1,139 @@ -export enum CharacterCodes { - EOF = -1, - nullCharacter = 0, - maxAsciiCharacter = 0x7F, - - lineFeed = 0x0A, // \n - carriageReturn = 0x0D, // \r - lineSeparator = 0x2028, - paragraphSeparator = 0x2029, - nextLine = 0x0085, - - // Unicode 3.0 space characters - space = 0x0020, // " " - nonBreakingSpace = 0x00A0, // - enQuad = 0x2000, - emQuad = 0x2001, - enSpace = 0x2002, - emSpace = 0x2003, - threePerEmSpace = 0x2004, - fourPerEmSpace = 0x2005, - sixPerEmSpace = 0x2006, - figureSpace = 0x2007, - punctuationSpace = 0x2008, - thinSpace = 0x2009, - hairSpace = 0x200A, - zeroWidthSpace = 0x200B, - narrowNoBreakSpace = 0x202F, - ideographicSpace = 0x3000, - mathematicalSpace = 0x205F, - ogham = 0x1680, - - // Unicode replacement character produced when a byte sequence is invalid - replacementCharacter = 0xFFFD, - - _ = 0x5F, - $ = 0x24, - - _0 = 0x30, - _1 = 0x31, - _2 = 0x32, - _3 = 0x33, - _4 = 0x34, - _5 = 0x35, - _6 = 0x36, - _7 = 0x37, - _8 = 0x38, - _9 = 0x39, - - a = 0x61, - b = 0x62, - c = 0x63, - d = 0x64, - e = 0x65, - f = 0x66, - g = 0x67, - h = 0x68, - i = 0x69, - j = 0x6A, - k = 0x6B, - l = 0x6C, - m = 0x6D, - n = 0x6E, - o = 0x6F, - p = 0x70, - q = 0x71, - r = 0x72, - s = 0x73, - t = 0x74, - u = 0x75, - v = 0x76, - w = 0x77, - x = 0x78, - y = 0x79, - z = 0x7A, - - A = 0x41, - B = 0x42, - C = 0x43, - D = 0x44, - E = 0x45, - F = 0x46, - G = 0x47, - H = 0x48, - I = 0x49, - J = 0x4A, - K = 0x4B, - L = 0x4C, - M = 0x4D, - N = 0x4E, - O = 0x4F, - P = 0x50, - Q = 0x51, - R = 0x52, - S = 0x53, - T = 0x54, - U = 0x55, - V = 0x56, - W = 0x57, - X = 0x58, - Y = 0x59, - Z = 0x5a, - - ampersand = 0x26, // & - asterisk = 0x2A, // * - at = 0x40, // @ - backslash = 0x5C, // \ - backtick = 0x60, // ` - bar = 0x7C, // | - caret = 0x5E, // ^ - closeBrace = 0x7D, // } - closeBracket = 0x5D, // ] - closeParen = 0x29, // ) - colon = 0x3A, // : - comma = 0x2C, // , - dot = 0x2E, // . - doubleQuote = 0x22, // " - equals = 0x3D, // = - exclamation = 0x21, // ! - greaterThan = 0x3E, // > - hash = 0x23, // # - lessThan = 0x3C, // < - minus = 0x2D, // - - openBrace = 0x7B, // { - openBracket = 0x5B, // [ - openParen = 0x28, // ( - percent = 0x25, // % - plus = 0x2B, // + - question = 0x3F, // ? - semicolon = 0x3B, // ; - singleQuote = 0x27, // ' - slash = 0x2F, // / - tilde = 0x7E, // ~ - - backspace = 0x08, // \b - formFeed = 0x0C, // \f - byteOrderMark = 0xFEFF, - tab = 0x09, // \t - verticalTab = 0x0B, // \v -} +export enum CharacterCodes { + EOF = -1, + nullCharacter = 0, + maxAsciiCharacter = 0x7F, + + lineFeed = 0x0A, // \n + carriageReturn = 0x0D, // \r + lineSeparator = 0x2028, + paragraphSeparator = 0x2029, + nextLine = 0x0085, + + // Unicode 3.0 space characters + space = 0x0020, // " " + nonBreakingSpace = 0x00A0, // + enQuad = 0x2000, + emQuad = 0x2001, + enSpace = 0x2002, + emSpace = 0x2003, + threePerEmSpace = 0x2004, + fourPerEmSpace = 0x2005, + sixPerEmSpace = 0x2006, + figureSpace = 0x2007, + punctuationSpace = 0x2008, + thinSpace = 0x2009, + hairSpace = 0x200A, + zeroWidthSpace = 0x200B, + narrowNoBreakSpace = 0x202F, + ideographicSpace = 0x3000, + mathematicalSpace = 0x205F, + ogham = 0x1680, + + // Unicode replacement character produced when a byte sequence is invalid + replacementCharacter = 0xFFFD, + + _ = 0x5F, + $ = 0x24, + + _0 = 0x30, + _1 = 0x31, + _2 = 0x32, + _3 = 0x33, + _4 = 0x34, + _5 = 0x35, + _6 = 0x36, + _7 = 0x37, + _8 = 0x38, + _9 = 0x39, + + a = 0x61, + b = 0x62, + c = 0x63, + d = 0x64, + e = 0x65, + f = 0x66, + g = 0x67, + h = 0x68, + i = 0x69, + j = 0x6A, + k = 0x6B, + l = 0x6C, + m = 0x6D, + n = 0x6E, + o = 0x6F, + p = 0x70, + q = 0x71, + r = 0x72, + s = 0x73, + t = 0x74, + u = 0x75, + v = 0x76, + w = 0x77, + x = 0x78, + y = 0x79, + z = 0x7A, + + A = 0x41, + B = 0x42, + C = 0x43, + D = 0x44, + E = 0x45, + F = 0x46, + G = 0x47, + H = 0x48, + I = 0x49, + J = 0x4A, + K = 0x4B, + L = 0x4C, + M = 0x4D, + N = 0x4E, + O = 0x4F, + P = 0x50, + Q = 0x51, + R = 0x52, + S = 0x53, + T = 0x54, + U = 0x55, + V = 0x56, + W = 0x57, + X = 0x58, + Y = 0x59, + Z = 0x5a, + + ampersand = 0x26, // & + asterisk = 0x2A, // * + at = 0x40, // @ + backslash = 0x5C, // \ + backtick = 0x60, // ` + bar = 0x7C, // | + caret = 0x5E, // ^ + closeBrace = 0x7D, // } + closeBracket = 0x5D, // ] + closeParen = 0x29, // ) + colon = 0x3A, // : + comma = 0x2C, // , + dot = 0x2E, // . + doubleQuote = 0x22, // " + equals = 0x3D, // = + exclamation = 0x21, // ! + greaterThan = 0x3E, // > + hash = 0x23, // # + lessThan = 0x3C, // < + minus = 0x2D, // - + openBrace = 0x7B, // { + openBracket = 0x5B, // [ + openParen = 0x28, // ( + percent = 0x25, // % + plus = 0x2B, // + + question = 0x3F, // ? + semicolon = 0x3B, // ; + singleQuote = 0x27, // ' + slash = 0x2F, // / + tilde = 0x7E, // ~ + + backspace = 0x08, // \b + formFeed = 0x0C, // \f + byteOrderMark = 0xFEFF, + tab = 0x09, // \t + verticalTab = 0x0B, // \v +} diff --git a/packages/typescript/src/enums/characterCodes.ts b/packages/typescript/src/enums/characterCodes.ts index 232a292da0cd0..5981512833131 100644 --- a/packages/typescript/src/enums/characterCodes.ts +++ b/packages/typescript/src/enums/characterCodes.ts @@ -1,129 +1,129 @@ -export var CharacterCodes: any; -(function (CharacterCodes) { - CharacterCodes[CharacterCodes["EOF"] = -1] = "EOF"; - CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; - CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; - CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; - CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; - CharacterCodes[CharacterCodes["lineSeparator"] = 8232] = "lineSeparator"; - CharacterCodes[CharacterCodes["paragraphSeparator"] = 8233] = "paragraphSeparator"; - CharacterCodes[CharacterCodes["nextLine"] = 133] = "nextLine"; - CharacterCodes[CharacterCodes["space"] = 32] = "space"; - CharacterCodes[CharacterCodes["nonBreakingSpace"] = 160] = "nonBreakingSpace"; - CharacterCodes[CharacterCodes["enQuad"] = 8192] = "enQuad"; - CharacterCodes[CharacterCodes["emQuad"] = 8193] = "emQuad"; - CharacterCodes[CharacterCodes["enSpace"] = 8194] = "enSpace"; - CharacterCodes[CharacterCodes["emSpace"] = 8195] = "emSpace"; - CharacterCodes[CharacterCodes["threePerEmSpace"] = 8196] = "threePerEmSpace"; - CharacterCodes[CharacterCodes["fourPerEmSpace"] = 8197] = "fourPerEmSpace"; - CharacterCodes[CharacterCodes["sixPerEmSpace"] = 8198] = "sixPerEmSpace"; - CharacterCodes[CharacterCodes["figureSpace"] = 8199] = "figureSpace"; - CharacterCodes[CharacterCodes["punctuationSpace"] = 8200] = "punctuationSpace"; - CharacterCodes[CharacterCodes["thinSpace"] = 8201] = "thinSpace"; - CharacterCodes[CharacterCodes["hairSpace"] = 8202] = "hairSpace"; - CharacterCodes[CharacterCodes["zeroWidthSpace"] = 8203] = "zeroWidthSpace"; - CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 8239] = "narrowNoBreakSpace"; - CharacterCodes[CharacterCodes["ideographicSpace"] = 12288] = "ideographicSpace"; - CharacterCodes[CharacterCodes["mathematicalSpace"] = 8287] = "mathematicalSpace"; - CharacterCodes[CharacterCodes["ogham"] = 5765] = "ogham"; - CharacterCodes[CharacterCodes["replacementCharacter"] = 65533] = "replacementCharacter"; - CharacterCodes[CharacterCodes["_"] = 95] = "_"; - CharacterCodes[CharacterCodes["$"] = 36] = "$"; - CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; - CharacterCodes[CharacterCodes["_1"] = 49] = "_1"; - CharacterCodes[CharacterCodes["_2"] = 50] = "_2"; - CharacterCodes[CharacterCodes["_3"] = 51] = "_3"; - CharacterCodes[CharacterCodes["_4"] = 52] = "_4"; - CharacterCodes[CharacterCodes["_5"] = 53] = "_5"; - CharacterCodes[CharacterCodes["_6"] = 54] = "_6"; - CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; - CharacterCodes[CharacterCodes["_8"] = 56] = "_8"; - CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; - CharacterCodes[CharacterCodes["a"] = 97] = "a"; - CharacterCodes[CharacterCodes["b"] = 98] = "b"; - CharacterCodes[CharacterCodes["c"] = 99] = "c"; - CharacterCodes[CharacterCodes["d"] = 100] = "d"; - CharacterCodes[CharacterCodes["e"] = 101] = "e"; - CharacterCodes[CharacterCodes["f"] = 102] = "f"; - CharacterCodes[CharacterCodes["g"] = 103] = "g"; - CharacterCodes[CharacterCodes["h"] = 104] = "h"; - CharacterCodes[CharacterCodes["i"] = 105] = "i"; - CharacterCodes[CharacterCodes["j"] = 106] = "j"; - CharacterCodes[CharacterCodes["k"] = 107] = "k"; - CharacterCodes[CharacterCodes["l"] = 108] = "l"; - CharacterCodes[CharacterCodes["m"] = 109] = "m"; - CharacterCodes[CharacterCodes["n"] = 110] = "n"; - CharacterCodes[CharacterCodes["o"] = 111] = "o"; - CharacterCodes[CharacterCodes["p"] = 112] = "p"; - CharacterCodes[CharacterCodes["q"] = 113] = "q"; - CharacterCodes[CharacterCodes["r"] = 114] = "r"; - CharacterCodes[CharacterCodes["s"] = 115] = "s"; - CharacterCodes[CharacterCodes["t"] = 116] = "t"; - CharacterCodes[CharacterCodes["u"] = 117] = "u"; - CharacterCodes[CharacterCodes["v"] = 118] = "v"; - CharacterCodes[CharacterCodes["w"] = 119] = "w"; - CharacterCodes[CharacterCodes["x"] = 120] = "x"; - CharacterCodes[CharacterCodes["y"] = 121] = "y"; - CharacterCodes[CharacterCodes["z"] = 122] = "z"; - CharacterCodes[CharacterCodes["A"] = 65] = "A"; - CharacterCodes[CharacterCodes["B"] = 66] = "B"; - CharacterCodes[CharacterCodes["C"] = 67] = "C"; - CharacterCodes[CharacterCodes["D"] = 68] = "D"; - CharacterCodes[CharacterCodes["E"] = 69] = "E"; - CharacterCodes[CharacterCodes["F"] = 70] = "F"; - CharacterCodes[CharacterCodes["G"] = 71] = "G"; - CharacterCodes[CharacterCodes["H"] = 72] = "H"; - CharacterCodes[CharacterCodes["I"] = 73] = "I"; - CharacterCodes[CharacterCodes["J"] = 74] = "J"; - CharacterCodes[CharacterCodes["K"] = 75] = "K"; - CharacterCodes[CharacterCodes["L"] = 76] = "L"; - CharacterCodes[CharacterCodes["M"] = 77] = "M"; - CharacterCodes[CharacterCodes["N"] = 78] = "N"; - CharacterCodes[CharacterCodes["O"] = 79] = "O"; - CharacterCodes[CharacterCodes["P"] = 80] = "P"; - CharacterCodes[CharacterCodes["Q"] = 81] = "Q"; - CharacterCodes[CharacterCodes["R"] = 82] = "R"; - CharacterCodes[CharacterCodes["S"] = 83] = "S"; - CharacterCodes[CharacterCodes["T"] = 84] = "T"; - CharacterCodes[CharacterCodes["U"] = 85] = "U"; - CharacterCodes[CharacterCodes["V"] = 86] = "V"; - CharacterCodes[CharacterCodes["W"] = 87] = "W"; - CharacterCodes[CharacterCodes["X"] = 88] = "X"; - CharacterCodes[CharacterCodes["Y"] = 89] = "Y"; - CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; - CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; - CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; - CharacterCodes[CharacterCodes["at"] = 64] = "at"; - CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; - CharacterCodes[CharacterCodes["backtick"] = 96] = "backtick"; - CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; - CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; - CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; - CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; - CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; - CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; - CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; - CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; - CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; - CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; - CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; - CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; - CharacterCodes[CharacterCodes["hash"] = 35] = "hash"; - CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; - CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; - CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; - CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; - CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; - CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; - CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; - CharacterCodes[CharacterCodes["question"] = 63] = "question"; - CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; - CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; - CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; - CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; - CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; - CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; - CharacterCodes[CharacterCodes["byteOrderMark"] = 65279] = "byteOrderMark"; - CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; - CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; -})(CharacterCodes || (CharacterCodes = {})); +export var CharacterCodes: any; +(function (CharacterCodes) { + CharacterCodes[CharacterCodes["EOF"] = -1] = "EOF"; + CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; + CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; + CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; + CharacterCodes[CharacterCodes["lineSeparator"] = 8232] = "lineSeparator"; + CharacterCodes[CharacterCodes["paragraphSeparator"] = 8233] = "paragraphSeparator"; + CharacterCodes[CharacterCodes["nextLine"] = 133] = "nextLine"; + CharacterCodes[CharacterCodes["space"] = 32] = "space"; + CharacterCodes[CharacterCodes["nonBreakingSpace"] = 160] = "nonBreakingSpace"; + CharacterCodes[CharacterCodes["enQuad"] = 8192] = "enQuad"; + CharacterCodes[CharacterCodes["emQuad"] = 8193] = "emQuad"; + CharacterCodes[CharacterCodes["enSpace"] = 8194] = "enSpace"; + CharacterCodes[CharacterCodes["emSpace"] = 8195] = "emSpace"; + CharacterCodes[CharacterCodes["threePerEmSpace"] = 8196] = "threePerEmSpace"; + CharacterCodes[CharacterCodes["fourPerEmSpace"] = 8197] = "fourPerEmSpace"; + CharacterCodes[CharacterCodes["sixPerEmSpace"] = 8198] = "sixPerEmSpace"; + CharacterCodes[CharacterCodes["figureSpace"] = 8199] = "figureSpace"; + CharacterCodes[CharacterCodes["punctuationSpace"] = 8200] = "punctuationSpace"; + CharacterCodes[CharacterCodes["thinSpace"] = 8201] = "thinSpace"; + CharacterCodes[CharacterCodes["hairSpace"] = 8202] = "hairSpace"; + CharacterCodes[CharacterCodes["zeroWidthSpace"] = 8203] = "zeroWidthSpace"; + CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 8239] = "narrowNoBreakSpace"; + CharacterCodes[CharacterCodes["ideographicSpace"] = 12288] = "ideographicSpace"; + CharacterCodes[CharacterCodes["mathematicalSpace"] = 8287] = "mathematicalSpace"; + CharacterCodes[CharacterCodes["ogham"] = 5765] = "ogham"; + CharacterCodes[CharacterCodes["replacementCharacter"] = 65533] = "replacementCharacter"; + CharacterCodes[CharacterCodes["_"] = 95] = "_"; + CharacterCodes[CharacterCodes["$"] = 36] = "$"; + CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; + CharacterCodes[CharacterCodes["_1"] = 49] = "_1"; + CharacterCodes[CharacterCodes["_2"] = 50] = "_2"; + CharacterCodes[CharacterCodes["_3"] = 51] = "_3"; + CharacterCodes[CharacterCodes["_4"] = 52] = "_4"; + CharacterCodes[CharacterCodes["_5"] = 53] = "_5"; + CharacterCodes[CharacterCodes["_6"] = 54] = "_6"; + CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; + CharacterCodes[CharacterCodes["_8"] = 56] = "_8"; + CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; + CharacterCodes[CharacterCodes["a"] = 97] = "a"; + CharacterCodes[CharacterCodes["b"] = 98] = "b"; + CharacterCodes[CharacterCodes["c"] = 99] = "c"; + CharacterCodes[CharacterCodes["d"] = 100] = "d"; + CharacterCodes[CharacterCodes["e"] = 101] = "e"; + CharacterCodes[CharacterCodes["f"] = 102] = "f"; + CharacterCodes[CharacterCodes["g"] = 103] = "g"; + CharacterCodes[CharacterCodes["h"] = 104] = "h"; + CharacterCodes[CharacterCodes["i"] = 105] = "i"; + CharacterCodes[CharacterCodes["j"] = 106] = "j"; + CharacterCodes[CharacterCodes["k"] = 107] = "k"; + CharacterCodes[CharacterCodes["l"] = 108] = "l"; + CharacterCodes[CharacterCodes["m"] = 109] = "m"; + CharacterCodes[CharacterCodes["n"] = 110] = "n"; + CharacterCodes[CharacterCodes["o"] = 111] = "o"; + CharacterCodes[CharacterCodes["p"] = 112] = "p"; + CharacterCodes[CharacterCodes["q"] = 113] = "q"; + CharacterCodes[CharacterCodes["r"] = 114] = "r"; + CharacterCodes[CharacterCodes["s"] = 115] = "s"; + CharacterCodes[CharacterCodes["t"] = 116] = "t"; + CharacterCodes[CharacterCodes["u"] = 117] = "u"; + CharacterCodes[CharacterCodes["v"] = 118] = "v"; + CharacterCodes[CharacterCodes["w"] = 119] = "w"; + CharacterCodes[CharacterCodes["x"] = 120] = "x"; + CharacterCodes[CharacterCodes["y"] = 121] = "y"; + CharacterCodes[CharacterCodes["z"] = 122] = "z"; + CharacterCodes[CharacterCodes["A"] = 65] = "A"; + CharacterCodes[CharacterCodes["B"] = 66] = "B"; + CharacterCodes[CharacterCodes["C"] = 67] = "C"; + CharacterCodes[CharacterCodes["D"] = 68] = "D"; + CharacterCodes[CharacterCodes["E"] = 69] = "E"; + CharacterCodes[CharacterCodes["F"] = 70] = "F"; + CharacterCodes[CharacterCodes["G"] = 71] = "G"; + CharacterCodes[CharacterCodes["H"] = 72] = "H"; + CharacterCodes[CharacterCodes["I"] = 73] = "I"; + CharacterCodes[CharacterCodes["J"] = 74] = "J"; + CharacterCodes[CharacterCodes["K"] = 75] = "K"; + CharacterCodes[CharacterCodes["L"] = 76] = "L"; + CharacterCodes[CharacterCodes["M"] = 77] = "M"; + CharacterCodes[CharacterCodes["N"] = 78] = "N"; + CharacterCodes[CharacterCodes["O"] = 79] = "O"; + CharacterCodes[CharacterCodes["P"] = 80] = "P"; + CharacterCodes[CharacterCodes["Q"] = 81] = "Q"; + CharacterCodes[CharacterCodes["R"] = 82] = "R"; + CharacterCodes[CharacterCodes["S"] = 83] = "S"; + CharacterCodes[CharacterCodes["T"] = 84] = "T"; + CharacterCodes[CharacterCodes["U"] = 85] = "U"; + CharacterCodes[CharacterCodes["V"] = 86] = "V"; + CharacterCodes[CharacterCodes["W"] = 87] = "W"; + CharacterCodes[CharacterCodes["X"] = 88] = "X"; + CharacterCodes[CharacterCodes["Y"] = 89] = "Y"; + CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; + CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; + CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; + CharacterCodes[CharacterCodes["at"] = 64] = "at"; + CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; + CharacterCodes[CharacterCodes["backtick"] = 96] = "backtick"; + CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; + CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; + CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; + CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; + CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; + CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; + CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; + CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; + CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; + CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; + CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; + CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; + CharacterCodes[CharacterCodes["hash"] = 35] = "hash"; + CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; + CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; + CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; + CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; + CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; + CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; + CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; + CharacterCodes[CharacterCodes["question"] = 63] = "question"; + CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; + CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; + CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; + CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; + CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; + CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; + CharacterCodes[CharacterCodes["byteOrderMark"] = 65279] = "byteOrderMark"; + CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; + CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; +})(CharacterCodes || (CharacterCodes = {})); diff --git a/packages/typescript/src/enums/checkFlags.enum.ts b/packages/typescript/src/enums/checkFlags.enum.ts index c7fc87069accb..490ac93fd8c6e 100644 --- a/packages/typescript/src/enums/checkFlags.enum.ts +++ b/packages/typescript/src/enums/checkFlags.enum.ts @@ -1,35 +1,35 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/checkflags.go. DO NOT EDIT. - -export enum CheckFlags { - None = 0, - Instantiated = 1 << 0, - SyntheticProperty = 1 << 1, - SyntheticMethod = 1 << 2, - Readonly = 1 << 3, - ReadPartial = 1 << 4, - WritePartial = 1 << 5, - HasNonUniformType = 1 << 6, - HasLiteralType = 1 << 7, - ContainsPublic = 1 << 8, - ContainsProtected = 1 << 9, - ContainsPrivate = 1 << 10, - ContainsWritePublic = 1 << 11, - ContainsWriteProtected = 1 << 12, - ContainsWritePrivate = 1 << 13, - ContainsStatic = 1 << 14, - Late = 1 << 15, - ReverseMapped = 1 << 16, - OptionalParameter = 1 << 17, - RestParameter = 1 << 18, - DeferredType = 1 << 19, - HasNeverType = 1 << 20, - Mapped = 1 << 21, - StripOptional = 1 << 22, - Unresolved = 1 << 23, - IsDiscriminantComputed = 1 << 24, - IsDiscriminant = 1 << 25, - IndexSymbol = 1 << 26, - Synthetic = SyntheticProperty | SyntheticMethod, - NonUniformAndLiteral = HasNonUniformType | HasLiteralType, - Partial = ReadPartial | WritePartial, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/checkflags.go. DO NOT EDIT. + +export enum CheckFlags { + None = 0, + Instantiated = 1 << 0, + SyntheticProperty = 1 << 1, + SyntheticMethod = 1 << 2, + Readonly = 1 << 3, + ReadPartial = 1 << 4, + WritePartial = 1 << 5, + HasNonUniformType = 1 << 6, + HasLiteralType = 1 << 7, + ContainsPublic = 1 << 8, + ContainsProtected = 1 << 9, + ContainsPrivate = 1 << 10, + ContainsWritePublic = 1 << 11, + ContainsWriteProtected = 1 << 12, + ContainsWritePrivate = 1 << 13, + ContainsStatic = 1 << 14, + Late = 1 << 15, + ReverseMapped = 1 << 16, + OptionalParameter = 1 << 17, + RestParameter = 1 << 18, + DeferredType = 1 << 19, + HasNeverType = 1 << 20, + Mapped = 1 << 21, + StripOptional = 1 << 22, + Unresolved = 1 << 23, + IsDiscriminantComputed = 1 << 24, + IsDiscriminant = 1 << 25, + IndexSymbol = 1 << 26, + Synthetic = SyntheticProperty | SyntheticMethod, + NonUniformAndLiteral = HasNonUniformType | HasLiteralType, + Partial = ReadPartial | WritePartial, +} diff --git a/packages/typescript/src/enums/checkFlags.ts b/packages/typescript/src/enums/checkFlags.ts index 5b4a963299675..798cdb77af8af 100644 --- a/packages/typescript/src/enums/checkFlags.ts +++ b/packages/typescript/src/enums/checkFlags.ts @@ -1,35 +1,35 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/checkflags.go. DO NOT EDIT. -export var CheckFlags: any; -(function (CheckFlags) { - CheckFlags[CheckFlags["None"] = 0] = "None"; - CheckFlags[CheckFlags["Instantiated"] = 1] = "Instantiated"; - CheckFlags[CheckFlags["SyntheticProperty"] = 2] = "SyntheticProperty"; - CheckFlags[CheckFlags["SyntheticMethod"] = 4] = "SyntheticMethod"; - CheckFlags[CheckFlags["Readonly"] = 8] = "Readonly"; - CheckFlags[CheckFlags["ReadPartial"] = 16] = "ReadPartial"; - CheckFlags[CheckFlags["WritePartial"] = 32] = "WritePartial"; - CheckFlags[CheckFlags["HasNonUniformType"] = 64] = "HasNonUniformType"; - CheckFlags[CheckFlags["HasLiteralType"] = 128] = "HasLiteralType"; - CheckFlags[CheckFlags["ContainsPublic"] = 256] = "ContainsPublic"; - CheckFlags[CheckFlags["ContainsProtected"] = 512] = "ContainsProtected"; - CheckFlags[CheckFlags["ContainsPrivate"] = 1024] = "ContainsPrivate"; - CheckFlags[CheckFlags["ContainsWritePublic"] = 2048] = "ContainsWritePublic"; - CheckFlags[CheckFlags["ContainsWriteProtected"] = 4096] = "ContainsWriteProtected"; - CheckFlags[CheckFlags["ContainsWritePrivate"] = 8192] = "ContainsWritePrivate"; - CheckFlags[CheckFlags["ContainsStatic"] = 16384] = "ContainsStatic"; - CheckFlags[CheckFlags["Late"] = 32768] = "Late"; - CheckFlags[CheckFlags["ReverseMapped"] = 65536] = "ReverseMapped"; - CheckFlags[CheckFlags["OptionalParameter"] = 131072] = "OptionalParameter"; - CheckFlags[CheckFlags["RestParameter"] = 262144] = "RestParameter"; - CheckFlags[CheckFlags["DeferredType"] = 524288] = "DeferredType"; - CheckFlags[CheckFlags["HasNeverType"] = 1048576] = "HasNeverType"; - CheckFlags[CheckFlags["Mapped"] = 2097152] = "Mapped"; - CheckFlags[CheckFlags["StripOptional"] = 4194304] = "StripOptional"; - CheckFlags[CheckFlags["Unresolved"] = 8388608] = "Unresolved"; - CheckFlags[CheckFlags["IsDiscriminantComputed"] = 16777216] = "IsDiscriminantComputed"; - CheckFlags[CheckFlags["IsDiscriminant"] = 33554432] = "IsDiscriminant"; - CheckFlags[CheckFlags["IndexSymbol"] = 67108864] = "IndexSymbol"; - CheckFlags[CheckFlags["Synthetic"] = 6] = "Synthetic"; - CheckFlags[CheckFlags["NonUniformAndLiteral"] = 192] = "NonUniformAndLiteral"; - CheckFlags[CheckFlags["Partial"] = 48] = "Partial"; -})(CheckFlags || (CheckFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/checkflags.go. DO NOT EDIT. +export var CheckFlags: any; +(function (CheckFlags) { + CheckFlags[CheckFlags["None"] = 0] = "None"; + CheckFlags[CheckFlags["Instantiated"] = 1] = "Instantiated"; + CheckFlags[CheckFlags["SyntheticProperty"] = 2] = "SyntheticProperty"; + CheckFlags[CheckFlags["SyntheticMethod"] = 4] = "SyntheticMethod"; + CheckFlags[CheckFlags["Readonly"] = 8] = "Readonly"; + CheckFlags[CheckFlags["ReadPartial"] = 16] = "ReadPartial"; + CheckFlags[CheckFlags["WritePartial"] = 32] = "WritePartial"; + CheckFlags[CheckFlags["HasNonUniformType"] = 64] = "HasNonUniformType"; + CheckFlags[CheckFlags["HasLiteralType"] = 128] = "HasLiteralType"; + CheckFlags[CheckFlags["ContainsPublic"] = 256] = "ContainsPublic"; + CheckFlags[CheckFlags["ContainsProtected"] = 512] = "ContainsProtected"; + CheckFlags[CheckFlags["ContainsPrivate"] = 1024] = "ContainsPrivate"; + CheckFlags[CheckFlags["ContainsWritePublic"] = 2048] = "ContainsWritePublic"; + CheckFlags[CheckFlags["ContainsWriteProtected"] = 4096] = "ContainsWriteProtected"; + CheckFlags[CheckFlags["ContainsWritePrivate"] = 8192] = "ContainsWritePrivate"; + CheckFlags[CheckFlags["ContainsStatic"] = 16384] = "ContainsStatic"; + CheckFlags[CheckFlags["Late"] = 32768] = "Late"; + CheckFlags[CheckFlags["ReverseMapped"] = 65536] = "ReverseMapped"; + CheckFlags[CheckFlags["OptionalParameter"] = 131072] = "OptionalParameter"; + CheckFlags[CheckFlags["RestParameter"] = 262144] = "RestParameter"; + CheckFlags[CheckFlags["DeferredType"] = 524288] = "DeferredType"; + CheckFlags[CheckFlags["HasNeverType"] = 1048576] = "HasNeverType"; + CheckFlags[CheckFlags["Mapped"] = 2097152] = "Mapped"; + CheckFlags[CheckFlags["StripOptional"] = 4194304] = "StripOptional"; + CheckFlags[CheckFlags["Unresolved"] = 8388608] = "Unresolved"; + CheckFlags[CheckFlags["IsDiscriminantComputed"] = 16777216] = "IsDiscriminantComputed"; + CheckFlags[CheckFlags["IsDiscriminant"] = 33554432] = "IsDiscriminant"; + CheckFlags[CheckFlags["IndexSymbol"] = 67108864] = "IndexSymbol"; + CheckFlags[CheckFlags["Synthetic"] = 6] = "Synthetic"; + CheckFlags[CheckFlags["NonUniformAndLiteral"] = 192] = "NonUniformAndLiteral"; + CheckFlags[CheckFlags["Partial"] = 48] = "Partial"; +})(CheckFlags || (CheckFlags = {})); diff --git a/packages/typescript/src/enums/commentDirectiveType.enum.ts b/packages/typescript/src/enums/commentDirectiveType.enum.ts index dc75790bcd812..9fa5012aac561 100644 --- a/packages/typescript/src/enums/commentDirectiveType.enum.ts +++ b/packages/typescript/src/enums/commentDirectiveType.enum.ts @@ -1,4 +1,4 @@ -export enum CommentDirectiveType { - ExpectError = 0, - Ignore = 1, -} +export enum CommentDirectiveType { + ExpectError = 0, + Ignore = 1, +} diff --git a/packages/typescript/src/enums/commentDirectiveType.ts b/packages/typescript/src/enums/commentDirectiveType.ts index 2c59ede17483c..e249db7b71fb1 100644 --- a/packages/typescript/src/enums/commentDirectiveType.ts +++ b/packages/typescript/src/enums/commentDirectiveType.ts @@ -1,5 +1,5 @@ -export var CommentDirectiveType: any; -(function (CommentDirectiveType) { - CommentDirectiveType[CommentDirectiveType["ExpectError"] = 0] = "ExpectError"; - CommentDirectiveType[CommentDirectiveType["Ignore"] = 1] = "Ignore"; -})(CommentDirectiveType || (CommentDirectiveType = {})); +export var CommentDirectiveType: any; +(function (CommentDirectiveType) { + CommentDirectiveType[CommentDirectiveType["ExpectError"] = 0] = "ExpectError"; + CommentDirectiveType[CommentDirectiveType["Ignore"] = 1] = "Ignore"; +})(CommentDirectiveType || (CommentDirectiveType = {})); diff --git a/packages/typescript/src/enums/completionItemKind.enum.ts b/packages/typescript/src/enums/completionItemKind.enum.ts index 1b84c46c479d6..42f236e794918 100644 --- a/packages/typescript/src/enums/completionItemKind.enum.ts +++ b/packages/typescript/src/enums/completionItemKind.enum.ts @@ -1,29 +1,29 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/lsp/lsproto/lsp_generated.go. DO NOT EDIT. - -export enum CompletionItemKind { - Text = 1, - Method = 2, - Function = 3, - Constructor = 4, - Field = 5, - Variable = 6, - Class = 7, - Interface = 8, - Module = 9, - Property = 10, - Unit = 11, - Value = 12, - Enum = 13, - Keyword = 14, - Snippet = 15, - Color = 16, - File = 17, - Reference = 18, - Folder = 19, - EnumMember = 20, - Constant = 21, - Struct = 22, - Event = 23, - Operator = 24, - TypeParameter = 25, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/lsp/lsproto/lsp_generated.go. DO NOT EDIT. + +export enum CompletionItemKind { + Text = 1, + Method = 2, + Function = 3, + Constructor = 4, + Field = 5, + Variable = 6, + Class = 7, + Interface = 8, + Module = 9, + Property = 10, + Unit = 11, + Value = 12, + Enum = 13, + Keyword = 14, + Snippet = 15, + Color = 16, + File = 17, + Reference = 18, + Folder = 19, + EnumMember = 20, + Constant = 21, + Struct = 22, + Event = 23, + Operator = 24, + TypeParameter = 25, +} diff --git a/packages/typescript/src/enums/completionItemKind.ts b/packages/typescript/src/enums/completionItemKind.ts index 00126c380c9d1..410c99a630f72 100644 --- a/packages/typescript/src/enums/completionItemKind.ts +++ b/packages/typescript/src/enums/completionItemKind.ts @@ -1,29 +1,29 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/lsp/lsproto/lsp_generated.go. DO NOT EDIT. -export var CompletionItemKind: any; -(function (CompletionItemKind) { - CompletionItemKind[CompletionItemKind["Text"] = 1] = "Text"; - CompletionItemKind[CompletionItemKind["Method"] = 2] = "Method"; - CompletionItemKind[CompletionItemKind["Function"] = 3] = "Function"; - CompletionItemKind[CompletionItemKind["Constructor"] = 4] = "Constructor"; - CompletionItemKind[CompletionItemKind["Field"] = 5] = "Field"; - CompletionItemKind[CompletionItemKind["Variable"] = 6] = "Variable"; - CompletionItemKind[CompletionItemKind["Class"] = 7] = "Class"; - CompletionItemKind[CompletionItemKind["Interface"] = 8] = "Interface"; - CompletionItemKind[CompletionItemKind["Module"] = 9] = "Module"; - CompletionItemKind[CompletionItemKind["Property"] = 10] = "Property"; - CompletionItemKind[CompletionItemKind["Unit"] = 11] = "Unit"; - CompletionItemKind[CompletionItemKind["Value"] = 12] = "Value"; - CompletionItemKind[CompletionItemKind["Enum"] = 13] = "Enum"; - CompletionItemKind[CompletionItemKind["Keyword"] = 14] = "Keyword"; - CompletionItemKind[CompletionItemKind["Snippet"] = 15] = "Snippet"; - CompletionItemKind[CompletionItemKind["Color"] = 16] = "Color"; - CompletionItemKind[CompletionItemKind["File"] = 17] = "File"; - CompletionItemKind[CompletionItemKind["Reference"] = 18] = "Reference"; - CompletionItemKind[CompletionItemKind["Folder"] = 19] = "Folder"; - CompletionItemKind[CompletionItemKind["EnumMember"] = 20] = "EnumMember"; - CompletionItemKind[CompletionItemKind["Constant"] = 21] = "Constant"; - CompletionItemKind[CompletionItemKind["Struct"] = 22] = "Struct"; - CompletionItemKind[CompletionItemKind["Event"] = 23] = "Event"; - CompletionItemKind[CompletionItemKind["Operator"] = 24] = "Operator"; - CompletionItemKind[CompletionItemKind["TypeParameter"] = 25] = "TypeParameter"; -})(CompletionItemKind || (CompletionItemKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/lsp/lsproto/lsp_generated.go. DO NOT EDIT. +export var CompletionItemKind: any; +(function (CompletionItemKind) { + CompletionItemKind[CompletionItemKind["Text"] = 1] = "Text"; + CompletionItemKind[CompletionItemKind["Method"] = 2] = "Method"; + CompletionItemKind[CompletionItemKind["Function"] = 3] = "Function"; + CompletionItemKind[CompletionItemKind["Constructor"] = 4] = "Constructor"; + CompletionItemKind[CompletionItemKind["Field"] = 5] = "Field"; + CompletionItemKind[CompletionItemKind["Variable"] = 6] = "Variable"; + CompletionItemKind[CompletionItemKind["Class"] = 7] = "Class"; + CompletionItemKind[CompletionItemKind["Interface"] = 8] = "Interface"; + CompletionItemKind[CompletionItemKind["Module"] = 9] = "Module"; + CompletionItemKind[CompletionItemKind["Property"] = 10] = "Property"; + CompletionItemKind[CompletionItemKind["Unit"] = 11] = "Unit"; + CompletionItemKind[CompletionItemKind["Value"] = 12] = "Value"; + CompletionItemKind[CompletionItemKind["Enum"] = 13] = "Enum"; + CompletionItemKind[CompletionItemKind["Keyword"] = 14] = "Keyword"; + CompletionItemKind[CompletionItemKind["Snippet"] = 15] = "Snippet"; + CompletionItemKind[CompletionItemKind["Color"] = 16] = "Color"; + CompletionItemKind[CompletionItemKind["File"] = 17] = "File"; + CompletionItemKind[CompletionItemKind["Reference"] = 18] = "Reference"; + CompletionItemKind[CompletionItemKind["Folder"] = 19] = "Folder"; + CompletionItemKind[CompletionItemKind["EnumMember"] = 20] = "EnumMember"; + CompletionItemKind[CompletionItemKind["Constant"] = 21] = "Constant"; + CompletionItemKind[CompletionItemKind["Struct"] = 22] = "Struct"; + CompletionItemKind[CompletionItemKind["Event"] = 23] = "Event"; + CompletionItemKind[CompletionItemKind["Operator"] = 24] = "Operator"; + CompletionItemKind[CompletionItemKind["TypeParameter"] = 25] = "TypeParameter"; +})(CompletionItemKind || (CompletionItemKind = {})); diff --git a/packages/typescript/src/enums/diagnosticCategory.enum.ts b/packages/typescript/src/enums/diagnosticCategory.enum.ts index c7ca0e695636e..41f5df1ae436b 100644 --- a/packages/typescript/src/enums/diagnosticCategory.enum.ts +++ b/packages/typescript/src/enums/diagnosticCategory.enum.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/diagnostics/diagnostics.go. DO NOT EDIT. - -export enum DiagnosticCategory { - Warning = 0, - Error = 1, - Suggestion = 2, - Message = 3, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/diagnostics/diagnostics.go. DO NOT EDIT. + +export enum DiagnosticCategory { + Warning = 0, + Error = 1, + Suggestion = 2, + Message = 3, +} diff --git a/packages/typescript/src/enums/diagnosticCategory.ts b/packages/typescript/src/enums/diagnosticCategory.ts index 26438f4c03c10..5154596b906aa 100644 --- a/packages/typescript/src/enums/diagnosticCategory.ts +++ b/packages/typescript/src/enums/diagnosticCategory.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/diagnostics/diagnostics.go. DO NOT EDIT. -export var DiagnosticCategory: any; -(function (DiagnosticCategory) { - DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; - DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; - DiagnosticCategory[DiagnosticCategory["Suggestion"] = 2] = "Suggestion"; - DiagnosticCategory[DiagnosticCategory["Message"] = 3] = "Message"; -})(DiagnosticCategory || (DiagnosticCategory = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/diagnostics/diagnostics.go. DO NOT EDIT. +export var DiagnosticCategory: any; +(function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Suggestion"] = 2] = "Suggestion"; + DiagnosticCategory[DiagnosticCategory["Message"] = 3] = "Message"; +})(DiagnosticCategory || (DiagnosticCategory = {})); diff --git a/packages/typescript/src/enums/diagnosticDirectivePolicy.enum.ts b/packages/typescript/src/enums/diagnosticDirectivePolicy.enum.ts index fedd1e5286067..6507477d645cc 100644 --- a/packages/typescript/src/enums/diagnosticDirectivePolicy.enum.ts +++ b/packages/typescript/src/enums/diagnosticDirectivePolicy.enum.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/ast.go. DO NOT EDIT. - -export enum DiagnosticDirectivePolicy { - Ignore = 0, - Expect = 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/ast.go. DO NOT EDIT. + +export enum DiagnosticDirectivePolicy { + Ignore = 0, + Expect = 1, +} diff --git a/packages/typescript/src/enums/diagnosticDirectivePolicy.ts b/packages/typescript/src/enums/diagnosticDirectivePolicy.ts index c17dd1480ea92..03de0b8997ea9 100644 --- a/packages/typescript/src/enums/diagnosticDirectivePolicy.ts +++ b/packages/typescript/src/enums/diagnosticDirectivePolicy.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/ast.go. DO NOT EDIT. -export var DiagnosticDirectivePolicy: any; -(function (DiagnosticDirectivePolicy) { - DiagnosticDirectivePolicy[DiagnosticDirectivePolicy["Ignore"] = 0] = "Ignore"; - DiagnosticDirectivePolicy[DiagnosticDirectivePolicy["Expect"] = 1] = "Expect"; -})(DiagnosticDirectivePolicy || (DiagnosticDirectivePolicy = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/ast.go. DO NOT EDIT. +export var DiagnosticDirectivePolicy: any; +(function (DiagnosticDirectivePolicy) { + DiagnosticDirectivePolicy[DiagnosticDirectivePolicy["Ignore"] = 0] = "Ignore"; + DiagnosticDirectivePolicy[DiagnosticDirectivePolicy["Expect"] = 1] = "Expect"; +})(DiagnosticDirectivePolicy || (DiagnosticDirectivePolicy = {})); diff --git a/packages/typescript/src/enums/elementFlags.enum.ts b/packages/typescript/src/enums/elementFlags.enum.ts index 546f54bf3a535..89a9d7deea1d0 100644 --- a/packages/typescript/src/enums/elementFlags.enum.ts +++ b/packages/typescript/src/enums/elementFlags.enum.ts @@ -1,13 +1,13 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum ElementFlags { - None = 0, - Required = 1 << 0, - Optional = 1 << 1, - Rest = 1 << 2, - Variadic = 1 << 3, - Fixed = Required | Optional, - Variable = Rest | Variadic, - NonRequired = Optional | Rest | Variadic, - NonRest = Required | Optional | Variadic, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum ElementFlags { + None = 0, + Required = 1 << 0, + Optional = 1 << 1, + Rest = 1 << 2, + Variadic = 1 << 3, + Fixed = Required | Optional, + Variable = Rest | Variadic, + NonRequired = Optional | Rest | Variadic, + NonRest = Required | Optional | Variadic, +} diff --git a/packages/typescript/src/enums/elementFlags.ts b/packages/typescript/src/enums/elementFlags.ts index 9400139a6bf01..d18e1134ab5a9 100644 --- a/packages/typescript/src/enums/elementFlags.ts +++ b/packages/typescript/src/enums/elementFlags.ts @@ -1,13 +1,13 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var ElementFlags: any; -(function (ElementFlags) { - ElementFlags[ElementFlags["None"] = 0] = "None"; - ElementFlags[ElementFlags["Required"] = 1] = "Required"; - ElementFlags[ElementFlags["Optional"] = 2] = "Optional"; - ElementFlags[ElementFlags["Rest"] = 4] = "Rest"; - ElementFlags[ElementFlags["Variadic"] = 8] = "Variadic"; - ElementFlags[ElementFlags["Fixed"] = 3] = "Fixed"; - ElementFlags[ElementFlags["Variable"] = 12] = "Variable"; - ElementFlags[ElementFlags["NonRequired"] = 14] = "NonRequired"; - ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest"; -})(ElementFlags || (ElementFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var ElementFlags: any; +(function (ElementFlags) { + ElementFlags[ElementFlags["None"] = 0] = "None"; + ElementFlags[ElementFlags["Required"] = 1] = "Required"; + ElementFlags[ElementFlags["Optional"] = 2] = "Optional"; + ElementFlags[ElementFlags["Rest"] = 4] = "Rest"; + ElementFlags[ElementFlags["Variadic"] = 8] = "Variadic"; + ElementFlags[ElementFlags["Fixed"] = 3] = "Fixed"; + ElementFlags[ElementFlags["Variable"] = 12] = "Variable"; + ElementFlags[ElementFlags["NonRequired"] = 14] = "NonRequired"; + ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest"; +})(ElementFlags || (ElementFlags = {})); diff --git a/packages/typescript/src/enums/emitOnly.enum.ts b/packages/typescript/src/enums/emitOnly.enum.ts index f22aba400b828..9c2c9ef25a6d2 100644 --- a/packages/typescript/src/enums/emitOnly.enum.ts +++ b/packages/typescript/src/enums/emitOnly.enum.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/compiler/emitter.go. DO NOT EDIT. - -export enum EmitOnly { - All = 0, - OnlyJs = 1, - OnlyDts = 2, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/compiler/emitter.go. DO NOT EDIT. + +export enum EmitOnly { + All = 0, + OnlyJs = 1, + OnlyDts = 2, +} diff --git a/packages/typescript/src/enums/emitOnly.ts b/packages/typescript/src/enums/emitOnly.ts index 2856c2f03718f..ae00ed105a6df 100644 --- a/packages/typescript/src/enums/emitOnly.ts +++ b/packages/typescript/src/enums/emitOnly.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/compiler/emitter.go. DO NOT EDIT. -export var EmitOnly: any; -(function (EmitOnly) { - EmitOnly[EmitOnly["All"] = 0] = "All"; - EmitOnly[EmitOnly["OnlyJs"] = 1] = "OnlyJs"; - EmitOnly[EmitOnly["OnlyDts"] = 2] = "OnlyDts"; -})(EmitOnly || (EmitOnly = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/compiler/emitter.go. DO NOT EDIT. +export var EmitOnly: any; +(function (EmitOnly) { + EmitOnly[EmitOnly["All"] = 0] = "All"; + EmitOnly[EmitOnly["OnlyJs"] = 1] = "OnlyJs"; + EmitOnly[EmitOnly["OnlyDts"] = 2] = "OnlyDts"; +})(EmitOnly || (EmitOnly = {})); diff --git a/packages/typescript/src/enums/indexKind.enum.ts b/packages/typescript/src/enums/indexKind.enum.ts index 7906d18ec2188..eee0212e26296 100644 --- a/packages/typescript/src/enums/indexKind.enum.ts +++ b/packages/typescript/src/enums/indexKind.enum.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum IndexKind { - String = 0, - Number = 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum IndexKind { + String = 0, + Number = 1, +} diff --git a/packages/typescript/src/enums/indexKind.ts b/packages/typescript/src/enums/indexKind.ts index 21e64454bbc2c..3419cde7c3c82 100644 --- a/packages/typescript/src/enums/indexKind.ts +++ b/packages/typescript/src/enums/indexKind.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var IndexKind: any; -(function (IndexKind) { - IndexKind[IndexKind["String"] = 0] = "String"; - IndexKind[IndexKind["Number"] = 1] = "Number"; -})(IndexKind || (IndexKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var IndexKind: any; +(function (IndexKind) { + IndexKind[IndexKind["String"] = 0] = "String"; + IndexKind[IndexKind["Number"] = 1] = "Number"; +})(IndexKind || (IndexKind = {})); diff --git a/packages/typescript/src/enums/internalSymbolName.enum.ts b/packages/typescript/src/enums/internalSymbolName.enum.ts index 155b25fc1985b..bbce13ca59a8a 100644 --- a/packages/typescript/src/enums/internalSymbolName.enum.ts +++ b/packages/typescript/src/enums/internalSymbolName.enum.ts @@ -1,24 +1,24 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbol.go. DO NOT EDIT. - -export enum InternalSymbolName { - Call = "__call", - Constructor = "__constructor", - New = "__new", - Index = "__index", - ExportStar = "__export", - Global = "__global", - Missing = "__missing", - Type = "__type", - Object = "__object", - JSXAttributes = "__jsxAttributes", - Class = "__class", - Function = "__function", - Computed = "__computed", - AssignmentDeclaration = "__assignment", - InstantiationExpression = "__instantiationExpression", - ImportAttributes = "__importAttributes", - ExportEquals = "export=", - Default = "default", - This = "this", - ModuleExports = "module.exports", -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbol.go. DO NOT EDIT. + +export enum InternalSymbolName { + Call = "__call", + Constructor = "__constructor", + New = "__new", + Index = "__index", + ExportStar = "__export", + Global = "__global", + Missing = "__missing", + Type = "__type", + Object = "__object", + JSXAttributes = "__jsxAttributes", + Class = "__class", + Function = "__function", + Computed = "__computed", + AssignmentDeclaration = "__assignment", + InstantiationExpression = "__instantiationExpression", + ImportAttributes = "__importAttributes", + ExportEquals = "export=", + Default = "default", + This = "this", + ModuleExports = "module.exports", +} diff --git a/packages/typescript/src/enums/internalSymbolName.ts b/packages/typescript/src/enums/internalSymbolName.ts index 5815d341690ce..8b38b11b4df01 100644 --- a/packages/typescript/src/enums/internalSymbolName.ts +++ b/packages/typescript/src/enums/internalSymbolName.ts @@ -1,24 +1,24 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbol.go. DO NOT EDIT. -export var InternalSymbolName: any; -(function (InternalSymbolName) { - InternalSymbolName["Call"] = "__call"; - InternalSymbolName["Constructor"] = "__constructor"; - InternalSymbolName["New"] = "__new"; - InternalSymbolName["Index"] = "__index"; - InternalSymbolName["ExportStar"] = "__export"; - InternalSymbolName["Global"] = "__global"; - InternalSymbolName["Missing"] = "__missing"; - InternalSymbolName["Type"] = "__type"; - InternalSymbolName["Object"] = "__object"; - InternalSymbolName["JSXAttributes"] = "__jsxAttributes"; - InternalSymbolName["Class"] = "__class"; - InternalSymbolName["Function"] = "__function"; - InternalSymbolName["Computed"] = "__computed"; - InternalSymbolName["AssignmentDeclaration"] = "__assignment"; - InternalSymbolName["InstantiationExpression"] = "__instantiationExpression"; - InternalSymbolName["ImportAttributes"] = "__importAttributes"; - InternalSymbolName["ExportEquals"] = "export="; - InternalSymbolName["Default"] = "default"; - InternalSymbolName["This"] = "this"; - InternalSymbolName["ModuleExports"] = "module.exports"; -})(InternalSymbolName || (InternalSymbolName = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbol.go. DO NOT EDIT. +export var InternalSymbolName: any; +(function (InternalSymbolName) { + InternalSymbolName["Call"] = "__call"; + InternalSymbolName["Constructor"] = "__constructor"; + InternalSymbolName["New"] = "__new"; + InternalSymbolName["Index"] = "__index"; + InternalSymbolName["ExportStar"] = "__export"; + InternalSymbolName["Global"] = "__global"; + InternalSymbolName["Missing"] = "__missing"; + InternalSymbolName["Type"] = "__type"; + InternalSymbolName["Object"] = "__object"; + InternalSymbolName["JSXAttributes"] = "__jsxAttributes"; + InternalSymbolName["Class"] = "__class"; + InternalSymbolName["Function"] = "__function"; + InternalSymbolName["Computed"] = "__computed"; + InternalSymbolName["AssignmentDeclaration"] = "__assignment"; + InternalSymbolName["InstantiationExpression"] = "__instantiationExpression"; + InternalSymbolName["ImportAttributes"] = "__importAttributes"; + InternalSymbolName["ExportEquals"] = "export="; + InternalSymbolName["Default"] = "default"; + InternalSymbolName["This"] = "this"; + InternalSymbolName["ModuleExports"] = "module.exports"; +})(InternalSymbolName || (InternalSymbolName = {})); diff --git a/packages/typescript/src/enums/jsDeclarationKind.enum.ts b/packages/typescript/src/enums/jsDeclarationKind.enum.ts index 4e6dcbe9fc539..83fc9d034bb66 100644 --- a/packages/typescript/src/enums/jsDeclarationKind.enum.ts +++ b/packages/typescript/src/enums/jsDeclarationKind.enum.ts @@ -1,11 +1,11 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. - -export enum JSDeclarationKind { - None = 0, - ModuleExports = 1, - ExportsProperty = 2, - ThisProperty = 3, - Property = 4, - ObjectDefinePropertyValue = 5, - ObjectDefinePropertyExports = 6, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. + +export enum JSDeclarationKind { + None = 0, + ModuleExports = 1, + ExportsProperty = 2, + ThisProperty = 3, + Property = 4, + ObjectDefinePropertyValue = 5, + ObjectDefinePropertyExports = 6, +} diff --git a/packages/typescript/src/enums/jsDeclarationKind.ts b/packages/typescript/src/enums/jsDeclarationKind.ts index d09cd90920d20..be50e8173ba7d 100644 --- a/packages/typescript/src/enums/jsDeclarationKind.ts +++ b/packages/typescript/src/enums/jsDeclarationKind.ts @@ -1,11 +1,11 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. -export var JSDeclarationKind: any; -(function (JSDeclarationKind) { - JSDeclarationKind[JSDeclarationKind["None"] = 0] = "None"; - JSDeclarationKind[JSDeclarationKind["ModuleExports"] = 1] = "ModuleExports"; - JSDeclarationKind[JSDeclarationKind["ExportsProperty"] = 2] = "ExportsProperty"; - JSDeclarationKind[JSDeclarationKind["ThisProperty"] = 3] = "ThisProperty"; - JSDeclarationKind[JSDeclarationKind["Property"] = 4] = "Property"; - JSDeclarationKind[JSDeclarationKind["ObjectDefinePropertyValue"] = 5] = "ObjectDefinePropertyValue"; - JSDeclarationKind[JSDeclarationKind["ObjectDefinePropertyExports"] = 6] = "ObjectDefinePropertyExports"; -})(JSDeclarationKind || (JSDeclarationKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. +export var JSDeclarationKind: any; +(function (JSDeclarationKind) { + JSDeclarationKind[JSDeclarationKind["None"] = 0] = "None"; + JSDeclarationKind[JSDeclarationKind["ModuleExports"] = 1] = "ModuleExports"; + JSDeclarationKind[JSDeclarationKind["ExportsProperty"] = 2] = "ExportsProperty"; + JSDeclarationKind[JSDeclarationKind["ThisProperty"] = 3] = "ThisProperty"; + JSDeclarationKind[JSDeclarationKind["Property"] = 4] = "Property"; + JSDeclarationKind[JSDeclarationKind["ObjectDefinePropertyValue"] = 5] = "ObjectDefinePropertyValue"; + JSDeclarationKind[JSDeclarationKind["ObjectDefinePropertyExports"] = 6] = "ObjectDefinePropertyExports"; +})(JSDeclarationKind || (JSDeclarationKind = {})); diff --git a/packages/typescript/src/enums/jsxEmit.enum.ts b/packages/typescript/src/enums/jsxEmit.enum.ts index 0a728dceeef31..94532a74c4ee9 100644 --- a/packages/typescript/src/enums/jsxEmit.enum.ts +++ b/packages/typescript/src/enums/jsxEmit.enum.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum JsxEmit { - None = 0, - Preserve = 1, - React = 2, - ReactNative = 3, - ReactJSX = 4, - ReactJSXDev = 5, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum JsxEmit { + None = 0, + Preserve = 1, + React = 2, + ReactNative = 3, + ReactJSX = 4, + ReactJSXDev = 5, +} diff --git a/packages/typescript/src/enums/jsxEmit.ts b/packages/typescript/src/enums/jsxEmit.ts index 4c5aa9d989f47..3918441e4f91a 100644 --- a/packages/typescript/src/enums/jsxEmit.ts +++ b/packages/typescript/src/enums/jsxEmit.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var JsxEmit: any; -(function (JsxEmit) { - JsxEmit[JsxEmit["None"] = 0] = "None"; - JsxEmit[JsxEmit["Preserve"] = 1] = "Preserve"; - JsxEmit[JsxEmit["React"] = 2] = "React"; - JsxEmit[JsxEmit["ReactNative"] = 3] = "ReactNative"; - JsxEmit[JsxEmit["ReactJSX"] = 4] = "ReactJSX"; - JsxEmit[JsxEmit["ReactJSXDev"] = 5] = "ReactJSXDev"; -})(JsxEmit || (JsxEmit = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var JsxEmit: any; +(function (JsxEmit) { + JsxEmit[JsxEmit["None"] = 0] = "None"; + JsxEmit[JsxEmit["Preserve"] = 1] = "Preserve"; + JsxEmit[JsxEmit["React"] = 2] = "React"; + JsxEmit[JsxEmit["ReactNative"] = 3] = "ReactNative"; + JsxEmit[JsxEmit["ReactJSX"] = 4] = "ReactJSX"; + JsxEmit[JsxEmit["ReactJSXDev"] = 5] = "ReactJSXDev"; +})(JsxEmit || (JsxEmit = {})); diff --git a/packages/typescript/src/enums/languageVariant.enum.ts b/packages/typescript/src/enums/languageVariant.enum.ts index c471ab69ee7a5..d93d5658f20c2 100644 --- a/packages/typescript/src/enums/languageVariant.enum.ts +++ b/packages/typescript/src/enums/languageVariant.enum.ts @@ -1,4 +1,4 @@ -export enum LanguageVariant { - Standard = 0, - JSX = 1, -} +export enum LanguageVariant { + Standard = 0, + JSX = 1, +} diff --git a/packages/typescript/src/enums/languageVariant.ts b/packages/typescript/src/enums/languageVariant.ts index 831ca135c8f4d..3d736070f876b 100644 --- a/packages/typescript/src/enums/languageVariant.ts +++ b/packages/typescript/src/enums/languageVariant.ts @@ -1,5 +1,5 @@ -export var LanguageVariant: any; -(function (LanguageVariant) { - LanguageVariant[LanguageVariant["Standard"] = 0] = "Standard"; - LanguageVariant[LanguageVariant["JSX"] = 1] = "JSX"; -})(LanguageVariant || (LanguageVariant = {})); +export var LanguageVariant: any; +(function (LanguageVariant) { + LanguageVariant[LanguageVariant["Standard"] = 0] = "Standard"; + LanguageVariant[LanguageVariant["JSX"] = 1] = "JSX"; +})(LanguageVariant || (LanguageVariant = {})); diff --git a/packages/typescript/src/enums/modifierFlags.enum.ts b/packages/typescript/src/enums/modifierFlags.enum.ts index 1ccf51e96dc26..750aefd98ae76 100644 --- a/packages/typescript/src/enums/modifierFlags.enum.ts +++ b/packages/typescript/src/enums/modifierFlags.enum.ts @@ -1,43 +1,43 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/modifierflags.go. DO NOT EDIT. - -export enum ModifierFlags { - None = 0, - Public = 1 << 0, - Private = 1 << 1, - Protected = 1 << 2, - Readonly = 1 << 3, - Override = 1 << 4, - Export = 1 << 5, - Abstract = 1 << 6, - Ambient = 1 << 7, - Static = 1 << 8, - Accessor = 1 << 9, - Async = 1 << 10, - Default = 1 << 11, - Const = 1 << 12, - In = 1 << 13, - Out = 1 << 14, - Decorator = 1 << 15, - Deprecated = 1 << 16, - JSDocPublic = 1 << 23, - JSDocPrivate = 1 << 24, - JSDocProtected = 1 << 25, - JSDocReadonly = 1 << 26, - JSDocOverride = 1 << 27, - HasComputedJSDocModifiers = 1 << 28, - HasComputedFlags = 1 << 29, - SyntacticOrJSDocModifiers = Public | Private | Protected | Readonly | Override, - SyntacticOnlyModifiers = Export | Ambient | Abstract | Static | Accessor | Async | Default | Const | In | Out | Decorator, - SyntacticModifiers = SyntacticOrJSDocModifiers | SyntacticOnlyModifiers, - JSDocCacheOnlyModifiers = JSDocPublic | JSDocPrivate | JSDocProtected | JSDocReadonly | JSDocOverride, - JSDocOnlyModifiers = Deprecated, - NonCacheOnlyModifiers = SyntacticOrJSDocModifiers | SyntacticOnlyModifiers | JSDocOnlyModifiers, - AccessibilityModifier = Public | Private | Protected, - ParameterPropertyModifier = AccessibilityModifier | Readonly | Override, - NonPublicAccessibilityModifier = Private | Protected, - TypeScriptModifier = Ambient | Public | Private | Protected | Readonly | Abstract | Const | Override | In | Out, - ExportDefault = Export | Default, - All = Export | Ambient | Public | Private | Protected | Static | Readonly | Abstract | Accessor | Async | Default | Const | Deprecated | Override | In | Out | Decorator, - Modifier = All & ~Decorator, - JavaScript = Export | Static | Accessor | Async | Default, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/modifierflags.go. DO NOT EDIT. + +export enum ModifierFlags { + None = 0, + Public = 1 << 0, + Private = 1 << 1, + Protected = 1 << 2, + Readonly = 1 << 3, + Override = 1 << 4, + Export = 1 << 5, + Abstract = 1 << 6, + Ambient = 1 << 7, + Static = 1 << 8, + Accessor = 1 << 9, + Async = 1 << 10, + Default = 1 << 11, + Const = 1 << 12, + In = 1 << 13, + Out = 1 << 14, + Decorator = 1 << 15, + Deprecated = 1 << 16, + JSDocPublic = 1 << 23, + JSDocPrivate = 1 << 24, + JSDocProtected = 1 << 25, + JSDocReadonly = 1 << 26, + JSDocOverride = 1 << 27, + HasComputedJSDocModifiers = 1 << 28, + HasComputedFlags = 1 << 29, + SyntacticOrJSDocModifiers = Public | Private | Protected | Readonly | Override, + SyntacticOnlyModifiers = Export | Ambient | Abstract | Static | Accessor | Async | Default | Const | In | Out | Decorator, + SyntacticModifiers = SyntacticOrJSDocModifiers | SyntacticOnlyModifiers, + JSDocCacheOnlyModifiers = JSDocPublic | JSDocPrivate | JSDocProtected | JSDocReadonly | JSDocOverride, + JSDocOnlyModifiers = Deprecated, + NonCacheOnlyModifiers = SyntacticOrJSDocModifiers | SyntacticOnlyModifiers | JSDocOnlyModifiers, + AccessibilityModifier = Public | Private | Protected, + ParameterPropertyModifier = AccessibilityModifier | Readonly | Override, + NonPublicAccessibilityModifier = Private | Protected, + TypeScriptModifier = Ambient | Public | Private | Protected | Readonly | Abstract | Const | Override | In | Out, + ExportDefault = Export | Default, + All = Export | Ambient | Public | Private | Protected | Static | Readonly | Abstract | Accessor | Async | Default | Const | Deprecated | Override | In | Out | Decorator, + Modifier = All & ~Decorator, + JavaScript = Export | Static | Accessor | Async | Default, +} diff --git a/packages/typescript/src/enums/modifierFlags.ts b/packages/typescript/src/enums/modifierFlags.ts index 614dcf3b09ed2..277148796dffb 100644 --- a/packages/typescript/src/enums/modifierFlags.ts +++ b/packages/typescript/src/enums/modifierFlags.ts @@ -1,43 +1,43 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/modifierflags.go. DO NOT EDIT. -export var ModifierFlags: any; -(function (ModifierFlags) { - ModifierFlags[ModifierFlags["None"] = 0] = "None"; - ModifierFlags[ModifierFlags["Public"] = 1] = "Public"; - ModifierFlags[ModifierFlags["Private"] = 2] = "Private"; - ModifierFlags[ModifierFlags["Protected"] = 4] = "Protected"; - ModifierFlags[ModifierFlags["Readonly"] = 8] = "Readonly"; - ModifierFlags[ModifierFlags["Override"] = 16] = "Override"; - ModifierFlags[ModifierFlags["Export"] = 32] = "Export"; - ModifierFlags[ModifierFlags["Abstract"] = 64] = "Abstract"; - ModifierFlags[ModifierFlags["Ambient"] = 128] = "Ambient"; - ModifierFlags[ModifierFlags["Static"] = 256] = "Static"; - ModifierFlags[ModifierFlags["Accessor"] = 512] = "Accessor"; - ModifierFlags[ModifierFlags["Async"] = 1024] = "Async"; - ModifierFlags[ModifierFlags["Default"] = 2048] = "Default"; - ModifierFlags[ModifierFlags["Const"] = 4096] = "Const"; - ModifierFlags[ModifierFlags["In"] = 8192] = "In"; - ModifierFlags[ModifierFlags["Out"] = 16384] = "Out"; - ModifierFlags[ModifierFlags["Decorator"] = 32768] = "Decorator"; - ModifierFlags[ModifierFlags["Deprecated"] = 65536] = "Deprecated"; - ModifierFlags[ModifierFlags["JSDocPublic"] = 8388608] = "JSDocPublic"; - ModifierFlags[ModifierFlags["JSDocPrivate"] = 16777216] = "JSDocPrivate"; - ModifierFlags[ModifierFlags["JSDocProtected"] = 33554432] = "JSDocProtected"; - ModifierFlags[ModifierFlags["JSDocReadonly"] = 67108864] = "JSDocReadonly"; - ModifierFlags[ModifierFlags["JSDocOverride"] = 134217728] = "JSDocOverride"; - ModifierFlags[ModifierFlags["HasComputedJSDocModifiers"] = 268435456] = "HasComputedJSDocModifiers"; - ModifierFlags[ModifierFlags["HasComputedFlags"] = 536870912] = "HasComputedFlags"; - ModifierFlags[ModifierFlags["SyntacticOrJSDocModifiers"] = 31] = "SyntacticOrJSDocModifiers"; - ModifierFlags[ModifierFlags["SyntacticOnlyModifiers"] = 65504] = "SyntacticOnlyModifiers"; - ModifierFlags[ModifierFlags["SyntacticModifiers"] = 65535] = "SyntacticModifiers"; - ModifierFlags[ModifierFlags["JSDocCacheOnlyModifiers"] = 260046848] = "JSDocCacheOnlyModifiers"; - ModifierFlags[ModifierFlags["JSDocOnlyModifiers"] = 65536] = "JSDocOnlyModifiers"; - ModifierFlags[ModifierFlags["NonCacheOnlyModifiers"] = 131071] = "NonCacheOnlyModifiers"; - ModifierFlags[ModifierFlags["AccessibilityModifier"] = 7] = "AccessibilityModifier"; - ModifierFlags[ModifierFlags["ParameterPropertyModifier"] = 31] = "ParameterPropertyModifier"; - ModifierFlags[ModifierFlags["NonPublicAccessibilityModifier"] = 6] = "NonPublicAccessibilityModifier"; - ModifierFlags[ModifierFlags["TypeScriptModifier"] = 28895] = "TypeScriptModifier"; - ModifierFlags[ModifierFlags["ExportDefault"] = 2080] = "ExportDefault"; - ModifierFlags[ModifierFlags["All"] = 131071] = "All"; - ModifierFlags[ModifierFlags["Modifier"] = 98303] = "Modifier"; - ModifierFlags[ModifierFlags["JavaScript"] = 3872] = "JavaScript"; -})(ModifierFlags || (ModifierFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/modifierflags.go. DO NOT EDIT. +export var ModifierFlags: any; +(function (ModifierFlags) { + ModifierFlags[ModifierFlags["None"] = 0] = "None"; + ModifierFlags[ModifierFlags["Public"] = 1] = "Public"; + ModifierFlags[ModifierFlags["Private"] = 2] = "Private"; + ModifierFlags[ModifierFlags["Protected"] = 4] = "Protected"; + ModifierFlags[ModifierFlags["Readonly"] = 8] = "Readonly"; + ModifierFlags[ModifierFlags["Override"] = 16] = "Override"; + ModifierFlags[ModifierFlags["Export"] = 32] = "Export"; + ModifierFlags[ModifierFlags["Abstract"] = 64] = "Abstract"; + ModifierFlags[ModifierFlags["Ambient"] = 128] = "Ambient"; + ModifierFlags[ModifierFlags["Static"] = 256] = "Static"; + ModifierFlags[ModifierFlags["Accessor"] = 512] = "Accessor"; + ModifierFlags[ModifierFlags["Async"] = 1024] = "Async"; + ModifierFlags[ModifierFlags["Default"] = 2048] = "Default"; + ModifierFlags[ModifierFlags["Const"] = 4096] = "Const"; + ModifierFlags[ModifierFlags["In"] = 8192] = "In"; + ModifierFlags[ModifierFlags["Out"] = 16384] = "Out"; + ModifierFlags[ModifierFlags["Decorator"] = 32768] = "Decorator"; + ModifierFlags[ModifierFlags["Deprecated"] = 65536] = "Deprecated"; + ModifierFlags[ModifierFlags["JSDocPublic"] = 8388608] = "JSDocPublic"; + ModifierFlags[ModifierFlags["JSDocPrivate"] = 16777216] = "JSDocPrivate"; + ModifierFlags[ModifierFlags["JSDocProtected"] = 33554432] = "JSDocProtected"; + ModifierFlags[ModifierFlags["JSDocReadonly"] = 67108864] = "JSDocReadonly"; + ModifierFlags[ModifierFlags["JSDocOverride"] = 134217728] = "JSDocOverride"; + ModifierFlags[ModifierFlags["HasComputedJSDocModifiers"] = 268435456] = "HasComputedJSDocModifiers"; + ModifierFlags[ModifierFlags["HasComputedFlags"] = 536870912] = "HasComputedFlags"; + ModifierFlags[ModifierFlags["SyntacticOrJSDocModifiers"] = 31] = "SyntacticOrJSDocModifiers"; + ModifierFlags[ModifierFlags["SyntacticOnlyModifiers"] = 65504] = "SyntacticOnlyModifiers"; + ModifierFlags[ModifierFlags["SyntacticModifiers"] = 65535] = "SyntacticModifiers"; + ModifierFlags[ModifierFlags["JSDocCacheOnlyModifiers"] = 260046848] = "JSDocCacheOnlyModifiers"; + ModifierFlags[ModifierFlags["JSDocOnlyModifiers"] = 65536] = "JSDocOnlyModifiers"; + ModifierFlags[ModifierFlags["NonCacheOnlyModifiers"] = 131071] = "NonCacheOnlyModifiers"; + ModifierFlags[ModifierFlags["AccessibilityModifier"] = 7] = "AccessibilityModifier"; + ModifierFlags[ModifierFlags["ParameterPropertyModifier"] = 31] = "ParameterPropertyModifier"; + ModifierFlags[ModifierFlags["NonPublicAccessibilityModifier"] = 6] = "NonPublicAccessibilityModifier"; + ModifierFlags[ModifierFlags["TypeScriptModifier"] = 28895] = "TypeScriptModifier"; + ModifierFlags[ModifierFlags["ExportDefault"] = 2080] = "ExportDefault"; + ModifierFlags[ModifierFlags["All"] = 131071] = "All"; + ModifierFlags[ModifierFlags["Modifier"] = 98303] = "Modifier"; + ModifierFlags[ModifierFlags["JavaScript"] = 3872] = "JavaScript"; +})(ModifierFlags || (ModifierFlags = {})); diff --git a/packages/typescript/src/enums/moduleDetectionKind.enum.ts b/packages/typescript/src/enums/moduleDetectionKind.enum.ts index 3c857ba6bff33..c3a0395120566 100644 --- a/packages/typescript/src/enums/moduleDetectionKind.enum.ts +++ b/packages/typescript/src/enums/moduleDetectionKind.enum.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum ModuleDetectionKind { - None = 0, - Auto = 1, - Legacy = 2, - Force = 3, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum ModuleDetectionKind { + None = 0, + Auto = 1, + Legacy = 2, + Force = 3, +} diff --git a/packages/typescript/src/enums/moduleDetectionKind.ts b/packages/typescript/src/enums/moduleDetectionKind.ts index aef2c39903baf..e13d9508f303d 100644 --- a/packages/typescript/src/enums/moduleDetectionKind.ts +++ b/packages/typescript/src/enums/moduleDetectionKind.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var ModuleDetectionKind: any; -(function (ModuleDetectionKind) { - ModuleDetectionKind[ModuleDetectionKind["None"] = 0] = "None"; - ModuleDetectionKind[ModuleDetectionKind["Auto"] = 1] = "Auto"; - ModuleDetectionKind[ModuleDetectionKind["Legacy"] = 2] = "Legacy"; - ModuleDetectionKind[ModuleDetectionKind["Force"] = 3] = "Force"; -})(ModuleDetectionKind || (ModuleDetectionKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var ModuleDetectionKind: any; +(function (ModuleDetectionKind) { + ModuleDetectionKind[ModuleDetectionKind["None"] = 0] = "None"; + ModuleDetectionKind[ModuleDetectionKind["Auto"] = 1] = "Auto"; + ModuleDetectionKind[ModuleDetectionKind["Legacy"] = 2] = "Legacy"; + ModuleDetectionKind[ModuleDetectionKind["Force"] = 3] = "Force"; +})(ModuleDetectionKind || (ModuleDetectionKind = {})); diff --git a/packages/typescript/src/enums/moduleKind.enum.ts b/packages/typescript/src/enums/moduleKind.enum.ts index 4ecadf2728b42..d896ca140170c 100644 --- a/packages/typescript/src/enums/moduleKind.enum.ts +++ b/packages/typescript/src/enums/moduleKind.enum.ts @@ -1,18 +1,18 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum ModuleKind { - None = 0, - CommonJS = 1, - AMD = 2, - UMD = 3, - System = 4, - ES2015 = 5, - ES2020 = 6, - ES2022 = 7, - ESNext = 99, - Node16 = 100, - Node18 = 101, - Node20 = 102, - NodeNext = 199, - Preserve = 200, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum ModuleKind { + None = 0, + CommonJS = 1, + AMD = 2, + UMD = 3, + System = 4, + ES2015 = 5, + ES2020 = 6, + ES2022 = 7, + ESNext = 99, + Node16 = 100, + Node18 = 101, + Node20 = 102, + NodeNext = 199, + Preserve = 200, +} diff --git a/packages/typescript/src/enums/moduleKind.ts b/packages/typescript/src/enums/moduleKind.ts index 242fe2a27253c..08babf8732ff6 100644 --- a/packages/typescript/src/enums/moduleKind.ts +++ b/packages/typescript/src/enums/moduleKind.ts @@ -1,18 +1,18 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var ModuleKind: any; -(function (ModuleKind) { - ModuleKind[ModuleKind["None"] = 0] = "None"; - ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; - ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; - ModuleKind[ModuleKind["UMD"] = 3] = "UMD"; - ModuleKind[ModuleKind["System"] = 4] = "System"; - ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015"; - ModuleKind[ModuleKind["ES2020"] = 6] = "ES2020"; - ModuleKind[ModuleKind["ES2022"] = 7] = "ES2022"; - ModuleKind[ModuleKind["ESNext"] = 99] = "ESNext"; - ModuleKind[ModuleKind["Node16"] = 100] = "Node16"; - ModuleKind[ModuleKind["Node18"] = 101] = "Node18"; - ModuleKind[ModuleKind["Node20"] = 102] = "Node20"; - ModuleKind[ModuleKind["NodeNext"] = 199] = "NodeNext"; - ModuleKind[ModuleKind["Preserve"] = 200] = "Preserve"; -})(ModuleKind || (ModuleKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var ModuleKind: any; +(function (ModuleKind) { + ModuleKind[ModuleKind["None"] = 0] = "None"; + ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; + ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; + ModuleKind[ModuleKind["UMD"] = 3] = "UMD"; + ModuleKind[ModuleKind["System"] = 4] = "System"; + ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015"; + ModuleKind[ModuleKind["ES2020"] = 6] = "ES2020"; + ModuleKind[ModuleKind["ES2022"] = 7] = "ES2022"; + ModuleKind[ModuleKind["ESNext"] = 99] = "ESNext"; + ModuleKind[ModuleKind["Node16"] = 100] = "Node16"; + ModuleKind[ModuleKind["Node18"] = 101] = "Node18"; + ModuleKind[ModuleKind["Node20"] = 102] = "Node20"; + ModuleKind[ModuleKind["NodeNext"] = 199] = "NodeNext"; + ModuleKind[ModuleKind["Preserve"] = 200] = "Preserve"; +})(ModuleKind || (ModuleKind = {})); diff --git a/packages/typescript/src/enums/moduleResolutionKind.enum.ts b/packages/typescript/src/enums/moduleResolutionKind.enum.ts index 51ef127a5864f..94c4f431a7b58 100644 --- a/packages/typescript/src/enums/moduleResolutionKind.enum.ts +++ b/packages/typescript/src/enums/moduleResolutionKind.enum.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum ModuleResolutionKind { - Unknown = 0, - Classic = 1, - Node10 = 2, - Node16 = 3, - NodeNext = 99, - Bundler = 100, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum ModuleResolutionKind { + Unknown = 0, + Classic = 1, + Node10 = 2, + Node16 = 3, + NodeNext = 99, + Bundler = 100, +} diff --git a/packages/typescript/src/enums/moduleResolutionKind.ts b/packages/typescript/src/enums/moduleResolutionKind.ts index 83a8decbd0cc5..6cb674cb2f0af 100644 --- a/packages/typescript/src/enums/moduleResolutionKind.ts +++ b/packages/typescript/src/enums/moduleResolutionKind.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var ModuleResolutionKind: any; -(function (ModuleResolutionKind) { - ModuleResolutionKind[ModuleResolutionKind["Unknown"] = 0] = "Unknown"; - ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic"; - ModuleResolutionKind[ModuleResolutionKind["Node10"] = 2] = "Node10"; - ModuleResolutionKind[ModuleResolutionKind["Node16"] = 3] = "Node16"; - ModuleResolutionKind[ModuleResolutionKind["NodeNext"] = 99] = "NodeNext"; - ModuleResolutionKind[ModuleResolutionKind["Bundler"] = 100] = "Bundler"; -})(ModuleResolutionKind || (ModuleResolutionKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var ModuleResolutionKind: any; +(function (ModuleResolutionKind) { + ModuleResolutionKind[ModuleResolutionKind["Unknown"] = 0] = "Unknown"; + ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic"; + ModuleResolutionKind[ModuleResolutionKind["Node10"] = 2] = "Node10"; + ModuleResolutionKind[ModuleResolutionKind["Node16"] = 3] = "Node16"; + ModuleResolutionKind[ModuleResolutionKind["NodeNext"] = 99] = "NodeNext"; + ModuleResolutionKind[ModuleResolutionKind["Bundler"] = 100] = "Bundler"; +})(ModuleResolutionKind || (ModuleResolutionKind = {})); diff --git a/packages/typescript/src/enums/newLineKind.enum.ts b/packages/typescript/src/enums/newLineKind.enum.ts index 2195a93ee3b0a..b2245b6ef63f6 100644 --- a/packages/typescript/src/enums/newLineKind.enum.ts +++ b/packages/typescript/src/enums/newLineKind.enum.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum NewLineKind { - None = 0, - CRLF = 1, - LF = 2, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum NewLineKind { + None = 0, + CRLF = 1, + LF = 2, +} diff --git a/packages/typescript/src/enums/newLineKind.ts b/packages/typescript/src/enums/newLineKind.ts index f36d2e22b163c..bfad7c7820639 100644 --- a/packages/typescript/src/enums/newLineKind.ts +++ b/packages/typescript/src/enums/newLineKind.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var NewLineKind: any; -(function (NewLineKind) { - NewLineKind[NewLineKind["None"] = 0] = "None"; - NewLineKind[NewLineKind["CRLF"] = 1] = "CRLF"; - NewLineKind[NewLineKind["LF"] = 2] = "LF"; -})(NewLineKind || (NewLineKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var NewLineKind: any; +(function (NewLineKind) { + NewLineKind[NewLineKind["None"] = 0] = "None"; + NewLineKind[NewLineKind["CRLF"] = 1] = "CRLF"; + NewLineKind[NewLineKind["LF"] = 2] = "LF"; +})(NewLineKind || (NewLineKind = {})); diff --git a/packages/typescript/src/enums/nodeBuilderFlags.enum.ts b/packages/typescript/src/enums/nodeBuilderFlags.enum.ts index 28acdaf03703c..a5d954890416f 100644 --- a/packages/typescript/src/enums/nodeBuilderFlags.enum.ts +++ b/packages/typescript/src/enums/nodeBuilderFlags.enum.ts @@ -1,37 +1,37 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/nodebuilder/types.go. DO NOT EDIT. - -export enum NodeBuilderFlags { - None = 0, - NoTruncation = 1 << 0, - WriteArrayAsGenericType = 1 << 1, - GenerateNamesForShadowedTypeParams = 1 << 2, - UseStructuralFallback = 1 << 3, - ForbidIndexedAccessSymbolReferences = 1 << 4, - WriteTypeArgumentsOfSignature = 1 << 5, - UseFullyQualifiedType = 1 << 6, - UseOnlyExternalAliasing = 1 << 7, - SuppressAnyReturnType = 1 << 8, - WriteTypeParametersInQualifiedName = 1 << 9, - MultilineObjectLiterals = 1 << 10, - WriteClassExpressionAsTypeLiteral = 1 << 11, - UseTypeOfFunction = 1 << 12, - OmitParameterModifiers = 1 << 13, - UseAliasDefinedOutsideCurrentScope = 1 << 14, - UseSingleQuotesForStringLiteralType = 1 << 28, - NoTypeReduction = 1 << 29, - UseInstantiationExpressions = 1 << 30, - OmitThisParameter = 1 << 25, - WriteCallStyleSignature = 1 << 27, - AllowThisInObjectLiteral = 1 << 15, - AllowQualifiedNameInPlaceOfIdentifier = 1 << 16, - AllowAnonymousIdentifier = 1 << 17, - AllowEmptyUnionOrIntersection = 1 << 18, - AllowEmptyTuple = 1 << 19, - AllowUniqueESSymbolType = 1 << 20, - AllowEmptyIndexInfoType = 1 << 21, - AllowNodeModulesRelativePaths = 1 << 26, - IgnoreErrors = AllowThisInObjectLiteral | AllowQualifiedNameInPlaceOfIdentifier | AllowAnonymousIdentifier | AllowEmptyUnionOrIntersection | AllowEmptyTuple | AllowEmptyIndexInfoType | AllowNodeModulesRelativePaths, - InObjectTypeLiteral = 1 << 22, - InTypeAlias = 1 << 23, - InInitialEntityName = 1 << 24, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/nodebuilder/types.go. DO NOT EDIT. + +export enum NodeBuilderFlags { + None = 0, + NoTruncation = 1 << 0, + WriteArrayAsGenericType = 1 << 1, + GenerateNamesForShadowedTypeParams = 1 << 2, + UseStructuralFallback = 1 << 3, + ForbidIndexedAccessSymbolReferences = 1 << 4, + WriteTypeArgumentsOfSignature = 1 << 5, + UseFullyQualifiedType = 1 << 6, + UseOnlyExternalAliasing = 1 << 7, + SuppressAnyReturnType = 1 << 8, + WriteTypeParametersInQualifiedName = 1 << 9, + MultilineObjectLiterals = 1 << 10, + WriteClassExpressionAsTypeLiteral = 1 << 11, + UseTypeOfFunction = 1 << 12, + OmitParameterModifiers = 1 << 13, + UseAliasDefinedOutsideCurrentScope = 1 << 14, + UseSingleQuotesForStringLiteralType = 1 << 28, + NoTypeReduction = 1 << 29, + UseInstantiationExpressions = 1 << 30, + OmitThisParameter = 1 << 25, + WriteCallStyleSignature = 1 << 27, + AllowThisInObjectLiteral = 1 << 15, + AllowQualifiedNameInPlaceOfIdentifier = 1 << 16, + AllowAnonymousIdentifier = 1 << 17, + AllowEmptyUnionOrIntersection = 1 << 18, + AllowEmptyTuple = 1 << 19, + AllowUniqueESSymbolType = 1 << 20, + AllowEmptyIndexInfoType = 1 << 21, + AllowNodeModulesRelativePaths = 1 << 26, + IgnoreErrors = AllowThisInObjectLiteral | AllowQualifiedNameInPlaceOfIdentifier | AllowAnonymousIdentifier | AllowEmptyUnionOrIntersection | AllowEmptyTuple | AllowEmptyIndexInfoType | AllowNodeModulesRelativePaths, + InObjectTypeLiteral = 1 << 22, + InTypeAlias = 1 << 23, + InInitialEntityName = 1 << 24, +} diff --git a/packages/typescript/src/enums/nodeBuilderFlags.ts b/packages/typescript/src/enums/nodeBuilderFlags.ts index db674d3717557..eddc9bb85f120 100644 --- a/packages/typescript/src/enums/nodeBuilderFlags.ts +++ b/packages/typescript/src/enums/nodeBuilderFlags.ts @@ -1,37 +1,37 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/nodebuilder/types.go. DO NOT EDIT. -export var NodeBuilderFlags: any; -(function (NodeBuilderFlags) { - NodeBuilderFlags[NodeBuilderFlags["None"] = 0] = "None"; - NodeBuilderFlags[NodeBuilderFlags["NoTruncation"] = 1] = "NoTruncation"; - NodeBuilderFlags[NodeBuilderFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; - NodeBuilderFlags[NodeBuilderFlags["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; - NodeBuilderFlags[NodeBuilderFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; - NodeBuilderFlags[NodeBuilderFlags["ForbidIndexedAccessSymbolReferences"] = 16] = "ForbidIndexedAccessSymbolReferences"; - NodeBuilderFlags[NodeBuilderFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; - NodeBuilderFlags[NodeBuilderFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; - NodeBuilderFlags[NodeBuilderFlags["UseOnlyExternalAliasing"] = 128] = "UseOnlyExternalAliasing"; - NodeBuilderFlags[NodeBuilderFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; - NodeBuilderFlags[NodeBuilderFlags["WriteTypeParametersInQualifiedName"] = 512] = "WriteTypeParametersInQualifiedName"; - NodeBuilderFlags[NodeBuilderFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; - NodeBuilderFlags[NodeBuilderFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; - NodeBuilderFlags[NodeBuilderFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; - NodeBuilderFlags[NodeBuilderFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; - NodeBuilderFlags[NodeBuilderFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; - NodeBuilderFlags[NodeBuilderFlags["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; - NodeBuilderFlags[NodeBuilderFlags["NoTypeReduction"] = 536870912] = "NoTypeReduction"; - NodeBuilderFlags[NodeBuilderFlags["UseInstantiationExpressions"] = 1073741824] = "UseInstantiationExpressions"; - NodeBuilderFlags[NodeBuilderFlags["OmitThisParameter"] = 33554432] = "OmitThisParameter"; - NodeBuilderFlags[NodeBuilderFlags["WriteCallStyleSignature"] = 134217728] = "WriteCallStyleSignature"; - NodeBuilderFlags[NodeBuilderFlags["AllowThisInObjectLiteral"] = 32768] = "AllowThisInObjectLiteral"; - NodeBuilderFlags[NodeBuilderFlags["AllowQualifiedNameInPlaceOfIdentifier"] = 65536] = "AllowQualifiedNameInPlaceOfIdentifier"; - NodeBuilderFlags[NodeBuilderFlags["AllowAnonymousIdentifier"] = 131072] = "AllowAnonymousIdentifier"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyUnionOrIntersection"] = 262144] = "AllowEmptyUnionOrIntersection"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyTuple"] = 524288] = "AllowEmptyTuple"; - NodeBuilderFlags[NodeBuilderFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; - NodeBuilderFlags[NodeBuilderFlags["AllowEmptyIndexInfoType"] = 2097152] = "AllowEmptyIndexInfoType"; - NodeBuilderFlags[NodeBuilderFlags["AllowNodeModulesRelativePaths"] = 67108864] = "AllowNodeModulesRelativePaths"; - NodeBuilderFlags[NodeBuilderFlags["IgnoreErrors"] = 70221824] = "IgnoreErrors"; - NodeBuilderFlags[NodeBuilderFlags["InObjectTypeLiteral"] = 4194304] = "InObjectTypeLiteral"; - NodeBuilderFlags[NodeBuilderFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; - NodeBuilderFlags[NodeBuilderFlags["InInitialEntityName"] = 16777216] = "InInitialEntityName"; -})(NodeBuilderFlags || (NodeBuilderFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/nodebuilder/types.go. DO NOT EDIT. +export var NodeBuilderFlags: any; +(function (NodeBuilderFlags) { + NodeBuilderFlags[NodeBuilderFlags["None"] = 0] = "None"; + NodeBuilderFlags[NodeBuilderFlags["NoTruncation"] = 1] = "NoTruncation"; + NodeBuilderFlags[NodeBuilderFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; + NodeBuilderFlags[NodeBuilderFlags["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; + NodeBuilderFlags[NodeBuilderFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; + NodeBuilderFlags[NodeBuilderFlags["ForbidIndexedAccessSymbolReferences"] = 16] = "ForbidIndexedAccessSymbolReferences"; + NodeBuilderFlags[NodeBuilderFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; + NodeBuilderFlags[NodeBuilderFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; + NodeBuilderFlags[NodeBuilderFlags["UseOnlyExternalAliasing"] = 128] = "UseOnlyExternalAliasing"; + NodeBuilderFlags[NodeBuilderFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; + NodeBuilderFlags[NodeBuilderFlags["WriteTypeParametersInQualifiedName"] = 512] = "WriteTypeParametersInQualifiedName"; + NodeBuilderFlags[NodeBuilderFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; + NodeBuilderFlags[NodeBuilderFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; + NodeBuilderFlags[NodeBuilderFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; + NodeBuilderFlags[NodeBuilderFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; + NodeBuilderFlags[NodeBuilderFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; + NodeBuilderFlags[NodeBuilderFlags["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; + NodeBuilderFlags[NodeBuilderFlags["NoTypeReduction"] = 536870912] = "NoTypeReduction"; + NodeBuilderFlags[NodeBuilderFlags["UseInstantiationExpressions"] = 1073741824] = "UseInstantiationExpressions"; + NodeBuilderFlags[NodeBuilderFlags["OmitThisParameter"] = 33554432] = "OmitThisParameter"; + NodeBuilderFlags[NodeBuilderFlags["WriteCallStyleSignature"] = 134217728] = "WriteCallStyleSignature"; + NodeBuilderFlags[NodeBuilderFlags["AllowThisInObjectLiteral"] = 32768] = "AllowThisInObjectLiteral"; + NodeBuilderFlags[NodeBuilderFlags["AllowQualifiedNameInPlaceOfIdentifier"] = 65536] = "AllowQualifiedNameInPlaceOfIdentifier"; + NodeBuilderFlags[NodeBuilderFlags["AllowAnonymousIdentifier"] = 131072] = "AllowAnonymousIdentifier"; + NodeBuilderFlags[NodeBuilderFlags["AllowEmptyUnionOrIntersection"] = 262144] = "AllowEmptyUnionOrIntersection"; + NodeBuilderFlags[NodeBuilderFlags["AllowEmptyTuple"] = 524288] = "AllowEmptyTuple"; + NodeBuilderFlags[NodeBuilderFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; + NodeBuilderFlags[NodeBuilderFlags["AllowEmptyIndexInfoType"] = 2097152] = "AllowEmptyIndexInfoType"; + NodeBuilderFlags[NodeBuilderFlags["AllowNodeModulesRelativePaths"] = 67108864] = "AllowNodeModulesRelativePaths"; + NodeBuilderFlags[NodeBuilderFlags["IgnoreErrors"] = 70221824] = "IgnoreErrors"; + NodeBuilderFlags[NodeBuilderFlags["InObjectTypeLiteral"] = 4194304] = "InObjectTypeLiteral"; + NodeBuilderFlags[NodeBuilderFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; + NodeBuilderFlags[NodeBuilderFlags["InInitialEntityName"] = 16777216] = "InInitialEntityName"; +})(NodeBuilderFlags || (NodeBuilderFlags = {})); diff --git a/packages/typescript/src/enums/nodeFlags.enum.ts b/packages/typescript/src/enums/nodeFlags.enum.ts index 1296af0307cbf..05cb389ccee5f 100644 --- a/packages/typescript/src/enums/nodeFlags.enum.ts +++ b/packages/typescript/src/enums/nodeFlags.enum.ts @@ -1,45 +1,45 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/nodeflags.go. DO NOT EDIT. - -export enum NodeFlags { - None = 0, - Let = 1 << 0, - Const = 1 << 1, - Using = 1 << 2, - Reparsed = 1 << 3, - Synthesized = 1 << 4, - OptionalChain = 1 << 5, - ExportContext = 1 << 6, - ContainsThis = 1 << 7, - HasImplicitReturn = 1 << 8, - HasExplicitReturn = 1 << 9, - DisallowInContext = 1 << 10, - YieldContext = 1 << 11, - DecoratorContext = 1 << 12, - AwaitContext = 1 << 13, - DisallowConditionalTypesContext = 1 << 14, - ThisNodeHasError = 1 << 15, - JavaScriptFile = 1 << 16, - ThisNodeOrAnySubNodesHasError = 1 << 17, - HasAsyncFunctions = 1 << 18, - PossiblyContainsDynamicImport = 1 << 19, - PossiblyContainsImportMeta = 1 << 20, - HasJSDoc = 1 << 21, - JSDoc = 1 << 22, - Ambient = 1 << 23, - InWithStatement = 1 << 24, - JsonFile = 1 << 25, - PossiblyContainsDeprecatedTag = 1 << 26, - Unreachable = 1 << 27, - ReparserTransformedLiteral = 1 << 28, - BlockScoped = Let | Const | Using, - Constant = Const | Using, - AwaitUsing = Const | Using, - ReachabilityCheckFlags = HasImplicitReturn | HasExplicitReturn, - ReachabilityAndEmitFlags = ReachabilityCheckFlags | HasAsyncFunctions, - ContextFlags = DisallowInContext | DisallowConditionalTypesContext | YieldContext | DecoratorContext | AwaitContext | JavaScriptFile | InWithStatement | Ambient, - TypeExcludesFlags = YieldContext | AwaitContext, - PermanentlySetIncrementalFlags = PossiblyContainsDynamicImport | PossiblyContainsImportMeta, - IdentifierHasExtendedUnicodeEscape = ContainsThis, - IdentifierIsInJSDocNamespace = HasAsyncFunctions, - NestedNamespace = OptionalChain, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/nodeflags.go. DO NOT EDIT. + +export enum NodeFlags { + None = 0, + Let = 1 << 0, + Const = 1 << 1, + Using = 1 << 2, + Reparsed = 1 << 3, + Synthesized = 1 << 4, + OptionalChain = 1 << 5, + ExportContext = 1 << 6, + ContainsThis = 1 << 7, + HasImplicitReturn = 1 << 8, + HasExplicitReturn = 1 << 9, + DisallowInContext = 1 << 10, + YieldContext = 1 << 11, + DecoratorContext = 1 << 12, + AwaitContext = 1 << 13, + DisallowConditionalTypesContext = 1 << 14, + ThisNodeHasError = 1 << 15, + JavaScriptFile = 1 << 16, + ThisNodeOrAnySubNodesHasError = 1 << 17, + HasAsyncFunctions = 1 << 18, + PossiblyContainsDynamicImport = 1 << 19, + PossiblyContainsImportMeta = 1 << 20, + HasJSDoc = 1 << 21, + JSDoc = 1 << 22, + Ambient = 1 << 23, + InWithStatement = 1 << 24, + JsonFile = 1 << 25, + PossiblyContainsDeprecatedTag = 1 << 26, + Unreachable = 1 << 27, + ReparserTransformedLiteral = 1 << 28, + BlockScoped = Let | Const | Using, + Constant = Const | Using, + AwaitUsing = Const | Using, + ReachabilityCheckFlags = HasImplicitReturn | HasExplicitReturn, + ReachabilityAndEmitFlags = ReachabilityCheckFlags | HasAsyncFunctions, + ContextFlags = DisallowInContext | DisallowConditionalTypesContext | YieldContext | DecoratorContext | AwaitContext | JavaScriptFile | InWithStatement | Ambient, + TypeExcludesFlags = YieldContext | AwaitContext, + PermanentlySetIncrementalFlags = PossiblyContainsDynamicImport | PossiblyContainsImportMeta, + IdentifierHasExtendedUnicodeEscape = ContainsThis, + IdentifierIsInJSDocNamespace = HasAsyncFunctions, + NestedNamespace = OptionalChain, +} diff --git a/packages/typescript/src/enums/nodeFlags.ts b/packages/typescript/src/enums/nodeFlags.ts index be496dcad7c7f..1d6c84d18def5 100644 --- a/packages/typescript/src/enums/nodeFlags.ts +++ b/packages/typescript/src/enums/nodeFlags.ts @@ -1,45 +1,45 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/nodeflags.go. DO NOT EDIT. -export var NodeFlags: any; -(function (NodeFlags) { - NodeFlags[NodeFlags["None"] = 0] = "None"; - NodeFlags[NodeFlags["Let"] = 1] = "Let"; - NodeFlags[NodeFlags["Const"] = 2] = "Const"; - NodeFlags[NodeFlags["Using"] = 4] = "Using"; - NodeFlags[NodeFlags["Reparsed"] = 8] = "Reparsed"; - NodeFlags[NodeFlags["Synthesized"] = 16] = "Synthesized"; - NodeFlags[NodeFlags["OptionalChain"] = 32] = "OptionalChain"; - NodeFlags[NodeFlags["ExportContext"] = 64] = "ExportContext"; - NodeFlags[NodeFlags["ContainsThis"] = 128] = "ContainsThis"; - NodeFlags[NodeFlags["HasImplicitReturn"] = 256] = "HasImplicitReturn"; - NodeFlags[NodeFlags["HasExplicitReturn"] = 512] = "HasExplicitReturn"; - NodeFlags[NodeFlags["DisallowInContext"] = 1024] = "DisallowInContext"; - NodeFlags[NodeFlags["YieldContext"] = 2048] = "YieldContext"; - NodeFlags[NodeFlags["DecoratorContext"] = 4096] = "DecoratorContext"; - NodeFlags[NodeFlags["AwaitContext"] = 8192] = "AwaitContext"; - NodeFlags[NodeFlags["DisallowConditionalTypesContext"] = 16384] = "DisallowConditionalTypesContext"; - NodeFlags[NodeFlags["ThisNodeHasError"] = 32768] = "ThisNodeHasError"; - NodeFlags[NodeFlags["JavaScriptFile"] = 65536] = "JavaScriptFile"; - NodeFlags[NodeFlags["ThisNodeOrAnySubNodesHasError"] = 131072] = "ThisNodeOrAnySubNodesHasError"; - NodeFlags[NodeFlags["HasAsyncFunctions"] = 262144] = "HasAsyncFunctions"; - NodeFlags[NodeFlags["PossiblyContainsDynamicImport"] = 524288] = "PossiblyContainsDynamicImport"; - NodeFlags[NodeFlags["PossiblyContainsImportMeta"] = 1048576] = "PossiblyContainsImportMeta"; - NodeFlags[NodeFlags["HasJSDoc"] = 2097152] = "HasJSDoc"; - NodeFlags[NodeFlags["JSDoc"] = 4194304] = "JSDoc"; - NodeFlags[NodeFlags["Ambient"] = 8388608] = "Ambient"; - NodeFlags[NodeFlags["InWithStatement"] = 16777216] = "InWithStatement"; - NodeFlags[NodeFlags["JsonFile"] = 33554432] = "JsonFile"; - NodeFlags[NodeFlags["PossiblyContainsDeprecatedTag"] = 67108864] = "PossiblyContainsDeprecatedTag"; - NodeFlags[NodeFlags["Unreachable"] = 134217728] = "Unreachable"; - NodeFlags[NodeFlags["ReparserTransformedLiteral"] = 268435456] = "ReparserTransformedLiteral"; - NodeFlags[NodeFlags["BlockScoped"] = 7] = "BlockScoped"; - NodeFlags[NodeFlags["Constant"] = 6] = "Constant"; - NodeFlags[NodeFlags["AwaitUsing"] = 6] = "AwaitUsing"; - NodeFlags[NodeFlags["ReachabilityCheckFlags"] = 768] = "ReachabilityCheckFlags"; - NodeFlags[NodeFlags["ReachabilityAndEmitFlags"] = 262912] = "ReachabilityAndEmitFlags"; - NodeFlags[NodeFlags["ContextFlags"] = 25263104] = "ContextFlags"; - NodeFlags[NodeFlags["TypeExcludesFlags"] = 10240] = "TypeExcludesFlags"; - NodeFlags[NodeFlags["PermanentlySetIncrementalFlags"] = 1572864] = "PermanentlySetIncrementalFlags"; - NodeFlags[NodeFlags["IdentifierHasExtendedUnicodeEscape"] = 128] = "IdentifierHasExtendedUnicodeEscape"; - NodeFlags[NodeFlags["IdentifierIsInJSDocNamespace"] = 262144] = "IdentifierIsInJSDocNamespace"; - NodeFlags[NodeFlags["NestedNamespace"] = 32] = "NestedNamespace"; -})(NodeFlags || (NodeFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/nodeflags.go. DO NOT EDIT. +export var NodeFlags: any; +(function (NodeFlags) { + NodeFlags[NodeFlags["None"] = 0] = "None"; + NodeFlags[NodeFlags["Let"] = 1] = "Let"; + NodeFlags[NodeFlags["Const"] = 2] = "Const"; + NodeFlags[NodeFlags["Using"] = 4] = "Using"; + NodeFlags[NodeFlags["Reparsed"] = 8] = "Reparsed"; + NodeFlags[NodeFlags["Synthesized"] = 16] = "Synthesized"; + NodeFlags[NodeFlags["OptionalChain"] = 32] = "OptionalChain"; + NodeFlags[NodeFlags["ExportContext"] = 64] = "ExportContext"; + NodeFlags[NodeFlags["ContainsThis"] = 128] = "ContainsThis"; + NodeFlags[NodeFlags["HasImplicitReturn"] = 256] = "HasImplicitReturn"; + NodeFlags[NodeFlags["HasExplicitReturn"] = 512] = "HasExplicitReturn"; + NodeFlags[NodeFlags["DisallowInContext"] = 1024] = "DisallowInContext"; + NodeFlags[NodeFlags["YieldContext"] = 2048] = "YieldContext"; + NodeFlags[NodeFlags["DecoratorContext"] = 4096] = "DecoratorContext"; + NodeFlags[NodeFlags["AwaitContext"] = 8192] = "AwaitContext"; + NodeFlags[NodeFlags["DisallowConditionalTypesContext"] = 16384] = "DisallowConditionalTypesContext"; + NodeFlags[NodeFlags["ThisNodeHasError"] = 32768] = "ThisNodeHasError"; + NodeFlags[NodeFlags["JavaScriptFile"] = 65536] = "JavaScriptFile"; + NodeFlags[NodeFlags["ThisNodeOrAnySubNodesHasError"] = 131072] = "ThisNodeOrAnySubNodesHasError"; + NodeFlags[NodeFlags["HasAsyncFunctions"] = 262144] = "HasAsyncFunctions"; + NodeFlags[NodeFlags["PossiblyContainsDynamicImport"] = 524288] = "PossiblyContainsDynamicImport"; + NodeFlags[NodeFlags["PossiblyContainsImportMeta"] = 1048576] = "PossiblyContainsImportMeta"; + NodeFlags[NodeFlags["HasJSDoc"] = 2097152] = "HasJSDoc"; + NodeFlags[NodeFlags["JSDoc"] = 4194304] = "JSDoc"; + NodeFlags[NodeFlags["Ambient"] = 8388608] = "Ambient"; + NodeFlags[NodeFlags["InWithStatement"] = 16777216] = "InWithStatement"; + NodeFlags[NodeFlags["JsonFile"] = 33554432] = "JsonFile"; + NodeFlags[NodeFlags["PossiblyContainsDeprecatedTag"] = 67108864] = "PossiblyContainsDeprecatedTag"; + NodeFlags[NodeFlags["Unreachable"] = 134217728] = "Unreachable"; + NodeFlags[NodeFlags["ReparserTransformedLiteral"] = 268435456] = "ReparserTransformedLiteral"; + NodeFlags[NodeFlags["BlockScoped"] = 7] = "BlockScoped"; + NodeFlags[NodeFlags["Constant"] = 6] = "Constant"; + NodeFlags[NodeFlags["AwaitUsing"] = 6] = "AwaitUsing"; + NodeFlags[NodeFlags["ReachabilityCheckFlags"] = 768] = "ReachabilityCheckFlags"; + NodeFlags[NodeFlags["ReachabilityAndEmitFlags"] = 262912] = "ReachabilityAndEmitFlags"; + NodeFlags[NodeFlags["ContextFlags"] = 25263104] = "ContextFlags"; + NodeFlags[NodeFlags["TypeExcludesFlags"] = 10240] = "TypeExcludesFlags"; + NodeFlags[NodeFlags["PermanentlySetIncrementalFlags"] = 1572864] = "PermanentlySetIncrementalFlags"; + NodeFlags[NodeFlags["IdentifierHasExtendedUnicodeEscape"] = 128] = "IdentifierHasExtendedUnicodeEscape"; + NodeFlags[NodeFlags["IdentifierIsInJSDocNamespace"] = 262144] = "IdentifierIsInJSDocNamespace"; + NodeFlags[NodeFlags["NestedNamespace"] = 32] = "NestedNamespace"; +})(NodeFlags || (NodeFlags = {})); diff --git a/packages/typescript/src/enums/objectFlags.enum.ts b/packages/typescript/src/enums/objectFlags.enum.ts index 15e497dc6ffb0..b35c9f8c8a56a 100644 --- a/packages/typescript/src/enums/objectFlags.enum.ts +++ b/packages/typescript/src/enums/objectFlags.enum.ts @@ -1,52 +1,52 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum ObjectFlags { - None = 0, - Class = 1 << 0, - Interface = 1 << 1, - Reference = 1 << 2, - Tuple = 1 << 3, - Anonymous = 1 << 4, - Mapped = 1 << 5, - Instantiated = 1 << 6, - ObjectLiteral = 1 << 7, - EvolvingArray = 1 << 8, - ObjectLiteralPatternWithComputedProperties = 1 << 9, - ReverseMapped = 1 << 10, - JsxAttributes = 1 << 11, - JSLiteral = 1 << 12, - FreshLiteral = 1 << 13, - ArrayLiteral = 1 << 14, - PrimitiveUnion = 1 << 15, - ContainsWideningType = 1 << 16, - ContainsObjectOrArrayLiteral = 1 << 17, - NonInferrableType = 1 << 18, - CouldContainTypeVariablesComputed = 1 << 19, - CouldContainTypeVariables = 1 << 20, - MembersResolved = 1 << 21, - ClassOrInterface = Class | Interface, - RequiresWidening = ContainsWideningType | ContainsObjectOrArrayLiteral, - PropagatingFlags = ContainsWideningType | ContainsObjectOrArrayLiteral | NonInferrableType, - InstantiatedMapped = Mapped | Instantiated, - InstantiationExpressionType = 1 << 24, - SingleSignatureType = 1 << 25, - ObjectTypeKindMask = ClassOrInterface | Reference | Tuple | Anonymous | Mapped | ReverseMapped | EvolvingArray | InstantiationExpressionType | SingleSignatureType, - ContainsSpread = 1 << 22, - ObjectRestType = 1 << 23, - IsClassInstanceClone = 1 << 26, - IdenticalBaseTypeCalculated = 1 << 27, - IdenticalBaseTypeExists = 1 << 28, - FromTypeNode = 1 << 29, - IsGenericTypeComputed = 1 << 22, - IsGenericObjectType = 1 << 23, - IsGenericIndexType = 1 << 24, - IsGenericType = IsGenericObjectType | IsGenericIndexType, - ContainsIntersections = 1 << 25, - IsUnknownLikeUnionComputed = 1 << 26, - IsUnknownLikeUnion = 1 << 27, - IsUniformEnumComputed = 1 << 28, - IsUniformEnum = 1 << 29, - IsNeverIntersectionComputed = 1 << 25, - IsNeverIntersection = 1 << 26, - IsConstrainedTypeVariable = 1 << 27, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum ObjectFlags { + None = 0, + Class = 1 << 0, + Interface = 1 << 1, + Reference = 1 << 2, + Tuple = 1 << 3, + Anonymous = 1 << 4, + Mapped = 1 << 5, + Instantiated = 1 << 6, + ObjectLiteral = 1 << 7, + EvolvingArray = 1 << 8, + ObjectLiteralPatternWithComputedProperties = 1 << 9, + ReverseMapped = 1 << 10, + JsxAttributes = 1 << 11, + JSLiteral = 1 << 12, + FreshLiteral = 1 << 13, + ArrayLiteral = 1 << 14, + PrimitiveUnion = 1 << 15, + ContainsWideningType = 1 << 16, + ContainsObjectOrArrayLiteral = 1 << 17, + NonInferrableType = 1 << 18, + CouldContainTypeVariablesComputed = 1 << 19, + CouldContainTypeVariables = 1 << 20, + MembersResolved = 1 << 21, + ClassOrInterface = Class | Interface, + RequiresWidening = ContainsWideningType | ContainsObjectOrArrayLiteral, + PropagatingFlags = ContainsWideningType | ContainsObjectOrArrayLiteral | NonInferrableType, + InstantiatedMapped = Mapped | Instantiated, + InstantiationExpressionType = 1 << 24, + SingleSignatureType = 1 << 25, + ObjectTypeKindMask = ClassOrInterface | Reference | Tuple | Anonymous | Mapped | ReverseMapped | EvolvingArray | InstantiationExpressionType | SingleSignatureType, + ContainsSpread = 1 << 22, + ObjectRestType = 1 << 23, + IsClassInstanceClone = 1 << 26, + IdenticalBaseTypeCalculated = 1 << 27, + IdenticalBaseTypeExists = 1 << 28, + FromTypeNode = 1 << 29, + IsGenericTypeComputed = 1 << 22, + IsGenericObjectType = 1 << 23, + IsGenericIndexType = 1 << 24, + IsGenericType = IsGenericObjectType | IsGenericIndexType, + ContainsIntersections = 1 << 25, + IsUnknownLikeUnionComputed = 1 << 26, + IsUnknownLikeUnion = 1 << 27, + IsUniformEnumComputed = 1 << 28, + IsUniformEnum = 1 << 29, + IsNeverIntersectionComputed = 1 << 25, + IsNeverIntersection = 1 << 26, + IsConstrainedTypeVariable = 1 << 27, +} diff --git a/packages/typescript/src/enums/objectFlags.ts b/packages/typescript/src/enums/objectFlags.ts index af3bad5af2d58..0e35f6847f5e6 100644 --- a/packages/typescript/src/enums/objectFlags.ts +++ b/packages/typescript/src/enums/objectFlags.ts @@ -1,52 +1,52 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var ObjectFlags: any; -(function (ObjectFlags) { - ObjectFlags[ObjectFlags["None"] = 0] = "None"; - ObjectFlags[ObjectFlags["Class"] = 1] = "Class"; - ObjectFlags[ObjectFlags["Interface"] = 2] = "Interface"; - ObjectFlags[ObjectFlags["Reference"] = 4] = "Reference"; - ObjectFlags[ObjectFlags["Tuple"] = 8] = "Tuple"; - ObjectFlags[ObjectFlags["Anonymous"] = 16] = "Anonymous"; - ObjectFlags[ObjectFlags["Mapped"] = 32] = "Mapped"; - ObjectFlags[ObjectFlags["Instantiated"] = 64] = "Instantiated"; - ObjectFlags[ObjectFlags["ObjectLiteral"] = 128] = "ObjectLiteral"; - ObjectFlags[ObjectFlags["EvolvingArray"] = 256] = "EvolvingArray"; - ObjectFlags[ObjectFlags["ObjectLiteralPatternWithComputedProperties"] = 512] = "ObjectLiteralPatternWithComputedProperties"; - ObjectFlags[ObjectFlags["ReverseMapped"] = 1024] = "ReverseMapped"; - ObjectFlags[ObjectFlags["JsxAttributes"] = 2048] = "JsxAttributes"; - ObjectFlags[ObjectFlags["JSLiteral"] = 4096] = "JSLiteral"; - ObjectFlags[ObjectFlags["FreshLiteral"] = 8192] = "FreshLiteral"; - ObjectFlags[ObjectFlags["ArrayLiteral"] = 16384] = "ArrayLiteral"; - ObjectFlags[ObjectFlags["PrimitiveUnion"] = 32768] = "PrimitiveUnion"; - ObjectFlags[ObjectFlags["ContainsWideningType"] = 65536] = "ContainsWideningType"; - ObjectFlags[ObjectFlags["ContainsObjectOrArrayLiteral"] = 131072] = "ContainsObjectOrArrayLiteral"; - ObjectFlags[ObjectFlags["NonInferrableType"] = 262144] = "NonInferrableType"; - ObjectFlags[ObjectFlags["CouldContainTypeVariablesComputed"] = 524288] = "CouldContainTypeVariablesComputed"; - ObjectFlags[ObjectFlags["CouldContainTypeVariables"] = 1048576] = "CouldContainTypeVariables"; - ObjectFlags[ObjectFlags["MembersResolved"] = 2097152] = "MembersResolved"; - ObjectFlags[ObjectFlags["ClassOrInterface"] = 3] = "ClassOrInterface"; - ObjectFlags[ObjectFlags["RequiresWidening"] = 196608] = "RequiresWidening"; - ObjectFlags[ObjectFlags["PropagatingFlags"] = 458752] = "PropagatingFlags"; - ObjectFlags[ObjectFlags["InstantiatedMapped"] = 96] = "InstantiatedMapped"; - ObjectFlags[ObjectFlags["InstantiationExpressionType"] = 16777216] = "InstantiationExpressionType"; - ObjectFlags[ObjectFlags["SingleSignatureType"] = 33554432] = "SingleSignatureType"; - ObjectFlags[ObjectFlags["ObjectTypeKindMask"] = 50332991] = "ObjectTypeKindMask"; - ObjectFlags[ObjectFlags["ContainsSpread"] = 4194304] = "ContainsSpread"; - ObjectFlags[ObjectFlags["ObjectRestType"] = 8388608] = "ObjectRestType"; - ObjectFlags[ObjectFlags["IsClassInstanceClone"] = 67108864] = "IsClassInstanceClone"; - ObjectFlags[ObjectFlags["IdenticalBaseTypeCalculated"] = 134217728] = "IdenticalBaseTypeCalculated"; - ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 268435456] = "IdenticalBaseTypeExists"; - ObjectFlags[ObjectFlags["FromTypeNode"] = 536870912] = "FromTypeNode"; - ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed"; - ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType"; - ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType"; - ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType"; - ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections"; - ObjectFlags[ObjectFlags["IsUnknownLikeUnionComputed"] = 67108864] = "IsUnknownLikeUnionComputed"; - ObjectFlags[ObjectFlags["IsUnknownLikeUnion"] = 134217728] = "IsUnknownLikeUnion"; - ObjectFlags[ObjectFlags["IsUniformEnumComputed"] = 268435456] = "IsUniformEnumComputed"; - ObjectFlags[ObjectFlags["IsUniformEnum"] = 536870912] = "IsUniformEnum"; - ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed"; - ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection"; - ObjectFlags[ObjectFlags["IsConstrainedTypeVariable"] = 134217728] = "IsConstrainedTypeVariable"; -})(ObjectFlags || (ObjectFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var ObjectFlags: any; +(function (ObjectFlags) { + ObjectFlags[ObjectFlags["None"] = 0] = "None"; + ObjectFlags[ObjectFlags["Class"] = 1] = "Class"; + ObjectFlags[ObjectFlags["Interface"] = 2] = "Interface"; + ObjectFlags[ObjectFlags["Reference"] = 4] = "Reference"; + ObjectFlags[ObjectFlags["Tuple"] = 8] = "Tuple"; + ObjectFlags[ObjectFlags["Anonymous"] = 16] = "Anonymous"; + ObjectFlags[ObjectFlags["Mapped"] = 32] = "Mapped"; + ObjectFlags[ObjectFlags["Instantiated"] = 64] = "Instantiated"; + ObjectFlags[ObjectFlags["ObjectLiteral"] = 128] = "ObjectLiteral"; + ObjectFlags[ObjectFlags["EvolvingArray"] = 256] = "EvolvingArray"; + ObjectFlags[ObjectFlags["ObjectLiteralPatternWithComputedProperties"] = 512] = "ObjectLiteralPatternWithComputedProperties"; + ObjectFlags[ObjectFlags["ReverseMapped"] = 1024] = "ReverseMapped"; + ObjectFlags[ObjectFlags["JsxAttributes"] = 2048] = "JsxAttributes"; + ObjectFlags[ObjectFlags["JSLiteral"] = 4096] = "JSLiteral"; + ObjectFlags[ObjectFlags["FreshLiteral"] = 8192] = "FreshLiteral"; + ObjectFlags[ObjectFlags["ArrayLiteral"] = 16384] = "ArrayLiteral"; + ObjectFlags[ObjectFlags["PrimitiveUnion"] = 32768] = "PrimitiveUnion"; + ObjectFlags[ObjectFlags["ContainsWideningType"] = 65536] = "ContainsWideningType"; + ObjectFlags[ObjectFlags["ContainsObjectOrArrayLiteral"] = 131072] = "ContainsObjectOrArrayLiteral"; + ObjectFlags[ObjectFlags["NonInferrableType"] = 262144] = "NonInferrableType"; + ObjectFlags[ObjectFlags["CouldContainTypeVariablesComputed"] = 524288] = "CouldContainTypeVariablesComputed"; + ObjectFlags[ObjectFlags["CouldContainTypeVariables"] = 1048576] = "CouldContainTypeVariables"; + ObjectFlags[ObjectFlags["MembersResolved"] = 2097152] = "MembersResolved"; + ObjectFlags[ObjectFlags["ClassOrInterface"] = 3] = "ClassOrInterface"; + ObjectFlags[ObjectFlags["RequiresWidening"] = 196608] = "RequiresWidening"; + ObjectFlags[ObjectFlags["PropagatingFlags"] = 458752] = "PropagatingFlags"; + ObjectFlags[ObjectFlags["InstantiatedMapped"] = 96] = "InstantiatedMapped"; + ObjectFlags[ObjectFlags["InstantiationExpressionType"] = 16777216] = "InstantiationExpressionType"; + ObjectFlags[ObjectFlags["SingleSignatureType"] = 33554432] = "SingleSignatureType"; + ObjectFlags[ObjectFlags["ObjectTypeKindMask"] = 50332991] = "ObjectTypeKindMask"; + ObjectFlags[ObjectFlags["ContainsSpread"] = 4194304] = "ContainsSpread"; + ObjectFlags[ObjectFlags["ObjectRestType"] = 8388608] = "ObjectRestType"; + ObjectFlags[ObjectFlags["IsClassInstanceClone"] = 67108864] = "IsClassInstanceClone"; + ObjectFlags[ObjectFlags["IdenticalBaseTypeCalculated"] = 134217728] = "IdenticalBaseTypeCalculated"; + ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 268435456] = "IdenticalBaseTypeExists"; + ObjectFlags[ObjectFlags["FromTypeNode"] = 536870912] = "FromTypeNode"; + ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed"; + ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType"; + ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType"; + ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType"; + ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections"; + ObjectFlags[ObjectFlags["IsUnknownLikeUnionComputed"] = 67108864] = "IsUnknownLikeUnionComputed"; + ObjectFlags[ObjectFlags["IsUnknownLikeUnion"] = 134217728] = "IsUnknownLikeUnion"; + ObjectFlags[ObjectFlags["IsUniformEnumComputed"] = 268435456] = "IsUniformEnumComputed"; + ObjectFlags[ObjectFlags["IsUniformEnum"] = 536870912] = "IsUniformEnum"; + ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed"; + ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection"; + ObjectFlags[ObjectFlags["IsConstrainedTypeVariable"] = 134217728] = "IsConstrainedTypeVariable"; +})(ObjectFlags || (ObjectFlags = {})); diff --git a/packages/typescript/src/enums/outerExpressionKinds.enum.ts b/packages/typescript/src/enums/outerExpressionKinds.enum.ts index c6463a9d76964..e50be6c6a76fb 100644 --- a/packages/typescript/src/enums/outerExpressionKinds.enum.ts +++ b/packages/typescript/src/enums/outerExpressionKinds.enum.ts @@ -1,17 +1,17 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. - -export enum OuterExpressionKinds { - Parentheses = 1 << 0, - TypeAssertions = 1 << 1, - NonNullAssertions = 1 << 2, - PartiallyEmittedExpressions = 1 << 3, - ExpressionsWithTypeArguments = 1 << 4, - Satisfies = 1 << 5, - ExcludeJSDocTypeAssertion = 1 << 6, - Assignments = 1 << 7, - Comma = 1 << 8, - Assertions = TypeAssertions | NonNullAssertions | Satisfies, - All = Parentheses | Assertions | PartiallyEmittedExpressions | ExpressionsWithTypeArguments, - AllExceptAssertionsOrExpressionsWithTypeArguments = All & ~Assertions & ~ExpressionsWithTypeArguments, - ExpressionTypePassthrough = Parentheses | Assignments | Comma, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. + +export enum OuterExpressionKinds { + Parentheses = 1 << 0, + TypeAssertions = 1 << 1, + NonNullAssertions = 1 << 2, + PartiallyEmittedExpressions = 1 << 3, + ExpressionsWithTypeArguments = 1 << 4, + Satisfies = 1 << 5, + ExcludeJSDocTypeAssertion = 1 << 6, + Assignments = 1 << 7, + Comma = 1 << 8, + Assertions = TypeAssertions | NonNullAssertions | Satisfies, + All = Parentheses | Assertions | PartiallyEmittedExpressions | ExpressionsWithTypeArguments, + AllExceptAssertionsOrExpressionsWithTypeArguments = All & ~Assertions & ~ExpressionsWithTypeArguments, + ExpressionTypePassthrough = Parentheses | Assignments | Comma, +} diff --git a/packages/typescript/src/enums/outerExpressionKinds.ts b/packages/typescript/src/enums/outerExpressionKinds.ts index f3efd85e9394c..bf044cd0f0511 100644 --- a/packages/typescript/src/enums/outerExpressionKinds.ts +++ b/packages/typescript/src/enums/outerExpressionKinds.ts @@ -1,17 +1,17 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. -export var OuterExpressionKinds: any; -(function (OuterExpressionKinds) { - OuterExpressionKinds[OuterExpressionKinds["Parentheses"] = 1] = "Parentheses"; - OuterExpressionKinds[OuterExpressionKinds["TypeAssertions"] = 2] = "TypeAssertions"; - OuterExpressionKinds[OuterExpressionKinds["NonNullAssertions"] = 4] = "NonNullAssertions"; - OuterExpressionKinds[OuterExpressionKinds["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions"; - OuterExpressionKinds[OuterExpressionKinds["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments"; - OuterExpressionKinds[OuterExpressionKinds["Satisfies"] = 32] = "Satisfies"; - OuterExpressionKinds[OuterExpressionKinds["ExcludeJSDocTypeAssertion"] = 64] = "ExcludeJSDocTypeAssertion"; - OuterExpressionKinds[OuterExpressionKinds["Assignments"] = 128] = "Assignments"; - OuterExpressionKinds[OuterExpressionKinds["Comma"] = 256] = "Comma"; - OuterExpressionKinds[OuterExpressionKinds["Assertions"] = 38] = "Assertions"; - OuterExpressionKinds[OuterExpressionKinds["All"] = 63] = "All"; - OuterExpressionKinds[OuterExpressionKinds["AllExceptAssertionsOrExpressionsWithTypeArguments"] = 9] = "AllExceptAssertionsOrExpressionsWithTypeArguments"; - OuterExpressionKinds[OuterExpressionKinds["ExpressionTypePassthrough"] = 385] = "ExpressionTypePassthrough"; -})(OuterExpressionKinds || (OuterExpressionKinds = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/utilities.go. DO NOT EDIT. +export var OuterExpressionKinds: any; +(function (OuterExpressionKinds) { + OuterExpressionKinds[OuterExpressionKinds["Parentheses"] = 1] = "Parentheses"; + OuterExpressionKinds[OuterExpressionKinds["TypeAssertions"] = 2] = "TypeAssertions"; + OuterExpressionKinds[OuterExpressionKinds["NonNullAssertions"] = 4] = "NonNullAssertions"; + OuterExpressionKinds[OuterExpressionKinds["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions"; + OuterExpressionKinds[OuterExpressionKinds["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments"; + OuterExpressionKinds[OuterExpressionKinds["Satisfies"] = 32] = "Satisfies"; + OuterExpressionKinds[OuterExpressionKinds["ExcludeJSDocTypeAssertion"] = 64] = "ExcludeJSDocTypeAssertion"; + OuterExpressionKinds[OuterExpressionKinds["Assignments"] = 128] = "Assignments"; + OuterExpressionKinds[OuterExpressionKinds["Comma"] = 256] = "Comma"; + OuterExpressionKinds[OuterExpressionKinds["Assertions"] = 38] = "Assertions"; + OuterExpressionKinds[OuterExpressionKinds["All"] = 63] = "All"; + OuterExpressionKinds[OuterExpressionKinds["AllExceptAssertionsOrExpressionsWithTypeArguments"] = 9] = "AllExceptAssertionsOrExpressionsWithTypeArguments"; + OuterExpressionKinds[OuterExpressionKinds["ExpressionTypePassthrough"] = 385] = "ExpressionTypePassthrough"; +})(OuterExpressionKinds || (OuterExpressionKinds = {})); diff --git a/packages/typescript/src/enums/regularExpressionFlags.enum.ts b/packages/typescript/src/enums/regularExpressionFlags.enum.ts index 2f85b60897d60..7385fd13a53ab 100644 --- a/packages/typescript/src/enums/regularExpressionFlags.enum.ts +++ b/packages/typescript/src/enums/regularExpressionFlags.enum.ts @@ -1,12 +1,12 @@ -export enum RegularExpressionFlags { - None = 0, - HasIndices = 1 << 0, - Global = 1 << 1, - IgnoreCase = 1 << 2, - Multiline = 1 << 3, - DotAll = 1 << 4, - Unicode = 1 << 5, - UnicodeSets = 1 << 6, - Sticky = 1 << 7, - AnyUnicodeMode = Unicode | UnicodeSets, -} +export enum RegularExpressionFlags { + None = 0, + HasIndices = 1 << 0, + Global = 1 << 1, + IgnoreCase = 1 << 2, + Multiline = 1 << 3, + DotAll = 1 << 4, + Unicode = 1 << 5, + UnicodeSets = 1 << 6, + Sticky = 1 << 7, + AnyUnicodeMode = Unicode | UnicodeSets, +} diff --git a/packages/typescript/src/enums/regularExpressionFlags.ts b/packages/typescript/src/enums/regularExpressionFlags.ts index ddd797fc1f971..465cf540d564f 100644 --- a/packages/typescript/src/enums/regularExpressionFlags.ts +++ b/packages/typescript/src/enums/regularExpressionFlags.ts @@ -1,13 +1,13 @@ -export var RegularExpressionFlags: any; -(function (RegularExpressionFlags) { - RegularExpressionFlags[RegularExpressionFlags["None"] = 0] = "None"; - RegularExpressionFlags[RegularExpressionFlags["HasIndices"] = 1] = "HasIndices"; - RegularExpressionFlags[RegularExpressionFlags["Global"] = 2] = "Global"; - RegularExpressionFlags[RegularExpressionFlags["IgnoreCase"] = 4] = "IgnoreCase"; - RegularExpressionFlags[RegularExpressionFlags["Multiline"] = 8] = "Multiline"; - RegularExpressionFlags[RegularExpressionFlags["DotAll"] = 16] = "DotAll"; - RegularExpressionFlags[RegularExpressionFlags["Unicode"] = 32] = "Unicode"; - RegularExpressionFlags[RegularExpressionFlags["UnicodeSets"] = 64] = "UnicodeSets"; - RegularExpressionFlags[RegularExpressionFlags["Sticky"] = 128] = "Sticky"; - RegularExpressionFlags[RegularExpressionFlags["AnyUnicodeMode"] = 96] = "AnyUnicodeMode"; -})(RegularExpressionFlags || (RegularExpressionFlags = {})); +export var RegularExpressionFlags: any; +(function (RegularExpressionFlags) { + RegularExpressionFlags[RegularExpressionFlags["None"] = 0] = "None"; + RegularExpressionFlags[RegularExpressionFlags["HasIndices"] = 1] = "HasIndices"; + RegularExpressionFlags[RegularExpressionFlags["Global"] = 2] = "Global"; + RegularExpressionFlags[RegularExpressionFlags["IgnoreCase"] = 4] = "IgnoreCase"; + RegularExpressionFlags[RegularExpressionFlags["Multiline"] = 8] = "Multiline"; + RegularExpressionFlags[RegularExpressionFlags["DotAll"] = 16] = "DotAll"; + RegularExpressionFlags[RegularExpressionFlags["Unicode"] = 32] = "Unicode"; + RegularExpressionFlags[RegularExpressionFlags["UnicodeSets"] = 64] = "UnicodeSets"; + RegularExpressionFlags[RegularExpressionFlags["Sticky"] = 128] = "Sticky"; + RegularExpressionFlags[RegularExpressionFlags["AnyUnicodeMode"] = 96] = "AnyUnicodeMode"; +})(RegularExpressionFlags || (RegularExpressionFlags = {})); diff --git a/packages/typescript/src/enums/scriptKind.enum.ts b/packages/typescript/src/enums/scriptKind.enum.ts index e5f108ddec05b..c9f82003e16b2 100644 --- a/packages/typescript/src/enums/scriptKind.enum.ts +++ b/packages/typescript/src/enums/scriptKind.enum.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/core/scriptkind.go. DO NOT EDIT. - -export enum ScriptKind { - Unknown = 0, - JS = 1, - JSX = 2, - TS = 3, - TSX = 4, - JSON = 6, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/core/scriptkind.go. DO NOT EDIT. + +export enum ScriptKind { + Unknown = 0, + JS = 1, + JSX = 2, + TS = 3, + TSX = 4, + JSON = 6, +} diff --git a/packages/typescript/src/enums/scriptKind.ts b/packages/typescript/src/enums/scriptKind.ts index 8dd790c4e0f97..948607480afc5 100644 --- a/packages/typescript/src/enums/scriptKind.ts +++ b/packages/typescript/src/enums/scriptKind.ts @@ -1,10 +1,10 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/core/scriptkind.go. DO NOT EDIT. -export var ScriptKind: any; -(function (ScriptKind) { - ScriptKind[ScriptKind["Unknown"] = 0] = "Unknown"; - ScriptKind[ScriptKind["JS"] = 1] = "JS"; - ScriptKind[ScriptKind["JSX"] = 2] = "JSX"; - ScriptKind[ScriptKind["TS"] = 3] = "TS"; - ScriptKind[ScriptKind["TSX"] = 4] = "TSX"; - ScriptKind[ScriptKind["JSON"] = 6] = "JSON"; -})(ScriptKind || (ScriptKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/core/scriptkind.go. DO NOT EDIT. +export var ScriptKind: any; +(function (ScriptKind) { + ScriptKind[ScriptKind["Unknown"] = 0] = "Unknown"; + ScriptKind[ScriptKind["JS"] = 1] = "JS"; + ScriptKind[ScriptKind["JSX"] = 2] = "JSX"; + ScriptKind[ScriptKind["TS"] = 3] = "TS"; + ScriptKind[ScriptKind["TSX"] = 4] = "TSX"; + ScriptKind[ScriptKind["JSON"] = 6] = "JSON"; +})(ScriptKind || (ScriptKind = {})); diff --git a/packages/typescript/src/enums/scriptTarget.enum.ts b/packages/typescript/src/enums/scriptTarget.enum.ts index e1ee6bdb19200..c54a9f09ff745 100644 --- a/packages/typescript/src/enums/scriptTarget.enum.ts +++ b/packages/typescript/src/enums/scriptTarget.enum.ts @@ -1,19 +1,19 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. - -export enum ScriptTarget { - ES2015 = 2, - ES2016 = 3, - ES2017 = 4, - ES2018 = 5, - ES2019 = 6, - ES2020 = 7, - ES2021 = 8, - ES2022 = 9, - ES2023 = 10, - ES2024 = 11, - ES2025 = 12, - ES2026 = 13, - ESNext = 99, - JSON = 100, - Latest = ESNext, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. + +export enum ScriptTarget { + ES2015 = 2, + ES2016 = 3, + ES2017 = 4, + ES2018 = 5, + ES2019 = 6, + ES2020 = 7, + ES2021 = 8, + ES2022 = 9, + ES2023 = 10, + ES2024 = 11, + ES2025 = 12, + ES2026 = 13, + ESNext = 99, + JSON = 100, + Latest = ESNext, +} diff --git a/packages/typescript/src/enums/scriptTarget.ts b/packages/typescript/src/enums/scriptTarget.ts index 5532d4886d325..aae91bfef6b63 100644 --- a/packages/typescript/src/enums/scriptTarget.ts +++ b/packages/typescript/src/enums/scriptTarget.ts @@ -1,19 +1,19 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. -export var ScriptTarget: any; -(function (ScriptTarget) { - ScriptTarget[ScriptTarget["ES2015"] = 2] = "ES2015"; - ScriptTarget[ScriptTarget["ES2016"] = 3] = "ES2016"; - ScriptTarget[ScriptTarget["ES2017"] = 4] = "ES2017"; - ScriptTarget[ScriptTarget["ES2018"] = 5] = "ES2018"; - ScriptTarget[ScriptTarget["ES2019"] = 6] = "ES2019"; - ScriptTarget[ScriptTarget["ES2020"] = 7] = "ES2020"; - ScriptTarget[ScriptTarget["ES2021"] = 8] = "ES2021"; - ScriptTarget[ScriptTarget["ES2022"] = 9] = "ES2022"; - ScriptTarget[ScriptTarget["ES2023"] = 10] = "ES2023"; - ScriptTarget[ScriptTarget["ES2024"] = 11] = "ES2024"; - ScriptTarget[ScriptTarget["ES2025"] = 12] = "ES2025"; - ScriptTarget[ScriptTarget["ES2026"] = 13] = "ES2026"; - ScriptTarget[ScriptTarget["ESNext"] = 99] = "ESNext"; - ScriptTarget[ScriptTarget["JSON"] = 100] = "JSON"; - ScriptTarget[ScriptTarget["Latest"] = 99] = "Latest"; -})(ScriptTarget || (ScriptTarget = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/options.ts. DO NOT EDIT. +export var ScriptTarget: any; +(function (ScriptTarget) { + ScriptTarget[ScriptTarget["ES2015"] = 2] = "ES2015"; + ScriptTarget[ScriptTarget["ES2016"] = 3] = "ES2016"; + ScriptTarget[ScriptTarget["ES2017"] = 4] = "ES2017"; + ScriptTarget[ScriptTarget["ES2018"] = 5] = "ES2018"; + ScriptTarget[ScriptTarget["ES2019"] = 6] = "ES2019"; + ScriptTarget[ScriptTarget["ES2020"] = 7] = "ES2020"; + ScriptTarget[ScriptTarget["ES2021"] = 8] = "ES2021"; + ScriptTarget[ScriptTarget["ES2022"] = 9] = "ES2022"; + ScriptTarget[ScriptTarget["ES2023"] = 10] = "ES2023"; + ScriptTarget[ScriptTarget["ES2024"] = 11] = "ES2024"; + ScriptTarget[ScriptTarget["ES2025"] = 12] = "ES2025"; + ScriptTarget[ScriptTarget["ES2026"] = 13] = "ES2026"; + ScriptTarget[ScriptTarget["ESNext"] = 99] = "ESNext"; + ScriptTarget[ScriptTarget["JSON"] = 100] = "JSON"; + ScriptTarget[ScriptTarget["Latest"] = 99] = "Latest"; +})(ScriptTarget || (ScriptTarget = {})); diff --git a/packages/typescript/src/enums/signatureFlags.enum.ts b/packages/typescript/src/enums/signatureFlags.enum.ts index 6ec54519a379d..5e3d8547eaee6 100644 --- a/packages/typescript/src/enums/signatureFlags.enum.ts +++ b/packages/typescript/src/enums/signatureFlags.enum.ts @@ -1,16 +1,16 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum SignatureFlags { - None = 0, - HasRestParameter = 1 << 0, - HasLiteralTypes = 1 << 1, - Construct = 1 << 2, - Abstract = 1 << 3, - IsInnerCallChain = 1 << 4, - IsOuterCallChain = 1 << 5, - IsUntypedSignatureInJSFile = 1 << 6, - IsNonInferrable = 1 << 7, - IsSignatureCandidateForOverloadFailure = 1 << 8, - PropagatingFlags = HasRestParameter | HasLiteralTypes | Construct | Abstract | IsUntypedSignatureInJSFile | IsSignatureCandidateForOverloadFailure, - CallChainFlags = IsInnerCallChain | IsOuterCallChain, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum SignatureFlags { + None = 0, + HasRestParameter = 1 << 0, + HasLiteralTypes = 1 << 1, + Construct = 1 << 2, + Abstract = 1 << 3, + IsInnerCallChain = 1 << 4, + IsOuterCallChain = 1 << 5, + IsUntypedSignatureInJSFile = 1 << 6, + IsNonInferrable = 1 << 7, + IsSignatureCandidateForOverloadFailure = 1 << 8, + PropagatingFlags = HasRestParameter | HasLiteralTypes | Construct | Abstract | IsUntypedSignatureInJSFile | IsSignatureCandidateForOverloadFailure, + CallChainFlags = IsInnerCallChain | IsOuterCallChain, +} diff --git a/packages/typescript/src/enums/signatureFlags.ts b/packages/typescript/src/enums/signatureFlags.ts index 0fdfb94f95e5e..cf15c782b836c 100644 --- a/packages/typescript/src/enums/signatureFlags.ts +++ b/packages/typescript/src/enums/signatureFlags.ts @@ -1,16 +1,16 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var SignatureFlags: any; -(function (SignatureFlags) { - SignatureFlags[SignatureFlags["None"] = 0] = "None"; - SignatureFlags[SignatureFlags["HasRestParameter"] = 1] = "HasRestParameter"; - SignatureFlags[SignatureFlags["HasLiteralTypes"] = 2] = "HasLiteralTypes"; - SignatureFlags[SignatureFlags["Construct"] = 4] = "Construct"; - SignatureFlags[SignatureFlags["Abstract"] = 8] = "Abstract"; - SignatureFlags[SignatureFlags["IsInnerCallChain"] = 16] = "IsInnerCallChain"; - SignatureFlags[SignatureFlags["IsOuterCallChain"] = 32] = "IsOuterCallChain"; - SignatureFlags[SignatureFlags["IsUntypedSignatureInJSFile"] = 64] = "IsUntypedSignatureInJSFile"; - SignatureFlags[SignatureFlags["IsNonInferrable"] = 128] = "IsNonInferrable"; - SignatureFlags[SignatureFlags["IsSignatureCandidateForOverloadFailure"] = 256] = "IsSignatureCandidateForOverloadFailure"; - SignatureFlags[SignatureFlags["PropagatingFlags"] = 335] = "PropagatingFlags"; - SignatureFlags[SignatureFlags["CallChainFlags"] = 48] = "CallChainFlags"; -})(SignatureFlags || (SignatureFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var SignatureFlags: any; +(function (SignatureFlags) { + SignatureFlags[SignatureFlags["None"] = 0] = "None"; + SignatureFlags[SignatureFlags["HasRestParameter"] = 1] = "HasRestParameter"; + SignatureFlags[SignatureFlags["HasLiteralTypes"] = 2] = "HasLiteralTypes"; + SignatureFlags[SignatureFlags["Construct"] = 4] = "Construct"; + SignatureFlags[SignatureFlags["Abstract"] = 8] = "Abstract"; + SignatureFlags[SignatureFlags["IsInnerCallChain"] = 16] = "IsInnerCallChain"; + SignatureFlags[SignatureFlags["IsOuterCallChain"] = 32] = "IsOuterCallChain"; + SignatureFlags[SignatureFlags["IsUntypedSignatureInJSFile"] = 64] = "IsUntypedSignatureInJSFile"; + SignatureFlags[SignatureFlags["IsNonInferrable"] = 128] = "IsNonInferrable"; + SignatureFlags[SignatureFlags["IsSignatureCandidateForOverloadFailure"] = 256] = "IsSignatureCandidateForOverloadFailure"; + SignatureFlags[SignatureFlags["PropagatingFlags"] = 335] = "PropagatingFlags"; + SignatureFlags[SignatureFlags["CallChainFlags"] = 48] = "CallChainFlags"; +})(SignatureFlags || (SignatureFlags = {})); diff --git a/packages/typescript/src/enums/signatureKind.enum.ts b/packages/typescript/src/enums/signatureKind.enum.ts index a9963c9c27b97..e8da9f1b80718 100644 --- a/packages/typescript/src/enums/signatureKind.enum.ts +++ b/packages/typescript/src/enums/signatureKind.enum.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum SignatureKind { - Call = 0, - Construct = 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum SignatureKind { + Call = 0, + Construct = 1, +} diff --git a/packages/typescript/src/enums/signatureKind.ts b/packages/typescript/src/enums/signatureKind.ts index e58344d712159..3383c02600799 100644 --- a/packages/typescript/src/enums/signatureKind.ts +++ b/packages/typescript/src/enums/signatureKind.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var SignatureKind: any; -(function (SignatureKind) { - SignatureKind[SignatureKind["Call"] = 0] = "Call"; - SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; -})(SignatureKind || (SignatureKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var SignatureKind: any; +(function (SignatureKind) { + SignatureKind[SignatureKind["Call"] = 0] = "Call"; + SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; +})(SignatureKind || (SignatureKind = {})); diff --git a/packages/typescript/src/enums/spanMapFeature.enum.ts b/packages/typescript/src/enums/spanMapFeature.enum.ts index 76e8f7d4966be..9144fc0e0bbcb 100644 --- a/packages/typescript/src/enums/spanMapFeature.enum.ts +++ b/packages/typescript/src/enums/spanMapFeature.enum.ts @@ -1,26 +1,26 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. - -export enum SpanMapFeature { - Hover = 1 << 0, - SignatureHelp = 1 << 1, - Completion = 1 << 2, - Definition = 1 << 3, - TypeDefinition = 1 << 4, - Implementation = 1 << 5, - References = 1 << 6, - DocumentHighlights = 1 << 7, - Rename = 1 << 8, - CallHierarchy = 1 << 9, - CodeActions = 1 << 10, - Formatting = 1 << 11, - InlayHints = 1 << 12, - SemanticTokens = 1 << 13, - FoldingRanges = 1 << 14, - SelectionRanges = 1 << 15, - LinkedEditing = 1 << 16, - AutoInsert = 1 << 17, - DocumentSymbols = 1 << 18, - CodeLens = 1 << 19, - None = 0, - All = (CodeLens << 1) - 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. + +export enum SpanMapFeature { + Hover = 1 << 0, + SignatureHelp = 1 << 1, + Completion = 1 << 2, + Definition = 1 << 3, + TypeDefinition = 1 << 4, + Implementation = 1 << 5, + References = 1 << 6, + DocumentHighlights = 1 << 7, + Rename = 1 << 8, + CallHierarchy = 1 << 9, + CodeActions = 1 << 10, + Formatting = 1 << 11, + InlayHints = 1 << 12, + SemanticTokens = 1 << 13, + FoldingRanges = 1 << 14, + SelectionRanges = 1 << 15, + LinkedEditing = 1 << 16, + AutoInsert = 1 << 17, + DocumentSymbols = 1 << 18, + CodeLens = 1 << 19, + None = 0, + All = (CodeLens << 1) - 1, +} diff --git a/packages/typescript/src/enums/spanMapFeature.ts b/packages/typescript/src/enums/spanMapFeature.ts index 86495362da735..3a848762cb7a7 100644 --- a/packages/typescript/src/enums/spanMapFeature.ts +++ b/packages/typescript/src/enums/spanMapFeature.ts @@ -1,26 +1,26 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. -export var SpanMapFeature: any; -(function (SpanMapFeature) { - SpanMapFeature[SpanMapFeature["Hover"] = 1] = "Hover"; - SpanMapFeature[SpanMapFeature["SignatureHelp"] = 2] = "SignatureHelp"; - SpanMapFeature[SpanMapFeature["Completion"] = 4] = "Completion"; - SpanMapFeature[SpanMapFeature["Definition"] = 8] = "Definition"; - SpanMapFeature[SpanMapFeature["TypeDefinition"] = 16] = "TypeDefinition"; - SpanMapFeature[SpanMapFeature["Implementation"] = 32] = "Implementation"; - SpanMapFeature[SpanMapFeature["References"] = 64] = "References"; - SpanMapFeature[SpanMapFeature["DocumentHighlights"] = 128] = "DocumentHighlights"; - SpanMapFeature[SpanMapFeature["Rename"] = 256] = "Rename"; - SpanMapFeature[SpanMapFeature["CallHierarchy"] = 512] = "CallHierarchy"; - SpanMapFeature[SpanMapFeature["CodeActions"] = 1024] = "CodeActions"; - SpanMapFeature[SpanMapFeature["Formatting"] = 2048] = "Formatting"; - SpanMapFeature[SpanMapFeature["InlayHints"] = 4096] = "InlayHints"; - SpanMapFeature[SpanMapFeature["SemanticTokens"] = 8192] = "SemanticTokens"; - SpanMapFeature[SpanMapFeature["FoldingRanges"] = 16384] = "FoldingRanges"; - SpanMapFeature[SpanMapFeature["SelectionRanges"] = 32768] = "SelectionRanges"; - SpanMapFeature[SpanMapFeature["LinkedEditing"] = 65536] = "LinkedEditing"; - SpanMapFeature[SpanMapFeature["AutoInsert"] = 131072] = "AutoInsert"; - SpanMapFeature[SpanMapFeature["DocumentSymbols"] = 262144] = "DocumentSymbols"; - SpanMapFeature[SpanMapFeature["CodeLens"] = 524288] = "CodeLens"; - SpanMapFeature[SpanMapFeature["None"] = 0] = "None"; - SpanMapFeature[SpanMapFeature["All"] = 1048575] = "All"; -})(SpanMapFeature || (SpanMapFeature = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. +export var SpanMapFeature: any; +(function (SpanMapFeature) { + SpanMapFeature[SpanMapFeature["Hover"] = 1] = "Hover"; + SpanMapFeature[SpanMapFeature["SignatureHelp"] = 2] = "SignatureHelp"; + SpanMapFeature[SpanMapFeature["Completion"] = 4] = "Completion"; + SpanMapFeature[SpanMapFeature["Definition"] = 8] = "Definition"; + SpanMapFeature[SpanMapFeature["TypeDefinition"] = 16] = "TypeDefinition"; + SpanMapFeature[SpanMapFeature["Implementation"] = 32] = "Implementation"; + SpanMapFeature[SpanMapFeature["References"] = 64] = "References"; + SpanMapFeature[SpanMapFeature["DocumentHighlights"] = 128] = "DocumentHighlights"; + SpanMapFeature[SpanMapFeature["Rename"] = 256] = "Rename"; + SpanMapFeature[SpanMapFeature["CallHierarchy"] = 512] = "CallHierarchy"; + SpanMapFeature[SpanMapFeature["CodeActions"] = 1024] = "CodeActions"; + SpanMapFeature[SpanMapFeature["Formatting"] = 2048] = "Formatting"; + SpanMapFeature[SpanMapFeature["InlayHints"] = 4096] = "InlayHints"; + SpanMapFeature[SpanMapFeature["SemanticTokens"] = 8192] = "SemanticTokens"; + SpanMapFeature[SpanMapFeature["FoldingRanges"] = 16384] = "FoldingRanges"; + SpanMapFeature[SpanMapFeature["SelectionRanges"] = 32768] = "SelectionRanges"; + SpanMapFeature[SpanMapFeature["LinkedEditing"] = 65536] = "LinkedEditing"; + SpanMapFeature[SpanMapFeature["AutoInsert"] = 131072] = "AutoInsert"; + SpanMapFeature[SpanMapFeature["DocumentSymbols"] = 262144] = "DocumentSymbols"; + SpanMapFeature[SpanMapFeature["CodeLens"] = 524288] = "CodeLens"; + SpanMapFeature[SpanMapFeature["None"] = 0] = "None"; + SpanMapFeature[SpanMapFeature["All"] = 1048575] = "All"; +})(SpanMapFeature || (SpanMapFeature = {})); diff --git a/packages/typescript/src/enums/spanMapFidelity.enum.ts b/packages/typescript/src/enums/spanMapFidelity.enum.ts index 7c57d9424f6d0..e70086035a64d 100644 --- a/packages/typescript/src/enums/spanMapFidelity.enum.ts +++ b/packages/typescript/src/enums/spanMapFidelity.enum.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. - -export enum SpanMapFidelity { - Exact = 0, - Atom = 1, - Approximate = 2, - None = 3, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. + +export enum SpanMapFidelity { + Exact = 0, + Atom = 1, + Approximate = 2, + None = 3, +} diff --git a/packages/typescript/src/enums/spanMapFidelity.ts b/packages/typescript/src/enums/spanMapFidelity.ts index bbf6159ede42c..b720a6f3f5cee 100644 --- a/packages/typescript/src/enums/spanMapFidelity.ts +++ b/packages/typescript/src/enums/spanMapFidelity.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. -export var SpanMapFidelity: any; -(function (SpanMapFidelity) { - SpanMapFidelity[SpanMapFidelity["Exact"] = 0] = "Exact"; - SpanMapFidelity[SpanMapFidelity["Atom"] = 1] = "Atom"; - SpanMapFidelity[SpanMapFidelity["Approximate"] = 2] = "Approximate"; - SpanMapFidelity[SpanMapFidelity["None"] = 3] = "None"; -})(SpanMapFidelity || (SpanMapFidelity = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. +export var SpanMapFidelity: any; +(function (SpanMapFidelity) { + SpanMapFidelity[SpanMapFidelity["Exact"] = 0] = "Exact"; + SpanMapFidelity[SpanMapFidelity["Atom"] = 1] = "Atom"; + SpanMapFidelity[SpanMapFidelity["Approximate"] = 2] = "Approximate"; + SpanMapFidelity[SpanMapFidelity["None"] = 3] = "None"; +})(SpanMapFidelity || (SpanMapFidelity = {})); diff --git a/packages/typescript/src/enums/spanMapKind.enum.ts b/packages/typescript/src/enums/spanMapKind.enum.ts index b9634ee2300cf..e61358eb64d23 100644 --- a/packages/typescript/src/enums/spanMapKind.enum.ts +++ b/packages/typescript/src/enums/spanMapKind.enum.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. - -export enum SpanMapKind { - Verbatim = 0, - Atom = 1, - Alias = 2, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. + +export enum SpanMapKind { + Verbatim = 0, + Atom = 1, + Alias = 2, +} diff --git a/packages/typescript/src/enums/spanMapKind.ts b/packages/typescript/src/enums/spanMapKind.ts index ef390d8f7869d..5cdfd0d87c5ca 100644 --- a/packages/typescript/src/enums/spanMapKind.ts +++ b/packages/typescript/src/enums/spanMapKind.ts @@ -1,7 +1,7 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. -export var SpanMapKind: any; -(function (SpanMapKind) { - SpanMapKind[SpanMapKind["Verbatim"] = 0] = "Verbatim"; - SpanMapKind[SpanMapKind["Atom"] = 1] = "Atom"; - SpanMapKind[SpanMapKind["Alias"] = 2] = "Alias"; -})(SpanMapKind || (SpanMapKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/spanmap/spanmap.go. DO NOT EDIT. +export var SpanMapKind: any; +(function (SpanMapKind) { + SpanMapKind[SpanMapKind["Verbatim"] = 0] = "Verbatim"; + SpanMapKind[SpanMapKind["Atom"] = 1] = "Atom"; + SpanMapKind[SpanMapKind["Alias"] = 2] = "Alias"; +})(SpanMapKind || (SpanMapKind = {})); diff --git a/packages/typescript/src/enums/symbolFlags.enum.ts b/packages/typescript/src/enums/symbolFlags.enum.ts index e80234baf2606..c09c194745847 100644 --- a/packages/typescript/src/enums/symbolFlags.enum.ts +++ b/packages/typescript/src/enums/symbolFlags.enum.ts @@ -1,71 +1,71 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbolflags.go. DO NOT EDIT. - -export enum SymbolFlags { - None = 0, - FunctionScopedVariable = 1 << 0, - BlockScopedVariable = 1 << 1, - Property = 1 << 2, - EnumMember = 1 << 3, - Function = 1 << 4, - Class = 1 << 5, - Interface = 1 << 6, - ConstEnum = 1 << 7, - RegularEnum = 1 << 8, - ValueModule = 1 << 9, - NamespaceModule = 1 << 10, - TypeLiteral = 1 << 11, - ObjectLiteral = 1 << 12, - Method = 1 << 13, - Constructor = 1 << 14, - GetAccessor = 1 << 15, - SetAccessor = 1 << 16, - Signature = 1 << 17, - TypeParameter = 1 << 18, - TypeAlias = 1 << 19, - ExportValue = 1 << 20, - Alias = 1 << 21, - Prototype = 1 << 22, - ExportStar = 1 << 23, - Optional = 1 << 24, - Transient = 1 << 25, - Assignment = 1 << 26, - ModuleExports = 1 << 27, - ConstEnumOnlyModule = 1 << 28, - ReplaceableByMethod = 1 << 29, - GlobalLookup = 1 << 30, - All = (1 << 30) - 1, - Enum = RegularEnum | ConstEnum, - Variable = FunctionScopedVariable | BlockScopedVariable, - Value = Variable | Property | EnumMember | ObjectLiteral | Function | Class | Enum | ValueModule | Method | GetAccessor | SetAccessor, - Type = Class | Interface | Enum | EnumMember | TypeLiteral | TypeParameter | TypeAlias, - Namespace = ValueModule | NamespaceModule | Enum, - Module = ValueModule | NamespaceModule, - Accessor = GetAccessor | SetAccessor, - FunctionScopedVariableExcludes = Value & ~FunctionScopedVariable, - BlockScopedVariableExcludes = Value, - ParameterExcludes = Value, - PropertyExcludes = Value & ~(Property | Accessor), - EnumMemberExcludes = Value | Type, - FunctionExcludes = Value & ~(Function | ValueModule | Class), - ClassExcludes = (Value | Type) & ~(ValueModule | Interface | Function), - InterfaceExcludes = Type & ~(Interface | Class), - RegularEnumExcludes = (Value | Type) & ~(RegularEnum | ValueModule), - ConstEnumExcludes = (Value | Type) & ~ConstEnum, - ValueModuleExcludes = Value & ~(Function | Class | RegularEnum | ValueModule), - NamespaceModuleExcludes = None, - MethodExcludes = Value & ~Method, - GetAccessorExcludes = Value & ~(SetAccessor | Property), - SetAccessorExcludes = Value & ~(GetAccessor | Property), - AccessorExcludes = Value & ~Property, - TypeParameterExcludes = Type & ~TypeParameter, - TypeAliasExcludes = Type, - AliasExcludes = Alias, - ModuleMember = Variable | Function | Class | Interface | Enum | Module | TypeAlias | Alias, - ExportHasLocal = Function | Class | Enum | ValueModule, - BlockScoped = BlockScopedVariable | Class | Enum, - PropertyOrAccessor = Property | Accessor, - ClassMember = Method | Accessor | Property, - ExportSupportsDefaultModifier = Class | Function | Interface, - ExportDoesNotSupportDefaultModifier = ~ExportSupportsDefaultModifier, - LateBindingContainer = Class | Interface | TypeLiteral | ObjectLiteral | Function, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbolflags.go. DO NOT EDIT. + +export enum SymbolFlags { + None = 0, + FunctionScopedVariable = 1 << 0, + BlockScopedVariable = 1 << 1, + Property = 1 << 2, + EnumMember = 1 << 3, + Function = 1 << 4, + Class = 1 << 5, + Interface = 1 << 6, + ConstEnum = 1 << 7, + RegularEnum = 1 << 8, + ValueModule = 1 << 9, + NamespaceModule = 1 << 10, + TypeLiteral = 1 << 11, + ObjectLiteral = 1 << 12, + Method = 1 << 13, + Constructor = 1 << 14, + GetAccessor = 1 << 15, + SetAccessor = 1 << 16, + Signature = 1 << 17, + TypeParameter = 1 << 18, + TypeAlias = 1 << 19, + ExportValue = 1 << 20, + Alias = 1 << 21, + Prototype = 1 << 22, + ExportStar = 1 << 23, + Optional = 1 << 24, + Transient = 1 << 25, + Assignment = 1 << 26, + ModuleExports = 1 << 27, + ConstEnumOnlyModule = 1 << 28, + ReplaceableByMethod = 1 << 29, + GlobalLookup = 1 << 30, + All = (1 << 30) - 1, + Enum = RegularEnum | ConstEnum, + Variable = FunctionScopedVariable | BlockScopedVariable, + Value = Variable | Property | EnumMember | ObjectLiteral | Function | Class | Enum | ValueModule | Method | GetAccessor | SetAccessor, + Type = Class | Interface | Enum | EnumMember | TypeLiteral | TypeParameter | TypeAlias, + Namespace = ValueModule | NamespaceModule | Enum, + Module = ValueModule | NamespaceModule, + Accessor = GetAccessor | SetAccessor, + FunctionScopedVariableExcludes = Value & ~FunctionScopedVariable, + BlockScopedVariableExcludes = Value, + ParameterExcludes = Value, + PropertyExcludes = Value & ~(Property | Accessor), + EnumMemberExcludes = Value | Type, + FunctionExcludes = Value & ~(Function | ValueModule | Class), + ClassExcludes = (Value | Type) & ~(ValueModule | Interface | Function), + InterfaceExcludes = Type & ~(Interface | Class), + RegularEnumExcludes = (Value | Type) & ~(RegularEnum | ValueModule), + ConstEnumExcludes = (Value | Type) & ~ConstEnum, + ValueModuleExcludes = Value & ~(Function | Class | RegularEnum | ValueModule), + NamespaceModuleExcludes = None, + MethodExcludes = Value & ~Method, + GetAccessorExcludes = Value & ~(SetAccessor | Property), + SetAccessorExcludes = Value & ~(GetAccessor | Property), + AccessorExcludes = Value & ~Property, + TypeParameterExcludes = Type & ~TypeParameter, + TypeAliasExcludes = Type, + AliasExcludes = Alias, + ModuleMember = Variable | Function | Class | Interface | Enum | Module | TypeAlias | Alias, + ExportHasLocal = Function | Class | Enum | ValueModule, + BlockScoped = BlockScopedVariable | Class | Enum, + PropertyOrAccessor = Property | Accessor, + ClassMember = Method | Accessor | Property, + ExportSupportsDefaultModifier = Class | Function | Interface, + ExportDoesNotSupportDefaultModifier = ~ExportSupportsDefaultModifier, + LateBindingContainer = Class | Interface | TypeLiteral | ObjectLiteral | Function, +} diff --git a/packages/typescript/src/enums/symbolFlags.ts b/packages/typescript/src/enums/symbolFlags.ts index 25f906b3e47d9..a0098faa30067 100644 --- a/packages/typescript/src/enums/symbolFlags.ts +++ b/packages/typescript/src/enums/symbolFlags.ts @@ -1,71 +1,71 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbolflags.go. DO NOT EDIT. -export var SymbolFlags: any; -(function (SymbolFlags) { - SymbolFlags[SymbolFlags["None"] = 0] = "None"; - SymbolFlags[SymbolFlags["FunctionScopedVariable"] = 1] = "FunctionScopedVariable"; - SymbolFlags[SymbolFlags["BlockScopedVariable"] = 2] = "BlockScopedVariable"; - SymbolFlags[SymbolFlags["Property"] = 4] = "Property"; - SymbolFlags[SymbolFlags["EnumMember"] = 8] = "EnumMember"; - SymbolFlags[SymbolFlags["Function"] = 16] = "Function"; - SymbolFlags[SymbolFlags["Class"] = 32] = "Class"; - SymbolFlags[SymbolFlags["Interface"] = 64] = "Interface"; - SymbolFlags[SymbolFlags["ConstEnum"] = 128] = "ConstEnum"; - SymbolFlags[SymbolFlags["RegularEnum"] = 256] = "RegularEnum"; - SymbolFlags[SymbolFlags["ValueModule"] = 512] = "ValueModule"; - SymbolFlags[SymbolFlags["NamespaceModule"] = 1024] = "NamespaceModule"; - SymbolFlags[SymbolFlags["TypeLiteral"] = 2048] = "TypeLiteral"; - SymbolFlags[SymbolFlags["ObjectLiteral"] = 4096] = "ObjectLiteral"; - SymbolFlags[SymbolFlags["Method"] = 8192] = "Method"; - SymbolFlags[SymbolFlags["Constructor"] = 16384] = "Constructor"; - SymbolFlags[SymbolFlags["GetAccessor"] = 32768] = "GetAccessor"; - SymbolFlags[SymbolFlags["SetAccessor"] = 65536] = "SetAccessor"; - SymbolFlags[SymbolFlags["Signature"] = 131072] = "Signature"; - SymbolFlags[SymbolFlags["TypeParameter"] = 262144] = "TypeParameter"; - SymbolFlags[SymbolFlags["TypeAlias"] = 524288] = "TypeAlias"; - SymbolFlags[SymbolFlags["ExportValue"] = 1048576] = "ExportValue"; - SymbolFlags[SymbolFlags["Alias"] = 2097152] = "Alias"; - SymbolFlags[SymbolFlags["Prototype"] = 4194304] = "Prototype"; - SymbolFlags[SymbolFlags["ExportStar"] = 8388608] = "ExportStar"; - SymbolFlags[SymbolFlags["Optional"] = 16777216] = "Optional"; - SymbolFlags[SymbolFlags["Transient"] = 33554432] = "Transient"; - SymbolFlags[SymbolFlags["Assignment"] = 67108864] = "Assignment"; - SymbolFlags[SymbolFlags["ModuleExports"] = 134217728] = "ModuleExports"; - SymbolFlags[SymbolFlags["ConstEnumOnlyModule"] = 268435456] = "ConstEnumOnlyModule"; - SymbolFlags[SymbolFlags["ReplaceableByMethod"] = 536870912] = "ReplaceableByMethod"; - SymbolFlags[SymbolFlags["GlobalLookup"] = 1073741824] = "GlobalLookup"; - SymbolFlags[SymbolFlags["All"] = 1073741823] = "All"; - SymbolFlags[SymbolFlags["Enum"] = 384] = "Enum"; - SymbolFlags[SymbolFlags["Variable"] = 3] = "Variable"; - SymbolFlags[SymbolFlags["Value"] = 111551] = "Value"; - SymbolFlags[SymbolFlags["Type"] = 788968] = "Type"; - SymbolFlags[SymbolFlags["Namespace"] = 1920] = "Namespace"; - SymbolFlags[SymbolFlags["Module"] = 1536] = "Module"; - SymbolFlags[SymbolFlags["Accessor"] = 98304] = "Accessor"; - SymbolFlags[SymbolFlags["FunctionScopedVariableExcludes"] = 111550] = "FunctionScopedVariableExcludes"; - SymbolFlags[SymbolFlags["BlockScopedVariableExcludes"] = 111551] = "BlockScopedVariableExcludes"; - SymbolFlags[SymbolFlags["ParameterExcludes"] = 111551] = "ParameterExcludes"; - SymbolFlags[SymbolFlags["PropertyExcludes"] = 13243] = "PropertyExcludes"; - SymbolFlags[SymbolFlags["EnumMemberExcludes"] = 900095] = "EnumMemberExcludes"; - SymbolFlags[SymbolFlags["FunctionExcludes"] = 110991] = "FunctionExcludes"; - SymbolFlags[SymbolFlags["ClassExcludes"] = 899503] = "ClassExcludes"; - SymbolFlags[SymbolFlags["InterfaceExcludes"] = 788872] = "InterfaceExcludes"; - SymbolFlags[SymbolFlags["RegularEnumExcludes"] = 899327] = "RegularEnumExcludes"; - SymbolFlags[SymbolFlags["ConstEnumExcludes"] = 899967] = "ConstEnumExcludes"; - SymbolFlags[SymbolFlags["ValueModuleExcludes"] = 110735] = "ValueModuleExcludes"; - SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; - SymbolFlags[SymbolFlags["MethodExcludes"] = 103359] = "MethodExcludes"; - SymbolFlags[SymbolFlags["GetAccessorExcludes"] = 46011] = "GetAccessorExcludes"; - SymbolFlags[SymbolFlags["SetAccessorExcludes"] = 78779] = "SetAccessorExcludes"; - SymbolFlags[SymbolFlags["AccessorExcludes"] = 111547] = "AccessorExcludes"; - SymbolFlags[SymbolFlags["TypeParameterExcludes"] = 526824] = "TypeParameterExcludes"; - SymbolFlags[SymbolFlags["TypeAliasExcludes"] = 788968] = "TypeAliasExcludes"; - SymbolFlags[SymbolFlags["AliasExcludes"] = 2097152] = "AliasExcludes"; - SymbolFlags[SymbolFlags["ModuleMember"] = 2623475] = "ModuleMember"; - SymbolFlags[SymbolFlags["ExportHasLocal"] = 944] = "ExportHasLocal"; - SymbolFlags[SymbolFlags["BlockScoped"] = 418] = "BlockScoped"; - SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; - SymbolFlags[SymbolFlags["ClassMember"] = 106500] = "ClassMember"; - SymbolFlags[SymbolFlags["ExportSupportsDefaultModifier"] = 112] = "ExportSupportsDefaultModifier"; - SymbolFlags[SymbolFlags["ExportDoesNotSupportDefaultModifier"] = -113] = "ExportDoesNotSupportDefaultModifier"; - SymbolFlags[SymbolFlags["LateBindingContainer"] = 6256] = "LateBindingContainer"; -})(SymbolFlags || (SymbolFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/symbolflags.go. DO NOT EDIT. +export var SymbolFlags: any; +(function (SymbolFlags) { + SymbolFlags[SymbolFlags["None"] = 0] = "None"; + SymbolFlags[SymbolFlags["FunctionScopedVariable"] = 1] = "FunctionScopedVariable"; + SymbolFlags[SymbolFlags["BlockScopedVariable"] = 2] = "BlockScopedVariable"; + SymbolFlags[SymbolFlags["Property"] = 4] = "Property"; + SymbolFlags[SymbolFlags["EnumMember"] = 8] = "EnumMember"; + SymbolFlags[SymbolFlags["Function"] = 16] = "Function"; + SymbolFlags[SymbolFlags["Class"] = 32] = "Class"; + SymbolFlags[SymbolFlags["Interface"] = 64] = "Interface"; + SymbolFlags[SymbolFlags["ConstEnum"] = 128] = "ConstEnum"; + SymbolFlags[SymbolFlags["RegularEnum"] = 256] = "RegularEnum"; + SymbolFlags[SymbolFlags["ValueModule"] = 512] = "ValueModule"; + SymbolFlags[SymbolFlags["NamespaceModule"] = 1024] = "NamespaceModule"; + SymbolFlags[SymbolFlags["TypeLiteral"] = 2048] = "TypeLiteral"; + SymbolFlags[SymbolFlags["ObjectLiteral"] = 4096] = "ObjectLiteral"; + SymbolFlags[SymbolFlags["Method"] = 8192] = "Method"; + SymbolFlags[SymbolFlags["Constructor"] = 16384] = "Constructor"; + SymbolFlags[SymbolFlags["GetAccessor"] = 32768] = "GetAccessor"; + SymbolFlags[SymbolFlags["SetAccessor"] = 65536] = "SetAccessor"; + SymbolFlags[SymbolFlags["Signature"] = 131072] = "Signature"; + SymbolFlags[SymbolFlags["TypeParameter"] = 262144] = "TypeParameter"; + SymbolFlags[SymbolFlags["TypeAlias"] = 524288] = "TypeAlias"; + SymbolFlags[SymbolFlags["ExportValue"] = 1048576] = "ExportValue"; + SymbolFlags[SymbolFlags["Alias"] = 2097152] = "Alias"; + SymbolFlags[SymbolFlags["Prototype"] = 4194304] = "Prototype"; + SymbolFlags[SymbolFlags["ExportStar"] = 8388608] = "ExportStar"; + SymbolFlags[SymbolFlags["Optional"] = 16777216] = "Optional"; + SymbolFlags[SymbolFlags["Transient"] = 33554432] = "Transient"; + SymbolFlags[SymbolFlags["Assignment"] = 67108864] = "Assignment"; + SymbolFlags[SymbolFlags["ModuleExports"] = 134217728] = "ModuleExports"; + SymbolFlags[SymbolFlags["ConstEnumOnlyModule"] = 268435456] = "ConstEnumOnlyModule"; + SymbolFlags[SymbolFlags["ReplaceableByMethod"] = 536870912] = "ReplaceableByMethod"; + SymbolFlags[SymbolFlags["GlobalLookup"] = 1073741824] = "GlobalLookup"; + SymbolFlags[SymbolFlags["All"] = 1073741823] = "All"; + SymbolFlags[SymbolFlags["Enum"] = 384] = "Enum"; + SymbolFlags[SymbolFlags["Variable"] = 3] = "Variable"; + SymbolFlags[SymbolFlags["Value"] = 111551] = "Value"; + SymbolFlags[SymbolFlags["Type"] = 788968] = "Type"; + SymbolFlags[SymbolFlags["Namespace"] = 1920] = "Namespace"; + SymbolFlags[SymbolFlags["Module"] = 1536] = "Module"; + SymbolFlags[SymbolFlags["Accessor"] = 98304] = "Accessor"; + SymbolFlags[SymbolFlags["FunctionScopedVariableExcludes"] = 111550] = "FunctionScopedVariableExcludes"; + SymbolFlags[SymbolFlags["BlockScopedVariableExcludes"] = 111551] = "BlockScopedVariableExcludes"; + SymbolFlags[SymbolFlags["ParameterExcludes"] = 111551] = "ParameterExcludes"; + SymbolFlags[SymbolFlags["PropertyExcludes"] = 13243] = "PropertyExcludes"; + SymbolFlags[SymbolFlags["EnumMemberExcludes"] = 900095] = "EnumMemberExcludes"; + SymbolFlags[SymbolFlags["FunctionExcludes"] = 110991] = "FunctionExcludes"; + SymbolFlags[SymbolFlags["ClassExcludes"] = 899503] = "ClassExcludes"; + SymbolFlags[SymbolFlags["InterfaceExcludes"] = 788872] = "InterfaceExcludes"; + SymbolFlags[SymbolFlags["RegularEnumExcludes"] = 899327] = "RegularEnumExcludes"; + SymbolFlags[SymbolFlags["ConstEnumExcludes"] = 899967] = "ConstEnumExcludes"; + SymbolFlags[SymbolFlags["ValueModuleExcludes"] = 110735] = "ValueModuleExcludes"; + SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; + SymbolFlags[SymbolFlags["MethodExcludes"] = 103359] = "MethodExcludes"; + SymbolFlags[SymbolFlags["GetAccessorExcludes"] = 46011] = "GetAccessorExcludes"; + SymbolFlags[SymbolFlags["SetAccessorExcludes"] = 78779] = "SetAccessorExcludes"; + SymbolFlags[SymbolFlags["AccessorExcludes"] = 111547] = "AccessorExcludes"; + SymbolFlags[SymbolFlags["TypeParameterExcludes"] = 526824] = "TypeParameterExcludes"; + SymbolFlags[SymbolFlags["TypeAliasExcludes"] = 788968] = "TypeAliasExcludes"; + SymbolFlags[SymbolFlags["AliasExcludes"] = 2097152] = "AliasExcludes"; + SymbolFlags[SymbolFlags["ModuleMember"] = 2623475] = "ModuleMember"; + SymbolFlags[SymbolFlags["ExportHasLocal"] = 944] = "ExportHasLocal"; + SymbolFlags[SymbolFlags["BlockScoped"] = 418] = "BlockScoped"; + SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; + SymbolFlags[SymbolFlags["ClassMember"] = 106500] = "ClassMember"; + SymbolFlags[SymbolFlags["ExportSupportsDefaultModifier"] = 112] = "ExportSupportsDefaultModifier"; + SymbolFlags[SymbolFlags["ExportDoesNotSupportDefaultModifier"] = -113] = "ExportDoesNotSupportDefaultModifier"; + SymbolFlags[SymbolFlags["LateBindingContainer"] = 6256] = "LateBindingContainer"; +})(SymbolFlags || (SymbolFlags = {})); diff --git a/packages/typescript/src/enums/symbolOwnerKind.enum.ts b/packages/typescript/src/enums/symbolOwnerKind.enum.ts index 0f743c53ee458..e0905d0e39eee 100644 --- a/packages/typescript/src/enums/symbolOwnerKind.enum.ts +++ b/packages/typescript/src/enums/symbolOwnerKind.enum.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/api/proto.go. DO NOT EDIT. - -export enum SymbolOwnerKind { - File = 0, - Snapshot = 1, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/api/proto.go. DO NOT EDIT. + +export enum SymbolOwnerKind { + File = 0, + Snapshot = 1, +} diff --git a/packages/typescript/src/enums/symbolOwnerKind.ts b/packages/typescript/src/enums/symbolOwnerKind.ts index 97aae72e18725..dbba8232e943e 100644 --- a/packages/typescript/src/enums/symbolOwnerKind.ts +++ b/packages/typescript/src/enums/symbolOwnerKind.ts @@ -1,6 +1,6 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/api/proto.go. DO NOT EDIT. -export var SymbolOwnerKind: any; -(function (SymbolOwnerKind) { - SymbolOwnerKind[SymbolOwnerKind["File"] = 0] = "File"; - SymbolOwnerKind[SymbolOwnerKind["Snapshot"] = 1] = "Snapshot"; -})(SymbolOwnerKind || (SymbolOwnerKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/api/proto.go. DO NOT EDIT. +export var SymbolOwnerKind: any; +(function (SymbolOwnerKind) { + SymbolOwnerKind[SymbolOwnerKind["File"] = 0] = "File"; + SymbolOwnerKind[SymbolOwnerKind["Snapshot"] = 1] = "Snapshot"; +})(SymbolOwnerKind || (SymbolOwnerKind = {})); diff --git a/packages/typescript/src/enums/syntaxKind.enum.ts b/packages/typescript/src/enums/syntaxKind.enum.ts index 1973373f684f3..c26830c937959 100644 --- a/packages/typescript/src/enums/syntaxKind.enum.ts +++ b/packages/typescript/src/enums/syntaxKind.enum.ts @@ -1,391 +1,391 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/ast.json. DO NOT EDIT. - -export enum SyntaxKind { - Unknown = 0, - EndOfFile = 1, - SingleLineCommentTrivia = 2, - MultiLineCommentTrivia = 3, - NewLineTrivia = 4, - WhitespaceTrivia = 5, - ConflictMarkerTrivia = 6, - NonTextFileMarkerTrivia = 7, - NumericLiteral = 8, - BigIntLiteral = 9, - StringLiteral = 10, - JsxText = 11, - JsxTextAllWhiteSpaces = 12, - RegularExpressionLiteral = 13, - NoSubstitutionTemplateLiteral = 14, - TemplateHead = 15, - TemplateMiddle = 16, - TemplateTail = 17, - OpenBraceToken = 18, - CloseBraceToken = 19, - OpenParenToken = 20, - CloseParenToken = 21, - OpenBracketToken = 22, - CloseBracketToken = 23, - DotToken = 24, - DotDotDotToken = 25, - SemicolonToken = 26, - CommaToken = 27, - QuestionDotToken = 28, - LessThanToken = 29, - LessThanSlashToken = 30, - GreaterThanToken = 31, - LessThanEqualsToken = 32, - GreaterThanEqualsToken = 33, - EqualsEqualsToken = 34, - ExclamationEqualsToken = 35, - EqualsEqualsEqualsToken = 36, - ExclamationEqualsEqualsToken = 37, - EqualsGreaterThanToken = 38, - PlusToken = 39, - MinusToken = 40, - AsteriskToken = 41, - AsteriskAsteriskToken = 42, - SlashToken = 43, - PercentToken = 44, - PlusPlusToken = 45, - MinusMinusToken = 46, - LessThanLessThanToken = 47, - GreaterThanGreaterThanToken = 48, - GreaterThanGreaterThanGreaterThanToken = 49, - AmpersandToken = 50, - BarToken = 51, - CaretToken = 52, - ExclamationToken = 53, - TildeToken = 54, - AmpersandAmpersandToken = 55, - BarBarToken = 56, - QuestionToken = 57, - ColonToken = 58, - AtToken = 59, - QuestionQuestionToken = 60, - BacktickToken = 61, - HashToken = 62, - EqualsToken = 63, - PlusEqualsToken = 64, - MinusEqualsToken = 65, - AsteriskEqualsToken = 66, - AsteriskAsteriskEqualsToken = 67, - SlashEqualsToken = 68, - PercentEqualsToken = 69, - LessThanLessThanEqualsToken = 70, - GreaterThanGreaterThanEqualsToken = 71, - GreaterThanGreaterThanGreaterThanEqualsToken = 72, - AmpersandEqualsToken = 73, - BarEqualsToken = 74, - BarBarEqualsToken = 75, - AmpersandAmpersandEqualsToken = 76, - QuestionQuestionEqualsToken = 77, - CaretEqualsToken = 78, - Identifier = 79, - PrivateIdentifier = 80, - JSDocCommentTextToken = 81, - BreakKeyword = 82, - CaseKeyword = 83, - CatchKeyword = 84, - ClassKeyword = 85, - ConstKeyword = 86, - ContinueKeyword = 87, - DebuggerKeyword = 88, - DefaultKeyword = 89, - DeleteKeyword = 90, - DoKeyword = 91, - ElseKeyword = 92, - EnumKeyword = 93, - ExportKeyword = 94, - ExtendsKeyword = 95, - FalseKeyword = 96, - FinallyKeyword = 97, - ForKeyword = 98, - FunctionKeyword = 99, - IfKeyword = 100, - ImportKeyword = 101, - InKeyword = 102, - InstanceOfKeyword = 103, - NewKeyword = 104, - NullKeyword = 105, - ReturnKeyword = 106, - SuperKeyword = 107, - SwitchKeyword = 108, - ThisKeyword = 109, - ThrowKeyword = 110, - TrueKeyword = 111, - TryKeyword = 112, - TypeOfKeyword = 113, - VarKeyword = 114, - VoidKeyword = 115, - WhileKeyword = 116, - WithKeyword = 117, - ImplementsKeyword = 118, - InterfaceKeyword = 119, - LetKeyword = 120, - PackageKeyword = 121, - PrivateKeyword = 122, - ProtectedKeyword = 123, - PublicKeyword = 124, - StaticKeyword = 125, - YieldKeyword = 126, - AbstractKeyword = 127, - AccessorKeyword = 128, - AsKeyword = 129, - AssertsKeyword = 130, - AssertKeyword = 131, - AnyKeyword = 132, - AsyncKeyword = 133, - AwaitKeyword = 134, - BooleanKeyword = 135, - ConstructorKeyword = 136, - DeclareKeyword = 137, - GetKeyword = 138, - ImmediateKeyword = 139, - InferKeyword = 140, - IntrinsicKeyword = 141, - IsKeyword = 142, - KeyOfKeyword = 143, - ModuleKeyword = 144, - NamespaceKeyword = 145, - NeverKeyword = 146, - OutKeyword = 147, - ReadonlyKeyword = 148, - RequireKeyword = 149, - NumberKeyword = 150, - ObjectKeyword = 151, - SatisfiesKeyword = 152, - SetKeyword = 153, - StringKeyword = 154, - SymbolKeyword = 155, - TypeKeyword = 156, - UndefinedKeyword = 157, - UniqueKeyword = 158, - UnknownKeyword = 159, - UsingKeyword = 160, - FromKeyword = 161, - GlobalKeyword = 162, - BigIntKeyword = 163, - OverrideKeyword = 164, - OfKeyword = 165, - DeferKeyword = 166, - SourceKeyword = 167, - QualifiedName = 168, - ComputedPropertyName = 169, - TypeParameter = 170, - Parameter = 171, - Decorator = 172, - PropertySignature = 173, - PropertyDeclaration = 174, - MethodSignature = 175, - MethodDeclaration = 176, - ClassStaticBlockDeclaration = 177, - Constructor = 178, - GetAccessor = 179, - SetAccessor = 180, - CallSignature = 181, - ConstructSignature = 182, - IndexSignature = 183, - TypePredicate = 184, - TypeReference = 185, - FunctionType = 186, - ConstructorType = 187, - TypeQuery = 188, - TypeLiteral = 189, - ArrayType = 190, - TupleType = 191, - OptionalType = 192, - RestType = 193, - UnionType = 194, - IntersectionType = 195, - ConditionalType = 196, - InferType = 197, - ParenthesizedType = 198, - ThisType = 199, - TypeOperator = 200, - IndexedAccessType = 201, - MappedType = 202, - LiteralType = 203, - NamedTupleMember = 204, - TemplateLiteralType = 205, - TemplateLiteralTypeSpan = 206, - ImportType = 207, - ObjectBindingPattern = 208, - ArrayBindingPattern = 209, - BindingElement = 210, - ArrayLiteralExpression = 211, - ObjectLiteralExpression = 212, - PropertyAccessExpression = 213, - ElementAccessExpression = 214, - CallExpression = 215, - NewExpression = 216, - TaggedTemplateExpression = 217, - TypeAssertionExpression = 218, - ParenthesizedExpression = 219, - FunctionExpression = 220, - ArrowFunction = 221, - DeleteExpression = 222, - TypeOfExpression = 223, - VoidExpression = 224, - AwaitExpression = 225, - PrefixUnaryExpression = 226, - PostfixUnaryExpression = 227, - BinaryExpression = 228, - ConditionalExpression = 229, - TemplateExpression = 230, - YieldExpression = 231, - SpreadElement = 232, - ClassExpression = 233, - OmittedExpression = 234, - ExpressionWithTypeArguments = 235, - AsExpression = 236, - NonNullExpression = 237, - MetaProperty = 238, - SyntheticExpression = 239, - SatisfiesExpression = 240, - TemplateSpan = 241, - SemicolonClassElement = 242, - Block = 243, - EmptyStatement = 244, - VariableStatement = 245, - ExpressionStatement = 246, - IfStatement = 247, - DoStatement = 248, - WhileStatement = 249, - ForStatement = 250, - ForInStatement = 251, - ForOfStatement = 252, - ContinueStatement = 253, - BreakStatement = 254, - ReturnStatement = 255, - WithStatement = 256, - SwitchStatement = 257, - LabeledStatement = 258, - ThrowStatement = 259, - TryStatement = 260, - DebuggerStatement = 261, - VariableDeclaration = 262, - VariableDeclarationList = 263, - FunctionDeclaration = 264, - ClassDeclaration = 265, - InterfaceDeclaration = 266, - TypeAliasDeclaration = 267, - EnumDeclaration = 268, - ModuleDeclaration = 269, - ModuleBlock = 270, - CaseBlock = 271, - NamespaceExportDeclaration = 272, - ImportEqualsDeclaration = 273, - ImportDeclaration = 274, - ImportClause = 275, - NamespaceImport = 276, - NamedImports = 277, - ImportSpecifier = 278, - ExportAssignment = 279, - ExportDeclaration = 280, - NamedExports = 281, - NamespaceExport = 282, - ExportSpecifier = 283, - MissingDeclaration = 284, - ExternalModuleReference = 285, - JsxElement = 286, - JsxSelfClosingElement = 287, - JsxOpeningElement = 288, - JsxClosingElement = 289, - JsxFragment = 290, - JsxOpeningFragment = 291, - JsxClosingFragment = 292, - JsxAttribute = 293, - JsxAttributes = 294, - JsxSpreadAttribute = 295, - JsxExpression = 296, - JsxNamespacedName = 297, - CaseClause = 298, - DefaultClause = 299, - HeritageClause = 300, - CatchClause = 301, - ImportAttributes = 302, - ImportAttribute = 303, - PropertyAssignment = 304, - ShorthandPropertyAssignment = 305, - SpreadAssignment = 306, - EnumMember = 307, - SourceFile = 308, - JSDocTypeExpression = 309, - JSDocNameReference = 310, - JSDocAllType = 311, - JSDocNullableType = 312, - JSDocNonNullableType = 313, - JSDocOptionalType = 314, - JSDocVariadicType = 315, - JSDoc = 316, - JSDocText = 317, - JSDocTypeLiteral = 318, - JSDocSignature = 319, - JSDocLink = 320, - JSDocLinkCode = 321, - JSDocLinkPlain = 322, - JSDocUnknownTag = 323, - JSDocAugmentsTag = 324, - JSDocImplementsTag = 325, - JSDocDeprecatedTag = 326, - JSDocPublicTag = 327, - JSDocPrivateTag = 328, - JSDocProtectedTag = 329, - JSDocReadonlyTag = 330, - JSDocOverrideTag = 331, - JSDocCallbackTag = 332, - JSDocOverloadTag = 333, - JSDocParameterTag = 334, - JSDocReturnTag = 335, - JSDocThisTag = 336, - JSDocTypeTag = 337, - JSDocTemplateTag = 338, - JSDocTypedefTag = 339, - JSDocSeeTag = 340, - JSDocPropertyTag = 341, - JSDocThrowsTag = 342, - JSDocSatisfiesTag = 343, - JSDocImportTag = 344, - SyntaxList = 345, - JSTypeAliasDeclaration = 346, - JSImportDeclaration = 347, - NotEmittedStatement = 348, - PartiallyEmittedExpression = 349, - SyntheticReferenceExpression = 350, - NotEmittedTypeElement = 351, - Count = 352, - FirstAssignment = EqualsToken, - LastAssignment = CaretEqualsToken, - FirstCompoundAssignment = PlusEqualsToken, - LastCompoundAssignment = CaretEqualsToken, - FirstReservedWord = BreakKeyword, - LastReservedWord = WithKeyword, - FirstKeyword = BreakKeyword, - LastKeyword = SourceKeyword, - FirstFutureReservedWord = ImplementsKeyword, - LastFutureReservedWord = YieldKeyword, - FirstTypeNode = TypePredicate, - LastTypeNode = ImportType, - FirstPunctuation = OpenBraceToken, - LastPunctuation = CaretEqualsToken, - FirstToken = Unknown, - LastToken = LastKeyword, - FirstLiteralToken = NumericLiteral, - LastLiteralToken = NoSubstitutionTemplateLiteral, - FirstTemplateToken = NoSubstitutionTemplateLiteral, - LastTemplateToken = TemplateTail, - FirstBinaryOperator = LessThanToken, - LastBinaryOperator = CaretEqualsToken, - FirstStatement = VariableStatement, - LastStatement = DebuggerStatement, - FirstNode = QualifiedName, - FirstJSDocNode = JSDocTypeExpression, - LastJSDocNode = JSDocImportTag, - FirstJSDocTagNode = JSDocUnknownTag, - LastJSDocTagNode = JSDocImportTag, - FirstContextualKeyword = AbstractKeyword, - LastContextualKeyword = SourceKeyword, - LastUnaryOperator = TildeToken, - FirstTriviaToken = SingleLineCommentTrivia, - LastTriviaToken = ConflictMarkerTrivia, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/ast.json. DO NOT EDIT. + +export enum SyntaxKind { + Unknown = 0, + EndOfFile = 1, + SingleLineCommentTrivia = 2, + MultiLineCommentTrivia = 3, + NewLineTrivia = 4, + WhitespaceTrivia = 5, + ConflictMarkerTrivia = 6, + NonTextFileMarkerTrivia = 7, + NumericLiteral = 8, + BigIntLiteral = 9, + StringLiteral = 10, + JsxText = 11, + JsxTextAllWhiteSpaces = 12, + RegularExpressionLiteral = 13, + NoSubstitutionTemplateLiteral = 14, + TemplateHead = 15, + TemplateMiddle = 16, + TemplateTail = 17, + OpenBraceToken = 18, + CloseBraceToken = 19, + OpenParenToken = 20, + CloseParenToken = 21, + OpenBracketToken = 22, + CloseBracketToken = 23, + DotToken = 24, + DotDotDotToken = 25, + SemicolonToken = 26, + CommaToken = 27, + QuestionDotToken = 28, + LessThanToken = 29, + LessThanSlashToken = 30, + GreaterThanToken = 31, + LessThanEqualsToken = 32, + GreaterThanEqualsToken = 33, + EqualsEqualsToken = 34, + ExclamationEqualsToken = 35, + EqualsEqualsEqualsToken = 36, + ExclamationEqualsEqualsToken = 37, + EqualsGreaterThanToken = 38, + PlusToken = 39, + MinusToken = 40, + AsteriskToken = 41, + AsteriskAsteriskToken = 42, + SlashToken = 43, + PercentToken = 44, + PlusPlusToken = 45, + MinusMinusToken = 46, + LessThanLessThanToken = 47, + GreaterThanGreaterThanToken = 48, + GreaterThanGreaterThanGreaterThanToken = 49, + AmpersandToken = 50, + BarToken = 51, + CaretToken = 52, + ExclamationToken = 53, + TildeToken = 54, + AmpersandAmpersandToken = 55, + BarBarToken = 56, + QuestionToken = 57, + ColonToken = 58, + AtToken = 59, + QuestionQuestionToken = 60, + BacktickToken = 61, + HashToken = 62, + EqualsToken = 63, + PlusEqualsToken = 64, + MinusEqualsToken = 65, + AsteriskEqualsToken = 66, + AsteriskAsteriskEqualsToken = 67, + SlashEqualsToken = 68, + PercentEqualsToken = 69, + LessThanLessThanEqualsToken = 70, + GreaterThanGreaterThanEqualsToken = 71, + GreaterThanGreaterThanGreaterThanEqualsToken = 72, + AmpersandEqualsToken = 73, + BarEqualsToken = 74, + BarBarEqualsToken = 75, + AmpersandAmpersandEqualsToken = 76, + QuestionQuestionEqualsToken = 77, + CaretEqualsToken = 78, + Identifier = 79, + PrivateIdentifier = 80, + JSDocCommentTextToken = 81, + BreakKeyword = 82, + CaseKeyword = 83, + CatchKeyword = 84, + ClassKeyword = 85, + ConstKeyword = 86, + ContinueKeyword = 87, + DebuggerKeyword = 88, + DefaultKeyword = 89, + DeleteKeyword = 90, + DoKeyword = 91, + ElseKeyword = 92, + EnumKeyword = 93, + ExportKeyword = 94, + ExtendsKeyword = 95, + FalseKeyword = 96, + FinallyKeyword = 97, + ForKeyword = 98, + FunctionKeyword = 99, + IfKeyword = 100, + ImportKeyword = 101, + InKeyword = 102, + InstanceOfKeyword = 103, + NewKeyword = 104, + NullKeyword = 105, + ReturnKeyword = 106, + SuperKeyword = 107, + SwitchKeyword = 108, + ThisKeyword = 109, + ThrowKeyword = 110, + TrueKeyword = 111, + TryKeyword = 112, + TypeOfKeyword = 113, + VarKeyword = 114, + VoidKeyword = 115, + WhileKeyword = 116, + WithKeyword = 117, + ImplementsKeyword = 118, + InterfaceKeyword = 119, + LetKeyword = 120, + PackageKeyword = 121, + PrivateKeyword = 122, + ProtectedKeyword = 123, + PublicKeyword = 124, + StaticKeyword = 125, + YieldKeyword = 126, + AbstractKeyword = 127, + AccessorKeyword = 128, + AsKeyword = 129, + AssertsKeyword = 130, + AssertKeyword = 131, + AnyKeyword = 132, + AsyncKeyword = 133, + AwaitKeyword = 134, + BooleanKeyword = 135, + ConstructorKeyword = 136, + DeclareKeyword = 137, + GetKeyword = 138, + ImmediateKeyword = 139, + InferKeyword = 140, + IntrinsicKeyword = 141, + IsKeyword = 142, + KeyOfKeyword = 143, + ModuleKeyword = 144, + NamespaceKeyword = 145, + NeverKeyword = 146, + OutKeyword = 147, + ReadonlyKeyword = 148, + RequireKeyword = 149, + NumberKeyword = 150, + ObjectKeyword = 151, + SatisfiesKeyword = 152, + SetKeyword = 153, + StringKeyword = 154, + SymbolKeyword = 155, + TypeKeyword = 156, + UndefinedKeyword = 157, + UniqueKeyword = 158, + UnknownKeyword = 159, + UsingKeyword = 160, + FromKeyword = 161, + GlobalKeyword = 162, + BigIntKeyword = 163, + OverrideKeyword = 164, + OfKeyword = 165, + DeferKeyword = 166, + SourceKeyword = 167, + QualifiedName = 168, + ComputedPropertyName = 169, + TypeParameter = 170, + Parameter = 171, + Decorator = 172, + PropertySignature = 173, + PropertyDeclaration = 174, + MethodSignature = 175, + MethodDeclaration = 176, + ClassStaticBlockDeclaration = 177, + Constructor = 178, + GetAccessor = 179, + SetAccessor = 180, + CallSignature = 181, + ConstructSignature = 182, + IndexSignature = 183, + TypePredicate = 184, + TypeReference = 185, + FunctionType = 186, + ConstructorType = 187, + TypeQuery = 188, + TypeLiteral = 189, + ArrayType = 190, + TupleType = 191, + OptionalType = 192, + RestType = 193, + UnionType = 194, + IntersectionType = 195, + ConditionalType = 196, + InferType = 197, + ParenthesizedType = 198, + ThisType = 199, + TypeOperator = 200, + IndexedAccessType = 201, + MappedType = 202, + LiteralType = 203, + NamedTupleMember = 204, + TemplateLiteralType = 205, + TemplateLiteralTypeSpan = 206, + ImportType = 207, + ObjectBindingPattern = 208, + ArrayBindingPattern = 209, + BindingElement = 210, + ArrayLiteralExpression = 211, + ObjectLiteralExpression = 212, + PropertyAccessExpression = 213, + ElementAccessExpression = 214, + CallExpression = 215, + NewExpression = 216, + TaggedTemplateExpression = 217, + TypeAssertionExpression = 218, + ParenthesizedExpression = 219, + FunctionExpression = 220, + ArrowFunction = 221, + DeleteExpression = 222, + TypeOfExpression = 223, + VoidExpression = 224, + AwaitExpression = 225, + PrefixUnaryExpression = 226, + PostfixUnaryExpression = 227, + BinaryExpression = 228, + ConditionalExpression = 229, + TemplateExpression = 230, + YieldExpression = 231, + SpreadElement = 232, + ClassExpression = 233, + OmittedExpression = 234, + ExpressionWithTypeArguments = 235, + AsExpression = 236, + NonNullExpression = 237, + MetaProperty = 238, + SyntheticExpression = 239, + SatisfiesExpression = 240, + TemplateSpan = 241, + SemicolonClassElement = 242, + Block = 243, + EmptyStatement = 244, + VariableStatement = 245, + ExpressionStatement = 246, + IfStatement = 247, + DoStatement = 248, + WhileStatement = 249, + ForStatement = 250, + ForInStatement = 251, + ForOfStatement = 252, + ContinueStatement = 253, + BreakStatement = 254, + ReturnStatement = 255, + WithStatement = 256, + SwitchStatement = 257, + LabeledStatement = 258, + ThrowStatement = 259, + TryStatement = 260, + DebuggerStatement = 261, + VariableDeclaration = 262, + VariableDeclarationList = 263, + FunctionDeclaration = 264, + ClassDeclaration = 265, + InterfaceDeclaration = 266, + TypeAliasDeclaration = 267, + EnumDeclaration = 268, + ModuleDeclaration = 269, + ModuleBlock = 270, + CaseBlock = 271, + NamespaceExportDeclaration = 272, + ImportEqualsDeclaration = 273, + ImportDeclaration = 274, + ImportClause = 275, + NamespaceImport = 276, + NamedImports = 277, + ImportSpecifier = 278, + ExportAssignment = 279, + ExportDeclaration = 280, + NamedExports = 281, + NamespaceExport = 282, + ExportSpecifier = 283, + MissingDeclaration = 284, + ExternalModuleReference = 285, + JsxElement = 286, + JsxSelfClosingElement = 287, + JsxOpeningElement = 288, + JsxClosingElement = 289, + JsxFragment = 290, + JsxOpeningFragment = 291, + JsxClosingFragment = 292, + JsxAttribute = 293, + JsxAttributes = 294, + JsxSpreadAttribute = 295, + JsxExpression = 296, + JsxNamespacedName = 297, + CaseClause = 298, + DefaultClause = 299, + HeritageClause = 300, + CatchClause = 301, + ImportAttributes = 302, + ImportAttribute = 303, + PropertyAssignment = 304, + ShorthandPropertyAssignment = 305, + SpreadAssignment = 306, + EnumMember = 307, + SourceFile = 308, + JSDocTypeExpression = 309, + JSDocNameReference = 310, + JSDocAllType = 311, + JSDocNullableType = 312, + JSDocNonNullableType = 313, + JSDocOptionalType = 314, + JSDocVariadicType = 315, + JSDoc = 316, + JSDocText = 317, + JSDocTypeLiteral = 318, + JSDocSignature = 319, + JSDocLink = 320, + JSDocLinkCode = 321, + JSDocLinkPlain = 322, + JSDocUnknownTag = 323, + JSDocAugmentsTag = 324, + JSDocImplementsTag = 325, + JSDocDeprecatedTag = 326, + JSDocPublicTag = 327, + JSDocPrivateTag = 328, + JSDocProtectedTag = 329, + JSDocReadonlyTag = 330, + JSDocOverrideTag = 331, + JSDocCallbackTag = 332, + JSDocOverloadTag = 333, + JSDocParameterTag = 334, + JSDocReturnTag = 335, + JSDocThisTag = 336, + JSDocTypeTag = 337, + JSDocTemplateTag = 338, + JSDocTypedefTag = 339, + JSDocSeeTag = 340, + JSDocPropertyTag = 341, + JSDocThrowsTag = 342, + JSDocSatisfiesTag = 343, + JSDocImportTag = 344, + SyntaxList = 345, + JSTypeAliasDeclaration = 346, + JSImportDeclaration = 347, + NotEmittedStatement = 348, + PartiallyEmittedExpression = 349, + SyntheticReferenceExpression = 350, + NotEmittedTypeElement = 351, + Count = 352, + FirstAssignment = EqualsToken, + LastAssignment = CaretEqualsToken, + FirstCompoundAssignment = PlusEqualsToken, + LastCompoundAssignment = CaretEqualsToken, + FirstReservedWord = BreakKeyword, + LastReservedWord = WithKeyword, + FirstKeyword = BreakKeyword, + LastKeyword = SourceKeyword, + FirstFutureReservedWord = ImplementsKeyword, + LastFutureReservedWord = YieldKeyword, + FirstTypeNode = TypePredicate, + LastTypeNode = ImportType, + FirstPunctuation = OpenBraceToken, + LastPunctuation = CaretEqualsToken, + FirstToken = Unknown, + LastToken = LastKeyword, + FirstLiteralToken = NumericLiteral, + LastLiteralToken = NoSubstitutionTemplateLiteral, + FirstTemplateToken = NoSubstitutionTemplateLiteral, + LastTemplateToken = TemplateTail, + FirstBinaryOperator = LessThanToken, + LastBinaryOperator = CaretEqualsToken, + FirstStatement = VariableStatement, + LastStatement = DebuggerStatement, + FirstNode = QualifiedName, + FirstJSDocNode = JSDocTypeExpression, + LastJSDocNode = JSDocImportTag, + FirstJSDocTagNode = JSDocUnknownTag, + LastJSDocTagNode = JSDocImportTag, + FirstContextualKeyword = AbstractKeyword, + LastContextualKeyword = SourceKeyword, + LastUnaryOperator = TildeToken, + FirstTriviaToken = SingleLineCommentTrivia, + LastTriviaToken = ConflictMarkerTrivia, +} diff --git a/packages/typescript/src/enums/syntaxKind.ts b/packages/typescript/src/enums/syntaxKind.ts index 596eeab49f274..ddef036ad978e 100644 --- a/packages/typescript/src/enums/syntaxKind.ts +++ b/packages/typescript/src/enums/syntaxKind.ts @@ -1,391 +1,391 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/ast.json. DO NOT EDIT. -export var SyntaxKind: any; -(function (SyntaxKind) { - SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; - SyntaxKind[SyntaxKind["EndOfFile"] = 1] = "EndOfFile"; - SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 2] = "SingleLineCommentTrivia"; - SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 3] = "MultiLineCommentTrivia"; - SyntaxKind[SyntaxKind["NewLineTrivia"] = 4] = "NewLineTrivia"; - SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 5] = "WhitespaceTrivia"; - SyntaxKind[SyntaxKind["ConflictMarkerTrivia"] = 6] = "ConflictMarkerTrivia"; - SyntaxKind[SyntaxKind["NonTextFileMarkerTrivia"] = 7] = "NonTextFileMarkerTrivia"; - SyntaxKind[SyntaxKind["NumericLiteral"] = 8] = "NumericLiteral"; - SyntaxKind[SyntaxKind["BigIntLiteral"] = 9] = "BigIntLiteral"; - SyntaxKind[SyntaxKind["StringLiteral"] = 10] = "StringLiteral"; - SyntaxKind[SyntaxKind["JsxText"] = 11] = "JsxText"; - SyntaxKind[SyntaxKind["JsxTextAllWhiteSpaces"] = 12] = "JsxTextAllWhiteSpaces"; - SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 13] = "RegularExpressionLiteral"; - SyntaxKind[SyntaxKind["NoSubstitutionTemplateLiteral"] = 14] = "NoSubstitutionTemplateLiteral"; - SyntaxKind[SyntaxKind["TemplateHead"] = 15] = "TemplateHead"; - SyntaxKind[SyntaxKind["TemplateMiddle"] = 16] = "TemplateMiddle"; - SyntaxKind[SyntaxKind["TemplateTail"] = 17] = "TemplateTail"; - SyntaxKind[SyntaxKind["OpenBraceToken"] = 18] = "OpenBraceToken"; - SyntaxKind[SyntaxKind["CloseBraceToken"] = 19] = "CloseBraceToken"; - SyntaxKind[SyntaxKind["OpenParenToken"] = 20] = "OpenParenToken"; - SyntaxKind[SyntaxKind["CloseParenToken"] = 21] = "CloseParenToken"; - SyntaxKind[SyntaxKind["OpenBracketToken"] = 22] = "OpenBracketToken"; - SyntaxKind[SyntaxKind["CloseBracketToken"] = 23] = "CloseBracketToken"; - SyntaxKind[SyntaxKind["DotToken"] = 24] = "DotToken"; - SyntaxKind[SyntaxKind["DotDotDotToken"] = 25] = "DotDotDotToken"; - SyntaxKind[SyntaxKind["SemicolonToken"] = 26] = "SemicolonToken"; - SyntaxKind[SyntaxKind["CommaToken"] = 27] = "CommaToken"; - SyntaxKind[SyntaxKind["QuestionDotToken"] = 28] = "QuestionDotToken"; - SyntaxKind[SyntaxKind["LessThanToken"] = 29] = "LessThanToken"; - SyntaxKind[SyntaxKind["LessThanSlashToken"] = 30] = "LessThanSlashToken"; - SyntaxKind[SyntaxKind["GreaterThanToken"] = 31] = "GreaterThanToken"; - SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 32] = "LessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 33] = "GreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 34] = "EqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 35] = "ExclamationEqualsToken"; - SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 36] = "EqualsEqualsEqualsToken"; - SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 37] = "ExclamationEqualsEqualsToken"; - SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 38] = "EqualsGreaterThanToken"; - SyntaxKind[SyntaxKind["PlusToken"] = 39] = "PlusToken"; - SyntaxKind[SyntaxKind["MinusToken"] = 40] = "MinusToken"; - SyntaxKind[SyntaxKind["AsteriskToken"] = 41] = "AsteriskToken"; - SyntaxKind[SyntaxKind["AsteriskAsteriskToken"] = 42] = "AsteriskAsteriskToken"; - SyntaxKind[SyntaxKind["SlashToken"] = 43] = "SlashToken"; - SyntaxKind[SyntaxKind["PercentToken"] = 44] = "PercentToken"; - SyntaxKind[SyntaxKind["PlusPlusToken"] = 45] = "PlusPlusToken"; - SyntaxKind[SyntaxKind["MinusMinusToken"] = 46] = "MinusMinusToken"; - SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 47] = "LessThanLessThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 48] = "GreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 49] = "GreaterThanGreaterThanGreaterThanToken"; - SyntaxKind[SyntaxKind["AmpersandToken"] = 50] = "AmpersandToken"; - SyntaxKind[SyntaxKind["BarToken"] = 51] = "BarToken"; - SyntaxKind[SyntaxKind["CaretToken"] = 52] = "CaretToken"; - SyntaxKind[SyntaxKind["ExclamationToken"] = 53] = "ExclamationToken"; - SyntaxKind[SyntaxKind["TildeToken"] = 54] = "TildeToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 55] = "AmpersandAmpersandToken"; - SyntaxKind[SyntaxKind["BarBarToken"] = 56] = "BarBarToken"; - SyntaxKind[SyntaxKind["QuestionToken"] = 57] = "QuestionToken"; - SyntaxKind[SyntaxKind["ColonToken"] = 58] = "ColonToken"; - SyntaxKind[SyntaxKind["AtToken"] = 59] = "AtToken"; - SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken"; - SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken"; - SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken"; - SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken"; - SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken"; - SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken"; - SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken"; - SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken"; - SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken"; - SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken"; - SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken"; - SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken"; - SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken"; - SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken"; - SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken"; - SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier"; - SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier"; - SyntaxKind[SyntaxKind["JSDocCommentTextToken"] = 81] = "JSDocCommentTextToken"; - SyntaxKind[SyntaxKind["BreakKeyword"] = 82] = "BreakKeyword"; - SyntaxKind[SyntaxKind["CaseKeyword"] = 83] = "CaseKeyword"; - SyntaxKind[SyntaxKind["CatchKeyword"] = 84] = "CatchKeyword"; - SyntaxKind[SyntaxKind["ClassKeyword"] = 85] = "ClassKeyword"; - SyntaxKind[SyntaxKind["ConstKeyword"] = 86] = "ConstKeyword"; - SyntaxKind[SyntaxKind["ContinueKeyword"] = 87] = "ContinueKeyword"; - SyntaxKind[SyntaxKind["DebuggerKeyword"] = 88] = "DebuggerKeyword"; - SyntaxKind[SyntaxKind["DefaultKeyword"] = 89] = "DefaultKeyword"; - SyntaxKind[SyntaxKind["DeleteKeyword"] = 90] = "DeleteKeyword"; - SyntaxKind[SyntaxKind["DoKeyword"] = 91] = "DoKeyword"; - SyntaxKind[SyntaxKind["ElseKeyword"] = 92] = "ElseKeyword"; - SyntaxKind[SyntaxKind["EnumKeyword"] = 93] = "EnumKeyword"; - SyntaxKind[SyntaxKind["ExportKeyword"] = 94] = "ExportKeyword"; - SyntaxKind[SyntaxKind["ExtendsKeyword"] = 95] = "ExtendsKeyword"; - SyntaxKind[SyntaxKind["FalseKeyword"] = 96] = "FalseKeyword"; - SyntaxKind[SyntaxKind["FinallyKeyword"] = 97] = "FinallyKeyword"; - SyntaxKind[SyntaxKind["ForKeyword"] = 98] = "ForKeyword"; - SyntaxKind[SyntaxKind["FunctionKeyword"] = 99] = "FunctionKeyword"; - SyntaxKind[SyntaxKind["IfKeyword"] = 100] = "IfKeyword"; - SyntaxKind[SyntaxKind["ImportKeyword"] = 101] = "ImportKeyword"; - SyntaxKind[SyntaxKind["InKeyword"] = 102] = "InKeyword"; - SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 103] = "InstanceOfKeyword"; - SyntaxKind[SyntaxKind["NewKeyword"] = 104] = "NewKeyword"; - SyntaxKind[SyntaxKind["NullKeyword"] = 105] = "NullKeyword"; - SyntaxKind[SyntaxKind["ReturnKeyword"] = 106] = "ReturnKeyword"; - SyntaxKind[SyntaxKind["SuperKeyword"] = 107] = "SuperKeyword"; - SyntaxKind[SyntaxKind["SwitchKeyword"] = 108] = "SwitchKeyword"; - SyntaxKind[SyntaxKind["ThisKeyword"] = 109] = "ThisKeyword"; - SyntaxKind[SyntaxKind["ThrowKeyword"] = 110] = "ThrowKeyword"; - SyntaxKind[SyntaxKind["TrueKeyword"] = 111] = "TrueKeyword"; - SyntaxKind[SyntaxKind["TryKeyword"] = 112] = "TryKeyword"; - SyntaxKind[SyntaxKind["TypeOfKeyword"] = 113] = "TypeOfKeyword"; - SyntaxKind[SyntaxKind["VarKeyword"] = 114] = "VarKeyword"; - SyntaxKind[SyntaxKind["VoidKeyword"] = 115] = "VoidKeyword"; - SyntaxKind[SyntaxKind["WhileKeyword"] = 116] = "WhileKeyword"; - SyntaxKind[SyntaxKind["WithKeyword"] = 117] = "WithKeyword"; - SyntaxKind[SyntaxKind["ImplementsKeyword"] = 118] = "ImplementsKeyword"; - SyntaxKind[SyntaxKind["InterfaceKeyword"] = 119] = "InterfaceKeyword"; - SyntaxKind[SyntaxKind["LetKeyword"] = 120] = "LetKeyword"; - SyntaxKind[SyntaxKind["PackageKeyword"] = 121] = "PackageKeyword"; - SyntaxKind[SyntaxKind["PrivateKeyword"] = 122] = "PrivateKeyword"; - SyntaxKind[SyntaxKind["ProtectedKeyword"] = 123] = "ProtectedKeyword"; - SyntaxKind[SyntaxKind["PublicKeyword"] = 124] = "PublicKeyword"; - SyntaxKind[SyntaxKind["StaticKeyword"] = 125] = "StaticKeyword"; - SyntaxKind[SyntaxKind["YieldKeyword"] = 126] = "YieldKeyword"; - SyntaxKind[SyntaxKind["AbstractKeyword"] = 127] = "AbstractKeyword"; - SyntaxKind[SyntaxKind["AccessorKeyword"] = 128] = "AccessorKeyword"; - SyntaxKind[SyntaxKind["AsKeyword"] = 129] = "AsKeyword"; - SyntaxKind[SyntaxKind["AssertsKeyword"] = 130] = "AssertsKeyword"; - SyntaxKind[SyntaxKind["AssertKeyword"] = 131] = "AssertKeyword"; - SyntaxKind[SyntaxKind["AnyKeyword"] = 132] = "AnyKeyword"; - SyntaxKind[SyntaxKind["AsyncKeyword"] = 133] = "AsyncKeyword"; - SyntaxKind[SyntaxKind["AwaitKeyword"] = 134] = "AwaitKeyword"; - SyntaxKind[SyntaxKind["BooleanKeyword"] = 135] = "BooleanKeyword"; - SyntaxKind[SyntaxKind["ConstructorKeyword"] = 136] = "ConstructorKeyword"; - SyntaxKind[SyntaxKind["DeclareKeyword"] = 137] = "DeclareKeyword"; - SyntaxKind[SyntaxKind["GetKeyword"] = 138] = "GetKeyword"; - SyntaxKind[SyntaxKind["ImmediateKeyword"] = 139] = "ImmediateKeyword"; - SyntaxKind[SyntaxKind["InferKeyword"] = 140] = "InferKeyword"; - SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 141] = "IntrinsicKeyword"; - SyntaxKind[SyntaxKind["IsKeyword"] = 142] = "IsKeyword"; - SyntaxKind[SyntaxKind["KeyOfKeyword"] = 143] = "KeyOfKeyword"; - SyntaxKind[SyntaxKind["ModuleKeyword"] = 144] = "ModuleKeyword"; - SyntaxKind[SyntaxKind["NamespaceKeyword"] = 145] = "NamespaceKeyword"; - SyntaxKind[SyntaxKind["NeverKeyword"] = 146] = "NeverKeyword"; - SyntaxKind[SyntaxKind["OutKeyword"] = 147] = "OutKeyword"; - SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 148] = "ReadonlyKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 149] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 150] = "NumberKeyword"; - SyntaxKind[SyntaxKind["ObjectKeyword"] = 151] = "ObjectKeyword"; - SyntaxKind[SyntaxKind["SatisfiesKeyword"] = 152] = "SatisfiesKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 153] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 154] = "StringKeyword"; - SyntaxKind[SyntaxKind["SymbolKeyword"] = 155] = "SymbolKeyword"; - SyntaxKind[SyntaxKind["TypeKeyword"] = 156] = "TypeKeyword"; - SyntaxKind[SyntaxKind["UndefinedKeyword"] = 157] = "UndefinedKeyword"; - SyntaxKind[SyntaxKind["UniqueKeyword"] = 158] = "UniqueKeyword"; - SyntaxKind[SyntaxKind["UnknownKeyword"] = 159] = "UnknownKeyword"; - SyntaxKind[SyntaxKind["UsingKeyword"] = 160] = "UsingKeyword"; - SyntaxKind[SyntaxKind["FromKeyword"] = 161] = "FromKeyword"; - SyntaxKind[SyntaxKind["GlobalKeyword"] = 162] = "GlobalKeyword"; - SyntaxKind[SyntaxKind["BigIntKeyword"] = 163] = "BigIntKeyword"; - SyntaxKind[SyntaxKind["OverrideKeyword"] = 164] = "OverrideKeyword"; - SyntaxKind[SyntaxKind["OfKeyword"] = 165] = "OfKeyword"; - SyntaxKind[SyntaxKind["DeferKeyword"] = 166] = "DeferKeyword"; - SyntaxKind[SyntaxKind["SourceKeyword"] = 167] = "SourceKeyword"; - SyntaxKind[SyntaxKind["QualifiedName"] = 168] = "QualifiedName"; - SyntaxKind[SyntaxKind["ComputedPropertyName"] = 169] = "ComputedPropertyName"; - SyntaxKind[SyntaxKind["TypeParameter"] = 170] = "TypeParameter"; - SyntaxKind[SyntaxKind["Parameter"] = 171] = "Parameter"; - SyntaxKind[SyntaxKind["Decorator"] = 172] = "Decorator"; - SyntaxKind[SyntaxKind["PropertySignature"] = 173] = "PropertySignature"; - SyntaxKind[SyntaxKind["PropertyDeclaration"] = 174] = "PropertyDeclaration"; - SyntaxKind[SyntaxKind["MethodSignature"] = 175] = "MethodSignature"; - SyntaxKind[SyntaxKind["MethodDeclaration"] = 176] = "MethodDeclaration"; - SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 177] = "ClassStaticBlockDeclaration"; - SyntaxKind[SyntaxKind["Constructor"] = 178] = "Constructor"; - SyntaxKind[SyntaxKind["GetAccessor"] = 179] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 180] = "SetAccessor"; - SyntaxKind[SyntaxKind["CallSignature"] = 181] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 182] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 183] = "IndexSignature"; - SyntaxKind[SyntaxKind["TypePredicate"] = 184] = "TypePredicate"; - SyntaxKind[SyntaxKind["TypeReference"] = 185] = "TypeReference"; - SyntaxKind[SyntaxKind["FunctionType"] = 186] = "FunctionType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 187] = "ConstructorType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 188] = "TypeQuery"; - SyntaxKind[SyntaxKind["TypeLiteral"] = 189] = "TypeLiteral"; - SyntaxKind[SyntaxKind["ArrayType"] = 190] = "ArrayType"; - SyntaxKind[SyntaxKind["TupleType"] = 191] = "TupleType"; - SyntaxKind[SyntaxKind["OptionalType"] = 192] = "OptionalType"; - SyntaxKind[SyntaxKind["RestType"] = 193] = "RestType"; - SyntaxKind[SyntaxKind["UnionType"] = 194] = "UnionType"; - SyntaxKind[SyntaxKind["IntersectionType"] = 195] = "IntersectionType"; - SyntaxKind[SyntaxKind["ConditionalType"] = 196] = "ConditionalType"; - SyntaxKind[SyntaxKind["InferType"] = 197] = "InferType"; - SyntaxKind[SyntaxKind["ParenthesizedType"] = 198] = "ParenthesizedType"; - SyntaxKind[SyntaxKind["ThisType"] = 199] = "ThisType"; - SyntaxKind[SyntaxKind["TypeOperator"] = 200] = "TypeOperator"; - SyntaxKind[SyntaxKind["IndexedAccessType"] = 201] = "IndexedAccessType"; - SyntaxKind[SyntaxKind["MappedType"] = 202] = "MappedType"; - SyntaxKind[SyntaxKind["LiteralType"] = 203] = "LiteralType"; - SyntaxKind[SyntaxKind["NamedTupleMember"] = 204] = "NamedTupleMember"; - SyntaxKind[SyntaxKind["TemplateLiteralType"] = 205] = "TemplateLiteralType"; - SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 206] = "TemplateLiteralTypeSpan"; - SyntaxKind[SyntaxKind["ImportType"] = 207] = "ImportType"; - SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 208] = "ObjectBindingPattern"; - SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 209] = "ArrayBindingPattern"; - SyntaxKind[SyntaxKind["BindingElement"] = 210] = "BindingElement"; - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 211] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 212] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 213] = "PropertyAccessExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 214] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["CallExpression"] = 215] = "CallExpression"; - SyntaxKind[SyntaxKind["NewExpression"] = 216] = "NewExpression"; - SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 217] = "TaggedTemplateExpression"; - SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 218] = "TypeAssertionExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 219] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 220] = "FunctionExpression"; - SyntaxKind[SyntaxKind["ArrowFunction"] = 221] = "ArrowFunction"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 222] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 223] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 224] = "VoidExpression"; - SyntaxKind[SyntaxKind["AwaitExpression"] = 225] = "AwaitExpression"; - SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 226] = "PrefixUnaryExpression"; - SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 227] = "PostfixUnaryExpression"; - SyntaxKind[SyntaxKind["BinaryExpression"] = 228] = "BinaryExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 229] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["TemplateExpression"] = 230] = "TemplateExpression"; - SyntaxKind[SyntaxKind["YieldExpression"] = 231] = "YieldExpression"; - SyntaxKind[SyntaxKind["SpreadElement"] = 232] = "SpreadElement"; - SyntaxKind[SyntaxKind["ClassExpression"] = 233] = "ClassExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 234] = "OmittedExpression"; - SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 235] = "ExpressionWithTypeArguments"; - SyntaxKind[SyntaxKind["AsExpression"] = 236] = "AsExpression"; - SyntaxKind[SyntaxKind["NonNullExpression"] = 237] = "NonNullExpression"; - SyntaxKind[SyntaxKind["MetaProperty"] = 238] = "MetaProperty"; - SyntaxKind[SyntaxKind["SyntheticExpression"] = 239] = "SyntheticExpression"; - SyntaxKind[SyntaxKind["SatisfiesExpression"] = 240] = "SatisfiesExpression"; - SyntaxKind[SyntaxKind["TemplateSpan"] = 241] = "TemplateSpan"; - SyntaxKind[SyntaxKind["SemicolonClassElement"] = 242] = "SemicolonClassElement"; - SyntaxKind[SyntaxKind["Block"] = 243] = "Block"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 244] = "EmptyStatement"; - SyntaxKind[SyntaxKind["VariableStatement"] = 245] = "VariableStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 246] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["IfStatement"] = 247] = "IfStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 248] = "DoStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 249] = "WhileStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 250] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 251] = "ForInStatement"; - SyntaxKind[SyntaxKind["ForOfStatement"] = 252] = "ForOfStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 253] = "ContinueStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 254] = "BreakStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 255] = "ReturnStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 256] = "WithStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 257] = "SwitchStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 258] = "LabeledStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 259] = "ThrowStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 260] = "TryStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 261] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["VariableDeclaration"] = 262] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarationList"] = 263] = "VariableDeclarationList"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 264] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 265] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 266] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 267] = "TypeAliasDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 268] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 269] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ModuleBlock"] = 270] = "ModuleBlock"; - SyntaxKind[SyntaxKind["CaseBlock"] = 271] = "CaseBlock"; - SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 272] = "NamespaceExportDeclaration"; - SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 273] = "ImportEqualsDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 274] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ImportClause"] = 275] = "ImportClause"; - SyntaxKind[SyntaxKind["NamespaceImport"] = 276] = "NamespaceImport"; - SyntaxKind[SyntaxKind["NamedImports"] = 277] = "NamedImports"; - SyntaxKind[SyntaxKind["ImportSpecifier"] = 278] = "ImportSpecifier"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 279] = "ExportAssignment"; - SyntaxKind[SyntaxKind["ExportDeclaration"] = 280] = "ExportDeclaration"; - SyntaxKind[SyntaxKind["NamedExports"] = 281] = "NamedExports"; - SyntaxKind[SyntaxKind["NamespaceExport"] = 282] = "NamespaceExport"; - SyntaxKind[SyntaxKind["ExportSpecifier"] = 283] = "ExportSpecifier"; - SyntaxKind[SyntaxKind["MissingDeclaration"] = 284] = "MissingDeclaration"; - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 285] = "ExternalModuleReference"; - SyntaxKind[SyntaxKind["JsxElement"] = 286] = "JsxElement"; - SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 287] = "JsxSelfClosingElement"; - SyntaxKind[SyntaxKind["JsxOpeningElement"] = 288] = "JsxOpeningElement"; - SyntaxKind[SyntaxKind["JsxClosingElement"] = 289] = "JsxClosingElement"; - SyntaxKind[SyntaxKind["JsxFragment"] = 290] = "JsxFragment"; - SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 291] = "JsxOpeningFragment"; - SyntaxKind[SyntaxKind["JsxClosingFragment"] = 292] = "JsxClosingFragment"; - SyntaxKind[SyntaxKind["JsxAttribute"] = 293] = "JsxAttribute"; - SyntaxKind[SyntaxKind["JsxAttributes"] = 294] = "JsxAttributes"; - SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 295] = "JsxSpreadAttribute"; - SyntaxKind[SyntaxKind["JsxExpression"] = 296] = "JsxExpression"; - SyntaxKind[SyntaxKind["JsxNamespacedName"] = 297] = "JsxNamespacedName"; - SyntaxKind[SyntaxKind["CaseClause"] = 298] = "CaseClause"; - SyntaxKind[SyntaxKind["DefaultClause"] = 299] = "DefaultClause"; - SyntaxKind[SyntaxKind["HeritageClause"] = 300] = "HeritageClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 301] = "CatchClause"; - SyntaxKind[SyntaxKind["ImportAttributes"] = 302] = "ImportAttributes"; - SyntaxKind[SyntaxKind["ImportAttribute"] = 303] = "ImportAttribute"; - SyntaxKind[SyntaxKind["PropertyAssignment"] = 304] = "PropertyAssignment"; - SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 305] = "ShorthandPropertyAssignment"; - SyntaxKind[SyntaxKind["SpreadAssignment"] = 306] = "SpreadAssignment"; - SyntaxKind[SyntaxKind["EnumMember"] = 307] = "EnumMember"; - SyntaxKind[SyntaxKind["SourceFile"] = 308] = "SourceFile"; - SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 309] = "JSDocTypeExpression"; - SyntaxKind[SyntaxKind["JSDocNameReference"] = 310] = "JSDocNameReference"; - SyntaxKind[SyntaxKind["JSDocAllType"] = 311] = "JSDocAllType"; - SyntaxKind[SyntaxKind["JSDocNullableType"] = 312] = "JSDocNullableType"; - SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 313] = "JSDocNonNullableType"; - SyntaxKind[SyntaxKind["JSDocOptionalType"] = 314] = "JSDocOptionalType"; - SyntaxKind[SyntaxKind["JSDocVariadicType"] = 315] = "JSDocVariadicType"; - SyntaxKind[SyntaxKind["JSDoc"] = 316] = "JSDoc"; - SyntaxKind[SyntaxKind["JSDocText"] = 317] = "JSDocText"; - SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 318] = "JSDocTypeLiteral"; - SyntaxKind[SyntaxKind["JSDocSignature"] = 319] = "JSDocSignature"; - SyntaxKind[SyntaxKind["JSDocLink"] = 320] = "JSDocLink"; - SyntaxKind[SyntaxKind["JSDocLinkCode"] = 321] = "JSDocLinkCode"; - SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 322] = "JSDocLinkPlain"; - SyntaxKind[SyntaxKind["JSDocUnknownTag"] = 323] = "JSDocUnknownTag"; - SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 324] = "JSDocAugmentsTag"; - SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 325] = "JSDocImplementsTag"; - SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag"; - SyntaxKind[SyntaxKind["JSDocPublicTag"] = 327] = "JSDocPublicTag"; - SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 328] = "JSDocPrivateTag"; - SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 329] = "JSDocProtectedTag"; - SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 330] = "JSDocReadonlyTag"; - SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 331] = "JSDocOverrideTag"; - SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 332] = "JSDocCallbackTag"; - SyntaxKind[SyntaxKind["JSDocOverloadTag"] = 333] = "JSDocOverloadTag"; - SyntaxKind[SyntaxKind["JSDocParameterTag"] = 334] = "JSDocParameterTag"; - SyntaxKind[SyntaxKind["JSDocReturnTag"] = 335] = "JSDocReturnTag"; - SyntaxKind[SyntaxKind["JSDocThisTag"] = 336] = "JSDocThisTag"; - SyntaxKind[SyntaxKind["JSDocTypeTag"] = 337] = "JSDocTypeTag"; - SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 338] = "JSDocTemplateTag"; - SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 339] = "JSDocTypedefTag"; - SyntaxKind[SyntaxKind["JSDocSeeTag"] = 340] = "JSDocSeeTag"; - SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 341] = "JSDocPropertyTag"; - SyntaxKind[SyntaxKind["JSDocThrowsTag"] = 342] = "JSDocThrowsTag"; - SyntaxKind[SyntaxKind["JSDocSatisfiesTag"] = 343] = "JSDocSatisfiesTag"; - SyntaxKind[SyntaxKind["JSDocImportTag"] = 344] = "JSDocImportTag"; - SyntaxKind[SyntaxKind["SyntaxList"] = 345] = "SyntaxList"; - SyntaxKind[SyntaxKind["JSTypeAliasDeclaration"] = 346] = "JSTypeAliasDeclaration"; - SyntaxKind[SyntaxKind["JSImportDeclaration"] = 347] = "JSImportDeclaration"; - SyntaxKind[SyntaxKind["NotEmittedStatement"] = 348] = "NotEmittedStatement"; - SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 349] = "PartiallyEmittedExpression"; - SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 350] = "SyntheticReferenceExpression"; - SyntaxKind[SyntaxKind["NotEmittedTypeElement"] = 351] = "NotEmittedTypeElement"; - SyntaxKind[SyntaxKind["Count"] = 352] = "Count"; - SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment"; - SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment"; - SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment"; - SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment"; - SyntaxKind[SyntaxKind["FirstReservedWord"] = 82] = "FirstReservedWord"; - SyntaxKind[SyntaxKind["LastReservedWord"] = 117] = "LastReservedWord"; - SyntaxKind[SyntaxKind["FirstKeyword"] = 82] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = 167] = "LastKeyword"; - SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 118] = "FirstFutureReservedWord"; - SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 126] = "LastFutureReservedWord"; - SyntaxKind[SyntaxKind["FirstTypeNode"] = 184] = "FirstTypeNode"; - SyntaxKind[SyntaxKind["LastTypeNode"] = 207] = "LastTypeNode"; - SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation"; - SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation"; - SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = 167] = "LastToken"; - SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken"; - SyntaxKind[SyntaxKind["LastLiteralToken"] = 14] = "LastLiteralToken"; - SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken"; - SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken"; - SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator"; - SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator"; - SyntaxKind[SyntaxKind["FirstStatement"] = 245] = "FirstStatement"; - SyntaxKind[SyntaxKind["LastStatement"] = 261] = "LastStatement"; - SyntaxKind[SyntaxKind["FirstNode"] = 168] = "FirstNode"; - SyntaxKind[SyntaxKind["FirstJSDocNode"] = 309] = "FirstJSDocNode"; - SyntaxKind[SyntaxKind["LastJSDocNode"] = 344] = "LastJSDocNode"; - SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 323] = "FirstJSDocTagNode"; - SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 344] = "LastJSDocTagNode"; - SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 127] = "FirstContextualKeyword"; - SyntaxKind[SyntaxKind["LastContextualKeyword"] = 167] = "LastContextualKeyword"; - SyntaxKind[SyntaxKind["LastUnaryOperator"] = 54] = "LastUnaryOperator"; - SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken"; - SyntaxKind[SyntaxKind["LastTriviaToken"] = 6] = "LastTriviaToken"; -})(SyntaxKind || (SyntaxKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tools/scripts/tsc/ast.json. DO NOT EDIT. +export var SyntaxKind: any; +(function (SyntaxKind) { + SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; + SyntaxKind[SyntaxKind["EndOfFile"] = 1] = "EndOfFile"; + SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 2] = "SingleLineCommentTrivia"; + SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 3] = "MultiLineCommentTrivia"; + SyntaxKind[SyntaxKind["NewLineTrivia"] = 4] = "NewLineTrivia"; + SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 5] = "WhitespaceTrivia"; + SyntaxKind[SyntaxKind["ConflictMarkerTrivia"] = 6] = "ConflictMarkerTrivia"; + SyntaxKind[SyntaxKind["NonTextFileMarkerTrivia"] = 7] = "NonTextFileMarkerTrivia"; + SyntaxKind[SyntaxKind["NumericLiteral"] = 8] = "NumericLiteral"; + SyntaxKind[SyntaxKind["BigIntLiteral"] = 9] = "BigIntLiteral"; + SyntaxKind[SyntaxKind["StringLiteral"] = 10] = "StringLiteral"; + SyntaxKind[SyntaxKind["JsxText"] = 11] = "JsxText"; + SyntaxKind[SyntaxKind["JsxTextAllWhiteSpaces"] = 12] = "JsxTextAllWhiteSpaces"; + SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 13] = "RegularExpressionLiteral"; + SyntaxKind[SyntaxKind["NoSubstitutionTemplateLiteral"] = 14] = "NoSubstitutionTemplateLiteral"; + SyntaxKind[SyntaxKind["TemplateHead"] = 15] = "TemplateHead"; + SyntaxKind[SyntaxKind["TemplateMiddle"] = 16] = "TemplateMiddle"; + SyntaxKind[SyntaxKind["TemplateTail"] = 17] = "TemplateTail"; + SyntaxKind[SyntaxKind["OpenBraceToken"] = 18] = "OpenBraceToken"; + SyntaxKind[SyntaxKind["CloseBraceToken"] = 19] = "CloseBraceToken"; + SyntaxKind[SyntaxKind["OpenParenToken"] = 20] = "OpenParenToken"; + SyntaxKind[SyntaxKind["CloseParenToken"] = 21] = "CloseParenToken"; + SyntaxKind[SyntaxKind["OpenBracketToken"] = 22] = "OpenBracketToken"; + SyntaxKind[SyntaxKind["CloseBracketToken"] = 23] = "CloseBracketToken"; + SyntaxKind[SyntaxKind["DotToken"] = 24] = "DotToken"; + SyntaxKind[SyntaxKind["DotDotDotToken"] = 25] = "DotDotDotToken"; + SyntaxKind[SyntaxKind["SemicolonToken"] = 26] = "SemicolonToken"; + SyntaxKind[SyntaxKind["CommaToken"] = 27] = "CommaToken"; + SyntaxKind[SyntaxKind["QuestionDotToken"] = 28] = "QuestionDotToken"; + SyntaxKind[SyntaxKind["LessThanToken"] = 29] = "LessThanToken"; + SyntaxKind[SyntaxKind["LessThanSlashToken"] = 30] = "LessThanSlashToken"; + SyntaxKind[SyntaxKind["GreaterThanToken"] = 31] = "GreaterThanToken"; + SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 32] = "LessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 33] = "GreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 34] = "EqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 35] = "ExclamationEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 36] = "EqualsEqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 37] = "ExclamationEqualsEqualsToken"; + SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 38] = "EqualsGreaterThanToken"; + SyntaxKind[SyntaxKind["PlusToken"] = 39] = "PlusToken"; + SyntaxKind[SyntaxKind["MinusToken"] = 40] = "MinusToken"; + SyntaxKind[SyntaxKind["AsteriskToken"] = 41] = "AsteriskToken"; + SyntaxKind[SyntaxKind["AsteriskAsteriskToken"] = 42] = "AsteriskAsteriskToken"; + SyntaxKind[SyntaxKind["SlashToken"] = 43] = "SlashToken"; + SyntaxKind[SyntaxKind["PercentToken"] = 44] = "PercentToken"; + SyntaxKind[SyntaxKind["PlusPlusToken"] = 45] = "PlusPlusToken"; + SyntaxKind[SyntaxKind["MinusMinusToken"] = 46] = "MinusMinusToken"; + SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 47] = "LessThanLessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 48] = "GreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 49] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["AmpersandToken"] = 50] = "AmpersandToken"; + SyntaxKind[SyntaxKind["BarToken"] = 51] = "BarToken"; + SyntaxKind[SyntaxKind["CaretToken"] = 52] = "CaretToken"; + SyntaxKind[SyntaxKind["ExclamationToken"] = 53] = "ExclamationToken"; + SyntaxKind[SyntaxKind["TildeToken"] = 54] = "TildeToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 55] = "AmpersandAmpersandToken"; + SyntaxKind[SyntaxKind["BarBarToken"] = 56] = "BarBarToken"; + SyntaxKind[SyntaxKind["QuestionToken"] = 57] = "QuestionToken"; + SyntaxKind[SyntaxKind["ColonToken"] = 58] = "ColonToken"; + SyntaxKind[SyntaxKind["AtToken"] = 59] = "AtToken"; + SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken"; + SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken"; + SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken"; + SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken"; + SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken"; + SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken"; + SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken"; + SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken"; + SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken"; + SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken"; + SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken"; + SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken"; + SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken"; + SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier"; + SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier"; + SyntaxKind[SyntaxKind["JSDocCommentTextToken"] = 81] = "JSDocCommentTextToken"; + SyntaxKind[SyntaxKind["BreakKeyword"] = 82] = "BreakKeyword"; + SyntaxKind[SyntaxKind["CaseKeyword"] = 83] = "CaseKeyword"; + SyntaxKind[SyntaxKind["CatchKeyword"] = 84] = "CatchKeyword"; + SyntaxKind[SyntaxKind["ClassKeyword"] = 85] = "ClassKeyword"; + SyntaxKind[SyntaxKind["ConstKeyword"] = 86] = "ConstKeyword"; + SyntaxKind[SyntaxKind["ContinueKeyword"] = 87] = "ContinueKeyword"; + SyntaxKind[SyntaxKind["DebuggerKeyword"] = 88] = "DebuggerKeyword"; + SyntaxKind[SyntaxKind["DefaultKeyword"] = 89] = "DefaultKeyword"; + SyntaxKind[SyntaxKind["DeleteKeyword"] = 90] = "DeleteKeyword"; + SyntaxKind[SyntaxKind["DoKeyword"] = 91] = "DoKeyword"; + SyntaxKind[SyntaxKind["ElseKeyword"] = 92] = "ElseKeyword"; + SyntaxKind[SyntaxKind["EnumKeyword"] = 93] = "EnumKeyword"; + SyntaxKind[SyntaxKind["ExportKeyword"] = 94] = "ExportKeyword"; + SyntaxKind[SyntaxKind["ExtendsKeyword"] = 95] = "ExtendsKeyword"; + SyntaxKind[SyntaxKind["FalseKeyword"] = 96] = "FalseKeyword"; + SyntaxKind[SyntaxKind["FinallyKeyword"] = 97] = "FinallyKeyword"; + SyntaxKind[SyntaxKind["ForKeyword"] = 98] = "ForKeyword"; + SyntaxKind[SyntaxKind["FunctionKeyword"] = 99] = "FunctionKeyword"; + SyntaxKind[SyntaxKind["IfKeyword"] = 100] = "IfKeyword"; + SyntaxKind[SyntaxKind["ImportKeyword"] = 101] = "ImportKeyword"; + SyntaxKind[SyntaxKind["InKeyword"] = 102] = "InKeyword"; + SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 103] = "InstanceOfKeyword"; + SyntaxKind[SyntaxKind["NewKeyword"] = 104] = "NewKeyword"; + SyntaxKind[SyntaxKind["NullKeyword"] = 105] = "NullKeyword"; + SyntaxKind[SyntaxKind["ReturnKeyword"] = 106] = "ReturnKeyword"; + SyntaxKind[SyntaxKind["SuperKeyword"] = 107] = "SuperKeyword"; + SyntaxKind[SyntaxKind["SwitchKeyword"] = 108] = "SwitchKeyword"; + SyntaxKind[SyntaxKind["ThisKeyword"] = 109] = "ThisKeyword"; + SyntaxKind[SyntaxKind["ThrowKeyword"] = 110] = "ThrowKeyword"; + SyntaxKind[SyntaxKind["TrueKeyword"] = 111] = "TrueKeyword"; + SyntaxKind[SyntaxKind["TryKeyword"] = 112] = "TryKeyword"; + SyntaxKind[SyntaxKind["TypeOfKeyword"] = 113] = "TypeOfKeyword"; + SyntaxKind[SyntaxKind["VarKeyword"] = 114] = "VarKeyword"; + SyntaxKind[SyntaxKind["VoidKeyword"] = 115] = "VoidKeyword"; + SyntaxKind[SyntaxKind["WhileKeyword"] = 116] = "WhileKeyword"; + SyntaxKind[SyntaxKind["WithKeyword"] = 117] = "WithKeyword"; + SyntaxKind[SyntaxKind["ImplementsKeyword"] = 118] = "ImplementsKeyword"; + SyntaxKind[SyntaxKind["InterfaceKeyword"] = 119] = "InterfaceKeyword"; + SyntaxKind[SyntaxKind["LetKeyword"] = 120] = "LetKeyword"; + SyntaxKind[SyntaxKind["PackageKeyword"] = 121] = "PackageKeyword"; + SyntaxKind[SyntaxKind["PrivateKeyword"] = 122] = "PrivateKeyword"; + SyntaxKind[SyntaxKind["ProtectedKeyword"] = 123] = "ProtectedKeyword"; + SyntaxKind[SyntaxKind["PublicKeyword"] = 124] = "PublicKeyword"; + SyntaxKind[SyntaxKind["StaticKeyword"] = 125] = "StaticKeyword"; + SyntaxKind[SyntaxKind["YieldKeyword"] = 126] = "YieldKeyword"; + SyntaxKind[SyntaxKind["AbstractKeyword"] = 127] = "AbstractKeyword"; + SyntaxKind[SyntaxKind["AccessorKeyword"] = 128] = "AccessorKeyword"; + SyntaxKind[SyntaxKind["AsKeyword"] = 129] = "AsKeyword"; + SyntaxKind[SyntaxKind["AssertsKeyword"] = 130] = "AssertsKeyword"; + SyntaxKind[SyntaxKind["AssertKeyword"] = 131] = "AssertKeyword"; + SyntaxKind[SyntaxKind["AnyKeyword"] = 132] = "AnyKeyword"; + SyntaxKind[SyntaxKind["AsyncKeyword"] = 133] = "AsyncKeyword"; + SyntaxKind[SyntaxKind["AwaitKeyword"] = 134] = "AwaitKeyword"; + SyntaxKind[SyntaxKind["BooleanKeyword"] = 135] = "BooleanKeyword"; + SyntaxKind[SyntaxKind["ConstructorKeyword"] = 136] = "ConstructorKeyword"; + SyntaxKind[SyntaxKind["DeclareKeyword"] = 137] = "DeclareKeyword"; + SyntaxKind[SyntaxKind["GetKeyword"] = 138] = "GetKeyword"; + SyntaxKind[SyntaxKind["ImmediateKeyword"] = 139] = "ImmediateKeyword"; + SyntaxKind[SyntaxKind["InferKeyword"] = 140] = "InferKeyword"; + SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 141] = "IntrinsicKeyword"; + SyntaxKind[SyntaxKind["IsKeyword"] = 142] = "IsKeyword"; + SyntaxKind[SyntaxKind["KeyOfKeyword"] = 143] = "KeyOfKeyword"; + SyntaxKind[SyntaxKind["ModuleKeyword"] = 144] = "ModuleKeyword"; + SyntaxKind[SyntaxKind["NamespaceKeyword"] = 145] = "NamespaceKeyword"; + SyntaxKind[SyntaxKind["NeverKeyword"] = 146] = "NeverKeyword"; + SyntaxKind[SyntaxKind["OutKeyword"] = 147] = "OutKeyword"; + SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 148] = "ReadonlyKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 149] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 150] = "NumberKeyword"; + SyntaxKind[SyntaxKind["ObjectKeyword"] = 151] = "ObjectKeyword"; + SyntaxKind[SyntaxKind["SatisfiesKeyword"] = 152] = "SatisfiesKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 153] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 154] = "StringKeyword"; + SyntaxKind[SyntaxKind["SymbolKeyword"] = 155] = "SymbolKeyword"; + SyntaxKind[SyntaxKind["TypeKeyword"] = 156] = "TypeKeyword"; + SyntaxKind[SyntaxKind["UndefinedKeyword"] = 157] = "UndefinedKeyword"; + SyntaxKind[SyntaxKind["UniqueKeyword"] = 158] = "UniqueKeyword"; + SyntaxKind[SyntaxKind["UnknownKeyword"] = 159] = "UnknownKeyword"; + SyntaxKind[SyntaxKind["UsingKeyword"] = 160] = "UsingKeyword"; + SyntaxKind[SyntaxKind["FromKeyword"] = 161] = "FromKeyword"; + SyntaxKind[SyntaxKind["GlobalKeyword"] = 162] = "GlobalKeyword"; + SyntaxKind[SyntaxKind["BigIntKeyword"] = 163] = "BigIntKeyword"; + SyntaxKind[SyntaxKind["OverrideKeyword"] = 164] = "OverrideKeyword"; + SyntaxKind[SyntaxKind["OfKeyword"] = 165] = "OfKeyword"; + SyntaxKind[SyntaxKind["DeferKeyword"] = 166] = "DeferKeyword"; + SyntaxKind[SyntaxKind["SourceKeyword"] = 167] = "SourceKeyword"; + SyntaxKind[SyntaxKind["QualifiedName"] = 168] = "QualifiedName"; + SyntaxKind[SyntaxKind["ComputedPropertyName"] = 169] = "ComputedPropertyName"; + SyntaxKind[SyntaxKind["TypeParameter"] = 170] = "TypeParameter"; + SyntaxKind[SyntaxKind["Parameter"] = 171] = "Parameter"; + SyntaxKind[SyntaxKind["Decorator"] = 172] = "Decorator"; + SyntaxKind[SyntaxKind["PropertySignature"] = 173] = "PropertySignature"; + SyntaxKind[SyntaxKind["PropertyDeclaration"] = 174] = "PropertyDeclaration"; + SyntaxKind[SyntaxKind["MethodSignature"] = 175] = "MethodSignature"; + SyntaxKind[SyntaxKind["MethodDeclaration"] = 176] = "MethodDeclaration"; + SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 177] = "ClassStaticBlockDeclaration"; + SyntaxKind[SyntaxKind["Constructor"] = 178] = "Constructor"; + SyntaxKind[SyntaxKind["GetAccessor"] = 179] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 180] = "SetAccessor"; + SyntaxKind[SyntaxKind["CallSignature"] = 181] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 182] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 183] = "IndexSignature"; + SyntaxKind[SyntaxKind["TypePredicate"] = 184] = "TypePredicate"; + SyntaxKind[SyntaxKind["TypeReference"] = 185] = "TypeReference"; + SyntaxKind[SyntaxKind["FunctionType"] = 186] = "FunctionType"; + SyntaxKind[SyntaxKind["ConstructorType"] = 187] = "ConstructorType"; + SyntaxKind[SyntaxKind["TypeQuery"] = 188] = "TypeQuery"; + SyntaxKind[SyntaxKind["TypeLiteral"] = 189] = "TypeLiteral"; + SyntaxKind[SyntaxKind["ArrayType"] = 190] = "ArrayType"; + SyntaxKind[SyntaxKind["TupleType"] = 191] = "TupleType"; + SyntaxKind[SyntaxKind["OptionalType"] = 192] = "OptionalType"; + SyntaxKind[SyntaxKind["RestType"] = 193] = "RestType"; + SyntaxKind[SyntaxKind["UnionType"] = 194] = "UnionType"; + SyntaxKind[SyntaxKind["IntersectionType"] = 195] = "IntersectionType"; + SyntaxKind[SyntaxKind["ConditionalType"] = 196] = "ConditionalType"; + SyntaxKind[SyntaxKind["InferType"] = 197] = "InferType"; + SyntaxKind[SyntaxKind["ParenthesizedType"] = 198] = "ParenthesizedType"; + SyntaxKind[SyntaxKind["ThisType"] = 199] = "ThisType"; + SyntaxKind[SyntaxKind["TypeOperator"] = 200] = "TypeOperator"; + SyntaxKind[SyntaxKind["IndexedAccessType"] = 201] = "IndexedAccessType"; + SyntaxKind[SyntaxKind["MappedType"] = 202] = "MappedType"; + SyntaxKind[SyntaxKind["LiteralType"] = 203] = "LiteralType"; + SyntaxKind[SyntaxKind["NamedTupleMember"] = 204] = "NamedTupleMember"; + SyntaxKind[SyntaxKind["TemplateLiteralType"] = 205] = "TemplateLiteralType"; + SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 206] = "TemplateLiteralTypeSpan"; + SyntaxKind[SyntaxKind["ImportType"] = 207] = "ImportType"; + SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 208] = "ObjectBindingPattern"; + SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 209] = "ArrayBindingPattern"; + SyntaxKind[SyntaxKind["BindingElement"] = 210] = "BindingElement"; + SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 211] = "ArrayLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 212] = "ObjectLiteralExpression"; + SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 213] = "PropertyAccessExpression"; + SyntaxKind[SyntaxKind["ElementAccessExpression"] = 214] = "ElementAccessExpression"; + SyntaxKind[SyntaxKind["CallExpression"] = 215] = "CallExpression"; + SyntaxKind[SyntaxKind["NewExpression"] = 216] = "NewExpression"; + SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 217] = "TaggedTemplateExpression"; + SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 218] = "TypeAssertionExpression"; + SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 219] = "ParenthesizedExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 220] = "FunctionExpression"; + SyntaxKind[SyntaxKind["ArrowFunction"] = 221] = "ArrowFunction"; + SyntaxKind[SyntaxKind["DeleteExpression"] = 222] = "DeleteExpression"; + SyntaxKind[SyntaxKind["TypeOfExpression"] = 223] = "TypeOfExpression"; + SyntaxKind[SyntaxKind["VoidExpression"] = 224] = "VoidExpression"; + SyntaxKind[SyntaxKind["AwaitExpression"] = 225] = "AwaitExpression"; + SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 226] = "PrefixUnaryExpression"; + SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 227] = "PostfixUnaryExpression"; + SyntaxKind[SyntaxKind["BinaryExpression"] = 228] = "BinaryExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 229] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["TemplateExpression"] = 230] = "TemplateExpression"; + SyntaxKind[SyntaxKind["YieldExpression"] = 231] = "YieldExpression"; + SyntaxKind[SyntaxKind["SpreadElement"] = 232] = "SpreadElement"; + SyntaxKind[SyntaxKind["ClassExpression"] = 233] = "ClassExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 234] = "OmittedExpression"; + SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 235] = "ExpressionWithTypeArguments"; + SyntaxKind[SyntaxKind["AsExpression"] = 236] = "AsExpression"; + SyntaxKind[SyntaxKind["NonNullExpression"] = 237] = "NonNullExpression"; + SyntaxKind[SyntaxKind["MetaProperty"] = 238] = "MetaProperty"; + SyntaxKind[SyntaxKind["SyntheticExpression"] = 239] = "SyntheticExpression"; + SyntaxKind[SyntaxKind["SatisfiesExpression"] = 240] = "SatisfiesExpression"; + SyntaxKind[SyntaxKind["TemplateSpan"] = 241] = "TemplateSpan"; + SyntaxKind[SyntaxKind["SemicolonClassElement"] = 242] = "SemicolonClassElement"; + SyntaxKind[SyntaxKind["Block"] = 243] = "Block"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 244] = "EmptyStatement"; + SyntaxKind[SyntaxKind["VariableStatement"] = 245] = "VariableStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 246] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["IfStatement"] = 247] = "IfStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 248] = "DoStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 249] = "WhileStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 250] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 251] = "ForInStatement"; + SyntaxKind[SyntaxKind["ForOfStatement"] = 252] = "ForOfStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 253] = "ContinueStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 254] = "BreakStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 255] = "ReturnStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 256] = "WithStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 257] = "SwitchStatement"; + SyntaxKind[SyntaxKind["LabeledStatement"] = 258] = "LabeledStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 259] = "ThrowStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 260] = "TryStatement"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 261] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 262] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["VariableDeclarationList"] = 263] = "VariableDeclarationList"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 264] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 265] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 266] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 267] = "TypeAliasDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 268] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 269] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ModuleBlock"] = 270] = "ModuleBlock"; + SyntaxKind[SyntaxKind["CaseBlock"] = 271] = "CaseBlock"; + SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 272] = "NamespaceExportDeclaration"; + SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 273] = "ImportEqualsDeclaration"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 274] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ImportClause"] = 275] = "ImportClause"; + SyntaxKind[SyntaxKind["NamespaceImport"] = 276] = "NamespaceImport"; + SyntaxKind[SyntaxKind["NamedImports"] = 277] = "NamedImports"; + SyntaxKind[SyntaxKind["ImportSpecifier"] = 278] = "ImportSpecifier"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 279] = "ExportAssignment"; + SyntaxKind[SyntaxKind["ExportDeclaration"] = 280] = "ExportDeclaration"; + SyntaxKind[SyntaxKind["NamedExports"] = 281] = "NamedExports"; + SyntaxKind[SyntaxKind["NamespaceExport"] = 282] = "NamespaceExport"; + SyntaxKind[SyntaxKind["ExportSpecifier"] = 283] = "ExportSpecifier"; + SyntaxKind[SyntaxKind["MissingDeclaration"] = 284] = "MissingDeclaration"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 285] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["JsxElement"] = 286] = "JsxElement"; + SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 287] = "JsxSelfClosingElement"; + SyntaxKind[SyntaxKind["JsxOpeningElement"] = 288] = "JsxOpeningElement"; + SyntaxKind[SyntaxKind["JsxClosingElement"] = 289] = "JsxClosingElement"; + SyntaxKind[SyntaxKind["JsxFragment"] = 290] = "JsxFragment"; + SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 291] = "JsxOpeningFragment"; + SyntaxKind[SyntaxKind["JsxClosingFragment"] = 292] = "JsxClosingFragment"; + SyntaxKind[SyntaxKind["JsxAttribute"] = 293] = "JsxAttribute"; + SyntaxKind[SyntaxKind["JsxAttributes"] = 294] = "JsxAttributes"; + SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 295] = "JsxSpreadAttribute"; + SyntaxKind[SyntaxKind["JsxExpression"] = 296] = "JsxExpression"; + SyntaxKind[SyntaxKind["JsxNamespacedName"] = 297] = "JsxNamespacedName"; + SyntaxKind[SyntaxKind["CaseClause"] = 298] = "CaseClause"; + SyntaxKind[SyntaxKind["DefaultClause"] = 299] = "DefaultClause"; + SyntaxKind[SyntaxKind["HeritageClause"] = 300] = "HeritageClause"; + SyntaxKind[SyntaxKind["CatchClause"] = 301] = "CatchClause"; + SyntaxKind[SyntaxKind["ImportAttributes"] = 302] = "ImportAttributes"; + SyntaxKind[SyntaxKind["ImportAttribute"] = 303] = "ImportAttribute"; + SyntaxKind[SyntaxKind["PropertyAssignment"] = 304] = "PropertyAssignment"; + SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 305] = "ShorthandPropertyAssignment"; + SyntaxKind[SyntaxKind["SpreadAssignment"] = 306] = "SpreadAssignment"; + SyntaxKind[SyntaxKind["EnumMember"] = 307] = "EnumMember"; + SyntaxKind[SyntaxKind["SourceFile"] = 308] = "SourceFile"; + SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 309] = "JSDocTypeExpression"; + SyntaxKind[SyntaxKind["JSDocNameReference"] = 310] = "JSDocNameReference"; + SyntaxKind[SyntaxKind["JSDocAllType"] = 311] = "JSDocAllType"; + SyntaxKind[SyntaxKind["JSDocNullableType"] = 312] = "JSDocNullableType"; + SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 313] = "JSDocNonNullableType"; + SyntaxKind[SyntaxKind["JSDocOptionalType"] = 314] = "JSDocOptionalType"; + SyntaxKind[SyntaxKind["JSDocVariadicType"] = 315] = "JSDocVariadicType"; + SyntaxKind[SyntaxKind["JSDoc"] = 316] = "JSDoc"; + SyntaxKind[SyntaxKind["JSDocText"] = 317] = "JSDocText"; + SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 318] = "JSDocTypeLiteral"; + SyntaxKind[SyntaxKind["JSDocSignature"] = 319] = "JSDocSignature"; + SyntaxKind[SyntaxKind["JSDocLink"] = 320] = "JSDocLink"; + SyntaxKind[SyntaxKind["JSDocLinkCode"] = 321] = "JSDocLinkCode"; + SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 322] = "JSDocLinkPlain"; + SyntaxKind[SyntaxKind["JSDocUnknownTag"] = 323] = "JSDocUnknownTag"; + SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 324] = "JSDocAugmentsTag"; + SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 325] = "JSDocImplementsTag"; + SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag"; + SyntaxKind[SyntaxKind["JSDocPublicTag"] = 327] = "JSDocPublicTag"; + SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 328] = "JSDocPrivateTag"; + SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 329] = "JSDocProtectedTag"; + SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 330] = "JSDocReadonlyTag"; + SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 331] = "JSDocOverrideTag"; + SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 332] = "JSDocCallbackTag"; + SyntaxKind[SyntaxKind["JSDocOverloadTag"] = 333] = "JSDocOverloadTag"; + SyntaxKind[SyntaxKind["JSDocParameterTag"] = 334] = "JSDocParameterTag"; + SyntaxKind[SyntaxKind["JSDocReturnTag"] = 335] = "JSDocReturnTag"; + SyntaxKind[SyntaxKind["JSDocThisTag"] = 336] = "JSDocThisTag"; + SyntaxKind[SyntaxKind["JSDocTypeTag"] = 337] = "JSDocTypeTag"; + SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 338] = "JSDocTemplateTag"; + SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 339] = "JSDocTypedefTag"; + SyntaxKind[SyntaxKind["JSDocSeeTag"] = 340] = "JSDocSeeTag"; + SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 341] = "JSDocPropertyTag"; + SyntaxKind[SyntaxKind["JSDocThrowsTag"] = 342] = "JSDocThrowsTag"; + SyntaxKind[SyntaxKind["JSDocSatisfiesTag"] = 343] = "JSDocSatisfiesTag"; + SyntaxKind[SyntaxKind["JSDocImportTag"] = 344] = "JSDocImportTag"; + SyntaxKind[SyntaxKind["SyntaxList"] = 345] = "SyntaxList"; + SyntaxKind[SyntaxKind["JSTypeAliasDeclaration"] = 346] = "JSTypeAliasDeclaration"; + SyntaxKind[SyntaxKind["JSImportDeclaration"] = 347] = "JSImportDeclaration"; + SyntaxKind[SyntaxKind["NotEmittedStatement"] = 348] = "NotEmittedStatement"; + SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 349] = "PartiallyEmittedExpression"; + SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 350] = "SyntheticReferenceExpression"; + SyntaxKind[SyntaxKind["NotEmittedTypeElement"] = 351] = "NotEmittedTypeElement"; + SyntaxKind[SyntaxKind["Count"] = 352] = "Count"; + SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment"; + SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment"; + SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment"; + SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment"; + SyntaxKind[SyntaxKind["FirstReservedWord"] = 82] = "FirstReservedWord"; + SyntaxKind[SyntaxKind["LastReservedWord"] = 117] = "LastReservedWord"; + SyntaxKind[SyntaxKind["FirstKeyword"] = 82] = "FirstKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = 167] = "LastKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 118] = "FirstFutureReservedWord"; + SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 126] = "LastFutureReservedWord"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = 184] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = 207] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation"; + SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken"; + SyntaxKind[SyntaxKind["LastToken"] = 167] = "LastToken"; + SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken"; + SyntaxKind[SyntaxKind["LastLiteralToken"] = 14] = "LastLiteralToken"; + SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken"; + SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken"; + SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator"; + SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator"; + SyntaxKind[SyntaxKind["FirstStatement"] = 245] = "FirstStatement"; + SyntaxKind[SyntaxKind["LastStatement"] = 261] = "LastStatement"; + SyntaxKind[SyntaxKind["FirstNode"] = 168] = "FirstNode"; + SyntaxKind[SyntaxKind["FirstJSDocNode"] = 309] = "FirstJSDocNode"; + SyntaxKind[SyntaxKind["LastJSDocNode"] = 344] = "LastJSDocNode"; + SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 323] = "FirstJSDocTagNode"; + SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 344] = "LastJSDocTagNode"; + SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 127] = "FirstContextualKeyword"; + SyntaxKind[SyntaxKind["LastContextualKeyword"] = 167] = "LastContextualKeyword"; + SyntaxKind[SyntaxKind["LastUnaryOperator"] = 54] = "LastUnaryOperator"; + SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken"; + SyntaxKind[SyntaxKind["LastTriviaToken"] = 6] = "LastTriviaToken"; +})(SyntaxKind || (SyntaxKind = {})); diff --git a/packages/typescript/src/enums/tokenFlags.enum.ts b/packages/typescript/src/enums/tokenFlags.enum.ts index 688147408b0ac..3d8ad8ec7ddfd 100644 --- a/packages/typescript/src/enums/tokenFlags.enum.ts +++ b/packages/typescript/src/enums/tokenFlags.enum.ts @@ -1,31 +1,31 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/tokenflags.go. DO NOT EDIT. - -export enum TokenFlags { - None = 0, - PrecedingLineBreak = 1 << 0, - PrecedingJSDocComment = 1 << 1, - Unterminated = 1 << 2, - ExtendedUnicodeEscape = 1 << 3, - Scientific = 1 << 4, - Octal = 1 << 5, - HexSpecifier = 1 << 6, - BinarySpecifier = 1 << 7, - OctalSpecifier = 1 << 8, - ContainsSeparator = 1 << 9, - UnicodeEscape = 1 << 10, - ContainsInvalidEscape = 1 << 11, - HexEscape = 1 << 12, - ContainsLeadingZero = 1 << 13, - ContainsInvalidSeparator = 1 << 14, - PrecedingJSDocLeadingAsterisks = 1 << 15, - SingleQuote = 1 << 16, - PrecedingJSDocWithDeprecated = 1 << 17, - PrecedingJSDocWithSeeOrLink = 1 << 18, - BinaryOrOctalSpecifier = BinarySpecifier | OctalSpecifier, - WithSpecifier = HexSpecifier | BinaryOrOctalSpecifier, - StringLiteralFlags = Unterminated | HexEscape | UnicodeEscape | ExtendedUnicodeEscape | ContainsInvalidEscape | SingleQuote, - NumericLiteralFlags = Scientific | Octal | ContainsLeadingZero | WithSpecifier | ContainsSeparator | ContainsInvalidSeparator, - TemplateLiteralLikeFlags = Unterminated | HexEscape | UnicodeEscape | ExtendedUnicodeEscape | ContainsInvalidEscape, - RegularExpressionLiteralFlags = Unterminated, - IsInvalid = Octal | ContainsLeadingZero | ContainsInvalidSeparator | ContainsInvalidEscape, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/tokenflags.go. DO NOT EDIT. + +export enum TokenFlags { + None = 0, + PrecedingLineBreak = 1 << 0, + PrecedingJSDocComment = 1 << 1, + Unterminated = 1 << 2, + ExtendedUnicodeEscape = 1 << 3, + Scientific = 1 << 4, + Octal = 1 << 5, + HexSpecifier = 1 << 6, + BinarySpecifier = 1 << 7, + OctalSpecifier = 1 << 8, + ContainsSeparator = 1 << 9, + UnicodeEscape = 1 << 10, + ContainsInvalidEscape = 1 << 11, + HexEscape = 1 << 12, + ContainsLeadingZero = 1 << 13, + ContainsInvalidSeparator = 1 << 14, + PrecedingJSDocLeadingAsterisks = 1 << 15, + SingleQuote = 1 << 16, + PrecedingJSDocWithDeprecated = 1 << 17, + PrecedingJSDocWithSeeOrLink = 1 << 18, + BinaryOrOctalSpecifier = BinarySpecifier | OctalSpecifier, + WithSpecifier = HexSpecifier | BinaryOrOctalSpecifier, + StringLiteralFlags = Unterminated | HexEscape | UnicodeEscape | ExtendedUnicodeEscape | ContainsInvalidEscape | SingleQuote, + NumericLiteralFlags = Scientific | Octal | ContainsLeadingZero | WithSpecifier | ContainsSeparator | ContainsInvalidSeparator, + TemplateLiteralLikeFlags = Unterminated | HexEscape | UnicodeEscape | ExtendedUnicodeEscape | ContainsInvalidEscape, + RegularExpressionLiteralFlags = Unterminated, + IsInvalid = Octal | ContainsLeadingZero | ContainsInvalidSeparator | ContainsInvalidEscape, +} diff --git a/packages/typescript/src/enums/tokenFlags.ts b/packages/typescript/src/enums/tokenFlags.ts index fe13478dd1021..fc33907d773da 100644 --- a/packages/typescript/src/enums/tokenFlags.ts +++ b/packages/typescript/src/enums/tokenFlags.ts @@ -1,31 +1,31 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/tokenflags.go. DO NOT EDIT. -export var TokenFlags: any; -(function (TokenFlags) { - TokenFlags[TokenFlags["None"] = 0] = "None"; - TokenFlags[TokenFlags["PrecedingLineBreak"] = 1] = "PrecedingLineBreak"; - TokenFlags[TokenFlags["PrecedingJSDocComment"] = 2] = "PrecedingJSDocComment"; - TokenFlags[TokenFlags["Unterminated"] = 4] = "Unterminated"; - TokenFlags[TokenFlags["ExtendedUnicodeEscape"] = 8] = "ExtendedUnicodeEscape"; - TokenFlags[TokenFlags["Scientific"] = 16] = "Scientific"; - TokenFlags[TokenFlags["Octal"] = 32] = "Octal"; - TokenFlags[TokenFlags["HexSpecifier"] = 64] = "HexSpecifier"; - TokenFlags[TokenFlags["BinarySpecifier"] = 128] = "BinarySpecifier"; - TokenFlags[TokenFlags["OctalSpecifier"] = 256] = "OctalSpecifier"; - TokenFlags[TokenFlags["ContainsSeparator"] = 512] = "ContainsSeparator"; - TokenFlags[TokenFlags["UnicodeEscape"] = 1024] = "UnicodeEscape"; - TokenFlags[TokenFlags["ContainsInvalidEscape"] = 2048] = "ContainsInvalidEscape"; - TokenFlags[TokenFlags["HexEscape"] = 4096] = "HexEscape"; - TokenFlags[TokenFlags["ContainsLeadingZero"] = 8192] = "ContainsLeadingZero"; - TokenFlags[TokenFlags["ContainsInvalidSeparator"] = 16384] = "ContainsInvalidSeparator"; - TokenFlags[TokenFlags["PrecedingJSDocLeadingAsterisks"] = 32768] = "PrecedingJSDocLeadingAsterisks"; - TokenFlags[TokenFlags["SingleQuote"] = 65536] = "SingleQuote"; - TokenFlags[TokenFlags["PrecedingJSDocWithDeprecated"] = 131072] = "PrecedingJSDocWithDeprecated"; - TokenFlags[TokenFlags["PrecedingJSDocWithSeeOrLink"] = 262144] = "PrecedingJSDocWithSeeOrLink"; - TokenFlags[TokenFlags["BinaryOrOctalSpecifier"] = 384] = "BinaryOrOctalSpecifier"; - TokenFlags[TokenFlags["WithSpecifier"] = 448] = "WithSpecifier"; - TokenFlags[TokenFlags["StringLiteralFlags"] = 72716] = "StringLiteralFlags"; - TokenFlags[TokenFlags["NumericLiteralFlags"] = 25584] = "NumericLiteralFlags"; - TokenFlags[TokenFlags["TemplateLiteralLikeFlags"] = 7180] = "TemplateLiteralLikeFlags"; - TokenFlags[TokenFlags["RegularExpressionLiteralFlags"] = 4] = "RegularExpressionLiteralFlags"; - TokenFlags[TokenFlags["IsInvalid"] = 26656] = "IsInvalid"; -})(TokenFlags || (TokenFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/ast/tokenflags.go. DO NOT EDIT. +export var TokenFlags: any; +(function (TokenFlags) { + TokenFlags[TokenFlags["None"] = 0] = "None"; + TokenFlags[TokenFlags["PrecedingLineBreak"] = 1] = "PrecedingLineBreak"; + TokenFlags[TokenFlags["PrecedingJSDocComment"] = 2] = "PrecedingJSDocComment"; + TokenFlags[TokenFlags["Unterminated"] = 4] = "Unterminated"; + TokenFlags[TokenFlags["ExtendedUnicodeEscape"] = 8] = "ExtendedUnicodeEscape"; + TokenFlags[TokenFlags["Scientific"] = 16] = "Scientific"; + TokenFlags[TokenFlags["Octal"] = 32] = "Octal"; + TokenFlags[TokenFlags["HexSpecifier"] = 64] = "HexSpecifier"; + TokenFlags[TokenFlags["BinarySpecifier"] = 128] = "BinarySpecifier"; + TokenFlags[TokenFlags["OctalSpecifier"] = 256] = "OctalSpecifier"; + TokenFlags[TokenFlags["ContainsSeparator"] = 512] = "ContainsSeparator"; + TokenFlags[TokenFlags["UnicodeEscape"] = 1024] = "UnicodeEscape"; + TokenFlags[TokenFlags["ContainsInvalidEscape"] = 2048] = "ContainsInvalidEscape"; + TokenFlags[TokenFlags["HexEscape"] = 4096] = "HexEscape"; + TokenFlags[TokenFlags["ContainsLeadingZero"] = 8192] = "ContainsLeadingZero"; + TokenFlags[TokenFlags["ContainsInvalidSeparator"] = 16384] = "ContainsInvalidSeparator"; + TokenFlags[TokenFlags["PrecedingJSDocLeadingAsterisks"] = 32768] = "PrecedingJSDocLeadingAsterisks"; + TokenFlags[TokenFlags["SingleQuote"] = 65536] = "SingleQuote"; + TokenFlags[TokenFlags["PrecedingJSDocWithDeprecated"] = 131072] = "PrecedingJSDocWithDeprecated"; + TokenFlags[TokenFlags["PrecedingJSDocWithSeeOrLink"] = 262144] = "PrecedingJSDocWithSeeOrLink"; + TokenFlags[TokenFlags["BinaryOrOctalSpecifier"] = 384] = "BinaryOrOctalSpecifier"; + TokenFlags[TokenFlags["WithSpecifier"] = 448] = "WithSpecifier"; + TokenFlags[TokenFlags["StringLiteralFlags"] = 72716] = "StringLiteralFlags"; + TokenFlags[TokenFlags["NumericLiteralFlags"] = 25584] = "NumericLiteralFlags"; + TokenFlags[TokenFlags["TemplateLiteralLikeFlags"] = 7180] = "TemplateLiteralLikeFlags"; + TokenFlags[TokenFlags["RegularExpressionLiteralFlags"] = 4] = "RegularExpressionLiteralFlags"; + TokenFlags[TokenFlags["IsInvalid"] = 26656] = "IsInvalid"; +})(TokenFlags || (TokenFlags = {})); diff --git a/packages/typescript/src/enums/typeFlags.enum.ts b/packages/typescript/src/enums/typeFlags.enum.ts index 282cbcfe49406..58a1e5d55c4ea 100644 --- a/packages/typescript/src/enums/typeFlags.enum.ts +++ b/packages/typescript/src/enums/typeFlags.enum.ts @@ -1,77 +1,77 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum TypeFlags { - None = 0, - Any = 1 << 0, - Unknown = 1 << 1, - Undefined = 1 << 2, - Null = 1 << 3, - Void = 1 << 4, - String = 1 << 5, - Number = 1 << 6, - BigInt = 1 << 7, - Boolean = 1 << 8, - ESSymbol = 1 << 9, - StringLiteral = 1 << 10, - NumberLiteral = 1 << 11, - BigIntLiteral = 1 << 12, - BooleanLiteral = 1 << 13, - UniqueESSymbol = 1 << 14, - EnumLiteral = 1 << 15, - Enum = 1 << 16, - NonPrimitive = 1 << 17, - Never = 1 << 18, - TypeParameter = 1 << 19, - Object = 1 << 20, - Index = 1 << 21, - TemplateLiteral = 1 << 22, - StringMapping = 1 << 23, - Substitution = 1 << 24, - IndexedAccess = 1 << 25, - Conditional = 1 << 26, - Union = 1 << 27, - Intersection = 1 << 28, - Reserved1 = 1 << 29, - Reserved2 = 1 << 30, - Reserved3 = 1 << 31, - AnyOrUnknown = Any | Unknown, - Nullable = Undefined | Null, - Literal = StringLiteral | NumberLiteral | BigIntLiteral | BooleanLiteral, - Unit = Enum | Literal | UniqueESSymbol | Nullable, - Freshable = Enum | Literal, - StringOrNumberLiteral = StringLiteral | NumberLiteral, - StringOrNumberLiteralOrUnique = StringLiteral | NumberLiteral | UniqueESSymbol, - DefinitelyFalsy = StringLiteral | NumberLiteral | BigIntLiteral | BooleanLiteral | Void | Undefined | Null, - PossiblyFalsy = DefinitelyFalsy | String | Number | BigInt | Boolean, - Intrinsic = Any | Unknown | String | Number | BigInt | ESSymbol | Void | Undefined | Null | Never | NonPrimitive, - StringLike = String | StringLiteral | TemplateLiteral | StringMapping, - NumberLike = Number | NumberLiteral | Enum, - BigIntLike = BigInt | BigIntLiteral, - BooleanLike = Boolean | BooleanLiteral, - EnumLike = Enum | EnumLiteral, - ESSymbolLike = ESSymbol | UniqueESSymbol, - VoidLike = Void | Undefined, - Primitive = StringLike | NumberLike | BigIntLike | BooleanLike | EnumLike | ESSymbolLike | VoidLike | Null, - DefinitelyNonNullable = StringLike | NumberLike | BigIntLike | BooleanLike | EnumLike | ESSymbolLike | Object | NonPrimitive, - DisjointDomains = NonPrimitive | StringLike | NumberLike | BigIntLike | BooleanLike | ESSymbolLike | VoidLike | Null, - UnionOrIntersection = Union | Intersection, - StructuredType = Object | Union | Intersection, - TypeVariable = TypeParameter | IndexedAccess, - InstantiableNonPrimitive = TypeVariable | Conditional | Substitution, - InstantiablePrimitive = Index | TemplateLiteral | StringMapping, - Instantiable = InstantiableNonPrimitive | InstantiablePrimitive, - StructuredOrInstantiable = StructuredType | Instantiable, - ObjectFlagsType = Any | Nullable | Never | Object | Union | Intersection, - Simplifiable = IndexedAccess | Conditional | Index, - Singleton = Any | Unknown | String | Number | Boolean | BigInt | ESSymbol | Void | Undefined | Null | Never | NonPrimitive, - Narrowable = Any | Unknown | StructuredOrInstantiable | StringLike | NumberLike | BigIntLike | BooleanLike | ESSymbol | UniqueESSymbol | NonPrimitive, - IncludesMask = Any | Unknown | Primitive | Never | Object | Union | Intersection | NonPrimitive | TemplateLiteral | StringMapping, - IncludesMissingType = TypeParameter, - IncludesNonWideningType = Index, - IncludesWildcard = IndexedAccess, - IncludesEmptyObject = Conditional, - IncludesInstantiable = Substitution, - IncludesConstrainedTypeVariable = Reserved1, - IncludesError = Reserved2, - NotPrimitiveUnion = Any | Unknown | Void | Never | Object | Intersection | IncludesInstantiable, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum TypeFlags { + None = 0, + Any = 1 << 0, + Unknown = 1 << 1, + Undefined = 1 << 2, + Null = 1 << 3, + Void = 1 << 4, + String = 1 << 5, + Number = 1 << 6, + BigInt = 1 << 7, + Boolean = 1 << 8, + ESSymbol = 1 << 9, + StringLiteral = 1 << 10, + NumberLiteral = 1 << 11, + BigIntLiteral = 1 << 12, + BooleanLiteral = 1 << 13, + UniqueESSymbol = 1 << 14, + EnumLiteral = 1 << 15, + Enum = 1 << 16, + NonPrimitive = 1 << 17, + Never = 1 << 18, + TypeParameter = 1 << 19, + Object = 1 << 20, + Index = 1 << 21, + TemplateLiteral = 1 << 22, + StringMapping = 1 << 23, + Substitution = 1 << 24, + IndexedAccess = 1 << 25, + Conditional = 1 << 26, + Union = 1 << 27, + Intersection = 1 << 28, + Reserved1 = 1 << 29, + Reserved2 = 1 << 30, + Reserved3 = 1 << 31, + AnyOrUnknown = Any | Unknown, + Nullable = Undefined | Null, + Literal = StringLiteral | NumberLiteral | BigIntLiteral | BooleanLiteral, + Unit = Enum | Literal | UniqueESSymbol | Nullable, + Freshable = Enum | Literal, + StringOrNumberLiteral = StringLiteral | NumberLiteral, + StringOrNumberLiteralOrUnique = StringLiteral | NumberLiteral | UniqueESSymbol, + DefinitelyFalsy = StringLiteral | NumberLiteral | BigIntLiteral | BooleanLiteral | Void | Undefined | Null, + PossiblyFalsy = DefinitelyFalsy | String | Number | BigInt | Boolean, + Intrinsic = Any | Unknown | String | Number | BigInt | ESSymbol | Void | Undefined | Null | Never | NonPrimitive, + StringLike = String | StringLiteral | TemplateLiteral | StringMapping, + NumberLike = Number | NumberLiteral | Enum, + BigIntLike = BigInt | BigIntLiteral, + BooleanLike = Boolean | BooleanLiteral, + EnumLike = Enum | EnumLiteral, + ESSymbolLike = ESSymbol | UniqueESSymbol, + VoidLike = Void | Undefined, + Primitive = StringLike | NumberLike | BigIntLike | BooleanLike | EnumLike | ESSymbolLike | VoidLike | Null, + DefinitelyNonNullable = StringLike | NumberLike | BigIntLike | BooleanLike | EnumLike | ESSymbolLike | Object | NonPrimitive, + DisjointDomains = NonPrimitive | StringLike | NumberLike | BigIntLike | BooleanLike | ESSymbolLike | VoidLike | Null, + UnionOrIntersection = Union | Intersection, + StructuredType = Object | Union | Intersection, + TypeVariable = TypeParameter | IndexedAccess, + InstantiableNonPrimitive = TypeVariable | Conditional | Substitution, + InstantiablePrimitive = Index | TemplateLiteral | StringMapping, + Instantiable = InstantiableNonPrimitive | InstantiablePrimitive, + StructuredOrInstantiable = StructuredType | Instantiable, + ObjectFlagsType = Any | Nullable | Never | Object | Union | Intersection, + Simplifiable = IndexedAccess | Conditional | Index, + Singleton = Any | Unknown | String | Number | Boolean | BigInt | ESSymbol | Void | Undefined | Null | Never | NonPrimitive, + Narrowable = Any | Unknown | StructuredOrInstantiable | StringLike | NumberLike | BigIntLike | BooleanLike | ESSymbol | UniqueESSymbol | NonPrimitive, + IncludesMask = Any | Unknown | Primitive | Never | Object | Union | Intersection | NonPrimitive | TemplateLiteral | StringMapping, + IncludesMissingType = TypeParameter, + IncludesNonWideningType = Index, + IncludesWildcard = IndexedAccess, + IncludesEmptyObject = Conditional, + IncludesInstantiable = Substitution, + IncludesConstrainedTypeVariable = Reserved1, + IncludesError = Reserved2, + NotPrimitiveUnion = Any | Unknown | Void | Never | Object | Intersection | IncludesInstantiable, +} diff --git a/packages/typescript/src/enums/typeFlags.ts b/packages/typescript/src/enums/typeFlags.ts index e1e8432972020..5268cafdd85ac 100644 --- a/packages/typescript/src/enums/typeFlags.ts +++ b/packages/typescript/src/enums/typeFlags.ts @@ -1,77 +1,77 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var TypeFlags: any; -(function (TypeFlags) { - TypeFlags[TypeFlags["None"] = 0] = "None"; - TypeFlags[TypeFlags["Any"] = 1] = "Any"; - TypeFlags[TypeFlags["Unknown"] = 2] = "Unknown"; - TypeFlags[TypeFlags["Undefined"] = 4] = "Undefined"; - TypeFlags[TypeFlags["Null"] = 8] = "Null"; - TypeFlags[TypeFlags["Void"] = 16] = "Void"; - TypeFlags[TypeFlags["String"] = 32] = "String"; - TypeFlags[TypeFlags["Number"] = 64] = "Number"; - TypeFlags[TypeFlags["BigInt"] = 128] = "BigInt"; - TypeFlags[TypeFlags["Boolean"] = 256] = "Boolean"; - TypeFlags[TypeFlags["ESSymbol"] = 512] = "ESSymbol"; - TypeFlags[TypeFlags["StringLiteral"] = 1024] = "StringLiteral"; - TypeFlags[TypeFlags["NumberLiteral"] = 2048] = "NumberLiteral"; - TypeFlags[TypeFlags["BigIntLiteral"] = 4096] = "BigIntLiteral"; - TypeFlags[TypeFlags["BooleanLiteral"] = 8192] = "BooleanLiteral"; - TypeFlags[TypeFlags["UniqueESSymbol"] = 16384] = "UniqueESSymbol"; - TypeFlags[TypeFlags["EnumLiteral"] = 32768] = "EnumLiteral"; - TypeFlags[TypeFlags["Enum"] = 65536] = "Enum"; - TypeFlags[TypeFlags["NonPrimitive"] = 131072] = "NonPrimitive"; - TypeFlags[TypeFlags["Never"] = 262144] = "Never"; - TypeFlags[TypeFlags["TypeParameter"] = 524288] = "TypeParameter"; - TypeFlags[TypeFlags["Object"] = 1048576] = "Object"; - TypeFlags[TypeFlags["Index"] = 2097152] = "Index"; - TypeFlags[TypeFlags["TemplateLiteral"] = 4194304] = "TemplateLiteral"; - TypeFlags[TypeFlags["StringMapping"] = 8388608] = "StringMapping"; - TypeFlags[TypeFlags["Substitution"] = 16777216] = "Substitution"; - TypeFlags[TypeFlags["IndexedAccess"] = 33554432] = "IndexedAccess"; - TypeFlags[TypeFlags["Conditional"] = 67108864] = "Conditional"; - TypeFlags[TypeFlags["Union"] = 134217728] = "Union"; - TypeFlags[TypeFlags["Intersection"] = 268435456] = "Intersection"; - TypeFlags[TypeFlags["Reserved1"] = 536870912] = "Reserved1"; - TypeFlags[TypeFlags["Reserved2"] = 1073741824] = "Reserved2"; - TypeFlags[TypeFlags["Reserved3"] = -2147483648] = "Reserved3"; - TypeFlags[TypeFlags["AnyOrUnknown"] = 3] = "AnyOrUnknown"; - TypeFlags[TypeFlags["Nullable"] = 12] = "Nullable"; - TypeFlags[TypeFlags["Literal"] = 15360] = "Literal"; - TypeFlags[TypeFlags["Unit"] = 97292] = "Unit"; - TypeFlags[TypeFlags["Freshable"] = 80896] = "Freshable"; - TypeFlags[TypeFlags["StringOrNumberLiteral"] = 3072] = "StringOrNumberLiteral"; - TypeFlags[TypeFlags["StringOrNumberLiteralOrUnique"] = 19456] = "StringOrNumberLiteralOrUnique"; - TypeFlags[TypeFlags["DefinitelyFalsy"] = 15388] = "DefinitelyFalsy"; - TypeFlags[TypeFlags["PossiblyFalsy"] = 15868] = "PossiblyFalsy"; - TypeFlags[TypeFlags["Intrinsic"] = 393983] = "Intrinsic"; - TypeFlags[TypeFlags["StringLike"] = 12583968] = "StringLike"; - TypeFlags[TypeFlags["NumberLike"] = 67648] = "NumberLike"; - TypeFlags[TypeFlags["BigIntLike"] = 4224] = "BigIntLike"; - TypeFlags[TypeFlags["BooleanLike"] = 8448] = "BooleanLike"; - TypeFlags[TypeFlags["EnumLike"] = 98304] = "EnumLike"; - TypeFlags[TypeFlags["ESSymbolLike"] = 16896] = "ESSymbolLike"; - TypeFlags[TypeFlags["VoidLike"] = 20] = "VoidLike"; - TypeFlags[TypeFlags["Primitive"] = 12713980] = "Primitive"; - TypeFlags[TypeFlags["DefinitelyNonNullable"] = 13893600] = "DefinitelyNonNullable"; - TypeFlags[TypeFlags["DisjointDomains"] = 12812284] = "DisjointDomains"; - TypeFlags[TypeFlags["UnionOrIntersection"] = 402653184] = "UnionOrIntersection"; - TypeFlags[TypeFlags["StructuredType"] = 403701760] = "StructuredType"; - TypeFlags[TypeFlags["TypeVariable"] = 34078720] = "TypeVariable"; - TypeFlags[TypeFlags["InstantiableNonPrimitive"] = 117964800] = "InstantiableNonPrimitive"; - TypeFlags[TypeFlags["InstantiablePrimitive"] = 14680064] = "InstantiablePrimitive"; - TypeFlags[TypeFlags["Instantiable"] = 132644864] = "Instantiable"; - TypeFlags[TypeFlags["StructuredOrInstantiable"] = 536346624] = "StructuredOrInstantiable"; - TypeFlags[TypeFlags["ObjectFlagsType"] = 403963917] = "ObjectFlagsType"; - TypeFlags[TypeFlags["Simplifiable"] = 102760448] = "Simplifiable"; - TypeFlags[TypeFlags["Singleton"] = 394239] = "Singleton"; - TypeFlags[TypeFlags["Narrowable"] = 536575971] = "Narrowable"; - TypeFlags[TypeFlags["IncludesMask"] = 416808959] = "IncludesMask"; - TypeFlags[TypeFlags["IncludesMissingType"] = 524288] = "IncludesMissingType"; - TypeFlags[TypeFlags["IncludesNonWideningType"] = 2097152] = "IncludesNonWideningType"; - TypeFlags[TypeFlags["IncludesWildcard"] = 33554432] = "IncludesWildcard"; - TypeFlags[TypeFlags["IncludesEmptyObject"] = 67108864] = "IncludesEmptyObject"; - TypeFlags[TypeFlags["IncludesInstantiable"] = 16777216] = "IncludesInstantiable"; - TypeFlags[TypeFlags["IncludesConstrainedTypeVariable"] = 536870912] = "IncludesConstrainedTypeVariable"; - TypeFlags[TypeFlags["IncludesError"] = 1073741824] = "IncludesError"; - TypeFlags[TypeFlags["NotPrimitiveUnion"] = 286523411] = "NotPrimitiveUnion"; -})(TypeFlags || (TypeFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var TypeFlags: any; +(function (TypeFlags) { + TypeFlags[TypeFlags["None"] = 0] = "None"; + TypeFlags[TypeFlags["Any"] = 1] = "Any"; + TypeFlags[TypeFlags["Unknown"] = 2] = "Unknown"; + TypeFlags[TypeFlags["Undefined"] = 4] = "Undefined"; + TypeFlags[TypeFlags["Null"] = 8] = "Null"; + TypeFlags[TypeFlags["Void"] = 16] = "Void"; + TypeFlags[TypeFlags["String"] = 32] = "String"; + TypeFlags[TypeFlags["Number"] = 64] = "Number"; + TypeFlags[TypeFlags["BigInt"] = 128] = "BigInt"; + TypeFlags[TypeFlags["Boolean"] = 256] = "Boolean"; + TypeFlags[TypeFlags["ESSymbol"] = 512] = "ESSymbol"; + TypeFlags[TypeFlags["StringLiteral"] = 1024] = "StringLiteral"; + TypeFlags[TypeFlags["NumberLiteral"] = 2048] = "NumberLiteral"; + TypeFlags[TypeFlags["BigIntLiteral"] = 4096] = "BigIntLiteral"; + TypeFlags[TypeFlags["BooleanLiteral"] = 8192] = "BooleanLiteral"; + TypeFlags[TypeFlags["UniqueESSymbol"] = 16384] = "UniqueESSymbol"; + TypeFlags[TypeFlags["EnumLiteral"] = 32768] = "EnumLiteral"; + TypeFlags[TypeFlags["Enum"] = 65536] = "Enum"; + TypeFlags[TypeFlags["NonPrimitive"] = 131072] = "NonPrimitive"; + TypeFlags[TypeFlags["Never"] = 262144] = "Never"; + TypeFlags[TypeFlags["TypeParameter"] = 524288] = "TypeParameter"; + TypeFlags[TypeFlags["Object"] = 1048576] = "Object"; + TypeFlags[TypeFlags["Index"] = 2097152] = "Index"; + TypeFlags[TypeFlags["TemplateLiteral"] = 4194304] = "TemplateLiteral"; + TypeFlags[TypeFlags["StringMapping"] = 8388608] = "StringMapping"; + TypeFlags[TypeFlags["Substitution"] = 16777216] = "Substitution"; + TypeFlags[TypeFlags["IndexedAccess"] = 33554432] = "IndexedAccess"; + TypeFlags[TypeFlags["Conditional"] = 67108864] = "Conditional"; + TypeFlags[TypeFlags["Union"] = 134217728] = "Union"; + TypeFlags[TypeFlags["Intersection"] = 268435456] = "Intersection"; + TypeFlags[TypeFlags["Reserved1"] = 536870912] = "Reserved1"; + TypeFlags[TypeFlags["Reserved2"] = 1073741824] = "Reserved2"; + TypeFlags[TypeFlags["Reserved3"] = -2147483648] = "Reserved3"; + TypeFlags[TypeFlags["AnyOrUnknown"] = 3] = "AnyOrUnknown"; + TypeFlags[TypeFlags["Nullable"] = 12] = "Nullable"; + TypeFlags[TypeFlags["Literal"] = 15360] = "Literal"; + TypeFlags[TypeFlags["Unit"] = 97292] = "Unit"; + TypeFlags[TypeFlags["Freshable"] = 80896] = "Freshable"; + TypeFlags[TypeFlags["StringOrNumberLiteral"] = 3072] = "StringOrNumberLiteral"; + TypeFlags[TypeFlags["StringOrNumberLiteralOrUnique"] = 19456] = "StringOrNumberLiteralOrUnique"; + TypeFlags[TypeFlags["DefinitelyFalsy"] = 15388] = "DefinitelyFalsy"; + TypeFlags[TypeFlags["PossiblyFalsy"] = 15868] = "PossiblyFalsy"; + TypeFlags[TypeFlags["Intrinsic"] = 393983] = "Intrinsic"; + TypeFlags[TypeFlags["StringLike"] = 12583968] = "StringLike"; + TypeFlags[TypeFlags["NumberLike"] = 67648] = "NumberLike"; + TypeFlags[TypeFlags["BigIntLike"] = 4224] = "BigIntLike"; + TypeFlags[TypeFlags["BooleanLike"] = 8448] = "BooleanLike"; + TypeFlags[TypeFlags["EnumLike"] = 98304] = "EnumLike"; + TypeFlags[TypeFlags["ESSymbolLike"] = 16896] = "ESSymbolLike"; + TypeFlags[TypeFlags["VoidLike"] = 20] = "VoidLike"; + TypeFlags[TypeFlags["Primitive"] = 12713980] = "Primitive"; + TypeFlags[TypeFlags["DefinitelyNonNullable"] = 13893600] = "DefinitelyNonNullable"; + TypeFlags[TypeFlags["DisjointDomains"] = 12812284] = "DisjointDomains"; + TypeFlags[TypeFlags["UnionOrIntersection"] = 402653184] = "UnionOrIntersection"; + TypeFlags[TypeFlags["StructuredType"] = 403701760] = "StructuredType"; + TypeFlags[TypeFlags["TypeVariable"] = 34078720] = "TypeVariable"; + TypeFlags[TypeFlags["InstantiableNonPrimitive"] = 117964800] = "InstantiableNonPrimitive"; + TypeFlags[TypeFlags["InstantiablePrimitive"] = 14680064] = "InstantiablePrimitive"; + TypeFlags[TypeFlags["Instantiable"] = 132644864] = "Instantiable"; + TypeFlags[TypeFlags["StructuredOrInstantiable"] = 536346624] = "StructuredOrInstantiable"; + TypeFlags[TypeFlags["ObjectFlagsType"] = 403963917] = "ObjectFlagsType"; + TypeFlags[TypeFlags["Simplifiable"] = 102760448] = "Simplifiable"; + TypeFlags[TypeFlags["Singleton"] = 394239] = "Singleton"; + TypeFlags[TypeFlags["Narrowable"] = 536575971] = "Narrowable"; + TypeFlags[TypeFlags["IncludesMask"] = 416808959] = "IncludesMask"; + TypeFlags[TypeFlags["IncludesMissingType"] = 524288] = "IncludesMissingType"; + TypeFlags[TypeFlags["IncludesNonWideningType"] = 2097152] = "IncludesNonWideningType"; + TypeFlags[TypeFlags["IncludesWildcard"] = 33554432] = "IncludesWildcard"; + TypeFlags[TypeFlags["IncludesEmptyObject"] = 67108864] = "IncludesEmptyObject"; + TypeFlags[TypeFlags["IncludesInstantiable"] = 16777216] = "IncludesInstantiable"; + TypeFlags[TypeFlags["IncludesConstrainedTypeVariable"] = 536870912] = "IncludesConstrainedTypeVariable"; + TypeFlags[TypeFlags["IncludesError"] = 1073741824] = "IncludesError"; + TypeFlags[TypeFlags["NotPrimitiveUnion"] = 286523411] = "NotPrimitiveUnion"; +})(TypeFlags || (TypeFlags = {})); diff --git a/packages/typescript/src/enums/typeFormatFlags.enum.ts b/packages/typescript/src/enums/typeFormatFlags.enum.ts index a4da6175aac15..24d20e1ab6106 100644 --- a/packages/typescript/src/enums/typeFormatFlags.enum.ts +++ b/packages/typescript/src/enums/typeFormatFlags.enum.ts @@ -1,30 +1,30 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum TypeFormatFlags { - None = 0, - NoTruncation = 1 << 0, - WriteArrayAsGenericType = 1 << 1, - GenerateNamesForShadowedTypeParams = 1 << 2, - UseStructuralFallback = 1 << 3, - WriteTypeArgumentsOfSignature = 1 << 5, - UseFullyQualifiedType = 1 << 6, - SuppressAnyReturnType = 1 << 8, - MultilineObjectLiterals = 1 << 10, - WriteClassExpressionAsTypeLiteral = 1 << 11, - UseTypeOfFunction = 1 << 12, - OmitParameterModifiers = 1 << 13, - UseAliasDefinedOutsideCurrentScope = 1 << 14, - UseSingleQuotesForStringLiteralType = 1 << 28, - NoTypeReduction = 1 << 29, - UseInstantiationExpressions = 1 << 30, - OmitThisParameter = 1 << 25, - WriteCallStyleSignature = 1 << 27, - AllowUniqueESSymbolType = 1 << 20, - AddUndefined = 1 << 17, - WriteArrowStyleSignature = 1 << 18, - InArrayType = 1 << 19, - InElementType = 1 << 21, - InFirstTypeArgument = 1 << 22, - InTypeAlias = 1 << 23, - NodeBuilderFlagsMask = NoTruncation | WriteArrayAsGenericType | GenerateNamesForShadowedTypeParams | UseStructuralFallback | WriteTypeArgumentsOfSignature | UseFullyQualifiedType | SuppressAnyReturnType | MultilineObjectLiterals | WriteClassExpressionAsTypeLiteral | UseTypeOfFunction | OmitParameterModifiers | UseAliasDefinedOutsideCurrentScope | AllowUniqueESSymbolType | InTypeAlias | UseInstantiationExpressions | UseSingleQuotesForStringLiteralType | NoTypeReduction | OmitThisParameter, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum TypeFormatFlags { + None = 0, + NoTruncation = 1 << 0, + WriteArrayAsGenericType = 1 << 1, + GenerateNamesForShadowedTypeParams = 1 << 2, + UseStructuralFallback = 1 << 3, + WriteTypeArgumentsOfSignature = 1 << 5, + UseFullyQualifiedType = 1 << 6, + SuppressAnyReturnType = 1 << 8, + MultilineObjectLiterals = 1 << 10, + WriteClassExpressionAsTypeLiteral = 1 << 11, + UseTypeOfFunction = 1 << 12, + OmitParameterModifiers = 1 << 13, + UseAliasDefinedOutsideCurrentScope = 1 << 14, + UseSingleQuotesForStringLiteralType = 1 << 28, + NoTypeReduction = 1 << 29, + UseInstantiationExpressions = 1 << 30, + OmitThisParameter = 1 << 25, + WriteCallStyleSignature = 1 << 27, + AllowUniqueESSymbolType = 1 << 20, + AddUndefined = 1 << 17, + WriteArrowStyleSignature = 1 << 18, + InArrayType = 1 << 19, + InElementType = 1 << 21, + InFirstTypeArgument = 1 << 22, + InTypeAlias = 1 << 23, + NodeBuilderFlagsMask = NoTruncation | WriteArrayAsGenericType | GenerateNamesForShadowedTypeParams | UseStructuralFallback | WriteTypeArgumentsOfSignature | UseFullyQualifiedType | SuppressAnyReturnType | MultilineObjectLiterals | WriteClassExpressionAsTypeLiteral | UseTypeOfFunction | OmitParameterModifiers | UseAliasDefinedOutsideCurrentScope | AllowUniqueESSymbolType | InTypeAlias | UseInstantiationExpressions | UseSingleQuotesForStringLiteralType | NoTypeReduction | OmitThisParameter, +} diff --git a/packages/typescript/src/enums/typeFormatFlags.ts b/packages/typescript/src/enums/typeFormatFlags.ts index a2867d17303c1..20add3b15d8d4 100644 --- a/packages/typescript/src/enums/typeFormatFlags.ts +++ b/packages/typescript/src/enums/typeFormatFlags.ts @@ -1,30 +1,30 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var TypeFormatFlags: any; -(function (TypeFormatFlags) { - TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None"; - TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 1] = "NoTruncation"; - TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; - TypeFormatFlags[TypeFormatFlags["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; - TypeFormatFlags[TypeFormatFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; - TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; - TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; - TypeFormatFlags[TypeFormatFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; - TypeFormatFlags[TypeFormatFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; - TypeFormatFlags[TypeFormatFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; - TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; - TypeFormatFlags[TypeFormatFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; - TypeFormatFlags[TypeFormatFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; - TypeFormatFlags[TypeFormatFlags["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; - TypeFormatFlags[TypeFormatFlags["NoTypeReduction"] = 536870912] = "NoTypeReduction"; - TypeFormatFlags[TypeFormatFlags["UseInstantiationExpressions"] = 1073741824] = "UseInstantiationExpressions"; - TypeFormatFlags[TypeFormatFlags["OmitThisParameter"] = 33554432] = "OmitThisParameter"; - TypeFormatFlags[TypeFormatFlags["WriteCallStyleSignature"] = 134217728] = "WriteCallStyleSignature"; - TypeFormatFlags[TypeFormatFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; - TypeFormatFlags[TypeFormatFlags["AddUndefined"] = 131072] = "AddUndefined"; - TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 262144] = "WriteArrowStyleSignature"; - TypeFormatFlags[TypeFormatFlags["InArrayType"] = 524288] = "InArrayType"; - TypeFormatFlags[TypeFormatFlags["InElementType"] = 2097152] = "InElementType"; - TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 4194304] = "InFirstTypeArgument"; - TypeFormatFlags[TypeFormatFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; - TypeFormatFlags[TypeFormatFlags["NodeBuilderFlagsMask"] = 1922071919] = "NodeBuilderFlagsMask"; -})(TypeFormatFlags || (TypeFormatFlags = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var TypeFormatFlags: any; +(function (TypeFormatFlags) { + TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None"; + TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 1] = "NoTruncation"; + TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; + TypeFormatFlags[TypeFormatFlags["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; + TypeFormatFlags[TypeFormatFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; + TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; + TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; + TypeFormatFlags[TypeFormatFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; + TypeFormatFlags[TypeFormatFlags["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; + TypeFormatFlags[TypeFormatFlags["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; + TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; + TypeFormatFlags[TypeFormatFlags["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; + TypeFormatFlags[TypeFormatFlags["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; + TypeFormatFlags[TypeFormatFlags["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; + TypeFormatFlags[TypeFormatFlags["NoTypeReduction"] = 536870912] = "NoTypeReduction"; + TypeFormatFlags[TypeFormatFlags["UseInstantiationExpressions"] = 1073741824] = "UseInstantiationExpressions"; + TypeFormatFlags[TypeFormatFlags["OmitThisParameter"] = 33554432] = "OmitThisParameter"; + TypeFormatFlags[TypeFormatFlags["WriteCallStyleSignature"] = 134217728] = "WriteCallStyleSignature"; + TypeFormatFlags[TypeFormatFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; + TypeFormatFlags[TypeFormatFlags["AddUndefined"] = 131072] = "AddUndefined"; + TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 262144] = "WriteArrowStyleSignature"; + TypeFormatFlags[TypeFormatFlags["InArrayType"] = 524288] = "InArrayType"; + TypeFormatFlags[TypeFormatFlags["InElementType"] = 2097152] = "InElementType"; + TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 4194304] = "InFirstTypeArgument"; + TypeFormatFlags[TypeFormatFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; + TypeFormatFlags[TypeFormatFlags["NodeBuilderFlagsMask"] = 1922071919] = "NodeBuilderFlagsMask"; +})(TypeFormatFlags || (TypeFormatFlags = {})); diff --git a/packages/typescript/src/enums/typePredicateKind.enum.ts b/packages/typescript/src/enums/typePredicateKind.enum.ts index bbcc31af12ab0..126644c7c2083 100644 --- a/packages/typescript/src/enums/typePredicateKind.enum.ts +++ b/packages/typescript/src/enums/typePredicateKind.enum.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. - -export enum TypePredicateKind { - This = 0, - Identifier = 1, - AssertsThis = 2, - AssertsIdentifier = 3, -} +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. + +export enum TypePredicateKind { + This = 0, + Identifier = 1, + AssertsThis = 2, + AssertsIdentifier = 3, +} diff --git a/packages/typescript/src/enums/typePredicateKind.ts b/packages/typescript/src/enums/typePredicateKind.ts index d3b0199e0b673..10cf62deda9bb 100644 --- a/packages/typescript/src/enums/typePredicateKind.ts +++ b/packages/typescript/src/enums/typePredicateKind.ts @@ -1,8 +1,8 @@ -// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. -export var TypePredicateKind: any; -(function (TypePredicateKind) { - TypePredicateKind[TypePredicateKind["This"] = 0] = "This"; - TypePredicateKind[TypePredicateKind["Identifier"] = 1] = "Identifier"; - TypePredicateKind[TypePredicateKind["AssertsThis"] = 2] = "AssertsThis"; - TypePredicateKind[TypePredicateKind["AssertsIdentifier"] = 3] = "AssertsIdentifier"; -})(TypePredicateKind || (TypePredicateKind = {})); +// Code generated by tools/scripts/tsc/generate-enums.ts from tsc/internal/checker/types.go. DO NOT EDIT. +export var TypePredicateKind: any; +(function (TypePredicateKind) { + TypePredicateKind[TypePredicateKind["This"] = 0] = "This"; + TypePredicateKind[TypePredicateKind["Identifier"] = 1] = "Identifier"; + TypePredicateKind[TypePredicateKind["AssertsThis"] = 2] = "AssertsThis"; + TypePredicateKind[TypePredicateKind["AssertsIdentifier"] = 3] = "AssertsIdentifier"; +})(TypePredicateKind || (TypePredicateKind = {})); diff --git a/packages/typescript/src/internal/utils.ts b/packages/typescript/src/internal/utils.ts index 84b5bb7e94f97..f04a0462035d2 100644 --- a/packages/typescript/src/internal/utils.ts +++ b/packages/typescript/src/internal/utils.ts @@ -1,44 +1,44 @@ -import type { Node } from "../ast/ast.ts"; -import { formatSyntaxKind } from "../ast/utils.ts"; - -const hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Safer version of `Function` which should not be called. - * Every function should be assignable to this, but this should not be assignable to every function. - */ -export type AnyFunction = (...args: never[]) => void; - -/** - * Type of objects whose values are all of the same type. - * The `in` and `for-in` operators can *not* be safely used, - * since `Object.prototype` may be modified by outside code. - */ -export interface MapLike { - [index: string]: T; -} - -/** - * Indicates whether a map-like contains an own property with the specified key. - * - * @param map A map-like. - * @param key A property key. - */ -export function hasProperty(map: MapLike, key: string): boolean { - return hasOwnProperty.call(map, key); -} - -export function assertNever(member: never, message = "Illegal value:", stackCrawlMark?: AnyFunction): never { - const detail = typeof member === "object" && hasProperty(member, "kind") && hasProperty(member, "pos") ? "SyntaxKind: " + formatSyntaxKind((member as Node).kind) : JSON.stringify(member); - return fail(`${message} ${detail}`, stackCrawlMark || assertNever); -} - -export function fail(message?: string, stackCrawlMark?: AnyFunction): never { - // eslint-disable-next-line no-debugger - debugger; - const e = new Error(message ? `Debug Failure. ${message}` : "Debug Failure."); - if ((Error as any).captureStackTrace) { - (Error as any).captureStackTrace(e, stackCrawlMark || fail); - } - throw e; -} +import type { Node } from "../ast/ast.ts"; +import { formatSyntaxKind } from "../ast/utils.ts"; + +const hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Safer version of `Function` which should not be called. + * Every function should be assignable to this, but this should not be assignable to every function. + */ +export type AnyFunction = (...args: never[]) => void; + +/** + * Type of objects whose values are all of the same type. + * The `in` and `for-in` operators can *not* be safely used, + * since `Object.prototype` may be modified by outside code. + */ +export interface MapLike { + [index: string]: T; +} + +/** + * Indicates whether a map-like contains an own property with the specified key. + * + * @param map A map-like. + * @param key A property key. + */ +export function hasProperty(map: MapLike, key: string): boolean { + return hasOwnProperty.call(map, key); +} + +export function assertNever(member: never, message = "Illegal value:", stackCrawlMark?: AnyFunction): never { + const detail = typeof member === "object" && hasProperty(member, "kind") && hasProperty(member, "pos") ? "SyntaxKind: " + formatSyntaxKind((member as Node).kind) : JSON.stringify(member); + return fail(`${message} ${detail}`, stackCrawlMark || assertNever); +} + +export function fail(message?: string, stackCrawlMark?: AnyFunction): never { + // eslint-disable-next-line no-debugger + debugger; + const e = new Error(message ? `Debug Failure. ${message}` : "Debug Failure."); + if ((Error as any).captureStackTrace) { + (Error as any).captureStackTrace(e, stackCrawlMark || fail); + } + throw e; +} diff --git a/packages/typescript/src/vscode/extensionApi.ts b/packages/typescript/src/vscode/extensionApi.ts index 2e2db90b84478..5638c3929f0ab 100644 --- a/packages/typescript/src/vscode/extensionApi.ts +++ b/packages/typescript/src/vscode/extensionApi.ts @@ -1,69 +1,69 @@ -import type { LspMiddlewareRequests } from "./protocol.generated.ts"; -export type * from "./protocol.generated.ts"; - -export interface Disposable { - dispose(): unknown; -} - -export interface Event { - (listener: (event: T) => unknown, thisArgs?: unknown, disposables?: Disposable[] | undefined): Disposable; -} - -/** The URI properties used when launching a content mapper. */ -export interface ContentMapperUri { - readonly scheme: string; - readonly fsPath: string; -} - -export interface ContentMapperManifest { - readonly name: string; - readonly version?: string | undefined; - readonly exec: readonly string[]; - readonly cwd?: ContentMapperUri | undefined; - readonly compilerOptions?: readonly string[] | undefined; - readonly dynamicConfig?: boolean | undefined; -} - -export interface ContentMapperContribution { - readonly extensions: readonly string[]; - readonly inferredProjectContribution?: { - readonly options?: Readonly> | undefined; - readonly manifest: ContentMapperManifest; - } | undefined; -} - -export type LspMiddlewareMethod = keyof LspMiddlewareRequests; - -export type DeepReadonly = unknown extends T ? unknown : T extends object ? { readonly [K in keyof T]: DeepReadonly; } : T; - -export type LspMiddlewareResult = LspMiddlewareRequests[M]["result"]; - -export type LspMiddlewareContext = { readonly params: DeepReadonly; }; - -export type LspMiddlewareTransformer = ( - result: LspMiddlewareResult, - context: LspMiddlewareContext, -) => LspMiddlewareResult | PromiseLike>; - -export interface ExtensionAPI { - onLanguageServerInitialized: Event; - initializeAPIConnection(pipe?: string): Promise; - registerContentMappers(contributorId: string, contributions: readonly ContentMapperContribution[]): Disposable; - - /** - * Changes an LSP language-feature response before conversion to VS Code objects. - * Each callback gets its own copy of the request parameters. - * - * Callbacks run in registration order. Order between extensions may vary. - * If a callback fails, we log the error and use the original server response. - * - * Registrations survive server restarts. Disposing removes the callback from - * future responses but does not interrupt a response already being processed. - * - * Requests, notifications, lifecycle messages, and partial results are excluded. - */ - registerLspMiddleware( - method: M, - transformer: LspMiddlewareTransformer>, - ): Disposable; -} +import type { LspMiddlewareRequests } from "./protocol.generated.ts"; +export type * from "./protocol.generated.ts"; + +export interface Disposable { + dispose(): unknown; +} + +export interface Event { + (listener: (event: T) => unknown, thisArgs?: unknown, disposables?: Disposable[] | undefined): Disposable; +} + +/** The URI properties used when launching a content mapper. */ +export interface ContentMapperUri { + readonly scheme: string; + readonly fsPath: string; +} + +export interface ContentMapperManifest { + readonly name: string; + readonly version?: string | undefined; + readonly exec: readonly string[]; + readonly cwd?: ContentMapperUri | undefined; + readonly compilerOptions?: readonly string[] | undefined; + readonly dynamicConfig?: boolean | undefined; +} + +export interface ContentMapperContribution { + readonly extensions: readonly string[]; + readonly inferredProjectContribution?: { + readonly options?: Readonly> | undefined; + readonly manifest: ContentMapperManifest; + } | undefined; +} + +export type LspMiddlewareMethod = keyof LspMiddlewareRequests; + +export type DeepReadonly = unknown extends T ? unknown : T extends object ? { readonly [K in keyof T]: DeepReadonly; } : T; + +export type LspMiddlewareResult = LspMiddlewareRequests[M]["result"]; + +export type LspMiddlewareContext = { readonly params: DeepReadonly; }; + +export type LspMiddlewareTransformer = ( + result: LspMiddlewareResult, + context: LspMiddlewareContext, +) => LspMiddlewareResult | PromiseLike>; + +export interface ExtensionAPI { + onLanguageServerInitialized: Event; + initializeAPIConnection(pipe?: string): Promise; + registerContentMappers(contributorId: string, contributions: readonly ContentMapperContribution[]): Disposable; + + /** + * Changes an LSP language-feature response before conversion to VS Code objects. + * Each callback gets its own copy of the request parameters. + * + * Callbacks run in registration order. Order between extensions may vary. + * If a callback fails, we log the error and use the original server response. + * + * Registrations survive server restarts. Disposing removes the callback from + * future responses but does not interrupt a response already being processed. + * + * Requests, notifications, lifecycle messages, and partial results are excluded. + */ + registerLspMiddleware( + method: M, + transformer: LspMiddlewareTransformer>, + ): Disposable; +} diff --git a/packages/typescript/src/vscode/protocol.generated.ts b/packages/typescript/src/vscode/protocol.generated.ts index cde6b32f85c17..0e21f8c4ebf0d 100644 --- a/packages/typescript/src/vscode/protocol.generated.ts +++ b/packages/typescript/src/vscode/protocol.generated.ts @@ -1,2913 +1,2913 @@ -// Code generated by tools/scripts/lsp/generateTypeScript.mts. DO NOT EDIT. -// LSP metamodel copyright (c) Microsoft Corporation. Licensed under the MIT License. - -/** - * A special text edit with an additional change annotation. - * - * @since 3.16.0. - */ -export interface AnnotatedTextEdit { - /** - * The range of the text document to be manipulated. To insert - * text into a document create a range where start === end. - */ - range: Range; - /** - * The string to be inserted. For delete operations use an - * empty string. - */ - newText: string; - /** - * The actual identifier of the change annotation - */ - annotationId: ChangeAnnotationIdentifier; -} - -/** - * Defines how values from a set of defaults and an individual item will be - * merged. - * - * @since 3.18.0 - */ -export type ApplyKind = 1 | 2; - -/** - * Represents an incoming call, e.g. a caller of a method or constructor. - * - * @since 3.16.0 - */ -export interface CallHierarchyIncomingCall { - /** - * The item that makes the call. - */ - from: CallHierarchyItem; - /** - * The ranges at which the calls appear. This is relative to the caller - * denoted by {@link CallHierarchyIncomingCall.from `this.from`}. - */ - fromRanges: Range[]; -} - -/** - * The parameter of a `callHierarchy/incomingCalls` request. - * - * @since 3.16.0 - */ -export interface CallHierarchyIncomingCallsParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - item: CallHierarchyItem; -} - -/** - * Represents programming constructs like functions or constructors in the context - * of call hierarchy. - * - * @since 3.16.0 - */ -export interface CallHierarchyItem { - /** - * The name of this item. - */ - name: string; - /** - * The kind of this item. - */ - kind: SymbolKind; - /** - * Tags for this item. - */ - tags?: SymbolTag[] | undefined; - /** - * More detail for this item, e.g. the signature of a function. - */ - detail?: string | undefined; - /** - * The resource identifier of this item. - */ - uri: DocumentUri; - /** - * The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code. - */ - range: Range; - /** - * The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. - * Must be contained by the {@link CallHierarchyItem.range `range`}. - */ - selectionRange: Range; - /** - * A data entry field that is preserved between a call hierarchy prepare and - * incoming calls or outgoing calls requests. - */ - data?: LSPAny | undefined; -} - -/** - * Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc. - * - * @since 3.16.0 - */ -export interface CallHierarchyOutgoingCall { - /** - * The item that is called. - */ - to: CallHierarchyItem; - /** - * The range at which this item is called. This is the range relative to the caller, e.g the item - * passed to {@link CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls `provideCallHierarchyOutgoingCalls`} - * and not {@link CallHierarchyOutgoingCall.to `this.to`}. - */ - fromRanges: Range[]; -} - -/** - * The parameter of a `callHierarchy/outgoingCalls` request. - * - * @since 3.16.0 - */ -export interface CallHierarchyOutgoingCallsParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - item: CallHierarchyItem; -} - -/** - * The parameter of a `textDocument/prepareCallHierarchy` request. - * - * @since 3.16.0 - */ -export interface CallHierarchyPrepareParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; -} - -/** - * Additional information that describes document changes. - * - * @since 3.16.0 - */ -export interface ChangeAnnotation { - /** - * A human-readable string describing the actual change. The string - * is rendered prominent in the user interface. - */ - label: string; - /** - * A flag which indicates that user confirmation is needed - * before applying the change. - */ - needsConfirmation?: boolean | undefined; - /** - * A human-readable string which is rendered less prominent in - * the user interface. - */ - description?: string | undefined; -} - -/** - * An identifier to refer to a change annotation stored with a workspace edit. - */ -export type ChangeAnnotationIdentifier = string; - -/** - * A code action represents a change that can be performed in code, e.g. to fix a problem or - * to refactor code. - * - * A CodeAction must set either `edit` and/or a `command`. If both are supplied, the `edit` is applied first, then the `command` is executed. - */ -export interface CodeAction { - /** - * A short, human-readable, title for this code action. - */ - title: string; - /** - * The kind of the code action. - * - * Used to filter code actions. - */ - kind?: CodeActionKind | undefined; - /** - * The diagnostics that this code action resolves. - */ - diagnostics?: Diagnostic[] | undefined; - /** - * Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted - * by keybindings. - * - * A quick fix should be marked preferred if it properly addresses the underlying error. - * A refactoring should be marked preferred if it is the most reasonable choice of actions to take. - * - * @since 3.15.0 - */ - isPreferred?: boolean | undefined; - /** - * Marks that the code action cannot currently be applied. - * - * Clients should follow the following guidelines regarding disabled code actions: - * - * - Disabled code actions are not shown in automatic [lightbulbs](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) - * code action menus. - * - * - Disabled actions are shown as faded out in the code action menu when the user requests a more specific type - * of code action, such as refactorings. - * - * - If the user has a [keybinding](https://code.visualstudio.com/docs/editor/refactoring#_keybindings-for-code-actions) - * that auto applies a code action and only disabled code actions are returned, the client should show the user an - * error message with `reason` in the editor. - * - * @since 3.16.0 - */ - disabled?: CodeActionDisabled | undefined; - /** - * The workspace edit this code action performs. - */ - edit?: WorkspaceEdit | undefined; - /** - * A command this code action executes. If a code action - * provides an edit and a command, first the edit is - * executed and then the command. - */ - command?: Command | undefined; - /** - * A data entry field that is preserved on a code action between - * a `textDocument/codeAction` and a `codeAction/resolve` request. - * - * @since 3.16.0 - */ - data?: LSPAny | undefined; - /** - * Tags for this code action. - * - * @since 3.18.0 - */ - tags?: CodeActionTag[] | undefined; -} - -/** - * Contains additional diagnostic information about the context in which - * a {@link CodeActionProvider.provideCodeActions code action} is run. - */ -export interface CodeActionContext { - /** - * An array of diagnostics known on the client side overlapping the range provided to the - * `textDocument/codeAction` request. They are provided so that the server knows which - * errors are currently presented to the user for the given range. There is no guarantee - * that these accurately reflect the error state of the resource. The primary parameter - * to compute code actions is the provided range. - */ - diagnostics: Diagnostic[]; - /** - * Requested kind of actions to return. - * - * Actions not of this kind are filtered out by the client before being shown. So servers - * can omit computing them. - */ - only?: CodeActionKind[] | undefined; - /** - * The reason why code actions were requested. - * - * @since 3.17.0 - */ - triggerKind?: CodeActionTriggerKind | undefined; -} - -/** - * Captures why the code action is currently disabled. - * - * @since 3.18.0 - */ -export interface CodeActionDisabled { - /** - * Human readable description of why the code action is currently disabled. - * - * This is displayed in the code actions UI. - */ - reason: string; -} - -/** - * A set of predefined code action kinds - */ -export type CodeActionKind = "" | "quickfix" | "refactor" | "refactor.extract" | "refactor.inline" | "refactor.move" | "refactor.rewrite" | "source" | "source.organizeImports" | "source.fixAll" | "notebook" | string; - -/** - * The parameters of a {@link CodeActionRequest}. - */ -export interface CodeActionParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The document in which the command was invoked. - */ - textDocument: TextDocumentIdentifier; - /** - * The range for which the command was invoked. - */ - range: Range; - /** - * Context carrying additional information. - */ - context: CodeActionContext; -} - -/** - * Code action tags are extra annotations that tweak the behavior of a code action. - * - * @since 3.18.0 - */ -export type CodeActionTag = 1; - -/** - * The reason why code actions were requested. - * - * @since 3.17.0 - */ -export type CodeActionTriggerKind = 1 | 2; - -/** - * Structure to capture a description for an error code. - * - * @since 3.16.0 - */ -export interface CodeDescription { - /** - * An URI to open with more information about the diagnostic error. - */ - href: URI; -} - -/** - * A code lens represents a {@link Command command} that should be shown along with - * source text, like the number of references, a way to run tests, etc. - * - * A code lens is _unresolved_ when no command is associated to it. For performance - * reasons the creation of a code lens and resolving should be done in two stages. - */ -export interface CodeLens { - /** - * The range in which this code lens is valid. Should only span a single line. - */ - range: Range; - /** - * The command this code lens represents. - */ - command?: Command | undefined; - /** - * A data entry field that is preserved on a code lens item between - * a {@link CodeLensRequest} and a {@link CodeLensResolveRequest} - */ - data?: LSPAny | undefined; -} - -/** - * The parameters of a {@link CodeLensRequest}. - */ -export interface CodeLensParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The document to request code lens for. - */ - textDocument: TextDocumentIdentifier; -} - -/** - * Represents a reference to a command. Provides a title which - * will be used to represent a command in the UI and, optionally, - * an array of arguments which will be passed to the command handler - * function when invoked. - */ -export interface Command { - /** - * Title of the command, like `save`. - */ - title: string; - /** - * An optional tooltip. - * - * @since 3.18.0 - */ - tooltip?: string | undefined; - /** - * The identifier of the actual command handler. - */ - command: string; - /** - * Arguments that the command handler should be - * invoked with. - */ - arguments?: LSPAny[] | undefined; -} - -/** - * Contains additional information about the context in which a completion request is triggered. - */ -export interface CompletionContext { - /** - * How the completion was triggered. - */ - triggerKind: CompletionTriggerKind; - /** - * The trigger character (a single character) that has trigger code complete. - * Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter` - */ - triggerCharacter?: string | undefined; -} - -/** - * A completion item represents a text snippet that is - * proposed to complete text that is being typed. - */ -export interface CompletionItem { - /** - * The label of this completion item. - * - * The label property is also by default the text that - * is inserted when selecting this completion. - * - * If label details are provided the label itself should - * be an unqualified name of the completion item. - */ - label: string; - /** - * Additional details for the label - * - * @since 3.17.0 - */ - labelDetails?: CompletionItemLabelDetails | undefined; - /** - * The kind of this completion item. Based of the kind - * an icon is chosen by the editor. - */ - kind?: CompletionItemKind | undefined; - /** - * Tags for this completion item. - * - * @since 3.15.0 - */ - tags?: CompletionItemTag[] | undefined; - /** - * A human-readable string with additional information - * about this item, like type or symbol information. - */ - detail?: string | undefined; - /** - * A human-readable string that represents a doc-comment. - */ - documentation?: string | MarkupContent | undefined; - /** - * Indicates if this item is deprecated. - * @deprecated Use `tags` instead. - */ - deprecated?: boolean | undefined; - /** - * Select this item when showing. - * - * *Note* that only one completion item can be selected and that the - * tool / client decides which item that is. The rule is that the *first* - * item of those that match best is selected. - */ - preselect?: boolean | undefined; - /** - * A string that should be used when comparing this item - * with other items. When `falsy` the {@link CompletionItem.label label} - * is used. - */ - sortText?: string | undefined; - /** - * A string that should be used when filtering a set of - * completion items. When `falsy` the {@link CompletionItem.label label} - * is used. - */ - filterText?: string | undefined; - /** - * A string that should be inserted into a document when selecting - * this completion. When `falsy` the {@link CompletionItem.label label} - * is used. - * - * The `insertText` is subject to interpretation by the client side. - * Some tools might not take the string literally. For example - * VS Code when code complete is requested in this example - * `con` and a completion item with an `insertText` of - * `console` is provided it will only insert `sole`. Therefore it is - * recommended to use `textEdit` instead since it avoids additional client - * side interpretation. - */ - insertText?: string | undefined; - /** - * The format of the insert text. The format applies to both the - * `insertText` property and the `newText` property of a provided - * `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`. - * - * Please note that the insertTextFormat doesn't apply to - * `additionalTextEdits`. - */ - insertTextFormat?: InsertTextFormat | undefined; - /** - * How whitespace and indentation is handled during completion - * item insertion. If not provided the clients default value depends on - * the `textDocument.completion.insertTextMode` client capability. - * - * @since 3.16.0 - */ - insertTextMode?: InsertTextMode | undefined; - /** - * An {@link TextEdit edit} which is applied to a document when selecting - * this completion. When an edit is provided the value of - * {@link CompletionItem.insertText insertText} is ignored. - * - * Most editors support two different operations when accepting a completion - * item. One is to insert a completion text and the other is to replace an - * existing text with a completion text. Since this can usually not be - * predetermined by a server it can report both ranges. Clients need to - * signal support for `InsertReplaceEdits` via the - * `textDocument.completion.insertReplaceSupport` client capability - * property. - * - * *Note 1:* The text edit's range as well as both ranges from an insert - * replace edit must be a [single line] and they must contain the position - * at which completion has been requested. - * *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range - * must be a prefix of the edit's replace range, that means it must be - * contained and starting at the same position. - * - * @since 3.16.0 additional type `InsertReplaceEdit` - */ - textEdit?: TextEdit | InsertReplaceEdit | undefined; - /** - * The edit text used if the completion item is part of a CompletionList and - * CompletionList defines an item default for the text edit range. - * - * Clients will only honor this property if they opt into completion list - * item defaults using the capability `completionList.itemDefaults`. - * - * If not provided and a list's default range is provided the label - * property is used as a text. - * - * @since 3.17.0 - */ - textEditText?: string | undefined; - /** - * An optional array of additional {@link TextEdit text edits} that are applied when - * selecting this completion. Edits must not overlap (including the same insert position) - * with the main {@link CompletionItem.textEdit edit} nor with themselves. - * - * Additional text edits should be used to change text unrelated to the current cursor position - * (for example adding an import statement at the top of the file if the completion item will - * insert an unqualified type). - */ - additionalTextEdits?: TextEdit[] | undefined; - /** - * An optional set of characters that when pressed while this completion is active will accept it first and - * then type that character. *Note* that all commit characters should have `length=1` and that superfluous - * characters will be ignored. - */ - commitCharacters?: string[] | undefined; - /** - * An optional {@link Command command} that is executed *after* inserting this completion. *Note* that - * additional modifications to the current document should be described with the - * {@link CompletionItem.additionalTextEdits additionalTextEdits}-property. - */ - command?: Command | undefined; - /** - * A data entry field that is preserved on a completion item between a - * {@link CompletionRequest} and a {@link CompletionResolveRequest}. - */ - data?: LSPAny | undefined; -} - -/** - * Specifies how fields from a completion item should be combined with those - * from `completionList.itemDefaults`. - * - * If unspecified, all fields will be treated as ApplyKind.Replace. - * - * If a field's value is ApplyKind.Replace, the value from a completion item (if - * provided and not `null`) will always be used instead of the value from - * `completionItem.itemDefaults`. - * - * If a field's value is ApplyKind.Merge, the values will be merged using the rules - * defined against each field below. - * - * Servers are only allowed to return `applyKind` if the client - * signals support for this via the `completionList.applyKindSupport` - * capability. - * - * @since 3.18.0 - */ -export interface CompletionItemApplyKinds { - /** - * Specifies whether commitCharacters on a completion will replace or be - * merged with those in `completionList.itemDefaults.commitCharacters`. - * - * If ApplyKind.Replace, the commit characters from the completion item will - * always be used unless not provided, in which case those from - * `completionList.itemDefaults.commitCharacters` will be used. An - * empty list can be used if a completion item does not have any commit - * characters and also should not use those from - * `completionList.itemDefaults.commitCharacters`. - * - * If ApplyKind.Merge the commitCharacters for the completion will be the - * union of all values in both `completionList.itemDefaults.commitCharacters` - * and the completion's own `commitCharacters`. - * - * @since 3.18.0 - */ - commitCharacters?: ApplyKind | undefined; - /** - * Specifies whether the `data` field on a completion will replace or - * be merged with data from `completionList.itemDefaults.data`. - * - * If ApplyKind.Replace, the data from the completion item will be used if - * provided (and not `null`), otherwise - * `completionList.itemDefaults.data` will be used. An empty object can - * be used if a completion item does not have any data but also should - * not use the value from `completionList.itemDefaults.data`. - * - * If ApplyKind.Merge, a shallow merge will be performed between - * `completionList.itemDefaults.data` and the completion's own data - * using the following rules: - * - * - If a completion's `data` field is not provided (or `null`), the - * entire `data` field from `completionList.itemDefaults.data` will be - * used as-is. - * - If a completion's `data` field is provided, each field will - * overwrite the field of the same name in - * `completionList.itemDefaults.data` but no merging of nested fields - * within that value will occur. - * - * @since 3.18.0 - */ - data?: ApplyKind | undefined; -} - -/** - * In many cases the items of an actual completion result share the same - * value for properties like `commitCharacters` or the range of a text - * edit. A completion list can therefore define item defaults which will - * be used if a completion item itself doesn't specify the value. - * - * If a completion list specifies a default value and a completion item - * also specifies a corresponding value, the rules for combining these are - * defined by `applyKinds` (if the client supports it), defaulting to - * ApplyKind.Replace. - * - * Servers are only allowed to return default values if the client - * signals support for this via the `completionList.itemDefaults` - * capability. - * - * @since 3.17.0 - */ -export interface CompletionItemDefaults { - /** - * A default commit character set. - * - * @since 3.17.0 - */ - commitCharacters?: string[] | undefined; - /** - * A default edit range. - * - * @since 3.17.0 - */ - editRange?: Range | EditRangeWithInsertReplace | undefined; - /** - * A default insert text format. - * - * @since 3.17.0 - */ - insertTextFormat?: InsertTextFormat | undefined; - /** - * A default insert text mode. - * - * @since 3.17.0 - */ - insertTextMode?: InsertTextMode | undefined; - /** - * A default data value. - * - * @since 3.17.0 - */ - data?: LSPAny | undefined; -} - -/** - * The kind of a completion entry. - */ -export type CompletionItemKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25; - -/** - * Additional details for a completion item label. - * - * @since 3.17.0 - */ -export interface CompletionItemLabelDetails { - /** - * An optional string which is rendered less prominently directly after {@link CompletionItem.label label}, - * without any spacing. Should be used for function signatures and type annotations. - */ - detail?: string | undefined; - /** - * An optional string which is rendered less prominently after {@link CompletionItem.detail}. Should be used - * for fully qualified names and file paths. - */ - description?: string | undefined; -} - -/** - * Completion item tags are extra annotations that tweak the rendering of a completion - * item. - * - * @since 3.15.0 - */ -export type CompletionItemTag = 1; - -/** - * Represents a collection of {@link CompletionItem completion items} to be presented - * in the editor. - */ -export interface CompletionList { - /** - * This list it not complete. Further typing results in recomputing this list. - * - * Recomputed lists have all their items replaced (not appended) in the - * incomplete completion sessions. - */ - isIncomplete: boolean; - /** - * In many cases the items of an actual completion result share the same - * value for properties like `commitCharacters` or the range of a text - * edit. A completion list can therefore define item defaults which will - * be used if a completion item itself doesn't specify the value. - * - * If a completion list specifies a default value and a completion item - * also specifies a corresponding value, the rules for combining these are - * defined by `applyKinds` (if the client supports it), defaulting to - * ApplyKind.Replace. - * - * Servers are only allowed to return default values if the client - * signals support for this via the `completionList.itemDefaults` - * capability. - * - * @since 3.17.0 - */ - itemDefaults?: CompletionItemDefaults | undefined; - /** - * Specifies how fields from a completion item should be combined with those - * from `completionList.itemDefaults`. - * - * If unspecified, all fields will be treated as ApplyKind.Replace. - * - * If a field's value is ApplyKind.Replace, the value from a completion item - * (if provided and not `null`) will always be used instead of the value - * from `completionItem.itemDefaults`. - * - * If a field's value is ApplyKind.Merge, the values will be merged using - * the rules defined against each field below. - * - * Servers are only allowed to return `applyKind` if the client - * signals support for this via the `completionList.applyKindSupport` - * capability. - * - * @since 3.18.0 - */ - applyKind?: CompletionItemApplyKinds | undefined; - /** - * The completion items. - */ - items: CompletionItem[]; -} - -/** - * Completion parameters - */ -export interface CompletionParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The completion context. This is only available it the client specifies - * to send this using the client capability `textDocument.completion.contextSupport === true` - */ - context?: CompletionContext | undefined; -} - -/** - * How a completion was triggered - */ -export type CompletionTriggerKind = 1 | 2 | 3; - -/** - * Create file operation. - */ -export interface CreateFile { - /** - * A create - */ - kind: "create"; - /** - * An optional annotation identifier describing the operation. - * - * @since 3.16.0 - */ - annotationId?: ChangeAnnotationIdentifier | undefined; - /** - * The resource to create. - */ - uri: DocumentUri; - /** - * Additional options - */ - options?: CreateFileOptions | undefined; -} - -/** - * Options to create a file. - */ -export interface CreateFileOptions { - /** - * Overwrite existing file. Overwrite wins over `ignoreIfExists` - */ - overwrite?: boolean | undefined; - /** - * Ignore if exists. - */ - ignoreIfExists?: boolean | undefined; -} - -/** - * The definition of a symbol represented as one or many {@link Location locations}. - * For most programming languages there is only one location at which a symbol is - * defined. - * - * Servers should prefer returning `DefinitionLink` over `Definition` if supported - * by the client. - */ -export type Definition = Location | Location[]; - -/** - * Information about where a symbol is defined. - * - * Provides additional metadata over normal {@link Location location} definitions, including the range of - * the defining symbol - */ -export type DefinitionLink = LocationLink; - -/** - * Parameters for a {@link DefinitionRequest}. - */ -export interface DefinitionParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; -} - -/** - * Delete file operation - */ -export interface DeleteFile { - /** - * A delete - */ - kind: "delete"; - /** - * An optional annotation identifier describing the operation. - * - * @since 3.16.0 - */ - annotationId?: ChangeAnnotationIdentifier | undefined; - /** - * The file to delete. - */ - uri: DocumentUri; - /** - * Delete options. - */ - options?: DeleteFileOptions | undefined; -} - -/** - * Delete file options - */ -export interface DeleteFileOptions { - /** - * Delete the content recursively if a folder is denoted. - */ - recursive?: boolean | undefined; - /** - * Ignore the operation if the file doesn't exist. - */ - ignoreIfNotExists?: boolean | undefined; -} - -/** - * Represents a diagnostic, such as a compiler error or warning. Diagnostic objects - * are only valid in the scope of a resource. - */ -export interface Diagnostic { - /** - * The range at which the message applies - */ - range: Range; - /** - * The diagnostic's severity. To avoid interpretation mismatches when a - * server is used with different clients it is highly recommended that servers - * always provide a severity value. - */ - severity?: DiagnosticSeverity | undefined; - /** - * The diagnostic's code, which usually appear in the user interface. - */ - code?: number | string | undefined; - /** - * An optional property to describe the error code. - * Requires the code field (above) to be present/not null. - * - * @since 3.16.0 - */ - codeDescription?: CodeDescription | undefined; - /** - * A human-readable string describing the source of this - * diagnostic, e.g. 'typescript' or 'super lint'. It usually - * appears in the user interface. - */ - source?: string | undefined; - /** - * The diagnostic's message. It usually appears in the user interface. - * - * @since 3.18.0 - support for MarkupContent. This is guarded by the client - * capability `textDocument.diagnostic.markupMessageSupport`. - */ - message: string | MarkupContent; - /** - * Additional metadata about the diagnostic. - * - * @since 3.15.0 - */ - tags?: DiagnosticTag[] | undefined; - /** - * An array of related diagnostic information, e.g. when symbol-names within - * a scope collide all definitions can be marked via this property. - */ - relatedInformation?: DiagnosticRelatedInformation[] | undefined; - /** - * A data entry field that is preserved between a `textDocument/publishDiagnostics` - * notification and `textDocument/codeAction` request. - * - * @since 3.16.0 - */ - data?: LSPAny | undefined; -} - -/** - * Represents a related message and source code location for a diagnostic. This should be - * used to point to code locations that cause or related to a diagnostics, e.g when duplicating - * a symbol in a scope. - */ -export interface DiagnosticRelatedInformation { - /** - * The location of this related diagnostic information. - */ - location: Location; - /** - * The message of this related diagnostic information. - */ - message: string; -} - -/** - * The diagnostic's severity. - */ -export type DiagnosticSeverity = 1 | 2 | 3 | 4; - -/** - * The diagnostic tags. - * - * @since 3.15.0 - */ -export type DiagnosticTag = 1 | 2; - -/** - * Parameters of the document diagnostic request. - * - * @since 3.17.0 - */ -export interface DocumentDiagnosticParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The additional identifier provided during registration. - */ - identifier?: string | undefined; - /** - * The result id of a previous response if provided. - */ - previousResultId?: string | undefined; -} - -/** - * The result of a document diagnostic pull request. A report can - * either be a full report containing all diagnostics for the - * requested document or an unchanged report indicating that nothing - * has changed in terms of diagnostics in comparison to the last - * pull request. - * - * @since 3.17.0 - */ -export type DocumentDiagnosticReport = RelatedFullDocumentDiagnosticReport | RelatedUnchangedDocumentDiagnosticReport; - -/** - * The parameters of a {@link DocumentFormattingRequest}. - */ -export interface DocumentFormattingParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * The document to format. - */ - textDocument: TextDocumentIdentifier; - /** - * The format options. - */ - options: FormattingOptions; -} - -/** - * A document highlight is a range inside a text document which deserves - * special attention. Usually a document highlight is visualized by changing - * the background color of its range. - */ -export interface DocumentHighlight { - /** - * The range this highlight applies to. - */ - range: Range; - /** - * The highlight kind, default is {@link DocumentHighlightKind.Text text}. - */ - kind?: DocumentHighlightKind | undefined; -} - -/** - * A document highlight kind. - */ -export type DocumentHighlightKind = 1 | 2 | 3; - -/** - * Parameters for a {@link DocumentHighlightRequest}. - */ -export interface DocumentHighlightParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; -} - -/** - * The parameters of a {@link DocumentOnTypeFormattingRequest}. - */ -export interface DocumentOnTypeFormattingParams { - /** - * The document to format. - */ - textDocument: TextDocumentIdentifier; - /** - * The position around which the on type formatting should happen. - * This is not necessarily the exact position where the character denoted - * by the property `ch` got typed. - */ - position: Position; - /** - * The character that has been typed that triggered the formatting - * on type request. That is not necessarily the last character that - * got inserted into the document since the client could auto insert - * characters as well (e.g. like automatic brace completion). - */ - ch: string; - /** - * The formatting options. - */ - options: FormattingOptions; -} - -/** - * The parameters of a {@link DocumentRangeFormattingRequest}. - */ -export interface DocumentRangeFormattingParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * The document to format. - */ - textDocument: TextDocumentIdentifier; - /** - * The range to format - */ - range: Range; - /** - * The format options - */ - options: FormattingOptions; -} - -/** - * Represents programming constructs like variables, classes, interfaces etc. - * that appear in a document. Document symbols can be hierarchical and they - * have two ranges: one that encloses its definition and one that points to - * its most interesting range, e.g. the range of an identifier. - */ -export interface DocumentSymbol { - /** - * The name of this symbol. Will be displayed in the user interface and therefore must not be - * an empty string or a string only consisting of white spaces. - */ - name: string; - /** - * More detail for this symbol, e.g the signature of a function. - */ - detail?: string | undefined; - /** - * The kind of this symbol. - */ - kind: SymbolKind; - /** - * Tags for this document symbol. - * - * @since 3.16.0 - */ - tags?: SymbolTag[] | undefined; - /** - * Indicates if this symbol is deprecated. - * - * @deprecated Use tags instead - */ - deprecated?: boolean | undefined; - /** - * The range enclosing this symbol not including leading/trailing whitespace but everything else - * like comments. This information is typically used to determine if the clients cursor is - * inside the symbol to reveal in the symbol in the UI. - */ - range: Range; - /** - * The range that should be selected and revealed when this symbol is being picked, e.g the name of a function. - * Must be contained by the `range`. - */ - selectionRange: Range; - /** - * Children of this symbol, e.g. properties of a class. - */ - children?: DocumentSymbol[] | undefined; -} - -/** - * Parameters for a {@link DocumentSymbolRequest}. - */ -export interface DocumentSymbolParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; -} - -export type DocumentUri = string; - -/** - * Edit range variant that includes ranges for insert and replace operations. - * - * @since 3.18.0 - */ -export interface EditRangeWithInsertReplace { - insert: Range; - replace: Range; -} - -/** - * Represents a folding range. To be valid, start and end line must be bigger than zero and smaller - * than the number of lines in the document. Clients are free to ignore invalid ranges. - */ -export interface FoldingRange { - /** - * The zero-based start line of the range to fold. The folded area starts after the line's last character. - * To be valid, the end must be zero or larger and smaller than the number of lines in the document. - */ - startLine: number; - /** - * The zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line. - */ - startCharacter?: number | undefined; - /** - * The zero-based end line of the range to fold. The folded area ends with the line's last character. - * To be valid, the end must be zero or larger and smaller than the number of lines in the document. - */ - endLine: number; - /** - * The zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line. - */ - endCharacter?: number | undefined; - /** - * Describes the kind of the folding range such as 'comment' or 'region'. The kind - * is used to categorize folding ranges and used by commands like 'Fold all comments'. - * See {@link FoldingRangeKind} for an enumeration of standardized kinds. - */ - kind?: FoldingRangeKind | undefined; - /** - * The text that the client should show when the specified range is - * collapsed. If not defined or not supported by the client, a default - * will be chosen by the client. - * - * @since 3.17.0 - */ - collapsedText?: string | undefined; -} - -/** - * A set of predefined range kinds. - */ -export type FoldingRangeKind = "comment" | "imports" | "region" | string; - -/** - * Parameters for a {@link FoldingRangeRequest}. - */ -export interface FoldingRangeParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; -} - -/** - * Value-object describing what options formatting should use. - */ -export interface FormattingOptions { - /** - * Size of a tab in spaces. - */ - tabSize: number; - /** - * Prefer spaces over tabs. - */ - insertSpaces: boolean; - /** - * Trim trailing whitespace on a line. - * - * @since 3.15.0 - */ - trimTrailingWhitespace?: boolean | undefined; - /** - * Insert a newline character at the end of the file if one does not exist. - * - * @since 3.15.0 - */ - insertFinalNewline?: boolean | undefined; - /** - * Trim all newlines after the final newline at the end of the file. - * - * @since 3.15.0 - */ - trimFinalNewlines?: boolean | undefined; - [key: string]: boolean | number | string | undefined; -} - -/** - * A diagnostic report with a full set of problems. - * - * @since 3.17.0 - */ -export interface FullDocumentDiagnosticReport { - /** - * A full document diagnostic report. - */ - kind: "full"; - /** - * An optional result id. If provided it will - * be sent on the next diagnostic request for the - * same document. - */ - resultId?: string | undefined; - /** - * The actual items. - */ - items: Diagnostic[]; -} - -/** - * The result of a hover request. - */ -export interface Hover { - /** - * The hover's content - */ - contents: MarkupContent | MarkedString | MarkedString[]; - /** - * An optional range inside the text document that is used to - * visualize the hover, e.g. by changing the background color. - */ - range?: Range | undefined; - /** - * Whether the verbosity level can be increased for this hover. - */ - canIncreaseVerbosity?: boolean | undefined; - /** - * VS-specific rich content (symbol icon + colorized/classified text) rendered by clients that support Visual Studio extensions, in place of `contents`. - */ - _vs_rawContent?: VSContainerElement | undefined; -} - -/** - * Parameters for a {@link HoverRequest}. - */ -export interface HoverParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * Controls how many levels of type definitions will be expanded. Default is 0. - */ - verbosityLevel?: number | undefined; -} - -export interface ImplementationParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; -} - -/** - * Inlay hint information. - * - * @since 3.17.0 - */ -export interface InlayHint { - /** - * The position of this hint. - * - * If multiple hints have the same position, they will be shown in the order - * they appear in the response. - */ - position: Position; - /** - * The label of this hint. A human readable string or an array of - * InlayHintLabelPart label parts. - * - * *Note* that neither the string nor the label part can be empty. - */ - label: string | InlayHintLabelPart[]; - /** - * The kind of this hint. Can be omitted in which case the client - * should fall back to a reasonable default. - */ - kind?: InlayHintKind | undefined; - /** - * Optional text edits that are performed when accepting this inlay hint. - * - * *Note* that edits are expected to change the document so that the inlay - * hint (or its nearest variant) is now part of the document and the inlay - * hint itself is now obsolete. - */ - textEdits?: TextEdit[] | undefined; - /** - * The tooltip text when you hover over this item. - */ - tooltip?: string | MarkupContent | undefined; - /** - * Render padding before the hint. - * - * Note: Padding should use the editor's background color, not the - * background color of the hint itself. That means padding can be used - * to visually align/separate an inlay hint. - */ - paddingLeft?: boolean | undefined; - /** - * Render padding after the hint. - * - * Note: Padding should use the editor's background color, not the - * background color of the hint itself. That means padding can be used - * to visually align/separate an inlay hint. - */ - paddingRight?: boolean | undefined; - /** - * A data entry field that is preserved on an inlay hint between - * a `textDocument/inlayHint` and a `inlayHint/resolve` request. - */ - data?: LSPAny | undefined; -} - -/** - * Inlay hint kinds. - * - * @since 3.17.0 - */ -export type InlayHintKind = 1 | 2; - -/** - * An inlay hint label part allows for interactive and composite labels - * of inlay hints. - * - * @since 3.17.0 - */ -export interface InlayHintLabelPart { - /** - * The value of this label part. - */ - value: string; - /** - * The tooltip text when you hover over this label part. Depending on - * the client capability `inlayHint.resolveSupport` clients might resolve - * this property late using the resolve request. - */ - tooltip?: string | MarkupContent | undefined; - /** - * An optional source code location that represents this - * label part. - * - * The editor will use this location for the hover and for code navigation - * features: This part will become a clickable link that resolves to the - * definition of the symbol at the given location (not necessarily the - * location itself), it shows the hover that shows at the given location, - * and it shows a context menu with further code navigation commands. - * - * Depending on the client capability `inlayHint.resolveSupport` clients - * might resolve this property late using the resolve request. - */ - location?: Location | undefined; - /** - * An optional command for this label part. - * - * Depending on the client capability `inlayHint.resolveSupport` clients - * might resolve this property late using the resolve request. - */ - command?: Command | undefined; -} - -/** - * A parameter literal used in inlay hint requests. - * - * @since 3.17.0 - */ -export interface InlayHintParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The document range for which inlay hints should be computed. - */ - range: Range; -} - -/** - * A special text edit to provide an insert and a replace operation. - * - * @since 3.16.0 - */ -export interface InsertReplaceEdit { - /** - * The string to be inserted. - */ - newText: string; - /** - * The range if the insert is requested - */ - insert: Range; - /** - * The range if the replace is requested. - */ - replace: Range; -} - -/** - * Defines whether the insert text in a completion item should be interpreted as - * plain text or a snippet. - */ -export type InsertTextFormat = 1 | 2; - -/** - * How whitespace and indentation is handled during completion - * item insertion. - * - * @since 3.16.0 - */ -export type InsertTextMode = 1 | 2; - -/** - * The LSP any type. - * Please note that strictly speaking a property with the value `undefined` - * can't be converted into JSON preserving the property name. However for - * convenience it is allowed and assumed that all these properties are - * optional as well. - * @since 3.17.0 - */ -export type LSPAny = LSPObject | LSPArray | string | number | boolean | null; - -/** - * LSP arrays. - * @since 3.17.0 - */ -export type LSPArray = LSPAny[]; - -/** - * LSP object definition. - * @since 3.17.0 - */ -export type LSPObject = { [key: string]: LSPAny; }; - -export interface LinkedEditingRangeParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; -} - -/** - * The result of a linked editing range request. - * - * @since 3.16.0 - */ -export interface LinkedEditingRanges { - /** - * A list of ranges that can be edited together. The ranges must have - * identical length and contain identical text content. The ranges cannot overlap. - */ - ranges: Range[]; - /** - * An optional word pattern (regular expression) that describes valid contents for - * the given ranges. If no pattern is provided, the client configuration's word - * pattern will be used. - */ - wordPattern?: string | undefined; -} - -/** - * Represents a location inside a resource, such as a line - * inside a text file. - */ -export interface Location { - uri: DocumentUri; - range: Range; -} - -/** - * Represents the connection of two locations. Provides additional metadata over normal {@link Location locations}, - * including an origin range. - */ -export interface LocationLink { - /** - * Span of the origin of this link. - * - * Used as the underlined span for mouse interaction. Defaults to the word range at - * the definition position. - */ - originSelectionRange?: Range | undefined; - /** - * The target resource identifier of this link. - */ - targetUri: DocumentUri; - /** - * The full target range of this link. If the target for example is a symbol then target range is the - * range enclosing this symbol not including leading/trailing whitespace but everything else - * like comments. This information is typically used to highlight the range in the editor. - */ - targetRange: Range; - /** - * The range that should be selected and revealed when this link is being followed, e.g the name of a function. - * Must be contained by the `targetRange`. See also `DocumentSymbol#range` - */ - targetSelectionRange: Range; -} - -/** - * Location with only uri and does not include range. - * - * @since 3.18.0 - */ -export interface LocationUriOnly { - uri: DocumentUri; -} - -/** - * MarkedString can be used to render human readable text. It is either a markdown string - * or a code-block that provides a language and a code snippet. The language identifier - * is semantically equal to the optional language identifier in fenced code blocks in GitHub - * issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting - * - * The pair of a language and a value is an equivalent to markdown: - * ```${language} - * ${value} - * ``` - * - * Note that markdown strings will be sanitized - that means html will be escaped. - * @deprecated use MarkupContent instead. - */ -export type MarkedString = string | MarkedStringWithLanguage; - -/** - * @since 3.18.0 - * @deprecated use MarkupContent instead. - */ -export interface MarkedStringWithLanguage { - language: string; - value: string; -} - -/** - * A `MarkupContent` literal represents a string value which content is interpreted base on its - * kind flag. Currently the protocol supports `plaintext` and `markdown` as markup kinds. - * - * If the kind is `markdown` then the value can contain fenced code blocks like in GitHub issues. - * See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting - * - * Here is an example how such a string can be constructed using JavaScript / TypeScript: - * ```ts - * let markdown: MarkdownContent = { - * kind: MarkupKind.Markdown, - * value: [ - * '# Header', - * 'Some text', - * '```typescript', - * 'someCode();', - * '```' - * ].join('\n') - * }; - * ``` - * - * *Please Note* that clients might sanitize the return markdown. A client could decide to - * remove HTML from the markdown to avoid script execution. - */ -export interface MarkupContent { - /** - * The type of the Markup - */ - kind: MarkupKind; - /** - * The content itself - */ - value: string; -} - -/** - * Describes the content type that a client supports in various - * result literals like `Hover`, `ParameterInfo` or `CompletionItem`. - * - * Please note that `MarkupKinds` must not start with a `$`. This kinds - * are reserved for internal usage. - */ -export type MarkupKind = "plaintext" | "markdown"; - -/** - * Represents a collection of document highlights from a single document, used in multi-document highlight responses. - */ -export interface MultiDocumentHighlight { - /** - * The URI of the document containing the highlights. - */ - uri: DocumentUri; - /** - * The highlights for the document. - */ - highlights: DocumentHighlight[]; -} - -/** - * Parameters for the custom/textDocument/multiDocumentHighlight request. - */ -export interface MultiDocumentHighlightParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * The list of file URIs to search for highlights across. - */ - filesToSearch: DocumentUri[]; -} - -/** - * A text document identifier to optionally denote a specific version of a text document. - */ -export interface OptionalVersionedTextDocumentIdentifier { - /** - * The text document's uri. - */ - uri: DocumentUri; - /** - * The version number of this document. If a versioned text document identifier - * is sent from the server to the client and the file is not open in the editor - * (the server has not received an open notification before) the server can send - * `null` to indicate that the version is unknown and the content on disk is the - * truth (as specified with document content ownership). - */ - version: number | null; -} - -/** - * Represents a parameter of a callable-signature. A parameter can - * have a label and a doc-comment. - */ -export interface ParameterInformation { - /** - * The label of this parameter information. - * - * Either a string or an inclusive start and exclusive end offsets within its containing - * signature label. (see SignatureInformation.label). The offsets are based on a UTF-16 - * string representation as `Position` and `Range` does. - * - * To avoid ambiguities a server should use the [start, end] offset value instead of using - * a substring. Whether a client support this is controlled via `labelOffsetSupport` client - * capability. - * - * *Note*: a label of type string should be a substring of its containing signature label. - * Its intended use case is to highlight the parameter label part in the `SignatureInformation.label`. - */ - label: string | [number, number]; - /** - * The human-readable doc-comment of this parameter. Will be shown - * in the UI but can be omitted. - */ - documentation?: string | MarkupContent | undefined; -} - -/** - * Position in a text document expressed as zero-based line and character - * offset. Prior to 3.17 the offsets were always based on a UTF-16 string - * representation. So a string of the form `a𐐀b` the character offset of the - * character `a` is 0, the character offset of `𐐀` is 1 and the character - * offset of b is 3 since `𐐀` is represented using two code units in UTF-16. - * Since 3.17 clients and servers can agree on a different string encoding - * representation (e.g. UTF-8). The client announces it's supported encoding - * via the client capability [`general.positionEncodings`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#clientCapabilities). - * The value is an array of position encodings the client supports, with - * decreasing preference (e.g. the encoding at index `0` is the most preferred - * one). To stay backwards compatible the only mandatory encoding is UTF-16 - * represented via the string `utf-16`. The server can pick one of the - * encodings offered by the client and signals that encoding back to the - * client via the initialize result's property - * [`capabilities.positionEncoding`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#serverCapabilities). If the string value - * `utf-16` is missing from the client's capability `general.positionEncodings` - * servers can safely assume that the client supports UTF-16. If the server - * omits the position encoding in its initialize result the encoding defaults - * to the string value `utf-16`. Implementation considerations: since the - * conversion from one encoding into another requires the content of the - * file / line the conversion is best done where the file is read which is - * usually on the server side. - * - * Positions are line end character agnostic. So you can not specify a position - * that denotes `\r|\n` or `\n|` where `|` represents the character offset. - * - * @since 3.17.0 - support for negotiated position encoding. - */ -export interface Position { - /** - * Line position in a document (zero-based). - */ - line: number; - /** - * Character offset on a line in a document (zero-based). - * - * The meaning of this offset is determined by the negotiated - * `PositionEncodingKind`. - */ - character: number; -} - -/** - * @since 3.18.0 - */ -export interface PrepareRenameDefaultBehavior { - defaultBehavior: boolean; -} - -export interface PrepareRenameParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; -} - -/** - * @since 3.18.0 - */ -export interface PrepareRenamePlaceholder { - range: Range; - placeholder: string; -} - -export type PrepareRenameResult = Range | PrepareRenamePlaceholder | PrepareRenameDefaultBehavior; - -export type ProgressToken = number | string; - -/** - * A range in a text document expressed as (zero-based) start and end positions. - * - * If you want to specify a range that contains a line including the line ending - * character(s) then use an end position denoting the start of the next line. - * For example: - * ```ts - * { - * start: { line: 5, character: 23 } - * end : { line 6, character : 0 } - * } - * ``` - */ -export interface Range { - /** - * The range's start position. - */ - start: Position; - /** - * The range's end position. - */ - end: Position; -} - -/** - * Value-object that contains additional information when - * requesting references. - */ -export interface ReferenceContext { - /** - * Include the declaration of the current symbol. - */ - includeDeclaration: boolean; -} - -/** - * Parameters for a {@link ReferencesRequest}. - */ -export interface ReferenceParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - context: ReferenceContext; -} - -/** - * A full diagnostic report with a set of related documents. - * - * @since 3.17.0 - */ -export interface RelatedFullDocumentDiagnosticReport { - /** - * A full document diagnostic report. - */ - kind: "full"; - /** - * An optional result id. If provided it will - * be sent on the next diagnostic request for the - * same document. - */ - resultId?: string | undefined; - /** - * The actual items. - */ - items: Diagnostic[]; - /** - * Diagnostics of related documents. This information is useful - * in programming languages where code in a file A can generate - * diagnostics in a file B which A depends on. An example of - * such a language is C/C++ where marco definitions in a file - * a.cpp and result in errors in a header file b.hpp. - * - * @since 3.17.0 - */ - relatedDocuments?: { [key: DocumentUri]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; } | undefined; -} - -/** - * An unchanged diagnostic report with a set of related documents. - * - * @since 3.17.0 - */ -export interface RelatedUnchangedDocumentDiagnosticReport { - /** - * A document diagnostic report indicating - * no changes to the last result. A server can - * only return `unchanged` if result ids are - * provided. - */ - kind: "unchanged"; - /** - * A result id which will be sent on the next - * diagnostic request for the same document. - */ - resultId: string; - /** - * Diagnostics of related documents. This information is useful - * in programming languages where code in a file A can generate - * diagnostics in a file B which A depends on. An example of - * such a language is C/C++ where marco definitions in a file - * a.cpp and result in errors in a header file b.hpp. - * - * @since 3.17.0 - */ - relatedDocuments?: { [key: DocumentUri]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; } | undefined; -} - -/** - * Rename file operation - */ -export interface RenameFile { - /** - * A rename - */ - kind: "rename"; - /** - * An optional annotation identifier describing the operation. - * - * @since 3.16.0 - */ - annotationId?: ChangeAnnotationIdentifier | undefined; - /** - * The old (existing) location. - */ - oldUri: DocumentUri; - /** - * The new location. - */ - newUri: DocumentUri; - /** - * Rename options. - */ - options?: RenameFileOptions | undefined; -} - -/** - * Rename file options - */ -export interface RenameFileOptions { - /** - * Overwrite target if existing. Overwrite wins over `ignoreIfExists` - */ - overwrite?: boolean | undefined; - /** - * Ignores if target exists. - */ - ignoreIfExists?: boolean | undefined; -} - -/** - * The parameters of a {@link RenameRequest}. - */ -export interface RenameParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * The new name of the symbol. If the given name is not valid the - * request must return a {@link ResponseError} with an - * appropriate message set. - */ - newName: string; -} - -/** - * A selection range represents a part of a selection hierarchy. A selection range - * may have a parent selection range that contains it. - */ -export interface SelectionRange { - /** - * The {@link Range range} of this selection range. - */ - range: Range; - /** - * The parent selection range containing this range. Therefore `parent.range` must contain `this.range`. - */ - parent?: SelectionRange | undefined; -} - -/** - * A parameter literal used in selection range requests. - */ -export interface SelectionRangeParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The positions inside the text document. - */ - positions: Position[]; -} - -/** - * @since 3.16.0 - */ -export interface SemanticTokens { - /** - * An optional result id. If provided and clients support delta updating - * the client will include the result id in the next semantic token request. - * A server can then instead of computing all semantic tokens again simply - * send a delta. - */ - resultId?: string | undefined; - /** - * The actual tokens. - */ - data: number[]; -} - -/** - * @since 3.16.0 - */ -export interface SemanticTokensParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; -} - -/** - * @since 3.16.0 - */ -export interface SemanticTokensRangeParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The range the semantic tokens are requested for. - */ - range: Range; -} - -/** - * Signature help represents the signature of something - * callable. There can be multiple signature but only one - * active and only one active parameter. - */ -export interface SignatureHelp { - /** - * One or more signatures. - */ - signatures: SignatureInformation[]; - /** - * The active signature. If omitted or the value lies outside the - * range of `signatures` the value defaults to zero or is ignored if - * the `SignatureHelp` has no signatures. - * - * Whenever possible implementors should make an active decision about - * the active signature and shouldn't rely on a default value. - * - * In future version of the protocol this property might become - * mandatory to better express this. - */ - activeSignature?: number | undefined; - /** - * The active parameter of the active signature. - * - * If `null`, no parameter of the signature is active (for example a named - * argument that does not match any declared parameters). This is only valid - * if the client specifies the client capability - * `textDocument.signatureHelp.noActiveParameterSupport === true` - * - * If omitted or the value lies outside the range of - * `signatures[activeSignature].parameters` defaults to 0 if the active - * signature has parameters. - * - * If the active signature has no parameters it is ignored. - * - * In future version of the protocol this property might become - * mandatory (but still nullable) to better express the active parameter if - * the active signature does have any. - * - * Since version 3.16.0 the `SignatureInformation` itself provides a - * `activeParameter` property and it should be used instead of this one. - */ - activeParameter?: number | null | undefined; -} - -/** - * Additional information about the context in which a signature help request was triggered. - * - * @since 3.15.0 - */ -export interface SignatureHelpContext { - /** - * Action that caused signature help to be triggered. - */ - triggerKind: SignatureHelpTriggerKind; - /** - * Character that caused signature help to be triggered. - * - * This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter` - */ - triggerCharacter?: string | undefined; - /** - * `true` if signature help was already showing when it was triggered. - * - * Retriggers occurs when the signature help is already active and can be caused by actions such as - * typing a trigger character, a cursor move, or document content changes. - */ - isRetrigger: boolean; - /** - * The currently active `SignatureHelp`. - * - * The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on - * the user navigating through available signatures. - */ - activeSignatureHelp?: SignatureHelp | undefined; -} - -/** - * Parameters for a {@link SignatureHelpRequest}. - */ -export interface SignatureHelpParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * The signature help context. This is only available if the client specifies - * to send this using the client capability `textDocument.signatureHelp.contextSupport === true` - * - * @since 3.15.0 - */ - context?: SignatureHelpContext | undefined; -} - -/** - * How a signature help was triggered. - * - * @since 3.15.0 - */ -export type SignatureHelpTriggerKind = 1 | 2 | 3; - -/** - * Represents the signature of something callable. A signature - * can have a label, like a function-name, a doc-comment, and - * a set of parameters. - */ -export interface SignatureInformation { - /** - * The label of this signature. Will be shown in - * the UI. - */ - label: string; - /** - * The human-readable doc-comment of this signature. Will be shown - * in the UI but can be omitted. - */ - documentation?: string | MarkupContent | undefined; - /** - * The parameters of this signature. - */ - parameters?: ParameterInformation[] | undefined; - /** - * The index of the active parameter. - * - * If `null`, no parameter of the signature is active (for example a named - * argument that does not match any declared parameters). This is only valid - * if the client specifies the client capability - * `textDocument.signatureHelp.noActiveParameterSupport === true` - * - * If provided (or `null`), this is used in place of - * `SignatureHelp.activeParameter`. - * - * @since 3.16.0 - */ - activeParameter?: number | null | undefined; - /** - * A colorized label for the signature, providing classified text runs for VS syntax coloring. - */ - _vs_colorizedLabel?: VSClassifiedTextElement | undefined; -} - -/** - * An interactive text edit. - * - * @since 3.18.0 - */ -export interface SnippetTextEdit { - /** - * The range of the text document to be manipulated. - */ - range: Range; - /** - * The snippet to be inserted. - */ - snippet: StringValue; - /** - * The actual identifier of the snippet edit. - */ - annotationId?: ChangeAnnotationIdentifier | undefined; -} - -/** - * A string value used as a snippet is a template which allows to insert text - * and to control the editor cursor when insertion happens. - * - * A snippet can define tab stops and placeholders with `$1`, `$2` - * and `${3:foo}`. `$0` defines the final tab stop, it defaults to - * the end of the snippet. Variables are defined with `$name` and - * `${name:default value}`. - * - * @since 3.18.0 - */ -export interface StringValue { - /** - * The kind of string value. - */ - kind: "snippet"; - /** - * The snippet string. - */ - value: string; -} - -/** - * Represents information about programming constructs like variables, classes, - * interfaces etc. - */ -export interface SymbolInformation { - /** - * The name of this symbol. - */ - name: string; - /** - * The kind of this symbol. - */ - kind: SymbolKind; - /** - * Tags for this symbol. - * - * @since 3.16.0 - */ - tags?: SymbolTag[] | undefined; - /** - * The name of the symbol containing this symbol. This information is for - * user interface purposes (e.g. to render a qualifier in the user interface - * if necessary). It can't be used to re-infer a hierarchy for the document - * symbols. - */ - containerName?: string | undefined; - /** - * Indicates if this symbol is deprecated. - * - * @deprecated Use tags instead - */ - deprecated?: boolean | undefined; - /** - * The location of this symbol. The location's range is used by a tool - * to reveal the location in the editor. If the symbol is selected in the - * tool the range's start information is used to position the cursor. So - * the range usually spans more than the actual symbol's name and does - * normally include things like visibility modifiers. - * - * The range doesn't have to denote a node range in the sense of an abstract - * syntax tree. It can therefore not be used to re-construct a hierarchy of - * the symbols. - */ - location: Location; -} - -/** - * A symbol kind. - */ -export type SymbolKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26; - -/** - * Symbol tags are extra annotations that tweak the rendering of a symbol. - * - * @since 3.16 - */ -export type SymbolTag = 1; - -/** - * Describes textual changes on a text document. A TextDocumentEdit describes all changes - * on a document version Si and after they are applied move the document to version Si+1. - * So the creator of a TextDocumentEdit doesn't need to sort the array of edits or do any - * kind of ordering. However the edits must be non overlapping. - */ -export interface TextDocumentEdit { - /** - * The text document to change. - */ - textDocument: OptionalVersionedTextDocumentIdentifier; - /** - * The edits to be applied. - * - * @since 3.16.0 - support for AnnotatedTextEdit. This is guarded using a - * client capability. - * - * @since 3.18.0 - support for SnippetTextEdit. This is guarded using a - * client capability. - */ - edits: (TextEdit | AnnotatedTextEdit | SnippetTextEdit)[]; -} - -/** - * A literal to identify a text document in the client. - */ -export interface TextDocumentIdentifier { - /** - * The text document's uri. - */ - uri: DocumentUri; -} - -/** - * A parameter literal used in requests to pass a text document and a position inside that - * document. - */ -export interface TextDocumentPositionParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; -} - -/** - * A text edit applicable to a text document. - */ -export interface TextEdit { - /** - * The range of the text document to be manipulated. To insert - * text into a document create a range where start === end. - */ - range: Range; - /** - * The string to be inserted. For delete operations use an - * empty string. - */ - newText: string; -} - -export interface TypeDefinitionParams { - /** - * The text document. - */ - textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - position: Position; - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; -} - -export type URI = string; - -/** - * A diagnostic report indicating that the last returned - * report is still accurate. - * - * @since 3.17.0 - */ -export interface UnchangedDocumentDiagnosticReport { - /** - * A document diagnostic report indicating - * no changes to the last result. A server can - * only return `unchanged` if result ids are - * provided. - */ - kind: "unchanged"; - /** - * A result id which will be sent on the next - * diagnostic request for the same document. - */ - resultId: string; -} - -/** - * A classified text element containing an array of classified text runs, used for colorized labels in VS. - */ -export interface VSClassifiedTextElement { - /** - * The classified text runs that make up this element. - */ - Runs: VSClassifiedTextRun[]; - /** - * VS type discriminator required by ObjectContentConverter for deserialization. - */ - _vs_type: "ClassifiedTextElement"; -} - -/** - * A classified text run with text and classification type, used for colorized display in VS. - */ -export interface VSClassifiedTextRun { - /** - * The classification type name (e.g. 'keyword', 'class name', 'parameter name'). - */ - ClassificationTypeName: string; - /** - * The text content of this run. - */ - Text: string; - /** - * Optional marker tag type. - */ - MarkerTagType?: string | undefined; - /** - * The style of this text run. - */ - Style?: number | undefined; - /** - * VS type discriminator required by ObjectContentConverter for deserialization. - */ - _vs_type: "ClassifiedTextRun"; -} - -/** - * A container element that groups other VS rich-content elements (images, classified text, or nested containers). Used to build the VS hover raw content that combines a symbol icon with colorized text. - */ -export interface VSContainerElement { - /** - * Layout style for the child elements. - */ - Style: VSContainerElementStyle; - /** - * The child elements contained within this container. - */ - Elements: (VSImageElement | VSClassifiedTextElement | VSContainerElement)[]; - /** - * VS type discriminator required by ObjectContentConverter for deserialization. - */ - _vs_type: "ContainerElement"; -} - -/** - * Layout style for a VSContainerElement's children, mirroring VS's Microsoft.VisualStudio.Text.Adornments.ContainerElementStyle. - */ -export type VSContainerElementStyle = 0 | 1; - -/** - * An image element (e.g. a symbol-kind icon) for use in VS rich content such as hover tooltips. - */ -export interface VSImageElement { - /** - * The image to display. - */ - ImageId: VSImageId; - /** - * VS type discriminator required by ObjectContentConverter for deserialization. - */ - _vs_type: "ImageElement"; -} - -/** - * Identifies an image in a VS image catalog. Used to render symbol-kind icons (e.g. in hover tooltips). - */ -export interface VSImageId { - /** - * The GUID of the image catalog containing this image. - */ - Guid: string; - /** - * The numeric identifier of the image within its catalog. - */ - Id: number; - /** - * VS type discriminator required by ObjectContentConverter for deserialization. - */ - _vs_type: "ImageId"; -} - -/** - * Parameters for the textDocument/_vs_onAutoInsert request. - */ -export interface VSOnAutoInsertParams { - /** - * The text document. - */ - _vs_textDocument: TextDocumentIdentifier; - /** - * The position inside the text document. - */ - _vs_position: Position; - /** - * The character that triggered the auto-insert. - */ - _vs_ch: string; -} - -/** - * Response item for the textDocument/_vs_onAutoInsert request. - */ -export interface VSOnAutoInsertResponseItem { - /** - * The format of the text edit (plaintext or snippet). - */ - _vs_textEditFormat: InsertTextFormat; - /** - * The text edit to apply for the auto-insertion. - */ - _vs_textEdit: TextEdit; -} - -/** - * A VS-specific reference item with grouping support for Find All References. - */ -export interface VSReferenceItem { - /** - * Unique identifier for this reference item. - */ - _vs_id: number; - /** - * The ID of the definition item this reference belongs to. Absent for definition items themselves. - */ - _vs_definitionId?: number | undefined; - /** - * The kind(s) of this reference (read, write, etc.). - */ - _vs_kind?: VSReferenceKind[] | undefined; - /** - * The location of this reference. - */ - _vs_location: Location; - /** - * Classified display text for the definition (used for grouping headers in the UI). - */ - _vs_definitionText?: VSClassifiedTextElement | undefined; - /** - * The project name for this reference. - */ - _vs_projectName?: string | undefined; - /** - * The containing type for this reference. - */ - _vs_containingType?: string | undefined; -} - -export type VSReferenceKind = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17; - -/** - * A workspace edit represents changes to many resources managed in the workspace. The edit - * should either provide `changes` or `documentChanges`. If documentChanges are present - * they are preferred over `changes` if the client can handle versioned document edits. - * - * Since version 3.13.0 a workspace edit can contain resource operations as well. If resource - * operations are present clients need to execute the operations in the order in which they - * are provided. So a workspace edit for example can consist of the following two changes: - * (1) a create file a.txt and (2) a text document edit which insert text into file a.txt. - * - * An invalid sequence (e.g. (1) delete file a.txt and (2) insert text into file a.txt) will - * cause failure of the operation. How the client recovers from the failure is described by - * the client capability: `workspace.workspaceEdit.failureHandling` - */ -export interface WorkspaceEdit { - /** - * Holds changes to existing resources. - */ - changes?: { [key: DocumentUri]: TextEdit[]; } | undefined; - /** - * Depending on the client capability `workspace.workspaceEdit.resourceOperations` document changes - * are either an array of `TextDocumentEdit`s to express changes to n different text documents - * where each text document edit addresses a specific version of a text document. Or it can contain - * above `TextDocumentEdit`s mixed with create, rename and delete file / folder operations. - * - * Whether a client supports versioned document edits is expressed via - * `workspace.workspaceEdit.documentChanges` client capability. - * - * If a client neither supports `documentChanges` nor `workspace.workspaceEdit.resourceOperations` then - * only plain `TextEdit`s using the `changes` property are supported. - */ - documentChanges?: (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[] | undefined; - /** - * A map of change annotations that can be referenced in `AnnotatedTextEdit`s or create, rename and - * delete file / folder operations. - * - * Whether clients honor this property depends on the client capability `workspace.changeAnnotationSupport`. - * - * @since 3.16.0 - */ - changeAnnotations?: { [key: ChangeAnnotationIdentifier]: ChangeAnnotation; } | undefined; -} - -/** - * A special workspace symbol that supports locations without a range. - * - * See also SymbolInformation. - * - * @since 3.17.0 - */ -export interface WorkspaceSymbol { - /** - * The name of this symbol. - */ - name: string; - /** - * The kind of this symbol. - */ - kind: SymbolKind; - /** - * Tags for this symbol. - * - * @since 3.16.0 - */ - tags?: SymbolTag[] | undefined; - /** - * The name of the symbol containing this symbol. This information is for - * user interface purposes (e.g. to render a qualifier in the user interface - * if necessary). It can't be used to re-infer a hierarchy for the document - * symbols. - */ - containerName?: string | undefined; - /** - * The location of the symbol. Whether a server is allowed to - * return a location without a range depends on the client - * capability `workspace.symbol.resolveSupport`. - * - * See SymbolInformation#location for more details. - */ - location: Location | LocationUriOnly; - /** - * A data entry field that is preserved on a workspace symbol between a - * workspace symbol request and a workspace symbol resolve request. - */ - data?: LSPAny | undefined; -} - -/** - * The parameters of a {@link WorkspaceSymbolRequest}. - */ -export interface WorkspaceSymbolParams { - /** - * An optional token that a server can use to report work done progress. - */ - workDoneToken?: ProgressToken | undefined; - /** - * An optional token that a server can use to report partial results (e.g. streaming) to - * the client. - */ - partialResultToken?: ProgressToken | undefined; - /** - * A query string to filter symbols by. Clients may send an empty - * string here to request all symbols. - * - * The `query`-parameter should be interpreted in a *relaxed way* as editors - * will apply their own highlighting and scoring on the results. A good rule - * of thumb is to match case-insensitive and to simply check that the - * characters of *query* appear in their order in a candidate symbol. - * Servers shouldn't use prefix, substring, or similar strict matching. - */ - query: string; - /** - * Scopes the workspace symbol search to projects containing this document. - */ - textDocument?: TextDocumentIdentifier | undefined; -} - -/** Language-feature requests supported by the extension middleware API. */ -export interface LspMiddlewareRequests { - "textDocument/hover": { params: HoverParams; result: Hover | null; }; - "textDocument/completion": { params: CompletionParams; result: CompletionItem[] | CompletionList | null; }; - "completionItem/resolve": { params: CompletionItem; result: CompletionItem; }; - "textDocument/signatureHelp": { params: SignatureHelpParams; result: SignatureHelp | null; }; - "textDocument/definition": { params: DefinitionParams; result: Definition | DefinitionLink[] | null; }; - "textDocument/typeDefinition": { params: TypeDefinitionParams; result: Definition | DefinitionLink[] | null; }; - "textDocument/implementation": { params: ImplementationParams; result: Definition | DefinitionLink[] | null; }; - "textDocument/references": { params: ReferenceParams; result: Location[] | null; }; - "textDocument/documentHighlight": { params: DocumentHighlightParams; result: DocumentHighlight[] | null; }; - "textDocument/documentSymbol": { params: DocumentSymbolParams; result: SymbolInformation[] | DocumentSymbol[] | null; }; - "workspace/symbol": { params: WorkspaceSymbolParams; result: SymbolInformation[] | WorkspaceSymbol[] | null; }; - "textDocument/rename": { params: RenameParams; result: WorkspaceEdit | null; }; - "textDocument/prepareRename": { params: PrepareRenameParams; result: PrepareRenameResult | null; }; - "textDocument/formatting": { params: DocumentFormattingParams; result: TextEdit[] | null; }; - "textDocument/rangeFormatting": { params: DocumentRangeFormattingParams; result: TextEdit[] | null; }; - "textDocument/onTypeFormatting": { params: DocumentOnTypeFormattingParams; result: TextEdit[] | null; }; - "textDocument/selectionRange": { params: SelectionRangeParams; result: SelectionRange[] | null; }; - "textDocument/foldingRange": { params: FoldingRangeParams; result: FoldingRange[] | null; }; - "textDocument/inlayHint": { params: InlayHintParams; result: InlayHint[] | null; }; - "textDocument/codeAction": { params: CodeActionParams; result: (Command | CodeAction)[] | null; }; - "textDocument/codeLens": { params: CodeLensParams; result: CodeLens[] | null; }; - "codeLens/resolve": { params: CodeLens; result: CodeLens; }; - "textDocument/prepareCallHierarchy": { params: CallHierarchyPrepareParams; result: CallHierarchyItem[] | null; }; - "callHierarchy/incomingCalls": { params: CallHierarchyIncomingCallsParams; result: CallHierarchyIncomingCall[] | null; }; - "callHierarchy/outgoingCalls": { params: CallHierarchyOutgoingCallsParams; result: CallHierarchyOutgoingCall[] | null; }; - "textDocument/linkedEditingRange": { params: LinkedEditingRangeParams; result: LinkedEditingRanges | null; }; - "textDocument/semanticTokens/full": { params: SemanticTokensParams; result: SemanticTokens | null; }; - "textDocument/semanticTokens/range": { params: SemanticTokensRangeParams; result: SemanticTokens | null; }; - "textDocument/diagnostic": { params: DocumentDiagnosticParams; result: DocumentDiagnosticReport; }; - "custom/textDocument/sourceDefinition": { params: TextDocumentPositionParams; result: Definition | DefinitionLink[] | null; }; - "custom/textDocument/multiDocumentHighlight": { params: MultiDocumentHighlightParams; result: MultiDocumentHighlight[] | null; }; - "textDocument/_vs_onAutoInsert": { params: VSOnAutoInsertParams; result: VSOnAutoInsertResponseItem | null; }; - "textDocument/_vs_references": { params: ReferenceParams; result: VSReferenceItem[] | null; }; -} +// Code generated by tools/scripts/lsp/generateTypeScript.mts. DO NOT EDIT. +// LSP metamodel copyright (c) Microsoft Corporation. Licensed under the MIT License. + +/** + * A special text edit with an additional change annotation. + * + * @since 3.16.0. + */ +export interface AnnotatedTextEdit { + /** + * The range of the text document to be manipulated. To insert + * text into a document create a range where start === end. + */ + range: Range; + /** + * The string to be inserted. For delete operations use an + * empty string. + */ + newText: string; + /** + * The actual identifier of the change annotation + */ + annotationId: ChangeAnnotationIdentifier; +} + +/** + * Defines how values from a set of defaults and an individual item will be + * merged. + * + * @since 3.18.0 + */ +export type ApplyKind = 1 | 2; + +/** + * Represents an incoming call, e.g. a caller of a method or constructor. + * + * @since 3.16.0 + */ +export interface CallHierarchyIncomingCall { + /** + * The item that makes the call. + */ + from: CallHierarchyItem; + /** + * The ranges at which the calls appear. This is relative to the caller + * denoted by {@link CallHierarchyIncomingCall.from `this.from`}. + */ + fromRanges: Range[]; +} + +/** + * The parameter of a `callHierarchy/incomingCalls` request. + * + * @since 3.16.0 + */ +export interface CallHierarchyIncomingCallsParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + item: CallHierarchyItem; +} + +/** + * Represents programming constructs like functions or constructors in the context + * of call hierarchy. + * + * @since 3.16.0 + */ +export interface CallHierarchyItem { + /** + * The name of this item. + */ + name: string; + /** + * The kind of this item. + */ + kind: SymbolKind; + /** + * Tags for this item. + */ + tags?: SymbolTag[] | undefined; + /** + * More detail for this item, e.g. the signature of a function. + */ + detail?: string | undefined; + /** + * The resource identifier of this item. + */ + uri: DocumentUri; + /** + * The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code. + */ + range: Range; + /** + * The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. + * Must be contained by the {@link CallHierarchyItem.range `range`}. + */ + selectionRange: Range; + /** + * A data entry field that is preserved between a call hierarchy prepare and + * incoming calls or outgoing calls requests. + */ + data?: LSPAny | undefined; +} + +/** + * Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc. + * + * @since 3.16.0 + */ +export interface CallHierarchyOutgoingCall { + /** + * The item that is called. + */ + to: CallHierarchyItem; + /** + * The range at which this item is called. This is the range relative to the caller, e.g the item + * passed to {@link CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls `provideCallHierarchyOutgoingCalls`} + * and not {@link CallHierarchyOutgoingCall.to `this.to`}. + */ + fromRanges: Range[]; +} + +/** + * The parameter of a `callHierarchy/outgoingCalls` request. + * + * @since 3.16.0 + */ +export interface CallHierarchyOutgoingCallsParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + item: CallHierarchyItem; +} + +/** + * The parameter of a `textDocument/prepareCallHierarchy` request. + * + * @since 3.16.0 + */ +export interface CallHierarchyPrepareParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; +} + +/** + * Additional information that describes document changes. + * + * @since 3.16.0 + */ +export interface ChangeAnnotation { + /** + * A human-readable string describing the actual change. The string + * is rendered prominent in the user interface. + */ + label: string; + /** + * A flag which indicates that user confirmation is needed + * before applying the change. + */ + needsConfirmation?: boolean | undefined; + /** + * A human-readable string which is rendered less prominent in + * the user interface. + */ + description?: string | undefined; +} + +/** + * An identifier to refer to a change annotation stored with a workspace edit. + */ +export type ChangeAnnotationIdentifier = string; + +/** + * A code action represents a change that can be performed in code, e.g. to fix a problem or + * to refactor code. + * + * A CodeAction must set either `edit` and/or a `command`. If both are supplied, the `edit` is applied first, then the `command` is executed. + */ +export interface CodeAction { + /** + * A short, human-readable, title for this code action. + */ + title: string; + /** + * The kind of the code action. + * + * Used to filter code actions. + */ + kind?: CodeActionKind | undefined; + /** + * The diagnostics that this code action resolves. + */ + diagnostics?: Diagnostic[] | undefined; + /** + * Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted + * by keybindings. + * + * A quick fix should be marked preferred if it properly addresses the underlying error. + * A refactoring should be marked preferred if it is the most reasonable choice of actions to take. + * + * @since 3.15.0 + */ + isPreferred?: boolean | undefined; + /** + * Marks that the code action cannot currently be applied. + * + * Clients should follow the following guidelines regarding disabled code actions: + * + * - Disabled code actions are not shown in automatic [lightbulbs](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) + * code action menus. + * + * - Disabled actions are shown as faded out in the code action menu when the user requests a more specific type + * of code action, such as refactorings. + * + * - If the user has a [keybinding](https://code.visualstudio.com/docs/editor/refactoring#_keybindings-for-code-actions) + * that auto applies a code action and only disabled code actions are returned, the client should show the user an + * error message with `reason` in the editor. + * + * @since 3.16.0 + */ + disabled?: CodeActionDisabled | undefined; + /** + * The workspace edit this code action performs. + */ + edit?: WorkspaceEdit | undefined; + /** + * A command this code action executes. If a code action + * provides an edit and a command, first the edit is + * executed and then the command. + */ + command?: Command | undefined; + /** + * A data entry field that is preserved on a code action between + * a `textDocument/codeAction` and a `codeAction/resolve` request. + * + * @since 3.16.0 + */ + data?: LSPAny | undefined; + /** + * Tags for this code action. + * + * @since 3.18.0 + */ + tags?: CodeActionTag[] | undefined; +} + +/** + * Contains additional diagnostic information about the context in which + * a {@link CodeActionProvider.provideCodeActions code action} is run. + */ +export interface CodeActionContext { + /** + * An array of diagnostics known on the client side overlapping the range provided to the + * `textDocument/codeAction` request. They are provided so that the server knows which + * errors are currently presented to the user for the given range. There is no guarantee + * that these accurately reflect the error state of the resource. The primary parameter + * to compute code actions is the provided range. + */ + diagnostics: Diagnostic[]; + /** + * Requested kind of actions to return. + * + * Actions not of this kind are filtered out by the client before being shown. So servers + * can omit computing them. + */ + only?: CodeActionKind[] | undefined; + /** + * The reason why code actions were requested. + * + * @since 3.17.0 + */ + triggerKind?: CodeActionTriggerKind | undefined; +} + +/** + * Captures why the code action is currently disabled. + * + * @since 3.18.0 + */ +export interface CodeActionDisabled { + /** + * Human readable description of why the code action is currently disabled. + * + * This is displayed in the code actions UI. + */ + reason: string; +} + +/** + * A set of predefined code action kinds + */ +export type CodeActionKind = "" | "quickfix" | "refactor" | "refactor.extract" | "refactor.inline" | "refactor.move" | "refactor.rewrite" | "source" | "source.organizeImports" | "source.fixAll" | "notebook" | string; + +/** + * The parameters of a {@link CodeActionRequest}. + */ +export interface CodeActionParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The document in which the command was invoked. + */ + textDocument: TextDocumentIdentifier; + /** + * The range for which the command was invoked. + */ + range: Range; + /** + * Context carrying additional information. + */ + context: CodeActionContext; +} + +/** + * Code action tags are extra annotations that tweak the behavior of a code action. + * + * @since 3.18.0 + */ +export type CodeActionTag = 1; + +/** + * The reason why code actions were requested. + * + * @since 3.17.0 + */ +export type CodeActionTriggerKind = 1 | 2; + +/** + * Structure to capture a description for an error code. + * + * @since 3.16.0 + */ +export interface CodeDescription { + /** + * An URI to open with more information about the diagnostic error. + */ + href: URI; +} + +/** + * A code lens represents a {@link Command command} that should be shown along with + * source text, like the number of references, a way to run tests, etc. + * + * A code lens is _unresolved_ when no command is associated to it. For performance + * reasons the creation of a code lens and resolving should be done in two stages. + */ +export interface CodeLens { + /** + * The range in which this code lens is valid. Should only span a single line. + */ + range: Range; + /** + * The command this code lens represents. + */ + command?: Command | undefined; + /** + * A data entry field that is preserved on a code lens item between + * a {@link CodeLensRequest} and a {@link CodeLensResolveRequest} + */ + data?: LSPAny | undefined; +} + +/** + * The parameters of a {@link CodeLensRequest}. + */ +export interface CodeLensParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The document to request code lens for. + */ + textDocument: TextDocumentIdentifier; +} + +/** + * Represents a reference to a command. Provides a title which + * will be used to represent a command in the UI and, optionally, + * an array of arguments which will be passed to the command handler + * function when invoked. + */ +export interface Command { + /** + * Title of the command, like `save`. + */ + title: string; + /** + * An optional tooltip. + * + * @since 3.18.0 + */ + tooltip?: string | undefined; + /** + * The identifier of the actual command handler. + */ + command: string; + /** + * Arguments that the command handler should be + * invoked with. + */ + arguments?: LSPAny[] | undefined; +} + +/** + * Contains additional information about the context in which a completion request is triggered. + */ +export interface CompletionContext { + /** + * How the completion was triggered. + */ + triggerKind: CompletionTriggerKind; + /** + * The trigger character (a single character) that has trigger code complete. + * Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter` + */ + triggerCharacter?: string | undefined; +} + +/** + * A completion item represents a text snippet that is + * proposed to complete text that is being typed. + */ +export interface CompletionItem { + /** + * The label of this completion item. + * + * The label property is also by default the text that + * is inserted when selecting this completion. + * + * If label details are provided the label itself should + * be an unqualified name of the completion item. + */ + label: string; + /** + * Additional details for the label + * + * @since 3.17.0 + */ + labelDetails?: CompletionItemLabelDetails | undefined; + /** + * The kind of this completion item. Based of the kind + * an icon is chosen by the editor. + */ + kind?: CompletionItemKind | undefined; + /** + * Tags for this completion item. + * + * @since 3.15.0 + */ + tags?: CompletionItemTag[] | undefined; + /** + * A human-readable string with additional information + * about this item, like type or symbol information. + */ + detail?: string | undefined; + /** + * A human-readable string that represents a doc-comment. + */ + documentation?: string | MarkupContent | undefined; + /** + * Indicates if this item is deprecated. + * @deprecated Use `tags` instead. + */ + deprecated?: boolean | undefined; + /** + * Select this item when showing. + * + * *Note* that only one completion item can be selected and that the + * tool / client decides which item that is. The rule is that the *first* + * item of those that match best is selected. + */ + preselect?: boolean | undefined; + /** + * A string that should be used when comparing this item + * with other items. When `falsy` the {@link CompletionItem.label label} + * is used. + */ + sortText?: string | undefined; + /** + * A string that should be used when filtering a set of + * completion items. When `falsy` the {@link CompletionItem.label label} + * is used. + */ + filterText?: string | undefined; + /** + * A string that should be inserted into a document when selecting + * this completion. When `falsy` the {@link CompletionItem.label label} + * is used. + * + * The `insertText` is subject to interpretation by the client side. + * Some tools might not take the string literally. For example + * VS Code when code complete is requested in this example + * `con` and a completion item with an `insertText` of + * `console` is provided it will only insert `sole`. Therefore it is + * recommended to use `textEdit` instead since it avoids additional client + * side interpretation. + */ + insertText?: string | undefined; + /** + * The format of the insert text. The format applies to both the + * `insertText` property and the `newText` property of a provided + * `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`. + * + * Please note that the insertTextFormat doesn't apply to + * `additionalTextEdits`. + */ + insertTextFormat?: InsertTextFormat | undefined; + /** + * How whitespace and indentation is handled during completion + * item insertion. If not provided the clients default value depends on + * the `textDocument.completion.insertTextMode` client capability. + * + * @since 3.16.0 + */ + insertTextMode?: InsertTextMode | undefined; + /** + * An {@link TextEdit edit} which is applied to a document when selecting + * this completion. When an edit is provided the value of + * {@link CompletionItem.insertText insertText} is ignored. + * + * Most editors support two different operations when accepting a completion + * item. One is to insert a completion text and the other is to replace an + * existing text with a completion text. Since this can usually not be + * predetermined by a server it can report both ranges. Clients need to + * signal support for `InsertReplaceEdits` via the + * `textDocument.completion.insertReplaceSupport` client capability + * property. + * + * *Note 1:* The text edit's range as well as both ranges from an insert + * replace edit must be a [single line] and they must contain the position + * at which completion has been requested. + * *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range + * must be a prefix of the edit's replace range, that means it must be + * contained and starting at the same position. + * + * @since 3.16.0 additional type `InsertReplaceEdit` + */ + textEdit?: TextEdit | InsertReplaceEdit | undefined; + /** + * The edit text used if the completion item is part of a CompletionList and + * CompletionList defines an item default for the text edit range. + * + * Clients will only honor this property if they opt into completion list + * item defaults using the capability `completionList.itemDefaults`. + * + * If not provided and a list's default range is provided the label + * property is used as a text. + * + * @since 3.17.0 + */ + textEditText?: string | undefined; + /** + * An optional array of additional {@link TextEdit text edits} that are applied when + * selecting this completion. Edits must not overlap (including the same insert position) + * with the main {@link CompletionItem.textEdit edit} nor with themselves. + * + * Additional text edits should be used to change text unrelated to the current cursor position + * (for example adding an import statement at the top of the file if the completion item will + * insert an unqualified type). + */ + additionalTextEdits?: TextEdit[] | undefined; + /** + * An optional set of characters that when pressed while this completion is active will accept it first and + * then type that character. *Note* that all commit characters should have `length=1` and that superfluous + * characters will be ignored. + */ + commitCharacters?: string[] | undefined; + /** + * An optional {@link Command command} that is executed *after* inserting this completion. *Note* that + * additional modifications to the current document should be described with the + * {@link CompletionItem.additionalTextEdits additionalTextEdits}-property. + */ + command?: Command | undefined; + /** + * A data entry field that is preserved on a completion item between a + * {@link CompletionRequest} and a {@link CompletionResolveRequest}. + */ + data?: LSPAny | undefined; +} + +/** + * Specifies how fields from a completion item should be combined with those + * from `completionList.itemDefaults`. + * + * If unspecified, all fields will be treated as ApplyKind.Replace. + * + * If a field's value is ApplyKind.Replace, the value from a completion item (if + * provided and not `null`) will always be used instead of the value from + * `completionItem.itemDefaults`. + * + * If a field's value is ApplyKind.Merge, the values will be merged using the rules + * defined against each field below. + * + * Servers are only allowed to return `applyKind` if the client + * signals support for this via the `completionList.applyKindSupport` + * capability. + * + * @since 3.18.0 + */ +export interface CompletionItemApplyKinds { + /** + * Specifies whether commitCharacters on a completion will replace or be + * merged with those in `completionList.itemDefaults.commitCharacters`. + * + * If ApplyKind.Replace, the commit characters from the completion item will + * always be used unless not provided, in which case those from + * `completionList.itemDefaults.commitCharacters` will be used. An + * empty list can be used if a completion item does not have any commit + * characters and also should not use those from + * `completionList.itemDefaults.commitCharacters`. + * + * If ApplyKind.Merge the commitCharacters for the completion will be the + * union of all values in both `completionList.itemDefaults.commitCharacters` + * and the completion's own `commitCharacters`. + * + * @since 3.18.0 + */ + commitCharacters?: ApplyKind | undefined; + /** + * Specifies whether the `data` field on a completion will replace or + * be merged with data from `completionList.itemDefaults.data`. + * + * If ApplyKind.Replace, the data from the completion item will be used if + * provided (and not `null`), otherwise + * `completionList.itemDefaults.data` will be used. An empty object can + * be used if a completion item does not have any data but also should + * not use the value from `completionList.itemDefaults.data`. + * + * If ApplyKind.Merge, a shallow merge will be performed between + * `completionList.itemDefaults.data` and the completion's own data + * using the following rules: + * + * - If a completion's `data` field is not provided (or `null`), the + * entire `data` field from `completionList.itemDefaults.data` will be + * used as-is. + * - If a completion's `data` field is provided, each field will + * overwrite the field of the same name in + * `completionList.itemDefaults.data` but no merging of nested fields + * within that value will occur. + * + * @since 3.18.0 + */ + data?: ApplyKind | undefined; +} + +/** + * In many cases the items of an actual completion result share the same + * value for properties like `commitCharacters` or the range of a text + * edit. A completion list can therefore define item defaults which will + * be used if a completion item itself doesn't specify the value. + * + * If a completion list specifies a default value and a completion item + * also specifies a corresponding value, the rules for combining these are + * defined by `applyKinds` (if the client supports it), defaulting to + * ApplyKind.Replace. + * + * Servers are only allowed to return default values if the client + * signals support for this via the `completionList.itemDefaults` + * capability. + * + * @since 3.17.0 + */ +export interface CompletionItemDefaults { + /** + * A default commit character set. + * + * @since 3.17.0 + */ + commitCharacters?: string[] | undefined; + /** + * A default edit range. + * + * @since 3.17.0 + */ + editRange?: Range | EditRangeWithInsertReplace | undefined; + /** + * A default insert text format. + * + * @since 3.17.0 + */ + insertTextFormat?: InsertTextFormat | undefined; + /** + * A default insert text mode. + * + * @since 3.17.0 + */ + insertTextMode?: InsertTextMode | undefined; + /** + * A default data value. + * + * @since 3.17.0 + */ + data?: LSPAny | undefined; +} + +/** + * The kind of a completion entry. + */ +export type CompletionItemKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25; + +/** + * Additional details for a completion item label. + * + * @since 3.17.0 + */ +export interface CompletionItemLabelDetails { + /** + * An optional string which is rendered less prominently directly after {@link CompletionItem.label label}, + * without any spacing. Should be used for function signatures and type annotations. + */ + detail?: string | undefined; + /** + * An optional string which is rendered less prominently after {@link CompletionItem.detail}. Should be used + * for fully qualified names and file paths. + */ + description?: string | undefined; +} + +/** + * Completion item tags are extra annotations that tweak the rendering of a completion + * item. + * + * @since 3.15.0 + */ +export type CompletionItemTag = 1; + +/** + * Represents a collection of {@link CompletionItem completion items} to be presented + * in the editor. + */ +export interface CompletionList { + /** + * This list it not complete. Further typing results in recomputing this list. + * + * Recomputed lists have all their items replaced (not appended) in the + * incomplete completion sessions. + */ + isIncomplete: boolean; + /** + * In many cases the items of an actual completion result share the same + * value for properties like `commitCharacters` or the range of a text + * edit. A completion list can therefore define item defaults which will + * be used if a completion item itself doesn't specify the value. + * + * If a completion list specifies a default value and a completion item + * also specifies a corresponding value, the rules for combining these are + * defined by `applyKinds` (if the client supports it), defaulting to + * ApplyKind.Replace. + * + * Servers are only allowed to return default values if the client + * signals support for this via the `completionList.itemDefaults` + * capability. + * + * @since 3.17.0 + */ + itemDefaults?: CompletionItemDefaults | undefined; + /** + * Specifies how fields from a completion item should be combined with those + * from `completionList.itemDefaults`. + * + * If unspecified, all fields will be treated as ApplyKind.Replace. + * + * If a field's value is ApplyKind.Replace, the value from a completion item + * (if provided and not `null`) will always be used instead of the value + * from `completionItem.itemDefaults`. + * + * If a field's value is ApplyKind.Merge, the values will be merged using + * the rules defined against each field below. + * + * Servers are only allowed to return `applyKind` if the client + * signals support for this via the `completionList.applyKindSupport` + * capability. + * + * @since 3.18.0 + */ + applyKind?: CompletionItemApplyKinds | undefined; + /** + * The completion items. + */ + items: CompletionItem[]; +} + +/** + * Completion parameters + */ +export interface CompletionParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The completion context. This is only available it the client specifies + * to send this using the client capability `textDocument.completion.contextSupport === true` + */ + context?: CompletionContext | undefined; +} + +/** + * How a completion was triggered + */ +export type CompletionTriggerKind = 1 | 2 | 3; + +/** + * Create file operation. + */ +export interface CreateFile { + /** + * A create + */ + kind: "create"; + /** + * An optional annotation identifier describing the operation. + * + * @since 3.16.0 + */ + annotationId?: ChangeAnnotationIdentifier | undefined; + /** + * The resource to create. + */ + uri: DocumentUri; + /** + * Additional options + */ + options?: CreateFileOptions | undefined; +} + +/** + * Options to create a file. + */ +export interface CreateFileOptions { + /** + * Overwrite existing file. Overwrite wins over `ignoreIfExists` + */ + overwrite?: boolean | undefined; + /** + * Ignore if exists. + */ + ignoreIfExists?: boolean | undefined; +} + +/** + * The definition of a symbol represented as one or many {@link Location locations}. + * For most programming languages there is only one location at which a symbol is + * defined. + * + * Servers should prefer returning `DefinitionLink` over `Definition` if supported + * by the client. + */ +export type Definition = Location | Location[]; + +/** + * Information about where a symbol is defined. + * + * Provides additional metadata over normal {@link Location location} definitions, including the range of + * the defining symbol + */ +export type DefinitionLink = LocationLink; + +/** + * Parameters for a {@link DefinitionRequest}. + */ +export interface DefinitionParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; +} + +/** + * Delete file operation + */ +export interface DeleteFile { + /** + * A delete + */ + kind: "delete"; + /** + * An optional annotation identifier describing the operation. + * + * @since 3.16.0 + */ + annotationId?: ChangeAnnotationIdentifier | undefined; + /** + * The file to delete. + */ + uri: DocumentUri; + /** + * Delete options. + */ + options?: DeleteFileOptions | undefined; +} + +/** + * Delete file options + */ +export interface DeleteFileOptions { + /** + * Delete the content recursively if a folder is denoted. + */ + recursive?: boolean | undefined; + /** + * Ignore the operation if the file doesn't exist. + */ + ignoreIfNotExists?: boolean | undefined; +} + +/** + * Represents a diagnostic, such as a compiler error or warning. Diagnostic objects + * are only valid in the scope of a resource. + */ +export interface Diagnostic { + /** + * The range at which the message applies + */ + range: Range; + /** + * The diagnostic's severity. To avoid interpretation mismatches when a + * server is used with different clients it is highly recommended that servers + * always provide a severity value. + */ + severity?: DiagnosticSeverity | undefined; + /** + * The diagnostic's code, which usually appear in the user interface. + */ + code?: number | string | undefined; + /** + * An optional property to describe the error code. + * Requires the code field (above) to be present/not null. + * + * @since 3.16.0 + */ + codeDescription?: CodeDescription | undefined; + /** + * A human-readable string describing the source of this + * diagnostic, e.g. 'typescript' or 'super lint'. It usually + * appears in the user interface. + */ + source?: string | undefined; + /** + * The diagnostic's message. It usually appears in the user interface. + * + * @since 3.18.0 - support for MarkupContent. This is guarded by the client + * capability `textDocument.diagnostic.markupMessageSupport`. + */ + message: string | MarkupContent; + /** + * Additional metadata about the diagnostic. + * + * @since 3.15.0 + */ + tags?: DiagnosticTag[] | undefined; + /** + * An array of related diagnostic information, e.g. when symbol-names within + * a scope collide all definitions can be marked via this property. + */ + relatedInformation?: DiagnosticRelatedInformation[] | undefined; + /** + * A data entry field that is preserved between a `textDocument/publishDiagnostics` + * notification and `textDocument/codeAction` request. + * + * @since 3.16.0 + */ + data?: LSPAny | undefined; +} + +/** + * Represents a related message and source code location for a diagnostic. This should be + * used to point to code locations that cause or related to a diagnostics, e.g when duplicating + * a symbol in a scope. + */ +export interface DiagnosticRelatedInformation { + /** + * The location of this related diagnostic information. + */ + location: Location; + /** + * The message of this related diagnostic information. + */ + message: string; +} + +/** + * The diagnostic's severity. + */ +export type DiagnosticSeverity = 1 | 2 | 3 | 4; + +/** + * The diagnostic tags. + * + * @since 3.15.0 + */ +export type DiagnosticTag = 1 | 2; + +/** + * Parameters of the document diagnostic request. + * + * @since 3.17.0 + */ +export interface DocumentDiagnosticParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The additional identifier provided during registration. + */ + identifier?: string | undefined; + /** + * The result id of a previous response if provided. + */ + previousResultId?: string | undefined; +} + +/** + * The result of a document diagnostic pull request. A report can + * either be a full report containing all diagnostics for the + * requested document or an unchanged report indicating that nothing + * has changed in terms of diagnostics in comparison to the last + * pull request. + * + * @since 3.17.0 + */ +export type DocumentDiagnosticReport = RelatedFullDocumentDiagnosticReport | RelatedUnchangedDocumentDiagnosticReport; + +/** + * The parameters of a {@link DocumentFormattingRequest}. + */ +export interface DocumentFormattingParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * The document to format. + */ + textDocument: TextDocumentIdentifier; + /** + * The format options. + */ + options: FormattingOptions; +} + +/** + * A document highlight is a range inside a text document which deserves + * special attention. Usually a document highlight is visualized by changing + * the background color of its range. + */ +export interface DocumentHighlight { + /** + * The range this highlight applies to. + */ + range: Range; + /** + * The highlight kind, default is {@link DocumentHighlightKind.Text text}. + */ + kind?: DocumentHighlightKind | undefined; +} + +/** + * A document highlight kind. + */ +export type DocumentHighlightKind = 1 | 2 | 3; + +/** + * Parameters for a {@link DocumentHighlightRequest}. + */ +export interface DocumentHighlightParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; +} + +/** + * The parameters of a {@link DocumentOnTypeFormattingRequest}. + */ +export interface DocumentOnTypeFormattingParams { + /** + * The document to format. + */ + textDocument: TextDocumentIdentifier; + /** + * The position around which the on type formatting should happen. + * This is not necessarily the exact position where the character denoted + * by the property `ch` got typed. + */ + position: Position; + /** + * The character that has been typed that triggered the formatting + * on type request. That is not necessarily the last character that + * got inserted into the document since the client could auto insert + * characters as well (e.g. like automatic brace completion). + */ + ch: string; + /** + * The formatting options. + */ + options: FormattingOptions; +} + +/** + * The parameters of a {@link DocumentRangeFormattingRequest}. + */ +export interface DocumentRangeFormattingParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * The document to format. + */ + textDocument: TextDocumentIdentifier; + /** + * The range to format + */ + range: Range; + /** + * The format options + */ + options: FormattingOptions; +} + +/** + * Represents programming constructs like variables, classes, interfaces etc. + * that appear in a document. Document symbols can be hierarchical and they + * have two ranges: one that encloses its definition and one that points to + * its most interesting range, e.g. the range of an identifier. + */ +export interface DocumentSymbol { + /** + * The name of this symbol. Will be displayed in the user interface and therefore must not be + * an empty string or a string only consisting of white spaces. + */ + name: string; + /** + * More detail for this symbol, e.g the signature of a function. + */ + detail?: string | undefined; + /** + * The kind of this symbol. + */ + kind: SymbolKind; + /** + * Tags for this document symbol. + * + * @since 3.16.0 + */ + tags?: SymbolTag[] | undefined; + /** + * Indicates if this symbol is deprecated. + * + * @deprecated Use tags instead + */ + deprecated?: boolean | undefined; + /** + * The range enclosing this symbol not including leading/trailing whitespace but everything else + * like comments. This information is typically used to determine if the clients cursor is + * inside the symbol to reveal in the symbol in the UI. + */ + range: Range; + /** + * The range that should be selected and revealed when this symbol is being picked, e.g the name of a function. + * Must be contained by the `range`. + */ + selectionRange: Range; + /** + * Children of this symbol, e.g. properties of a class. + */ + children?: DocumentSymbol[] | undefined; +} + +/** + * Parameters for a {@link DocumentSymbolRequest}. + */ +export interface DocumentSymbolParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; +} + +export type DocumentUri = string; + +/** + * Edit range variant that includes ranges for insert and replace operations. + * + * @since 3.18.0 + */ +export interface EditRangeWithInsertReplace { + insert: Range; + replace: Range; +} + +/** + * Represents a folding range. To be valid, start and end line must be bigger than zero and smaller + * than the number of lines in the document. Clients are free to ignore invalid ranges. + */ +export interface FoldingRange { + /** + * The zero-based start line of the range to fold. The folded area starts after the line's last character. + * To be valid, the end must be zero or larger and smaller than the number of lines in the document. + */ + startLine: number; + /** + * The zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line. + */ + startCharacter?: number | undefined; + /** + * The zero-based end line of the range to fold. The folded area ends with the line's last character. + * To be valid, the end must be zero or larger and smaller than the number of lines in the document. + */ + endLine: number; + /** + * The zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line. + */ + endCharacter?: number | undefined; + /** + * Describes the kind of the folding range such as 'comment' or 'region'. The kind + * is used to categorize folding ranges and used by commands like 'Fold all comments'. + * See {@link FoldingRangeKind} for an enumeration of standardized kinds. + */ + kind?: FoldingRangeKind | undefined; + /** + * The text that the client should show when the specified range is + * collapsed. If not defined or not supported by the client, a default + * will be chosen by the client. + * + * @since 3.17.0 + */ + collapsedText?: string | undefined; +} + +/** + * A set of predefined range kinds. + */ +export type FoldingRangeKind = "comment" | "imports" | "region" | string; + +/** + * Parameters for a {@link FoldingRangeRequest}. + */ +export interface FoldingRangeParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; +} + +/** + * Value-object describing what options formatting should use. + */ +export interface FormattingOptions { + /** + * Size of a tab in spaces. + */ + tabSize: number; + /** + * Prefer spaces over tabs. + */ + insertSpaces: boolean; + /** + * Trim trailing whitespace on a line. + * + * @since 3.15.0 + */ + trimTrailingWhitespace?: boolean | undefined; + /** + * Insert a newline character at the end of the file if one does not exist. + * + * @since 3.15.0 + */ + insertFinalNewline?: boolean | undefined; + /** + * Trim all newlines after the final newline at the end of the file. + * + * @since 3.15.0 + */ + trimFinalNewlines?: boolean | undefined; + [key: string]: boolean | number | string | undefined; +} + +/** + * A diagnostic report with a full set of problems. + * + * @since 3.17.0 + */ +export interface FullDocumentDiagnosticReport { + /** + * A full document diagnostic report. + */ + kind: "full"; + /** + * An optional result id. If provided it will + * be sent on the next diagnostic request for the + * same document. + */ + resultId?: string | undefined; + /** + * The actual items. + */ + items: Diagnostic[]; +} + +/** + * The result of a hover request. + */ +export interface Hover { + /** + * The hover's content + */ + contents: MarkupContent | MarkedString | MarkedString[]; + /** + * An optional range inside the text document that is used to + * visualize the hover, e.g. by changing the background color. + */ + range?: Range | undefined; + /** + * Whether the verbosity level can be increased for this hover. + */ + canIncreaseVerbosity?: boolean | undefined; + /** + * VS-specific rich content (symbol icon + colorized/classified text) rendered by clients that support Visual Studio extensions, in place of `contents`. + */ + _vs_rawContent?: VSContainerElement | undefined; +} + +/** + * Parameters for a {@link HoverRequest}. + */ +export interface HoverParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * Controls how many levels of type definitions will be expanded. Default is 0. + */ + verbosityLevel?: number | undefined; +} + +export interface ImplementationParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; +} + +/** + * Inlay hint information. + * + * @since 3.17.0 + */ +export interface InlayHint { + /** + * The position of this hint. + * + * If multiple hints have the same position, they will be shown in the order + * they appear in the response. + */ + position: Position; + /** + * The label of this hint. A human readable string or an array of + * InlayHintLabelPart label parts. + * + * *Note* that neither the string nor the label part can be empty. + */ + label: string | InlayHintLabelPart[]; + /** + * The kind of this hint. Can be omitted in which case the client + * should fall back to a reasonable default. + */ + kind?: InlayHintKind | undefined; + /** + * Optional text edits that are performed when accepting this inlay hint. + * + * *Note* that edits are expected to change the document so that the inlay + * hint (or its nearest variant) is now part of the document and the inlay + * hint itself is now obsolete. + */ + textEdits?: TextEdit[] | undefined; + /** + * The tooltip text when you hover over this item. + */ + tooltip?: string | MarkupContent | undefined; + /** + * Render padding before the hint. + * + * Note: Padding should use the editor's background color, not the + * background color of the hint itself. That means padding can be used + * to visually align/separate an inlay hint. + */ + paddingLeft?: boolean | undefined; + /** + * Render padding after the hint. + * + * Note: Padding should use the editor's background color, not the + * background color of the hint itself. That means padding can be used + * to visually align/separate an inlay hint. + */ + paddingRight?: boolean | undefined; + /** + * A data entry field that is preserved on an inlay hint between + * a `textDocument/inlayHint` and a `inlayHint/resolve` request. + */ + data?: LSPAny | undefined; +} + +/** + * Inlay hint kinds. + * + * @since 3.17.0 + */ +export type InlayHintKind = 1 | 2; + +/** + * An inlay hint label part allows for interactive and composite labels + * of inlay hints. + * + * @since 3.17.0 + */ +export interface InlayHintLabelPart { + /** + * The value of this label part. + */ + value: string; + /** + * The tooltip text when you hover over this label part. Depending on + * the client capability `inlayHint.resolveSupport` clients might resolve + * this property late using the resolve request. + */ + tooltip?: string | MarkupContent | undefined; + /** + * An optional source code location that represents this + * label part. + * + * The editor will use this location for the hover and for code navigation + * features: This part will become a clickable link that resolves to the + * definition of the symbol at the given location (not necessarily the + * location itself), it shows the hover that shows at the given location, + * and it shows a context menu with further code navigation commands. + * + * Depending on the client capability `inlayHint.resolveSupport` clients + * might resolve this property late using the resolve request. + */ + location?: Location | undefined; + /** + * An optional command for this label part. + * + * Depending on the client capability `inlayHint.resolveSupport` clients + * might resolve this property late using the resolve request. + */ + command?: Command | undefined; +} + +/** + * A parameter literal used in inlay hint requests. + * + * @since 3.17.0 + */ +export interface InlayHintParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The document range for which inlay hints should be computed. + */ + range: Range; +} + +/** + * A special text edit to provide an insert and a replace operation. + * + * @since 3.16.0 + */ +export interface InsertReplaceEdit { + /** + * The string to be inserted. + */ + newText: string; + /** + * The range if the insert is requested + */ + insert: Range; + /** + * The range if the replace is requested. + */ + replace: Range; +} + +/** + * Defines whether the insert text in a completion item should be interpreted as + * plain text or a snippet. + */ +export type InsertTextFormat = 1 | 2; + +/** + * How whitespace and indentation is handled during completion + * item insertion. + * + * @since 3.16.0 + */ +export type InsertTextMode = 1 | 2; + +/** + * The LSP any type. + * Please note that strictly speaking a property with the value `undefined` + * can't be converted into JSON preserving the property name. However for + * convenience it is allowed and assumed that all these properties are + * optional as well. + * @since 3.17.0 + */ +export type LSPAny = LSPObject | LSPArray | string | number | boolean | null; + +/** + * LSP arrays. + * @since 3.17.0 + */ +export type LSPArray = LSPAny[]; + +/** + * LSP object definition. + * @since 3.17.0 + */ +export type LSPObject = { [key: string]: LSPAny; }; + +export interface LinkedEditingRangeParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; +} + +/** + * The result of a linked editing range request. + * + * @since 3.16.0 + */ +export interface LinkedEditingRanges { + /** + * A list of ranges that can be edited together. The ranges must have + * identical length and contain identical text content. The ranges cannot overlap. + */ + ranges: Range[]; + /** + * An optional word pattern (regular expression) that describes valid contents for + * the given ranges. If no pattern is provided, the client configuration's word + * pattern will be used. + */ + wordPattern?: string | undefined; +} + +/** + * Represents a location inside a resource, such as a line + * inside a text file. + */ +export interface Location { + uri: DocumentUri; + range: Range; +} + +/** + * Represents the connection of two locations. Provides additional metadata over normal {@link Location locations}, + * including an origin range. + */ +export interface LocationLink { + /** + * Span of the origin of this link. + * + * Used as the underlined span for mouse interaction. Defaults to the word range at + * the definition position. + */ + originSelectionRange?: Range | undefined; + /** + * The target resource identifier of this link. + */ + targetUri: DocumentUri; + /** + * The full target range of this link. If the target for example is a symbol then target range is the + * range enclosing this symbol not including leading/trailing whitespace but everything else + * like comments. This information is typically used to highlight the range in the editor. + */ + targetRange: Range; + /** + * The range that should be selected and revealed when this link is being followed, e.g the name of a function. + * Must be contained by the `targetRange`. See also `DocumentSymbol#range` + */ + targetSelectionRange: Range; +} + +/** + * Location with only uri and does not include range. + * + * @since 3.18.0 + */ +export interface LocationUriOnly { + uri: DocumentUri; +} + +/** + * MarkedString can be used to render human readable text. It is either a markdown string + * or a code-block that provides a language and a code snippet. The language identifier + * is semantically equal to the optional language identifier in fenced code blocks in GitHub + * issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting + * + * The pair of a language and a value is an equivalent to markdown: + * ```${language} + * ${value} + * ``` + * + * Note that markdown strings will be sanitized - that means html will be escaped. + * @deprecated use MarkupContent instead. + */ +export type MarkedString = string | MarkedStringWithLanguage; + +/** + * @since 3.18.0 + * @deprecated use MarkupContent instead. + */ +export interface MarkedStringWithLanguage { + language: string; + value: string; +} + +/** + * A `MarkupContent` literal represents a string value which content is interpreted base on its + * kind flag. Currently the protocol supports `plaintext` and `markdown` as markup kinds. + * + * If the kind is `markdown` then the value can contain fenced code blocks like in GitHub issues. + * See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting + * + * Here is an example how such a string can be constructed using JavaScript / TypeScript: + * ```ts + * let markdown: MarkdownContent = { + * kind: MarkupKind.Markdown, + * value: [ + * '# Header', + * 'Some text', + * '```typescript', + * 'someCode();', + * '```' + * ].join('\n') + * }; + * ``` + * + * *Please Note* that clients might sanitize the return markdown. A client could decide to + * remove HTML from the markdown to avoid script execution. + */ +export interface MarkupContent { + /** + * The type of the Markup + */ + kind: MarkupKind; + /** + * The content itself + */ + value: string; +} + +/** + * Describes the content type that a client supports in various + * result literals like `Hover`, `ParameterInfo` or `CompletionItem`. + * + * Please note that `MarkupKinds` must not start with a `$`. This kinds + * are reserved for internal usage. + */ +export type MarkupKind = "plaintext" | "markdown"; + +/** + * Represents a collection of document highlights from a single document, used in multi-document highlight responses. + */ +export interface MultiDocumentHighlight { + /** + * The URI of the document containing the highlights. + */ + uri: DocumentUri; + /** + * The highlights for the document. + */ + highlights: DocumentHighlight[]; +} + +/** + * Parameters for the custom/textDocument/multiDocumentHighlight request. + */ +export interface MultiDocumentHighlightParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * The list of file URIs to search for highlights across. + */ + filesToSearch: DocumentUri[]; +} + +/** + * A text document identifier to optionally denote a specific version of a text document. + */ +export interface OptionalVersionedTextDocumentIdentifier { + /** + * The text document's uri. + */ + uri: DocumentUri; + /** + * The version number of this document. If a versioned text document identifier + * is sent from the server to the client and the file is not open in the editor + * (the server has not received an open notification before) the server can send + * `null` to indicate that the version is unknown and the content on disk is the + * truth (as specified with document content ownership). + */ + version: number | null; +} + +/** + * Represents a parameter of a callable-signature. A parameter can + * have a label and a doc-comment. + */ +export interface ParameterInformation { + /** + * The label of this parameter information. + * + * Either a string or an inclusive start and exclusive end offsets within its containing + * signature label. (see SignatureInformation.label). The offsets are based on a UTF-16 + * string representation as `Position` and `Range` does. + * + * To avoid ambiguities a server should use the [start, end] offset value instead of using + * a substring. Whether a client support this is controlled via `labelOffsetSupport` client + * capability. + * + * *Note*: a label of type string should be a substring of its containing signature label. + * Its intended use case is to highlight the parameter label part in the `SignatureInformation.label`. + */ + label: string | [number, number]; + /** + * The human-readable doc-comment of this parameter. Will be shown + * in the UI but can be omitted. + */ + documentation?: string | MarkupContent | undefined; +} + +/** + * Position in a text document expressed as zero-based line and character + * offset. Prior to 3.17 the offsets were always based on a UTF-16 string + * representation. So a string of the form `a𐐀b` the character offset of the + * character `a` is 0, the character offset of `𐐀` is 1 and the character + * offset of b is 3 since `𐐀` is represented using two code units in UTF-16. + * Since 3.17 clients and servers can agree on a different string encoding + * representation (e.g. UTF-8). The client announces it's supported encoding + * via the client capability [`general.positionEncodings`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#clientCapabilities). + * The value is an array of position encodings the client supports, with + * decreasing preference (e.g. the encoding at index `0` is the most preferred + * one). To stay backwards compatible the only mandatory encoding is UTF-16 + * represented via the string `utf-16`. The server can pick one of the + * encodings offered by the client and signals that encoding back to the + * client via the initialize result's property + * [`capabilities.positionEncoding`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#serverCapabilities). If the string value + * `utf-16` is missing from the client's capability `general.positionEncodings` + * servers can safely assume that the client supports UTF-16. If the server + * omits the position encoding in its initialize result the encoding defaults + * to the string value `utf-16`. Implementation considerations: since the + * conversion from one encoding into another requires the content of the + * file / line the conversion is best done where the file is read which is + * usually on the server side. + * + * Positions are line end character agnostic. So you can not specify a position + * that denotes `\r|\n` or `\n|` where `|` represents the character offset. + * + * @since 3.17.0 - support for negotiated position encoding. + */ +export interface Position { + /** + * Line position in a document (zero-based). + */ + line: number; + /** + * Character offset on a line in a document (zero-based). + * + * The meaning of this offset is determined by the negotiated + * `PositionEncodingKind`. + */ + character: number; +} + +/** + * @since 3.18.0 + */ +export interface PrepareRenameDefaultBehavior { + defaultBehavior: boolean; +} + +export interface PrepareRenameParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; +} + +/** + * @since 3.18.0 + */ +export interface PrepareRenamePlaceholder { + range: Range; + placeholder: string; +} + +export type PrepareRenameResult = Range | PrepareRenamePlaceholder | PrepareRenameDefaultBehavior; + +export type ProgressToken = number | string; + +/** + * A range in a text document expressed as (zero-based) start and end positions. + * + * If you want to specify a range that contains a line including the line ending + * character(s) then use an end position denoting the start of the next line. + * For example: + * ```ts + * { + * start: { line: 5, character: 23 } + * end : { line 6, character : 0 } + * } + * ``` + */ +export interface Range { + /** + * The range's start position. + */ + start: Position; + /** + * The range's end position. + */ + end: Position; +} + +/** + * Value-object that contains additional information when + * requesting references. + */ +export interface ReferenceContext { + /** + * Include the declaration of the current symbol. + */ + includeDeclaration: boolean; +} + +/** + * Parameters for a {@link ReferencesRequest}. + */ +export interface ReferenceParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + context: ReferenceContext; +} + +/** + * A full diagnostic report with a set of related documents. + * + * @since 3.17.0 + */ +export interface RelatedFullDocumentDiagnosticReport { + /** + * A full document diagnostic report. + */ + kind: "full"; + /** + * An optional result id. If provided it will + * be sent on the next diagnostic request for the + * same document. + */ + resultId?: string | undefined; + /** + * The actual items. + */ + items: Diagnostic[]; + /** + * Diagnostics of related documents. This information is useful + * in programming languages where code in a file A can generate + * diagnostics in a file B which A depends on. An example of + * such a language is C/C++ where marco definitions in a file + * a.cpp and result in errors in a header file b.hpp. + * + * @since 3.17.0 + */ + relatedDocuments?: { [key: DocumentUri]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; } | undefined; +} + +/** + * An unchanged diagnostic report with a set of related documents. + * + * @since 3.17.0 + */ +export interface RelatedUnchangedDocumentDiagnosticReport { + /** + * A document diagnostic report indicating + * no changes to the last result. A server can + * only return `unchanged` if result ids are + * provided. + */ + kind: "unchanged"; + /** + * A result id which will be sent on the next + * diagnostic request for the same document. + */ + resultId: string; + /** + * Diagnostics of related documents. This information is useful + * in programming languages where code in a file A can generate + * diagnostics in a file B which A depends on. An example of + * such a language is C/C++ where marco definitions in a file + * a.cpp and result in errors in a header file b.hpp. + * + * @since 3.17.0 + */ + relatedDocuments?: { [key: DocumentUri]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; } | undefined; +} + +/** + * Rename file operation + */ +export interface RenameFile { + /** + * A rename + */ + kind: "rename"; + /** + * An optional annotation identifier describing the operation. + * + * @since 3.16.0 + */ + annotationId?: ChangeAnnotationIdentifier | undefined; + /** + * The old (existing) location. + */ + oldUri: DocumentUri; + /** + * The new location. + */ + newUri: DocumentUri; + /** + * Rename options. + */ + options?: RenameFileOptions | undefined; +} + +/** + * Rename file options + */ +export interface RenameFileOptions { + /** + * Overwrite target if existing. Overwrite wins over `ignoreIfExists` + */ + overwrite?: boolean | undefined; + /** + * Ignores if target exists. + */ + ignoreIfExists?: boolean | undefined; +} + +/** + * The parameters of a {@link RenameRequest}. + */ +export interface RenameParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * The new name of the symbol. If the given name is not valid the + * request must return a {@link ResponseError} with an + * appropriate message set. + */ + newName: string; +} + +/** + * A selection range represents a part of a selection hierarchy. A selection range + * may have a parent selection range that contains it. + */ +export interface SelectionRange { + /** + * The {@link Range range} of this selection range. + */ + range: Range; + /** + * The parent selection range containing this range. Therefore `parent.range` must contain `this.range`. + */ + parent?: SelectionRange | undefined; +} + +/** + * A parameter literal used in selection range requests. + */ +export interface SelectionRangeParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The positions inside the text document. + */ + positions: Position[]; +} + +/** + * @since 3.16.0 + */ +export interface SemanticTokens { + /** + * An optional result id. If provided and clients support delta updating + * the client will include the result id in the next semantic token request. + * A server can then instead of computing all semantic tokens again simply + * send a delta. + */ + resultId?: string | undefined; + /** + * The actual tokens. + */ + data: number[]; +} + +/** + * @since 3.16.0 + */ +export interface SemanticTokensParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; +} + +/** + * @since 3.16.0 + */ +export interface SemanticTokensRangeParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The range the semantic tokens are requested for. + */ + range: Range; +} + +/** + * Signature help represents the signature of something + * callable. There can be multiple signature but only one + * active and only one active parameter. + */ +export interface SignatureHelp { + /** + * One or more signatures. + */ + signatures: SignatureInformation[]; + /** + * The active signature. If omitted or the value lies outside the + * range of `signatures` the value defaults to zero or is ignored if + * the `SignatureHelp` has no signatures. + * + * Whenever possible implementors should make an active decision about + * the active signature and shouldn't rely on a default value. + * + * In future version of the protocol this property might become + * mandatory to better express this. + */ + activeSignature?: number | undefined; + /** + * The active parameter of the active signature. + * + * If `null`, no parameter of the signature is active (for example a named + * argument that does not match any declared parameters). This is only valid + * if the client specifies the client capability + * `textDocument.signatureHelp.noActiveParameterSupport === true` + * + * If omitted or the value lies outside the range of + * `signatures[activeSignature].parameters` defaults to 0 if the active + * signature has parameters. + * + * If the active signature has no parameters it is ignored. + * + * In future version of the protocol this property might become + * mandatory (but still nullable) to better express the active parameter if + * the active signature does have any. + * + * Since version 3.16.0 the `SignatureInformation` itself provides a + * `activeParameter` property and it should be used instead of this one. + */ + activeParameter?: number | null | undefined; +} + +/** + * Additional information about the context in which a signature help request was triggered. + * + * @since 3.15.0 + */ +export interface SignatureHelpContext { + /** + * Action that caused signature help to be triggered. + */ + triggerKind: SignatureHelpTriggerKind; + /** + * Character that caused signature help to be triggered. + * + * This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter` + */ + triggerCharacter?: string | undefined; + /** + * `true` if signature help was already showing when it was triggered. + * + * Retriggers occurs when the signature help is already active and can be caused by actions such as + * typing a trigger character, a cursor move, or document content changes. + */ + isRetrigger: boolean; + /** + * The currently active `SignatureHelp`. + * + * The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on + * the user navigating through available signatures. + */ + activeSignatureHelp?: SignatureHelp | undefined; +} + +/** + * Parameters for a {@link SignatureHelpRequest}. + */ +export interface SignatureHelpParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * The signature help context. This is only available if the client specifies + * to send this using the client capability `textDocument.signatureHelp.contextSupport === true` + * + * @since 3.15.0 + */ + context?: SignatureHelpContext | undefined; +} + +/** + * How a signature help was triggered. + * + * @since 3.15.0 + */ +export type SignatureHelpTriggerKind = 1 | 2 | 3; + +/** + * Represents the signature of something callable. A signature + * can have a label, like a function-name, a doc-comment, and + * a set of parameters. + */ +export interface SignatureInformation { + /** + * The label of this signature. Will be shown in + * the UI. + */ + label: string; + /** + * The human-readable doc-comment of this signature. Will be shown + * in the UI but can be omitted. + */ + documentation?: string | MarkupContent | undefined; + /** + * The parameters of this signature. + */ + parameters?: ParameterInformation[] | undefined; + /** + * The index of the active parameter. + * + * If `null`, no parameter of the signature is active (for example a named + * argument that does not match any declared parameters). This is only valid + * if the client specifies the client capability + * `textDocument.signatureHelp.noActiveParameterSupport === true` + * + * If provided (or `null`), this is used in place of + * `SignatureHelp.activeParameter`. + * + * @since 3.16.0 + */ + activeParameter?: number | null | undefined; + /** + * A colorized label for the signature, providing classified text runs for VS syntax coloring. + */ + _vs_colorizedLabel?: VSClassifiedTextElement | undefined; +} + +/** + * An interactive text edit. + * + * @since 3.18.0 + */ +export interface SnippetTextEdit { + /** + * The range of the text document to be manipulated. + */ + range: Range; + /** + * The snippet to be inserted. + */ + snippet: StringValue; + /** + * The actual identifier of the snippet edit. + */ + annotationId?: ChangeAnnotationIdentifier | undefined; +} + +/** + * A string value used as a snippet is a template which allows to insert text + * and to control the editor cursor when insertion happens. + * + * A snippet can define tab stops and placeholders with `$1`, `$2` + * and `${3:foo}`. `$0` defines the final tab stop, it defaults to + * the end of the snippet. Variables are defined with `$name` and + * `${name:default value}`. + * + * @since 3.18.0 + */ +export interface StringValue { + /** + * The kind of string value. + */ + kind: "snippet"; + /** + * The snippet string. + */ + value: string; +} + +/** + * Represents information about programming constructs like variables, classes, + * interfaces etc. + */ +export interface SymbolInformation { + /** + * The name of this symbol. + */ + name: string; + /** + * The kind of this symbol. + */ + kind: SymbolKind; + /** + * Tags for this symbol. + * + * @since 3.16.0 + */ + tags?: SymbolTag[] | undefined; + /** + * The name of the symbol containing this symbol. This information is for + * user interface purposes (e.g. to render a qualifier in the user interface + * if necessary). It can't be used to re-infer a hierarchy for the document + * symbols. + */ + containerName?: string | undefined; + /** + * Indicates if this symbol is deprecated. + * + * @deprecated Use tags instead + */ + deprecated?: boolean | undefined; + /** + * The location of this symbol. The location's range is used by a tool + * to reveal the location in the editor. If the symbol is selected in the + * tool the range's start information is used to position the cursor. So + * the range usually spans more than the actual symbol's name and does + * normally include things like visibility modifiers. + * + * The range doesn't have to denote a node range in the sense of an abstract + * syntax tree. It can therefore not be used to re-construct a hierarchy of + * the symbols. + */ + location: Location; +} + +/** + * A symbol kind. + */ +export type SymbolKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26; + +/** + * Symbol tags are extra annotations that tweak the rendering of a symbol. + * + * @since 3.16 + */ +export type SymbolTag = 1; + +/** + * Describes textual changes on a text document. A TextDocumentEdit describes all changes + * on a document version Si and after they are applied move the document to version Si+1. + * So the creator of a TextDocumentEdit doesn't need to sort the array of edits or do any + * kind of ordering. However the edits must be non overlapping. + */ +export interface TextDocumentEdit { + /** + * The text document to change. + */ + textDocument: OptionalVersionedTextDocumentIdentifier; + /** + * The edits to be applied. + * + * @since 3.16.0 - support for AnnotatedTextEdit. This is guarded using a + * client capability. + * + * @since 3.18.0 - support for SnippetTextEdit. This is guarded using a + * client capability. + */ + edits: (TextEdit | AnnotatedTextEdit | SnippetTextEdit)[]; +} + +/** + * A literal to identify a text document in the client. + */ +export interface TextDocumentIdentifier { + /** + * The text document's uri. + */ + uri: DocumentUri; +} + +/** + * A parameter literal used in requests to pass a text document and a position inside that + * document. + */ +export interface TextDocumentPositionParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; +} + +/** + * A text edit applicable to a text document. + */ +export interface TextEdit { + /** + * The range of the text document to be manipulated. To insert + * text into a document create a range where start === end. + */ + range: Range; + /** + * The string to be inserted. For delete operations use an + * empty string. + */ + newText: string; +} + +export interface TypeDefinitionParams { + /** + * The text document. + */ + textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + position: Position; + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; +} + +export type URI = string; + +/** + * A diagnostic report indicating that the last returned + * report is still accurate. + * + * @since 3.17.0 + */ +export interface UnchangedDocumentDiagnosticReport { + /** + * A document diagnostic report indicating + * no changes to the last result. A server can + * only return `unchanged` if result ids are + * provided. + */ + kind: "unchanged"; + /** + * A result id which will be sent on the next + * diagnostic request for the same document. + */ + resultId: string; +} + +/** + * A classified text element containing an array of classified text runs, used for colorized labels in VS. + */ +export interface VSClassifiedTextElement { + /** + * The classified text runs that make up this element. + */ + Runs: VSClassifiedTextRun[]; + /** + * VS type discriminator required by ObjectContentConverter for deserialization. + */ + _vs_type: "ClassifiedTextElement"; +} + +/** + * A classified text run with text and classification type, used for colorized display in VS. + */ +export interface VSClassifiedTextRun { + /** + * The classification type name (e.g. 'keyword', 'class name', 'parameter name'). + */ + ClassificationTypeName: string; + /** + * The text content of this run. + */ + Text: string; + /** + * Optional marker tag type. + */ + MarkerTagType?: string | undefined; + /** + * The style of this text run. + */ + Style?: number | undefined; + /** + * VS type discriminator required by ObjectContentConverter for deserialization. + */ + _vs_type: "ClassifiedTextRun"; +} + +/** + * A container element that groups other VS rich-content elements (images, classified text, or nested containers). Used to build the VS hover raw content that combines a symbol icon with colorized text. + */ +export interface VSContainerElement { + /** + * Layout style for the child elements. + */ + Style: VSContainerElementStyle; + /** + * The child elements contained within this container. + */ + Elements: (VSImageElement | VSClassifiedTextElement | VSContainerElement)[]; + /** + * VS type discriminator required by ObjectContentConverter for deserialization. + */ + _vs_type: "ContainerElement"; +} + +/** + * Layout style for a VSContainerElement's children, mirroring VS's Microsoft.VisualStudio.Text.Adornments.ContainerElementStyle. + */ +export type VSContainerElementStyle = 0 | 1; + +/** + * An image element (e.g. a symbol-kind icon) for use in VS rich content such as hover tooltips. + */ +export interface VSImageElement { + /** + * The image to display. + */ + ImageId: VSImageId; + /** + * VS type discriminator required by ObjectContentConverter for deserialization. + */ + _vs_type: "ImageElement"; +} + +/** + * Identifies an image in a VS image catalog. Used to render symbol-kind icons (e.g. in hover tooltips). + */ +export interface VSImageId { + /** + * The GUID of the image catalog containing this image. + */ + Guid: string; + /** + * The numeric identifier of the image within its catalog. + */ + Id: number; + /** + * VS type discriminator required by ObjectContentConverter for deserialization. + */ + _vs_type: "ImageId"; +} + +/** + * Parameters for the textDocument/_vs_onAutoInsert request. + */ +export interface VSOnAutoInsertParams { + /** + * The text document. + */ + _vs_textDocument: TextDocumentIdentifier; + /** + * The position inside the text document. + */ + _vs_position: Position; + /** + * The character that triggered the auto-insert. + */ + _vs_ch: string; +} + +/** + * Response item for the textDocument/_vs_onAutoInsert request. + */ +export interface VSOnAutoInsertResponseItem { + /** + * The format of the text edit (plaintext or snippet). + */ + _vs_textEditFormat: InsertTextFormat; + /** + * The text edit to apply for the auto-insertion. + */ + _vs_textEdit: TextEdit; +} + +/** + * A VS-specific reference item with grouping support for Find All References. + */ +export interface VSReferenceItem { + /** + * Unique identifier for this reference item. + */ + _vs_id: number; + /** + * The ID of the definition item this reference belongs to. Absent for definition items themselves. + */ + _vs_definitionId?: number | undefined; + /** + * The kind(s) of this reference (read, write, etc.). + */ + _vs_kind?: VSReferenceKind[] | undefined; + /** + * The location of this reference. + */ + _vs_location: Location; + /** + * Classified display text for the definition (used for grouping headers in the UI). + */ + _vs_definitionText?: VSClassifiedTextElement | undefined; + /** + * The project name for this reference. + */ + _vs_projectName?: string | undefined; + /** + * The containing type for this reference. + */ + _vs_containingType?: string | undefined; +} + +export type VSReferenceKind = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17; + +/** + * A workspace edit represents changes to many resources managed in the workspace. The edit + * should either provide `changes` or `documentChanges`. If documentChanges are present + * they are preferred over `changes` if the client can handle versioned document edits. + * + * Since version 3.13.0 a workspace edit can contain resource operations as well. If resource + * operations are present clients need to execute the operations in the order in which they + * are provided. So a workspace edit for example can consist of the following two changes: + * (1) a create file a.txt and (2) a text document edit which insert text into file a.txt. + * + * An invalid sequence (e.g. (1) delete file a.txt and (2) insert text into file a.txt) will + * cause failure of the operation. How the client recovers from the failure is described by + * the client capability: `workspace.workspaceEdit.failureHandling` + */ +export interface WorkspaceEdit { + /** + * Holds changes to existing resources. + */ + changes?: { [key: DocumentUri]: TextEdit[]; } | undefined; + /** + * Depending on the client capability `workspace.workspaceEdit.resourceOperations` document changes + * are either an array of `TextDocumentEdit`s to express changes to n different text documents + * where each text document edit addresses a specific version of a text document. Or it can contain + * above `TextDocumentEdit`s mixed with create, rename and delete file / folder operations. + * + * Whether a client supports versioned document edits is expressed via + * `workspace.workspaceEdit.documentChanges` client capability. + * + * If a client neither supports `documentChanges` nor `workspace.workspaceEdit.resourceOperations` then + * only plain `TextEdit`s using the `changes` property are supported. + */ + documentChanges?: (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[] | undefined; + /** + * A map of change annotations that can be referenced in `AnnotatedTextEdit`s or create, rename and + * delete file / folder operations. + * + * Whether clients honor this property depends on the client capability `workspace.changeAnnotationSupport`. + * + * @since 3.16.0 + */ + changeAnnotations?: { [key: ChangeAnnotationIdentifier]: ChangeAnnotation; } | undefined; +} + +/** + * A special workspace symbol that supports locations without a range. + * + * See also SymbolInformation. + * + * @since 3.17.0 + */ +export interface WorkspaceSymbol { + /** + * The name of this symbol. + */ + name: string; + /** + * The kind of this symbol. + */ + kind: SymbolKind; + /** + * Tags for this symbol. + * + * @since 3.16.0 + */ + tags?: SymbolTag[] | undefined; + /** + * The name of the symbol containing this symbol. This information is for + * user interface purposes (e.g. to render a qualifier in the user interface + * if necessary). It can't be used to re-infer a hierarchy for the document + * symbols. + */ + containerName?: string | undefined; + /** + * The location of the symbol. Whether a server is allowed to + * return a location without a range depends on the client + * capability `workspace.symbol.resolveSupport`. + * + * See SymbolInformation#location for more details. + */ + location: Location | LocationUriOnly; + /** + * A data entry field that is preserved on a workspace symbol between a + * workspace symbol request and a workspace symbol resolve request. + */ + data?: LSPAny | undefined; +} + +/** + * The parameters of a {@link WorkspaceSymbolRequest}. + */ +export interface WorkspaceSymbolParams { + /** + * An optional token that a server can use to report work done progress. + */ + workDoneToken?: ProgressToken | undefined; + /** + * An optional token that a server can use to report partial results (e.g. streaming) to + * the client. + */ + partialResultToken?: ProgressToken | undefined; + /** + * A query string to filter symbols by. Clients may send an empty + * string here to request all symbols. + * + * The `query`-parameter should be interpreted in a *relaxed way* as editors + * will apply their own highlighting and scoring on the results. A good rule + * of thumb is to match case-insensitive and to simply check that the + * characters of *query* appear in their order in a candidate symbol. + * Servers shouldn't use prefix, substring, or similar strict matching. + */ + query: string; + /** + * Scopes the workspace symbol search to projects containing this document. + */ + textDocument?: TextDocumentIdentifier | undefined; +} + +/** Language-feature requests supported by the extension middleware API. */ +export interface LspMiddlewareRequests { + "textDocument/hover": { params: HoverParams; result: Hover | null; }; + "textDocument/completion": { params: CompletionParams; result: CompletionItem[] | CompletionList | null; }; + "completionItem/resolve": { params: CompletionItem; result: CompletionItem; }; + "textDocument/signatureHelp": { params: SignatureHelpParams; result: SignatureHelp | null; }; + "textDocument/definition": { params: DefinitionParams; result: Definition | DefinitionLink[] | null; }; + "textDocument/typeDefinition": { params: TypeDefinitionParams; result: Definition | DefinitionLink[] | null; }; + "textDocument/implementation": { params: ImplementationParams; result: Definition | DefinitionLink[] | null; }; + "textDocument/references": { params: ReferenceParams; result: Location[] | null; }; + "textDocument/documentHighlight": { params: DocumentHighlightParams; result: DocumentHighlight[] | null; }; + "textDocument/documentSymbol": { params: DocumentSymbolParams; result: SymbolInformation[] | DocumentSymbol[] | null; }; + "workspace/symbol": { params: WorkspaceSymbolParams; result: SymbolInformation[] | WorkspaceSymbol[] | null; }; + "textDocument/rename": { params: RenameParams; result: WorkspaceEdit | null; }; + "textDocument/prepareRename": { params: PrepareRenameParams; result: PrepareRenameResult | null; }; + "textDocument/formatting": { params: DocumentFormattingParams; result: TextEdit[] | null; }; + "textDocument/rangeFormatting": { params: DocumentRangeFormattingParams; result: TextEdit[] | null; }; + "textDocument/onTypeFormatting": { params: DocumentOnTypeFormattingParams; result: TextEdit[] | null; }; + "textDocument/selectionRange": { params: SelectionRangeParams; result: SelectionRange[] | null; }; + "textDocument/foldingRange": { params: FoldingRangeParams; result: FoldingRange[] | null; }; + "textDocument/inlayHint": { params: InlayHintParams; result: InlayHint[] | null; }; + "textDocument/codeAction": { params: CodeActionParams; result: (Command | CodeAction)[] | null; }; + "textDocument/codeLens": { params: CodeLensParams; result: CodeLens[] | null; }; + "codeLens/resolve": { params: CodeLens; result: CodeLens; }; + "textDocument/prepareCallHierarchy": { params: CallHierarchyPrepareParams; result: CallHierarchyItem[] | null; }; + "callHierarchy/incomingCalls": { params: CallHierarchyIncomingCallsParams; result: CallHierarchyIncomingCall[] | null; }; + "callHierarchy/outgoingCalls": { params: CallHierarchyOutgoingCallsParams; result: CallHierarchyOutgoingCall[] | null; }; + "textDocument/linkedEditingRange": { params: LinkedEditingRangeParams; result: LinkedEditingRanges | null; }; + "textDocument/semanticTokens/full": { params: SemanticTokensParams; result: SemanticTokens | null; }; + "textDocument/semanticTokens/range": { params: SemanticTokensRangeParams; result: SemanticTokens | null; }; + "textDocument/diagnostic": { params: DocumentDiagnosticParams; result: DocumentDiagnosticReport; }; + "custom/textDocument/sourceDefinition": { params: TextDocumentPositionParams; result: Definition | DefinitionLink[] | null; }; + "custom/textDocument/multiDocumentHighlight": { params: MultiDocumentHighlightParams; result: MultiDocumentHighlight[] | null; }; + "textDocument/_vs_onAutoInsert": { params: VSOnAutoInsertParams; result: VSOnAutoInsertResponseItem | null; }; + "textDocument/_vs_references": { params: ReferenceParams; result: VSReferenceItem[] | null; }; +} diff --git a/packages/typescript/test/api-comparison.bench.ts b/packages/typescript/test/api-comparison.bench.ts index e515cb383ee14..c135a52fbcae5 100644 --- a/packages/typescript/test/api-comparison.bench.ts +++ b/packages/typescript/test/api-comparison.bench.ts @@ -1,406 +1,406 @@ -import { - API as AsyncAPI, - type Project as AsyncProject, -} from "@typescript/typescript/unstable/async"; -import { - all, - API as SyncAPI, - defer, - type Project as SyncProject, -} from "@typescript/typescript/unstable/sync"; -import assert from "node:assert/strict"; -import { readFileSync } from "node:fs"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import ts from "typescript"; -import type { APIRequest } from "../src/api/proto.ts"; -import { - type APIRequestGenerator, - executeRequestGenerators, -} from "../src/api/sync/generatorSupport.ts"; - -const requestCount = 128; -const flightCount = 8; -const requestsPerFlight = requestCount / flightCount; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - singleIteration: { type: "boolean", default: false }, - }, - }); - await runBenchmarks(values); -} - -export async function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; }) { - const { filter, singleIteration } = options ?? {}; - const repoRoot = fileURLToPath(new URL("../../../", import.meta.url).toString()); - const fixturePath = fileURLToPath(new URL("../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()); - const positions = collectIdentifierPositions(fixturePath, requestCount); - const bench = new Bench({ - name: "API comparison", - iterations: 10, - warmupIterations: 4, - ...singleIteration ? { - iterations: 1, - warmup: false, - time: 0, - } : undefined, - }); - - addSyncBenchmarks(); - addAsyncBenchmarks(); - addGeneratorBenchmarks(); - addExecutorBenchmarks(); - addDeferBenchmarks(); - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - await bench.run(); - for (const task of bench.tasks) { - if (task.result && "error" in task.result) throw task.result.error; - } - console.table(bench.table()); - - function addSyncBenchmarks() { - addSyncTask("dependent sequential requests", context => { - let index = 0; - for (let request = 0; request < requestCount; request++) { - const symbol = context.project.checker.getSymbolAtPosition("program.ts", positions[index]); - index = nextPositionIndex(index, symbol?.flags ?? 0); - } - }); - addSyncTask("independent parallel requests", context => { - for (const position of positions) { - context.project.checker.getSymbolAtPosition("program.ts", position); - } - }); - addSyncTask("multiple flights of independent requests", context => { - for (let flight = 0; flight < flightCount; flight++) { - const start = flight * requestsPerFlight; - for (let request = 0; request < requestsPerFlight; request++) { - context.project.checker.getSymbolAtPosition("program.ts", positions[start + request]); - } - } - }); - } - - function addAsyncBenchmarks() { - addAsyncTask("dependent sequential requests", async context => { - let index = 0; - for (let request = 0; request < requestCount; request++) { - const symbol = await context.project.checker.getSymbolAtPosition("program.ts", positions[index]); - index = nextPositionIndex(index, symbol?.flags ?? 0); - } - }); - addAsyncTask("independent parallel requests", async context => { - await Promise.all(positions.map(position => context.project.checker.getSymbolAtPosition("program.ts", position))); - }); - addAsyncTask("multiple flights of independent requests", async context => { - for (let flight = 0; flight < flightCount; flight++) { - const start = flight * requestsPerFlight; - await Promise.all(positions.slice(start, start + requestsPerFlight).map(position => context.project.checker.getSymbolAtPosition("program.ts", position))); - } - }); - } - - function addGeneratorBenchmarks() { - addGeneratorTask("dependent sequential requests", context => { - context.api.batch(runDependentRequests(context.project)); - }); - addGeneratorTask("independent parallel requests", context => { - context.api.batch(...positions.map(position => context.project.checker.getSymbolAtPosition.gen("program.ts", position))); - }); - addGeneratorTask("independent parallel requests (batch defer)", context => { - context.api.batch(...positions.map(position => defer(context.project.checker.getSymbolAtPosition.gen("program.ts", position)))); - }); - addGeneratorTask("multiple flights of independent requests", context => { - context.api.batch(...Array.from({ length: requestsPerFlight }, (_, lane) => runRequestLane(context.project, lane))); - }); - addGeneratorTask("multiple flights of independent requests (batch defer)", context => { - context.api.batch(...Array.from({ length: requestsPerFlight }, (_, lane) => defer(runRequestLane(context.project, lane)))); - }); - addGeneratorTask("multiple flights of independent requests (yield* defer)", context => { - context.api.batch(runDeferredRequestLanes(context.project)); - }); - addGeneratorTask("multiple flights of independent requests (repeated all)", context => { - context.api.batch(runRequestFlights(context.project)); - }); - for (const depth of [1, 4, 16]) { - addGeneratorTask(`independent parallel requests (all depth ${depth})`, context => { - context.api.batch(nestAll(positions.map(position => context.project.checker.getSymbolAtPosition.gen("program.ts", position)), depth)); - }); - addGeneratorTask(`multiple flights of independent requests (all depth ${depth})`, context => { - context.api.batch(nestAll(Array.from({ length: requestsPerFlight }, (_, lane) => runRequestLane(context.project, lane)), depth)); - }); - } - } - - function nestAll(generators: APIRequestGenerator[], depth: number): APIRequestGenerator { - let generator = all(...generators); - for (let level = 1; level < depth; level++) { - generator = all(generator); - } - return generator; - } - - function addExecutorBenchmarks() { - for (const rounds of [1, flightCount]) { - for (const depth of [0, 1, 4, 16]) { - bench.add(`executor only - ${rounds} flights (${depth ? `all depth ${depth}` : "direct batch"})`, () => run(false), { - async: false, - beforeAll: () => { - run(true); - }, - }); - if (depth && rounds > 1) { - bench.add(`executor only - ${rounds} flights (repeated all depth ${depth})`, () => run(false, true), { - async: false, - beforeAll: () => { - run(true, true); - }, - }); - } - - function run(verify: boolean, repeatedJoins = false) { - const generators = repeatedJoins ? [runFlights()] : Array.from({ length: requestCount / rounds }, (_, lane) => runLane(lane)); - let executedRequests = 0; - let executedRounds = 0; - const results = executeRequestGenerators(depth && !repeatedJoins ? [nestAll(generators, depth)] : generators, requests => { - executedRequests += requests.length; - executedRounds++; - return requests.map(request => ({ result: request.params })); - }); - if (verify) { - assert.equal(executedRequests, requestCount); - assert.equal(executedRounds, rounds); - assert.equal(results.flat(Infinity).reduce((sum, value) => sum + value, 0), requestCount * (requestCount - 1) / 2); - } - } - - function* runLane(lane: number): APIRequestGenerator { - let sum = 0; - for (let flight = 0; flight < rounds; flight++) { - sum += yield { method: "benchmark", params: flight * (requestCount / rounds) + lane } as unknown as APIRequest; - } - return sum; - } - - function* runFlights(): APIRequestGenerator { - const results: unknown[] = []; - for (let flight = 0; flight < rounds; flight++) { - results.push(yield* nestAll(Array.from({ length: requestCount / rounds }, (_, lane) => runRequest(flight * (requestCount / rounds) + lane)), depth)); - } - return results; - } - - function* runRequest(index: number): APIRequestGenerator { - return yield { method: "benchmark", params: index } as unknown as APIRequest; - } - } - } - } - - function addDeferBenchmarks() { - const child = (function* () { - assert.fail("Lifecycle benchmark must not start the child"); - })(); - for (const helper of [all, defer]) { - let generators: APIRequestGenerator[] = []; - bench.add(`helper lifecycle - ${helper.name}`, () => { - generators = Array.from({ length: requestCount }, () => helper(child)); - for (const generator of generators) { - generator.next(); - generator.next(); - } - }, { - async: false, - afterAll: () => { - assert.equal(generators.length, requestCount); - for (const generator of generators) assert.deepEqual(generator.next(), { done: true, value: undefined }); - }, - }); - } - - for (const rounds of [1, flightCount]) { - for (const mode of ["direct", "batch defer", "yield* defer"] as const) { - bench.add(`executor defer - ${rounds} flights (${mode})`, () => run(false), { - async: false, - beforeAll: () => { - run(true); - }, - }); - - function run(verify: boolean) { - let completed = 0; - let checksum = 0; - let executedRequests = 0; - let executedRounds = 0; - const generators = Array.from({ length: requestCount / rounds }, (_, lane) => runLane(lane)); - const results = executeRequestGenerators( - mode === "direct" ? generators : mode === "batch defer" ? generators.map(generator => defer(generator)) : [schedule()], - requests => { - executedRequests += requests.length; - executedRounds++; - return requests.map(request => ({ result: request.params })); - }, - ); - if (verify) { - assert.equal(executedRequests, requestCount); - assert.equal(executedRounds, rounds); - assert.equal(completed, requestCount / rounds); - assert.equal(checksum, requestCount * (requestCount - 1) / 2); - if (mode === "batch defer") assert.deepEqual(results, []); - else if (mode === "yield* defer") assert.deepEqual(results, [undefined]); - else { - assert.equal( - results.reduce((sum, value) => { - assert.ok(typeof value === "number"); - return sum + value; - }, 0), - checksum, - ); - } - } - - function* runLane(lane: number): APIRequestGenerator { - let sum = 0; - for (let flight = 0; flight < rounds; flight++) { - sum += yield { method: "benchmark", params: flight * (requestCount / rounds) + lane } as unknown as APIRequest; - } - completed++; - checksum += sum; - return sum; - } - - function* schedule() { - for (const generator of generators) yield* defer(generator); - } - } - } - } - } - - function* runDependentRequests(project: SyncProject) { - let index = 0; - for (let request = 0; request < requestCount; request++) { - const symbol = yield* project.checker.getSymbolAtPosition.gen("program.ts", positions[index]); - index = nextPositionIndex(index, symbol?.flags ?? 0); - } - } - - function* runRequestLane(project: SyncProject, lane: number) { - for (let flight = 0; flight < flightCount; flight++) { - yield* project.checker.getSymbolAtPosition.gen("program.ts", positions[flight * requestsPerFlight + lane]); - } - } - - function* runRequestFlights(project: SyncProject) { - for (let flight = 0; flight < flightCount; flight++) { - const start = flight * requestsPerFlight; - yield* all(...positions.slice(start, start + requestsPerFlight).map(position => project.checker.getSymbolAtPosition.gen("program.ts", position))); - } - } - - function* runDeferredRequestLanes(project: SyncProject) { - for (let lane = 0; lane < requestsPerFlight; lane++) { - yield* defer(runRequestLane(project, lane)); - } - } - - function nextPositionIndex(index: number, symbolFlags: number): number { - return (index + symbolFlags + 1) % positions.length; - } - - function addSyncTask(name: string, run: (context: SyncContext) => void) { - let context: SyncContext; - bench.add(`sync - ${name}`, () => run(context), { - async: false, - beforeAll: () => { - context = createSyncContext(); - }, - afterAll: () => context.api.close(), - }); - } - - function addAsyncTask(name: string, run: (context: AsyncContext) => Promise) { - let context: AsyncContext; - bench.add(`async - ${name}`, () => run(context), { - async: true, - beforeAll: async () => { - context = await createAsyncContext(); - }, - afterAll: async () => context.api.close(), - }); - } - - function addGeneratorTask(name: string, run: (context: SyncContext) => void) { - let context: SyncContext; - bench.add(`generators - ${name}`, () => run(context), { - async: false, - beforeAll: () => { - context = createGeneratorContext(); - }, - afterAll: () => context.api.close(), - }); - } - - function createSyncContext(): SyncContext { - const api = new SyncAPI({ cwd: repoRoot }); - const snapshot = api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); - const project = snapshot.getProjects()[0]; - project.checker.getSymbolAtPosition("core.ts", 0); - return { api, project }; - } - - async function createAsyncContext(): Promise { - const api = new AsyncAPI({ cwd: repoRoot }); - const snapshot = await api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); - const project = snapshot.getProjects()[0]; - await project.checker.getSymbolAtPosition("core.ts", 0); - return { api, project }; - } - - function createGeneratorContext(): SyncContext { - const api = new SyncAPI({ cwd: repoRoot }); - const [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); - const project = snapshot.getProjects()[0]; - api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); - return { api, project }; - } -} - -interface SyncContext { - api: SyncAPI; - project: SyncProject; -} - -interface AsyncContext { - api: AsyncAPI; - project: AsyncProject; -} - -function collectIdentifierPositions(fileName: string, count: number): number[] { - const sourceFile = ts.createSourceFile(fileName, readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true); - const positions: number[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === ts.SyntaxKind.Identifier) { - positions.push(node.pos); - } - node.forEachChild(visit); - }); - if (positions.length < count) { - throw new Error(`Expected at least ${count} identifiers in ${fileName}, found ${positions.length}`); - } - return Array.from({ length: count }, (_, index) => positions[Math.floor(index * positions.length / count)]); -} +import { + API as AsyncAPI, + type Project as AsyncProject, +} from "@typescript/typescript/unstable/async"; +import { + all, + API as SyncAPI, + defer, + type Project as SyncProject, +} from "@typescript/typescript/unstable/sync"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import ts from "typescript"; +import type { APIRequest } from "../src/api/proto.ts"; +import { + type APIRequestGenerator, + executeRequestGenerators, +} from "../src/api/sync/generatorSupport.ts"; + +const requestCount = 128; +const flightCount = 8; +const requestsPerFlight = requestCount / flightCount; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + singleIteration: { type: "boolean", default: false }, + }, + }); + await runBenchmarks(values); +} + +export async function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; }) { + const { filter, singleIteration } = options ?? {}; + const repoRoot = fileURLToPath(new URL("../../../", import.meta.url).toString()); + const fixturePath = fileURLToPath(new URL("../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()); + const positions = collectIdentifierPositions(fixturePath, requestCount); + const bench = new Bench({ + name: "API comparison", + iterations: 10, + warmupIterations: 4, + ...singleIteration ? { + iterations: 1, + warmup: false, + time: 0, + } : undefined, + }); + + addSyncBenchmarks(); + addAsyncBenchmarks(); + addGeneratorBenchmarks(); + addExecutorBenchmarks(); + addDeferBenchmarks(); + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + await bench.run(); + for (const task of bench.tasks) { + if (task.result && "error" in task.result) throw task.result.error; + } + console.table(bench.table()); + + function addSyncBenchmarks() { + addSyncTask("dependent sequential requests", context => { + let index = 0; + for (let request = 0; request < requestCount; request++) { + const symbol = context.project.checker.getSymbolAtPosition("program.ts", positions[index]); + index = nextPositionIndex(index, symbol?.flags ?? 0); + } + }); + addSyncTask("independent parallel requests", context => { + for (const position of positions) { + context.project.checker.getSymbolAtPosition("program.ts", position); + } + }); + addSyncTask("multiple flights of independent requests", context => { + for (let flight = 0; flight < flightCount; flight++) { + const start = flight * requestsPerFlight; + for (let request = 0; request < requestsPerFlight; request++) { + context.project.checker.getSymbolAtPosition("program.ts", positions[start + request]); + } + } + }); + } + + function addAsyncBenchmarks() { + addAsyncTask("dependent sequential requests", async context => { + let index = 0; + for (let request = 0; request < requestCount; request++) { + const symbol = await context.project.checker.getSymbolAtPosition("program.ts", positions[index]); + index = nextPositionIndex(index, symbol?.flags ?? 0); + } + }); + addAsyncTask("independent parallel requests", async context => { + await Promise.all(positions.map(position => context.project.checker.getSymbolAtPosition("program.ts", position))); + }); + addAsyncTask("multiple flights of independent requests", async context => { + for (let flight = 0; flight < flightCount; flight++) { + const start = flight * requestsPerFlight; + await Promise.all(positions.slice(start, start + requestsPerFlight).map(position => context.project.checker.getSymbolAtPosition("program.ts", position))); + } + }); + } + + function addGeneratorBenchmarks() { + addGeneratorTask("dependent sequential requests", context => { + context.api.batch(runDependentRequests(context.project)); + }); + addGeneratorTask("independent parallel requests", context => { + context.api.batch(...positions.map(position => context.project.checker.getSymbolAtPosition.gen("program.ts", position))); + }); + addGeneratorTask("independent parallel requests (batch defer)", context => { + context.api.batch(...positions.map(position => defer(context.project.checker.getSymbolAtPosition.gen("program.ts", position)))); + }); + addGeneratorTask("multiple flights of independent requests", context => { + context.api.batch(...Array.from({ length: requestsPerFlight }, (_, lane) => runRequestLane(context.project, lane))); + }); + addGeneratorTask("multiple flights of independent requests (batch defer)", context => { + context.api.batch(...Array.from({ length: requestsPerFlight }, (_, lane) => defer(runRequestLane(context.project, lane)))); + }); + addGeneratorTask("multiple flights of independent requests (yield* defer)", context => { + context.api.batch(runDeferredRequestLanes(context.project)); + }); + addGeneratorTask("multiple flights of independent requests (repeated all)", context => { + context.api.batch(runRequestFlights(context.project)); + }); + for (const depth of [1, 4, 16]) { + addGeneratorTask(`independent parallel requests (all depth ${depth})`, context => { + context.api.batch(nestAll(positions.map(position => context.project.checker.getSymbolAtPosition.gen("program.ts", position)), depth)); + }); + addGeneratorTask(`multiple flights of independent requests (all depth ${depth})`, context => { + context.api.batch(nestAll(Array.from({ length: requestsPerFlight }, (_, lane) => runRequestLane(context.project, lane)), depth)); + }); + } + } + + function nestAll(generators: APIRequestGenerator[], depth: number): APIRequestGenerator { + let generator = all(...generators); + for (let level = 1; level < depth; level++) { + generator = all(generator); + } + return generator; + } + + function addExecutorBenchmarks() { + for (const rounds of [1, flightCount]) { + for (const depth of [0, 1, 4, 16]) { + bench.add(`executor only - ${rounds} flights (${depth ? `all depth ${depth}` : "direct batch"})`, () => run(false), { + async: false, + beforeAll: () => { + run(true); + }, + }); + if (depth && rounds > 1) { + bench.add(`executor only - ${rounds} flights (repeated all depth ${depth})`, () => run(false, true), { + async: false, + beforeAll: () => { + run(true, true); + }, + }); + } + + function run(verify: boolean, repeatedJoins = false) { + const generators = repeatedJoins ? [runFlights()] : Array.from({ length: requestCount / rounds }, (_, lane) => runLane(lane)); + let executedRequests = 0; + let executedRounds = 0; + const results = executeRequestGenerators(depth && !repeatedJoins ? [nestAll(generators, depth)] : generators, requests => { + executedRequests += requests.length; + executedRounds++; + return requests.map(request => ({ result: request.params })); + }); + if (verify) { + assert.equal(executedRequests, requestCount); + assert.equal(executedRounds, rounds); + assert.equal(results.flat(Infinity).reduce((sum, value) => sum + value, 0), requestCount * (requestCount - 1) / 2); + } + } + + function* runLane(lane: number): APIRequestGenerator { + let sum = 0; + for (let flight = 0; flight < rounds; flight++) { + sum += yield { method: "benchmark", params: flight * (requestCount / rounds) + lane } as unknown as APIRequest; + } + return sum; + } + + function* runFlights(): APIRequestGenerator { + const results: unknown[] = []; + for (let flight = 0; flight < rounds; flight++) { + results.push(yield* nestAll(Array.from({ length: requestCount / rounds }, (_, lane) => runRequest(flight * (requestCount / rounds) + lane)), depth)); + } + return results; + } + + function* runRequest(index: number): APIRequestGenerator { + return yield { method: "benchmark", params: index } as unknown as APIRequest; + } + } + } + } + + function addDeferBenchmarks() { + const child = (function* () { + assert.fail("Lifecycle benchmark must not start the child"); + })(); + for (const helper of [all, defer]) { + let generators: APIRequestGenerator[] = []; + bench.add(`helper lifecycle - ${helper.name}`, () => { + generators = Array.from({ length: requestCount }, () => helper(child)); + for (const generator of generators) { + generator.next(); + generator.next(); + } + }, { + async: false, + afterAll: () => { + assert.equal(generators.length, requestCount); + for (const generator of generators) assert.deepEqual(generator.next(), { done: true, value: undefined }); + }, + }); + } + + for (const rounds of [1, flightCount]) { + for (const mode of ["direct", "batch defer", "yield* defer"] as const) { + bench.add(`executor defer - ${rounds} flights (${mode})`, () => run(false), { + async: false, + beforeAll: () => { + run(true); + }, + }); + + function run(verify: boolean) { + let completed = 0; + let checksum = 0; + let executedRequests = 0; + let executedRounds = 0; + const generators = Array.from({ length: requestCount / rounds }, (_, lane) => runLane(lane)); + const results = executeRequestGenerators( + mode === "direct" ? generators : mode === "batch defer" ? generators.map(generator => defer(generator)) : [schedule()], + requests => { + executedRequests += requests.length; + executedRounds++; + return requests.map(request => ({ result: request.params })); + }, + ); + if (verify) { + assert.equal(executedRequests, requestCount); + assert.equal(executedRounds, rounds); + assert.equal(completed, requestCount / rounds); + assert.equal(checksum, requestCount * (requestCount - 1) / 2); + if (mode === "batch defer") assert.deepEqual(results, []); + else if (mode === "yield* defer") assert.deepEqual(results, [undefined]); + else { + assert.equal( + results.reduce((sum, value) => { + assert.ok(typeof value === "number"); + return sum + value; + }, 0), + checksum, + ); + } + } + + function* runLane(lane: number): APIRequestGenerator { + let sum = 0; + for (let flight = 0; flight < rounds; flight++) { + sum += yield { method: "benchmark", params: flight * (requestCount / rounds) + lane } as unknown as APIRequest; + } + completed++; + checksum += sum; + return sum; + } + + function* schedule() { + for (const generator of generators) yield* defer(generator); + } + } + } + } + } + + function* runDependentRequests(project: SyncProject) { + let index = 0; + for (let request = 0; request < requestCount; request++) { + const symbol = yield* project.checker.getSymbolAtPosition.gen("program.ts", positions[index]); + index = nextPositionIndex(index, symbol?.flags ?? 0); + } + } + + function* runRequestLane(project: SyncProject, lane: number) { + for (let flight = 0; flight < flightCount; flight++) { + yield* project.checker.getSymbolAtPosition.gen("program.ts", positions[flight * requestsPerFlight + lane]); + } + } + + function* runRequestFlights(project: SyncProject) { + for (let flight = 0; flight < flightCount; flight++) { + const start = flight * requestsPerFlight; + yield* all(...positions.slice(start, start + requestsPerFlight).map(position => project.checker.getSymbolAtPosition.gen("program.ts", position))); + } + } + + function* runDeferredRequestLanes(project: SyncProject) { + for (let lane = 0; lane < requestsPerFlight; lane++) { + yield* defer(runRequestLane(project, lane)); + } + } + + function nextPositionIndex(index: number, symbolFlags: number): number { + return (index + symbolFlags + 1) % positions.length; + } + + function addSyncTask(name: string, run: (context: SyncContext) => void) { + let context: SyncContext; + bench.add(`sync - ${name}`, () => run(context), { + async: false, + beforeAll: () => { + context = createSyncContext(); + }, + afterAll: () => context.api.close(), + }); + } + + function addAsyncTask(name: string, run: (context: AsyncContext) => Promise) { + let context: AsyncContext; + bench.add(`async - ${name}`, () => run(context), { + async: true, + beforeAll: async () => { + context = await createAsyncContext(); + }, + afterAll: async () => context.api.close(), + }); + } + + function addGeneratorTask(name: string, run: (context: SyncContext) => void) { + let context: SyncContext; + bench.add(`generators - ${name}`, () => run(context), { + async: false, + beforeAll: () => { + context = createGeneratorContext(); + }, + afterAll: () => context.api.close(), + }); + } + + function createSyncContext(): SyncContext { + const api = new SyncAPI({ cwd: repoRoot }); + const snapshot = api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); + const project = snapshot.getProjects()[0]; + project.checker.getSymbolAtPosition("core.ts", 0); + return { api, project }; + } + + async function createAsyncContext(): Promise { + const api = new AsyncAPI({ cwd: repoRoot }); + const snapshot = await api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); + const project = snapshot.getProjects()[0]; + await project.checker.getSymbolAtPosition("core.ts", 0); + return { api, project }; + } + + function createGeneratorContext(): SyncContext { + const api = new SyncAPI({ cwd: repoRoot }); + const [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); + const project = snapshot.getProjects()[0]; + api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); + return { api, project }; + } +} + +interface SyncContext { + api: SyncAPI; + project: SyncProject; +} + +interface AsyncContext { + api: AsyncAPI; + project: AsyncProject; +} + +function collectIdentifierPositions(fileName: string, count: number): number[] { + const sourceFile = ts.createSourceFile(fileName, readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true); + const positions: number[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === ts.SyntaxKind.Identifier) { + positions.push(node.pos); + } + node.forEachChild(visit); + }); + if (positions.length < count) { + throw new Error(`Expected at least ${count} identifiers in ${fileName}, found ${positions.length}`); + } + return Array.from({ length: count }, (_, index) => positions[Math.floor(index * positions.length / count)]); +} diff --git a/packages/typescript/test/api.bench.ts b/packages/typescript/test/api.bench.ts index c91d0ac0c83a4..17e8aa199630b 100644 --- a/packages/typescript/test/api.bench.ts +++ b/packages/typescript/test/api.bench.ts @@ -1,11 +1,11 @@ -import { fileURLToPath } from "node:url"; -import { runBenchmarks as runAsyncBenchmarks } from "./async/api.bench.ts"; -import { runBenchmarks as runGeneratorBenchmarks } from "./generators/api.bench.ts"; -import { runBenchmarks as runSyncBenchmarks } from "./sync/api.bench.ts"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - await runAsyncBenchmarks(); - runSyncBenchmarks(); - runGeneratorBenchmarks(); -} +import { fileURLToPath } from "node:url"; +import { runBenchmarks as runAsyncBenchmarks } from "./async/api.bench.ts"; +import { runBenchmarks as runGeneratorBenchmarks } from "./generators/api.bench.ts"; +import { runBenchmarks as runSyncBenchmarks } from "./sync/api.bench.ts"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + await runAsyncBenchmarks(); + runSyncBenchmarks(); + runGeneratorBenchmarks(); +} diff --git a/packages/typescript/test/async/api.bench.ts b/packages/typescript/test/async/api.bench.ts index 01196f4cece46..cd90727c1ba7e 100644 --- a/packages/typescript/test/async/api.bench.ts +++ b/packages/typescript/test/async/api.bench.ts @@ -1,272 +1,272 @@ -import { - type Node, - type SourceFile, - SyntaxKind, -} from "@typescript/typescript/unstable/ast"; -import { - API, - type Project, - type Snapshot, -} from "@typescript/typescript/unstable/async"; // @sync: } from "@typescript/typescript/unstable/sync"; -import { writeFileSync } from "node:fs"; -import inspector from "node:inspector"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import ts from "typescript"; -import { RemoteSourceFile } from "../../src/api/node/node.ts"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - singleIteration: { type: "boolean", default: false }, - cpuprofile: { type: "boolean", default: false }, - }, - }); - await runBenchmarks(values); -} - -export async function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { - const { filter, singleIteration, cpuprofile } = options ?? {}; - const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); - - const bench = new Bench({ - name: "Async API", // @sync: name: "Sync API", // @generators: name: "Generator API", - teardown, - // Reduce iterations from the default 64 to 10. Slow tasks - // are dominated by the iteration minimum, not the time limit. - // 10 iterations still gives stable medians while cutting total - // bench time by ~5x. - iterations: 10, - warmupIterations: 4, - ...singleIteration ? { - iterations: 1, - warmup: false, - time: 0, - } : undefined, - }); - - let api: API; - let snapshot: Snapshot; - let project: Project; - let tsProgram: ts.Program; - let file: SourceFile; - let tsFile: ts.SourceFile; - - const programIdentifierCount = await (async () => { - await spawnAPI(); - await loadSnapshot(); - await getProgramTS(); - let count = 0; - file!.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - count++; - } - node.forEachChild(visit); - }); - await teardown(); - return count; - })(); - - // Tinybench's `isFnAsyncResource` probes each task function by *calling* - // it once during `.add()` to detect whether it returns a Promise. - // In sync mode every task function is a plain (non-async) function, so - // the probe actually executes the benchmarked code (spawning processes, - // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit - // `async` flag on every task skips the probe entirely. - const isAsync = true; // @sync: const isAsync = false; - - bench - .add("spawn API", async () => { - await spawnAPI(); - }, { async: isAsync }) - .add("load snapshot", async () => { - await loadSnapshot(); - }, { async: isAsync, beforeAll: spawnAPI }) - .add("TS - load project", () => { - tsCreateProgram(); - }, { async: isAsync }) - .add("transfer debug.ts", async () => { - await getDebugTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer program.ts", async () => { - await getProgramTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer checker.ts", async () => { - await getCheckerTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("materialize program.ts", async () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) - .add("materialize checker.ts", async () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) - .add("getSymbolAtPosition - one location", async () => { - await project.checker.getSymbolAtPosition("program.ts", 8895); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("program.ts", 8895)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) - .add("TS - getSymbolAtPosition - one location", () => { - tsProgram.getTypeChecker().getSymbolAtLocation( - // @ts-ignore internal API - ts.getTokenAtPosition(tsFile, 8895), - ); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, async () => { - // @generators-only-start - // api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtPosition.gen("program.ts", node.pos))); - // @generators-only-end - // @generators-skip-block-start - for (const node of collectIdentifiers(file)) { - await project.checker.getSymbolAtPosition("program.ts", node.pos); - } - // @generators-skip-block-end - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, async () => { - const positions = collectIdentifiers(file).map(node => node.pos); - await project.checker.getSymbolAtPosition("program.ts", positions); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("program.ts", positions)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, async () => { - // @generators-only-start - // api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtLocation.gen(node))); - // @generators-only-end - // @generators-skip-block-start - for (const node of collectIdentifiers(file)) { - await project.checker.getSymbolAtLocation(node); - } - // @generators-skip-block-end - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, async () => { - const nodes = collectIdentifiers(file); - await project.checker.getSymbolAtLocation(nodes); // @generators: api.batch(project.checker.getSymbolAtLocation.gen(nodes)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { - const checker = tsProgram.getTypeChecker(); - tsFile.forEachChild(function visit(node) { - if (node.kind === ts.SyntaxKind.Identifier) { - checker.getSymbolAtLocation(node); - } - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - let session: inspector.Session | undefined; - if (cpuprofile) { - session = new inspector.Session(); - session.connect(); - session.post("Profiler.enable"); - session.post("Profiler.start"); - } - - await bench.run(); // @sync: bench.runSync(); - await teardown(); // @sync: teardown(); - - if (session) { - session.post("Profiler.stop", (err, { profile }) => { - if (err) throw err; - const outPath = `bench-${Date.now()}.cpuprofile`; - writeFileSync(outPath, JSON.stringify(profile)); - console.log(`CPU profile written to ${outPath}`); - }); - session.disconnect(); - } - console.table(bench.table()); - - function collectIdentifiers(sourceFile: SourceFile): Node[] { - const nodes: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - nodes.push(node); - } - node.forEachChild(visit); - }); - return nodes; - } - - async function spawnAPI() { - api = new API({ - cwd: repoRoot, - }); - } - - async function loadSnapshot() { - snapshot = await api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); // @generators: [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); - project = snapshot.getProjects()[0]; - } - - function tsCreateProgram() { - const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); - const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); - const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); - const host = ts.createCompilerHost(parsedCommandLine.options); - tsProgram = ts.createProgram({ - rootNames: parsedCommandLine.fileNames, - options: parsedCommandLine.options, - host, - }); - } - - async function createChecker() { - // checker is created lazily, for measuring symbol time in a loop - // we need to create it first. - await project.checker.getSymbolAtPosition("core.ts", 0); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); - } - - function tsCreateChecker() { - tsProgram.getTypeChecker(); - } - - async function getDebugTS() { - file = (await project.program.getSourceFile("debug.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("debug.ts"))[0]!; - } - - async function getProgramTS() { - file = (await project.program.getSourceFile("program.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("program.ts"))[0]!; - } - - function tsGetProgramTS() { - tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; - } - - async function getCheckerTS() { - file = (await project.program.getSourceFile("checker.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("checker.ts"))[0]!; - } - - function clearSourceFileCache() { - api.clearSourceFileCache(); - } - - async function teardown() { - await api?.close(); - api = undefined!; - snapshot = undefined!; - project = undefined!; - file = undefined!; - tsProgram = undefined!; - tsFile = undefined!; - } - - function all(...fns: (() => void | Promise)[]) { - return async () => { - for (const fn of fns) { - await fn(); - } - }; - } -} +import { + type Node, + type SourceFile, + SyntaxKind, +} from "@typescript/typescript/unstable/ast"; +import { + API, + type Project, + type Snapshot, +} from "@typescript/typescript/unstable/async"; // @sync: } from "@typescript/typescript/unstable/sync"; +import { writeFileSync } from "node:fs"; +import inspector from "node:inspector"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import ts from "typescript"; +import { RemoteSourceFile } from "../../src/api/node/node.ts"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + singleIteration: { type: "boolean", default: false }, + cpuprofile: { type: "boolean", default: false }, + }, + }); + await runBenchmarks(values); +} + +export async function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { + const { filter, singleIteration, cpuprofile } = options ?? {}; + const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); + + const bench = new Bench({ + name: "Async API", // @sync: name: "Sync API", // @generators: name: "Generator API", + teardown, + // Reduce iterations from the default 64 to 10. Slow tasks + // are dominated by the iteration minimum, not the time limit. + // 10 iterations still gives stable medians while cutting total + // bench time by ~5x. + iterations: 10, + warmupIterations: 4, + ...singleIteration ? { + iterations: 1, + warmup: false, + time: 0, + } : undefined, + }); + + let api: API; + let snapshot: Snapshot; + let project: Project; + let tsProgram: ts.Program; + let file: SourceFile; + let tsFile: ts.SourceFile; + + const programIdentifierCount = await (async () => { + await spawnAPI(); + await loadSnapshot(); + await getProgramTS(); + let count = 0; + file!.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + count++; + } + node.forEachChild(visit); + }); + await teardown(); + return count; + })(); + + // Tinybench's `isFnAsyncResource` probes each task function by *calling* + // it once during `.add()` to detect whether it returns a Promise. + // In sync mode every task function is a plain (non-async) function, so + // the probe actually executes the benchmarked code (spawning processes, + // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit + // `async` flag on every task skips the probe entirely. + const isAsync = true; // @sync: const isAsync = false; + + bench + .add("spawn API", async () => { + await spawnAPI(); + }, { async: isAsync }) + .add("load snapshot", async () => { + await loadSnapshot(); + }, { async: isAsync, beforeAll: spawnAPI }) + .add("TS - load project", () => { + tsCreateProgram(); + }, { async: isAsync }) + .add("transfer debug.ts", async () => { + await getDebugTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer program.ts", async () => { + await getProgramTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer checker.ts", async () => { + await getCheckerTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("materialize program.ts", async () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) + .add("materialize checker.ts", async () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) + .add("getSymbolAtPosition - one location", async () => { + await project.checker.getSymbolAtPosition("program.ts", 8895); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("program.ts", 8895)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) + .add("TS - getSymbolAtPosition - one location", () => { + tsProgram.getTypeChecker().getSymbolAtLocation( + // @ts-ignore internal API + ts.getTokenAtPosition(tsFile, 8895), + ); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, async () => { + // @generators-only-start + // api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtPosition.gen("program.ts", node.pos))); + // @generators-only-end + // @generators-skip-block-start + for (const node of collectIdentifiers(file)) { + await project.checker.getSymbolAtPosition("program.ts", node.pos); + } + // @generators-skip-block-end + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, async () => { + const positions = collectIdentifiers(file).map(node => node.pos); + await project.checker.getSymbolAtPosition("program.ts", positions); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("program.ts", positions)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, async () => { + // @generators-only-start + // api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtLocation.gen(node))); + // @generators-only-end + // @generators-skip-block-start + for (const node of collectIdentifiers(file)) { + await project.checker.getSymbolAtLocation(node); + } + // @generators-skip-block-end + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, async () => { + const nodes = collectIdentifiers(file); + await project.checker.getSymbolAtLocation(nodes); // @generators: api.batch(project.checker.getSymbolAtLocation.gen(nodes)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { + const checker = tsProgram.getTypeChecker(); + tsFile.forEachChild(function visit(node) { + if (node.kind === ts.SyntaxKind.Identifier) { + checker.getSymbolAtLocation(node); + } + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + let session: inspector.Session | undefined; + if (cpuprofile) { + session = new inspector.Session(); + session.connect(); + session.post("Profiler.enable"); + session.post("Profiler.start"); + } + + await bench.run(); // @sync: bench.runSync(); + await teardown(); // @sync: teardown(); + + if (session) { + session.post("Profiler.stop", (err, { profile }) => { + if (err) throw err; + const outPath = `bench-${Date.now()}.cpuprofile`; + writeFileSync(outPath, JSON.stringify(profile)); + console.log(`CPU profile written to ${outPath}`); + }); + session.disconnect(); + } + console.table(bench.table()); + + function collectIdentifiers(sourceFile: SourceFile): Node[] { + const nodes: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + nodes.push(node); + } + node.forEachChild(visit); + }); + return nodes; + } + + async function spawnAPI() { + api = new API({ + cwd: repoRoot, + }); + } + + async function loadSnapshot() { + snapshot = await api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); // @generators: [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); + project = snapshot.getProjects()[0]; + } + + function tsCreateProgram() { + const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); + const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); + const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); + const host = ts.createCompilerHost(parsedCommandLine.options); + tsProgram = ts.createProgram({ + rootNames: parsedCommandLine.fileNames, + options: parsedCommandLine.options, + host, + }); + } + + async function createChecker() { + // checker is created lazily, for measuring symbol time in a loop + // we need to create it first. + await project.checker.getSymbolAtPosition("core.ts", 0); // @generators: api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); + } + + function tsCreateChecker() { + tsProgram.getTypeChecker(); + } + + async function getDebugTS() { + file = (await project.program.getSourceFile("debug.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("debug.ts"))[0]!; + } + + async function getProgramTS() { + file = (await project.program.getSourceFile("program.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("program.ts"))[0]!; + } + + function tsGetProgramTS() { + tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; + } + + async function getCheckerTS() { + file = (await project.program.getSourceFile("checker.ts"))!; // @generators: file = api.batch(project.program.getSourceFile.gen("checker.ts"))[0]!; + } + + function clearSourceFileCache() { + api.clearSourceFileCache(); + } + + async function teardown() { + await api?.close(); + api = undefined!; + snapshot = undefined!; + project = undefined!; + file = undefined!; + tsProgram = undefined!; + tsFile = undefined!; + } + + function all(...fns: (() => void | Promise)[]) { + return async () => { + for (const fn of fns) { + await fn(); + } + }; + } +} diff --git a/packages/typescript/test/async/api.test.ts b/packages/typescript/test/async/api.test.ts index dc4547088c284..15980972db899 100644 --- a/packages/typescript/test/async/api.test.ts +++ b/packages/typescript/test/async/api.test.ts @@ -1,9539 +1,9539 @@ -import { - type __String, - cast, - escapeLeadingUnderscores, - type Expression, - getJSDocCommentsAndTags, - getJSDocTags, - getSynthesizedDeepClone, - getTextOfJSDocComment, - InternalSymbolName, - isCallExpression, - isClassDeclaration, - isExpressionStatement, - isFunctionDeclaration, - isIdentifier, - isImportDeclaration, - isInterfaceDeclaration, - isJSDoc, - isJSDocParameterTag, - isModuleDeclaration, - isNamedImports, - isObjectLiteralExpression, - isPropertyAssignment, - isPropertyDeclaration, - isReturnStatement, - isShorthandPropertyAssignment, - isStringLiteral, - isTemplateHead, - isTemplateMiddle, - isTemplateTail, - isTypeAliasDeclaration, - isTypeNode, - isVariableDeclarationList, - isVariableStatement, - type Node, - type NodeArray, - NodeFlags, - type PathKey, - type RootedFilePath, - type SourceFile, - SyntaxKind, - tryGetAmbientModuleNameFromSymbolName, - unescapeLeadingUnderscores, -} from "@typescript/typescript/unstable/ast"; -import { - cloneNode, - createArrayTypeNode, - createFunctionTypeNode, - createIdentifier, - createKeywordTypeNode, - createNumericLiteral, - createParameterDeclaration, - createSourceFile, - createToken, - createTypeAliasDeclaration, - createTypeReferenceNode, - createUnionTypeNode, - createVariableDeclaration, - createVariableDeclarationList, - createVariableStatement, -} from "@typescript/typescript/unstable/ast/factory"; -import { visitEachChild } from "@typescript/typescript/unstable/ast/visitor"; -import { - API, - type BigIntLiteralType, - CheckFlags, - type CompilerOptions, - type ConditionalType, - type ConfiguredProjectId, - DiagnosticCategory, - type DocumentIdentifier, - EmitOnly, - type FormatDiagnosticsHost, - type FreshableType, - getSymbol, - type ImportAdderAction, - type IndexedAccessType, - IndexKind, - type IndexType, - type InferredProjectId, - type InProgressSnapshot, - type InterfaceType, - type IntrinsicType, - isErrorType, - JsxEmit, - type LiteralType, - type MappedType, - ModifierFlags, - ModuleKind, - ModuleResolutionKind, - type ModuleResolver, - type NumberLiteralType, - ObjectFlags, - type Program, - type Project, - type ProjectId, - type RawCompilerOptions, - ScriptKind, - type Signature, - SignatureKind, - type Snapshot, - type StringMappingType, - SymbolFlags, - type SyntheticProjectId, - type TemplateLiteralType, - type TextEdit, - TypeFlags, - TypeFormatFlags, - type TypeParameter, - TypePredicateKind, - type TypeReference, - type UnionOrIntersectionType, - type UserPreferences, -} from "@typescript/typescript/unstable/async"; // @sync: } from "@typescript/typescript/unstable/sync"; -import { - createFileSystem, - createFileSystemLayer, - createFileSystemWithLib, - type FileSystemCallbacks, - serverFS, -} from "@typescript/typescript/unstable/fs"; -import { - rootedDirectoryPathFromPath, - rootedFilePathFromPath, - toRootedDirectoryPath, - toRootedFilePath, -} from "@typescript/typescript/unstable/path"; -import assert from "node:assert"; -import { globSync } from "node:fs"; -import { resolve } from "node:path"; -import { - describe, - test, -} from "node:test"; -import { fileURLToPath } from "node:url"; -import { - getNodeId, - parseNodeHandleFromCompiler, - RemoteSourceFile, -} from "../../src/api/node/node.ts"; -import { isSignatureDeclaration } from "../../src/ast/is.ts"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "../testUtils.ts"; -import { - defaultFiles, - spawnAPI, -} from "./api.testUtils.ts"; - -const concurrency = areTestsFiltered(); - -describe("API", { concurrency }, () => { - test("getCurrentLanguageServerSnapshot is LSP-only", () => { - if (!!false) { - const standalone = new API(); - // @ts-expect-error The standalone API has no canonical language server state. - void standalone.getCurrentLanguageServerSnapshot(); - - const lsp = undefined! as API; - void lsp.getCurrentLanguageServerSnapshot({ openProjects: ["/tsconfig.json"] }); - const moduleResolver = undefined! as ModuleResolver; - void lsp.getCurrentLanguageServerSnapshot({ - createPrograms: [{ - rootFiles: ["/index.ts"], - compilerOptions: {}, - options: { moduleResolver }, - }], - }); - const baseSnapshot = undefined! as Snapshot; - void lsp.getCurrentLanguageServerSnapshot(undefined, baseSnapshot); - - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, options: { projectReferences: [{ path: "/tsconfig.json" }] } }] }); - void standalone.createModuleResolver({ outDir: "dist", rootDirs: ["src"], typeRoots: ["types"] }); - void standalone.transpileModule("", { compilerOptions: { outDir: "dist" } }); - - const formatDiagnosticsHost: FormatDiagnosticsHost = { - getCurrentDirectory: () => "/workspace", - getCanonicalFileName: fileName => fileName, - getNewLine: () => "\n", - }; - void formatDiagnosticsHost; - - // @ts-expect-error Snapshot parameters are excess-property checked. - void standalone.createSnapshot({ fileChanges: { changed: ["/index.ts"] } }); - // @ts-expect-error Synthetic program parameters are contextually typed and excess-property checked. - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, unexpected: true }] }); - // @ts-expect-error Compiler options in synthetic program parameters are contextually typed and excess-property checked. - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: { unexpected: true } }] }); - // @ts-expect-error Snapshot update parameters are excess-property checked. - void baseSnapshot.update({ fileChanges: { changed: ["/index.ts"] } }); - // @ts-expect-error Snapshot updates require an explicit changes object. - void baseSnapshot.update(undefined); - // @ts-expect-error Language server snapshot parameters are excess-property checked. - void lsp.getCurrentLanguageServerSnapshot({ fileChanges: { changed: ["/index.ts"] } }); - - const configured = undefined! as ConfiguredProjectId; - const inferred = undefined! as InferredProjectId; - const synthetic = undefined! as SyntheticProjectId; - const path: PathKey = configured; - const projectIds: ProjectId[] = [configured, inferred, synthetic]; - void path; - void projectIds; - // @ts-expect-error Project ID brands are not interchangeable. - const invalid: ConfiguredProjectId = synthetic; - void invalid; - - const callbacks: FileSystemCallbacks = { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: serverFS.useOS, - realpath: path => `${path}`, - stat: serverFS.fakeStat, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }; - void new API({ fs: callbacks }); - void new API({ fs: { ...callbacks, writeFile: serverFS.noop } }); - void new API({ - fs: { - ...callbacks, - realpath: () => serverFS.identity, - stat: () => serverFS.fakeStat, - writeFile: () => serverFS.noop, - }, - }); - void new API({ - fs: { - directoryExists: serverFS.error, - fileExists: serverFS.error, - getAccessibleEntries: serverFS.error, - readFile: serverFS.error, - realpath: serverFS.error, - stat: serverFS.error, - writeFile: serverFS.error, - removeFile: serverFS.error, - }, - }); - void new API({ - fs: { - directoryExists: () => serverFS.error, - fileExists: () => serverFS.error, - getAccessibleEntries: () => serverFS.error, - readFile: () => serverFS.error, - realpath: () => serverFS.error, - stat: () => serverFS.error, - writeFile: () => serverFS.error, - removeFile: () => serverFS.error, - }, - }); - // @ts-expect-error Filesystem callback configurations must specify every operation. - void new API({ fs: { readFile: serverFS.useOS } }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error Identity is only a valid realpath implementation. - readFile: serverFS.identity, - }, - }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error fakeStat is only a valid stat implementation. - fileExists: serverFS.fakeStat, - }, - }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error Noop is only a valid writeFile implementation. - readFile: serverFS.noop, - }, - }); - } - }); - - test("initializes once for concurrent first requests", async () => { - await using api = spawnAPI(); - // @sync-skip-block-start - const [commandLine, config] = await Promise.all([ - api.parseCommandLine(["--strict"]), - api.readConfigFile("/tsconfig.json"), - ]); - // @sync-skip-block-end - // @sync-only-start - // const [commandLine, config] = api.batch( - // api.parseCommandLine.gen(["--strict"]), - // api.readConfigFile.gen("/tsconfig.json"), - // ); - // @sync-only-end - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - }); - - test("disposes", async () => { - let disposedAPI: API; - { - await using api = spawnAPI(); - await api.parseCommandLine([]); - disposedAPI = api; - } - await assert.rejects(disposedAPI.parseCommandLine([])); // @sync: assert.throws(() => disposedAPI.parseCommandLine([])); - }); - - // @sync-skip-block-start - test("disposal handles concurrent initialization", async () => { - const api = spawnAPI(); - const initialization = api.parseCommandLine([]); - const [initializationResult] = await Promise.allSettled([initialization, api[Symbol.asyncDispose]()]); - if (initializationResult.status !== "rejected") assert.fail("Initialization should reject when disposal closes the client"); - assert.match(String(initializationResult.reason), /Client is closed/); - await assert.rejects(api.parseCommandLine([]), /Client is closed/); - }); - // @sync-skip-block-end - - test("parseCommandLine", async () => { - await using api = spawnAPI(); - - const commandLine = await api.parseCommandLine([ - "--strict", - "--outDir", - "dist", - "/src/index.ts", - ]); - assert.deepEqual(commandLine.fileNames, ["/src/index.ts"]); - assert.equal(commandLine.options.strict, true); - assert.equal( - resolve(commandLine.options.outDir!), - resolve(fileURLToPath(new URL("../../../../", import.meta.url)), "dist"), - ); - assert.deepEqual(commandLine.raw, { - strict: true, - outDir: "dist", - }); - assert.deepEqual(commandLine.errors, []); - }); - - test("parseCommandLine reports diagnostics", async () => { - await using api = spawnAPI(); - - const commandLine = await api.parseCommandLine(["--notAnOption"]); - assert.deepEqual(commandLine.fileNames, []); - assert.equal(commandLine.errors.length, 1); - assert.equal(commandLine.errors[0].code, 5023); - }); - - test("readConfigFile", async () => { - await using api = spawnAPI({ - "/tsconfig.json": `{ - // Comments and trailing commas are supported. - "compilerOptions": { "strict": true, }, - }`, - }); - - const result = await api.readConfigFile("/tsconfig.json"); - assert.deepEqual(result, { - config: { compilerOptions: { strict: true } }, - }); - }); - - test("readConfigFile reports read and parse errors", async () => { - await using api = spawnAPI({ - "/invalid.json": `{ "compilerOptions": { "strict": true,, } }`, - }); - - const invalid = await api.readConfigFile("/invalid.json"); - assert.deepEqual(invalid.config, { compilerOptions: { strict: true } }); - assert.ok(invalid.error); - - const missing = await api.readConfigFile("/missing.json"); - assert.deepEqual(missing.config, {}); - assert.equal(missing.error?.code, 5083); - }); - - test("parseJsonConfigFileContent with configDirectory", async () => { - await using api = spawnAPI(); - - const config = await api.parseJsonConfigFileContent( - { - compilerOptions: { strict: true }, - files: ["index.ts"], - }, - { configDirectory: "/src" }, - ); - assert.deepEqual(config.fileNames, ["/src/index.ts"]); - assert.equal(config.options.strict, true); - assert.equal("configFilePath" in config.options, false); - assert.equal(config.compileOnSave, false); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent accepts non-object JSON", async () => { - await using api = spawnAPI(); - - const config = await api.parseJsonConfigFileContent(null, { configDirectory: "/src" }); - assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent with configFileName", async () => { - await using api = spawnAPI(); - - const config = await api.parseJsonConfigFileContent( - { - compilerOptions: { strict: true }, - files: ["index.ts"], - }, - { configFileName: "/src/tsconfig.json" }, - ); - assert.deepEqual(config.fileNames, ["/src/index.ts"]); - assert.equal(config.options.strict, true); - assert.equal(config.options.configFilePath, "/src/tsconfig.json"); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent preserves raw config", async () => { - await using api = spawnAPI(); - - const input = { - compileOnSave: true, - customSetting: { enabled: true }, - files: ["index.ts"], - }; - const config = await api.parseJsonConfigFileContent(input, { configDirectory: "/src" }); - assert.deepEqual(config.raw, input); - assert.equal(config.compileOnSave, true); - }); - - test("parseJsonConfigFileContent preserves an empty files list", async () => { - await using api = spawnAPI(); - - const config = await api.parseJsonConfigFileContent( - { files: [] }, - { configDirectory: "/src" }, - ); - assert.deepEqual(config.fileNames, []); - assert.equal(config.errors.length, 1); - assert.equal(config.errors[0].code, 18002); - }); - - test("parseJsonConfigFileContent reports null array elements", async () => { - await using api = spawnAPI(); - - const config = await api.parseJsonConfigFileContent( - { files: [null], include: [null], exclude: [null] }, - { configDirectory: "/src" }, - ); - assert.equal(config.errors.length, 3); - assert.ok(config.errors.every(diagnostic => diagnostic.code === 5024)); - }); - - test("transpile", async () => { - await using api = spawnAPI({ - "/input.ts": "export const x: number = 1;", - }); - - const moduleOutput = await api.transpileModule("export const x: number = 1;", { - compilerOptions: { module: ModuleKind.CommonJS }, - }); - assert.match(moduleOutput.outputText, /exports\.x = 1/); - - const isolatedDeclarationModuleOutput = await api.transpileModule("export const x: number = 1;", { - compilerOptions: { declaration: true, isolatedDeclarations: true }, - reportDiagnostics: true, - }); - assert.equal(isolatedDeclarationModuleOutput.diagnostics?.length ?? 0, 0); - - const moduleFileOutput = await api.transpileModuleFromFile({ uri: "file:///input.ts" }, { - compilerOptions: { module: ModuleKind.CommonJS }, - }); - assert.match(moduleFileOutput.outputText, /exports\.x = 1/); - - const declarationOutput = await api.transpileDeclaration("export const x: number = 1;"); - assert.equal(declarationOutput.outputText, "export declare const x: number;\n"); - - const windowsDeclarationOutput = await api.transpileDeclaration("export const x: number = 1;", { - fileName: "C:/Users/me/project/input.ts", - }); - assert.equal(windowsDeclarationOutput.outputText, "export declare const x: number;\n"); - - const declarationFileOutput = await api.transpileDeclarationFromFile({ uri: "file:///input.ts" }); - assert.equal(declarationFileOutput.outputText, "export declare const x: number;\n"); - }); - - test("createSourceFile", async () => { - await using api = spawnAPI(); - const sourceText = "export const element =
;"; - await using retained = await api.createSourceFile("/component.tsx", sourceText); - const sourceFile = retained.sourceFile; - assert.equal(sourceFile.fileName, "/component.tsx"); - assert.match(sourceFile.path, /\/component\.tsx$/); - assert.equal(sourceFile.text, sourceText); - assert.equal(sourceFile.scriptKind, ScriptKind.TSX); - assert.equal(sourceFile.statements.length, 1); - assert.strictEqual(sourceFile.statements[0].parent, sourceFile); - - await using retainedAgain = await api.createSourceFile("/component.tsx", sourceText); - assert.strictEqual(retainedAgain.sourceFile, sourceFile); - await assert.rejects(api.createSourceFile("", ""), /fileName must not be empty/); // @sync: assert.throws(() => api.createSourceFile("", ""), /fileName must not be empty/); - await using dot = await api.createSourceFile(".", ""); - assert.equal(dot.sourceFile.scriptKind, ScriptKind.TS); - - await using overridden = await api.createSourceFile("/component.txt", sourceText, { scriptKind: ScriptKind.TSX }); - assert.equal(overridden.sourceFile.scriptKind, ScriptKind.TSX); - assert.equal(overridden.sourceFile.statements.length, 1); - await using defaultKind = await api.createSourceFile("/component.txt", sourceText); - assert.notStrictEqual(defaultKind.sourceFile, overridden.sourceFile); - - await using upperCase = await api.createSourceFile("/CaseSensitive.ts", ""); - await using lowerCase = await api.createSourceFile("/casesensitive.ts", ""); - assert.notStrictEqual(lowerCase.sourceFile, upperCase.sourceFile); - assert.equal(upperCase.sourceFile.fileName, "/CaseSensitive.ts"); - assert.equal(lowerCase.sourceFile.fileName, "/casesensitive.ts"); - - await assert.rejects(api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); // @sync: assert.throws(() => api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); - - // Each lease can be disposed repeatedly without throwing or releasing another lease. - const firstDispose = retained.dispose(); - const secondDispose = retained.dispose(); - assert.strictEqual(firstDispose, secondDispose); // @sync-skip - await firstDispose; // @sync: retained.dispose(); - await using retainedAfterDispose = await api.createSourceFile("/component.tsx", sourceText); - assert.strictEqual(retainedAfterDispose.sourceFile, retainedAgain.sourceFile); - }); - - test("remote declarations lazily fetch and cache binder symbols", async () => { - const sourceText = "function present() {}"; - await using api = spawnAPI({ - "/symbols.ts": sourceText, - }); - const snapshot = await api.createSnapshot({ openFiles: ["/symbols.ts"] }); - const project = snapshot.getProjects()[0]; - const sourceFile = await project.program.getSourceFile("/symbols.ts"); - assert.ok(sourceFile); - const declaration = sourceFile.statements[0]; - assert.ok(isFunctionDeclaration(declaration)); - const checkerSymbol = await project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); // @sync: const checkerSymbol = project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); - assert.ok(checkerSymbol); - - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): Promise; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let symbolRequests = 0; - client.apiRequest = async (method, params) => { - if (method === "getSymbolOfDeclaration") symbolRequests++; - return apiRequest(method, params); - }; - - const [first, concurrent] = await Promise.all([getSymbol(declaration), api.getSymbol(declaration)]); // @sync: const first = getSymbol(declaration); const concurrent = api.getSymbol(declaration); - assert.ok(first); - assert.strictEqual(first, checkerSymbol); - assert.strictEqual(concurrent, first); - assert.strictEqual(await getSymbol(declaration), first); // @sync: assert.strictEqual(getSymbol(declaration), first); - assert.equal(symbolRequests, 1); - - await snapshot.dispose(); - }); - - test("getSymbol rejects synthesized declarations", async () => { - await using api = spawnAPI(); - const local = createVariableDeclaration(createIdentifier("local"), undefined, undefined, undefined); - await assert.rejects(getSymbol(local), /Source file not found/); // @sync: assert.throws(() => getSymbol(local), /Source file not found/); - await assert.rejects(api.getSymbol(local), /Source file not found/); // @sync: assert.throws(() => api.getSymbol(local), /Source file not found/); - - await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - assert.ok(await getSymbol(declaration)); - const shallowClone = cloneNode(declaration); - const deepClone = getSynthesizedDeepClone(declaration); - await assert.rejects(getSymbol(shallowClone), /Source file not found/); // @sync: assert.throws(() => getSymbol(shallowClone), /Source file not found/); - await assert.rejects(api.getSymbol(deepClone), /Source file not found/); // @sync: assert.throws(() => api.getSymbol(deepClone), /Source file not found/); - assert.equal("getSymbol" in declaration, false); - }); - - test("source files own separate declaration result and request caches", async () => { - await using api = spawnAPI(); - await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); - const file = lease.sourceFile; - assert.ok(file instanceof RemoteSourceFile); - const cache = file.symbolCache; - assert.ok(cache); - const declaration = cast(file.statements[0], isFunctionDeclaration); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - const request = getSymbol(declaration); - assert.ok(cache.declarationSymbolRequests.get(index) instanceof Promise); // @sync-skip - assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); // @sync-skip - const symbol = await request; - assert.ok(symbol); - assert.strictEqual(cache.symbolsByDeclarationNodeIndex.get(index), symbol); - assert.strictEqual(cache.symbolsById.get(symbol.reference.id), symbol); - assert.equal(cache.declarationSymbolRequests.has(index), false); - api.clearSourceFileCache(); - assert.strictEqual(file.symbolCache, cache); - }); - - test("standalone getSymbol delegates to the source file's API", async context => { - await using api = spawnAPI(); - await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); - assert.ok(lease.sourceFile instanceof RemoteSourceFile); - assert.strictEqual(lease.sourceFile.api, api); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - // Materialize the sync API's lazy method before mocking it. - void api.getSymbol; - const method = context.mock.method(api, "getSymbol"); - const symbol = await getSymbol(declaration); - assert.ok(symbol); - assert.equal(method.mock.callCount(), 1); - assert.strictEqual(await api.getSymbol(declaration), symbol); - }); - - test("declaration symbol results survive releasing the last lease", async () => { - await using api = spawnAPI(); - const lease = await api.createSourceFile("/symbols.ts", "function present() {}"); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - const symbol = await getSymbol(declaration); - assert.ok(symbol); - - await lease.dispose(); - assert.strictEqual(await getSymbol(declaration), symbol); - }); - - test("declaration symbols can be fetched after clearing the client cache", async () => { - await using api = spawnAPI(); - await using lease = await api.createSourceFile("/symbols.ts", "function first() {} function second() {}"); - const first = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - const second = cast(lease.sourceFile.statements[1], isFunctionDeclaration); - const firstSymbol = await getSymbol(first); - assert.ok(firstSymbol); - - api.clearSourceFileCache(); - const secondSymbol = await getSymbol(second); - assert.ok(secondSymbol); - assert.equal(secondSymbol.name, "second"); - assert.strictEqual(await getSymbol(first), firstSymbol); - - await using retained = await api.retainSourceFile(lease.sourceFile); - assert.strictEqual(retained.sourceFile, lease.sourceFile); - assert.strictEqual(await getSymbol(first), firstSymbol); - assert.strictEqual(await getSymbol(second), secondSymbol); - }); - - test("declaration lookup rejects unavailable and recreated files without caching failures", async () => { - await using api = spawnAPI(); - const text = "function present() {}"; - const lease = await api.createSourceFile("/symbols.ts", text); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - assert.ok(lease.sourceFile instanceof RemoteSourceFile); - const cache = lease.sourceFile.symbolCache; - assert.ok(cache); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - await lease.dispose(); - - await assert.rejects(getSymbol(declaration), /source file is not available/); // @sync: assert.throws(() => getSymbol(declaration), /source file is not available/); - assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); - assert.equal(cache.declarationSymbolRequests.has(index), false); - await using recreated = await api.createSourceFile("/symbols.ts", text); - await assert.rejects(getSymbol(declaration), /source file descriptor no longer identifies/); // @sync: assert.throws(() => getSymbol(declaration), /source file descriptor no longer identifies/); - assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); - assert.equal(cache.declarationSymbolRequests.has(index), false); - const recreatedDeclaration = cast(recreated.sourceFile.statements[0], isFunctionDeclaration); - assert.equal((await getSymbol(recreatedDeclaration))?.name, "present"); - }); - - test("createSourceFile can be used with a compatible program", async () => { - const sourceText = "export const element =
;"; - await using api = spawnAPI({ - "/component.tsx": sourceText, - }); - await using retained = await api.createSourceFile("/component.tsx", sourceText); - const sourceFile = retained.sourceFile; - const snapshot = await api.createSnapshot({ openFiles: ["/component.tsx"] }); - const project = snapshot.getProjects()[0]; - assert.equal((await api.printer.printNode(sourceFile)).trimEnd(), sourceText); - assert.ok(await project.checker.getTypeAtLocation(sourceFile.statements[0])); - assert.equal(await project.program.isSourceFileDefaultLibrary(sourceFile), false); - await snapshot.dispose(); - }); - - test("createSourceFile shares identity with a matching program file", async () => { - const sourceText = "export declare const element: number;"; - await using api = spawnAPI({ - "/component.d.ts": sourceText, - }); - await using retained = await api.createSourceFile("/component.d.ts", sourceText); - const snapshot = await api.createSnapshot({ openFiles: ["/component.d.ts"] }); - const project = snapshot.getProjects()[0]; - assert.strictEqual(await project.program.getSourceFile("/component.d.ts"), retained.sourceFile); - await snapshot.dispose(); - }); - - test("retainSourceFile keeps a borrowed program file available", async () => { - const sourceText = "export declare const value: number;"; - await using api = spawnAPI({ - "/retained.d.ts": sourceText, - }); - const snapshot = await api.createSnapshot({ openFiles: ["/retained.d.ts"] }); - const project = snapshot.getProjects()[0]; - const sourceFile = await project.program.getSourceFile("/retained.d.ts"); - assert.ok(sourceFile); - - await using retained = await api.retainSourceFile(sourceFile); - assert.strictEqual(retained.sourceFile, sourceFile); - await snapshot.dispose(); - - await using recreated = await api.createSourceFile("/retained.d.ts", sourceText); - assert.strictEqual(recreated.sourceFile, sourceFile); - - const local = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", "/local.ts" as RootedFilePath, "/local.ts" as PathKey); - await assert.rejects(api.retainSourceFile(local), /Only remote source files can be retained/); // @sync: assert.throws(() => api.retainSourceFile(local), /Only remote source files can be retained/); - }); - - test("createSourceFileFromFile", async () => { - await using api = spawnAPI({ - "/input.ts": "export const fromFile = 1;", - }); - await using retained = await api.createSourceFileFromFile({ uri: "file:///input.ts" }); - const fromFile = retained.sourceFile; - assert.equal(fromFile.fileName, "/input.ts"); - assert.equal(fromFile.text, "export const fromFile = 1;"); - assert.equal(fromFile.scriptKind, ScriptKind.TS); - - await assert.rejects(api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); // @sync: assert.throws(() => api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); - }); - - test("createProgram", async () => { - await using api = spawnAPI({ - "/src/index.ts": `export const value: string = 1;`, - }); - - const program = await api.createProgram(["/src/index.ts"], { noLib: true, strict: true }); - - assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(await program.getSourceFileNames(), ["/src/index.ts"]); - assert.equal((await program.getSemanticDiagnostics("/src/index.ts")).length, 1); - - await program.dispose(); - await assert.rejects(program.getSourceFileNames(), /snapshot .* not found/); // @sync: assert.throws(() => program.getSourceFileNames(), /snapshot .* not found/); - }); - - test("createSnapshot creates independent synthetic programs", async () => { - await using api = spawnAPI({ - "/src/a.ts": `export const a = 1;`, - "/src/b.ts": `export const b = 2;`, - }); - - const snapshot = await api.createSnapshot({ - createPrograms: [ - { rootFiles: ["/src/a.ts"], compilerOptions: { noLib: true } }, - { rootFiles: ["/src/b.ts"], compilerOptions: { noLib: true, strict: true } }, - ], - }); - assert.equal(snapshot.getProjects().length, 2); - assert.deepEqual(snapshot.getProjects().map(project => project.rootFiles), [["/src/a.ts"], ["/src/b.ts"]]); - assert.equal(snapshot.operation.createdPrograms!.length, 2); - for (const program of snapshot.operation.createdPrograms!) { - const syntheticProjectId: SyntheticProjectId = program.id; - void syntheticProjectId; - assert.strictEqual(snapshot.getProgram(program.id), program); - assert.strictEqual(snapshot.getProject(program.id), program.getProject()); - } - - const empty = await api.createSnapshot(); - assert.deepEqual(empty.getProjects(), []); - assert.equal(empty.operation.createdPrograms, undefined); - assert.equal(empty.operation.openedFiles, undefined); - }); - - test("snapshot.update preserves identity when the server returns the same snapshot", async () => { - await using api = spawnAPI(); - const snapshot = await api.createSnapshot(); - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): Promise; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let duplicateReference = false; - client.apiRequest = async (method, params) => { - if ( - method === "release" - && typeof params === "object" - && params !== null - && "snapshot" in params - && params.snapshot === snapshot.id - && duplicateReference - ) { - duplicateReference = false; - return true; - } - const response = await apiRequest(method, params); - if (method !== "updateSnapshot" || typeof response !== "object" || response === null) return response; - if (!("snapshot" in response) || typeof response.snapshot !== "number") return response; - await apiRequest("release", { snapshot: response.snapshot }); - duplicateReference = true; - return { ...response, snapshot: snapshot.id }; - }; - - assert.strictEqual(await snapshot.update({}), snapshot); - assert.equal(duplicateReference, false); - }); - - test("snapshot.update reconfigures a synthetic program", async () => { - await using api = spawnAPI({ - "/src/a.ts": `export const a = 1;`, - "/src/b.ts": `export const b = 2;`, - }); - const snapshot = await api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/a.ts"], - compilerOptions: { noLib: true }, - }], - }); - const originalProgram = snapshot.operation.createdPrograms[0]; - - const updated = await snapshot.update({ - reconfigurePrograms: [{ - id: originalProgram.id, - rootFiles: ["/src/b.ts"], - compilerOptions: { noLib: true, strict: true }, - }], - }); - const reconfiguredProgram = updated.getProgram(originalProgram.id); - assert.ok(reconfiguredProgram); - - assert.equal(reconfiguredProgram.id, originalProgram.id); - assert.deepEqual(await reconfiguredProgram.getSourceFileNames(), ["/src/b.ts"]); - assert.deepEqual(reconfiguredProgram.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(await originalProgram.getSourceFileNames(), ["/src/a.ts"]); - }); - - test("snapshot.update reconfigures module resolution providers", async () => { - const root = toRootedFilePath("/src/index.ts", undefined); - const providedA = toRootedFilePath("/a.d.ts", undefined); - const providedB = toRootedFilePath("/b.d.ts", undefined); - const { api: disposableAPI, fs } = spawnAPIWithFS({ - [root]: `import { value } from "pkg"; export { value };`, - [providedA]: `export declare const value: "a";`, - [providedB]: `export declare const value: "b";`, - }); - - await using api = disposableAPI; - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const spec = (resolvedFileName: string) => ({ - fallback: "unresolved" as const, - entries: [{ moduleName: "pkg", result: { resolvedFileName } }], - }); - const resolverA = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const resolverB = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedB) }); - const inlineResolverA = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const inlineResolverB = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const createProgram = (moduleResolver?: ModuleResolver) => ({ - rootFiles: [root], - compilerOptions, - ...(moduleResolver ? { options: { moduleResolver } } : {}), - }); - - const initial = await api.createSnapshot({ createPrograms: [createProgram(resolverA)] }); - const programId = initial.operation.createdPrograms![0].id; - assert.deepEqual([...await initial.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - assert.equal( - (await resolverA.resolveModuleName("pkg", "/src", undefined, { snapshot: initial })).resolvedModule?.resolvedFileName, - providedA, - ); - assert.equal((await resolverA.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, providedA); - - const sameSet = await initial.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], - }); - assert.deepEqual([...await sameSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - fs.writeFile!(root, `import { value } from "pkg"; export const updated = value;`); - const sameSetAfterEdit = await sameSet.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], - fileNotifications: { changed: [root] }, - }); - assert.deepEqual([...await sameSetAfterEdit.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - const changedSet = await sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverB) }], - }); - assert.deepEqual([...await changedSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedB, root]); - - const removedSet = await sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(undefined) }], - }); - assert.deepEqual(await removedSet.getProgram(programId)!.getSourceFileNames(), [root]); - - const inline = await sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverA) }], - }); - const repeatedInline = await inline.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverB) }], - }); - assert.deepEqual([...await repeatedInline.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - let callbackCalls = 0; - const callbackResolver = await api.createModuleResolver(compilerOptions, { - resolveModuleName: (moduleName: string) => { - callbackCalls++; - return moduleName === "pkg" ? { resolvedFileName: providedA } : undefined; - }, - }); - const callbackSnapshot = await api.createSnapshot({ - createPrograms: [createProgram(callbackResolver)], - }); - const callbackProgramId = callbackSnapshot.operation.createdPrograms![0].id; - const repeatedCallback = await callbackSnapshot.update({ - reconfigurePrograms: [{ id: callbackProgramId, ...createProgram(callbackResolver) }], - }); - assert.deepEqual([...await repeatedCallback.getProgram(callbackProgramId)!.getSourceFileNames()].sort(), [providedA, root]); - assert.equal(callbackCalls, 1); - }); - - test("module resolver normalizes raw compiler option paths", async () => { - await using api = spawnAPI(); - const resolver = await api.createModuleResolver({ - noLib: true, - outDir: "dist", - rootDirs: ["src", "generated"], - tsBuildInfoFile: "cache/build.tsbuildinfo", - typeRoots: ["types"], - }); - const result = await resolver.resolveModuleName("./missing", "/src", undefined); - assert.equal(result.resolvedModule, undefined); - }); - - test("module resolver runs against snapshots or the host filesystem", async () => { - const packageJson = toRootedFilePath("/node_modules/pkg/package.json", undefined); - const packageB = toRootedFilePath("/node_modules/pkg/b.d.ts", undefined); - const { api: disposableAPI, fs } = spawnAPIWithFS({ - [packageJson]: JSON.stringify({ name: "pkg", version: "1.0.0", types: "a.d.ts" }), - "/node_modules/pkg/a.d.ts": `export declare const value: "a";`, - }); - await using api = disposableAPI; - const resolver = await api.createModuleResolver({ - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }); - const firstSnapshot = await api.createSnapshot(); - assert.equal( - (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), - ); - - fs.writeFile!(packageJson, JSON.stringify({ name: "pkg", version: "1.0.0", types: "b.d.ts" })); - fs.writeFile!(packageB, `export declare const value: "b";`); - const secondSnapshot = await firstSnapshot.update({ - fileNotifications: { - changed: [packageJson], - created: [packageB], - }, - }); - - assert.equal( - (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), - ); - assert.equal( - (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: secondSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/b.d.ts", undefined), - ); - assert.equal( - (await resolver.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, - "/node_modules/pkg/b.d.ts", - ); - }); - - test("source imports do not request module resolution", async () => { - await using api = spawnAPI({ - "/src/index.ts": `import source a from "pkg"; -import.source("missing"); -import { value } from "pkg";`, - "/pkg.d.ts": "export const value: number;", - }); - const compilerOptions = { noLib: true, module: ModuleKind.ESNext }; - const requests: string[] = []; - const resolver = await api.createModuleResolver(compilerOptions, { - resolveModuleName: async name => { - requests.push(name); - return { resolvedFileName: "/pkg.d.ts" }; - }, - }); - const program = await api.createProgram(["/src/index.ts"], compilerOptions, { moduleResolver: resolver }); - assert.deepEqual(requests, ["pkg"]); - const file = await program.getSourceFile("/src/index.ts"); - assert.ok(file); - const source = cast(cast(file.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); - const evaluation = cast(cast(file.statements[2], isImportDeclaration).moduleSpecifier, isStringLiteral); - assert.equal(await program.getResolvedModuleFromModuleSpecifier(source), undefined); - assert.equal((await program.getResolvedModuleFromModuleSpecifier(evaluation))?.resolvedFileName, "/pkg.d.ts"); - }); - - test("module resolver callbacks can delegate to another resolver", async () => { - await using api = spawnAPI({ - "/src/index.ts": `import "custom"; import "native";`, - "/custom.d.ts": `export {};`, - "/node_modules/native/package.json": JSON.stringify({ name: "native", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/native/index.d.ts": `export {};`, - }); - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = await api.createModuleResolver(compilerOptions); - const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; - const customResolver = await api.createModuleResolver(compilerOptions, { - resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - callbackSnapshots.push(snapshot); - if (moduleName === "custom") return { resolvedFileName: "/custom.d.ts" }; - assert.ok(snapshot); - return (await defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = await api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions, - options: { moduleResolver: customResolver }, - }], - }); - assert.deepEqual( - [...await snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), - ["/custom.d.ts", "/node_modules/native/index.d.ts", "/src/index.ts"], - ); - assert.equal(callbackSnapshots.length, 2); - assert.equal(callbackSnapshots[0], callbackSnapshots[1]); - assert.ok(typeof callbackSnapshots[0] === "number"); - assert.ok(callbackSnapshots[0] < 0); - }); - - test("module resolver callbacks can resolve against the in-progress snapshot filesystem", async () => { - await using api = spawnAPI({ - "/src/index.ts": `import "layered";`, - }); - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = await api.createModuleResolver({ - ...compilerOptions, - customConditions: ["delegated"], - }); - const customResolver = await api.createModuleResolver(compilerOptions, { - resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - assert.ok(snapshot); - return (await defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = await api.createSnapshot({ - fileSystem: createFileSystemLayer([ - [ - "/node_modules/layered/package.json", - JSON.stringify({ - name: "layered", - version: "1.0.0", - exports: { ".": { delegated: "./index.d.ts" } }, - }), - ], - ["/node_modules/layered/index.d.ts", `export {};`], - ]), - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions, - options: { moduleResolver: customResolver }, - }], - }); - assert.deepEqual( - [...await snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), - ["/node_modules/layered/index.d.ts", "/src/index.ts"], - ); - }); - - test("module resolver callback errors reject lib replacement", async () => { - await using api = spawnAPI({ - "/src/index.ts": `export {};`, - }); - const resolver = await api.createModuleResolver( - { moduleResolution: ModuleResolutionKind.Bundler }, - { - resolveModuleName: () => { - throw new Error("lib replacement callback failed"); - }, - }, - ); - - await assert.rejects( // @sync: assert.throws( - () => - api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { libReplacement: true }, - options: { moduleResolver: resolver }, - }], - }), - /lib replacement callback failed/, - ); - }); - - test("program module resolution uses the resolver compiler options", async () => { - await using api = spawnAPI({ - "/src/index.ts": `/// -import "pkg/feature";`, - "/node_modules/pkg/package.json": JSON.stringify({ - name: "pkg", - version: "1.0.0", - exports: { "./feature": { resolver: "./dist/feature.d.ts" } }, - }), - "/node_modules/pkg/dist/feature.d.ts": `export {};`, - "/node_modules/@types/resolver-types/index.d.ts": `export {};`, - }); - const resolver = await api.createModuleResolver({ - module: ModuleKind.ESNext, - moduleResolution: ModuleResolutionKind.Bundler, - customConditions: ["resolver"], - }); - const snapshot = await api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { - noLib: true, - module: ModuleKind.Node16, - moduleResolution: ModuleResolutionKind.Node16, - }, - options: { moduleResolver: resolver }, - }], - }); - - assert.deepEqual( - [...await snapshot.operation.createdPrograms![0].getSourceFileNames()].sort(), - ["/node_modules/@types/resolver-types/index.d.ts", "/node_modules/pkg/dist/feature.d.ts", "/src/index.ts"], - ); - }); - - test("module resolver callbacks preserve retained and live filesystem context", async () => { - await using api = spawnAPI({ - "/src/index.ts": `export {};`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - }); - const compilerOptions = { - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = await api.createModuleResolver(compilerOptions); - const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; - const passthroughResolver = await api.createModuleResolver(compilerOptions, { - resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - callbackSnapshots.push(snapshot); - return (await defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - snapshot === undefined ? undefined : { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = await api.createSnapshot(); - - assert.equal( - (await passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext, { snapshot })).resolvedModule?.resolvedFileName, - "/node_modules/pkg/index.d.ts", - ); - assert.equal(callbackSnapshots[0], snapshot); - - assert.equal( - (await passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext)).resolvedModule?.resolvedFileName, - "/node_modules/pkg/index.d.ts", - ); - assert.equal(callbackSnapshots[1], undefined); - }); - - test("static resolutions do not report native resolution provenance diagnostics", async () => { - await using api = spawnAPI({ - "/src/index.ts": `import { value } from "./value.ts"; export { value };`, - "/value.ts": `export const value = 1;`, - }); - const resolver = await api.createModuleResolver( - { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }, - { - moduleResolutions: { - fallback: "unresolved", - entries: [{ - moduleName: "./value.ts", - result: { - resolvedFileName: "/value.ts", - }, - }], - }, - }, - ); - const snapshot = await api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }, - options: { - moduleResolver: resolver, - }, - }], - }); - const program = snapshot.operation.createdPrograms[0]; - assert.deepEqual(await program.getSemanticDiagnostics("/src/index.ts"), []); - }); - - test("Program resolved modules and type reference directives", async () => { - await using api = spawnAPI({ - "/src/index.ts": `/// -import "pkg"; -import "missing"; -declare module "augmentation" {}`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - "/node_modules/@types/pkg-types/package.json": JSON.stringify({ name: "@types/pkg-types", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/@types/pkg-types/index.d.ts": `export {};`, - }); - - const program = await api.createProgram( - ["/src/index.ts"], - { module: ModuleKind.ESNext, moduleResolution: ModuleResolutionKind.Bundler, noLib: true }, - ); - const sourceFile = await program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const pkgSpecifier = cast(cast(sourceFile.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); - - assert.equal(await program.getModeForUsageLocation("/src/index.ts", pkgSpecifier), ModuleKind.ESNext); - assert.equal(await program.getModeForResolutionAtIndex("/src/index.ts", 0), ModuleKind.ESNext); - assert.equal(await program.getModeForResolutionAtIndex("/src/index.ts", 2), ModuleKind.ESNext); - - const resolvedModule = await program.getResolvedModule("/src/index.ts", "pkg", ModuleKind.ESNext); - assert.ok(resolvedModule); - assert.equal(resolvedModule.resolvedFileName, "/node_modules/pkg/index.d.ts"); - - const resolvedModuleWithLocations = await program.getResolvedModuleFromModuleSpecifier(pkgSpecifier); - assert.ok(resolvedModuleWithLocations); - assert.equal(resolvedModuleWithLocations.packageId?.name, "pkg"); - - const missingModule = await program.getResolvedModule( - "/src/index.ts", - "missing", - ModuleKind.ESNext, - ); - assert.equal(missingModule, undefined); - - const typeReference = sourceFile.typeReferenceDirectives[0]; - const resolvedTypeReference = await program.getResolvedTypeReferenceDirective( - "/src/index.ts", - "pkg-types", - ModuleKind.None, - ); - assert.equal(resolvedTypeReference?.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); - - const resolvedTypeReferenceWithLocations = await program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( - typeReference, - "/src/index.ts", - ); - assert.ok(resolvedTypeReferenceWithLocations); - assert.equal(resolvedTypeReferenceWithLocations.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); - - await program.dispose(); - }); - - test("createProgram resolves raw compiler option paths", async () => { - await using api = spawnAPI({ - "/src/index.ts": `import { value } from "ba"; export { value };`, - "/src/first.ts": `export const value = 1;`, - "/src/fallback.ts": `export const value = 2;`, - "/src/component.vue": `export const component = 1;`, - }); - const rawOptions: RawCompilerOptions = { - noLib: true, - allowNonTsExtensions: true, - outDir: "dist", - paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, - rootDirs: ["src", "generated"], - suppressOutputPathCheck: true, - tsBuildInfoFile: "cache/build.tsbuildinfo", - }; - // @ts-expect-error raw path strings are not finalized compiler options - const _finalizedOptions: CompilerOptions = rawOptions; - const _rawOptions: RawCompilerOptions = undefined! as CompilerOptions; - - const program = await api.createProgram(["/src/index.ts", "/src/component.vue"], rawOptions); - const compilerOptions: CompilerOptions = program.getCompilerOptions(); - const serverCurrentDirectory = resolve("../.."); - assert.deepEqual( - compilerOptions, - { - noLib: true, - allowNonTsExtensions: true, - outDir: toRootedDirectoryPath(resolve(serverCurrentDirectory, "dist"), undefined), - paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, - rootDirs: [ - toRootedDirectoryPath(resolve(serverCurrentDirectory, "src"), undefined), - toRootedDirectoryPath(resolve(serverCurrentDirectory, "generated"), undefined), - ], - suppressOutputPathCheck: true, - tsBuildInfoFile: toRootedFilePath(resolve(serverCurrentDirectory, "cache/build.tsbuildinfo"), undefined), - } satisfies CompilerOptions, - ); - assert.equal((await program.getSemanticDiagnostics("/src/index.ts")).length, 0); - assert(await program.getSourceFile("/src/first.ts")); - assert.equal(await program.getSourceFile("/src/fallback.ts"), undefined); - assert(await program.getSourceFile("/src/component.vue")); - await program.dispose(); - }); - - test("createProgram ignores an on-disk tsconfig", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { noLib: false, strict: false }, - files: ["src/from-config.ts"], - }), - "/src/index.ts": `export const explicitRoot = 1;`, - "/src/from-config.ts": `export const configRoot = 1;`, - }); - - const program = await api.createProgram( - ["/src/index.ts"], - { noLib: true, strict: true }, - ); - - assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(await program.getSourceFileNames(), ["/src/index.ts"]); - assert.deepEqual(await program.getConfigFileNames(), []); - assert.equal(await program.getSourceFile("/src/from-config.ts"), undefined); - await program.dispose(); - }); - - test("createProgram rejects invalid project reference paths", async () => { - await using api = spawnAPI({ - "/src/index.ts": `export const value = 1;`, - }); - - await assert.rejects( // @sync: assert.throws( - () => - api.createProgram( - ["/src/index.ts"], - { noLib: true }, - { projectReferences: [{ path: "" }] }, - ), - /Path must not be empty/, - ); - }); - - test("createProgram includes config file parsing diagnostics", async () => { - const diagnostic = { - pos: 0, - end: 0, - code: 9001, - category: DiagnosticCategory.Error, - text: "Synthetic config parsing error.", - }; - await using api = spawnAPI({ "/src/index.ts": `export const value = 1;` }); - - const program = await api.createProgram( - ["/src/index.ts"], - { noLib: true }, - { - configFileParsingDiagnostics: [diagnostic], - }, - ); - - assert.deepEqual(await program.getConfigFileParsingDiagnostics(), [diagnostic]); - await program.dispose(); - }); - - test("createProgram discovers imported non-root dependencies", async () => { - await using api = spawnAPI({ - "/src/main.ts": `import { dependency } from "./dependency"; export const value = dependency;`, - "/src/dependency.ts": `export const dependency = 1;`, - }); - - const program = await api.createProgram(["/src/main.ts"], { noLib: true }); - assert.deepEqual([...await program.getSourceFileNames()].sort(), ["/src/dependency.ts", "/src/main.ts"]); - - await program.dispose(); - }); - - test("parseConfigFile", async () => { - await using api = spawnAPI(); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); - assert.equal(config.compileOnSave, false); - assert.equal(config.typeAcquisition, undefined); - assert.equal(config.projectReferences, undefined); - }); - - test("parseConfigFile includes projectReferences", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ references: [{ path: "./harness" }, { path: "./server" }] }), - }); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.fileNames, []); - assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); - assert.deepEqual(config.projectReferences, [ - { circular: false, originalPath: "./harness", path: "/harness" }, - { circular: false, originalPath: "./server", path: "/server" }, - ]); - }); - - test("parseConfigFile preserves raw config", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compileOnSave: true, - customSetting: { enabled: true }, - files: ["/src/index.ts"], - }), - }); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.equal(config.compileOnSave, true); - assert.deepEqual(config.raw, { - compileOnSave: true, - customSetting: { enabled: true }, - files: ["/src/index.ts"], - }); - }); - - test("parseConfigFile includes compileOnSave", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compileOnSave: true }), - }); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.equal(config.compileOnSave, true); - }); - - test("parseConfigFile includes typeAcquisition", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ typeAcquisition: { enable: true, include: ["jquery"] } }), - }); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.equal(config.typeAcquisition?.enable, true); - assert.deepEqual(config.typeAcquisition?.include, ["jquery"]); - }); - - test("parseConfigFile includes inherited plugins", async () => { - await using api = spawnAPI({ - "/tsconfig.base.json": JSON.stringify({ compilerOptions: { plugins: [{ name: "typescript-plugin" }] } }), - "/tsconfig.json": JSON.stringify({ extends: "./tsconfig.base.json" }), - }); - - const config = await api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.options.plugins, [{ name: "typescript-plugin" }]); - }); -}); - -// @sync-skip-block-start -describe("API - automatic batching", { concurrency }, () => { - test("initializes only once for concurrent first requests", async () => { - await using api = spawnAPI(); - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): Promise; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let initializeCalls = 0; - client.apiRequest = (method, params) => { - if (method === "initialize") initializeCalls++; - return apiRequest(method, params); - }; - - await Promise.all([ - api.parseCommandLine(["--strict"]), - api.readConfigFile("/tsconfig.json"), - ]); - assert.equal(initializeCalls, 1); - }); - - test("batches multiple concurrent requests into one automatically", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem(defaultFiles), - collectTiming: true, - }); - - await api.parseCommandLine([]); // initialize API - await api.resetTimingInfo(); - let { totals: { requestCount } } = await api.getTimingInfo(); - assert.equal(requestCount, 0); - const [parseCommandLine, readConfigFile] = await Promise.all([ - api.parseCommandLine(["--strict"]), - api.readConfigFile("/tsconfig.json"), - ]); - ({ totals: { requestCount } } = await api.getTimingInfo()); - assert.equal(requestCount, 1); - - assert.equal(parseCommandLine.options.strict, true); - assert.deepStrictEqual(readConfigFile.config, {}); - }); -}); - -describe("API - batchContext", { concurrency }, () => { - test("transparently paginates batch responses", async () => { - const api = spawnAPI({ ...defaultFiles }, { maxResponseBytesPerPage: 1 }); - try { - const requests = await (async () => { - using _ = api.batchContext(); - return [ - api.parseCommandLine(["--strict"]), - api.readConfigFile("/tsconfig.json"), - api.parseCommandLine(["--noImplicitAny"]), - ] as const; - })(); - - const [strict, config, noImplicitAny] = await Promise.all(requests); - assert.equal(strict.options.strict, true); - assert.deepEqual(config.config, {}); - assert.equal(noImplicitAny.options.noImplicitAny, true); - } - finally { - await api.close(); - } - }); - - test("holds requests until disposal", async () => { - await using api = spawnAPI(); - - await api.parseCommandLine([]); - - const requests = await (async () => { - using _ = api.batchContext(); - const requests = [ - api.parseCommandLine(["--strict"]), - api.readConfigFile("/tsconfig.json"), - ] as const; - let settled = false; - void Promise.all(requests).then(() => { - settled = true; - }); - - await new Promise(resolve => setImmediate(resolve)); - assert.equal(settled, false, "requests should remain pending inside the batch context"); - return requests; - })(); - - const [commandLine, config] = await Promise.all(requests); - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - }); - - test("settles an item error without dropping a sibling result", async () => { - const src = `export const value: string = "";`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value:")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - - const requests = await (async () => { - using _ = api.batchContext(); - return [ - project.checker.getTypeArguments(type as unknown as TypeReference), - project.checker.getStringType(), - ] as const; - })(); - - await assert.rejects(requests[0], /panic:/); - assert.ok((await requests[1]).flags & TypeFlags.String); - }); -}); -// @sync-skip-block-end - -describe("BuildOrchestrator", () => { - const files = { - "/a/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/a/src/index.ts": `export const a = 1;`, - "/b/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/b/src/index.ts": `export const b = 2;`, - "/c/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - references: [{ path: "../a" }, { path: "../b" }], - }), - "/c/src/index.ts": `export const c = 3;`, - }; - - test("dispose is idempotent", async () => { - const { api: disposableApi } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const options = await api.parseCommandLine([]); - const orchestrator = await api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/", ...options }, - ); - - const firstDispose = orchestrator.dispose(); - const secondDispose = orchestrator.dispose(); - assert.strictEqual(firstDispose, secondDispose); - await firstDispose; // @sync: orchestrator.dispose(); - // Second dispose should not throw - await orchestrator.dispose(); - await assert.rejects(orchestrator.build(), /Build orchestrator is disposed/); // @sync: assert.throws(() => orchestrator.build(), /Build orchestrator is disposed/); - }); - - test("api.close disposes all build orchestrators", async () => { - const { api } = spawnAPIWithFS({ ...files }); - const options = await api.parseCommandLine([]); - const orchestrator1 = await api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/", ...options }, - ); - const orchestrator2 = await api.createBuildOrchestrator( - ["/b/tsconfig.json"], - { cwd: "/", ...options }, - ); - assert.ok(!orchestrator1.isDisposed()); - assert.ok(!orchestrator2.isDisposed()); - await api.close(); - assert.ok(orchestrator1.isDisposed()); - assert.ok(orchestrator2.isDisposed()); - await orchestrator1.dispose(); - await orchestrator2.dispose(); - }); - - test("builds the configured root projects", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const defaultOptions = { - cwd: "/", - dry: false, - force: false, - verbose: true, - stopBuildOnErrors: false, - overrideCompilerOptions: { - incremental: true, - assumeChangesOnlyAffectDirectDependencies: true, - declaration: false, - declarationMap: true, - emitDeclarationOnly: false, - sourceMap: false, - inlineSourceMap: false, - traceResolution: false, - }, - }; - const orchestrator = await api.createBuildOrchestrator( - ["/a/tsconfig.json", "/b/tsconfig.json"], - defaultOptions, - ); - - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - }); - - test("returns diagnostics in build response information", async () => { - const source = `export const value: string = 1;`; - const { api: disposableApi } = spawnAPIWithFS({ - "/a/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, noEmitOnError: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/a/src/index.ts": source, - }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/" }, - ); - - const response = await orchestrator.build(); - assert.equal(response.status, 1); - assert.equal(response.statistics.Projects, 1); - assert.equal(response.statistics.ProjectsBuilt, 1); - assert.deepEqual(response.diagnostics, [{ - fileName: "/a/src/index.ts", - pos: source.indexOf("value"), - end: source.indexOf("value") + "value".length, - startPosition: { line: 0, character: source.indexOf("value") }, - endPosition: { line: 0, character: source.indexOf("value") + "value".length }, - sourceLines: [{ line: 0, text: source }], - code: 2322, - category: 1, - text: "Type 'number' is not assignable to type 'string'.", - }]); - }); - - test("returns build response information after clean", async () => { - const { api: disposableApi } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const options = await api.parseCommandLine([]); - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/", ...options }, - ); - - assert.equal((await orchestrator.build()).status, 0); - - const cleanResp1 = await orchestrator.clean("/a/tsconfig.json"); - assert.equal(cleanResp1.status, 0); - assert.deepEqual(cleanResp1.diagnostics, undefined); - assert.deepEqual(cleanResp1.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanResp1.statistics.Projects, 1); - assert.equal(cleanResp1.statistics.ProjectsBuilt, 0); - const buildResp1 = await orchestrator.build("/a/tsconfig.json"); - assert.equal(buildResp1.status, 0); - assert.deepEqual(buildResp1.diagnostics, undefined); - assert.equal(buildResp1.statistics.Projects, 1); - assert.equal(buildResp1.statistics.ProjectsBuilt, 1); - - const cleanRefResp = await orchestrator.cleanReferences("/c/tsconfig.json"); - assert.equal(cleanRefResp.status, 0); - assert.deepEqual(cleanRefResp.diagnostics, undefined); - assert.deepEqual(cleanRefResp.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - "/b/dist/index.d.ts", - "/b/dist/index.js", - "/b/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanRefResp.statistics.Projects, 2); - assert.equal(cleanRefResp.statistics.ProjectsBuilt, 0); - const buildRefsResp = await orchestrator.buildReferences("/c/tsconfig.json"); - assert.equal(buildRefsResp.status, 0); - assert.deepEqual(buildRefsResp.diagnostics, undefined); - - const cleanResp2 = await orchestrator.clean(); - assert.equal(cleanResp2.status, 0); - assert.deepEqual(cleanResp2.diagnostics, undefined); - assert.deepEqual(cleanResp2.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - "/b/dist/index.d.ts", - "/b/dist/index.js", - "/b/tsconfig.tsbuildinfo", - "/c/dist/index.d.ts", - "/c/dist/index.js", - "/c/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanResp2.statistics.Projects, 3); - assert.equal(cleanResp2.statistics.ProjectsBuilt, 0); - const buildResp2 = await orchestrator.build(); - assert.equal(buildResp2.status, 0); - assert.deepEqual(buildResp2.diagnostics, undefined); - assert.equal(buildResp2.statistics.Projects, 3); - assert.equal(buildResp2.statistics.ProjectsBuilt, 3); - }); - - test("returns deleted files from a clean response", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - "/a/dist/index.d.ts": `export declare const a = 1;`, - "/a/dist/index.js": `export const a = 1;`, - }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/" }, - ); - - const response = await orchestrator.clean(); - assert.equal(response.status, 0); - assert.deepEqual(response.diagnostics, undefined); - assert.deepEqual(response.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - ]); - assert.equal(response.statistics.Projects, 1); - assert.equal(response.statistics.ProjectsBuilt, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.d.ts", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - }); - - test("rebuilds projects after multiple file system changes", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/a/tsconfig.json", "/b/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 20/); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 100;`); - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 200;`); - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 100/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 200/); - }); - - test("clean removes build outputs", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.equal((await orchestrator.clean()).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - }); - - test("builds and cleans selected projects after file system changes", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.build("/a/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); - assert.equal((await orchestrator.build("/b/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); - assert.equal((await orchestrator.clean("/a/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); - - assert.equal((await orchestrator.clean("/b/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); - - fs.writeFile!(toRootedFilePath("/b/dist/index.js", undefined), `export const b = 2`); - assert.equal((await orchestrator.clean("/b/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - }); - - test("builds only references of a selected project", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - }); - await using api = disposableApi; - const options = await api.parseCommandLine([]); - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.buildReferences("/c/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - }); - - test("cleans only references of a selected project", async () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - }); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - - assert.equal((await orchestrator.cleanReferences("/c/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - - assert.equal((await orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.equal((await orchestrator.cleanReferences()).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - }); - - test("handles invalidated projects and cleans the last built configuration", async () => { - const writes: string[] = []; - const { api: disposableApi, fs } = spawnAPIWithFS( - { - ...files, - "/c/src/index.ts": `import { a } from "../../a/src/index"; export const c = a;`, - "/d/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/d/src/index.ts": `export const d = 4;`, - }, - path => writes.push(path), - ); - await using api = disposableApi; - const orchestrator = await api.createBuildOrchestrator( - ["/c/tsconfig.json", "/d/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined))!, /export const d = 4/); - - fs.writeFile!( - toRootedFilePath("/d/tsconfig.json", undefined), - JSON.stringify({ - compilerOptions: { composite: true, outDir: "lib", rootDir: "src" }, - files: ["src/index.ts"], - }), - ); - fs.writeFile!(toRootedFilePath("/d/lib/index.js", undefined), `export const d = 40;`); - - assert.equal((await orchestrator.clean("/d/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))); - - assert.equal((await orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))!, /export const d = 4/); - assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); - }); -}); - -describe("Checker - getImmediateAliasedSymbol", { concurrency }, () => { - test("resolves one level of alias indirection", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/foo.ts": `export const foo = 42;`, - "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `import { foo } from "./foo";`.indexOf("foo }"); - const aliasSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(aliasSymbol); - const aliased = await project.checker.getImmediateAliasedSymbol(aliasSymbol); - assert.ok(aliased, "Should resolve the immediate aliased symbol"); - assert.equal(aliased.name, "foo"); - }); -}); - -describe("Checker - getTargetSymbol", { concurrency }, () => { - test("gets the target symbol of instantiated symbol", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -class Base { - private value!: T; -} -class Alpha extends Base {} -class Bravo extends Base {} - -declare function test(): void; -test(); -test(); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const nodes: Array = []; - sourceFile.forEachChild(node => { - if (isExpressionStatement(node) && isCallExpression(node.expression) && node.expression.typeArguments) { - nodes.push(node.expression.typeArguments[0]); - } - }); - const aType = await project.checker.getTypeAtLocation(nodes[0]); - const bType = await project.checker.getTypeAtLocation(nodes[1]); - const aProperty = (await project.checker.getPropertiesOfType(aType))[0]; - const bProperty = (await project.checker.getPropertiesOfType(bType))[0]; - assert.ok(aProperty); - assert.ok(bProperty); - assert.equal(aProperty === bProperty, false); - assert.equal(await project.checker.getTargetSymbol(aProperty) === await project.checker.getTargetSymbol(bProperty), true); - }); -}); - -describe("Snapshot", { concurrency }, () => { - test("createSnapshot returns snapshot with projects", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok(snapshot); - assert.ok(snapshot.id); - assert.ok(snapshot.getProjects().length > 0); - assert.ok(snapshot.getConfiguredProject("/tsconfig.json")); - }); - - test("project exposes parsedCommandLine", async () => { - await using api = spawnAPI({ - ...defaultFiles, - "/tsconfig.json": JSON.stringify({ compileOnSave: true }), - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual(project.parsedCommandLine.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(project.parsedCommandLine.options, { configFilePath: "/tsconfig.json" }); - assert.equal(project.parsedCommandLine.compileOnSave, true); - assert.deepEqual(project.rootFiles, project.parsedCommandLine.fileNames); - assert.deepEqual(project.compilerOptions, project.parsedCommandLine.options); - }); - - test("getSymbolAtPosition", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - assert.ok(symbol.flags & SymbolFlags.Alias); - }); - - test("getSymbolAtLocation", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const node = cast( - cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, - isNamedImports, - ).elements[0].name; - assert.ok(node); - const symbol = await project.checker.getSymbolAtLocation(node); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - assert.ok(symbol.flags & SymbolFlags.Alias); - }); - - test("getSymbolOfSourceFile", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const moduleSymbol = await project.checker.getSymbolOfSourceFile("/src/foo.ts"); - assert.ok(moduleSymbol); - const exports = await moduleSymbol.getExports(); - assert.ok(exports.has(escapeLeadingUnderscores("foo"))); - }); - - test("getSymbolOfSourceFile returns undefined for a non-module file", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/script.ts": `const x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolOfSourceFile("/src/script.ts"); - assert.equal(symbol, undefined); - }); - - test("getSymbolOfSourceFile batched", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbols = await project.checker.getSymbolOfSourceFile(["/src/index.ts", "/src/foo.ts"]); - assert.equal(symbols.length, 2); - assert.ok(symbols[0]); - assert.ok(symbols[1]); - assert.strictEqual(symbols[1], await project.checker.getSymbolOfSourceFile("/src/foo.ts")); - }); - - test("getTypeOfSymbol", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NumberLiteral); - }); - - test("getNonMissingTypeOfSymbol", async () => { - await using api = spawnAPI({ - "/tsconfig-one.json": JSON.stringify({ - compilerOptions: { - exactOptionalPropertyTypes: true, - strict: true, - }, - }), - "/tsconfig-two.json": JSON.stringify({ - compilerOptions: { - exactOptionalPropertyTypes: false, - strict: true, - }, - }), - "/src/index.ts": "const x: Partial<{ a: string }> = {};", - }); - - // when `"exactOptionalPropertyTypes": true` - const snapshot1 = await api.createSnapshot({ openProject: "/tsconfig-one.json" }); - const project1 = snapshot1.getConfiguredProject("/tsconfig-one.json")!; - const type1 = await project1.checker.getTypeAtPosition("/src/index.ts", 7); - assert.ok(type1); - const symbol1 = await project1.checker.getPropertyOfType(type1, "a"); - assert.ok(symbol1); - const propertyType1 = await project1.checker.getTypeOfSymbol(symbol1); - assert.ok(propertyType1); - // getTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType1.isUnionType()); - const propertyType2 = await project1.checker.getNonMissingTypeOfSymbol(symbol1); - assert.ok(propertyType2); - // getNonMissingTypeOfSymbol returns 'string' - assert.ok(!propertyType2.isUnionType()); - assert.ok(propertyType2.flags & TypeFlags.String); - - // when `"exactOptionalPropertyTypes": false` - const snapshot2 = await api.createSnapshot({ openProject: "/tsconfig-two.json" }); - const project2 = snapshot2.getConfiguredProject("/tsconfig-two.json")!; - const type2 = await project2.checker.getTypeAtPosition("/src/index.ts", 7); - assert.ok(type2); - const symbol2 = await project2.checker.getPropertyOfType(type2, "a"); - assert.ok(symbol2); - const propertyType3 = await project2.checker.getTypeOfSymbol(symbol2); - assert.ok(propertyType3); - // getTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType3.isUnionType()); - const propertyType4 = await project2.checker.getNonMissingTypeOfSymbol(symbol2); - assert.ok(propertyType4); - // getNonMissingTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType4.isUnionType()); - }); -}); - -describe("LanguageService - imports", { concurrency }, () => { - test("getImportEditsForSymbols adds a named import", async () => { - const source = `const value = foo;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); - assert.ok(symbol); - - const edits = await project.languageService.getImportEditsForSymbols("/src/index.ts", [await symbol.getExportSymbol()]); - - assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); - }); - - test("getImportAdderEdits coalesces multiple importSymbol actions", async () => { - const source = `const value = foo + bar;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const foo = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); - const bar = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); - assert.ok(foo); - assert.ok(bar); - - const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol: await foo.getExportSymbol() }, - { kind: "importSymbol", symbol: await bar.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\n\nconst value = foo + bar;\n`); - }); - - test("getImportAdderEdits roots relative files at the project directory", async () => { - const source = `const value = foo;\n`; - const api = spawnAPI({ - "/outside/tsconfig.json": "{}", - "/outside/src/index.ts": source, - "/outside/src/foo.ts": `export const foo = 1;\n`, - }); - try { - const snapshot = await api.createSnapshot({ openProject: "/outside/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/outside/tsconfig.json")!; - const foo = await project.checker.getSymbolAtPosition("/outside/src/foo.ts", "export const ".length); - assert.ok(foo); - - const edits = await project.languageService.getImportAdderEdits("src/index.ts", [ - { kind: "importSymbol", symbol: await foo.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); - } - finally { - await api.close(); - } - }); - - test("getImportAdderEdits adds to an existing import", async () => { - const source = `import { foo } from "./foo";\nconst value = foo + bar;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const bar = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); - assert.ok(bar); - - const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol: await bar.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\nconst value = foo + bar;\n`); - }); - - test("getImportAdderEdits returns no edits for non-exported symbols", async () => { - const source = `const value = local;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `const local = 1;\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", "const ".length); - assert.ok(symbol); - - const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol }, - ]); - - assert.deepEqual(edits, []); - }); - - test("getImportAdderEdits rejects invalid actions", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", 13); - assert.ok(symbol); - - await assert.rejects( // @sync: assert.throws( - () => project.languageService.getImportAdderEdits("/src/index.ts", [{ kind: "unknown", symbol: symbol.id } as unknown as ImportAdderAction]), - /Debug Failure\. Illegal value: "unknown"/, - ); - await assert.rejects( // @sync: assert.throws( - () => - project.languageService.getImportAdderEdits("/src/index.ts", [{ - kind: "importSymbol", - symbol: { ...symbol, reference: { ...symbol.reference, id: 999_999_999 } }, - } as unknown as ImportAdderAction]), - /symbol handle \d+ not found/, - ); - }); -}); - -describe("LanguageService - getCompletionsAtPosition", { concurrency }, () => { - test("returns member completions after a dot", async () => { - const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Position right after "obj." — member completion trigger - const pos = src.indexOf("obj.") + "obj.".length; - const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); - assert.ok(completions, "Expected completions to be returned"); - assert.ok(completions.entries.length > 0, "Expected at least one completion entry"); - assert.ok(completions.entries.some(e => e.name === "name"), "Expected 'name' property in completions"); - assert.ok(completions.entries.some(e => e.name === "age"), "Expected 'age' property in completions"); - assert.ok(completions.entries.every(e => e.symbol === undefined), "Expected no symbol information"); - }); - - test("completion entries include sortText", async () => { - const src = `\nconst obj = { value: 1 };\nobj.\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("obj.") + "obj.".length; - const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); - assert.ok(completions); - assert.ok(completions.entries.length > 0); - assert.ok(completions.entries.some(e => e.sortText !== undefined), "Expected sortText on all entries"); - }); - - test("returns undefined for a non-existent file", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const completions = await project.languageService.getCompletionsAtPosition("/src/does-not-exist.ts", 0); - assert.equal(completions, undefined, "Expected undefined for non-existent file"); - }); - - test("includeSymbol: true populates symbol on property completions", async () => { - const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("obj.") + "obj.".length; - const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: ".", includeSymbol: true }); - assert.ok(completions, "Expected completions"); - const nameEntry = completions.entries.find(e => e.name === "name"); - assert.ok(nameEntry, "Expected 'name' entry"); - assert.ok(nameEntry.symbol, "Expected symbol to be set on 'name' entry when includeSymbol: true"); - assert.equal(nameEntry.symbol.name, "name", "Symbol name should match completion name"); - }); - - test("auto-import completions with symbols require a prepared snapshot", async () => { - const src = "someV"; - await using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, - "/src/export.ts": "export const someValue = 1;", - "/src/main.ts": src, - }); - - const unprepared = await api.createSnapshot({ - openProject: "/tsconfig.json", - userPreferences: { includeCompletionsForModuleExports: true } satisfies UserPreferences, - }); - const unpreparedProject = unprepared.getConfiguredProject("/tsconfig.json")!; - // @sync-skip-block-start - await assert.rejects( - unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), - /snapshot is not prepared for auto-imports/, - ); - // @sync-skip-block-end - // @sync-only-start - // assert.throws(() => unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), /snapshot is not prepared for auto-imports/); - // @sync-only-end - - const prepared = await unprepared.update({ prepareAutoImports: "/src/main.ts" }); - const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; - const completions = await preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); - assert.ok(completions?.entries.some(entry => entry.name === "someValue")); - }); - - test("snapshot preferences disable auto-import completions", async () => { - const src = "someV"; - await using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, - "/src/export.ts": "export const someValue = 1;", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - userPreferences: { includeCompletionsForModuleExports: false } satisfies UserPreferences, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { - includeSymbol: true, - }); - assert.ok(completions); - assert.ok(!completions.entries.some(entry => entry.name === "someValue")); - const prepared = await snapshot.update({ - userPreferences: { includeCompletionsForModuleExports: true }, - prepareAutoImports: "/src/main.ts", - }); - const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; - const enabled = await preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); - assert.ok(enabled?.entries.some(entry => entry.name === "someValue")); - }); -}); - -describe("LanguageService - getReferencedSymbolsForNode", { concurrency }, () => { - test("getReferencedSymbolsForNode", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); - const funcName = funcDecl.name!; - const refs = await project.languageService.getReferencedSymbolsForNode(funcName, funcName.pos); - assert.ok(refs.length > 0); - // Each entry should have a definition and references - const entry = refs[0]; - assert.ok(entry.definition); - assert.ok(entry.references.length > 0); - }); -}); - -describe("LanguageService - getSignatureUsage", { concurrency }, () => { - test("getSignatureUsage", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); - const usages = await project.languageService.getSignatureUsage(funcDecl); - assert.ok(usages.length > 0); - // The call site should have a call expression - const usage = usages.find(u => u.call !== undefined); - assert.ok(usage, "Expected at least one usage with a call expression"); - }); -}); - -describe("Checker - getApparentType", { concurrency }, () => { - test("returns the apparent type of a literal type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = "hello" as const;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `export const x = "hello" as const;`.indexOf("x ="); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(type.isLiteralType(), true); - assert.equal(type.isStringLiteralType(), true); - assert.equal(type.isIntrinsicType(), false); - const apparent = await project.checker.getApparentType(type); - assert.ok(apparent); - assert.ok(apparent.id > 0); - }); -}); - -describe("Checker - getReducedType", { concurrency }, () => { - test("returns the reduced type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare const TaggedError: ( - tag: Tag, -) => new = {}>( - args: { readonly [P in keyof A]: A[P] }, -) => { readonly _tag: Tag } & Readonly; - -class RateLimitError extends TaggedError("RateLimitError")<{ - readonly retryAfter: number; -}> {} - -class QuotaExceededError extends TaggedError("QuotaExceededError")<{ - readonly limit: number; -}> {} - -export type Result = RateLimitError | (RateLimitError & QuotaExceededError);`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(typeAlias); - const type = await project.checker.getTypeAtLocation(typeAlias); - assert.equal(type.isUnionType(), true); - assert.equal(type.isObjectType(), false); - const reducedType = await project.checker.getReducedType(type); - assert.equal(reducedType.isUnionType(), false); - assert.equal(reducedType.isObjectType(), true); - }); -}); - -describe("Checker - getMemberInModuleExports", { concurrency }, () => { - test("returns a named export when present", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const direct = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const found = await project.checker.getMemberInModuleExports(moduleSymbol, "direct"); - assert.ok(found); - assert.equal(found.name, "direct"); - const missing = await project.checker.getMemberInModuleExports(moduleSymbol, "missing"); - assert.equal(missing, undefined); - }); -}); - -describe("SourceFile", { concurrency }, () => { - test("relative and absolute identifiers share the project source file cache", async () => { - await using api = spawnAPI({ - "/outside/tsconfig.json": "{}", - "/outside/src/index.ts": "export const value = 1;", - }); - - const snapshot = await api.createSnapshot({ openProject: "/outside/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/outside/tsconfig.json")!.program; - const absolute = await program.getSourceFile("/outside/src/index.ts"); - const relative = await program.getSourceFile("src/index.ts"); - - assert.ok(absolute); - assert.strictEqual(relative, absolute); - }); - - test("getSourceFile rejects invalid document identifiers", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const document = { fileName: "/src/index.ts" } as unknown as DocumentIdentifier; - - await assert.rejects( // @sync: assert.throws( - () => program.getSourceFile(document), - { - name: "TypeError", - message: "Expected a string or { uri } for the document, received an object with keys: fileName", - }, - ); - }); - - test("getSourceFileNames returns all program files, not just root files", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "node10", - noLib: true, - }, - }), - "/src/index.ts": `import { foo } from "./foo";\nimport { bar } from "my-lib";\nexport const result = foo + bar;`, - "/src/foo.ts": `export const foo = 42;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const fileNames = await project.program.getSourceFileNames(); - assert.deepEqual(fileNames, [ - "/src/foo.ts", - "/node_modules/my-lib/index.d.ts", - "/src/index.ts", - ]); - }); - - test("source file metadata identifies external library and default library files", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "node10", - }, - }), - "/src/index.ts": `import { bar } from "my-lib";\nexport const result = bar;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const program = project.program; - - const index = await program.getSourceFile("/src/index.ts"); - assert.ok(index); - assert.equal(await program.isSourceFileFromExternalLibrary(index), false); - assert.equal(await program.isSourceFileDefaultLibrary(index), false); - - const lib = await program.getSourceFile("/node_modules/my-lib/index.d.ts"); - assert.ok(lib); - assert.equal(await program.isSourceFileFromExternalLibrary(lib), true); - assert.equal(await program.isSourceFileDefaultLibrary(lib), false); - - const fileNames = await program.getSourceFileNames(); - const defaultLibName = fileNames.find(name => name.endsWith("lib.d.ts") || name.includes("/lib.")); - assert.ok(defaultLibName, "expected a default library file in the program"); - const defaultLib = await program.getSourceFile(defaultLibName); - assert.ok(defaultLib); - assert.equal(await program.isSourceFileDefaultLibrary(defaultLib), true); - }); - - test("source file metadata reports implied node format", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - module: "nodenext", - moduleResolution: "nodenext", - }, - }), - "/src/index.ts": `export const x = 1;`, - "/src/esm.mts": `export const e = 1;`, - "/src/cjs.cts": `export const c = 1;`, - "/esm/package.json": JSON.stringify({ type: "module" }), - "/esm/index.ts": `export const m = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - - const mts = await program.getSourceFile("/src/esm.mts"); - assert.ok(mts); - assert.equal((await program.getSourceFileMetadata({ uri: "file:///src/esm.mts" }))?.impliedNodeFormat, ModuleKind.ESNext); - assert.equal((await program.getSourceFileMetadataByPath(mts.path))?.impliedNodeFormat, ModuleKind.ESNext); - - const cts = await program.getSourceFile("/src/cjs.cts"); - assert.ok(cts); - assert.equal((await program.getSourceFileMetadata(cts.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); - - // A plain .ts file with no nearby `"type": "module"` is CommonJS. - const index = await program.getSourceFile("/src/index.ts"); - assert.ok(index); - assert.equal((await program.getSourceFileMetadata(index.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); - - // A plain .ts file under a `"type": "module"` package is ESM. - const esmIndex = await program.getSourceFile("/esm/index.ts"); - assert.ok(esmIndex); - assert.equal((await program.getSourceFileMetadata(esmIndex.fileName))?.impliedNodeFormat, ModuleKind.ESNext); - }); - - test("file properties", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - - assert.ok(sourceFile); - assert.equal(sourceFile.text, defaultFiles["/src/index.ts"]); - assert.equal(sourceFile.fileName, "/src/index.ts"); - }); - - test("extended data", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - - assert.ok(sourceFile); - let nodeCount = 1; - sourceFile.forEachChild(function visit(node) { - if (isTemplateHead(node)) { - assert.equal(node.text, "head "); - assert.equal(node.rawText, "head "); - assert.equal(node.templateFlags, 0); - } - else if (isTemplateMiddle(node)) { - assert.equal(node.text, "middle"); - assert.equal(node.rawText, "middle"); - assert.equal(node.templateFlags, 0); - } - else if (isTemplateTail(node)) { - assert.equal(node.text, " tail"); - assert.equal(node.rawText, " tail"); - assert.equal(node.templateFlags, 0); - } - nodeCount++; - node.forEachChild(visit); - }); - assert.equal(nodeCount, 8); - }); - - test("forEachChild with visitList does not visit array children twice", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ files: ["/input.ts"] }), - "/input.ts": `let arrow = () => {}`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/input.ts"); - - assert.ok(sourceFile); - - const visited: { kind: SyntaxKind; pos: number; end: number; }[] = []; - (function walk(node: Node): void { - visited.push({ kind: node.kind, pos: node.pos, end: node.end }); - node.forEachChild(walk, (nodes: NodeArray) => { - for (let i = 0; i < nodes.length; i++) { - walk(nodes[i]); - } - return undefined; - }); - })(sourceFile); - - // Each node should be visited exactly once, even when a visitList callback - // is supplied. Previously array children were visited twice. - const seen = new Set(); - for (const { kind, pos, end } of visited) { - const key = `${kind}.${pos}.${end}`; - assert.ok(!seen.has(key), `Node ${key} was visited more than once`); - seen.add(key); - } - }); -}); - -describe("NodeArray", { concurrency }, () => { - test("hasTrailingComma", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `declare function foo(...args: any): void;\nfoo("a", "b",);\nfoo("a", "b");`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const statements = sourceFile.statements.filter(isExpressionStatement); - assert.ok(isCallExpression(statements[0].expression)); - assert.equal(statements[0].expression.arguments.hasTrailingComma, true); - assert.ok(isCallExpression(statements[1].expression)); - assert.equal(statements[1].expression.arguments.hasTrailingComma, false); - }); -}); - -describe("API objects", { concurrency }, () => { - test("unicode escapes", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/1.ts": `"😃"`, - "/src/2.ts": `"\\ud83d\\ude03"`, - "/src/3.ts": `"\\ud800a\\udc00"`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const expectedTexts = new Map([ - ["/src/1.ts", "😃"], - ["/src/2.ts", "😃"], - ["/src/3.ts", "\ud800a\udc00"], - ]); - - for (const file of expectedTexts.keys()) { - const sourceFile = await project.program.getSourceFile(file); - assert.ok(sourceFile); - - sourceFile.forEachChild(function visit(node) { - if (isStringLiteral(node)) { - assert.equal(node.text, expectedTexts.get(file)); - } - node.forEachChild(visit); - }); - } - }); - - test("template unicode escapes", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": "`\\ud800${0}\\udc00`", - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let sawHead = false; - let sawTail = false; - sourceFile.forEachChild(function visit(node) { - if (isTemplateHead(node)) { - assert.equal(node.text, "\ud800"); - sawHead = true; - } - else if (isTemplateTail(node)) { - assert.equal(node.text, "\udc00"); - sawTail = true; - } - node.forEachChild(visit); - }); - assert.ok(sawHead); - assert.ok(sawTail); - }); - - test("Object equality", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Same symbol returned from same snapshot's checker - assert.strictEqual( - await project.checker.getSymbolAtPosition("/src/index.ts", 9), - await project.checker.getSymbolAtPosition("/src/index.ts", 10), - ); - }); - - test("Snapshot dispose", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - - // Snapshot dispose should release server-side resources - assert.ok(snapshot.isDisposed() === false); - await snapshot.dispose(); - assert.ok(snapshot.isDisposed() === true); - - // After dispose, snapshot methods should throw - assert.throws(() => { - snapshot.getConfiguredProject("/tsconfig.json"); - }, { - name: "Error", - message: "Snapshot is disposed", - }); - }); -}); - -describe("Multiple snapshots", { concurrency }, () => { - test("two snapshots work independently", async () => { - await using api = spawnAPI(); - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Both can fetch source files - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.ok(sf2); - - // Disposing one doesn't break the other - await snap1.dispose(); - assert.ok(snap1.isDisposed()); - assert.ok(!snap2.isDisposed()); - - // snap2 still works after snap1 is disposed - const symbol = await snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - }); - - test("each snapshot has its own server-side lifecycle", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Verify initial state - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file and create a new snapshot with the change - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "changed";`); - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - - // snap2 should reflect the updated content - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = "changed";`); - - // snap1's source file should still have the original content - assert.equal(sf1.text, `export const foo = 42;`); - - await snap1.dispose(); - - // snap2 still works independently after snap1 is disposed - const symbol = await snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - - await snap2.dispose(); - - // Both are disposed, new snapshot works fine with latest content - const snap3 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf3 = await snap3.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf3); - assert.equal(sf3.text, `export const foo = "changed";`); - }); - - test("adding a new file is reflected in the next snapshot", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Add a brand new file - fs.writeFile!(toRootedFilePath("/src/bar.ts", undefined), `export const bar = true;`); - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { created: ["/src/bar.ts"] }, - }); - - const sf = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); - assert.ok(sf); - assert.equal(sf.text, `export const bar = true;`); - - // Original snapshot shouldn't have the new file - const sfOld = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); - assert.equal(sfOld, undefined); - }); - - test("multiple sequential edits produce correct snapshots", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - await api.createSnapshot({ openProject: "/tsconfig.json" }); - - const versions = [ - `export const foo = 1;`, - `export const foo = 2;`, - `export const foo = 3;`, - ]; - - for (const version of versions) { - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), version); - const snap = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf = await snap.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf); - assert.equal(sf.text, version); - } - }); - - test("snapshot.update derives from its receiver and reconstructs unchanged projects", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/first/tsconfig.json": `{}`, - "/first/index.ts": `export const first = 1;`, - "/second/tsconfig.json": `{}`, - "/second/index.ts": `export const second = 1;`, - }); - await using api = disposableAPI; - - const base = await api.createSnapshot({ - openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], - }); - const baseFirst = await base.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"); - const baseSecondProject = base.getConfiguredProject("/second/tsconfig.json")!; - - fs.writeFile!(toRootedFilePath("/first/index.ts", undefined), `export const first = 2;`); - const updated = await base.update({ - fileNotifications: { changed: ["/first/index.ts"] }, - ensurePrograms: [base.getConfiguredProject("/first/tsconfig.json")!.id], - }); - - assert.equal(updated.getProjects().length, 2); - assert.notStrictEqual(updated.getConfiguredProject("/second/tsconfig.json"), baseSecondProject); - assert.equal((await updated.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"))!.text, `export const first = 2;`); - assert.equal(baseFirst!.text, `export const first = 1;`); - }); - - test("snapshot.update preserves stable project ordering", async () => { - await using api = spawnAPI({ - "/a/tsconfig.json": `{}`, - "/a/index.ts": `export const a = 1;`, - "/z/tsconfig.json": `{}`, - "/z/index.ts": `export const z = 1;`, - }); - const base = await api.createSnapshot({ openProjects: ["/z/tsconfig.json"] }); - const updated = await base.update({ openProjects: ["/a/tsconfig.json"] }); - - assert.deepEqual(updated.getProjects().map(project => project.id), ["/a/tsconfig.json", "/z/tsconfig.json"]); - }); - - test("snapshot.update ensures all dirty programs", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/configured/tsconfig.json": `{}`, - "/configured/index.ts": `export const configured = 1;`, - "/inferred.ts": `export const inferred = 1;`, - "/synthetic.ts": `export const synthetic = 1;`, - }); - await using api = disposableAPI; - - const created = await api.createSnapshot({ - openProjects: ["/configured/tsconfig.json"], - openFiles: ["/inferred.ts", "/configured/index.ts"], - createPrograms: [{ - rootFiles: ["/synthetic.ts"], - compilerOptions: { noLib: true }, - }], - }); - assert.equal(created.getProjects().length, 3); - const configuredProjectId: ConfiguredProjectId = created.getConfiguredProject("/configured/tsconfig.json")!.id; - void configuredProjectId; - assert.strictEqual(created.operation.openedFiles![0].project, created.getProject(created.operation.openedFiles![0].project.id)); - assert.strictEqual(created.operation.openedFiles![1].project, created.getConfiguredProject("/configured/tsconfig.json")); - for (const project of created.getProjects()) { - assert.equal(project.dirty, false, `${project.id} should be ensured when opened or created`); - } - - fs.writeFile!(toRootedFilePath("/configured/index.ts", undefined), `export const configured = 2;`); - fs.writeFile!(toRootedFilePath("/inferred.ts", undefined), `export const inferred = 2;`); - fs.writeFile!(toRootedFilePath("/synthetic.ts", undefined), `export const synthetic = 2;`); - const dirty = await created.update({ - fileNotifications: { changed: ["/configured/index.ts", "/inferred.ts", "/synthetic.ts"] }, - }); - assert.deepEqual(dirty.getProjects().map(project => project.dirty), [true, true, true]); - - const ensured = await dirty.update({ ensurePrograms: true }); - assert.deepEqual(ensured.getProjects().map(project => project.dirty), [false, false, false]); - - const withOperationResults = await ensured.update({ - openFiles: ["/inferred.ts"], - createPrograms: [{ - rootFiles: ["/synthetic.ts"], - compilerOptions: { noLib: true }, - }], - }); - const openedProject: Project = withOperationResults.operation.openedFiles[0].project; - const createdProgram: Program = withOperationResults.operation.createdPrograms[0]; - const openedFilesTuple: readonly [{ readonly project: Project; }] = withOperationResults.operation.openedFiles; - const createdProgramsTuple: readonly [Program] = withOperationResults.operation.createdPrograms; - void openedFilesTuple; - void createdProgramsTuple; - assert.strictEqual(withOperationResults.getProject(openedProject.id), openedProject); - assert.strictEqual(withOperationResults.getProgram(createdProgram.id), createdProgram); - }); -}); - -describe("Source file caching", { concurrency }, () => { - test("same file from same snapshot returns cached object", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sf1 = await project.program.getSourceFile("/src/index.ts"); - const sf2 = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.strictEqual(sf1, sf2, "Same source file should be returned from cache"); - }); - - test("same file from two snapshots (same content) returns cached object", async () => { - await using api = spawnAPI(); - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - // Fetch from snap1 first (populates cache), then snap2 (cache hit via hash) - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.ok(sf2); - // Same content hash → cache hit → same object - assert.strictEqual(sf1, sf2, "Same file with same content should share cached object"); - }); - - test("modified file returns a different source file object", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file in the VFS - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 100;`); - - // Notify the server about the change - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = 100;`); - - // Different content → different object - assert.notStrictEqual(sf1, sf2, "Modified file should return a new source file object"); - }); - - test("unmodified file retains cached object across file change notification", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - - // Mutate a different file - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 999;`); - - // Notify the server about the change to foo.ts only - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf2); - - // index.ts wasn't changed — should still get cached object - assert.strictEqual(sf1, sf2, "Unchanged file should return cached object across snapshots"); - }); - - test("disposing the source snapshot releases its cache entries", async () => { - await using api = spawnAPI(); - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - // Fetch from snap1 to populate cache - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - - const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - await snap1.dispose(); - - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf2); - assert.notStrictEqual(sf1, sf2, "independent snapshots do not implicitly retain each other's cache entries"); - }); - - test("invalidateAll causes all files to be re-fetched", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - await using api = disposableAPI; - - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "hello";`); - - // Use invalidateAll to force re-fetch - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { invalidateAll: true }, - }); - const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = "hello";`); - assert.notStrictEqual(sf1, sf2, "invalidateAll should produce new source file objects"); - }); - - test("node handles from a cached source file should be valid in a new snapshot", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `function foo(x: number) {}\nfoo(42);`, - "/src/other.ts": `export const x = 1;`, - }); - await using api = disposableAPI; - - // Snapshot 1: get a node and verify getContextualType works - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const proj1 = snap1.getConfiguredProject("/tsconfig.json")!; - - const sf1 = await proj1.program.getSourceFile("/src/main.ts"); - assert.ok(sf1); - - let numLiteral: Expression | undefined; - sf1.forEachChild(function visit(node) { - if (isCallExpression(node)) numLiteral = node.arguments[0]; - node.forEachChild(visit); - }); - assert.ok(numLiteral, "should find the 42 argument"); - - const type1 = await proj1.checker.getContextualType(numLiteral); - assert.ok(type1); - assert.ok(type1.flags & TypeFlags.Number); - - // Snapshot 2: change a different file - fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const x = 2;`); - const snap2 = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/other.ts"] }, - }); - const proj2 = snap2.getConfiguredProject("/tsconfig.json")!; - - // Active snapshots may share a content-addressed source file. - const sf2 = await proj2.program.getSourceFile("/src/main.ts"); - assert.ok(sf2); - assert.strictEqual(sf1, sf2); - - let numLiteral2: Expression | undefined; - sf2.forEachChild(function visit(node) { - if (isCallExpression(node)) numLiteral2 = node.arguments[0]; - node.forEachChild(visit); - }); - assert.ok(numLiteral2, "should find the 42 argument"); - assert.strictEqual(numLiteral, numLiteral2); - - // A type from new snapshot should be resolved - const type2 = await proj2.checker.getContextualType(numLiteral2); - assert.ok(type2); - assert.ok(type2.flags & TypeFlags.Number); - }); -}); - -describe("Snapshot disposal", { concurrency }, () => { - test("dispose is idempotent", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstDispose = snapshot.dispose(); - const secondDispose = snapshot.dispose(); - assert.strictEqual(firstDispose, secondDispose); - await firstDispose; // @sync: snapshot.dispose(); - assert.ok(snapshot.isDisposed()); - // Second dispose should not throw - await snapshot.dispose(); - assert.ok(snapshot.isDisposed()); - }); - - test("api.close waits for disposal started by using", async () => { - const api = spawnAPI(); - let snapshot: Snapshot; - { - using disposableSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - snapshot = disposableSnapshot; - } - assert.ok(snapshot.isDisposed()); - await api.close(); - await snapshot.dispose(); - }); - - test("api.close disposes all active snapshots", async () => { - const api = spawnAPI(); - const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok(!snap1.isDisposed()); - assert.ok(!snap2.isDisposed()); - await api.close(); - assert.ok(snap1.isDisposed()); - assert.ok(snap2.isDisposed()); - }); - - // @sync-skip-block-start - test("api.close waits for source file disposal already in progress", async () => { - const api = spawnAPI(); - const retained = await api.createSourceFile("/retained.ts", "export {};"); - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): Promise; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let releaseStarted!: () => void; - let finishRelease!: () => void; - const started = new Promise(resolve => releaseStarted = resolve); - const finish = new Promise(resolve => finishRelease = resolve); - client.apiRequest = async (method, params) => { - if (method === "releaseSourceFile") { - releaseStarted(); - await finish; - } - return apiRequest(method, params); - }; - - const disposePromise = retained.dispose(); - await started; - let closed = false; - const closePromise = api.close().then(() => closed = true); - await Promise.resolve(); - assert.equal(closed, false); - finishRelease(); - await disposePromise; - await closePromise; - assert.equal(closed, true); - }); - // @sync-skip-block-end -}); - -describe("Source file cache keying across projects", { concurrency }, () => { - // Three projects share the same file (/src/shared.ts). - // The file sits inside a package.json scope with "type": "module". - // - // Project A: moduleResolution: bundler (auto detection, bundler doesn't - // trigger isFileForcedToBeModuleByFormat → file parsed as script) - // Project B: moduleResolution: bundler, moduleDetection: force - // (force → file parsed as module) - // Project C: moduleResolution: nodenext - // (nodenext + type:module → impliedNodeFormat ESNext → - // isFileForcedToBeModuleByFormat → file parsed as module) - // - // Expected: exactly two distinct source file objects are stored: - // - A gets one (script parse) - // - B and C share another (module parse) - const multiProjectFiles: Record = { - "/package.json": JSON.stringify({ type: "module" }), - "/src/shared.ts": `export const x = 1;`, - // Project A – bundler, auto detection (default) - "/projectA/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "bundler", - module: "esnext", - strict: true, - }, - files: ["../src/shared.ts"], - }), - // Project B – bundler, force module detection - "/projectB/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "bundler", - module: "esnext", - moduleDetection: "force", - strict: true, - }, - files: ["../src/shared.ts"], - }), - // Project C – nodenext (type:module → module) - "/projectC/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "nodenext", - module: "nodenext", - strict: true, - }, - files: ["../src/shared.ts"], - }), - }; - - test("different parse modes produce separate cached objects; same parse modes share", async () => { - await using api = spawnAPI(multiProjectFiles); - - const snapshot = await api.createSnapshot({ - openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json", "/projectC/tsconfig.json"], - }); - - const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; - const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; - const projectC = snapshot.getConfiguredProject("/projectC/tsconfig.json")!; - assert.ok(projectA, "projectA should exist"); - assert.ok(projectB, "projectB should exist"); - assert.ok(projectC, "projectC should exist"); - - // Fetch the shared file from each project - const sfA = await projectA.program.getSourceFile("/src/shared.ts"); - const sfB = await projectB.program.getSourceFile("/src/shared.ts"); - const sfC = await projectC.program.getSourceFile("/src/shared.ts"); - assert.ok(sfA, "sfA should exist"); - assert.ok(sfB, "sfB should exist"); - assert.ok(sfC, "sfC should exist"); - - // A should differ from B and C (script vs module parse) - assert.notStrictEqual(sfA, sfB, "projectA (script) and projectB (module) should have different cached source files"); - assert.notStrictEqual(sfA, sfC, "projectA (script) and projectC (module) should have different cached source files"); - - // B and C should share the same cached object (both module parse, same content hash) - assert.strictEqual(sfB, sfC, "projectB and projectC (both module parse) should share the same cached source file"); - }); -}); - -describe("Checker - symbol identity across projects", { concurrency }, () => { - const sharedSymbolFiles = { - "/projectA/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), - "/projectB/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), - "/src/shared.ts": `export const sharedVar = 42;`, - }; - - test("getSymbolAtPosition returns same Symbol instance across projects", async () => { - await using api = spawnAPI(sharedSymbolFiles); - - const snapshot = await api.createSnapshot({ - openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json"], - }); - - const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; - const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; - assert.ok(projectA, "projectA should exist"); - assert.ok(projectB, "projectB should exist"); - - const src = sharedSymbolFiles["/src/shared.ts"]; - const varPos = src.indexOf("sharedVar"); - - const symbolA = await projectA.checker.getSymbolAtPosition("/src/shared.ts", varPos); - const symbolB = await projectB.checker.getSymbolAtPosition("/src/shared.ts", varPos); - - assert.ok(symbolA, "symbolA should exist"); - assert.ok(symbolB, "symbolB should exist"); - assert.equal(symbolA.name, "sharedVar"); - assert.equal(symbolB.name, "sharedVar"); - - assert.strictEqual(symbolA, symbolB, "Same source symbol queried from two projects should be the same object"); - }); - - test("overlapping synthetic programs share Symbol instances", async () => { - await using api = spawnAPI({ - "/src/shared.ts": `export const sharedVar = 42;`, - }); - const snapshot = await api.createSnapshot({ - createPrograms: [ - { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, - { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, - ], - }); - const [programA, programB] = snapshot.operation.createdPrograms; - const position = `export const sharedVar = 42;`.indexOf("sharedVar"); - - const symbolA = await programA.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); - const symbolB = await programB.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); - - assert.ok(symbolA); - assert.strictEqual(symbolA, symbolB); - }); -}); - -describe("Checker - types and signatures", { concurrency }, () => { - const checkerFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const x = 42; -export function add(a: number, b: number, ...rest: number[]): number { return a + b; } -export class MyClass { - value: string = ""; - getValue(): string { return this.value; } -} -`, - }; - - test("getTypeAtPosition", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const xPos = src.indexOf("x = 42"); - const type = await project.checker.getTypeAtPosition("/src/main.ts", xPos); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NumberLiteral); - }); - - test("getTypeAtPosition batched", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const xPos = src.indexOf("x = 42"); - const addPos = src.indexOf("add("); - const types = await project.checker.getTypeAtPosition("/src/main.ts", [xPos, addPos]); - assert.equal(types.length, 2); - assert.ok(types[0]); - assert.ok(types[1]); - }); - - test("getTypeAtLocation", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const firstVarDecl = sourceFile.statements[2]; // "export const x" - assert.ok(firstVarDecl); - const type = await project.checker.getTypeAtLocation(firstVarDecl); - assert.ok(type); - }); - - test("getTypeAtLocation returns property type for parenthesized and chained access (issue #3938)", async () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -interface A { - a: number; - b: { c: number }; -} -const obj: A = { a: 1, b: { c: 2 } }; -const a1 = obj.a; -const a2 = (obj).a; -const c = obj.b.c; -`, - }; - - await using api = spawnAPI(files); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const targetNodes = new Map(); - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.PropertyAccessExpression) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text === "obj.a" || text === "(obj).a" || text === "obj.b.c") { - targetNodes.set(text, node); - } - } - node.forEachChild(visit); - }); - - assert.equal(targetNodes.size, 3, "Should find all target property access expressions"); - for (const expr of ["obj.a", "(obj).a", "obj.b.c"] as const) { - const node = targetNodes.get(expr); - assert.ok(node, `Should find expression '${expr}'`); - const type = await project.checker.getTypeAtLocation(node); - assert.ok(type, `Should get a type for '${expr}'`); - assert.ok(type.flags & TypeFlags.Number, `Expected '${expr}' to have number type flags, got ${type.flags}`); - } - }); - - test("getTypeAtLocation returns call result type for private method call (issue #4041)", async () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), - "/src/main.ts": ` -type Result = { readonly value: string }; - -export class Cache { - run(): Result { - return this.#buildCapabilities(); - } - - #buildCapabilities(): Result { - return { value: "ok" }; - } -} -`, - }; - - await using api = spawnAPI(files); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - let callNode: import("@typescript/typescript/unstable/ast").CallExpression | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text === "this.#buildCapabilities()") { - callNode = node; - } - } - node.forEachChild(visit); - }); - - assert.ok(callNode, "Should find private method call expression"); - const callType = await project.checker.getTypeAtLocation(callNode); - const calleeType = await project.checker.getTypeAtLocation(callNode.expression); - assert.ok(callType, "Should get type for call expression"); - assert.ok(calleeType, "Should get type for callee expression"); - - const callSignatures = await project.checker.getSignaturesOfType(calleeType, SignatureKind.Call); - assert.ok(callSignatures.length > 0, "Callee should be callable"); - const returnType = await project.checker.getReturnTypeOfSignature(callSignatures[0]); - assert.ok(returnType, "Should get return type for private method call"); - const callExprSignatures = await project.checker.getSignaturesOfType(callType, SignatureKind.Call); - - assert.ok(callType.flags & TypeFlags.Object, `Expected call expression type to be object-like, got ${callType.flags}`); - assert.ok(returnType.flags & TypeFlags.Object, `Expected return type to be object-like, got ${returnType.flags}`); - assert.equal(callType.flags, returnType.flags, "Call expression type should have same flags as method return type"); - assert.equal(callExprSignatures.length, 0, "Call expression result type should not itself be callable"); - }); - - test("getSignaturesOfType - call signatures", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const addPos = src.indexOf("add("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", addPos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length > 0); - const sig = callSigs[0]; - const typeCallSigs = await type.getCallSignatures(); - assert.deepEqual(typeCallSigs, callSigs); - assert.ok((await sig.getReturnType()).flags & TypeFlags.Number); - assert.ok((await sig.getTypeParameterAtPosition(0)).flags & TypeFlags.Number); - assert.ok(sig.id); - assert.ok(sig.parameters.length >= 2); - assert.ok(sig.hasRestParameter); - assert.ok(!sig.isConstruct); - assert.ok(!sig.isAbstract); - }); - - test("getApparentProperties includes CallableFunction members", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - const propertyNames = (await type.getApparentProperties()).map(property => property.name); - assert.ok(propertyNames.includes("apply")); - assert.ok(propertyNames.includes("call")); - assert.ok(propertyNames.includes("bind")); - }); - - test("checker and object methods share cached results", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem(checkerFiles), - collectTiming: true, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - let signature: Signature | undefined; - - async function assertOneRequest(callback: () => Promise) { - await api.resetTimingInfo(); - await callback(); - assert.equal((await api.getTimingInfo()).totals.requestCount, 1); - } - - await assertOneRequest(async () => { - const properties = await type.getProperties(); - assert.strictEqual(await project.checker.getPropertiesOfType(type), properties); - }); - await assertOneRequest(async () => { - const signatures = await type.getCallSignatures(); - assert.strictEqual(await project.checker.getSignaturesOfType(type, SignatureKind.Call), signatures); - signature = signatures[0]; - }); - await assertOneRequest(async () => { - const nonNullable = await project.checker.getNonNullableType(type); - assert.strictEqual(await type.getNonNullableType(), nonNullable); - }); - await assertOneRequest(async () => { - const apparentType = await type.getApparentType(); - assert.strictEqual(await project.checker.getApparentType(type), apparentType); - }); - await assertOneRequest(async () => { - const indexInfos = await type.getIndexInfos(); - assert.strictEqual(await project.checker.getIndexInfosOfType(type), indexInfos); - }); - await assertOneRequest(async () => { - assert.ok(signature); - const returnType = await project.checker.getReturnTypeOfSignature(signature); - assert.strictEqual(await signature.getReturnType(), returnType); - }); - }); - - test("getSignaturesOfType - construct signatures", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const classPos = src.indexOf("MyClass"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", classPos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const constructSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Construct); - assert.ok(constructSigs.length > 0); - const sig = constructSigs[0]; - assert.ok(sig.isConstruct); - }); - - test("Signature declaration can be resolved", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const addPos = src.indexOf("add("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", addPos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length > 0); - const sig = callSigs[0]; - assert.ok(sig.declaration); - assert.ok(isSignatureDeclaration.Handle(sig.declaration)); - const node = await sig.declaration.resolve(project); - assert.ok(node); - assert.ok(node.parameters); - assert.ok(isSignatureDeclaration(node)); - // The handle remembers its canonical project, so resolve() works without an argument. - const nodeFromCanonical = await sig.declaration.resolve(); - assert.ok(nodeFromCanonical); - assert.ok(nodeFromCanonical.parameters); - assert.ok(isSignatureDeclaration(nodeFromCanonical)); - assert.strictEqual(nodeFromCanonical.kind, node.kind); - - const methodPos = src.indexOf("getValue"); - const methodSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", methodPos); - assert.ok(methodSymbol); - assert.ok(methodSymbol.valueDeclaration); - const methodNode = await methodSymbol.valueDeclaration.resolve(project); - assert.ok(methodNode); - assert.strictEqual(methodNode.parent.kind, SyntaxKind.ClassDeclaration); - assert.strictEqual(methodNode.parent.parent.kind, SyntaxKind.SourceFile); - // A symbol's declaration handles default to the symbol's canonical project. - const methodNodeFromCanonical = await methodSymbol.valueDeclaration.resolve(); - assert.ok(methodNodeFromCanonical); - assert.strictEqual(methodNodeFromCanonical.kind, methodNode.kind); - }); - - test("getSignaturesOfType - signature type parameters", async () => { - const mainFile = ` - interface Operator { - } - export declare class Observable { - lift(operator: Operator): Observable; - } - `; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": mainFile, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const liftPos = mainFile.indexOf("lift"); - const type = await project.checker.getTypeAtPosition("/src/main.ts", liftPos); - assert.ok(type); - const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length === 1, "should have exactly one call signature, found: " + callSigs.length); - const sig = callSigs[0]; - assert.ok(sig.typeParameters?.length === 1, "should have exactly one type parameter, found: " + sig.typeParameters?.length); - const typeParams = await sig.getTypeParameters(); - const typeParam = typeParams[0]; - assert.ok(typeParam, "should have type parameter"); - const name = (await typeParam.getSymbol())?.name; - assert.ok(name === "R", "should be named R, instead: " + name); - assert.ok(typeParam.flags & TypeFlags.TypeParameter, "should be a type parameter, instead flags: " + typeParam.flags); - }); - - test("Signature.getParameters() returns parameter symbols with correct names", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const params = await sigs[0].getParameters(); - assert.equal(params.length, 3); - assert.equal(params[0].name, "a"); - assert.equal(params[1].name, "b"); - assert.equal(params[2].name, "rest"); - assert.ok(params[0].flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable on 'a', got ${params[0].flags}`); - }); - - test("Signature.getThisParameter() returns undefined when no explicit this parameter", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const thisParam = await sigs[0].getThisParameter(); - assert.strictEqual(thisParam, undefined, "add() has no explicit this parameter"); - }); - - test("Signature.getThisParameter() returns symbol for explicit this parameter", async () => { - const src = `export function foo(this: { n: number }, x: string): void {}`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("foo(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const thisParam = await sigs[0].getThisParameter(); - assert.ok(thisParam, "foo has an explicit this parameter"); - assert.equal(thisParam.name, "this"); - assert.ok(thisParam.flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable, got ${thisParam.flags}`); - }); - - test("Signature.getTarget() returns undefined for a non-instantiated signature", async () => { - await using api = spawnAPI(checkerFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const target = await sigs[0].getTarget(); - assert.strictEqual(target, undefined, "add() is not an instantiated signature"); - }); - - test("Signature.getTarget() returns the generic source signature for an instantiated call", async () => { - const src = ` - function identity(x: T): T { return x; } - identity("hello"); - `; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let callNode: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) callNode = node; - node.forEachChild(visit); - }); - assert.ok(callNode, "should find a call expression"); - const sig = await project.checker.getResolvedSignature(callNode); - assert.ok(sig, "should resolve a signature for the call"); - assert.ok(sig.target !== undefined, "instantiated call should have a target ID"); - const target = await sig.getTarget(); - assert.ok(target, "getTarget() should return the generic signature"); - assert.ok(target.typeParameters && target.typeParameters.length > 0, "target should have type parameters"); - }); -}); - -describe("Symbol - parent, members, exports", { concurrency }, () => { - const symbolFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/mod.ts": ` -export class Animal { - name: string = ""; - speak(): void {} -} -export const value = 1; -`, - }; - - test("getMembers returns class members", async () => { - await using api = spawnAPI(symbolFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = symbolFiles["/src/mod.ts"]; - const animalPos = src.indexOf("Animal"); - const symbol = await project.checker.getSymbolAtPosition("/src/mod.ts", animalPos); - assert.ok(symbol); - const members = await symbol.getMembers(); - assert.ok(members.size > 0); - const memberNames = [...members.values()].map(m => m.name); - assert.ok(memberNames.includes("name"), "should have 'name' member"); - assert.ok(memberNames.includes("speak"), "should have 'speak' member"); - }); - - test("getExports returns module exports via sourceFile symbol", async () => { - await using api = spawnAPI(symbolFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/mod.ts"); - assert.ok(sourceFile); - const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const exports = await moduleSymbol.getExports(); - assert.ok(exports.size > 0); - const exportNames = [...exports.values()].map(e => e.name); - assert.ok(exportNames.includes("Animal"), "should export Animal"); - assert.ok(exportNames.includes("value"), "should export value"); - }); - - test("getParent returns containing symbol", async () => { - await using api = spawnAPI(symbolFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = symbolFiles["/src/mod.ts"]; - const namePos = src.indexOf("name:"); - const nameSymbol = await project.checker.getSymbolAtPosition("/src/mod.ts", namePos); - assert.ok(nameSymbol); - assert.equal(nameSymbol.name, "name"); - const parent = await nameSymbol.getParent(); - assert.ok(parent); - assert.equal(parent.name, "Animal"); - }); - - test("checkFlags is typed as CheckFlags", async () => { - await using api = spawnAPI(symbolFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(symbol); - const checkFlags: CheckFlags = symbol.checkFlags; - assert.equal(checkFlags & CheckFlags.Readonly, 0); - }); - - test("binder symbols are shared by file before the AST is fetched", async () => { - await using api = spawnAPI(symbolFiles, { collectTiming: true }); - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - const secondSnapshot = await firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - const position = symbolFiles["/src/mod.ts"].indexOf("Animal"); - - await api.resetTimingInfo(); - const first = await firstProject.checker.getSymbolAtPosition("/src/mod.ts", position); - const second = await secondProject.checker.getSymbolAtPosition("/src/mod.ts", position); - assert.ok(first); - assert.strictEqual(second, first); - assert.equal((await api.getTimingInfo()).totals.sourceFilesFetched, 0); - - const declaration = await first.declarations[0].resolve(secondProject); - assert.ok(declaration); - assert.equal(declaration.getSourceFile().fileName, "/src/mod.ts"); - assert.equal((await api.getTimingInfo()).totals.sourceFilesFetched, 1); - assert.equal((await getSymbol(cast(declaration, isClassDeclaration)))?.name, "Animal"); - }); - - test("file-owned symbol properties do not require a snapshot or project", async () => { - await using api = spawnAPI(symbolFiles); - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/mod.ts"); - assert.ok(sourceFile); - await using retained = await api.retainSourceFile(sourceFile); - const animal = await project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - const storage = animal["storage"]; - assert.ok("owner" in storage); - assert.strictEqual(storage.owner.api, api); - assert.deepEqual(Object.keys(storage.owner).sort(), ["api", "record"]); - - await snapshot.dispose(); - const members = await animal.getMembers(); - assert.deepEqual([...members.values()].map(symbol => symbol.name), ["name", "speak"]); - assert.strictEqual(await members.get("name" as __String)?.getParent(), animal); - }); - - test("checker-created merged symbols remain snapshot-owned", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/a.ts", "/src/b.ts"] }), - "/src/a.ts": `namespace Merged { export const a = 1; }`, - "/src/b.ts": `namespace Merged { export const b = 1; }`, - }); - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - const secondSnapshot = await firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - - const first = await firstProject.checker.getSymbolAtPosition("/src/a.ts", 10); - const second = await secondProject.checker.getSymbolAtPosition("/src/a.ts", 10); - assert.ok(first); - assert.ok(second); - assert.notStrictEqual(second, first); - }); - - test("checker symbol methods merge declarations and parents in their project", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ files: ["/src/a.ts", "/src/b.ts"] }), - "/single/tsconfig.json": JSON.stringify({ files: ["/src/a.ts"] }), - "/src/a.ts": "namespace Merged { export const a = 1; }", - "/src/b.ts": "namespace Merged { export const b = 1; }", - }); - const snapshot = await api.createSnapshot({ openProjects: ["/tsconfig.json", "/single/tsconfig.json"] }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const singleProject = snapshot.getConfiguredProject("/single/tsconfig.json")!; - const fileA = await project.program.getSourceFile("/src/a.ts"); - const fileB = await project.program.getSourceFile("/src/b.ts"); - assert.ok(fileA && fileB); - const declarationA = cast(fileA.statements[0], isModuleDeclaration); - const declarationB = cast(fileB.statements[0], isModuleDeclaration); - const rawA = await getSymbol(declarationA); - const rawB = await getSymbol(declarationB); - assert.notStrictEqual(rawA, rawB); - - const merged = await project.checker.getSymbolOfDeclaration(declarationA); - assert.strictEqual(await project.checker.getSymbolOfDeclaration(declarationB), merged); - assert.strictEqual(await project.checker.getSymbolOfNode(declarationA), merged); - assert.strictEqual(await project.checker.getMergedSymbol(rawA), merged); - assert.strictEqual(await project.checker.getMergedSymbol(rawB), merged); - assert.strictEqual(await project.checker.getMergedSymbol(merged), merged); - assert.strictEqual(await singleProject.checker.getMergedSymbol(rawA), rawA); - assert.strictEqual(await singleProject.checker.getSymbolOfDeclaration(declarationA), rawA); - assert.equal(await project.checker.getSymbolOfNode(declarationA.name), undefined); - assert.equal(await project.checker.getSymbolOfNode(fileA), undefined); - assert.equal(await project.checker.getParentOfSymbol(merged), undefined); - - const member = (await rawA.getExports()).get("a" as __String); - assert.ok(member); - assert.strictEqual(await member.getParent(), rawA); - assert.strictEqual(await project.checker.getParentOfSymbol(member), merged); - assert.strictEqual(await singleProject.checker.getParentOfSymbol(member), rawA); - }); - - test("checker symbol methods late-bind computed members", async () => { - await using api = spawnAPI({ - "/src/computed.ts": "declare const key: unique symbol;\nclass Container { [key] = 1; ordinary = 2; }\nimport {} from './missing';", - }); - const snapshot = await api.createSnapshot({ openFiles: ["/src/computed.ts"] }); - const project = snapshot.getProjects()[0]; - const file = await project.program.getSourceFile("/src/computed.ts"); - assert.ok(file); - const declaration = cast(file.statements[1], isClassDeclaration); - const memberDeclaration = cast(declaration.members[0], isPropertyDeclaration); - const raw = await getSymbol(memberDeclaration); - const lateBound = await project.checker.getSymbolOfDeclaration(memberDeclaration); - assert.notStrictEqual(lateBound, raw); - assert.strictEqual(await project.checker.getSymbolOfNode(memberDeclaration), lateBound); - const container = await project.checker.getSymbolOfDeclaration(declaration); - assert.strictEqual(await project.checker.getParentOfSymbol(lateBound), container); - const type = await project.checker.getDeclaredTypeOfSymbol(container); - const property = (await type.getProperties()).find(symbol => symbol.escapedName === lateBound.escapedName); - assert.ok(property); - assert.strictEqual(await project.checker.getTargetSymbol(property), lateBound); - const ordinary = cast(declaration.members[1], isPropertyDeclaration); - assert.strictEqual(await project.checker.getSymbolOfDeclaration(ordinary), await getSymbol(ordinary)); - assert.equal(await project.checker.getSymbolOfNode(file.statements[2]), undefined); - }); - - test("snapshot-owned symbols resolve cached file-owned parents", async () => { - const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), - "/src/box.ts": source, - }, { collectTiming: true }); - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const box = await project.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); - assert.ok(box); - const boxType = await project.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); - assert.ok(boxType); - const [value] = await boxType.getProperties(); - assert.ok(value); - assert.ok(value.checkFlags & CheckFlags.Instantiated); - - await api.resetTimingInfo(); - assert.strictEqual(await value.getParent(), box); - assert.equal((await api.getTimingInfo()).totals.requestCount, 0); - }); - - test("compact symbol references retain reused file-owned symbols", async () => { - const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), - "/src/box.ts": source, - }); - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - // Create the second snapshot before the first symbol response populates - // the client cache. This ensures its registry has no direct retain on - // the record that will be discovered through the compact reference. - const secondSnapshot = await firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - - const box = await firstProject.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); - assert.ok(box); - const boxType = await secondProject.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); - assert.ok(boxType); - const [value] = await boxType.getProperties(); - assert.ok(value); - assert.ok(value.checkFlags & CheckFlags.Instantiated); - - // The instantiated property belongs to the second snapshot, but its - // compact parent reference finds `box` in the record retained only by - // the first snapshot. Resolving the reference borrows the wrapper into - // the second registry and must retain its record for that registry's - // lifetime. - const boxFromSecondSnapshot = await value.getParent(); - assert.strictEqual(boxFromSecondSnapshot, box); - await firstSnapshot.dispose(); - - // If the compact lookup did not establish ownership, disposing the - // first snapshot evicts the record. The next lookup then interns a new - // wrapper for the same binder symbol instead of returning the wrapper - // already obtained through the still-live second snapshot. - const parentAfterDisposal = await value.getParent(); - await secondSnapshot.dispose(); - assert.strictEqual(parentAfterDisposal, boxFromSecondSnapshot); - await assert.rejects(value.getParent(), /Project object registry is disposed/); // @sync: assert.throws(() => value.getParent(), /Project object registry is disposed/); - }); - - test("file-owned declarations resolve without the snapshot that observed them", async () => { - await using api = spawnAPI(symbolFiles); - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - // Keeps the server AST alive after the observing snapshot is disposed. - await using _secondSnapshot = await firstSnapshot.update({}); - const animal = await firstProject.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - await firstSnapshot.dispose(); - - const declaration = await animal.declarations[0].resolve(); - assert.ok(declaration && isClassDeclaration(declaration)); - assert.equal(declaration.name?.text, "Animal"); - }); - - test("file-owned symbols are accepted by later checkers while their file is unchanged", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...symbolFiles, "/src/other.ts": `export const other = 1;` }); - await using api = disposableAPI; - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const animal = await firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - - fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const other = 2;`); - const secondSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/other.ts"] } }); - const type = await secondSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getTypeOfSymbol(animal); - assert.ok(type); - assert.strictEqual(await type.getSymbol(), animal); - }); - - test("file-owned symbols are rejected by checkers whose program has a different version of their file", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(symbolFiles); - await using api = disposableAPI; - const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const animal = await firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - - fs.writeFile!(toRootedFilePath("/src/mod.ts", undefined), `${symbolFiles["/src/mod.ts"]}\nexport const added = 2;`); - const secondSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/mod.ts"] } }); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - await assert.rejects(secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); // @sync: assert.throws(() => secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); - }); -}); - -describe("Type - getSymbol", { concurrency }, () => { - test("getSymbol returns the symbol of a type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/types.ts": ` -export class Foo { - x: number = 0; -} -export const instance: Foo = new Foo(); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Foo {\n x: number = 0;\n}\nexport const instance: Foo = new Foo();\n`; - const instancePos = src.indexOf("instance"); - const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", instancePos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeSymbol = await type.getSymbol(); - assert.ok(typeSymbol); - assert.equal(typeSymbol.name, "Foo"); - const fooSymbol = await project.checker.getSymbolAtPosition("/src/types.ts", src.indexOf("Foo")); - assert.strictEqual(typeSymbol, fooSymbol); - }); -}); - -describe("Type - sub-property fetchers", { concurrency }, () => { - const typeFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), - "/src/types.ts": ` -export const arr: Array = [1, 2, 3]; -export const union: string | number = "hello"; -export const intersection: { a: number } & { b: string } = { a: 1, b: "hi" }; -export type KeyOf = keyof T; -export type Lookup = T[K]; -export type Cond = T extends string ? "yes" : "no"; -export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; -export type MappedUnion = Mapped | string; -export const tpl: \`hello \${string}\` = "hello world"; -export type Upper = Uppercase<"hello">; -export const tuple: readonly [number, string?, ...boolean[]] = [1]; -`, - }; - - async function getTypeAtName(api: API, name: string) { - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = typeFiles["/src/types.ts"]; - const pos = src.indexOf(name); - assert.ok(pos >= 0, `Could not find "${name}" in source`); - const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", pos); - assert.ok(symbol, `No symbol found at "${name}"`); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type, `No type found for symbol "${name}"`); - return { type, project, snapshot, api }; - } - - test("TypeReference.getTarget() returns the generic target", async () => { - const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "arr:"); - await using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Object); - const ref = type as TypeReference; - assert.ok(ref.objectFlags & ObjectFlags.Reference); - assert.equal(type.isObjectType(), true); - assert.equal(type.isTypeReference(), true); - assert.equal(type.isLiteralType(), false); - const target = await ref.getTarget(); - assert.ok(target); - assert.ok(target.flags & TypeFlags.Object); - const typeParameters = await target.getTypeParameters(); - assert.ok(typeParameters); - assert.equal(typeParameters.length, 1); - const properties = await type.getProperties(); - assert.ok(properties.some(property => property.name === "length")); - assert.equal((await type.getProperty("length"))?.name, "length"); - assert.ok((await type.getApparentProperties()).length >= properties.length); - assert.strictEqual(await type.getNonNullableType(), type); - }); - - test("UnionOrIntersectionType.getTypes() returns union members", async () => { - const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "union:"); - await using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Union); - const union = type as UnionOrIntersectionType; - const types = await union.getTypes(); - assert.ok(types.length >= 2); - assert.strictEqual(await union.getTypes(), types); - assert.equal(type.isUnionType(), true); - assert.equal(type.isIntersectionType(), false); - }); - - test("UnionOrIntersectionType.getTypes() returns intersection members", async () => { - const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "intersection:"); - await using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Intersection); - const inter = type as UnionOrIntersectionType; - const types = await inter.getTypes(); - assert.ok(types.length >= 2); - }); - - test("UnionOrIntersectionType.getTypes() on a wrongly-cast type returns undefined without hitting the server", async () => { - const src = `export const s: string = ""; export const u: string | number = "";`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // `string` is neither a union/intersection nor a template literal type, - // so it has no constituent types. The client guards on the type's flags - // and returns undefined without ever sending a request the server cannot satisfy. - const sSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); - assert.ok(sSymbol); - const sType = await project.checker.getTypeOfSymbol(sSymbol); - assert.ok(sType); - assert.equal(await (sType as unknown as UnionOrIntersectionType).getTypes(), undefined); - - // A real union still returns its constituents. - const uSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("u:")); - assert.ok(uSymbol); - const uType = await project.checker.getTypeOfSymbol(uSymbol); - assert.ok(uType); - assert.equal((await (uType as UnionOrIntersectionType).getTypes()).length, 2); - }); - - test("IndexType.getTarget() returns the target type", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("KeyOf", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - // KeyOf = keyof T — this is an IndexType - assert.ok(type.flags & TypeFlags.Index, `Expected IndexType, got flags ${type.flags}`); - const indexType = type as IndexType; - const target = await indexType.getTarget(); - assert.ok(target); - }); - - test("IndexedAccessType.getObjectType() and getIndexType()", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("Lookup", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.IndexedAccess, `Expected IndexedAccessType, got flags ${type.flags}`); - const ia = type as IndexedAccessType; - assert.equal(type.isIndexedAccessType(), true); - const objectType = await ia.getObjectType(); - assert.ok(objectType); - const indexType = await ia.getIndexType(); - assert.ok(indexType); - }); - - test("ConditionalType.getCheckType() and getExtendsType()", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); - const cond = type as ConditionalType; - assert.equal(type.isConditionalType(), true); - const checkType = await cond.getCheckType(); - assert.ok(checkType); - const extendsType = await cond.getExtendsType(); - assert.ok(extendsType); - }); - - test("ConditionalType.getTrueType() and getFalseType()", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); - - const trueType = await (type as ConditionalType).getTrueType(); - assert.ok(trueType, "should return the true-branch type"); - assert.ok(trueType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for true branch, got flags ${trueType.flags}`); - assert.equal((trueType as LiteralType).value, "yes"); - - const falseType = await (type as ConditionalType).getFalseType(); - assert.ok(falseType, "should return the false-branch type"); - assert.ok(falseType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for false branch, got flags ${falseType.flags}`); - assert.equal((falseType as LiteralType).value, "no"); - }); - - test("MappedType exposes its component types", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("Mapped", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(type.isMappedType(), true); - const mapped = type as MappedType; - assert.ok((await mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); - assert.ok(await mapped.getConstraintType()); - assert.ok(await mapped.getNameType()); - assert.ok(await mapped.getTemplateType()); - }); - - test("MappedType returned as a union constituent exposes its component types", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.resolveName("MappedUnion", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const union = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(union); - const mapped = (await (union as UnionOrIntersectionType).getTypes()).find(type => type.isMappedType()); - assert.ok(mapped); - assert.ok((await mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); - assert.ok(await mapped.getConstraintType()); - assert.ok(await mapped.getNameType()); - assert.ok(await mapped.getTemplateType()); - }); - - test("TemplateLiteralType.texts and getTypes()", async () => { - const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "tpl:"); - await using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.TemplateLiteral, `Expected TemplateLiteralType, got flags ${type.flags}`); - const tpl = type as TemplateLiteralType; - assert.ok(tpl.texts); - assert.ok(tpl.texts.length >= 2); - assert.equal(tpl.texts[0], "hello "); - const types = await tpl.getTypes(); - assert.ok(types.length >= 1); - }); - - test("StringMappingType.getTarget() returns the mapped type", async () => { - await using api = spawnAPI(typeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = typeFiles["/src/types.ts"]; - const pos = src.indexOf("Upper"); - const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - // Uppercase<"hello"> may resolve to a StringMappingType or a string literal - if (type.flags & TypeFlags.StringMapping) { - const sm = type as StringMappingType; - const target = await sm.getTarget(); - assert.ok(target); - } - // If it resolved to "HELLO" literal, that's fine too — it means eager evaluation - }); - - test("tuple metadata is owned by tuple targets", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare function empty(value: readonly []): void; -declare function nonempty(value: readonly [number]): void; -declare function array(value: readonly number[]): void; -empty([]); -nonempty([1]); -array([]); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const arrayLiterals: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ArrayLiteralExpression) { - arrayLiterals.push(node); - } - node.forEachChild(visit); - }); - assert.equal(arrayLiterals.length, 3); - - for (const [index, expectedFixedLength] of [0, 1].entries()) { - const type = await project.checker.getTypeAtLocation(arrayLiterals[index]); - assert.equal(await project.checker.isTupleType(type), true); - assert.equal(await project.checker.isTupleTypeTarget(type), false); - assert.equal(type.isTupleType(), true); - assert.equal(type.isTupleTypeTarget(), false); - assert.ok(type.isTupleType()); - assert.equal(Reflect.get(type, "fixedLength"), undefined); - - const target = await type.getTarget(); - assert.ok(target.objectFlags & ObjectFlags.Tuple); - assert.equal(await project.checker.isTupleType(target), true); - assert.equal(await project.checker.isTupleTypeTarget(target), true); - assert.equal(target.isTupleType(), true); - assert.equal(target.isTupleTypeTarget(), true); - assert.ok(target.isTupleTypeTarget()); - assert.equal(target.fixedLength, expectedFixedLength); - assert.equal(target.elementFlags.length, expectedFixedLength); - assert.equal(target.readonly, false); - } - - const arrayType = await project.checker.getTypeAtLocation(arrayLiterals[2]); - assert.equal(await project.checker.isTupleType(arrayType), false); - assert.equal(await project.checker.isTupleTypeTarget(arrayType), false); - assert.equal(arrayType.isTupleType(), false); - assert.equal(arrayType.isTupleTypeTarget(), false); - }); - - test("tuple targets expose labeled element declarations", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export function gh1449(a: T): T { - return a; -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const functionDeclaration = sourceFile.statements.find(isFunctionDeclaration); - assert.ok(functionDeclaration); - const constraint = functionDeclaration.typeParameters?.[0].constraint; - assert.ok(constraint); - - const type = await project.checker.getTypeFromTypeNode(constraint); - assert.ok(type.isTupleType()); - const target = await type.getTarget(); - const declarations = target.labeledElementDeclarations; - assert.ok(declarations); - assert.equal(declarations.length, 2); - - const names: string[] = []; - for (const handle of declarations) { - assert.ok(handle); - assert.equal(handle.kind, SyntaxKind.NamedTupleMember); - const declaration = await handle.resolve(); - assert.ok(declaration); - assert.ok(isIdentifier(declaration.name)); - names.push(declaration.name.text); - } - assert.deepEqual(names, ["foo", "bar"]); - }); -}); - -describe("Checker - intrinsic type getters", { concurrency }, () => { - const intrinsicFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = 1;`, - }; - - test("getAnyType returns a type with Any flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getAnyType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Any); - }); - - test("getStringType returns a type with String flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getStringType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.String); - }); - - test("getNumberType returns a type with Number flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getNumberType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Number); - }); - - test("getBooleanType returns a type with Boolean flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getBooleanType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Boolean); - }); - - test("getVoidType returns a type with Void flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getVoidType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Void); - }); - - test("getUndefinedType returns a type with Undefined flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getUndefinedType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Undefined); - }); - - test("getNullType returns a type with Null flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getNullType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Null); - }); - - test("getNeverType returns a type with Never flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getNeverType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Never); - }); - - test("getUnknownType returns a type with Unknown flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getUnknownType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Unknown); - }); - - test("getBigIntType returns a type with BigInt flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getBigIntType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.BigInt); - }); - - test("getESSymbolType returns a type with ESSymbol flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getESSymbolType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.ESSymbol); - }); - - test("getNonPrimitiveType returns a type with NonPrimitive flag", async () => { - await using api = spawnAPI(intrinsicFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = await project.checker.getNonPrimitiveType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NonPrimitive); - }); -}); - -describe("Checker - multi-project type ID uniqueness", { concurrency }, () => { - test("intrinsic types from 3 projects in the same snapshot have non-colliding IDs", async () => { - await using api = spawnAPI({ - "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj1/src/index.ts": `export const x = 1;`, - "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj2/src/index.ts": `export const y = "hello";`, - "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj3/src/index.ts": `export const z = true;`, - }); - - const snapshot = await api.createSnapshot({ - openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], - }); - - const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; - const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; - const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; - assert.ok(proj1, "proj1 should be in final snapshot"); - assert.ok(proj2, "proj2 should be in final snapshot"); - assert.ok(proj3, "proj3 should be in final snapshot"); - - // Fetch several intrinsic types from each checker. - // If type IDs collide across checkers, registerType panics → API error. - const num1 = await proj1.checker.getNumberType(); - const str1 = await proj1.checker.getStringType(); - const bool1 = await proj1.checker.getBooleanType(); - const any1 = await proj1.checker.getAnyType(); - const num2 = await proj2.checker.getNumberType(); - const str2 = await proj2.checker.getStringType(); - const bool2 = await proj2.checker.getBooleanType(); - const any2 = await proj2.checker.getAnyType(); - const num3 = await proj3.checker.getNumberType(); - const str3 = await proj3.checker.getStringType(); - const bool3 = await proj3.checker.getBooleanType(); - const any3 = await proj3.checker.getAnyType(); - - assert.ok(num1.flags & TypeFlags.Number, "proj1 number type"); - assert.ok(str1.flags & TypeFlags.String, "proj1 string type"); - assert.ok(bool1.flags & TypeFlags.Boolean, "proj1 boolean type"); - assert.ok(any1.flags & TypeFlags.Any, "proj1 any type"); - - assert.ok(num2.flags & TypeFlags.Number, "proj2 number type"); - assert.ok(str2.flags & TypeFlags.String, "proj2 string type"); - assert.ok(bool2.flags & TypeFlags.Boolean, "proj2 boolean type"); - assert.ok(any2.flags & TypeFlags.Any, "proj2 any type"); - - assert.ok(num3.flags & TypeFlags.Number, "proj3 number type"); - assert.ok(str3.flags & TypeFlags.String, "proj3 string type"); - assert.ok(bool3.flags & TypeFlags.Boolean, "proj3 boolean type"); - assert.ok(any3.flags & TypeFlags.Any, "proj3 any type"); - }); - - test("symbol and signature handles from 3 projects in the same snapshot have non-colliding IDs", async () => { - await using api = spawnAPI({ - "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj1/src/index.ts": `export function add(a: number, b: number): number { return a + b; }`, - "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj2/src/index.ts": `export function greet(name: string): string { return "hello " + name; }`, - "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj3/src/index.ts": `export function toggle(b: boolean): boolean { return !b; }`, - }); - - const snapshot = await api.createSnapshot({ - openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], - }); - - const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; - const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; - const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; - - // Get a symbol from each project (exercises symbol registry) - const src1 = `export function add(a: number, b: number): number { return a + b; }`; - const src2 = `export function greet(name: string): string { return "hello " + name; }`; - const src3 = `export function toggle(b: boolean): boolean { return !b; }`; - - const sym1 = await proj1.checker.getSymbolAtPosition("/proj1/src/index.ts", src1.indexOf("add")); - const sym2 = await proj2.checker.getSymbolAtPosition("/proj2/src/index.ts", src2.indexOf("greet")); - const sym3 = await proj3.checker.getSymbolAtPosition("/proj3/src/index.ts", src3.indexOf("toggle")); - assert.ok(sym1, "proj1 symbol"); - assert.ok(sym2, "proj2 symbol"); - assert.ok(sym3, "proj3 symbol"); - assert.equal(sym1.name, "add", "proj1 symbol name"); - assert.equal(sym2.name, "greet", "proj2 symbol name"); - assert.equal(sym3.name, "toggle", "proj3 symbol name"); - - // Get type of each symbol, then signatures (exercises type + signature registries) - const type1 = await proj1.checker.getTypeOfSymbol(sym1); - const type2 = await proj2.checker.getTypeOfSymbol(sym2); - const type3 = await proj3.checker.getTypeOfSymbol(sym3); - assert.ok(type1, "proj1 function type"); - assert.ok(type2, "proj2 function type"); - assert.ok(type3, "proj3 function type"); - - const sigs1 = await proj1.checker.getSignaturesOfType(type1, SignatureKind.Call); - const sigs2 = await proj2.checker.getSignaturesOfType(type2, SignatureKind.Call); - const sigs3 = await proj3.checker.getSignaturesOfType(type3, SignatureKind.Call); - assert.equal(sigs1.length, 1, "proj1 has 1 call signature"); - assert.equal(sigs2.length, 1, "proj2 has 1 call signature"); - assert.equal(sigs3.length, 1, "proj3 has 1 call signature"); - assert.equal(sigs1[0].parameters.length, 2, "proj1 add() has 2 params"); - assert.equal(sigs2[0].parameters.length, 1, "proj2 greet() has 1 param"); - assert.equal(sigs3[0].parameters.length, 1, "proj3 toggle() has 1 param"); - }); -}); - -describe("Checker - getBaseTypeOfLiteralType", { concurrency }, () => { - test("number literal widens to number", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = 42;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const x = 42;`; - const pos = src.indexOf("x ="); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const literalType = await project.checker.getTypeOfSymbol(symbol); - assert.ok(literalType); - assert.ok(literalType.flags & TypeFlags.NumberLiteral); - const baseType = await project.checker.getBaseTypeOfLiteralType(literalType); - assert.ok(baseType); - assert.ok(baseType.flags & TypeFlags.Number); - }); - - test("string literal widens to string", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const s = "hello";`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const s = "hello";`; - const pos = src.indexOf("s "); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const literalType = await project.checker.getTypeOfSymbol(symbol); - assert.ok(literalType); - assert.ok(literalType.flags & TypeFlags.StringLiteral); - const baseType = await project.checker.getBaseTypeOfLiteralType(literalType); - assert.ok(baseType); - assert.ok(baseType.flags & TypeFlags.String); - }); -}); - -describe("Checker - getContextualType", { concurrency }, () => { - test("contextual type from function parameter", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -function foo(x: number) {} -foo(42); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the argument "42" in foo(42) - // statement[1] = foo(42); which is an ExpressionStatement -> CallExpression - const callStmt = sourceFile.statements[1]; - assert.ok(callStmt); - let numLiteral: import("@typescript/typescript/unstable/ast").Expression | undefined; - callStmt.forEachChild(function visit(node) { - if (isCallExpression(node)) { - // First argument - numLiteral = node.arguments[0]; - } - node.forEachChild(visit); - }); - assert.ok(numLiteral); - const contextualType = await project.checker.getContextualType(numLiteral); - assert.ok(contextualType); - assert.ok(contextualType.flags & TypeFlags.Number); - }); -}); - -describe("Checker - getTypeOfSymbolAtLocation", { concurrency }, () => { - test("narrowed type via typeof check", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export function check(x: string | number) { - if (typeof x === "string") { - return x; - } - return x; -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport function check(x: string | number) {\n if (typeof x === "string") {\n return x;\n }\n return x;\n}\n`; - - // Get the symbol for parameter "x" - const paramPos = src.indexOf("x:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", paramPos); - assert.ok(symbol); - assert.equal(symbol.name, "x"); - - // Get the type of "x" at the wider function scope — should be string | number - const wideType = await project.checker.getTypeOfSymbol(symbol); - assert.ok(wideType); - assert.ok(wideType.flags & TypeFlags.Union, `Expected union type, got flags ${wideType.flags}`); - - // Get the narrowed return x inside the if block - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // statement[0] is the function declaration - const funcDecl = sourceFile.statements[0]; - assert.ok(funcDecl); - // Walk to find the first "return x" — inside the if, x should be narrowed to string - let firstReturnX: import("@typescript/typescript/unstable/ast").Node | undefined; - funcDecl.forEachChild(function visit(node) { - if (isReturnStatement(node) && !firstReturnX) { - // The expression of the return statement is the identifier "x" - if (node.expression) { - firstReturnX = node.expression; - } - } - node.forEachChild(visit); - }); - assert.ok(firstReturnX); - const narrowedType = await project.checker.getTypeOfSymbolAtLocation(symbol, firstReturnX); - assert.ok(narrowedType); - // Inside the if (typeof x === "string") branch, x should be narrowed to string - assert.ok(narrowedType.flags & TypeFlags.String, `Expected string type, got flags ${narrowedType.flags}`); - }); -}); - -describe("Checker - getShorthandAssignmentValueSymbol", { concurrency }, () => { - test("shorthand property symbol resolves to variable", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const name = "Alice"; -export const obj = { name }; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the shorthand property assignment { name } - // statement[1] = export const obj = { name }; - let shorthandNode: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isShorthandPropertyAssignment(node)) { - shorthandNode = node; - } - node.forEachChild(visit); - }); - assert.ok(shorthandNode, "Should find a shorthand property assignment"); - const valueSymbol = await project.checker.getShorthandAssignmentValueSymbol(shorthandNode); - assert.ok(valueSymbol); - assert.equal(valueSymbol.name, "name"); - }); -}); - -describe("readFile callback semantics", { concurrency }, () => { - test("callback configurations require every operation at runtime", () => { - assert.throws( - () => new API({ fs: { readFile: serverFS.useOS } as FileSystemCallbacks }), - /Invalid filesystem callback 'fileExists'/, - ); - }); - - test("invalid callback results do not fall through to the server OS", async () => { - const fs: FileSystemCallbacks = { - ...createVirtualFileSystem({ - "/tsconfig.json": "{}", - }), - readFile: (() => null) as unknown as FileSystemCallbacks["readFile"], - }; - await using api = new API({ cwd: "/", fs }); - await assert.rejects( // @sync: assert.throws( - () => api.readConfigFile("/tsconfig.json"), - /Invalid result from filesystem callback 'readFile'/, - ); - }); - - test("realpath callback string results are resolved and normalized by the server", async () => { - const fs = createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { module: "nodenext", moduleResolution: "nodenext" }, - files: ["index.ts"], - }), - "/index.ts": `import "pkg";`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - }); - for ( - const realpath of [ - (path: string) => path.replaceAll("/", "\\"), - (path: string) => path.slice(path.lastIndexOf("/") + 1), - (path: string) => "../" + path.split("/").slice(-2).join("/"), - ] - ) { - const callbacks: FileSystemCallbacks = { ...fs, realpath }; - await using api = new API({ cwd: "/", fs: callbacks }); - - using snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok( - (await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFileNames()) - .includes(toRootedFilePath("/node_modules/pkg/index.d.ts", undefined)), - ); - } - }); - - // @sync-skip-block-start - test("callback configuration and implementations are read together when connecting", async () => { - const fs: FileSystemCallbacks = { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: serverFS.useOS, - realpath: serverFS.identity, - stat: serverFS.fakeStat, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }; - await using api = new API({ fs }); - let calls = 0; - fs.readFile = () => { - calls++; - return undefined; - }; - - await api.readConfigFile(fileURLToPath(new URL("../../package.json", import.meta.url).toString())); - assert.ok(calls > 0); - }); - // @sync-skip-block-end - - test("readFile: string returns content, undefined blocks fallback, useOS falls through to the server OS", async () => { - const virtualFiles: Record = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x: number = 1;`, - }; - const vfs = createVirtualFileSystem(virtualFiles); - const blockedPath = "/src/blocked.ts"; - - const fs: FileSystemCallbacks = { - ...vfs, - readFile: fileName => { - if (fileName === blockedPath) { - return undefined; - } - // Try the VFS first; if it has the file, return its content (string). - // Otherwise use the OS filesystem on the server. - return vfs.readFile(fileName); - }, - }; - - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // 1. String content: virtual file is found - const sf = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sf, "Virtual file should be found"); - assert.equal(sf.text, virtualFiles["/src/index.ts"]); - - // 2. useOS fallback: lib files from the server OS should be present. - // If readFile returned undefined rather than useOS for unknowns, lib files would be missing - // and `number` would not resolve — this was the original async bug. - // Verify by checking that `number` resolves to a proper type (not error). - const pos = virtualFiles["/src/index.ts"].indexOf("x:"); - const type = await project.checker.getTypeAtPosition("/src/index.ts", pos); - assert.ok(type, "Type should resolve"); - assert.ok(type.flags & TypeFlags.Number, `Expected number type, got flags ${type.flags}`); - - // 3. undefined blocks fallback: blocked file should not be found - const blockedSf = await project.program.getSourceFile(blockedPath); - assert.equal(blockedSf, undefined, "Blocked file should not be found"); - }); - - test("configured case sensitivity is used by the server and client", async () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["/src/index.ts"] }), - "/src/index.ts": `export const value = 1;`, - }; - { - await using api = new API({ - cwd: "/", - fs: createVirtualFileSystem(files), - useCaseSensitiveFileNames: false, - }); - const program = (await api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; - assert.ok(await program.getSourceFile("/SRC/INDEX.TS")); - } - { - await using api = new API({ - cwd: "/", - fs: createVirtualFileSystem(files), - useCaseSensitiveFileNames: true, - }); - const program = (await api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; - assert.equal(await program.getSourceFile("/SRC/INDEX.TS"), undefined); - } - }); -}); - -describe("updateSnapshot file systems", { concurrency }, () => { - test("request filesystem factories normalize files and preserve explicit listings", () => { - const memory = createFileSystem([ - ["/src/index.ts", "posix"], - ["C:\\repo\\src\\index.ts", "windows"], - ["file:///literal%20path.ts", "literal file-name string"], - [{ uri: "file:///encoded/path%20with%20spaces.ts" }, "file URI"], - [{ uri: "file:///C%3A/repo/encoded%23name.ts" }, "Windows file URI"], - [{ uri: "file://server/share/encoded%20name.ts" }, "UNC file URI"], - [{ uri: "file:///encoded/unicode%E2%80%93name.ts" }, "Unicode file URI"], - [{ uri: "file:///encoded/literal+plus.ts" }, "plus file URI"], - [{ uri: "file:///encoded/once%2520encoded.ts" }, "double-encoded file URI"], - ["vscode-remote://ssh-remote+host/workspace/src/index.ts", "remote"], - ["vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts", "notebook"], - ]); - assert.deepEqual(memory, { - kind: "full", - files: { - "/src/index.ts": "posix", - "C:/repo/src/index.ts": "windows", - "file:///literal%20path.ts": "literal file-name string", - "/encoded/path with spaces.ts": "file URI", - "C:/repo/encoded#name.ts": "Windows file URI", - "//server/share/encoded name.ts": "UNC file URI", - "/encoded/unicode–name.ts": "Unicode file URI", - "/encoded/literal+plus.ts": "plus file URI", - "/encoded/once%20encoded.ts": "double-encoded file URI", - "vscode-remote://ssh-remote+host/workspace/src/index.ts": "remote", - "vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts": "notebook", - }, - directories: undefined, - symlinks: undefined, - removedPaths: undefined, - }); - - const directories = { "/explicit": { files: ["provided.ts"], directories: [] } }; - const cache = createFileSystemLayer([["/ignored/derived.ts", "cache"]], { - directories, - removedPaths: ["/removed.ts", "/removed"], - }); - assert.equal(cache.kind, "layer"); - assert.deepEqual(cache.directories, directories); - assert.deepEqual(cache.removedPaths, ["/removed.ts", "/removed"]); - - assert.throws( - () => - createFileSystem([ - ["/duplicate.ts", "path"], - [{ uri: "file:///duplicate.ts" }, "URI"], - ]), - /Duplicate request filesystem path: \/duplicate\.ts/, - ); - - const prototypeFileSystem = createFileSystem([["__proto__", "prototype"]]); - assert.equal(prototypeFileSystem.files["__proto__"], "prototype"); - assert.ok(Object.hasOwn(prototypeFileSystem.files, "__proto__")); - - assert.throws( - () => - createFileSystem([ - ["/normalized/duplicate.ts", "forward slash"], - ["\\normalized\\duplicate.ts", "backslash"], - ]), - /Duplicate request filesystem path: \/normalized\/duplicate\.ts/, - ); - }); - - test("full file system is total and does not invoke host callbacks", async () => { - const callbackCalls: string[] = []; - const host = createVirtualFileSystem({ - "/host.ts": `export const source = "host";`, - }); - const fs: FileSystemCallbacks = { - readFile: path => { - callbackCalls.push(`readFile:${path}`); - return host.readFile!(path); - }, - fileExists: path => { - callbackCalls.push(`fileExists:${path}`); - return host.fileExists!(path); - }, - directoryExists: path => { - callbackCalls.push(`directoryExists:${path}`); - return host.directoryExists!(path); - }, - getAccessibleEntries: path => { - callbackCalls.push(`getAccessibleEntries:${path}`); - return host.getAccessibleEntries!(path); - }, - realpath: path => { - callbackCalls.push(`realpath:${path}`); - return path; - }, - stat: path => { - callbackCalls.push(`stat:${path}`); - if (host.directoryExists(rootedDirectoryPathFromPath(path))) return { mode: 0o040555, size: 0, mtime: new Date(0) }; - if (host.fileExists(rootedFilePathFromPath(path))) return { mode: 0o100444, size: 0, mtime: new Date(0) }; - return undefined; - }, - writeFile: (path, content) => { - callbackCalls.push(`writeFile:${path}`); - host.writeFile!(path, content); - }, - removeFile: path => { - callbackCalls.push(`removeFile:${path}`); - host.removeFile(path); - }, - }; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), - "/src/index.ts": `export const source = "memory";`, - }, - directories: { - "/": { files: ["tsconfig.json"], directories: ["src"] }, - "/src": { files: ["index.ts"], directories: [] }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.equal(sourceFile?.text, `export const source = "memory";`); - assert.equal(await project.program.getSourceFile("/host.ts"), undefined); - assert.deepEqual(callbackCalls, []); - }); - - test("full file system with lib resolves the default library", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemWithLib(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["src/main.ts"] }), - "/src/main.ts": `export const values: Array = [];`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.deepEqual(await program.getGlobalDiagnostics(), []); - const sourceFileNames = await program.getSourceFileNames(); - const defaultLibraryName = sourceFileNames.find(fileName => fileName.includes("/lib.") && fileName.endsWith(".d.ts")); - assert.ok(defaultLibraryName, JSON.stringify(sourceFileNames)); - const defaultLibrary = await program.getSourceFile(defaultLibraryName); - assert.ok(defaultLibrary); - assert.equal(await program.isSourceFileDefaultLibrary(defaultLibrary), true); - }); - - test("full file system accepts and caches paths decoded from VS Code document URIs", async () => { - const fileDocument = { uri: "file:///workspace/file%20name.ts" }; - const remoteDocument = { uri: "vscode-remote://ssh-remote+host/workspace/src/remote%20name.ts" }; - const notebookDocument = { uri: "vscode-notebook-cell:/workspace/notebook.ipynb/cell%20name.ts" }; - const untitledDocument = { uri: "untitled:Untitled-1" }; - const files: [DocumentIdentifier, string][] = [ - [fileDocument, `export const file = true;`], - [remoteDocument, `export const remote = true;`], - [notebookDocument, `export const cell = true;`], - [untitledDocument, `export const untitled = true;`], - ]; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - collectTiming: true, - }); - using snapshot = await api.createSnapshot({ - openFiles: files.map(([document]) => document), - fileSystem: createFileSystem(files), - }); - for (const [document, text] of files) { - const project = await snapshot.getDefaultProjectForFile(document); - assert.ok(project); - await api.resetTimingInfo(); - const sourceFile = await project.program.getSourceFile(document); - assert.ok(sourceFile); - assert.equal(sourceFile.text, text); - assert.equal((await api.getTimingInfo()).totals.requestCount, 1); - - assert.strictEqual(await project.program.getSourceFile(document), sourceFile); - assert.strictEqual(await project.program.getSourceFile(sourceFile.fileName), sourceFile); - assert.strictEqual(await project.program.getSourceFile(sourceFile.path), sourceFile); - assert.equal((await api.getTimingInfo()).totals.requestCount, 1, sourceFile.fileName); - } - }); - - test("file system layer bypasses callbacks on hits and falls back on misses", async () => { - const readFileCalls: string[] = []; - const directoryCalls: string[] = []; - const host = createVirtualFileSystem({ - "/src/fallback.ts": `export const fallback = true;`, - }); - const fs: FileSystemCallbacks = { - ...host, - readFile: path => { - readFileCalls.push(path); - return host.readFile!(path); - }, - getAccessibleEntries: path => { - directoryCalls.push(path); - return host.getAccessibleEntries!(path); - }, - }; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: { - kind: "layer", - files: { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), - "/src/index.ts": `export const cached = true;`, - }, - directories: { - "/": { files: ["tsconfig.json"], directories: ["src"] }, - "/src": { files: ["fallback.ts", "index.ts"], directories: [] }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.equal((await project.program.getSourceFile("/src/index.ts"))?.text, `export const cached = true;`); - assert.equal((await project.program.getSourceFile("/src/fallback.ts"))?.text, `export const fallback = true;`); - - assert.ok(!readFileCalls.includes("/tsconfig.json")); - assert.ok(!readFileCalls.includes("/src/index.ts")); - assert.ok(readFileCalls.includes("/src/fallback.ts")); - assert.ok(!directoryCalls.includes("/")); - assert.ok(!directoryCalls.includes("/src")); - }); - - test("file system layer factory preserves host directory entries", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ - "/src/from-host.ts": `export const host = true;`, - }), - }); - - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemLayer([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] })], - ["/src/from-cache.ts", `export const cache = true;`], - ]), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.deepEqual( - [...await program.getSourceFileNames()].sort(), - ["/src/from-cache.ts", "/src/from-host.ts"], - ); - }); - - test("full file system resolves packages through internal monorepo symlinks", async () => { - const callbackCalls: string[] = []; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: path => { - callbackCalls.push(path); - return serverFS.useOS; - }, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }, - }); - - using snapshot = await api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), - "/project/index.ts": `import { value } from "pkg"; export { value };`, - "/packages/pkg/index.d.ts": `export declare const value: number;`, - }, - symlinks: { - "/project/node_modules/pkg": { target: "/packages/pkg" }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (await project.program.getSourceFile("/packages/pkg/index.d.ts"))?.text, - `export declare const value: number;`, - ); - assert.deepEqual(callbackCalls, []); - }); - - test("full file system resolves relative symlink targets", async () => { - const callbackCalls: string[] = []; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: path => { - callbackCalls.push(path); - return serverFS.useOS; - }, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }, - }); - - using snapshot = await api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["index.ts"] }), - "/project/index.ts": `export { value } from "./pkg";`, - "/packages/pkg/index.d.ts": `export declare const value: number;`, - }, - symlinks: { - "/project/pkg": { target: "../packages/pkg" }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (await project.program.getSourceFile("/project/pkg/index.d.ts"))?.text, - `export declare const value: number;`, - ); - assert.deepEqual(callbackCalls, []); - }); - - test("Snapshot.update layers filesystem edits and removals", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem(Object.entries({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { noLib: true }, - include: ["src/**/*.ts"], - }), - "/src/keep.ts": `export const keep = true;`, - "/src/change.ts": `export const version = "old";`, - "/src/remove.ts": `export const remove = true;`, - "/src/removed/gone.ts": `export const gone = true;`, - })), - }); - - using updated = await snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/src/change.ts": `export const version = "new";`, - "/src/added.ts": `export const added = true;`, - }), - { - removedPaths: ["/src/remove.ts", "/src/removed"], - }, - ), - }); - const project = updated.getConfiguredProject("/tsconfig.json")!; - assert.equal((await project.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); - assert.equal((await project.program.getSourceFile("/src/change.ts"))?.text, `export const version = "new";`); - assert.equal((await project.program.getSourceFile("/src/added.ts"))?.text, `export const added = true;`); - assert.equal(await project.program.getSourceFile("/src/remove.ts"), undefined); - assert.equal(await project.program.getSourceFile("/src/removed/gone.ts"), undefined); - using fork = await snapshot.update({ ensurePrograms: true }); - assert.equal((await fork.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/change.ts"))?.text, `export const version = "old";`); - - using updatedAgain = await updated.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/src/added.ts": `export const added = "updated again";`, - }), - { - removedPaths: ["/src/change.ts"], - }, - ), - }); - const updatedAgainProject = updatedAgain.getConfiguredProject("/tsconfig.json")!; - assert.equal((await updatedAgainProject.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); - assert.equal((await updatedAgainProject.program.getSourceFile("/src/added.ts"))?.text, `export const added = "updated again";`); - assert.equal(await updatedAgainProject.program.getSourceFile("/src/change.ts"), undefined); - }); - - test("eager snapshot disposal does not retain filesystem history", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - let snapshot: Snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["pkg/index.ts"] })], - ["/pkg/index.ts", ""], - ]), - }); - try { - let content = ""; - for (const character of "export const x = 1") { - const oldSnapshot: Snapshot = snapshot; - content += character; - snapshot = await oldSnapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer([["/pkg/index.ts", content]]), - }); - await oldSnapshot.dispose(); - assert.equal(oldSnapshot.isDisposed(), true); - } - - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((await program.getSourceFile("/pkg/index.ts"))?.text, "export const x = 1"); - } - finally { - await snapshot.dispose(); - } - }); - - test("Snapshot.update treats a full filesystem as a total replacement", async () => { - const host = createVirtualFileSystem({ - "/host.ts": `export const source = "host";`, - }); - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = await api.createSnapshot(); - using replaced = await snapshot.update({ - ensurePrograms: true, - openProject: "/tsconfig.json", - fileSystem: createFileSystem([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["memory.ts", "host.ts"] })], - ["/memory.ts", `export const source = "memory";`], - ]), - }); - const program = replaced.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((await program.getSourceFile("/memory.ts"))?.text, `export const source = "memory";`); - assert.equal(await program.getSourceFile("/host.ts"), undefined); - }); - - test("Snapshot.update applies target changes through inherited symlinks", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem( - Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["src/main.ts"] }), - "/src/main.ts": `import "./link/change"; import "./link/added"; import "./link/remove";`, - "/target/change.ts": `export const version = "old";`, - "/target/remove.ts": `export const removed = true;`, - }), - { - symlinks: { - "/src/link": { target: "/target" }, - }, - }, - ), - }); - - using updated = await snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/target/change.ts": `export const version = "new";`, - "/target/added.ts": `export const added = true;`, - }), - { - removedPaths: ["/target/remove.ts"], - }, - ), - }); - const program = updated.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((await program.getSourceFile("/src/link/change.ts"))?.text, `export const version = "new";`); - assert.equal((await program.getSourceFile("/src/link/added.ts"))?.text, `export const added = true;`); - assert.equal(await program.getSourceFile("/src/link/remove.ts"), undefined); - }); - - test("full filesystem emit returns outputs without mutating the host", async () => { - const hostWrites: string[] = []; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: serverFS.useOS, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: path => { - hostWrites.push(path); - }, - removeFile: serverFS.useOS, - }, - }); - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), - "/src/main.ts": `export const value: number = 1;`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const result = await program.emit(); - assert.deepEqual(result.emittedFiles, ["/out/main.js"]); - assert.deepEqual(result.fileSystem, { - kind: "layer", - files: { - "/out/main.js": `export const value = 1;\n`, - }, - }); - assert.deepEqual(hostWrites, []); - - using updated = await snapshot.update({ fileSystem: result.fileSystem!, openFiles: ["/out/main.js"] }); - const outputProject = await updated.getDefaultProjectForFile("/out/main.js"); - assert.equal((await updated.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"))?.text, `export const value: number = 1;`); - assert.equal((await outputProject?.program.getSourceFile("/out/main.js"))?.text, `export const value = 1;\n`); - }); - - test("filesystem layer emit writes through to the host", async () => { - const host = createVirtualFileSystem({}); - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = await api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemLayer(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), - "/src/main.ts": `export const value: number = 1;`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const result = await program.emit(); - assert.equal(result.fileSystem, undefined); - assert.equal(host.readFile!(toRootedFilePath("/out/main.js", undefined)), `export const value = 1;\n`); - }); - - test("full file system can link node_modules from the host", async () => { - const readFileCalls: string[] = []; - const directoryExistsCalls: string[] = []; - const fileExistsCalls: string[] = []; - const host = createVirtualFileSystem({ - "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, - }); - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - ...host, - directoryExists: path => { - directoryExistsCalls.push(path); - return host.directoryExists!(path); - }, - fileExists: path => { - const exists = host.fileExists!(path); - fileExistsCalls.push(`${path}:${exists}`); - return exists; - }, - readFile: path => { - readFileCalls.push(path); - return host.readFile!(path); - }, - }, - }); - - using snapshot = await api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), - "/project/index.ts": `import { value } from "pkg"; export { value };`, - }, - symlinks: { - "/project/node_modules": { target: "/host/node_modules", host: true }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - const sourceFileNames = await project.program.getSourceFileNames(); - assert.ok( - sourceFileNames.includes("/host/node_modules/pkg/index.d.ts" as RootedFilePath), - JSON.stringify({ sourceFileNames, readFileCalls, directoryExistsCalls, fileExistsCalls }), - ); - assert.equal( - (await project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, - `export declare const value: string;`, - ); - assert.ok(readFileCalls.includes("/host/node_modules/pkg/index.d.ts")); - assert.ok(!readFileCalls.some(path => path.startsWith("/project/node_modules"))); - }); - - test("Snapshot.update host symlinks bypass an inherited full filesystem", async () => { - const host = createVirtualFileSystem({ - "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, - }); - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = await api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: createFileSystem([ - ["/project/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] })], - ["/project/index.ts", `import { value } from "pkg"; export { value };`], - ]), - }); - using updated = await snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer([], { - symlinks: { - "/project/node_modules": { target: "/host/node_modules", host: true }, - }, - }), - }); - const project = updated.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (await project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, - `export declare const value: string;`, - ); - }); - - // TODO: Add request filesystem coverage for `tsc -b` and `tsc -b --clean` - // once build and clean are exposed through the client API. In particular, - // verify that clean removes synthetic outputs and that build-mode re-timestamping - // of emitted-but-unchanged files works for full filesystems, which currently - // do not model modification times. -}); - -describe("Checker - isArrayType / isTupleType", { concurrency }, () => { - test("number[] is array, not tuple", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: number[] = [];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: number[] = [];`; - const pos = src.indexOf("xs"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), true); - assert.equal(await project.checker.isTupleType(type), false); - }); - - test("readonly number[] is array", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: readonly number[] = [];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: readonly number[] = [];`; - const pos = src.indexOf("xs"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), true); - assert.equal(await project.checker.isTupleType(type), false); - }); - - test("Array is array, not tuple", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: Array = [];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: Array = [];`; - const pos = src.indexOf("xs"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), true); - assert.equal(await project.checker.isTupleType(type), false); - }); - - test("[number, string] is tuple, not array", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const tup: [number, string] = [1, "a"];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const tup: [number, string] = [1, "a"];`; - const pos = src.indexOf("tup"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), false); - assert.equal(await project.checker.isTupleType(type), true); - }); - - test("readonly [number, string] is tuple, not array", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const tup: readonly [number, string] = [1, "a"];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const tup: readonly [number, string] = [1, "a"];`; - const pos = src.indexOf("tup"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), false); - assert.equal(await project.checker.isTupleType(type), true); - }); - - test("string is neither array nor tuple", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const str: string = "";`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const str: string = "";`; - const pos = src.indexOf("str"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(await project.checker.isArrayType(type), false); - assert.equal(await project.checker.isTupleType(type), false); - }); -}); - -describe("Checker - isReadonlySymbol", { concurrency }, () => { - test("properties with a 'readonly' modifier", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface User { - readonly name: string; - age: number; -} - -export type ReadonlyUser = Readonly; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const user = sourceFile.statements.find(isInterfaceDeclaration); - assert.ok(user); - const userProperties = await project.checker.getPropertiesOfType( - await project.checker.getTypeAtLocation(user), - ); - assert.equal(await project.checker.isReadonlySymbol(userProperties[0]), true); - assert.equal(await project.checker.isReadonlySymbol(userProperties[1]), false); - const readonlyUser = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(readonlyUser); - const readonlyUserProperties = await project.checker.getPropertiesOfType( - await project.checker.getTypeAtLocation(readonlyUser), - ); - assert.equal(await project.checker.isReadonlySymbol(readonlyUserProperties[0]), true); - assert.equal(await project.checker.isReadonlySymbol(readonlyUserProperties[1]), true); - }); - - test("variables declared with 'const'", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const a = 1; export let b = 2;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const a = await checker.getSymbolAtPosition("/src/main.ts", "export const ".length); - const b = await checker.getSymbolAtPosition("/src/main.ts", "export const a = 1; export let ".length); - assert.ok(a); - assert.ok(b); - assert.equal(await checker.isReadonlySymbol(a), true); - assert.equal(await checker.isReadonlySymbol(b), false); - }); - - test("get accessors without matching set accessors", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -class Alpha { - private _value!: number; - get value(): number { - return this._value; - } -} -class Bravo { - private _value!: number; - get value(): number { - return this._value; - } - set value(newValue: number) { - this._value = newValue; - } -} -export type A = InstanceType; -export type B = InstanceType; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAliases = sourceFile.statements.filter(isTypeAliasDeclaration); - assert.equal(typeAliases.length, 2); - const aProperties = await project.checker.getPropertiesOfType( - await project.checker.getTypeAtLocation(typeAliases[0]), - ); - assert.equal(await project.checker.isReadonlySymbol(aProperties[1]), true); - const bProperties = await project.checker.getPropertiesOfType( - await project.checker.getTypeAtLocation(typeAliases[1]), - ); - assert.equal(await project.checker.isReadonlySymbol(bProperties[1]), false); - }); -}); - -describe("Checker - getReturnTypeOfSignature", { concurrency }, () => { - test("returns the return type of a function signature", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function add(a: number, b: number): number { return a + b; }`; - const pos = src.indexOf("add("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const returnType = await project.checker.getReturnTypeOfSignature(sigs[0]); - assert.ok(returnType); - assert.ok(returnType.flags & TypeFlags.Number, `Expected number, got flags ${returnType.flags}`); - }); -}); - -describe("Checker - getRestTypeOfSignature", { concurrency }, () => { - test("returns the rest type of a signature with rest parameter", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`; - const pos = src.indexOf("sum("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const restType = await project.checker.getRestTypeOfSignature(sigs[0]); - assert.ok(restType); - assert.ok(restType.flags & TypeFlags.Number, `Expected number type, got flags ${restType.flags}`); - }); -}); - -describe("Checker - getTypePredicateOfSignature", { concurrency }, () => { - test("returns type predicate for 'x is T' guard", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function isString(x: unknown): x is string { return typeof x === "string"; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function isString(x: unknown): x is string { return typeof x === "string"; }`; - const pos = src.indexOf("isString("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.Identifier); - assert.equal(predicate.parameterName, "x"); - assert.equal(predicate.parameterIndex, 0); - assert.ok(predicate.type); - assert.ok(predicate.type.flags & TypeFlags.String); - }); - - test("returns type predicate for 'this is T' guard", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Animal { - isdog(): this is Dog { return this instanceof Dog; } -} -export class Dog extends Animal { - bark() {} -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Animal {\n isdog(): this is Dog { return this instanceof Dog; }\n}\nexport class Dog extends Animal {\n bark() {}\n}\n`; - const pos = src.indexOf("isdog("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.This); - }); - - test("returns type predicate for 'asserts x is T'", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`; - const pos = src.indexOf("assertIsString("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.AssertsIdentifier); - assert.equal(predicate.parameterName, "x"); - assert.equal(predicate.parameterIndex, 0); - assert.ok(predicate.type); - assert.ok(predicate.type.flags & TypeFlags.String); - }); - - test("returns undefined for signature without type predicate", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function add(a: number, b: number): number { return a + b; }`; - const pos = src.indexOf("add("); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); - assert.equal(predicate, undefined); - }); -}); - -describe("Checker - getBaseTypes", { concurrency }, () => { - test("returns base types of a class", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Base { - x: number = 0; -} -export class Derived extends Base { - y: string = ""; -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\n`; - const pos = src.indexOf("Derived"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); - assert.ok(baseTypes.length > 0, "Should have at least one base type"); - const baseSymbol = await baseTypes[0].getSymbol(); - assert.ok(baseSymbol); - assert.equal(baseSymbol.name, "Base"); - }); - - test("returns base types of an interface", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Animal { - name: string; -} -export interface Dog extends Animal { - bark(): void; -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Animal {\n name: string;\n}\nexport interface Dog extends Animal {\n bark(): void;\n}\n`; - const pos = src.indexOf("Dog"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); - assert.ok(baseTypes.length > 0, "Should have at least one base type"); - const baseSymbol = await baseTypes[0].getSymbol(); - assert.ok(baseSymbol); - assert.equal(baseSymbol.name, "Animal"); - }); - - test("does not panic for a type alias to a generic interface instantiation", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Box { - value: T; -} -export type BoxOfString = Box; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(typeAlias); - const type = await project.checker.getTypeAtLocation(typeAlias); - assert.ok(type); - // A generic interface instantiation produces a type reference, not an - // interface type, so it has no base types and yields []. - const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); - assert.deepEqual(baseTypes, []); - }); -}); - -describe("Type - getBaseTypes", { concurrency }, () => { - test("returns base types for a class type and undefined for a non-class/interface", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Base { - x: number = 0; -} -export class Derived extends Base { - y: string = ""; -} -export const n: number = 0; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\nexport const n: number = 0;\n`; - - const derivedSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("Derived")); - assert.ok(derivedSymbol); - const derivedType = await project.checker.getDeclaredTypeOfSymbol(derivedSymbol); - assert.ok(derivedType.isClassOrInterface(), "Derived should be a class/interface type"); - const baseTypes = await derivedType.getBaseTypes(); - assert.ok(baseTypes && baseTypes.length > 0, "class type should have base types"); - const baseSymbol = await baseTypes![0].getSymbol(); - assert.equal(baseSymbol?.name, "Base"); - - // A primitive type is not a class/interface, so getBaseTypes() is undefined. - const numberSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("n:")); - assert.ok(numberSymbol); - const numberType = await project.checker.getTypeOfSymbol(numberSymbol); - assert.ok(numberType); - assert.equal(numberType.isClassOrInterface(), false); - assert.equal(await numberType.getBaseTypes(), undefined); - }); -}); - -describe("Type - isErrorType", { concurrency }, () => { - test("identifies the error type from an unresolvable annotation", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare const good: string; -declare const bad: ThisTypeDoesNotExist; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\ndeclare const good: string;\ndeclare const bad: ThisTypeDoesNotExist;\n`; - - const badSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("bad")); - assert.ok(badSymbol); - const badType = await project.checker.getTypeOfSymbol(badSymbol); - assert.ok(badType); - assert.ok(badType.isErrorType(), "unresolved annotation should yield the error type"); - assert.ok(isErrorType(badType)); - - const goodSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("good")); - assert.ok(goodSymbol); - const goodType = await project.checker.getTypeOfSymbol(goodSymbol); - assert.ok(goodType); - assert.equal(goodType.isErrorType(), false, "string type is not the error type"); - assert.equal(isErrorType(goodType), false); - }); -}); - -describe("Checker - well-known symbols", { concurrency }, () => { - test("isUnknownSymbol identifies the aliased unknown symbol", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const value = 1; -export type Alias = typeof value; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport const value = 1;\nexport type Alias = typeof value;\n`; - - // A real symbol is not the unknown/undefined symbol. - const valueSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value")); - assert.ok(valueSymbol); - assert.equal(await project.checker.isUnknownSymbol(valueSymbol), false); - assert.equal(await project.checker.isUndefinedSymbol(valueSymbol), false); - }); -}); - -describe("Checker - well-known signatures", { concurrency }, () => { - test("isUnknownSignature identifies an unresolvable call", async () => { - const src = ` -const ok = (x: number) => x; -ok(1); -const notCallable = 1; -notCallable(); -`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const calls: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) calls.push(node); - node.forEachChild(visit); - }); - assert.equal(calls.length, 2, "should find two call expressions"); - - // The valid call resolves to a real signature, not the unknown signature. - const okSig = await project.checker.getResolvedSignature(calls[0]); - assert.equal(await project.checker.isUnknownSignature(okSig), false); - - // The call to a non-callable value yields the unknown signature. - const badSig = await project.checker.getResolvedSignature(calls[1]); - assert.equal(await project.checker.isUnknownSignature(badSig), true); - }); -}); - -describe("Symbol - escaped names and tables", { concurrency }, () => { - test("getExports/getMembers return a cached Map keyed by escaped name", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Animal { - name: string = ""; - speak(): void {} -} -export const value = 1; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - - const exports = await moduleSymbol.getExports(); - assert.ok(exports.has(escapeLeadingUnderscores("Animal"))); - assert.ok(exports.get(escapeLeadingUnderscores("value"))); - // Calling again returns the same cached Map instance. - assert.strictEqual(await moduleSymbol.getExports(), exports); - - const animal = exports.get(escapeLeadingUnderscores("Animal"))!; - const members = await animal.getMembers(); - assert.ok(members.get(escapeLeadingUnderscores("name"))); - assert.ok(members.get(escapeLeadingUnderscores("speak"))); - assert.strictEqual(await animal.getMembers(), members); - }); - - test("anonymous type symbol has a __-escaped name, never the \\xFE sentinel", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const obj: { a: number } = { a: 1 }; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport const obj: { a: number } = { a: 1 };\n`; - const objSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("obj")); - assert.ok(objSymbol); - const objType = await project.checker.getTypeOfSymbol(objSymbol); - assert.ok(objType); - const typeSymbol = await objType.getSymbol(); - assert.ok(typeSymbol); - // The anonymous type literal symbol is internally named; over the wire - // it must be the "__type" escaped form, not the raw "\xFE" sentinel. - assert.equal(typeSymbol.escapedName, InternalSymbolName.Type); - assert.ok(!typeSymbol.escapedName.includes("\xFE")); - }); - - test("distinguishes a pattern ambient module name from a matching user-provided export name", async () => { - const maliciousName = '"*.css"__pattern@1234'; - const types = ` -declare module "*.css" with { type: "css" } { - const className: string; - export default className; -} -`; - const source = ` -const x = ""; -export { x as '${maliciousName}' }; -`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, module: "preserve" } }), - "/src/types.d.ts": types, - "/src/main.ts": source, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const typesFile = await project.program.getSourceFile("/src/types.d.ts"); - assert.ok(typesFile); - const moduleDeclaration = typesFile.statements.find(isModuleDeclaration); - assert.ok(moduleDeclaration); - const ambientModule = await project.checker.getSymbolAtLocation(moduleDeclaration.name); - assert.ok(ambientModule); - assert.match(ambientModule.name, /^__"\*\.css"pattern@\d+$/); - assert.equal(ambientModule.escapedName, ambientModule.name); - assert.equal(tryGetAmbientModuleNameFromSymbolName(ambientModule.escapedName), "*.css"); - - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const sourceFileSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(sourceFileSymbol); - const maliciousExport = (await sourceFileSymbol.getExports()).get(escapeLeadingUnderscores(maliciousName)); - assert.ok(maliciousExport); - assert.equal(maliciousExport.name, maliciousName); - assert.equal(maliciousExport.escapedName, maliciousName); - assert.equal(tryGetAmbientModuleNameFromSymbolName(maliciousExport.escapedName), undefined); - }); -}); - -describe("ast - escapeLeadingUnderscores", { concurrency }, () => { - test("round-trips display and escaped names", () => { - assert.equal(escapeLeadingUnderscores("foo"), "foo"); - assert.equal(escapeLeadingUnderscores("_foo"), "_foo"); - assert.equal(escapeLeadingUnderscores("__foo"), "___foo"); - assert.equal(unescapeLeadingUnderscores("foo" as __String), "foo"); - assert.equal(unescapeLeadingUnderscores("__type" as __String), "__type"); - assert.equal(unescapeLeadingUnderscores("___foo" as __String), "__foo"); - }); -}); - -describe("ast - tryGetAmbientModuleNameFromSymbolName", { concurrency }, () => { - test("gets ambient module names from escaped symbol names", () => { - assert.equal(tryGetAmbientModuleNameFromSymbolName('"pkg"' as __String), "pkg"); - assert.equal(tryGetAmbientModuleNameFromSymbolName('__"*.css"pattern@1234' as __String), "*.css"); - assert.equal(tryGetAmbientModuleNameFromSymbolName('"*.css"__pattern@1234' as __String), undefined); - assert.equal(tryGetAmbientModuleNameFromSymbolName('___"*.css"pattern@1234' as __String), undefined); - assert.equal(tryGetAmbientModuleNameFromSymbolName("value" as __String), undefined); - }); -}); - -describe("ast - getJSDocTags", { concurrency }, () => { - test("returns a node's own tags, and inherited @param / @template tags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers. - * @param a the first number - * @param b the second number - * @returns the sum - */ -export function add(a: number, b: number): number { - return a + b; -} - -/** - * @template T the element type - * @param x a value - */ -export function identity(x: T): T { - return x; -} - -/** @deprecated use add */ -export const total = add(1, 2); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const functions = [...sourceFile.statements].filter(isFunctionDeclaration); - const add = functions[0]; - const identity = functions[1]; - assert.ok(add); - assert.ok(identity); - - // A function reports its own JSDoc tags. - assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); - - // A parameter inherits the matching @param tag from its containing - // signature. - const paramA = add.parameters[0]; - const paramATags = getJSDocTags(paramA); - assert.deepEqual(paramATags.map(t => t.tagName.text), ["param"]); - const paramATag = paramATags[0]; - assert.ok(isJSDocParameterTag(paramATag)); - assert.ok(isIdentifier(paramATag.name)); - assert.equal(paramATag.name.text, "a"); - - const paramB = add.parameters[1]; - const paramBTags = getJSDocTags(paramB); - assert.deepEqual(paramBTags.map(t => t.tagName.text), ["param"]); - const paramBTag = paramBTags[0]; - assert.ok(isJSDocParameterTag(paramBTag)); - assert.ok(isIdentifier(paramBTag.name)); - assert.equal(paramBTag.name.text, "b"); - - // A type parameter inherits the matching @template tag. - const typeParam = identity.typeParameters![0]; - assert.deepEqual(getJSDocTags(typeParam).map(t => t.tagName.text), ["template"]); - - // The value parameter of `identity` inherits its @param tag. - const identityParam = identity.parameters[0]; - assert.deepEqual(getJSDocTags(identityParam).map(t => t.tagName.text), ["param"]); - - // A variable declaration walks up its comment-location chain - // (declaration -> declaration list -> statement) to the JSDoc on the - // containing variable statement. - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const declaration = variable.declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["deprecated"]); - }); - - test("a function-expression parameter inherits @param tags from the variable statement", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** - * @param {string} name a name - * @returns {number} the length - */ -var measure = function (name) { - return name.length; -}; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const declaration = variable.declarationList.declarations[0]; - const funcExpr = declaration.initializer; - assert.ok(funcExpr); - - // The variable statement carries the @param and @returns tags. - assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["param", "returns"]); - - // The function expression's parameter walks declaration -> list -> - // statement and inherits the matching @param tag. - const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; - const paramTags = getJSDocTags(param); - assert.deepEqual(paramTags.map(t => t.tagName.text), ["param"]); - const paramTag = paramTags[0]; - assert.ok(isJSDocParameterTag(paramTag)); - assert.ok(isIdentifier(paramTag.name)); - assert.equal(paramTag.name.text, "name"); - }); - - test("a @type cast tag is owned by its parenthesized expression, not the declaration", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** @type {string} */ -const value = "hello"; - -const cast = /** @type {number} */ (someValue); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const statements = [...sourceFile.statements].filter(isVariableStatement); - - // A @type tag directly on a declaration is reported for that declaration. - const valueDecl = statements[0].declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(valueDecl).map(t => t.tagName.text), ["type"]); - - // A @type cast tag attached to a parenthesized expression is owned by - // that expression and is not reported for the enclosing declaration. - const castDecl = statements[1].declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(castDecl).map(t => t.tagName.text), []); - }); -}); - -describe("ast - getJSDocCommentsAndTags", { concurrency }, () => { - test("returns the whole JSDoc comment when the host node owns all of its tags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * The answer to everything. - * @deprecated use theAnswer instead - */ -export const answer = 42; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; - assert.ok(answer); - - // Every tag on `answer`'s JSDoc comment is owned by `answer`, so the whole - // comment is returned as a single entry rather than its individual tags. - const commentsAndTags = getJSDocCommentsAndTags(answer); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - - // Flattening still yields the same tags as getJSDocTags. - assert.deepEqual(getJSDocTags(answer).map(t => t.tagName.text), ["deprecated"]); - }); - - test("returns the whole JSDoc comment when it has a description but no tags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * The answer to everything. - */ -export const answer = 42; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; - assert.ok(answer); - - // With no tags to discard, the JSDoc node (and its description) is - // still returned rather than an empty tag list. - const commentsAndTags = getJSDocCommentsAndTags(answer); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - assert.equal(getTextOfJSDocComment(commentsAndTags[0].comment), "The answer to everything."); - - assert.deepEqual(getJSDocTags(answer), []); - }); - - test("returns individual tags when the host node does not own all of them", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** @type {string} */ -const value = "hello"; - -const cast = /** @type {number} */ (someValue); -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const statements = [...sourceFile.statements].filter(isVariableStatement); - - // The @type cast tag is not owned by `castDecl`, so no tags qualify and - // the JSDoc comment is not returned at all. - const castDecl = statements[1].declarationList.declarations[0]; - assert.deepEqual(getJSDocCommentsAndTags(castDecl), []); - }); - - test("returns an individual JSDocTag for a parameter matched by name", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** - * @param {string} name the name to measure - * @returns {number} the length - */ -var measure = function (name) { - return name.length; -}; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const funcExpr = variable.declarationList.declarations[0].initializer; - assert.ok(funcExpr); - const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; - - // A Parameter host node returns its matching @param tag directly as a - // JSDocTag, not wrapped in the enclosing JSDoc comment. - const commentsAndTags = getJSDocCommentsAndTags(param); - assert.equal(commentsAndTags.length, 1); - const [tag] = commentsAndTags; - assert.ok(isJSDocParameterTag(tag)); - assert.ok(isIdentifier(tag.name)); - assert.equal(tag.name.text, "name"); - }); - - test("returns the whole JSDoc comment when the host node owns multiple tags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers. - * @param a the first number - * @param b the second number - * @returns the sum - */ -export function add(a: number, b: number): number { - return a + b; -} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const add = [...sourceFile.statements].find(isFunctionDeclaration); - assert.ok(add); - - // All three tags on `add`'s JSDoc comment are owned by `add`, so the - // whole comment is returned as a single entry rather than three tags. - const commentsAndTags = getJSDocCommentsAndTags(add); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - - // Flattening still yields all three tags, in order, via getJSDocTags. - assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); - }); -}); - -describe("Checker - getPropertiesOfType", { concurrency }, () => { - test("returns properties of an object type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Person { - name: string; - age: number; - greet(): void; -} -export declare const p: Person; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Person {\n name: string;\n age: number;\n greet(): void;\n}\nexport declare const p: Person;\n`; - const pos = src.indexOf("p: Person"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const props = await project.checker.getPropertiesOfType(type); - assert.ok(props.length >= 3, `Expected at least 3 properties, got ${props.length}`); - const names = props.map(p => p.name); - assert.ok(names.includes("name"), "should have 'name' property"); - assert.ok(names.includes("age"), "should have 'age' property"); - assert.ok(names.includes("greet"), "should have 'greet' property"); - }); -}); - -describe("Checker - getIndexInfosOfType", { concurrency }, () => { - test("returns index signatures of an indexed type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface StringMap { - [key: string]: number; -} -export declare const m: StringMap; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface StringMap {\n [key: string]: number;\n}\nexport declare const m: StringMap;\n`; - const pos = src.indexOf("m: StringMap"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const indexInfos = await project.checker.getIndexInfosOfType(type); - assert.ok(indexInfos.length > 0, "Should have at least one index info"); - const info = indexInfos[0]; - assert.ok(info.keyType); - assert.ok(info.keyType.flags & TypeFlags.String, `Expected string key type, got flags ${info.keyType.flags}`); - assert.ok(info.valueType); - assert.ok(info.valueType.flags & TypeFlags.Number, `Expected number value type, got flags ${info.valueType.flags}`); - assert.equal(info.isReadonly, false); - }); - - test("readonly index signature reports isReadonly true", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface ReadonlyMap { - readonly [key: string]: number; -} -export declare const m: ReadonlyMap; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface ReadonlyMap {\n readonly [key: string]: number;\n}\nexport declare const m: ReadonlyMap;\n`; - const pos = src.indexOf("m: ReadonlyMap"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const indexInfos = await project.checker.getIndexInfosOfType(type); - assert.ok(indexInfos.length > 0); - assert.equal(indexInfos[0].isReadonly, true); - }); -}); - -describe("Checker - TypeScript API parity", { concurrency }, () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Box { - value: T; - chain(): this; - [key: string]: T | ((...args: never[]) => unknown); - [index: number]: T; -} - -/** Returns the input value. - * @deprecated Use identity instead. - */ -export function legacy(value: T): Promise { - return Promise.resolve(value); -} - -declare function consume(value: string | number): void; -consume(1); - -export type Exported = number; -`, - }; - - test("exposes interface this types and checker operations", async () => { - await using api = spawnAPI(files); - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const boxSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Box")); - assert.ok(boxSymbol); - const boxType = await project.checker.getDeclaredTypeOfSymbol(boxSymbol) as InterfaceType; - assert.ok(boxType.isClassOrInterface()); - const thisType = await boxType.getThisType(); - assert.ok(thisType); - assert.equal(thisType.isThisType, true); - assert.equal(await project.checker.typeToString(thisType), "this"); - - const stringInfo = await project.checker.getIndexInfoOfType(boxType, IndexKind.String); - assert.ok(stringInfo); - assert.ok(stringInfo.keyType.flags & TypeFlags.String); - const numberInfo = await project.checker.getIndexInfoOfType(boxType, IndexKind.Number); - assert.ok(numberInfo); - assert.ok(numberInfo.keyType.flags & TypeFlags.Number); - assert.strictEqual(await project.checker.getIndexTypeOfType(boxType, IndexKind.String), stringInfo.valueType); - assert.strictEqual(await project.checker.getIndexTypeOfType(boxType, IndexKind.Number), numberInfo.valueType); - const valueType = await project.checker.getTypeOfPropertyOfType(boxType, "value"); - assert.ok(valueType); - assert.equal(await project.checker.typeToString(valueType), "T"); - assert.equal(await project.checker.getTypeOfPropertyOfType(boxType, "missing"), undefined); - - const legacySymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("legacy")); - assert.ok(legacySymbol); - const legacyType = await project.checker.getTypeOfSymbol(legacySymbol); - const signature = (await project.checker.getSignaturesOfType(legacyType, SignatureKind.Call))[0]; - assert.ok(signature); - const awaitedType = await project.checker.getAwaitedType(await signature.getReturnType()); - assert.ok(awaitedType); - assert.equal(await project.checker.typeToString(awaitedType), "Awaited"); - - const exportedSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Exported =")); - assert.ok(exportedSymbol); - const localSymbol = (await project.checker.getSymbolsInScope(sourceFile, SymbolFlags.TypeAlias)).find(symbol => symbol.name === "Exported"); - assert.ok(localSymbol); - assert.notEqual(localSymbol.id, exportedSymbol.id); - assert.strictEqual(await project.checker.getExportSymbolOfSymbol(localSymbol), exportedSymbol); - - let call: import("@typescript/typescript/unstable/ast").CallExpression | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node) && sourceFile.text.slice(node.expression.pos, node.expression.end).trim() === "consume") { - call = node; - } - node.forEachChild(visit); - }); - assert.ok(call); - const contextualType = await project.checker.getContextualTypeForArgumentAtIndex(call, 0); - assert.ok(contextualType); - assert.equal(await project.checker.typeToString(contextualType), "string | number"); - }); - - test("uses Strada-compatible JsxEmit values", () => { - assert.equal(JsxEmit.React, 2); - assert.equal(JsxEmit.ReactNative, 3); - }); -}); - -describe("Checker - getConstraintOfTypeParameter", { concurrency }, () => { - test("returns constraint of a type parameter", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function identity(x: T): T { return x; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function identity(x: T): T { return x; }`; - const pos = src.indexOf("identity<"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - assert.ok(sigs[0].typeParameters && sigs[0].typeParameters.length > 0, "Should have type parameters"); - const typeParams = await sigs[0].getTypeParameters(); - const constraint = await project.checker.getConstraintOfTypeParameter(typeParams[0]); - assert.ok(constraint); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - }); -}); - -describe("Checker - TypeParameter getters", { concurrency }, () => { - test("getConstraint() and getDefault() return the constraint and default types", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function f(x: T): T { return x; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function f(x: T): T { return x; }`; - const pos = src.indexOf("f<"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = await sigs[0].getTypeParameters(); - assert.ok(typeParams.length > 0, "Should have type parameters"); - const typeParam = typeParams[0] as TypeParameter; - - const constraint = await typeParam.getConstraint(); - assert.ok(constraint); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - - const defaultType = await typeParam.getDefault(); - assert.ok(defaultType); - assert.ok(defaultType.flags & TypeFlags.StringLiteral, `Expected string literal default, got flags ${defaultType.flags}`); - }); - - test("getConstraint() and getDefault() return undefined when there is none", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function f(x: T): T { return x; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function f(x: T): T { return x; }`; - const pos = src.indexOf("f<"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = await sigs[0].getTypeParameters(); - assert.ok(typeParams.length > 0, "Should have type parameters"); - const typeParam = typeParams[0] as TypeParameter; - - assert.equal(await typeParam.getConstraint(), undefined); - assert.equal(await typeParam.getDefault(), undefined); - }); -}); - -describe("Checker - getTypeArguments", { concurrency }, () => { - test("returns type arguments of a generic instantiation", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const arr: Array = [1, 2, 3];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const arr: Array = [1, 2, 3];`; - const pos = src.indexOf("arr:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeArgs = await project.checker.getTypeArguments(type as TypeReference); - assert.ok(typeArgs.length > 0, "Should have type arguments"); - assert.ok(typeArgs[0].flags & TypeFlags.Number, `Expected number type argument, got flags ${typeArgs[0].flags}`); - }); - - test("a wrongly-typed call throws on the client without taking down the server", async () => { - const src = `export const s: string = ""; export const arr: Array = [1];`; - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // `string` is not a type reference. When getTypeArguments is reached - // with one, the server panics, but the per-request panic recovery - // converts that into an error response rather than crashing the process. - const sSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); - assert.ok(sSymbol); - const sType = await project.checker.getTypeOfSymbol(sSymbol); - assert.ok(sType); - await assert.rejects(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); // @sync: assert.throws(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); - - // The server survived: a subsequent valid request still succeeds. - const arrSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("arr:")); - assert.ok(arrSymbol); - const arrType = await project.checker.getTypeOfSymbol(arrSymbol); - assert.ok(arrType); - const typeArgs = await project.checker.getTypeArguments(arrType as TypeReference); - assert.ok(typeArgs.length > 0, "Server should still serve valid requests"); - }); -}); - -describe("Checker - getBaseConstraintOfType", { concurrency }, () => { - test("returns the base constraint of a type parameter", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function identity(x: T): T { return x; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function identity(x: T): T { return x; }`; - const pos = src.indexOf("identity<"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = await sigs[0].getTypeParameters(); - const constraint = await project.checker.getBaseConstraintOfType(typeParams[0]); - assert.ok(constraint, "Should resolve a base constraint"); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - }); - - test("returns undefined for a non-instantiable type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x: number = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `export const x: number = 1;`.indexOf("x:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const constraint = await project.checker.getBaseConstraintOfType(type); - assert.equal(constraint, undefined); - }); -}); - -describe("Checker - getPropertyOfType", { concurrency }, () => { - test("returns a named property symbol of a type", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Person { - name: string; - age: number; -} -export declare const p: Person; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Person {\n name: string;\n age: number;\n}\nexport declare const p: Person;\n`; - const pos = src.indexOf("p: Person"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const nameProp = await project.checker.getPropertyOfType(type, "name"); - assert.ok(nameProp, "Should find 'name' property"); - assert.equal(nameProp.name, "name"); - const missing = await project.checker.getPropertyOfType(type, "doesNotExist"); - assert.equal(missing, undefined); - }); -}); - -describe("Checker - getConstantValue", { concurrency }, () => { - test("returns numeric value of an enum member", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum E { A = 1, B = 2 }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let memberB: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text.startsWith("B")) memberB = node; - } - node.forEachChild(visit); - }); - assert.ok(memberB, "Should find enum member B"); - const value = await project.checker.getConstantValue(memberB); - assert.equal(value, 2); - }); - - test("returns infinite numeric enum values without changing equivalent strings", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum E { - Positive = 1e999, - Negative = -1e999, - PositiveNaN = NaN, - NegativeNaN = -NaN, - PositiveString = "+Infinity", - NegativeString = "-Infinity", - NaNString = "NaN", - }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const members: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) members.push(node); - node.forEachChild(visit); - }); - assert.equal(members.length, 7); - - assert.equal(await project.checker.getConstantValue(members[0]), Infinity); - assert.equal(await project.checker.getConstantValue(members[1]), -Infinity); - assert.equal(await project.checker.getConstantValue(members[2]), NaN); - assert.equal(await project.checker.getConstantValue(members[3]), NaN); - assert.equal(await project.checker.getConstantValue(members[4]), "+Infinity"); - assert.equal(await project.checker.getConstantValue(members[5]), "-Infinity"); - assert.equal(await project.checker.getConstantValue(members[6]), "NaN"); - }); - - test("returns string value of a string-initialized enum member", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum Color { Red = "red" }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let member: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) member = node; - node.forEachChild(visit); - }); - assert.ok(member); - const value = await project.checker.getConstantValue(member); - assert.equal(value, "red"); - }); -}); - -describe("Checker - getSignatureFromDeclaration", { concurrency }, () => { - test("returns the signature of a function declaration", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let funcDecl: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) funcDecl = node; - node.forEachChild(visit); - }); - assert.ok(funcDecl, "Should find the function declaration"); - const sig = await project.checker.getSignatureFromDeclaration(funcDecl); - assert.ok(sig, "Should resolve a signature"); - assert.equal(sig.parameters.length, 2); - const returnType = await project.checker.getReturnTypeOfSignature(sig); - assert.ok(returnType); - assert.ok(returnType.flags & TypeFlags.Number); - }); -}); - -describe("Checker - getExportSpecifierLocalTargetSymbol", { concurrency }, () => { - test("resolves the local target of an export specifier", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const value = 42; -export { value as renamed }; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let exportSpecifier: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ExportSpecifier) exportSpecifier = node; - node.forEachChild(visit); - }); - assert.ok(exportSpecifier, "Should find the export specifier"); - const target = await project.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); - assert.ok(target, "Should resolve a local target symbol"); - assert.equal(target.name, "value"); - }); -}); - -describe("Checker - getAliasedSymbol", { concurrency }, () => { - test("resolves an import alias to its target symbol", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/foo.ts": `export const foo = 42;`, - "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `import { foo } from "./foo";`.indexOf("foo }"); - const aliasSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(aliasSymbol); - assert.ok(aliasSymbol.flags & SymbolFlags.Alias, "Import binding should be an alias"); - const aliased = await project.checker.getAliasedSymbol(aliasSymbol); - assert.ok(aliased, "Should resolve the aliased symbol"); - assert.equal(aliased.name, "foo"); - assert.ok(!(aliased.flags & SymbolFlags.Alias), "Target should not be an alias"); - }); -}); - -describe("Checker - getFullyQualifiedName", { concurrency }, () => { - test("returns module-qualified names for exported symbols and dotted names for members", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": ` -export namespace Outer { - export class Inner {} -} -export class Standalone {} -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const exports = await project.checker.getExportsOfModule(moduleSymbol); - const standalone = exports.find(e => e.name === "Standalone"); - assert.ok(standalone); - assert.equal(await project.checker.getFullyQualifiedName(standalone), `"/src/index".Standalone`); - const outer = exports.find(e => e.name === "Outer"); - assert.ok(outer); - const inner = (await outer.getExports()).get("Inner" as __String); - assert.ok(inner); - assert.equal(await project.checker.getFullyQualifiedName(inner), `"/src/index".Outer.Inner`); - }); -}); - -describe("Checker - getExportsOfModule", { concurrency }, () => { - test("returns all exports including re-exports via 'export *'", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/inner.ts": `export const innerValue = 1;`, - "/src/index.ts": ` -export const direct = 1; -export * from "./inner"; -`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol, "Source file should have a module symbol"); - const exports = await project.checker.getExportsOfModule(moduleSymbol); - const names = exports.map(e => e.name); - assert.ok(names.includes("direct"), "should include directly-declared export"); - assert.ok(names.includes("innerValue"), "should include 'export *' re-export"); - }); -}); - -describe("Checker - getSymbolsInScope", { concurrency }, () => { - const scopeFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const outerValue = 1; -interface OuterType { x: number; } -function f() { - const innerValue = 2; - return innerValue; -} -`, - }; - - test("returns symbols visible at a position", async () => { - await using api = spawnAPI(scopeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); - const symbols = await project.checker.getSymbolsInScope( - { document: "/src/main.ts", position: pos }, - SymbolFlags.Value, - ); - const names = symbols.map(s => s.name); - assert.ok(names.includes("innerValue"), "should include local variable"); - assert.ok(names.includes("outerValue"), "should include outer variable"); - assert.ok(names.includes("f"), "should include enclosing function"); - assert.ok(!names.includes("OuterType"), "should not include type-only meanings"); - }); - - test("returns type symbols when asked for type meaning at a node", async () => { - await using api = spawnAPI(scopeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const symbols = await project.checker.getSymbolsInScope(sourceFile, SymbolFlags.Type); - const names = symbols.map(s => s.name); - assert.ok(names.includes("OuterType"), "should include interface declared in file"); - assert.ok(names.includes("Array"), "should include global type symbols"); - }); - - // Regression test: `<<` binds tighter than `-` in Go but looser in JS, so SymbolFlagsAll's - // `(1<<30) - 1` needs those parens or the generated enum silently becomes `1 << 29`. - test("SymbolFlags.All includes both value and type meanings", async () => { - await using api = spawnAPI(scopeFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); - const symbols = await project.checker.getSymbolsInScope( - { document: "/src/main.ts", position: pos }, - SymbolFlags.All, - ); - const names = symbols.map(s => s.name); - assert.ok(names.includes("innerValue"), "should include local value symbol"); - assert.ok(names.includes("OuterType"), "should include type symbol declared in file"); - }); -}); - -describe("Symbol - getDocumentationComment and getJsDocTags", { concurrency }, () => { - const docFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers together. - * @param a the first number - * @returns the sum - */ -export function add(a: number, b: number): number { return a + b; } -`, - }; - - test("getDocumentationComment returns the leading comment text", async () => { - await using api = spawnAPI(docFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = docFiles["/src/main.ts"].indexOf("add(a"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const doc = await symbol.getDocumentationComment(project.checker); - assert.ok(doc.includes("Adds two numbers together"), `Expected documentation, got: ${doc}`); - assert.ok(!doc.includes("@param"), "Documentation comment should not include tags"); - }); - - test("getJsDocTags returns structured tag name/text pairs", async () => { - await using api = spawnAPI(docFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = docFiles["/src/main.ts"].indexOf("add(a"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const tags = await symbol.getJsDocTags(project.checker); - const param = tags.find(t => t.name === "param"); - assert.ok(param, `Expected a @param tag, got: ${JSON.stringify(tags)}`); - assert.equal(param.text, "a the first number"); - const returns = tags.find(t => t.name === "returns"); - assert.ok(returns, `Expected a @returns tag, got: ${JSON.stringify(tags)}`); - assert.equal(returns.text, "the sum"); - }); -}); - -describe("TypeParameter - isThisType", { concurrency }, () => { - test("isThisType is true for the polymorphic 'this' type in a class method", async () => { - const src = `\nexport class Builder {\n setName(name: string): this { return this; }\n}\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // ": this {" — offset 2 past ': ' lands on 't' in the return-type 'this' - const pos = src.indexOf(": this {") + 2; - const type = await project.checker.getTypeAtPosition("/src/main.ts", pos); - assert.ok(type, "Expected a type at the 'this' position"); - assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); - const typeParam = type as TypeParameter; - assert.equal(typeParam.isThisType, true); - }); - - test("isThisType is absent for a regular generic type parameter", async () => { - const src = `\nexport function identity(x: T): T { return x; }\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Point to 'T' in the type parameter declaration '' — getTypeAtPosition - // on a type annotation reference doesn't resolve to TypeParameter, but - // the declaration position does. - const pos = src.indexOf("") + 1; - const type = await project.checker.getTypeAtPosition("/src/main.ts", pos); - assert.ok(type, "Expected a type at the 'T' position"); - assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); - const typeParam = type as TypeParameter; - assert.ok(!typeParam.isThisType, "Expected isThisType to be absent/false for a regular type parameter"); - }); -}); - -describe("Type - getAliasTypeArguments", { concurrency }, () => { - test("returns the type arguments of a single-param generic type alias", async () => { - const src = `\ntype Box = { value: T };\nexport const x: Box = { value: "hi" };\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("x:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = await type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 1, "Expected 1 alias type argument"); - assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected string, got flags ${aliasArgs[0].flags}`); - }); - - test("returns multiple type arguments for a multi-param generic type alias", async () => { - const src = `\ntype Pair = [A, B];\nexport const p: Pair = ["hello", 42];\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("p:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = await type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 2, "Expected 2 alias type arguments"); - assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected first arg to be string, got flags ${aliasArgs[0].flags}`); - assert.ok(aliasArgs[1].flags & TypeFlags.Number, `Expected second arg to be number, got flags ${aliasArgs[1].flags}`); - }); - - test("returns empty array for a non-alias generic type", async () => { - const src = `\nexport const arr: Array = ["hello"];\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("arr:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = await type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 0, "Expected no alias type arguments for a direct generic reference"); - }); -}); - -describe("Type - getAliasSymbol", { concurrency }, () => { - test("returns the symbol for a non-generic type alias", async () => { - // Object-type aliases preserve aliasSymbol; primitive aliases (type Foo = string) do not. - const src = `\ntype Point = { x: number; y: number };\nexport const p: Point = { x: 1, y: 2 };\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("p:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = await type.getAliasSymbol(); - assert.ok(aliasSymbol, "Expected alias symbol to exist"); - assert.equal(aliasSymbol.name, "Point"); - }); - - test("returns the symbol for a generic type alias", async () => { - const src = `\ntype Container = { item: T };\nexport const c: Container = { item: 42 };\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("c:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = await type.getAliasSymbol(); - assert.ok(aliasSymbol, "Expected alias symbol for generic alias"); - assert.equal(aliasSymbol.name, "Container"); - }); - - test("returns undefined for a non-alias type", async () => { - const src = `\nexport const str: string = "test";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("str:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = await type.getAliasSymbol(); - assert.equal(aliasSymbol, undefined, "Expected no alias symbol for primitive type"); - }); -}); - -describe("IntrinsicType - intrinsicName", { concurrency }, () => { - test("intrinsicName matches the primitive type name", async () => { - const src = `\nexport const x: string = "hello";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = await project.checker.getStringType(); - assert.equal((stringType as IntrinsicType).intrinsicName, "string"); - const anyType = await project.checker.getAnyType(); - assert.equal((anyType as IntrinsicType).intrinsicName, "any"); - const neverType = await project.checker.getNeverType(); - assert.equal((neverType as IntrinsicType).intrinsicName, "never"); - const pos = src.indexOf("x:"); - const sym = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(sym); - const litType = await project.checker.getTypeOfSymbol(sym); - assert.ok(litType); - assert.ok(litType.flags & TypeFlags.Intrinsic); - assert.equal((litType as IntrinsicType).intrinsicName, "string"); - }); -}); - -describe("FreshableType - getFreshType and getRegularType", { concurrency }, () => { - test("LiteralType.value is empty string for the empty-string literal type", async () => { - const src = `\nexport const empty: "" = "";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("empty:")); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); - const literal = type as LiteralType; - assert.equal(literal.value, "", "value should be empty string, not undefined"); - }); - - test("LiteralType.value is accessible via the FreshableType hierarchy", async () => { - const src = `\nexport const greeting: "hello" = "hello";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); - const literal = type as LiteralType; - assert.equal(literal.value, "hello"); - }); - - test("BigIntLiteralType.value is a bigint (positive and negative)", async () => { - const src = `\nexport const pos = 123n;\nexport const neg = -123n;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const posSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); - assert.ok(posSymbol); - const posType = await project.checker.getTypeOfSymbol(posSymbol); - assert.ok(posType); - assert.ok(posType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); - const posLiteral = posType as BigIntLiteralType; - assert.equal(typeof posLiteral.value, "bigint"); - assert.equal(posLiteral.value, 123n); - - const negSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); - assert.ok(negSymbol); - const negType = await project.checker.getTypeOfSymbol(negSymbol); - assert.ok(negType); - assert.ok(negType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); - const negLiteral = negType as BigIntLiteralType; - assert.equal(typeof negLiteral.value, "bigint"); - assert.equal(negLiteral.value, -123n); - }); - - test("NumberLiteralType.value is infinity (positive and negative)", async () => { - const src = `\nexport const pos = 1e999;\nexport const neg = -1e999;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const posSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); - assert.ok(posSymbol); - const posType = await project.checker.getTypeOfSymbol(posSymbol); - assert.ok(posType); - assert.ok(posType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); - const posLiteral = posType as NumberLiteralType; - assert.equal(typeof posLiteral.value, "number"); - assert.equal(posLiteral.value, Infinity); - - const negSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); - assert.ok(negSymbol); - const negType = await project.checker.getTypeOfSymbol(negSymbol); - assert.ok(negType); - assert.ok(negType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); - const negLiteral = negType as NumberLiteralType; - assert.equal(typeof negLiteral.value, "number"); - assert.equal(negLiteral.value, -Infinity); - }); - - test("getFreshType() returns a fresh twin with matching value", async () => { - const src = `\nexport const greeting: "hello" = "hello";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); - const fresh = await (type as FreshableType).getFreshType(); - assert.ok(fresh, "Expected getFreshType() to return non-undefined for a literal type"); - assert.ok(fresh.flags & TypeFlags.StringLiteral, "Fresh type should be a StringLiteral"); - assert.equal((fresh as LiteralType).value, "hello", "Fresh type should carry the same value"); - assert.notEqual(fresh.id, type.id, "Fresh type should not be the original type"); - const freshFresh = await fresh.getFreshType(); - assert.ok(freshFresh, "Expected getFreshType() to return non-undefined for a fresh type"); - assert.equal(freshFresh.id, fresh.id, "Fresh type of a fresh type should be the fresh type"); - }); - - test("getRegularType() on a fresh literal returns the regular twin", async () => { - // The initial type response from getTypeOfSymbol does not always include the - // regularType handle, so getRegularType() is tested via the fresh twin which - // always includes its regularType in its own response. - const src = `\nexport const greeting: "hello" = "hello";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); - const fresh = await (type as FreshableType).getFreshType(); - assert.ok(fresh, "Need fresh type for this test"); - assert.ok(fresh.flags & TypeFlags.Freshable, "Fresh type should be a freshable type"); - const regular = await fresh.getRegularType(); - assert.ok(regular, "Expected getRegularType() on the fresh twin to return non-undefined"); - assert.ok(regular.flags & TypeFlags.StringLiteral, "Regular type should be a StringLiteral"); - assert.equal((regular as LiteralType).value, "hello", "Regular type should carry the same value"); - assert.equal(regular.id, type.id, "Regular type should be the original type"); - }); - - test("getFreshType() and getRegularType() work for computed enum types (TypeFlags.Enum)", async () => { - // getTypeOfSymbol on an ambient enum member returns the FRESH computed enum type. - // For fresh types: getFreshType() returns self, getRegularType() returns the regular twin. - const src = `\ndeclare enum Status { Pending }\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("Pending"); - const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = await project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Enum, `Expected TypeFlags.Enum, got ${type.flags}`); - assert.ok(type.flags & TypeFlags.Freshable, "Enum type should be freshable"); - // The returned type IS the fresh type: getFreshType() returns itself - const fresh = await (type as FreshableType).getFreshType(); - assert.ok(fresh, "Expected getFreshType() to return non-undefined"); - assert.equal(fresh.id, type.id, "getFreshType() on a fresh enum type returns itself"); - // getRegularType() returns the regular twin (a different type) - const regular = await (type as FreshableType).getRegularType(); - assert.ok(regular, "Expected getRegularType() to return non-undefined"); - assert.ok(regular.flags & TypeFlags.Enum, "Regular enum type should also have TypeFlags.Enum"); - assert.notEqual(regular.id, type.id, "Regular type should be distinct from the fresh type"); - // Round-trip: regular → getFreshType() → back to the original fresh type - const backToFresh = await (regular as FreshableType).getFreshType(); - assert.ok(backToFresh); - assert.equal(backToFresh.id, type.id, "Round-trip through regular/fresh returns the original type"); - }); -}); - -describe("Checker - isContextSensitive", { concurrency }, () => { - test("arrow function with no type annotation is context sensitive", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const fn = (x) => x;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - // Find the arrow function node - let arrowFn: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ArrowFunction) { - arrowFn = node; - } - node.forEachChild(visit); - }); - assert.ok(arrowFn, "Should find an arrow function"); - const result = await project.checker.isContextSensitive(arrowFn); - assert.equal(result, true); - }); -}); - -describe("Checker - isTypeAssignableTo", { concurrency }, () => { - test("returns true when source is assignable to target", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = await project.checker.getStringType(); - const anyType = await project.checker.getAnyType(); - const neverType = await project.checker.getNeverType(); - assert.ok(await project.checker.isTypeAssignableTo(stringType, stringType), "string assignable to string"); - assert.ok(await project.checker.isTypeAssignableTo(stringType, anyType), "string assignable to any"); - assert.ok(await project.checker.isTypeAssignableTo(neverType, stringType), "never assignable to string (bottom type)"); - }); - - test("returns false when source is not assignable to target", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = await project.checker.getStringType(); - const numberType = await project.checker.getNumberType(); - assert.ok(!await project.checker.isTypeAssignableTo(numberType, stringType), "number not assignable to string"); - assert.ok(!await project.checker.isTypeAssignableTo(stringType, numberType), "string not assignable to number"); - }); - - test("a string literal type is assignable to string but not number", async () => { - const src = `\nexport const x: "hello" = "hello";\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("x:"); - const sym = await project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(sym); - const litType = await project.checker.getTypeOfSymbol(sym); - assert.ok(litType); - assert.ok(litType.flags & TypeFlags.StringLiteral); - const stringType = await project.checker.getStringType(); - const numberType = await project.checker.getNumberType(); - assert.ok(await project.checker.isTypeAssignableTo(litType, stringType)); - assert.ok(!await project.checker.isTypeAssignableTo(litType, numberType)); - }); -}); - -describe("Printer", { concurrency }, () => { - const emitterFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const x = 42; -export function greet(name: string): string { return name; } -export type Pair = [string, number]; -export const obj = { m: 1, s: "hi", b: true }; -`, - }; - - test("printNode with factory-created keyword type", async () => { - await using api = spawnAPI(emitterFiles); - - const node = createKeywordTypeNode(SyntaxKind.StringKeyword); - const text = await api.printer.printNode(node); - assert.strictEqual(text, "string"); - }); - - test("printFile", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sourceFile = await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"); - assert(sourceFile); - const text = await api.printer.printFile(sourceFile); - assert.strictEqual( - text, - `export const x = 42; -export function greet(name: string): string { return name; } -export type Pair = [ - string, - number -]; -export const obj = { m: 1, s: "hi", b: true }; -`, - ); - }); - - test("printFile preserves JSON source file semantics", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { resolveJsonModule: true }, - files: ["/src/data.json"], - }), - "/src/data.json": `{"x": 1}`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const sourceFile = await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/data.json"); - assert(sourceFile); - assert.strictEqual(await api.printer.printFile(sourceFile), `{ "x": 1 }\n`); - }); - - test("printNode with factory-created union type", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createUnionTypeNode([ - createKeywordTypeNode(SyntaxKind.StringKeyword), - createKeywordTypeNode(SyntaxKind.NumberKeyword), - ]); - const text = await api.printer.printNode(node); - assert.strictEqual(text, "string | number"); - }); - - test("printNode with factory-created function type", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const param = createParameterDeclaration( - undefined, - undefined, - createIdentifier("x"), - undefined, - createKeywordTypeNode(SyntaxKind.StringKeyword), - undefined, - ); - const node = createFunctionTypeNode( - undefined, - [param], - createKeywordTypeNode(SyntaxKind.NumberKeyword), - ); - const text = await api.printer.printNode(node); - assert.strictEqual(text, "(x: string) => number"); - }); - - test("printNode with factory-created type reference", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createTypeReferenceNode(createIdentifier("Array"), [ - createKeywordTypeNode(SyntaxKind.StringKeyword), - ]); - const text = await api.printer.printNode(node); - assert.strictEqual(text, "Array"); - }); - - test("printNode with factory-created array type", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createArrayTypeNode(createKeywordTypeNode(SyntaxKind.NumberKeyword)); - const text = await api.printer.printNode(node); - assert.strictEqual(text, "number[]"); - }); - - test("typeToTypeNode + printNode round-trip", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - - const greetPos = src.indexOf("greet("); - const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = await checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeNode = await checker.typeToTypeNode(type); - assert.ok(typeNode); - const text = await api.printer.printNode(typeNode); - assert.ok(text); - assert.strictEqual(text, "(name: string) => string"); - }); - - test("visitEachChild on typeToTypeNode result with keyword types", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - const objPos = src.indexOf("obj"); - const symbol = await checker.getSymbolAtPosition("/src/main.ts", objPos); - assert.ok(symbol, "should find symbol for obj"); - const type = await checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeNode = await checker.typeToTypeNode(type); - assert.ok(typeNode, "typeToTypeNode should return a type node"); - - // Recursively visit to reach PropertySignature.type where isTypeNode is checked. - const visited = (function visit(node: Node): Node { - return visitEachChild(node, visit); - })(typeNode); - assert.ok(visited, "visitEachChild should not throw"); - - const kinds = [ - SyntaxKind.NumberKeyword, - SyntaxKind.StringKeyword, - SyntaxKind.BooleanKeyword, - SyntaxKind.AnyKeyword, - SyntaxKind.VoidKeyword, - SyntaxKind.UndefinedKeyword, - SyntaxKind.NeverKeyword, - SyntaxKind.UnknownKeyword, - SyntaxKind.BigIntKeyword, - SyntaxKind.ObjectKeyword, - SyntaxKind.SymbolKeyword, - SyntaxKind.IntrinsicKeyword, - SyntaxKind.ExpressionWithTypeArguments, - SyntaxKind.JSDocAllType, - SyntaxKind.JSDocNullableType, - SyntaxKind.JSDocNonNullableType, - SyntaxKind.JSDocOptionalType, - SyntaxKind.JSDocVariadicType, - SyntaxKind.JSDocTypeExpression, - SyntaxKind.JSDocTypeLiteral, - SyntaxKind.JSDocSignature, - ]; - for (const kind of kinds) { - assert.ok(isTypeNode({ kind } as any), `isTypeNode should accept ${SyntaxKind[kind]}`); - } - }); - - test("typeToString", async () => { - await using api = spawnAPI(emitterFiles); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - - const greetPos = src.indexOf("greet("); - const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = await checker.getTypeOfSymbol(symbol); - assert.ok(type); - const text = await checker.typeToString(type); - assert.strictEqual(text, "(name: string) => string"); - }); - - test("typeToString with TypeFormatFlags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function greet(name: string): string[] { return [name]; }`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const greetPos = "export function greet".indexOf("greet"); - const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = await checker.getTypeOfSymbol(symbol); - assert.ok(type); - const text = await checker.typeToString(type, undefined, TypeFormatFlags.WriteArrayAsGenericType); - assert.strictEqual(text, "(name: string) => Array"); - }); - - test("printNode with terminateUnterminatedLiterals option", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `const foo = /asdfasf;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the regex literal node - let regexNode: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.RegularExpressionLiteral) { - regexNode = node; - return; - } - node.forEachChild(visit); - }); - assert.ok(regexNode, "Should find a regex literal"); - - // Without the option, regex is printed as-is - const textWithout = await api.printer.printNode(regexNode); - assert.strictEqual(textWithout, "/asdfasf"); - - // With the option, the closing slash is added - const textWith = await api.printer.printNode(regexNode, { terminateUnterminatedLiterals: true }); - assert.strictEqual(textWith, "/asdfasf/"); - }); -}); - -describe("Program - selected file emit", { concurrency }, () => { - const files = { - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - declarationMap: true, - emitDeclarationOnly: true, - noEmit: true, - noEmitOnError: true, - sourceMap: true, - }, - }), - "/src/a.ts": `export const a: string = 1;`, - "/src/b.ts": `export const b = 2;`, - }; - - test("getJavaScriptEmit forces JavaScript and source maps", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.getJavaScriptEmit(["/src/a.ts", "/src/b.ts"]); - assert.equal(result.emitSkipped, false); - assert.deepEqual([...result.outputFiles.keys()], [ - "/src/a.js", - "/src/a.js.map", - "/src/b.js", - "/src/b.js.map", - ]); - const outputFileName = toRootedFilePath("/src/a.js", undefined); - assert.equal(result.outputFiles.get(outputFileName)?.sourceFileName, "/src/a.ts"); - assert.match(result.outputFiles.get(outputFileName)!.text, /export const a = 1/); - assert.equal(fs.readFile(toRootedFilePath("/src/a.js", undefined)), serverFS.useOS); - }); - - test("getDeclarationEmit forces declarations and declaration maps", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.getDeclarationEmit(["/src/a.ts", "/src/b.ts"]); - assert.equal(result.emitSkipped, false); - assert.deepEqual([...result.outputFiles.keys()], [ - "/src/a.d.ts", - "/src/a.d.ts.map", - "/src/b.d.ts", - "/src/b.d.ts.map", - ]); - assert.equal(result.outputFiles.get(toRootedFilePath("/src/a.d.ts", undefined))?.sourceFileName, "/src/a.ts"); - assert.equal(fs.readFile(toRootedFilePath("/src/a.d.ts", undefined)), serverFS.useOS); - }); - - test("selected file emit accepts empty arrays", async () => { - await using api = spawnAPI({ ...files }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual((await project.program.getJavaScriptEmit([])).outputFiles, new Map()); - assert.deepEqual((await project.program.getDeclarationEmit([])).outputFiles, new Map()); - }); -}); - -describe("SnapshotInternalAPI - formatNodeForInsertion", { concurrency }, () => { - test("formats a synthesized statement with correct indentation for insertion inside a function body", async () => { - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) {\n console.log(name);\n}\n`, - }; - await using api = spawnAPI(files); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], - NodeFlags.Const, - ), - ); - - const sourceText = files["/src/index.ts"]; - const insertionPos = sourceText.indexOf("\n console.log") + 1; - - const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); - assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation, got: ${JSON.stringify(formatted)}`); - }); - - test("formats a node at top-level with no indentation", async () => { - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `const a = 1;\nconst b = 2;\n`, - }; - await using api = spawnAPI(files); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("y"), undefined, undefined, createNumericLiteral("42", 0))], - NodeFlags.Const, - ), - ); - - const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", 0); - assert.ok(formatted.includes("const y = 42;"), `Expected 'const y = 42;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(!formatted.startsWith(" "), `Expected no leading spaces at top level, got: ${JSON.stringify(formatted)}`); - }); - - test("formats a synthesized statement with correct indentation when non-ASCII characters precede the insertion position", async () => { - // 'é' is 1 UTF-16 code unit but 2 UTF-8 bytes, so UTF-16 and UTF-8 offsets diverge after it. - // This test verifies the position is correctly converted from UTF-16 to UTF-8 before use. - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `// \u00e9\nfunction greet(name: string) {\n console.log(name);\n}\n`, - }; - await using api = spawnAPI(files); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], - NodeFlags.Const, - ), - ); - - // insertionPos is the UTF-16 code-unit offset of the start of the indented line inside the function body. - const sourceText = files["/src/index.ts"]; - const insertionPos = sourceText.indexOf("\n console.log") + 1; - - const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); - // The node should be indented to match the function body (4 spaces) - assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation (UTF-16 offset correctly converted), got: ${JSON.stringify(formatted)}`); - }); -}); - -describe("modifierFlags", { concurrency }, () => { - test("export async function has Export | Async flags", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `export async function foo() {}`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) { - fnNode = node; - } - node.forEachChild(visit); - }); - assert.ok(fnNode, "Should find a function declaration"); - assert.ok(fnNode.modifierFlags & ModifierFlags.Export, "Should have Export flag"); - assert.ok(fnNode.modifierFlags & ModifierFlags.Async, "Should have Async flag"); - assert.strictEqual(fnNode.modifierFlags, ModifierFlags.Export | ModifierFlags.Async); - }); - - test("node without modifiers has ModifierFlags.None", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function bar() {}`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) { - fnNode = node; - } - node.forEachChild(visit); - }); - assert.ok(fnNode, "Should find a function declaration"); - assert.strictEqual(fnNode.modifierFlags, ModifierFlags.None); - }); -}); - -describe("Checker - getResolvedSymbol", { concurrency }, () => { - test("resolves variable reference to its declaration symbol", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const x = 1;\nconst y = x;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // Find the 'x' identifier in `const y = x` - let refNode: import("@typescript/typescript/unstable/ast").Identifier | undefined; - sourceFile.forEachChild(function visit(node) { - if (isIdentifier(node) && node.text === "x") { - // We want the reference, not the declaration - take the last one - refNode = node; - } - node.forEachChild(visit); - }); - assert.ok(refNode, "Should find identifier 'x'"); - - const symbol = await project.checker.getResolvedSymbol(refNode); - assert.ok(symbol, "Should resolve symbol for 'x'"); - assert.equal(symbol.name, "x"); - }); -}); - -describe("VariableDeclarationList - BlockScoped flags", { concurrency }, () => { - test("let declaration has Let flag", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `let x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let declList: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isVariableDeclarationList(node)) { - declList = node; - } - node.forEachChild(visit); - }); - assert.ok(declList, "Should find VariableDeclarationList"); - assert.ok(declList.flags & NodeFlags.Let, "Should have Let flag"); - }); - - test("const declaration has Const flag", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let declList: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isVariableDeclarationList(node)) { - declList = node; - } - node.forEachChild(visit); - }); - assert.ok(declList, "Should find VariableDeclarationList"); - assert.ok(declList.flags & NodeFlags.Const, "Should have Const flag"); - }); -}); - -describe("AST roundtrips", { concurrency }, () => { - test("TypeOperator operator kind", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function test(arg: readonly number[]) { }\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const param = (sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").FunctionDeclaration).parameters[0]; - assert(param); - const type = param.type as import("@typescript/typescript/unstable/ast").TypeOperatorNode; - assert(type); - assert.equal(type.kind, SyntaxKind.TypeOperator); - assert.equal(type.operator, SyntaxKind.ReadonlyKeyword); - const printed = await api.printer.printFile(sourceFile); - assert.equal(sourceFile.text, printed); - }); - - test("SpreadAssignment roundtrip", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `var thing = { ...other };\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const object = stmt.declarationList.declarations[0].initializer as import("@typescript/typescript/unstable/ast").ObjectLiteralExpression; - const assignment = object.properties[0] as import("@typescript/typescript/unstable/ast").SpreadAssignment; - assert(assignment); - assert.equal(assignment.kind, SyntaxKind.SpreadAssignment); - const expr = assignment.expression; - assert(expr); - assert.equal(expr.kind, SyntaxKind.Identifier); - const printed = await api.printer.printFile(sourceFile); - assert.equal(sourceFile.text, printed); - }); - - test("VariableDeclarationList const flag clone", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const thing = 123;\n`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - { - const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const list = stmt.declarationList; - assert(list.flags & NodeFlags.Const); - } - const cloned = getSynthesizedDeepClone(sourceFile); - { - const stmt = cloned.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const list = stmt.declarationList; - assert(list.flags & NodeFlags.Const); - } - const printed = await api.printer.printFile(cloned); - assert.equal(sourceFile.text, printed); - }); - - test("JSDoc before ExpressionStatement allowed", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": ` -/** - * A doc. - */ -doThing(); - `, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const printed = await api.printer.printFile(sourceFile); - assert.equal(sourceFile.text.trim(), printed.trim()); - }); - - test("Factory ModifierList auto-conversion", async () => { - await using api = spawnAPI(); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createTypeAliasDeclaration( - [createToken(SyntaxKind.ExportKeyword)], - createIdentifier("Test"), - undefined, - createKeywordTypeNode(SyntaxKind.AnyKeyword), - ); - - assert.equal(await api.printer.printNode(node), "export type Test = any;"); - - const cloned = getSynthesizedDeepClone(node); - assert.equal(await api.printer.printNode(cloned), "export type Test = any;"); - }); - - test("Parse-clone-emit roundtrip", async () => { - const tsSource = fileURLToPath(new URL("../../../../tsc/testdata/fixtures", import.meta.url).toString()); - await using api = new API({ - cwd: tsSource, - }); - const target = { - cloneCrashed: 0, - printCrashed: 0, - clonePrintCrashed: 0, - }; - const errors = { ...target }; - - for (const tsconfig of globSync("**/tsconfig.json", { cwd: tsSource })) { - const snapshot = await api.createSnapshot({ openProject: resolve(tsSource, tsconfig) }); - const project = snapshot.getConfiguredProject(tsconfig); - assert(project); - for (const file of project.rootFiles) { - const source = await project.program.getSourceFile(file); - assert(source); - let clone: typeof source; - - try { - await api.printer.printNode(source); - } - catch { - errors.printCrashed++; - continue; - } - - try { - clone = getSynthesizedDeepClone(source); - } - catch { - errors.cloneCrashed++; - continue; - } - - try { - await api.printer.printNode(clone); - } - catch { - errors.clonePrintCrashed++; - continue; - } - } - } - - assert.deepEqual(errors, target); - }); -}); - -describe("Program - diagnostics", { concurrency }, () => { - test("getSyntacticDiagnostics", async () => { - const source = `const x: = 1;`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSyntacticDiagnostics("/src/index.ts"); - assert.deepEqual(diags[0].startPosition, { line: 0, character: 9 }); - assert.deepEqual(diags[0].endPosition, { line: 0, character: 10 }); - assert.deepEqual(diags[0].sourceLines, [{ line: 0, text: source }]); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...rangeOf(source, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }]); - }); - - test("getSemanticDiagnostics with messageChain and relatedInformation", async () => { - const source = `interface Props { callback: (x: string) => void }\nconst p: Props = { callback: (x: number) => {} };`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSemanticDiagnostics("/src/index.ts"); - const declRange = rangeOf(source, "callback", 0); - const assignRange = rangeOf(source, "callback", 1); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2322, - category: DiagnosticCategory.Error, - text: "Type '(x: number) => void' is not assignable to type '(x: string) => void'.", - messageChain: [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2328, - category: DiagnosticCategory.Error, - text: "Types of parameters 'x' and 'x' are incompatible.", - messageChain: [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2322, - category: DiagnosticCategory.Error, - text: "Type 'string' is not assignable to type 'number'.", - }], - }], - relatedInformation: [{ - fileName: "/src/index.ts", - ...declRange, - code: 6500, - category: DiagnosticCategory.Message, - text: "The expected type comes from property 'callback' which is declared here on type 'Props'", - }], - }]); - }); - - test("getSuggestionDiagnostics", async () => { - const source = `export function f() { const x = 1; return x; }\nconst _unused = 1;\n`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSuggestionDiagnostics("/src/index.ts"); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...rangeOf(source, "_unused"), - code: 6133, - category: DiagnosticCategory.Suggestion, - text: "'_unused' is declared but its value is never read.", - reportsUnnecessary: true, - }]); - }); - - test("getConfigFileParsingDiagnostics", async () => { - const config = `{ "compilerOptions": { "target": "invalid" } }`; - await using api = spawnAPI({ - "/tsconfig.json": config, - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getConfigFileParsingDiagnostics(); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/tsconfig.json", - ...rangeOf(config, `"invalid"`), - code: 6046, - category: DiagnosticCategory.Error, - text: "Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'es2026', 'esnext'.", - }]); - }); - - test("getConfigFileNames and getConfigSourceFile", async () => { - const baseConfigText = `{ "compilerOptions": { "strict": true } }`; - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.base.json": baseConfigText, - "/tsconfig.json": `{ "extends": "./tsconfig.base.json", "files": ["./src/index.ts"] }`, - "/src/index.ts": `export const x = 1;`, - }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const names = await project.program.getConfigFileNames(); - assert.deepEqual(names, ["/tsconfig.json", "/tsconfig.base.json"]); - - const rootConfig = await project.program.getConfigSourceFile("/tsconfig.json"); - assert.ok(rootConfig); - assert.equal(rootConfig.fileName, "/tsconfig.json"); - assert.equal(await project.program.getSourceFile("/tsconfig.json"), undefined); - const configObject = cast(cast(rootConfig.statements[0], isExpressionStatement).expression, isObjectLiteralExpression); - const configProperty = cast(configObject.properties[0], isPropertyAssignment); - await assert.rejects(getSymbol(configProperty), /Cached source file not found/); // @sync: assert.throws(() => getSymbol(configProperty), /Cached source file not found/); - await assert.rejects(api.getSymbol(configProperty), /Cached source file not found/); // @sync: assert.throws(() => api.getSymbol(configProperty), /Cached source file not found/); - - fs.writeFile!(toRootedFilePath("/tsconfig.base.json", undefined), `{ "compilerOptions": { "strict": false } }`); - const extendedConfig = await project.program.getConfigSourceFile("/tsconfig.base.json"); - assert.ok(extendedConfig); - assert.equal(extendedConfig.fileName, "/tsconfig.base.json"); - assert.equal(extendedConfig.getFullText(), baseConfigText); - - const nonConfig = await project.program.getConfigSourceFile("/src/index.ts"); - assert.equal(nonConfig, undefined); - }); - - test("getDeclarationDiagnostics", async () => { - await using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "declaration": true } }`, - "/src/index.ts": `export const x: number = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getDeclarationDiagnostics("/src/index.ts"); - assert.deepEqual(diags, []); - }); - - test("getBindDiagnostics", async () => { - const source = `let x = 1;\nlet x = 2;`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getBindDiagnostics("/src/index.ts"); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/src/index.ts", - ...rangeOf(source, "x", 0), - code: 2451, - category: DiagnosticCategory.Error, - text: "Cannot redeclare block-scoped variable 'x'.", - }, - { - fileName: "/src/index.ts", - ...rangeOf(source, "x", 1), - code: 2451, - category: DiagnosticCategory.Error, - text: "Cannot redeclare block-scoped variable 'x'.", - }, - ]); - }); - - test("getProgramDiagnostics", async () => { - const config = `{ "compilerOptions": { "moduleResolution": "bundler", "module": "nodenext" } }`; - await using api = spawnAPI({ - "/tsconfig.json": config, - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getProgramDiagnostics(); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/tsconfig.json", - ...rangeOf(config, `"bundler"`), - code: 5095, - category: DiagnosticCategory.Error, - text: "Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.", - }, - { - fileName: "/tsconfig.json", - ...rangeOf(config, `"bundler"`), - code: 5109, - category: DiagnosticCategory.Error, - text: "Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.", - }, - ]); - }); - - test("getGlobalDiagnostics", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getGlobalDiagnostics(); - assert.deepEqual(diags, []); - }); - - test("getGlobalDiagnostics returns file-less diagnostics from the checker", async () => { - await using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "noLib": true } }`, - "/src/index.ts": `export const x = [1, 2, 3];`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getGlobalDiagnostics(); - // With noLib, the checker reports "Cannot find global type" diagnostics that - // are not associated with any source file. - assert.ok(diags.length > 0, "expected global diagnostics to be reported"); - for (const diag of diags) { - assert.equal(diag.fileName, undefined); - assert.equal(diag.code, 2318); - assert.equal(diag.category, DiagnosticCategory.Error); - } - assert.ok( - diags.some(d => d.text === "Cannot find global type 'Array'."), - "expected a global diagnostic for the 'Array' type", - ); - }); - - test("getSyntacticDiagnostics with multiple files", async () => { - const sourceA = `const a: = 1;`; - const sourceB = `const b: = 2;`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - "/src/clean.ts": `const c = 3;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSyntacticDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/src/a.ts", - ...rangeOf(sourceA, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }, - { - fileName: "/src/b.ts", - ...rangeOf(sourceB, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }, - ]); - }); - - test("getSemanticDiagnostics with multiple files", async () => { - const sourceA = `export const a: number = "hello";`; - const sourceB = `export const b: string = 42;`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSemanticDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.equal(diags.length, 2); - assert.equal(diags[0].fileName, "/src/a.ts"); - assert.equal(diags[0].code, 2322); - assert.equal(diags[1].fileName, "/src/b.ts"); - assert.equal(diags[1].code, 2322); - }); - - test("getBindDiagnostics with multiple files", async () => { - const sourceA = `let x = 1;\nlet x = 2;`; - const sourceB = `let y = 1;\nlet y = 2;`; - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getBindDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.equal(diags.length, 4); - assert.equal(diags.filter(d => d.fileName === "/src/a.ts").length, 2); - assert.equal(diags.filter(d => d.fileName === "/src/b.ts").length, 2); - }); - - test("diagnostics with no files argument returns all", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": `const a: = 1;`, - "/src/b.ts": `const b: = 2;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSyntacticDiagnostics(); - assert.equal(diags.length, 2); - }); - - test("diagnostics with empty files array returns empty", async () => { - await using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": `const a: = 1;`, - "/src/b.ts": `const b: = 2;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await project.program.getSyntacticDiagnostics([]); - assert.deepEqual(diags, []); - }); -}); - -describe("getDefaultProjectForFile", { concurrency }, () => { - test("snapshot opens reject unreadable virtual files without panicking", async () => { - const fileName = "/src/App.vue.ts"; - const source = `export const component = 1;`; - const fs = createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ files: ["/src/index.ts"] }), - "/src/index.ts": `export const x = 1;`, - "/src/App.vue": source, - }); - let virtualFileAvailable = false; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - ...fs, - readFile: path => virtualFileAvailable && path === fileName ? source : fs.readFile!(path), - fileExists: path => virtualFileAvailable && path === fileName ? true : fs.fileExists!(path), - }, - }); - const snapshot = await api.createSnapshot({ - openProjects: ["/tsconfig.json"], - openFiles: ["/src/index.ts"], - }); - - const expectedError = /client error: failed to .*snapshot: no project found for opened file: \/src\/App\.vue\.ts/; - await assert.rejects(snapshot.update({ openFiles: [fileName] }), expectedError); // @sync: assert.throws(() => snapshot.update({ openFiles: [fileName] }), expectedError); - await assert.rejects(api.createSnapshot({ openFiles: [fileName] }), expectedError); // @sync: assert.throws(() => api.createSnapshot({ openFiles: [fileName] }), expectedError); - - virtualFileAvailable = true; - const updated = await snapshot.update({ openFiles: [fileName] }); - const project = await updated.getDefaultProjectForFile(fileName); - assert.ok(project); - assert.equal(project.configFileName, undefined); - assert.equal((await project.program.getSourceFile(fileName))?.text, source); - assert.equal(await snapshot.getDefaultProjectForFile(fileName), undefined); - assert.ok(await updated.getConfiguredProject("/tsconfig.json")); - - virtualFileAvailable = false; - const reopen = { openFiles: [fileName], fileNotifications: { deleted: [fileName] } }; - await assert.rejects(updated.update(reopen), expectedError); // @sync: assert.throws(() => updated.update(reopen), expectedError); - assert.equal((await project.program.getSourceFile(fileName))?.text, source); - }); - - test("finds inferred project for d.ts in node_modules after openFiles", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // The d.ts is not imported, so it is not in the project's program - const dtsSf = await project.program.getSourceFile("/node_modules/my-lib/index.d.ts"); - assert.equal(dtsSf, undefined, "d.ts not in import graph should not be found via project.program.getSourceFile"); - - // Before opening the file, getDefaultProjectForFile returns undefined (no error) - const noProject = await snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.equal(noProject, undefined, "getDefaultProjectForFile returns undefined for unloaded file"); - - // Load the file into the inferred project via createSnapshot openFiles - const snapshot2 = await api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); - const defaultProject = await snapshot2.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.ok(defaultProject, "getDefaultProjectForFile should find inferred project after openFiles"); - - const fooPos = `export declare const foo: string;`.indexOf("foo"); - const fooType = await defaultProject.checker.getTypeAtPosition("/node_modules/my-lib/index.d.ts", fooPos); - assert.ok(fooType); - assert.ok(fooType.flags & TypeFlags.String); - }); - - test("inferred project reflects file changes without a follow-up open/close request", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/loose.ts": `export const foo = 1;`, - }); - await using api = disposableAPI; - - const snapshot1 = await api.createSnapshot({ openFiles: ["/loose.ts"] }); - const project1 = await snapshot1.getDefaultProjectForFile("/loose.ts"); - assert.ok(project1, "file with no config file in its ancestry should load into the inferred project"); - const sf1 = await project1.program.getSourceFile("/loose.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 1;`); - - // Mutate the file and notify only via fileChanges — no follow-up openFiles/closeFiles. - fs.writeFile!(toRootedFilePath("/loose.ts", undefined), `export const foo = 2;`); - const snapshot2 = await api.createSnapshot({ - openFiles: ["/loose.ts"], - fileNotifications: { changed: ["/loose.ts"] }, - }); - - const project2 = await snapshot2.getDefaultProjectForFile("/loose.ts"); - assert.ok(project2); - const sf2 = await project2.program.getSourceFile("/loose.ts"); - assert.ok(sf2); - assert.equal( - sf2.text, - `export const foo = 2;`, - "inferred project's program should reflect the file change even without a follow-up open/close request", - ); - }); - - test("opens multiple inferred files in one snapshot", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - "/node_modules/other-lib/package.json": JSON.stringify({ name: "other-lib", types: "./index.d.ts" }), - "/node_modules/other-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = await api.createSnapshot({ - openFiles: ["/node_modules/my-lib/index.d.ts", "/node_modules/other-lib/index.d.ts"], - }); - - const firstProject = await snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.ok(firstProject, "previously opened file should remain in the inferred project"); - const secondProject = await snapshot.getDefaultProjectForFile("/node_modules/other-lib/index.d.ts"); - assert.ok(secondProject, "newly opened file should be in the inferred project"); - }); - - test("opening a file resolves to a configured project via ancestor search", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - }); - - // Open the file without first opening the project. Like LSP's didOpen, this - // should search ancestor directories for a tsconfig that contains the file. - const snapshot = await api.createSnapshot({ openFiles: ["/src/index.ts"] }); - const defaultProject = await snapshot.getDefaultProjectForFile("/src/index.ts"); - assert.ok(defaultProject, "should find a project for the opened file"); - assert.equal( - defaultProject.configFileName, - "/tsconfig.json", - "opened file should resolve to the containing configured project, not the inferred project", - ); - }); - - test("closeProjects releases a project opened via openProjects", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - }); - - const opened = await api.createSnapshot({ openProjects: ["/tsconfig.json"] }); - assert.ok(opened.getConfiguredProject("/tsconfig.json"), "project should be open after openProjects"); - - const closed = await api.createSnapshot({ closeProjects: ["/tsconfig.json"] }); - assert.equal( - closed.getConfiguredProject("/tsconfig.json"), - undefined, - "project should be unloaded after closeProjects", - ); - }); - - test("closeFiles releases a file opened via openFiles", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - }); - - await api.createSnapshot({ openProject: "/tsconfig.json" }); - const opened = await api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); - assert.ok( - await opened.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), - "file should resolve to a project after openFiles", - ); - - const closed = await api.createSnapshot({ closeFiles: ["/node_modules/my-lib/index.d.ts"] }); - assert.equal( - await closed.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), - undefined, - "file should no longer resolve to a project after closeFiles", - ); - }); -}); - -describe("Program - emit", { concurrency }, () => { - const files = { - "/tsconfig.json": `{ - "compilerOptions": { - "outDir": "dist", - "declaration": true, - } - }`, - "/src/index.ts": "export const x: number = 1;", - "/src/testing.ts": "export const y: string = 'typescript';", - }; - - test("emit all files", async () => { - const fs = createVirtualFileSystem({ ...files }); - - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emit(); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.js", - "/dist/src/index.d.ts", - "/dist/src/testing.js", - "/dist/src/testing.d.ts", - ], - fileSystem: undefined, - }); - - const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, `export const x = 1;\n`); - assert.strictEqual(dts, `export declare const x: number;\n`); - assert.strictEqual(js2, `export const y = 'typescript';\n`); - assert.strictEqual(dts2, `export declare const y: string;\n`); - }); - - test("emit only dts", async () => { - const fs = createVirtualFileSystem({ ...files }); - - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emit(EmitOnly.OnlyDts); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.d.ts", - "/dist/src/testing.d.ts", - ], - fileSystem: undefined, - }); - - const js = fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, serverFS.useOS); - assert.strictEqual(dts, `export declare const x: number;\n`); - assert.strictEqual(js2, serverFS.useOS); - assert.strictEqual(dts2, `export declare const y: string;\n`); - }); - - test("emit only js", async () => { - const fs = createVirtualFileSystem({ ...files }); - - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emit(EmitOnly.OnlyJs); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.js", - "/dist/src/testing.js", - ], - fileSystem: undefined, - }); - - const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, `export const x = 1;\n`); - assert.strictEqual(dts, serverFS.useOS); - assert.strictEqual(js2, `export const y = 'typescript';\n`); - assert.strictEqual(dts2, serverFS.useOS); - }); - - test("emitToString emits the whole program and respects emitOnly", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emitToString(EmitOnly.OnlyDts); - assert.deepEqual([...result.outputFiles.keys()], [ - "/dist/src/index.d.ts", - "/dist/src/testing.d.ts", - ]); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)), serverFS.useOS); - }); - - test("whole-program emit includes option-controlled maps", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - declaration: true, - declarationMap: true, - outDir: "dist", - sourceMap: true, - }, - }), - "/src/index.ts": "export const value: number = 1;", - }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const result = await project.program.emit(); - assert.deepEqual( - new Set(result.emittedFiles), - new Set([ - "/dist/src/index.js", - "/dist/src/index.js.map", - "/dist/src/index.d.ts", - "/dist/src/index.d.ts.map", - ]), - ); - assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.js.map", undefined))); - assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.d.ts.map", undefined))); - - const js = await project.program.emitToString(EmitOnly.OnlyJs); - assert.deepEqual([...js.outputFiles.keys()], [ - "/dist/src/index.js", - "/dist/src/index.js.map", - ]); - - const dts = await project.program.emitToString(EmitOnly.OnlyDts); - assert.deepEqual([...dts.outputFiles.keys()], [ - "/dist/src/index.d.ts", - "/dist/src/index.d.ts.map", - ]); - }); - - test("noEmitOnError reports diagnostics without writing output", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - noEmitOnError: true, - outDir: "dist", - }, - }), - "/src/bad.ts": "export const bad = ;", - "/src/good.ts": "export const value = 1;", - }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emit(); - assert.equal(result.emitSkipped, true); - assert.ok(result.diagnostics.some(d => d.code === 1109)); - assert.deepEqual(result.emittedFiles, []); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/bad.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/good.js", undefined)), serverFS.useOS); - - const stringResult = await project.program.emitToString(); - assert.equal(stringResult.emitSkipped, true); - assert.ok(stringResult.diagnostics.some(d => d.code === 1109)); - assert.deepEqual(stringResult.outputFiles, new Map()); - }); - - test("emit and emitToString respect noEmit", async () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noEmit: true } }), - "/src/index.ts": "export const value = 1;", - }); - await using api = disposableAPI; - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual(await project.program.emit(), { - diagnostics: [], - emitSkipped: false, - emittedFiles: [], - fileSystem: undefined, - }); - assert.deepEqual(await project.program.emitToString(), { - diagnostics: [], - emitSkipped: false, - outputFiles: new Map(), - }); - assert.equal(fs.readFile(toRootedFilePath("/src/index.js", undefined)), serverFS.useOS); - }); - - test("emit rejects unknown files and invalid emitOnly values", async () => { - await using api = spawnAPI({ ...files }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - let error: unknown; - try { - await project.program.getJavaScriptEmit(["/src/missing.ts"]); - } - catch (e) { - error = e; - } - assert.match(String(error), /source file not found/); - - error = undefined; - try { - await project.program.emitToString(3 as EmitOnly); - } - catch (e) { - error = e; - } - assert.match(String(error), /invalid emitOnly value/); - }); - - // @sync-skip-block-start - test("emit reports async VFS write failures as diagnostics", async () => { - const fs = createVirtualFileSystem({ ...files }); - fs.writeFile = () => { - throw new Error("write failed"); - }; - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = await project.program.emit(); - assert.deepEqual(result.emittedFiles, []); - assert.ok(result.diagnostics.some(d => d.text.includes("write failed"))); - }); - // @sync-skip-block-end -}); - -describe("Timing", { concurrency }, () => { - test("collects combined client, server, and transport timing info", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ ...defaultFiles }), - collectTiming: true, - }); - - // Baseline: enabled, but nothing measured yet. - let info = await api.getTimingInfo(); - assert.equal(info.enabled, true); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.recentRequests.length, 0); - - // Exercise a JSON request and a binary source-file request. - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // Client-side timing: round-trip latency and byte counts. - info = await api.getTimingInfo(); - assert.ok(info.totals.requestCount >= 2, "expected at least two measured requests"); - assert.ok(info.totals.bytesSent > 0); - assert.ok(info.totals.bytesReceived > 0); - assert.ok(info.totals.roundTripMs >= 0); - - // Server-side timing is folded into the same snapshot. - assert.ok(info.totals.serverTimeMs >= 0); - assert.ok(info.totals.transportOverheadMs >= 0); - assert.equal( - info.totals.transportOverheadMs, - Math.max(0, info.totals.roundTripMs - info.totals.serverTimeMs), - ); - - // The ring buffer retains at most the 5 most recent requests. - assert.ok(info.recentRequests.length > 0); - assert.ok(info.recentRequests.length <= 5); - assert.ok(info.recentRequests.length <= info.totals.requestCount); - - for (const r of info.recentRequests) { - assert.ok(r.roundTripMs >= 0); - assert.ok(r.bytesSent >= 0); - assert.ok(r.bytesReceived >= 0); - assert.ok(typeof r.method === "string" && r.method.length > 0); - assert.equal(typeof r.timestamp, "number"); - // Transport overhead is present exactly when server time is. - assert.equal(r.transportOverheadMs === undefined, r.serverTimeMs === undefined); - if (r.serverTimeMs !== undefined) { - assert.ok(r.serverTimeMs >= 0); - assert.equal(r.transportOverheadMs, Math.max(0, r.roundTripMs - r.serverTimeMs)); - } - } - - // Server processing time is folded in for the recent requests. - assert.ok(info.recentRequests.every(r => r.serverTimeMs !== undefined), "server time should be reported"); - - // Reset clears totals and history on both client and server. - await api.resetTimingInfo(); - info = await api.getTimingInfo(); - assert.equal(info.enabled, true); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.totals.serverTimeMs, 0); - assert.equal(info.totals.transportOverheadMs, 0); - assert.equal(info.recentRequests.length, 0); - }); - - test("tracks source-file node materialization", async () => { - await using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ ...defaultFiles }), - collectTiming: true, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = await project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // The source file node itself is pre-cached, so before walking the - // tree no descendant nodes have been materialized. - let info = await api.getTimingInfo(); - const before = info.totals.nodesMaterialized; - assert.equal(info.totals.sourceFilesFetched, 1, "one source file was fetched"); - assert.ok(info.totals.nodesFetched > 0, "the fetched file contributes materializable nodes"); - assert.equal(info.totals.nodesMaterialized, 0, "nothing walked yet, so no nodes materialized"); - - // Walk the whole tree to force lazy materialization of every node. - let visited = 0; - sourceFile.forEachChild(function visit(node) { - visited++; - node.forEachChild(visit); - }); - assert.ok(visited > 0, "expected to visit at least one node"); - - info = await api.getTimingInfo(); - assert.ok( - info.totals.nodesMaterialized > before, - "walking the tree should materialize nodes", - ); - assert.ok( - info.totals.nodesMaterialized >= visited, - "every visited node should have been materialized", - ); - - // A full walk materializes (nearly) every fetched node, so the share - // of fetched nodes materialized should be substantial. - assert.equal(info.totals.sourceFilesFetched, 1); - assert.ok( - info.totals.nodesMaterialized > 0 - && info.totals.nodesMaterialized <= info.totals.nodesFetched, - "materialized nodes should be in (0, nodesFetched]", - ); - - // Reset clears materialization totals along with the rest. - await api.resetTimingInfo(); - info = await api.getTimingInfo(); - assert.equal(info.totals.nodesMaterialized, 0); - assert.equal(info.totals.sourceFilesFetched, 0); - assert.equal(info.totals.nodesFetched, 0); - }); - - test("is disabled by default", async () => { - await using api = spawnAPI(); - - await api.parseConfigFile("/tsconfig.json"); - const info = await api.getTimingInfo(); - assert.equal(info.enabled, false); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.totals.nodesMaterialized, 0); - assert.equal(info.totals.sourceFilesFetched, 0); - assert.equal(info.totals.nodesFetched, 0); - assert.equal(info.recentRequests.length, 0); - }); -}); - -describe("runWithTemporaryFileUpdate", { concurrency }, () => { - test("temporary file update is visible in the callback and reverted afterward", async () => { - await using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x: number = 1;`, - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // The original content type-checks cleanly. - const baseDiags = await project.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(baseDiags.length, 0); - - // Keep a newer snapshot active to verify any active snapshot can be the base. - const latestSnapshot = await api.createSnapshot(); - assert.notEqual(latestSnapshot.id, snapshot.id); - - // Inside the callback, the file has the temporary (erroneous) content. - let errorCount = -1; - await api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const x: string = 1;`, async tempSnapshot => { - const tempProject = tempSnapshot.getConfiguredProject("/tsconfig.json")!; - const diags = await tempProject.program.getSemanticDiagnostics("/src/index.ts"); - errorCount = diags.length; - }); - assert.ok(errorCount > 0, "temporary content should produce a semantic error inside the callback"); - - // The original snapshot is unaffected by the temporary update. - const afterDiags = await project.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(afterDiags.length, 0); - - // A subsequent independent snapshot can request the project again. - const snapshot2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project2 = snapshot2.getConfiguredProject("/tsconfig.json")!; - const diags2 = await project2.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(diags2.length, 0); - }); - - test("reconstructs projects omitted from the response diff", async () => { - await using api = spawnAPI({ - "/first/tsconfig.json": `{}`, - "/first/index.ts": `export const first = 1;`, - "/second/tsconfig.json": `{}`, - "/second/index.ts": `export const second = 1;`, - }); - - const snapshot = await api.createSnapshot({ - openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], - }); - const originalSecondProject = snapshot.getConfiguredProject("/second/tsconfig.json")!; - - await api.runWithTemporaryFileUpdate(snapshot, "/first/index.ts", `export const first = 2;`, async tempSnapshot => { - assert.equal(tempSnapshot.getProjects().length, 2); - assert.ok(tempSnapshot.getConfiguredProject("/first/tsconfig.json")); - const secondProject = tempSnapshot.getConfiguredProject("/second/tsconfig.json"); - assert.ok(secondProject); - assert.notStrictEqual(secondProject, originalSecondProject); - assert.equal((await secondProject.program.getSourceFileNames()).includes("/second/index.ts" as RootedFilePath), true); - }); - }); - - test("updates synthetic programs with temporary contents", async () => { - await using api = spawnAPI({ - "/src/index.ts": `export const value: number = 1;`, - }); - const snapshot = await api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { noLib: true, strict: true }, - }], - }); - const originalProgram = snapshot.operation.createdPrograms[0]; - - await api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const value: string = 1;`, async temporarySnapshot => { - const temporaryProgram = temporarySnapshot.getProgram(originalProgram.id); - assert.ok(temporaryProgram); - assert.equal((await temporaryProgram.getSemanticDiagnostics("/src/index.ts")).length, 1); - }); - - assert.equal((await originalProgram.getSemanticDiagnostics("/src/index.ts")).length, 0); - }); -}); - -function spawnAPIWithFS( - files: Record = { ...defaultFiles }, - onWrite?: (path: string) => void, -): { api: API; fs: ReturnType; } { - const fs = createVirtualFileSystem(files); - if (onWrite) { - const writeFile = fs.writeFile!; - fs.writeFile = (path, content) => { - onWrite(path); - writeFile(path, content); - }; - } - const api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - return { api, fs }; -} - -/** Returns `{ pos, end }` for the nth (0-based, default 0) occurrence of `searchString` in `source`. */ -function rangeOf(source: string, searchString: string, occurrence: number = 0): { pos: number; end: number; } { - let index = -1; - for (let i = 0; i <= occurrence; i++) { - index = source.indexOf(searchString, index + 1); - if (index === -1) { - throw new Error(`Occurrence ${occurrence} of "${searchString}" not found in source`); - } - } - return { pos: index, end: index + searchString.length }; -} - -function withoutFormattingContext(value: T): T { - const formattingKeys = new Set(["startPosition", "endPosition", "sourceLines"]); - return JSON.parse(JSON.stringify(value, (key, item) => formattingKeys.has(key) ? undefined : item)) as T; -} - -function applyTextEdits(source: string, edits: readonly TextEdit[]): string { - const sorted = [...edits].sort((a, b) => b.pos - a.pos); - let result = source; - for (const edit of sorted) { - result = result.slice(0, edit.pos) + edit.newText + result.slice(edit.end); - } - return result; -} +import { + type __String, + cast, + escapeLeadingUnderscores, + type Expression, + getJSDocCommentsAndTags, + getJSDocTags, + getSynthesizedDeepClone, + getTextOfJSDocComment, + InternalSymbolName, + isCallExpression, + isClassDeclaration, + isExpressionStatement, + isFunctionDeclaration, + isIdentifier, + isImportDeclaration, + isInterfaceDeclaration, + isJSDoc, + isJSDocParameterTag, + isModuleDeclaration, + isNamedImports, + isObjectLiteralExpression, + isPropertyAssignment, + isPropertyDeclaration, + isReturnStatement, + isShorthandPropertyAssignment, + isStringLiteral, + isTemplateHead, + isTemplateMiddle, + isTemplateTail, + isTypeAliasDeclaration, + isTypeNode, + isVariableDeclarationList, + isVariableStatement, + type Node, + type NodeArray, + NodeFlags, + type PathKey, + type RootedFilePath, + type SourceFile, + SyntaxKind, + tryGetAmbientModuleNameFromSymbolName, + unescapeLeadingUnderscores, +} from "@typescript/typescript/unstable/ast"; +import { + cloneNode, + createArrayTypeNode, + createFunctionTypeNode, + createIdentifier, + createKeywordTypeNode, + createNumericLiteral, + createParameterDeclaration, + createSourceFile, + createToken, + createTypeAliasDeclaration, + createTypeReferenceNode, + createUnionTypeNode, + createVariableDeclaration, + createVariableDeclarationList, + createVariableStatement, +} from "@typescript/typescript/unstable/ast/factory"; +import { visitEachChild } from "@typescript/typescript/unstable/ast/visitor"; +import { + API, + type BigIntLiteralType, + CheckFlags, + type CompilerOptions, + type ConditionalType, + type ConfiguredProjectId, + DiagnosticCategory, + type DocumentIdentifier, + EmitOnly, + type FormatDiagnosticsHost, + type FreshableType, + getSymbol, + type ImportAdderAction, + type IndexedAccessType, + IndexKind, + type IndexType, + type InferredProjectId, + type InProgressSnapshot, + type InterfaceType, + type IntrinsicType, + isErrorType, + JsxEmit, + type LiteralType, + type MappedType, + ModifierFlags, + ModuleKind, + ModuleResolutionKind, + type ModuleResolver, + type NumberLiteralType, + ObjectFlags, + type Program, + type Project, + type ProjectId, + type RawCompilerOptions, + ScriptKind, + type Signature, + SignatureKind, + type Snapshot, + type StringMappingType, + SymbolFlags, + type SyntheticProjectId, + type TemplateLiteralType, + type TextEdit, + TypeFlags, + TypeFormatFlags, + type TypeParameter, + TypePredicateKind, + type TypeReference, + type UnionOrIntersectionType, + type UserPreferences, +} from "@typescript/typescript/unstable/async"; // @sync: } from "@typescript/typescript/unstable/sync"; +import { + createFileSystem, + createFileSystemLayer, + createFileSystemWithLib, + type FileSystemCallbacks, + serverFS, +} from "@typescript/typescript/unstable/fs"; +import { + rootedDirectoryPathFromPath, + rootedFilePathFromPath, + toRootedDirectoryPath, + toRootedFilePath, +} from "@typescript/typescript/unstable/path"; +import assert from "node:assert"; +import { globSync } from "node:fs"; +import { resolve } from "node:path"; +import { + describe, + test, +} from "node:test"; +import { fileURLToPath } from "node:url"; +import { + getNodeId, + parseNodeHandleFromCompiler, + RemoteSourceFile, +} from "../../src/api/node/node.ts"; +import { isSignatureDeclaration } from "../../src/ast/is.ts"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "../testUtils.ts"; +import { + defaultFiles, + spawnAPI, +} from "./api.testUtils.ts"; + +const concurrency = areTestsFiltered(); + +describe("API", { concurrency }, () => { + test("getCurrentLanguageServerSnapshot is LSP-only", () => { + if (!!false) { + const standalone = new API(); + // @ts-expect-error The standalone API has no canonical language server state. + void standalone.getCurrentLanguageServerSnapshot(); + + const lsp = undefined! as API; + void lsp.getCurrentLanguageServerSnapshot({ openProjects: ["/tsconfig.json"] }); + const moduleResolver = undefined! as ModuleResolver; + void lsp.getCurrentLanguageServerSnapshot({ + createPrograms: [{ + rootFiles: ["/index.ts"], + compilerOptions: {}, + options: { moduleResolver }, + }], + }); + const baseSnapshot = undefined! as Snapshot; + void lsp.getCurrentLanguageServerSnapshot(undefined, baseSnapshot); + + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, options: { projectReferences: [{ path: "/tsconfig.json" }] } }] }); + void standalone.createModuleResolver({ outDir: "dist", rootDirs: ["src"], typeRoots: ["types"] }); + void standalone.transpileModule("", { compilerOptions: { outDir: "dist" } }); + + const formatDiagnosticsHost: FormatDiagnosticsHost = { + getCurrentDirectory: () => "/workspace", + getCanonicalFileName: fileName => fileName, + getNewLine: () => "\n", + }; + void formatDiagnosticsHost; + + // @ts-expect-error Snapshot parameters are excess-property checked. + void standalone.createSnapshot({ fileChanges: { changed: ["/index.ts"] } }); + // @ts-expect-error Synthetic program parameters are contextually typed and excess-property checked. + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, unexpected: true }] }); + // @ts-expect-error Compiler options in synthetic program parameters are contextually typed and excess-property checked. + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: { unexpected: true } }] }); + // @ts-expect-error Snapshot update parameters are excess-property checked. + void baseSnapshot.update({ fileChanges: { changed: ["/index.ts"] } }); + // @ts-expect-error Snapshot updates require an explicit changes object. + void baseSnapshot.update(undefined); + // @ts-expect-error Language server snapshot parameters are excess-property checked. + void lsp.getCurrentLanguageServerSnapshot({ fileChanges: { changed: ["/index.ts"] } }); + + const configured = undefined! as ConfiguredProjectId; + const inferred = undefined! as InferredProjectId; + const synthetic = undefined! as SyntheticProjectId; + const path: PathKey = configured; + const projectIds: ProjectId[] = [configured, inferred, synthetic]; + void path; + void projectIds; + // @ts-expect-error Project ID brands are not interchangeable. + const invalid: ConfiguredProjectId = synthetic; + void invalid; + + const callbacks: FileSystemCallbacks = { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: serverFS.useOS, + realpath: path => `${path}`, + stat: serverFS.fakeStat, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }; + void new API({ fs: callbacks }); + void new API({ fs: { ...callbacks, writeFile: serverFS.noop } }); + void new API({ + fs: { + ...callbacks, + realpath: () => serverFS.identity, + stat: () => serverFS.fakeStat, + writeFile: () => serverFS.noop, + }, + }); + void new API({ + fs: { + directoryExists: serverFS.error, + fileExists: serverFS.error, + getAccessibleEntries: serverFS.error, + readFile: serverFS.error, + realpath: serverFS.error, + stat: serverFS.error, + writeFile: serverFS.error, + removeFile: serverFS.error, + }, + }); + void new API({ + fs: { + directoryExists: () => serverFS.error, + fileExists: () => serverFS.error, + getAccessibleEntries: () => serverFS.error, + readFile: () => serverFS.error, + realpath: () => serverFS.error, + stat: () => serverFS.error, + writeFile: () => serverFS.error, + removeFile: () => serverFS.error, + }, + }); + // @ts-expect-error Filesystem callback configurations must specify every operation. + void new API({ fs: { readFile: serverFS.useOS } }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error Identity is only a valid realpath implementation. + readFile: serverFS.identity, + }, + }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error fakeStat is only a valid stat implementation. + fileExists: serverFS.fakeStat, + }, + }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error Noop is only a valid writeFile implementation. + readFile: serverFS.noop, + }, + }); + } + }); + + test("initializes once for concurrent first requests", async () => { + await using api = spawnAPI(); + // @sync-skip-block-start + const [commandLine, config] = await Promise.all([ + api.parseCommandLine(["--strict"]), + api.readConfigFile("/tsconfig.json"), + ]); + // @sync-skip-block-end + // @sync-only-start + // const [commandLine, config] = api.batch( + // api.parseCommandLine.gen(["--strict"]), + // api.readConfigFile.gen("/tsconfig.json"), + // ); + // @sync-only-end + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + }); + + test("disposes", async () => { + let disposedAPI: API; + { + await using api = spawnAPI(); + await api.parseCommandLine([]); + disposedAPI = api; + } + await assert.rejects(disposedAPI.parseCommandLine([])); // @sync: assert.throws(() => disposedAPI.parseCommandLine([])); + }); + + // @sync-skip-block-start + test("disposal handles concurrent initialization", async () => { + const api = spawnAPI(); + const initialization = api.parseCommandLine([]); + const [initializationResult] = await Promise.allSettled([initialization, api[Symbol.asyncDispose]()]); + if (initializationResult.status !== "rejected") assert.fail("Initialization should reject when disposal closes the client"); + assert.match(String(initializationResult.reason), /Client is closed/); + await assert.rejects(api.parseCommandLine([]), /Client is closed/); + }); + // @sync-skip-block-end + + test("parseCommandLine", async () => { + await using api = spawnAPI(); + + const commandLine = await api.parseCommandLine([ + "--strict", + "--outDir", + "dist", + "/src/index.ts", + ]); + assert.deepEqual(commandLine.fileNames, ["/src/index.ts"]); + assert.equal(commandLine.options.strict, true); + assert.equal( + resolve(commandLine.options.outDir!), + resolve(fileURLToPath(new URL("../../../../", import.meta.url)), "dist"), + ); + assert.deepEqual(commandLine.raw, { + strict: true, + outDir: "dist", + }); + assert.deepEqual(commandLine.errors, []); + }); + + test("parseCommandLine reports diagnostics", async () => { + await using api = spawnAPI(); + + const commandLine = await api.parseCommandLine(["--notAnOption"]); + assert.deepEqual(commandLine.fileNames, []); + assert.equal(commandLine.errors.length, 1); + assert.equal(commandLine.errors[0].code, 5023); + }); + + test("readConfigFile", async () => { + await using api = spawnAPI({ + "/tsconfig.json": `{ + // Comments and trailing commas are supported. + "compilerOptions": { "strict": true, }, + }`, + }); + + const result = await api.readConfigFile("/tsconfig.json"); + assert.deepEqual(result, { + config: { compilerOptions: { strict: true } }, + }); + }); + + test("readConfigFile reports read and parse errors", async () => { + await using api = spawnAPI({ + "/invalid.json": `{ "compilerOptions": { "strict": true,, } }`, + }); + + const invalid = await api.readConfigFile("/invalid.json"); + assert.deepEqual(invalid.config, { compilerOptions: { strict: true } }); + assert.ok(invalid.error); + + const missing = await api.readConfigFile("/missing.json"); + assert.deepEqual(missing.config, {}); + assert.equal(missing.error?.code, 5083); + }); + + test("parseJsonConfigFileContent with configDirectory", async () => { + await using api = spawnAPI(); + + const config = await api.parseJsonConfigFileContent( + { + compilerOptions: { strict: true }, + files: ["index.ts"], + }, + { configDirectory: "/src" }, + ); + assert.deepEqual(config.fileNames, ["/src/index.ts"]); + assert.equal(config.options.strict, true); + assert.equal("configFilePath" in config.options, false); + assert.equal(config.compileOnSave, false); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent accepts non-object JSON", async () => { + await using api = spawnAPI(); + + const config = await api.parseJsonConfigFileContent(null, { configDirectory: "/src" }); + assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent with configFileName", async () => { + await using api = spawnAPI(); + + const config = await api.parseJsonConfigFileContent( + { + compilerOptions: { strict: true }, + files: ["index.ts"], + }, + { configFileName: "/src/tsconfig.json" }, + ); + assert.deepEqual(config.fileNames, ["/src/index.ts"]); + assert.equal(config.options.strict, true); + assert.equal(config.options.configFilePath, "/src/tsconfig.json"); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent preserves raw config", async () => { + await using api = spawnAPI(); + + const input = { + compileOnSave: true, + customSetting: { enabled: true }, + files: ["index.ts"], + }; + const config = await api.parseJsonConfigFileContent(input, { configDirectory: "/src" }); + assert.deepEqual(config.raw, input); + assert.equal(config.compileOnSave, true); + }); + + test("parseJsonConfigFileContent preserves an empty files list", async () => { + await using api = spawnAPI(); + + const config = await api.parseJsonConfigFileContent( + { files: [] }, + { configDirectory: "/src" }, + ); + assert.deepEqual(config.fileNames, []); + assert.equal(config.errors.length, 1); + assert.equal(config.errors[0].code, 18002); + }); + + test("parseJsonConfigFileContent reports null array elements", async () => { + await using api = spawnAPI(); + + const config = await api.parseJsonConfigFileContent( + { files: [null], include: [null], exclude: [null] }, + { configDirectory: "/src" }, + ); + assert.equal(config.errors.length, 3); + assert.ok(config.errors.every(diagnostic => diagnostic.code === 5024)); + }); + + test("transpile", async () => { + await using api = spawnAPI({ + "/input.ts": "export const x: number = 1;", + }); + + const moduleOutput = await api.transpileModule("export const x: number = 1;", { + compilerOptions: { module: ModuleKind.CommonJS }, + }); + assert.match(moduleOutput.outputText, /exports\.x = 1/); + + const isolatedDeclarationModuleOutput = await api.transpileModule("export const x: number = 1;", { + compilerOptions: { declaration: true, isolatedDeclarations: true }, + reportDiagnostics: true, + }); + assert.equal(isolatedDeclarationModuleOutput.diagnostics?.length ?? 0, 0); + + const moduleFileOutput = await api.transpileModuleFromFile({ uri: "file:///input.ts" }, { + compilerOptions: { module: ModuleKind.CommonJS }, + }); + assert.match(moduleFileOutput.outputText, /exports\.x = 1/); + + const declarationOutput = await api.transpileDeclaration("export const x: number = 1;"); + assert.equal(declarationOutput.outputText, "export declare const x: number;\n"); + + const windowsDeclarationOutput = await api.transpileDeclaration("export const x: number = 1;", { + fileName: "C:/Users/me/project/input.ts", + }); + assert.equal(windowsDeclarationOutput.outputText, "export declare const x: number;\n"); + + const declarationFileOutput = await api.transpileDeclarationFromFile({ uri: "file:///input.ts" }); + assert.equal(declarationFileOutput.outputText, "export declare const x: number;\n"); + }); + + test("createSourceFile", async () => { + await using api = spawnAPI(); + const sourceText = "export const element =
;"; + await using retained = await api.createSourceFile("/component.tsx", sourceText); + const sourceFile = retained.sourceFile; + assert.equal(sourceFile.fileName, "/component.tsx"); + assert.match(sourceFile.path, /\/component\.tsx$/); + assert.equal(sourceFile.text, sourceText); + assert.equal(sourceFile.scriptKind, ScriptKind.TSX); + assert.equal(sourceFile.statements.length, 1); + assert.strictEqual(sourceFile.statements[0].parent, sourceFile); + + await using retainedAgain = await api.createSourceFile("/component.tsx", sourceText); + assert.strictEqual(retainedAgain.sourceFile, sourceFile); + await assert.rejects(api.createSourceFile("", ""), /fileName must not be empty/); // @sync: assert.throws(() => api.createSourceFile("", ""), /fileName must not be empty/); + await using dot = await api.createSourceFile(".", ""); + assert.equal(dot.sourceFile.scriptKind, ScriptKind.TS); + + await using overridden = await api.createSourceFile("/component.txt", sourceText, { scriptKind: ScriptKind.TSX }); + assert.equal(overridden.sourceFile.scriptKind, ScriptKind.TSX); + assert.equal(overridden.sourceFile.statements.length, 1); + await using defaultKind = await api.createSourceFile("/component.txt", sourceText); + assert.notStrictEqual(defaultKind.sourceFile, overridden.sourceFile); + + await using upperCase = await api.createSourceFile("/CaseSensitive.ts", ""); + await using lowerCase = await api.createSourceFile("/casesensitive.ts", ""); + assert.notStrictEqual(lowerCase.sourceFile, upperCase.sourceFile); + assert.equal(upperCase.sourceFile.fileName, "/CaseSensitive.ts"); + assert.equal(lowerCase.sourceFile.fileName, "/casesensitive.ts"); + + await assert.rejects(api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); // @sync: assert.throws(() => api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); + + // Each lease can be disposed repeatedly without throwing or releasing another lease. + const firstDispose = retained.dispose(); + const secondDispose = retained.dispose(); + assert.strictEqual(firstDispose, secondDispose); // @sync-skip + await firstDispose; // @sync: retained.dispose(); + await using retainedAfterDispose = await api.createSourceFile("/component.tsx", sourceText); + assert.strictEqual(retainedAfterDispose.sourceFile, retainedAgain.sourceFile); + }); + + test("remote declarations lazily fetch and cache binder symbols", async () => { + const sourceText = "function present() {}"; + await using api = spawnAPI({ + "/symbols.ts": sourceText, + }); + const snapshot = await api.createSnapshot({ openFiles: ["/symbols.ts"] }); + const project = snapshot.getProjects()[0]; + const sourceFile = await project.program.getSourceFile("/symbols.ts"); + assert.ok(sourceFile); + const declaration = sourceFile.statements[0]; + assert.ok(isFunctionDeclaration(declaration)); + const checkerSymbol = await project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); // @sync: const checkerSymbol = project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); + assert.ok(checkerSymbol); + + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): Promise; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let symbolRequests = 0; + client.apiRequest = async (method, params) => { + if (method === "getSymbolOfDeclaration") symbolRequests++; + return apiRequest(method, params); + }; + + const [first, concurrent] = await Promise.all([getSymbol(declaration), api.getSymbol(declaration)]); // @sync: const first = getSymbol(declaration); const concurrent = api.getSymbol(declaration); + assert.ok(first); + assert.strictEqual(first, checkerSymbol); + assert.strictEqual(concurrent, first); + assert.strictEqual(await getSymbol(declaration), first); // @sync: assert.strictEqual(getSymbol(declaration), first); + assert.equal(symbolRequests, 1); + + await snapshot.dispose(); + }); + + test("getSymbol rejects synthesized declarations", async () => { + await using api = spawnAPI(); + const local = createVariableDeclaration(createIdentifier("local"), undefined, undefined, undefined); + await assert.rejects(getSymbol(local), /Source file not found/); // @sync: assert.throws(() => getSymbol(local), /Source file not found/); + await assert.rejects(api.getSymbol(local), /Source file not found/); // @sync: assert.throws(() => api.getSymbol(local), /Source file not found/); + + await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + assert.ok(await getSymbol(declaration)); + const shallowClone = cloneNode(declaration); + const deepClone = getSynthesizedDeepClone(declaration); + await assert.rejects(getSymbol(shallowClone), /Source file not found/); // @sync: assert.throws(() => getSymbol(shallowClone), /Source file not found/); + await assert.rejects(api.getSymbol(deepClone), /Source file not found/); // @sync: assert.throws(() => api.getSymbol(deepClone), /Source file not found/); + assert.equal("getSymbol" in declaration, false); + }); + + test("source files own separate declaration result and request caches", async () => { + await using api = spawnAPI(); + await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); + const file = lease.sourceFile; + assert.ok(file instanceof RemoteSourceFile); + const cache = file.symbolCache; + assert.ok(cache); + const declaration = cast(file.statements[0], isFunctionDeclaration); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + const request = getSymbol(declaration); + assert.ok(cache.declarationSymbolRequests.get(index) instanceof Promise); // @sync-skip + assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); // @sync-skip + const symbol = await request; + assert.ok(symbol); + assert.strictEqual(cache.symbolsByDeclarationNodeIndex.get(index), symbol); + assert.strictEqual(cache.symbolsById.get(symbol.reference.id), symbol); + assert.equal(cache.declarationSymbolRequests.has(index), false); + api.clearSourceFileCache(); + assert.strictEqual(file.symbolCache, cache); + }); + + test("standalone getSymbol delegates to the source file's API", async context => { + await using api = spawnAPI(); + await using lease = await api.createSourceFile("/symbols.ts", "function present() {}"); + assert.ok(lease.sourceFile instanceof RemoteSourceFile); + assert.strictEqual(lease.sourceFile.api, api); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + // Materialize the sync API's lazy method before mocking it. + void api.getSymbol; + const method = context.mock.method(api, "getSymbol"); + const symbol = await getSymbol(declaration); + assert.ok(symbol); + assert.equal(method.mock.callCount(), 1); + assert.strictEqual(await api.getSymbol(declaration), symbol); + }); + + test("declaration symbol results survive releasing the last lease", async () => { + await using api = spawnAPI(); + const lease = await api.createSourceFile("/symbols.ts", "function present() {}"); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + const symbol = await getSymbol(declaration); + assert.ok(symbol); + + await lease.dispose(); + assert.strictEqual(await getSymbol(declaration), symbol); + }); + + test("declaration symbols can be fetched after clearing the client cache", async () => { + await using api = spawnAPI(); + await using lease = await api.createSourceFile("/symbols.ts", "function first() {} function second() {}"); + const first = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + const second = cast(lease.sourceFile.statements[1], isFunctionDeclaration); + const firstSymbol = await getSymbol(first); + assert.ok(firstSymbol); + + api.clearSourceFileCache(); + const secondSymbol = await getSymbol(second); + assert.ok(secondSymbol); + assert.equal(secondSymbol.name, "second"); + assert.strictEqual(await getSymbol(first), firstSymbol); + + await using retained = await api.retainSourceFile(lease.sourceFile); + assert.strictEqual(retained.sourceFile, lease.sourceFile); + assert.strictEqual(await getSymbol(first), firstSymbol); + assert.strictEqual(await getSymbol(second), secondSymbol); + }); + + test("declaration lookup rejects unavailable and recreated files without caching failures", async () => { + await using api = spawnAPI(); + const text = "function present() {}"; + const lease = await api.createSourceFile("/symbols.ts", text); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + assert.ok(lease.sourceFile instanceof RemoteSourceFile); + const cache = lease.sourceFile.symbolCache; + assert.ok(cache); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + await lease.dispose(); + + await assert.rejects(getSymbol(declaration), /source file is not available/); // @sync: assert.throws(() => getSymbol(declaration), /source file is not available/); + assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); + assert.equal(cache.declarationSymbolRequests.has(index), false); + await using recreated = await api.createSourceFile("/symbols.ts", text); + await assert.rejects(getSymbol(declaration), /source file descriptor no longer identifies/); // @sync: assert.throws(() => getSymbol(declaration), /source file descriptor no longer identifies/); + assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); + assert.equal(cache.declarationSymbolRequests.has(index), false); + const recreatedDeclaration = cast(recreated.sourceFile.statements[0], isFunctionDeclaration); + assert.equal((await getSymbol(recreatedDeclaration))?.name, "present"); + }); + + test("createSourceFile can be used with a compatible program", async () => { + const sourceText = "export const element =
;"; + await using api = spawnAPI({ + "/component.tsx": sourceText, + }); + await using retained = await api.createSourceFile("/component.tsx", sourceText); + const sourceFile = retained.sourceFile; + const snapshot = await api.createSnapshot({ openFiles: ["/component.tsx"] }); + const project = snapshot.getProjects()[0]; + assert.equal((await api.printer.printNode(sourceFile)).trimEnd(), sourceText); + assert.ok(await project.checker.getTypeAtLocation(sourceFile.statements[0])); + assert.equal(await project.program.isSourceFileDefaultLibrary(sourceFile), false); + await snapshot.dispose(); + }); + + test("createSourceFile shares identity with a matching program file", async () => { + const sourceText = "export declare const element: number;"; + await using api = spawnAPI({ + "/component.d.ts": sourceText, + }); + await using retained = await api.createSourceFile("/component.d.ts", sourceText); + const snapshot = await api.createSnapshot({ openFiles: ["/component.d.ts"] }); + const project = snapshot.getProjects()[0]; + assert.strictEqual(await project.program.getSourceFile("/component.d.ts"), retained.sourceFile); + await snapshot.dispose(); + }); + + test("retainSourceFile keeps a borrowed program file available", async () => { + const sourceText = "export declare const value: number;"; + await using api = spawnAPI({ + "/retained.d.ts": sourceText, + }); + const snapshot = await api.createSnapshot({ openFiles: ["/retained.d.ts"] }); + const project = snapshot.getProjects()[0]; + const sourceFile = await project.program.getSourceFile("/retained.d.ts"); + assert.ok(sourceFile); + + await using retained = await api.retainSourceFile(sourceFile); + assert.strictEqual(retained.sourceFile, sourceFile); + await snapshot.dispose(); + + await using recreated = await api.createSourceFile("/retained.d.ts", sourceText); + assert.strictEqual(recreated.sourceFile, sourceFile); + + const local = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", "/local.ts" as RootedFilePath, "/local.ts" as PathKey); + await assert.rejects(api.retainSourceFile(local), /Only remote source files can be retained/); // @sync: assert.throws(() => api.retainSourceFile(local), /Only remote source files can be retained/); + }); + + test("createSourceFileFromFile", async () => { + await using api = spawnAPI({ + "/input.ts": "export const fromFile = 1;", + }); + await using retained = await api.createSourceFileFromFile({ uri: "file:///input.ts" }); + const fromFile = retained.sourceFile; + assert.equal(fromFile.fileName, "/input.ts"); + assert.equal(fromFile.text, "export const fromFile = 1;"); + assert.equal(fromFile.scriptKind, ScriptKind.TS); + + await assert.rejects(api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); // @sync: assert.throws(() => api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); + }); + + test("createProgram", async () => { + await using api = spawnAPI({ + "/src/index.ts": `export const value: string = 1;`, + }); + + const program = await api.createProgram(["/src/index.ts"], { noLib: true, strict: true }); + + assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(await program.getSourceFileNames(), ["/src/index.ts"]); + assert.equal((await program.getSemanticDiagnostics("/src/index.ts")).length, 1); + + await program.dispose(); + await assert.rejects(program.getSourceFileNames(), /snapshot .* not found/); // @sync: assert.throws(() => program.getSourceFileNames(), /snapshot .* not found/); + }); + + test("createSnapshot creates independent synthetic programs", async () => { + await using api = spawnAPI({ + "/src/a.ts": `export const a = 1;`, + "/src/b.ts": `export const b = 2;`, + }); + + const snapshot = await api.createSnapshot({ + createPrograms: [ + { rootFiles: ["/src/a.ts"], compilerOptions: { noLib: true } }, + { rootFiles: ["/src/b.ts"], compilerOptions: { noLib: true, strict: true } }, + ], + }); + assert.equal(snapshot.getProjects().length, 2); + assert.deepEqual(snapshot.getProjects().map(project => project.rootFiles), [["/src/a.ts"], ["/src/b.ts"]]); + assert.equal(snapshot.operation.createdPrograms!.length, 2); + for (const program of snapshot.operation.createdPrograms!) { + const syntheticProjectId: SyntheticProjectId = program.id; + void syntheticProjectId; + assert.strictEqual(snapshot.getProgram(program.id), program); + assert.strictEqual(snapshot.getProject(program.id), program.getProject()); + } + + const empty = await api.createSnapshot(); + assert.deepEqual(empty.getProjects(), []); + assert.equal(empty.operation.createdPrograms, undefined); + assert.equal(empty.operation.openedFiles, undefined); + }); + + test("snapshot.update preserves identity when the server returns the same snapshot", async () => { + await using api = spawnAPI(); + const snapshot = await api.createSnapshot(); + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): Promise; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let duplicateReference = false; + client.apiRequest = async (method, params) => { + if ( + method === "release" + && typeof params === "object" + && params !== null + && "snapshot" in params + && params.snapshot === snapshot.id + && duplicateReference + ) { + duplicateReference = false; + return true; + } + const response = await apiRequest(method, params); + if (method !== "updateSnapshot" || typeof response !== "object" || response === null) return response; + if (!("snapshot" in response) || typeof response.snapshot !== "number") return response; + await apiRequest("release", { snapshot: response.snapshot }); + duplicateReference = true; + return { ...response, snapshot: snapshot.id }; + }; + + assert.strictEqual(await snapshot.update({}), snapshot); + assert.equal(duplicateReference, false); + }); + + test("snapshot.update reconfigures a synthetic program", async () => { + await using api = spawnAPI({ + "/src/a.ts": `export const a = 1;`, + "/src/b.ts": `export const b = 2;`, + }); + const snapshot = await api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/a.ts"], + compilerOptions: { noLib: true }, + }], + }); + const originalProgram = snapshot.operation.createdPrograms[0]; + + const updated = await snapshot.update({ + reconfigurePrograms: [{ + id: originalProgram.id, + rootFiles: ["/src/b.ts"], + compilerOptions: { noLib: true, strict: true }, + }], + }); + const reconfiguredProgram = updated.getProgram(originalProgram.id); + assert.ok(reconfiguredProgram); + + assert.equal(reconfiguredProgram.id, originalProgram.id); + assert.deepEqual(await reconfiguredProgram.getSourceFileNames(), ["/src/b.ts"]); + assert.deepEqual(reconfiguredProgram.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(await originalProgram.getSourceFileNames(), ["/src/a.ts"]); + }); + + test("snapshot.update reconfigures module resolution providers", async () => { + const root = toRootedFilePath("/src/index.ts", undefined); + const providedA = toRootedFilePath("/a.d.ts", undefined); + const providedB = toRootedFilePath("/b.d.ts", undefined); + const { api: disposableAPI, fs } = spawnAPIWithFS({ + [root]: `import { value } from "pkg"; export { value };`, + [providedA]: `export declare const value: "a";`, + [providedB]: `export declare const value: "b";`, + }); + + await using api = disposableAPI; + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const spec = (resolvedFileName: string) => ({ + fallback: "unresolved" as const, + entries: [{ moduleName: "pkg", result: { resolvedFileName } }], + }); + const resolverA = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const resolverB = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedB) }); + const inlineResolverA = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const inlineResolverB = await api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const createProgram = (moduleResolver?: ModuleResolver) => ({ + rootFiles: [root], + compilerOptions, + ...(moduleResolver ? { options: { moduleResolver } } : {}), + }); + + const initial = await api.createSnapshot({ createPrograms: [createProgram(resolverA)] }); + const programId = initial.operation.createdPrograms![0].id; + assert.deepEqual([...await initial.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + assert.equal( + (await resolverA.resolveModuleName("pkg", "/src", undefined, { snapshot: initial })).resolvedModule?.resolvedFileName, + providedA, + ); + assert.equal((await resolverA.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, providedA); + + const sameSet = await initial.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], + }); + assert.deepEqual([...await sameSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + fs.writeFile!(root, `import { value } from "pkg"; export const updated = value;`); + const sameSetAfterEdit = await sameSet.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], + fileNotifications: { changed: [root] }, + }); + assert.deepEqual([...await sameSetAfterEdit.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + const changedSet = await sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverB) }], + }); + assert.deepEqual([...await changedSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedB, root]); + + const removedSet = await sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(undefined) }], + }); + assert.deepEqual(await removedSet.getProgram(programId)!.getSourceFileNames(), [root]); + + const inline = await sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverA) }], + }); + const repeatedInline = await inline.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverB) }], + }); + assert.deepEqual([...await repeatedInline.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + let callbackCalls = 0; + const callbackResolver = await api.createModuleResolver(compilerOptions, { + resolveModuleName: (moduleName: string) => { + callbackCalls++; + return moduleName === "pkg" ? { resolvedFileName: providedA } : undefined; + }, + }); + const callbackSnapshot = await api.createSnapshot({ + createPrograms: [createProgram(callbackResolver)], + }); + const callbackProgramId = callbackSnapshot.operation.createdPrograms![0].id; + const repeatedCallback = await callbackSnapshot.update({ + reconfigurePrograms: [{ id: callbackProgramId, ...createProgram(callbackResolver) }], + }); + assert.deepEqual([...await repeatedCallback.getProgram(callbackProgramId)!.getSourceFileNames()].sort(), [providedA, root]); + assert.equal(callbackCalls, 1); + }); + + test("module resolver normalizes raw compiler option paths", async () => { + await using api = spawnAPI(); + const resolver = await api.createModuleResolver({ + noLib: true, + outDir: "dist", + rootDirs: ["src", "generated"], + tsBuildInfoFile: "cache/build.tsbuildinfo", + typeRoots: ["types"], + }); + const result = await resolver.resolveModuleName("./missing", "/src", undefined); + assert.equal(result.resolvedModule, undefined); + }); + + test("module resolver runs against snapshots or the host filesystem", async () => { + const packageJson = toRootedFilePath("/node_modules/pkg/package.json", undefined); + const packageB = toRootedFilePath("/node_modules/pkg/b.d.ts", undefined); + const { api: disposableAPI, fs } = spawnAPIWithFS({ + [packageJson]: JSON.stringify({ name: "pkg", version: "1.0.0", types: "a.d.ts" }), + "/node_modules/pkg/a.d.ts": `export declare const value: "a";`, + }); + await using api = disposableAPI; + const resolver = await api.createModuleResolver({ + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }); + const firstSnapshot = await api.createSnapshot(); + assert.equal( + (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), + ); + + fs.writeFile!(packageJson, JSON.stringify({ name: "pkg", version: "1.0.0", types: "b.d.ts" })); + fs.writeFile!(packageB, `export declare const value: "b";`); + const secondSnapshot = await firstSnapshot.update({ + fileNotifications: { + changed: [packageJson], + created: [packageB], + }, + }); + + assert.equal( + (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), + ); + assert.equal( + (await resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: secondSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/b.d.ts", undefined), + ); + assert.equal( + (await resolver.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, + "/node_modules/pkg/b.d.ts", + ); + }); + + test("source imports do not request module resolution", async () => { + await using api = spawnAPI({ + "/src/index.ts": `import source a from "pkg"; +import.source("missing"); +import { value } from "pkg";`, + "/pkg.d.ts": "export const value: number;", + }); + const compilerOptions = { noLib: true, module: ModuleKind.ESNext }; + const requests: string[] = []; + const resolver = await api.createModuleResolver(compilerOptions, { + resolveModuleName: async name => { + requests.push(name); + return { resolvedFileName: "/pkg.d.ts" }; + }, + }); + const program = await api.createProgram(["/src/index.ts"], compilerOptions, { moduleResolver: resolver }); + assert.deepEqual(requests, ["pkg"]); + const file = await program.getSourceFile("/src/index.ts"); + assert.ok(file); + const source = cast(cast(file.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); + const evaluation = cast(cast(file.statements[2], isImportDeclaration).moduleSpecifier, isStringLiteral); + assert.equal(await program.getResolvedModuleFromModuleSpecifier(source), undefined); + assert.equal((await program.getResolvedModuleFromModuleSpecifier(evaluation))?.resolvedFileName, "/pkg.d.ts"); + }); + + test("module resolver callbacks can delegate to another resolver", async () => { + await using api = spawnAPI({ + "/src/index.ts": `import "custom"; import "native";`, + "/custom.d.ts": `export {};`, + "/node_modules/native/package.json": JSON.stringify({ name: "native", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/native/index.d.ts": `export {};`, + }); + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = await api.createModuleResolver(compilerOptions); + const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; + const customResolver = await api.createModuleResolver(compilerOptions, { + resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + callbackSnapshots.push(snapshot); + if (moduleName === "custom") return { resolvedFileName: "/custom.d.ts" }; + assert.ok(snapshot); + return (await defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = await api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions, + options: { moduleResolver: customResolver }, + }], + }); + assert.deepEqual( + [...await snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), + ["/custom.d.ts", "/node_modules/native/index.d.ts", "/src/index.ts"], + ); + assert.equal(callbackSnapshots.length, 2); + assert.equal(callbackSnapshots[0], callbackSnapshots[1]); + assert.ok(typeof callbackSnapshots[0] === "number"); + assert.ok(callbackSnapshots[0] < 0); + }); + + test("module resolver callbacks can resolve against the in-progress snapshot filesystem", async () => { + await using api = spawnAPI({ + "/src/index.ts": `import "layered";`, + }); + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = await api.createModuleResolver({ + ...compilerOptions, + customConditions: ["delegated"], + }); + const customResolver = await api.createModuleResolver(compilerOptions, { + resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + assert.ok(snapshot); + return (await defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = await api.createSnapshot({ + fileSystem: createFileSystemLayer([ + [ + "/node_modules/layered/package.json", + JSON.stringify({ + name: "layered", + version: "1.0.0", + exports: { ".": { delegated: "./index.d.ts" } }, + }), + ], + ["/node_modules/layered/index.d.ts", `export {};`], + ]), + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions, + options: { moduleResolver: customResolver }, + }], + }); + assert.deepEqual( + [...await snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), + ["/node_modules/layered/index.d.ts", "/src/index.ts"], + ); + }); + + test("module resolver callback errors reject lib replacement", async () => { + await using api = spawnAPI({ + "/src/index.ts": `export {};`, + }); + const resolver = await api.createModuleResolver( + { moduleResolution: ModuleResolutionKind.Bundler }, + { + resolveModuleName: () => { + throw new Error("lib replacement callback failed"); + }, + }, + ); + + await assert.rejects( // @sync: assert.throws( + () => + api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { libReplacement: true }, + options: { moduleResolver: resolver }, + }], + }), + /lib replacement callback failed/, + ); + }); + + test("program module resolution uses the resolver compiler options", async () => { + await using api = spawnAPI({ + "/src/index.ts": `/// +import "pkg/feature";`, + "/node_modules/pkg/package.json": JSON.stringify({ + name: "pkg", + version: "1.0.0", + exports: { "./feature": { resolver: "./dist/feature.d.ts" } }, + }), + "/node_modules/pkg/dist/feature.d.ts": `export {};`, + "/node_modules/@types/resolver-types/index.d.ts": `export {};`, + }); + const resolver = await api.createModuleResolver({ + module: ModuleKind.ESNext, + moduleResolution: ModuleResolutionKind.Bundler, + customConditions: ["resolver"], + }); + const snapshot = await api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { + noLib: true, + module: ModuleKind.Node16, + moduleResolution: ModuleResolutionKind.Node16, + }, + options: { moduleResolver: resolver }, + }], + }); + + assert.deepEqual( + [...await snapshot.operation.createdPrograms![0].getSourceFileNames()].sort(), + ["/node_modules/@types/resolver-types/index.d.ts", "/node_modules/pkg/dist/feature.d.ts", "/src/index.ts"], + ); + }); + + test("module resolver callbacks preserve retained and live filesystem context", async () => { + await using api = spawnAPI({ + "/src/index.ts": `export {};`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + }); + const compilerOptions = { + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = await api.createModuleResolver(compilerOptions); + const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; + const passthroughResolver = await api.createModuleResolver(compilerOptions, { + resolveModuleName: async (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + callbackSnapshots.push(snapshot); + return (await defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + snapshot === undefined ? undefined : { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = await api.createSnapshot(); + + assert.equal( + (await passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext, { snapshot })).resolvedModule?.resolvedFileName, + "/node_modules/pkg/index.d.ts", + ); + assert.equal(callbackSnapshots[0], snapshot); + + assert.equal( + (await passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext)).resolvedModule?.resolvedFileName, + "/node_modules/pkg/index.d.ts", + ); + assert.equal(callbackSnapshots[1], undefined); + }); + + test("static resolutions do not report native resolution provenance diagnostics", async () => { + await using api = spawnAPI({ + "/src/index.ts": `import { value } from "./value.ts"; export { value };`, + "/value.ts": `export const value = 1;`, + }); + const resolver = await api.createModuleResolver( + { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }, + { + moduleResolutions: { + fallback: "unresolved", + entries: [{ + moduleName: "./value.ts", + result: { + resolvedFileName: "/value.ts", + }, + }], + }, + }, + ); + const snapshot = await api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }, + options: { + moduleResolver: resolver, + }, + }], + }); + const program = snapshot.operation.createdPrograms[0]; + assert.deepEqual(await program.getSemanticDiagnostics("/src/index.ts"), []); + }); + + test("Program resolved modules and type reference directives", async () => { + await using api = spawnAPI({ + "/src/index.ts": `/// +import "pkg"; +import "missing"; +declare module "augmentation" {}`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + "/node_modules/@types/pkg-types/package.json": JSON.stringify({ name: "@types/pkg-types", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/@types/pkg-types/index.d.ts": `export {};`, + }); + + const program = await api.createProgram( + ["/src/index.ts"], + { module: ModuleKind.ESNext, moduleResolution: ModuleResolutionKind.Bundler, noLib: true }, + ); + const sourceFile = await program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const pkgSpecifier = cast(cast(sourceFile.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); + + assert.equal(await program.getModeForUsageLocation("/src/index.ts", pkgSpecifier), ModuleKind.ESNext); + assert.equal(await program.getModeForResolutionAtIndex("/src/index.ts", 0), ModuleKind.ESNext); + assert.equal(await program.getModeForResolutionAtIndex("/src/index.ts", 2), ModuleKind.ESNext); + + const resolvedModule = await program.getResolvedModule("/src/index.ts", "pkg", ModuleKind.ESNext); + assert.ok(resolvedModule); + assert.equal(resolvedModule.resolvedFileName, "/node_modules/pkg/index.d.ts"); + + const resolvedModuleWithLocations = await program.getResolvedModuleFromModuleSpecifier(pkgSpecifier); + assert.ok(resolvedModuleWithLocations); + assert.equal(resolvedModuleWithLocations.packageId?.name, "pkg"); + + const missingModule = await program.getResolvedModule( + "/src/index.ts", + "missing", + ModuleKind.ESNext, + ); + assert.equal(missingModule, undefined); + + const typeReference = sourceFile.typeReferenceDirectives[0]; + const resolvedTypeReference = await program.getResolvedTypeReferenceDirective( + "/src/index.ts", + "pkg-types", + ModuleKind.None, + ); + assert.equal(resolvedTypeReference?.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); + + const resolvedTypeReferenceWithLocations = await program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( + typeReference, + "/src/index.ts", + ); + assert.ok(resolvedTypeReferenceWithLocations); + assert.equal(resolvedTypeReferenceWithLocations.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); + + await program.dispose(); + }); + + test("createProgram resolves raw compiler option paths", async () => { + await using api = spawnAPI({ + "/src/index.ts": `import { value } from "ba"; export { value };`, + "/src/first.ts": `export const value = 1;`, + "/src/fallback.ts": `export const value = 2;`, + "/src/component.vue": `export const component = 1;`, + }); + const rawOptions: RawCompilerOptions = { + noLib: true, + allowNonTsExtensions: true, + outDir: "dist", + paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, + rootDirs: ["src", "generated"], + suppressOutputPathCheck: true, + tsBuildInfoFile: "cache/build.tsbuildinfo", + }; + // @ts-expect-error raw path strings are not finalized compiler options + const _finalizedOptions: CompilerOptions = rawOptions; + const _rawOptions: RawCompilerOptions = undefined! as CompilerOptions; + + const program = await api.createProgram(["/src/index.ts", "/src/component.vue"], rawOptions); + const compilerOptions: CompilerOptions = program.getCompilerOptions(); + const serverCurrentDirectory = resolve("../.."); + assert.deepEqual( + compilerOptions, + { + noLib: true, + allowNonTsExtensions: true, + outDir: toRootedDirectoryPath(resolve(serverCurrentDirectory, "dist"), undefined), + paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, + rootDirs: [ + toRootedDirectoryPath(resolve(serverCurrentDirectory, "src"), undefined), + toRootedDirectoryPath(resolve(serverCurrentDirectory, "generated"), undefined), + ], + suppressOutputPathCheck: true, + tsBuildInfoFile: toRootedFilePath(resolve(serverCurrentDirectory, "cache/build.tsbuildinfo"), undefined), + } satisfies CompilerOptions, + ); + assert.equal((await program.getSemanticDiagnostics("/src/index.ts")).length, 0); + assert(await program.getSourceFile("/src/first.ts")); + assert.equal(await program.getSourceFile("/src/fallback.ts"), undefined); + assert(await program.getSourceFile("/src/component.vue")); + await program.dispose(); + }); + + test("createProgram ignores an on-disk tsconfig", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { noLib: false, strict: false }, + files: ["src/from-config.ts"], + }), + "/src/index.ts": `export const explicitRoot = 1;`, + "/src/from-config.ts": `export const configRoot = 1;`, + }); + + const program = await api.createProgram( + ["/src/index.ts"], + { noLib: true, strict: true }, + ); + + assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(await program.getSourceFileNames(), ["/src/index.ts"]); + assert.deepEqual(await program.getConfigFileNames(), []); + assert.equal(await program.getSourceFile("/src/from-config.ts"), undefined); + await program.dispose(); + }); + + test("createProgram rejects invalid project reference paths", async () => { + await using api = spawnAPI({ + "/src/index.ts": `export const value = 1;`, + }); + + await assert.rejects( // @sync: assert.throws( + () => + api.createProgram( + ["/src/index.ts"], + { noLib: true }, + { projectReferences: [{ path: "" }] }, + ), + /Path must not be empty/, + ); + }); + + test("createProgram includes config file parsing diagnostics", async () => { + const diagnostic = { + pos: 0, + end: 0, + code: 9001, + category: DiagnosticCategory.Error, + text: "Synthetic config parsing error.", + }; + await using api = spawnAPI({ "/src/index.ts": `export const value = 1;` }); + + const program = await api.createProgram( + ["/src/index.ts"], + { noLib: true }, + { + configFileParsingDiagnostics: [diagnostic], + }, + ); + + assert.deepEqual(await program.getConfigFileParsingDiagnostics(), [diagnostic]); + await program.dispose(); + }); + + test("createProgram discovers imported non-root dependencies", async () => { + await using api = spawnAPI({ + "/src/main.ts": `import { dependency } from "./dependency"; export const value = dependency;`, + "/src/dependency.ts": `export const dependency = 1;`, + }); + + const program = await api.createProgram(["/src/main.ts"], { noLib: true }); + assert.deepEqual([...await program.getSourceFileNames()].sort(), ["/src/dependency.ts", "/src/main.ts"]); + + await program.dispose(); + }); + + test("parseConfigFile", async () => { + await using api = spawnAPI(); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); + assert.equal(config.compileOnSave, false); + assert.equal(config.typeAcquisition, undefined); + assert.equal(config.projectReferences, undefined); + }); + + test("parseConfigFile includes projectReferences", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ references: [{ path: "./harness" }, { path: "./server" }] }), + }); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.fileNames, []); + assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); + assert.deepEqual(config.projectReferences, [ + { circular: false, originalPath: "./harness", path: "/harness" }, + { circular: false, originalPath: "./server", path: "/server" }, + ]); + }); + + test("parseConfigFile preserves raw config", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compileOnSave: true, + customSetting: { enabled: true }, + files: ["/src/index.ts"], + }), + }); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.equal(config.compileOnSave, true); + assert.deepEqual(config.raw, { + compileOnSave: true, + customSetting: { enabled: true }, + files: ["/src/index.ts"], + }); + }); + + test("parseConfigFile includes compileOnSave", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compileOnSave: true }), + }); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.equal(config.compileOnSave, true); + }); + + test("parseConfigFile includes typeAcquisition", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ typeAcquisition: { enable: true, include: ["jquery"] } }), + }); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.equal(config.typeAcquisition?.enable, true); + assert.deepEqual(config.typeAcquisition?.include, ["jquery"]); + }); + + test("parseConfigFile includes inherited plugins", async () => { + await using api = spawnAPI({ + "/tsconfig.base.json": JSON.stringify({ compilerOptions: { plugins: [{ name: "typescript-plugin" }] } }), + "/tsconfig.json": JSON.stringify({ extends: "./tsconfig.base.json" }), + }); + + const config = await api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.options.plugins, [{ name: "typescript-plugin" }]); + }); +}); + +// @sync-skip-block-start +describe("API - automatic batching", { concurrency }, () => { + test("initializes only once for concurrent first requests", async () => { + await using api = spawnAPI(); + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): Promise; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let initializeCalls = 0; + client.apiRequest = (method, params) => { + if (method === "initialize") initializeCalls++; + return apiRequest(method, params); + }; + + await Promise.all([ + api.parseCommandLine(["--strict"]), + api.readConfigFile("/tsconfig.json"), + ]); + assert.equal(initializeCalls, 1); + }); + + test("batches multiple concurrent requests into one automatically", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem(defaultFiles), + collectTiming: true, + }); + + await api.parseCommandLine([]); // initialize API + await api.resetTimingInfo(); + let { totals: { requestCount } } = await api.getTimingInfo(); + assert.equal(requestCount, 0); + const [parseCommandLine, readConfigFile] = await Promise.all([ + api.parseCommandLine(["--strict"]), + api.readConfigFile("/tsconfig.json"), + ]); + ({ totals: { requestCount } } = await api.getTimingInfo()); + assert.equal(requestCount, 1); + + assert.equal(parseCommandLine.options.strict, true); + assert.deepStrictEqual(readConfigFile.config, {}); + }); +}); + +describe("API - batchContext", { concurrency }, () => { + test("transparently paginates batch responses", async () => { + const api = spawnAPI({ ...defaultFiles }, { maxResponseBytesPerPage: 1 }); + try { + const requests = await (async () => { + using _ = api.batchContext(); + return [ + api.parseCommandLine(["--strict"]), + api.readConfigFile("/tsconfig.json"), + api.parseCommandLine(["--noImplicitAny"]), + ] as const; + })(); + + const [strict, config, noImplicitAny] = await Promise.all(requests); + assert.equal(strict.options.strict, true); + assert.deepEqual(config.config, {}); + assert.equal(noImplicitAny.options.noImplicitAny, true); + } + finally { + await api.close(); + } + }); + + test("holds requests until disposal", async () => { + await using api = spawnAPI(); + + await api.parseCommandLine([]); + + const requests = await (async () => { + using _ = api.batchContext(); + const requests = [ + api.parseCommandLine(["--strict"]), + api.readConfigFile("/tsconfig.json"), + ] as const; + let settled = false; + void Promise.all(requests).then(() => { + settled = true; + }); + + await new Promise(resolve => setImmediate(resolve)); + assert.equal(settled, false, "requests should remain pending inside the batch context"); + return requests; + })(); + + const [commandLine, config] = await Promise.all(requests); + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + }); + + test("settles an item error without dropping a sibling result", async () => { + const src = `export const value: string = "";`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value:")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + + const requests = await (async () => { + using _ = api.batchContext(); + return [ + project.checker.getTypeArguments(type as unknown as TypeReference), + project.checker.getStringType(), + ] as const; + })(); + + await assert.rejects(requests[0], /panic:/); + assert.ok((await requests[1]).flags & TypeFlags.String); + }); +}); +// @sync-skip-block-end + +describe("BuildOrchestrator", () => { + const files = { + "/a/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/a/src/index.ts": `export const a = 1;`, + "/b/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/b/src/index.ts": `export const b = 2;`, + "/c/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + references: [{ path: "../a" }, { path: "../b" }], + }), + "/c/src/index.ts": `export const c = 3;`, + }; + + test("dispose is idempotent", async () => { + const { api: disposableApi } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const options = await api.parseCommandLine([]); + const orchestrator = await api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/", ...options }, + ); + + const firstDispose = orchestrator.dispose(); + const secondDispose = orchestrator.dispose(); + assert.strictEqual(firstDispose, secondDispose); + await firstDispose; // @sync: orchestrator.dispose(); + // Second dispose should not throw + await orchestrator.dispose(); + await assert.rejects(orchestrator.build(), /Build orchestrator is disposed/); // @sync: assert.throws(() => orchestrator.build(), /Build orchestrator is disposed/); + }); + + test("api.close disposes all build orchestrators", async () => { + const { api } = spawnAPIWithFS({ ...files }); + const options = await api.parseCommandLine([]); + const orchestrator1 = await api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/", ...options }, + ); + const orchestrator2 = await api.createBuildOrchestrator( + ["/b/tsconfig.json"], + { cwd: "/", ...options }, + ); + assert.ok(!orchestrator1.isDisposed()); + assert.ok(!orchestrator2.isDisposed()); + await api.close(); + assert.ok(orchestrator1.isDisposed()); + assert.ok(orchestrator2.isDisposed()); + await orchestrator1.dispose(); + await orchestrator2.dispose(); + }); + + test("builds the configured root projects", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const defaultOptions = { + cwd: "/", + dry: false, + force: false, + verbose: true, + stopBuildOnErrors: false, + overrideCompilerOptions: { + incremental: true, + assumeChangesOnlyAffectDirectDependencies: true, + declaration: false, + declarationMap: true, + emitDeclarationOnly: false, + sourceMap: false, + inlineSourceMap: false, + traceResolution: false, + }, + }; + const orchestrator = await api.createBuildOrchestrator( + ["/a/tsconfig.json", "/b/tsconfig.json"], + defaultOptions, + ); + + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + }); + + test("returns diagnostics in build response information", async () => { + const source = `export const value: string = 1;`; + const { api: disposableApi } = spawnAPIWithFS({ + "/a/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, noEmitOnError: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/a/src/index.ts": source, + }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/" }, + ); + + const response = await orchestrator.build(); + assert.equal(response.status, 1); + assert.equal(response.statistics.Projects, 1); + assert.equal(response.statistics.ProjectsBuilt, 1); + assert.deepEqual(response.diagnostics, [{ + fileName: "/a/src/index.ts", + pos: source.indexOf("value"), + end: source.indexOf("value") + "value".length, + startPosition: { line: 0, character: source.indexOf("value") }, + endPosition: { line: 0, character: source.indexOf("value") + "value".length }, + sourceLines: [{ line: 0, text: source }], + code: 2322, + category: 1, + text: "Type 'number' is not assignable to type 'string'.", + }]); + }); + + test("returns build response information after clean", async () => { + const { api: disposableApi } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const options = await api.parseCommandLine([]); + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/", ...options }, + ); + + assert.equal((await orchestrator.build()).status, 0); + + const cleanResp1 = await orchestrator.clean("/a/tsconfig.json"); + assert.equal(cleanResp1.status, 0); + assert.deepEqual(cleanResp1.diagnostics, undefined); + assert.deepEqual(cleanResp1.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanResp1.statistics.Projects, 1); + assert.equal(cleanResp1.statistics.ProjectsBuilt, 0); + const buildResp1 = await orchestrator.build("/a/tsconfig.json"); + assert.equal(buildResp1.status, 0); + assert.deepEqual(buildResp1.diagnostics, undefined); + assert.equal(buildResp1.statistics.Projects, 1); + assert.equal(buildResp1.statistics.ProjectsBuilt, 1); + + const cleanRefResp = await orchestrator.cleanReferences("/c/tsconfig.json"); + assert.equal(cleanRefResp.status, 0); + assert.deepEqual(cleanRefResp.diagnostics, undefined); + assert.deepEqual(cleanRefResp.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + "/b/dist/index.d.ts", + "/b/dist/index.js", + "/b/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanRefResp.statistics.Projects, 2); + assert.equal(cleanRefResp.statistics.ProjectsBuilt, 0); + const buildRefsResp = await orchestrator.buildReferences("/c/tsconfig.json"); + assert.equal(buildRefsResp.status, 0); + assert.deepEqual(buildRefsResp.diagnostics, undefined); + + const cleanResp2 = await orchestrator.clean(); + assert.equal(cleanResp2.status, 0); + assert.deepEqual(cleanResp2.diagnostics, undefined); + assert.deepEqual(cleanResp2.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + "/b/dist/index.d.ts", + "/b/dist/index.js", + "/b/tsconfig.tsbuildinfo", + "/c/dist/index.d.ts", + "/c/dist/index.js", + "/c/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanResp2.statistics.Projects, 3); + assert.equal(cleanResp2.statistics.ProjectsBuilt, 0); + const buildResp2 = await orchestrator.build(); + assert.equal(buildResp2.status, 0); + assert.deepEqual(buildResp2.diagnostics, undefined); + assert.equal(buildResp2.statistics.Projects, 3); + assert.equal(buildResp2.statistics.ProjectsBuilt, 3); + }); + + test("returns deleted files from a clean response", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + "/a/dist/index.d.ts": `export declare const a = 1;`, + "/a/dist/index.js": `export const a = 1;`, + }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/" }, + ); + + const response = await orchestrator.clean(); + assert.equal(response.status, 0); + assert.deepEqual(response.diagnostics, undefined); + assert.deepEqual(response.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + ]); + assert.equal(response.statistics.Projects, 1); + assert.equal(response.statistics.ProjectsBuilt, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.d.ts", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + }); + + test("rebuilds projects after multiple file system changes", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/a/tsconfig.json", "/b/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 20/); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 100;`); + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 200;`); + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 100/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 200/); + }); + + test("clean removes build outputs", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.equal((await orchestrator.clean()).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + }); + + test("builds and cleans selected projects after file system changes", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.build("/a/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); + assert.equal((await orchestrator.build("/b/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); + assert.equal((await orchestrator.clean("/a/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); + + assert.equal((await orchestrator.clean("/b/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); + + fs.writeFile!(toRootedFilePath("/b/dist/index.js", undefined), `export const b = 2`); + assert.equal((await orchestrator.clean("/b/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + }); + + test("builds only references of a selected project", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + }); + await using api = disposableApi; + const options = await api.parseCommandLine([]); + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.buildReferences("/c/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + }); + + test("cleans only references of a selected project", async () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + }); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + + assert.equal((await orchestrator.cleanReferences("/c/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + + assert.equal((await orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.equal((await orchestrator.cleanReferences()).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + }); + + test("handles invalidated projects and cleans the last built configuration", async () => { + const writes: string[] = []; + const { api: disposableApi, fs } = spawnAPIWithFS( + { + ...files, + "/c/src/index.ts": `import { a } from "../../a/src/index"; export const c = a;`, + "/d/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/d/src/index.ts": `export const d = 4;`, + }, + path => writes.push(path), + ); + await using api = disposableApi; + const orchestrator = await api.createBuildOrchestrator( + ["/c/tsconfig.json", "/d/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined))!, /export const d = 4/); + + fs.writeFile!( + toRootedFilePath("/d/tsconfig.json", undefined), + JSON.stringify({ + compilerOptions: { composite: true, outDir: "lib", rootDir: "src" }, + files: ["src/index.ts"], + }), + ); + fs.writeFile!(toRootedFilePath("/d/lib/index.js", undefined), `export const d = 40;`); + + assert.equal((await orchestrator.clean("/d/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))); + + assert.equal((await orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))!, /export const d = 4/); + assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); + }); +}); + +describe("Checker - getImmediateAliasedSymbol", { concurrency }, () => { + test("resolves one level of alias indirection", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/foo.ts": `export const foo = 42;`, + "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `import { foo } from "./foo";`.indexOf("foo }"); + const aliasSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(aliasSymbol); + const aliased = await project.checker.getImmediateAliasedSymbol(aliasSymbol); + assert.ok(aliased, "Should resolve the immediate aliased symbol"); + assert.equal(aliased.name, "foo"); + }); +}); + +describe("Checker - getTargetSymbol", { concurrency }, () => { + test("gets the target symbol of instantiated symbol", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +class Base { + private value!: T; +} +class Alpha extends Base {} +class Bravo extends Base {} + +declare function test(): void; +test(); +test(); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const nodes: Array = []; + sourceFile.forEachChild(node => { + if (isExpressionStatement(node) && isCallExpression(node.expression) && node.expression.typeArguments) { + nodes.push(node.expression.typeArguments[0]); + } + }); + const aType = await project.checker.getTypeAtLocation(nodes[0]); + const bType = await project.checker.getTypeAtLocation(nodes[1]); + const aProperty = (await project.checker.getPropertiesOfType(aType))[0]; + const bProperty = (await project.checker.getPropertiesOfType(bType))[0]; + assert.ok(aProperty); + assert.ok(bProperty); + assert.equal(aProperty === bProperty, false); + assert.equal(await project.checker.getTargetSymbol(aProperty) === await project.checker.getTargetSymbol(bProperty), true); + }); +}); + +describe("Snapshot", { concurrency }, () => { + test("createSnapshot returns snapshot with projects", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok(snapshot); + assert.ok(snapshot.id); + assert.ok(snapshot.getProjects().length > 0); + assert.ok(snapshot.getConfiguredProject("/tsconfig.json")); + }); + + test("project exposes parsedCommandLine", async () => { + await using api = spawnAPI({ + ...defaultFiles, + "/tsconfig.json": JSON.stringify({ compileOnSave: true }), + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual(project.parsedCommandLine.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(project.parsedCommandLine.options, { configFilePath: "/tsconfig.json" }); + assert.equal(project.parsedCommandLine.compileOnSave, true); + assert.deepEqual(project.rootFiles, project.parsedCommandLine.fileNames); + assert.deepEqual(project.compilerOptions, project.parsedCommandLine.options); + }); + + test("getSymbolAtPosition", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + assert.ok(symbol.flags & SymbolFlags.Alias); + }); + + test("getSymbolAtLocation", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const node = cast( + cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, + isNamedImports, + ).elements[0].name; + assert.ok(node); + const symbol = await project.checker.getSymbolAtLocation(node); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + assert.ok(symbol.flags & SymbolFlags.Alias); + }); + + test("getSymbolOfSourceFile", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const moduleSymbol = await project.checker.getSymbolOfSourceFile("/src/foo.ts"); + assert.ok(moduleSymbol); + const exports = await moduleSymbol.getExports(); + assert.ok(exports.has(escapeLeadingUnderscores("foo"))); + }); + + test("getSymbolOfSourceFile returns undefined for a non-module file", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/script.ts": `const x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolOfSourceFile("/src/script.ts"); + assert.equal(symbol, undefined); + }); + + test("getSymbolOfSourceFile batched", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbols = await project.checker.getSymbolOfSourceFile(["/src/index.ts", "/src/foo.ts"]); + assert.equal(symbols.length, 2); + assert.ok(symbols[0]); + assert.ok(symbols[1]); + assert.strictEqual(symbols[1], await project.checker.getSymbolOfSourceFile("/src/foo.ts")); + }); + + test("getTypeOfSymbol", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NumberLiteral); + }); + + test("getNonMissingTypeOfSymbol", async () => { + await using api = spawnAPI({ + "/tsconfig-one.json": JSON.stringify({ + compilerOptions: { + exactOptionalPropertyTypes: true, + strict: true, + }, + }), + "/tsconfig-two.json": JSON.stringify({ + compilerOptions: { + exactOptionalPropertyTypes: false, + strict: true, + }, + }), + "/src/index.ts": "const x: Partial<{ a: string }> = {};", + }); + + // when `"exactOptionalPropertyTypes": true` + const snapshot1 = await api.createSnapshot({ openProject: "/tsconfig-one.json" }); + const project1 = snapshot1.getConfiguredProject("/tsconfig-one.json")!; + const type1 = await project1.checker.getTypeAtPosition("/src/index.ts", 7); + assert.ok(type1); + const symbol1 = await project1.checker.getPropertyOfType(type1, "a"); + assert.ok(symbol1); + const propertyType1 = await project1.checker.getTypeOfSymbol(symbol1); + assert.ok(propertyType1); + // getTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType1.isUnionType()); + const propertyType2 = await project1.checker.getNonMissingTypeOfSymbol(symbol1); + assert.ok(propertyType2); + // getNonMissingTypeOfSymbol returns 'string' + assert.ok(!propertyType2.isUnionType()); + assert.ok(propertyType2.flags & TypeFlags.String); + + // when `"exactOptionalPropertyTypes": false` + const snapshot2 = await api.createSnapshot({ openProject: "/tsconfig-two.json" }); + const project2 = snapshot2.getConfiguredProject("/tsconfig-two.json")!; + const type2 = await project2.checker.getTypeAtPosition("/src/index.ts", 7); + assert.ok(type2); + const symbol2 = await project2.checker.getPropertyOfType(type2, "a"); + assert.ok(symbol2); + const propertyType3 = await project2.checker.getTypeOfSymbol(symbol2); + assert.ok(propertyType3); + // getTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType3.isUnionType()); + const propertyType4 = await project2.checker.getNonMissingTypeOfSymbol(symbol2); + assert.ok(propertyType4); + // getNonMissingTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType4.isUnionType()); + }); +}); + +describe("LanguageService - imports", { concurrency }, () => { + test("getImportEditsForSymbols adds a named import", async () => { + const source = `const value = foo;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); + assert.ok(symbol); + + const edits = await project.languageService.getImportEditsForSymbols("/src/index.ts", [await symbol.getExportSymbol()]); + + assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); + }); + + test("getImportAdderEdits coalesces multiple importSymbol actions", async () => { + const source = `const value = foo + bar;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const foo = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); + const bar = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); + assert.ok(foo); + assert.ok(bar); + + const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol: await foo.getExportSymbol() }, + { kind: "importSymbol", symbol: await bar.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\n\nconst value = foo + bar;\n`); + }); + + test("getImportAdderEdits roots relative files at the project directory", async () => { + const source = `const value = foo;\n`; + const api = spawnAPI({ + "/outside/tsconfig.json": "{}", + "/outside/src/index.ts": source, + "/outside/src/foo.ts": `export const foo = 1;\n`, + }); + try { + const snapshot = await api.createSnapshot({ openProject: "/outside/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/outside/tsconfig.json")!; + const foo = await project.checker.getSymbolAtPosition("/outside/src/foo.ts", "export const ".length); + assert.ok(foo); + + const edits = await project.languageService.getImportAdderEdits("src/index.ts", [ + { kind: "importSymbol", symbol: await foo.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); + } + finally { + await api.close(); + } + }); + + test("getImportAdderEdits adds to an existing import", async () => { + const source = `import { foo } from "./foo";\nconst value = foo + bar;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const bar = await project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); + assert.ok(bar); + + const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol: await bar.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\nconst value = foo + bar;\n`); + }); + + test("getImportAdderEdits returns no edits for non-exported symbols", async () => { + const source = `const value = local;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `const local = 1;\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", "const ".length); + assert.ok(symbol); + + const edits = await project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol }, + ]); + + assert.deepEqual(edits, []); + }); + + test("getImportAdderEdits rejects invalid actions", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/foo.ts", 13); + assert.ok(symbol); + + await assert.rejects( // @sync: assert.throws( + () => project.languageService.getImportAdderEdits("/src/index.ts", [{ kind: "unknown", symbol: symbol.id } as unknown as ImportAdderAction]), + /Debug Failure\. Illegal value: "unknown"/, + ); + await assert.rejects( // @sync: assert.throws( + () => + project.languageService.getImportAdderEdits("/src/index.ts", [{ + kind: "importSymbol", + symbol: { ...symbol, reference: { ...symbol.reference, id: 999_999_999 } }, + } as unknown as ImportAdderAction]), + /symbol handle \d+ not found/, + ); + }); +}); + +describe("LanguageService - getCompletionsAtPosition", { concurrency }, () => { + test("returns member completions after a dot", async () => { + const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Position right after "obj." — member completion trigger + const pos = src.indexOf("obj.") + "obj.".length; + const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); + assert.ok(completions, "Expected completions to be returned"); + assert.ok(completions.entries.length > 0, "Expected at least one completion entry"); + assert.ok(completions.entries.some(e => e.name === "name"), "Expected 'name' property in completions"); + assert.ok(completions.entries.some(e => e.name === "age"), "Expected 'age' property in completions"); + assert.ok(completions.entries.every(e => e.symbol === undefined), "Expected no symbol information"); + }); + + test("completion entries include sortText", async () => { + const src = `\nconst obj = { value: 1 };\nobj.\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("obj.") + "obj.".length; + const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); + assert.ok(completions); + assert.ok(completions.entries.length > 0); + assert.ok(completions.entries.some(e => e.sortText !== undefined), "Expected sortText on all entries"); + }); + + test("returns undefined for a non-existent file", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const completions = await project.languageService.getCompletionsAtPosition("/src/does-not-exist.ts", 0); + assert.equal(completions, undefined, "Expected undefined for non-existent file"); + }); + + test("includeSymbol: true populates symbol on property completions", async () => { + const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("obj.") + "obj.".length; + const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: ".", includeSymbol: true }); + assert.ok(completions, "Expected completions"); + const nameEntry = completions.entries.find(e => e.name === "name"); + assert.ok(nameEntry, "Expected 'name' entry"); + assert.ok(nameEntry.symbol, "Expected symbol to be set on 'name' entry when includeSymbol: true"); + assert.equal(nameEntry.symbol.name, "name", "Symbol name should match completion name"); + }); + + test("auto-import completions with symbols require a prepared snapshot", async () => { + const src = "someV"; + await using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, + "/src/export.ts": "export const someValue = 1;", + "/src/main.ts": src, + }); + + const unprepared = await api.createSnapshot({ + openProject: "/tsconfig.json", + userPreferences: { includeCompletionsForModuleExports: true } satisfies UserPreferences, + }); + const unpreparedProject = unprepared.getConfiguredProject("/tsconfig.json")!; + // @sync-skip-block-start + await assert.rejects( + unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), + /snapshot is not prepared for auto-imports/, + ); + // @sync-skip-block-end + // @sync-only-start + // assert.throws(() => unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), /snapshot is not prepared for auto-imports/); + // @sync-only-end + + const prepared = await unprepared.update({ prepareAutoImports: "/src/main.ts" }); + const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; + const completions = await preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); + assert.ok(completions?.entries.some(entry => entry.name === "someValue")); + }); + + test("snapshot preferences disable auto-import completions", async () => { + const src = "someV"; + await using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, + "/src/export.ts": "export const someValue = 1;", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + userPreferences: { includeCompletionsForModuleExports: false } satisfies UserPreferences, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const completions = await project.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { + includeSymbol: true, + }); + assert.ok(completions); + assert.ok(!completions.entries.some(entry => entry.name === "someValue")); + const prepared = await snapshot.update({ + userPreferences: { includeCompletionsForModuleExports: true }, + prepareAutoImports: "/src/main.ts", + }); + const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; + const enabled = await preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); + assert.ok(enabled?.entries.some(entry => entry.name === "someValue")); + }); +}); + +describe("LanguageService - getReferencedSymbolsForNode", { concurrency }, () => { + test("getReferencedSymbolsForNode", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); + const funcName = funcDecl.name!; + const refs = await project.languageService.getReferencedSymbolsForNode(funcName, funcName.pos); + assert.ok(refs.length > 0); + // Each entry should have a definition and references + const entry = refs[0]; + assert.ok(entry.definition); + assert.ok(entry.references.length > 0); + }); +}); + +describe("LanguageService - getSignatureUsage", { concurrency }, () => { + test("getSignatureUsage", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); + const usages = await project.languageService.getSignatureUsage(funcDecl); + assert.ok(usages.length > 0); + // The call site should have a call expression + const usage = usages.find(u => u.call !== undefined); + assert.ok(usage, "Expected at least one usage with a call expression"); + }); +}); + +describe("Checker - getApparentType", { concurrency }, () => { + test("returns the apparent type of a literal type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = "hello" as const;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `export const x = "hello" as const;`.indexOf("x ="); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(type.isLiteralType(), true); + assert.equal(type.isStringLiteralType(), true); + assert.equal(type.isIntrinsicType(), false); + const apparent = await project.checker.getApparentType(type); + assert.ok(apparent); + assert.ok(apparent.id > 0); + }); +}); + +describe("Checker - getReducedType", { concurrency }, () => { + test("returns the reduced type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare const TaggedError: ( + tag: Tag, +) => new = {}>( + args: { readonly [P in keyof A]: A[P] }, +) => { readonly _tag: Tag } & Readonly; + +class RateLimitError extends TaggedError("RateLimitError")<{ + readonly retryAfter: number; +}> {} + +class QuotaExceededError extends TaggedError("QuotaExceededError")<{ + readonly limit: number; +}> {} + +export type Result = RateLimitError | (RateLimitError & QuotaExceededError);`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(typeAlias); + const type = await project.checker.getTypeAtLocation(typeAlias); + assert.equal(type.isUnionType(), true); + assert.equal(type.isObjectType(), false); + const reducedType = await project.checker.getReducedType(type); + assert.equal(reducedType.isUnionType(), false); + assert.equal(reducedType.isObjectType(), true); + }); +}); + +describe("Checker - getMemberInModuleExports", { concurrency }, () => { + test("returns a named export when present", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const direct = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const found = await project.checker.getMemberInModuleExports(moduleSymbol, "direct"); + assert.ok(found); + assert.equal(found.name, "direct"); + const missing = await project.checker.getMemberInModuleExports(moduleSymbol, "missing"); + assert.equal(missing, undefined); + }); +}); + +describe("SourceFile", { concurrency }, () => { + test("relative and absolute identifiers share the project source file cache", async () => { + await using api = spawnAPI({ + "/outside/tsconfig.json": "{}", + "/outside/src/index.ts": "export const value = 1;", + }); + + const snapshot = await api.createSnapshot({ openProject: "/outside/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/outside/tsconfig.json")!.program; + const absolute = await program.getSourceFile("/outside/src/index.ts"); + const relative = await program.getSourceFile("src/index.ts"); + + assert.ok(absolute); + assert.strictEqual(relative, absolute); + }); + + test("getSourceFile rejects invalid document identifiers", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const document = { fileName: "/src/index.ts" } as unknown as DocumentIdentifier; + + await assert.rejects( // @sync: assert.throws( + () => program.getSourceFile(document), + { + name: "TypeError", + message: "Expected a string or { uri } for the document, received an object with keys: fileName", + }, + ); + }); + + test("getSourceFileNames returns all program files, not just root files", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "node10", + noLib: true, + }, + }), + "/src/index.ts": `import { foo } from "./foo";\nimport { bar } from "my-lib";\nexport const result = foo + bar;`, + "/src/foo.ts": `export const foo = 42;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const fileNames = await project.program.getSourceFileNames(); + assert.deepEqual(fileNames, [ + "/src/foo.ts", + "/node_modules/my-lib/index.d.ts", + "/src/index.ts", + ]); + }); + + test("source file metadata identifies external library and default library files", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "node10", + }, + }), + "/src/index.ts": `import { bar } from "my-lib";\nexport const result = bar;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const program = project.program; + + const index = await program.getSourceFile("/src/index.ts"); + assert.ok(index); + assert.equal(await program.isSourceFileFromExternalLibrary(index), false); + assert.equal(await program.isSourceFileDefaultLibrary(index), false); + + const lib = await program.getSourceFile("/node_modules/my-lib/index.d.ts"); + assert.ok(lib); + assert.equal(await program.isSourceFileFromExternalLibrary(lib), true); + assert.equal(await program.isSourceFileDefaultLibrary(lib), false); + + const fileNames = await program.getSourceFileNames(); + const defaultLibName = fileNames.find(name => name.endsWith("lib.d.ts") || name.includes("/lib.")); + assert.ok(defaultLibName, "expected a default library file in the program"); + const defaultLib = await program.getSourceFile(defaultLibName); + assert.ok(defaultLib); + assert.equal(await program.isSourceFileDefaultLibrary(defaultLib), true); + }); + + test("source file metadata reports implied node format", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + module: "nodenext", + moduleResolution: "nodenext", + }, + }), + "/src/index.ts": `export const x = 1;`, + "/src/esm.mts": `export const e = 1;`, + "/src/cjs.cts": `export const c = 1;`, + "/esm/package.json": JSON.stringify({ type: "module" }), + "/esm/index.ts": `export const m = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + + const mts = await program.getSourceFile("/src/esm.mts"); + assert.ok(mts); + assert.equal((await program.getSourceFileMetadata({ uri: "file:///src/esm.mts" }))?.impliedNodeFormat, ModuleKind.ESNext); + assert.equal((await program.getSourceFileMetadataByPath(mts.path))?.impliedNodeFormat, ModuleKind.ESNext); + + const cts = await program.getSourceFile("/src/cjs.cts"); + assert.ok(cts); + assert.equal((await program.getSourceFileMetadata(cts.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); + + // A plain .ts file with no nearby `"type": "module"` is CommonJS. + const index = await program.getSourceFile("/src/index.ts"); + assert.ok(index); + assert.equal((await program.getSourceFileMetadata(index.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); + + // A plain .ts file under a `"type": "module"` package is ESM. + const esmIndex = await program.getSourceFile("/esm/index.ts"); + assert.ok(esmIndex); + assert.equal((await program.getSourceFileMetadata(esmIndex.fileName))?.impliedNodeFormat, ModuleKind.ESNext); + }); + + test("file properties", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + + assert.ok(sourceFile); + assert.equal(sourceFile.text, defaultFiles["/src/index.ts"]); + assert.equal(sourceFile.fileName, "/src/index.ts"); + }); + + test("extended data", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + + assert.ok(sourceFile); + let nodeCount = 1; + sourceFile.forEachChild(function visit(node) { + if (isTemplateHead(node)) { + assert.equal(node.text, "head "); + assert.equal(node.rawText, "head "); + assert.equal(node.templateFlags, 0); + } + else if (isTemplateMiddle(node)) { + assert.equal(node.text, "middle"); + assert.equal(node.rawText, "middle"); + assert.equal(node.templateFlags, 0); + } + else if (isTemplateTail(node)) { + assert.equal(node.text, " tail"); + assert.equal(node.rawText, " tail"); + assert.equal(node.templateFlags, 0); + } + nodeCount++; + node.forEachChild(visit); + }); + assert.equal(nodeCount, 8); + }); + + test("forEachChild with visitList does not visit array children twice", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ files: ["/input.ts"] }), + "/input.ts": `let arrow = () => {}`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/input.ts"); + + assert.ok(sourceFile); + + const visited: { kind: SyntaxKind; pos: number; end: number; }[] = []; + (function walk(node: Node): void { + visited.push({ kind: node.kind, pos: node.pos, end: node.end }); + node.forEachChild(walk, (nodes: NodeArray) => { + for (let i = 0; i < nodes.length; i++) { + walk(nodes[i]); + } + return undefined; + }); + })(sourceFile); + + // Each node should be visited exactly once, even when a visitList callback + // is supplied. Previously array children were visited twice. + const seen = new Set(); + for (const { kind, pos, end } of visited) { + const key = `${kind}.${pos}.${end}`; + assert.ok(!seen.has(key), `Node ${key} was visited more than once`); + seen.add(key); + } + }); +}); + +describe("NodeArray", { concurrency }, () => { + test("hasTrailingComma", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `declare function foo(...args: any): void;\nfoo("a", "b",);\nfoo("a", "b");`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const statements = sourceFile.statements.filter(isExpressionStatement); + assert.ok(isCallExpression(statements[0].expression)); + assert.equal(statements[0].expression.arguments.hasTrailingComma, true); + assert.ok(isCallExpression(statements[1].expression)); + assert.equal(statements[1].expression.arguments.hasTrailingComma, false); + }); +}); + +describe("API objects", { concurrency }, () => { + test("unicode escapes", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/1.ts": `"😃"`, + "/src/2.ts": `"\\ud83d\\ude03"`, + "/src/3.ts": `"\\ud800a\\udc00"`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const expectedTexts = new Map([ + ["/src/1.ts", "😃"], + ["/src/2.ts", "😃"], + ["/src/3.ts", "\ud800a\udc00"], + ]); + + for (const file of expectedTexts.keys()) { + const sourceFile = await project.program.getSourceFile(file); + assert.ok(sourceFile); + + sourceFile.forEachChild(function visit(node) { + if (isStringLiteral(node)) { + assert.equal(node.text, expectedTexts.get(file)); + } + node.forEachChild(visit); + }); + } + }); + + test("template unicode escapes", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": "`\\ud800${0}\\udc00`", + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let sawHead = false; + let sawTail = false; + sourceFile.forEachChild(function visit(node) { + if (isTemplateHead(node)) { + assert.equal(node.text, "\ud800"); + sawHead = true; + } + else if (isTemplateTail(node)) { + assert.equal(node.text, "\udc00"); + sawTail = true; + } + node.forEachChild(visit); + }); + assert.ok(sawHead); + assert.ok(sawTail); + }); + + test("Object equality", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Same symbol returned from same snapshot's checker + assert.strictEqual( + await project.checker.getSymbolAtPosition("/src/index.ts", 9), + await project.checker.getSymbolAtPosition("/src/index.ts", 10), + ); + }); + + test("Snapshot dispose", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + + // Snapshot dispose should release server-side resources + assert.ok(snapshot.isDisposed() === false); + await snapshot.dispose(); + assert.ok(snapshot.isDisposed() === true); + + // After dispose, snapshot methods should throw + assert.throws(() => { + snapshot.getConfiguredProject("/tsconfig.json"); + }, { + name: "Error", + message: "Snapshot is disposed", + }); + }); +}); + +describe("Multiple snapshots", { concurrency }, () => { + test("two snapshots work independently", async () => { + await using api = spawnAPI(); + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Both can fetch source files + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.ok(sf2); + + // Disposing one doesn't break the other + await snap1.dispose(); + assert.ok(snap1.isDisposed()); + assert.ok(!snap2.isDisposed()); + + // snap2 still works after snap1 is disposed + const symbol = await snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + }); + + test("each snapshot has its own server-side lifecycle", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Verify initial state + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file and create a new snapshot with the change + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "changed";`); + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + + // snap2 should reflect the updated content + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = "changed";`); + + // snap1's source file should still have the original content + assert.equal(sf1.text, `export const foo = 42;`); + + await snap1.dispose(); + + // snap2 still works independently after snap1 is disposed + const symbol = await snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + + await snap2.dispose(); + + // Both are disposed, new snapshot works fine with latest content + const snap3 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf3 = await snap3.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf3); + assert.equal(sf3.text, `export const foo = "changed";`); + }); + + test("adding a new file is reflected in the next snapshot", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Add a brand new file + fs.writeFile!(toRootedFilePath("/src/bar.ts", undefined), `export const bar = true;`); + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { created: ["/src/bar.ts"] }, + }); + + const sf = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); + assert.ok(sf); + assert.equal(sf.text, `export const bar = true;`); + + // Original snapshot shouldn't have the new file + const sfOld = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); + assert.equal(sfOld, undefined); + }); + + test("multiple sequential edits produce correct snapshots", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + await api.createSnapshot({ openProject: "/tsconfig.json" }); + + const versions = [ + `export const foo = 1;`, + `export const foo = 2;`, + `export const foo = 3;`, + ]; + + for (const version of versions) { + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), version); + const snap = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf = await snap.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf); + assert.equal(sf.text, version); + } + }); + + test("snapshot.update derives from its receiver and reconstructs unchanged projects", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/first/tsconfig.json": `{}`, + "/first/index.ts": `export const first = 1;`, + "/second/tsconfig.json": `{}`, + "/second/index.ts": `export const second = 1;`, + }); + await using api = disposableAPI; + + const base = await api.createSnapshot({ + openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], + }); + const baseFirst = await base.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"); + const baseSecondProject = base.getConfiguredProject("/second/tsconfig.json")!; + + fs.writeFile!(toRootedFilePath("/first/index.ts", undefined), `export const first = 2;`); + const updated = await base.update({ + fileNotifications: { changed: ["/first/index.ts"] }, + ensurePrograms: [base.getConfiguredProject("/first/tsconfig.json")!.id], + }); + + assert.equal(updated.getProjects().length, 2); + assert.notStrictEqual(updated.getConfiguredProject("/second/tsconfig.json"), baseSecondProject); + assert.equal((await updated.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"))!.text, `export const first = 2;`); + assert.equal(baseFirst!.text, `export const first = 1;`); + }); + + test("snapshot.update preserves stable project ordering", async () => { + await using api = spawnAPI({ + "/a/tsconfig.json": `{}`, + "/a/index.ts": `export const a = 1;`, + "/z/tsconfig.json": `{}`, + "/z/index.ts": `export const z = 1;`, + }); + const base = await api.createSnapshot({ openProjects: ["/z/tsconfig.json"] }); + const updated = await base.update({ openProjects: ["/a/tsconfig.json"] }); + + assert.deepEqual(updated.getProjects().map(project => project.id), ["/a/tsconfig.json", "/z/tsconfig.json"]); + }); + + test("snapshot.update ensures all dirty programs", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/configured/tsconfig.json": `{}`, + "/configured/index.ts": `export const configured = 1;`, + "/inferred.ts": `export const inferred = 1;`, + "/synthetic.ts": `export const synthetic = 1;`, + }); + await using api = disposableAPI; + + const created = await api.createSnapshot({ + openProjects: ["/configured/tsconfig.json"], + openFiles: ["/inferred.ts", "/configured/index.ts"], + createPrograms: [{ + rootFiles: ["/synthetic.ts"], + compilerOptions: { noLib: true }, + }], + }); + assert.equal(created.getProjects().length, 3); + const configuredProjectId: ConfiguredProjectId = created.getConfiguredProject("/configured/tsconfig.json")!.id; + void configuredProjectId; + assert.strictEqual(created.operation.openedFiles![0].project, created.getProject(created.operation.openedFiles![0].project.id)); + assert.strictEqual(created.operation.openedFiles![1].project, created.getConfiguredProject("/configured/tsconfig.json")); + for (const project of created.getProjects()) { + assert.equal(project.dirty, false, `${project.id} should be ensured when opened or created`); + } + + fs.writeFile!(toRootedFilePath("/configured/index.ts", undefined), `export const configured = 2;`); + fs.writeFile!(toRootedFilePath("/inferred.ts", undefined), `export const inferred = 2;`); + fs.writeFile!(toRootedFilePath("/synthetic.ts", undefined), `export const synthetic = 2;`); + const dirty = await created.update({ + fileNotifications: { changed: ["/configured/index.ts", "/inferred.ts", "/synthetic.ts"] }, + }); + assert.deepEqual(dirty.getProjects().map(project => project.dirty), [true, true, true]); + + const ensured = await dirty.update({ ensurePrograms: true }); + assert.deepEqual(ensured.getProjects().map(project => project.dirty), [false, false, false]); + + const withOperationResults = await ensured.update({ + openFiles: ["/inferred.ts"], + createPrograms: [{ + rootFiles: ["/synthetic.ts"], + compilerOptions: { noLib: true }, + }], + }); + const openedProject: Project = withOperationResults.operation.openedFiles[0].project; + const createdProgram: Program = withOperationResults.operation.createdPrograms[0]; + const openedFilesTuple: readonly [{ readonly project: Project; }] = withOperationResults.operation.openedFiles; + const createdProgramsTuple: readonly [Program] = withOperationResults.operation.createdPrograms; + void openedFilesTuple; + void createdProgramsTuple; + assert.strictEqual(withOperationResults.getProject(openedProject.id), openedProject); + assert.strictEqual(withOperationResults.getProgram(createdProgram.id), createdProgram); + }); +}); + +describe("Source file caching", { concurrency }, () => { + test("same file from same snapshot returns cached object", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sf1 = await project.program.getSourceFile("/src/index.ts"); + const sf2 = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.strictEqual(sf1, sf2, "Same source file should be returned from cache"); + }); + + test("same file from two snapshots (same content) returns cached object", async () => { + await using api = spawnAPI(); + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + // Fetch from snap1 first (populates cache), then snap2 (cache hit via hash) + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.ok(sf2); + // Same content hash → cache hit → same object + assert.strictEqual(sf1, sf2, "Same file with same content should share cached object"); + }); + + test("modified file returns a different source file object", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file in the VFS + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 100;`); + + // Notify the server about the change + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = 100;`); + + // Different content → different object + assert.notStrictEqual(sf1, sf2, "Modified file should return a new source file object"); + }); + + test("unmodified file retains cached object across file change notification", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + + // Mutate a different file + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 999;`); + + // Notify the server about the change to foo.ts only + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf2); + + // index.ts wasn't changed — should still get cached object + assert.strictEqual(sf1, sf2, "Unchanged file should return cached object across snapshots"); + }); + + test("disposing the source snapshot releases its cache entries", async () => { + await using api = spawnAPI(); + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + // Fetch from snap1 to populate cache + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + + const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + await snap1.dispose(); + + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf2); + assert.notStrictEqual(sf1, sf2, "independent snapshots do not implicitly retain each other's cache entries"); + }); + + test("invalidateAll causes all files to be re-fetched", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + await using api = disposableAPI; + + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = await snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "hello";`); + + // Use invalidateAll to force re-fetch + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { invalidateAll: true }, + }); + const sf2 = await snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = "hello";`); + assert.notStrictEqual(sf1, sf2, "invalidateAll should produce new source file objects"); + }); + + test("node handles from a cached source file should be valid in a new snapshot", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `function foo(x: number) {}\nfoo(42);`, + "/src/other.ts": `export const x = 1;`, + }); + await using api = disposableAPI; + + // Snapshot 1: get a node and verify getContextualType works + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const proj1 = snap1.getConfiguredProject("/tsconfig.json")!; + + const sf1 = await proj1.program.getSourceFile("/src/main.ts"); + assert.ok(sf1); + + let numLiteral: Expression | undefined; + sf1.forEachChild(function visit(node) { + if (isCallExpression(node)) numLiteral = node.arguments[0]; + node.forEachChild(visit); + }); + assert.ok(numLiteral, "should find the 42 argument"); + + const type1 = await proj1.checker.getContextualType(numLiteral); + assert.ok(type1); + assert.ok(type1.flags & TypeFlags.Number); + + // Snapshot 2: change a different file + fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const x = 2;`); + const snap2 = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/other.ts"] }, + }); + const proj2 = snap2.getConfiguredProject("/tsconfig.json")!; + + // Active snapshots may share a content-addressed source file. + const sf2 = await proj2.program.getSourceFile("/src/main.ts"); + assert.ok(sf2); + assert.strictEqual(sf1, sf2); + + let numLiteral2: Expression | undefined; + sf2.forEachChild(function visit(node) { + if (isCallExpression(node)) numLiteral2 = node.arguments[0]; + node.forEachChild(visit); + }); + assert.ok(numLiteral2, "should find the 42 argument"); + assert.strictEqual(numLiteral, numLiteral2); + + // A type from new snapshot should be resolved + const type2 = await proj2.checker.getContextualType(numLiteral2); + assert.ok(type2); + assert.ok(type2.flags & TypeFlags.Number); + }); +}); + +describe("Snapshot disposal", { concurrency }, () => { + test("dispose is idempotent", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstDispose = snapshot.dispose(); + const secondDispose = snapshot.dispose(); + assert.strictEqual(firstDispose, secondDispose); + await firstDispose; // @sync: snapshot.dispose(); + assert.ok(snapshot.isDisposed()); + // Second dispose should not throw + await snapshot.dispose(); + assert.ok(snapshot.isDisposed()); + }); + + test("api.close waits for disposal started by using", async () => { + const api = spawnAPI(); + let snapshot: Snapshot; + { + using disposableSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + snapshot = disposableSnapshot; + } + assert.ok(snapshot.isDisposed()); + await api.close(); + await snapshot.dispose(); + }); + + test("api.close disposes all active snapshots", async () => { + const api = spawnAPI(); + const snap1 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok(!snap1.isDisposed()); + assert.ok(!snap2.isDisposed()); + await api.close(); + assert.ok(snap1.isDisposed()); + assert.ok(snap2.isDisposed()); + }); + + // @sync-skip-block-start + test("api.close waits for source file disposal already in progress", async () => { + const api = spawnAPI(); + const retained = await api.createSourceFile("/retained.ts", "export {};"); + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): Promise; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let releaseStarted!: () => void; + let finishRelease!: () => void; + const started = new Promise(resolve => releaseStarted = resolve); + const finish = new Promise(resolve => finishRelease = resolve); + client.apiRequest = async (method, params) => { + if (method === "releaseSourceFile") { + releaseStarted(); + await finish; + } + return apiRequest(method, params); + }; + + const disposePromise = retained.dispose(); + await started; + let closed = false; + const closePromise = api.close().then(() => closed = true); + await Promise.resolve(); + assert.equal(closed, false); + finishRelease(); + await disposePromise; + await closePromise; + assert.equal(closed, true); + }); + // @sync-skip-block-end +}); + +describe("Source file cache keying across projects", { concurrency }, () => { + // Three projects share the same file (/src/shared.ts). + // The file sits inside a package.json scope with "type": "module". + // + // Project A: moduleResolution: bundler (auto detection, bundler doesn't + // trigger isFileForcedToBeModuleByFormat → file parsed as script) + // Project B: moduleResolution: bundler, moduleDetection: force + // (force → file parsed as module) + // Project C: moduleResolution: nodenext + // (nodenext + type:module → impliedNodeFormat ESNext → + // isFileForcedToBeModuleByFormat → file parsed as module) + // + // Expected: exactly two distinct source file objects are stored: + // - A gets one (script parse) + // - B and C share another (module parse) + const multiProjectFiles: Record = { + "/package.json": JSON.stringify({ type: "module" }), + "/src/shared.ts": `export const x = 1;`, + // Project A – bundler, auto detection (default) + "/projectA/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "bundler", + module: "esnext", + strict: true, + }, + files: ["../src/shared.ts"], + }), + // Project B – bundler, force module detection + "/projectB/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "bundler", + module: "esnext", + moduleDetection: "force", + strict: true, + }, + files: ["../src/shared.ts"], + }), + // Project C – nodenext (type:module → module) + "/projectC/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "nodenext", + module: "nodenext", + strict: true, + }, + files: ["../src/shared.ts"], + }), + }; + + test("different parse modes produce separate cached objects; same parse modes share", async () => { + await using api = spawnAPI(multiProjectFiles); + + const snapshot = await api.createSnapshot({ + openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json", "/projectC/tsconfig.json"], + }); + + const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; + const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; + const projectC = snapshot.getConfiguredProject("/projectC/tsconfig.json")!; + assert.ok(projectA, "projectA should exist"); + assert.ok(projectB, "projectB should exist"); + assert.ok(projectC, "projectC should exist"); + + // Fetch the shared file from each project + const sfA = await projectA.program.getSourceFile("/src/shared.ts"); + const sfB = await projectB.program.getSourceFile("/src/shared.ts"); + const sfC = await projectC.program.getSourceFile("/src/shared.ts"); + assert.ok(sfA, "sfA should exist"); + assert.ok(sfB, "sfB should exist"); + assert.ok(sfC, "sfC should exist"); + + // A should differ from B and C (script vs module parse) + assert.notStrictEqual(sfA, sfB, "projectA (script) and projectB (module) should have different cached source files"); + assert.notStrictEqual(sfA, sfC, "projectA (script) and projectC (module) should have different cached source files"); + + // B and C should share the same cached object (both module parse, same content hash) + assert.strictEqual(sfB, sfC, "projectB and projectC (both module parse) should share the same cached source file"); + }); +}); + +describe("Checker - symbol identity across projects", { concurrency }, () => { + const sharedSymbolFiles = { + "/projectA/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), + "/projectB/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), + "/src/shared.ts": `export const sharedVar = 42;`, + }; + + test("getSymbolAtPosition returns same Symbol instance across projects", async () => { + await using api = spawnAPI(sharedSymbolFiles); + + const snapshot = await api.createSnapshot({ + openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json"], + }); + + const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; + const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; + assert.ok(projectA, "projectA should exist"); + assert.ok(projectB, "projectB should exist"); + + const src = sharedSymbolFiles["/src/shared.ts"]; + const varPos = src.indexOf("sharedVar"); + + const symbolA = await projectA.checker.getSymbolAtPosition("/src/shared.ts", varPos); + const symbolB = await projectB.checker.getSymbolAtPosition("/src/shared.ts", varPos); + + assert.ok(symbolA, "symbolA should exist"); + assert.ok(symbolB, "symbolB should exist"); + assert.equal(symbolA.name, "sharedVar"); + assert.equal(symbolB.name, "sharedVar"); + + assert.strictEqual(symbolA, symbolB, "Same source symbol queried from two projects should be the same object"); + }); + + test("overlapping synthetic programs share Symbol instances", async () => { + await using api = spawnAPI({ + "/src/shared.ts": `export const sharedVar = 42;`, + }); + const snapshot = await api.createSnapshot({ + createPrograms: [ + { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, + { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, + ], + }); + const [programA, programB] = snapshot.operation.createdPrograms; + const position = `export const sharedVar = 42;`.indexOf("sharedVar"); + + const symbolA = await programA.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); + const symbolB = await programB.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); + + assert.ok(symbolA); + assert.strictEqual(symbolA, symbolB); + }); +}); + +describe("Checker - types and signatures", { concurrency }, () => { + const checkerFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const x = 42; +export function add(a: number, b: number, ...rest: number[]): number { return a + b; } +export class MyClass { + value: string = ""; + getValue(): string { return this.value; } +} +`, + }; + + test("getTypeAtPosition", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const xPos = src.indexOf("x = 42"); + const type = await project.checker.getTypeAtPosition("/src/main.ts", xPos); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NumberLiteral); + }); + + test("getTypeAtPosition batched", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const xPos = src.indexOf("x = 42"); + const addPos = src.indexOf("add("); + const types = await project.checker.getTypeAtPosition("/src/main.ts", [xPos, addPos]); + assert.equal(types.length, 2); + assert.ok(types[0]); + assert.ok(types[1]); + }); + + test("getTypeAtLocation", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const firstVarDecl = sourceFile.statements[2]; // "export const x" + assert.ok(firstVarDecl); + const type = await project.checker.getTypeAtLocation(firstVarDecl); + assert.ok(type); + }); + + test("getTypeAtLocation returns property type for parenthesized and chained access (issue #3938)", async () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +interface A { + a: number; + b: { c: number }; +} +const obj: A = { a: 1, b: { c: 2 } }; +const a1 = obj.a; +const a2 = (obj).a; +const c = obj.b.c; +`, + }; + + await using api = spawnAPI(files); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const targetNodes = new Map(); + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.PropertyAccessExpression) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text === "obj.a" || text === "(obj).a" || text === "obj.b.c") { + targetNodes.set(text, node); + } + } + node.forEachChild(visit); + }); + + assert.equal(targetNodes.size, 3, "Should find all target property access expressions"); + for (const expr of ["obj.a", "(obj).a", "obj.b.c"] as const) { + const node = targetNodes.get(expr); + assert.ok(node, `Should find expression '${expr}'`); + const type = await project.checker.getTypeAtLocation(node); + assert.ok(type, `Should get a type for '${expr}'`); + assert.ok(type.flags & TypeFlags.Number, `Expected '${expr}' to have number type flags, got ${type.flags}`); + } + }); + + test("getTypeAtLocation returns call result type for private method call (issue #4041)", async () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), + "/src/main.ts": ` +type Result = { readonly value: string }; + +export class Cache { + run(): Result { + return this.#buildCapabilities(); + } + + #buildCapabilities(): Result { + return { value: "ok" }; + } +} +`, + }; + + await using api = spawnAPI(files); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + let callNode: import("@typescript/typescript/unstable/ast").CallExpression | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text === "this.#buildCapabilities()") { + callNode = node; + } + } + node.forEachChild(visit); + }); + + assert.ok(callNode, "Should find private method call expression"); + const callType = await project.checker.getTypeAtLocation(callNode); + const calleeType = await project.checker.getTypeAtLocation(callNode.expression); + assert.ok(callType, "Should get type for call expression"); + assert.ok(calleeType, "Should get type for callee expression"); + + const callSignatures = await project.checker.getSignaturesOfType(calleeType, SignatureKind.Call); + assert.ok(callSignatures.length > 0, "Callee should be callable"); + const returnType = await project.checker.getReturnTypeOfSignature(callSignatures[0]); + assert.ok(returnType, "Should get return type for private method call"); + const callExprSignatures = await project.checker.getSignaturesOfType(callType, SignatureKind.Call); + + assert.ok(callType.flags & TypeFlags.Object, `Expected call expression type to be object-like, got ${callType.flags}`); + assert.ok(returnType.flags & TypeFlags.Object, `Expected return type to be object-like, got ${returnType.flags}`); + assert.equal(callType.flags, returnType.flags, "Call expression type should have same flags as method return type"); + assert.equal(callExprSignatures.length, 0, "Call expression result type should not itself be callable"); + }); + + test("getSignaturesOfType - call signatures", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const addPos = src.indexOf("add("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", addPos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length > 0); + const sig = callSigs[0]; + const typeCallSigs = await type.getCallSignatures(); + assert.deepEqual(typeCallSigs, callSigs); + assert.ok((await sig.getReturnType()).flags & TypeFlags.Number); + assert.ok((await sig.getTypeParameterAtPosition(0)).flags & TypeFlags.Number); + assert.ok(sig.id); + assert.ok(sig.parameters.length >= 2); + assert.ok(sig.hasRestParameter); + assert.ok(!sig.isConstruct); + assert.ok(!sig.isAbstract); + }); + + test("getApparentProperties includes CallableFunction members", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + const propertyNames = (await type.getApparentProperties()).map(property => property.name); + assert.ok(propertyNames.includes("apply")); + assert.ok(propertyNames.includes("call")); + assert.ok(propertyNames.includes("bind")); + }); + + test("checker and object methods share cached results", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem(checkerFiles), + collectTiming: true, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + let signature: Signature | undefined; + + async function assertOneRequest(callback: () => Promise) { + await api.resetTimingInfo(); + await callback(); + assert.equal((await api.getTimingInfo()).totals.requestCount, 1); + } + + await assertOneRequest(async () => { + const properties = await type.getProperties(); + assert.strictEqual(await project.checker.getPropertiesOfType(type), properties); + }); + await assertOneRequest(async () => { + const signatures = await type.getCallSignatures(); + assert.strictEqual(await project.checker.getSignaturesOfType(type, SignatureKind.Call), signatures); + signature = signatures[0]; + }); + await assertOneRequest(async () => { + const nonNullable = await project.checker.getNonNullableType(type); + assert.strictEqual(await type.getNonNullableType(), nonNullable); + }); + await assertOneRequest(async () => { + const apparentType = await type.getApparentType(); + assert.strictEqual(await project.checker.getApparentType(type), apparentType); + }); + await assertOneRequest(async () => { + const indexInfos = await type.getIndexInfos(); + assert.strictEqual(await project.checker.getIndexInfosOfType(type), indexInfos); + }); + await assertOneRequest(async () => { + assert.ok(signature); + const returnType = await project.checker.getReturnTypeOfSignature(signature); + assert.strictEqual(await signature.getReturnType(), returnType); + }); + }); + + test("getSignaturesOfType - construct signatures", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const classPos = src.indexOf("MyClass"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", classPos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const constructSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Construct); + assert.ok(constructSigs.length > 0); + const sig = constructSigs[0]; + assert.ok(sig.isConstruct); + }); + + test("Signature declaration can be resolved", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const addPos = src.indexOf("add("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", addPos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length > 0); + const sig = callSigs[0]; + assert.ok(sig.declaration); + assert.ok(isSignatureDeclaration.Handle(sig.declaration)); + const node = await sig.declaration.resolve(project); + assert.ok(node); + assert.ok(node.parameters); + assert.ok(isSignatureDeclaration(node)); + // The handle remembers its canonical project, so resolve() works without an argument. + const nodeFromCanonical = await sig.declaration.resolve(); + assert.ok(nodeFromCanonical); + assert.ok(nodeFromCanonical.parameters); + assert.ok(isSignatureDeclaration(nodeFromCanonical)); + assert.strictEqual(nodeFromCanonical.kind, node.kind); + + const methodPos = src.indexOf("getValue"); + const methodSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", methodPos); + assert.ok(methodSymbol); + assert.ok(methodSymbol.valueDeclaration); + const methodNode = await methodSymbol.valueDeclaration.resolve(project); + assert.ok(methodNode); + assert.strictEqual(methodNode.parent.kind, SyntaxKind.ClassDeclaration); + assert.strictEqual(methodNode.parent.parent.kind, SyntaxKind.SourceFile); + // A symbol's declaration handles default to the symbol's canonical project. + const methodNodeFromCanonical = await methodSymbol.valueDeclaration.resolve(); + assert.ok(methodNodeFromCanonical); + assert.strictEqual(methodNodeFromCanonical.kind, methodNode.kind); + }); + + test("getSignaturesOfType - signature type parameters", async () => { + const mainFile = ` + interface Operator { + } + export declare class Observable { + lift(operator: Operator): Observable; + } + `; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": mainFile, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const liftPos = mainFile.indexOf("lift"); + const type = await project.checker.getTypeAtPosition("/src/main.ts", liftPos); + assert.ok(type); + const callSigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length === 1, "should have exactly one call signature, found: " + callSigs.length); + const sig = callSigs[0]; + assert.ok(sig.typeParameters?.length === 1, "should have exactly one type parameter, found: " + sig.typeParameters?.length); + const typeParams = await sig.getTypeParameters(); + const typeParam = typeParams[0]; + assert.ok(typeParam, "should have type parameter"); + const name = (await typeParam.getSymbol())?.name; + assert.ok(name === "R", "should be named R, instead: " + name); + assert.ok(typeParam.flags & TypeFlags.TypeParameter, "should be a type parameter, instead flags: " + typeParam.flags); + }); + + test("Signature.getParameters() returns parameter symbols with correct names", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const params = await sigs[0].getParameters(); + assert.equal(params.length, 3); + assert.equal(params[0].name, "a"); + assert.equal(params[1].name, "b"); + assert.equal(params[2].name, "rest"); + assert.ok(params[0].flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable on 'a', got ${params[0].flags}`); + }); + + test("Signature.getThisParameter() returns undefined when no explicit this parameter", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const thisParam = await sigs[0].getThisParameter(); + assert.strictEqual(thisParam, undefined, "add() has no explicit this parameter"); + }); + + test("Signature.getThisParameter() returns symbol for explicit this parameter", async () => { + const src = `export function foo(this: { n: number }, x: string): void {}`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("foo(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const thisParam = await sigs[0].getThisParameter(); + assert.ok(thisParam, "foo has an explicit this parameter"); + assert.equal(thisParam.name, "this"); + assert.ok(thisParam.flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable, got ${thisParam.flags}`); + }); + + test("Signature.getTarget() returns undefined for a non-instantiated signature", async () => { + await using api = spawnAPI(checkerFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const target = await sigs[0].getTarget(); + assert.strictEqual(target, undefined, "add() is not an instantiated signature"); + }); + + test("Signature.getTarget() returns the generic source signature for an instantiated call", async () => { + const src = ` + function identity(x: T): T { return x; } + identity("hello"); + `; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let callNode: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) callNode = node; + node.forEachChild(visit); + }); + assert.ok(callNode, "should find a call expression"); + const sig = await project.checker.getResolvedSignature(callNode); + assert.ok(sig, "should resolve a signature for the call"); + assert.ok(sig.target !== undefined, "instantiated call should have a target ID"); + const target = await sig.getTarget(); + assert.ok(target, "getTarget() should return the generic signature"); + assert.ok(target.typeParameters && target.typeParameters.length > 0, "target should have type parameters"); + }); +}); + +describe("Symbol - parent, members, exports", { concurrency }, () => { + const symbolFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/mod.ts": ` +export class Animal { + name: string = ""; + speak(): void {} +} +export const value = 1; +`, + }; + + test("getMembers returns class members", async () => { + await using api = spawnAPI(symbolFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = symbolFiles["/src/mod.ts"]; + const animalPos = src.indexOf("Animal"); + const symbol = await project.checker.getSymbolAtPosition("/src/mod.ts", animalPos); + assert.ok(symbol); + const members = await symbol.getMembers(); + assert.ok(members.size > 0); + const memberNames = [...members.values()].map(m => m.name); + assert.ok(memberNames.includes("name"), "should have 'name' member"); + assert.ok(memberNames.includes("speak"), "should have 'speak' member"); + }); + + test("getExports returns module exports via sourceFile symbol", async () => { + await using api = spawnAPI(symbolFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/mod.ts"); + assert.ok(sourceFile); + const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const exports = await moduleSymbol.getExports(); + assert.ok(exports.size > 0); + const exportNames = [...exports.values()].map(e => e.name); + assert.ok(exportNames.includes("Animal"), "should export Animal"); + assert.ok(exportNames.includes("value"), "should export value"); + }); + + test("getParent returns containing symbol", async () => { + await using api = spawnAPI(symbolFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = symbolFiles["/src/mod.ts"]; + const namePos = src.indexOf("name:"); + const nameSymbol = await project.checker.getSymbolAtPosition("/src/mod.ts", namePos); + assert.ok(nameSymbol); + assert.equal(nameSymbol.name, "name"); + const parent = await nameSymbol.getParent(); + assert.ok(parent); + assert.equal(parent.name, "Animal"); + }); + + test("checkFlags is typed as CheckFlags", async () => { + await using api = spawnAPI(symbolFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(symbol); + const checkFlags: CheckFlags = symbol.checkFlags; + assert.equal(checkFlags & CheckFlags.Readonly, 0); + }); + + test("binder symbols are shared by file before the AST is fetched", async () => { + await using api = spawnAPI(symbolFiles, { collectTiming: true }); + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + const secondSnapshot = await firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + const position = symbolFiles["/src/mod.ts"].indexOf("Animal"); + + await api.resetTimingInfo(); + const first = await firstProject.checker.getSymbolAtPosition("/src/mod.ts", position); + const second = await secondProject.checker.getSymbolAtPosition("/src/mod.ts", position); + assert.ok(first); + assert.strictEqual(second, first); + assert.equal((await api.getTimingInfo()).totals.sourceFilesFetched, 0); + + const declaration = await first.declarations[0].resolve(secondProject); + assert.ok(declaration); + assert.equal(declaration.getSourceFile().fileName, "/src/mod.ts"); + assert.equal((await api.getTimingInfo()).totals.sourceFilesFetched, 1); + assert.equal((await getSymbol(cast(declaration, isClassDeclaration)))?.name, "Animal"); + }); + + test("file-owned symbol properties do not require a snapshot or project", async () => { + await using api = spawnAPI(symbolFiles); + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/mod.ts"); + assert.ok(sourceFile); + await using retained = await api.retainSourceFile(sourceFile); + const animal = await project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + const storage = animal["storage"]; + assert.ok("owner" in storage); + assert.strictEqual(storage.owner.api, api); + assert.deepEqual(Object.keys(storage.owner).sort(), ["api", "record"]); + + await snapshot.dispose(); + const members = await animal.getMembers(); + assert.deepEqual([...members.values()].map(symbol => symbol.name), ["name", "speak"]); + assert.strictEqual(await members.get("name" as __String)?.getParent(), animal); + }); + + test("checker-created merged symbols remain snapshot-owned", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/a.ts", "/src/b.ts"] }), + "/src/a.ts": `namespace Merged { export const a = 1; }`, + "/src/b.ts": `namespace Merged { export const b = 1; }`, + }); + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + const secondSnapshot = await firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + + const first = await firstProject.checker.getSymbolAtPosition("/src/a.ts", 10); + const second = await secondProject.checker.getSymbolAtPosition("/src/a.ts", 10); + assert.ok(first); + assert.ok(second); + assert.notStrictEqual(second, first); + }); + + test("checker symbol methods merge declarations and parents in their project", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ files: ["/src/a.ts", "/src/b.ts"] }), + "/single/tsconfig.json": JSON.stringify({ files: ["/src/a.ts"] }), + "/src/a.ts": "namespace Merged { export const a = 1; }", + "/src/b.ts": "namespace Merged { export const b = 1; }", + }); + const snapshot = await api.createSnapshot({ openProjects: ["/tsconfig.json", "/single/tsconfig.json"] }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const singleProject = snapshot.getConfiguredProject("/single/tsconfig.json")!; + const fileA = await project.program.getSourceFile("/src/a.ts"); + const fileB = await project.program.getSourceFile("/src/b.ts"); + assert.ok(fileA && fileB); + const declarationA = cast(fileA.statements[0], isModuleDeclaration); + const declarationB = cast(fileB.statements[0], isModuleDeclaration); + const rawA = await getSymbol(declarationA); + const rawB = await getSymbol(declarationB); + assert.notStrictEqual(rawA, rawB); + + const merged = await project.checker.getSymbolOfDeclaration(declarationA); + assert.strictEqual(await project.checker.getSymbolOfDeclaration(declarationB), merged); + assert.strictEqual(await project.checker.getSymbolOfNode(declarationA), merged); + assert.strictEqual(await project.checker.getMergedSymbol(rawA), merged); + assert.strictEqual(await project.checker.getMergedSymbol(rawB), merged); + assert.strictEqual(await project.checker.getMergedSymbol(merged), merged); + assert.strictEqual(await singleProject.checker.getMergedSymbol(rawA), rawA); + assert.strictEqual(await singleProject.checker.getSymbolOfDeclaration(declarationA), rawA); + assert.equal(await project.checker.getSymbolOfNode(declarationA.name), undefined); + assert.equal(await project.checker.getSymbolOfNode(fileA), undefined); + assert.equal(await project.checker.getParentOfSymbol(merged), undefined); + + const member = (await rawA.getExports()).get("a" as __String); + assert.ok(member); + assert.strictEqual(await member.getParent(), rawA); + assert.strictEqual(await project.checker.getParentOfSymbol(member), merged); + assert.strictEqual(await singleProject.checker.getParentOfSymbol(member), rawA); + }); + + test("checker symbol methods late-bind computed members", async () => { + await using api = spawnAPI({ + "/src/computed.ts": "declare const key: unique symbol;\nclass Container { [key] = 1; ordinary = 2; }\nimport {} from './missing';", + }); + const snapshot = await api.createSnapshot({ openFiles: ["/src/computed.ts"] }); + const project = snapshot.getProjects()[0]; + const file = await project.program.getSourceFile("/src/computed.ts"); + assert.ok(file); + const declaration = cast(file.statements[1], isClassDeclaration); + const memberDeclaration = cast(declaration.members[0], isPropertyDeclaration); + const raw = await getSymbol(memberDeclaration); + const lateBound = await project.checker.getSymbolOfDeclaration(memberDeclaration); + assert.notStrictEqual(lateBound, raw); + assert.strictEqual(await project.checker.getSymbolOfNode(memberDeclaration), lateBound); + const container = await project.checker.getSymbolOfDeclaration(declaration); + assert.strictEqual(await project.checker.getParentOfSymbol(lateBound), container); + const type = await project.checker.getDeclaredTypeOfSymbol(container); + const property = (await type.getProperties()).find(symbol => symbol.escapedName === lateBound.escapedName); + assert.ok(property); + assert.strictEqual(await project.checker.getTargetSymbol(property), lateBound); + const ordinary = cast(declaration.members[1], isPropertyDeclaration); + assert.strictEqual(await project.checker.getSymbolOfDeclaration(ordinary), await getSymbol(ordinary)); + assert.equal(await project.checker.getSymbolOfNode(file.statements[2]), undefined); + }); + + test("snapshot-owned symbols resolve cached file-owned parents", async () => { + const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), + "/src/box.ts": source, + }, { collectTiming: true }); + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const box = await project.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); + assert.ok(box); + const boxType = await project.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); + assert.ok(boxType); + const [value] = await boxType.getProperties(); + assert.ok(value); + assert.ok(value.checkFlags & CheckFlags.Instantiated); + + await api.resetTimingInfo(); + assert.strictEqual(await value.getParent(), box); + assert.equal((await api.getTimingInfo()).totals.requestCount, 0); + }); + + test("compact symbol references retain reused file-owned symbols", async () => { + const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), + "/src/box.ts": source, + }); + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + // Create the second snapshot before the first symbol response populates + // the client cache. This ensures its registry has no direct retain on + // the record that will be discovered through the compact reference. + const secondSnapshot = await firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + + const box = await firstProject.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); + assert.ok(box); + const boxType = await secondProject.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); + assert.ok(boxType); + const [value] = await boxType.getProperties(); + assert.ok(value); + assert.ok(value.checkFlags & CheckFlags.Instantiated); + + // The instantiated property belongs to the second snapshot, but its + // compact parent reference finds `box` in the record retained only by + // the first snapshot. Resolving the reference borrows the wrapper into + // the second registry and must retain its record for that registry's + // lifetime. + const boxFromSecondSnapshot = await value.getParent(); + assert.strictEqual(boxFromSecondSnapshot, box); + await firstSnapshot.dispose(); + + // If the compact lookup did not establish ownership, disposing the + // first snapshot evicts the record. The next lookup then interns a new + // wrapper for the same binder symbol instead of returning the wrapper + // already obtained through the still-live second snapshot. + const parentAfterDisposal = await value.getParent(); + await secondSnapshot.dispose(); + assert.strictEqual(parentAfterDisposal, boxFromSecondSnapshot); + await assert.rejects(value.getParent(), /Project object registry is disposed/); // @sync: assert.throws(() => value.getParent(), /Project object registry is disposed/); + }); + + test("file-owned declarations resolve without the snapshot that observed them", async () => { + await using api = spawnAPI(symbolFiles); + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + // Keeps the server AST alive after the observing snapshot is disposed. + await using _secondSnapshot = await firstSnapshot.update({}); + const animal = await firstProject.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + await firstSnapshot.dispose(); + + const declaration = await animal.declarations[0].resolve(); + assert.ok(declaration && isClassDeclaration(declaration)); + assert.equal(declaration.name?.text, "Animal"); + }); + + test("file-owned symbols are accepted by later checkers while their file is unchanged", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...symbolFiles, "/src/other.ts": `export const other = 1;` }); + await using api = disposableAPI; + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const animal = await firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + + fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const other = 2;`); + const secondSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/other.ts"] } }); + const type = await secondSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getTypeOfSymbol(animal); + assert.ok(type); + assert.strictEqual(await type.getSymbol(), animal); + }); + + test("file-owned symbols are rejected by checkers whose program has a different version of their file", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(symbolFiles); + await using api = disposableAPI; + const firstSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const animal = await firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + + fs.writeFile!(toRootedFilePath("/src/mod.ts", undefined), `${symbolFiles["/src/mod.ts"]}\nexport const added = 2;`); + const secondSnapshot = await api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/mod.ts"] } }); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + await assert.rejects(secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); // @sync: assert.throws(() => secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); + }); +}); + +describe("Type - getSymbol", { concurrency }, () => { + test("getSymbol returns the symbol of a type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/types.ts": ` +export class Foo { + x: number = 0; +} +export const instance: Foo = new Foo(); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Foo {\n x: number = 0;\n}\nexport const instance: Foo = new Foo();\n`; + const instancePos = src.indexOf("instance"); + const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", instancePos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeSymbol = await type.getSymbol(); + assert.ok(typeSymbol); + assert.equal(typeSymbol.name, "Foo"); + const fooSymbol = await project.checker.getSymbolAtPosition("/src/types.ts", src.indexOf("Foo")); + assert.strictEqual(typeSymbol, fooSymbol); + }); +}); + +describe("Type - sub-property fetchers", { concurrency }, () => { + const typeFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), + "/src/types.ts": ` +export const arr: Array = [1, 2, 3]; +export const union: string | number = "hello"; +export const intersection: { a: number } & { b: string } = { a: 1, b: "hi" }; +export type KeyOf = keyof T; +export type Lookup = T[K]; +export type Cond = T extends string ? "yes" : "no"; +export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; +export type MappedUnion = Mapped | string; +export const tpl: \`hello \${string}\` = "hello world"; +export type Upper = Uppercase<"hello">; +export const tuple: readonly [number, string?, ...boolean[]] = [1]; +`, + }; + + async function getTypeAtName(api: API, name: string) { + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = typeFiles["/src/types.ts"]; + const pos = src.indexOf(name); + assert.ok(pos >= 0, `Could not find "${name}" in source`); + const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", pos); + assert.ok(symbol, `No symbol found at "${name}"`); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type, `No type found for symbol "${name}"`); + return { type, project, snapshot, api }; + } + + test("TypeReference.getTarget() returns the generic target", async () => { + const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "arr:"); + await using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Object); + const ref = type as TypeReference; + assert.ok(ref.objectFlags & ObjectFlags.Reference); + assert.equal(type.isObjectType(), true); + assert.equal(type.isTypeReference(), true); + assert.equal(type.isLiteralType(), false); + const target = await ref.getTarget(); + assert.ok(target); + assert.ok(target.flags & TypeFlags.Object); + const typeParameters = await target.getTypeParameters(); + assert.ok(typeParameters); + assert.equal(typeParameters.length, 1); + const properties = await type.getProperties(); + assert.ok(properties.some(property => property.name === "length")); + assert.equal((await type.getProperty("length"))?.name, "length"); + assert.ok((await type.getApparentProperties()).length >= properties.length); + assert.strictEqual(await type.getNonNullableType(), type); + }); + + test("UnionOrIntersectionType.getTypes() returns union members", async () => { + const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "union:"); + await using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Union); + const union = type as UnionOrIntersectionType; + const types = await union.getTypes(); + assert.ok(types.length >= 2); + assert.strictEqual(await union.getTypes(), types); + assert.equal(type.isUnionType(), true); + assert.equal(type.isIntersectionType(), false); + }); + + test("UnionOrIntersectionType.getTypes() returns intersection members", async () => { + const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "intersection:"); + await using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Intersection); + const inter = type as UnionOrIntersectionType; + const types = await inter.getTypes(); + assert.ok(types.length >= 2); + }); + + test("UnionOrIntersectionType.getTypes() on a wrongly-cast type returns undefined without hitting the server", async () => { + const src = `export const s: string = ""; export const u: string | number = "";`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // `string` is neither a union/intersection nor a template literal type, + // so it has no constituent types. The client guards on the type's flags + // and returns undefined without ever sending a request the server cannot satisfy. + const sSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); + assert.ok(sSymbol); + const sType = await project.checker.getTypeOfSymbol(sSymbol); + assert.ok(sType); + assert.equal(await (sType as unknown as UnionOrIntersectionType).getTypes(), undefined); + + // A real union still returns its constituents. + const uSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("u:")); + assert.ok(uSymbol); + const uType = await project.checker.getTypeOfSymbol(uSymbol); + assert.ok(uType); + assert.equal((await (uType as UnionOrIntersectionType).getTypes()).length, 2); + }); + + test("IndexType.getTarget() returns the target type", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("KeyOf", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + // KeyOf = keyof T — this is an IndexType + assert.ok(type.flags & TypeFlags.Index, `Expected IndexType, got flags ${type.flags}`); + const indexType = type as IndexType; + const target = await indexType.getTarget(); + assert.ok(target); + }); + + test("IndexedAccessType.getObjectType() and getIndexType()", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("Lookup", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.IndexedAccess, `Expected IndexedAccessType, got flags ${type.flags}`); + const ia = type as IndexedAccessType; + assert.equal(type.isIndexedAccessType(), true); + const objectType = await ia.getObjectType(); + assert.ok(objectType); + const indexType = await ia.getIndexType(); + assert.ok(indexType); + }); + + test("ConditionalType.getCheckType() and getExtendsType()", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); + const cond = type as ConditionalType; + assert.equal(type.isConditionalType(), true); + const checkType = await cond.getCheckType(); + assert.ok(checkType); + const extendsType = await cond.getExtendsType(); + assert.ok(extendsType); + }); + + test("ConditionalType.getTrueType() and getFalseType()", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); + + const trueType = await (type as ConditionalType).getTrueType(); + assert.ok(trueType, "should return the true-branch type"); + assert.ok(trueType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for true branch, got flags ${trueType.flags}`); + assert.equal((trueType as LiteralType).value, "yes"); + + const falseType = await (type as ConditionalType).getFalseType(); + assert.ok(falseType, "should return the false-branch type"); + assert.ok(falseType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for false branch, got flags ${falseType.flags}`); + assert.equal((falseType as LiteralType).value, "no"); + }); + + test("MappedType exposes its component types", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("Mapped", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(type.isMappedType(), true); + const mapped = type as MappedType; + assert.ok((await mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); + assert.ok(await mapped.getConstraintType()); + assert.ok(await mapped.getNameType()); + assert.ok(await mapped.getTemplateType()); + }); + + test("MappedType returned as a union constituent exposes its component types", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.resolveName("MappedUnion", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const union = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(union); + const mapped = (await (union as UnionOrIntersectionType).getTypes()).find(type => type.isMappedType()); + assert.ok(mapped); + assert.ok((await mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); + assert.ok(await mapped.getConstraintType()); + assert.ok(await mapped.getNameType()); + assert.ok(await mapped.getTemplateType()); + }); + + test("TemplateLiteralType.texts and getTypes()", async () => { + const { type, api: disposableAPI } = await getTypeAtName(spawnAPI(typeFiles), "tpl:"); + await using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.TemplateLiteral, `Expected TemplateLiteralType, got flags ${type.flags}`); + const tpl = type as TemplateLiteralType; + assert.ok(tpl.texts); + assert.ok(tpl.texts.length >= 2); + assert.equal(tpl.texts[0], "hello "); + const types = await tpl.getTypes(); + assert.ok(types.length >= 1); + }); + + test("StringMappingType.getTarget() returns the mapped type", async () => { + await using api = spawnAPI(typeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = typeFiles["/src/types.ts"]; + const pos = src.indexOf("Upper"); + const symbol = await project.checker.getSymbolAtPosition("/src/types.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + // Uppercase<"hello"> may resolve to a StringMappingType or a string literal + if (type.flags & TypeFlags.StringMapping) { + const sm = type as StringMappingType; + const target = await sm.getTarget(); + assert.ok(target); + } + // If it resolved to "HELLO" literal, that's fine too — it means eager evaluation + }); + + test("tuple metadata is owned by tuple targets", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare function empty(value: readonly []): void; +declare function nonempty(value: readonly [number]): void; +declare function array(value: readonly number[]): void; +empty([]); +nonempty([1]); +array([]); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const arrayLiterals: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ArrayLiteralExpression) { + arrayLiterals.push(node); + } + node.forEachChild(visit); + }); + assert.equal(arrayLiterals.length, 3); + + for (const [index, expectedFixedLength] of [0, 1].entries()) { + const type = await project.checker.getTypeAtLocation(arrayLiterals[index]); + assert.equal(await project.checker.isTupleType(type), true); + assert.equal(await project.checker.isTupleTypeTarget(type), false); + assert.equal(type.isTupleType(), true); + assert.equal(type.isTupleTypeTarget(), false); + assert.ok(type.isTupleType()); + assert.equal(Reflect.get(type, "fixedLength"), undefined); + + const target = await type.getTarget(); + assert.ok(target.objectFlags & ObjectFlags.Tuple); + assert.equal(await project.checker.isTupleType(target), true); + assert.equal(await project.checker.isTupleTypeTarget(target), true); + assert.equal(target.isTupleType(), true); + assert.equal(target.isTupleTypeTarget(), true); + assert.ok(target.isTupleTypeTarget()); + assert.equal(target.fixedLength, expectedFixedLength); + assert.equal(target.elementFlags.length, expectedFixedLength); + assert.equal(target.readonly, false); + } + + const arrayType = await project.checker.getTypeAtLocation(arrayLiterals[2]); + assert.equal(await project.checker.isTupleType(arrayType), false); + assert.equal(await project.checker.isTupleTypeTarget(arrayType), false); + assert.equal(arrayType.isTupleType(), false); + assert.equal(arrayType.isTupleTypeTarget(), false); + }); + + test("tuple targets expose labeled element declarations", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export function gh1449(a: T): T { + return a; +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const functionDeclaration = sourceFile.statements.find(isFunctionDeclaration); + assert.ok(functionDeclaration); + const constraint = functionDeclaration.typeParameters?.[0].constraint; + assert.ok(constraint); + + const type = await project.checker.getTypeFromTypeNode(constraint); + assert.ok(type.isTupleType()); + const target = await type.getTarget(); + const declarations = target.labeledElementDeclarations; + assert.ok(declarations); + assert.equal(declarations.length, 2); + + const names: string[] = []; + for (const handle of declarations) { + assert.ok(handle); + assert.equal(handle.kind, SyntaxKind.NamedTupleMember); + const declaration = await handle.resolve(); + assert.ok(declaration); + assert.ok(isIdentifier(declaration.name)); + names.push(declaration.name.text); + } + assert.deepEqual(names, ["foo", "bar"]); + }); +}); + +describe("Checker - intrinsic type getters", { concurrency }, () => { + const intrinsicFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = 1;`, + }; + + test("getAnyType returns a type with Any flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getAnyType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Any); + }); + + test("getStringType returns a type with String flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getStringType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.String); + }); + + test("getNumberType returns a type with Number flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getNumberType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Number); + }); + + test("getBooleanType returns a type with Boolean flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getBooleanType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Boolean); + }); + + test("getVoidType returns a type with Void flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getVoidType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Void); + }); + + test("getUndefinedType returns a type with Undefined flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getUndefinedType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Undefined); + }); + + test("getNullType returns a type with Null flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getNullType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Null); + }); + + test("getNeverType returns a type with Never flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getNeverType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Never); + }); + + test("getUnknownType returns a type with Unknown flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getUnknownType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Unknown); + }); + + test("getBigIntType returns a type with BigInt flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getBigIntType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.BigInt); + }); + + test("getESSymbolType returns a type with ESSymbol flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getESSymbolType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.ESSymbol); + }); + + test("getNonPrimitiveType returns a type with NonPrimitive flag", async () => { + await using api = spawnAPI(intrinsicFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = await project.checker.getNonPrimitiveType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NonPrimitive); + }); +}); + +describe("Checker - multi-project type ID uniqueness", { concurrency }, () => { + test("intrinsic types from 3 projects in the same snapshot have non-colliding IDs", async () => { + await using api = spawnAPI({ + "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj1/src/index.ts": `export const x = 1;`, + "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj2/src/index.ts": `export const y = "hello";`, + "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj3/src/index.ts": `export const z = true;`, + }); + + const snapshot = await api.createSnapshot({ + openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], + }); + + const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; + const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; + const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; + assert.ok(proj1, "proj1 should be in final snapshot"); + assert.ok(proj2, "proj2 should be in final snapshot"); + assert.ok(proj3, "proj3 should be in final snapshot"); + + // Fetch several intrinsic types from each checker. + // If type IDs collide across checkers, registerType panics → API error. + const num1 = await proj1.checker.getNumberType(); + const str1 = await proj1.checker.getStringType(); + const bool1 = await proj1.checker.getBooleanType(); + const any1 = await proj1.checker.getAnyType(); + const num2 = await proj2.checker.getNumberType(); + const str2 = await proj2.checker.getStringType(); + const bool2 = await proj2.checker.getBooleanType(); + const any2 = await proj2.checker.getAnyType(); + const num3 = await proj3.checker.getNumberType(); + const str3 = await proj3.checker.getStringType(); + const bool3 = await proj3.checker.getBooleanType(); + const any3 = await proj3.checker.getAnyType(); + + assert.ok(num1.flags & TypeFlags.Number, "proj1 number type"); + assert.ok(str1.flags & TypeFlags.String, "proj1 string type"); + assert.ok(bool1.flags & TypeFlags.Boolean, "proj1 boolean type"); + assert.ok(any1.flags & TypeFlags.Any, "proj1 any type"); + + assert.ok(num2.flags & TypeFlags.Number, "proj2 number type"); + assert.ok(str2.flags & TypeFlags.String, "proj2 string type"); + assert.ok(bool2.flags & TypeFlags.Boolean, "proj2 boolean type"); + assert.ok(any2.flags & TypeFlags.Any, "proj2 any type"); + + assert.ok(num3.flags & TypeFlags.Number, "proj3 number type"); + assert.ok(str3.flags & TypeFlags.String, "proj3 string type"); + assert.ok(bool3.flags & TypeFlags.Boolean, "proj3 boolean type"); + assert.ok(any3.flags & TypeFlags.Any, "proj3 any type"); + }); + + test("symbol and signature handles from 3 projects in the same snapshot have non-colliding IDs", async () => { + await using api = spawnAPI({ + "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj1/src/index.ts": `export function add(a: number, b: number): number { return a + b; }`, + "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj2/src/index.ts": `export function greet(name: string): string { return "hello " + name; }`, + "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj3/src/index.ts": `export function toggle(b: boolean): boolean { return !b; }`, + }); + + const snapshot = await api.createSnapshot({ + openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], + }); + + const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; + const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; + const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; + + // Get a symbol from each project (exercises symbol registry) + const src1 = `export function add(a: number, b: number): number { return a + b; }`; + const src2 = `export function greet(name: string): string { return "hello " + name; }`; + const src3 = `export function toggle(b: boolean): boolean { return !b; }`; + + const sym1 = await proj1.checker.getSymbolAtPosition("/proj1/src/index.ts", src1.indexOf("add")); + const sym2 = await proj2.checker.getSymbolAtPosition("/proj2/src/index.ts", src2.indexOf("greet")); + const sym3 = await proj3.checker.getSymbolAtPosition("/proj3/src/index.ts", src3.indexOf("toggle")); + assert.ok(sym1, "proj1 symbol"); + assert.ok(sym2, "proj2 symbol"); + assert.ok(sym3, "proj3 symbol"); + assert.equal(sym1.name, "add", "proj1 symbol name"); + assert.equal(sym2.name, "greet", "proj2 symbol name"); + assert.equal(sym3.name, "toggle", "proj3 symbol name"); + + // Get type of each symbol, then signatures (exercises type + signature registries) + const type1 = await proj1.checker.getTypeOfSymbol(sym1); + const type2 = await proj2.checker.getTypeOfSymbol(sym2); + const type3 = await proj3.checker.getTypeOfSymbol(sym3); + assert.ok(type1, "proj1 function type"); + assert.ok(type2, "proj2 function type"); + assert.ok(type3, "proj3 function type"); + + const sigs1 = await proj1.checker.getSignaturesOfType(type1, SignatureKind.Call); + const sigs2 = await proj2.checker.getSignaturesOfType(type2, SignatureKind.Call); + const sigs3 = await proj3.checker.getSignaturesOfType(type3, SignatureKind.Call); + assert.equal(sigs1.length, 1, "proj1 has 1 call signature"); + assert.equal(sigs2.length, 1, "proj2 has 1 call signature"); + assert.equal(sigs3.length, 1, "proj3 has 1 call signature"); + assert.equal(sigs1[0].parameters.length, 2, "proj1 add() has 2 params"); + assert.equal(sigs2[0].parameters.length, 1, "proj2 greet() has 1 param"); + assert.equal(sigs3[0].parameters.length, 1, "proj3 toggle() has 1 param"); + }); +}); + +describe("Checker - getBaseTypeOfLiteralType", { concurrency }, () => { + test("number literal widens to number", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = 42;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const x = 42;`; + const pos = src.indexOf("x ="); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const literalType = await project.checker.getTypeOfSymbol(symbol); + assert.ok(literalType); + assert.ok(literalType.flags & TypeFlags.NumberLiteral); + const baseType = await project.checker.getBaseTypeOfLiteralType(literalType); + assert.ok(baseType); + assert.ok(baseType.flags & TypeFlags.Number); + }); + + test("string literal widens to string", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const s = "hello";`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const s = "hello";`; + const pos = src.indexOf("s "); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const literalType = await project.checker.getTypeOfSymbol(symbol); + assert.ok(literalType); + assert.ok(literalType.flags & TypeFlags.StringLiteral); + const baseType = await project.checker.getBaseTypeOfLiteralType(literalType); + assert.ok(baseType); + assert.ok(baseType.flags & TypeFlags.String); + }); +}); + +describe("Checker - getContextualType", { concurrency }, () => { + test("contextual type from function parameter", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +function foo(x: number) {} +foo(42); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the argument "42" in foo(42) + // statement[1] = foo(42); which is an ExpressionStatement -> CallExpression + const callStmt = sourceFile.statements[1]; + assert.ok(callStmt); + let numLiteral: import("@typescript/typescript/unstable/ast").Expression | undefined; + callStmt.forEachChild(function visit(node) { + if (isCallExpression(node)) { + // First argument + numLiteral = node.arguments[0]; + } + node.forEachChild(visit); + }); + assert.ok(numLiteral); + const contextualType = await project.checker.getContextualType(numLiteral); + assert.ok(contextualType); + assert.ok(contextualType.flags & TypeFlags.Number); + }); +}); + +describe("Checker - getTypeOfSymbolAtLocation", { concurrency }, () => { + test("narrowed type via typeof check", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export function check(x: string | number) { + if (typeof x === "string") { + return x; + } + return x; +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport function check(x: string | number) {\n if (typeof x === "string") {\n return x;\n }\n return x;\n}\n`; + + // Get the symbol for parameter "x" + const paramPos = src.indexOf("x:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", paramPos); + assert.ok(symbol); + assert.equal(symbol.name, "x"); + + // Get the type of "x" at the wider function scope — should be string | number + const wideType = await project.checker.getTypeOfSymbol(symbol); + assert.ok(wideType); + assert.ok(wideType.flags & TypeFlags.Union, `Expected union type, got flags ${wideType.flags}`); + + // Get the narrowed return x inside the if block + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // statement[0] is the function declaration + const funcDecl = sourceFile.statements[0]; + assert.ok(funcDecl); + // Walk to find the first "return x" — inside the if, x should be narrowed to string + let firstReturnX: import("@typescript/typescript/unstable/ast").Node | undefined; + funcDecl.forEachChild(function visit(node) { + if (isReturnStatement(node) && !firstReturnX) { + // The expression of the return statement is the identifier "x" + if (node.expression) { + firstReturnX = node.expression; + } + } + node.forEachChild(visit); + }); + assert.ok(firstReturnX); + const narrowedType = await project.checker.getTypeOfSymbolAtLocation(symbol, firstReturnX); + assert.ok(narrowedType); + // Inside the if (typeof x === "string") branch, x should be narrowed to string + assert.ok(narrowedType.flags & TypeFlags.String, `Expected string type, got flags ${narrowedType.flags}`); + }); +}); + +describe("Checker - getShorthandAssignmentValueSymbol", { concurrency }, () => { + test("shorthand property symbol resolves to variable", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const name = "Alice"; +export const obj = { name }; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the shorthand property assignment { name } + // statement[1] = export const obj = { name }; + let shorthandNode: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isShorthandPropertyAssignment(node)) { + shorthandNode = node; + } + node.forEachChild(visit); + }); + assert.ok(shorthandNode, "Should find a shorthand property assignment"); + const valueSymbol = await project.checker.getShorthandAssignmentValueSymbol(shorthandNode); + assert.ok(valueSymbol); + assert.equal(valueSymbol.name, "name"); + }); +}); + +describe("readFile callback semantics", { concurrency }, () => { + test("callback configurations require every operation at runtime", () => { + assert.throws( + () => new API({ fs: { readFile: serverFS.useOS } as FileSystemCallbacks }), + /Invalid filesystem callback 'fileExists'/, + ); + }); + + test("invalid callback results do not fall through to the server OS", async () => { + const fs: FileSystemCallbacks = { + ...createVirtualFileSystem({ + "/tsconfig.json": "{}", + }), + readFile: (() => null) as unknown as FileSystemCallbacks["readFile"], + }; + await using api = new API({ cwd: "/", fs }); + await assert.rejects( // @sync: assert.throws( + () => api.readConfigFile("/tsconfig.json"), + /Invalid result from filesystem callback 'readFile'/, + ); + }); + + test("realpath callback string results are resolved and normalized by the server", async () => { + const fs = createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { module: "nodenext", moduleResolution: "nodenext" }, + files: ["index.ts"], + }), + "/index.ts": `import "pkg";`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + }); + for ( + const realpath of [ + (path: string) => path.replaceAll("/", "\\"), + (path: string) => path.slice(path.lastIndexOf("/") + 1), + (path: string) => "../" + path.split("/").slice(-2).join("/"), + ] + ) { + const callbacks: FileSystemCallbacks = { ...fs, realpath }; + await using api = new API({ cwd: "/", fs: callbacks }); + + using snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok( + (await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFileNames()) + .includes(toRootedFilePath("/node_modules/pkg/index.d.ts", undefined)), + ); + } + }); + + // @sync-skip-block-start + test("callback configuration and implementations are read together when connecting", async () => { + const fs: FileSystemCallbacks = { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: serverFS.useOS, + realpath: serverFS.identity, + stat: serverFS.fakeStat, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }; + await using api = new API({ fs }); + let calls = 0; + fs.readFile = () => { + calls++; + return undefined; + }; + + await api.readConfigFile(fileURLToPath(new URL("../../package.json", import.meta.url).toString())); + assert.ok(calls > 0); + }); + // @sync-skip-block-end + + test("readFile: string returns content, undefined blocks fallback, useOS falls through to the server OS", async () => { + const virtualFiles: Record = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x: number = 1;`, + }; + const vfs = createVirtualFileSystem(virtualFiles); + const blockedPath = "/src/blocked.ts"; + + const fs: FileSystemCallbacks = { + ...vfs, + readFile: fileName => { + if (fileName === blockedPath) { + return undefined; + } + // Try the VFS first; if it has the file, return its content (string). + // Otherwise use the OS filesystem on the server. + return vfs.readFile(fileName); + }, + }; + + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // 1. String content: virtual file is found + const sf = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sf, "Virtual file should be found"); + assert.equal(sf.text, virtualFiles["/src/index.ts"]); + + // 2. useOS fallback: lib files from the server OS should be present. + // If readFile returned undefined rather than useOS for unknowns, lib files would be missing + // and `number` would not resolve — this was the original async bug. + // Verify by checking that `number` resolves to a proper type (not error). + const pos = virtualFiles["/src/index.ts"].indexOf("x:"); + const type = await project.checker.getTypeAtPosition("/src/index.ts", pos); + assert.ok(type, "Type should resolve"); + assert.ok(type.flags & TypeFlags.Number, `Expected number type, got flags ${type.flags}`); + + // 3. undefined blocks fallback: blocked file should not be found + const blockedSf = await project.program.getSourceFile(blockedPath); + assert.equal(blockedSf, undefined, "Blocked file should not be found"); + }); + + test("configured case sensitivity is used by the server and client", async () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["/src/index.ts"] }), + "/src/index.ts": `export const value = 1;`, + }; + { + await using api = new API({ + cwd: "/", + fs: createVirtualFileSystem(files), + useCaseSensitiveFileNames: false, + }); + const program = (await api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; + assert.ok(await program.getSourceFile("/SRC/INDEX.TS")); + } + { + await using api = new API({ + cwd: "/", + fs: createVirtualFileSystem(files), + useCaseSensitiveFileNames: true, + }); + const program = (await api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; + assert.equal(await program.getSourceFile("/SRC/INDEX.TS"), undefined); + } + }); +}); + +describe("updateSnapshot file systems", { concurrency }, () => { + test("request filesystem factories normalize files and preserve explicit listings", () => { + const memory = createFileSystem([ + ["/src/index.ts", "posix"], + ["C:\\repo\\src\\index.ts", "windows"], + ["file:///literal%20path.ts", "literal file-name string"], + [{ uri: "file:///encoded/path%20with%20spaces.ts" }, "file URI"], + [{ uri: "file:///C%3A/repo/encoded%23name.ts" }, "Windows file URI"], + [{ uri: "file://server/share/encoded%20name.ts" }, "UNC file URI"], + [{ uri: "file:///encoded/unicode%E2%80%93name.ts" }, "Unicode file URI"], + [{ uri: "file:///encoded/literal+plus.ts" }, "plus file URI"], + [{ uri: "file:///encoded/once%2520encoded.ts" }, "double-encoded file URI"], + ["vscode-remote://ssh-remote+host/workspace/src/index.ts", "remote"], + ["vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts", "notebook"], + ]); + assert.deepEqual(memory, { + kind: "full", + files: { + "/src/index.ts": "posix", + "C:/repo/src/index.ts": "windows", + "file:///literal%20path.ts": "literal file-name string", + "/encoded/path with spaces.ts": "file URI", + "C:/repo/encoded#name.ts": "Windows file URI", + "//server/share/encoded name.ts": "UNC file URI", + "/encoded/unicode–name.ts": "Unicode file URI", + "/encoded/literal+plus.ts": "plus file URI", + "/encoded/once%20encoded.ts": "double-encoded file URI", + "vscode-remote://ssh-remote+host/workspace/src/index.ts": "remote", + "vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts": "notebook", + }, + directories: undefined, + symlinks: undefined, + removedPaths: undefined, + }); + + const directories = { "/explicit": { files: ["provided.ts"], directories: [] } }; + const cache = createFileSystemLayer([["/ignored/derived.ts", "cache"]], { + directories, + removedPaths: ["/removed.ts", "/removed"], + }); + assert.equal(cache.kind, "layer"); + assert.deepEqual(cache.directories, directories); + assert.deepEqual(cache.removedPaths, ["/removed.ts", "/removed"]); + + assert.throws( + () => + createFileSystem([ + ["/duplicate.ts", "path"], + [{ uri: "file:///duplicate.ts" }, "URI"], + ]), + /Duplicate request filesystem path: \/duplicate\.ts/, + ); + + const prototypeFileSystem = createFileSystem([["__proto__", "prototype"]]); + assert.equal(prototypeFileSystem.files["__proto__"], "prototype"); + assert.ok(Object.hasOwn(prototypeFileSystem.files, "__proto__")); + + assert.throws( + () => + createFileSystem([ + ["/normalized/duplicate.ts", "forward slash"], + ["\\normalized\\duplicate.ts", "backslash"], + ]), + /Duplicate request filesystem path: \/normalized\/duplicate\.ts/, + ); + }); + + test("full file system is total and does not invoke host callbacks", async () => { + const callbackCalls: string[] = []; + const host = createVirtualFileSystem({ + "/host.ts": `export const source = "host";`, + }); + const fs: FileSystemCallbacks = { + readFile: path => { + callbackCalls.push(`readFile:${path}`); + return host.readFile!(path); + }, + fileExists: path => { + callbackCalls.push(`fileExists:${path}`); + return host.fileExists!(path); + }, + directoryExists: path => { + callbackCalls.push(`directoryExists:${path}`); + return host.directoryExists!(path); + }, + getAccessibleEntries: path => { + callbackCalls.push(`getAccessibleEntries:${path}`); + return host.getAccessibleEntries!(path); + }, + realpath: path => { + callbackCalls.push(`realpath:${path}`); + return path; + }, + stat: path => { + callbackCalls.push(`stat:${path}`); + if (host.directoryExists(rootedDirectoryPathFromPath(path))) return { mode: 0o040555, size: 0, mtime: new Date(0) }; + if (host.fileExists(rootedFilePathFromPath(path))) return { mode: 0o100444, size: 0, mtime: new Date(0) }; + return undefined; + }, + writeFile: (path, content) => { + callbackCalls.push(`writeFile:${path}`); + host.writeFile!(path, content); + }, + removeFile: path => { + callbackCalls.push(`removeFile:${path}`); + host.removeFile(path); + }, + }; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), + "/src/index.ts": `export const source = "memory";`, + }, + directories: { + "/": { files: ["tsconfig.json"], directories: ["src"] }, + "/src": { files: ["index.ts"], directories: [] }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.equal(sourceFile?.text, `export const source = "memory";`); + assert.equal(await project.program.getSourceFile("/host.ts"), undefined); + assert.deepEqual(callbackCalls, []); + }); + + test("full file system with lib resolves the default library", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemWithLib(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["src/main.ts"] }), + "/src/main.ts": `export const values: Array = [];`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.deepEqual(await program.getGlobalDiagnostics(), []); + const sourceFileNames = await program.getSourceFileNames(); + const defaultLibraryName = sourceFileNames.find(fileName => fileName.includes("/lib.") && fileName.endsWith(".d.ts")); + assert.ok(defaultLibraryName, JSON.stringify(sourceFileNames)); + const defaultLibrary = await program.getSourceFile(defaultLibraryName); + assert.ok(defaultLibrary); + assert.equal(await program.isSourceFileDefaultLibrary(defaultLibrary), true); + }); + + test("full file system accepts and caches paths decoded from VS Code document URIs", async () => { + const fileDocument = { uri: "file:///workspace/file%20name.ts" }; + const remoteDocument = { uri: "vscode-remote://ssh-remote+host/workspace/src/remote%20name.ts" }; + const notebookDocument = { uri: "vscode-notebook-cell:/workspace/notebook.ipynb/cell%20name.ts" }; + const untitledDocument = { uri: "untitled:Untitled-1" }; + const files: [DocumentIdentifier, string][] = [ + [fileDocument, `export const file = true;`], + [remoteDocument, `export const remote = true;`], + [notebookDocument, `export const cell = true;`], + [untitledDocument, `export const untitled = true;`], + ]; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + collectTiming: true, + }); + using snapshot = await api.createSnapshot({ + openFiles: files.map(([document]) => document), + fileSystem: createFileSystem(files), + }); + for (const [document, text] of files) { + const project = await snapshot.getDefaultProjectForFile(document); + assert.ok(project); + await api.resetTimingInfo(); + const sourceFile = await project.program.getSourceFile(document); + assert.ok(sourceFile); + assert.equal(sourceFile.text, text); + assert.equal((await api.getTimingInfo()).totals.requestCount, 1); + + assert.strictEqual(await project.program.getSourceFile(document), sourceFile); + assert.strictEqual(await project.program.getSourceFile(sourceFile.fileName), sourceFile); + assert.strictEqual(await project.program.getSourceFile(sourceFile.path), sourceFile); + assert.equal((await api.getTimingInfo()).totals.requestCount, 1, sourceFile.fileName); + } + }); + + test("file system layer bypasses callbacks on hits and falls back on misses", async () => { + const readFileCalls: string[] = []; + const directoryCalls: string[] = []; + const host = createVirtualFileSystem({ + "/src/fallback.ts": `export const fallback = true;`, + }); + const fs: FileSystemCallbacks = { + ...host, + readFile: path => { + readFileCalls.push(path); + return host.readFile!(path); + }, + getAccessibleEntries: path => { + directoryCalls.push(path); + return host.getAccessibleEntries!(path); + }, + }; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: { + kind: "layer", + files: { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), + "/src/index.ts": `export const cached = true;`, + }, + directories: { + "/": { files: ["tsconfig.json"], directories: ["src"] }, + "/src": { files: ["fallback.ts", "index.ts"], directories: [] }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.equal((await project.program.getSourceFile("/src/index.ts"))?.text, `export const cached = true;`); + assert.equal((await project.program.getSourceFile("/src/fallback.ts"))?.text, `export const fallback = true;`); + + assert.ok(!readFileCalls.includes("/tsconfig.json")); + assert.ok(!readFileCalls.includes("/src/index.ts")); + assert.ok(readFileCalls.includes("/src/fallback.ts")); + assert.ok(!directoryCalls.includes("/")); + assert.ok(!directoryCalls.includes("/src")); + }); + + test("file system layer factory preserves host directory entries", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ + "/src/from-host.ts": `export const host = true;`, + }), + }); + + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemLayer([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] })], + ["/src/from-cache.ts", `export const cache = true;`], + ]), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.deepEqual( + [...await program.getSourceFileNames()].sort(), + ["/src/from-cache.ts", "/src/from-host.ts"], + ); + }); + + test("full file system resolves packages through internal monorepo symlinks", async () => { + const callbackCalls: string[] = []; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: path => { + callbackCalls.push(path); + return serverFS.useOS; + }, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }, + }); + + using snapshot = await api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), + "/project/index.ts": `import { value } from "pkg"; export { value };`, + "/packages/pkg/index.d.ts": `export declare const value: number;`, + }, + symlinks: { + "/project/node_modules/pkg": { target: "/packages/pkg" }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (await project.program.getSourceFile("/packages/pkg/index.d.ts"))?.text, + `export declare const value: number;`, + ); + assert.deepEqual(callbackCalls, []); + }); + + test("full file system resolves relative symlink targets", async () => { + const callbackCalls: string[] = []; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: path => { + callbackCalls.push(path); + return serverFS.useOS; + }, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }, + }); + + using snapshot = await api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["index.ts"] }), + "/project/index.ts": `export { value } from "./pkg";`, + "/packages/pkg/index.d.ts": `export declare const value: number;`, + }, + symlinks: { + "/project/pkg": { target: "../packages/pkg" }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (await project.program.getSourceFile("/project/pkg/index.d.ts"))?.text, + `export declare const value: number;`, + ); + assert.deepEqual(callbackCalls, []); + }); + + test("Snapshot.update layers filesystem edits and removals", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem(Object.entries({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { noLib: true }, + include: ["src/**/*.ts"], + }), + "/src/keep.ts": `export const keep = true;`, + "/src/change.ts": `export const version = "old";`, + "/src/remove.ts": `export const remove = true;`, + "/src/removed/gone.ts": `export const gone = true;`, + })), + }); + + using updated = await snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/src/change.ts": `export const version = "new";`, + "/src/added.ts": `export const added = true;`, + }), + { + removedPaths: ["/src/remove.ts", "/src/removed"], + }, + ), + }); + const project = updated.getConfiguredProject("/tsconfig.json")!; + assert.equal((await project.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); + assert.equal((await project.program.getSourceFile("/src/change.ts"))?.text, `export const version = "new";`); + assert.equal((await project.program.getSourceFile("/src/added.ts"))?.text, `export const added = true;`); + assert.equal(await project.program.getSourceFile("/src/remove.ts"), undefined); + assert.equal(await project.program.getSourceFile("/src/removed/gone.ts"), undefined); + using fork = await snapshot.update({ ensurePrograms: true }); + assert.equal((await fork.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/change.ts"))?.text, `export const version = "old";`); + + using updatedAgain = await updated.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/src/added.ts": `export const added = "updated again";`, + }), + { + removedPaths: ["/src/change.ts"], + }, + ), + }); + const updatedAgainProject = updatedAgain.getConfiguredProject("/tsconfig.json")!; + assert.equal((await updatedAgainProject.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); + assert.equal((await updatedAgainProject.program.getSourceFile("/src/added.ts"))?.text, `export const added = "updated again";`); + assert.equal(await updatedAgainProject.program.getSourceFile("/src/change.ts"), undefined); + }); + + test("eager snapshot disposal does not retain filesystem history", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + let snapshot: Snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["pkg/index.ts"] })], + ["/pkg/index.ts", ""], + ]), + }); + try { + let content = ""; + for (const character of "export const x = 1") { + const oldSnapshot: Snapshot = snapshot; + content += character; + snapshot = await oldSnapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer([["/pkg/index.ts", content]]), + }); + await oldSnapshot.dispose(); + assert.equal(oldSnapshot.isDisposed(), true); + } + + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((await program.getSourceFile("/pkg/index.ts"))?.text, "export const x = 1"); + } + finally { + await snapshot.dispose(); + } + }); + + test("Snapshot.update treats a full filesystem as a total replacement", async () => { + const host = createVirtualFileSystem({ + "/host.ts": `export const source = "host";`, + }); + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = await api.createSnapshot(); + using replaced = await snapshot.update({ + ensurePrograms: true, + openProject: "/tsconfig.json", + fileSystem: createFileSystem([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["memory.ts", "host.ts"] })], + ["/memory.ts", `export const source = "memory";`], + ]), + }); + const program = replaced.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((await program.getSourceFile("/memory.ts"))?.text, `export const source = "memory";`); + assert.equal(await program.getSourceFile("/host.ts"), undefined); + }); + + test("Snapshot.update applies target changes through inherited symlinks", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem( + Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["src/main.ts"] }), + "/src/main.ts": `import "./link/change"; import "./link/added"; import "./link/remove";`, + "/target/change.ts": `export const version = "old";`, + "/target/remove.ts": `export const removed = true;`, + }), + { + symlinks: { + "/src/link": { target: "/target" }, + }, + }, + ), + }); + + using updated = await snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/target/change.ts": `export const version = "new";`, + "/target/added.ts": `export const added = true;`, + }), + { + removedPaths: ["/target/remove.ts"], + }, + ), + }); + const program = updated.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((await program.getSourceFile("/src/link/change.ts"))?.text, `export const version = "new";`); + assert.equal((await program.getSourceFile("/src/link/added.ts"))?.text, `export const added = true;`); + assert.equal(await program.getSourceFile("/src/link/remove.ts"), undefined); + }); + + test("full filesystem emit returns outputs without mutating the host", async () => { + const hostWrites: string[] = []; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: serverFS.useOS, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: path => { + hostWrites.push(path); + }, + removeFile: serverFS.useOS, + }, + }); + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), + "/src/main.ts": `export const value: number = 1;`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const result = await program.emit(); + assert.deepEqual(result.emittedFiles, ["/out/main.js"]); + assert.deepEqual(result.fileSystem, { + kind: "layer", + files: { + "/out/main.js": `export const value = 1;\n`, + }, + }); + assert.deepEqual(hostWrites, []); + + using updated = await snapshot.update({ fileSystem: result.fileSystem!, openFiles: ["/out/main.js"] }); + const outputProject = await updated.getDefaultProjectForFile("/out/main.js"); + assert.equal((await updated.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"))?.text, `export const value: number = 1;`); + assert.equal((await outputProject?.program.getSourceFile("/out/main.js"))?.text, `export const value = 1;\n`); + }); + + test("filesystem layer emit writes through to the host", async () => { + const host = createVirtualFileSystem({}); + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = await api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemLayer(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), + "/src/main.ts": `export const value: number = 1;`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const result = await program.emit(); + assert.equal(result.fileSystem, undefined); + assert.equal(host.readFile!(toRootedFilePath("/out/main.js", undefined)), `export const value = 1;\n`); + }); + + test("full file system can link node_modules from the host", async () => { + const readFileCalls: string[] = []; + const directoryExistsCalls: string[] = []; + const fileExistsCalls: string[] = []; + const host = createVirtualFileSystem({ + "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, + }); + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + ...host, + directoryExists: path => { + directoryExistsCalls.push(path); + return host.directoryExists!(path); + }, + fileExists: path => { + const exists = host.fileExists!(path); + fileExistsCalls.push(`${path}:${exists}`); + return exists; + }, + readFile: path => { + readFileCalls.push(path); + return host.readFile!(path); + }, + }, + }); + + using snapshot = await api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), + "/project/index.ts": `import { value } from "pkg"; export { value };`, + }, + symlinks: { + "/project/node_modules": { target: "/host/node_modules", host: true }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + const sourceFileNames = await project.program.getSourceFileNames(); + assert.ok( + sourceFileNames.includes("/host/node_modules/pkg/index.d.ts" as RootedFilePath), + JSON.stringify({ sourceFileNames, readFileCalls, directoryExistsCalls, fileExistsCalls }), + ); + assert.equal( + (await project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, + `export declare const value: string;`, + ); + assert.ok(readFileCalls.includes("/host/node_modules/pkg/index.d.ts")); + assert.ok(!readFileCalls.some(path => path.startsWith("/project/node_modules"))); + }); + + test("Snapshot.update host symlinks bypass an inherited full filesystem", async () => { + const host = createVirtualFileSystem({ + "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, + }); + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = await api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: createFileSystem([ + ["/project/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] })], + ["/project/index.ts", `import { value } from "pkg"; export { value };`], + ]), + }); + using updated = await snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer([], { + symlinks: { + "/project/node_modules": { target: "/host/node_modules", host: true }, + }, + }), + }); + const project = updated.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (await project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, + `export declare const value: string;`, + ); + }); + + // TODO: Add request filesystem coverage for `tsc -b` and `tsc -b --clean` + // once build and clean are exposed through the client API. In particular, + // verify that clean removes synthetic outputs and that build-mode re-timestamping + // of emitted-but-unchanged files works for full filesystems, which currently + // do not model modification times. +}); + +describe("Checker - isArrayType / isTupleType", { concurrency }, () => { + test("number[] is array, not tuple", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: number[] = [];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: number[] = [];`; + const pos = src.indexOf("xs"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), true); + assert.equal(await project.checker.isTupleType(type), false); + }); + + test("readonly number[] is array", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: readonly number[] = [];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: readonly number[] = [];`; + const pos = src.indexOf("xs"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), true); + assert.equal(await project.checker.isTupleType(type), false); + }); + + test("Array is array, not tuple", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: Array = [];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: Array = [];`; + const pos = src.indexOf("xs"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), true); + assert.equal(await project.checker.isTupleType(type), false); + }); + + test("[number, string] is tuple, not array", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const tup: [number, string] = [1, "a"];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const tup: [number, string] = [1, "a"];`; + const pos = src.indexOf("tup"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), false); + assert.equal(await project.checker.isTupleType(type), true); + }); + + test("readonly [number, string] is tuple, not array", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const tup: readonly [number, string] = [1, "a"];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const tup: readonly [number, string] = [1, "a"];`; + const pos = src.indexOf("tup"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), false); + assert.equal(await project.checker.isTupleType(type), true); + }); + + test("string is neither array nor tuple", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const str: string = "";`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const str: string = "";`; + const pos = src.indexOf("str"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(await project.checker.isArrayType(type), false); + assert.equal(await project.checker.isTupleType(type), false); + }); +}); + +describe("Checker - isReadonlySymbol", { concurrency }, () => { + test("properties with a 'readonly' modifier", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface User { + readonly name: string; + age: number; +} + +export type ReadonlyUser = Readonly; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const user = sourceFile.statements.find(isInterfaceDeclaration); + assert.ok(user); + const userProperties = await project.checker.getPropertiesOfType( + await project.checker.getTypeAtLocation(user), + ); + assert.equal(await project.checker.isReadonlySymbol(userProperties[0]), true); + assert.equal(await project.checker.isReadonlySymbol(userProperties[1]), false); + const readonlyUser = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(readonlyUser); + const readonlyUserProperties = await project.checker.getPropertiesOfType( + await project.checker.getTypeAtLocation(readonlyUser), + ); + assert.equal(await project.checker.isReadonlySymbol(readonlyUserProperties[0]), true); + assert.equal(await project.checker.isReadonlySymbol(readonlyUserProperties[1]), true); + }); + + test("variables declared with 'const'", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const a = 1; export let b = 2;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const a = await checker.getSymbolAtPosition("/src/main.ts", "export const ".length); + const b = await checker.getSymbolAtPosition("/src/main.ts", "export const a = 1; export let ".length); + assert.ok(a); + assert.ok(b); + assert.equal(await checker.isReadonlySymbol(a), true); + assert.equal(await checker.isReadonlySymbol(b), false); + }); + + test("get accessors without matching set accessors", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +class Alpha { + private _value!: number; + get value(): number { + return this._value; + } +} +class Bravo { + private _value!: number; + get value(): number { + return this._value; + } + set value(newValue: number) { + this._value = newValue; + } +} +export type A = InstanceType; +export type B = InstanceType; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAliases = sourceFile.statements.filter(isTypeAliasDeclaration); + assert.equal(typeAliases.length, 2); + const aProperties = await project.checker.getPropertiesOfType( + await project.checker.getTypeAtLocation(typeAliases[0]), + ); + assert.equal(await project.checker.isReadonlySymbol(aProperties[1]), true); + const bProperties = await project.checker.getPropertiesOfType( + await project.checker.getTypeAtLocation(typeAliases[1]), + ); + assert.equal(await project.checker.isReadonlySymbol(bProperties[1]), false); + }); +}); + +describe("Checker - getReturnTypeOfSignature", { concurrency }, () => { + test("returns the return type of a function signature", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function add(a: number, b: number): number { return a + b; }`; + const pos = src.indexOf("add("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const returnType = await project.checker.getReturnTypeOfSignature(sigs[0]); + assert.ok(returnType); + assert.ok(returnType.flags & TypeFlags.Number, `Expected number, got flags ${returnType.flags}`); + }); +}); + +describe("Checker - getRestTypeOfSignature", { concurrency }, () => { + test("returns the rest type of a signature with rest parameter", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`; + const pos = src.indexOf("sum("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const restType = await project.checker.getRestTypeOfSignature(sigs[0]); + assert.ok(restType); + assert.ok(restType.flags & TypeFlags.Number, `Expected number type, got flags ${restType.flags}`); + }); +}); + +describe("Checker - getTypePredicateOfSignature", { concurrency }, () => { + test("returns type predicate for 'x is T' guard", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function isString(x: unknown): x is string { return typeof x === "string"; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function isString(x: unknown): x is string { return typeof x === "string"; }`; + const pos = src.indexOf("isString("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.Identifier); + assert.equal(predicate.parameterName, "x"); + assert.equal(predicate.parameterIndex, 0); + assert.ok(predicate.type); + assert.ok(predicate.type.flags & TypeFlags.String); + }); + + test("returns type predicate for 'this is T' guard", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Animal { + isdog(): this is Dog { return this instanceof Dog; } +} +export class Dog extends Animal { + bark() {} +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Animal {\n isdog(): this is Dog { return this instanceof Dog; }\n}\nexport class Dog extends Animal {\n bark() {}\n}\n`; + const pos = src.indexOf("isdog("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.This); + }); + + test("returns type predicate for 'asserts x is T'", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`; + const pos = src.indexOf("assertIsString("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.AssertsIdentifier); + assert.equal(predicate.parameterName, "x"); + assert.equal(predicate.parameterIndex, 0); + assert.ok(predicate.type); + assert.ok(predicate.type.flags & TypeFlags.String); + }); + + test("returns undefined for signature without type predicate", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function add(a: number, b: number): number { return a + b; }`; + const pos = src.indexOf("add("); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = await project.checker.getTypePredicateOfSignature(sigs[0]); + assert.equal(predicate, undefined); + }); +}); + +describe("Checker - getBaseTypes", { concurrency }, () => { + test("returns base types of a class", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Base { + x: number = 0; +} +export class Derived extends Base { + y: string = ""; +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\n`; + const pos = src.indexOf("Derived"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); + assert.ok(baseTypes.length > 0, "Should have at least one base type"); + const baseSymbol = await baseTypes[0].getSymbol(); + assert.ok(baseSymbol); + assert.equal(baseSymbol.name, "Base"); + }); + + test("returns base types of an interface", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Animal { + name: string; +} +export interface Dog extends Animal { + bark(): void; +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Animal {\n name: string;\n}\nexport interface Dog extends Animal {\n bark(): void;\n}\n`; + const pos = src.indexOf("Dog"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); + assert.ok(baseTypes.length > 0, "Should have at least one base type"); + const baseSymbol = await baseTypes[0].getSymbol(); + assert.ok(baseSymbol); + assert.equal(baseSymbol.name, "Animal"); + }); + + test("does not panic for a type alias to a generic interface instantiation", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Box { + value: T; +} +export type BoxOfString = Box; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(typeAlias); + const type = await project.checker.getTypeAtLocation(typeAlias); + assert.ok(type); + // A generic interface instantiation produces a type reference, not an + // interface type, so it has no base types and yields []. + const baseTypes = await project.checker.getBaseTypes(type as InterfaceType); + assert.deepEqual(baseTypes, []); + }); +}); + +describe("Type - getBaseTypes", { concurrency }, () => { + test("returns base types for a class type and undefined for a non-class/interface", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Base { + x: number = 0; +} +export class Derived extends Base { + y: string = ""; +} +export const n: number = 0; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\nexport const n: number = 0;\n`; + + const derivedSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("Derived")); + assert.ok(derivedSymbol); + const derivedType = await project.checker.getDeclaredTypeOfSymbol(derivedSymbol); + assert.ok(derivedType.isClassOrInterface(), "Derived should be a class/interface type"); + const baseTypes = await derivedType.getBaseTypes(); + assert.ok(baseTypes && baseTypes.length > 0, "class type should have base types"); + const baseSymbol = await baseTypes![0].getSymbol(); + assert.equal(baseSymbol?.name, "Base"); + + // A primitive type is not a class/interface, so getBaseTypes() is undefined. + const numberSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("n:")); + assert.ok(numberSymbol); + const numberType = await project.checker.getTypeOfSymbol(numberSymbol); + assert.ok(numberType); + assert.equal(numberType.isClassOrInterface(), false); + assert.equal(await numberType.getBaseTypes(), undefined); + }); +}); + +describe("Type - isErrorType", { concurrency }, () => { + test("identifies the error type from an unresolvable annotation", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare const good: string; +declare const bad: ThisTypeDoesNotExist; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\ndeclare const good: string;\ndeclare const bad: ThisTypeDoesNotExist;\n`; + + const badSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("bad")); + assert.ok(badSymbol); + const badType = await project.checker.getTypeOfSymbol(badSymbol); + assert.ok(badType); + assert.ok(badType.isErrorType(), "unresolved annotation should yield the error type"); + assert.ok(isErrorType(badType)); + + const goodSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("good")); + assert.ok(goodSymbol); + const goodType = await project.checker.getTypeOfSymbol(goodSymbol); + assert.ok(goodType); + assert.equal(goodType.isErrorType(), false, "string type is not the error type"); + assert.equal(isErrorType(goodType), false); + }); +}); + +describe("Checker - well-known symbols", { concurrency }, () => { + test("isUnknownSymbol identifies the aliased unknown symbol", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const value = 1; +export type Alias = typeof value; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport const value = 1;\nexport type Alias = typeof value;\n`; + + // A real symbol is not the unknown/undefined symbol. + const valueSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value")); + assert.ok(valueSymbol); + assert.equal(await project.checker.isUnknownSymbol(valueSymbol), false); + assert.equal(await project.checker.isUndefinedSymbol(valueSymbol), false); + }); +}); + +describe("Checker - well-known signatures", { concurrency }, () => { + test("isUnknownSignature identifies an unresolvable call", async () => { + const src = ` +const ok = (x: number) => x; +ok(1); +const notCallable = 1; +notCallable(); +`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const calls: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) calls.push(node); + node.forEachChild(visit); + }); + assert.equal(calls.length, 2, "should find two call expressions"); + + // The valid call resolves to a real signature, not the unknown signature. + const okSig = await project.checker.getResolvedSignature(calls[0]); + assert.equal(await project.checker.isUnknownSignature(okSig), false); + + // The call to a non-callable value yields the unknown signature. + const badSig = await project.checker.getResolvedSignature(calls[1]); + assert.equal(await project.checker.isUnknownSignature(badSig), true); + }); +}); + +describe("Symbol - escaped names and tables", { concurrency }, () => { + test("getExports/getMembers return a cached Map keyed by escaped name", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Animal { + name: string = ""; + speak(): void {} +} +export const value = 1; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + + const exports = await moduleSymbol.getExports(); + assert.ok(exports.has(escapeLeadingUnderscores("Animal"))); + assert.ok(exports.get(escapeLeadingUnderscores("value"))); + // Calling again returns the same cached Map instance. + assert.strictEqual(await moduleSymbol.getExports(), exports); + + const animal = exports.get(escapeLeadingUnderscores("Animal"))!; + const members = await animal.getMembers(); + assert.ok(members.get(escapeLeadingUnderscores("name"))); + assert.ok(members.get(escapeLeadingUnderscores("speak"))); + assert.strictEqual(await animal.getMembers(), members); + }); + + test("anonymous type symbol has a __-escaped name, never the \\xFE sentinel", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const obj: { a: number } = { a: 1 }; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport const obj: { a: number } = { a: 1 };\n`; + const objSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("obj")); + assert.ok(objSymbol); + const objType = await project.checker.getTypeOfSymbol(objSymbol); + assert.ok(objType); + const typeSymbol = await objType.getSymbol(); + assert.ok(typeSymbol); + // The anonymous type literal symbol is internally named; over the wire + // it must be the "__type" escaped form, not the raw "\xFE" sentinel. + assert.equal(typeSymbol.escapedName, InternalSymbolName.Type); + assert.ok(!typeSymbol.escapedName.includes("\xFE")); + }); + + test("distinguishes a pattern ambient module name from a matching user-provided export name", async () => { + const maliciousName = '"*.css"__pattern@1234'; + const types = ` +declare module "*.css" with { type: "css" } { + const className: string; + export default className; +} +`; + const source = ` +const x = ""; +export { x as '${maliciousName}' }; +`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, module: "preserve" } }), + "/src/types.d.ts": types, + "/src/main.ts": source, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const typesFile = await project.program.getSourceFile("/src/types.d.ts"); + assert.ok(typesFile); + const moduleDeclaration = typesFile.statements.find(isModuleDeclaration); + assert.ok(moduleDeclaration); + const ambientModule = await project.checker.getSymbolAtLocation(moduleDeclaration.name); + assert.ok(ambientModule); + assert.match(ambientModule.name, /^__"\*\.css"pattern@\d+$/); + assert.equal(ambientModule.escapedName, ambientModule.name); + assert.equal(tryGetAmbientModuleNameFromSymbolName(ambientModule.escapedName), "*.css"); + + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const sourceFileSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(sourceFileSymbol); + const maliciousExport = (await sourceFileSymbol.getExports()).get(escapeLeadingUnderscores(maliciousName)); + assert.ok(maliciousExport); + assert.equal(maliciousExport.name, maliciousName); + assert.equal(maliciousExport.escapedName, maliciousName); + assert.equal(tryGetAmbientModuleNameFromSymbolName(maliciousExport.escapedName), undefined); + }); +}); + +describe("ast - escapeLeadingUnderscores", { concurrency }, () => { + test("round-trips display and escaped names", () => { + assert.equal(escapeLeadingUnderscores("foo"), "foo"); + assert.equal(escapeLeadingUnderscores("_foo"), "_foo"); + assert.equal(escapeLeadingUnderscores("__foo"), "___foo"); + assert.equal(unescapeLeadingUnderscores("foo" as __String), "foo"); + assert.equal(unescapeLeadingUnderscores("__type" as __String), "__type"); + assert.equal(unescapeLeadingUnderscores("___foo" as __String), "__foo"); + }); +}); + +describe("ast - tryGetAmbientModuleNameFromSymbolName", { concurrency }, () => { + test("gets ambient module names from escaped symbol names", () => { + assert.equal(tryGetAmbientModuleNameFromSymbolName('"pkg"' as __String), "pkg"); + assert.equal(tryGetAmbientModuleNameFromSymbolName('__"*.css"pattern@1234' as __String), "*.css"); + assert.equal(tryGetAmbientModuleNameFromSymbolName('"*.css"__pattern@1234' as __String), undefined); + assert.equal(tryGetAmbientModuleNameFromSymbolName('___"*.css"pattern@1234' as __String), undefined); + assert.equal(tryGetAmbientModuleNameFromSymbolName("value" as __String), undefined); + }); +}); + +describe("ast - getJSDocTags", { concurrency }, () => { + test("returns a node's own tags, and inherited @param / @template tags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers. + * @param a the first number + * @param b the second number + * @returns the sum + */ +export function add(a: number, b: number): number { + return a + b; +} + +/** + * @template T the element type + * @param x a value + */ +export function identity(x: T): T { + return x; +} + +/** @deprecated use add */ +export const total = add(1, 2); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const functions = [...sourceFile.statements].filter(isFunctionDeclaration); + const add = functions[0]; + const identity = functions[1]; + assert.ok(add); + assert.ok(identity); + + // A function reports its own JSDoc tags. + assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); + + // A parameter inherits the matching @param tag from its containing + // signature. + const paramA = add.parameters[0]; + const paramATags = getJSDocTags(paramA); + assert.deepEqual(paramATags.map(t => t.tagName.text), ["param"]); + const paramATag = paramATags[0]; + assert.ok(isJSDocParameterTag(paramATag)); + assert.ok(isIdentifier(paramATag.name)); + assert.equal(paramATag.name.text, "a"); + + const paramB = add.parameters[1]; + const paramBTags = getJSDocTags(paramB); + assert.deepEqual(paramBTags.map(t => t.tagName.text), ["param"]); + const paramBTag = paramBTags[0]; + assert.ok(isJSDocParameterTag(paramBTag)); + assert.ok(isIdentifier(paramBTag.name)); + assert.equal(paramBTag.name.text, "b"); + + // A type parameter inherits the matching @template tag. + const typeParam = identity.typeParameters![0]; + assert.deepEqual(getJSDocTags(typeParam).map(t => t.tagName.text), ["template"]); + + // The value parameter of `identity` inherits its @param tag. + const identityParam = identity.parameters[0]; + assert.deepEqual(getJSDocTags(identityParam).map(t => t.tagName.text), ["param"]); + + // A variable declaration walks up its comment-location chain + // (declaration -> declaration list -> statement) to the JSDoc on the + // containing variable statement. + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const declaration = variable.declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["deprecated"]); + }); + + test("a function-expression parameter inherits @param tags from the variable statement", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** + * @param {string} name a name + * @returns {number} the length + */ +var measure = function (name) { + return name.length; +}; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const declaration = variable.declarationList.declarations[0]; + const funcExpr = declaration.initializer; + assert.ok(funcExpr); + + // The variable statement carries the @param and @returns tags. + assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["param", "returns"]); + + // The function expression's parameter walks declaration -> list -> + // statement and inherits the matching @param tag. + const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; + const paramTags = getJSDocTags(param); + assert.deepEqual(paramTags.map(t => t.tagName.text), ["param"]); + const paramTag = paramTags[0]; + assert.ok(isJSDocParameterTag(paramTag)); + assert.ok(isIdentifier(paramTag.name)); + assert.equal(paramTag.name.text, "name"); + }); + + test("a @type cast tag is owned by its parenthesized expression, not the declaration", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** @type {string} */ +const value = "hello"; + +const cast = /** @type {number} */ (someValue); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const statements = [...sourceFile.statements].filter(isVariableStatement); + + // A @type tag directly on a declaration is reported for that declaration. + const valueDecl = statements[0].declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(valueDecl).map(t => t.tagName.text), ["type"]); + + // A @type cast tag attached to a parenthesized expression is owned by + // that expression and is not reported for the enclosing declaration. + const castDecl = statements[1].declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(castDecl).map(t => t.tagName.text), []); + }); +}); + +describe("ast - getJSDocCommentsAndTags", { concurrency }, () => { + test("returns the whole JSDoc comment when the host node owns all of its tags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * The answer to everything. + * @deprecated use theAnswer instead + */ +export const answer = 42; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; + assert.ok(answer); + + // Every tag on `answer`'s JSDoc comment is owned by `answer`, so the whole + // comment is returned as a single entry rather than its individual tags. + const commentsAndTags = getJSDocCommentsAndTags(answer); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + + // Flattening still yields the same tags as getJSDocTags. + assert.deepEqual(getJSDocTags(answer).map(t => t.tagName.text), ["deprecated"]); + }); + + test("returns the whole JSDoc comment when it has a description but no tags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * The answer to everything. + */ +export const answer = 42; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; + assert.ok(answer); + + // With no tags to discard, the JSDoc node (and its description) is + // still returned rather than an empty tag list. + const commentsAndTags = getJSDocCommentsAndTags(answer); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + assert.equal(getTextOfJSDocComment(commentsAndTags[0].comment), "The answer to everything."); + + assert.deepEqual(getJSDocTags(answer), []); + }); + + test("returns individual tags when the host node does not own all of them", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** @type {string} */ +const value = "hello"; + +const cast = /** @type {number} */ (someValue); +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const statements = [...sourceFile.statements].filter(isVariableStatement); + + // The @type cast tag is not owned by `castDecl`, so no tags qualify and + // the JSDoc comment is not returned at all. + const castDecl = statements[1].declarationList.declarations[0]; + assert.deepEqual(getJSDocCommentsAndTags(castDecl), []); + }); + + test("returns an individual JSDocTag for a parameter matched by name", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** + * @param {string} name the name to measure + * @returns {number} the length + */ +var measure = function (name) { + return name.length; +}; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const funcExpr = variable.declarationList.declarations[0].initializer; + assert.ok(funcExpr); + const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; + + // A Parameter host node returns its matching @param tag directly as a + // JSDocTag, not wrapped in the enclosing JSDoc comment. + const commentsAndTags = getJSDocCommentsAndTags(param); + assert.equal(commentsAndTags.length, 1); + const [tag] = commentsAndTags; + assert.ok(isJSDocParameterTag(tag)); + assert.ok(isIdentifier(tag.name)); + assert.equal(tag.name.text, "name"); + }); + + test("returns the whole JSDoc comment when the host node owns multiple tags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers. + * @param a the first number + * @param b the second number + * @returns the sum + */ +export function add(a: number, b: number): number { + return a + b; +} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const add = [...sourceFile.statements].find(isFunctionDeclaration); + assert.ok(add); + + // All three tags on `add`'s JSDoc comment are owned by `add`, so the + // whole comment is returned as a single entry rather than three tags. + const commentsAndTags = getJSDocCommentsAndTags(add); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + + // Flattening still yields all three tags, in order, via getJSDocTags. + assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); + }); +}); + +describe("Checker - getPropertiesOfType", { concurrency }, () => { + test("returns properties of an object type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Person { + name: string; + age: number; + greet(): void; +} +export declare const p: Person; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Person {\n name: string;\n age: number;\n greet(): void;\n}\nexport declare const p: Person;\n`; + const pos = src.indexOf("p: Person"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const props = await project.checker.getPropertiesOfType(type); + assert.ok(props.length >= 3, `Expected at least 3 properties, got ${props.length}`); + const names = props.map(p => p.name); + assert.ok(names.includes("name"), "should have 'name' property"); + assert.ok(names.includes("age"), "should have 'age' property"); + assert.ok(names.includes("greet"), "should have 'greet' property"); + }); +}); + +describe("Checker - getIndexInfosOfType", { concurrency }, () => { + test("returns index signatures of an indexed type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface StringMap { + [key: string]: number; +} +export declare const m: StringMap; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface StringMap {\n [key: string]: number;\n}\nexport declare const m: StringMap;\n`; + const pos = src.indexOf("m: StringMap"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const indexInfos = await project.checker.getIndexInfosOfType(type); + assert.ok(indexInfos.length > 0, "Should have at least one index info"); + const info = indexInfos[0]; + assert.ok(info.keyType); + assert.ok(info.keyType.flags & TypeFlags.String, `Expected string key type, got flags ${info.keyType.flags}`); + assert.ok(info.valueType); + assert.ok(info.valueType.flags & TypeFlags.Number, `Expected number value type, got flags ${info.valueType.flags}`); + assert.equal(info.isReadonly, false); + }); + + test("readonly index signature reports isReadonly true", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface ReadonlyMap { + readonly [key: string]: number; +} +export declare const m: ReadonlyMap; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface ReadonlyMap {\n readonly [key: string]: number;\n}\nexport declare const m: ReadonlyMap;\n`; + const pos = src.indexOf("m: ReadonlyMap"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const indexInfos = await project.checker.getIndexInfosOfType(type); + assert.ok(indexInfos.length > 0); + assert.equal(indexInfos[0].isReadonly, true); + }); +}); + +describe("Checker - TypeScript API parity", { concurrency }, () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Box { + value: T; + chain(): this; + [key: string]: T | ((...args: never[]) => unknown); + [index: number]: T; +} + +/** Returns the input value. + * @deprecated Use identity instead. + */ +export function legacy(value: T): Promise { + return Promise.resolve(value); +} + +declare function consume(value: string | number): void; +consume(1); + +export type Exported = number; +`, + }; + + test("exposes interface this types and checker operations", async () => { + await using api = spawnAPI(files); + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const boxSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Box")); + assert.ok(boxSymbol); + const boxType = await project.checker.getDeclaredTypeOfSymbol(boxSymbol) as InterfaceType; + assert.ok(boxType.isClassOrInterface()); + const thisType = await boxType.getThisType(); + assert.ok(thisType); + assert.equal(thisType.isThisType, true); + assert.equal(await project.checker.typeToString(thisType), "this"); + + const stringInfo = await project.checker.getIndexInfoOfType(boxType, IndexKind.String); + assert.ok(stringInfo); + assert.ok(stringInfo.keyType.flags & TypeFlags.String); + const numberInfo = await project.checker.getIndexInfoOfType(boxType, IndexKind.Number); + assert.ok(numberInfo); + assert.ok(numberInfo.keyType.flags & TypeFlags.Number); + assert.strictEqual(await project.checker.getIndexTypeOfType(boxType, IndexKind.String), stringInfo.valueType); + assert.strictEqual(await project.checker.getIndexTypeOfType(boxType, IndexKind.Number), numberInfo.valueType); + const valueType = await project.checker.getTypeOfPropertyOfType(boxType, "value"); + assert.ok(valueType); + assert.equal(await project.checker.typeToString(valueType), "T"); + assert.equal(await project.checker.getTypeOfPropertyOfType(boxType, "missing"), undefined); + + const legacySymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("legacy")); + assert.ok(legacySymbol); + const legacyType = await project.checker.getTypeOfSymbol(legacySymbol); + const signature = (await project.checker.getSignaturesOfType(legacyType, SignatureKind.Call))[0]; + assert.ok(signature); + const awaitedType = await project.checker.getAwaitedType(await signature.getReturnType()); + assert.ok(awaitedType); + assert.equal(await project.checker.typeToString(awaitedType), "Awaited"); + + const exportedSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Exported =")); + assert.ok(exportedSymbol); + const localSymbol = (await project.checker.getSymbolsInScope(sourceFile, SymbolFlags.TypeAlias)).find(symbol => symbol.name === "Exported"); + assert.ok(localSymbol); + assert.notEqual(localSymbol.id, exportedSymbol.id); + assert.strictEqual(await project.checker.getExportSymbolOfSymbol(localSymbol), exportedSymbol); + + let call: import("@typescript/typescript/unstable/ast").CallExpression | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node) && sourceFile.text.slice(node.expression.pos, node.expression.end).trim() === "consume") { + call = node; + } + node.forEachChild(visit); + }); + assert.ok(call); + const contextualType = await project.checker.getContextualTypeForArgumentAtIndex(call, 0); + assert.ok(contextualType); + assert.equal(await project.checker.typeToString(contextualType), "string | number"); + }); + + test("uses Strada-compatible JsxEmit values", () => { + assert.equal(JsxEmit.React, 2); + assert.equal(JsxEmit.ReactNative, 3); + }); +}); + +describe("Checker - getConstraintOfTypeParameter", { concurrency }, () => { + test("returns constraint of a type parameter", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function identity(x: T): T { return x; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function identity(x: T): T { return x; }`; + const pos = src.indexOf("identity<"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + assert.ok(sigs[0].typeParameters && sigs[0].typeParameters.length > 0, "Should have type parameters"); + const typeParams = await sigs[0].getTypeParameters(); + const constraint = await project.checker.getConstraintOfTypeParameter(typeParams[0]); + assert.ok(constraint); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + }); +}); + +describe("Checker - TypeParameter getters", { concurrency }, () => { + test("getConstraint() and getDefault() return the constraint and default types", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function f(x: T): T { return x; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function f(x: T): T { return x; }`; + const pos = src.indexOf("f<"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = await sigs[0].getTypeParameters(); + assert.ok(typeParams.length > 0, "Should have type parameters"); + const typeParam = typeParams[0] as TypeParameter; + + const constraint = await typeParam.getConstraint(); + assert.ok(constraint); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + + const defaultType = await typeParam.getDefault(); + assert.ok(defaultType); + assert.ok(defaultType.flags & TypeFlags.StringLiteral, `Expected string literal default, got flags ${defaultType.flags}`); + }); + + test("getConstraint() and getDefault() return undefined when there is none", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function f(x: T): T { return x; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function f(x: T): T { return x; }`; + const pos = src.indexOf("f<"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = await sigs[0].getTypeParameters(); + assert.ok(typeParams.length > 0, "Should have type parameters"); + const typeParam = typeParams[0] as TypeParameter; + + assert.equal(await typeParam.getConstraint(), undefined); + assert.equal(await typeParam.getDefault(), undefined); + }); +}); + +describe("Checker - getTypeArguments", { concurrency }, () => { + test("returns type arguments of a generic instantiation", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const arr: Array = [1, 2, 3];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const arr: Array = [1, 2, 3];`; + const pos = src.indexOf("arr:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeArgs = await project.checker.getTypeArguments(type as TypeReference); + assert.ok(typeArgs.length > 0, "Should have type arguments"); + assert.ok(typeArgs[0].flags & TypeFlags.Number, `Expected number type argument, got flags ${typeArgs[0].flags}`); + }); + + test("a wrongly-typed call throws on the client without taking down the server", async () => { + const src = `export const s: string = ""; export const arr: Array = [1];`; + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // `string` is not a type reference. When getTypeArguments is reached + // with one, the server panics, but the per-request panic recovery + // converts that into an error response rather than crashing the process. + const sSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); + assert.ok(sSymbol); + const sType = await project.checker.getTypeOfSymbol(sSymbol); + assert.ok(sType); + await assert.rejects(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); // @sync: assert.throws(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); + + // The server survived: a subsequent valid request still succeeds. + const arrSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("arr:")); + assert.ok(arrSymbol); + const arrType = await project.checker.getTypeOfSymbol(arrSymbol); + assert.ok(arrType); + const typeArgs = await project.checker.getTypeArguments(arrType as TypeReference); + assert.ok(typeArgs.length > 0, "Server should still serve valid requests"); + }); +}); + +describe("Checker - getBaseConstraintOfType", { concurrency }, () => { + test("returns the base constraint of a type parameter", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function identity(x: T): T { return x; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function identity(x: T): T { return x; }`; + const pos = src.indexOf("identity<"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = await project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = await sigs[0].getTypeParameters(); + const constraint = await project.checker.getBaseConstraintOfType(typeParams[0]); + assert.ok(constraint, "Should resolve a base constraint"); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + }); + + test("returns undefined for a non-instantiable type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x: number = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `export const x: number = 1;`.indexOf("x:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const constraint = await project.checker.getBaseConstraintOfType(type); + assert.equal(constraint, undefined); + }); +}); + +describe("Checker - getPropertyOfType", { concurrency }, () => { + test("returns a named property symbol of a type", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Person { + name: string; + age: number; +} +export declare const p: Person; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Person {\n name: string;\n age: number;\n}\nexport declare const p: Person;\n`; + const pos = src.indexOf("p: Person"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const nameProp = await project.checker.getPropertyOfType(type, "name"); + assert.ok(nameProp, "Should find 'name' property"); + assert.equal(nameProp.name, "name"); + const missing = await project.checker.getPropertyOfType(type, "doesNotExist"); + assert.equal(missing, undefined); + }); +}); + +describe("Checker - getConstantValue", { concurrency }, () => { + test("returns numeric value of an enum member", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum E { A = 1, B = 2 }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let memberB: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text.startsWith("B")) memberB = node; + } + node.forEachChild(visit); + }); + assert.ok(memberB, "Should find enum member B"); + const value = await project.checker.getConstantValue(memberB); + assert.equal(value, 2); + }); + + test("returns infinite numeric enum values without changing equivalent strings", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum E { + Positive = 1e999, + Negative = -1e999, + PositiveNaN = NaN, + NegativeNaN = -NaN, + PositiveString = "+Infinity", + NegativeString = "-Infinity", + NaNString = "NaN", + }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const members: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) members.push(node); + node.forEachChild(visit); + }); + assert.equal(members.length, 7); + + assert.equal(await project.checker.getConstantValue(members[0]), Infinity); + assert.equal(await project.checker.getConstantValue(members[1]), -Infinity); + assert.equal(await project.checker.getConstantValue(members[2]), NaN); + assert.equal(await project.checker.getConstantValue(members[3]), NaN); + assert.equal(await project.checker.getConstantValue(members[4]), "+Infinity"); + assert.equal(await project.checker.getConstantValue(members[5]), "-Infinity"); + assert.equal(await project.checker.getConstantValue(members[6]), "NaN"); + }); + + test("returns string value of a string-initialized enum member", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum Color { Red = "red" }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let member: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) member = node; + node.forEachChild(visit); + }); + assert.ok(member); + const value = await project.checker.getConstantValue(member); + assert.equal(value, "red"); + }); +}); + +describe("Checker - getSignatureFromDeclaration", { concurrency }, () => { + test("returns the signature of a function declaration", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let funcDecl: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) funcDecl = node; + node.forEachChild(visit); + }); + assert.ok(funcDecl, "Should find the function declaration"); + const sig = await project.checker.getSignatureFromDeclaration(funcDecl); + assert.ok(sig, "Should resolve a signature"); + assert.equal(sig.parameters.length, 2); + const returnType = await project.checker.getReturnTypeOfSignature(sig); + assert.ok(returnType); + assert.ok(returnType.flags & TypeFlags.Number); + }); +}); + +describe("Checker - getExportSpecifierLocalTargetSymbol", { concurrency }, () => { + test("resolves the local target of an export specifier", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const value = 42; +export { value as renamed }; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let exportSpecifier: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ExportSpecifier) exportSpecifier = node; + node.forEachChild(visit); + }); + assert.ok(exportSpecifier, "Should find the export specifier"); + const target = await project.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); + assert.ok(target, "Should resolve a local target symbol"); + assert.equal(target.name, "value"); + }); +}); + +describe("Checker - getAliasedSymbol", { concurrency }, () => { + test("resolves an import alias to its target symbol", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/foo.ts": `export const foo = 42;`, + "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `import { foo } from "./foo";`.indexOf("foo }"); + const aliasSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(aliasSymbol); + assert.ok(aliasSymbol.flags & SymbolFlags.Alias, "Import binding should be an alias"); + const aliased = await project.checker.getAliasedSymbol(aliasSymbol); + assert.ok(aliased, "Should resolve the aliased symbol"); + assert.equal(aliased.name, "foo"); + assert.ok(!(aliased.flags & SymbolFlags.Alias), "Target should not be an alias"); + }); +}); + +describe("Checker - getFullyQualifiedName", { concurrency }, () => { + test("returns module-qualified names for exported symbols and dotted names for members", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": ` +export namespace Outer { + export class Inner {} +} +export class Standalone {} +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const exports = await project.checker.getExportsOfModule(moduleSymbol); + const standalone = exports.find(e => e.name === "Standalone"); + assert.ok(standalone); + assert.equal(await project.checker.getFullyQualifiedName(standalone), `"/src/index".Standalone`); + const outer = exports.find(e => e.name === "Outer"); + assert.ok(outer); + const inner = (await outer.getExports()).get("Inner" as __String); + assert.ok(inner); + assert.equal(await project.checker.getFullyQualifiedName(inner), `"/src/index".Outer.Inner`); + }); +}); + +describe("Checker - getExportsOfModule", { concurrency }, () => { + test("returns all exports including re-exports via 'export *'", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/inner.ts": `export const innerValue = 1;`, + "/src/index.ts": ` +export const direct = 1; +export * from "./inner"; +`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = await project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol, "Source file should have a module symbol"); + const exports = await project.checker.getExportsOfModule(moduleSymbol); + const names = exports.map(e => e.name); + assert.ok(names.includes("direct"), "should include directly-declared export"); + assert.ok(names.includes("innerValue"), "should include 'export *' re-export"); + }); +}); + +describe("Checker - getSymbolsInScope", { concurrency }, () => { + const scopeFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const outerValue = 1; +interface OuterType { x: number; } +function f() { + const innerValue = 2; + return innerValue; +} +`, + }; + + test("returns symbols visible at a position", async () => { + await using api = spawnAPI(scopeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); + const symbols = await project.checker.getSymbolsInScope( + { document: "/src/main.ts", position: pos }, + SymbolFlags.Value, + ); + const names = symbols.map(s => s.name); + assert.ok(names.includes("innerValue"), "should include local variable"); + assert.ok(names.includes("outerValue"), "should include outer variable"); + assert.ok(names.includes("f"), "should include enclosing function"); + assert.ok(!names.includes("OuterType"), "should not include type-only meanings"); + }); + + test("returns type symbols when asked for type meaning at a node", async () => { + await using api = spawnAPI(scopeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const symbols = await project.checker.getSymbolsInScope(sourceFile, SymbolFlags.Type); + const names = symbols.map(s => s.name); + assert.ok(names.includes("OuterType"), "should include interface declared in file"); + assert.ok(names.includes("Array"), "should include global type symbols"); + }); + + // Regression test: `<<` binds tighter than `-` in Go but looser in JS, so SymbolFlagsAll's + // `(1<<30) - 1` needs those parens or the generated enum silently becomes `1 << 29`. + test("SymbolFlags.All includes both value and type meanings", async () => { + await using api = spawnAPI(scopeFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); + const symbols = await project.checker.getSymbolsInScope( + { document: "/src/main.ts", position: pos }, + SymbolFlags.All, + ); + const names = symbols.map(s => s.name); + assert.ok(names.includes("innerValue"), "should include local value symbol"); + assert.ok(names.includes("OuterType"), "should include type symbol declared in file"); + }); +}); + +describe("Symbol - getDocumentationComment and getJsDocTags", { concurrency }, () => { + const docFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers together. + * @param a the first number + * @returns the sum + */ +export function add(a: number, b: number): number { return a + b; } +`, + }; + + test("getDocumentationComment returns the leading comment text", async () => { + await using api = spawnAPI(docFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = docFiles["/src/main.ts"].indexOf("add(a"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const doc = await symbol.getDocumentationComment(project.checker); + assert.ok(doc.includes("Adds two numbers together"), `Expected documentation, got: ${doc}`); + assert.ok(!doc.includes("@param"), "Documentation comment should not include tags"); + }); + + test("getJsDocTags returns structured tag name/text pairs", async () => { + await using api = spawnAPI(docFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = docFiles["/src/main.ts"].indexOf("add(a"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const tags = await symbol.getJsDocTags(project.checker); + const param = tags.find(t => t.name === "param"); + assert.ok(param, `Expected a @param tag, got: ${JSON.stringify(tags)}`); + assert.equal(param.text, "a the first number"); + const returns = tags.find(t => t.name === "returns"); + assert.ok(returns, `Expected a @returns tag, got: ${JSON.stringify(tags)}`); + assert.equal(returns.text, "the sum"); + }); +}); + +describe("TypeParameter - isThisType", { concurrency }, () => { + test("isThisType is true for the polymorphic 'this' type in a class method", async () => { + const src = `\nexport class Builder {\n setName(name: string): this { return this; }\n}\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // ": this {" — offset 2 past ': ' lands on 't' in the return-type 'this' + const pos = src.indexOf(": this {") + 2; + const type = await project.checker.getTypeAtPosition("/src/main.ts", pos); + assert.ok(type, "Expected a type at the 'this' position"); + assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); + const typeParam = type as TypeParameter; + assert.equal(typeParam.isThisType, true); + }); + + test("isThisType is absent for a regular generic type parameter", async () => { + const src = `\nexport function identity(x: T): T { return x; }\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Point to 'T' in the type parameter declaration '' — getTypeAtPosition + // on a type annotation reference doesn't resolve to TypeParameter, but + // the declaration position does. + const pos = src.indexOf("") + 1; + const type = await project.checker.getTypeAtPosition("/src/main.ts", pos); + assert.ok(type, "Expected a type at the 'T' position"); + assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); + const typeParam = type as TypeParameter; + assert.ok(!typeParam.isThisType, "Expected isThisType to be absent/false for a regular type parameter"); + }); +}); + +describe("Type - getAliasTypeArguments", { concurrency }, () => { + test("returns the type arguments of a single-param generic type alias", async () => { + const src = `\ntype Box = { value: T };\nexport const x: Box = { value: "hi" };\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("x:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = await type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 1, "Expected 1 alias type argument"); + assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected string, got flags ${aliasArgs[0].flags}`); + }); + + test("returns multiple type arguments for a multi-param generic type alias", async () => { + const src = `\ntype Pair = [A, B];\nexport const p: Pair = ["hello", 42];\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("p:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = await type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 2, "Expected 2 alias type arguments"); + assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected first arg to be string, got flags ${aliasArgs[0].flags}`); + assert.ok(aliasArgs[1].flags & TypeFlags.Number, `Expected second arg to be number, got flags ${aliasArgs[1].flags}`); + }); + + test("returns empty array for a non-alias generic type", async () => { + const src = `\nexport const arr: Array = ["hello"];\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("arr:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = await type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 0, "Expected no alias type arguments for a direct generic reference"); + }); +}); + +describe("Type - getAliasSymbol", { concurrency }, () => { + test("returns the symbol for a non-generic type alias", async () => { + // Object-type aliases preserve aliasSymbol; primitive aliases (type Foo = string) do not. + const src = `\ntype Point = { x: number; y: number };\nexport const p: Point = { x: 1, y: 2 };\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("p:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = await type.getAliasSymbol(); + assert.ok(aliasSymbol, "Expected alias symbol to exist"); + assert.equal(aliasSymbol.name, "Point"); + }); + + test("returns the symbol for a generic type alias", async () => { + const src = `\ntype Container = { item: T };\nexport const c: Container = { item: 42 };\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("c:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = await type.getAliasSymbol(); + assert.ok(aliasSymbol, "Expected alias symbol for generic alias"); + assert.equal(aliasSymbol.name, "Container"); + }); + + test("returns undefined for a non-alias type", async () => { + const src = `\nexport const str: string = "test";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("str:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = await type.getAliasSymbol(); + assert.equal(aliasSymbol, undefined, "Expected no alias symbol for primitive type"); + }); +}); + +describe("IntrinsicType - intrinsicName", { concurrency }, () => { + test("intrinsicName matches the primitive type name", async () => { + const src = `\nexport const x: string = "hello";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = await project.checker.getStringType(); + assert.equal((stringType as IntrinsicType).intrinsicName, "string"); + const anyType = await project.checker.getAnyType(); + assert.equal((anyType as IntrinsicType).intrinsicName, "any"); + const neverType = await project.checker.getNeverType(); + assert.equal((neverType as IntrinsicType).intrinsicName, "never"); + const pos = src.indexOf("x:"); + const sym = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(sym); + const litType = await project.checker.getTypeOfSymbol(sym); + assert.ok(litType); + assert.ok(litType.flags & TypeFlags.Intrinsic); + assert.equal((litType as IntrinsicType).intrinsicName, "string"); + }); +}); + +describe("FreshableType - getFreshType and getRegularType", { concurrency }, () => { + test("LiteralType.value is empty string for the empty-string literal type", async () => { + const src = `\nexport const empty: "" = "";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("empty:")); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); + const literal = type as LiteralType; + assert.equal(literal.value, "", "value should be empty string, not undefined"); + }); + + test("LiteralType.value is accessible via the FreshableType hierarchy", async () => { + const src = `\nexport const greeting: "hello" = "hello";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); + const literal = type as LiteralType; + assert.equal(literal.value, "hello"); + }); + + test("BigIntLiteralType.value is a bigint (positive and negative)", async () => { + const src = `\nexport const pos = 123n;\nexport const neg = -123n;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const posSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); + assert.ok(posSymbol); + const posType = await project.checker.getTypeOfSymbol(posSymbol); + assert.ok(posType); + assert.ok(posType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); + const posLiteral = posType as BigIntLiteralType; + assert.equal(typeof posLiteral.value, "bigint"); + assert.equal(posLiteral.value, 123n); + + const negSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); + assert.ok(negSymbol); + const negType = await project.checker.getTypeOfSymbol(negSymbol); + assert.ok(negType); + assert.ok(negType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); + const negLiteral = negType as BigIntLiteralType; + assert.equal(typeof negLiteral.value, "bigint"); + assert.equal(negLiteral.value, -123n); + }); + + test("NumberLiteralType.value is infinity (positive and negative)", async () => { + const src = `\nexport const pos = 1e999;\nexport const neg = -1e999;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const posSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); + assert.ok(posSymbol); + const posType = await project.checker.getTypeOfSymbol(posSymbol); + assert.ok(posType); + assert.ok(posType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); + const posLiteral = posType as NumberLiteralType; + assert.equal(typeof posLiteral.value, "number"); + assert.equal(posLiteral.value, Infinity); + + const negSymbol = await project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); + assert.ok(negSymbol); + const negType = await project.checker.getTypeOfSymbol(negSymbol); + assert.ok(negType); + assert.ok(negType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); + const negLiteral = negType as NumberLiteralType; + assert.equal(typeof negLiteral.value, "number"); + assert.equal(negLiteral.value, -Infinity); + }); + + test("getFreshType() returns a fresh twin with matching value", async () => { + const src = `\nexport const greeting: "hello" = "hello";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); + const fresh = await (type as FreshableType).getFreshType(); + assert.ok(fresh, "Expected getFreshType() to return non-undefined for a literal type"); + assert.ok(fresh.flags & TypeFlags.StringLiteral, "Fresh type should be a StringLiteral"); + assert.equal((fresh as LiteralType).value, "hello", "Fresh type should carry the same value"); + assert.notEqual(fresh.id, type.id, "Fresh type should not be the original type"); + const freshFresh = await fresh.getFreshType(); + assert.ok(freshFresh, "Expected getFreshType() to return non-undefined for a fresh type"); + assert.equal(freshFresh.id, fresh.id, "Fresh type of a fresh type should be the fresh type"); + }); + + test("getRegularType() on a fresh literal returns the regular twin", async () => { + // The initial type response from getTypeOfSymbol does not always include the + // regularType handle, so getRegularType() is tested via the fresh twin which + // always includes its regularType in its own response. + const src = `\nexport const greeting: "hello" = "hello";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); + const fresh = await (type as FreshableType).getFreshType(); + assert.ok(fresh, "Need fresh type for this test"); + assert.ok(fresh.flags & TypeFlags.Freshable, "Fresh type should be a freshable type"); + const regular = await fresh.getRegularType(); + assert.ok(regular, "Expected getRegularType() on the fresh twin to return non-undefined"); + assert.ok(regular.flags & TypeFlags.StringLiteral, "Regular type should be a StringLiteral"); + assert.equal((regular as LiteralType).value, "hello", "Regular type should carry the same value"); + assert.equal(regular.id, type.id, "Regular type should be the original type"); + }); + + test("getFreshType() and getRegularType() work for computed enum types (TypeFlags.Enum)", async () => { + // getTypeOfSymbol on an ambient enum member returns the FRESH computed enum type. + // For fresh types: getFreshType() returns self, getRegularType() returns the regular twin. + const src = `\ndeclare enum Status { Pending }\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("Pending"); + const symbol = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = await project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Enum, `Expected TypeFlags.Enum, got ${type.flags}`); + assert.ok(type.flags & TypeFlags.Freshable, "Enum type should be freshable"); + // The returned type IS the fresh type: getFreshType() returns itself + const fresh = await (type as FreshableType).getFreshType(); + assert.ok(fresh, "Expected getFreshType() to return non-undefined"); + assert.equal(fresh.id, type.id, "getFreshType() on a fresh enum type returns itself"); + // getRegularType() returns the regular twin (a different type) + const regular = await (type as FreshableType).getRegularType(); + assert.ok(regular, "Expected getRegularType() to return non-undefined"); + assert.ok(regular.flags & TypeFlags.Enum, "Regular enum type should also have TypeFlags.Enum"); + assert.notEqual(regular.id, type.id, "Regular type should be distinct from the fresh type"); + // Round-trip: regular → getFreshType() → back to the original fresh type + const backToFresh = await (regular as FreshableType).getFreshType(); + assert.ok(backToFresh); + assert.equal(backToFresh.id, type.id, "Round-trip through regular/fresh returns the original type"); + }); +}); + +describe("Checker - isContextSensitive", { concurrency }, () => { + test("arrow function with no type annotation is context sensitive", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const fn = (x) => x;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + // Find the arrow function node + let arrowFn: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ArrowFunction) { + arrowFn = node; + } + node.forEachChild(visit); + }); + assert.ok(arrowFn, "Should find an arrow function"); + const result = await project.checker.isContextSensitive(arrowFn); + assert.equal(result, true); + }); +}); + +describe("Checker - isTypeAssignableTo", { concurrency }, () => { + test("returns true when source is assignable to target", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = await project.checker.getStringType(); + const anyType = await project.checker.getAnyType(); + const neverType = await project.checker.getNeverType(); + assert.ok(await project.checker.isTypeAssignableTo(stringType, stringType), "string assignable to string"); + assert.ok(await project.checker.isTypeAssignableTo(stringType, anyType), "string assignable to any"); + assert.ok(await project.checker.isTypeAssignableTo(neverType, stringType), "never assignable to string (bottom type)"); + }); + + test("returns false when source is not assignable to target", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = await project.checker.getStringType(); + const numberType = await project.checker.getNumberType(); + assert.ok(!await project.checker.isTypeAssignableTo(numberType, stringType), "number not assignable to string"); + assert.ok(!await project.checker.isTypeAssignableTo(stringType, numberType), "string not assignable to number"); + }); + + test("a string literal type is assignable to string but not number", async () => { + const src = `\nexport const x: "hello" = "hello";\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("x:"); + const sym = await project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(sym); + const litType = await project.checker.getTypeOfSymbol(sym); + assert.ok(litType); + assert.ok(litType.flags & TypeFlags.StringLiteral); + const stringType = await project.checker.getStringType(); + const numberType = await project.checker.getNumberType(); + assert.ok(await project.checker.isTypeAssignableTo(litType, stringType)); + assert.ok(!await project.checker.isTypeAssignableTo(litType, numberType)); + }); +}); + +describe("Printer", { concurrency }, () => { + const emitterFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const x = 42; +export function greet(name: string): string { return name; } +export type Pair = [string, number]; +export const obj = { m: 1, s: "hi", b: true }; +`, + }; + + test("printNode with factory-created keyword type", async () => { + await using api = spawnAPI(emitterFiles); + + const node = createKeywordTypeNode(SyntaxKind.StringKeyword); + const text = await api.printer.printNode(node); + assert.strictEqual(text, "string"); + }); + + test("printFile", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sourceFile = await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"); + assert(sourceFile); + const text = await api.printer.printFile(sourceFile); + assert.strictEqual( + text, + `export const x = 42; +export function greet(name: string): string { return name; } +export type Pair = [ + string, + number +]; +export const obj = { m: 1, s: "hi", b: true }; +`, + ); + }); + + test("printFile preserves JSON source file semantics", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { resolveJsonModule: true }, + files: ["/src/data.json"], + }), + "/src/data.json": `{"x": 1}`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const sourceFile = await snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/data.json"); + assert(sourceFile); + assert.strictEqual(await api.printer.printFile(sourceFile), `{ "x": 1 }\n`); + }); + + test("printNode with factory-created union type", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createUnionTypeNode([ + createKeywordTypeNode(SyntaxKind.StringKeyword), + createKeywordTypeNode(SyntaxKind.NumberKeyword), + ]); + const text = await api.printer.printNode(node); + assert.strictEqual(text, "string | number"); + }); + + test("printNode with factory-created function type", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const param = createParameterDeclaration( + undefined, + undefined, + createIdentifier("x"), + undefined, + createKeywordTypeNode(SyntaxKind.StringKeyword), + undefined, + ); + const node = createFunctionTypeNode( + undefined, + [param], + createKeywordTypeNode(SyntaxKind.NumberKeyword), + ); + const text = await api.printer.printNode(node); + assert.strictEqual(text, "(x: string) => number"); + }); + + test("printNode with factory-created type reference", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createTypeReferenceNode(createIdentifier("Array"), [ + createKeywordTypeNode(SyntaxKind.StringKeyword), + ]); + const text = await api.printer.printNode(node); + assert.strictEqual(text, "Array"); + }); + + test("printNode with factory-created array type", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createArrayTypeNode(createKeywordTypeNode(SyntaxKind.NumberKeyword)); + const text = await api.printer.printNode(node); + assert.strictEqual(text, "number[]"); + }); + + test("typeToTypeNode + printNode round-trip", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + + const greetPos = src.indexOf("greet("); + const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = await checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeNode = await checker.typeToTypeNode(type); + assert.ok(typeNode); + const text = await api.printer.printNode(typeNode); + assert.ok(text); + assert.strictEqual(text, "(name: string) => string"); + }); + + test("visitEachChild on typeToTypeNode result with keyword types", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + const objPos = src.indexOf("obj"); + const symbol = await checker.getSymbolAtPosition("/src/main.ts", objPos); + assert.ok(symbol, "should find symbol for obj"); + const type = await checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeNode = await checker.typeToTypeNode(type); + assert.ok(typeNode, "typeToTypeNode should return a type node"); + + // Recursively visit to reach PropertySignature.type where isTypeNode is checked. + const visited = (function visit(node: Node): Node { + return visitEachChild(node, visit); + })(typeNode); + assert.ok(visited, "visitEachChild should not throw"); + + const kinds = [ + SyntaxKind.NumberKeyword, + SyntaxKind.StringKeyword, + SyntaxKind.BooleanKeyword, + SyntaxKind.AnyKeyword, + SyntaxKind.VoidKeyword, + SyntaxKind.UndefinedKeyword, + SyntaxKind.NeverKeyword, + SyntaxKind.UnknownKeyword, + SyntaxKind.BigIntKeyword, + SyntaxKind.ObjectKeyword, + SyntaxKind.SymbolKeyword, + SyntaxKind.IntrinsicKeyword, + SyntaxKind.ExpressionWithTypeArguments, + SyntaxKind.JSDocAllType, + SyntaxKind.JSDocNullableType, + SyntaxKind.JSDocNonNullableType, + SyntaxKind.JSDocOptionalType, + SyntaxKind.JSDocVariadicType, + SyntaxKind.JSDocTypeExpression, + SyntaxKind.JSDocTypeLiteral, + SyntaxKind.JSDocSignature, + ]; + for (const kind of kinds) { + assert.ok(isTypeNode({ kind } as any), `isTypeNode should accept ${SyntaxKind[kind]}`); + } + }); + + test("typeToString", async () => { + await using api = spawnAPI(emitterFiles); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + + const greetPos = src.indexOf("greet("); + const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = await checker.getTypeOfSymbol(symbol); + assert.ok(type); + const text = await checker.typeToString(type); + assert.strictEqual(text, "(name: string) => string"); + }); + + test("typeToString with TypeFormatFlags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function greet(name: string): string[] { return [name]; }`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const greetPos = "export function greet".indexOf("greet"); + const symbol = await checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = await checker.getTypeOfSymbol(symbol); + assert.ok(type); + const text = await checker.typeToString(type, undefined, TypeFormatFlags.WriteArrayAsGenericType); + assert.strictEqual(text, "(name: string) => Array"); + }); + + test("printNode with terminateUnterminatedLiterals option", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `const foo = /asdfasf;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the regex literal node + let regexNode: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.RegularExpressionLiteral) { + regexNode = node; + return; + } + node.forEachChild(visit); + }); + assert.ok(regexNode, "Should find a regex literal"); + + // Without the option, regex is printed as-is + const textWithout = await api.printer.printNode(regexNode); + assert.strictEqual(textWithout, "/asdfasf"); + + // With the option, the closing slash is added + const textWith = await api.printer.printNode(regexNode, { terminateUnterminatedLiterals: true }); + assert.strictEqual(textWith, "/asdfasf/"); + }); +}); + +describe("Program - selected file emit", { concurrency }, () => { + const files = { + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + declarationMap: true, + emitDeclarationOnly: true, + noEmit: true, + noEmitOnError: true, + sourceMap: true, + }, + }), + "/src/a.ts": `export const a: string = 1;`, + "/src/b.ts": `export const b = 2;`, + }; + + test("getJavaScriptEmit forces JavaScript and source maps", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.getJavaScriptEmit(["/src/a.ts", "/src/b.ts"]); + assert.equal(result.emitSkipped, false); + assert.deepEqual([...result.outputFiles.keys()], [ + "/src/a.js", + "/src/a.js.map", + "/src/b.js", + "/src/b.js.map", + ]); + const outputFileName = toRootedFilePath("/src/a.js", undefined); + assert.equal(result.outputFiles.get(outputFileName)?.sourceFileName, "/src/a.ts"); + assert.match(result.outputFiles.get(outputFileName)!.text, /export const a = 1/); + assert.equal(fs.readFile(toRootedFilePath("/src/a.js", undefined)), serverFS.useOS); + }); + + test("getDeclarationEmit forces declarations and declaration maps", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.getDeclarationEmit(["/src/a.ts", "/src/b.ts"]); + assert.equal(result.emitSkipped, false); + assert.deepEqual([...result.outputFiles.keys()], [ + "/src/a.d.ts", + "/src/a.d.ts.map", + "/src/b.d.ts", + "/src/b.d.ts.map", + ]); + assert.equal(result.outputFiles.get(toRootedFilePath("/src/a.d.ts", undefined))?.sourceFileName, "/src/a.ts"); + assert.equal(fs.readFile(toRootedFilePath("/src/a.d.ts", undefined)), serverFS.useOS); + }); + + test("selected file emit accepts empty arrays", async () => { + await using api = spawnAPI({ ...files }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual((await project.program.getJavaScriptEmit([])).outputFiles, new Map()); + assert.deepEqual((await project.program.getDeclarationEmit([])).outputFiles, new Map()); + }); +}); + +describe("SnapshotInternalAPI - formatNodeForInsertion", { concurrency }, () => { + test("formats a synthesized statement with correct indentation for insertion inside a function body", async () => { + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) {\n console.log(name);\n}\n`, + }; + await using api = spawnAPI(files); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], + NodeFlags.Const, + ), + ); + + const sourceText = files["/src/index.ts"]; + const insertionPos = sourceText.indexOf("\n console.log") + 1; + + const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); + assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation, got: ${JSON.stringify(formatted)}`); + }); + + test("formats a node at top-level with no indentation", async () => { + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `const a = 1;\nconst b = 2;\n`, + }; + await using api = spawnAPI(files); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("y"), undefined, undefined, createNumericLiteral("42", 0))], + NodeFlags.Const, + ), + ); + + const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", 0); + assert.ok(formatted.includes("const y = 42;"), `Expected 'const y = 42;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(!formatted.startsWith(" "), `Expected no leading spaces at top level, got: ${JSON.stringify(formatted)}`); + }); + + test("formats a synthesized statement with correct indentation when non-ASCII characters precede the insertion position", async () => { + // 'é' is 1 UTF-16 code unit but 2 UTF-8 bytes, so UTF-16 and UTF-8 offsets diverge after it. + // This test verifies the position is correctly converted from UTF-16 to UTF-8 before use. + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `// \u00e9\nfunction greet(name: string) {\n console.log(name);\n}\n`, + }; + await using api = spawnAPI(files); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], + NodeFlags.Const, + ), + ); + + // insertionPos is the UTF-16 code-unit offset of the start of the indented line inside the function body. + const sourceText = files["/src/index.ts"]; + const insertionPos = sourceText.indexOf("\n console.log") + 1; + + const formatted = await snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); + // The node should be indented to match the function body (4 spaces) + assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation (UTF-16 offset correctly converted), got: ${JSON.stringify(formatted)}`); + }); +}); + +describe("modifierFlags", { concurrency }, () => { + test("export async function has Export | Async flags", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `export async function foo() {}`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) { + fnNode = node; + } + node.forEachChild(visit); + }); + assert.ok(fnNode, "Should find a function declaration"); + assert.ok(fnNode.modifierFlags & ModifierFlags.Export, "Should have Export flag"); + assert.ok(fnNode.modifierFlags & ModifierFlags.Async, "Should have Async flag"); + assert.strictEqual(fnNode.modifierFlags, ModifierFlags.Export | ModifierFlags.Async); + }); + + test("node without modifiers has ModifierFlags.None", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function bar() {}`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) { + fnNode = node; + } + node.forEachChild(visit); + }); + assert.ok(fnNode, "Should find a function declaration"); + assert.strictEqual(fnNode.modifierFlags, ModifierFlags.None); + }); +}); + +describe("Checker - getResolvedSymbol", { concurrency }, () => { + test("resolves variable reference to its declaration symbol", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const x = 1;\nconst y = x;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // Find the 'x' identifier in `const y = x` + let refNode: import("@typescript/typescript/unstable/ast").Identifier | undefined; + sourceFile.forEachChild(function visit(node) { + if (isIdentifier(node) && node.text === "x") { + // We want the reference, not the declaration - take the last one + refNode = node; + } + node.forEachChild(visit); + }); + assert.ok(refNode, "Should find identifier 'x'"); + + const symbol = await project.checker.getResolvedSymbol(refNode); + assert.ok(symbol, "Should resolve symbol for 'x'"); + assert.equal(symbol.name, "x"); + }); +}); + +describe("VariableDeclarationList - BlockScoped flags", { concurrency }, () => { + test("let declaration has Let flag", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `let x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let declList: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isVariableDeclarationList(node)) { + declList = node; + } + node.forEachChild(visit); + }); + assert.ok(declList, "Should find VariableDeclarationList"); + assert.ok(declList.flags & NodeFlags.Let, "Should have Let flag"); + }); + + test("const declaration has Const flag", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let declList: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isVariableDeclarationList(node)) { + declList = node; + } + node.forEachChild(visit); + }); + assert.ok(declList, "Should find VariableDeclarationList"); + assert.ok(declList.flags & NodeFlags.Const, "Should have Const flag"); + }); +}); + +describe("AST roundtrips", { concurrency }, () => { + test("TypeOperator operator kind", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function test(arg: readonly number[]) { }\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const param = (sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").FunctionDeclaration).parameters[0]; + assert(param); + const type = param.type as import("@typescript/typescript/unstable/ast").TypeOperatorNode; + assert(type); + assert.equal(type.kind, SyntaxKind.TypeOperator); + assert.equal(type.operator, SyntaxKind.ReadonlyKeyword); + const printed = await api.printer.printFile(sourceFile); + assert.equal(sourceFile.text, printed); + }); + + test("SpreadAssignment roundtrip", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `var thing = { ...other };\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const object = stmt.declarationList.declarations[0].initializer as import("@typescript/typescript/unstable/ast").ObjectLiteralExpression; + const assignment = object.properties[0] as import("@typescript/typescript/unstable/ast").SpreadAssignment; + assert(assignment); + assert.equal(assignment.kind, SyntaxKind.SpreadAssignment); + const expr = assignment.expression; + assert(expr); + assert.equal(expr.kind, SyntaxKind.Identifier); + const printed = await api.printer.printFile(sourceFile); + assert.equal(sourceFile.text, printed); + }); + + test("VariableDeclarationList const flag clone", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const thing = 123;\n`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + { + const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const list = stmt.declarationList; + assert(list.flags & NodeFlags.Const); + } + const cloned = getSynthesizedDeepClone(sourceFile); + { + const stmt = cloned.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const list = stmt.declarationList; + assert(list.flags & NodeFlags.Const); + } + const printed = await api.printer.printFile(cloned); + assert.equal(sourceFile.text, printed); + }); + + test("JSDoc before ExpressionStatement allowed", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": ` +/** + * A doc. + */ +doThing(); + `, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const printed = await api.printer.printFile(sourceFile); + assert.equal(sourceFile.text.trim(), printed.trim()); + }); + + test("Factory ModifierList auto-conversion", async () => { + await using api = spawnAPI(); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createTypeAliasDeclaration( + [createToken(SyntaxKind.ExportKeyword)], + createIdentifier("Test"), + undefined, + createKeywordTypeNode(SyntaxKind.AnyKeyword), + ); + + assert.equal(await api.printer.printNode(node), "export type Test = any;"); + + const cloned = getSynthesizedDeepClone(node); + assert.equal(await api.printer.printNode(cloned), "export type Test = any;"); + }); + + test("Parse-clone-emit roundtrip", async () => { + const tsSource = fileURLToPath(new URL("../../../../tsc/testdata/fixtures", import.meta.url).toString()); + await using api = new API({ + cwd: tsSource, + }); + const target = { + cloneCrashed: 0, + printCrashed: 0, + clonePrintCrashed: 0, + }; + const errors = { ...target }; + + for (const tsconfig of globSync("**/tsconfig.json", { cwd: tsSource })) { + const snapshot = await api.createSnapshot({ openProject: resolve(tsSource, tsconfig) }); + const project = snapshot.getConfiguredProject(tsconfig); + assert(project); + for (const file of project.rootFiles) { + const source = await project.program.getSourceFile(file); + assert(source); + let clone: typeof source; + + try { + await api.printer.printNode(source); + } + catch { + errors.printCrashed++; + continue; + } + + try { + clone = getSynthesizedDeepClone(source); + } + catch { + errors.cloneCrashed++; + continue; + } + + try { + await api.printer.printNode(clone); + } + catch { + errors.clonePrintCrashed++; + continue; + } + } + } + + assert.deepEqual(errors, target); + }); +}); + +describe("Program - diagnostics", { concurrency }, () => { + test("getSyntacticDiagnostics", async () => { + const source = `const x: = 1;`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSyntacticDiagnostics("/src/index.ts"); + assert.deepEqual(diags[0].startPosition, { line: 0, character: 9 }); + assert.deepEqual(diags[0].endPosition, { line: 0, character: 10 }); + assert.deepEqual(diags[0].sourceLines, [{ line: 0, text: source }]); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...rangeOf(source, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }]); + }); + + test("getSemanticDiagnostics with messageChain and relatedInformation", async () => { + const source = `interface Props { callback: (x: string) => void }\nconst p: Props = { callback: (x: number) => {} };`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSemanticDiagnostics("/src/index.ts"); + const declRange = rangeOf(source, "callback", 0); + const assignRange = rangeOf(source, "callback", 1); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2322, + category: DiagnosticCategory.Error, + text: "Type '(x: number) => void' is not assignable to type '(x: string) => void'.", + messageChain: [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2328, + category: DiagnosticCategory.Error, + text: "Types of parameters 'x' and 'x' are incompatible.", + messageChain: [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2322, + category: DiagnosticCategory.Error, + text: "Type 'string' is not assignable to type 'number'.", + }], + }], + relatedInformation: [{ + fileName: "/src/index.ts", + ...declRange, + code: 6500, + category: DiagnosticCategory.Message, + text: "The expected type comes from property 'callback' which is declared here on type 'Props'", + }], + }]); + }); + + test("getSuggestionDiagnostics", async () => { + const source = `export function f() { const x = 1; return x; }\nconst _unused = 1;\n`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSuggestionDiagnostics("/src/index.ts"); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...rangeOf(source, "_unused"), + code: 6133, + category: DiagnosticCategory.Suggestion, + text: "'_unused' is declared but its value is never read.", + reportsUnnecessary: true, + }]); + }); + + test("getConfigFileParsingDiagnostics", async () => { + const config = `{ "compilerOptions": { "target": "invalid" } }`; + await using api = spawnAPI({ + "/tsconfig.json": config, + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getConfigFileParsingDiagnostics(); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/tsconfig.json", + ...rangeOf(config, `"invalid"`), + code: 6046, + category: DiagnosticCategory.Error, + text: "Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'es2026', 'esnext'.", + }]); + }); + + test("getConfigFileNames and getConfigSourceFile", async () => { + const baseConfigText = `{ "compilerOptions": { "strict": true } }`; + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.base.json": baseConfigText, + "/tsconfig.json": `{ "extends": "./tsconfig.base.json", "files": ["./src/index.ts"] }`, + "/src/index.ts": `export const x = 1;`, + }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const names = await project.program.getConfigFileNames(); + assert.deepEqual(names, ["/tsconfig.json", "/tsconfig.base.json"]); + + const rootConfig = await project.program.getConfigSourceFile("/tsconfig.json"); + assert.ok(rootConfig); + assert.equal(rootConfig.fileName, "/tsconfig.json"); + assert.equal(await project.program.getSourceFile("/tsconfig.json"), undefined); + const configObject = cast(cast(rootConfig.statements[0], isExpressionStatement).expression, isObjectLiteralExpression); + const configProperty = cast(configObject.properties[0], isPropertyAssignment); + await assert.rejects(getSymbol(configProperty), /Cached source file not found/); // @sync: assert.throws(() => getSymbol(configProperty), /Cached source file not found/); + await assert.rejects(api.getSymbol(configProperty), /Cached source file not found/); // @sync: assert.throws(() => api.getSymbol(configProperty), /Cached source file not found/); + + fs.writeFile!(toRootedFilePath("/tsconfig.base.json", undefined), `{ "compilerOptions": { "strict": false } }`); + const extendedConfig = await project.program.getConfigSourceFile("/tsconfig.base.json"); + assert.ok(extendedConfig); + assert.equal(extendedConfig.fileName, "/tsconfig.base.json"); + assert.equal(extendedConfig.getFullText(), baseConfigText); + + const nonConfig = await project.program.getConfigSourceFile("/src/index.ts"); + assert.equal(nonConfig, undefined); + }); + + test("getDeclarationDiagnostics", async () => { + await using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "declaration": true } }`, + "/src/index.ts": `export const x: number = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getDeclarationDiagnostics("/src/index.ts"); + assert.deepEqual(diags, []); + }); + + test("getBindDiagnostics", async () => { + const source = `let x = 1;\nlet x = 2;`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getBindDiagnostics("/src/index.ts"); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/src/index.ts", + ...rangeOf(source, "x", 0), + code: 2451, + category: DiagnosticCategory.Error, + text: "Cannot redeclare block-scoped variable 'x'.", + }, + { + fileName: "/src/index.ts", + ...rangeOf(source, "x", 1), + code: 2451, + category: DiagnosticCategory.Error, + text: "Cannot redeclare block-scoped variable 'x'.", + }, + ]); + }); + + test("getProgramDiagnostics", async () => { + const config = `{ "compilerOptions": { "moduleResolution": "bundler", "module": "nodenext" } }`; + await using api = spawnAPI({ + "/tsconfig.json": config, + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getProgramDiagnostics(); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/tsconfig.json", + ...rangeOf(config, `"bundler"`), + code: 5095, + category: DiagnosticCategory.Error, + text: "Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.", + }, + { + fileName: "/tsconfig.json", + ...rangeOf(config, `"bundler"`), + code: 5109, + category: DiagnosticCategory.Error, + text: "Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.", + }, + ]); + }); + + test("getGlobalDiagnostics", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getGlobalDiagnostics(); + assert.deepEqual(diags, []); + }); + + test("getGlobalDiagnostics returns file-less diagnostics from the checker", async () => { + await using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "noLib": true } }`, + "/src/index.ts": `export const x = [1, 2, 3];`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getGlobalDiagnostics(); + // With noLib, the checker reports "Cannot find global type" diagnostics that + // are not associated with any source file. + assert.ok(diags.length > 0, "expected global diagnostics to be reported"); + for (const diag of diags) { + assert.equal(diag.fileName, undefined); + assert.equal(diag.code, 2318); + assert.equal(diag.category, DiagnosticCategory.Error); + } + assert.ok( + diags.some(d => d.text === "Cannot find global type 'Array'."), + "expected a global diagnostic for the 'Array' type", + ); + }); + + test("getSyntacticDiagnostics with multiple files", async () => { + const sourceA = `const a: = 1;`; + const sourceB = `const b: = 2;`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + "/src/clean.ts": `const c = 3;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSyntacticDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/src/a.ts", + ...rangeOf(sourceA, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }, + { + fileName: "/src/b.ts", + ...rangeOf(sourceB, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }, + ]); + }); + + test("getSemanticDiagnostics with multiple files", async () => { + const sourceA = `export const a: number = "hello";`; + const sourceB = `export const b: string = 42;`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSemanticDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.equal(diags.length, 2); + assert.equal(diags[0].fileName, "/src/a.ts"); + assert.equal(diags[0].code, 2322); + assert.equal(diags[1].fileName, "/src/b.ts"); + assert.equal(diags[1].code, 2322); + }); + + test("getBindDiagnostics with multiple files", async () => { + const sourceA = `let x = 1;\nlet x = 2;`; + const sourceB = `let y = 1;\nlet y = 2;`; + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getBindDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.equal(diags.length, 4); + assert.equal(diags.filter(d => d.fileName === "/src/a.ts").length, 2); + assert.equal(diags.filter(d => d.fileName === "/src/b.ts").length, 2); + }); + + test("diagnostics with no files argument returns all", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": `const a: = 1;`, + "/src/b.ts": `const b: = 2;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSyntacticDiagnostics(); + assert.equal(diags.length, 2); + }); + + test("diagnostics with empty files array returns empty", async () => { + await using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": `const a: = 1;`, + "/src/b.ts": `const b: = 2;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await project.program.getSyntacticDiagnostics([]); + assert.deepEqual(diags, []); + }); +}); + +describe("getDefaultProjectForFile", { concurrency }, () => { + test("snapshot opens reject unreadable virtual files without panicking", async () => { + const fileName = "/src/App.vue.ts"; + const source = `export const component = 1;`; + const fs = createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ files: ["/src/index.ts"] }), + "/src/index.ts": `export const x = 1;`, + "/src/App.vue": source, + }); + let virtualFileAvailable = false; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + ...fs, + readFile: path => virtualFileAvailable && path === fileName ? source : fs.readFile!(path), + fileExists: path => virtualFileAvailable && path === fileName ? true : fs.fileExists!(path), + }, + }); + const snapshot = await api.createSnapshot({ + openProjects: ["/tsconfig.json"], + openFiles: ["/src/index.ts"], + }); + + const expectedError = /client error: failed to .*snapshot: no project found for opened file: \/src\/App\.vue\.ts/; + await assert.rejects(snapshot.update({ openFiles: [fileName] }), expectedError); // @sync: assert.throws(() => snapshot.update({ openFiles: [fileName] }), expectedError); + await assert.rejects(api.createSnapshot({ openFiles: [fileName] }), expectedError); // @sync: assert.throws(() => api.createSnapshot({ openFiles: [fileName] }), expectedError); + + virtualFileAvailable = true; + const updated = await snapshot.update({ openFiles: [fileName] }); + const project = await updated.getDefaultProjectForFile(fileName); + assert.ok(project); + assert.equal(project.configFileName, undefined); + assert.equal((await project.program.getSourceFile(fileName))?.text, source); + assert.equal(await snapshot.getDefaultProjectForFile(fileName), undefined); + assert.ok(await updated.getConfiguredProject("/tsconfig.json")); + + virtualFileAvailable = false; + const reopen = { openFiles: [fileName], fileNotifications: { deleted: [fileName] } }; + await assert.rejects(updated.update(reopen), expectedError); // @sync: assert.throws(() => updated.update(reopen), expectedError); + assert.equal((await project.program.getSourceFile(fileName))?.text, source); + }); + + test("finds inferred project for d.ts in node_modules after openFiles", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // The d.ts is not imported, so it is not in the project's program + const dtsSf = await project.program.getSourceFile("/node_modules/my-lib/index.d.ts"); + assert.equal(dtsSf, undefined, "d.ts not in import graph should not be found via project.program.getSourceFile"); + + // Before opening the file, getDefaultProjectForFile returns undefined (no error) + const noProject = await snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.equal(noProject, undefined, "getDefaultProjectForFile returns undefined for unloaded file"); + + // Load the file into the inferred project via createSnapshot openFiles + const snapshot2 = await api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); + const defaultProject = await snapshot2.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.ok(defaultProject, "getDefaultProjectForFile should find inferred project after openFiles"); + + const fooPos = `export declare const foo: string;`.indexOf("foo"); + const fooType = await defaultProject.checker.getTypeAtPosition("/node_modules/my-lib/index.d.ts", fooPos); + assert.ok(fooType); + assert.ok(fooType.flags & TypeFlags.String); + }); + + test("inferred project reflects file changes without a follow-up open/close request", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/loose.ts": `export const foo = 1;`, + }); + await using api = disposableAPI; + + const snapshot1 = await api.createSnapshot({ openFiles: ["/loose.ts"] }); + const project1 = await snapshot1.getDefaultProjectForFile("/loose.ts"); + assert.ok(project1, "file with no config file in its ancestry should load into the inferred project"); + const sf1 = await project1.program.getSourceFile("/loose.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 1;`); + + // Mutate the file and notify only via fileChanges — no follow-up openFiles/closeFiles. + fs.writeFile!(toRootedFilePath("/loose.ts", undefined), `export const foo = 2;`); + const snapshot2 = await api.createSnapshot({ + openFiles: ["/loose.ts"], + fileNotifications: { changed: ["/loose.ts"] }, + }); + + const project2 = await snapshot2.getDefaultProjectForFile("/loose.ts"); + assert.ok(project2); + const sf2 = await project2.program.getSourceFile("/loose.ts"); + assert.ok(sf2); + assert.equal( + sf2.text, + `export const foo = 2;`, + "inferred project's program should reflect the file change even without a follow-up open/close request", + ); + }); + + test("opens multiple inferred files in one snapshot", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + "/node_modules/other-lib/package.json": JSON.stringify({ name: "other-lib", types: "./index.d.ts" }), + "/node_modules/other-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = await api.createSnapshot({ + openFiles: ["/node_modules/my-lib/index.d.ts", "/node_modules/other-lib/index.d.ts"], + }); + + const firstProject = await snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.ok(firstProject, "previously opened file should remain in the inferred project"); + const secondProject = await snapshot.getDefaultProjectForFile("/node_modules/other-lib/index.d.ts"); + assert.ok(secondProject, "newly opened file should be in the inferred project"); + }); + + test("opening a file resolves to a configured project via ancestor search", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + }); + + // Open the file without first opening the project. Like LSP's didOpen, this + // should search ancestor directories for a tsconfig that contains the file. + const snapshot = await api.createSnapshot({ openFiles: ["/src/index.ts"] }); + const defaultProject = await snapshot.getDefaultProjectForFile("/src/index.ts"); + assert.ok(defaultProject, "should find a project for the opened file"); + assert.equal( + defaultProject.configFileName, + "/tsconfig.json", + "opened file should resolve to the containing configured project, not the inferred project", + ); + }); + + test("closeProjects releases a project opened via openProjects", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + }); + + const opened = await api.createSnapshot({ openProjects: ["/tsconfig.json"] }); + assert.ok(opened.getConfiguredProject("/tsconfig.json"), "project should be open after openProjects"); + + const closed = await api.createSnapshot({ closeProjects: ["/tsconfig.json"] }); + assert.equal( + closed.getConfiguredProject("/tsconfig.json"), + undefined, + "project should be unloaded after closeProjects", + ); + }); + + test("closeFiles releases a file opened via openFiles", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + }); + + await api.createSnapshot({ openProject: "/tsconfig.json" }); + const opened = await api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); + assert.ok( + await opened.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), + "file should resolve to a project after openFiles", + ); + + const closed = await api.createSnapshot({ closeFiles: ["/node_modules/my-lib/index.d.ts"] }); + assert.equal( + await closed.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), + undefined, + "file should no longer resolve to a project after closeFiles", + ); + }); +}); + +describe("Program - emit", { concurrency }, () => { + const files = { + "/tsconfig.json": `{ + "compilerOptions": { + "outDir": "dist", + "declaration": true, + } + }`, + "/src/index.ts": "export const x: number = 1;", + "/src/testing.ts": "export const y: string = 'typescript';", + }; + + test("emit all files", async () => { + const fs = createVirtualFileSystem({ ...files }); + + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emit(); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.js", + "/dist/src/index.d.ts", + "/dist/src/testing.js", + "/dist/src/testing.d.ts", + ], + fileSystem: undefined, + }); + + const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, `export const x = 1;\n`); + assert.strictEqual(dts, `export declare const x: number;\n`); + assert.strictEqual(js2, `export const y = 'typescript';\n`); + assert.strictEqual(dts2, `export declare const y: string;\n`); + }); + + test("emit only dts", async () => { + const fs = createVirtualFileSystem({ ...files }); + + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emit(EmitOnly.OnlyDts); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.d.ts", + "/dist/src/testing.d.ts", + ], + fileSystem: undefined, + }); + + const js = fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, serverFS.useOS); + assert.strictEqual(dts, `export declare const x: number;\n`); + assert.strictEqual(js2, serverFS.useOS); + assert.strictEqual(dts2, `export declare const y: string;\n`); + }); + + test("emit only js", async () => { + const fs = createVirtualFileSystem({ ...files }); + + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emit(EmitOnly.OnlyJs); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.js", + "/dist/src/testing.js", + ], + fileSystem: undefined, + }); + + const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, `export const x = 1;\n`); + assert.strictEqual(dts, serverFS.useOS); + assert.strictEqual(js2, `export const y = 'typescript';\n`); + assert.strictEqual(dts2, serverFS.useOS); + }); + + test("emitToString emits the whole program and respects emitOnly", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emitToString(EmitOnly.OnlyDts); + assert.deepEqual([...result.outputFiles.keys()], [ + "/dist/src/index.d.ts", + "/dist/src/testing.d.ts", + ]); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)), serverFS.useOS); + }); + + test("whole-program emit includes option-controlled maps", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + declaration: true, + declarationMap: true, + outDir: "dist", + sourceMap: true, + }, + }), + "/src/index.ts": "export const value: number = 1;", + }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const result = await project.program.emit(); + assert.deepEqual( + new Set(result.emittedFiles), + new Set([ + "/dist/src/index.js", + "/dist/src/index.js.map", + "/dist/src/index.d.ts", + "/dist/src/index.d.ts.map", + ]), + ); + assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.js.map", undefined))); + assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.d.ts.map", undefined))); + + const js = await project.program.emitToString(EmitOnly.OnlyJs); + assert.deepEqual([...js.outputFiles.keys()], [ + "/dist/src/index.js", + "/dist/src/index.js.map", + ]); + + const dts = await project.program.emitToString(EmitOnly.OnlyDts); + assert.deepEqual([...dts.outputFiles.keys()], [ + "/dist/src/index.d.ts", + "/dist/src/index.d.ts.map", + ]); + }); + + test("noEmitOnError reports diagnostics without writing output", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + noEmitOnError: true, + outDir: "dist", + }, + }), + "/src/bad.ts": "export const bad = ;", + "/src/good.ts": "export const value = 1;", + }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emit(); + assert.equal(result.emitSkipped, true); + assert.ok(result.diagnostics.some(d => d.code === 1109)); + assert.deepEqual(result.emittedFiles, []); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/bad.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/good.js", undefined)), serverFS.useOS); + + const stringResult = await project.program.emitToString(); + assert.equal(stringResult.emitSkipped, true); + assert.ok(stringResult.diagnostics.some(d => d.code === 1109)); + assert.deepEqual(stringResult.outputFiles, new Map()); + }); + + test("emit and emitToString respect noEmit", async () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noEmit: true } }), + "/src/index.ts": "export const value = 1;", + }); + await using api = disposableAPI; + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual(await project.program.emit(), { + diagnostics: [], + emitSkipped: false, + emittedFiles: [], + fileSystem: undefined, + }); + assert.deepEqual(await project.program.emitToString(), { + diagnostics: [], + emitSkipped: false, + outputFiles: new Map(), + }); + assert.equal(fs.readFile(toRootedFilePath("/src/index.js", undefined)), serverFS.useOS); + }); + + test("emit rejects unknown files and invalid emitOnly values", async () => { + await using api = spawnAPI({ ...files }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + let error: unknown; + try { + await project.program.getJavaScriptEmit(["/src/missing.ts"]); + } + catch (e) { + error = e; + } + assert.match(String(error), /source file not found/); + + error = undefined; + try { + await project.program.emitToString(3 as EmitOnly); + } + catch (e) { + error = e; + } + assert.match(String(error), /invalid emitOnly value/); + }); + + // @sync-skip-block-start + test("emit reports async VFS write failures as diagnostics", async () => { + const fs = createVirtualFileSystem({ ...files }); + fs.writeFile = () => { + throw new Error("write failed"); + }; + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = await project.program.emit(); + assert.deepEqual(result.emittedFiles, []); + assert.ok(result.diagnostics.some(d => d.text.includes("write failed"))); + }); + // @sync-skip-block-end +}); + +describe("Timing", { concurrency }, () => { + test("collects combined client, server, and transport timing info", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ ...defaultFiles }), + collectTiming: true, + }); + + // Baseline: enabled, but nothing measured yet. + let info = await api.getTimingInfo(); + assert.equal(info.enabled, true); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.recentRequests.length, 0); + + // Exercise a JSON request and a binary source-file request. + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // Client-side timing: round-trip latency and byte counts. + info = await api.getTimingInfo(); + assert.ok(info.totals.requestCount >= 2, "expected at least two measured requests"); + assert.ok(info.totals.bytesSent > 0); + assert.ok(info.totals.bytesReceived > 0); + assert.ok(info.totals.roundTripMs >= 0); + + // Server-side timing is folded into the same snapshot. + assert.ok(info.totals.serverTimeMs >= 0); + assert.ok(info.totals.transportOverheadMs >= 0); + assert.equal( + info.totals.transportOverheadMs, + Math.max(0, info.totals.roundTripMs - info.totals.serverTimeMs), + ); + + // The ring buffer retains at most the 5 most recent requests. + assert.ok(info.recentRequests.length > 0); + assert.ok(info.recentRequests.length <= 5); + assert.ok(info.recentRequests.length <= info.totals.requestCount); + + for (const r of info.recentRequests) { + assert.ok(r.roundTripMs >= 0); + assert.ok(r.bytesSent >= 0); + assert.ok(r.bytesReceived >= 0); + assert.ok(typeof r.method === "string" && r.method.length > 0); + assert.equal(typeof r.timestamp, "number"); + // Transport overhead is present exactly when server time is. + assert.equal(r.transportOverheadMs === undefined, r.serverTimeMs === undefined); + if (r.serverTimeMs !== undefined) { + assert.ok(r.serverTimeMs >= 0); + assert.equal(r.transportOverheadMs, Math.max(0, r.roundTripMs - r.serverTimeMs)); + } + } + + // Server processing time is folded in for the recent requests. + assert.ok(info.recentRequests.every(r => r.serverTimeMs !== undefined), "server time should be reported"); + + // Reset clears totals and history on both client and server. + await api.resetTimingInfo(); + info = await api.getTimingInfo(); + assert.equal(info.enabled, true); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.totals.serverTimeMs, 0); + assert.equal(info.totals.transportOverheadMs, 0); + assert.equal(info.recentRequests.length, 0); + }); + + test("tracks source-file node materialization", async () => { + await using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ ...defaultFiles }), + collectTiming: true, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = await project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // The source file node itself is pre-cached, so before walking the + // tree no descendant nodes have been materialized. + let info = await api.getTimingInfo(); + const before = info.totals.nodesMaterialized; + assert.equal(info.totals.sourceFilesFetched, 1, "one source file was fetched"); + assert.ok(info.totals.nodesFetched > 0, "the fetched file contributes materializable nodes"); + assert.equal(info.totals.nodesMaterialized, 0, "nothing walked yet, so no nodes materialized"); + + // Walk the whole tree to force lazy materialization of every node. + let visited = 0; + sourceFile.forEachChild(function visit(node) { + visited++; + node.forEachChild(visit); + }); + assert.ok(visited > 0, "expected to visit at least one node"); + + info = await api.getTimingInfo(); + assert.ok( + info.totals.nodesMaterialized > before, + "walking the tree should materialize nodes", + ); + assert.ok( + info.totals.nodesMaterialized >= visited, + "every visited node should have been materialized", + ); + + // A full walk materializes (nearly) every fetched node, so the share + // of fetched nodes materialized should be substantial. + assert.equal(info.totals.sourceFilesFetched, 1); + assert.ok( + info.totals.nodesMaterialized > 0 + && info.totals.nodesMaterialized <= info.totals.nodesFetched, + "materialized nodes should be in (0, nodesFetched]", + ); + + // Reset clears materialization totals along with the rest. + await api.resetTimingInfo(); + info = await api.getTimingInfo(); + assert.equal(info.totals.nodesMaterialized, 0); + assert.equal(info.totals.sourceFilesFetched, 0); + assert.equal(info.totals.nodesFetched, 0); + }); + + test("is disabled by default", async () => { + await using api = spawnAPI(); + + await api.parseConfigFile("/tsconfig.json"); + const info = await api.getTimingInfo(); + assert.equal(info.enabled, false); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.totals.nodesMaterialized, 0); + assert.equal(info.totals.sourceFilesFetched, 0); + assert.equal(info.totals.nodesFetched, 0); + assert.equal(info.recentRequests.length, 0); + }); +}); + +describe("runWithTemporaryFileUpdate", { concurrency }, () => { + test("temporary file update is visible in the callback and reverted afterward", async () => { + await using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x: number = 1;`, + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // The original content type-checks cleanly. + const baseDiags = await project.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(baseDiags.length, 0); + + // Keep a newer snapshot active to verify any active snapshot can be the base. + const latestSnapshot = await api.createSnapshot(); + assert.notEqual(latestSnapshot.id, snapshot.id); + + // Inside the callback, the file has the temporary (erroneous) content. + let errorCount = -1; + await api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const x: string = 1;`, async tempSnapshot => { + const tempProject = tempSnapshot.getConfiguredProject("/tsconfig.json")!; + const diags = await tempProject.program.getSemanticDiagnostics("/src/index.ts"); + errorCount = diags.length; + }); + assert.ok(errorCount > 0, "temporary content should produce a semantic error inside the callback"); + + // The original snapshot is unaffected by the temporary update. + const afterDiags = await project.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(afterDiags.length, 0); + + // A subsequent independent snapshot can request the project again. + const snapshot2 = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project2 = snapshot2.getConfiguredProject("/tsconfig.json")!; + const diags2 = await project2.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(diags2.length, 0); + }); + + test("reconstructs projects omitted from the response diff", async () => { + await using api = spawnAPI({ + "/first/tsconfig.json": `{}`, + "/first/index.ts": `export const first = 1;`, + "/second/tsconfig.json": `{}`, + "/second/index.ts": `export const second = 1;`, + }); + + const snapshot = await api.createSnapshot({ + openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], + }); + const originalSecondProject = snapshot.getConfiguredProject("/second/tsconfig.json")!; + + await api.runWithTemporaryFileUpdate(snapshot, "/first/index.ts", `export const first = 2;`, async tempSnapshot => { + assert.equal(tempSnapshot.getProjects().length, 2); + assert.ok(tempSnapshot.getConfiguredProject("/first/tsconfig.json")); + const secondProject = tempSnapshot.getConfiguredProject("/second/tsconfig.json"); + assert.ok(secondProject); + assert.notStrictEqual(secondProject, originalSecondProject); + assert.equal((await secondProject.program.getSourceFileNames()).includes("/second/index.ts" as RootedFilePath), true); + }); + }); + + test("updates synthetic programs with temporary contents", async () => { + await using api = spawnAPI({ + "/src/index.ts": `export const value: number = 1;`, + }); + const snapshot = await api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { noLib: true, strict: true }, + }], + }); + const originalProgram = snapshot.operation.createdPrograms[0]; + + await api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const value: string = 1;`, async temporarySnapshot => { + const temporaryProgram = temporarySnapshot.getProgram(originalProgram.id); + assert.ok(temporaryProgram); + assert.equal((await temporaryProgram.getSemanticDiagnostics("/src/index.ts")).length, 1); + }); + + assert.equal((await originalProgram.getSemanticDiagnostics("/src/index.ts")).length, 0); + }); +}); + +function spawnAPIWithFS( + files: Record = { ...defaultFiles }, + onWrite?: (path: string) => void, +): { api: API; fs: ReturnType; } { + const fs = createVirtualFileSystem(files); + if (onWrite) { + const writeFile = fs.writeFile!; + fs.writeFile = (path, content) => { + onWrite(path); + writeFile(path, content); + }; + } + const api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + return { api, fs }; +} + +/** Returns `{ pos, end }` for the nth (0-based, default 0) occurrence of `searchString` in `source`. */ +function rangeOf(source: string, searchString: string, occurrence: number = 0): { pos: number; end: number; } { + let index = -1; + for (let i = 0; i <= occurrence; i++) { + index = source.indexOf(searchString, index + 1); + if (index === -1) { + throw new Error(`Occurrence ${occurrence} of "${searchString}" not found in source`); + } + } + return { pos: index, end: index + searchString.length }; +} + +function withoutFormattingContext(value: T): T { + const formattingKeys = new Set(["startPosition", "endPosition", "sourceLines"]); + return JSON.parse(JSON.stringify(value, (key, item) => formattingKeys.has(key) ? undefined : item)) as T; +} + +function applyTextEdits(source: string, edits: readonly TextEdit[]): string { + const sorted = [...edits].sort((a, b) => b.pos - a.pos); + let result = source; + for (const edit of sorted) { + result = result.slice(0, edit.pos) + edit.newText + result.slice(edit.end); + } + return result; +} diff --git a/packages/typescript/test/async/api.testUtils.ts b/packages/typescript/test/async/api.testUtils.ts index d141caa90c80e..36f8c4e6f2b78 100644 --- a/packages/typescript/test/async/api.testUtils.ts +++ b/packages/typescript/test/async/api.testUtils.ts @@ -1,20 +1,20 @@ -import { - API, - type APIOptions, -} from "@typescript/typescript/unstable/async"; -import { fileURLToPath } from "node:url"; -import { createVirtualFileSystem } from "../testUtils.ts"; - -export const defaultFiles = { - "/tsconfig.json": "{}", - "/src/index.ts": `import { foo } from './foo';`, - "/src/foo.ts": `export const foo = 42;`, -}; - -export function spawnAPI(files: Record = { ...defaultFiles }, options: Omit = {}) { - return new API({ - ...options, - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem(files), - }); -} +import { + API, + type APIOptions, +} from "@typescript/typescript/unstable/async"; +import { fileURLToPath } from "node:url"; +import { createVirtualFileSystem } from "../testUtils.ts"; + +export const defaultFiles = { + "/tsconfig.json": "{}", + "/src/index.ts": `import { foo } from './foo';`, + "/src/foo.ts": `export const foo = 42;`, +}; + +export function spawnAPI(files: Record = { ...defaultFiles }, options: Omit = {}) { + return new API({ + ...options, + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem(files), + }); +} diff --git a/packages/typescript/test/async/astnav.test.ts b/packages/typescript/test/async/astnav.test.ts index 38595fb6d6afa..23fde564db8c0 100644 --- a/packages/typescript/test/async/astnav.test.ts +++ b/packages/typescript/test/async/astnav.test.ts @@ -1,191 +1,191 @@ -import { API } from "@typescript/typescript/unstable/async"; // @sync-skip -// @sync-only-start -// import { API } from "@typescript/typescript/unstable/sync"; -// @sync-only-end -import { - findNextToken, - findPrecedingToken, - formatSyntaxKind, - getTokenAtPosition, - getTouchingPropertyName, -} from "@typescript/typescript/unstable/ast"; -import type { - Node, - SourceFile, -} from "@typescript/typescript/unstable/ast"; -import assert from "node:assert"; -import { readFileSync } from "node:fs"; -import { resolve } from "node:path"; -import { - after, - before, - describe, - test, -} from "node:test"; -import { fileURLToPath } from "node:url"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "../testUtils.ts"; - -// --------------------------------------------------------------------------- -// Go JSON baseline format -// --------------------------------------------------------------------------- - -interface TokenRun { - startPos: number; - endPos: number; - kind: string; - nodePos: number; - nodeEnd: number; -} - -/** - * Expand run-length encoded Go baseline into a per-position map. - */ -function expandBaseline(runs: TokenRun[]): Map { - const map = new Map(); - for (const run of runs) { - const entry = { kind: run.kind, pos: run.nodePos, end: run.nodeEnd }; - for (let p = run.startPos; p <= run.endPos; p++) { - map.set(p, entry); - } - } - return map; -} - -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -/** Convert an astnav result node to a string-based token info for comparison. */ -function toTokenInfo(node: Node): { kind: string; pos: number; end: number; } { - return { - kind: formatSyntaxKind(node.kind), - pos: node.pos, - end: node.end, - }; -} - -// --------------------------------------------------------------------------- -// Test configuration -// --------------------------------------------------------------------------- - -const repoRoot = resolve(import.meta.dirname!, "..", "..", "..", ".."); -const testFile = resolve(repoRoot, "tsc/testdata/fixtures/services/mapCode.ts"); -const baselineDir = resolve(repoRoot, "tsc/testdata/baselines/reference/astnav"); - -// --------------------------------------------------------------------------- -// Tests -// --------------------------------------------------------------------------- - -describe("astnav", { concurrency: areTestsFiltered() }, () => { - let fileText: string; - - try { - fileText = readFileSync(testFile, "utf-8"); - } - catch { - console.log("Skipping astnav tests: compiler fixtures not available"); - fileText = ""; - } - - if (!fileText) return; - - // Use the Go API to parse the file — the resulting SourceFile is already - // in our SyntaxKind/NodeFlags enum space with correct JSDoc structure. - let api: API; - let sourceFile: SourceFile; - - before(async () => { - api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ files: ["/src/testFile.ts"] }), - "/src/testFile.ts": fileText, - }), - }); - - const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sf = await project.program.getSourceFile("/src/testFile.ts"); - assert.ok(sf, "Failed to get source file from API"); - sourceFile = sf; - }); - - after(async () => { - await api.close(); - }); - - const testCases = [ - { - name: "getTokenAtPosition", - baselineFile: "GetTokenAtPosition.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => getTokenAtPosition(sf, pos) as Node | undefined, - }, - { - name: "getTouchingPropertyName", - baselineFile: "GetTouchingPropertyName.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => getTouchingPropertyName(sf, pos) as Node | undefined, - }, - { - name: "findPrecedingToken", - baselineFile: "FindPrecedingToken.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => findPrecedingToken(sf, pos), - }, - { - name: "findNextToken", - baselineFile: "FindNextToken.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => findNextToken(getTokenAtPosition(sf, pos), sf, sf), - }, - ]; - - for (const tc of testCases) { - test(tc.name, () => { - const baselinePath = resolve(baselineDir, tc.baselineFile); - const runs: TokenRun[] = JSON.parse(readFileSync(baselinePath, "utf-8")); - const expected = expandBaseline(runs); - - const failures: string[] = []; - - for (let pos = 0; pos < fileText.length; pos++) { - const node = tc.fn(sourceFile, pos); - const goExpected = expected.get(pos); - - if (!goExpected) continue; - - if (node === undefined) { - failures.push( - ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), got undefined`, - ); - if (failures.length >= 50) { - failures.push(" ... (truncated, too many failures)"); - break; - } - continue; - } - - const result = toTokenInfo(node); - if (result.kind !== goExpected.kind || result.pos !== goExpected.pos || result.end !== goExpected.end) { - failures.push( - ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), ` + - `got ${result.kind} [${result.pos}, ${result.end})`, - ); - if (failures.length >= 50) { - failures.push(" ... (truncated, too many failures)"); - break; - } - } - } - - console.log(` ${tc.name}: checked ${fileText.length} positions`); - - if (failures.length > 0) { - assert.fail( - `${tc.name}: ${failures.length} position(s) differ from Go baseline:\n` + - failures.join("\n"), - ); - } - }); - } -}); +import { API } from "@typescript/typescript/unstable/async"; // @sync-skip +// @sync-only-start +// import { API } from "@typescript/typescript/unstable/sync"; +// @sync-only-end +import { + findNextToken, + findPrecedingToken, + formatSyntaxKind, + getTokenAtPosition, + getTouchingPropertyName, +} from "@typescript/typescript/unstable/ast"; +import type { + Node, + SourceFile, +} from "@typescript/typescript/unstable/ast"; +import assert from "node:assert"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { + after, + before, + describe, + test, +} from "node:test"; +import { fileURLToPath } from "node:url"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "../testUtils.ts"; + +// --------------------------------------------------------------------------- +// Go JSON baseline format +// --------------------------------------------------------------------------- + +interface TokenRun { + startPos: number; + endPos: number; + kind: string; + nodePos: number; + nodeEnd: number; +} + +/** + * Expand run-length encoded Go baseline into a per-position map. + */ +function expandBaseline(runs: TokenRun[]): Map { + const map = new Map(); + for (const run of runs) { + const entry = { kind: run.kind, pos: run.nodePos, end: run.nodeEnd }; + for (let p = run.startPos; p <= run.endPos; p++) { + map.set(p, entry); + } + } + return map; +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** Convert an astnav result node to a string-based token info for comparison. */ +function toTokenInfo(node: Node): { kind: string; pos: number; end: number; } { + return { + kind: formatSyntaxKind(node.kind), + pos: node.pos, + end: node.end, + }; +} + +// --------------------------------------------------------------------------- +// Test configuration +// --------------------------------------------------------------------------- + +const repoRoot = resolve(import.meta.dirname!, "..", "..", "..", ".."); +const testFile = resolve(repoRoot, "tsc/testdata/fixtures/services/mapCode.ts"); +const baselineDir = resolve(repoRoot, "tsc/testdata/baselines/reference/astnav"); + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("astnav", { concurrency: areTestsFiltered() }, () => { + let fileText: string; + + try { + fileText = readFileSync(testFile, "utf-8"); + } + catch { + console.log("Skipping astnav tests: compiler fixtures not available"); + fileText = ""; + } + + if (!fileText) return; + + // Use the Go API to parse the file — the resulting SourceFile is already + // in our SyntaxKind/NodeFlags enum space with correct JSDoc structure. + let api: API; + let sourceFile: SourceFile; + + before(async () => { + api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ files: ["/src/testFile.ts"] }), + "/src/testFile.ts": fileText, + }), + }); + + const snapshot = await api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sf = await project.program.getSourceFile("/src/testFile.ts"); + assert.ok(sf, "Failed to get source file from API"); + sourceFile = sf; + }); + + after(async () => { + await api.close(); + }); + + const testCases = [ + { + name: "getTokenAtPosition", + baselineFile: "GetTokenAtPosition.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => getTokenAtPosition(sf, pos) as Node | undefined, + }, + { + name: "getTouchingPropertyName", + baselineFile: "GetTouchingPropertyName.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => getTouchingPropertyName(sf, pos) as Node | undefined, + }, + { + name: "findPrecedingToken", + baselineFile: "FindPrecedingToken.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => findPrecedingToken(sf, pos), + }, + { + name: "findNextToken", + baselineFile: "FindNextToken.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => findNextToken(getTokenAtPosition(sf, pos), sf, sf), + }, + ]; + + for (const tc of testCases) { + test(tc.name, () => { + const baselinePath = resolve(baselineDir, tc.baselineFile); + const runs: TokenRun[] = JSON.parse(readFileSync(baselinePath, "utf-8")); + const expected = expandBaseline(runs); + + const failures: string[] = []; + + for (let pos = 0; pos < fileText.length; pos++) { + const node = tc.fn(sourceFile, pos); + const goExpected = expected.get(pos); + + if (!goExpected) continue; + + if (node === undefined) { + failures.push( + ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), got undefined`, + ); + if (failures.length >= 50) { + failures.push(" ... (truncated, too many failures)"); + break; + } + continue; + } + + const result = toTokenInfo(node); + if (result.kind !== goExpected.kind || result.pos !== goExpected.pos || result.end !== goExpected.end) { + failures.push( + ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), ` + + `got ${result.kind} [${result.pos}, ${result.end})`, + ); + if (failures.length >= 50) { + failures.push(" ... (truncated, too many failures)"); + break; + } + } + } + + console.log(` ${tc.name}: checked ${fileText.length} positions`); + + if (failures.length > 0) { + assert.fail( + `${tc.name}: ${failures.length} position(s) differ from Go baseline:\n` + + failures.join("\n"), + ); + } + }); + } +}); diff --git a/packages/typescript/test/diagnosticFormatter.test.ts b/packages/typescript/test/diagnosticFormatter.test.ts index acb4091b66105..7b024176d8e55 100644 --- a/packages/typescript/test/diagnosticFormatter.test.ts +++ b/packages/typescript/test/diagnosticFormatter.test.ts @@ -1,146 +1,146 @@ -import { - API, - formatDiagnostics, - type FormatDiagnosticsHost, - formatDiagnosticsWithColorAndContext, -} from "@typescript/typescript/unstable/async"; -import assert from "node:assert"; -import { - describe, - test, -} from "node:test"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "./testUtils.ts"; - -describe("diagnosticFormatter", { concurrency: areTestsFiltered() }, () => { - test("formats diagnostics with a configured program host", async () => { - const source = `const x: number = "oops";\n`; - const api = spawnAPI({ - "/project/tsconfig.json": `{ "compilerOptions": { "strict": true, "newLine": "crlf" } }`, - "/project/index.ts": source, - }); - try { - const snapshot = await api.createSnapshot({ openProject: "/project/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/project/tsconfig.json")!.program; - const diagnostics = await program.getSemanticDiagnostics("/project/index.ts"); - assert.equal(diagnostics.length, 1); - assert.equal(api.getCurrentDirectory(), "/workspace"); - assert.equal(api.getNewLine(), "\n"); - assert.equal(program.getCurrentDirectory(), "/project"); - assert.equal(program.getNewLine(), "\r\n"); - - const plain = formatDiagnostics(diagnostics, program); - assert.equal( - plain, - "index.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.\r\n", - ); - - const color = formatDiagnosticsWithColorAndContext(diagnostics, program); - assert.ok(color.includes("TS2322: "), color); - assert.ok(color.includes(source.trim()), color); - assert.ok(color.includes("~"), color); - assert.ok(color.includes("\x1b["), color); - assert.ok(color.endsWith("\r\n"), color); - for (const directory of ["/project", "/project/src/..", "\\project\\src\\.."]) { - const stringHost: FormatDiagnosticsHost = { - getCurrentDirectory: () => directory, - getCanonicalFileName: fileName => fileName, - getNewLine: () => "\r\n", - }; - assert.equal(formatDiagnostics(diagnostics, stringHost), plain); - assert.equal(formatDiagnosticsWithColorAndContext(diagnostics, stringHost), color); - } - const doubled = formatDiagnosticsWithColorAndContext([diagnostics[0], diagnostics[0]], program); - assert.equal(doubled, color + "\r\n" + color); - - const zeroWidth = { - ...diagnostics[0], - end: diagnostics[0].pos, - endPosition: diagnostics[0].startPosition!, - }; - const zeroWidthColor = formatDiagnosticsWithColorAndContext([zeroWidth], program); - assert.match(zeroWidthColor, /\x1b\[91m +~\x1b\[0m/); - - const relatedText = "Related information"; - const withRelated = { - ...diagnostics[0], - relatedInformation: [{ ...diagnostics[0], text: relatedText }], - }; - const relatedColor = formatDiagnosticsWithColorAndContext([withRelated], program); - const relatedMessage = relatedColor.indexOf(` - ${relatedText}`); - assert.notEqual(relatedMessage, -1, relatedColor); - assert.ok(relatedColor.indexOf(source.trim(), relatedMessage) > relatedMessage, relatedColor); - - const multiline = { - ...diagnostics[0], - startPosition: { line: 0, character: 0 }, - endPosition: { line: 6, character: 5 }, - sourceLines: [ - { line: 0, text: "one\n" }, - { line: 1, text: "two\n" }, - { line: 5, text: "six\n" }, - { line: 6, text: "seven" }, - ], - }; - const multilineColor = formatDiagnosticsWithColorAndContext([multiline], program); - assert.ok(multilineColor.includes("..."), multilineColor); - assert.ok(multilineColor.includes("seven"), multilineColor); - } - finally { - await api.close(); - } - }); - - test("uses the API host for standalone diagnostics", async () => { - const configText = `{ "compilerOptions": { "target": "invalid" } }`; - const api = spawnAPI({ - "/workspace/tsconfig.json": configText, - "/workspace/index.ts": `const x: number = "oops";`, - }); - try { - const snapshot = await api.createSnapshot({ openProject: "/workspace/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/workspace/tsconfig.json")!.program; - const diagnostics = await program.getSemanticDiagnostics("/workspace/index.ts"); - const configDiagnostics = (await api.parseConfigFile("/workspace/tsconfig.json")).errors; - const clonedDiagnostics = [ - [{ ...diagnostics[0] }], - structuredClone(diagnostics), - JSON.parse(JSON.stringify(diagnostics)), - ]; - - for (const cloned of clonedDiagnostics) { - assert.ok(formatDiagnostics(cloned, api).includes("TS2322")); - } - assert.ok(formatDiagnostics(configDiagnostics, api).includes("tsconfig.json(1,34): error TS6046: ")); - assert.ok(formatDiagnosticsWithColorAndContext(configDiagnostics, api).includes(configText)); - } - finally { - await api.close(); - } - }); - - test("uses the API directory and LF defaults for inferred projects", async () => { - const api = spawnAPI({ - "/workspace/index.ts": `const x: number = "oops";`, - }); - try { - const snapshot = await api.createSnapshot({ openFiles: ["/workspace/index.ts"] }); - const project = await snapshot.getDefaultProjectForFile("/workspace/index.ts"); - assert.ok(project); - assert.equal(project.program.getCurrentDirectory(), api.getCurrentDirectory()); - assert.equal(project.program.getNewLine(), "\n"); - } - finally { - await api.close(); - } - }); -}); - -function spawnAPI(files: Record): API { - return new API({ - cwd: "/workspace", - fs: createVirtualFileSystem(files), - }); -} +import { + API, + formatDiagnostics, + type FormatDiagnosticsHost, + formatDiagnosticsWithColorAndContext, +} from "@typescript/typescript/unstable/async"; +import assert from "node:assert"; +import { + describe, + test, +} from "node:test"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "./testUtils.ts"; + +describe("diagnosticFormatter", { concurrency: areTestsFiltered() }, () => { + test("formats diagnostics with a configured program host", async () => { + const source = `const x: number = "oops";\n`; + const api = spawnAPI({ + "/project/tsconfig.json": `{ "compilerOptions": { "strict": true, "newLine": "crlf" } }`, + "/project/index.ts": source, + }); + try { + const snapshot = await api.createSnapshot({ openProject: "/project/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/project/tsconfig.json")!.program; + const diagnostics = await program.getSemanticDiagnostics("/project/index.ts"); + assert.equal(diagnostics.length, 1); + assert.equal(api.getCurrentDirectory(), "/workspace"); + assert.equal(api.getNewLine(), "\n"); + assert.equal(program.getCurrentDirectory(), "/project"); + assert.equal(program.getNewLine(), "\r\n"); + + const plain = formatDiagnostics(diagnostics, program); + assert.equal( + plain, + "index.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.\r\n", + ); + + const color = formatDiagnosticsWithColorAndContext(diagnostics, program); + assert.ok(color.includes("TS2322: "), color); + assert.ok(color.includes(source.trim()), color); + assert.ok(color.includes("~"), color); + assert.ok(color.includes("\x1b["), color); + assert.ok(color.endsWith("\r\n"), color); + for (const directory of ["/project", "/project/src/..", "\\project\\src\\.."]) { + const stringHost: FormatDiagnosticsHost = { + getCurrentDirectory: () => directory, + getCanonicalFileName: fileName => fileName, + getNewLine: () => "\r\n", + }; + assert.equal(formatDiagnostics(diagnostics, stringHost), plain); + assert.equal(formatDiagnosticsWithColorAndContext(diagnostics, stringHost), color); + } + const doubled = formatDiagnosticsWithColorAndContext([diagnostics[0], diagnostics[0]], program); + assert.equal(doubled, color + "\r\n" + color); + + const zeroWidth = { + ...diagnostics[0], + end: diagnostics[0].pos, + endPosition: diagnostics[0].startPosition!, + }; + const zeroWidthColor = formatDiagnosticsWithColorAndContext([zeroWidth], program); + assert.match(zeroWidthColor, /\x1b\[91m +~\x1b\[0m/); + + const relatedText = "Related information"; + const withRelated = { + ...diagnostics[0], + relatedInformation: [{ ...diagnostics[0], text: relatedText }], + }; + const relatedColor = formatDiagnosticsWithColorAndContext([withRelated], program); + const relatedMessage = relatedColor.indexOf(` - ${relatedText}`); + assert.notEqual(relatedMessage, -1, relatedColor); + assert.ok(relatedColor.indexOf(source.trim(), relatedMessage) > relatedMessage, relatedColor); + + const multiline = { + ...diagnostics[0], + startPosition: { line: 0, character: 0 }, + endPosition: { line: 6, character: 5 }, + sourceLines: [ + { line: 0, text: "one\n" }, + { line: 1, text: "two\n" }, + { line: 5, text: "six\n" }, + { line: 6, text: "seven" }, + ], + }; + const multilineColor = formatDiagnosticsWithColorAndContext([multiline], program); + assert.ok(multilineColor.includes("..."), multilineColor); + assert.ok(multilineColor.includes("seven"), multilineColor); + } + finally { + await api.close(); + } + }); + + test("uses the API host for standalone diagnostics", async () => { + const configText = `{ "compilerOptions": { "target": "invalid" } }`; + const api = spawnAPI({ + "/workspace/tsconfig.json": configText, + "/workspace/index.ts": `const x: number = "oops";`, + }); + try { + const snapshot = await api.createSnapshot({ openProject: "/workspace/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/workspace/tsconfig.json")!.program; + const diagnostics = await program.getSemanticDiagnostics("/workspace/index.ts"); + const configDiagnostics = (await api.parseConfigFile("/workspace/tsconfig.json")).errors; + const clonedDiagnostics = [ + [{ ...diagnostics[0] }], + structuredClone(diagnostics), + JSON.parse(JSON.stringify(diagnostics)), + ]; + + for (const cloned of clonedDiagnostics) { + assert.ok(formatDiagnostics(cloned, api).includes("TS2322")); + } + assert.ok(formatDiagnostics(configDiagnostics, api).includes("tsconfig.json(1,34): error TS6046: ")); + assert.ok(formatDiagnosticsWithColorAndContext(configDiagnostics, api).includes(configText)); + } + finally { + await api.close(); + } + }); + + test("uses the API directory and LF defaults for inferred projects", async () => { + const api = spawnAPI({ + "/workspace/index.ts": `const x: number = "oops";`, + }); + try { + const snapshot = await api.createSnapshot({ openFiles: ["/workspace/index.ts"] }); + const project = await snapshot.getDefaultProjectForFile("/workspace/index.ts"); + assert.ok(project); + assert.equal(project.program.getCurrentDirectory(), api.getCurrentDirectory()); + assert.equal(project.program.getNewLine(), "\n"); + } + finally { + await api.close(); + } + }); +}); + +function spawnAPI(files: Record): API { + return new API({ + cwd: "/workspace", + fs: createVirtualFileSystem(files), + }); +} diff --git a/packages/typescript/test/encoder.test.ts b/packages/typescript/test/encoder.test.ts index 8b48997dd9eaa..e8bfb624b3d4a 100644 --- a/packages/typescript/test/encoder.test.ts +++ b/packages/typescript/test/encoder.test.ts @@ -1,489 +1,489 @@ -import type { - SourceFile, - Statement, -} from "@typescript/typescript/unstable/ast"; -import { - SyntaxKind, - TokenFlags, -} from "@typescript/typescript/unstable/ast"; -import { - createArrayLiteralExpression, - createBlock, - createExpressionStatement, - createFunctionDeclaration, - createIdentifier, - createIfStatement, - createJsxAttributes, - createJsxClosingElement, - createJsxElement, - createJsxOpeningElement, - createNumericLiteral, - createPostfixUnaryExpression, - createPrefixUnaryExpression, - createSourceFile, - createToken, - createVariableDeclaration, - createVariableDeclarationList, - createVariableStatement, -} from "@typescript/typescript/unstable/ast/factory"; -import { - CaseSensitivity, - pathKey, - toRootedFilePath, -} from "@typescript/typescript/unstable/path"; -import assert from "node:assert"; -import { - describe, - test, -} from "node:test"; -import { - encodeNode, - encodeSourceFile, -} from "../src/api/node/encoder.ts"; -import { - RemoteNode, - RemoteNodeList, - RemoteSourceFile, -} from "../src/api/node/node.ts"; -import { - HEADER_OFFSET_NODES, - HEADER_SIZE, - NODE_LEN, - NODE_OFFSET_DATA, - PROTOCOL_VERSION, -} from "../src/api/node/protocol.ts"; -import { Wtf8Decoder } from "../src/api/node/wtf8.ts"; -import { areTestsFiltered } from "./testUtils.ts"; - -const concurrency = areTestsFiltered(); - -function makeSF(text: string, fileName: string, statements: readonly Statement[]): SourceFile { - const endOfFileToken = createToken(SyntaxKind.EndOfFile); - const rootedFilePath = toRootedFilePath(fileName, undefined); - return createSourceFile( - statements, - endOfFileToken, - text, - rootedFilePath, - pathKey(rootedFilePath, CaseSensitivity.Sensitive), - ); -} - -function decode(data: Uint8Array): RemoteSourceFile { - return new RemoteSourceFile(data, new Wtf8Decoder()); -} - -describe("Encoder", { concurrency }, () => { - test("encodes empty source file", () => { - const sf = makeSF("", "/test.ts", []); - - const encoded = encodeSourceFile(sf); - assert.ok(encoded instanceof Uint8Array); - assert.ok(encoded.length > 0); - - // Verify header - const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); - const metadata = view.getUint32(0, true); - assert.strictEqual(metadata >>> 24, PROTOCOL_VERSION); - assert.strictEqual(HEADER_SIZE, 64); - - // Verify we can decode it - const decoded = decode(encoded); - assert.strictEqual(decoded.kind, SyntaxKind.SourceFile); - assert.strictEqual(decoded.fileName, "/test.ts"); - assert.strictEqual(decoded.path, "/test.ts"); - assert.strictEqual(decoded.text, ""); - assert.strictEqual(decoded.contentMapper, undefined); - assert.strictEqual(decoded.virtualFileName, undefined); - assert.strictEqual(decoded.diagnosticDirectives, undefined); - assert.strictEqual(decoded.supplementalSourceFileNames, undefined); - assert.strictEqual(decoded.canonicalSourceFileName, undefined); - }); - - test("keeps adjacent surrogate string-table entries separate", () => { - const high = String.fromCharCode(0xD800); - const low = String.fromCharCode(0xDC00); - const fileName = toRootedFilePath(`/${high}`, undefined); - const path = pathKey(toRootedFilePath(`/${low}`, undefined), CaseSensitivity.Sensitive); - const sf = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", fileName, path); - - const decoded = decode(encodeSourceFile(sf)); - assert.strictEqual(decoded.fileName, `/${high}`); - assert.strictEqual(decoded.path, `/${low}`); - }); - - test("encodes source file with identifier", () => { - const id = createIdentifier("hello"); - const decl = createVariableDeclaration(id, undefined, undefined, undefined); - const declList = createVariableDeclarationList([decl], 0); - const stmt = createVariableStatement(undefined, declList); - const sf = makeSF("var hello = 42;", "/test.ts", [stmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - - assert.strictEqual(decoded.kind, SyntaxKind.SourceFile); - assert.strictEqual(decoded.text, "var hello = 42;"); - assert.strictEqual(decoded.fileName, "/test.ts"); - - const stmts = decoded.statements; - assert.ok(stmts); - assert.strictEqual(stmts.length, 1); - const decodedStmt = stmts.at(0)!; - assert.strictEqual(decodedStmt.kind, SyntaxKind.VariableStatement); - }); - - test("encodes if statement with optional else", () => { - const condition = createIdentifier("ok"); - const thenBlock = createBlock([]); - const ifStmt = createIfStatement(condition, thenBlock, undefined); - const sf = makeSF("if (ok) {}", "/test.ts", [ifStmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const stmts = decoded.statements; - assert.ok(stmts); - assert.strictEqual(stmts.length, 1); - const decodedIf = stmts.at(0)!; - assert.strictEqual(decodedIf.kind, SyntaxKind.IfStatement); - assert.ok(decodedIf.expression); - assert.strictEqual(decodedIf.expression.kind, SyntaxKind.Identifier); - assert.strictEqual(decodedIf.expression.text, "ok"); - assert.ok(decodedIf.thenStatement); - assert.strictEqual(decodedIf.thenStatement.kind, SyntaxKind.Block); - // No else - assert.strictEqual(decodedIf.elseStatement, undefined); - }); - - test("encodes if statement with else", () => { - const condition = createIdentifier("x"); - const thenBlock = createBlock([]); - const elseBlock = createBlock([]); - const ifStmt = createIfStatement(condition, thenBlock, elseBlock); - const sf = makeSF("if (x) {} else {}", "/test.ts", [ifStmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const stmts = decoded.statements; - assert.ok(stmts); - const decodedIf = stmts.at(0)!; - assert.strictEqual(decodedIf.kind, SyntaxKind.IfStatement); - assert.ok(decodedIf.expression); - assert.ok(decodedIf.thenStatement); - assert.ok(decodedIf.elseStatement); - assert.strictEqual(decodedIf.elseStatement.kind, SyntaxKind.Block); - }); - - test("encodes function declaration", () => { - const name = createIdentifier("foo"); - const body = createBlock([]); - const fn = createFunctionDeclaration(undefined, undefined, name, undefined, [], undefined, body); - const sf = makeSF("function foo() {}", "/test.ts", [fn]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const stmts = decoded.statements; - assert.ok(stmts); - assert.strictEqual(stmts.length, 1); - const decodedFn = stmts.at(0)!; - assert.strictEqual(decodedFn.kind, SyntaxKind.FunctionDeclaration); - assert.ok(decodedFn.name); - assert.strictEqual(decodedFn.name.kind, SyntaxKind.Identifier); - assert.strictEqual(decodedFn.name.text, "foo"); - assert.ok(decodedFn.body); - assert.strictEqual(decodedFn.body.kind, SyntaxKind.Block); - }); - - test("encodes arbitrary node (not source file)", () => { - const condition = createIdentifier("x"); - const thenBlock = createBlock([]); - const ifStmt = createIfStatement(condition, thenBlock, undefined); - - const encoded = encodeNode(ifStmt); - assert.ok(encoded instanceof Uint8Array); - - // Root node at index 1 should be IfStatement - const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); - const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); - const rootKind = view.getUint32(offsetNodes + NODE_LEN, true); - assert.strictEqual(rootKind, SyntaxKind.IfStatement); - }); - - test("protocol version matches", () => { - const sf = makeSF("", "/test.ts", []); - const encoded = encodeSourceFile(sf); - const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); - assert.strictEqual(view.getUint32(0, true) >>> 24, PROTOCOL_VERSION); - }); - - test("encodes source files without content mapping metadata", () => { - const ordinary = decode(encodeSourceFile(makeSF("text", "/test.ts", []))); - assert.equal(ordinary.originalText, ordinary.text); - assert.equal(ordinary.spanMap, undefined); - assert.equal(ordinary.contentMapper, undefined); - assert.equal(ordinary.virtualFileName, undefined); - assert.equal(ordinary.diagnosticDirectives, undefined); - }); - - test("boolean properties are encoded", () => { - // Block with multiLine=true - const block = createBlock([], true); - const encoded = encodeNode(block); - const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); - const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); - const data = view.getUint32(offsetNodes + NODE_LEN + NODE_OFFSET_DATA, true); - // Bit 24 should be 1 (multiLine) - assert.strictEqual((data >>> 24) & 1, 1); - }); - - test("postfix unary operator is preserved through encode/decode", () => { - const operand = createIdentifier("i"); - const postfix = createPostfixUnaryExpression(operand, SyntaxKind.PlusPlusToken); - const stmt = createExpressionStatement(postfix); - const sf = makeSF("i++;", "/test.ts", [stmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const stmts = decoded.statements; - assert.ok(stmts); - const decodedStmt = stmts.at(0)!; - assert.strictEqual(decodedStmt.kind, SyntaxKind.ExpressionStatement); - const expr = decodedStmt.expression!; - assert.strictEqual(expr.kind, SyntaxKind.PostfixUnaryExpression); - assert.strictEqual(expr.operator, SyntaxKind.PlusPlusToken); - assert.ok(expr.operand); - assert.strictEqual(expr.operand.kind, SyntaxKind.Identifier); - }); - - test("prefix unary operator is preserved through encode/decode", () => { - const operand = createIdentifier("x"); - const prefix = createPrefixUnaryExpression(SyntaxKind.ExclamationToken, operand); - const stmt = createExpressionStatement(prefix); - const sf = makeSF("!x;", "/test.ts", [stmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const stmts = decoded.statements; - assert.ok(stmts); - const expr = stmts.at(0)!.expression!; - assert.strictEqual(expr.kind, SyntaxKind.PrefixUnaryExpression); - assert.strictEqual(expr.operator, SyntaxKind.ExclamationToken); - }); - - test("postfix decrement operator is preserved", () => { - const operand = createIdentifier("n"); - const postfix = createPostfixUnaryExpression(operand, SyntaxKind.MinusMinusToken); - const stmt = createExpressionStatement(postfix); - const sf = makeSF("n--;", "/test.ts", [stmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - const expr = decoded.statements!.at(0)!.expression!; - assert.strictEqual(expr.kind, SyntaxKind.PostfixUnaryExpression); - assert.strictEqual(expr.operator, SyntaxKind.MinusMinusToken); - }); - - test("single-child node with no children returns undefined", () => { - // JsxAttributes is a single-child node (property: "properties"). - // When the properties NodeList is empty, the encoder skips it, - // so JsxAttributes has zero encoded children. Accessing .properties - // must return undefined, not throw "Expected only one child". - const tagName = createIdentifier("div"); - const emptyAttrs = createJsxAttributes([]); - const opening = createJsxOpeningElement(tagName, undefined, emptyAttrs); - const closing = createJsxClosingElement(createIdentifier("div")); - const jsx = createJsxElement(opening, [], closing); - const stmt = createVariableStatement( - undefined, - createVariableDeclarationList([createVariableDeclaration(createIdentifier("x"), undefined, undefined, jsx)], 0), - ); - const sf = makeSF("const x =
;", "/test.tsx", [stmt]); - - const encoded = encodeSourceFile(sf); - const decoded = decode(encoded); - - // Walk to JsxOpeningElement → attributes (JsxAttributes) - const varStmt = decoded.statements!.at(0)!; - const declList = varStmt.declarationList!; - const declarationsNode = declList.declarations!; - assert.ok(declarationsNode instanceof RemoteNodeList); - const varDecl = declarationsNode.at(0)!; - const jsxElem = varDecl.initializer!; - assert.strictEqual(jsxElem.kind, SyntaxKind.JsxElement); - const openingElem = jsxElem.openingElement!; - assert.strictEqual(openingElem.kind, SyntaxKind.JsxOpeningElement); - const attrs = openingElem.attributes! as RemoteNode; - assert.strictEqual(attrs.kind, SyntaxKind.JsxAttributes); - // Empty properties should return undefined, not throw - assert.strictEqual(jsxElem.typeArguments, undefined); - }); - - test("NodeList element access is consistent across forward, backward, and random order", () => { - // Build `[0, 1, 2, ..., 9]` and access the NodeList in several orders to - // ensure the memoized cursor in `at()` never returns a stale element. - const count = 10; - const elements = []; - let text = "["; - for (let i = 0; i < count; i++) { - elements.push(createNumericLiteral(String(i), TokenFlags.None)); - text += (i === 0 ? "" : ", ") + i; - } - text += "]"; - const stmt = createExpressionStatement(createArrayLiteralExpression(elements)); - const sf = makeSF(text, "/test.ts", [stmt]); - - const decoded = decode(encodeSourceFile(sf)); - const arrayExpr = (decoded.statements!.at(0)! as RemoteNode).expression! as RemoteNode; - const list = arrayExpr.elements! as unknown as RemoteNodeList; - assert.strictEqual(list.length, count); - - // Independent decode used as an oracle: fresh cursor per lookup. - const posOf = (i: number) => { - const freshExpr = (decode(encodeSourceFile(sf)).statements!.at(0)! as RemoteNode).expression! as RemoteNode; - return (freshExpr.elements! as unknown as RemoteNodeList).at(i)!.pos; - }; - const expected = Array.from({ length: count }, (_, i) => posOf(i)); - - // Forward sequential (exercises cursor resume). - for (let i = 0; i < count; i++) { - assert.strictEqual(list.at(i)!.pos, expected[i], `forward at(${i})`); - } - // Backward sequential (cursor must reset when index < cursor). - for (let i = count - 1; i >= 0; i--) { - assert.strictEqual(list.at(i)!.pos, expected[i], `backward at(${i})`); - } - // Random order, with repeats. - for (const i of [3, 7, 1, 7, 0, 9, 4, 4, 2, 8, 5, 6, 0, 9]) { - assert.strictEqual(list.at(i)!.pos, expected[i], `random at(${i})`); - } - // Negative indices. - assert.strictEqual(list.at(-1)!.pos, expected[count - 1], "at(-1)"); - assert.strictEqual(list.at(-count)!.pos, expected[0], `at(-${count})`); - - // Indexed getters (0..15) and spread must agree with at(). - assert.strictEqual((list[0] as RemoteNode).pos, expected[0]); - assert.strictEqual((list[9] as RemoteNode).pos, expected[9]); - assert.deepStrictEqual([...list].map(n => n.pos), expected); - }); -}); - -describe("UTF-8 vs UTF-16 position encoding", { concurrency }, () => { - // Positions in the encoded AST must be UTF-16 code unit offsets so that - // file.text.slice(node.pos, node.end) works correctly on JS strings. - // This is the same convention TypeScript uses. - - function utf8ByteLength(s: string): number { - return new TextEncoder().encode(s).length; - } - - // Returns the UTF-16 code unit position of a substring in a source string - function utf16Pos(source: string, substring: string): { pos: number; end: number; } { - const pos = source.indexOf(substring); - return { pos, end: pos + substring.length }; - } - - test("ASCII: text.slice(pos, end) works", () => { - const source = "const x = 1;"; - assert.strictEqual(source.length, utf8ByteLength(source)); - - const { pos, end } = utf16Pos(source, "x"); - assert.strictEqual(source.slice(pos, end), "x"); - }); - - test("2-byte char: text.slice(pos, end) works", () => { - // é (U+00E9) is 1 UTF-16 code unit but 2 UTF-8 bytes - const source = "const café = 1;\nconst x = 2;"; - assert.strictEqual(source.length, 28); // UTF-16 code units - assert.strictEqual(utf8ByteLength(source), 29); // UTF-8 bytes (1 extra from é) - - const { pos, end } = utf16Pos(source, "x"); - assert.strictEqual(source.slice(pos, end), "x"); - - // Positions after multi-byte characters must be UTF-16 code unit offsets, not UTF-8 byte offsets - assert.strictEqual(pos, 22); // UTF-16 position - assert.notStrictEqual(pos, 23); // NOT the UTF-8 byte offset - }); - - test("4-byte char (supplementary plane): text.slice(pos, end) works", () => { - // 🎉 (U+1F389) is 2 UTF-16 code units (surrogate pair) but 4 UTF-8 bytes - const source = 'const a = "🎉";\nconst b = 2;'; - assert.strictEqual(source.length, 28); // UTF-16 code units - assert.strictEqual(utf8ByteLength(source), 30); // 2 extra bytes from 🎉 - - const { pos, end } = utf16Pos(source, "b"); - assert.strictEqual(source.slice(pos, end), "b"); - - // Must use UTF-16 offset, not UTF-8 byte offset - assert.strictEqual(pos, 22); // UTF-16 position - assert.notStrictEqual(pos, 24); // NOT the UTF-8 byte offset (shifted by 2) - }); - - test("multi-byte identifier: text.slice(pos, end) works", () => { - // Identifier "café" has 4 UTF-16 code units but 5 UTF-8 bytes - const source = "let café = 1;"; - - const { pos, end } = utf16Pos(source, "café"); - assert.strictEqual(source.slice(pos, end), "café"); - assert.strictEqual(end - pos, 4); // UTF-16 length, not UTF-8 byte length (5) - }); -}); - -describe("Line and character mapping", { concurrency }, () => { - function makeSourceFile(text: string): RemoteSourceFile { - return decode(encodeSourceFile(makeSF(text, "/test.ts", []))); - } - - test("getLineStarts for empty file", () => { - const sf = makeSourceFile(""); - assert.deepStrictEqual(sf.getLineStarts(), [0]); - }); - - test("getLineStarts for LF-separated lines", () => { - const sf = makeSourceFile("a\nb\nc"); - assert.deepStrictEqual(sf.getLineStarts(), [0, 2, 4]); - }); - - test("getLineStarts for CRLF-separated lines", () => { - const sf = makeSourceFile("a\r\nbb\r\nc"); - assert.deepStrictEqual(sf.getLineStarts(), [0, 3, 7]); - }); - - test("getLineStarts is cached", () => { - const sf = makeSourceFile("a\nb"); - assert.strictEqual(sf.getLineStarts(), sf.getLineStarts()); - }); - - test("getLineAndCharacterOfPosition", () => { - const sf = makeSourceFile("ab\ncde\nf"); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(0), { line: 0, character: 0 }); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(2), { line: 0, character: 2 }); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(3), { line: 1, character: 0 }); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(6), { line: 1, character: 3 }); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(7), { line: 2, character: 0 }); - }); - - test("getLineAndCharacterOfPosition uses UTF-16 code units", () => { - // 🎉 (U+1F389) is a surrogate pair: 2 UTF-16 code units. - const source = "🎉a\nb"; - const sf = makeSourceFile(source); - // "a" is at UTF-16 offset 2, on line 0 - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(2), { line: 0, character: 2 }); - // "b" is at UTF-16 offset 4 (after "🎉a\n"), on line 1 - assert.strictEqual(source.indexOf("b"), 4); - assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(4), { line: 1, character: 0 }); - }); - - test("getPositionOfLineAndCharacter round-trips", () => { - const sf = makeSourceFile("ab\ncde\nf"); - for (const pos of [0, 1, 2, 3, 5, 6, 7]) { - const lc = sf.getLineAndCharacterOfPosition(pos); - assert.strictEqual(sf.getPositionOfLineAndCharacter(lc.line, lc.character), pos); - } - }); - - test("getPositionOfLineAndCharacter throws for out-of-range line", () => { - const sf = makeSourceFile("a\nb"); - assert.throws(() => sf.getPositionOfLineAndCharacter(5, 0), /Bad line number/); - assert.throws(() => sf.getPositionOfLineAndCharacter(-1, 0), /Bad line number/); - }); -}); +import type { + SourceFile, + Statement, +} from "@typescript/typescript/unstable/ast"; +import { + SyntaxKind, + TokenFlags, +} from "@typescript/typescript/unstable/ast"; +import { + createArrayLiteralExpression, + createBlock, + createExpressionStatement, + createFunctionDeclaration, + createIdentifier, + createIfStatement, + createJsxAttributes, + createJsxClosingElement, + createJsxElement, + createJsxOpeningElement, + createNumericLiteral, + createPostfixUnaryExpression, + createPrefixUnaryExpression, + createSourceFile, + createToken, + createVariableDeclaration, + createVariableDeclarationList, + createVariableStatement, +} from "@typescript/typescript/unstable/ast/factory"; +import { + CaseSensitivity, + pathKey, + toRootedFilePath, +} from "@typescript/typescript/unstable/path"; +import assert from "node:assert"; +import { + describe, + test, +} from "node:test"; +import { + encodeNode, + encodeSourceFile, +} from "../src/api/node/encoder.ts"; +import { + RemoteNode, + RemoteNodeList, + RemoteSourceFile, +} from "../src/api/node/node.ts"; +import { + HEADER_OFFSET_NODES, + HEADER_SIZE, + NODE_LEN, + NODE_OFFSET_DATA, + PROTOCOL_VERSION, +} from "../src/api/node/protocol.ts"; +import { Wtf8Decoder } from "../src/api/node/wtf8.ts"; +import { areTestsFiltered } from "./testUtils.ts"; + +const concurrency = areTestsFiltered(); + +function makeSF(text: string, fileName: string, statements: readonly Statement[]): SourceFile { + const endOfFileToken = createToken(SyntaxKind.EndOfFile); + const rootedFilePath = toRootedFilePath(fileName, undefined); + return createSourceFile( + statements, + endOfFileToken, + text, + rootedFilePath, + pathKey(rootedFilePath, CaseSensitivity.Sensitive), + ); +} + +function decode(data: Uint8Array): RemoteSourceFile { + return new RemoteSourceFile(data, new Wtf8Decoder()); +} + +describe("Encoder", { concurrency }, () => { + test("encodes empty source file", () => { + const sf = makeSF("", "/test.ts", []); + + const encoded = encodeSourceFile(sf); + assert.ok(encoded instanceof Uint8Array); + assert.ok(encoded.length > 0); + + // Verify header + const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); + const metadata = view.getUint32(0, true); + assert.strictEqual(metadata >>> 24, PROTOCOL_VERSION); + assert.strictEqual(HEADER_SIZE, 64); + + // Verify we can decode it + const decoded = decode(encoded); + assert.strictEqual(decoded.kind, SyntaxKind.SourceFile); + assert.strictEqual(decoded.fileName, "/test.ts"); + assert.strictEqual(decoded.path, "/test.ts"); + assert.strictEqual(decoded.text, ""); + assert.strictEqual(decoded.contentMapper, undefined); + assert.strictEqual(decoded.virtualFileName, undefined); + assert.strictEqual(decoded.diagnosticDirectives, undefined); + assert.strictEqual(decoded.supplementalSourceFileNames, undefined); + assert.strictEqual(decoded.canonicalSourceFileName, undefined); + }); + + test("keeps adjacent surrogate string-table entries separate", () => { + const high = String.fromCharCode(0xD800); + const low = String.fromCharCode(0xDC00); + const fileName = toRootedFilePath(`/${high}`, undefined); + const path = pathKey(toRootedFilePath(`/${low}`, undefined), CaseSensitivity.Sensitive); + const sf = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", fileName, path); + + const decoded = decode(encodeSourceFile(sf)); + assert.strictEqual(decoded.fileName, `/${high}`); + assert.strictEqual(decoded.path, `/${low}`); + }); + + test("encodes source file with identifier", () => { + const id = createIdentifier("hello"); + const decl = createVariableDeclaration(id, undefined, undefined, undefined); + const declList = createVariableDeclarationList([decl], 0); + const stmt = createVariableStatement(undefined, declList); + const sf = makeSF("var hello = 42;", "/test.ts", [stmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + + assert.strictEqual(decoded.kind, SyntaxKind.SourceFile); + assert.strictEqual(decoded.text, "var hello = 42;"); + assert.strictEqual(decoded.fileName, "/test.ts"); + + const stmts = decoded.statements; + assert.ok(stmts); + assert.strictEqual(stmts.length, 1); + const decodedStmt = stmts.at(0)!; + assert.strictEqual(decodedStmt.kind, SyntaxKind.VariableStatement); + }); + + test("encodes if statement with optional else", () => { + const condition = createIdentifier("ok"); + const thenBlock = createBlock([]); + const ifStmt = createIfStatement(condition, thenBlock, undefined); + const sf = makeSF("if (ok) {}", "/test.ts", [ifStmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const stmts = decoded.statements; + assert.ok(stmts); + assert.strictEqual(stmts.length, 1); + const decodedIf = stmts.at(0)!; + assert.strictEqual(decodedIf.kind, SyntaxKind.IfStatement); + assert.ok(decodedIf.expression); + assert.strictEqual(decodedIf.expression.kind, SyntaxKind.Identifier); + assert.strictEqual(decodedIf.expression.text, "ok"); + assert.ok(decodedIf.thenStatement); + assert.strictEqual(decodedIf.thenStatement.kind, SyntaxKind.Block); + // No else + assert.strictEqual(decodedIf.elseStatement, undefined); + }); + + test("encodes if statement with else", () => { + const condition = createIdentifier("x"); + const thenBlock = createBlock([]); + const elseBlock = createBlock([]); + const ifStmt = createIfStatement(condition, thenBlock, elseBlock); + const sf = makeSF("if (x) {} else {}", "/test.ts", [ifStmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const stmts = decoded.statements; + assert.ok(stmts); + const decodedIf = stmts.at(0)!; + assert.strictEqual(decodedIf.kind, SyntaxKind.IfStatement); + assert.ok(decodedIf.expression); + assert.ok(decodedIf.thenStatement); + assert.ok(decodedIf.elseStatement); + assert.strictEqual(decodedIf.elseStatement.kind, SyntaxKind.Block); + }); + + test("encodes function declaration", () => { + const name = createIdentifier("foo"); + const body = createBlock([]); + const fn = createFunctionDeclaration(undefined, undefined, name, undefined, [], undefined, body); + const sf = makeSF("function foo() {}", "/test.ts", [fn]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const stmts = decoded.statements; + assert.ok(stmts); + assert.strictEqual(stmts.length, 1); + const decodedFn = stmts.at(0)!; + assert.strictEqual(decodedFn.kind, SyntaxKind.FunctionDeclaration); + assert.ok(decodedFn.name); + assert.strictEqual(decodedFn.name.kind, SyntaxKind.Identifier); + assert.strictEqual(decodedFn.name.text, "foo"); + assert.ok(decodedFn.body); + assert.strictEqual(decodedFn.body.kind, SyntaxKind.Block); + }); + + test("encodes arbitrary node (not source file)", () => { + const condition = createIdentifier("x"); + const thenBlock = createBlock([]); + const ifStmt = createIfStatement(condition, thenBlock, undefined); + + const encoded = encodeNode(ifStmt); + assert.ok(encoded instanceof Uint8Array); + + // Root node at index 1 should be IfStatement + const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); + const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); + const rootKind = view.getUint32(offsetNodes + NODE_LEN, true); + assert.strictEqual(rootKind, SyntaxKind.IfStatement); + }); + + test("protocol version matches", () => { + const sf = makeSF("", "/test.ts", []); + const encoded = encodeSourceFile(sf); + const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); + assert.strictEqual(view.getUint32(0, true) >>> 24, PROTOCOL_VERSION); + }); + + test("encodes source files without content mapping metadata", () => { + const ordinary = decode(encodeSourceFile(makeSF("text", "/test.ts", []))); + assert.equal(ordinary.originalText, ordinary.text); + assert.equal(ordinary.spanMap, undefined); + assert.equal(ordinary.contentMapper, undefined); + assert.equal(ordinary.virtualFileName, undefined); + assert.equal(ordinary.diagnosticDirectives, undefined); + }); + + test("boolean properties are encoded", () => { + // Block with multiLine=true + const block = createBlock([], true); + const encoded = encodeNode(block); + const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength); + const offsetNodes = view.getUint32(HEADER_OFFSET_NODES, true); + const data = view.getUint32(offsetNodes + NODE_LEN + NODE_OFFSET_DATA, true); + // Bit 24 should be 1 (multiLine) + assert.strictEqual((data >>> 24) & 1, 1); + }); + + test("postfix unary operator is preserved through encode/decode", () => { + const operand = createIdentifier("i"); + const postfix = createPostfixUnaryExpression(operand, SyntaxKind.PlusPlusToken); + const stmt = createExpressionStatement(postfix); + const sf = makeSF("i++;", "/test.ts", [stmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const stmts = decoded.statements; + assert.ok(stmts); + const decodedStmt = stmts.at(0)!; + assert.strictEqual(decodedStmt.kind, SyntaxKind.ExpressionStatement); + const expr = decodedStmt.expression!; + assert.strictEqual(expr.kind, SyntaxKind.PostfixUnaryExpression); + assert.strictEqual(expr.operator, SyntaxKind.PlusPlusToken); + assert.ok(expr.operand); + assert.strictEqual(expr.operand.kind, SyntaxKind.Identifier); + }); + + test("prefix unary operator is preserved through encode/decode", () => { + const operand = createIdentifier("x"); + const prefix = createPrefixUnaryExpression(SyntaxKind.ExclamationToken, operand); + const stmt = createExpressionStatement(prefix); + const sf = makeSF("!x;", "/test.ts", [stmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const stmts = decoded.statements; + assert.ok(stmts); + const expr = stmts.at(0)!.expression!; + assert.strictEqual(expr.kind, SyntaxKind.PrefixUnaryExpression); + assert.strictEqual(expr.operator, SyntaxKind.ExclamationToken); + }); + + test("postfix decrement operator is preserved", () => { + const operand = createIdentifier("n"); + const postfix = createPostfixUnaryExpression(operand, SyntaxKind.MinusMinusToken); + const stmt = createExpressionStatement(postfix); + const sf = makeSF("n--;", "/test.ts", [stmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + const expr = decoded.statements!.at(0)!.expression!; + assert.strictEqual(expr.kind, SyntaxKind.PostfixUnaryExpression); + assert.strictEqual(expr.operator, SyntaxKind.MinusMinusToken); + }); + + test("single-child node with no children returns undefined", () => { + // JsxAttributes is a single-child node (property: "properties"). + // When the properties NodeList is empty, the encoder skips it, + // so JsxAttributes has zero encoded children. Accessing .properties + // must return undefined, not throw "Expected only one child". + const tagName = createIdentifier("div"); + const emptyAttrs = createJsxAttributes([]); + const opening = createJsxOpeningElement(tagName, undefined, emptyAttrs); + const closing = createJsxClosingElement(createIdentifier("div")); + const jsx = createJsxElement(opening, [], closing); + const stmt = createVariableStatement( + undefined, + createVariableDeclarationList([createVariableDeclaration(createIdentifier("x"), undefined, undefined, jsx)], 0), + ); + const sf = makeSF("const x =
;", "/test.tsx", [stmt]); + + const encoded = encodeSourceFile(sf); + const decoded = decode(encoded); + + // Walk to JsxOpeningElement → attributes (JsxAttributes) + const varStmt = decoded.statements!.at(0)!; + const declList = varStmt.declarationList!; + const declarationsNode = declList.declarations!; + assert.ok(declarationsNode instanceof RemoteNodeList); + const varDecl = declarationsNode.at(0)!; + const jsxElem = varDecl.initializer!; + assert.strictEqual(jsxElem.kind, SyntaxKind.JsxElement); + const openingElem = jsxElem.openingElement!; + assert.strictEqual(openingElem.kind, SyntaxKind.JsxOpeningElement); + const attrs = openingElem.attributes! as RemoteNode; + assert.strictEqual(attrs.kind, SyntaxKind.JsxAttributes); + // Empty properties should return undefined, not throw + assert.strictEqual(jsxElem.typeArguments, undefined); + }); + + test("NodeList element access is consistent across forward, backward, and random order", () => { + // Build `[0, 1, 2, ..., 9]` and access the NodeList in several orders to + // ensure the memoized cursor in `at()` never returns a stale element. + const count = 10; + const elements = []; + let text = "["; + for (let i = 0; i < count; i++) { + elements.push(createNumericLiteral(String(i), TokenFlags.None)); + text += (i === 0 ? "" : ", ") + i; + } + text += "]"; + const stmt = createExpressionStatement(createArrayLiteralExpression(elements)); + const sf = makeSF(text, "/test.ts", [stmt]); + + const decoded = decode(encodeSourceFile(sf)); + const arrayExpr = (decoded.statements!.at(0)! as RemoteNode).expression! as RemoteNode; + const list = arrayExpr.elements! as unknown as RemoteNodeList; + assert.strictEqual(list.length, count); + + // Independent decode used as an oracle: fresh cursor per lookup. + const posOf = (i: number) => { + const freshExpr = (decode(encodeSourceFile(sf)).statements!.at(0)! as RemoteNode).expression! as RemoteNode; + return (freshExpr.elements! as unknown as RemoteNodeList).at(i)!.pos; + }; + const expected = Array.from({ length: count }, (_, i) => posOf(i)); + + // Forward sequential (exercises cursor resume). + for (let i = 0; i < count; i++) { + assert.strictEqual(list.at(i)!.pos, expected[i], `forward at(${i})`); + } + // Backward sequential (cursor must reset when index < cursor). + for (let i = count - 1; i >= 0; i--) { + assert.strictEqual(list.at(i)!.pos, expected[i], `backward at(${i})`); + } + // Random order, with repeats. + for (const i of [3, 7, 1, 7, 0, 9, 4, 4, 2, 8, 5, 6, 0, 9]) { + assert.strictEqual(list.at(i)!.pos, expected[i], `random at(${i})`); + } + // Negative indices. + assert.strictEqual(list.at(-1)!.pos, expected[count - 1], "at(-1)"); + assert.strictEqual(list.at(-count)!.pos, expected[0], `at(-${count})`); + + // Indexed getters (0..15) and spread must agree with at(). + assert.strictEqual((list[0] as RemoteNode).pos, expected[0]); + assert.strictEqual((list[9] as RemoteNode).pos, expected[9]); + assert.deepStrictEqual([...list].map(n => n.pos), expected); + }); +}); + +describe("UTF-8 vs UTF-16 position encoding", { concurrency }, () => { + // Positions in the encoded AST must be UTF-16 code unit offsets so that + // file.text.slice(node.pos, node.end) works correctly on JS strings. + // This is the same convention TypeScript uses. + + function utf8ByteLength(s: string): number { + return new TextEncoder().encode(s).length; + } + + // Returns the UTF-16 code unit position of a substring in a source string + function utf16Pos(source: string, substring: string): { pos: number; end: number; } { + const pos = source.indexOf(substring); + return { pos, end: pos + substring.length }; + } + + test("ASCII: text.slice(pos, end) works", () => { + const source = "const x = 1;"; + assert.strictEqual(source.length, utf8ByteLength(source)); + + const { pos, end } = utf16Pos(source, "x"); + assert.strictEqual(source.slice(pos, end), "x"); + }); + + test("2-byte char: text.slice(pos, end) works", () => { + // é (U+00E9) is 1 UTF-16 code unit but 2 UTF-8 bytes + const source = "const café = 1;\nconst x = 2;"; + assert.strictEqual(source.length, 28); // UTF-16 code units + assert.strictEqual(utf8ByteLength(source), 29); // UTF-8 bytes (1 extra from é) + + const { pos, end } = utf16Pos(source, "x"); + assert.strictEqual(source.slice(pos, end), "x"); + + // Positions after multi-byte characters must be UTF-16 code unit offsets, not UTF-8 byte offsets + assert.strictEqual(pos, 22); // UTF-16 position + assert.notStrictEqual(pos, 23); // NOT the UTF-8 byte offset + }); + + test("4-byte char (supplementary plane): text.slice(pos, end) works", () => { + // 🎉 (U+1F389) is 2 UTF-16 code units (surrogate pair) but 4 UTF-8 bytes + const source = 'const a = "🎉";\nconst b = 2;'; + assert.strictEqual(source.length, 28); // UTF-16 code units + assert.strictEqual(utf8ByteLength(source), 30); // 2 extra bytes from 🎉 + + const { pos, end } = utf16Pos(source, "b"); + assert.strictEqual(source.slice(pos, end), "b"); + + // Must use UTF-16 offset, not UTF-8 byte offset + assert.strictEqual(pos, 22); // UTF-16 position + assert.notStrictEqual(pos, 24); // NOT the UTF-8 byte offset (shifted by 2) + }); + + test("multi-byte identifier: text.slice(pos, end) works", () => { + // Identifier "café" has 4 UTF-16 code units but 5 UTF-8 bytes + const source = "let café = 1;"; + + const { pos, end } = utf16Pos(source, "café"); + assert.strictEqual(source.slice(pos, end), "café"); + assert.strictEqual(end - pos, 4); // UTF-16 length, not UTF-8 byte length (5) + }); +}); + +describe("Line and character mapping", { concurrency }, () => { + function makeSourceFile(text: string): RemoteSourceFile { + return decode(encodeSourceFile(makeSF(text, "/test.ts", []))); + } + + test("getLineStarts for empty file", () => { + const sf = makeSourceFile(""); + assert.deepStrictEqual(sf.getLineStarts(), [0]); + }); + + test("getLineStarts for LF-separated lines", () => { + const sf = makeSourceFile("a\nb\nc"); + assert.deepStrictEqual(sf.getLineStarts(), [0, 2, 4]); + }); + + test("getLineStarts for CRLF-separated lines", () => { + const sf = makeSourceFile("a\r\nbb\r\nc"); + assert.deepStrictEqual(sf.getLineStarts(), [0, 3, 7]); + }); + + test("getLineStarts is cached", () => { + const sf = makeSourceFile("a\nb"); + assert.strictEqual(sf.getLineStarts(), sf.getLineStarts()); + }); + + test("getLineAndCharacterOfPosition", () => { + const sf = makeSourceFile("ab\ncde\nf"); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(0), { line: 0, character: 0 }); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(2), { line: 0, character: 2 }); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(3), { line: 1, character: 0 }); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(6), { line: 1, character: 3 }); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(7), { line: 2, character: 0 }); + }); + + test("getLineAndCharacterOfPosition uses UTF-16 code units", () => { + // 🎉 (U+1F389) is a surrogate pair: 2 UTF-16 code units. + const source = "🎉a\nb"; + const sf = makeSourceFile(source); + // "a" is at UTF-16 offset 2, on line 0 + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(2), { line: 0, character: 2 }); + // "b" is at UTF-16 offset 4 (after "🎉a\n"), on line 1 + assert.strictEqual(source.indexOf("b"), 4); + assert.deepStrictEqual(sf.getLineAndCharacterOfPosition(4), { line: 1, character: 0 }); + }); + + test("getPositionOfLineAndCharacter round-trips", () => { + const sf = makeSourceFile("ab\ncde\nf"); + for (const pos of [0, 1, 2, 3, 5, 6, 7]) { + const lc = sf.getLineAndCharacterOfPosition(pos); + assert.strictEqual(sf.getPositionOfLineAndCharacter(lc.line, lc.character), pos); + } + }); + + test("getPositionOfLineAndCharacter throws for out-of-range line", () => { + const sf = makeSourceFile("a\nb"); + assert.throws(() => sf.getPositionOfLineAndCharacter(5, 0), /Bad line number/); + assert.throws(() => sf.getPositionOfLineAndCharacter(-1, 0), /Bad line number/); + }); +}); diff --git a/packages/typescript/test/generators/api.bench.ts b/packages/typescript/test/generators/api.bench.ts index ddc3328e827b0..0d44b3d38bcd3 100644 --- a/packages/typescript/test/generators/api.bench.ts +++ b/packages/typescript/test/generators/api.bench.ts @@ -1,266 +1,266 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: test/async/api.bench.ts -// Regenerate: npm run generate (from packages/typescript) -// -import { - type Node, - type SourceFile, - SyntaxKind, -} from "@typescript/typescript/unstable/ast"; -import { - API, - type Project, - type Snapshot, -} from "@typescript/typescript/unstable/sync"; -import { writeFileSync } from "node:fs"; -import inspector from "node:inspector"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import ts from "typescript"; -import { RemoteSourceFile } from "../../src/api/node/node.ts"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - singleIteration: { type: "boolean", default: false }, - cpuprofile: { type: "boolean", default: false }, - }, - }); - runBenchmarks(values); -} - -export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { - const { filter, singleIteration, cpuprofile } = options ?? {}; - const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); - - const bench = new Bench({ - name: "Generator API", - teardown, - // Reduce iterations from the default 64 to 10. Slow tasks - // are dominated by the iteration minimum, not the time limit. - // 10 iterations still gives stable medians while cutting total - // bench time by ~5x. - iterations: 10, - warmupIterations: 4, - ...singleIteration ? { - iterations: 1, - warmup: false, - time: 0, - } : undefined, - }); - - let api: API; - let snapshot: Snapshot; - let project: Project; - let tsProgram: ts.Program; - let file: SourceFile; - let tsFile: ts.SourceFile; - - const programIdentifierCount = (() => { - spawnAPI(); - loadSnapshot(); - getProgramTS(); - let count = 0; - file!.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - count++; - } - node.forEachChild(visit); - }); - teardown(); - return count; - })(); - - // Tinybench's `isFnAsyncResource` probes each task function by *calling* - // it once during `.add()` to detect whether it returns a Promise. - // In sync mode every task function is a plain (non-async) function, so - // the probe actually executes the benchmarked code (spawning processes, - // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit - // `async` flag on every task skips the probe entirely. - const isAsync = false; - - bench - .add("spawn API", () => { - spawnAPI(); - }, { async: isAsync }) - .add("load snapshot", () => { - loadSnapshot(); - }, { async: isAsync, beforeAll: spawnAPI }) - .add("TS - load project", () => { - tsCreateProgram(); - }, { async: isAsync }) - .add("transfer debug.ts", () => { - getDebugTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer program.ts", () => { - getProgramTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer checker.ts", () => { - getCheckerTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("materialize program.ts", () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) - .add("materialize checker.ts", () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) - .add("getSymbolAtPosition - one location", () => { - api.batch(project.checker.getSymbolAtPosition.gen("program.ts", 8895)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) - .add("TS - getSymbolAtPosition - one location", () => { - tsProgram.getTypeChecker().getSymbolAtLocation( - // @ts-ignore internal API - ts.getTokenAtPosition(tsFile, 8895), - ); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, () => { - api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtPosition.gen("program.ts", node.pos))); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, () => { - const positions = collectIdentifiers(file).map(node => node.pos); - api.batch(project.checker.getSymbolAtPosition.gen("program.ts", positions)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { - api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtLocation.gen(node))); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, () => { - const nodes = collectIdentifiers(file); - api.batch(project.checker.getSymbolAtLocation.gen(nodes)); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { - const checker = tsProgram.getTypeChecker(); - tsFile.forEachChild(function visit(node) { - if (node.kind === ts.SyntaxKind.Identifier) { - checker.getSymbolAtLocation(node); - } - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - let session: inspector.Session | undefined; - if (cpuprofile) { - session = new inspector.Session(); - session.connect(); - session.post("Profiler.enable"); - session.post("Profiler.start"); - } - - bench.runSync(); - teardown(); - - if (session) { - session.post("Profiler.stop", (err, { profile }) => { - if (err) throw err; - const outPath = `bench-${Date.now()}.cpuprofile`; - writeFileSync(outPath, JSON.stringify(profile)); - console.log(`CPU profile written to ${outPath}`); - }); - session.disconnect(); - } - console.table(bench.table()); - - function collectIdentifiers(sourceFile: SourceFile): Node[] { - const nodes: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - nodes.push(node); - } - node.forEachChild(visit); - }); - return nodes; - } - - function spawnAPI() { - api = new API({ - cwd: repoRoot, - }); - } - - function loadSnapshot() { - [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); - project = snapshot.getProjects()[0]; - } - - function tsCreateProgram() { - const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); - const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); - const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); - const host = ts.createCompilerHost(parsedCommandLine.options); - tsProgram = ts.createProgram({ - rootNames: parsedCommandLine.fileNames, - options: parsedCommandLine.options, - host, - }); - } - - function createChecker() { - // checker is created lazily, for measuring symbol time in a loop - // we need to create it first. - api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); - } - - function tsCreateChecker() { - tsProgram.getTypeChecker(); - } - - function getDebugTS() { - file = api.batch(project.program.getSourceFile.gen("debug.ts"))[0]!; - } - - function getProgramTS() { - file = api.batch(project.program.getSourceFile.gen("program.ts"))[0]!; - } - - function tsGetProgramTS() { - tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; - } - - function getCheckerTS() { - file = api.batch(project.program.getSourceFile.gen("checker.ts"))[0]!; - } - - function clearSourceFileCache() { - api.clearSourceFileCache(); - } - - function teardown() { - api?.close(); - api = undefined!; - snapshot = undefined!; - project = undefined!; - file = undefined!; - tsProgram = undefined!; - tsFile = undefined!; - } - - function all(...fns: (() => void)[]) { - return () => { - for (const fn of fns) { - fn(); - } - }; - } -} +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: test/async/api.bench.ts +// Regenerate: npm run generate (from packages/typescript) +// +import { + type Node, + type SourceFile, + SyntaxKind, +} from "@typescript/typescript/unstable/ast"; +import { + API, + type Project, + type Snapshot, +} from "@typescript/typescript/unstable/sync"; +import { writeFileSync } from "node:fs"; +import inspector from "node:inspector"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import ts from "typescript"; +import { RemoteSourceFile } from "../../src/api/node/node.ts"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + singleIteration: { type: "boolean", default: false }, + cpuprofile: { type: "boolean", default: false }, + }, + }); + runBenchmarks(values); +} + +export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { + const { filter, singleIteration, cpuprofile } = options ?? {}; + const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); + + const bench = new Bench({ + name: "Generator API", + teardown, + // Reduce iterations from the default 64 to 10. Slow tasks + // are dominated by the iteration minimum, not the time limit. + // 10 iterations still gives stable medians while cutting total + // bench time by ~5x. + iterations: 10, + warmupIterations: 4, + ...singleIteration ? { + iterations: 1, + warmup: false, + time: 0, + } : undefined, + }); + + let api: API; + let snapshot: Snapshot; + let project: Project; + let tsProgram: ts.Program; + let file: SourceFile; + let tsFile: ts.SourceFile; + + const programIdentifierCount = (() => { + spawnAPI(); + loadSnapshot(); + getProgramTS(); + let count = 0; + file!.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + count++; + } + node.forEachChild(visit); + }); + teardown(); + return count; + })(); + + // Tinybench's `isFnAsyncResource` probes each task function by *calling* + // it once during `.add()` to detect whether it returns a Promise. + // In sync mode every task function is a plain (non-async) function, so + // the probe actually executes the benchmarked code (spawning processes, + // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit + // `async` flag on every task skips the probe entirely. + const isAsync = false; + + bench + .add("spawn API", () => { + spawnAPI(); + }, { async: isAsync }) + .add("load snapshot", () => { + loadSnapshot(); + }, { async: isAsync, beforeAll: spawnAPI }) + .add("TS - load project", () => { + tsCreateProgram(); + }, { async: isAsync }) + .add("transfer debug.ts", () => { + getDebugTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer program.ts", () => { + getProgramTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer checker.ts", () => { + getCheckerTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("materialize program.ts", () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) + .add("materialize checker.ts", () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) + .add("getSymbolAtPosition - one location", () => { + api.batch(project.checker.getSymbolAtPosition.gen("program.ts", 8895)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) + .add("TS - getSymbolAtPosition - one location", () => { + tsProgram.getTypeChecker().getSymbolAtLocation( + // @ts-ignore internal API + ts.getTokenAtPosition(tsFile, 8895), + ); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, () => { + api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtPosition.gen("program.ts", node.pos))); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, () => { + const positions = collectIdentifiers(file).map(node => node.pos); + api.batch(project.checker.getSymbolAtPosition.gen("program.ts", positions)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { + api.batch(...collectIdentifiers(file).map(node => project.checker.getSymbolAtLocation.gen(node))); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, () => { + const nodes = collectIdentifiers(file); + api.batch(project.checker.getSymbolAtLocation.gen(nodes)); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { + const checker = tsProgram.getTypeChecker(); + tsFile.forEachChild(function visit(node) { + if (node.kind === ts.SyntaxKind.Identifier) { + checker.getSymbolAtLocation(node); + } + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + let session: inspector.Session | undefined; + if (cpuprofile) { + session = new inspector.Session(); + session.connect(); + session.post("Profiler.enable"); + session.post("Profiler.start"); + } + + bench.runSync(); + teardown(); + + if (session) { + session.post("Profiler.stop", (err, { profile }) => { + if (err) throw err; + const outPath = `bench-${Date.now()}.cpuprofile`; + writeFileSync(outPath, JSON.stringify(profile)); + console.log(`CPU profile written to ${outPath}`); + }); + session.disconnect(); + } + console.table(bench.table()); + + function collectIdentifiers(sourceFile: SourceFile): Node[] { + const nodes: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + nodes.push(node); + } + node.forEachChild(visit); + }); + return nodes; + } + + function spawnAPI() { + api = new API({ + cwd: repoRoot, + }); + } + + function loadSnapshot() { + [snapshot] = api.batch(api.createSnapshot.gen({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" })); + project = snapshot.getProjects()[0]; + } + + function tsCreateProgram() { + const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); + const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); + const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); + const host = ts.createCompilerHost(parsedCommandLine.options); + tsProgram = ts.createProgram({ + rootNames: parsedCommandLine.fileNames, + options: parsedCommandLine.options, + host, + }); + } + + function createChecker() { + // checker is created lazily, for measuring symbol time in a loop + // we need to create it first. + api.batch(project.checker.getSymbolAtPosition.gen("core.ts", 0)); + } + + function tsCreateChecker() { + tsProgram.getTypeChecker(); + } + + function getDebugTS() { + file = api.batch(project.program.getSourceFile.gen("debug.ts"))[0]!; + } + + function getProgramTS() { + file = api.batch(project.program.getSourceFile.gen("program.ts"))[0]!; + } + + function tsGetProgramTS() { + tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; + } + + function getCheckerTS() { + file = api.batch(project.program.getSourceFile.gen("checker.ts"))[0]!; + } + + function clearSourceFileCache() { + api.clearSourceFileCache(); + } + + function teardown() { + api?.close(); + api = undefined!; + snapshot = undefined!; + project = undefined!; + file = undefined!; + tsProgram = undefined!; + tsFile = undefined!; + } + + function all(...fns: (() => void)[]) { + return () => { + for (const fn of fns) { + fn(); + } + }; + } +} diff --git a/packages/typescript/test/nodelist.bench.ts b/packages/typescript/test/nodelist.bench.ts index 42deb22bf23fc..d5fb38fefb304 100644 --- a/packages/typescript/test/nodelist.bench.ts +++ b/packages/typescript/test/nodelist.bench.ts @@ -1,168 +1,168 @@ -// Micro-benchmark for RemoteNodeList access patterns. -// -// Focuses on the cost of the element accessors (`list[i]`), the `.at()` -// method, and the inherited Array iteration methods (map/forEach/reduce), -// all of which walk the encoded linked list of children. -// -// Run with: -// npm run node -- test/nodelist.bench.ts -// npm run node -- test/nodelist.bench.ts --filter map - -import { - type Expression, - type SourceFile, - type Statement, - SyntaxKind, - TokenFlags, -} from "@typescript/typescript/unstable/ast"; -import { - createArrayLiteralExpression, - createExpressionStatement, - createNumericLiteral, - createSourceFile, - createToken, -} from "@typescript/typescript/unstable/ast/factory"; -import { - CaseSensitivity, - pathKey, - toRootedFilePath, -} from "@typescript/typescript/unstable/path"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import { encodeSourceFile } from "../src/api/node/encoder.ts"; -import type { RemoteNodeList } from "../src/api/node/node.generated.ts"; -import { RemoteSourceFile } from "../src/api/node/node.ts"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - size: { type: "string", default: "500" }, - }, - }); - runBenchmarks(values); -} - -function makeSourceFileWithLargeList(elementCount: number): Uint8Array { - const elements: Expression[] = []; - let text = "["; - for (let i = 0; i < elementCount; i++) { - elements.push(createNumericLiteral(String(i), TokenFlags.None)); - text += (i === 0 ? "" : ",") + i; - } - text += "]"; - const array = createArrayLiteralExpression(elements); - const stmt: Statement = createExpressionStatement(array); - const eof = createToken(SyntaxKind.EndOfFile); - const fileName = toRootedFilePath("/bench.ts", undefined); - const sf: SourceFile = createSourceFile( - [stmt], - eof, - text, - fileName, - pathKey(fileName, CaseSensitivity.Sensitive), - ); - return encodeSourceFile(sf); -} - -function getElementsList(data: Uint8Array): RemoteNodeList { - const sf = new RemoteSourceFile(data, new TextDecoder()); - const stmt = (sf.statements as any).at(0); - return stmt.expression.elements as RemoteNodeList; -} - -export function runBenchmarks(options?: { filter?: string; size?: string; }): void { - const { filter, size } = options ?? {}; - const elementCount = size ? parseInt(size, 10) : 500; - - const encoded = makeSourceFileWithLargeList(elementCount); - - // Sanity check that access works and produces the expected length. - { - const list = getElementsList(encoded); - if (list.length !== elementCount) { - throw new Error(`Expected ${elementCount} elements, got ${list.length}`); - } - } - - const bench = new Bench({ - name: `RemoteNodeList (${elementCount} elements)`, - iterations: 30, - warmupIterations: 10, - }); - - // Each task re-decodes the source file so node materialization caching - // inside `sourceFile.nodes` does not carry over between iterations, which - // would otherwise mask the cost of walking the list. - bench - .add("index access (list[i])", () => { - const list = getElementsList(encoded); - let sum = 0; - for (let i = 0; i < list.length; i++) { - sum += list[i].pos; - } - if (sum < 0) throw new Error("unreachable"); - }) - .add("at(i)", () => { - const list = getElementsList(encoded); - let sum = 0; - for (let i = 0; i < list.length; i++) { - sum += list.at(i)!.pos; - } - if (sum < 0) throw new Error("unreachable"); - }) - .add("for..of (iterator)", () => { - const list = getElementsList(encoded); - let sum = 0; - for (const node of list) { - sum += node.pos; - } - if (sum < 0) throw new Error("unreachable"); - }) - .add("map", () => { - const list = getElementsList(encoded); - const positions = list.map(node => node.pos); - if (positions.length < 0) throw new Error("unreachable"); - }) - .add("filter", () => { - const list = getElementsList(encoded); - const filtered = list.filter(node => node.pos >= 0); - if (filtered.length < 0) throw new Error("unreachable"); - }) - .add("forEach", () => { - const list = getElementsList(encoded); - let sum = 0; - list.forEach(node => { - sum += node.pos; - }); - if (sum < 0) throw new Error("unreachable"); - }) - .add("reduce", () => { - const list = getElementsList(encoded); - const sum = list.reduce((acc, node) => acc + node.pos, 0); - if (sum < 0) throw new Error("unreachable"); - }) - .add("forEachNode", () => { - const list = getElementsList(encoded); - let sum = 0; - list.forEachNode(node => { - sum += node.pos; - return undefined; - }); - if (sum < 0) throw new Error("unreachable"); - }); - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - bench.runSync(); - console.table(bench.table()); -} +// Micro-benchmark for RemoteNodeList access patterns. +// +// Focuses on the cost of the element accessors (`list[i]`), the `.at()` +// method, and the inherited Array iteration methods (map/forEach/reduce), +// all of which walk the encoded linked list of children. +// +// Run with: +// npm run node -- test/nodelist.bench.ts +// npm run node -- test/nodelist.bench.ts --filter map + +import { + type Expression, + type SourceFile, + type Statement, + SyntaxKind, + TokenFlags, +} from "@typescript/typescript/unstable/ast"; +import { + createArrayLiteralExpression, + createExpressionStatement, + createNumericLiteral, + createSourceFile, + createToken, +} from "@typescript/typescript/unstable/ast/factory"; +import { + CaseSensitivity, + pathKey, + toRootedFilePath, +} from "@typescript/typescript/unstable/path"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import { encodeSourceFile } from "../src/api/node/encoder.ts"; +import type { RemoteNodeList } from "../src/api/node/node.generated.ts"; +import { RemoteSourceFile } from "../src/api/node/node.ts"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + size: { type: "string", default: "500" }, + }, + }); + runBenchmarks(values); +} + +function makeSourceFileWithLargeList(elementCount: number): Uint8Array { + const elements: Expression[] = []; + let text = "["; + for (let i = 0; i < elementCount; i++) { + elements.push(createNumericLiteral(String(i), TokenFlags.None)); + text += (i === 0 ? "" : ",") + i; + } + text += "]"; + const array = createArrayLiteralExpression(elements); + const stmt: Statement = createExpressionStatement(array); + const eof = createToken(SyntaxKind.EndOfFile); + const fileName = toRootedFilePath("/bench.ts", undefined); + const sf: SourceFile = createSourceFile( + [stmt], + eof, + text, + fileName, + pathKey(fileName, CaseSensitivity.Sensitive), + ); + return encodeSourceFile(sf); +} + +function getElementsList(data: Uint8Array): RemoteNodeList { + const sf = new RemoteSourceFile(data, new TextDecoder()); + const stmt = (sf.statements as any).at(0); + return stmt.expression.elements as RemoteNodeList; +} + +export function runBenchmarks(options?: { filter?: string; size?: string; }): void { + const { filter, size } = options ?? {}; + const elementCount = size ? parseInt(size, 10) : 500; + + const encoded = makeSourceFileWithLargeList(elementCount); + + // Sanity check that access works and produces the expected length. + { + const list = getElementsList(encoded); + if (list.length !== elementCount) { + throw new Error(`Expected ${elementCount} elements, got ${list.length}`); + } + } + + const bench = new Bench({ + name: `RemoteNodeList (${elementCount} elements)`, + iterations: 30, + warmupIterations: 10, + }); + + // Each task re-decodes the source file so node materialization caching + // inside `sourceFile.nodes` does not carry over between iterations, which + // would otherwise mask the cost of walking the list. + bench + .add("index access (list[i])", () => { + const list = getElementsList(encoded); + let sum = 0; + for (let i = 0; i < list.length; i++) { + sum += list[i].pos; + } + if (sum < 0) throw new Error("unreachable"); + }) + .add("at(i)", () => { + const list = getElementsList(encoded); + let sum = 0; + for (let i = 0; i < list.length; i++) { + sum += list.at(i)!.pos; + } + if (sum < 0) throw new Error("unreachable"); + }) + .add("for..of (iterator)", () => { + const list = getElementsList(encoded); + let sum = 0; + for (const node of list) { + sum += node.pos; + } + if (sum < 0) throw new Error("unreachable"); + }) + .add("map", () => { + const list = getElementsList(encoded); + const positions = list.map(node => node.pos); + if (positions.length < 0) throw new Error("unreachable"); + }) + .add("filter", () => { + const list = getElementsList(encoded); + const filtered = list.filter(node => node.pos >= 0); + if (filtered.length < 0) throw new Error("unreachable"); + }) + .add("forEach", () => { + const list = getElementsList(encoded); + let sum = 0; + list.forEach(node => { + sum += node.pos; + }); + if (sum < 0) throw new Error("unreachable"); + }) + .add("reduce", () => { + const list = getElementsList(encoded); + const sum = list.reduce((acc, node) => acc + node.pos, 0); + if (sum < 0) throw new Error("unreachable"); + }) + .add("forEachNode", () => { + const list = getElementsList(encoded); + let sum = 0; + list.forEachNode(node => { + sum += node.pos; + return undefined; + }); + if (sum < 0) throw new Error("unreachable"); + }); + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + bench.runSync(); + console.table(bench.table()); +} diff --git a/packages/typescript/test/path.test.ts b/packages/typescript/test/path.test.ts index 33f095077419c..6884ba176bcbf 100644 --- a/packages/typescript/test/path.test.ts +++ b/packages/typescript/test/path.test.ts @@ -1,349 +1,349 @@ -import { - canonicalize, - CaseSensitivity, - isCaseInsensitive, - isCaseSensitive, - type PathKey, - pathKey, - type RootedDirectoryPath, - rootedDirectoryPathFromPath, - type RootedFilePath, - rootedFilePathFromPath, - type RootedPath, - toRootedDirectoryPath, - toRootedFilePath, - toRootedPath, - tryPathKeyFromCanonical, - tryRootedPathFromNormalized, -} from "@typescript/typescript/unstable/path"; -import assert from "node:assert"; -import { test } from "node:test"; -import { parseNodeHandleFromCompiler } from "../src/api/node/node.ts"; -import { - documentURIToFileName, - fileNameToDocumentURI, - getRootLength, -} from "../src/api/path.ts"; -import { createVirtualFileSystem } from "./testUtils.ts"; - -type IsAssignable = [From] extends [To] ? true : false; -type Assert = T; -type AssertFalse = T; - -type _RootedFilePathIsRootedPath = Assert>; -type _RootedDirectoryPathIsRootedPath = Assert>; -type _RootedPathIsNotRootedFilePath = AssertFalse>; -type _RootedPathIsNotRootedDirectoryPath = AssertFalse>; -type _RootedFilePathIsNotRootedDirectoryPath = AssertFalse>; -type _RootedDirectoryPathIsNotRootedFilePath = AssertFalse>; -type _RootedPathIsNotPathKey = AssertFalse>; -type _PathKeyIsNotRootedPath = AssertFalse>; -type _PathKeyIsNotRootedFilePath = AssertFalse>; -type _PathKeyIsNotRootedDirectoryPath = AssertFalse>; - -test("path keys are constructed from rooted paths", () => { - const workspace = toRootedDirectoryPath("/workspace", undefined); - assert.strictEqual(pathKey(toRootedPath("src/file.ts", workspace), CaseSensitivity.Sensitive), "/workspace/src/file.ts"); - assert.strictEqual(pathKey(toRootedPath("SRC/file.ts", workspace), CaseSensitivity.Insensitive), "/workspace/src/file.ts"); - assert.strictEqual(pathKey(toRootedPath("^/untitled/file.ts", undefined), CaseSensitivity.Sensitive), "^/untitled/file.ts"); - assert.throws(() => toRootedPath("src/file.ts", undefined), /Path is not rooted/); - const upperDynamic = tryRootedPathFromNormalized(documentURIToFileName("custom:~ts-uri-escape~Foo.ts")); - const lowerDynamic = tryRootedPathFromNormalized(documentURIToFileName("custom:~ts-uri-escape~foo.ts")); - assert.ok(upperDynamic); - assert.ok(lowerDynamic); - assert.notStrictEqual( - pathKey(upperDynamic, CaseSensitivity.Insensitive), - pathKey(lowerDynamic, CaseSensitivity.Insensitive), - ); - const dynamicRoot = "^/~ts-uri~/custom/authority"; - assert.strictEqual(getRootLength(dynamicRoot), dynamicRoot.length); - assert.strictEqual( - pathKey(dynamicRoot as RootedPath, CaseSensitivity.Insensitive), - pathKey((dynamicRoot + "/") as RootedPath, CaseSensitivity.Insensitive), - ); -}); - -test("tryRootedPathFromNormalized validates without transforming", () => { - for ( - const path of [ - "/workspace/src/file.ts", - "c:/", - "//server/", - "file://server/", - "^/", - "^/untitled/file.ts", - ] - ) { - assert.strictEqual(tryRootedPathFromNormalized(path), path); - } - for ( - const path of [ - "", - "src/file.ts", - "/workspace/../src/file.ts", - "/workspace/", - String.raw`/workspace\src\file.ts`, - "/workspace//src/file.ts", - "c:", - "//server", - "file://server", - ] - ) { - assert.strictEqual(tryRootedPathFromNormalized(path), undefined); - } -}); - -test("local file URL roots are identified case-insensitively", () => { - assert.strictEqual(toRootedPath("FILE:///C:/../x.ts", undefined), "FILE:///C:/x.ts"); - assert.strictEqual( - toRootedPath("file://LOCALHOST/C%3A/../x.ts", undefined), - "file://LOCALHOST/C%3A/x.ts", - ); -}); - -test("non-file URIs round-trip through normalized file names", () => { - assert.strictEqual( - documentURIToFileName(String.raw`custom:folder/../~ts-uri~/café\file.ts`), - "^/~ts-uri~/custom/ts-nul-authority/folder/~ts-uri-escape~2e2e~/~ts-uri~/~ts-uri-escape~636166c3a95c66696c65~.ts", - ); - assert.strictEqual( - documentURIToFileName("custom:.git/file.ts"), - "^/~ts-uri~/custom/ts-nul-authority/.git/file.ts", - ); - assert.strictEqual( - documentURIToFileName("custom:~ts-uri-escape~dir.js/file.ts?x=1"), - "^/~ts-uri~/custom/ts-nul-authority/~ts-uri-escape~7e74732d7572692d6573636170657e6469722e6a73~/~ts-uri-escape~66696c65003f783d31~.ts", - ); - assert.strictEqual( - documentURIToFileName("custom:c:/dir/file.ts?x=1").substring( - 0, - documentURIToFileName("custom:c:/dir/file.ts?x=1").lastIndexOf("/"), - ), - documentURIToFileName("custom:c:/dir/other.ts").substring( - 0, - documentURIToFileName("custom:c:/dir/other.ts").lastIndexOf("/"), - ), - ); - - for ( - const uri of [ - "untitled:folder/../file.ts", - "vscode-vfs://github/path//file.ts", - "custom:/path/./file.ts/", - "custom:", - "custom:///path", - "custom://authority", - "custom://authority/", - "custom:path/file.ts?rev=a/b#frag/c", - "custom://authority/path/file.ts#frag/a", - String.raw`custom:path\file.ts`, - "custom:.git/file.ts", - "custom:..hidden/file.ts", - "custom://~ts-uri~/path", - "custom://ts-nul-authority/path", - "custom:~ts-uri-escape~file.ts", - "custom:~ts-uri-escape~no-path", - "custom://authority/~ts-uri-no-path~~", - "custom:~ts-uri-spec~666f6f~/file.ts?x=1", - String.raw`custom:folder/../~ts-uri~/café\file.ts`, - "custom:name.ts\\", - "custom:name..ts", - ] - ) { - const fileName = documentURIToFileName(uri); - assert.strictEqual(tryRootedPathFromNormalized(fileName), fileName); - assert.strictEqual(fileNameToDocumentURI(fileName), uri); - } - - for ( - const uri of [ - String.raw`custom:path\file.ts`, - "custom:~ts-uri~file.ts", - "custom:~ts-uri-escape~file.ts", - ] - ) { - assert.strictEqual(documentURIToFileName(uri).endsWith(".ts"), true); - } - for (const extension of [".d.ts", ".d.mts", ".d.css.ts"]) { - assert.strictEqual( - documentURIToFileName("custom:~ts-uri-escape~types" + extension).endsWith(extension), - true, - ); - } - - const exceptionalSibling = documentURIToFileName(String.raw`custom:folder/main\file.ts`); - const ordinarySibling = documentURIToFileName("custom:folder/dep.ts"); - assert.strictEqual( - exceptionalSibling.substring(0, exceptionalSibling.lastIndexOf("/")), - ordinarySibling.substring(0, ordinarySibling.lastIndexOf("/")), - ); - const queryFile = documentURIToFileName("custom:path/file.ts?rev=a/b"); - assert.strictEqual(queryFile.endsWith(".ts"), true); - assert.strictEqual( - queryFile.substring(0, queryFile.lastIndexOf("/")), - documentURIToFileName("custom:path/other.ts").substring( - 0, - documentURIToFileName("custom:path/other.ts").lastIndexOf("/"), - ), - ); - assert.strictEqual( - fileNameToDocumentURI("^/custom/ts-nul-authority/~ts-uri-escape~666f6f~.ts"), - "custom:~ts-uri-escape~666f6f~.ts", - ); - assert.strictEqual( - fileNameToDocumentURI("^/~ts-uri~/custom/ts-nul-authority/~ts-uri-escape~ff~"), - "custom:~ts-uri-escape~ff~", - ); - assert.notStrictEqual( - documentURIToFileName("custom:name.ts\\"), - documentURIToFileName("custom:name..ts"), - ); -}); - -test("CaseSensitivity exposes explicit checks", () => { - assert.strictEqual(canonicalize("SRC/file.ts", CaseSensitivity.Sensitive), "SRC/file.ts"); - assert.strictEqual(canonicalize("SRC/file.ts", CaseSensitivity.Insensitive), "src/file.ts"); - assert.strictEqual(canonicalize("/repo/\u0130project/file.ts", CaseSensitivity.Insensitive), "/repo/\u0130project/file.ts"); - assert.strictEqual(canonicalize("/repo/\u212A/file.ts", CaseSensitivity.Insensitive), "/repo/k/file.ts"); - assert.strictEqual(canonicalize("/repo/\u039F\u03A3.ts", CaseSensitivity.Insensitive), "/repo/\u03BF\u03C3.ts"); - assert.strictEqual(isCaseSensitive(CaseSensitivity.Sensitive), true); - assert.strictEqual(isCaseSensitive(CaseSensitivity.Insensitive), false); - assert.strictEqual(isCaseInsensitive(CaseSensitivity.Insensitive), true); - assert.strictEqual(isCaseInsensitive(CaseSensitivity.Sensitive), false); -}); - -test("rooted path constructors enforce the type lattice", () => { - const workspace = toRootedDirectoryPath("/workspace", undefined); - const rootedPath = toRootedPath("src/file.ts", workspace); - const filePath = toRootedFilePath("src/file.ts", workspace); - const directoryPath = toRootedDirectoryPath("src", workspace); - - assert.strictEqual(rootedPath, "/workspace/src/file.ts"); - assert.strictEqual(filePath, rootedPath); - assert.strictEqual(directoryPath, "/workspace/src"); - assert.strictEqual(rootedFilePathFromPath(rootedPath), rootedPath); - assert.strictEqual(rootedDirectoryPathFromPath(rootedPath), rootedPath); - assert.strictEqual(pathKey(filePath, CaseSensitivity.Sensitive), filePath); - assert.strictEqual(toRootedFilePath("^/untitled/file.ts", undefined), "^/untitled/file.ts"); - assert.strictEqual(toRootedFilePath("^/untitled/file.ts", workspace), "^/untitled/file.ts"); - assert.throws(() => toRootedPath("", workspace), /must not be empty/); - assert.throws(() => toRootedFilePath("", workspace), /must not be empty/); - assert.throws(() => toRootedDirectoryPath("", workspace), /must not be empty/); - assert.throws(() => toRootedFilePath("src/file.ts", undefined), /Path is not rooted/); - for ( - const [input, expected] of [ - ["c:", "c:/"], - ["//server", "//server/"], - ["file://server", "file://server/"], - ["^/~ts-uri~/custom/ts-nul-authority", "^/~ts-uri~/custom/ts-nul-authority/"], - ["^/~ts-uri~/custom/authority?query", "^/~ts-uri~/custom/authority?query/"], - ] as const - ) { - assert.strictEqual(toRootedPath(input, undefined), expected); - assert.strictEqual(toRootedFilePath(input, undefined), expected); - assert.strictEqual(toRootedDirectoryPath(input, undefined), expected); - assert.strictEqual(tryRootedPathFromNormalized(input), undefined); - assert.strictEqual(tryRootedPathFromNormalized(expected), expected); - } - for ( - const input of [ - "http://server?query#fragment", - "http://server?x/../y", - "file:///c:?query/path", - "http://server/?query/", - ] - ) { - assert.throws(() => toRootedPath(input, undefined), /must not contain a URL query or fragment/); - assert.strictEqual(tryRootedPathFromNormalized(input), undefined); - } - const diskWithSchemeText = toRootedPath("/a://b?x/../y", undefined); - assert.strictEqual(diskWithSchemeText, "/a:/y"); - assert.strictEqual(tryRootedPathFromNormalized(diskWithSchemeText), diskWithSchemeText); - const urlDirectory = toRootedDirectoryPath("http://server/base", undefined); - assert.throws(() => toRootedPath("file.ts?query", urlDirectory), /query or fragment|Path is not rooted/); - assert.throws(() => toRootedPath("file.ts?query/..", urlDirectory), /must not contain a query or fragment/); -}); - -test("parseNodeHandleFromCompiler validates serialized fields", () => { - assert.deepStrictEqual(parseNodeHandleFromCompiler("12.80./workspace/src/file.ts"), { - index: 12, - kind: 80, - path: "/workspace/src/file.ts", - }); - - for ( - const handle of [ - "x.80./workspace/src/file.ts", - "12.x./workspace/src/file.ts", - "12.80.", - "12.80./workspace/../src/file.ts", - ] - ) { - assert.throws(() => parseNodeHandleFromCompiler(handle), /Invalid node handle/); - } -}); - -test("tryPathKeyFromCanonical preserves producer canonicalization", () => { - assert.strictEqual(tryPathKeyFromCanonical("/Workspace/src/File.ts"), "/Workspace/src/File.ts"); - assert.strictEqual(tryPathKeyFromCanonical("/workspace/../src/file.ts"), undefined); -}); - -test("createVirtualFileSystem normalizes raw input keys once", () => { - const fs = createVirtualFileSystem({ - "/workspace/src/../file.ts": "content", - }); - assert.strictEqual(fs.readFile(toRootedFilePath("/workspace/file.ts", undefined)), "content"); - assert.throws(() => createVirtualFileSystem({ "workspace/file.ts": "content" }), /Path is not rooted/); -}); - -test("createVirtualFileSystem supports object prototype path components", () => { - const fs = createVirtualFileSystem({ - "/toString/file.ts": "toString", - "/__proto__/constructor.ts": "constructor", - }); - assert.strictEqual(fs.readFile(toRootedFilePath("/toString/file.ts", undefined)), "toString"); - assert.strictEqual(fs.readFile(toRootedFilePath("/__proto__/constructor.ts", undefined)), "constructor"); -}); - -test("createVirtualFileSystem respects case sensitivity", () => { - const fs = createVirtualFileSystem({ - "/Workspace/Foo.ts": "content", - }, { caseSensitivity: CaseSensitivity.Insensitive }); - assert.strictEqual(fs.readFile(toRootedFilePath("/workspace/foo.ts", undefined)), "content"); - assert.deepStrictEqual(fs.getAccessibleEntries(toRootedDirectoryPath("/workspace", undefined)), { - files: ["Foo.ts"], - directories: [], - symlinks: undefined, - }); -}); - -test("non-file document URIs preserve structured identity", () => { - const uris = [ - "untitled:folder/../file.ts", - "vscode-vfs://github/path//file.ts", - "custom:/path/./file.ts/", - "custom:", - "custom:///path", - "custom://authority", - "custom://authority/", - "custom:path/file.ts?rev=a/b#frag/c", - "custom://authority/path/file.ts#frag/a", - String.raw`custom:path\file.ts`, - "custom:.git/file.ts", - "custom:..hidden/file.ts", - "custom://~ts-uri~/path", - "custom://ts-nul-authority/path", - "custom:~ts-uri-escape~file.ts", - "custom://authority/~ts-uri-no-path~~", - ]; - - for (const uri of uris) { - assert.strictEqual(fileNameToDocumentURI(documentURIToFileName(uri)), uri); - } - - assert.ok(getRootLength(documentURIToFileName("custom://authority/path")) > 2); - assert.notStrictEqual( - documentURIToFileName("custom:name.ts\\"), - documentURIToFileName("custom:name..ts"), - ); -}); +import { + canonicalize, + CaseSensitivity, + isCaseInsensitive, + isCaseSensitive, + type PathKey, + pathKey, + type RootedDirectoryPath, + rootedDirectoryPathFromPath, + type RootedFilePath, + rootedFilePathFromPath, + type RootedPath, + toRootedDirectoryPath, + toRootedFilePath, + toRootedPath, + tryPathKeyFromCanonical, + tryRootedPathFromNormalized, +} from "@typescript/typescript/unstable/path"; +import assert from "node:assert"; +import { test } from "node:test"; +import { parseNodeHandleFromCompiler } from "../src/api/node/node.ts"; +import { + documentURIToFileName, + fileNameToDocumentURI, + getRootLength, +} from "../src/api/path.ts"; +import { createVirtualFileSystem } from "./testUtils.ts"; + +type IsAssignable = [From] extends [To] ? true : false; +type Assert = T; +type AssertFalse = T; + +type _RootedFilePathIsRootedPath = Assert>; +type _RootedDirectoryPathIsRootedPath = Assert>; +type _RootedPathIsNotRootedFilePath = AssertFalse>; +type _RootedPathIsNotRootedDirectoryPath = AssertFalse>; +type _RootedFilePathIsNotRootedDirectoryPath = AssertFalse>; +type _RootedDirectoryPathIsNotRootedFilePath = AssertFalse>; +type _RootedPathIsNotPathKey = AssertFalse>; +type _PathKeyIsNotRootedPath = AssertFalse>; +type _PathKeyIsNotRootedFilePath = AssertFalse>; +type _PathKeyIsNotRootedDirectoryPath = AssertFalse>; + +test("path keys are constructed from rooted paths", () => { + const workspace = toRootedDirectoryPath("/workspace", undefined); + assert.strictEqual(pathKey(toRootedPath("src/file.ts", workspace), CaseSensitivity.Sensitive), "/workspace/src/file.ts"); + assert.strictEqual(pathKey(toRootedPath("SRC/file.ts", workspace), CaseSensitivity.Insensitive), "/workspace/src/file.ts"); + assert.strictEqual(pathKey(toRootedPath("^/untitled/file.ts", undefined), CaseSensitivity.Sensitive), "^/untitled/file.ts"); + assert.throws(() => toRootedPath("src/file.ts", undefined), /Path is not rooted/); + const upperDynamic = tryRootedPathFromNormalized(documentURIToFileName("custom:~ts-uri-escape~Foo.ts")); + const lowerDynamic = tryRootedPathFromNormalized(documentURIToFileName("custom:~ts-uri-escape~foo.ts")); + assert.ok(upperDynamic); + assert.ok(lowerDynamic); + assert.notStrictEqual( + pathKey(upperDynamic, CaseSensitivity.Insensitive), + pathKey(lowerDynamic, CaseSensitivity.Insensitive), + ); + const dynamicRoot = "^/~ts-uri~/custom/authority"; + assert.strictEqual(getRootLength(dynamicRoot), dynamicRoot.length); + assert.strictEqual( + pathKey(dynamicRoot as RootedPath, CaseSensitivity.Insensitive), + pathKey((dynamicRoot + "/") as RootedPath, CaseSensitivity.Insensitive), + ); +}); + +test("tryRootedPathFromNormalized validates without transforming", () => { + for ( + const path of [ + "/workspace/src/file.ts", + "c:/", + "//server/", + "file://server/", + "^/", + "^/untitled/file.ts", + ] + ) { + assert.strictEqual(tryRootedPathFromNormalized(path), path); + } + for ( + const path of [ + "", + "src/file.ts", + "/workspace/../src/file.ts", + "/workspace/", + String.raw`/workspace\src\file.ts`, + "/workspace//src/file.ts", + "c:", + "//server", + "file://server", + ] + ) { + assert.strictEqual(tryRootedPathFromNormalized(path), undefined); + } +}); + +test("local file URL roots are identified case-insensitively", () => { + assert.strictEqual(toRootedPath("FILE:///C:/../x.ts", undefined), "FILE:///C:/x.ts"); + assert.strictEqual( + toRootedPath("file://LOCALHOST/C%3A/../x.ts", undefined), + "file://LOCALHOST/C%3A/x.ts", + ); +}); + +test("non-file URIs round-trip through normalized file names", () => { + assert.strictEqual( + documentURIToFileName(String.raw`custom:folder/../~ts-uri~/café\file.ts`), + "^/~ts-uri~/custom/ts-nul-authority/folder/~ts-uri-escape~2e2e~/~ts-uri~/~ts-uri-escape~636166c3a95c66696c65~.ts", + ); + assert.strictEqual( + documentURIToFileName("custom:.git/file.ts"), + "^/~ts-uri~/custom/ts-nul-authority/.git/file.ts", + ); + assert.strictEqual( + documentURIToFileName("custom:~ts-uri-escape~dir.js/file.ts?x=1"), + "^/~ts-uri~/custom/ts-nul-authority/~ts-uri-escape~7e74732d7572692d6573636170657e6469722e6a73~/~ts-uri-escape~66696c65003f783d31~.ts", + ); + assert.strictEqual( + documentURIToFileName("custom:c:/dir/file.ts?x=1").substring( + 0, + documentURIToFileName("custom:c:/dir/file.ts?x=1").lastIndexOf("/"), + ), + documentURIToFileName("custom:c:/dir/other.ts").substring( + 0, + documentURIToFileName("custom:c:/dir/other.ts").lastIndexOf("/"), + ), + ); + + for ( + const uri of [ + "untitled:folder/../file.ts", + "vscode-vfs://github/path//file.ts", + "custom:/path/./file.ts/", + "custom:", + "custom:///path", + "custom://authority", + "custom://authority/", + "custom:path/file.ts?rev=a/b#frag/c", + "custom://authority/path/file.ts#frag/a", + String.raw`custom:path\file.ts`, + "custom:.git/file.ts", + "custom:..hidden/file.ts", + "custom://~ts-uri~/path", + "custom://ts-nul-authority/path", + "custom:~ts-uri-escape~file.ts", + "custom:~ts-uri-escape~no-path", + "custom://authority/~ts-uri-no-path~~", + "custom:~ts-uri-spec~666f6f~/file.ts?x=1", + String.raw`custom:folder/../~ts-uri~/café\file.ts`, + "custom:name.ts\\", + "custom:name..ts", + ] + ) { + const fileName = documentURIToFileName(uri); + assert.strictEqual(tryRootedPathFromNormalized(fileName), fileName); + assert.strictEqual(fileNameToDocumentURI(fileName), uri); + } + + for ( + const uri of [ + String.raw`custom:path\file.ts`, + "custom:~ts-uri~file.ts", + "custom:~ts-uri-escape~file.ts", + ] + ) { + assert.strictEqual(documentURIToFileName(uri).endsWith(".ts"), true); + } + for (const extension of [".d.ts", ".d.mts", ".d.css.ts"]) { + assert.strictEqual( + documentURIToFileName("custom:~ts-uri-escape~types" + extension).endsWith(extension), + true, + ); + } + + const exceptionalSibling = documentURIToFileName(String.raw`custom:folder/main\file.ts`); + const ordinarySibling = documentURIToFileName("custom:folder/dep.ts"); + assert.strictEqual( + exceptionalSibling.substring(0, exceptionalSibling.lastIndexOf("/")), + ordinarySibling.substring(0, ordinarySibling.lastIndexOf("/")), + ); + const queryFile = documentURIToFileName("custom:path/file.ts?rev=a/b"); + assert.strictEqual(queryFile.endsWith(".ts"), true); + assert.strictEqual( + queryFile.substring(0, queryFile.lastIndexOf("/")), + documentURIToFileName("custom:path/other.ts").substring( + 0, + documentURIToFileName("custom:path/other.ts").lastIndexOf("/"), + ), + ); + assert.strictEqual( + fileNameToDocumentURI("^/custom/ts-nul-authority/~ts-uri-escape~666f6f~.ts"), + "custom:~ts-uri-escape~666f6f~.ts", + ); + assert.strictEqual( + fileNameToDocumentURI("^/~ts-uri~/custom/ts-nul-authority/~ts-uri-escape~ff~"), + "custom:~ts-uri-escape~ff~", + ); + assert.notStrictEqual( + documentURIToFileName("custom:name.ts\\"), + documentURIToFileName("custom:name..ts"), + ); +}); + +test("CaseSensitivity exposes explicit checks", () => { + assert.strictEqual(canonicalize("SRC/file.ts", CaseSensitivity.Sensitive), "SRC/file.ts"); + assert.strictEqual(canonicalize("SRC/file.ts", CaseSensitivity.Insensitive), "src/file.ts"); + assert.strictEqual(canonicalize("/repo/\u0130project/file.ts", CaseSensitivity.Insensitive), "/repo/\u0130project/file.ts"); + assert.strictEqual(canonicalize("/repo/\u212A/file.ts", CaseSensitivity.Insensitive), "/repo/k/file.ts"); + assert.strictEqual(canonicalize("/repo/\u039F\u03A3.ts", CaseSensitivity.Insensitive), "/repo/\u03BF\u03C3.ts"); + assert.strictEqual(isCaseSensitive(CaseSensitivity.Sensitive), true); + assert.strictEqual(isCaseSensitive(CaseSensitivity.Insensitive), false); + assert.strictEqual(isCaseInsensitive(CaseSensitivity.Insensitive), true); + assert.strictEqual(isCaseInsensitive(CaseSensitivity.Sensitive), false); +}); + +test("rooted path constructors enforce the type lattice", () => { + const workspace = toRootedDirectoryPath("/workspace", undefined); + const rootedPath = toRootedPath("src/file.ts", workspace); + const filePath = toRootedFilePath("src/file.ts", workspace); + const directoryPath = toRootedDirectoryPath("src", workspace); + + assert.strictEqual(rootedPath, "/workspace/src/file.ts"); + assert.strictEqual(filePath, rootedPath); + assert.strictEqual(directoryPath, "/workspace/src"); + assert.strictEqual(rootedFilePathFromPath(rootedPath), rootedPath); + assert.strictEqual(rootedDirectoryPathFromPath(rootedPath), rootedPath); + assert.strictEqual(pathKey(filePath, CaseSensitivity.Sensitive), filePath); + assert.strictEqual(toRootedFilePath("^/untitled/file.ts", undefined), "^/untitled/file.ts"); + assert.strictEqual(toRootedFilePath("^/untitled/file.ts", workspace), "^/untitled/file.ts"); + assert.throws(() => toRootedPath("", workspace), /must not be empty/); + assert.throws(() => toRootedFilePath("", workspace), /must not be empty/); + assert.throws(() => toRootedDirectoryPath("", workspace), /must not be empty/); + assert.throws(() => toRootedFilePath("src/file.ts", undefined), /Path is not rooted/); + for ( + const [input, expected] of [ + ["c:", "c:/"], + ["//server", "//server/"], + ["file://server", "file://server/"], + ["^/~ts-uri~/custom/ts-nul-authority", "^/~ts-uri~/custom/ts-nul-authority/"], + ["^/~ts-uri~/custom/authority?query", "^/~ts-uri~/custom/authority?query/"], + ] as const + ) { + assert.strictEqual(toRootedPath(input, undefined), expected); + assert.strictEqual(toRootedFilePath(input, undefined), expected); + assert.strictEqual(toRootedDirectoryPath(input, undefined), expected); + assert.strictEqual(tryRootedPathFromNormalized(input), undefined); + assert.strictEqual(tryRootedPathFromNormalized(expected), expected); + } + for ( + const input of [ + "http://server?query#fragment", + "http://server?x/../y", + "file:///c:?query/path", + "http://server/?query/", + ] + ) { + assert.throws(() => toRootedPath(input, undefined), /must not contain a URL query or fragment/); + assert.strictEqual(tryRootedPathFromNormalized(input), undefined); + } + const diskWithSchemeText = toRootedPath("/a://b?x/../y", undefined); + assert.strictEqual(diskWithSchemeText, "/a:/y"); + assert.strictEqual(tryRootedPathFromNormalized(diskWithSchemeText), diskWithSchemeText); + const urlDirectory = toRootedDirectoryPath("http://server/base", undefined); + assert.throws(() => toRootedPath("file.ts?query", urlDirectory), /query or fragment|Path is not rooted/); + assert.throws(() => toRootedPath("file.ts?query/..", urlDirectory), /must not contain a query or fragment/); +}); + +test("parseNodeHandleFromCompiler validates serialized fields", () => { + assert.deepStrictEqual(parseNodeHandleFromCompiler("12.80./workspace/src/file.ts"), { + index: 12, + kind: 80, + path: "/workspace/src/file.ts", + }); + + for ( + const handle of [ + "x.80./workspace/src/file.ts", + "12.x./workspace/src/file.ts", + "12.80.", + "12.80./workspace/../src/file.ts", + ] + ) { + assert.throws(() => parseNodeHandleFromCompiler(handle), /Invalid node handle/); + } +}); + +test("tryPathKeyFromCanonical preserves producer canonicalization", () => { + assert.strictEqual(tryPathKeyFromCanonical("/Workspace/src/File.ts"), "/Workspace/src/File.ts"); + assert.strictEqual(tryPathKeyFromCanonical("/workspace/../src/file.ts"), undefined); +}); + +test("createVirtualFileSystem normalizes raw input keys once", () => { + const fs = createVirtualFileSystem({ + "/workspace/src/../file.ts": "content", + }); + assert.strictEqual(fs.readFile(toRootedFilePath("/workspace/file.ts", undefined)), "content"); + assert.throws(() => createVirtualFileSystem({ "workspace/file.ts": "content" }), /Path is not rooted/); +}); + +test("createVirtualFileSystem supports object prototype path components", () => { + const fs = createVirtualFileSystem({ + "/toString/file.ts": "toString", + "/__proto__/constructor.ts": "constructor", + }); + assert.strictEqual(fs.readFile(toRootedFilePath("/toString/file.ts", undefined)), "toString"); + assert.strictEqual(fs.readFile(toRootedFilePath("/__proto__/constructor.ts", undefined)), "constructor"); +}); + +test("createVirtualFileSystem respects case sensitivity", () => { + const fs = createVirtualFileSystem({ + "/Workspace/Foo.ts": "content", + }, { caseSensitivity: CaseSensitivity.Insensitive }); + assert.strictEqual(fs.readFile(toRootedFilePath("/workspace/foo.ts", undefined)), "content"); + assert.deepStrictEqual(fs.getAccessibleEntries(toRootedDirectoryPath("/workspace", undefined)), { + files: ["Foo.ts"], + directories: [], + symlinks: undefined, + }); +}); + +test("non-file document URIs preserve structured identity", () => { + const uris = [ + "untitled:folder/../file.ts", + "vscode-vfs://github/path//file.ts", + "custom:/path/./file.ts/", + "custom:", + "custom:///path", + "custom://authority", + "custom://authority/", + "custom:path/file.ts?rev=a/b#frag/c", + "custom://authority/path/file.ts#frag/a", + String.raw`custom:path\file.ts`, + "custom:.git/file.ts", + "custom:..hidden/file.ts", + "custom://~ts-uri~/path", + "custom://ts-nul-authority/path", + "custom:~ts-uri-escape~file.ts", + "custom://authority/~ts-uri-no-path~~", + ]; + + for (const uri of uris) { + assert.strictEqual(fileNameToDocumentURI(documentURIToFileName(uri)), uri); + } + + assert.ok(getRootLength(documentURIToFileName("custom://authority/path")) > 2); + assert.notStrictEqual( + documentURIToFileName("custom:name.ts\\"), + documentURIToFileName("custom:name..ts"), + ); +}); diff --git a/packages/typescript/test/proto.test.ts b/packages/typescript/test/proto.test.ts index 18bd6d9a3dec7..7767926fcb00c 100644 --- a/packages/typescript/test/proto.test.ts +++ b/packages/typescript/test/proto.test.ts @@ -1,103 +1,103 @@ -import assert from "node:assert"; -import test from "node:test"; -import type { - SymbolOwner as ProtocolSymbolOwner, - SymbolResponse as ProtocolSymbolResponse, -} from "../src/api/proto.generated.ts"; -import { - validateSymbolOwner, - validateSymbolResponse, -} from "../src/api/proto.ts"; -import type { ProjectId } from "../src/api/proto.ts"; -import { SourceFileCache } from "../src/api/sourceFileCache.ts"; -import type { - PathKey, - RootedFilePath, -} from "../src/ast/index.ts"; -import { SymbolOwnerKind } from "../src/enums/symbolOwnerKind.ts"; - -test("symbol ownership protocol validation rejects mixed variants", () => { - const project = "/tsconfig.json" as ProjectId; - const file = { - fileName: "/file.ts" as RootedFilePath, - path: "/file.ts" as PathKey, - contentHash: "0".repeat(32), - parseOptionsKey: "0", - scriptKind: 3, - nodeId: "1", - }; - const fileReference = { kind: SymbolOwnerKind.File, id: 1, file }; - const snapshotOwner = { kind: SymbolOwnerKind.Snapshot, snapshot: 1, project }; - validateSymbolOwner(snapshotOwner); - const response: ProtocolSymbolResponse = { - reference: fileReference, - name: "symbol", - flags: 0, - checkFlags: 0, - }; - validateSymbolResponse(response); - - for ( - const owner of [ - { kind: SymbolOwnerKind.File }, - { kind: SymbolOwnerKind.File, file, snapshot: 1 }, - { kind: SymbolOwnerKind.Snapshot, project: "/tsconfig.json" }, - { kind: SymbolOwnerKind.Snapshot, snapshot: 1 }, - { kind: SymbolOwnerKind.Snapshot, snapshot: 1, project: "/tsconfig.json", file }, - { kind: 99 }, - ] as ProtocolSymbolOwner[] - ) { - assert.throws(() => validateSymbolOwner(owner), /Invalid .*symbol owner|Invalid symbol owner kind/); - } - assert.throws( - () => validateSymbolResponse({ ...response, reference: { kind: SymbolOwnerKind.Snapshot, id: 1, file } as ProtocolSymbolResponse["reference"] }), - /Invalid snapshot symbol owner/, - ); -}); - -test("source file cache resolves references without creating records", () => { - const cache = new SourceFileCache(); - const project = "/tsconfig.json" as ProjectId; - const file = { - fileName: "/file.ts" as RootedFilePath, - path: "/file.ts" as PathKey, - contentHash: "0".repeat(32), - parseOptionsKey: "0", - scriptKind: 3, - nodeId: "7", - }; - assert.strictEqual(cache.findRecord("7"), undefined); - assert.equal(cache.size, 0); - - const record = cache.getOrCreateRecord(file, 1, project); - assert.strictEqual(cache.findRecord("7"), record); - cache.releaseSnapshot(1); - assert.strictEqual(cache.findRecord("7"), undefined); -}); - -test("source file cache transfers record ownership between snapshots", () => { - const cache = new SourceFileCache(); - const project = "/tsconfig.json" as ProjectId; - const file = { - fileName: "/file.ts" as RootedFilePath, - path: "/file.ts" as PathKey, - contentHash: "0".repeat(32), - parseOptionsKey: "0", - scriptKind: 3, - nodeId: "7", - }; - const record = cache.getOrCreateRecord(file, 1, project); - - // Reusing an object from this record in another snapshot gives that - // snapshot an independent owner. Releasing the original owner must not - // evict the shared record. - cache.retainRecord(record, 2, project); - cache.releaseSnapshot(1); - assert.strictEqual(cache.findRecord("7"), record); - - // The record is evicted once its final snapshot owner is released, and a - // stale wrapper cannot resurrect the evicted record. - cache.releaseSnapshot(2); - assert.strictEqual(cache.findRecord("7"), undefined); - assert.throws(() => cache.retainRecord(record, 3, project), /is no longer cached/); -}); +import assert from "node:assert"; +import test from "node:test"; +import type { + SymbolOwner as ProtocolSymbolOwner, + SymbolResponse as ProtocolSymbolResponse, +} from "../src/api/proto.generated.ts"; +import { + validateSymbolOwner, + validateSymbolResponse, +} from "../src/api/proto.ts"; +import type { ProjectId } from "../src/api/proto.ts"; +import { SourceFileCache } from "../src/api/sourceFileCache.ts"; +import type { + PathKey, + RootedFilePath, +} from "../src/ast/index.ts"; +import { SymbolOwnerKind } from "../src/enums/symbolOwnerKind.ts"; + +test("symbol ownership protocol validation rejects mixed variants", () => { + const project = "/tsconfig.json" as ProjectId; + const file = { + fileName: "/file.ts" as RootedFilePath, + path: "/file.ts" as PathKey, + contentHash: "0".repeat(32), + parseOptionsKey: "0", + scriptKind: 3, + nodeId: "1", + }; + const fileReference = { kind: SymbolOwnerKind.File, id: 1, file }; + const snapshotOwner = { kind: SymbolOwnerKind.Snapshot, snapshot: 1, project }; + validateSymbolOwner(snapshotOwner); + const response: ProtocolSymbolResponse = { + reference: fileReference, + name: "symbol", + flags: 0, + checkFlags: 0, + }; + validateSymbolResponse(response); + + for ( + const owner of [ + { kind: SymbolOwnerKind.File }, + { kind: SymbolOwnerKind.File, file, snapshot: 1 }, + { kind: SymbolOwnerKind.Snapshot, project: "/tsconfig.json" }, + { kind: SymbolOwnerKind.Snapshot, snapshot: 1 }, + { kind: SymbolOwnerKind.Snapshot, snapshot: 1, project: "/tsconfig.json", file }, + { kind: 99 }, + ] as ProtocolSymbolOwner[] + ) { + assert.throws(() => validateSymbolOwner(owner), /Invalid .*symbol owner|Invalid symbol owner kind/); + } + assert.throws( + () => validateSymbolResponse({ ...response, reference: { kind: SymbolOwnerKind.Snapshot, id: 1, file } as ProtocolSymbolResponse["reference"] }), + /Invalid snapshot symbol owner/, + ); +}); + +test("source file cache resolves references without creating records", () => { + const cache = new SourceFileCache(); + const project = "/tsconfig.json" as ProjectId; + const file = { + fileName: "/file.ts" as RootedFilePath, + path: "/file.ts" as PathKey, + contentHash: "0".repeat(32), + parseOptionsKey: "0", + scriptKind: 3, + nodeId: "7", + }; + assert.strictEqual(cache.findRecord("7"), undefined); + assert.equal(cache.size, 0); + + const record = cache.getOrCreateRecord(file, 1, project); + assert.strictEqual(cache.findRecord("7"), record); + cache.releaseSnapshot(1); + assert.strictEqual(cache.findRecord("7"), undefined); +}); + +test("source file cache transfers record ownership between snapshots", () => { + const cache = new SourceFileCache(); + const project = "/tsconfig.json" as ProjectId; + const file = { + fileName: "/file.ts" as RootedFilePath, + path: "/file.ts" as PathKey, + contentHash: "0".repeat(32), + parseOptionsKey: "0", + scriptKind: 3, + nodeId: "7", + }; + const record = cache.getOrCreateRecord(file, 1, project); + + // Reusing an object from this record in another snapshot gives that + // snapshot an independent owner. Releasing the original owner must not + // evict the shared record. + cache.retainRecord(record, 2, project); + cache.releaseSnapshot(1); + assert.strictEqual(cache.findRecord("7"), record); + + // The record is evicted once its final snapshot owner is released, and a + // stale wrapper cannot resurrect the evicted record. + cache.releaseSnapshot(2); + assert.strictEqual(cache.findRecord("7"), undefined); + assert.throws(() => cache.retainRecord(record, 3, project), /is no longer cached/); +}); diff --git a/packages/typescript/test/scanner.test.ts b/packages/typescript/test/scanner.test.ts index 0f52a34040628..4d9cbfb70c0a9 100644 --- a/packages/typescript/test/scanner.test.ts +++ b/packages/typescript/test/scanner.test.ts @@ -1,23 +1,23 @@ -import { - createScanner, - SyntaxKind, -} from "@typescript/typescript/unstable/ast"; -import assert from "node:assert"; -import { test } from "node:test"; - -test("scanJsDocToken respects a range ending in a hyphen", () => { - const text = "/** x-yy"; - const scanner = createScanner(/*skipTrivia*/ true); - scanner.setText(text); - - scanner.scanRange(3, text.length - 5, () => { - const tokens = []; - while (scanner.scanJsDocToken() !== SyntaxKind.EndOfFile) { - tokens.push([scanner.getToken(), scanner.getTokenText()]); - } - assert.deepStrictEqual(tokens, [ - [SyntaxKind.WhitespaceTrivia, " "], - [SyntaxKind.Identifier, "x-"], - ]); - }); -}); +import { + createScanner, + SyntaxKind, +} from "@typescript/typescript/unstable/ast"; +import assert from "node:assert"; +import { test } from "node:test"; + +test("scanJsDocToken respects a range ending in a hyphen", () => { + const text = "/** x-yy"; + const scanner = createScanner(/*skipTrivia*/ true); + scanner.setText(text); + + scanner.scanRange(3, text.length - 5, () => { + const tokens = []; + while (scanner.scanJsDocToken() !== SyntaxKind.EndOfFile) { + tokens.push([scanner.getToken(), scanner.getTokenText()]); + } + assert.deepStrictEqual(tokens, [ + [SyntaxKind.WhitespaceTrivia, " "], + [SyntaxKind.Identifier, "x-"], + ]); + }); +}); diff --git a/packages/typescript/test/spanMap.test.ts b/packages/typescript/test/spanMap.test.ts index 29e80e7a87bd6..e07f2d2cfc5ae 100644 --- a/packages/typescript/test/spanMap.test.ts +++ b/packages/typescript/test/spanMap.test.ts @@ -1,219 +1,219 @@ -import { - SpanMap, - SpanMapFeature, - SpanMapFidelity, - SpanMapKind, -} from "@typescript/typescript/unstable/ast"; -import assert from "node:assert"; -import { - describe, - test, -} from "node:test"; -import { areTestsFiltered } from "./testUtils.ts"; - -describe("SpanMap", { concurrency: areTestsFiltered() }, () => { - const map = new SpanMap([ - { virtualStart: 2, virtualEnd: 6, originalStart: 10, originalEnd: 14, kind: SpanMapKind.Verbatim }, - { virtualStart: 8, virtualEnd: 11, originalStart: 20, originalEnd: 27, kind: SpanMapKind.Atom }, - { virtualStart: 14, virtualEnd: 18, originalStart: 30, originalEnd: 34, kind: SpanMapKind.Verbatim }, - ]); - - test("maps virtual positions and ranges to original", () => { - assert.equal(map.segments[0].features, SpanMapFeature.All); - assert.deepEqual(map.virtualToOriginalPosition(4), { position: 12, fidelity: SpanMapFidelity.Exact }); - assert.deepEqual(map.virtualToOriginalSpan({ pos: 3, end: 5 }), { range: { pos: 11, end: 13 }, fidelity: SpanMapFidelity.Exact }); - assert.deepEqual(map.virtualToOriginalPosition(9), { position: 20, fidelity: SpanMapFidelity.Atom }); - assert.deepEqual(map.virtualToOriginalSpan({ pos: 8, end: 10 }), { range: { pos: 20, end: 27 }, fidelity: SpanMapFidelity.Atom }); - assert.deepEqual(map.virtualToOriginalSpan({ pos: 5, end: 15 }), { range: { pos: 13, end: 31 }, fidelity: SpanMapFidelity.Approximate }); - }); - - test("maps aliases with atom geometry", () => { - const alias = new SpanMap([ - { virtualStart: 0, virtualEnd: 3, originalStart: 0, originalEnd: 1, kind: SpanMapKind.Alias }, - ]); - assert.deepEqual(alias.virtualToOriginalSpan({ pos: 0, end: 3 }), { - range: { pos: 0, end: 1 }, - fidelity: SpanMapFidelity.Atom, - }); - }); - - test("maps synthesized gaps to insertion points", () => { - assert.deepEqual(map.virtualToOriginalPosition(0), { position: 0, fidelity: SpanMapFidelity.None }); - assert.deepEqual(map.virtualToOriginalSpan({ pos: 6, end: 8 }), { range: { pos: 14, end: 14 }, fidelity: SpanMapFidelity.None }); - assert.deepEqual(map.virtualToOriginalPosition(19), { position: 34, fidelity: SpanMapFidelity.None }); - }); - - test("maps original positions and ranges to virtual", () => { - assert.deepEqual(map.originalToVirtualPositions(12, SpanMapFeature.All), [{ position: 4, fidelity: SpanMapFidelity.Exact }]); - assert.deepEqual(map.originalToVirtualSpans({ pos: 21, end: 25 }, SpanMapFeature.All), [{ range: { pos: 8, end: 11 }, fidelity: SpanMapFidelity.Atom }]); - assert.deepEqual(map.originalToVirtualSpans({ pos: 13, end: 31 }, SpanMapFeature.All), [{ range: { pos: 5, end: 15 }, fidelity: SpanMapFidelity.Approximate }]); - assert.deepEqual(map.originalToVirtualPositions(15, SpanMapFeature.All), []); - }); - - test("maps segment endpoints", () => { - assert.deepEqual(map.virtualToOriginalPosition(18), { position: 34, fidelity: SpanMapFidelity.Exact }); - assert.deepEqual(map.originalToVirtualPositions(34, SpanMapFeature.All), [{ position: 18, fidelity: SpanMapFidelity.Exact }]); - assert.deepEqual(map.virtualToOriginalPosition(6), { position: 14, fidelity: SpanMapFidelity.None }); - assert.deepEqual(map.originalToVirtualPositions(14, SpanMapFeature.All), [{ position: 6, fidelity: SpanMapFidelity.Exact }]); - - const adjacent = new SpanMap([ - { virtualStart: 20, virtualEnd: 23, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 2, virtualEnd: 5, originalStart: 13, originalEnd: 16, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Completion }, - { virtualStart: 30, virtualEnd: 33, originalStart: 20, originalEnd: 25, kind: SpanMapKind.Atom }, - ]); - assert.deepEqual(adjacent.originalToVirtualPositions(13, SpanMapFeature.All), [ - { position: 2, fidelity: SpanMapFidelity.Exact }, - { position: 23, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(adjacent.originalToVirtualPositions(13, SpanMapFeature.Completion), [ - { position: 2, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(adjacent.originalToVirtualPositions(25, SpanMapFeature.All), [ - { position: 33, fidelity: SpanMapFidelity.Atom }, - ]); - }); - - test("maps zero-length spans at segment ends", () => { - assert.deepEqual(map.virtualToOriginalSpan({ pos: 18, end: 18 }), { - range: { pos: 34, end: 34 }, - fidelity: SpanMapFidelity.Exact, - }); - for (const originalEnd of [14, 34]) { - const positions = map.originalToVirtualPositions(originalEnd, SpanMapFeature.All); - assert.equal(positions.length, 1); - assert.deepEqual(map.originalToVirtualSpans({ pos: originalEnd, end: originalEnd }, SpanMapFeature.All), [{ - range: { pos: positions[0].position, end: positions[0].position }, - fidelity: positions[0].fidelity, - }]); - } - }); - - test("sorts virtual and original indexes independently", () => { - const reordered = new SpanMap([ - { virtualStart: 0, virtualEnd: 2, originalStart: 10, originalEnd: 12, kind: SpanMapKind.Verbatim }, - { virtualStart: 2, virtualEnd: 4, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim }, - ]); - assert.deepEqual(reordered.virtualToOriginalPosition(3), { position: 1, fidelity: SpanMapFidelity.Exact }); - assert.deepEqual(reordered.originalToVirtualPositions(1, SpanMapFeature.All), [{ position: 3, fidelity: SpanMapFidelity.Exact }]); - }); - - test("an empty map describes fully synthesized output", () => { - const empty = new SpanMap([]); - assert.deepEqual(empty.virtualToOriginalPosition(5), { position: 0, fidelity: SpanMapFidelity.None }); - assert.deepEqual(empty.virtualToOriginalSpan({ pos: 2, end: 7 }), { range: { pos: 0, end: 0 }, fidelity: SpanMapFidelity.None }); - assert.deepEqual(empty.originalToVirtualPositions(5, SpanMapFeature.All), []); - }); - - test("maps duplicate groups by features", () => { - const duplicates = new SpanMap([ - { virtualStart: 0, virtualEnd: 3, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Definition }, - { virtualStart: 10, virtualEnd: 13, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 14, virtualEnd: 17, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 20, virtualEnd: 25, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Atom, features: SpanMapFeature.Definition }, - ]); - - assert.deepEqual(duplicates.originalToVirtualPositions(11, SpanMapFeature.Hover), [ - { position: 11, fidelity: SpanMapFidelity.Exact }, - { position: 15, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(duplicates.originalToVirtualPositions(11, SpanMapFeature.Definition), [ - { position: 1, fidelity: SpanMapFidelity.Exact }, - { position: 20, fidelity: SpanMapFidelity.Atom }, - ]); - assert.deepEqual(duplicates.originalToVirtualPositions(13, SpanMapFeature.Hover), [ - { position: 13, fidelity: SpanMapFidelity.Exact }, - { position: 17, fidelity: SpanMapFidelity.Exact }, - ]); - }); - - test("maps every covering overlapping span", () => { - const overlapping = new SpanMap([ - { virtualStart: 0, virtualEnd: 6, originalStart: 0, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 10, virtualEnd: 12, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 20, virtualEnd: 24, originalStart: 3, originalEnd: 7, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - ]); - - assert.deepEqual(overlapping.originalToVirtualPositions(3, SpanMapFeature.Hover), [ - { position: 3, fidelity: SpanMapFidelity.Exact }, - { position: 11, fidelity: SpanMapFidelity.Exact }, - { position: 20, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 3, end: 4 }, SpanMapFeature.Hover), [ - { range: { pos: 3, end: 4 }, fidelity: SpanMapFidelity.Exact }, - { range: { pos: 11, end: 12 }, fidelity: SpanMapFidelity.Exact }, - { range: { pos: 20, end: 21 }, fidelity: SpanMapFidelity.Exact }, - ]); - }); - - test("finds an early covering segment through the original index", () => { - // Binary search lands near [90,95), which does not contain 97. The interval index must still find the - // earlier [0,100) segment without scanning every segment whose start precedes the query. - const overlapping = new SpanMap([ - { virtualStart: 0, virtualEnd: 100, originalStart: 0, originalEnd: 100, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 100, virtualEnd: 105, originalStart: 80, originalEnd: 85, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 105, virtualEnd: 110, originalStart: 90, originalEnd: 95, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 110, virtualEnd: 113, originalStart: 100, originalEnd: 103, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - ]); - - assert.deepEqual(overlapping.originalToVirtualPositions(97, SpanMapFeature.Hover), [ - { position: 97, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 97, end: 98 }, SpanMapFeature.Hover), [ - { range: { pos: 97, end: 98 }, fidelity: SpanMapFidelity.Exact }, - ]); - - // Point lookup includes both sides of a shared endpoint. Nonempty span lookup treats segment ends as - // exclusive and uses only the segment beginning at the endpoint. - assert.deepEqual(overlapping.originalToVirtualPositions(100, SpanMapFeature.Hover), [ - { position: 100, fidelity: SpanMapFidelity.Exact }, - { position: 110, fidelity: SpanMapFidelity.Exact }, - ]); - assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 100, end: 101 }, SpanMapFeature.Hover), [ - { range: { pos: 110, end: 111 }, fidelity: SpanMapFidelity.Exact }, - ]); - }); - - test("falls back from a disabled containing span", () => { - const overlapping = new SpanMap([ - { virtualStart: 0, virtualEnd: 6, originalStart: 0, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Definition }, - { virtualStart: 10, virtualEnd: 13, originalStart: 0, originalEnd: 3, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 13, virtualEnd: 16, originalStart: 3, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - ]); - - assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 1, end: 5 }, SpanMapFeature.Hover), [ - { range: { pos: 11, end: 15 }, fidelity: SpanMapFidelity.Approximate }, - ]); - }); - - test("maps minimal cross-group projections", () => { - const projections = new SpanMap([ - { virtualStart: 0, virtualEnd: 2, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 2, virtualEnd: 4, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 10, virtualEnd: 12, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - { virtualStart: 12, virtualEnd: 14, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, - ]); - - assert.deepEqual(projections.originalToVirtualSpans({ pos: 1, end: 3 }, SpanMapFeature.Hover), [ - { range: { pos: 1, end: 3 }, fidelity: SpanMapFidelity.Approximate }, - { range: { pos: 11, end: 13 }, fidelity: SpanMapFidelity.Approximate }, - ]); - }); - - test("explicit zero features disables original-to-virtual mapping", () => { - const disabled = new SpanMap([ - { virtualStart: 0, virtualEnd: 3, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.None }, - ]); - - assert.deepEqual(disabled.originalToVirtualPositions(11, SpanMapFeature.Hover), []); - assert.deepEqual(disabled.originalToVirtualPositions(11, SpanMapFeature.Definition), []); - assert.deepEqual(disabled.originalToVirtualSpans({ pos: 10, end: 13 }, SpanMapFeature.Hover), []); - }); - - test("exposes fidelity predicates", () => { - assert.equal(SpanMap.isExact(SpanMapFidelity.Exact), true); - assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Exact), true); - assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Atom), true); - assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Approximate), false); - assert.equal(SpanMap.isNone(SpanMapFidelity.None), true); - }); -}); +import { + SpanMap, + SpanMapFeature, + SpanMapFidelity, + SpanMapKind, +} from "@typescript/typescript/unstable/ast"; +import assert from "node:assert"; +import { + describe, + test, +} from "node:test"; +import { areTestsFiltered } from "./testUtils.ts"; + +describe("SpanMap", { concurrency: areTestsFiltered() }, () => { + const map = new SpanMap([ + { virtualStart: 2, virtualEnd: 6, originalStart: 10, originalEnd: 14, kind: SpanMapKind.Verbatim }, + { virtualStart: 8, virtualEnd: 11, originalStart: 20, originalEnd: 27, kind: SpanMapKind.Atom }, + { virtualStart: 14, virtualEnd: 18, originalStart: 30, originalEnd: 34, kind: SpanMapKind.Verbatim }, + ]); + + test("maps virtual positions and ranges to original", () => { + assert.equal(map.segments[0].features, SpanMapFeature.All); + assert.deepEqual(map.virtualToOriginalPosition(4), { position: 12, fidelity: SpanMapFidelity.Exact }); + assert.deepEqual(map.virtualToOriginalSpan({ pos: 3, end: 5 }), { range: { pos: 11, end: 13 }, fidelity: SpanMapFidelity.Exact }); + assert.deepEqual(map.virtualToOriginalPosition(9), { position: 20, fidelity: SpanMapFidelity.Atom }); + assert.deepEqual(map.virtualToOriginalSpan({ pos: 8, end: 10 }), { range: { pos: 20, end: 27 }, fidelity: SpanMapFidelity.Atom }); + assert.deepEqual(map.virtualToOriginalSpan({ pos: 5, end: 15 }), { range: { pos: 13, end: 31 }, fidelity: SpanMapFidelity.Approximate }); + }); + + test("maps aliases with atom geometry", () => { + const alias = new SpanMap([ + { virtualStart: 0, virtualEnd: 3, originalStart: 0, originalEnd: 1, kind: SpanMapKind.Alias }, + ]); + assert.deepEqual(alias.virtualToOriginalSpan({ pos: 0, end: 3 }), { + range: { pos: 0, end: 1 }, + fidelity: SpanMapFidelity.Atom, + }); + }); + + test("maps synthesized gaps to insertion points", () => { + assert.deepEqual(map.virtualToOriginalPosition(0), { position: 0, fidelity: SpanMapFidelity.None }); + assert.deepEqual(map.virtualToOriginalSpan({ pos: 6, end: 8 }), { range: { pos: 14, end: 14 }, fidelity: SpanMapFidelity.None }); + assert.deepEqual(map.virtualToOriginalPosition(19), { position: 34, fidelity: SpanMapFidelity.None }); + }); + + test("maps original positions and ranges to virtual", () => { + assert.deepEqual(map.originalToVirtualPositions(12, SpanMapFeature.All), [{ position: 4, fidelity: SpanMapFidelity.Exact }]); + assert.deepEqual(map.originalToVirtualSpans({ pos: 21, end: 25 }, SpanMapFeature.All), [{ range: { pos: 8, end: 11 }, fidelity: SpanMapFidelity.Atom }]); + assert.deepEqual(map.originalToVirtualSpans({ pos: 13, end: 31 }, SpanMapFeature.All), [{ range: { pos: 5, end: 15 }, fidelity: SpanMapFidelity.Approximate }]); + assert.deepEqual(map.originalToVirtualPositions(15, SpanMapFeature.All), []); + }); + + test("maps segment endpoints", () => { + assert.deepEqual(map.virtualToOriginalPosition(18), { position: 34, fidelity: SpanMapFidelity.Exact }); + assert.deepEqual(map.originalToVirtualPositions(34, SpanMapFeature.All), [{ position: 18, fidelity: SpanMapFidelity.Exact }]); + assert.deepEqual(map.virtualToOriginalPosition(6), { position: 14, fidelity: SpanMapFidelity.None }); + assert.deepEqual(map.originalToVirtualPositions(14, SpanMapFeature.All), [{ position: 6, fidelity: SpanMapFidelity.Exact }]); + + const adjacent = new SpanMap([ + { virtualStart: 20, virtualEnd: 23, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 2, virtualEnd: 5, originalStart: 13, originalEnd: 16, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Completion }, + { virtualStart: 30, virtualEnd: 33, originalStart: 20, originalEnd: 25, kind: SpanMapKind.Atom }, + ]); + assert.deepEqual(adjacent.originalToVirtualPositions(13, SpanMapFeature.All), [ + { position: 2, fidelity: SpanMapFidelity.Exact }, + { position: 23, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(adjacent.originalToVirtualPositions(13, SpanMapFeature.Completion), [ + { position: 2, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(adjacent.originalToVirtualPositions(25, SpanMapFeature.All), [ + { position: 33, fidelity: SpanMapFidelity.Atom }, + ]); + }); + + test("maps zero-length spans at segment ends", () => { + assert.deepEqual(map.virtualToOriginalSpan({ pos: 18, end: 18 }), { + range: { pos: 34, end: 34 }, + fidelity: SpanMapFidelity.Exact, + }); + for (const originalEnd of [14, 34]) { + const positions = map.originalToVirtualPositions(originalEnd, SpanMapFeature.All); + assert.equal(positions.length, 1); + assert.deepEqual(map.originalToVirtualSpans({ pos: originalEnd, end: originalEnd }, SpanMapFeature.All), [{ + range: { pos: positions[0].position, end: positions[0].position }, + fidelity: positions[0].fidelity, + }]); + } + }); + + test("sorts virtual and original indexes independently", () => { + const reordered = new SpanMap([ + { virtualStart: 0, virtualEnd: 2, originalStart: 10, originalEnd: 12, kind: SpanMapKind.Verbatim }, + { virtualStart: 2, virtualEnd: 4, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim }, + ]); + assert.deepEqual(reordered.virtualToOriginalPosition(3), { position: 1, fidelity: SpanMapFidelity.Exact }); + assert.deepEqual(reordered.originalToVirtualPositions(1, SpanMapFeature.All), [{ position: 3, fidelity: SpanMapFidelity.Exact }]); + }); + + test("an empty map describes fully synthesized output", () => { + const empty = new SpanMap([]); + assert.deepEqual(empty.virtualToOriginalPosition(5), { position: 0, fidelity: SpanMapFidelity.None }); + assert.deepEqual(empty.virtualToOriginalSpan({ pos: 2, end: 7 }), { range: { pos: 0, end: 0 }, fidelity: SpanMapFidelity.None }); + assert.deepEqual(empty.originalToVirtualPositions(5, SpanMapFeature.All), []); + }); + + test("maps duplicate groups by features", () => { + const duplicates = new SpanMap([ + { virtualStart: 0, virtualEnd: 3, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Definition }, + { virtualStart: 10, virtualEnd: 13, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 14, virtualEnd: 17, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 20, virtualEnd: 25, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Atom, features: SpanMapFeature.Definition }, + ]); + + assert.deepEqual(duplicates.originalToVirtualPositions(11, SpanMapFeature.Hover), [ + { position: 11, fidelity: SpanMapFidelity.Exact }, + { position: 15, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(duplicates.originalToVirtualPositions(11, SpanMapFeature.Definition), [ + { position: 1, fidelity: SpanMapFidelity.Exact }, + { position: 20, fidelity: SpanMapFidelity.Atom }, + ]); + assert.deepEqual(duplicates.originalToVirtualPositions(13, SpanMapFeature.Hover), [ + { position: 13, fidelity: SpanMapFidelity.Exact }, + { position: 17, fidelity: SpanMapFidelity.Exact }, + ]); + }); + + test("maps every covering overlapping span", () => { + const overlapping = new SpanMap([ + { virtualStart: 0, virtualEnd: 6, originalStart: 0, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 10, virtualEnd: 12, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 20, virtualEnd: 24, originalStart: 3, originalEnd: 7, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + ]); + + assert.deepEqual(overlapping.originalToVirtualPositions(3, SpanMapFeature.Hover), [ + { position: 3, fidelity: SpanMapFidelity.Exact }, + { position: 11, fidelity: SpanMapFidelity.Exact }, + { position: 20, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 3, end: 4 }, SpanMapFeature.Hover), [ + { range: { pos: 3, end: 4 }, fidelity: SpanMapFidelity.Exact }, + { range: { pos: 11, end: 12 }, fidelity: SpanMapFidelity.Exact }, + { range: { pos: 20, end: 21 }, fidelity: SpanMapFidelity.Exact }, + ]); + }); + + test("finds an early covering segment through the original index", () => { + // Binary search lands near [90,95), which does not contain 97. The interval index must still find the + // earlier [0,100) segment without scanning every segment whose start precedes the query. + const overlapping = new SpanMap([ + { virtualStart: 0, virtualEnd: 100, originalStart: 0, originalEnd: 100, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 100, virtualEnd: 105, originalStart: 80, originalEnd: 85, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 105, virtualEnd: 110, originalStart: 90, originalEnd: 95, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 110, virtualEnd: 113, originalStart: 100, originalEnd: 103, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + ]); + + assert.deepEqual(overlapping.originalToVirtualPositions(97, SpanMapFeature.Hover), [ + { position: 97, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 97, end: 98 }, SpanMapFeature.Hover), [ + { range: { pos: 97, end: 98 }, fidelity: SpanMapFidelity.Exact }, + ]); + + // Point lookup includes both sides of a shared endpoint. Nonempty span lookup treats segment ends as + // exclusive and uses only the segment beginning at the endpoint. + assert.deepEqual(overlapping.originalToVirtualPositions(100, SpanMapFeature.Hover), [ + { position: 100, fidelity: SpanMapFidelity.Exact }, + { position: 110, fidelity: SpanMapFidelity.Exact }, + ]); + assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 100, end: 101 }, SpanMapFeature.Hover), [ + { range: { pos: 110, end: 111 }, fidelity: SpanMapFidelity.Exact }, + ]); + }); + + test("falls back from a disabled containing span", () => { + const overlapping = new SpanMap([ + { virtualStart: 0, virtualEnd: 6, originalStart: 0, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Definition }, + { virtualStart: 10, virtualEnd: 13, originalStart: 0, originalEnd: 3, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 13, virtualEnd: 16, originalStart: 3, originalEnd: 6, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + ]); + + assert.deepEqual(overlapping.originalToVirtualSpans({ pos: 1, end: 5 }, SpanMapFeature.Hover), [ + { range: { pos: 11, end: 15 }, fidelity: SpanMapFidelity.Approximate }, + ]); + }); + + test("maps minimal cross-group projections", () => { + const projections = new SpanMap([ + { virtualStart: 0, virtualEnd: 2, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 2, virtualEnd: 4, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 10, virtualEnd: 12, originalStart: 0, originalEnd: 2, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + { virtualStart: 12, virtualEnd: 14, originalStart: 2, originalEnd: 4, kind: SpanMapKind.Verbatim, features: SpanMapFeature.Hover }, + ]); + + assert.deepEqual(projections.originalToVirtualSpans({ pos: 1, end: 3 }, SpanMapFeature.Hover), [ + { range: { pos: 1, end: 3 }, fidelity: SpanMapFidelity.Approximate }, + { range: { pos: 11, end: 13 }, fidelity: SpanMapFidelity.Approximate }, + ]); + }); + + test("explicit zero features disables original-to-virtual mapping", () => { + const disabled = new SpanMap([ + { virtualStart: 0, virtualEnd: 3, originalStart: 10, originalEnd: 13, kind: SpanMapKind.Verbatim, features: SpanMapFeature.None }, + ]); + + assert.deepEqual(disabled.originalToVirtualPositions(11, SpanMapFeature.Hover), []); + assert.deepEqual(disabled.originalToVirtualPositions(11, SpanMapFeature.Definition), []); + assert.deepEqual(disabled.originalToVirtualSpans({ pos: 10, end: 13 }, SpanMapFeature.Hover), []); + }); + + test("exposes fidelity predicates", () => { + assert.equal(SpanMap.isExact(SpanMapFidelity.Exact), true); + assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Exact), true); + assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Atom), true); + assert.equal(SpanMap.isSingleSegment(SpanMapFidelity.Approximate), false); + assert.equal(SpanMap.isNone(SpanMapFidelity.None), true); + }); +}); diff --git a/packages/typescript/test/sync/api-generators.test.ts b/packages/typescript/test/sync/api-generators.test.ts index 4a167fee90eb6..e0ea5d137eda6 100644 --- a/packages/typescript/test/sync/api-generators.test.ts +++ b/packages/typescript/test/sync/api-generators.test.ts @@ -1,1860 +1,1860 @@ -import { - cast, - type Identifier, - isCallExpression, - isClassDeclaration, - isEnumDeclaration, - isExportDeclaration, - isFunctionDeclaration, - isIdentifier, - isImportDeclaration, - isInterfaceDeclaration, - isNamedExports, - isNamedImports, - isObjectLiteralExpression, - isShorthandPropertyAssignment, - isStringLiteral, - isTypeAliasDeclaration, - isVariableDeclaration, - isVariableStatement, - type Node, - type SourceFile, - SyntaxKind, -} from "@typescript/typescript/unstable/ast"; -import { cloneNode } from "@typescript/typescript/unstable/ast/factory"; -import { toRootedFilePath } from "@typescript/typescript/unstable/path"; -import type { - APIRequest, - APIResponse, -} from "@typescript/typescript/unstable/proto"; -import { - all, - type AllAPIRequestGenerator, - type AnyAPIRequestGenerator, - type API, - type BuildOrchestrator, - type ConditionalType, - defer, - type DeferredAPIRequestGenerator, - getSymbol, - type IndexedAccessType, - type IndexInfo, - IndexKind, - type InterfaceType, - type LiteralType, - type MappedType, - ModuleKind, - ModuleResolutionKind, - type NodeHandle, - type Program, - type Project, - type RetainedSourceFile, - type Signature, - SignatureKind, - type Snapshot, - type SubstitutionType, - type Symbol, - SymbolFlags, - type TimingInfo, - type Type, - TypeFlags, - type TypeParameter, - type TypePredicate, - type TypeReference, - type UnionOrIntersectionType, -} from "@typescript/typescript/unstable/sync"; -import assert from "node:assert"; -import { - describe, - test, - type TestContext, -} from "node:test"; -import { - type APIRequestGenerator, - executeRequestGenerators, -} from "../../src/api/sync/generatorSupport.ts"; -import { areTestsFiltered } from "../testUtils.ts"; -import { spawnAPI } from "./api.testUtils.ts"; - -const parityFiles = { - "/base.json": JSON.stringify({ - compilerOptions: { - declaration: true, - module: "nodenext", - moduleResolution: "nodenext", - strict: true, - target: "esnext", - exactOptionalPropertyTypes: true, - }, - }), - "/tsconfig.json": JSON.stringify({ - extends: "./base.json", - include: ["src/**/*.ts"], - }), - "/src/models.ts": ` -export interface Box { - value: T; - tuple: readonly [T, ...T[]]; - [key: string]: unknown; - [index: number]: T; - readonly opt?: true; -} -export class Base { base = true; } -export class Derived extends Base { derived = 1; } -export type Boxed = Box; -export type TupleAlias = readonly [string, ...number[]]; -export type ArrayAlias = Derived[]; -export type Conditional = T extends Base ? T : never; -export type Indexed> = T["value"]; -export type Keys = keyof Box; -export type Union = Derived | string; -export enum Choice { First = 1, Second = "second" } -export class Unimported { value = "extra"; } -export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; -`, - "/src/index.ts": ` -/// -import { Base, Box, Choice, Derived } from "./models.js"; -export { Derived as RenamedDerived } from "./models.js"; - -/** Combine a first value with the rest. @deprecated parity fixture */ -export function combine(this: Box, first: T, ...rest: T[]): readonly [T, ...T[]] { - return [first, ...rest]; -} - -export const derived = new Derived(); -export const box: Box = { value: derived, tuple: [derived], derived }; -export const shorthand = { derived }; -export const called = combine.call(box, derived, derived); -export const semanticIssue: string = 123; -export const choice = Choice.First; -export function isDerived(value: Base): value is Derived { return value instanceof Derived; } -export const badCall = derived(); -export function getArguments() { return arguments; } -import { absent } from "./absent.js"; -export const missingValue = absent; -`, - "/node_modules/@types/parity/index.d.ts": `export {};`, - "/src/syntax.ts": `export const broken: = 1;`, - "/src/bind.ts": `let duplicate = 1; let duplicate = 2;`, - "/src/suggestions.ts": `export function suggestion() { const unused = 1; return 1; }`, -}; - -type GeneratorMethod = ((...args: Args) => Result) & { - gen(...args: Args): Generator; -}; - -type EquivalenceAssertion = (actual: Result, expected: Result, message?: string) => void; - -interface ParityCase { - readonly ownerName: string; - readonly methodName: string; - readonly runGenerator: () => Generator; - readonly assertEquivalent: (message?: string) => void; -} - -const exercisedMethods = new Set(); -const publicGeneratorExemptions = new Map([ - ["API.fromLSPConnection", "requires an existing LSP API session"], - ["API.getCurrentLanguageServerSnapshot", "requires an existing LSP API session"], - ["InternalAPI.startCPUProfile", "writes a CPU profile and changes process-global profiling state"], - ["InternalAPI.stopCPUProfile", "requires a matching active CPU profile"], - ["InternalAPI.saveHeapProfile", "writes a potentially large heap profile to disk"], -]); -const privateGeneratorGetters = new Set([ - "API.ensureInitialized", - "API.fetchDeclarationSymbol", - "API.initializeWorker", - "API.updateSnapshot", - "Checker.getIntrinsicType", - "Checker.getWellKnownSignatures", - "Checker.getWellKnownSymbols", - "NodeHandle.fetchOwnerFile", - "Program.disposeWorker", - "Program.fetchSourceFileMetadata", - "Program.getSourceFileWorker", - "Snapshot.disposeWorker", - "Symbol.fetchSymbol", - "Symbol.fetchSymbols", - "Symbol.fetchSymbolTable", - "Type.getNumberIndexTypeWorker", - "Type.getStringIndexTypeWorker", -]); - -function methodKey(ownerName: string, methodName: string): string { - return `${ownerName}.${methodName}`; -} - -function parityCase( - ownerName: string, - methodName: string, - method: GeneratorMethod, - assertEquivalent: EquivalenceAssertion>, - ...args: Args -): ParityCase { - let generatedResult: { readonly value: Result; } | undefined; - return { - ownerName, - methodName, - runGenerator: function* () { - generatedResult = { value: yield* method.gen(...args) }; - }, - assertEquivalent: message => { - assert.ok(generatedResult, `${message ?? methodName}: generator did not complete`); - assertEquivalent(generatedResult.value, method(...args), message); - }, - }; -} - -function selectGeneratorMethod( - method: GeneratorMethod, -): GeneratorMethod { - return method; -} - -function assertDeepEquivalent(actual: T, expected: T, message?: string): void { - assert.deepEqual(actual, expected, message); -} - -function assertOptionalEquivalent(actual: T | undefined, expected: T | undefined, assertPresentEquivalent: EquivalenceAssertion, message?: string): void { - if (actual === undefined || expected === undefined) { - assert.equal(actual, expected, message); - return; - } - assertPresentEquivalent(actual, expected, message); -} - -function assertArrayElementsEquivalent(actual: readonly T[], expected: readonly T[], assertElementEquivalent: EquivalenceAssertion, message?: string): void { - assert.equal(actual.length, expected.length, message); - for (let index = 0; index < actual.length; index++) { - assertElementEquivalent(actual[index], expected[index], `${message ?? "value"}[${index}]`); - } -} - -function assertSymbolsEquivalent(actual: Symbol, expected: Symbol, message?: string): void { - assert.strictEqual(actual, expected, message); - assert.equal(actual.id, expected.id, message); - assert.equal(actual.name, expected.name, message); - assert.equal(actual.flags, expected.flags, message); -} - -function assertOptionalSymbolsEquivalent(actual: Symbol | undefined, expected: Symbol | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertSymbolsEquivalent, message); -} - -function assertSymbolArraysEquivalent(actual: readonly Symbol[], expected: readonly Symbol[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertSymbolsEquivalent, message); -} - -function assertUnorderedSymbolArraysEquivalent(actual: readonly Symbol[], expected: readonly Symbol[], message?: string): void { - const byIdentity = (left: Symbol, right: Symbol) => left.id - right.id || left.name.localeCompare(right.name); - const actualSymbols = [...actual].sort(byIdentity); - const expectedSymbols = [...expected].sort(byIdentity); - assertArrayElementsEquivalent(actualSymbols, expectedSymbols, assertSymbolsEquivalent, message); -} - -function assertOptionalSymbolArraysEquivalent(actual: readonly (Symbol | undefined)[], expected: readonly (Symbol | undefined)[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertOptionalSymbolsEquivalent, message); -} - -function assertTypesEquivalent(actual: Type, expected: Type, message?: string): void { - assert.strictEqual(actual, expected, message); - assert.equal(actual.id, expected.id, message); - assert.equal(actual.flags, expected.flags, message); -} - -function assertOptionalTypesEquivalent(actual: Type | undefined, expected: Type | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertTypesEquivalent, message); -} - -function assertTypeArraysEquivalent(actual: readonly Type[], expected: readonly Type[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertTypesEquivalent, message); -} - -function assertOptionalTypeArraysEquivalent(actual: readonly (Type | undefined)[], expected: readonly (Type | undefined)[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertOptionalTypesEquivalent, message); -} - -function assertOptionalTypeArrayEquivalent(actual: readonly Type[] | undefined, expected: readonly Type[] | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertTypeArraysEquivalent, message); -} - -function assertSignaturesEquivalent(actual: Signature, expected: Signature, message?: string): void { - assert.strictEqual(actual, expected, message); - assert.equal(actual.id, expected.id, message); - assert.equal(actual.hasRestParameter, expected.hasRestParameter, message); - assert.equal(actual.isConstruct, expected.isConstruct, message); -} - -function assertOptionalSignaturesEquivalent(actual: Signature | undefined, expected: Signature | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertSignaturesEquivalent, message); -} - -function assertSignatureArraysEquivalent(actual: readonly Signature[], expected: readonly Signature[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertSignaturesEquivalent, message); -} - -function assertNodeHandlesEquivalent(actual: NodeHandle, expected: NodeHandle, message?: string): void { - assert.equal(actual.index, expected.index, message); - assert.equal(actual.kind, expected.kind, message); - assert.equal(actual.path, expected.path, message); -} - -function assertNodeHandleArraysEquivalent(actual: readonly NodeHandle[], expected: readonly NodeHandle[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertNodeHandlesEquivalent, message); -} - -function assertOptionalNodeHandlesEquivalent(actual: NodeHandle | undefined, expected: NodeHandle | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertNodeHandlesEquivalent, message); -} - -function assertNodesEquivalent(actual: Node, expected: Node, message?: string): void { - assert.equal(actual.kind, expected.kind, message); - assert.equal(actual.pos, expected.pos, message); - assert.equal(actual.end, expected.end, message); -} - -function assertOptionalNodesEquivalent(actual: Node | undefined, expected: Node | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertNodesEquivalent, message); -} - -function assertSourceFilesEquivalent(actual: SourceFile, expected: SourceFile, message?: string): void { - assertNodesEquivalent(actual, expected, message); - assert.equal(actual.fileName, expected.fileName, message); - assert.equal(actual.text, expected.text, message); -} - -function assertRetainedSourceFilesEquivalent(actual: RetainedSourceFile, expected: RetainedSourceFile, message?: string): void { - try { - assertSourceFilesEquivalent(actual.sourceFile, expected.sourceFile, message); - } - finally { - actual.dispose(); - expected.dispose(); - } -} - -function assertOptionalSourceFilesEquivalent(actual: SourceFile | undefined, expected: SourceFile | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertSourceFilesEquivalent, message); -} - -function assertProjectsEquivalent(actual: Project, expected: Project, message?: string): void { - assert.equal(actual.id, expected.id, message); - assert.equal(actual.configFileName, expected.configFileName, message); - assert.equal(actual.dirty, expected.dirty, message); - assert.deepEqual(actual.rootFiles, expected.rootFiles, message); -} - -function assertOptionalProjectsEquivalent(actual: Project | undefined, expected: Project | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, assertProjectsEquivalent, message); -} - -function assertProgramsEquivalent(actual: Program, expected: Program, message?: string): void { - assertProjectsEquivalent(actual.getProject(), expected.getProject(), message); -} - -function assertSnapshotsEquivalent(actual: Snapshot, expected: Snapshot, message?: string): void { - const actualProjects = actual.getProjects(); - const expectedProjects = expected.getProjects(); - assertArrayElementsEquivalent(actualProjects, expectedProjects, assertProjectsEquivalent, message); - assert.deepEqual(actual.operation.createdPrograms?.map(program => program.id), expected.operation.createdPrograms?.map(program => program.id), message); - assert.deepEqual(actual.operation.openedFiles?.map(result => result.project.id), expected.operation.openedFiles?.map(result => result.project.id), message); -} - -function assertBuildOrchestratorsEquivalent(actual: BuildOrchestrator, expected: BuildOrchestrator, message?: string): void { - assert.equal(actual.constructor, expected.constructor, message); -} - -function assertSymbolMapsEquivalent(actual: ReadonlyMap, expected: ReadonlyMap, message?: string): void { - assert.deepEqual([...actual.keys()], [...expected.keys()], message); - for (const key of actual.keys()) { - assertOptionalSymbolsEquivalent(actual.get(key), expected.get(key), `${message ?? "symbol map"}[${key}]`); - } -} - -function assertIndexInfosEquivalent(actual: readonly IndexInfo[], expected: readonly IndexInfo[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, (actualInfo, expectedInfo, elementMessage) => { - assertTypesEquivalent(actualInfo.keyType, expectedInfo.keyType, elementMessage); - assertTypesEquivalent(actualInfo.valueType, expectedInfo.valueType, elementMessage); - assert.equal(actualInfo.isReadonly, expectedInfo.isReadonly, elementMessage); - assertOptionalNodeHandlesEquivalent(actualInfo.declaration, expectedInfo.declaration, elementMessage); - }, message); -} - -function assertOptionalTypePredicatesEquivalent(actual: TypePredicate | undefined, expected: TypePredicate | undefined, message?: string): void { - assertOptionalEquivalent(actual, expected, (actualPredicate, expectedPredicate, predicateMessage) => { - assert.equal(actualPredicate.kind, expectedPredicate.kind, predicateMessage); - assert.equal(actualPredicate.parameterName, expectedPredicate.parameterName, predicateMessage); - assert.equal(actualPredicate.parameterIndex, expectedPredicate.parameterIndex, predicateMessage); - assertOptionalTypesEquivalent(actualPredicate.type, expectedPredicate.type, predicateMessage); - }, message); -} - -function assertDeepArraysEquivalent(actual: readonly T[], expected: readonly T[], message?: string): void { - assertArrayElementsEquivalent(actual, expected, assertDeepEquivalent, message); -} - -function assertTimingInfoEquivalent(actual: TimingInfo, expected: TimingInfo, message?: string): void { - assert.equal(actual.enabled, expected.enabled, message); - assert.equal(actual.totals.requestCount, expected.totals.requestCount, message); - assert.equal(actual.totals.bytesSent, expected.totals.bytesSent, message); - assert.equal(actual.totals.bytesReceived, expected.totals.bytesReceived, message); - assert.deepEqual(actual.recentRequests.map(request => request.method), expected.recentRequests.map(request => request.method), message); -} - -function runParityBatch(api: API, cases: readonly ParityCase[]): void { - api.batch(...cases.map(parity => parity.runGenerator())); - - for (const { assertEquivalent, methodName, ownerName } of cases) { - assertEquivalent(methodKey(ownerName, methodName)); - exercisedMethods.add(methodKey(ownerName, methodName)); - } -} - -function observeRequestBatches( - api: API, - requestBatches: string[][], - context: TestContext, -): void { - const client = api["client"]; - const batchRequests = client.batchRequests.bind(client); - context.mock.method(client, "batchRequests", (requests: readonly APIRequest[]) => { - requestBatches.push(requests.map(request => request.method)); - return batchRequests(requests); - }); -} - -function assertPublicGeneratorCoverage(owners: readonly { readonly name: string; readonly value: object; readonly own?: boolean; }[]): void { - const missing: string[] = []; - for (const { name, own, value } of owners) { - const descriptorOwner = own ? value : Object.getPrototypeOf(value) as object; - for (const [methodName, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(descriptorOwner))) { - if (!descriptor.get) continue; - const key = methodKey(name, methodName); - const result: { gen?: unknown; } | undefined = descriptor.get.call(value); - if (typeof result?.gen !== "function") continue; - if (!exercisedMethods.has(key) && !publicGeneratorExemptions.has(key) && !privateGeneratorGetters.has(key)) { - missing.push(key); - } - } - } - assert.deepEqual(missing, [], `Uncovered public generator getters: ${missing.join(", ")}`); -} - -describe("API - generator batching", { concurrency: areTestsFiltered() }, () => { - test("looks up binder symbols through standalone and API generators", () => { - using api = spawnAPI(); - using lease = api.createSourceFile("/symbols.ts", "function present() {}"); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - const [symbol] = api.batch(getSymbol.gen(declaration)); - assert.ok(symbol); - assert.equal(symbol.name, "present"); - const [cached] = api.batch(api.getSymbol.gen(declaration)); - assert.strictEqual(cached, symbol); - const clone = cloneNode(declaration); - assert.throws(() => api.batch(getSymbol.gen(clone)), /Source file not found/); - assert.throws(() => api.batch(api.getSymbol.gen(clone)), /Source file not found/); - }); - - test("batches source file requests", context => { - const api = spawnAPI(parityFiles); - context.after(() => api.close()); - const requestBatches: string[][] = []; - observeRequestBatches(api, requestBatches, context); - const [[fromText, fromFile]] = api.batch(all( - api.createSourceFile.gen("/generated.ts", "export const generated = true;"), - api.createSourceFileFromFile.gen("/src/index.ts"), - )); - context.after(() => { - fromText.dispose(); - fromFile.dispose(); - }); - const [[retained]] = api.batch(all(api.retainSourceFile.gen(fromFile.sourceFile))); - context.after(() => retained.dispose()); - assert.equal(fromText.sourceFile.text, "export const generated = true;"); - assert.equal(fromFile.sourceFile.text, parityFiles["/src/index.ts"]); - assert.strictEqual(retained.sourceFile, fromFile.sourceFile); - assert.deepEqual(requestBatches, [ - ["initialize"], - ["createSourceFile", "createSourceFileFromFile"], - ["retainSourceFile"], - ]); - }); - - test("all and defer yield discriminated host messages without starting children", () => { - let started = false; - function* child() { - started = true; - return "child"; - } - const joined = child(); - const deferred = child(); - assert.deepEqual(all(joined).next(), { done: false, value: { method: "__all", generators: [joined] } }); - assert.deepEqual(defer(deferred).next(), { done: false, value: { method: "__defer", deferred } }); - const generators: APIRequestGenerator[] = [all(joined), defer(deferred)]; - for (const generator of generators) { - const state = generator.next(); - if (state.done || !("method" in state.value)) assert.fail("Expected a host message"); - switch (state.value.method) { - case "__all": - assert.deepEqual(state.value.generators, [joined]); - break; - case "__defer": - assert.strictEqual(state.value.deferred, deferred); - break; - default: { - const request: APIRequest = state.value; - assert.fail(`Unexpected API request: ${request.method}`); - } - } - } - assert.equal(started, false); - }); - - test("all preserves generator protocol behavior", () => { - let started = false; - function* child() { - started = true; - return "child"; - } - const generator = child(); - const joined = all(generator); - assert.strictEqual(joined[globalThis.Symbol.iterator](), joined); - assert.deepEqual(joined.next(["ignored"]), { done: false, value: { method: "__all", generators: [generator] } }); - const results: [string] = ["result"]; - assert.deepEqual(joined.next(results), { done: true, value: results }); - assert.deepEqual(joined.next(["ignored"]), { done: true, value: undefined }); - assert.deepEqual(joined.return(results), { done: true, value: results }); - - for (const begin of [false, true]) { - const returned = all(generator); - const thrown = all(generator); - if (begin) { - returned.next(); - thrown.next(); - } - assert.deepEqual(returned.return(results), { done: true, value: results }); - assert.deepEqual(returned.next(), { done: true, value: undefined }); - const error = new Error("failed"); - assert.throws(() => thrown.throw(error), actual => actual === error); - assert.deepEqual(thrown.next(), { done: true, value: undefined }); - } - assert.equal(started, false); - }); - - test("defer preserves generator protocol behavior", () => { - let started = false; - function* child() { - started = true; - return "child"; - } - const generator = child(); - const deferred = defer(generator); - assert.strictEqual(deferred[globalThis.Symbol.iterator](), deferred); - assert.deepEqual(deferred.next("ignored"), { done: false, value: { method: "__defer", deferred: generator } }); - assert.deepEqual(deferred.next("ignored"), { done: true, value: undefined }); - assert.deepEqual(deferred.next("ignored"), { done: true, value: undefined }); - - for (const begin of [false, true]) { - const returned = defer(generator); - const thrown = defer(generator); - const disposed = defer(generator); - if (begin) { - returned.next(); - thrown.next(); - disposed.next(); - } - assert.deepEqual(returned.return(undefined), { done: true, value: undefined }); - assert.deepEqual(returned.next(), { done: true, value: undefined }); - const error = new Error("failed"); - assert.throws(() => thrown.throw(error), actual => actual === error); - assert.deepEqual(thrown.next(), { done: true, value: undefined }); - assert.ok(globalThis.Symbol.dispose in disposed); - const dispose = disposed[globalThis.Symbol.dispose]; - assert.ok(typeof dispose === "function"); - dispose.call(disposed); - assert.deepEqual(disposed.next(), { done: true, value: undefined }); - } - assert.equal(started, false); - }); - - test("retains deferred branding after completion", () => { - let completed = false; - function* child(): Generator { - const result = yield { method: "request", params: null } as unknown as APIRequest; - completed = true; - return result; - } - const deferred = defer(child()); - const results: [] = executeRequestGenerators([deferred] as const, requests => requests.map(request => ({ result: request.method }))); - assert.deepEqual(results, []); - assert.equal(completed, true); - const noRequests = () => assert.fail("Unexpected request round"); - assert.deepEqual(executeRequestGenerators([deferred], noRequests), []); - assert.throws(() => executeRequestGenerators([deferred, deferred], noRequests), /same generator instance more than once/); - }); - - test("joins nested, empty, and synchronously completed groups in result order", () => { - function* completed(value: string) { - return value; - } - function* request(value: string, rounds: number): Generator { - for (let round = 0; round < rounds; round++) { - yield { method: value, params: null } as unknown as APIRequest; - } - return value; - } - const batches: string[][] = []; - const results = executeRequestGenerators([ - all(request("slow", 2), all(), completed("sync"), all(request("fast", 1), defer(request("background", 3)))), - ], requests => { - batches.push(requests.map(request => request.method)); - return requests.map(request => ({ result: request.method })); - }); - assert.deepEqual(results, [["slow", [], "sync", ["fast"]]]); - assert.equal(batches.length, 3); - assert.deepEqual(batches.map(batch => [...batch].sort()), [["background", "fast", "slow"], ["background", "slow"], ["background"]]); - }); - - test("preserves tuple results through all and any generator types", () => { - function* numberResult() { - return 42; - } - function* stringResult() { - return "result"; - } - const joined: AllAPIRequestGenerator<[number, [string]]> = all(numberResult(), defer(stringResult()), all(stringResult())); - const generator: AnyAPIRequestGenerator<[number, [string]]> = joined; - const results: [[number, [string]]] = executeRequestGenerators([generator] as const, () => assert.fail("Unexpected request round")); - assert.deepEqual(results, [[42, ["result"]]]); - - const mixed: (APIRequestGenerator | AllAPIRequestGenerator<[string]> | DeferredAPIRequestGenerator)[] = [ - numberResult(), - all(stringResult()), - defer(stringResult()), - ]; - const arrayResults: (number | [string])[] = executeRequestGenerators(mixed, () => assert.fail("Unexpected request round")); - assert.deepEqual(arrayResults, [42, ["result"]]); - - const variadic: readonly [APIRequestGenerator, ...AllAPIRequestGenerator<[string]>[]] = [numberResult(), all(stringResult()), all(stringResult())]; - const variadicResults: (number | [string])[] = executeRequestGenerators(variadic, () => assert.fail("Unexpected request round")); - assert.deepEqual(variadicResults, [42, ["result"], ["result"]]); - }); - - test("preserves sibling order across repeated nested joins", () => { - function* request(method: string): Generator { - return yield { method, params: null } as unknown as APIRequest; - } - function* foreground() { - for (let round = 0; round < 3; round++) { - yield* all(all(request("first")), request("second")); - } - } - function* sibling() { - for (let round = 0; round < 3; round++) yield* request("sibling"); - } - const batches: string[][] = []; - executeRequestGenerators([foreground(), sibling()], requests => { - batches.push(requests.map(request => request.method)); - return requests.map(request => ({ result: request.method })); - }); - assert.deepEqual(batches, Array.from({ length: 3 }, () => ["first", "second", "sibling"])); - }); - - for (const failBackground of [false, true]) { - test(`preserves root all ordering with ${failBackground ? "failing" : "successful"} deferred work`, () => { - for (const depth of [1, 4]) { - const events: string[] = []; - const batches: string[][] = []; - function* request(method: string): Generator { - const result = yield { method, params: null } as unknown as APIRequest; - events.push(method); - return result; - } - function* foreground() { - yield* defer(request("background")); - return yield* request("foreground"); - } - function* sibling() { - try { - return yield* request("sibling"); - } - finally { - events.push("sibling cleanup"); - } - } - let joined: APIRequestGenerator = all(foreground(), sibling()); - let expected: unknown = ["foreground", "sibling"]; - for (let level = 1; level < depth; level++) { - joined = all(joined); - expected = [expected]; - } - const run = () => - executeRequestGenerators([joined], requests => { - batches.push(requests.map(request => request.method)); - return requests.map(request => - failBackground && request.method as string === "background" - ? { result: undefined, error: "background failed" } - : { result: request.method } - ); - }); - if (failBackground) assert.throws(run, /background failed/); - else assert.deepEqual(run(), [expected]); - assert.deepEqual(batches, [["foreground", "sibling", "background"]]); - assert.deepEqual( - events, - failBackground - ? ["foreground", "sibling", "sibling cleanup"] - : ["foreground", "sibling", "sibling cleanup", "background"], - ); - } - }); - } - - test("preserves singleton join continuations through requests, errors, and deferred work", () => { - const events: string[] = []; - function* request(method: string): Generator { - return yield { method, params: null } as unknown as APIRequest; - } - function* recovering() { - try { - yield* all(all(request("bad"))); - assert.fail("Expected the request to fail"); - } - catch (error) { - assert.equal((error as Error).message, "failed"); - return yield* all(request("recovered"), all(request("sibling"))); - } - } - function* background() { - yield* request("background"); - events.push("background finished"); - } - function* foreground() { - const empty: [] = yield* all(defer(background())); - assert.deepEqual(empty, []); - const result = yield* all(all(recovering())); - events.push("foreground finished"); - return result; - } - const batches: string[][] = []; - const results = executeRequestGenerators([foreground()], requests => { - batches.push(requests.map(request => request.method)); - return requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method }); - }); - assert.deepEqual(results, [[[["recovered", ["sibling"]]]]]); - assert.deepEqual(batches, [["bad", "background"], ["recovered", "sibling"]]); - assert.deepEqual(events, ["background finished", "foreground finished"]); - }); - - test("finishes joined foreground cleanup before deferred request errors", () => { - const events: string[] = []; - function* request(method: string): Generator { - yield { method, params: null } as unknown as APIRequest; - } - function* foreground() { - try { - yield* defer(request("background")); - yield* all(request("foreground")); - events.push("foreground finished"); - } - finally { - events.push("foreground cleanup"); - } - } - assert.throws( - () => executeRequestGenerators([foreground()], requests => requests.map(request => request.method as string === "background" ? { result: undefined, error: "background failed" } : { result: true })), - /background failed/, - ); - assert.deepEqual(events, ["foreground finished", "foreground cleanup"]); - }); - - test("completes root all helpers before detached work finishes", () => { - let joined: AllAPIRequestGenerator<[string]>; - function* foreground(): Generator { - return yield { method: "foreground", params: null } as unknown as APIRequest; - } - function* background(): Generator { - yield { method: "background", params: null } as unknown as APIRequest; - assert.deepEqual(joined.next(["unexpected"]), { done: true, value: undefined }); - } - joined = all(foreground(), defer(background())); - assert.deepEqual(executeRequestGenerators([joined], requests => requests.map(request => ({ result: request.method }))), [["foreground"]]); - }); - - test("throws nested all failures into the waiting parent", () => { - const events: string[] = []; - function* failing(): Generator { - yield { method: "bad", params: null } as unknown as APIRequest; - } - function* parent() { - try { - yield* all(all(failing())); - } - catch (error) { - events.push((error as Error).message); - return "recovered"; - } - return "unexpected"; - } - assert.deepEqual(executeRequestGenerators([parent()], requests => requests.map(() => ({ result: undefined, error: "failed" }))), ["recovered"]); - assert.deepEqual(events, ["failed"]); - }); - - test("cancels failed join siblings but finishes detached and unrelated work", () => { - const events: string[] = []; - function* request(method: string): Generator { - const result = yield { method, params: null } as unknown as APIRequest; - events.push(method); - return result; - } - function* parent() { - try { - yield* all(defer(request("background")), request("bad"), all(request("cancelled"))); - } - catch { - return yield* request("recovery"); - } - } - assert.deepEqual( - executeRequestGenerators([parent(), request("unrelated")], requests => requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method })), - ["recovery", "unrelated"], - ); - assert.deepEqual(events, ["background", "unrelated", "recovery"]); - }); - - test("catches synchronous join failures including undefined", () => { - function* failing(): APIRequestGenerator { - throw undefined; - } - function* parent() { - try { - yield* all(all(failing())); - } - catch (error) { - assert.strictEqual(error, undefined); - return "recovered"; - } - return "unexpected"; - } - assert.deepEqual(executeRequestGenerators([parent()], () => assert.fail("Unexpected request round")), ["recovered"]); - }); - - test("does not route synchronous deferred failures through a waiting join", () => { - const events: string[] = []; - function* failing(): APIRequestGenerator { - throw new Error("deferred failure"); - } - function* parent() { - try { - yield* all(defer(failing())); - } - catch { - events.push("caught by parent"); - } - } - assert.throws( - () => executeRequestGenerators([parent()], () => assert.fail("Unexpected request round")), - /deferred failure/, - ); - assert.deepEqual(events, []); - }); - - test("rejects generator reuse across joins and deferred work", () => { - function* request(): Generator { - return yield { method: "request", params: null } as unknown as APIRequest; - } - for (const wrap of [all, defer]) { - const generator = request(); - assert.throws( - () => executeRequestGenerators([all(generator), wrap(generator)], requests => requests.map(request => ({ result: request.method }))), - /same generator instance more than once/, - ); - } - }); - - test("rejects completed generator reuse after a join finishes", () => { - function* request(): Generator { - return yield { method: "request", params: null } as unknown as APIRequest; - } - for (const wrap of [all, defer]) { - const generator = request(); - function* parent() { - yield* all(generator); - yield* wrap(generator); - } - let requestsExecuted = 0; - assert.throws( - () => - executeRequestGenerators([parent()], requests => { - requestsExecuted += requests.length; - return requests.map(request => ({ result: request.method })); - }), - /same generator instance more than once/, - ); - assert.equal(requestsExecuted, 1); - } - }); - - test("tracks all identity independently across executors", () => { - const joined = all(); - const noRequests = () => assert.fail("Unexpected request round"); - function* parent() { - assert.deepEqual(yield* all(joined), [[]]); - assert.deepEqual(executeRequestGenerators([joined], noRequests), [undefined]); - try { - yield* all(joined); - assert.fail("Expected duplicate generator rejection"); - } - catch (error) { - assert.match((error as Error).message, /same generator instance more than once/); - } - } - executeRequestGenerators([parent()], noRequests); - assert.deepEqual(executeRequestGenerators([joined], noRequests), [undefined]); - assert.throws(() => executeRequestGenerators([joined, joined], noRequests), /same generator instance more than once/); - }); - - test("deduplicates initialization across nested joins", () => { - function* request(method: string): Generator { - return yield { method, params: null } as unknown as APIRequest; - } - const batches: string[][] = []; - const results = executeRequestGenerators([all(request("initialize"), all(request("initialize"), request("other"))), request("other")], requests => { - batches.push(requests.map(request => request.method)); - return requests.map((request, index) => ({ result: `${request.method}:${index}` })); - }); - assert.deepEqual(batches, [["initialize", "other", "other"]]); - assert.deepEqual(results, [["initialize:0", ["initialize:0", "other:1"]], "other:2"]); - }); - - test("composes request generators with all", context => { - const api = spawnAPI(parityFiles); - const requestBatches: string[][] = []; - observeRequestBatches(api, requestBatches, context); - function* getStrictOption() { - const commandLine = yield* api.parseCommandLine.gen(["--strict"]); - const config = yield* api.readConfigFile.gen("/tsconfig.json"); - const parsed = yield* api.parseJsonConfigFileContent.gen(config.config, { configFileName: "/tsconfig.json" }); - return { strict: commandLine.options.strict, fileNames: parsed.fileNames }; - } - function* getTranspiledText() { - const config = yield* api.readConfigFile.gen("/tsconfig.json"); - const parsed = yield* api.parseJsonConfigFileContent.gen(config.config, { configFileName: "/tsconfig.json" }); - const output = yield* api.transpileModule.gen("const value: string = 'ok';", { compilerOptions: parsed.options }); - return output.outputText; - } - - try { - const [[config, outputText]] = api.batch(all(getStrictOption(), getTranspiledText())); - assert.equal(config.strict, true); - assert.deepEqual([...config.fileNames].sort(), ["/src/bind.ts", "/src/index.ts", "/src/models.ts", "/src/suggestions.ts", "/src/syntax.ts"]); - assert.match(outputText, /const value = ['"]ok['"]/); - assert.deepEqual(requestBatches, [ - ["initialize"], - ["parseCommandLine", "readConfigFile"], - ["readConfigFile", "parseJsonConfigFileContent"], - ["parseJsonConfigFileContent", "transpileModule"], - ]); - } - finally { - api.close(); - } - }); - - test("throws request errors into generators", () => { - const api = spawnAPI(); - const events: string[] = []; - function* requestWithCleanup(): Generator { - try { - yield { method: "unknown", params: null } as unknown as APIRequest; - return "unexpected"; - } - catch { - events.push("caught"); - return "recovered"; - } - finally { - events.push("finally"); - } - } - - try { - assert.deepEqual(api.batch(requestWithCleanup()), ["recovered"]); - assert.deepEqual(events, ["caught", "finally"]); - } - finally { - api.close(); - } - }); - - test("lazily caches generator-enabled methods", () => { - const api = spawnAPI(); - const prototype = Object.getPrototypeOf(api); - try { - assert.equal(Object.hasOwn(api, "parseCommandLine"), false); - assert.equal(typeof Object.getOwnPropertyDescriptor(prototype, "parseCommandLine")?.get, "function"); - - const method = api.parseCommandLine; - assert.strictEqual(api.parseCommandLine, method); - assert.equal(Object.hasOwn(api, "parseCommandLine"), true); - assert.equal(Object.keys(api).includes("parseCommandLine"), false); - assert.equal(typeof method.gen, "function"); - } - finally { - api.close(); - } - }); - - test("advances generators through multiple request rounds", () => { - const api = spawnAPI(); - try { - const [commandLine, config] = api.batch( - api.parseCommandLine.gen(["--strict"]), - api.readConfigFile.gen("/tsconfig.json"), - ); - - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - } - finally { - api.batch(api.close.gen()); - api.close(); - } - }); - - test("transparently paginates batch responses", () => { - const api = spawnAPI(undefined, { maxResponseBytesPerPage: 1 }); - try { - const [strict, config, noImplicitAny] = api.batch( - api.parseCommandLine.gen(["--strict"]), - api.readConfigFile.gen("/tsconfig.json"), - api.parseCommandLine.gen(["--noImplicitAny"]), - ); - - assert.equal(strict.options.strict, true); - assert.deepEqual(config.config, {}); - assert.equal(noImplicitAny.options.noImplicitAny, true); - } - finally { - api.close(); - } - }); - - test("transparently paginates responses at the default batch size limit", () => { - const largeConfigValue = "x".repeat(5_000_000); - const requestCount = 64; - const api = spawnAPI({ "/large.json": JSON.stringify({ largeConfigValue }) }, { collectTiming: true }); - try { - api.parseCommandLine([]); - api.resetTimingInfo(); - - const configs = api.batch(...Array.from({ length: requestCount }, () => api.readConfigFile.gen("/large.json"))); - assert.equal(configs.length, requestCount); - for (const config of configs) { - assert.deepEqual(config.config, { largeConfigValue }); - } - - const timing = api.getTimingInfo(); - assert.equal(timing.totals.requestCount, 2); - assert.deepEqual(timing.recentRequests.map(request => request.method), ["batchRequests", "batchRequests"]); - } - finally { - api.close(); - } - }); - - test("executes deferred generators without returning their results", context => { - const api = spawnAPI(); - const requestBatches: string[][] = []; - observeRequestBatches(api, requestBatches, context); - function* runConcurrentRequests() { - yield* defer(api.parseCommandLine.gen(["--strict"])); - yield* defer(api.readConfigFile.gen("/tsconfig.json")); - return yield* all( - api.parseCommandLine.gen(["--target", "esnext"]), - api.readConfigFile.gen("/base.json"), - ); - } - - try { - const [[[commandLine, config]]] = api.batch(all(runConcurrentRequests())); - assert.equal(commandLine.options.target, 99); - assert.deepEqual(config.config, {}); - assert.deepEqual(requestBatches, [ - ["initialize"], - ["parseCommandLine", "readConfigFile", "parseCommandLine", "readConfigFile"], - ]); - - const [onlyConfig] = api.batch( - defer(api.parseCommandLine.gen(["--strict"])), - api.readConfigFile.gen("/tsconfig.json"), - ); - assert.deepEqual(onlyConfig.config, {}); - } - finally { - api.close(); - } - }); - - test("waits for deferred work spawned after a request", () => { - const api = spawnAPI(); - const events: string[] = []; - function* backgroundWork() { - events.push("started"); - yield* api.parseCommandLine.gen(["--strict"]); - events.push("completed"); - } - function* foregroundWork() { - const config = yield* api.readConfigFile.gen("/tsconfig.json"); - yield* defer(backgroundWork()); - events.push("foreground completed"); - return config; - } - - try { - const [config] = api.batch(foregroundWork()); - assert.deepEqual(config.config, {}); - assert.deepEqual(events, ["started", "foreground completed", "completed"]); - } - finally { - api.close(); - } - }); - - test("does not block on deferred work from a nested all", () => { - const api = spawnAPI(); - const events: string[] = []; - function* backgroundWork() { - yield* api.readConfigFile.gen("/base.json"); - yield* api.readConfigFile.gen("/tsconfig.json"); - yield* api.readConfigFile.gen("/base.json"); - events.push("background completed"); - } - function* nestedWork() { - yield* defer(backgroundWork()); - return yield* api.parseCommandLine.gen(["--strict"]); - } - function* foregroundWork() { - const [commandLine] = yield* all(nestedWork()); - events.push("nested all completed"); - const config = yield* api.readConfigFile.gen("/tsconfig.json"); - events.push("foreground completed"); - return { commandLine, config }; - } - - try { - api.parseCommandLine([]); - const [{ commandLine, config }] = api.batch(foregroundWork()); - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - assert.deepEqual(events, ["nested all completed", "foreground completed", "background completed"]); - } - finally { - api.close(); - } - }); - - test("omits deferred results in any batch position", () => { - const api = spawnAPI(); - let synchronousWorkCompleted = false; - function* synchronousWork() { - synchronousWorkCompleted = true; - return "ignored"; - } - - try { - const [commandLine, config] = api.batch( - api.parseCommandLine.gen(["--strict"]), - defer(api.readConfigFile.gen("/base.json")), - api.readConfigFile.gen("/tsconfig.json"), - defer(synchronousWork()), - ); - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - assert.equal(synchronousWorkCompleted, true); - } - finally { - api.close(); - } - }); - - test("throws request errors into deferred generators", () => { - const api = spawnAPI(); - const events: string[] = []; - function* requestWithCleanup(): Generator { - try { - yield { method: "unknown", params: null } as unknown as APIRequest; - } - catch { - events.push("caught"); - } - finally { - events.push("finally"); - } - } - - try { - assert.deepEqual(api.batch(defer(requestWithCleanup())), []); - assert.deepEqual(events, ["caught", "finally"]); - } - finally { - api.close(); - } - }); - - test("batch execution deduplicates only initialize requests within a round", () => { - const requestBatches: string[][] = []; - function* request(method: string): Generator { - return yield { method, params: null } as unknown as APIRequest; - } - - const results = executeRequestGenerators( - [request("initialize"), request("initialize"), request("other"), request("other")], - requests => { - requestBatches.push(requests.map(request => request.method)); - return requests.map(request => ({ result: request.method })); - }, - ); - - assert.deepEqual(requestBatches, [["initialize", "other", "other"]]); - assert.deepEqual(results, ["initialize", "initialize", "other", "other"]); - }); - - test("does not execute an empty request round", () => { - let executions = 0; - function* completed(value: string) { - return value; - } - - assert.deepEqual( - executeRequestGenerators([], () => { - executions++; - return []; - }), - [], - ); - assert.deepEqual( - executeRequestGenerators([completed("first"), completed("second")], () => { - executions++; - return []; - }), - ["first", "second"], - ); - assert.equal(executions, 0); - }); - - test("maps deduplicated responses back into request groups", () => { - const requestBatches: string[][] = []; - function* groupedRequests(): Generator { - const responses = yield [ - { method: "initialize", params: null }, - { method: "other", params: null }, - { method: "initialize", params: null }, - ] as unknown as readonly APIRequest[]; - return responses.map(response => response.result); - } - function* initializeRequest(): Generator { - return yield { method: "initialize", params: null } as unknown as APIRequest; - } - - const results = executeRequestGenerators([groupedRequests(), initializeRequest()], requests => { - requestBatches.push(requests.map(request => request.method)); - return requests.map((request, index) => ({ result: `${request.method}:${index}` })); - }); - - assert.deepEqual(requestBatches, [["initialize", "other"]]); - assert.deepEqual(results, [["initialize:0", "other:1", "initialize:0"], "initialize:0"]); - }); - - test("isolates handled errors from other generators in the same round", () => { - const requestBatches: string[][] = []; - function* recoveringRequest(): Generator { - try { - yield { method: "bad", params: null } as unknown as APIRequest; - } - catch { - return yield { method: "recovery", params: null } as unknown as APIRequest; - } - return "unexpected"; - } - function* successfulRequest(): Generator { - return yield { method: "good", params: null } as unknown as APIRequest; - } - - const results = executeRequestGenerators([recoveringRequest(), successfulRequest()], requests => { - requestBatches.push(requests.map(request => request.method)); - return requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method }); - }); - - assert.deepEqual(requestBatches, [["bad", "good"], ["recovery"]]); - assert.deepEqual(results, ["recovery", "good"]); - }); - - test("executes recursively deferred generators", () => { - const events: string[] = []; - function* grandchild() { - yield { method: "grandchild", params: null } as unknown as APIRequest; - events.push("grandchild completed"); - } - function* child() { - yield* defer(grandchild()); - yield { method: "child", params: null } as unknown as APIRequest; - events.push("child completed"); - } - function* parent() { - yield* defer(child()); - yield { method: "parent", params: null } as unknown as APIRequest; - events.push("parent completed"); - } - - executeRequestGenerators([parent()], requests => requests.map(request => ({ result: request.method }))); - - assert.deepEqual(events, ["parent completed", "child completed", "grandchild completed"]); - }); - - test("surfaces deferred errors after the parent completes", () => { - const events: string[] = []; - function* background() { - yield { method: "background", params: null } as unknown as APIRequest; - } - function* parent() { - yield* defer(background()); - events.push("parent completed"); - } - - assert.throws( - () => executeRequestGenerators([parent()], requests => requests.map(() => ({ result: undefined, error: "deferred failure" }))), - /deferred failure/, - ); - assert.deepEqual(events, ["parent completed"]); - }); - - test("appends deferred work after the parent request", () => { - const requestBatches: string[][] = []; - function* background() { - yield { method: "background", params: null } as unknown as APIRequest; - } - function* parent() { - yield* defer(background()); - yield { method: "parent", params: null } as unknown as APIRequest; - } - - executeRequestGenerators([parent()], requests => { - requestBatches.push(requests.map(request => request.method)); - return requests.map(request => ({ result: request.method })); - }); - - assert.deepEqual(requestBatches, [["parent", "background"]]); - }); - - test("rejects repeated generator instances", () => { - function* request(): Generator { - return yield { method: "request", params: null } as unknown as APIRequest; - } - const generator = request(); - - assert.throws( - () => executeRequestGenerators([generator, generator], requests => requests.map(request => ({ result: request.method }))), - /same generator instance more than once/, - ); - }); - - test("yields source file metadata requests on cache misses", () => { - const api = spawnAPI(); - try { - using snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const sourceFile = program.getSourceFile("/src/index.ts")!; - const state = program.getSourceFileMetadataByPath.gen(sourceFile.path).next(); - - if (state.done) assert.fail("Expected getSourceFileMetadataByPath.gen() to yield a request"); - assert.equal(state.value.method, "getSourceFileMetadata"); - } - finally { - api.close(); - } - }); - - test("uses generators attached to sync API methods", () => { - const api = spawnAPI(); - try { - using snapshot = api.batch(api.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const node = cast( - cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, - isNamedImports, - ).elements[0].name; - - const [defaultProject, sourceFileNames] = api.batch( - snapshot.getDefaultProjectForFile.gen("/src/index.ts"), - project.program.getSourceFileNames.gen(), - ); - assert.strictEqual(defaultProject, project); - assert.ok(sourceFileNames.includes(toRootedFilePath("/src/foo.ts", undefined))); - assert.ok(sourceFileNames.includes(toRootedFilePath("/src/index.ts", undefined))); - - const [symbol, type] = api.batch( - project.checker.getSymbolAtLocation.gen(node), - project.checker.getTypeAtLocation.gen(node), - ); - const syncSymbol = project.checker.getSymbolAtLocation(node); - const syncType = project.checker.getTypeAtLocation(node); - - assert.ok(symbol); - assert.ok(syncSymbol); - assert.equal(symbol.name, "foo"); - assert.strictEqual(symbol, syncSymbol); - assert.strictEqual(type, syncType); - assert.ok(symbol.flags & SymbolFlags.Alias); - assert.ok(type.flags & TypeFlags.NumberLiteral); - assert.equal(Object.hasOwn(syncType, "getProperties"), false); - assert.equal(typeof Object.getOwnPropertyDescriptor(Object.getPrototypeOf(syncType), "getProperties")?.get, "function"); - - const [parent, properties] = api.batch( - syncSymbol.getParent.gen(), - syncType.getProperties.gen(), - ); - assert.equal(parent, undefined); - assert.ok(properties.some(property => property.name === "toString")); - assert.equal(Object.hasOwn(syncType, "getProperties"), true); - assert.equal(Object.keys(syncType).includes("getProperties"), false); - } - finally { - api.batch(api.close.gen()); - api.close(); - } - }); - - test("keeps every publicly reachable generator-backed method in sync", () => { - const api = spawnAPI(parityFiles); - try { - using snapshot = api.batch(api.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const { checker, languageService, program } = project; - const { printer } = api; - const indexFile = program.getSourceFile("/src/index.ts")!; - const modelsFile = program.getSourceFile("/src/models.ts")!; - - const importDeclaration = cast(indexFile.statements[0], isImportDeclaration); - const importSpecifier = cast(importDeclaration.moduleSpecifier, isStringLiteral); - const typeReferenceDirective = indexFile.typeReferenceDirectives[0]; - const importedNames = cast(importDeclaration.importClause?.namedBindings, isNamedImports); - const importedDerived = importedNames.elements.find(element => element.name.text === "Derived")!.name; - const exportDeclaration = cast(indexFile.statements[1], isExportDeclaration); - const exportSpecifier = cast(exportDeclaration.exportClause, isNamedExports).elements[0]; - const combineDeclaration = cast(indexFile.statements[2], isFunctionDeclaration); - const derivedDeclaration = cast( - cast(indexFile.statements[3], isVariableStatement).declarationList.declarations[0], - isVariableDeclaration, - ); - const boxDeclaration = cast( - cast(indexFile.statements[4], isVariableStatement).declarationList.declarations[0], - isVariableDeclaration, - ); - const shorthandDeclaration = cast( - cast(indexFile.statements[5], isVariableStatement).declarationList.declarations[0], - isVariableDeclaration, - ); - const shorthand = cast( - cast(shorthandDeclaration.initializer, isObjectLiteralExpression).properties[0], - isShorthandPropertyAssignment, - ); - const calledDeclaration = cast( - cast(indexFile.statements[6], isVariableStatement).declarationList.declarations[0], - isVariableDeclaration, - ); - const callExpression = cast(calledDeclaration.initializer, isCallExpression); - const interfaceDeclaration = cast(modelsFile.statements[0], isInterfaceDeclaration); - const derivedClassDeclaration = cast(modelsFile.statements[2], isClassDeclaration); - const boxedAlias = cast(modelsFile.statements[3], isTypeAliasDeclaration); - const tupleAlias = cast(modelsFile.statements[4], isTypeAliasDeclaration); - const arrayAlias = cast(modelsFile.statements[5], isTypeAliasDeclaration); - const conditionalAlias = cast(modelsFile.statements[6], isTypeAliasDeclaration); - const indexedAlias = cast(modelsFile.statements[7], isTypeAliasDeclaration); - const indexAlias = cast(modelsFile.statements[8], isTypeAliasDeclaration); - const unionAlias = cast(modelsFile.statements[9], isTypeAliasDeclaration); - const enumDeclaration = cast(modelsFile.statements[10], isEnumDeclaration); - const mappedAlias = cast(modelsFile.statements[12], isTypeAliasDeclaration); - - const importedDerivedSymbol = checker.getSymbolAtLocation(importedDerived)!; - const combineSymbol = checker.getSymbolAtLocation(combineDeclaration.name!)!; - const localCombineSymbol = checker.getSymbolsInScope(combineDeclaration, SymbolFlags.Function).find(symbol => symbol.name === "combine")!; - const derivedSymbol = checker.getSymbolAtLocation(cast(derivedDeclaration.name, isIdentifier))!; - const interfaceSymbol = checker.getSymbolAtLocation(interfaceDeclaration.name)!; - const derivedClassSymbol = checker.getSymbolAtLocation(derivedClassDeclaration.name!)!; - const moduleSymbol = checker.getSymbolOfSourceFile("/src/models.ts")!; - const unimportedSymbol = checker.getMemberInModuleExports(moduleSymbol, "Unimported")!; - const interfaceType = checker.getDeclaredTypeOfSymbol(interfaceSymbol) as InterfaceType; - const derivedType = checker.getDeclaredTypeOfSymbol(derivedClassSymbol) as InterfaceType; - const derivedConstructorType = checker.getTypeOfSymbol(derivedClassSymbol); - const boxedType = checker.getTypeFromTypeNode(boxedAlias.type) as TypeReference; - const boxedOptSymbol = checker.getPropertyOfType(boxedType, "opt"); - assert.ok(boxedOptSymbol); - const tupleType = checker.getTypeFromTypeNode(tupleAlias.type); - const arrayType = checker.getTypeFromTypeNode(arrayAlias.type); - const conditionalType = checker.getTypeFromTypeNode(conditionalAlias.type) as ConditionalType; - const indexedType = checker.getTypeFromTypeNode(indexedAlias.type) as IndexedAccessType; - checker.getTypeFromTypeNode(indexAlias.type); - const unionType = checker.getTypeFromTypeNode(unionAlias.type); - const typeParameter = checker.getTypeAtLocation(combineDeclaration.typeParameters![0].name) as TypeParameter; - const literalType = checker.getTypeAtLocation(enumDeclaration.members[0].name) as LiteralType; - const substitutionType = conditionalType.getTrueType() as SubstitutionType; - const mappedType = checker.getTypeFromTypeNode(mappedAlias.type) as MappedType; - const signature = checker.getSignatureFromDeclaration(combineDeclaration); - const predicateDeclaration = indexFile.statements.find(statement => isFunctionDeclaration(statement) && statement.name?.text === "isDerived")!; - const predicateSignature = checker.getSignatureFromDeclaration(predicateDeclaration); - const badCallDeclaration = indexFile.statements - .filter(isVariableStatement) - .flatMap(statement => [...statement.declarationList.declarations]) - .find(declaration => isIdentifier(declaration.name) && declaration.name.text === "badCall")!; - const unknownSignature = checker.getResolvedSignature(cast(badCallDeclaration.initializer, isCallExpression)); - let argumentsIdentifier: Identifier | undefined; - let absentIdentifier: Identifier | undefined; - indexFile.forEachChild(function visit(node) { - if (isIdentifier(node)) { - if (node.text === "arguments") argumentsIdentifier = node; - if (node.text === "absent" && !absentIdentifier) absentIdentifier = node; - } - node.forEachChild(visit); - }); - assert.ok(argumentsIdentifier); - assert.ok(absentIdentifier); - const absentAlias = checker.getSymbolAtLocation(absentIdentifier); - assert.ok(absentAlias); - const unknownSymbol = checker.getAliasedSymbol(absentAlias); - const undefinedSymbol = checker.resolveName("undefined", SymbolFlags.Value, absentIdentifier); - const argumentsSymbol = checker.getResolvedSymbol(argumentsIdentifier); - assert.ok(unknownSymbol); - assert.ok(undefinedSymbol); - assert.ok(argumentsSymbol); - const constructSignature = derivedConstructorType.getConstructSignatures()[0]; - const derivedMemberSymbol = derivedType.getProperty("derived")!; - const nodeHandle = combineSymbol.valueDeclaration ?? combineSymbol.declarations[0]; - const completionPosition = parityFiles["/src/index.ts"].indexOf("semanticIssue"); - const temporaryProjects: string[] = []; - - const orderedArguments = Array.from({ length: 128 }, (_, index) => ["--strict", `--outDir=out-${index}`] as const); - const orderedGenerated = api.batch(...orderedArguments.map(args => api.parseCommandLine.gen(args))); - const orderedSync = orderedArguments.map(args => api.parseCommandLine(args)); - assertDeepArraysEquivalent(orderedGenerated, orderedSync, "large parseCommandLine batch"); - exercisedMethods.add("API.parseCommandLine"); - - const timingGeneratorAPI = spawnAPI(parityFiles, { collectTiming: true }); - const timingSyncAPI = spawnAPI(parityFiles, { collectTiming: true }); - timingGeneratorAPI.parseCommandLine(["--strict"]); - timingSyncAPI.parseCommandLine(["--strict"]); - assertTimingInfoEquivalent( - timingGeneratorAPI.batch(timingGeneratorAPI.getTimingInfo.gen())[0], - timingSyncAPI.getTimingInfo(), - "API.getTimingInfo", - ); - timingGeneratorAPI.batch(timingGeneratorAPI.resetTimingInfo.gen()); - timingSyncAPI.resetTimingInfo(); - assertTimingInfoEquivalent(timingGeneratorAPI.getTimingInfo(), timingSyncAPI.getTimingInfo(), "API.resetTimingInfo"); - exercisedMethods.add("API.getTimingInfo"); - exercisedMethods.add("API.resetTimingInfo"); - timingGeneratorAPI.close(); - timingSyncAPI.close(); - - assert.ok(project.getImportAdderEdits("/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]).length > 0); - assert.ok(program.getSyntacticDiagnostics("/src/syntax.ts").length > 0); - assert.ok(program.getBindDiagnostics("/src/bind.ts").length > 0); - assert.ok(program.getSuggestionDiagnostics("/src/suggestions.ts").length > 0); - assert.strictEqual(derivedMemberSymbol.getParent(), derivedClassSymbol); - assert.ok(checker.getTypePredicateOfSignature(predicateSignature)); - assert.equal(checker.isUnknownSymbol(unknownSymbol), true); - assert.equal(checker.isUndefinedSymbol(undefinedSymbol), true); - assert.equal(checker.isArgumentsSymbol(argumentsSymbol), true); - assert.equal(checker.isUnknownSignature(unknownSignature), true); - - const moduleResolutionSpec = { - fallback: "unresolved" as const, - entries: [{ moduleName: "models", result: { resolvedFileName: "/src/models.ts" } }], - }; - const moduleResolver = api.batch(api.createModuleResolver.gen( - { moduleResolution: ModuleResolutionKind.NodeNext }, - { moduleResolutions: moduleResolutionSpec }, - ))[0]; - exercisedMethods.add("API.createModuleResolver"); - - const cases: ParityCase[] = [ - parityCase("API", "parseConfigFile", api.parseConfigFile, assertDeepEquivalent, "/tsconfig.json"), - parityCase("API", "parseCommandLine", api.parseCommandLine, assertDeepEquivalent, ["--strict", "--noEmit"]), - parityCase("API", "readConfigFile", api.readConfigFile, assertDeepEquivalent, "/tsconfig.json"), - parityCase("API", "parseJsonConfigFileContent", api.parseJsonConfigFileContent, assertDeepEquivalent, { compilerOptions: { strict: true } }, { configDirectory: "/" }), - parityCase("API", "parseJsonConfigFileContent", api.parseJsonConfigFileContent, assertDeepEquivalent, { extends: "./base.json" }, { configFileName: "/tsconfig.json" }), - parityCase("API", "createSourceFile", api.createSourceFile, assertRetainedSourceFilesEquivalent, "/generated.ts", "export const generated = true;"), - parityCase("API", "createSourceFileFromFile", api.createSourceFileFromFile, assertRetainedSourceFilesEquivalent, "/src/index.ts"), - parityCase("API", "retainSourceFile", api.retainSourceFile, assertRetainedSourceFilesEquivalent, indexFile), - parityCase("API", "getSymbol", api.getSymbol, assertOptionalSymbolsEquivalent, combineDeclaration), - parityCase("API", "transpileModule", api.transpileModule, assertDeepEquivalent, "export const value: number = 1;", { compilerOptions: { module: 99 } }), - parityCase("API", "transpileModuleFromFile", api.transpileModuleFromFile, assertDeepEquivalent, "/src/index.ts"), - parityCase("API", "transpileDeclaration", api.transpileDeclaration, assertDeepEquivalent, "export function declared(value: string): number { return value.length; }"), - parityCase("API", "transpileDeclarationFromFile", api.transpileDeclarationFromFile, assertDeepEquivalent, "/src/index.ts"), - parityCase("API", "createSnapshot", api.createSnapshot as GeneratorMethod<[params: { openProject: string; }], Snapshot>, assertSnapshotsEquivalent, { openProject: "/tsconfig.json" }), - parityCase("API", "createProgram", api.createProgram, assertProgramsEquivalent, ["/src/index.ts"], { noLib: true }), - parityCase("API", "createBuildOrchestrator", api.createBuildOrchestrator, assertBuildOrchestratorsEquivalent, ["/tsconfig.json"], { cwd: "/" }), - parityCase("API", "runWithTemporaryFileUpdate", api.runWithTemporaryFileUpdate, assertDeepEquivalent, snapshot, "/src/index.ts", parityFiles["/src/index.ts"].replace("123", '"fixed"'), (temporarySnapshot: Snapshot) => { - temporaryProjects.push(temporarySnapshot.getProjects()[0].configFileName!); - }), - parityCase("Snapshot", "getDefaultProjectForFile", snapshot.getDefaultProjectForFile, assertOptionalProjectsEquivalent, "/src/index.ts"), - parityCase("ModuleResolver", "resolveModuleName", moduleResolver.resolveModuleName, assertDeepEquivalent, "models", "/src"), - parityCase("Snapshot", "update", snapshot.update, assertSnapshotsEquivalent, {}), - - parityCase("Project", "getImportAdderEdits", project.getImportAdderEdits, assertDeepEquivalent, "/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]), - parityCase("Project", "getImportEditsForSymbols", project.getImportEditsForSymbols, assertDeepEquivalent, "/src/index.ts", [unimportedSymbol]), - - parityCase("LanguageService", "getImportAdderEdits", languageService.getImportAdderEdits, assertDeepEquivalent, "/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]), - parityCase("LanguageService", "getImportEditsForSymbols", languageService.getImportEditsForSymbols, assertDeepEquivalent, "/src/index.ts", [unimportedSymbol], { isValidTypeOnlyUseSite: true }), - parityCase("LanguageService", "getReferencedSymbolsForNode", languageService.getReferencedSymbolsForNode, assertDeepEquivalent, combineDeclaration.name!, combineDeclaration.name!.end), - parityCase("LanguageService", "getSignatureUsage", languageService.getSignatureUsage, assertDeepEquivalent, combineDeclaration), - parityCase("LanguageService", "getCompletionsAtPosition", languageService.getCompletionsAtPosition, assertDeepEquivalent, "/src/index.ts", completionPosition, { includeSymbol: true }), - - parityCase("Program", "getSourceFile", program.getSourceFile, assertOptionalSourceFilesEquivalent, "/src/index.ts"), - parityCase("Program", "getModeForUsageLocation", program.getModeForUsageLocation, assertDeepEquivalent, "/src/index.ts", importSpecifier), - parityCase("Program", "getModeForResolutionAtIndex", program.getModeForResolutionAtIndex, assertDeepEquivalent, "/src/index.ts", 0), - parityCase("Program", "getResolvedModule", program.getResolvedModule, assertDeepEquivalent, "/src/index.ts", "./models.js", ModuleKind.CommonJS), - parityCase("Program", "getResolvedModuleFromModuleSpecifier", program.getResolvedModuleFromModuleSpecifier, assertDeepEquivalent, importSpecifier), - parityCase("Program", "getResolvedTypeReferenceDirective", program.getResolvedTypeReferenceDirective, assertDeepEquivalent, "/src/index.ts", "parity", ModuleKind.CommonJS), - parityCase("Program", "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective, assertDeepEquivalent, typeReferenceDirective, "/src/index.ts"), - parityCase("Program", "getSourceFileByPath", program.getSourceFileByPath, assertOptionalSourceFilesEquivalent, indexFile.path), - parityCase("Program", "getSourceFileNames", program.getSourceFileNames, assertDeepEquivalent), - parityCase("Program", "getSourceFileMetadata", program.getSourceFileMetadata, assertDeepEquivalent, "/src/index.ts"), - parityCase("Program", "getSourceFileMetadataByPath", program.getSourceFileMetadataByPath, assertDeepEquivalent, indexFile.path), - parityCase("Program", "isSourceFileFromExternalLibrary", program.isSourceFileFromExternalLibrary, assertDeepEquivalent, indexFile), - parityCase("Program", "isSourceFileDefaultLibrary", program.isSourceFileDefaultLibrary, assertDeepEquivalent, indexFile), - parityCase("Program", "getConfigFileNames", program.getConfigFileNames, assertDeepEquivalent), - parityCase("Program", "getConfigSourceFile", program.getConfigSourceFile, assertOptionalSourceFilesEquivalent, "/base.json"), - parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent), - parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent, "/src/syntax.ts"), - parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent, ["/src/syntax.ts", "/src/index.ts"]), - parityCase("Program", "getBindDiagnostics", program.getBindDiagnostics, assertDeepEquivalent, "/src/bind.ts"), - parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent), - parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent, "/src/index.ts"), - parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent, ["/src/index.ts", "/src/models.ts"]), - parityCase("Program", "getSuggestionDiagnostics", program.getSuggestionDiagnostics, assertDeepEquivalent, "/src/suggestions.ts"), - parityCase("Program", "getDeclarationDiagnostics", program.getDeclarationDiagnostics, assertDeepEquivalent, "/src/index.ts"), - parityCase("Program", "getProgramDiagnostics", program.getProgramDiagnostics, assertDeepEquivalent), - parityCase("Program", "getGlobalDiagnostics", program.getGlobalDiagnostics, assertDeepEquivalent), - parityCase("Program", "getConfigFileParsingDiagnostics", program.getConfigFileParsingDiagnostics, assertDeepEquivalent), - parityCase("Program", "emit", program.emit, assertDeepEquivalent), - parityCase("Program", "emitToString", program.emitToString, assertDeepEquivalent), - parityCase("Program", "getJavaScriptEmit", program.getJavaScriptEmit, assertDeepEquivalent, ["/src/index.ts"]), - parityCase("Program", "getDeclarationEmit", program.getDeclarationEmit, assertDeepEquivalent, ["/src/index.ts"]), - - parityCase("Checker", "getMergedSymbol", checker.getMergedSymbol, assertSymbolsEquivalent, interfaceSymbol), - parityCase("Checker", "getSymbolOfNode", checker.getSymbolOfNode, assertOptionalSymbolsEquivalent, interfaceDeclaration), - parityCase("Checker", "getSymbolOfNode", checker.getSymbolOfNode, assertOptionalSymbolsEquivalent, interfaceDeclaration.name), - parityCase("Checker", "getSymbolOfDeclaration", checker.getSymbolOfDeclaration, assertSymbolsEquivalent, interfaceDeclaration), - parityCase("Checker", "getParentOfSymbol", checker.getParentOfSymbol, assertOptionalSymbolsEquivalent, unimportedSymbol), - parityCase("Checker", "getSymbolAtLocation", selectGeneratorMethod<[node: Node], Symbol | undefined>(checker.getSymbolAtLocation), assertOptionalSymbolsEquivalent, importedDerived), - parityCase("Checker", "getSymbolAtLocation", checker.getSymbolAtLocation, assertOptionalSymbolArraysEquivalent, [importedDerived, combineDeclaration.name!]), - parityCase("Checker", "getSymbolAtPosition", selectGeneratorMethod<[file: string, position: number], Symbol | undefined>(checker.getSymbolAtPosition), assertOptionalSymbolsEquivalent, "/src/index.ts", importedDerived.pos), - parityCase("Checker", "getSymbolAtPosition", checker.getSymbolAtPosition, assertOptionalSymbolArraysEquivalent, "/src/index.ts", [importedDerived.pos, combineDeclaration.name!.pos]), - parityCase("Checker", "getSymbolOfSourceFile", selectGeneratorMethod<[file: string], Symbol | undefined>(checker.getSymbolOfSourceFile), assertOptionalSymbolsEquivalent, "/src/models.ts"), - parityCase("Checker", "getSymbolOfSourceFile", checker.getSymbolOfSourceFile, assertOptionalSymbolArraysEquivalent, ["/src/index.ts", "/src/models.ts"]), - parityCase("Checker", "getTypeOfSymbol", selectGeneratorMethod<[symbol: Symbol], Type>(checker.getTypeOfSymbol), assertTypesEquivalent, derivedClassSymbol), - parityCase("Checker", "getTypeOfSymbol", checker.getTypeOfSymbol, assertTypeArraysEquivalent, [derivedClassSymbol, combineSymbol]), - parityCase("Checker", "getDeclaredTypeOfSymbol", checker.getDeclaredTypeOfSymbol, assertTypesEquivalent, interfaceSymbol), - parityCase("Checker", "getReferencesToSymbolInFile", checker.getReferencesToSymbolInFile, assertNodeHandleArraysEquivalent, "/src/index.ts", derivedSymbol), - parityCase("Checker", "getReferencedSymbolsForNode", checker.getReferencedSymbolsForNode, assertDeepEquivalent, combineDeclaration.name!, combineDeclaration.name!.end), - parityCase("Checker", "getSignatureUsage", checker.getSignatureUsage, assertDeepEquivalent, combineDeclaration), - parityCase("Checker", "getCompletionsAtPosition", checker.getCompletionsAtPosition, assertDeepEquivalent, "/src/index.ts", completionPosition, { includeSymbol: true }), - parityCase("Checker", "getTypeAtLocation", selectGeneratorMethod<[node: Node], Type>(checker.getTypeAtLocation), assertTypesEquivalent, boxDeclaration.name), - parityCase("Checker", "getTypeAtLocation", checker.getTypeAtLocation, assertTypeArraysEquivalent, [boxDeclaration.name, combineDeclaration.name!]), - parityCase("Checker", "getSignaturesOfType", checker.getSignaturesOfType, assertSignatureArraysEquivalent, checker.getTypeAtLocation(combineDeclaration.name!), SignatureKind.Call), - parityCase("Checker", "getResolvedSignature", checker.getResolvedSignature, assertOptionalSignaturesEquivalent, callExpression), - parityCase("Checker", "getTypeAtPosition", selectGeneratorMethod<[file: string, position: number], Type | undefined>(checker.getTypeAtPosition), assertOptionalTypesEquivalent, "/src/index.ts", boxDeclaration.name.pos), - parityCase("Checker", "getTypeAtPosition", checker.getTypeAtPosition, assertOptionalTypeArraysEquivalent, "/src/index.ts", [boxDeclaration.name.pos, calledDeclaration.name.pos]), - parityCase("Checker", "resolveName", checker.resolveName, assertOptionalSymbolsEquivalent, "Derived", SymbolFlags.Type | SymbolFlags.Value, importedDerived), - parityCase("Checker", "resolveName", checker.resolveName, assertOptionalSymbolsEquivalent, "Derived", SymbolFlags.Type | SymbolFlags.Value, { document: "/src/index.ts", position: importedDerived.pos }), - parityCase("Checker", "getSymbolsInScope", checker.getSymbolsInScope, assertUnorderedSymbolArraysEquivalent, combineDeclaration, SymbolFlags.Value | SymbolFlags.Type), - parityCase("Checker", "getSymbolsInScope", checker.getSymbolsInScope, assertUnorderedSymbolArraysEquivalent, { document: "/src/index.ts", position: combineDeclaration.pos }, SymbolFlags.Value), - parityCase("Checker", "getResolvedSymbol", checker.getResolvedSymbol, assertOptionalSymbolsEquivalent, importedDerived), - parityCase("Checker", "getContextualType", checker.getContextualType, assertOptionalTypesEquivalent, boxDeclaration.initializer!), - parityCase("Checker", "getContextualTypeForArgumentAtIndex", checker.getContextualTypeForArgumentAtIndex, assertOptionalTypesEquivalent, callExpression, 0), - parityCase("Checker", "getAwaitedType", checker.getAwaitedType, assertOptionalTypesEquivalent, interfaceType), - parityCase("Checker", "getBaseTypeOfLiteralType", checker.getBaseTypeOfLiteralType, assertTypesEquivalent, literalType), - parityCase("Checker", "getNonNullableType", checker.getNonNullableType, assertTypesEquivalent, interfaceType), - parityCase("Checker", "getTypeFromTypeNode", checker.getTypeFromTypeNode, assertTypesEquivalent, boxedAlias.type), - parityCase("Checker", "getWidenedType", checker.getWidenedType, assertTypesEquivalent, literalType), - parityCase("Checker", "getParameterType", checker.getParameterType, assertTypesEquivalent, signature, 0), - parityCase("Checker", "isArrayLikeType", checker.isArrayLikeType, assertDeepEquivalent, arrayType), - parityCase("Checker", "isTypeAssignableTo", checker.isTypeAssignableTo, assertDeepEquivalent, derivedType, interfaceType), - parityCase("Checker", "getShorthandAssignmentValueSymbol", checker.getShorthandAssignmentValueSymbol, assertOptionalSymbolsEquivalent, shorthand), - parityCase("Checker", "getTypeOfSymbolAtLocation", checker.getTypeOfSymbolAtLocation, assertTypesEquivalent, derivedSymbol, shorthand), - parityCase("Checker", "getAnyType", checker.getAnyType, assertTypesEquivalent), - parityCase("Checker", "getStringType", checker.getStringType, assertTypesEquivalent), - parityCase("Checker", "getNumberType", checker.getNumberType, assertTypesEquivalent), - parityCase("Checker", "getBooleanType", checker.getBooleanType, assertTypesEquivalent), - parityCase("Checker", "getVoidType", checker.getVoidType, assertTypesEquivalent), - parityCase("Checker", "getUndefinedType", checker.getUndefinedType, assertTypesEquivalent), - parityCase("Checker", "getNullType", checker.getNullType, assertTypesEquivalent), - parityCase("Checker", "getNeverType", checker.getNeverType, assertTypesEquivalent), - parityCase("Checker", "getUnknownType", checker.getUnknownType, assertTypesEquivalent), - parityCase("Checker", "getBigIntType", checker.getBigIntType, assertTypesEquivalent), - parityCase("Checker", "getESSymbolType", checker.getESSymbolType, assertTypesEquivalent), - parityCase("Checker", "getNonPrimitiveType", checker.getNonPrimitiveType, assertTypesEquivalent), - parityCase("Checker", "typeToTypeNode", checker.typeToTypeNode, assertOptionalNodesEquivalent, interfaceType, interfaceDeclaration), - parityCase("Checker", "signatureToSignatureDeclaration", checker.signatureToSignatureDeclaration, assertOptionalNodesEquivalent, signature, SyntaxKind.FunctionDeclaration, combineDeclaration), - parityCase("Checker", "typeToString", checker.typeToString, assertDeepEquivalent, interfaceType, interfaceDeclaration), - parityCase("Checker", "isContextSensitive", checker.isContextSensitive, assertDeepEquivalent, boxDeclaration.initializer!), - parityCase("Checker", "isArrayType", checker.isArrayType, assertDeepEquivalent, arrayType), - parityCase("Checker", "isTupleType", checker.isTupleType, assertDeepEquivalent, tupleType), - parityCase("Checker", "isTupleTypeTarget", checker.isTupleTypeTarget, assertDeepEquivalent, tupleType), - parityCase("Checker", "getReturnTypeOfSignature", checker.getReturnTypeOfSignature, assertTypesEquivalent, signature), - parityCase("Checker", "getRestTypeOfSignature", checker.getRestTypeOfSignature, assertOptionalTypesEquivalent, signature), - parityCase("Checker", "getTypePredicateOfSignature", checker.getTypePredicateOfSignature, assertOptionalTypePredicatesEquivalent, predicateSignature), - parityCase("Checker", "getBaseTypes", checker.getBaseTypes, assertTypeArraysEquivalent, derivedType), - parityCase("Checker", "getApparentType", checker.getApparentType, assertTypesEquivalent, interfaceType), - parityCase("Checker", "getReducedType", checker.getReducedType, assertTypesEquivalent, unionType), - parityCase("Checker", "getPropertiesOfType", checker.getPropertiesOfType, assertSymbolArraysEquivalent, interfaceType), - parityCase("Checker", "getIndexInfosOfType", checker.getIndexInfosOfType, assertIndexInfosEquivalent, interfaceType), - parityCase("Checker", "getIndexInfoOfType", checker.getIndexInfoOfType, assertDeepEquivalent, interfaceType, IndexKind.String), - parityCase("Checker", "getIndexTypeOfType", checker.getIndexTypeOfType, assertOptionalTypesEquivalent, interfaceType, IndexKind.Number), - parityCase("Checker", "getConstraintOfTypeParameter", checker.getConstraintOfTypeParameter, assertOptionalTypesEquivalent, typeParameter), - parityCase("Checker", "getDefaultFromTypeParameter", checker.getDefaultFromTypeParameter, assertOptionalTypesEquivalent, typeParameter), - parityCase("Checker", "getBaseConstraintOfType", checker.getBaseConstraintOfType, assertOptionalTypesEquivalent, typeParameter), - parityCase("Checker", "getPropertyOfType", checker.getPropertyOfType, assertOptionalSymbolsEquivalent, interfaceType, "value"), - parityCase("Checker", "getTypeOfPropertyOfType", checker.getTypeOfPropertyOfType, assertOptionalTypesEquivalent, interfaceType, "value"), - parityCase("Checker", "getConstantValue", checker.getConstantValue, assertDeepEquivalent, enumDeclaration.members[0]), - parityCase("Checker", "getSignatureFromDeclaration", checker.getSignatureFromDeclaration, assertOptionalSignaturesEquivalent, combineDeclaration), - parityCase("Checker", "getExportSpecifierLocalTargetSymbol", checker.getExportSpecifierLocalTargetSymbol, assertOptionalSymbolsEquivalent, exportSpecifier), - parityCase("Checker", "getAliasedSymbol", checker.getAliasedSymbol, assertSymbolsEquivalent, importedDerivedSymbol), - parityCase("Checker", "getFullyQualifiedName", checker.getFullyQualifiedName, assertDeepEquivalent, combineSymbol), - parityCase("Checker", "getImmediateAliasedSymbol", checker.getImmediateAliasedSymbol, assertOptionalSymbolsEquivalent, importedDerivedSymbol), - parityCase("Checker", "isUnknownSymbol", checker.isUnknownSymbol, assertDeepEquivalent, unknownSymbol), - parityCase("Checker", "isUndefinedSymbol", checker.isUndefinedSymbol, assertDeepEquivalent, undefinedSymbol), - parityCase("Checker", "isArgumentsSymbol", checker.isArgumentsSymbol, assertDeepEquivalent, argumentsSymbol), - parityCase("Checker", "isUnknownSignature", checker.isUnknownSignature, assertDeepEquivalent, unknownSignature), - parityCase("Checker", "getExportsOfModule", checker.getExportsOfModule, assertSymbolArraysEquivalent, moduleSymbol), - parityCase("Checker", "getMemberInModuleExports", checker.getMemberInModuleExports, assertOptionalSymbolsEquivalent, moduleSymbol, "Derived"), - parityCase("Checker", "getJsDocTagsOfSymbol", checker.getJsDocTagsOfSymbol, assertDeepEquivalent, combineSymbol), - parityCase("Checker", "getDocumentationCommentOfSymbol", checker.getDocumentationCommentOfSymbol, assertDeepEquivalent, combineSymbol), - parityCase("Checker", "getTypeArguments", checker.getTypeArguments, assertTypeArraysEquivalent, boxedType), - parityCase("Checker", "getNonMissingTypeOfSymbol", checker.getNonMissingTypeOfSymbol, assertTypesEquivalent, boxedOptSymbol), - parityCase("Checker", "isReadonlySymbol", checker.isReadonlySymbol, assertDeepEquivalent, boxedOptSymbol), - parityCase("Checker", "getTargetSymbol", checker.getTargetSymbol, assertOptionalSymbolsEquivalent, boxedOptSymbol), - parityCase("Checker", "getExportSymbolOfSymbol", checker.getExportSymbolOfSymbol, assertSymbolsEquivalent, localCombineSymbol), - - parityCase("Printer", "printNode", printer.printNode, assertDeepEquivalent, combineDeclaration, { preserveSourceNewlines: true }), - parityCase("Printer", "printFile", printer.printFile, assertDeepEquivalent, indexFile, { preserveSourceNewlines: true }), - parityCase("SnapshotInternalAPI", "formatNodeForInsertion", snapshot.internal.formatNodeForInsertion, assertDeepEquivalent, combineDeclaration, "/src/index.ts", combineDeclaration.pos), - parityCase("NodeHandle", "resolve", nodeHandle.resolve, assertOptionalNodesEquivalent), - parityCase("NodeHandle", "resolve", nodeHandle.resolve, assertOptionalNodesEquivalent, project), - - parityCase("Symbol", "getParent", derivedMemberSymbol.getParent, assertOptionalSymbolsEquivalent), - parityCase("Symbol", "getMembers", derivedClassSymbol.getMembers, assertSymbolMapsEquivalent), - parityCase("Symbol", "getExports", moduleSymbol.getExports, assertSymbolMapsEquivalent), - parityCase("Symbol", "getExportSymbol", combineSymbol.getExportSymbol, assertSymbolsEquivalent), - parityCase("Symbol", "getJsDocTags", combineSymbol.getJsDocTags, assertDeepEquivalent, checker), - parityCase("Symbol", "getDocumentationComment", combineSymbol.getDocumentationComment, assertDeepEquivalent, checker), - - parityCase("Type", "getSymbol", interfaceType.getSymbol, assertOptionalSymbolsEquivalent), - parityCase("Type", "getProperties", interfaceType.getProperties, assertSymbolArraysEquivalent), - parityCase("Type", "getProperty", interfaceType.getProperty, assertOptionalSymbolsEquivalent, "value"), - parityCase("Type", "getApparentProperties", interfaceType.getApparentProperties, assertSymbolArraysEquivalent), - parityCase("Type", "getCallSignatures", checker.getTypeAtLocation(combineDeclaration.name!).getCallSignatures, assertSignatureArraysEquivalent), - parityCase("Type", "getConstructSignatures", derivedConstructorType.getConstructSignatures, assertSignatureArraysEquivalent), - parityCase("Type", "getNonNullableType", interfaceType.getNonNullableType, assertTypesEquivalent), - parityCase("Type", "getStringIndexType", interfaceType.getStringIndexType, assertOptionalTypesEquivalent), - parityCase("Type", "getNumberIndexType", interfaceType.getNumberIndexType, assertOptionalTypesEquivalent), - parityCase("Type", "getApparentType", interfaceType.getApparentType, assertTypesEquivalent), - parityCase("Type", "getReducedType", unionType.getReducedType, assertTypesEquivalent), - parityCase("Type", "getIndexInfos", interfaceType.getIndexInfos, assertIndexInfosEquivalent), - parityCase("Type", "getAliasSymbol", boxedType.getAliasSymbol, assertOptionalSymbolsEquivalent), - parityCase("Type", "getTarget", boxedType.getTarget, assertTypesEquivalent), - parityCase("Type", "getFreshType", literalType.getFreshType, assertOptionalTypesEquivalent), - parityCase("Type", "getRegularType", literalType.getRegularType, assertOptionalTypesEquivalent), - parityCase("Type", "getTypes", (unionType as UnionOrIntersectionType).getTypes, assertOptionalTypeArrayEquivalent), - parityCase("Type", "getTypeParameters", interfaceType.getTypeParameters, assertTypeArraysEquivalent), - parityCase("Type", "getOuterTypeParameters", interfaceType.getOuterTypeParameters, assertTypeArraysEquivalent), - parityCase("Type", "getLocalTypeParameters", interfaceType.getLocalTypeParameters, assertTypeArraysEquivalent), - parityCase("Type", "getThisType", interfaceType.getThisType, assertOptionalTypesEquivalent), - parityCase("Type", "getAliasTypeArguments", boxedType.getAliasTypeArguments, assertTypeArraysEquivalent), - parityCase("Type", "getTypeParameter", mappedType.getTypeParameter, assertTypesEquivalent), - parityCase("Type", "getConstraintType", mappedType.getConstraintType, assertTypesEquivalent), - parityCase("Type", "getNameType", mappedType.getNameType, assertOptionalTypesEquivalent), - parityCase("Type", "getTemplateType", mappedType.getTemplateType, assertTypesEquivalent), - parityCase("Type", "getObjectType", indexedType.getObjectType, assertTypesEquivalent), - parityCase("Type", "getIndexType", indexedType.getIndexType, assertTypesEquivalent), - parityCase("Type", "getCheckType", conditionalType.getCheckType, assertTypesEquivalent), - parityCase("Type", "getExtendsType", conditionalType.getExtendsType, assertTypesEquivalent), - parityCase("Type", "getBaseType", substitutionType.getBaseType, assertTypesEquivalent), - parityCase("Type", "getConstraint", typeParameter.getConstraint, assertOptionalTypesEquivalent), - parityCase("Type", "getDefault", typeParameter.getDefault, assertOptionalTypesEquivalent), - parityCase("Type", "getTrueType", conditionalType.getTrueType, assertTypesEquivalent), - parityCase("Type", "getFalseType", conditionalType.getFalseType, assertTypesEquivalent), - parityCase("Type", "getBaseTypes", derivedType.getBaseTypes, assertOptionalTypeArrayEquivalent), - - parityCase("Signature", "getTypeParameters", signature.getTypeParameters, assertTypeArraysEquivalent), - parityCase("Signature", "getParameters", signature.getParameters, assertSymbolArraysEquivalent), - parityCase("Signature", "getThisParameter", signature.getThisParameter, assertOptionalSymbolsEquivalent), - parityCase("Signature", "getTarget", constructSignature.getTarget, assertOptionalSignaturesEquivalent), - parityCase("Signature", "getReturnType", signature.getReturnType, assertTypesEquivalent), - parityCase("Signature", "getTypeParameterAtPosition", signature.getTypeParameterAtPosition, assertTypesEquivalent, 0), - ]; - - runParityBatch(api, cases); - assert.deepEqual(temporaryProjects, ["/tsconfig.json", "/tsconfig.json"]); - - const snapshotGeneratorAPI = spawnAPI(parityFiles); - const snapshotSyncAPI = spawnAPI(parityFiles); - try { - const generatorBase = snapshotGeneratorAPI.batch(snapshotGeneratorAPI.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; - const syncBase = snapshotSyncAPI.createSnapshot({ openProject: "/tsconfig.json" }); - const generatorUpdated = snapshotGeneratorAPI.batch(generatorBase.update.gen({}))[0]; - const syncUpdated = syncBase.update({}); - assertSnapshotsEquivalent(generatorUpdated, syncUpdated, "Snapshot.update"); - exercisedMethods.add("Snapshot.update"); - } - finally { - snapshotGeneratorAPI.close(); - snapshotSyncAPI.close(); - } - - const destructiveAPI = spawnAPI(parityFiles); - const disposableSnapshot = destructiveAPI.batch(destructiveAPI.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; - destructiveAPI.batch(disposableSnapshot.dispose.gen()); - assert.equal(disposableSnapshot.isDisposed(), true); - assert.equal(disposableSnapshot.dispose(), undefined); - exercisedMethods.add("Snapshot.dispose"); - const disposableProgram = destructiveAPI.batch(destructiveAPI.createProgram.gen(["/src/index.ts"], { noLib: true }))[0]; - destructiveAPI.batch(disposableProgram.dispose.gen()); - assert.throws(() => disposableProgram.getSourceFileNames(), /snapshot .* not found/); - assert.equal(disposableProgram.dispose(), undefined); - exercisedMethods.add("Program.dispose"); - const disposableResolver = destructiveAPI.batch(destructiveAPI.createModuleResolver.gen({}))[0]; - destructiveAPI.batch(disposableResolver.dispose.gen()); - assert.equal(disposableResolver.dispose(), undefined); - exercisedMethods.add("ModuleResolver.dispose"); - destructiveAPI.batch(destructiveAPI.close.gen()); - assert.equal(destructiveAPI.close(), undefined); - exercisedMethods.add("API.close"); - - assertPublicGeneratorCoverage([ - { name: "API", value: api }, - { name: "API", value: api.constructor as object, own: true }, - { name: "InternalAPI", value: api.internal }, - { name: "Snapshot", value: snapshot }, - { name: "ModuleResolver", value: moduleResolver }, - { name: "Project", value: project }, - { name: "LanguageService", value: languageService }, - { name: "Program", value: program }, - { name: "Checker", value: checker }, - { name: "Printer", value: printer }, - { name: "SnapshotInternalAPI", value: snapshot.internal }, - { name: "NodeHandle", value: nodeHandle }, - { name: "Symbol", value: combineSymbol }, - { name: "Type", value: interfaceType }, - { name: "Signature", value: signature }, - ]); - } - finally { - api.close(); - } - }); -}); +import { + cast, + type Identifier, + isCallExpression, + isClassDeclaration, + isEnumDeclaration, + isExportDeclaration, + isFunctionDeclaration, + isIdentifier, + isImportDeclaration, + isInterfaceDeclaration, + isNamedExports, + isNamedImports, + isObjectLiteralExpression, + isShorthandPropertyAssignment, + isStringLiteral, + isTypeAliasDeclaration, + isVariableDeclaration, + isVariableStatement, + type Node, + type SourceFile, + SyntaxKind, +} from "@typescript/typescript/unstable/ast"; +import { cloneNode } from "@typescript/typescript/unstable/ast/factory"; +import { toRootedFilePath } from "@typescript/typescript/unstable/path"; +import type { + APIRequest, + APIResponse, +} from "@typescript/typescript/unstable/proto"; +import { + all, + type AllAPIRequestGenerator, + type AnyAPIRequestGenerator, + type API, + type BuildOrchestrator, + type ConditionalType, + defer, + type DeferredAPIRequestGenerator, + getSymbol, + type IndexedAccessType, + type IndexInfo, + IndexKind, + type InterfaceType, + type LiteralType, + type MappedType, + ModuleKind, + ModuleResolutionKind, + type NodeHandle, + type Program, + type Project, + type RetainedSourceFile, + type Signature, + SignatureKind, + type Snapshot, + type SubstitutionType, + type Symbol, + SymbolFlags, + type TimingInfo, + type Type, + TypeFlags, + type TypeParameter, + type TypePredicate, + type TypeReference, + type UnionOrIntersectionType, +} from "@typescript/typescript/unstable/sync"; +import assert from "node:assert"; +import { + describe, + test, + type TestContext, +} from "node:test"; +import { + type APIRequestGenerator, + executeRequestGenerators, +} from "../../src/api/sync/generatorSupport.ts"; +import { areTestsFiltered } from "../testUtils.ts"; +import { spawnAPI } from "./api.testUtils.ts"; + +const parityFiles = { + "/base.json": JSON.stringify({ + compilerOptions: { + declaration: true, + module: "nodenext", + moduleResolution: "nodenext", + strict: true, + target: "esnext", + exactOptionalPropertyTypes: true, + }, + }), + "/tsconfig.json": JSON.stringify({ + extends: "./base.json", + include: ["src/**/*.ts"], + }), + "/src/models.ts": ` +export interface Box { + value: T; + tuple: readonly [T, ...T[]]; + [key: string]: unknown; + [index: number]: T; + readonly opt?: true; +} +export class Base { base = true; } +export class Derived extends Base { derived = 1; } +export type Boxed = Box; +export type TupleAlias = readonly [string, ...number[]]; +export type ArrayAlias = Derived[]; +export type Conditional = T extends Base ? T : never; +export type Indexed> = T["value"]; +export type Keys = keyof Box; +export type Union = Derived | string; +export enum Choice { First = 1, Second = "second" } +export class Unimported { value = "extra"; } +export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; +`, + "/src/index.ts": ` +/// +import { Base, Box, Choice, Derived } from "./models.js"; +export { Derived as RenamedDerived } from "./models.js"; + +/** Combine a first value with the rest. @deprecated parity fixture */ +export function combine(this: Box, first: T, ...rest: T[]): readonly [T, ...T[]] { + return [first, ...rest]; +} + +export const derived = new Derived(); +export const box: Box = { value: derived, tuple: [derived], derived }; +export const shorthand = { derived }; +export const called = combine.call(box, derived, derived); +export const semanticIssue: string = 123; +export const choice = Choice.First; +export function isDerived(value: Base): value is Derived { return value instanceof Derived; } +export const badCall = derived(); +export function getArguments() { return arguments; } +import { absent } from "./absent.js"; +export const missingValue = absent; +`, + "/node_modules/@types/parity/index.d.ts": `export {};`, + "/src/syntax.ts": `export const broken: = 1;`, + "/src/bind.ts": `let duplicate = 1; let duplicate = 2;`, + "/src/suggestions.ts": `export function suggestion() { const unused = 1; return 1; }`, +}; + +type GeneratorMethod = ((...args: Args) => Result) & { + gen(...args: Args): Generator; +}; + +type EquivalenceAssertion = (actual: Result, expected: Result, message?: string) => void; + +interface ParityCase { + readonly ownerName: string; + readonly methodName: string; + readonly runGenerator: () => Generator; + readonly assertEquivalent: (message?: string) => void; +} + +const exercisedMethods = new Set(); +const publicGeneratorExemptions = new Map([ + ["API.fromLSPConnection", "requires an existing LSP API session"], + ["API.getCurrentLanguageServerSnapshot", "requires an existing LSP API session"], + ["InternalAPI.startCPUProfile", "writes a CPU profile and changes process-global profiling state"], + ["InternalAPI.stopCPUProfile", "requires a matching active CPU profile"], + ["InternalAPI.saveHeapProfile", "writes a potentially large heap profile to disk"], +]); +const privateGeneratorGetters = new Set([ + "API.ensureInitialized", + "API.fetchDeclarationSymbol", + "API.initializeWorker", + "API.updateSnapshot", + "Checker.getIntrinsicType", + "Checker.getWellKnownSignatures", + "Checker.getWellKnownSymbols", + "NodeHandle.fetchOwnerFile", + "Program.disposeWorker", + "Program.fetchSourceFileMetadata", + "Program.getSourceFileWorker", + "Snapshot.disposeWorker", + "Symbol.fetchSymbol", + "Symbol.fetchSymbols", + "Symbol.fetchSymbolTable", + "Type.getNumberIndexTypeWorker", + "Type.getStringIndexTypeWorker", +]); + +function methodKey(ownerName: string, methodName: string): string { + return `${ownerName}.${methodName}`; +} + +function parityCase( + ownerName: string, + methodName: string, + method: GeneratorMethod, + assertEquivalent: EquivalenceAssertion>, + ...args: Args +): ParityCase { + let generatedResult: { readonly value: Result; } | undefined; + return { + ownerName, + methodName, + runGenerator: function* () { + generatedResult = { value: yield* method.gen(...args) }; + }, + assertEquivalent: message => { + assert.ok(generatedResult, `${message ?? methodName}: generator did not complete`); + assertEquivalent(generatedResult.value, method(...args), message); + }, + }; +} + +function selectGeneratorMethod( + method: GeneratorMethod, +): GeneratorMethod { + return method; +} + +function assertDeepEquivalent(actual: T, expected: T, message?: string): void { + assert.deepEqual(actual, expected, message); +} + +function assertOptionalEquivalent(actual: T | undefined, expected: T | undefined, assertPresentEquivalent: EquivalenceAssertion, message?: string): void { + if (actual === undefined || expected === undefined) { + assert.equal(actual, expected, message); + return; + } + assertPresentEquivalent(actual, expected, message); +} + +function assertArrayElementsEquivalent(actual: readonly T[], expected: readonly T[], assertElementEquivalent: EquivalenceAssertion, message?: string): void { + assert.equal(actual.length, expected.length, message); + for (let index = 0; index < actual.length; index++) { + assertElementEquivalent(actual[index], expected[index], `${message ?? "value"}[${index}]`); + } +} + +function assertSymbolsEquivalent(actual: Symbol, expected: Symbol, message?: string): void { + assert.strictEqual(actual, expected, message); + assert.equal(actual.id, expected.id, message); + assert.equal(actual.name, expected.name, message); + assert.equal(actual.flags, expected.flags, message); +} + +function assertOptionalSymbolsEquivalent(actual: Symbol | undefined, expected: Symbol | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertSymbolsEquivalent, message); +} + +function assertSymbolArraysEquivalent(actual: readonly Symbol[], expected: readonly Symbol[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertSymbolsEquivalent, message); +} + +function assertUnorderedSymbolArraysEquivalent(actual: readonly Symbol[], expected: readonly Symbol[], message?: string): void { + const byIdentity = (left: Symbol, right: Symbol) => left.id - right.id || left.name.localeCompare(right.name); + const actualSymbols = [...actual].sort(byIdentity); + const expectedSymbols = [...expected].sort(byIdentity); + assertArrayElementsEquivalent(actualSymbols, expectedSymbols, assertSymbolsEquivalent, message); +} + +function assertOptionalSymbolArraysEquivalent(actual: readonly (Symbol | undefined)[], expected: readonly (Symbol | undefined)[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertOptionalSymbolsEquivalent, message); +} + +function assertTypesEquivalent(actual: Type, expected: Type, message?: string): void { + assert.strictEqual(actual, expected, message); + assert.equal(actual.id, expected.id, message); + assert.equal(actual.flags, expected.flags, message); +} + +function assertOptionalTypesEquivalent(actual: Type | undefined, expected: Type | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertTypesEquivalent, message); +} + +function assertTypeArraysEquivalent(actual: readonly Type[], expected: readonly Type[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertTypesEquivalent, message); +} + +function assertOptionalTypeArraysEquivalent(actual: readonly (Type | undefined)[], expected: readonly (Type | undefined)[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertOptionalTypesEquivalent, message); +} + +function assertOptionalTypeArrayEquivalent(actual: readonly Type[] | undefined, expected: readonly Type[] | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertTypeArraysEquivalent, message); +} + +function assertSignaturesEquivalent(actual: Signature, expected: Signature, message?: string): void { + assert.strictEqual(actual, expected, message); + assert.equal(actual.id, expected.id, message); + assert.equal(actual.hasRestParameter, expected.hasRestParameter, message); + assert.equal(actual.isConstruct, expected.isConstruct, message); +} + +function assertOptionalSignaturesEquivalent(actual: Signature | undefined, expected: Signature | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertSignaturesEquivalent, message); +} + +function assertSignatureArraysEquivalent(actual: readonly Signature[], expected: readonly Signature[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertSignaturesEquivalent, message); +} + +function assertNodeHandlesEquivalent(actual: NodeHandle, expected: NodeHandle, message?: string): void { + assert.equal(actual.index, expected.index, message); + assert.equal(actual.kind, expected.kind, message); + assert.equal(actual.path, expected.path, message); +} + +function assertNodeHandleArraysEquivalent(actual: readonly NodeHandle[], expected: readonly NodeHandle[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertNodeHandlesEquivalent, message); +} + +function assertOptionalNodeHandlesEquivalent(actual: NodeHandle | undefined, expected: NodeHandle | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertNodeHandlesEquivalent, message); +} + +function assertNodesEquivalent(actual: Node, expected: Node, message?: string): void { + assert.equal(actual.kind, expected.kind, message); + assert.equal(actual.pos, expected.pos, message); + assert.equal(actual.end, expected.end, message); +} + +function assertOptionalNodesEquivalent(actual: Node | undefined, expected: Node | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertNodesEquivalent, message); +} + +function assertSourceFilesEquivalent(actual: SourceFile, expected: SourceFile, message?: string): void { + assertNodesEquivalent(actual, expected, message); + assert.equal(actual.fileName, expected.fileName, message); + assert.equal(actual.text, expected.text, message); +} + +function assertRetainedSourceFilesEquivalent(actual: RetainedSourceFile, expected: RetainedSourceFile, message?: string): void { + try { + assertSourceFilesEquivalent(actual.sourceFile, expected.sourceFile, message); + } + finally { + actual.dispose(); + expected.dispose(); + } +} + +function assertOptionalSourceFilesEquivalent(actual: SourceFile | undefined, expected: SourceFile | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertSourceFilesEquivalent, message); +} + +function assertProjectsEquivalent(actual: Project, expected: Project, message?: string): void { + assert.equal(actual.id, expected.id, message); + assert.equal(actual.configFileName, expected.configFileName, message); + assert.equal(actual.dirty, expected.dirty, message); + assert.deepEqual(actual.rootFiles, expected.rootFiles, message); +} + +function assertOptionalProjectsEquivalent(actual: Project | undefined, expected: Project | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, assertProjectsEquivalent, message); +} + +function assertProgramsEquivalent(actual: Program, expected: Program, message?: string): void { + assertProjectsEquivalent(actual.getProject(), expected.getProject(), message); +} + +function assertSnapshotsEquivalent(actual: Snapshot, expected: Snapshot, message?: string): void { + const actualProjects = actual.getProjects(); + const expectedProjects = expected.getProjects(); + assertArrayElementsEquivalent(actualProjects, expectedProjects, assertProjectsEquivalent, message); + assert.deepEqual(actual.operation.createdPrograms?.map(program => program.id), expected.operation.createdPrograms?.map(program => program.id), message); + assert.deepEqual(actual.operation.openedFiles?.map(result => result.project.id), expected.operation.openedFiles?.map(result => result.project.id), message); +} + +function assertBuildOrchestratorsEquivalent(actual: BuildOrchestrator, expected: BuildOrchestrator, message?: string): void { + assert.equal(actual.constructor, expected.constructor, message); +} + +function assertSymbolMapsEquivalent(actual: ReadonlyMap, expected: ReadonlyMap, message?: string): void { + assert.deepEqual([...actual.keys()], [...expected.keys()], message); + for (const key of actual.keys()) { + assertOptionalSymbolsEquivalent(actual.get(key), expected.get(key), `${message ?? "symbol map"}[${key}]`); + } +} + +function assertIndexInfosEquivalent(actual: readonly IndexInfo[], expected: readonly IndexInfo[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, (actualInfo, expectedInfo, elementMessage) => { + assertTypesEquivalent(actualInfo.keyType, expectedInfo.keyType, elementMessage); + assertTypesEquivalent(actualInfo.valueType, expectedInfo.valueType, elementMessage); + assert.equal(actualInfo.isReadonly, expectedInfo.isReadonly, elementMessage); + assertOptionalNodeHandlesEquivalent(actualInfo.declaration, expectedInfo.declaration, elementMessage); + }, message); +} + +function assertOptionalTypePredicatesEquivalent(actual: TypePredicate | undefined, expected: TypePredicate | undefined, message?: string): void { + assertOptionalEquivalent(actual, expected, (actualPredicate, expectedPredicate, predicateMessage) => { + assert.equal(actualPredicate.kind, expectedPredicate.kind, predicateMessage); + assert.equal(actualPredicate.parameterName, expectedPredicate.parameterName, predicateMessage); + assert.equal(actualPredicate.parameterIndex, expectedPredicate.parameterIndex, predicateMessage); + assertOptionalTypesEquivalent(actualPredicate.type, expectedPredicate.type, predicateMessage); + }, message); +} + +function assertDeepArraysEquivalent(actual: readonly T[], expected: readonly T[], message?: string): void { + assertArrayElementsEquivalent(actual, expected, assertDeepEquivalent, message); +} + +function assertTimingInfoEquivalent(actual: TimingInfo, expected: TimingInfo, message?: string): void { + assert.equal(actual.enabled, expected.enabled, message); + assert.equal(actual.totals.requestCount, expected.totals.requestCount, message); + assert.equal(actual.totals.bytesSent, expected.totals.bytesSent, message); + assert.equal(actual.totals.bytesReceived, expected.totals.bytesReceived, message); + assert.deepEqual(actual.recentRequests.map(request => request.method), expected.recentRequests.map(request => request.method), message); +} + +function runParityBatch(api: API, cases: readonly ParityCase[]): void { + api.batch(...cases.map(parity => parity.runGenerator())); + + for (const { assertEquivalent, methodName, ownerName } of cases) { + assertEquivalent(methodKey(ownerName, methodName)); + exercisedMethods.add(methodKey(ownerName, methodName)); + } +} + +function observeRequestBatches( + api: API, + requestBatches: string[][], + context: TestContext, +): void { + const client = api["client"]; + const batchRequests = client.batchRequests.bind(client); + context.mock.method(client, "batchRequests", (requests: readonly APIRequest[]) => { + requestBatches.push(requests.map(request => request.method)); + return batchRequests(requests); + }); +} + +function assertPublicGeneratorCoverage(owners: readonly { readonly name: string; readonly value: object; readonly own?: boolean; }[]): void { + const missing: string[] = []; + for (const { name, own, value } of owners) { + const descriptorOwner = own ? value : Object.getPrototypeOf(value) as object; + for (const [methodName, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(descriptorOwner))) { + if (!descriptor.get) continue; + const key = methodKey(name, methodName); + const result: { gen?: unknown; } | undefined = descriptor.get.call(value); + if (typeof result?.gen !== "function") continue; + if (!exercisedMethods.has(key) && !publicGeneratorExemptions.has(key) && !privateGeneratorGetters.has(key)) { + missing.push(key); + } + } + } + assert.deepEqual(missing, [], `Uncovered public generator getters: ${missing.join(", ")}`); +} + +describe("API - generator batching", { concurrency: areTestsFiltered() }, () => { + test("looks up binder symbols through standalone and API generators", () => { + using api = spawnAPI(); + using lease = api.createSourceFile("/symbols.ts", "function present() {}"); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + const [symbol] = api.batch(getSymbol.gen(declaration)); + assert.ok(symbol); + assert.equal(symbol.name, "present"); + const [cached] = api.batch(api.getSymbol.gen(declaration)); + assert.strictEqual(cached, symbol); + const clone = cloneNode(declaration); + assert.throws(() => api.batch(getSymbol.gen(clone)), /Source file not found/); + assert.throws(() => api.batch(api.getSymbol.gen(clone)), /Source file not found/); + }); + + test("batches source file requests", context => { + const api = spawnAPI(parityFiles); + context.after(() => api.close()); + const requestBatches: string[][] = []; + observeRequestBatches(api, requestBatches, context); + const [[fromText, fromFile]] = api.batch(all( + api.createSourceFile.gen("/generated.ts", "export const generated = true;"), + api.createSourceFileFromFile.gen("/src/index.ts"), + )); + context.after(() => { + fromText.dispose(); + fromFile.dispose(); + }); + const [[retained]] = api.batch(all(api.retainSourceFile.gen(fromFile.sourceFile))); + context.after(() => retained.dispose()); + assert.equal(fromText.sourceFile.text, "export const generated = true;"); + assert.equal(fromFile.sourceFile.text, parityFiles["/src/index.ts"]); + assert.strictEqual(retained.sourceFile, fromFile.sourceFile); + assert.deepEqual(requestBatches, [ + ["initialize"], + ["createSourceFile", "createSourceFileFromFile"], + ["retainSourceFile"], + ]); + }); + + test("all and defer yield discriminated host messages without starting children", () => { + let started = false; + function* child() { + started = true; + return "child"; + } + const joined = child(); + const deferred = child(); + assert.deepEqual(all(joined).next(), { done: false, value: { method: "__all", generators: [joined] } }); + assert.deepEqual(defer(deferred).next(), { done: false, value: { method: "__defer", deferred } }); + const generators: APIRequestGenerator[] = [all(joined), defer(deferred)]; + for (const generator of generators) { + const state = generator.next(); + if (state.done || !("method" in state.value)) assert.fail("Expected a host message"); + switch (state.value.method) { + case "__all": + assert.deepEqual(state.value.generators, [joined]); + break; + case "__defer": + assert.strictEqual(state.value.deferred, deferred); + break; + default: { + const request: APIRequest = state.value; + assert.fail(`Unexpected API request: ${request.method}`); + } + } + } + assert.equal(started, false); + }); + + test("all preserves generator protocol behavior", () => { + let started = false; + function* child() { + started = true; + return "child"; + } + const generator = child(); + const joined = all(generator); + assert.strictEqual(joined[globalThis.Symbol.iterator](), joined); + assert.deepEqual(joined.next(["ignored"]), { done: false, value: { method: "__all", generators: [generator] } }); + const results: [string] = ["result"]; + assert.deepEqual(joined.next(results), { done: true, value: results }); + assert.deepEqual(joined.next(["ignored"]), { done: true, value: undefined }); + assert.deepEqual(joined.return(results), { done: true, value: results }); + + for (const begin of [false, true]) { + const returned = all(generator); + const thrown = all(generator); + if (begin) { + returned.next(); + thrown.next(); + } + assert.deepEqual(returned.return(results), { done: true, value: results }); + assert.deepEqual(returned.next(), { done: true, value: undefined }); + const error = new Error("failed"); + assert.throws(() => thrown.throw(error), actual => actual === error); + assert.deepEqual(thrown.next(), { done: true, value: undefined }); + } + assert.equal(started, false); + }); + + test("defer preserves generator protocol behavior", () => { + let started = false; + function* child() { + started = true; + return "child"; + } + const generator = child(); + const deferred = defer(generator); + assert.strictEqual(deferred[globalThis.Symbol.iterator](), deferred); + assert.deepEqual(deferred.next("ignored"), { done: false, value: { method: "__defer", deferred: generator } }); + assert.deepEqual(deferred.next("ignored"), { done: true, value: undefined }); + assert.deepEqual(deferred.next("ignored"), { done: true, value: undefined }); + + for (const begin of [false, true]) { + const returned = defer(generator); + const thrown = defer(generator); + const disposed = defer(generator); + if (begin) { + returned.next(); + thrown.next(); + disposed.next(); + } + assert.deepEqual(returned.return(undefined), { done: true, value: undefined }); + assert.deepEqual(returned.next(), { done: true, value: undefined }); + const error = new Error("failed"); + assert.throws(() => thrown.throw(error), actual => actual === error); + assert.deepEqual(thrown.next(), { done: true, value: undefined }); + assert.ok(globalThis.Symbol.dispose in disposed); + const dispose = disposed[globalThis.Symbol.dispose]; + assert.ok(typeof dispose === "function"); + dispose.call(disposed); + assert.deepEqual(disposed.next(), { done: true, value: undefined }); + } + assert.equal(started, false); + }); + + test("retains deferred branding after completion", () => { + let completed = false; + function* child(): Generator { + const result = yield { method: "request", params: null } as unknown as APIRequest; + completed = true; + return result; + } + const deferred = defer(child()); + const results: [] = executeRequestGenerators([deferred] as const, requests => requests.map(request => ({ result: request.method }))); + assert.deepEqual(results, []); + assert.equal(completed, true); + const noRequests = () => assert.fail("Unexpected request round"); + assert.deepEqual(executeRequestGenerators([deferred], noRequests), []); + assert.throws(() => executeRequestGenerators([deferred, deferred], noRequests), /same generator instance more than once/); + }); + + test("joins nested, empty, and synchronously completed groups in result order", () => { + function* completed(value: string) { + return value; + } + function* request(value: string, rounds: number): Generator { + for (let round = 0; round < rounds; round++) { + yield { method: value, params: null } as unknown as APIRequest; + } + return value; + } + const batches: string[][] = []; + const results = executeRequestGenerators([ + all(request("slow", 2), all(), completed("sync"), all(request("fast", 1), defer(request("background", 3)))), + ], requests => { + batches.push(requests.map(request => request.method)); + return requests.map(request => ({ result: request.method })); + }); + assert.deepEqual(results, [["slow", [], "sync", ["fast"]]]); + assert.equal(batches.length, 3); + assert.deepEqual(batches.map(batch => [...batch].sort()), [["background", "fast", "slow"], ["background", "slow"], ["background"]]); + }); + + test("preserves tuple results through all and any generator types", () => { + function* numberResult() { + return 42; + } + function* stringResult() { + return "result"; + } + const joined: AllAPIRequestGenerator<[number, [string]]> = all(numberResult(), defer(stringResult()), all(stringResult())); + const generator: AnyAPIRequestGenerator<[number, [string]]> = joined; + const results: [[number, [string]]] = executeRequestGenerators([generator] as const, () => assert.fail("Unexpected request round")); + assert.deepEqual(results, [[42, ["result"]]]); + + const mixed: (APIRequestGenerator | AllAPIRequestGenerator<[string]> | DeferredAPIRequestGenerator)[] = [ + numberResult(), + all(stringResult()), + defer(stringResult()), + ]; + const arrayResults: (number | [string])[] = executeRequestGenerators(mixed, () => assert.fail("Unexpected request round")); + assert.deepEqual(arrayResults, [42, ["result"]]); + + const variadic: readonly [APIRequestGenerator, ...AllAPIRequestGenerator<[string]>[]] = [numberResult(), all(stringResult()), all(stringResult())]; + const variadicResults: (number | [string])[] = executeRequestGenerators(variadic, () => assert.fail("Unexpected request round")); + assert.deepEqual(variadicResults, [42, ["result"], ["result"]]); + }); + + test("preserves sibling order across repeated nested joins", () => { + function* request(method: string): Generator { + return yield { method, params: null } as unknown as APIRequest; + } + function* foreground() { + for (let round = 0; round < 3; round++) { + yield* all(all(request("first")), request("second")); + } + } + function* sibling() { + for (let round = 0; round < 3; round++) yield* request("sibling"); + } + const batches: string[][] = []; + executeRequestGenerators([foreground(), sibling()], requests => { + batches.push(requests.map(request => request.method)); + return requests.map(request => ({ result: request.method })); + }); + assert.deepEqual(batches, Array.from({ length: 3 }, () => ["first", "second", "sibling"])); + }); + + for (const failBackground of [false, true]) { + test(`preserves root all ordering with ${failBackground ? "failing" : "successful"} deferred work`, () => { + for (const depth of [1, 4]) { + const events: string[] = []; + const batches: string[][] = []; + function* request(method: string): Generator { + const result = yield { method, params: null } as unknown as APIRequest; + events.push(method); + return result; + } + function* foreground() { + yield* defer(request("background")); + return yield* request("foreground"); + } + function* sibling() { + try { + return yield* request("sibling"); + } + finally { + events.push("sibling cleanup"); + } + } + let joined: APIRequestGenerator = all(foreground(), sibling()); + let expected: unknown = ["foreground", "sibling"]; + for (let level = 1; level < depth; level++) { + joined = all(joined); + expected = [expected]; + } + const run = () => + executeRequestGenerators([joined], requests => { + batches.push(requests.map(request => request.method)); + return requests.map(request => + failBackground && request.method as string === "background" + ? { result: undefined, error: "background failed" } + : { result: request.method } + ); + }); + if (failBackground) assert.throws(run, /background failed/); + else assert.deepEqual(run(), [expected]); + assert.deepEqual(batches, [["foreground", "sibling", "background"]]); + assert.deepEqual( + events, + failBackground + ? ["foreground", "sibling", "sibling cleanup"] + : ["foreground", "sibling", "sibling cleanup", "background"], + ); + } + }); + } + + test("preserves singleton join continuations through requests, errors, and deferred work", () => { + const events: string[] = []; + function* request(method: string): Generator { + return yield { method, params: null } as unknown as APIRequest; + } + function* recovering() { + try { + yield* all(all(request("bad"))); + assert.fail("Expected the request to fail"); + } + catch (error) { + assert.equal((error as Error).message, "failed"); + return yield* all(request("recovered"), all(request("sibling"))); + } + } + function* background() { + yield* request("background"); + events.push("background finished"); + } + function* foreground() { + const empty: [] = yield* all(defer(background())); + assert.deepEqual(empty, []); + const result = yield* all(all(recovering())); + events.push("foreground finished"); + return result; + } + const batches: string[][] = []; + const results = executeRequestGenerators([foreground()], requests => { + batches.push(requests.map(request => request.method)); + return requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method }); + }); + assert.deepEqual(results, [[[["recovered", ["sibling"]]]]]); + assert.deepEqual(batches, [["bad", "background"], ["recovered", "sibling"]]); + assert.deepEqual(events, ["background finished", "foreground finished"]); + }); + + test("finishes joined foreground cleanup before deferred request errors", () => { + const events: string[] = []; + function* request(method: string): Generator { + yield { method, params: null } as unknown as APIRequest; + } + function* foreground() { + try { + yield* defer(request("background")); + yield* all(request("foreground")); + events.push("foreground finished"); + } + finally { + events.push("foreground cleanup"); + } + } + assert.throws( + () => executeRequestGenerators([foreground()], requests => requests.map(request => request.method as string === "background" ? { result: undefined, error: "background failed" } : { result: true })), + /background failed/, + ); + assert.deepEqual(events, ["foreground finished", "foreground cleanup"]); + }); + + test("completes root all helpers before detached work finishes", () => { + let joined: AllAPIRequestGenerator<[string]>; + function* foreground(): Generator { + return yield { method: "foreground", params: null } as unknown as APIRequest; + } + function* background(): Generator { + yield { method: "background", params: null } as unknown as APIRequest; + assert.deepEqual(joined.next(["unexpected"]), { done: true, value: undefined }); + } + joined = all(foreground(), defer(background())); + assert.deepEqual(executeRequestGenerators([joined], requests => requests.map(request => ({ result: request.method }))), [["foreground"]]); + }); + + test("throws nested all failures into the waiting parent", () => { + const events: string[] = []; + function* failing(): Generator { + yield { method: "bad", params: null } as unknown as APIRequest; + } + function* parent() { + try { + yield* all(all(failing())); + } + catch (error) { + events.push((error as Error).message); + return "recovered"; + } + return "unexpected"; + } + assert.deepEqual(executeRequestGenerators([parent()], requests => requests.map(() => ({ result: undefined, error: "failed" }))), ["recovered"]); + assert.deepEqual(events, ["failed"]); + }); + + test("cancels failed join siblings but finishes detached and unrelated work", () => { + const events: string[] = []; + function* request(method: string): Generator { + const result = yield { method, params: null } as unknown as APIRequest; + events.push(method); + return result; + } + function* parent() { + try { + yield* all(defer(request("background")), request("bad"), all(request("cancelled"))); + } + catch { + return yield* request("recovery"); + } + } + assert.deepEqual( + executeRequestGenerators([parent(), request("unrelated")], requests => requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method })), + ["recovery", "unrelated"], + ); + assert.deepEqual(events, ["background", "unrelated", "recovery"]); + }); + + test("catches synchronous join failures including undefined", () => { + function* failing(): APIRequestGenerator { + throw undefined; + } + function* parent() { + try { + yield* all(all(failing())); + } + catch (error) { + assert.strictEqual(error, undefined); + return "recovered"; + } + return "unexpected"; + } + assert.deepEqual(executeRequestGenerators([parent()], () => assert.fail("Unexpected request round")), ["recovered"]); + }); + + test("does not route synchronous deferred failures through a waiting join", () => { + const events: string[] = []; + function* failing(): APIRequestGenerator { + throw new Error("deferred failure"); + } + function* parent() { + try { + yield* all(defer(failing())); + } + catch { + events.push("caught by parent"); + } + } + assert.throws( + () => executeRequestGenerators([parent()], () => assert.fail("Unexpected request round")), + /deferred failure/, + ); + assert.deepEqual(events, []); + }); + + test("rejects generator reuse across joins and deferred work", () => { + function* request(): Generator { + return yield { method: "request", params: null } as unknown as APIRequest; + } + for (const wrap of [all, defer]) { + const generator = request(); + assert.throws( + () => executeRequestGenerators([all(generator), wrap(generator)], requests => requests.map(request => ({ result: request.method }))), + /same generator instance more than once/, + ); + } + }); + + test("rejects completed generator reuse after a join finishes", () => { + function* request(): Generator { + return yield { method: "request", params: null } as unknown as APIRequest; + } + for (const wrap of [all, defer]) { + const generator = request(); + function* parent() { + yield* all(generator); + yield* wrap(generator); + } + let requestsExecuted = 0; + assert.throws( + () => + executeRequestGenerators([parent()], requests => { + requestsExecuted += requests.length; + return requests.map(request => ({ result: request.method })); + }), + /same generator instance more than once/, + ); + assert.equal(requestsExecuted, 1); + } + }); + + test("tracks all identity independently across executors", () => { + const joined = all(); + const noRequests = () => assert.fail("Unexpected request round"); + function* parent() { + assert.deepEqual(yield* all(joined), [[]]); + assert.deepEqual(executeRequestGenerators([joined], noRequests), [undefined]); + try { + yield* all(joined); + assert.fail("Expected duplicate generator rejection"); + } + catch (error) { + assert.match((error as Error).message, /same generator instance more than once/); + } + } + executeRequestGenerators([parent()], noRequests); + assert.deepEqual(executeRequestGenerators([joined], noRequests), [undefined]); + assert.throws(() => executeRequestGenerators([joined, joined], noRequests), /same generator instance more than once/); + }); + + test("deduplicates initialization across nested joins", () => { + function* request(method: string): Generator { + return yield { method, params: null } as unknown as APIRequest; + } + const batches: string[][] = []; + const results = executeRequestGenerators([all(request("initialize"), all(request("initialize"), request("other"))), request("other")], requests => { + batches.push(requests.map(request => request.method)); + return requests.map((request, index) => ({ result: `${request.method}:${index}` })); + }); + assert.deepEqual(batches, [["initialize", "other", "other"]]); + assert.deepEqual(results, [["initialize:0", ["initialize:0", "other:1"]], "other:2"]); + }); + + test("composes request generators with all", context => { + const api = spawnAPI(parityFiles); + const requestBatches: string[][] = []; + observeRequestBatches(api, requestBatches, context); + function* getStrictOption() { + const commandLine = yield* api.parseCommandLine.gen(["--strict"]); + const config = yield* api.readConfigFile.gen("/tsconfig.json"); + const parsed = yield* api.parseJsonConfigFileContent.gen(config.config, { configFileName: "/tsconfig.json" }); + return { strict: commandLine.options.strict, fileNames: parsed.fileNames }; + } + function* getTranspiledText() { + const config = yield* api.readConfigFile.gen("/tsconfig.json"); + const parsed = yield* api.parseJsonConfigFileContent.gen(config.config, { configFileName: "/tsconfig.json" }); + const output = yield* api.transpileModule.gen("const value: string = 'ok';", { compilerOptions: parsed.options }); + return output.outputText; + } + + try { + const [[config, outputText]] = api.batch(all(getStrictOption(), getTranspiledText())); + assert.equal(config.strict, true); + assert.deepEqual([...config.fileNames].sort(), ["/src/bind.ts", "/src/index.ts", "/src/models.ts", "/src/suggestions.ts", "/src/syntax.ts"]); + assert.match(outputText, /const value = ['"]ok['"]/); + assert.deepEqual(requestBatches, [ + ["initialize"], + ["parseCommandLine", "readConfigFile"], + ["readConfigFile", "parseJsonConfigFileContent"], + ["parseJsonConfigFileContent", "transpileModule"], + ]); + } + finally { + api.close(); + } + }); + + test("throws request errors into generators", () => { + const api = spawnAPI(); + const events: string[] = []; + function* requestWithCleanup(): Generator { + try { + yield { method: "unknown", params: null } as unknown as APIRequest; + return "unexpected"; + } + catch { + events.push("caught"); + return "recovered"; + } + finally { + events.push("finally"); + } + } + + try { + assert.deepEqual(api.batch(requestWithCleanup()), ["recovered"]); + assert.deepEqual(events, ["caught", "finally"]); + } + finally { + api.close(); + } + }); + + test("lazily caches generator-enabled methods", () => { + const api = spawnAPI(); + const prototype = Object.getPrototypeOf(api); + try { + assert.equal(Object.hasOwn(api, "parseCommandLine"), false); + assert.equal(typeof Object.getOwnPropertyDescriptor(prototype, "parseCommandLine")?.get, "function"); + + const method = api.parseCommandLine; + assert.strictEqual(api.parseCommandLine, method); + assert.equal(Object.hasOwn(api, "parseCommandLine"), true); + assert.equal(Object.keys(api).includes("parseCommandLine"), false); + assert.equal(typeof method.gen, "function"); + } + finally { + api.close(); + } + }); + + test("advances generators through multiple request rounds", () => { + const api = spawnAPI(); + try { + const [commandLine, config] = api.batch( + api.parseCommandLine.gen(["--strict"]), + api.readConfigFile.gen("/tsconfig.json"), + ); + + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + } + finally { + api.batch(api.close.gen()); + api.close(); + } + }); + + test("transparently paginates batch responses", () => { + const api = spawnAPI(undefined, { maxResponseBytesPerPage: 1 }); + try { + const [strict, config, noImplicitAny] = api.batch( + api.parseCommandLine.gen(["--strict"]), + api.readConfigFile.gen("/tsconfig.json"), + api.parseCommandLine.gen(["--noImplicitAny"]), + ); + + assert.equal(strict.options.strict, true); + assert.deepEqual(config.config, {}); + assert.equal(noImplicitAny.options.noImplicitAny, true); + } + finally { + api.close(); + } + }); + + test("transparently paginates responses at the default batch size limit", () => { + const largeConfigValue = "x".repeat(5_000_000); + const requestCount = 64; + const api = spawnAPI({ "/large.json": JSON.stringify({ largeConfigValue }) }, { collectTiming: true }); + try { + api.parseCommandLine([]); + api.resetTimingInfo(); + + const configs = api.batch(...Array.from({ length: requestCount }, () => api.readConfigFile.gen("/large.json"))); + assert.equal(configs.length, requestCount); + for (const config of configs) { + assert.deepEqual(config.config, { largeConfigValue }); + } + + const timing = api.getTimingInfo(); + assert.equal(timing.totals.requestCount, 2); + assert.deepEqual(timing.recentRequests.map(request => request.method), ["batchRequests", "batchRequests"]); + } + finally { + api.close(); + } + }); + + test("executes deferred generators without returning their results", context => { + const api = spawnAPI(); + const requestBatches: string[][] = []; + observeRequestBatches(api, requestBatches, context); + function* runConcurrentRequests() { + yield* defer(api.parseCommandLine.gen(["--strict"])); + yield* defer(api.readConfigFile.gen("/tsconfig.json")); + return yield* all( + api.parseCommandLine.gen(["--target", "esnext"]), + api.readConfigFile.gen("/base.json"), + ); + } + + try { + const [[[commandLine, config]]] = api.batch(all(runConcurrentRequests())); + assert.equal(commandLine.options.target, 99); + assert.deepEqual(config.config, {}); + assert.deepEqual(requestBatches, [ + ["initialize"], + ["parseCommandLine", "readConfigFile", "parseCommandLine", "readConfigFile"], + ]); + + const [onlyConfig] = api.batch( + defer(api.parseCommandLine.gen(["--strict"])), + api.readConfigFile.gen("/tsconfig.json"), + ); + assert.deepEqual(onlyConfig.config, {}); + } + finally { + api.close(); + } + }); + + test("waits for deferred work spawned after a request", () => { + const api = spawnAPI(); + const events: string[] = []; + function* backgroundWork() { + events.push("started"); + yield* api.parseCommandLine.gen(["--strict"]); + events.push("completed"); + } + function* foregroundWork() { + const config = yield* api.readConfigFile.gen("/tsconfig.json"); + yield* defer(backgroundWork()); + events.push("foreground completed"); + return config; + } + + try { + const [config] = api.batch(foregroundWork()); + assert.deepEqual(config.config, {}); + assert.deepEqual(events, ["started", "foreground completed", "completed"]); + } + finally { + api.close(); + } + }); + + test("does not block on deferred work from a nested all", () => { + const api = spawnAPI(); + const events: string[] = []; + function* backgroundWork() { + yield* api.readConfigFile.gen("/base.json"); + yield* api.readConfigFile.gen("/tsconfig.json"); + yield* api.readConfigFile.gen("/base.json"); + events.push("background completed"); + } + function* nestedWork() { + yield* defer(backgroundWork()); + return yield* api.parseCommandLine.gen(["--strict"]); + } + function* foregroundWork() { + const [commandLine] = yield* all(nestedWork()); + events.push("nested all completed"); + const config = yield* api.readConfigFile.gen("/tsconfig.json"); + events.push("foreground completed"); + return { commandLine, config }; + } + + try { + api.parseCommandLine([]); + const [{ commandLine, config }] = api.batch(foregroundWork()); + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + assert.deepEqual(events, ["nested all completed", "foreground completed", "background completed"]); + } + finally { + api.close(); + } + }); + + test("omits deferred results in any batch position", () => { + const api = spawnAPI(); + let synchronousWorkCompleted = false; + function* synchronousWork() { + synchronousWorkCompleted = true; + return "ignored"; + } + + try { + const [commandLine, config] = api.batch( + api.parseCommandLine.gen(["--strict"]), + defer(api.readConfigFile.gen("/base.json")), + api.readConfigFile.gen("/tsconfig.json"), + defer(synchronousWork()), + ); + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + assert.equal(synchronousWorkCompleted, true); + } + finally { + api.close(); + } + }); + + test("throws request errors into deferred generators", () => { + const api = spawnAPI(); + const events: string[] = []; + function* requestWithCleanup(): Generator { + try { + yield { method: "unknown", params: null } as unknown as APIRequest; + } + catch { + events.push("caught"); + } + finally { + events.push("finally"); + } + } + + try { + assert.deepEqual(api.batch(defer(requestWithCleanup())), []); + assert.deepEqual(events, ["caught", "finally"]); + } + finally { + api.close(); + } + }); + + test("batch execution deduplicates only initialize requests within a round", () => { + const requestBatches: string[][] = []; + function* request(method: string): Generator { + return yield { method, params: null } as unknown as APIRequest; + } + + const results = executeRequestGenerators( + [request("initialize"), request("initialize"), request("other"), request("other")], + requests => { + requestBatches.push(requests.map(request => request.method)); + return requests.map(request => ({ result: request.method })); + }, + ); + + assert.deepEqual(requestBatches, [["initialize", "other", "other"]]); + assert.deepEqual(results, ["initialize", "initialize", "other", "other"]); + }); + + test("does not execute an empty request round", () => { + let executions = 0; + function* completed(value: string) { + return value; + } + + assert.deepEqual( + executeRequestGenerators([], () => { + executions++; + return []; + }), + [], + ); + assert.deepEqual( + executeRequestGenerators([completed("first"), completed("second")], () => { + executions++; + return []; + }), + ["first", "second"], + ); + assert.equal(executions, 0); + }); + + test("maps deduplicated responses back into request groups", () => { + const requestBatches: string[][] = []; + function* groupedRequests(): Generator { + const responses = yield [ + { method: "initialize", params: null }, + { method: "other", params: null }, + { method: "initialize", params: null }, + ] as unknown as readonly APIRequest[]; + return responses.map(response => response.result); + } + function* initializeRequest(): Generator { + return yield { method: "initialize", params: null } as unknown as APIRequest; + } + + const results = executeRequestGenerators([groupedRequests(), initializeRequest()], requests => { + requestBatches.push(requests.map(request => request.method)); + return requests.map((request, index) => ({ result: `${request.method}:${index}` })); + }); + + assert.deepEqual(requestBatches, [["initialize", "other"]]); + assert.deepEqual(results, [["initialize:0", "other:1", "initialize:0"], "initialize:0"]); + }); + + test("isolates handled errors from other generators in the same round", () => { + const requestBatches: string[][] = []; + function* recoveringRequest(): Generator { + try { + yield { method: "bad", params: null } as unknown as APIRequest; + } + catch { + return yield { method: "recovery", params: null } as unknown as APIRequest; + } + return "unexpected"; + } + function* successfulRequest(): Generator { + return yield { method: "good", params: null } as unknown as APIRequest; + } + + const results = executeRequestGenerators([recoveringRequest(), successfulRequest()], requests => { + requestBatches.push(requests.map(request => request.method)); + return requests.map(request => request.method as string === "bad" ? { result: undefined, error: "failed" } : { result: request.method }); + }); + + assert.deepEqual(requestBatches, [["bad", "good"], ["recovery"]]); + assert.deepEqual(results, ["recovery", "good"]); + }); + + test("executes recursively deferred generators", () => { + const events: string[] = []; + function* grandchild() { + yield { method: "grandchild", params: null } as unknown as APIRequest; + events.push("grandchild completed"); + } + function* child() { + yield* defer(grandchild()); + yield { method: "child", params: null } as unknown as APIRequest; + events.push("child completed"); + } + function* parent() { + yield* defer(child()); + yield { method: "parent", params: null } as unknown as APIRequest; + events.push("parent completed"); + } + + executeRequestGenerators([parent()], requests => requests.map(request => ({ result: request.method }))); + + assert.deepEqual(events, ["parent completed", "child completed", "grandchild completed"]); + }); + + test("surfaces deferred errors after the parent completes", () => { + const events: string[] = []; + function* background() { + yield { method: "background", params: null } as unknown as APIRequest; + } + function* parent() { + yield* defer(background()); + events.push("parent completed"); + } + + assert.throws( + () => executeRequestGenerators([parent()], requests => requests.map(() => ({ result: undefined, error: "deferred failure" }))), + /deferred failure/, + ); + assert.deepEqual(events, ["parent completed"]); + }); + + test("appends deferred work after the parent request", () => { + const requestBatches: string[][] = []; + function* background() { + yield { method: "background", params: null } as unknown as APIRequest; + } + function* parent() { + yield* defer(background()); + yield { method: "parent", params: null } as unknown as APIRequest; + } + + executeRequestGenerators([parent()], requests => { + requestBatches.push(requests.map(request => request.method)); + return requests.map(request => ({ result: request.method })); + }); + + assert.deepEqual(requestBatches, [["parent", "background"]]); + }); + + test("rejects repeated generator instances", () => { + function* request(): Generator { + return yield { method: "request", params: null } as unknown as APIRequest; + } + const generator = request(); + + assert.throws( + () => executeRequestGenerators([generator, generator], requests => requests.map(request => ({ result: request.method }))), + /same generator instance more than once/, + ); + }); + + test("yields source file metadata requests on cache misses", () => { + const api = spawnAPI(); + try { + using snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const sourceFile = program.getSourceFile("/src/index.ts")!; + const state = program.getSourceFileMetadataByPath.gen(sourceFile.path).next(); + + if (state.done) assert.fail("Expected getSourceFileMetadataByPath.gen() to yield a request"); + assert.equal(state.value.method, "getSourceFileMetadata"); + } + finally { + api.close(); + } + }); + + test("uses generators attached to sync API methods", () => { + const api = spawnAPI(); + try { + using snapshot = api.batch(api.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const node = cast( + cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, + isNamedImports, + ).elements[0].name; + + const [defaultProject, sourceFileNames] = api.batch( + snapshot.getDefaultProjectForFile.gen("/src/index.ts"), + project.program.getSourceFileNames.gen(), + ); + assert.strictEqual(defaultProject, project); + assert.ok(sourceFileNames.includes(toRootedFilePath("/src/foo.ts", undefined))); + assert.ok(sourceFileNames.includes(toRootedFilePath("/src/index.ts", undefined))); + + const [symbol, type] = api.batch( + project.checker.getSymbolAtLocation.gen(node), + project.checker.getTypeAtLocation.gen(node), + ); + const syncSymbol = project.checker.getSymbolAtLocation(node); + const syncType = project.checker.getTypeAtLocation(node); + + assert.ok(symbol); + assert.ok(syncSymbol); + assert.equal(symbol.name, "foo"); + assert.strictEqual(symbol, syncSymbol); + assert.strictEqual(type, syncType); + assert.ok(symbol.flags & SymbolFlags.Alias); + assert.ok(type.flags & TypeFlags.NumberLiteral); + assert.equal(Object.hasOwn(syncType, "getProperties"), false); + assert.equal(typeof Object.getOwnPropertyDescriptor(Object.getPrototypeOf(syncType), "getProperties")?.get, "function"); + + const [parent, properties] = api.batch( + syncSymbol.getParent.gen(), + syncType.getProperties.gen(), + ); + assert.equal(parent, undefined); + assert.ok(properties.some(property => property.name === "toString")); + assert.equal(Object.hasOwn(syncType, "getProperties"), true); + assert.equal(Object.keys(syncType).includes("getProperties"), false); + } + finally { + api.batch(api.close.gen()); + api.close(); + } + }); + + test("keeps every publicly reachable generator-backed method in sync", () => { + const api = spawnAPI(parityFiles); + try { + using snapshot = api.batch(api.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const { checker, languageService, program } = project; + const { printer } = api; + const indexFile = program.getSourceFile("/src/index.ts")!; + const modelsFile = program.getSourceFile("/src/models.ts")!; + + const importDeclaration = cast(indexFile.statements[0], isImportDeclaration); + const importSpecifier = cast(importDeclaration.moduleSpecifier, isStringLiteral); + const typeReferenceDirective = indexFile.typeReferenceDirectives[0]; + const importedNames = cast(importDeclaration.importClause?.namedBindings, isNamedImports); + const importedDerived = importedNames.elements.find(element => element.name.text === "Derived")!.name; + const exportDeclaration = cast(indexFile.statements[1], isExportDeclaration); + const exportSpecifier = cast(exportDeclaration.exportClause, isNamedExports).elements[0]; + const combineDeclaration = cast(indexFile.statements[2], isFunctionDeclaration); + const derivedDeclaration = cast( + cast(indexFile.statements[3], isVariableStatement).declarationList.declarations[0], + isVariableDeclaration, + ); + const boxDeclaration = cast( + cast(indexFile.statements[4], isVariableStatement).declarationList.declarations[0], + isVariableDeclaration, + ); + const shorthandDeclaration = cast( + cast(indexFile.statements[5], isVariableStatement).declarationList.declarations[0], + isVariableDeclaration, + ); + const shorthand = cast( + cast(shorthandDeclaration.initializer, isObjectLiteralExpression).properties[0], + isShorthandPropertyAssignment, + ); + const calledDeclaration = cast( + cast(indexFile.statements[6], isVariableStatement).declarationList.declarations[0], + isVariableDeclaration, + ); + const callExpression = cast(calledDeclaration.initializer, isCallExpression); + const interfaceDeclaration = cast(modelsFile.statements[0], isInterfaceDeclaration); + const derivedClassDeclaration = cast(modelsFile.statements[2], isClassDeclaration); + const boxedAlias = cast(modelsFile.statements[3], isTypeAliasDeclaration); + const tupleAlias = cast(modelsFile.statements[4], isTypeAliasDeclaration); + const arrayAlias = cast(modelsFile.statements[5], isTypeAliasDeclaration); + const conditionalAlias = cast(modelsFile.statements[6], isTypeAliasDeclaration); + const indexedAlias = cast(modelsFile.statements[7], isTypeAliasDeclaration); + const indexAlias = cast(modelsFile.statements[8], isTypeAliasDeclaration); + const unionAlias = cast(modelsFile.statements[9], isTypeAliasDeclaration); + const enumDeclaration = cast(modelsFile.statements[10], isEnumDeclaration); + const mappedAlias = cast(modelsFile.statements[12], isTypeAliasDeclaration); + + const importedDerivedSymbol = checker.getSymbolAtLocation(importedDerived)!; + const combineSymbol = checker.getSymbolAtLocation(combineDeclaration.name!)!; + const localCombineSymbol = checker.getSymbolsInScope(combineDeclaration, SymbolFlags.Function).find(symbol => symbol.name === "combine")!; + const derivedSymbol = checker.getSymbolAtLocation(cast(derivedDeclaration.name, isIdentifier))!; + const interfaceSymbol = checker.getSymbolAtLocation(interfaceDeclaration.name)!; + const derivedClassSymbol = checker.getSymbolAtLocation(derivedClassDeclaration.name!)!; + const moduleSymbol = checker.getSymbolOfSourceFile("/src/models.ts")!; + const unimportedSymbol = checker.getMemberInModuleExports(moduleSymbol, "Unimported")!; + const interfaceType = checker.getDeclaredTypeOfSymbol(interfaceSymbol) as InterfaceType; + const derivedType = checker.getDeclaredTypeOfSymbol(derivedClassSymbol) as InterfaceType; + const derivedConstructorType = checker.getTypeOfSymbol(derivedClassSymbol); + const boxedType = checker.getTypeFromTypeNode(boxedAlias.type) as TypeReference; + const boxedOptSymbol = checker.getPropertyOfType(boxedType, "opt"); + assert.ok(boxedOptSymbol); + const tupleType = checker.getTypeFromTypeNode(tupleAlias.type); + const arrayType = checker.getTypeFromTypeNode(arrayAlias.type); + const conditionalType = checker.getTypeFromTypeNode(conditionalAlias.type) as ConditionalType; + const indexedType = checker.getTypeFromTypeNode(indexedAlias.type) as IndexedAccessType; + checker.getTypeFromTypeNode(indexAlias.type); + const unionType = checker.getTypeFromTypeNode(unionAlias.type); + const typeParameter = checker.getTypeAtLocation(combineDeclaration.typeParameters![0].name) as TypeParameter; + const literalType = checker.getTypeAtLocation(enumDeclaration.members[0].name) as LiteralType; + const substitutionType = conditionalType.getTrueType() as SubstitutionType; + const mappedType = checker.getTypeFromTypeNode(mappedAlias.type) as MappedType; + const signature = checker.getSignatureFromDeclaration(combineDeclaration); + const predicateDeclaration = indexFile.statements.find(statement => isFunctionDeclaration(statement) && statement.name?.text === "isDerived")!; + const predicateSignature = checker.getSignatureFromDeclaration(predicateDeclaration); + const badCallDeclaration = indexFile.statements + .filter(isVariableStatement) + .flatMap(statement => [...statement.declarationList.declarations]) + .find(declaration => isIdentifier(declaration.name) && declaration.name.text === "badCall")!; + const unknownSignature = checker.getResolvedSignature(cast(badCallDeclaration.initializer, isCallExpression)); + let argumentsIdentifier: Identifier | undefined; + let absentIdentifier: Identifier | undefined; + indexFile.forEachChild(function visit(node) { + if (isIdentifier(node)) { + if (node.text === "arguments") argumentsIdentifier = node; + if (node.text === "absent" && !absentIdentifier) absentIdentifier = node; + } + node.forEachChild(visit); + }); + assert.ok(argumentsIdentifier); + assert.ok(absentIdentifier); + const absentAlias = checker.getSymbolAtLocation(absentIdentifier); + assert.ok(absentAlias); + const unknownSymbol = checker.getAliasedSymbol(absentAlias); + const undefinedSymbol = checker.resolveName("undefined", SymbolFlags.Value, absentIdentifier); + const argumentsSymbol = checker.getResolvedSymbol(argumentsIdentifier); + assert.ok(unknownSymbol); + assert.ok(undefinedSymbol); + assert.ok(argumentsSymbol); + const constructSignature = derivedConstructorType.getConstructSignatures()[0]; + const derivedMemberSymbol = derivedType.getProperty("derived")!; + const nodeHandle = combineSymbol.valueDeclaration ?? combineSymbol.declarations[0]; + const completionPosition = parityFiles["/src/index.ts"].indexOf("semanticIssue"); + const temporaryProjects: string[] = []; + + const orderedArguments = Array.from({ length: 128 }, (_, index) => ["--strict", `--outDir=out-${index}`] as const); + const orderedGenerated = api.batch(...orderedArguments.map(args => api.parseCommandLine.gen(args))); + const orderedSync = orderedArguments.map(args => api.parseCommandLine(args)); + assertDeepArraysEquivalent(orderedGenerated, orderedSync, "large parseCommandLine batch"); + exercisedMethods.add("API.parseCommandLine"); + + const timingGeneratorAPI = spawnAPI(parityFiles, { collectTiming: true }); + const timingSyncAPI = spawnAPI(parityFiles, { collectTiming: true }); + timingGeneratorAPI.parseCommandLine(["--strict"]); + timingSyncAPI.parseCommandLine(["--strict"]); + assertTimingInfoEquivalent( + timingGeneratorAPI.batch(timingGeneratorAPI.getTimingInfo.gen())[0], + timingSyncAPI.getTimingInfo(), + "API.getTimingInfo", + ); + timingGeneratorAPI.batch(timingGeneratorAPI.resetTimingInfo.gen()); + timingSyncAPI.resetTimingInfo(); + assertTimingInfoEquivalent(timingGeneratorAPI.getTimingInfo(), timingSyncAPI.getTimingInfo(), "API.resetTimingInfo"); + exercisedMethods.add("API.getTimingInfo"); + exercisedMethods.add("API.resetTimingInfo"); + timingGeneratorAPI.close(); + timingSyncAPI.close(); + + assert.ok(project.getImportAdderEdits("/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]).length > 0); + assert.ok(program.getSyntacticDiagnostics("/src/syntax.ts").length > 0); + assert.ok(program.getBindDiagnostics("/src/bind.ts").length > 0); + assert.ok(program.getSuggestionDiagnostics("/src/suggestions.ts").length > 0); + assert.strictEqual(derivedMemberSymbol.getParent(), derivedClassSymbol); + assert.ok(checker.getTypePredicateOfSignature(predicateSignature)); + assert.equal(checker.isUnknownSymbol(unknownSymbol), true); + assert.equal(checker.isUndefinedSymbol(undefinedSymbol), true); + assert.equal(checker.isArgumentsSymbol(argumentsSymbol), true); + assert.equal(checker.isUnknownSignature(unknownSignature), true); + + const moduleResolutionSpec = { + fallback: "unresolved" as const, + entries: [{ moduleName: "models", result: { resolvedFileName: "/src/models.ts" } }], + }; + const moduleResolver = api.batch(api.createModuleResolver.gen( + { moduleResolution: ModuleResolutionKind.NodeNext }, + { moduleResolutions: moduleResolutionSpec }, + ))[0]; + exercisedMethods.add("API.createModuleResolver"); + + const cases: ParityCase[] = [ + parityCase("API", "parseConfigFile", api.parseConfigFile, assertDeepEquivalent, "/tsconfig.json"), + parityCase("API", "parseCommandLine", api.parseCommandLine, assertDeepEquivalent, ["--strict", "--noEmit"]), + parityCase("API", "readConfigFile", api.readConfigFile, assertDeepEquivalent, "/tsconfig.json"), + parityCase("API", "parseJsonConfigFileContent", api.parseJsonConfigFileContent, assertDeepEquivalent, { compilerOptions: { strict: true } }, { configDirectory: "/" }), + parityCase("API", "parseJsonConfigFileContent", api.parseJsonConfigFileContent, assertDeepEquivalent, { extends: "./base.json" }, { configFileName: "/tsconfig.json" }), + parityCase("API", "createSourceFile", api.createSourceFile, assertRetainedSourceFilesEquivalent, "/generated.ts", "export const generated = true;"), + parityCase("API", "createSourceFileFromFile", api.createSourceFileFromFile, assertRetainedSourceFilesEquivalent, "/src/index.ts"), + parityCase("API", "retainSourceFile", api.retainSourceFile, assertRetainedSourceFilesEquivalent, indexFile), + parityCase("API", "getSymbol", api.getSymbol, assertOptionalSymbolsEquivalent, combineDeclaration), + parityCase("API", "transpileModule", api.transpileModule, assertDeepEquivalent, "export const value: number = 1;", { compilerOptions: { module: 99 } }), + parityCase("API", "transpileModuleFromFile", api.transpileModuleFromFile, assertDeepEquivalent, "/src/index.ts"), + parityCase("API", "transpileDeclaration", api.transpileDeclaration, assertDeepEquivalent, "export function declared(value: string): number { return value.length; }"), + parityCase("API", "transpileDeclarationFromFile", api.transpileDeclarationFromFile, assertDeepEquivalent, "/src/index.ts"), + parityCase("API", "createSnapshot", api.createSnapshot as GeneratorMethod<[params: { openProject: string; }], Snapshot>, assertSnapshotsEquivalent, { openProject: "/tsconfig.json" }), + parityCase("API", "createProgram", api.createProgram, assertProgramsEquivalent, ["/src/index.ts"], { noLib: true }), + parityCase("API", "createBuildOrchestrator", api.createBuildOrchestrator, assertBuildOrchestratorsEquivalent, ["/tsconfig.json"], { cwd: "/" }), + parityCase("API", "runWithTemporaryFileUpdate", api.runWithTemporaryFileUpdate, assertDeepEquivalent, snapshot, "/src/index.ts", parityFiles["/src/index.ts"].replace("123", '"fixed"'), (temporarySnapshot: Snapshot) => { + temporaryProjects.push(temporarySnapshot.getProjects()[0].configFileName!); + }), + parityCase("Snapshot", "getDefaultProjectForFile", snapshot.getDefaultProjectForFile, assertOptionalProjectsEquivalent, "/src/index.ts"), + parityCase("ModuleResolver", "resolveModuleName", moduleResolver.resolveModuleName, assertDeepEquivalent, "models", "/src"), + parityCase("Snapshot", "update", snapshot.update, assertSnapshotsEquivalent, {}), + + parityCase("Project", "getImportAdderEdits", project.getImportAdderEdits, assertDeepEquivalent, "/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]), + parityCase("Project", "getImportEditsForSymbols", project.getImportEditsForSymbols, assertDeepEquivalent, "/src/index.ts", [unimportedSymbol]), + + parityCase("LanguageService", "getImportAdderEdits", languageService.getImportAdderEdits, assertDeepEquivalent, "/src/index.ts", [{ kind: "importSymbol", symbol: unimportedSymbol }]), + parityCase("LanguageService", "getImportEditsForSymbols", languageService.getImportEditsForSymbols, assertDeepEquivalent, "/src/index.ts", [unimportedSymbol], { isValidTypeOnlyUseSite: true }), + parityCase("LanguageService", "getReferencedSymbolsForNode", languageService.getReferencedSymbolsForNode, assertDeepEquivalent, combineDeclaration.name!, combineDeclaration.name!.end), + parityCase("LanguageService", "getSignatureUsage", languageService.getSignatureUsage, assertDeepEquivalent, combineDeclaration), + parityCase("LanguageService", "getCompletionsAtPosition", languageService.getCompletionsAtPosition, assertDeepEquivalent, "/src/index.ts", completionPosition, { includeSymbol: true }), + + parityCase("Program", "getSourceFile", program.getSourceFile, assertOptionalSourceFilesEquivalent, "/src/index.ts"), + parityCase("Program", "getModeForUsageLocation", program.getModeForUsageLocation, assertDeepEquivalent, "/src/index.ts", importSpecifier), + parityCase("Program", "getModeForResolutionAtIndex", program.getModeForResolutionAtIndex, assertDeepEquivalent, "/src/index.ts", 0), + parityCase("Program", "getResolvedModule", program.getResolvedModule, assertDeepEquivalent, "/src/index.ts", "./models.js", ModuleKind.CommonJS), + parityCase("Program", "getResolvedModuleFromModuleSpecifier", program.getResolvedModuleFromModuleSpecifier, assertDeepEquivalent, importSpecifier), + parityCase("Program", "getResolvedTypeReferenceDirective", program.getResolvedTypeReferenceDirective, assertDeepEquivalent, "/src/index.ts", "parity", ModuleKind.CommonJS), + parityCase("Program", "getResolvedTypeReferenceDirectiveFromTypeReferenceDirective", program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective, assertDeepEquivalent, typeReferenceDirective, "/src/index.ts"), + parityCase("Program", "getSourceFileByPath", program.getSourceFileByPath, assertOptionalSourceFilesEquivalent, indexFile.path), + parityCase("Program", "getSourceFileNames", program.getSourceFileNames, assertDeepEquivalent), + parityCase("Program", "getSourceFileMetadata", program.getSourceFileMetadata, assertDeepEquivalent, "/src/index.ts"), + parityCase("Program", "getSourceFileMetadataByPath", program.getSourceFileMetadataByPath, assertDeepEquivalent, indexFile.path), + parityCase("Program", "isSourceFileFromExternalLibrary", program.isSourceFileFromExternalLibrary, assertDeepEquivalent, indexFile), + parityCase("Program", "isSourceFileDefaultLibrary", program.isSourceFileDefaultLibrary, assertDeepEquivalent, indexFile), + parityCase("Program", "getConfigFileNames", program.getConfigFileNames, assertDeepEquivalent), + parityCase("Program", "getConfigSourceFile", program.getConfigSourceFile, assertOptionalSourceFilesEquivalent, "/base.json"), + parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent), + parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent, "/src/syntax.ts"), + parityCase("Program", "getSyntacticDiagnostics", program.getSyntacticDiagnostics, assertDeepEquivalent, ["/src/syntax.ts", "/src/index.ts"]), + parityCase("Program", "getBindDiagnostics", program.getBindDiagnostics, assertDeepEquivalent, "/src/bind.ts"), + parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent), + parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent, "/src/index.ts"), + parityCase("Program", "getSemanticDiagnostics", program.getSemanticDiagnostics, assertDeepEquivalent, ["/src/index.ts", "/src/models.ts"]), + parityCase("Program", "getSuggestionDiagnostics", program.getSuggestionDiagnostics, assertDeepEquivalent, "/src/suggestions.ts"), + parityCase("Program", "getDeclarationDiagnostics", program.getDeclarationDiagnostics, assertDeepEquivalent, "/src/index.ts"), + parityCase("Program", "getProgramDiagnostics", program.getProgramDiagnostics, assertDeepEquivalent), + parityCase("Program", "getGlobalDiagnostics", program.getGlobalDiagnostics, assertDeepEquivalent), + parityCase("Program", "getConfigFileParsingDiagnostics", program.getConfigFileParsingDiagnostics, assertDeepEquivalent), + parityCase("Program", "emit", program.emit, assertDeepEquivalent), + parityCase("Program", "emitToString", program.emitToString, assertDeepEquivalent), + parityCase("Program", "getJavaScriptEmit", program.getJavaScriptEmit, assertDeepEquivalent, ["/src/index.ts"]), + parityCase("Program", "getDeclarationEmit", program.getDeclarationEmit, assertDeepEquivalent, ["/src/index.ts"]), + + parityCase("Checker", "getMergedSymbol", checker.getMergedSymbol, assertSymbolsEquivalent, interfaceSymbol), + parityCase("Checker", "getSymbolOfNode", checker.getSymbolOfNode, assertOptionalSymbolsEquivalent, interfaceDeclaration), + parityCase("Checker", "getSymbolOfNode", checker.getSymbolOfNode, assertOptionalSymbolsEquivalent, interfaceDeclaration.name), + parityCase("Checker", "getSymbolOfDeclaration", checker.getSymbolOfDeclaration, assertSymbolsEquivalent, interfaceDeclaration), + parityCase("Checker", "getParentOfSymbol", checker.getParentOfSymbol, assertOptionalSymbolsEquivalent, unimportedSymbol), + parityCase("Checker", "getSymbolAtLocation", selectGeneratorMethod<[node: Node], Symbol | undefined>(checker.getSymbolAtLocation), assertOptionalSymbolsEquivalent, importedDerived), + parityCase("Checker", "getSymbolAtLocation", checker.getSymbolAtLocation, assertOptionalSymbolArraysEquivalent, [importedDerived, combineDeclaration.name!]), + parityCase("Checker", "getSymbolAtPosition", selectGeneratorMethod<[file: string, position: number], Symbol | undefined>(checker.getSymbolAtPosition), assertOptionalSymbolsEquivalent, "/src/index.ts", importedDerived.pos), + parityCase("Checker", "getSymbolAtPosition", checker.getSymbolAtPosition, assertOptionalSymbolArraysEquivalent, "/src/index.ts", [importedDerived.pos, combineDeclaration.name!.pos]), + parityCase("Checker", "getSymbolOfSourceFile", selectGeneratorMethod<[file: string], Symbol | undefined>(checker.getSymbolOfSourceFile), assertOptionalSymbolsEquivalent, "/src/models.ts"), + parityCase("Checker", "getSymbolOfSourceFile", checker.getSymbolOfSourceFile, assertOptionalSymbolArraysEquivalent, ["/src/index.ts", "/src/models.ts"]), + parityCase("Checker", "getTypeOfSymbol", selectGeneratorMethod<[symbol: Symbol], Type>(checker.getTypeOfSymbol), assertTypesEquivalent, derivedClassSymbol), + parityCase("Checker", "getTypeOfSymbol", checker.getTypeOfSymbol, assertTypeArraysEquivalent, [derivedClassSymbol, combineSymbol]), + parityCase("Checker", "getDeclaredTypeOfSymbol", checker.getDeclaredTypeOfSymbol, assertTypesEquivalent, interfaceSymbol), + parityCase("Checker", "getReferencesToSymbolInFile", checker.getReferencesToSymbolInFile, assertNodeHandleArraysEquivalent, "/src/index.ts", derivedSymbol), + parityCase("Checker", "getReferencedSymbolsForNode", checker.getReferencedSymbolsForNode, assertDeepEquivalent, combineDeclaration.name!, combineDeclaration.name!.end), + parityCase("Checker", "getSignatureUsage", checker.getSignatureUsage, assertDeepEquivalent, combineDeclaration), + parityCase("Checker", "getCompletionsAtPosition", checker.getCompletionsAtPosition, assertDeepEquivalent, "/src/index.ts", completionPosition, { includeSymbol: true }), + parityCase("Checker", "getTypeAtLocation", selectGeneratorMethod<[node: Node], Type>(checker.getTypeAtLocation), assertTypesEquivalent, boxDeclaration.name), + parityCase("Checker", "getTypeAtLocation", checker.getTypeAtLocation, assertTypeArraysEquivalent, [boxDeclaration.name, combineDeclaration.name!]), + parityCase("Checker", "getSignaturesOfType", checker.getSignaturesOfType, assertSignatureArraysEquivalent, checker.getTypeAtLocation(combineDeclaration.name!), SignatureKind.Call), + parityCase("Checker", "getResolvedSignature", checker.getResolvedSignature, assertOptionalSignaturesEquivalent, callExpression), + parityCase("Checker", "getTypeAtPosition", selectGeneratorMethod<[file: string, position: number], Type | undefined>(checker.getTypeAtPosition), assertOptionalTypesEquivalent, "/src/index.ts", boxDeclaration.name.pos), + parityCase("Checker", "getTypeAtPosition", checker.getTypeAtPosition, assertOptionalTypeArraysEquivalent, "/src/index.ts", [boxDeclaration.name.pos, calledDeclaration.name.pos]), + parityCase("Checker", "resolveName", checker.resolveName, assertOptionalSymbolsEquivalent, "Derived", SymbolFlags.Type | SymbolFlags.Value, importedDerived), + parityCase("Checker", "resolveName", checker.resolveName, assertOptionalSymbolsEquivalent, "Derived", SymbolFlags.Type | SymbolFlags.Value, { document: "/src/index.ts", position: importedDerived.pos }), + parityCase("Checker", "getSymbolsInScope", checker.getSymbolsInScope, assertUnorderedSymbolArraysEquivalent, combineDeclaration, SymbolFlags.Value | SymbolFlags.Type), + parityCase("Checker", "getSymbolsInScope", checker.getSymbolsInScope, assertUnorderedSymbolArraysEquivalent, { document: "/src/index.ts", position: combineDeclaration.pos }, SymbolFlags.Value), + parityCase("Checker", "getResolvedSymbol", checker.getResolvedSymbol, assertOptionalSymbolsEquivalent, importedDerived), + parityCase("Checker", "getContextualType", checker.getContextualType, assertOptionalTypesEquivalent, boxDeclaration.initializer!), + parityCase("Checker", "getContextualTypeForArgumentAtIndex", checker.getContextualTypeForArgumentAtIndex, assertOptionalTypesEquivalent, callExpression, 0), + parityCase("Checker", "getAwaitedType", checker.getAwaitedType, assertOptionalTypesEquivalent, interfaceType), + parityCase("Checker", "getBaseTypeOfLiteralType", checker.getBaseTypeOfLiteralType, assertTypesEquivalent, literalType), + parityCase("Checker", "getNonNullableType", checker.getNonNullableType, assertTypesEquivalent, interfaceType), + parityCase("Checker", "getTypeFromTypeNode", checker.getTypeFromTypeNode, assertTypesEquivalent, boxedAlias.type), + parityCase("Checker", "getWidenedType", checker.getWidenedType, assertTypesEquivalent, literalType), + parityCase("Checker", "getParameterType", checker.getParameterType, assertTypesEquivalent, signature, 0), + parityCase("Checker", "isArrayLikeType", checker.isArrayLikeType, assertDeepEquivalent, arrayType), + parityCase("Checker", "isTypeAssignableTo", checker.isTypeAssignableTo, assertDeepEquivalent, derivedType, interfaceType), + parityCase("Checker", "getShorthandAssignmentValueSymbol", checker.getShorthandAssignmentValueSymbol, assertOptionalSymbolsEquivalent, shorthand), + parityCase("Checker", "getTypeOfSymbolAtLocation", checker.getTypeOfSymbolAtLocation, assertTypesEquivalent, derivedSymbol, shorthand), + parityCase("Checker", "getAnyType", checker.getAnyType, assertTypesEquivalent), + parityCase("Checker", "getStringType", checker.getStringType, assertTypesEquivalent), + parityCase("Checker", "getNumberType", checker.getNumberType, assertTypesEquivalent), + parityCase("Checker", "getBooleanType", checker.getBooleanType, assertTypesEquivalent), + parityCase("Checker", "getVoidType", checker.getVoidType, assertTypesEquivalent), + parityCase("Checker", "getUndefinedType", checker.getUndefinedType, assertTypesEquivalent), + parityCase("Checker", "getNullType", checker.getNullType, assertTypesEquivalent), + parityCase("Checker", "getNeverType", checker.getNeverType, assertTypesEquivalent), + parityCase("Checker", "getUnknownType", checker.getUnknownType, assertTypesEquivalent), + parityCase("Checker", "getBigIntType", checker.getBigIntType, assertTypesEquivalent), + parityCase("Checker", "getESSymbolType", checker.getESSymbolType, assertTypesEquivalent), + parityCase("Checker", "getNonPrimitiveType", checker.getNonPrimitiveType, assertTypesEquivalent), + parityCase("Checker", "typeToTypeNode", checker.typeToTypeNode, assertOptionalNodesEquivalent, interfaceType, interfaceDeclaration), + parityCase("Checker", "signatureToSignatureDeclaration", checker.signatureToSignatureDeclaration, assertOptionalNodesEquivalent, signature, SyntaxKind.FunctionDeclaration, combineDeclaration), + parityCase("Checker", "typeToString", checker.typeToString, assertDeepEquivalent, interfaceType, interfaceDeclaration), + parityCase("Checker", "isContextSensitive", checker.isContextSensitive, assertDeepEquivalent, boxDeclaration.initializer!), + parityCase("Checker", "isArrayType", checker.isArrayType, assertDeepEquivalent, arrayType), + parityCase("Checker", "isTupleType", checker.isTupleType, assertDeepEquivalent, tupleType), + parityCase("Checker", "isTupleTypeTarget", checker.isTupleTypeTarget, assertDeepEquivalent, tupleType), + parityCase("Checker", "getReturnTypeOfSignature", checker.getReturnTypeOfSignature, assertTypesEquivalent, signature), + parityCase("Checker", "getRestTypeOfSignature", checker.getRestTypeOfSignature, assertOptionalTypesEquivalent, signature), + parityCase("Checker", "getTypePredicateOfSignature", checker.getTypePredicateOfSignature, assertOptionalTypePredicatesEquivalent, predicateSignature), + parityCase("Checker", "getBaseTypes", checker.getBaseTypes, assertTypeArraysEquivalent, derivedType), + parityCase("Checker", "getApparentType", checker.getApparentType, assertTypesEquivalent, interfaceType), + parityCase("Checker", "getReducedType", checker.getReducedType, assertTypesEquivalent, unionType), + parityCase("Checker", "getPropertiesOfType", checker.getPropertiesOfType, assertSymbolArraysEquivalent, interfaceType), + parityCase("Checker", "getIndexInfosOfType", checker.getIndexInfosOfType, assertIndexInfosEquivalent, interfaceType), + parityCase("Checker", "getIndexInfoOfType", checker.getIndexInfoOfType, assertDeepEquivalent, interfaceType, IndexKind.String), + parityCase("Checker", "getIndexTypeOfType", checker.getIndexTypeOfType, assertOptionalTypesEquivalent, interfaceType, IndexKind.Number), + parityCase("Checker", "getConstraintOfTypeParameter", checker.getConstraintOfTypeParameter, assertOptionalTypesEquivalent, typeParameter), + parityCase("Checker", "getDefaultFromTypeParameter", checker.getDefaultFromTypeParameter, assertOptionalTypesEquivalent, typeParameter), + parityCase("Checker", "getBaseConstraintOfType", checker.getBaseConstraintOfType, assertOptionalTypesEquivalent, typeParameter), + parityCase("Checker", "getPropertyOfType", checker.getPropertyOfType, assertOptionalSymbolsEquivalent, interfaceType, "value"), + parityCase("Checker", "getTypeOfPropertyOfType", checker.getTypeOfPropertyOfType, assertOptionalTypesEquivalent, interfaceType, "value"), + parityCase("Checker", "getConstantValue", checker.getConstantValue, assertDeepEquivalent, enumDeclaration.members[0]), + parityCase("Checker", "getSignatureFromDeclaration", checker.getSignatureFromDeclaration, assertOptionalSignaturesEquivalent, combineDeclaration), + parityCase("Checker", "getExportSpecifierLocalTargetSymbol", checker.getExportSpecifierLocalTargetSymbol, assertOptionalSymbolsEquivalent, exportSpecifier), + parityCase("Checker", "getAliasedSymbol", checker.getAliasedSymbol, assertSymbolsEquivalent, importedDerivedSymbol), + parityCase("Checker", "getFullyQualifiedName", checker.getFullyQualifiedName, assertDeepEquivalent, combineSymbol), + parityCase("Checker", "getImmediateAliasedSymbol", checker.getImmediateAliasedSymbol, assertOptionalSymbolsEquivalent, importedDerivedSymbol), + parityCase("Checker", "isUnknownSymbol", checker.isUnknownSymbol, assertDeepEquivalent, unknownSymbol), + parityCase("Checker", "isUndefinedSymbol", checker.isUndefinedSymbol, assertDeepEquivalent, undefinedSymbol), + parityCase("Checker", "isArgumentsSymbol", checker.isArgumentsSymbol, assertDeepEquivalent, argumentsSymbol), + parityCase("Checker", "isUnknownSignature", checker.isUnknownSignature, assertDeepEquivalent, unknownSignature), + parityCase("Checker", "getExportsOfModule", checker.getExportsOfModule, assertSymbolArraysEquivalent, moduleSymbol), + parityCase("Checker", "getMemberInModuleExports", checker.getMemberInModuleExports, assertOptionalSymbolsEquivalent, moduleSymbol, "Derived"), + parityCase("Checker", "getJsDocTagsOfSymbol", checker.getJsDocTagsOfSymbol, assertDeepEquivalent, combineSymbol), + parityCase("Checker", "getDocumentationCommentOfSymbol", checker.getDocumentationCommentOfSymbol, assertDeepEquivalent, combineSymbol), + parityCase("Checker", "getTypeArguments", checker.getTypeArguments, assertTypeArraysEquivalent, boxedType), + parityCase("Checker", "getNonMissingTypeOfSymbol", checker.getNonMissingTypeOfSymbol, assertTypesEquivalent, boxedOptSymbol), + parityCase("Checker", "isReadonlySymbol", checker.isReadonlySymbol, assertDeepEquivalent, boxedOptSymbol), + parityCase("Checker", "getTargetSymbol", checker.getTargetSymbol, assertOptionalSymbolsEquivalent, boxedOptSymbol), + parityCase("Checker", "getExportSymbolOfSymbol", checker.getExportSymbolOfSymbol, assertSymbolsEquivalent, localCombineSymbol), + + parityCase("Printer", "printNode", printer.printNode, assertDeepEquivalent, combineDeclaration, { preserveSourceNewlines: true }), + parityCase("Printer", "printFile", printer.printFile, assertDeepEquivalent, indexFile, { preserveSourceNewlines: true }), + parityCase("SnapshotInternalAPI", "formatNodeForInsertion", snapshot.internal.formatNodeForInsertion, assertDeepEquivalent, combineDeclaration, "/src/index.ts", combineDeclaration.pos), + parityCase("NodeHandle", "resolve", nodeHandle.resolve, assertOptionalNodesEquivalent), + parityCase("NodeHandle", "resolve", nodeHandle.resolve, assertOptionalNodesEquivalent, project), + + parityCase("Symbol", "getParent", derivedMemberSymbol.getParent, assertOptionalSymbolsEquivalent), + parityCase("Symbol", "getMembers", derivedClassSymbol.getMembers, assertSymbolMapsEquivalent), + parityCase("Symbol", "getExports", moduleSymbol.getExports, assertSymbolMapsEquivalent), + parityCase("Symbol", "getExportSymbol", combineSymbol.getExportSymbol, assertSymbolsEquivalent), + parityCase("Symbol", "getJsDocTags", combineSymbol.getJsDocTags, assertDeepEquivalent, checker), + parityCase("Symbol", "getDocumentationComment", combineSymbol.getDocumentationComment, assertDeepEquivalent, checker), + + parityCase("Type", "getSymbol", interfaceType.getSymbol, assertOptionalSymbolsEquivalent), + parityCase("Type", "getProperties", interfaceType.getProperties, assertSymbolArraysEquivalent), + parityCase("Type", "getProperty", interfaceType.getProperty, assertOptionalSymbolsEquivalent, "value"), + parityCase("Type", "getApparentProperties", interfaceType.getApparentProperties, assertSymbolArraysEquivalent), + parityCase("Type", "getCallSignatures", checker.getTypeAtLocation(combineDeclaration.name!).getCallSignatures, assertSignatureArraysEquivalent), + parityCase("Type", "getConstructSignatures", derivedConstructorType.getConstructSignatures, assertSignatureArraysEquivalent), + parityCase("Type", "getNonNullableType", interfaceType.getNonNullableType, assertTypesEquivalent), + parityCase("Type", "getStringIndexType", interfaceType.getStringIndexType, assertOptionalTypesEquivalent), + parityCase("Type", "getNumberIndexType", interfaceType.getNumberIndexType, assertOptionalTypesEquivalent), + parityCase("Type", "getApparentType", interfaceType.getApparentType, assertTypesEquivalent), + parityCase("Type", "getReducedType", unionType.getReducedType, assertTypesEquivalent), + parityCase("Type", "getIndexInfos", interfaceType.getIndexInfos, assertIndexInfosEquivalent), + parityCase("Type", "getAliasSymbol", boxedType.getAliasSymbol, assertOptionalSymbolsEquivalent), + parityCase("Type", "getTarget", boxedType.getTarget, assertTypesEquivalent), + parityCase("Type", "getFreshType", literalType.getFreshType, assertOptionalTypesEquivalent), + parityCase("Type", "getRegularType", literalType.getRegularType, assertOptionalTypesEquivalent), + parityCase("Type", "getTypes", (unionType as UnionOrIntersectionType).getTypes, assertOptionalTypeArrayEquivalent), + parityCase("Type", "getTypeParameters", interfaceType.getTypeParameters, assertTypeArraysEquivalent), + parityCase("Type", "getOuterTypeParameters", interfaceType.getOuterTypeParameters, assertTypeArraysEquivalent), + parityCase("Type", "getLocalTypeParameters", interfaceType.getLocalTypeParameters, assertTypeArraysEquivalent), + parityCase("Type", "getThisType", interfaceType.getThisType, assertOptionalTypesEquivalent), + parityCase("Type", "getAliasTypeArguments", boxedType.getAliasTypeArguments, assertTypeArraysEquivalent), + parityCase("Type", "getTypeParameter", mappedType.getTypeParameter, assertTypesEquivalent), + parityCase("Type", "getConstraintType", mappedType.getConstraintType, assertTypesEquivalent), + parityCase("Type", "getNameType", mappedType.getNameType, assertOptionalTypesEquivalent), + parityCase("Type", "getTemplateType", mappedType.getTemplateType, assertTypesEquivalent), + parityCase("Type", "getObjectType", indexedType.getObjectType, assertTypesEquivalent), + parityCase("Type", "getIndexType", indexedType.getIndexType, assertTypesEquivalent), + parityCase("Type", "getCheckType", conditionalType.getCheckType, assertTypesEquivalent), + parityCase("Type", "getExtendsType", conditionalType.getExtendsType, assertTypesEquivalent), + parityCase("Type", "getBaseType", substitutionType.getBaseType, assertTypesEquivalent), + parityCase("Type", "getConstraint", typeParameter.getConstraint, assertOptionalTypesEquivalent), + parityCase("Type", "getDefault", typeParameter.getDefault, assertOptionalTypesEquivalent), + parityCase("Type", "getTrueType", conditionalType.getTrueType, assertTypesEquivalent), + parityCase("Type", "getFalseType", conditionalType.getFalseType, assertTypesEquivalent), + parityCase("Type", "getBaseTypes", derivedType.getBaseTypes, assertOptionalTypeArrayEquivalent), + + parityCase("Signature", "getTypeParameters", signature.getTypeParameters, assertTypeArraysEquivalent), + parityCase("Signature", "getParameters", signature.getParameters, assertSymbolArraysEquivalent), + parityCase("Signature", "getThisParameter", signature.getThisParameter, assertOptionalSymbolsEquivalent), + parityCase("Signature", "getTarget", constructSignature.getTarget, assertOptionalSignaturesEquivalent), + parityCase("Signature", "getReturnType", signature.getReturnType, assertTypesEquivalent), + parityCase("Signature", "getTypeParameterAtPosition", signature.getTypeParameterAtPosition, assertTypesEquivalent, 0), + ]; + + runParityBatch(api, cases); + assert.deepEqual(temporaryProjects, ["/tsconfig.json", "/tsconfig.json"]); + + const snapshotGeneratorAPI = spawnAPI(parityFiles); + const snapshotSyncAPI = spawnAPI(parityFiles); + try { + const generatorBase = snapshotGeneratorAPI.batch(snapshotGeneratorAPI.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; + const syncBase = snapshotSyncAPI.createSnapshot({ openProject: "/tsconfig.json" }); + const generatorUpdated = snapshotGeneratorAPI.batch(generatorBase.update.gen({}))[0]; + const syncUpdated = syncBase.update({}); + assertSnapshotsEquivalent(generatorUpdated, syncUpdated, "Snapshot.update"); + exercisedMethods.add("Snapshot.update"); + } + finally { + snapshotGeneratorAPI.close(); + snapshotSyncAPI.close(); + } + + const destructiveAPI = spawnAPI(parityFiles); + const disposableSnapshot = destructiveAPI.batch(destructiveAPI.createSnapshot.gen({ openProject: "/tsconfig.json" }))[0]; + destructiveAPI.batch(disposableSnapshot.dispose.gen()); + assert.equal(disposableSnapshot.isDisposed(), true); + assert.equal(disposableSnapshot.dispose(), undefined); + exercisedMethods.add("Snapshot.dispose"); + const disposableProgram = destructiveAPI.batch(destructiveAPI.createProgram.gen(["/src/index.ts"], { noLib: true }))[0]; + destructiveAPI.batch(disposableProgram.dispose.gen()); + assert.throws(() => disposableProgram.getSourceFileNames(), /snapshot .* not found/); + assert.equal(disposableProgram.dispose(), undefined); + exercisedMethods.add("Program.dispose"); + const disposableResolver = destructiveAPI.batch(destructiveAPI.createModuleResolver.gen({}))[0]; + destructiveAPI.batch(disposableResolver.dispose.gen()); + assert.equal(disposableResolver.dispose(), undefined); + exercisedMethods.add("ModuleResolver.dispose"); + destructiveAPI.batch(destructiveAPI.close.gen()); + assert.equal(destructiveAPI.close(), undefined); + exercisedMethods.add("API.close"); + + assertPublicGeneratorCoverage([ + { name: "API", value: api }, + { name: "API", value: api.constructor as object, own: true }, + { name: "InternalAPI", value: api.internal }, + { name: "Snapshot", value: snapshot }, + { name: "ModuleResolver", value: moduleResolver }, + { name: "Project", value: project }, + { name: "LanguageService", value: languageService }, + { name: "Program", value: program }, + { name: "Checker", value: checker }, + { name: "Printer", value: printer }, + { name: "SnapshotInternalAPI", value: snapshot.internal }, + { name: "NodeHandle", value: nodeHandle }, + { name: "Symbol", value: combineSymbol }, + { name: "Type", value: interfaceType }, + { name: "Signature", value: signature }, + ]); + } + finally { + api.close(); + } + }); +}); diff --git a/packages/typescript/test/sync/api.bench.ts b/packages/typescript/test/sync/api.bench.ts index 08f1fb4ea8d8b..36f00c64e6c88 100644 --- a/packages/typescript/test/sync/api.bench.ts +++ b/packages/typescript/test/sync/api.bench.ts @@ -1,270 +1,270 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: test/async/api.bench.ts -// Regenerate: npm run generate (from packages/typescript) -// -import { - type Node, - type SourceFile, - SyntaxKind, -} from "@typescript/typescript/unstable/ast"; -import { - API, - type Project, - type Snapshot, -} from "@typescript/typescript/unstable/sync"; -import { writeFileSync } from "node:fs"; -import inspector from "node:inspector"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import ts from "typescript"; -import { RemoteSourceFile } from "../../src/api/node/node.ts"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - singleIteration: { type: "boolean", default: false }, - cpuprofile: { type: "boolean", default: false }, - }, - }); - runBenchmarks(values); -} - -export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { - const { filter, singleIteration, cpuprofile } = options ?? {}; - const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); - - const bench = new Bench({ - name: "Sync API", - teardown, - // Reduce iterations from the default 64 to 10. Slow tasks - // are dominated by the iteration minimum, not the time limit. - // 10 iterations still gives stable medians while cutting total - // bench time by ~5x. - iterations: 10, - warmupIterations: 4, - ...singleIteration ? { - iterations: 1, - warmup: false, - time: 0, - } : undefined, - }); - - let api: API; - let snapshot: Snapshot; - let project: Project; - let tsProgram: ts.Program; - let file: SourceFile; - let tsFile: ts.SourceFile; - - const programIdentifierCount = (() => { - spawnAPI(); - loadSnapshot(); - getProgramTS(); - let count = 0; - file!.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - count++; - } - node.forEachChild(visit); - }); - teardown(); - return count; - })(); - - // Tinybench's `isFnAsyncResource` probes each task function by *calling* - // it once during `.add()` to detect whether it returns a Promise. - // In sync mode every task function is a plain (non-async) function, so - // the probe actually executes the benchmarked code (spawning processes, - // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit - // `async` flag on every task skips the probe entirely. - const isAsync = false; - - bench - .add("spawn API", () => { - spawnAPI(); - }, { async: isAsync }) - .add("load snapshot", () => { - loadSnapshot(); - }, { async: isAsync, beforeAll: spawnAPI }) - .add("TS - load project", () => { - tsCreateProgram(); - }, { async: isAsync }) - .add("transfer debug.ts", () => { - getDebugTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer program.ts", () => { - getProgramTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("transfer checker.ts", () => { - getCheckerTS(); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) - .add("materialize program.ts", () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) - .add("materialize checker.ts", () => { - const { view, _decoder } = file as unknown as RemoteSourceFile; - new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) - .add("getSymbolAtPosition - one location", () => { - project.checker.getSymbolAtPosition("program.ts", 8895); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) - .add("TS - getSymbolAtPosition - one location", () => { - tsProgram.getTypeChecker().getSymbolAtLocation( - // @ts-ignore internal API - ts.getTokenAtPosition(tsFile, 8895), - ); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, () => { - for (const node of collectIdentifiers(file)) { - project.checker.getSymbolAtPosition("program.ts", node.pos); - } - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, () => { - const positions = collectIdentifiers(file).map(node => node.pos); - project.checker.getSymbolAtPosition("program.ts", positions); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { - for (const node of collectIdentifiers(file)) { - project.checker.getSymbolAtLocation(node); - } - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, () => { - const nodes = collectIdentifiers(file); - project.checker.getSymbolAtLocation(nodes); - }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) - .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { - const checker = tsProgram.getTypeChecker(); - tsFile.forEachChild(function visit(node) { - if (node.kind === ts.SyntaxKind.Identifier) { - checker.getSymbolAtLocation(node); - } - node.forEachChild(visit); - }); - }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - let session: inspector.Session | undefined; - if (cpuprofile) { - session = new inspector.Session(); - session.connect(); - session.post("Profiler.enable"); - session.post("Profiler.start"); - } - - bench.runSync(); - teardown(); - - if (session) { - session.post("Profiler.stop", (err, { profile }) => { - if (err) throw err; - const outPath = `bench-${Date.now()}.cpuprofile`; - writeFileSync(outPath, JSON.stringify(profile)); - console.log(`CPU profile written to ${outPath}`); - }); - session.disconnect(); - } - console.table(bench.table()); - - function collectIdentifiers(sourceFile: SourceFile): Node[] { - const nodes: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.Identifier) { - nodes.push(node); - } - node.forEachChild(visit); - }); - return nodes; - } - - function spawnAPI() { - api = new API({ - cwd: repoRoot, - }); - } - - function loadSnapshot() { - snapshot = api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); - project = snapshot.getProjects()[0]; - } - - function tsCreateProgram() { - const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); - const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); - const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); - const host = ts.createCompilerHost(parsedCommandLine.options); - tsProgram = ts.createProgram({ - rootNames: parsedCommandLine.fileNames, - options: parsedCommandLine.options, - host, - }); - } - - function createChecker() { - // checker is created lazily, for measuring symbol time in a loop - // we need to create it first. - project.checker.getSymbolAtPosition("core.ts", 0); - } - - function tsCreateChecker() { - tsProgram.getTypeChecker(); - } - - function getDebugTS() { - file = (project.program.getSourceFile("debug.ts"))!; - } - - function getProgramTS() { - file = (project.program.getSourceFile("program.ts"))!; - } - - function tsGetProgramTS() { - tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; - } - - function getCheckerTS() { - file = (project.program.getSourceFile("checker.ts"))!; - } - - function clearSourceFileCache() { - api.clearSourceFileCache(); - } - - function teardown() { - api?.close(); - api = undefined!; - snapshot = undefined!; - project = undefined!; - file = undefined!; - tsProgram = undefined!; - tsFile = undefined!; - } - - function all(...fns: (() => void)[]) { - return () => { - for (const fn of fns) { - fn(); - } - }; - } -} +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: test/async/api.bench.ts +// Regenerate: npm run generate (from packages/typescript) +// +import { + type Node, + type SourceFile, + SyntaxKind, +} from "@typescript/typescript/unstable/ast"; +import { + API, + type Project, + type Snapshot, +} from "@typescript/typescript/unstable/sync"; +import { writeFileSync } from "node:fs"; +import inspector from "node:inspector"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import ts from "typescript"; +import { RemoteSourceFile } from "../../src/api/node/node.ts"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + singleIteration: { type: "boolean", default: false }, + cpuprofile: { type: "boolean", default: false }, + }, + }); + runBenchmarks(values); +} + +export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; cpuprofile?: boolean; }) { + const { filter, singleIteration, cpuprofile } = options ?? {}; + const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); + + const bench = new Bench({ + name: "Sync API", + teardown, + // Reduce iterations from the default 64 to 10. Slow tasks + // are dominated by the iteration minimum, not the time limit. + // 10 iterations still gives stable medians while cutting total + // bench time by ~5x. + iterations: 10, + warmupIterations: 4, + ...singleIteration ? { + iterations: 1, + warmup: false, + time: 0, + } : undefined, + }); + + let api: API; + let snapshot: Snapshot; + let project: Project; + let tsProgram: ts.Program; + let file: SourceFile; + let tsFile: ts.SourceFile; + + const programIdentifierCount = (() => { + spawnAPI(); + loadSnapshot(); + getProgramTS(); + let count = 0; + file!.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + count++; + } + node.forEachChild(visit); + }); + teardown(); + return count; + })(); + + // Tinybench's `isFnAsyncResource` probes each task function by *calling* + // it once during `.add()` to detect whether it returns a Promise. + // In sync mode every task function is a plain (non-async) function, so + // the probe actually executes the benchmarked code (spawning processes, + // creating TS programs, etc.) wasting 30+ seconds. Passing an explicit + // `async` flag on every task skips the probe entirely. + const isAsync = false; + + bench + .add("spawn API", () => { + spawnAPI(); + }, { async: isAsync }) + .add("load snapshot", () => { + loadSnapshot(); + }, { async: isAsync, beforeAll: spawnAPI }) + .add("TS - load project", () => { + tsCreateProgram(); + }, { async: isAsync }) + .add("transfer debug.ts", () => { + getDebugTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer program.ts", () => { + getProgramTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("transfer checker.ts", () => { + getCheckerTS(); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot), beforeEach: clearSourceFileCache }) + .add("materialize program.ts", () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getProgramTS) }) + .add("materialize checker.ts", () => { + const { view, _decoder } = file as unknown as RemoteSourceFile; + new RemoteSourceFile(new Uint8Array(view.buffer, view.byteOffset, view.byteLength), _decoder).forEachChild(function visit(node) { + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, getCheckerTS) }) + .add("getSymbolAtPosition - one location", () => { + project.checker.getSymbolAtPosition("program.ts", 8895); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker) }) + .add("TS - getSymbolAtPosition - one location", () => { + tsProgram.getTypeChecker().getSymbolAtLocation( + // @ts-ignore internal API + ts.getTokenAtPosition(tsFile, 8895), + ); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers`, () => { + for (const node of collectIdentifiers(file)) { + project.checker.getSymbolAtPosition("program.ts", node.pos); + } + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtPosition - ${programIdentifierCount} identifiers (batched)`, () => { + const positions = collectIdentifiers(file).map(node => node.pos); + project.checker.getSymbolAtPosition("program.ts", positions); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { + for (const node of collectIdentifiers(file)) { + project.checker.getSymbolAtLocation(node); + } + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`getSymbolAtLocation - ${programIdentifierCount} identifiers (batched)`, () => { + const nodes = collectIdentifiers(file); + project.checker.getSymbolAtLocation(nodes); + }, { async: isAsync, beforeAll: all(spawnAPI, loadSnapshot, createChecker, getProgramTS) }) + .add(`TS - getSymbolAtLocation - ${programIdentifierCount} identifiers`, () => { + const checker = tsProgram.getTypeChecker(); + tsFile.forEachChild(function visit(node) { + if (node.kind === ts.SyntaxKind.Identifier) { + checker.getSymbolAtLocation(node); + } + node.forEachChild(visit); + }); + }, { async: isAsync, beforeAll: all(tsCreateProgram, tsCreateChecker, tsGetProgramTS) }); + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + let session: inspector.Session | undefined; + if (cpuprofile) { + session = new inspector.Session(); + session.connect(); + session.post("Profiler.enable"); + session.post("Profiler.start"); + } + + bench.runSync(); + teardown(); + + if (session) { + session.post("Profiler.stop", (err, { profile }) => { + if (err) throw err; + const outPath = `bench-${Date.now()}.cpuprofile`; + writeFileSync(outPath, JSON.stringify(profile)); + console.log(`CPU profile written to ${outPath}`); + }); + session.disconnect(); + } + console.table(bench.table()); + + function collectIdentifiers(sourceFile: SourceFile): Node[] { + const nodes: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.Identifier) { + nodes.push(node); + } + node.forEachChild(visit); + }); + return nodes; + } + + function spawnAPI() { + api = new API({ + cwd: repoRoot, + }); + } + + function loadSnapshot() { + snapshot = api.createSnapshot({ openProject: "tsc/testdata/fixtures/compiler/tsconfig.json" }); + project = snapshot.getProjects()[0]; + } + + function tsCreateProgram() { + const configFileName = fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/tsconfig.json", import.meta.url).toString()); + const configFile = ts.readConfigFile(configFileName, ts.sys.readFile); + const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configFileName)); + const host = ts.createCompilerHost(parsedCommandLine.options); + tsProgram = ts.createProgram({ + rootNames: parsedCommandLine.fileNames, + options: parsedCommandLine.options, + host, + }); + } + + function createChecker() { + // checker is created lazily, for measuring symbol time in a loop + // we need to create it first. + project.checker.getSymbolAtPosition("core.ts", 0); + } + + function tsCreateChecker() { + tsProgram.getTypeChecker(); + } + + function getDebugTS() { + file = (project.program.getSourceFile("debug.ts"))!; + } + + function getProgramTS() { + file = (project.program.getSourceFile("program.ts"))!; + } + + function tsGetProgramTS() { + tsFile = tsProgram.getSourceFile(fileURLToPath(new URL("../../../../tsc/testdata/fixtures/compiler/program.ts", import.meta.url).toString()))!; + } + + function getCheckerTS() { + file = (project.program.getSourceFile("checker.ts"))!; + } + + function clearSourceFileCache() { + api.clearSourceFileCache(); + } + + function teardown() { + api?.close(); + api = undefined!; + snapshot = undefined!; + project = undefined!; + file = undefined!; + tsProgram = undefined!; + tsFile = undefined!; + } + + function all(...fns: (() => void)[]) { + return () => { + for (const fn of fns) { + fn(); + } + }; + } +} diff --git a/packages/typescript/test/sync/api.test.ts b/packages/typescript/test/sync/api.test.ts index b720b2472b3e8..0dc068a33659c 100644 --- a/packages/typescript/test/sync/api.test.ts +++ b/packages/typescript/test/sync/api.test.ts @@ -1,9321 +1,9321 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: test/async/api.test.ts -// Regenerate: npm run generate (from packages/typescript) -// -import { - type __String, - cast, - escapeLeadingUnderscores, - type Expression, - getJSDocCommentsAndTags, - getJSDocTags, - getSynthesizedDeepClone, - getTextOfJSDocComment, - InternalSymbolName, - isCallExpression, - isClassDeclaration, - isExpressionStatement, - isFunctionDeclaration, - isIdentifier, - isImportDeclaration, - isInterfaceDeclaration, - isJSDoc, - isJSDocParameterTag, - isModuleDeclaration, - isNamedImports, - isObjectLiteralExpression, - isPropertyAssignment, - isPropertyDeclaration, - isReturnStatement, - isShorthandPropertyAssignment, - isStringLiteral, - isTemplateHead, - isTemplateMiddle, - isTemplateTail, - isTypeAliasDeclaration, - isTypeNode, - isVariableDeclarationList, - isVariableStatement, - type Node, - type NodeArray, - NodeFlags, - type PathKey, - type RootedFilePath, - type SourceFile, - SyntaxKind, - tryGetAmbientModuleNameFromSymbolName, - unescapeLeadingUnderscores, -} from "@typescript/typescript/unstable/ast"; -import { - cloneNode, - createArrayTypeNode, - createFunctionTypeNode, - createIdentifier, - createKeywordTypeNode, - createNumericLiteral, - createParameterDeclaration, - createSourceFile, - createToken, - createTypeAliasDeclaration, - createTypeReferenceNode, - createUnionTypeNode, - createVariableDeclaration, - createVariableDeclarationList, - createVariableStatement, -} from "@typescript/typescript/unstable/ast/factory"; -import { visitEachChild } from "@typescript/typescript/unstable/ast/visitor"; -import { - createFileSystem, - createFileSystemLayer, - createFileSystemWithLib, - type FileSystemCallbacks, - serverFS, -} from "@typescript/typescript/unstable/fs"; -import { - rootedDirectoryPathFromPath, - rootedFilePathFromPath, - toRootedDirectoryPath, - toRootedFilePath, -} from "@typescript/typescript/unstable/path"; -import { - API, - type BigIntLiteralType, - CheckFlags, - type CompilerOptions, - type ConditionalType, - type ConfiguredProjectId, - DiagnosticCategory, - type DocumentIdentifier, - EmitOnly, - type FormatDiagnosticsHost, - type FreshableType, - getSymbol, - type ImportAdderAction, - type IndexedAccessType, - IndexKind, - type IndexType, - type InferredProjectId, - type InProgressSnapshot, - type InterfaceType, - type IntrinsicType, - isErrorType, - JsxEmit, - type LiteralType, - type MappedType, - ModifierFlags, - ModuleKind, - ModuleResolutionKind, - type ModuleResolver, - type NumberLiteralType, - ObjectFlags, - type Program, - type Project, - type ProjectId, - type RawCompilerOptions, - ScriptKind, - type Signature, - SignatureKind, - type Snapshot, - type StringMappingType, - SymbolFlags, - type SyntheticProjectId, - type TemplateLiteralType, - type TextEdit, - TypeFlags, - TypeFormatFlags, - type TypeParameter, - TypePredicateKind, - type TypeReference, - type UnionOrIntersectionType, - type UserPreferences, -} from "@typescript/typescript/unstable/sync"; -import assert from "node:assert"; -import { globSync } from "node:fs"; -import { resolve } from "node:path"; -import { - describe, - test, -} from "node:test"; -import { fileURLToPath } from "node:url"; -import { - getNodeId, - parseNodeHandleFromCompiler, - RemoteSourceFile, -} from "../../src/api/node/node.ts"; -import { isSignatureDeclaration } from "../../src/ast/is.ts"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "../testUtils.ts"; -import { - defaultFiles, - spawnAPI, -} from "./api.testUtils.ts"; - -const concurrency = areTestsFiltered(); - -describe("API", { concurrency }, () => { - test("getCurrentLanguageServerSnapshot is LSP-only", () => { - if (!!false) { - const standalone = new API(); - // @ts-expect-error The standalone API has no canonical language server state. - void standalone.getCurrentLanguageServerSnapshot(); - - const lsp = undefined! as API; - void lsp.getCurrentLanguageServerSnapshot({ openProjects: ["/tsconfig.json"] }); - const moduleResolver = undefined! as ModuleResolver; - void lsp.getCurrentLanguageServerSnapshot({ - createPrograms: [{ - rootFiles: ["/index.ts"], - compilerOptions: {}, - options: { moduleResolver }, - }], - }); - const baseSnapshot = undefined! as Snapshot; - void lsp.getCurrentLanguageServerSnapshot(undefined, baseSnapshot); - - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, options: { projectReferences: [{ path: "/tsconfig.json" }] } }] }); - void standalone.createModuleResolver({ outDir: "dist", rootDirs: ["src"], typeRoots: ["types"] }); - void standalone.transpileModule("", { compilerOptions: { outDir: "dist" } }); - - const formatDiagnosticsHost: FormatDiagnosticsHost = { - getCurrentDirectory: () => "/workspace", - getCanonicalFileName: fileName => fileName, - getNewLine: () => "\n", - }; - void formatDiagnosticsHost; - - // @ts-expect-error Snapshot parameters are excess-property checked. - void standalone.createSnapshot({ fileChanges: { changed: ["/index.ts"] } }); - // @ts-expect-error Synthetic program parameters are contextually typed and excess-property checked. - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, unexpected: true }] }); - // @ts-expect-error Compiler options in synthetic program parameters are contextually typed and excess-property checked. - void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: { unexpected: true } }] }); - // @ts-expect-error Snapshot update parameters are excess-property checked. - void baseSnapshot.update({ fileChanges: { changed: ["/index.ts"] } }); - // @ts-expect-error Snapshot updates require an explicit changes object. - void baseSnapshot.update(undefined); - // @ts-expect-error Language server snapshot parameters are excess-property checked. - void lsp.getCurrentLanguageServerSnapshot({ fileChanges: { changed: ["/index.ts"] } }); - - const configured = undefined! as ConfiguredProjectId; - const inferred = undefined! as InferredProjectId; - const synthetic = undefined! as SyntheticProjectId; - const path: PathKey = configured; - const projectIds: ProjectId[] = [configured, inferred, synthetic]; - void path; - void projectIds; - // @ts-expect-error Project ID brands are not interchangeable. - const invalid: ConfiguredProjectId = synthetic; - void invalid; - - const callbacks: FileSystemCallbacks = { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: serverFS.useOS, - realpath: path => `${path}`, - stat: serverFS.fakeStat, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }; - void new API({ fs: callbacks }); - void new API({ fs: { ...callbacks, writeFile: serverFS.noop } }); - void new API({ - fs: { - ...callbacks, - realpath: () => serverFS.identity, - stat: () => serverFS.fakeStat, - writeFile: () => serverFS.noop, - }, - }); - void new API({ - fs: { - directoryExists: serverFS.error, - fileExists: serverFS.error, - getAccessibleEntries: serverFS.error, - readFile: serverFS.error, - realpath: serverFS.error, - stat: serverFS.error, - writeFile: serverFS.error, - removeFile: serverFS.error, - }, - }); - void new API({ - fs: { - directoryExists: () => serverFS.error, - fileExists: () => serverFS.error, - getAccessibleEntries: () => serverFS.error, - readFile: () => serverFS.error, - realpath: () => serverFS.error, - stat: () => serverFS.error, - writeFile: () => serverFS.error, - removeFile: () => serverFS.error, - }, - }); - // @ts-expect-error Filesystem callback configurations must specify every operation. - void new API({ fs: { readFile: serverFS.useOS } }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error Identity is only a valid realpath implementation. - readFile: serverFS.identity, - }, - }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error fakeStat is only a valid stat implementation. - fileExists: serverFS.fakeStat, - }, - }); - void new API({ - fs: { - ...callbacks, - // @ts-expect-error Noop is only a valid writeFile implementation. - readFile: serverFS.noop, - }, - }); - } - }); - - test("initializes once for concurrent first requests", () => { - using api = spawnAPI(); - const [commandLine, config] = api.batch( - api.parseCommandLine.gen(["--strict"]), - api.readConfigFile.gen("/tsconfig.json"), - ); - assert.equal(commandLine.options.strict, true); - assert.deepEqual(config.config, {}); - }); - - test("disposes", () => { - let disposedAPI: API; - { - using api = spawnAPI(); - api.parseCommandLine([]); - disposedAPI = api; - } - assert.throws(() => disposedAPI.parseCommandLine([])); - }); - - test("parseCommandLine", () => { - using api = spawnAPI(); - - const commandLine = api.parseCommandLine([ - "--strict", - "--outDir", - "dist", - "/src/index.ts", - ]); - assert.deepEqual(commandLine.fileNames, ["/src/index.ts"]); - assert.equal(commandLine.options.strict, true); - assert.equal( - resolve(commandLine.options.outDir!), - resolve(fileURLToPath(new URL("../../../../", import.meta.url)), "dist"), - ); - assert.deepEqual(commandLine.raw, { - strict: true, - outDir: "dist", - }); - assert.deepEqual(commandLine.errors, []); - }); - - test("parseCommandLine reports diagnostics", () => { - using api = spawnAPI(); - - const commandLine = api.parseCommandLine(["--notAnOption"]); - assert.deepEqual(commandLine.fileNames, []); - assert.equal(commandLine.errors.length, 1); - assert.equal(commandLine.errors[0].code, 5023); - }); - - test("readConfigFile", () => { - using api = spawnAPI({ - "/tsconfig.json": `{ - // Comments and trailing commas are supported. - "compilerOptions": { "strict": true, }, - }`, - }); - - const result = api.readConfigFile("/tsconfig.json"); - assert.deepEqual(result, { - config: { compilerOptions: { strict: true } }, - }); - }); - - test("readConfigFile reports read and parse errors", () => { - using api = spawnAPI({ - "/invalid.json": `{ "compilerOptions": { "strict": true,, } }`, - }); - - const invalid = api.readConfigFile("/invalid.json"); - assert.deepEqual(invalid.config, { compilerOptions: { strict: true } }); - assert.ok(invalid.error); - - const missing = api.readConfigFile("/missing.json"); - assert.deepEqual(missing.config, {}); - assert.equal(missing.error?.code, 5083); - }); - - test("parseJsonConfigFileContent with configDirectory", () => { - using api = spawnAPI(); - - const config = api.parseJsonConfigFileContent( - { - compilerOptions: { strict: true }, - files: ["index.ts"], - }, - { configDirectory: "/src" }, - ); - assert.deepEqual(config.fileNames, ["/src/index.ts"]); - assert.equal(config.options.strict, true); - assert.equal("configFilePath" in config.options, false); - assert.equal(config.compileOnSave, false); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent accepts non-object JSON", () => { - using api = spawnAPI(); - - const config = api.parseJsonConfigFileContent(null, { configDirectory: "/src" }); - assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent with configFileName", () => { - using api = spawnAPI(); - - const config = api.parseJsonConfigFileContent( - { - compilerOptions: { strict: true }, - files: ["index.ts"], - }, - { configFileName: "/src/tsconfig.json" }, - ); - assert.deepEqual(config.fileNames, ["/src/index.ts"]); - assert.equal(config.options.strict, true); - assert.equal(config.options.configFilePath, "/src/tsconfig.json"); - assert.deepEqual(config.errors, []); - }); - - test("parseJsonConfigFileContent preserves raw config", () => { - using api = spawnAPI(); - - const input = { - compileOnSave: true, - customSetting: { enabled: true }, - files: ["index.ts"], - }; - const config = api.parseJsonConfigFileContent(input, { configDirectory: "/src" }); - assert.deepEqual(config.raw, input); - assert.equal(config.compileOnSave, true); - }); - - test("parseJsonConfigFileContent preserves an empty files list", () => { - using api = spawnAPI(); - - const config = api.parseJsonConfigFileContent( - { files: [] }, - { configDirectory: "/src" }, - ); - assert.deepEqual(config.fileNames, []); - assert.equal(config.errors.length, 1); - assert.equal(config.errors[0].code, 18002); - }); - - test("parseJsonConfigFileContent reports null array elements", () => { - using api = spawnAPI(); - - const config = api.parseJsonConfigFileContent( - { files: [null], include: [null], exclude: [null] }, - { configDirectory: "/src" }, - ); - assert.equal(config.errors.length, 3); - assert.ok(config.errors.every(diagnostic => diagnostic.code === 5024)); - }); - - test("transpile", () => { - using api = spawnAPI({ - "/input.ts": "export const x: number = 1;", - }); - - const moduleOutput = api.transpileModule("export const x: number = 1;", { - compilerOptions: { module: ModuleKind.CommonJS }, - }); - assert.match(moduleOutput.outputText, /exports\.x = 1/); - - const isolatedDeclarationModuleOutput = api.transpileModule("export const x: number = 1;", { - compilerOptions: { declaration: true, isolatedDeclarations: true }, - reportDiagnostics: true, - }); - assert.equal(isolatedDeclarationModuleOutput.diagnostics?.length ?? 0, 0); - - const moduleFileOutput = api.transpileModuleFromFile({ uri: "file:///input.ts" }, { - compilerOptions: { module: ModuleKind.CommonJS }, - }); - assert.match(moduleFileOutput.outputText, /exports\.x = 1/); - - const declarationOutput = api.transpileDeclaration("export const x: number = 1;"); - assert.equal(declarationOutput.outputText, "export declare const x: number;\n"); - - const windowsDeclarationOutput = api.transpileDeclaration("export const x: number = 1;", { - fileName: "C:/Users/me/project/input.ts", - }); - assert.equal(windowsDeclarationOutput.outputText, "export declare const x: number;\n"); - - const declarationFileOutput = api.transpileDeclarationFromFile({ uri: "file:///input.ts" }); - assert.equal(declarationFileOutput.outputText, "export declare const x: number;\n"); - }); - - test("createSourceFile", () => { - using api = spawnAPI(); - const sourceText = "export const element =
;"; - using retained = api.createSourceFile("/component.tsx", sourceText); - const sourceFile = retained.sourceFile; - assert.equal(sourceFile.fileName, "/component.tsx"); - assert.match(sourceFile.path, /\/component\.tsx$/); - assert.equal(sourceFile.text, sourceText); - assert.equal(sourceFile.scriptKind, ScriptKind.TSX); - assert.equal(sourceFile.statements.length, 1); - assert.strictEqual(sourceFile.statements[0].parent, sourceFile); - - using retainedAgain = api.createSourceFile("/component.tsx", sourceText); - assert.strictEqual(retainedAgain.sourceFile, sourceFile); - assert.throws(() => api.createSourceFile("", ""), /fileName must not be empty/); - using dot = api.createSourceFile(".", ""); - assert.equal(dot.sourceFile.scriptKind, ScriptKind.TS); - - using overridden = api.createSourceFile("/component.txt", sourceText, { scriptKind: ScriptKind.TSX }); - assert.equal(overridden.sourceFile.scriptKind, ScriptKind.TSX); - assert.equal(overridden.sourceFile.statements.length, 1); - using defaultKind = api.createSourceFile("/component.txt", sourceText); - assert.notStrictEqual(defaultKind.sourceFile, overridden.sourceFile); - - using upperCase = api.createSourceFile("/CaseSensitive.ts", ""); - using lowerCase = api.createSourceFile("/casesensitive.ts", ""); - assert.notStrictEqual(lowerCase.sourceFile, upperCase.sourceFile); - assert.equal(upperCase.sourceFile.fileName, "/CaseSensitive.ts"); - assert.equal(lowerCase.sourceFile.fileName, "/casesensitive.ts"); - - assert.throws(() => api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); - - // Each lease can be disposed repeatedly without throwing or releasing another lease. - const firstDispose = retained.dispose(); - const secondDispose = retained.dispose(); - retained.dispose(); - using retainedAfterDispose = api.createSourceFile("/component.tsx", sourceText); - assert.strictEqual(retainedAfterDispose.sourceFile, retainedAgain.sourceFile); - }); - - test("remote declarations lazily fetch and cache binder symbols", () => { - const sourceText = "function present() {}"; - using api = spawnAPI({ - "/symbols.ts": sourceText, - }); - const snapshot = api.createSnapshot({ openFiles: ["/symbols.ts"] }); - const project = snapshot.getProjects()[0]; - const sourceFile = project.program.getSourceFile("/symbols.ts"); - assert.ok(sourceFile); - const declaration = sourceFile.statements[0]; - assert.ok(isFunctionDeclaration(declaration)); - const checkerSymbol = project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); - assert.ok(checkerSymbol); - - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): unknown; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let symbolRequests = 0; - client.apiRequest = (method, params) => { - if (method === "getSymbolOfDeclaration") symbolRequests++; - return apiRequest(method, params); - }; - - const first = getSymbol(declaration); - const concurrent = api.getSymbol(declaration); - assert.ok(first); - assert.strictEqual(first, checkerSymbol); - assert.strictEqual(concurrent, first); - assert.strictEqual(getSymbol(declaration), first); - assert.equal(symbolRequests, 1); - - snapshot.dispose(); - }); - - test("getSymbol rejects synthesized declarations", () => { - using api = spawnAPI(); - const local = createVariableDeclaration(createIdentifier("local"), undefined, undefined, undefined); - assert.throws(() => getSymbol(local), /Source file not found/); - assert.throws(() => api.getSymbol(local), /Source file not found/); - - using lease = api.createSourceFile("/symbols.ts", "function present() {}"); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - assert.ok(getSymbol(declaration)); - const shallowClone = cloneNode(declaration); - const deepClone = getSynthesizedDeepClone(declaration); - assert.throws(() => getSymbol(shallowClone), /Source file not found/); - assert.throws(() => api.getSymbol(deepClone), /Source file not found/); - assert.equal("getSymbol" in declaration, false); - }); - - test("source files own separate declaration result and request caches", () => { - using api = spawnAPI(); - using lease = api.createSourceFile("/symbols.ts", "function present() {}"); - const file = lease.sourceFile; - assert.ok(file instanceof RemoteSourceFile); - const cache = file.symbolCache; - assert.ok(cache); - const declaration = cast(file.statements[0], isFunctionDeclaration); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - const request = getSymbol(declaration); - const symbol = request; - assert.ok(symbol); - assert.strictEqual(cache.symbolsByDeclarationNodeIndex.get(index), symbol); - assert.strictEqual(cache.symbolsById.get(symbol.reference.id), symbol); - assert.equal(cache.declarationSymbolRequests.has(index), false); - api.clearSourceFileCache(); - assert.strictEqual(file.symbolCache, cache); - }); - - test("standalone getSymbol delegates to the source file's API", context => { - using api = spawnAPI(); - using lease = api.createSourceFile("/symbols.ts", "function present() {}"); - assert.ok(lease.sourceFile instanceof RemoteSourceFile); - assert.strictEqual(lease.sourceFile.api, api); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - // Materialize the sync API's lazy method before mocking it. - void api.getSymbol; - const method = context.mock.method(api, "getSymbol"); - const symbol = getSymbol(declaration); - assert.ok(symbol); - assert.equal(method.mock.callCount(), 1); - assert.strictEqual(api.getSymbol(declaration), symbol); - }); - - test("declaration symbol results survive releasing the last lease", () => { - using api = spawnAPI(); - const lease = api.createSourceFile("/symbols.ts", "function present() {}"); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - const symbol = getSymbol(declaration); - assert.ok(symbol); - - lease.dispose(); - assert.strictEqual(getSymbol(declaration), symbol); - }); - - test("declaration symbols can be fetched after clearing the client cache", () => { - using api = spawnAPI(); - using lease = api.createSourceFile("/symbols.ts", "function first() {} function second() {}"); - const first = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - const second = cast(lease.sourceFile.statements[1], isFunctionDeclaration); - const firstSymbol = getSymbol(first); - assert.ok(firstSymbol); - - api.clearSourceFileCache(); - const secondSymbol = getSymbol(second); - assert.ok(secondSymbol); - assert.equal(secondSymbol.name, "second"); - assert.strictEqual(getSymbol(first), firstSymbol); - - using retained = api.retainSourceFile(lease.sourceFile); - assert.strictEqual(retained.sourceFile, lease.sourceFile); - assert.strictEqual(getSymbol(first), firstSymbol); - assert.strictEqual(getSymbol(second), secondSymbol); - }); - - test("declaration lookup rejects unavailable and recreated files without caching failures", () => { - using api = spawnAPI(); - const text = "function present() {}"; - const lease = api.createSourceFile("/symbols.ts", text); - const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); - assert.ok(lease.sourceFile instanceof RemoteSourceFile); - const cache = lease.sourceFile.symbolCache; - assert.ok(cache); - const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; - lease.dispose(); - - assert.throws(() => getSymbol(declaration), /source file is not available/); - assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); - assert.equal(cache.declarationSymbolRequests.has(index), false); - using recreated = api.createSourceFile("/symbols.ts", text); - assert.throws(() => getSymbol(declaration), /source file descriptor no longer identifies/); - assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); - assert.equal(cache.declarationSymbolRequests.has(index), false); - const recreatedDeclaration = cast(recreated.sourceFile.statements[0], isFunctionDeclaration); - assert.equal((getSymbol(recreatedDeclaration))?.name, "present"); - }); - - test("createSourceFile can be used with a compatible program", () => { - const sourceText = "export const element =
;"; - using api = spawnAPI({ - "/component.tsx": sourceText, - }); - using retained = api.createSourceFile("/component.tsx", sourceText); - const sourceFile = retained.sourceFile; - const snapshot = api.createSnapshot({ openFiles: ["/component.tsx"] }); - const project = snapshot.getProjects()[0]; - assert.equal((api.printer.printNode(sourceFile)).trimEnd(), sourceText); - assert.ok(project.checker.getTypeAtLocation(sourceFile.statements[0])); - assert.equal(project.program.isSourceFileDefaultLibrary(sourceFile), false); - snapshot.dispose(); - }); - - test("createSourceFile shares identity with a matching program file", () => { - const sourceText = "export declare const element: number;"; - using api = spawnAPI({ - "/component.d.ts": sourceText, - }); - using retained = api.createSourceFile("/component.d.ts", sourceText); - const snapshot = api.createSnapshot({ openFiles: ["/component.d.ts"] }); - const project = snapshot.getProjects()[0]; - assert.strictEqual(project.program.getSourceFile("/component.d.ts"), retained.sourceFile); - snapshot.dispose(); - }); - - test("retainSourceFile keeps a borrowed program file available", () => { - const sourceText = "export declare const value: number;"; - using api = spawnAPI({ - "/retained.d.ts": sourceText, - }); - const snapshot = api.createSnapshot({ openFiles: ["/retained.d.ts"] }); - const project = snapshot.getProjects()[0]; - const sourceFile = project.program.getSourceFile("/retained.d.ts"); - assert.ok(sourceFile); - - using retained = api.retainSourceFile(sourceFile); - assert.strictEqual(retained.sourceFile, sourceFile); - snapshot.dispose(); - - using recreated = api.createSourceFile("/retained.d.ts", sourceText); - assert.strictEqual(recreated.sourceFile, sourceFile); - - const local = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", "/local.ts" as RootedFilePath, "/local.ts" as PathKey); - assert.throws(() => api.retainSourceFile(local), /Only remote source files can be retained/); - }); - - test("createSourceFileFromFile", () => { - using api = spawnAPI({ - "/input.ts": "export const fromFile = 1;", - }); - using retained = api.createSourceFileFromFile({ uri: "file:///input.ts" }); - const fromFile = retained.sourceFile; - assert.equal(fromFile.fileName, "/input.ts"); - assert.equal(fromFile.text, "export const fromFile = 1;"); - assert.equal(fromFile.scriptKind, ScriptKind.TS); - - assert.throws(() => api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); - }); - - test("createProgram", () => { - using api = spawnAPI({ - "/src/index.ts": `export const value: string = 1;`, - }); - - const program = api.createProgram(["/src/index.ts"], { noLib: true, strict: true }); - - assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(program.getSourceFileNames(), ["/src/index.ts"]); - assert.equal((program.getSemanticDiagnostics("/src/index.ts")).length, 1); - - program.dispose(); - assert.throws(() => program.getSourceFileNames(), /snapshot .* not found/); - }); - - test("createSnapshot creates independent synthetic programs", () => { - using api = spawnAPI({ - "/src/a.ts": `export const a = 1;`, - "/src/b.ts": `export const b = 2;`, - }); - - const snapshot = api.createSnapshot({ - createPrograms: [ - { rootFiles: ["/src/a.ts"], compilerOptions: { noLib: true } }, - { rootFiles: ["/src/b.ts"], compilerOptions: { noLib: true, strict: true } }, - ], - }); - assert.equal(snapshot.getProjects().length, 2); - assert.deepEqual(snapshot.getProjects().map(project => project.rootFiles), [["/src/a.ts"], ["/src/b.ts"]]); - assert.equal(snapshot.operation.createdPrograms!.length, 2); - for (const program of snapshot.operation.createdPrograms!) { - const syntheticProjectId: SyntheticProjectId = program.id; - void syntheticProjectId; - assert.strictEqual(snapshot.getProgram(program.id), program); - assert.strictEqual(snapshot.getProject(program.id), program.getProject()); - } - - const empty = api.createSnapshot(); - assert.deepEqual(empty.getProjects(), []); - assert.equal(empty.operation.createdPrograms, undefined); - assert.equal(empty.operation.openedFiles, undefined); - }); - - test("snapshot.update preserves identity when the server returns the same snapshot", () => { - using api = spawnAPI(); - const snapshot = api.createSnapshot(); - const client = (api as unknown as { - client: { apiRequest(method: string, params: unknown): unknown; }; - }).client; - const apiRequest = client.apiRequest.bind(client); - let duplicateReference = false; - client.apiRequest = (method, params) => { - if ( - method === "release" - && typeof params === "object" - && params !== null - && "snapshot" in params - && params.snapshot === snapshot.id - && duplicateReference - ) { - duplicateReference = false; - return true; - } - const response = apiRequest(method, params); - if (method !== "updateSnapshot" || typeof response !== "object" || response === null) return response; - if (!("snapshot" in response) || typeof response.snapshot !== "number") return response; - apiRequest("release", { snapshot: response.snapshot }); - duplicateReference = true; - return { ...response, snapshot: snapshot.id }; - }; - - assert.strictEqual(snapshot.update({}), snapshot); - assert.equal(duplicateReference, false); - }); - - test("snapshot.update reconfigures a synthetic program", () => { - using api = spawnAPI({ - "/src/a.ts": `export const a = 1;`, - "/src/b.ts": `export const b = 2;`, - }); - const snapshot = api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/a.ts"], - compilerOptions: { noLib: true }, - }], - }); - const originalProgram = snapshot.operation.createdPrograms[0]; - - const updated = snapshot.update({ - reconfigurePrograms: [{ - id: originalProgram.id, - rootFiles: ["/src/b.ts"], - compilerOptions: { noLib: true, strict: true }, - }], - }); - const reconfiguredProgram = updated.getProgram(originalProgram.id); - assert.ok(reconfiguredProgram); - - assert.equal(reconfiguredProgram.id, originalProgram.id); - assert.deepEqual(reconfiguredProgram.getSourceFileNames(), ["/src/b.ts"]); - assert.deepEqual(reconfiguredProgram.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(originalProgram.getSourceFileNames(), ["/src/a.ts"]); - }); - - test("snapshot.update reconfigures module resolution providers", () => { - const root = toRootedFilePath("/src/index.ts", undefined); - const providedA = toRootedFilePath("/a.d.ts", undefined); - const providedB = toRootedFilePath("/b.d.ts", undefined); - const { api: disposableAPI, fs } = spawnAPIWithFS({ - [root]: `import { value } from "pkg"; export { value };`, - [providedA]: `export declare const value: "a";`, - [providedB]: `export declare const value: "b";`, - }); - - using api = disposableAPI; - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const spec = (resolvedFileName: string) => ({ - fallback: "unresolved" as const, - entries: [{ moduleName: "pkg", result: { resolvedFileName } }], - }); - const resolverA = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const resolverB = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedB) }); - const inlineResolverA = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const inlineResolverB = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); - const createProgram = (moduleResolver?: ModuleResolver) => ({ - rootFiles: [root], - compilerOptions, - ...(moduleResolver ? { options: { moduleResolver } } : {}), - }); - - const initial = api.createSnapshot({ createPrograms: [createProgram(resolverA)] }); - const programId = initial.operation.createdPrograms![0].id; - assert.deepEqual([...initial.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - assert.equal( - (resolverA.resolveModuleName("pkg", "/src", undefined, { snapshot: initial })).resolvedModule?.resolvedFileName, - providedA, - ); - assert.equal((resolverA.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, providedA); - - const sameSet = initial.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], - }); - assert.deepEqual([...sameSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - fs.writeFile!(root, `import { value } from "pkg"; export const updated = value;`); - const sameSetAfterEdit = sameSet.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], - fileNotifications: { changed: [root] }, - }); - assert.deepEqual([...sameSetAfterEdit.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - const changedSet = sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(resolverB) }], - }); - assert.deepEqual([...changedSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedB, root]); - - const removedSet = sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(undefined) }], - }); - assert.deepEqual(removedSet.getProgram(programId)!.getSourceFileNames(), [root]); - - const inline = sameSetAfterEdit.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverA) }], - }); - const repeatedInline = inline.update({ - reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverB) }], - }); - assert.deepEqual([...repeatedInline.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); - - let callbackCalls = 0; - const callbackResolver = api.createModuleResolver(compilerOptions, { - resolveModuleName: (moduleName: string) => { - callbackCalls++; - return moduleName === "pkg" ? { resolvedFileName: providedA } : undefined; - }, - }); - const callbackSnapshot = api.createSnapshot({ - createPrograms: [createProgram(callbackResolver)], - }); - const callbackProgramId = callbackSnapshot.operation.createdPrograms![0].id; - const repeatedCallback = callbackSnapshot.update({ - reconfigurePrograms: [{ id: callbackProgramId, ...createProgram(callbackResolver) }], - }); - assert.deepEqual([...repeatedCallback.getProgram(callbackProgramId)!.getSourceFileNames()].sort(), [providedA, root]); - assert.equal(callbackCalls, 1); - }); - - test("module resolver normalizes raw compiler option paths", () => { - using api = spawnAPI(); - const resolver = api.createModuleResolver({ - noLib: true, - outDir: "dist", - rootDirs: ["src", "generated"], - tsBuildInfoFile: "cache/build.tsbuildinfo", - typeRoots: ["types"], - }); - const result = resolver.resolveModuleName("./missing", "/src", undefined); - assert.equal(result.resolvedModule, undefined); - }); - - test("module resolver runs against snapshots or the host filesystem", () => { - const packageJson = toRootedFilePath("/node_modules/pkg/package.json", undefined); - const packageB = toRootedFilePath("/node_modules/pkg/b.d.ts", undefined); - const { api: disposableAPI, fs } = spawnAPIWithFS({ - [packageJson]: JSON.stringify({ name: "pkg", version: "1.0.0", types: "a.d.ts" }), - "/node_modules/pkg/a.d.ts": `export declare const value: "a";`, - }); - using api = disposableAPI; - const resolver = api.createModuleResolver({ - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }); - const firstSnapshot = api.createSnapshot(); - assert.equal( - (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), - ); - - fs.writeFile!(packageJson, JSON.stringify({ name: "pkg", version: "1.0.0", types: "b.d.ts" })); - fs.writeFile!(packageB, `export declare const value: "b";`); - const secondSnapshot = firstSnapshot.update({ - fileNotifications: { - changed: [packageJson], - created: [packageB], - }, - }); - - assert.equal( - (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), - ); - assert.equal( - (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: secondSnapshot })).resolvedModule?.resolvedFileName, - toRootedFilePath("/node_modules/pkg/b.d.ts", undefined), - ); - assert.equal( - (resolver.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, - "/node_modules/pkg/b.d.ts", - ); - }); - - test("source imports do not request module resolution", () => { - using api = spawnAPI({ - "/src/index.ts": `import source a from "pkg"; -import.source("missing"); -import { value } from "pkg";`, - "/pkg.d.ts": "export const value: number;", - }); - const compilerOptions = { noLib: true, module: ModuleKind.ESNext }; - const requests: string[] = []; - const resolver = api.createModuleResolver(compilerOptions, { - resolveModuleName: name => { - requests.push(name); - return { resolvedFileName: "/pkg.d.ts" }; - }, - }); - const program = api.createProgram(["/src/index.ts"], compilerOptions, { moduleResolver: resolver }); - assert.deepEqual(requests, ["pkg"]); - const file = program.getSourceFile("/src/index.ts"); - assert.ok(file); - const source = cast(cast(file.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); - const evaluation = cast(cast(file.statements[2], isImportDeclaration).moduleSpecifier, isStringLiteral); - assert.equal(program.getResolvedModuleFromModuleSpecifier(source), undefined); - assert.equal((program.getResolvedModuleFromModuleSpecifier(evaluation))?.resolvedFileName, "/pkg.d.ts"); - }); - - test("module resolver callbacks can delegate to another resolver", () => { - using api = spawnAPI({ - "/src/index.ts": `import "custom"; import "native";`, - "/custom.d.ts": `export {};`, - "/node_modules/native/package.json": JSON.stringify({ name: "native", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/native/index.d.ts": `export {};`, - }); - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = api.createModuleResolver(compilerOptions); - const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; - const customResolver = api.createModuleResolver(compilerOptions, { - resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - callbackSnapshots.push(snapshot); - if (moduleName === "custom") return { resolvedFileName: "/custom.d.ts" }; - assert.ok(snapshot); - return (defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions, - options: { moduleResolver: customResolver }, - }], - }); - assert.deepEqual( - [...snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), - ["/custom.d.ts", "/node_modules/native/index.d.ts", "/src/index.ts"], - ); - assert.equal(callbackSnapshots.length, 2); - assert.equal(callbackSnapshots[0], callbackSnapshots[1]); - assert.ok(typeof callbackSnapshots[0] === "number"); - assert.ok(callbackSnapshots[0] < 0); - }); - - test("module resolver callbacks can resolve against the in-progress snapshot filesystem", () => { - using api = spawnAPI({ - "/src/index.ts": `import "layered";`, - }); - const compilerOptions = { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = api.createModuleResolver({ - ...compilerOptions, - customConditions: ["delegated"], - }); - const customResolver = api.createModuleResolver(compilerOptions, { - resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - assert.ok(snapshot); - return (defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = api.createSnapshot({ - fileSystem: createFileSystemLayer([ - [ - "/node_modules/layered/package.json", - JSON.stringify({ - name: "layered", - version: "1.0.0", - exports: { ".": { delegated: "./index.d.ts" } }, - }), - ], - ["/node_modules/layered/index.d.ts", `export {};`], - ]), - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions, - options: { moduleResolver: customResolver }, - }], - }); - assert.deepEqual( - [...snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), - ["/node_modules/layered/index.d.ts", "/src/index.ts"], - ); - }); - - test("module resolver callback errors reject lib replacement", () => { - using api = spawnAPI({ - "/src/index.ts": `export {};`, - }); - const resolver = api.createModuleResolver( - { moduleResolution: ModuleResolutionKind.Bundler }, - { - resolveModuleName: () => { - throw new Error("lib replacement callback failed"); - }, - }, - ); - - assert.throws( - () => - api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { libReplacement: true }, - options: { moduleResolver: resolver }, - }], - }), - /lib replacement callback failed/, - ); - }); - - test("program module resolution uses the resolver compiler options", () => { - using api = spawnAPI({ - "/src/index.ts": `/// -import "pkg/feature";`, - "/node_modules/pkg/package.json": JSON.stringify({ - name: "pkg", - version: "1.0.0", - exports: { "./feature": { resolver: "./dist/feature.d.ts" } }, - }), - "/node_modules/pkg/dist/feature.d.ts": `export {};`, - "/node_modules/@types/resolver-types/index.d.ts": `export {};`, - }); - const resolver = api.createModuleResolver({ - module: ModuleKind.ESNext, - moduleResolution: ModuleResolutionKind.Bundler, - customConditions: ["resolver"], - }); - const snapshot = api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { - noLib: true, - module: ModuleKind.Node16, - moduleResolution: ModuleResolutionKind.Node16, - }, - options: { moduleResolver: resolver }, - }], - }); - - assert.deepEqual( - [...snapshot.operation.createdPrograms![0].getSourceFileNames()].sort(), - ["/node_modules/@types/resolver-types/index.d.ts", "/node_modules/pkg/dist/feature.d.ts", "/src/index.ts"], - ); - }); - - test("module resolver callbacks preserve retained and live filesystem context", () => { - using api = spawnAPI({ - "/src/index.ts": `export {};`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - }); - const compilerOptions = { - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }; - const defaultResolver = api.createModuleResolver(compilerOptions); - const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; - const passthroughResolver = api.createModuleResolver(compilerOptions, { - resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { - callbackSnapshots.push(snapshot); - return (defaultResolver.resolveModuleName( - moduleName, - containingDirectory, - resolutionMode, - snapshot === undefined ? undefined : { snapshot }, - )).resolvedModule; - }, - }); - const snapshot = api.createSnapshot(); - - assert.equal( - (passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext, { snapshot })).resolvedModule?.resolvedFileName, - "/node_modules/pkg/index.d.ts", - ); - assert.equal(callbackSnapshots[0], snapshot); - - assert.equal( - (passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext)).resolvedModule?.resolvedFileName, - "/node_modules/pkg/index.d.ts", - ); - assert.equal(callbackSnapshots[1], undefined); - }); - - test("static resolutions do not report native resolution provenance diagnostics", () => { - using api = spawnAPI({ - "/src/index.ts": `import { value } from "./value.ts"; export { value };`, - "/value.ts": `export const value = 1;`, - }); - const resolver = api.createModuleResolver( - { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }, - { - moduleResolutions: { - fallback: "unresolved", - entries: [{ - moduleName: "./value.ts", - result: { - resolvedFileName: "/value.ts", - }, - }], - }, - }, - ); - const snapshot = api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { - noLib: true, - module: ModuleKind.NodeNext, - moduleResolution: ModuleResolutionKind.NodeNext, - }, - options: { - moduleResolver: resolver, - }, - }], - }); - const program = snapshot.operation.createdPrograms[0]; - assert.deepEqual(program.getSemanticDiagnostics("/src/index.ts"), []); - }); - - test("Program resolved modules and type reference directives", () => { - using api = spawnAPI({ - "/src/index.ts": `/// -import "pkg"; -import "missing"; -declare module "augmentation" {}`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - "/node_modules/@types/pkg-types/package.json": JSON.stringify({ name: "@types/pkg-types", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/@types/pkg-types/index.d.ts": `export {};`, - }); - - const program = api.createProgram( - ["/src/index.ts"], - { module: ModuleKind.ESNext, moduleResolution: ModuleResolutionKind.Bundler, noLib: true }, - ); - const sourceFile = program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const pkgSpecifier = cast(cast(sourceFile.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); - - assert.equal(program.getModeForUsageLocation("/src/index.ts", pkgSpecifier), ModuleKind.ESNext); - assert.equal(program.getModeForResolutionAtIndex("/src/index.ts", 0), ModuleKind.ESNext); - assert.equal(program.getModeForResolutionAtIndex("/src/index.ts", 2), ModuleKind.ESNext); - - const resolvedModule = program.getResolvedModule("/src/index.ts", "pkg", ModuleKind.ESNext); - assert.ok(resolvedModule); - assert.equal(resolvedModule.resolvedFileName, "/node_modules/pkg/index.d.ts"); - - const resolvedModuleWithLocations = program.getResolvedModuleFromModuleSpecifier(pkgSpecifier); - assert.ok(resolvedModuleWithLocations); - assert.equal(resolvedModuleWithLocations.packageId?.name, "pkg"); - - const missingModule = program.getResolvedModule( - "/src/index.ts", - "missing", - ModuleKind.ESNext, - ); - assert.equal(missingModule, undefined); - - const typeReference = sourceFile.typeReferenceDirectives[0]; - const resolvedTypeReference = program.getResolvedTypeReferenceDirective( - "/src/index.ts", - "pkg-types", - ModuleKind.None, - ); - assert.equal(resolvedTypeReference?.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); - - const resolvedTypeReferenceWithLocations = program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( - typeReference, - "/src/index.ts", - ); - assert.ok(resolvedTypeReferenceWithLocations); - assert.equal(resolvedTypeReferenceWithLocations.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); - - program.dispose(); - }); - - test("createProgram resolves raw compiler option paths", () => { - using api = spawnAPI({ - "/src/index.ts": `import { value } from "ba"; export { value };`, - "/src/first.ts": `export const value = 1;`, - "/src/fallback.ts": `export const value = 2;`, - "/src/component.vue": `export const component = 1;`, - }); - const rawOptions: RawCompilerOptions = { - noLib: true, - allowNonTsExtensions: true, - outDir: "dist", - paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, - rootDirs: ["src", "generated"], - suppressOutputPathCheck: true, - tsBuildInfoFile: "cache/build.tsbuildinfo", - }; - // @ts-expect-error raw path strings are not finalized compiler options - const _finalizedOptions: CompilerOptions = rawOptions; - const _rawOptions: RawCompilerOptions = undefined! as CompilerOptions; - - const program = api.createProgram(["/src/index.ts", "/src/component.vue"], rawOptions); - const compilerOptions: CompilerOptions = program.getCompilerOptions(); - const serverCurrentDirectory = resolve("../.."); - assert.deepEqual( - compilerOptions, - { - noLib: true, - allowNonTsExtensions: true, - outDir: toRootedDirectoryPath(resolve(serverCurrentDirectory, "dist"), undefined), - paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, - rootDirs: [ - toRootedDirectoryPath(resolve(serverCurrentDirectory, "src"), undefined), - toRootedDirectoryPath(resolve(serverCurrentDirectory, "generated"), undefined), - ], - suppressOutputPathCheck: true, - tsBuildInfoFile: toRootedFilePath(resolve(serverCurrentDirectory, "cache/build.tsbuildinfo"), undefined), - } satisfies CompilerOptions, - ); - assert.equal((program.getSemanticDiagnostics("/src/index.ts")).length, 0); - assert(program.getSourceFile("/src/first.ts")); - assert.equal(program.getSourceFile("/src/fallback.ts"), undefined); - assert(program.getSourceFile("/src/component.vue")); - program.dispose(); - }); - - test("createProgram ignores an on-disk tsconfig", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { noLib: false, strict: false }, - files: ["src/from-config.ts"], - }), - "/src/index.ts": `export const explicitRoot = 1;`, - "/src/from-config.ts": `export const configRoot = 1;`, - }); - - const program = api.createProgram( - ["/src/index.ts"], - { noLib: true, strict: true }, - ); - - assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); - assert.deepEqual(program.getSourceFileNames(), ["/src/index.ts"]); - assert.deepEqual(program.getConfigFileNames(), []); - assert.equal(program.getSourceFile("/src/from-config.ts"), undefined); - program.dispose(); - }); - - test("createProgram rejects invalid project reference paths", () => { - using api = spawnAPI({ - "/src/index.ts": `export const value = 1;`, - }); - - assert.throws( - () => - api.createProgram( - ["/src/index.ts"], - { noLib: true }, - { projectReferences: [{ path: "" }] }, - ), - /Path must not be empty/, - ); - }); - - test("createProgram includes config file parsing diagnostics", () => { - const diagnostic = { - pos: 0, - end: 0, - code: 9001, - category: DiagnosticCategory.Error, - text: "Synthetic config parsing error.", - }; - using api = spawnAPI({ "/src/index.ts": `export const value = 1;` }); - - const program = api.createProgram( - ["/src/index.ts"], - { noLib: true }, - { - configFileParsingDiagnostics: [diagnostic], - }, - ); - - assert.deepEqual(program.getConfigFileParsingDiagnostics(), [diagnostic]); - program.dispose(); - }); - - test("createProgram discovers imported non-root dependencies", () => { - using api = spawnAPI({ - "/src/main.ts": `import { dependency } from "./dependency"; export const value = dependency;`, - "/src/dependency.ts": `export const dependency = 1;`, - }); - - const program = api.createProgram(["/src/main.ts"], { noLib: true }); - assert.deepEqual([...program.getSourceFileNames()].sort(), ["/src/dependency.ts", "/src/main.ts"]); - - program.dispose(); - }); - - test("parseConfigFile", () => { - using api = spawnAPI(); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); - assert.equal(config.compileOnSave, false); - assert.equal(config.typeAcquisition, undefined); - assert.equal(config.projectReferences, undefined); - }); - - test("parseConfigFile includes projectReferences", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ references: [{ path: "./harness" }, { path: "./server" }] }), - }); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.fileNames, []); - assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); - assert.deepEqual(config.projectReferences, [ - { circular: false, originalPath: "./harness", path: "/harness" }, - { circular: false, originalPath: "./server", path: "/server" }, - ]); - }); - - test("parseConfigFile preserves raw config", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compileOnSave: true, - customSetting: { enabled: true }, - files: ["/src/index.ts"], - }), - }); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.equal(config.compileOnSave, true); - assert.deepEqual(config.raw, { - compileOnSave: true, - customSetting: { enabled: true }, - files: ["/src/index.ts"], - }); - }); - - test("parseConfigFile includes compileOnSave", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compileOnSave: true }), - }); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.equal(config.compileOnSave, true); - }); - - test("parseConfigFile includes typeAcquisition", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ typeAcquisition: { enable: true, include: ["jquery"] } }), - }); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.equal(config.typeAcquisition?.enable, true); - assert.deepEqual(config.typeAcquisition?.include, ["jquery"]); - }); - - test("parseConfigFile includes inherited plugins", () => { - using api = spawnAPI({ - "/tsconfig.base.json": JSON.stringify({ compilerOptions: { plugins: [{ name: "typescript-plugin" }] } }), - "/tsconfig.json": JSON.stringify({ extends: "./tsconfig.base.json" }), - }); - - const config = api.parseConfigFile("/tsconfig.json"); - assert.deepEqual(config.options.plugins, [{ name: "typescript-plugin" }]); - }); -}); - -describe("BuildOrchestrator", () => { - const files = { - "/a/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/a/src/index.ts": `export const a = 1;`, - "/b/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/b/src/index.ts": `export const b = 2;`, - "/c/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - references: [{ path: "../a" }, { path: "../b" }], - }), - "/c/src/index.ts": `export const c = 3;`, - }; - - test("dispose is idempotent", () => { - const { api: disposableApi } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const options = api.parseCommandLine([]); - const orchestrator = api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/", ...options }, - ); - - const firstDispose = orchestrator.dispose(); - const secondDispose = orchestrator.dispose(); - assert.strictEqual(firstDispose, secondDispose); - orchestrator.dispose(); - // Second dispose should not throw - orchestrator.dispose(); - assert.throws(() => orchestrator.build(), /Build orchestrator is disposed/); - }); - - test("api.close disposes all build orchestrators", () => { - const { api } = spawnAPIWithFS({ ...files }); - const options = api.parseCommandLine([]); - const orchestrator1 = api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/", ...options }, - ); - const orchestrator2 = api.createBuildOrchestrator( - ["/b/tsconfig.json"], - { cwd: "/", ...options }, - ); - assert.ok(!orchestrator1.isDisposed()); - assert.ok(!orchestrator2.isDisposed()); - api.close(); - assert.ok(orchestrator1.isDisposed()); - assert.ok(orchestrator2.isDisposed()); - orchestrator1.dispose(); - orchestrator2.dispose(); - }); - - test("builds the configured root projects", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const defaultOptions = { - cwd: "/", - dry: false, - force: false, - verbose: true, - stopBuildOnErrors: false, - overrideCompilerOptions: { - incremental: true, - assumeChangesOnlyAffectDirectDependencies: true, - declaration: false, - declarationMap: true, - emitDeclarationOnly: false, - sourceMap: false, - inlineSourceMap: false, - traceResolution: false, - }, - }; - const orchestrator = api.createBuildOrchestrator( - ["/a/tsconfig.json", "/b/tsconfig.json"], - defaultOptions, - ); - - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - }); - - test("returns diagnostics in build response information", () => { - const source = `export const value: string = 1;`; - const { api: disposableApi } = spawnAPIWithFS({ - "/a/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, noEmitOnError: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/a/src/index.ts": source, - }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/" }, - ); - - const response = orchestrator.build(); - assert.equal(response.status, 1); - assert.equal(response.statistics.Projects, 1); - assert.equal(response.statistics.ProjectsBuilt, 1); - assert.deepEqual(response.diagnostics, [{ - fileName: "/a/src/index.ts", - pos: source.indexOf("value"), - end: source.indexOf("value") + "value".length, - startPosition: { line: 0, character: source.indexOf("value") }, - endPosition: { line: 0, character: source.indexOf("value") + "value".length }, - sourceLines: [{ line: 0, text: source }], - code: 2322, - category: 1, - text: "Type 'number' is not assignable to type 'string'.", - }]); - }); - - test("returns build response information after clean", () => { - const { api: disposableApi } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const options = api.parseCommandLine([]); - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/", ...options }, - ); - - assert.equal((orchestrator.build()).status, 0); - - const cleanResp1 = orchestrator.clean("/a/tsconfig.json"); - assert.equal(cleanResp1.status, 0); - assert.deepEqual(cleanResp1.diagnostics, undefined); - assert.deepEqual(cleanResp1.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanResp1.statistics.Projects, 1); - assert.equal(cleanResp1.statistics.ProjectsBuilt, 0); - const buildResp1 = orchestrator.build("/a/tsconfig.json"); - assert.equal(buildResp1.status, 0); - assert.deepEqual(buildResp1.diagnostics, undefined); - assert.equal(buildResp1.statistics.Projects, 1); - assert.equal(buildResp1.statistics.ProjectsBuilt, 1); - - const cleanRefResp = orchestrator.cleanReferences("/c/tsconfig.json"); - assert.equal(cleanRefResp.status, 0); - assert.deepEqual(cleanRefResp.diagnostics, undefined); - assert.deepEqual(cleanRefResp.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - "/b/dist/index.d.ts", - "/b/dist/index.js", - "/b/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanRefResp.statistics.Projects, 2); - assert.equal(cleanRefResp.statistics.ProjectsBuilt, 0); - const buildRefsResp = orchestrator.buildReferences("/c/tsconfig.json"); - assert.equal(buildRefsResp.status, 0); - assert.deepEqual(buildRefsResp.diagnostics, undefined); - - const cleanResp2 = orchestrator.clean(); - assert.equal(cleanResp2.status, 0); - assert.deepEqual(cleanResp2.diagnostics, undefined); - assert.deepEqual(cleanResp2.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - "/a/tsconfig.tsbuildinfo", - "/b/dist/index.d.ts", - "/b/dist/index.js", - "/b/tsconfig.tsbuildinfo", - "/c/dist/index.d.ts", - "/c/dist/index.js", - "/c/tsconfig.tsbuildinfo", - ]); - assert.equal(cleanResp2.statistics.Projects, 3); - assert.equal(cleanResp2.statistics.ProjectsBuilt, 0); - const buildResp2 = orchestrator.build(); - assert.equal(buildResp2.status, 0); - assert.deepEqual(buildResp2.diagnostics, undefined); - assert.equal(buildResp2.statistics.Projects, 3); - assert.equal(buildResp2.statistics.ProjectsBuilt, 3); - }); - - test("returns deleted files from a clean response", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - "/a/dist/index.d.ts": `export declare const a = 1;`, - "/a/dist/index.js": `export const a = 1;`, - }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/a/tsconfig.json"], - { cwd: "/" }, - ); - - const response = orchestrator.clean(); - assert.equal(response.status, 0); - assert.deepEqual(response.diagnostics, undefined); - assert.deepEqual(response.filesDeleted!.sort(), [ - "/a/dist/index.d.ts", - "/a/dist/index.js", - ]); - assert.equal(response.statistics.Projects, 1); - assert.equal(response.statistics.ProjectsBuilt, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.d.ts", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - }); - - test("rebuilds projects after multiple file system changes", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/a/tsconfig.json", "/b/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 20/); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 100;`); - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 200;`); - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 100/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 200/); - }); - - test("clean removes build outputs", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.equal((orchestrator.clean()).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - }); - - test("builds and cleans selected projects after file system changes", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.build("/a/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); - assert.equal((orchestrator.build("/b/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); - assert.equal((orchestrator.clean("/a/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); - - assert.equal((orchestrator.clean("/b/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); - - fs.writeFile!(toRootedFilePath("/b/dist/index.js", undefined), `export const b = 2`); - assert.equal((orchestrator.clean("/b/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - }); - - test("builds only references of a selected project", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - }); - using api = disposableApi; - const options = api.parseCommandLine([]); - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.buildReferences("/c/tsconfig.json")).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); - assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); - assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); - }); - - test("cleans only references of a selected project", () => { - const { api: disposableApi, fs } = spawnAPIWithFS({ - ...files, - }); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - - assert.equal((orchestrator.cleanReferences("/c/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - - assert.equal((orchestrator.build()).status, 0); - assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); - assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); - assert.equal((orchestrator.cleanReferences()).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); - }); - - test("handles invalidated projects and cleans the last built configuration", () => { - const writes: string[] = []; - const { api: disposableApi, fs } = spawnAPIWithFS( - { - ...files, - "/c/src/index.ts": `import { a } from "../../a/src/index"; export const c = a;`, - "/d/tsconfig.json": JSON.stringify({ - compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, - files: ["src/index.ts"], - }), - "/d/src/index.ts": `export const d = 4;`, - }, - path => writes.push(path), - ); - using api = disposableApi; - const orchestrator = api.createBuildOrchestrator( - ["/c/tsconfig.json", "/d/tsconfig.json"], - { cwd: "/" }, - ); - - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined))!, /export const d = 4/); - - fs.writeFile!( - toRootedFilePath("/d/tsconfig.json", undefined), - JSON.stringify({ - compilerOptions: { composite: true, outDir: "lib", rootDir: "src" }, - files: ["src/index.ts"], - }), - ); - fs.writeFile!(toRootedFilePath("/d/lib/index.js", undefined), `export const d = 40;`); - - assert.equal((orchestrator.clean("/d/tsconfig.json")).status, 0); - assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); - assert.ok(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))); - - assert.equal((orchestrator.build()).status, 0); - assert.match(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))!, /export const d = 4/); - assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); - }); -}); - -describe("Checker - getImmediateAliasedSymbol", { concurrency }, () => { - test("resolves one level of alias indirection", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/foo.ts": `export const foo = 42;`, - "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `import { foo } from "./foo";`.indexOf("foo }"); - const aliasSymbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(aliasSymbol); - const aliased = project.checker.getImmediateAliasedSymbol(aliasSymbol); - assert.ok(aliased, "Should resolve the immediate aliased symbol"); - assert.equal(aliased.name, "foo"); - }); -}); - -describe("Checker - getTargetSymbol", { concurrency }, () => { - test("gets the target symbol of instantiated symbol", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -class Base { - private value!: T; -} -class Alpha extends Base {} -class Bravo extends Base {} - -declare function test(): void; -test(); -test(); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const nodes: Array = []; - sourceFile.forEachChild(node => { - if (isExpressionStatement(node) && isCallExpression(node.expression) && node.expression.typeArguments) { - nodes.push(node.expression.typeArguments[0]); - } - }); - const aType = project.checker.getTypeAtLocation(nodes[0]); - const bType = project.checker.getTypeAtLocation(nodes[1]); - const aProperty = (project.checker.getPropertiesOfType(aType))[0]; - const bProperty = (project.checker.getPropertiesOfType(bType))[0]; - assert.ok(aProperty); - assert.ok(bProperty); - assert.equal(aProperty === bProperty, false); - assert.equal(project.checker.getTargetSymbol(aProperty) === project.checker.getTargetSymbol(bProperty), true); - }); -}); - -describe("Snapshot", { concurrency }, () => { - test("createSnapshot returns snapshot with projects", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok(snapshot); - assert.ok(snapshot.id); - assert.ok(snapshot.getProjects().length > 0); - assert.ok(snapshot.getConfiguredProject("/tsconfig.json")); - }); - - test("project exposes parsedCommandLine", () => { - using api = spawnAPI({ - ...defaultFiles, - "/tsconfig.json": JSON.stringify({ compileOnSave: true }), - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual(project.parsedCommandLine.fileNames, ["/src/index.ts", "/src/foo.ts"]); - assert.deepEqual(project.parsedCommandLine.options, { configFilePath: "/tsconfig.json" }); - assert.equal(project.parsedCommandLine.compileOnSave, true); - assert.deepEqual(project.rootFiles, project.parsedCommandLine.fileNames); - assert.deepEqual(project.compilerOptions, project.parsedCommandLine.options); - }); - - test("getSymbolAtPosition", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - assert.ok(symbol.flags & SymbolFlags.Alias); - }); - - test("getSymbolAtLocation", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const node = cast( - cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, - isNamedImports, - ).elements[0].name; - assert.ok(node); - const symbol = project.checker.getSymbolAtLocation(node); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - assert.ok(symbol.flags & SymbolFlags.Alias); - }); - - test("getSymbolOfSourceFile", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const moduleSymbol = project.checker.getSymbolOfSourceFile("/src/foo.ts"); - assert.ok(moduleSymbol); - const exports = moduleSymbol.getExports(); - assert.ok(exports.has(escapeLeadingUnderscores("foo"))); - }); - - test("getSymbolOfSourceFile returns undefined for a non-module file", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/script.ts": `const x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolOfSourceFile("/src/script.ts"); - assert.equal(symbol, undefined); - }); - - test("getSymbolOfSourceFile batched", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbols = project.checker.getSymbolOfSourceFile(["/src/index.ts", "/src/foo.ts"]); - assert.equal(symbols.length, 2); - assert.ok(symbols[0]); - assert.ok(symbols[1]); - assert.strictEqual(symbols[1], project.checker.getSymbolOfSourceFile("/src/foo.ts")); - }); - - test("getTypeOfSymbol", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NumberLiteral); - }); - - test("getNonMissingTypeOfSymbol", () => { - using api = spawnAPI({ - "/tsconfig-one.json": JSON.stringify({ - compilerOptions: { - exactOptionalPropertyTypes: true, - strict: true, - }, - }), - "/tsconfig-two.json": JSON.stringify({ - compilerOptions: { - exactOptionalPropertyTypes: false, - strict: true, - }, - }), - "/src/index.ts": "const x: Partial<{ a: string }> = {};", - }); - - // when `"exactOptionalPropertyTypes": true` - const snapshot1 = api.createSnapshot({ openProject: "/tsconfig-one.json" }); - const project1 = snapshot1.getConfiguredProject("/tsconfig-one.json")!; - const type1 = project1.checker.getTypeAtPosition("/src/index.ts", 7); - assert.ok(type1); - const symbol1 = project1.checker.getPropertyOfType(type1, "a"); - assert.ok(symbol1); - const propertyType1 = project1.checker.getTypeOfSymbol(symbol1); - assert.ok(propertyType1); - // getTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType1.isUnionType()); - const propertyType2 = project1.checker.getNonMissingTypeOfSymbol(symbol1); - assert.ok(propertyType2); - // getNonMissingTypeOfSymbol returns 'string' - assert.ok(!propertyType2.isUnionType()); - assert.ok(propertyType2.flags & TypeFlags.String); - - // when `"exactOptionalPropertyTypes": false` - const snapshot2 = api.createSnapshot({ openProject: "/tsconfig-two.json" }); - const project2 = snapshot2.getConfiguredProject("/tsconfig-two.json")!; - const type2 = project2.checker.getTypeAtPosition("/src/index.ts", 7); - assert.ok(type2); - const symbol2 = project2.checker.getPropertyOfType(type2, "a"); - assert.ok(symbol2); - const propertyType3 = project2.checker.getTypeOfSymbol(symbol2); - assert.ok(propertyType3); - // getTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType3.isUnionType()); - const propertyType4 = project2.checker.getNonMissingTypeOfSymbol(symbol2); - assert.ok(propertyType4); - // getNonMissingTypeOfSymbol returns 'string | undefined' - assert.ok(propertyType4.isUnionType()); - }); -}); - -describe("LanguageService - imports", { concurrency }, () => { - test("getImportEditsForSymbols adds a named import", () => { - const source = `const value = foo;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); - assert.ok(symbol); - - const edits = project.languageService.getImportEditsForSymbols("/src/index.ts", [symbol.getExportSymbol()]); - - assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); - }); - - test("getImportAdderEdits coalesces multiple importSymbol actions", () => { - const source = `const value = foo + bar;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const foo = project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); - const bar = project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); - assert.ok(foo); - assert.ok(bar); - - const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol: foo.getExportSymbol() }, - { kind: "importSymbol", symbol: bar.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\n\nconst value = foo + bar;\n`); - }); - - test("getImportAdderEdits roots relative files at the project directory", () => { - const source = `const value = foo;\n`; - const api = spawnAPI({ - "/outside/tsconfig.json": "{}", - "/outside/src/index.ts": source, - "/outside/src/foo.ts": `export const foo = 1;\n`, - }); - try { - const snapshot = api.createSnapshot({ openProject: "/outside/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/outside/tsconfig.json")!; - const foo = project.checker.getSymbolAtPosition("/outside/src/foo.ts", "export const ".length); - assert.ok(foo); - - const edits = project.languageService.getImportAdderEdits("src/index.ts", [ - { kind: "importSymbol", symbol: foo.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); - } - finally { - api.close(); - } - }); - - test("getImportAdderEdits adds to an existing import", () => { - const source = `import { foo } from "./foo";\nconst value = foo + bar;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const bar = project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); - assert.ok(bar); - - const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol: bar.getExportSymbol() }, - ]); - - assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\nconst value = foo + bar;\n`); - }); - - test("getImportAdderEdits returns no edits for non-exported symbols", () => { - const source = `const value = local;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - "/src/foo.ts": `const local = 1;\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", "const ".length); - assert.ok(symbol); - - const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ - { kind: "importSymbol", symbol }, - ]); - - assert.deepEqual(edits, []); - }); - - test("getImportAdderEdits rejects invalid actions", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", 13); - assert.ok(symbol); - - assert.throws( - () => project.languageService.getImportAdderEdits("/src/index.ts", [{ kind: "unknown", symbol: symbol.id } as unknown as ImportAdderAction]), - /Debug Failure\. Illegal value: "unknown"/, - ); - assert.throws( - () => - project.languageService.getImportAdderEdits("/src/index.ts", [{ - kind: "importSymbol", - symbol: { ...symbol, reference: { ...symbol.reference, id: 999_999_999 } }, - } as unknown as ImportAdderAction]), - /symbol handle \d+ not found/, - ); - }); -}); - -describe("LanguageService - getCompletionsAtPosition", { concurrency }, () => { - test("returns member completions after a dot", () => { - const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Position right after "obj." — member completion trigger - const pos = src.indexOf("obj.") + "obj.".length; - const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); - assert.ok(completions, "Expected completions to be returned"); - assert.ok(completions.entries.length > 0, "Expected at least one completion entry"); - assert.ok(completions.entries.some(e => e.name === "name"), "Expected 'name' property in completions"); - assert.ok(completions.entries.some(e => e.name === "age"), "Expected 'age' property in completions"); - assert.ok(completions.entries.every(e => e.symbol === undefined), "Expected no symbol information"); - }); - - test("completion entries include sortText", () => { - const src = `\nconst obj = { value: 1 };\nobj.\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("obj.") + "obj.".length; - const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); - assert.ok(completions); - assert.ok(completions.entries.length > 0); - assert.ok(completions.entries.some(e => e.sortText !== undefined), "Expected sortText on all entries"); - }); - - test("returns undefined for a non-existent file", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const completions = project.languageService.getCompletionsAtPosition("/src/does-not-exist.ts", 0); - assert.equal(completions, undefined, "Expected undefined for non-existent file"); - }); - - test("includeSymbol: true populates symbol on property completions", () => { - const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("obj.") + "obj.".length; - const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: ".", includeSymbol: true }); - assert.ok(completions, "Expected completions"); - const nameEntry = completions.entries.find(e => e.name === "name"); - assert.ok(nameEntry, "Expected 'name' entry"); - assert.ok(nameEntry.symbol, "Expected symbol to be set on 'name' entry when includeSymbol: true"); - assert.equal(nameEntry.symbol.name, "name", "Symbol name should match completion name"); - }); - - test("auto-import completions with symbols require a prepared snapshot", () => { - const src = "someV"; - using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, - "/src/export.ts": "export const someValue = 1;", - "/src/main.ts": src, - }); - - const unprepared = api.createSnapshot({ - openProject: "/tsconfig.json", - userPreferences: { includeCompletionsForModuleExports: true } satisfies UserPreferences, - }); - const unpreparedProject = unprepared.getConfiguredProject("/tsconfig.json")!; - assert.throws(() => unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), /snapshot is not prepared for auto-imports/); - - const prepared = unprepared.update({ prepareAutoImports: "/src/main.ts" }); - const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; - const completions = preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); - assert.ok(completions?.entries.some(entry => entry.name === "someValue")); - }); - - test("snapshot preferences disable auto-import completions", () => { - const src = "someV"; - using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, - "/src/export.ts": "export const someValue = 1;", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - userPreferences: { includeCompletionsForModuleExports: false } satisfies UserPreferences, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { - includeSymbol: true, - }); - assert.ok(completions); - assert.ok(!completions.entries.some(entry => entry.name === "someValue")); - const prepared = snapshot.update({ - userPreferences: { includeCompletionsForModuleExports: true }, - prepareAutoImports: "/src/main.ts", - }); - const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; - const enabled = preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); - assert.ok(enabled?.entries.some(entry => entry.name === "someValue")); - }); -}); - -describe("LanguageService - getReferencedSymbolsForNode", { concurrency }, () => { - test("getReferencedSymbolsForNode", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); - const funcName = funcDecl.name!; - const refs = project.languageService.getReferencedSymbolsForNode(funcName, funcName.pos); - assert.ok(refs.length > 0); - // Each entry should have a definition and references - const entry = refs[0]; - assert.ok(entry.definition); - assert.ok(entry.references.length > 0); - }); -}); - -describe("LanguageService - getSignatureUsage", { concurrency }, () => { - test("getSignatureUsage", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); - const usages = project.languageService.getSignatureUsage(funcDecl); - assert.ok(usages.length > 0); - // The call site should have a call expression - const usage = usages.find(u => u.call !== undefined); - assert.ok(usage, "Expected at least one usage with a call expression"); - }); -}); - -describe("Checker - getApparentType", { concurrency }, () => { - test("returns the apparent type of a literal type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = "hello" as const;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `export const x = "hello" as const;`.indexOf("x ="); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(type.isLiteralType(), true); - assert.equal(type.isStringLiteralType(), true); - assert.equal(type.isIntrinsicType(), false); - const apparent = project.checker.getApparentType(type); - assert.ok(apparent); - assert.ok(apparent.id > 0); - }); -}); - -describe("Checker - getReducedType", { concurrency }, () => { - test("returns the reduced type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare const TaggedError: ( - tag: Tag, -) => new = {}>( - args: { readonly [P in keyof A]: A[P] }, -) => { readonly _tag: Tag } & Readonly; - -class RateLimitError extends TaggedError("RateLimitError")<{ - readonly retryAfter: number; -}> {} - -class QuotaExceededError extends TaggedError("QuotaExceededError")<{ - readonly limit: number; -}> {} - -export type Result = RateLimitError | (RateLimitError & QuotaExceededError);`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(typeAlias); - const type = project.checker.getTypeAtLocation(typeAlias); - assert.equal(type.isUnionType(), true); - assert.equal(type.isObjectType(), false); - const reducedType = project.checker.getReducedType(type); - assert.equal(reducedType.isUnionType(), false); - assert.equal(reducedType.isObjectType(), true); - }); -}); - -describe("Checker - getMemberInModuleExports", { concurrency }, () => { - test("returns a named export when present", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const direct = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const found = project.checker.getMemberInModuleExports(moduleSymbol, "direct"); - assert.ok(found); - assert.equal(found.name, "direct"); - const missing = project.checker.getMemberInModuleExports(moduleSymbol, "missing"); - assert.equal(missing, undefined); - }); -}); - -describe("SourceFile", { concurrency }, () => { - test("relative and absolute identifiers share the project source file cache", () => { - using api = spawnAPI({ - "/outside/tsconfig.json": "{}", - "/outside/src/index.ts": "export const value = 1;", - }); - - const snapshot = api.createSnapshot({ openProject: "/outside/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/outside/tsconfig.json")!.program; - const absolute = program.getSourceFile("/outside/src/index.ts"); - const relative = program.getSourceFile("src/index.ts"); - - assert.ok(absolute); - assert.strictEqual(relative, absolute); - }); - - test("getSourceFile rejects invalid document identifiers", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const document = { fileName: "/src/index.ts" } as unknown as DocumentIdentifier; - - assert.throws( - () => program.getSourceFile(document), - { - name: "TypeError", - message: "Expected a string or { uri } for the document, received an object with keys: fileName", - }, - ); - }); - - test("getSourceFileNames returns all program files, not just root files", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "node10", - noLib: true, - }, - }), - "/src/index.ts": `import { foo } from "./foo";\nimport { bar } from "my-lib";\nexport const result = foo + bar;`, - "/src/foo.ts": `export const foo = 42;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const fileNames = project.program.getSourceFileNames(); - assert.deepEqual(fileNames, [ - "/src/foo.ts", - "/node_modules/my-lib/index.d.ts", - "/src/index.ts", - ]); - }); - - test("source file metadata identifies external library and default library files", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "node10", - }, - }), - "/src/index.ts": `import { bar } from "my-lib";\nexport const result = bar;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const program = project.program; - - const index = program.getSourceFile("/src/index.ts"); - assert.ok(index); - assert.equal(program.isSourceFileFromExternalLibrary(index), false); - assert.equal(program.isSourceFileDefaultLibrary(index), false); - - const lib = program.getSourceFile("/node_modules/my-lib/index.d.ts"); - assert.ok(lib); - assert.equal(program.isSourceFileFromExternalLibrary(lib), true); - assert.equal(program.isSourceFileDefaultLibrary(lib), false); - - const fileNames = program.getSourceFileNames(); - const defaultLibName = fileNames.find(name => name.endsWith("lib.d.ts") || name.includes("/lib.")); - assert.ok(defaultLibName, "expected a default library file in the program"); - const defaultLib = program.getSourceFile(defaultLibName); - assert.ok(defaultLib); - assert.equal(program.isSourceFileDefaultLibrary(defaultLib), true); - }); - - test("source file metadata reports implied node format", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - module: "nodenext", - moduleResolution: "nodenext", - }, - }), - "/src/index.ts": `export const x = 1;`, - "/src/esm.mts": `export const e = 1;`, - "/src/cjs.cts": `export const c = 1;`, - "/esm/package.json": JSON.stringify({ type: "module" }), - "/esm/index.ts": `export const m = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - - const mts = program.getSourceFile("/src/esm.mts"); - assert.ok(mts); - assert.equal((program.getSourceFileMetadata({ uri: "file:///src/esm.mts" }))?.impliedNodeFormat, ModuleKind.ESNext); - assert.equal((program.getSourceFileMetadataByPath(mts.path))?.impliedNodeFormat, ModuleKind.ESNext); - - const cts = program.getSourceFile("/src/cjs.cts"); - assert.ok(cts); - assert.equal((program.getSourceFileMetadata(cts.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); - - // A plain .ts file with no nearby `"type": "module"` is CommonJS. - const index = program.getSourceFile("/src/index.ts"); - assert.ok(index); - assert.equal((program.getSourceFileMetadata(index.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); - - // A plain .ts file under a `"type": "module"` package is ESM. - const esmIndex = program.getSourceFile("/esm/index.ts"); - assert.ok(esmIndex); - assert.equal((program.getSourceFileMetadata(esmIndex.fileName))?.impliedNodeFormat, ModuleKind.ESNext); - }); - - test("file properties", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - - assert.ok(sourceFile); - assert.equal(sourceFile.text, defaultFiles["/src/index.ts"]); - assert.equal(sourceFile.fileName, "/src/index.ts"); - }); - - test("extended data", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - - assert.ok(sourceFile); - let nodeCount = 1; - sourceFile.forEachChild(function visit(node) { - if (isTemplateHead(node)) { - assert.equal(node.text, "head "); - assert.equal(node.rawText, "head "); - assert.equal(node.templateFlags, 0); - } - else if (isTemplateMiddle(node)) { - assert.equal(node.text, "middle"); - assert.equal(node.rawText, "middle"); - assert.equal(node.templateFlags, 0); - } - else if (isTemplateTail(node)) { - assert.equal(node.text, " tail"); - assert.equal(node.rawText, " tail"); - assert.equal(node.templateFlags, 0); - } - nodeCount++; - node.forEachChild(visit); - }); - assert.equal(nodeCount, 8); - }); - - test("forEachChild with visitList does not visit array children twice", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ files: ["/input.ts"] }), - "/input.ts": `let arrow = () => {}`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/input.ts"); - - assert.ok(sourceFile); - - const visited: { kind: SyntaxKind; pos: number; end: number; }[] = []; - (function walk(node: Node): void { - visited.push({ kind: node.kind, pos: node.pos, end: node.end }); - node.forEachChild(walk, (nodes: NodeArray) => { - for (let i = 0; i < nodes.length; i++) { - walk(nodes[i]); - } - return undefined; - }); - })(sourceFile); - - // Each node should be visited exactly once, even when a visitList callback - // is supplied. Previously array children were visited twice. - const seen = new Set(); - for (const { kind, pos, end } of visited) { - const key = `${kind}.${pos}.${end}`; - assert.ok(!seen.has(key), `Node ${key} was visited more than once`); - seen.add(key); - } - }); -}); - -describe("NodeArray", { concurrency }, () => { - test("hasTrailingComma", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `declare function foo(...args: any): void;\nfoo("a", "b",);\nfoo("a", "b");`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const statements = sourceFile.statements.filter(isExpressionStatement); - assert.ok(isCallExpression(statements[0].expression)); - assert.equal(statements[0].expression.arguments.hasTrailingComma, true); - assert.ok(isCallExpression(statements[1].expression)); - assert.equal(statements[1].expression.arguments.hasTrailingComma, false); - }); -}); - -describe("API objects", { concurrency }, () => { - test("unicode escapes", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/1.ts": `"😃"`, - "/src/2.ts": `"\\ud83d\\ude03"`, - "/src/3.ts": `"\\ud800a\\udc00"`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const expectedTexts = new Map([ - ["/src/1.ts", "😃"], - ["/src/2.ts", "😃"], - ["/src/3.ts", "\ud800a\udc00"], - ]); - - for (const file of expectedTexts.keys()) { - const sourceFile = project.program.getSourceFile(file); - assert.ok(sourceFile); - - sourceFile.forEachChild(function visit(node) { - if (isStringLiteral(node)) { - assert.equal(node.text, expectedTexts.get(file)); - } - node.forEachChild(visit); - }); - } - }); - - test("template unicode escapes", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": "`\\ud800${0}\\udc00`", - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let sawHead = false; - let sawTail = false; - sourceFile.forEachChild(function visit(node) { - if (isTemplateHead(node)) { - assert.equal(node.text, "\ud800"); - sawHead = true; - } - else if (isTemplateTail(node)) { - assert.equal(node.text, "\udc00"); - sawTail = true; - } - node.forEachChild(visit); - }); - assert.ok(sawHead); - assert.ok(sawTail); - }); - - test("Object equality", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Same symbol returned from same snapshot's checker - assert.strictEqual( - project.checker.getSymbolAtPosition("/src/index.ts", 9), - project.checker.getSymbolAtPosition("/src/index.ts", 10), - ); - }); - - test("Snapshot dispose", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - - // Snapshot dispose should release server-side resources - assert.ok(snapshot.isDisposed() === false); - snapshot.dispose(); - assert.ok(snapshot.isDisposed() === true); - - // After dispose, snapshot methods should throw - assert.throws(() => { - snapshot.getConfiguredProject("/tsconfig.json"); - }, { - name: "Error", - message: "Snapshot is disposed", - }); - }); -}); - -describe("Multiple snapshots", { concurrency }, () => { - test("two snapshots work independently", () => { - using api = spawnAPI(); - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Both can fetch source files - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.ok(sf2); - - // Disposing one doesn't break the other - snap1.dispose(); - assert.ok(snap1.isDisposed()); - assert.ok(!snap2.isDisposed()); - - // snap2 still works after snap1 is disposed - const symbol = snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - assert.equal(symbol.name, "foo"); - }); - - test("each snapshot has its own server-side lifecycle", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Verify initial state - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file and create a new snapshot with the change - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "changed";`); - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - - // snap2 should reflect the updated content - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = "changed";`); - - // snap1's source file should still have the original content - assert.equal(sf1.text, `export const foo = 42;`); - - snap1.dispose(); - - // snap2 still works independently after snap1 is disposed - const symbol = snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); - assert.ok(symbol); - - snap2.dispose(); - - // Both are disposed, new snapshot works fine with latest content - const snap3 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf3 = snap3.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf3); - assert.equal(sf3.text, `export const foo = "changed";`); - }); - - test("adding a new file is reflected in the next snapshot", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - - // Add a brand new file - fs.writeFile!(toRootedFilePath("/src/bar.ts", undefined), `export const bar = true;`); - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { created: ["/src/bar.ts"] }, - }); - - const sf = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); - assert.ok(sf); - assert.equal(sf.text, `export const bar = true;`); - - // Original snapshot shouldn't have the new file - const sfOld = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); - assert.equal(sfOld, undefined); - }); - - test("multiple sequential edits produce correct snapshots", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - api.createSnapshot({ openProject: "/tsconfig.json" }); - - const versions = [ - `export const foo = 1;`, - `export const foo = 2;`, - `export const foo = 3;`, - ]; - - for (const version of versions) { - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), version); - const snap = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf = snap.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf); - assert.equal(sf.text, version); - } - }); - - test("snapshot.update derives from its receiver and reconstructs unchanged projects", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/first/tsconfig.json": `{}`, - "/first/index.ts": `export const first = 1;`, - "/second/tsconfig.json": `{}`, - "/second/index.ts": `export const second = 1;`, - }); - using api = disposableAPI; - - const base = api.createSnapshot({ - openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], - }); - const baseFirst = base.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"); - const baseSecondProject = base.getConfiguredProject("/second/tsconfig.json")!; - - fs.writeFile!(toRootedFilePath("/first/index.ts", undefined), `export const first = 2;`); - const updated = base.update({ - fileNotifications: { changed: ["/first/index.ts"] }, - ensurePrograms: [base.getConfiguredProject("/first/tsconfig.json")!.id], - }); - - assert.equal(updated.getProjects().length, 2); - assert.notStrictEqual(updated.getConfiguredProject("/second/tsconfig.json"), baseSecondProject); - assert.equal((updated.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"))!.text, `export const first = 2;`); - assert.equal(baseFirst!.text, `export const first = 1;`); - }); - - test("snapshot.update preserves stable project ordering", () => { - using api = spawnAPI({ - "/a/tsconfig.json": `{}`, - "/a/index.ts": `export const a = 1;`, - "/z/tsconfig.json": `{}`, - "/z/index.ts": `export const z = 1;`, - }); - const base = api.createSnapshot({ openProjects: ["/z/tsconfig.json"] }); - const updated = base.update({ openProjects: ["/a/tsconfig.json"] }); - - assert.deepEqual(updated.getProjects().map(project => project.id), ["/a/tsconfig.json", "/z/tsconfig.json"]); - }); - - test("snapshot.update ensures all dirty programs", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/configured/tsconfig.json": `{}`, - "/configured/index.ts": `export const configured = 1;`, - "/inferred.ts": `export const inferred = 1;`, - "/synthetic.ts": `export const synthetic = 1;`, - }); - using api = disposableAPI; - - const created = api.createSnapshot({ - openProjects: ["/configured/tsconfig.json"], - openFiles: ["/inferred.ts", "/configured/index.ts"], - createPrograms: [{ - rootFiles: ["/synthetic.ts"], - compilerOptions: { noLib: true }, - }], - }); - assert.equal(created.getProjects().length, 3); - const configuredProjectId: ConfiguredProjectId = created.getConfiguredProject("/configured/tsconfig.json")!.id; - void configuredProjectId; - assert.strictEqual(created.operation.openedFiles![0].project, created.getProject(created.operation.openedFiles![0].project.id)); - assert.strictEqual(created.operation.openedFiles![1].project, created.getConfiguredProject("/configured/tsconfig.json")); - for (const project of created.getProjects()) { - assert.equal(project.dirty, false, `${project.id} should be ensured when opened or created`); - } - - fs.writeFile!(toRootedFilePath("/configured/index.ts", undefined), `export const configured = 2;`); - fs.writeFile!(toRootedFilePath("/inferred.ts", undefined), `export const inferred = 2;`); - fs.writeFile!(toRootedFilePath("/synthetic.ts", undefined), `export const synthetic = 2;`); - const dirty = created.update({ - fileNotifications: { changed: ["/configured/index.ts", "/inferred.ts", "/synthetic.ts"] }, - }); - assert.deepEqual(dirty.getProjects().map(project => project.dirty), [true, true, true]); - - const ensured = dirty.update({ ensurePrograms: true }); - assert.deepEqual(ensured.getProjects().map(project => project.dirty), [false, false, false]); - - const withOperationResults = ensured.update({ - openFiles: ["/inferred.ts"], - createPrograms: [{ - rootFiles: ["/synthetic.ts"], - compilerOptions: { noLib: true }, - }], - }); - const openedProject: Project = withOperationResults.operation.openedFiles[0].project; - const createdProgram: Program = withOperationResults.operation.createdPrograms[0]; - const openedFilesTuple: readonly [{ readonly project: Project; }] = withOperationResults.operation.openedFiles; - const createdProgramsTuple: readonly [Program] = withOperationResults.operation.createdPrograms; - void openedFilesTuple; - void createdProgramsTuple; - assert.strictEqual(withOperationResults.getProject(openedProject.id), openedProject); - assert.strictEqual(withOperationResults.getProgram(createdProgram.id), createdProgram); - }); -}); - -describe("Source file caching", { concurrency }, () => { - test("same file from same snapshot returns cached object", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sf1 = project.program.getSourceFile("/src/index.ts"); - const sf2 = project.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.strictEqual(sf1, sf2, "Same source file should be returned from cache"); - }); - - test("same file from two snapshots (same content) returns cached object", () => { - using api = spawnAPI(); - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); - // Fetch from snap1 first (populates cache), then snap2 (cache hit via hash) - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - assert.ok(sf2); - // Same content hash → cache hit → same object - assert.strictEqual(sf1, sf2, "Same file with same content should share cached object"); - }); - - test("modified file returns a different source file object", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file in the VFS - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 100;`); - - // Notify the server about the change - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = 100;`); - - // Different content → different object - assert.notStrictEqual(sf1, sf2, "Modified file should return a new source file object"); - }); - - test("unmodified file retains cached object across file change notification", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - - // Mutate a different file - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 999;`); - - // Notify the server about the change to foo.ts only - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/foo.ts"] }, - }); - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf2); - - // index.ts wasn't changed — should still get cached object - assert.strictEqual(sf1, sf2, "Unchanged file should return cached object across snapshots"); - }); - - test("disposing the source snapshot releases its cache entries", () => { - using api = spawnAPI(); - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - // Fetch from snap1 to populate cache - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf1); - - const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); - - snap1.dispose(); - - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); - assert.ok(sf2); - assert.notStrictEqual(sf1, sf2, "independent snapshots do not implicitly retain each other's cache entries"); - }); - - test("invalidateAll causes all files to be re-fetched", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(); - using api = disposableAPI; - - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 42;`); - - // Mutate the file - fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "hello";`); - - // Use invalidateAll to force re-fetch - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { invalidateAll: true }, - }); - const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); - assert.ok(sf2); - assert.equal(sf2.text, `export const foo = "hello";`); - assert.notStrictEqual(sf1, sf2, "invalidateAll should produce new source file objects"); - }); - - test("node handles from a cached source file should be valid in a new snapshot", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `function foo(x: number) {}\nfoo(42);`, - "/src/other.ts": `export const x = 1;`, - }); - using api = disposableAPI; - - // Snapshot 1: get a node and verify getContextualType works - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const proj1 = snap1.getConfiguredProject("/tsconfig.json")!; - - const sf1 = proj1.program.getSourceFile("/src/main.ts"); - assert.ok(sf1); - - let numLiteral: Expression | undefined; - sf1.forEachChild(function visit(node) { - if (isCallExpression(node)) numLiteral = node.arguments[0]; - node.forEachChild(visit); - }); - assert.ok(numLiteral, "should find the 42 argument"); - - const type1 = proj1.checker.getContextualType(numLiteral); - assert.ok(type1); - assert.ok(type1.flags & TypeFlags.Number); - - // Snapshot 2: change a different file - fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const x = 2;`); - const snap2 = api.createSnapshot({ - openProject: "/tsconfig.json", - fileNotifications: { changed: ["/src/other.ts"] }, - }); - const proj2 = snap2.getConfiguredProject("/tsconfig.json")!; - - // Active snapshots may share a content-addressed source file. - const sf2 = proj2.program.getSourceFile("/src/main.ts"); - assert.ok(sf2); - assert.strictEqual(sf1, sf2); - - let numLiteral2: Expression | undefined; - sf2.forEachChild(function visit(node) { - if (isCallExpression(node)) numLiteral2 = node.arguments[0]; - node.forEachChild(visit); - }); - assert.ok(numLiteral2, "should find the 42 argument"); - assert.strictEqual(numLiteral, numLiteral2); - - // A type from new snapshot should be resolved - const type2 = proj2.checker.getContextualType(numLiteral2); - assert.ok(type2); - assert.ok(type2.flags & TypeFlags.Number); - }); -}); - -describe("Snapshot disposal", { concurrency }, () => { - test("dispose is idempotent", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstDispose = snapshot.dispose(); - const secondDispose = snapshot.dispose(); - assert.strictEqual(firstDispose, secondDispose); - snapshot.dispose(); - assert.ok(snapshot.isDisposed()); - // Second dispose should not throw - snapshot.dispose(); - assert.ok(snapshot.isDisposed()); - }); - - test("api.close waits for disposal started by using", () => { - const api = spawnAPI(); - let snapshot: Snapshot; - { - using disposableSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - snapshot = disposableSnapshot; - } - assert.ok(snapshot.isDisposed()); - api.close(); - snapshot.dispose(); - }); - - test("api.close disposes all active snapshots", () => { - const api = spawnAPI(); - const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok(!snap1.isDisposed()); - assert.ok(!snap2.isDisposed()); - api.close(); - assert.ok(snap1.isDisposed()); - assert.ok(snap2.isDisposed()); - }); -}); - -describe("Source file cache keying across projects", { concurrency }, () => { - // Three projects share the same file (/src/shared.ts). - // The file sits inside a package.json scope with "type": "module". - // - // Project A: moduleResolution: bundler (auto detection, bundler doesn't - // trigger isFileForcedToBeModuleByFormat → file parsed as script) - // Project B: moduleResolution: bundler, moduleDetection: force - // (force → file parsed as module) - // Project C: moduleResolution: nodenext - // (nodenext + type:module → impliedNodeFormat ESNext → - // isFileForcedToBeModuleByFormat → file parsed as module) - // - // Expected: exactly two distinct source file objects are stored: - // - A gets one (script parse) - // - B and C share another (module parse) - const multiProjectFiles: Record = { - "/package.json": JSON.stringify({ type: "module" }), - "/src/shared.ts": `export const x = 1;`, - // Project A – bundler, auto detection (default) - "/projectA/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "bundler", - module: "esnext", - strict: true, - }, - files: ["../src/shared.ts"], - }), - // Project B – bundler, force module detection - "/projectB/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "bundler", - module: "esnext", - moduleDetection: "force", - strict: true, - }, - files: ["../src/shared.ts"], - }), - // Project C – nodenext (type:module → module) - "/projectC/tsconfig.json": JSON.stringify({ - compilerOptions: { - moduleResolution: "nodenext", - module: "nodenext", - strict: true, - }, - files: ["../src/shared.ts"], - }), - }; - - test("different parse modes produce separate cached objects; same parse modes share", () => { - using api = spawnAPI(multiProjectFiles); - - const snapshot = api.createSnapshot({ - openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json", "/projectC/tsconfig.json"], - }); - - const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; - const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; - const projectC = snapshot.getConfiguredProject("/projectC/tsconfig.json")!; - assert.ok(projectA, "projectA should exist"); - assert.ok(projectB, "projectB should exist"); - assert.ok(projectC, "projectC should exist"); - - // Fetch the shared file from each project - const sfA = projectA.program.getSourceFile("/src/shared.ts"); - const sfB = projectB.program.getSourceFile("/src/shared.ts"); - const sfC = projectC.program.getSourceFile("/src/shared.ts"); - assert.ok(sfA, "sfA should exist"); - assert.ok(sfB, "sfB should exist"); - assert.ok(sfC, "sfC should exist"); - - // A should differ from B and C (script vs module parse) - assert.notStrictEqual(sfA, sfB, "projectA (script) and projectB (module) should have different cached source files"); - assert.notStrictEqual(sfA, sfC, "projectA (script) and projectC (module) should have different cached source files"); - - // B and C should share the same cached object (both module parse, same content hash) - assert.strictEqual(sfB, sfC, "projectB and projectC (both module parse) should share the same cached source file"); - }); -}); - -describe("Checker - symbol identity across projects", { concurrency }, () => { - const sharedSymbolFiles = { - "/projectA/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), - "/projectB/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), - "/src/shared.ts": `export const sharedVar = 42;`, - }; - - test("getSymbolAtPosition returns same Symbol instance across projects", () => { - using api = spawnAPI(sharedSymbolFiles); - - const snapshot = api.createSnapshot({ - openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json"], - }); - - const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; - const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; - assert.ok(projectA, "projectA should exist"); - assert.ok(projectB, "projectB should exist"); - - const src = sharedSymbolFiles["/src/shared.ts"]; - const varPos = src.indexOf("sharedVar"); - - const symbolA = projectA.checker.getSymbolAtPosition("/src/shared.ts", varPos); - const symbolB = projectB.checker.getSymbolAtPosition("/src/shared.ts", varPos); - - assert.ok(symbolA, "symbolA should exist"); - assert.ok(symbolB, "symbolB should exist"); - assert.equal(symbolA.name, "sharedVar"); - assert.equal(symbolB.name, "sharedVar"); - - assert.strictEqual(symbolA, symbolB, "Same source symbol queried from two projects should be the same object"); - }); - - test("overlapping synthetic programs share Symbol instances", () => { - using api = spawnAPI({ - "/src/shared.ts": `export const sharedVar = 42;`, - }); - const snapshot = api.createSnapshot({ - createPrograms: [ - { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, - { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, - ], - }); - const [programA, programB] = snapshot.operation.createdPrograms; - const position = `export const sharedVar = 42;`.indexOf("sharedVar"); - - const symbolA = programA.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); - const symbolB = programB.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); - - assert.ok(symbolA); - assert.strictEqual(symbolA, symbolB); - }); -}); - -describe("Checker - types and signatures", { concurrency }, () => { - const checkerFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const x = 42; -export function add(a: number, b: number, ...rest: number[]): number { return a + b; } -export class MyClass { - value: string = ""; - getValue(): string { return this.value; } -} -`, - }; - - test("getTypeAtPosition", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const xPos = src.indexOf("x = 42"); - const type = project.checker.getTypeAtPosition("/src/main.ts", xPos); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NumberLiteral); - }); - - test("getTypeAtPosition batched", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const xPos = src.indexOf("x = 42"); - const addPos = src.indexOf("add("); - const types = project.checker.getTypeAtPosition("/src/main.ts", [xPos, addPos]); - assert.equal(types.length, 2); - assert.ok(types[0]); - assert.ok(types[1]); - }); - - test("getTypeAtLocation", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const firstVarDecl = sourceFile.statements[2]; // "export const x" - assert.ok(firstVarDecl); - const type = project.checker.getTypeAtLocation(firstVarDecl); - assert.ok(type); - }); - - test("getTypeAtLocation returns property type for parenthesized and chained access (issue #3938)", () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -interface A { - a: number; - b: { c: number }; -} -const obj: A = { a: 1, b: { c: 2 } }; -const a1 = obj.a; -const a2 = (obj).a; -const c = obj.b.c; -`, - }; - - using api = spawnAPI(files); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const targetNodes = new Map(); - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.PropertyAccessExpression) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text === "obj.a" || text === "(obj).a" || text === "obj.b.c") { - targetNodes.set(text, node); - } - } - node.forEachChild(visit); - }); - - assert.equal(targetNodes.size, 3, "Should find all target property access expressions"); - for (const expr of ["obj.a", "(obj).a", "obj.b.c"] as const) { - const node = targetNodes.get(expr); - assert.ok(node, `Should find expression '${expr}'`); - const type = project.checker.getTypeAtLocation(node); - assert.ok(type, `Should get a type for '${expr}'`); - assert.ok(type.flags & TypeFlags.Number, `Expected '${expr}' to have number type flags, got ${type.flags}`); - } - }); - - test("getTypeAtLocation returns call result type for private method call (issue #4041)", () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), - "/src/main.ts": ` -type Result = { readonly value: string }; - -export class Cache { - run(): Result { - return this.#buildCapabilities(); - } - - #buildCapabilities(): Result { - return { value: "ok" }; - } -} -`, - }; - - using api = spawnAPI(files); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - let callNode: import("@typescript/typescript/unstable/ast").CallExpression | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text === "this.#buildCapabilities()") { - callNode = node; - } - } - node.forEachChild(visit); - }); - - assert.ok(callNode, "Should find private method call expression"); - const callType = project.checker.getTypeAtLocation(callNode); - const calleeType = project.checker.getTypeAtLocation(callNode.expression); - assert.ok(callType, "Should get type for call expression"); - assert.ok(calleeType, "Should get type for callee expression"); - - const callSignatures = project.checker.getSignaturesOfType(calleeType, SignatureKind.Call); - assert.ok(callSignatures.length > 0, "Callee should be callable"); - const returnType = project.checker.getReturnTypeOfSignature(callSignatures[0]); - assert.ok(returnType, "Should get return type for private method call"); - const callExprSignatures = project.checker.getSignaturesOfType(callType, SignatureKind.Call); - - assert.ok(callType.flags & TypeFlags.Object, `Expected call expression type to be object-like, got ${callType.flags}`); - assert.ok(returnType.flags & TypeFlags.Object, `Expected return type to be object-like, got ${returnType.flags}`); - assert.equal(callType.flags, returnType.flags, "Call expression type should have same flags as method return type"); - assert.equal(callExprSignatures.length, 0, "Call expression result type should not itself be callable"); - }); - - test("getSignaturesOfType - call signatures", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const addPos = src.indexOf("add("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", addPos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length > 0); - const sig = callSigs[0]; - const typeCallSigs = type.getCallSignatures(); - assert.deepEqual(typeCallSigs, callSigs); - assert.ok((sig.getReturnType()).flags & TypeFlags.Number); - assert.ok((sig.getTypeParameterAtPosition(0)).flags & TypeFlags.Number); - assert.ok(sig.id); - assert.ok(sig.parameters.length >= 2); - assert.ok(sig.hasRestParameter); - assert.ok(!sig.isConstruct); - assert.ok(!sig.isAbstract); - }); - - test("getApparentProperties includes CallableFunction members", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - const propertyNames = (type.getApparentProperties()).map(property => property.name); - assert.ok(propertyNames.includes("apply")); - assert.ok(propertyNames.includes("call")); - assert.ok(propertyNames.includes("bind")); - }); - - test("checker and object methods share cached results", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem(checkerFiles), - collectTiming: true, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - let signature: Signature | undefined; - - function assertOneRequest(callback: () => void) { - api.resetTimingInfo(); - callback(); - assert.equal((api.getTimingInfo()).totals.requestCount, 1); - } - - assertOneRequest(() => { - const properties = type.getProperties(); - assert.strictEqual(project.checker.getPropertiesOfType(type), properties); - }); - assertOneRequest(() => { - const signatures = type.getCallSignatures(); - assert.strictEqual(project.checker.getSignaturesOfType(type, SignatureKind.Call), signatures); - signature = signatures[0]; - }); - assertOneRequest(() => { - const nonNullable = project.checker.getNonNullableType(type); - assert.strictEqual(type.getNonNullableType(), nonNullable); - }); - assertOneRequest(() => { - const apparentType = type.getApparentType(); - assert.strictEqual(project.checker.getApparentType(type), apparentType); - }); - assertOneRequest(() => { - const indexInfos = type.getIndexInfos(); - assert.strictEqual(project.checker.getIndexInfosOfType(type), indexInfos); - }); - assertOneRequest(() => { - assert.ok(signature); - const returnType = project.checker.getReturnTypeOfSignature(signature); - assert.strictEqual(signature.getReturnType(), returnType); - }); - }); - - test("getSignaturesOfType - construct signatures", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const classPos = src.indexOf("MyClass"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", classPos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const constructSigs = project.checker.getSignaturesOfType(type, SignatureKind.Construct); - assert.ok(constructSigs.length > 0); - const sig = constructSigs[0]; - assert.ok(sig.isConstruct); - }); - - test("Signature declaration can be resolved", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const addPos = src.indexOf("add("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", addPos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length > 0); - const sig = callSigs[0]; - assert.ok(sig.declaration); - assert.ok(isSignatureDeclaration.Handle(sig.declaration)); - const node = sig.declaration.resolve(project); - assert.ok(node); - assert.ok(node.parameters); - assert.ok(isSignatureDeclaration(node)); - // The handle remembers its canonical project, so resolve() works without an argument. - const nodeFromCanonical = sig.declaration.resolve(); - assert.ok(nodeFromCanonical); - assert.ok(nodeFromCanonical.parameters); - assert.ok(isSignatureDeclaration(nodeFromCanonical)); - assert.strictEqual(nodeFromCanonical.kind, node.kind); - - const methodPos = src.indexOf("getValue"); - const methodSymbol = project.checker.getSymbolAtPosition("/src/main.ts", methodPos); - assert.ok(methodSymbol); - assert.ok(methodSymbol.valueDeclaration); - const methodNode = methodSymbol.valueDeclaration.resolve(project); - assert.ok(methodNode); - assert.strictEqual(methodNode.parent.kind, SyntaxKind.ClassDeclaration); - assert.strictEqual(methodNode.parent.parent.kind, SyntaxKind.SourceFile); - // A symbol's declaration handles default to the symbol's canonical project. - const methodNodeFromCanonical = methodSymbol.valueDeclaration.resolve(); - assert.ok(methodNodeFromCanonical); - assert.strictEqual(methodNodeFromCanonical.kind, methodNode.kind); - }); - - test("getSignaturesOfType - signature type parameters", () => { - const mainFile = ` - interface Operator { - } - export declare class Observable { - lift(operator: Operator): Observable; - } - `; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": mainFile, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const liftPos = mainFile.indexOf("lift"); - const type = project.checker.getTypeAtPosition("/src/main.ts", liftPos); - assert.ok(type); - const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(callSigs.length === 1, "should have exactly one call signature, found: " + callSigs.length); - const sig = callSigs[0]; - assert.ok(sig.typeParameters?.length === 1, "should have exactly one type parameter, found: " + sig.typeParameters?.length); - const typeParams = sig.getTypeParameters(); - const typeParam = typeParams[0]; - assert.ok(typeParam, "should have type parameter"); - const name = (typeParam.getSymbol())?.name; - assert.ok(name === "R", "should be named R, instead: " + name); - assert.ok(typeParam.flags & TypeFlags.TypeParameter, "should be a type parameter, instead flags: " + typeParam.flags); - }); - - test("Signature.getParameters() returns parameter symbols with correct names", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const params = sigs[0].getParameters(); - assert.equal(params.length, 3); - assert.equal(params[0].name, "a"); - assert.equal(params[1].name, "b"); - assert.equal(params[2].name, "rest"); - assert.ok(params[0].flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable on 'a', got ${params[0].flags}`); - }); - - test("Signature.getThisParameter() returns undefined when no explicit this parameter", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const thisParam = sigs[0].getThisParameter(); - assert.strictEqual(thisParam, undefined, "add() has no explicit this parameter"); - }); - - test("Signature.getThisParameter() returns symbol for explicit this parameter", () => { - const src = `export function foo(this: { n: number }, x: string): void {}`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("foo(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const thisParam = sigs[0].getThisParameter(); - assert.ok(thisParam, "foo has an explicit this parameter"); - assert.equal(thisParam.name, "this"); - assert.ok(thisParam.flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable, got ${thisParam.flags}`); - }); - - test("Signature.getTarget() returns undefined for a non-instantiated signature", () => { - using api = spawnAPI(checkerFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = checkerFiles["/src/main.ts"]; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const target = sigs[0].getTarget(); - assert.strictEqual(target, undefined, "add() is not an instantiated signature"); - }); - - test("Signature.getTarget() returns the generic source signature for an instantiated call", () => { - const src = ` - function identity(x: T): T { return x; } - identity("hello"); - `; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let callNode: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) callNode = node; - node.forEachChild(visit); - }); - assert.ok(callNode, "should find a call expression"); - const sig = project.checker.getResolvedSignature(callNode); - assert.ok(sig, "should resolve a signature for the call"); - assert.ok(sig.target !== undefined, "instantiated call should have a target ID"); - const target = sig.getTarget(); - assert.ok(target, "getTarget() should return the generic signature"); - assert.ok(target.typeParameters && target.typeParameters.length > 0, "target should have type parameters"); - }); -}); - -describe("Symbol - parent, members, exports", { concurrency }, () => { - const symbolFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/mod.ts": ` -export class Animal { - name: string = ""; - speak(): void {} -} -export const value = 1; -`, - }; - - test("getMembers returns class members", () => { - using api = spawnAPI(symbolFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = symbolFiles["/src/mod.ts"]; - const animalPos = src.indexOf("Animal"); - const symbol = project.checker.getSymbolAtPosition("/src/mod.ts", animalPos); - assert.ok(symbol); - const members = symbol.getMembers(); - assert.ok(members.size > 0); - const memberNames = [...members.values()].map(m => m.name); - assert.ok(memberNames.includes("name"), "should have 'name' member"); - assert.ok(memberNames.includes("speak"), "should have 'speak' member"); - }); - - test("getExports returns module exports via sourceFile symbol", () => { - using api = spawnAPI(symbolFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/mod.ts"); - assert.ok(sourceFile); - const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const exports = moduleSymbol.getExports(); - assert.ok(exports.size > 0); - const exportNames = [...exports.values()].map(e => e.name); - assert.ok(exportNames.includes("Animal"), "should export Animal"); - assert.ok(exportNames.includes("value"), "should export value"); - }); - - test("getParent returns containing symbol", () => { - using api = spawnAPI(symbolFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = symbolFiles["/src/mod.ts"]; - const namePos = src.indexOf("name:"); - const nameSymbol = project.checker.getSymbolAtPosition("/src/mod.ts", namePos); - assert.ok(nameSymbol); - assert.equal(nameSymbol.name, "name"); - const parent = nameSymbol.getParent(); - assert.ok(parent); - assert.equal(parent.name, "Animal"); - }); - - test("checkFlags is typed as CheckFlags", () => { - using api = spawnAPI(symbolFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(symbol); - const checkFlags: CheckFlags = symbol.checkFlags; - assert.equal(checkFlags & CheckFlags.Readonly, 0); - }); - - test("binder symbols are shared by file before the AST is fetched", () => { - using api = spawnAPI(symbolFiles, { collectTiming: true }); - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - const secondSnapshot = firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - const position = symbolFiles["/src/mod.ts"].indexOf("Animal"); - - api.resetTimingInfo(); - const first = firstProject.checker.getSymbolAtPosition("/src/mod.ts", position); - const second = secondProject.checker.getSymbolAtPosition("/src/mod.ts", position); - assert.ok(first); - assert.strictEqual(second, first); - assert.equal((api.getTimingInfo()).totals.sourceFilesFetched, 0); - - const declaration = first.declarations[0].resolve(secondProject); - assert.ok(declaration); - assert.equal(declaration.getSourceFile().fileName, "/src/mod.ts"); - assert.equal((api.getTimingInfo()).totals.sourceFilesFetched, 1); - assert.equal((getSymbol(cast(declaration, isClassDeclaration)))?.name, "Animal"); - }); - - test("file-owned symbol properties do not require a snapshot or project", () => { - using api = spawnAPI(symbolFiles); - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/mod.ts"); - assert.ok(sourceFile); - using retained = api.retainSourceFile(sourceFile); - const animal = project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - const storage = animal["storage"]; - assert.ok("owner" in storage); - assert.strictEqual(storage.owner.api, api); - assert.deepEqual(Object.keys(storage.owner).sort(), ["api", "record"]); - - snapshot.dispose(); - const members = animal.getMembers(); - assert.deepEqual([...members.values()].map(symbol => symbol.name), ["name", "speak"]); - assert.strictEqual(members.get("name" as __String)?.getParent(), animal); - }); - - test("checker-created merged symbols remain snapshot-owned", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/a.ts", "/src/b.ts"] }), - "/src/a.ts": `namespace Merged { export const a = 1; }`, - "/src/b.ts": `namespace Merged { export const b = 1; }`, - }); - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - const secondSnapshot = firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - - const first = firstProject.checker.getSymbolAtPosition("/src/a.ts", 10); - const second = secondProject.checker.getSymbolAtPosition("/src/a.ts", 10); - assert.ok(first); - assert.ok(second); - assert.notStrictEqual(second, first); - }); - - test("checker symbol methods merge declarations and parents in their project", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ files: ["/src/a.ts", "/src/b.ts"] }), - "/single/tsconfig.json": JSON.stringify({ files: ["/src/a.ts"] }), - "/src/a.ts": "namespace Merged { export const a = 1; }", - "/src/b.ts": "namespace Merged { export const b = 1; }", - }); - const snapshot = api.createSnapshot({ openProjects: ["/tsconfig.json", "/single/tsconfig.json"] }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const singleProject = snapshot.getConfiguredProject("/single/tsconfig.json")!; - const fileA = project.program.getSourceFile("/src/a.ts"); - const fileB = project.program.getSourceFile("/src/b.ts"); - assert.ok(fileA && fileB); - const declarationA = cast(fileA.statements[0], isModuleDeclaration); - const declarationB = cast(fileB.statements[0], isModuleDeclaration); - const rawA = getSymbol(declarationA); - const rawB = getSymbol(declarationB); - assert.notStrictEqual(rawA, rawB); - - const merged = project.checker.getSymbolOfDeclaration(declarationA); - assert.strictEqual(project.checker.getSymbolOfDeclaration(declarationB), merged); - assert.strictEqual(project.checker.getSymbolOfNode(declarationA), merged); - assert.strictEqual(project.checker.getMergedSymbol(rawA), merged); - assert.strictEqual(project.checker.getMergedSymbol(rawB), merged); - assert.strictEqual(project.checker.getMergedSymbol(merged), merged); - assert.strictEqual(singleProject.checker.getMergedSymbol(rawA), rawA); - assert.strictEqual(singleProject.checker.getSymbolOfDeclaration(declarationA), rawA); - assert.equal(project.checker.getSymbolOfNode(declarationA.name), undefined); - assert.equal(project.checker.getSymbolOfNode(fileA), undefined); - assert.equal(project.checker.getParentOfSymbol(merged), undefined); - - const member = (rawA.getExports()).get("a" as __String); - assert.ok(member); - assert.strictEqual(member.getParent(), rawA); - assert.strictEqual(project.checker.getParentOfSymbol(member), merged); - assert.strictEqual(singleProject.checker.getParentOfSymbol(member), rawA); - }); - - test("checker symbol methods late-bind computed members", () => { - using api = spawnAPI({ - "/src/computed.ts": "declare const key: unique symbol;\nclass Container { [key] = 1; ordinary = 2; }\nimport {} from './missing';", - }); - const snapshot = api.createSnapshot({ openFiles: ["/src/computed.ts"] }); - const project = snapshot.getProjects()[0]; - const file = project.program.getSourceFile("/src/computed.ts"); - assert.ok(file); - const declaration = cast(file.statements[1], isClassDeclaration); - const memberDeclaration = cast(declaration.members[0], isPropertyDeclaration); - const raw = getSymbol(memberDeclaration); - const lateBound = project.checker.getSymbolOfDeclaration(memberDeclaration); - assert.notStrictEqual(lateBound, raw); - assert.strictEqual(project.checker.getSymbolOfNode(memberDeclaration), lateBound); - const container = project.checker.getSymbolOfDeclaration(declaration); - assert.strictEqual(project.checker.getParentOfSymbol(lateBound), container); - const type = project.checker.getDeclaredTypeOfSymbol(container); - const property = (type.getProperties()).find(symbol => symbol.escapedName === lateBound.escapedName); - assert.ok(property); - assert.strictEqual(project.checker.getTargetSymbol(property), lateBound); - const ordinary = cast(declaration.members[1], isPropertyDeclaration); - assert.strictEqual(project.checker.getSymbolOfDeclaration(ordinary), getSymbol(ordinary)); - assert.equal(project.checker.getSymbolOfNode(file.statements[2]), undefined); - }); - - test("snapshot-owned symbols resolve cached file-owned parents", () => { - const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), - "/src/box.ts": source, - }, { collectTiming: true }); - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const box = project.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); - assert.ok(box); - const boxType = project.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); - assert.ok(boxType); - const [value] = boxType.getProperties(); - assert.ok(value); - assert.ok(value.checkFlags & CheckFlags.Instantiated); - - api.resetTimingInfo(); - assert.strictEqual(value.getParent(), box); - assert.equal((api.getTimingInfo()).totals.requestCount, 0); - }); - - test("compact symbol references retain reused file-owned symbols", () => { - const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), - "/src/box.ts": source, - }); - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - // Create the second snapshot before the first symbol response populates - // the client cache. This ensures its registry has no direct retain on - // the record that will be discovered through the compact reference. - const secondSnapshot = firstSnapshot.update({}); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - - const box = firstProject.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); - assert.ok(box); - const boxType = secondProject.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); - assert.ok(boxType); - const [value] = boxType.getProperties(); - assert.ok(value); - assert.ok(value.checkFlags & CheckFlags.Instantiated); - - // The instantiated property belongs to the second snapshot, but its - // compact parent reference finds `box` in the record retained only by - // the first snapshot. Resolving the reference borrows the wrapper into - // the second registry and must retain its record for that registry's - // lifetime. - const boxFromSecondSnapshot = value.getParent(); - assert.strictEqual(boxFromSecondSnapshot, box); - firstSnapshot.dispose(); - - // If the compact lookup did not establish ownership, disposing the - // first snapshot evicts the record. The next lookup then interns a new - // wrapper for the same binder symbol instead of returning the wrapper - // already obtained through the still-live second snapshot. - const parentAfterDisposal = value.getParent(); - secondSnapshot.dispose(); - assert.strictEqual(parentAfterDisposal, boxFromSecondSnapshot); - assert.throws(() => value.getParent(), /Project object registry is disposed/); - }); - - test("file-owned declarations resolve without the snapshot that observed them", () => { - using api = spawnAPI(symbolFiles); - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; - // Keeps the server AST alive after the observing snapshot is disposed. - using _secondSnapshot = firstSnapshot.update({}); - const animal = firstProject.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - firstSnapshot.dispose(); - - const declaration = animal.declarations[0].resolve(); - assert.ok(declaration && isClassDeclaration(declaration)); - assert.equal(declaration.name?.text, "Animal"); - }); - - test("file-owned symbols are accepted by later checkers while their file is unchanged", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...symbolFiles, "/src/other.ts": `export const other = 1;` }); - using api = disposableAPI; - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const animal = firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - - fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const other = 2;`); - const secondSnapshot = api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/other.ts"] } }); - const type = secondSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getTypeOfSymbol(animal); - assert.ok(type); - assert.strictEqual(type.getSymbol(), animal); - }); - - test("file-owned symbols are rejected by checkers whose program has a different version of their file", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS(symbolFiles); - using api = disposableAPI; - const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const animal = firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); - assert.ok(animal); - - fs.writeFile!(toRootedFilePath("/src/mod.ts", undefined), `${symbolFiles["/src/mod.ts"]}\nexport const added = 2;`); - const secondSnapshot = api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/mod.ts"] } }); - const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; - assert.throws(() => secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); - }); -}); - -describe("Type - getSymbol", { concurrency }, () => { - test("getSymbol returns the symbol of a type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/types.ts": ` -export class Foo { - x: number = 0; -} -export const instance: Foo = new Foo(); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Foo {\n x: number = 0;\n}\nexport const instance: Foo = new Foo();\n`; - const instancePos = src.indexOf("instance"); - const symbol = project.checker.getSymbolAtPosition("/src/types.ts", instancePos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeSymbol = type.getSymbol(); - assert.ok(typeSymbol); - assert.equal(typeSymbol.name, "Foo"); - const fooSymbol = project.checker.getSymbolAtPosition("/src/types.ts", src.indexOf("Foo")); - assert.strictEqual(typeSymbol, fooSymbol); - }); -}); - -describe("Type - sub-property fetchers", { concurrency }, () => { - const typeFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), - "/src/types.ts": ` -export const arr: Array = [1, 2, 3]; -export const union: string | number = "hello"; -export const intersection: { a: number } & { b: string } = { a: 1, b: "hi" }; -export type KeyOf = keyof T; -export type Lookup = T[K]; -export type Cond = T extends string ? "yes" : "no"; -export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; -export type MappedUnion = Mapped | string; -export const tpl: \`hello \${string}\` = "hello world"; -export type Upper = Uppercase<"hello">; -export const tuple: readonly [number, string?, ...boolean[]] = [1]; -`, - }; - - function getTypeAtName(api: API, name: string) { - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = typeFiles["/src/types.ts"]; - const pos = src.indexOf(name); - assert.ok(pos >= 0, `Could not find "${name}" in source`); - const symbol = project.checker.getSymbolAtPosition("/src/types.ts", pos); - assert.ok(symbol, `No symbol found at "${name}"`); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type, `No type found for symbol "${name}"`); - return { type, project, snapshot, api }; - } - - test("TypeReference.getTarget() returns the generic target", () => { - const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "arr:"); - using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Object); - const ref = type as TypeReference; - assert.ok(ref.objectFlags & ObjectFlags.Reference); - assert.equal(type.isObjectType(), true); - assert.equal(type.isTypeReference(), true); - assert.equal(type.isLiteralType(), false); - const target = ref.getTarget(); - assert.ok(target); - assert.ok(target.flags & TypeFlags.Object); - const typeParameters = target.getTypeParameters(); - assert.ok(typeParameters); - assert.equal(typeParameters.length, 1); - const properties = type.getProperties(); - assert.ok(properties.some(property => property.name === "length")); - assert.equal((type.getProperty("length"))?.name, "length"); - assert.ok((type.getApparentProperties()).length >= properties.length); - assert.strictEqual(type.getNonNullableType(), type); - }); - - test("UnionOrIntersectionType.getTypes() returns union members", () => { - const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "union:"); - using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Union); - const union = type as UnionOrIntersectionType; - const types = union.getTypes(); - assert.ok(types.length >= 2); - assert.strictEqual(union.getTypes(), types); - assert.equal(type.isUnionType(), true); - assert.equal(type.isIntersectionType(), false); - }); - - test("UnionOrIntersectionType.getTypes() returns intersection members", () => { - const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "intersection:"); - using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.Intersection); - const inter = type as UnionOrIntersectionType; - const types = inter.getTypes(); - assert.ok(types.length >= 2); - }); - - test("UnionOrIntersectionType.getTypes() on a wrongly-cast type returns undefined without hitting the server", () => { - const src = `export const s: string = ""; export const u: string | number = "";`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // `string` is neither a union/intersection nor a template literal type, - // so it has no constituent types. The client guards on the type's flags - // and returns undefined without ever sending a request the server cannot satisfy. - const sSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); - assert.ok(sSymbol); - const sType = project.checker.getTypeOfSymbol(sSymbol); - assert.ok(sType); - assert.equal((sType as unknown as UnionOrIntersectionType).getTypes(), undefined); - - // A real union still returns its constituents. - const uSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("u:")); - assert.ok(uSymbol); - const uType = project.checker.getTypeOfSymbol(uSymbol); - assert.ok(uType); - assert.equal(((uType as UnionOrIntersectionType).getTypes()).length, 2); - }); - - test("IndexType.getTarget() returns the target type", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("KeyOf", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - // KeyOf = keyof T — this is an IndexType - assert.ok(type.flags & TypeFlags.Index, `Expected IndexType, got flags ${type.flags}`); - const indexType = type as IndexType; - const target = indexType.getTarget(); - assert.ok(target); - }); - - test("IndexedAccessType.getObjectType() and getIndexType()", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("Lookup", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.IndexedAccess, `Expected IndexedAccessType, got flags ${type.flags}`); - const ia = type as IndexedAccessType; - assert.equal(type.isIndexedAccessType(), true); - const objectType = ia.getObjectType(); - assert.ok(objectType); - const indexType = ia.getIndexType(); - assert.ok(indexType); - }); - - test("ConditionalType.getCheckType() and getExtendsType()", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); - const cond = type as ConditionalType; - assert.equal(type.isConditionalType(), true); - const checkType = cond.getCheckType(); - assert.ok(checkType); - const extendsType = cond.getExtendsType(); - assert.ok(extendsType); - }); - - test("ConditionalType.getTrueType() and getFalseType()", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); - - const trueType = (type as ConditionalType).getTrueType(); - assert.ok(trueType, "should return the true-branch type"); - assert.ok(trueType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for true branch, got flags ${trueType.flags}`); - assert.equal((trueType as LiteralType).value, "yes"); - - const falseType = (type as ConditionalType).getFalseType(); - assert.ok(falseType, "should return the false-branch type"); - assert.ok(falseType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for false branch, got flags ${falseType.flags}`); - assert.equal((falseType as LiteralType).value, "no"); - }); - - test("MappedType exposes its component types", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("Mapped", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(type.isMappedType(), true); - const mapped = type as MappedType; - assert.ok((mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); - assert.ok(mapped.getConstraintType()); - assert.ok(mapped.getNameType()); - assert.ok(mapped.getTemplateType()); - }); - - test("MappedType returned as a union constituent exposes its component types", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.resolveName("MappedUnion", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); - assert.ok(symbol); - const union = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(union); - const mapped = ((union as UnionOrIntersectionType).getTypes()).find(type => type.isMappedType()); - assert.ok(mapped); - assert.ok((mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); - assert.ok(mapped.getConstraintType()); - assert.ok(mapped.getNameType()); - assert.ok(mapped.getTemplateType()); - }); - - test("TemplateLiteralType.texts and getTypes()", () => { - const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "tpl:"); - using api = disposableAPI; - - assert.ok(type.flags & TypeFlags.TemplateLiteral, `Expected TemplateLiteralType, got flags ${type.flags}`); - const tpl = type as TemplateLiteralType; - assert.ok(tpl.texts); - assert.ok(tpl.texts.length >= 2); - assert.equal(tpl.texts[0], "hello "); - const types = tpl.getTypes(); - assert.ok(types.length >= 1); - }); - - test("StringMappingType.getTarget() returns the mapped type", () => { - using api = spawnAPI(typeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = typeFiles["/src/types.ts"]; - const pos = src.indexOf("Upper"); - const symbol = project.checker.getSymbolAtPosition("/src/types.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - // Uppercase<"hello"> may resolve to a StringMappingType or a string literal - if (type.flags & TypeFlags.StringMapping) { - const sm = type as StringMappingType; - const target = sm.getTarget(); - assert.ok(target); - } - // If it resolved to "HELLO" literal, that's fine too — it means eager evaluation - }); - - test("tuple metadata is owned by tuple targets", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare function empty(value: readonly []): void; -declare function nonempty(value: readonly [number]): void; -declare function array(value: readonly number[]): void; -empty([]); -nonempty([1]); -array([]); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const arrayLiterals: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ArrayLiteralExpression) { - arrayLiterals.push(node); - } - node.forEachChild(visit); - }); - assert.equal(arrayLiterals.length, 3); - - for (const [index, expectedFixedLength] of [0, 1].entries()) { - const type = project.checker.getTypeAtLocation(arrayLiterals[index]); - assert.equal(project.checker.isTupleType(type), true); - assert.equal(project.checker.isTupleTypeTarget(type), false); - assert.equal(type.isTupleType(), true); - assert.equal(type.isTupleTypeTarget(), false); - assert.ok(type.isTupleType()); - assert.equal(Reflect.get(type, "fixedLength"), undefined); - - const target = type.getTarget(); - assert.ok(target.objectFlags & ObjectFlags.Tuple); - assert.equal(project.checker.isTupleType(target), true); - assert.equal(project.checker.isTupleTypeTarget(target), true); - assert.equal(target.isTupleType(), true); - assert.equal(target.isTupleTypeTarget(), true); - assert.ok(target.isTupleTypeTarget()); - assert.equal(target.fixedLength, expectedFixedLength); - assert.equal(target.elementFlags.length, expectedFixedLength); - assert.equal(target.readonly, false); - } - - const arrayType = project.checker.getTypeAtLocation(arrayLiterals[2]); - assert.equal(project.checker.isTupleType(arrayType), false); - assert.equal(project.checker.isTupleTypeTarget(arrayType), false); - assert.equal(arrayType.isTupleType(), false); - assert.equal(arrayType.isTupleTypeTarget(), false); - }); - - test("tuple targets expose labeled element declarations", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export function gh1449(a: T): T { - return a; -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const functionDeclaration = sourceFile.statements.find(isFunctionDeclaration); - assert.ok(functionDeclaration); - const constraint = functionDeclaration.typeParameters?.[0].constraint; - assert.ok(constraint); - - const type = project.checker.getTypeFromTypeNode(constraint); - assert.ok(type.isTupleType()); - const target = type.getTarget(); - const declarations = target.labeledElementDeclarations; - assert.ok(declarations); - assert.equal(declarations.length, 2); - - const names: string[] = []; - for (const handle of declarations) { - assert.ok(handle); - assert.equal(handle.kind, SyntaxKind.NamedTupleMember); - const declaration = handle.resolve(); - assert.ok(declaration); - assert.ok(isIdentifier(declaration.name)); - names.push(declaration.name.text); - } - assert.deepEqual(names, ["foo", "bar"]); - }); -}); - -describe("Checker - intrinsic type getters", { concurrency }, () => { - const intrinsicFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = 1;`, - }; - - test("getAnyType returns a type with Any flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getAnyType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Any); - }); - - test("getStringType returns a type with String flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getStringType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.String); - }); - - test("getNumberType returns a type with Number flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getNumberType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Number); - }); - - test("getBooleanType returns a type with Boolean flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getBooleanType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Boolean); - }); - - test("getVoidType returns a type with Void flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getVoidType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Void); - }); - - test("getUndefinedType returns a type with Undefined flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getUndefinedType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Undefined); - }); - - test("getNullType returns a type with Null flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getNullType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Null); - }); - - test("getNeverType returns a type with Never flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getNeverType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Never); - }); - - test("getUnknownType returns a type with Unknown flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getUnknownType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Unknown); - }); - - test("getBigIntType returns a type with BigInt flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getBigIntType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.BigInt); - }); - - test("getESSymbolType returns a type with ESSymbol flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getESSymbolType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.ESSymbol); - }); - - test("getNonPrimitiveType returns a type with NonPrimitive flag", () => { - using api = spawnAPI(intrinsicFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const type = project.checker.getNonPrimitiveType(); - assert.ok(type); - assert.ok(type.flags & TypeFlags.NonPrimitive); - }); -}); - -describe("Checker - multi-project type ID uniqueness", { concurrency }, () => { - test("intrinsic types from 3 projects in the same snapshot have non-colliding IDs", () => { - using api = spawnAPI({ - "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj1/src/index.ts": `export const x = 1;`, - "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj2/src/index.ts": `export const y = "hello";`, - "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj3/src/index.ts": `export const z = true;`, - }); - - const snapshot = api.createSnapshot({ - openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], - }); - - const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; - const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; - const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; - assert.ok(proj1, "proj1 should be in final snapshot"); - assert.ok(proj2, "proj2 should be in final snapshot"); - assert.ok(proj3, "proj3 should be in final snapshot"); - - // Fetch several intrinsic types from each checker. - // If type IDs collide across checkers, registerType panics → API error. - const num1 = proj1.checker.getNumberType(); - const str1 = proj1.checker.getStringType(); - const bool1 = proj1.checker.getBooleanType(); - const any1 = proj1.checker.getAnyType(); - const num2 = proj2.checker.getNumberType(); - const str2 = proj2.checker.getStringType(); - const bool2 = proj2.checker.getBooleanType(); - const any2 = proj2.checker.getAnyType(); - const num3 = proj3.checker.getNumberType(); - const str3 = proj3.checker.getStringType(); - const bool3 = proj3.checker.getBooleanType(); - const any3 = proj3.checker.getAnyType(); - - assert.ok(num1.flags & TypeFlags.Number, "proj1 number type"); - assert.ok(str1.flags & TypeFlags.String, "proj1 string type"); - assert.ok(bool1.flags & TypeFlags.Boolean, "proj1 boolean type"); - assert.ok(any1.flags & TypeFlags.Any, "proj1 any type"); - - assert.ok(num2.flags & TypeFlags.Number, "proj2 number type"); - assert.ok(str2.flags & TypeFlags.String, "proj2 string type"); - assert.ok(bool2.flags & TypeFlags.Boolean, "proj2 boolean type"); - assert.ok(any2.flags & TypeFlags.Any, "proj2 any type"); - - assert.ok(num3.flags & TypeFlags.Number, "proj3 number type"); - assert.ok(str3.flags & TypeFlags.String, "proj3 string type"); - assert.ok(bool3.flags & TypeFlags.Boolean, "proj3 boolean type"); - assert.ok(any3.flags & TypeFlags.Any, "proj3 any type"); - }); - - test("symbol and signature handles from 3 projects in the same snapshot have non-colliding IDs", () => { - using api = spawnAPI({ - "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj1/src/index.ts": `export function add(a: number, b: number): number { return a + b; }`, - "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj2/src/index.ts": `export function greet(name: string): string { return "hello " + name; }`, - "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/proj3/src/index.ts": `export function toggle(b: boolean): boolean { return !b; }`, - }); - - const snapshot = api.createSnapshot({ - openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], - }); - - const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; - const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; - const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; - - // Get a symbol from each project (exercises symbol registry) - const src1 = `export function add(a: number, b: number): number { return a + b; }`; - const src2 = `export function greet(name: string): string { return "hello " + name; }`; - const src3 = `export function toggle(b: boolean): boolean { return !b; }`; - - const sym1 = proj1.checker.getSymbolAtPosition("/proj1/src/index.ts", src1.indexOf("add")); - const sym2 = proj2.checker.getSymbolAtPosition("/proj2/src/index.ts", src2.indexOf("greet")); - const sym3 = proj3.checker.getSymbolAtPosition("/proj3/src/index.ts", src3.indexOf("toggle")); - assert.ok(sym1, "proj1 symbol"); - assert.ok(sym2, "proj2 symbol"); - assert.ok(sym3, "proj3 symbol"); - assert.equal(sym1.name, "add", "proj1 symbol name"); - assert.equal(sym2.name, "greet", "proj2 symbol name"); - assert.equal(sym3.name, "toggle", "proj3 symbol name"); - - // Get type of each symbol, then signatures (exercises type + signature registries) - const type1 = proj1.checker.getTypeOfSymbol(sym1); - const type2 = proj2.checker.getTypeOfSymbol(sym2); - const type3 = proj3.checker.getTypeOfSymbol(sym3); - assert.ok(type1, "proj1 function type"); - assert.ok(type2, "proj2 function type"); - assert.ok(type3, "proj3 function type"); - - const sigs1 = proj1.checker.getSignaturesOfType(type1, SignatureKind.Call); - const sigs2 = proj2.checker.getSignaturesOfType(type2, SignatureKind.Call); - const sigs3 = proj3.checker.getSignaturesOfType(type3, SignatureKind.Call); - assert.equal(sigs1.length, 1, "proj1 has 1 call signature"); - assert.equal(sigs2.length, 1, "proj2 has 1 call signature"); - assert.equal(sigs3.length, 1, "proj3 has 1 call signature"); - assert.equal(sigs1[0].parameters.length, 2, "proj1 add() has 2 params"); - assert.equal(sigs2[0].parameters.length, 1, "proj2 greet() has 1 param"); - assert.equal(sigs3[0].parameters.length, 1, "proj3 toggle() has 1 param"); - }); -}); - -describe("Checker - getBaseTypeOfLiteralType", { concurrency }, () => { - test("number literal widens to number", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x = 42;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const x = 42;`; - const pos = src.indexOf("x ="); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const literalType = project.checker.getTypeOfSymbol(symbol); - assert.ok(literalType); - assert.ok(literalType.flags & TypeFlags.NumberLiteral); - const baseType = project.checker.getBaseTypeOfLiteralType(literalType); - assert.ok(baseType); - assert.ok(baseType.flags & TypeFlags.Number); - }); - - test("string literal widens to string", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const s = "hello";`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const s = "hello";`; - const pos = src.indexOf("s "); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const literalType = project.checker.getTypeOfSymbol(symbol); - assert.ok(literalType); - assert.ok(literalType.flags & TypeFlags.StringLiteral); - const baseType = project.checker.getBaseTypeOfLiteralType(literalType); - assert.ok(baseType); - assert.ok(baseType.flags & TypeFlags.String); - }); -}); - -describe("Checker - getContextualType", { concurrency }, () => { - test("contextual type from function parameter", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -function foo(x: number) {} -foo(42); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the argument "42" in foo(42) - // statement[1] = foo(42); which is an ExpressionStatement -> CallExpression - const callStmt = sourceFile.statements[1]; - assert.ok(callStmt); - let numLiteral: import("@typescript/typescript/unstable/ast").Expression | undefined; - callStmt.forEachChild(function visit(node) { - if (isCallExpression(node)) { - // First argument - numLiteral = node.arguments[0]; - } - node.forEachChild(visit); - }); - assert.ok(numLiteral); - const contextualType = project.checker.getContextualType(numLiteral); - assert.ok(contextualType); - assert.ok(contextualType.flags & TypeFlags.Number); - }); -}); - -describe("Checker - getTypeOfSymbolAtLocation", { concurrency }, () => { - test("narrowed type via typeof check", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export function check(x: string | number) { - if (typeof x === "string") { - return x; - } - return x; -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport function check(x: string | number) {\n if (typeof x === "string") {\n return x;\n }\n return x;\n}\n`; - - // Get the symbol for parameter "x" - const paramPos = src.indexOf("x:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", paramPos); - assert.ok(symbol); - assert.equal(symbol.name, "x"); - - // Get the type of "x" at the wider function scope — should be string | number - const wideType = project.checker.getTypeOfSymbol(symbol); - assert.ok(wideType); - assert.ok(wideType.flags & TypeFlags.Union, `Expected union type, got flags ${wideType.flags}`); - - // Get the narrowed return x inside the if block - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // statement[0] is the function declaration - const funcDecl = sourceFile.statements[0]; - assert.ok(funcDecl); - // Walk to find the first "return x" — inside the if, x should be narrowed to string - let firstReturnX: import("@typescript/typescript/unstable/ast").Node | undefined; - funcDecl.forEachChild(function visit(node) { - if (isReturnStatement(node) && !firstReturnX) { - // The expression of the return statement is the identifier "x" - if (node.expression) { - firstReturnX = node.expression; - } - } - node.forEachChild(visit); - }); - assert.ok(firstReturnX); - const narrowedType = project.checker.getTypeOfSymbolAtLocation(symbol, firstReturnX); - assert.ok(narrowedType); - // Inside the if (typeof x === "string") branch, x should be narrowed to string - assert.ok(narrowedType.flags & TypeFlags.String, `Expected string type, got flags ${narrowedType.flags}`); - }); -}); - -describe("Checker - getShorthandAssignmentValueSymbol", { concurrency }, () => { - test("shorthand property symbol resolves to variable", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const name = "Alice"; -export const obj = { name }; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the shorthand property assignment { name } - // statement[1] = export const obj = { name }; - let shorthandNode: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isShorthandPropertyAssignment(node)) { - shorthandNode = node; - } - node.forEachChild(visit); - }); - assert.ok(shorthandNode, "Should find a shorthand property assignment"); - const valueSymbol = project.checker.getShorthandAssignmentValueSymbol(shorthandNode); - assert.ok(valueSymbol); - assert.equal(valueSymbol.name, "name"); - }); -}); - -describe("readFile callback semantics", { concurrency }, () => { - test("callback configurations require every operation at runtime", () => { - assert.throws( - () => new API({ fs: { readFile: serverFS.useOS } as FileSystemCallbacks }), - /Invalid filesystem callback 'fileExists'/, - ); - }); - - test("invalid callback results do not fall through to the server OS", () => { - const fs: FileSystemCallbacks = { - ...createVirtualFileSystem({ - "/tsconfig.json": "{}", - }), - readFile: (() => null) as unknown as FileSystemCallbacks["readFile"], - }; - using api = new API({ cwd: "/", fs }); - assert.throws( - () => api.readConfigFile("/tsconfig.json"), - /Invalid result from filesystem callback 'readFile'/, - ); - }); - - test("realpath callback string results are resolved and normalized by the server", () => { - const fs = createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { module: "nodenext", moduleResolution: "nodenext" }, - files: ["index.ts"], - }), - "/index.ts": `import "pkg";`, - "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), - "/node_modules/pkg/index.d.ts": `export {};`, - }); - for ( - const realpath of [ - (path: string) => path.replaceAll("/", "\\"), - (path: string) => path.slice(path.lastIndexOf("/") + 1), - (path: string) => "../" + path.split("/").slice(-2).join("/"), - ] - ) { - const callbacks: FileSystemCallbacks = { ...fs, realpath }; - using api = new API({ cwd: "/", fs: callbacks }); - - using snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - assert.ok( - (snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFileNames()) - .includes(toRootedFilePath("/node_modules/pkg/index.d.ts", undefined)), - ); - } - }); - - test("readFile: string returns content, undefined blocks fallback, useOS falls through to the server OS", () => { - const virtualFiles: Record = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x: number = 1;`, - }; - const vfs = createVirtualFileSystem(virtualFiles); - const blockedPath = "/src/blocked.ts"; - - const fs: FileSystemCallbacks = { - ...vfs, - readFile: fileName => { - if (fileName === blockedPath) { - return undefined; - } - // Try the VFS first; if it has the file, return its content (string). - // Otherwise use the OS filesystem on the server. - return vfs.readFile(fileName); - }, - }; - - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // 1. String content: virtual file is found - const sf = project.program.getSourceFile("/src/index.ts"); - assert.ok(sf, "Virtual file should be found"); - assert.equal(sf.text, virtualFiles["/src/index.ts"]); - - // 2. useOS fallback: lib files from the server OS should be present. - // If readFile returned undefined rather than useOS for unknowns, lib files would be missing - // and `number` would not resolve — this was the original async bug. - // Verify by checking that `number` resolves to a proper type (not error). - const pos = virtualFiles["/src/index.ts"].indexOf("x:"); - const type = project.checker.getTypeAtPosition("/src/index.ts", pos); - assert.ok(type, "Type should resolve"); - assert.ok(type.flags & TypeFlags.Number, `Expected number type, got flags ${type.flags}`); - - // 3. undefined blocks fallback: blocked file should not be found - const blockedSf = project.program.getSourceFile(blockedPath); - assert.equal(blockedSf, undefined, "Blocked file should not be found"); - }); - - test("configured case sensitivity is used by the server and client", () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["/src/index.ts"] }), - "/src/index.ts": `export const value = 1;`, - }; - { - using api = new API({ - cwd: "/", - fs: createVirtualFileSystem(files), - useCaseSensitiveFileNames: false, - }); - const program = (api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; - assert.ok(program.getSourceFile("/SRC/INDEX.TS")); - } - { - using api = new API({ - cwd: "/", - fs: createVirtualFileSystem(files), - useCaseSensitiveFileNames: true, - }); - const program = (api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; - assert.equal(program.getSourceFile("/SRC/INDEX.TS"), undefined); - } - }); -}); - -describe("updateSnapshot file systems", { concurrency }, () => { - test("request filesystem factories normalize files and preserve explicit listings", () => { - const memory = createFileSystem([ - ["/src/index.ts", "posix"], - ["C:\\repo\\src\\index.ts", "windows"], - ["file:///literal%20path.ts", "literal file-name string"], - [{ uri: "file:///encoded/path%20with%20spaces.ts" }, "file URI"], - [{ uri: "file:///C%3A/repo/encoded%23name.ts" }, "Windows file URI"], - [{ uri: "file://server/share/encoded%20name.ts" }, "UNC file URI"], - [{ uri: "file:///encoded/unicode%E2%80%93name.ts" }, "Unicode file URI"], - [{ uri: "file:///encoded/literal+plus.ts" }, "plus file URI"], - [{ uri: "file:///encoded/once%2520encoded.ts" }, "double-encoded file URI"], - ["vscode-remote://ssh-remote+host/workspace/src/index.ts", "remote"], - ["vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts", "notebook"], - ]); - assert.deepEqual(memory, { - kind: "full", - files: { - "/src/index.ts": "posix", - "C:/repo/src/index.ts": "windows", - "file:///literal%20path.ts": "literal file-name string", - "/encoded/path with spaces.ts": "file URI", - "C:/repo/encoded#name.ts": "Windows file URI", - "//server/share/encoded name.ts": "UNC file URI", - "/encoded/unicode–name.ts": "Unicode file URI", - "/encoded/literal+plus.ts": "plus file URI", - "/encoded/once%20encoded.ts": "double-encoded file URI", - "vscode-remote://ssh-remote+host/workspace/src/index.ts": "remote", - "vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts": "notebook", - }, - directories: undefined, - symlinks: undefined, - removedPaths: undefined, - }); - - const directories = { "/explicit": { files: ["provided.ts"], directories: [] } }; - const cache = createFileSystemLayer([["/ignored/derived.ts", "cache"]], { - directories, - removedPaths: ["/removed.ts", "/removed"], - }); - assert.equal(cache.kind, "layer"); - assert.deepEqual(cache.directories, directories); - assert.deepEqual(cache.removedPaths, ["/removed.ts", "/removed"]); - - assert.throws( - () => - createFileSystem([ - ["/duplicate.ts", "path"], - [{ uri: "file:///duplicate.ts" }, "URI"], - ]), - /Duplicate request filesystem path: \/duplicate\.ts/, - ); - - const prototypeFileSystem = createFileSystem([["__proto__", "prototype"]]); - assert.equal(prototypeFileSystem.files["__proto__"], "prototype"); - assert.ok(Object.hasOwn(prototypeFileSystem.files, "__proto__")); - - assert.throws( - () => - createFileSystem([ - ["/normalized/duplicate.ts", "forward slash"], - ["\\normalized\\duplicate.ts", "backslash"], - ]), - /Duplicate request filesystem path: \/normalized\/duplicate\.ts/, - ); - }); - - test("full file system is total and does not invoke host callbacks", () => { - const callbackCalls: string[] = []; - const host = createVirtualFileSystem({ - "/host.ts": `export const source = "host";`, - }); - const fs: FileSystemCallbacks = { - readFile: path => { - callbackCalls.push(`readFile:${path}`); - return host.readFile!(path); - }, - fileExists: path => { - callbackCalls.push(`fileExists:${path}`); - return host.fileExists!(path); - }, - directoryExists: path => { - callbackCalls.push(`directoryExists:${path}`); - return host.directoryExists!(path); - }, - getAccessibleEntries: path => { - callbackCalls.push(`getAccessibleEntries:${path}`); - return host.getAccessibleEntries!(path); - }, - realpath: path => { - callbackCalls.push(`realpath:${path}`); - return path; - }, - stat: path => { - callbackCalls.push(`stat:${path}`); - if (host.directoryExists(rootedDirectoryPathFromPath(path))) return { mode: 0o040555, size: 0, mtime: new Date(0) }; - if (host.fileExists(rootedFilePathFromPath(path))) return { mode: 0o100444, size: 0, mtime: new Date(0) }; - return undefined; - }, - writeFile: (path, content) => { - callbackCalls.push(`writeFile:${path}`); - host.writeFile!(path, content); - }, - removeFile: path => { - callbackCalls.push(`removeFile:${path}`); - host.removeFile(path); - }, - }; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), - "/src/index.ts": `export const source = "memory";`, - }, - directories: { - "/": { files: ["tsconfig.json"], directories: ["src"] }, - "/src": { files: ["index.ts"], directories: [] }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.equal(sourceFile?.text, `export const source = "memory";`); - assert.equal(project.program.getSourceFile("/host.ts"), undefined); - assert.deepEqual(callbackCalls, []); - }); - - test("full file system with lib resolves the default library", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemWithLib(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["src/main.ts"] }), - "/src/main.ts": `export const values: Array = [];`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.deepEqual(program.getGlobalDiagnostics(), []); - const sourceFileNames = program.getSourceFileNames(); - const defaultLibraryName = sourceFileNames.find(fileName => fileName.includes("/lib.") && fileName.endsWith(".d.ts")); - assert.ok(defaultLibraryName, JSON.stringify(sourceFileNames)); - const defaultLibrary = program.getSourceFile(defaultLibraryName); - assert.ok(defaultLibrary); - assert.equal(program.isSourceFileDefaultLibrary(defaultLibrary), true); - }); - - test("full file system accepts and caches paths decoded from VS Code document URIs", () => { - const fileDocument = { uri: "file:///workspace/file%20name.ts" }; - const remoteDocument = { uri: "vscode-remote://ssh-remote+host/workspace/src/remote%20name.ts" }; - const notebookDocument = { uri: "vscode-notebook-cell:/workspace/notebook.ipynb/cell%20name.ts" }; - const untitledDocument = { uri: "untitled:Untitled-1" }; - const files: [DocumentIdentifier, string][] = [ - [fileDocument, `export const file = true;`], - [remoteDocument, `export const remote = true;`], - [notebookDocument, `export const cell = true;`], - [untitledDocument, `export const untitled = true;`], - ]; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - collectTiming: true, - }); - using snapshot = api.createSnapshot({ - openFiles: files.map(([document]) => document), - fileSystem: createFileSystem(files), - }); - for (const [document, text] of files) { - const project = snapshot.getDefaultProjectForFile(document); - assert.ok(project); - api.resetTimingInfo(); - const sourceFile = project.program.getSourceFile(document); - assert.ok(sourceFile); - assert.equal(sourceFile.text, text); - assert.equal((api.getTimingInfo()).totals.requestCount, 1); - - assert.strictEqual(project.program.getSourceFile(document), sourceFile); - assert.strictEqual(project.program.getSourceFile(sourceFile.fileName), sourceFile); - assert.strictEqual(project.program.getSourceFile(sourceFile.path), sourceFile); - assert.equal((api.getTimingInfo()).totals.requestCount, 1, sourceFile.fileName); - } - }); - - test("file system layer bypasses callbacks on hits and falls back on misses", () => { - const readFileCalls: string[] = []; - const directoryCalls: string[] = []; - const host = createVirtualFileSystem({ - "/src/fallback.ts": `export const fallback = true;`, - }); - const fs: FileSystemCallbacks = { - ...host, - readFile: path => { - readFileCalls.push(path); - return host.readFile!(path); - }, - getAccessibleEntries: path => { - directoryCalls.push(path); - return host.getAccessibleEntries!(path); - }, - }; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: { - kind: "layer", - files: { - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), - "/src/index.ts": `export const cached = true;`, - }, - directories: { - "/": { files: ["tsconfig.json"], directories: ["src"] }, - "/src": { files: ["fallback.ts", "index.ts"], directories: [] }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.equal((project.program.getSourceFile("/src/index.ts"))?.text, `export const cached = true;`); - assert.equal((project.program.getSourceFile("/src/fallback.ts"))?.text, `export const fallback = true;`); - - assert.ok(!readFileCalls.includes("/tsconfig.json")); - assert.ok(!readFileCalls.includes("/src/index.ts")); - assert.ok(readFileCalls.includes("/src/fallback.ts")); - assert.ok(!directoryCalls.includes("/")); - assert.ok(!directoryCalls.includes("/src")); - }); - - test("file system layer factory preserves host directory entries", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ - "/src/from-host.ts": `export const host = true;`, - }), - }); - - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemLayer([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] })], - ["/src/from-cache.ts", `export const cache = true;`], - ]), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.deepEqual( - [...program.getSourceFileNames()].sort(), - ["/src/from-cache.ts", "/src/from-host.ts"], - ); - }); - - test("full file system resolves packages through internal monorepo symlinks", () => { - const callbackCalls: string[] = []; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: path => { - callbackCalls.push(path); - return serverFS.useOS; - }, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }, - }); - - using snapshot = api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), - "/project/index.ts": `import { value } from "pkg"; export { value };`, - "/packages/pkg/index.d.ts": `export declare const value: number;`, - }, - symlinks: { - "/project/node_modules/pkg": { target: "/packages/pkg" }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (project.program.getSourceFile("/packages/pkg/index.d.ts"))?.text, - `export declare const value: number;`, - ); - assert.deepEqual(callbackCalls, []); - }); - - test("full file system resolves relative symlink targets", () => { - const callbackCalls: string[] = []; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: path => { - callbackCalls.push(path); - return serverFS.useOS; - }, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: serverFS.useOS, - removeFile: serverFS.useOS, - }, - }); - - using snapshot = api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["index.ts"] }), - "/project/index.ts": `export { value } from "./pkg";`, - "/packages/pkg/index.d.ts": `export declare const value: number;`, - }, - symlinks: { - "/project/pkg": { target: "../packages/pkg" }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (project.program.getSourceFile("/project/pkg/index.d.ts"))?.text, - `export declare const value: number;`, - ); - assert.deepEqual(callbackCalls, []); - }); - - test("Snapshot.update layers filesystem edits and removals", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem(Object.entries({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { noLib: true }, - include: ["src/**/*.ts"], - }), - "/src/keep.ts": `export const keep = true;`, - "/src/change.ts": `export const version = "old";`, - "/src/remove.ts": `export const remove = true;`, - "/src/removed/gone.ts": `export const gone = true;`, - })), - }); - - using updated = snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/src/change.ts": `export const version = "new";`, - "/src/added.ts": `export const added = true;`, - }), - { - removedPaths: ["/src/remove.ts", "/src/removed"], - }, - ), - }); - const project = updated.getConfiguredProject("/tsconfig.json")!; - assert.equal((project.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); - assert.equal((project.program.getSourceFile("/src/change.ts"))?.text, `export const version = "new";`); - assert.equal((project.program.getSourceFile("/src/added.ts"))?.text, `export const added = true;`); - assert.equal(project.program.getSourceFile("/src/remove.ts"), undefined); - assert.equal(project.program.getSourceFile("/src/removed/gone.ts"), undefined); - using fork = snapshot.update({ ensurePrograms: true }); - assert.equal((fork.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/change.ts"))?.text, `export const version = "old";`); - - using updatedAgain = updated.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/src/added.ts": `export const added = "updated again";`, - }), - { - removedPaths: ["/src/change.ts"], - }, - ), - }); - const updatedAgainProject = updatedAgain.getConfiguredProject("/tsconfig.json")!; - assert.equal((updatedAgainProject.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); - assert.equal((updatedAgainProject.program.getSourceFile("/src/added.ts"))?.text, `export const added = "updated again";`); - assert.equal(updatedAgainProject.program.getSourceFile("/src/change.ts"), undefined); - }); - - test("eager snapshot disposal does not retain filesystem history", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - let snapshot: Snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["pkg/index.ts"] })], - ["/pkg/index.ts", ""], - ]), - }); - try { - let content = ""; - for (const character of "export const x = 1") { - const oldSnapshot: Snapshot = snapshot; - content += character; - snapshot = oldSnapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer([["/pkg/index.ts", content]]), - }); - oldSnapshot.dispose(); - assert.equal(oldSnapshot.isDisposed(), true); - } - - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((program.getSourceFile("/pkg/index.ts"))?.text, "export const x = 1"); - } - finally { - snapshot.dispose(); - } - }); - - test("Snapshot.update treats a full filesystem as a total replacement", () => { - const host = createVirtualFileSystem({ - "/host.ts": `export const source = "host";`, - }); - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = api.createSnapshot(); - using replaced = snapshot.update({ - ensurePrograms: true, - openProject: "/tsconfig.json", - fileSystem: createFileSystem([ - ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["memory.ts", "host.ts"] })], - ["/memory.ts", `export const source = "memory";`], - ]), - }); - const program = replaced.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((program.getSourceFile("/memory.ts"))?.text, `export const source = "memory";`); - assert.equal(program.getSourceFile("/host.ts"), undefined); - }); - - test("Snapshot.update applies target changes through inherited symlinks", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - }); - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem( - Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["src/main.ts"] }), - "/src/main.ts": `import "./link/change"; import "./link/added"; import "./link/remove";`, - "/target/change.ts": `export const version = "old";`, - "/target/remove.ts": `export const removed = true;`, - }), - { - symlinks: { - "/src/link": { target: "/target" }, - }, - }, - ), - }); - - using updated = snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer( - Object.entries({ - "/target/change.ts": `export const version = "new";`, - "/target/added.ts": `export const added = true;`, - }), - { - removedPaths: ["/target/remove.ts"], - }, - ), - }); - const program = updated.getConfiguredProject("/tsconfig.json")!.program; - assert.equal((program.getSourceFile("/src/link/change.ts"))?.text, `export const version = "new";`); - assert.equal((program.getSourceFile("/src/link/added.ts"))?.text, `export const added = true;`); - assert.equal(program.getSourceFile("/src/link/remove.ts"), undefined); - }); - - test("full filesystem emit returns outputs without mutating the host", () => { - const hostWrites: string[] = []; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - directoryExists: serverFS.useOS, - fileExists: serverFS.useOS, - getAccessibleEntries: serverFS.useOS, - readFile: serverFS.useOS, - realpath: serverFS.useOS, - stat: serverFS.useOS, - writeFile: path => { - hostWrites.push(path); - }, - removeFile: serverFS.useOS, - }, - }); - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystem(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), - "/src/main.ts": `export const value: number = 1;`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const result = program.emit(); - assert.deepEqual(result.emittedFiles, ["/out/main.js"]); - assert.deepEqual(result.fileSystem, { - kind: "layer", - files: { - "/out/main.js": `export const value = 1;\n`, - }, - }); - assert.deepEqual(hostWrites, []); - - using updated = snapshot.update({ fileSystem: result.fileSystem!, openFiles: ["/out/main.js"] }); - const outputProject = updated.getDefaultProjectForFile("/out/main.js"); - assert.equal((updated.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"))?.text, `export const value: number = 1;`); - assert.equal((outputProject?.program.getSourceFile("/out/main.js"))?.text, `export const value = 1;\n`); - }); - - test("filesystem layer emit writes through to the host", () => { - const host = createVirtualFileSystem({}); - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = api.createSnapshot({ - openProject: "/tsconfig.json", - fileSystem: createFileSystemLayer(Object.entries({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), - "/src/main.ts": `export const value: number = 1;`, - })), - }); - const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; - const result = program.emit(); - assert.equal(result.fileSystem, undefined); - assert.equal(host.readFile!(toRootedFilePath("/out/main.js", undefined)), `export const value = 1;\n`); - }); - - test("full file system can link node_modules from the host", () => { - const readFileCalls: string[] = []; - const directoryExistsCalls: string[] = []; - const fileExistsCalls: string[] = []; - const host = createVirtualFileSystem({ - "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, - }); - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - ...host, - directoryExists: path => { - directoryExistsCalls.push(path); - return host.directoryExists!(path); - }, - fileExists: path => { - const exists = host.fileExists!(path); - fileExistsCalls.push(`${path}:${exists}`); - return exists; - }, - readFile: path => { - readFileCalls.push(path); - return host.readFile!(path); - }, - }, - }); - - using snapshot = api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: { - kind: "full", - files: { - "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), - "/project/index.ts": `import { value } from "pkg"; export { value };`, - }, - symlinks: { - "/project/node_modules": { target: "/host/node_modules", host: true }, - }, - }, - }); - const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; - const sourceFileNames = project.program.getSourceFileNames(); - assert.ok( - sourceFileNames.includes("/host/node_modules/pkg/index.d.ts" as RootedFilePath), - JSON.stringify({ sourceFileNames, readFileCalls, directoryExistsCalls, fileExistsCalls }), - ); - assert.equal( - (project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, - `export declare const value: string;`, - ); - assert.ok(readFileCalls.includes("/host/node_modules/pkg/index.d.ts")); - assert.ok(!readFileCalls.some(path => path.startsWith("/project/node_modules"))); - }); - - test("Snapshot.update host symlinks bypass an inherited full filesystem", () => { - const host = createVirtualFileSystem({ - "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, - }); - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: host, - }); - using snapshot = api.createSnapshot({ - openProject: "/project/tsconfig.json", - fileSystem: createFileSystem([ - ["/project/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] })], - ["/project/index.ts", `import { value } from "pkg"; export { value };`], - ]), - }); - using updated = snapshot.update({ - ensurePrograms: true, - fileSystem: createFileSystemLayer([], { - symlinks: { - "/project/node_modules": { target: "/host/node_modules", host: true }, - }, - }), - }); - const project = updated.getConfiguredProject("/project/tsconfig.json")!; - assert.equal( - (project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, - `export declare const value: string;`, - ); - }); - - // TODO: Add request filesystem coverage for `tsc -b` and `tsc -b --clean` - // once build and clean are exposed through the client API. In particular, - // verify that clean removes synthetic outputs and that build-mode re-timestamping - // of emitted-but-unchanged files works for full filesystems, which currently - // do not model modification times. -}); - -describe("Checker - isArrayType / isTupleType", { concurrency }, () => { - test("number[] is array, not tuple", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: number[] = [];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: number[] = [];`; - const pos = src.indexOf("xs"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), true); - assert.equal(project.checker.isTupleType(type), false); - }); - - test("readonly number[] is array", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: readonly number[] = [];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: readonly number[] = [];`; - const pos = src.indexOf("xs"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), true); - assert.equal(project.checker.isTupleType(type), false); - }); - - test("Array is array, not tuple", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const xs: Array = [];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const xs: Array = [];`; - const pos = src.indexOf("xs"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), true); - assert.equal(project.checker.isTupleType(type), false); - }); - - test("[number, string] is tuple, not array", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const tup: [number, string] = [1, "a"];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const tup: [number, string] = [1, "a"];`; - const pos = src.indexOf("tup"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), false); - assert.equal(project.checker.isTupleType(type), true); - }); - - test("readonly [number, string] is tuple, not array", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const tup: readonly [number, string] = [1, "a"];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const tup: readonly [number, string] = [1, "a"];`; - const pos = src.indexOf("tup"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), false); - assert.equal(project.checker.isTupleType(type), true); - }); - - test("string is neither array nor tuple", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const str: string = "";`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const str: string = "";`; - const pos = src.indexOf("str"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.equal(project.checker.isArrayType(type), false); - assert.equal(project.checker.isTupleType(type), false); - }); -}); - -describe("Checker - isReadonlySymbol", { concurrency }, () => { - test("properties with a 'readonly' modifier", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface User { - readonly name: string; - age: number; -} - -export type ReadonlyUser = Readonly; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const user = sourceFile.statements.find(isInterfaceDeclaration); - assert.ok(user); - const userProperties = project.checker.getPropertiesOfType( - project.checker.getTypeAtLocation(user), - ); - assert.equal(project.checker.isReadonlySymbol(userProperties[0]), true); - assert.equal(project.checker.isReadonlySymbol(userProperties[1]), false); - const readonlyUser = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(readonlyUser); - const readonlyUserProperties = project.checker.getPropertiesOfType( - project.checker.getTypeAtLocation(readonlyUser), - ); - assert.equal(project.checker.isReadonlySymbol(readonlyUserProperties[0]), true); - assert.equal(project.checker.isReadonlySymbol(readonlyUserProperties[1]), true); - }); - - test("variables declared with 'const'", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const a = 1; export let b = 2;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const a = checker.getSymbolAtPosition("/src/main.ts", "export const ".length); - const b = checker.getSymbolAtPosition("/src/main.ts", "export const a = 1; export let ".length); - assert.ok(a); - assert.ok(b); - assert.equal(checker.isReadonlySymbol(a), true); - assert.equal(checker.isReadonlySymbol(b), false); - }); - - test("get accessors without matching set accessors", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -class Alpha { - private _value!: number; - get value(): number { - return this._value; - } -} -class Bravo { - private _value!: number; - get value(): number { - return this._value; - } - set value(newValue: number) { - this._value = newValue; - } -} -export type A = InstanceType; -export type B = InstanceType; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAliases = sourceFile.statements.filter(isTypeAliasDeclaration); - assert.equal(typeAliases.length, 2); - const aProperties = project.checker.getPropertiesOfType( - project.checker.getTypeAtLocation(typeAliases[0]), - ); - assert.equal(project.checker.isReadonlySymbol(aProperties[1]), true); - const bProperties = project.checker.getPropertiesOfType( - project.checker.getTypeAtLocation(typeAliases[1]), - ); - assert.equal(project.checker.isReadonlySymbol(bProperties[1]), false); - }); -}); - -describe("Checker - getReturnTypeOfSignature", { concurrency }, () => { - test("returns the return type of a function signature", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function add(a: number, b: number): number { return a + b; }`; - const pos = src.indexOf("add("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const returnType = project.checker.getReturnTypeOfSignature(sigs[0]); - assert.ok(returnType); - assert.ok(returnType.flags & TypeFlags.Number, `Expected number, got flags ${returnType.flags}`); - }); -}); - -describe("Checker - getRestTypeOfSignature", { concurrency }, () => { - test("returns the rest type of a signature with rest parameter", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`; - const pos = src.indexOf("sum("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const restType = project.checker.getRestTypeOfSignature(sigs[0]); - assert.ok(restType); - assert.ok(restType.flags & TypeFlags.Number, `Expected number type, got flags ${restType.flags}`); - }); -}); - -describe("Checker - getTypePredicateOfSignature", { concurrency }, () => { - test("returns type predicate for 'x is T' guard", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function isString(x: unknown): x is string { return typeof x === "string"; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function isString(x: unknown): x is string { return typeof x === "string"; }`; - const pos = src.indexOf("isString("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.Identifier); - assert.equal(predicate.parameterName, "x"); - assert.equal(predicate.parameterIndex, 0); - assert.ok(predicate.type); - assert.ok(predicate.type.flags & TypeFlags.String); - }); - - test("returns type predicate for 'this is T' guard", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Animal { - isdog(): this is Dog { return this instanceof Dog; } -} -export class Dog extends Animal { - bark() {} -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Animal {\n isdog(): this is Dog { return this instanceof Dog; }\n}\nexport class Dog extends Animal {\n bark() {}\n}\n`; - const pos = src.indexOf("isdog("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.This); - }); - - test("returns type predicate for 'asserts x is T'", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`; - const pos = src.indexOf("assertIsString("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); - assert.ok(predicate); - assert.equal(predicate.kind, TypePredicateKind.AssertsIdentifier); - assert.equal(predicate.parameterName, "x"); - assert.equal(predicate.parameterIndex, 0); - assert.ok(predicate.type); - assert.ok(predicate.type.flags & TypeFlags.String); - }); - - test("returns undefined for signature without type predicate", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function add(a: number, b: number): number { return a + b; }`; - const pos = src.indexOf("add("); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); - assert.equal(predicate, undefined); - }); -}); - -describe("Checker - getBaseTypes", { concurrency }, () => { - test("returns base types of a class", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Base { - x: number = 0; -} -export class Derived extends Base { - y: string = ""; -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\n`; - const pos = src.indexOf("Derived"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - const baseTypes = project.checker.getBaseTypes(type as InterfaceType); - assert.ok(baseTypes.length > 0, "Should have at least one base type"); - const baseSymbol = baseTypes[0].getSymbol(); - assert.ok(baseSymbol); - assert.equal(baseSymbol.name, "Base"); - }); - - test("returns base types of an interface", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Animal { - name: string; -} -export interface Dog extends Animal { - bark(): void; -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Animal {\n name: string;\n}\nexport interface Dog extends Animal {\n bark(): void;\n}\n`; - const pos = src.indexOf("Dog"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getDeclaredTypeOfSymbol(symbol); - assert.ok(type); - const baseTypes = project.checker.getBaseTypes(type as InterfaceType); - assert.ok(baseTypes.length > 0, "Should have at least one base type"); - const baseSymbol = baseTypes[0].getSymbol(); - assert.ok(baseSymbol); - assert.equal(baseSymbol.name, "Animal"); - }); - - test("does not panic for a type alias to a generic interface instantiation", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Box { - value: T; -} -export type BoxOfString = Box; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); - assert.ok(typeAlias); - const type = project.checker.getTypeAtLocation(typeAlias); - assert.ok(type); - // A generic interface instantiation produces a type reference, not an - // interface type, so it has no base types and yields []. - const baseTypes = project.checker.getBaseTypes(type as InterfaceType); - assert.deepEqual(baseTypes, []); - }); -}); - -describe("Type - getBaseTypes", { concurrency }, () => { - test("returns base types for a class type and undefined for a non-class/interface", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Base { - x: number = 0; -} -export class Derived extends Base { - y: string = ""; -} -export const n: number = 0; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\nexport const n: number = 0;\n`; - - const derivedSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("Derived")); - assert.ok(derivedSymbol); - const derivedType = project.checker.getDeclaredTypeOfSymbol(derivedSymbol); - assert.ok(derivedType.isClassOrInterface(), "Derived should be a class/interface type"); - const baseTypes = derivedType.getBaseTypes(); - assert.ok(baseTypes && baseTypes.length > 0, "class type should have base types"); - const baseSymbol = baseTypes![0].getSymbol(); - assert.equal(baseSymbol?.name, "Base"); - - // A primitive type is not a class/interface, so getBaseTypes() is undefined. - const numberSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("n:")); - assert.ok(numberSymbol); - const numberType = project.checker.getTypeOfSymbol(numberSymbol); - assert.ok(numberType); - assert.equal(numberType.isClassOrInterface(), false); - assert.equal(numberType.getBaseTypes(), undefined); - }); -}); - -describe("Type - isErrorType", { concurrency }, () => { - test("identifies the error type from an unresolvable annotation", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -declare const good: string; -declare const bad: ThisTypeDoesNotExist; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\ndeclare const good: string;\ndeclare const bad: ThisTypeDoesNotExist;\n`; - - const badSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("bad")); - assert.ok(badSymbol); - const badType = project.checker.getTypeOfSymbol(badSymbol); - assert.ok(badType); - assert.ok(badType.isErrorType(), "unresolved annotation should yield the error type"); - assert.ok(isErrorType(badType)); - - const goodSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("good")); - assert.ok(goodSymbol); - const goodType = project.checker.getTypeOfSymbol(goodSymbol); - assert.ok(goodType); - assert.equal(goodType.isErrorType(), false, "string type is not the error type"); - assert.equal(isErrorType(goodType), false); - }); -}); - -describe("Checker - well-known symbols", { concurrency }, () => { - test("isUnknownSymbol identifies the aliased unknown symbol", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const value = 1; -export type Alias = typeof value; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport const value = 1;\nexport type Alias = typeof value;\n`; - - // A real symbol is not the unknown/undefined symbol. - const valueSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value")); - assert.ok(valueSymbol); - assert.equal(project.checker.isUnknownSymbol(valueSymbol), false); - assert.equal(project.checker.isUndefinedSymbol(valueSymbol), false); - }); -}); - -describe("Checker - well-known signatures", { concurrency }, () => { - test("isUnknownSignature identifies an unresolvable call", () => { - const src = ` -const ok = (x: number) => x; -ok(1); -const notCallable = 1; -notCallable(); -`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const calls: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node)) calls.push(node); - node.forEachChild(visit); - }); - assert.equal(calls.length, 2, "should find two call expressions"); - - // The valid call resolves to a real signature, not the unknown signature. - const okSig = project.checker.getResolvedSignature(calls[0]); - assert.equal(project.checker.isUnknownSignature(okSig), false); - - // The call to a non-callable value yields the unknown signature. - const badSig = project.checker.getResolvedSignature(calls[1]); - assert.equal(project.checker.isUnknownSignature(badSig), true); - }); -}); - -describe("Symbol - escaped names and tables", { concurrency }, () => { - test("getExports/getMembers return a cached Map keyed by escaped name", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export class Animal { - name: string = ""; - speak(): void {} -} -export const value = 1; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - - const exports = moduleSymbol.getExports(); - assert.ok(exports.has(escapeLeadingUnderscores("Animal"))); - assert.ok(exports.get(escapeLeadingUnderscores("value"))); - // Calling again returns the same cached Map instance. - assert.strictEqual(moduleSymbol.getExports(), exports); - - const animal = exports.get(escapeLeadingUnderscores("Animal"))!; - const members = animal.getMembers(); - assert.ok(members.get(escapeLeadingUnderscores("name"))); - assert.ok(members.get(escapeLeadingUnderscores("speak"))); - assert.strictEqual(animal.getMembers(), members); - }); - - test("anonymous type symbol has a __-escaped name, never the \\xFE sentinel", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const obj: { a: number } = { a: 1 }; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport const obj: { a: number } = { a: 1 };\n`; - const objSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("obj")); - assert.ok(objSymbol); - const objType = project.checker.getTypeOfSymbol(objSymbol); - assert.ok(objType); - const typeSymbol = objType.getSymbol(); - assert.ok(typeSymbol); - // The anonymous type literal symbol is internally named; over the wire - // it must be the "__type" escaped form, not the raw "\xFE" sentinel. - assert.equal(typeSymbol.escapedName, InternalSymbolName.Type); - assert.ok(!typeSymbol.escapedName.includes("\xFE")); - }); - - test("distinguishes a pattern ambient module name from a matching user-provided export name", () => { - const maliciousName = '"*.css"__pattern@1234'; - const types = ` -declare module "*.css" with { type: "css" } { - const className: string; - export default className; -} -`; - const source = ` -const x = ""; -export { x as '${maliciousName}' }; -`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, module: "preserve" } }), - "/src/types.d.ts": types, - "/src/main.ts": source, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const typesFile = project.program.getSourceFile("/src/types.d.ts"); - assert.ok(typesFile); - const moduleDeclaration = typesFile.statements.find(isModuleDeclaration); - assert.ok(moduleDeclaration); - const ambientModule = project.checker.getSymbolAtLocation(moduleDeclaration.name); - assert.ok(ambientModule); - assert.match(ambientModule.name, /^__"\*\.css"pattern@\d+$/); - assert.equal(ambientModule.escapedName, ambientModule.name); - assert.equal(tryGetAmbientModuleNameFromSymbolName(ambientModule.escapedName), "*.css"); - - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const sourceFileSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(sourceFileSymbol); - const maliciousExport = (sourceFileSymbol.getExports()).get(escapeLeadingUnderscores(maliciousName)); - assert.ok(maliciousExport); - assert.equal(maliciousExport.name, maliciousName); - assert.equal(maliciousExport.escapedName, maliciousName); - assert.equal(tryGetAmbientModuleNameFromSymbolName(maliciousExport.escapedName), undefined); - }); -}); - -describe("ast - escapeLeadingUnderscores", { concurrency }, () => { - test("round-trips display and escaped names", () => { - assert.equal(escapeLeadingUnderscores("foo"), "foo"); - assert.equal(escapeLeadingUnderscores("_foo"), "_foo"); - assert.equal(escapeLeadingUnderscores("__foo"), "___foo"); - assert.equal(unescapeLeadingUnderscores("foo" as __String), "foo"); - assert.equal(unescapeLeadingUnderscores("__type" as __String), "__type"); - assert.equal(unescapeLeadingUnderscores("___foo" as __String), "__foo"); - }); -}); - -describe("ast - tryGetAmbientModuleNameFromSymbolName", { concurrency }, () => { - test("gets ambient module names from escaped symbol names", () => { - assert.equal(tryGetAmbientModuleNameFromSymbolName('"pkg"' as __String), "pkg"); - assert.equal(tryGetAmbientModuleNameFromSymbolName('__"*.css"pattern@1234' as __String), "*.css"); - assert.equal(tryGetAmbientModuleNameFromSymbolName('"*.css"__pattern@1234' as __String), undefined); - assert.equal(tryGetAmbientModuleNameFromSymbolName('___"*.css"pattern@1234' as __String), undefined); - assert.equal(tryGetAmbientModuleNameFromSymbolName("value" as __String), undefined); - }); -}); - -describe("ast - getJSDocTags", { concurrency }, () => { - test("returns a node's own tags, and inherited @param / @template tags", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers. - * @param a the first number - * @param b the second number - * @returns the sum - */ -export function add(a: number, b: number): number { - return a + b; -} - -/** - * @template T the element type - * @param x a value - */ -export function identity(x: T): T { - return x; -} - -/** @deprecated use add */ -export const total = add(1, 2); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const functions = [...sourceFile.statements].filter(isFunctionDeclaration); - const add = functions[0]; - const identity = functions[1]; - assert.ok(add); - assert.ok(identity); - - // A function reports its own JSDoc tags. - assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); - - // A parameter inherits the matching @param tag from its containing - // signature. - const paramA = add.parameters[0]; - const paramATags = getJSDocTags(paramA); - assert.deepEqual(paramATags.map(t => t.tagName.text), ["param"]); - const paramATag = paramATags[0]; - assert.ok(isJSDocParameterTag(paramATag)); - assert.ok(isIdentifier(paramATag.name)); - assert.equal(paramATag.name.text, "a"); - - const paramB = add.parameters[1]; - const paramBTags = getJSDocTags(paramB); - assert.deepEqual(paramBTags.map(t => t.tagName.text), ["param"]); - const paramBTag = paramBTags[0]; - assert.ok(isJSDocParameterTag(paramBTag)); - assert.ok(isIdentifier(paramBTag.name)); - assert.equal(paramBTag.name.text, "b"); - - // A type parameter inherits the matching @template tag. - const typeParam = identity.typeParameters![0]; - assert.deepEqual(getJSDocTags(typeParam).map(t => t.tagName.text), ["template"]); - - // The value parameter of `identity` inherits its @param tag. - const identityParam = identity.parameters[0]; - assert.deepEqual(getJSDocTags(identityParam).map(t => t.tagName.text), ["param"]); - - // A variable declaration walks up its comment-location chain - // (declaration -> declaration list -> statement) to the JSDoc on the - // containing variable statement. - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const declaration = variable.declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["deprecated"]); - }); - - test("a function-expression parameter inherits @param tags from the variable statement", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** - * @param {string} name a name - * @returns {number} the length - */ -var measure = function (name) { - return name.length; -}; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const declaration = variable.declarationList.declarations[0]; - const funcExpr = declaration.initializer; - assert.ok(funcExpr); - - // The variable statement carries the @param and @returns tags. - assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["param", "returns"]); - - // The function expression's parameter walks declaration -> list -> - // statement and inherits the matching @param tag. - const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; - const paramTags = getJSDocTags(param); - assert.deepEqual(paramTags.map(t => t.tagName.text), ["param"]); - const paramTag = paramTags[0]; - assert.ok(isJSDocParameterTag(paramTag)); - assert.ok(isIdentifier(paramTag.name)); - assert.equal(paramTag.name.text, "name"); - }); - - test("a @type cast tag is owned by its parenthesized expression, not the declaration", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** @type {string} */ -const value = "hello"; - -const cast = /** @type {number} */ (someValue); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const statements = [...sourceFile.statements].filter(isVariableStatement); - - // A @type tag directly on a declaration is reported for that declaration. - const valueDecl = statements[0].declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(valueDecl).map(t => t.tagName.text), ["type"]); - - // A @type cast tag attached to a parenthesized expression is owned by - // that expression and is not reported for the enclosing declaration. - const castDecl = statements[1].declarationList.declarations[0]; - assert.deepEqual(getJSDocTags(castDecl).map(t => t.tagName.text), []); - }); -}); - -describe("ast - getJSDocCommentsAndTags", { concurrency }, () => { - test("returns the whole JSDoc comment when the host node owns all of its tags", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * The answer to everything. - * @deprecated use theAnswer instead - */ -export const answer = 42; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; - assert.ok(answer); - - // Every tag on `answer`'s JSDoc comment is owned by `answer`, so the whole - // comment is returned as a single entry rather than its individual tags. - const commentsAndTags = getJSDocCommentsAndTags(answer); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - - // Flattening still yields the same tags as getJSDocTags. - assert.deepEqual(getJSDocTags(answer).map(t => t.tagName.text), ["deprecated"]); - }); - - test("returns the whole JSDoc comment when it has a description but no tags", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * The answer to everything. - */ -export const answer = 42; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; - assert.ok(answer); - - // With no tags to discard, the JSDoc node (and its description) is - // still returned rather than an empty tag list. - const commentsAndTags = getJSDocCommentsAndTags(answer); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - assert.equal(getTextOfJSDocComment(commentsAndTags[0].comment), "The answer to everything."); - - assert.deepEqual(getJSDocTags(answer), []); - }); - - test("returns individual tags when the host node does not own all of them", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** @type {string} */ -const value = "hello"; - -const cast = /** @type {number} */ (someValue); -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const statements = [...sourceFile.statements].filter(isVariableStatement); - - // The @type cast tag is not owned by `castDecl`, so no tags qualify and - // the JSDoc comment is not returned at all. - const castDecl = statements[1].declarationList.declarations[0]; - assert.deepEqual(getJSDocCommentsAndTags(castDecl), []); - }); - - test("returns an individual JSDocTag for a parameter matched by name", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), - "/src/main.js": ` -/** - * @param {string} name the name to measure - * @returns {number} the length - */ -var measure = function (name) { - return name.length; -}; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.js"); - assert.ok(sourceFile); - const variable = sourceFile.statements.find(isVariableStatement); - assert.ok(variable); - const funcExpr = variable.declarationList.declarations[0].initializer; - assert.ok(funcExpr); - const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; - - // A Parameter host node returns its matching @param tag directly as a - // JSDocTag, not wrapped in the enclosing JSDoc comment. - const commentsAndTags = getJSDocCommentsAndTags(param); - assert.equal(commentsAndTags.length, 1); - const [tag] = commentsAndTags; - assert.ok(isJSDocParameterTag(tag)); - assert.ok(isIdentifier(tag.name)); - assert.equal(tag.name.text, "name"); - }); - - test("returns the whole JSDoc comment when the host node owns multiple tags", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers. - * @param a the first number - * @param b the second number - * @returns the sum - */ -export function add(a: number, b: number): number { - return a + b; -} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const add = [...sourceFile.statements].find(isFunctionDeclaration); - assert.ok(add); - - // All three tags on `add`'s JSDoc comment are owned by `add`, so the - // whole comment is returned as a single entry rather than three tags. - const commentsAndTags = getJSDocCommentsAndTags(add); - assert.equal(commentsAndTags.length, 1); - assert.ok(isJSDoc(commentsAndTags[0])); - - // Flattening still yields all three tags, in order, via getJSDocTags. - assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); - }); -}); - -describe("Checker - getPropertiesOfType", { concurrency }, () => { - test("returns properties of an object type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Person { - name: string; - age: number; - greet(): void; -} -export declare const p: Person; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Person {\n name: string;\n age: number;\n greet(): void;\n}\nexport declare const p: Person;\n`; - const pos = src.indexOf("p: Person"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const props = project.checker.getPropertiesOfType(type); - assert.ok(props.length >= 3, `Expected at least 3 properties, got ${props.length}`); - const names = props.map(p => p.name); - assert.ok(names.includes("name"), "should have 'name' property"); - assert.ok(names.includes("age"), "should have 'age' property"); - assert.ok(names.includes("greet"), "should have 'greet' property"); - }); -}); - -describe("Checker - getIndexInfosOfType", { concurrency }, () => { - test("returns index signatures of an indexed type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface StringMap { - [key: string]: number; -} -export declare const m: StringMap; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface StringMap {\n [key: string]: number;\n}\nexport declare const m: StringMap;\n`; - const pos = src.indexOf("m: StringMap"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const indexInfos = project.checker.getIndexInfosOfType(type); - assert.ok(indexInfos.length > 0, "Should have at least one index info"); - const info = indexInfos[0]; - assert.ok(info.keyType); - assert.ok(info.keyType.flags & TypeFlags.String, `Expected string key type, got flags ${info.keyType.flags}`); - assert.ok(info.valueType); - assert.ok(info.valueType.flags & TypeFlags.Number, `Expected number value type, got flags ${info.valueType.flags}`); - assert.equal(info.isReadonly, false); - }); - - test("readonly index signature reports isReadonly true", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface ReadonlyMap { - readonly [key: string]: number; -} -export declare const m: ReadonlyMap; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface ReadonlyMap {\n readonly [key: string]: number;\n}\nexport declare const m: ReadonlyMap;\n`; - const pos = src.indexOf("m: ReadonlyMap"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const indexInfos = project.checker.getIndexInfosOfType(type); - assert.ok(indexInfos.length > 0); - assert.equal(indexInfos[0].isReadonly, true); - }); -}); - -describe("Checker - TypeScript API parity", { concurrency }, () => { - const files = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Box { - value: T; - chain(): this; - [key: string]: T | ((...args: never[]) => unknown); - [index: number]: T; -} - -/** Returns the input value. - * @deprecated Use identity instead. - */ -export function legacy(value: T): Promise { - return Promise.resolve(value); -} - -declare function consume(value: string | number): void; -consume(1); - -export type Exported = number; -`, - }; - - test("exposes interface this types and checker operations", () => { - using api = spawnAPI(files); - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - const boxSymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Box")); - assert.ok(boxSymbol); - const boxType = project.checker.getDeclaredTypeOfSymbol(boxSymbol) as InterfaceType; - assert.ok(boxType.isClassOrInterface()); - const thisType = boxType.getThisType(); - assert.ok(thisType); - assert.equal(thisType.isThisType, true); - assert.equal(project.checker.typeToString(thisType), "this"); - - const stringInfo = project.checker.getIndexInfoOfType(boxType, IndexKind.String); - assert.ok(stringInfo); - assert.ok(stringInfo.keyType.flags & TypeFlags.String); - const numberInfo = project.checker.getIndexInfoOfType(boxType, IndexKind.Number); - assert.ok(numberInfo); - assert.ok(numberInfo.keyType.flags & TypeFlags.Number); - assert.strictEqual(project.checker.getIndexTypeOfType(boxType, IndexKind.String), stringInfo.valueType); - assert.strictEqual(project.checker.getIndexTypeOfType(boxType, IndexKind.Number), numberInfo.valueType); - const valueType = project.checker.getTypeOfPropertyOfType(boxType, "value"); - assert.ok(valueType); - assert.equal(project.checker.typeToString(valueType), "T"); - assert.equal(project.checker.getTypeOfPropertyOfType(boxType, "missing"), undefined); - - const legacySymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("legacy")); - assert.ok(legacySymbol); - const legacyType = project.checker.getTypeOfSymbol(legacySymbol); - const signature = (project.checker.getSignaturesOfType(legacyType, SignatureKind.Call))[0]; - assert.ok(signature); - const awaitedType = project.checker.getAwaitedType(signature.getReturnType()); - assert.ok(awaitedType); - assert.equal(project.checker.typeToString(awaitedType), "Awaited"); - - const exportedSymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Exported =")); - assert.ok(exportedSymbol); - const localSymbol = (project.checker.getSymbolsInScope(sourceFile, SymbolFlags.TypeAlias)).find(symbol => symbol.name === "Exported"); - assert.ok(localSymbol); - assert.notEqual(localSymbol.id, exportedSymbol.id); - assert.strictEqual(project.checker.getExportSymbolOfSymbol(localSymbol), exportedSymbol); - - let call: import("@typescript/typescript/unstable/ast").CallExpression | undefined; - sourceFile.forEachChild(function visit(node) { - if (isCallExpression(node) && sourceFile.text.slice(node.expression.pos, node.expression.end).trim() === "consume") { - call = node; - } - node.forEachChild(visit); - }); - assert.ok(call); - const contextualType = project.checker.getContextualTypeForArgumentAtIndex(call, 0); - assert.ok(contextualType); - assert.equal(project.checker.typeToString(contextualType), "string | number"); - }); - - test("uses Strada-compatible JsxEmit values", () => { - assert.equal(JsxEmit.React, 2); - assert.equal(JsxEmit.ReactNative, 3); - }); -}); - -describe("Checker - getConstraintOfTypeParameter", { concurrency }, () => { - test("returns constraint of a type parameter", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function identity(x: T): T { return x; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function identity(x: T): T { return x; }`; - const pos = src.indexOf("identity<"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - assert.ok(sigs[0].typeParameters && sigs[0].typeParameters.length > 0, "Should have type parameters"); - const typeParams = sigs[0].getTypeParameters(); - const constraint = project.checker.getConstraintOfTypeParameter(typeParams[0]); - assert.ok(constraint); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - }); -}); - -describe("Checker - TypeParameter getters", { concurrency }, () => { - test("getConstraint() and getDefault() return the constraint and default types", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function f(x: T): T { return x; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function f(x: T): T { return x; }`; - const pos = src.indexOf("f<"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = sigs[0].getTypeParameters(); - assert.ok(typeParams.length > 0, "Should have type parameters"); - const typeParam = typeParams[0] as TypeParameter; - - const constraint = typeParam.getConstraint(); - assert.ok(constraint); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - - const defaultType = typeParam.getDefault(); - assert.ok(defaultType); - assert.ok(defaultType.flags & TypeFlags.StringLiteral, `Expected string literal default, got flags ${defaultType.flags}`); - }); - - test("getConstraint() and getDefault() return undefined when there is none", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function f(x: T): T { return x; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function f(x: T): T { return x; }`; - const pos = src.indexOf("f<"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = sigs[0].getTypeParameters(); - assert.ok(typeParams.length > 0, "Should have type parameters"); - const typeParam = typeParams[0] as TypeParameter; - - assert.equal(typeParam.getConstraint(), undefined); - assert.equal(typeParam.getDefault(), undefined); - }); -}); - -describe("Checker - getTypeArguments", { concurrency }, () => { - test("returns type arguments of a generic instantiation", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const arr: Array = [1, 2, 3];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export const arr: Array = [1, 2, 3];`; - const pos = src.indexOf("arr:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeArgs = project.checker.getTypeArguments(type as TypeReference); - assert.ok(typeArgs.length > 0, "Should have type arguments"); - assert.ok(typeArgs[0].flags & TypeFlags.Number, `Expected number type argument, got flags ${typeArgs[0].flags}`); - }); - - test("a wrongly-typed call throws on the client without taking down the server", () => { - const src = `export const s: string = ""; export const arr: Array = [1];`; - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // `string` is not a type reference. When getTypeArguments is reached - // with one, the server panics, but the per-request panic recovery - // converts that into an error response rather than crashing the process. - const sSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); - assert.ok(sSymbol); - const sType = project.checker.getTypeOfSymbol(sSymbol); - assert.ok(sType); - assert.throws(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); - - // The server survived: a subsequent valid request still succeeds. - const arrSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("arr:")); - assert.ok(arrSymbol); - const arrType = project.checker.getTypeOfSymbol(arrSymbol); - assert.ok(arrType); - const typeArgs = project.checker.getTypeArguments(arrType as TypeReference); - assert.ok(typeArgs.length > 0, "Server should still serve valid requests"); - }); -}); - -describe("Checker - getBaseConstraintOfType", { concurrency }, () => { - test("returns the base constraint of a type parameter", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function identity(x: T): T { return x; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `export function identity(x: T): T { return x; }`; - const pos = src.indexOf("identity<"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); - assert.ok(sigs.length > 0); - const typeParams = sigs[0].getTypeParameters(); - const constraint = project.checker.getBaseConstraintOfType(typeParams[0]); - assert.ok(constraint, "Should resolve a base constraint"); - assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); - }); - - test("returns undefined for a non-instantiable type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const x: number = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `export const x: number = 1;`.indexOf("x:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const constraint = project.checker.getBaseConstraintOfType(type); - assert.equal(constraint, undefined); - }); -}); - -describe("Checker - getPropertyOfType", { concurrency }, () => { - test("returns a named property symbol of a type", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export interface Person { - name: string; - age: number; -} -export declare const p: Person; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = `\nexport interface Person {\n name: string;\n age: number;\n}\nexport declare const p: Person;\n`; - const pos = src.indexOf("p: Person"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const nameProp = project.checker.getPropertyOfType(type, "name"); - assert.ok(nameProp, "Should find 'name' property"); - assert.equal(nameProp.name, "name"); - const missing = project.checker.getPropertyOfType(type, "doesNotExist"); - assert.equal(missing, undefined); - }); -}); - -describe("Checker - getConstantValue", { concurrency }, () => { - test("returns numeric value of an enum member", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum E { A = 1, B = 2 }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let memberB: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) { - const text = sourceFile.text.slice(node.pos, node.end).trim(); - if (text.startsWith("B")) memberB = node; - } - node.forEachChild(visit); - }); - assert.ok(memberB, "Should find enum member B"); - const value = project.checker.getConstantValue(memberB); - assert.equal(value, 2); - }); - - test("returns infinite numeric enum values without changing equivalent strings", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum E { - Positive = 1e999, - Negative = -1e999, - PositiveNaN = NaN, - NegativeNaN = -NaN, - PositiveString = "+Infinity", - NegativeString = "-Infinity", - NaNString = "NaN", - }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const members: Node[] = []; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) members.push(node); - node.forEachChild(visit); - }); - assert.equal(members.length, 7); - - assert.equal(project.checker.getConstantValue(members[0]), Infinity); - assert.equal(project.checker.getConstantValue(members[1]), -Infinity); - assert.equal(project.checker.getConstantValue(members[2]), NaN); - assert.equal(project.checker.getConstantValue(members[3]), NaN); - assert.equal(project.checker.getConstantValue(members[4]), "+Infinity"); - assert.equal(project.checker.getConstantValue(members[5]), "-Infinity"); - assert.equal(project.checker.getConstantValue(members[6]), "NaN"); - }); - - test("returns string value of a string-initialized enum member", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export enum Color { Red = "red" }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let member: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.EnumMember) member = node; - node.forEachChild(visit); - }); - assert.ok(member); - const value = project.checker.getConstantValue(member); - assert.equal(value, "red"); - }); -}); - -describe("Checker - getSignatureFromDeclaration", { concurrency }, () => { - test("returns the signature of a function declaration", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let funcDecl: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) funcDecl = node; - node.forEachChild(visit); - }); - assert.ok(funcDecl, "Should find the function declaration"); - const sig = project.checker.getSignatureFromDeclaration(funcDecl); - assert.ok(sig, "Should resolve a signature"); - assert.equal(sig.parameters.length, 2); - const returnType = project.checker.getReturnTypeOfSignature(sig); - assert.ok(returnType); - assert.ok(returnType.flags & TypeFlags.Number); - }); -}); - -describe("Checker - getExportSpecifierLocalTargetSymbol", { concurrency }, () => { - test("resolves the local target of an export specifier", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const value = 42; -export { value as renamed }; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - let exportSpecifier: Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ExportSpecifier) exportSpecifier = node; - node.forEachChild(visit); - }); - assert.ok(exportSpecifier, "Should find the export specifier"); - const target = project.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); - assert.ok(target, "Should resolve a local target symbol"); - assert.equal(target.name, "value"); - }); -}); - -describe("Checker - getAliasedSymbol", { concurrency }, () => { - test("resolves an import alias to its target symbol", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/foo.ts": `export const foo = 42;`, - "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = `import { foo } from "./foo";`.indexOf("foo }"); - const aliasSymbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(aliasSymbol); - assert.ok(aliasSymbol.flags & SymbolFlags.Alias, "Import binding should be an alias"); - const aliased = project.checker.getAliasedSymbol(aliasSymbol); - assert.ok(aliased, "Should resolve the aliased symbol"); - assert.equal(aliased.name, "foo"); - assert.ok(!(aliased.flags & SymbolFlags.Alias), "Target should not be an alias"); - }); -}); - -describe("Checker - getFullyQualifiedName", { concurrency }, () => { - test("returns module-qualified names for exported symbols and dotted names for members", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": ` -export namespace Outer { - export class Inner {} -} -export class Standalone {} -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol); - const exports = project.checker.getExportsOfModule(moduleSymbol); - const standalone = exports.find(e => e.name === "Standalone"); - assert.ok(standalone); - assert.equal(project.checker.getFullyQualifiedName(standalone), `"/src/index".Standalone`); - const outer = exports.find(e => e.name === "Outer"); - assert.ok(outer); - const inner = (outer.getExports()).get("Inner" as __String); - assert.ok(inner); - assert.equal(project.checker.getFullyQualifiedName(inner), `"/src/index".Outer.Inner`); - }); -}); - -describe("Checker - getExportsOfModule", { concurrency }, () => { - test("returns all exports including re-exports via 'export *'", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/inner.ts": `export const innerValue = 1;`, - "/src/index.ts": ` -export const direct = 1; -export * from "./inner"; -`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); - assert.ok(moduleSymbol, "Source file should have a module symbol"); - const exports = project.checker.getExportsOfModule(moduleSymbol); - const names = exports.map(e => e.name); - assert.ok(names.includes("direct"), "should include directly-declared export"); - assert.ok(names.includes("innerValue"), "should include 'export *' re-export"); - }); -}); - -describe("Checker - getSymbolsInScope", { concurrency }, () => { - const scopeFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -const outerValue = 1; -interface OuterType { x: number; } -function f() { - const innerValue = 2; - return innerValue; -} -`, - }; - - test("returns symbols visible at a position", () => { - using api = spawnAPI(scopeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); - const symbols = project.checker.getSymbolsInScope( - { document: "/src/main.ts", position: pos }, - SymbolFlags.Value, - ); - const names = symbols.map(s => s.name); - assert.ok(names.includes("innerValue"), "should include local variable"); - assert.ok(names.includes("outerValue"), "should include outer variable"); - assert.ok(names.includes("f"), "should include enclosing function"); - assert.ok(!names.includes("OuterType"), "should not include type-only meanings"); - }); - - test("returns type symbols when asked for type meaning at a node", () => { - using api = spawnAPI(scopeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - const symbols = project.checker.getSymbolsInScope(sourceFile, SymbolFlags.Type); - const names = symbols.map(s => s.name); - assert.ok(names.includes("OuterType"), "should include interface declared in file"); - assert.ok(names.includes("Array"), "should include global type symbols"); - }); - - // Regression test: `<<` binds tighter than `-` in Go but looser in JS, so SymbolFlagsAll's - // `(1<<30) - 1` needs those parens or the generated enum silently becomes `1 << 29`. - test("SymbolFlags.All includes both value and type meanings", () => { - using api = spawnAPI(scopeFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); - const symbols = project.checker.getSymbolsInScope( - { document: "/src/main.ts", position: pos }, - SymbolFlags.All, - ); - const names = symbols.map(s => s.name); - assert.ok(names.includes("innerValue"), "should include local value symbol"); - assert.ok(names.includes("OuterType"), "should include type symbol declared in file"); - }); -}); - -describe("Symbol - getDocumentationComment and getJsDocTags", { concurrency }, () => { - const docFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -/** - * Adds two numbers together. - * @param a the first number - * @returns the sum - */ -export function add(a: number, b: number): number { return a + b; } -`, - }; - - test("getDocumentationComment returns the leading comment text", () => { - using api = spawnAPI(docFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = docFiles["/src/main.ts"].indexOf("add(a"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const doc = symbol.getDocumentationComment(project.checker); - assert.ok(doc.includes("Adds two numbers together"), `Expected documentation, got: ${doc}`); - assert.ok(!doc.includes("@param"), "Documentation comment should not include tags"); - }); - - test("getJsDocTags returns structured tag name/text pairs", () => { - using api = spawnAPI(docFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = docFiles["/src/main.ts"].indexOf("add(a"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const tags = symbol.getJsDocTags(project.checker); - const param = tags.find(t => t.name === "param"); - assert.ok(param, `Expected a @param tag, got: ${JSON.stringify(tags)}`); - assert.equal(param.text, "a the first number"); - const returns = tags.find(t => t.name === "returns"); - assert.ok(returns, `Expected a @returns tag, got: ${JSON.stringify(tags)}`); - assert.equal(returns.text, "the sum"); - }); -}); - -describe("TypeParameter - isThisType", { concurrency }, () => { - test("isThisType is true for the polymorphic 'this' type in a class method", () => { - const src = `\nexport class Builder {\n setName(name: string): this { return this; }\n}\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // ": this {" — offset 2 past ': ' lands on 't' in the return-type 'this' - const pos = src.indexOf(": this {") + 2; - const type = project.checker.getTypeAtPosition("/src/main.ts", pos); - assert.ok(type, "Expected a type at the 'this' position"); - assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); - const typeParam = type as TypeParameter; - assert.equal(typeParam.isThisType, true); - }); - - test("isThisType is absent for a regular generic type parameter", () => { - const src = `\nexport function identity(x: T): T { return x; }\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - // Point to 'T' in the type parameter declaration '' — getTypeAtPosition - // on a type annotation reference doesn't resolve to TypeParameter, but - // the declaration position does. - const pos = src.indexOf("") + 1; - const type = project.checker.getTypeAtPosition("/src/main.ts", pos); - assert.ok(type, "Expected a type at the 'T' position"); - assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); - const typeParam = type as TypeParameter; - assert.ok(!typeParam.isThisType, "Expected isThisType to be absent/false for a regular type parameter"); - }); -}); - -describe("Type - getAliasTypeArguments", { concurrency }, () => { - test("returns the type arguments of a single-param generic type alias", () => { - const src = `\ntype Box = { value: T };\nexport const x: Box = { value: "hi" };\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("x:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 1, "Expected 1 alias type argument"); - assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected string, got flags ${aliasArgs[0].flags}`); - }); - - test("returns multiple type arguments for a multi-param generic type alias", () => { - const src = `\ntype Pair = [A, B];\nexport const p: Pair = ["hello", 42];\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("p:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 2, "Expected 2 alias type arguments"); - assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected first arg to be string, got flags ${aliasArgs[0].flags}`); - assert.ok(aliasArgs[1].flags & TypeFlags.Number, `Expected second arg to be number, got flags ${aliasArgs[1].flags}`); - }); - - test("returns empty array for a non-alias generic type", () => { - const src = `\nexport const arr: Array = ["hello"];\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("arr:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasArgs = type.getAliasTypeArguments(); - assert.equal(aliasArgs.length, 0, "Expected no alias type arguments for a direct generic reference"); - }); -}); - -describe("Type - getAliasSymbol", { concurrency }, () => { - test("returns the symbol for a non-generic type alias", () => { - // Object-type aliases preserve aliasSymbol; primitive aliases (type Foo = string) do not. - const src = `\ntype Point = { x: number; y: number };\nexport const p: Point = { x: 1, y: 2 };\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("p:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = type.getAliasSymbol(); - assert.ok(aliasSymbol, "Expected alias symbol to exist"); - assert.equal(aliasSymbol.name, "Point"); - }); - - test("returns the symbol for a generic type alias", () => { - const src = `\ntype Container = { item: T };\nexport const c: Container = { item: 42 };\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("c:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = type.getAliasSymbol(); - assert.ok(aliasSymbol, "Expected alias symbol for generic alias"); - assert.equal(aliasSymbol.name, "Container"); - }); - - test("returns undefined for a non-alias type", () => { - const src = `\nexport const str: string = "test";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("str:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - const aliasSymbol = type.getAliasSymbol(); - assert.equal(aliasSymbol, undefined, "Expected no alias symbol for primitive type"); - }); -}); - -describe("IntrinsicType - intrinsicName", { concurrency }, () => { - test("intrinsicName matches the primitive type name", () => { - const src = `\nexport const x: string = "hello";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = project.checker.getStringType(); - assert.equal((stringType as IntrinsicType).intrinsicName, "string"); - const anyType = project.checker.getAnyType(); - assert.equal((anyType as IntrinsicType).intrinsicName, "any"); - const neverType = project.checker.getNeverType(); - assert.equal((neverType as IntrinsicType).intrinsicName, "never"); - const pos = src.indexOf("x:"); - const sym = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(sym); - const litType = project.checker.getTypeOfSymbol(sym); - assert.ok(litType); - assert.ok(litType.flags & TypeFlags.Intrinsic); - assert.equal((litType as IntrinsicType).intrinsicName, "string"); - }); -}); - -describe("FreshableType - getFreshType and getRegularType", { concurrency }, () => { - test("LiteralType.value is empty string for the empty-string literal type", () => { - const src = `\nexport const empty: "" = "";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("empty:")); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); - const literal = type as LiteralType; - assert.equal(literal.value, "", "value should be empty string, not undefined"); - }); - - test("LiteralType.value is accessible via the FreshableType hierarchy", () => { - const src = `\nexport const greeting: "hello" = "hello";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); - const literal = type as LiteralType; - assert.equal(literal.value, "hello"); - }); - - test("BigIntLiteralType.value is a bigint (positive and negative)", () => { - const src = `\nexport const pos = 123n;\nexport const neg = -123n;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const posSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); - assert.ok(posSymbol); - const posType = project.checker.getTypeOfSymbol(posSymbol); - assert.ok(posType); - assert.ok(posType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); - const posLiteral = posType as BigIntLiteralType; - assert.equal(typeof posLiteral.value, "bigint"); - assert.equal(posLiteral.value, 123n); - - const negSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); - assert.ok(negSymbol); - const negType = project.checker.getTypeOfSymbol(negSymbol); - assert.ok(negType); - assert.ok(negType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); - const negLiteral = negType as BigIntLiteralType; - assert.equal(typeof negLiteral.value, "bigint"); - assert.equal(negLiteral.value, -123n); - }); - - test("NumberLiteralType.value is infinity (positive and negative)", () => { - const src = `\nexport const pos = 1e999;\nexport const neg = -1e999;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const posSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); - assert.ok(posSymbol); - const posType = project.checker.getTypeOfSymbol(posSymbol); - assert.ok(posType); - assert.ok(posType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); - const posLiteral = posType as NumberLiteralType; - assert.equal(typeof posLiteral.value, "number"); - assert.equal(posLiteral.value, Infinity); - - const negSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); - assert.ok(negSymbol); - const negType = project.checker.getTypeOfSymbol(negSymbol); - assert.ok(negType); - assert.ok(negType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); - const negLiteral = negType as NumberLiteralType; - assert.equal(typeof negLiteral.value, "number"); - assert.equal(negLiteral.value, -Infinity); - }); - - test("getFreshType() returns a fresh twin with matching value", () => { - const src = `\nexport const greeting: "hello" = "hello";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); - const fresh = (type as FreshableType).getFreshType(); - assert.ok(fresh, "Expected getFreshType() to return non-undefined for a literal type"); - assert.ok(fresh.flags & TypeFlags.StringLiteral, "Fresh type should be a StringLiteral"); - assert.equal((fresh as LiteralType).value, "hello", "Fresh type should carry the same value"); - assert.notEqual(fresh.id, type.id, "Fresh type should not be the original type"); - const freshFresh = fresh.getFreshType(); - assert.ok(freshFresh, "Expected getFreshType() to return non-undefined for a fresh type"); - assert.equal(freshFresh.id, fresh.id, "Fresh type of a fresh type should be the fresh type"); - }); - - test("getRegularType() on a fresh literal returns the regular twin", () => { - // The initial type response from getTypeOfSymbol does not always include the - // regularType handle, so getRegularType() is tested via the fresh twin which - // always includes its regularType in its own response. - const src = `\nexport const greeting: "hello" = "hello";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("greeting:"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); - const fresh = (type as FreshableType).getFreshType(); - assert.ok(fresh, "Need fresh type for this test"); - assert.ok(fresh.flags & TypeFlags.Freshable, "Fresh type should be a freshable type"); - const regular = fresh.getRegularType(); - assert.ok(regular, "Expected getRegularType() on the fresh twin to return non-undefined"); - assert.ok(regular.flags & TypeFlags.StringLiteral, "Regular type should be a StringLiteral"); - assert.equal((regular as LiteralType).value, "hello", "Regular type should carry the same value"); - assert.equal(regular.id, type.id, "Regular type should be the original type"); - }); - - test("getFreshType() and getRegularType() work for computed enum types (TypeFlags.Enum)", () => { - // getTypeOfSymbol on an ambient enum member returns the FRESH computed enum type. - // For fresh types: getFreshType() returns self, getRegularType() returns the regular twin. - const src = `\ndeclare enum Status { Pending }\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("Pending"); - const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(symbol); - const type = project.checker.getTypeOfSymbol(symbol); - assert.ok(type); - assert.ok(type.flags & TypeFlags.Enum, `Expected TypeFlags.Enum, got ${type.flags}`); - assert.ok(type.flags & TypeFlags.Freshable, "Enum type should be freshable"); - // The returned type IS the fresh type: getFreshType() returns itself - const fresh = (type as FreshableType).getFreshType(); - assert.ok(fresh, "Expected getFreshType() to return non-undefined"); - assert.equal(fresh.id, type.id, "getFreshType() on a fresh enum type returns itself"); - // getRegularType() returns the regular twin (a different type) - const regular = (type as FreshableType).getRegularType(); - assert.ok(regular, "Expected getRegularType() to return non-undefined"); - assert.ok(regular.flags & TypeFlags.Enum, "Regular enum type should also have TypeFlags.Enum"); - assert.notEqual(regular.id, type.id, "Regular type should be distinct from the fresh type"); - // Round-trip: regular → getFreshType() → back to the original fresh type - const backToFresh = (regular as FreshableType).getFreshType(); - assert.ok(backToFresh); - assert.equal(backToFresh.id, type.id, "Round-trip through regular/fresh returns the original type"); - }); -}); - -describe("Checker - isContextSensitive", { concurrency }, () => { - test("arrow function with no type annotation is context sensitive", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export const fn = (x) => x;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - // Find the arrow function node - let arrowFn: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.ArrowFunction) { - arrowFn = node; - } - node.forEachChild(visit); - }); - assert.ok(arrowFn, "Should find an arrow function"); - const result = project.checker.isContextSensitive(arrowFn); - assert.equal(result, true); - }); -}); - -describe("Checker - isTypeAssignableTo", { concurrency }, () => { - test("returns true when source is assignable to target", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = project.checker.getStringType(); - const anyType = project.checker.getAnyType(); - const neverType = project.checker.getNeverType(); - assert.ok(project.checker.isTypeAssignableTo(stringType, stringType), "string assignable to string"); - assert.ok(project.checker.isTypeAssignableTo(stringType, anyType), "string assignable to any"); - assert.ok(project.checker.isTypeAssignableTo(neverType, stringType), "never assignable to string (bottom type)"); - }); - - test("returns false when source is not assignable to target", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": `export {};`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const stringType = project.checker.getStringType(); - const numberType = project.checker.getNumberType(); - assert.ok(!project.checker.isTypeAssignableTo(numberType, stringType), "number not assignable to string"); - assert.ok(!project.checker.isTypeAssignableTo(stringType, numberType), "string not assignable to number"); - }); - - test("a string literal type is assignable to string but not number", () => { - const src = `\nexport const x: "hello" = "hello";\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/main.ts": src, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const pos = src.indexOf("x:"); - const sym = project.checker.getSymbolAtPosition("/src/main.ts", pos); - assert.ok(sym); - const litType = project.checker.getTypeOfSymbol(sym); - assert.ok(litType); - assert.ok(litType.flags & TypeFlags.StringLiteral); - const stringType = project.checker.getStringType(); - const numberType = project.checker.getNumberType(); - assert.ok(project.checker.isTypeAssignableTo(litType, stringType)); - assert.ok(!project.checker.isTypeAssignableTo(litType, numberType)); - }); -}); - -describe("Printer", { concurrency }, () => { - const emitterFiles = { - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": ` -export const x = 42; -export function greet(name: string): string { return name; } -export type Pair = [string, number]; -export const obj = { m: 1, s: "hi", b: true }; -`, - }; - - test("printNode with factory-created keyword type", () => { - using api = spawnAPI(emitterFiles); - - const node = createKeywordTypeNode(SyntaxKind.StringKeyword); - const text = api.printer.printNode(node); - assert.strictEqual(text, "string"); - }); - - test("printFile", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sourceFile = snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"); - assert(sourceFile); - const text = api.printer.printFile(sourceFile); - assert.strictEqual( - text, - `export const x = 42; -export function greet(name: string): string { return name; } -export type Pair = [ - string, - number -]; -export const obj = { m: 1, s: "hi", b: true }; -`, - ); - }); - - test("printFile preserves JSON source file semantics", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { resolveJsonModule: true }, - files: ["/src/data.json"], - }), - "/src/data.json": `{"x": 1}`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const sourceFile = snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/data.json"); - assert(sourceFile); - assert.strictEqual(api.printer.printFile(sourceFile), `{ "x": 1 }\n`); - }); - - test("printNode with factory-created union type", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createUnionTypeNode([ - createKeywordTypeNode(SyntaxKind.StringKeyword), - createKeywordTypeNode(SyntaxKind.NumberKeyword), - ]); - const text = api.printer.printNode(node); - assert.strictEqual(text, "string | number"); - }); - - test("printNode with factory-created function type", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const param = createParameterDeclaration( - undefined, - undefined, - createIdentifier("x"), - undefined, - createKeywordTypeNode(SyntaxKind.StringKeyword), - undefined, - ); - const node = createFunctionTypeNode( - undefined, - [param], - createKeywordTypeNode(SyntaxKind.NumberKeyword), - ); - const text = api.printer.printNode(node); - assert.strictEqual(text, "(x: string) => number"); - }); - - test("printNode with factory-created type reference", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createTypeReferenceNode(createIdentifier("Array"), [ - createKeywordTypeNode(SyntaxKind.StringKeyword), - ]); - const text = api.printer.printNode(node); - assert.strictEqual(text, "Array"); - }); - - test("printNode with factory-created array type", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createArrayTypeNode(createKeywordTypeNode(SyntaxKind.NumberKeyword)); - const text = api.printer.printNode(node); - assert.strictEqual(text, "number[]"); - }); - - test("typeToTypeNode + printNode round-trip", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - - const greetPos = src.indexOf("greet("); - const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeNode = checker.typeToTypeNode(type); - assert.ok(typeNode); - const text = api.printer.printNode(typeNode); - assert.ok(text); - assert.strictEqual(text, "(name: string) => string"); - }); - - test("visitEachChild on typeToTypeNode result with keyword types", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - const objPos = src.indexOf("obj"); - const symbol = checker.getSymbolAtPosition("/src/main.ts", objPos); - assert.ok(symbol, "should find symbol for obj"); - const type = checker.getTypeOfSymbol(symbol); - assert.ok(type); - const typeNode = checker.typeToTypeNode(type); - assert.ok(typeNode, "typeToTypeNode should return a type node"); - - // Recursively visit to reach PropertySignature.type where isTypeNode is checked. - const visited = (function visit(node: Node): Node { - return visitEachChild(node, visit); - })(typeNode); - assert.ok(visited, "visitEachChild should not throw"); - - const kinds = [ - SyntaxKind.NumberKeyword, - SyntaxKind.StringKeyword, - SyntaxKind.BooleanKeyword, - SyntaxKind.AnyKeyword, - SyntaxKind.VoidKeyword, - SyntaxKind.UndefinedKeyword, - SyntaxKind.NeverKeyword, - SyntaxKind.UnknownKeyword, - SyntaxKind.BigIntKeyword, - SyntaxKind.ObjectKeyword, - SyntaxKind.SymbolKeyword, - SyntaxKind.IntrinsicKeyword, - SyntaxKind.ExpressionWithTypeArguments, - SyntaxKind.JSDocAllType, - SyntaxKind.JSDocNullableType, - SyntaxKind.JSDocNonNullableType, - SyntaxKind.JSDocOptionalType, - SyntaxKind.JSDocVariadicType, - SyntaxKind.JSDocTypeExpression, - SyntaxKind.JSDocTypeLiteral, - SyntaxKind.JSDocSignature, - ]; - for (const kind of kinds) { - assert.ok(isTypeNode({ kind } as any), `isTypeNode should accept ${SyntaxKind[kind]}`); - } - }); - - test("typeToString", () => { - using api = spawnAPI(emitterFiles); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const src = emitterFiles["/src/main.ts"]; - - const greetPos = src.indexOf("greet("); - const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = checker.getTypeOfSymbol(symbol); - assert.ok(type); - const text = checker.typeToString(type); - assert.strictEqual(text, "(name: string) => string"); - }); - - test("typeToString with TypeFormatFlags", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `export function greet(name: string): string[] { return [name]; }`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; - const greetPos = "export function greet".indexOf("greet"); - const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); - assert.ok(symbol); - const type = checker.getTypeOfSymbol(symbol); - assert.ok(type); - const text = checker.typeToString(type, undefined, TypeFormatFlags.WriteArrayAsGenericType); - assert.strictEqual(text, "(name: string) => Array"); - }); - - test("printNode with terminateUnterminatedLiterals option", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/main.ts": `const foo = /asdfasf;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/main.ts"); - assert.ok(sourceFile); - - // Find the regex literal node - let regexNode: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (node.kind === SyntaxKind.RegularExpressionLiteral) { - regexNode = node; - return; - } - node.forEachChild(visit); - }); - assert.ok(regexNode, "Should find a regex literal"); - - // Without the option, regex is printed as-is - const textWithout = api.printer.printNode(regexNode); - assert.strictEqual(textWithout, "/asdfasf"); - - // With the option, the closing slash is added - const textWith = api.printer.printNode(regexNode, { terminateUnterminatedLiterals: true }); - assert.strictEqual(textWith, "/asdfasf/"); - }); -}); - -describe("Program - selected file emit", { concurrency }, () => { - const files = { - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - declarationMap: true, - emitDeclarationOnly: true, - noEmit: true, - noEmitOnError: true, - sourceMap: true, - }, - }), - "/src/a.ts": `export const a: string = 1;`, - "/src/b.ts": `export const b = 2;`, - }; - - test("getJavaScriptEmit forces JavaScript and source maps", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.getJavaScriptEmit(["/src/a.ts", "/src/b.ts"]); - assert.equal(result.emitSkipped, false); - assert.deepEqual([...result.outputFiles.keys()], [ - "/src/a.js", - "/src/a.js.map", - "/src/b.js", - "/src/b.js.map", - ]); - const outputFileName = toRootedFilePath("/src/a.js", undefined); - assert.equal(result.outputFiles.get(outputFileName)?.sourceFileName, "/src/a.ts"); - assert.match(result.outputFiles.get(outputFileName)!.text, /export const a = 1/); - assert.equal(fs.readFile(toRootedFilePath("/src/a.js", undefined)), serverFS.useOS); - }); - - test("getDeclarationEmit forces declarations and declaration maps", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.getDeclarationEmit(["/src/a.ts", "/src/b.ts"]); - assert.equal(result.emitSkipped, false); - assert.deepEqual([...result.outputFiles.keys()], [ - "/src/a.d.ts", - "/src/a.d.ts.map", - "/src/b.d.ts", - "/src/b.d.ts.map", - ]); - assert.equal(result.outputFiles.get(toRootedFilePath("/src/a.d.ts", undefined))?.sourceFileName, "/src/a.ts"); - assert.equal(fs.readFile(toRootedFilePath("/src/a.d.ts", undefined)), serverFS.useOS); - }); - - test("selected file emit accepts empty arrays", () => { - using api = spawnAPI({ ...files }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual((project.program.getJavaScriptEmit([])).outputFiles, new Map()); - assert.deepEqual((project.program.getDeclarationEmit([])).outputFiles, new Map()); - }); -}); - -describe("SnapshotInternalAPI - formatNodeForInsertion", { concurrency }, () => { - test("formats a synthesized statement with correct indentation for insertion inside a function body", () => { - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `function greet(name: string) {\n console.log(name);\n}\n`, - }; - using api = spawnAPI(files); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], - NodeFlags.Const, - ), - ); - - const sourceText = files["/src/index.ts"]; - const insertionPos = sourceText.indexOf("\n console.log") + 1; - - const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); - assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation, got: ${JSON.stringify(formatted)}`); - }); - - test("formats a node at top-level with no indentation", () => { - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `const a = 1;\nconst b = 2;\n`, - }; - using api = spawnAPI(files); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("y"), undefined, undefined, createNumericLiteral("42", 0))], - NodeFlags.Const, - ), - ); - - const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", 0); - assert.ok(formatted.includes("const y = 42;"), `Expected 'const y = 42;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(!formatted.startsWith(" "), `Expected no leading spaces at top level, got: ${JSON.stringify(formatted)}`); - }); - - test("formats a synthesized statement with correct indentation when non-ASCII characters precede the insertion position", () => { - // 'é' is 1 UTF-16 code unit but 2 UTF-8 bytes, so UTF-16 and UTF-8 offsets diverge after it. - // This test verifies the position is correctly converted from UTF-16 to UTF-8 before use. - const files = { - "/tsconfig.json": "{}", - "/src/index.ts": `// \u00e9\nfunction greet(name: string) {\n console.log(name);\n}\n`, - }; - using api = spawnAPI(files); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - - const node = createVariableStatement( - undefined, - createVariableDeclarationList( - [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], - NodeFlags.Const, - ), - ); - - // insertionPos is the UTF-16 code-unit offset of the start of the indented line inside the function body. - const sourceText = files["/src/index.ts"]; - const insertionPos = sourceText.indexOf("\n console.log") + 1; - - const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); - // The node should be indented to match the function body (4 spaces) - assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); - assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation (UTF-16 offset correctly converted), got: ${JSON.stringify(formatted)}`); - }); -}); - -describe("modifierFlags", { concurrency }, () => { - test("export async function has Export | Async flags", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `export async function foo() {}`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) { - fnNode = node; - } - node.forEachChild(visit); - }); - assert.ok(fnNode, "Should find a function declaration"); - assert.ok(fnNode.modifierFlags & ModifierFlags.Export, "Should have Export flag"); - assert.ok(fnNode.modifierFlags & ModifierFlags.Async, "Should have Async flag"); - assert.strictEqual(fnNode.modifierFlags, ModifierFlags.Export | ModifierFlags.Async); - }); - - test("node without modifiers has ModifierFlags.None", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function bar() {}`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; - sourceFile.forEachChild(function visit(node) { - if (isFunctionDeclaration(node)) { - fnNode = node; - } - node.forEachChild(visit); - }); - assert.ok(fnNode, "Should find a function declaration"); - assert.strictEqual(fnNode.modifierFlags, ModifierFlags.None); - }); -}); - -describe("Checker - getResolvedSymbol", { concurrency }, () => { - test("resolves variable reference to its declaration symbol", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const x = 1;\nconst y = x;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // Find the 'x' identifier in `const y = x` - let refNode: import("@typescript/typescript/unstable/ast").Identifier | undefined; - sourceFile.forEachChild(function visit(node) { - if (isIdentifier(node) && node.text === "x") { - // We want the reference, not the declaration - take the last one - refNode = node; - } - node.forEachChild(visit); - }); - assert.ok(refNode, "Should find identifier 'x'"); - - const symbol = project.checker.getResolvedSymbol(refNode); - assert.ok(symbol, "Should resolve symbol for 'x'"); - assert.equal(symbol.name, "x"); - }); -}); - -describe("VariableDeclarationList - BlockScoped flags", { concurrency }, () => { - test("let declaration has Let flag", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `let x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let declList: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isVariableDeclarationList(node)) { - declList = node; - } - node.forEachChild(visit); - }); - assert.ok(declList, "Should find VariableDeclarationList"); - assert.ok(declList.flags & NodeFlags.Let, "Should have Let flag"); - }); - - test("const declaration has Const flag", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - let declList: import("@typescript/typescript/unstable/ast").Node | undefined; - sourceFile.forEachChild(function visit(node) { - if (isVariableDeclarationList(node)) { - declList = node; - } - node.forEachChild(visit); - }); - assert.ok(declList, "Should find VariableDeclarationList"); - assert.ok(declList.flags & NodeFlags.Const, "Should have Const flag"); - }); -}); - -describe("AST roundtrips", { concurrency }, () => { - test("TypeOperator operator kind", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `function test(arg: readonly number[]) { }\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const param = (sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").FunctionDeclaration).parameters[0]; - assert(param); - const type = param.type as import("@typescript/typescript/unstable/ast").TypeOperatorNode; - assert(type); - assert.equal(type.kind, SyntaxKind.TypeOperator); - assert.equal(type.operator, SyntaxKind.ReadonlyKeyword); - const printed = api.printer.printFile(sourceFile); - assert.equal(sourceFile.text, printed); - }); - - test("SpreadAssignment roundtrip", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `var thing = { ...other };\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const object = stmt.declarationList.declarations[0].initializer as import("@typescript/typescript/unstable/ast").ObjectLiteralExpression; - const assignment = object.properties[0] as import("@typescript/typescript/unstable/ast").SpreadAssignment; - assert(assignment); - assert.equal(assignment.kind, SyntaxKind.SpreadAssignment); - const expr = assignment.expression; - assert(expr); - assert.equal(expr.kind, SyntaxKind.Identifier); - const printed = api.printer.printFile(sourceFile); - assert.equal(sourceFile.text, printed); - }); - - test("VariableDeclarationList const flag clone", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `const thing = 123;\n`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - { - const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const list = stmt.declarationList; - assert(list.flags & NodeFlags.Const); - } - const cloned = getSynthesizedDeepClone(sourceFile); - { - const stmt = cloned.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; - const list = stmt.declarationList; - assert(list.flags & NodeFlags.Const); - } - const printed = api.printer.printFile(cloned); - assert.equal(sourceFile.text, printed); - }); - - test("JSDoc before ExpressionStatement allowed", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": ` -/** - * A doc. - */ -doThing(); - `, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert(sourceFile); - const printed = api.printer.printFile(sourceFile); - assert.equal(sourceFile.text.trim(), printed.trim()); - }); - - test("Factory ModifierList auto-conversion", () => { - using api = spawnAPI(); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const node = createTypeAliasDeclaration( - [createToken(SyntaxKind.ExportKeyword)], - createIdentifier("Test"), - undefined, - createKeywordTypeNode(SyntaxKind.AnyKeyword), - ); - - assert.equal(api.printer.printNode(node), "export type Test = any;"); - - const cloned = getSynthesizedDeepClone(node); - assert.equal(api.printer.printNode(cloned), "export type Test = any;"); - }); - - test("Parse-clone-emit roundtrip", () => { - const tsSource = fileURLToPath(new URL("../../../../tsc/testdata/fixtures", import.meta.url).toString()); - using api = new API({ - cwd: tsSource, - }); - const target = { - cloneCrashed: 0, - printCrashed: 0, - clonePrintCrashed: 0, - }; - const errors = { ...target }; - - for (const tsconfig of globSync("**/tsconfig.json", { cwd: tsSource })) { - const snapshot = api.createSnapshot({ openProject: resolve(tsSource, tsconfig) }); - const project = snapshot.getConfiguredProject(tsconfig); - assert(project); - for (const file of project.rootFiles) { - const source = project.program.getSourceFile(file); - assert(source); - let clone: typeof source; - - try { - api.printer.printNode(source); - } - catch { - errors.printCrashed++; - continue; - } - - try { - clone = getSynthesizedDeepClone(source); - } - catch { - errors.cloneCrashed++; - continue; - } - - try { - api.printer.printNode(clone); - } - catch { - errors.clonePrintCrashed++; - continue; - } - } - } - - assert.deepEqual(errors, target); - }); -}); - -describe("Program - diagnostics", { concurrency }, () => { - test("getSyntacticDiagnostics", () => { - const source = `const x: = 1;`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSyntacticDiagnostics("/src/index.ts"); - assert.deepEqual(diags[0].startPosition, { line: 0, character: 9 }); - assert.deepEqual(diags[0].endPosition, { line: 0, character: 10 }); - assert.deepEqual(diags[0].sourceLines, [{ line: 0, text: source }]); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...rangeOf(source, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }]); - }); - - test("getSemanticDiagnostics with messageChain and relatedInformation", () => { - const source = `interface Props { callback: (x: string) => void }\nconst p: Props = { callback: (x: number) => {} };`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSemanticDiagnostics("/src/index.ts"); - const declRange = rangeOf(source, "callback", 0); - const assignRange = rangeOf(source, "callback", 1); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2322, - category: DiagnosticCategory.Error, - text: "Type '(x: number) => void' is not assignable to type '(x: string) => void'.", - messageChain: [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2328, - category: DiagnosticCategory.Error, - text: "Types of parameters 'x' and 'x' are incompatible.", - messageChain: [{ - fileName: "/src/index.ts", - ...assignRange, - code: 2322, - category: DiagnosticCategory.Error, - text: "Type 'string' is not assignable to type 'number'.", - }], - }], - relatedInformation: [{ - fileName: "/src/index.ts", - ...declRange, - code: 6500, - category: DiagnosticCategory.Message, - text: "The expected type comes from property 'callback' which is declared here on type 'Props'", - }], - }]); - }); - - test("getSuggestionDiagnostics", () => { - const source = `export function f() { const x = 1; return x; }\nconst _unused = 1;\n`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSuggestionDiagnostics("/src/index.ts"); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/src/index.ts", - ...rangeOf(source, "_unused"), - code: 6133, - category: DiagnosticCategory.Suggestion, - text: "'_unused' is declared but its value is never read.", - reportsUnnecessary: true, - }]); - }); - - test("getConfigFileParsingDiagnostics", () => { - const config = `{ "compilerOptions": { "target": "invalid" } }`; - using api = spawnAPI({ - "/tsconfig.json": config, - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getConfigFileParsingDiagnostics(); - assert.deepEqual(withoutFormattingContext(diags), [{ - fileName: "/tsconfig.json", - ...rangeOf(config, `"invalid"`), - code: 6046, - category: DiagnosticCategory.Error, - text: "Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'es2026', 'esnext'.", - }]); - }); - - test("getConfigFileNames and getConfigSourceFile", () => { - const baseConfigText = `{ "compilerOptions": { "strict": true } }`; - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.base.json": baseConfigText, - "/tsconfig.json": `{ "extends": "./tsconfig.base.json", "files": ["./src/index.ts"] }`, - "/src/index.ts": `export const x = 1;`, - }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const names = project.program.getConfigFileNames(); - assert.deepEqual(names, ["/tsconfig.json", "/tsconfig.base.json"]); - - const rootConfig = project.program.getConfigSourceFile("/tsconfig.json"); - assert.ok(rootConfig); - assert.equal(rootConfig.fileName, "/tsconfig.json"); - assert.equal(project.program.getSourceFile("/tsconfig.json"), undefined); - const configObject = cast(cast(rootConfig.statements[0], isExpressionStatement).expression, isObjectLiteralExpression); - const configProperty = cast(configObject.properties[0], isPropertyAssignment); - assert.throws(() => getSymbol(configProperty), /Cached source file not found/); - assert.throws(() => api.getSymbol(configProperty), /Cached source file not found/); - - fs.writeFile!(toRootedFilePath("/tsconfig.base.json", undefined), `{ "compilerOptions": { "strict": false } }`); - const extendedConfig = project.program.getConfigSourceFile("/tsconfig.base.json"); - assert.ok(extendedConfig); - assert.equal(extendedConfig.fileName, "/tsconfig.base.json"); - assert.equal(extendedConfig.getFullText(), baseConfigText); - - const nonConfig = project.program.getConfigSourceFile("/src/index.ts"); - assert.equal(nonConfig, undefined); - }); - - test("getDeclarationDiagnostics", () => { - using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "declaration": true } }`, - "/src/index.ts": `export const x: number = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getDeclarationDiagnostics("/src/index.ts"); - assert.deepEqual(diags, []); - }); - - test("getBindDiagnostics", () => { - const source = `let x = 1;\nlet x = 2;`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getBindDiagnostics("/src/index.ts"); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/src/index.ts", - ...rangeOf(source, "x", 0), - code: 2451, - category: DiagnosticCategory.Error, - text: "Cannot redeclare block-scoped variable 'x'.", - }, - { - fileName: "/src/index.ts", - ...rangeOf(source, "x", 1), - code: 2451, - category: DiagnosticCategory.Error, - text: "Cannot redeclare block-scoped variable 'x'.", - }, - ]); - }); - - test("getProgramDiagnostics", () => { - const config = `{ "compilerOptions": { "moduleResolution": "bundler", "module": "nodenext" } }`; - using api = spawnAPI({ - "/tsconfig.json": config, - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getProgramDiagnostics(); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/tsconfig.json", - ...rangeOf(config, `"bundler"`), - code: 5095, - category: DiagnosticCategory.Error, - text: "Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.", - }, - { - fileName: "/tsconfig.json", - ...rangeOf(config, `"bundler"`), - code: 5109, - category: DiagnosticCategory.Error, - text: "Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.", - }, - ]); - }); - - test("getGlobalDiagnostics", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `export const x = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getGlobalDiagnostics(); - assert.deepEqual(diags, []); - }); - - test("getGlobalDiagnostics returns file-less diagnostics from the checker", () => { - using api = spawnAPI({ - "/tsconfig.json": `{ "compilerOptions": { "noLib": true } }`, - "/src/index.ts": `export const x = [1, 2, 3];`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getGlobalDiagnostics(); - // With noLib, the checker reports "Cannot find global type" diagnostics that - // are not associated with any source file. - assert.ok(diags.length > 0, "expected global diagnostics to be reported"); - for (const diag of diags) { - assert.equal(diag.fileName, undefined); - assert.equal(diag.code, 2318); - assert.equal(diag.category, DiagnosticCategory.Error); - } - assert.ok( - diags.some(d => d.text === "Cannot find global type 'Array'."), - "expected a global diagnostic for the 'Array' type", - ); - }); - - test("getSyntacticDiagnostics with multiple files", () => { - const sourceA = `const a: = 1;`; - const sourceB = `const b: = 2;`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - "/src/clean.ts": `const c = 3;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSyntacticDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.deepEqual(withoutFormattingContext(diags), [ - { - fileName: "/src/a.ts", - ...rangeOf(sourceA, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }, - { - fileName: "/src/b.ts", - ...rangeOf(sourceB, "="), - code: 1110, - category: DiagnosticCategory.Error, - text: "Type expected.", - }, - ]); - }); - - test("getSemanticDiagnostics with multiple files", () => { - const sourceA = `export const a: number = "hello";`; - const sourceB = `export const b: string = 42;`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSemanticDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.equal(diags.length, 2); - assert.equal(diags[0].fileName, "/src/a.ts"); - assert.equal(diags[0].code, 2322); - assert.equal(diags[1].fileName, "/src/b.ts"); - assert.equal(diags[1].code, 2322); - }); - - test("getBindDiagnostics with multiple files", () => { - const sourceA = `let x = 1;\nlet x = 2;`; - const sourceB = `let y = 1;\nlet y = 2;`; - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": sourceA, - "/src/b.ts": sourceB, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getBindDiagnostics(["/src/a.ts", "/src/b.ts"]); - assert.equal(diags.length, 4); - assert.equal(diags.filter(d => d.fileName === "/src/a.ts").length, 2); - assert.equal(diags.filter(d => d.fileName === "/src/b.ts").length, 2); - }); - - test("diagnostics with no files argument returns all", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": `const a: = 1;`, - "/src/b.ts": `const b: = 2;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSyntacticDiagnostics(); - assert.equal(diags.length, 2); - }); - - test("diagnostics with empty files array returns empty", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/a.ts": `const a: = 1;`, - "/src/b.ts": `const b: = 2;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const diags = project.program.getSyntacticDiagnostics([]); - assert.deepEqual(diags, []); - }); -}); - -describe("getDefaultProjectForFile", { concurrency }, () => { - test("snapshot opens reject unreadable virtual files without panicking", () => { - const fileName = "/src/App.vue.ts"; - const source = `export const component = 1;`; - const fs = createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ files: ["/src/index.ts"] }), - "/src/index.ts": `export const x = 1;`, - "/src/App.vue": source, - }); - let virtualFileAvailable = false; - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: { - ...fs, - readFile: path => virtualFileAvailable && path === fileName ? source : fs.readFile!(path), - fileExists: path => virtualFileAvailable && path === fileName ? true : fs.fileExists!(path), - }, - }); - const snapshot = api.createSnapshot({ - openProjects: ["/tsconfig.json"], - openFiles: ["/src/index.ts"], - }); - - const expectedError = /client error: failed to .*snapshot: no project found for opened file: \/src\/App\.vue\.ts/; - assert.throws(() => snapshot.update({ openFiles: [fileName] }), expectedError); - assert.throws(() => api.createSnapshot({ openFiles: [fileName] }), expectedError); - - virtualFileAvailable = true; - const updated = snapshot.update({ openFiles: [fileName] }); - const project = updated.getDefaultProjectForFile(fileName); - assert.ok(project); - assert.equal(project.configFileName, undefined); - assert.equal((project.program.getSourceFile(fileName))?.text, source); - assert.equal(snapshot.getDefaultProjectForFile(fileName), undefined); - assert.ok(updated.getConfiguredProject("/tsconfig.json")); - - virtualFileAvailable = false; - const reopen = { openFiles: [fileName], fileNotifications: { deleted: [fileName] } }; - assert.throws(() => updated.update(reopen), expectedError); - assert.equal((project.program.getSourceFile(fileName))?.text, source); - }); - - test("finds inferred project for d.ts in node_modules after openFiles", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // The d.ts is not imported, so it is not in the project's program - const dtsSf = project.program.getSourceFile("/node_modules/my-lib/index.d.ts"); - assert.equal(dtsSf, undefined, "d.ts not in import graph should not be found via project.program.getSourceFile"); - - // Before opening the file, getDefaultProjectForFile returns undefined (no error) - const noProject = snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.equal(noProject, undefined, "getDefaultProjectForFile returns undefined for unloaded file"); - - // Load the file into the inferred project via createSnapshot openFiles - const snapshot2 = api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); - const defaultProject = snapshot2.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.ok(defaultProject, "getDefaultProjectForFile should find inferred project after openFiles"); - - const fooPos = `export declare const foo: string;`.indexOf("foo"); - const fooType = defaultProject.checker.getTypeAtPosition("/node_modules/my-lib/index.d.ts", fooPos); - assert.ok(fooType); - assert.ok(fooType.flags & TypeFlags.String); - }); - - test("inferred project reflects file changes without a follow-up open/close request", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/loose.ts": `export const foo = 1;`, - }); - using api = disposableAPI; - - const snapshot1 = api.createSnapshot({ openFiles: ["/loose.ts"] }); - const project1 = snapshot1.getDefaultProjectForFile("/loose.ts"); - assert.ok(project1, "file with no config file in its ancestry should load into the inferred project"); - const sf1 = project1.program.getSourceFile("/loose.ts"); - assert.ok(sf1); - assert.equal(sf1.text, `export const foo = 1;`); - - // Mutate the file and notify only via fileChanges — no follow-up openFiles/closeFiles. - fs.writeFile!(toRootedFilePath("/loose.ts", undefined), `export const foo = 2;`); - const snapshot2 = api.createSnapshot({ - openFiles: ["/loose.ts"], - fileNotifications: { changed: ["/loose.ts"] }, - }); - - const project2 = snapshot2.getDefaultProjectForFile("/loose.ts"); - assert.ok(project2); - const sf2 = project2.program.getSourceFile("/loose.ts"); - assert.ok(sf2); - assert.equal( - sf2.text, - `export const foo = 2;`, - "inferred project's program should reflect the file change even without a follow-up open/close request", - ); - }); - - test("opens multiple inferred files in one snapshot", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - "/node_modules/other-lib/package.json": JSON.stringify({ name: "other-lib", types: "./index.d.ts" }), - "/node_modules/other-lib/index.d.ts": `export declare const bar: number;`, - }); - - const snapshot = api.createSnapshot({ - openFiles: ["/node_modules/my-lib/index.d.ts", "/node_modules/other-lib/index.d.ts"], - }); - - const firstProject = snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); - assert.ok(firstProject, "previously opened file should remain in the inferred project"); - const secondProject = snapshot.getDefaultProjectForFile("/node_modules/other-lib/index.d.ts"); - assert.ok(secondProject, "newly opened file should be in the inferred project"); - }); - - test("opening a file resolves to a configured project via ancestor search", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - }); - - // Open the file without first opening the project. Like LSP's didOpen, this - // should search ancestor directories for a tsconfig that contains the file. - const snapshot = api.createSnapshot({ openFiles: ["/src/index.ts"] }); - const defaultProject = snapshot.getDefaultProjectForFile("/src/index.ts"); - assert.ok(defaultProject, "should find a project for the opened file"); - assert.equal( - defaultProject.configFileName, - "/tsconfig.json", - "opened file should resolve to the containing configured project, not the inferred project", - ); - }); - - test("closeProjects releases a project opened via openProjects", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - }); - - const opened = api.createSnapshot({ openProjects: ["/tsconfig.json"] }); - assert.ok(opened.getConfiguredProject("/tsconfig.json"), "project should be open after openProjects"); - - const closed = api.createSnapshot({ closeProjects: ["/tsconfig.json"] }); - assert.equal( - closed.getConfiguredProject("/tsconfig.json"), - undefined, - "project should be unloaded after closeProjects", - ); - }); - - test("closeFiles releases a file opened via openFiles", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x = 1;`, - "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), - "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, - }); - - api.createSnapshot({ openProject: "/tsconfig.json" }); - const opened = api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); - assert.ok( - opened.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), - "file should resolve to a project after openFiles", - ); - - const closed = api.createSnapshot({ closeFiles: ["/node_modules/my-lib/index.d.ts"] }); - assert.equal( - closed.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), - undefined, - "file should no longer resolve to a project after closeFiles", - ); - }); -}); - -describe("Program - emit", { concurrency }, () => { - const files = { - "/tsconfig.json": `{ - "compilerOptions": { - "outDir": "dist", - "declaration": true, - } - }`, - "/src/index.ts": "export const x: number = 1;", - "/src/testing.ts": "export const y: string = 'typescript';", - }; - - test("emit all files", () => { - const fs = createVirtualFileSystem({ ...files }); - - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.emit(); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.js", - "/dist/src/index.d.ts", - "/dist/src/testing.js", - "/dist/src/testing.d.ts", - ], - fileSystem: undefined, - }); - - const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, `export const x = 1;\n`); - assert.strictEqual(dts, `export declare const x: number;\n`); - assert.strictEqual(js2, `export const y = 'typescript';\n`); - assert.strictEqual(dts2, `export declare const y: string;\n`); - }); - - test("emit only dts", () => { - const fs = createVirtualFileSystem({ ...files }); - - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.emit(EmitOnly.OnlyDts); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.d.ts", - "/dist/src/testing.d.ts", - ], - fileSystem: undefined, - }); - - const js = fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, serverFS.useOS); - assert.strictEqual(dts, `export declare const x: number;\n`); - assert.strictEqual(js2, serverFS.useOS); - assert.strictEqual(dts2, `export declare const y: string;\n`); - }); - - test("emit only js", () => { - const fs = createVirtualFileSystem({ ...files }); - - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: fs, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.emit(EmitOnly.OnlyJs); - assert.deepEqual(result, { - diagnostics: [], - emitSkipped: false, - emittedFiles: [ - "/dist/src/index.js", - "/dist/src/testing.js", - ], - fileSystem: undefined, - }); - - const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); - const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); - const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); - const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); - assert.strictEqual(js, `export const x = 1;\n`); - assert.strictEqual(dts, serverFS.useOS); - assert.strictEqual(js2, `export const y = 'typescript';\n`); - assert.strictEqual(dts2, serverFS.useOS); - }); - - test("emitToString emits the whole program and respects emitOnly", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.emitToString(EmitOnly.OnlyDts); - assert.deepEqual([...result.outputFiles.keys()], [ - "/dist/src/index.d.ts", - "/dist/src/testing.d.ts", - ]); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)), serverFS.useOS); - }); - - test("whole-program emit includes option-controlled maps", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - declaration: true, - declarationMap: true, - outDir: "dist", - sourceMap: true, - }, - }), - "/src/index.ts": "export const value: number = 1;", - }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - const result = project.program.emit(); - assert.deepEqual( - new Set(result.emittedFiles), - new Set([ - "/dist/src/index.js", - "/dist/src/index.js.map", - "/dist/src/index.d.ts", - "/dist/src/index.d.ts.map", - ]), - ); - assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.js.map", undefined))); - assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.d.ts.map", undefined))); - - const js = project.program.emitToString(EmitOnly.OnlyJs); - assert.deepEqual([...js.outputFiles.keys()], [ - "/dist/src/index.js", - "/dist/src/index.js.map", - ]); - - const dts = project.program.emitToString(EmitOnly.OnlyDts); - assert.deepEqual([...dts.outputFiles.keys()], [ - "/dist/src/index.d.ts", - "/dist/src/index.d.ts.map", - ]); - }); - - test("noEmitOnError reports diagnostics without writing output", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ - compilerOptions: { - noEmitOnError: true, - outDir: "dist", - }, - }), - "/src/bad.ts": "export const bad = ;", - "/src/good.ts": "export const value = 1;", - }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const result = project.program.emit(); - assert.equal(result.emitSkipped, true); - assert.ok(result.diagnostics.some(d => d.code === 1109)); - assert.deepEqual(result.emittedFiles, []); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/bad.js", undefined)), serverFS.useOS); - assert.equal(fs.readFile(toRootedFilePath("/dist/src/good.js", undefined)), serverFS.useOS); - - const stringResult = project.program.emitToString(); - assert.equal(stringResult.emitSkipped, true); - assert.ok(stringResult.diagnostics.some(d => d.code === 1109)); - assert.deepEqual(stringResult.outputFiles, new Map()); - }); - - test("emit and emitToString respect noEmit", () => { - const { api: disposableAPI, fs } = spawnAPIWithFS({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { noEmit: true } }), - "/src/index.ts": "export const value = 1;", - }); - using api = disposableAPI; - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - assert.deepEqual(project.program.emit(), { - diagnostics: [], - emitSkipped: false, - emittedFiles: [], - fileSystem: undefined, - }); - assert.deepEqual(project.program.emitToString(), { - diagnostics: [], - emitSkipped: false, - outputFiles: new Map(), - }); - assert.equal(fs.readFile(toRootedFilePath("/src/index.js", undefined)), serverFS.useOS); - }); - - test("emit rejects unknown files and invalid emitOnly values", () => { - using api = spawnAPI({ ...files }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - let error: unknown; - try { - project.program.getJavaScriptEmit(["/src/missing.ts"]); - } - catch (e) { - error = e; - } - assert.match(String(error), /source file not found/); - - error = undefined; - try { - project.program.emitToString(3 as EmitOnly); - } - catch (e) { - error = e; - } - assert.match(String(error), /invalid emitOnly value/); - }); -}); - -describe("Timing", { concurrency }, () => { - test("collects combined client, server, and transport timing info", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ ...defaultFiles }), - collectTiming: true, - }); - - // Baseline: enabled, but nothing measured yet. - let info = api.getTimingInfo(); - assert.equal(info.enabled, true); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.recentRequests.length, 0); - - // Exercise a JSON request and a binary source-file request. - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // Client-side timing: round-trip latency and byte counts. - info = api.getTimingInfo(); - assert.ok(info.totals.requestCount >= 2, "expected at least two measured requests"); - assert.ok(info.totals.bytesSent > 0); - assert.ok(info.totals.bytesReceived > 0); - assert.ok(info.totals.roundTripMs >= 0); - - // Server-side timing is folded into the same snapshot. - assert.ok(info.totals.serverTimeMs >= 0); - assert.ok(info.totals.transportOverheadMs >= 0); - assert.equal( - info.totals.transportOverheadMs, - Math.max(0, info.totals.roundTripMs - info.totals.serverTimeMs), - ); - - // The ring buffer retains at most the 5 most recent requests. - assert.ok(info.recentRequests.length > 0); - assert.ok(info.recentRequests.length <= 5); - assert.ok(info.recentRequests.length <= info.totals.requestCount); - - for (const r of info.recentRequests) { - assert.ok(r.roundTripMs >= 0); - assert.ok(r.bytesSent >= 0); - assert.ok(r.bytesReceived >= 0); - assert.ok(typeof r.method === "string" && r.method.length > 0); - assert.equal(typeof r.timestamp, "number"); - // Transport overhead is present exactly when server time is. - assert.equal(r.transportOverheadMs === undefined, r.serverTimeMs === undefined); - if (r.serverTimeMs !== undefined) { - assert.ok(r.serverTimeMs >= 0); - assert.equal(r.transportOverheadMs, Math.max(0, r.roundTripMs - r.serverTimeMs)); - } - } - - // Server processing time is folded in for the recent requests. - assert.ok(info.recentRequests.every(r => r.serverTimeMs !== undefined), "server time should be reported"); - - // Reset clears totals and history on both client and server. - api.resetTimingInfo(); - info = api.getTimingInfo(); - assert.equal(info.enabled, true); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.totals.serverTimeMs, 0); - assert.equal(info.totals.transportOverheadMs, 0); - assert.equal(info.recentRequests.length, 0); - }); - - test("tracks source-file node materialization", () => { - using api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ ...defaultFiles }), - collectTiming: true, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sourceFile = project.program.getSourceFile("/src/index.ts"); - assert.ok(sourceFile); - - // The source file node itself is pre-cached, so before walking the - // tree no descendant nodes have been materialized. - let info = api.getTimingInfo(); - const before = info.totals.nodesMaterialized; - assert.equal(info.totals.sourceFilesFetched, 1, "one source file was fetched"); - assert.ok(info.totals.nodesFetched > 0, "the fetched file contributes materializable nodes"); - assert.equal(info.totals.nodesMaterialized, 0, "nothing walked yet, so no nodes materialized"); - - // Walk the whole tree to force lazy materialization of every node. - let visited = 0; - sourceFile.forEachChild(function visit(node) { - visited++; - node.forEachChild(visit); - }); - assert.ok(visited > 0, "expected to visit at least one node"); - - info = api.getTimingInfo(); - assert.ok( - info.totals.nodesMaterialized > before, - "walking the tree should materialize nodes", - ); - assert.ok( - info.totals.nodesMaterialized >= visited, - "every visited node should have been materialized", - ); - - // A full walk materializes (nearly) every fetched node, so the share - // of fetched nodes materialized should be substantial. - assert.equal(info.totals.sourceFilesFetched, 1); - assert.ok( - info.totals.nodesMaterialized > 0 - && info.totals.nodesMaterialized <= info.totals.nodesFetched, - "materialized nodes should be in (0, nodesFetched]", - ); - - // Reset clears materialization totals along with the rest. - api.resetTimingInfo(); - info = api.getTimingInfo(); - assert.equal(info.totals.nodesMaterialized, 0); - assert.equal(info.totals.sourceFilesFetched, 0); - assert.equal(info.totals.nodesFetched, 0); - }); - - test("is disabled by default", () => { - using api = spawnAPI(); - - api.parseConfigFile("/tsconfig.json"); - const info = api.getTimingInfo(); - assert.equal(info.enabled, false); - assert.equal(info.totals.requestCount, 0); - assert.equal(info.totals.nodesMaterialized, 0); - assert.equal(info.totals.sourceFilesFetched, 0); - assert.equal(info.totals.nodesFetched, 0); - assert.equal(info.recentRequests.length, 0); - }); -}); - -describe("runWithTemporaryFileUpdate", { concurrency }, () => { - test("temporary file update is visible in the callback and reverted afterward", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), - "/src/index.ts": `export const x: number = 1;`, - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - - // The original content type-checks cleanly. - const baseDiags = project.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(baseDiags.length, 0); - - // Keep a newer snapshot active to verify any active snapshot can be the base. - const latestSnapshot = api.createSnapshot(); - assert.notEqual(latestSnapshot.id, snapshot.id); - - // Inside the callback, the file has the temporary (erroneous) content. - let errorCount = -1; - api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const x: string = 1;`, tempSnapshot => { - const tempProject = tempSnapshot.getConfiguredProject("/tsconfig.json")!; - const diags = tempProject.program.getSemanticDiagnostics("/src/index.ts"); - errorCount = diags.length; - }); - assert.ok(errorCount > 0, "temporary content should produce a semantic error inside the callback"); - - // The original snapshot is unaffected by the temporary update. - const afterDiags = project.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(afterDiags.length, 0); - - // A subsequent independent snapshot can request the project again. - const snapshot2 = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project2 = snapshot2.getConfiguredProject("/tsconfig.json")!; - const diags2 = project2.program.getSemanticDiagnostics("/src/index.ts"); - assert.equal(diags2.length, 0); - }); - - test("reconstructs projects omitted from the response diff", () => { - using api = spawnAPI({ - "/first/tsconfig.json": `{}`, - "/first/index.ts": `export const first = 1;`, - "/second/tsconfig.json": `{}`, - "/second/index.ts": `export const second = 1;`, - }); - - const snapshot = api.createSnapshot({ - openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], - }); - const originalSecondProject = snapshot.getConfiguredProject("/second/tsconfig.json")!; - - api.runWithTemporaryFileUpdate(snapshot, "/first/index.ts", `export const first = 2;`, tempSnapshot => { - assert.equal(tempSnapshot.getProjects().length, 2); - assert.ok(tempSnapshot.getConfiguredProject("/first/tsconfig.json")); - const secondProject = tempSnapshot.getConfiguredProject("/second/tsconfig.json"); - assert.ok(secondProject); - assert.notStrictEqual(secondProject, originalSecondProject); - assert.equal((secondProject.program.getSourceFileNames()).includes("/second/index.ts" as RootedFilePath), true); - }); - }); - - test("updates synthetic programs with temporary contents", () => { - using api = spawnAPI({ - "/src/index.ts": `export const value: number = 1;`, - }); - const snapshot = api.createSnapshot({ - createPrograms: [{ - rootFiles: ["/src/index.ts"], - compilerOptions: { noLib: true, strict: true }, - }], - }); - const originalProgram = snapshot.operation.createdPrograms[0]; - - api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const value: string = 1;`, temporarySnapshot => { - const temporaryProgram = temporarySnapshot.getProgram(originalProgram.id); - assert.ok(temporaryProgram); - assert.equal((temporaryProgram.getSemanticDiagnostics("/src/index.ts")).length, 1); - }); - - assert.equal((originalProgram.getSemanticDiagnostics("/src/index.ts")).length, 0); - }); -}); - -function spawnAPIWithFS( - files: Record = { ...defaultFiles }, - onWrite?: (path: string) => void, -): { api: API; fs: ReturnType; } { - const fs = createVirtualFileSystem(files); - if (onWrite) { - const writeFile = fs.writeFile!; - fs.writeFile = (path, content) => { - onWrite(path); - writeFile(path, content); - }; - } - const api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs, - }); - return { api, fs }; -} - -/** Returns `{ pos, end }` for the nth (0-based, default 0) occurrence of `searchString` in `source`. */ -function rangeOf(source: string, searchString: string, occurrence: number = 0): { pos: number; end: number; } { - let index = -1; - for (let i = 0; i <= occurrence; i++) { - index = source.indexOf(searchString, index + 1); - if (index === -1) { - throw new Error(`Occurrence ${occurrence} of "${searchString}" not found in source`); - } - } - return { pos: index, end: index + searchString.length }; -} - -function withoutFormattingContext(value: T): T { - const formattingKeys = new Set(["startPosition", "endPosition", "sourceLines"]); - return JSON.parse(JSON.stringify(value, (key, item) => formattingKeys.has(key) ? undefined : item)) as T; -} - -function applyTextEdits(source: string, edits: readonly TextEdit[]): string { - const sorted = [...edits].sort((a, b) => b.pos - a.pos); - let result = source; - for (const edit of sorted) { - result = result.slice(0, edit.pos) + edit.newText + result.slice(edit.end); - } - return result; -} +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: test/async/api.test.ts +// Regenerate: npm run generate (from packages/typescript) +// +import { + type __String, + cast, + escapeLeadingUnderscores, + type Expression, + getJSDocCommentsAndTags, + getJSDocTags, + getSynthesizedDeepClone, + getTextOfJSDocComment, + InternalSymbolName, + isCallExpression, + isClassDeclaration, + isExpressionStatement, + isFunctionDeclaration, + isIdentifier, + isImportDeclaration, + isInterfaceDeclaration, + isJSDoc, + isJSDocParameterTag, + isModuleDeclaration, + isNamedImports, + isObjectLiteralExpression, + isPropertyAssignment, + isPropertyDeclaration, + isReturnStatement, + isShorthandPropertyAssignment, + isStringLiteral, + isTemplateHead, + isTemplateMiddle, + isTemplateTail, + isTypeAliasDeclaration, + isTypeNode, + isVariableDeclarationList, + isVariableStatement, + type Node, + type NodeArray, + NodeFlags, + type PathKey, + type RootedFilePath, + type SourceFile, + SyntaxKind, + tryGetAmbientModuleNameFromSymbolName, + unescapeLeadingUnderscores, +} from "@typescript/typescript/unstable/ast"; +import { + cloneNode, + createArrayTypeNode, + createFunctionTypeNode, + createIdentifier, + createKeywordTypeNode, + createNumericLiteral, + createParameterDeclaration, + createSourceFile, + createToken, + createTypeAliasDeclaration, + createTypeReferenceNode, + createUnionTypeNode, + createVariableDeclaration, + createVariableDeclarationList, + createVariableStatement, +} from "@typescript/typescript/unstable/ast/factory"; +import { visitEachChild } from "@typescript/typescript/unstable/ast/visitor"; +import { + createFileSystem, + createFileSystemLayer, + createFileSystemWithLib, + type FileSystemCallbacks, + serverFS, +} from "@typescript/typescript/unstable/fs"; +import { + rootedDirectoryPathFromPath, + rootedFilePathFromPath, + toRootedDirectoryPath, + toRootedFilePath, +} from "@typescript/typescript/unstable/path"; +import { + API, + type BigIntLiteralType, + CheckFlags, + type CompilerOptions, + type ConditionalType, + type ConfiguredProjectId, + DiagnosticCategory, + type DocumentIdentifier, + EmitOnly, + type FormatDiagnosticsHost, + type FreshableType, + getSymbol, + type ImportAdderAction, + type IndexedAccessType, + IndexKind, + type IndexType, + type InferredProjectId, + type InProgressSnapshot, + type InterfaceType, + type IntrinsicType, + isErrorType, + JsxEmit, + type LiteralType, + type MappedType, + ModifierFlags, + ModuleKind, + ModuleResolutionKind, + type ModuleResolver, + type NumberLiteralType, + ObjectFlags, + type Program, + type Project, + type ProjectId, + type RawCompilerOptions, + ScriptKind, + type Signature, + SignatureKind, + type Snapshot, + type StringMappingType, + SymbolFlags, + type SyntheticProjectId, + type TemplateLiteralType, + type TextEdit, + TypeFlags, + TypeFormatFlags, + type TypeParameter, + TypePredicateKind, + type TypeReference, + type UnionOrIntersectionType, + type UserPreferences, +} from "@typescript/typescript/unstable/sync"; +import assert from "node:assert"; +import { globSync } from "node:fs"; +import { resolve } from "node:path"; +import { + describe, + test, +} from "node:test"; +import { fileURLToPath } from "node:url"; +import { + getNodeId, + parseNodeHandleFromCompiler, + RemoteSourceFile, +} from "../../src/api/node/node.ts"; +import { isSignatureDeclaration } from "../../src/ast/is.ts"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "../testUtils.ts"; +import { + defaultFiles, + spawnAPI, +} from "./api.testUtils.ts"; + +const concurrency = areTestsFiltered(); + +describe("API", { concurrency }, () => { + test("getCurrentLanguageServerSnapshot is LSP-only", () => { + if (!!false) { + const standalone = new API(); + // @ts-expect-error The standalone API has no canonical language server state. + void standalone.getCurrentLanguageServerSnapshot(); + + const lsp = undefined! as API; + void lsp.getCurrentLanguageServerSnapshot({ openProjects: ["/tsconfig.json"] }); + const moduleResolver = undefined! as ModuleResolver; + void lsp.getCurrentLanguageServerSnapshot({ + createPrograms: [{ + rootFiles: ["/index.ts"], + compilerOptions: {}, + options: { moduleResolver }, + }], + }); + const baseSnapshot = undefined! as Snapshot; + void lsp.getCurrentLanguageServerSnapshot(undefined, baseSnapshot); + + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, options: { projectReferences: [{ path: "/tsconfig.json" }] } }] }); + void standalone.createModuleResolver({ outDir: "dist", rootDirs: ["src"], typeRoots: ["types"] }); + void standalone.transpileModule("", { compilerOptions: { outDir: "dist" } }); + + const formatDiagnosticsHost: FormatDiagnosticsHost = { + getCurrentDirectory: () => "/workspace", + getCanonicalFileName: fileName => fileName, + getNewLine: () => "\n", + }; + void formatDiagnosticsHost; + + // @ts-expect-error Snapshot parameters are excess-property checked. + void standalone.createSnapshot({ fileChanges: { changed: ["/index.ts"] } }); + // @ts-expect-error Synthetic program parameters are contextually typed and excess-property checked. + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: {}, unexpected: true }] }); + // @ts-expect-error Compiler options in synthetic program parameters are contextually typed and excess-property checked. + void standalone.createSnapshot({ createPrograms: [{ rootFiles: [], compilerOptions: { unexpected: true } }] }); + // @ts-expect-error Snapshot update parameters are excess-property checked. + void baseSnapshot.update({ fileChanges: { changed: ["/index.ts"] } }); + // @ts-expect-error Snapshot updates require an explicit changes object. + void baseSnapshot.update(undefined); + // @ts-expect-error Language server snapshot parameters are excess-property checked. + void lsp.getCurrentLanguageServerSnapshot({ fileChanges: { changed: ["/index.ts"] } }); + + const configured = undefined! as ConfiguredProjectId; + const inferred = undefined! as InferredProjectId; + const synthetic = undefined! as SyntheticProjectId; + const path: PathKey = configured; + const projectIds: ProjectId[] = [configured, inferred, synthetic]; + void path; + void projectIds; + // @ts-expect-error Project ID brands are not interchangeable. + const invalid: ConfiguredProjectId = synthetic; + void invalid; + + const callbacks: FileSystemCallbacks = { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: serverFS.useOS, + realpath: path => `${path}`, + stat: serverFS.fakeStat, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }; + void new API({ fs: callbacks }); + void new API({ fs: { ...callbacks, writeFile: serverFS.noop } }); + void new API({ + fs: { + ...callbacks, + realpath: () => serverFS.identity, + stat: () => serverFS.fakeStat, + writeFile: () => serverFS.noop, + }, + }); + void new API({ + fs: { + directoryExists: serverFS.error, + fileExists: serverFS.error, + getAccessibleEntries: serverFS.error, + readFile: serverFS.error, + realpath: serverFS.error, + stat: serverFS.error, + writeFile: serverFS.error, + removeFile: serverFS.error, + }, + }); + void new API({ + fs: { + directoryExists: () => serverFS.error, + fileExists: () => serverFS.error, + getAccessibleEntries: () => serverFS.error, + readFile: () => serverFS.error, + realpath: () => serverFS.error, + stat: () => serverFS.error, + writeFile: () => serverFS.error, + removeFile: () => serverFS.error, + }, + }); + // @ts-expect-error Filesystem callback configurations must specify every operation. + void new API({ fs: { readFile: serverFS.useOS } }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error Identity is only a valid realpath implementation. + readFile: serverFS.identity, + }, + }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error fakeStat is only a valid stat implementation. + fileExists: serverFS.fakeStat, + }, + }); + void new API({ + fs: { + ...callbacks, + // @ts-expect-error Noop is only a valid writeFile implementation. + readFile: serverFS.noop, + }, + }); + } + }); + + test("initializes once for concurrent first requests", () => { + using api = spawnAPI(); + const [commandLine, config] = api.batch( + api.parseCommandLine.gen(["--strict"]), + api.readConfigFile.gen("/tsconfig.json"), + ); + assert.equal(commandLine.options.strict, true); + assert.deepEqual(config.config, {}); + }); + + test("disposes", () => { + let disposedAPI: API; + { + using api = spawnAPI(); + api.parseCommandLine([]); + disposedAPI = api; + } + assert.throws(() => disposedAPI.parseCommandLine([])); + }); + + test("parseCommandLine", () => { + using api = spawnAPI(); + + const commandLine = api.parseCommandLine([ + "--strict", + "--outDir", + "dist", + "/src/index.ts", + ]); + assert.deepEqual(commandLine.fileNames, ["/src/index.ts"]); + assert.equal(commandLine.options.strict, true); + assert.equal( + resolve(commandLine.options.outDir!), + resolve(fileURLToPath(new URL("../../../../", import.meta.url)), "dist"), + ); + assert.deepEqual(commandLine.raw, { + strict: true, + outDir: "dist", + }); + assert.deepEqual(commandLine.errors, []); + }); + + test("parseCommandLine reports diagnostics", () => { + using api = spawnAPI(); + + const commandLine = api.parseCommandLine(["--notAnOption"]); + assert.deepEqual(commandLine.fileNames, []); + assert.equal(commandLine.errors.length, 1); + assert.equal(commandLine.errors[0].code, 5023); + }); + + test("readConfigFile", () => { + using api = spawnAPI({ + "/tsconfig.json": `{ + // Comments and trailing commas are supported. + "compilerOptions": { "strict": true, }, + }`, + }); + + const result = api.readConfigFile("/tsconfig.json"); + assert.deepEqual(result, { + config: { compilerOptions: { strict: true } }, + }); + }); + + test("readConfigFile reports read and parse errors", () => { + using api = spawnAPI({ + "/invalid.json": `{ "compilerOptions": { "strict": true,, } }`, + }); + + const invalid = api.readConfigFile("/invalid.json"); + assert.deepEqual(invalid.config, { compilerOptions: { strict: true } }); + assert.ok(invalid.error); + + const missing = api.readConfigFile("/missing.json"); + assert.deepEqual(missing.config, {}); + assert.equal(missing.error?.code, 5083); + }); + + test("parseJsonConfigFileContent with configDirectory", () => { + using api = spawnAPI(); + + const config = api.parseJsonConfigFileContent( + { + compilerOptions: { strict: true }, + files: ["index.ts"], + }, + { configDirectory: "/src" }, + ); + assert.deepEqual(config.fileNames, ["/src/index.ts"]); + assert.equal(config.options.strict, true); + assert.equal("configFilePath" in config.options, false); + assert.equal(config.compileOnSave, false); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent accepts non-object JSON", () => { + using api = spawnAPI(); + + const config = api.parseJsonConfigFileContent(null, { configDirectory: "/src" }); + assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent with configFileName", () => { + using api = spawnAPI(); + + const config = api.parseJsonConfigFileContent( + { + compilerOptions: { strict: true }, + files: ["index.ts"], + }, + { configFileName: "/src/tsconfig.json" }, + ); + assert.deepEqual(config.fileNames, ["/src/index.ts"]); + assert.equal(config.options.strict, true); + assert.equal(config.options.configFilePath, "/src/tsconfig.json"); + assert.deepEqual(config.errors, []); + }); + + test("parseJsonConfigFileContent preserves raw config", () => { + using api = spawnAPI(); + + const input = { + compileOnSave: true, + customSetting: { enabled: true }, + files: ["index.ts"], + }; + const config = api.parseJsonConfigFileContent(input, { configDirectory: "/src" }); + assert.deepEqual(config.raw, input); + assert.equal(config.compileOnSave, true); + }); + + test("parseJsonConfigFileContent preserves an empty files list", () => { + using api = spawnAPI(); + + const config = api.parseJsonConfigFileContent( + { files: [] }, + { configDirectory: "/src" }, + ); + assert.deepEqual(config.fileNames, []); + assert.equal(config.errors.length, 1); + assert.equal(config.errors[0].code, 18002); + }); + + test("parseJsonConfigFileContent reports null array elements", () => { + using api = spawnAPI(); + + const config = api.parseJsonConfigFileContent( + { files: [null], include: [null], exclude: [null] }, + { configDirectory: "/src" }, + ); + assert.equal(config.errors.length, 3); + assert.ok(config.errors.every(diagnostic => diagnostic.code === 5024)); + }); + + test("transpile", () => { + using api = spawnAPI({ + "/input.ts": "export const x: number = 1;", + }); + + const moduleOutput = api.transpileModule("export const x: number = 1;", { + compilerOptions: { module: ModuleKind.CommonJS }, + }); + assert.match(moduleOutput.outputText, /exports\.x = 1/); + + const isolatedDeclarationModuleOutput = api.transpileModule("export const x: number = 1;", { + compilerOptions: { declaration: true, isolatedDeclarations: true }, + reportDiagnostics: true, + }); + assert.equal(isolatedDeclarationModuleOutput.diagnostics?.length ?? 0, 0); + + const moduleFileOutput = api.transpileModuleFromFile({ uri: "file:///input.ts" }, { + compilerOptions: { module: ModuleKind.CommonJS }, + }); + assert.match(moduleFileOutput.outputText, /exports\.x = 1/); + + const declarationOutput = api.transpileDeclaration("export const x: number = 1;"); + assert.equal(declarationOutput.outputText, "export declare const x: number;\n"); + + const windowsDeclarationOutput = api.transpileDeclaration("export const x: number = 1;", { + fileName: "C:/Users/me/project/input.ts", + }); + assert.equal(windowsDeclarationOutput.outputText, "export declare const x: number;\n"); + + const declarationFileOutput = api.transpileDeclarationFromFile({ uri: "file:///input.ts" }); + assert.equal(declarationFileOutput.outputText, "export declare const x: number;\n"); + }); + + test("createSourceFile", () => { + using api = spawnAPI(); + const sourceText = "export const element =
;"; + using retained = api.createSourceFile("/component.tsx", sourceText); + const sourceFile = retained.sourceFile; + assert.equal(sourceFile.fileName, "/component.tsx"); + assert.match(sourceFile.path, /\/component\.tsx$/); + assert.equal(sourceFile.text, sourceText); + assert.equal(sourceFile.scriptKind, ScriptKind.TSX); + assert.equal(sourceFile.statements.length, 1); + assert.strictEqual(sourceFile.statements[0].parent, sourceFile); + + using retainedAgain = api.createSourceFile("/component.tsx", sourceText); + assert.strictEqual(retainedAgain.sourceFile, sourceFile); + assert.throws(() => api.createSourceFile("", ""), /fileName must not be empty/); + using dot = api.createSourceFile(".", ""); + assert.equal(dot.sourceFile.scriptKind, ScriptKind.TS); + + using overridden = api.createSourceFile("/component.txt", sourceText, { scriptKind: ScriptKind.TSX }); + assert.equal(overridden.sourceFile.scriptKind, ScriptKind.TSX); + assert.equal(overridden.sourceFile.statements.length, 1); + using defaultKind = api.createSourceFile("/component.txt", sourceText); + assert.notStrictEqual(defaultKind.sourceFile, overridden.sourceFile); + + using upperCase = api.createSourceFile("/CaseSensitive.ts", ""); + using lowerCase = api.createSourceFile("/casesensitive.ts", ""); + assert.notStrictEqual(lowerCase.sourceFile, upperCase.sourceFile); + assert.equal(upperCase.sourceFile.fileName, "/CaseSensitive.ts"); + assert.equal(lowerCase.sourceFile.fileName, "/casesensitive.ts"); + + assert.throws(() => api.createSourceFile("/invalid.ts", "", { scriptKind: 999 as ScriptKind }), /invalid scriptKind 999/); + + // Each lease can be disposed repeatedly without throwing or releasing another lease. + const firstDispose = retained.dispose(); + const secondDispose = retained.dispose(); + retained.dispose(); + using retainedAfterDispose = api.createSourceFile("/component.tsx", sourceText); + assert.strictEqual(retainedAfterDispose.sourceFile, retainedAgain.sourceFile); + }); + + test("remote declarations lazily fetch and cache binder symbols", () => { + const sourceText = "function present() {}"; + using api = spawnAPI({ + "/symbols.ts": sourceText, + }); + const snapshot = api.createSnapshot({ openFiles: ["/symbols.ts"] }); + const project = snapshot.getProjects()[0]; + const sourceFile = project.program.getSourceFile("/symbols.ts"); + assert.ok(sourceFile); + const declaration = sourceFile.statements[0]; + assert.ok(isFunctionDeclaration(declaration)); + const checkerSymbol = project.checker.getSymbolAtPosition("/symbols.ts", sourceText.indexOf("present")); + assert.ok(checkerSymbol); + + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): unknown; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let symbolRequests = 0; + client.apiRequest = (method, params) => { + if (method === "getSymbolOfDeclaration") symbolRequests++; + return apiRequest(method, params); + }; + + const first = getSymbol(declaration); + const concurrent = api.getSymbol(declaration); + assert.ok(first); + assert.strictEqual(first, checkerSymbol); + assert.strictEqual(concurrent, first); + assert.strictEqual(getSymbol(declaration), first); + assert.equal(symbolRequests, 1); + + snapshot.dispose(); + }); + + test("getSymbol rejects synthesized declarations", () => { + using api = spawnAPI(); + const local = createVariableDeclaration(createIdentifier("local"), undefined, undefined, undefined); + assert.throws(() => getSymbol(local), /Source file not found/); + assert.throws(() => api.getSymbol(local), /Source file not found/); + + using lease = api.createSourceFile("/symbols.ts", "function present() {}"); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + assert.ok(getSymbol(declaration)); + const shallowClone = cloneNode(declaration); + const deepClone = getSynthesizedDeepClone(declaration); + assert.throws(() => getSymbol(shallowClone), /Source file not found/); + assert.throws(() => api.getSymbol(deepClone), /Source file not found/); + assert.equal("getSymbol" in declaration, false); + }); + + test("source files own separate declaration result and request caches", () => { + using api = spawnAPI(); + using lease = api.createSourceFile("/symbols.ts", "function present() {}"); + const file = lease.sourceFile; + assert.ok(file instanceof RemoteSourceFile); + const cache = file.symbolCache; + assert.ok(cache); + const declaration = cast(file.statements[0], isFunctionDeclaration); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + const request = getSymbol(declaration); + const symbol = request; + assert.ok(symbol); + assert.strictEqual(cache.symbolsByDeclarationNodeIndex.get(index), symbol); + assert.strictEqual(cache.symbolsById.get(symbol.reference.id), symbol); + assert.equal(cache.declarationSymbolRequests.has(index), false); + api.clearSourceFileCache(); + assert.strictEqual(file.symbolCache, cache); + }); + + test("standalone getSymbol delegates to the source file's API", context => { + using api = spawnAPI(); + using lease = api.createSourceFile("/symbols.ts", "function present() {}"); + assert.ok(lease.sourceFile instanceof RemoteSourceFile); + assert.strictEqual(lease.sourceFile.api, api); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + // Materialize the sync API's lazy method before mocking it. + void api.getSymbol; + const method = context.mock.method(api, "getSymbol"); + const symbol = getSymbol(declaration); + assert.ok(symbol); + assert.equal(method.mock.callCount(), 1); + assert.strictEqual(api.getSymbol(declaration), symbol); + }); + + test("declaration symbol results survive releasing the last lease", () => { + using api = spawnAPI(); + const lease = api.createSourceFile("/symbols.ts", "function present() {}"); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + const symbol = getSymbol(declaration); + assert.ok(symbol); + + lease.dispose(); + assert.strictEqual(getSymbol(declaration), symbol); + }); + + test("declaration symbols can be fetched after clearing the client cache", () => { + using api = spawnAPI(); + using lease = api.createSourceFile("/symbols.ts", "function first() {} function second() {}"); + const first = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + const second = cast(lease.sourceFile.statements[1], isFunctionDeclaration); + const firstSymbol = getSymbol(first); + assert.ok(firstSymbol); + + api.clearSourceFileCache(); + const secondSymbol = getSymbol(second); + assert.ok(secondSymbol); + assert.equal(secondSymbol.name, "second"); + assert.strictEqual(getSymbol(first), firstSymbol); + + using retained = api.retainSourceFile(lease.sourceFile); + assert.strictEqual(retained.sourceFile, lease.sourceFile); + assert.strictEqual(getSymbol(first), firstSymbol); + assert.strictEqual(getSymbol(second), secondSymbol); + }); + + test("declaration lookup rejects unavailable and recreated files without caching failures", () => { + using api = spawnAPI(); + const text = "function present() {}"; + const lease = api.createSourceFile("/symbols.ts", text); + const declaration = cast(lease.sourceFile.statements[0], isFunctionDeclaration); + assert.ok(lease.sourceFile instanceof RemoteSourceFile); + const cache = lease.sourceFile.symbolCache; + assert.ok(cache); + const index = parseNodeHandleFromCompiler(getNodeId(declaration)).index; + lease.dispose(); + + assert.throws(() => getSymbol(declaration), /source file is not available/); + assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); + assert.equal(cache.declarationSymbolRequests.has(index), false); + using recreated = api.createSourceFile("/symbols.ts", text); + assert.throws(() => getSymbol(declaration), /source file descriptor no longer identifies/); + assert.equal(cache.symbolsByDeclarationNodeIndex.has(index), false); + assert.equal(cache.declarationSymbolRequests.has(index), false); + const recreatedDeclaration = cast(recreated.sourceFile.statements[0], isFunctionDeclaration); + assert.equal((getSymbol(recreatedDeclaration))?.name, "present"); + }); + + test("createSourceFile can be used with a compatible program", () => { + const sourceText = "export const element =
;"; + using api = spawnAPI({ + "/component.tsx": sourceText, + }); + using retained = api.createSourceFile("/component.tsx", sourceText); + const sourceFile = retained.sourceFile; + const snapshot = api.createSnapshot({ openFiles: ["/component.tsx"] }); + const project = snapshot.getProjects()[0]; + assert.equal((api.printer.printNode(sourceFile)).trimEnd(), sourceText); + assert.ok(project.checker.getTypeAtLocation(sourceFile.statements[0])); + assert.equal(project.program.isSourceFileDefaultLibrary(sourceFile), false); + snapshot.dispose(); + }); + + test("createSourceFile shares identity with a matching program file", () => { + const sourceText = "export declare const element: number;"; + using api = spawnAPI({ + "/component.d.ts": sourceText, + }); + using retained = api.createSourceFile("/component.d.ts", sourceText); + const snapshot = api.createSnapshot({ openFiles: ["/component.d.ts"] }); + const project = snapshot.getProjects()[0]; + assert.strictEqual(project.program.getSourceFile("/component.d.ts"), retained.sourceFile); + snapshot.dispose(); + }); + + test("retainSourceFile keeps a borrowed program file available", () => { + const sourceText = "export declare const value: number;"; + using api = spawnAPI({ + "/retained.d.ts": sourceText, + }); + const snapshot = api.createSnapshot({ openFiles: ["/retained.d.ts"] }); + const project = snapshot.getProjects()[0]; + const sourceFile = project.program.getSourceFile("/retained.d.ts"); + assert.ok(sourceFile); + + using retained = api.retainSourceFile(sourceFile); + assert.strictEqual(retained.sourceFile, sourceFile); + snapshot.dispose(); + + using recreated = api.createSourceFile("/retained.d.ts", sourceText); + assert.strictEqual(recreated.sourceFile, sourceFile); + + const local = createSourceFile([], createToken(SyntaxKind.EndOfFile), "", "/local.ts" as RootedFilePath, "/local.ts" as PathKey); + assert.throws(() => api.retainSourceFile(local), /Only remote source files can be retained/); + }); + + test("createSourceFileFromFile", () => { + using api = spawnAPI({ + "/input.ts": "export const fromFile = 1;", + }); + using retained = api.createSourceFileFromFile({ uri: "file:///input.ts" }); + const fromFile = retained.sourceFile; + assert.equal(fromFile.fileName, "/input.ts"); + assert.equal(fromFile.text, "export const fromFile = 1;"); + assert.equal(fromFile.scriptKind, ScriptKind.TS); + + assert.throws(() => api.createSourceFileFromFile("/missing.ts"), /could not read file "\/missing\.ts"/); + }); + + test("createProgram", () => { + using api = spawnAPI({ + "/src/index.ts": `export const value: string = 1;`, + }); + + const program = api.createProgram(["/src/index.ts"], { noLib: true, strict: true }); + + assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(program.getSourceFileNames(), ["/src/index.ts"]); + assert.equal((program.getSemanticDiagnostics("/src/index.ts")).length, 1); + + program.dispose(); + assert.throws(() => program.getSourceFileNames(), /snapshot .* not found/); + }); + + test("createSnapshot creates independent synthetic programs", () => { + using api = spawnAPI({ + "/src/a.ts": `export const a = 1;`, + "/src/b.ts": `export const b = 2;`, + }); + + const snapshot = api.createSnapshot({ + createPrograms: [ + { rootFiles: ["/src/a.ts"], compilerOptions: { noLib: true } }, + { rootFiles: ["/src/b.ts"], compilerOptions: { noLib: true, strict: true } }, + ], + }); + assert.equal(snapshot.getProjects().length, 2); + assert.deepEqual(snapshot.getProjects().map(project => project.rootFiles), [["/src/a.ts"], ["/src/b.ts"]]); + assert.equal(snapshot.operation.createdPrograms!.length, 2); + for (const program of snapshot.operation.createdPrograms!) { + const syntheticProjectId: SyntheticProjectId = program.id; + void syntheticProjectId; + assert.strictEqual(snapshot.getProgram(program.id), program); + assert.strictEqual(snapshot.getProject(program.id), program.getProject()); + } + + const empty = api.createSnapshot(); + assert.deepEqual(empty.getProjects(), []); + assert.equal(empty.operation.createdPrograms, undefined); + assert.equal(empty.operation.openedFiles, undefined); + }); + + test("snapshot.update preserves identity when the server returns the same snapshot", () => { + using api = spawnAPI(); + const snapshot = api.createSnapshot(); + const client = (api as unknown as { + client: { apiRequest(method: string, params: unknown): unknown; }; + }).client; + const apiRequest = client.apiRequest.bind(client); + let duplicateReference = false; + client.apiRequest = (method, params) => { + if ( + method === "release" + && typeof params === "object" + && params !== null + && "snapshot" in params + && params.snapshot === snapshot.id + && duplicateReference + ) { + duplicateReference = false; + return true; + } + const response = apiRequest(method, params); + if (method !== "updateSnapshot" || typeof response !== "object" || response === null) return response; + if (!("snapshot" in response) || typeof response.snapshot !== "number") return response; + apiRequest("release", { snapshot: response.snapshot }); + duplicateReference = true; + return { ...response, snapshot: snapshot.id }; + }; + + assert.strictEqual(snapshot.update({}), snapshot); + assert.equal(duplicateReference, false); + }); + + test("snapshot.update reconfigures a synthetic program", () => { + using api = spawnAPI({ + "/src/a.ts": `export const a = 1;`, + "/src/b.ts": `export const b = 2;`, + }); + const snapshot = api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/a.ts"], + compilerOptions: { noLib: true }, + }], + }); + const originalProgram = snapshot.operation.createdPrograms[0]; + + const updated = snapshot.update({ + reconfigurePrograms: [{ + id: originalProgram.id, + rootFiles: ["/src/b.ts"], + compilerOptions: { noLib: true, strict: true }, + }], + }); + const reconfiguredProgram = updated.getProgram(originalProgram.id); + assert.ok(reconfiguredProgram); + + assert.equal(reconfiguredProgram.id, originalProgram.id); + assert.deepEqual(reconfiguredProgram.getSourceFileNames(), ["/src/b.ts"]); + assert.deepEqual(reconfiguredProgram.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(originalProgram.getSourceFileNames(), ["/src/a.ts"]); + }); + + test("snapshot.update reconfigures module resolution providers", () => { + const root = toRootedFilePath("/src/index.ts", undefined); + const providedA = toRootedFilePath("/a.d.ts", undefined); + const providedB = toRootedFilePath("/b.d.ts", undefined); + const { api: disposableAPI, fs } = spawnAPIWithFS({ + [root]: `import { value } from "pkg"; export { value };`, + [providedA]: `export declare const value: "a";`, + [providedB]: `export declare const value: "b";`, + }); + + using api = disposableAPI; + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const spec = (resolvedFileName: string) => ({ + fallback: "unresolved" as const, + entries: [{ moduleName: "pkg", result: { resolvedFileName } }], + }); + const resolverA = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const resolverB = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedB) }); + const inlineResolverA = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const inlineResolverB = api.createModuleResolver(compilerOptions, { moduleResolutions: spec(providedA) }); + const createProgram = (moduleResolver?: ModuleResolver) => ({ + rootFiles: [root], + compilerOptions, + ...(moduleResolver ? { options: { moduleResolver } } : {}), + }); + + const initial = api.createSnapshot({ createPrograms: [createProgram(resolverA)] }); + const programId = initial.operation.createdPrograms![0].id; + assert.deepEqual([...initial.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + assert.equal( + (resolverA.resolveModuleName("pkg", "/src", undefined, { snapshot: initial })).resolvedModule?.resolvedFileName, + providedA, + ); + assert.equal((resolverA.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, providedA); + + const sameSet = initial.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], + }); + assert.deepEqual([...sameSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + fs.writeFile!(root, `import { value } from "pkg"; export const updated = value;`); + const sameSetAfterEdit = sameSet.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverA) }], + fileNotifications: { changed: [root] }, + }); + assert.deepEqual([...sameSetAfterEdit.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + const changedSet = sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(resolverB) }], + }); + assert.deepEqual([...changedSet.getProgram(programId)!.getSourceFileNames()].sort(), [providedB, root]); + + const removedSet = sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(undefined) }], + }); + assert.deepEqual(removedSet.getProgram(programId)!.getSourceFileNames(), [root]); + + const inline = sameSetAfterEdit.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverA) }], + }); + const repeatedInline = inline.update({ + reconfigurePrograms: [{ id: programId, ...createProgram(inlineResolverB) }], + }); + assert.deepEqual([...repeatedInline.getProgram(programId)!.getSourceFileNames()].sort(), [providedA, root]); + + let callbackCalls = 0; + const callbackResolver = api.createModuleResolver(compilerOptions, { + resolveModuleName: (moduleName: string) => { + callbackCalls++; + return moduleName === "pkg" ? { resolvedFileName: providedA } : undefined; + }, + }); + const callbackSnapshot = api.createSnapshot({ + createPrograms: [createProgram(callbackResolver)], + }); + const callbackProgramId = callbackSnapshot.operation.createdPrograms![0].id; + const repeatedCallback = callbackSnapshot.update({ + reconfigurePrograms: [{ id: callbackProgramId, ...createProgram(callbackResolver) }], + }); + assert.deepEqual([...repeatedCallback.getProgram(callbackProgramId)!.getSourceFileNames()].sort(), [providedA, root]); + assert.equal(callbackCalls, 1); + }); + + test("module resolver normalizes raw compiler option paths", () => { + using api = spawnAPI(); + const resolver = api.createModuleResolver({ + noLib: true, + outDir: "dist", + rootDirs: ["src", "generated"], + tsBuildInfoFile: "cache/build.tsbuildinfo", + typeRoots: ["types"], + }); + const result = resolver.resolveModuleName("./missing", "/src", undefined); + assert.equal(result.resolvedModule, undefined); + }); + + test("module resolver runs against snapshots or the host filesystem", () => { + const packageJson = toRootedFilePath("/node_modules/pkg/package.json", undefined); + const packageB = toRootedFilePath("/node_modules/pkg/b.d.ts", undefined); + const { api: disposableAPI, fs } = spawnAPIWithFS({ + [packageJson]: JSON.stringify({ name: "pkg", version: "1.0.0", types: "a.d.ts" }), + "/node_modules/pkg/a.d.ts": `export declare const value: "a";`, + }); + using api = disposableAPI; + const resolver = api.createModuleResolver({ + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }); + const firstSnapshot = api.createSnapshot(); + assert.equal( + (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), + ); + + fs.writeFile!(packageJson, JSON.stringify({ name: "pkg", version: "1.0.0", types: "b.d.ts" })); + fs.writeFile!(packageB, `export declare const value: "b";`); + const secondSnapshot = firstSnapshot.update({ + fileNotifications: { + changed: [packageJson], + created: [packageB], + }, + }); + + assert.equal( + (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: firstSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/a.d.ts", undefined), + ); + assert.equal( + (resolver.resolveModuleName("pkg", "/src", undefined, { snapshot: secondSnapshot })).resolvedModule?.resolvedFileName, + toRootedFilePath("/node_modules/pkg/b.d.ts", undefined), + ); + assert.equal( + (resolver.resolveModuleName("pkg", "/src")).resolvedModule?.resolvedFileName, + "/node_modules/pkg/b.d.ts", + ); + }); + + test("source imports do not request module resolution", () => { + using api = spawnAPI({ + "/src/index.ts": `import source a from "pkg"; +import.source("missing"); +import { value } from "pkg";`, + "/pkg.d.ts": "export const value: number;", + }); + const compilerOptions = { noLib: true, module: ModuleKind.ESNext }; + const requests: string[] = []; + const resolver = api.createModuleResolver(compilerOptions, { + resolveModuleName: name => { + requests.push(name); + return { resolvedFileName: "/pkg.d.ts" }; + }, + }); + const program = api.createProgram(["/src/index.ts"], compilerOptions, { moduleResolver: resolver }); + assert.deepEqual(requests, ["pkg"]); + const file = program.getSourceFile("/src/index.ts"); + assert.ok(file); + const source = cast(cast(file.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); + const evaluation = cast(cast(file.statements[2], isImportDeclaration).moduleSpecifier, isStringLiteral); + assert.equal(program.getResolvedModuleFromModuleSpecifier(source), undefined); + assert.equal((program.getResolvedModuleFromModuleSpecifier(evaluation))?.resolvedFileName, "/pkg.d.ts"); + }); + + test("module resolver callbacks can delegate to another resolver", () => { + using api = spawnAPI({ + "/src/index.ts": `import "custom"; import "native";`, + "/custom.d.ts": `export {};`, + "/node_modules/native/package.json": JSON.stringify({ name: "native", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/native/index.d.ts": `export {};`, + }); + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = api.createModuleResolver(compilerOptions); + const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; + const customResolver = api.createModuleResolver(compilerOptions, { + resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + callbackSnapshots.push(snapshot); + if (moduleName === "custom") return { resolvedFileName: "/custom.d.ts" }; + assert.ok(snapshot); + return (defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions, + options: { moduleResolver: customResolver }, + }], + }); + assert.deepEqual( + [...snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), + ["/custom.d.ts", "/node_modules/native/index.d.ts", "/src/index.ts"], + ); + assert.equal(callbackSnapshots.length, 2); + assert.equal(callbackSnapshots[0], callbackSnapshots[1]); + assert.ok(typeof callbackSnapshots[0] === "number"); + assert.ok(callbackSnapshots[0] < 0); + }); + + test("module resolver callbacks can resolve against the in-progress snapshot filesystem", () => { + using api = spawnAPI({ + "/src/index.ts": `import "layered";`, + }); + const compilerOptions = { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = api.createModuleResolver({ + ...compilerOptions, + customConditions: ["delegated"], + }); + const customResolver = api.createModuleResolver(compilerOptions, { + resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + assert.ok(snapshot); + return (defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = api.createSnapshot({ + fileSystem: createFileSystemLayer([ + [ + "/node_modules/layered/package.json", + JSON.stringify({ + name: "layered", + version: "1.0.0", + exports: { ".": { delegated: "./index.d.ts" } }, + }), + ], + ["/node_modules/layered/index.d.ts", `export {};`], + ]), + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions, + options: { moduleResolver: customResolver }, + }], + }); + assert.deepEqual( + [...snapshot.operation.createdPrograms[0].getSourceFileNames()].sort(), + ["/node_modules/layered/index.d.ts", "/src/index.ts"], + ); + }); + + test("module resolver callback errors reject lib replacement", () => { + using api = spawnAPI({ + "/src/index.ts": `export {};`, + }); + const resolver = api.createModuleResolver( + { moduleResolution: ModuleResolutionKind.Bundler }, + { + resolveModuleName: () => { + throw new Error("lib replacement callback failed"); + }, + }, + ); + + assert.throws( + () => + api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { libReplacement: true }, + options: { moduleResolver: resolver }, + }], + }), + /lib replacement callback failed/, + ); + }); + + test("program module resolution uses the resolver compiler options", () => { + using api = spawnAPI({ + "/src/index.ts": `/// +import "pkg/feature";`, + "/node_modules/pkg/package.json": JSON.stringify({ + name: "pkg", + version: "1.0.0", + exports: { "./feature": { resolver: "./dist/feature.d.ts" } }, + }), + "/node_modules/pkg/dist/feature.d.ts": `export {};`, + "/node_modules/@types/resolver-types/index.d.ts": `export {};`, + }); + const resolver = api.createModuleResolver({ + module: ModuleKind.ESNext, + moduleResolution: ModuleResolutionKind.Bundler, + customConditions: ["resolver"], + }); + const snapshot = api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { + noLib: true, + module: ModuleKind.Node16, + moduleResolution: ModuleResolutionKind.Node16, + }, + options: { moduleResolver: resolver }, + }], + }); + + assert.deepEqual( + [...snapshot.operation.createdPrograms![0].getSourceFileNames()].sort(), + ["/node_modules/@types/resolver-types/index.d.ts", "/node_modules/pkg/dist/feature.d.ts", "/src/index.ts"], + ); + }); + + test("module resolver callbacks preserve retained and live filesystem context", () => { + using api = spawnAPI({ + "/src/index.ts": `export {};`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + }); + const compilerOptions = { + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }; + const defaultResolver = api.createModuleResolver(compilerOptions); + const callbackSnapshots: (Snapshot | InProgressSnapshot | undefined)[] = []; + const passthroughResolver = api.createModuleResolver(compilerOptions, { + resolveModuleName: (moduleName, containingDirectory, resolutionMode, { snapshot }) => { + callbackSnapshots.push(snapshot); + return (defaultResolver.resolveModuleName( + moduleName, + containingDirectory, + resolutionMode, + snapshot === undefined ? undefined : { snapshot }, + )).resolvedModule; + }, + }); + const snapshot = api.createSnapshot(); + + assert.equal( + (passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext, { snapshot })).resolvedModule?.resolvedFileName, + "/node_modules/pkg/index.d.ts", + ); + assert.equal(callbackSnapshots[0], snapshot); + + assert.equal( + (passthroughResolver.resolveModuleName("pkg", "/src", ModuleKind.ESNext)).resolvedModule?.resolvedFileName, + "/node_modules/pkg/index.d.ts", + ); + assert.equal(callbackSnapshots[1], undefined); + }); + + test("static resolutions do not report native resolution provenance diagnostics", () => { + using api = spawnAPI({ + "/src/index.ts": `import { value } from "./value.ts"; export { value };`, + "/value.ts": `export const value = 1;`, + }); + const resolver = api.createModuleResolver( + { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }, + { + moduleResolutions: { + fallback: "unresolved", + entries: [{ + moduleName: "./value.ts", + result: { + resolvedFileName: "/value.ts", + }, + }], + }, + }, + ); + const snapshot = api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { + noLib: true, + module: ModuleKind.NodeNext, + moduleResolution: ModuleResolutionKind.NodeNext, + }, + options: { + moduleResolver: resolver, + }, + }], + }); + const program = snapshot.operation.createdPrograms[0]; + assert.deepEqual(program.getSemanticDiagnostics("/src/index.ts"), []); + }); + + test("Program resolved modules and type reference directives", () => { + using api = spawnAPI({ + "/src/index.ts": `/// +import "pkg"; +import "missing"; +declare module "augmentation" {}`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + "/node_modules/@types/pkg-types/package.json": JSON.stringify({ name: "@types/pkg-types", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/@types/pkg-types/index.d.ts": `export {};`, + }); + + const program = api.createProgram( + ["/src/index.ts"], + { module: ModuleKind.ESNext, moduleResolution: ModuleResolutionKind.Bundler, noLib: true }, + ); + const sourceFile = program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const pkgSpecifier = cast(cast(sourceFile.statements[0], isImportDeclaration).moduleSpecifier, isStringLiteral); + + assert.equal(program.getModeForUsageLocation("/src/index.ts", pkgSpecifier), ModuleKind.ESNext); + assert.equal(program.getModeForResolutionAtIndex("/src/index.ts", 0), ModuleKind.ESNext); + assert.equal(program.getModeForResolutionAtIndex("/src/index.ts", 2), ModuleKind.ESNext); + + const resolvedModule = program.getResolvedModule("/src/index.ts", "pkg", ModuleKind.ESNext); + assert.ok(resolvedModule); + assert.equal(resolvedModule.resolvedFileName, "/node_modules/pkg/index.d.ts"); + + const resolvedModuleWithLocations = program.getResolvedModuleFromModuleSpecifier(pkgSpecifier); + assert.ok(resolvedModuleWithLocations); + assert.equal(resolvedModuleWithLocations.packageId?.name, "pkg"); + + const missingModule = program.getResolvedModule( + "/src/index.ts", + "missing", + ModuleKind.ESNext, + ); + assert.equal(missingModule, undefined); + + const typeReference = sourceFile.typeReferenceDirectives[0]; + const resolvedTypeReference = program.getResolvedTypeReferenceDirective( + "/src/index.ts", + "pkg-types", + ModuleKind.None, + ); + assert.equal(resolvedTypeReference?.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); + + const resolvedTypeReferenceWithLocations = program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective( + typeReference, + "/src/index.ts", + ); + assert.ok(resolvedTypeReferenceWithLocations); + assert.equal(resolvedTypeReferenceWithLocations.resolvedFileName, "/node_modules/@types/pkg-types/index.d.ts"); + + program.dispose(); + }); + + test("createProgram resolves raw compiler option paths", () => { + using api = spawnAPI({ + "/src/index.ts": `import { value } from "ba"; export { value };`, + "/src/first.ts": `export const value = 1;`, + "/src/fallback.ts": `export const value = 2;`, + "/src/component.vue": `export const component = 1;`, + }); + const rawOptions: RawCompilerOptions = { + noLib: true, + allowNonTsExtensions: true, + outDir: "dist", + paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, + rootDirs: ["src", "generated"], + suppressOutputPathCheck: true, + tsBuildInfoFile: "cache/build.tsbuildinfo", + }; + // @ts-expect-error raw path strings are not finalized compiler options + const _finalizedOptions: CompilerOptions = rawOptions; + const _rawOptions: RawCompilerOptions = undefined! as CompilerOptions; + + const program = api.createProgram(["/src/index.ts", "/src/component.vue"], rawOptions); + const compilerOptions: CompilerOptions = program.getCompilerOptions(); + const serverCurrentDirectory = resolve("../.."); + assert.deepEqual( + compilerOptions, + { + noLib: true, + allowNonTsExtensions: true, + outDir: toRootedDirectoryPath(resolve(serverCurrentDirectory, "dist"), undefined), + paths: { "*a": ["/src/first.ts"], "*": ["/src/fallback.ts"] }, + rootDirs: [ + toRootedDirectoryPath(resolve(serverCurrentDirectory, "src"), undefined), + toRootedDirectoryPath(resolve(serverCurrentDirectory, "generated"), undefined), + ], + suppressOutputPathCheck: true, + tsBuildInfoFile: toRootedFilePath(resolve(serverCurrentDirectory, "cache/build.tsbuildinfo"), undefined), + } satisfies CompilerOptions, + ); + assert.equal((program.getSemanticDiagnostics("/src/index.ts")).length, 0); + assert(program.getSourceFile("/src/first.ts")); + assert.equal(program.getSourceFile("/src/fallback.ts"), undefined); + assert(program.getSourceFile("/src/component.vue")); + program.dispose(); + }); + + test("createProgram ignores an on-disk tsconfig", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { noLib: false, strict: false }, + files: ["src/from-config.ts"], + }), + "/src/index.ts": `export const explicitRoot = 1;`, + "/src/from-config.ts": `export const configRoot = 1;`, + }); + + const program = api.createProgram( + ["/src/index.ts"], + { noLib: true, strict: true }, + ); + + assert.deepEqual(program.getCompilerOptions(), { noLib: true, strict: true }); + assert.deepEqual(program.getSourceFileNames(), ["/src/index.ts"]); + assert.deepEqual(program.getConfigFileNames(), []); + assert.equal(program.getSourceFile("/src/from-config.ts"), undefined); + program.dispose(); + }); + + test("createProgram rejects invalid project reference paths", () => { + using api = spawnAPI({ + "/src/index.ts": `export const value = 1;`, + }); + + assert.throws( + () => + api.createProgram( + ["/src/index.ts"], + { noLib: true }, + { projectReferences: [{ path: "" }] }, + ), + /Path must not be empty/, + ); + }); + + test("createProgram includes config file parsing diagnostics", () => { + const diagnostic = { + pos: 0, + end: 0, + code: 9001, + category: DiagnosticCategory.Error, + text: "Synthetic config parsing error.", + }; + using api = spawnAPI({ "/src/index.ts": `export const value = 1;` }); + + const program = api.createProgram( + ["/src/index.ts"], + { noLib: true }, + { + configFileParsingDiagnostics: [diagnostic], + }, + ); + + assert.deepEqual(program.getConfigFileParsingDiagnostics(), [diagnostic]); + program.dispose(); + }); + + test("createProgram discovers imported non-root dependencies", () => { + using api = spawnAPI({ + "/src/main.ts": `import { dependency } from "./dependency"; export const value = dependency;`, + "/src/dependency.ts": `export const dependency = 1;`, + }); + + const program = api.createProgram(["/src/main.ts"], { noLib: true }); + assert.deepEqual([...program.getSourceFileNames()].sort(), ["/src/dependency.ts", "/src/main.ts"]); + + program.dispose(); + }); + + test("parseConfigFile", () => { + using api = spawnAPI(); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); + assert.equal(config.compileOnSave, false); + assert.equal(config.typeAcquisition, undefined); + assert.equal(config.projectReferences, undefined); + }); + + test("parseConfigFile includes projectReferences", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ references: [{ path: "./harness" }, { path: "./server" }] }), + }); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.fileNames, []); + assert.deepEqual(config.options, { configFilePath: "/tsconfig.json" }); + assert.deepEqual(config.projectReferences, [ + { circular: false, originalPath: "./harness", path: "/harness" }, + { circular: false, originalPath: "./server", path: "/server" }, + ]); + }); + + test("parseConfigFile preserves raw config", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compileOnSave: true, + customSetting: { enabled: true }, + files: ["/src/index.ts"], + }), + }); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.equal(config.compileOnSave, true); + assert.deepEqual(config.raw, { + compileOnSave: true, + customSetting: { enabled: true }, + files: ["/src/index.ts"], + }); + }); + + test("parseConfigFile includes compileOnSave", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compileOnSave: true }), + }); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.equal(config.compileOnSave, true); + }); + + test("parseConfigFile includes typeAcquisition", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ typeAcquisition: { enable: true, include: ["jquery"] } }), + }); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.equal(config.typeAcquisition?.enable, true); + assert.deepEqual(config.typeAcquisition?.include, ["jquery"]); + }); + + test("parseConfigFile includes inherited plugins", () => { + using api = spawnAPI({ + "/tsconfig.base.json": JSON.stringify({ compilerOptions: { plugins: [{ name: "typescript-plugin" }] } }), + "/tsconfig.json": JSON.stringify({ extends: "./tsconfig.base.json" }), + }); + + const config = api.parseConfigFile("/tsconfig.json"); + assert.deepEqual(config.options.plugins, [{ name: "typescript-plugin" }]); + }); +}); + +describe("BuildOrchestrator", () => { + const files = { + "/a/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/a/src/index.ts": `export const a = 1;`, + "/b/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/b/src/index.ts": `export const b = 2;`, + "/c/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + references: [{ path: "../a" }, { path: "../b" }], + }), + "/c/src/index.ts": `export const c = 3;`, + }; + + test("dispose is idempotent", () => { + const { api: disposableApi } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const options = api.parseCommandLine([]); + const orchestrator = api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/", ...options }, + ); + + const firstDispose = orchestrator.dispose(); + const secondDispose = orchestrator.dispose(); + assert.strictEqual(firstDispose, secondDispose); + orchestrator.dispose(); + // Second dispose should not throw + orchestrator.dispose(); + assert.throws(() => orchestrator.build(), /Build orchestrator is disposed/); + }); + + test("api.close disposes all build orchestrators", () => { + const { api } = spawnAPIWithFS({ ...files }); + const options = api.parseCommandLine([]); + const orchestrator1 = api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/", ...options }, + ); + const orchestrator2 = api.createBuildOrchestrator( + ["/b/tsconfig.json"], + { cwd: "/", ...options }, + ); + assert.ok(!orchestrator1.isDisposed()); + assert.ok(!orchestrator2.isDisposed()); + api.close(); + assert.ok(orchestrator1.isDisposed()); + assert.ok(orchestrator2.isDisposed()); + orchestrator1.dispose(); + orchestrator2.dispose(); + }); + + test("builds the configured root projects", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const defaultOptions = { + cwd: "/", + dry: false, + force: false, + verbose: true, + stopBuildOnErrors: false, + overrideCompilerOptions: { + incremental: true, + assumeChangesOnlyAffectDirectDependencies: true, + declaration: false, + declarationMap: true, + emitDeclarationOnly: false, + sourceMap: false, + inlineSourceMap: false, + traceResolution: false, + }, + }; + const orchestrator = api.createBuildOrchestrator( + ["/a/tsconfig.json", "/b/tsconfig.json"], + defaultOptions, + ); + + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + }); + + test("returns diagnostics in build response information", () => { + const source = `export const value: string = 1;`; + const { api: disposableApi } = spawnAPIWithFS({ + "/a/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, noEmitOnError: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/a/src/index.ts": source, + }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/" }, + ); + + const response = orchestrator.build(); + assert.equal(response.status, 1); + assert.equal(response.statistics.Projects, 1); + assert.equal(response.statistics.ProjectsBuilt, 1); + assert.deepEqual(response.diagnostics, [{ + fileName: "/a/src/index.ts", + pos: source.indexOf("value"), + end: source.indexOf("value") + "value".length, + startPosition: { line: 0, character: source.indexOf("value") }, + endPosition: { line: 0, character: source.indexOf("value") + "value".length }, + sourceLines: [{ line: 0, text: source }], + code: 2322, + category: 1, + text: "Type 'number' is not assignable to type 'string'.", + }]); + }); + + test("returns build response information after clean", () => { + const { api: disposableApi } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const options = api.parseCommandLine([]); + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/", ...options }, + ); + + assert.equal((orchestrator.build()).status, 0); + + const cleanResp1 = orchestrator.clean("/a/tsconfig.json"); + assert.equal(cleanResp1.status, 0); + assert.deepEqual(cleanResp1.diagnostics, undefined); + assert.deepEqual(cleanResp1.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanResp1.statistics.Projects, 1); + assert.equal(cleanResp1.statistics.ProjectsBuilt, 0); + const buildResp1 = orchestrator.build("/a/tsconfig.json"); + assert.equal(buildResp1.status, 0); + assert.deepEqual(buildResp1.diagnostics, undefined); + assert.equal(buildResp1.statistics.Projects, 1); + assert.equal(buildResp1.statistics.ProjectsBuilt, 1); + + const cleanRefResp = orchestrator.cleanReferences("/c/tsconfig.json"); + assert.equal(cleanRefResp.status, 0); + assert.deepEqual(cleanRefResp.diagnostics, undefined); + assert.deepEqual(cleanRefResp.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + "/b/dist/index.d.ts", + "/b/dist/index.js", + "/b/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanRefResp.statistics.Projects, 2); + assert.equal(cleanRefResp.statistics.ProjectsBuilt, 0); + const buildRefsResp = orchestrator.buildReferences("/c/tsconfig.json"); + assert.equal(buildRefsResp.status, 0); + assert.deepEqual(buildRefsResp.diagnostics, undefined); + + const cleanResp2 = orchestrator.clean(); + assert.equal(cleanResp2.status, 0); + assert.deepEqual(cleanResp2.diagnostics, undefined); + assert.deepEqual(cleanResp2.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + "/a/tsconfig.tsbuildinfo", + "/b/dist/index.d.ts", + "/b/dist/index.js", + "/b/tsconfig.tsbuildinfo", + "/c/dist/index.d.ts", + "/c/dist/index.js", + "/c/tsconfig.tsbuildinfo", + ]); + assert.equal(cleanResp2.statistics.Projects, 3); + assert.equal(cleanResp2.statistics.ProjectsBuilt, 0); + const buildResp2 = orchestrator.build(); + assert.equal(buildResp2.status, 0); + assert.deepEqual(buildResp2.diagnostics, undefined); + assert.equal(buildResp2.statistics.Projects, 3); + assert.equal(buildResp2.statistics.ProjectsBuilt, 3); + }); + + test("returns deleted files from a clean response", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + "/a/dist/index.d.ts": `export declare const a = 1;`, + "/a/dist/index.js": `export const a = 1;`, + }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/a/tsconfig.json"], + { cwd: "/" }, + ); + + const response = orchestrator.clean(); + assert.equal(response.status, 0); + assert.deepEqual(response.diagnostics, undefined); + assert.deepEqual(response.filesDeleted!.sort(), [ + "/a/dist/index.d.ts", + "/a/dist/index.js", + ]); + assert.equal(response.statistics.Projects, 1); + assert.equal(response.statistics.ProjectsBuilt, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.d.ts", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + }); + + test("rebuilds projects after multiple file system changes", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/a/tsconfig.json", "/b/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 20/); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 100;`); + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 200;`); + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 100/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 200/); + }); + + test("clean removes build outputs", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.equal((orchestrator.clean()).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + }); + + test("builds and cleans selected projects after file system changes", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ ...files }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.build("/a/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + fs.writeFile!(toRootedFilePath("/a/src/index.ts", undefined), `export const a = 10;`); + assert.equal((orchestrator.build("/b/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + fs.writeFile!(toRootedFilePath("/b/src/index.ts", undefined), `export const b = 20;`); + assert.equal((orchestrator.clean("/a/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); + + assert.equal((orchestrator.clean("/b/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 10/); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.match(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))!, /export const c = 3/); + + fs.writeFile!(toRootedFilePath("/b/dist/index.js", undefined), `export const b = 2`); + assert.equal((orchestrator.clean("/b/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + }); + + test("builds only references of a selected project", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + }); + using api = disposableApi; + const options = api.parseCommandLine([]); + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.buildReferences("/c/tsconfig.json")).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))!, /export const a = 1/); + assert.match(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))!, /export const b = 2/); + assert.equal(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined)), serverFS.useOS); + }); + + test("cleans only references of a selected project", () => { + const { api: disposableApi, fs } = spawnAPIWithFS({ + ...files, + }); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + + assert.equal((orchestrator.cleanReferences("/c/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + + assert.equal((orchestrator.build()).status, 0); + assert.ok(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined))); + assert.ok(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined))); + assert.equal((orchestrator.cleanReferences()).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/a/dist/index.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile!(toRootedFilePath("/b/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/c/dist/index.js", undefined))); + }); + + test("handles invalidated projects and cleans the last built configuration", () => { + const writes: string[] = []; + const { api: disposableApi, fs } = spawnAPIWithFS( + { + ...files, + "/c/src/index.ts": `import { a } from "../../a/src/index"; export const c = a;`, + "/d/tsconfig.json": JSON.stringify({ + compilerOptions: { composite: true, outDir: "dist", rootDir: "src" }, + files: ["src/index.ts"], + }), + "/d/src/index.ts": `export const d = 4;`, + }, + path => writes.push(path), + ); + using api = disposableApi; + const orchestrator = api.createBuildOrchestrator( + ["/c/tsconfig.json", "/d/tsconfig.json"], + { cwd: "/" }, + ); + + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined))!, /export const d = 4/); + + fs.writeFile!( + toRootedFilePath("/d/tsconfig.json", undefined), + JSON.stringify({ + compilerOptions: { composite: true, outDir: "lib", rootDir: "src" }, + files: ["src/index.ts"], + }), + ); + fs.writeFile!(toRootedFilePath("/d/lib/index.js", undefined), `export const d = 40;`); + + assert.equal((orchestrator.clean("/d/tsconfig.json")).status, 0); + assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); + assert.ok(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))); + + assert.equal((orchestrator.build()).status, 0); + assert.match(fs.readFile!(toRootedFilePath("/d/lib/index.js", undefined))!, /export const d = 4/); + assert.equal(fs.readFile!(toRootedFilePath("/d/dist/index.js", undefined)), serverFS.useOS); + }); +}); + +describe("Checker - getImmediateAliasedSymbol", { concurrency }, () => { + test("resolves one level of alias indirection", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/foo.ts": `export const foo = 42;`, + "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `import { foo } from "./foo";`.indexOf("foo }"); + const aliasSymbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(aliasSymbol); + const aliased = project.checker.getImmediateAliasedSymbol(aliasSymbol); + assert.ok(aliased, "Should resolve the immediate aliased symbol"); + assert.equal(aliased.name, "foo"); + }); +}); + +describe("Checker - getTargetSymbol", { concurrency }, () => { + test("gets the target symbol of instantiated symbol", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +class Base { + private value!: T; +} +class Alpha extends Base {} +class Bravo extends Base {} + +declare function test(): void; +test(); +test(); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const nodes: Array = []; + sourceFile.forEachChild(node => { + if (isExpressionStatement(node) && isCallExpression(node.expression) && node.expression.typeArguments) { + nodes.push(node.expression.typeArguments[0]); + } + }); + const aType = project.checker.getTypeAtLocation(nodes[0]); + const bType = project.checker.getTypeAtLocation(nodes[1]); + const aProperty = (project.checker.getPropertiesOfType(aType))[0]; + const bProperty = (project.checker.getPropertiesOfType(bType))[0]; + assert.ok(aProperty); + assert.ok(bProperty); + assert.equal(aProperty === bProperty, false); + assert.equal(project.checker.getTargetSymbol(aProperty) === project.checker.getTargetSymbol(bProperty), true); + }); +}); + +describe("Snapshot", { concurrency }, () => { + test("createSnapshot returns snapshot with projects", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok(snapshot); + assert.ok(snapshot.id); + assert.ok(snapshot.getProjects().length > 0); + assert.ok(snapshot.getConfiguredProject("/tsconfig.json")); + }); + + test("project exposes parsedCommandLine", () => { + using api = spawnAPI({ + ...defaultFiles, + "/tsconfig.json": JSON.stringify({ compileOnSave: true }), + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual(project.parsedCommandLine.fileNames, ["/src/index.ts", "/src/foo.ts"]); + assert.deepEqual(project.parsedCommandLine.options, { configFilePath: "/tsconfig.json" }); + assert.equal(project.parsedCommandLine.compileOnSave, true); + assert.deepEqual(project.rootFiles, project.parsedCommandLine.fileNames); + assert.deepEqual(project.compilerOptions, project.parsedCommandLine.options); + }); + + test("getSymbolAtPosition", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + assert.ok(symbol.flags & SymbolFlags.Alias); + }); + + test("getSymbolAtLocation", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const node = cast( + cast(sourceFile.statements[0], isImportDeclaration).importClause?.namedBindings, + isNamedImports, + ).elements[0].name; + assert.ok(node); + const symbol = project.checker.getSymbolAtLocation(node); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + assert.ok(symbol.flags & SymbolFlags.Alias); + }); + + test("getSymbolOfSourceFile", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const moduleSymbol = project.checker.getSymbolOfSourceFile("/src/foo.ts"); + assert.ok(moduleSymbol); + const exports = moduleSymbol.getExports(); + assert.ok(exports.has(escapeLeadingUnderscores("foo"))); + }); + + test("getSymbolOfSourceFile returns undefined for a non-module file", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/script.ts": `const x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolOfSourceFile("/src/script.ts"); + assert.equal(symbol, undefined); + }); + + test("getSymbolOfSourceFile batched", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbols = project.checker.getSymbolOfSourceFile(["/src/index.ts", "/src/foo.ts"]); + assert.equal(symbols.length, 2); + assert.ok(symbols[0]); + assert.ok(symbols[1]); + assert.strictEqual(symbols[1], project.checker.getSymbolOfSourceFile("/src/foo.ts")); + }); + + test("getTypeOfSymbol", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NumberLiteral); + }); + + test("getNonMissingTypeOfSymbol", () => { + using api = spawnAPI({ + "/tsconfig-one.json": JSON.stringify({ + compilerOptions: { + exactOptionalPropertyTypes: true, + strict: true, + }, + }), + "/tsconfig-two.json": JSON.stringify({ + compilerOptions: { + exactOptionalPropertyTypes: false, + strict: true, + }, + }), + "/src/index.ts": "const x: Partial<{ a: string }> = {};", + }); + + // when `"exactOptionalPropertyTypes": true` + const snapshot1 = api.createSnapshot({ openProject: "/tsconfig-one.json" }); + const project1 = snapshot1.getConfiguredProject("/tsconfig-one.json")!; + const type1 = project1.checker.getTypeAtPosition("/src/index.ts", 7); + assert.ok(type1); + const symbol1 = project1.checker.getPropertyOfType(type1, "a"); + assert.ok(symbol1); + const propertyType1 = project1.checker.getTypeOfSymbol(symbol1); + assert.ok(propertyType1); + // getTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType1.isUnionType()); + const propertyType2 = project1.checker.getNonMissingTypeOfSymbol(symbol1); + assert.ok(propertyType2); + // getNonMissingTypeOfSymbol returns 'string' + assert.ok(!propertyType2.isUnionType()); + assert.ok(propertyType2.flags & TypeFlags.String); + + // when `"exactOptionalPropertyTypes": false` + const snapshot2 = api.createSnapshot({ openProject: "/tsconfig-two.json" }); + const project2 = snapshot2.getConfiguredProject("/tsconfig-two.json")!; + const type2 = project2.checker.getTypeAtPosition("/src/index.ts", 7); + assert.ok(type2); + const symbol2 = project2.checker.getPropertyOfType(type2, "a"); + assert.ok(symbol2); + const propertyType3 = project2.checker.getTypeOfSymbol(symbol2); + assert.ok(propertyType3); + // getTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType3.isUnionType()); + const propertyType4 = project2.checker.getNonMissingTypeOfSymbol(symbol2); + assert.ok(propertyType4); + // getNonMissingTypeOfSymbol returns 'string | undefined' + assert.ok(propertyType4.isUnionType()); + }); +}); + +describe("LanguageService - imports", { concurrency }, () => { + test("getImportEditsForSymbols adds a named import", () => { + const source = `const value = foo;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); + assert.ok(symbol); + + const edits = project.languageService.getImportEditsForSymbols("/src/index.ts", [symbol.getExportSymbol()]); + + assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); + }); + + test("getImportAdderEdits coalesces multiple importSymbol actions", () => { + const source = `const value = foo + bar;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const foo = project.checker.getSymbolAtPosition("/src/foo.ts", "export const ".length); + const bar = project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); + assert.ok(foo); + assert.ok(bar); + + const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol: foo.getExportSymbol() }, + { kind: "importSymbol", symbol: bar.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\n\nconst value = foo + bar;\n`); + }); + + test("getImportAdderEdits roots relative files at the project directory", () => { + const source = `const value = foo;\n`; + const api = spawnAPI({ + "/outside/tsconfig.json": "{}", + "/outside/src/index.ts": source, + "/outside/src/foo.ts": `export const foo = 1;\n`, + }); + try { + const snapshot = api.createSnapshot({ openProject: "/outside/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/outside/tsconfig.json")!; + const foo = project.checker.getSymbolAtPosition("/outside/src/foo.ts", "export const ".length); + assert.ok(foo); + + const edits = project.languageService.getImportAdderEdits("src/index.ts", [ + { kind: "importSymbol", symbol: foo.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { foo } from "./foo";\n\nconst value = foo;\n`); + } + finally { + api.close(); + } + }); + + test("getImportAdderEdits adds to an existing import", () => { + const source = `import { foo } from "./foo";\nconst value = foo + bar;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `export const foo = 1;\nexport const bar = 2;\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const bar = project.checker.getSymbolAtPosition("/src/foo.ts", "export const foo = 1;\nexport const ".length); + assert.ok(bar); + + const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol: bar.getExportSymbol() }, + ]); + + assert.equal(applyTextEdits(source, edits), `import { bar, foo } from "./foo";\nconst value = foo + bar;\n`); + }); + + test("getImportAdderEdits returns no edits for non-exported symbols", () => { + const source = `const value = local;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + "/src/foo.ts": `const local = 1;\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", "const ".length); + assert.ok(symbol); + + const edits = project.languageService.getImportAdderEdits("/src/index.ts", [ + { kind: "importSymbol", symbol }, + ]); + + assert.deepEqual(edits, []); + }); + + test("getImportAdderEdits rejects invalid actions", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/foo.ts", 13); + assert.ok(symbol); + + assert.throws( + () => project.languageService.getImportAdderEdits("/src/index.ts", [{ kind: "unknown", symbol: symbol.id } as unknown as ImportAdderAction]), + /Debug Failure\. Illegal value: "unknown"/, + ); + assert.throws( + () => + project.languageService.getImportAdderEdits("/src/index.ts", [{ + kind: "importSymbol", + symbol: { ...symbol, reference: { ...symbol.reference, id: 999_999_999 } }, + } as unknown as ImportAdderAction]), + /symbol handle \d+ not found/, + ); + }); +}); + +describe("LanguageService - getCompletionsAtPosition", { concurrency }, () => { + test("returns member completions after a dot", () => { + const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Position right after "obj." — member completion trigger + const pos = src.indexOf("obj.") + "obj.".length; + const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); + assert.ok(completions, "Expected completions to be returned"); + assert.ok(completions.entries.length > 0, "Expected at least one completion entry"); + assert.ok(completions.entries.some(e => e.name === "name"), "Expected 'name' property in completions"); + assert.ok(completions.entries.some(e => e.name === "age"), "Expected 'age' property in completions"); + assert.ok(completions.entries.every(e => e.symbol === undefined), "Expected no symbol information"); + }); + + test("completion entries include sortText", () => { + const src = `\nconst obj = { value: 1 };\nobj.\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("obj.") + "obj.".length; + const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: "." }); + assert.ok(completions); + assert.ok(completions.entries.length > 0); + assert.ok(completions.entries.some(e => e.sortText !== undefined), "Expected sortText on all entries"); + }); + + test("returns undefined for a non-existent file", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const completions = project.languageService.getCompletionsAtPosition("/src/does-not-exist.ts", 0); + assert.equal(completions, undefined, "Expected undefined for non-existent file"); + }); + + test("includeSymbol: true populates symbol on property completions", () => { + const src = `\nconst obj = { name: "hello", age: 42 };\nobj.\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("obj.") + "obj.".length; + const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", pos, { triggerCharacter: ".", includeSymbol: true }); + assert.ok(completions, "Expected completions"); + const nameEntry = completions.entries.find(e => e.name === "name"); + assert.ok(nameEntry, "Expected 'name' entry"); + assert.ok(nameEntry.symbol, "Expected symbol to be set on 'name' entry when includeSymbol: true"); + assert.equal(nameEntry.symbol.name, "name", "Symbol name should match completion name"); + }); + + test("auto-import completions with symbols require a prepared snapshot", () => { + const src = "someV"; + using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, + "/src/export.ts": "export const someValue = 1;", + "/src/main.ts": src, + }); + + const unprepared = api.createSnapshot({ + openProject: "/tsconfig.json", + userPreferences: { includeCompletionsForModuleExports: true } satisfies UserPreferences, + }); + const unpreparedProject = unprepared.getConfiguredProject("/tsconfig.json")!; + assert.throws(() => unpreparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }), /snapshot is not prepared for auto-imports/); + + const prepared = unprepared.update({ prepareAutoImports: "/src/main.ts" }); + const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; + const completions = preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); + assert.ok(completions?.entries.some(entry => entry.name === "someValue")); + }); + + test("snapshot preferences disable auto-import completions", () => { + const src = "someV"; + using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "module": "esnext", "target": "esnext" }, "include": ["src"] }`, + "/src/export.ts": "export const someValue = 1;", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + userPreferences: { includeCompletionsForModuleExports: false } satisfies UserPreferences, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const completions = project.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { + includeSymbol: true, + }); + assert.ok(completions); + assert.ok(!completions.entries.some(entry => entry.name === "someValue")); + const prepared = snapshot.update({ + userPreferences: { includeCompletionsForModuleExports: true }, + prepareAutoImports: "/src/main.ts", + }); + const preparedProject = prepared.getConfiguredProject("/tsconfig.json")!; + const enabled = preparedProject.languageService.getCompletionsAtPosition("/src/main.ts", src.length, { includeSymbol: true }); + assert.ok(enabled?.entries.some(entry => entry.name === "someValue")); + }); +}); + +describe("LanguageService - getReferencedSymbolsForNode", { concurrency }, () => { + test("getReferencedSymbolsForNode", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); + const funcName = funcDecl.name!; + const refs = project.languageService.getReferencedSymbolsForNode(funcName, funcName.pos); + assert.ok(refs.length > 0); + // Each entry should have a definition and references + const entry = refs[0]; + assert.ok(entry.definition); + assert.ok(entry.references.length > 0); + }); +}); + +describe("LanguageService - getSignatureUsage", { concurrency }, () => { + test("getSignatureUsage", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) { return name; }\ngreet("world");`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const funcDecl = cast(sourceFile.statements[0], isFunctionDeclaration); + const usages = project.languageService.getSignatureUsage(funcDecl); + assert.ok(usages.length > 0); + // The call site should have a call expression + const usage = usages.find(u => u.call !== undefined); + assert.ok(usage, "Expected at least one usage with a call expression"); + }); +}); + +describe("Checker - getApparentType", { concurrency }, () => { + test("returns the apparent type of a literal type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = "hello" as const;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `export const x = "hello" as const;`.indexOf("x ="); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(type.isLiteralType(), true); + assert.equal(type.isStringLiteralType(), true); + assert.equal(type.isIntrinsicType(), false); + const apparent = project.checker.getApparentType(type); + assert.ok(apparent); + assert.ok(apparent.id > 0); + }); +}); + +describe("Checker - getReducedType", { concurrency }, () => { + test("returns the reduced type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare const TaggedError: ( + tag: Tag, +) => new = {}>( + args: { readonly [P in keyof A]: A[P] }, +) => { readonly _tag: Tag } & Readonly; + +class RateLimitError extends TaggedError("RateLimitError")<{ + readonly retryAfter: number; +}> {} + +class QuotaExceededError extends TaggedError("QuotaExceededError")<{ + readonly limit: number; +}> {} + +export type Result = RateLimitError | (RateLimitError & QuotaExceededError);`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(typeAlias); + const type = project.checker.getTypeAtLocation(typeAlias); + assert.equal(type.isUnionType(), true); + assert.equal(type.isObjectType(), false); + const reducedType = project.checker.getReducedType(type); + assert.equal(reducedType.isUnionType(), false); + assert.equal(reducedType.isObjectType(), true); + }); +}); + +describe("Checker - getMemberInModuleExports", { concurrency }, () => { + test("returns a named export when present", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const direct = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const found = project.checker.getMemberInModuleExports(moduleSymbol, "direct"); + assert.ok(found); + assert.equal(found.name, "direct"); + const missing = project.checker.getMemberInModuleExports(moduleSymbol, "missing"); + assert.equal(missing, undefined); + }); +}); + +describe("SourceFile", { concurrency }, () => { + test("relative and absolute identifiers share the project source file cache", () => { + using api = spawnAPI({ + "/outside/tsconfig.json": "{}", + "/outside/src/index.ts": "export const value = 1;", + }); + + const snapshot = api.createSnapshot({ openProject: "/outside/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/outside/tsconfig.json")!.program; + const absolute = program.getSourceFile("/outside/src/index.ts"); + const relative = program.getSourceFile("src/index.ts"); + + assert.ok(absolute); + assert.strictEqual(relative, absolute); + }); + + test("getSourceFile rejects invalid document identifiers", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const document = { fileName: "/src/index.ts" } as unknown as DocumentIdentifier; + + assert.throws( + () => program.getSourceFile(document), + { + name: "TypeError", + message: "Expected a string or { uri } for the document, received an object with keys: fileName", + }, + ); + }); + + test("getSourceFileNames returns all program files, not just root files", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "node10", + noLib: true, + }, + }), + "/src/index.ts": `import { foo } from "./foo";\nimport { bar } from "my-lib";\nexport const result = foo + bar;`, + "/src/foo.ts": `export const foo = 42;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const fileNames = project.program.getSourceFileNames(); + assert.deepEqual(fileNames, [ + "/src/foo.ts", + "/node_modules/my-lib/index.d.ts", + "/src/index.ts", + ]); + }); + + test("source file metadata identifies external library and default library files", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "node10", + }, + }), + "/src/index.ts": `import { bar } from "my-lib";\nexport const result = bar;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const program = project.program; + + const index = program.getSourceFile("/src/index.ts"); + assert.ok(index); + assert.equal(program.isSourceFileFromExternalLibrary(index), false); + assert.equal(program.isSourceFileDefaultLibrary(index), false); + + const lib = program.getSourceFile("/node_modules/my-lib/index.d.ts"); + assert.ok(lib); + assert.equal(program.isSourceFileFromExternalLibrary(lib), true); + assert.equal(program.isSourceFileDefaultLibrary(lib), false); + + const fileNames = program.getSourceFileNames(); + const defaultLibName = fileNames.find(name => name.endsWith("lib.d.ts") || name.includes("/lib.")); + assert.ok(defaultLibName, "expected a default library file in the program"); + const defaultLib = program.getSourceFile(defaultLibName); + assert.ok(defaultLib); + assert.equal(program.isSourceFileDefaultLibrary(defaultLib), true); + }); + + test("source file metadata reports implied node format", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + module: "nodenext", + moduleResolution: "nodenext", + }, + }), + "/src/index.ts": `export const x = 1;`, + "/src/esm.mts": `export const e = 1;`, + "/src/cjs.cts": `export const c = 1;`, + "/esm/package.json": JSON.stringify({ type: "module" }), + "/esm/index.ts": `export const m = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + + const mts = program.getSourceFile("/src/esm.mts"); + assert.ok(mts); + assert.equal((program.getSourceFileMetadata({ uri: "file:///src/esm.mts" }))?.impliedNodeFormat, ModuleKind.ESNext); + assert.equal((program.getSourceFileMetadataByPath(mts.path))?.impliedNodeFormat, ModuleKind.ESNext); + + const cts = program.getSourceFile("/src/cjs.cts"); + assert.ok(cts); + assert.equal((program.getSourceFileMetadata(cts.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); + + // A plain .ts file with no nearby `"type": "module"` is CommonJS. + const index = program.getSourceFile("/src/index.ts"); + assert.ok(index); + assert.equal((program.getSourceFileMetadata(index.fileName))?.impliedNodeFormat, ModuleKind.CommonJS); + + // A plain .ts file under a `"type": "module"` package is ESM. + const esmIndex = program.getSourceFile("/esm/index.ts"); + assert.ok(esmIndex); + assert.equal((program.getSourceFileMetadata(esmIndex.fileName))?.impliedNodeFormat, ModuleKind.ESNext); + }); + + test("file properties", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + + assert.ok(sourceFile); + assert.equal(sourceFile.text, defaultFiles["/src/index.ts"]); + assert.equal(sourceFile.fileName, "/src/index.ts"); + }); + + test("extended data", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + + assert.ok(sourceFile); + let nodeCount = 1; + sourceFile.forEachChild(function visit(node) { + if (isTemplateHead(node)) { + assert.equal(node.text, "head "); + assert.equal(node.rawText, "head "); + assert.equal(node.templateFlags, 0); + } + else if (isTemplateMiddle(node)) { + assert.equal(node.text, "middle"); + assert.equal(node.rawText, "middle"); + assert.equal(node.templateFlags, 0); + } + else if (isTemplateTail(node)) { + assert.equal(node.text, " tail"); + assert.equal(node.rawText, " tail"); + assert.equal(node.templateFlags, 0); + } + nodeCount++; + node.forEachChild(visit); + }); + assert.equal(nodeCount, 8); + }); + + test("forEachChild with visitList does not visit array children twice", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ files: ["/input.ts"] }), + "/input.ts": `let arrow = () => {}`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/input.ts"); + + assert.ok(sourceFile); + + const visited: { kind: SyntaxKind; pos: number; end: number; }[] = []; + (function walk(node: Node): void { + visited.push({ kind: node.kind, pos: node.pos, end: node.end }); + node.forEachChild(walk, (nodes: NodeArray) => { + for (let i = 0; i < nodes.length; i++) { + walk(nodes[i]); + } + return undefined; + }); + })(sourceFile); + + // Each node should be visited exactly once, even when a visitList callback + // is supplied. Previously array children were visited twice. + const seen = new Set(); + for (const { kind, pos, end } of visited) { + const key = `${kind}.${pos}.${end}`; + assert.ok(!seen.has(key), `Node ${key} was visited more than once`); + seen.add(key); + } + }); +}); + +describe("NodeArray", { concurrency }, () => { + test("hasTrailingComma", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `declare function foo(...args: any): void;\nfoo("a", "b",);\nfoo("a", "b");`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const statements = sourceFile.statements.filter(isExpressionStatement); + assert.ok(isCallExpression(statements[0].expression)); + assert.equal(statements[0].expression.arguments.hasTrailingComma, true); + assert.ok(isCallExpression(statements[1].expression)); + assert.equal(statements[1].expression.arguments.hasTrailingComma, false); + }); +}); + +describe("API objects", { concurrency }, () => { + test("unicode escapes", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/1.ts": `"😃"`, + "/src/2.ts": `"\\ud83d\\ude03"`, + "/src/3.ts": `"\\ud800a\\udc00"`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const expectedTexts = new Map([ + ["/src/1.ts", "😃"], + ["/src/2.ts", "😃"], + ["/src/3.ts", "\ud800a\udc00"], + ]); + + for (const file of expectedTexts.keys()) { + const sourceFile = project.program.getSourceFile(file); + assert.ok(sourceFile); + + sourceFile.forEachChild(function visit(node) { + if (isStringLiteral(node)) { + assert.equal(node.text, expectedTexts.get(file)); + } + node.forEachChild(visit); + }); + } + }); + + test("template unicode escapes", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": "`\\ud800${0}\\udc00`", + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let sawHead = false; + let sawTail = false; + sourceFile.forEachChild(function visit(node) { + if (isTemplateHead(node)) { + assert.equal(node.text, "\ud800"); + sawHead = true; + } + else if (isTemplateTail(node)) { + assert.equal(node.text, "\udc00"); + sawTail = true; + } + node.forEachChild(visit); + }); + assert.ok(sawHead); + assert.ok(sawTail); + }); + + test("Object equality", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Same symbol returned from same snapshot's checker + assert.strictEqual( + project.checker.getSymbolAtPosition("/src/index.ts", 9), + project.checker.getSymbolAtPosition("/src/index.ts", 10), + ); + }); + + test("Snapshot dispose", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + + // Snapshot dispose should release server-side resources + assert.ok(snapshot.isDisposed() === false); + snapshot.dispose(); + assert.ok(snapshot.isDisposed() === true); + + // After dispose, snapshot methods should throw + assert.throws(() => { + snapshot.getConfiguredProject("/tsconfig.json"); + }, { + name: "Error", + message: "Snapshot is disposed", + }); + }); +}); + +describe("Multiple snapshots", { concurrency }, () => { + test("two snapshots work independently", () => { + using api = spawnAPI(); + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Both can fetch source files + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.ok(sf2); + + // Disposing one doesn't break the other + snap1.dispose(); + assert.ok(snap1.isDisposed()); + assert.ok(!snap2.isDisposed()); + + // snap2 still works after snap1 is disposed + const symbol = snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + assert.equal(symbol.name, "foo"); + }); + + test("each snapshot has its own server-side lifecycle", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Verify initial state + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file and create a new snapshot with the change + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "changed";`); + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + + // snap2 should reflect the updated content + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = "changed";`); + + // snap1's source file should still have the original content + assert.equal(sf1.text, `export const foo = 42;`); + + snap1.dispose(); + + // snap2 still works independently after snap1 is disposed + const symbol = snap2.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/index.ts", 9); + assert.ok(symbol); + + snap2.dispose(); + + // Both are disposed, new snapshot works fine with latest content + const snap3 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf3 = snap3.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf3); + assert.equal(sf3.text, `export const foo = "changed";`); + }); + + test("adding a new file is reflected in the next snapshot", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + + // Add a brand new file + fs.writeFile!(toRootedFilePath("/src/bar.ts", undefined), `export const bar = true;`); + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { created: ["/src/bar.ts"] }, + }); + + const sf = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); + assert.ok(sf); + assert.equal(sf.text, `export const bar = true;`); + + // Original snapshot shouldn't have the new file + const sfOld = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/bar.ts"); + assert.equal(sfOld, undefined); + }); + + test("multiple sequential edits produce correct snapshots", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + api.createSnapshot({ openProject: "/tsconfig.json" }); + + const versions = [ + `export const foo = 1;`, + `export const foo = 2;`, + `export const foo = 3;`, + ]; + + for (const version of versions) { + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), version); + const snap = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf = snap.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf); + assert.equal(sf.text, version); + } + }); + + test("snapshot.update derives from its receiver and reconstructs unchanged projects", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/first/tsconfig.json": `{}`, + "/first/index.ts": `export const first = 1;`, + "/second/tsconfig.json": `{}`, + "/second/index.ts": `export const second = 1;`, + }); + using api = disposableAPI; + + const base = api.createSnapshot({ + openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], + }); + const baseFirst = base.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"); + const baseSecondProject = base.getConfiguredProject("/second/tsconfig.json")!; + + fs.writeFile!(toRootedFilePath("/first/index.ts", undefined), `export const first = 2;`); + const updated = base.update({ + fileNotifications: { changed: ["/first/index.ts"] }, + ensurePrograms: [base.getConfiguredProject("/first/tsconfig.json")!.id], + }); + + assert.equal(updated.getProjects().length, 2); + assert.notStrictEqual(updated.getConfiguredProject("/second/tsconfig.json"), baseSecondProject); + assert.equal((updated.getConfiguredProject("/first/tsconfig.json")!.program.getSourceFile("/first/index.ts"))!.text, `export const first = 2;`); + assert.equal(baseFirst!.text, `export const first = 1;`); + }); + + test("snapshot.update preserves stable project ordering", () => { + using api = spawnAPI({ + "/a/tsconfig.json": `{}`, + "/a/index.ts": `export const a = 1;`, + "/z/tsconfig.json": `{}`, + "/z/index.ts": `export const z = 1;`, + }); + const base = api.createSnapshot({ openProjects: ["/z/tsconfig.json"] }); + const updated = base.update({ openProjects: ["/a/tsconfig.json"] }); + + assert.deepEqual(updated.getProjects().map(project => project.id), ["/a/tsconfig.json", "/z/tsconfig.json"]); + }); + + test("snapshot.update ensures all dirty programs", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/configured/tsconfig.json": `{}`, + "/configured/index.ts": `export const configured = 1;`, + "/inferred.ts": `export const inferred = 1;`, + "/synthetic.ts": `export const synthetic = 1;`, + }); + using api = disposableAPI; + + const created = api.createSnapshot({ + openProjects: ["/configured/tsconfig.json"], + openFiles: ["/inferred.ts", "/configured/index.ts"], + createPrograms: [{ + rootFiles: ["/synthetic.ts"], + compilerOptions: { noLib: true }, + }], + }); + assert.equal(created.getProjects().length, 3); + const configuredProjectId: ConfiguredProjectId = created.getConfiguredProject("/configured/tsconfig.json")!.id; + void configuredProjectId; + assert.strictEqual(created.operation.openedFiles![0].project, created.getProject(created.operation.openedFiles![0].project.id)); + assert.strictEqual(created.operation.openedFiles![1].project, created.getConfiguredProject("/configured/tsconfig.json")); + for (const project of created.getProjects()) { + assert.equal(project.dirty, false, `${project.id} should be ensured when opened or created`); + } + + fs.writeFile!(toRootedFilePath("/configured/index.ts", undefined), `export const configured = 2;`); + fs.writeFile!(toRootedFilePath("/inferred.ts", undefined), `export const inferred = 2;`); + fs.writeFile!(toRootedFilePath("/synthetic.ts", undefined), `export const synthetic = 2;`); + const dirty = created.update({ + fileNotifications: { changed: ["/configured/index.ts", "/inferred.ts", "/synthetic.ts"] }, + }); + assert.deepEqual(dirty.getProjects().map(project => project.dirty), [true, true, true]); + + const ensured = dirty.update({ ensurePrograms: true }); + assert.deepEqual(ensured.getProjects().map(project => project.dirty), [false, false, false]); + + const withOperationResults = ensured.update({ + openFiles: ["/inferred.ts"], + createPrograms: [{ + rootFiles: ["/synthetic.ts"], + compilerOptions: { noLib: true }, + }], + }); + const openedProject: Project = withOperationResults.operation.openedFiles[0].project; + const createdProgram: Program = withOperationResults.operation.createdPrograms[0]; + const openedFilesTuple: readonly [{ readonly project: Project; }] = withOperationResults.operation.openedFiles; + const createdProgramsTuple: readonly [Program] = withOperationResults.operation.createdPrograms; + void openedFilesTuple; + void createdProgramsTuple; + assert.strictEqual(withOperationResults.getProject(openedProject.id), openedProject); + assert.strictEqual(withOperationResults.getProgram(createdProgram.id), createdProgram); + }); +}); + +describe("Source file caching", { concurrency }, () => { + test("same file from same snapshot returns cached object", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sf1 = project.program.getSourceFile("/src/index.ts"); + const sf2 = project.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.strictEqual(sf1, sf2, "Same source file should be returned from cache"); + }); + + test("same file from two snapshots (same content) returns cached object", () => { + using api = spawnAPI(); + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); + // Fetch from snap1 first (populates cache), then snap2 (cache hit via hash) + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + assert.ok(sf2); + // Same content hash → cache hit → same object + assert.strictEqual(sf1, sf2, "Same file with same content should share cached object"); + }); + + test("modified file returns a different source file object", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file in the VFS + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 100;`); + + // Notify the server about the change + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = 100;`); + + // Different content → different object + assert.notStrictEqual(sf1, sf2, "Modified file should return a new source file object"); + }); + + test("unmodified file retains cached object across file change notification", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + + // Mutate a different file + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = 999;`); + + // Notify the server about the change to foo.ts only + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/foo.ts"] }, + }); + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf2); + + // index.ts wasn't changed — should still get cached object + assert.strictEqual(sf1, sf2, "Unchanged file should return cached object across snapshots"); + }); + + test("disposing the source snapshot releases its cache entries", () => { + using api = spawnAPI(); + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + // Fetch from snap1 to populate cache + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf1); + + const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); + + snap1.dispose(); + + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/index.ts"); + assert.ok(sf2); + assert.notStrictEqual(sf1, sf2, "independent snapshots do not implicitly retain each other's cache entries"); + }); + + test("invalidateAll causes all files to be re-fetched", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(); + using api = disposableAPI; + + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sf1 = snap1.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 42;`); + + // Mutate the file + fs.writeFile!(toRootedFilePath("/src/foo.ts", undefined), `export const foo = "hello";`); + + // Use invalidateAll to force re-fetch + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { invalidateAll: true }, + }); + const sf2 = snap2.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/foo.ts"); + assert.ok(sf2); + assert.equal(sf2.text, `export const foo = "hello";`); + assert.notStrictEqual(sf1, sf2, "invalidateAll should produce new source file objects"); + }); + + test("node handles from a cached source file should be valid in a new snapshot", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `function foo(x: number) {}\nfoo(42);`, + "/src/other.ts": `export const x = 1;`, + }); + using api = disposableAPI; + + // Snapshot 1: get a node and verify getContextualType works + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const proj1 = snap1.getConfiguredProject("/tsconfig.json")!; + + const sf1 = proj1.program.getSourceFile("/src/main.ts"); + assert.ok(sf1); + + let numLiteral: Expression | undefined; + sf1.forEachChild(function visit(node) { + if (isCallExpression(node)) numLiteral = node.arguments[0]; + node.forEachChild(visit); + }); + assert.ok(numLiteral, "should find the 42 argument"); + + const type1 = proj1.checker.getContextualType(numLiteral); + assert.ok(type1); + assert.ok(type1.flags & TypeFlags.Number); + + // Snapshot 2: change a different file + fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const x = 2;`); + const snap2 = api.createSnapshot({ + openProject: "/tsconfig.json", + fileNotifications: { changed: ["/src/other.ts"] }, + }); + const proj2 = snap2.getConfiguredProject("/tsconfig.json")!; + + // Active snapshots may share a content-addressed source file. + const sf2 = proj2.program.getSourceFile("/src/main.ts"); + assert.ok(sf2); + assert.strictEqual(sf1, sf2); + + let numLiteral2: Expression | undefined; + sf2.forEachChild(function visit(node) { + if (isCallExpression(node)) numLiteral2 = node.arguments[0]; + node.forEachChild(visit); + }); + assert.ok(numLiteral2, "should find the 42 argument"); + assert.strictEqual(numLiteral, numLiteral2); + + // A type from new snapshot should be resolved + const type2 = proj2.checker.getContextualType(numLiteral2); + assert.ok(type2); + assert.ok(type2.flags & TypeFlags.Number); + }); +}); + +describe("Snapshot disposal", { concurrency }, () => { + test("dispose is idempotent", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstDispose = snapshot.dispose(); + const secondDispose = snapshot.dispose(); + assert.strictEqual(firstDispose, secondDispose); + snapshot.dispose(); + assert.ok(snapshot.isDisposed()); + // Second dispose should not throw + snapshot.dispose(); + assert.ok(snapshot.isDisposed()); + }); + + test("api.close waits for disposal started by using", () => { + const api = spawnAPI(); + let snapshot: Snapshot; + { + using disposableSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + snapshot = disposableSnapshot; + } + assert.ok(snapshot.isDisposed()); + api.close(); + snapshot.dispose(); + }); + + test("api.close disposes all active snapshots", () => { + const api = spawnAPI(); + const snap1 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const snap2 = api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok(!snap1.isDisposed()); + assert.ok(!snap2.isDisposed()); + api.close(); + assert.ok(snap1.isDisposed()); + assert.ok(snap2.isDisposed()); + }); +}); + +describe("Source file cache keying across projects", { concurrency }, () => { + // Three projects share the same file (/src/shared.ts). + // The file sits inside a package.json scope with "type": "module". + // + // Project A: moduleResolution: bundler (auto detection, bundler doesn't + // trigger isFileForcedToBeModuleByFormat → file parsed as script) + // Project B: moduleResolution: bundler, moduleDetection: force + // (force → file parsed as module) + // Project C: moduleResolution: nodenext + // (nodenext + type:module → impliedNodeFormat ESNext → + // isFileForcedToBeModuleByFormat → file parsed as module) + // + // Expected: exactly two distinct source file objects are stored: + // - A gets one (script parse) + // - B and C share another (module parse) + const multiProjectFiles: Record = { + "/package.json": JSON.stringify({ type: "module" }), + "/src/shared.ts": `export const x = 1;`, + // Project A – bundler, auto detection (default) + "/projectA/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "bundler", + module: "esnext", + strict: true, + }, + files: ["../src/shared.ts"], + }), + // Project B – bundler, force module detection + "/projectB/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "bundler", + module: "esnext", + moduleDetection: "force", + strict: true, + }, + files: ["../src/shared.ts"], + }), + // Project C – nodenext (type:module → module) + "/projectC/tsconfig.json": JSON.stringify({ + compilerOptions: { + moduleResolution: "nodenext", + module: "nodenext", + strict: true, + }, + files: ["../src/shared.ts"], + }), + }; + + test("different parse modes produce separate cached objects; same parse modes share", () => { + using api = spawnAPI(multiProjectFiles); + + const snapshot = api.createSnapshot({ + openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json", "/projectC/tsconfig.json"], + }); + + const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; + const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; + const projectC = snapshot.getConfiguredProject("/projectC/tsconfig.json")!; + assert.ok(projectA, "projectA should exist"); + assert.ok(projectB, "projectB should exist"); + assert.ok(projectC, "projectC should exist"); + + // Fetch the shared file from each project + const sfA = projectA.program.getSourceFile("/src/shared.ts"); + const sfB = projectB.program.getSourceFile("/src/shared.ts"); + const sfC = projectC.program.getSourceFile("/src/shared.ts"); + assert.ok(sfA, "sfA should exist"); + assert.ok(sfB, "sfB should exist"); + assert.ok(sfC, "sfC should exist"); + + // A should differ from B and C (script vs module parse) + assert.notStrictEqual(sfA, sfB, "projectA (script) and projectB (module) should have different cached source files"); + assert.notStrictEqual(sfA, sfC, "projectA (script) and projectC (module) should have different cached source files"); + + // B and C should share the same cached object (both module parse, same content hash) + assert.strictEqual(sfB, sfC, "projectB and projectC (both module parse) should share the same cached source file"); + }); +}); + +describe("Checker - symbol identity across projects", { concurrency }, () => { + const sharedSymbolFiles = { + "/projectA/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), + "/projectB/tsconfig.json": JSON.stringify({ files: ["../src/shared.ts"] }), + "/src/shared.ts": `export const sharedVar = 42;`, + }; + + test("getSymbolAtPosition returns same Symbol instance across projects", () => { + using api = spawnAPI(sharedSymbolFiles); + + const snapshot = api.createSnapshot({ + openProjects: ["/projectA/tsconfig.json", "/projectB/tsconfig.json"], + }); + + const projectA = snapshot.getConfiguredProject("/projectA/tsconfig.json")!; + const projectB = snapshot.getConfiguredProject("/projectB/tsconfig.json")!; + assert.ok(projectA, "projectA should exist"); + assert.ok(projectB, "projectB should exist"); + + const src = sharedSymbolFiles["/src/shared.ts"]; + const varPos = src.indexOf("sharedVar"); + + const symbolA = projectA.checker.getSymbolAtPosition("/src/shared.ts", varPos); + const symbolB = projectB.checker.getSymbolAtPosition("/src/shared.ts", varPos); + + assert.ok(symbolA, "symbolA should exist"); + assert.ok(symbolB, "symbolB should exist"); + assert.equal(symbolA.name, "sharedVar"); + assert.equal(symbolB.name, "sharedVar"); + + assert.strictEqual(symbolA, symbolB, "Same source symbol queried from two projects should be the same object"); + }); + + test("overlapping synthetic programs share Symbol instances", () => { + using api = spawnAPI({ + "/src/shared.ts": `export const sharedVar = 42;`, + }); + const snapshot = api.createSnapshot({ + createPrograms: [ + { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, + { rootFiles: ["/src/shared.ts"], compilerOptions: { noLib: true } }, + ], + }); + const [programA, programB] = snapshot.operation.createdPrograms; + const position = `export const sharedVar = 42;`.indexOf("sharedVar"); + + const symbolA = programA.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); + const symbolB = programB.getProject().checker.getSymbolAtPosition("/src/shared.ts", position); + + assert.ok(symbolA); + assert.strictEqual(symbolA, symbolB); + }); +}); + +describe("Checker - types and signatures", { concurrency }, () => { + const checkerFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const x = 42; +export function add(a: number, b: number, ...rest: number[]): number { return a + b; } +export class MyClass { + value: string = ""; + getValue(): string { return this.value; } +} +`, + }; + + test("getTypeAtPosition", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const xPos = src.indexOf("x = 42"); + const type = project.checker.getTypeAtPosition("/src/main.ts", xPos); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NumberLiteral); + }); + + test("getTypeAtPosition batched", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const xPos = src.indexOf("x = 42"); + const addPos = src.indexOf("add("); + const types = project.checker.getTypeAtPosition("/src/main.ts", [xPos, addPos]); + assert.equal(types.length, 2); + assert.ok(types[0]); + assert.ok(types[1]); + }); + + test("getTypeAtLocation", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const firstVarDecl = sourceFile.statements[2]; // "export const x" + assert.ok(firstVarDecl); + const type = project.checker.getTypeAtLocation(firstVarDecl); + assert.ok(type); + }); + + test("getTypeAtLocation returns property type for parenthesized and chained access (issue #3938)", () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +interface A { + a: number; + b: { c: number }; +} +const obj: A = { a: 1, b: { c: 2 } }; +const a1 = obj.a; +const a2 = (obj).a; +const c = obj.b.c; +`, + }; + + using api = spawnAPI(files); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const targetNodes = new Map(); + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.PropertyAccessExpression) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text === "obj.a" || text === "(obj).a" || text === "obj.b.c") { + targetNodes.set(text, node); + } + } + node.forEachChild(visit); + }); + + assert.equal(targetNodes.size, 3, "Should find all target property access expressions"); + for (const expr of ["obj.a", "(obj).a", "obj.b.c"] as const) { + const node = targetNodes.get(expr); + assert.ok(node, `Should find expression '${expr}'`); + const type = project.checker.getTypeAtLocation(node); + assert.ok(type, `Should get a type for '${expr}'`); + assert.ok(type.flags & TypeFlags.Number, `Expected '${expr}' to have number type flags, got ${type.flags}`); + } + }); + + test("getTypeAtLocation returns call result type for private method call (issue #4041)", () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), + "/src/main.ts": ` +type Result = { readonly value: string }; + +export class Cache { + run(): Result { + return this.#buildCapabilities(); + } + + #buildCapabilities(): Result { + return { value: "ok" }; + } +} +`, + }; + + using api = spawnAPI(files); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + let callNode: import("@typescript/typescript/unstable/ast").CallExpression | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text === "this.#buildCapabilities()") { + callNode = node; + } + } + node.forEachChild(visit); + }); + + assert.ok(callNode, "Should find private method call expression"); + const callType = project.checker.getTypeAtLocation(callNode); + const calleeType = project.checker.getTypeAtLocation(callNode.expression); + assert.ok(callType, "Should get type for call expression"); + assert.ok(calleeType, "Should get type for callee expression"); + + const callSignatures = project.checker.getSignaturesOfType(calleeType, SignatureKind.Call); + assert.ok(callSignatures.length > 0, "Callee should be callable"); + const returnType = project.checker.getReturnTypeOfSignature(callSignatures[0]); + assert.ok(returnType, "Should get return type for private method call"); + const callExprSignatures = project.checker.getSignaturesOfType(callType, SignatureKind.Call); + + assert.ok(callType.flags & TypeFlags.Object, `Expected call expression type to be object-like, got ${callType.flags}`); + assert.ok(returnType.flags & TypeFlags.Object, `Expected return type to be object-like, got ${returnType.flags}`); + assert.equal(callType.flags, returnType.flags, "Call expression type should have same flags as method return type"); + assert.equal(callExprSignatures.length, 0, "Call expression result type should not itself be callable"); + }); + + test("getSignaturesOfType - call signatures", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const addPos = src.indexOf("add("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", addPos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length > 0); + const sig = callSigs[0]; + const typeCallSigs = type.getCallSignatures(); + assert.deepEqual(typeCallSigs, callSigs); + assert.ok((sig.getReturnType()).flags & TypeFlags.Number); + assert.ok((sig.getTypeParameterAtPosition(0)).flags & TypeFlags.Number); + assert.ok(sig.id); + assert.ok(sig.parameters.length >= 2); + assert.ok(sig.hasRestParameter); + assert.ok(!sig.isConstruct); + assert.ok(!sig.isAbstract); + }); + + test("getApparentProperties includes CallableFunction members", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + const propertyNames = (type.getApparentProperties()).map(property => property.name); + assert.ok(propertyNames.includes("apply")); + assert.ok(propertyNames.includes("call")); + assert.ok(propertyNames.includes("bind")); + }); + + test("checker and object methods share cached results", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem(checkerFiles), + collectTiming: true, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + let signature: Signature | undefined; + + function assertOneRequest(callback: () => void) { + api.resetTimingInfo(); + callback(); + assert.equal((api.getTimingInfo()).totals.requestCount, 1); + } + + assertOneRequest(() => { + const properties = type.getProperties(); + assert.strictEqual(project.checker.getPropertiesOfType(type), properties); + }); + assertOneRequest(() => { + const signatures = type.getCallSignatures(); + assert.strictEqual(project.checker.getSignaturesOfType(type, SignatureKind.Call), signatures); + signature = signatures[0]; + }); + assertOneRequest(() => { + const nonNullable = project.checker.getNonNullableType(type); + assert.strictEqual(type.getNonNullableType(), nonNullable); + }); + assertOneRequest(() => { + const apparentType = type.getApparentType(); + assert.strictEqual(project.checker.getApparentType(type), apparentType); + }); + assertOneRequest(() => { + const indexInfos = type.getIndexInfos(); + assert.strictEqual(project.checker.getIndexInfosOfType(type), indexInfos); + }); + assertOneRequest(() => { + assert.ok(signature); + const returnType = project.checker.getReturnTypeOfSignature(signature); + assert.strictEqual(signature.getReturnType(), returnType); + }); + }); + + test("getSignaturesOfType - construct signatures", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const classPos = src.indexOf("MyClass"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", classPos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const constructSigs = project.checker.getSignaturesOfType(type, SignatureKind.Construct); + assert.ok(constructSigs.length > 0); + const sig = constructSigs[0]; + assert.ok(sig.isConstruct); + }); + + test("Signature declaration can be resolved", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const addPos = src.indexOf("add("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", addPos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length > 0); + const sig = callSigs[0]; + assert.ok(sig.declaration); + assert.ok(isSignatureDeclaration.Handle(sig.declaration)); + const node = sig.declaration.resolve(project); + assert.ok(node); + assert.ok(node.parameters); + assert.ok(isSignatureDeclaration(node)); + // The handle remembers its canonical project, so resolve() works without an argument. + const nodeFromCanonical = sig.declaration.resolve(); + assert.ok(nodeFromCanonical); + assert.ok(nodeFromCanonical.parameters); + assert.ok(isSignatureDeclaration(nodeFromCanonical)); + assert.strictEqual(nodeFromCanonical.kind, node.kind); + + const methodPos = src.indexOf("getValue"); + const methodSymbol = project.checker.getSymbolAtPosition("/src/main.ts", methodPos); + assert.ok(methodSymbol); + assert.ok(methodSymbol.valueDeclaration); + const methodNode = methodSymbol.valueDeclaration.resolve(project); + assert.ok(methodNode); + assert.strictEqual(methodNode.parent.kind, SyntaxKind.ClassDeclaration); + assert.strictEqual(methodNode.parent.parent.kind, SyntaxKind.SourceFile); + // A symbol's declaration handles default to the symbol's canonical project. + const methodNodeFromCanonical = methodSymbol.valueDeclaration.resolve(); + assert.ok(methodNodeFromCanonical); + assert.strictEqual(methodNodeFromCanonical.kind, methodNode.kind); + }); + + test("getSignaturesOfType - signature type parameters", () => { + const mainFile = ` + interface Operator { + } + export declare class Observable { + lift(operator: Operator): Observable; + } + `; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": mainFile, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const liftPos = mainFile.indexOf("lift"); + const type = project.checker.getTypeAtPosition("/src/main.ts", liftPos); + assert.ok(type); + const callSigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(callSigs.length === 1, "should have exactly one call signature, found: " + callSigs.length); + const sig = callSigs[0]; + assert.ok(sig.typeParameters?.length === 1, "should have exactly one type parameter, found: " + sig.typeParameters?.length); + const typeParams = sig.getTypeParameters(); + const typeParam = typeParams[0]; + assert.ok(typeParam, "should have type parameter"); + const name = (typeParam.getSymbol())?.name; + assert.ok(name === "R", "should be named R, instead: " + name); + assert.ok(typeParam.flags & TypeFlags.TypeParameter, "should be a type parameter, instead flags: " + typeParam.flags); + }); + + test("Signature.getParameters() returns parameter symbols with correct names", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const params = sigs[0].getParameters(); + assert.equal(params.length, 3); + assert.equal(params[0].name, "a"); + assert.equal(params[1].name, "b"); + assert.equal(params[2].name, "rest"); + assert.ok(params[0].flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable on 'a', got ${params[0].flags}`); + }); + + test("Signature.getThisParameter() returns undefined when no explicit this parameter", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const thisParam = sigs[0].getThisParameter(); + assert.strictEqual(thisParam, undefined, "add() has no explicit this parameter"); + }); + + test("Signature.getThisParameter() returns symbol for explicit this parameter", () => { + const src = `export function foo(this: { n: number }, x: string): void {}`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("foo(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const thisParam = sigs[0].getThisParameter(); + assert.ok(thisParam, "foo has an explicit this parameter"); + assert.equal(thisParam.name, "this"); + assert.ok(thisParam.flags & SymbolFlags.FunctionScopedVariable, `expected FunctionScopedVariable, got ${thisParam.flags}`); + }); + + test("Signature.getTarget() returns undefined for a non-instantiated signature", () => { + using api = spawnAPI(checkerFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = checkerFiles["/src/main.ts"]; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("add(")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const target = sigs[0].getTarget(); + assert.strictEqual(target, undefined, "add() is not an instantiated signature"); + }); + + test("Signature.getTarget() returns the generic source signature for an instantiated call", () => { + const src = ` + function identity(x: T): T { return x; } + identity("hello"); + `; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let callNode: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) callNode = node; + node.forEachChild(visit); + }); + assert.ok(callNode, "should find a call expression"); + const sig = project.checker.getResolvedSignature(callNode); + assert.ok(sig, "should resolve a signature for the call"); + assert.ok(sig.target !== undefined, "instantiated call should have a target ID"); + const target = sig.getTarget(); + assert.ok(target, "getTarget() should return the generic signature"); + assert.ok(target.typeParameters && target.typeParameters.length > 0, "target should have type parameters"); + }); +}); + +describe("Symbol - parent, members, exports", { concurrency }, () => { + const symbolFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/mod.ts": ` +export class Animal { + name: string = ""; + speak(): void {} +} +export const value = 1; +`, + }; + + test("getMembers returns class members", () => { + using api = spawnAPI(symbolFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = symbolFiles["/src/mod.ts"]; + const animalPos = src.indexOf("Animal"); + const symbol = project.checker.getSymbolAtPosition("/src/mod.ts", animalPos); + assert.ok(symbol); + const members = symbol.getMembers(); + assert.ok(members.size > 0); + const memberNames = [...members.values()].map(m => m.name); + assert.ok(memberNames.includes("name"), "should have 'name' member"); + assert.ok(memberNames.includes("speak"), "should have 'speak' member"); + }); + + test("getExports returns module exports via sourceFile symbol", () => { + using api = spawnAPI(symbolFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/mod.ts"); + assert.ok(sourceFile); + const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const exports = moduleSymbol.getExports(); + assert.ok(exports.size > 0); + const exportNames = [...exports.values()].map(e => e.name); + assert.ok(exportNames.includes("Animal"), "should export Animal"); + assert.ok(exportNames.includes("value"), "should export value"); + }); + + test("getParent returns containing symbol", () => { + using api = spawnAPI(symbolFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = symbolFiles["/src/mod.ts"]; + const namePos = src.indexOf("name:"); + const nameSymbol = project.checker.getSymbolAtPosition("/src/mod.ts", namePos); + assert.ok(nameSymbol); + assert.equal(nameSymbol.name, "name"); + const parent = nameSymbol.getParent(); + assert.ok(parent); + assert.equal(parent.name, "Animal"); + }); + + test("checkFlags is typed as CheckFlags", () => { + using api = spawnAPI(symbolFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(symbol); + const checkFlags: CheckFlags = symbol.checkFlags; + assert.equal(checkFlags & CheckFlags.Readonly, 0); + }); + + test("binder symbols are shared by file before the AST is fetched", () => { + using api = spawnAPI(symbolFiles, { collectTiming: true }); + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + const secondSnapshot = firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + const position = symbolFiles["/src/mod.ts"].indexOf("Animal"); + + api.resetTimingInfo(); + const first = firstProject.checker.getSymbolAtPosition("/src/mod.ts", position); + const second = secondProject.checker.getSymbolAtPosition("/src/mod.ts", position); + assert.ok(first); + assert.strictEqual(second, first); + assert.equal((api.getTimingInfo()).totals.sourceFilesFetched, 0); + + const declaration = first.declarations[0].resolve(secondProject); + assert.ok(declaration); + assert.equal(declaration.getSourceFile().fileName, "/src/mod.ts"); + assert.equal((api.getTimingInfo()).totals.sourceFilesFetched, 1); + assert.equal((getSymbol(cast(declaration, isClassDeclaration)))?.name, "Animal"); + }); + + test("file-owned symbol properties do not require a snapshot or project", () => { + using api = spawnAPI(symbolFiles); + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/mod.ts"); + assert.ok(sourceFile); + using retained = api.retainSourceFile(sourceFile); + const animal = project.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + const storage = animal["storage"]; + assert.ok("owner" in storage); + assert.strictEqual(storage.owner.api, api); + assert.deepEqual(Object.keys(storage.owner).sort(), ["api", "record"]); + + snapshot.dispose(); + const members = animal.getMembers(); + assert.deepEqual([...members.values()].map(symbol => symbol.name), ["name", "speak"]); + assert.strictEqual(members.get("name" as __String)?.getParent(), animal); + }); + + test("checker-created merged symbols remain snapshot-owned", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/a.ts", "/src/b.ts"] }), + "/src/a.ts": `namespace Merged { export const a = 1; }`, + "/src/b.ts": `namespace Merged { export const b = 1; }`, + }); + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + const secondSnapshot = firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + + const first = firstProject.checker.getSymbolAtPosition("/src/a.ts", 10); + const second = secondProject.checker.getSymbolAtPosition("/src/a.ts", 10); + assert.ok(first); + assert.ok(second); + assert.notStrictEqual(second, first); + }); + + test("checker symbol methods merge declarations and parents in their project", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ files: ["/src/a.ts", "/src/b.ts"] }), + "/single/tsconfig.json": JSON.stringify({ files: ["/src/a.ts"] }), + "/src/a.ts": "namespace Merged { export const a = 1; }", + "/src/b.ts": "namespace Merged { export const b = 1; }", + }); + const snapshot = api.createSnapshot({ openProjects: ["/tsconfig.json", "/single/tsconfig.json"] }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const singleProject = snapshot.getConfiguredProject("/single/tsconfig.json")!; + const fileA = project.program.getSourceFile("/src/a.ts"); + const fileB = project.program.getSourceFile("/src/b.ts"); + assert.ok(fileA && fileB); + const declarationA = cast(fileA.statements[0], isModuleDeclaration); + const declarationB = cast(fileB.statements[0], isModuleDeclaration); + const rawA = getSymbol(declarationA); + const rawB = getSymbol(declarationB); + assert.notStrictEqual(rawA, rawB); + + const merged = project.checker.getSymbolOfDeclaration(declarationA); + assert.strictEqual(project.checker.getSymbolOfDeclaration(declarationB), merged); + assert.strictEqual(project.checker.getSymbolOfNode(declarationA), merged); + assert.strictEqual(project.checker.getMergedSymbol(rawA), merged); + assert.strictEqual(project.checker.getMergedSymbol(rawB), merged); + assert.strictEqual(project.checker.getMergedSymbol(merged), merged); + assert.strictEqual(singleProject.checker.getMergedSymbol(rawA), rawA); + assert.strictEqual(singleProject.checker.getSymbolOfDeclaration(declarationA), rawA); + assert.equal(project.checker.getSymbolOfNode(declarationA.name), undefined); + assert.equal(project.checker.getSymbolOfNode(fileA), undefined); + assert.equal(project.checker.getParentOfSymbol(merged), undefined); + + const member = (rawA.getExports()).get("a" as __String); + assert.ok(member); + assert.strictEqual(member.getParent(), rawA); + assert.strictEqual(project.checker.getParentOfSymbol(member), merged); + assert.strictEqual(singleProject.checker.getParentOfSymbol(member), rawA); + }); + + test("checker symbol methods late-bind computed members", () => { + using api = spawnAPI({ + "/src/computed.ts": "declare const key: unique symbol;\nclass Container { [key] = 1; ordinary = 2; }\nimport {} from './missing';", + }); + const snapshot = api.createSnapshot({ openFiles: ["/src/computed.ts"] }); + const project = snapshot.getProjects()[0]; + const file = project.program.getSourceFile("/src/computed.ts"); + assert.ok(file); + const declaration = cast(file.statements[1], isClassDeclaration); + const memberDeclaration = cast(declaration.members[0], isPropertyDeclaration); + const raw = getSymbol(memberDeclaration); + const lateBound = project.checker.getSymbolOfDeclaration(memberDeclaration); + assert.notStrictEqual(lateBound, raw); + assert.strictEqual(project.checker.getSymbolOfNode(memberDeclaration), lateBound); + const container = project.checker.getSymbolOfDeclaration(declaration); + assert.strictEqual(project.checker.getParentOfSymbol(lateBound), container); + const type = project.checker.getDeclaredTypeOfSymbol(container); + const property = (type.getProperties()).find(symbol => symbol.escapedName === lateBound.escapedName); + assert.ok(property); + assert.strictEqual(project.checker.getTargetSymbol(property), lateBound); + const ordinary = cast(declaration.members[1], isPropertyDeclaration); + assert.strictEqual(project.checker.getSymbolOfDeclaration(ordinary), getSymbol(ordinary)); + assert.equal(project.checker.getSymbolOfNode(file.statements[2]), undefined); + }); + + test("snapshot-owned symbols resolve cached file-owned parents", () => { + const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), + "/src/box.ts": source, + }, { collectTiming: true }); + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const box = project.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); + assert.ok(box); + const boxType = project.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); + assert.ok(boxType); + const [value] = boxType.getProperties(); + assert.ok(value); + assert.ok(value.checkFlags & CheckFlags.Instantiated); + + api.resetTimingInfo(); + assert.strictEqual(value.getParent(), box); + assert.equal((api.getTimingInfo()).totals.requestCount, 0); + }); + + test("compact symbol references retain reused file-owned symbols", () => { + const source = `interface Box { value: T; }\ndeclare const box: Box;\nbox;`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["/src/box.ts"] }), + "/src/box.ts": source, + }); + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + // Create the second snapshot before the first symbol response populates + // the client cache. This ensures its registry has no direct retain on + // the record that will be discovered through the compact reference. + const secondSnapshot = firstSnapshot.update({}); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + + const box = firstProject.checker.getSymbolAtPosition("/src/box.ts", source.indexOf("Box")); + assert.ok(box); + const boxType = secondProject.checker.getTypeAtPosition("/src/box.ts", source.lastIndexOf("box")); + assert.ok(boxType); + const [value] = boxType.getProperties(); + assert.ok(value); + assert.ok(value.checkFlags & CheckFlags.Instantiated); + + // The instantiated property belongs to the second snapshot, but its + // compact parent reference finds `box` in the record retained only by + // the first snapshot. Resolving the reference borrows the wrapper into + // the second registry and must retain its record for that registry's + // lifetime. + const boxFromSecondSnapshot = value.getParent(); + assert.strictEqual(boxFromSecondSnapshot, box); + firstSnapshot.dispose(); + + // If the compact lookup did not establish ownership, disposing the + // first snapshot evicts the record. The next lookup then interns a new + // wrapper for the same binder symbol instead of returning the wrapper + // already obtained through the still-live second snapshot. + const parentAfterDisposal = value.getParent(); + secondSnapshot.dispose(); + assert.strictEqual(parentAfterDisposal, boxFromSecondSnapshot); + assert.throws(() => value.getParent(), /Project object registry is disposed/); + }); + + test("file-owned declarations resolve without the snapshot that observed them", () => { + using api = spawnAPI(symbolFiles); + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const firstProject = firstSnapshot.getConfiguredProject("/tsconfig.json")!; + // Keeps the server AST alive after the observing snapshot is disposed. + using _secondSnapshot = firstSnapshot.update({}); + const animal = firstProject.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + firstSnapshot.dispose(); + + const declaration = animal.declarations[0].resolve(); + assert.ok(declaration && isClassDeclaration(declaration)); + assert.equal(declaration.name?.text, "Animal"); + }); + + test("file-owned symbols are accepted by later checkers while their file is unchanged", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...symbolFiles, "/src/other.ts": `export const other = 1;` }); + using api = disposableAPI; + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const animal = firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + + fs.writeFile!(toRootedFilePath("/src/other.ts", undefined), `export const other = 2;`); + const secondSnapshot = api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/other.ts"] } }); + const type = secondSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getTypeOfSymbol(animal); + assert.ok(type); + assert.strictEqual(type.getSymbol(), animal); + }); + + test("file-owned symbols are rejected by checkers whose program has a different version of their file", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS(symbolFiles); + using api = disposableAPI; + const firstSnapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const animal = firstSnapshot.getConfiguredProject("/tsconfig.json")!.checker.getSymbolAtPosition("/src/mod.ts", symbolFiles["/src/mod.ts"].indexOf("Animal")); + assert.ok(animal); + + fs.writeFile!(toRootedFilePath("/src/mod.ts", undefined), `${symbolFiles["/src/mod.ts"]}\nexport const added = 2;`); + const secondSnapshot = api.createSnapshot({ openProject: "/tsconfig.json", fileNotifications: { changed: ["/src/mod.ts"] } }); + const secondProject = secondSnapshot.getConfiguredProject("/tsconfig.json")!; + assert.throws(() => secondProject.checker.getTypeOfSymbol(animal), /source file is not part of the requested program/); + }); +}); + +describe("Type - getSymbol", { concurrency }, () => { + test("getSymbol returns the symbol of a type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/types.ts": ` +export class Foo { + x: number = 0; +} +export const instance: Foo = new Foo(); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Foo {\n x: number = 0;\n}\nexport const instance: Foo = new Foo();\n`; + const instancePos = src.indexOf("instance"); + const symbol = project.checker.getSymbolAtPosition("/src/types.ts", instancePos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeSymbol = type.getSymbol(); + assert.ok(typeSymbol); + assert.equal(typeSymbol.name, "Foo"); + const fooSymbol = project.checker.getSymbolAtPosition("/src/types.ts", src.indexOf("Foo")); + assert.strictEqual(typeSymbol, fooSymbol); + }); +}); + +describe("Type - sub-property fetchers", { concurrency }, () => { + const typeFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, target: "esnext" } }), + "/src/types.ts": ` +export const arr: Array = [1, 2, 3]; +export const union: string | number = "hello"; +export const intersection: { a: number } & { b: string } = { a: 1, b: "hi" }; +export type KeyOf = keyof T; +export type Lookup = T[K]; +export type Cond = T extends string ? "yes" : "no"; +export type Mapped = { [K in keyof T as \`get\${Capitalize}\`]: T[K] }; +export type MappedUnion = Mapped | string; +export const tpl: \`hello \${string}\` = "hello world"; +export type Upper = Uppercase<"hello">; +export const tuple: readonly [number, string?, ...boolean[]] = [1]; +`, + }; + + function getTypeAtName(api: API, name: string) { + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = typeFiles["/src/types.ts"]; + const pos = src.indexOf(name); + assert.ok(pos >= 0, `Could not find "${name}" in source`); + const symbol = project.checker.getSymbolAtPosition("/src/types.ts", pos); + assert.ok(symbol, `No symbol found at "${name}"`); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type, `No type found for symbol "${name}"`); + return { type, project, snapshot, api }; + } + + test("TypeReference.getTarget() returns the generic target", () => { + const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "arr:"); + using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Object); + const ref = type as TypeReference; + assert.ok(ref.objectFlags & ObjectFlags.Reference); + assert.equal(type.isObjectType(), true); + assert.equal(type.isTypeReference(), true); + assert.equal(type.isLiteralType(), false); + const target = ref.getTarget(); + assert.ok(target); + assert.ok(target.flags & TypeFlags.Object); + const typeParameters = target.getTypeParameters(); + assert.ok(typeParameters); + assert.equal(typeParameters.length, 1); + const properties = type.getProperties(); + assert.ok(properties.some(property => property.name === "length")); + assert.equal((type.getProperty("length"))?.name, "length"); + assert.ok((type.getApparentProperties()).length >= properties.length); + assert.strictEqual(type.getNonNullableType(), type); + }); + + test("UnionOrIntersectionType.getTypes() returns union members", () => { + const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "union:"); + using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Union); + const union = type as UnionOrIntersectionType; + const types = union.getTypes(); + assert.ok(types.length >= 2); + assert.strictEqual(union.getTypes(), types); + assert.equal(type.isUnionType(), true); + assert.equal(type.isIntersectionType(), false); + }); + + test("UnionOrIntersectionType.getTypes() returns intersection members", () => { + const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "intersection:"); + using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.Intersection); + const inter = type as UnionOrIntersectionType; + const types = inter.getTypes(); + assert.ok(types.length >= 2); + }); + + test("UnionOrIntersectionType.getTypes() on a wrongly-cast type returns undefined without hitting the server", () => { + const src = `export const s: string = ""; export const u: string | number = "";`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // `string` is neither a union/intersection nor a template literal type, + // so it has no constituent types. The client guards on the type's flags + // and returns undefined without ever sending a request the server cannot satisfy. + const sSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); + assert.ok(sSymbol); + const sType = project.checker.getTypeOfSymbol(sSymbol); + assert.ok(sType); + assert.equal((sType as unknown as UnionOrIntersectionType).getTypes(), undefined); + + // A real union still returns its constituents. + const uSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("u:")); + assert.ok(uSymbol); + const uType = project.checker.getTypeOfSymbol(uSymbol); + assert.ok(uType); + assert.equal(((uType as UnionOrIntersectionType).getTypes()).length, 2); + }); + + test("IndexType.getTarget() returns the target type", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("KeyOf", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + // KeyOf = keyof T — this is an IndexType + assert.ok(type.flags & TypeFlags.Index, `Expected IndexType, got flags ${type.flags}`); + const indexType = type as IndexType; + const target = indexType.getTarget(); + assert.ok(target); + }); + + test("IndexedAccessType.getObjectType() and getIndexType()", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("Lookup", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.IndexedAccess, `Expected IndexedAccessType, got flags ${type.flags}`); + const ia = type as IndexedAccessType; + assert.equal(type.isIndexedAccessType(), true); + const objectType = ia.getObjectType(); + assert.ok(objectType); + const indexType = ia.getIndexType(); + assert.ok(indexType); + }); + + test("ConditionalType.getCheckType() and getExtendsType()", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); + const cond = type as ConditionalType; + assert.equal(type.isConditionalType(), true); + const checkType = cond.getCheckType(); + assert.ok(checkType); + const extendsType = cond.getExtendsType(); + assert.ok(extendsType); + }); + + test("ConditionalType.getTrueType() and getFalseType()", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("Cond", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Conditional, `Expected ConditionalType, got flags ${type.flags}`); + + const trueType = (type as ConditionalType).getTrueType(); + assert.ok(trueType, "should return the true-branch type"); + assert.ok(trueType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for true branch, got flags ${trueType.flags}`); + assert.equal((trueType as LiteralType).value, "yes"); + + const falseType = (type as ConditionalType).getFalseType(); + assert.ok(falseType, "should return the false-branch type"); + assert.ok(falseType.flags & TypeFlags.StringLiteral, `Expected StringLiteral for false branch, got flags ${falseType.flags}`); + assert.equal((falseType as LiteralType).value, "no"); + }); + + test("MappedType exposes its component types", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("Mapped", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(type.isMappedType(), true); + const mapped = type as MappedType; + assert.ok((mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); + assert.ok(mapped.getConstraintType()); + assert.ok(mapped.getNameType()); + assert.ok(mapped.getTemplateType()); + }); + + test("MappedType returned as a union constituent exposes its component types", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.resolveName("MappedUnion", SymbolFlags.TypeAlias, { document: "/src/types.ts", position: 0 }); + assert.ok(symbol); + const union = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(union); + const mapped = ((union as UnionOrIntersectionType).getTypes()).find(type => type.isMappedType()); + assert.ok(mapped); + assert.ok((mapped.getTypeParameter()).flags & TypeFlags.TypeParameter); + assert.ok(mapped.getConstraintType()); + assert.ok(mapped.getNameType()); + assert.ok(mapped.getTemplateType()); + }); + + test("TemplateLiteralType.texts and getTypes()", () => { + const { type, api: disposableAPI } = getTypeAtName(spawnAPI(typeFiles), "tpl:"); + using api = disposableAPI; + + assert.ok(type.flags & TypeFlags.TemplateLiteral, `Expected TemplateLiteralType, got flags ${type.flags}`); + const tpl = type as TemplateLiteralType; + assert.ok(tpl.texts); + assert.ok(tpl.texts.length >= 2); + assert.equal(tpl.texts[0], "hello "); + const types = tpl.getTypes(); + assert.ok(types.length >= 1); + }); + + test("StringMappingType.getTarget() returns the mapped type", () => { + using api = spawnAPI(typeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = typeFiles["/src/types.ts"]; + const pos = src.indexOf("Upper"); + const symbol = project.checker.getSymbolAtPosition("/src/types.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + // Uppercase<"hello"> may resolve to a StringMappingType or a string literal + if (type.flags & TypeFlags.StringMapping) { + const sm = type as StringMappingType; + const target = sm.getTarget(); + assert.ok(target); + } + // If it resolved to "HELLO" literal, that's fine too — it means eager evaluation + }); + + test("tuple metadata is owned by tuple targets", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare function empty(value: readonly []): void; +declare function nonempty(value: readonly [number]): void; +declare function array(value: readonly number[]): void; +empty([]); +nonempty([1]); +array([]); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const arrayLiterals: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ArrayLiteralExpression) { + arrayLiterals.push(node); + } + node.forEachChild(visit); + }); + assert.equal(arrayLiterals.length, 3); + + for (const [index, expectedFixedLength] of [0, 1].entries()) { + const type = project.checker.getTypeAtLocation(arrayLiterals[index]); + assert.equal(project.checker.isTupleType(type), true); + assert.equal(project.checker.isTupleTypeTarget(type), false); + assert.equal(type.isTupleType(), true); + assert.equal(type.isTupleTypeTarget(), false); + assert.ok(type.isTupleType()); + assert.equal(Reflect.get(type, "fixedLength"), undefined); + + const target = type.getTarget(); + assert.ok(target.objectFlags & ObjectFlags.Tuple); + assert.equal(project.checker.isTupleType(target), true); + assert.equal(project.checker.isTupleTypeTarget(target), true); + assert.equal(target.isTupleType(), true); + assert.equal(target.isTupleTypeTarget(), true); + assert.ok(target.isTupleTypeTarget()); + assert.equal(target.fixedLength, expectedFixedLength); + assert.equal(target.elementFlags.length, expectedFixedLength); + assert.equal(target.readonly, false); + } + + const arrayType = project.checker.getTypeAtLocation(arrayLiterals[2]); + assert.equal(project.checker.isTupleType(arrayType), false); + assert.equal(project.checker.isTupleTypeTarget(arrayType), false); + assert.equal(arrayType.isTupleType(), false); + assert.equal(arrayType.isTupleTypeTarget(), false); + }); + + test("tuple targets expose labeled element declarations", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export function gh1449(a: T): T { + return a; +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const functionDeclaration = sourceFile.statements.find(isFunctionDeclaration); + assert.ok(functionDeclaration); + const constraint = functionDeclaration.typeParameters?.[0].constraint; + assert.ok(constraint); + + const type = project.checker.getTypeFromTypeNode(constraint); + assert.ok(type.isTupleType()); + const target = type.getTarget(); + const declarations = target.labeledElementDeclarations; + assert.ok(declarations); + assert.equal(declarations.length, 2); + + const names: string[] = []; + for (const handle of declarations) { + assert.ok(handle); + assert.equal(handle.kind, SyntaxKind.NamedTupleMember); + const declaration = handle.resolve(); + assert.ok(declaration); + assert.ok(isIdentifier(declaration.name)); + names.push(declaration.name.text); + } + assert.deepEqual(names, ["foo", "bar"]); + }); +}); + +describe("Checker - intrinsic type getters", { concurrency }, () => { + const intrinsicFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = 1;`, + }; + + test("getAnyType returns a type with Any flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getAnyType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Any); + }); + + test("getStringType returns a type with String flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getStringType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.String); + }); + + test("getNumberType returns a type with Number flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getNumberType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Number); + }); + + test("getBooleanType returns a type with Boolean flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getBooleanType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Boolean); + }); + + test("getVoidType returns a type with Void flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getVoidType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Void); + }); + + test("getUndefinedType returns a type with Undefined flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getUndefinedType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Undefined); + }); + + test("getNullType returns a type with Null flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getNullType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Null); + }); + + test("getNeverType returns a type with Never flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getNeverType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Never); + }); + + test("getUnknownType returns a type with Unknown flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getUnknownType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Unknown); + }); + + test("getBigIntType returns a type with BigInt flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getBigIntType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.BigInt); + }); + + test("getESSymbolType returns a type with ESSymbol flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getESSymbolType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.ESSymbol); + }); + + test("getNonPrimitiveType returns a type with NonPrimitive flag", () => { + using api = spawnAPI(intrinsicFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const type = project.checker.getNonPrimitiveType(); + assert.ok(type); + assert.ok(type.flags & TypeFlags.NonPrimitive); + }); +}); + +describe("Checker - multi-project type ID uniqueness", { concurrency }, () => { + test("intrinsic types from 3 projects in the same snapshot have non-colliding IDs", () => { + using api = spawnAPI({ + "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj1/src/index.ts": `export const x = 1;`, + "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj2/src/index.ts": `export const y = "hello";`, + "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj3/src/index.ts": `export const z = true;`, + }); + + const snapshot = api.createSnapshot({ + openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], + }); + + const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; + const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; + const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; + assert.ok(proj1, "proj1 should be in final snapshot"); + assert.ok(proj2, "proj2 should be in final snapshot"); + assert.ok(proj3, "proj3 should be in final snapshot"); + + // Fetch several intrinsic types from each checker. + // If type IDs collide across checkers, registerType panics → API error. + const num1 = proj1.checker.getNumberType(); + const str1 = proj1.checker.getStringType(); + const bool1 = proj1.checker.getBooleanType(); + const any1 = proj1.checker.getAnyType(); + const num2 = proj2.checker.getNumberType(); + const str2 = proj2.checker.getStringType(); + const bool2 = proj2.checker.getBooleanType(); + const any2 = proj2.checker.getAnyType(); + const num3 = proj3.checker.getNumberType(); + const str3 = proj3.checker.getStringType(); + const bool3 = proj3.checker.getBooleanType(); + const any3 = proj3.checker.getAnyType(); + + assert.ok(num1.flags & TypeFlags.Number, "proj1 number type"); + assert.ok(str1.flags & TypeFlags.String, "proj1 string type"); + assert.ok(bool1.flags & TypeFlags.Boolean, "proj1 boolean type"); + assert.ok(any1.flags & TypeFlags.Any, "proj1 any type"); + + assert.ok(num2.flags & TypeFlags.Number, "proj2 number type"); + assert.ok(str2.flags & TypeFlags.String, "proj2 string type"); + assert.ok(bool2.flags & TypeFlags.Boolean, "proj2 boolean type"); + assert.ok(any2.flags & TypeFlags.Any, "proj2 any type"); + + assert.ok(num3.flags & TypeFlags.Number, "proj3 number type"); + assert.ok(str3.flags & TypeFlags.String, "proj3 string type"); + assert.ok(bool3.flags & TypeFlags.Boolean, "proj3 boolean type"); + assert.ok(any3.flags & TypeFlags.Any, "proj3 any type"); + }); + + test("symbol and signature handles from 3 projects in the same snapshot have non-colliding IDs", () => { + using api = spawnAPI({ + "/proj1/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj1/src/index.ts": `export function add(a: number, b: number): number { return a + b; }`, + "/proj2/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj2/src/index.ts": `export function greet(name: string): string { return "hello " + name; }`, + "/proj3/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/proj3/src/index.ts": `export function toggle(b: boolean): boolean { return !b; }`, + }); + + const snapshot = api.createSnapshot({ + openProjects: ["/proj1/tsconfig.json", "/proj2/tsconfig.json", "/proj3/tsconfig.json"], + }); + + const proj1 = snapshot.getConfiguredProject("/proj1/tsconfig.json")!; + const proj2 = snapshot.getConfiguredProject("/proj2/tsconfig.json")!; + const proj3 = snapshot.getConfiguredProject("/proj3/tsconfig.json")!; + + // Get a symbol from each project (exercises symbol registry) + const src1 = `export function add(a: number, b: number): number { return a + b; }`; + const src2 = `export function greet(name: string): string { return "hello " + name; }`; + const src3 = `export function toggle(b: boolean): boolean { return !b; }`; + + const sym1 = proj1.checker.getSymbolAtPosition("/proj1/src/index.ts", src1.indexOf("add")); + const sym2 = proj2.checker.getSymbolAtPosition("/proj2/src/index.ts", src2.indexOf("greet")); + const sym3 = proj3.checker.getSymbolAtPosition("/proj3/src/index.ts", src3.indexOf("toggle")); + assert.ok(sym1, "proj1 symbol"); + assert.ok(sym2, "proj2 symbol"); + assert.ok(sym3, "proj3 symbol"); + assert.equal(sym1.name, "add", "proj1 symbol name"); + assert.equal(sym2.name, "greet", "proj2 symbol name"); + assert.equal(sym3.name, "toggle", "proj3 symbol name"); + + // Get type of each symbol, then signatures (exercises type + signature registries) + const type1 = proj1.checker.getTypeOfSymbol(sym1); + const type2 = proj2.checker.getTypeOfSymbol(sym2); + const type3 = proj3.checker.getTypeOfSymbol(sym3); + assert.ok(type1, "proj1 function type"); + assert.ok(type2, "proj2 function type"); + assert.ok(type3, "proj3 function type"); + + const sigs1 = proj1.checker.getSignaturesOfType(type1, SignatureKind.Call); + const sigs2 = proj2.checker.getSignaturesOfType(type2, SignatureKind.Call); + const sigs3 = proj3.checker.getSignaturesOfType(type3, SignatureKind.Call); + assert.equal(sigs1.length, 1, "proj1 has 1 call signature"); + assert.equal(sigs2.length, 1, "proj2 has 1 call signature"); + assert.equal(sigs3.length, 1, "proj3 has 1 call signature"); + assert.equal(sigs1[0].parameters.length, 2, "proj1 add() has 2 params"); + assert.equal(sigs2[0].parameters.length, 1, "proj2 greet() has 1 param"); + assert.equal(sigs3[0].parameters.length, 1, "proj3 toggle() has 1 param"); + }); +}); + +describe("Checker - getBaseTypeOfLiteralType", { concurrency }, () => { + test("number literal widens to number", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x = 42;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const x = 42;`; + const pos = src.indexOf("x ="); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const literalType = project.checker.getTypeOfSymbol(symbol); + assert.ok(literalType); + assert.ok(literalType.flags & TypeFlags.NumberLiteral); + const baseType = project.checker.getBaseTypeOfLiteralType(literalType); + assert.ok(baseType); + assert.ok(baseType.flags & TypeFlags.Number); + }); + + test("string literal widens to string", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const s = "hello";`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const s = "hello";`; + const pos = src.indexOf("s "); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const literalType = project.checker.getTypeOfSymbol(symbol); + assert.ok(literalType); + assert.ok(literalType.flags & TypeFlags.StringLiteral); + const baseType = project.checker.getBaseTypeOfLiteralType(literalType); + assert.ok(baseType); + assert.ok(baseType.flags & TypeFlags.String); + }); +}); + +describe("Checker - getContextualType", { concurrency }, () => { + test("contextual type from function parameter", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +function foo(x: number) {} +foo(42); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the argument "42" in foo(42) + // statement[1] = foo(42); which is an ExpressionStatement -> CallExpression + const callStmt = sourceFile.statements[1]; + assert.ok(callStmt); + let numLiteral: import("@typescript/typescript/unstable/ast").Expression | undefined; + callStmt.forEachChild(function visit(node) { + if (isCallExpression(node)) { + // First argument + numLiteral = node.arguments[0]; + } + node.forEachChild(visit); + }); + assert.ok(numLiteral); + const contextualType = project.checker.getContextualType(numLiteral); + assert.ok(contextualType); + assert.ok(contextualType.flags & TypeFlags.Number); + }); +}); + +describe("Checker - getTypeOfSymbolAtLocation", { concurrency }, () => { + test("narrowed type via typeof check", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export function check(x: string | number) { + if (typeof x === "string") { + return x; + } + return x; +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport function check(x: string | number) {\n if (typeof x === "string") {\n return x;\n }\n return x;\n}\n`; + + // Get the symbol for parameter "x" + const paramPos = src.indexOf("x:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", paramPos); + assert.ok(symbol); + assert.equal(symbol.name, "x"); + + // Get the type of "x" at the wider function scope — should be string | number + const wideType = project.checker.getTypeOfSymbol(symbol); + assert.ok(wideType); + assert.ok(wideType.flags & TypeFlags.Union, `Expected union type, got flags ${wideType.flags}`); + + // Get the narrowed return x inside the if block + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // statement[0] is the function declaration + const funcDecl = sourceFile.statements[0]; + assert.ok(funcDecl); + // Walk to find the first "return x" — inside the if, x should be narrowed to string + let firstReturnX: import("@typescript/typescript/unstable/ast").Node | undefined; + funcDecl.forEachChild(function visit(node) { + if (isReturnStatement(node) && !firstReturnX) { + // The expression of the return statement is the identifier "x" + if (node.expression) { + firstReturnX = node.expression; + } + } + node.forEachChild(visit); + }); + assert.ok(firstReturnX); + const narrowedType = project.checker.getTypeOfSymbolAtLocation(symbol, firstReturnX); + assert.ok(narrowedType); + // Inside the if (typeof x === "string") branch, x should be narrowed to string + assert.ok(narrowedType.flags & TypeFlags.String, `Expected string type, got flags ${narrowedType.flags}`); + }); +}); + +describe("Checker - getShorthandAssignmentValueSymbol", { concurrency }, () => { + test("shorthand property symbol resolves to variable", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const name = "Alice"; +export const obj = { name }; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the shorthand property assignment { name } + // statement[1] = export const obj = { name }; + let shorthandNode: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isShorthandPropertyAssignment(node)) { + shorthandNode = node; + } + node.forEachChild(visit); + }); + assert.ok(shorthandNode, "Should find a shorthand property assignment"); + const valueSymbol = project.checker.getShorthandAssignmentValueSymbol(shorthandNode); + assert.ok(valueSymbol); + assert.equal(valueSymbol.name, "name"); + }); +}); + +describe("readFile callback semantics", { concurrency }, () => { + test("callback configurations require every operation at runtime", () => { + assert.throws( + () => new API({ fs: { readFile: serverFS.useOS } as FileSystemCallbacks }), + /Invalid filesystem callback 'fileExists'/, + ); + }); + + test("invalid callback results do not fall through to the server OS", () => { + const fs: FileSystemCallbacks = { + ...createVirtualFileSystem({ + "/tsconfig.json": "{}", + }), + readFile: (() => null) as unknown as FileSystemCallbacks["readFile"], + }; + using api = new API({ cwd: "/", fs }); + assert.throws( + () => api.readConfigFile("/tsconfig.json"), + /Invalid result from filesystem callback 'readFile'/, + ); + }); + + test("realpath callback string results are resolved and normalized by the server", () => { + const fs = createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { module: "nodenext", moduleResolution: "nodenext" }, + files: ["index.ts"], + }), + "/index.ts": `import "pkg";`, + "/node_modules/pkg/package.json": JSON.stringify({ name: "pkg", version: "1.0.0", types: "index.d.ts" }), + "/node_modules/pkg/index.d.ts": `export {};`, + }); + for ( + const realpath of [ + (path: string) => path.replaceAll("/", "\\"), + (path: string) => path.slice(path.lastIndexOf("/") + 1), + (path: string) => "../" + path.split("/").slice(-2).join("/"), + ] + ) { + const callbacks: FileSystemCallbacks = { ...fs, realpath }; + using api = new API({ cwd: "/", fs: callbacks }); + + using snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + assert.ok( + (snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFileNames()) + .includes(toRootedFilePath("/node_modules/pkg/index.d.ts", undefined)), + ); + } + }); + + test("readFile: string returns content, undefined blocks fallback, useOS falls through to the server OS", () => { + const virtualFiles: Record = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x: number = 1;`, + }; + const vfs = createVirtualFileSystem(virtualFiles); + const blockedPath = "/src/blocked.ts"; + + const fs: FileSystemCallbacks = { + ...vfs, + readFile: fileName => { + if (fileName === blockedPath) { + return undefined; + } + // Try the VFS first; if it has the file, return its content (string). + // Otherwise use the OS filesystem on the server. + return vfs.readFile(fileName); + }, + }; + + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // 1. String content: virtual file is found + const sf = project.program.getSourceFile("/src/index.ts"); + assert.ok(sf, "Virtual file should be found"); + assert.equal(sf.text, virtualFiles["/src/index.ts"]); + + // 2. useOS fallback: lib files from the server OS should be present. + // If readFile returned undefined rather than useOS for unknowns, lib files would be missing + // and `number` would not resolve — this was the original async bug. + // Verify by checking that `number` resolves to a proper type (not error). + const pos = virtualFiles["/src/index.ts"].indexOf("x:"); + const type = project.checker.getTypeAtPosition("/src/index.ts", pos); + assert.ok(type, "Type should resolve"); + assert.ok(type.flags & TypeFlags.Number, `Expected number type, got flags ${type.flags}`); + + // 3. undefined blocks fallback: blocked file should not be found + const blockedSf = project.program.getSourceFile(blockedPath); + assert.equal(blockedSf, undefined, "Blocked file should not be found"); + }); + + test("configured case sensitivity is used by the server and client", () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["/src/index.ts"] }), + "/src/index.ts": `export const value = 1;`, + }; + { + using api = new API({ + cwd: "/", + fs: createVirtualFileSystem(files), + useCaseSensitiveFileNames: false, + }); + const program = (api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; + assert.ok(program.getSourceFile("/SRC/INDEX.TS")); + } + { + using api = new API({ + cwd: "/", + fs: createVirtualFileSystem(files), + useCaseSensitiveFileNames: true, + }); + const program = (api.createSnapshot({ openProject: "/tsconfig.json" })).getConfiguredProject("/tsconfig.json")!.program; + assert.equal(program.getSourceFile("/SRC/INDEX.TS"), undefined); + } + }); +}); + +describe("updateSnapshot file systems", { concurrency }, () => { + test("request filesystem factories normalize files and preserve explicit listings", () => { + const memory = createFileSystem([ + ["/src/index.ts", "posix"], + ["C:\\repo\\src\\index.ts", "windows"], + ["file:///literal%20path.ts", "literal file-name string"], + [{ uri: "file:///encoded/path%20with%20spaces.ts" }, "file URI"], + [{ uri: "file:///C%3A/repo/encoded%23name.ts" }, "Windows file URI"], + [{ uri: "file://server/share/encoded%20name.ts" }, "UNC file URI"], + [{ uri: "file:///encoded/unicode%E2%80%93name.ts" }, "Unicode file URI"], + [{ uri: "file:///encoded/literal+plus.ts" }, "plus file URI"], + [{ uri: "file:///encoded/once%2520encoded.ts" }, "double-encoded file URI"], + ["vscode-remote://ssh-remote+host/workspace/src/index.ts", "remote"], + ["vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts", "notebook"], + ]); + assert.deepEqual(memory, { + kind: "full", + files: { + "/src/index.ts": "posix", + "C:/repo/src/index.ts": "windows", + "file:///literal%20path.ts": "literal file-name string", + "/encoded/path with spaces.ts": "file URI", + "C:/repo/encoded#name.ts": "Windows file URI", + "//server/share/encoded name.ts": "UNC file URI", + "/encoded/unicode–name.ts": "Unicode file URI", + "/encoded/literal+plus.ts": "plus file URI", + "/encoded/once%20encoded.ts": "double-encoded file URI", + "vscode-remote://ssh-remote+host/workspace/src/index.ts": "remote", + "vscode-notebook-cell://authority/workspace/notebook.ipynb/cell.ts": "notebook", + }, + directories: undefined, + symlinks: undefined, + removedPaths: undefined, + }); + + const directories = { "/explicit": { files: ["provided.ts"], directories: [] } }; + const cache = createFileSystemLayer([["/ignored/derived.ts", "cache"]], { + directories, + removedPaths: ["/removed.ts", "/removed"], + }); + assert.equal(cache.kind, "layer"); + assert.deepEqual(cache.directories, directories); + assert.deepEqual(cache.removedPaths, ["/removed.ts", "/removed"]); + + assert.throws( + () => + createFileSystem([ + ["/duplicate.ts", "path"], + [{ uri: "file:///duplicate.ts" }, "URI"], + ]), + /Duplicate request filesystem path: \/duplicate\.ts/, + ); + + const prototypeFileSystem = createFileSystem([["__proto__", "prototype"]]); + assert.equal(prototypeFileSystem.files["__proto__"], "prototype"); + assert.ok(Object.hasOwn(prototypeFileSystem.files, "__proto__")); + + assert.throws( + () => + createFileSystem([ + ["/normalized/duplicate.ts", "forward slash"], + ["\\normalized\\duplicate.ts", "backslash"], + ]), + /Duplicate request filesystem path: \/normalized\/duplicate\.ts/, + ); + }); + + test("full file system is total and does not invoke host callbacks", () => { + const callbackCalls: string[] = []; + const host = createVirtualFileSystem({ + "/host.ts": `export const source = "host";`, + }); + const fs: FileSystemCallbacks = { + readFile: path => { + callbackCalls.push(`readFile:${path}`); + return host.readFile!(path); + }, + fileExists: path => { + callbackCalls.push(`fileExists:${path}`); + return host.fileExists!(path); + }, + directoryExists: path => { + callbackCalls.push(`directoryExists:${path}`); + return host.directoryExists!(path); + }, + getAccessibleEntries: path => { + callbackCalls.push(`getAccessibleEntries:${path}`); + return host.getAccessibleEntries!(path); + }, + realpath: path => { + callbackCalls.push(`realpath:${path}`); + return path; + }, + stat: path => { + callbackCalls.push(`stat:${path}`); + if (host.directoryExists(rootedDirectoryPathFromPath(path))) return { mode: 0o040555, size: 0, mtime: new Date(0) }; + if (host.fileExists(rootedFilePathFromPath(path))) return { mode: 0o100444, size: 0, mtime: new Date(0) }; + return undefined; + }, + writeFile: (path, content) => { + callbackCalls.push(`writeFile:${path}`); + host.writeFile!(path, content); + }, + removeFile: path => { + callbackCalls.push(`removeFile:${path}`); + host.removeFile(path); + }, + }; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), + "/src/index.ts": `export const source = "memory";`, + }, + directories: { + "/": { files: ["tsconfig.json"], directories: ["src"] }, + "/src": { files: ["index.ts"], directories: [] }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.equal(sourceFile?.text, `export const source = "memory";`); + assert.equal(project.program.getSourceFile("/host.ts"), undefined); + assert.deepEqual(callbackCalls, []); + }); + + test("full file system with lib resolves the default library", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemWithLib(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true }, files: ["src/main.ts"] }), + "/src/main.ts": `export const values: Array = [];`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.deepEqual(program.getGlobalDiagnostics(), []); + const sourceFileNames = program.getSourceFileNames(); + const defaultLibraryName = sourceFileNames.find(fileName => fileName.includes("/lib.") && fileName.endsWith(".d.ts")); + assert.ok(defaultLibraryName, JSON.stringify(sourceFileNames)); + const defaultLibrary = program.getSourceFile(defaultLibraryName); + assert.ok(defaultLibrary); + assert.equal(program.isSourceFileDefaultLibrary(defaultLibrary), true); + }); + + test("full file system accepts and caches paths decoded from VS Code document URIs", () => { + const fileDocument = { uri: "file:///workspace/file%20name.ts" }; + const remoteDocument = { uri: "vscode-remote://ssh-remote+host/workspace/src/remote%20name.ts" }; + const notebookDocument = { uri: "vscode-notebook-cell:/workspace/notebook.ipynb/cell%20name.ts" }; + const untitledDocument = { uri: "untitled:Untitled-1" }; + const files: [DocumentIdentifier, string][] = [ + [fileDocument, `export const file = true;`], + [remoteDocument, `export const remote = true;`], + [notebookDocument, `export const cell = true;`], + [untitledDocument, `export const untitled = true;`], + ]; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + collectTiming: true, + }); + using snapshot = api.createSnapshot({ + openFiles: files.map(([document]) => document), + fileSystem: createFileSystem(files), + }); + for (const [document, text] of files) { + const project = snapshot.getDefaultProjectForFile(document); + assert.ok(project); + api.resetTimingInfo(); + const sourceFile = project.program.getSourceFile(document); + assert.ok(sourceFile); + assert.equal(sourceFile.text, text); + assert.equal((api.getTimingInfo()).totals.requestCount, 1); + + assert.strictEqual(project.program.getSourceFile(document), sourceFile); + assert.strictEqual(project.program.getSourceFile(sourceFile.fileName), sourceFile); + assert.strictEqual(project.program.getSourceFile(sourceFile.path), sourceFile); + assert.equal((api.getTimingInfo()).totals.requestCount, 1, sourceFile.fileName); + } + }); + + test("file system layer bypasses callbacks on hits and falls back on misses", () => { + const readFileCalls: string[] = []; + const directoryCalls: string[] = []; + const host = createVirtualFileSystem({ + "/src/fallback.ts": `export const fallback = true;`, + }); + const fs: FileSystemCallbacks = { + ...host, + readFile: path => { + readFileCalls.push(path); + return host.readFile!(path); + }, + getAccessibleEntries: path => { + directoryCalls.push(path); + return host.getAccessibleEntries!(path); + }, + }; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: { + kind: "layer", + files: { + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] }), + "/src/index.ts": `export const cached = true;`, + }, + directories: { + "/": { files: ["tsconfig.json"], directories: ["src"] }, + "/src": { files: ["fallback.ts", "index.ts"], directories: [] }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.equal((project.program.getSourceFile("/src/index.ts"))?.text, `export const cached = true;`); + assert.equal((project.program.getSourceFile("/src/fallback.ts"))?.text, `export const fallback = true;`); + + assert.ok(!readFileCalls.includes("/tsconfig.json")); + assert.ok(!readFileCalls.includes("/src/index.ts")); + assert.ok(readFileCalls.includes("/src/fallback.ts")); + assert.ok(!directoryCalls.includes("/")); + assert.ok(!directoryCalls.includes("/src")); + }); + + test("file system layer factory preserves host directory entries", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ + "/src/from-host.ts": `export const host = true;`, + }), + }); + + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemLayer([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, include: ["src/**/*.ts"] })], + ["/src/from-cache.ts", `export const cache = true;`], + ]), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.deepEqual( + [...program.getSourceFileNames()].sort(), + ["/src/from-cache.ts", "/src/from-host.ts"], + ); + }); + + test("full file system resolves packages through internal monorepo symlinks", () => { + const callbackCalls: string[] = []; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: path => { + callbackCalls.push(path); + return serverFS.useOS; + }, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }, + }); + + using snapshot = api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), + "/project/index.ts": `import { value } from "pkg"; export { value };`, + "/packages/pkg/index.d.ts": `export declare const value: number;`, + }, + symlinks: { + "/project/node_modules/pkg": { target: "/packages/pkg" }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (project.program.getSourceFile("/packages/pkg/index.d.ts"))?.text, + `export declare const value: number;`, + ); + assert.deepEqual(callbackCalls, []); + }); + + test("full file system resolves relative symlink targets", () => { + const callbackCalls: string[] = []; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: path => { + callbackCalls.push(path); + return serverFS.useOS; + }, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: serverFS.useOS, + removeFile: serverFS.useOS, + }, + }); + + using snapshot = api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["index.ts"] }), + "/project/index.ts": `export { value } from "./pkg";`, + "/packages/pkg/index.d.ts": `export declare const value: number;`, + }, + symlinks: { + "/project/pkg": { target: "../packages/pkg" }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (project.program.getSourceFile("/project/pkg/index.d.ts"))?.text, + `export declare const value: number;`, + ); + assert.deepEqual(callbackCalls, []); + }); + + test("Snapshot.update layers filesystem edits and removals", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem(Object.entries({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { noLib: true }, + include: ["src/**/*.ts"], + }), + "/src/keep.ts": `export const keep = true;`, + "/src/change.ts": `export const version = "old";`, + "/src/remove.ts": `export const remove = true;`, + "/src/removed/gone.ts": `export const gone = true;`, + })), + }); + + using updated = snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/src/change.ts": `export const version = "new";`, + "/src/added.ts": `export const added = true;`, + }), + { + removedPaths: ["/src/remove.ts", "/src/removed"], + }, + ), + }); + const project = updated.getConfiguredProject("/tsconfig.json")!; + assert.equal((project.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); + assert.equal((project.program.getSourceFile("/src/change.ts"))?.text, `export const version = "new";`); + assert.equal((project.program.getSourceFile("/src/added.ts"))?.text, `export const added = true;`); + assert.equal(project.program.getSourceFile("/src/remove.ts"), undefined); + assert.equal(project.program.getSourceFile("/src/removed/gone.ts"), undefined); + using fork = snapshot.update({ ensurePrograms: true }); + assert.equal((fork.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/change.ts"))?.text, `export const version = "old";`); + + using updatedAgain = updated.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/src/added.ts": `export const added = "updated again";`, + }), + { + removedPaths: ["/src/change.ts"], + }, + ), + }); + const updatedAgainProject = updatedAgain.getConfiguredProject("/tsconfig.json")!; + assert.equal((updatedAgainProject.program.getSourceFile("/src/keep.ts"))?.text, `export const keep = true;`); + assert.equal((updatedAgainProject.program.getSourceFile("/src/added.ts"))?.text, `export const added = "updated again";`); + assert.equal(updatedAgainProject.program.getSourceFile("/src/change.ts"), undefined); + }); + + test("eager snapshot disposal does not retain filesystem history", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + let snapshot: Snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["pkg/index.ts"] })], + ["/pkg/index.ts", ""], + ]), + }); + try { + let content = ""; + for (const character of "export const x = 1") { + const oldSnapshot: Snapshot = snapshot; + content += character; + snapshot = oldSnapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer([["/pkg/index.ts", content]]), + }); + oldSnapshot.dispose(); + assert.equal(oldSnapshot.isDisposed(), true); + } + + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((program.getSourceFile("/pkg/index.ts"))?.text, "export const x = 1"); + } + finally { + snapshot.dispose(); + } + }); + + test("Snapshot.update treats a full filesystem as a total replacement", () => { + const host = createVirtualFileSystem({ + "/host.ts": `export const source = "host";`, + }); + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = api.createSnapshot(); + using replaced = snapshot.update({ + ensurePrograms: true, + openProject: "/tsconfig.json", + fileSystem: createFileSystem([ + ["/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true }, files: ["memory.ts", "host.ts"] })], + ["/memory.ts", `export const source = "memory";`], + ]), + }); + const program = replaced.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((program.getSourceFile("/memory.ts"))?.text, `export const source = "memory";`); + assert.equal(program.getSourceFile("/host.ts"), undefined); + }); + + test("Snapshot.update applies target changes through inherited symlinks", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + }); + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem( + Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true }, files: ["src/main.ts"] }), + "/src/main.ts": `import "./link/change"; import "./link/added"; import "./link/remove";`, + "/target/change.ts": `export const version = "old";`, + "/target/remove.ts": `export const removed = true;`, + }), + { + symlinks: { + "/src/link": { target: "/target" }, + }, + }, + ), + }); + + using updated = snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer( + Object.entries({ + "/target/change.ts": `export const version = "new";`, + "/target/added.ts": `export const added = true;`, + }), + { + removedPaths: ["/target/remove.ts"], + }, + ), + }); + const program = updated.getConfiguredProject("/tsconfig.json")!.program; + assert.equal((program.getSourceFile("/src/link/change.ts"))?.text, `export const version = "new";`); + assert.equal((program.getSourceFile("/src/link/added.ts"))?.text, `export const added = true;`); + assert.equal(program.getSourceFile("/src/link/remove.ts"), undefined); + }); + + test("full filesystem emit returns outputs without mutating the host", () => { + const hostWrites: string[] = []; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + directoryExists: serverFS.useOS, + fileExists: serverFS.useOS, + getAccessibleEntries: serverFS.useOS, + readFile: serverFS.useOS, + realpath: serverFS.useOS, + stat: serverFS.useOS, + writeFile: path => { + hostWrites.push(path); + }, + removeFile: serverFS.useOS, + }, + }); + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystem(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), + "/src/main.ts": `export const value: number = 1;`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const result = program.emit(); + assert.deepEqual(result.emittedFiles, ["/out/main.js"]); + assert.deepEqual(result.fileSystem, { + kind: "layer", + files: { + "/out/main.js": `export const value = 1;\n`, + }, + }); + assert.deepEqual(hostWrites, []); + + using updated = snapshot.update({ fileSystem: result.fileSystem!, openFiles: ["/out/main.js"] }); + const outputProject = updated.getDefaultProjectForFile("/out/main.js"); + assert.equal((updated.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"))?.text, `export const value: number = 1;`); + assert.equal((outputProject?.program.getSourceFile("/out/main.js"))?.text, `export const value = 1;\n`); + }); + + test("filesystem layer emit writes through to the host", () => { + const host = createVirtualFileSystem({}); + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = api.createSnapshot({ + openProject: "/tsconfig.json", + fileSystem: createFileSystemLayer(Object.entries({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, outDir: "/out", rootDir: "/src" }, files: ["src/main.ts"] }), + "/src/main.ts": `export const value: number = 1;`, + })), + }); + const program = snapshot.getConfiguredProject("/tsconfig.json")!.program; + const result = program.emit(); + assert.equal(result.fileSystem, undefined); + assert.equal(host.readFile!(toRootedFilePath("/out/main.js", undefined)), `export const value = 1;\n`); + }); + + test("full file system can link node_modules from the host", () => { + const readFileCalls: string[] = []; + const directoryExistsCalls: string[] = []; + const fileExistsCalls: string[] = []; + const host = createVirtualFileSystem({ + "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, + }); + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + ...host, + directoryExists: path => { + directoryExistsCalls.push(path); + return host.directoryExists!(path); + }, + fileExists: path => { + const exists = host.fileExists!(path); + fileExistsCalls.push(`${path}:${exists}`); + return exists; + }, + readFile: path => { + readFileCalls.push(path); + return host.readFile!(path); + }, + }, + }); + + using snapshot = api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: { + kind: "full", + files: { + "/project/tsconfig.json": JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] }), + "/project/index.ts": `import { value } from "pkg"; export { value };`, + }, + symlinks: { + "/project/node_modules": { target: "/host/node_modules", host: true }, + }, + }, + }); + const project = snapshot.getConfiguredProject("/project/tsconfig.json")!; + const sourceFileNames = project.program.getSourceFileNames(); + assert.ok( + sourceFileNames.includes("/host/node_modules/pkg/index.d.ts" as RootedFilePath), + JSON.stringify({ sourceFileNames, readFileCalls, directoryExistsCalls, fileExistsCalls }), + ); + assert.equal( + (project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, + `export declare const value: string;`, + ); + assert.ok(readFileCalls.includes("/host/node_modules/pkg/index.d.ts")); + assert.ok(!readFileCalls.some(path => path.startsWith("/project/node_modules"))); + }); + + test("Snapshot.update host symlinks bypass an inherited full filesystem", () => { + const host = createVirtualFileSystem({ + "/host/node_modules/pkg/index.d.ts": `export declare const value: string;`, + }); + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: host, + }); + using snapshot = api.createSnapshot({ + openProject: "/project/tsconfig.json", + fileSystem: createFileSystem([ + ["/project/tsconfig.json", JSON.stringify({ compilerOptions: { noLib: true, moduleResolution: "node" }, files: ["index.ts"] })], + ["/project/index.ts", `import { value } from "pkg"; export { value };`], + ]), + }); + using updated = snapshot.update({ + ensurePrograms: true, + fileSystem: createFileSystemLayer([], { + symlinks: { + "/project/node_modules": { target: "/host/node_modules", host: true }, + }, + }), + }); + const project = updated.getConfiguredProject("/project/tsconfig.json")!; + assert.equal( + (project.program.getSourceFile("/host/node_modules/pkg/index.d.ts"))?.text, + `export declare const value: string;`, + ); + }); + + // TODO: Add request filesystem coverage for `tsc -b` and `tsc -b --clean` + // once build and clean are exposed through the client API. In particular, + // verify that clean removes synthetic outputs and that build-mode re-timestamping + // of emitted-but-unchanged files works for full filesystems, which currently + // do not model modification times. +}); + +describe("Checker - isArrayType / isTupleType", { concurrency }, () => { + test("number[] is array, not tuple", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: number[] = [];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: number[] = [];`; + const pos = src.indexOf("xs"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), true); + assert.equal(project.checker.isTupleType(type), false); + }); + + test("readonly number[] is array", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: readonly number[] = [];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: readonly number[] = [];`; + const pos = src.indexOf("xs"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), true); + assert.equal(project.checker.isTupleType(type), false); + }); + + test("Array is array, not tuple", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const xs: Array = [];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const xs: Array = [];`; + const pos = src.indexOf("xs"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), true); + assert.equal(project.checker.isTupleType(type), false); + }); + + test("[number, string] is tuple, not array", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const tup: [number, string] = [1, "a"];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const tup: [number, string] = [1, "a"];`; + const pos = src.indexOf("tup"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), false); + assert.equal(project.checker.isTupleType(type), true); + }); + + test("readonly [number, string] is tuple, not array", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const tup: readonly [number, string] = [1, "a"];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const tup: readonly [number, string] = [1, "a"];`; + const pos = src.indexOf("tup"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), false); + assert.equal(project.checker.isTupleType(type), true); + }); + + test("string is neither array nor tuple", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const str: string = "";`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const str: string = "";`; + const pos = src.indexOf("str"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.equal(project.checker.isArrayType(type), false); + assert.equal(project.checker.isTupleType(type), false); + }); +}); + +describe("Checker - isReadonlySymbol", { concurrency }, () => { + test("properties with a 'readonly' modifier", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface User { + readonly name: string; + age: number; +} + +export type ReadonlyUser = Readonly; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const user = sourceFile.statements.find(isInterfaceDeclaration); + assert.ok(user); + const userProperties = project.checker.getPropertiesOfType( + project.checker.getTypeAtLocation(user), + ); + assert.equal(project.checker.isReadonlySymbol(userProperties[0]), true); + assert.equal(project.checker.isReadonlySymbol(userProperties[1]), false); + const readonlyUser = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(readonlyUser); + const readonlyUserProperties = project.checker.getPropertiesOfType( + project.checker.getTypeAtLocation(readonlyUser), + ); + assert.equal(project.checker.isReadonlySymbol(readonlyUserProperties[0]), true); + assert.equal(project.checker.isReadonlySymbol(readonlyUserProperties[1]), true); + }); + + test("variables declared with 'const'", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const a = 1; export let b = 2;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const a = checker.getSymbolAtPosition("/src/main.ts", "export const ".length); + const b = checker.getSymbolAtPosition("/src/main.ts", "export const a = 1; export let ".length); + assert.ok(a); + assert.ok(b); + assert.equal(checker.isReadonlySymbol(a), true); + assert.equal(checker.isReadonlySymbol(b), false); + }); + + test("get accessors without matching set accessors", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +class Alpha { + private _value!: number; + get value(): number { + return this._value; + } +} +class Bravo { + private _value!: number; + get value(): number { + return this._value; + } + set value(newValue: number) { + this._value = newValue; + } +} +export type A = InstanceType; +export type B = InstanceType; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAliases = sourceFile.statements.filter(isTypeAliasDeclaration); + assert.equal(typeAliases.length, 2); + const aProperties = project.checker.getPropertiesOfType( + project.checker.getTypeAtLocation(typeAliases[0]), + ); + assert.equal(project.checker.isReadonlySymbol(aProperties[1]), true); + const bProperties = project.checker.getPropertiesOfType( + project.checker.getTypeAtLocation(typeAliases[1]), + ); + assert.equal(project.checker.isReadonlySymbol(bProperties[1]), false); + }); +}); + +describe("Checker - getReturnTypeOfSignature", { concurrency }, () => { + test("returns the return type of a function signature", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function add(a: number, b: number): number { return a + b; }`; + const pos = src.indexOf("add("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const returnType = project.checker.getReturnTypeOfSignature(sigs[0]); + assert.ok(returnType); + assert.ok(returnType.flags & TypeFlags.Number, `Expected number, got flags ${returnType.flags}`); + }); +}); + +describe("Checker - getRestTypeOfSignature", { concurrency }, () => { + test("returns the rest type of a signature with rest parameter", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }`; + const pos = src.indexOf("sum("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const restType = project.checker.getRestTypeOfSignature(sigs[0]); + assert.ok(restType); + assert.ok(restType.flags & TypeFlags.Number, `Expected number type, got flags ${restType.flags}`); + }); +}); + +describe("Checker - getTypePredicateOfSignature", { concurrency }, () => { + test("returns type predicate for 'x is T' guard", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function isString(x: unknown): x is string { return typeof x === "string"; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function isString(x: unknown): x is string { return typeof x === "string"; }`; + const pos = src.indexOf("isString("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.Identifier); + assert.equal(predicate.parameterName, "x"); + assert.equal(predicate.parameterIndex, 0); + assert.ok(predicate.type); + assert.ok(predicate.type.flags & TypeFlags.String); + }); + + test("returns type predicate for 'this is T' guard", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Animal { + isdog(): this is Dog { return this instanceof Dog; } +} +export class Dog extends Animal { + bark() {} +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Animal {\n isdog(): this is Dog { return this instanceof Dog; }\n}\nexport class Dog extends Animal {\n bark() {}\n}\n`; + const pos = src.indexOf("isdog("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.This); + }); + + test("returns type predicate for 'asserts x is T'", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function assertIsString(x: unknown): asserts x is string { if (typeof x !== "string") throw new Error(); }`; + const pos = src.indexOf("assertIsString("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); + assert.ok(predicate); + assert.equal(predicate.kind, TypePredicateKind.AssertsIdentifier); + assert.equal(predicate.parameterName, "x"); + assert.equal(predicate.parameterIndex, 0); + assert.ok(predicate.type); + assert.ok(predicate.type.flags & TypeFlags.String); + }); + + test("returns undefined for signature without type predicate", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function add(a: number, b: number): number { return a + b; }`; + const pos = src.indexOf("add("); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const predicate = project.checker.getTypePredicateOfSignature(sigs[0]); + assert.equal(predicate, undefined); + }); +}); + +describe("Checker - getBaseTypes", { concurrency }, () => { + test("returns base types of a class", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Base { + x: number = 0; +} +export class Derived extends Base { + y: string = ""; +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\n`; + const pos = src.indexOf("Derived"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + const baseTypes = project.checker.getBaseTypes(type as InterfaceType); + assert.ok(baseTypes.length > 0, "Should have at least one base type"); + const baseSymbol = baseTypes[0].getSymbol(); + assert.ok(baseSymbol); + assert.equal(baseSymbol.name, "Base"); + }); + + test("returns base types of an interface", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Animal { + name: string; +} +export interface Dog extends Animal { + bark(): void; +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Animal {\n name: string;\n}\nexport interface Dog extends Animal {\n bark(): void;\n}\n`; + const pos = src.indexOf("Dog"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getDeclaredTypeOfSymbol(symbol); + assert.ok(type); + const baseTypes = project.checker.getBaseTypes(type as InterfaceType); + assert.ok(baseTypes.length > 0, "Should have at least one base type"); + const baseSymbol = baseTypes[0].getSymbol(); + assert.ok(baseSymbol); + assert.equal(baseSymbol.name, "Animal"); + }); + + test("does not panic for a type alias to a generic interface instantiation", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Box { + value: T; +} +export type BoxOfString = Box; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const typeAlias = sourceFile.statements.find(isTypeAliasDeclaration); + assert.ok(typeAlias); + const type = project.checker.getTypeAtLocation(typeAlias); + assert.ok(type); + // A generic interface instantiation produces a type reference, not an + // interface type, so it has no base types and yields []. + const baseTypes = project.checker.getBaseTypes(type as InterfaceType); + assert.deepEqual(baseTypes, []); + }); +}); + +describe("Type - getBaseTypes", { concurrency }, () => { + test("returns base types for a class type and undefined for a non-class/interface", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Base { + x: number = 0; +} +export class Derived extends Base { + y: string = ""; +} +export const n: number = 0; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport class Base {\n x: number = 0;\n}\nexport class Derived extends Base {\n y: string = "";\n}\nexport const n: number = 0;\n`; + + const derivedSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("Derived")); + assert.ok(derivedSymbol); + const derivedType = project.checker.getDeclaredTypeOfSymbol(derivedSymbol); + assert.ok(derivedType.isClassOrInterface(), "Derived should be a class/interface type"); + const baseTypes = derivedType.getBaseTypes(); + assert.ok(baseTypes && baseTypes.length > 0, "class type should have base types"); + const baseSymbol = baseTypes![0].getSymbol(); + assert.equal(baseSymbol?.name, "Base"); + + // A primitive type is not a class/interface, so getBaseTypes() is undefined. + const numberSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("n:")); + assert.ok(numberSymbol); + const numberType = project.checker.getTypeOfSymbol(numberSymbol); + assert.ok(numberType); + assert.equal(numberType.isClassOrInterface(), false); + assert.equal(numberType.getBaseTypes(), undefined); + }); +}); + +describe("Type - isErrorType", { concurrency }, () => { + test("identifies the error type from an unresolvable annotation", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +declare const good: string; +declare const bad: ThisTypeDoesNotExist; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\ndeclare const good: string;\ndeclare const bad: ThisTypeDoesNotExist;\n`; + + const badSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("bad")); + assert.ok(badSymbol); + const badType = project.checker.getTypeOfSymbol(badSymbol); + assert.ok(badType); + assert.ok(badType.isErrorType(), "unresolved annotation should yield the error type"); + assert.ok(isErrorType(badType)); + + const goodSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("good")); + assert.ok(goodSymbol); + const goodType = project.checker.getTypeOfSymbol(goodSymbol); + assert.ok(goodType); + assert.equal(goodType.isErrorType(), false, "string type is not the error type"); + assert.equal(isErrorType(goodType), false); + }); +}); + +describe("Checker - well-known symbols", { concurrency }, () => { + test("isUnknownSymbol identifies the aliased unknown symbol", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const value = 1; +export type Alias = typeof value; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport const value = 1;\nexport type Alias = typeof value;\n`; + + // A real symbol is not the unknown/undefined symbol. + const valueSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("value")); + assert.ok(valueSymbol); + assert.equal(project.checker.isUnknownSymbol(valueSymbol), false); + assert.equal(project.checker.isUndefinedSymbol(valueSymbol), false); + }); +}); + +describe("Checker - well-known signatures", { concurrency }, () => { + test("isUnknownSignature identifies an unresolvable call", () => { + const src = ` +const ok = (x: number) => x; +ok(1); +const notCallable = 1; +notCallable(); +`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const calls: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node)) calls.push(node); + node.forEachChild(visit); + }); + assert.equal(calls.length, 2, "should find two call expressions"); + + // The valid call resolves to a real signature, not the unknown signature. + const okSig = project.checker.getResolvedSignature(calls[0]); + assert.equal(project.checker.isUnknownSignature(okSig), false); + + // The call to a non-callable value yields the unknown signature. + const badSig = project.checker.getResolvedSignature(calls[1]); + assert.equal(project.checker.isUnknownSignature(badSig), true); + }); +}); + +describe("Symbol - escaped names and tables", { concurrency }, () => { + test("getExports/getMembers return a cached Map keyed by escaped name", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export class Animal { + name: string = ""; + speak(): void {} +} +export const value = 1; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + + const exports = moduleSymbol.getExports(); + assert.ok(exports.has(escapeLeadingUnderscores("Animal"))); + assert.ok(exports.get(escapeLeadingUnderscores("value"))); + // Calling again returns the same cached Map instance. + assert.strictEqual(moduleSymbol.getExports(), exports); + + const animal = exports.get(escapeLeadingUnderscores("Animal"))!; + const members = animal.getMembers(); + assert.ok(members.get(escapeLeadingUnderscores("name"))); + assert.ok(members.get(escapeLeadingUnderscores("speak"))); + assert.strictEqual(animal.getMembers(), members); + }); + + test("anonymous type symbol has a __-escaped name, never the \\xFE sentinel", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const obj: { a: number } = { a: 1 }; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport const obj: { a: number } = { a: 1 };\n`; + const objSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("obj")); + assert.ok(objSymbol); + const objType = project.checker.getTypeOfSymbol(objSymbol); + assert.ok(objType); + const typeSymbol = objType.getSymbol(); + assert.ok(typeSymbol); + // The anonymous type literal symbol is internally named; over the wire + // it must be the "__type" escaped form, not the raw "\xFE" sentinel. + assert.equal(typeSymbol.escapedName, InternalSymbolName.Type); + assert.ok(!typeSymbol.escapedName.includes("\xFE")); + }); + + test("distinguishes a pattern ambient module name from a matching user-provided export name", () => { + const maliciousName = '"*.css"__pattern@1234'; + const types = ` +declare module "*.css" with { type: "css" } { + const className: string; + export default className; +} +`; + const source = ` +const x = ""; +export { x as '${maliciousName}' }; +`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true, module: "preserve" } }), + "/src/types.d.ts": types, + "/src/main.ts": source, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const typesFile = project.program.getSourceFile("/src/types.d.ts"); + assert.ok(typesFile); + const moduleDeclaration = typesFile.statements.find(isModuleDeclaration); + assert.ok(moduleDeclaration); + const ambientModule = project.checker.getSymbolAtLocation(moduleDeclaration.name); + assert.ok(ambientModule); + assert.match(ambientModule.name, /^__"\*\.css"pattern@\d+$/); + assert.equal(ambientModule.escapedName, ambientModule.name); + assert.equal(tryGetAmbientModuleNameFromSymbolName(ambientModule.escapedName), "*.css"); + + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const sourceFileSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(sourceFileSymbol); + const maliciousExport = (sourceFileSymbol.getExports()).get(escapeLeadingUnderscores(maliciousName)); + assert.ok(maliciousExport); + assert.equal(maliciousExport.name, maliciousName); + assert.equal(maliciousExport.escapedName, maliciousName); + assert.equal(tryGetAmbientModuleNameFromSymbolName(maliciousExport.escapedName), undefined); + }); +}); + +describe("ast - escapeLeadingUnderscores", { concurrency }, () => { + test("round-trips display and escaped names", () => { + assert.equal(escapeLeadingUnderscores("foo"), "foo"); + assert.equal(escapeLeadingUnderscores("_foo"), "_foo"); + assert.equal(escapeLeadingUnderscores("__foo"), "___foo"); + assert.equal(unescapeLeadingUnderscores("foo" as __String), "foo"); + assert.equal(unescapeLeadingUnderscores("__type" as __String), "__type"); + assert.equal(unescapeLeadingUnderscores("___foo" as __String), "__foo"); + }); +}); + +describe("ast - tryGetAmbientModuleNameFromSymbolName", { concurrency }, () => { + test("gets ambient module names from escaped symbol names", () => { + assert.equal(tryGetAmbientModuleNameFromSymbolName('"pkg"' as __String), "pkg"); + assert.equal(tryGetAmbientModuleNameFromSymbolName('__"*.css"pattern@1234' as __String), "*.css"); + assert.equal(tryGetAmbientModuleNameFromSymbolName('"*.css"__pattern@1234' as __String), undefined); + assert.equal(tryGetAmbientModuleNameFromSymbolName('___"*.css"pattern@1234' as __String), undefined); + assert.equal(tryGetAmbientModuleNameFromSymbolName("value" as __String), undefined); + }); +}); + +describe("ast - getJSDocTags", { concurrency }, () => { + test("returns a node's own tags, and inherited @param / @template tags", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers. + * @param a the first number + * @param b the second number + * @returns the sum + */ +export function add(a: number, b: number): number { + return a + b; +} + +/** + * @template T the element type + * @param x a value + */ +export function identity(x: T): T { + return x; +} + +/** @deprecated use add */ +export const total = add(1, 2); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const functions = [...sourceFile.statements].filter(isFunctionDeclaration); + const add = functions[0]; + const identity = functions[1]; + assert.ok(add); + assert.ok(identity); + + // A function reports its own JSDoc tags. + assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); + + // A parameter inherits the matching @param tag from its containing + // signature. + const paramA = add.parameters[0]; + const paramATags = getJSDocTags(paramA); + assert.deepEqual(paramATags.map(t => t.tagName.text), ["param"]); + const paramATag = paramATags[0]; + assert.ok(isJSDocParameterTag(paramATag)); + assert.ok(isIdentifier(paramATag.name)); + assert.equal(paramATag.name.text, "a"); + + const paramB = add.parameters[1]; + const paramBTags = getJSDocTags(paramB); + assert.deepEqual(paramBTags.map(t => t.tagName.text), ["param"]); + const paramBTag = paramBTags[0]; + assert.ok(isJSDocParameterTag(paramBTag)); + assert.ok(isIdentifier(paramBTag.name)); + assert.equal(paramBTag.name.text, "b"); + + // A type parameter inherits the matching @template tag. + const typeParam = identity.typeParameters![0]; + assert.deepEqual(getJSDocTags(typeParam).map(t => t.tagName.text), ["template"]); + + // The value parameter of `identity` inherits its @param tag. + const identityParam = identity.parameters[0]; + assert.deepEqual(getJSDocTags(identityParam).map(t => t.tagName.text), ["param"]); + + // A variable declaration walks up its comment-location chain + // (declaration -> declaration list -> statement) to the JSDoc on the + // containing variable statement. + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const declaration = variable.declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["deprecated"]); + }); + + test("a function-expression parameter inherits @param tags from the variable statement", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** + * @param {string} name a name + * @returns {number} the length + */ +var measure = function (name) { + return name.length; +}; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const declaration = variable.declarationList.declarations[0]; + const funcExpr = declaration.initializer; + assert.ok(funcExpr); + + // The variable statement carries the @param and @returns tags. + assert.deepEqual(getJSDocTags(declaration).map(t => t.tagName.text), ["param", "returns"]); + + // The function expression's parameter walks declaration -> list -> + // statement and inherits the matching @param tag. + const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; + const paramTags = getJSDocTags(param); + assert.deepEqual(paramTags.map(t => t.tagName.text), ["param"]); + const paramTag = paramTags[0]; + assert.ok(isJSDocParameterTag(paramTag)); + assert.ok(isIdentifier(paramTag.name)); + assert.equal(paramTag.name.text, "name"); + }); + + test("a @type cast tag is owned by its parenthesized expression, not the declaration", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** @type {string} */ +const value = "hello"; + +const cast = /** @type {number} */ (someValue); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const statements = [...sourceFile.statements].filter(isVariableStatement); + + // A @type tag directly on a declaration is reported for that declaration. + const valueDecl = statements[0].declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(valueDecl).map(t => t.tagName.text), ["type"]); + + // A @type cast tag attached to a parenthesized expression is owned by + // that expression and is not reported for the enclosing declaration. + const castDecl = statements[1].declarationList.declarations[0]; + assert.deepEqual(getJSDocTags(castDecl).map(t => t.tagName.text), []); + }); +}); + +describe("ast - getJSDocCommentsAndTags", { concurrency }, () => { + test("returns the whole JSDoc comment when the host node owns all of its tags", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * The answer to everything. + * @deprecated use theAnswer instead + */ +export const answer = 42; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; + assert.ok(answer); + + // Every tag on `answer`'s JSDoc comment is owned by `answer`, so the whole + // comment is returned as a single entry rather than its individual tags. + const commentsAndTags = getJSDocCommentsAndTags(answer); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + + // Flattening still yields the same tags as getJSDocTags. + assert.deepEqual(getJSDocTags(answer).map(t => t.tagName.text), ["deprecated"]); + }); + + test("returns the whole JSDoc comment when it has a description but no tags", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * The answer to everything. + */ +export const answer = 42; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const answer = [...sourceFile.statements].filter(isVariableStatement)[0].declarationList.declarations[0]; + assert.ok(answer); + + // With no tags to discard, the JSDoc node (and its description) is + // still returned rather than an empty tag list. + const commentsAndTags = getJSDocCommentsAndTags(answer); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + assert.equal(getTextOfJSDocComment(commentsAndTags[0].comment), "The answer to everything."); + + assert.deepEqual(getJSDocTags(answer), []); + }); + + test("returns individual tags when the host node does not own all of them", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** @type {string} */ +const value = "hello"; + +const cast = /** @type {number} */ (someValue); +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const statements = [...sourceFile.statements].filter(isVariableStatement); + + // The @type cast tag is not owned by `castDecl`, so no tags qualify and + // the JSDoc comment is not returned at all. + const castDecl = statements[1].declarationList.declarations[0]; + assert.deepEqual(getJSDocCommentsAndTags(castDecl), []); + }); + + test("returns an individual JSDocTag for a parameter matched by name", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, checkJs: true } }), + "/src/main.js": ` +/** + * @param {string} name the name to measure + * @returns {number} the length + */ +var measure = function (name) { + return name.length; +}; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.js"); + assert.ok(sourceFile); + const variable = sourceFile.statements.find(isVariableStatement); + assert.ok(variable); + const funcExpr = variable.declarationList.declarations[0].initializer; + assert.ok(funcExpr); + const param = (funcExpr as unknown as { parameters: NodeArray; }).parameters[0]; + + // A Parameter host node returns its matching @param tag directly as a + // JSDocTag, not wrapped in the enclosing JSDoc comment. + const commentsAndTags = getJSDocCommentsAndTags(param); + assert.equal(commentsAndTags.length, 1); + const [tag] = commentsAndTags; + assert.ok(isJSDocParameterTag(tag)); + assert.ok(isIdentifier(tag.name)); + assert.equal(tag.name.text, "name"); + }); + + test("returns the whole JSDoc comment when the host node owns multiple tags", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers. + * @param a the first number + * @param b the second number + * @returns the sum + */ +export function add(a: number, b: number): number { + return a + b; +} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const add = [...sourceFile.statements].find(isFunctionDeclaration); + assert.ok(add); + + // All three tags on `add`'s JSDoc comment are owned by `add`, so the + // whole comment is returned as a single entry rather than three tags. + const commentsAndTags = getJSDocCommentsAndTags(add); + assert.equal(commentsAndTags.length, 1); + assert.ok(isJSDoc(commentsAndTags[0])); + + // Flattening still yields all three tags, in order, via getJSDocTags. + assert.deepEqual(getJSDocTags(add).map(t => t.tagName.text), ["param", "param", "returns"]); + }); +}); + +describe("Checker - getPropertiesOfType", { concurrency }, () => { + test("returns properties of an object type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Person { + name: string; + age: number; + greet(): void; +} +export declare const p: Person; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Person {\n name: string;\n age: number;\n greet(): void;\n}\nexport declare const p: Person;\n`; + const pos = src.indexOf("p: Person"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const props = project.checker.getPropertiesOfType(type); + assert.ok(props.length >= 3, `Expected at least 3 properties, got ${props.length}`); + const names = props.map(p => p.name); + assert.ok(names.includes("name"), "should have 'name' property"); + assert.ok(names.includes("age"), "should have 'age' property"); + assert.ok(names.includes("greet"), "should have 'greet' property"); + }); +}); + +describe("Checker - getIndexInfosOfType", { concurrency }, () => { + test("returns index signatures of an indexed type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface StringMap { + [key: string]: number; +} +export declare const m: StringMap; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface StringMap {\n [key: string]: number;\n}\nexport declare const m: StringMap;\n`; + const pos = src.indexOf("m: StringMap"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const indexInfos = project.checker.getIndexInfosOfType(type); + assert.ok(indexInfos.length > 0, "Should have at least one index info"); + const info = indexInfos[0]; + assert.ok(info.keyType); + assert.ok(info.keyType.flags & TypeFlags.String, `Expected string key type, got flags ${info.keyType.flags}`); + assert.ok(info.valueType); + assert.ok(info.valueType.flags & TypeFlags.Number, `Expected number value type, got flags ${info.valueType.flags}`); + assert.equal(info.isReadonly, false); + }); + + test("readonly index signature reports isReadonly true", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface ReadonlyMap { + readonly [key: string]: number; +} +export declare const m: ReadonlyMap; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface ReadonlyMap {\n readonly [key: string]: number;\n}\nexport declare const m: ReadonlyMap;\n`; + const pos = src.indexOf("m: ReadonlyMap"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const indexInfos = project.checker.getIndexInfosOfType(type); + assert.ok(indexInfos.length > 0); + assert.equal(indexInfos[0].isReadonly, true); + }); +}); + +describe("Checker - TypeScript API parity", { concurrency }, () => { + const files = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Box { + value: T; + chain(): this; + [key: string]: T | ((...args: never[]) => unknown); + [index: number]: T; +} + +/** Returns the input value. + * @deprecated Use identity instead. + */ +export function legacy(value: T): Promise { + return Promise.resolve(value); +} + +declare function consume(value: string | number): void; +consume(1); + +export type Exported = number; +`, + }; + + test("exposes interface this types and checker operations", () => { + using api = spawnAPI(files); + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + const boxSymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Box")); + assert.ok(boxSymbol); + const boxType = project.checker.getDeclaredTypeOfSymbol(boxSymbol) as InterfaceType; + assert.ok(boxType.isClassOrInterface()); + const thisType = boxType.getThisType(); + assert.ok(thisType); + assert.equal(thisType.isThisType, true); + assert.equal(project.checker.typeToString(thisType), "this"); + + const stringInfo = project.checker.getIndexInfoOfType(boxType, IndexKind.String); + assert.ok(stringInfo); + assert.ok(stringInfo.keyType.flags & TypeFlags.String); + const numberInfo = project.checker.getIndexInfoOfType(boxType, IndexKind.Number); + assert.ok(numberInfo); + assert.ok(numberInfo.keyType.flags & TypeFlags.Number); + assert.strictEqual(project.checker.getIndexTypeOfType(boxType, IndexKind.String), stringInfo.valueType); + assert.strictEqual(project.checker.getIndexTypeOfType(boxType, IndexKind.Number), numberInfo.valueType); + const valueType = project.checker.getTypeOfPropertyOfType(boxType, "value"); + assert.ok(valueType); + assert.equal(project.checker.typeToString(valueType), "T"); + assert.equal(project.checker.getTypeOfPropertyOfType(boxType, "missing"), undefined); + + const legacySymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("legacy")); + assert.ok(legacySymbol); + const legacyType = project.checker.getTypeOfSymbol(legacySymbol); + const signature = (project.checker.getSignaturesOfType(legacyType, SignatureKind.Call))[0]; + assert.ok(signature); + const awaitedType = project.checker.getAwaitedType(signature.getReturnType()); + assert.ok(awaitedType); + assert.equal(project.checker.typeToString(awaitedType), "Awaited"); + + const exportedSymbol = project.checker.getSymbolAtPosition("/src/main.ts", sourceFile.text.indexOf("Exported =")); + assert.ok(exportedSymbol); + const localSymbol = (project.checker.getSymbolsInScope(sourceFile, SymbolFlags.TypeAlias)).find(symbol => symbol.name === "Exported"); + assert.ok(localSymbol); + assert.notEqual(localSymbol.id, exportedSymbol.id); + assert.strictEqual(project.checker.getExportSymbolOfSymbol(localSymbol), exportedSymbol); + + let call: import("@typescript/typescript/unstable/ast").CallExpression | undefined; + sourceFile.forEachChild(function visit(node) { + if (isCallExpression(node) && sourceFile.text.slice(node.expression.pos, node.expression.end).trim() === "consume") { + call = node; + } + node.forEachChild(visit); + }); + assert.ok(call); + const contextualType = project.checker.getContextualTypeForArgumentAtIndex(call, 0); + assert.ok(contextualType); + assert.equal(project.checker.typeToString(contextualType), "string | number"); + }); + + test("uses Strada-compatible JsxEmit values", () => { + assert.equal(JsxEmit.React, 2); + assert.equal(JsxEmit.ReactNative, 3); + }); +}); + +describe("Checker - getConstraintOfTypeParameter", { concurrency }, () => { + test("returns constraint of a type parameter", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function identity(x: T): T { return x; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function identity(x: T): T { return x; }`; + const pos = src.indexOf("identity<"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + assert.ok(sigs[0].typeParameters && sigs[0].typeParameters.length > 0, "Should have type parameters"); + const typeParams = sigs[0].getTypeParameters(); + const constraint = project.checker.getConstraintOfTypeParameter(typeParams[0]); + assert.ok(constraint); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + }); +}); + +describe("Checker - TypeParameter getters", { concurrency }, () => { + test("getConstraint() and getDefault() return the constraint and default types", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function f(x: T): T { return x; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function f(x: T): T { return x; }`; + const pos = src.indexOf("f<"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = sigs[0].getTypeParameters(); + assert.ok(typeParams.length > 0, "Should have type parameters"); + const typeParam = typeParams[0] as TypeParameter; + + const constraint = typeParam.getConstraint(); + assert.ok(constraint); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + + const defaultType = typeParam.getDefault(); + assert.ok(defaultType); + assert.ok(defaultType.flags & TypeFlags.StringLiteral, `Expected string literal default, got flags ${defaultType.flags}`); + }); + + test("getConstraint() and getDefault() return undefined when there is none", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function f(x: T): T { return x; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function f(x: T): T { return x; }`; + const pos = src.indexOf("f<"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = sigs[0].getTypeParameters(); + assert.ok(typeParams.length > 0, "Should have type parameters"); + const typeParam = typeParams[0] as TypeParameter; + + assert.equal(typeParam.getConstraint(), undefined); + assert.equal(typeParam.getDefault(), undefined); + }); +}); + +describe("Checker - getTypeArguments", { concurrency }, () => { + test("returns type arguments of a generic instantiation", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const arr: Array = [1, 2, 3];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export const arr: Array = [1, 2, 3];`; + const pos = src.indexOf("arr:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeArgs = project.checker.getTypeArguments(type as TypeReference); + assert.ok(typeArgs.length > 0, "Should have type arguments"); + assert.ok(typeArgs[0].flags & TypeFlags.Number, `Expected number type argument, got flags ${typeArgs[0].flags}`); + }); + + test("a wrongly-typed call throws on the client without taking down the server", () => { + const src = `export const s: string = ""; export const arr: Array = [1];`; + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // `string` is not a type reference. When getTypeArguments is reached + // with one, the server panics, but the per-request panic recovery + // converts that into an error response rather than crashing the process. + const sSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("s:")); + assert.ok(sSymbol); + const sType = project.checker.getTypeOfSymbol(sSymbol); + assert.ok(sType); + assert.throws(() => project.checker.getTypeArguments(sType as unknown as TypeReference)); + + // The server survived: a subsequent valid request still succeeds. + const arrSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("arr:")); + assert.ok(arrSymbol); + const arrType = project.checker.getTypeOfSymbol(arrSymbol); + assert.ok(arrType); + const typeArgs = project.checker.getTypeArguments(arrType as TypeReference); + assert.ok(typeArgs.length > 0, "Server should still serve valid requests"); + }); +}); + +describe("Checker - getBaseConstraintOfType", { concurrency }, () => { + test("returns the base constraint of a type parameter", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function identity(x: T): T { return x; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `export function identity(x: T): T { return x; }`; + const pos = src.indexOf("identity<"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const sigs = project.checker.getSignaturesOfType(type, SignatureKind.Call); + assert.ok(sigs.length > 0); + const typeParams = sigs[0].getTypeParameters(); + const constraint = project.checker.getBaseConstraintOfType(typeParams[0]); + assert.ok(constraint, "Should resolve a base constraint"); + assert.ok(constraint.flags & TypeFlags.String, `Expected string constraint, got flags ${constraint.flags}`); + }); + + test("returns undefined for a non-instantiable type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const x: number = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `export const x: number = 1;`.indexOf("x:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const constraint = project.checker.getBaseConstraintOfType(type); + assert.equal(constraint, undefined); + }); +}); + +describe("Checker - getPropertyOfType", { concurrency }, () => { + test("returns a named property symbol of a type", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export interface Person { + name: string; + age: number; +} +export declare const p: Person; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = `\nexport interface Person {\n name: string;\n age: number;\n}\nexport declare const p: Person;\n`; + const pos = src.indexOf("p: Person"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const nameProp = project.checker.getPropertyOfType(type, "name"); + assert.ok(nameProp, "Should find 'name' property"); + assert.equal(nameProp.name, "name"); + const missing = project.checker.getPropertyOfType(type, "doesNotExist"); + assert.equal(missing, undefined); + }); +}); + +describe("Checker - getConstantValue", { concurrency }, () => { + test("returns numeric value of an enum member", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum E { A = 1, B = 2 }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let memberB: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) { + const text = sourceFile.text.slice(node.pos, node.end).trim(); + if (text.startsWith("B")) memberB = node; + } + node.forEachChild(visit); + }); + assert.ok(memberB, "Should find enum member B"); + const value = project.checker.getConstantValue(memberB); + assert.equal(value, 2); + }); + + test("returns infinite numeric enum values without changing equivalent strings", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum E { + Positive = 1e999, + Negative = -1e999, + PositiveNaN = NaN, + NegativeNaN = -NaN, + PositiveString = "+Infinity", + NegativeString = "-Infinity", + NaNString = "NaN", + }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const members: Node[] = []; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) members.push(node); + node.forEachChild(visit); + }); + assert.equal(members.length, 7); + + assert.equal(project.checker.getConstantValue(members[0]), Infinity); + assert.equal(project.checker.getConstantValue(members[1]), -Infinity); + assert.equal(project.checker.getConstantValue(members[2]), NaN); + assert.equal(project.checker.getConstantValue(members[3]), NaN); + assert.equal(project.checker.getConstantValue(members[4]), "+Infinity"); + assert.equal(project.checker.getConstantValue(members[5]), "-Infinity"); + assert.equal(project.checker.getConstantValue(members[6]), "NaN"); + }); + + test("returns string value of a string-initialized enum member", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export enum Color { Red = "red" }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let member: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.EnumMember) member = node; + node.forEachChild(visit); + }); + assert.ok(member); + const value = project.checker.getConstantValue(member); + assert.equal(value, "red"); + }); +}); + +describe("Checker - getSignatureFromDeclaration", { concurrency }, () => { + test("returns the signature of a function declaration", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function add(a: number, b: number): number { return a + b; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let funcDecl: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) funcDecl = node; + node.forEachChild(visit); + }); + assert.ok(funcDecl, "Should find the function declaration"); + const sig = project.checker.getSignatureFromDeclaration(funcDecl); + assert.ok(sig, "Should resolve a signature"); + assert.equal(sig.parameters.length, 2); + const returnType = project.checker.getReturnTypeOfSignature(sig); + assert.ok(returnType); + assert.ok(returnType.flags & TypeFlags.Number); + }); +}); + +describe("Checker - getExportSpecifierLocalTargetSymbol", { concurrency }, () => { + test("resolves the local target of an export specifier", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const value = 42; +export { value as renamed }; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + let exportSpecifier: Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ExportSpecifier) exportSpecifier = node; + node.forEachChild(visit); + }); + assert.ok(exportSpecifier, "Should find the export specifier"); + const target = project.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); + assert.ok(target, "Should resolve a local target symbol"); + assert.equal(target.name, "value"); + }); +}); + +describe("Checker - getAliasedSymbol", { concurrency }, () => { + test("resolves an import alias to its target symbol", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/foo.ts": `export const foo = 42;`, + "/src/main.ts": `import { foo } from "./foo";\nexport const usage = foo;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = `import { foo } from "./foo";`.indexOf("foo }"); + const aliasSymbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(aliasSymbol); + assert.ok(aliasSymbol.flags & SymbolFlags.Alias, "Import binding should be an alias"); + const aliased = project.checker.getAliasedSymbol(aliasSymbol); + assert.ok(aliased, "Should resolve the aliased symbol"); + assert.equal(aliased.name, "foo"); + assert.ok(!(aliased.flags & SymbolFlags.Alias), "Target should not be an alias"); + }); +}); + +describe("Checker - getFullyQualifiedName", { concurrency }, () => { + test("returns module-qualified names for exported symbols and dotted names for members", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": ` +export namespace Outer { + export class Inner {} +} +export class Standalone {} +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol); + const exports = project.checker.getExportsOfModule(moduleSymbol); + const standalone = exports.find(e => e.name === "Standalone"); + assert.ok(standalone); + assert.equal(project.checker.getFullyQualifiedName(standalone), `"/src/index".Standalone`); + const outer = exports.find(e => e.name === "Outer"); + assert.ok(outer); + const inner = (outer.getExports()).get("Inner" as __String); + assert.ok(inner); + assert.equal(project.checker.getFullyQualifiedName(inner), `"/src/index".Outer.Inner`); + }); +}); + +describe("Checker - getExportsOfModule", { concurrency }, () => { + test("returns all exports including re-exports via 'export *'", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/inner.ts": `export const innerValue = 1;`, + "/src/index.ts": ` +export const direct = 1; +export * from "./inner"; +`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + const moduleSymbol = project.checker.getSymbolAtLocation(sourceFile); + assert.ok(moduleSymbol, "Source file should have a module symbol"); + const exports = project.checker.getExportsOfModule(moduleSymbol); + const names = exports.map(e => e.name); + assert.ok(names.includes("direct"), "should include directly-declared export"); + assert.ok(names.includes("innerValue"), "should include 'export *' re-export"); + }); +}); + +describe("Checker - getSymbolsInScope", { concurrency }, () => { + const scopeFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +const outerValue = 1; +interface OuterType { x: number; } +function f() { + const innerValue = 2; + return innerValue; +} +`, + }; + + test("returns symbols visible at a position", () => { + using api = spawnAPI(scopeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); + const symbols = project.checker.getSymbolsInScope( + { document: "/src/main.ts", position: pos }, + SymbolFlags.Value, + ); + const names = symbols.map(s => s.name); + assert.ok(names.includes("innerValue"), "should include local variable"); + assert.ok(names.includes("outerValue"), "should include outer variable"); + assert.ok(names.includes("f"), "should include enclosing function"); + assert.ok(!names.includes("OuterType"), "should not include type-only meanings"); + }); + + test("returns type symbols when asked for type meaning at a node", () => { + using api = spawnAPI(scopeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + const symbols = project.checker.getSymbolsInScope(sourceFile, SymbolFlags.Type); + const names = symbols.map(s => s.name); + assert.ok(names.includes("OuterType"), "should include interface declared in file"); + assert.ok(names.includes("Array"), "should include global type symbols"); + }); + + // Regression test: `<<` binds tighter than `-` in Go but looser in JS, so SymbolFlagsAll's + // `(1<<30) - 1` needs those parens or the generated enum silently becomes `1 << 29`. + test("SymbolFlags.All includes both value and type meanings", () => { + using api = spawnAPI(scopeFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = scopeFiles["/src/main.ts"].indexOf("return innerValue"); + const symbols = project.checker.getSymbolsInScope( + { document: "/src/main.ts", position: pos }, + SymbolFlags.All, + ); + const names = symbols.map(s => s.name); + assert.ok(names.includes("innerValue"), "should include local value symbol"); + assert.ok(names.includes("OuterType"), "should include type symbol declared in file"); + }); +}); + +describe("Symbol - getDocumentationComment and getJsDocTags", { concurrency }, () => { + const docFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +/** + * Adds two numbers together. + * @param a the first number + * @returns the sum + */ +export function add(a: number, b: number): number { return a + b; } +`, + }; + + test("getDocumentationComment returns the leading comment text", () => { + using api = spawnAPI(docFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = docFiles["/src/main.ts"].indexOf("add(a"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const doc = symbol.getDocumentationComment(project.checker); + assert.ok(doc.includes("Adds two numbers together"), `Expected documentation, got: ${doc}`); + assert.ok(!doc.includes("@param"), "Documentation comment should not include tags"); + }); + + test("getJsDocTags returns structured tag name/text pairs", () => { + using api = spawnAPI(docFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = docFiles["/src/main.ts"].indexOf("add(a"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const tags = symbol.getJsDocTags(project.checker); + const param = tags.find(t => t.name === "param"); + assert.ok(param, `Expected a @param tag, got: ${JSON.stringify(tags)}`); + assert.equal(param.text, "a the first number"); + const returns = tags.find(t => t.name === "returns"); + assert.ok(returns, `Expected a @returns tag, got: ${JSON.stringify(tags)}`); + assert.equal(returns.text, "the sum"); + }); +}); + +describe("TypeParameter - isThisType", { concurrency }, () => { + test("isThisType is true for the polymorphic 'this' type in a class method", () => { + const src = `\nexport class Builder {\n setName(name: string): this { return this; }\n}\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // ": this {" — offset 2 past ': ' lands on 't' in the return-type 'this' + const pos = src.indexOf(": this {") + 2; + const type = project.checker.getTypeAtPosition("/src/main.ts", pos); + assert.ok(type, "Expected a type at the 'this' position"); + assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); + const typeParam = type as TypeParameter; + assert.equal(typeParam.isThisType, true); + }); + + test("isThisType is absent for a regular generic type parameter", () => { + const src = `\nexport function identity(x: T): T { return x; }\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + // Point to 'T' in the type parameter declaration '' — getTypeAtPosition + // on a type annotation reference doesn't resolve to TypeParameter, but + // the declaration position does. + const pos = src.indexOf("") + 1; + const type = project.checker.getTypeAtPosition("/src/main.ts", pos); + assert.ok(type, "Expected a type at the 'T' position"); + assert.ok(type.flags & TypeFlags.TypeParameter, "Expected TypeParameter"); + const typeParam = type as TypeParameter; + assert.ok(!typeParam.isThisType, "Expected isThisType to be absent/false for a regular type parameter"); + }); +}); + +describe("Type - getAliasTypeArguments", { concurrency }, () => { + test("returns the type arguments of a single-param generic type alias", () => { + const src = `\ntype Box = { value: T };\nexport const x: Box = { value: "hi" };\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("x:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 1, "Expected 1 alias type argument"); + assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected string, got flags ${aliasArgs[0].flags}`); + }); + + test("returns multiple type arguments for a multi-param generic type alias", () => { + const src = `\ntype Pair = [A, B];\nexport const p: Pair = ["hello", 42];\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("p:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 2, "Expected 2 alias type arguments"); + assert.ok(aliasArgs[0].flags & TypeFlags.String, `Expected first arg to be string, got flags ${aliasArgs[0].flags}`); + assert.ok(aliasArgs[1].flags & TypeFlags.Number, `Expected second arg to be number, got flags ${aliasArgs[1].flags}`); + }); + + test("returns empty array for a non-alias generic type", () => { + const src = `\nexport const arr: Array = ["hello"];\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("arr:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasArgs = type.getAliasTypeArguments(); + assert.equal(aliasArgs.length, 0, "Expected no alias type arguments for a direct generic reference"); + }); +}); + +describe("Type - getAliasSymbol", { concurrency }, () => { + test("returns the symbol for a non-generic type alias", () => { + // Object-type aliases preserve aliasSymbol; primitive aliases (type Foo = string) do not. + const src = `\ntype Point = { x: number; y: number };\nexport const p: Point = { x: 1, y: 2 };\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("p:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = type.getAliasSymbol(); + assert.ok(aliasSymbol, "Expected alias symbol to exist"); + assert.equal(aliasSymbol.name, "Point"); + }); + + test("returns the symbol for a generic type alias", () => { + const src = `\ntype Container = { item: T };\nexport const c: Container = { item: 42 };\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("c:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = type.getAliasSymbol(); + assert.ok(aliasSymbol, "Expected alias symbol for generic alias"); + assert.equal(aliasSymbol.name, "Container"); + }); + + test("returns undefined for a non-alias type", () => { + const src = `\nexport const str: string = "test";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("str:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + const aliasSymbol = type.getAliasSymbol(); + assert.equal(aliasSymbol, undefined, "Expected no alias symbol for primitive type"); + }); +}); + +describe("IntrinsicType - intrinsicName", { concurrency }, () => { + test("intrinsicName matches the primitive type name", () => { + const src = `\nexport const x: string = "hello";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = project.checker.getStringType(); + assert.equal((stringType as IntrinsicType).intrinsicName, "string"); + const anyType = project.checker.getAnyType(); + assert.equal((anyType as IntrinsicType).intrinsicName, "any"); + const neverType = project.checker.getNeverType(); + assert.equal((neverType as IntrinsicType).intrinsicName, "never"); + const pos = src.indexOf("x:"); + const sym = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(sym); + const litType = project.checker.getTypeOfSymbol(sym); + assert.ok(litType); + assert.ok(litType.flags & TypeFlags.Intrinsic); + assert.equal((litType as IntrinsicType).intrinsicName, "string"); + }); +}); + +describe("FreshableType - getFreshType and getRegularType", { concurrency }, () => { + test("LiteralType.value is empty string for the empty-string literal type", () => { + const src = `\nexport const empty: "" = "";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("empty:")); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); + const literal = type as LiteralType; + assert.equal(literal.value, "", "value should be empty string, not undefined"); + }); + + test("LiteralType.value is accessible via the FreshableType hierarchy", () => { + const src = `\nexport const greeting: "hello" = "hello";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.StringLiteral, "Expected StringLiteral"); + const literal = type as LiteralType; + assert.equal(literal.value, "hello"); + }); + + test("BigIntLiteralType.value is a bigint (positive and negative)", () => { + const src = `\nexport const pos = 123n;\nexport const neg = -123n;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const posSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); + assert.ok(posSymbol); + const posType = project.checker.getTypeOfSymbol(posSymbol); + assert.ok(posType); + assert.ok(posType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); + const posLiteral = posType as BigIntLiteralType; + assert.equal(typeof posLiteral.value, "bigint"); + assert.equal(posLiteral.value, 123n); + + const negSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); + assert.ok(negSymbol); + const negType = project.checker.getTypeOfSymbol(negSymbol); + assert.ok(negType); + assert.ok(negType.flags & TypeFlags.BigIntLiteral, "Expected BigIntLiteral"); + const negLiteral = negType as BigIntLiteralType; + assert.equal(typeof negLiteral.value, "bigint"); + assert.equal(negLiteral.value, -123n); + }); + + test("NumberLiteralType.value is infinity (positive and negative)", () => { + const src = `\nexport const pos = 1e999;\nexport const neg = -1e999;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const posSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("pos =")); + assert.ok(posSymbol); + const posType = project.checker.getTypeOfSymbol(posSymbol); + assert.ok(posType); + assert.ok(posType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); + const posLiteral = posType as NumberLiteralType; + assert.equal(typeof posLiteral.value, "number"); + assert.equal(posLiteral.value, Infinity); + + const negSymbol = project.checker.getSymbolAtPosition("/src/main.ts", src.indexOf("neg =")); + assert.ok(negSymbol); + const negType = project.checker.getTypeOfSymbol(negSymbol); + assert.ok(negType); + assert.ok(negType.flags & TypeFlags.NumberLiteral, "Expected NumberLiteral"); + const negLiteral = negType as NumberLiteralType; + assert.equal(typeof negLiteral.value, "number"); + assert.equal(negLiteral.value, -Infinity); + }); + + test("getFreshType() returns a fresh twin with matching value", () => { + const src = `\nexport const greeting: "hello" = "hello";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); + const fresh = (type as FreshableType).getFreshType(); + assert.ok(fresh, "Expected getFreshType() to return non-undefined for a literal type"); + assert.ok(fresh.flags & TypeFlags.StringLiteral, "Fresh type should be a StringLiteral"); + assert.equal((fresh as LiteralType).value, "hello", "Fresh type should carry the same value"); + assert.notEqual(fresh.id, type.id, "Fresh type should not be the original type"); + const freshFresh = fresh.getFreshType(); + assert.ok(freshFresh, "Expected getFreshType() to return non-undefined for a fresh type"); + assert.equal(freshFresh.id, fresh.id, "Fresh type of a fresh type should be the fresh type"); + }); + + test("getRegularType() on a fresh literal returns the regular twin", () => { + // The initial type response from getTypeOfSymbol does not always include the + // regularType handle, so getRegularType() is tested via the fresh twin which + // always includes its regularType in its own response. + const src = `\nexport const greeting: "hello" = "hello";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("greeting:"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Freshable, "Type should be a freshable type"); + const fresh = (type as FreshableType).getFreshType(); + assert.ok(fresh, "Need fresh type for this test"); + assert.ok(fresh.flags & TypeFlags.Freshable, "Fresh type should be a freshable type"); + const regular = fresh.getRegularType(); + assert.ok(regular, "Expected getRegularType() on the fresh twin to return non-undefined"); + assert.ok(regular.flags & TypeFlags.StringLiteral, "Regular type should be a StringLiteral"); + assert.equal((regular as LiteralType).value, "hello", "Regular type should carry the same value"); + assert.equal(regular.id, type.id, "Regular type should be the original type"); + }); + + test("getFreshType() and getRegularType() work for computed enum types (TypeFlags.Enum)", () => { + // getTypeOfSymbol on an ambient enum member returns the FRESH computed enum type. + // For fresh types: getFreshType() returns self, getRegularType() returns the regular twin. + const src = `\ndeclare enum Status { Pending }\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("Pending"); + const symbol = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(symbol); + const type = project.checker.getTypeOfSymbol(symbol); + assert.ok(type); + assert.ok(type.flags & TypeFlags.Enum, `Expected TypeFlags.Enum, got ${type.flags}`); + assert.ok(type.flags & TypeFlags.Freshable, "Enum type should be freshable"); + // The returned type IS the fresh type: getFreshType() returns itself + const fresh = (type as FreshableType).getFreshType(); + assert.ok(fresh, "Expected getFreshType() to return non-undefined"); + assert.equal(fresh.id, type.id, "getFreshType() on a fresh enum type returns itself"); + // getRegularType() returns the regular twin (a different type) + const regular = (type as FreshableType).getRegularType(); + assert.ok(regular, "Expected getRegularType() to return non-undefined"); + assert.ok(regular.flags & TypeFlags.Enum, "Regular enum type should also have TypeFlags.Enum"); + assert.notEqual(regular.id, type.id, "Regular type should be distinct from the fresh type"); + // Round-trip: regular → getFreshType() → back to the original fresh type + const backToFresh = (regular as FreshableType).getFreshType(); + assert.ok(backToFresh); + assert.equal(backToFresh.id, type.id, "Round-trip through regular/fresh returns the original type"); + }); +}); + +describe("Checker - isContextSensitive", { concurrency }, () => { + test("arrow function with no type annotation is context sensitive", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export const fn = (x) => x;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + // Find the arrow function node + let arrowFn: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.ArrowFunction) { + arrowFn = node; + } + node.forEachChild(visit); + }); + assert.ok(arrowFn, "Should find an arrow function"); + const result = project.checker.isContextSensitive(arrowFn); + assert.equal(result, true); + }); +}); + +describe("Checker - isTypeAssignableTo", { concurrency }, () => { + test("returns true when source is assignable to target", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = project.checker.getStringType(); + const anyType = project.checker.getAnyType(); + const neverType = project.checker.getNeverType(); + assert.ok(project.checker.isTypeAssignableTo(stringType, stringType), "string assignable to string"); + assert.ok(project.checker.isTypeAssignableTo(stringType, anyType), "string assignable to any"); + assert.ok(project.checker.isTypeAssignableTo(neverType, stringType), "never assignable to string (bottom type)"); + }); + + test("returns false when source is not assignable to target", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": `export {};`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const stringType = project.checker.getStringType(); + const numberType = project.checker.getNumberType(); + assert.ok(!project.checker.isTypeAssignableTo(numberType, stringType), "number not assignable to string"); + assert.ok(!project.checker.isTypeAssignableTo(stringType, numberType), "string not assignable to number"); + }); + + test("a string literal type is assignable to string but not number", () => { + const src = `\nexport const x: "hello" = "hello";\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/main.ts": src, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const pos = src.indexOf("x:"); + const sym = project.checker.getSymbolAtPosition("/src/main.ts", pos); + assert.ok(sym); + const litType = project.checker.getTypeOfSymbol(sym); + assert.ok(litType); + assert.ok(litType.flags & TypeFlags.StringLiteral); + const stringType = project.checker.getStringType(); + const numberType = project.checker.getNumberType(); + assert.ok(project.checker.isTypeAssignableTo(litType, stringType)); + assert.ok(!project.checker.isTypeAssignableTo(litType, numberType)); + }); +}); + +describe("Printer", { concurrency }, () => { + const emitterFiles = { + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": ` +export const x = 42; +export function greet(name: string): string { return name; } +export type Pair = [string, number]; +export const obj = { m: 1, s: "hi", b: true }; +`, + }; + + test("printNode with factory-created keyword type", () => { + using api = spawnAPI(emitterFiles); + + const node = createKeywordTypeNode(SyntaxKind.StringKeyword); + const text = api.printer.printNode(node); + assert.strictEqual(text, "string"); + }); + + test("printFile", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sourceFile = snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/main.ts"); + assert(sourceFile); + const text = api.printer.printFile(sourceFile); + assert.strictEqual( + text, + `export const x = 42; +export function greet(name: string): string { return name; } +export type Pair = [ + string, + number +]; +export const obj = { m: 1, s: "hi", b: true }; +`, + ); + }); + + test("printFile preserves JSON source file semantics", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { resolveJsonModule: true }, + files: ["/src/data.json"], + }), + "/src/data.json": `{"x": 1}`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const sourceFile = snapshot.getConfiguredProject("/tsconfig.json")!.program.getSourceFile("/src/data.json"); + assert(sourceFile); + assert.strictEqual(api.printer.printFile(sourceFile), `{ "x": 1 }\n`); + }); + + test("printNode with factory-created union type", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createUnionTypeNode([ + createKeywordTypeNode(SyntaxKind.StringKeyword), + createKeywordTypeNode(SyntaxKind.NumberKeyword), + ]); + const text = api.printer.printNode(node); + assert.strictEqual(text, "string | number"); + }); + + test("printNode with factory-created function type", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const param = createParameterDeclaration( + undefined, + undefined, + createIdentifier("x"), + undefined, + createKeywordTypeNode(SyntaxKind.StringKeyword), + undefined, + ); + const node = createFunctionTypeNode( + undefined, + [param], + createKeywordTypeNode(SyntaxKind.NumberKeyword), + ); + const text = api.printer.printNode(node); + assert.strictEqual(text, "(x: string) => number"); + }); + + test("printNode with factory-created type reference", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createTypeReferenceNode(createIdentifier("Array"), [ + createKeywordTypeNode(SyntaxKind.StringKeyword), + ]); + const text = api.printer.printNode(node); + assert.strictEqual(text, "Array"); + }); + + test("printNode with factory-created array type", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createArrayTypeNode(createKeywordTypeNode(SyntaxKind.NumberKeyword)); + const text = api.printer.printNode(node); + assert.strictEqual(text, "number[]"); + }); + + test("typeToTypeNode + printNode round-trip", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + + const greetPos = src.indexOf("greet("); + const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeNode = checker.typeToTypeNode(type); + assert.ok(typeNode); + const text = api.printer.printNode(typeNode); + assert.ok(text); + assert.strictEqual(text, "(name: string) => string"); + }); + + test("visitEachChild on typeToTypeNode result with keyword types", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + const objPos = src.indexOf("obj"); + const symbol = checker.getSymbolAtPosition("/src/main.ts", objPos); + assert.ok(symbol, "should find symbol for obj"); + const type = checker.getTypeOfSymbol(symbol); + assert.ok(type); + const typeNode = checker.typeToTypeNode(type); + assert.ok(typeNode, "typeToTypeNode should return a type node"); + + // Recursively visit to reach PropertySignature.type where isTypeNode is checked. + const visited = (function visit(node: Node): Node { + return visitEachChild(node, visit); + })(typeNode); + assert.ok(visited, "visitEachChild should not throw"); + + const kinds = [ + SyntaxKind.NumberKeyword, + SyntaxKind.StringKeyword, + SyntaxKind.BooleanKeyword, + SyntaxKind.AnyKeyword, + SyntaxKind.VoidKeyword, + SyntaxKind.UndefinedKeyword, + SyntaxKind.NeverKeyword, + SyntaxKind.UnknownKeyword, + SyntaxKind.BigIntKeyword, + SyntaxKind.ObjectKeyword, + SyntaxKind.SymbolKeyword, + SyntaxKind.IntrinsicKeyword, + SyntaxKind.ExpressionWithTypeArguments, + SyntaxKind.JSDocAllType, + SyntaxKind.JSDocNullableType, + SyntaxKind.JSDocNonNullableType, + SyntaxKind.JSDocOptionalType, + SyntaxKind.JSDocVariadicType, + SyntaxKind.JSDocTypeExpression, + SyntaxKind.JSDocTypeLiteral, + SyntaxKind.JSDocSignature, + ]; + for (const kind of kinds) { + assert.ok(isTypeNode({ kind } as any), `isTypeNode should accept ${SyntaxKind[kind]}`); + } + }); + + test("typeToString", () => { + using api = spawnAPI(emitterFiles); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const src = emitterFiles["/src/main.ts"]; + + const greetPos = src.indexOf("greet("); + const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = checker.getTypeOfSymbol(symbol); + assert.ok(type); + const text = checker.typeToString(type); + assert.strictEqual(text, "(name: string) => string"); + }); + + test("typeToString with TypeFormatFlags", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `export function greet(name: string): string[] { return [name]; }`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const { checker } = snapshot.getConfiguredProject("/tsconfig.json")!; + const greetPos = "export function greet".indexOf("greet"); + const symbol = checker.getSymbolAtPosition("/src/main.ts", greetPos); + assert.ok(symbol); + const type = checker.getTypeOfSymbol(symbol); + assert.ok(type); + const text = checker.typeToString(type, undefined, TypeFormatFlags.WriteArrayAsGenericType); + assert.strictEqual(text, "(name: string) => Array"); + }); + + test("printNode with terminateUnterminatedLiterals option", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/main.ts": `const foo = /asdfasf;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/main.ts"); + assert.ok(sourceFile); + + // Find the regex literal node + let regexNode: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (node.kind === SyntaxKind.RegularExpressionLiteral) { + regexNode = node; + return; + } + node.forEachChild(visit); + }); + assert.ok(regexNode, "Should find a regex literal"); + + // Without the option, regex is printed as-is + const textWithout = api.printer.printNode(regexNode); + assert.strictEqual(textWithout, "/asdfasf"); + + // With the option, the closing slash is added + const textWith = api.printer.printNode(regexNode, { terminateUnterminatedLiterals: true }); + assert.strictEqual(textWith, "/asdfasf/"); + }); +}); + +describe("Program - selected file emit", { concurrency }, () => { + const files = { + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + declarationMap: true, + emitDeclarationOnly: true, + noEmit: true, + noEmitOnError: true, + sourceMap: true, + }, + }), + "/src/a.ts": `export const a: string = 1;`, + "/src/b.ts": `export const b = 2;`, + }; + + test("getJavaScriptEmit forces JavaScript and source maps", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.getJavaScriptEmit(["/src/a.ts", "/src/b.ts"]); + assert.equal(result.emitSkipped, false); + assert.deepEqual([...result.outputFiles.keys()], [ + "/src/a.js", + "/src/a.js.map", + "/src/b.js", + "/src/b.js.map", + ]); + const outputFileName = toRootedFilePath("/src/a.js", undefined); + assert.equal(result.outputFiles.get(outputFileName)?.sourceFileName, "/src/a.ts"); + assert.match(result.outputFiles.get(outputFileName)!.text, /export const a = 1/); + assert.equal(fs.readFile(toRootedFilePath("/src/a.js", undefined)), serverFS.useOS); + }); + + test("getDeclarationEmit forces declarations and declaration maps", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.getDeclarationEmit(["/src/a.ts", "/src/b.ts"]); + assert.equal(result.emitSkipped, false); + assert.deepEqual([...result.outputFiles.keys()], [ + "/src/a.d.ts", + "/src/a.d.ts.map", + "/src/b.d.ts", + "/src/b.d.ts.map", + ]); + assert.equal(result.outputFiles.get(toRootedFilePath("/src/a.d.ts", undefined))?.sourceFileName, "/src/a.ts"); + assert.equal(fs.readFile(toRootedFilePath("/src/a.d.ts", undefined)), serverFS.useOS); + }); + + test("selected file emit accepts empty arrays", () => { + using api = spawnAPI({ ...files }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual((project.program.getJavaScriptEmit([])).outputFiles, new Map()); + assert.deepEqual((project.program.getDeclarationEmit([])).outputFiles, new Map()); + }); +}); + +describe("SnapshotInternalAPI - formatNodeForInsertion", { concurrency }, () => { + test("formats a synthesized statement with correct indentation for insertion inside a function body", () => { + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `function greet(name: string) {\n console.log(name);\n}\n`, + }; + using api = spawnAPI(files); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], + NodeFlags.Const, + ), + ); + + const sourceText = files["/src/index.ts"]; + const insertionPos = sourceText.indexOf("\n console.log") + 1; + + const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); + assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation, got: ${JSON.stringify(formatted)}`); + }); + + test("formats a node at top-level with no indentation", () => { + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `const a = 1;\nconst b = 2;\n`, + }; + using api = spawnAPI(files); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("y"), undefined, undefined, createNumericLiteral("42", 0))], + NodeFlags.Const, + ), + ); + + const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", 0); + assert.ok(formatted.includes("const y = 42;"), `Expected 'const y = 42;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(!formatted.startsWith(" "), `Expected no leading spaces at top level, got: ${JSON.stringify(formatted)}`); + }); + + test("formats a synthesized statement with correct indentation when non-ASCII characters precede the insertion position", () => { + // 'é' is 1 UTF-16 code unit but 2 UTF-8 bytes, so UTF-16 and UTF-8 offsets diverge after it. + // This test verifies the position is correctly converted from UTF-16 to UTF-8 before use. + const files = { + "/tsconfig.json": "{}", + "/src/index.ts": `// \u00e9\nfunction greet(name: string) {\n console.log(name);\n}\n`, + }; + using api = spawnAPI(files); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + + const node = createVariableStatement( + undefined, + createVariableDeclarationList( + [createVariableDeclaration(createIdentifier("x"), undefined, undefined, createNumericLiteral("1", 0))], + NodeFlags.Const, + ), + ); + + // insertionPos is the UTF-16 code-unit offset of the start of the indented line inside the function body. + const sourceText = files["/src/index.ts"]; + const insertionPos = sourceText.indexOf("\n console.log") + 1; + + const formatted = snapshot.internal.formatNodeForInsertion(node, "/src/index.ts", insertionPos); + // The node should be indented to match the function body (4 spaces) + assert.ok(formatted.includes("const x = 1;"), `Expected 'const x = 1;' in formatted output, got: ${JSON.stringify(formatted)}`); + assert.ok(formatted.startsWith(" "), `Expected 4 spaces of indentation (UTF-16 offset correctly converted), got: ${JSON.stringify(formatted)}`); + }); +}); + +describe("modifierFlags", { concurrency }, () => { + test("export async function has Export | Async flags", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `export async function foo() {}`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) { + fnNode = node; + } + node.forEachChild(visit); + }); + assert.ok(fnNode, "Should find a function declaration"); + assert.ok(fnNode.modifierFlags & ModifierFlags.Export, "Should have Export flag"); + assert.ok(fnNode.modifierFlags & ModifierFlags.Async, "Should have Async flag"); + assert.strictEqual(fnNode.modifierFlags, ModifierFlags.Export | ModifierFlags.Async); + }); + + test("node without modifiers has ModifierFlags.None", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function bar() {}`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let fnNode: import("@typescript/typescript/unstable/ast").FunctionDeclaration | undefined; + sourceFile.forEachChild(function visit(node) { + if (isFunctionDeclaration(node)) { + fnNode = node; + } + node.forEachChild(visit); + }); + assert.ok(fnNode, "Should find a function declaration"); + assert.strictEqual(fnNode.modifierFlags, ModifierFlags.None); + }); +}); + +describe("Checker - getResolvedSymbol", { concurrency }, () => { + test("resolves variable reference to its declaration symbol", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const x = 1;\nconst y = x;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // Find the 'x' identifier in `const y = x` + let refNode: import("@typescript/typescript/unstable/ast").Identifier | undefined; + sourceFile.forEachChild(function visit(node) { + if (isIdentifier(node) && node.text === "x") { + // We want the reference, not the declaration - take the last one + refNode = node; + } + node.forEachChild(visit); + }); + assert.ok(refNode, "Should find identifier 'x'"); + + const symbol = project.checker.getResolvedSymbol(refNode); + assert.ok(symbol, "Should resolve symbol for 'x'"); + assert.equal(symbol.name, "x"); + }); +}); + +describe("VariableDeclarationList - BlockScoped flags", { concurrency }, () => { + test("let declaration has Let flag", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `let x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let declList: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isVariableDeclarationList(node)) { + declList = node; + } + node.forEachChild(visit); + }); + assert.ok(declList, "Should find VariableDeclarationList"); + assert.ok(declList.flags & NodeFlags.Let, "Should have Let flag"); + }); + + test("const declaration has Const flag", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + let declList: import("@typescript/typescript/unstable/ast").Node | undefined; + sourceFile.forEachChild(function visit(node) { + if (isVariableDeclarationList(node)) { + declList = node; + } + node.forEachChild(visit); + }); + assert.ok(declList, "Should find VariableDeclarationList"); + assert.ok(declList.flags & NodeFlags.Const, "Should have Const flag"); + }); +}); + +describe("AST roundtrips", { concurrency }, () => { + test("TypeOperator operator kind", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `function test(arg: readonly number[]) { }\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const param = (sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").FunctionDeclaration).parameters[0]; + assert(param); + const type = param.type as import("@typescript/typescript/unstable/ast").TypeOperatorNode; + assert(type); + assert.equal(type.kind, SyntaxKind.TypeOperator); + assert.equal(type.operator, SyntaxKind.ReadonlyKeyword); + const printed = api.printer.printFile(sourceFile); + assert.equal(sourceFile.text, printed); + }); + + test("SpreadAssignment roundtrip", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `var thing = { ...other };\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const object = stmt.declarationList.declarations[0].initializer as import("@typescript/typescript/unstable/ast").ObjectLiteralExpression; + const assignment = object.properties[0] as import("@typescript/typescript/unstable/ast").SpreadAssignment; + assert(assignment); + assert.equal(assignment.kind, SyntaxKind.SpreadAssignment); + const expr = assignment.expression; + assert(expr); + assert.equal(expr.kind, SyntaxKind.Identifier); + const printed = api.printer.printFile(sourceFile); + assert.equal(sourceFile.text, printed); + }); + + test("VariableDeclarationList const flag clone", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `const thing = 123;\n`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + { + const stmt = sourceFile.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const list = stmt.declarationList; + assert(list.flags & NodeFlags.Const); + } + const cloned = getSynthesizedDeepClone(sourceFile); + { + const stmt = cloned.statements[0] as import("@typescript/typescript/unstable/ast").VariableStatement; + const list = stmt.declarationList; + assert(list.flags & NodeFlags.Const); + } + const printed = api.printer.printFile(cloned); + assert.equal(sourceFile.text, printed); + }); + + test("JSDoc before ExpressionStatement allowed", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": ` +/** + * A doc. + */ +doThing(); + `, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert(sourceFile); + const printed = api.printer.printFile(sourceFile); + assert.equal(sourceFile.text.trim(), printed.trim()); + }); + + test("Factory ModifierList auto-conversion", () => { + using api = spawnAPI(); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const node = createTypeAliasDeclaration( + [createToken(SyntaxKind.ExportKeyword)], + createIdentifier("Test"), + undefined, + createKeywordTypeNode(SyntaxKind.AnyKeyword), + ); + + assert.equal(api.printer.printNode(node), "export type Test = any;"); + + const cloned = getSynthesizedDeepClone(node); + assert.equal(api.printer.printNode(cloned), "export type Test = any;"); + }); + + test("Parse-clone-emit roundtrip", () => { + const tsSource = fileURLToPath(new URL("../../../../tsc/testdata/fixtures", import.meta.url).toString()); + using api = new API({ + cwd: tsSource, + }); + const target = { + cloneCrashed: 0, + printCrashed: 0, + clonePrintCrashed: 0, + }; + const errors = { ...target }; + + for (const tsconfig of globSync("**/tsconfig.json", { cwd: tsSource })) { + const snapshot = api.createSnapshot({ openProject: resolve(tsSource, tsconfig) }); + const project = snapshot.getConfiguredProject(tsconfig); + assert(project); + for (const file of project.rootFiles) { + const source = project.program.getSourceFile(file); + assert(source); + let clone: typeof source; + + try { + api.printer.printNode(source); + } + catch { + errors.printCrashed++; + continue; + } + + try { + clone = getSynthesizedDeepClone(source); + } + catch { + errors.cloneCrashed++; + continue; + } + + try { + api.printer.printNode(clone); + } + catch { + errors.clonePrintCrashed++; + continue; + } + } + } + + assert.deepEqual(errors, target); + }); +}); + +describe("Program - diagnostics", { concurrency }, () => { + test("getSyntacticDiagnostics", () => { + const source = `const x: = 1;`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSyntacticDiagnostics("/src/index.ts"); + assert.deepEqual(diags[0].startPosition, { line: 0, character: 9 }); + assert.deepEqual(diags[0].endPosition, { line: 0, character: 10 }); + assert.deepEqual(diags[0].sourceLines, [{ line: 0, text: source }]); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...rangeOf(source, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }]); + }); + + test("getSemanticDiagnostics with messageChain and relatedInformation", () => { + const source = `interface Props { callback: (x: string) => void }\nconst p: Props = { callback: (x: number) => {} };`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSemanticDiagnostics("/src/index.ts"); + const declRange = rangeOf(source, "callback", 0); + const assignRange = rangeOf(source, "callback", 1); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2322, + category: DiagnosticCategory.Error, + text: "Type '(x: number) => void' is not assignable to type '(x: string) => void'.", + messageChain: [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2328, + category: DiagnosticCategory.Error, + text: "Types of parameters 'x' and 'x' are incompatible.", + messageChain: [{ + fileName: "/src/index.ts", + ...assignRange, + code: 2322, + category: DiagnosticCategory.Error, + text: "Type 'string' is not assignable to type 'number'.", + }], + }], + relatedInformation: [{ + fileName: "/src/index.ts", + ...declRange, + code: 6500, + category: DiagnosticCategory.Message, + text: "The expected type comes from property 'callback' which is declared here on type 'Props'", + }], + }]); + }); + + test("getSuggestionDiagnostics", () => { + const source = `export function f() { const x = 1; return x; }\nconst _unused = 1;\n`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSuggestionDiagnostics("/src/index.ts"); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/src/index.ts", + ...rangeOf(source, "_unused"), + code: 6133, + category: DiagnosticCategory.Suggestion, + text: "'_unused' is declared but its value is never read.", + reportsUnnecessary: true, + }]); + }); + + test("getConfigFileParsingDiagnostics", () => { + const config = `{ "compilerOptions": { "target": "invalid" } }`; + using api = spawnAPI({ + "/tsconfig.json": config, + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getConfigFileParsingDiagnostics(); + assert.deepEqual(withoutFormattingContext(diags), [{ + fileName: "/tsconfig.json", + ...rangeOf(config, `"invalid"`), + code: 6046, + category: DiagnosticCategory.Error, + text: "Argument for '--target' option must be: 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'es2023', 'es2024', 'es2025', 'es2026', 'esnext'.", + }]); + }); + + test("getConfigFileNames and getConfigSourceFile", () => { + const baseConfigText = `{ "compilerOptions": { "strict": true } }`; + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.base.json": baseConfigText, + "/tsconfig.json": `{ "extends": "./tsconfig.base.json", "files": ["./src/index.ts"] }`, + "/src/index.ts": `export const x = 1;`, + }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const names = project.program.getConfigFileNames(); + assert.deepEqual(names, ["/tsconfig.json", "/tsconfig.base.json"]); + + const rootConfig = project.program.getConfigSourceFile("/tsconfig.json"); + assert.ok(rootConfig); + assert.equal(rootConfig.fileName, "/tsconfig.json"); + assert.equal(project.program.getSourceFile("/tsconfig.json"), undefined); + const configObject = cast(cast(rootConfig.statements[0], isExpressionStatement).expression, isObjectLiteralExpression); + const configProperty = cast(configObject.properties[0], isPropertyAssignment); + assert.throws(() => getSymbol(configProperty), /Cached source file not found/); + assert.throws(() => api.getSymbol(configProperty), /Cached source file not found/); + + fs.writeFile!(toRootedFilePath("/tsconfig.base.json", undefined), `{ "compilerOptions": { "strict": false } }`); + const extendedConfig = project.program.getConfigSourceFile("/tsconfig.base.json"); + assert.ok(extendedConfig); + assert.equal(extendedConfig.fileName, "/tsconfig.base.json"); + assert.equal(extendedConfig.getFullText(), baseConfigText); + + const nonConfig = project.program.getConfigSourceFile("/src/index.ts"); + assert.equal(nonConfig, undefined); + }); + + test("getDeclarationDiagnostics", () => { + using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "declaration": true } }`, + "/src/index.ts": `export const x: number = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getDeclarationDiagnostics("/src/index.ts"); + assert.deepEqual(diags, []); + }); + + test("getBindDiagnostics", () => { + const source = `let x = 1;\nlet x = 2;`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getBindDiagnostics("/src/index.ts"); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/src/index.ts", + ...rangeOf(source, "x", 0), + code: 2451, + category: DiagnosticCategory.Error, + text: "Cannot redeclare block-scoped variable 'x'.", + }, + { + fileName: "/src/index.ts", + ...rangeOf(source, "x", 1), + code: 2451, + category: DiagnosticCategory.Error, + text: "Cannot redeclare block-scoped variable 'x'.", + }, + ]); + }); + + test("getProgramDiagnostics", () => { + const config = `{ "compilerOptions": { "moduleResolution": "bundler", "module": "nodenext" } }`; + using api = spawnAPI({ + "/tsconfig.json": config, + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getProgramDiagnostics(); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/tsconfig.json", + ...rangeOf(config, `"bundler"`), + code: 5095, + category: DiagnosticCategory.Error, + text: "Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.", + }, + { + fileName: "/tsconfig.json", + ...rangeOf(config, `"bundler"`), + code: 5109, + category: DiagnosticCategory.Error, + text: "Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.", + }, + ]); + }); + + test("getGlobalDiagnostics", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `export const x = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getGlobalDiagnostics(); + assert.deepEqual(diags, []); + }); + + test("getGlobalDiagnostics returns file-less diagnostics from the checker", () => { + using api = spawnAPI({ + "/tsconfig.json": `{ "compilerOptions": { "noLib": true } }`, + "/src/index.ts": `export const x = [1, 2, 3];`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getGlobalDiagnostics(); + // With noLib, the checker reports "Cannot find global type" diagnostics that + // are not associated with any source file. + assert.ok(diags.length > 0, "expected global diagnostics to be reported"); + for (const diag of diags) { + assert.equal(diag.fileName, undefined); + assert.equal(diag.code, 2318); + assert.equal(diag.category, DiagnosticCategory.Error); + } + assert.ok( + diags.some(d => d.text === "Cannot find global type 'Array'."), + "expected a global diagnostic for the 'Array' type", + ); + }); + + test("getSyntacticDiagnostics with multiple files", () => { + const sourceA = `const a: = 1;`; + const sourceB = `const b: = 2;`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + "/src/clean.ts": `const c = 3;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSyntacticDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.deepEqual(withoutFormattingContext(diags), [ + { + fileName: "/src/a.ts", + ...rangeOf(sourceA, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }, + { + fileName: "/src/b.ts", + ...rangeOf(sourceB, "="), + code: 1110, + category: DiagnosticCategory.Error, + text: "Type expected.", + }, + ]); + }); + + test("getSemanticDiagnostics with multiple files", () => { + const sourceA = `export const a: number = "hello";`; + const sourceB = `export const b: string = 42;`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSemanticDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.equal(diags.length, 2); + assert.equal(diags[0].fileName, "/src/a.ts"); + assert.equal(diags[0].code, 2322); + assert.equal(diags[1].fileName, "/src/b.ts"); + assert.equal(diags[1].code, 2322); + }); + + test("getBindDiagnostics with multiple files", () => { + const sourceA = `let x = 1;\nlet x = 2;`; + const sourceB = `let y = 1;\nlet y = 2;`; + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": sourceA, + "/src/b.ts": sourceB, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getBindDiagnostics(["/src/a.ts", "/src/b.ts"]); + assert.equal(diags.length, 4); + assert.equal(diags.filter(d => d.fileName === "/src/a.ts").length, 2); + assert.equal(diags.filter(d => d.fileName === "/src/b.ts").length, 2); + }); + + test("diagnostics with no files argument returns all", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": `const a: = 1;`, + "/src/b.ts": `const b: = 2;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSyntacticDiagnostics(); + assert.equal(diags.length, 2); + }); + + test("diagnostics with empty files array returns empty", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/a.ts": `const a: = 1;`, + "/src/b.ts": `const b: = 2;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const diags = project.program.getSyntacticDiagnostics([]); + assert.deepEqual(diags, []); + }); +}); + +describe("getDefaultProjectForFile", { concurrency }, () => { + test("snapshot opens reject unreadable virtual files without panicking", () => { + const fileName = "/src/App.vue.ts"; + const source = `export const component = 1;`; + const fs = createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ files: ["/src/index.ts"] }), + "/src/index.ts": `export const x = 1;`, + "/src/App.vue": source, + }); + let virtualFileAvailable = false; + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: { + ...fs, + readFile: path => virtualFileAvailable && path === fileName ? source : fs.readFile!(path), + fileExists: path => virtualFileAvailable && path === fileName ? true : fs.fileExists!(path), + }, + }); + const snapshot = api.createSnapshot({ + openProjects: ["/tsconfig.json"], + openFiles: ["/src/index.ts"], + }); + + const expectedError = /client error: failed to .*snapshot: no project found for opened file: \/src\/App\.vue\.ts/; + assert.throws(() => snapshot.update({ openFiles: [fileName] }), expectedError); + assert.throws(() => api.createSnapshot({ openFiles: [fileName] }), expectedError); + + virtualFileAvailable = true; + const updated = snapshot.update({ openFiles: [fileName] }); + const project = updated.getDefaultProjectForFile(fileName); + assert.ok(project); + assert.equal(project.configFileName, undefined); + assert.equal((project.program.getSourceFile(fileName))?.text, source); + assert.equal(snapshot.getDefaultProjectForFile(fileName), undefined); + assert.ok(updated.getConfiguredProject("/tsconfig.json")); + + virtualFileAvailable = false; + const reopen = { openFiles: [fileName], fileNotifications: { deleted: [fileName] } }; + assert.throws(() => updated.update(reopen), expectedError); + assert.equal((project.program.getSourceFile(fileName))?.text, source); + }); + + test("finds inferred project for d.ts in node_modules after openFiles", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // The d.ts is not imported, so it is not in the project's program + const dtsSf = project.program.getSourceFile("/node_modules/my-lib/index.d.ts"); + assert.equal(dtsSf, undefined, "d.ts not in import graph should not be found via project.program.getSourceFile"); + + // Before opening the file, getDefaultProjectForFile returns undefined (no error) + const noProject = snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.equal(noProject, undefined, "getDefaultProjectForFile returns undefined for unloaded file"); + + // Load the file into the inferred project via createSnapshot openFiles + const snapshot2 = api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); + const defaultProject = snapshot2.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.ok(defaultProject, "getDefaultProjectForFile should find inferred project after openFiles"); + + const fooPos = `export declare const foo: string;`.indexOf("foo"); + const fooType = defaultProject.checker.getTypeAtPosition("/node_modules/my-lib/index.d.ts", fooPos); + assert.ok(fooType); + assert.ok(fooType.flags & TypeFlags.String); + }); + + test("inferred project reflects file changes without a follow-up open/close request", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/loose.ts": `export const foo = 1;`, + }); + using api = disposableAPI; + + const snapshot1 = api.createSnapshot({ openFiles: ["/loose.ts"] }); + const project1 = snapshot1.getDefaultProjectForFile("/loose.ts"); + assert.ok(project1, "file with no config file in its ancestry should load into the inferred project"); + const sf1 = project1.program.getSourceFile("/loose.ts"); + assert.ok(sf1); + assert.equal(sf1.text, `export const foo = 1;`); + + // Mutate the file and notify only via fileChanges — no follow-up openFiles/closeFiles. + fs.writeFile!(toRootedFilePath("/loose.ts", undefined), `export const foo = 2;`); + const snapshot2 = api.createSnapshot({ + openFiles: ["/loose.ts"], + fileNotifications: { changed: ["/loose.ts"] }, + }); + + const project2 = snapshot2.getDefaultProjectForFile("/loose.ts"); + assert.ok(project2); + const sf2 = project2.program.getSourceFile("/loose.ts"); + assert.ok(sf2); + assert.equal( + sf2.text, + `export const foo = 2;`, + "inferred project's program should reflect the file change even without a follow-up open/close request", + ); + }); + + test("opens multiple inferred files in one snapshot", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + "/node_modules/other-lib/package.json": JSON.stringify({ name: "other-lib", types: "./index.d.ts" }), + "/node_modules/other-lib/index.d.ts": `export declare const bar: number;`, + }); + + const snapshot = api.createSnapshot({ + openFiles: ["/node_modules/my-lib/index.d.ts", "/node_modules/other-lib/index.d.ts"], + }); + + const firstProject = snapshot.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"); + assert.ok(firstProject, "previously opened file should remain in the inferred project"); + const secondProject = snapshot.getDefaultProjectForFile("/node_modules/other-lib/index.d.ts"); + assert.ok(secondProject, "newly opened file should be in the inferred project"); + }); + + test("opening a file resolves to a configured project via ancestor search", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + }); + + // Open the file without first opening the project. Like LSP's didOpen, this + // should search ancestor directories for a tsconfig that contains the file. + const snapshot = api.createSnapshot({ openFiles: ["/src/index.ts"] }); + const defaultProject = snapshot.getDefaultProjectForFile("/src/index.ts"); + assert.ok(defaultProject, "should find a project for the opened file"); + assert.equal( + defaultProject.configFileName, + "/tsconfig.json", + "opened file should resolve to the containing configured project, not the inferred project", + ); + }); + + test("closeProjects releases a project opened via openProjects", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + }); + + const opened = api.createSnapshot({ openProjects: ["/tsconfig.json"] }); + assert.ok(opened.getConfiguredProject("/tsconfig.json"), "project should be open after openProjects"); + + const closed = api.createSnapshot({ closeProjects: ["/tsconfig.json"] }); + assert.equal( + closed.getConfiguredProject("/tsconfig.json"), + undefined, + "project should be unloaded after closeProjects", + ); + }); + + test("closeFiles releases a file opened via openFiles", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x = 1;`, + "/node_modules/my-lib/package.json": JSON.stringify({ name: "my-lib", types: "./index.d.ts" }), + "/node_modules/my-lib/index.d.ts": `export declare const foo: string;`, + }); + + api.createSnapshot({ openProject: "/tsconfig.json" }); + const opened = api.createSnapshot({ openFiles: ["/node_modules/my-lib/index.d.ts"] }); + assert.ok( + opened.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), + "file should resolve to a project after openFiles", + ); + + const closed = api.createSnapshot({ closeFiles: ["/node_modules/my-lib/index.d.ts"] }); + assert.equal( + closed.getDefaultProjectForFile("/node_modules/my-lib/index.d.ts"), + undefined, + "file should no longer resolve to a project after closeFiles", + ); + }); +}); + +describe("Program - emit", { concurrency }, () => { + const files = { + "/tsconfig.json": `{ + "compilerOptions": { + "outDir": "dist", + "declaration": true, + } + }`, + "/src/index.ts": "export const x: number = 1;", + "/src/testing.ts": "export const y: string = 'typescript';", + }; + + test("emit all files", () => { + const fs = createVirtualFileSystem({ ...files }); + + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.emit(); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.js", + "/dist/src/index.d.ts", + "/dist/src/testing.js", + "/dist/src/testing.d.ts", + ], + fileSystem: undefined, + }); + + const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, `export const x = 1;\n`); + assert.strictEqual(dts, `export declare const x: number;\n`); + assert.strictEqual(js2, `export const y = 'typescript';\n`); + assert.strictEqual(dts2, `export declare const y: string;\n`); + }); + + test("emit only dts", () => { + const fs = createVirtualFileSystem({ ...files }); + + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.emit(EmitOnly.OnlyDts); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.d.ts", + "/dist/src/testing.d.ts", + ], + fileSystem: undefined, + }); + + const js = fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, serverFS.useOS); + assert.strictEqual(dts, `export declare const x: number;\n`); + assert.strictEqual(js2, serverFS.useOS); + assert.strictEqual(dts2, `export declare const y: string;\n`); + }); + + test("emit only js", () => { + const fs = createVirtualFileSystem({ ...files }); + + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: fs, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.emit(EmitOnly.OnlyJs); + assert.deepEqual(result, { + diagnostics: [], + emitSkipped: false, + emittedFiles: [ + "/dist/src/index.js", + "/dist/src/testing.js", + ], + fileSystem: undefined, + }); + + const js = fs.readFile?.(toRootedFilePath("/dist/src/index.js", undefined)); + const dts = fs.readFile?.(toRootedFilePath("/dist/src/index.d.ts", undefined)); + const js2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.js", undefined)); + const dts2 = fs.readFile?.(toRootedFilePath("/dist/src/testing.d.ts", undefined)); + assert.strictEqual(js, `export const x = 1;\n`); + assert.strictEqual(dts, serverFS.useOS); + assert.strictEqual(js2, `export const y = 'typescript';\n`); + assert.strictEqual(dts2, serverFS.useOS); + }); + + test("emitToString emits the whole program and respects emitOnly", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ ...files }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.emitToString(EmitOnly.OnlyDts); + assert.deepEqual([...result.outputFiles.keys()], [ + "/dist/src/index.d.ts", + "/dist/src/testing.d.ts", + ]); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/index.js", undefined)), serverFS.useOS); + }); + + test("whole-program emit includes option-controlled maps", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + declaration: true, + declarationMap: true, + outDir: "dist", + sourceMap: true, + }, + }), + "/src/index.ts": "export const value: number = 1;", + }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + const result = project.program.emit(); + assert.deepEqual( + new Set(result.emittedFiles), + new Set([ + "/dist/src/index.js", + "/dist/src/index.js.map", + "/dist/src/index.d.ts", + "/dist/src/index.d.ts.map", + ]), + ); + assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.js.map", undefined))); + assert.ok(fs.fileExists?.(toRootedFilePath("/dist/src/index.d.ts.map", undefined))); + + const js = project.program.emitToString(EmitOnly.OnlyJs); + assert.deepEqual([...js.outputFiles.keys()], [ + "/dist/src/index.js", + "/dist/src/index.js.map", + ]); + + const dts = project.program.emitToString(EmitOnly.OnlyDts); + assert.deepEqual([...dts.outputFiles.keys()], [ + "/dist/src/index.d.ts", + "/dist/src/index.d.ts.map", + ]); + }); + + test("noEmitOnError reports diagnostics without writing output", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ + compilerOptions: { + noEmitOnError: true, + outDir: "dist", + }, + }), + "/src/bad.ts": "export const bad = ;", + "/src/good.ts": "export const value = 1;", + }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const result = project.program.emit(); + assert.equal(result.emitSkipped, true); + assert.ok(result.diagnostics.some(d => d.code === 1109)); + assert.deepEqual(result.emittedFiles, []); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/bad.js", undefined)), serverFS.useOS); + assert.equal(fs.readFile(toRootedFilePath("/dist/src/good.js", undefined)), serverFS.useOS); + + const stringResult = project.program.emitToString(); + assert.equal(stringResult.emitSkipped, true); + assert.ok(stringResult.diagnostics.some(d => d.code === 1109)); + assert.deepEqual(stringResult.outputFiles, new Map()); + }); + + test("emit and emitToString respect noEmit", () => { + const { api: disposableAPI, fs } = spawnAPIWithFS({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { noEmit: true } }), + "/src/index.ts": "export const value = 1;", + }); + using api = disposableAPI; + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + assert.deepEqual(project.program.emit(), { + diagnostics: [], + emitSkipped: false, + emittedFiles: [], + fileSystem: undefined, + }); + assert.deepEqual(project.program.emitToString(), { + diagnostics: [], + emitSkipped: false, + outputFiles: new Map(), + }); + assert.equal(fs.readFile(toRootedFilePath("/src/index.js", undefined)), serverFS.useOS); + }); + + test("emit rejects unknown files and invalid emitOnly values", () => { + using api = spawnAPI({ ...files }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + let error: unknown; + try { + project.program.getJavaScriptEmit(["/src/missing.ts"]); + } + catch (e) { + error = e; + } + assert.match(String(error), /source file not found/); + + error = undefined; + try { + project.program.emitToString(3 as EmitOnly); + } + catch (e) { + error = e; + } + assert.match(String(error), /invalid emitOnly value/); + }); +}); + +describe("Timing", { concurrency }, () => { + test("collects combined client, server, and transport timing info", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ ...defaultFiles }), + collectTiming: true, + }); + + // Baseline: enabled, but nothing measured yet. + let info = api.getTimingInfo(); + assert.equal(info.enabled, true); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.recentRequests.length, 0); + + // Exercise a JSON request and a binary source-file request. + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // Client-side timing: round-trip latency and byte counts. + info = api.getTimingInfo(); + assert.ok(info.totals.requestCount >= 2, "expected at least two measured requests"); + assert.ok(info.totals.bytesSent > 0); + assert.ok(info.totals.bytesReceived > 0); + assert.ok(info.totals.roundTripMs >= 0); + + // Server-side timing is folded into the same snapshot. + assert.ok(info.totals.serverTimeMs >= 0); + assert.ok(info.totals.transportOverheadMs >= 0); + assert.equal( + info.totals.transportOverheadMs, + Math.max(0, info.totals.roundTripMs - info.totals.serverTimeMs), + ); + + // The ring buffer retains at most the 5 most recent requests. + assert.ok(info.recentRequests.length > 0); + assert.ok(info.recentRequests.length <= 5); + assert.ok(info.recentRequests.length <= info.totals.requestCount); + + for (const r of info.recentRequests) { + assert.ok(r.roundTripMs >= 0); + assert.ok(r.bytesSent >= 0); + assert.ok(r.bytesReceived >= 0); + assert.ok(typeof r.method === "string" && r.method.length > 0); + assert.equal(typeof r.timestamp, "number"); + // Transport overhead is present exactly when server time is. + assert.equal(r.transportOverheadMs === undefined, r.serverTimeMs === undefined); + if (r.serverTimeMs !== undefined) { + assert.ok(r.serverTimeMs >= 0); + assert.equal(r.transportOverheadMs, Math.max(0, r.roundTripMs - r.serverTimeMs)); + } + } + + // Server processing time is folded in for the recent requests. + assert.ok(info.recentRequests.every(r => r.serverTimeMs !== undefined), "server time should be reported"); + + // Reset clears totals and history on both client and server. + api.resetTimingInfo(); + info = api.getTimingInfo(); + assert.equal(info.enabled, true); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.totals.serverTimeMs, 0); + assert.equal(info.totals.transportOverheadMs, 0); + assert.equal(info.recentRequests.length, 0); + }); + + test("tracks source-file node materialization", () => { + using api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ ...defaultFiles }), + collectTiming: true, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sourceFile = project.program.getSourceFile("/src/index.ts"); + assert.ok(sourceFile); + + // The source file node itself is pre-cached, so before walking the + // tree no descendant nodes have been materialized. + let info = api.getTimingInfo(); + const before = info.totals.nodesMaterialized; + assert.equal(info.totals.sourceFilesFetched, 1, "one source file was fetched"); + assert.ok(info.totals.nodesFetched > 0, "the fetched file contributes materializable nodes"); + assert.equal(info.totals.nodesMaterialized, 0, "nothing walked yet, so no nodes materialized"); + + // Walk the whole tree to force lazy materialization of every node. + let visited = 0; + sourceFile.forEachChild(function visit(node) { + visited++; + node.forEachChild(visit); + }); + assert.ok(visited > 0, "expected to visit at least one node"); + + info = api.getTimingInfo(); + assert.ok( + info.totals.nodesMaterialized > before, + "walking the tree should materialize nodes", + ); + assert.ok( + info.totals.nodesMaterialized >= visited, + "every visited node should have been materialized", + ); + + // A full walk materializes (nearly) every fetched node, so the share + // of fetched nodes materialized should be substantial. + assert.equal(info.totals.sourceFilesFetched, 1); + assert.ok( + info.totals.nodesMaterialized > 0 + && info.totals.nodesMaterialized <= info.totals.nodesFetched, + "materialized nodes should be in (0, nodesFetched]", + ); + + // Reset clears materialization totals along with the rest. + api.resetTimingInfo(); + info = api.getTimingInfo(); + assert.equal(info.totals.nodesMaterialized, 0); + assert.equal(info.totals.sourceFilesFetched, 0); + assert.equal(info.totals.nodesFetched, 0); + }); + + test("is disabled by default", () => { + using api = spawnAPI(); + + api.parseConfigFile("/tsconfig.json"); + const info = api.getTimingInfo(); + assert.equal(info.enabled, false); + assert.equal(info.totals.requestCount, 0); + assert.equal(info.totals.nodesMaterialized, 0); + assert.equal(info.totals.sourceFilesFetched, 0); + assert.equal(info.totals.nodesFetched, 0); + assert.equal(info.recentRequests.length, 0); + }); +}); + +describe("runWithTemporaryFileUpdate", { concurrency }, () => { + test("temporary file update is visible in the callback and reverted afterward", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { strict: true } }), + "/src/index.ts": `export const x: number = 1;`, + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + + // The original content type-checks cleanly. + const baseDiags = project.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(baseDiags.length, 0); + + // Keep a newer snapshot active to verify any active snapshot can be the base. + const latestSnapshot = api.createSnapshot(); + assert.notEqual(latestSnapshot.id, snapshot.id); + + // Inside the callback, the file has the temporary (erroneous) content. + let errorCount = -1; + api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const x: string = 1;`, tempSnapshot => { + const tempProject = tempSnapshot.getConfiguredProject("/tsconfig.json")!; + const diags = tempProject.program.getSemanticDiagnostics("/src/index.ts"); + errorCount = diags.length; + }); + assert.ok(errorCount > 0, "temporary content should produce a semantic error inside the callback"); + + // The original snapshot is unaffected by the temporary update. + const afterDiags = project.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(afterDiags.length, 0); + + // A subsequent independent snapshot can request the project again. + const snapshot2 = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project2 = snapshot2.getConfiguredProject("/tsconfig.json")!; + const diags2 = project2.program.getSemanticDiagnostics("/src/index.ts"); + assert.equal(diags2.length, 0); + }); + + test("reconstructs projects omitted from the response diff", () => { + using api = spawnAPI({ + "/first/tsconfig.json": `{}`, + "/first/index.ts": `export const first = 1;`, + "/second/tsconfig.json": `{}`, + "/second/index.ts": `export const second = 1;`, + }); + + const snapshot = api.createSnapshot({ + openProjects: ["/first/tsconfig.json", "/second/tsconfig.json"], + }); + const originalSecondProject = snapshot.getConfiguredProject("/second/tsconfig.json")!; + + api.runWithTemporaryFileUpdate(snapshot, "/first/index.ts", `export const first = 2;`, tempSnapshot => { + assert.equal(tempSnapshot.getProjects().length, 2); + assert.ok(tempSnapshot.getConfiguredProject("/first/tsconfig.json")); + const secondProject = tempSnapshot.getConfiguredProject("/second/tsconfig.json"); + assert.ok(secondProject); + assert.notStrictEqual(secondProject, originalSecondProject); + assert.equal((secondProject.program.getSourceFileNames()).includes("/second/index.ts" as RootedFilePath), true); + }); + }); + + test("updates synthetic programs with temporary contents", () => { + using api = spawnAPI({ + "/src/index.ts": `export const value: number = 1;`, + }); + const snapshot = api.createSnapshot({ + createPrograms: [{ + rootFiles: ["/src/index.ts"], + compilerOptions: { noLib: true, strict: true }, + }], + }); + const originalProgram = snapshot.operation.createdPrograms[0]; + + api.runWithTemporaryFileUpdate(snapshot, "/src/index.ts", `export const value: string = 1;`, temporarySnapshot => { + const temporaryProgram = temporarySnapshot.getProgram(originalProgram.id); + assert.ok(temporaryProgram); + assert.equal((temporaryProgram.getSemanticDiagnostics("/src/index.ts")).length, 1); + }); + + assert.equal((originalProgram.getSemanticDiagnostics("/src/index.ts")).length, 0); + }); +}); + +function spawnAPIWithFS( + files: Record = { ...defaultFiles }, + onWrite?: (path: string) => void, +): { api: API; fs: ReturnType; } { + const fs = createVirtualFileSystem(files); + if (onWrite) { + const writeFile = fs.writeFile!; + fs.writeFile = (path, content) => { + onWrite(path); + writeFile(path, content); + }; + } + const api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs, + }); + return { api, fs }; +} + +/** Returns `{ pos, end }` for the nth (0-based, default 0) occurrence of `searchString` in `source`. */ +function rangeOf(source: string, searchString: string, occurrence: number = 0): { pos: number; end: number; } { + let index = -1; + for (let i = 0; i <= occurrence; i++) { + index = source.indexOf(searchString, index + 1); + if (index === -1) { + throw new Error(`Occurrence ${occurrence} of "${searchString}" not found in source`); + } + } + return { pos: index, end: index + searchString.length }; +} + +function withoutFormattingContext(value: T): T { + const formattingKeys = new Set(["startPosition", "endPosition", "sourceLines"]); + return JSON.parse(JSON.stringify(value, (key, item) => formattingKeys.has(key) ? undefined : item)) as T; +} + +function applyTextEdits(source: string, edits: readonly TextEdit[]): string { + const sorted = [...edits].sort((a, b) => b.pos - a.pos); + let result = source; + for (const edit of sorted) { + result = result.slice(0, edit.pos) + edit.newText + result.slice(edit.end); + } + return result; +} diff --git a/packages/typescript/test/sync/api.testUtils.ts b/packages/typescript/test/sync/api.testUtils.ts index 1b10f0760cab6..6f8fd8fde2fae 100644 --- a/packages/typescript/test/sync/api.testUtils.ts +++ b/packages/typescript/test/sync/api.testUtils.ts @@ -1,20 +1,20 @@ -import { - API, - type APIOptions, -} from "@typescript/typescript/unstable/sync"; -import { fileURLToPath } from "node:url"; -import { createVirtualFileSystem } from "../testUtils.ts"; - -export const defaultFiles = { - "/tsconfig.json": "{}", - "/src/index.ts": `import { foo } from './foo';`, - "/src/foo.ts": `export const foo = 42;`, -}; - -export function spawnAPI(files: Record = { ...defaultFiles }, options: Omit = {}) { - return new API({ - ...options, - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem(files), - }); -} +import { + API, + type APIOptions, +} from "@typescript/typescript/unstable/sync"; +import { fileURLToPath } from "node:url"; +import { createVirtualFileSystem } from "../testUtils.ts"; + +export const defaultFiles = { + "/tsconfig.json": "{}", + "/src/index.ts": `import { foo } from './foo';`, + "/src/foo.ts": `export const foo = 42;`, +}; + +export function spawnAPI(files: Record = { ...defaultFiles }, options: Omit = {}) { + return new API({ + ...options, + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem(files), + }); +} diff --git a/packages/typescript/test/sync/ast.bench.ts b/packages/typescript/test/sync/ast.bench.ts index 30d57385d40ba..a408ece0b057a 100644 --- a/packages/typescript/test/sync/ast.bench.ts +++ b/packages/typescript/test/sync/ast.bench.ts @@ -1,218 +1,218 @@ -// Benchmarks Node.childrenIter against Node.forEachChild for local factory nodes -// and RemoteNodes fetched through the sync API. -// -// Run with: -// npm run node -- test/sync/ast.bench.ts -// npm run node -- test/sync/ast.bench.ts --filter "remote recursive" - -import type { - Block, - Identifier, - Node, -} from "@typescript/typescript/unstable/ast"; -import { - isBlock, - isIdentifier, -} from "@typescript/typescript/unstable/ast"; -import { - createBlock, - createExpressionStatement, - createIdentifier, - createIfStatement, -} from "@typescript/typescript/unstable/ast/factory"; -import { API } from "@typescript/typescript/unstable/sync"; -import assert from "node:assert/strict"; -import { fileURLToPath } from "node:url"; -import { parseArgs } from "node:util"; -import { Bench } from "tinybench"; -import { createVirtualFileSystem } from "../testUtils.ts"; - -const treeDepth = 5; -const expressionsPerBlock = 6; -const earlyTargetName = "earlyTargetIdentifier"; -const midpointTargetName = "midpointTargetIdentifier"; - -const isMain = process.argv[1] === fileURLToPath(import.meta.url); -if (isMain) { - const { values } = parseArgs({ - options: { - filter: { type: "string" }, - singleIteration: { type: "boolean", default: false }, - }, - }); - runBenchmarks(values); -} - -interface Tree { - node: Block; - source: string; -} - -function createTree(depth = treeDepth, path = "root"): Tree { - const statements = []; - const sourceStatements: string[] = []; - for (let i = 0; i < expressionsPerBlock; i++) { - const name = path === "root" && i === 0 - ? earlyTargetName - : path === "root_1" && i === 0 - ? midpointTargetName - : `value_${path}_${i}`; - statements.push(createExpressionStatement(createIdentifier(name))); - sourceStatements.push(`${name};`); - } - - if (depth > 0) { - const thenTree = createTree(depth - 1, `${path}_0`); - const elseTree = createTree(depth - 1, `${path}_1`); - const conditionName = `condition_${path}`; - statements.push(createIfStatement( - createIdentifier(conditionName), - thenTree.node, - elseTree.node, - )); - sourceStatements.push(`if (${conditionName}) ${thenTree.source} else ${elseTree.source}`); - } - - return { - node: createBlock(statements), - source: `{${sourceStatements.join("\n")}}`, - }; -} - -function collectWithForEachChild(node: Node): Node[] { - const children: Node[] = []; - node.forEachChild(child => { - children.push(child); - return undefined; - }); - return children; -} - -function collectWithChildrenIter(node: Node): Node[] { - const children: Node[] = []; - for (const child of node.childrenIter()) { - children.push(child); - } - return children; -} - -function walkWithForEachChild(node: Node): number { - let count = 1; - node.forEachChild(child => { - count += walkWithForEachChild(child); - }); - return count; -} - -function walkWithChildrenIter(node: Node): number { - let count = 1; - for (const child of node.childrenIter()) { - count += walkWithChildrenIter(child); - } - return count; -} - -function findWithForEachChild(node: Node, targetName: string): Identifier | undefined { - return node.forEachChild(child => { - if (isIdentifier(child) && child.text === targetName) return child; - return findWithForEachChild(child, targetName); - }); -} - -function findWithChildrenIter(node: Node, targetName: string): Identifier | undefined { - for (const child of node.childrenIter()) { - if (isIdentifier(child) && child.text === targetName) return child; - const result = findWithChildrenIter(child, targetName); - if (result) return result; - } - return undefined; -} - -export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; }): void { - const { filter, singleIteration } = options ?? {}; - const localTree = createTree(); - const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); - const configPath = "/tsconfig.json"; - const sourcePath = "/src/bench.ts"; - using api = new API({ - cwd: repoRoot, - tsserverPath: fileURLToPath(new URL(`../../../../built/local/tsc${process.platform === "win32" ? ".exe" : ""}`, import.meta.url).toString()), - fs: createVirtualFileSystem({ - [configPath]: "{}", - [sourcePath]: localTree.source, - }), - }); - - const snapshot = api.createSnapshot({ openProject: configPath }); - const remoteSourceFile = snapshot.getConfiguredProject(configPath)!.program.getSourceFile(sourcePath)!; - assert.ok(remoteSourceFile.statements); - const remoteTree = remoteSourceFile.statements[0]; - assert.ok(isBlock(remoteTree)); - - assert.deepStrictEqual( - collectWithChildrenIter(localTree.node).map(node => node.kind), - collectWithForEachChild(localTree.node).map(node => node.kind), - ); - assert.strictEqual(walkWithChildrenIter(localTree.node), walkWithForEachChild(localTree.node)); - assert.strictEqual(walkWithChildrenIter(remoteTree), walkWithForEachChild(remoteTree)); - assert.strictEqual(walkWithChildrenIter(localTree.node), walkWithChildrenIter(remoteTree)); - for (const targetName of [earlyTargetName, midpointTargetName]) { - assert.strictEqual(findWithChildrenIter(localTree.node, targetName)?.text, targetName); - assert.strictEqual(findWithForEachChild(remoteTree, targetName)?.text, targetName); - } - - const bench = new Bench({ - name: "AST child traversal", - iterations: 30, - warmupIterations: 10, - ...singleIteration ? { - iterations: 1, - warmup: false, - time: 0, - } : undefined, - }); - const isAsync = false; - - for (const [nodeType, node] of [["factory", localTree.node], ["remote", remoteTree]] as const) { - bench - .add(`${nodeType} immediate children - forEachChild`, () => { - assert.strictEqual(collectWithForEachChild(node).length, node.statements.length); - }, { async: isAsync }) - .add(`${nodeType} immediate children - childrenIter`, () => { - assert.strictEqual(collectWithChildrenIter(node).length, node.statements.length); - }, { async: isAsync }) - .add(`${nodeType} recursive walk - forEachChild`, () => { - assert.ok(walkWithForEachChild(node) > 1); - }, { async: isAsync }) - .add(`${nodeType} recursive walk - childrenIter`, () => { - assert.ok(walkWithChildrenIter(node) > 1); - }, { async: isAsync }) - .add(`${nodeType} recursive early exit - forEachChild`, () => { - assert.strictEqual(findWithForEachChild(node, earlyTargetName)?.text, earlyTargetName); - }, { async: isAsync }) - .add(`${nodeType} recursive early exit - childrenIter`, () => { - assert.strictEqual(findWithChildrenIter(node, earlyTargetName)?.text, earlyTargetName); - }, { async: isAsync }) - .add(`${nodeType} recursive midpoint exit - forEachChild`, () => { - assert.strictEqual(findWithForEachChild(node, midpointTargetName)?.text, midpointTargetName); - }, { async: isAsync }) - .add(`${nodeType} recursive midpoint exit - childrenIter`, () => { - assert.strictEqual(findWithChildrenIter(node, midpointTargetName)?.text, midpointTargetName); - }, { async: isAsync }); - } - - if (filter) { - const pattern = filter.toLowerCase(); - for (const task of [...bench.tasks]) { - if (!task.name.toLowerCase().includes(pattern)) { - bench.remove(task.name); - } - } - } - - bench.runSync(); - for (const task of bench.tasks) { - if (task.result && "error" in task.result) throw task.result.error; - } - console.table(bench.table()); -} +// Benchmarks Node.childrenIter against Node.forEachChild for local factory nodes +// and RemoteNodes fetched through the sync API. +// +// Run with: +// npm run node -- test/sync/ast.bench.ts +// npm run node -- test/sync/ast.bench.ts --filter "remote recursive" + +import type { + Block, + Identifier, + Node, +} from "@typescript/typescript/unstable/ast"; +import { + isBlock, + isIdentifier, +} from "@typescript/typescript/unstable/ast"; +import { + createBlock, + createExpressionStatement, + createIdentifier, + createIfStatement, +} from "@typescript/typescript/unstable/ast/factory"; +import { API } from "@typescript/typescript/unstable/sync"; +import assert from "node:assert/strict"; +import { fileURLToPath } from "node:url"; +import { parseArgs } from "node:util"; +import { Bench } from "tinybench"; +import { createVirtualFileSystem } from "../testUtils.ts"; + +const treeDepth = 5; +const expressionsPerBlock = 6; +const earlyTargetName = "earlyTargetIdentifier"; +const midpointTargetName = "midpointTargetIdentifier"; + +const isMain = process.argv[1] === fileURLToPath(import.meta.url); +if (isMain) { + const { values } = parseArgs({ + options: { + filter: { type: "string" }, + singleIteration: { type: "boolean", default: false }, + }, + }); + runBenchmarks(values); +} + +interface Tree { + node: Block; + source: string; +} + +function createTree(depth = treeDepth, path = "root"): Tree { + const statements = []; + const sourceStatements: string[] = []; + for (let i = 0; i < expressionsPerBlock; i++) { + const name = path === "root" && i === 0 + ? earlyTargetName + : path === "root_1" && i === 0 + ? midpointTargetName + : `value_${path}_${i}`; + statements.push(createExpressionStatement(createIdentifier(name))); + sourceStatements.push(`${name};`); + } + + if (depth > 0) { + const thenTree = createTree(depth - 1, `${path}_0`); + const elseTree = createTree(depth - 1, `${path}_1`); + const conditionName = `condition_${path}`; + statements.push(createIfStatement( + createIdentifier(conditionName), + thenTree.node, + elseTree.node, + )); + sourceStatements.push(`if (${conditionName}) ${thenTree.source} else ${elseTree.source}`); + } + + return { + node: createBlock(statements), + source: `{${sourceStatements.join("\n")}}`, + }; +} + +function collectWithForEachChild(node: Node): Node[] { + const children: Node[] = []; + node.forEachChild(child => { + children.push(child); + return undefined; + }); + return children; +} + +function collectWithChildrenIter(node: Node): Node[] { + const children: Node[] = []; + for (const child of node.childrenIter()) { + children.push(child); + } + return children; +} + +function walkWithForEachChild(node: Node): number { + let count = 1; + node.forEachChild(child => { + count += walkWithForEachChild(child); + }); + return count; +} + +function walkWithChildrenIter(node: Node): number { + let count = 1; + for (const child of node.childrenIter()) { + count += walkWithChildrenIter(child); + } + return count; +} + +function findWithForEachChild(node: Node, targetName: string): Identifier | undefined { + return node.forEachChild(child => { + if (isIdentifier(child) && child.text === targetName) return child; + return findWithForEachChild(child, targetName); + }); +} + +function findWithChildrenIter(node: Node, targetName: string): Identifier | undefined { + for (const child of node.childrenIter()) { + if (isIdentifier(child) && child.text === targetName) return child; + const result = findWithChildrenIter(child, targetName); + if (result) return result; + } + return undefined; +} + +export function runBenchmarks(options?: { filter?: string; singleIteration?: boolean; }): void { + const { filter, singleIteration } = options ?? {}; + const localTree = createTree(); + const repoRoot = fileURLToPath(new URL("../../../../", import.meta.url).toString()); + const configPath = "/tsconfig.json"; + const sourcePath = "/src/bench.ts"; + using api = new API({ + cwd: repoRoot, + tsserverPath: fileURLToPath(new URL(`../../../../built/local/tsc${process.platform === "win32" ? ".exe" : ""}`, import.meta.url).toString()), + fs: createVirtualFileSystem({ + [configPath]: "{}", + [sourcePath]: localTree.source, + }), + }); + + const snapshot = api.createSnapshot({ openProject: configPath }); + const remoteSourceFile = snapshot.getConfiguredProject(configPath)!.program.getSourceFile(sourcePath)!; + assert.ok(remoteSourceFile.statements); + const remoteTree = remoteSourceFile.statements[0]; + assert.ok(isBlock(remoteTree)); + + assert.deepStrictEqual( + collectWithChildrenIter(localTree.node).map(node => node.kind), + collectWithForEachChild(localTree.node).map(node => node.kind), + ); + assert.strictEqual(walkWithChildrenIter(localTree.node), walkWithForEachChild(localTree.node)); + assert.strictEqual(walkWithChildrenIter(remoteTree), walkWithForEachChild(remoteTree)); + assert.strictEqual(walkWithChildrenIter(localTree.node), walkWithChildrenIter(remoteTree)); + for (const targetName of [earlyTargetName, midpointTargetName]) { + assert.strictEqual(findWithChildrenIter(localTree.node, targetName)?.text, targetName); + assert.strictEqual(findWithForEachChild(remoteTree, targetName)?.text, targetName); + } + + const bench = new Bench({ + name: "AST child traversal", + iterations: 30, + warmupIterations: 10, + ...singleIteration ? { + iterations: 1, + warmup: false, + time: 0, + } : undefined, + }); + const isAsync = false; + + for (const [nodeType, node] of [["factory", localTree.node], ["remote", remoteTree]] as const) { + bench + .add(`${nodeType} immediate children - forEachChild`, () => { + assert.strictEqual(collectWithForEachChild(node).length, node.statements.length); + }, { async: isAsync }) + .add(`${nodeType} immediate children - childrenIter`, () => { + assert.strictEqual(collectWithChildrenIter(node).length, node.statements.length); + }, { async: isAsync }) + .add(`${nodeType} recursive walk - forEachChild`, () => { + assert.ok(walkWithForEachChild(node) > 1); + }, { async: isAsync }) + .add(`${nodeType} recursive walk - childrenIter`, () => { + assert.ok(walkWithChildrenIter(node) > 1); + }, { async: isAsync }) + .add(`${nodeType} recursive early exit - forEachChild`, () => { + assert.strictEqual(findWithForEachChild(node, earlyTargetName)?.text, earlyTargetName); + }, { async: isAsync }) + .add(`${nodeType} recursive early exit - childrenIter`, () => { + assert.strictEqual(findWithChildrenIter(node, earlyTargetName)?.text, earlyTargetName); + }, { async: isAsync }) + .add(`${nodeType} recursive midpoint exit - forEachChild`, () => { + assert.strictEqual(findWithForEachChild(node, midpointTargetName)?.text, midpointTargetName); + }, { async: isAsync }) + .add(`${nodeType} recursive midpoint exit - childrenIter`, () => { + assert.strictEqual(findWithChildrenIter(node, midpointTargetName)?.text, midpointTargetName); + }, { async: isAsync }); + } + + if (filter) { + const pattern = filter.toLowerCase(); + for (const task of [...bench.tasks]) { + if (!task.name.toLowerCase().includes(pattern)) { + bench.remove(task.name); + } + } + } + + bench.runSync(); + for (const task of bench.tasks) { + if (task.result && "error" in task.result) throw task.result.error; + } + console.table(bench.table()); +} diff --git a/packages/typescript/test/sync/ast.test.ts b/packages/typescript/test/sync/ast.test.ts index a9e4c665cbe48..90133436893ec 100644 --- a/packages/typescript/test/sync/ast.test.ts +++ b/packages/typescript/test/sync/ast.test.ts @@ -1,1551 +1,1551 @@ -import type { - BinaryExpression, - BindingElement, - CallExpression, - ClassDeclaration, - ClassElement, - Declaration, - ExportAssignment, - ExpressionStatement, - FunctionDeclaration, - Identifier, - InterfaceDeclaration, - JSDoc, - MethodDeclaration, - Node, - NodeArray, - ObjectBindingPattern, - ObjectLiteralElement, - ObjectLiteralExpression, - SourceFile, - StringLiteralLikeNode, - TypeElement, - VariableStatement, -} from "@typescript/typescript/unstable/ast"; -import { - getCombinedModifierFlags, - getNameOfDeclaration, - getTokenAtPosition, - isClassDeclaration, - isExternalModule, - isImportDeclaration, - isInterfaceDeclaration, - isJSDocLink, - isNamedImports, - isValidTypeOnlyAliasUseSite, - ModifierFlags, - NodeFlags, - SyntaxKind, - TokenFlags, -} from "@typescript/typescript/unstable/ast"; -import { - getSynthesizedDeepClone, - getSynthesizedDeepClones, -} from "@typescript/typescript/unstable/ast/clone"; -import { - cloneNode, - createBinaryExpression, - createBlock, - createExpressionStatement, - createFunctionDeclaration, - createIdentifier, - createIfStatement, - createMissingDeclaration, - createNodeArray, - createNumericLiteral, - createSourceFile, - createStringLiteral, - createToken, - NodeObject, -} from "@typescript/typescript/unstable/ast/factory"; -import { - visitEachChild, - visitNode, - visitNodes, -} from "@typescript/typescript/unstable/ast/visitor"; -import { - API, - Checker, - TypeFlags, -} from "@typescript/typescript/unstable/sync"; -import assert from "node:assert"; -import { - describe, - test, -} from "node:test"; -import { fileURLToPath } from "node:url"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "../testUtils.ts"; -import { runBenchmarks } from "./ast.bench.ts"; - -const concurrency = areTestsFiltered(); - -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -function collectKinds(node: Node): SyntaxKind[] { - const kinds: SyntaxKind[] = [node.kind]; - node.forEachChild(child => { - kinds.push(...collectKinds(child)); - return undefined; - }); - return kinds; -} - -describe("NodeObject + childrenIter", { concurrency }, () => { - test("skips absent optional child lists", () => { - const node = createMissingDeclaration(); - assert.deepStrictEqual([...node.childrenIter()], []); - }); -}); - -test("Benchmarks", async () => { - await runBenchmarks({ singleIteration: true }); -}); - -// --------------------------------------------------------------------------- -// cloneNode -// --------------------------------------------------------------------------- - -describe("cloneNode", { concurrency }, () => { - test("clones an identifier", () => { - const id = createIdentifier("hello"); - const clone = cloneNode(id); - - assert.notStrictEqual(clone, id); - assert.strictEqual(clone.kind, SyntaxKind.Identifier); - assert.strictEqual(clone.text, "hello"); - }); - - test("clones a numeric literal", () => { - const num = createNumericLiteral("42", TokenFlags.None); - const clone = cloneNode(num); - - assert.notStrictEqual(clone, num); - assert.strictEqual(clone.kind, SyntaxKind.NumericLiteral); - assert.strictEqual(clone.text, "42"); - assert.strictEqual(clone.tokenFlags, TokenFlags.None); - }); - - test("clones a string literal", () => { - const str = createStringLiteral("world", TokenFlags.None); - const clone = cloneNode(str); - - assert.notStrictEqual(clone, str); - assert.strictEqual(clone.kind, SyntaxKind.StringLiteral); - assert.strictEqual(clone.text, "world"); - }); - - test("preserves text range", () => { - // Synthesized nodes start at pos=-1,end=-1; verify clone preserves them - const id = createIdentifier("x"); - const clone = cloneNode(id); - - assert.strictEqual(clone.pos, id.pos); - assert.strictEqual(clone.end, id.end); - }); - - test("clone is shallow (children are shared)", () => { - const left = createIdentifier("a"); - const right = createIdentifier("b"); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - const clone = cloneNode(bin); - - assert.notStrictEqual(clone, bin); - assert.strictEqual(clone.left, bin.left); - assert.strictEqual(clone.right, bin.right); - assert.strictEqual(clone.operatorToken, bin.operatorToken); - }); - - test("clone has no parent", () => { - const id = createIdentifier("x"); - const clone = cloneNode(id); - assert.strictEqual(clone.parent, undefined); - }); - - test("clones a token", () => { - const tok = createToken(SyntaxKind.SemicolonToken); - const clone = cloneNode(tok); - - assert.notStrictEqual(clone, tok); - assert.strictEqual(clone.kind, SyntaxKind.SemicolonToken); - }); -}); - -// --------------------------------------------------------------------------- -// visitNode / visitNodes -// --------------------------------------------------------------------------- - -describe("visitNode", { concurrency }, () => { - test("returns undefined for undefined input", () => { - const nothing: Node | undefined = undefined; - const result = visitNode(nothing, () => undefined); - assert.strictEqual(result, undefined); - }); - - test("returns visitor result", () => { - const id = createIdentifier("x"); - const replacement = createIdentifier("y"); - const result = visitNode(id, () => replacement); - assert.strictEqual(result, replacement); - }); - - test("visitor can return undefined to remove node", () => { - const id = createIdentifier("x"); - const result = visitNode(id, () => undefined); - assert.strictEqual(result, undefined); - }); -}); - -describe("visitNodes", { concurrency }, () => { - test("returns undefined for undefined input", () => { - const nothing: NodeArray | undefined = undefined; - const result = visitNodes(nothing, () => undefined); - assert.strictEqual(result, undefined); - }); - - test("returns same array if nothing changed", () => { - const a = createIdentifier("a"); - const b = createIdentifier("b"); - const arr = createNodeArray([a, b]); - const result = visitNodes(arr, node => node); - assert.strictEqual(result, arr); - }); - - test("filters out undefined results", () => { - const a = createIdentifier("a"); - const b = createIdentifier("b"); - const arr = createNodeArray([a, b]); - const result = visitNodes(arr, node => { - if (node === a) return undefined; - return node; - }); - assert.strictEqual(result.length, 1); - }); - - test("replaces nodes", () => { - const a = createIdentifier("a"); - const b = createIdentifier("b"); - const c = createIdentifier("c"); - const arr = createNodeArray([a, b]); - const result = visitNodes(arr, node => { - if (node === a) return c; - return node; - }); - assert.strictEqual(result.length, 2); - assert.strictEqual(result.at(0), c); - assert.strictEqual(result.at(1), b); - }); -}); - -// --------------------------------------------------------------------------- -// visitEachChild -// --------------------------------------------------------------------------- - -describe("visitEachChild", { concurrency }, () => { - test("returns same node if nothing changed (identity visitor)", () => { - const left = createIdentifier("a"); - const right = createIdentifier("b"); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - - const result = visitEachChild(bin, node => node); - assert.strictEqual(result, bin); - }); - - test("returns undefined for undefined input", () => { - const nothing: Node | undefined = undefined; - const result = visitEachChild(nothing, node => node); - assert.strictEqual(result, undefined); - }); - - test("creates new node when child changes", () => { - const left = createIdentifier("a"); - const right = createIdentifier("b"); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - - const newRight = createIdentifier("c"); - const result = visitEachChild(bin, node => { - if (node === right) return newRight; - return node; - }); - - assert.notStrictEqual(result, bin); - assert.strictEqual(result.kind, SyntaxKind.BinaryExpression); - assert.strictEqual(result.left, left); - assert.strictEqual(result.right, newRight); - }); - - test("works on if statement with optional else", () => { - const cond = createIdentifier("ok"); - const thenBranch = createBlock([]); - const ifStmt = createIfStatement(cond, thenBranch, undefined); - - const newCond = createIdentifier("notOk"); - const result = visitEachChild(ifStmt, node => { - if (node === cond) return newCond; - return node; - }); - - assert.notStrictEqual(result, ifStmt); - assert.strictEqual(result.expression, newCond); - assert.strictEqual(result.thenStatement, thenBranch); - assert.strictEqual(result.elseStatement, undefined); - }); - - test("works on nodes with NodeArray children", () => { - const stmtA = createExpressionStatement(createIdentifier("a")); - const stmtB = createExpressionStatement(createIdentifier("b")); - const block = createBlock([stmtA, stmtB]); - - const stmtC = createExpressionStatement(createIdentifier("c")); - const result = visitEachChild(block, node => { - // visitEachChild visits immediate children (the expression statements) - if (node === stmtA) return stmtC; - return node; - }); - - assert.notStrictEqual(result, block); - assert.strictEqual(result.kind, SyntaxKind.Block); - assert.strictEqual(result.statements.length, 2); - assert.strictEqual(result.statements.at(0), stmtC); - assert.strictEqual(result.statements.at(1), stmtB); - }); - - test("returns same node for leaf nodes", () => { - const id = createIdentifier("x"); - const result = visitEachChild(id, () => { - throw new Error("should not be called for leaf node"); - }); - // Identifier has no children, so visitor shouldn't be called - assert.strictEqual(result, id); - }); -}); - -// --------------------------------------------------------------------------- -// getSynthesizedDeepClone -// --------------------------------------------------------------------------- - -describe("getSynthesizedDeepClone", { concurrency }, () => { - test("deeply clones identifier", () => { - const id = createIdentifier("hello"); - const clone = getSynthesizedDeepClone(id); - - assert.notStrictEqual(clone, id); - assert.strictEqual(clone.kind, SyntaxKind.Identifier); - assert.strictEqual(clone.text, "hello"); - }); - - test("deeply clones identifier without trivia", () => { - const id = createIdentifier("hello"); - const clone = getSynthesizedDeepClone(id, /*includeTrivia*/ false); - - assert.strictEqual(clone.kind, SyntaxKind.Identifier); - assert.strictEqual(clone.text, "hello"); - assert.strictEqual(clone.pos, -1); - assert.strictEqual(clone.end, -1); - }); - - test("deeply clones binary expression", () => { - const left = createIdentifier("a"); - const right = createNumericLiteral("42", TokenFlags.None); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - - const clone = getSynthesizedDeepClone(bin); - - // Root is different object - assert.notStrictEqual(clone, bin); - assert.strictEqual(clone.kind, SyntaxKind.BinaryExpression); - - // Children are also different objects (deep clone) - assert.notStrictEqual(clone.left, left); - assert.strictEqual(clone.left.kind, SyntaxKind.Identifier); - assert.strictEqual((clone.left as Identifier).text, "a"); - - assert.notStrictEqual(clone.right, right); - assert.strictEqual(clone.right.kind, SyntaxKind.NumericLiteral); - assert.strictEqual((clone.right as Identifier).text, "42"); - - assert.notStrictEqual(clone.operatorToken, op); - assert.strictEqual(clone.operatorToken.kind, SyntaxKind.PlusToken); - }); - - test("sets parent pointers on deep clone", () => { - const left = createIdentifier("a"); - const right = createIdentifier("b"); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - - const clone = getSynthesizedDeepClone(bin); - - assert.strictEqual(clone.left.parent, clone); - assert.strictEqual(clone.right.parent, clone); - assert.strictEqual(clone.operatorToken.parent, clone); - }); - - test("returns undefined for undefined input", () => { - const result = getSynthesizedDeepClone(undefined); - assert.strictEqual(result, undefined); - }); - - test("deeply clones if statement with optional else", () => { - const cond = createIdentifier("ok"); - const thenBlock = createBlock([]); - const ifStmt = createIfStatement(cond, thenBlock, undefined); - - const clone = getSynthesizedDeepClone(ifStmt); - - assert.notStrictEqual(clone, ifStmt); - assert.strictEqual(clone.kind, SyntaxKind.IfStatement); - assert.notStrictEqual(clone.expression, cond); - assert.strictEqual(clone.expression.kind, SyntaxKind.Identifier); - assert.notStrictEqual(clone.thenStatement, thenBlock); - assert.strictEqual(clone.thenStatement.kind, SyntaxKind.Block); - assert.strictEqual(clone.elseStatement, undefined); - }); - - test("preserves tree structure with nested children", () => { - const a = createIdentifier("a"); - const b = createIdentifier("b"); - const stmts = [ - createExpressionStatement(a), - createExpressionStatement(b), - ]; - const block = createBlock(stmts); - - const clone = getSynthesizedDeepClone(block); - - assert.notStrictEqual(clone, block); - assert.strictEqual(clone.statements.length, 2); - - const cloneStmt0 = clone.statements.at(0)!; - const cloneStmt1 = clone.statements.at(1)!; - assert.notStrictEqual(cloneStmt0, stmts[0]); - assert.notStrictEqual(cloneStmt1, stmts[1]); - assert.strictEqual(cloneStmt0.kind, SyntaxKind.ExpressionStatement); - assert.strictEqual(cloneStmt1.kind, SyntaxKind.ExpressionStatement); - }); - - test("deeply clones string literal", () => { - const str = createStringLiteral("test", TokenFlags.None); - const clone = getSynthesizedDeepClone(str); - assert.notStrictEqual(clone, str); - assert.strictEqual(clone.kind, SyntaxKind.StringLiteral); - assert.strictEqual(clone.text, "test"); - }); - - test("deeply clones numeric literal", () => { - const num = createNumericLiteral("3.14", TokenFlags.None); - const clone = getSynthesizedDeepClone(num); - assert.notStrictEqual(clone, num); - assert.strictEqual(clone.kind, SyntaxKind.NumericLiteral); - assert.strictEqual(clone.text, "3.14"); - }); - - test("clone has same syntax structure", () => { - const left = createIdentifier("x"); - const right = createNumericLiteral("1", TokenFlags.None); - const op = createToken(SyntaxKind.PlusToken); - const bin = createBinaryExpression(undefined, left, undefined, op, right); - const stmt = createExpressionStatement(bin); - - const clone = getSynthesizedDeepClone(stmt); - assert.deepStrictEqual(collectKinds(clone), collectKinds(stmt)); - }); -}); - -// --------------------------------------------------------------------------- -// getSynthesizedDeepClones (NodeArray) -// --------------------------------------------------------------------------- - -describe("getSynthesizedDeepClones", { concurrency }, () => { - test("deeply clones a NodeArray", () => { - const a = createIdentifier("a"); - const b = createIdentifier("b"); - const arr = createNodeArray([a, b]); - - const clone = getSynthesizedDeepClones(arr); - - assert.notStrictEqual(clone, arr); - assert.strictEqual(clone.length, 2); - assert.notStrictEqual(clone.at(0), a); - assert.notStrictEqual(clone.at(1), b); - assert.strictEqual(clone.at(0)!.kind, SyntaxKind.Identifier); - assert.strictEqual(clone.at(1)!.kind, SyntaxKind.Identifier); - }); - - test("returns undefined for undefined input", () => { - const result = getSynthesizedDeepClones(undefined); - assert.strictEqual(result, undefined); - }); - - test("preserves pos and end on NodeArray", () => { - const a = createIdentifier("a"); - const arr = createNodeArray([a], 5, 10); - - const clone = getSynthesizedDeepClones(arr); - assert.strictEqual(clone.pos, 5); - assert.strictEqual(clone.end, 10); - }); -}); - -// --------------------------------------------------------------------------- -// Type-only import use sites -// --------------------------------------------------------------------------- - -describe("isValidTypeOnlyAliasUseSite", { concurrency }, () => { - test("classifies syntactic type-only import use sites", () => { - const source = ` -type TypeUse = TypeOnlyName; -const valueUse = ValueName; -const shorthandUse = { ShorthandName }; -interface InterfaceUse extends InterfaceBase {} -class ImplementsUse implements ImplementsBase {} -class ExtendsUse extends ExtendsBase {} -abstract class AbstractComputed { - abstract [AbstractKey](): void; -} -interface InterfaceComputed { - [InterfaceKey]: string; -} -type TypeQueryUse = typeof TypeQueryName; -/** @link JSDocLinkBase#JSDocLinkMember */ -class JSDocLinkUse {} -/** @augments JSDocAugmentsBase */ -class JSDocAugmentsUse {} -`; - const api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": source, - }); - try { - const sourceFile = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const tokenAt = (text: string) => getTokenAtPosition(sourceFile, source.indexOf(text)); - - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("TypeOnlyName")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ValueName")), false); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ShorthandName")), false); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("InterfaceBase")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ImplementsBase")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ExtendsBase")), false); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("AbstractKey")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("InterfaceKey")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("TypeQueryName")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocLinkBase")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocLinkMember")), true); - assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocAugmentsBase")), true); - } - finally { - api.close(); - } - }); -}); - -// --------------------------------------------------------------------------- -// Integration: visitor transformation -// --------------------------------------------------------------------------- - -describe("visitor transformation", { concurrency }, () => { - test("rename all identifiers via recursive visitor", () => { - const a = createIdentifier("oldName"); - const b = createIdentifier("oldName"); - const stmtA = createExpressionStatement(a); - const stmtB = createExpressionStatement(b); - const block = createBlock([stmtA, stmtB]); - - // Use a recursive visitor to rename identifiers at any depth - function renameVisitor(node: Node): Node { - if (node.kind === SyntaxKind.Identifier && (node as Identifier).text === "oldName") { - return createIdentifier("newName"); - } - return visitEachChild(node, renameVisitor); - } - const result = visitEachChild(block, renameVisitor); - - assert.notStrictEqual(result, block); - const stmt0 = result.statements.at(0)! as ExpressionStatement; - assert.strictEqual((stmt0.expression as Identifier).text, "newName"); - const stmt1 = result.statements.at(1)! as ExpressionStatement; - assert.strictEqual((stmt1.expression as Identifier).text, "newName"); - }); - - test("deep clone + modify produces independent tree", () => { - const id = createIdentifier("original"); - const stmt = createExpressionStatement(id); - const block = createBlock([stmt]); - - // Deep clone - const cloned = getSynthesizedDeepClone(block); - - // Modify original using recursive visitor - function modVisitor(node: Node): Node { - if (node.kind === SyntaxKind.Identifier) return createIdentifier("modified"); - return visitEachChild(node, modVisitor); - } - const modified = visitEachChild(block, modVisitor); - - // Cloned tree should be untouched - const clonedStmt = cloned.statements.at(0)! as ExpressionStatement; - assert.strictEqual((clonedStmt.expression as Identifier).text, "original"); - - // Modified tree should have new name - const modifiedStmt = modified.statements.at(0)! as ExpressionStatement; - assert.strictEqual((modifiedStmt.expression as Identifier).text, "modified"); - }); -}); - -// --------------------------------------------------------------------------- -// RemoteNode: cloneNode, visitEachChild, getSynthesizedDeepClone -// --------------------------------------------------------------------------- - -function spawnAPI(files: Record = { - "/tsconfig.json": "{}", - "/src/index.ts": `import { foo } from './foo';\nconst x = foo + 1;\n`, - "/src/foo.ts": `export const foo = 42;`, -}) { - return new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - tsserverPath: fileURLToPath(new URL(`../../../../built/local/tsc${process.platform === "win32" ? ".exe" : ""}`, import.meta.url).toString()), - fs: createVirtualFileSystem(files), - }); -} - -function getRemoteSourceFileAndChecker(api: API, configPath: string, filePath: string) { - const snapshot = api.createSnapshot({ openProject: configPath }); - const project = snapshot.getConfiguredProject(configPath)!; - return [project.program.getSourceFile(filePath)!, project.checker] as const; -} - -function getRemoteSourceFile(api: API, configPath: string, filePath: string) { - return getRemoteSourceFileAndChecker(api, configPath, filePath)[0]; -} - -describe("declaration utilities", { concurrency }, () => { - test("isExternalModule distinguishes external modules from scripts and CommonJS", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, moduleDetection: "legacy" } }), - "/src/module.ts": "export const x = 1;", - "/src/import.ts": 'import { x } from "./module";', - "/src/script.ts": "const y = 1;", - "/src/commonjs.js": "module.exports = 1;", - }); - for ( - const [fileName, expected] of [ - ["module.ts", true], - ["import.ts", true], - ["script.ts", false], - ["commonjs.js", false], - ] as const - ) { - const sourceFile = getRemoteSourceFile(api, "/tsconfig.json", `/src/${fileName}`); - assert.strictEqual(isExternalModule(sourceFile), expected, fileName); - assert.strictEqual(isExternalModule(cloneNode(sourceFile)), expected, `cloned ${fileName}`); - } - }); - - test("getCombinedModifierFlags includes modifiers on factory nodes", () => { - const declaration = createFunctionDeclaration( - [createToken(SyntaxKind.ExportKeyword), createToken(SyntaxKind.AsyncKeyword)], - undefined, - createIdentifier("f"), - undefined, - [], - undefined, - createBlock([]), - ); - - assert.strictEqual( - getCombinedModifierFlags(declaration), - ModifierFlags.Export | ModifierFlags.Async, - ); - }); - - test("getCombinedModifierFlags includes variable statement flags for binding elements", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": "export const { x } = value;", - }); - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const statement = sf.statements[0] as VariableStatement; - const declaration = statement.declarationList.declarations[0]; - const binding = (declaration.name as ObjectBindingPattern).elements[0] as BindingElement; - - assert.strictEqual( - getCombinedModifierFlags(binding), - ModifierFlags.Export, - ); - }); - - test("element categories are named declarations", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": ` -class C { public member = 1; } -interface I { member?: number; } -const object = { member: 1 }; -`, - }); - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const classElement: ClassElement = (sf.statements[0] as ClassDeclaration).members[0]; - const typeElement: TypeElement = (sf.statements[1] as InterfaceDeclaration).members[0]; - const variable = sf.statements[2] as VariableStatement; - const objectLiteral = variable.declarationList.declarations[0].initializer as ObjectLiteralExpression; - const objectLiteralElement: ObjectLiteralElement = objectLiteral.properties[0]; - const declarations: readonly Declaration[] = [classElement, typeElement, objectLiteralElement]; - - assert.deepStrictEqual(declarations.map(declaration => getNameOfDeclaration(declaration)?.getText()), ["member", "member", "member"]); - assert.strictEqual(getCombinedModifierFlags(classElement), ModifierFlags.Public); - }); - - test("getNameOfDeclaration returns declared and assigned names", () => { - using api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": ` -function declared() {} -const assigned = class {}; -export default declared; -`, - }); - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const variable = sf.statements[1] as VariableStatement; - const classExpression = variable.declarationList.declarations[0].initializer!; - - assert.strictEqual(getNameOfDeclaration(sf.statements[0] as FunctionDeclaration)?.getText(), "declared"); - assert.strictEqual(getNameOfDeclaration(classExpression)?.getText(), "assigned"); - assert.strictEqual(getNameOfDeclaration(sf.statements[2] as ExportAssignment)?.getText(), "declared"); - assert.strictEqual(getNameOfDeclaration(undefined), undefined); - }); - - test("getNameOfDeclaration returns JavaScript assignment declaration names", () => { - using api = spawnAPI({ - "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true } }), - "/src/index.js": ` -exports.foo = () => {}; -Object.defineProperty(exports, "bar", { value: 1 }); -class C { #x; method() { this.#x = 1; } } -`, - }); - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.js"); - const assignment = (sf.statements[0] as ExpressionStatement).expression as BinaryExpression; - const defineProperty = (sf.statements[1] as ExpressionStatement).expression as CallExpression; - const classDeclaration = sf.statements[2] as ClassDeclaration; - const method = classDeclaration.members[1] as MethodDeclaration; - const privateAssignment = (method.body!.statements[0] as ExpressionStatement).expression as BinaryExpression; - - assert.strictEqual(getNameOfDeclaration(assignment)?.getText(), "foo"); - assert.strictEqual(getNameOfDeclaration(defineProperty)?.getText(), '"bar"'); - assert.strictEqual(getNameOfDeclaration(privateAssignment), privateAssignment.left); - }); -}); - -describe("RemoteNode + cloneNode", { concurrency }, () => { - test("does not read a sibling as an invalid JSDoc link name", () => { - const api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/index.ts": `/** - * {@link #toggled} property - */ -export const x = 1;`, - }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const jsDoc = sf.statements[0].jsDoc?.[0] as JSDoc | undefined; - assert.ok(jsDoc?.kind === SyntaxKind.JSDoc); - const comment = jsDoc.comment; - assert.ok(typeof comment !== "string"); - const link = comment?.[1]; - assert.ok(link && isJSDocLink(link)); - assert.strictEqual(link.name, undefined); - } - finally { - api.close(); - } - }); - - test("uses distinct nodes for expression and type heritage", () => { - const api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/heritage.ts": ` -class C extends Base implements Contract {} -interface I extends Parent {} -`, - }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/heritage.ts"); - const classDecl = sf.statements[0]; - const interfaceDecl = sf.statements[1]; - assert.ok(isClassDeclaration(classDecl)); - assert.ok(isInterfaceDeclaration(interfaceDecl)); - assert.strictEqual(classDecl.heritageClauses?.[0].types[0].kind, SyntaxKind.ExpressionWithTypeArguments); - assert.strictEqual(classDecl.heritageClauses?.[1].types[0].kind, SyntaxKind.TypeReference); - assert.strictEqual(interfaceDecl.heritageClauses?.[0].types[0].kind, SyntaxKind.TypeReference); - } - finally { - api.close(); - } - }); - - test("cloneNode produces a NodeObject from a RemoteNode", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); - const clone = cloneNode(sf); - assert.notStrictEqual(clone, sf); - assert.ok(clone instanceof NodeObject); - assert.strictEqual(clone.statements, sf.statements); - assert.strictEqual(clone.text, sf.text); - assert.strictEqual(clone.fileName, sf.fileName); - assert.strictEqual(clone.path, sf.path); - assert.strictEqual(clone.scriptKind, sf.scriptKind); - assert.strictEqual(clone.languageVariant, sf.languageVariant); - assert.strictEqual(clone.isDeclarationFile, sf.isDeclarationFile); - assert.strictEqual(clone.referencedFiles, sf.referencedFiles); - assert.strictEqual(clone.typeReferenceDirectives, sf.typeReferenceDirectives); - assert.strictEqual(clone.libReferenceDirectives, sf.libReferenceDirectives); - assert.strictEqual(clone.imports, sf.imports); - assert.strictEqual(clone.moduleAugmentations, sf.moduleAugmentations); - assert.strictEqual(clone.ambientModuleNames, sf.ambientModuleNames); - assert.strictEqual(clone.externalModuleIndicator, sf.externalModuleIndicator); - - assert.strictEqual(clone.kind, sf.kind); - assert.strictEqual(clone.pos, sf.pos); - assert.strictEqual(clone.end, sf.end); - } - finally { - api.close(); - } - }); - - test("cloneNode clones a remote import declaration", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const importDecl = sf.statements[0]; - assert.ok(isImportDeclaration(importDecl)); - - const clone = cloneNode(importDecl); - assert.notStrictEqual(clone, importDecl); - assert.strictEqual(clone.kind, SyntaxKind.ImportDeclaration); - // moduleSpecifier should be the same reference (shallow clone) - assert.ok(clone.moduleSpecifier); - } - finally { - api.close(); - } - }); - - test("cloneNode preserves text on remote identifier", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const importDecl = sf.statements[0]; - assert.ok(isImportDeclaration(importDecl)); - const named = importDecl.importClause?.namedBindings; - assert.ok(named && isNamedImports(named)); - const fooName = named.elements[0].name; - - const clone = cloneNode(fooName); - assert.strictEqual(clone.kind, SyntaxKind.Identifier); - assert.strictEqual((clone as Identifier).text, "foo"); - } - finally { - api.close(); - } - }); -}); - -describe("RemoteNode + visitEachChild", { concurrency }, () => { - test("identity visitor returns same remote node", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); - const firstStmt = sf.statements[0]; - assert.ok(firstStmt); - - // visitEachChild with identity should return the same node - const result = visitEachChild(firstStmt, node => node); - assert.strictEqual(result, firstStmt); - } - finally { - api.close(); - } - }); - - test("visitor can transform remote tree into NodeObject tree", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const importDecl = sf.statements[0]; - assert.ok(isImportDeclaration(importDecl)); - - // Replace the module specifier with a new string literal - const result = visitEachChild(importDecl, node => { - if (node.kind === SyntaxKind.StringLiteral) { - return createStringLiteral("./bar", TokenFlags.None); - } - return node; - }); - - assert.notStrictEqual(result, importDecl); - assert.strictEqual(result.kind, SyntaxKind.ImportDeclaration); - assert.strictEqual((result.moduleSpecifier as StringLiteralLikeNode).text, "./bar"); - } - finally { - api.close(); - } - }); -}); - -describe("RemoteNodeList inherited array methods", { concurrency }, () => { - test("filter/map/slice return plain arrays without throwing", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const statements = sf.statements; - assert.strictEqual(statements.length, 2); - - // These inherited Array methods previously threw - // "this.view.getUint32 is not a function" via ArraySpeciesCreate. - const filtered = statements.filter(() => true); - assert.ok(Array.isArray(filtered)); - assert.strictEqual(Object.getPrototypeOf(filtered), Array.prototype); - assert.strictEqual(filtered.length, 2); - assert.strictEqual(filtered[0], statements[0]); - - const mapped = statements.map(s => s.kind); - assert.ok(Array.isArray(mapped)); - assert.strictEqual(Object.getPrototypeOf(mapped), Array.prototype); - assert.deepStrictEqual(mapped, [statements[0].kind, statements[1].kind]); - - const sliced = statements.slice(1); - assert.ok(Array.isArray(sliced)); - assert.strictEqual(Object.getPrototypeOf(sliced), Array.prototype); - assert.strictEqual(sliced.length, 1); - assert.strictEqual(sliced[0], statements[1]); - } - finally { - api.close(); - } - }); -}); - -describe("RemoteNode + getSynthesizedDeepClone", { concurrency }, () => { - test("deep clones a remote import declaration", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); - const importDecl = sf.statements[0]; - assert.ok(isImportDeclaration(importDecl)); - - const clone = getSynthesizedDeepClone(importDecl); - - assert.notStrictEqual(clone, importDecl); - assert.strictEqual(clone.kind, SyntaxKind.ImportDeclaration); - // Deep clone — children should be different objects - assert.notStrictEqual(clone.moduleSpecifier, importDecl.moduleSpecifier); - assert.strictEqual(clone.moduleSpecifier.kind, SyntaxKind.StringLiteral); - } - finally { - api.close(); - } - }); - - test("deep clone of remote tree produces independent NodeObject tree", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); - const firstStmt = sf.statements[0]; - assert.ok(firstStmt); - - const clone = getSynthesizedDeepClone(firstStmt); - - // Clone should have all the same kinds as the original - assert.deepStrictEqual(collectKinds(clone), collectKinds(firstStmt)); - - // But be entirely separate objects - clone.forEachChild(function visit(node) { - assert.ok(node instanceof NodeObject); - node.forEachChild(visit); - }); - } - finally { - api.close(); - } - }); - - test("deep clone of remote SourceFile preserves top-level metadata references", () => { - const api = spawnAPI(); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); - const referencedFiles = sf.referencedFiles; - const typeReferenceDirectives = sf.typeReferenceDirectives; - const libReferenceDirectives = sf.libReferenceDirectives; - const imports = sf.imports; - const moduleAugmentations = sf.moduleAugmentations; - const ambientModuleNames = sf.ambientModuleNames; - - const clone = getSynthesizedDeepClone(sf); - - assert.notStrictEqual(clone, sf); - assert.strictEqual(clone.referencedFiles, referencedFiles); - assert.strictEqual(clone.typeReferenceDirectives, typeReferenceDirectives); - assert.strictEqual(clone.libReferenceDirectives, libReferenceDirectives); - assert.strictEqual(clone.imports, imports); - assert.strictEqual(clone.moduleAugmentations, moduleAugmentations); - assert.strictEqual(clone.ambientModuleNames, ambientModuleNames); - assert.strictEqual(clone.externalModuleIndicator, sf.externalModuleIndicator); - assert.strictEqual(clone.originalText, sf.originalText); - assert.strictEqual(clone.spanMap, sf.spanMap); - assert.strictEqual(clone.contentMapper, sf.contentMapper); - assert.strictEqual(clone.virtualFileName, sf.virtualFileName); - assert.strictEqual(clone.diagnosticDirectives, sf.diagnosticDirectives); - assert.strictEqual(clone.supplementalSourceFileNames, sf.supplementalSourceFileNames); - assert.strictEqual(clone.canonicalSourceFileName, sf.canonicalSourceFileName); - } - finally { - api.close(); - } - }); -}); - -// --------------------------------------------------------------------------- -// RemoteNode: position and text getters -// --------------------------------------------------------------------------- - -// Relationships that must hold between the position/text getters on any node. -function assertGetterInvariants(node: Node, sf: SourceFile) { - const fullStart = node.getFullStart(); - const start = node.getStart(sf); - const end = node.getEnd(); - - assert.strictEqual(fullStart, node.pos); - assert.strictEqual(end, node.end); - assert.ok(start >= fullStart, `getStart (${start}) must be >= getFullStart (${fullStart})`); - assert.ok(end >= start, `getEnd (${end}) must be >= getStart (${start})`); - - assert.strictEqual(node.getFullWidth(), end - fullStart); - assert.strictEqual(node.getWidth(sf), end - start); - assert.strictEqual(node.getLeadingTriviaWidth(sf), start - fullStart); - - const fullText = node.getFullText(sf); - const text = node.getText(sf); - assert.strictEqual(fullText.length, node.getFullWidth()); - assert.strictEqual(text, fullText.slice(node.getLeadingTriviaWidth(sf))); - - // No-argument variants resolve the source file themselves and must agree. - assert.strictEqual(node.getStart(), start); - assert.strictEqual(node.getFullText(), fullText); - assert.strictEqual(node.getText(), text); - - node.forEachChild(child => { - assertGetterInvariants(child, sf); - return undefined; - }); -} - -describe("RemoteNode + position/text getters", { concurrency }, () => { - const source = "/* lead */ const value = 123;"; - const files = { - "/tsconfig.json": "{}", - "/src/getters.ts": source, - }; - - test("position and text getters on a parsed statement", () => { - const api = spawnAPI(files); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/getters.ts"); - const stmt = sf.statements[0]; - assert.ok(stmt); - - const tokenStart = source.indexOf("const"); - - // Full start includes leading trivia; start skips it. - assert.strictEqual(stmt.getFullStart(), 0); - assert.strictEqual(stmt.getStart(), tokenStart); - assert.strictEqual(stmt.getStart(sf), tokenStart); - assert.strictEqual(stmt.getLeadingTriviaWidth(), tokenStart); - - // End and widths. - assert.strictEqual(stmt.getEnd(), source.length); - assert.strictEqual(stmt.getFullWidth(), source.length); - assert.strictEqual(stmt.getWidth(), source.length - tokenStart); - - // Text slices, with and without leading trivia. - assert.strictEqual(stmt.getFullText(), source); - assert.strictEqual(stmt.getText(), source.slice(tokenStart)); - } - finally { - api.close(); - } - }); - - test("getText/getFullText on a nested node", () => { - const api = spawnAPI(files); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/getters.ts"); - const stmt = sf.statements[0] as VariableStatement; - const name = stmt.declarationList.declarations[0].name; - - assert.strictEqual(name.getText(), "value"); - // getFullText keeps the leading whitespace trivia before the identifier. - assert.strictEqual(name.getFullText().trimStart(), "value"); - assert.ok(name.getFullText().endsWith("value")); - } - finally { - api.close(); - } - }); - - test("getStart can include leading JSDoc comments", () => { - const docSource = "/** doc */\nfunction f() {}\n"; - const api = spawnAPI({ - "/tsconfig.json": "{}", - "/src/doc.ts": docSource, - }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/doc.ts"); - const fn = sf.statements[0]; - assert.ok(fn); - - // By default the JSDoc comment is treated as leading trivia and skipped. - assert.strictEqual(fn.getStart(), docSource.indexOf("function")); - - // With includeJsDocComment, the start moves back to the JSDoc comment. - assert.ok(fn.jsDoc && fn.jsDoc.length > 0, "function declaration should have attached JSDoc"); - assert.strictEqual(fn.getStart(sf, /*includeJsDocComment*/ true), 0); - } - finally { - api.close(); - } - }); - - test("a node without leading trivia has zero leading trivia width", () => { - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/plain.ts": "const x = 1;\n" }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/plain.ts"); - const stmt = sf.statements[0]; - assert.ok(stmt); - - assert.strictEqual(stmt.getFullStart(), 0); - assert.strictEqual(stmt.getStart(), 0); - assert.strictEqual(stmt.getLeadingTriviaWidth(), 0); - assert.strictEqual(stmt.getText(), "const x = 1;"); - assert.strictEqual(stmt.getText(), stmt.getFullText()); - } - finally { - api.close(); - } - }); - - test("the SourceFile node spans the whole file text", () => { - const text = "/* head */ const y = 2;\n"; - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/whole.ts": text }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/whole.ts"); - - assert.strictEqual(sf.getFullStart(), 0); - assert.strictEqual(sf.getFullText(), sf.text); - assert.strictEqual(sf.getEnd(), sf.text.length); - // getStart skips the file's leading comment trivia. - assert.strictEqual(sf.getStart(), text.indexOf("const")); - } - finally { - api.close(); - } - }); - - test("getter invariants hold for every node in a representative tree", () => { - const treeSource = [ - `import { foo } from "./foo";`, - ``, - `/** docs */`, - `export function add(a: number, b: number): number {`, - ` // body comment`, - ` return a + b;`, - `}`, - ``, - `const obj = { x: 1, y: "two" };`, - ``, - ].join("\n"); - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/tree.ts": treeSource }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/tree.ts"); - assertGetterInvariants(sf, sf); - } - finally { - api.close(); - } - }); - - test("getter invariants hold even for malformed source with missing nodes", () => { - // Error recovery produces zero-width / missing nodes; the getters must - // still satisfy their invariants and must not throw. - const malformed = "const a = b +;\nfunction ("; - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/broken.ts": malformed }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/broken.ts"); - assertGetterInvariants(sf, sf); - } - finally { - api.close(); - } - }); -}); - -// --------------------------------------------------------------------------- -// RemoteNode: child/token getters -// --------------------------------------------------------------------------- - -describe("RemoteNode + child/token getters", { concurrency }, () => { - function withFirstStatement(source: string, fn: (stmt: Node, sf: SourceFile) => void) { - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/children.ts": source }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/children.ts"); - fn(sf.statements[0], sf); - } - finally { - api.close(); - } - } - - async function withFirstStatementAsync(source: string, fn: (stmt: Node, sf: SourceFile, api: API, checker: Checker) => Promise) { - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/children.ts": source }); - try { - const [sf, checker] = getRemoteSourceFileAndChecker(api, "/tsconfig.json", "/src/children.ts"); - await fn(sf.statements[0], sf, api, checker); - } - finally { - api.close(); - } - } - - function findFirstOfKind(node: Node, kind: SyntaxKind): Node | undefined { - let found: Node | undefined; - const walk = (n: Node): undefined => { - if (found) return; - if (n.kind === kind) { - found = n; - return; - } - n.forEachChild(walk); - }; - walk(node); - return found; - } - - test("childrenIter generates all node children and supports early return value passthru", () => { - withFirstStatement("if (x) {}", stmt => { - const texts: string[] = []; - for (const c of stmt.childrenIter()) { - texts.push(c.getText()); - } - assert.deepStrictEqual(texts, ["x", "{}"]); - const cGen = stmt.childrenIter(); - let state = cGen.next(); - while (!state.done) { - const n = state.value; - let foundX: Node | undefined; - if (n.getText() === "x") { - foundX = n; - } - state = cGen.next(foundX); - } - assert.strictEqual( - state.value, - stmt.forEachChild(n => { - return n; - }), - ); - }); - }); - - test("childrenIter works with async generators", async () => { - await withFirstStatementAsync("class X { p: any }", async (stmt, sf, api, checker) => { - async function* visitNodeForFirstAnyChild(node: Node): AsyncGenerator { - for (const n of node.childrenIter()) { - const t = await checker.getTypeAtLocation(n); - if (t.flags & TypeFlags.Any) return n; - const res = yield* visitNodeForFirstAnyChild(n); - if (res) return res; - } - } - const res = (await visitNodeForFirstAnyChild(stmt).next()).value; - assert.strictEqual(res!.getText(), "p: any"); - }); - }); - - test("childrenIter skips empty NodeArrays", () => { - withFirstStatement("function f() {}", stmt => { - const body = findFirstOfKind(stmt, SyntaxKind.Block)!; - assert.deepStrictEqual([...body.childrenIter()], []); - }); - }); - - test("getChildren materializes the punctuation/keyword tokens the AST omits", () => { - withFirstStatement("if (x) {}", stmt => { - const texts = stmt.getChildren().map(c => c.getText()); - assert.deepStrictEqual(texts, ["if", "(", "x", ")", "{}"]); - }); - }); - - test("getChildCount and getChildAt agree with getChildren", () => { - withFirstStatement("if (x) {}", stmt => { - const children = stmt.getChildren(); - assert.strictEqual(stmt.getChildCount(), children.length); - for (let i = 0; i < children.length; i++) { - assert.strictEqual(stmt.getChildAt(i), children[i]); - } - }); - }); - - test("getFirstToken and getLastToken descend to the edge tokens", () => { - withFirstStatement("if (x) {}", stmt => { - assert.strictEqual(stmt.getFirstToken()?.getText(), "if"); - assert.strictEqual(stmt.getLastToken()?.getText(), "}"); - }); - }); - - test("a token node has no children and no first/last token", () => { - withFirstStatement("if (x) {}", stmt => { - const ifToken = stmt.getFirstToken()!; - assert.strictEqual(ifToken.getChildCount(), 0); - assert.deepStrictEqual(ifToken.getChildren(), []); - assert.strictEqual(ifToken.getFirstToken(), undefined); - assert.strictEqual(ifToken.getLastToken(), undefined); - }); - }); - - test("NodeArrays are wrapped in a SyntaxList that holds the elements and separators", () => { - withFirstStatement("[1, 2, 3];", stmt => { - const arr = findFirstOfKind(stmt, SyntaxKind.ArrayLiteralExpression)!; - assert.ok(arr, "expected an array literal"); - const list = arr.getChildren().find(c => c.kind === SyntaxKind.SyntaxList); - assert.ok(list, "array literal children should include a SyntaxList"); - assert.deepStrictEqual(list!.getChildren().map(c => c.getText()), ["1", ",", "2", ",", "3"]); - }); - }); - - test("getChildren tiles [pos, end) contiguously, absorbing interior trivia into tokens", () => { - // The interior comment must be absorbed into a token's leading trivia, not dropped. - withFirstStatement("const a = /* c */ 1;", (stmt, sf) => { - const children = stmt.getChildren(); - assert.ok(children.length > 0); - assert.strictEqual(children[0].pos, stmt.pos); - assert.strictEqual(children[children.length - 1].end, stmt.end); - for (let i = 1; i < children.length; i++) { - assert.strictEqual(children[i].pos, children[i - 1].end, "children must be contiguous"); - } - assert.strictEqual(children.map(c => c.getFullText(sf)).join(""), stmt.getFullText(sf)); - }); - }); - - test("a JSDoc comment is exposed as the first child", () => { - // Per tsc, the JSDoc is both its own child node and the leading trivia of the first token. - withFirstStatement("/** doc */\nfunction f() {}", stmt => { - const first = stmt.getChildren()[0]; - assert.strictEqual(first.kind, SyntaxKind.JSDoc); - assert.strictEqual(first.getText().trim(), "/** doc */"); - }); - }); - - test("getChildren throws on a synthesized node without a real position", () => { - const synthesized = createBlock([]); // a non-token node with pos/end === -1 - assert.throws(() => synthesized.getChildren(), /real position/); - }); - - test("the else keyword is materialized as a synthetic token", () => { - withFirstStatement("if (a) {} else {}", stmt => { - const texts = stmt.getChildren().map(c => c.getText()); - assert.ok(texts.includes("else"), `expected an 'else' token, got ${JSON.stringify(texts)}`); - }); - }); - - test("getFirstToken skips leading JSDoc and returns the first real token", () => { - withFirstStatement("/** d */ export function f() {}", stmt => { - const first = stmt.getFirstToken()!; - assert.ok( - first.kind < SyntaxKind.FirstJSDocNode || first.kind > SyntaxKind.LastJSDocNode, - "getFirstToken should skip the JSDoc node", - ); - assert.strictEqual(first.getText(), "export"); - }); - }); - - test("SourceFile children are the statements SyntaxList and the EndOfFile token", () => { - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/eof.ts": "const x = 1;\n" }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/eof.ts"); - const children = sf.getChildren(); - assert.ok(children.some(c => c.kind === SyntaxKind.SyntaxList), "should contain a statements SyntaxList"); - assert.strictEqual(children[children.length - 1].kind, SyntaxKind.EndOfFile); - assert.strictEqual(sf.getLastToken()?.kind, SyntaxKind.EndOfFile); - } - finally { - api.close(); - } - }); - - test("getChildren is cached: repeat calls return the same array", () => { - withFirstStatement("const x = 1;", stmt => { - assert.strictEqual(stmt.getChildren(), stmt.getChildren()); - }); - }); - - test("getChildren on an EndOfFile token carrying JSDoc is cached", () => { - // A trailing orphan JSDoc attaches to the EndOfFile token; remote nodes rebuild - // .jsDoc on every access, so this only holds if the EndOfFile branch is cached too. - const api = spawnAPI({ "/tsconfig.json": "{}", "/src/eof.ts": "const x = 1;\n/** orphan */" }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/eof.ts"); - const eof = sf.getLastToken()!; - assert.strictEqual(eof.kind, SyntaxKind.EndOfFile); - const children = eof.getChildren(sf); - assert.strictEqual(children.length, 1); - assert.strictEqual(children[0].kind, SyntaxKind.JSDoc); - assert.strictEqual(eof.getChildren(sf), children, "EndOfFile children should be cached"); - assert.strictEqual(eof.getChildAt(0, sf), children[0]); - } - finally { - api.close(); - } - }); - - const isJsDocKind = (n: Node) => n.kind >= SyntaxKind.FirstJSDocNode && n.kind <= SyntaxKind.LastJSDocNode; - - // Recursively asserts getChildren's invariants at every node: count/at agreement, caching, - // first/last token correctness, and contiguous tiling of [pos, end). - function assertChildInvariants(root: Node, sf: SourceFile): void { - const visit = (node: Node): void => { - const children = node.getChildren(sf); - - // Reparsed subtrees (JSDoc types materialized into the AST) must never surface: - // their positions point inside the comment, not into the parent's token range. - for (const child of children) { - assert.ok(!(child.flags & NodeFlags.Reparsed), `reparsed child leaked (kind ${child.kind} in kind ${node.kind})`); - } - - assert.strictEqual(node.getChildCount(sf), children.length); - for (let i = 0; i < children.length; i++) { - assert.strictEqual(node.getChildAt(i, sf), children[i]); - } - assert.strictEqual(node.getChildAt(children.length, sf), undefined); - assert.strictEqual(node.getChildren(sf), children, "getChildren should be cached"); - - // JSDoc nodes don't synthesize tokens, so the token/tiling invariants don't apply. - if (children.length > 0 && !isJsDocKind(node)) { - // first/last token can be undefined when an edge child is an empty list (e.g. an - // empty `case` clause) — same as tsc; when defined they must be aligned tokens. - const first = node.getFirstToken(sf); - const last = node.getLastToken(sf); - if (first) { - assert.ok(first.kind < SyntaxKind.FirstNode, `getFirstToken must be a token (kind ${node.kind})`); - assert.strictEqual(first.getStart(sf), node.getStart(sf), `firstToken start mismatch (kind ${node.kind})`); - } - if (last) { - assert.ok(last.kind < SyntaxKind.FirstNode, `getLastToken must be a token (kind ${node.kind})`); - assert.strictEqual(last.end, node.end, `lastToken end mismatch (kind ${node.kind})`); - } - - assert.strictEqual(children[0].pos, node.pos, `first child pos mismatch (kind ${node.kind})`); - assert.strictEqual(children[children.length - 1].end, node.end, `last child end mismatch (kind ${node.kind})`); - for (let i = 1; i < children.length; i++) { - if (isJsDocKind(children[i - 1])) continue; - assert.strictEqual(children[i].pos, children[i - 1].end, `gap/overlap between children (kind ${node.kind})`); - } - } - - for (const child of children) { - if (!isJsDocKind(child)) { - visit(child); - } - } - }; - visit(root); - } - - function checkSource(source: string, opts?: { jsx?: boolean; js?: boolean; }): void { - const ext = opts?.js ? (opts?.jsx ? "jsx" : "js") : opts?.jsx ? "tsx" : "ts"; - const tsconfig = opts?.js ? `{ "compilerOptions": { "allowJs": true, "checkJs": true, "jsx": "react-jsx" } }` - : opts?.jsx ? `{ "compilerOptions": { "jsx": "react-jsx" } }` - : "{}"; - const api = spawnAPI({ "/tsconfig.json": tsconfig, [`/src/c.${ext}`]: source }); - try { - const sf = getRemoteSourceFile(api, "/tsconfig.json", `/src/c.${ext}`); - assertChildInvariants(sf, sf); - } - finally { - api.close(); - } - } - - test("structural invariants hold recursively across a rich tree", () => { - checkSource([ - "/** docs */", - "export function greet(name: string, count = 1): string {", - " const parts: string[] = [];", - " for (let i = 0; i < count; i++) {", - " parts.push(`hi ${name}`);", - " }", - " if (parts.length) {", - ' return parts.join(", ");', - " }", - " else {", - ' return "none";', - " }", - "}", - "", - ].join("\n")); - }); - - // Representative constructs, each exercising a distinct structural path of getChildren - // (token synthesis, SyntaxList wrapping, empty lists, decorator lists, JSDoc, JSX, nesting). - const corpus: Array<{ name: string; source: string; jsx?: boolean; js?: boolean; }> = [ - { name: "variable declarations", source: "const a = 1; let b: number = 2; var c, d = 3;" }, - { name: "function with optional, default and rest params", source: "function f(a: number, b?: string, c = 1, ...d: any[]): void {}" }, - { name: "class with members", source: "class C { x = 1; #y = 2; static s = 3; readonly r: string; constructor(public p: number) {} m() {} get g() { return 1; } set v(x) {} static {} }" }, - { name: "class with decorators", source: "@dec class C { @prop x = 1; @meth() m(@param p: number) {} accessor a = 1; }" }, - { name: "interface with signature members", source: "interface I extends A, B { x: number; y?: string; readonly z: boolean; (a: number): void; new (): I; [k: string]: any; m(p: number): void; }" }, - { name: "generics with constraints and defaults", source: "function f(x: T): U { return x as any; }\nclass C {}" }, - { name: "enums", source: "enum E { A, B = 2, C = A | B } const enum CE { X = 'x', Y = 'y' }" }, - { name: "import declarations", source: "import d from 'a';\nimport { x, y as z } from 'b';\nimport * as ns from 'c';\nimport type { T } from 'd';\nimport 'e';\nimport def, { named } from 'f';" }, - { name: "if/else chains", source: "if (a) { x(); } else if (b) { y(); } else { z(); }" }, - { name: "for variants", source: "for (let i = 0; i < n; i++) {} for (const k in o) {} for (const v of a) {} for (;;) { break; }" }, - { name: "switch with an empty case clause", source: "switch (x) { case 1: y(); break; case 2: case 3: z(); default: w(); }" }, - { name: "object literal with all member kinds", source: "const o = { a: 1, b, [c]: 2, ...d, m() {}, get g() { return 1; }, set s(v) {}, async am() {}, *gm() {} };" }, - { name: "tagged and nested template literals", source: "const r = tag`a${b}c${`inner${d}`}e`;" }, - { name: "comments and jsdoc with tags", source: "// line\n/* block */\n/**\n * @param a the a\n * @returns nothing\n */\nfunction f(a: number) {} // trailing" }, - { name: "empty constructs", source: "function f() {} class C {} interface I {} enum E {} { } ; namespace N {}" }, - { name: "JSX element with attributes and children", source: 'const e =
hello {name}
;', jsx: true }, - // Reparsed JSDoc types in .js files must not surface as children: their positions - // point inside the comment, not into the parent's token range. Each entry stresses a - // different reparse shape (single nodes, whole NodeArrays, mixed arrays, statements). - { name: "JS with reparsed @param/@returns types", source: "/**\n * @param {number} a the a\n * @returns {string} something\n */\nfunction f(a) { return String(a); }\n", js: true }, - { name: "JS with @type, @template and reparsed type parameters", source: "/** @type {number} */\nconst n = 1;\n/**\n * @template T\n * @param {T} x\n */\nfunction id(x) { return x; }\n", js: true }, - { name: "JS with optional, default and rest @param variants", source: '/**\n * @param {number} [a]\n * @param {string} [b="x"]\n * @param {...number} rest\n */\nfunction f(a, b, ...rest) {}\n', js: true }, - { name: "JS with a @type cast on a parenthesized expression", source: "function g() { return 1; }\nconst x = /** @type {number} */ (g());\n", js: true }, - { name: "JS with @typedef and @property hoisted into statements", source: "/**\n * @typedef {Object} Pt\n * @property {number} x\n * @property {number} y\n */\nconst p = { x: 1, y: 2 };\n", js: true }, - { name: "JS with @callback", source: "/**\n * @callback Cb\n * @param {number} n\n * @returns {void}\n */\nlet cb;\n", js: true }, - { name: "JS with constrained and multiple @template tags", source: "/**\n * @template {object} T\n * @template U\n * @param {T} a\n * @param {U} b\n */\nfunction pair(a, b) { return [a, b]; }\n", js: true }, - { name: "JS with @this inserted into the parameter list", source: "/**\n * @this {object}\n * @param {number} n\n */\nfunction handler(n) { return this; }\n", js: true }, - { name: "JS class with @extends type arguments and member tags", source: "class Base {}\n/** @extends {Base} */\nclass C extends Base {\n /** @param {number} v */\n constructor(v) { super(); this.v = v; }\n /** @returns {number} */\n get value() { return this.v; }\n}\n", js: true }, - { name: "JS with @enum", source: "/** @enum {number} */\nconst E = { A: 1, B: 2 };\n", js: true }, - { name: "JS with trailing orphan @typedef attached to EndOfFile", source: "let x = 1;\n/** @typedef {number} N */", js: true }, - { name: "JS with @satisfies", source: "/** @satisfies {{ a: number }} */\nconst o = { a: 1 };\n", js: true }, - { name: "JS with @import declaration", source: '/** @import { T } from "./t" */\n/** @type {number} */\nlet v = 1;\n', js: true }, - { name: "JS with reparsed types on exported and nested functions", source: "/** @param {number} a */\nexport function outer(a) {\n /** @returns {number} */\n function inner() { return a; }\n return inner();\n}\n", js: true }, - { name: "JSX component with reparsed @param props type", source: '/**\n * @param {{ name: string }} props\n * @returns {object}\n */\nexport function Greeting(props) {\n return
hello {props.name}
;\n}\n', js: true, jsx: true }, - { name: "JSX with @type cast and @typedef around elements", source: '/**\n * @typedef {Object} Item\n * @property {string} label\n */\nconst item = /** @type {Item} */ ({ label: "x" });\nconst el = {item.label};\n', js: true, jsx: true }, - ]; - - for (const entry of corpus) { - test(`invariants: ${entry.name}`, () => { - checkSource(entry.source, { jsx: entry.jsx ?? false, js: entry.js ?? false }); - }); - } -}); +import type { + BinaryExpression, + BindingElement, + CallExpression, + ClassDeclaration, + ClassElement, + Declaration, + ExportAssignment, + ExpressionStatement, + FunctionDeclaration, + Identifier, + InterfaceDeclaration, + JSDoc, + MethodDeclaration, + Node, + NodeArray, + ObjectBindingPattern, + ObjectLiteralElement, + ObjectLiteralExpression, + SourceFile, + StringLiteralLikeNode, + TypeElement, + VariableStatement, +} from "@typescript/typescript/unstable/ast"; +import { + getCombinedModifierFlags, + getNameOfDeclaration, + getTokenAtPosition, + isClassDeclaration, + isExternalModule, + isImportDeclaration, + isInterfaceDeclaration, + isJSDocLink, + isNamedImports, + isValidTypeOnlyAliasUseSite, + ModifierFlags, + NodeFlags, + SyntaxKind, + TokenFlags, +} from "@typescript/typescript/unstable/ast"; +import { + getSynthesizedDeepClone, + getSynthesizedDeepClones, +} from "@typescript/typescript/unstable/ast/clone"; +import { + cloneNode, + createBinaryExpression, + createBlock, + createExpressionStatement, + createFunctionDeclaration, + createIdentifier, + createIfStatement, + createMissingDeclaration, + createNodeArray, + createNumericLiteral, + createSourceFile, + createStringLiteral, + createToken, + NodeObject, +} from "@typescript/typescript/unstable/ast/factory"; +import { + visitEachChild, + visitNode, + visitNodes, +} from "@typescript/typescript/unstable/ast/visitor"; +import { + API, + Checker, + TypeFlags, +} from "@typescript/typescript/unstable/sync"; +import assert from "node:assert"; +import { + describe, + test, +} from "node:test"; +import { fileURLToPath } from "node:url"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "../testUtils.ts"; +import { runBenchmarks } from "./ast.bench.ts"; + +const concurrency = areTestsFiltered(); + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +function collectKinds(node: Node): SyntaxKind[] { + const kinds: SyntaxKind[] = [node.kind]; + node.forEachChild(child => { + kinds.push(...collectKinds(child)); + return undefined; + }); + return kinds; +} + +describe("NodeObject + childrenIter", { concurrency }, () => { + test("skips absent optional child lists", () => { + const node = createMissingDeclaration(); + assert.deepStrictEqual([...node.childrenIter()], []); + }); +}); + +test("Benchmarks", async () => { + await runBenchmarks({ singleIteration: true }); +}); + +// --------------------------------------------------------------------------- +// cloneNode +// --------------------------------------------------------------------------- + +describe("cloneNode", { concurrency }, () => { + test("clones an identifier", () => { + const id = createIdentifier("hello"); + const clone = cloneNode(id); + + assert.notStrictEqual(clone, id); + assert.strictEqual(clone.kind, SyntaxKind.Identifier); + assert.strictEqual(clone.text, "hello"); + }); + + test("clones a numeric literal", () => { + const num = createNumericLiteral("42", TokenFlags.None); + const clone = cloneNode(num); + + assert.notStrictEqual(clone, num); + assert.strictEqual(clone.kind, SyntaxKind.NumericLiteral); + assert.strictEqual(clone.text, "42"); + assert.strictEqual(clone.tokenFlags, TokenFlags.None); + }); + + test("clones a string literal", () => { + const str = createStringLiteral("world", TokenFlags.None); + const clone = cloneNode(str); + + assert.notStrictEqual(clone, str); + assert.strictEqual(clone.kind, SyntaxKind.StringLiteral); + assert.strictEqual(clone.text, "world"); + }); + + test("preserves text range", () => { + // Synthesized nodes start at pos=-1,end=-1; verify clone preserves them + const id = createIdentifier("x"); + const clone = cloneNode(id); + + assert.strictEqual(clone.pos, id.pos); + assert.strictEqual(clone.end, id.end); + }); + + test("clone is shallow (children are shared)", () => { + const left = createIdentifier("a"); + const right = createIdentifier("b"); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + const clone = cloneNode(bin); + + assert.notStrictEqual(clone, bin); + assert.strictEqual(clone.left, bin.left); + assert.strictEqual(clone.right, bin.right); + assert.strictEqual(clone.operatorToken, bin.operatorToken); + }); + + test("clone has no parent", () => { + const id = createIdentifier("x"); + const clone = cloneNode(id); + assert.strictEqual(clone.parent, undefined); + }); + + test("clones a token", () => { + const tok = createToken(SyntaxKind.SemicolonToken); + const clone = cloneNode(tok); + + assert.notStrictEqual(clone, tok); + assert.strictEqual(clone.kind, SyntaxKind.SemicolonToken); + }); +}); + +// --------------------------------------------------------------------------- +// visitNode / visitNodes +// --------------------------------------------------------------------------- + +describe("visitNode", { concurrency }, () => { + test("returns undefined for undefined input", () => { + const nothing: Node | undefined = undefined; + const result = visitNode(nothing, () => undefined); + assert.strictEqual(result, undefined); + }); + + test("returns visitor result", () => { + const id = createIdentifier("x"); + const replacement = createIdentifier("y"); + const result = visitNode(id, () => replacement); + assert.strictEqual(result, replacement); + }); + + test("visitor can return undefined to remove node", () => { + const id = createIdentifier("x"); + const result = visitNode(id, () => undefined); + assert.strictEqual(result, undefined); + }); +}); + +describe("visitNodes", { concurrency }, () => { + test("returns undefined for undefined input", () => { + const nothing: NodeArray | undefined = undefined; + const result = visitNodes(nothing, () => undefined); + assert.strictEqual(result, undefined); + }); + + test("returns same array if nothing changed", () => { + const a = createIdentifier("a"); + const b = createIdentifier("b"); + const arr = createNodeArray([a, b]); + const result = visitNodes(arr, node => node); + assert.strictEqual(result, arr); + }); + + test("filters out undefined results", () => { + const a = createIdentifier("a"); + const b = createIdentifier("b"); + const arr = createNodeArray([a, b]); + const result = visitNodes(arr, node => { + if (node === a) return undefined; + return node; + }); + assert.strictEqual(result.length, 1); + }); + + test("replaces nodes", () => { + const a = createIdentifier("a"); + const b = createIdentifier("b"); + const c = createIdentifier("c"); + const arr = createNodeArray([a, b]); + const result = visitNodes(arr, node => { + if (node === a) return c; + return node; + }); + assert.strictEqual(result.length, 2); + assert.strictEqual(result.at(0), c); + assert.strictEqual(result.at(1), b); + }); +}); + +// --------------------------------------------------------------------------- +// visitEachChild +// --------------------------------------------------------------------------- + +describe("visitEachChild", { concurrency }, () => { + test("returns same node if nothing changed (identity visitor)", () => { + const left = createIdentifier("a"); + const right = createIdentifier("b"); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + + const result = visitEachChild(bin, node => node); + assert.strictEqual(result, bin); + }); + + test("returns undefined for undefined input", () => { + const nothing: Node | undefined = undefined; + const result = visitEachChild(nothing, node => node); + assert.strictEqual(result, undefined); + }); + + test("creates new node when child changes", () => { + const left = createIdentifier("a"); + const right = createIdentifier("b"); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + + const newRight = createIdentifier("c"); + const result = visitEachChild(bin, node => { + if (node === right) return newRight; + return node; + }); + + assert.notStrictEqual(result, bin); + assert.strictEqual(result.kind, SyntaxKind.BinaryExpression); + assert.strictEqual(result.left, left); + assert.strictEqual(result.right, newRight); + }); + + test("works on if statement with optional else", () => { + const cond = createIdentifier("ok"); + const thenBranch = createBlock([]); + const ifStmt = createIfStatement(cond, thenBranch, undefined); + + const newCond = createIdentifier("notOk"); + const result = visitEachChild(ifStmt, node => { + if (node === cond) return newCond; + return node; + }); + + assert.notStrictEqual(result, ifStmt); + assert.strictEqual(result.expression, newCond); + assert.strictEqual(result.thenStatement, thenBranch); + assert.strictEqual(result.elseStatement, undefined); + }); + + test("works on nodes with NodeArray children", () => { + const stmtA = createExpressionStatement(createIdentifier("a")); + const stmtB = createExpressionStatement(createIdentifier("b")); + const block = createBlock([stmtA, stmtB]); + + const stmtC = createExpressionStatement(createIdentifier("c")); + const result = visitEachChild(block, node => { + // visitEachChild visits immediate children (the expression statements) + if (node === stmtA) return stmtC; + return node; + }); + + assert.notStrictEqual(result, block); + assert.strictEqual(result.kind, SyntaxKind.Block); + assert.strictEqual(result.statements.length, 2); + assert.strictEqual(result.statements.at(0), stmtC); + assert.strictEqual(result.statements.at(1), stmtB); + }); + + test("returns same node for leaf nodes", () => { + const id = createIdentifier("x"); + const result = visitEachChild(id, () => { + throw new Error("should not be called for leaf node"); + }); + // Identifier has no children, so visitor shouldn't be called + assert.strictEqual(result, id); + }); +}); + +// --------------------------------------------------------------------------- +// getSynthesizedDeepClone +// --------------------------------------------------------------------------- + +describe("getSynthesizedDeepClone", { concurrency }, () => { + test("deeply clones identifier", () => { + const id = createIdentifier("hello"); + const clone = getSynthesizedDeepClone(id); + + assert.notStrictEqual(clone, id); + assert.strictEqual(clone.kind, SyntaxKind.Identifier); + assert.strictEqual(clone.text, "hello"); + }); + + test("deeply clones identifier without trivia", () => { + const id = createIdentifier("hello"); + const clone = getSynthesizedDeepClone(id, /*includeTrivia*/ false); + + assert.strictEqual(clone.kind, SyntaxKind.Identifier); + assert.strictEqual(clone.text, "hello"); + assert.strictEqual(clone.pos, -1); + assert.strictEqual(clone.end, -1); + }); + + test("deeply clones binary expression", () => { + const left = createIdentifier("a"); + const right = createNumericLiteral("42", TokenFlags.None); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + + const clone = getSynthesizedDeepClone(bin); + + // Root is different object + assert.notStrictEqual(clone, bin); + assert.strictEqual(clone.kind, SyntaxKind.BinaryExpression); + + // Children are also different objects (deep clone) + assert.notStrictEqual(clone.left, left); + assert.strictEqual(clone.left.kind, SyntaxKind.Identifier); + assert.strictEqual((clone.left as Identifier).text, "a"); + + assert.notStrictEqual(clone.right, right); + assert.strictEqual(clone.right.kind, SyntaxKind.NumericLiteral); + assert.strictEqual((clone.right as Identifier).text, "42"); + + assert.notStrictEqual(clone.operatorToken, op); + assert.strictEqual(clone.operatorToken.kind, SyntaxKind.PlusToken); + }); + + test("sets parent pointers on deep clone", () => { + const left = createIdentifier("a"); + const right = createIdentifier("b"); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + + const clone = getSynthesizedDeepClone(bin); + + assert.strictEqual(clone.left.parent, clone); + assert.strictEqual(clone.right.parent, clone); + assert.strictEqual(clone.operatorToken.parent, clone); + }); + + test("returns undefined for undefined input", () => { + const result = getSynthesizedDeepClone(undefined); + assert.strictEqual(result, undefined); + }); + + test("deeply clones if statement with optional else", () => { + const cond = createIdentifier("ok"); + const thenBlock = createBlock([]); + const ifStmt = createIfStatement(cond, thenBlock, undefined); + + const clone = getSynthesizedDeepClone(ifStmt); + + assert.notStrictEqual(clone, ifStmt); + assert.strictEqual(clone.kind, SyntaxKind.IfStatement); + assert.notStrictEqual(clone.expression, cond); + assert.strictEqual(clone.expression.kind, SyntaxKind.Identifier); + assert.notStrictEqual(clone.thenStatement, thenBlock); + assert.strictEqual(clone.thenStatement.kind, SyntaxKind.Block); + assert.strictEqual(clone.elseStatement, undefined); + }); + + test("preserves tree structure with nested children", () => { + const a = createIdentifier("a"); + const b = createIdentifier("b"); + const stmts = [ + createExpressionStatement(a), + createExpressionStatement(b), + ]; + const block = createBlock(stmts); + + const clone = getSynthesizedDeepClone(block); + + assert.notStrictEqual(clone, block); + assert.strictEqual(clone.statements.length, 2); + + const cloneStmt0 = clone.statements.at(0)!; + const cloneStmt1 = clone.statements.at(1)!; + assert.notStrictEqual(cloneStmt0, stmts[0]); + assert.notStrictEqual(cloneStmt1, stmts[1]); + assert.strictEqual(cloneStmt0.kind, SyntaxKind.ExpressionStatement); + assert.strictEqual(cloneStmt1.kind, SyntaxKind.ExpressionStatement); + }); + + test("deeply clones string literal", () => { + const str = createStringLiteral("test", TokenFlags.None); + const clone = getSynthesizedDeepClone(str); + assert.notStrictEqual(clone, str); + assert.strictEqual(clone.kind, SyntaxKind.StringLiteral); + assert.strictEqual(clone.text, "test"); + }); + + test("deeply clones numeric literal", () => { + const num = createNumericLiteral("3.14", TokenFlags.None); + const clone = getSynthesizedDeepClone(num); + assert.notStrictEqual(clone, num); + assert.strictEqual(clone.kind, SyntaxKind.NumericLiteral); + assert.strictEqual(clone.text, "3.14"); + }); + + test("clone has same syntax structure", () => { + const left = createIdentifier("x"); + const right = createNumericLiteral("1", TokenFlags.None); + const op = createToken(SyntaxKind.PlusToken); + const bin = createBinaryExpression(undefined, left, undefined, op, right); + const stmt = createExpressionStatement(bin); + + const clone = getSynthesizedDeepClone(stmt); + assert.deepStrictEqual(collectKinds(clone), collectKinds(stmt)); + }); +}); + +// --------------------------------------------------------------------------- +// getSynthesizedDeepClones (NodeArray) +// --------------------------------------------------------------------------- + +describe("getSynthesizedDeepClones", { concurrency }, () => { + test("deeply clones a NodeArray", () => { + const a = createIdentifier("a"); + const b = createIdentifier("b"); + const arr = createNodeArray([a, b]); + + const clone = getSynthesizedDeepClones(arr); + + assert.notStrictEqual(clone, arr); + assert.strictEqual(clone.length, 2); + assert.notStrictEqual(clone.at(0), a); + assert.notStrictEqual(clone.at(1), b); + assert.strictEqual(clone.at(0)!.kind, SyntaxKind.Identifier); + assert.strictEqual(clone.at(1)!.kind, SyntaxKind.Identifier); + }); + + test("returns undefined for undefined input", () => { + const result = getSynthesizedDeepClones(undefined); + assert.strictEqual(result, undefined); + }); + + test("preserves pos and end on NodeArray", () => { + const a = createIdentifier("a"); + const arr = createNodeArray([a], 5, 10); + + const clone = getSynthesizedDeepClones(arr); + assert.strictEqual(clone.pos, 5); + assert.strictEqual(clone.end, 10); + }); +}); + +// --------------------------------------------------------------------------- +// Type-only import use sites +// --------------------------------------------------------------------------- + +describe("isValidTypeOnlyAliasUseSite", { concurrency }, () => { + test("classifies syntactic type-only import use sites", () => { + const source = ` +type TypeUse = TypeOnlyName; +const valueUse = ValueName; +const shorthandUse = { ShorthandName }; +interface InterfaceUse extends InterfaceBase {} +class ImplementsUse implements ImplementsBase {} +class ExtendsUse extends ExtendsBase {} +abstract class AbstractComputed { + abstract [AbstractKey](): void; +} +interface InterfaceComputed { + [InterfaceKey]: string; +} +type TypeQueryUse = typeof TypeQueryName; +/** @link JSDocLinkBase#JSDocLinkMember */ +class JSDocLinkUse {} +/** @augments JSDocAugmentsBase */ +class JSDocAugmentsUse {} +`; + const api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": source, + }); + try { + const sourceFile = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const tokenAt = (text: string) => getTokenAtPosition(sourceFile, source.indexOf(text)); + + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("TypeOnlyName")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ValueName")), false); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ShorthandName")), false); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("InterfaceBase")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ImplementsBase")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("ExtendsBase")), false); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("AbstractKey")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("InterfaceKey")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("TypeQueryName")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocLinkBase")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocLinkMember")), true); + assert.equal(isValidTypeOnlyAliasUseSite(tokenAt("JSDocAugmentsBase")), true); + } + finally { + api.close(); + } + }); +}); + +// --------------------------------------------------------------------------- +// Integration: visitor transformation +// --------------------------------------------------------------------------- + +describe("visitor transformation", { concurrency }, () => { + test("rename all identifiers via recursive visitor", () => { + const a = createIdentifier("oldName"); + const b = createIdentifier("oldName"); + const stmtA = createExpressionStatement(a); + const stmtB = createExpressionStatement(b); + const block = createBlock([stmtA, stmtB]); + + // Use a recursive visitor to rename identifiers at any depth + function renameVisitor(node: Node): Node { + if (node.kind === SyntaxKind.Identifier && (node as Identifier).text === "oldName") { + return createIdentifier("newName"); + } + return visitEachChild(node, renameVisitor); + } + const result = visitEachChild(block, renameVisitor); + + assert.notStrictEqual(result, block); + const stmt0 = result.statements.at(0)! as ExpressionStatement; + assert.strictEqual((stmt0.expression as Identifier).text, "newName"); + const stmt1 = result.statements.at(1)! as ExpressionStatement; + assert.strictEqual((stmt1.expression as Identifier).text, "newName"); + }); + + test("deep clone + modify produces independent tree", () => { + const id = createIdentifier("original"); + const stmt = createExpressionStatement(id); + const block = createBlock([stmt]); + + // Deep clone + const cloned = getSynthesizedDeepClone(block); + + // Modify original using recursive visitor + function modVisitor(node: Node): Node { + if (node.kind === SyntaxKind.Identifier) return createIdentifier("modified"); + return visitEachChild(node, modVisitor); + } + const modified = visitEachChild(block, modVisitor); + + // Cloned tree should be untouched + const clonedStmt = cloned.statements.at(0)! as ExpressionStatement; + assert.strictEqual((clonedStmt.expression as Identifier).text, "original"); + + // Modified tree should have new name + const modifiedStmt = modified.statements.at(0)! as ExpressionStatement; + assert.strictEqual((modifiedStmt.expression as Identifier).text, "modified"); + }); +}); + +// --------------------------------------------------------------------------- +// RemoteNode: cloneNode, visitEachChild, getSynthesizedDeepClone +// --------------------------------------------------------------------------- + +function spawnAPI(files: Record = { + "/tsconfig.json": "{}", + "/src/index.ts": `import { foo } from './foo';\nconst x = foo + 1;\n`, + "/src/foo.ts": `export const foo = 42;`, +}) { + return new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + tsserverPath: fileURLToPath(new URL(`../../../../built/local/tsc${process.platform === "win32" ? ".exe" : ""}`, import.meta.url).toString()), + fs: createVirtualFileSystem(files), + }); +} + +function getRemoteSourceFileAndChecker(api: API, configPath: string, filePath: string) { + const snapshot = api.createSnapshot({ openProject: configPath }); + const project = snapshot.getConfiguredProject(configPath)!; + return [project.program.getSourceFile(filePath)!, project.checker] as const; +} + +function getRemoteSourceFile(api: API, configPath: string, filePath: string) { + return getRemoteSourceFileAndChecker(api, configPath, filePath)[0]; +} + +describe("declaration utilities", { concurrency }, () => { + test("isExternalModule distinguishes external modules from scripts and CommonJS", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true, moduleDetection: "legacy" } }), + "/src/module.ts": "export const x = 1;", + "/src/import.ts": 'import { x } from "./module";', + "/src/script.ts": "const y = 1;", + "/src/commonjs.js": "module.exports = 1;", + }); + for ( + const [fileName, expected] of [ + ["module.ts", true], + ["import.ts", true], + ["script.ts", false], + ["commonjs.js", false], + ] as const + ) { + const sourceFile = getRemoteSourceFile(api, "/tsconfig.json", `/src/${fileName}`); + assert.strictEqual(isExternalModule(sourceFile), expected, fileName); + assert.strictEqual(isExternalModule(cloneNode(sourceFile)), expected, `cloned ${fileName}`); + } + }); + + test("getCombinedModifierFlags includes modifiers on factory nodes", () => { + const declaration = createFunctionDeclaration( + [createToken(SyntaxKind.ExportKeyword), createToken(SyntaxKind.AsyncKeyword)], + undefined, + createIdentifier("f"), + undefined, + [], + undefined, + createBlock([]), + ); + + assert.strictEqual( + getCombinedModifierFlags(declaration), + ModifierFlags.Export | ModifierFlags.Async, + ); + }); + + test("getCombinedModifierFlags includes variable statement flags for binding elements", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": "export const { x } = value;", + }); + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const statement = sf.statements[0] as VariableStatement; + const declaration = statement.declarationList.declarations[0]; + const binding = (declaration.name as ObjectBindingPattern).elements[0] as BindingElement; + + assert.strictEqual( + getCombinedModifierFlags(binding), + ModifierFlags.Export, + ); + }); + + test("element categories are named declarations", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": ` +class C { public member = 1; } +interface I { member?: number; } +const object = { member: 1 }; +`, + }); + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const classElement: ClassElement = (sf.statements[0] as ClassDeclaration).members[0]; + const typeElement: TypeElement = (sf.statements[1] as InterfaceDeclaration).members[0]; + const variable = sf.statements[2] as VariableStatement; + const objectLiteral = variable.declarationList.declarations[0].initializer as ObjectLiteralExpression; + const objectLiteralElement: ObjectLiteralElement = objectLiteral.properties[0]; + const declarations: readonly Declaration[] = [classElement, typeElement, objectLiteralElement]; + + assert.deepStrictEqual(declarations.map(declaration => getNameOfDeclaration(declaration)?.getText()), ["member", "member", "member"]); + assert.strictEqual(getCombinedModifierFlags(classElement), ModifierFlags.Public); + }); + + test("getNameOfDeclaration returns declared and assigned names", () => { + using api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": ` +function declared() {} +const assigned = class {}; +export default declared; +`, + }); + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const variable = sf.statements[1] as VariableStatement; + const classExpression = variable.declarationList.declarations[0].initializer!; + + assert.strictEqual(getNameOfDeclaration(sf.statements[0] as FunctionDeclaration)?.getText(), "declared"); + assert.strictEqual(getNameOfDeclaration(classExpression)?.getText(), "assigned"); + assert.strictEqual(getNameOfDeclaration(sf.statements[2] as ExportAssignment)?.getText(), "declared"); + assert.strictEqual(getNameOfDeclaration(undefined), undefined); + }); + + test("getNameOfDeclaration returns JavaScript assignment declaration names", () => { + using api = spawnAPI({ + "/tsconfig.json": JSON.stringify({ compilerOptions: { allowJs: true } }), + "/src/index.js": ` +exports.foo = () => {}; +Object.defineProperty(exports, "bar", { value: 1 }); +class C { #x; method() { this.#x = 1; } } +`, + }); + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.js"); + const assignment = (sf.statements[0] as ExpressionStatement).expression as BinaryExpression; + const defineProperty = (sf.statements[1] as ExpressionStatement).expression as CallExpression; + const classDeclaration = sf.statements[2] as ClassDeclaration; + const method = classDeclaration.members[1] as MethodDeclaration; + const privateAssignment = (method.body!.statements[0] as ExpressionStatement).expression as BinaryExpression; + + assert.strictEqual(getNameOfDeclaration(assignment)?.getText(), "foo"); + assert.strictEqual(getNameOfDeclaration(defineProperty)?.getText(), '"bar"'); + assert.strictEqual(getNameOfDeclaration(privateAssignment), privateAssignment.left); + }); +}); + +describe("RemoteNode + cloneNode", { concurrency }, () => { + test("does not read a sibling as an invalid JSDoc link name", () => { + const api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/index.ts": `/** + * {@link #toggled} property + */ +export const x = 1;`, + }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const jsDoc = sf.statements[0].jsDoc?.[0] as JSDoc | undefined; + assert.ok(jsDoc?.kind === SyntaxKind.JSDoc); + const comment = jsDoc.comment; + assert.ok(typeof comment !== "string"); + const link = comment?.[1]; + assert.ok(link && isJSDocLink(link)); + assert.strictEqual(link.name, undefined); + } + finally { + api.close(); + } + }); + + test("uses distinct nodes for expression and type heritage", () => { + const api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/heritage.ts": ` +class C extends Base implements Contract {} +interface I extends Parent {} +`, + }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/heritage.ts"); + const classDecl = sf.statements[0]; + const interfaceDecl = sf.statements[1]; + assert.ok(isClassDeclaration(classDecl)); + assert.ok(isInterfaceDeclaration(interfaceDecl)); + assert.strictEqual(classDecl.heritageClauses?.[0].types[0].kind, SyntaxKind.ExpressionWithTypeArguments); + assert.strictEqual(classDecl.heritageClauses?.[1].types[0].kind, SyntaxKind.TypeReference); + assert.strictEqual(interfaceDecl.heritageClauses?.[0].types[0].kind, SyntaxKind.TypeReference); + } + finally { + api.close(); + } + }); + + test("cloneNode produces a NodeObject from a RemoteNode", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); + const clone = cloneNode(sf); + assert.notStrictEqual(clone, sf); + assert.ok(clone instanceof NodeObject); + assert.strictEqual(clone.statements, sf.statements); + assert.strictEqual(clone.text, sf.text); + assert.strictEqual(clone.fileName, sf.fileName); + assert.strictEqual(clone.path, sf.path); + assert.strictEqual(clone.scriptKind, sf.scriptKind); + assert.strictEqual(clone.languageVariant, sf.languageVariant); + assert.strictEqual(clone.isDeclarationFile, sf.isDeclarationFile); + assert.strictEqual(clone.referencedFiles, sf.referencedFiles); + assert.strictEqual(clone.typeReferenceDirectives, sf.typeReferenceDirectives); + assert.strictEqual(clone.libReferenceDirectives, sf.libReferenceDirectives); + assert.strictEqual(clone.imports, sf.imports); + assert.strictEqual(clone.moduleAugmentations, sf.moduleAugmentations); + assert.strictEqual(clone.ambientModuleNames, sf.ambientModuleNames); + assert.strictEqual(clone.externalModuleIndicator, sf.externalModuleIndicator); + + assert.strictEqual(clone.kind, sf.kind); + assert.strictEqual(clone.pos, sf.pos); + assert.strictEqual(clone.end, sf.end); + } + finally { + api.close(); + } + }); + + test("cloneNode clones a remote import declaration", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const importDecl = sf.statements[0]; + assert.ok(isImportDeclaration(importDecl)); + + const clone = cloneNode(importDecl); + assert.notStrictEqual(clone, importDecl); + assert.strictEqual(clone.kind, SyntaxKind.ImportDeclaration); + // moduleSpecifier should be the same reference (shallow clone) + assert.ok(clone.moduleSpecifier); + } + finally { + api.close(); + } + }); + + test("cloneNode preserves text on remote identifier", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const importDecl = sf.statements[0]; + assert.ok(isImportDeclaration(importDecl)); + const named = importDecl.importClause?.namedBindings; + assert.ok(named && isNamedImports(named)); + const fooName = named.elements[0].name; + + const clone = cloneNode(fooName); + assert.strictEqual(clone.kind, SyntaxKind.Identifier); + assert.strictEqual((clone as Identifier).text, "foo"); + } + finally { + api.close(); + } + }); +}); + +describe("RemoteNode + visitEachChild", { concurrency }, () => { + test("identity visitor returns same remote node", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); + const firstStmt = sf.statements[0]; + assert.ok(firstStmt); + + // visitEachChild with identity should return the same node + const result = visitEachChild(firstStmt, node => node); + assert.strictEqual(result, firstStmt); + } + finally { + api.close(); + } + }); + + test("visitor can transform remote tree into NodeObject tree", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const importDecl = sf.statements[0]; + assert.ok(isImportDeclaration(importDecl)); + + // Replace the module specifier with a new string literal + const result = visitEachChild(importDecl, node => { + if (node.kind === SyntaxKind.StringLiteral) { + return createStringLiteral("./bar", TokenFlags.None); + } + return node; + }); + + assert.notStrictEqual(result, importDecl); + assert.strictEqual(result.kind, SyntaxKind.ImportDeclaration); + assert.strictEqual((result.moduleSpecifier as StringLiteralLikeNode).text, "./bar"); + } + finally { + api.close(); + } + }); +}); + +describe("RemoteNodeList inherited array methods", { concurrency }, () => { + test("filter/map/slice return plain arrays without throwing", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const statements = sf.statements; + assert.strictEqual(statements.length, 2); + + // These inherited Array methods previously threw + // "this.view.getUint32 is not a function" via ArraySpeciesCreate. + const filtered = statements.filter(() => true); + assert.ok(Array.isArray(filtered)); + assert.strictEqual(Object.getPrototypeOf(filtered), Array.prototype); + assert.strictEqual(filtered.length, 2); + assert.strictEqual(filtered[0], statements[0]); + + const mapped = statements.map(s => s.kind); + assert.ok(Array.isArray(mapped)); + assert.strictEqual(Object.getPrototypeOf(mapped), Array.prototype); + assert.deepStrictEqual(mapped, [statements[0].kind, statements[1].kind]); + + const sliced = statements.slice(1); + assert.ok(Array.isArray(sliced)); + assert.strictEqual(Object.getPrototypeOf(sliced), Array.prototype); + assert.strictEqual(sliced.length, 1); + assert.strictEqual(sliced[0], statements[1]); + } + finally { + api.close(); + } + }); +}); + +describe("RemoteNode + getSynthesizedDeepClone", { concurrency }, () => { + test("deep clones a remote import declaration", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/index.ts"); + const importDecl = sf.statements[0]; + assert.ok(isImportDeclaration(importDecl)); + + const clone = getSynthesizedDeepClone(importDecl); + + assert.notStrictEqual(clone, importDecl); + assert.strictEqual(clone.kind, SyntaxKind.ImportDeclaration); + // Deep clone — children should be different objects + assert.notStrictEqual(clone.moduleSpecifier, importDecl.moduleSpecifier); + assert.strictEqual(clone.moduleSpecifier.kind, SyntaxKind.StringLiteral); + } + finally { + api.close(); + } + }); + + test("deep clone of remote tree produces independent NodeObject tree", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); + const firstStmt = sf.statements[0]; + assert.ok(firstStmt); + + const clone = getSynthesizedDeepClone(firstStmt); + + // Clone should have all the same kinds as the original + assert.deepStrictEqual(collectKinds(clone), collectKinds(firstStmt)); + + // But be entirely separate objects + clone.forEachChild(function visit(node) { + assert.ok(node instanceof NodeObject); + node.forEachChild(visit); + }); + } + finally { + api.close(); + } + }); + + test("deep clone of remote SourceFile preserves top-level metadata references", () => { + const api = spawnAPI(); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/foo.ts"); + const referencedFiles = sf.referencedFiles; + const typeReferenceDirectives = sf.typeReferenceDirectives; + const libReferenceDirectives = sf.libReferenceDirectives; + const imports = sf.imports; + const moduleAugmentations = sf.moduleAugmentations; + const ambientModuleNames = sf.ambientModuleNames; + + const clone = getSynthesizedDeepClone(sf); + + assert.notStrictEqual(clone, sf); + assert.strictEqual(clone.referencedFiles, referencedFiles); + assert.strictEqual(clone.typeReferenceDirectives, typeReferenceDirectives); + assert.strictEqual(clone.libReferenceDirectives, libReferenceDirectives); + assert.strictEqual(clone.imports, imports); + assert.strictEqual(clone.moduleAugmentations, moduleAugmentations); + assert.strictEqual(clone.ambientModuleNames, ambientModuleNames); + assert.strictEqual(clone.externalModuleIndicator, sf.externalModuleIndicator); + assert.strictEqual(clone.originalText, sf.originalText); + assert.strictEqual(clone.spanMap, sf.spanMap); + assert.strictEqual(clone.contentMapper, sf.contentMapper); + assert.strictEqual(clone.virtualFileName, sf.virtualFileName); + assert.strictEqual(clone.diagnosticDirectives, sf.diagnosticDirectives); + assert.strictEqual(clone.supplementalSourceFileNames, sf.supplementalSourceFileNames); + assert.strictEqual(clone.canonicalSourceFileName, sf.canonicalSourceFileName); + } + finally { + api.close(); + } + }); +}); + +// --------------------------------------------------------------------------- +// RemoteNode: position and text getters +// --------------------------------------------------------------------------- + +// Relationships that must hold between the position/text getters on any node. +function assertGetterInvariants(node: Node, sf: SourceFile) { + const fullStart = node.getFullStart(); + const start = node.getStart(sf); + const end = node.getEnd(); + + assert.strictEqual(fullStart, node.pos); + assert.strictEqual(end, node.end); + assert.ok(start >= fullStart, `getStart (${start}) must be >= getFullStart (${fullStart})`); + assert.ok(end >= start, `getEnd (${end}) must be >= getStart (${start})`); + + assert.strictEqual(node.getFullWidth(), end - fullStart); + assert.strictEqual(node.getWidth(sf), end - start); + assert.strictEqual(node.getLeadingTriviaWidth(sf), start - fullStart); + + const fullText = node.getFullText(sf); + const text = node.getText(sf); + assert.strictEqual(fullText.length, node.getFullWidth()); + assert.strictEqual(text, fullText.slice(node.getLeadingTriviaWidth(sf))); + + // No-argument variants resolve the source file themselves and must agree. + assert.strictEqual(node.getStart(), start); + assert.strictEqual(node.getFullText(), fullText); + assert.strictEqual(node.getText(), text); + + node.forEachChild(child => { + assertGetterInvariants(child, sf); + return undefined; + }); +} + +describe("RemoteNode + position/text getters", { concurrency }, () => { + const source = "/* lead */ const value = 123;"; + const files = { + "/tsconfig.json": "{}", + "/src/getters.ts": source, + }; + + test("position and text getters on a parsed statement", () => { + const api = spawnAPI(files); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/getters.ts"); + const stmt = sf.statements[0]; + assert.ok(stmt); + + const tokenStart = source.indexOf("const"); + + // Full start includes leading trivia; start skips it. + assert.strictEqual(stmt.getFullStart(), 0); + assert.strictEqual(stmt.getStart(), tokenStart); + assert.strictEqual(stmt.getStart(sf), tokenStart); + assert.strictEqual(stmt.getLeadingTriviaWidth(), tokenStart); + + // End and widths. + assert.strictEqual(stmt.getEnd(), source.length); + assert.strictEqual(stmt.getFullWidth(), source.length); + assert.strictEqual(stmt.getWidth(), source.length - tokenStart); + + // Text slices, with and without leading trivia. + assert.strictEqual(stmt.getFullText(), source); + assert.strictEqual(stmt.getText(), source.slice(tokenStart)); + } + finally { + api.close(); + } + }); + + test("getText/getFullText on a nested node", () => { + const api = spawnAPI(files); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/getters.ts"); + const stmt = sf.statements[0] as VariableStatement; + const name = stmt.declarationList.declarations[0].name; + + assert.strictEqual(name.getText(), "value"); + // getFullText keeps the leading whitespace trivia before the identifier. + assert.strictEqual(name.getFullText().trimStart(), "value"); + assert.ok(name.getFullText().endsWith("value")); + } + finally { + api.close(); + } + }); + + test("getStart can include leading JSDoc comments", () => { + const docSource = "/** doc */\nfunction f() {}\n"; + const api = spawnAPI({ + "/tsconfig.json": "{}", + "/src/doc.ts": docSource, + }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/doc.ts"); + const fn = sf.statements[0]; + assert.ok(fn); + + // By default the JSDoc comment is treated as leading trivia and skipped. + assert.strictEqual(fn.getStart(), docSource.indexOf("function")); + + // With includeJsDocComment, the start moves back to the JSDoc comment. + assert.ok(fn.jsDoc && fn.jsDoc.length > 0, "function declaration should have attached JSDoc"); + assert.strictEqual(fn.getStart(sf, /*includeJsDocComment*/ true), 0); + } + finally { + api.close(); + } + }); + + test("a node without leading trivia has zero leading trivia width", () => { + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/plain.ts": "const x = 1;\n" }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/plain.ts"); + const stmt = sf.statements[0]; + assert.ok(stmt); + + assert.strictEqual(stmt.getFullStart(), 0); + assert.strictEqual(stmt.getStart(), 0); + assert.strictEqual(stmt.getLeadingTriviaWidth(), 0); + assert.strictEqual(stmt.getText(), "const x = 1;"); + assert.strictEqual(stmt.getText(), stmt.getFullText()); + } + finally { + api.close(); + } + }); + + test("the SourceFile node spans the whole file text", () => { + const text = "/* head */ const y = 2;\n"; + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/whole.ts": text }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/whole.ts"); + + assert.strictEqual(sf.getFullStart(), 0); + assert.strictEqual(sf.getFullText(), sf.text); + assert.strictEqual(sf.getEnd(), sf.text.length); + // getStart skips the file's leading comment trivia. + assert.strictEqual(sf.getStart(), text.indexOf("const")); + } + finally { + api.close(); + } + }); + + test("getter invariants hold for every node in a representative tree", () => { + const treeSource = [ + `import { foo } from "./foo";`, + ``, + `/** docs */`, + `export function add(a: number, b: number): number {`, + ` // body comment`, + ` return a + b;`, + `}`, + ``, + `const obj = { x: 1, y: "two" };`, + ``, + ].join("\n"); + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/tree.ts": treeSource }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/tree.ts"); + assertGetterInvariants(sf, sf); + } + finally { + api.close(); + } + }); + + test("getter invariants hold even for malformed source with missing nodes", () => { + // Error recovery produces zero-width / missing nodes; the getters must + // still satisfy their invariants and must not throw. + const malformed = "const a = b +;\nfunction ("; + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/broken.ts": malformed }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/broken.ts"); + assertGetterInvariants(sf, sf); + } + finally { + api.close(); + } + }); +}); + +// --------------------------------------------------------------------------- +// RemoteNode: child/token getters +// --------------------------------------------------------------------------- + +describe("RemoteNode + child/token getters", { concurrency }, () => { + function withFirstStatement(source: string, fn: (stmt: Node, sf: SourceFile) => void) { + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/children.ts": source }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/children.ts"); + fn(sf.statements[0], sf); + } + finally { + api.close(); + } + } + + async function withFirstStatementAsync(source: string, fn: (stmt: Node, sf: SourceFile, api: API, checker: Checker) => Promise) { + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/children.ts": source }); + try { + const [sf, checker] = getRemoteSourceFileAndChecker(api, "/tsconfig.json", "/src/children.ts"); + await fn(sf.statements[0], sf, api, checker); + } + finally { + api.close(); + } + } + + function findFirstOfKind(node: Node, kind: SyntaxKind): Node | undefined { + let found: Node | undefined; + const walk = (n: Node): undefined => { + if (found) return; + if (n.kind === kind) { + found = n; + return; + } + n.forEachChild(walk); + }; + walk(node); + return found; + } + + test("childrenIter generates all node children and supports early return value passthru", () => { + withFirstStatement("if (x) {}", stmt => { + const texts: string[] = []; + for (const c of stmt.childrenIter()) { + texts.push(c.getText()); + } + assert.deepStrictEqual(texts, ["x", "{}"]); + const cGen = stmt.childrenIter(); + let state = cGen.next(); + while (!state.done) { + const n = state.value; + let foundX: Node | undefined; + if (n.getText() === "x") { + foundX = n; + } + state = cGen.next(foundX); + } + assert.strictEqual( + state.value, + stmt.forEachChild(n => { + return n; + }), + ); + }); + }); + + test("childrenIter works with async generators", async () => { + await withFirstStatementAsync("class X { p: any }", async (stmt, sf, api, checker) => { + async function* visitNodeForFirstAnyChild(node: Node): AsyncGenerator { + for (const n of node.childrenIter()) { + const t = await checker.getTypeAtLocation(n); + if (t.flags & TypeFlags.Any) return n; + const res = yield* visitNodeForFirstAnyChild(n); + if (res) return res; + } + } + const res = (await visitNodeForFirstAnyChild(stmt).next()).value; + assert.strictEqual(res!.getText(), "p: any"); + }); + }); + + test("childrenIter skips empty NodeArrays", () => { + withFirstStatement("function f() {}", stmt => { + const body = findFirstOfKind(stmt, SyntaxKind.Block)!; + assert.deepStrictEqual([...body.childrenIter()], []); + }); + }); + + test("getChildren materializes the punctuation/keyword tokens the AST omits", () => { + withFirstStatement("if (x) {}", stmt => { + const texts = stmt.getChildren().map(c => c.getText()); + assert.deepStrictEqual(texts, ["if", "(", "x", ")", "{}"]); + }); + }); + + test("getChildCount and getChildAt agree with getChildren", () => { + withFirstStatement("if (x) {}", stmt => { + const children = stmt.getChildren(); + assert.strictEqual(stmt.getChildCount(), children.length); + for (let i = 0; i < children.length; i++) { + assert.strictEqual(stmt.getChildAt(i), children[i]); + } + }); + }); + + test("getFirstToken and getLastToken descend to the edge tokens", () => { + withFirstStatement("if (x) {}", stmt => { + assert.strictEqual(stmt.getFirstToken()?.getText(), "if"); + assert.strictEqual(stmt.getLastToken()?.getText(), "}"); + }); + }); + + test("a token node has no children and no first/last token", () => { + withFirstStatement("if (x) {}", stmt => { + const ifToken = stmt.getFirstToken()!; + assert.strictEqual(ifToken.getChildCount(), 0); + assert.deepStrictEqual(ifToken.getChildren(), []); + assert.strictEqual(ifToken.getFirstToken(), undefined); + assert.strictEqual(ifToken.getLastToken(), undefined); + }); + }); + + test("NodeArrays are wrapped in a SyntaxList that holds the elements and separators", () => { + withFirstStatement("[1, 2, 3];", stmt => { + const arr = findFirstOfKind(stmt, SyntaxKind.ArrayLiteralExpression)!; + assert.ok(arr, "expected an array literal"); + const list = arr.getChildren().find(c => c.kind === SyntaxKind.SyntaxList); + assert.ok(list, "array literal children should include a SyntaxList"); + assert.deepStrictEqual(list!.getChildren().map(c => c.getText()), ["1", ",", "2", ",", "3"]); + }); + }); + + test("getChildren tiles [pos, end) contiguously, absorbing interior trivia into tokens", () => { + // The interior comment must be absorbed into a token's leading trivia, not dropped. + withFirstStatement("const a = /* c */ 1;", (stmt, sf) => { + const children = stmt.getChildren(); + assert.ok(children.length > 0); + assert.strictEqual(children[0].pos, stmt.pos); + assert.strictEqual(children[children.length - 1].end, stmt.end); + for (let i = 1; i < children.length; i++) { + assert.strictEqual(children[i].pos, children[i - 1].end, "children must be contiguous"); + } + assert.strictEqual(children.map(c => c.getFullText(sf)).join(""), stmt.getFullText(sf)); + }); + }); + + test("a JSDoc comment is exposed as the first child", () => { + // Per tsc, the JSDoc is both its own child node and the leading trivia of the first token. + withFirstStatement("/** doc */\nfunction f() {}", stmt => { + const first = stmt.getChildren()[0]; + assert.strictEqual(first.kind, SyntaxKind.JSDoc); + assert.strictEqual(first.getText().trim(), "/** doc */"); + }); + }); + + test("getChildren throws on a synthesized node without a real position", () => { + const synthesized = createBlock([]); // a non-token node with pos/end === -1 + assert.throws(() => synthesized.getChildren(), /real position/); + }); + + test("the else keyword is materialized as a synthetic token", () => { + withFirstStatement("if (a) {} else {}", stmt => { + const texts = stmt.getChildren().map(c => c.getText()); + assert.ok(texts.includes("else"), `expected an 'else' token, got ${JSON.stringify(texts)}`); + }); + }); + + test("getFirstToken skips leading JSDoc and returns the first real token", () => { + withFirstStatement("/** d */ export function f() {}", stmt => { + const first = stmt.getFirstToken()!; + assert.ok( + first.kind < SyntaxKind.FirstJSDocNode || first.kind > SyntaxKind.LastJSDocNode, + "getFirstToken should skip the JSDoc node", + ); + assert.strictEqual(first.getText(), "export"); + }); + }); + + test("SourceFile children are the statements SyntaxList and the EndOfFile token", () => { + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/eof.ts": "const x = 1;\n" }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/eof.ts"); + const children = sf.getChildren(); + assert.ok(children.some(c => c.kind === SyntaxKind.SyntaxList), "should contain a statements SyntaxList"); + assert.strictEqual(children[children.length - 1].kind, SyntaxKind.EndOfFile); + assert.strictEqual(sf.getLastToken()?.kind, SyntaxKind.EndOfFile); + } + finally { + api.close(); + } + }); + + test("getChildren is cached: repeat calls return the same array", () => { + withFirstStatement("const x = 1;", stmt => { + assert.strictEqual(stmt.getChildren(), stmt.getChildren()); + }); + }); + + test("getChildren on an EndOfFile token carrying JSDoc is cached", () => { + // A trailing orphan JSDoc attaches to the EndOfFile token; remote nodes rebuild + // .jsDoc on every access, so this only holds if the EndOfFile branch is cached too. + const api = spawnAPI({ "/tsconfig.json": "{}", "/src/eof.ts": "const x = 1;\n/** orphan */" }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", "/src/eof.ts"); + const eof = sf.getLastToken()!; + assert.strictEqual(eof.kind, SyntaxKind.EndOfFile); + const children = eof.getChildren(sf); + assert.strictEqual(children.length, 1); + assert.strictEqual(children[0].kind, SyntaxKind.JSDoc); + assert.strictEqual(eof.getChildren(sf), children, "EndOfFile children should be cached"); + assert.strictEqual(eof.getChildAt(0, sf), children[0]); + } + finally { + api.close(); + } + }); + + const isJsDocKind = (n: Node) => n.kind >= SyntaxKind.FirstJSDocNode && n.kind <= SyntaxKind.LastJSDocNode; + + // Recursively asserts getChildren's invariants at every node: count/at agreement, caching, + // first/last token correctness, and contiguous tiling of [pos, end). + function assertChildInvariants(root: Node, sf: SourceFile): void { + const visit = (node: Node): void => { + const children = node.getChildren(sf); + + // Reparsed subtrees (JSDoc types materialized into the AST) must never surface: + // their positions point inside the comment, not into the parent's token range. + for (const child of children) { + assert.ok(!(child.flags & NodeFlags.Reparsed), `reparsed child leaked (kind ${child.kind} in kind ${node.kind})`); + } + + assert.strictEqual(node.getChildCount(sf), children.length); + for (let i = 0; i < children.length; i++) { + assert.strictEqual(node.getChildAt(i, sf), children[i]); + } + assert.strictEqual(node.getChildAt(children.length, sf), undefined); + assert.strictEqual(node.getChildren(sf), children, "getChildren should be cached"); + + // JSDoc nodes don't synthesize tokens, so the token/tiling invariants don't apply. + if (children.length > 0 && !isJsDocKind(node)) { + // first/last token can be undefined when an edge child is an empty list (e.g. an + // empty `case` clause) — same as tsc; when defined they must be aligned tokens. + const first = node.getFirstToken(sf); + const last = node.getLastToken(sf); + if (first) { + assert.ok(first.kind < SyntaxKind.FirstNode, `getFirstToken must be a token (kind ${node.kind})`); + assert.strictEqual(first.getStart(sf), node.getStart(sf), `firstToken start mismatch (kind ${node.kind})`); + } + if (last) { + assert.ok(last.kind < SyntaxKind.FirstNode, `getLastToken must be a token (kind ${node.kind})`); + assert.strictEqual(last.end, node.end, `lastToken end mismatch (kind ${node.kind})`); + } + + assert.strictEqual(children[0].pos, node.pos, `first child pos mismatch (kind ${node.kind})`); + assert.strictEqual(children[children.length - 1].end, node.end, `last child end mismatch (kind ${node.kind})`); + for (let i = 1; i < children.length; i++) { + if (isJsDocKind(children[i - 1])) continue; + assert.strictEqual(children[i].pos, children[i - 1].end, `gap/overlap between children (kind ${node.kind})`); + } + } + + for (const child of children) { + if (!isJsDocKind(child)) { + visit(child); + } + } + }; + visit(root); + } + + function checkSource(source: string, opts?: { jsx?: boolean; js?: boolean; }): void { + const ext = opts?.js ? (opts?.jsx ? "jsx" : "js") : opts?.jsx ? "tsx" : "ts"; + const tsconfig = opts?.js ? `{ "compilerOptions": { "allowJs": true, "checkJs": true, "jsx": "react-jsx" } }` + : opts?.jsx ? `{ "compilerOptions": { "jsx": "react-jsx" } }` + : "{}"; + const api = spawnAPI({ "/tsconfig.json": tsconfig, [`/src/c.${ext}`]: source }); + try { + const sf = getRemoteSourceFile(api, "/tsconfig.json", `/src/c.${ext}`); + assertChildInvariants(sf, sf); + } + finally { + api.close(); + } + } + + test("structural invariants hold recursively across a rich tree", () => { + checkSource([ + "/** docs */", + "export function greet(name: string, count = 1): string {", + " const parts: string[] = [];", + " for (let i = 0; i < count; i++) {", + " parts.push(`hi ${name}`);", + " }", + " if (parts.length) {", + ' return parts.join(", ");', + " }", + " else {", + ' return "none";', + " }", + "}", + "", + ].join("\n")); + }); + + // Representative constructs, each exercising a distinct structural path of getChildren + // (token synthesis, SyntaxList wrapping, empty lists, decorator lists, JSDoc, JSX, nesting). + const corpus: Array<{ name: string; source: string; jsx?: boolean; js?: boolean; }> = [ + { name: "variable declarations", source: "const a = 1; let b: number = 2; var c, d = 3;" }, + { name: "function with optional, default and rest params", source: "function f(a: number, b?: string, c = 1, ...d: any[]): void {}" }, + { name: "class with members", source: "class C { x = 1; #y = 2; static s = 3; readonly r: string; constructor(public p: number) {} m() {} get g() { return 1; } set v(x) {} static {} }" }, + { name: "class with decorators", source: "@dec class C { @prop x = 1; @meth() m(@param p: number) {} accessor a = 1; }" }, + { name: "interface with signature members", source: "interface I extends A, B { x: number; y?: string; readonly z: boolean; (a: number): void; new (): I; [k: string]: any; m(p: number): void; }" }, + { name: "generics with constraints and defaults", source: "function f(x: T): U { return x as any; }\nclass C {}" }, + { name: "enums", source: "enum E { A, B = 2, C = A | B } const enum CE { X = 'x', Y = 'y' }" }, + { name: "import declarations", source: "import d from 'a';\nimport { x, y as z } from 'b';\nimport * as ns from 'c';\nimport type { T } from 'd';\nimport 'e';\nimport def, { named } from 'f';" }, + { name: "if/else chains", source: "if (a) { x(); } else if (b) { y(); } else { z(); }" }, + { name: "for variants", source: "for (let i = 0; i < n; i++) {} for (const k in o) {} for (const v of a) {} for (;;) { break; }" }, + { name: "switch with an empty case clause", source: "switch (x) { case 1: y(); break; case 2: case 3: z(); default: w(); }" }, + { name: "object literal with all member kinds", source: "const o = { a: 1, b, [c]: 2, ...d, m() {}, get g() { return 1; }, set s(v) {}, async am() {}, *gm() {} };" }, + { name: "tagged and nested template literals", source: "const r = tag`a${b}c${`inner${d}`}e`;" }, + { name: "comments and jsdoc with tags", source: "// line\n/* block */\n/**\n * @param a the a\n * @returns nothing\n */\nfunction f(a: number) {} // trailing" }, + { name: "empty constructs", source: "function f() {} class C {} interface I {} enum E {} { } ; namespace N {}" }, + { name: "JSX element with attributes and children", source: 'const e =
hello {name}
;', jsx: true }, + // Reparsed JSDoc types in .js files must not surface as children: their positions + // point inside the comment, not into the parent's token range. Each entry stresses a + // different reparse shape (single nodes, whole NodeArrays, mixed arrays, statements). + { name: "JS with reparsed @param/@returns types", source: "/**\n * @param {number} a the a\n * @returns {string} something\n */\nfunction f(a) { return String(a); }\n", js: true }, + { name: "JS with @type, @template and reparsed type parameters", source: "/** @type {number} */\nconst n = 1;\n/**\n * @template T\n * @param {T} x\n */\nfunction id(x) { return x; }\n", js: true }, + { name: "JS with optional, default and rest @param variants", source: '/**\n * @param {number} [a]\n * @param {string} [b="x"]\n * @param {...number} rest\n */\nfunction f(a, b, ...rest) {}\n', js: true }, + { name: "JS with a @type cast on a parenthesized expression", source: "function g() { return 1; }\nconst x = /** @type {number} */ (g());\n", js: true }, + { name: "JS with @typedef and @property hoisted into statements", source: "/**\n * @typedef {Object} Pt\n * @property {number} x\n * @property {number} y\n */\nconst p = { x: 1, y: 2 };\n", js: true }, + { name: "JS with @callback", source: "/**\n * @callback Cb\n * @param {number} n\n * @returns {void}\n */\nlet cb;\n", js: true }, + { name: "JS with constrained and multiple @template tags", source: "/**\n * @template {object} T\n * @template U\n * @param {T} a\n * @param {U} b\n */\nfunction pair(a, b) { return [a, b]; }\n", js: true }, + { name: "JS with @this inserted into the parameter list", source: "/**\n * @this {object}\n * @param {number} n\n */\nfunction handler(n) { return this; }\n", js: true }, + { name: "JS class with @extends type arguments and member tags", source: "class Base {}\n/** @extends {Base} */\nclass C extends Base {\n /** @param {number} v */\n constructor(v) { super(); this.v = v; }\n /** @returns {number} */\n get value() { return this.v; }\n}\n", js: true }, + { name: "JS with @enum", source: "/** @enum {number} */\nconst E = { A: 1, B: 2 };\n", js: true }, + { name: "JS with trailing orphan @typedef attached to EndOfFile", source: "let x = 1;\n/** @typedef {number} N */", js: true }, + { name: "JS with @satisfies", source: "/** @satisfies {{ a: number }} */\nconst o = { a: 1 };\n", js: true }, + { name: "JS with @import declaration", source: '/** @import { T } from "./t" */\n/** @type {number} */\nlet v = 1;\n', js: true }, + { name: "JS with reparsed types on exported and nested functions", source: "/** @param {number} a */\nexport function outer(a) {\n /** @returns {number} */\n function inner() { return a; }\n return inner();\n}\n", js: true }, + { name: "JSX component with reparsed @param props type", source: '/**\n * @param {{ name: string }} props\n * @returns {object}\n */\nexport function Greeting(props) {\n return
hello {props.name}
;\n}\n', js: true, jsx: true }, + { name: "JSX with @type cast and @typedef around elements", source: '/**\n * @typedef {Object} Item\n * @property {string} label\n */\nconst item = /** @type {Item} */ ({ label: "x" });\nconst el = {item.label};\n', js: true, jsx: true }, + ]; + + for (const entry of corpus) { + test(`invariants: ${entry.name}`, () => { + checkSource(entry.source, { jsx: entry.jsx ?? false, js: entry.js ?? false }); + }); + } +}); diff --git a/packages/typescript/test/sync/astnav.test.ts b/packages/typescript/test/sync/astnav.test.ts index 6901c17db331f..be075a393ce15 100644 --- a/packages/typescript/test/sync/astnav.test.ts +++ b/packages/typescript/test/sync/astnav.test.ts @@ -1,196 +1,196 @@ -// -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// -// Source: test/async/astnav.test.ts -// Regenerate: npm run generate (from packages/typescript) -// -import { - findNextToken, - findPrecedingToken, - formatSyntaxKind, - getTokenAtPosition, - getTouchingPropertyName, -} from "@typescript/typescript/unstable/ast"; -import type { - Node, - SourceFile, -} from "@typescript/typescript/unstable/ast"; -import { API } from "@typescript/typescript/unstable/sync"; -import assert from "node:assert"; -import { readFileSync } from "node:fs"; -import { resolve } from "node:path"; -import { - after, - before, - describe, - test, -} from "node:test"; -import { fileURLToPath } from "node:url"; -import { - areTestsFiltered, - createVirtualFileSystem, -} from "../testUtils.ts"; - -// --------------------------------------------------------------------------- -// Go JSON baseline format -// --------------------------------------------------------------------------- - -interface TokenRun { - startPos: number; - endPos: number; - kind: string; - nodePos: number; - nodeEnd: number; -} - -/** - * Expand run-length encoded Go baseline into a per-position map. - */ -function expandBaseline(runs: TokenRun[]): Map { - const map = new Map(); - for (const run of runs) { - const entry = { kind: run.kind, pos: run.nodePos, end: run.nodeEnd }; - for (let p = run.startPos; p <= run.endPos; p++) { - map.set(p, entry); - } - } - return map; -} - -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -/** Convert an astnav result node to a string-based token info for comparison. */ -function toTokenInfo(node: Node): { kind: string; pos: number; end: number; } { - return { - kind: formatSyntaxKind(node.kind), - pos: node.pos, - end: node.end, - }; -} - -// --------------------------------------------------------------------------- -// Test configuration -// --------------------------------------------------------------------------- - -const repoRoot = resolve(import.meta.dirname!, "..", "..", "..", ".."); -const testFile = resolve(repoRoot, "tsc/testdata/fixtures/services/mapCode.ts"); -const baselineDir = resolve(repoRoot, "tsc/testdata/baselines/reference/astnav"); - -// --------------------------------------------------------------------------- -// Tests -// --------------------------------------------------------------------------- - -describe("astnav", { concurrency: areTestsFiltered() }, () => { - let fileText: string; - - try { - fileText = readFileSync(testFile, "utf-8"); - } - catch { - console.log("Skipping astnav tests: compiler fixtures not available"); - fileText = ""; - } - - if (!fileText) return; - - // Use the Go API to parse the file — the resulting SourceFile is already - // in our SyntaxKind/NodeFlags enum space with correct JSDoc structure. - let api: API; - let sourceFile: SourceFile; - - before(() => { - api = new API({ - cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), - fs: createVirtualFileSystem({ - "/tsconfig.json": JSON.stringify({ files: ["/src/testFile.ts"] }), - "/src/testFile.ts": fileText, - }), - }); - - const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); - const project = snapshot.getConfiguredProject("/tsconfig.json")!; - const sf = project.program.getSourceFile("/src/testFile.ts"); - assert.ok(sf, "Failed to get source file from API"); - sourceFile = sf; - }); - - after(() => { - api.close(); - }); - - const testCases = [ - { - name: "getTokenAtPosition", - baselineFile: "GetTokenAtPosition.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => getTokenAtPosition(sf, pos) as Node | undefined, - }, - { - name: "getTouchingPropertyName", - baselineFile: "GetTouchingPropertyName.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => getTouchingPropertyName(sf, pos) as Node | undefined, - }, - { - name: "findPrecedingToken", - baselineFile: "FindPrecedingToken.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => findPrecedingToken(sf, pos), - }, - { - name: "findNextToken", - baselineFile: "FindNextToken.mapCode.ts.baseline.json", - fn: (sf: SourceFile, pos: number) => findNextToken(getTokenAtPosition(sf, pos), sf, sf), - }, - ]; - - for (const tc of testCases) { - test(tc.name, () => { - const baselinePath = resolve(baselineDir, tc.baselineFile); - const runs: TokenRun[] = JSON.parse(readFileSync(baselinePath, "utf-8")); - const expected = expandBaseline(runs); - - const failures: string[] = []; - - for (let pos = 0; pos < fileText.length; pos++) { - const node = tc.fn(sourceFile, pos); - const goExpected = expected.get(pos); - - if (!goExpected) continue; - - if (node === undefined) { - failures.push( - ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), got undefined`, - ); - if (failures.length >= 50) { - failures.push(" ... (truncated, too many failures)"); - break; - } - continue; - } - - const result = toTokenInfo(node); - if (result.kind !== goExpected.kind || result.pos !== goExpected.pos || result.end !== goExpected.end) { - failures.push( - ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), ` + - `got ${result.kind} [${result.pos}, ${result.end})`, - ); - if (failures.length >= 50) { - failures.push(" ... (truncated, too many failures)"); - break; - } - } - } - - console.log(` ${tc.name}: checked ${fileText.length} positions`); - - if (failures.length > 0) { - assert.fail( - `${tc.name}: ${failures.length} position(s) differ from Go baseline:\n` + - failures.join("\n"), - ); - } - }); - } -}); +// +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// !!! THIS FILE IS AUTO-GENERATED - DO NOT EDIT !!! +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// +// Source: test/async/astnav.test.ts +// Regenerate: npm run generate (from packages/typescript) +// +import { + findNextToken, + findPrecedingToken, + formatSyntaxKind, + getTokenAtPosition, + getTouchingPropertyName, +} from "@typescript/typescript/unstable/ast"; +import type { + Node, + SourceFile, +} from "@typescript/typescript/unstable/ast"; +import { API } from "@typescript/typescript/unstable/sync"; +import assert from "node:assert"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { + after, + before, + describe, + test, +} from "node:test"; +import { fileURLToPath } from "node:url"; +import { + areTestsFiltered, + createVirtualFileSystem, +} from "../testUtils.ts"; + +// --------------------------------------------------------------------------- +// Go JSON baseline format +// --------------------------------------------------------------------------- + +interface TokenRun { + startPos: number; + endPos: number; + kind: string; + nodePos: number; + nodeEnd: number; +} + +/** + * Expand run-length encoded Go baseline into a per-position map. + */ +function expandBaseline(runs: TokenRun[]): Map { + const map = new Map(); + for (const run of runs) { + const entry = { kind: run.kind, pos: run.nodePos, end: run.nodeEnd }; + for (let p = run.startPos; p <= run.endPos; p++) { + map.set(p, entry); + } + } + return map; +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** Convert an astnav result node to a string-based token info for comparison. */ +function toTokenInfo(node: Node): { kind: string; pos: number; end: number; } { + return { + kind: formatSyntaxKind(node.kind), + pos: node.pos, + end: node.end, + }; +} + +// --------------------------------------------------------------------------- +// Test configuration +// --------------------------------------------------------------------------- + +const repoRoot = resolve(import.meta.dirname!, "..", "..", "..", ".."); +const testFile = resolve(repoRoot, "tsc/testdata/fixtures/services/mapCode.ts"); +const baselineDir = resolve(repoRoot, "tsc/testdata/baselines/reference/astnav"); + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("astnav", { concurrency: areTestsFiltered() }, () => { + let fileText: string; + + try { + fileText = readFileSync(testFile, "utf-8"); + } + catch { + console.log("Skipping astnav tests: compiler fixtures not available"); + fileText = ""; + } + + if (!fileText) return; + + // Use the Go API to parse the file — the resulting SourceFile is already + // in our SyntaxKind/NodeFlags enum space with correct JSDoc structure. + let api: API; + let sourceFile: SourceFile; + + before(() => { + api = new API({ + cwd: fileURLToPath(new URL("../../../../", import.meta.url).toString()), + fs: createVirtualFileSystem({ + "/tsconfig.json": JSON.stringify({ files: ["/src/testFile.ts"] }), + "/src/testFile.ts": fileText, + }), + }); + + const snapshot = api.createSnapshot({ openProject: "/tsconfig.json" }); + const project = snapshot.getConfiguredProject("/tsconfig.json")!; + const sf = project.program.getSourceFile("/src/testFile.ts"); + assert.ok(sf, "Failed to get source file from API"); + sourceFile = sf; + }); + + after(() => { + api.close(); + }); + + const testCases = [ + { + name: "getTokenAtPosition", + baselineFile: "GetTokenAtPosition.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => getTokenAtPosition(sf, pos) as Node | undefined, + }, + { + name: "getTouchingPropertyName", + baselineFile: "GetTouchingPropertyName.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => getTouchingPropertyName(sf, pos) as Node | undefined, + }, + { + name: "findPrecedingToken", + baselineFile: "FindPrecedingToken.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => findPrecedingToken(sf, pos), + }, + { + name: "findNextToken", + baselineFile: "FindNextToken.mapCode.ts.baseline.json", + fn: (sf: SourceFile, pos: number) => findNextToken(getTokenAtPosition(sf, pos), sf, sf), + }, + ]; + + for (const tc of testCases) { + test(tc.name, () => { + const baselinePath = resolve(baselineDir, tc.baselineFile); + const runs: TokenRun[] = JSON.parse(readFileSync(baselinePath, "utf-8")); + const expected = expandBaseline(runs); + + const failures: string[] = []; + + for (let pos = 0; pos < fileText.length; pos++) { + const node = tc.fn(sourceFile, pos); + const goExpected = expected.get(pos); + + if (!goExpected) continue; + + if (node === undefined) { + failures.push( + ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), got undefined`, + ); + if (failures.length >= 50) { + failures.push(" ... (truncated, too many failures)"); + break; + } + continue; + } + + const result = toTokenInfo(node); + if (result.kind !== goExpected.kind || result.pos !== goExpected.pos || result.end !== goExpected.end) { + failures.push( + ` pos ${pos}: expected ${goExpected.kind} [${goExpected.pos}, ${goExpected.end}), ` + + `got ${result.kind} [${result.pos}, ${result.end})`, + ); + if (failures.length >= 50) { + failures.push(" ... (truncated, too many failures)"); + break; + } + } + } + + console.log(` ${tc.name}: checked ${fileText.length} positions`); + + if (failures.length > 0) { + assert.fail( + `${tc.name}: ${failures.length} position(s) differ from Go baseline:\n` + + failures.join("\n"), + ); + } + }); + } +}); diff --git a/packages/typescript/test/sync/shutdown.test.ts b/packages/typescript/test/sync/shutdown.test.ts index cba2c9d9fa420..f05e643777add 100644 --- a/packages/typescript/test/sync/shutdown.test.ts +++ b/packages/typescript/test/sync/shutdown.test.ts @@ -1,36 +1,36 @@ -import assert from "node:assert"; -import { spawn } from "node:child_process"; -import { test } from "node:test"; - -test("close shuts down the API process cleanly", async () => { - const script = ` - import { API } from "@typescript/typescript/unstable/sync"; - const api = new API({ cwd: process.cwd() }); - api.parseCommandLine([]); - api.close(); - `; - - const results = await Promise.all(Array.from({ length: 20 }, () => runNode(script))); - for (const result of results) { - assert.equal(result.status, 0); - assert.equal(result.stderr, ""); - } -}); - -function runNode(script: string): Promise<{ status: number | null; stderr: string; }> { - return new Promise((resolve, reject) => { - const child = spawn(process.execPath, [ - "--conditions", - "@typescript/source", - "--experimental-strip-types", - "--input-type=module", - "--eval", - script, - ]); - let stderr = ""; - child.stderr.setEncoding("utf8"); - child.stderr.on("data", chunk => stderr += chunk); - child.on("error", reject); - child.on("close", status => resolve({ status, stderr })); - }); -} +import assert from "node:assert"; +import { spawn } from "node:child_process"; +import { test } from "node:test"; + +test("close shuts down the API process cleanly", async () => { + const script = ` + import { API } from "@typescript/typescript/unstable/sync"; + const api = new API({ cwd: process.cwd() }); + api.parseCommandLine([]); + api.close(); + `; + + const results = await Promise.all(Array.from({ length: 20 }, () => runNode(script))); + for (const result of results) { + assert.equal(result.status, 0); + assert.equal(result.stderr, ""); + } +}); + +function runNode(script: string): Promise<{ status: number | null; stderr: string; }> { + return new Promise((resolve, reject) => { + const child = spawn(process.execPath, [ + "--conditions", + "@typescript/source", + "--experimental-strip-types", + "--input-type=module", + "--eval", + script, + ]); + let stderr = ""; + child.stderr.setEncoding("utf8"); + child.stderr.on("data", chunk => stderr += chunk); + child.on("error", reject); + child.on("close", status => resolve({ status, stderr })); + }); +} diff --git a/packages/typescript/test/testUtils.ts b/packages/typescript/test/testUtils.ts index 2d32f5026d278..7dc2ce71e0b26 100644 --- a/packages/typescript/test/testUtils.ts +++ b/packages/typescript/test/testUtils.ts @@ -1,190 +1,190 @@ -import { - type FileSystemCallbacks, - type FileSystemEntries, - serverFS, -} from "../src/api/fs.ts"; -import { - canonicalize, - CaseSensitivity, - getPathComponents, - toRootedFilePath, -} from "../src/api/path.ts"; -import type { - RootedDirectoryPath, - RootedFilePath, - RootedPath, -} from "../src/ast/index.ts"; - -export function areTestsFiltered(): boolean { - return process.execArgv.some(arg => arg === "--test-name-pattern" || arg.startsWith("--test-name-pattern=")); -} - -interface VDirectory { - type: "directory"; - name: string; - children: Record; -} - -interface VFile { - type: "file"; - name: string; -} - -type VNode = VDirectory | VFile; - -interface TestFileSystem extends FileSystemCallbacks { - directoryExists(directoryName: RootedDirectoryPath): boolean; - fileExists(fileName: RootedFilePath): boolean; - getAccessibleEntries(directoryName: RootedDirectoryPath): FileSystemEntries | typeof serverFS.useOS; - readFile(fileName: RootedFilePath): any; - realpath: typeof serverFS.identity; - stat: typeof serverFS.fakeStat; - writeFile(path: RootedFilePath, data: string): void; - removeFile(path: RootedPath): void; -} - -export interface CreateVirtualFileSystemOptions { - caseSensitivity?: CaseSensitivity | undefined; -} - -function createVDirectory(name: string): VDirectory { - return { - type: "directory", - name, - children: Object.create(null) as Record, - }; -} - -export function createVirtualFileSystem( - files: Record, - options: CreateVirtualFileSystemOptions = {}, -): TestFileSystem { - const caseSensitivity = options.caseSensitivity ?? CaseSensitivity.Sensitive; - const root = createVDirectory(""); - const content = new Map(); - - for (const [rawFilePath, data] of Object.entries(files)) { - const filePath = toRootedFilePath(rawFilePath, undefined); - const key = getKey(filePath); - if (content.has(key)) { - throw new Error(`Duplicate virtual filesystem path: ${filePath}`); - } - content.set(key, data); - addToTree(filePath); - } - - return { - directoryExists, - fileExists, - getAccessibleEntries, - readFile, - realpath: serverFS.identity, - stat: serverFS.fakeStat, - writeFile, - removeFile, - }; - - function getKey(path: RootedPath): string { - return canonicalize(path, caseSensitivity); - } - - function getSegmentKey(segment: string): string { - return canonicalize(segment, caseSensitivity); - } - - function getNodeFromPath(path: RootedPath): VNode | undefined { - if (!path || path === "/") { - return root; - } - return getNodeFromSegments(getPathComponents(path).slice(1)); - } - - function getNodeFromSegments(segments: readonly string[]): VNode | undefined { - let current: VNode = root; - for (const segment of segments) { - if (current.type !== "directory") { - return undefined; - } - const child: VNode = current.children[getSegmentKey(segment)]; - if (!child) { - return undefined; - } - current = child; - } - return current; - } - - function ensureDirectory(segments: string[]): VDirectory { - let current: VDirectory = root; - for (const segment of segments) { - const key = getSegmentKey(segment); - if (!current.children[key]) { - current.children[key] = createVDirectory(segment); - } - else if (current.children[key].type !== "directory") { - throw new Error(`Cannot create directory: a file already exists at "/${segments.join("/")}"`); - } - current = current.children[key] as VDirectory; - } - return current; - } - - function addToTree(path: RootedFilePath): void { - const segments = getPathComponents(path).slice(1); - if (segments.length === 0) { - throw new Error(`Invalid file path: "${path}"`); - } - const filename = segments.pop()!; - const dirNode = ensureDirectory(segments); - const key = getSegmentKey(filename); - const existing = dirNode.children[key]; - dirNode.children[key] = { type: "file", name: existing?.name ?? filename }; - } - - function writeFile(path: RootedFilePath, data: string): void { - content.set(getKey(path), data); - addToTree(path); - } - - function removeFile(path: RootedPath): void { - content.delete(getKey(path)); - const segments = getPathComponents(path).slice(1); - if (segments.length === 0) return; - const filename = segments.pop()!; - const dirNode = getNodeFromSegments(segments); - if (dirNode && dirNode.type === "directory") { - delete dirNode.children[getSegmentKey(filename)]; - } - } - - function directoryExists(directoryName: RootedDirectoryPath): boolean { - const node = getNodeFromPath(directoryName); - return !!node && node.type === "directory"; - } - - function fileExists(fileName: RootedFilePath): boolean { - return content.has(getKey(fileName)); - } - - function getAccessibleEntries(directoryName: RootedDirectoryPath): FileSystemEntries | typeof serverFS.useOS { - const node = getNodeFromPath(directoryName); - if (!node || node.type !== "directory") { - return serverFS.useOS; - } - const fileEntries: string[] = []; - const directories: string[] = []; - for (const child of Object.values(node.children)) { - if (child.type === "file") { - fileEntries.push(child.name); - } - else { - directories.push(child.name); - } - } - return { files: fileEntries, directories, symlinks: undefined }; - } - - function readFile(fileName: RootedFilePath): any { - return content.get(getKey(fileName)) ?? serverFS.useOS; - } -} +import { + type FileSystemCallbacks, + type FileSystemEntries, + serverFS, +} from "../src/api/fs.ts"; +import { + canonicalize, + CaseSensitivity, + getPathComponents, + toRootedFilePath, +} from "../src/api/path.ts"; +import type { + RootedDirectoryPath, + RootedFilePath, + RootedPath, +} from "../src/ast/index.ts"; + +export function areTestsFiltered(): boolean { + return process.execArgv.some(arg => arg === "--test-name-pattern" || arg.startsWith("--test-name-pattern=")); +} + +interface VDirectory { + type: "directory"; + name: string; + children: Record; +} + +interface VFile { + type: "file"; + name: string; +} + +type VNode = VDirectory | VFile; + +interface TestFileSystem extends FileSystemCallbacks { + directoryExists(directoryName: RootedDirectoryPath): boolean; + fileExists(fileName: RootedFilePath): boolean; + getAccessibleEntries(directoryName: RootedDirectoryPath): FileSystemEntries | typeof serverFS.useOS; + readFile(fileName: RootedFilePath): any; + realpath: typeof serverFS.identity; + stat: typeof serverFS.fakeStat; + writeFile(path: RootedFilePath, data: string): void; + removeFile(path: RootedPath): void; +} + +export interface CreateVirtualFileSystemOptions { + caseSensitivity?: CaseSensitivity | undefined; +} + +function createVDirectory(name: string): VDirectory { + return { + type: "directory", + name, + children: Object.create(null) as Record, + }; +} + +export function createVirtualFileSystem( + files: Record, + options: CreateVirtualFileSystemOptions = {}, +): TestFileSystem { + const caseSensitivity = options.caseSensitivity ?? CaseSensitivity.Sensitive; + const root = createVDirectory(""); + const content = new Map(); + + for (const [rawFilePath, data] of Object.entries(files)) { + const filePath = toRootedFilePath(rawFilePath, undefined); + const key = getKey(filePath); + if (content.has(key)) { + throw new Error(`Duplicate virtual filesystem path: ${filePath}`); + } + content.set(key, data); + addToTree(filePath); + } + + return { + directoryExists, + fileExists, + getAccessibleEntries, + readFile, + realpath: serverFS.identity, + stat: serverFS.fakeStat, + writeFile, + removeFile, + }; + + function getKey(path: RootedPath): string { + return canonicalize(path, caseSensitivity); + } + + function getSegmentKey(segment: string): string { + return canonicalize(segment, caseSensitivity); + } + + function getNodeFromPath(path: RootedPath): VNode | undefined { + if (!path || path === "/") { + return root; + } + return getNodeFromSegments(getPathComponents(path).slice(1)); + } + + function getNodeFromSegments(segments: readonly string[]): VNode | undefined { + let current: VNode = root; + for (const segment of segments) { + if (current.type !== "directory") { + return undefined; + } + const child: VNode = current.children[getSegmentKey(segment)]; + if (!child) { + return undefined; + } + current = child; + } + return current; + } + + function ensureDirectory(segments: string[]): VDirectory { + let current: VDirectory = root; + for (const segment of segments) { + const key = getSegmentKey(segment); + if (!current.children[key]) { + current.children[key] = createVDirectory(segment); + } + else if (current.children[key].type !== "directory") { + throw new Error(`Cannot create directory: a file already exists at "/${segments.join("/")}"`); + } + current = current.children[key] as VDirectory; + } + return current; + } + + function addToTree(path: RootedFilePath): void { + const segments = getPathComponents(path).slice(1); + if (segments.length === 0) { + throw new Error(`Invalid file path: "${path}"`); + } + const filename = segments.pop()!; + const dirNode = ensureDirectory(segments); + const key = getSegmentKey(filename); + const existing = dirNode.children[key]; + dirNode.children[key] = { type: "file", name: existing?.name ?? filename }; + } + + function writeFile(path: RootedFilePath, data: string): void { + content.set(getKey(path), data); + addToTree(path); + } + + function removeFile(path: RootedPath): void { + content.delete(getKey(path)); + const segments = getPathComponents(path).slice(1); + if (segments.length === 0) return; + const filename = segments.pop()!; + const dirNode = getNodeFromSegments(segments); + if (dirNode && dirNode.type === "directory") { + delete dirNode.children[getSegmentKey(filename)]; + } + } + + function directoryExists(directoryName: RootedDirectoryPath): boolean { + const node = getNodeFromPath(directoryName); + return !!node && node.type === "directory"; + } + + function fileExists(fileName: RootedFilePath): boolean { + return content.has(getKey(fileName)); + } + + function getAccessibleEntries(directoryName: RootedDirectoryPath): FileSystemEntries | typeof serverFS.useOS { + const node = getNodeFromPath(directoryName); + if (!node || node.type !== "directory") { + return serverFS.useOS; + } + const fileEntries: string[] = []; + const directories: string[] = []; + for (const child of Object.values(node.children)) { + if (child.type === "file") { + fileEntries.push(child.name); + } + else { + directories.push(child.name); + } + } + return { files: fileEntries, directories, symlinks: undefined }; + } + + function readFile(fileName: RootedFilePath): any { + return content.get(getKey(fileName)) ?? serverFS.useOS; + } +} diff --git a/packages/typescript/test/types.d.ts b/packages/typescript/test/types.d.ts index e55d60d63ec2d..9d08c5a569815 100644 --- a/packages/typescript/test/types.d.ts +++ b/packages/typescript/test/types.d.ts @@ -1,2 +1,2 @@ -// tinybench fails to forward declare this so --lib dom isn't required -interface DOMHighResTimeStamp {} +// tinybench fails to forward declare this so --lib dom isn't required +interface DOMHighResTimeStamp {} diff --git a/packages/typescript/test/version.test.ts b/packages/typescript/test/version.test.ts index a2630f570a209..c742554719435 100644 --- a/packages/typescript/test/version.test.ts +++ b/packages/typescript/test/version.test.ts @@ -1,19 +1,19 @@ -import getExePath from "#getExePath"; -import { versionMajorMinor } from "@typescript/typescript"; -import assert from "node:assert"; -import { execFileSync } from "node:child_process"; -import { readFileSync } from "node:fs"; -import { test } from "node:test"; - -test("versionMajorMinor runtime and declaration match the compiler version", () => { - const compilerVersion = execFileSync(getExePath(), ["--version"], { encoding: "utf8" }) - .trim() - .replace(/^Version /, ""); - const majorMinor = compilerVersion.split(".", 2).join("."); - const declaration = readFileSync(new URL("../lib/version.d.cts", import.meta.url), "utf8"); - const declarationMatch = declaration.match(/versionMajorMinor = "([^"]+)"/); - - assert.strictEqual(versionMajorMinor, majorMinor); - assert.ok(declarationMatch, "versionMajorMinor declaration not found"); - assert.strictEqual(declarationMatch[1], majorMinor); -}); +import getExePath from "#getExePath"; +import { versionMajorMinor } from "@typescript/typescript"; +import assert from "node:assert"; +import { execFileSync } from "node:child_process"; +import { readFileSync } from "node:fs"; +import { test } from "node:test"; + +test("versionMajorMinor runtime and declaration match the compiler version", () => { + const compilerVersion = execFileSync(getExePath(), ["--version"], { encoding: "utf8" }) + .trim() + .replace(/^Version /, ""); + const majorMinor = compilerVersion.split(".", 2).join("."); + const declaration = readFileSync(new URL("../lib/version.d.cts", import.meta.url), "utf8"); + const declarationMatch = declaration.match(/versionMajorMinor = "([^"]+)"/); + + assert.strictEqual(versionMajorMinor, majorMinor); + assert.ok(declarationMatch, "versionMajorMinor declaration not found"); + assert.strictEqual(declarationMatch[1], majorMinor); +}); diff --git a/packages/typescript/test/wtf8.test.ts b/packages/typescript/test/wtf8.test.ts index 01998913edade..94480e2fd1c1a 100644 --- a/packages/typescript/test/wtf8.test.ts +++ b/packages/typescript/test/wtf8.test.ts @@ -1,99 +1,99 @@ -import assert from "node:assert"; -import { - describe, - test, -} from "node:test"; -import { - MsgpackReader, - MsgpackWriter, -} from "../src/api/node/msgpack.ts"; -import { - encodeWtf8, - Wtf8Decoder, -} from "../src/api/node/wtf8.ts"; -import { areTestsFiltered } from "./testUtils.ts"; - -const concurrency = areTestsFiltered(); - -describe("encodeWtf8", { concurrency }, () => { - test("matches UTF-8 for scalar values", () => { - assert.deepEqual(encodeWtf8("hello 🦀"), new TextEncoder().encode("hello 🦀")); - }); - - test("round-trips lone surrogates", () => { - const text = `high:${String.fromCharCode(0xD800)} low:${String.fromCharCode(0xDFFF)}`; - assert.equal(new Wtf8Decoder().decode(encodeWtf8(text)), text); - }); - - test("preserves surrogate sequence boundaries", () => { - const high = String.fromCharCode(0xD800); - const low = String.fromCharCode(0xDC00); - const cases: readonly [string, string, readonly number[]][] = [ - ["lone high", high, [0xED, 0xA0, 0x80]], - ["lone low", low, [0xED, 0xB0, 0x80]], - ["pair", high + low, [0xF0, 0x90, 0x80, 0x80]], - ["high before pair", high + high + low, [0xED, 0xA0, 0x80, 0xF0, 0x90, 0x80, 0x80]], - ["low after pair", high + low + low, [0xF0, 0x90, 0x80, 0x80, 0xED, 0xB0, 0x80]], - ["replacement character", "\uFFFD", [0xEF, 0xBF, 0xBD]], - ["replacement before lone high", "\uFFFD" + high, [0xEF, 0xBF, 0xBD, 0xED, 0xA0, 0x80]], - ]; - - for (const [name, text, expected] of cases) { - assert.deepEqual([...encodeWtf8(text)], expected, name); - } - }); - - test("encodes large exceptional input into compact byte storage", () => { - const text = "a".repeat(100_000) + String.fromCharCode(0xD800); - const encoded = encodeWtf8(text); - assert.equal(encoded.byteLength, 100_003); - assert.equal(new Wtf8Decoder().decode(encoded), text); - }); -}); - -describe("Wtf8Decoder", { concurrency }, () => { - test("decodes standard UTF-8", () => { - const decoder = new Wtf8Decoder(); - assert.strictEqual(decoder.decode(new TextEncoder().encode("hello 🦀")), "hello 🦀"); - }); - - test("preserves WTF-8 encoded lone surrogates", () => { - const decoder = new Wtf8Decoder(); - const text = decoder.decode(Uint8Array.of( - 0xF0, - 0x9F, - 0xA6, - 0x80, - 0xED, - 0x9F, - 0xBF, - 0xED, - 0xA0, - 0x80, - 0xED, - 0xA0, - 0x81, - 0xED, - 0xB0, - 0x80, - 0xF0, - 0x9F, - 0xA6, - 0x80, - )); - - assert.deepStrictEqual( - Array.from({ length: text.length }, (_, i) => text.charCodeAt(i)), - [0xD83E, 0xDD80, 0xD7FF, 0xD800, 0xD801, 0xDC00, 0xD83E, 0xDD80], - ); - }); -}); - -describe("Msgpack strings", { concurrency }, () => { - test("round-trip lone surrogates", () => { - const text = `high:${String.fromCharCode(0xD800)} low:${String.fromCharCode(0xDFFF)}`; - const writer = new MsgpackWriter(); - writer.writeString(text); - assert.equal(new MsgpackReader(writer.finish()).readString(), text); - }); -}); +import assert from "node:assert"; +import { + describe, + test, +} from "node:test"; +import { + MsgpackReader, + MsgpackWriter, +} from "../src/api/node/msgpack.ts"; +import { + encodeWtf8, + Wtf8Decoder, +} from "../src/api/node/wtf8.ts"; +import { areTestsFiltered } from "./testUtils.ts"; + +const concurrency = areTestsFiltered(); + +describe("encodeWtf8", { concurrency }, () => { + test("matches UTF-8 for scalar values", () => { + assert.deepEqual(encodeWtf8("hello 🦀"), new TextEncoder().encode("hello 🦀")); + }); + + test("round-trips lone surrogates", () => { + const text = `high:${String.fromCharCode(0xD800)} low:${String.fromCharCode(0xDFFF)}`; + assert.equal(new Wtf8Decoder().decode(encodeWtf8(text)), text); + }); + + test("preserves surrogate sequence boundaries", () => { + const high = String.fromCharCode(0xD800); + const low = String.fromCharCode(0xDC00); + const cases: readonly [string, string, readonly number[]][] = [ + ["lone high", high, [0xED, 0xA0, 0x80]], + ["lone low", low, [0xED, 0xB0, 0x80]], + ["pair", high + low, [0xF0, 0x90, 0x80, 0x80]], + ["high before pair", high + high + low, [0xED, 0xA0, 0x80, 0xF0, 0x90, 0x80, 0x80]], + ["low after pair", high + low + low, [0xF0, 0x90, 0x80, 0x80, 0xED, 0xB0, 0x80]], + ["replacement character", "\uFFFD", [0xEF, 0xBF, 0xBD]], + ["replacement before lone high", "\uFFFD" + high, [0xEF, 0xBF, 0xBD, 0xED, 0xA0, 0x80]], + ]; + + for (const [name, text, expected] of cases) { + assert.deepEqual([...encodeWtf8(text)], expected, name); + } + }); + + test("encodes large exceptional input into compact byte storage", () => { + const text = "a".repeat(100_000) + String.fromCharCode(0xD800); + const encoded = encodeWtf8(text); + assert.equal(encoded.byteLength, 100_003); + assert.equal(new Wtf8Decoder().decode(encoded), text); + }); +}); + +describe("Wtf8Decoder", { concurrency }, () => { + test("decodes standard UTF-8", () => { + const decoder = new Wtf8Decoder(); + assert.strictEqual(decoder.decode(new TextEncoder().encode("hello 🦀")), "hello 🦀"); + }); + + test("preserves WTF-8 encoded lone surrogates", () => { + const decoder = new Wtf8Decoder(); + const text = decoder.decode(Uint8Array.of( + 0xF0, + 0x9F, + 0xA6, + 0x80, + 0xED, + 0x9F, + 0xBF, + 0xED, + 0xA0, + 0x80, + 0xED, + 0xA0, + 0x81, + 0xED, + 0xB0, + 0x80, + 0xF0, + 0x9F, + 0xA6, + 0x80, + )); + + assert.deepStrictEqual( + Array.from({ length: text.length }, (_, i) => text.charCodeAt(i)), + [0xD83E, 0xDD80, 0xD7FF, 0xD800, 0xD801, 0xDC00, 0xD83E, 0xDD80], + ); + }); +}); + +describe("Msgpack strings", { concurrency }, () => { + test("round-trip lone surrogates", () => { + const text = `high:${String.fromCharCode(0xD800)} low:${String.fromCharCode(0xDFFF)}`; + const writer = new MsgpackWriter(); + writer.writeString(text); + assert.equal(new MsgpackReader(writer.finish()).readString(), text); + }); +}); diff --git a/packages/vscode-typescript-nightly/LICENSE b/packages/vscode-typescript-nightly/LICENSE index 8746124b27791..edc24fd6e1409 100644 --- a/packages/vscode-typescript-nightly/LICENSE +++ b/packages/vscode-typescript-nightly/LICENSE @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/packages/vscode-typescript/LICENSE b/packages/vscode-typescript/LICENSE index 8746124b27791..edc24fd6e1409 100644 --- a/packages/vscode-typescript/LICENSE +++ b/packages/vscode-typescript/LICENSE @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/packages/vscode-typescript/src/activeJsTsEditorTracker.ts b/packages/vscode-typescript/src/activeJsTsEditorTracker.ts index 5fc065e0202ac..c18d6a97256ce 100644 --- a/packages/vscode-typescript/src/activeJsTsEditorTracker.ts +++ b/packages/vscode-typescript/src/activeJsTsEditorTracker.ts @@ -1,84 +1,84 @@ -import * as vscode from "vscode"; -import { - disabledSchemes, - isJsConfigOrTsConfigFileName, - isSupportedLanguageMode, -} from "./util"; - -/** - * Tracks the active JS/TS editor. - * - * This tries to handle the case where the user focuses in the output view / debug console. - * When this happens, we want to treat the last real focused editor as the active editor, - * instead of using `vscode.window.activeTextEditor`. - */ -export class ActiveJsTsEditorTracker implements vscode.Disposable { - private _activeJsTsEditor: vscode.TextEditor | undefined; - private disposables: vscode.Disposable[] = []; - - private readonly _onDidChangeActiveJsTsEditor = new vscode.EventEmitter(); - public readonly onDidChangeActiveJsTsEditor = this._onDidChangeActiveJsTsEditor.event; - - constructor() { - this.disposables.push(this._onDidChangeActiveJsTsEditor); - this.disposables.push(vscode.window.onDidChangeActiveTextEditor(() => this.update())); - this.disposables.push(vscode.window.onDidChangeVisibleTextEditors(() => this.update())); - this.disposables.push(vscode.window.tabGroups.onDidChangeTabGroups(() => this.update())); - this.update(); - } - - public get activeJsTsEditor(): vscode.TextEditor | undefined { - return this._activeJsTsEditor; - } - - private update(): void { - const editorCandidates = this.getEditorCandidatesForActiveTab(); - const newActiveJsTsEditor = editorCandidates.find(editor => this.isManagedFile(editor)); - if (newActiveJsTsEditor !== undefined && this._activeJsTsEditor !== newActiveJsTsEditor) { - this._activeJsTsEditor = newActiveJsTsEditor; - this._onDidChangeActiveJsTsEditor.fire(this._activeJsTsEditor); - } - } - - private getEditorCandidatesForActiveTab(): vscode.TextEditor[] { - const tab = vscode.window.tabGroups.activeTabGroup.activeTab; - if (!tab) { - return []; - } - - // Basic text editor tab - if (tab.input instanceof vscode.TabInputText) { - const inputUriString = tab.input.uri.toString(); - const editor = vscode.window.visibleTextEditors.find(editor => { - return editor.document.uri.toString() === inputUriString - && editor.viewColumn === tab.group.viewColumn; - }); - return editor ? [editor] : []; - } - - // Diff editor tab - if (tab.input instanceof vscode.TabInputTextDiff) { - const original = tab.input.original; - const modified = tab.input.modified; - return [vscode.window.activeTextEditor, ...vscode.window.visibleTextEditors] - .filter((editor): editor is vscode.TextEditor => editor !== undefined) - .filter(editor => { - return (editor.document.uri.toString() === original.toString() || editor.document.uri.toString() === modified.toString()) - && editor.viewColumn === undefined; - }); - } - - return []; - } - - private isManagedFile(editor: vscode.TextEditor): boolean { - if (disabledSchemes.has(editor.document.uri.scheme)) { - return false; - } - return isSupportedLanguageMode(editor.document) || isJsConfigOrTsConfigFileName(editor.document.fileName); - } - - dispose(): void { - this.disposables.forEach(d => d.dispose()); - } -} +import * as vscode from "vscode"; +import { + disabledSchemes, + isJsConfigOrTsConfigFileName, + isSupportedLanguageMode, +} from "./util"; + +/** + * Tracks the active JS/TS editor. + * + * This tries to handle the case where the user focuses in the output view / debug console. + * When this happens, we want to treat the last real focused editor as the active editor, + * instead of using `vscode.window.activeTextEditor`. + */ +export class ActiveJsTsEditorTracker implements vscode.Disposable { + private _activeJsTsEditor: vscode.TextEditor | undefined; + private disposables: vscode.Disposable[] = []; + + private readonly _onDidChangeActiveJsTsEditor = new vscode.EventEmitter(); + public readonly onDidChangeActiveJsTsEditor = this._onDidChangeActiveJsTsEditor.event; + + constructor() { + this.disposables.push(this._onDidChangeActiveJsTsEditor); + this.disposables.push(vscode.window.onDidChangeActiveTextEditor(() => this.update())); + this.disposables.push(vscode.window.onDidChangeVisibleTextEditors(() => this.update())); + this.disposables.push(vscode.window.tabGroups.onDidChangeTabGroups(() => this.update())); + this.update(); + } + + public get activeJsTsEditor(): vscode.TextEditor | undefined { + return this._activeJsTsEditor; + } + + private update(): void { + const editorCandidates = this.getEditorCandidatesForActiveTab(); + const newActiveJsTsEditor = editorCandidates.find(editor => this.isManagedFile(editor)); + if (newActiveJsTsEditor !== undefined && this._activeJsTsEditor !== newActiveJsTsEditor) { + this._activeJsTsEditor = newActiveJsTsEditor; + this._onDidChangeActiveJsTsEditor.fire(this._activeJsTsEditor); + } + } + + private getEditorCandidatesForActiveTab(): vscode.TextEditor[] { + const tab = vscode.window.tabGroups.activeTabGroup.activeTab; + if (!tab) { + return []; + } + + // Basic text editor tab + if (tab.input instanceof vscode.TabInputText) { + const inputUriString = tab.input.uri.toString(); + const editor = vscode.window.visibleTextEditors.find(editor => { + return editor.document.uri.toString() === inputUriString + && editor.viewColumn === tab.group.viewColumn; + }); + return editor ? [editor] : []; + } + + // Diff editor tab + if (tab.input instanceof vscode.TabInputTextDiff) { + const original = tab.input.original; + const modified = tab.input.modified; + return [vscode.window.activeTextEditor, ...vscode.window.visibleTextEditors] + .filter((editor): editor is vscode.TextEditor => editor !== undefined) + .filter(editor => { + return (editor.document.uri.toString() === original.toString() || editor.document.uri.toString() === modified.toString()) + && editor.viewColumn === undefined; + }); + } + + return []; + } + + private isManagedFile(editor: vscode.TextEditor): boolean { + if (disabledSchemes.has(editor.document.uri.scheme)) { + return false; + } + return isSupportedLanguageMode(editor.document) || isJsConfigOrTsConfigFileName(editor.document.fileName); + } + + dispose(): void { + this.disposables.forEach(d => d.dispose()); + } +} diff --git a/packages/vscode-typescript/src/client.ts b/packages/vscode-typescript/src/client.ts index 9b01257b82765..28a91de5f0436 100644 --- a/packages/vscode-typescript/src/client.ts +++ b/packages/vscode-typescript/src/client.ts @@ -1,747 +1,747 @@ -import * as vscode from "vscode"; - -import { CancellationToken } from "vscode-languageclient"; -import { - ClientCapabilities, - CloseAction, - CloseHandlerResult, - ErrorAction, - ErrorHandler, - ErrorHandlerResult, - LanguageClient, - LanguageClientOptions, - Message, - MessageSignature, - NotebookDocumentFilter, - ServerOptions, - StaticFeature, - TextDocumentFilter, - TransportKind, -} from "vscode-languageclient/node"; - -import { codeLensShowLocationsCommandName } from "./commands"; -import { - configurationMiddleware, - sendNotificationMiddleware, -} from "./configurationMiddleware"; -import type { SerializedContentMapperContribution } from "./contentMapperContributions"; -import { registerMultiDocumentHighlightFeature } from "./languageFeatures/documentHighlight"; -import { registerHoverFeature } from "./languageFeatures/hover"; -import { registerOnAutoInsertFeature } from "./languageFeatures/onAutoInsert"; -import { registerSourceDefinitionFeature } from "./languageFeatures/sourceDefinition"; -import type { LspMiddlewareRegistry } from "./lspMiddleware"; -import * as tr from "./telemetryReporting"; -import { - contentMappersEnabled, - ExeInfo, - getExe, - jsTsLanguageModes, - languageClientName, - readNativePreviewConfig, -} from "./util"; -import { getLanguageForUri } from "./util"; - -// Registration IDs the server uses for content mapper capabilities all share this prefix (see -// RegisterContentMapperExtensions in internal/lsp/server.go). The extension watches for these dynamic -// registrations to learn which file extensions are content-mapped. -const contentMapperRegistrationPrefix = "content-mapper-"; - -// ContentMapperRegisterOptions is the subset of a dynamic registration's options that our server sends -// for content mapper capabilities: a document selector of simple glob-pattern filters (see -// RegisterContentMapperExtensions in internal/lsp/server.go). -interface ContentMapperRegisterOptions { - documentSelector?: ReadonlyArray<{ pattern: string; }>; -} - -// extractPatternFilters reuses the server's glob-pattern filters so the extension's custom providers match -// the same content-mapped files. -function extractPatternFilters(registerOptions: ContentMapperRegisterOptions | undefined): vscode.DocumentFilter[] { - return (registerOptions?.documentSelector ?? []).map(({ pattern }) => ({ pattern })); -} - -export class Client implements vscode.Disposable { - private outputChannel: vscode.LogOutputChannel; - private initializedEventEmitter: vscode.EventEmitter; - private telemetryReporter: tr.TelemetryReporter; - - private documentSelector: Array<{ scheme: string; language: string; }>; - private clientOptions: LanguageClientOptions; - private client?: LanguageClient; - - private isDisposed = false; - private isStopping = false; - private disposables: vscode.Disposable[] = []; - isInitialized = false; - - // Document filters for content-mapped file extensions, keyed by the server's registration ID. These - // augment the static jsTs document selector so the extension's custom language-feature providers - // (hover, multi-document highlight, on-auto-insert) also cover content-mapped files. - private contentMapperFiltersById = new Map(); - // Disposables for the custom providers registered against the current (selector-scoped) document set. - // Re-registered whenever the set of content-mapped extensions changes. - private selectorScopedFeatures: vscode.Disposable[] = []; - - private exe: ExeInfo | undefined; - private errorHandler: ReportingErrorHandler; - - constructor( - outputChannel: vscode.LogOutputChannel, - initializedEventEmitter: vscode.EventEmitter, - telemetryReporter: tr.TelemetryReporter, - private readonly lspMiddleware: LspMiddlewareRegistry, - ) { - this.outputChannel = outputChannel; - this.initializedEventEmitter = initializedEventEmitter; - this.telemetryReporter = telemetryReporter; - this.errorHandler = new ReportingErrorHandler(this.telemetryReporter, 5); - - // Monkey-patch the output channel's error method to capture recent stderr lines. - // When the server crashes, vscode-languageclient pipes stderr to outputChannel.error(), - // so the error handler can include the last N lines in crash telemetry. - const originalError = this.outputChannel.error.bind(this.outputChannel); - this.outputChannel.error = (...args: Parameters) => { - originalError(...args); - this.errorHandler.pushStderrLine(String(args[0])); - }; - - this.documentSelector = [ - ...jsTsLanguageModes.map(language => ({ scheme: "file", language })), - ...jsTsLanguageModes.map(language => ({ scheme: "untitled", language })), - ]; - this.clientOptions = { - documentSelector: this.documentSelector, - outputChannel: this.outputChannel, - initializationOptions: { - codeLensShowLocationsCommandName, - enableTelemetry: true, - logVerbosity: this.outputChannel.logLevel, - runExternalCode: contentMappersEnabled(), - }, - errorHandler: this.errorHandler, - middleware: { - workspace: { - ...configurationMiddleware, - didChangeWatchedFile: (event, next) => { - if (this.isStopping || this.isDisposed) { - return Promise.resolve(); - } - return next(event); - }, - }, - sendNotification: sendNotificationMiddleware, - sendRequest: (type, params, token, next) => this.lspMiddleware.sendRequest(type, params, token, next), - provideHover: () => undefined, - handleRegisterCapability: async (params, next) => { - await next(params, CancellationToken.None); - if (this.trackContentMapperRegistrations(params.registrations)) { - this.registerSelectorScopedFeatures(); - } - }, - handleUnregisterCapability: async (params, next) => { - await next(params, CancellationToken.None); - if (this.trackContentMapperUnregistrations(params.unregisterations)) { - this.registerSelectorScopedFeatures(); - } - }, - }, - diagnosticCollectionName: "typescript-push", - diagnosticPullOptions: { - onChange: true, - onSave: true, - onTabs: true, - match(documentSelector, resource) { - // This function is called when diagnostics are requested but - // only the URI itself is known (e.g. open but not yet focused tabs), - // so will not be present in vscode.workspace.textDocuments. - // See if this file matches without consulting vscode.languages.match - // (which requires a TextDocument). - - const language = getLanguageForUri(resource); - - for (const selector of documentSelector) { - if (typeof selector === "string") { - if (selector === language) { - return true; - } - continue; - } - if (NotebookDocumentFilter.is(selector)) { - continue; - } - if (TextDocumentFilter.is(selector)) { - if (selector.language !== undefined && selector.language !== language) { - continue; - } - - if (selector.scheme !== undefined && selector.scheme !== resource.scheme) { - continue; - } - - if (selector.pattern !== undefined) { - // VS Code's full glob matcher is not available via the API - // (microsoft/vscode#237304), but content mapper registrations only ever - // use simple "**/*" patterns, so match those by suffix. Any other - // pattern falls through to the next selector. - const glob = typeof selector.pattern === "string" ? selector.pattern : selector.pattern.pattern; - const globPrefix = "**/*"; - if (glob.startsWith(globPrefix) && resource.path.endsWith(glob.slice(globPrefix.length))) { - return true; - } - continue; - } - - return true; - } - } - - return false; - }, - }, - }; - } - - async start(exe: ExeInfo): Promise { - this.isStopping = false; - this.exe = exe; - this.outputChannel.appendLine(`Resolved to ${this.exe.path}`); - this.telemetryReporter.sendTelemetryEvent("languageServer.start", { - version: this.exe.version, - }); - - const pprofDir = readNativePreviewConfig("server.pprofDir", undefined) - ?? readNativePreviewConfig("pprofDir", undefined); - const pprofArgs = pprofDir ? ["--pprofDir", pprofDir] : []; - - const flakesFlag = vscode.workspace - .getConfiguration("js/ts") - .get<"panic" | "log" | "never" | "auto">("server.trackFlakyDiagnostics", "auto"); - const effectiveflakesFlag = flakesFlag === "auto" ? (isInsiders() ? "log" : "never") : flakesFlag; - - const goMemLimit = readNativePreviewConfig("server.goMemLimit", undefined) - ?? readNativePreviewConfig("goMemLimit", undefined); - const env = { ...process.env }; - if (goMemLimit) { - // Keep this regex aligned with the pattern in package.json. - if (/^[0-9]+(([KMGT]i)?B)?$/.test(goMemLimit)) { - this.outputChannel.appendLine(`Setting GOMEMLIMIT=${goMemLimit}`); - env.GOMEMLIMIT = goMemLimit; - } - else { - this.outputChannel.error(`Invalid goMemLimit: ${goMemLimit}. Must be a valid memory limit (e.g., '2048MiB', '4GiB'). Not overriding GOMEMLIMIT.`); - } - } - - const serverOptions: ServerOptions = { - run: { - command: this.exe.path, - args: ["--lsp", ...pprofArgs], - transport: TransportKind.stdio, - options: { env }, - }, - debug: { - command: this.exe.path, - args: ["--lsp", ...pprofArgs], - transport: TransportKind.stdio, - options: { env }, - }, - }; - - // Refresh options in case they changed between construction and start. - this.clientOptions.initializationOptions.logVerbosity = this.outputChannel.logLevel; - this.clientOptions.initializationOptions.runExternalCode = contentMappersEnabled(); - this.clientOptions.initializationOptions.trackFlakyDiagnostics = effectiveflakesFlag !== "never" ? (effectiveflakesFlag === "panic" ? 2 : 1) : 0; - - this.client = new NativePreviewLanguageClient( - "js/ts", - languageClientName, - serverOptions, - this.clientOptions, - ); - - // Register a static feature to advertise verbosityLevel support in hover capabilities. - this.client.registerFeature( - { - fillClientCapabilities(capabilities: ClientCapabilities): void { - capabilities.experimental = typeof capabilities.experimental === "object" && capabilities.experimental !== null - ? capabilities.experimental - : {}; - (capabilities.experimental as { hoverVerbosityLevel?: boolean; }).hoverVerbosityLevel = true; - }, - initialize(): void {}, - getState() { - return { kind: "static" as const }; - }, - clear(): void {}, - } satisfies StaticFeature, - ); - - this.outputChannel.appendLine(vscode.l10n.t(`Starting language server...`)); - await this.client.start(); - this.isInitialized = true; - this.initializedEventEmitter.fire(); - - // Send the initial log verbosity level to the server, and update it - // whenever the output channel's log level changes (via the gear icon). - this.sendLogVerbosity(); - const logLevelListener = this.outputChannel.onDidChangeLogLevel(() => { - this.sendLogVerbosity(); - }); - - type TelemetryData = { - eventName: string; - telemetryPurpose: "usage" | "error"; - properties?: Record; - measurements?: Record; - }; - - const serverTelemetryListener = this.client.onTelemetry((d: TelemetryData) => { - switch (d.telemetryPurpose) { - case "usage": - this.telemetryReporter.sendTelemetryEventUntyped(d.eventName, d.properties, d.measurements); - break; - case "error": - this.telemetryReporter.sendTelemetryErrorEventUntyped(d.eventName, d.properties, d.measurements); - break; - default: - const _: never = d.telemetryPurpose; - this.telemetryReporter.sendTelemetryErrorEvent("languageServer.unexpectedTelemetryPurpose", { - telemetryPurpose: String(d.telemetryPurpose), - }); - break; - } - }); - - this.disposables.push( - logLevelListener, - serverTelemetryListener, - registerSourceDefinitionFeature(this.client), - ); - // Register the selector-scoped custom providers (hover, multi-document highlight, on-auto-insert). These start - // scoped to the static jsTs selector and expand as content-mapped extensions register. - this.registerSelectorScopedFeatures(); - } - - // trackContentMapperRegistrations records the content-mapped document filters carried by the server's - // dynamic capability registrations. Returns whether the known set of content-mapper filters changed. - private trackContentMapperRegistrations(registrations: ReadonlyArray<{ id: string; registerOptions?: ContentMapperRegisterOptions; }>): boolean { - let changed = false; - for (const registration of registrations) { - if (!registration.id.startsWith(contentMapperRegistrationPrefix)) { - continue; - } - const filters = extractPatternFilters(registration.registerOptions); - if (filters.length > 0) { - this.contentMapperFiltersById.set(registration.id, filters); - changed = true; - } - else if (this.contentMapperFiltersById.delete(registration.id)) { - changed = true; - } - } - return changed; - } - - // trackContentMapperUnregistrations forgets the filters for any content-mapper registration the server - // has removed. Returns whether the known set of content-mapper filters changed. - private trackContentMapperUnregistrations(unregistrations: ReadonlyArray<{ id: string; }>): boolean { - let changed = false; - for (const unregistration of unregistrations) { - if (this.contentMapperFiltersById.delete(unregistration.id)) { - changed = true; - } - } - return changed; - } - - // selectorScopedDocumentSelector is the static jsTs selector plus every active content-mapper filter, - // deduplicated. The custom providers are registered against it so they also cover content-mapped files. - private selectorScopedDocumentSelector(): vscode.DocumentSelector { - const seen = new Set(); - const filters: vscode.DocumentFilter[] = []; - for (const list of this.contentMapperFiltersById.values()) { - for (const filter of list) { - const key = typeof filter.pattern === "string" ? filter.pattern : JSON.stringify(filter.pattern); - if (!seen.has(key)) { - seen.add(key); - filters.push(filter); - } - } - } - return [...this.documentSelector, ...filters]; - } - - // registerSelectorScopedFeatures (re)registers the custom language-feature providers whose scope must - // track the set of content-mapped extensions. Existing registrations are disposed first. - private registerSelectorScopedFeatures(): void { - for (const disposable of this.selectorScopedFeatures.splice(0)) { - disposable.dispose(); - } - if (!this.client || this.isStopping || this.isDisposed) { - return; - } - const selector = this.selectorScopedDocumentSelector(); - this.selectorScopedFeatures.push( - registerMultiDocumentHighlightFeature(selector, this.client), - registerHoverFeature(selector, this.client), - registerOnAutoInsertFeature(selector, this.client), - ); - } - - async stop(): Promise { - if (this.isDisposed) { - return; - } - this.isStopping = true; - this.isInitialized = false; - for (const disposable of this.selectorScopedFeatures.splice(0)) { - disposable.dispose(); - } - this.contentMapperFiltersById.clear(); - const disposables = this.disposables.splice(0); - await Promise.all(disposables.map(d => d.dispose())); - await this.client?.stop(); - } - - async dispose(): Promise { - if (this.isDisposed) { - return; - } - this.isDisposed = true; - this.isStopping = true; - this.isInitialized = false; - for (const disposable of this.selectorScopedFeatures.splice(0)) { - disposable.dispose(); - } - this.contentMapperFiltersById.clear(); - const disposables = this.disposables.splice(0); - await Promise.all(disposables.map(d => d.dispose())); - await this.client?.dispose(); - } - - getCurrentExe(): { path: string; version: string; } | undefined { - return this.exe; - } - - get serverPid(): number | undefined { - return (this.client as any)?._serverProcess?.pid; - } - - /** - * Initialize an API session and return the socket path for connecting. - * This allows other extensions to get a direct connection to the API server. - */ - async initializeAPISession(pipe?: string): Promise<{ sessionId: string; pipe: string; }> { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - return this.client.sendRequest<{ sessionId: string; pipe: string; }>("custom/initializeAPISession", { pipe }); - } - - /** - * Restart the language server if the executable path has not changed. - * Returns true if a restart was performed. - */ - async tryRestart(context: vscode.ExtensionContext): Promise { - if (!this.client) { - return Promise.reject(new Error(vscode.l10n.t("Language client is not initialized"))); - } - this.isStopping = false; - const exe = await getExe(context); - if (exe.path !== this.exe?.path) { - return false; - } - - this.isInitialized = false; - this.outputChannel.appendLine(vscode.l10n.t("Restarting language server...")); - try { - await this.client.restart(); - } - catch (err) { - this.outputChannel.appendLine(vscode.l10n.t(`Graceful shutdown failed, forcing restart: {0}`, String(err))); - await this.client.start(); - } - this.isInitialized = true; - this.initializedEventEmitter.fire(); - return true; - } - - // Developer/debugging methods - - private sendLogVerbosity(): void { - if (!this.client) { - return; - } - this.client.sendNotification("custom/setLogVerbosity", { - verbosity: this.outputChannel.logLevel, - }); - } - - async runGC(): Promise { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - await this.client.sendRequest("custom/runGC"); - } - - async saveHeapProfile(dir: string): Promise { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - const result = await this.client.sendRequest<{ file: string; }>("custom/saveHeapProfile", { dir }); - return result.file; - } - - async saveAllocProfile(dir: string): Promise { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - const result = await this.client.sendRequest<{ file: string; }>("custom/saveAllocProfile", { dir }); - return result.file; - } - - async startCPUProfile(dir: string): Promise { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - await this.client.sendRequest("custom/startCPUProfile", { dir }); - } - - async stopCPUProfile(): Promise { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - const result = await this.client.sendRequest<{ file: string; }>("custom/stopCPUProfile"); - return result.file; - } - - async getProjectInfo(uri: string, token?: vscode.CancellationToken): Promise<{ configFilePath: string; }> { - if (!this.client) { - throw new Error(vscode.l10n.t("Language client is not initialized")); - } - return this.client.sendRequest<{ configFilePath: string; }>("custom/projectInfo", { - textDocument: { uri }, - }, token); - } - - async setContentMapperContributions(contributions: readonly SerializedContentMapperContribution[], openDocuments: readonly vscode.Uri[]): Promise { - if (!this.client || !this.isInitialized) { - return; - } - await this.client.sendRequest("custom/setContentMapperContributions", { - contributions: contentMappersEnabled() ? contributions : [], - openDocuments: openDocuments.map(uri => ({ uri: uri.toString() })), - }); - } -} - -// Returns true when running on a VS Code Insiders build. -function isInsiders(): boolean { - return vscode.env.uriScheme === "vscode-insiders"; -} - -// LanguageClient subclass that lets the user control whether a failed request -// surfaces an error notification, via the `js/ts.server.showFailedResponses` setting. -class NativePreviewLanguageClient extends LanguageClient { - override handleFailedRequest( - type: MessageSignature, - token: vscode.CancellationToken | undefined, - error: unknown, - defaultValue: T, - showNotification: boolean = true, - throwOnCancel: boolean = false, - ): T { - const setting = vscode.workspace - .getConfiguration("js/ts") - .get<"always" | "never" | "auto">("server.showFailedResponses", "auto"); - const effectiveSetting = setting === "auto" ? (isInsiders() ? "always" : "never") : setting; - - let effectiveShowNotification = showNotification; - switch (effectiveSetting) { - case "never": - effectiveShowNotification = false; - break; - default: - // Use the default behavior (showNotification) for "always" and any unrecognized values. - break; - } - - return super.handleFailedRequest( - type, - token, - error, - defaultValue, - effectiveShowNotification, - throwOnCancel, - ); - } -} - -// Adapted from the default error handler in vscode-languageclient. -class ReportingErrorHandler implements ErrorHandler { - telemetryReporter: tr.TelemetryReporter; - maxRestartCount: number; - restarts: number[]; - private stderrBuffer: string[] = []; - private capturingPanic = false; - private static readonly maxStderrLines = 40; - private static readonly maxStderrLength = 8192; - - constructor(telemetryReporter: tr.TelemetryReporter, maxRestartCount: number) { - this.telemetryReporter = telemetryReporter; - this.maxRestartCount = maxRestartCount; - this.restarts = []; - } - - pushStderrLine(line: string): void { - for (const l of line.split("\n")) { - if (!this.capturingPanic) { - if (/^panic:/.test(l.trimStart())) { - // Clear any stale data from a previous session/panic. - this.stderrBuffer = []; - this.capturingPanic = true; - } - else { - continue; - } - } - if (this.stderrBuffer.length < ReportingErrorHandler.maxStderrLines) { - this.stderrBuffer.push(l); - } - else { - this.capturingPanic = false; - } - } - } - - private consumeStderrBuffer(): string { - const raw = this.stderrBuffer.join("\n"); - this.stderrBuffer = []; - this.capturingPanic = false; - return sanitizeStderr(raw).slice(0, ReportingErrorHandler.maxStderrLength); - } - - error(_error: Error, _message: Message | undefined, count: number | undefined): ErrorHandlerResult | Promise { - let errorAction = ErrorAction.Shutdown; - if (count && count <= 3) { - errorAction = ErrorAction.Continue; - } - - let actionString = ""; - switch (errorAction) { - case ErrorAction.Continue: - actionString = "continue"; - break; - case ErrorAction.Shutdown: - actionString = "shutdown"; - break; - default: - const _: never = errorAction; - } - this.telemetryReporter.sendTelemetryErrorEvent("languageServer.connectionError", { - resultingAction: actionString, - }); - - return { action: errorAction }; - } - - closed(): CloseHandlerResult | Promise { - let resultingAction: CloseAction; - - this.restarts.push(Date.now()); - if (this.restarts.length <= this.maxRestartCount) { - resultingAction = CloseAction.Restart; - } - else { - const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; - if (diff <= 3 * 60 * 1000) { - resultingAction = CloseAction.DoNotRestart; - } - else { - this.restarts.shift(); - resultingAction = CloseAction.Restart; - } - } - - let actionString = ""; - switch (resultingAction) { - case CloseAction.DoNotRestart: - actionString = "doNotRestart"; - break; - case CloseAction.Restart: - actionString = "restart"; - break; - default: - const _: never = resultingAction; - } - const lastStderr = this.consumeStderrBuffer(); - this.telemetryReporter.sendTelemetryErrorEvent("languageServer.connectionClosed", { - resultingAction: actionString, - lastStderr, - }); - - if (resultingAction === CloseAction.DoNotRestart) { - return { - action: resultingAction, - message: vscode.l10n.t(`The TypeScript language server crashed {0} times in the last 3 minutes. The server will not be restarted. See the output for more information.`, String(this.maxRestartCount + 1)), - }; - } - - return { action: resultingAction }; - } -} - -// Matches the server-side sanitizeStackTrace in internal/lsp/stack_sanitizer.go. -// Strips file path prefixes that may contain PII and redacts frames outside of our module. -const genericSecretKeywordRegex = /\b(key|token|signature|sig|pwd)([(\[.|])/gi; - -function sanitizeStderr(stderr: string): string { - if (!stderr) { - return ""; - } - return stderr.split("\n").map(sanitizeStderrLine).join("\n"); -} - -function sanitizeStderrLine(line: string): string { - // Keep "goroutine N [status]:" headers as-is. - if (/^goroutine \d+/.test(line)) { - return line; - } - // Redact the panic message itself — assert messages may contain user data. - // Keep only "panic:" as a marker. - if (/^panic:/.test(line.trimStart())) { - return "panic: (REDACTED)"; - } - // Keep "Server process exited" messages from vscode-languageclient. - if (line.includes("Server process exited")) { - return line; - } - - const leadingWhitespace = line.match(/^(\s*)/)?.[1] ?? ""; - - // Stack frame file path lines look like: \t/full/path/to/file.go:123 +0x40 - // Function lines look like: github.com/microsoft/TypeScript/tsc/internal/foo.Bar(...) - const ourModuleMarker = "TypeScript/tsc/"; - const idx = line.indexOf(ourModuleMarker); - if (idx >= 0) { - let relevantPart = line.slice(idx); - // Strip hex offset suffixes like " +0x40" - relevantPart = relevantPart.replace(/ \+0x[0-9a-fA-F]+$/, ""); - // Strip " in goroutine N" suffixes - relevantPart = relevantPart.replace(/ in goroutine \d+$/, ""); - // Strip function arguments (keep parens empty) - relevantPart = relevantPart.replace(/\([^)]*\)$/, "()"); - // Replace / with |> to defeat path-based secret detection - relevantPart = relevantPart.replace(/\//g, "|>"); - // Defeat generic secret keyword regex - relevantPart = relevantPart.replace(genericSecretKeywordRegex, "$1X_X$2"); - return leadingWhitespace + relevantPart; - } - - // Preserve completely blank lines. - if (line.trim() === "") { - return ""; - } - - // Non-internal frames get fully redacted. - return leadingWhitespace + "(REDACTED)"; -} +import * as vscode from "vscode"; + +import { CancellationToken } from "vscode-languageclient"; +import { + ClientCapabilities, + CloseAction, + CloseHandlerResult, + ErrorAction, + ErrorHandler, + ErrorHandlerResult, + LanguageClient, + LanguageClientOptions, + Message, + MessageSignature, + NotebookDocumentFilter, + ServerOptions, + StaticFeature, + TextDocumentFilter, + TransportKind, +} from "vscode-languageclient/node"; + +import { codeLensShowLocationsCommandName } from "./commands"; +import { + configurationMiddleware, + sendNotificationMiddleware, +} from "./configurationMiddleware"; +import type { SerializedContentMapperContribution } from "./contentMapperContributions"; +import { registerMultiDocumentHighlightFeature } from "./languageFeatures/documentHighlight"; +import { registerHoverFeature } from "./languageFeatures/hover"; +import { registerOnAutoInsertFeature } from "./languageFeatures/onAutoInsert"; +import { registerSourceDefinitionFeature } from "./languageFeatures/sourceDefinition"; +import type { LspMiddlewareRegistry } from "./lspMiddleware"; +import * as tr from "./telemetryReporting"; +import { + contentMappersEnabled, + ExeInfo, + getExe, + jsTsLanguageModes, + languageClientName, + readNativePreviewConfig, +} from "./util"; +import { getLanguageForUri } from "./util"; + +// Registration IDs the server uses for content mapper capabilities all share this prefix (see +// RegisterContentMapperExtensions in internal/lsp/server.go). The extension watches for these dynamic +// registrations to learn which file extensions are content-mapped. +const contentMapperRegistrationPrefix = "content-mapper-"; + +// ContentMapperRegisterOptions is the subset of a dynamic registration's options that our server sends +// for content mapper capabilities: a document selector of simple glob-pattern filters (see +// RegisterContentMapperExtensions in internal/lsp/server.go). +interface ContentMapperRegisterOptions { + documentSelector?: ReadonlyArray<{ pattern: string; }>; +} + +// extractPatternFilters reuses the server's glob-pattern filters so the extension's custom providers match +// the same content-mapped files. +function extractPatternFilters(registerOptions: ContentMapperRegisterOptions | undefined): vscode.DocumentFilter[] { + return (registerOptions?.documentSelector ?? []).map(({ pattern }) => ({ pattern })); +} + +export class Client implements vscode.Disposable { + private outputChannel: vscode.LogOutputChannel; + private initializedEventEmitter: vscode.EventEmitter; + private telemetryReporter: tr.TelemetryReporter; + + private documentSelector: Array<{ scheme: string; language: string; }>; + private clientOptions: LanguageClientOptions; + private client?: LanguageClient; + + private isDisposed = false; + private isStopping = false; + private disposables: vscode.Disposable[] = []; + isInitialized = false; + + // Document filters for content-mapped file extensions, keyed by the server's registration ID. These + // augment the static jsTs document selector so the extension's custom language-feature providers + // (hover, multi-document highlight, on-auto-insert) also cover content-mapped files. + private contentMapperFiltersById = new Map(); + // Disposables for the custom providers registered against the current (selector-scoped) document set. + // Re-registered whenever the set of content-mapped extensions changes. + private selectorScopedFeatures: vscode.Disposable[] = []; + + private exe: ExeInfo | undefined; + private errorHandler: ReportingErrorHandler; + + constructor( + outputChannel: vscode.LogOutputChannel, + initializedEventEmitter: vscode.EventEmitter, + telemetryReporter: tr.TelemetryReporter, + private readonly lspMiddleware: LspMiddlewareRegistry, + ) { + this.outputChannel = outputChannel; + this.initializedEventEmitter = initializedEventEmitter; + this.telemetryReporter = telemetryReporter; + this.errorHandler = new ReportingErrorHandler(this.telemetryReporter, 5); + + // Monkey-patch the output channel's error method to capture recent stderr lines. + // When the server crashes, vscode-languageclient pipes stderr to outputChannel.error(), + // so the error handler can include the last N lines in crash telemetry. + const originalError = this.outputChannel.error.bind(this.outputChannel); + this.outputChannel.error = (...args: Parameters) => { + originalError(...args); + this.errorHandler.pushStderrLine(String(args[0])); + }; + + this.documentSelector = [ + ...jsTsLanguageModes.map(language => ({ scheme: "file", language })), + ...jsTsLanguageModes.map(language => ({ scheme: "untitled", language })), + ]; + this.clientOptions = { + documentSelector: this.documentSelector, + outputChannel: this.outputChannel, + initializationOptions: { + codeLensShowLocationsCommandName, + enableTelemetry: true, + logVerbosity: this.outputChannel.logLevel, + runExternalCode: contentMappersEnabled(), + }, + errorHandler: this.errorHandler, + middleware: { + workspace: { + ...configurationMiddleware, + didChangeWatchedFile: (event, next) => { + if (this.isStopping || this.isDisposed) { + return Promise.resolve(); + } + return next(event); + }, + }, + sendNotification: sendNotificationMiddleware, + sendRequest: (type, params, token, next) => this.lspMiddleware.sendRequest(type, params, token, next), + provideHover: () => undefined, + handleRegisterCapability: async (params, next) => { + await next(params, CancellationToken.None); + if (this.trackContentMapperRegistrations(params.registrations)) { + this.registerSelectorScopedFeatures(); + } + }, + handleUnregisterCapability: async (params, next) => { + await next(params, CancellationToken.None); + if (this.trackContentMapperUnregistrations(params.unregisterations)) { + this.registerSelectorScopedFeatures(); + } + }, + }, + diagnosticCollectionName: "typescript-push", + diagnosticPullOptions: { + onChange: true, + onSave: true, + onTabs: true, + match(documentSelector, resource) { + // This function is called when diagnostics are requested but + // only the URI itself is known (e.g. open but not yet focused tabs), + // so will not be present in vscode.workspace.textDocuments. + // See if this file matches without consulting vscode.languages.match + // (which requires a TextDocument). + + const language = getLanguageForUri(resource); + + for (const selector of documentSelector) { + if (typeof selector === "string") { + if (selector === language) { + return true; + } + continue; + } + if (NotebookDocumentFilter.is(selector)) { + continue; + } + if (TextDocumentFilter.is(selector)) { + if (selector.language !== undefined && selector.language !== language) { + continue; + } + + if (selector.scheme !== undefined && selector.scheme !== resource.scheme) { + continue; + } + + if (selector.pattern !== undefined) { + // VS Code's full glob matcher is not available via the API + // (microsoft/vscode#237304), but content mapper registrations only ever + // use simple "**/*" patterns, so match those by suffix. Any other + // pattern falls through to the next selector. + const glob = typeof selector.pattern === "string" ? selector.pattern : selector.pattern.pattern; + const globPrefix = "**/*"; + if (glob.startsWith(globPrefix) && resource.path.endsWith(glob.slice(globPrefix.length))) { + return true; + } + continue; + } + + return true; + } + } + + return false; + }, + }, + }; + } + + async start(exe: ExeInfo): Promise { + this.isStopping = false; + this.exe = exe; + this.outputChannel.appendLine(`Resolved to ${this.exe.path}`); + this.telemetryReporter.sendTelemetryEvent("languageServer.start", { + version: this.exe.version, + }); + + const pprofDir = readNativePreviewConfig("server.pprofDir", undefined) + ?? readNativePreviewConfig("pprofDir", undefined); + const pprofArgs = pprofDir ? ["--pprofDir", pprofDir] : []; + + const flakesFlag = vscode.workspace + .getConfiguration("js/ts") + .get<"panic" | "log" | "never" | "auto">("server.trackFlakyDiagnostics", "auto"); + const effectiveflakesFlag = flakesFlag === "auto" ? (isInsiders() ? "log" : "never") : flakesFlag; + + const goMemLimit = readNativePreviewConfig("server.goMemLimit", undefined) + ?? readNativePreviewConfig("goMemLimit", undefined); + const env = { ...process.env }; + if (goMemLimit) { + // Keep this regex aligned with the pattern in package.json. + if (/^[0-9]+(([KMGT]i)?B)?$/.test(goMemLimit)) { + this.outputChannel.appendLine(`Setting GOMEMLIMIT=${goMemLimit}`); + env.GOMEMLIMIT = goMemLimit; + } + else { + this.outputChannel.error(`Invalid goMemLimit: ${goMemLimit}. Must be a valid memory limit (e.g., '2048MiB', '4GiB'). Not overriding GOMEMLIMIT.`); + } + } + + const serverOptions: ServerOptions = { + run: { + command: this.exe.path, + args: ["--lsp", ...pprofArgs], + transport: TransportKind.stdio, + options: { env }, + }, + debug: { + command: this.exe.path, + args: ["--lsp", ...pprofArgs], + transport: TransportKind.stdio, + options: { env }, + }, + }; + + // Refresh options in case they changed between construction and start. + this.clientOptions.initializationOptions.logVerbosity = this.outputChannel.logLevel; + this.clientOptions.initializationOptions.runExternalCode = contentMappersEnabled(); + this.clientOptions.initializationOptions.trackFlakyDiagnostics = effectiveflakesFlag !== "never" ? (effectiveflakesFlag === "panic" ? 2 : 1) : 0; + + this.client = new NativePreviewLanguageClient( + "js/ts", + languageClientName, + serverOptions, + this.clientOptions, + ); + + // Register a static feature to advertise verbosityLevel support in hover capabilities. + this.client.registerFeature( + { + fillClientCapabilities(capabilities: ClientCapabilities): void { + capabilities.experimental = typeof capabilities.experimental === "object" && capabilities.experimental !== null + ? capabilities.experimental + : {}; + (capabilities.experimental as { hoverVerbosityLevel?: boolean; }).hoverVerbosityLevel = true; + }, + initialize(): void {}, + getState() { + return { kind: "static" as const }; + }, + clear(): void {}, + } satisfies StaticFeature, + ); + + this.outputChannel.appendLine(vscode.l10n.t(`Starting language server...`)); + await this.client.start(); + this.isInitialized = true; + this.initializedEventEmitter.fire(); + + // Send the initial log verbosity level to the server, and update it + // whenever the output channel's log level changes (via the gear icon). + this.sendLogVerbosity(); + const logLevelListener = this.outputChannel.onDidChangeLogLevel(() => { + this.sendLogVerbosity(); + }); + + type TelemetryData = { + eventName: string; + telemetryPurpose: "usage" | "error"; + properties?: Record; + measurements?: Record; + }; + + const serverTelemetryListener = this.client.onTelemetry((d: TelemetryData) => { + switch (d.telemetryPurpose) { + case "usage": + this.telemetryReporter.sendTelemetryEventUntyped(d.eventName, d.properties, d.measurements); + break; + case "error": + this.telemetryReporter.sendTelemetryErrorEventUntyped(d.eventName, d.properties, d.measurements); + break; + default: + const _: never = d.telemetryPurpose; + this.telemetryReporter.sendTelemetryErrorEvent("languageServer.unexpectedTelemetryPurpose", { + telemetryPurpose: String(d.telemetryPurpose), + }); + break; + } + }); + + this.disposables.push( + logLevelListener, + serverTelemetryListener, + registerSourceDefinitionFeature(this.client), + ); + // Register the selector-scoped custom providers (hover, multi-document highlight, on-auto-insert). These start + // scoped to the static jsTs selector and expand as content-mapped extensions register. + this.registerSelectorScopedFeatures(); + } + + // trackContentMapperRegistrations records the content-mapped document filters carried by the server's + // dynamic capability registrations. Returns whether the known set of content-mapper filters changed. + private trackContentMapperRegistrations(registrations: ReadonlyArray<{ id: string; registerOptions?: ContentMapperRegisterOptions; }>): boolean { + let changed = false; + for (const registration of registrations) { + if (!registration.id.startsWith(contentMapperRegistrationPrefix)) { + continue; + } + const filters = extractPatternFilters(registration.registerOptions); + if (filters.length > 0) { + this.contentMapperFiltersById.set(registration.id, filters); + changed = true; + } + else if (this.contentMapperFiltersById.delete(registration.id)) { + changed = true; + } + } + return changed; + } + + // trackContentMapperUnregistrations forgets the filters for any content-mapper registration the server + // has removed. Returns whether the known set of content-mapper filters changed. + private trackContentMapperUnregistrations(unregistrations: ReadonlyArray<{ id: string; }>): boolean { + let changed = false; + for (const unregistration of unregistrations) { + if (this.contentMapperFiltersById.delete(unregistration.id)) { + changed = true; + } + } + return changed; + } + + // selectorScopedDocumentSelector is the static jsTs selector plus every active content-mapper filter, + // deduplicated. The custom providers are registered against it so they also cover content-mapped files. + private selectorScopedDocumentSelector(): vscode.DocumentSelector { + const seen = new Set(); + const filters: vscode.DocumentFilter[] = []; + for (const list of this.contentMapperFiltersById.values()) { + for (const filter of list) { + const key = typeof filter.pattern === "string" ? filter.pattern : JSON.stringify(filter.pattern); + if (!seen.has(key)) { + seen.add(key); + filters.push(filter); + } + } + } + return [...this.documentSelector, ...filters]; + } + + // registerSelectorScopedFeatures (re)registers the custom language-feature providers whose scope must + // track the set of content-mapped extensions. Existing registrations are disposed first. + private registerSelectorScopedFeatures(): void { + for (const disposable of this.selectorScopedFeatures.splice(0)) { + disposable.dispose(); + } + if (!this.client || this.isStopping || this.isDisposed) { + return; + } + const selector = this.selectorScopedDocumentSelector(); + this.selectorScopedFeatures.push( + registerMultiDocumentHighlightFeature(selector, this.client), + registerHoverFeature(selector, this.client), + registerOnAutoInsertFeature(selector, this.client), + ); + } + + async stop(): Promise { + if (this.isDisposed) { + return; + } + this.isStopping = true; + this.isInitialized = false; + for (const disposable of this.selectorScopedFeatures.splice(0)) { + disposable.dispose(); + } + this.contentMapperFiltersById.clear(); + const disposables = this.disposables.splice(0); + await Promise.all(disposables.map(d => d.dispose())); + await this.client?.stop(); + } + + async dispose(): Promise { + if (this.isDisposed) { + return; + } + this.isDisposed = true; + this.isStopping = true; + this.isInitialized = false; + for (const disposable of this.selectorScopedFeatures.splice(0)) { + disposable.dispose(); + } + this.contentMapperFiltersById.clear(); + const disposables = this.disposables.splice(0); + await Promise.all(disposables.map(d => d.dispose())); + await this.client?.dispose(); + } + + getCurrentExe(): { path: string; version: string; } | undefined { + return this.exe; + } + + get serverPid(): number | undefined { + return (this.client as any)?._serverProcess?.pid; + } + + /** + * Initialize an API session and return the socket path for connecting. + * This allows other extensions to get a direct connection to the API server. + */ + async initializeAPISession(pipe?: string): Promise<{ sessionId: string; pipe: string; }> { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + return this.client.sendRequest<{ sessionId: string; pipe: string; }>("custom/initializeAPISession", { pipe }); + } + + /** + * Restart the language server if the executable path has not changed. + * Returns true if a restart was performed. + */ + async tryRestart(context: vscode.ExtensionContext): Promise { + if (!this.client) { + return Promise.reject(new Error(vscode.l10n.t("Language client is not initialized"))); + } + this.isStopping = false; + const exe = await getExe(context); + if (exe.path !== this.exe?.path) { + return false; + } + + this.isInitialized = false; + this.outputChannel.appendLine(vscode.l10n.t("Restarting language server...")); + try { + await this.client.restart(); + } + catch (err) { + this.outputChannel.appendLine(vscode.l10n.t(`Graceful shutdown failed, forcing restart: {0}`, String(err))); + await this.client.start(); + } + this.isInitialized = true; + this.initializedEventEmitter.fire(); + return true; + } + + // Developer/debugging methods + + private sendLogVerbosity(): void { + if (!this.client) { + return; + } + this.client.sendNotification("custom/setLogVerbosity", { + verbosity: this.outputChannel.logLevel, + }); + } + + async runGC(): Promise { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + await this.client.sendRequest("custom/runGC"); + } + + async saveHeapProfile(dir: string): Promise { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + const result = await this.client.sendRequest<{ file: string; }>("custom/saveHeapProfile", { dir }); + return result.file; + } + + async saveAllocProfile(dir: string): Promise { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + const result = await this.client.sendRequest<{ file: string; }>("custom/saveAllocProfile", { dir }); + return result.file; + } + + async startCPUProfile(dir: string): Promise { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + await this.client.sendRequest("custom/startCPUProfile", { dir }); + } + + async stopCPUProfile(): Promise { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + const result = await this.client.sendRequest<{ file: string; }>("custom/stopCPUProfile"); + return result.file; + } + + async getProjectInfo(uri: string, token?: vscode.CancellationToken): Promise<{ configFilePath: string; }> { + if (!this.client) { + throw new Error(vscode.l10n.t("Language client is not initialized")); + } + return this.client.sendRequest<{ configFilePath: string; }>("custom/projectInfo", { + textDocument: { uri }, + }, token); + } + + async setContentMapperContributions(contributions: readonly SerializedContentMapperContribution[], openDocuments: readonly vscode.Uri[]): Promise { + if (!this.client || !this.isInitialized) { + return; + } + await this.client.sendRequest("custom/setContentMapperContributions", { + contributions: contentMappersEnabled() ? contributions : [], + openDocuments: openDocuments.map(uri => ({ uri: uri.toString() })), + }); + } +} + +// Returns true when running on a VS Code Insiders build. +function isInsiders(): boolean { + return vscode.env.uriScheme === "vscode-insiders"; +} + +// LanguageClient subclass that lets the user control whether a failed request +// surfaces an error notification, via the `js/ts.server.showFailedResponses` setting. +class NativePreviewLanguageClient extends LanguageClient { + override handleFailedRequest( + type: MessageSignature, + token: vscode.CancellationToken | undefined, + error: unknown, + defaultValue: T, + showNotification: boolean = true, + throwOnCancel: boolean = false, + ): T { + const setting = vscode.workspace + .getConfiguration("js/ts") + .get<"always" | "never" | "auto">("server.showFailedResponses", "auto"); + const effectiveSetting = setting === "auto" ? (isInsiders() ? "always" : "never") : setting; + + let effectiveShowNotification = showNotification; + switch (effectiveSetting) { + case "never": + effectiveShowNotification = false; + break; + default: + // Use the default behavior (showNotification) for "always" and any unrecognized values. + break; + } + + return super.handleFailedRequest( + type, + token, + error, + defaultValue, + effectiveShowNotification, + throwOnCancel, + ); + } +} + +// Adapted from the default error handler in vscode-languageclient. +class ReportingErrorHandler implements ErrorHandler { + telemetryReporter: tr.TelemetryReporter; + maxRestartCount: number; + restarts: number[]; + private stderrBuffer: string[] = []; + private capturingPanic = false; + private static readonly maxStderrLines = 40; + private static readonly maxStderrLength = 8192; + + constructor(telemetryReporter: tr.TelemetryReporter, maxRestartCount: number) { + this.telemetryReporter = telemetryReporter; + this.maxRestartCount = maxRestartCount; + this.restarts = []; + } + + pushStderrLine(line: string): void { + for (const l of line.split("\n")) { + if (!this.capturingPanic) { + if (/^panic:/.test(l.trimStart())) { + // Clear any stale data from a previous session/panic. + this.stderrBuffer = []; + this.capturingPanic = true; + } + else { + continue; + } + } + if (this.stderrBuffer.length < ReportingErrorHandler.maxStderrLines) { + this.stderrBuffer.push(l); + } + else { + this.capturingPanic = false; + } + } + } + + private consumeStderrBuffer(): string { + const raw = this.stderrBuffer.join("\n"); + this.stderrBuffer = []; + this.capturingPanic = false; + return sanitizeStderr(raw).slice(0, ReportingErrorHandler.maxStderrLength); + } + + error(_error: Error, _message: Message | undefined, count: number | undefined): ErrorHandlerResult | Promise { + let errorAction = ErrorAction.Shutdown; + if (count && count <= 3) { + errorAction = ErrorAction.Continue; + } + + let actionString = ""; + switch (errorAction) { + case ErrorAction.Continue: + actionString = "continue"; + break; + case ErrorAction.Shutdown: + actionString = "shutdown"; + break; + default: + const _: never = errorAction; + } + this.telemetryReporter.sendTelemetryErrorEvent("languageServer.connectionError", { + resultingAction: actionString, + }); + + return { action: errorAction }; + } + + closed(): CloseHandlerResult | Promise { + let resultingAction: CloseAction; + + this.restarts.push(Date.now()); + if (this.restarts.length <= this.maxRestartCount) { + resultingAction = CloseAction.Restart; + } + else { + const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; + if (diff <= 3 * 60 * 1000) { + resultingAction = CloseAction.DoNotRestart; + } + else { + this.restarts.shift(); + resultingAction = CloseAction.Restart; + } + } + + let actionString = ""; + switch (resultingAction) { + case CloseAction.DoNotRestart: + actionString = "doNotRestart"; + break; + case CloseAction.Restart: + actionString = "restart"; + break; + default: + const _: never = resultingAction; + } + const lastStderr = this.consumeStderrBuffer(); + this.telemetryReporter.sendTelemetryErrorEvent("languageServer.connectionClosed", { + resultingAction: actionString, + lastStderr, + }); + + if (resultingAction === CloseAction.DoNotRestart) { + return { + action: resultingAction, + message: vscode.l10n.t(`The TypeScript language server crashed {0} times in the last 3 minutes. The server will not be restarted. See the output for more information.`, String(this.maxRestartCount + 1)), + }; + } + + return { action: resultingAction }; + } +} + +// Matches the server-side sanitizeStackTrace in internal/lsp/stack_sanitizer.go. +// Strips file path prefixes that may contain PII and redacts frames outside of our module. +const genericSecretKeywordRegex = /\b(key|token|signature|sig|pwd)([(\[.|])/gi; + +function sanitizeStderr(stderr: string): string { + if (!stderr) { + return ""; + } + return stderr.split("\n").map(sanitizeStderrLine).join("\n"); +} + +function sanitizeStderrLine(line: string): string { + // Keep "goroutine N [status]:" headers as-is. + if (/^goroutine \d+/.test(line)) { + return line; + } + // Redact the panic message itself — assert messages may contain user data. + // Keep only "panic:" as a marker. + if (/^panic:/.test(line.trimStart())) { + return "panic: (REDACTED)"; + } + // Keep "Server process exited" messages from vscode-languageclient. + if (line.includes("Server process exited")) { + return line; + } + + const leadingWhitespace = line.match(/^(\s*)/)?.[1] ?? ""; + + // Stack frame file path lines look like: \t/full/path/to/file.go:123 +0x40 + // Function lines look like: github.com/microsoft/TypeScript/tsc/internal/foo.Bar(...) + const ourModuleMarker = "TypeScript/tsc/"; + const idx = line.indexOf(ourModuleMarker); + if (idx >= 0) { + let relevantPart = line.slice(idx); + // Strip hex offset suffixes like " +0x40" + relevantPart = relevantPart.replace(/ \+0x[0-9a-fA-F]+$/, ""); + // Strip " in goroutine N" suffixes + relevantPart = relevantPart.replace(/ in goroutine \d+$/, ""); + // Strip function arguments (keep parens empty) + relevantPart = relevantPart.replace(/\([^)]*\)$/, "()"); + // Replace / with |> to defeat path-based secret detection + relevantPart = relevantPart.replace(/\//g, "|>"); + // Defeat generic secret keyword regex + relevantPart = relevantPart.replace(genericSecretKeywordRegex, "$1X_X$2"); + return leadingWhitespace + relevantPart; + } + + // Preserve completely blank lines. + if (line.trim() === "") { + return ""; + } + + // Non-internal frames get fully redacted. + return leadingWhitespace + "(REDACTED)"; +} diff --git a/packages/vscode-typescript/src/commands.ts b/packages/vscode-typescript/src/commands.ts index de015f116bd64..c1edb4a0f6f59 100644 --- a/packages/vscode-typescript/src/commands.ts +++ b/packages/vscode-typescript/src/commands.ts @@ -1,99 +1,99 @@ -import * as vscode from "vscode"; - -import type { - DocumentUri, - Location, - Position, -} from "vscode-languageclient"; - -import type * as tr from "./telemetryReporting"; -import { - getExplicitConfigTarget, - restartExtHostOnChangeIfNeeded, -} from "./util"; - -export function registerEnablementCommands(context: vscode.ExtensionContext, telemetryReporter: tr.TelemetryReporter, stopSession: () => Promise): void { - context.subscriptions.push(vscode.commands.registerCommand("typescript.native-preview.enable", () => { - // Fire and forget, because this will restart the extension host and cause an error if we await - telemetryReporter.sendTelemetryEvent("command.enableNativePreview"); - updateUseTsgoSetting(true); - })); - - context.subscriptions.push(vscode.commands.registerCommand("typescript.native-preview.disable", async () => { - telemetryReporter.sendTelemetryEvent("command.disableNativePreview"); - await stopSession(); - await updateUseTsgoSetting(false); - })); -} - -/** - * Updates the TypeScript 7 setting and reloads extension host. - * Handles both `js/ts.experimental.useTsgo` and `typescript.experimental.useTsgo`. - */ -export async function updateUseTsgoSetting(enable: boolean): Promise { - const jsTsConfig = vscode.workspace.getConfiguration("js/ts"); - const tsConfig = vscode.workspace.getConfiguration("typescript"); - - const jsTsTarget = getExplicitConfigTarget(jsTsConfig, "experimental.useTsgo"); - const tsTarget = getExplicitConfigTarget(tsConfig, "experimental.useTsgo"); - - // If any are defined, we'll use the most-specific target, - // but we'll only set it through `js/ts`. - const updates: Thenable[] = []; - if (jsTsTarget !== undefined || tsTarget !== undefined) { - const mostSpecificTarget = Math.max( - jsTsTarget ?? vscode.ConfigurationTarget.Global, - tsTarget ?? vscode.ConfigurationTarget.Global, - ); - - updates.push(jsTsConfig.update("experimental.useTsgo", enable, mostSpecificTarget)); - - // If `typescript` had the most-specific target - // (or shared the most-specific target), then - // we'll erase that since we've just set `js/ts` above. - if (tsTarget === mostSpecificTarget) { - updates.push(tsConfig.update("experimental.useTsgo", undefined, mostSpecificTarget)); - } - - await Promise.all(updates); - } - else { - await jsTsConfig.update("experimental.useTsgo", enable, vscode.ConfigurationTarget.Global); - } - - return restartExtHostOnChangeIfNeeded(); -} - -export async function updateWorkspaceUseTsgoSetting(enable: boolean): Promise { - await vscode.workspace.getConfiguration("js/ts").update("experimental.useTsgo", enable, vscode.ConfigurationTarget.Workspace); - return restartExtHostOnChangeIfNeeded(); -} - -export const codeLensShowLocationsCommandName = "typescript.native-preview.codeLens.showLocations"; -export function registerCodeLensShowLocationsCommand(): vscode.Disposable { - return vscode.commands.registerCommand(codeLensShowLocationsCommandName, showCodeLensLocations); - - function showCodeLensLocations(...args: unknown[]): void { - if (args.length !== 3) { - throw new Error(vscode.l10n.t("Unexpected number of arguments.")); - } - - const lspUri = args[0] as DocumentUri; - const lspPosition = args[1] as Position; - const lspLocations = args[2] as Location[]; - - const editorUri = vscode.Uri.parse(lspUri); - const editorPosition = new vscode.Position(lspPosition.line, lspPosition.character); - const editorLocations = lspLocations.map(loc => - new vscode.Location( - vscode.Uri.parse(loc.uri), - new vscode.Range( - new vscode.Position(loc.range.start.line, loc.range.start.character), - new vscode.Position(loc.range.end.line, loc.range.end.character), - ), - ) - ); - - vscode.commands.executeCommand("editor.action.showReferences", editorUri, editorPosition, editorLocations); - } -} +import * as vscode from "vscode"; + +import type { + DocumentUri, + Location, + Position, +} from "vscode-languageclient"; + +import type * as tr from "./telemetryReporting"; +import { + getExplicitConfigTarget, + restartExtHostOnChangeIfNeeded, +} from "./util"; + +export function registerEnablementCommands(context: vscode.ExtensionContext, telemetryReporter: tr.TelemetryReporter, stopSession: () => Promise): void { + context.subscriptions.push(vscode.commands.registerCommand("typescript.native-preview.enable", () => { + // Fire and forget, because this will restart the extension host and cause an error if we await + telemetryReporter.sendTelemetryEvent("command.enableNativePreview"); + updateUseTsgoSetting(true); + })); + + context.subscriptions.push(vscode.commands.registerCommand("typescript.native-preview.disable", async () => { + telemetryReporter.sendTelemetryEvent("command.disableNativePreview"); + await stopSession(); + await updateUseTsgoSetting(false); + })); +} + +/** + * Updates the TypeScript 7 setting and reloads extension host. + * Handles both `js/ts.experimental.useTsgo` and `typescript.experimental.useTsgo`. + */ +export async function updateUseTsgoSetting(enable: boolean): Promise { + const jsTsConfig = vscode.workspace.getConfiguration("js/ts"); + const tsConfig = vscode.workspace.getConfiguration("typescript"); + + const jsTsTarget = getExplicitConfigTarget(jsTsConfig, "experimental.useTsgo"); + const tsTarget = getExplicitConfigTarget(tsConfig, "experimental.useTsgo"); + + // If any are defined, we'll use the most-specific target, + // but we'll only set it through `js/ts`. + const updates: Thenable[] = []; + if (jsTsTarget !== undefined || tsTarget !== undefined) { + const mostSpecificTarget = Math.max( + jsTsTarget ?? vscode.ConfigurationTarget.Global, + tsTarget ?? vscode.ConfigurationTarget.Global, + ); + + updates.push(jsTsConfig.update("experimental.useTsgo", enable, mostSpecificTarget)); + + // If `typescript` had the most-specific target + // (or shared the most-specific target), then + // we'll erase that since we've just set `js/ts` above. + if (tsTarget === mostSpecificTarget) { + updates.push(tsConfig.update("experimental.useTsgo", undefined, mostSpecificTarget)); + } + + await Promise.all(updates); + } + else { + await jsTsConfig.update("experimental.useTsgo", enable, vscode.ConfigurationTarget.Global); + } + + return restartExtHostOnChangeIfNeeded(); +} + +export async function updateWorkspaceUseTsgoSetting(enable: boolean): Promise { + await vscode.workspace.getConfiguration("js/ts").update("experimental.useTsgo", enable, vscode.ConfigurationTarget.Workspace); + return restartExtHostOnChangeIfNeeded(); +} + +export const codeLensShowLocationsCommandName = "typescript.native-preview.codeLens.showLocations"; +export function registerCodeLensShowLocationsCommand(): vscode.Disposable { + return vscode.commands.registerCommand(codeLensShowLocationsCommandName, showCodeLensLocations); + + function showCodeLensLocations(...args: unknown[]): void { + if (args.length !== 3) { + throw new Error(vscode.l10n.t("Unexpected number of arguments.")); + } + + const lspUri = args[0] as DocumentUri; + const lspPosition = args[1] as Position; + const lspLocations = args[2] as Location[]; + + const editorUri = vscode.Uri.parse(lspUri); + const editorPosition = new vscode.Position(lspPosition.line, lspPosition.character); + const editorLocations = lspLocations.map(loc => + new vscode.Location( + vscode.Uri.parse(loc.uri), + new vscode.Range( + new vscode.Position(loc.range.start.line, loc.range.start.character), + new vscode.Position(loc.range.end.line, loc.range.end.character), + ), + ) + ); + + vscode.commands.executeCommand("editor.action.showReferences", editorUri, editorPosition, editorLocations); + } +} diff --git a/packages/vscode-typescript/src/configurationMiddleware.ts b/packages/vscode-typescript/src/configurationMiddleware.ts index 643d300be04ce..6e19ad92b3eb5 100644 --- a/packages/vscode-typescript/src/configurationMiddleware.ts +++ b/packages/vscode-typescript/src/configurationMiddleware.ts @@ -1,325 +1,325 @@ -import * as vscode from "vscode"; - -import type { ConfigurationMiddleware } from "vscode-languageclient/node"; -import type { MessageSignature } from "vscode-languageserver-protocol"; - -/** - * Configuration middleware for the TypeScript language server. - * - * The default vscode-languageclient handler uses `getConfiguration().get()`, which - * returns "fully resolved" values including VS Code defaults. This is problematic - * because the server has its own defaults, and receiving VS Code's prevents the - * server from distinguishing user-set values from defaults. - * - * This module instead uses `inspect()` to retrieve both explicitly-set values (user/ - * workspace/workspace-folder settings) and VS Code default values from all three - * configuration sections, then merges them with the correct precedence: - * sections: js/ts > typescript > javascript - * values: explicit > default - * - * Both the `workspace/configuration` (pull) and `workspace/didChangeConfiguration` - * (push) middlewares return/send the same merged object for every requested section. - */ - -// Sections merged together. Earlier sections take precedence over later ones. -const configSections = ["js/ts", "typescript", "javascript"]; - -const configAliases = [ - ["validate.enabled", "validate.enable"], - ["format.enabled", "format.enable"], - ["autoClosingTags.enabled", "autoClosingTags"], - ["suggest.jsdoc.enabled", "suggest.completeJSDocs"], -] as const; - -/** - * Build a single merged configuration object from all config sections. - * - * For each key, the value is chosen with this precedence (highest first): - * 1. js/ts explicit 2. typescript explicit 3. javascript explicit - * 4. js/ts default 5. typescript default 6. javascript default - * - * This ensures user-set values always win, and declared-but-unset settings - * still get their default with the right section precedence. - */ -function getMergedConfiguration(resource: vscode.Uri | undefined): Record { - const configs = configSections.map(section => getInspectedConfiguration(section, resource)); - const legacyNativePreviewConfig = getInspectedConfiguration("typescript.native-preview", resource); - - // Defaults: javascript < typescript < js/ts - let defaults: Record = Object.create(null); - for (let i = configs.length - 1; i >= 0; i--) { - if (configs[i].defaults !== null) { - defaults = deepMerge(defaults, configs[i].defaults!); - } - } - - // Explicit values: javascript < typescript < js/ts - let explicit: Record = Object.create(null); - for (let i = configs.length - 1; i >= 0; i--) { - if (configs[i].explicit !== null) { - applyConfigAliases(configs[i].explicit!); - explicit = deepMerge(explicit, configs[i].explicit!); - } - } - - if (explicit.customConfigFileName === undefined) { - const legacyCustomConfigFileName = legacyNativePreviewConfig.explicit?.customConfigFileName; - if (legacyCustomConfigFileName !== undefined) { - explicit.customConfigFileName = legacyCustomConfigFileName; - } - } - if (explicit.trace?.server === undefined) { - const legacyTraceServer = legacyNativePreviewConfig.explicit?.trace?.server; - if (legacyTraceServer !== undefined) { - explicit.trace ??= Object.create(null); - explicit.trace.server = legacyTraceServer; - } - } - - return deepMerge(defaults, explicit); -} - -/** - * Given a configuration section name (e.g., "typescript"), use vscode's - * inspect API to collect both explicitly-set values and default values, - * returning them as separate nested objects. - */ -function getInspectedConfiguration( - section: string, - resource: vscode.Uri | undefined, -): { explicit: Record | null; defaults: Record | null; } { - const config = vscode.workspace.getConfiguration(section, resource); - // Use Object.create(null) so these objects have no prototype to pollute. - const explicit: Record = Object.create(null); - const defaults: Record = Object.create(null); - let hasExplicit = false; - let hasDefaults = false; - - const allKeys = collectConfigurationKeys(config); - - for (const key of allKeys) { - const inspection = config.inspect(key); - if (!inspection) { - continue; - } - - // Pick the most specific explicitly-set value. - // Language-specific overrides (e.g. [typescript]) take precedence - // over non-language values at the same scope. - const explicitValue = inspection.workspaceFolderLanguageValue - ?? inspection.workspaceFolderValue - ?? inspection.workspaceLanguageValue - ?? inspection.workspaceValue - ?? inspection.globalLanguageValue - ?? inspection.globalValue; - - if (explicitValue !== undefined) { - setNestedValue(explicit, key, toJSONObject(explicitValue)); - hasExplicit = true; - } - else if (inspection.defaultValue !== undefined) { - setNestedValue(defaults, key, toJSONObject(inspection.defaultValue)); - hasDefaults = true; - } - } - - return { - explicit: hasExplicit ? explicit : null, - defaults: hasDefaults ? defaults : null, - }; -} - -/** - * Collect all leaf key paths from a workspace configuration section. - */ -function collectConfigurationKeys(config: vscode.WorkspaceConfiguration): string[] { - const keys: string[] = []; - const configMethods = new Set(["get", "has", "inspect", "update"]); - - function walk(obj: any, prefix: string) { - if (obj === null || obj === undefined || typeof obj !== "object" || Array.isArray(obj)) { - return; - } - for (const key of Object.keys(obj)) { - if (configMethods.has(key)) { - continue; - } - const fullKey = prefix ? `${prefix}.${key}` : key; - const value = obj[key]; - if (value !== null && typeof value === "object" && !Array.isArray(value)) { - walk(value, fullKey); - } - else { - keys.push(fullKey); - } - } - } - - walk(config, ""); - return keys; -} - -const prototypeKeys = new Set(["__proto__", "constructor", "prototype"]); - -function setNestedValue(obj: Record, dottedKey: string, value: any): void { - const parts = dottedKey.split("."); - let current = obj; - for (let i = 0; i < parts.length - 1; i++) { - const part = parts[i]; - if (prototypeKeys.has(part)) { - return; - } - if (!(part in current) || typeof current[part] !== "object" || current[part] === null) { - current[part] = Object.create(null); - } - current = current[part]; - } - const lastPart = parts[parts.length - 1]; - if (!prototypeKeys.has(lastPart)) { - current[lastPart] = value; - } -} - -function getNestedValue(obj: Record, dottedKey: string): any { - const parts = dottedKey.split("."); - let current: any = obj; - for (const part of parts) { - if (prototypeKeys.has(part) || current === null || typeof current !== "object" || !(part in current)) { - return undefined; - } - current = current[part]; - } - return current; -} - -function applyConfigAliases(explicit: Record): void { - for (const [preferred, fallback] of configAliases) { - if (getNestedValue(explicit, preferred) === undefined) { - const fallbackValue = getNestedValue(explicit, fallback); - if (fallbackValue !== undefined) { - setNestedValue(explicit, preferred, fallbackValue); - } - } - } -} - -/** - * Deep merge b into a. Values in b take precedence over values in a. - * Returns a new object; does not mutate inputs. - */ -function deepMerge(a: Record, b: Record): Record { - // Use Object.create(null) so the result has no prototype to pollute. - const result: Record = Object.create(null); - Object.assign(result, a); - for (const key of Object.keys(b)) { - if (prototypeKeys.has(key)) { - continue; - } - if ( - key in result - && result[key] !== null && typeof result[key] === "object" && !Array.isArray(result[key]) - && b[key] !== null && typeof b[key] === "object" && !Array.isArray(b[key]) - ) { - result[key] = deepMerge(result[key], b[key]); - } - else { - result[key] = b[key]; - } - } - return result; -} - -function toJSONObject(obj: any): any { - if (obj === null || obj === undefined) { - return obj; - } - if (Array.isArray(obj)) { - return obj.map(toJSONObject); - } - if (typeof obj === "object") { - const res: Record = Object.create(null); - for (const key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - res[key] = toJSONObject(obj[key]); - } - } - return res; - } - return obj; -} - -const configSectionsSet: ReadonlySet = new Set(configSections); - -/** - * Intercepts workspace/configuration requests. For items requesting one of - * the JS/TS config sections, returns the merged explicit configuration - * (js/ts > typescript > javascript). For any other section, delegates to - * the default handler via `next`. - */ -export const configurationMiddleware: ConfigurationMiddleware = { - async configuration(params, token, next) { - const hasNonJsTs = params.items.some( - item => item.section === undefined || !configSectionsSet.has(item.section), - ); - - // If all items are JS/TS sections, no need to call next. - let defaultResults: any[] | undefined; - if (hasNonJsTs) { - const res = await next(params, token); - if (Array.isArray(res)) { - defaultResults = res; - } - } - - // Cache merged config per resource URI to avoid redundant recalculation. - const mergedCache = new Map>(); - function getMergedCached(resource: vscode.Uri | undefined): Record { - const key = resource?.toString() ?? ""; - let cached = mergedCache.get(key); - if (cached === undefined) { - cached = getMergedConfiguration(resource); - mergedCache.set(key, cached); - } - return cached; - } - - const result: any[] = params.items.map((item, i) => { - if (item.section !== undefined && configSectionsSet.has(item.section)) { - const resource = item.scopeUri ? vscode.Uri.parse(item.scopeUri) : undefined; - return getMergedCached(resource); - } - return defaultResults?.[i] ?? null; - }); - - return result; - }, -}; - -/** - * Intercepts outgoing workspace/didChangeConfiguration notifications. - * Replaces the default settings (which include VS Code defaults) with - * the merged configuration, keyed by section name. - * - * This is typed as returning `Promise` rather than `void` because the - * `didChangeConfiguration` notification is misannotated in vscode-languageclient - * as returning void, so we must go through `sendNotification` instead. - */ -export function sendNotificationMiddleware( - type: string | MessageSignature, - next: (type: string | MessageSignature, params?: any) => Promise, - params: any, -): Promise { - const method = typeof type === "string" ? type : type.method; - if (method === "workspace/didChangeConfiguration") { - const merged = getMergedConfiguration(undefined); - const settings: Record = {}; - for (const section of configSections) { - settings[section] = merged; - } - if (params?.settings?.editor !== undefined) { - settings.editor = params.settings.editor; - } - return next(type, { settings }); - } - return next(type, params); -} +import * as vscode from "vscode"; + +import type { ConfigurationMiddleware } from "vscode-languageclient/node"; +import type { MessageSignature } from "vscode-languageserver-protocol"; + +/** + * Configuration middleware for the TypeScript language server. + * + * The default vscode-languageclient handler uses `getConfiguration().get()`, which + * returns "fully resolved" values including VS Code defaults. This is problematic + * because the server has its own defaults, and receiving VS Code's prevents the + * server from distinguishing user-set values from defaults. + * + * This module instead uses `inspect()` to retrieve both explicitly-set values (user/ + * workspace/workspace-folder settings) and VS Code default values from all three + * configuration sections, then merges them with the correct precedence: + * sections: js/ts > typescript > javascript + * values: explicit > default + * + * Both the `workspace/configuration` (pull) and `workspace/didChangeConfiguration` + * (push) middlewares return/send the same merged object for every requested section. + */ + +// Sections merged together. Earlier sections take precedence over later ones. +const configSections = ["js/ts", "typescript", "javascript"]; + +const configAliases = [ + ["validate.enabled", "validate.enable"], + ["format.enabled", "format.enable"], + ["autoClosingTags.enabled", "autoClosingTags"], + ["suggest.jsdoc.enabled", "suggest.completeJSDocs"], +] as const; + +/** + * Build a single merged configuration object from all config sections. + * + * For each key, the value is chosen with this precedence (highest first): + * 1. js/ts explicit 2. typescript explicit 3. javascript explicit + * 4. js/ts default 5. typescript default 6. javascript default + * + * This ensures user-set values always win, and declared-but-unset settings + * still get their default with the right section precedence. + */ +function getMergedConfiguration(resource: vscode.Uri | undefined): Record { + const configs = configSections.map(section => getInspectedConfiguration(section, resource)); + const legacyNativePreviewConfig = getInspectedConfiguration("typescript.native-preview", resource); + + // Defaults: javascript < typescript < js/ts + let defaults: Record = Object.create(null); + for (let i = configs.length - 1; i >= 0; i--) { + if (configs[i].defaults !== null) { + defaults = deepMerge(defaults, configs[i].defaults!); + } + } + + // Explicit values: javascript < typescript < js/ts + let explicit: Record = Object.create(null); + for (let i = configs.length - 1; i >= 0; i--) { + if (configs[i].explicit !== null) { + applyConfigAliases(configs[i].explicit!); + explicit = deepMerge(explicit, configs[i].explicit!); + } + } + + if (explicit.customConfigFileName === undefined) { + const legacyCustomConfigFileName = legacyNativePreviewConfig.explicit?.customConfigFileName; + if (legacyCustomConfigFileName !== undefined) { + explicit.customConfigFileName = legacyCustomConfigFileName; + } + } + if (explicit.trace?.server === undefined) { + const legacyTraceServer = legacyNativePreviewConfig.explicit?.trace?.server; + if (legacyTraceServer !== undefined) { + explicit.trace ??= Object.create(null); + explicit.trace.server = legacyTraceServer; + } + } + + return deepMerge(defaults, explicit); +} + +/** + * Given a configuration section name (e.g., "typescript"), use vscode's + * inspect API to collect both explicitly-set values and default values, + * returning them as separate nested objects. + */ +function getInspectedConfiguration( + section: string, + resource: vscode.Uri | undefined, +): { explicit: Record | null; defaults: Record | null; } { + const config = vscode.workspace.getConfiguration(section, resource); + // Use Object.create(null) so these objects have no prototype to pollute. + const explicit: Record = Object.create(null); + const defaults: Record = Object.create(null); + let hasExplicit = false; + let hasDefaults = false; + + const allKeys = collectConfigurationKeys(config); + + for (const key of allKeys) { + const inspection = config.inspect(key); + if (!inspection) { + continue; + } + + // Pick the most specific explicitly-set value. + // Language-specific overrides (e.g. [typescript]) take precedence + // over non-language values at the same scope. + const explicitValue = inspection.workspaceFolderLanguageValue + ?? inspection.workspaceFolderValue + ?? inspection.workspaceLanguageValue + ?? inspection.workspaceValue + ?? inspection.globalLanguageValue + ?? inspection.globalValue; + + if (explicitValue !== undefined) { + setNestedValue(explicit, key, toJSONObject(explicitValue)); + hasExplicit = true; + } + else if (inspection.defaultValue !== undefined) { + setNestedValue(defaults, key, toJSONObject(inspection.defaultValue)); + hasDefaults = true; + } + } + + return { + explicit: hasExplicit ? explicit : null, + defaults: hasDefaults ? defaults : null, + }; +} + +/** + * Collect all leaf key paths from a workspace configuration section. + */ +function collectConfigurationKeys(config: vscode.WorkspaceConfiguration): string[] { + const keys: string[] = []; + const configMethods = new Set(["get", "has", "inspect", "update"]); + + function walk(obj: any, prefix: string) { + if (obj === null || obj === undefined || typeof obj !== "object" || Array.isArray(obj)) { + return; + } + for (const key of Object.keys(obj)) { + if (configMethods.has(key)) { + continue; + } + const fullKey = prefix ? `${prefix}.${key}` : key; + const value = obj[key]; + if (value !== null && typeof value === "object" && !Array.isArray(value)) { + walk(value, fullKey); + } + else { + keys.push(fullKey); + } + } + } + + walk(config, ""); + return keys; +} + +const prototypeKeys = new Set(["__proto__", "constructor", "prototype"]); + +function setNestedValue(obj: Record, dottedKey: string, value: any): void { + const parts = dottedKey.split("."); + let current = obj; + for (let i = 0; i < parts.length - 1; i++) { + const part = parts[i]; + if (prototypeKeys.has(part)) { + return; + } + if (!(part in current) || typeof current[part] !== "object" || current[part] === null) { + current[part] = Object.create(null); + } + current = current[part]; + } + const lastPart = parts[parts.length - 1]; + if (!prototypeKeys.has(lastPart)) { + current[lastPart] = value; + } +} + +function getNestedValue(obj: Record, dottedKey: string): any { + const parts = dottedKey.split("."); + let current: any = obj; + for (const part of parts) { + if (prototypeKeys.has(part) || current === null || typeof current !== "object" || !(part in current)) { + return undefined; + } + current = current[part]; + } + return current; +} + +function applyConfigAliases(explicit: Record): void { + for (const [preferred, fallback] of configAliases) { + if (getNestedValue(explicit, preferred) === undefined) { + const fallbackValue = getNestedValue(explicit, fallback); + if (fallbackValue !== undefined) { + setNestedValue(explicit, preferred, fallbackValue); + } + } + } +} + +/** + * Deep merge b into a. Values in b take precedence over values in a. + * Returns a new object; does not mutate inputs. + */ +function deepMerge(a: Record, b: Record): Record { + // Use Object.create(null) so the result has no prototype to pollute. + const result: Record = Object.create(null); + Object.assign(result, a); + for (const key of Object.keys(b)) { + if (prototypeKeys.has(key)) { + continue; + } + if ( + key in result + && result[key] !== null && typeof result[key] === "object" && !Array.isArray(result[key]) + && b[key] !== null && typeof b[key] === "object" && !Array.isArray(b[key]) + ) { + result[key] = deepMerge(result[key], b[key]); + } + else { + result[key] = b[key]; + } + } + return result; +} + +function toJSONObject(obj: any): any { + if (obj === null || obj === undefined) { + return obj; + } + if (Array.isArray(obj)) { + return obj.map(toJSONObject); + } + if (typeof obj === "object") { + const res: Record = Object.create(null); + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + res[key] = toJSONObject(obj[key]); + } + } + return res; + } + return obj; +} + +const configSectionsSet: ReadonlySet = new Set(configSections); + +/** + * Intercepts workspace/configuration requests. For items requesting one of + * the JS/TS config sections, returns the merged explicit configuration + * (js/ts > typescript > javascript). For any other section, delegates to + * the default handler via `next`. + */ +export const configurationMiddleware: ConfigurationMiddleware = { + async configuration(params, token, next) { + const hasNonJsTs = params.items.some( + item => item.section === undefined || !configSectionsSet.has(item.section), + ); + + // If all items are JS/TS sections, no need to call next. + let defaultResults: any[] | undefined; + if (hasNonJsTs) { + const res = await next(params, token); + if (Array.isArray(res)) { + defaultResults = res; + } + } + + // Cache merged config per resource URI to avoid redundant recalculation. + const mergedCache = new Map>(); + function getMergedCached(resource: vscode.Uri | undefined): Record { + const key = resource?.toString() ?? ""; + let cached = mergedCache.get(key); + if (cached === undefined) { + cached = getMergedConfiguration(resource); + mergedCache.set(key, cached); + } + return cached; + } + + const result: any[] = params.items.map((item, i) => { + if (item.section !== undefined && configSectionsSet.has(item.section)) { + const resource = item.scopeUri ? vscode.Uri.parse(item.scopeUri) : undefined; + return getMergedCached(resource); + } + return defaultResults?.[i] ?? null; + }); + + return result; + }, +}; + +/** + * Intercepts outgoing workspace/didChangeConfiguration notifications. + * Replaces the default settings (which include VS Code defaults) with + * the merged configuration, keyed by section name. + * + * This is typed as returning `Promise` rather than `void` because the + * `didChangeConfiguration` notification is misannotated in vscode-languageclient + * as returning void, so we must go through `sendNotification` instead. + */ +export function sendNotificationMiddleware( + type: string | MessageSignature, + next: (type: string | MessageSignature, params?: any) => Promise, + params: any, +): Promise { + const method = typeof type === "string" ? type : type.method; + if (method === "workspace/didChangeConfiguration") { + const merged = getMergedConfiguration(undefined); + const settings: Record = {}; + for (const section of configSections) { + settings[section] = merged; + } + if (params?.settings?.editor !== undefined) { + settings.editor = params.settings.editor; + } + return next(type, { settings }); + } + return next(type, params); +} diff --git a/packages/vscode-typescript/src/contentMapperContributions.ts b/packages/vscode-typescript/src/contentMapperContributions.ts index c8529d11ee8b2..74d13bbaee7d9 100644 --- a/packages/vscode-typescript/src/contentMapperContributions.ts +++ b/packages/vscode-typescript/src/contentMapperContributions.ts @@ -1,78 +1,78 @@ -import type { ContentMapperContribution } from "@typescript/typescript/unstable/vscode"; -export type { ContentMapperContribution, ContentMapperManifest } from "@typescript/typescript/unstable/vscode"; - -export interface SerializedContentMapperContribution { - readonly contributorId: string; - readonly extensions: readonly string[]; - readonly inferredProjectContribution?: { - readonly options?: Readonly>; - readonly manifest: { - readonly name: string; - readonly version?: string; - readonly exec: readonly string[]; - readonly cwd?: string; - readonly compilerOptions?: readonly string[]; - readonly dynamicConfig?: boolean; - }; - }; -} - -export function serializeContentMapperContributions( - registrations: ReadonlyMap, -): readonly SerializedContentMapperContribution[] { - const result: SerializedContentMapperContribution[] = []; - for (const [contributorId, contributions] of registrations) { - contributions.forEach(contribution => { - result.push({ - contributorId, - extensions: [...contribution.extensions], - inferredProjectContribution: contribution.inferredProjectContribution && { - options: contribution.inferredProjectContribution.options, - manifest: { - ...contribution.inferredProjectContribution.manifest, - exec: [...contribution.inferredProjectContribution.manifest.exec], - cwd: contribution.inferredProjectContribution.manifest.cwd?.fsPath, - compilerOptions: contribution.inferredProjectContribution.manifest.compilerOptions && [...contribution.inferredProjectContribution.manifest.compilerOptions], - }, - }, - }); - }); - } - return result; -} - -export function validateContentMapperRegistration(contributorId: string, contributions: readonly ContentMapperContribution[]): void { - if (!contributorId) { - throw new TypeError("Content mapper contributor ID must not be empty."); - } - for (const contribution of contributions) { - if (contribution.extensions.length === 0 || contribution.extensions.some(extension => !extension.startsWith(".") || extension.length === 1)) { - throw new TypeError("Content mapper contributions require non-empty extensions beginning with '.'."); - } - const inferredProjectContribution = contribution.inferredProjectContribution; - if (inferredProjectContribution?.options === null || Array.isArray(inferredProjectContribution?.options) || inferredProjectContribution?.options !== undefined && typeof inferredProjectContribution.options !== "object") { - throw new TypeError("Content mapper contribution options must be an object."); - } - if (inferredProjectContribution && (!inferredProjectContribution.manifest.name || inferredProjectContribution.manifest.exec.length === 0)) { - throw new TypeError("Content mapper contribution manifests require a name and non-empty exec."); - } - if (inferredProjectContribution?.manifest.cwd && inferredProjectContribution.manifest.cwd.scheme !== "file") { - throw new TypeError("Content mapper contribution cwd must be a file URI."); - } - } -} - -export function documentMatchesContentMapperContributions( - document: { readonly uri: { readonly path: string; }; }, - registrations: ReadonlyMap, -): boolean { - const documentPath = document.uri.path.toLowerCase(); - for (const contributions of registrations.values()) { - for (const contribution of contributions) { - if (contribution.extensions.some(extension => documentPath.endsWith(extension.toLowerCase()))) { - return true; - } - } - } - return false; -} +import type { ContentMapperContribution } from "@typescript/typescript/unstable/vscode"; +export type { ContentMapperContribution, ContentMapperManifest } from "@typescript/typescript/unstable/vscode"; + +export interface SerializedContentMapperContribution { + readonly contributorId: string; + readonly extensions: readonly string[]; + readonly inferredProjectContribution?: { + readonly options?: Readonly>; + readonly manifest: { + readonly name: string; + readonly version?: string; + readonly exec: readonly string[]; + readonly cwd?: string; + readonly compilerOptions?: readonly string[]; + readonly dynamicConfig?: boolean; + }; + }; +} + +export function serializeContentMapperContributions( + registrations: ReadonlyMap, +): readonly SerializedContentMapperContribution[] { + const result: SerializedContentMapperContribution[] = []; + for (const [contributorId, contributions] of registrations) { + contributions.forEach(contribution => { + result.push({ + contributorId, + extensions: [...contribution.extensions], + inferredProjectContribution: contribution.inferredProjectContribution && { + options: contribution.inferredProjectContribution.options, + manifest: { + ...contribution.inferredProjectContribution.manifest, + exec: [...contribution.inferredProjectContribution.manifest.exec], + cwd: contribution.inferredProjectContribution.manifest.cwd?.fsPath, + compilerOptions: contribution.inferredProjectContribution.manifest.compilerOptions && [...contribution.inferredProjectContribution.manifest.compilerOptions], + }, + }, + }); + }); + } + return result; +} + +export function validateContentMapperRegistration(contributorId: string, contributions: readonly ContentMapperContribution[]): void { + if (!contributorId) { + throw new TypeError("Content mapper contributor ID must not be empty."); + } + for (const contribution of contributions) { + if (contribution.extensions.length === 0 || contribution.extensions.some(extension => !extension.startsWith(".") || extension.length === 1)) { + throw new TypeError("Content mapper contributions require non-empty extensions beginning with '.'."); + } + const inferredProjectContribution = contribution.inferredProjectContribution; + if (inferredProjectContribution?.options === null || Array.isArray(inferredProjectContribution?.options) || inferredProjectContribution?.options !== undefined && typeof inferredProjectContribution.options !== "object") { + throw new TypeError("Content mapper contribution options must be an object."); + } + if (inferredProjectContribution && (!inferredProjectContribution.manifest.name || inferredProjectContribution.manifest.exec.length === 0)) { + throw new TypeError("Content mapper contribution manifests require a name and non-empty exec."); + } + if (inferredProjectContribution?.manifest.cwd && inferredProjectContribution.manifest.cwd.scheme !== "file") { + throw new TypeError("Content mapper contribution cwd must be a file URI."); + } + } +} + +export function documentMatchesContentMapperContributions( + document: { readonly uri: { readonly path: string; }; }, + registrations: ReadonlyMap, +): boolean { + const documentPath = document.uri.path.toLowerCase(); + for (const contributions of registrations.values()) { + for (const contribution of contributions) { + if (contribution.extensions.some(extension => documentPath.endsWith(extension.toLowerCase()))) { + return true; + } + } + } + return false; +} diff --git a/packages/vscode-typescript/src/experimentationService.ts b/packages/vscode-typescript/src/experimentationService.ts index ac47ae2bca1f8..efdf2c83b01ee 100644 --- a/packages/vscode-typescript/src/experimentationService.ts +++ b/packages/vscode-typescript/src/experimentationService.ts @@ -1,57 +1,57 @@ -import * as vscode from "vscode"; -import * as tas from "vscode-tas-client"; - -interface ExperimentTypes { - // Experiment variables go here. - suggestNativePreview: boolean; -} - -export class ExperimentationService { - private readonly _experimentationService: tas.IExperimentationService; - private readonly _telemetryReporter: tas.IExperimentationTelemetry; - - constructor(telemetryReporter: tas.IExperimentationTelemetry, id: string, version: string, globalState: vscode.Memento) { - this._telemetryReporter = telemetryReporter; - this._experimentationService = createTasExperimentationService(this._telemetryReporter, id, version, globalState); - } - - public async getTreatmentVariable(name: K, defaultValue: ExperimentTypes[K]): Promise { - const experimentationService = this._experimentationService; - try { - const treatmentVariable = await experimentationService.getTreatmentVariableAsync("vscode", name, /*checkCache*/ true) as ExperimentTypes[K]; - return treatmentVariable ?? defaultValue; - } - catch { - return defaultValue; - } - } -} - -function createTasExperimentationService( - reporter: tas.IExperimentationTelemetry, - id: string, - version: string, - globalState: vscode.Memento, -): tas.IExperimentationService { - let targetPopulation: tas.TargetPopulation; - switch (vscode.env.uriScheme) { - case "vscode": - targetPopulation = tas.TargetPopulation.Public; - break; - case "vscode-insiders": - targetPopulation = tas.TargetPopulation.Insiders; - break; - case "vscode-exploration": - targetPopulation = tas.TargetPopulation.Internal; - break; - case "code-oss": - targetPopulation = tas.TargetPopulation.Team; - break; - default: - targetPopulation = tas.TargetPopulation.Public; - break; - } - - const experimentationService = tas.getExperimentationService(id, version, targetPopulation, reporter, globalState); - return experimentationService; -} +import * as vscode from "vscode"; +import * as tas from "vscode-tas-client"; + +interface ExperimentTypes { + // Experiment variables go here. + suggestNativePreview: boolean; +} + +export class ExperimentationService { + private readonly _experimentationService: tas.IExperimentationService; + private readonly _telemetryReporter: tas.IExperimentationTelemetry; + + constructor(telemetryReporter: tas.IExperimentationTelemetry, id: string, version: string, globalState: vscode.Memento) { + this._telemetryReporter = telemetryReporter; + this._experimentationService = createTasExperimentationService(this._telemetryReporter, id, version, globalState); + } + + public async getTreatmentVariable(name: K, defaultValue: ExperimentTypes[K]): Promise { + const experimentationService = this._experimentationService; + try { + const treatmentVariable = await experimentationService.getTreatmentVariableAsync("vscode", name, /*checkCache*/ true) as ExperimentTypes[K]; + return treatmentVariable ?? defaultValue; + } + catch { + return defaultValue; + } + } +} + +function createTasExperimentationService( + reporter: tas.IExperimentationTelemetry, + id: string, + version: string, + globalState: vscode.Memento, +): tas.IExperimentationService { + let targetPopulation: tas.TargetPopulation; + switch (vscode.env.uriScheme) { + case "vscode": + targetPopulation = tas.TargetPopulation.Public; + break; + case "vscode-insiders": + targetPopulation = tas.TargetPopulation.Insiders; + break; + case "vscode-exploration": + targetPopulation = tas.TargetPopulation.Internal; + break; + case "code-oss": + targetPopulation = tas.TargetPopulation.Team; + break; + default: + targetPopulation = tas.TargetPopulation.Public; + break; + } + + const experimentationService = tas.getExperimentationService(id, version, targetPopulation, reporter, globalState); + return experimentationService; +} diff --git a/packages/vscode-typescript/src/extension.ts b/packages/vscode-typescript/src/extension.ts index b2f679ee2ddca..076b0ebb9539a 100644 --- a/packages/vscode-typescript/src/extension.ts +++ b/packages/vscode-typescript/src/extension.ts @@ -1,264 +1,264 @@ -import type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; -import * as vscode from "vscode"; -export type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; - -import { - registerEnablementCommands, - updateUseTsgoSetting, -} from "./commands"; -import { - aiConnectionString, - getExplicitConfigTarget, - getUseTsgo, - getWinningTsgoConfigKey, - needsExtHostRestartOnChange, -} from "./util"; - -import { TelemetryReporter as VSCodeTelemetryReporter } from "@vscode/extension-telemetry"; -import { - promptUseWorkspaceVersion, - SessionManager, -} from "./session"; - -import { ExperimentationService } from "./experimentationService"; -import { createTelemetryReporter } from "./telemetryReporting"; - -import assert from "node:assert"; - -export async function activate(context: vscode.ExtensionContext): Promise { - await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", false); - - const telemetryReporter = createTelemetryReporter(new VSCodeTelemetryReporter(aiConnectionString)); - context.subscriptions.push(telemetryReporter); - - const version = context.extension.packageJSON.version; - assert(typeof version === "string"); - // Constructing the experimentation service actually sets shared properties - // so that events include context on treatments/flights. - // If we actually need to read treatment variables we would hold onto this instance, - // but for now we just construct it to ensure shared properties are set for telemetry. - void new ExperimentationService(telemetryReporter, context.extension.id, version, context.globalState); - - const output = vscode.window.createOutputChannel("TypeScript 7", { log: true }); - context.subscriptions.push(output); - - const languageServerInitializedEventEmitter = new vscode.EventEmitter(); - context.subscriptions.push(languageServerInitializedEventEmitter); - - const sessionManager = new SessionManager(context, output, languageServerInitializedEventEmitter, telemetryReporter); - context.subscriptions.push(sessionManager); - registerEnablementCommands(context, telemetryReporter, () => sessionManager.stop()); - - let pluginWarningShown = false; - const onDidChangeExtensions = vscode.extensions.onDidChange(() => { - if (sessionManager.currentSession) { - warnAboutTsServerPlugins(context, output); - } - }); - context.subscriptions.push(onDidChangeExtensions); - - function onLanguageServerInitialized(listener: () => void): vscode.Disposable { - if (sessionManager.currentSession?.client.isInitialized) { - listener(); - } - return languageServerInitializedEventEmitter.event(listener); - } - - async function startNativeServer(): Promise { - await sessionManager.start(context); - warnAboutTsServerPlugins(context, output); - promptUseWorkspaceVersion(context).catch(err => { - output.appendLine(vscode.l10n.t(`Error prompting to use workspace version: {0}`, String(err))); - }); - } - - const api: ExtensionAPI = { - onLanguageServerInitialized: onLanguageServerInitialized, - async initializeAPIConnection(pipe?: string): Promise { - return sessionManager.initializeAPIConnection(pipe); - }, - registerContentMappers(contributorId, contributions): vscode.Disposable { - return sessionManager.registerContentMappers(contributorId, contributions); - }, - registerLspMiddleware(method, transformer): vscode.Disposable { - return sessionManager.registerLspMiddleware(method, transformer); - }, - }; - - let configChangeTimeout: ReturnType | undefined; - context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(event => { - if ( - event.affectsConfiguration("typescript.experimental.useTsgo") - || event.affectsConfiguration("js/ts.experimental.useTsgo") - ) { - // Debounce to coalesce rapid events when both settings are updated together. - clearTimeout(configChangeTimeout); - configChangeTimeout = setTimeout(async () => { - if (needsExtHostRestartOnChange()) { - const selected = await vscode.window.showInformationMessage(vscode.l10n.t("TypeScript 7 setting has changed. Restart extensions to apply changes."), vscode.l10n.t("Restart Extensions")); - if (selected) { - vscode.commands.executeCommand("workbench.action.restartExtensionHost"); - } - } - else { - if (await shouldStartTsgo(context)) { - await sessionManager.restart(context); - } - else { - await sessionManager.stop(); - } - } - }, 100); - } - })); - context.subscriptions.push({ dispose: () => clearTimeout(configChangeTimeout) }); - - const hasOnboardedTsgoStateKey = "hasOnboardedTsgo"; - const shouldOnboardTsgo = !context.globalState.get(hasOnboardedTsgoStateKey); - if (shouldOnboardTsgo) { - await context.globalState.update(hasOnboardedTsgoStateKey, true); - } - - const useTsgo = getUseTsgo(); - if (useTsgo === undefined && shouldOnboardTsgo) { - updateUseTsgoSetting(true); - return api; - } - - const tsExtension = vscode.extensions.getExtension("vscode.typescript-language-features"); - if (context.extensionMode === vscode.ExtensionMode.Development) { - if (!tsExtension) { - if (useTsgo === false) { - vscode.window.showWarningMessage( - vscode.l10n.t("The built-in TypeScript extension is disabled. Sync launch.json with launch.template.json to reenable."), - vscode.l10n.t("OK"), - ); - return api; - } - } - else if (useTsgo === false) { - const settingName = getWinningTsgoConfigKey() ?? "js/ts.experimental.useTsgo"; - const enableSettingString = vscode.l10n.t("Enable Setting"); - vscode.window.showWarningMessage( - vscode.l10n.t(`TypeScript 7 is running in development mode with "{0}" set to false.`, settingName), - enableSettingString, - vscode.l10n.t("Ignore"), - ).then(selected => { - if (selected === enableSettingString) { - vscode.commands.executeCommand("typescript.native-preview.enable"); - } - }); - return api; - } - } - else if (useTsgo !== true) { - output.appendLine(vscode.l10n.t("TypeScript 7 is disabled. Select 'TypeScript: Enable TypeScript 7' in the command palette to enable it.")); - return api; - } - - async function shouldStartTsgo(context: vscode.ExtensionContext): Promise { - const useTsgo = getUseTsgo(); - if (context.extensionMode === vscode.ExtensionMode.Development && !vscode.extensions.getExtension("vscode.typescript-language-features")) { - return useTsgo !== false; - } - return useTsgo === true; - } - - await startNativeServer(); - - return api; - - async function warnAboutTsServerPlugins(context: vscode.ExtensionContext, output: vscode.LogOutputChannel): Promise { - // Never show more than once. - if (pluginWarningShown) { - return; - } - - if (getUseTsgo() !== true) { - return; - } - - const settingName = getWinningTsgoConfigKey(); - assert(settingName !== undefined, "Expected some useTsgo configuration to be explicitly set."); - - const target = getExplicitConfigTarget(vscode.workspace.getConfiguration(), settingName); - assert(target !== undefined, "Expected an explicit configuration target."); - - // We only want to warn about plugins when Corsa is enabled in a user's global configuration. - // Setting in the workspace is an indication that the user is aware of the potential issues. - if (target !== vscode.ConfigurationTarget.Global) { - return; - } - - const hasWorkspaceFolder = !!vscode.workspace.workspaceFolders?.length; - - if (context.globalState.get(pluginWarningDismissedKey)) { - return; - } - - const pluginExtensions = getExtensionsWithTsServerPlugins(); - if (pluginExtensions.length === 0) { - return; - } - - const uniqueExtensionNames = [...new Set(pluginExtensions.map(p => p.extensionId))]; - const extensionNames = uniqueExtensionNames.join(", "); - output.appendLine(`Extensions contributing tsserver plugins that will not apply with TypeScript 7: ${extensionNames}`); - - const message = uniqueExtensionNames.length === 1 - // Pick the first extension & plugin, even though extensions can have multiple plugins - ? vscode.l10n.t(`TypeScript server plugins from the "{0}" extension will not be loaded because TypeScript 7 is enabled globally.`, pluginExtensions[0].extensionId) - : vscode.l10n.t(`{0} extensions contribute TypeScript server plugins that will not be loaded because TypeScript 7 is enabled globally: {1}`, uniqueExtensionNames.length, extensionNames); - - const ok = vscode.l10n.t("OK"); - const disableInWorkspace = vscode.l10n.t("Disable Native Preview in Workspace"); - const dontShowAgain = vscode.l10n.t("Don't Show Again"); - - const options = [ok]; - if (hasWorkspaceFolder) { - options.push(disableInWorkspace); - } - options.push(dontShowAgain); - - // Make sure we never show this message again in this session. - pluginWarningShown = true; - - const selected = await vscode.window.showWarningMessage(message, ...options); - if (selected === disableInWorkspace) { - await sessionManager.stop(); - await vscode.workspace.getConfiguration("js/ts").update("experimental.useTsgo", false, vscode.ConfigurationTarget.Workspace); - } - else if (selected === dontShowAgain) { - await context.globalState.update(pluginWarningDismissedKey, true); - } - } -} - -const suppressedPluginExtensionIds: Set = new Set([ - "github.copilot", - "github.copilot-chat", -]); - -const pluginWarningDismissedKey = "tsServerPluginWarningDismissed"; - -function getExtensionsWithTsServerPlugins(): { extensionId: string; pluginName: string; }[] { - const results: { extensionId: string; pluginName: string; }[] = []; - // Despite its name, 'all' actually only seems to contain active extensions. - for (const extension of vscode.extensions.all) { - // Ignore built-in extensions that always try to contribute plugins. - const id = extension.id.toLowerCase(); - if (suppressedPluginExtensionIds.has(id)) { - continue; - } - - const contributes = extension.packageJSON?.contributes; - if (contributes && Array.isArray(contributes.typescriptServerPlugins)) { - for (const plugin of contributes.typescriptServerPlugins) { - if (typeof plugin.name === "string" && plugin.name) { - results.push({ extensionId: extension.id, pluginName: plugin.name }); - } - } - } - } - return results; -} +import type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; +import * as vscode from "vscode"; +export type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; + +import { + registerEnablementCommands, + updateUseTsgoSetting, +} from "./commands"; +import { + aiConnectionString, + getExplicitConfigTarget, + getUseTsgo, + getWinningTsgoConfigKey, + needsExtHostRestartOnChange, +} from "./util"; + +import { TelemetryReporter as VSCodeTelemetryReporter } from "@vscode/extension-telemetry"; +import { + promptUseWorkspaceVersion, + SessionManager, +} from "./session"; + +import { ExperimentationService } from "./experimentationService"; +import { createTelemetryReporter } from "./telemetryReporting"; + +import assert from "node:assert"; + +export async function activate(context: vscode.ExtensionContext): Promise { + await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", false); + + const telemetryReporter = createTelemetryReporter(new VSCodeTelemetryReporter(aiConnectionString)); + context.subscriptions.push(telemetryReporter); + + const version = context.extension.packageJSON.version; + assert(typeof version === "string"); + // Constructing the experimentation service actually sets shared properties + // so that events include context on treatments/flights. + // If we actually need to read treatment variables we would hold onto this instance, + // but for now we just construct it to ensure shared properties are set for telemetry. + void new ExperimentationService(telemetryReporter, context.extension.id, version, context.globalState); + + const output = vscode.window.createOutputChannel("TypeScript 7", { log: true }); + context.subscriptions.push(output); + + const languageServerInitializedEventEmitter = new vscode.EventEmitter(); + context.subscriptions.push(languageServerInitializedEventEmitter); + + const sessionManager = new SessionManager(context, output, languageServerInitializedEventEmitter, telemetryReporter); + context.subscriptions.push(sessionManager); + registerEnablementCommands(context, telemetryReporter, () => sessionManager.stop()); + + let pluginWarningShown = false; + const onDidChangeExtensions = vscode.extensions.onDidChange(() => { + if (sessionManager.currentSession) { + warnAboutTsServerPlugins(context, output); + } + }); + context.subscriptions.push(onDidChangeExtensions); + + function onLanguageServerInitialized(listener: () => void): vscode.Disposable { + if (sessionManager.currentSession?.client.isInitialized) { + listener(); + } + return languageServerInitializedEventEmitter.event(listener); + } + + async function startNativeServer(): Promise { + await sessionManager.start(context); + warnAboutTsServerPlugins(context, output); + promptUseWorkspaceVersion(context).catch(err => { + output.appendLine(vscode.l10n.t(`Error prompting to use workspace version: {0}`, String(err))); + }); + } + + const api: ExtensionAPI = { + onLanguageServerInitialized: onLanguageServerInitialized, + async initializeAPIConnection(pipe?: string): Promise { + return sessionManager.initializeAPIConnection(pipe); + }, + registerContentMappers(contributorId, contributions): vscode.Disposable { + return sessionManager.registerContentMappers(contributorId, contributions); + }, + registerLspMiddleware(method, transformer): vscode.Disposable { + return sessionManager.registerLspMiddleware(method, transformer); + }, + }; + + let configChangeTimeout: ReturnType | undefined; + context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(event => { + if ( + event.affectsConfiguration("typescript.experimental.useTsgo") + || event.affectsConfiguration("js/ts.experimental.useTsgo") + ) { + // Debounce to coalesce rapid events when both settings are updated together. + clearTimeout(configChangeTimeout); + configChangeTimeout = setTimeout(async () => { + if (needsExtHostRestartOnChange()) { + const selected = await vscode.window.showInformationMessage(vscode.l10n.t("TypeScript 7 setting has changed. Restart extensions to apply changes."), vscode.l10n.t("Restart Extensions")); + if (selected) { + vscode.commands.executeCommand("workbench.action.restartExtensionHost"); + } + } + else { + if (await shouldStartTsgo(context)) { + await sessionManager.restart(context); + } + else { + await sessionManager.stop(); + } + } + }, 100); + } + })); + context.subscriptions.push({ dispose: () => clearTimeout(configChangeTimeout) }); + + const hasOnboardedTsgoStateKey = "hasOnboardedTsgo"; + const shouldOnboardTsgo = !context.globalState.get(hasOnboardedTsgoStateKey); + if (shouldOnboardTsgo) { + await context.globalState.update(hasOnboardedTsgoStateKey, true); + } + + const useTsgo = getUseTsgo(); + if (useTsgo === undefined && shouldOnboardTsgo) { + updateUseTsgoSetting(true); + return api; + } + + const tsExtension = vscode.extensions.getExtension("vscode.typescript-language-features"); + if (context.extensionMode === vscode.ExtensionMode.Development) { + if (!tsExtension) { + if (useTsgo === false) { + vscode.window.showWarningMessage( + vscode.l10n.t("The built-in TypeScript extension is disabled. Sync launch.json with launch.template.json to reenable."), + vscode.l10n.t("OK"), + ); + return api; + } + } + else if (useTsgo === false) { + const settingName = getWinningTsgoConfigKey() ?? "js/ts.experimental.useTsgo"; + const enableSettingString = vscode.l10n.t("Enable Setting"); + vscode.window.showWarningMessage( + vscode.l10n.t(`TypeScript 7 is running in development mode with "{0}" set to false.`, settingName), + enableSettingString, + vscode.l10n.t("Ignore"), + ).then(selected => { + if (selected === enableSettingString) { + vscode.commands.executeCommand("typescript.native-preview.enable"); + } + }); + return api; + } + } + else if (useTsgo !== true) { + output.appendLine(vscode.l10n.t("TypeScript 7 is disabled. Select 'TypeScript: Enable TypeScript 7' in the command palette to enable it.")); + return api; + } + + async function shouldStartTsgo(context: vscode.ExtensionContext): Promise { + const useTsgo = getUseTsgo(); + if (context.extensionMode === vscode.ExtensionMode.Development && !vscode.extensions.getExtension("vscode.typescript-language-features")) { + return useTsgo !== false; + } + return useTsgo === true; + } + + await startNativeServer(); + + return api; + + async function warnAboutTsServerPlugins(context: vscode.ExtensionContext, output: vscode.LogOutputChannel): Promise { + // Never show more than once. + if (pluginWarningShown) { + return; + } + + if (getUseTsgo() !== true) { + return; + } + + const settingName = getWinningTsgoConfigKey(); + assert(settingName !== undefined, "Expected some useTsgo configuration to be explicitly set."); + + const target = getExplicitConfigTarget(vscode.workspace.getConfiguration(), settingName); + assert(target !== undefined, "Expected an explicit configuration target."); + + // We only want to warn about plugins when Corsa is enabled in a user's global configuration. + // Setting in the workspace is an indication that the user is aware of the potential issues. + if (target !== vscode.ConfigurationTarget.Global) { + return; + } + + const hasWorkspaceFolder = !!vscode.workspace.workspaceFolders?.length; + + if (context.globalState.get(pluginWarningDismissedKey)) { + return; + } + + const pluginExtensions = getExtensionsWithTsServerPlugins(); + if (pluginExtensions.length === 0) { + return; + } + + const uniqueExtensionNames = [...new Set(pluginExtensions.map(p => p.extensionId))]; + const extensionNames = uniqueExtensionNames.join(", "); + output.appendLine(`Extensions contributing tsserver plugins that will not apply with TypeScript 7: ${extensionNames}`); + + const message = uniqueExtensionNames.length === 1 + // Pick the first extension & plugin, even though extensions can have multiple plugins + ? vscode.l10n.t(`TypeScript server plugins from the "{0}" extension will not be loaded because TypeScript 7 is enabled globally.`, pluginExtensions[0].extensionId) + : vscode.l10n.t(`{0} extensions contribute TypeScript server plugins that will not be loaded because TypeScript 7 is enabled globally: {1}`, uniqueExtensionNames.length, extensionNames); + + const ok = vscode.l10n.t("OK"); + const disableInWorkspace = vscode.l10n.t("Disable Native Preview in Workspace"); + const dontShowAgain = vscode.l10n.t("Don't Show Again"); + + const options = [ok]; + if (hasWorkspaceFolder) { + options.push(disableInWorkspace); + } + options.push(dontShowAgain); + + // Make sure we never show this message again in this session. + pluginWarningShown = true; + + const selected = await vscode.window.showWarningMessage(message, ...options); + if (selected === disableInWorkspace) { + await sessionManager.stop(); + await vscode.workspace.getConfiguration("js/ts").update("experimental.useTsgo", false, vscode.ConfigurationTarget.Workspace); + } + else if (selected === dontShowAgain) { + await context.globalState.update(pluginWarningDismissedKey, true); + } + } +} + +const suppressedPluginExtensionIds: Set = new Set([ + "github.copilot", + "github.copilot-chat", +]); + +const pluginWarningDismissedKey = "tsServerPluginWarningDismissed"; + +function getExtensionsWithTsServerPlugins(): { extensionId: string; pluginName: string; }[] { + const results: { extensionId: string; pluginName: string; }[] = []; + // Despite its name, 'all' actually only seems to contain active extensions. + for (const extension of vscode.extensions.all) { + // Ignore built-in extensions that always try to contribute plugins. + const id = extension.id.toLowerCase(); + if (suppressedPluginExtensionIds.has(id)) { + continue; + } + + const contributes = extension.packageJSON?.contributes; + if (contributes && Array.isArray(contributes.typescriptServerPlugins)) { + for (const plugin of contributes.typescriptServerPlugins) { + if (typeof plugin.name === "string" && plugin.name) { + results.push({ extensionId: extension.id, pluginName: plugin.name }); + } + } + } + } + return results; +} diff --git a/packages/vscode-typescript/src/languageFeatures/documentHighlight.ts b/packages/vscode-typescript/src/languageFeatures/documentHighlight.ts index 65d7f7cc43b47..5e4b41a2ad656 100644 --- a/packages/vscode-typescript/src/languageFeatures/documentHighlight.ts +++ b/packages/vscode-typescript/src/languageFeatures/documentHighlight.ts @@ -1,85 +1,85 @@ -import * as vscode from "vscode"; -import { - DocumentHighlight, - LanguageClient, -} from "vscode-languageclient/node"; - -const multiDocumentHighlightMethod = "custom/textDocument/multiDocumentHighlight"; - -interface MultiDocumentHighlightParams { - textDocument: { uri: string; }; - position: { line: number; character: number; }; - filesToSearch: string[]; -} - -interface MultiDocumentHighlightItem { - uri: string; - highlights: DocumentHighlight[]; -} - -class MultiDocumentHighlightProvider implements vscode.MultiDocumentHighlightProvider { - constructor(private readonly client: LanguageClient) {} - - async provideMultiDocumentHighlights( - document: vscode.TextDocument, - position: vscode.Position, - otherDocuments: vscode.TextDocument[], - token: vscode.CancellationToken, - ): Promise { - const allFiles = [document, ...otherDocuments] - .map(doc => this.client.code2ProtocolConverter.asUri(doc.uri)) - .filter(file => !!file); - - if (allFiles.length === 0) { - return []; - } - - const params: MultiDocumentHighlightParams = { - textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: this.client.code2ProtocolConverter.asPosition(position), - filesToSearch: allFiles, - }; - - let response: MultiDocumentHighlightItem[] | null; - try { - response = await this.client.sendRequest(multiDocumentHighlightMethod, params, token); - } - catch (error) { - return []; - } - - if (!response || token.isCancellationRequested) { - return []; - } - - // MultiDocumentHighlight is proposed API; guard against missing or changed constructor. - try { - return response.map(item => - new vscode.MultiDocumentHighlight( - vscode.Uri.parse(item.uri), - item.highlights.map(h => this.client.protocol2CodeConverter.asDocumentHighlight(h)), - ) - ); - } - catch { - return []; - } - } -} - -export function registerMultiDocumentHighlightFeature( - selector: vscode.DocumentSelector, - client: LanguageClient, -): vscode.Disposable { - try { - const experimental = client.initializeResult?.capabilities?.experimental as { customMultiDocumentHighlightProvider?: boolean; } | undefined; - // registerMultiDocumentHighlightProvider is proposed API; guard against it not being available. - if (!experimental?.customMultiDocumentHighlightProvider || typeof vscode.languages.registerMultiDocumentHighlightProvider !== "function") { - return { dispose() {} }; - } - return vscode.languages.registerMultiDocumentHighlightProvider(selector, new MultiDocumentHighlightProvider(client)); - } - catch { - return { dispose() {} }; - } -} +import * as vscode from "vscode"; +import { + DocumentHighlight, + LanguageClient, +} from "vscode-languageclient/node"; + +const multiDocumentHighlightMethod = "custom/textDocument/multiDocumentHighlight"; + +interface MultiDocumentHighlightParams { + textDocument: { uri: string; }; + position: { line: number; character: number; }; + filesToSearch: string[]; +} + +interface MultiDocumentHighlightItem { + uri: string; + highlights: DocumentHighlight[]; +} + +class MultiDocumentHighlightProvider implements vscode.MultiDocumentHighlightProvider { + constructor(private readonly client: LanguageClient) {} + + async provideMultiDocumentHighlights( + document: vscode.TextDocument, + position: vscode.Position, + otherDocuments: vscode.TextDocument[], + token: vscode.CancellationToken, + ): Promise { + const allFiles = [document, ...otherDocuments] + .map(doc => this.client.code2ProtocolConverter.asUri(doc.uri)) + .filter(file => !!file); + + if (allFiles.length === 0) { + return []; + } + + const params: MultiDocumentHighlightParams = { + textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), + position: this.client.code2ProtocolConverter.asPosition(position), + filesToSearch: allFiles, + }; + + let response: MultiDocumentHighlightItem[] | null; + try { + response = await this.client.sendRequest(multiDocumentHighlightMethod, params, token); + } + catch (error) { + return []; + } + + if (!response || token.isCancellationRequested) { + return []; + } + + // MultiDocumentHighlight is proposed API; guard against missing or changed constructor. + try { + return response.map(item => + new vscode.MultiDocumentHighlight( + vscode.Uri.parse(item.uri), + item.highlights.map(h => this.client.protocol2CodeConverter.asDocumentHighlight(h)), + ) + ); + } + catch { + return []; + } + } +} + +export function registerMultiDocumentHighlightFeature( + selector: vscode.DocumentSelector, + client: LanguageClient, +): vscode.Disposable { + try { + const experimental = client.initializeResult?.capabilities?.experimental as { customMultiDocumentHighlightProvider?: boolean; } | undefined; + // registerMultiDocumentHighlightProvider is proposed API; guard against it not being available. + if (!experimental?.customMultiDocumentHighlightProvider || typeof vscode.languages.registerMultiDocumentHighlightProvider !== "function") { + return { dispose() {} }; + } + return vscode.languages.registerMultiDocumentHighlightProvider(selector, new MultiDocumentHighlightProvider(client)); + } + catch { + return { dispose() {} }; + } +} diff --git a/packages/vscode-typescript/src/languageFeatures/hover.ts b/packages/vscode-typescript/src/languageFeatures/hover.ts index 13b44d0f8d700..042b8fcb117b6 100644 --- a/packages/vscode-typescript/src/languageFeatures/hover.ts +++ b/packages/vscode-typescript/src/languageFeatures/hover.ts @@ -1,81 +1,81 @@ -import * as vscode from "vscode"; -import { - Hover, - HoverRequest, - LanguageClient, - TextDocumentPositionParams, -} from "vscode-languageclient/node"; - -interface HoverResult extends Hover { - canIncreaseVerbosity?: boolean; -} - -interface HoverParamsWithVerbosity extends TextDocumentPositionParams { - verbosityLevel?: number; -} - -class VerboseHoverProvider implements vscode.HoverProvider { - private lastHoverAndLevel: [vscode.Hover, number] | undefined; - - constructor(private readonly client: LanguageClient) {} - - async provideHover( - document: vscode.TextDocument, - position: vscode.Position, - token: vscode.CancellationToken, - context?: vscode.HoverContext, - ): Promise { - // HoverContext and VerboseHover are proposed API; guard against missing or unexpected properties. - const verbosityDelta = typeof context?.verbosityDelta === "number" ? context.verbosityDelta : undefined; - const previousHover = context?.previousHover instanceof vscode.Hover ? context.previousHover : undefined; - const verbosityLevel = verbosityDelta !== undefined ? Math.max(0, this.getPreviousLevel(previousHover) + verbosityDelta) : undefined; - - const params: HoverParamsWithVerbosity = { - ...this.client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), - verbosityLevel, - }; - - let response: HoverResult | null; - try { - response = await this.client.sendRequest(HoverRequest.type, params, token); - } - catch (error) { - return this.client.handleFailedRequest(HoverRequest.type, token, error, null) ?? undefined; - } - - if (!response || token.isCancellationRequested) { - return undefined; - } - - const hover = this.client.protocol2CodeConverter.asHover(response); - // VerboseHover is proposed API; guard against missing or changed constructor. - try { - const verboseHover = new vscode.VerboseHover( - hover.contents, - hover.range, - response.canIncreaseVerbosity, - (verbosityLevel ?? 0) > 0, - ); - - this.lastHoverAndLevel = [verboseHover, verbosityLevel ?? 0]; - return verboseHover; - } - catch { - return hover; - } - } - - private getPreviousLevel(previousHover: vscode.Hover | undefined): number { - if (previousHover && this.lastHoverAndLevel && this.lastHoverAndLevel[0] === previousHover) { - return this.lastHoverAndLevel[1]; - } - return 0; - } -} - -export function registerHoverFeature( - selector: vscode.DocumentSelector, - client: LanguageClient, -): vscode.Disposable { - return vscode.languages.registerHoverProvider(selector, new VerboseHoverProvider(client)); -} +import * as vscode from "vscode"; +import { + Hover, + HoverRequest, + LanguageClient, + TextDocumentPositionParams, +} from "vscode-languageclient/node"; + +interface HoverResult extends Hover { + canIncreaseVerbosity?: boolean; +} + +interface HoverParamsWithVerbosity extends TextDocumentPositionParams { + verbosityLevel?: number; +} + +class VerboseHoverProvider implements vscode.HoverProvider { + private lastHoverAndLevel: [vscode.Hover, number] | undefined; + + constructor(private readonly client: LanguageClient) {} + + async provideHover( + document: vscode.TextDocument, + position: vscode.Position, + token: vscode.CancellationToken, + context?: vscode.HoverContext, + ): Promise { + // HoverContext and VerboseHover are proposed API; guard against missing or unexpected properties. + const verbosityDelta = typeof context?.verbosityDelta === "number" ? context.verbosityDelta : undefined; + const previousHover = context?.previousHover instanceof vscode.Hover ? context.previousHover : undefined; + const verbosityLevel = verbosityDelta !== undefined ? Math.max(0, this.getPreviousLevel(previousHover) + verbosityDelta) : undefined; + + const params: HoverParamsWithVerbosity = { + ...this.client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), + verbosityLevel, + }; + + let response: HoverResult | null; + try { + response = await this.client.sendRequest(HoverRequest.type, params, token); + } + catch (error) { + return this.client.handleFailedRequest(HoverRequest.type, token, error, null) ?? undefined; + } + + if (!response || token.isCancellationRequested) { + return undefined; + } + + const hover = this.client.protocol2CodeConverter.asHover(response); + // VerboseHover is proposed API; guard against missing or changed constructor. + try { + const verboseHover = new vscode.VerboseHover( + hover.contents, + hover.range, + response.canIncreaseVerbosity, + (verbosityLevel ?? 0) > 0, + ); + + this.lastHoverAndLevel = [verboseHover, verbosityLevel ?? 0]; + return verboseHover; + } + catch { + return hover; + } + } + + private getPreviousLevel(previousHover: vscode.Hover | undefined): number { + if (previousHover && this.lastHoverAndLevel && this.lastHoverAndLevel[0] === previousHover) { + return this.lastHoverAndLevel[1]; + } + return 0; + } +} + +export function registerHoverFeature( + selector: vscode.DocumentSelector, + client: LanguageClient, +): vscode.Disposable { + return vscode.languages.registerHoverProvider(selector, new VerboseHoverProvider(client)); +} diff --git a/packages/vscode-typescript/src/languageFeatures/onAutoInsert.ts b/packages/vscode-typescript/src/languageFeatures/onAutoInsert.ts index c6d7129ca0c9f..8fe521a5d5aaf 100644 --- a/packages/vscode-typescript/src/languageFeatures/onAutoInsert.ts +++ b/packages/vscode-typescript/src/languageFeatures/onAutoInsert.ts @@ -1,181 +1,181 @@ -import * as vscode from "vscode"; -import { - InsertTextFormat, - LanguageClient, - Position, - TextEdit, -} from "vscode-languageclient/node"; -import { readUnifiedConfig } from "../util"; -import { - Condition, - conditionalRegistration, -} from "./util/dependentRegistration"; - -interface VsOnAutoInsertParams { - _vs_textDocument: { uri: string; }; - _vs_position: Position; - _vs_ch: string; -} - -interface VsOnAutoInsertResponse { - _vs_textEditFormat: InsertTextFormat; - _vs_textEdit: TextEdit; -} - -interface VsOnAutoInsertOptions { - _vs_triggerCharacters?: string[]; -} - -interface VsServerCapabilities { - _vs_onAutoInsertProvider?: VsOnAutoInsertOptions; -} - -class AutoInsert { - private cancel: vscode.CancellationTokenSource | undefined; - private readonly subscription: vscode.Disposable; - - constructor( - private readonly client: LanguageClient, - private readonly triggerCharacters: ReadonlySet, - ) { - this.subscription = vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this); - } - - dispose() { - this.subscription.dispose(); - this.cancel?.cancel(); - this.cancel?.dispose(); - this.cancel = undefined; - } - - private async onDidChangeTextDocument({ document, contentChanges, reason }: vscode.TextDocumentChangeEvent) { - if ( - contentChanges.length === 0 - || reason === vscode.TextDocumentChangeReason.Undo - || reason === vscode.TextDocumentChangeReason.Redo - ) { - return; - } - - const activeEditor = vscode.window.activeTextEditor; - if (activeEditor?.document !== document) { - return; - } - - const lastChange = contentChanges[contentChanges.length - 1]; - const lastCharacter = lastChange.text.charAt(lastChange.text.length - 1); - if (lastChange.rangeLength > 0 || !this.triggerCharacters.has(lastCharacter)) { - return; - } - - // Avoid firing again when the user types a trigger character immediately - // after another (e.g. `>>` in JSX). - if (lastChange.range.start.character > 0) { - const priorRange = new vscode.Range(lastChange.range.start.translate(0, -1), lastChange.range.start); - if (this.triggerCharacters.has(document.getText(priorRange))) { - return; - } - } - - // Compute the post-insert cursor position from the change itself; - // `activeEditor.selection.active` is not yet updated when this event fires. - const addedLines = lastChange.text.split(/\r\n|\n/g); - const position = addedLines.length === 1 - ? lastChange.range.start.translate(0, lastChange.text.length) - : new vscode.Position( - lastChange.range.start.line + addedLines.length - 1, - addedLines[addedLines.length - 1].length, - ); - - this.cancel?.cancel(); - this.cancel?.dispose(); - this.cancel = new vscode.CancellationTokenSource(); - const token = this.cancel.token; - const startingVersion = document.version; - - let response: VsOnAutoInsertResponse | null; - try { - response = await this.client.sendRequest( - "textDocument/_vs_onAutoInsert", - { - _vs_textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), - _vs_position: this.client.code2ProtocolConverter.asPosition(position), - _vs_ch: lastCharacter, - } satisfies VsOnAutoInsertParams, - token, - ); - } - catch { - return; - } - - if (!response || token.isCancellationRequested || document.version !== startingVersion) { - return; - } - - const edit = this.client.protocol2CodeConverter.asTextEdit(response._vs_textEdit); - // If the same trigger character was typed at every cursor in the same change, - // apply the snippet/edit at every cursor. - const cursors = activeEditor.selections.map(s => s.active); - const insertionRanges = cursors.some(p => p.isEqual(position)) ? cursors : edit.range; - // Swallow rejections from the editor (e.g., document changed under us). These - // return Thenables that can otherwise become unhandled rejections. - const swallow = () => undefined; - if (response._vs_textEditFormat === InsertTextFormat.Snippet) { - void Promise.resolve(activeEditor.insertSnippet(new vscode.SnippetString(edit.newText), insertionRanges)).then(swallow, swallow); - } - else { - void Promise.resolve(activeEditor.edit(b => { - if (Array.isArray(insertionRanges)) { - for (const p of insertionRanges) b.insert(p, edit.newText); - } - else { - b.replace(insertionRanges, edit.newText); - } - })).then(swallow, swallow); - } - } -} - -function isAutoClosingTagsEnabled(scope: vscode.TextDocument): boolean { - // Use the document's own language ("typescript" / "javascript" / "*react") to - // pick the fallback section so per-language overrides apply correctly. - const fallbackSection = scope.languageId === "javascript" || scope.languageId === "javascriptreact" - ? "javascript" - : "typescript"; - return readUnifiedConfig("autoClosingTags.enabled", fallbackSection, "autoClosingTags", scope, true); -} - -function requireActiveDocumentSetting(selector: vscode.DocumentSelector) { - return new Condition( - () => { - const activeDocument = vscode.window.activeTextEditor?.document; - if (!activeDocument || !vscode.languages.match(selector, activeDocument)) { - return false; - } - return isAutoClosingTagsEnabled(activeDocument); - }, - handler => - vscode.Disposable.from( - vscode.window.onDidChangeActiveTextEditor(handler), - vscode.workspace.onDidOpenTextDocument(handler), - vscode.workspace.onDidChangeConfiguration(handler), - ), - ); -} - -export function registerOnAutoInsertFeature( - selector: vscode.DocumentSelector, - client: LanguageClient, -): vscode.Disposable { - const capabilities = client.initializeResult?.capabilities as VsServerCapabilities | undefined; - const triggerCharacters = capabilities?._vs_onAutoInsertProvider?._vs_triggerCharacters; - if (!triggerCharacters?.length) { - return vscode.Disposable.from(); - } - const set = new Set(triggerCharacters); - return conditionalRegistration( - [requireActiveDocumentSetting(selector)], - () => new AutoInsert(client, set), - ); -} +import * as vscode from "vscode"; +import { + InsertTextFormat, + LanguageClient, + Position, + TextEdit, +} from "vscode-languageclient/node"; +import { readUnifiedConfig } from "../util"; +import { + Condition, + conditionalRegistration, +} from "./util/dependentRegistration"; + +interface VsOnAutoInsertParams { + _vs_textDocument: { uri: string; }; + _vs_position: Position; + _vs_ch: string; +} + +interface VsOnAutoInsertResponse { + _vs_textEditFormat: InsertTextFormat; + _vs_textEdit: TextEdit; +} + +interface VsOnAutoInsertOptions { + _vs_triggerCharacters?: string[]; +} + +interface VsServerCapabilities { + _vs_onAutoInsertProvider?: VsOnAutoInsertOptions; +} + +class AutoInsert { + private cancel: vscode.CancellationTokenSource | undefined; + private readonly subscription: vscode.Disposable; + + constructor( + private readonly client: LanguageClient, + private readonly triggerCharacters: ReadonlySet, + ) { + this.subscription = vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this); + } + + dispose() { + this.subscription.dispose(); + this.cancel?.cancel(); + this.cancel?.dispose(); + this.cancel = undefined; + } + + private async onDidChangeTextDocument({ document, contentChanges, reason }: vscode.TextDocumentChangeEvent) { + if ( + contentChanges.length === 0 + || reason === vscode.TextDocumentChangeReason.Undo + || reason === vscode.TextDocumentChangeReason.Redo + ) { + return; + } + + const activeEditor = vscode.window.activeTextEditor; + if (activeEditor?.document !== document) { + return; + } + + const lastChange = contentChanges[contentChanges.length - 1]; + const lastCharacter = lastChange.text.charAt(lastChange.text.length - 1); + if (lastChange.rangeLength > 0 || !this.triggerCharacters.has(lastCharacter)) { + return; + } + + // Avoid firing again when the user types a trigger character immediately + // after another (e.g. `>>` in JSX). + if (lastChange.range.start.character > 0) { + const priorRange = new vscode.Range(lastChange.range.start.translate(0, -1), lastChange.range.start); + if (this.triggerCharacters.has(document.getText(priorRange))) { + return; + } + } + + // Compute the post-insert cursor position from the change itself; + // `activeEditor.selection.active` is not yet updated when this event fires. + const addedLines = lastChange.text.split(/\r\n|\n/g); + const position = addedLines.length === 1 + ? lastChange.range.start.translate(0, lastChange.text.length) + : new vscode.Position( + lastChange.range.start.line + addedLines.length - 1, + addedLines[addedLines.length - 1].length, + ); + + this.cancel?.cancel(); + this.cancel?.dispose(); + this.cancel = new vscode.CancellationTokenSource(); + const token = this.cancel.token; + const startingVersion = document.version; + + let response: VsOnAutoInsertResponse | null; + try { + response = await this.client.sendRequest( + "textDocument/_vs_onAutoInsert", + { + _vs_textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), + _vs_position: this.client.code2ProtocolConverter.asPosition(position), + _vs_ch: lastCharacter, + } satisfies VsOnAutoInsertParams, + token, + ); + } + catch { + return; + } + + if (!response || token.isCancellationRequested || document.version !== startingVersion) { + return; + } + + const edit = this.client.protocol2CodeConverter.asTextEdit(response._vs_textEdit); + // If the same trigger character was typed at every cursor in the same change, + // apply the snippet/edit at every cursor. + const cursors = activeEditor.selections.map(s => s.active); + const insertionRanges = cursors.some(p => p.isEqual(position)) ? cursors : edit.range; + // Swallow rejections from the editor (e.g., document changed under us). These + // return Thenables that can otherwise become unhandled rejections. + const swallow = () => undefined; + if (response._vs_textEditFormat === InsertTextFormat.Snippet) { + void Promise.resolve(activeEditor.insertSnippet(new vscode.SnippetString(edit.newText), insertionRanges)).then(swallow, swallow); + } + else { + void Promise.resolve(activeEditor.edit(b => { + if (Array.isArray(insertionRanges)) { + for (const p of insertionRanges) b.insert(p, edit.newText); + } + else { + b.replace(insertionRanges, edit.newText); + } + })).then(swallow, swallow); + } + } +} + +function isAutoClosingTagsEnabled(scope: vscode.TextDocument): boolean { + // Use the document's own language ("typescript" / "javascript" / "*react") to + // pick the fallback section so per-language overrides apply correctly. + const fallbackSection = scope.languageId === "javascript" || scope.languageId === "javascriptreact" + ? "javascript" + : "typescript"; + return readUnifiedConfig("autoClosingTags.enabled", fallbackSection, "autoClosingTags", scope, true); +} + +function requireActiveDocumentSetting(selector: vscode.DocumentSelector) { + return new Condition( + () => { + const activeDocument = vscode.window.activeTextEditor?.document; + if (!activeDocument || !vscode.languages.match(selector, activeDocument)) { + return false; + } + return isAutoClosingTagsEnabled(activeDocument); + }, + handler => + vscode.Disposable.from( + vscode.window.onDidChangeActiveTextEditor(handler), + vscode.workspace.onDidOpenTextDocument(handler), + vscode.workspace.onDidChangeConfiguration(handler), + ), + ); +} + +export function registerOnAutoInsertFeature( + selector: vscode.DocumentSelector, + client: LanguageClient, +): vscode.Disposable { + const capabilities = client.initializeResult?.capabilities as VsServerCapabilities | undefined; + const triggerCharacters = capabilities?._vs_onAutoInsertProvider?._vs_triggerCharacters; + if (!triggerCharacters?.length) { + return vscode.Disposable.from(); + } + const set = new Set(triggerCharacters); + return conditionalRegistration( + [requireActiveDocumentSetting(selector)], + () => new AutoInsert(client, set), + ); +} diff --git a/packages/vscode-typescript/src/languageFeatures/sourceDefinition.ts b/packages/vscode-typescript/src/languageFeatures/sourceDefinition.ts index e719e1b2f4411..3516b9aa8deb6 100644 --- a/packages/vscode-typescript/src/languageFeatures/sourceDefinition.ts +++ b/packages/vscode-typescript/src/languageFeatures/sourceDefinition.ts @@ -1,84 +1,84 @@ -import * as vscode from "vscode"; -import { - LanguageClient, - Location, - LocationLink, -} from "vscode-languageclient/node"; - -const sourceDefinitionMethod = "custom/textDocument/sourceDefinition"; -const sourceDefinitionCommand = "typescript.native-preview.goToSourceDefinition"; -const sourceDefinitionContext = "tsSupportsSourceDefinition"; - -type SourceDefinitionResponse = Location | Location[] | LocationLink[] | null; - -export function registerSourceDefinitionFeature(client: LanguageClient): vscode.Disposable { - const experimental = client.initializeResult?.capabilities?.experimental as { customSourceDefinitionProvider?: boolean; } | undefined; - const enabled = !!experimental?.customSourceDefinitionProvider; - void vscode.commands.executeCommand("setContext", sourceDefinitionContext, enabled); - - if (!enabled) { - return new vscode.Disposable(() => { - void vscode.commands.executeCommand("setContext", sourceDefinitionContext, false); - }); - } - - const disposable = vscode.commands.registerCommand(sourceDefinitionCommand, async () => { - const activeEditor = vscode.window.activeTextEditor; - if (!activeEditor) { - vscode.window.showErrorMessage(vscode.l10n.t("Go to Source Definition failed. No editor is active.")); - return; - } - - const { document } = activeEditor; - if (!["javascript", "javascriptreact", "typescript", "typescriptreact"].includes(document.languageId)) { - vscode.window.showErrorMessage(vscode.l10n.t("Go to Source Definition failed. Unsupported file type.")); - return; - } - - const position = activeEditor.selection.active; - await vscode.window.withProgress({ - location: vscode.ProgressLocation.Window, - title: vscode.l10n.t("Finding source definitions"), - }, async (_, token) => { - let response: SourceDefinitionResponse; - try { - response = await client.sendRequest( - sourceDefinitionMethod, - client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), - token, - ); - } - catch { - return; - } - - if (token.isCancellationRequested) { - return; - } - - const p2c = client.protocol2CodeConverter; - const items = !response ? [] : Array.isArray(response) ? response : [response]; - const locations = items.map(item => - LocationLink.is(item) - ? p2c.asLocation({ uri: item.targetUri, range: item.targetSelectionRange }) - : p2c.asLocation(item) - ); - - await vscode.commands.executeCommand( - "editor.action.goToLocations", - document.uri, - position, - locations, - "goto", - vscode.l10n.t("No source definitions found."), - ); - }); - }); - - return vscode.Disposable.from( - disposable, - new vscode.Disposable(() => { - void vscode.commands.executeCommand("setContext", sourceDefinitionContext, false); - }), - ); -} +import * as vscode from "vscode"; +import { + LanguageClient, + Location, + LocationLink, +} from "vscode-languageclient/node"; + +const sourceDefinitionMethod = "custom/textDocument/sourceDefinition"; +const sourceDefinitionCommand = "typescript.native-preview.goToSourceDefinition"; +const sourceDefinitionContext = "tsSupportsSourceDefinition"; + +type SourceDefinitionResponse = Location | Location[] | LocationLink[] | null; + +export function registerSourceDefinitionFeature(client: LanguageClient): vscode.Disposable { + const experimental = client.initializeResult?.capabilities?.experimental as { customSourceDefinitionProvider?: boolean; } | undefined; + const enabled = !!experimental?.customSourceDefinitionProvider; + void vscode.commands.executeCommand("setContext", sourceDefinitionContext, enabled); + + if (!enabled) { + return new vscode.Disposable(() => { + void vscode.commands.executeCommand("setContext", sourceDefinitionContext, false); + }); + } + + const disposable = vscode.commands.registerCommand(sourceDefinitionCommand, async () => { + const activeEditor = vscode.window.activeTextEditor; + if (!activeEditor) { + vscode.window.showErrorMessage(vscode.l10n.t("Go to Source Definition failed. No editor is active.")); + return; + } + + const { document } = activeEditor; + if (!["javascript", "javascriptreact", "typescript", "typescriptreact"].includes(document.languageId)) { + vscode.window.showErrorMessage(vscode.l10n.t("Go to Source Definition failed. Unsupported file type.")); + return; + } + + const position = activeEditor.selection.active; + await vscode.window.withProgress({ + location: vscode.ProgressLocation.Window, + title: vscode.l10n.t("Finding source definitions"), + }, async (_, token) => { + let response: SourceDefinitionResponse; + try { + response = await client.sendRequest( + sourceDefinitionMethod, + client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), + token, + ); + } + catch { + return; + } + + if (token.isCancellationRequested) { + return; + } + + const p2c = client.protocol2CodeConverter; + const items = !response ? [] : Array.isArray(response) ? response : [response]; + const locations = items.map(item => + LocationLink.is(item) + ? p2c.asLocation({ uri: item.targetUri, range: item.targetSelectionRange }) + : p2c.asLocation(item) + ); + + await vscode.commands.executeCommand( + "editor.action.goToLocations", + document.uri, + position, + locations, + "goto", + vscode.l10n.t("No source definitions found."), + ); + }); + }); + + return vscode.Disposable.from( + disposable, + new vscode.Disposable(() => { + void vscode.commands.executeCommand("setContext", sourceDefinitionContext, false); + }), + ); +} diff --git a/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts b/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts index e119bac392b60..724c869ac63e6 100644 --- a/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts +++ b/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts @@ -1,95 +1,95 @@ -import * as vscode from "vscode"; - -export class Condition { - private _value: boolean; - private isDisposed = false; - private readonly updateListener: vscode.Disposable; - - constructor( - private readonly getValue: () => boolean, - onUpdate: (handler: () => void) => vscode.Disposable, - ) { - this._value = this.getValue(); - - this.updateListener = onUpdate(() => { - const newValue = this.getValue(); - if (newValue !== this._value) { - this._value = newValue; - this._onDidChange.fire(); - } - }); - } - - public get value(): boolean { - return this._value; - } - - private readonly _onDidChange = new vscode.EventEmitter(); - public readonly onDidChange = this._onDidChange.event; - - dispose() { - if (this.isDisposed) { - return; - } - this.isDisposed = true; - this.updateListener.dispose(); - this._onDidChange.dispose(); - } -} - -class ConditionalRegistration { - private state?: { - readonly enabled: boolean; - readonly registration: vscode.Disposable | undefined; - }; - - public constructor( - private readonly conditions: readonly Condition[], - private readonly doRegister: () => vscode.Disposable, - private readonly elseDoRegister?: () => vscode.Disposable, - ) { - for (const condition of conditions) { - const listener = condition.onDidChange(() => this.update()); - this.didChangeListeners.push(listener); - } - this.update(); - } - - private didChangeListeners: vscode.Disposable[] = []; - - public dispose() { - this.state?.registration?.dispose(); - while (this.didChangeListeners.length > 0) { - const d = this.didChangeListeners.pop()!; - d.dispose(); - } - for (const c of this.conditions) { - c.dispose(); - } - this.state = undefined; - } - - private update() { - const enabled = this.conditions.every(condition => condition.value); - if (enabled) { - if (!this.state?.enabled) { - this.state?.registration?.dispose(); - this.state = { enabled: true, registration: this.doRegister() }; - } - } - else { - if (this.state?.enabled || !this.state) { - this.state?.registration?.dispose(); - this.state = { enabled: false, registration: this.elseDoRegister?.() }; - } - } - } -} - -export function conditionalRegistration( - conditions: readonly Condition[], - doRegister: () => vscode.Disposable, - elseDoRegister?: () => vscode.Disposable, -): vscode.Disposable { - return new ConditionalRegistration(conditions, doRegister, elseDoRegister); -} +import * as vscode from "vscode"; + +export class Condition { + private _value: boolean; + private isDisposed = false; + private readonly updateListener: vscode.Disposable; + + constructor( + private readonly getValue: () => boolean, + onUpdate: (handler: () => void) => vscode.Disposable, + ) { + this._value = this.getValue(); + + this.updateListener = onUpdate(() => { + const newValue = this.getValue(); + if (newValue !== this._value) { + this._value = newValue; + this._onDidChange.fire(); + } + }); + } + + public get value(): boolean { + return this._value; + } + + private readonly _onDidChange = new vscode.EventEmitter(); + public readonly onDidChange = this._onDidChange.event; + + dispose() { + if (this.isDisposed) { + return; + } + this.isDisposed = true; + this.updateListener.dispose(); + this._onDidChange.dispose(); + } +} + +class ConditionalRegistration { + private state?: { + readonly enabled: boolean; + readonly registration: vscode.Disposable | undefined; + }; + + public constructor( + private readonly conditions: readonly Condition[], + private readonly doRegister: () => vscode.Disposable, + private readonly elseDoRegister?: () => vscode.Disposable, + ) { + for (const condition of conditions) { + const listener = condition.onDidChange(() => this.update()); + this.didChangeListeners.push(listener); + } + this.update(); + } + + private didChangeListeners: vscode.Disposable[] = []; + + public dispose() { + this.state?.registration?.dispose(); + while (this.didChangeListeners.length > 0) { + const d = this.didChangeListeners.pop()!; + d.dispose(); + } + for (const c of this.conditions) { + c.dispose(); + } + this.state = undefined; + } + + private update() { + const enabled = this.conditions.every(condition => condition.value); + if (enabled) { + if (!this.state?.enabled) { + this.state?.registration?.dispose(); + this.state = { enabled: true, registration: this.doRegister() }; + } + } + else { + if (this.state?.enabled || !this.state) { + this.state?.registration?.dispose(); + this.state = { enabled: false, registration: this.elseDoRegister?.() }; + } + } + } +} + +export function conditionalRegistration( + conditions: readonly Condition[], + doRegister: () => vscode.Disposable, + elseDoRegister?: () => vscode.Disposable, +): vscode.Disposable { + return new ConditionalRegistration(conditions, doRegister, elseDoRegister); +} diff --git a/packages/vscode-typescript/src/lspMiddleware.ts b/packages/vscode-typescript/src/lspMiddleware.ts index 999b38534f4fa..4bf4a49435435 100644 --- a/packages/vscode-typescript/src/lspMiddleware.ts +++ b/packages/vscode-typescript/src/lspMiddleware.ts @@ -1,149 +1,149 @@ -import type { - LspMiddlewareContext, - LspMiddlewareMethod, - LspMiddlewareResult, - LspMiddlewareTransformer, -} from "@typescript/typescript/unstable/vscode"; -import type { - CancellationToken, - Disposable, - MessageSignature, -} from "vscode-languageserver-protocol"; - -const supportedMethods: { readonly [M in LspMiddlewareMethod]: true; } = { - "textDocument/hover": true, - "textDocument/completion": true, - "completionItem/resolve": true, - "textDocument/signatureHelp": true, - "textDocument/definition": true, - "textDocument/typeDefinition": true, - "textDocument/implementation": true, - "textDocument/references": true, - "textDocument/documentHighlight": true, - "textDocument/documentSymbol": true, - "workspace/symbol": true, - "textDocument/rename": true, - "textDocument/prepareRename": true, - "textDocument/formatting": true, - "textDocument/rangeFormatting": true, - "textDocument/onTypeFormatting": true, - "textDocument/selectionRange": true, - "textDocument/foldingRange": true, - "textDocument/inlayHint": true, - "textDocument/codeAction": true, - "textDocument/codeLens": true, - "codeLens/resolve": true, - "textDocument/prepareCallHierarchy": true, - "callHierarchy/incomingCalls": true, - "callHierarchy/outgoingCalls": true, - "textDocument/linkedEditingRange": true, - "textDocument/semanticTokens/full": true, - "textDocument/semanticTokens/range": true, - "textDocument/diagnostic": true, - "custom/textDocument/sourceDefinition": true, - "custom/textDocument/multiDocumentHighlight": true, - "textDocument/_vs_onAutoInsert": true, - "textDocument/_vs_references": true, -}; - -function isSupportedMethod(method: string): method is LspMiddlewareMethod { - return Object.hasOwn(supportedMethods, method); -} - -/** Internal middleware can change requests and receives the original parameters. */ -export interface FirstPartyLspMiddleware { - ( - type: string | MessageSignature, - params: P | undefined, - token: CancellationToken | undefined, - next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, - ): Promise; -} - -interface Registration { - invoke(result: unknown, context: unknown): unknown; -} - -export class LspMiddlewareRegistry implements Disposable { - private readonly registrations = new Map(); - private disposed = false; - - constructor( - private readonly reportError: (method: LspMiddlewareMethod, error: unknown) => void, - private readonly firstPartyMiddleware: readonly FirstPartyLspMiddleware[] = [], - ) {} - - register(method: M, transformer: LspMiddlewareTransformer>): Disposable { - if (this.disposed) { - throw new Error("LSP middleware registry is disposed."); - } - if (!isSupportedMethod(method)) { - throw new TypeError(`LSP middleware method '${method}' is not supported.`); - } - if (typeof transformer !== "function") { - throw new TypeError("LSP middleware transformer must be a function."); - } - const registration: Registration = { - // The transport erases protocol types; registration keeps each callback paired with its method. - invoke: (result, context) => transformer(result as LspMiddlewareResult, context as LspMiddlewareContext), - }; - const registrations = this.registrations.get(method) ?? []; - registrations.push(registration); - this.registrations.set(method, registrations); - let disposed = false; - return { - dispose: () => { - if (disposed) return; - disposed = true; - const index = registrations.indexOf(registration); - if (index !== -1) registrations.splice(index, 1); - if (registrations.length === 0 && this.registrations.get(method) === registrations) { - this.registrations.delete(method); - } - }, - }; - } - - sendRequest( - type: string | MessageSignature, - params: P | undefined, - token: CancellationToken | undefined, - next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, - ): Promise { - const dispatch = async (type: string | MessageSignature, params?: P, token?: CancellationToken): Promise => { - const result = await next(type, params, token); - const method = typeof type === "string" ? type : type.method; - if (!isSupportedMethod(method)) return result; - return this.transform(method, result, { params }, token); - }; - const invoke = (index: number, type: string | MessageSignature, params?: P, token?: CancellationToken): Promise => { - const middleware = this.firstPartyMiddleware[index]; - return middleware - ? middleware(type, params, token, (type, params, token) => invoke(index + 1, type, params, token)) - : dispatch(type, params, token); - }; - return invoke(0, type, params, token); - } - - private async transform(method: LspMiddlewareMethod, original: R, context: unknown, token?: CancellationToken): Promise { - const registrations = this.registrations.get(method)?.slice(); - if (!registrations?.length || token?.isCancellationRequested) return original; - try { - let result: unknown = structuredClone(original); - for (const registration of registrations) { - if (token?.isCancellationRequested) return original; - result = await registration.invoke(result, structuredClone(context)); - } - return token?.isCancellationRequested ? original : result as R; - } - catch (error) { - this.reportError(method, error); - return original; - } - } - - dispose(): void { - this.disposed = true; - this.registrations.clear(); - } -} +import type { + LspMiddlewareContext, + LspMiddlewareMethod, + LspMiddlewareResult, + LspMiddlewareTransformer, +} from "@typescript/typescript/unstable/vscode"; +import type { + CancellationToken, + Disposable, + MessageSignature, +} from "vscode-languageserver-protocol"; + +const supportedMethods: { readonly [M in LspMiddlewareMethod]: true; } = { + "textDocument/hover": true, + "textDocument/completion": true, + "completionItem/resolve": true, + "textDocument/signatureHelp": true, + "textDocument/definition": true, + "textDocument/typeDefinition": true, + "textDocument/implementation": true, + "textDocument/references": true, + "textDocument/documentHighlight": true, + "textDocument/documentSymbol": true, + "workspace/symbol": true, + "textDocument/rename": true, + "textDocument/prepareRename": true, + "textDocument/formatting": true, + "textDocument/rangeFormatting": true, + "textDocument/onTypeFormatting": true, + "textDocument/selectionRange": true, + "textDocument/foldingRange": true, + "textDocument/inlayHint": true, + "textDocument/codeAction": true, + "textDocument/codeLens": true, + "codeLens/resolve": true, + "textDocument/prepareCallHierarchy": true, + "callHierarchy/incomingCalls": true, + "callHierarchy/outgoingCalls": true, + "textDocument/linkedEditingRange": true, + "textDocument/semanticTokens/full": true, + "textDocument/semanticTokens/range": true, + "textDocument/diagnostic": true, + "custom/textDocument/sourceDefinition": true, + "custom/textDocument/multiDocumentHighlight": true, + "textDocument/_vs_onAutoInsert": true, + "textDocument/_vs_references": true, +}; + +function isSupportedMethod(method: string): method is LspMiddlewareMethod { + return Object.hasOwn(supportedMethods, method); +} + +/** Internal middleware can change requests and receives the original parameters. */ +export interface FirstPartyLspMiddleware { + ( + type: string | MessageSignature, + params: P | undefined, + token: CancellationToken | undefined, + next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, + ): Promise; +} + +interface Registration { + invoke(result: unknown, context: unknown): unknown; +} + +export class LspMiddlewareRegistry implements Disposable { + private readonly registrations = new Map(); + private disposed = false; + + constructor( + private readonly reportError: (method: LspMiddlewareMethod, error: unknown) => void, + private readonly firstPartyMiddleware: readonly FirstPartyLspMiddleware[] = [], + ) {} + + register(method: M, transformer: LspMiddlewareTransformer>): Disposable { + if (this.disposed) { + throw new Error("LSP middleware registry is disposed."); + } + if (!isSupportedMethod(method)) { + throw new TypeError(`LSP middleware method '${method}' is not supported.`); + } + if (typeof transformer !== "function") { + throw new TypeError("LSP middleware transformer must be a function."); + } + const registration: Registration = { + // The transport erases protocol types; registration keeps each callback paired with its method. + invoke: (result, context) => transformer(result as LspMiddlewareResult, context as LspMiddlewareContext), + }; + const registrations = this.registrations.get(method) ?? []; + registrations.push(registration); + this.registrations.set(method, registrations); + let disposed = false; + return { + dispose: () => { + if (disposed) return; + disposed = true; + const index = registrations.indexOf(registration); + if (index !== -1) registrations.splice(index, 1); + if (registrations.length === 0 && this.registrations.get(method) === registrations) { + this.registrations.delete(method); + } + }, + }; + } + + sendRequest( + type: string | MessageSignature, + params: P | undefined, + token: CancellationToken | undefined, + next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, + ): Promise { + const dispatch = async (type: string | MessageSignature, params?: P, token?: CancellationToken): Promise => { + const result = await next(type, params, token); + const method = typeof type === "string" ? type : type.method; + if (!isSupportedMethod(method)) return result; + return this.transform(method, result, { params }, token); + }; + const invoke = (index: number, type: string | MessageSignature, params?: P, token?: CancellationToken): Promise => { + const middleware = this.firstPartyMiddleware[index]; + return middleware + ? middleware(type, params, token, (type, params, token) => invoke(index + 1, type, params, token)) + : dispatch(type, params, token); + }; + return invoke(0, type, params, token); + } + + private async transform(method: LspMiddlewareMethod, original: R, context: unknown, token?: CancellationToken): Promise { + const registrations = this.registrations.get(method)?.slice(); + if (!registrations?.length || token?.isCancellationRequested) return original; + try { + let result: unknown = structuredClone(original); + for (const registration of registrations) { + if (token?.isCancellationRequested) return original; + result = await registration.invoke(result, structuredClone(context)); + } + return token?.isCancellationRequested ? original : result as R; + } + catch (error) { + this.reportError(method, error); + return original; + } + } + + dispose(): void { + this.disposed = true; + this.registrations.clear(); + } +} diff --git a/packages/vscode-typescript/src/managedFileContext.ts b/packages/vscode-typescript/src/managedFileContext.ts index 8ac254e229d32..d1da83b63332f 100644 --- a/packages/vscode-typescript/src/managedFileContext.ts +++ b/packages/vscode-typescript/src/managedFileContext.ts @@ -1,56 +1,56 @@ -import * as vscode from "vscode"; -import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; -import { - disabledSchemes, - isJsConfigOrTsConfigFileName, - isSupportedLanguageMode, -} from "./util"; - -/** - * When-clause context set when the current file is managed by tsgo. - */ -export class ManagedFileContextManager implements vscode.Disposable { - private static readonly contextName = "typescript.isManagedFile"; - - private isInManagedFileContext = false; - private disposables: vscode.Disposable[] = []; - - constructor(activeJsTsEditorTracker: ActiveJsTsEditorTracker) { - this.disposables.push( - activeJsTsEditorTracker.onDidChangeActiveJsTsEditor( - editor => this.onDidChangeActiveTextEditor(editor), - ), - ); - this.onDidChangeActiveTextEditor(activeJsTsEditorTracker.activeJsTsEditor); - } - - private onDidChangeActiveTextEditor(editor?: vscode.TextEditor): void { - if (editor) { - this.updateContext(this.isManagedFile(editor)); - } - else { - this.updateContext(false); - } - } - - private isManagedFile(editor: vscode.TextEditor): boolean { - if (disabledSchemes.has(editor.document.uri.scheme)) { - return false; - } - return isSupportedLanguageMode(editor.document) - || isJsConfigOrTsConfigFileName(editor.document.fileName); - } - - private updateContext(newValue: boolean): void { - if (newValue === this.isInManagedFileContext) { - return; - } - vscode.commands.executeCommand("setContext", ManagedFileContextManager.contextName, newValue); - this.isInManagedFileContext = newValue; - } - - dispose(): void { - this.updateContext(false); - this.disposables.forEach(d => d.dispose()); - } -} +import * as vscode from "vscode"; +import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; +import { + disabledSchemes, + isJsConfigOrTsConfigFileName, + isSupportedLanguageMode, +} from "./util"; + +/** + * When-clause context set when the current file is managed by tsgo. + */ +export class ManagedFileContextManager implements vscode.Disposable { + private static readonly contextName = "typescript.isManagedFile"; + + private isInManagedFileContext = false; + private disposables: vscode.Disposable[] = []; + + constructor(activeJsTsEditorTracker: ActiveJsTsEditorTracker) { + this.disposables.push( + activeJsTsEditorTracker.onDidChangeActiveJsTsEditor( + editor => this.onDidChangeActiveTextEditor(editor), + ), + ); + this.onDidChangeActiveTextEditor(activeJsTsEditorTracker.activeJsTsEditor); + } + + private onDidChangeActiveTextEditor(editor?: vscode.TextEditor): void { + if (editor) { + this.updateContext(this.isManagedFile(editor)); + } + else { + this.updateContext(false); + } + } + + private isManagedFile(editor: vscode.TextEditor): boolean { + if (disabledSchemes.has(editor.document.uri.scheme)) { + return false; + } + return isSupportedLanguageMode(editor.document) + || isJsConfigOrTsConfigFileName(editor.document.fileName); + } + + private updateContext(newValue: boolean): void { + if (newValue === this.isInManagedFileContext) { + return; + } + vscode.commands.executeCommand("setContext", ManagedFileContextManager.contextName, newValue); + this.isInManagedFileContext = newValue; + } + + dispose(): void { + this.updateContext(false); + this.disposables.forEach(d => d.dispose()); + } +} diff --git a/packages/vscode-typescript/src/projectStatus.ts b/packages/vscode-typescript/src/projectStatus.ts index 86ce370342d6a..65ea8b6990e8d 100644 --- a/packages/vscode-typescript/src/projectStatus.ts +++ b/packages/vscode-typescript/src/projectStatus.ts @@ -1,185 +1,185 @@ -import * as vscode from "vscode"; -import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; -import { Client } from "./client"; -import { - isSupportedLanguageMode, - jsTsLanguageModes, -} from "./util"; - -namespace ProjectInfoState { - export const enum Type { - None, - Pending, - Resolved, - } - - export const None = Object.freeze({ type: Type.None } as const); - - export class Pending { - public readonly type = Type.Pending; - public readonly cancellation = new vscode.CancellationTokenSource(); - - constructor( - public readonly resource: vscode.Uri, - ) {} - } - - export class Resolved { - public readonly type = Type.Resolved; - - constructor( - public readonly resource: vscode.Uri, - public readonly configFile: string, - ) {} - } - - export type State = typeof None | Pending | Resolved; -} - -/** - * Shows which tsconfig/jsconfig the current file belongs to. - */ -export class ProjectStatus implements vscode.Disposable { - private statusItem?: vscode.LanguageStatusItem; - private state: ProjectInfoState.State = ProjectInfoState.None; - private disposables: vscode.Disposable[] = []; - private ready = false; - - constructor( - private readonly client: Client, - private readonly activeEditorTracker: ActiveJsTsEditorTracker, - onReady: vscode.Event, - ) { - this.disposables.push( - activeEditorTracker.onDidChangeActiveJsTsEditor(() => this.updateStatus()), - ); - this.disposables.push( - onReady(() => { - this.ready = true; - this.updateStatus(); - }), - ); - } - - private async updateStatus(): Promise { - const doc = this.activeEditorTracker.activeJsTsEditor?.document; - if (!doc || !isSupportedLanguageMode(doc)) { - this.updateState(ProjectInfoState.None); - return; - } - - if (doc.uri.scheme !== "file" && doc.uri.scheme !== "untitled") { - this.updateState(ProjectInfoState.None); - return; - } - - if (!this.ready) { - return; - } - - const pendingState = new ProjectInfoState.Pending(doc.uri); - this.updateState(pendingState); - - try { - const result = await this.client.getProjectInfo(doc.uri.toString(), pendingState.cancellation.token); - if (this.state === pendingState) { - this.updateState(new ProjectInfoState.Resolved(doc.uri, result.configFilePath)); - } - } - catch { - // If we fail to get project info, just go back to no status - if (this.state === pendingState) { - this.updateState(ProjectInfoState.None); - } - } - } - - private updateState(newState: ProjectInfoState.State): void { - if (this.state === newState) { - return; - } - - if (this.state.type === ProjectInfoState.Type.Pending) { - this.state.cancellation.cancel(); - this.state.cancellation.dispose(); - } - - this.state = newState; - - switch (this.state.type) { - case ProjectInfoState.Type.None: { - this.statusItem?.dispose(); - this.statusItem = undefined; - break; - } - case ProjectInfoState.Type.Pending: { - const statusItem = this.ensureStatusItem(); - statusItem.severity = vscode.LanguageStatusSeverity.Information; - statusItem.text = vscode.l10n.t("Loading project info..."); - statusItem.detail = undefined; - statusItem.command = undefined; - statusItem.busy = true; - break; - } - case ProjectInfoState.Type.Resolved: { - const currentLanguageId = this.activeEditorTracker.activeJsTsEditor?.document.languageId; - const isTypeScript = currentLanguageId === "typescript" - || currentLanguageId === "typescriptreact"; - const noConfigFileText = isTypeScript ? vscode.l10n.t("No tsconfig") : vscode.l10n.t("No jsconfig"); - - const rootPath = this.getWorkspaceRootForResource(this.state.resource); - if (!rootPath) { - if (this.statusItem) { - this.statusItem.text = noConfigFileText; - this.statusItem.detail = !vscode.workspace.workspaceFolders - ? vscode.l10n.t("No opened folders") - : vscode.l10n.t("File is not part of opened folders"); - this.statusItem.busy = false; - } - return; - } - - const statusItem = this.ensureStatusItem(); - statusItem.busy = false; - statusItem.detail = undefined; - statusItem.severity = vscode.LanguageStatusSeverity.Information; - - if (this.state.configFile) { - statusItem.text = vscode.workspace.asRelativePath(this.state.configFile); - statusItem.command = { - command: "vscode.open", - title: vscode.l10n.t("Open Config File"), - arguments: [vscode.Uri.file(this.state.configFile)], - }; - } - else { - statusItem.text = noConfigFileText; - statusItem.command = undefined; - } - break; - } - } - } - - private ensureStatusItem(): vscode.LanguageStatusItem { - if (!this.statusItem) { - this.statusItem = vscode.languages.createLanguageStatusItem("typescript.native-preview.projectStatus", jsTsLanguageModes); - this.statusItem.name = vscode.l10n.t("TypeScript 7 Project Status"); - } - return this.statusItem; - } - - private getWorkspaceRootForResource(resource: vscode.Uri): vscode.Uri | undefined { - const folder = vscode.workspace.getWorkspaceFolder(resource); - return folder?.uri; - } - - dispose(): void { - this.statusItem?.dispose(); - if (this.state.type === ProjectInfoState.Type.Pending) { - this.state.cancellation.cancel(); - this.state.cancellation.dispose(); - } - this.disposables.forEach(d => d.dispose()); - } -} +import * as vscode from "vscode"; +import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; +import { Client } from "./client"; +import { + isSupportedLanguageMode, + jsTsLanguageModes, +} from "./util"; + +namespace ProjectInfoState { + export const enum Type { + None, + Pending, + Resolved, + } + + export const None = Object.freeze({ type: Type.None } as const); + + export class Pending { + public readonly type = Type.Pending; + public readonly cancellation = new vscode.CancellationTokenSource(); + + constructor( + public readonly resource: vscode.Uri, + ) {} + } + + export class Resolved { + public readonly type = Type.Resolved; + + constructor( + public readonly resource: vscode.Uri, + public readonly configFile: string, + ) {} + } + + export type State = typeof None | Pending | Resolved; +} + +/** + * Shows which tsconfig/jsconfig the current file belongs to. + */ +export class ProjectStatus implements vscode.Disposable { + private statusItem?: vscode.LanguageStatusItem; + private state: ProjectInfoState.State = ProjectInfoState.None; + private disposables: vscode.Disposable[] = []; + private ready = false; + + constructor( + private readonly client: Client, + private readonly activeEditorTracker: ActiveJsTsEditorTracker, + onReady: vscode.Event, + ) { + this.disposables.push( + activeEditorTracker.onDidChangeActiveJsTsEditor(() => this.updateStatus()), + ); + this.disposables.push( + onReady(() => { + this.ready = true; + this.updateStatus(); + }), + ); + } + + private async updateStatus(): Promise { + const doc = this.activeEditorTracker.activeJsTsEditor?.document; + if (!doc || !isSupportedLanguageMode(doc)) { + this.updateState(ProjectInfoState.None); + return; + } + + if (doc.uri.scheme !== "file" && doc.uri.scheme !== "untitled") { + this.updateState(ProjectInfoState.None); + return; + } + + if (!this.ready) { + return; + } + + const pendingState = new ProjectInfoState.Pending(doc.uri); + this.updateState(pendingState); + + try { + const result = await this.client.getProjectInfo(doc.uri.toString(), pendingState.cancellation.token); + if (this.state === pendingState) { + this.updateState(new ProjectInfoState.Resolved(doc.uri, result.configFilePath)); + } + } + catch { + // If we fail to get project info, just go back to no status + if (this.state === pendingState) { + this.updateState(ProjectInfoState.None); + } + } + } + + private updateState(newState: ProjectInfoState.State): void { + if (this.state === newState) { + return; + } + + if (this.state.type === ProjectInfoState.Type.Pending) { + this.state.cancellation.cancel(); + this.state.cancellation.dispose(); + } + + this.state = newState; + + switch (this.state.type) { + case ProjectInfoState.Type.None: { + this.statusItem?.dispose(); + this.statusItem = undefined; + break; + } + case ProjectInfoState.Type.Pending: { + const statusItem = this.ensureStatusItem(); + statusItem.severity = vscode.LanguageStatusSeverity.Information; + statusItem.text = vscode.l10n.t("Loading project info..."); + statusItem.detail = undefined; + statusItem.command = undefined; + statusItem.busy = true; + break; + } + case ProjectInfoState.Type.Resolved: { + const currentLanguageId = this.activeEditorTracker.activeJsTsEditor?.document.languageId; + const isTypeScript = currentLanguageId === "typescript" + || currentLanguageId === "typescriptreact"; + const noConfigFileText = isTypeScript ? vscode.l10n.t("No tsconfig") : vscode.l10n.t("No jsconfig"); + + const rootPath = this.getWorkspaceRootForResource(this.state.resource); + if (!rootPath) { + if (this.statusItem) { + this.statusItem.text = noConfigFileText; + this.statusItem.detail = !vscode.workspace.workspaceFolders + ? vscode.l10n.t("No opened folders") + : vscode.l10n.t("File is not part of opened folders"); + this.statusItem.busy = false; + } + return; + } + + const statusItem = this.ensureStatusItem(); + statusItem.busy = false; + statusItem.detail = undefined; + statusItem.severity = vscode.LanguageStatusSeverity.Information; + + if (this.state.configFile) { + statusItem.text = vscode.workspace.asRelativePath(this.state.configFile); + statusItem.command = { + command: "vscode.open", + title: vscode.l10n.t("Open Config File"), + arguments: [vscode.Uri.file(this.state.configFile)], + }; + } + else { + statusItem.text = noConfigFileText; + statusItem.command = undefined; + } + break; + } + } + } + + private ensureStatusItem(): vscode.LanguageStatusItem { + if (!this.statusItem) { + this.statusItem = vscode.languages.createLanguageStatusItem("typescript.native-preview.projectStatus", jsTsLanguageModes); + this.statusItem.name = vscode.l10n.t("TypeScript 7 Project Status"); + } + return this.statusItem; + } + + private getWorkspaceRootForResource(resource: vscode.Uri): vscode.Uri | undefined { + const folder = vscode.workspace.getWorkspaceFolder(resource); + return folder?.uri; + } + + dispose(): void { + this.statusItem?.dispose(); + if (this.state.type === ProjectInfoState.Type.Pending) { + this.state.cancellation.cancel(); + this.state.cancellation.dispose(); + } + this.disposables.forEach(d => d.dispose()); + } +} diff --git a/packages/vscode-typescript/src/session.ts b/packages/vscode-typescript/src/session.ts index e9e8f78541bf9..214c3a535ac20 100644 --- a/packages/vscode-typescript/src/session.ts +++ b/packages/vscode-typescript/src/session.ts @@ -1,756 +1,756 @@ -import type { - LspMiddlewareMethod, - LspMiddlewareTransformer, -} from "@typescript/typescript/unstable/vscode"; -import * as path from "path"; -import * as vscode from "vscode"; -import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; -import { Client } from "./client"; -import { - registerCodeLensShowLocationsCommand, - updateWorkspaceUseTsgoSetting, -} from "./commands"; -import { - type ContentMapperContribution, - documentMatchesContentMapperContributions, - serializeContentMapperContributions, - validateContentMapperRegistration, -} from "./contentMapperContributions"; -import { LspMiddlewareRegistry } from "./lspMiddleware"; -import { ProjectStatus } from "./projectStatus"; -import { setupStatusBar } from "./statusBar"; -import { TelemetryReporter } from "./telemetryReporting"; -import { - getDefaultExePath, - getExe, - getWorkspaceTsdkConfigValue, - getWorkspaceTsdkForPrompt, - readNativePreviewConfig, - resolveTsdkPath, - resolveTsdkPathToExe, - updateWorkspaceTsdkConfig, - useWorkspaceTsdkStorageKey, - workspaceConfigBase, -} from "./util"; -import { workspaceSymbolSendRequestMiddleware } from "./workspaceSymbolMiddleware"; - -/** - * SessionManager's lifetime is equal to that of the extension. It is responsible - * for starting, restarting, replacing, and disposing the Session. - */ -export class SessionManager implements vscode.Disposable { - currentSession?: Session; - private disposables: vscode.Disposable[] = []; - private outputChannel: vscode.LogOutputChannel; - private initializedEventEmitter: vscode.EventEmitter; - private telemetryReporter: TelemetryReporter; - private readonly contentMapperRegistrations = new Map(); - private readonly lspMiddleware: LspMiddlewareRegistry; - private lifecycleOperation = Promise.resolve(); - private contentMapperSyncOperation = Promise.resolve(); - - constructor( - context: vscode.ExtensionContext, - outputChannel: vscode.LogOutputChannel, - initializedEventEmitter: vscode.EventEmitter, - telemetryReporter: TelemetryReporter, - ) { - this.outputChannel = outputChannel; - this.telemetryReporter = telemetryReporter; - this.initializedEventEmitter = initializedEventEmitter; - this.lspMiddleware = new LspMiddlewareRegistry((method, error) => { - const detail = error instanceof Error ? error.stack ?? error.message : String(error); - this.outputChannel.error(`LSP middleware for '${method}' failed; using original server data: ${detail}`); - }, [workspaceSymbolSendRequestMiddleware]); - - this.disposables.push(vscode.workspace.onDidChangeConfiguration(event => { - if (this.currentSession && event.affectsConfiguration("js/ts.contentMappers.enabled")) { - void this.restart(context).catch(error => { - this.outputChannel.error(`TypeScript language server restart failed: ${String(error)}`); - }); - } - })); - this.disposables.push(vscode.workspace.onDidOpenTextDocument(document => { - if (documentMatchesContentMapperContributions(document, this.contentMapperRegistrations)) { - void this.syncContentMapperContributions(); - } - })); - this.disposables.push(initializedEventEmitter.event(() => { - void this.syncContentMapperContributions(); - })); - } - - start(context: vscode.ExtensionContext): Promise { - return this.restart(context); - } - - restart(context: vscode.ExtensionContext): Promise { - return this.enqueueLifecycleOperation(() => this.restartNow(context)); - } - - private async restartNow(context: vscode.ExtensionContext): Promise { - if (this.currentSession) { - this.outputChannel.appendLine("Restarting TypeScript language server..."); - await this.currentSession.stop(); - } - const session = new Session(context, this.outputChannel, this.initializedEventEmitter, this.telemetryReporter, () => this.stop(), () => this.restart(context), this.lspMiddleware); - this.currentSession = session; - try { - await session.start(context); - await this.syncContentMapperContributions(); - } - catch (error) { - if (this.currentSession === session) { - this.currentSession = undefined; - } - await session.dispose(); - throw error; - } - } - - stop(): Promise { - return this.enqueueLifecycleOperation(async () => { - if (this.currentSession) { - await this.currentSession.stop(); - this.currentSession = undefined; - } - }); - } - - async initializeAPIConnection(pipe?: string): Promise { - if (!this.currentSession) { - throw new Error(vscode.l10n.t("Language server is not running.")); - } - const result = await this.currentSession.client.initializeAPISession(pipe); - return result.pipe; - } - - registerContentMappers(contributorId: string, contributions: readonly ContentMapperContribution[]): vscode.Disposable { - validateContentMapperRegistration(contributorId, contributions); - if (this.contentMapperRegistrations.has(contributorId)) { - throw new Error(`Content mapper contributor '${contributorId}' is already registered.`); - } - this.contentMapperRegistrations.set(contributorId, contributions); - void this.syncContentMapperContributions(); - let disposed = false; - return new vscode.Disposable(() => { - if (disposed) return; - disposed = true; - this.contentMapperRegistrations.delete(contributorId); - void this.syncContentMapperContributions(); - }); - } - - registerLspMiddleware(method: M, transformer: LspMiddlewareTransformer>): vscode.Disposable { - return this.lspMiddleware.register(method, transformer); - } - - private syncContentMapperContributions(): Promise { - const operation = this.contentMapperSyncOperation.then(() => this.syncContentMapperContributionsNow()); - this.contentMapperSyncOperation = operation.catch(() => {}); - return operation; - } - - private async syncContentMapperContributionsNow(): Promise { - try { - if (!this.currentSession?.client.isInitialized) return; - const openDocuments = vscode.workspace.textDocuments - .filter(document => documentMatchesContentMapperContributions(document, this.contentMapperRegistrations)) - .map(document => document.uri); - await this.currentSession.client.setContentMapperContributions( - serializeContentMapperContributions(this.contentMapperRegistrations), - openDocuments, - ); - } - catch (error) { - this.outputChannel.warn(`Content mapper contribution synchronization failed: ${String(error)}`); - } - } - - private enqueueLifecycleOperation(operation: () => Promise): Promise { - const result = this.lifecycleOperation.then(operation); - this.lifecycleOperation = result.catch(() => {}); - return result; - } - - dispose(): Promise { - return this.enqueueLifecycleOperation(async () => { - this.lspMiddleware.dispose(); - await this.currentSession?.dispose(); - this.currentSession = undefined; - await Promise.all(this.disposables.splice(0).map(d => d.dispose())); - }); - } -} - -/** - * Session's lifetime is equal to that of its LanguageClient. The LanguageClient - * can be restarted within the same Session only if the underlying exe path/version - * has not changed. Otherwise, a new Session must be created. Since Session only - * exists while the LSP server is running (or actively starting/restarting/stopping), - * it also owns the commands and UI elements that should only be active while the - * server is running. - */ -class Session implements vscode.Disposable { - client: Client; - private disposables: vscode.Disposable[] = []; - private context: vscode.ExtensionContext; - private outputChannel: vscode.LogOutputChannel; - private telemetryReporter: TelemetryReporter; - private initializedEventEmitter: vscode.EventEmitter; - private stopSession: () => Promise; - private restartSession: () => Promise; - - constructor( - context: vscode.ExtensionContext, - outputChannel: vscode.LogOutputChannel, - initializedEventEmitter: vscode.EventEmitter, - telemetryReporter: TelemetryReporter, - stopSession: () => Promise, - restartSession: () => Promise, - lspMiddleware: LspMiddlewareRegistry, - ) { - this.client = new Client(outputChannel, initializedEventEmitter, telemetryReporter, lspMiddleware); - this.context = context; - this.outputChannel = outputChannel; - this.telemetryReporter = telemetryReporter; - this.initializedEventEmitter = initializedEventEmitter; - this.stopSession = stopSession; - this.restartSession = restartSession; - this.registerCommands(); - } - - async start(context: vscode.ExtensionContext): Promise { - await vscode.commands.executeCommand("setContext", "typescript.isManagedFile", false); - const exe = await getExe(context); - await this.client.start(exe); - this.disposables.push(setupStatusBar(exe)); - - // Set up active editor tracker and UI features - const activeEditorTracker = new ActiveJsTsEditorTracker(); - this.disposables.push(activeEditorTracker); - - const projectStatus = new ProjectStatus(this.client, activeEditorTracker, this.initializedEventEmitter.event); - this.disposables.push(projectStatus); - - // If already initialized, fire immediately so projectStatus picks it up - if (this.client.isInitialized) { - this.initializedEventEmitter.fire(); - } - - await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", true); - } - - tryRestartClient(context: vscode.ExtensionContext): Promise { - return this.client.tryRestart(context); - } - - registerCommands(): void { - this.disposables.push(registerCodeLensShowLocationsCommand()); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.restart", async () => { - this.telemetryReporter.sendTelemetryEvent("command.restartLanguageServer"); - if (await this.tryRestartClient(this.context)) { - return; - } - - await this.restartSession(); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.output.focus", () => { - this.outputChannel.show(); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.selectVersion", async () => { - await promptSelectVersion(this.context, this.client, this.outputChannel, this.stopSession); - })); - - // TODO: Support the standard reload/go-to-project-config commands while - // Strada leaves their command palette entries visible in native mode: - // typescript.reloadProjects, javascript.reloadProjects, - // typescript.goToProjectConfig, and javascript.goToProjectConfig. - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.showMenu", () => { - showCommands(this.client); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.sortImports", () => { - return vscode.commands.executeCommand("editor.action.sourceAction", { - kind: "source.sortImports", - apply: "first", - }); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.removeUnusedImports", () => { - return vscode.commands.executeCommand("editor.action.sourceAction", { - kind: "source.removeUnusedImports", - apply: "first", - }); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.reportIssue", () => { - this.telemetryReporter.sendTelemetryEvent("command.reportIssue"); - vscode.commands.executeCommand("workbench.action.openIssueReporter", { - extensionId: this.context.extension.id, - }); - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.runGC", async () => { - try { - await this.client.runGC(); - vscode.window.showInformationMessage(vscode.l10n.t(`Garbage collection triggered`)); - } - catch (error) { - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to run GC: {0}`, String(error))); - } - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.saveHeapProfile", async () => { - const dir = await promptForProfileDirectory(); - if (!dir) return; - try { - const file = await this.client.saveHeapProfile(dir); - vscode.window.showInformationMessage(vscode.l10n.t(`Heap profile saved to: {0}`, file)); - } - catch (error) { - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to save heap profile: {0}`, String(error))); - } - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.saveAllocProfile", async () => { - const dir = await promptForProfileDirectory(); - if (!dir) return; - try { - const file = await this.client.saveAllocProfile(dir); - vscode.window.showInformationMessage(vscode.l10n.t(`Allocation profile saved to: {0}`, file)); - } - catch (error) { - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to save allocation profile: {0}`, String(error))); - } - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.startCPUProfile", async () => { - const dir = await promptForProfileDirectory(); - if (!dir) return; - try { - await this.client.startCPUProfile(dir); - vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", true); - vscode.window.showInformationMessage(vscode.l10n.t(`CPU profiling started. Profile will be saved to: {0}`, dir)); - } - catch (error) { - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to start CPU profile: {0}`, String(error))); - vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); - } - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.stopCPUProfile", async () => { - try { - const file = await this.client.stopCPUProfile(); - vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); - vscode.window.showInformationMessage(vscode.l10n.t(`CPU profile saved to: {0}`, file)); - } - catch (error) { - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to stop CPU profile: {0}`, String(error))); - } - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.initializeAPIConnection", async () => { - const result = await this.client.initializeAPISession(); - return result.pipe; - })); - - this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.initializeAPIConnection.ui", async () => { - try { - const result = await this.client.initializeAPISession(); - const copyString = vscode.l10n.t("Copy"); - const copy = await vscode.window.showInformationMessage(vscode.l10n.t(`API session initialized. Listening on: {0}`, result.pipe), copyString); - if (copy === copyString) { - await vscode.env.clipboard.writeText(result.pipe); - } - } - catch (error) { - const message = error instanceof Error ? error.message : String(error); - vscode.window.showErrorMessage(vscode.l10n.t(`Failed to initialize API session: {0}`, message)); - } - })); - } - - private async disposeSessionState(): Promise { - await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", false); - await vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); - const disposables = this.disposables.splice(0); - await Promise.all(disposables.map(d => d.dispose())); - } - - async stop(): Promise { - await this.disposeSessionState(); - await this.client.stop(); - } - - async dispose(): Promise { - await this.disposeSessionState(); - await this.client.dispose(); - } -} - -async function showCommands(client: Client): Promise { - interface CommandItem { - label: string; - description?: string; - kind?: vscode.QuickPickItemKind; - command?: string; - action?: () => Promise; - } - const commands: CommandItem[] = [ - { - label: vscode.l10n.t("$(refresh) Restart Server"), - description: vscode.l10n.t("Restart the TypeScript language server"), - command: "typescript.native-preview.restart", - }, - { - label: vscode.l10n.t("$(output) Show Output"), - description: vscode.l10n.t("Show the TypeScript output log"), - command: "typescript.native-preview.output.focus", - }, - { - label: vscode.l10n.t("$(report) Report Issue"), - description: vscode.l10n.t("Report an issue with TypeScript 7"), - command: "typescript.native-preview.reportIssue", - }, - { - label: vscode.l10n.t("$(versions) Select Version"), - description: vscode.l10n.t("Choose between bundled and workspace versions"), - command: "typescript.native-preview.selectVersion", - }, - { - label: vscode.l10n.t("$(stop-circle) Disable TypeScript 7"), - description: vscode.l10n.t("Switch back to the built-in TypeScript extension"), - command: "typescript.native-preview.disable", - }, - ]; - - const showDebugInfo = readNativePreviewConfig("showDebugInfo", false); - if (showDebugInfo) { - const exe = client.getCurrentExe(); - const pid = client.serverPid; - commands.push({ label: "", kind: vscode.QuickPickItemKind.Separator }); - if (exe) { - commands.push({ - label: vscode.l10n.t(`Executable`), - description: exe.path, - action: async () => { - await vscode.env.clipboard.writeText(exe.path); - vscode.window.showInformationMessage(vscode.l10n.t("Executable path copied to clipboard.")); - }, - }); - } - if (pid) { - commands.push({ - label: vscode.l10n.t(`PID`), - description: `${pid}`, - action: async () => { - await vscode.env.clipboard.writeText(`${pid}`); - vscode.window.showInformationMessage(vscode.l10n.t("Server PID copied to clipboard.")); - }, - }); - } - } - - const selected = await vscode.window.showQuickPick(commands, { - placeHolder: vscode.l10n.t("{0} Commands", "TypeScript 7"), - }); - - if (selected) { - if (selected.action) { - await selected.action(); - } - else if (selected.command) { - await vscode.commands.executeCommand(selected.command); - } - } -} - -interface VersionQuickPickItem extends vscode.QuickPickItem { - run(): Promise; - beforeRun?(): Promise; - restart?: boolean; -} - -function readStringArrayConfig(key: string): string[] { - const value = readNativePreviewConfig(key, undefined); - return Array.isArray(value) ? value.filter((v): v is string => typeof v === "string") : []; -} - -interface DetectedVersion { - folder: vscode.WorkspaceFolder; - version: string; - tsdkPath: string; - exePath: string; -} - -interface StradaVersion { - version: string; -} - -async function getStradaVersion(): Promise { - return await getStradaExtensionVersion("ms-vscode.vscode-typescript-next", ["node_modules", "typescript"]) - ?? await getStradaExtensionVersion("vscode.typescript-language-features", ["..", "node_modules", "typescript"]); -} - -async function getStradaExtensionVersion(extensionId: string, pathToTypescript: string[]): Promise { - const extension = vscode.extensions.getExtension(extensionId); - if (!extension) return undefined; - - const packagePath = vscode.Uri.joinPath(extension.extensionUri, ...pathToTypescript); - const tsserverPath = vscode.Uri.joinPath(packagePath, "lib", "tsserver.js"); - try { - await vscode.workspace.fs.stat(tsserverPath); - const packageJson = JSON.parse(await vscode.workspace.fs.readFile(vscode.Uri.joinPath(packagePath, "package.json")).then(buffer => buffer.toString())); - return { - version: typeof packageJson.version === "string" ? packageJson.version : "unknown", - }; - } - catch { - return undefined; - } -} - -async function findWorkspaceNativePreviewPackages(): Promise { - const results: DetectedVersion[] = []; - for (const folder of vscode.workspace.workspaceFolders ?? []) { - const packagePath = vscode.Uri.joinPath(folder.uri, "node_modules", "@typescript", "native-preview"); - const resolved = await resolveTsdkPathToExe(path.normalize(packagePath.fsPath)); - if (!resolved) continue; - results.push({ - folder, - version: resolved?.version ?? "unknown", - tsdkPath: path.normalize(packagePath.fsPath), - exePath: resolved?.path ?? "", - }); - } - return results; -} - -/** - * Compute the tsdk path to persist in workspace config. Uses a path relative - * to the workspace config base directory (the `.code-workspace` file's parent - * in multi-root, or the lone workspace folder in single-root). Falls back to - * the absolute path if there is no workspace. - */ -function tsdkPathForConfig(detected: DetectedVersion): string { - const base = workspaceConfigBase(); - if (!base) { - return detected.tsdkPath; - } - return path.relative(base.fsPath, detected.tsdkPath); -} - -/** - * Update the tsdk config to point at the detected version, but only if the - * existing value doesn't already resolve to the same absolute path (avoiding - * unnecessary config churn from formatting differences like absolute vs - * relative, leading ./, etc.). - */ -async function updateTsdkConfig(detected: DetectedVersion): Promise { - const currentValue = getWorkspaceTsdkConfigValue(); - const newValue = tsdkPathForConfig(detected); - if (currentValue !== undefined && resolveTsdkPath(currentValue) === resolveTsdkPath(newValue)) { - return; - } - await updateWorkspaceTsdkConfig(newValue); -} - -async function promptSelectVersion(context: vscode.ExtensionContext, client: Client, outputChannel: vscode.LogOutputChannel, stopServer: () => Promise): Promise { - const currentExePath = client.getCurrentExe()?.path; - const defaultExe = await getDefaultExePath(context); - const stradaVersion = await getStradaVersion(); - const workspaceVersions = await findWorkspaceNativePreviewPackages(); - const items: VersionQuickPickItem[] = []; - - if (stradaVersion) { - items.push({ - label: vscode.l10n.t("Use Built-in TypeScript"), - description: stradaVersion.version, - detail: "", - beforeRun: stopServer, - run: async () => { - await context.workspaceState.update(useWorkspaceTsdkStorageKey, false); - await updateWorkspaceUseTsgoSetting(false); - outputChannel.appendLine("Switched to bundled TypeScript version."); - }, - }); - } - - items.push({ - label: (currentExePath === defaultExe.path ? "• " : "") + vscode.l10n.t("Use TypeScript 7"), - description: defaultExe.version, - detail: "", - restart: true, - run: async () => { - await context.workspaceState.update(useWorkspaceTsdkStorageKey, false); - await updateWorkspaceUseTsgoSetting(true); - outputChannel.appendLine("Switched to TypeScript 7."); - }, - }); - - // Workspace versions - if (vscode.workspace.isTrusted) { - for (const wsVersion of workspaceVersions) { - const isActive = currentExePath === wsVersion.exePath; - items.push({ - label: (isActive ? "• " : "") + vscode.l10n.t("Use Workspace Version"), - description: wsVersion.version, - detail: wsVersion.tsdkPath, - restart: true, - run: async () => { - await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); - await updateTsdkConfig(wsVersion); - await updateWorkspaceUseTsgoSetting(true); - outputChannel.appendLine(`Switched to workspace tsgo version (${wsVersion.version}).`); - }, - }); - } - } - else if (workspaceVersions.length > 0) { - items.push({ - label: "", - kind: vscode.QuickPickItemKind.Separator, - run: async () => {}, - }); - items.push({ - label: vscode.l10n.t("$(lock) Manage Workspace Trust to select a workspace version"), - run: async () => { - await vscode.commands.executeCommand("workbench.trust.manage"); - }, - }); - } - - // Additional tsdk locations from settings - const additionalLocations = [ - ...readStringArrayConfig("tsdk.additionalLocations"), - ...readStringArrayConfig("additionalTsdkLocations"), - ]; - if (additionalLocations.length > 0) { - items.push({ - label: "", - kind: vscode.QuickPickItemKind.Separator, - run: async () => {}, - }); - for (const loc of additionalLocations) { - const resolved = await resolveTsdkPathToExe(loc); - if (!resolved) continue; - if (resolved.path === defaultExe.path) continue; - if (workspaceVersions.some(ws => ws.exePath === resolved.path)) continue; - const isActive = currentExePath === resolved.path; - items.push({ - label: (isActive ? "• " : "") + vscode.l10n.t("Use Custom Version"), - description: resolved.version, - detail: resolved.path, - restart: true, - run: async () => { - await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); - await updateWorkspaceTsdkConfig(loc); - await updateWorkspaceUseTsgoSetting(true); - outputChannel.appendLine(`Switched to custom TypeScript version at ${loc}.`); - }, - }); - } - } - - const selected = await vscode.window.showQuickPick(items, { - placeHolder: vscode.l10n.t("Select the TypeScript version used for JavaScript and TypeScript language features"), - }); - - if (selected) { - await selected.beforeRun?.(); - await selected.run(); - if (selected.restart) { - await vscode.commands.executeCommand("typescript.native-preview.restart"); - } - } -} - -/** - * If the workspace has a tsdk setting pending consent, or has - * `@typescript/typescript` installed in node_modules, prompt the user - * to allow using it. - */ -export async function promptUseWorkspaceVersion(context: vscode.ExtensionContext): Promise { - if (!vscode.workspace.isTrusted) return; - - const useWorkspaceTsdk = context.workspaceState.get(useWorkspaceTsdkStorageKey, false); - if (useWorkspaceTsdk) return; // already opted in - - const suppressKey = "typescript.native-preview.suppressPromptWorkspaceTsdk"; - if (context.workspaceState.get(suppressKey, false)) return; - - const workspaceTsdk = await getWorkspaceTsdkForPrompt(); - if (workspaceTsdk !== undefined) { - // The workspace config already specifies a tsdk location, but the - // user hasn't consented to using it. Just need their approval. - const resolved = await resolveTsdkPathToExe(workspaceTsdk); - if (!resolved) return; - const allow = vscode.l10n.t("Allow"); - const dismiss = vscode.l10n.t("Dismiss"); - const suppress = vscode.l10n.t("Never in this Workspace"); - - const result = await vscode.window.showInformationMessage( - vscode.l10n.t(`This workspace has a TypeScript 7 tsdk configured ({0}). Would you like to use it?`, resolved.version), - allow, - dismiss, - suppress, - ); - - if (result === allow) { - if (!vscode.workspace.isTrusted) return; - await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); - await vscode.commands.executeCommand("typescript.native-preview.restart"); - } - else if (result === suppress) { - await context.workspaceState.update(suppressKey, true); - } - } - else { - // No workspace tsdk config, but check if native-preview is installed - // in the workspace's node_modules. - const workspaceVersions = await findWorkspaceNativePreviewPackages(); - if (workspaceVersions.length === 0) return; - - const wsVersion = workspaceVersions[0]; - const allow = "Use Workspace Version"; - const dismiss = "Dismiss"; - const suppress = "Never in this Workspace"; - - const result = await vscode.window.showInformationMessage( - `This workspace has TypeScript 7 installed (${wsVersion.version}). Would you like to use it?`, - allow, - dismiss, - suppress, - ); - - if (result === allow) { - if (!vscode.workspace.isTrusted) return; - await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); - await updateTsdkConfig(wsVersion); - await vscode.commands.executeCommand("typescript.native-preview.restart"); - } - else if (result === suppress) { - await context.workspaceState.update(suppressKey, true); - } - } -} - -async function promptForProfileDirectory(): Promise { - const defaultDir = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath ?? ""; - const dir = await vscode.window.showInputBox({ - prompt: vscode.l10n.t("Enter directory path for profile output"), - value: defaultDir, - validateInput: value => { - if (!value.trim()) { - return vscode.l10n.t("Directory path is required"); - } - return undefined; - }, - }); - return dir?.trim(); -} +import type { + LspMiddlewareMethod, + LspMiddlewareTransformer, +} from "@typescript/typescript/unstable/vscode"; +import * as path from "path"; +import * as vscode from "vscode"; +import { ActiveJsTsEditorTracker } from "./activeJsTsEditorTracker"; +import { Client } from "./client"; +import { + registerCodeLensShowLocationsCommand, + updateWorkspaceUseTsgoSetting, +} from "./commands"; +import { + type ContentMapperContribution, + documentMatchesContentMapperContributions, + serializeContentMapperContributions, + validateContentMapperRegistration, +} from "./contentMapperContributions"; +import { LspMiddlewareRegistry } from "./lspMiddleware"; +import { ProjectStatus } from "./projectStatus"; +import { setupStatusBar } from "./statusBar"; +import { TelemetryReporter } from "./telemetryReporting"; +import { + getDefaultExePath, + getExe, + getWorkspaceTsdkConfigValue, + getWorkspaceTsdkForPrompt, + readNativePreviewConfig, + resolveTsdkPath, + resolveTsdkPathToExe, + updateWorkspaceTsdkConfig, + useWorkspaceTsdkStorageKey, + workspaceConfigBase, +} from "./util"; +import { workspaceSymbolSendRequestMiddleware } from "./workspaceSymbolMiddleware"; + +/** + * SessionManager's lifetime is equal to that of the extension. It is responsible + * for starting, restarting, replacing, and disposing the Session. + */ +export class SessionManager implements vscode.Disposable { + currentSession?: Session; + private disposables: vscode.Disposable[] = []; + private outputChannel: vscode.LogOutputChannel; + private initializedEventEmitter: vscode.EventEmitter; + private telemetryReporter: TelemetryReporter; + private readonly contentMapperRegistrations = new Map(); + private readonly lspMiddleware: LspMiddlewareRegistry; + private lifecycleOperation = Promise.resolve(); + private contentMapperSyncOperation = Promise.resolve(); + + constructor( + context: vscode.ExtensionContext, + outputChannel: vscode.LogOutputChannel, + initializedEventEmitter: vscode.EventEmitter, + telemetryReporter: TelemetryReporter, + ) { + this.outputChannel = outputChannel; + this.telemetryReporter = telemetryReporter; + this.initializedEventEmitter = initializedEventEmitter; + this.lspMiddleware = new LspMiddlewareRegistry((method, error) => { + const detail = error instanceof Error ? error.stack ?? error.message : String(error); + this.outputChannel.error(`LSP middleware for '${method}' failed; using original server data: ${detail}`); + }, [workspaceSymbolSendRequestMiddleware]); + + this.disposables.push(vscode.workspace.onDidChangeConfiguration(event => { + if (this.currentSession && event.affectsConfiguration("js/ts.contentMappers.enabled")) { + void this.restart(context).catch(error => { + this.outputChannel.error(`TypeScript language server restart failed: ${String(error)}`); + }); + } + })); + this.disposables.push(vscode.workspace.onDidOpenTextDocument(document => { + if (documentMatchesContentMapperContributions(document, this.contentMapperRegistrations)) { + void this.syncContentMapperContributions(); + } + })); + this.disposables.push(initializedEventEmitter.event(() => { + void this.syncContentMapperContributions(); + })); + } + + start(context: vscode.ExtensionContext): Promise { + return this.restart(context); + } + + restart(context: vscode.ExtensionContext): Promise { + return this.enqueueLifecycleOperation(() => this.restartNow(context)); + } + + private async restartNow(context: vscode.ExtensionContext): Promise { + if (this.currentSession) { + this.outputChannel.appendLine("Restarting TypeScript language server..."); + await this.currentSession.stop(); + } + const session = new Session(context, this.outputChannel, this.initializedEventEmitter, this.telemetryReporter, () => this.stop(), () => this.restart(context), this.lspMiddleware); + this.currentSession = session; + try { + await session.start(context); + await this.syncContentMapperContributions(); + } + catch (error) { + if (this.currentSession === session) { + this.currentSession = undefined; + } + await session.dispose(); + throw error; + } + } + + stop(): Promise { + return this.enqueueLifecycleOperation(async () => { + if (this.currentSession) { + await this.currentSession.stop(); + this.currentSession = undefined; + } + }); + } + + async initializeAPIConnection(pipe?: string): Promise { + if (!this.currentSession) { + throw new Error(vscode.l10n.t("Language server is not running.")); + } + const result = await this.currentSession.client.initializeAPISession(pipe); + return result.pipe; + } + + registerContentMappers(contributorId: string, contributions: readonly ContentMapperContribution[]): vscode.Disposable { + validateContentMapperRegistration(contributorId, contributions); + if (this.contentMapperRegistrations.has(contributorId)) { + throw new Error(`Content mapper contributor '${contributorId}' is already registered.`); + } + this.contentMapperRegistrations.set(contributorId, contributions); + void this.syncContentMapperContributions(); + let disposed = false; + return new vscode.Disposable(() => { + if (disposed) return; + disposed = true; + this.contentMapperRegistrations.delete(contributorId); + void this.syncContentMapperContributions(); + }); + } + + registerLspMiddleware(method: M, transformer: LspMiddlewareTransformer>): vscode.Disposable { + return this.lspMiddleware.register(method, transformer); + } + + private syncContentMapperContributions(): Promise { + const operation = this.contentMapperSyncOperation.then(() => this.syncContentMapperContributionsNow()); + this.contentMapperSyncOperation = operation.catch(() => {}); + return operation; + } + + private async syncContentMapperContributionsNow(): Promise { + try { + if (!this.currentSession?.client.isInitialized) return; + const openDocuments = vscode.workspace.textDocuments + .filter(document => documentMatchesContentMapperContributions(document, this.contentMapperRegistrations)) + .map(document => document.uri); + await this.currentSession.client.setContentMapperContributions( + serializeContentMapperContributions(this.contentMapperRegistrations), + openDocuments, + ); + } + catch (error) { + this.outputChannel.warn(`Content mapper contribution synchronization failed: ${String(error)}`); + } + } + + private enqueueLifecycleOperation(operation: () => Promise): Promise { + const result = this.lifecycleOperation.then(operation); + this.lifecycleOperation = result.catch(() => {}); + return result; + } + + dispose(): Promise { + return this.enqueueLifecycleOperation(async () => { + this.lspMiddleware.dispose(); + await this.currentSession?.dispose(); + this.currentSession = undefined; + await Promise.all(this.disposables.splice(0).map(d => d.dispose())); + }); + } +} + +/** + * Session's lifetime is equal to that of its LanguageClient. The LanguageClient + * can be restarted within the same Session only if the underlying exe path/version + * has not changed. Otherwise, a new Session must be created. Since Session only + * exists while the LSP server is running (or actively starting/restarting/stopping), + * it also owns the commands and UI elements that should only be active while the + * server is running. + */ +class Session implements vscode.Disposable { + client: Client; + private disposables: vscode.Disposable[] = []; + private context: vscode.ExtensionContext; + private outputChannel: vscode.LogOutputChannel; + private telemetryReporter: TelemetryReporter; + private initializedEventEmitter: vscode.EventEmitter; + private stopSession: () => Promise; + private restartSession: () => Promise; + + constructor( + context: vscode.ExtensionContext, + outputChannel: vscode.LogOutputChannel, + initializedEventEmitter: vscode.EventEmitter, + telemetryReporter: TelemetryReporter, + stopSession: () => Promise, + restartSession: () => Promise, + lspMiddleware: LspMiddlewareRegistry, + ) { + this.client = new Client(outputChannel, initializedEventEmitter, telemetryReporter, lspMiddleware); + this.context = context; + this.outputChannel = outputChannel; + this.telemetryReporter = telemetryReporter; + this.initializedEventEmitter = initializedEventEmitter; + this.stopSession = stopSession; + this.restartSession = restartSession; + this.registerCommands(); + } + + async start(context: vscode.ExtensionContext): Promise { + await vscode.commands.executeCommand("setContext", "typescript.isManagedFile", false); + const exe = await getExe(context); + await this.client.start(exe); + this.disposables.push(setupStatusBar(exe)); + + // Set up active editor tracker and UI features + const activeEditorTracker = new ActiveJsTsEditorTracker(); + this.disposables.push(activeEditorTracker); + + const projectStatus = new ProjectStatus(this.client, activeEditorTracker, this.initializedEventEmitter.event); + this.disposables.push(projectStatus); + + // If already initialized, fire immediately so projectStatus picks it up + if (this.client.isInitialized) { + this.initializedEventEmitter.fire(); + } + + await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", true); + } + + tryRestartClient(context: vscode.ExtensionContext): Promise { + return this.client.tryRestart(context); + } + + registerCommands(): void { + this.disposables.push(registerCodeLensShowLocationsCommand()); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.restart", async () => { + this.telemetryReporter.sendTelemetryEvent("command.restartLanguageServer"); + if (await this.tryRestartClient(this.context)) { + return; + } + + await this.restartSession(); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.output.focus", () => { + this.outputChannel.show(); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.selectVersion", async () => { + await promptSelectVersion(this.context, this.client, this.outputChannel, this.stopSession); + })); + + // TODO: Support the standard reload/go-to-project-config commands while + // Strada leaves their command palette entries visible in native mode: + // typescript.reloadProjects, javascript.reloadProjects, + // typescript.goToProjectConfig, and javascript.goToProjectConfig. + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.showMenu", () => { + showCommands(this.client); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.sortImports", () => { + return vscode.commands.executeCommand("editor.action.sourceAction", { + kind: "source.sortImports", + apply: "first", + }); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.removeUnusedImports", () => { + return vscode.commands.executeCommand("editor.action.sourceAction", { + kind: "source.removeUnusedImports", + apply: "first", + }); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.reportIssue", () => { + this.telemetryReporter.sendTelemetryEvent("command.reportIssue"); + vscode.commands.executeCommand("workbench.action.openIssueReporter", { + extensionId: this.context.extension.id, + }); + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.runGC", async () => { + try { + await this.client.runGC(); + vscode.window.showInformationMessage(vscode.l10n.t(`Garbage collection triggered`)); + } + catch (error) { + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to run GC: {0}`, String(error))); + } + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.saveHeapProfile", async () => { + const dir = await promptForProfileDirectory(); + if (!dir) return; + try { + const file = await this.client.saveHeapProfile(dir); + vscode.window.showInformationMessage(vscode.l10n.t(`Heap profile saved to: {0}`, file)); + } + catch (error) { + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to save heap profile: {0}`, String(error))); + } + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.saveAllocProfile", async () => { + const dir = await promptForProfileDirectory(); + if (!dir) return; + try { + const file = await this.client.saveAllocProfile(dir); + vscode.window.showInformationMessage(vscode.l10n.t(`Allocation profile saved to: {0}`, file)); + } + catch (error) { + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to save allocation profile: {0}`, String(error))); + } + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.startCPUProfile", async () => { + const dir = await promptForProfileDirectory(); + if (!dir) return; + try { + await this.client.startCPUProfile(dir); + vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", true); + vscode.window.showInformationMessage(vscode.l10n.t(`CPU profiling started. Profile will be saved to: {0}`, dir)); + } + catch (error) { + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to start CPU profile: {0}`, String(error))); + vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); + } + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.dev.stopCPUProfile", async () => { + try { + const file = await this.client.stopCPUProfile(); + vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); + vscode.window.showInformationMessage(vscode.l10n.t(`CPU profile saved to: {0}`, file)); + } + catch (error) { + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to stop CPU profile: {0}`, String(error))); + } + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.initializeAPIConnection", async () => { + const result = await this.client.initializeAPISession(); + return result.pipe; + })); + + this.disposables.push(vscode.commands.registerCommand("typescript.native-preview.initializeAPIConnection.ui", async () => { + try { + const result = await this.client.initializeAPISession(); + const copyString = vscode.l10n.t("Copy"); + const copy = await vscode.window.showInformationMessage(vscode.l10n.t(`API session initialized. Listening on: {0}`, result.pipe), copyString); + if (copy === copyString) { + await vscode.env.clipboard.writeText(result.pipe); + } + } + catch (error) { + const message = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(vscode.l10n.t(`Failed to initialize API session: {0}`, message)); + } + })); + } + + private async disposeSessionState(): Promise { + await vscode.commands.executeCommand("setContext", "typescript.native-preview.serverRunning", false); + await vscode.commands.executeCommand("setContext", "typescript.native-preview.cpuProfileRunning", false); + const disposables = this.disposables.splice(0); + await Promise.all(disposables.map(d => d.dispose())); + } + + async stop(): Promise { + await this.disposeSessionState(); + await this.client.stop(); + } + + async dispose(): Promise { + await this.disposeSessionState(); + await this.client.dispose(); + } +} + +async function showCommands(client: Client): Promise { + interface CommandItem { + label: string; + description?: string; + kind?: vscode.QuickPickItemKind; + command?: string; + action?: () => Promise; + } + const commands: CommandItem[] = [ + { + label: vscode.l10n.t("$(refresh) Restart Server"), + description: vscode.l10n.t("Restart the TypeScript language server"), + command: "typescript.native-preview.restart", + }, + { + label: vscode.l10n.t("$(output) Show Output"), + description: vscode.l10n.t("Show the TypeScript output log"), + command: "typescript.native-preview.output.focus", + }, + { + label: vscode.l10n.t("$(report) Report Issue"), + description: vscode.l10n.t("Report an issue with TypeScript 7"), + command: "typescript.native-preview.reportIssue", + }, + { + label: vscode.l10n.t("$(versions) Select Version"), + description: vscode.l10n.t("Choose between bundled and workspace versions"), + command: "typescript.native-preview.selectVersion", + }, + { + label: vscode.l10n.t("$(stop-circle) Disable TypeScript 7"), + description: vscode.l10n.t("Switch back to the built-in TypeScript extension"), + command: "typescript.native-preview.disable", + }, + ]; + + const showDebugInfo = readNativePreviewConfig("showDebugInfo", false); + if (showDebugInfo) { + const exe = client.getCurrentExe(); + const pid = client.serverPid; + commands.push({ label: "", kind: vscode.QuickPickItemKind.Separator }); + if (exe) { + commands.push({ + label: vscode.l10n.t(`Executable`), + description: exe.path, + action: async () => { + await vscode.env.clipboard.writeText(exe.path); + vscode.window.showInformationMessage(vscode.l10n.t("Executable path copied to clipboard.")); + }, + }); + } + if (pid) { + commands.push({ + label: vscode.l10n.t(`PID`), + description: `${pid}`, + action: async () => { + await vscode.env.clipboard.writeText(`${pid}`); + vscode.window.showInformationMessage(vscode.l10n.t("Server PID copied to clipboard.")); + }, + }); + } + } + + const selected = await vscode.window.showQuickPick(commands, { + placeHolder: vscode.l10n.t("{0} Commands", "TypeScript 7"), + }); + + if (selected) { + if (selected.action) { + await selected.action(); + } + else if (selected.command) { + await vscode.commands.executeCommand(selected.command); + } + } +} + +interface VersionQuickPickItem extends vscode.QuickPickItem { + run(): Promise; + beforeRun?(): Promise; + restart?: boolean; +} + +function readStringArrayConfig(key: string): string[] { + const value = readNativePreviewConfig(key, undefined); + return Array.isArray(value) ? value.filter((v): v is string => typeof v === "string") : []; +} + +interface DetectedVersion { + folder: vscode.WorkspaceFolder; + version: string; + tsdkPath: string; + exePath: string; +} + +interface StradaVersion { + version: string; +} + +async function getStradaVersion(): Promise { + return await getStradaExtensionVersion("ms-vscode.vscode-typescript-next", ["node_modules", "typescript"]) + ?? await getStradaExtensionVersion("vscode.typescript-language-features", ["..", "node_modules", "typescript"]); +} + +async function getStradaExtensionVersion(extensionId: string, pathToTypescript: string[]): Promise { + const extension = vscode.extensions.getExtension(extensionId); + if (!extension) return undefined; + + const packagePath = vscode.Uri.joinPath(extension.extensionUri, ...pathToTypescript); + const tsserverPath = vscode.Uri.joinPath(packagePath, "lib", "tsserver.js"); + try { + await vscode.workspace.fs.stat(tsserverPath); + const packageJson = JSON.parse(await vscode.workspace.fs.readFile(vscode.Uri.joinPath(packagePath, "package.json")).then(buffer => buffer.toString())); + return { + version: typeof packageJson.version === "string" ? packageJson.version : "unknown", + }; + } + catch { + return undefined; + } +} + +async function findWorkspaceNativePreviewPackages(): Promise { + const results: DetectedVersion[] = []; + for (const folder of vscode.workspace.workspaceFolders ?? []) { + const packagePath = vscode.Uri.joinPath(folder.uri, "node_modules", "@typescript", "native-preview"); + const resolved = await resolveTsdkPathToExe(path.normalize(packagePath.fsPath)); + if (!resolved) continue; + results.push({ + folder, + version: resolved?.version ?? "unknown", + tsdkPath: path.normalize(packagePath.fsPath), + exePath: resolved?.path ?? "", + }); + } + return results; +} + +/** + * Compute the tsdk path to persist in workspace config. Uses a path relative + * to the workspace config base directory (the `.code-workspace` file's parent + * in multi-root, or the lone workspace folder in single-root). Falls back to + * the absolute path if there is no workspace. + */ +function tsdkPathForConfig(detected: DetectedVersion): string { + const base = workspaceConfigBase(); + if (!base) { + return detected.tsdkPath; + } + return path.relative(base.fsPath, detected.tsdkPath); +} + +/** + * Update the tsdk config to point at the detected version, but only if the + * existing value doesn't already resolve to the same absolute path (avoiding + * unnecessary config churn from formatting differences like absolute vs + * relative, leading ./, etc.). + */ +async function updateTsdkConfig(detected: DetectedVersion): Promise { + const currentValue = getWorkspaceTsdkConfigValue(); + const newValue = tsdkPathForConfig(detected); + if (currentValue !== undefined && resolveTsdkPath(currentValue) === resolveTsdkPath(newValue)) { + return; + } + await updateWorkspaceTsdkConfig(newValue); +} + +async function promptSelectVersion(context: vscode.ExtensionContext, client: Client, outputChannel: vscode.LogOutputChannel, stopServer: () => Promise): Promise { + const currentExePath = client.getCurrentExe()?.path; + const defaultExe = await getDefaultExePath(context); + const stradaVersion = await getStradaVersion(); + const workspaceVersions = await findWorkspaceNativePreviewPackages(); + const items: VersionQuickPickItem[] = []; + + if (stradaVersion) { + items.push({ + label: vscode.l10n.t("Use Built-in TypeScript"), + description: stradaVersion.version, + detail: "", + beforeRun: stopServer, + run: async () => { + await context.workspaceState.update(useWorkspaceTsdkStorageKey, false); + await updateWorkspaceUseTsgoSetting(false); + outputChannel.appendLine("Switched to bundled TypeScript version."); + }, + }); + } + + items.push({ + label: (currentExePath === defaultExe.path ? "• " : "") + vscode.l10n.t("Use TypeScript 7"), + description: defaultExe.version, + detail: "", + restart: true, + run: async () => { + await context.workspaceState.update(useWorkspaceTsdkStorageKey, false); + await updateWorkspaceUseTsgoSetting(true); + outputChannel.appendLine("Switched to TypeScript 7."); + }, + }); + + // Workspace versions + if (vscode.workspace.isTrusted) { + for (const wsVersion of workspaceVersions) { + const isActive = currentExePath === wsVersion.exePath; + items.push({ + label: (isActive ? "• " : "") + vscode.l10n.t("Use Workspace Version"), + description: wsVersion.version, + detail: wsVersion.tsdkPath, + restart: true, + run: async () => { + await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); + await updateTsdkConfig(wsVersion); + await updateWorkspaceUseTsgoSetting(true); + outputChannel.appendLine(`Switched to workspace tsgo version (${wsVersion.version}).`); + }, + }); + } + } + else if (workspaceVersions.length > 0) { + items.push({ + label: "", + kind: vscode.QuickPickItemKind.Separator, + run: async () => {}, + }); + items.push({ + label: vscode.l10n.t("$(lock) Manage Workspace Trust to select a workspace version"), + run: async () => { + await vscode.commands.executeCommand("workbench.trust.manage"); + }, + }); + } + + // Additional tsdk locations from settings + const additionalLocations = [ + ...readStringArrayConfig("tsdk.additionalLocations"), + ...readStringArrayConfig("additionalTsdkLocations"), + ]; + if (additionalLocations.length > 0) { + items.push({ + label: "", + kind: vscode.QuickPickItemKind.Separator, + run: async () => {}, + }); + for (const loc of additionalLocations) { + const resolved = await resolveTsdkPathToExe(loc); + if (!resolved) continue; + if (resolved.path === defaultExe.path) continue; + if (workspaceVersions.some(ws => ws.exePath === resolved.path)) continue; + const isActive = currentExePath === resolved.path; + items.push({ + label: (isActive ? "• " : "") + vscode.l10n.t("Use Custom Version"), + description: resolved.version, + detail: resolved.path, + restart: true, + run: async () => { + await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); + await updateWorkspaceTsdkConfig(loc); + await updateWorkspaceUseTsgoSetting(true); + outputChannel.appendLine(`Switched to custom TypeScript version at ${loc}.`); + }, + }); + } + } + + const selected = await vscode.window.showQuickPick(items, { + placeHolder: vscode.l10n.t("Select the TypeScript version used for JavaScript and TypeScript language features"), + }); + + if (selected) { + await selected.beforeRun?.(); + await selected.run(); + if (selected.restart) { + await vscode.commands.executeCommand("typescript.native-preview.restart"); + } + } +} + +/** + * If the workspace has a tsdk setting pending consent, or has + * `@typescript/typescript` installed in node_modules, prompt the user + * to allow using it. + */ +export async function promptUseWorkspaceVersion(context: vscode.ExtensionContext): Promise { + if (!vscode.workspace.isTrusted) return; + + const useWorkspaceTsdk = context.workspaceState.get(useWorkspaceTsdkStorageKey, false); + if (useWorkspaceTsdk) return; // already opted in + + const suppressKey = "typescript.native-preview.suppressPromptWorkspaceTsdk"; + if (context.workspaceState.get(suppressKey, false)) return; + + const workspaceTsdk = await getWorkspaceTsdkForPrompt(); + if (workspaceTsdk !== undefined) { + // The workspace config already specifies a tsdk location, but the + // user hasn't consented to using it. Just need their approval. + const resolved = await resolveTsdkPathToExe(workspaceTsdk); + if (!resolved) return; + const allow = vscode.l10n.t("Allow"); + const dismiss = vscode.l10n.t("Dismiss"); + const suppress = vscode.l10n.t("Never in this Workspace"); + + const result = await vscode.window.showInformationMessage( + vscode.l10n.t(`This workspace has a TypeScript 7 tsdk configured ({0}). Would you like to use it?`, resolved.version), + allow, + dismiss, + suppress, + ); + + if (result === allow) { + if (!vscode.workspace.isTrusted) return; + await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); + await vscode.commands.executeCommand("typescript.native-preview.restart"); + } + else if (result === suppress) { + await context.workspaceState.update(suppressKey, true); + } + } + else { + // No workspace tsdk config, but check if native-preview is installed + // in the workspace's node_modules. + const workspaceVersions = await findWorkspaceNativePreviewPackages(); + if (workspaceVersions.length === 0) return; + + const wsVersion = workspaceVersions[0]; + const allow = "Use Workspace Version"; + const dismiss = "Dismiss"; + const suppress = "Never in this Workspace"; + + const result = await vscode.window.showInformationMessage( + `This workspace has TypeScript 7 installed (${wsVersion.version}). Would you like to use it?`, + allow, + dismiss, + suppress, + ); + + if (result === allow) { + if (!vscode.workspace.isTrusted) return; + await context.workspaceState.update(useWorkspaceTsdkStorageKey, true); + await updateTsdkConfig(wsVersion); + await vscode.commands.executeCommand("typescript.native-preview.restart"); + } + else if (result === suppress) { + await context.workspaceState.update(suppressKey, true); + } + } +} + +async function promptForProfileDirectory(): Promise { + const defaultDir = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath ?? ""; + const dir = await vscode.window.showInputBox({ + prompt: vscode.l10n.t("Enter directory path for profile output"), + value: defaultDir, + validateInput: value => { + if (!value.trim()) { + return vscode.l10n.t("Directory path is required"); + } + return undefined; + }, + }); + return dir?.trim(); +} diff --git a/packages/vscode-typescript/src/statusBar.ts b/packages/vscode-typescript/src/statusBar.ts index e53cf20db11b8..8489040159294 100644 --- a/packages/vscode-typescript/src/statusBar.ts +++ b/packages/vscode-typescript/src/statusBar.ts @@ -1,17 +1,17 @@ -import * as vscode from "vscode"; -import { - ExeInfo, - jsTsLanguageModes, -} from "./util"; - -export function setupStatusBar(exe: ExeInfo): vscode.Disposable { - const statusItem = vscode.languages.createLanguageStatusItem("typescript.native-preview.status", jsTsLanguageModes); - statusItem.name = vscode.l10n.t("TypeScript 7"); - statusItem.text = exe.isLocal ? vscode.l10n.t("$(beaker) {0}", exe.version) : exe.version; - statusItem.detail = vscode.l10n.t("TypeScript Language Server"); - statusItem.command = { - title: vscode.l10n.t("Show Menu"), - command: "typescript.native-preview.showMenu", - }; - return statusItem; -} +import * as vscode from "vscode"; +import { + ExeInfo, + jsTsLanguageModes, +} from "./util"; + +export function setupStatusBar(exe: ExeInfo): vscode.Disposable { + const statusItem = vscode.languages.createLanguageStatusItem("typescript.native-preview.status", jsTsLanguageModes); + statusItem.name = vscode.l10n.t("TypeScript 7"); + statusItem.text = exe.isLocal ? vscode.l10n.t("$(beaker) {0}", exe.version) : exe.version; + statusItem.detail = vscode.l10n.t("TypeScript Language Server"); + statusItem.command = { + title: vscode.l10n.t("Show Menu"), + command: "typescript.native-preview.showMenu", + }; + return statusItem; +} diff --git a/packages/vscode-typescript/src/telemetryReporting.ts b/packages/vscode-typescript/src/telemetryReporting.ts index 28689e6143262..03f01b19b0e55 100644 --- a/packages/vscode-typescript/src/telemetryReporting.ts +++ b/packages/vscode-typescript/src/telemetryReporting.ts @@ -1,103 +1,103 @@ -import type { TelemetryReporter as VSCodeTelemetryReporter } from "@vscode/extension-telemetry"; -import type { IExperimentationTelemetry } from "vscode-tas-client"; - -// As new events are added, update the TelemetryReporter interface below. -// This helps ensure that the telemetry events used in the codebase are -// properly typed, and that properties/measurements are never forgotten. -// -// The difference between `sendTelemetryEvent` and `sendTelemetryErrorEvent` is that -// these methods respect user preferences around reporting (i.e. `telemetry.telemetryLevel`). -// -// The "untyped" variants are provided for when properties/measurements are not known -// from the editor client - for example, when forwarding telemetry events from the language server. -export interface TelemetryReporter { - sendTelemetryEvent(eventName: "command.enableNativePreview"): void; - sendTelemetryEvent(eventName: "command.disableNativePreview"): void; - sendTelemetryEvent(eventName: "command.restartLanguageServer"): void; - sendTelemetryEvent(eventName: "command.reportIssue"): void; - sendTelemetryEvent(eventName: "languageServer.start", data: LSServerStart): void; - - sendTelemetryErrorEvent(eventName: "languageServer.connectionError", data: LSConnectionError): void; - sendTelemetryErrorEvent(eventName: "languageServer.connectionClosed", data: LSServerConnectionClosed): void; - sendTelemetryErrorEvent(eventName: "languageServer.errorResponse", data: LSErrorResponse): void; - sendTelemetryErrorEvent(eventName: "languageServer.unexpectedTelemetryPurpose", data: UnexpectedTelemetryPurpose): void; - - sendTelemetryEventUntyped(eventName: string, data?: Record, measurements?: Record): void; - sendTelemetryErrorEventUntyped(eventName: string, data?: Record, measurements?: Record): void; - - dispose(): void; -} - -export interface ExperimentationTelemetryReporter extends TelemetryReporter, IExperimentationTelemetry {} - -// Note: -// This reporter *supports* experimentation telemetry, -// but will only do so when passed to an `ExperimentationService` which -// will set shared properties on this reporter. -export function createTelemetryReporter(vscReporter: VSCodeTelemetryReporter): ExperimentationTelemetryReporter { - let sharedProperties: Record = Object.create(null); - - return { - // Primary reporting methods for the extension. - sendTelemetryEvent, - sendTelemetryErrorEvent, - sendTelemetryEventUntyped: sendTelemetryEvent, - sendTelemetryErrorEventUntyped: sendTelemetryErrorEvent, - - // Required for the experimentation telemetry service interface. - setSharedProperty, - postEvent, - - dispose: () => vscReporter.dispose(), - }; - - function setSharedProperty(key: string, value: string): void { - sharedProperties[key] = value; - } - - function postEvent(eventName: string, props: Map): void { - const propsAsObj = { ...sharedProperties, ...Object.fromEntries(props) }; - vscReporter.sendTelemetryEvent(eventName, propsAsObj); - } - - function sendTelemetryEvent(eventName: string, data?: Record, measurements?: Record): void { - data = { ...sharedProperties, ...data }; - vscReporter.sendTelemetryEvent(eventName, data, measurements); - } - - function sendTelemetryErrorEvent(eventName: string, data?: Record, measurements?: Record): void { - data = { ...sharedProperties, ...data }; - vscReporter.sendTelemetryErrorEvent(eventName, data, measurements); - } -} - -export type LSServerStart = { - version: string; -}; - -export type LSConnectionError = { - resultingAction: string; -}; - -export type LSServerConnectionClosed = { - resultingAction: string; - lastStderr: string; -}; - -export type LSErrorResponse = { - errorCode: string; - requestMethod: string; - stack: string; -}; - -export type EnableNativePreview = {}; - -export type DisableNativePreview = {}; - -export type RestartLanguageServer = {}; - -export type ReportIssue = {}; - -export type UnexpectedTelemetryPurpose = { - telemetryPurpose: string; -}; +import type { TelemetryReporter as VSCodeTelemetryReporter } from "@vscode/extension-telemetry"; +import type { IExperimentationTelemetry } from "vscode-tas-client"; + +// As new events are added, update the TelemetryReporter interface below. +// This helps ensure that the telemetry events used in the codebase are +// properly typed, and that properties/measurements are never forgotten. +// +// The difference between `sendTelemetryEvent` and `sendTelemetryErrorEvent` is that +// these methods respect user preferences around reporting (i.e. `telemetry.telemetryLevel`). +// +// The "untyped" variants are provided for when properties/measurements are not known +// from the editor client - for example, when forwarding telemetry events from the language server. +export interface TelemetryReporter { + sendTelemetryEvent(eventName: "command.enableNativePreview"): void; + sendTelemetryEvent(eventName: "command.disableNativePreview"): void; + sendTelemetryEvent(eventName: "command.restartLanguageServer"): void; + sendTelemetryEvent(eventName: "command.reportIssue"): void; + sendTelemetryEvent(eventName: "languageServer.start", data: LSServerStart): void; + + sendTelemetryErrorEvent(eventName: "languageServer.connectionError", data: LSConnectionError): void; + sendTelemetryErrorEvent(eventName: "languageServer.connectionClosed", data: LSServerConnectionClosed): void; + sendTelemetryErrorEvent(eventName: "languageServer.errorResponse", data: LSErrorResponse): void; + sendTelemetryErrorEvent(eventName: "languageServer.unexpectedTelemetryPurpose", data: UnexpectedTelemetryPurpose): void; + + sendTelemetryEventUntyped(eventName: string, data?: Record, measurements?: Record): void; + sendTelemetryErrorEventUntyped(eventName: string, data?: Record, measurements?: Record): void; + + dispose(): void; +} + +export interface ExperimentationTelemetryReporter extends TelemetryReporter, IExperimentationTelemetry {} + +// Note: +// This reporter *supports* experimentation telemetry, +// but will only do so when passed to an `ExperimentationService` which +// will set shared properties on this reporter. +export function createTelemetryReporter(vscReporter: VSCodeTelemetryReporter): ExperimentationTelemetryReporter { + let sharedProperties: Record = Object.create(null); + + return { + // Primary reporting methods for the extension. + sendTelemetryEvent, + sendTelemetryErrorEvent, + sendTelemetryEventUntyped: sendTelemetryEvent, + sendTelemetryErrorEventUntyped: sendTelemetryErrorEvent, + + // Required for the experimentation telemetry service interface. + setSharedProperty, + postEvent, + + dispose: () => vscReporter.dispose(), + }; + + function setSharedProperty(key: string, value: string): void { + sharedProperties[key] = value; + } + + function postEvent(eventName: string, props: Map): void { + const propsAsObj = { ...sharedProperties, ...Object.fromEntries(props) }; + vscReporter.sendTelemetryEvent(eventName, propsAsObj); + } + + function sendTelemetryEvent(eventName: string, data?: Record, measurements?: Record): void { + data = { ...sharedProperties, ...data }; + vscReporter.sendTelemetryEvent(eventName, data, measurements); + } + + function sendTelemetryErrorEvent(eventName: string, data?: Record, measurements?: Record): void { + data = { ...sharedProperties, ...data }; + vscReporter.sendTelemetryErrorEvent(eventName, data, measurements); + } +} + +export type LSServerStart = { + version: string; +}; + +export type LSConnectionError = { + resultingAction: string; +}; + +export type LSServerConnectionClosed = { + resultingAction: string; + lastStderr: string; +}; + +export type LSErrorResponse = { + errorCode: string; + requestMethod: string; + stack: string; +}; + +export type EnableNativePreview = {}; + +export type DisableNativePreview = {}; + +export type RestartLanguageServer = {}; + +export type ReportIssue = {}; + +export type UnexpectedTelemetryPurpose = { + telemetryPurpose: string; +}; diff --git a/packages/vscode-typescript/src/tsdkPackage.ts b/packages/vscode-typescript/src/tsdkPackage.ts index 29ddf8974c37d..9bad2d3deecd8 100644 --- a/packages/vscode-typescript/src/tsdkPackage.ts +++ b/packages/vscode-typescript/src/tsdkPackage.ts @@ -1,8 +1,8 @@ -import module from "node:module"; -import path from "node:path"; - -export function resolvePackageExecutable(packageJsonPath: string, platformPackage: string, exeName: string): string { - const require = module.createRequire(packageJsonPath); - const platformPackageJson = require.resolve(`@typescript/${platformPackage}/package.json`); - return path.join(path.dirname(platformPackageJson), "lib", exeName); -} +import module from "node:module"; +import path from "node:path"; + +export function resolvePackageExecutable(packageJsonPath: string, platformPackage: string, exeName: string): string { + const require = module.createRequire(packageJsonPath); + const platformPackageJson = require.resolve(`@typescript/${platformPackage}/package.json`); + return path.join(path.dirname(platformPackageJson), "lib", exeName); +} diff --git a/packages/vscode-typescript/src/util.ts b/packages/vscode-typescript/src/util.ts index a299423f81948..f2c4f0165d5b4 100644 --- a/packages/vscode-typescript/src/util.ts +++ b/packages/vscode-typescript/src/util.ts @@ -1,527 +1,527 @@ -import * as fs from "fs"; -import * as path from "path"; -import * as vscode from "vscode"; -import { resolvePackageExecutable } from "./tsdkPackage"; - -export const aiConnectionString = "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255"; - -export const languageClientName = "TypeScript Language Server"; -export const nightlyExtensionId = "TypeScriptTeam.vscode-typescript-nightly"; -export const enableContributedNightlyVersion = true; - -export const jsTsLanguageModes = [ - "typescript", - "typescriptreact", - "javascript", - "javascriptreact", -]; - -export const builtinTSExtensionId = "vscode.typescript-language-features"; - -/** - * URI schemes for which JS/TS language features should be disabled. - */ -export const disabledSchemes = new Set([ - "git", - "vsls", - "github", - "azurerepos", - "chat-editing-text-model", -]); - -export function isSupportedLanguageMode(doc: vscode.TextDocument): boolean { - return jsTsLanguageModes.includes(doc.languageId); -} - -const configRegex = /^[jt]sconfig\.(.+\.)?json$/i; -export function isJsConfigOrTsConfigFileName(fileName: string): boolean { - return configRegex.test(path.basename(fileName)); -} - -export interface ExeInfo { - path: string; - version: string; - isLocal?: boolean; -} - -const packagedExeBaseNames = ["tsc", "tsgo"]; - -export async function getBuiltinExePath(context: vscode.ExtensionContext): Promise { - if (context.extensionMode === vscode.ExtensionMode.Development) { - const exeName = `tsc${process.platform === "win32" ? ".exe" : ""}`; - const exe = context.asAbsolutePath(path.join("../../", "built", "local", exeName)); - try { - await vscode.workspace.fs.stat(vscode.Uri.file(exe)); - return { path: exe, version: "(local)", isLocal: true }; - } - catch {} - } - return getPackagedExePath(context.extension.extensionUri, getBundledTypeScriptVersion(context.extension.packageJSON)); -} - -export async function getNightlyExePath(): Promise { - const extension = vscode.extensions.getExtension(nightlyExtensionId); - if (!extension) { - return undefined; - } - - return tryGetPackagedExePath(extension.extensionUri, getBundledTypeScriptVersion(extension.packageJSON)); -} - -export async function getDefaultExePath(context: vscode.ExtensionContext): Promise { - if (enableContributedNightlyVersion) { - const nightlyExe = await getNightlyExePath(); - if (nightlyExe) { - return nightlyExe; - } - } - return getBuiltinExePath(context); -} - -async function getPackagedExePath(extensionUri: vscode.Uri, version: unknown): Promise { - const exe = await tryGetPackagedExePath(extensionUri, version); - if (exe) { - return exe; - } - throw new Error(vscode.l10n.t("Could not find a TypeScript executable in the extension package.")); -} - -function getBundledTypeScriptVersion(packageJSON: unknown): string { - if (packageJSON && typeof packageJSON === "object" && "bundledTypeScriptVersion" in packageJSON) { - const version = packageJSON.bundledTypeScriptVersion; - if (typeof version === "string") { - return version; - } - } - return "unknown"; -} - -async function tryGetPackagedExePath(extensionUri: vscode.Uri, version: unknown): Promise { - for (const baseName of packagedExeBaseNames) { - const exeName = `${baseName}${process.platform === "win32" ? ".exe" : ""}`; - const exePath = vscode.Uri.joinPath(extensionUri, "lib", exeName); - try { - await vscode.workspace.fs.stat(exePath); - return { - path: withLongPathPrefix(exePath.fsPath), - version: typeof version === "string" ? version : "unknown", - }; - } - catch {} - } - return undefined; -} - -/** - * Returns the base directory for resolving relative paths in workspace config. - * - Multi-root workspace: the directory containing the `.code-workspace` file. - * - Single-root workspace: the lone workspace folder. - * - No workspace: undefined. - */ -export function workspaceConfigBase(): vscode.Uri | undefined { - const wsFile = vscode.workspace.workspaceFile; - if (wsFile && wsFile.scheme === "file") { - return vscode.Uri.file(path.dirname(wsFile.fsPath)); - } - if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { - return vscode.workspace.workspaceFolders[0].uri; - } - return undefined; -} - -function workspaceResolve(relativePath: string): vscode.Uri { - if (path.isAbsolute(relativePath)) { - return vscode.Uri.file(relativePath); - } - const base = workspaceConfigBase(); - if (base) { - return vscode.Uri.joinPath(base, relativePath); - } - return vscode.Uri.file(relativePath); -} - -/** - * Memento used to control whether the user has opted into using a tsdk location defined - * in workspace settings. This is *not* a trust boundary - workspace trust is required - * before the extension will prompt to set this memento to true. This setting is here to - * provide users a way to opt out of using the workspace-provided tsdk without changing - * committed workspace settings, e.g. when the workspace tsdk is very outdated or the user - * is trialing a nightly TS version. Since the stored value is only a boolean, it does not - * protect against executing a different tsdk than the one the user originally opted into - * if the workspace settings or node_modules content changes - that's why workspace trust - * is always required, and why the prompts that set this value should not be interpreted - * as indicating trust for a specific tsdk installation. - */ -export const useWorkspaceTsdkStorageKey = "typescript.native-preview.useWorkspaceTsdk"; - -export async function getExe(context: vscode.ExtensionContext): Promise { - for (const candidate of getTrustedTsdkCandidates(context, await getTsdkCandidates())) { - const exe = await resolveTsdkPathToExe(candidate.value); - if (exe) { - return exe; - } - } - - return getDefaultExePath(context); -} - -export async function hasTsdkConfigured(): Promise { - return (await getTsdkCandidates({ nativeOnly: false })).length > 0; -} - -export async function hasNativeTsdkConfigured(context: vscode.ExtensionContext): Promise { - return await getTsdkServerKind(context) === "lsp"; -} - -export async function getTsdkServerKind(context: vscode.ExtensionContext): Promise<"lsp" | "tsserver" | undefined> { - for (const candidate of getTrustedTsdkCandidates(context, await getTsdkCandidates({ nativeOnly: false }))) { - const kind = await classifyTsdk(candidate.value); - if (kind) { - return kind; - } - } -} - -async function classifyTsdk(tsdkPath: string): Promise<"lsp" | "tsserver" | undefined> { - if (await pathHasTsserverJs(tsdkPath)) { - return "tsserver"; - } - if (await resolveTsdkPathToExe(tsdkPath)) { - return "lsp"; - } -} - -function getTrustedTsdkCandidates(context: vscode.ExtensionContext, tsdkCandidates: ExplicitConfigValue[]): ExplicitConfigValue[] { - // If tsdk is set at the workspace level, require both workspace trust and - // explicit user opt-in. Workspace trust can be revoked after the memento is - // set, so we must always check both. - if (tsdkCandidates.some(candidate => candidate.target !== vscode.ConfigurationTarget.Global)) { - if (!vscode.workspace.isTrusted || !context.workspaceState.get(useWorkspaceTsdkStorageKey, false)) { - return tsdkCandidates.filter(candidate => candidate.target === vscode.ConfigurationTarget.Global); - } - } - return tsdkCandidates; -} - -interface ExplicitConfigValue { - value: T; - target: vscode.ConfigurationTarget; - order: number; -} - -interface TsdkConfigSource { - section: string; - key: string; - nativeOnly: boolean; -} - -const tsdkConfigSources: readonly TsdkConfigSource[] = [ - { section: "js/ts", key: "tsdk.path", nativeOnly: true }, - { section: "typescript", key: "tsdk", nativeOnly: true }, - { section: "typescript.native-preview", key: "tsdk", nativeOnly: false }, -]; - -export function readNativePreviewConfig(key: string, defaultValue: T): T { - const explicit = getExplicitConfigValues("js/ts", key)[0]; - if (explicit) { - return explicit.value; - } - return vscode.workspace.getConfiguration("typescript.native-preview").get(key, defaultValue); -} - -export function getWorkspaceTsdkConfigValue(): string | undefined { - return vscode.workspace.getConfiguration("js/ts").inspect("tsdk.path")?.workspaceValue; -} - -export async function updateWorkspaceTsdkConfig(value: string): Promise { - await vscode.workspace.getConfiguration("js/ts").update("tsdk.path", value, vscode.ConfigurationTarget.Workspace); -} - -export async function getWorkspaceTsdkForPrompt(): Promise { - const candidates = await getTsdkCandidates({ filter: candidate => candidate.target !== vscode.ConfigurationTarget.Global }); - for (const candidate of candidates) { - if (await resolveTsdkPathToExe(candidate.value)) { - return candidate.value; - } - } - return undefined; -} - -function getExplicitConfigValues(section: string, key: string): ExplicitConfigValue[] { - const inspection = vscode.workspace.getConfiguration(section).inspect(key); - if (!inspection) { - return []; - } - - const candidates: Array<{ value: T | undefined; target: vscode.ConfigurationTarget; order: number; }> = [ - { value: inspection.workspaceFolderLanguageValue, target: vscode.ConfigurationTarget.WorkspaceFolder, order: 0 }, - { value: inspection.workspaceFolderValue, target: vscode.ConfigurationTarget.WorkspaceFolder, order: 1 }, - { value: inspection.workspaceLanguageValue, target: vscode.ConfigurationTarget.Workspace, order: 2 }, - { value: inspection.workspaceValue, target: vscode.ConfigurationTarget.Workspace, order: 3 }, - { value: inspection.globalLanguageValue, target: vscode.ConfigurationTarget.Global, order: 4 }, - { value: inspection.globalValue, target: vscode.ConfigurationTarget.Global, order: 5 }, - ]; - - const result: ExplicitConfigValue[] = []; - for (const candidate of candidates) { - if (candidate.value !== undefined) { - result.push({ - value: candidate.value, - target: candidate.target, - order: candidate.order, - }); - } - } - return result.sort(compareExplicitConfigValues); -} - -function compareExplicitConfigValues(a: ExplicitConfigValue, b: ExplicitConfigValue): number { - return b.target - a.target || a.order - b.order; -} - -async function getTsdkCandidates(options?: { nativeOnly?: boolean; filter?: (candidate: ExplicitConfigValue) => boolean; }): Promise[]> { - const candidates: ExplicitConfigValue[] = []; - for (let sourceIndex = 0; sourceIndex < tsdkConfigSources.length; sourceIndex++) { - const source = tsdkConfigSources[sourceIndex]; - for (const candidate of getExplicitConfigValues(source.section, source.key)) { - if (!candidate.value || typeof candidate.value !== "string") { - continue; - } - if ((options?.nativeOnly ?? true) && source.nativeOnly && await pathHasTsserverJs(candidate.value)) { - continue; - } - candidates.push({ - ...candidate, - order: candidate.order + sourceIndex * 10, - }); - } - } - return candidates.filter(options?.filter ?? (() => true)).sort(compareExplicitConfigValues); -} - -async function pathHasTsserverJs(tsdkPath: string): Promise { - const resolved = workspaceResolve(tsdkPath); - for (const candidate of [vscode.Uri.joinPath(resolved, "tsserver.js"), vscode.Uri.joinPath(resolved, "lib", "tsserver.js")]) { - try { - await vscode.workspace.fs.stat(candidate); - return true; - } - catch {} - } - return false; -} - -/** - * Resolve a tsdk path (which may be relative) to a normalized absolute path. - */ -export function resolveTsdkPath(tsdkPath: string): string { - return path.normalize(workspaceResolve(tsdkPath).fsPath); -} - -export async function resolveTsdkPathToExe(tsdkPath: string): Promise { - const resolved = await realpathUri(workspaceResolve(tsdkPath)); - for (const packagePath of [resolved, vscode.Uri.joinPath(resolved, "..")]) { - try { - const packageJsonPath = vscode.Uri.joinPath(packagePath, "package.json"); - const packageJson = JSON.parse(await vscode.workspace.fs.readFile(packageJsonPath).then(buffer => buffer.toString())); - // NOTE: Keep in sync with packages/typescript/lib/getExePath.js. - const name: unknown = packageJson.name; - const bin: unknown = packageJson.bin; - if (typeof name !== "string" || !bin || typeof bin !== "object") continue; - - const baseName = name.startsWith("@") ? name.split("/")[1] : name; - if (!baseName) continue; - const expectedBinName = baseName === "typescript" ? "tsc" : "tsgo"; - if (!Object.prototype.hasOwnProperty.call(bin, expectedBinName)) continue; - - const exeName = `${expectedBinName}${process.platform === "win32" ? ".exe" : ""}`; - const platformPackage = `${baseName}-${process.platform}-${process.arch}`; - const exePath = vscode.Uri.file(resolvePackageExecutable(packageJsonPath.fsPath, platformPackage, exeName)); - await vscode.workspace.fs.stat(exePath); - return { path: withLongPathPrefix(exePath.fsPath), version: typeof packageJson.version === "string" ? packageJson.version : "unknown" }; - } - catch {} - } - for (const baseName of packagedExeBaseNames) { - try { - const exePath = vscode.Uri.joinPath(resolved, `${baseName}${process.platform === "win32" ? ".exe" : ""}`); - await vscode.workspace.fs.stat(exePath); - return { path: withLongPathPrefix(exePath.fsPath), version: "(local)", isLocal: true }; - } - catch {} - } -} - -async function realpathUri(uri: vscode.Uri): Promise { - if (uri.scheme !== "file") { - return uri; - } - try { - return vscode.Uri.file(await fs.promises.realpath(uri.fsPath)); - } - catch { - return uri; - } -} - -function withLongPathPrefix(exePath: string): string { - if (process.platform === "win32" && exePath.length >= 248 && !exePath.startsWith("\\\\?\\")) { - return "\\\\?\\" + exePath; - } - return exePath; -} - -export function getLanguageForUri(uri: vscode.Uri): string | undefined { - const ext = path.posix.extname(uri.path); - switch (ext) { - case ".ts": - case ".mts": - case ".cts": - return "typescript"; - case ".js": - case ".mjs": - case ".cjs": - return "javascript"; - case ".tsx": - return "typescriptreact"; - case ".jsx": - return "javascriptreact"; - default: - return undefined; - } -} - -export function needsExtHostRestartOnChange() { - const majorVersion = parseInt(vscode.version.split(".")[0]); - const minorVersion = parseInt(vscode.version.split(".")[1]); - return majorVersion <= 1 && minorVersion < 105; -} - -export async function restartExtHostOnChangeIfNeeded(): Promise { - if (needsExtHostRestartOnChange()) { - await vscode.commands.executeCommand("workbench.action.restartExtensionHost"); - } -} - -/** - * Read the useTsgo setting from both `js/ts.experimental.useTsgo` and - * `typescript.experimental.useTsgo`, using `inspect()` to only consider - * explicitly set values (ignoring VS Code defaults). - * - * Each setting key is resolved using standard VS Code precedence (workspace - * folder > workspace > global, with language-specific overrides taking - * priority within each scope). When both keys are explicitly configured, the - * value set at the most specific scope wins, and `js/ts` wins over - * `typescript` at the same scope. Returns `undefined` if neither setting has - * been explicitly configured. - */ -export function getUseTsgo(): boolean | undefined { - const tsValue = getExplicitUseTsgo("typescript"); - const jsTsValue = getExplicitUseTsgo("js/ts"); - - if (tsValue !== undefined || jsTsValue !== undefined) { - const jsTsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("js/ts"), "experimental.useTsgo"); - const tsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("typescript"), "experimental.useTsgo"); - const mostSpecific = Math.max(jsTsTarget ?? vscode.ConfigurationTarget.Global, tsTarget ?? vscode.ConfigurationTarget.Global); - return jsTsTarget === mostSpecific ? jsTsValue : tsValue; - } - - return undefined; -} - -export function getExplicitConfigTarget( - config: vscode.WorkspaceConfiguration, - key: string, -): vscode.ConfigurationTarget | undefined { - const inspection = config.inspect(key); - if (!inspection) return undefined; - if (inspection.workspaceFolderValue !== undefined) return vscode.ConfigurationTarget.WorkspaceFolder; - if (inspection.workspaceValue !== undefined) return vscode.ConfigurationTarget.Workspace; - if (inspection.globalValue !== undefined) return vscode.ConfigurationTarget.Global; - return undefined; -} - -export enum ConfigName { - JsTsConfigName = "js/ts.experimental.useTsgo", - DeprecatedTypeScriptConfigName = "typescript.experimental.useTsgo", -} - -/** - * Returns the name of the setting with the appropriate precedence that is explicitly set, - * preferring `js/ts` over `typescript`. - * Returns `undefined` if neither is explicitly specified. - */ -export function getWinningTsgoConfigKey(): ConfigName | undefined { - const jsTsValue = getExplicitUseTsgo("js/ts"); - const tsValue = getExplicitUseTsgo("typescript"); - - if (jsTsValue !== undefined || tsValue !== undefined) { - const jsTsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("js/ts"), "experimental.useTsgo"); - const tsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("typescript"), "experimental.useTsgo"); - const mostSpecific = Math.max(jsTsTarget ?? vscode.ConfigurationTarget.Global, tsTarget ?? vscode.ConfigurationTarget.Global); - return jsTsTarget === mostSpecific ? ConfigName.JsTsConfigName : ConfigName.DeprecatedTypeScriptConfigName; - } - - return undefined; -} - -function getExplicitUseTsgo(section: string): boolean | undefined { - const config = vscode.workspace.getConfiguration(section); - const inspected = config.inspect("experimental.useTsgo"); - if (!inspected) return undefined; - - const explicitValues: (boolean | undefined)[] = [ - inspected.workspaceFolderLanguageValue, - inspected.workspaceLanguageValue, - inspected.globalLanguageValue, - inspected.workspaceFolderValue, - inspected.workspaceValue, - inspected.globalValue, - ]; - - for (const v of explicitValues) { - if (v !== undefined) return v; - } - return undefined; -} - -/** - * Read a setting following the standard `js/ts > [typescript|javascript]` precedence: - * the unified `js/ts.` setting wins if explicitly set at any scope, otherwise - * the per-language `.` setting is used (including its - * declared default). - * - * Note: we intentionally ignore the unified setting's registered default - * (`defaultValue`/`defaultLanguageValue` from `inspect()`) so that the per-language - * fallback's value/default can apply when the user hasn't explicitly set the - * unified key. Both keys typically declare the same default, so this is observably - * equivalent in the unset case. - */ -export function readUnifiedConfig( - key: string, - fallbackSection: "typescript" | "javascript", - fallbackKey: string, - scope: vscode.ConfigurationScope | undefined, - defaultValue: T, -): T { - const unified = vscode.workspace.getConfiguration("js/ts", scope).inspect(key); - const explicit = unified && ( - unified.workspaceFolderLanguageValue - ?? unified.workspaceFolderValue - ?? unified.workspaceLanguageValue - ?? unified.workspaceValue - ?? unified.globalLanguageValue - ?? unified.globalValue - ); - if (explicit !== undefined) return explicit; - return vscode.workspace.getConfiguration(fallbackSection, scope).get(fallbackKey, defaultValue); -} - -export function contentMappersEnabled(): boolean { - return vscode.workspace.getConfiguration("js/ts").get("contentMappers.enabled", true); -} - -export interface PackageInfo { - name: string; - version: string; -} +import * as fs from "fs"; +import * as path from "path"; +import * as vscode from "vscode"; +import { resolvePackageExecutable } from "./tsdkPackage"; + +export const aiConnectionString = "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255"; + +export const languageClientName = "TypeScript Language Server"; +export const nightlyExtensionId = "TypeScriptTeam.vscode-typescript-nightly"; +export const enableContributedNightlyVersion = true; + +export const jsTsLanguageModes = [ + "typescript", + "typescriptreact", + "javascript", + "javascriptreact", +]; + +export const builtinTSExtensionId = "vscode.typescript-language-features"; + +/** + * URI schemes for which JS/TS language features should be disabled. + */ +export const disabledSchemes = new Set([ + "git", + "vsls", + "github", + "azurerepos", + "chat-editing-text-model", +]); + +export function isSupportedLanguageMode(doc: vscode.TextDocument): boolean { + return jsTsLanguageModes.includes(doc.languageId); +} + +const configRegex = /^[jt]sconfig\.(.+\.)?json$/i; +export function isJsConfigOrTsConfigFileName(fileName: string): boolean { + return configRegex.test(path.basename(fileName)); +} + +export interface ExeInfo { + path: string; + version: string; + isLocal?: boolean; +} + +const packagedExeBaseNames = ["tsc", "tsgo"]; + +export async function getBuiltinExePath(context: vscode.ExtensionContext): Promise { + if (context.extensionMode === vscode.ExtensionMode.Development) { + const exeName = `tsc${process.platform === "win32" ? ".exe" : ""}`; + const exe = context.asAbsolutePath(path.join("../../", "built", "local", exeName)); + try { + await vscode.workspace.fs.stat(vscode.Uri.file(exe)); + return { path: exe, version: "(local)", isLocal: true }; + } + catch {} + } + return getPackagedExePath(context.extension.extensionUri, getBundledTypeScriptVersion(context.extension.packageJSON)); +} + +export async function getNightlyExePath(): Promise { + const extension = vscode.extensions.getExtension(nightlyExtensionId); + if (!extension) { + return undefined; + } + + return tryGetPackagedExePath(extension.extensionUri, getBundledTypeScriptVersion(extension.packageJSON)); +} + +export async function getDefaultExePath(context: vscode.ExtensionContext): Promise { + if (enableContributedNightlyVersion) { + const nightlyExe = await getNightlyExePath(); + if (nightlyExe) { + return nightlyExe; + } + } + return getBuiltinExePath(context); +} + +async function getPackagedExePath(extensionUri: vscode.Uri, version: unknown): Promise { + const exe = await tryGetPackagedExePath(extensionUri, version); + if (exe) { + return exe; + } + throw new Error(vscode.l10n.t("Could not find a TypeScript executable in the extension package.")); +} + +function getBundledTypeScriptVersion(packageJSON: unknown): string { + if (packageJSON && typeof packageJSON === "object" && "bundledTypeScriptVersion" in packageJSON) { + const version = packageJSON.bundledTypeScriptVersion; + if (typeof version === "string") { + return version; + } + } + return "unknown"; +} + +async function tryGetPackagedExePath(extensionUri: vscode.Uri, version: unknown): Promise { + for (const baseName of packagedExeBaseNames) { + const exeName = `${baseName}${process.platform === "win32" ? ".exe" : ""}`; + const exePath = vscode.Uri.joinPath(extensionUri, "lib", exeName); + try { + await vscode.workspace.fs.stat(exePath); + return { + path: withLongPathPrefix(exePath.fsPath), + version: typeof version === "string" ? version : "unknown", + }; + } + catch {} + } + return undefined; +} + +/** + * Returns the base directory for resolving relative paths in workspace config. + * - Multi-root workspace: the directory containing the `.code-workspace` file. + * - Single-root workspace: the lone workspace folder. + * - No workspace: undefined. + */ +export function workspaceConfigBase(): vscode.Uri | undefined { + const wsFile = vscode.workspace.workspaceFile; + if (wsFile && wsFile.scheme === "file") { + return vscode.Uri.file(path.dirname(wsFile.fsPath)); + } + if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { + return vscode.workspace.workspaceFolders[0].uri; + } + return undefined; +} + +function workspaceResolve(relativePath: string): vscode.Uri { + if (path.isAbsolute(relativePath)) { + return vscode.Uri.file(relativePath); + } + const base = workspaceConfigBase(); + if (base) { + return vscode.Uri.joinPath(base, relativePath); + } + return vscode.Uri.file(relativePath); +} + +/** + * Memento used to control whether the user has opted into using a tsdk location defined + * in workspace settings. This is *not* a trust boundary - workspace trust is required + * before the extension will prompt to set this memento to true. This setting is here to + * provide users a way to opt out of using the workspace-provided tsdk without changing + * committed workspace settings, e.g. when the workspace tsdk is very outdated or the user + * is trialing a nightly TS version. Since the stored value is only a boolean, it does not + * protect against executing a different tsdk than the one the user originally opted into + * if the workspace settings or node_modules content changes - that's why workspace trust + * is always required, and why the prompts that set this value should not be interpreted + * as indicating trust for a specific tsdk installation. + */ +export const useWorkspaceTsdkStorageKey = "typescript.native-preview.useWorkspaceTsdk"; + +export async function getExe(context: vscode.ExtensionContext): Promise { + for (const candidate of getTrustedTsdkCandidates(context, await getTsdkCandidates())) { + const exe = await resolveTsdkPathToExe(candidate.value); + if (exe) { + return exe; + } + } + + return getDefaultExePath(context); +} + +export async function hasTsdkConfigured(): Promise { + return (await getTsdkCandidates({ nativeOnly: false })).length > 0; +} + +export async function hasNativeTsdkConfigured(context: vscode.ExtensionContext): Promise { + return await getTsdkServerKind(context) === "lsp"; +} + +export async function getTsdkServerKind(context: vscode.ExtensionContext): Promise<"lsp" | "tsserver" | undefined> { + for (const candidate of getTrustedTsdkCandidates(context, await getTsdkCandidates({ nativeOnly: false }))) { + const kind = await classifyTsdk(candidate.value); + if (kind) { + return kind; + } + } +} + +async function classifyTsdk(tsdkPath: string): Promise<"lsp" | "tsserver" | undefined> { + if (await pathHasTsserverJs(tsdkPath)) { + return "tsserver"; + } + if (await resolveTsdkPathToExe(tsdkPath)) { + return "lsp"; + } +} + +function getTrustedTsdkCandidates(context: vscode.ExtensionContext, tsdkCandidates: ExplicitConfigValue[]): ExplicitConfigValue[] { + // If tsdk is set at the workspace level, require both workspace trust and + // explicit user opt-in. Workspace trust can be revoked after the memento is + // set, so we must always check both. + if (tsdkCandidates.some(candidate => candidate.target !== vscode.ConfigurationTarget.Global)) { + if (!vscode.workspace.isTrusted || !context.workspaceState.get(useWorkspaceTsdkStorageKey, false)) { + return tsdkCandidates.filter(candidate => candidate.target === vscode.ConfigurationTarget.Global); + } + } + return tsdkCandidates; +} + +interface ExplicitConfigValue { + value: T; + target: vscode.ConfigurationTarget; + order: number; +} + +interface TsdkConfigSource { + section: string; + key: string; + nativeOnly: boolean; +} + +const tsdkConfigSources: readonly TsdkConfigSource[] = [ + { section: "js/ts", key: "tsdk.path", nativeOnly: true }, + { section: "typescript", key: "tsdk", nativeOnly: true }, + { section: "typescript.native-preview", key: "tsdk", nativeOnly: false }, +]; + +export function readNativePreviewConfig(key: string, defaultValue: T): T { + const explicit = getExplicitConfigValues("js/ts", key)[0]; + if (explicit) { + return explicit.value; + } + return vscode.workspace.getConfiguration("typescript.native-preview").get(key, defaultValue); +} + +export function getWorkspaceTsdkConfigValue(): string | undefined { + return vscode.workspace.getConfiguration("js/ts").inspect("tsdk.path")?.workspaceValue; +} + +export async function updateWorkspaceTsdkConfig(value: string): Promise { + await vscode.workspace.getConfiguration("js/ts").update("tsdk.path", value, vscode.ConfigurationTarget.Workspace); +} + +export async function getWorkspaceTsdkForPrompt(): Promise { + const candidates = await getTsdkCandidates({ filter: candidate => candidate.target !== vscode.ConfigurationTarget.Global }); + for (const candidate of candidates) { + if (await resolveTsdkPathToExe(candidate.value)) { + return candidate.value; + } + } + return undefined; +} + +function getExplicitConfigValues(section: string, key: string): ExplicitConfigValue[] { + const inspection = vscode.workspace.getConfiguration(section).inspect(key); + if (!inspection) { + return []; + } + + const candidates: Array<{ value: T | undefined; target: vscode.ConfigurationTarget; order: number; }> = [ + { value: inspection.workspaceFolderLanguageValue, target: vscode.ConfigurationTarget.WorkspaceFolder, order: 0 }, + { value: inspection.workspaceFolderValue, target: vscode.ConfigurationTarget.WorkspaceFolder, order: 1 }, + { value: inspection.workspaceLanguageValue, target: vscode.ConfigurationTarget.Workspace, order: 2 }, + { value: inspection.workspaceValue, target: vscode.ConfigurationTarget.Workspace, order: 3 }, + { value: inspection.globalLanguageValue, target: vscode.ConfigurationTarget.Global, order: 4 }, + { value: inspection.globalValue, target: vscode.ConfigurationTarget.Global, order: 5 }, + ]; + + const result: ExplicitConfigValue[] = []; + for (const candidate of candidates) { + if (candidate.value !== undefined) { + result.push({ + value: candidate.value, + target: candidate.target, + order: candidate.order, + }); + } + } + return result.sort(compareExplicitConfigValues); +} + +function compareExplicitConfigValues(a: ExplicitConfigValue, b: ExplicitConfigValue): number { + return b.target - a.target || a.order - b.order; +} + +async function getTsdkCandidates(options?: { nativeOnly?: boolean; filter?: (candidate: ExplicitConfigValue) => boolean; }): Promise[]> { + const candidates: ExplicitConfigValue[] = []; + for (let sourceIndex = 0; sourceIndex < tsdkConfigSources.length; sourceIndex++) { + const source = tsdkConfigSources[sourceIndex]; + for (const candidate of getExplicitConfigValues(source.section, source.key)) { + if (!candidate.value || typeof candidate.value !== "string") { + continue; + } + if ((options?.nativeOnly ?? true) && source.nativeOnly && await pathHasTsserverJs(candidate.value)) { + continue; + } + candidates.push({ + ...candidate, + order: candidate.order + sourceIndex * 10, + }); + } + } + return candidates.filter(options?.filter ?? (() => true)).sort(compareExplicitConfigValues); +} + +async function pathHasTsserverJs(tsdkPath: string): Promise { + const resolved = workspaceResolve(tsdkPath); + for (const candidate of [vscode.Uri.joinPath(resolved, "tsserver.js"), vscode.Uri.joinPath(resolved, "lib", "tsserver.js")]) { + try { + await vscode.workspace.fs.stat(candidate); + return true; + } + catch {} + } + return false; +} + +/** + * Resolve a tsdk path (which may be relative) to a normalized absolute path. + */ +export function resolveTsdkPath(tsdkPath: string): string { + return path.normalize(workspaceResolve(tsdkPath).fsPath); +} + +export async function resolveTsdkPathToExe(tsdkPath: string): Promise { + const resolved = await realpathUri(workspaceResolve(tsdkPath)); + for (const packagePath of [resolved, vscode.Uri.joinPath(resolved, "..")]) { + try { + const packageJsonPath = vscode.Uri.joinPath(packagePath, "package.json"); + const packageJson = JSON.parse(await vscode.workspace.fs.readFile(packageJsonPath).then(buffer => buffer.toString())); + // NOTE: Keep in sync with packages/typescript/lib/getExePath.js. + const name: unknown = packageJson.name; + const bin: unknown = packageJson.bin; + if (typeof name !== "string" || !bin || typeof bin !== "object") continue; + + const baseName = name.startsWith("@") ? name.split("/")[1] : name; + if (!baseName) continue; + const expectedBinName = baseName === "typescript" ? "tsc" : "tsgo"; + if (!Object.prototype.hasOwnProperty.call(bin, expectedBinName)) continue; + + const exeName = `${expectedBinName}${process.platform === "win32" ? ".exe" : ""}`; + const platformPackage = `${baseName}-${process.platform}-${process.arch}`; + const exePath = vscode.Uri.file(resolvePackageExecutable(packageJsonPath.fsPath, platformPackage, exeName)); + await vscode.workspace.fs.stat(exePath); + return { path: withLongPathPrefix(exePath.fsPath), version: typeof packageJson.version === "string" ? packageJson.version : "unknown" }; + } + catch {} + } + for (const baseName of packagedExeBaseNames) { + try { + const exePath = vscode.Uri.joinPath(resolved, `${baseName}${process.platform === "win32" ? ".exe" : ""}`); + await vscode.workspace.fs.stat(exePath); + return { path: withLongPathPrefix(exePath.fsPath), version: "(local)", isLocal: true }; + } + catch {} + } +} + +async function realpathUri(uri: vscode.Uri): Promise { + if (uri.scheme !== "file") { + return uri; + } + try { + return vscode.Uri.file(await fs.promises.realpath(uri.fsPath)); + } + catch { + return uri; + } +} + +function withLongPathPrefix(exePath: string): string { + if (process.platform === "win32" && exePath.length >= 248 && !exePath.startsWith("\\\\?\\")) { + return "\\\\?\\" + exePath; + } + return exePath; +} + +export function getLanguageForUri(uri: vscode.Uri): string | undefined { + const ext = path.posix.extname(uri.path); + switch (ext) { + case ".ts": + case ".mts": + case ".cts": + return "typescript"; + case ".js": + case ".mjs": + case ".cjs": + return "javascript"; + case ".tsx": + return "typescriptreact"; + case ".jsx": + return "javascriptreact"; + default: + return undefined; + } +} + +export function needsExtHostRestartOnChange() { + const majorVersion = parseInt(vscode.version.split(".")[0]); + const minorVersion = parseInt(vscode.version.split(".")[1]); + return majorVersion <= 1 && minorVersion < 105; +} + +export async function restartExtHostOnChangeIfNeeded(): Promise { + if (needsExtHostRestartOnChange()) { + await vscode.commands.executeCommand("workbench.action.restartExtensionHost"); + } +} + +/** + * Read the useTsgo setting from both `js/ts.experimental.useTsgo` and + * `typescript.experimental.useTsgo`, using `inspect()` to only consider + * explicitly set values (ignoring VS Code defaults). + * + * Each setting key is resolved using standard VS Code precedence (workspace + * folder > workspace > global, with language-specific overrides taking + * priority within each scope). When both keys are explicitly configured, the + * value set at the most specific scope wins, and `js/ts` wins over + * `typescript` at the same scope. Returns `undefined` if neither setting has + * been explicitly configured. + */ +export function getUseTsgo(): boolean | undefined { + const tsValue = getExplicitUseTsgo("typescript"); + const jsTsValue = getExplicitUseTsgo("js/ts"); + + if (tsValue !== undefined || jsTsValue !== undefined) { + const jsTsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("js/ts"), "experimental.useTsgo"); + const tsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("typescript"), "experimental.useTsgo"); + const mostSpecific = Math.max(jsTsTarget ?? vscode.ConfigurationTarget.Global, tsTarget ?? vscode.ConfigurationTarget.Global); + return jsTsTarget === mostSpecific ? jsTsValue : tsValue; + } + + return undefined; +} + +export function getExplicitConfigTarget( + config: vscode.WorkspaceConfiguration, + key: string, +): vscode.ConfigurationTarget | undefined { + const inspection = config.inspect(key); + if (!inspection) return undefined; + if (inspection.workspaceFolderValue !== undefined) return vscode.ConfigurationTarget.WorkspaceFolder; + if (inspection.workspaceValue !== undefined) return vscode.ConfigurationTarget.Workspace; + if (inspection.globalValue !== undefined) return vscode.ConfigurationTarget.Global; + return undefined; +} + +export enum ConfigName { + JsTsConfigName = "js/ts.experimental.useTsgo", + DeprecatedTypeScriptConfigName = "typescript.experimental.useTsgo", +} + +/** + * Returns the name of the setting with the appropriate precedence that is explicitly set, + * preferring `js/ts` over `typescript`. + * Returns `undefined` if neither is explicitly specified. + */ +export function getWinningTsgoConfigKey(): ConfigName | undefined { + const jsTsValue = getExplicitUseTsgo("js/ts"); + const tsValue = getExplicitUseTsgo("typescript"); + + if (jsTsValue !== undefined || tsValue !== undefined) { + const jsTsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("js/ts"), "experimental.useTsgo"); + const tsTarget = getExplicitConfigTarget(vscode.workspace.getConfiguration("typescript"), "experimental.useTsgo"); + const mostSpecific = Math.max(jsTsTarget ?? vscode.ConfigurationTarget.Global, tsTarget ?? vscode.ConfigurationTarget.Global); + return jsTsTarget === mostSpecific ? ConfigName.JsTsConfigName : ConfigName.DeprecatedTypeScriptConfigName; + } + + return undefined; +} + +function getExplicitUseTsgo(section: string): boolean | undefined { + const config = vscode.workspace.getConfiguration(section); + const inspected = config.inspect("experimental.useTsgo"); + if (!inspected) return undefined; + + const explicitValues: (boolean | undefined)[] = [ + inspected.workspaceFolderLanguageValue, + inspected.workspaceLanguageValue, + inspected.globalLanguageValue, + inspected.workspaceFolderValue, + inspected.workspaceValue, + inspected.globalValue, + ]; + + for (const v of explicitValues) { + if (v !== undefined) return v; + } + return undefined; +} + +/** + * Read a setting following the standard `js/ts > [typescript|javascript]` precedence: + * the unified `js/ts.` setting wins if explicitly set at any scope, otherwise + * the per-language `.` setting is used (including its + * declared default). + * + * Note: we intentionally ignore the unified setting's registered default + * (`defaultValue`/`defaultLanguageValue` from `inspect()`) so that the per-language + * fallback's value/default can apply when the user hasn't explicitly set the + * unified key. Both keys typically declare the same default, so this is observably + * equivalent in the unset case. + */ +export function readUnifiedConfig( + key: string, + fallbackSection: "typescript" | "javascript", + fallbackKey: string, + scope: vscode.ConfigurationScope | undefined, + defaultValue: T, +): T { + const unified = vscode.workspace.getConfiguration("js/ts", scope).inspect(key); + const explicit = unified && ( + unified.workspaceFolderLanguageValue + ?? unified.workspaceFolderValue + ?? unified.workspaceLanguageValue + ?? unified.workspaceValue + ?? unified.globalLanguageValue + ?? unified.globalValue + ); + if (explicit !== undefined) return explicit; + return vscode.workspace.getConfiguration(fallbackSection, scope).get(fallbackKey, defaultValue); +} + +export function contentMappersEnabled(): boolean { + return vscode.workspace.getConfiguration("js/ts").get("contentMappers.enabled", true); +} + +export interface PackageInfo { + name: string; + version: string; +} diff --git a/packages/vscode-typescript/src/vscode.proposed.editorHoverVerbosityLevel.d.ts b/packages/vscode-typescript/src/vscode.proposed.editorHoverVerbosityLevel.d.ts index 50b678c034879..ed9eeb000cbe3 100644 --- a/packages/vscode-typescript/src/vscode.proposed.editorHoverVerbosityLevel.d.ts +++ b/packages/vscode-typescript/src/vscode.proposed.editorHoverVerbosityLevel.d.ts @@ -1,72 +1,72 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module "vscode" { - /** - * A hover represents additional information for a symbol or word. Hovers are - * rendered in a tooltip-like widget. - */ - export class VerboseHover extends Hover { - /** - * Can increase the verbosity of the hover - */ - canIncreaseVerbosity?: boolean; - - /** - * Can decrease the verbosity of the hover - */ - canDecreaseVerbosity?: boolean; - - /** - * Creates a new hover object. - * - * @param contents The contents of the hover. - * @param range The range to which the hover applies. - */ - constructor(contents: MarkdownString | MarkedString | Array, range?: Range, canIncreaseVerbosity?: boolean, canDecreaseVerbosity?: boolean); - } - - export interface HoverContext { - /** - * The delta by which to increase/decrease the hover verbosity level - */ - readonly verbosityDelta?: number; - - /** - * The previous hover sent for the same position - */ - readonly previousHover?: Hover; - } - - export enum HoverVerbosityAction { - /** - * Increase the hover verbosity - */ - Increase = 0, - /** - * Decrease the hover verbosity - */ - Decrease = 1, - } - - /** - * The hover provider class - */ - export interface HoverProvider { - /** - * Provide a hover for the given position and document. Multiple hovers at the same - * position will be merged by the editor. A hover can have a range which defaults - * to the word range at the position when omitted. - * - * @param document The document in which the command was invoked. - * @param position The position at which the command was invoked. - * @param token A cancellation token. - * @param context A hover context. - * @returns A hover or a thenable that resolves to such. The lack of a result can be - * signaled by returning `undefined` or `null`. - */ - provideHover(document: TextDocument, position: Position, token: CancellationToken, context?: HoverContext): ProviderResult; - } -} +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module "vscode" { + /** + * A hover represents additional information for a symbol or word. Hovers are + * rendered in a tooltip-like widget. + */ + export class VerboseHover extends Hover { + /** + * Can increase the verbosity of the hover + */ + canIncreaseVerbosity?: boolean; + + /** + * Can decrease the verbosity of the hover + */ + canDecreaseVerbosity?: boolean; + + /** + * Creates a new hover object. + * + * @param contents The contents of the hover. + * @param range The range to which the hover applies. + */ + constructor(contents: MarkdownString | MarkedString | Array, range?: Range, canIncreaseVerbosity?: boolean, canDecreaseVerbosity?: boolean); + } + + export interface HoverContext { + /** + * The delta by which to increase/decrease the hover verbosity level + */ + readonly verbosityDelta?: number; + + /** + * The previous hover sent for the same position + */ + readonly previousHover?: Hover; + } + + export enum HoverVerbosityAction { + /** + * Increase the hover verbosity + */ + Increase = 0, + /** + * Decrease the hover verbosity + */ + Decrease = 1, + } + + /** + * The hover provider class + */ + export interface HoverProvider { + /** + * Provide a hover for the given position and document. Multiple hovers at the same + * position will be merged by the editor. A hover can have a range which defaults + * to the word range at the position when omitted. + * + * @param document The document in which the command was invoked. + * @param position The position at which the command was invoked. + * @param token A cancellation token. + * @param context A hover context. + * @returns A hover or a thenable that resolves to such. The lack of a result can be + * signaled by returning `undefined` or `null`. + */ + provideHover(document: TextDocument, position: Position, token: CancellationToken, context?: HoverContext): ProviderResult; + } +} diff --git a/packages/vscode-typescript/src/vscode.proposed.multiDocumentHighlightProvider.d.ts b/packages/vscode-typescript/src/vscode.proposed.multiDocumentHighlightProvider.d.ts index 1a95e49b4a954..d099435a45fa4 100644 --- a/packages/vscode-typescript/src/vscode.proposed.multiDocumentHighlightProvider.d.ts +++ b/packages/vscode-typescript/src/vscode.proposed.multiDocumentHighlightProvider.d.ts @@ -1,58 +1,58 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module "vscode" { - /** - * Represents a collection of document highlights from multiple documents. - */ - export class MultiDocumentHighlight { - /** - * The URI of the document containing the highlights. - */ - uri: Uri; - - /** - * The highlights for the document. - */ - highlights: DocumentHighlight[]; - - /** - * Creates a new instance of MultiDocumentHighlight. - * @param uri The URI of the document containing the highlights. - * @param highlights The highlights for the document. - */ - constructor(uri: Uri, highlights: DocumentHighlight[]); - } - - export interface MultiDocumentHighlightProvider { - /** - * Provide a set of document highlights, like all occurrences of a variable or - * all exit-points of a function. - * - * @param document The document in which the command was invoked. - * @param position The position at which the command was invoked. - * @param otherDocuments An array of additional valid documents for which highlights should be provided. - * @param token A cancellation token. - * @returns A Map containing a mapping of the Uri of a document to the document highlights or a thenable that resolves to such. The lack of a result can be - * signaled by returning `undefined`, `null`, or an empty map. - */ - provideMultiDocumentHighlights(document: TextDocument, position: Position, otherDocuments: TextDocument[], token: CancellationToken): ProviderResult; - } - - namespace languages { - /** - * Register a multi document highlight provider. - * - * Multiple providers can be registered for a language. In that case providers are sorted - * by their {@link languages.match score} and groups sequentially asked for document highlights. - * The process stops when a provider returns a `non-falsy` or `non-failure` result. - * - * @param selector A selector that defines the documents this provider is applicable to. - * @param provider A multi-document highlight provider. - * @returns A {@link Disposable} that unregisters this provider when being disposed. - */ - export function registerMultiDocumentHighlightProvider(selector: DocumentSelector, provider: MultiDocumentHighlightProvider): Disposable; - } -} +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module "vscode" { + /** + * Represents a collection of document highlights from multiple documents. + */ + export class MultiDocumentHighlight { + /** + * The URI of the document containing the highlights. + */ + uri: Uri; + + /** + * The highlights for the document. + */ + highlights: DocumentHighlight[]; + + /** + * Creates a new instance of MultiDocumentHighlight. + * @param uri The URI of the document containing the highlights. + * @param highlights The highlights for the document. + */ + constructor(uri: Uri, highlights: DocumentHighlight[]); + } + + export interface MultiDocumentHighlightProvider { + /** + * Provide a set of document highlights, like all occurrences of a variable or + * all exit-points of a function. + * + * @param document The document in which the command was invoked. + * @param position The position at which the command was invoked. + * @param otherDocuments An array of additional valid documents for which highlights should be provided. + * @param token A cancellation token. + * @returns A Map containing a mapping of the Uri of a document to the document highlights or a thenable that resolves to such. The lack of a result can be + * signaled by returning `undefined`, `null`, or an empty map. + */ + provideMultiDocumentHighlights(document: TextDocument, position: Position, otherDocuments: TextDocument[], token: CancellationToken): ProviderResult; + } + + namespace languages { + /** + * Register a multi document highlight provider. + * + * Multiple providers can be registered for a language. In that case providers are sorted + * by their {@link languages.match score} and groups sequentially asked for document highlights. + * The process stops when a provider returns a `non-falsy` or `non-failure` result. + * + * @param selector A selector that defines the documents this provider is applicable to. + * @param provider A multi-document highlight provider. + * @returns A {@link Disposable} that unregisters this provider when being disposed. + */ + export function registerMultiDocumentHighlightProvider(selector: DocumentSelector, provider: MultiDocumentHighlightProvider): Disposable; + } +} diff --git a/packages/vscode-typescript/src/workspaceSymbolMiddleware.ts b/packages/vscode-typescript/src/workspaceSymbolMiddleware.ts index af7da47a8b8c0..a0dabf2062f80 100644 --- a/packages/vscode-typescript/src/workspaceSymbolMiddleware.ts +++ b/packages/vscode-typescript/src/workspaceSymbolMiddleware.ts @@ -1,41 +1,41 @@ -import * as vscode from "vscode"; -import type { CancellationToken } from "vscode"; -import type { MessageSignature } from "vscode-languageserver-protocol"; -import { isSupportedLanguageMode } from "./util"; - -const supportedSchemes = new Set(["file", "untitled"]); - -function isSupportedDocument(document: vscode.TextDocument): boolean { - return isSupportedLanguageMode(document) && supportedSchemes.has(document.uri.scheme); -} - -function getDocument(): vscode.TextDocument | undefined { - const activeDocument = vscode.window.activeTextEditor?.document; - if (activeDocument && isSupportedDocument(activeDocument)) { - return activeDocument; - } - - return vscode.workspace.textDocuments.find(isSupportedDocument); -} - -export function workspaceSymbolSendRequestMiddleware( - type: string | MessageSignature, - params: P | undefined, - token: CancellationToken | undefined, - next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, -): Promise { - const method = typeof type === "string" ? type : type.method; - if (method !== "workspace/symbol") { - return next(type, params, token); - } - - const document = getDocument(); - if (!document) { - return next(type, params, token); - } - - return next(type, { - ...params, - textDocument: { uri: document.uri.toString() }, - } as P, token); -} +import * as vscode from "vscode"; +import type { CancellationToken } from "vscode"; +import type { MessageSignature } from "vscode-languageserver-protocol"; +import { isSupportedLanguageMode } from "./util"; + +const supportedSchemes = new Set(["file", "untitled"]); + +function isSupportedDocument(document: vscode.TextDocument): boolean { + return isSupportedLanguageMode(document) && supportedSchemes.has(document.uri.scheme); +} + +function getDocument(): vscode.TextDocument | undefined { + const activeDocument = vscode.window.activeTextEditor?.document; + if (activeDocument && isSupportedDocument(activeDocument)) { + return activeDocument; + } + + return vscode.workspace.textDocuments.find(isSupportedDocument); +} + +export function workspaceSymbolSendRequestMiddleware( + type: string | MessageSignature, + params: P | undefined, + token: CancellationToken | undefined, + next: (type: string | MessageSignature, params?: P, token?: CancellationToken) => Promise, +): Promise { + const method = typeof type === "string" ? type : type.method; + if (method !== "workspace/symbol") { + return next(type, params, token); + } + + const document = getDocument(); + if (!document) { + return next(type, params, token); + } + + return next(type, { + ...params, + textDocument: { uri: document.uri.toString() }, + } as P, token); +} diff --git a/packages/vscode-typescript/test/contentMapperContributions.test.ts b/packages/vscode-typescript/test/contentMapperContributions.test.ts index 60db78fb9d403..f78873b9863c2 100644 --- a/packages/vscode-typescript/test/contentMapperContributions.test.ts +++ b/packages/vscode-typescript/test/contentMapperContributions.test.ts @@ -1,56 +1,56 @@ -import assert from "node:assert/strict"; -import test, { describe } from "node:test"; -import { - type ContentMapperContribution, - documentMatchesContentMapperContributions, - serializeContentMapperContributions, -} from "../src/contentMapperContributions"; - -const documentedContribution = { - extensions: [".vue"], - inferredProjectContribution: { - options: { strictTemplates: true }, - manifest: { - name: "Vue mapper", - version: "1.2.3", - exec: ["node", "mapper.js"], - compilerOptions: ["strict"], - dynamicConfig: true, - }, - }, -} satisfies ContentMapperContribution; - -describe("content mapper contributions", { concurrency: true }, () => { - test("content mapper extensions match document paths case-insensitively", () => { - const registrations = new Map([[ - "publisher.extension", - [{ extensions: [".vue"] }], - ]]); - const document = { uri: { path: "/workspace/Component.VUE" } }; - - assert.equal(documentMatchesContentMapperContributions(document, registrations), true); - }); - - test("serializes the documented inferred project contribution", () => { - const registrations = new Map([[ - "publisher.extension", - [documentedContribution], - ]]); - - assert.deepEqual(serializeContentMapperContributions(registrations), [{ - contributorId: "publisher.extension", - extensions: [".vue"], - inferredProjectContribution: { - options: { strictTemplates: true }, - manifest: { - name: "Vue mapper", - version: "1.2.3", - exec: ["node", "mapper.js"], - cwd: undefined, - compilerOptions: ["strict"], - dynamicConfig: true, - }, - }, - }]); - }); -}); +import assert from "node:assert/strict"; +import test, { describe } from "node:test"; +import { + type ContentMapperContribution, + documentMatchesContentMapperContributions, + serializeContentMapperContributions, +} from "../src/contentMapperContributions"; + +const documentedContribution = { + extensions: [".vue"], + inferredProjectContribution: { + options: { strictTemplates: true }, + manifest: { + name: "Vue mapper", + version: "1.2.3", + exec: ["node", "mapper.js"], + compilerOptions: ["strict"], + dynamicConfig: true, + }, + }, +} satisfies ContentMapperContribution; + +describe("content mapper contributions", { concurrency: true }, () => { + test("content mapper extensions match document paths case-insensitively", () => { + const registrations = new Map([[ + "publisher.extension", + [{ extensions: [".vue"] }], + ]]); + const document = { uri: { path: "/workspace/Component.VUE" } }; + + assert.equal(documentMatchesContentMapperContributions(document, registrations), true); + }); + + test("serializes the documented inferred project contribution", () => { + const registrations = new Map([[ + "publisher.extension", + [documentedContribution], + ]]); + + assert.deepEqual(serializeContentMapperContributions(registrations), [{ + contributorId: "publisher.extension", + extensions: [".vue"], + inferredProjectContribution: { + options: { strictTemplates: true }, + manifest: { + name: "Vue mapper", + version: "1.2.3", + exec: ["node", "mapper.js"], + cwd: undefined, + compilerOptions: ["strict"], + dynamicConfig: true, + }, + }, + }]); + }); +}); diff --git a/packages/vscode-typescript/test/index.test.ts b/packages/vscode-typescript/test/index.test.ts index 76a3a8d1e641f..05ca73e2283b8 100644 --- a/packages/vscode-typescript/test/index.test.ts +++ b/packages/vscode-typescript/test/index.test.ts @@ -1,3 +1,3 @@ -import "./contentMapperContributions.test"; -import "./lspMiddleware.test"; -import "./tsdkPackage.test"; +import "./contentMapperContributions.test"; +import "./lspMiddleware.test"; +import "./tsdkPackage.test"; diff --git a/packages/vscode-typescript/test/lspMiddleware.test.ts b/packages/vscode-typescript/test/lspMiddleware.test.ts index 40d7ccc4e685d..ca1a99d805592 100644 --- a/packages/vscode-typescript/test/lspMiddleware.test.ts +++ b/packages/vscode-typescript/test/lspMiddleware.test.ts @@ -1,413 +1,413 @@ -import type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; -import assert from "node:assert/strict"; -import { PassThrough } from "node:stream"; -import test, { describe } from "node:test"; -import { - CancellationToken, - CancellationTokenSource, - createProtocolConnection, - type Diagnostic, - HoverRequest, - PublishDiagnosticsNotification, - type PublishDiagnosticsParams, -} from "vscode-languageserver-protocol/node"; -import { - type FirstPartyLspMiddleware, - LspMiddlewareRegistry, -} from "../src/lspMiddleware"; - -const params = { textDocument: { uri: "file:///test.ts" }, position: { line: 0, character: 0 } }; - -function deferred() { - let resolve!: () => void; - const promise = new Promise(resolver => { - resolve = resolver; - }); - return { promise, resolve }; -} - -describe("LSP middleware", () => { - test("transforms raw results in registration order without changing requests", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - registry.register("textDocument/hover", (result, context) => { - assert.deepEqual(context.params, params); - assert.notEqual(context.params, params); - assert.equal(Object.isFrozen(context.params.textDocument), false); - return result && { ...result, contents: "first" }; - }); - registry.register("textDocument/hover", async result => { - assert.equal(result?.contents, "first"); - return result && { ...result, contents: "second" }; - }); - const original = { contents: "server", canIncreaseVerbosity: true }; - let requests = 0; - const result = await registry.sendRequest("textDocument/hover", params, undefined, async (type, sentParams, token) => { - requests++; - assert.equal(type, "textDocument/hover"); - assert.equal(sentParams, params); - assert.equal(token, undefined); - return original; - }); - assert.equal(requests, 1); - assert.deepEqual(result, { contents: "second", canIncreaseVerbosity: true }); - assert.equal(original.contents, "server"); - }); - - test("rejects excluded methods at registration", () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - for ( - const method of [ - "initialize", - "shutdown", - "initialized", - "exit", - "textDocument/didOpen", - "textDocument/didChange", - "textDocument/publishDiagnostics", - "window/logMessage", - "window/showMessage", - "workspace/didChangeConfiguration", - "workspace/willRenameFiles", - "workspace/executeCommand", - "workspace/diagnostic/refresh", - "client/registerCapability", - "custom/initializeAPISession", - "custom/setContentMapperContributions", - "custom/runGC", - "custom/projectInfo", - "$/progress", - "unknown/feature", - "__proto__", - ] - ) { - // @ts-expect-error Non-feature methods are also rejected at runtime. - assert.throws(() => registry.register(method, result => result), /not supported/); - } - }); - - test("rejects invalid callbacks and registration after extension disposal", () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - // @ts-expect-error Invalid JavaScript consumers are checked at runtime too. - assert.throws(() => registry.register("textDocument/hover", {}), /must be a function/); - registry.dispose(); - assert.throws(() => registry.register("textDocument/hover", result => result), /disposed/); - }); - - test("passes excluded requests through unchanged", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - registry.register("textDocument/hover", () => assert.fail("Excluded request intercepted")); - const original = { result: "unchanged" }; - const token = CancellationToken.None; - for (const method of ["initialize", "shutdown", "custom/projectInfo", "textDocument/didOpen", "textDocument/publishDiagnostics"]) { - assert.equal( - await registry.sendRequest(method, params, token, async (type, sentParams, sentToken) => { - assert.equal(type, method); - assert.equal(sentParams, params); - assert.equal(sentToken, token); - return original; - }), - original, - ); - } - }); - - test("handles protocol request signatures and preserves token identity", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - const token = CancellationToken.None; - registry.register("textDocument/hover", result => result && { ...result, contents: "transformed" }); - const result = await registry.sendRequest(HoverRequest.type, params, token, async (type, sentParams, sentToken) => { - assert.equal(type, HoverRequest.type); - assert.equal(sentParams, params); - assert.equal(sentToken, token); - return { contents: "server" }; - }); - assert.deepEqual(result, { contents: "transformed" }); - }); - - test("passes server failures through without invoking middleware or logging a transformer error", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Server errors are not transformer errors")); - registry.register("textDocument/hover", () => assert.fail("No successful result")); - const failure = new Error("Server failure"); - await assert.rejects( - registry.sendRequest("textDocument/hover", params, undefined, async () => { - throw failure; - }), - error => error === failure, - ); - }); - - test("preserves null and empty responses and permits intentional replacements", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - assert.equal(await registry.sendRequest("textDocument/hover", params, undefined, async () => null), null); - const empty: Diagnostic[] = []; - const original = { kind: "full", items: empty }; - assert.equal(await registry.sendRequest("textDocument/diagnostic", params, undefined, async () => original), original); - registry.register("textDocument/hover", result => result ?? { contents: "replacement" }); - assert.deepEqual(await registry.sendRequest("textDocument/hover", params, undefined, async () => null), { contents: "replacement" }); - registry.register("textDocument/diagnostic", result => { - if (result.kind === "full") assert.equal(result.items.length, 0); - return result; - }); - assert.deepEqual(await registry.sendRequest("textDocument/diagnostic", params, undefined, async () => original), original); - }); - - test("isolates mutable context copies between callbacks and from outgoing parameters", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - let firstContext: unknown; - registry.register("textDocument/hover", (result, context) => { - firstContext = context; - assert.equal(Object.isFrozen(context), false); - assert.equal(Object.isFrozen(context.params.textDocument), false); - // @ts-expect-error Deliberate runtime mutation of readonly request context. - context.params.textDocument.uri = "file:///modified.ts"; - // @ts-expect-error Nested context mutations must also remain isolated. - context.params.position.line = 42; - return result && { ...result, contents: "first" }; - }); - registry.register("textDocument/hover", async (result, context) => { - assert.notEqual(context, firstContext); - assert.deepEqual(context.params, params); - assert.equal(result?.contents, "first"); - // @ts-expect-error Deliberate mutation of this callback's independent copy. - context.params.textDocument.uri = "file:///second.ts"; - await Promise.resolve(); - return result; - }); - registry.register("textDocument/hover", (result, context) => { - assert.deepEqual(context.params, params); - return result; - }); - const original = { contents: "server" }; - assert.deepEqual(await registry.sendRequest("textDocument/hover", params, undefined, async () => original), { contents: "first" }); - assert.equal(params.textDocument.uri, "file:///test.ts"); - assert.equal(params.position.line, 0); - assert.deepEqual(original, { contents: "server" }); - }); - - test("captures registrations on response arrival, not request dispatch", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - const response = deferred(); - const running = registry.sendRequest("textDocument/hover", params, undefined, async () => { - await response.promise; - return { contents: "server" }; - }); - registry.register("textDocument/hover", () => ({ contents: "registered while waiting" })); - response.resolve(); - assert.deepEqual(await running, { contents: "registered while waiting" }); - }); - - test("skips remaining transformers when cancellation is requested", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - const source = new CancellationTokenSource(); - const original = { contents: "server" }; - registry.register("textDocument/hover", result => { - source.cancel(); - return result && { ...result, contents: "cancelled" }; - }); - registry.register("textDocument/hover", () => assert.fail("Cancelled chain must stop")); - assert.equal(await registry.sendRequest("textDocument/hover", params, source.token, async () => original), original); - assert.equal(await registry.sendRequest("textDocument/hover", params, source.token, async () => original), original); - source.dispose(); - }); - - test("logs failures, stops the chain, and restores pristine original data", async () => { - const errors: unknown[] = []; - const registry = new LspMiddlewareRegistry((method, error) => { - assert.equal(method, "textDocument/hover"); - errors.push(error); - }); - registry.register("textDocument/hover", result => { - if (result) result.contents = "mutated"; - return result; - }); - const failure = new Error("Transformer failed"); - registry.register("textDocument/hover", async () => { - throw failure; - }); - registry.register("textDocument/hover", () => assert.fail("Chain must stop")); - const original = { contents: "server" }; - assert.equal(await registry.sendRequest("textDocument/hover", params, undefined, async () => original), original); - assert.deepEqual(original, { contents: "server" }); - assert.deepEqual(errors, [failure]); - }); - - test("disposal is idempotent and affects future chains, not a running chain", async () => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - const gate = deferred(); - const started = deferred(); - registry.register("textDocument/hover", async result => { - started.resolve(); - await gate.promise; - return result; - }); - let calls = 0; - const disposable = registry.register("textDocument/hover", result => { - calls++; - return result; - }); - const running = registry.sendRequest("textDocument/hover", params, undefined, async () => null); - await started.promise; - disposable.dispose(); - disposable.dispose(); - gate.resolve(); - await running; - await registry.sendRequest("textDocument/hover", params, undefined, async () => null); - assert.equal(calls, 1); - }); -}); - -describe("first-party middleware", () => { - test("uses original parameters and results without cloning or freezing", async () => { - const request = { query: "symbol", local: () => "not cloneable" }; - const original = { local: () => "not cloneable" }; - const middleware: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { - assert.equal(sentParams, request); - assert.equal(Object.isFrozen(sentParams), false); - return next(type, sentParams, token); - }; - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [middleware]); - const result = await registry.sendRequest("workspace/symbol", request, CancellationToken.None, async (_type, sentParams, token) => { - assert.equal(sentParams, request); - assert.equal(token, CancellationToken.None); - return original; - }); - assert.equal(result, original); - assert.equal(Object.isFrozen(request), false); - }); - - test("supplies third-party callbacks with independent copies of first-party request changes", async () => { - const middleware: FirstPartyLspMiddleware = (type, sentParams, token, next) => - next( - type, - Object.assign({}, sentParams, { - textDocument: { uri: "file:///workspace.ts" }, - }), - token, - ); - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [middleware]); - const request = { query: "symbol" }; - let outgoing: unknown; - registry.register("workspace/symbol", (result, context) => { - assert.deepEqual(context.params, { query: "symbol", textDocument: { uri: "file:///workspace.ts" } }); - assert.notEqual(context.params, outgoing); - assert.equal(Object.isFrozen(context.params), false); - assert.equal(Object.isFrozen(context.params.textDocument), false); - return result; - }); - await registry.sendRequest("workspace/symbol", request, undefined, async (_type, sentParams) => { - outgoing = sentParams; - assert.equal(Object.isFrozen(sentParams), false); - return []; - }); - assert.deepEqual(request, { query: "symbol" }); - assert.equal(Object.isFrozen(outgoing), false); - }); - - test("runs first-party middleware around dispatch and third-party response transforms", async () => { - const order: string[] = []; - const first: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { - order.push("first request"); - const result = await next(type, sentParams, token); - order.push("first response"); - return result; - }; - const second: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { - order.push("second request"); - const result = await next(type, sentParams, token); - order.push("second response"); - return result; - }; - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [first, second]); - registry.register("textDocument/hover", result => { - order.push("third-party response"); - return result; - }); - await registry.sendRequest("textDocument/hover", params, undefined, async () => { - order.push("server"); - return null; - }); - assert.deepEqual(order, ["first request", "second request", "server", "third-party response", "second response", "first response"]); - }); - - test("propagates first-party failures without invoking third-party fallback", async () => { - const failure = new Error("First-party failure"); - const middleware: FirstPartyLspMiddleware = () => Promise.reject(failure); - const registry = new LspMiddlewareRegistry(() => assert.fail("Not a third-party failure"), [middleware]); - registry.register("textDocument/hover", () => assert.fail("No response")); - await assert.rejects(registry.sendRequest("textDocument/hover", params, undefined, async () => assert.fail("No dispatch")), error => error === failure); - }); -}); - -test("transforms real protocol responses and leaves push diagnostics untouched", async t => { - const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); - registry.register("textDocument/hover", result => result && { ...result, contents: "transformed hover" }); - const serverToClient = new PassThrough(); - const clientToServer = new PassThrough(); - const client = createProtocolConnection(serverToClient, clientToServer); - const server = createProtocolConnection(clientToServer, serverToClient); - t.after(() => { - client.dispose(); - server.dispose(); - serverToClient.destroy(); - clientToServer.destroy(); - }); - server.onRequest(HoverRequest.type, sentParams => { - assert.deepEqual(sentParams, params); - return { contents: "server hover" }; - }); - const original: PublishDiagnosticsParams = { - uri: params.textDocument.uri, - version: 1, - diagnostics: [{ - range: { start: { line: 0, character: 0 }, end: { line: 0, character: 1 } }, - message: "server diagnostic", - data: { preserved: true }, - }], - }; - const received = deferred(); - client.onNotification(PublishDiagnosticsNotification.type, diagnostics => { - assert.deepEqual(diagnostics, original); - received.resolve(); - }); - client.listen(); - server.listen(); - const result = await registry.sendRequest(HoverRequest.type, params, CancellationToken.None, (type, params, token) => client.sendRequest(typeof type === "string" ? type : type.method, params, token)); - assert.deepEqual(result, { contents: "transformed hover" }); - await server.sendNotification(PublishDiagnosticsNotification.type, original); - await received.promise; -}); - -function checkPublicTypes(api: ExtensionAPI): void { - api.registerLspMiddleware("textDocument/hover", (result, context) => { - // @ts-expect-error Request context cannot be mutated. - context.params.textDocument.uri = "file:///changed.ts"; - return result; - }); - // @ts-expect-error Push-diagnostic notifications cannot be intercepted. - api.registerLspMiddleware("textDocument/publishDiagnostics", result => result); - // @ts-expect-error Transformers must return the method's result type. - api.registerLspMiddleware("textDocument/hover", () => []); - // @ts-expect-error Lifecycle methods cannot be registered. - api.registerLspMiddleware("initialize", result => result); - api.registerLspMiddleware("textDocument/completion", (result, context) => { - const trigger: string | undefined = context.params.context?.triggerCharacter; - void trigger; - return result; - }); - api.registerLspMiddleware("custom/textDocument/multiDocumentHighlight", (result, context) => { - const files: readonly string[] = context.params.filesToSearch; - void files; - return result; - }); - api.registerLspMiddleware("workspace/symbol", (result, context) => { - const uri: string | undefined = context.params.textDocument?.uri; - void uri; - return result; - }); - api.registerLspMiddleware("completionItem/resolve", (result, context) => { - // @ts-expect-error Opaque protocol data must not bypass the readonly context contract. - context.params.data.property = "modified"; - return result; - }); -} -void checkPublicTypes; +import type { ExtensionAPI } from "@typescript/typescript/unstable/vscode"; +import assert from "node:assert/strict"; +import { PassThrough } from "node:stream"; +import test, { describe } from "node:test"; +import { + CancellationToken, + CancellationTokenSource, + createProtocolConnection, + type Diagnostic, + HoverRequest, + PublishDiagnosticsNotification, + type PublishDiagnosticsParams, +} from "vscode-languageserver-protocol/node"; +import { + type FirstPartyLspMiddleware, + LspMiddlewareRegistry, +} from "../src/lspMiddleware"; + +const params = { textDocument: { uri: "file:///test.ts" }, position: { line: 0, character: 0 } }; + +function deferred() { + let resolve!: () => void; + const promise = new Promise(resolver => { + resolve = resolver; + }); + return { promise, resolve }; +} + +describe("LSP middleware", () => { + test("transforms raw results in registration order without changing requests", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + registry.register("textDocument/hover", (result, context) => { + assert.deepEqual(context.params, params); + assert.notEqual(context.params, params); + assert.equal(Object.isFrozen(context.params.textDocument), false); + return result && { ...result, contents: "first" }; + }); + registry.register("textDocument/hover", async result => { + assert.equal(result?.contents, "first"); + return result && { ...result, contents: "second" }; + }); + const original = { contents: "server", canIncreaseVerbosity: true }; + let requests = 0; + const result = await registry.sendRequest("textDocument/hover", params, undefined, async (type, sentParams, token) => { + requests++; + assert.equal(type, "textDocument/hover"); + assert.equal(sentParams, params); + assert.equal(token, undefined); + return original; + }); + assert.equal(requests, 1); + assert.deepEqual(result, { contents: "second", canIncreaseVerbosity: true }); + assert.equal(original.contents, "server"); + }); + + test("rejects excluded methods at registration", () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + for ( + const method of [ + "initialize", + "shutdown", + "initialized", + "exit", + "textDocument/didOpen", + "textDocument/didChange", + "textDocument/publishDiagnostics", + "window/logMessage", + "window/showMessage", + "workspace/didChangeConfiguration", + "workspace/willRenameFiles", + "workspace/executeCommand", + "workspace/diagnostic/refresh", + "client/registerCapability", + "custom/initializeAPISession", + "custom/setContentMapperContributions", + "custom/runGC", + "custom/projectInfo", + "$/progress", + "unknown/feature", + "__proto__", + ] + ) { + // @ts-expect-error Non-feature methods are also rejected at runtime. + assert.throws(() => registry.register(method, result => result), /not supported/); + } + }); + + test("rejects invalid callbacks and registration after extension disposal", () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + // @ts-expect-error Invalid JavaScript consumers are checked at runtime too. + assert.throws(() => registry.register("textDocument/hover", {}), /must be a function/); + registry.dispose(); + assert.throws(() => registry.register("textDocument/hover", result => result), /disposed/); + }); + + test("passes excluded requests through unchanged", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + registry.register("textDocument/hover", () => assert.fail("Excluded request intercepted")); + const original = { result: "unchanged" }; + const token = CancellationToken.None; + for (const method of ["initialize", "shutdown", "custom/projectInfo", "textDocument/didOpen", "textDocument/publishDiagnostics"]) { + assert.equal( + await registry.sendRequest(method, params, token, async (type, sentParams, sentToken) => { + assert.equal(type, method); + assert.equal(sentParams, params); + assert.equal(sentToken, token); + return original; + }), + original, + ); + } + }); + + test("handles protocol request signatures and preserves token identity", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + const token = CancellationToken.None; + registry.register("textDocument/hover", result => result && { ...result, contents: "transformed" }); + const result = await registry.sendRequest(HoverRequest.type, params, token, async (type, sentParams, sentToken) => { + assert.equal(type, HoverRequest.type); + assert.equal(sentParams, params); + assert.equal(sentToken, token); + return { contents: "server" }; + }); + assert.deepEqual(result, { contents: "transformed" }); + }); + + test("passes server failures through without invoking middleware or logging a transformer error", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Server errors are not transformer errors")); + registry.register("textDocument/hover", () => assert.fail("No successful result")); + const failure = new Error("Server failure"); + await assert.rejects( + registry.sendRequest("textDocument/hover", params, undefined, async () => { + throw failure; + }), + error => error === failure, + ); + }); + + test("preserves null and empty responses and permits intentional replacements", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + assert.equal(await registry.sendRequest("textDocument/hover", params, undefined, async () => null), null); + const empty: Diagnostic[] = []; + const original = { kind: "full", items: empty }; + assert.equal(await registry.sendRequest("textDocument/diagnostic", params, undefined, async () => original), original); + registry.register("textDocument/hover", result => result ?? { contents: "replacement" }); + assert.deepEqual(await registry.sendRequest("textDocument/hover", params, undefined, async () => null), { contents: "replacement" }); + registry.register("textDocument/diagnostic", result => { + if (result.kind === "full") assert.equal(result.items.length, 0); + return result; + }); + assert.deepEqual(await registry.sendRequest("textDocument/diagnostic", params, undefined, async () => original), original); + }); + + test("isolates mutable context copies between callbacks and from outgoing parameters", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + let firstContext: unknown; + registry.register("textDocument/hover", (result, context) => { + firstContext = context; + assert.equal(Object.isFrozen(context), false); + assert.equal(Object.isFrozen(context.params.textDocument), false); + // @ts-expect-error Deliberate runtime mutation of readonly request context. + context.params.textDocument.uri = "file:///modified.ts"; + // @ts-expect-error Nested context mutations must also remain isolated. + context.params.position.line = 42; + return result && { ...result, contents: "first" }; + }); + registry.register("textDocument/hover", async (result, context) => { + assert.notEqual(context, firstContext); + assert.deepEqual(context.params, params); + assert.equal(result?.contents, "first"); + // @ts-expect-error Deliberate mutation of this callback's independent copy. + context.params.textDocument.uri = "file:///second.ts"; + await Promise.resolve(); + return result; + }); + registry.register("textDocument/hover", (result, context) => { + assert.deepEqual(context.params, params); + return result; + }); + const original = { contents: "server" }; + assert.deepEqual(await registry.sendRequest("textDocument/hover", params, undefined, async () => original), { contents: "first" }); + assert.equal(params.textDocument.uri, "file:///test.ts"); + assert.equal(params.position.line, 0); + assert.deepEqual(original, { contents: "server" }); + }); + + test("captures registrations on response arrival, not request dispatch", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + const response = deferred(); + const running = registry.sendRequest("textDocument/hover", params, undefined, async () => { + await response.promise; + return { contents: "server" }; + }); + registry.register("textDocument/hover", () => ({ contents: "registered while waiting" })); + response.resolve(); + assert.deepEqual(await running, { contents: "registered while waiting" }); + }); + + test("skips remaining transformers when cancellation is requested", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + const source = new CancellationTokenSource(); + const original = { contents: "server" }; + registry.register("textDocument/hover", result => { + source.cancel(); + return result && { ...result, contents: "cancelled" }; + }); + registry.register("textDocument/hover", () => assert.fail("Cancelled chain must stop")); + assert.equal(await registry.sendRequest("textDocument/hover", params, source.token, async () => original), original); + assert.equal(await registry.sendRequest("textDocument/hover", params, source.token, async () => original), original); + source.dispose(); + }); + + test("logs failures, stops the chain, and restores pristine original data", async () => { + const errors: unknown[] = []; + const registry = new LspMiddlewareRegistry((method, error) => { + assert.equal(method, "textDocument/hover"); + errors.push(error); + }); + registry.register("textDocument/hover", result => { + if (result) result.contents = "mutated"; + return result; + }); + const failure = new Error("Transformer failed"); + registry.register("textDocument/hover", async () => { + throw failure; + }); + registry.register("textDocument/hover", () => assert.fail("Chain must stop")); + const original = { contents: "server" }; + assert.equal(await registry.sendRequest("textDocument/hover", params, undefined, async () => original), original); + assert.deepEqual(original, { contents: "server" }); + assert.deepEqual(errors, [failure]); + }); + + test("disposal is idempotent and affects future chains, not a running chain", async () => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + const gate = deferred(); + const started = deferred(); + registry.register("textDocument/hover", async result => { + started.resolve(); + await gate.promise; + return result; + }); + let calls = 0; + const disposable = registry.register("textDocument/hover", result => { + calls++; + return result; + }); + const running = registry.sendRequest("textDocument/hover", params, undefined, async () => null); + await started.promise; + disposable.dispose(); + disposable.dispose(); + gate.resolve(); + await running; + await registry.sendRequest("textDocument/hover", params, undefined, async () => null); + assert.equal(calls, 1); + }); +}); + +describe("first-party middleware", () => { + test("uses original parameters and results without cloning or freezing", async () => { + const request = { query: "symbol", local: () => "not cloneable" }; + const original = { local: () => "not cloneable" }; + const middleware: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { + assert.equal(sentParams, request); + assert.equal(Object.isFrozen(sentParams), false); + return next(type, sentParams, token); + }; + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [middleware]); + const result = await registry.sendRequest("workspace/symbol", request, CancellationToken.None, async (_type, sentParams, token) => { + assert.equal(sentParams, request); + assert.equal(token, CancellationToken.None); + return original; + }); + assert.equal(result, original); + assert.equal(Object.isFrozen(request), false); + }); + + test("supplies third-party callbacks with independent copies of first-party request changes", async () => { + const middleware: FirstPartyLspMiddleware = (type, sentParams, token, next) => + next( + type, + Object.assign({}, sentParams, { + textDocument: { uri: "file:///workspace.ts" }, + }), + token, + ); + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [middleware]); + const request = { query: "symbol" }; + let outgoing: unknown; + registry.register("workspace/symbol", (result, context) => { + assert.deepEqual(context.params, { query: "symbol", textDocument: { uri: "file:///workspace.ts" } }); + assert.notEqual(context.params, outgoing); + assert.equal(Object.isFrozen(context.params), false); + assert.equal(Object.isFrozen(context.params.textDocument), false); + return result; + }); + await registry.sendRequest("workspace/symbol", request, undefined, async (_type, sentParams) => { + outgoing = sentParams; + assert.equal(Object.isFrozen(sentParams), false); + return []; + }); + assert.deepEqual(request, { query: "symbol" }); + assert.equal(Object.isFrozen(outgoing), false); + }); + + test("runs first-party middleware around dispatch and third-party response transforms", async () => { + const order: string[] = []; + const first: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { + order.push("first request"); + const result = await next(type, sentParams, token); + order.push("first response"); + return result; + }; + const second: FirstPartyLspMiddleware = async (type, sentParams, token, next) => { + order.push("second request"); + const result = await next(type, sentParams, token); + order.push("second response"); + return result; + }; + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error"), [first, second]); + registry.register("textDocument/hover", result => { + order.push("third-party response"); + return result; + }); + await registry.sendRequest("textDocument/hover", params, undefined, async () => { + order.push("server"); + return null; + }); + assert.deepEqual(order, ["first request", "second request", "server", "third-party response", "second response", "first response"]); + }); + + test("propagates first-party failures without invoking third-party fallback", async () => { + const failure = new Error("First-party failure"); + const middleware: FirstPartyLspMiddleware = () => Promise.reject(failure); + const registry = new LspMiddlewareRegistry(() => assert.fail("Not a third-party failure"), [middleware]); + registry.register("textDocument/hover", () => assert.fail("No response")); + await assert.rejects(registry.sendRequest("textDocument/hover", params, undefined, async () => assert.fail("No dispatch")), error => error === failure); + }); +}); + +test("transforms real protocol responses and leaves push diagnostics untouched", async t => { + const registry = new LspMiddlewareRegistry(() => assert.fail("Unexpected error")); + registry.register("textDocument/hover", result => result && { ...result, contents: "transformed hover" }); + const serverToClient = new PassThrough(); + const clientToServer = new PassThrough(); + const client = createProtocolConnection(serverToClient, clientToServer); + const server = createProtocolConnection(clientToServer, serverToClient); + t.after(() => { + client.dispose(); + server.dispose(); + serverToClient.destroy(); + clientToServer.destroy(); + }); + server.onRequest(HoverRequest.type, sentParams => { + assert.deepEqual(sentParams, params); + return { contents: "server hover" }; + }); + const original: PublishDiagnosticsParams = { + uri: params.textDocument.uri, + version: 1, + diagnostics: [{ + range: { start: { line: 0, character: 0 }, end: { line: 0, character: 1 } }, + message: "server diagnostic", + data: { preserved: true }, + }], + }; + const received = deferred(); + client.onNotification(PublishDiagnosticsNotification.type, diagnostics => { + assert.deepEqual(diagnostics, original); + received.resolve(); + }); + client.listen(); + server.listen(); + const result = await registry.sendRequest(HoverRequest.type, params, CancellationToken.None, (type, params, token) => client.sendRequest(typeof type === "string" ? type : type.method, params, token)); + assert.deepEqual(result, { contents: "transformed hover" }); + await server.sendNotification(PublishDiagnosticsNotification.type, original); + await received.promise; +}); + +function checkPublicTypes(api: ExtensionAPI): void { + api.registerLspMiddleware("textDocument/hover", (result, context) => { + // @ts-expect-error Request context cannot be mutated. + context.params.textDocument.uri = "file:///changed.ts"; + return result; + }); + // @ts-expect-error Push-diagnostic notifications cannot be intercepted. + api.registerLspMiddleware("textDocument/publishDiagnostics", result => result); + // @ts-expect-error Transformers must return the method's result type. + api.registerLspMiddleware("textDocument/hover", () => []); + // @ts-expect-error Lifecycle methods cannot be registered. + api.registerLspMiddleware("initialize", result => result); + api.registerLspMiddleware("textDocument/completion", (result, context) => { + const trigger: string | undefined = context.params.context?.triggerCharacter; + void trigger; + return result; + }); + api.registerLspMiddleware("custom/textDocument/multiDocumentHighlight", (result, context) => { + const files: readonly string[] = context.params.filesToSearch; + void files; + return result; + }); + api.registerLspMiddleware("workspace/symbol", (result, context) => { + const uri: string | undefined = context.params.textDocument?.uri; + void uri; + return result; + }); + api.registerLspMiddleware("completionItem/resolve", (result, context) => { + // @ts-expect-error Opaque protocol data must not bypass the readonly context contract. + context.params.data.property = "modified"; + return result; + }); +} +void checkPublicTypes; diff --git a/packages/vscode-typescript/test/tsdkPackage.test.ts b/packages/vscode-typescript/test/tsdkPackage.test.ts index 5a96fa1246110..59180e1273c1b 100644 --- a/packages/vscode-typescript/test/tsdkPackage.test.ts +++ b/packages/vscode-typescript/test/tsdkPackage.test.ts @@ -1,129 +1,129 @@ -import assert from "node:assert/strict"; -import fs from "node:fs"; -import os from "node:os"; -import path from "node:path"; -import test, { describe } from "node:test"; -import { resolvePackageExecutable } from "../src/tsdkPackage"; - -const platformPackage = `typescript-${process.platform}-${process.arch}`; -const exeSuffix = process.platform === "win32" ? ".exe" : ""; -const exeName = `tsc${exeSuffix}`; -const nativeExeName = `tsgo${exeSuffix}`; - -function createPackage(root: string, relativePath: string): string { - const packagePath = path.join(root, relativePath); - fs.mkdirSync(packagePath, { recursive: true }); - const packageJsonPath = path.join(packagePath, "package.json"); - fs.writeFileSync(packageJsonPath, "{}"); - return packageJsonPath; -} - -function linkPackage(root: string, relativePath: string, targetPackageJson: string): void { - const packagePath = path.join(root, relativePath); - fs.mkdirSync(path.dirname(packagePath), { recursive: true }); - fs.symlinkSync( - path.dirname(targetPackageJson), - packagePath, - process.platform === "win32" ? "junction" : "dir", - ); -} - -function createFixture(t: test.TestContext): string { - const root = fs.mkdtempSync(path.join(os.tmpdir(), "tsdk-package-")); - t.after(() => fs.rmSync(root, { recursive: true, force: true })); - return fs.realpathSync(root); -} - -interface ResolutionCase { - packagePath: string; - platformPath: string; - dependencyLink?: string; - platformPackage?: string; - exeName?: string; -} - -function testResolution(name: string, resolutionCase: ResolutionCase): void { - test(name, t => { - const root = createFixture(t); - const packageJsonPath = createPackage(root, resolutionCase.packagePath); - const platformPackageJson = createPackage(root, resolutionCase.platformPath); - if (resolutionCase.dependencyLink) { - linkPackage(root, resolutionCase.dependencyLink, platformPackageJson); - } - - const resolvedExeName = resolutionCase.exeName ?? exeName; - assert.equal( - resolvePackageExecutable(packageJsonPath, resolutionCase.platformPackage ?? platformPackage, resolvedExeName), - path.join(path.dirname(platformPackageJson), "lib", resolvedExeName), - ); - }); -} - -describe("tsdk package resolution", { concurrency: true }, () => { - testResolution("resolves the TypeScript 7 package", { - packagePath: "node_modules/typescript", - platformPath: `node_modules/@typescript/${platformPackage}`, - }); - - testResolution("resolves the TypeScript 7 scoped alias recommended in the 7.0 release post", { - packagePath: "node_modules/@typescript/native", - platformPath: `node_modules/@typescript/${platformPackage}`, - }); - - testResolution("resolves an unscoped TypeScript 7 alias", { - packagePath: "node_modules/typescript-next", - platformPath: `node_modules/@typescript/${platformPackage}`, - }); - - const nativePlatformPackage = `native-preview-${process.platform}-${process.arch}`; - testResolution("resolves the native-preview package", { - packagePath: "node_modules/@typescript/typescript", - platformPath: `node_modules/@typescript/${nativePlatformPackage}`, - platformPackage: nativePlatformPackage, - exeName: nativeExeName, - }); - - testResolution("resolves a non-hoisted platform package", { - packagePath: "node_modules/@typescript/native", - platformPath: `node_modules/@typescript/native/node_modules/@typescript/${platformPackage}`, - }); - - testResolution("resolves a platform package hoisted above a workspace", { - packagePath: "packages/app/node_modules/@typescript/native", - platformPath: `node_modules/@typescript/${platformPackage}`, - }); - - const pnpmStore = "node_modules/.pnpm/typescript@7.0.2/node_modules"; - testResolution("resolves a pnpm virtual-store package", { - packagePath: `${pnpmStore}/typescript`, - platformPath: `node_modules/.pnpm/@typescript+${platformPackage}@7.0.2/node_modules/@typescript/${platformPackage}`, - dependencyLink: `${pnpmStore}/@typescript/${platformPackage}`, - }); - - const nativePreviewVersion = "7.0.0-dev.20260707.2"; - const pnpmNativePreviewStore = `node_modules/.pnpm/@typescript+native-preview@${nativePreviewVersion}/node_modules`; - testResolution("resolves a pnpm native-preview virtual-store package", { - packagePath: `${pnpmNativePreviewStore}/@typescript/typescript`, - platformPath: `node_modules/.pnpm/@typescript+${nativePlatformPackage}@${nativePreviewVersion}/node_modules/@typescript/${nativePlatformPackage}`, - dependencyLink: `${pnpmNativePreviewStore}/@typescript/${nativePlatformPackage}`, - platformPackage: nativePlatformPackage, - exeName: nativeExeName, - }); - - const npmStore = "node_modules/.store/typescript@7.0.2-hash/node_modules"; - testResolution("resolves an npm linked-store package", { - packagePath: `${npmStore}/typescript`, - platformPath: `node_modules/.store/@typescript+${platformPackage}@7.0.2-hash/node_modules/@typescript/${platformPackage}`, - dependencyLink: `${npmStore}/@typescript/${platformPackage}`, - }); - - test("throws when the platform package is missing", t => { - const root = createFixture(t); - const packageJsonPath = createPackage(root, "node_modules/@typescript/native"); - - assert.throws( - () => resolvePackageExecutable(packageJsonPath, platformPackage, exeName), - { code: "MODULE_NOT_FOUND" }, - ); - }); -}); +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test, { describe } from "node:test"; +import { resolvePackageExecutable } from "../src/tsdkPackage"; + +const platformPackage = `typescript-${process.platform}-${process.arch}`; +const exeSuffix = process.platform === "win32" ? ".exe" : ""; +const exeName = `tsc${exeSuffix}`; +const nativeExeName = `tsgo${exeSuffix}`; + +function createPackage(root: string, relativePath: string): string { + const packagePath = path.join(root, relativePath); + fs.mkdirSync(packagePath, { recursive: true }); + const packageJsonPath = path.join(packagePath, "package.json"); + fs.writeFileSync(packageJsonPath, "{}"); + return packageJsonPath; +} + +function linkPackage(root: string, relativePath: string, targetPackageJson: string): void { + const packagePath = path.join(root, relativePath); + fs.mkdirSync(path.dirname(packagePath), { recursive: true }); + fs.symlinkSync( + path.dirname(targetPackageJson), + packagePath, + process.platform === "win32" ? "junction" : "dir", + ); +} + +function createFixture(t: test.TestContext): string { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "tsdk-package-")); + t.after(() => fs.rmSync(root, { recursive: true, force: true })); + return fs.realpathSync(root); +} + +interface ResolutionCase { + packagePath: string; + platformPath: string; + dependencyLink?: string; + platformPackage?: string; + exeName?: string; +} + +function testResolution(name: string, resolutionCase: ResolutionCase): void { + test(name, t => { + const root = createFixture(t); + const packageJsonPath = createPackage(root, resolutionCase.packagePath); + const platformPackageJson = createPackage(root, resolutionCase.platformPath); + if (resolutionCase.dependencyLink) { + linkPackage(root, resolutionCase.dependencyLink, platformPackageJson); + } + + const resolvedExeName = resolutionCase.exeName ?? exeName; + assert.equal( + resolvePackageExecutable(packageJsonPath, resolutionCase.platformPackage ?? platformPackage, resolvedExeName), + path.join(path.dirname(platformPackageJson), "lib", resolvedExeName), + ); + }); +} + +describe("tsdk package resolution", { concurrency: true }, () => { + testResolution("resolves the TypeScript 7 package", { + packagePath: "node_modules/typescript", + platformPath: `node_modules/@typescript/${platformPackage}`, + }); + + testResolution("resolves the TypeScript 7 scoped alias recommended in the 7.0 release post", { + packagePath: "node_modules/@typescript/native", + platformPath: `node_modules/@typescript/${platformPackage}`, + }); + + testResolution("resolves an unscoped TypeScript 7 alias", { + packagePath: "node_modules/typescript-next", + platformPath: `node_modules/@typescript/${platformPackage}`, + }); + + const nativePlatformPackage = `native-preview-${process.platform}-${process.arch}`; + testResolution("resolves the native-preview package", { + packagePath: "node_modules/@typescript/typescript", + platformPath: `node_modules/@typescript/${nativePlatformPackage}`, + platformPackage: nativePlatformPackage, + exeName: nativeExeName, + }); + + testResolution("resolves a non-hoisted platform package", { + packagePath: "node_modules/@typescript/native", + platformPath: `node_modules/@typescript/native/node_modules/@typescript/${platformPackage}`, + }); + + testResolution("resolves a platform package hoisted above a workspace", { + packagePath: "packages/app/node_modules/@typescript/native", + platformPath: `node_modules/@typescript/${platformPackage}`, + }); + + const pnpmStore = "node_modules/.pnpm/typescript@7.0.2/node_modules"; + testResolution("resolves a pnpm virtual-store package", { + packagePath: `${pnpmStore}/typescript`, + platformPath: `node_modules/.pnpm/@typescript+${platformPackage}@7.0.2/node_modules/@typescript/${platformPackage}`, + dependencyLink: `${pnpmStore}/@typescript/${platformPackage}`, + }); + + const nativePreviewVersion = "7.0.0-dev.20260707.2"; + const pnpmNativePreviewStore = `node_modules/.pnpm/@typescript+native-preview@${nativePreviewVersion}/node_modules`; + testResolution("resolves a pnpm native-preview virtual-store package", { + packagePath: `${pnpmNativePreviewStore}/@typescript/typescript`, + platformPath: `node_modules/.pnpm/@typescript+${nativePlatformPackage}@${nativePreviewVersion}/node_modules/@typescript/${nativePlatformPackage}`, + dependencyLink: `${pnpmNativePreviewStore}/@typescript/${nativePlatformPackage}`, + platformPackage: nativePlatformPackage, + exeName: nativeExeName, + }); + + const npmStore = "node_modules/.store/typescript@7.0.2-hash/node_modules"; + testResolution("resolves an npm linked-store package", { + packagePath: `${npmStore}/typescript`, + platformPath: `node_modules/.store/@typescript+${platformPackage}@7.0.2-hash/node_modules/@typescript/${platformPackage}`, + dependencyLink: `${npmStore}/@typescript/${platformPackage}`, + }); + + test("throws when the platform package is missing", t => { + const root = createFixture(t); + const packageJsonPath = createPackage(root, "node_modules/@typescript/native"); + + assert.throws( + () => resolvePackageExecutable(packageJsonPath, platformPackage, exeName), + { code: "MODULE_NOT_FOUND" }, + ); + }); +}); diff --git a/tools/LICENSE b/tools/LICENSE index 8746124b27791..edc24fd6e1409 100644 --- a/tools/LICENSE +++ b/tools/LICENSE @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/tools/cmd/import-localization/main.go b/tools/cmd/import-localization/main.go index 93fc1fdb8cb5b..349d3e229ef4d 100644 --- a/tools/cmd/import-localization/main.go +++ b/tools/cmd/import-localization/main.go @@ -94,7 +94,7 @@ func importLocalization(sourcePath string, handbackPath string, outputPath strin if err != nil { return fmt.Errorf("encode %s: %w", outputPath, err) } - data = bytes.ReplaceAll(data, []byte("\n"), []byte("\r\n")) + data = append(data, '\n') if err := os.MkdirAll(filepath.Dir(outputPath), 0o755); err != nil { return err } diff --git a/tools/cmd/import-localization/main_test.go b/tools/cmd/import-localization/main_test.go index 3444dcc0a1950..9df023f6520ca 100644 --- a/tools/cmd/import-localization/main_test.go +++ b/tools/cmd/import-localization/main_test.go @@ -54,13 +54,13 @@ func TestImportLocalization(t *testing.T) { assert.NilError(t, importLocalization(source, handback, output)) data, err := os.ReadFile(output) assert.NilError(t, err) - assert.Equal(t, string(data), "{\r\n"+ - " \"ExistingOnly\": \"Keep this translation.\",\r\n"+ - " \"SameAsEnglish\": \"English.\",\r\n"+ - " \"StaleEnglish\": \"기존 번역\",\r\n"+ - " \"Translated\": \"새 번역]\",\r\n"+ - " \"Updated\": \"이전 번역\"\r\n"+ - "}") + assert.Equal(t, string(data), "{\n"+ + " \"ExistingOnly\": \"Keep this translation.\",\n"+ + " \"SameAsEnglish\": \"English.\",\n"+ + " \"StaleEnglish\": \"기존 번역\",\n"+ + " \"Translated\": \"새 번역]\",\n"+ + " \"Updated\": \"이전 번역\"\n"+ + "}\n") assert.NilError(t, importLocalization(source, handback, output)) again, err := os.ReadFile(output) assert.NilError(t, err) diff --git a/tools/scripts/configure-release.mjs b/tools/scripts/configure-release.mjs index c839f517ca18a..76460752183b8 100644 --- a/tools/scripts/configure-release.mjs +++ b/tools/scripts/configure-release.mjs @@ -1,60 +1,60 @@ -import fs from "node:fs"; - -const numericIdentifier = String.raw`(?:0|[1-9]\d*)`; -const releaseVersionPattern = new RegExp( - String.raw`^(${numericIdentifier})\.(${numericIdentifier})\.(${numericIdentifier})(?:-(beta|rc))?$`, -); -const maxUint32 = 0xffff_ffffn; - -const [version, expectedMajorMinor] = process.argv.slice(2); - -if (!version || !isReleaseVersion(version)) { - throw new Error( - "Usage: node tools/scripts/configure-release.mjs = 2)> [expected-major.minor]", - ); -} - -const majorMinor = version.split(".", 2).join("."); -if (expectedMajorMinor && expectedMajorMinor !== majorMinor) { - throw new Error(`Version ${version} has major.minor ${majorMinor}, not ${expectedMajorMinor}`); -} - -updateFile( - "tsc/internal/core/version.go", - /var version = "[^"]+"/g, - `var version = "${version}"`, -); -updateFile( - "Herebyfile.mjs", - /const nativePreviewReleaseVersion = \/\*\* @type \{string \| undefined\} \*\/ \([^)]*\);/g, - `const nativePreviewReleaseVersion = /** @type {string | undefined} */ ("${version}");`, -); - -/** - * @param {string} value - */ -function isReleaseVersion(value) { - const match = releaseVersionPattern.exec(value); - if (match === null || !match.slice(1, 4).every(component => BigInt(component) <= maxUint32)) { - return false; - } - - const patch = BigInt(match[3]); - switch (match[4]) { - case "beta": - return patch === 0n; - case "rc": - return patch === 1n; - default: - return patch >= 2n; - } -} - -function updateFile(path, pattern, replacement) { - const source = fs.readFileSync(path, "utf8"); - const matches = source.match(pattern); - if (matches?.length !== 1) { - throw new Error(`Expected exactly one release version declaration in ${path}, found ${matches?.length ?? 0}`); - } - fs.writeFileSync(path, source.replace(pattern, replacement)); -} +import fs from "node:fs"; + +const numericIdentifier = String.raw`(?:0|[1-9]\d*)`; +const releaseVersionPattern = new RegExp( + String.raw`^(${numericIdentifier})\.(${numericIdentifier})\.(${numericIdentifier})(?:-(beta|rc))?$`, +); +const maxUint32 = 0xffff_ffffn; + +const [version, expectedMajorMinor] = process.argv.slice(2); + +if (!version || !isReleaseVersion(version)) { + throw new Error( + "Usage: node tools/scripts/configure-release.mjs = 2)> [expected-major.minor]", + ); +} + +const majorMinor = version.split(".", 2).join("."); +if (expectedMajorMinor && expectedMajorMinor !== majorMinor) { + throw new Error(`Version ${version} has major.minor ${majorMinor}, not ${expectedMajorMinor}`); +} + +updateFile( + "tsc/internal/core/version.go", + /var version = "[^"]+"/g, + `var version = "${version}"`, +); +updateFile( + "Herebyfile.mjs", + /const nativePreviewReleaseVersion = \/\*\* @type \{string \| undefined\} \*\/ \([^)]*\);/g, + `const nativePreviewReleaseVersion = /** @type {string | undefined} */ ("${version}");`, +); + +/** + * @param {string} value + */ +function isReleaseVersion(value) { + const match = releaseVersionPattern.exec(value); + if (match === null || !match.slice(1, 4).every(component => BigInt(component) <= maxUint32)) { + return false; + } + + const patch = BigInt(match[3]); + switch (match[4]) { + case "beta": + return patch === 0n; + case "rc": + return patch === 1n; + default: + return patch >= 2n; + } +} + +function updateFile(path, pattern, replacement) { + const source = fs.readFileSync(path, "utf8"); + const matches = source.match(pattern); + if (matches?.length !== 1) { + throw new Error(`Expected exactly one release version declaration in ${path}, found ${matches?.length ?? 0}`); + } + fs.writeFileSync(path, source.replace(pattern, replacement)); +} diff --git a/tools/scripts/gen/cache.mts b/tools/scripts/gen/cache.mts index 99b9e6e3efb1f..e9a4522a184fe 100644 --- a/tools/scripts/gen/cache.mts +++ b/tools/scripts/gen/cache.mts @@ -1,102 +1,102 @@ -import { createHash } from "node:crypto"; -import * as fs from "node:fs"; -import path from "node:path"; -import { GeneratedFile } from "./generatedFile.mts"; -import { - formatCommandArg, - getFileFingerprint, - goInputs, - repoRoot, - run, -} from "./utils.mts"; - -export interface CacheOptions { - inputs: string[]; - outputs: string[]; - commands: string[][]; - cwd?: string; - exclude?: string[]; - envInputs?: string[]; - env?: NodeJS.ProcessEnv; - force?: boolean; -} - -function expand(patterns: string[], cwd: string, exclude: string[] = []) { - return [...new Set(fs.globSync(patterns, { cwd, exclude }).map(file => path.resolve(cwd, file)))].sort(); -} - -export default async function cache({ - inputs, - outputs, - commands, - cwd = process.cwd(), - exclude = [], - envInputs = ["GOOS", "GOARCH", "GOFLAGS", "GOTOOLCHAIN", "GOEXPERIMENT", "CGO_ENABLED", "GOWORK"], - env, - force = false, -}: CacheOptions): Promise { - if (!outputs.length || !commands.length || commands.some(command => !command.length)) { - throw new Error("Cached generation requires outputs and nonempty commands."); - } - cwd = path.resolve(cwd); - const environment = { ...process.env, ...env }; - const snapshotInputs = (fresh = false) => { - const entries = [ - ...new Set([ - import.meta.filename, - path.join(import.meta.dirname, "generatedFile.mts"), - path.join(repoRoot, "package-lock.json"), - path.join(repoRoot, ".dprint.jsonc"), - ...goInputs(), - ...inputs.flatMap(pattern => { - const matches = expand([pattern], cwd, exclude); - if (!matches.length) throw new Error(`No inputs matched: ${pattern}`); - return matches; - }), - ]), - ].sort(); - const files: string[] = []; - const hash = createHash("sha256"); - for (const file of entries) { - if (fs.statSync(file).isDirectory()) { - hash.update(JSON.stringify([file, "directory"])); - } - else { - files.push(file); - hash.update(JSON.stringify([file, getFileFingerprint(file, fresh)])); - } - } - return { files, hash: hash.digest("hex") }; - }; - const before = snapshotInputs(); - const outputFiles = () => expand(outputs, cwd).filter(file => fs.statSync(file).isFile()); - const artifacts = (files: string[]) => - files.map(file => - new GeneratedFile(file, before.files, undefined, { - cwd, - commands, - inputs, - outputs, - exclude, - inputHash: before.hash, - outputFiles: files, - environment: envInputs.map(name => [name, environment[name]]), - }) - ); - const previous = artifacts(outputFiles()); - const complete = () => outputs.every(pattern => expand([pattern], cwd).some(file => fs.statSync(file).isFile())); - const commandText = commands.map(command => command.map(formatCommandArg).join(" ")).join("; "); - if (complete() && previous.every(file => file.isCurrent(force))) { - console.log(`skipped ${commandText}: codegen outputs are already up to date`); - return true; - } - for (const file of previous) file.invalidate(); - for (const [command, ...args] of commands) { - await run(command, args, { cwd, env: environment }); - } - if (!complete()) throw new Error(`Generation did not produce all declared outputs: ${outputs.join(", ")}`); - if (snapshotInputs(true).hash === before.hash) { - for (const file of artifacts(outputFiles())) file.markCurrent(); - } - return false; -} +import { createHash } from "node:crypto"; +import * as fs from "node:fs"; +import path from "node:path"; +import { GeneratedFile } from "./generatedFile.mts"; +import { + formatCommandArg, + getFileFingerprint, + goInputs, + repoRoot, + run, +} from "./utils.mts"; + +export interface CacheOptions { + inputs: string[]; + outputs: string[]; + commands: string[][]; + cwd?: string; + exclude?: string[]; + envInputs?: string[]; + env?: NodeJS.ProcessEnv; + force?: boolean; +} + +function expand(patterns: string[], cwd: string, exclude: string[] = []) { + return [...new Set(fs.globSync(patterns, { cwd, exclude }).map(file => path.resolve(cwd, file)))].sort(); +} + +export default async function cache({ + inputs, + outputs, + commands, + cwd = process.cwd(), + exclude = [], + envInputs = ["GOOS", "GOARCH", "GOFLAGS", "GOTOOLCHAIN", "GOEXPERIMENT", "CGO_ENABLED", "GOWORK"], + env, + force = false, +}: CacheOptions): Promise { + if (!outputs.length || !commands.length || commands.some(command => !command.length)) { + throw new Error("Cached generation requires outputs and nonempty commands."); + } + cwd = path.resolve(cwd); + const environment = { ...process.env, ...env }; + const snapshotInputs = (fresh = false) => { + const entries = [ + ...new Set([ + import.meta.filename, + path.join(import.meta.dirname, "generatedFile.mts"), + path.join(repoRoot, "package-lock.json"), + path.join(repoRoot, ".dprint.jsonc"), + ...goInputs(), + ...inputs.flatMap(pattern => { + const matches = expand([pattern], cwd, exclude); + if (!matches.length) throw new Error(`No inputs matched: ${pattern}`); + return matches; + }), + ]), + ].sort(); + const files: string[] = []; + const hash = createHash("sha256"); + for (const file of entries) { + if (fs.statSync(file).isDirectory()) { + hash.update(JSON.stringify([file, "directory"])); + } + else { + files.push(file); + hash.update(JSON.stringify([file, getFileFingerprint(file, fresh)])); + } + } + return { files, hash: hash.digest("hex") }; + }; + const before = snapshotInputs(); + const outputFiles = () => expand(outputs, cwd).filter(file => fs.statSync(file).isFile()); + const artifacts = (files: string[]) => + files.map(file => + new GeneratedFile(file, before.files, undefined, { + cwd, + commands, + inputs, + outputs, + exclude, + inputHash: before.hash, + outputFiles: files, + environment: envInputs.map(name => [name, environment[name]]), + }) + ); + const previous = artifacts(outputFiles()); + const complete = () => outputs.every(pattern => expand([pattern], cwd).some(file => fs.statSync(file).isFile())); + const commandText = commands.map(command => command.map(formatCommandArg).join(" ")).join("; "); + if (complete() && previous.every(file => file.isCurrent(force))) { + console.log(`skipped ${commandText}: codegen outputs are already up to date`); + return true; + } + for (const file of previous) file.invalidate(); + for (const [command, ...args] of commands) { + await run(command, args, { cwd, env: environment }); + } + if (!complete()) throw new Error(`Generation did not produce all declared outputs: ${outputs.join(", ")}`); + if (snapshotInputs(true).hash === before.hash) { + for (const file of artifacts(outputFiles())) file.markCurrent(); + } + return false; +} diff --git a/tools/scripts/gen/cache.test.mts b/tools/scripts/gen/cache.test.mts index aeb4445078a4f..d1b81613ccd56 100644 --- a/tools/scripts/gen/cache.test.mts +++ b/tools/scripts/gen/cache.test.mts @@ -1,152 +1,152 @@ -import assert from "node:assert/strict"; -import * as fs from "node:fs"; -import os from "node:os"; -import path from "node:path"; -import { test } from "node:test"; -import cache from "./cache.mts"; - -test("cache commands use and track an explicit environment without changing the parent", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-env-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const parentValue = process.env.GOFILE; - const options = { - cwd: directory, - inputs: [], - outputs: ["output.json"], - envInputs: ["GOFILE", "GOPACKAGE"], - env: { GOFILE: "source.go", GOPACKAGE: "example" }, - commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.json', JSON.stringify({ file: process.env.GOFILE, pkg: process.env.GOPACKAGE, cwd: process.cwd() }))"]], - }; - assert.equal(await cache(options), false); - assert.deepEqual(JSON.parse(fs.readFileSync(path.join(directory, "output.json"), "utf8")), { - file: "source.go", - pkg: "example", - cwd: directory, - }); - assert.equal(await cache(options), true); - assert.equal(await cache({ ...options, env: { ...options.env, GOFILE: "other.go" } }), false); - assert.equal(process.env.GOFILE, parentValue); -}); - -test("cache commands preserve the working directory and arguments", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_cache probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); - fs.writeFileSync(path.join(directory, "input.txt"), "input"); - fs.writeFileSync(path.join(directory, "generate.cjs"), "const fs = require('node:fs'); fs.writeFileSync('output.txt', fs.readFileSync('input.txt') + JSON.stringify(process.argv.slice(2)));\n"); - fs.writeFileSync(path.join(directory, "finish.cjs"), "require('node:fs').appendFileSync('output.txt', ' finished');\n"); - const generate = (force = false, failure = false) => - cache({ - cwd: directory, - inputs: ["input.txt", "*.cjs"], - outputs: ["output.txt"], - commands: [ - [process.execPath, "generate.cjs", "--help", "--force", "space value"], - [process.execPath, failure ? "missing.cjs" : "finish.cjs"], - ], - force, - }); - const output = path.join(directory, "output.txt"); - assert.equal(await generate(), false); - assert.equal(fs.readFileSync(output, "utf8"), 'input["--help","--force","space value"] finished'); - const timestamp = fs.statSync(output).mtimeMs; - assert.equal(await generate(), true); - assert.equal(fs.statSync(output).mtimeMs, timestamp); - assert.equal(await generate(true), false); - await assert.rejects(generate(false, true)); - assert.equal(await generate(), false); - assert.equal(await generate(), true); -}); - -test("cache commands track inputs, outputs, arguments, and failures", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); - const input = path.join(directory, "input.txt"); - const output = path.join(directory, "output.txt"); - fs.writeFileSync(input, "first"); - fs.writeFileSync(path.join(directory, "generate.cjs"), "const fs = require('node:fs'); fs.writeFileSync('output.txt', fs.readFileSync('input.txt'));\n"); - fs.writeFileSync(path.join(directory, "finish.cjs"), "const fs = require('node:fs'); fs.appendFileSync('output.txt', process.argv[2]); fs.writeFileSync('extra.txt', 'extra');\n"); - const generate = (suffix = " done", force = false, failure = false, env: NodeJS.ProcessEnv = {}) => - cache({ - cwd: directory, - inputs: ["input*.txt", "*.cjs"], - outputs: ["output.txt", "extra*.txt"], - envInputs: ["TSGO_CACHE_PROBE"], - env, - commands: [ - [process.execPath, "generate.cjs"], - [process.execPath, failure ? "missing.cjs" : "finish.cjs", suffix], - ], - force, - }); - await generate(); - assert.equal(fs.readFileSync(output, "utf8"), "first done"); - const timestamp = fs.statSync(output).mtimeMs; - assert.equal(await generate(), true); - assert.equal(fs.statSync(output).mtimeMs, timestamp); - fs.writeFileSync(input, "second"); - await generate(); - assert.equal(fs.readFileSync(output, "utf8"), "second done"); - const addedInput = path.join(directory, "input-added.txt"); - fs.writeFileSync(addedInput, "added"); - assert.equal(await generate(), false); - fs.rmSync(addedInput); - assert.equal(await generate(), false); - fs.rmSync(path.join(directory, "extra.txt")); - assert.equal(await generate(), false); - fs.writeFileSync(path.join(directory, "extra-added.txt"), "extra"); - assert.equal(await generate(), false); - fs.writeFileSync(output, "edited"); - assert.equal(await generate(), false); - assert.equal(await generate(" changed"), false); - assert.equal(fs.readFileSync(output, "utf8"), "second changed"); - assert.equal(await generate(" changed"), true); - assert.equal(await generate(" changed", true), false); - await assert.rejects(generate(" changed", true, true)); - assert.equal(await generate(" changed"), false); - assert.equal(await generate(" changed"), true); - const environment = { TSGO_CACHE_PROBE: "changed" }; - assert.equal(await generate(" changed", false, false, environment), false); - assert.equal(await generate(" changed", false, false, environment), true); - assert.equal(await generate("--force"), false); - assert.equal(fs.readFileSync(output, "utf8"), "second--force"); - assert.equal(await generate("--force"), true); -}); - -test("cache commands reject missing inputs, outputs, and empty commands", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const options = { - cwd: directory, - inputs: ["input.txt"], - outputs: ["output.txt"], - commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.txt', 'generated')"]], - }; - await assert.rejects(cache(options), /No inputs matched/); - assert.equal(fs.existsSync(path.join(directory, "output.txt")), false); - fs.writeFileSync(path.join(directory, "input.txt"), "input"); - await assert.rejects(cache({ ...options, inputs: ["missing*.txt"] }), /No inputs matched/); - await assert.rejects(cache({ ...options, commands: [] }), /nonempty commands/); - await assert.rejects(cache({ ...options, commands: [[]] }), /nonempty commands/); - await assert.rejects(cache({ ...options, outputs: [] }), /requires outputs/); - await assert.rejects(cache({ ...options, outputs: ["output.txt", "missing.txt"] }), /did not produce all declared outputs/); - assert.equal(await cache(options), false); - assert.equal(await cache(options), true); -}); - -test("cache commands do not cache inputs changed during execution", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - for (const change of ["fs.writeFileSync('input.txt', 'changed')", "fs.writeFileSync('input-added.txt', 'added')"]) { - fs.writeFileSync(path.join(directory, "input.txt"), "initial"); - const options = { - cwd: directory, - inputs: ["input*.txt"], - outputs: ["output.txt"], - commands: [[process.execPath, "-e", `const fs = require('node:fs'); fs.writeFileSync('output.txt', 'generated'); ${change};`]], - }; - assert.equal(await cache(options), false); - assert.equal(await cache(options), false); - assert.equal(await cache(options), true); - } -}); +import assert from "node:assert/strict"; +import * as fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { test } from "node:test"; +import cache from "./cache.mts"; + +test("cache commands use and track an explicit environment without changing the parent", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-env-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const parentValue = process.env.GOFILE; + const options = { + cwd: directory, + inputs: [], + outputs: ["output.json"], + envInputs: ["GOFILE", "GOPACKAGE"], + env: { GOFILE: "source.go", GOPACKAGE: "example" }, + commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.json', JSON.stringify({ file: process.env.GOFILE, pkg: process.env.GOPACKAGE, cwd: process.cwd() }))"]], + }; + assert.equal(await cache(options), false); + assert.deepEqual(JSON.parse(fs.readFileSync(path.join(directory, "output.json"), "utf8")), { + file: "source.go", + pkg: "example", + cwd: directory, + }); + assert.equal(await cache(options), true); + assert.equal(await cache({ ...options, env: { ...options.env, GOFILE: "other.go" } }), false); + assert.equal(process.env.GOFILE, parentValue); +}); + +test("cache commands preserve the working directory and arguments", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_cache probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); + fs.writeFileSync(path.join(directory, "input.txt"), "input"); + fs.writeFileSync(path.join(directory, "generate.cjs"), "const fs = require('node:fs'); fs.writeFileSync('output.txt', fs.readFileSync('input.txt') + JSON.stringify(process.argv.slice(2)));\n"); + fs.writeFileSync(path.join(directory, "finish.cjs"), "require('node:fs').appendFileSync('output.txt', ' finished');\n"); + const generate = (force = false, failure = false) => + cache({ + cwd: directory, + inputs: ["input.txt", "*.cjs"], + outputs: ["output.txt"], + commands: [ + [process.execPath, "generate.cjs", "--help", "--force", "space value"], + [process.execPath, failure ? "missing.cjs" : "finish.cjs"], + ], + force, + }); + const output = path.join(directory, "output.txt"); + assert.equal(await generate(), false); + assert.equal(fs.readFileSync(output, "utf8"), 'input["--help","--force","space value"] finished'); + const timestamp = fs.statSync(output).mtimeMs; + assert.equal(await generate(), true); + assert.equal(fs.statSync(output).mtimeMs, timestamp); + assert.equal(await generate(true), false); + await assert.rejects(generate(false, true)); + assert.equal(await generate(), false); + assert.equal(await generate(), true); +}); + +test("cache commands track inputs, outputs, arguments, and failures", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); + const input = path.join(directory, "input.txt"); + const output = path.join(directory, "output.txt"); + fs.writeFileSync(input, "first"); + fs.writeFileSync(path.join(directory, "generate.cjs"), "const fs = require('node:fs'); fs.writeFileSync('output.txt', fs.readFileSync('input.txt'));\n"); + fs.writeFileSync(path.join(directory, "finish.cjs"), "const fs = require('node:fs'); fs.appendFileSync('output.txt', process.argv[2]); fs.writeFileSync('extra.txt', 'extra');\n"); + const generate = (suffix = " done", force = false, failure = false, env: NodeJS.ProcessEnv = {}) => + cache({ + cwd: directory, + inputs: ["input*.txt", "*.cjs"], + outputs: ["output.txt", "extra*.txt"], + envInputs: ["TSGO_CACHE_PROBE"], + env, + commands: [ + [process.execPath, "generate.cjs"], + [process.execPath, failure ? "missing.cjs" : "finish.cjs", suffix], + ], + force, + }); + await generate(); + assert.equal(fs.readFileSync(output, "utf8"), "first done"); + const timestamp = fs.statSync(output).mtimeMs; + assert.equal(await generate(), true); + assert.equal(fs.statSync(output).mtimeMs, timestamp); + fs.writeFileSync(input, "second"); + await generate(); + assert.equal(fs.readFileSync(output, "utf8"), "second done"); + const addedInput = path.join(directory, "input-added.txt"); + fs.writeFileSync(addedInput, "added"); + assert.equal(await generate(), false); + fs.rmSync(addedInput); + assert.equal(await generate(), false); + fs.rmSync(path.join(directory, "extra.txt")); + assert.equal(await generate(), false); + fs.writeFileSync(path.join(directory, "extra-added.txt"), "extra"); + assert.equal(await generate(), false); + fs.writeFileSync(output, "edited"); + assert.equal(await generate(), false); + assert.equal(await generate(" changed"), false); + assert.equal(fs.readFileSync(output, "utf8"), "second changed"); + assert.equal(await generate(" changed"), true); + assert.equal(await generate(" changed", true), false); + await assert.rejects(generate(" changed", true, true)); + assert.equal(await generate(" changed"), false); + assert.equal(await generate(" changed"), true); + const environment = { TSGO_CACHE_PROBE: "changed" }; + assert.equal(await generate(" changed", false, false, environment), false); + assert.equal(await generate(" changed", false, false, environment), true); + assert.equal(await generate("--force"), false); + assert.equal(fs.readFileSync(output, "utf8"), "second--force"); + assert.equal(await generate("--force"), true); +}); + +test("cache commands reject missing inputs, outputs, and empty commands", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const options = { + cwd: directory, + inputs: ["input.txt"], + outputs: ["output.txt"], + commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.txt', 'generated')"]], + }; + await assert.rejects(cache(options), /No inputs matched/); + assert.equal(fs.existsSync(path.join(directory, "output.txt")), false); + fs.writeFileSync(path.join(directory, "input.txt"), "input"); + await assert.rejects(cache({ ...options, inputs: ["missing*.txt"] }), /No inputs matched/); + await assert.rejects(cache({ ...options, commands: [] }), /nonempty commands/); + await assert.rejects(cache({ ...options, commands: [[]] }), /nonempty commands/); + await assert.rejects(cache({ ...options, outputs: [] }), /requires outputs/); + await assert.rejects(cache({ ...options, outputs: ["output.txt", "missing.txt"] }), /did not produce all declared outputs/); + assert.equal(await cache(options), false); + assert.equal(await cache(options), true); +}); + +test("cache commands do not cache inputs changed during execution", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-cache-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + for (const change of ["fs.writeFileSync('input.txt', 'changed')", "fs.writeFileSync('input-added.txt', 'added')"]) { + fs.writeFileSync(path.join(directory, "input.txt"), "initial"); + const options = { + cwd: directory, + inputs: ["input*.txt"], + outputs: ["output.txt"], + commands: [[process.execPath, "-e", `const fs = require('node:fs'); fs.writeFileSync('output.txt', 'generated'); ${change};`]], + }; + assert.equal(await cache(options), false); + assert.equal(await cache(options), false); + assert.equal(await cache(options), true); + } +}); diff --git a/tools/scripts/gen/extensionLocalization.mts b/tools/scripts/gen/extensionLocalization.mts index 6a21c960657b4..6f568efee62a8 100644 --- a/tools/scripts/gen/extensionLocalization.mts +++ b/tools/scripts/gen/extensionLocalization.mts @@ -1,101 +1,101 @@ -import fs from "node:fs"; -import path from "node:path"; -import ts from "typescript"; - -function writeJson(file: string, value: Record) { - fs.writeFileSync(file, JSON.stringify(value, null, 2)); -} - -function isLocalizationCall(node: ts.Node): node is ts.CallExpression { - if (!ts.isCallExpression(node)) return false; - const expression = node.expression; - return ts.isPropertyAccessExpression(expression) - && expression.name.text === "t" - && ts.isPropertyAccessExpression(expression.expression) - && expression.expression.name.text === "l10n" - && ts.isIdentifier(expression.expression.expression) - && expression.expression.expression.text === "vscode"; -} - -export function generateBundle(sourceDirectory: string, outputFile: string) { - const messages: Record = Object.create(null); - const files = fs.globSync(["**/*.ts", "**/*.tsx"], { cwd: sourceDirectory }); - for (const file of files) { - const fileName = path.join(sourceDirectory, file); - const source = ts.createSourceFile(fileName, fs.readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true); - for (const statement of source.statements) { - if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === "vscode") { - const clause = statement.importClause; - const bindings = clause?.namedBindings; - const typeOnly = clause?.isTypeOnly || (!clause?.name && bindings && ts.isNamedImports(bindings) && bindings.elements.every(element => element.isTypeOnly)); - if (!typeOnly && (clause?.name || !bindings || !ts.isNamespaceImport(bindings) || bindings.name.text !== "vscode")) { - const { line, character } = source.getLineAndCharacterOfPosition(statement.getStart(source)); - throw new Error(`${fileName}:${line + 1}:${character + 1}: Import vscode as a namespace to extract localization strings`); - } - } - } - function visit(node: ts.Node) { - if (isLocalizationCall(node)) { - const first = node.arguments[0]; - const message = first && (ts.isStringLiteral(first) || ts.isNoSubstitutionTemplateLiteral(first)) ? first.text : undefined; - if (message === undefined) { - const { line, character } = source.getLineAndCharacterOfPosition(node.getStart(source)); - throw new Error(`${fileName}:${line + 1}:${character + 1}: vscode.l10n.t requires a static message`); - } - messages[message] = message; - } - ts.forEachChild(node, visit); - } - visit(source); - } - const entries = Object.entries(messages).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0); - writeJson(outputFile, Object.fromEntries(entries)); -} - -const accents: Record = { - a: "à", - e: "ë", - i: "ï", - o: "ô", - u: "ü", - y: "ÿ", - A: "À", - E: "Ë", - I: "Ï", - O: "Ô", - U: "Ü", - Y: "Ÿ", -}; -const protectedText = /(\$\([^)]+\)|\{[a-zA-Z_0-9]+\}|%\d*\$?[sdif])/g; - -function pseudoLocalize(message: string): string { - const translated = message.split(protectedText).map((part, index) => index % 2 ? part : [...part].map(char => accents[char] ?? char).join("")); - const length = translated.filter((_, index) => index % 2 === 0).join("").length; - return `[!! ${translated.join("")}${"~".repeat(Math.ceil(length * 0.3))} !!]`; -} - -export function generatePseudo(inputFile: string, outputFile: string) { - const input: unknown = JSON.parse(fs.readFileSync(inputFile, "utf8")); - if (!input || typeof input !== "object" || Array.isArray(input)) throw new Error(`Invalid localization bundle: ${inputFile}`); - const output: Record = Object.create(null); - for (const [key, value] of Object.entries(input)) { - if (typeof value !== "string") throw new Error(`Invalid localization string ${key} in ${inputFile}`); - output[key] = pseudoLocalize(value); - } - writeJson(outputFile, output); -} - -if (process.argv[1] && path.resolve(process.argv[1]) === import.meta.filename) { - const extension = path.resolve(import.meta.dirname, "../../../packages/vscode-typescript"); - switch (process.argv[2]) { - case "bundle": - generateBundle(path.join(extension, "src"), path.join(extension, "l10n/bundle.l10n.json")); - break; - case "pseudo": - generatePseudo(path.join(extension, "l10n/bundle.l10n.json"), path.join(extension, "l10n/bundle.l10n.qps-ploc.json")); - generatePseudo(path.join(extension, "package.nls.json"), path.join(extension, "package.nls.qps-ploc.json")); - break; - default: - throw new Error("Expected bundle or pseudo"); - } -} +import fs from "node:fs"; +import path from "node:path"; +import ts from "typescript"; + +function writeJson(file: string, value: Record) { + fs.writeFileSync(file, JSON.stringify(value, null, 2)); +} + +function isLocalizationCall(node: ts.Node): node is ts.CallExpression { + if (!ts.isCallExpression(node)) return false; + const expression = node.expression; + return ts.isPropertyAccessExpression(expression) + && expression.name.text === "t" + && ts.isPropertyAccessExpression(expression.expression) + && expression.expression.name.text === "l10n" + && ts.isIdentifier(expression.expression.expression) + && expression.expression.expression.text === "vscode"; +} + +export function generateBundle(sourceDirectory: string, outputFile: string) { + const messages: Record = Object.create(null); + const files = fs.globSync(["**/*.ts", "**/*.tsx"], { cwd: sourceDirectory }); + for (const file of files) { + const fileName = path.join(sourceDirectory, file); + const source = ts.createSourceFile(fileName, fs.readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true); + for (const statement of source.statements) { + if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === "vscode") { + const clause = statement.importClause; + const bindings = clause?.namedBindings; + const typeOnly = clause?.isTypeOnly || (!clause?.name && bindings && ts.isNamedImports(bindings) && bindings.elements.every(element => element.isTypeOnly)); + if (!typeOnly && (clause?.name || !bindings || !ts.isNamespaceImport(bindings) || bindings.name.text !== "vscode")) { + const { line, character } = source.getLineAndCharacterOfPosition(statement.getStart(source)); + throw new Error(`${fileName}:${line + 1}:${character + 1}: Import vscode as a namespace to extract localization strings`); + } + } + } + function visit(node: ts.Node) { + if (isLocalizationCall(node)) { + const first = node.arguments[0]; + const message = first && (ts.isStringLiteral(first) || ts.isNoSubstitutionTemplateLiteral(first)) ? first.text : undefined; + if (message === undefined) { + const { line, character } = source.getLineAndCharacterOfPosition(node.getStart(source)); + throw new Error(`${fileName}:${line + 1}:${character + 1}: vscode.l10n.t requires a static message`); + } + messages[message] = message; + } + ts.forEachChild(node, visit); + } + visit(source); + } + const entries = Object.entries(messages).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0); + writeJson(outputFile, Object.fromEntries(entries)); +} + +const accents: Record = { + a: "à", + e: "ë", + i: "ï", + o: "ô", + u: "ü", + y: "ÿ", + A: "À", + E: "Ë", + I: "Ï", + O: "Ô", + U: "Ü", + Y: "Ÿ", +}; +const protectedText = /(\$\([^)]+\)|\{[a-zA-Z_0-9]+\}|%\d*\$?[sdif])/g; + +function pseudoLocalize(message: string): string { + const translated = message.split(protectedText).map((part, index) => index % 2 ? part : [...part].map(char => accents[char] ?? char).join("")); + const length = translated.filter((_, index) => index % 2 === 0).join("").length; + return `[!! ${translated.join("")}${"~".repeat(Math.ceil(length * 0.3))} !!]`; +} + +export function generatePseudo(inputFile: string, outputFile: string) { + const input: unknown = JSON.parse(fs.readFileSync(inputFile, "utf8")); + if (!input || typeof input !== "object" || Array.isArray(input)) throw new Error(`Invalid localization bundle: ${inputFile}`); + const output: Record = Object.create(null); + for (const [key, value] of Object.entries(input)) { + if (typeof value !== "string") throw new Error(`Invalid localization string ${key} in ${inputFile}`); + output[key] = pseudoLocalize(value); + } + writeJson(outputFile, output); +} + +if (process.argv[1] && path.resolve(process.argv[1]) === import.meta.filename) { + const extension = path.resolve(import.meta.dirname, "../../../packages/vscode-typescript"); + switch (process.argv[2]) { + case "bundle": + generateBundle(path.join(extension, "src"), path.join(extension, "l10n/bundle.l10n.json")); + break; + case "pseudo": + generatePseudo(path.join(extension, "l10n/bundle.l10n.json"), path.join(extension, "l10n/bundle.l10n.qps-ploc.json")); + generatePseudo(path.join(extension, "package.nls.json"), path.join(extension, "package.nls.qps-ploc.json")); + break; + default: + throw new Error("Expected bundle or pseudo"); + } +} diff --git a/tools/scripts/gen/generatedFile.mts b/tools/scripts/gen/generatedFile.mts index 58fcfce5d499c..703234eaa15d5 100644 --- a/tools/scripts/gen/generatedFile.mts +++ b/tools/scripts/gen/generatedFile.mts @@ -1,86 +1,86 @@ -import { createHash } from "node:crypto"; -import * as fs from "node:fs"; -import os from "node:os"; -import path from "node:path"; -import { - getFileFingerprint, - invalidateFileFingerprints, - repoRoot, -} from "./utils.mts"; - -const commonInputs = [ - import.meta.filename, - path.join(import.meta.dirname, "utils.mts"), - path.join(repoRoot, "package-lock.json"), - path.join(repoRoot, ".dprint.jsonc"), -]; - -function digest(value: string | Buffer): string { - return createHash("sha256").update(value).digest("hex"); -} - -export const defaultCacheDirectory = path.join(os.tmpdir(), "typescript-codegen", digest(repoRoot)); - -function readIfExists(file: string): Buffer | undefined { - try { - return fs.readFileSync(file); - } - catch (error) { - if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error; - } -} - -export class GeneratedFile { - readonly fileName: string; - private readonly inputs: readonly string[]; - private readonly inputHash: string; - private readonly cacheFile: string; - private readonly key: unknown; - - constructor(fileName: string, inputs: readonly string[], cacheDirectory = defaultCacheDirectory, key?: unknown) { - this.fileName = path.resolve(fileName); - this.inputs = [...new Set([...commonInputs, ...inputs].map(file => path.resolve(file)))].sort(); - this.key = key; - this.inputHash = this.hashInputs(); - this.cacheFile = path.join(cacheDirectory, digest(this.fileName) + ".json"); - } - - private hashInputs(fresh = false): string { - return digest(JSON.stringify([ - process.version, - process.platform, - process.arch, - this.key, - this.inputs.map(file => [file, getFileFingerprint(file, fresh)]), - ])); - } - - private state(output: Buffer): string { - return JSON.stringify([this.inputHash, digest(output)]); - } - - isCurrent(force = false): boolean { - if (force) return false; - const output = readIfExists(this.fileName); - return output !== undefined && readIfExists(this.cacheFile)?.toString() === this.state(output); - } - - invalidate(): void { - invalidateFileFingerprints(this.fileName); - fs.rmSync(this.cacheFile, { force: true }); - } - - write(content: string): void { - this.invalidate(); - fs.mkdirSync(path.dirname(this.fileName), { recursive: true }); - fs.writeFileSync(this.fileName, content); - } - - markCurrent(): void { - invalidateFileFingerprints(this.fileName); - if (this.inputHash !== this.hashInputs(true)) return; - const state = this.state(fs.readFileSync(this.fileName)); - fs.mkdirSync(path.dirname(this.cacheFile), { recursive: true }); - fs.writeFileSync(this.cacheFile, state); - } -} +import { createHash } from "node:crypto"; +import * as fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { + getFileFingerprint, + invalidateFileFingerprints, + repoRoot, +} from "./utils.mts"; + +const commonInputs = [ + import.meta.filename, + path.join(import.meta.dirname, "utils.mts"), + path.join(repoRoot, "package-lock.json"), + path.join(repoRoot, ".dprint.jsonc"), +]; + +function digest(value: string | Buffer): string { + return createHash("sha256").update(value).digest("hex"); +} + +export const defaultCacheDirectory = path.join(os.tmpdir(), "typescript-codegen", digest(repoRoot)); + +function readIfExists(file: string): Buffer | undefined { + try { + return fs.readFileSync(file); + } + catch (error) { + if ((error as NodeJS.ErrnoException).code !== "ENOENT") throw error; + } +} + +export class GeneratedFile { + readonly fileName: string; + private readonly inputs: readonly string[]; + private readonly inputHash: string; + private readonly cacheFile: string; + private readonly key: unknown; + + constructor(fileName: string, inputs: readonly string[], cacheDirectory = defaultCacheDirectory, key?: unknown) { + this.fileName = path.resolve(fileName); + this.inputs = [...new Set([...commonInputs, ...inputs].map(file => path.resolve(file)))].sort(); + this.key = key; + this.inputHash = this.hashInputs(); + this.cacheFile = path.join(cacheDirectory, digest(this.fileName) + ".json"); + } + + private hashInputs(fresh = false): string { + return digest(JSON.stringify([ + process.version, + process.platform, + process.arch, + this.key, + this.inputs.map(file => [file, getFileFingerprint(file, fresh)]), + ])); + } + + private state(output: Buffer): string { + return JSON.stringify([this.inputHash, digest(output)]); + } + + isCurrent(force = false): boolean { + if (force) return false; + const output = readIfExists(this.fileName); + return output !== undefined && readIfExists(this.cacheFile)?.toString() === this.state(output); + } + + invalidate(): void { + invalidateFileFingerprints(this.fileName); + fs.rmSync(this.cacheFile, { force: true }); + } + + write(content: string): void { + this.invalidate(); + fs.mkdirSync(path.dirname(this.fileName), { recursive: true }); + fs.writeFileSync(this.fileName, content); + } + + markCurrent(): void { + invalidateFileFingerprints(this.fileName); + if (this.inputHash !== this.hashInputs(true)) return; + const state = this.state(fs.readFileSync(this.fileName)); + fs.mkdirSync(path.dirname(this.cacheFile), { recursive: true }); + fs.writeFileSync(this.cacheFile, state); + } +} diff --git a/tools/scripts/gen/generatedFile.test.mts b/tools/scripts/gen/generatedFile.test.mts index ce1291442d2cd..753e77981525d 100644 --- a/tools/scripts/gen/generatedFile.test.mts +++ b/tools/scripts/gen/generatedFile.test.mts @@ -1,926 +1,936 @@ -import assert from "node:assert/strict"; -import { createHash } from "node:crypto"; -import fs from "node:fs"; -import { syncBuiltinESMExports } from "node:module"; -import os from "node:os"; -import path from "node:path"; -import { test } from "node:test"; -import { stripVTControlCharacters } from "node:util"; -import { runInNewContext } from "node:vm"; -import { x } from "tinyexec"; -import ts from "typescript"; -import cache from "./cache.mts"; -import { - defaultCacheDirectory, - GeneratedFile, -} from "./generatedFile.mts"; -import { - enableFileFingerprintCache, - getFileFingerprint, - repoRoot, - run, -} from "./utils.mts"; - -test("validate generates before building and selects the generation scope", async () => { - const fileName = path.resolve(import.meta.dirname, "../../../Herebyfile.mjs"); - const source = ts.createSourceFile(fileName, fs.readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true, ts.ScriptKind.JS); - const declaration = source.statements.filter(ts.isVariableStatement) - .flatMap(statement => statement.declarationList.declarations) - .find(declaration => declaration.name.getText(source) === "validate"); - assert.ok(declaration?.initializer); - for (const options of [{}, { api: true }, { all: true }]) { - const calls: string[] = []; - const action = (name: string) => async () => { - calls.push(name); - }; - const generate = { run: action("generate") }; - const generateGo = { run: action("generate:go") }; - const build = { run: action("build") }; - const validation = runInNewContext(declaration.initializer.getText(source), { - task: (spec: unknown) => spec, - options, - generate, - generateGo, - build, - builtLocal: "./built/local", - generateLibs: action("lib"), - buildTsc: action("build"), - getReleaseBuildFlags: () => [], - runGenerateGo: action("generate:go"), - runGenerateEnums: action("generate:enums"), - runGenerateAPI: action("generate:api"), - runGenerateExtension: action("generate:extension"), - runGenerateVendor: action("generate:vendor"), - runBuildAPITests: async (generate = true) => { - if (generate) calls.push("generate:sync"); - calls.push("build:api:test"); - }, - runTests: action("test:tsc"), - runTestExtension: action("test:extension"), - runTestAPI: action("test:api"), - runTestBenchmarks: action("test:benchmarks"), - runTestTools: action("test:tools"), - run: async (command: string, args: string[]) => { - assert.equal(command, "node"); - assert.deepEqual(Array.from(args), ["--test", "./tools/scripts/tsc/options.test.ts"]); - calls.push("test:options"); - }, - runSmokeTest: action("test:smoke"), - runLint: action("lint"), - runFormat: action("format"), - }) as { dependencies: { run: () => Promise; }[]; run: () => Promise; }; - await Promise.all(validation.dependencies.map(dependency => dependency.run())); - await validation.run(); - assert.equal(calls[0], "all" in options ? "generate" : "generate:go"); - assert.ok(calls.indexOf("build") > 0); - assert.ok(calls.indexOf("build") < calls.indexOf("test:tsc")); - assert.equal(calls.includes("test:api"), "api" in options || "all" in options); - assert.equal(calls.includes("test:tools"), "all" in options); - assert.equal(calls.includes("test:options"), "all" in options); - if ("all" in options) { - assert.deepEqual(calls.filter(name => name.startsWith("generate")), ["generate"]); - } - } -}); - -test("generator options preserve repeated inputs and force overrides", async () => { - const { parseGeneratorArgs, resolveForce } = await import("./utils.mts"); - const options = { type: { type: "string" }, input: { type: "string", multiple: true } } as const; - const args = ["--type", "Kind", "--input=kind.go", "--input", "extra.go", "--force"]; - const parsed = parseGeneratorArgs(options, args); - assert.equal(parsed.values.type, "Kind"); - assert.deepEqual(parsed.values.input, ["kind.go", "extra.go"]); - assert.equal(parsed.force, true); - assert.equal(resolveForce(undefined, "ON"), true); - assert.equal(resolveForce(undefined, "0"), false); - assert.equal(resolveForce(false, "1"), false); - assert.equal(parseGeneratorArgs({}, ["--no-force"]).force, false); -}); - -test("generated files are current only while their inputs and formatted output match", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const input = path.join(directory, "input.ts"); - const output = path.join(directory, "output.ts"); - const cache = path.join(directory, "cache"); - fs.writeFileSync(input, "input"); - const generated = () => new GeneratedFile(output, [input], cache); - let file = generated(); - assert.equal(file.isCurrent(), false); - file.write("unformatted"); - fs.writeFileSync(output, "formatted"); - file.markCurrent(); - assert.equal(generated().isCurrent(), true); - assert.equal(generated().isCurrent(true), false); - file.invalidate(); - assert.equal(generated().isCurrent(), false); - file.write("formatted"); - file.markCurrent(); - assert.equal(generated().isCurrent(), true); - fs.utimesSync(input, new Date(), new Date()); - assert.equal(generated().isCurrent(), true); - fs.writeFileSync(input, "changed"); - assert.equal(generated().isCurrent(), false); - fs.writeFileSync(input, "input"); - assert.equal(generated().isCurrent(), true); - fs.writeFileSync(output, "edited"); - assert.equal(generated().isCurrent(), false); - file = generated(); - file.write("formatted"); - assert.equal(generated().isCurrent(), false); - file.markCurrent(); - assert.equal(generated().isCurrent(), true); - const dependency = path.join(directory, "generator.ts"); - fs.writeFileSync(dependency, "generator"); - assert.equal(new GeneratedFile(output, [input, dependency], cache).isCurrent(), false); - fs.rmSync(dependency); - assert.throws(() => new GeneratedFile(output, [input, dependency], cache), { code: "ENOENT" }); - fs.rmSync(output); - assert.equal(generated().isCurrent(), false); -}); - -test("generated files share input fingerprints and refresh changed inputs", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const input = path.join(directory, "input.ts"); - const output = path.join(directory, "output.ts"); - const cache = path.join(directory, "cache"); - fs.writeFileSync(input, "first"); - const reads = context.mock.method(fs, "readFileSync"); - syncBuiltinESMExports(); - context.after(() => { - reads.mock.restore(); - syncBuiltinESMExports(); - }); - const inputReads = () => reads.mock.calls.filter(call => call.arguments[0] === input).length; - const first = new GeneratedFile(output, [input], cache); - new GeneratedFile(path.join(directory, "other.ts"), [input], cache); - assert.equal(inputReads(), 1); - first.write("generated"); - first.markCurrent(); - const timestamp = fs.statSync(input); - fs.writeFileSync(input, "other"); - fs.utimesSync(input, timestamp.atime, timestamp.mtime); - assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), false); - fs.rmSync(input); - assert.throws(() => new GeneratedFile(output, [input], cache), { code: "ENOENT" }); - fs.writeFileSync(input, "first"); - assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), true); -}); - -test("invocation fingerprints reuse metadata and invalidate writes and commands", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - context.after(enableFileFingerprintCache()); - const input = path.join(directory, "input.ts"); - const output = path.join(directory, "output.ts"); - const metadata = path.join(directory, "cache"); - const inputFile = new GeneratedFile(input, [], metadata); - inputFile.write("first"); - inputFile.markCurrent(); - const reads = context.mock.method(fs, "readFileSync"); - const stats = context.mock.method(fs, "statSync"); - syncBuiltinESMExports(); - context.after(() => { - reads.mock.restore(); - stats.mock.restore(); - syncBuiltinESMExports(); - }); - const generated = new GeneratedFile(output, [input], metadata); - new GeneratedFile(path.join(directory, "other.ts"), [input], metadata); - getFileFingerprint(path.relative(process.cwd(), input)); - assert.equal(reads.mock.calls.filter(call => call.arguments[0] === input).length, 1); - assert.equal(stats.mock.calls.filter(call => call.arguments[0] === input).length, 1); - generated.write("generated"); - generated.markCurrent(); - const firstHash = getFileFingerprint(input); - inputFile.write("other"); - assert.notEqual(getFileFingerprint(input), firstHash); - assert.equal(new GeneratedFile(output, [input], metadata).isCurrent(), false); - const stale = new GeneratedFile(output, [input], metadata); - fs.writeFileSync(input, "third"); - stale.write("stale"); - stale.markCurrent(); - assert.equal(new GeneratedFile(output, [input], metadata).isCurrent(), false); - for (const failure of [false, true]) { - const before = getFileFingerprint(input); - const content = failure ? "failed command" : "successful command"; - const command = run(process.execPath, ["-e", `require('node:fs').writeFileSync(process.argv[1], ${JSON.stringify(content)}); process.exit(${failure ? 1 : 0});`, input]); - if (failure) await assert.rejects(command); - else await command; - assert.notEqual(getFileFingerprint(input), before); - assert.equal(getFileFingerprint(input), createHash("sha256").update(content).digest("hex")); - } - const running = run(process.execPath, ["-e", "process.exit(0)"]); - try { - const before = getFileFingerprint(input); - fs.writeFileSync(input, "changed while a command is running"); - assert.notEqual(getFileFingerprint(input), before); - } - finally { - await running; - } -}); - -test("fingerprint cache scopes can overlap", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const input = path.join(directory, "input.ts"); - fs.writeFileSync(input, "input"); - const stats = context.mock.method(fs, "statSync"); - syncBuiltinESMExports(); - context.after(() => { - stats.mock.restore(); - syncBuiltinESMExports(); - }); - const disableFirst = enableFileFingerprintCache(); - const disableSecond = enableFileFingerprintCache(); - try { - getFileFingerprint(input); - getFileFingerprint(input); - assert.equal(stats.mock.callCount(), 1); - disableFirst(); - getFileFingerprint(input); - getFileFingerprint(input); - assert.equal(stats.mock.callCount(), 2); - disableSecond(); - getFileFingerprint(input); - getFileFingerprint(input); - assert.equal(stats.mock.callCount(), 4); - } - finally { - disableSecond(); - disableFirst(); - } -}); - -test("command cache snapshots and generated files share invocation fingerprints", async context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const input = path.join(directory, "input.txt"); - fs.writeFileSync(input, "input"); - const options = { - cwd: directory, - inputs: ["input.txt"], - outputs: ["output.txt"], - commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.txt', 'generated')"]], - }; - assert.equal(await cache(options), false); - context.after(enableFileFingerprintCache()); - const reads = context.mock.method(fs, "readFileSync"); - syncBuiltinESMExports(); - context.after(() => { - reads.mock.restore(); - syncBuiltinESMExports(); - }); - assert.equal(await cache(options), true); - assert.equal(await cache(options), true); - new GeneratedFile(path.join(directory, "other.txt"), [input]); - assert.equal(reads.mock.calls.filter(call => call.arguments[0] === input).length, 1); -}); - -test("changing inputs during generation does not mark stale output current", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const input = path.join(directory, "input.ts"); - const output = path.join(directory, "output.ts"); - const cache = path.join(directory, "cache"); - fs.writeFileSync(input, "before"); - const file = new GeneratedFile(output, [input], cache); - file.write("generated"); - fs.writeFileSync(input, "after"); - file.markCurrent(); - assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), false); -}); - -test("default metadata is isolated by repository worktree", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const output = path.join(directory, "output.ts"); - assert.equal(path.basename(defaultCacheDirectory), createHash("sha256").update(repoRoot).digest("hex")); - const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(output).digest("hex") + ".json"); - context.after(() => fs.rmSync(cacheFile, { force: true })); - const file = new GeneratedFile(output, []); - file.write("generated"); - file.markCurrent(); - assert.equal(fs.existsSync(cacheFile), true); - assert.equal(new GeneratedFile(output, []).isCurrent(), true); - fs.rmSync(cacheFile); - assert.equal(new GeneratedFile(output, []).isCurrent(), false); - file.markCurrent(); - assert.equal(new GeneratedFile(output, []).isCurrent(), true); -}); - -test("metadata directories can disappear during generation", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const output = path.join(directory, "output.ts"); - const cache = path.join(directory, "cache"); - const file = new GeneratedFile(output, [], cache); - file.write("generated"); - file.markCurrent(); - fs.rmSync(cache, { recursive: true }); - assert.equal(file.isCurrent(), false); - file.write("regenerated"); - file.markCurrent(); - assert.equal(new GeneratedFile(output, [], cache).isCurrent(), true); -}); - -test("generated files track each output independently", context => { - const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const files = ["output.go", "locale.gz"].map(file => new GeneratedFile(path.join(directory, file), [], path.join(directory, "cache"))); - for (const file of files) { - file.write("generated"); - file.markCurrent(); - } - assert.equal(files.every(file => file.isCurrent()), true); - fs.writeFileSync(files[1].fileName, "modified"); - assert.equal(files[0].isCurrent(), true); - assert.equal(files[1].isCurrent(), false); - fs.writeFileSync(files[1].fileName, "generated"); - assert.equal(files.every(file => file.isCurrent()), true); - fs.rmSync(files[1].fileName); - assert.equal(files[0].isCurrent(), true); - assert.equal(files[1].isCurrent(), false); - files[1].write("generated"); - files[1].markCurrent(); - files[1].invalidate(); - assert.equal(files[0].isCurrent(), true); - assert.equal(files[1].isCurrent(), false); -}); - -test("generate:go runs Go generators directly and shares caches with Go fallback", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = () => x("npx", ["hereby", "generate:go"], { throwOnError: true, nodeOptions: { cwd: root } }); - const first = await generate(); - assert.doesNotMatch(first.stdout, /\$ go generate|npm run --silent cache|\$ node .*generate-unicode-data/); - const files = fs.globSync(["tsc/internal/**/*generated.go", "packages/typescript/src/api/*.generated.ts", "packages/typescript/src/enums/*.ts", "packages/typescript/schemas/*.schema.json"], { cwd: root }); - const timestamps = files.map(file => fs.statSync(path.join(root, file)).mtimeMs); - const current = await generate(); - assert.doesNotMatch(current.stdout, /Generated codegen outputs|Generated Unicode tables/); - assert.match(current.stdout, /Unicode tables are up to date/); - assert.deepEqual(files.map(file => fs.statSync(path.join(root, file)).mtimeMs), timestamps); - const fallback = await x("go", ["-C", "./tsc", "generate", "./internal/diagnostics"], { throwOnError: true, nodeOptions: { cwd: root } }); - assert.equal(fallback.stdout.match(/codegen outputs are already up to date/g)?.length, 2); - const nested = await x("npx", ["hereby", "generate:compileroptions"], { throwOnError: true, nodeOptions: { cwd: path.join(root, "tsc/internal/core") } }); - assert.equal(nested.stdout.match(/codegen outputs are already up to date/g)?.length, 4); - assert.match(nested.stdout, /Enums are up to date/); -}); - -test("generate:go generates new option diagnostics before Go-dependent generators", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = async () => { - const result = await x("npx", ["hereby", "generate:go"], { nodeOptions: { cwd: root } }); - assert.equal(result.exitCode, 0, result.stdout + result.stderr); - return result; - }; - await generate(); - const metadataFile = path.join(root, "tools/scripts/tsc/options.ts"); - const diagnosticsFile = path.join(root, "tsc/internal/diagnostics/diagnosticMessages.json"); - const protocolFile = path.join(root, "packages/typescript/src/api/proto.generated.ts"); - const originalMetadata = fs.readFileSync(metadataFile, "utf8"); - const originalDiagnostics = fs.readFileSync(diagnosticsFile, "utf8"); - const originalProtocol = fs.readFileSync(protocolFile, "utf8"); - const messages: Record = JSON.parse(originalDiagnostics); - const message = "Codegen ordering probe"; - assert.equal(messages[message], undefined); - messages[message] = { category: "Message", code: Math.max(...Object.values(messages).map(message => message.code)) + 1 }; - const metadata = originalMetadata.replace( - 'diagnostic("Print all of the files read during the compilation.")', - `diagnostic("${message}")`, - ); - assert.notEqual(metadata, originalMetadata); - try { - fs.writeFileSync(diagnosticsFile, JSON.stringify(messages, null, 4) + "\n"); - fs.writeFileSync(metadataFile, metadata); - // Exercise protocol generation too, rather than accepting its cached output. - fs.writeFileSync(protocolFile, originalProtocol + "\n"); - const { stdout } = await generate(); - assert.match(stdout, /All generated values match Go/); - assert.match(stdout, /\$ go -C \.\/tools run \.\/gen-proto/); - assert.equal(fs.readFileSync(protocolFile, "utf8"), originalProtocol); - assert.match(fs.readFileSync(path.join(root, "tsc/internal/tsoptions/declarations_generated.go"), "utf8"), /diagnostics\.Codegen_ordering_probe/); - assert.match(fs.readFileSync(path.join(root, "tsc/internal/diagnostics/diagnostics_generated.go"), "utf8"), /Codegen_ordering_probe/); - } - finally { - fs.writeFileSync(metadataFile, originalMetadata); - fs.writeFileSync(diagnosticsFile, originalDiagnostics); - await generate(); - } -}); - -test("generate includes standalone generators without Go traversal", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const { stdout } = await x("npx", ["hereby", "generate"], { throwOnError: true, nodeOptions: { cwd: root } }); - const log = stripVTControlCharacters(stdout); - const eventIndex = (event: string) => { - const index = log.indexOf(event); - assert.ok(index >= 0, `Missing task event: ${event}`); - return index; - }; - const compilerStart = eventIndex("Starting generate:compiler"); - assert.ok(eventIndex("Finished generate:ast ") < compilerStart); - assert.ok(eventIndex("Finished generate:lsp ") < compilerStart); - assert.ok(eventIndex("Starting generate:sync") < compilerStart); - assert.ok(eventIndex("Starting generate:vendor") < compilerStart); - assert.ok(eventIndex("Finished generate:extension ") < eventIndex("Starting generate:extension-test")); - assert.doesNotMatch(stdout, /\$ go generate|npm run --silent cache/); - assert.match(stdout, /Unicode tables/); - assert.match(stdout, /Enums are up to date|All generated values match Go/); - assert.match(stdout, /Sync API is up to date|Formatting\.\.\./); - assert.match(stdout, /LSP bindings are up to date|Successfully generated .*lsp_generated\.go/); - assert.match(stdout, /generateLocBundle/); - assert.match(stdout, /generateLocTest/); - assert.deepEqual( - fs.readFileSync(path.join(root, "packages/typescript/vendor/vscode-jsonrpc/package.json")), - fs.readFileSync(path.join(root, "node_modules/vscode-jsonrpc/package.json")), - ); - const lspOutputs = ["tsc/internal/lsp/lsproto/lsp_generated.go", "packages/typescript/src/vscode/protocol.generated.ts"].map(file => path.join(root, file)); - const timestamps = lspOutputs.map(file => fs.statSync(file).mtimeMs); - const current = await x("npx", ["hereby", "generate:lsp"], { throwOnError: true, nodeOptions: { cwd: root } }); - assert.match(current.stdout, /LSP bindings are up to date/); - assert.doesNotMatch(current.stdout, /Using vscode-languageclient/); - assert.deepEqual(lspOutputs.map(file => fs.statSync(file).mtimeMs), timestamps); -}); - -test("localization and vendoring preserve current outputs", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = (force = false) => x("npx", ["hereby", "generate:extension-test", "generate:vendor", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const outputs = fs.globSync([ - "packages/vscode-typescript/l10n/*.json", - "packages/vscode-typescript/package.nls.qps-ploc.json", - "packages/typescript/vendor/vscode-jsonrpc/**/*", - ], { cwd: root }).map(file => path.join(root, file)).filter(file => fs.statSync(file).isFile()); - const contents = outputs.map(file => fs.readFileSync(file)); - context.after(() => { - for (const [index, file] of outputs.entries()) fs.writeFileSync(file, contents[index]); - }); - const oldTime = new Date("2000-01-01T00:00:00Z"); - for (const file of outputs) fs.utimesSync(file, oldTime, oldTime); - const timestamps = outputs.map(file => fs.statSync(file).mtimeMs); - await generate(); - assert.deepEqual(outputs.map(file => fs.statSync(file).mtimeMs), timestamps); - await generate(true); - for (const file of outputs) assert.notEqual(fs.statSync(file).mtimeMs, oldTime.getTime()); - for (const [index, file] of outputs.entries()) { - if (index % 2) fs.rmSync(file); - else fs.writeFileSync(file, "modified"); - } - await generate(); - assert.deepEqual(outputs.map(file => fs.readFileSync(file)), contents); -}); - -test("localization tracks source membership and package strings", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const extension = path.join(root, "packages/vscode-typescript"); - const source = path.join(extension, "src/cache-probe.ts"); - const packageStrings = path.join(extension, "package.nls.json"); - const bundle = path.join(extension, "l10n/bundle.l10n.json"); - const pseudoBundle = path.join(extension, "l10n/bundle.l10n.qps-ploc.json"); - const pseudoPackage = path.join(extension, "package.nls.qps-ploc.json"); - const originals = [packageStrings, bundle, pseudoBundle, pseudoPackage].map(file => [file, fs.readFileSync(file)] as const); - assert.equal(fs.existsSync(source), false); - context.after(() => { - fs.rmSync(source, { force: true }); - for (const [file, content] of originals) fs.writeFileSync(file, content); - }); - const generate = () => x("npx", ["hereby", "generate:extension-test"], { throwOnError: true, nodeOptions: { cwd: root } }); - for (const message of ["Codegen cache probe", "Updated codegen cache probe"]) { - fs.writeFileSync(source, `import * as vscode from "vscode";\nexport const message = vscode.l10n.t(${JSON.stringify(message)});\n`); - await generate(); - assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(bundle, "utf8")), message)); - assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(pseudoBundle, "utf8")), message)); - } - fs.rmSync(source); - await generate(); - assert.deepEqual(fs.readFileSync(bundle), originals[1][1]); - assert.deepEqual(fs.readFileSync(pseudoBundle), originals[2][1]); - const strings = JSON.parse(fs.readFileSync(packageStrings, "utf8")); - strings["cache.probe"] = "Package cache probe"; - fs.writeFileSync(packageStrings, JSON.stringify(strings)); - await generate(); - assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(pseudoPackage, "utf8")), "cache.probe")); -}); - -test("vendoring tracks package versions and supports force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const source = path.join(root, "node_modules/vscode-jsonrpc/lib/cache-probe.txt"); - const destination = path.join(root, "packages/typescript/vendor/vscode-jsonrpc/lib/cache-probe.txt"); - const sourceManifest = path.join(root, "node_modules/vscode-jsonrpc/package.json"); - const destinationManifest = path.join(root, "packages/typescript/vendor/vscode-jsonrpc/package.json"); - const originalSourceManifest = fs.readFileSync(sourceManifest); - const originalDestinationManifest = fs.readFileSync(destinationManifest); - assert.equal(fs.existsSync(source), false); - assert.equal(fs.existsSync(destination), false); - context.after(() => { - fs.rmSync(source, { force: true }); - fs.rmSync(destination, { force: true }); - fs.writeFileSync(sourceManifest, originalSourceManifest); - fs.writeFileSync(destinationManifest, originalDestinationManifest); - }); - const generate = (force = false) => x("npx", ["hereby", "generate:vendor", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - fs.writeFileSync(source, "first"); - await generate(); - assert.equal(fs.existsSync(destination), false); - const manifest = JSON.parse(originalSourceManifest.toString()); - manifest.version += "-cache-probe"; - fs.writeFileSync(sourceManifest, JSON.stringify(manifest)); - await generate(); - assert.equal(fs.readFileSync(destination, "utf8"), "first"); - assert.equal(JSON.parse(fs.readFileSync(destinationManifest, "utf8")).version, manifest.version); - fs.writeFileSync(source, "changed"); - await generate(); - assert.equal(fs.readFileSync(destination, "utf8"), "first"); - await generate(true); - assert.equal(fs.readFileSync(destination, "utf8"), "changed"); - fs.rmSync(source); - await generate(); - assert.equal(fs.readFileSync(destination, "utf8"), "changed"); - fs.rmSync(destinationManifest); - await generate(); - assert.equal(fs.existsSync(destination), false); - assert.equal(JSON.parse(fs.readFileSync(destinationManifest, "utf8")).version, manifest.version); -}); - -test("bundled generation skips unchanged library outputs", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = () => x("go", ["-C", "./tsc", "generate", "./internal/bundled"], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const files = ["libs_generated.go", "embed_generated.go"].map(file => path.join(root, "tsc/internal/bundled", file)); - const timestamps = files.map(file => fs.statSync(file).mtimeMs); - assert.match((await generate()).stdout, /codegen outputs are already up to date/); - assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); -}); - -test("bundled generation tracks libraries, validates inputs, and supports force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_bundled-probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); - const notice = path.join(directory, "CopyrightNotice.txt"); - const libs = path.join(directory, "libs"); - fs.mkdirSync(libs); - fs.writeFileSync(notice, "Fixture notice\n\n"); - const library = path.join(libs, "lib.first.d.ts"); - const content = "Fixture notice\n\n\ndeclare const first: string;\n"; - fs.writeFileSync(library, content); - const options = { - cwd: directory, - inputs: [path.join(root, "tsc/internal/bundled/generate.go"), "CopyrightNotice.txt", "libs/*"], - outputs: ["libs_generated.go", "embed_generated.go"], - commands: [["go", "run", path.join(root, "tsc/internal/bundled/generate.go")]], - }; - const generate = (force = false) => cache({ ...options, force }); - await generate(); - const files = ["libs_generated.go", "embed_generated.go"].map(file => path.join(directory, file)); - const originals = files.map(file => fs.readFileSync(file)); - assert.equal(await generate(), true); - const added = path.join(libs, "lib.second.d.ts"); - fs.writeFileSync(added, content); - assert.equal(await generate(), false); - for (const file of files) assert.match(fs.readFileSync(file, "utf8"), /lib\.second\.d\.ts/); - fs.rmSync(added); - assert.equal(await generate(), false); - for (const [index, file] of files.entries()) { - assert.deepEqual(fs.readFileSync(file), originals[index]); - fs.writeFileSync(file, "modified"); - assert.equal(await generate(), false); - assert.deepEqual(fs.readFileSync(file), originals[index]); - fs.rmSync(file, { recursive: true, maxRetries: 10 }); - assert.equal(await generate(), false); - assert.deepEqual(fs.readFileSync(file), originals[index]); - } - fs.writeFileSync(library, content.replace("string", "number")); - assert.equal(await generate(), false); - fs.writeFileSync(library, content.replaceAll("\n", "\r\n")); - await assert.rejects(generate()); - fs.writeFileSync(library, content); - assert.equal(await generate(), false); - fs.mkdirSync(path.join(libs, "unexpected")); - await assert.rejects(generate()); - fs.rmdirSync(path.join(libs, "unexpected")); - assert.equal(await generate(), false); - fs.writeFileSync(notice, "Changed fixture notice\n\n"); - await assert.rejects(generate()); - fs.writeFileSync(notice, "Fixture notice\n\n"); - assert.equal(await generate(), false); - assert.equal(await generate(true), false); - assert.equal(await generate(), true); -}); - -test("stringer generation tracks declared inputs, options, output, and force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_stringer-probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const source = path.join(directory, "kind.go"); - const extra = path.join(directory, "extra.go"); - const output = path.join(directory, "kind_stringer_generated.go"); - fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); - const generate = (trimPrefix = false, force = false) => - cache({ - cwd: directory, - inputs: ["kind.go"], - outputs: ["kind_stringer_generated.go"], - env: { GOFILE: "kind.go" }, - force, - commands: [ - ["go", "tool", "golang.org/x/tools/cmd/stringer", "-type=Kind", "-output=kind_stringer_generated.go", ...(trimPrefix ? ["-trimprefix=Kind"] : [])], - ["dprint", "fmt", "kind_stringer_generated.go"], - ], - }); - await generate(); - const timestamp = fs.statSync(output).mtimeMs; - assert.equal(await generate(), true); - assert.equal(fs.statSync(output).mtimeMs, timestamp); - fs.writeFileSync(extra, "package probe\n\nconst Unrelated = 1\n"); - assert.equal(await generate(), true); - fs.appendFileSync(source, "\nconst KindSecond Kind = 1\n"); - assert.equal(await generate(), false); - assert.match(fs.readFileSync(output, "utf8"), /KindSecond/); - fs.rmSync(extra); - assert.equal(await generate(), true); - fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); - assert.equal(await generate(), false); - assert.doesNotMatch(fs.readFileSync(output, "utf8"), /KindSecond/); - assert.equal(await generate(true), false); - assert.match(fs.readFileSync(output, "utf8"), /_Kind_name = "First"/); - assert.equal(await generate(true), true); - fs.appendFileSync(output, "\n"); - assert.equal(await generate(true), false); - fs.rmSync(output); - assert.equal(await generate(true), false); - assert.equal(await generate(true, true), false); - assert.equal(await generate(true), true); - fs.appendFileSync(source, "\nconst KindInvalid Kind = missing\n"); - await assert.rejects(generate(true)); - fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); - assert.equal(await generate(true), false); - assert.equal(await generate(true), true); -}); - -test("moq generation tracks interface inputs, output, and force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_moq-probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const source = path.join(directory, "client.go"); - const base = path.join(directory, "base.go"); - fs.mkdirSync(path.join(directory, "mock")); - const output = path.join(directory, "mock/mock_generated.go"); - fs.writeFileSync(base, "package probe\n\ntype Base interface { Read() string }\n"); - fs.writeFileSync(source, "package probe\n\ntype Client interface { Base }\n"); - const options = { - cwd: directory, - inputs: ["client.go", "base.go"], - outputs: ["mock/mock_generated.go"], - commands: [ - ["go", "tool", "github.com/matryer/moq", "-stub", "-fmt=goimports", "-pkg=mock", "-out=mock/mock_generated.go", ".", "Client"], - ["dprint", "fmt", "mock/mock_generated.go"], - ], - }; - const generate = (force = false) => cache({ ...options, force }); - await generate(); - const timestamp = fs.statSync(output).mtimeMs; - assert.equal(await generate(), true); - assert.equal(fs.statSync(output).mtimeMs, timestamp); - fs.writeFileSync(base, "package probe\n\ntype Base interface { Read() string; Close() error }\n"); - assert.equal(await generate(), false); - assert.match(fs.readFileSync(output, "utf8"), /CloseFunc/); - fs.rmSync(output); - assert.equal(await generate(), false); - assert.equal(await generate(true), false); - assert.equal(await generate(), true); -}); - -test("diagnostic generation tracks Go and locale outputs and supports force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_diagnostics-probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const output = path.join(directory, "diagnostics_generated.go"); - const source = path.join(directory, "diagnosticMessages.generated.json"); - const localized = path.join(directory, "loc_generated.go"); - const locDirectory = path.join(directory, "loc"); - fs.mkdirSync(locDirectory); - const handbacks = fs.globSync("loc/*.generated.json", { cwd: path.join(root, "tsc/internal/diagnostics") }); - for (const handback of handbacks) { - fs.copyFileSync(path.join(root, "tsc/internal/diagnostics", handback), path.join(locDirectory, path.basename(handback))); - } - const project = path.join(directory, "tools/LocProject.json"); - fs.mkdirSync(path.dirname(project)); - const projectData = JSON.parse(fs.readFileSync(path.join(root, "tools/LocProject.json"), "utf8")); - projectData.Projects[0].LocItems = [projectData.Projects[0].LocItems[0]]; - projectData.Projects[0].LocItems[0].SourceFile = "diagnosticMessages.generated.json"; - fs.writeFileSync(project, JSON.stringify(projectData)); - const options = { - cwd: path.join(root, "tsc/internal/diagnostics"), - inputs: ["generate.go", "diagnosticMessages.json", project, "../{collections,json}/*.go", path.join(locDirectory, "*.generated.json")], - exclude: ["**/*_test.go"], - outputs: [output, source, localized, path.join(locDirectory, "*.json.gz")], - commands: [ - ["go", "run", "generate.go", "-diagnostics", output, "-loc", localized, "-locdir", locDirectory, "-locproject", project, "-locsource", source], - ["dprint", "fmt", output, localized], - ], - }; - const generate = (force = false) => cache({ ...options, force }); - await generate(); - const locales = fs.globSync("loc/*.json.gz", { cwd: directory }).map(file => path.join(directory, file)); - assert.ok(locales.length > 0); - const files = [output, source, localized, ...locales]; - const timestamps = files.map(file => fs.statSync(file).mtimeMs); - assert.equal(await generate(), true); - assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); - fs.appendFileSync(project, "\n"); - assert.equal(await generate(), false); - fs.appendFileSync(path.join(locDirectory, path.basename(handbacks[0])), "\n"); - assert.equal(await generate(), false); - const archive = fs.readFileSync(locales[0]); - fs.rmSync(locales[0]); - assert.equal(await generate(), false); - assert.deepEqual(fs.readFileSync(locales[0]), archive); - fs.writeFileSync(locales[0], "modified"); - assert.equal(await generate(), false); - assert.deepEqual(fs.readFileSync(locales[0]), archive); - const unexpected = path.join(directory, "loc/unexpected.json.gz"); - fs.writeFileSync(unexpected, "unexpected"); - assert.equal(await generate(), false); - assert.equal(fs.existsSync(unexpected), false); - for (const locale of locales) fs.rmSync(locale); - assert.equal(await generate(), false); - assert.deepEqual(fs.readFileSync(locales[0]), archive); - fs.rmSync(localized); - assert.equal(await generate(), false); - assert.equal(await generate(true), false); - assert.equal(await generate(), true); -}); - -test("Unicode generation skips unchanged tables and formatting", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = () => x("go", ["-C", "./tsc", "generate", "./internal/stringutil"], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const files = ["js_case_generated.go", "identifier_parts_generated.go"].map(file => path.join(root, "tsc/internal/stringutil", file)); - const timestamps = files.map(file => fs.statSync(file).mtimeMs); - const current = await generate(); - assert.match(current.stdout, /Unicode tables are up to date\./); - assert.doesNotMatch(current.stdout, /Formatted/); - assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); -}); - -test("Unicode generation repairs outputs and supports force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_unicode-probe-")); - context.after(() => fs.rmSync(directory, { recursive: true, force: true })); - const command = [path.join(root, "tsc/internal/stringutil/_scripts/generate-unicode-data.mts"), "--outDir", directory]; - const generate = (...args: string[]) => x(process.execPath, [...command, ...args], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const files = ["js_case_generated.go", "identifier_parts_generated.go"].map(file => path.join(directory, file)); - const originals = files.map(file => fs.readFileSync(file)); - const timestamps = files.map(file => fs.statSync(file).mtimeMs); - assert.match((await generate()).stdout, /Unicode tables are up to date\./); - assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); - for (const [index, file] of files.entries()) { - assert.deepEqual(originals[index], fs.readFileSync(path.join(root, "tsc/internal/stringutil", path.basename(file)))); - fs.writeFileSync(file, "modified"); - assert.match((await generate()).stdout, /Generated Unicode tables\./); - assert.deepEqual(fs.readFileSync(file), originals[index]); - fs.rmSync(file); - assert.match((await generate()).stdout, /Generated Unicode tables\./); - assert.deepEqual(fs.readFileSync(file), originals[index]); - } - const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(files[0]).digest("hex") + ".json"); - context.after(() => fs.rmSync(cacheFile, { force: true })); - fs.rmSync(cacheFile); - assert.match((await generate()).stdout, /Generated Unicode tables\./); - assert.match((await generate("--force")).stdout, /Generated Unicode tables\./); - assert.match((await generate()).stdout, /Unicode tables are up to date\./); - const forced = await x(process.execPath, command, { - throwOnError: true, - nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, - }); - assert.match(forced.stdout, /Generated Unicode tables\./); - const overridden = await x(process.execPath, [...command, "--no-force"], { - throwOnError: true, - nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, - }); - assert.match(overridden.stdout, /Unicode tables are up to date\./); -}); - -test("enum generation skips unchanged outputs and Go verification", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = (force = false) => x("npx", ["hereby", "generate:enums", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const files = [ - ...fs.globSync("packages/typescript/src/enums/*.ts", { cwd: root }), - "tsc/internal/api/enum_values_generated.go", - ].map(file => path.join(root, file)); - const timestamps = files.map(file => fs.statSync(file).mtimeMs); - const { stdout } = await generate(); - assert.match(stdout, /Enums are up to date\./); - assert.doesNotMatch(stdout, /Getting values from go/); - assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); - const forced = await generate(true); - assert.match(forced.stdout, /All generated values match Go\./); - assert.match((await generate()).stdout, /Enums are up to date\./); - const verifier = path.join(root, "tsc/internal/api/enum_values_generated.go"); - const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(verifier).digest("hex") + ".json"); - fs.rmSync(cacheFile); - const regenerated = await generate(); - assert.match(regenerated.stdout, /All generated values match Go\./); - assert.match((await generate()).stdout, /Enums are up to date\./); - - const astSchema = path.join(root, "tools/scripts/tsc/ast.json"); - const originalSchema = fs.readFileSync(astSchema, "utf8"); - const goKinds = path.join(root, "tsc/internal/ast/kind_generated.go"); - const goKindsTimestamp = fs.statSync(goKinds).mtimeMs; - try { - fs.writeFileSync(astSchema, originalSchema + "\n"); - assert.match((await generate()).stdout, /All generated values match Go\./); - assert.equal(fs.statSync(goKinds).mtimeMs, goKindsTimestamp); - assert.match((await generate()).stdout, /Enums are up to date\./); - } - finally { - fs.writeFileSync(astSchema, originalSchema); - await generate(); - } -}); - -test("AST generation forwards force to schema generators and the kind stringer", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = (force = false) => x("npx", ["hereby", "generate:ast", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const output = path.join(root, "tsc/internal/ast/kind_stringer_generated.go"); - const oldTime = new Date("2000-01-01T00:00:00Z"); - fs.utimesSync(output, oldTime, oldTime); - const forced = await generate(true); - assert.match(forced.stdout, /Wrote .*encoder_generated\.go/); - assert.match(forced.stdout, /Wrote .*ast_generated\.go/); - assert.match(forced.stdout, /Generated .*ast\.generated\.ts/); - assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); - const timestamp = fs.statSync(output).mtimeMs; - assert.doesNotMatch(forced.stdout, /\$ node .*tools\/scripts\/tsc\/generate\.ts/); - const current = await generate(); - assert.doesNotMatch(current.stdout, /(?:Wrote|Generated) /); - assert.match(current.stdout, /codegen outputs are already up to date/); - assert.equal(fs.statSync(output).mtimeMs, timestamp); -}); - -test("package generation forwards force to AST, encoder, and sync generators", async () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const generate = (force = false) => x("npm", ["run", "-w", "@typescript/typescript", "generate", ...(force ? ["--", "--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const forced = await generate(true); - assert.match(forced.stdout, /Generated .*ast\.generated\.ts/); - assert.match(forced.stdout, /Wrote .*encoder_generated\.go/); - assert.match(forced.stdout, /Formatting\.\.\./); - const current = await generate(); - assert.doesNotMatch(current.stdout, /(?:Wrote|Generated) |Formatting\.\.\./); - assert.match(current.stdout, /Sync API is up to date\./); -}); - -test("API protocol generation caches formatted output and supports force", async context => { - const root = path.resolve(import.meta.dirname, "../../.."); - const output = path.join(root, "packages/typescript/src/api/proto.generated.ts"); - const compilerOptions = path.join(root, "packages/typescript/src/api/compilerOptions.generated.ts"); - const compilerOptionsTimestamp = fs.statSync(compilerOptions).mtimeMs; - const generate = (force = false) => x("npx", ["hereby", "generate:api", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); - await generate(); - const timestamp = fs.statSync(output).mtimeMs; - const current = await generate(); - assert.match(current.stdout, /codegen outputs are already up to date/); - assert.doesNotMatch(current.stdout, /\$ node .*cache\.mts/); - assert.equal(fs.statSync(output).mtimeMs, timestamp); - const unrelated = path.join(root, "tsc/internal/parser/codegen_cache_probe.go"); - assert.equal(fs.existsSync(unrelated), false); - context.after(() => fs.rmSync(unrelated, { force: true })); - fs.writeFileSync(unrelated, "package parser\n"); - assert.match((await generate()).stdout, /codegen outputs are already up to date/); - fs.rmSync(unrelated); - const schema = path.join(root, "tsc/internal/api/requestfilesystem/codegen_cache_probe.go"); - assert.equal(fs.existsSync(schema), false); - const original = fs.readFileSync(output, "utf8"); - context.after(async () => { - if (fs.existsSync(schema)) { - fs.rmSync(schema); - await generate(true); - } - }); - fs.writeFileSync(schema, 'package requestfilesystem\n\nconst KindCodegenCacheProbe Kind = "codegen-cache-probe"\n'); - await generate(); - assert.match(fs.readFileSync(output, "utf8"), /"codegen-cache-probe"/); - fs.rmSync(schema); - await generate(); - assert.equal(fs.readFileSync(output, "utf8"), original); - const oldTime = new Date("2000-01-01T00:00:00Z"); - fs.utimesSync(output, oldTime, oldTime); - await generate(true); - assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); - assert.equal(fs.statSync(compilerOptions).mtimeMs, compilerOptionsTimestamp, "Protocol generation must not regenerate compiler option definitions"); - assert.match((await generate()).stdout, /codegen outputs are already up to date/); - fs.utimesSync(output, oldTime, oldTime); - const nested = await x("go", ["-C", "./tsc", "generate", "./internal/api"], { - throwOnError: true, - nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, - }); - assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); - assert.match((await generate()).stdout, /codegen outputs are already up to date/); -}); +import assert from "node:assert/strict"; +import { createHash } from "node:crypto"; +import fs from "node:fs"; +import { syncBuiltinESMExports } from "node:module"; +import os from "node:os"; +import path from "node:path"; +import { test } from "node:test"; +import { stripVTControlCharacters } from "node:util"; +import { runInNewContext } from "node:vm"; +import { x } from "tinyexec"; +import ts from "typescript"; +import cache from "./cache.mts"; +import { + defaultCacheDirectory, + GeneratedFile, +} from "./generatedFile.mts"; +import { + enableFileFingerprintCache, + getFileFingerprint, + repoRoot, + run, +} from "./utils.mts"; + +test("validate generates before building and selects the generation scope", async () => { + const fileName = path.resolve(import.meta.dirname, "../../../Herebyfile.mjs"); + const source = ts.createSourceFile(fileName, fs.readFileSync(fileName, "utf8"), ts.ScriptTarget.Latest, true, ts.ScriptKind.JS); + const declaration = source.statements.filter(ts.isVariableStatement) + .flatMap(statement => statement.declarationList.declarations) + .find(declaration => declaration.name.getText(source) === "validate"); + assert.ok(declaration?.initializer); + for (const options of [{}, { api: true }, { all: true }]) { + const calls: string[] = []; + const action = (name: string) => async () => { + calls.push(name); + }; + const generate = { run: action("generate") }; + const generateGo = { run: action("generate:go") }; + const build = { run: action("build") }; + const validation = runInNewContext(declaration.initializer.getText(source), { + task: (spec: unknown) => spec, + options, + generate, + generateGo, + build, + builtLocal: "./built/local", + generateLibs: action("lib"), + buildTsc: action("build"), + getReleaseBuildFlags: () => [], + runGenerateGo: action("generate:go"), + runGenerateEnums: action("generate:enums"), + runGenerateAPI: action("generate:api"), + runGenerateExtension: action("generate:extension"), + runGenerateVendor: action("generate:vendor"), + runBuildAPITests: async (generate = true) => { + if (generate) calls.push("generate:sync"); + calls.push("build:api:test"); + }, + runTests: action("test:tsc"), + runTestExtension: action("test:extension"), + runTestAPI: action("test:api"), + runTestBenchmarks: action("test:benchmarks"), + runTestTools: action("test:tools"), + run: async (command: string, args: string[]) => { + assert.equal(command, "node"); + assert.deepEqual(Array.from(args), ["--test", "./tools/scripts/tsc/options.test.ts"]); + calls.push("test:options"); + }, + runSmokeTest: action("test:smoke"), + runLint: action("lint"), + runFormat: action("format"), + }) as { dependencies: { run: () => Promise; }[]; run: () => Promise; }; + await Promise.all(validation.dependencies.map(dependency => dependency.run())); + await validation.run(); + assert.equal(calls[0], "all" in options ? "generate" : "generate:go"); + assert.ok(calls.indexOf("build") > 0); + assert.ok(calls.indexOf("build") < calls.indexOf("test:tsc")); + assert.equal(calls.includes("test:api"), "api" in options || "all" in options); + assert.equal(calls.includes("test:tools"), "all" in options); + assert.equal(calls.includes("test:options"), "all" in options); + if ("all" in options) { + assert.deepEqual(calls.filter(name => name.startsWith("generate")), ["generate"]); + } + } +}); + +test("generator options preserve repeated inputs and force overrides", async () => { + const { parseGeneratorArgs, resolveForce } = await import("./utils.mts"); + const options = { type: { type: "string" }, input: { type: "string", multiple: true } } as const; + const args = ["--type", "Kind", "--input=kind.go", "--input", "extra.go", "--force"]; + const parsed = parseGeneratorArgs(options, args); + assert.equal(parsed.values.type, "Kind"); + assert.deepEqual(parsed.values.input, ["kind.go", "extra.go"]); + assert.equal(parsed.force, true); + assert.equal(resolveForce(undefined, "ON"), true); + assert.equal(resolveForce(undefined, "0"), false); + assert.equal(resolveForce(false, "1"), false); + assert.equal(parseGeneratorArgs({}, ["--no-force"]).force, false); +}); + +test("generated files are current only while their inputs and formatted output match", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const input = path.join(directory, "input.ts"); + const output = path.join(directory, "output.ts"); + const cache = path.join(directory, "cache"); + fs.writeFileSync(input, "input"); + const generated = () => new GeneratedFile(output, [input], cache); + let file = generated(); + assert.equal(file.isCurrent(), false); + file.write("unformatted"); + fs.writeFileSync(output, "formatted"); + file.markCurrent(); + assert.equal(generated().isCurrent(), true); + assert.equal(generated().isCurrent(true), false); + file.invalidate(); + assert.equal(generated().isCurrent(), false); + file.write("formatted"); + file.markCurrent(); + assert.equal(generated().isCurrent(), true); + fs.utimesSync(input, new Date(), new Date()); + assert.equal(generated().isCurrent(), true); + fs.writeFileSync(input, "changed"); + assert.equal(generated().isCurrent(), false); + fs.writeFileSync(input, "input"); + assert.equal(generated().isCurrent(), true); + fs.writeFileSync(output, "edited"); + assert.equal(generated().isCurrent(), false); + file = generated(); + file.write("formatted"); + assert.equal(generated().isCurrent(), false); + file.markCurrent(); + assert.equal(generated().isCurrent(), true); + const dependency = path.join(directory, "generator.ts"); + fs.writeFileSync(dependency, "generator"); + assert.equal(new GeneratedFile(output, [input, dependency], cache).isCurrent(), false); + fs.rmSync(dependency); + assert.throws(() => new GeneratedFile(output, [input, dependency], cache), { code: "ENOENT" }); + fs.rmSync(output); + assert.equal(generated().isCurrent(), false); +}); + +test("generated files share input fingerprints and refresh changed inputs", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const input = path.join(directory, "input.ts"); + const output = path.join(directory, "output.ts"); + const cache = path.join(directory, "cache"); + fs.writeFileSync(input, "first"); + const reads = context.mock.method(fs, "readFileSync"); + syncBuiltinESMExports(); + context.after(() => { + reads.mock.restore(); + syncBuiltinESMExports(); + }); + const inputReads = () => reads.mock.calls.filter(call => call.arguments[0] === input).length; + const first = new GeneratedFile(output, [input], cache); + new GeneratedFile(path.join(directory, "other.ts"), [input], cache); + assert.equal(inputReads(), 1); + first.write("generated"); + first.markCurrent(); + const timestamp = fs.statSync(input); + fs.writeFileSync(input, "other"); + fs.utimesSync(input, timestamp.atime, timestamp.mtime); + assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), false); + fs.rmSync(input); + assert.throws(() => new GeneratedFile(output, [input], cache), { code: "ENOENT" }); + fs.writeFileSync(input, "first"); + assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), true); +}); + +test("invocation fingerprints reuse metadata and invalidate writes and commands", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + context.after(enableFileFingerprintCache()); + const input = path.join(directory, "input.ts"); + const output = path.join(directory, "output.ts"); + const metadata = path.join(directory, "cache"); + const inputFile = new GeneratedFile(input, [], metadata); + inputFile.write("first"); + inputFile.markCurrent(); + const reads = context.mock.method(fs, "readFileSync"); + const stats = context.mock.method(fs, "statSync"); + syncBuiltinESMExports(); + context.after(() => { + reads.mock.restore(); + stats.mock.restore(); + syncBuiltinESMExports(); + }); + const generated = new GeneratedFile(output, [input], metadata); + new GeneratedFile(path.join(directory, "other.ts"), [input], metadata); + getFileFingerprint(path.relative(process.cwd(), input)); + assert.equal(reads.mock.calls.filter(call => call.arguments[0] === input).length, 1); + assert.equal(stats.mock.calls.filter(call => call.arguments[0] === input).length, 1); + generated.write("generated"); + generated.markCurrent(); + const firstHash = getFileFingerprint(input); + inputFile.write("other"); + assert.notEqual(getFileFingerprint(input), firstHash); + assert.equal(new GeneratedFile(output, [input], metadata).isCurrent(), false); + const stale = new GeneratedFile(output, [input], metadata); + fs.writeFileSync(input, "third"); + stale.write("stale"); + stale.markCurrent(); + assert.equal(new GeneratedFile(output, [input], metadata).isCurrent(), false); + for (const failure of [false, true]) { + const before = getFileFingerprint(input); + const content = failure ? "failed command" : "successful command"; + const command = run(process.execPath, ["-e", `require('node:fs').writeFileSync(process.argv[1], ${JSON.stringify(content)}); process.exit(${failure ? 1 : 0});`, input]); + if (failure) await assert.rejects(command); + else await command; + assert.notEqual(getFileFingerprint(input), before); + assert.equal(getFileFingerprint(input), createHash("sha256").update(content).digest("hex")); + } + const running = run(process.execPath, ["-e", "process.exit(0)"]); + try { + const before = getFileFingerprint(input); + fs.writeFileSync(input, "changed while a command is running"); + assert.notEqual(getFileFingerprint(input), before); + } + finally { + await running; + } +}); + +test("fingerprint cache scopes can overlap", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const input = path.join(directory, "input.ts"); + fs.writeFileSync(input, "input"); + const stats = context.mock.method(fs, "statSync"); + syncBuiltinESMExports(); + context.after(() => { + stats.mock.restore(); + syncBuiltinESMExports(); + }); + const disableFirst = enableFileFingerprintCache(); + const disableSecond = enableFileFingerprintCache(); + try { + getFileFingerprint(input); + getFileFingerprint(input); + assert.equal(stats.mock.callCount(), 1); + disableFirst(); + getFileFingerprint(input); + getFileFingerprint(input); + assert.equal(stats.mock.callCount(), 2); + disableSecond(); + getFileFingerprint(input); + getFileFingerprint(input); + assert.equal(stats.mock.callCount(), 4); + } + finally { + disableSecond(); + disableFirst(); + } +}); + +test("command cache snapshots and generated files share invocation fingerprints", async context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-fingerprint-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const input = path.join(directory, "input.txt"); + fs.writeFileSync(input, "input"); + const options = { + cwd: directory, + inputs: ["input.txt"], + outputs: ["output.txt"], + commands: [[process.execPath, "-e", "require('node:fs').writeFileSync('output.txt', 'generated')"]], + }; + assert.equal(await cache(options), false); + context.after(enableFileFingerprintCache()); + const reads = context.mock.method(fs, "readFileSync"); + syncBuiltinESMExports(); + context.after(() => { + reads.mock.restore(); + syncBuiltinESMExports(); + }); + assert.equal(await cache(options), true); + assert.equal(await cache(options), true); + new GeneratedFile(path.join(directory, "other.txt"), [input]); + assert.equal(reads.mock.calls.filter(call => call.arguments[0] === input).length, 1); +}); + +test("changing inputs during generation does not mark stale output current", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const input = path.join(directory, "input.ts"); + const output = path.join(directory, "output.ts"); + const cache = path.join(directory, "cache"); + fs.writeFileSync(input, "before"); + const file = new GeneratedFile(output, [input], cache); + file.write("generated"); + fs.writeFileSync(input, "after"); + file.markCurrent(); + assert.equal(new GeneratedFile(output, [input], cache).isCurrent(), false); +}); + +test("default metadata is isolated by repository worktree", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const output = path.join(directory, "output.ts"); + assert.equal(path.basename(defaultCacheDirectory), createHash("sha256").update(repoRoot).digest("hex")); + const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(output).digest("hex") + ".json"); + context.after(() => fs.rmSync(cacheFile, { force: true })); + const file = new GeneratedFile(output, []); + file.write("generated"); + file.markCurrent(); + assert.equal(fs.existsSync(cacheFile), true); + assert.equal(new GeneratedFile(output, []).isCurrent(), true); + fs.rmSync(cacheFile); + assert.equal(new GeneratedFile(output, []).isCurrent(), false); + file.markCurrent(); + assert.equal(new GeneratedFile(output, []).isCurrent(), true); +}); + +test("metadata directories can disappear during generation", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const output = path.join(directory, "output.ts"); + const cache = path.join(directory, "cache"); + const file = new GeneratedFile(output, [], cache); + file.write("generated"); + file.markCurrent(); + fs.rmSync(cache, { recursive: true }); + assert.equal(file.isCurrent(), false); + file.write("regenerated"); + file.markCurrent(); + assert.equal(new GeneratedFile(output, [], cache).isCurrent(), true); +}); + +test("generated files track each output independently", context => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "tsgo-codegen-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const files = ["output.go", "locale.gz"].map(file => new GeneratedFile(path.join(directory, file), [], path.join(directory, "cache"))); + for (const file of files) { + file.write("generated"); + file.markCurrent(); + } + assert.equal(files.every(file => file.isCurrent()), true); + fs.writeFileSync(files[1].fileName, "modified"); + assert.equal(files[0].isCurrent(), true); + assert.equal(files[1].isCurrent(), false); + fs.writeFileSync(files[1].fileName, "generated"); + assert.equal(files.every(file => file.isCurrent()), true); + fs.rmSync(files[1].fileName); + assert.equal(files[0].isCurrent(), true); + assert.equal(files[1].isCurrent(), false); + files[1].write("generated"); + files[1].markCurrent(); + files[1].invalidate(); + assert.equal(files[0].isCurrent(), true); + assert.equal(files[1].isCurrent(), false); +}); + +test("generate:go runs Go generators directly and shares caches with Go fallback", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = () => x("npx", ["hereby", "generate:go"], { throwOnError: true, nodeOptions: { cwd: root } }); + const first = await generate(); + assert.doesNotMatch(first.stdout, /\$ go generate|npm run --silent cache|\$ node .*generate-unicode-data/); + const files = fs.globSync(["tsc/internal/**/*generated.go", "packages/typescript/src/api/*.generated.ts", "packages/typescript/src/enums/*.ts", "packages/typescript/schemas/*.schema.json"], { cwd: root }); + const timestamps = files.map(file => fs.statSync(path.join(root, file)).mtimeMs); + const current = await generate(); + assert.doesNotMatch(current.stdout, /Generated codegen outputs|Generated Unicode tables/); + assert.match(current.stdout, /Unicode tables are up to date/); + assert.deepEqual(files.map(file => fs.statSync(path.join(root, file)).mtimeMs), timestamps); + const fallback = await x("go", ["-C", "./tsc", "generate", "./internal/diagnostics"], { throwOnError: true, nodeOptions: { cwd: root } }); + assert.equal(fallback.stdout.match(/codegen outputs are already up to date/g)?.length, 2); + const nested = await x("npx", ["hereby", "generate:compileroptions"], { throwOnError: true, nodeOptions: { cwd: path.join(root, "tsc/internal/core") } }); + assert.equal(nested.stdout.match(/codegen outputs are already up to date/g)?.length, 4); + assert.match(nested.stdout, /Enums are up to date/); +}); + +test("generate:go generates new option diagnostics before Go-dependent generators", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = async () => { + const result = await x("npx", ["hereby", "generate:go"], { nodeOptions: { cwd: root } }); + assert.equal(result.exitCode, 0, result.stdout + result.stderr); + return result; + }; + await generate(); + const metadataFile = path.join(root, "tools/scripts/tsc/options.ts"); + const diagnosticsFile = path.join(root, "tsc/internal/diagnostics/diagnosticMessages.json"); + const protocolFile = path.join(root, "packages/typescript/src/api/proto.generated.ts"); + const originalMetadata = fs.readFileSync(metadataFile, "utf8"); + const originalDiagnostics = fs.readFileSync(diagnosticsFile, "utf8"); + const originalProtocol = fs.readFileSync(protocolFile, "utf8"); + const messages: Record = JSON.parse(originalDiagnostics); + const message = "Codegen ordering probe"; + assert.equal(messages[message], undefined); + messages[message] = { category: "Message", code: Math.max(...Object.values(messages).map(message => message.code)) + 1 }; + const metadata = originalMetadata.replace( + 'diagnostic("Print all of the files read during the compilation.")', + `diagnostic("${message}")`, + ); + assert.notEqual(metadata, originalMetadata); + try { + fs.writeFileSync(diagnosticsFile, JSON.stringify(messages, null, 4) + "\n"); + fs.writeFileSync(metadataFile, metadata); + // Exercise protocol generation too, rather than accepting its cached output. + fs.writeFileSync(protocolFile, originalProtocol + "\n"); + const { stdout } = await generate(); + assert.match(stdout, /All generated values match Go/); + assert.match(stdout, /\$ go -C \.\/tools run \.\/gen-proto/); + assert.equal(fs.readFileSync(protocolFile, "utf8"), originalProtocol); + assert.match(fs.readFileSync(path.join(root, "tsc/internal/tsoptions/declarations_generated.go"), "utf8"), /diagnostics\.Codegen_ordering_probe/); + assert.match(fs.readFileSync(path.join(root, "tsc/internal/diagnostics/diagnostics_generated.go"), "utf8"), /Codegen_ordering_probe/); + } + finally { + fs.writeFileSync(metadataFile, originalMetadata); + fs.writeFileSync(diagnosticsFile, originalDiagnostics); + await generate(); + } +}); + +test("generate includes standalone generators without Go traversal", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const { stdout } = await x("npx", ["hereby", "generate"], { throwOnError: true, nodeOptions: { cwd: root } }); + const log = stripVTControlCharacters(stdout); + const eventIndex = (event: string) => { + const index = log.indexOf(event); + assert.ok(index >= 0, `Missing task event: ${event}`); + return index; + }; + const compilerStart = eventIndex("Starting generate:compiler"); + assert.ok(eventIndex("Finished generate:ast ") < compilerStart); + assert.ok(eventIndex("Finished generate:lsp ") < compilerStart); + assert.ok(eventIndex("Starting generate:sync") < compilerStart); + assert.ok(eventIndex("Starting generate:vendor") < compilerStart); + assert.ok(eventIndex("Finished generate:extension ") < eventIndex("Starting generate:extension-test")); + assert.doesNotMatch(stdout, /\$ go generate|npm run --silent cache/); + assert.match(stdout, /Unicode tables/); + assert.match(stdout, /Enums are up to date|All generated values match Go/); + assert.match(stdout, /Sync API is up to date|Formatting\.\.\./); + assert.match(stdout, /LSP bindings are up to date|Successfully generated .*lsp_generated\.go/); + assert.match(stdout, /generateLocBundle/); + assert.match(stdout, /generateLocTest/); + assert.deepEqual( + fs.readFileSync(path.join(root, "packages/typescript/vendor/vscode-jsonrpc/package.json")), + fs.readFileSync(path.join(root, "node_modules/vscode-jsonrpc/package.json")), + ); + const lspOutputs = ["tsc/internal/lsp/lsproto/lsp_generated.go", "packages/typescript/src/vscode/protocol.generated.ts"].map(file => path.join(root, file)); + const timestamps = lspOutputs.map(file => fs.statSync(file).mtimeMs); + const current = await x("npx", ["hereby", "generate:lsp"], { throwOnError: true, nodeOptions: { cwd: root } }); + assert.match(current.stdout, /LSP bindings are up to date/); + assert.doesNotMatch(current.stdout, /Using vscode-languageclient/); + assert.deepEqual(lspOutputs.map(file => fs.statSync(file).mtimeMs), timestamps); +}); + +test("localization and vendoring preserve current outputs", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = (force = false) => x("npx", ["hereby", "generate:extension-test", "generate:vendor", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const outputs = fs.globSync([ + "packages/vscode-typescript/l10n/*.json", + "packages/vscode-typescript/package.nls.qps-ploc.json", + "packages/typescript/vendor/vscode-jsonrpc/**/*", + ], { cwd: root }).map(file => path.join(root, file)).filter(file => fs.statSync(file).isFile()); + const contents = outputs.map(file => fs.readFileSync(file)); + context.after(() => { + for (const [index, file] of outputs.entries()) fs.writeFileSync(file, contents[index]); + }); + const oldTime = new Date("2000-01-01T00:00:00Z"); + for (const file of outputs) fs.utimesSync(file, oldTime, oldTime); + const timestamps = outputs.map(file => fs.statSync(file).mtimeMs); + await generate(); + assert.deepEqual(outputs.map(file => fs.statSync(file).mtimeMs), timestamps); + await generate(true); + for (const file of outputs) assert.notEqual(fs.statSync(file).mtimeMs, oldTime.getTime()); + for (const [index, file] of outputs.entries()) { + if (index % 2) fs.rmSync(file); + else fs.writeFileSync(file, "modified"); + } + await generate(); + assert.deepEqual(outputs.map(file => fs.readFileSync(file)), contents); +}); + +test("localization tracks source membership and package strings", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const extension = path.join(root, "packages/vscode-typescript"); + const source = path.join(extension, "src/cache-probe.ts"); + const packageStrings = path.join(extension, "package.nls.json"); + const bundle = path.join(extension, "l10n/bundle.l10n.json"); + const pseudoBundle = path.join(extension, "l10n/bundle.l10n.qps-ploc.json"); + const pseudoPackage = path.join(extension, "package.nls.qps-ploc.json"); + const originals = [packageStrings, bundle, pseudoBundle, pseudoPackage].map(file => [file, fs.readFileSync(file)] as const); + assert.equal(fs.existsSync(source), false); + context.after(() => { + fs.rmSync(source, { force: true }); + for (const [file, content] of originals) fs.writeFileSync(file, content); + }); + const generate = () => x("npx", ["hereby", "generate:extension-test"], { throwOnError: true, nodeOptions: { cwd: root } }); + for (const message of ["Codegen cache probe", "Updated codegen cache probe"]) { + fs.writeFileSync(source, `import * as vscode from "vscode";\nexport const message = vscode.l10n.t(${JSON.stringify(message)});\n`); + await generate(); + assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(bundle, "utf8")), message)); + assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(pseudoBundle, "utf8")), message)); + } + fs.rmSync(source); + await generate(); + assert.deepEqual(fs.readFileSync(bundle), originals[1][1]); + assert.deepEqual(fs.readFileSync(pseudoBundle), originals[2][1]); + const strings = JSON.parse(fs.readFileSync(packageStrings, "utf8")); + strings["cache.probe"] = "Package cache probe"; + fs.writeFileSync(packageStrings, JSON.stringify(strings)); + await generate(); + assert.ok(Object.hasOwn(JSON.parse(fs.readFileSync(pseudoPackage, "utf8")), "cache.probe")); +}); + +test("vendoring tracks package versions and supports force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const source = path.join(root, "node_modules/vscode-jsonrpc/lib/cache-probe.txt"); + const destination = path.join(root, "packages/typescript/vendor/vscode-jsonrpc/lib/cache-probe.txt"); + const sourceManifest = path.join(root, "node_modules/vscode-jsonrpc/package.json"); + const destinationManifest = path.join(root, "packages/typescript/vendor/vscode-jsonrpc/package.json"); + const originalSourceManifest = fs.readFileSync(sourceManifest); + const originalDestinationManifest = fs.readFileSync(destinationManifest); + assert.equal(fs.existsSync(source), false); + assert.equal(fs.existsSync(destination), false); + context.after(() => { + fs.rmSync(source, { force: true }); + fs.rmSync(destination, { force: true }); + fs.writeFileSync(sourceManifest, originalSourceManifest); + fs.writeFileSync(destinationManifest, originalDestinationManifest); + }); + const generate = (force = false) => x("npx", ["hereby", "generate:vendor", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + fs.writeFileSync(source, "first"); + await generate(); + assert.equal(fs.existsSync(destination), false); + const manifest = JSON.parse(originalSourceManifest.toString()); + manifest.version += "-cache-probe"; + fs.writeFileSync(sourceManifest, JSON.stringify(manifest)); + await generate(); + assert.equal(fs.readFileSync(destination, "utf8"), "first"); + assert.equal(JSON.parse(fs.readFileSync(destinationManifest, "utf8")).version, manifest.version); + fs.writeFileSync(source, "changed"); + await generate(); + assert.equal(fs.readFileSync(destination, "utf8"), "first"); + await generate(true); + assert.equal(fs.readFileSync(destination, "utf8"), "changed"); + fs.rmSync(source); + await generate(); + assert.equal(fs.readFileSync(destination, "utf8"), "changed"); + fs.rmSync(destinationManifest); + await generate(); + assert.equal(fs.existsSync(destination), false); + assert.equal(JSON.parse(fs.readFileSync(destinationManifest, "utf8")).version, manifest.version); +}); + +test("bundled generation skips unchanged library outputs", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = () => x("go", ["-C", "./tsc", "generate", "./internal/bundled"], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const files = ["libs_generated.go", "embed_generated.go"].map(file => path.join(root, "tsc/internal/bundled", file)); + const timestamps = files.map(file => fs.statSync(file).mtimeMs); + assert.match((await generate()).stdout, /codegen outputs are already up to date/); + assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); +}); + +test("bundled generation tracks libraries, validates inputs, and supports force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_bundled-probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true, maxRetries: 10 })); + const notice = path.join(directory, "CopyrightNotice.txt"); + const libs = path.join(directory, "libs"); + fs.mkdirSync(libs); + fs.writeFileSync(notice, "Fixture notice\n\n"); + const library = path.join(libs, "lib.first.d.ts"); + const content = "Fixture notice\n\n\ndeclare const first: string;\n"; + fs.writeFileSync(library, content); + const options = { + cwd: directory, + inputs: [path.join(root, "tsc/internal/bundled/generate.go"), "CopyrightNotice.txt", "libs/*"], + outputs: ["libs_generated.go", "embed_generated.go"], + commands: [["go", "run", path.join(root, "tsc/internal/bundled/generate.go")]], + }; + const generate = (force = false) => cache({ ...options, force }); + await generate(); + const files = ["libs_generated.go", "embed_generated.go"].map(file => path.join(directory, file)); + const originals = files.map(file => fs.readFileSync(file)); + assert.equal(await generate(), true); + const added = path.join(libs, "lib.second.d.ts"); + fs.writeFileSync(added, content); + assert.equal(await generate(), false); + for (const file of files) assert.match(fs.readFileSync(file, "utf8"), /lib\.second\.d\.ts/); + fs.rmSync(added); + assert.equal(await generate(), false); + for (const [index, file] of files.entries()) { + assert.deepEqual(fs.readFileSync(file), originals[index]); + fs.writeFileSync(file, "modified"); + assert.equal(await generate(), false); + assert.deepEqual(fs.readFileSync(file), originals[index]); + fs.rmSync(file, { recursive: true, maxRetries: 10 }); + assert.equal(await generate(), false); + assert.deepEqual(fs.readFileSync(file), originals[index]); + } + fs.writeFileSync(library, content.replace("string", "number")); + assert.equal(await generate(), false); + fs.writeFileSync(library, content.replaceAll("\n", "\r\n")); + await assert.rejects(generate()); + fs.writeFileSync(library, content); + assert.equal(await generate(), false); + fs.mkdirSync(path.join(libs, "unexpected")); + await assert.rejects(generate()); + fs.rmdirSync(path.join(libs, "unexpected")); + assert.equal(await generate(), false); + fs.writeFileSync(notice, "Changed fixture notice\n\n"); + await assert.rejects(generate()); + fs.writeFileSync(notice, "Fixture notice\n\n"); + assert.equal(await generate(), false); + assert.equal(await generate(true), false); + assert.equal(await generate(), true); +}); + +test("stringer generation tracks declared inputs, options, output, and force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_stringer-probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const source = path.join(directory, "kind.go"); + const extra = path.join(directory, "extra.go"); + const output = path.join(directory, "kind_stringer_generated.go"); + fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); + const generate = (trimPrefix = false, force = false) => + cache({ + cwd: directory, + inputs: ["kind.go"], + outputs: ["kind_stringer_generated.go"], + env: { GOFILE: "kind.go" }, + force, + commands: [ + ["go", "tool", "golang.org/x/tools/cmd/stringer", "-type=Kind", "-output=kind_stringer_generated.go", ...(trimPrefix ? ["-trimprefix=Kind"] : [])], + ["dprint", "fmt", "kind_stringer_generated.go"], + ], + }); + await generate(); + const timestamp = fs.statSync(output).mtimeMs; + assert.equal(await generate(), true); + assert.equal(fs.statSync(output).mtimeMs, timestamp); + fs.writeFileSync(extra, "package probe\n\nconst Unrelated = 1\n"); + assert.equal(await generate(), true); + fs.appendFileSync(source, "\nconst KindSecond Kind = 1\n"); + assert.equal(await generate(), false); + assert.match(fs.readFileSync(output, "utf8"), /KindSecond/); + fs.rmSync(extra); + assert.equal(await generate(), true); + fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); + assert.equal(await generate(), false); + assert.doesNotMatch(fs.readFileSync(output, "utf8"), /KindSecond/); + assert.equal(await generate(true), false); + assert.match(fs.readFileSync(output, "utf8"), /_Kind_name = "First"/); + assert.equal(await generate(true), true); + fs.appendFileSync(output, "\n"); + assert.equal(await generate(true), false); + fs.rmSync(output); + assert.equal(await generate(true), false); + assert.equal(await generate(true, true), false); + assert.equal(await generate(true), true); + fs.appendFileSync(source, "\nconst KindInvalid Kind = missing\n"); + await assert.rejects(generate(true)); + fs.writeFileSync(source, "package probe\n\ntype Kind int\n\nconst KindFirst Kind = 0\n"); + assert.equal(await generate(true), false); + assert.equal(await generate(true), true); +}); + +test("moq generation tracks interface inputs, output, and force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_moq-probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const source = path.join(directory, "client.go"); + const base = path.join(directory, "base.go"); + fs.mkdirSync(path.join(directory, "mock")); + const output = path.join(directory, "mock/mock_generated.go"); + fs.writeFileSync(base, "package probe\n\ntype Base interface { Read() string }\n"); + fs.writeFileSync(source, "package probe\n\ntype Client interface { Base }\n"); + const options = { + cwd: directory, + inputs: ["client.go", "base.go"], + outputs: ["mock/mock_generated.go"], + commands: [ + ["go", "tool", "github.com/matryer/moq", "-stub", "-fmt=goimports", "-pkg=mock", "-out=mock/mock_generated.go", ".", "Client"], + ["dprint", "fmt", "mock/mock_generated.go"], + ], + }; + const generate = (force = false) => cache({ ...options, force }); + await generate(); + const timestamp = fs.statSync(output).mtimeMs; + assert.equal(await generate(), true); + assert.equal(fs.statSync(output).mtimeMs, timestamp); + fs.writeFileSync(base, "package probe\n\ntype Base interface { Read() string; Close() error }\n"); + assert.equal(await generate(), false); + assert.match(fs.readFileSync(output, "utf8"), /CloseFunc/); + fs.rmSync(output); + assert.equal(await generate(), false); + assert.equal(await generate(true), false); + assert.equal(await generate(), true); +}); + +test("diagnostic generation tracks Go and locale outputs and supports force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_diagnostics-probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const output = path.join(directory, "diagnostics_generated.go"); + const source = path.join(directory, "diagnosticMessages.generated.json"); + const localized = path.join(directory, "loc_generated.go"); + const locDirectory = path.join(directory, "loc"); + fs.mkdirSync(locDirectory); + const handbacks = fs.globSync("loc/*.generated.json", { cwd: path.join(root, "tsc/internal/diagnostics") }); + for (const handback of handbacks) { + fs.copyFileSync(path.join(root, "tsc/internal/diagnostics", handback), path.join(locDirectory, path.basename(handback))); + } + const project = path.join(directory, "tools/LocProject.json"); + fs.mkdirSync(path.dirname(project)); + const projectData = JSON.parse(fs.readFileSync(path.join(root, "tools/LocProject.json"), "utf8")); + projectData.Projects[0].LocItems = [projectData.Projects[0].LocItems[0]]; + projectData.Projects[0].LocItems[0].SourceFile = "diagnosticMessages.generated.json"; + fs.writeFileSync(project, JSON.stringify(projectData)); + const options = { + cwd: path.join(root, "tsc/internal/diagnostics"), + inputs: ["generate.go", "diagnosticMessages.json", project, "../{collections,json}/*.go", path.join(locDirectory, "*.generated.json")], + exclude: ["**/*_test.go"], + outputs: [output, source, localized, path.join(locDirectory, "*.json.gz")], + commands: [ + ["go", "run", "generate.go", "-diagnostics", output, "-loc", localized, "-locdir", locDirectory, "-locproject", project, "-locsource", source], + ["dprint", "fmt", output, localized], + ], + }; + const generate = (force = false) => cache({ ...options, force }); + await generate(); + const locales = fs.globSync("loc/*.json.gz", { cwd: directory }).map(file => path.join(directory, file)); + assert.ok(locales.length > 0); + const files = [output, source, localized, ...locales]; + const timestamps = files.map(file => fs.statSync(file).mtimeMs); + assert.equal(await generate(), true); + assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); + fs.appendFileSync(project, "\n"); + assert.equal(await generate(), false); + fs.appendFileSync(path.join(locDirectory, path.basename(handbacks[0])), "\n"); + assert.equal(await generate(), false); + const archive = fs.readFileSync(locales[0]); + fs.rmSync(locales[0]); + assert.equal(await generate(), false); + assert.deepEqual(fs.readFileSync(locales[0]), archive); + fs.writeFileSync(locales[0], "modified"); + assert.equal(await generate(), false); + assert.deepEqual(fs.readFileSync(locales[0]), archive); + const unexpected = path.join(directory, "loc/unexpected.json.gz"); + fs.writeFileSync(unexpected, "unexpected"); + assert.equal(await generate(), false); + assert.equal(fs.existsSync(unexpected), false); + for (const locale of locales) fs.rmSync(locale); + assert.equal(await generate(), false); + assert.deepEqual(fs.readFileSync(locales[0]), archive); + fs.rmSync(localized); + assert.equal(await generate(), false); + assert.equal(await generate(true), false); + assert.equal(await generate(), true); +}); + +test("Unicode generation skips unchanged tables and formatting", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = () => x("go", ["-C", "./tsc", "generate", "./internal/stringutil"], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const files = ["js_case_generated.go", "identifier_parts_generated.go"].map(file => path.join(root, "tsc/internal/stringutil", file)); + const timestamps = files.map(file => fs.statSync(file).mtimeMs); + const current = await generate(); + assert.match(current.stdout, /Unicode tables are up to date\./); + assert.doesNotMatch(current.stdout, /Formatted/); + assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); +}); + +test("Unicode generation repairs outputs and supports force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const directory = fs.mkdtempSync(path.join(root, "tsc/internal/_unicode-probe-")); + context.after(() => fs.rmSync(directory, { recursive: true, force: true })); + const command = [path.join(root, "tsc/internal/stringutil/_scripts/generate-unicode-data.mts"), "--outDir", directory]; + const generate = (...args: string[]) => x(process.execPath, [...command, ...args], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const files = ["js_case_generated.go", "identifier_parts_generated.go"].map(file => path.join(directory, file)); + const originals = files.map(file => fs.readFileSync(file)); + const timestamps = files.map(file => fs.statSync(file).mtimeMs); + assert.match((await generate()).stdout, /Unicode tables are up to date\./); + assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); + for (const [index, file] of files.entries()) { + assert.deepEqual(originals[index], fs.readFileSync(path.join(root, "tsc/internal/stringutil", path.basename(file)))); + fs.writeFileSync(file, "modified"); + assert.match((await generate()).stdout, /Generated Unicode tables\./); + assert.deepEqual(fs.readFileSync(file), originals[index]); + fs.rmSync(file); + assert.match((await generate()).stdout, /Generated Unicode tables\./); + assert.deepEqual(fs.readFileSync(file), originals[index]); + } + const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(files[0]).digest("hex") + ".json"); + context.after(() => fs.rmSync(cacheFile, { force: true })); + fs.rmSync(cacheFile); + assert.match((await generate()).stdout, /Generated Unicode tables\./); + assert.match((await generate("--force")).stdout, /Generated Unicode tables\./); + assert.match((await generate()).stdout, /Unicode tables are up to date\./); + const forced = await x(process.execPath, command, { + throwOnError: true, + nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, + }); + assert.match(forced.stdout, /Generated Unicode tables\./); + const overridden = await x(process.execPath, [...command, "--no-force"], { + throwOnError: true, + nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, + }); + assert.match(overridden.stdout, /Unicode tables are up to date\./); +}); + +test("enum generation skips unchanged outputs and Go verification", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = (force = false) => x("npx", ["hereby", "generate:enums", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const files = [ + ...fs.globSync("packages/typescript/src/enums/*.ts", { cwd: root }), + "tsc/internal/api/enum_values_generated.go", + ].map(file => path.join(root, file)); + const timestamps = files.map(file => fs.statSync(file).mtimeMs); + const { stdout } = await generate(); + assert.match(stdout, /Enums are up to date\./); + assert.doesNotMatch(stdout, /Getting values from go/); + assert.deepEqual(files.map(file => fs.statSync(file).mtimeMs), timestamps); + const forced = await generate(true); + assert.match(forced.stdout, /All generated values match Go\./); + assert.match((await generate()).stdout, /Enums are up to date\./); + const verifier = path.join(root, "tsc/internal/api/enum_values_generated.go"); + const cacheFile = path.join(defaultCacheDirectory, createHash("sha256").update(verifier).digest("hex") + ".json"); + fs.rmSync(cacheFile); + const regenerated = await generate(); + assert.match(regenerated.stdout, /All generated values match Go\./); + assert.match((await generate()).stdout, /Enums are up to date\./); + + const astSchema = path.join(root, "tools/scripts/tsc/ast.json"); + const originalSchema = fs.readFileSync(astSchema, "utf8"); + const goKinds = path.join(root, "tsc/internal/ast/kind_generated.go"); + const goKindsTimestamp = fs.statSync(goKinds).mtimeMs; + try { + fs.writeFileSync(astSchema, originalSchema + "\n"); + assert.match((await generate()).stdout, /All generated values match Go\./); + assert.equal(fs.statSync(goKinds).mtimeMs, goKindsTimestamp); + assert.match((await generate()).stdout, /Enums are up to date\./); + } + finally { + fs.writeFileSync(astSchema, originalSchema); + await generate(); + } +}); + +test("TypeScript AST generation emits LF before formatting", async context => { + const writes = context.mock.method(GeneratedFile.prototype, "write"); + const { default: generate } = await import("../tsc/generate-ts-ast.ts"); + generate(true); + assert.equal(writes.mock.callCount(), 4); + for (const call of writes.mock.calls) { + assert.equal(call.arguments[0].includes("\r"), false, "unformatted output must use LF"); + } +}); + +test("AST generation forwards force to schema generators and the kind stringer", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = (force = false) => x("npx", ["hereby", "generate:ast", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const output = path.join(root, "tsc/internal/ast/kind_stringer_generated.go"); + const oldTime = new Date("2000-01-01T00:00:00Z"); + fs.utimesSync(output, oldTime, oldTime); + const forced = await generate(true); + assert.match(forced.stdout, /Wrote .*encoder_generated\.go/); + assert.match(forced.stdout, /Wrote .*ast_generated\.go/); + assert.match(forced.stdout, /Generated .*ast\.generated\.ts/); + assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); + const timestamp = fs.statSync(output).mtimeMs; + assert.doesNotMatch(forced.stdout, /\$ node .*tools\/scripts\/tsc\/generate\.ts/); + const current = await generate(); + assert.doesNotMatch(current.stdout, /(?:Wrote|Generated) /); + assert.match(current.stdout, /codegen outputs are already up to date/); + assert.equal(fs.statSync(output).mtimeMs, timestamp); +}); + +test("package generation forwards force to AST, encoder, and sync generators", async () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const generate = (force = false) => x("npm", ["run", "-w", "@typescript/typescript", "generate", ...(force ? ["--", "--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const forced = await generate(true); + assert.match(forced.stdout, /Generated .*ast\.generated\.ts/); + assert.match(forced.stdout, /Wrote .*encoder_generated\.go/); + assert.match(forced.stdout, /Formatting\.\.\./); + const current = await generate(); + assert.doesNotMatch(current.stdout, /(?:Wrote|Generated) |Formatting\.\.\./); + assert.match(current.stdout, /Sync API is up to date\./); +}); + +test("API protocol generation caches formatted output and supports force", async context => { + const root = path.resolve(import.meta.dirname, "../../.."); + const output = path.join(root, "packages/typescript/src/api/proto.generated.ts"); + const compilerOptions = path.join(root, "packages/typescript/src/api/compilerOptions.generated.ts"); + const compilerOptionsTimestamp = fs.statSync(compilerOptions).mtimeMs; + const generate = (force = false) => x("npx", ["hereby", "generate:api", ...(force ? ["--force"] : [])], { throwOnError: true, nodeOptions: { cwd: root } }); + await generate(); + const timestamp = fs.statSync(output).mtimeMs; + const current = await generate(); + assert.match(current.stdout, /codegen outputs are already up to date/); + assert.doesNotMatch(current.stdout, /\$ node .*cache\.mts/); + assert.equal(fs.statSync(output).mtimeMs, timestamp); + const unrelated = path.join(root, "tsc/internal/parser/codegen_cache_probe.go"); + assert.equal(fs.existsSync(unrelated), false); + context.after(() => fs.rmSync(unrelated, { force: true })); + fs.writeFileSync(unrelated, "package parser\n"); + assert.match((await generate()).stdout, /codegen outputs are already up to date/); + fs.rmSync(unrelated); + const schema = path.join(root, "tsc/internal/api/requestfilesystem/codegen_cache_probe.go"); + assert.equal(fs.existsSync(schema), false); + const original = fs.readFileSync(output, "utf8"); + context.after(async () => { + if (fs.existsSync(schema)) { + fs.rmSync(schema); + await generate(true); + } + }); + fs.writeFileSync(schema, 'package requestfilesystem\n\nconst KindCodegenCacheProbe Kind = "codegen-cache-probe"\n'); + await generate(); + assert.match(fs.readFileSync(output, "utf8"), /"codegen-cache-probe"/); + fs.rmSync(schema); + await generate(); + assert.equal(fs.readFileSync(output, "utf8"), original); + const oldTime = new Date("2000-01-01T00:00:00Z"); + fs.utimesSync(output, oldTime, oldTime); + await generate(true); + assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); + assert.equal(fs.statSync(compilerOptions).mtimeMs, compilerOptionsTimestamp, "Protocol generation must not regenerate compiler option definitions"); + assert.match((await generate()).stdout, /codegen outputs are already up to date/); + fs.utimesSync(output, oldTime, oldTime); + const nested = await x("go", ["-C", "./tsc", "generate", "./internal/api"], { + throwOnError: true, + nodeOptions: { cwd: root, env: { ...process.env, TSGO_HEREBY_FORCE: "1" } }, + }); + assert.notEqual(fs.statSync(output).mtimeMs, oldTime.getTime()); + assert.match((await generate()).stdout, /codegen outputs are already up to date/); +}); diff --git a/tools/scripts/gen/lspTypeScript.test.mts b/tools/scripts/gen/lspTypeScript.test.mts index 888120494c75a..fcaa03e56edd4 100644 --- a/tools/scripts/gen/lspTypeScript.test.mts +++ b/tools/scripts/gen/lspTypeScript.test.mts @@ -1,153 +1,153 @@ -import assert from "node:assert/strict"; -import { execFileSync } from "node:child_process"; -import fs from "node:fs"; -import path from "node:path"; -import { test } from "node:test"; -import ts from "typescript"; -import { getTypeScriptModel } from "../lsp/generate.mts"; -import { getMiddlewareMethods } from "../lsp/generateTypeScript.mts"; -import type { - MetaModel, - Type, -} from "../lsp/metaModelSchema.mts"; -import { generateTypeScript } from "../lsp/typeScript.mts"; - -function fixture(): MetaModel { - return { - metaData: { version: "3.18.0" }, - requests: [{ - method: "test/feature", - messageDirection: "clientToServer", - params: { kind: "reference", name: "Child" }, - result: { kind: "reference", name: "Result" }, - }], - notifications: [], - enumerations: [ - { name: "Kind", type: { kind: "base", name: "string" }, values: [{ name: "First", value: "first" }, { name: "Second", value: "second" }] }, - { name: "OpenKind", type: { kind: "base", name: "integer" }, values: [{ name: "First", value: 1 }], supportsCustomValues: true }, - ], - structures: [ - { name: "Parent", properties: [{ name: "inherited", type: { kind: "base", name: "string" } }, { name: "override", type: { kind: "base", name: "integer" } }] }, - { name: "Mixin", properties: [{ name: "mixed", type: { kind: "reference", name: "Kind" } }] }, - { - name: "Child", - extends: [{ kind: "reference", name: "Parent" }], - mixins: [{ kind: "reference", name: "Mixin" }], - properties: [ - { name: "override", type: { kind: "base", name: "boolean" } }, - { name: "optional", type: { kind: "reference", name: "OpenKind" }, optional: true }, - { name: "zero", type: { kind: "base", name: "boolean" }, omitzeroValue: true }, - { name: "recursive", type: { kind: "reference", name: "Child" }, optional: true }, - { name: "uri", type: { kind: "base", name: "DocumentUri" } }, - { name: "map", type: { kind: "map", key: { kind: "base", name: "string" }, value: { kind: "reference", name: "Kind" } } }, - { name: "tuple", type: { kind: "tuple", items: [{ kind: "base", name: "integer" }, { kind: "stringLiteral", value: "tuple" }] } }, - { name: "intersection", type: { kind: "and", items: [{ kind: "literal", value: { properties: [{ name: "flag", type: { kind: "booleanLiteral", value: true } }] } }, { kind: "literal", value: { properties: [{ name: "number", type: { kind: "integerLiteral", value: 2 } }] } }] } }, - ], - }, - { name: "UnusedLifecycle", properties: [] }, - ], - typeAliases: [{ - name: "Result", - type: { kind: "or", items: [{ kind: "array", element: { kind: "reference", name: "Child" } }, { kind: "base", name: "null" }] }, - }], - }; -} - -test("LSP TypeScript generation traverses reachable types and preserves wire shapes", () => { - const model = fixture(); - const before = structuredClone(model); - const output = generateTypeScript(model, ["test/feature"]); - assert.deepEqual(model, before); - assert.equal(output, generateTypeScript(model, ["test/feature"])); - assert.match(output, /"inherited": string/); - assert.match(output, /"mixed": Kind/); - assert.match(output, /"override": boolean/); - assert.doesNotMatch(output, /"override": number/); - assert.match(output, /"optional"\?: OpenKind \| undefined/); - assert.match(output, /"zero"\?: boolean \| undefined/); - assert.match(output, /"recursive"\?: Child \| undefined/); - assert.match(output, /export type DocumentUri = string/); - assert.match(output, /export type Kind = "first" \| "second"/); - assert.match(output, /export type OpenKind = 1 \| number/); - assert.match(output, /export type Result = Child\[\] \| null;/); - assert.doesNotMatch(output, /UnusedLifecycle|export interface Parent|export interface Mixin/); - const file = ts.createSourceFile("generated.ts", output, ts.ScriptTarget.Latest, true); - assert.ok(file.statements.every(statement => ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement))); -}); - -test("LSP TypeScript generation parenthesizes only lower-precedence types", () => { - const model = fixture(); - const a: Type = { kind: "reference", name: "Child" }; - const b: Type = { kind: "reference", name: "Parent" }; - const c: Type = { kind: "reference", name: "Mixin" }; - const union: Type = { kind: "or", items: [a, b] }; - const intersection: Type = { kind: "and", items: [a, b] }; - const cases: [Type, string][] = [ - [{ kind: "array", element: a }, "Child[]"], - [{ kind: "array", element: { kind: "array", element: a } }, "Child[][]"], - [union, "Child | Parent"], - [intersection, "Child & Parent"], - [{ kind: "array", element: union }, "(Child | Parent)[]"], - [{ kind: "array", element: intersection }, "(Child & Parent)[]"], - [{ kind: "and", items: [union, c] }, "(Child | Parent) & Mixin"], - [{ kind: "or", items: [intersection, c] }, "Child & Parent | Mixin"], - [{ kind: "tuple", items: [union, intersection] }, "[Child | Parent, Child & Parent]"], - ]; - for (const [result, expected] of cases) { - model.requests[0].result = result; - const output = generateTypeScript(model, ["test/feature"]); - assert.ok(output.includes(`result: ${expected};`), expected); - } -}); - -test("LSP TypeScript generation reports invalid schema and method inputs", () => { - assert.throws(() => generateTypeScript(fixture(), ["missing/feature"]), /Not a client-to-server request/); - assert.throws(() => generateTypeScript(fixture(), ["test/feature", "test/feature"]), /Duplicate/); - const serverRequest = fixture(); - serverRequest.requests[0].messageDirection = "serverToClient"; - assert.throws(() => generateTypeScript(serverRequest, ["test/feature"]), /Not a client-to-server request/); - const unknown = fixture(); - unknown.requests[0].result = { kind: "reference", name: "Missing" }; - assert.throws(() => generateTypeScript(unknown, ["test/feature"]), /Unknown LSP type Missing/); - const cycle = fixture(); - cycle.structures[0].extends = [{ kind: "reference", name: "Child" }]; - assert.throws(() => generateTypeScript(cycle, ["test/feature"]), /Cyclic inheritance/); -}); - -test("middleware allowlist parsing rejects nonliteral or disabled entries", () => { - assert.deepEqual(getMiddlewareMethods('const supportedMethods = { "textDocument/hover": true };'), ["textDocument/hover"]); - for (const source of ["const supportedMethods = {}; const other = {};", "const supportedMethods = methods;", 'const supportedMethods = { "textDocument/hover": false };', "const supportedMethods = { ...methods };"]) { - if (source.includes("supportedMethods = {}")) { - assert.deepEqual(getMiddlewareMethods(source), []); - } - else { - assert.throws(() => getMiddlewareMethods(source), /Middleware/); - } - } -}); - -test("committed TypeScript protocol types are reproducible from the shared model", () => { - const root = path.resolve(import.meta.dirname, "../../.."); - const outputPath = path.join(root, "packages/typescript/src/vscode/protocol.generated.ts"); - const methods = getMiddlewareMethods(fs.readFileSync(path.join(root, "packages/vscode-typescript/src/lspMiddleware.ts"), "utf8")); - const output = generateTypeScript(getTypeScriptModel(), methods); - const formatted = execFileSync(path.join(root, "node_modules/.bin/dprint"), ["fmt", "--stdin", outputPath], { input: output, encoding: "utf8" }); - assert.equal(formatted, fs.readFileSync(outputPath, "utf8")); - const file = ts.createSourceFile("generated.ts", output, ts.ScriptTarget.Latest, true); - assert.ok(file.statements.every(statement => ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement))); - assert.doesNotMatch(output, /CompletionItemData|InitializeParams|Shutdown/); - assert.match(output, /"verbosityLevel"\?: number \| undefined/); - assert.match(output, /"canIncreaseVerbosity"\?: boolean \| undefined/); - assert.match(output, /"data"\?: LSPAny \| undefined/); - assert.match(output, /"custom\/textDocument\/sourceDefinition"/); - assert.match(output, /"textDocument\/_vs_onAutoInsert"/); - assert.match(output, /"textDocument\/_vs_references"/); -}); - -test("wire model snapshots do not expose Go-specific opaque data structures", () => { - const model = getTypeScriptModel(); - const completion = model.structures.find(structure => structure.name === "CompletionItem"); - assert.deepEqual(completion?.properties.find(property => property.name === "data")?.type, { kind: "reference", name: "LSPAny" }); - model.requests[0].method = "modified/by/test"; - assert.notEqual(getTypeScriptModel().requests[0].method, "modified/by/test"); -}); +import assert from "node:assert/strict"; +import { execFileSync } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import { test } from "node:test"; +import ts from "typescript"; +import { getTypeScriptModel } from "../lsp/generate.mts"; +import { getMiddlewareMethods } from "../lsp/generateTypeScript.mts"; +import type { + MetaModel, + Type, +} from "../lsp/metaModelSchema.mts"; +import { generateTypeScript } from "../lsp/typeScript.mts"; + +function fixture(): MetaModel { + return { + metaData: { version: "3.18.0" }, + requests: [{ + method: "test/feature", + messageDirection: "clientToServer", + params: { kind: "reference", name: "Child" }, + result: { kind: "reference", name: "Result" }, + }], + notifications: [], + enumerations: [ + { name: "Kind", type: { kind: "base", name: "string" }, values: [{ name: "First", value: "first" }, { name: "Second", value: "second" }] }, + { name: "OpenKind", type: { kind: "base", name: "integer" }, values: [{ name: "First", value: 1 }], supportsCustomValues: true }, + ], + structures: [ + { name: "Parent", properties: [{ name: "inherited", type: { kind: "base", name: "string" } }, { name: "override", type: { kind: "base", name: "integer" } }] }, + { name: "Mixin", properties: [{ name: "mixed", type: { kind: "reference", name: "Kind" } }] }, + { + name: "Child", + extends: [{ kind: "reference", name: "Parent" }], + mixins: [{ kind: "reference", name: "Mixin" }], + properties: [ + { name: "override", type: { kind: "base", name: "boolean" } }, + { name: "optional", type: { kind: "reference", name: "OpenKind" }, optional: true }, + { name: "zero", type: { kind: "base", name: "boolean" }, omitzeroValue: true }, + { name: "recursive", type: { kind: "reference", name: "Child" }, optional: true }, + { name: "uri", type: { kind: "base", name: "DocumentUri" } }, + { name: "map", type: { kind: "map", key: { kind: "base", name: "string" }, value: { kind: "reference", name: "Kind" } } }, + { name: "tuple", type: { kind: "tuple", items: [{ kind: "base", name: "integer" }, { kind: "stringLiteral", value: "tuple" }] } }, + { name: "intersection", type: { kind: "and", items: [{ kind: "literal", value: { properties: [{ name: "flag", type: { kind: "booleanLiteral", value: true } }] } }, { kind: "literal", value: { properties: [{ name: "number", type: { kind: "integerLiteral", value: 2 } }] } }] } }, + ], + }, + { name: "UnusedLifecycle", properties: [] }, + ], + typeAliases: [{ + name: "Result", + type: { kind: "or", items: [{ kind: "array", element: { kind: "reference", name: "Child" } }, { kind: "base", name: "null" }] }, + }], + }; +} + +test("LSP TypeScript generation traverses reachable types and preserves wire shapes", () => { + const model = fixture(); + const before = structuredClone(model); + const output = generateTypeScript(model, ["test/feature"]); + assert.deepEqual(model, before); + assert.equal(output, generateTypeScript(model, ["test/feature"])); + assert.match(output, /"inherited": string/); + assert.match(output, /"mixed": Kind/); + assert.match(output, /"override": boolean/); + assert.doesNotMatch(output, /"override": number/); + assert.match(output, /"optional"\?: OpenKind \| undefined/); + assert.match(output, /"zero"\?: boolean \| undefined/); + assert.match(output, /"recursive"\?: Child \| undefined/); + assert.match(output, /export type DocumentUri = string/); + assert.match(output, /export type Kind = "first" \| "second"/); + assert.match(output, /export type OpenKind = 1 \| number/); + assert.match(output, /export type Result = Child\[\] \| null;/); + assert.doesNotMatch(output, /UnusedLifecycle|export interface Parent|export interface Mixin/); + const file = ts.createSourceFile("generated.ts", output, ts.ScriptTarget.Latest, true); + assert.ok(file.statements.every(statement => ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement))); +}); + +test("LSP TypeScript generation parenthesizes only lower-precedence types", () => { + const model = fixture(); + const a: Type = { kind: "reference", name: "Child" }; + const b: Type = { kind: "reference", name: "Parent" }; + const c: Type = { kind: "reference", name: "Mixin" }; + const union: Type = { kind: "or", items: [a, b] }; + const intersection: Type = { kind: "and", items: [a, b] }; + const cases: [Type, string][] = [ + [{ kind: "array", element: a }, "Child[]"], + [{ kind: "array", element: { kind: "array", element: a } }, "Child[][]"], + [union, "Child | Parent"], + [intersection, "Child & Parent"], + [{ kind: "array", element: union }, "(Child | Parent)[]"], + [{ kind: "array", element: intersection }, "(Child & Parent)[]"], + [{ kind: "and", items: [union, c] }, "(Child | Parent) & Mixin"], + [{ kind: "or", items: [intersection, c] }, "Child & Parent | Mixin"], + [{ kind: "tuple", items: [union, intersection] }, "[Child | Parent, Child & Parent]"], + ]; + for (const [result, expected] of cases) { + model.requests[0].result = result; + const output = generateTypeScript(model, ["test/feature"]); + assert.ok(output.includes(`result: ${expected};`), expected); + } +}); + +test("LSP TypeScript generation reports invalid schema and method inputs", () => { + assert.throws(() => generateTypeScript(fixture(), ["missing/feature"]), /Not a client-to-server request/); + assert.throws(() => generateTypeScript(fixture(), ["test/feature", "test/feature"]), /Duplicate/); + const serverRequest = fixture(); + serverRequest.requests[0].messageDirection = "serverToClient"; + assert.throws(() => generateTypeScript(serverRequest, ["test/feature"]), /Not a client-to-server request/); + const unknown = fixture(); + unknown.requests[0].result = { kind: "reference", name: "Missing" }; + assert.throws(() => generateTypeScript(unknown, ["test/feature"]), /Unknown LSP type Missing/); + const cycle = fixture(); + cycle.structures[0].extends = [{ kind: "reference", name: "Child" }]; + assert.throws(() => generateTypeScript(cycle, ["test/feature"]), /Cyclic inheritance/); +}); + +test("middleware allowlist parsing rejects nonliteral or disabled entries", () => { + assert.deepEqual(getMiddlewareMethods('const supportedMethods = { "textDocument/hover": true };'), ["textDocument/hover"]); + for (const source of ["const supportedMethods = {}; const other = {};", "const supportedMethods = methods;", 'const supportedMethods = { "textDocument/hover": false };', "const supportedMethods = { ...methods };"]) { + if (source.includes("supportedMethods = {}")) { + assert.deepEqual(getMiddlewareMethods(source), []); + } + else { + assert.throws(() => getMiddlewareMethods(source), /Middleware/); + } + } +}); + +test("committed TypeScript protocol types are reproducible from the shared model", () => { + const root = path.resolve(import.meta.dirname, "../../.."); + const outputPath = path.join(root, "packages/typescript/src/vscode/protocol.generated.ts"); + const methods = getMiddlewareMethods(fs.readFileSync(path.join(root, "packages/vscode-typescript/src/lspMiddleware.ts"), "utf8")); + const output = generateTypeScript(getTypeScriptModel(), methods); + const formatted = execFileSync(path.join(root, "node_modules/.bin/dprint"), ["fmt", "--stdin", outputPath], { input: output, encoding: "utf8" }); + assert.equal(formatted, fs.readFileSync(outputPath, "utf8")); + const file = ts.createSourceFile("generated.ts", output, ts.ScriptTarget.Latest, true); + assert.ok(file.statements.every(statement => ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement))); + assert.doesNotMatch(output, /CompletionItemData|InitializeParams|Shutdown/); + assert.match(output, /"verbosityLevel"\?: number \| undefined/); + assert.match(output, /"canIncreaseVerbosity"\?: boolean \| undefined/); + assert.match(output, /"data"\?: LSPAny \| undefined/); + assert.match(output, /"custom\/textDocument\/sourceDefinition"/); + assert.match(output, /"textDocument\/_vs_onAutoInsert"/); + assert.match(output, /"textDocument\/_vs_references"/); +}); + +test("wire model snapshots do not expose Go-specific opaque data structures", () => { + const model = getTypeScriptModel(); + const completion = model.structures.find(structure => structure.name === "CompletionItem"); + assert.deepEqual(completion?.properties.find(property => property.name === "data")?.type, { kind: "reference", name: "LSPAny" }); + model.requests[0].method = "modified/by/test"; + assert.notEqual(getTypeScriptModel().requests[0].method, "modified/by/test"); +}); diff --git a/tools/scripts/gen/tsconfig.json b/tools/scripts/gen/tsconfig.json index d4d71e52e8f38..170972c9a5557 100644 --- a/tools/scripts/gen/tsconfig.json +++ b/tools/scripts/gen/tsconfig.json @@ -1,11 +1,11 @@ -{ - "compilerOptions": { - "module": "nodenext", - "lib": ["esnext"], - "noEmit": true, - "verbatimModuleSyntax": true, - "erasableSyntaxOnly": true, - "allowImportingTsExtensions": true, - "types": ["node"] - } -} +{ + "compilerOptions": { + "module": "nodenext", + "lib": ["esnext"], + "noEmit": true, + "verbatimModuleSyntax": true, + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "types": ["node"] + } +} diff --git a/tools/scripts/gen/utils.mts b/tools/scripts/gen/utils.mts index fc8e830103d62..e4cf985e7aac9 100644 --- a/tools/scripts/gen/utils.mts +++ b/tools/scripts/gen/utils.mts @@ -1,135 +1,135 @@ -import { createHash } from "node:crypto"; -import * as fs from "node:fs"; -import path from "node:path"; -import { - parseArgs, - type ParseArgsOptionsConfig, -} from "node:util"; -import { - x, - xSync, -} from "tinyexec"; - -export const repoRoot = path.resolve(import.meta.dirname, "../../.."); - -const fileFingerprints = new Map(); -let fileFingerprintCacheScopes = 0; -let activeFingerprintWriters = 0; - -export function enableFileFingerprintCache(): () => void { - fileFingerprintCacheScopes++; - fileFingerprints.clear(); - let enabled = true; - return () => { - if (!enabled) return; - enabled = false; - fileFingerprintCacheScopes--; - fileFingerprints.clear(); - }; -} - -export function invalidateFileFingerprints(file?: string): void { - if (file === undefined) fileFingerprints.clear(); - else fileFingerprints.delete(path.resolve(file)); -} - -function beginFileFingerprintWrite(): () => void { - activeFingerprintWriters++; - invalidateFileFingerprints(); - return () => { - activeFingerprintWriters--; - invalidateFileFingerprints(); - }; -} - -export function getFileFingerprint(file: string, fresh = false): string { - file = path.resolve(file); - fresh ||= activeFingerprintWriters > 0; - const previous = fileFingerprints.get(file); - if (!fresh && fileFingerprintCacheScopes > 0 && previous) return previous.hash; - const stats = fs.statSync(file, { bigint: true }); - if ( - !fresh && previous - && previous.stats.dev === stats.dev - && previous.stats.ino === stats.ino - && previous.stats.size === stats.size - && previous.stats.mtimeNs === stats.mtimeNs - && previous.stats.ctimeNs === stats.ctimeNs - ) { - return previous.hash; - } - const hash = createHash("sha256").update(fs.readFileSync(file)).digest("hex"); - fileFingerprints.set(file, { stats, hash }); - return hash; -} - -export interface RunOptions { - captureOutput?: boolean; - cwd?: string; - env?: NodeJS.ProcessEnv; - signal?: AbortSignal; -} - -export function formatCommandArg(arg: string) { - return arg && /^[\w@%+=:,./-]+$/.test(arg) ? arg : JSON.stringify(arg); -} - -export async function run(command: string, args: readonly string[] = [], options: RunOptions = {}) { - console.log("$ " + [command, ...args].map(formatCommandArg).join(" ")); - const finishWrite = beginFileFingerprintWrite(); - try { - return await x(command, args, { - throwOnError: true, - ...(options.signal ? { signal: options.signal } : {}), - nodeOptions: { - cwd: options.cwd, - env: options.env ? { ...process.env, ...options.env } : undefined, - stdio: options.captureOutput ? "pipe" : "inherit", - }, - }); - } - finally { - finishWrite(); - } -} - -export function globInputs(patterns: string[], exclude: string[] = []): string[] { - return fs.globSync(patterns, { cwd: repoRoot, exclude }).map(file => path.join(repoRoot, file)); -} - -export function goInputs(): string[] { - return [import.meta.filename, ...globInputs(["go.work", "go.work.sum", "{tsc,tools}/go.{mod,sum}"])]; -} - -export function resolveForce(force?: boolean, environment = process.env.TSGO_HEREBY_FORCE): boolean { - return force ?? /^(1|true|yes|on)$/i.test(environment ?? ""); -} - -export function parseGeneratorArgs(options: Options, args = process.argv.slice(2)) { - const { values } = parseArgs({ - args, - options: { ...options, force: { type: "boolean" as const } }, - allowNegative: true, - }); - return { values, force: resolveForce((values as { force?: boolean; }).force) }; -} - -export async function formatFiles(files: string[]): Promise { - const finishWrite = beginFileFingerprintWrite(); - try { - await x("dprint", ["fmt", ...files], { throwOnError: true, nodeOptions: { cwd: repoRoot, stdio: "inherit" } }); - } - finally { - finishWrite(); - } -} - -export function formatFilesSync(files: string[]): void { - const finishWrite = beginFileFingerprintWrite(); - try { - xSync("dprint", ["fmt", ...files], { throwOnError: true, nodeOptions: { cwd: repoRoot, stdio: "inherit" } }); - } - finally { - finishWrite(); - } -} +import { createHash } from "node:crypto"; +import * as fs from "node:fs"; +import path from "node:path"; +import { + parseArgs, + type ParseArgsOptionsConfig, +} from "node:util"; +import { + x, + xSync, +} from "tinyexec"; + +export const repoRoot = path.resolve(import.meta.dirname, "../../.."); + +const fileFingerprints = new Map(); +let fileFingerprintCacheScopes = 0; +let activeFingerprintWriters = 0; + +export function enableFileFingerprintCache(): () => void { + fileFingerprintCacheScopes++; + fileFingerprints.clear(); + let enabled = true; + return () => { + if (!enabled) return; + enabled = false; + fileFingerprintCacheScopes--; + fileFingerprints.clear(); + }; +} + +export function invalidateFileFingerprints(file?: string): void { + if (file === undefined) fileFingerprints.clear(); + else fileFingerprints.delete(path.resolve(file)); +} + +function beginFileFingerprintWrite(): () => void { + activeFingerprintWriters++; + invalidateFileFingerprints(); + return () => { + activeFingerprintWriters--; + invalidateFileFingerprints(); + }; +} + +export function getFileFingerprint(file: string, fresh = false): string { + file = path.resolve(file); + fresh ||= activeFingerprintWriters > 0; + const previous = fileFingerprints.get(file); + if (!fresh && fileFingerprintCacheScopes > 0 && previous) return previous.hash; + const stats = fs.statSync(file, { bigint: true }); + if ( + !fresh && previous + && previous.stats.dev === stats.dev + && previous.stats.ino === stats.ino + && previous.stats.size === stats.size + && previous.stats.mtimeNs === stats.mtimeNs + && previous.stats.ctimeNs === stats.ctimeNs + ) { + return previous.hash; + } + const hash = createHash("sha256").update(fs.readFileSync(file)).digest("hex"); + fileFingerprints.set(file, { stats, hash }); + return hash; +} + +export interface RunOptions { + captureOutput?: boolean; + cwd?: string; + env?: NodeJS.ProcessEnv; + signal?: AbortSignal; +} + +export function formatCommandArg(arg: string) { + return arg && /^[\w@%+=:,./-]+$/.test(arg) ? arg : JSON.stringify(arg); +} + +export async function run(command: string, args: readonly string[] = [], options: RunOptions = {}) { + console.log("$ " + [command, ...args].map(formatCommandArg).join(" ")); + const finishWrite = beginFileFingerprintWrite(); + try { + return await x(command, args, { + throwOnError: true, + ...(options.signal ? { signal: options.signal } : {}), + nodeOptions: { + cwd: options.cwd, + env: options.env ? { ...process.env, ...options.env } : undefined, + stdio: options.captureOutput ? "pipe" : "inherit", + }, + }); + } + finally { + finishWrite(); + } +} + +export function globInputs(patterns: string[], exclude: string[] = []): string[] { + return fs.globSync(patterns, { cwd: repoRoot, exclude }).map(file => path.join(repoRoot, file)); +} + +export function goInputs(): string[] { + return [import.meta.filename, ...globInputs(["go.work", "go.work.sum", "{tsc,tools}/go.{mod,sum}"])]; +} + +export function resolveForce(force?: boolean, environment = process.env.TSGO_HEREBY_FORCE): boolean { + return force ?? /^(1|true|yes|on)$/i.test(environment ?? ""); +} + +export function parseGeneratorArgs(options: Options, args = process.argv.slice(2)) { + const { values } = parseArgs({ + args, + options: { ...options, force: { type: "boolean" as const } }, + allowNegative: true, + }); + return { values, force: resolveForce((values as { force?: boolean; }).force) }; +} + +export async function formatFiles(files: string[]): Promise { + const finishWrite = beginFileFingerprintWrite(); + try { + await x("dprint", ["fmt", ...files], { throwOnError: true, nodeOptions: { cwd: repoRoot, stdio: "inherit" } }); + } + finally { + finishWrite(); + } +} + +export function formatFilesSync(files: string[]): void { + const finishWrite = beginFileFingerprintWrite(); + try { + xSync("dprint", ["fmt", ...files], { throwOnError: true, nodeOptions: { cwd: repoRoot, stdio: "inherit" } }); + } + finally { + finishWrite(); + } +} diff --git a/tools/scripts/link-hooks.mjs b/tools/scripts/link-hooks.mjs index 2d81a75b63223..102b8d5837c31 100644 --- a/tools/scripts/link-hooks.mjs +++ b/tools/scripts/link-hooks.mjs @@ -1,25 +1,25 @@ -import fs from "fs"; -import path from "path"; -import url from "url"; - -const __filename = url.fileURLToPath(new URL(import.meta.url)); -const __dirname = path.dirname(__filename); - -const hooks = [ - "post-checkout", - "pre-commit", -]; - -hooks.forEach(hook => { - const hookInSourceControl = path.resolve(__dirname, "..", "hooks", hook); - - if (fs.existsSync(hookInSourceControl)) { - const hookInHiddenDirectory = path.resolve(__dirname, "..", "..", ".git", "hooks", hook); - - if (fs.existsSync(hookInHiddenDirectory)) { - fs.unlinkSync(hookInHiddenDirectory); - } - - fs.linkSync(hookInSourceControl, hookInHiddenDirectory); - } -}); +import fs from "fs"; +import path from "path"; +import url from "url"; + +const __filename = url.fileURLToPath(new URL(import.meta.url)); +const __dirname = path.dirname(__filename); + +const hooks = [ + "post-checkout", + "pre-commit", +]; + +hooks.forEach(hook => { + const hookInSourceControl = path.resolve(__dirname, "..", "hooks", hook); + + if (fs.existsSync(hookInSourceControl)) { + const hookInHiddenDirectory = path.resolve(__dirname, "..", "..", ".git", "hooks", hook); + + if (fs.existsSync(hookInHiddenDirectory)) { + fs.unlinkSync(hookInHiddenDirectory); + } + + fs.linkSync(hookInSourceControl, hookInHiddenDirectory); + } +}); diff --git a/tools/scripts/lsp/fetchModel.mts b/tools/scripts/lsp/fetchModel.mts index e24a717d8ba9d..a37d7607063b5 100644 --- a/tools/scripts/lsp/fetchModel.mts +++ b/tools/scripts/lsp/fetchModel.mts @@ -1,46 +1,46 @@ -#!/usr/bin/env node - -// Usage: node fetchModel.mts - -import fs from "node:fs"; -import path from "node:path"; -import url from "node:url"; - -const __filename = url.fileURLToPath(new URL(import.meta.url)); -const __dirname = path.dirname(__filename); - -const metaModelPath = path.join(__dirname, "metaModel.json"); -const metaModelSchemaPath = path.join(__dirname, "metaModelSchema.mts"); - -export default async function fetchModel() { - const lockfilePath = path.resolve(__dirname, "../../../package-lock.json"); - const lockfile = JSON.parse(fs.readFileSync(lockfilePath, "utf-8")); - const clientVersion: string = lockfile.packages["node_modules/vscode-languageclient"].version; - - const ref = `release/client/${clientVersion}`; - console.log(`Using vscode-languageclient@${clientVersion}`); - - const metaModelURL = `https://raw.githubusercontent.com/microsoft/vscode-languageserver-node/${ref}/protocol/metaModel.json`; - const metaModelSchemaURL = `https://raw.githubusercontent.com/microsoft/vscode-languageserver-node/${ref}/tools/src/metaModel.ts`; - - const metaModelResponse = await fetch(metaModelURL); - if (!metaModelResponse.ok) throw new Error(`Failed to fetch ${metaModelURL}: ${metaModelResponse.status}`); - const metaModel = await metaModelResponse.text(); - JSON.parse(metaModel); - - const metaModelSchemaResponse = await fetch(metaModelSchemaURL); - if (!metaModelSchemaResponse.ok) throw new Error(`Failed to fetch ${metaModelSchemaURL}: ${metaModelSchemaResponse.status}`); - let metaModelSchema = await metaModelSchemaResponse.text(); - - metaModelSchema = metaModelSchema.replace( - /(\t \* Whether the property is deprecated or not\. If deprecated\n\t \* the property contains the deprecation message\.\n\t \*\/\n\tdeprecated\?: string;)\n}/m, - `$1\n\n\t/**\n\t * Whether this property uses omitzero without being a pointer.\n\t * Custom extension for special value types.\n\t */\n\tomitzeroValue?: boolean;\n}`, - ); - - fs.writeFileSync(metaModelPath, metaModel); - fs.writeFileSync(metaModelSchemaPath, metaModelSchema); -} - -if (process.argv[1] === __filename) { - await fetchModel(); -} +#!/usr/bin/env node + +// Usage: node fetchModel.mts + +import fs from "node:fs"; +import path from "node:path"; +import url from "node:url"; + +const __filename = url.fileURLToPath(new URL(import.meta.url)); +const __dirname = path.dirname(__filename); + +const metaModelPath = path.join(__dirname, "metaModel.json"); +const metaModelSchemaPath = path.join(__dirname, "metaModelSchema.mts"); + +export default async function fetchModel() { + const lockfilePath = path.resolve(__dirname, "../../../package-lock.json"); + const lockfile = JSON.parse(fs.readFileSync(lockfilePath, "utf-8")); + const clientVersion: string = lockfile.packages["node_modules/vscode-languageclient"].version; + + const ref = `release/client/${clientVersion}`; + console.log(`Using vscode-languageclient@${clientVersion}`); + + const metaModelURL = `https://raw.githubusercontent.com/microsoft/vscode-languageserver-node/${ref}/protocol/metaModel.json`; + const metaModelSchemaURL = `https://raw.githubusercontent.com/microsoft/vscode-languageserver-node/${ref}/tools/src/metaModel.ts`; + + const metaModelResponse = await fetch(metaModelURL); + if (!metaModelResponse.ok) throw new Error(`Failed to fetch ${metaModelURL}: ${metaModelResponse.status}`); + const metaModel = await metaModelResponse.text(); + JSON.parse(metaModel); + + const metaModelSchemaResponse = await fetch(metaModelSchemaURL); + if (!metaModelSchemaResponse.ok) throw new Error(`Failed to fetch ${metaModelSchemaURL}: ${metaModelSchemaResponse.status}`); + let metaModelSchema = await metaModelSchemaResponse.text(); + + metaModelSchema = metaModelSchema.replace( + /(\t \* Whether the property is deprecated or not\. If deprecated\n\t \* the property contains the deprecation message\.\n\t \*\/\n\tdeprecated\?: string;)\n}/m, + `$1\n\n\t/**\n\t * Whether this property uses omitzero without being a pointer.\n\t * Custom extension for special value types.\n\t */\n\tomitzeroValue?: boolean;\n}`, + ); + + fs.writeFileSync(metaModelPath, metaModel); + fs.writeFileSync(metaModelSchemaPath, metaModelSchema); +} + +if (process.argv[1] === __filename) { + await fetchModel(); +} diff --git a/tools/scripts/lsp/generate.mts b/tools/scripts/lsp/generate.mts index 1f160c3403f6d..f9259e3cc7a68 100644 --- a/tools/scripts/lsp/generate.mts +++ b/tools/scripts/lsp/generate.mts @@ -1,3709 +1,3709 @@ -#!/usr/bin/env node - -// Usage: node generate.mts - -import fs from "node:fs"; -import path from "node:path"; -import url from "node:url"; -import { x } from "tinyexec"; -import type { - Enumeration, - MetaModel, - Notification, - OrType, - Property, - ReferenceType, - Request, - Structure, - Type, - TypeAlias, -} from "./metaModelSchema.mts"; - -const __filename = url.fileURLToPath(new URL(import.meta.url)); -const __dirname = path.dirname(__filename); -const repoRoot = path.resolve(__dirname, "../../.."); - -const out = path.join(repoRoot, "tsc/internal/lsp/lsproto/lsp_generated.go"); -const metaModelPath = path.resolve(__dirname, "metaModel.json"); - -if (!fs.existsSync(metaModelPath)) { - console.error("Meta model file not found; did you forget to run fetchModel.mts?"); - process.exit(1); -} - -const originalModel: MetaModel = JSON.parse(fs.readFileSync(metaModelPath, "utf-8")); -const model = structuredClone(originalModel); -let typeScriptModel: MetaModel; - -export function getTypeScriptModel(): MetaModel { - return structuredClone(typeScriptModel); -} - -// Custom structures to add to the model -const customStructures: Structure[] = [ - { - name: "InitializationOptions", - properties: [ - { - name: "disablePushDiagnostics", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "DisablePushDiagnostics disables automatic pushing of diagnostics to the client.", - }, - { - name: "codeLensShowLocationsCommandName", - type: { kind: "base", name: "string" }, - optional: true, - documentation: "The client-side command name that resolved references/implementations `CodeLens` should trigger. Arguments passed will be `(DocumentUri, Position, Location[])`.", - }, - { - name: "userPreferences", - type: { kind: "reference", name: "any" }, - optional: true, - documentation: "userPreferences and/or formatting options if provided at initialization.", - }, - { - name: "enableTelemetry", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "EnableTelemetry enables sending telemetry events from the server to the client.", - }, - { - name: "logVerbosity", - type: { kind: "reference", name: "LogVerbosity" }, - optional: true, - documentation: "The initial log verbosity level, matching the client's output channel log level at startup. Subsequent changes are sent via custom/setLogVerbosity.", - }, - { - name: "runExternalCode", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "RunExternalCode allows configured content mappers to launch external plugin processes. The client should set this only for trusted workspaces. It mirrors the --runExternalCode CLI flag.", - }, - { - name: "trackFlakyDiagnostics", - type: { kind: "reference", name: "DiagnosticFlakeLogLevel" }, - optional: true, - documentation: "The level at which we track flaky diagnostics, if at all.", - }, - ], - documentation: "InitializationOptions contains user-provided initialization options.", - }, - { - name: "AutoImportFix", - properties: [ - { - name: "kind", - type: { kind: "reference", name: "AutoImportFixKind" }, - omitzeroValue: true, - }, - { - name: "name", - type: { kind: "base", name: "string" }, - omitzeroValue: true, - }, - { - name: "importKind", - type: { kind: "reference", name: "ImportKind" }, - }, - { - name: "useRequire", - type: { kind: "base", name: "boolean" }, - omitzeroValue: true, - }, - { - name: "addAsTypeOnly", - type: { kind: "reference", name: "AddAsTypeOnly" }, - }, - { - name: "moduleSpecifier", - type: { kind: "base", name: "string" }, - documentation: "The module specifier for this auto-import.", - omitzeroValue: true, - }, - { - name: "importIndex", - type: { kind: "base", name: "integer" }, - documentation: "Index of the import to modify when adding to an existing import declaration.", - }, - { - name: "usagePosition", - type: { kind: "reference", name: "Position" }, - optional: true, - }, - { - name: "namespacePrefix", - type: { kind: "base", name: "string" }, - omitzeroValue: true, - }, - ], - documentation: "AutoImportFix contains information about an auto-import suggestion.", - }, - { - name: "CompletionItemData", - properties: [ - { - name: "fileName", - type: { kind: "base", name: "string" }, - documentation: "The file name where the completion was requested.", - omitzeroValue: true, - }, - { - name: "position", - type: { kind: "base", name: "integer" }, - documentation: "The position where the completion was requested.", - omitzeroValue: true, - }, - { - name: "supplementalFileIndex", - type: { kind: "base", name: "integer" }, - optional: true, - documentation: "Zero-based index into the canonical file's supplemental source files. Absent when the completion was requested in the canonical file.", - }, - { - name: "source", - type: { kind: "base", name: "string" }, - documentation: "Special source value for disambiguation.", - omitzeroValue: true, - }, - { - name: "name", - type: { kind: "base", name: "string" }, - documentation: "The name of the completion item.", - omitzeroValue: true, - }, - { - name: "autoImport", - type: { kind: "reference", name: "AutoImportFix" }, - optional: true, - documentation: "Auto-import data for this completion item.", - }, - { - name: "isImportStatementCompletion", - type: { kind: "base", name: "boolean" }, - omitzeroValue: true, - }, - ], - documentation: "CompletionItemData is preserved on a CompletionItem between CompletionRequest and CompletionResolveRequest.", - }, - { - name: "CodeLensData", - properties: [ - { - name: "kind", - type: { kind: "reference", name: "CodeLensKind" }, - documentation: `The kind of the code lens ("references" or "implementations").`, - }, - { - name: "uri", - type: { kind: "base", name: "DocumentUri" }, - documentation: `The document in which the code lens and its range are located.`, - }, - { - name: "position", - type: { kind: "base", name: "integer" }, - documentation: `The position of the code lens declaration in its virtual source file.`, - }, - { - name: "supplementalFileIndex", - type: { kind: "base", name: "integer" }, - optional: true, - documentation: `Zero-based index into the canonical file's supplemental source files. Absent for the canonical source file.`, - }, - ], - }, - { - name: "ExperimentalServerCapabilities", - properties: [ - { - name: "customSourceDefinitionProvider", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "The server provides source definition support via custom/textDocument/sourceDefinition.", - }, - { - name: "customMultiDocumentHighlightProvider", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "The server provides multi-document highlight support via custom/textDocument/multiDocumentHighlight.", - }, - ], - documentation: "ExperimentalServerCapabilities contains experimental capabilities under development.", - }, - { - name: "ExperimentalClientCapabilities", - properties: [ - { - name: "hoverVerbosityLevel", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "The client supports hover verbosityLevel requests and canIncreaseVerbosity responses.", - }, - ], - documentation: "ExperimentalClientCapabilities contains experimental capabilities under development.", - }, - { - name: "VSOnAutoInsertOptions", - properties: [ - { - name: "_vs_triggerCharacters", - type: { kind: "array", element: { kind: "base", name: "string" } }, - documentation: "List of trigger characters that trigger auto-insert.", - }, - ], - documentation: "Options for the textDocument/_vs_onAutoInsert provider capability.", - }, - { - name: "VSReferenceItem", - properties: [ - { - name: "_vs_id", - type: { kind: "base", name: "integer" }, - documentation: "Unique identifier for this reference item.", - }, - { - name: "_vs_definitionId", - type: { kind: "base", name: "integer" }, - optional: true, - documentation: "The ID of the definition item this reference belongs to. Absent for definition items themselves.", - }, - { - name: "_vs_kind", - type: { kind: "array", element: { kind: "reference", name: "VSReferenceKind" } }, - optional: true, - documentation: "The kind(s) of this reference (read, write, etc.).", - }, - { - name: "_vs_location", - type: { kind: "reference", name: "Location" }, - documentation: "The location of this reference.", - }, - { - name: "_vs_definitionText", - type: { kind: "reference", name: "VSClassifiedTextElement" }, - optional: true, - documentation: "Classified display text for the definition (used for grouping headers in the UI).", - }, - { - name: "_vs_projectName", - type: { kind: "base", name: "string" }, - optional: true, - documentation: "The project name for this reference.", - }, - { - name: "_vs_containingType", - type: { kind: "base", name: "string" }, - optional: true, - documentation: "The containing type for this reference.", - }, - ], - documentation: "A VS-specific reference item with grouping support for Find All References.", - }, - { - name: "VSOnAutoInsertParams", - properties: [ - { - name: "_vs_textDocument", - type: { kind: "reference", name: "TextDocumentIdentifier" }, - documentation: "The text document.", - }, - { - name: "_vs_position", - type: { kind: "reference", name: "Position" }, - documentation: "The position inside the text document.", - }, - { - name: "_vs_ch", - type: { kind: "base", name: "string" }, - documentation: "The character that triggered the auto-insert.", - }, - ], - documentation: "Parameters for the textDocument/_vs_onAutoInsert request.", - }, - { - name: "VSOnAutoInsertResponseItem", - properties: [ - { - name: "_vs_textEditFormat", - type: { kind: "reference", name: "InsertTextFormat" }, - documentation: "The format of the text edit (plaintext or snippet).", - }, - { - name: "_vs_textEdit", - type: { kind: "reference", name: "TextEdit" }, - documentation: "The text edit to apply for the auto-insertion.", - }, - ], - documentation: "Response item for the textDocument/_vs_onAutoInsert request.", - }, - { - name: "RequestFailureTelemetryEvent", - properties: [ - { - name: "eventName", - type: { kind: "stringLiteral", value: "languageServer.errorResponse" }, - documentation: "The name of the telemetry event.", - }, - { - name: "telemetryPurpose", - type: { kind: "stringLiteral", value: "error" }, - documentation: "Indicates whether the reason for generating the event (e.g. general usage telemetry or errors).", - }, - { - name: "properties", - type: { kind: "reference", name: "RequestFailureTelemetryProperties" }, - documentation: "The properties associated with the event.", - }, - ], - documentation: "A RequestFailureTelemetryEvent is sent when a request fails and the server recovers.", - }, - { - name: "RequestFailureTelemetryProperties", - properties: [ - { - name: "errorCode", - type: { kind: "base", name: "string" }, - documentation: "The error code associated with the event.", - }, - { - name: "requestMethod", - type: { kind: "base", name: "string" }, - documentation: "The method of the request that caused the event.", - }, - { - name: "stack", - type: { kind: "base", name: "string" }, - documentation: "The stack trace associated with the event.", - }, - ], - documentation: "RequestFailureTelemetryProperties contains failure information when an LSP request manages to recover.", - }, - { - name: "ProfileParams", - properties: [ - { - name: "dir", - type: { kind: "base", name: "string" }, - documentation: "The directory path where the profile should be saved.", - }, - ], - documentation: "Parameters for profiling requests.", - }, - { - name: "ProfileResult", - properties: [ - { - name: "file", - type: { kind: "base", name: "string" }, - documentation: "The file path where the profile was saved.", - }, - ], - documentation: "Result of a profiling request.", - }, - { - name: "InitializeAPISessionParams", - properties: [ - { - name: "pipe", - type: { kind: "base", name: "string" }, - optional: true, - documentation: "Optional path to use for the named pipe or Unix domain socket. If not provided, a unique path will be generated.", - }, - ], - documentation: "Parameters for the initializeAPISession request.", - }, - { - name: "InitializeAPISessionResult", - properties: [ - { - name: "sessionId", - type: { kind: "base", name: "string" }, - documentation: "The unique identifier for this API session.", - }, - { - name: "pipe", - type: { kind: "base", name: "string" }, - documentation: "The path to the named pipe or Unix domain socket for API communication.", - }, - ], - documentation: "Result for the initializeAPISession request.", - }, - { - name: "ProjectInfoParams", - properties: [ - { - name: "textDocument", - type: { kind: "reference", name: "TextDocumentIdentifier" }, - documentation: "The text document to get project info for.", - }, - ], - documentation: "Parameters for the custom/projectInfo request.", - }, - { - name: "ProjectInfoResult", - properties: [ - { - name: "configFilePath", - type: { kind: "base", name: "string" }, - documentation: "The absolute path to the config file (e.g. /path/to/tsconfig.json) for the project that contains this file, or an empty string if the file is in an inferred project.", - }, - ], - documentation: "Result for the custom/projectInfo request.", - }, - { - name: "ContentMapperManifest", - properties: [ - { name: "name", type: { kind: "base", name: "string" }, documentation: "Human-readable mapper name." }, - { name: "version", type: { kind: "base", name: "string" }, optional: true, documentation: "Mapper version." }, - { name: "exec", type: { kind: "array", element: { kind: "base", name: "string" } }, documentation: "Executable and arguments used to start the mapper." }, - { name: "cwd", type: { kind: "base", name: "string" }, optional: true, documentation: "Absolute working directory for the mapper process." }, - { name: "compilerOptions", type: { kind: "array", element: { kind: "base", name: "string" } }, optional: true, documentation: "Compiler option names forwarded to the mapper." }, - { name: "dynamicConfig", type: { kind: "base", name: "boolean" }, optional: true, documentation: "Whether the mapper uses project-scoped dynamic configuration." }, - ], - documentation: "Inline content mapper manifest supplied by a contributing extension.", - }, - { - name: "InferredProjectContentMapperContribution", - properties: [ - { name: "options", type: { kind: "reference", name: "LSPObject" }, optional: true, documentation: "Options supplied to transforms in inferred projects." }, - { name: "manifest", type: { kind: "reference", name: "ContentMapperManifest" }, documentation: "Inline manifest for the mapper contributed to inferred projects." }, - ], - documentation: "Content mapper configuration contributed to inferred projects.", - }, - { - name: "ContentMapperContribution", - properties: [ - { name: "contributorId", type: { kind: "base", name: "string" }, documentation: "Unique identifier of the contributor extension." }, - { name: "extensions", type: { kind: "array", element: { kind: "base", name: "string" } }, documentation: "File extensions handled by this content mapper." }, - { name: "inferredProjectContribution", type: { kind: "reference", name: "InferredProjectContentMapperContribution" }, optional: true, documentation: "When present, contributes this mapper to inferred projects." }, - ], - documentation: "One extension-provided content mapper contribution.", - }, - { - name: "SetContentMapperContributionsParams", - properties: [ - { name: "contributions", type: { kind: "array", element: { kind: "reference", name: "ContentMapperContribution" } }, documentation: "Complete replacement set of active extension contributions." }, - { name: "openDocuments", type: { kind: "array", element: { kind: "reference", name: "TextDocumentIdentifier" } }, documentation: "Currently open documents matching contributed extensions." }, - ], - documentation: "Parameters for the custom/setContentMapperContributions request.", - }, - { - name: "SetLogVerbosityParams", - properties: [ - { - name: "verbosity", - type: { kind: "reference", name: "LogVerbosity" }, - documentation: "The log verbosity level.", - }, - ], - documentation: "Parameters for the custom/setLogVerbosity notification.", - }, - { - name: "PerformanceStatsTelemetryEvent", - properties: [ - { - name: "eventName", - type: { kind: "stringLiteral", value: "languageServer.performanceStats" }, - documentation: "The name of the telemetry event.", - }, - { - name: "telemetryPurpose", - type: { kind: "stringLiteral", value: "usage" }, - documentation: "Indicates this is a usage telemetry event.", - }, - { - name: "measurements", - type: { kind: "reference", name: "PerformanceStatsTelemetryMeasurements" }, - documentation: "Numeric measurements for this telemetry event.", - }, - ], - documentation: "A PerformanceStatsTelemetryEvent is sent periodically with performance and resource usage statistics.", - }, - { - name: "PerformanceStatsTelemetryMeasurements", - properties: [ - { name: "openFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of files currently open in the editor." }, - { name: "uptimeSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Seconds since the session was initialized." }, - { name: "projectCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of loaded projects." }, - { name: "configCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of loaded config files." }, - { name: "cachedDiskFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of files cached from disk." }, - { name: "memoryUsedBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total memory mapped by the Go runtime in bytes." }, - { name: "goMemLimit", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "GOMEMLIMIT value in bytes, or 0 if not set." }, - { name: "goGCPercent", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "GOGC percentage value configured for the GC." }, - { name: "heapGoalBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap size target the GC is working toward in bytes." }, - { name: "heapLiveBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Bytes of live (reachable) heap objects." }, - { name: "heapObjectCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of live or unswept objects occupying heap memory." }, - { name: "heapStackBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory reserved for goroutine stacks." }, - { name: "heapReleasedBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory returned to the OS." }, - { name: "heapFreeBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory that is free and eligible to be returned to the OS." }, - { name: "gcScanHeapBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total scannable heap bytes — how much the GC must traverse." }, - { name: "goMaxProcs", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "The current GOMAXPROCS value." }, - { name: "goroutineCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Current number of goroutines." }, - { name: "gcCyclesTotal", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total completed GC cycles." }, - { name: "gcCPUSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Cumulative CPU time spent in GC in seconds." }, - { name: "userCPUSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Cumulative CPU time spent in user Go code in seconds." }, - { name: "systemMemTotal", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total physical memory on the system in bytes." }, - { name: "systemMemUsed", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Used physical memory on the system in bytes." }, - { name: "autoImportProjectBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of auto-import project buckets." }, - { name: "autoImportNodeModulesBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of auto-import node_modules buckets." }, - { name: "autoImportUniquePackageCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Unique packages across all node_modules buckets." }, - { name: "autoImportProjectExportCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total indexed exports from project files." }, - { name: "autoImportNodeModulesExportCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total indexed exports from node_modules." }, - { name: "autoImportProjectFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total files tracked across project buckets." }, - { name: "autoImportNodeModulesFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total files tracked across node_modules buckets." }, - { name: "autoImportNodeModulesUnfilteredBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of node_modules buckets with no package.json filter." }, - ], - documentation: "Numeric measurements for PerformanceStatsTelemetryEvent.", - }, - { - name: "ProjectInfoTelemetryEvent", - properties: [ - { - name: "eventName", - type: { kind: "stringLiteral", value: "languageServer.projectInfo" }, - documentation: "The name of the telemetry event.", - }, - { - name: "telemetryPurpose", - type: { kind: "stringLiteral", value: "usage" }, - documentation: "Indicates this is a usage telemetry event.", - }, - { - name: "properties", - type: { kind: "map", key: { kind: "base", name: "string" }, value: { kind: "base", name: "string" } }, - documentation: "String properties for this telemetry event. Complex values (compilerOptions, fileStats) are JSON-stringified.", - }, - { - name: "measurements", - type: { kind: "reference", name: "ProjectInfoTelemetryMeasurements" }, - documentation: "Numeric measurements for this telemetry event.", - }, - ], - documentation: "A ProjectInfoTelemetryEvent is sent once per project when it is first loaded.", - }, - { - name: "ProjectInfoTelemetryMeasurements", - properties: [ - { name: "jsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "jsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "jsxFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "jsxFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "tsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "tsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "tsxFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "tsxFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "dtsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - { name: "dtsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, - ], - documentation: "Numeric measurements for ProjectInfoTelemetryEvent.", - }, - { - name: "MultiDocumentHighlight", - properties: [ - { - name: "uri", - type: { kind: "base", name: "DocumentUri" }, - documentation: "The URI of the document containing the highlights.", - }, - { - name: "highlights", - type: { kind: "array", element: { kind: "reference", name: "DocumentHighlight" } }, - documentation: "The highlights for the document.", - }, - ], - documentation: "Represents a collection of document highlights from a single document, used in multi-document highlight responses.", - }, - { - name: "MultiDocumentHighlightParams", - properties: [ - { - name: "textDocument", - type: { kind: "reference", name: "TextDocumentIdentifier" }, - documentation: "The text document.", - }, - { - name: "position", - type: { kind: "reference", name: "Position" }, - documentation: "The position inside the text document.", - }, - { - name: "filesToSearch", - type: { kind: "array", element: { kind: "base", name: "DocumentUri" } }, - documentation: "The list of file URIs to search for highlights across.", - }, - ], - documentation: "Parameters for the custom/textDocument/multiDocumentHighlight request.", - }, - { - name: "VSClassifiedTextRun", - properties: [ - { - name: "ClassificationTypeName", - type: { kind: "base", name: "string" }, - documentation: "The classification type name (e.g. 'keyword', 'class name', 'parameter name').", - }, - { - name: "Text", - type: { kind: "base", name: "string" }, - documentation: "The text content of this run.", - }, - { - name: "MarkerTagType", - type: { kind: "base", name: "string" }, - optional: true, - documentation: "Optional marker tag type.", - }, - { - name: "Style", - type: { kind: "base", name: "integer" }, - optional: true, - omitzeroValue: true, - documentation: "The style of this text run.", - }, - { - name: "_vs_type", - type: { kind: "stringLiteral", value: "ClassifiedTextRun" }, - documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", - }, - ], - documentation: "A classified text run with text and classification type, used for colorized display in VS.", - }, - { - name: "VSClassifiedTextElement", - properties: [ - { - name: "Runs", - type: { kind: "array", element: { kind: "reference", name: "VSClassifiedTextRun" } }, - documentation: "The classified text runs that make up this element.", - }, - { - name: "_vs_type", - type: { kind: "stringLiteral", value: "ClassifiedTextElement" }, - documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", - }, - ], - documentation: "A classified text element containing an array of classified text runs, used for colorized labels in VS.", - }, - { - name: "VSImageId", - properties: [ - { - name: "Guid", - type: { kind: "base", name: "string" }, - documentation: "The GUID of the image catalog containing this image.", - }, - { - name: "Id", - type: { kind: "base", name: "integer" }, - documentation: "The numeric identifier of the image within its catalog.", - }, - { - name: "_vs_type", - type: { kind: "stringLiteral", value: "ImageId" }, - documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", - }, - ], - documentation: "Identifies an image in a VS image catalog. Used to render symbol-kind icons (e.g. in hover tooltips).", - }, - { - name: "VSImageElement", - properties: [ - { - name: "ImageId", - type: { kind: "reference", name: "VSImageId" }, - documentation: "The image to display.", - }, - { - name: "_vs_type", - type: { kind: "stringLiteral", value: "ImageElement" }, - documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", - }, - ], - documentation: "An image element (e.g. a symbol-kind icon) for use in VS rich content such as hover tooltips.", - }, - { - name: "VSContainerElement", - properties: [ - { - name: "Style", - type: { kind: "reference", name: "VSContainerElementStyle" }, - documentation: "Layout style for the child elements.", - }, - { - name: "Elements", - type: { - kind: "array", - element: { - kind: "or", - items: [ - { kind: "reference", name: "VSImageElement" }, - { kind: "reference", name: "VSClassifiedTextElement" }, - { kind: "reference", name: "VSContainerElement" }, - ], - }, - }, - documentation: "The child elements contained within this container.", - }, - { - name: "_vs_type", - type: { kind: "stringLiteral", value: "ContainerElement" }, - documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", - }, - ], - documentation: "A container element that groups other VS rich-content elements (images, classified text, or nested containers). Used to build the VS hover raw content that combines a symbol icon with colorized text.", - }, -]; - -const customEnumerations: Enumeration[] = [ - { - name: "VSContainerElementStyle", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Wrapped", value: 0, documentation: "Child elements are laid out inline, wrapping as needed (e.g. an icon next to a signature line)." }, - { name: "Stacked", value: 1, documentation: "Child elements are stacked vertically, each on its own line (e.g. a signature line followed by documentation)." }, - ], - documentation: "Layout style for a VSContainerElement's children, mirroring VS's Microsoft.VisualStudio.Text.Adornments.ContainerElementStyle.", - }, - { - name: "LogVerbosity", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Off", value: 0, documentation: "All logging disabled." }, - { name: "Trace", value: 1, documentation: "Most verbose; includes LSP request/response traces." }, - { name: "Debug", value: 2, documentation: "Verbose server logs." }, - { name: "Info", value: 3, documentation: "Normal server logs." }, - { name: "Warning", value: 4, documentation: "Warnings only." }, - { name: "Error", value: 5, documentation: "Errors only." }, - ], - documentation: "Log verbosity level, mirroring the VS Code LogLevel enum values.", - }, - { - name: "DiagnosticFlakeLogLevel", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Off", value: 0, documentation: "All flake logging disabled." }, - { name: "Log", value: 1, documentation: "Log flaky diagnostics to the error log." }, - { name: "Panic", value: 2, documentation: "Panic on flaky diagnostics." }, - ], - documentation: "Behavior for tracking and logging flaky diagnostics.", - }, - { - name: "VSReferenceKind", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Inactive", value: 0 }, - { name: "Comment", value: 1 }, - { name: "String", value: 2 }, - { name: "Read", value: 3 }, - { name: "Write", value: 4 }, - { name: "Reference", value: 5 }, - { name: "Name", value: 6 }, - { name: "Qualified", value: 7 }, - { name: "TypeArgument", value: 8 }, - { name: "TypeConstraint", value: 9 }, - { name: "BaseType", value: 10 }, - { name: "Constructor", value: 11 }, - { name: "Destructor", value: 12 }, - { name: "Import", value: 13 }, - { name: "Declaration", value: 14 }, - { name: "AddressOf", value: 15 }, - { name: "NotReference", value: 16 }, - { name: "Unknown", value: 17 }, - ], - }, - { - name: "CodeLensKind", - type: { - kind: "base", - name: "string", - }, - values: [ - { - name: "References", - value: "references", - }, - { - name: "Implementations", - value: "implementations", - }, - ], - }, - { - name: "AutoImportFixKind", - type: { kind: "base", name: "integer" }, - values: [ - { name: "UseNamespace", value: 0, documentation: "Augment an existing namespace import." }, - { name: "JsdocTypeImport", value: 1, documentation: "Add a JSDoc-only type import." }, - { name: "AddToExisting", value: 2, documentation: "Insert into an existing import declaration." }, - { name: "AddNew", value: 3, documentation: "Create a fresh import statement." }, - { name: "PromoteTypeOnly", value: 4, documentation: "Promote a type-only import when necessary." }, - ], - }, - { - name: "ImportKind", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Named", value: 0, documentation: "Adds a named import." }, - { name: "Default", value: 1, documentation: "Adds a default import." }, - { name: "Namespace", value: 2, documentation: "Adds a namespace import." }, - { name: "CommonJS", value: 3, documentation: "Adds a CommonJS import assignment." }, - ], - }, - { - name: "AddAsTypeOnly", - type: { kind: "base", name: "integer" }, - values: [ - { name: "Allowed", value: 1, documentation: "Import may be marked type-only if needed." }, - { name: "Required", value: 2, documentation: "Import must be marked type-only." }, - { name: "NotAllowed", value: 4, documentation: "Import cannot be marked type-only." }, - ], - }, - { - name: "ClassificationTypeName", - type: { kind: "base", name: "string" }, - values: [ - { name: "Keyword", value: "keyword", documentation: "Language keyword (e.g., function, const, class)." }, - { name: "Punctuation", value: "punctuation", documentation: "Punctuation characters (e.g., parentheses, commas, semicolons)." }, - { name: "Operator", value: "operator", documentation: "Operators (e.g., =, +, ?)." }, - { name: "WhiteSpace", value: "whitespace", documentation: "Whitespace including spaces and line breaks." }, - { name: "Text", value: "text", documentation: "Plain text with no special classification." }, - { name: "String", value: "string", documentation: "String and literal values." }, - { name: "Number", value: "number", documentation: "Numeric literal values." }, - { name: "Comment", value: "comment", documentation: "Comment text." }, - { name: "ClassName", value: "class name", documentation: "Class names." }, - { name: "InterfaceName", value: "interface name", documentation: "Interface names." }, - { name: "EnumName", value: "enum name", documentation: "Enum names." }, - { name: "ModuleName", value: "module name", documentation: "Module/namespace names." }, - { name: "MethodName", value: "method name", documentation: "Method and function names." }, - { name: "ParameterName", value: "parameter name", documentation: "Parameter names." }, - { name: "PropertyName", value: "property name", documentation: "Property and accessor names." }, - { name: "FieldName", value: "field name", documentation: "Field names (e.g., enum members)." }, - { name: "LocalName", value: "local name", documentation: "Local variable names." }, - { name: "TypeParameterName", value: "type parameter name", documentation: "Type parameter names." }, - { name: "Identifier", value: "identifier", documentation: "General identifiers (e.g., type aliases, imports)." }, - ], - documentation: "Roslyn classification type names used by VS for syntax coloring in tooltips and other UI elements.", - }, -]; -const customRequests: Request[] = [ - { - method: "custom/runGC", - typeName: "RunGCRequest", - messageDirection: "clientToServer", - result: { kind: "base", name: "null" }, - documentation: "Triggers garbage collection in the language server.", - }, - { - method: "custom/saveHeapProfile", - typeName: "SaveHeapProfileRequest", - params: { kind: "reference", name: "ProfileParams" }, - messageDirection: "clientToServer", - result: { kind: "reference", name: "ProfileResult" }, - documentation: "Saves a heap profile to the specified directory.", - }, - { - method: "custom/saveAllocProfile", - typeName: "SaveAllocProfileRequest", - params: { kind: "reference", name: "ProfileParams" }, - messageDirection: "clientToServer", - result: { kind: "reference", name: "ProfileResult" }, - documentation: "Saves an allocation profile to the specified directory.", - }, - { - method: "custom/startCPUProfile", - typeName: "StartCPUProfileRequest", - params: { kind: "reference", name: "ProfileParams" }, - messageDirection: "clientToServer", - result: { kind: "base", name: "null" }, - documentation: "Starts CPU profiling, writing to the specified directory when stopped.", - }, - { - method: "custom/stopCPUProfile", - typeName: "StopCPUProfileRequest", - messageDirection: "clientToServer", - result: { kind: "reference", name: "ProfileResult" }, - documentation: "Stops CPU profiling and saves the profile.", - }, - { - method: "custom/initializeAPISession", - typeName: "CustomInitializeAPISessionRequest", - params: { kind: "reference", name: "InitializeAPISessionParams" }, - result: { kind: "reference", name: "InitializeAPISessionResult" }, - messageDirection: "clientToServer", - documentation: "Custom request to initialize an API session.", - }, - { - method: "custom/projectInfo", - typeName: "CustomProjectInfoRequest", - params: { kind: "reference", name: "ProjectInfoParams" }, - result: { kind: "reference", name: "ProjectInfoResult" }, - messageDirection: "clientToServer", - documentation: "Returns project information (e.g. the tsconfig.json path) for a given text document.", - }, - { - method: "custom/setContentMapperContributions", - typeName: "CustomSetContentMapperContributionsRequest", - params: { kind: "reference", name: "SetContentMapperContributionsParams" }, - result: { kind: "base", name: "null" }, - messageDirection: "clientToServer", - documentation: "Replaces extension content mapper contributions and discovers configured mappers for matching open documents.", - }, - { - method: "custom/textDocument/sourceDefinition", - typeName: "CustomTextDocumentSourceDefinitionRequest", - params: { kind: "reference", name: "TextDocumentPositionParams" }, - result: { kind: "reference", name: "LocationOrLocationsOrDefinitionLinksOrNull" }, - messageDirection: "clientToServer", - documentation: "Request to get source definitions for a position.", - }, - { - method: "custom/textDocument/multiDocumentHighlight", - typeName: "CustomMultiDocumentHighlightRequest", - params: { kind: "reference", name: "MultiDocumentHighlightParams" }, - result: { - kind: "or", - items: [ - { kind: "array", element: { kind: "reference", name: "MultiDocumentHighlight" } }, - { kind: "base", name: "null" }, - ], - }, - messageDirection: "clientToServer", - documentation: "Request to get document highlights across multiple files.", - }, - { - method: "textDocument/_vs_onAutoInsert", - typeName: "VSOnAutoInsertRequest", - params: { kind: "reference", name: "VSOnAutoInsertParams" }, - result: { - kind: "or", - items: [ - { kind: "reference", name: "VSOnAutoInsertResponseItem" }, - { kind: "base", name: "null" }, - ], - }, - messageDirection: "clientToServer", - documentation: "Request for auto-insert when a trigger character is typed (VS-specific).", - }, - { - method: "textDocument/_vs_references", - typeName: "VSReferencesRequest", - params: { kind: "reference", name: "ReferenceParams" }, - result: { - kind: "or", - items: [ - { kind: "array", element: { kind: "reference", name: "VSReferenceItem" } }, - { kind: "base", name: "null" }, - ], - }, - messageDirection: "clientToServer", - documentation: "VS-specific request for Find All References with grouped reference items.", - }, -]; - -const customNotifications: Notification[] = [ - { - method: "custom/setLogVerbosity", - typeName: "CustomSetLogVerbosityNotification", - params: { kind: "reference", name: "SetLogVerbosityParams" }, - messageDirection: "clientToServer", - documentation: "Notification to set the server's log verbosity level based on the output channel's log level.", - }, -]; - -// compareStructures is the set of generated structures for which a Compare method should be emitted. -// The Compare method defines a total ordering by comparing fields in declaration order. -// All listed structures (and any structure-typed fields they reference) must contain only -// comparable fields: base scalar types, or other structures that are themselves in this set. -const compareStructures = new Set([ - "Position", - "Range", - "TextEdit", -]); - -const customTypeAliases: TypeAlias[] = [ - { - name: "TelemetryEvent", - type: { - kind: "or", - items: [ - { kind: "reference", name: "RequestFailureTelemetryEvent" }, - { kind: "reference", name: "PerformanceStatsTelemetryEvent" }, - { kind: "reference", name: "ProjectInfoTelemetryEvent" }, - { kind: "base", name: "null" }, - ], - }, - }, -]; - -// Track which custom Data structures were declared explicitly -const explicitDataStructures = new Set(customStructures.map(s => s.name)); - -// Map from registration method → { fieldName, optionsTypeName } -// Built during patchAndPreprocessModel, used during code generation. -interface RegistrationMethodInfo { - registrationMethod: string; - fieldName: string; - optionsTypeName: string; - isRegistrationOnly?: boolean; -} -let registrationMethods: RegistrationMethodInfo[] = []; - -// Patch and preprocess the model -function patchAndPreprocessModel() { - // Track which Data types we need to create as placeholders - const neededDataStructures = new Set(); - - // Collect all registration option types from requests and notifications - const registrationOptionTypes: Type[] = []; - for (const request of [...model.requests, ...model.notifications]) { - if (request.registrationOptions) { - registrationOptionTypes.push(request.registrationOptions); - } - } - - // Create synthetic structures for "and" types in registration options - const syntheticStructures: Structure[] = []; - for (let i = 0; i < registrationOptionTypes.length; i++) { - const regOptType = registrationOptionTypes[i]; - if (regOptType.kind === "and") { - // Find which request/notification this registration option belongs to - const owner = [...model.requests, ...model.notifications].find(r => r.registrationOptions === regOptType); - if (!owner) { - throw new Error("Could not find owner for 'and' type registration option"); - } - - // Determine the proper name based on the typeName or method - let structureName: string; - if (owner.typeName) { - // Use typeName as base: "ColorPresentationRequest" -> "ColorPresentationRegistrationOptions" - structureName = owner.typeName.replace(/Request$/, "").replace(/Notification$/, "") + "RegistrationOptions"; - } - else { - // Fall back to method: "textDocument/colorPresentation" -> "ColorPresentationRegistrationOptions" - const methodParts = owner.method.split("/"); - const lastPart = methodParts[methodParts.length - 1]; - structureName = titleCase(lastPart) + "RegistrationOptions"; - } - - // Extract all reference types from the "and" - const refTypes = regOptType.items.filter((item): item is ReferenceType => item.kind === "reference"); - - // Create a synthetic structure that combines all the referenced structures - syntheticStructures.push({ - name: structureName, - properties: [], - extends: refTypes, - documentation: `Registration options for ${owner.method}.`, - }); - - // Replace the "and" type with a reference to the synthetic structure - registrationOptionTypes[i] = { kind: "reference", name: structureName }; - // Also update the model so the request/notification has the resolved type - owner.registrationOptions = registrationOptionTypes[i]; - } - } - - for (const structure of model.structures) { - // Patch ServerCapabilities to add custom tsgo capability flags - if (structure.name === "ServerCapabilities") { - structure.properties.push({ - name: "_vs_onAutoInsertProvider", - type: { kind: "reference", name: "VSOnAutoInsertOptions" }, - optional: true, - documentation: "Provider options for the VS auto-insert feature via textDocument/_vs_onAutoInsert.", - }); - structure.properties.push({ - name: "_vs_referencesProvider", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "The server provides VS-specific grouped references via textDocument/_vs_references.", - }); - } - - // Patch HoverParams to add verbosityLevel - if (structure.name === "HoverParams") { - structure.properties.push({ - name: "verbosityLevel", - type: { kind: "base", name: "integer" }, - optional: true, - documentation: "Controls how many levels of type definitions will be expanded. Default is 0.", - }); - } - - // Patch WorkspaceSymbolParams to optionally scope the search to projects - // containing a document, matching Strada's currentProject mode. - if (structure.name === "WorkspaceSymbolParams") { - structure.properties.push({ - name: "textDocument", - type: { kind: "reference", name: "TextDocumentIdentifier" }, - optional: true, - documentation: "Scopes the workspace symbol search to projects containing this document.", - }); - } - - // Patch Hover to add canIncreaseVerbosity - if (structure.name === "Hover") { - structure.properties.push( - { - name: "canIncreaseVerbosity", - type: { kind: "base", name: "boolean" }, - omitzeroValue: true, - documentation: "Whether the verbosity level can be increased for this hover.", - }, - { - name: "_vs_rawContent", - type: { kind: "reference", name: "VSContainerElement" }, - optional: true, - documentation: "VS-specific rich content (symbol icon + colorized/classified text) rendered by clients that support Visual Studio extensions, in place of `contents`.", - }, - ); - } - - // Patch ClientCapabilities to add VS-specific client capabilities - if (structure.name === "ClientCapabilities") { - structure.properties.push( - { - name: "_vs_supportsVisualStudioExtensions", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "Whether the client supports Visual Studio extensions.", - }, - { - name: "_vs_supportedSnippetVersion", - type: { kind: "base", name: "integer" }, - optional: true, - documentation: "The snippet version supported by the client.", - }, - { - name: "_vs_supportsNotIncludingTextInTextDocumentDidOpen", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "Whether the client supports not including text in textDocument/didOpen notifications.", - }, - { - name: "_vs_supportsIconExtensions", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "Whether the client supports icon extensions.", - }, - { - name: "_vs_supportsDiagnosticRequests", - type: { kind: "base", name: "boolean" }, - optional: true, - documentation: "Whether the client supports diagnostic requests.", - }, - ); - } - - // Patch SignatureInformation to add VS-specific colorized label - if (structure.name === "SignatureInformation") { - structure.properties.push({ - name: "_vs_colorizedLabel", - type: { kind: "reference", name: "VSClassifiedTextElement" }, - optional: true, - documentation: "A colorized label for the signature, providing classified text runs for VS syntax coloring.", - }); - } - - for (const prop of structure.properties) { - // Replace initializationOptions type with custom InitializationOptions. - // The spec types this field as LSPAny?, which includes null, so keep - // it nullable so a null value sent by loose clients is accepted. - if (prop.name === "initializationOptions" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { - prop.type = { - kind: "or", - items: [ - { kind: "reference", name: "InitializationOptions" }, - { kind: "base", name: "null" }, - ], - }; - } - - // Replace Data *any fields with custom typed Data fields - if (prop.name === "data" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { - const customDataType = `${structure.name}Data`; - prop.type = { kind: "reference", name: customDataType }; - - // If we haven't explicitly declared this Data structure, we'll need a placeholder - if (!explicitDataStructures.has(customDataType)) { - neededDataStructures.add(customDataType); - } - } - - // Registration.registerOptions and Registration.method are handled specially: - // registerOptions becomes a custom struct, and method is derived from it. - // Remove both from the structure so the normal generator skips them. - if (structure.name === "Registration" && (prop.name === "registerOptions" || prop.name === "method")) { - // Will be filtered out below - } - - // Replace ProgressParams.value with a proper union type - if (structure.name === "ProgressParams" && prop.name === "value" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { - prop.type = { - kind: "or", - items: [ - { kind: "reference", name: "WorkDoneProgressBegin" }, - { kind: "reference", name: "WorkDoneProgressReport" }, - { kind: "reference", name: "WorkDoneProgressEnd" }, - ], - }; - } - } - } - - for (const notification of model.notifications) { - if (notification.typeName === "TelemetryEventNotification") { - notification.params = { - kind: "reference", - name: "TelemetryEvent", - }; - } - } - - // Create placeholder structures for Data types that weren't explicitly declared - for (const dataTypeName of neededDataStructures) { - const baseName = dataTypeName.replace(/Data$/, ""); - customStructures.push({ - name: dataTypeName, - properties: [], - documentation: `${dataTypeName} is a placeholder for custom data preserved on a ${baseName}.`, - }); - } - - // Add custom enumerations, custom structures, custom requests, and synthetic structures to the model - model.enumerations.push(...customEnumerations); - model.structures.push(...customStructures, ...syntheticStructures); - model.requests.push(...customRequests); - model.notifications.push(...customNotifications); - - typeScriptModel = structuredClone({ - ...model, - typeAliases: [...model.typeAliases, ...customTypeAliases], - }); - const sourceDefinition = typeScriptModel.requests.find(request => request.method === "custom/textDocument/sourceDefinition"); - const definition = typeScriptModel.requests.find(request => request.method === "textDocument/definition"); - if (!sourceDefinition || !definition) throw new Error("Missing definition request schemas."); - // The Go request names a synthesized union; clients use the standard definition result. - sourceDefinition.result = structuredClone(definition.result); - // Go's typed data structures are implementation details, not client wire contracts. - for (const structure of originalModel.structures) { - for (const property of structure.properties) { - if (property.name === "data" && property.type.kind === "reference" && property.type.name === "LSPAny") { - const target = typeScriptModel.structures.find(candidate => candidate.name === structure.name)?.properties.find(candidate => candidate.name === property.name); - if (!target) throw new Error(`Missing wire property ${structure.name}.${property.name}`); - target.type = structuredClone(property.type); - } - } - } - - // Build structure map for preprocessing - const structureMap = new Map(); - for (const structure of model.structures) { - structureMap.set(structure.name, structure); - } - - function collectInheritedProperties(structure: Structure, visited = new Set()): Property[] { - if (visited.has(structure.name)) { - return []; // Avoid circular dependencies - } - visited.add(structure.name); - - const properties: Property[] = []; - const inheritanceTypes = [...(structure.extends || []), ...(structure.mixins || [])]; - - for (const type of inheritanceTypes) { - if (type.kind === "reference") { - const inheritedStructure = structureMap.get(type.name); - if (inheritedStructure) { - properties.push( - ...collectInheritedProperties(inheritedStructure, new Set(visited)), - ...inheritedStructure.properties, - ); - } - } - } - - return properties; - } - - // Inline inheritance for each structure - for (const structure of model.structures) { - const inheritedProperties = collectInheritedProperties(structure); - - // Merge properties with structure's own properties taking precedence - const propertyMap = new Map(); - - inheritedProperties.forEach(prop => propertyMap.set(prop.name, prop)); - structure.properties.forEach(prop => propertyMap.set(prop.name, prop)); - - structure.properties = Array.from(propertyMap.values()); - structure.extends = undefined; - structure.mixins = undefined; - - // Replace experimental LSPAny with typed ExperimentalClientCapabilities in ClientCapabilities - if (structure.name === "ClientCapabilities") { - const expProp = structure.properties.find(p => p.name === "experimental"); - if (expProp) { - expProp.type = { kind: "reference", name: "ExperimentalClientCapabilities" }; - expProp.optional = true; - } - } - - // Replace experimental LSPAny with typed ExperimentalServerCapabilities in ServerCapabilities - if (structure.name === "ServerCapabilities") { - const expProp = structure.properties.find(p => p.name === "experimental"); - if (expProp) { - expProp.type = { kind: "reference", name: "ExperimentalServerCapabilities" }; - expProp.optional = true; - } - } - - // Remove method and registerOptions from Registration (handled by custom codegen) - if (structure.name === "Registration") { - structure.properties = structure.properties.filter(p => p.name !== "method" && p.name !== "registerOptions"); - } - } - - // Remove _InitializeParams structure after flattening (it was only needed for inheritance) - model.structures = model.structures.filter(s => s.name !== "_InitializeParams"); - - // Remove all notebook-related features from the model - function isNotebookRelatedName(name: string): boolean { - const lower = name.toLowerCase(); - return lower.includes("notebook"); - } - - function isNotebookRelatedMethod(method: string): boolean { - return method.toLowerCase().startsWith("notebookdocument/"); - } - - function typeReferencesNotebook(type: Type): boolean { - if (type.kind === "reference") return isNotebookRelatedName(type.name); - if (type.kind === "array") return typeReferencesNotebook(type.element); - if (type.kind === "or" || type.kind === "and") return type.items.some(typeReferencesNotebook); - if (type.kind === "map") return typeReferencesNotebook(type.key) || typeReferencesNotebook(type.value); - return false; - } - - function isEntirelyNotebookType(type: Type): boolean { - if (type.kind === "reference") return isNotebookRelatedName(type.name); - if (type.kind === "array") return isEntirelyNotebookType(type.element); - if (type.kind === "or" || type.kind === "and") return type.items.every(isEntirelyNotebookType); - return false; - } - - function removeNotebookFromType(type: Type): Type { - if (type.kind === "or") { - const filtered = type.items.filter(item => !typeReferencesNotebook(item)).map(removeNotebookFromType); - if (filtered.length === 1) return filtered[0]; - if (filtered.length < type.items.length) { - return { ...type, items: filtered }; - } - } - if (type.kind === "and") { - const filtered = type.items.filter(item => !typeReferencesNotebook(item)).map(removeNotebookFromType); - if (filtered.length === 1) return filtered[0]; - if (filtered.length < type.items.length) { - return { ...type, items: filtered }; - } - } - return type; - } - - // Filter out notebook structures (and notebook-only structures like ExecutionSummary) - const notebookOnlyStructures = new Set(["ExecutionSummary"]); - model.structures = model.structures.filter(s => !isNotebookRelatedName(s.name) && !notebookOnlyStructures.has(s.name)); - - // Remove notebook properties from remaining structures - for (const structure of model.structures) { - structure.properties = structure.properties.filter(p => { - if (isNotebookRelatedName(p.name)) return false; - // Only remove properties whose type is entirely notebook-related - if (isEntirelyNotebookType(p.type)) return false; - return true; - }); - // Clean up union types in remaining properties to remove notebook members - for (const prop of structure.properties) { - prop.type = removeNotebookFromType(prop.type); - } - } - - // Filter out notebook notifications and requests - model.notifications = model.notifications.filter(n => !isNotebookRelatedMethod(n.method)); - model.requests = model.requests.filter(r => !isNotebookRelatedMethod(r.method)); - - // Filter out notebook enumerations - model.enumerations = model.enumerations.filter(e => !isNotebookRelatedName(e.name)); - - // Remove notebook-related values from remaining enumerations - for (const enumeration of model.enumerations) { - enumeration.values = enumeration.values.filter(v => !isNotebookRelatedName(v.name)); - } - - // Filter out notebook type aliases - model.typeAliases = model.typeAliases.filter(ta => !isNotebookRelatedName(ta.name)); - - // Clean up type aliases that reference notebook types (e.g., DocumentFilter) - for (const ta of model.typeAliases) { - if (ta.type.kind === "or") { - ta.type.items = ta.type.items.filter(item => !typeReferencesNotebook(item)); - // If only one item remains, unwrap the union - if (ta.type.items.length === 1) { - ta.type = ta.type.items[0]; - } - } - } - - // Build the registration method map (after notebook filtering). - // Each unique registration method gets a field in the generated RegisterOptions struct. - const regMethodSeen = new Set(); - for (const request of [...model.requests, ...model.notifications]) { - if (!request.registrationOptions) continue; - const regMethod = (request as any).registrationMethod || request.method; - - if (regMethodSeen.has(regMethod)) continue; - regMethodSeen.add(regMethod); - - // Resolve the options type name - const ro = request.registrationOptions; - let optionsTypeName: string; - if (ro.kind === "reference") { - optionsTypeName = ro.name; - } - else { - throw new Error(`Unexpected registrationOptions kind '${ro.kind}' for ${request.method}; expected all to be resolved to references`); - } - - registrationMethods.push({ - registrationMethod: regMethod, - fieldName: methodNameIdentifier(regMethod), - optionsTypeName, - }); - } - - // Identify registration-only methods (not also a request/notification method). - // These need their own Method constant emitted. - const allRequestMethods = new Set([...model.requests, ...model.notifications].map(r => r.method)); - for (const reg of registrationMethods) { - (reg as any).isRegistrationOnly = !allRequestMethods.has(reg.registrationMethod); - } - - // Merge LSPErrorCodes into ErrorCodes and remove LSPErrorCodes - const errorCodesEnum = model.enumerations.find(e => e.name === "ErrorCodes"); - const lspErrorCodesEnum = model.enumerations.find(e => e.name === "LSPErrorCodes"); - if (errorCodesEnum && lspErrorCodesEnum) { - // Merge LSPErrorCodes values into ErrorCodes - errorCodesEnum.values.push(...lspErrorCodesEnum.values); - // Remove LSPErrorCodes from the model - model.enumerations = model.enumerations.filter(e => e.name !== "LSPErrorCodes"); - } - - // Singularize plural enum names (e.g., "ErrorCodes" -> "ErrorCode") - for (const enumeration of model.enumerations) { - if (enumeration.name.endsWith("Codes")) { - enumeration.name = enumeration.name.slice(0, -1); // "Codes" -> "Code" - } - else if (enumeration.name.endsWith("Modifiers")) { - enumeration.name = enumeration.name.slice(0, -1); // "Modifiers" -> "Modifier" - } - else if (enumeration.name.endsWith("Types")) { - enumeration.name = enumeration.name.slice(0, -1); // "Types" -> "Type" - } - } -} - -patchAndPreprocessModel(); - -// Validate that telemetry events in the TelemetryEvent union have properly shaped -// measurements and properties fields. measurements struct fields must only contain -// numeric types (decimal/integer/uinteger). -function validateTelemetryEvents() { - const telemetryAlias = customTypeAliases.find(a => a.name === "TelemetryEvent"); - if (!telemetryAlias || telemetryAlias.type.kind !== "or") return; - - const structureMap = new Map(model.structures.map(s => [s.name, s])); - - for (const item of telemetryAlias.type.items) { - if (item.kind !== "reference") continue; - const eventStruct = structureMap.get(item.name); - if (!eventStruct) continue; - - for (const prop of eventStruct.properties) { - if (prop.name === "measurements" && prop.type.kind === "reference") { - const measurementsStruct = structureMap.get(prop.type.name); - if (!measurementsStruct) continue; - for (const mp of measurementsStruct.properties) { - if (mp.type.kind !== "base" || !["decimal", "integer", "uinteger"].includes(mp.type.name)) { - throw new Error( - `Telemetry measurements struct ${prop.type.name}.${mp.name} must be a numeric type ` + - `(decimal/integer/uinteger), got ${mp.type.kind === "base" ? mp.type.name : mp.type.kind}`, - ); - } - } - } - } - } -} - -validateTelemetryEvents(); - -interface GoType { - name: string; - needsPointer: boolean; -} - -interface TypeInfo { - types: Map; - literalTypes: Map; - unionTypes: Map; - typeAliasMap: Map; -} - -const typeInfo: TypeInfo = { - types: new Map(), - literalTypes: new Map(), - unionTypes: new Map(), - typeAliasMap: new Map(), -}; - -function titleCase(s: string) { - return s.charAt(0).toUpperCase() + s.slice(1); -} - -function goFieldName(prop: Property): string { - if (prop.name.startsWith("_vs_")) { - return "VS" + titleCase(prop.name.slice(4)); - } - return titleCase(prop.name); -} - -function resolveType(type: Type): GoType { - switch (type.kind) { - case "base": - switch (type.name) { - case "integer": - return { name: "int32", needsPointer: false }; - case "uinteger": - return { name: "uint32", needsPointer: false }; - case "string": - return { name: "string", needsPointer: false }; - case "boolean": - return { name: "bool", needsPointer: false }; - case "URI": - return { name: "URI", needsPointer: false }; - case "DocumentUri": - return { name: "DocumentUri", needsPointer: false }; - case "decimal": - return { name: "float64", needsPointer: false }; - case "null": - return { name: "any", needsPointer: false }; - default: - throw new Error(`Unsupported base type: ${type.name}`); - } - - case "reference": - const typeAliasOverride = typeAliasOverrides.get(type.name); - if (typeAliasOverride) { - return typeAliasOverride; - } - - const nonResolved = nonResolvedAliases.has(type.name); - if (nonResolved) { - return { name: type.name, needsPointer: false }; - } - - // Check if this is a type alias that resolves to a union type - const aliasedType = typeInfo.typeAliasMap.get(type.name); - if (aliasedType) { - return resolveType(aliasedType); - } - - let refType = typeInfo.types.get(type.name); - if (!refType) { - refType = { name: type.name, needsPointer: true }; - typeInfo.types.set(type.name, refType); - } - return refType; - - case "array": { - const elementType = resolveType(type.element); - const arrayTypeName = elementType.needsPointer - ? `[]*${elementType.name}` - : `[]${elementType.name}`; - return { - name: arrayTypeName, - needsPointer: false, - }; - } - - case "map": { - const keyType = resolveType(type.key); - const valueType = resolveType(type.value); - const valueTypeName = valueType.needsPointer ? `*${valueType.name}` : valueType.name; - - return { - name: `map[${keyType.name}]${valueTypeName}`, - needsPointer: false, - }; - } - - case "tuple": { - if ( - type.items.length === 2 && - type.items[0].kind === "base" && type.items[0].name === "uinteger" && - type.items[1].kind === "base" && type.items[1].name === "uinteger" - ) { - return { name: "[2]uint32", needsPointer: false }; - } - - throw new Error("Unsupported tuple type: " + JSON.stringify(type)); - } - - case "stringLiteral": { - const typeName = `StringLiteral${type.value.split(".").map(titleCase).join("")}`; - typeInfo.literalTypes.set(String(type.value), typeName); - return { name: typeName, needsPointer: false }; - } - - case "integerLiteral": { - const typeName = `IntegerLiteral${type.value}`; - typeInfo.literalTypes.set(String(type.value), typeName); - return { name: typeName, needsPointer: false }; - } - - case "booleanLiteral": { - const typeName = `BooleanLiteral${type.value ? "True" : "False"}`; - typeInfo.literalTypes.set(String(type.value), typeName); - return { name: typeName, needsPointer: false }; - } - case "literal": - if (type.value.properties.length === 0) { - return { name: "struct{}", needsPointer: false }; - } - - throw new Error("Unexpected non-empty literal object: " + JSON.stringify(type.value)); - - case "or": { - return handleOrType(type); - } - - default: - throw new Error(`Unsupported type kind: ${type.kind}`); - } -} - -function flattenOrTypes(types: Type[]): Type[] { - const flattened = new Set(); - - for (const rawType of types) { - let type = rawType; - - // Dereference reference types that point to OR types - if (rawType.kind === "reference") { - const aliasedType = typeInfo.typeAliasMap.get(rawType.name); - if (aliasedType && aliasedType.kind === "or") { - type = aliasedType; - } - } - - if (type.kind === "or") { - // Recursively flatten OR types - for (const subType of flattenOrTypes(type.items)) { - flattened.add(subType); - } - } - else { - flattened.add(rawType); - } - } - - return Array.from(flattened); -} - -function pluralize(name: string): string { - // Handle common irregular plurals and special cases - if ( - name.endsWith("s") || name.endsWith("x") || name.endsWith("z") || - name.endsWith("ch") || name.endsWith("sh") - ) { - return name + "es"; - } - if (name.endsWith("y") && name.length > 1 && !"aeiou".includes(name[name.length - 2])) { - return name.slice(0, -1) + "ies"; - } - return name + "s"; -} - -function handleOrType(orType: OrType): GoType { - // First, flatten any nested OR types - const types = flattenOrTypes(orType.items); - - // Check for nullable types (OR with null) - const nullIndex = types.findIndex(item => item.kind === "base" && item.name === "null"); - let containedNull = nullIndex !== -1; - - // If it's nullable, remove the null type from the list - let nonNullTypes = types; - if (containedNull) { - nonNullTypes = types.filter((_, i) => i !== nullIndex); - } - - // If no types remain after filtering null, this shouldn't happen - if (nonNullTypes.length === 0) { - throw new Error("Union type with only null is not supported: " + JSON.stringify(types)); - } - - // Even if only one type remains after filtering null, we still need to create a union type - // to preserve the nullable behavior (all fields nil = null) - - let memberNames = nonNullTypes.map(type => { - if (type.kind === "reference") { - return type.name; - } - else if (type.kind === "base") { - return titleCase(type.name); - } - else if ( - type.kind === "array" && - (type.element.kind === "reference" || type.element.kind === "base") - ) { - return pluralize(titleCase(type.element.name)); - } - else if (type.kind === "array") { - // Handle more complex array types - const elementType = resolveType(type.element); - return `${elementType.name}Array`; - } - else if (type.kind === "literal" && type.value.properties.length === 0) { - return "EmptyObject"; - } - else if (type.kind === "tuple") { - return "Tuple"; - } - else { - throw new Error(`Unsupported type kind in union: ${type.kind}`); - } - }); - - // Find longest common prefix of member names chunked by PascalCase - function findLongestCommonPrefix(names: string[]): string { - if (names.length === 0) return ""; - if (names.length === 1) return ""; - - // Split each name into PascalCase chunks - function splitPascalCase(name: string): string[] { - const chunks: string[] = []; - let currentChunk = ""; - - for (let i = 0; i < name.length; i++) { - const char = name[i]; - if (char >= "A" && char <= "Z" && currentChunk.length > 0) { - // Start of a new chunk - chunks.push(currentChunk); - currentChunk = char; - } - else { - currentChunk += char; - } - } - - if (currentChunk.length > 0) { - chunks.push(currentChunk); - } - - return chunks; - } - - const allChunks = names.map(splitPascalCase); - const minChunkLength = Math.min(...allChunks.map(chunks => chunks.length)); - - // Find the longest common prefix of chunks - let commonChunks: string[] = []; - for (let i = 0; i < minChunkLength; i++) { - const chunk = allChunks[0][i]; - if (allChunks.every(chunks => chunks[i] === chunk)) { - commonChunks.push(chunk); - } - else { - break; - } - } - - return commonChunks.join(""); - } - - const commonPrefix = findLongestCommonPrefix(memberNames); - - let unionTypeName = ""; - - if (commonPrefix.length > 0) { - const trimmedMemberNames = memberNames.map(name => name.slice(commonPrefix.length)); - if (trimmedMemberNames.every(name => name)) { - unionTypeName = commonPrefix + trimmedMemberNames.join("Or"); - memberNames = trimmedMemberNames; - } - else { - unionTypeName = memberNames.join("Or"); - } - } - else { - unionTypeName = memberNames.join("Or"); - } - - if (containedNull) { - unionTypeName += "OrNull"; - } - else { - containedNull = false; - } - - const union = memberNames.map((name, i) => ({ name, type: nonNullTypes[i], containedNull })); - - typeInfo.unionTypes.set(unionTypeName, union); - - return { - name: unionTypeName, - needsPointer: false, - }; -} - -const typeAliasOverrides = new Map([ - ["LSPAny", { name: "any", needsPointer: false }], - ["LSPArray", { name: "[]any", needsPointer: false }], - ["LSPObject", { name: "map[string]any", needsPointer: false }], - ["uint64", { name: "uint64", needsPointer: false }], -]); - -// These type aliases are intentionally not resolved to their underlying types. -// It means that we can end up with non-normalized union types in some places. -// Also, unlike other type aliases, these will get a type alias in the generated source code. -// We may want to eventually do this for all type aliases though. -const nonResolvedAliases = new Set(customTypeAliases.map(ta => ta.name)); - -/** - * First pass: Resolve all type information - */ -function collectTypeDefinitions() { - // Process all enumerations first to make them available for struct fields - for (const enumeration of model.enumerations) { - typeInfo.types.set(enumeration.name, { - name: enumeration.name, - needsPointer: false, - }); - } - - const valueTypes = new Set([ - "Position", - "Range", - "Location", - "Color", - "TextDocumentIdentifier", - "PreviousResultId", - "VersionedTextDocumentIdentifier", - "OptionalVersionedTextDocumentIdentifier", - "ExportInfoMapKey", - ]); - - // Process all structures - for (const structure of model.structures) { - typeInfo.types.set(structure.name, { - name: structure.name, - needsPointer: !valueTypes.has(structure.name), - }); - } - - // Process all type aliases - for (const typeAlias of model.typeAliases) { - if (typeAliasOverrides.has(typeAlias.name)) { - continue; - } - - // Store the alias mapping so we can resolve it later - typeInfo.typeAliasMap.set(typeAlias.name, typeAlias.type); - } -} - -function formatDocumentation(s: string | undefined): string { - if (!s) return ""; - - let lines: string[] = []; - - for (let line of s.split("\n")) { - line = line.trimEnd(); - line = line.replace(/(\w ) +/g, "$1"); - // Some upstream docs include dangling block comment delimiters; remove them - // so they don't leak into generated `//` comments. - line = line.replace(/\s*\/\*+\s*/g, " "); - line = line.replace(/\s*\*+\/\s*/g, " "); - line = line.replace(/\s{2,}/g, " ").trimEnd(); - line = line.replace(/\{@link(?:code)?.*?([^} ]+)\}/g, "$1"); - line = line.replace(/^@(since|proposed|deprecated)(.*)/, (_, tag, rest) => { - lines.push(""); - return `${titleCase(tag)}${rest ? ":" + rest : "."}`; - }); - lines.push(line); - } - - // filter out contiguous empty lines - while (true) { - const toRemove = lines.findIndex((line, index) => { - if (line) return false; - if (index === 0) return true; - if (index === lines.length - 1) return true; - return !(lines[index - 1] && lines[index + 1]); - }); - if (toRemove === -1) break; - lines.splice(toRemove, 1); - } - - return lines.length > 0 ? "// " + lines.join("\n// ") + "\n" : ""; -} - -function methodNameIdentifier(name: string) { - return name.split("/").map(v => { - if (v === "$") return ""; - // Mirror goFieldName: "_vs_foo" -> "VSFoo". - if (v.startsWith("_vs_")) return "VS" + titleCase(v.slice(4)); - return titleCase(v); - }).join(""); -} - -/** - * Returns the JSON token kind ("string", "number", "object", "array", "boolean") - * for a given meta model Type, or undefined if the kind cannot be statically determined. - */ -function jsonKindForType(type: Type): string | undefined { - switch (type.kind) { - case "base": - switch (type.name) { - case "integer": - case "uinteger": - case "decimal": - return "number"; - case "string": - case "URI": - case "DocumentUri": - return "string"; - case "boolean": - return "boolean"; - default: - return undefined; - } - case "reference": { - if (typeAliasOverrides.has(type.name)) { - return undefined; - } - if (model.structures.some(s => s.name === type.name)) { - return "object"; - } - const enumeration = model.enumerations.find(e => e.name === type.name); - if (enumeration) { - switch (enumeration.type.name) { - case "string": - return "string"; - case "integer": - case "uinteger": - return "number"; - default: - return undefined; - } - } - const aliasType = typeInfo.typeAliasMap.get(type.name); - if (aliasType) return jsonKindForType(aliasType); - return undefined; - } - case "array": - return "array"; - case "map": - return "object"; - case "tuple": - return "array"; - case "stringLiteral": - return "string"; - case "integerLiteral": - return "number"; - case "booleanLiteral": - return "boolean"; - case "literal": - return "object"; - case "or": { - const kinds = new Set(type.items.map(item => jsonKindForType(item)).filter(Boolean)); - return kinds.size === 1 ? kinds.values().next().value : undefined; - } - default: - return undefined; - } -} - -function goKindCasesForJsonKind(kind: string): string { - switch (kind) { - case "string": - return `case '"':`; - case "number": - return `case '0':`; - case "object": - return `case '{':`; - case "array": - return `case '[':`; - case "boolean": - return `case 't', 'f':`; - default: - return ""; - } -} - -/** - * Checks if a meta model Type can represent a JSON null value. - * Used to determine whether to reject explicit JSON `null` for any field - * that can otherwise decode `null` without a type error. - */ -function typeCanBeNull(type: Type): boolean { - switch (type.kind) { - case "base": - return type.name === "null"; - case "reference": { - const override = typeAliasOverrides.get(type.name); - if (override) { - return override.name === "any"; - } - // A bare "any" reference resolves to Go's `any` (interface), which can hold null. - if (type.name === "any") { - return true; - } - if (nonResolvedAliases.has(type.name)) { - const customAlias = customTypeAliases.find(t => t.name === type.name); - if (customAlias) return typeCanBeNull(customAlias.type); - return false; - } - const aliased = typeInfo.typeAliasMap.get(type.name); - if (aliased) return typeCanBeNull(aliased); - return false; - } - case "or": - return type.items.some(item => typeCanBeNull(item)); - default: - return false; - } -} - -/** - * For a group of union entries that share the same JSON kind (e.g., all objects), - * find a discriminator field — a JSON property whose string literal type differs - * across variants — enabling efficient O(1) dispatch instead of try-each. - */ -function findDiscriminatorField(entries: { fieldName: string; typeName: string; originalType: Type; }[]): { - fieldName: string; - mapping: Map; - unmapped: { fieldName: string; typeName: string; originalType: Type; }[]; -} | null { - // For each entry, find string literal fields and build candidate discriminators. - // A valid discriminator is a field name that appears on multiple variants with - // different string literal values. - const fieldCandidates = new Map>(); - - for (const entry of entries) { - if (entry.originalType.kind !== "reference") continue; - const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); - if (!structure) continue; - - for (const prop of structure.properties) { - if (prop.type.kind === "stringLiteral") { - if (!fieldCandidates.has(prop.name)) { - fieldCandidates.set(prop.name, new Map()); - } - - const mapping = fieldCandidates.get(prop.name)!; - if (!mapping.has(prop.type.value)) { - mapping.set(prop.type.value, entry); - } - else { - // Two entries share the same literal value; invalidate this candidate. - mapping.set(prop.type.value, undefined); - } - } - } - } - - // Pick the discriminator field that covers the most entries. - let bestField: string | null = null; - let bestMapping: Map | null = null; - - for (const [fieldName, mapping] of fieldCandidates) { - const validMapping = new Map(); - for (const [value, entry] of mapping) { - if (entry !== undefined) validMapping.set(value, entry); - } - if (validMapping.size >= 2 && (!bestMapping || validMapping.size > bestMapping.size)) { - bestField = fieldName; - bestMapping = validMapping; - } - } - - if (!bestField || !bestMapping) return null; - - const mappedEntries = new Set(bestMapping.values()); - const unmapped = entries.filter(e => !mappedEntries.has(e)); - - return { fieldName: bestField, mapping: bestMapping, unmapped }; -} - -function hasCustomStructureCodec(name: string): boolean { - return name === "Registration"; -} - -/** - * For a group of union entries that share the same JSON kind, find fields whose - * presence/absence in the JSON uniquely identifies a variant. A "presence discriminator" - * for variant X is a required field on X that does not appear in any other variant's - * property set at all. - */ -function findPresenceDiscriminator(entries: { fieldName: string; typeName: string; originalType: Type; }[]): { - checks: { jsonFieldName: string; entry: { fieldName: string; typeName: string; originalType: Type; }; }[]; - unmapped: { fieldName: string; typeName: string; originalType: Type; }[]; -} | null { - // Collect all property names for each variant - const variantProps = new Map; }>(); - for (const entry of entries) { - if (entry.originalType.kind !== "reference") continue; - const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); - if (!structure) continue; - const required = structure.properties.filter(p => !p.optional && !p.omitzeroValue); - const allNames = new Set(structure.properties.map(p => p.name)); - variantProps.set(entry, { required, allNames }); - } - - const checks: { jsonFieldName: string; entry: typeof entries[0]; }[] = []; - const handled = new Set(); - - for (const entry of entries) { - const info = variantProps.get(entry); - if (!info) continue; - - const otherEntries = entries.filter(e => e !== entry); - for (const field of info.required) { - const absentFromAllOthers = otherEntries.every(other => { - const otherInfo = variantProps.get(other); - if (!otherInfo) return false; - return !otherInfo.allNames.has(field.name); - }); - if (absentFromAllOthers) { - checks.push({ jsonFieldName: field.name, entry }); - handled.add(entry); - break; - } - } - } - - if (checks.length === 0) return null; - - const unmapped = entries.filter(e => !handled.has(e)); - return { checks, unmapped }; -} - -/** - * Generate the Go code - */ -function generateCode() { - const parts: string[] = []; - - function write(s: string) { - parts.push(s); - } - - function writeLine(s = "") { - parts.push(s + "\n"); - } - - /** - * Generate Go code for discriminator-based union dispatch. - * Assumes a variable named `data` of type `json.Value` is in scope. - * Returns true if all switch branches return (exhaustive). - */ - function generateDiscriminatorDispatch( - disc: NonNullable>, - indent: string, - ): boolean { - writeLine(`${indent}switch string(jsonObjectRawField(data, ${JSON.stringify(disc.fieldName)})) {`); - for (const [value, entry] of disc.mapping) { - writeLine(`${indent}case \`"${value}"\`:`); - writeLine(`${indent}\to.${entry.fieldName} = new(${entry.typeName})`); - writeLine(`${indent}\treturn json.Unmarshal(data, o.${entry.fieldName})`); - } - let exhaustive = false; - if (disc.unmapped.length > 0) { - writeLine(`${indent}default:`); - exhaustive = generateUnmappedFallback(disc.unmapped, indent + "\t"); - } - writeLine(`${indent}}`); - return exhaustive; - } - - /** - * Generate streaming discriminator dispatch for unions with at most one - * unmapped fallback arm. Fields after the discriminator decode directly - * from the active decoder; fields before it are replayed by the helper. - */ - function generateStreamingDiscriminatorDispatch( - name: string, - disc: NonNullable>, - indent: string, - ) { - writeLine(`${indent}state, err := scanDiscriminatedStruct(dec, "${name}", ${JSON.stringify(disc.fieldName)})`); - writeLine(`${indent}if err != nil {`); - writeLine(`${indent}\treturn err`); - writeLine(`${indent}}`); - writeLine(`${indent}switch string(state.discriminatorValue) {`); - for (const [value, entry] of disc.mapping) { - writeLine(`${indent}case \`"${value}"\`:`); - writeLine(`${indent}\treturn unmarshalDiscriminatedArm(state, &o.${entry.fieldName})`); - } - writeLine(`${indent}default:`); - if (disc.unmapped.length === 1) { - writeLine(`${indent}\treturn unmarshalDiscriminatedArm(state, &o.${disc.unmapped[0].fieldName})`); - } - else { - writeLine(`${indent}\treturn state.invalidDiscriminator()`); - } - writeLine(`${indent}}`); - } - - function canStreamDiscriminator( - disc: NonNullable>, - ): boolean { - if (disc.unmapped.length > 1) { - return false; - } - const entries = [...disc.mapping.values(), ...disc.unmapped]; - return entries.every(entry => { - if (entry.originalType.kind !== "reference") { - return false; - } - const name = entry.originalType.name; - return !hasCustomStructureCodec(name) && model.structures.some(structure => structure.name === name); - }); - } - - /** - * Generate try-each fallback code for unmapped entries, chaining into - * presence dispatch if possible before falling back to raw try-each. - * Assumes a variable named `data` of type `json.Value` is in scope. - * Returns true if all generated paths return (exhaustive). - */ - function generateUnmappedFallback( - unmapped: { fieldName: string; typeName: string; originalType: Type; }[], - indent: string, - ): boolean { - if (unmapped.length <= 1) { - // Exactly 1 entry: it's the only remaining variant after dispatch, - // so use a hard error return instead of speculative err == nil. - for (const entry of unmapped) { - writeLine(`${indent}o.${entry.fieldName} = new(${entry.typeName})`); - writeLine(`${indent}return json.Unmarshal(data, o.${entry.fieldName})`); - } - return unmapped.length === 1; - } - // Try chaining presence dispatch on the remaining subset - const pres = findPresenceDiscriminator(unmapped); - if (pres) { - return generatePresenceDispatch(pres, indent); - } - else { - for (const entry of unmapped) { - writeLine(`${indent}var v${entry.fieldName} ${entry.typeName}`); - writeLine(`${indent}if err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); - writeLine(`${indent}\to.${entry.fieldName} = &v${entry.fieldName}`); - writeLine(`${indent}\treturn nil`); - writeLine(`${indent}}`); - } - return false; - } - } - - /** - * Iteratively collect all presence discriminator checks across multiple - * passes, so they can be emitted as a single flat switch with one scan. - */ - function collectAllPresenceChecks( - pres: NonNullable>, - ): { - allChecks: { jsonFieldName: string; entry: { fieldName: string; typeName: string; originalType: Type; }; }[]; - finalUnmapped: { fieldName: string; typeName: string; originalType: Type; }[]; - } { - const allChecks = [...pres.checks]; - let remaining = pres.unmapped; - while (remaining.length > 1) { - const next = findPresenceDiscriminator(remaining); - if (!next) break; - allChecks.push(...next.checks); - remaining = next.unmapped; - } - return { allChecks, finalUnmapped: remaining }; - } - - /** - * Generate Go code for presence-based union dispatch. - * Assumes a variable named `data` of type `json.Value` is in scope. - * Collects all presence checks iteratively, then emits a single flat - * switch jsonObjectHasKey(data, key1, key2, ...) so data is scanned once. - * Returns true if all switch branches return (exhaustive). - */ - function generatePresenceDispatch( - pres: NonNullable>, - indent: string, - ): boolean { - const { allChecks, finalUnmapped } = collectAllPresenceChecks(pres); - const args = allChecks.map(c => JSON.stringify(c.jsonFieldName)).join(", "); - writeLine(`${indent}switch jsonObjectHasKey(data, ${args}) {`); - for (let i = 0; i < allChecks.length; i++) { - writeLine(`${indent}case ${i}: // ${allChecks[i].jsonFieldName}`); - writeLine(`${indent}\to.${allChecks[i].entry.fieldName} = new(${allChecks[i].entry.typeName})`); - writeLine(`${indent}\treturn json.Unmarshal(data, o.${allChecks[i].entry.fieldName})`); - } - if (finalUnmapped.length > 0) { - writeLine(`${indent}default:`); - if (finalUnmapped.length === 1) { - // Only one variant left after dispatch — use hard error return. - const entry = finalUnmapped[0]; - writeLine(`${indent}\to.${entry.fieldName} = new(${entry.typeName})`); - writeLine(`${indent}\treturn json.Unmarshal(data, o.${entry.fieldName})`); - } - else { - for (const entry of finalUnmapped) { - writeLine(`${indent}\tvar v${entry.fieldName} ${entry.typeName}`); - writeLine(`${indent}\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); - writeLine(`${indent}\t\to.${entry.fieldName} = &v${entry.fieldName}`); - writeLine(`${indent}\t\treturn nil`); - writeLine(`${indent}\t}`); - } - } - } - writeLine(`${indent}}`); - // Exhaustive if the default case has a single hard-returning entry - return finalUnmapped.length === 1; - } - - function generateResolvedStruct(structure: Structure, indent: string = "\t"): string[] { - const lines: string[] = []; - - for (const prop of structure.properties) { - // Add property documentation if it exists - if (prop.documentation) { - const propDoc = formatDocumentation(prop.documentation); - if (propDoc) { - // Add the documentation with proper indentation - for (const line of propDoc.split("\n").filter(l => l)) { - lines.push(`${indent}${line}`); - } - } - } - - const type = resolveType(prop.type); - - // For reference types that are structures, use a named resolved type - if (prop.type.kind === "reference") { - const refStructure = model.structures.find(s => s.name === type.name); - if (refStructure) { - // Use a named type for the resolved version - lines.push(`${indent}${goFieldName(prop)} Resolved${type.name} \`json:"${prop.name},omitzero"\``); - continue; - } - } - - // For other types (primitives, enums, arrays, etc.), use the type directly (no pointer) - const goType = type.name; - lines.push(`${indent}${goFieldName(prop)} ${goType} \`json:"${prop.name},omitzero"\``); - } - - return lines; - } - - function generateResolveConversion(structure: Structure, varName: string, indent: string): string[] { - const lines: string[] = []; - - for (const prop of structure.properties) { - const type = resolveType(prop.type); - const fieldName = goFieldName(prop); - const accessPath = `${varName}.${fieldName}`; - - // For reference types that are structures, call the resolve method - if (prop.type.kind === "reference") { - const refStructure = model.structures.find(s => s.name === type.name); - if (refStructure) { - lines.push(`${indent}${fieldName}: ${accessPath}.resolve(),`); - continue; - } - } - - // For other types, dereference if pointer - if (prop.optional || type.needsPointer) { - lines.push(`${indent}${fieldName}: derefOr(${accessPath}),`); - } - else { - lines.push(`${indent}${fieldName}: ${accessPath},`); - } - } - - return lines; - } - - function collectStructureDependencies(structure: Structure, visited = new Set()): Structure[] { - if (visited.has(structure.name)) { - return []; - } - visited.add(structure.name); - - const deps: Structure[] = []; - - for (const prop of structure.properties) { - if (prop.type.kind === "reference") { - const refStructure = model.structures.find(s => s.name === (prop.type as ReferenceType).name); - if (refStructure) { - deps.push(...collectStructureDependencies(refStructure, new Set(visited))); - deps.push(refStructure); - } - } - } - - return deps; - } - - function generateResolvedTypeAndHelper(structure: Structure, isMain: boolean = false): string[] { - const lines: string[] = []; - const typeName = `Resolved${structure.name}`; - // Main method is exported (Resolve), helpers are unexported (resolve) - const methodName = isMain ? `Resolve` : `resolve`; - - // Generate the resolved type with documentation - if (!isMain) { - // For non-main types, add standard documentation header - if (structure.documentation) { - const typeDoc = formatDocumentation(structure.documentation); - if (typeDoc) { - // Prepend comment explaining this is the resolved version - lines.push(`// ${typeName} is a resolved version of ${structure.name} with all optional fields`); - lines.push(`// converted to non-pointer values for easier access.`); - lines.push(`//`); - // Add the original structure documentation - for (const line of typeDoc.split("\n").filter(l => l)) { - lines.push(line); - } - } - } - else { - // If no documentation, just add a basic comment - lines.push(`// ${typeName} is a resolved version of ${structure.name} with all optional fields`); - lines.push(`// converted to non-pointer values for easier access.`); - } - } - // For main type, documentation is added separately before calling this function - - lines.push(`type ${typeName} struct {`); - lines.push(...generateResolvedStruct(structure, "\t")); - lines.push(`}`); - lines.push(``); - - // Generate the conversion method on the pointer receiver - lines.push(`func (v *${structure.name}) ${methodName}() ${typeName} {`); - lines.push(`\tif v == nil {`); - lines.push(`\t\treturn ${typeName}{}`); - lines.push(`\t}`); - lines.push(`\treturn ${typeName}{`); - lines.push(...generateResolveConversion(structure, "v", "\t\t")); - lines.push(`\t}`); - lines.push(`}`); - lines.push(``); - - return lines; - } - - // File header - writeLine("// Code generated by generate.mts; DO NOT EDIT."); - writeLine(""); - writeLine("package lsproto"); - writeLine(""); - writeLine(`import (`); - writeLine(`\t"cmp"`); - writeLine(`\t"fmt"`); - writeLine(`\t"strings"`); - writeLine(""); - writeLine(`\t"github.com/microsoft/TypeScript/tsc/internal/json"`); - writeLine(`)`); - writeLine(""); - writeLine("// Meta model version " + model.metaData.version); - writeLine(""); - - // Generate structures - writeLine("// Structures\n"); - - for (const structure of model.structures) { - function generateStructFields(name: string, includeDocumentation: boolean) { - if (includeDocumentation) { - write(formatDocumentation(structure.documentation)); - } - - writeLine(`type ${name} struct {`); - - // Properties are now inlined, no need to embed extends/mixins - for (const prop of structure.properties) { - if (includeDocumentation) { - write(formatDocumentation(prop.documentation)); - } - - const type = resolveType(prop.type); - - // For properties marked with omitzeroValue, use value type with omitzero instead of pointer - const useOmitzero = prop.optional || prop.omitzeroValue; - const goType = (prop.optional || type.needsPointer) && !prop.omitzeroValue ? `*${type.name}` : type.name; - - // Strictness markers for the shared unmarshalStruct interpreter: - // required = must be present. A nilable field (pointer/slice/map, - // not omitzero) rejects an explicit JSON null by default; mark the - // rare spec-nullable ones with `nullable` so the interpreter allows it. - const required = !prop.optional && !prop.omitzeroValue; - const nilable = prop.optional || type.needsPointer || type.name.startsWith("[]") || type.name.startsWith("map[") || !!prop.omitzeroValue; - const nullable = nilable && (typeCanBeNull(prop.type) || !!prop.omitzeroValue); - const lspMarkers = [required ? "required" : "", nullable ? "nullable" : ""].filter(Boolean).join(","); - const lspTag = lspMarkers ? ` lsp:"${lspMarkers}"` : ""; - - writeLine(`\t${goFieldName(prop)} ${goType} \`json:"${prop.name}${useOmitzero ? ",omitzero" : ""}"${lspTag}\``); - - if (includeDocumentation) { - writeLine(""); - } - } - - // Special: add RegisterOptions field to Registration - if (structure.name === "Registration") { - writeLine(""); - writeLine(`\t// Options necessary for the registration. Determines the method.`); - writeLine(`\tRegisterOptions *RegisterOptions \`json:"-"\``); - } - - writeLine("}"); - writeLine(""); - } - - generateStructFields(structure.name, true); - writeLine(""); - - if (hasTextDocumentURI(structure)) { - // Generate TextDocumentURI method - const textDocProp = structure.properties?.find(p => (p.name === "textDocument" || p.name === "_vs_textDocument") && p.type.kind === "reference" && p.type.name === "TextDocumentIdentifier"); - const textDocFieldName = textDocProp ? goFieldName(textDocProp) : "TextDocument"; - writeLine(`func (s *${structure.name}) TextDocumentURI() DocumentUri {`); - writeLine(`\treturn s.${textDocFieldName}.Uri`); - writeLine(`}`); - writeLine(""); - - if (hasTextDocumentPosition(structure)) { - // Generate TextDocumentPosition method - const posProp = structure.properties?.find(p => (p.name === "position" || p.name === "_vs_position") && p.type.kind === "reference" && p.type.name === "Position"); - const posFieldName = posProp ? goFieldName(posProp) : "Position"; - writeLine(`func (s *${structure.name}) TextDocumentPosition() Position {`); - writeLine(`\treturn s.${posFieldName}`); - writeLine(`}`); - writeLine(""); - } - } - - const locationUriProperty = getLocationUriProperty(structure); - if (locationUriProperty) { - // Generate Location method - writeLine(`func (s ${structure.name}) GetLocation() Location {`); - if (locationUriProperty === "Uri" && structure.name === "Location") { - writeLine(`\treturn s`); - } - else { - writeLine(`\treturn Location{`); - writeLine(`\t\tUri: s.${locationUriProperty},`); - writeLine(`\t\tRange: s.${locationUriProperty.replace(/Uri$/, "Range")},`); - writeLine(`\t}`); - } - writeLine(`}`); - writeLine(""); - } - - // Generate UnmarshalJSONFrom method for structure validation. - // Structures with custom codecs are generated separately. - // Skip properties marked with omitzeroValue since they're optional by nature - const requiredProps = structure.properties?.filter(p => { - if (p.optional) return false; - if (p.omitzeroValue) return false; - return true; - }) || []; - // Check if any fields need null rejection - const hasNullRejectableFields = structure.properties?.some(p => { - if (p.omitzeroValue) return false; - if (typeCanBeNull(p.type)) return false; - const resolved = resolveType(p.type); - return p.optional || resolved.needsPointer || resolved.name.startsWith("[]") || resolved.name.startsWith("map["); - }) || false; - if ((requiredProps.length > 0 || hasNullRejectableFields) && !hasCustomStructureCodec(structure.name)) { - writeLine(`\tvar _ json.UnmarshalerFrom = (*${structure.name})(nil)`); - writeLine(""); - writeLine(`func (s *${structure.name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); - writeLine(`\treturn unmarshalStruct(s, dec)`); - writeLine(`}`); - writeLine(""); - } - - // Generate RegisterOptions struct and custom Registration marshal/unmarshal - // right after the Registration struct definition. - if (structure.name === "Registration") { - // RegisterOptions struct - writeLine(`// RegisterOptions is an externally-tagged union representing the options for a capability registration.`); - writeLine(`// Exactly one field should be set. The set field determines the method for the registration.`); - writeLine(`type RegisterOptions struct {`); - for (const reg of registrationMethods) { - writeLine(`\t${reg.fieldName} *${reg.optionsTypeName}`); - } - writeLine(`}`); - writeLine(""); - - // MarshalJSONTo for Registration - writeLine(`var _ json.MarshalerTo = (*Registration)(nil)`); - writeLine(""); - writeLine(`func (s *Registration) MarshalJSONTo(enc *json.Encoder) error {`); - - // Assert RegisterOptions is set and exactly one field is set - writeLine(`\tif s.RegisterOptions == nil {`); - writeLine(`\t\tpanic("RegisterOptions must be set")`); - writeLine(`\t}`); - writeLine(`\tassertOnlyOne("exactly one element of RegisterOptions should be set", countNonNil(s.RegisterOptions))`); - writeLine(""); - - writeLine(`\tif err := enc.WriteToken(json.BeginObject); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif err := enc.WriteValue(json.Value(\`"id"\`)); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif err := json.MarshalEncode(enc, s.Id); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif err := enc.WriteValue(json.Value(\`"method"\`)); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tvar method json.Value`); - writeLine(`\tvar opts any`); - writeLine(`\tswitch {`); - for (const reg of registrationMethods) { - writeLine(`\tcase s.RegisterOptions.${reg.fieldName} != nil:`); - writeLine(`\t\tmethod = json.Value(\`"${reg.registrationMethod}"\`)`); - writeLine(`\t\topts = s.RegisterOptions.${reg.fieldName}`); - } - writeLine(`\t}`); - writeLine(`\tif err := enc.WriteValue(method); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif err := enc.WriteValue(json.Value(\`"registerOptions"\`)); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif err := json.MarshalEncode(enc, opts); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\treturn enc.WriteToken(json.EndObject)`); - writeLine(`}`); - writeLine(""); - - // UnmarshalJSONFrom for Registration - writeLine(`var _ json.UnmarshalerFrom = (*Registration)(nil)`); - writeLine(""); - writeLine(`func (s *Registration) UnmarshalJSONFrom(dec *json.Decoder) error {`); - writeLine(`\t*s = Registration{}`); - writeLine(`\tconst (`); - writeLine(`\t\tmissingId uint = 1 << iota`); - writeLine(`\t\tmissingMethod`); - writeLine(`\t\t_missingLast`); - writeLine(`\t)`); - writeLine(`\tmissing := _missingLast - 1`); - writeLine(""); - writeLine(`\tif k := dec.PeekKind(); k != '{' {`); - writeLine(`\t\treturn errNotObject(k)`); - writeLine(`\t}`); - writeLine(`\tif _, err := dec.ReadToken(); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(""); - writeLine(`\tvar method string`); - writeLine(`\tvar rawRegisterOptions json.Value`); - writeLine(""); - writeLine(`\tfor dec.PeekKind() != '}' {`); - writeLine(`\t\tname, err := dec.ReadValue()`); - writeLine(`\t\tif err != nil {`); - writeLine(`\t\t\treturn err`); - writeLine(`\t\t}`); - writeLine(`\t\tswitch string(name) {`); - writeLine(`\t\tcase \`"id"\`:`); - writeLine(`\t\t\tmissing &^= missingId`); - writeLine(`\t\t\tif err := json.UnmarshalDecode(dec, &s.Id); err != nil {`); - writeLine(`\t\t\t\treturn err`); - writeLine(`\t\t\t}`); - writeLine(`\t\tcase \`"method"\`:`); - writeLine(`\t\t\tmissing &^= missingMethod`); - writeLine(`\t\t\tif err := json.UnmarshalDecode(dec, &method); err != nil {`); - writeLine(`\t\t\t\treturn err`); - writeLine(`\t\t\t}`); - writeLine(`\t\tcase \`"registerOptions"\`:`); - writeLine(`\t\t\tv, err := dec.ReadValue()`); - writeLine(`\t\t\tif err != nil {`); - writeLine(`\t\t\t\treturn err`); - writeLine(`\t\t\t}`); - writeLine(`\t\t\trawRegisterOptions = v`); - writeLine(`\t\tdefault:`); - writeLine(`\t\t\tif err := dec.SkipValue(); err != nil {`); - writeLine(`\t\t\t\treturn err`); - writeLine(`\t\t\t}`); - writeLine(`\t\t}`); - writeLine(`\t}`); - writeLine(""); - writeLine(`\tif _, err := dec.ReadToken(); err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(""); - writeLine(`\tif missing != 0 {`); - writeLine(`\t\tvar missingProps []string`); - writeLine(`\t\tif missing&missingId != 0 {`); - writeLine(`\t\t\tmissingProps = append(missingProps, "id")`); - writeLine(`\t\t}`); - writeLine(`\t\tif missing&missingMethod != 0 {`); - writeLine(`\t\t\tmissingProps = append(missingProps, "method")`); - writeLine(`\t\t}`); - writeLine(`\t\treturn errMissing(missingProps)`); - writeLine(`\t}`); - writeLine(""); - writeLine(`\tif len(rawRegisterOptions) > 0 {`); - writeLine(`\t\ts.RegisterOptions = &RegisterOptions{}`); - writeLine(`\t\tswitch Method(method) {`); - for (const reg of registrationMethods) { - writeLine(`\t\tcase Method${reg.fieldName}:`); - writeLine(`\t\t\tvar v ${reg.optionsTypeName}`); - writeLine(`\t\t\tif err := json.Unmarshal(rawRegisterOptions, &v); err != nil {`); - writeLine(`\t\t\t\treturn err`); - writeLine(`\t\t\t}`); - writeLine(`\t\t\ts.RegisterOptions.${reg.fieldName} = &v`); - } - writeLine(`\t\tdefault:`); - writeLine(`\t\t\treturn fmt.Errorf("unknown registration method: %s", method)`); - writeLine(`\t\t}`); - writeLine(`\t} else {`); - writeLine(`\t\treturn fmt.Errorf("missing registerOptions for method: %s", method)`); - writeLine(`\t}`); - writeLine(""); - writeLine(`\treturn nil`); - writeLine(`}`); - writeLine(""); - } - - if (compareStructures.has(structure.name)) { - generateCompareMethod(structure); - } - } - - function generateCompareMethod(structure: Structure) { - const props = structure.properties ?? []; - writeLine(`func (s *${structure.name}) Compare(other *${structure.name}) int {`); - for (let i = 0; i < props.length; i++) { - const prop = props[i]; - const isLast = i === props.length - 1; - const fieldName = goFieldName(prop); - const expr = compareExpressionForProperty(structure.name, prop, fieldName); - if (isLast) { - writeLine(`\treturn ${expr}`); - } - else { - writeLine(`\tif c := ${expr}; c != 0 {`); - writeLine(`\t\treturn c`); - writeLine(`\t}`); - } - } - writeLine(`}`); - writeLine(""); - } - - function compareExpressionForProperty(structName: string, prop: Property, fieldName: string): string { - const resolved = resolveType(prop.type); - const isPointerField = (prop.optional || resolved.needsPointer) && !prop.omitzeroValue; - - if (prop.type.kind === "reference") { - const refName = prop.type.name; - if (compareStructures.has(refName)) { - if (isPointerField) { - return `s.${fieldName}.Compare(other.${fieldName})`; - } - return `s.${fieldName}.Compare(&other.${fieldName})`; - } - } - - if (prop.type.kind === "base") { - switch (prop.type.name) { - case "string": - case "URI": - case "DocumentUri": - case "integer": - case "uinteger": - case "decimal": - return `cmp.Compare(s.${fieldName}, other.${fieldName})`; - } - } - - throw new Error(`Cannot generate Compare for ${structName}.${fieldName}: unsupported field type ${JSON.stringify(prop.type)}. Add support in compareExpressionForProperty.`); - } - - // Helper function to detect if an enum is a bitflag enum - // Hardcoded list of bitflag enums - const bitflagEnums = new Set(["WatchKind"]); - - function isBitflagEnum(enumeration: any): boolean { - return bitflagEnums.has(enumeration.name); - } - - // Generate enumerations - writeLine("// Enumerations\n"); - - for (const enumeration of model.enumerations) { - write(formatDocumentation(enumeration.documentation)); - - let baseType; - switch (enumeration.type.name) { - case "string": - baseType = "string"; - break; - case "integer": - baseType = "int32"; - break; - case "uinteger": - baseType = "uint32"; - break; - default: - throw new Error(`Unsupported enum type: ${enumeration.type.name}`); - } - - writeLine(`type ${enumeration.name} ${baseType}`); - writeLine(""); - - // Get the pre-processed enum entries map that avoids duplicates - - const enumValues = enumeration.values.map(value => ({ - value: String(value.value), - numericValue: Number(value.value), - name: value.name, - identifier: `${enumeration.name}${titleCase(value.name)}`, - documentation: value.documentation, - deprecated: value.deprecated, - })); - - writeLine("const ("); - - // Process entries with unique identifiers - for (const entry of enumValues) { - write(formatDocumentation(entry.documentation)); - - let valueLiteral; - // Handle string values - if (enumeration.type.name === "string") { - valueLiteral = `"${entry.value.replace(/^"|"$/g, "")}"`; - } - else { - valueLiteral = entry.value; - } - - writeLine(`\t${entry.identifier} ${enumeration.name} = ${valueLiteral}`); - } - - writeLine(")"); - writeLine(""); - - // Generate String() method for non-string enums - if (enumeration.type.name !== "string") { - const isBitflag = isBitflagEnum(enumeration); - - if (isBitflag) { - // Generate bitflag-aware String() method using stringer-style efficiency - const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); - const names = sortedValues.map(v => v.name); - const values = sortedValues.map(v => v.numericValue); - - const nameConst = `_${enumeration.name}_name`; - const indexVar = `_${enumeration.name}_index`; - const combinedNames = names.join(""); - - writeLine(`const ${nameConst} = "${combinedNames}"`); - write(`var ${indexVar} = [...]uint16{0`); - let offset = 0; - for (const name of names) { - offset += name.length; - write(`, ${offset}`); - } - writeLine(`}`); - writeLine(""); - - writeLine(`func (e ${enumeration.name}) String() string {`); - writeLine(`\tif e == 0 {`); - writeLine(`\t\treturn "0"`); - writeLine(`\t}`); - writeLine(`\tvar parts []string`); - for (let i = 0; i < values.length; i++) { - writeLine(`\tif e&${values[i]} != 0 {`); - writeLine(`\t\tparts = append(parts, ${nameConst}[${indexVar}[${i}]:${indexVar}[${i + 1}]])`); - writeLine(`\t}`); - } - writeLine(`\tif len(parts) == 0 {`); - writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); - writeLine(`\t}`); - writeLine(`\treturn strings.Join(parts, "|")`); - writeLine(`}`); - writeLine(""); - } - else { - // Generate regular String() method using stringer-style approach - // Split values into runs of contiguous values - const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); - - // Split into runs - const runs: Array<{ names: string[]; values: number[]; }> = []; - let currentRun = { names: [sortedValues[0].name], values: [sortedValues[0].numericValue] }; - - for (let i = 1; i < sortedValues.length; i++) { - if (sortedValues[i].numericValue === sortedValues[i - 1].numericValue + 1) { - currentRun.names.push(sortedValues[i].name); - currentRun.values.push(sortedValues[i].numericValue); - } - else { - runs.push(currentRun); - currentRun = { names: [sortedValues[i].name], values: [sortedValues[i].numericValue] }; - } - } - runs.push(currentRun); - - const nameConst = `_${enumeration.name}_name`; - const indexVar = `_${enumeration.name}_index`; - - if (runs.length === 1) { - // Single contiguous run - simple case - const combinedNames = runs[0].names.join(""); - writeLine(`const ${nameConst} = "${combinedNames}"`); - write(`var ${indexVar} = [...]uint16{0`); - let offset = 0; - for (const name of runs[0].names) { - offset += name.length; - write(`, ${offset}`); - } - writeLine(`}`); - writeLine(""); - - const minVal = runs[0].values[0]; - writeLine(`func (e ${enumeration.name}) String() string {`); - writeLine(`\ti := int(e) - ${minVal}`); - // For unsigned types, i can still be negative if e < minVal (due to underflow in conversion) - // So we always need to check both bounds - writeLine(`\tif i < 0 || i >= len(${indexVar})-1 {`); - writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); - writeLine(`\t}`); - writeLine(`\treturn ${nameConst}[${indexVar}[i]:${indexVar}[i+1]]`); - writeLine(`}`); - writeLine(""); - } - else if (runs.length <= 10) { - // Multiple runs - use switch statement - let allNames = ""; - const runInfo: Array<{ startOffset: number; endOffset: number; minVal: number; maxVal: number; }> = []; - - for (const run of runs) { - const startOffset = allNames.length; - allNames += run.names.join(""); - const endOffset = allNames.length; - runInfo.push({ - startOffset, - endOffset, - minVal: run.values[0], - maxVal: run.values[run.values.length - 1], - }); - } - - writeLine(`const ${nameConst} = "${allNames}"`); - writeLine(""); - - // Generate index variables for each run - for (let i = 0; i < runs.length; i++) { - write(`var ${indexVar}_${i} = [...]uint16{0`); - let offset = 0; - for (const name of runs[i].names) { - offset += name.length; - write(`, ${offset}`); - } - writeLine(`}`); - } - writeLine(""); - - writeLine(`func (e ${enumeration.name}) String() string {`); - writeLine(`\tswitch {`); - - for (let i = 0; i < runs.length; i++) { - const run = runs[i]; - const info = runInfo[i]; - - if (run.values.length === 1) { - writeLine(`\tcase e == ${run.values[0]}:`); - writeLine(`\t\treturn ${nameConst}[${info.startOffset}:${info.endOffset}]`); - } - else { - if (info.minVal === 0 && baseType.startsWith("uint")) { - writeLine(`\tcase e <= ${info.maxVal}:`); - } - else if (info.minVal === 0) { - writeLine(`\tcase 0 <= e && e <= ${info.maxVal}:`); - } - else { - writeLine(`\tcase ${info.minVal} <= e && e <= ${info.maxVal}:`); - } - writeLine(`\t\ti := int(e) - ${info.minVal}`); - writeLine(`\t\treturn ${nameConst}[${info.startOffset}+${indexVar}_${i}[i]:${info.startOffset}+${indexVar}_${i}[i+1]]`); - } - } - - writeLine(`\tdefault:`); - writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); - writeLine(`\t}`); - writeLine(`}`); - writeLine(""); - } - else { - // Too many runs - use a map - let allNames = ""; - const valueMap: Array<{ value: number; startOffset: number; endOffset: number; }> = []; - - for (const run of runs) { - for (let i = 0; i < run.names.length; i++) { - const startOffset = allNames.length; - allNames += run.names[i]; - const endOffset = allNames.length; - valueMap.push({ value: run.values[i], startOffset, endOffset }); - } - } - - writeLine(`const ${nameConst} = "${allNames}"`); - writeLine(""); - writeLine(`var ${enumeration.name}_map = map[${enumeration.name}]string{`); - for (const entry of valueMap) { - writeLine(`\t${entry.value}: ${nameConst}[${entry.startOffset}:${entry.endOffset}],`); - } - writeLine(`}`); - writeLine(""); - - writeLine(`func (e ${enumeration.name}) String() string {`); - writeLine(`\tif str, ok := ${enumeration.name}_map[e]; ok {`); - writeLine(`\t\treturn str`); - writeLine(`\t}`); - writeLine(`\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); - writeLine(`}`); - writeLine(""); - } - } - } - - // Generate Error() method for ErrorCode to implement the error interface - if (enumeration.name === "ErrorCode") { - writeLine(`func (e ${enumeration.name}) Error() string {`); - writeLine(`\treturn e.String()`); - writeLine(`}`); - writeLine(""); - } - } - - const requestsAndNotifications: (Request | Notification)[] = [...model.requests, ...model.notifications]; - - writeLine("// Methods"); - writeLine("const ("); - for (const request of requestsAndNotifications) { - write(formatDocumentation(request.documentation)); - - const methodName = methodNameIdentifier(request.method); - - writeLine(`\tMethod${methodName} Method = "${request.method}"`); - } - // Emit constants for registration-only methods (not also a request/notification) - for (const reg of registrationMethods) { - if (reg.isRegistrationOnly) { - writeLine(`\t// Registration-only method for ${reg.registrationMethod}.`); - writeLine(`\tMethod${reg.fieldName} Method = "${reg.registrationMethod}"`); - } - } - writeLine(")"); - writeLine(""); - - // Generate request response types - writeLine("// Request response types"); - writeLine(""); - - for (const request of requestsAndNotifications) { - const methodName = methodNameIdentifier(request.method); - - let responseTypeName: string | undefined; - - if ("result" in request) { - if (request.typeName && request.typeName.endsWith("Request")) { - responseTypeName = request.typeName.replace(/Request$/, "Response"); - } - else { - responseTypeName = `${methodName}Response`; - } - - writeLine(`// Response type for \`${request.method}\``); - - // Special case for response types that are explicitly base type "null" - if (request.result.kind === "base" && request.result.name === "null") { - writeLine(`type ${responseTypeName} = Null`); - } - else { - const resultType = resolveType(request.result); - const goType = resultType.needsPointer ? `*${resultType.name}` : resultType.name; - writeLine(`type ${responseTypeName} = ${goType}`); - } - writeLine(""); - } - - if (Array.isArray(request.params)) { - throw new Error("Unexpected request params for " + methodName + ": " + JSON.stringify(request.params)); - } - - const paramType = request.params ? resolveType(request.params) : undefined; - const paramGoType = paramType ? (paramType.needsPointer ? `*${paramType.name}` : paramType.name) : "NoParams"; - - writeLine(`// Type mapping info for \`${request.method}\``); - if (responseTypeName) { - writeLine(`var ${methodName}Info = RequestInfo[${paramGoType}, ${responseTypeName}]{Method: Method${methodName}}`); - } - else { - writeLine(`var ${methodName}Info = NotificationInfo[${paramGoType}]{Method: Method${methodName}}`); - } - - writeLine(""); - } - - // Generate type aliases - writeLine("// Type aliases\n"); - for (const aliasName of customTypeAliases) { - const resolvedType = resolveType(aliasName.type); - const goType = resolvedType.needsPointer ? `*${resolvedType.name}` : resolvedType.name; - writeLine(`type ${aliasName.name} = ${goType}`); - writeLine(""); - } - - // Generate union types - writeLine("// Union types\n"); - - for (const [name, members] of typeInfo.unionTypes.entries()) { - writeLine(`type ${name} struct {`); - const uniqueTypeFields = new Map(); // Maps type name -> field name - const uniqueTypeToOriginal = new Map(); // Maps type name -> original meta model Type - - let hasLocations = false; - for (const member of members) { - const type = resolveType(member.type); - const memberType = type.name; - - // If this type name already exists in our map, skip it - if (!uniqueTypeFields.has(memberType)) { - const fieldName = titleCase(member.name); - uniqueTypeFields.set(memberType, fieldName); - uniqueTypeToOriginal.set(memberType, member.type); - writeLine(`\t${fieldName} *${memberType}`); - if (fieldName === "Locations" && memberType === "[]Location") { - hasLocations = true; - } - } - } - - writeLine(`}`); - writeLine(""); - - // Get the field names and types for marshal/unmarshal methods - const fieldEntries = Array.from(uniqueTypeFields.entries()).map(([typeName, fieldName]) => ({ - fieldName, - typeName, - originalType: uniqueTypeToOriginal.get(typeName)!, - })); - - // Marshal method - writeLine(`var _ json.MarshalerTo = (*${name})(nil)`); - writeLine(""); - const unionContainedNull = members.some(member => member.containedNull); - writeLine(`func (o *${name}) MarshalJSONTo(enc *json.Encoder) error {`); - writeLine(`\treturn marshalUnion(o, enc, "${name}", ${unionContainedNull})`); - writeLine(`}`); - writeLine(""); - - // Unmarshal method - writeLine(`var _ json.UnmarshalerFrom = (*${name})(nil)`); - writeLine(""); - - writeLine(`func (o *${name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); - writeLine(`\t*o = ${name}{}`); - writeLine(""); - - // Group field entries by their expected JSON token kind for optimized dispatch. - const kindMap = new Map(); - const unknownKindEntries: typeof fieldEntries = []; - for (const entry of fieldEntries) { - const kind = jsonKindForType(entry.originalType); - if (!kind) { - unknownKindEntries.push(entry); - } - else { - if (!kindMap.has(kind)) kindMap.set(kind, []); - kindMap.get(kind)!.push(entry); - } - } - - // Sort ambiguous variants (same JSON kind) by number of required fields - // descending, so more specific variants are tried first. This prevents - // a less specific variant from greedily matching inputs intended for - // a more specific one. - function countRequiredFields(entry: typeof fieldEntries[0]): number { - if (entry.originalType.kind !== "reference") return 0; - const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); - if (!structure) return 0; - return structure.properties.filter(p => !p.optional && !p.omitzeroValue).length; - } - - for (const [, entries] of kindMap) { - if (entries.length > 1) { - entries.sort((a, b) => countRequiredFields(b) - countRequiredFields(a)); - } - } - - // Also sort the flat fieldEntries to match (for the fallback path) - // We need to sort only within groups of the same kind. - { - const sorted: typeof fieldEntries = []; - const seen = new Set(); - for (const [, entries] of kindMap) { - for (const entry of entries) { - sorted.push(entry); - seen.add(entry.fieldName); - } - } - for (const entry of unknownKindEntries) { - if (!seen.has(entry.fieldName)) { - sorted.push(entry); - } - } - // Replace fieldEntries contents with sorted order - fieldEntries.length = 0; - fieldEntries.push(...sorted); - } - - // Validate that ambiguous union variants (same JSON kind) don't have - // order-dependent overlap. Two struct variants overlap if one's required - // fields are a subset of the other's, meaning any valid input for the - // superset also successfully parses as the subset (since unknown properties - // are ignored). This would make the unmarshal result depend on try order. - // - // Exception: variants discriminated by literal field values (e.g., a "kind" - // field with different string literal types) are safe because the literal - // unmarshaler rejects mismatched values. - for (const [kind, entries] of kindMap) { - if (entries.length <= 1) continue; - - // Get required fields with their types for each variant - const variantInfo = entries.map(entry => { - if (entry.originalType.kind !== "reference") return null; - const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); - if (!structure) return null; - const requiredFields = new Map(); - for (const p of structure.properties) { - if (!p.optional && !p.omitzeroValue) { - requiredFields.set(p.name, p.type); - } - } - return { entry, requiredFields }; - }).filter((v): v is NonNullable => v !== null); - - // Check if two variants are discriminated by literal field values. - // Returns true if they share a field where both sides have different - // literal types (stringLiteral, integerLiteral, booleanLiteral). - function isDiscriminatedByLiteral( - a: Map, - b: Map, - ): boolean { - for (const [fieldName, aType] of a) { - const bType = b.get(fieldName); - if (!bType) continue; - const aLiteral = aType.kind === "stringLiteral" || aType.kind === "integerLiteral" || aType.kind === "booleanLiteral"; - const bLiteral = bType.kind === "stringLiteral" || bType.kind === "integerLiteral" || bType.kind === "booleanLiteral"; - if (aLiteral && bLiteral) { - // Both are literals for the same field — check if values differ - if (aType.kind === bType.kind && (aType as any).value !== (bType as any).value) { - return true; - } - // Different literal kinds on same field also discriminates - if (aType.kind !== bType.kind) { - return true; - } - } - } - return false; - } - - // Check each pair for subset relationships - for (let i = 0; i < variantInfo.length; i++) { - for (let j = 0; j < variantInfo.length; j++) { - if (i === j) continue; - const a = variantInfo[i]; - const b = variantInfo[j]; - const aNames = new Set(a.requiredFields.keys()); - const bNames = new Set(b.requiredFields.keys()); - - const aSubsetOfB = [...aNames].every(f => bNames.has(f)); - if (!aSubsetOfB) continue; - - // Skip if discriminated by literal values - if (isDiscriminatedByLiteral(a.requiredFields, b.requiredFields)) continue; - - if (aNames.size < bNames.size) { - // a is a strict subset of b - const aIdx = entries.indexOf(a.entry); - const bIdx = entries.indexOf(b.entry); - if (aIdx < bIdx) { - console.warn( - `Warning: In union ${name} (${kind} variants), ` + - `${a.entry.fieldName} (required: [${[...aNames]}]) is tried before ` + - `${b.entry.fieldName} (required: [${[...bNames]}]), but ` + - `${a.entry.fieldName}'s required fields are a strict subset — ` + - `it will greedily match inputs intended for ${b.entry.fieldName}. ` + - `Reorder so the more specific variant is tried first.`, - ); - } - } - else if (aNames.size === bNames.size && i < j) { - // Identical required fields — truly ambiguous - console.warn( - `Warning: In union ${name} (${kind} variants), ` + - `${a.entry.fieldName} and ${b.entry.fieldName} have identical ` + - `required fields [${[...aNames]}] — they are structurally ` + - `indistinguishable and the unmarshal result is order-dependent.`, - ); - } - } - } - } - - // Determine if we can use PeekKind-based dispatch: - // - Every entry must have a known kind (no `any` etc.) - // - There must be at least 2 distinct cases (kind groups + null) for a switch to be worthwhile - const hasUnknownKinds = unknownKindEntries.length > 0; - const distinctKinds = kindMap.size + (unionContainedNull ? 1 : 0); - const canDispatch = !hasUnknownKinds && distinctKinds >= 2; - - // Check if all kind groups are unambiguous (exactly 1 entry each). - // When unambiguous, we can UnmarshalDecode directly without buffering. - const allUnambiguous = canDispatch && Array.from(kindMap.values()).every(entries => entries.length === 1); - - let fallbackExhaustive = false; - const hasBooleanKind = kindMap.has("boolean"); - if (canDispatch && allUnambiguous) { - // Best case: PeekKind + UnmarshalDecode directly, no ReadValue buffer needed. - if (hasBooleanKind) { - writeLine(`\tswitch kind := dec.PeekKind(); kind {`); - } - else { - writeLine(`\tswitch dec.PeekKind() {`); - } - - if (unionContainedNull) { - writeLine(`\tcase 'n':`); - writeLine(`\t\t_, err := dec.ReadToken()`); - writeLine(`\t\treturn err`); - } - - for (const [kind, entries] of kindMap) { - writeLine(`\t${goKindCasesForJsonKind(kind)}`); - const entry = entries[0]; - if (kind === "boolean") { - writeLine(`\t\to.${entry.fieldName} = new(kind == 't')`); - writeLine(`\t\t_, err := dec.ReadToken()`); - writeLine(`\t\treturn err`); - } - else { - writeLine(`\t\to.${entry.fieldName} = new(${entry.typeName})`); - writeLine(`\t\treturn json.UnmarshalDecode(dec, o.${entry.fieldName})`); - } - } - - writeLine(`\tdefault:`); - writeLine(`\t\treturn errInvalidKind("${name}", dec.PeekKind())`); - writeLine(`\t}`); - } - else if (canDispatch) { - // Mixed case: some kind groups have multiple entries. - // Use PeekKind to dispatch, then ReadValue + try-each within ambiguous groups, - // or UnmarshalDecode directly for unambiguous groups. - if (hasBooleanKind) { - writeLine(`\tswitch kind := dec.PeekKind(); kind {`); - } - else { - writeLine(`\tswitch dec.PeekKind() {`); - } - - if (unionContainedNull) { - writeLine(`\tcase 'n':`); - writeLine(`\t\t_, err := dec.ReadToken()`); - writeLine(`\t\treturn err`); - } - - for (const [kind, entries] of kindMap) { - writeLine(`\t${goKindCasesForJsonKind(kind)}`); - if (entries.length === 1) { - // Unambiguous: decode directly - const entry = entries[0]; - if (kind === "boolean") { - writeLine(`\t\to.${entry.fieldName} = new(kind == 't')`); - writeLine(`\t\t_, err := dec.ReadToken()`); - writeLine(`\t\treturn err`); - } - else { - writeLine(`\t\to.${entry.fieldName} = new(${entry.typeName})`); - writeLine(`\t\treturn json.UnmarshalDecode(dec, o.${entry.fieldName})`); - } - } - else { - let exhaustive = false; - const disc = findDiscriminatorField(entries); - if (disc && canStreamDiscriminator(disc)) { - generateStreamingDiscriminatorDispatch(name, disc, "\t\t"); - exhaustive = true; - } - else { - // Ambiguous non-discriminated objects need the complete - // value for presence checks or speculative decoding. - writeLine(`\t\tdata, err := dec.ReadValue()`); - writeLine(`\t\tif err != nil {`); - writeLine(`\t\t\treturn err`); - writeLine(`\t\t}`); - } - if (disc && !canStreamDiscriminator(disc)) { - exhaustive = generateDiscriminatorDispatch(disc, "\t\t"); - } - else if (!disc) { - const pres = findPresenceDiscriminator(entries); - if (pres) { - exhaustive = generatePresenceDispatch(pres, "\t\t"); - } - else { - for (const entry of entries) { - writeLine(`\t\tvar v${entry.fieldName} ${entry.typeName}`); - writeLine(`\t\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); - writeLine(`\t\t\to.${entry.fieldName} = &v${entry.fieldName}`); - writeLine(`\t\t\treturn nil`); - writeLine(`\t\t}`); - } - } - } - if (!exhaustive) { - writeLine(`\t\treturn errInvalidValue("${name}", data)`); - } - } - } - - writeLine(`\tdefault:`); - writeLine(`\t\treturn errInvalidKind("${name}", dec.PeekKind())`); - writeLine(`\t}`); - } - else { - // Fallback for unknown kinds (e.g. `any`). Discriminated object - // unions can still stream; other unions use ReadValue + try-each. - let exhaustive = false; - const disc = findDiscriminatorField(fieldEntries); - if (disc && canStreamDiscriminator(disc)) { - generateStreamingDiscriminatorDispatch(name, disc, "\t"); - exhaustive = true; - } - else { - writeLine("\tdata, err := dec.ReadValue()"); - writeLine("\tif err != nil {"); - writeLine("\t\treturn err"); - writeLine("\t}"); - if (unionContainedNull) { - writeLine(`\tif string(data) == "null" {`); - writeLine(`\t\treturn nil`); - writeLine(`\t}`); - writeLine(""); - } - } - if (disc && !canStreamDiscriminator(disc)) { - exhaustive = generateDiscriminatorDispatch(disc, "\t"); - } - else if (!disc) { - const pres = findPresenceDiscriminator(fieldEntries); - if (pres) { - exhaustive = generatePresenceDispatch(pres, "\t"); - } - else { - for (const entry of fieldEntries) { - writeLine(`\tvar v${entry.fieldName} ${entry.typeName}`); - writeLine(`\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); - writeLine(`\t\to.${entry.fieldName} = &v${entry.fieldName}`); - writeLine(`\t\treturn nil`); - writeLine(`\t}`); - } - } - } - fallbackExhaustive = exhaustive; - } - - if (canDispatch) { - // Dispatch paths have an exhaustive switch with default, nothing after the switch. - } - else if (!fallbackExhaustive) { - // Fallback paths: the final error references `data` which is in scope. - writeLine(`\treturn errInvalidValue("${name}", data)`); - } - writeLine(`}`); - writeLine(""); - - // Generate GetLocations method - if (hasLocations) { - writeLine(`func (o ${name}) GetLocations() *[]Location {`); - writeLine(`\treturn o.Locations`); - writeLine(`}`); - writeLine(""); - } - } - - // Generate literal types - writeLine("// Literal types\n"); - - for (const [value, name] of typeInfo.literalTypes.entries()) { - const jsonValue = JSON.stringify(value); - - writeLine(`// ${name} is a literal type for ${jsonValue}`); - writeLine(`type ${name} struct{}`); - writeLine(""); - - writeLine(`var _ json.MarshalerTo = ${name}{}`); - writeLine(""); - - writeLine(`func (o ${name}) MarshalJSONTo(enc *json.Encoder) error {`); - writeLine(`\treturn enc.WriteValue(json.Value(\`${jsonValue}\`))`); - writeLine(`}`); - writeLine(""); - - writeLine(`var _ json.UnmarshalerFrom = &${name}{}`); - writeLine(""); - - writeLine(`func (o *${name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); - writeLine(`\tv, err := dec.ReadValue();`); - writeLine(`\tif err != nil {`); - writeLine(`\t\treturn err`); - writeLine(`\t}`); - writeLine(`\tif string(v) != \`${jsonValue}\` {`); - writeLine(`\t\treturn errLiteralMismatch("${name}", \`${jsonValue}\`, v)`); - writeLine(`\t}`); - writeLine(`\treturn nil`); - writeLine(`}`); - writeLine(""); - } - - // Generate resolved capabilities - const clientCapsStructure = model.structures.find(s => s.name === "ClientCapabilities"); - if (clientCapsStructure) { - writeLine("// Helper function for dereferencing pointers with zero value fallback"); - writeLine("func derefOr[T any](v *T) T {"); - writeLine("\tif v != nil {"); - writeLine("\t\treturn *v"); - writeLine("\t}"); - writeLine("\tvar zero T"); - writeLine("\treturn zero"); - writeLine("}"); - writeLine(""); - - // Collect all dependent structures and generate their resolved types - const deps = collectStructureDependencies(clientCapsStructure); - const uniqueDeps = Array.from(new Map(deps.map(d => [d.name, d])).values()); - - for (const dep of uniqueDeps) { - const depLines = generateResolvedTypeAndHelper(dep, false); - for (const line of depLines) { - writeLine(line); - } - } - - // Generate the main ResolvedClientCapabilities type and function - writeLine("// ResolvedClientCapabilities is a version of ClientCapabilities where all nested"); - writeLine("// fields are values (not pointers), making it easier to access deeply nested capabilities."); - writeLine("// Use (*ClientCapabilities).Resolve() to convert from ClientCapabilities."); - if (clientCapsStructure.documentation) { - writeLine("//"); - const typeDoc = formatDocumentation(clientCapsStructure.documentation); - for (const line of typeDoc.split("\n").filter(l => l)) { - writeLine(line); - } - } - const mainLines = generateResolvedTypeAndHelper(clientCapsStructure, true); - for (const line of mainLines) { - writeLine(line); - } - } - - return parts.join(""); -} - -function hasSomeProp(structure: Structure, propName: string, propTypeName: string) { - return structure.properties?.some(p => - !p.optional && - p.name === propName && - p.type.kind === "reference" && - p.type.name === propTypeName - ); -} - -function hasTextDocumentURI(structure: Structure) { - return hasSomeProp(structure, "textDocument", "TextDocumentIdentifier") || - hasSomeProp(structure, "_vs_textDocument", "TextDocumentIdentifier"); -} - -function hasTextDocumentPosition(structure: Structure) { - return hasSomeProp(structure, "position", "Position") || - hasSomeProp(structure, "_vs_position", "Position"); -} - -function getLocationUriProperty(structure: Structure) { - const prop = structure.properties?.find(p => - !p.optional && - titleCase(p.name).endsWith("Uri") && - p.type.kind === "base" && - p.type.name === "DocumentUri" - ); - if ( - prop && - structure.properties.some(p => - !p.optional && - titleCase(p.name) === titleCase(prop.name).replace(/Uri$/, "Range") && - p.type.kind === "reference" && - p.type.name === "Range" - ) - ) { - return titleCase(prop.name); - } -} - -/** - * Main function - */ -export default async function generate() { - collectTypeDefinitions(); - const generatedCode = generateCode(); - fs.writeFileSync(out, generatedCode); - - await x("dprint", ["fmt", out], { - throwOnError: true, - nodeOptions: { cwd: repoRoot, stdio: "inherit" }, - }); - - console.log(`Successfully generated ${out}`); -} - -if (process.argv[1] === __filename) { - await generate(); -} +#!/usr/bin/env node + +// Usage: node generate.mts + +import fs from "node:fs"; +import path from "node:path"; +import url from "node:url"; +import { x } from "tinyexec"; +import type { + Enumeration, + MetaModel, + Notification, + OrType, + Property, + ReferenceType, + Request, + Structure, + Type, + TypeAlias, +} from "./metaModelSchema.mts"; + +const __filename = url.fileURLToPath(new URL(import.meta.url)); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, "../../.."); + +const out = path.join(repoRoot, "tsc/internal/lsp/lsproto/lsp_generated.go"); +const metaModelPath = path.resolve(__dirname, "metaModel.json"); + +if (!fs.existsSync(metaModelPath)) { + console.error("Meta model file not found; did you forget to run fetchModel.mts?"); + process.exit(1); +} + +const originalModel: MetaModel = JSON.parse(fs.readFileSync(metaModelPath, "utf-8")); +const model = structuredClone(originalModel); +let typeScriptModel: MetaModel; + +export function getTypeScriptModel(): MetaModel { + return structuredClone(typeScriptModel); +} + +// Custom structures to add to the model +const customStructures: Structure[] = [ + { + name: "InitializationOptions", + properties: [ + { + name: "disablePushDiagnostics", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "DisablePushDiagnostics disables automatic pushing of diagnostics to the client.", + }, + { + name: "codeLensShowLocationsCommandName", + type: { kind: "base", name: "string" }, + optional: true, + documentation: "The client-side command name that resolved references/implementations `CodeLens` should trigger. Arguments passed will be `(DocumentUri, Position, Location[])`.", + }, + { + name: "userPreferences", + type: { kind: "reference", name: "any" }, + optional: true, + documentation: "userPreferences and/or formatting options if provided at initialization.", + }, + { + name: "enableTelemetry", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "EnableTelemetry enables sending telemetry events from the server to the client.", + }, + { + name: "logVerbosity", + type: { kind: "reference", name: "LogVerbosity" }, + optional: true, + documentation: "The initial log verbosity level, matching the client's output channel log level at startup. Subsequent changes are sent via custom/setLogVerbosity.", + }, + { + name: "runExternalCode", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "RunExternalCode allows configured content mappers to launch external plugin processes. The client should set this only for trusted workspaces. It mirrors the --runExternalCode CLI flag.", + }, + { + name: "trackFlakyDiagnostics", + type: { kind: "reference", name: "DiagnosticFlakeLogLevel" }, + optional: true, + documentation: "The level at which we track flaky diagnostics, if at all.", + }, + ], + documentation: "InitializationOptions contains user-provided initialization options.", + }, + { + name: "AutoImportFix", + properties: [ + { + name: "kind", + type: { kind: "reference", name: "AutoImportFixKind" }, + omitzeroValue: true, + }, + { + name: "name", + type: { kind: "base", name: "string" }, + omitzeroValue: true, + }, + { + name: "importKind", + type: { kind: "reference", name: "ImportKind" }, + }, + { + name: "useRequire", + type: { kind: "base", name: "boolean" }, + omitzeroValue: true, + }, + { + name: "addAsTypeOnly", + type: { kind: "reference", name: "AddAsTypeOnly" }, + }, + { + name: "moduleSpecifier", + type: { kind: "base", name: "string" }, + documentation: "The module specifier for this auto-import.", + omitzeroValue: true, + }, + { + name: "importIndex", + type: { kind: "base", name: "integer" }, + documentation: "Index of the import to modify when adding to an existing import declaration.", + }, + { + name: "usagePosition", + type: { kind: "reference", name: "Position" }, + optional: true, + }, + { + name: "namespacePrefix", + type: { kind: "base", name: "string" }, + omitzeroValue: true, + }, + ], + documentation: "AutoImportFix contains information about an auto-import suggestion.", + }, + { + name: "CompletionItemData", + properties: [ + { + name: "fileName", + type: { kind: "base", name: "string" }, + documentation: "The file name where the completion was requested.", + omitzeroValue: true, + }, + { + name: "position", + type: { kind: "base", name: "integer" }, + documentation: "The position where the completion was requested.", + omitzeroValue: true, + }, + { + name: "supplementalFileIndex", + type: { kind: "base", name: "integer" }, + optional: true, + documentation: "Zero-based index into the canonical file's supplemental source files. Absent when the completion was requested in the canonical file.", + }, + { + name: "source", + type: { kind: "base", name: "string" }, + documentation: "Special source value for disambiguation.", + omitzeroValue: true, + }, + { + name: "name", + type: { kind: "base", name: "string" }, + documentation: "The name of the completion item.", + omitzeroValue: true, + }, + { + name: "autoImport", + type: { kind: "reference", name: "AutoImportFix" }, + optional: true, + documentation: "Auto-import data for this completion item.", + }, + { + name: "isImportStatementCompletion", + type: { kind: "base", name: "boolean" }, + omitzeroValue: true, + }, + ], + documentation: "CompletionItemData is preserved on a CompletionItem between CompletionRequest and CompletionResolveRequest.", + }, + { + name: "CodeLensData", + properties: [ + { + name: "kind", + type: { kind: "reference", name: "CodeLensKind" }, + documentation: `The kind of the code lens ("references" or "implementations").`, + }, + { + name: "uri", + type: { kind: "base", name: "DocumentUri" }, + documentation: `The document in which the code lens and its range are located.`, + }, + { + name: "position", + type: { kind: "base", name: "integer" }, + documentation: `The position of the code lens declaration in its virtual source file.`, + }, + { + name: "supplementalFileIndex", + type: { kind: "base", name: "integer" }, + optional: true, + documentation: `Zero-based index into the canonical file's supplemental source files. Absent for the canonical source file.`, + }, + ], + }, + { + name: "ExperimentalServerCapabilities", + properties: [ + { + name: "customSourceDefinitionProvider", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "The server provides source definition support via custom/textDocument/sourceDefinition.", + }, + { + name: "customMultiDocumentHighlightProvider", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "The server provides multi-document highlight support via custom/textDocument/multiDocumentHighlight.", + }, + ], + documentation: "ExperimentalServerCapabilities contains experimental capabilities under development.", + }, + { + name: "ExperimentalClientCapabilities", + properties: [ + { + name: "hoverVerbosityLevel", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "The client supports hover verbosityLevel requests and canIncreaseVerbosity responses.", + }, + ], + documentation: "ExperimentalClientCapabilities contains experimental capabilities under development.", + }, + { + name: "VSOnAutoInsertOptions", + properties: [ + { + name: "_vs_triggerCharacters", + type: { kind: "array", element: { kind: "base", name: "string" } }, + documentation: "List of trigger characters that trigger auto-insert.", + }, + ], + documentation: "Options for the textDocument/_vs_onAutoInsert provider capability.", + }, + { + name: "VSReferenceItem", + properties: [ + { + name: "_vs_id", + type: { kind: "base", name: "integer" }, + documentation: "Unique identifier for this reference item.", + }, + { + name: "_vs_definitionId", + type: { kind: "base", name: "integer" }, + optional: true, + documentation: "The ID of the definition item this reference belongs to. Absent for definition items themselves.", + }, + { + name: "_vs_kind", + type: { kind: "array", element: { kind: "reference", name: "VSReferenceKind" } }, + optional: true, + documentation: "The kind(s) of this reference (read, write, etc.).", + }, + { + name: "_vs_location", + type: { kind: "reference", name: "Location" }, + documentation: "The location of this reference.", + }, + { + name: "_vs_definitionText", + type: { kind: "reference", name: "VSClassifiedTextElement" }, + optional: true, + documentation: "Classified display text for the definition (used for grouping headers in the UI).", + }, + { + name: "_vs_projectName", + type: { kind: "base", name: "string" }, + optional: true, + documentation: "The project name for this reference.", + }, + { + name: "_vs_containingType", + type: { kind: "base", name: "string" }, + optional: true, + documentation: "The containing type for this reference.", + }, + ], + documentation: "A VS-specific reference item with grouping support for Find All References.", + }, + { + name: "VSOnAutoInsertParams", + properties: [ + { + name: "_vs_textDocument", + type: { kind: "reference", name: "TextDocumentIdentifier" }, + documentation: "The text document.", + }, + { + name: "_vs_position", + type: { kind: "reference", name: "Position" }, + documentation: "The position inside the text document.", + }, + { + name: "_vs_ch", + type: { kind: "base", name: "string" }, + documentation: "The character that triggered the auto-insert.", + }, + ], + documentation: "Parameters for the textDocument/_vs_onAutoInsert request.", + }, + { + name: "VSOnAutoInsertResponseItem", + properties: [ + { + name: "_vs_textEditFormat", + type: { kind: "reference", name: "InsertTextFormat" }, + documentation: "The format of the text edit (plaintext or snippet).", + }, + { + name: "_vs_textEdit", + type: { kind: "reference", name: "TextEdit" }, + documentation: "The text edit to apply for the auto-insertion.", + }, + ], + documentation: "Response item for the textDocument/_vs_onAutoInsert request.", + }, + { + name: "RequestFailureTelemetryEvent", + properties: [ + { + name: "eventName", + type: { kind: "stringLiteral", value: "languageServer.errorResponse" }, + documentation: "The name of the telemetry event.", + }, + { + name: "telemetryPurpose", + type: { kind: "stringLiteral", value: "error" }, + documentation: "Indicates whether the reason for generating the event (e.g. general usage telemetry or errors).", + }, + { + name: "properties", + type: { kind: "reference", name: "RequestFailureTelemetryProperties" }, + documentation: "The properties associated with the event.", + }, + ], + documentation: "A RequestFailureTelemetryEvent is sent when a request fails and the server recovers.", + }, + { + name: "RequestFailureTelemetryProperties", + properties: [ + { + name: "errorCode", + type: { kind: "base", name: "string" }, + documentation: "The error code associated with the event.", + }, + { + name: "requestMethod", + type: { kind: "base", name: "string" }, + documentation: "The method of the request that caused the event.", + }, + { + name: "stack", + type: { kind: "base", name: "string" }, + documentation: "The stack trace associated with the event.", + }, + ], + documentation: "RequestFailureTelemetryProperties contains failure information when an LSP request manages to recover.", + }, + { + name: "ProfileParams", + properties: [ + { + name: "dir", + type: { kind: "base", name: "string" }, + documentation: "The directory path where the profile should be saved.", + }, + ], + documentation: "Parameters for profiling requests.", + }, + { + name: "ProfileResult", + properties: [ + { + name: "file", + type: { kind: "base", name: "string" }, + documentation: "The file path where the profile was saved.", + }, + ], + documentation: "Result of a profiling request.", + }, + { + name: "InitializeAPISessionParams", + properties: [ + { + name: "pipe", + type: { kind: "base", name: "string" }, + optional: true, + documentation: "Optional path to use for the named pipe or Unix domain socket. If not provided, a unique path will be generated.", + }, + ], + documentation: "Parameters for the initializeAPISession request.", + }, + { + name: "InitializeAPISessionResult", + properties: [ + { + name: "sessionId", + type: { kind: "base", name: "string" }, + documentation: "The unique identifier for this API session.", + }, + { + name: "pipe", + type: { kind: "base", name: "string" }, + documentation: "The path to the named pipe or Unix domain socket for API communication.", + }, + ], + documentation: "Result for the initializeAPISession request.", + }, + { + name: "ProjectInfoParams", + properties: [ + { + name: "textDocument", + type: { kind: "reference", name: "TextDocumentIdentifier" }, + documentation: "The text document to get project info for.", + }, + ], + documentation: "Parameters for the custom/projectInfo request.", + }, + { + name: "ProjectInfoResult", + properties: [ + { + name: "configFilePath", + type: { kind: "base", name: "string" }, + documentation: "The absolute path to the config file (e.g. /path/to/tsconfig.json) for the project that contains this file, or an empty string if the file is in an inferred project.", + }, + ], + documentation: "Result for the custom/projectInfo request.", + }, + { + name: "ContentMapperManifest", + properties: [ + { name: "name", type: { kind: "base", name: "string" }, documentation: "Human-readable mapper name." }, + { name: "version", type: { kind: "base", name: "string" }, optional: true, documentation: "Mapper version." }, + { name: "exec", type: { kind: "array", element: { kind: "base", name: "string" } }, documentation: "Executable and arguments used to start the mapper." }, + { name: "cwd", type: { kind: "base", name: "string" }, optional: true, documentation: "Absolute working directory for the mapper process." }, + { name: "compilerOptions", type: { kind: "array", element: { kind: "base", name: "string" } }, optional: true, documentation: "Compiler option names forwarded to the mapper." }, + { name: "dynamicConfig", type: { kind: "base", name: "boolean" }, optional: true, documentation: "Whether the mapper uses project-scoped dynamic configuration." }, + ], + documentation: "Inline content mapper manifest supplied by a contributing extension.", + }, + { + name: "InferredProjectContentMapperContribution", + properties: [ + { name: "options", type: { kind: "reference", name: "LSPObject" }, optional: true, documentation: "Options supplied to transforms in inferred projects." }, + { name: "manifest", type: { kind: "reference", name: "ContentMapperManifest" }, documentation: "Inline manifest for the mapper contributed to inferred projects." }, + ], + documentation: "Content mapper configuration contributed to inferred projects.", + }, + { + name: "ContentMapperContribution", + properties: [ + { name: "contributorId", type: { kind: "base", name: "string" }, documentation: "Unique identifier of the contributor extension." }, + { name: "extensions", type: { kind: "array", element: { kind: "base", name: "string" } }, documentation: "File extensions handled by this content mapper." }, + { name: "inferredProjectContribution", type: { kind: "reference", name: "InferredProjectContentMapperContribution" }, optional: true, documentation: "When present, contributes this mapper to inferred projects." }, + ], + documentation: "One extension-provided content mapper contribution.", + }, + { + name: "SetContentMapperContributionsParams", + properties: [ + { name: "contributions", type: { kind: "array", element: { kind: "reference", name: "ContentMapperContribution" } }, documentation: "Complete replacement set of active extension contributions." }, + { name: "openDocuments", type: { kind: "array", element: { kind: "reference", name: "TextDocumentIdentifier" } }, documentation: "Currently open documents matching contributed extensions." }, + ], + documentation: "Parameters for the custom/setContentMapperContributions request.", + }, + { + name: "SetLogVerbosityParams", + properties: [ + { + name: "verbosity", + type: { kind: "reference", name: "LogVerbosity" }, + documentation: "The log verbosity level.", + }, + ], + documentation: "Parameters for the custom/setLogVerbosity notification.", + }, + { + name: "PerformanceStatsTelemetryEvent", + properties: [ + { + name: "eventName", + type: { kind: "stringLiteral", value: "languageServer.performanceStats" }, + documentation: "The name of the telemetry event.", + }, + { + name: "telemetryPurpose", + type: { kind: "stringLiteral", value: "usage" }, + documentation: "Indicates this is a usage telemetry event.", + }, + { + name: "measurements", + type: { kind: "reference", name: "PerformanceStatsTelemetryMeasurements" }, + documentation: "Numeric measurements for this telemetry event.", + }, + ], + documentation: "A PerformanceStatsTelemetryEvent is sent periodically with performance and resource usage statistics.", + }, + { + name: "PerformanceStatsTelemetryMeasurements", + properties: [ + { name: "openFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of files currently open in the editor." }, + { name: "uptimeSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Seconds since the session was initialized." }, + { name: "projectCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of loaded projects." }, + { name: "configCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of loaded config files." }, + { name: "cachedDiskFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of files cached from disk." }, + { name: "memoryUsedBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total memory mapped by the Go runtime in bytes." }, + { name: "goMemLimit", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "GOMEMLIMIT value in bytes, or 0 if not set." }, + { name: "goGCPercent", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "GOGC percentage value configured for the GC." }, + { name: "heapGoalBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap size target the GC is working toward in bytes." }, + { name: "heapLiveBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Bytes of live (reachable) heap objects." }, + { name: "heapObjectCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of live or unswept objects occupying heap memory." }, + { name: "heapStackBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory reserved for goroutine stacks." }, + { name: "heapReleasedBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory returned to the OS." }, + { name: "heapFreeBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Heap memory that is free and eligible to be returned to the OS." }, + { name: "gcScanHeapBytes", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total scannable heap bytes — how much the GC must traverse." }, + { name: "goMaxProcs", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "The current GOMAXPROCS value." }, + { name: "goroutineCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Current number of goroutines." }, + { name: "gcCyclesTotal", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total completed GC cycles." }, + { name: "gcCPUSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Cumulative CPU time spent in GC in seconds." }, + { name: "userCPUSeconds", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Cumulative CPU time spent in user Go code in seconds." }, + { name: "systemMemTotal", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total physical memory on the system in bytes." }, + { name: "systemMemUsed", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Used physical memory on the system in bytes." }, + { name: "autoImportProjectBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of auto-import project buckets." }, + { name: "autoImportNodeModulesBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of auto-import node_modules buckets." }, + { name: "autoImportUniquePackageCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Unique packages across all node_modules buckets." }, + { name: "autoImportProjectExportCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total indexed exports from project files." }, + { name: "autoImportNodeModulesExportCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total indexed exports from node_modules." }, + { name: "autoImportProjectFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total files tracked across project buckets." }, + { name: "autoImportNodeModulesFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Total files tracked across node_modules buckets." }, + { name: "autoImportNodeModulesUnfilteredBucketCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true, documentation: "Number of node_modules buckets with no package.json filter." }, + ], + documentation: "Numeric measurements for PerformanceStatsTelemetryEvent.", + }, + { + name: "ProjectInfoTelemetryEvent", + properties: [ + { + name: "eventName", + type: { kind: "stringLiteral", value: "languageServer.projectInfo" }, + documentation: "The name of the telemetry event.", + }, + { + name: "telemetryPurpose", + type: { kind: "stringLiteral", value: "usage" }, + documentation: "Indicates this is a usage telemetry event.", + }, + { + name: "properties", + type: { kind: "map", key: { kind: "base", name: "string" }, value: { kind: "base", name: "string" } }, + documentation: "String properties for this telemetry event. Complex values (compilerOptions, fileStats) are JSON-stringified.", + }, + { + name: "measurements", + type: { kind: "reference", name: "ProjectInfoTelemetryMeasurements" }, + documentation: "Numeric measurements for this telemetry event.", + }, + ], + documentation: "A ProjectInfoTelemetryEvent is sent once per project when it is first loaded.", + }, + { + name: "ProjectInfoTelemetryMeasurements", + properties: [ + { name: "jsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "jsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "jsxFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "jsxFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "tsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "tsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "tsxFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "tsxFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "dtsFileCount", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + { name: "dtsFileSize", type: { kind: "base", name: "decimal" }, omitzeroValue: true }, + ], + documentation: "Numeric measurements for ProjectInfoTelemetryEvent.", + }, + { + name: "MultiDocumentHighlight", + properties: [ + { + name: "uri", + type: { kind: "base", name: "DocumentUri" }, + documentation: "The URI of the document containing the highlights.", + }, + { + name: "highlights", + type: { kind: "array", element: { kind: "reference", name: "DocumentHighlight" } }, + documentation: "The highlights for the document.", + }, + ], + documentation: "Represents a collection of document highlights from a single document, used in multi-document highlight responses.", + }, + { + name: "MultiDocumentHighlightParams", + properties: [ + { + name: "textDocument", + type: { kind: "reference", name: "TextDocumentIdentifier" }, + documentation: "The text document.", + }, + { + name: "position", + type: { kind: "reference", name: "Position" }, + documentation: "The position inside the text document.", + }, + { + name: "filesToSearch", + type: { kind: "array", element: { kind: "base", name: "DocumentUri" } }, + documentation: "The list of file URIs to search for highlights across.", + }, + ], + documentation: "Parameters for the custom/textDocument/multiDocumentHighlight request.", + }, + { + name: "VSClassifiedTextRun", + properties: [ + { + name: "ClassificationTypeName", + type: { kind: "base", name: "string" }, + documentation: "The classification type name (e.g. 'keyword', 'class name', 'parameter name').", + }, + { + name: "Text", + type: { kind: "base", name: "string" }, + documentation: "The text content of this run.", + }, + { + name: "MarkerTagType", + type: { kind: "base", name: "string" }, + optional: true, + documentation: "Optional marker tag type.", + }, + { + name: "Style", + type: { kind: "base", name: "integer" }, + optional: true, + omitzeroValue: true, + documentation: "The style of this text run.", + }, + { + name: "_vs_type", + type: { kind: "stringLiteral", value: "ClassifiedTextRun" }, + documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", + }, + ], + documentation: "A classified text run with text and classification type, used for colorized display in VS.", + }, + { + name: "VSClassifiedTextElement", + properties: [ + { + name: "Runs", + type: { kind: "array", element: { kind: "reference", name: "VSClassifiedTextRun" } }, + documentation: "The classified text runs that make up this element.", + }, + { + name: "_vs_type", + type: { kind: "stringLiteral", value: "ClassifiedTextElement" }, + documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", + }, + ], + documentation: "A classified text element containing an array of classified text runs, used for colorized labels in VS.", + }, + { + name: "VSImageId", + properties: [ + { + name: "Guid", + type: { kind: "base", name: "string" }, + documentation: "The GUID of the image catalog containing this image.", + }, + { + name: "Id", + type: { kind: "base", name: "integer" }, + documentation: "The numeric identifier of the image within its catalog.", + }, + { + name: "_vs_type", + type: { kind: "stringLiteral", value: "ImageId" }, + documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", + }, + ], + documentation: "Identifies an image in a VS image catalog. Used to render symbol-kind icons (e.g. in hover tooltips).", + }, + { + name: "VSImageElement", + properties: [ + { + name: "ImageId", + type: { kind: "reference", name: "VSImageId" }, + documentation: "The image to display.", + }, + { + name: "_vs_type", + type: { kind: "stringLiteral", value: "ImageElement" }, + documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", + }, + ], + documentation: "An image element (e.g. a symbol-kind icon) for use in VS rich content such as hover tooltips.", + }, + { + name: "VSContainerElement", + properties: [ + { + name: "Style", + type: { kind: "reference", name: "VSContainerElementStyle" }, + documentation: "Layout style for the child elements.", + }, + { + name: "Elements", + type: { + kind: "array", + element: { + kind: "or", + items: [ + { kind: "reference", name: "VSImageElement" }, + { kind: "reference", name: "VSClassifiedTextElement" }, + { kind: "reference", name: "VSContainerElement" }, + ], + }, + }, + documentation: "The child elements contained within this container.", + }, + { + name: "_vs_type", + type: { kind: "stringLiteral", value: "ContainerElement" }, + documentation: "VS type discriminator required by ObjectContentConverter for deserialization.", + }, + ], + documentation: "A container element that groups other VS rich-content elements (images, classified text, or nested containers). Used to build the VS hover raw content that combines a symbol icon with colorized text.", + }, +]; + +const customEnumerations: Enumeration[] = [ + { + name: "VSContainerElementStyle", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Wrapped", value: 0, documentation: "Child elements are laid out inline, wrapping as needed (e.g. an icon next to a signature line)." }, + { name: "Stacked", value: 1, documentation: "Child elements are stacked vertically, each on its own line (e.g. a signature line followed by documentation)." }, + ], + documentation: "Layout style for a VSContainerElement's children, mirroring VS's Microsoft.VisualStudio.Text.Adornments.ContainerElementStyle.", + }, + { + name: "LogVerbosity", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Off", value: 0, documentation: "All logging disabled." }, + { name: "Trace", value: 1, documentation: "Most verbose; includes LSP request/response traces." }, + { name: "Debug", value: 2, documentation: "Verbose server logs." }, + { name: "Info", value: 3, documentation: "Normal server logs." }, + { name: "Warning", value: 4, documentation: "Warnings only." }, + { name: "Error", value: 5, documentation: "Errors only." }, + ], + documentation: "Log verbosity level, mirroring the VS Code LogLevel enum values.", + }, + { + name: "DiagnosticFlakeLogLevel", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Off", value: 0, documentation: "All flake logging disabled." }, + { name: "Log", value: 1, documentation: "Log flaky diagnostics to the error log." }, + { name: "Panic", value: 2, documentation: "Panic on flaky diagnostics." }, + ], + documentation: "Behavior for tracking and logging flaky diagnostics.", + }, + { + name: "VSReferenceKind", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Inactive", value: 0 }, + { name: "Comment", value: 1 }, + { name: "String", value: 2 }, + { name: "Read", value: 3 }, + { name: "Write", value: 4 }, + { name: "Reference", value: 5 }, + { name: "Name", value: 6 }, + { name: "Qualified", value: 7 }, + { name: "TypeArgument", value: 8 }, + { name: "TypeConstraint", value: 9 }, + { name: "BaseType", value: 10 }, + { name: "Constructor", value: 11 }, + { name: "Destructor", value: 12 }, + { name: "Import", value: 13 }, + { name: "Declaration", value: 14 }, + { name: "AddressOf", value: 15 }, + { name: "NotReference", value: 16 }, + { name: "Unknown", value: 17 }, + ], + }, + { + name: "CodeLensKind", + type: { + kind: "base", + name: "string", + }, + values: [ + { + name: "References", + value: "references", + }, + { + name: "Implementations", + value: "implementations", + }, + ], + }, + { + name: "AutoImportFixKind", + type: { kind: "base", name: "integer" }, + values: [ + { name: "UseNamespace", value: 0, documentation: "Augment an existing namespace import." }, + { name: "JsdocTypeImport", value: 1, documentation: "Add a JSDoc-only type import." }, + { name: "AddToExisting", value: 2, documentation: "Insert into an existing import declaration." }, + { name: "AddNew", value: 3, documentation: "Create a fresh import statement." }, + { name: "PromoteTypeOnly", value: 4, documentation: "Promote a type-only import when necessary." }, + ], + }, + { + name: "ImportKind", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Named", value: 0, documentation: "Adds a named import." }, + { name: "Default", value: 1, documentation: "Adds a default import." }, + { name: "Namespace", value: 2, documentation: "Adds a namespace import." }, + { name: "CommonJS", value: 3, documentation: "Adds a CommonJS import assignment." }, + ], + }, + { + name: "AddAsTypeOnly", + type: { kind: "base", name: "integer" }, + values: [ + { name: "Allowed", value: 1, documentation: "Import may be marked type-only if needed." }, + { name: "Required", value: 2, documentation: "Import must be marked type-only." }, + { name: "NotAllowed", value: 4, documentation: "Import cannot be marked type-only." }, + ], + }, + { + name: "ClassificationTypeName", + type: { kind: "base", name: "string" }, + values: [ + { name: "Keyword", value: "keyword", documentation: "Language keyword (e.g., function, const, class)." }, + { name: "Punctuation", value: "punctuation", documentation: "Punctuation characters (e.g., parentheses, commas, semicolons)." }, + { name: "Operator", value: "operator", documentation: "Operators (e.g., =, +, ?)." }, + { name: "WhiteSpace", value: "whitespace", documentation: "Whitespace including spaces and line breaks." }, + { name: "Text", value: "text", documentation: "Plain text with no special classification." }, + { name: "String", value: "string", documentation: "String and literal values." }, + { name: "Number", value: "number", documentation: "Numeric literal values." }, + { name: "Comment", value: "comment", documentation: "Comment text." }, + { name: "ClassName", value: "class name", documentation: "Class names." }, + { name: "InterfaceName", value: "interface name", documentation: "Interface names." }, + { name: "EnumName", value: "enum name", documentation: "Enum names." }, + { name: "ModuleName", value: "module name", documentation: "Module/namespace names." }, + { name: "MethodName", value: "method name", documentation: "Method and function names." }, + { name: "ParameterName", value: "parameter name", documentation: "Parameter names." }, + { name: "PropertyName", value: "property name", documentation: "Property and accessor names." }, + { name: "FieldName", value: "field name", documentation: "Field names (e.g., enum members)." }, + { name: "LocalName", value: "local name", documentation: "Local variable names." }, + { name: "TypeParameterName", value: "type parameter name", documentation: "Type parameter names." }, + { name: "Identifier", value: "identifier", documentation: "General identifiers (e.g., type aliases, imports)." }, + ], + documentation: "Roslyn classification type names used by VS for syntax coloring in tooltips and other UI elements.", + }, +]; +const customRequests: Request[] = [ + { + method: "custom/runGC", + typeName: "RunGCRequest", + messageDirection: "clientToServer", + result: { kind: "base", name: "null" }, + documentation: "Triggers garbage collection in the language server.", + }, + { + method: "custom/saveHeapProfile", + typeName: "SaveHeapProfileRequest", + params: { kind: "reference", name: "ProfileParams" }, + messageDirection: "clientToServer", + result: { kind: "reference", name: "ProfileResult" }, + documentation: "Saves a heap profile to the specified directory.", + }, + { + method: "custom/saveAllocProfile", + typeName: "SaveAllocProfileRequest", + params: { kind: "reference", name: "ProfileParams" }, + messageDirection: "clientToServer", + result: { kind: "reference", name: "ProfileResult" }, + documentation: "Saves an allocation profile to the specified directory.", + }, + { + method: "custom/startCPUProfile", + typeName: "StartCPUProfileRequest", + params: { kind: "reference", name: "ProfileParams" }, + messageDirection: "clientToServer", + result: { kind: "base", name: "null" }, + documentation: "Starts CPU profiling, writing to the specified directory when stopped.", + }, + { + method: "custom/stopCPUProfile", + typeName: "StopCPUProfileRequest", + messageDirection: "clientToServer", + result: { kind: "reference", name: "ProfileResult" }, + documentation: "Stops CPU profiling and saves the profile.", + }, + { + method: "custom/initializeAPISession", + typeName: "CustomInitializeAPISessionRequest", + params: { kind: "reference", name: "InitializeAPISessionParams" }, + result: { kind: "reference", name: "InitializeAPISessionResult" }, + messageDirection: "clientToServer", + documentation: "Custom request to initialize an API session.", + }, + { + method: "custom/projectInfo", + typeName: "CustomProjectInfoRequest", + params: { kind: "reference", name: "ProjectInfoParams" }, + result: { kind: "reference", name: "ProjectInfoResult" }, + messageDirection: "clientToServer", + documentation: "Returns project information (e.g. the tsconfig.json path) for a given text document.", + }, + { + method: "custom/setContentMapperContributions", + typeName: "CustomSetContentMapperContributionsRequest", + params: { kind: "reference", name: "SetContentMapperContributionsParams" }, + result: { kind: "base", name: "null" }, + messageDirection: "clientToServer", + documentation: "Replaces extension content mapper contributions and discovers configured mappers for matching open documents.", + }, + { + method: "custom/textDocument/sourceDefinition", + typeName: "CustomTextDocumentSourceDefinitionRequest", + params: { kind: "reference", name: "TextDocumentPositionParams" }, + result: { kind: "reference", name: "LocationOrLocationsOrDefinitionLinksOrNull" }, + messageDirection: "clientToServer", + documentation: "Request to get source definitions for a position.", + }, + { + method: "custom/textDocument/multiDocumentHighlight", + typeName: "CustomMultiDocumentHighlightRequest", + params: { kind: "reference", name: "MultiDocumentHighlightParams" }, + result: { + kind: "or", + items: [ + { kind: "array", element: { kind: "reference", name: "MultiDocumentHighlight" } }, + { kind: "base", name: "null" }, + ], + }, + messageDirection: "clientToServer", + documentation: "Request to get document highlights across multiple files.", + }, + { + method: "textDocument/_vs_onAutoInsert", + typeName: "VSOnAutoInsertRequest", + params: { kind: "reference", name: "VSOnAutoInsertParams" }, + result: { + kind: "or", + items: [ + { kind: "reference", name: "VSOnAutoInsertResponseItem" }, + { kind: "base", name: "null" }, + ], + }, + messageDirection: "clientToServer", + documentation: "Request for auto-insert when a trigger character is typed (VS-specific).", + }, + { + method: "textDocument/_vs_references", + typeName: "VSReferencesRequest", + params: { kind: "reference", name: "ReferenceParams" }, + result: { + kind: "or", + items: [ + { kind: "array", element: { kind: "reference", name: "VSReferenceItem" } }, + { kind: "base", name: "null" }, + ], + }, + messageDirection: "clientToServer", + documentation: "VS-specific request for Find All References with grouped reference items.", + }, +]; + +const customNotifications: Notification[] = [ + { + method: "custom/setLogVerbosity", + typeName: "CustomSetLogVerbosityNotification", + params: { kind: "reference", name: "SetLogVerbosityParams" }, + messageDirection: "clientToServer", + documentation: "Notification to set the server's log verbosity level based on the output channel's log level.", + }, +]; + +// compareStructures is the set of generated structures for which a Compare method should be emitted. +// The Compare method defines a total ordering by comparing fields in declaration order. +// All listed structures (and any structure-typed fields they reference) must contain only +// comparable fields: base scalar types, or other structures that are themselves in this set. +const compareStructures = new Set([ + "Position", + "Range", + "TextEdit", +]); + +const customTypeAliases: TypeAlias[] = [ + { + name: "TelemetryEvent", + type: { + kind: "or", + items: [ + { kind: "reference", name: "RequestFailureTelemetryEvent" }, + { kind: "reference", name: "PerformanceStatsTelemetryEvent" }, + { kind: "reference", name: "ProjectInfoTelemetryEvent" }, + { kind: "base", name: "null" }, + ], + }, + }, +]; + +// Track which custom Data structures were declared explicitly +const explicitDataStructures = new Set(customStructures.map(s => s.name)); + +// Map from registration method → { fieldName, optionsTypeName } +// Built during patchAndPreprocessModel, used during code generation. +interface RegistrationMethodInfo { + registrationMethod: string; + fieldName: string; + optionsTypeName: string; + isRegistrationOnly?: boolean; +} +let registrationMethods: RegistrationMethodInfo[] = []; + +// Patch and preprocess the model +function patchAndPreprocessModel() { + // Track which Data types we need to create as placeholders + const neededDataStructures = new Set(); + + // Collect all registration option types from requests and notifications + const registrationOptionTypes: Type[] = []; + for (const request of [...model.requests, ...model.notifications]) { + if (request.registrationOptions) { + registrationOptionTypes.push(request.registrationOptions); + } + } + + // Create synthetic structures for "and" types in registration options + const syntheticStructures: Structure[] = []; + for (let i = 0; i < registrationOptionTypes.length; i++) { + const regOptType = registrationOptionTypes[i]; + if (regOptType.kind === "and") { + // Find which request/notification this registration option belongs to + const owner = [...model.requests, ...model.notifications].find(r => r.registrationOptions === regOptType); + if (!owner) { + throw new Error("Could not find owner for 'and' type registration option"); + } + + // Determine the proper name based on the typeName or method + let structureName: string; + if (owner.typeName) { + // Use typeName as base: "ColorPresentationRequest" -> "ColorPresentationRegistrationOptions" + structureName = owner.typeName.replace(/Request$/, "").replace(/Notification$/, "") + "RegistrationOptions"; + } + else { + // Fall back to method: "textDocument/colorPresentation" -> "ColorPresentationRegistrationOptions" + const methodParts = owner.method.split("/"); + const lastPart = methodParts[methodParts.length - 1]; + structureName = titleCase(lastPart) + "RegistrationOptions"; + } + + // Extract all reference types from the "and" + const refTypes = regOptType.items.filter((item): item is ReferenceType => item.kind === "reference"); + + // Create a synthetic structure that combines all the referenced structures + syntheticStructures.push({ + name: structureName, + properties: [], + extends: refTypes, + documentation: `Registration options for ${owner.method}.`, + }); + + // Replace the "and" type with a reference to the synthetic structure + registrationOptionTypes[i] = { kind: "reference", name: structureName }; + // Also update the model so the request/notification has the resolved type + owner.registrationOptions = registrationOptionTypes[i]; + } + } + + for (const structure of model.structures) { + // Patch ServerCapabilities to add custom tsgo capability flags + if (structure.name === "ServerCapabilities") { + structure.properties.push({ + name: "_vs_onAutoInsertProvider", + type: { kind: "reference", name: "VSOnAutoInsertOptions" }, + optional: true, + documentation: "Provider options for the VS auto-insert feature via textDocument/_vs_onAutoInsert.", + }); + structure.properties.push({ + name: "_vs_referencesProvider", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "The server provides VS-specific grouped references via textDocument/_vs_references.", + }); + } + + // Patch HoverParams to add verbosityLevel + if (structure.name === "HoverParams") { + structure.properties.push({ + name: "verbosityLevel", + type: { kind: "base", name: "integer" }, + optional: true, + documentation: "Controls how many levels of type definitions will be expanded. Default is 0.", + }); + } + + // Patch WorkspaceSymbolParams to optionally scope the search to projects + // containing a document, matching Strada's currentProject mode. + if (structure.name === "WorkspaceSymbolParams") { + structure.properties.push({ + name: "textDocument", + type: { kind: "reference", name: "TextDocumentIdentifier" }, + optional: true, + documentation: "Scopes the workspace symbol search to projects containing this document.", + }); + } + + // Patch Hover to add canIncreaseVerbosity + if (structure.name === "Hover") { + structure.properties.push( + { + name: "canIncreaseVerbosity", + type: { kind: "base", name: "boolean" }, + omitzeroValue: true, + documentation: "Whether the verbosity level can be increased for this hover.", + }, + { + name: "_vs_rawContent", + type: { kind: "reference", name: "VSContainerElement" }, + optional: true, + documentation: "VS-specific rich content (symbol icon + colorized/classified text) rendered by clients that support Visual Studio extensions, in place of `contents`.", + }, + ); + } + + // Patch ClientCapabilities to add VS-specific client capabilities + if (structure.name === "ClientCapabilities") { + structure.properties.push( + { + name: "_vs_supportsVisualStudioExtensions", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "Whether the client supports Visual Studio extensions.", + }, + { + name: "_vs_supportedSnippetVersion", + type: { kind: "base", name: "integer" }, + optional: true, + documentation: "The snippet version supported by the client.", + }, + { + name: "_vs_supportsNotIncludingTextInTextDocumentDidOpen", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "Whether the client supports not including text in textDocument/didOpen notifications.", + }, + { + name: "_vs_supportsIconExtensions", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "Whether the client supports icon extensions.", + }, + { + name: "_vs_supportsDiagnosticRequests", + type: { kind: "base", name: "boolean" }, + optional: true, + documentation: "Whether the client supports diagnostic requests.", + }, + ); + } + + // Patch SignatureInformation to add VS-specific colorized label + if (structure.name === "SignatureInformation") { + structure.properties.push({ + name: "_vs_colorizedLabel", + type: { kind: "reference", name: "VSClassifiedTextElement" }, + optional: true, + documentation: "A colorized label for the signature, providing classified text runs for VS syntax coloring.", + }); + } + + for (const prop of structure.properties) { + // Replace initializationOptions type with custom InitializationOptions. + // The spec types this field as LSPAny?, which includes null, so keep + // it nullable so a null value sent by loose clients is accepted. + if (prop.name === "initializationOptions" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { + prop.type = { + kind: "or", + items: [ + { kind: "reference", name: "InitializationOptions" }, + { kind: "base", name: "null" }, + ], + }; + } + + // Replace Data *any fields with custom typed Data fields + if (prop.name === "data" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { + const customDataType = `${structure.name}Data`; + prop.type = { kind: "reference", name: customDataType }; + + // If we haven't explicitly declared this Data structure, we'll need a placeholder + if (!explicitDataStructures.has(customDataType)) { + neededDataStructures.add(customDataType); + } + } + + // Registration.registerOptions and Registration.method are handled specially: + // registerOptions becomes a custom struct, and method is derived from it. + // Remove both from the structure so the normal generator skips them. + if (structure.name === "Registration" && (prop.name === "registerOptions" || prop.name === "method")) { + // Will be filtered out below + } + + // Replace ProgressParams.value with a proper union type + if (structure.name === "ProgressParams" && prop.name === "value" && prop.type.kind === "reference" && prop.type.name === "LSPAny") { + prop.type = { + kind: "or", + items: [ + { kind: "reference", name: "WorkDoneProgressBegin" }, + { kind: "reference", name: "WorkDoneProgressReport" }, + { kind: "reference", name: "WorkDoneProgressEnd" }, + ], + }; + } + } + } + + for (const notification of model.notifications) { + if (notification.typeName === "TelemetryEventNotification") { + notification.params = { + kind: "reference", + name: "TelemetryEvent", + }; + } + } + + // Create placeholder structures for Data types that weren't explicitly declared + for (const dataTypeName of neededDataStructures) { + const baseName = dataTypeName.replace(/Data$/, ""); + customStructures.push({ + name: dataTypeName, + properties: [], + documentation: `${dataTypeName} is a placeholder for custom data preserved on a ${baseName}.`, + }); + } + + // Add custom enumerations, custom structures, custom requests, and synthetic structures to the model + model.enumerations.push(...customEnumerations); + model.structures.push(...customStructures, ...syntheticStructures); + model.requests.push(...customRequests); + model.notifications.push(...customNotifications); + + typeScriptModel = structuredClone({ + ...model, + typeAliases: [...model.typeAliases, ...customTypeAliases], + }); + const sourceDefinition = typeScriptModel.requests.find(request => request.method === "custom/textDocument/sourceDefinition"); + const definition = typeScriptModel.requests.find(request => request.method === "textDocument/definition"); + if (!sourceDefinition || !definition) throw new Error("Missing definition request schemas."); + // The Go request names a synthesized union; clients use the standard definition result. + sourceDefinition.result = structuredClone(definition.result); + // Go's typed data structures are implementation details, not client wire contracts. + for (const structure of originalModel.structures) { + for (const property of structure.properties) { + if (property.name === "data" && property.type.kind === "reference" && property.type.name === "LSPAny") { + const target = typeScriptModel.structures.find(candidate => candidate.name === structure.name)?.properties.find(candidate => candidate.name === property.name); + if (!target) throw new Error(`Missing wire property ${structure.name}.${property.name}`); + target.type = structuredClone(property.type); + } + } + } + + // Build structure map for preprocessing + const structureMap = new Map(); + for (const structure of model.structures) { + structureMap.set(structure.name, structure); + } + + function collectInheritedProperties(structure: Structure, visited = new Set()): Property[] { + if (visited.has(structure.name)) { + return []; // Avoid circular dependencies + } + visited.add(structure.name); + + const properties: Property[] = []; + const inheritanceTypes = [...(structure.extends || []), ...(structure.mixins || [])]; + + for (const type of inheritanceTypes) { + if (type.kind === "reference") { + const inheritedStructure = structureMap.get(type.name); + if (inheritedStructure) { + properties.push( + ...collectInheritedProperties(inheritedStructure, new Set(visited)), + ...inheritedStructure.properties, + ); + } + } + } + + return properties; + } + + // Inline inheritance for each structure + for (const structure of model.structures) { + const inheritedProperties = collectInheritedProperties(structure); + + // Merge properties with structure's own properties taking precedence + const propertyMap = new Map(); + + inheritedProperties.forEach(prop => propertyMap.set(prop.name, prop)); + structure.properties.forEach(prop => propertyMap.set(prop.name, prop)); + + structure.properties = Array.from(propertyMap.values()); + structure.extends = undefined; + structure.mixins = undefined; + + // Replace experimental LSPAny with typed ExperimentalClientCapabilities in ClientCapabilities + if (structure.name === "ClientCapabilities") { + const expProp = structure.properties.find(p => p.name === "experimental"); + if (expProp) { + expProp.type = { kind: "reference", name: "ExperimentalClientCapabilities" }; + expProp.optional = true; + } + } + + // Replace experimental LSPAny with typed ExperimentalServerCapabilities in ServerCapabilities + if (structure.name === "ServerCapabilities") { + const expProp = structure.properties.find(p => p.name === "experimental"); + if (expProp) { + expProp.type = { kind: "reference", name: "ExperimentalServerCapabilities" }; + expProp.optional = true; + } + } + + // Remove method and registerOptions from Registration (handled by custom codegen) + if (structure.name === "Registration") { + structure.properties = structure.properties.filter(p => p.name !== "method" && p.name !== "registerOptions"); + } + } + + // Remove _InitializeParams structure after flattening (it was only needed for inheritance) + model.structures = model.structures.filter(s => s.name !== "_InitializeParams"); + + // Remove all notebook-related features from the model + function isNotebookRelatedName(name: string): boolean { + const lower = name.toLowerCase(); + return lower.includes("notebook"); + } + + function isNotebookRelatedMethod(method: string): boolean { + return method.toLowerCase().startsWith("notebookdocument/"); + } + + function typeReferencesNotebook(type: Type): boolean { + if (type.kind === "reference") return isNotebookRelatedName(type.name); + if (type.kind === "array") return typeReferencesNotebook(type.element); + if (type.kind === "or" || type.kind === "and") return type.items.some(typeReferencesNotebook); + if (type.kind === "map") return typeReferencesNotebook(type.key) || typeReferencesNotebook(type.value); + return false; + } + + function isEntirelyNotebookType(type: Type): boolean { + if (type.kind === "reference") return isNotebookRelatedName(type.name); + if (type.kind === "array") return isEntirelyNotebookType(type.element); + if (type.kind === "or" || type.kind === "and") return type.items.every(isEntirelyNotebookType); + return false; + } + + function removeNotebookFromType(type: Type): Type { + if (type.kind === "or") { + const filtered = type.items.filter(item => !typeReferencesNotebook(item)).map(removeNotebookFromType); + if (filtered.length === 1) return filtered[0]; + if (filtered.length < type.items.length) { + return { ...type, items: filtered }; + } + } + if (type.kind === "and") { + const filtered = type.items.filter(item => !typeReferencesNotebook(item)).map(removeNotebookFromType); + if (filtered.length === 1) return filtered[0]; + if (filtered.length < type.items.length) { + return { ...type, items: filtered }; + } + } + return type; + } + + // Filter out notebook structures (and notebook-only structures like ExecutionSummary) + const notebookOnlyStructures = new Set(["ExecutionSummary"]); + model.structures = model.structures.filter(s => !isNotebookRelatedName(s.name) && !notebookOnlyStructures.has(s.name)); + + // Remove notebook properties from remaining structures + for (const structure of model.structures) { + structure.properties = structure.properties.filter(p => { + if (isNotebookRelatedName(p.name)) return false; + // Only remove properties whose type is entirely notebook-related + if (isEntirelyNotebookType(p.type)) return false; + return true; + }); + // Clean up union types in remaining properties to remove notebook members + for (const prop of structure.properties) { + prop.type = removeNotebookFromType(prop.type); + } + } + + // Filter out notebook notifications and requests + model.notifications = model.notifications.filter(n => !isNotebookRelatedMethod(n.method)); + model.requests = model.requests.filter(r => !isNotebookRelatedMethod(r.method)); + + // Filter out notebook enumerations + model.enumerations = model.enumerations.filter(e => !isNotebookRelatedName(e.name)); + + // Remove notebook-related values from remaining enumerations + for (const enumeration of model.enumerations) { + enumeration.values = enumeration.values.filter(v => !isNotebookRelatedName(v.name)); + } + + // Filter out notebook type aliases + model.typeAliases = model.typeAliases.filter(ta => !isNotebookRelatedName(ta.name)); + + // Clean up type aliases that reference notebook types (e.g., DocumentFilter) + for (const ta of model.typeAliases) { + if (ta.type.kind === "or") { + ta.type.items = ta.type.items.filter(item => !typeReferencesNotebook(item)); + // If only one item remains, unwrap the union + if (ta.type.items.length === 1) { + ta.type = ta.type.items[0]; + } + } + } + + // Build the registration method map (after notebook filtering). + // Each unique registration method gets a field in the generated RegisterOptions struct. + const regMethodSeen = new Set(); + for (const request of [...model.requests, ...model.notifications]) { + if (!request.registrationOptions) continue; + const regMethod = (request as any).registrationMethod || request.method; + + if (regMethodSeen.has(regMethod)) continue; + regMethodSeen.add(regMethod); + + // Resolve the options type name + const ro = request.registrationOptions; + let optionsTypeName: string; + if (ro.kind === "reference") { + optionsTypeName = ro.name; + } + else { + throw new Error(`Unexpected registrationOptions kind '${ro.kind}' for ${request.method}; expected all to be resolved to references`); + } + + registrationMethods.push({ + registrationMethod: regMethod, + fieldName: methodNameIdentifier(regMethod), + optionsTypeName, + }); + } + + // Identify registration-only methods (not also a request/notification method). + // These need their own Method constant emitted. + const allRequestMethods = new Set([...model.requests, ...model.notifications].map(r => r.method)); + for (const reg of registrationMethods) { + (reg as any).isRegistrationOnly = !allRequestMethods.has(reg.registrationMethod); + } + + // Merge LSPErrorCodes into ErrorCodes and remove LSPErrorCodes + const errorCodesEnum = model.enumerations.find(e => e.name === "ErrorCodes"); + const lspErrorCodesEnum = model.enumerations.find(e => e.name === "LSPErrorCodes"); + if (errorCodesEnum && lspErrorCodesEnum) { + // Merge LSPErrorCodes values into ErrorCodes + errorCodesEnum.values.push(...lspErrorCodesEnum.values); + // Remove LSPErrorCodes from the model + model.enumerations = model.enumerations.filter(e => e.name !== "LSPErrorCodes"); + } + + // Singularize plural enum names (e.g., "ErrorCodes" -> "ErrorCode") + for (const enumeration of model.enumerations) { + if (enumeration.name.endsWith("Codes")) { + enumeration.name = enumeration.name.slice(0, -1); // "Codes" -> "Code" + } + else if (enumeration.name.endsWith("Modifiers")) { + enumeration.name = enumeration.name.slice(0, -1); // "Modifiers" -> "Modifier" + } + else if (enumeration.name.endsWith("Types")) { + enumeration.name = enumeration.name.slice(0, -1); // "Types" -> "Type" + } + } +} + +patchAndPreprocessModel(); + +// Validate that telemetry events in the TelemetryEvent union have properly shaped +// measurements and properties fields. measurements struct fields must only contain +// numeric types (decimal/integer/uinteger). +function validateTelemetryEvents() { + const telemetryAlias = customTypeAliases.find(a => a.name === "TelemetryEvent"); + if (!telemetryAlias || telemetryAlias.type.kind !== "or") return; + + const structureMap = new Map(model.structures.map(s => [s.name, s])); + + for (const item of telemetryAlias.type.items) { + if (item.kind !== "reference") continue; + const eventStruct = structureMap.get(item.name); + if (!eventStruct) continue; + + for (const prop of eventStruct.properties) { + if (prop.name === "measurements" && prop.type.kind === "reference") { + const measurementsStruct = structureMap.get(prop.type.name); + if (!measurementsStruct) continue; + for (const mp of measurementsStruct.properties) { + if (mp.type.kind !== "base" || !["decimal", "integer", "uinteger"].includes(mp.type.name)) { + throw new Error( + `Telemetry measurements struct ${prop.type.name}.${mp.name} must be a numeric type ` + + `(decimal/integer/uinteger), got ${mp.type.kind === "base" ? mp.type.name : mp.type.kind}`, + ); + } + } + } + } + } +} + +validateTelemetryEvents(); + +interface GoType { + name: string; + needsPointer: boolean; +} + +interface TypeInfo { + types: Map; + literalTypes: Map; + unionTypes: Map; + typeAliasMap: Map; +} + +const typeInfo: TypeInfo = { + types: new Map(), + literalTypes: new Map(), + unionTypes: new Map(), + typeAliasMap: new Map(), +}; + +function titleCase(s: string) { + return s.charAt(0).toUpperCase() + s.slice(1); +} + +function goFieldName(prop: Property): string { + if (prop.name.startsWith("_vs_")) { + return "VS" + titleCase(prop.name.slice(4)); + } + return titleCase(prop.name); +} + +function resolveType(type: Type): GoType { + switch (type.kind) { + case "base": + switch (type.name) { + case "integer": + return { name: "int32", needsPointer: false }; + case "uinteger": + return { name: "uint32", needsPointer: false }; + case "string": + return { name: "string", needsPointer: false }; + case "boolean": + return { name: "bool", needsPointer: false }; + case "URI": + return { name: "URI", needsPointer: false }; + case "DocumentUri": + return { name: "DocumentUri", needsPointer: false }; + case "decimal": + return { name: "float64", needsPointer: false }; + case "null": + return { name: "any", needsPointer: false }; + default: + throw new Error(`Unsupported base type: ${type.name}`); + } + + case "reference": + const typeAliasOverride = typeAliasOverrides.get(type.name); + if (typeAliasOverride) { + return typeAliasOverride; + } + + const nonResolved = nonResolvedAliases.has(type.name); + if (nonResolved) { + return { name: type.name, needsPointer: false }; + } + + // Check if this is a type alias that resolves to a union type + const aliasedType = typeInfo.typeAliasMap.get(type.name); + if (aliasedType) { + return resolveType(aliasedType); + } + + let refType = typeInfo.types.get(type.name); + if (!refType) { + refType = { name: type.name, needsPointer: true }; + typeInfo.types.set(type.name, refType); + } + return refType; + + case "array": { + const elementType = resolveType(type.element); + const arrayTypeName = elementType.needsPointer + ? `[]*${elementType.name}` + : `[]${elementType.name}`; + return { + name: arrayTypeName, + needsPointer: false, + }; + } + + case "map": { + const keyType = resolveType(type.key); + const valueType = resolveType(type.value); + const valueTypeName = valueType.needsPointer ? `*${valueType.name}` : valueType.name; + + return { + name: `map[${keyType.name}]${valueTypeName}`, + needsPointer: false, + }; + } + + case "tuple": { + if ( + type.items.length === 2 && + type.items[0].kind === "base" && type.items[0].name === "uinteger" && + type.items[1].kind === "base" && type.items[1].name === "uinteger" + ) { + return { name: "[2]uint32", needsPointer: false }; + } + + throw new Error("Unsupported tuple type: " + JSON.stringify(type)); + } + + case "stringLiteral": { + const typeName = `StringLiteral${type.value.split(".").map(titleCase).join("")}`; + typeInfo.literalTypes.set(String(type.value), typeName); + return { name: typeName, needsPointer: false }; + } + + case "integerLiteral": { + const typeName = `IntegerLiteral${type.value}`; + typeInfo.literalTypes.set(String(type.value), typeName); + return { name: typeName, needsPointer: false }; + } + + case "booleanLiteral": { + const typeName = `BooleanLiteral${type.value ? "True" : "False"}`; + typeInfo.literalTypes.set(String(type.value), typeName); + return { name: typeName, needsPointer: false }; + } + case "literal": + if (type.value.properties.length === 0) { + return { name: "struct{}", needsPointer: false }; + } + + throw new Error("Unexpected non-empty literal object: " + JSON.stringify(type.value)); + + case "or": { + return handleOrType(type); + } + + default: + throw new Error(`Unsupported type kind: ${type.kind}`); + } +} + +function flattenOrTypes(types: Type[]): Type[] { + const flattened = new Set(); + + for (const rawType of types) { + let type = rawType; + + // Dereference reference types that point to OR types + if (rawType.kind === "reference") { + const aliasedType = typeInfo.typeAliasMap.get(rawType.name); + if (aliasedType && aliasedType.kind === "or") { + type = aliasedType; + } + } + + if (type.kind === "or") { + // Recursively flatten OR types + for (const subType of flattenOrTypes(type.items)) { + flattened.add(subType); + } + } + else { + flattened.add(rawType); + } + } + + return Array.from(flattened); +} + +function pluralize(name: string): string { + // Handle common irregular plurals and special cases + if ( + name.endsWith("s") || name.endsWith("x") || name.endsWith("z") || + name.endsWith("ch") || name.endsWith("sh") + ) { + return name + "es"; + } + if (name.endsWith("y") && name.length > 1 && !"aeiou".includes(name[name.length - 2])) { + return name.slice(0, -1) + "ies"; + } + return name + "s"; +} + +function handleOrType(orType: OrType): GoType { + // First, flatten any nested OR types + const types = flattenOrTypes(orType.items); + + // Check for nullable types (OR with null) + const nullIndex = types.findIndex(item => item.kind === "base" && item.name === "null"); + let containedNull = nullIndex !== -1; + + // If it's nullable, remove the null type from the list + let nonNullTypes = types; + if (containedNull) { + nonNullTypes = types.filter((_, i) => i !== nullIndex); + } + + // If no types remain after filtering null, this shouldn't happen + if (nonNullTypes.length === 0) { + throw new Error("Union type with only null is not supported: " + JSON.stringify(types)); + } + + // Even if only one type remains after filtering null, we still need to create a union type + // to preserve the nullable behavior (all fields nil = null) + + let memberNames = nonNullTypes.map(type => { + if (type.kind === "reference") { + return type.name; + } + else if (type.kind === "base") { + return titleCase(type.name); + } + else if ( + type.kind === "array" && + (type.element.kind === "reference" || type.element.kind === "base") + ) { + return pluralize(titleCase(type.element.name)); + } + else if (type.kind === "array") { + // Handle more complex array types + const elementType = resolveType(type.element); + return `${elementType.name}Array`; + } + else if (type.kind === "literal" && type.value.properties.length === 0) { + return "EmptyObject"; + } + else if (type.kind === "tuple") { + return "Tuple"; + } + else { + throw new Error(`Unsupported type kind in union: ${type.kind}`); + } + }); + + // Find longest common prefix of member names chunked by PascalCase + function findLongestCommonPrefix(names: string[]): string { + if (names.length === 0) return ""; + if (names.length === 1) return ""; + + // Split each name into PascalCase chunks + function splitPascalCase(name: string): string[] { + const chunks: string[] = []; + let currentChunk = ""; + + for (let i = 0; i < name.length; i++) { + const char = name[i]; + if (char >= "A" && char <= "Z" && currentChunk.length > 0) { + // Start of a new chunk + chunks.push(currentChunk); + currentChunk = char; + } + else { + currentChunk += char; + } + } + + if (currentChunk.length > 0) { + chunks.push(currentChunk); + } + + return chunks; + } + + const allChunks = names.map(splitPascalCase); + const minChunkLength = Math.min(...allChunks.map(chunks => chunks.length)); + + // Find the longest common prefix of chunks + let commonChunks: string[] = []; + for (let i = 0; i < minChunkLength; i++) { + const chunk = allChunks[0][i]; + if (allChunks.every(chunks => chunks[i] === chunk)) { + commonChunks.push(chunk); + } + else { + break; + } + } + + return commonChunks.join(""); + } + + const commonPrefix = findLongestCommonPrefix(memberNames); + + let unionTypeName = ""; + + if (commonPrefix.length > 0) { + const trimmedMemberNames = memberNames.map(name => name.slice(commonPrefix.length)); + if (trimmedMemberNames.every(name => name)) { + unionTypeName = commonPrefix + trimmedMemberNames.join("Or"); + memberNames = trimmedMemberNames; + } + else { + unionTypeName = memberNames.join("Or"); + } + } + else { + unionTypeName = memberNames.join("Or"); + } + + if (containedNull) { + unionTypeName += "OrNull"; + } + else { + containedNull = false; + } + + const union = memberNames.map((name, i) => ({ name, type: nonNullTypes[i], containedNull })); + + typeInfo.unionTypes.set(unionTypeName, union); + + return { + name: unionTypeName, + needsPointer: false, + }; +} + +const typeAliasOverrides = new Map([ + ["LSPAny", { name: "any", needsPointer: false }], + ["LSPArray", { name: "[]any", needsPointer: false }], + ["LSPObject", { name: "map[string]any", needsPointer: false }], + ["uint64", { name: "uint64", needsPointer: false }], +]); + +// These type aliases are intentionally not resolved to their underlying types. +// It means that we can end up with non-normalized union types in some places. +// Also, unlike other type aliases, these will get a type alias in the generated source code. +// We may want to eventually do this for all type aliases though. +const nonResolvedAliases = new Set(customTypeAliases.map(ta => ta.name)); + +/** + * First pass: Resolve all type information + */ +function collectTypeDefinitions() { + // Process all enumerations first to make them available for struct fields + for (const enumeration of model.enumerations) { + typeInfo.types.set(enumeration.name, { + name: enumeration.name, + needsPointer: false, + }); + } + + const valueTypes = new Set([ + "Position", + "Range", + "Location", + "Color", + "TextDocumentIdentifier", + "PreviousResultId", + "VersionedTextDocumentIdentifier", + "OptionalVersionedTextDocumentIdentifier", + "ExportInfoMapKey", + ]); + + // Process all structures + for (const structure of model.structures) { + typeInfo.types.set(structure.name, { + name: structure.name, + needsPointer: !valueTypes.has(structure.name), + }); + } + + // Process all type aliases + for (const typeAlias of model.typeAliases) { + if (typeAliasOverrides.has(typeAlias.name)) { + continue; + } + + // Store the alias mapping so we can resolve it later + typeInfo.typeAliasMap.set(typeAlias.name, typeAlias.type); + } +} + +function formatDocumentation(s: string | undefined): string { + if (!s) return ""; + + let lines: string[] = []; + + for (let line of s.split("\n")) { + line = line.trimEnd(); + line = line.replace(/(\w ) +/g, "$1"); + // Some upstream docs include dangling block comment delimiters; remove them + // so they don't leak into generated `//` comments. + line = line.replace(/\s*\/\*+\s*/g, " "); + line = line.replace(/\s*\*+\/\s*/g, " "); + line = line.replace(/\s{2,}/g, " ").trimEnd(); + line = line.replace(/\{@link(?:code)?.*?([^} ]+)\}/g, "$1"); + line = line.replace(/^@(since|proposed|deprecated)(.*)/, (_, tag, rest) => { + lines.push(""); + return `${titleCase(tag)}${rest ? ":" + rest : "."}`; + }); + lines.push(line); + } + + // filter out contiguous empty lines + while (true) { + const toRemove = lines.findIndex((line, index) => { + if (line) return false; + if (index === 0) return true; + if (index === lines.length - 1) return true; + return !(lines[index - 1] && lines[index + 1]); + }); + if (toRemove === -1) break; + lines.splice(toRemove, 1); + } + + return lines.length > 0 ? "// " + lines.join("\n// ") + "\n" : ""; +} + +function methodNameIdentifier(name: string) { + return name.split("/").map(v => { + if (v === "$") return ""; + // Mirror goFieldName: "_vs_foo" -> "VSFoo". + if (v.startsWith("_vs_")) return "VS" + titleCase(v.slice(4)); + return titleCase(v); + }).join(""); +} + +/** + * Returns the JSON token kind ("string", "number", "object", "array", "boolean") + * for a given meta model Type, or undefined if the kind cannot be statically determined. + */ +function jsonKindForType(type: Type): string | undefined { + switch (type.kind) { + case "base": + switch (type.name) { + case "integer": + case "uinteger": + case "decimal": + return "number"; + case "string": + case "URI": + case "DocumentUri": + return "string"; + case "boolean": + return "boolean"; + default: + return undefined; + } + case "reference": { + if (typeAliasOverrides.has(type.name)) { + return undefined; + } + if (model.structures.some(s => s.name === type.name)) { + return "object"; + } + const enumeration = model.enumerations.find(e => e.name === type.name); + if (enumeration) { + switch (enumeration.type.name) { + case "string": + return "string"; + case "integer": + case "uinteger": + return "number"; + default: + return undefined; + } + } + const aliasType = typeInfo.typeAliasMap.get(type.name); + if (aliasType) return jsonKindForType(aliasType); + return undefined; + } + case "array": + return "array"; + case "map": + return "object"; + case "tuple": + return "array"; + case "stringLiteral": + return "string"; + case "integerLiteral": + return "number"; + case "booleanLiteral": + return "boolean"; + case "literal": + return "object"; + case "or": { + const kinds = new Set(type.items.map(item => jsonKindForType(item)).filter(Boolean)); + return kinds.size === 1 ? kinds.values().next().value : undefined; + } + default: + return undefined; + } +} + +function goKindCasesForJsonKind(kind: string): string { + switch (kind) { + case "string": + return `case '"':`; + case "number": + return `case '0':`; + case "object": + return `case '{':`; + case "array": + return `case '[':`; + case "boolean": + return `case 't', 'f':`; + default: + return ""; + } +} + +/** + * Checks if a meta model Type can represent a JSON null value. + * Used to determine whether to reject explicit JSON `null` for any field + * that can otherwise decode `null` without a type error. + */ +function typeCanBeNull(type: Type): boolean { + switch (type.kind) { + case "base": + return type.name === "null"; + case "reference": { + const override = typeAliasOverrides.get(type.name); + if (override) { + return override.name === "any"; + } + // A bare "any" reference resolves to Go's `any` (interface), which can hold null. + if (type.name === "any") { + return true; + } + if (nonResolvedAliases.has(type.name)) { + const customAlias = customTypeAliases.find(t => t.name === type.name); + if (customAlias) return typeCanBeNull(customAlias.type); + return false; + } + const aliased = typeInfo.typeAliasMap.get(type.name); + if (aliased) return typeCanBeNull(aliased); + return false; + } + case "or": + return type.items.some(item => typeCanBeNull(item)); + default: + return false; + } +} + +/** + * For a group of union entries that share the same JSON kind (e.g., all objects), + * find a discriminator field — a JSON property whose string literal type differs + * across variants — enabling efficient O(1) dispatch instead of try-each. + */ +function findDiscriminatorField(entries: { fieldName: string; typeName: string; originalType: Type; }[]): { + fieldName: string; + mapping: Map; + unmapped: { fieldName: string; typeName: string; originalType: Type; }[]; +} | null { + // For each entry, find string literal fields and build candidate discriminators. + // A valid discriminator is a field name that appears on multiple variants with + // different string literal values. + const fieldCandidates = new Map>(); + + for (const entry of entries) { + if (entry.originalType.kind !== "reference") continue; + const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); + if (!structure) continue; + + for (const prop of structure.properties) { + if (prop.type.kind === "stringLiteral") { + if (!fieldCandidates.has(prop.name)) { + fieldCandidates.set(prop.name, new Map()); + } + + const mapping = fieldCandidates.get(prop.name)!; + if (!mapping.has(prop.type.value)) { + mapping.set(prop.type.value, entry); + } + else { + // Two entries share the same literal value; invalidate this candidate. + mapping.set(prop.type.value, undefined); + } + } + } + } + + // Pick the discriminator field that covers the most entries. + let bestField: string | null = null; + let bestMapping: Map | null = null; + + for (const [fieldName, mapping] of fieldCandidates) { + const validMapping = new Map(); + for (const [value, entry] of mapping) { + if (entry !== undefined) validMapping.set(value, entry); + } + if (validMapping.size >= 2 && (!bestMapping || validMapping.size > bestMapping.size)) { + bestField = fieldName; + bestMapping = validMapping; + } + } + + if (!bestField || !bestMapping) return null; + + const mappedEntries = new Set(bestMapping.values()); + const unmapped = entries.filter(e => !mappedEntries.has(e)); + + return { fieldName: bestField, mapping: bestMapping, unmapped }; +} + +function hasCustomStructureCodec(name: string): boolean { + return name === "Registration"; +} + +/** + * For a group of union entries that share the same JSON kind, find fields whose + * presence/absence in the JSON uniquely identifies a variant. A "presence discriminator" + * for variant X is a required field on X that does not appear in any other variant's + * property set at all. + */ +function findPresenceDiscriminator(entries: { fieldName: string; typeName: string; originalType: Type; }[]): { + checks: { jsonFieldName: string; entry: { fieldName: string; typeName: string; originalType: Type; }; }[]; + unmapped: { fieldName: string; typeName: string; originalType: Type; }[]; +} | null { + // Collect all property names for each variant + const variantProps = new Map; }>(); + for (const entry of entries) { + if (entry.originalType.kind !== "reference") continue; + const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); + if (!structure) continue; + const required = structure.properties.filter(p => !p.optional && !p.omitzeroValue); + const allNames = new Set(structure.properties.map(p => p.name)); + variantProps.set(entry, { required, allNames }); + } + + const checks: { jsonFieldName: string; entry: typeof entries[0]; }[] = []; + const handled = new Set(); + + for (const entry of entries) { + const info = variantProps.get(entry); + if (!info) continue; + + const otherEntries = entries.filter(e => e !== entry); + for (const field of info.required) { + const absentFromAllOthers = otherEntries.every(other => { + const otherInfo = variantProps.get(other); + if (!otherInfo) return false; + return !otherInfo.allNames.has(field.name); + }); + if (absentFromAllOthers) { + checks.push({ jsonFieldName: field.name, entry }); + handled.add(entry); + break; + } + } + } + + if (checks.length === 0) return null; + + const unmapped = entries.filter(e => !handled.has(e)); + return { checks, unmapped }; +} + +/** + * Generate the Go code + */ +function generateCode() { + const parts: string[] = []; + + function write(s: string) { + parts.push(s); + } + + function writeLine(s = "") { + parts.push(s + "\n"); + } + + /** + * Generate Go code for discriminator-based union dispatch. + * Assumes a variable named `data` of type `json.Value` is in scope. + * Returns true if all switch branches return (exhaustive). + */ + function generateDiscriminatorDispatch( + disc: NonNullable>, + indent: string, + ): boolean { + writeLine(`${indent}switch string(jsonObjectRawField(data, ${JSON.stringify(disc.fieldName)})) {`); + for (const [value, entry] of disc.mapping) { + writeLine(`${indent}case \`"${value}"\`:`); + writeLine(`${indent}\to.${entry.fieldName} = new(${entry.typeName})`); + writeLine(`${indent}\treturn json.Unmarshal(data, o.${entry.fieldName})`); + } + let exhaustive = false; + if (disc.unmapped.length > 0) { + writeLine(`${indent}default:`); + exhaustive = generateUnmappedFallback(disc.unmapped, indent + "\t"); + } + writeLine(`${indent}}`); + return exhaustive; + } + + /** + * Generate streaming discriminator dispatch for unions with at most one + * unmapped fallback arm. Fields after the discriminator decode directly + * from the active decoder; fields before it are replayed by the helper. + */ + function generateStreamingDiscriminatorDispatch( + name: string, + disc: NonNullable>, + indent: string, + ) { + writeLine(`${indent}state, err := scanDiscriminatedStruct(dec, "${name}", ${JSON.stringify(disc.fieldName)})`); + writeLine(`${indent}if err != nil {`); + writeLine(`${indent}\treturn err`); + writeLine(`${indent}}`); + writeLine(`${indent}switch string(state.discriminatorValue) {`); + for (const [value, entry] of disc.mapping) { + writeLine(`${indent}case \`"${value}"\`:`); + writeLine(`${indent}\treturn unmarshalDiscriminatedArm(state, &o.${entry.fieldName})`); + } + writeLine(`${indent}default:`); + if (disc.unmapped.length === 1) { + writeLine(`${indent}\treturn unmarshalDiscriminatedArm(state, &o.${disc.unmapped[0].fieldName})`); + } + else { + writeLine(`${indent}\treturn state.invalidDiscriminator()`); + } + writeLine(`${indent}}`); + } + + function canStreamDiscriminator( + disc: NonNullable>, + ): boolean { + if (disc.unmapped.length > 1) { + return false; + } + const entries = [...disc.mapping.values(), ...disc.unmapped]; + return entries.every(entry => { + if (entry.originalType.kind !== "reference") { + return false; + } + const name = entry.originalType.name; + return !hasCustomStructureCodec(name) && model.structures.some(structure => structure.name === name); + }); + } + + /** + * Generate try-each fallback code for unmapped entries, chaining into + * presence dispatch if possible before falling back to raw try-each. + * Assumes a variable named `data` of type `json.Value` is in scope. + * Returns true if all generated paths return (exhaustive). + */ + function generateUnmappedFallback( + unmapped: { fieldName: string; typeName: string; originalType: Type; }[], + indent: string, + ): boolean { + if (unmapped.length <= 1) { + // Exactly 1 entry: it's the only remaining variant after dispatch, + // so use a hard error return instead of speculative err == nil. + for (const entry of unmapped) { + writeLine(`${indent}o.${entry.fieldName} = new(${entry.typeName})`); + writeLine(`${indent}return json.Unmarshal(data, o.${entry.fieldName})`); + } + return unmapped.length === 1; + } + // Try chaining presence dispatch on the remaining subset + const pres = findPresenceDiscriminator(unmapped); + if (pres) { + return generatePresenceDispatch(pres, indent); + } + else { + for (const entry of unmapped) { + writeLine(`${indent}var v${entry.fieldName} ${entry.typeName}`); + writeLine(`${indent}if err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); + writeLine(`${indent}\to.${entry.fieldName} = &v${entry.fieldName}`); + writeLine(`${indent}\treturn nil`); + writeLine(`${indent}}`); + } + return false; + } + } + + /** + * Iteratively collect all presence discriminator checks across multiple + * passes, so they can be emitted as a single flat switch with one scan. + */ + function collectAllPresenceChecks( + pres: NonNullable>, + ): { + allChecks: { jsonFieldName: string; entry: { fieldName: string; typeName: string; originalType: Type; }; }[]; + finalUnmapped: { fieldName: string; typeName: string; originalType: Type; }[]; + } { + const allChecks = [...pres.checks]; + let remaining = pres.unmapped; + while (remaining.length > 1) { + const next = findPresenceDiscriminator(remaining); + if (!next) break; + allChecks.push(...next.checks); + remaining = next.unmapped; + } + return { allChecks, finalUnmapped: remaining }; + } + + /** + * Generate Go code for presence-based union dispatch. + * Assumes a variable named `data` of type `json.Value` is in scope. + * Collects all presence checks iteratively, then emits a single flat + * switch jsonObjectHasKey(data, key1, key2, ...) so data is scanned once. + * Returns true if all switch branches return (exhaustive). + */ + function generatePresenceDispatch( + pres: NonNullable>, + indent: string, + ): boolean { + const { allChecks, finalUnmapped } = collectAllPresenceChecks(pres); + const args = allChecks.map(c => JSON.stringify(c.jsonFieldName)).join(", "); + writeLine(`${indent}switch jsonObjectHasKey(data, ${args}) {`); + for (let i = 0; i < allChecks.length; i++) { + writeLine(`${indent}case ${i}: // ${allChecks[i].jsonFieldName}`); + writeLine(`${indent}\to.${allChecks[i].entry.fieldName} = new(${allChecks[i].entry.typeName})`); + writeLine(`${indent}\treturn json.Unmarshal(data, o.${allChecks[i].entry.fieldName})`); + } + if (finalUnmapped.length > 0) { + writeLine(`${indent}default:`); + if (finalUnmapped.length === 1) { + // Only one variant left after dispatch — use hard error return. + const entry = finalUnmapped[0]; + writeLine(`${indent}\to.${entry.fieldName} = new(${entry.typeName})`); + writeLine(`${indent}\treturn json.Unmarshal(data, o.${entry.fieldName})`); + } + else { + for (const entry of finalUnmapped) { + writeLine(`${indent}\tvar v${entry.fieldName} ${entry.typeName}`); + writeLine(`${indent}\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); + writeLine(`${indent}\t\to.${entry.fieldName} = &v${entry.fieldName}`); + writeLine(`${indent}\t\treturn nil`); + writeLine(`${indent}\t}`); + } + } + } + writeLine(`${indent}}`); + // Exhaustive if the default case has a single hard-returning entry + return finalUnmapped.length === 1; + } + + function generateResolvedStruct(structure: Structure, indent: string = "\t"): string[] { + const lines: string[] = []; + + for (const prop of structure.properties) { + // Add property documentation if it exists + if (prop.documentation) { + const propDoc = formatDocumentation(prop.documentation); + if (propDoc) { + // Add the documentation with proper indentation + for (const line of propDoc.split("\n").filter(l => l)) { + lines.push(`${indent}${line}`); + } + } + } + + const type = resolveType(prop.type); + + // For reference types that are structures, use a named resolved type + if (prop.type.kind === "reference") { + const refStructure = model.structures.find(s => s.name === type.name); + if (refStructure) { + // Use a named type for the resolved version + lines.push(`${indent}${goFieldName(prop)} Resolved${type.name} \`json:"${prop.name},omitzero"\``); + continue; + } + } + + // For other types (primitives, enums, arrays, etc.), use the type directly (no pointer) + const goType = type.name; + lines.push(`${indent}${goFieldName(prop)} ${goType} \`json:"${prop.name},omitzero"\``); + } + + return lines; + } + + function generateResolveConversion(structure: Structure, varName: string, indent: string): string[] { + const lines: string[] = []; + + for (const prop of structure.properties) { + const type = resolveType(prop.type); + const fieldName = goFieldName(prop); + const accessPath = `${varName}.${fieldName}`; + + // For reference types that are structures, call the resolve method + if (prop.type.kind === "reference") { + const refStructure = model.structures.find(s => s.name === type.name); + if (refStructure) { + lines.push(`${indent}${fieldName}: ${accessPath}.resolve(),`); + continue; + } + } + + // For other types, dereference if pointer + if (prop.optional || type.needsPointer) { + lines.push(`${indent}${fieldName}: derefOr(${accessPath}),`); + } + else { + lines.push(`${indent}${fieldName}: ${accessPath},`); + } + } + + return lines; + } + + function collectStructureDependencies(structure: Structure, visited = new Set()): Structure[] { + if (visited.has(structure.name)) { + return []; + } + visited.add(structure.name); + + const deps: Structure[] = []; + + for (const prop of structure.properties) { + if (prop.type.kind === "reference") { + const refStructure = model.structures.find(s => s.name === (prop.type as ReferenceType).name); + if (refStructure) { + deps.push(...collectStructureDependencies(refStructure, new Set(visited))); + deps.push(refStructure); + } + } + } + + return deps; + } + + function generateResolvedTypeAndHelper(structure: Structure, isMain: boolean = false): string[] { + const lines: string[] = []; + const typeName = `Resolved${structure.name}`; + // Main method is exported (Resolve), helpers are unexported (resolve) + const methodName = isMain ? `Resolve` : `resolve`; + + // Generate the resolved type with documentation + if (!isMain) { + // For non-main types, add standard documentation header + if (structure.documentation) { + const typeDoc = formatDocumentation(structure.documentation); + if (typeDoc) { + // Prepend comment explaining this is the resolved version + lines.push(`// ${typeName} is a resolved version of ${structure.name} with all optional fields`); + lines.push(`// converted to non-pointer values for easier access.`); + lines.push(`//`); + // Add the original structure documentation + for (const line of typeDoc.split("\n").filter(l => l)) { + lines.push(line); + } + } + } + else { + // If no documentation, just add a basic comment + lines.push(`// ${typeName} is a resolved version of ${structure.name} with all optional fields`); + lines.push(`// converted to non-pointer values for easier access.`); + } + } + // For main type, documentation is added separately before calling this function + + lines.push(`type ${typeName} struct {`); + lines.push(...generateResolvedStruct(structure, "\t")); + lines.push(`}`); + lines.push(``); + + // Generate the conversion method on the pointer receiver + lines.push(`func (v *${structure.name}) ${methodName}() ${typeName} {`); + lines.push(`\tif v == nil {`); + lines.push(`\t\treturn ${typeName}{}`); + lines.push(`\t}`); + lines.push(`\treturn ${typeName}{`); + lines.push(...generateResolveConversion(structure, "v", "\t\t")); + lines.push(`\t}`); + lines.push(`}`); + lines.push(``); + + return lines; + } + + // File header + writeLine("// Code generated by generate.mts; DO NOT EDIT."); + writeLine(""); + writeLine("package lsproto"); + writeLine(""); + writeLine(`import (`); + writeLine(`\t"cmp"`); + writeLine(`\t"fmt"`); + writeLine(`\t"strings"`); + writeLine(""); + writeLine(`\t"github.com/microsoft/TypeScript/tsc/internal/json"`); + writeLine(`)`); + writeLine(""); + writeLine("// Meta model version " + model.metaData.version); + writeLine(""); + + // Generate structures + writeLine("// Structures\n"); + + for (const structure of model.structures) { + function generateStructFields(name: string, includeDocumentation: boolean) { + if (includeDocumentation) { + write(formatDocumentation(structure.documentation)); + } + + writeLine(`type ${name} struct {`); + + // Properties are now inlined, no need to embed extends/mixins + for (const prop of structure.properties) { + if (includeDocumentation) { + write(formatDocumentation(prop.documentation)); + } + + const type = resolveType(prop.type); + + // For properties marked with omitzeroValue, use value type with omitzero instead of pointer + const useOmitzero = prop.optional || prop.omitzeroValue; + const goType = (prop.optional || type.needsPointer) && !prop.omitzeroValue ? `*${type.name}` : type.name; + + // Strictness markers for the shared unmarshalStruct interpreter: + // required = must be present. A nilable field (pointer/slice/map, + // not omitzero) rejects an explicit JSON null by default; mark the + // rare spec-nullable ones with `nullable` so the interpreter allows it. + const required = !prop.optional && !prop.omitzeroValue; + const nilable = prop.optional || type.needsPointer || type.name.startsWith("[]") || type.name.startsWith("map[") || !!prop.omitzeroValue; + const nullable = nilable && (typeCanBeNull(prop.type) || !!prop.omitzeroValue); + const lspMarkers = [required ? "required" : "", nullable ? "nullable" : ""].filter(Boolean).join(","); + const lspTag = lspMarkers ? ` lsp:"${lspMarkers}"` : ""; + + writeLine(`\t${goFieldName(prop)} ${goType} \`json:"${prop.name}${useOmitzero ? ",omitzero" : ""}"${lspTag}\``); + + if (includeDocumentation) { + writeLine(""); + } + } + + // Special: add RegisterOptions field to Registration + if (structure.name === "Registration") { + writeLine(""); + writeLine(`\t// Options necessary for the registration. Determines the method.`); + writeLine(`\tRegisterOptions *RegisterOptions \`json:"-"\``); + } + + writeLine("}"); + writeLine(""); + } + + generateStructFields(structure.name, true); + writeLine(""); + + if (hasTextDocumentURI(structure)) { + // Generate TextDocumentURI method + const textDocProp = structure.properties?.find(p => (p.name === "textDocument" || p.name === "_vs_textDocument") && p.type.kind === "reference" && p.type.name === "TextDocumentIdentifier"); + const textDocFieldName = textDocProp ? goFieldName(textDocProp) : "TextDocument"; + writeLine(`func (s *${structure.name}) TextDocumentURI() DocumentUri {`); + writeLine(`\treturn s.${textDocFieldName}.Uri`); + writeLine(`}`); + writeLine(""); + + if (hasTextDocumentPosition(structure)) { + // Generate TextDocumentPosition method + const posProp = structure.properties?.find(p => (p.name === "position" || p.name === "_vs_position") && p.type.kind === "reference" && p.type.name === "Position"); + const posFieldName = posProp ? goFieldName(posProp) : "Position"; + writeLine(`func (s *${structure.name}) TextDocumentPosition() Position {`); + writeLine(`\treturn s.${posFieldName}`); + writeLine(`}`); + writeLine(""); + } + } + + const locationUriProperty = getLocationUriProperty(structure); + if (locationUriProperty) { + // Generate Location method + writeLine(`func (s ${structure.name}) GetLocation() Location {`); + if (locationUriProperty === "Uri" && structure.name === "Location") { + writeLine(`\treturn s`); + } + else { + writeLine(`\treturn Location{`); + writeLine(`\t\tUri: s.${locationUriProperty},`); + writeLine(`\t\tRange: s.${locationUriProperty.replace(/Uri$/, "Range")},`); + writeLine(`\t}`); + } + writeLine(`}`); + writeLine(""); + } + + // Generate UnmarshalJSONFrom method for structure validation. + // Structures with custom codecs are generated separately. + // Skip properties marked with omitzeroValue since they're optional by nature + const requiredProps = structure.properties?.filter(p => { + if (p.optional) return false; + if (p.omitzeroValue) return false; + return true; + }) || []; + // Check if any fields need null rejection + const hasNullRejectableFields = structure.properties?.some(p => { + if (p.omitzeroValue) return false; + if (typeCanBeNull(p.type)) return false; + const resolved = resolveType(p.type); + return p.optional || resolved.needsPointer || resolved.name.startsWith("[]") || resolved.name.startsWith("map["); + }) || false; + if ((requiredProps.length > 0 || hasNullRejectableFields) && !hasCustomStructureCodec(structure.name)) { + writeLine(`\tvar _ json.UnmarshalerFrom = (*${structure.name})(nil)`); + writeLine(""); + writeLine(`func (s *${structure.name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); + writeLine(`\treturn unmarshalStruct(s, dec)`); + writeLine(`}`); + writeLine(""); + } + + // Generate RegisterOptions struct and custom Registration marshal/unmarshal + // right after the Registration struct definition. + if (structure.name === "Registration") { + // RegisterOptions struct + writeLine(`// RegisterOptions is an externally-tagged union representing the options for a capability registration.`); + writeLine(`// Exactly one field should be set. The set field determines the method for the registration.`); + writeLine(`type RegisterOptions struct {`); + for (const reg of registrationMethods) { + writeLine(`\t${reg.fieldName} *${reg.optionsTypeName}`); + } + writeLine(`}`); + writeLine(""); + + // MarshalJSONTo for Registration + writeLine(`var _ json.MarshalerTo = (*Registration)(nil)`); + writeLine(""); + writeLine(`func (s *Registration) MarshalJSONTo(enc *json.Encoder) error {`); + + // Assert RegisterOptions is set and exactly one field is set + writeLine(`\tif s.RegisterOptions == nil {`); + writeLine(`\t\tpanic("RegisterOptions must be set")`); + writeLine(`\t}`); + writeLine(`\tassertOnlyOne("exactly one element of RegisterOptions should be set", countNonNil(s.RegisterOptions))`); + writeLine(""); + + writeLine(`\tif err := enc.WriteToken(json.BeginObject); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif err := enc.WriteValue(json.Value(\`"id"\`)); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif err := json.MarshalEncode(enc, s.Id); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif err := enc.WriteValue(json.Value(\`"method"\`)); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tvar method json.Value`); + writeLine(`\tvar opts any`); + writeLine(`\tswitch {`); + for (const reg of registrationMethods) { + writeLine(`\tcase s.RegisterOptions.${reg.fieldName} != nil:`); + writeLine(`\t\tmethod = json.Value(\`"${reg.registrationMethod}"\`)`); + writeLine(`\t\topts = s.RegisterOptions.${reg.fieldName}`); + } + writeLine(`\t}`); + writeLine(`\tif err := enc.WriteValue(method); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif err := enc.WriteValue(json.Value(\`"registerOptions"\`)); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif err := json.MarshalEncode(enc, opts); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\treturn enc.WriteToken(json.EndObject)`); + writeLine(`}`); + writeLine(""); + + // UnmarshalJSONFrom for Registration + writeLine(`var _ json.UnmarshalerFrom = (*Registration)(nil)`); + writeLine(""); + writeLine(`func (s *Registration) UnmarshalJSONFrom(dec *json.Decoder) error {`); + writeLine(`\t*s = Registration{}`); + writeLine(`\tconst (`); + writeLine(`\t\tmissingId uint = 1 << iota`); + writeLine(`\t\tmissingMethod`); + writeLine(`\t\t_missingLast`); + writeLine(`\t)`); + writeLine(`\tmissing := _missingLast - 1`); + writeLine(""); + writeLine(`\tif k := dec.PeekKind(); k != '{' {`); + writeLine(`\t\treturn errNotObject(k)`); + writeLine(`\t}`); + writeLine(`\tif _, err := dec.ReadToken(); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(""); + writeLine(`\tvar method string`); + writeLine(`\tvar rawRegisterOptions json.Value`); + writeLine(""); + writeLine(`\tfor dec.PeekKind() != '}' {`); + writeLine(`\t\tname, err := dec.ReadValue()`); + writeLine(`\t\tif err != nil {`); + writeLine(`\t\t\treturn err`); + writeLine(`\t\t}`); + writeLine(`\t\tswitch string(name) {`); + writeLine(`\t\tcase \`"id"\`:`); + writeLine(`\t\t\tmissing &^= missingId`); + writeLine(`\t\t\tif err := json.UnmarshalDecode(dec, &s.Id); err != nil {`); + writeLine(`\t\t\t\treturn err`); + writeLine(`\t\t\t}`); + writeLine(`\t\tcase \`"method"\`:`); + writeLine(`\t\t\tmissing &^= missingMethod`); + writeLine(`\t\t\tif err := json.UnmarshalDecode(dec, &method); err != nil {`); + writeLine(`\t\t\t\treturn err`); + writeLine(`\t\t\t}`); + writeLine(`\t\tcase \`"registerOptions"\`:`); + writeLine(`\t\t\tv, err := dec.ReadValue()`); + writeLine(`\t\t\tif err != nil {`); + writeLine(`\t\t\t\treturn err`); + writeLine(`\t\t\t}`); + writeLine(`\t\t\trawRegisterOptions = v`); + writeLine(`\t\tdefault:`); + writeLine(`\t\t\tif err := dec.SkipValue(); err != nil {`); + writeLine(`\t\t\t\treturn err`); + writeLine(`\t\t\t}`); + writeLine(`\t\t}`); + writeLine(`\t}`); + writeLine(""); + writeLine(`\tif _, err := dec.ReadToken(); err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(""); + writeLine(`\tif missing != 0 {`); + writeLine(`\t\tvar missingProps []string`); + writeLine(`\t\tif missing&missingId != 0 {`); + writeLine(`\t\t\tmissingProps = append(missingProps, "id")`); + writeLine(`\t\t}`); + writeLine(`\t\tif missing&missingMethod != 0 {`); + writeLine(`\t\t\tmissingProps = append(missingProps, "method")`); + writeLine(`\t\t}`); + writeLine(`\t\treturn errMissing(missingProps)`); + writeLine(`\t}`); + writeLine(""); + writeLine(`\tif len(rawRegisterOptions) > 0 {`); + writeLine(`\t\ts.RegisterOptions = &RegisterOptions{}`); + writeLine(`\t\tswitch Method(method) {`); + for (const reg of registrationMethods) { + writeLine(`\t\tcase Method${reg.fieldName}:`); + writeLine(`\t\t\tvar v ${reg.optionsTypeName}`); + writeLine(`\t\t\tif err := json.Unmarshal(rawRegisterOptions, &v); err != nil {`); + writeLine(`\t\t\t\treturn err`); + writeLine(`\t\t\t}`); + writeLine(`\t\t\ts.RegisterOptions.${reg.fieldName} = &v`); + } + writeLine(`\t\tdefault:`); + writeLine(`\t\t\treturn fmt.Errorf("unknown registration method: %s", method)`); + writeLine(`\t\t}`); + writeLine(`\t} else {`); + writeLine(`\t\treturn fmt.Errorf("missing registerOptions for method: %s", method)`); + writeLine(`\t}`); + writeLine(""); + writeLine(`\treturn nil`); + writeLine(`}`); + writeLine(""); + } + + if (compareStructures.has(structure.name)) { + generateCompareMethod(structure); + } + } + + function generateCompareMethod(structure: Structure) { + const props = structure.properties ?? []; + writeLine(`func (s *${structure.name}) Compare(other *${structure.name}) int {`); + for (let i = 0; i < props.length; i++) { + const prop = props[i]; + const isLast = i === props.length - 1; + const fieldName = goFieldName(prop); + const expr = compareExpressionForProperty(structure.name, prop, fieldName); + if (isLast) { + writeLine(`\treturn ${expr}`); + } + else { + writeLine(`\tif c := ${expr}; c != 0 {`); + writeLine(`\t\treturn c`); + writeLine(`\t}`); + } + } + writeLine(`}`); + writeLine(""); + } + + function compareExpressionForProperty(structName: string, prop: Property, fieldName: string): string { + const resolved = resolveType(prop.type); + const isPointerField = (prop.optional || resolved.needsPointer) && !prop.omitzeroValue; + + if (prop.type.kind === "reference") { + const refName = prop.type.name; + if (compareStructures.has(refName)) { + if (isPointerField) { + return `s.${fieldName}.Compare(other.${fieldName})`; + } + return `s.${fieldName}.Compare(&other.${fieldName})`; + } + } + + if (prop.type.kind === "base") { + switch (prop.type.name) { + case "string": + case "URI": + case "DocumentUri": + case "integer": + case "uinteger": + case "decimal": + return `cmp.Compare(s.${fieldName}, other.${fieldName})`; + } + } + + throw new Error(`Cannot generate Compare for ${structName}.${fieldName}: unsupported field type ${JSON.stringify(prop.type)}. Add support in compareExpressionForProperty.`); + } + + // Helper function to detect if an enum is a bitflag enum + // Hardcoded list of bitflag enums + const bitflagEnums = new Set(["WatchKind"]); + + function isBitflagEnum(enumeration: any): boolean { + return bitflagEnums.has(enumeration.name); + } + + // Generate enumerations + writeLine("// Enumerations\n"); + + for (const enumeration of model.enumerations) { + write(formatDocumentation(enumeration.documentation)); + + let baseType; + switch (enumeration.type.name) { + case "string": + baseType = "string"; + break; + case "integer": + baseType = "int32"; + break; + case "uinteger": + baseType = "uint32"; + break; + default: + throw new Error(`Unsupported enum type: ${enumeration.type.name}`); + } + + writeLine(`type ${enumeration.name} ${baseType}`); + writeLine(""); + + // Get the pre-processed enum entries map that avoids duplicates + + const enumValues = enumeration.values.map(value => ({ + value: String(value.value), + numericValue: Number(value.value), + name: value.name, + identifier: `${enumeration.name}${titleCase(value.name)}`, + documentation: value.documentation, + deprecated: value.deprecated, + })); + + writeLine("const ("); + + // Process entries with unique identifiers + for (const entry of enumValues) { + write(formatDocumentation(entry.documentation)); + + let valueLiteral; + // Handle string values + if (enumeration.type.name === "string") { + valueLiteral = `"${entry.value.replace(/^"|"$/g, "")}"`; + } + else { + valueLiteral = entry.value; + } + + writeLine(`\t${entry.identifier} ${enumeration.name} = ${valueLiteral}`); + } + + writeLine(")"); + writeLine(""); + + // Generate String() method for non-string enums + if (enumeration.type.name !== "string") { + const isBitflag = isBitflagEnum(enumeration); + + if (isBitflag) { + // Generate bitflag-aware String() method using stringer-style efficiency + const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); + const names = sortedValues.map(v => v.name); + const values = sortedValues.map(v => v.numericValue); + + const nameConst = `_${enumeration.name}_name`; + const indexVar = `_${enumeration.name}_index`; + const combinedNames = names.join(""); + + writeLine(`const ${nameConst} = "${combinedNames}"`); + write(`var ${indexVar} = [...]uint16{0`); + let offset = 0; + for (const name of names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tif e == 0 {`); + writeLine(`\t\treturn "0"`); + writeLine(`\t}`); + writeLine(`\tvar parts []string`); + for (let i = 0; i < values.length; i++) { + writeLine(`\tif e&${values[i]} != 0 {`); + writeLine(`\t\tparts = append(parts, ${nameConst}[${indexVar}[${i}]:${indexVar}[${i + 1}]])`); + writeLine(`\t}`); + } + writeLine(`\tif len(parts) == 0 {`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`\treturn strings.Join(parts, "|")`); + writeLine(`}`); + writeLine(""); + } + else { + // Generate regular String() method using stringer-style approach + // Split values into runs of contiguous values + const sortedValues = [...enumValues].sort((a, b) => a.numericValue - b.numericValue); + + // Split into runs + const runs: Array<{ names: string[]; values: number[]; }> = []; + let currentRun = { names: [sortedValues[0].name], values: [sortedValues[0].numericValue] }; + + for (let i = 1; i < sortedValues.length; i++) { + if (sortedValues[i].numericValue === sortedValues[i - 1].numericValue + 1) { + currentRun.names.push(sortedValues[i].name); + currentRun.values.push(sortedValues[i].numericValue); + } + else { + runs.push(currentRun); + currentRun = { names: [sortedValues[i].name], values: [sortedValues[i].numericValue] }; + } + } + runs.push(currentRun); + + const nameConst = `_${enumeration.name}_name`; + const indexVar = `_${enumeration.name}_index`; + + if (runs.length === 1) { + // Single contiguous run - simple case + const combinedNames = runs[0].names.join(""); + writeLine(`const ${nameConst} = "${combinedNames}"`); + write(`var ${indexVar} = [...]uint16{0`); + let offset = 0; + for (const name of runs[0].names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + writeLine(""); + + const minVal = runs[0].values[0]; + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\ti := int(e) - ${minVal}`); + // For unsigned types, i can still be negative if e < minVal (due to underflow in conversion) + // So we always need to check both bounds + writeLine(`\tif i < 0 || i >= len(${indexVar})-1 {`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`\treturn ${nameConst}[${indexVar}[i]:${indexVar}[i+1]]`); + writeLine(`}`); + writeLine(""); + } + else if (runs.length <= 10) { + // Multiple runs - use switch statement + let allNames = ""; + const runInfo: Array<{ startOffset: number; endOffset: number; minVal: number; maxVal: number; }> = []; + + for (const run of runs) { + const startOffset = allNames.length; + allNames += run.names.join(""); + const endOffset = allNames.length; + runInfo.push({ + startOffset, + endOffset, + minVal: run.values[0], + maxVal: run.values[run.values.length - 1], + }); + } + + writeLine(`const ${nameConst} = "${allNames}"`); + writeLine(""); + + // Generate index variables for each run + for (let i = 0; i < runs.length; i++) { + write(`var ${indexVar}_${i} = [...]uint16{0`); + let offset = 0; + for (const name of runs[i].names) { + offset += name.length; + write(`, ${offset}`); + } + writeLine(`}`); + } + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tswitch {`); + + for (let i = 0; i < runs.length; i++) { + const run = runs[i]; + const info = runInfo[i]; + + if (run.values.length === 1) { + writeLine(`\tcase e == ${run.values[0]}:`); + writeLine(`\t\treturn ${nameConst}[${info.startOffset}:${info.endOffset}]`); + } + else { + if (info.minVal === 0 && baseType.startsWith("uint")) { + writeLine(`\tcase e <= ${info.maxVal}:`); + } + else if (info.minVal === 0) { + writeLine(`\tcase 0 <= e && e <= ${info.maxVal}:`); + } + else { + writeLine(`\tcase ${info.minVal} <= e && e <= ${info.maxVal}:`); + } + writeLine(`\t\ti := int(e) - ${info.minVal}`); + writeLine(`\t\treturn ${nameConst}[${info.startOffset}+${indexVar}_${i}[i]:${info.startOffset}+${indexVar}_${i}[i+1]]`); + } + } + + writeLine(`\tdefault:`); + writeLine(`\t\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`\t}`); + writeLine(`}`); + writeLine(""); + } + else { + // Too many runs - use a map + let allNames = ""; + const valueMap: Array<{ value: number; startOffset: number; endOffset: number; }> = []; + + for (const run of runs) { + for (let i = 0; i < run.names.length; i++) { + const startOffset = allNames.length; + allNames += run.names[i]; + const endOffset = allNames.length; + valueMap.push({ value: run.values[i], startOffset, endOffset }); + } + } + + writeLine(`const ${nameConst} = "${allNames}"`); + writeLine(""); + writeLine(`var ${enumeration.name}_map = map[${enumeration.name}]string{`); + for (const entry of valueMap) { + writeLine(`\t${entry.value}: ${nameConst}[${entry.startOffset}:${entry.endOffset}],`); + } + writeLine(`}`); + writeLine(""); + + writeLine(`func (e ${enumeration.name}) String() string {`); + writeLine(`\tif str, ok := ${enumeration.name}_map[e]; ok {`); + writeLine(`\t\treturn str`); + writeLine(`\t}`); + writeLine(`\treturn fmt.Sprintf("${enumeration.name}(%d)", e)`); + writeLine(`}`); + writeLine(""); + } + } + } + + // Generate Error() method for ErrorCode to implement the error interface + if (enumeration.name === "ErrorCode") { + writeLine(`func (e ${enumeration.name}) Error() string {`); + writeLine(`\treturn e.String()`); + writeLine(`}`); + writeLine(""); + } + } + + const requestsAndNotifications: (Request | Notification)[] = [...model.requests, ...model.notifications]; + + writeLine("// Methods"); + writeLine("const ("); + for (const request of requestsAndNotifications) { + write(formatDocumentation(request.documentation)); + + const methodName = methodNameIdentifier(request.method); + + writeLine(`\tMethod${methodName} Method = "${request.method}"`); + } + // Emit constants for registration-only methods (not also a request/notification) + for (const reg of registrationMethods) { + if (reg.isRegistrationOnly) { + writeLine(`\t// Registration-only method for ${reg.registrationMethod}.`); + writeLine(`\tMethod${reg.fieldName} Method = "${reg.registrationMethod}"`); + } + } + writeLine(")"); + writeLine(""); + + // Generate request response types + writeLine("// Request response types"); + writeLine(""); + + for (const request of requestsAndNotifications) { + const methodName = methodNameIdentifier(request.method); + + let responseTypeName: string | undefined; + + if ("result" in request) { + if (request.typeName && request.typeName.endsWith("Request")) { + responseTypeName = request.typeName.replace(/Request$/, "Response"); + } + else { + responseTypeName = `${methodName}Response`; + } + + writeLine(`// Response type for \`${request.method}\``); + + // Special case for response types that are explicitly base type "null" + if (request.result.kind === "base" && request.result.name === "null") { + writeLine(`type ${responseTypeName} = Null`); + } + else { + const resultType = resolveType(request.result); + const goType = resultType.needsPointer ? `*${resultType.name}` : resultType.name; + writeLine(`type ${responseTypeName} = ${goType}`); + } + writeLine(""); + } + + if (Array.isArray(request.params)) { + throw new Error("Unexpected request params for " + methodName + ": " + JSON.stringify(request.params)); + } + + const paramType = request.params ? resolveType(request.params) : undefined; + const paramGoType = paramType ? (paramType.needsPointer ? `*${paramType.name}` : paramType.name) : "NoParams"; + + writeLine(`// Type mapping info for \`${request.method}\``); + if (responseTypeName) { + writeLine(`var ${methodName}Info = RequestInfo[${paramGoType}, ${responseTypeName}]{Method: Method${methodName}}`); + } + else { + writeLine(`var ${methodName}Info = NotificationInfo[${paramGoType}]{Method: Method${methodName}}`); + } + + writeLine(""); + } + + // Generate type aliases + writeLine("// Type aliases\n"); + for (const aliasName of customTypeAliases) { + const resolvedType = resolveType(aliasName.type); + const goType = resolvedType.needsPointer ? `*${resolvedType.name}` : resolvedType.name; + writeLine(`type ${aliasName.name} = ${goType}`); + writeLine(""); + } + + // Generate union types + writeLine("// Union types\n"); + + for (const [name, members] of typeInfo.unionTypes.entries()) { + writeLine(`type ${name} struct {`); + const uniqueTypeFields = new Map(); // Maps type name -> field name + const uniqueTypeToOriginal = new Map(); // Maps type name -> original meta model Type + + let hasLocations = false; + for (const member of members) { + const type = resolveType(member.type); + const memberType = type.name; + + // If this type name already exists in our map, skip it + if (!uniqueTypeFields.has(memberType)) { + const fieldName = titleCase(member.name); + uniqueTypeFields.set(memberType, fieldName); + uniqueTypeToOriginal.set(memberType, member.type); + writeLine(`\t${fieldName} *${memberType}`); + if (fieldName === "Locations" && memberType === "[]Location") { + hasLocations = true; + } + } + } + + writeLine(`}`); + writeLine(""); + + // Get the field names and types for marshal/unmarshal methods + const fieldEntries = Array.from(uniqueTypeFields.entries()).map(([typeName, fieldName]) => ({ + fieldName, + typeName, + originalType: uniqueTypeToOriginal.get(typeName)!, + })); + + // Marshal method + writeLine(`var _ json.MarshalerTo = (*${name})(nil)`); + writeLine(""); + const unionContainedNull = members.some(member => member.containedNull); + writeLine(`func (o *${name}) MarshalJSONTo(enc *json.Encoder) error {`); + writeLine(`\treturn marshalUnion(o, enc, "${name}", ${unionContainedNull})`); + writeLine(`}`); + writeLine(""); + + // Unmarshal method + writeLine(`var _ json.UnmarshalerFrom = (*${name})(nil)`); + writeLine(""); + + writeLine(`func (o *${name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); + writeLine(`\t*o = ${name}{}`); + writeLine(""); + + // Group field entries by their expected JSON token kind for optimized dispatch. + const kindMap = new Map(); + const unknownKindEntries: typeof fieldEntries = []; + for (const entry of fieldEntries) { + const kind = jsonKindForType(entry.originalType); + if (!kind) { + unknownKindEntries.push(entry); + } + else { + if (!kindMap.has(kind)) kindMap.set(kind, []); + kindMap.get(kind)!.push(entry); + } + } + + // Sort ambiguous variants (same JSON kind) by number of required fields + // descending, so more specific variants are tried first. This prevents + // a less specific variant from greedily matching inputs intended for + // a more specific one. + function countRequiredFields(entry: typeof fieldEntries[0]): number { + if (entry.originalType.kind !== "reference") return 0; + const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); + if (!structure) return 0; + return structure.properties.filter(p => !p.optional && !p.omitzeroValue).length; + } + + for (const [, entries] of kindMap) { + if (entries.length > 1) { + entries.sort((a, b) => countRequiredFields(b) - countRequiredFields(a)); + } + } + + // Also sort the flat fieldEntries to match (for the fallback path) + // We need to sort only within groups of the same kind. + { + const sorted: typeof fieldEntries = []; + const seen = new Set(); + for (const [, entries] of kindMap) { + for (const entry of entries) { + sorted.push(entry); + seen.add(entry.fieldName); + } + } + for (const entry of unknownKindEntries) { + if (!seen.has(entry.fieldName)) { + sorted.push(entry); + } + } + // Replace fieldEntries contents with sorted order + fieldEntries.length = 0; + fieldEntries.push(...sorted); + } + + // Validate that ambiguous union variants (same JSON kind) don't have + // order-dependent overlap. Two struct variants overlap if one's required + // fields are a subset of the other's, meaning any valid input for the + // superset also successfully parses as the subset (since unknown properties + // are ignored). This would make the unmarshal result depend on try order. + // + // Exception: variants discriminated by literal field values (e.g., a "kind" + // field with different string literal types) are safe because the literal + // unmarshaler rejects mismatched values. + for (const [kind, entries] of kindMap) { + if (entries.length <= 1) continue; + + // Get required fields with their types for each variant + const variantInfo = entries.map(entry => { + if (entry.originalType.kind !== "reference") return null; + const structure = model.structures.find(s => s.name === (entry.originalType as ReferenceType).name); + if (!structure) return null; + const requiredFields = new Map(); + for (const p of structure.properties) { + if (!p.optional && !p.omitzeroValue) { + requiredFields.set(p.name, p.type); + } + } + return { entry, requiredFields }; + }).filter((v): v is NonNullable => v !== null); + + // Check if two variants are discriminated by literal field values. + // Returns true if they share a field where both sides have different + // literal types (stringLiteral, integerLiteral, booleanLiteral). + function isDiscriminatedByLiteral( + a: Map, + b: Map, + ): boolean { + for (const [fieldName, aType] of a) { + const bType = b.get(fieldName); + if (!bType) continue; + const aLiteral = aType.kind === "stringLiteral" || aType.kind === "integerLiteral" || aType.kind === "booleanLiteral"; + const bLiteral = bType.kind === "stringLiteral" || bType.kind === "integerLiteral" || bType.kind === "booleanLiteral"; + if (aLiteral && bLiteral) { + // Both are literals for the same field — check if values differ + if (aType.kind === bType.kind && (aType as any).value !== (bType as any).value) { + return true; + } + // Different literal kinds on same field also discriminates + if (aType.kind !== bType.kind) { + return true; + } + } + } + return false; + } + + // Check each pair for subset relationships + for (let i = 0; i < variantInfo.length; i++) { + for (let j = 0; j < variantInfo.length; j++) { + if (i === j) continue; + const a = variantInfo[i]; + const b = variantInfo[j]; + const aNames = new Set(a.requiredFields.keys()); + const bNames = new Set(b.requiredFields.keys()); + + const aSubsetOfB = [...aNames].every(f => bNames.has(f)); + if (!aSubsetOfB) continue; + + // Skip if discriminated by literal values + if (isDiscriminatedByLiteral(a.requiredFields, b.requiredFields)) continue; + + if (aNames.size < bNames.size) { + // a is a strict subset of b + const aIdx = entries.indexOf(a.entry); + const bIdx = entries.indexOf(b.entry); + if (aIdx < bIdx) { + console.warn( + `Warning: In union ${name} (${kind} variants), ` + + `${a.entry.fieldName} (required: [${[...aNames]}]) is tried before ` + + `${b.entry.fieldName} (required: [${[...bNames]}]), but ` + + `${a.entry.fieldName}'s required fields are a strict subset — ` + + `it will greedily match inputs intended for ${b.entry.fieldName}. ` + + `Reorder so the more specific variant is tried first.`, + ); + } + } + else if (aNames.size === bNames.size && i < j) { + // Identical required fields — truly ambiguous + console.warn( + `Warning: In union ${name} (${kind} variants), ` + + `${a.entry.fieldName} and ${b.entry.fieldName} have identical ` + + `required fields [${[...aNames]}] — they are structurally ` + + `indistinguishable and the unmarshal result is order-dependent.`, + ); + } + } + } + } + + // Determine if we can use PeekKind-based dispatch: + // - Every entry must have a known kind (no `any` etc.) + // - There must be at least 2 distinct cases (kind groups + null) for a switch to be worthwhile + const hasUnknownKinds = unknownKindEntries.length > 0; + const distinctKinds = kindMap.size + (unionContainedNull ? 1 : 0); + const canDispatch = !hasUnknownKinds && distinctKinds >= 2; + + // Check if all kind groups are unambiguous (exactly 1 entry each). + // When unambiguous, we can UnmarshalDecode directly without buffering. + const allUnambiguous = canDispatch && Array.from(kindMap.values()).every(entries => entries.length === 1); + + let fallbackExhaustive = false; + const hasBooleanKind = kindMap.has("boolean"); + if (canDispatch && allUnambiguous) { + // Best case: PeekKind + UnmarshalDecode directly, no ReadValue buffer needed. + if (hasBooleanKind) { + writeLine(`\tswitch kind := dec.PeekKind(); kind {`); + } + else { + writeLine(`\tswitch dec.PeekKind() {`); + } + + if (unionContainedNull) { + writeLine(`\tcase 'n':`); + writeLine(`\t\t_, err := dec.ReadToken()`); + writeLine(`\t\treturn err`); + } + + for (const [kind, entries] of kindMap) { + writeLine(`\t${goKindCasesForJsonKind(kind)}`); + const entry = entries[0]; + if (kind === "boolean") { + writeLine(`\t\to.${entry.fieldName} = new(kind == 't')`); + writeLine(`\t\t_, err := dec.ReadToken()`); + writeLine(`\t\treturn err`); + } + else { + writeLine(`\t\to.${entry.fieldName} = new(${entry.typeName})`); + writeLine(`\t\treturn json.UnmarshalDecode(dec, o.${entry.fieldName})`); + } + } + + writeLine(`\tdefault:`); + writeLine(`\t\treturn errInvalidKind("${name}", dec.PeekKind())`); + writeLine(`\t}`); + } + else if (canDispatch) { + // Mixed case: some kind groups have multiple entries. + // Use PeekKind to dispatch, then ReadValue + try-each within ambiguous groups, + // or UnmarshalDecode directly for unambiguous groups. + if (hasBooleanKind) { + writeLine(`\tswitch kind := dec.PeekKind(); kind {`); + } + else { + writeLine(`\tswitch dec.PeekKind() {`); + } + + if (unionContainedNull) { + writeLine(`\tcase 'n':`); + writeLine(`\t\t_, err := dec.ReadToken()`); + writeLine(`\t\treturn err`); + } + + for (const [kind, entries] of kindMap) { + writeLine(`\t${goKindCasesForJsonKind(kind)}`); + if (entries.length === 1) { + // Unambiguous: decode directly + const entry = entries[0]; + if (kind === "boolean") { + writeLine(`\t\to.${entry.fieldName} = new(kind == 't')`); + writeLine(`\t\t_, err := dec.ReadToken()`); + writeLine(`\t\treturn err`); + } + else { + writeLine(`\t\to.${entry.fieldName} = new(${entry.typeName})`); + writeLine(`\t\treturn json.UnmarshalDecode(dec, o.${entry.fieldName})`); + } + } + else { + let exhaustive = false; + const disc = findDiscriminatorField(entries); + if (disc && canStreamDiscriminator(disc)) { + generateStreamingDiscriminatorDispatch(name, disc, "\t\t"); + exhaustive = true; + } + else { + // Ambiguous non-discriminated objects need the complete + // value for presence checks or speculative decoding. + writeLine(`\t\tdata, err := dec.ReadValue()`); + writeLine(`\t\tif err != nil {`); + writeLine(`\t\t\treturn err`); + writeLine(`\t\t}`); + } + if (disc && !canStreamDiscriminator(disc)) { + exhaustive = generateDiscriminatorDispatch(disc, "\t\t"); + } + else if (!disc) { + const pres = findPresenceDiscriminator(entries); + if (pres) { + exhaustive = generatePresenceDispatch(pres, "\t\t"); + } + else { + for (const entry of entries) { + writeLine(`\t\tvar v${entry.fieldName} ${entry.typeName}`); + writeLine(`\t\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); + writeLine(`\t\t\to.${entry.fieldName} = &v${entry.fieldName}`); + writeLine(`\t\t\treturn nil`); + writeLine(`\t\t}`); + } + } + } + if (!exhaustive) { + writeLine(`\t\treturn errInvalidValue("${name}", data)`); + } + } + } + + writeLine(`\tdefault:`); + writeLine(`\t\treturn errInvalidKind("${name}", dec.PeekKind())`); + writeLine(`\t}`); + } + else { + // Fallback for unknown kinds (e.g. `any`). Discriminated object + // unions can still stream; other unions use ReadValue + try-each. + let exhaustive = false; + const disc = findDiscriminatorField(fieldEntries); + if (disc && canStreamDiscriminator(disc)) { + generateStreamingDiscriminatorDispatch(name, disc, "\t"); + exhaustive = true; + } + else { + writeLine("\tdata, err := dec.ReadValue()"); + writeLine("\tif err != nil {"); + writeLine("\t\treturn err"); + writeLine("\t}"); + if (unionContainedNull) { + writeLine(`\tif string(data) == "null" {`); + writeLine(`\t\treturn nil`); + writeLine(`\t}`); + writeLine(""); + } + } + if (disc && !canStreamDiscriminator(disc)) { + exhaustive = generateDiscriminatorDispatch(disc, "\t"); + } + else if (!disc) { + const pres = findPresenceDiscriminator(fieldEntries); + if (pres) { + exhaustive = generatePresenceDispatch(pres, "\t"); + } + else { + for (const entry of fieldEntries) { + writeLine(`\tvar v${entry.fieldName} ${entry.typeName}`); + writeLine(`\tif err := json.Unmarshal(data, &v${entry.fieldName}); err == nil {`); + writeLine(`\t\to.${entry.fieldName} = &v${entry.fieldName}`); + writeLine(`\t\treturn nil`); + writeLine(`\t}`); + } + } + } + fallbackExhaustive = exhaustive; + } + + if (canDispatch) { + // Dispatch paths have an exhaustive switch with default, nothing after the switch. + } + else if (!fallbackExhaustive) { + // Fallback paths: the final error references `data` which is in scope. + writeLine(`\treturn errInvalidValue("${name}", data)`); + } + writeLine(`}`); + writeLine(""); + + // Generate GetLocations method + if (hasLocations) { + writeLine(`func (o ${name}) GetLocations() *[]Location {`); + writeLine(`\treturn o.Locations`); + writeLine(`}`); + writeLine(""); + } + } + + // Generate literal types + writeLine("// Literal types\n"); + + for (const [value, name] of typeInfo.literalTypes.entries()) { + const jsonValue = JSON.stringify(value); + + writeLine(`// ${name} is a literal type for ${jsonValue}`); + writeLine(`type ${name} struct{}`); + writeLine(""); + + writeLine(`var _ json.MarshalerTo = ${name}{}`); + writeLine(""); + + writeLine(`func (o ${name}) MarshalJSONTo(enc *json.Encoder) error {`); + writeLine(`\treturn enc.WriteValue(json.Value(\`${jsonValue}\`))`); + writeLine(`}`); + writeLine(""); + + writeLine(`var _ json.UnmarshalerFrom = &${name}{}`); + writeLine(""); + + writeLine(`func (o *${name}) UnmarshalJSONFrom(dec *json.Decoder) error {`); + writeLine(`\tv, err := dec.ReadValue();`); + writeLine(`\tif err != nil {`); + writeLine(`\t\treturn err`); + writeLine(`\t}`); + writeLine(`\tif string(v) != \`${jsonValue}\` {`); + writeLine(`\t\treturn errLiteralMismatch("${name}", \`${jsonValue}\`, v)`); + writeLine(`\t}`); + writeLine(`\treturn nil`); + writeLine(`}`); + writeLine(""); + } + + // Generate resolved capabilities + const clientCapsStructure = model.structures.find(s => s.name === "ClientCapabilities"); + if (clientCapsStructure) { + writeLine("// Helper function for dereferencing pointers with zero value fallback"); + writeLine("func derefOr[T any](v *T) T {"); + writeLine("\tif v != nil {"); + writeLine("\t\treturn *v"); + writeLine("\t}"); + writeLine("\tvar zero T"); + writeLine("\treturn zero"); + writeLine("}"); + writeLine(""); + + // Collect all dependent structures and generate their resolved types + const deps = collectStructureDependencies(clientCapsStructure); + const uniqueDeps = Array.from(new Map(deps.map(d => [d.name, d])).values()); + + for (const dep of uniqueDeps) { + const depLines = generateResolvedTypeAndHelper(dep, false); + for (const line of depLines) { + writeLine(line); + } + } + + // Generate the main ResolvedClientCapabilities type and function + writeLine("// ResolvedClientCapabilities is a version of ClientCapabilities where all nested"); + writeLine("// fields are values (not pointers), making it easier to access deeply nested capabilities."); + writeLine("// Use (*ClientCapabilities).Resolve() to convert from ClientCapabilities."); + if (clientCapsStructure.documentation) { + writeLine("//"); + const typeDoc = formatDocumentation(clientCapsStructure.documentation); + for (const line of typeDoc.split("\n").filter(l => l)) { + writeLine(line); + } + } + const mainLines = generateResolvedTypeAndHelper(clientCapsStructure, true); + for (const line of mainLines) { + writeLine(line); + } + } + + return parts.join(""); +} + +function hasSomeProp(structure: Structure, propName: string, propTypeName: string) { + return structure.properties?.some(p => + !p.optional && + p.name === propName && + p.type.kind === "reference" && + p.type.name === propTypeName + ); +} + +function hasTextDocumentURI(structure: Structure) { + return hasSomeProp(structure, "textDocument", "TextDocumentIdentifier") || + hasSomeProp(structure, "_vs_textDocument", "TextDocumentIdentifier"); +} + +function hasTextDocumentPosition(structure: Structure) { + return hasSomeProp(structure, "position", "Position") || + hasSomeProp(structure, "_vs_position", "Position"); +} + +function getLocationUriProperty(structure: Structure) { + const prop = structure.properties?.find(p => + !p.optional && + titleCase(p.name).endsWith("Uri") && + p.type.kind === "base" && + p.type.name === "DocumentUri" + ); + if ( + prop && + structure.properties.some(p => + !p.optional && + titleCase(p.name) === titleCase(prop.name).replace(/Uri$/, "Range") && + p.type.kind === "reference" && + p.type.name === "Range" + ) + ) { + return titleCase(prop.name); + } +} + +/** + * Main function + */ +export default async function generate() { + collectTypeDefinitions(); + const generatedCode = generateCode(); + fs.writeFileSync(out, generatedCode); + + await x("dprint", ["fmt", out], { + throwOnError: true, + nodeOptions: { cwd: repoRoot, stdio: "inherit" }, + }); + + console.log(`Successfully generated ${out}`); +} + +if (process.argv[1] === __filename) { + await generate(); +} diff --git a/tools/scripts/lsp/generateTypeScript.mts b/tools/scripts/lsp/generateTypeScript.mts index 9edae682035ea..551c15f6b6aca 100644 --- a/tools/scripts/lsp/generateTypeScript.mts +++ b/tools/scripts/lsp/generateTypeScript.mts @@ -1,31 +1,31 @@ -import fs from "node:fs"; -import path from "node:path"; -import { x } from "tinyexec"; -import ts from "typescript"; -import { getTypeScriptModel } from "./generate.mts"; -import { generateTypeScript } from "./typeScript.mts"; - -const root = path.resolve(import.meta.dirname, "../../.."); -const output = path.join(root, "packages/typescript/src/vscode/protocol.generated.ts"); -const registry = path.join(root, "packages/vscode-typescript/src/lspMiddleware.ts"); - -export function getMiddlewareMethods(source: string): string[] { - const file = ts.createSourceFile(registry, source, ts.ScriptTarget.Latest, true); - const declarations = file.statements.filter(ts.isVariableStatement).flatMap(statement => statement.declarationList.declarations); - const declaration = declarations.find(declaration => ts.isIdentifier(declaration.name) && declaration.name.text === "supportedMethods"); - if (!declaration?.initializer || !ts.isObjectLiteralExpression(declaration.initializer)) throw new Error("Middleware supportedMethods must be an object literal."); - return declaration.initializer.properties.map(property => { - if (!ts.isPropertyAssignment(property) || !ts.isStringLiteral(property.name) || property.initializer.kind !== ts.SyntaxKind.TrueKeyword) { - throw new Error("Middleware methods must be string literal properties with value true."); - } - return property.name.text; - }); -} - -export default async function generate() { - const content = generateTypeScript(getTypeScriptModel(), getMiddlewareMethods(fs.readFileSync(registry, "utf8"))); - fs.writeFileSync(output, content); - await x("dprint", ["fmt", output], { throwOnError: true, nodeOptions: { cwd: root, stdio: "inherit" } }); -} - -if (process.argv[1] === import.meta.filename) await generate(); +import fs from "node:fs"; +import path from "node:path"; +import { x } from "tinyexec"; +import ts from "typescript"; +import { getTypeScriptModel } from "./generate.mts"; +import { generateTypeScript } from "./typeScript.mts"; + +const root = path.resolve(import.meta.dirname, "../../.."); +const output = path.join(root, "packages/typescript/src/vscode/protocol.generated.ts"); +const registry = path.join(root, "packages/vscode-typescript/src/lspMiddleware.ts"); + +export function getMiddlewareMethods(source: string): string[] { + const file = ts.createSourceFile(registry, source, ts.ScriptTarget.Latest, true); + const declarations = file.statements.filter(ts.isVariableStatement).flatMap(statement => statement.declarationList.declarations); + const declaration = declarations.find(declaration => ts.isIdentifier(declaration.name) && declaration.name.text === "supportedMethods"); + if (!declaration?.initializer || !ts.isObjectLiteralExpression(declaration.initializer)) throw new Error("Middleware supportedMethods must be an object literal."); + return declaration.initializer.properties.map(property => { + if (!ts.isPropertyAssignment(property) || !ts.isStringLiteral(property.name) || property.initializer.kind !== ts.SyntaxKind.TrueKeyword) { + throw new Error("Middleware methods must be string literal properties with value true."); + } + return property.name.text; + }); +} + +export default async function generate() { + const content = generateTypeScript(getTypeScriptModel(), getMiddlewareMethods(fs.readFileSync(registry, "utf8"))); + fs.writeFileSync(output, content); + await x("dprint", ["fmt", output], { throwOnError: true, nodeOptions: { cwd: root, stdio: "inherit" } }); +} + +if (process.argv[1] === import.meta.filename) await generate(); diff --git a/tools/scripts/lsp/typeScript.mts b/tools/scripts/lsp/typeScript.mts index a67cd9c2da9a3..4d0fcf0d2cedb 100644 --- a/tools/scripts/lsp/typeScript.mts +++ b/tools/scripts/lsp/typeScript.mts @@ -1,128 +1,128 @@ -import type { - Enumeration, - MetaModel, - Property, - Structure, - Type, - TypeAlias, -} from "./metaModelSchema.mts"; - -/** Generates only the types reachable from the selected client-to-server requests. */ -export function generateTypeScript(model: MetaModel, methods: readonly string[]): string { - const definitions = new Map([ - ...model.structures.map(value => [value.name, value] as const), - ...model.enumerations.map(value => [value.name, value] as const), - ...model.typeAliases.map(value => [value.name, value] as const), - ]); - const declarations = new Map(); - const visited = new Set(); - const baseTypes = { URI: "string", DocumentUri: "string", integer: "number", uinteger: "number", decimal: "number", RegExp: "string", string: "string", boolean: "boolean", null: "null" }; - - function documentation(text: string | undefined): string { - if (!text) return ""; - return `/**\n${text.replaceAll("*/", "* /").split("\n").map(line => ` * ${line}`).join("\n")}\n */\n`; - } - - function properties(values: readonly Property[]): string { - return values.map(property => { - const optional = property.optional || property.omitzeroValue; - return `${documentation(property.documentation)}${JSON.stringify(property.name)}${optional ? "?" : ""}: ${type(property.type)}${optional ? " | undefined" : ""};`; - }).join("\n"); - } - - function structureProperties(structure: Structure, ancestors = new Set()): Property[] { - if (ancestors.has(structure.name)) throw new Error(`Cyclic inheritance in ${structure.name}`); - const inherited = new Map(); - const nextAncestors = new Set([...ancestors, structure.name]); - for (const parent of [...structure.extends ?? [], ...structure.mixins ?? []]) { - if (parent.kind !== "reference") throw new Error(`Unsupported inheritance type in ${structure.name}: ${parent.kind}`); - const definition = definitions.get(parent.name); - if (!definition || !("properties" in definition)) throw new Error(`Unknown parent structure ${parent.name}`); - for (const property of structureProperties(definition, nextAncestors)) inherited.set(property.name, property); - } - for (const property of structure.properties) inherited.set(property.name, property); - return [...inherited.values()]; - } - - function reference(name: string): string { - if (visited.has(name)) return name; - visited.add(name); - const definition = definitions.get(name); - if (!definition) throw new Error(`Unknown LSP type ${name}`); - let declaration: string; - if ("properties" in definition) { - // The metamodel omits FormattingOptions' open extension properties. - const index = name === "FormattingOptions" ? "\n[key: string]: boolean | number | string | undefined;" : ""; - declaration = `export interface ${name} {\n${properties(structureProperties(definition))}${index}\n}`; - } - else if ("values" in definition) { - const values = definition.values.map(value => JSON.stringify(value.value)); - if (definition.supportsCustomValues) values.push(baseTypes[definition.type.name]); - declaration = `export type ${name} = ${values.join(" | ") || "never"};`; - } - else { - declaration = `export type ${name} = ${type(definition.type)};`; - } - declarations.set(name, documentation(definition.documentation) + declaration); - return name; - } - - function type(value: Type, minimumPrecedence = 0): string { - const precedence = value.kind === "or" ? 1 : value.kind === "and" ? 2 : value.kind === "array" ? 3 : 4; - const text = typeText(value); - return precedence < minimumPrecedence ? `(${text})` : text; - } - - function typeText(value: Type): string { - switch (value.kind) { - case "base": - if (value.name === "DocumentUri" || value.name === "URI") { - declarations.set(value.name, `export type ${value.name} = string;`); - return value.name; - } - return baseTypes[value.name]; - case "reference": - return reference(value.name); - case "array": - return `${type(value.element, 3)}[]`; - case "map": - return `{ [key: ${type(value.key)}]: ${type(value.value)}; }`; - case "and": - return value.items.map(item => type(item, 2)).join(" & "); - case "or": - return [...new Set(value.items.map(item => type(item, 1)))].join(" | "); - case "tuple": - return `[${value.items.map(item => type(item)).join(", ")}]`; - case "literal": - return `{\n${properties(value.value.properties)}\n}`; - case "stringLiteral": - case "integerLiteral": - case "booleanLiteral": - return JSON.stringify(value.value); - default: { - const exhaustive: never = value; - throw new Error(`Unsupported LSP type ${JSON.stringify(exhaustive)}`); - } - } - } - - const requests = new Map(model.requests.map(request => [request.method, request])); - const selected = new Set(); - const entries = methods.map(method => { - if (selected.has(method)) throw new Error(`Duplicate middleware method ${method}`); - selected.add(method); - const request = requests.get(method); - if (!request || request.messageDirection !== "clientToServer") throw new Error(`Not a client-to-server request: ${method}`); - const params = !request.params ? "undefined" : Array.isArray(request.params) ? `[${request.params.map(item => type(item)).join(", ")}]` : type(request.params); - return `${JSON.stringify(method)}: { params: ${params}; result: ${type(request.result)}; };`; - }); - return [ - "// Code generated by tools/scripts/lsp/generateTypeScript.mts. DO NOT EDIT.", - "// LSP metamodel copyright (c) Microsoft Corporation. Licensed under the MIT License.", - "", - ...[...declarations].sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([, declaration]) => declaration + "\n"), - "/** Language-feature requests supported by the extension middleware API. */", - `export interface LspMiddlewareRequests {\n${entries.join("\n")}\n}`, - "", - ].join("\n"); -} +import type { + Enumeration, + MetaModel, + Property, + Structure, + Type, + TypeAlias, +} from "./metaModelSchema.mts"; + +/** Generates only the types reachable from the selected client-to-server requests. */ +export function generateTypeScript(model: MetaModel, methods: readonly string[]): string { + const definitions = new Map([ + ...model.structures.map(value => [value.name, value] as const), + ...model.enumerations.map(value => [value.name, value] as const), + ...model.typeAliases.map(value => [value.name, value] as const), + ]); + const declarations = new Map(); + const visited = new Set(); + const baseTypes = { URI: "string", DocumentUri: "string", integer: "number", uinteger: "number", decimal: "number", RegExp: "string", string: "string", boolean: "boolean", null: "null" }; + + function documentation(text: string | undefined): string { + if (!text) return ""; + return `/**\n${text.replaceAll("*/", "* /").split("\n").map(line => ` * ${line}`).join("\n")}\n */\n`; + } + + function properties(values: readonly Property[]): string { + return values.map(property => { + const optional = property.optional || property.omitzeroValue; + return `${documentation(property.documentation)}${JSON.stringify(property.name)}${optional ? "?" : ""}: ${type(property.type)}${optional ? " | undefined" : ""};`; + }).join("\n"); + } + + function structureProperties(structure: Structure, ancestors = new Set()): Property[] { + if (ancestors.has(structure.name)) throw new Error(`Cyclic inheritance in ${structure.name}`); + const inherited = new Map(); + const nextAncestors = new Set([...ancestors, structure.name]); + for (const parent of [...structure.extends ?? [], ...structure.mixins ?? []]) { + if (parent.kind !== "reference") throw new Error(`Unsupported inheritance type in ${structure.name}: ${parent.kind}`); + const definition = definitions.get(parent.name); + if (!definition || !("properties" in definition)) throw new Error(`Unknown parent structure ${parent.name}`); + for (const property of structureProperties(definition, nextAncestors)) inherited.set(property.name, property); + } + for (const property of structure.properties) inherited.set(property.name, property); + return [...inherited.values()]; + } + + function reference(name: string): string { + if (visited.has(name)) return name; + visited.add(name); + const definition = definitions.get(name); + if (!definition) throw new Error(`Unknown LSP type ${name}`); + let declaration: string; + if ("properties" in definition) { + // The metamodel omits FormattingOptions' open extension properties. + const index = name === "FormattingOptions" ? "\n[key: string]: boolean | number | string | undefined;" : ""; + declaration = `export interface ${name} {\n${properties(structureProperties(definition))}${index}\n}`; + } + else if ("values" in definition) { + const values = definition.values.map(value => JSON.stringify(value.value)); + if (definition.supportsCustomValues) values.push(baseTypes[definition.type.name]); + declaration = `export type ${name} = ${values.join(" | ") || "never"};`; + } + else { + declaration = `export type ${name} = ${type(definition.type)};`; + } + declarations.set(name, documentation(definition.documentation) + declaration); + return name; + } + + function type(value: Type, minimumPrecedence = 0): string { + const precedence = value.kind === "or" ? 1 : value.kind === "and" ? 2 : value.kind === "array" ? 3 : 4; + const text = typeText(value); + return precedence < minimumPrecedence ? `(${text})` : text; + } + + function typeText(value: Type): string { + switch (value.kind) { + case "base": + if (value.name === "DocumentUri" || value.name === "URI") { + declarations.set(value.name, `export type ${value.name} = string;`); + return value.name; + } + return baseTypes[value.name]; + case "reference": + return reference(value.name); + case "array": + return `${type(value.element, 3)}[]`; + case "map": + return `{ [key: ${type(value.key)}]: ${type(value.value)}; }`; + case "and": + return value.items.map(item => type(item, 2)).join(" & "); + case "or": + return [...new Set(value.items.map(item => type(item, 1)))].join(" | "); + case "tuple": + return `[${value.items.map(item => type(item)).join(", ")}]`; + case "literal": + return `{\n${properties(value.value.properties)}\n}`; + case "stringLiteral": + case "integerLiteral": + case "booleanLiteral": + return JSON.stringify(value.value); + default: { + const exhaustive: never = value; + throw new Error(`Unsupported LSP type ${JSON.stringify(exhaustive)}`); + } + } + } + + const requests = new Map(model.requests.map(request => [request.method, request])); + const selected = new Set(); + const entries = methods.map(method => { + if (selected.has(method)) throw new Error(`Duplicate middleware method ${method}`); + selected.add(method); + const request = requests.get(method); + if (!request || request.messageDirection !== "clientToServer") throw new Error(`Not a client-to-server request: ${method}`); + const params = !request.params ? "undefined" : Array.isArray(request.params) ? `[${request.params.map(item => type(item)).join(", ")}]` : type(request.params); + return `${JSON.stringify(method)}: { params: ${params}; result: ${type(request.result)}; };`; + }); + return [ + "// Code generated by tools/scripts/lsp/generateTypeScript.mts. DO NOT EDIT.", + "// LSP metamodel copyright (c) Microsoft Corporation. Licensed under the MIT License.", + "", + ...[...declarations].sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([, declaration]) => declaration + "\n"), + "/** Language-feature requests supported by the extension middleware API. */", + `export interface LspMiddlewareRequests {\n${entries.join("\n")}\n}`, + "", + ].join("\n"); +} diff --git a/tools/scripts/post-vsts-artifact-comment.mjs b/tools/scripts/post-vsts-artifact-comment.mjs index 1dbfcfe26c7b6..1f8bec395c008 100644 --- a/tools/scripts/post-vsts-artifact-comment.mjs +++ b/tools/scripts/post-vsts-artifact-comment.mjs @@ -1,111 +1,111 @@ -import { Octokit } from "@octokit/rest"; -import assert from "assert"; -import ado from "azure-devops-node-api"; - -/** - * @param {string} name - */ -function mustGetEnv(name) { - const value = process.env[name]; - assert(value, `No ${name} specified`); - return value; -} - -const REQUESTING_USER = mustGetEnv("REQUESTING_USER"); -const SOURCE_ISSUE = +mustGetEnv("SOURCE_ISSUE"); -const BUILD_BUILDID = +mustGetEnv("BUILD_BUILDID"); -const DISTINCT_ID = mustGetEnv("DISTINCT_ID"); -const STATUS_COMMENT = +mustGetEnv("STATUS_COMMENT"); - -const gh = new Octokit({ - auth: process.argv[2], -}); - -async function main() { - // The pipelines API does _not_ make getting the direct URL to a specific file _within_ an artifact trivial - const cli = new ado.WebApi("https://typescript.visualstudio.com/defaultcollection", ado.getHandlerFromToken("")); // Empty token, anon auth - const build = await cli.getBuildApi(); - const artifact = await build.getArtifact("typescript", BUILD_BUILDID, "tgz"); - assert(artifact.resource?.url); - const updatedUrl = new URL(artifact.resource.url); - updatedUrl.search = `artifactName=tgz&fileId=${artifact.resource.data}&fileName=manifest`; - const resp = await (await fetch(`${updatedUrl}`)).json(); - const file = /** @type {any} */ (resp).items[0]; - const tgzUrl = new URL(artifact.resource.url); - tgzUrl.search = `artifactName=tgz&fileId=${file.blob.id}&fileName=${file.path}`; - const link = "" + tgzUrl; - - // Please keep the strings "an installable tgz" and "packed" in this message, as well as the devDependencies section, - // so that the playgrounds deployment process can find these comments. - - const comment = `Hey @${REQUESTING_USER}, I've packed this into [an installable tgz](${link}). You can install it for testing by referencing it in your \`package.json\` like so: -\`\`\` -{ - "devDependencies": { - "typescript": "${link}" - } -} -\`\`\` -and then running \`npm install\`. -`; - - // Temporarily disable until we get access controls set up right - // Send a ping to https://github.com/microsoft/typescript-make-monaco-builds#pull-request-builds - await gh.request("POST /repos/microsoft/typescript-make-monaco-builds/dispatches", { event_type: `${SOURCE_ISSUE}`, headers: { Accept: "application/vnd.github.everest-preview+json" } }); - - return comment; -} - -let newComment; -let emoji; - -try { - newComment = await main(); - emoji = "✅"; -} -catch (e) { - console.error(e); - newComment = `Hey @${REQUESTING_USER}, something went wrong when looking for the build artifact. ([You can check the log here](https://typescript.visualstudio.com/TypeScript/_build/index?buildId=${BUILD_BUILDID}&_a=summary)).`; - emoji = "❌"; -} - -const resultsComment = await gh.issues.createComment({ - issue_number: SOURCE_ISSUE, - owner: "microsoft", - repo: "TypeScript", - body: newComment, -}); - -const toReplace = ``; -let posted = false; -for (let i = 0; i < 5; i++) { - // Get status comment contents - const statusComment = await gh.rest.issues.getComment({ - comment_id: STATUS_COMMENT, - owner: "microsoft", - repo: "TypeScript", - }); - - const oldComment = statusComment.data.body; - if (!oldComment?.includes(toReplace)) { - posted = true; - break; - } - - const newComment = oldComment.replace(toReplace, `[${emoji} Results](${resultsComment.data.html_url})`); - - // Update status comment - await gh.rest.issues.updateComment({ - comment_id: STATUS_COMMENT, - owner: "microsoft", - repo: "TypeScript", - body: newComment, - }); - - // Repeat; someone may have edited the comment at the same time. - await new Promise(resolve => setTimeout(resolve, 1000)); -} - -if (!posted) { - throw new Error("Failed to update status comment"); -} +import { Octokit } from "@octokit/rest"; +import assert from "assert"; +import ado from "azure-devops-node-api"; + +/** + * @param {string} name + */ +function mustGetEnv(name) { + const value = process.env[name]; + assert(value, `No ${name} specified`); + return value; +} + +const REQUESTING_USER = mustGetEnv("REQUESTING_USER"); +const SOURCE_ISSUE = +mustGetEnv("SOURCE_ISSUE"); +const BUILD_BUILDID = +mustGetEnv("BUILD_BUILDID"); +const DISTINCT_ID = mustGetEnv("DISTINCT_ID"); +const STATUS_COMMENT = +mustGetEnv("STATUS_COMMENT"); + +const gh = new Octokit({ + auth: process.argv[2], +}); + +async function main() { + // The pipelines API does _not_ make getting the direct URL to a specific file _within_ an artifact trivial + const cli = new ado.WebApi("https://typescript.visualstudio.com/defaultcollection", ado.getHandlerFromToken("")); // Empty token, anon auth + const build = await cli.getBuildApi(); + const artifact = await build.getArtifact("typescript", BUILD_BUILDID, "tgz"); + assert(artifact.resource?.url); + const updatedUrl = new URL(artifact.resource.url); + updatedUrl.search = `artifactName=tgz&fileId=${artifact.resource.data}&fileName=manifest`; + const resp = await (await fetch(`${updatedUrl}`)).json(); + const file = /** @type {any} */ (resp).items[0]; + const tgzUrl = new URL(artifact.resource.url); + tgzUrl.search = `artifactName=tgz&fileId=${file.blob.id}&fileName=${file.path}`; + const link = "" + tgzUrl; + + // Please keep the strings "an installable tgz" and "packed" in this message, as well as the devDependencies section, + // so that the playgrounds deployment process can find these comments. + + const comment = `Hey @${REQUESTING_USER}, I've packed this into [an installable tgz](${link}). You can install it for testing by referencing it in your \`package.json\` like so: +\`\`\` +{ + "devDependencies": { + "typescript": "${link}" + } +} +\`\`\` +and then running \`npm install\`. +`; + + // Temporarily disable until we get access controls set up right + // Send a ping to https://github.com/microsoft/typescript-make-monaco-builds#pull-request-builds + await gh.request("POST /repos/microsoft/typescript-make-monaco-builds/dispatches", { event_type: `${SOURCE_ISSUE}`, headers: { Accept: "application/vnd.github.everest-preview+json" } }); + + return comment; +} + +let newComment; +let emoji; + +try { + newComment = await main(); + emoji = "✅"; +} +catch (e) { + console.error(e); + newComment = `Hey @${REQUESTING_USER}, something went wrong when looking for the build artifact. ([You can check the log here](https://typescript.visualstudio.com/TypeScript/_build/index?buildId=${BUILD_BUILDID}&_a=summary)).`; + emoji = "❌"; +} + +const resultsComment = await gh.issues.createComment({ + issue_number: SOURCE_ISSUE, + owner: "microsoft", + repo: "TypeScript", + body: newComment, +}); + +const toReplace = ``; +let posted = false; +for (let i = 0; i < 5; i++) { + // Get status comment contents + const statusComment = await gh.rest.issues.getComment({ + comment_id: STATUS_COMMENT, + owner: "microsoft", + repo: "TypeScript", + }); + + const oldComment = statusComment.data.body; + if (!oldComment?.includes(toReplace)) { + posted = true; + break; + } + + const newComment = oldComment.replace(toReplace, `[${emoji} Results](${resultsComment.data.html_url})`); + + // Update status comment + await gh.rest.issues.updateComment({ + comment_id: STATUS_COMMENT, + owner: "microsoft", + repo: "TypeScript", + body: newComment, + }); + + // Repeat; someone may have edited the comment at the same time. + await new Promise(resolve => setTimeout(resolve, 1000)); +} + +if (!posted) { + throw new Error("Failed to update status comment"); +} diff --git a/tools/scripts/tsc/generate-encoder.ts b/tools/scripts/tsc/generate-encoder.ts index 1b106bb8ff555..d554ee989ed27 100644 --- a/tools/scripts/tsc/generate-encoder.ts +++ b/tools/scripts/tsc/generate-encoder.ts @@ -1,2100 +1,2100 @@ -/** - * Encoder/decoder code generator: reads tools/scripts/tsc/ast.json and produces binary - * encoding/decoding code for Go and TypeScript. - * - * Usage: node tools/scripts/tsc/generate-encoder.ts - * - * Generates: - * - internal/api/encoder/encoder_generated.go - * - internal/api/encoder/decoder_generated.go - * - packages/typescript/src/api/node/protocol.generated.ts - */ - -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; -import { GeneratedFile } from "../gen/generatedFile.mts"; -import { - formatFilesSync, - parseGeneratorArgs, - repoRoot as ROOT, -} from "../gen/utils.mts"; -import type { - KindType, - MemberInfo, - NodeType, -} from "./schema.ts"; -import { api } from "./schema.ts"; - -// ═══════════════════════════════════════════════════════════════════════════ -// Code writer -// ═══════════════════════════════════════════════════════════════════════════ - -class CodeWriter { - private lines: string[] = []; - private indent = 0; - private indentStr: string; - - constructor(indentStr = "\t") { - this.indentStr = indentStr; - } - - write(line = "") { - if (line === "") this.lines.push(""); - else this.lines.push(this.indentStr.repeat(this.indent) + line); - } - - push() { - this.indent++; - } - pop() { - this.indent--; - } - - toString(): string { - return this.lines.join("\n"); - } -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Node classification -// ═══════════════════════════════════════════════════════════════════════════ - -/** Encoder-visible members: excludes noTS and noGo members. */ -function schemaMembers(node: NodeType): MemberInfo[] { - return node.members.filter(m => !m.noTS && !m.noGo); -} - -/** Whether a member is a child that should be encoded in the binary format. */ -function isEncodedChild(m: MemberInfo): boolean { - return m.isChild() && !m.noTS && !m.noGo; -} - -type ChildType = "node" | "nodeList" | "rawNodeList" | "modifierList"; - -/** Determine the child type for an encoded child member. */ -function childType(m: MemberInfo): ChildType { - if (m.listKind === "ModifierList") return "modifierList"; - if (m.listKind === "NodeList") return "nodeList"; - if (m.type.baseKind() === "list" && m.listKind === "raw") return "rawNodeList"; - return "node"; -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Common data analysis -// ═══════════════════════════════════════════════════════════════════════════ - -/** - * Returns true if the member is a NodeFlags member. NodeFlags are already - * stored verbatim in every node's flags field, so they do not need to be - * redundantly encoded in the commonData bits. - */ -function isNodeFlagsMember(m: MemberInfo): boolean { - const dt = m.declaredType; - return (dt.kind === "primitive" && dt.name === "NodeFlags") || - (!!m.bitmask && m.bitmask.startsWith("NodeFlags")); -} - -/** Returns the bool members that can be auto-encoded in the commonData (1 bit each). */ -function getAutoBoolBits(node: NodeType): MemberInfo[] { - // If any non-auto-encodable data exists, all data encoding is hand-written (including bools). - if (needsHandWrittenCommonData(node)) return []; - const members = schemaMembers(node); - return members.filter(m => { - if (m.isChild() || m.isKindParam()) return false; - const dt = m.declaredType; - return dt.kind === "primitive" && dt.name === "bool"; - }); -} - -/** Returns the SyntaxKind union members that can be auto-encoded. */ -function getAutoUnionBits(node: NodeType): MemberInfo[] { - if (needsHandWrittenCommonData(node)) return []; - const members = schemaMembers(node); - return members.filter(m => { - if (m.isChild() || m.isKindParam()) return false; - return isSyntaxKindUnion(m); - }); -} - -/** Check if a member's type is a union of SyntaxKind values (auto-encodable). */ -function isSyntaxKindUnion(m: MemberInfo): boolean { - const dt = resolveUnion(m.declaredType); - if (!dt || dt.kind !== "union") return false; - return dt.types.every(t => t.kind === "kind"); -} - -/** Resolve through aliases to find an underlying union type, if any. */ -function resolveUnion(dt: import("./schema.ts").Type): import("./schema.ts").Type | undefined { - if (dt.kind === "union") return dt; - if (dt.kind === "alias") return resolveUnion(dt.resolved); - return undefined; -} - -/** Number of bits needed to encode a SyntaxKind union member. */ -function unionBitWidth(m: MemberInfo): number { - const dt = resolveUnion(m.declaredType); - if (!dt || dt.kind !== "union") return 0; - // Optional unions need an extra index for "absent" (index 0 = absent) - const count = m.optional ? dt.types.length + 1 : dt.types.length; - return Math.ceil(Math.log2(count)); -} - -/** - * Returns true if the node has non-bool, non-string data members whose encoding - * format cannot be automatically inferred. Such nodes delegate their entire - * commonData encoding/decoding to hand-written functions. - * - * SyntaxKind union members are auto-encodable and do NOT require hand-written functions. - */ -function needsHandWrittenCommonData(node: NodeType): boolean { - if (node.handWritten) return false; // extended data nodes handle everything - const members = schemaMembers(node); - return members.some(m => { - if (m.isChild() || m.isKindParam()) return false; - const dt = m.declaredType; - if (dt.kind === "primitive" && dt.name === "bool") return false; - if (dt.kind === "primitive" && dt.name === "string") return false; - if (isSyntaxKindUnion(m)) return false; - if (isNodeFlagsMember(m)) return false; - return true; - }); -} - -/** - * Returns all data members (non-child, non-kindParam, non-string) for a node - * that needs hand-written commonData. Includes bools, since the hand-written - * function controls the entire 6-bit layout. - */ -function getHandWrittenDataMembers(node: NodeType): MemberInfo[] { - const members = schemaMembers(node); - return members.filter(m => { - if (m.isChild() || m.isKindParam()) return false; - const dt = m.declaredType; - if (dt.kind === "primitive" && dt.name === "string") return false; - if (isNodeFlagsMember(m)) return false; - return true; - }); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Data type classification -// ═══════════════════════════════════════════════════════════════════════════ - -type DataType = "string" | "children" | "extended"; - -function classifyDataType(node: NodeType): DataType { - if (node.handWritten) return "extended"; - const members = schemaMembers(node); - const stringMembers = members.filter(m => - !m.isChild() && !m.isKindParam() && - m.declaredType.kind === "primitive" && m.declaredType.name === "string" - ); - if (stringMembers.length > 1) return "extended"; - if (stringMembers.length === 1) { - // If the node also has non-bool data members, TokenFlags etc. won't fit in - // 6 common data bits → must use extended data. - if (needsHandWrittenCommonData(node)) return "extended"; - return "string"; - } - return "children"; -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Go factory call helpers -// ═══════════════════════════════════════════════════════════════════════════ - -/** Get all SyntaxKind Go constant names for a node (prefixed with `ast.`). */ -function getGoKinds(node: NodeType): string[] { - return node.allKinds().map(k => `ast.${k.formatGoConstant()}`); -} - -/** Get all SyntaxKind names for a node in TS (without prefix). */ -function getTSKinds(node: NodeType): string[] { - return node.allKinds().map(k => k.name); -} - -/** Get the Go factory method name (e.g., "NewIfStatement"). */ -function goFactoryName(node: NodeType): string { - return `New${node.name}`; -} - -/** Get the Go "As*" cast method name (e.g., "AsIfStatement"). */ -function goCastName(node: NodeType): string { - return `As${node.name}`; -} - -/** Get the Go param name, avoiding Go keywords. */ -function goParamName(m: MemberInfo): string { - return m.goParamName(); -} - -/** Get the Go accessor for a member on a cast struct (e.g., "n.IsTypeOnly", "n.Name()"). */ -function goFieldAccess(m: MemberInfo): string { - if (m.private) return `n.${api.capitalize(m.name)}()`; - return `n.${m.name}`; -} - -/** Get the default Go value for a non-encoded factory parameter. */ -function goDefaultValue(m: MemberInfo): string { - if (m.isChild()) return "nil"; - const dt = m.declaredType; - if (dt.kind === "primitive") { - switch (dt.name) { - case "bool": - return "false"; - case "int": - return "0"; - case "string": - return `""`; - case "NodeFlags": - return "0"; - case "TokenFlags": - return "0"; - case "ModifierFlags": - return "0"; - } - } - if (dt.baseKind() === "kind") return "0"; - return "nil"; -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Encoder node info (per-node analysis) -// ═══════════════════════════════════════════════════════════════════════════ - -interface EncoderNodeInfo { - node: NodeType; - dataType: DataType; - /** Encoded child members in visitor order. */ - childProps: MemberInfo[]; - /** Bool members auto-encoded in commonData (empty if hand-written). */ - autoBoolBits: MemberInfo[]; - /** SyntaxKind union members auto-encoded in commonData. */ - autoUnionBits: MemberInfo[]; - /** Whether commonData encoding is delegated to a hand-written function. */ - handWrittenCommonData: boolean; - /** The text member for string nodes. */ - textMember?: MemberInfo; - /** Whether this node has a Kind parameter in the factory. */ - kindMember?: MemberInfo; - /** All factory parameters, including non-encoded ones. */ - factoryMembers: MemberInfo[]; -} - -function analyzeNode(node: NodeType): EncoderNodeInfo { - const dataType = classifyDataType(node); - const members = schemaMembers(node); - const childProps = members.filter(m => isEncodedChild(m)); - const handWrittenCD = needsHandWrittenCommonData(node); - const autoBoolBits = getAutoBoolBits(node); - const autoUnionBits = getAutoUnionBits(node); - const kindMember = members.find(m => m.isKindParam()); - const textMember = dataType === "string" - ? members.find(m => - !m.isChild() && !m.isKindParam() && - m.declaredType.kind === "primitive" && m.declaredType.name === "string" - ) - : undefined; - // Factory members include all non-noFactory members (even noTS ones), - // since the factory signature is determined by generate-go-ast.ts. - const factoryMembers = node.members.filter(m => !m.noFactory); - - return { - node, - dataType, - childProps, - autoBoolBits, - autoUnionBits, - handWrittenCommonData: handWrittenCD, - textMember, - kindMember, - factoryMembers, - }; -} - -/** - * Compute the bit layout for all auto-encoded data members of a node. - * Bools get 1 bit each, SyntaxKind unions get ceil(log2(N)) bits. - * Returns entries with the bit position (relative to bit 24) and width. - */ -function getAutoEncodedLayout(info: EncoderNodeInfo): { member: MemberInfo; bitPos: number; bitWidth: number; }[] { - const layout: { member: MemberInfo; bitPos: number; bitWidth: number; }[] = []; - let bitPos = 0; - for (const m of info.autoBoolBits) { - layout.push({ member: m, bitPos, bitWidth: 1 }); - bitPos++; - } - for (const m of info.autoUnionBits) { - const width = unionBitWidth(m); - layout.push({ member: m, bitPos, bitWidth: width }); - bitPos += width; - } - return layout; -} - -/** Check if a node has any auto-encoded data members (bools or unions). */ -function hasAutoEncodedData(info: EncoderNodeInfo): boolean { - return info.autoBoolBits.length > 0 || info.autoUnionBits.length > 0; -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Go Encoder Generation -// ═══════════════════════════════════════════════════════════════════════════ - -function generateGoEncoder(): string { - const w = new CodeWriter(); - w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); - w.write(""); - w.write("package encoder"); - w.write(""); - w.write("import ("); - w.push(); - w.write('"fmt"'); - w.write(""); - w.write('"github.com/microsoft/TypeScript/tsc/internal/ast"'); - w.pop(); - w.write(")"); - w.write(""); - - generateGoGetNodeDataType(w); - generateGoGetChildrenPropertyMask(w); - generateGoGetNodeCommonData(w); - generateGoRecordNodeStrings(w); - generateGoRecordExtendedData(w); - - return w.toString(); -} - -function generateGoGetNodeDataType(w: CodeWriter) { - w.write("func getNodeDataType(node *ast.Node) uint32 {"); - w.push(); - w.write("switch node.Kind {"); - - const stringKinds: string[] = []; - const extendedKinds: string[] = []; - - for (const node of api.nodes()) { - const info = analyzeNode(node); - const kinds = getGoKinds(node); - - if (info.dataType === "string") { - stringKinds.push(...kinds); - } - else if (info.dataType === "extended") { - extendedKinds.push(...kinds); - } - } - - if (stringKinds.length > 0) { - w.write(`case ${stringKinds.join(",\n\t\t")}:`); - w.push(); - w.write("return NodeDataTypeString"); - w.pop(); - } - if (extendedKinds.length > 0) { - w.write(`case ${extendedKinds.join(",\n\t\t")}:`); - w.push(); - w.write("return NodeDataTypeExtendedData"); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write("return NodeDataTypeChildren"); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoGetChildrenPropertyMask(w: CodeWriter) { - w.write("func getChildrenPropertyMask(node *ast.Node) uint8 {"); - w.push(); - w.write("switch node.Kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "extended") continue; - if (info.childProps.length === 0) continue; - - const kinds = getGoKinds(node); - const castName = goCastName(node); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`n := node.${castName}()`); - - const parts: string[] = []; - for (let i = 0; i < info.childProps.length; i++) { - const m = info.childProps[i]; - const ct = childType(m); - let check: string; - if (ct === "modifierList") { - check = `hasModifiers(n.Modifiers())`; - } - else if (ct === "nodeList") { - check = `${goFieldAccess(m)} != nil`; - } - else if (ct === "rawNodeList") { - check = `len(${goFieldAccess(m)}) > 0`; - } - else { - check = `${goFieldAccess(m)} != nil`; - } - parts.push(`(boolToByte(${check}) << ${i})`); - } - w.write(`return ${parts.join(" | ")}`); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write("return 0"); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoGetNodeCommonData(w: CodeWriter) { - w.write("func getNodeCommonData(node *ast.Node) uint32 {"); - w.push(); - w.write("switch node.Kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "extended") continue; - - if (info.handWrittenCommonData) { - // Delegate to hand-written function for all non-bool data members. - const kinds = getGoKinds(node); - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`return getNodeCommonData_${node.name}(node)`); - w.pop(); - } - else if (hasAutoEncodedData(info)) { - const kinds = getGoKinds(node); - const castName = goCastName(node); - const layout = getAutoEncodedLayout(info); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`n := node.${castName}()`); - - const parts: string[] = []; - for (const { member: m, bitPos, bitWidth } of layout) { - if (!isSyntaxKindUnion(m)) { - // Bool or bitmask - parts.push(`uint32(boolToByte(${goFieldAccess(m)})) << ${24 + bitPos}`); - } - else { - // SyntaxKind union → index-based encoding - const kinds = unionKindValues(m.declaredType); - const varName = `${goParamName(m)}Idx`; - w.write(`var ${varName} uint32`); - w.write(`switch ${goFieldAccess(m)} {`); - if (m.optional) { - // Optional: 0 = absent, 1..N = values[0]..values[N-1] - for (let i = 0; i < kinds.length; i++) { - w.write(`case ast.${kinds[i].formatGoConstant()}: ${varName} = ${i + 1}`); - } - } - else { - // Non-optional: 0 = values[0] (default), 1..N-1 = values[1]..values[N-1] - for (let i = 1; i < kinds.length; i++) { - w.write(`case ast.${kinds[i].formatGoConstant()}: ${varName} = ${i}`); - } - } - w.write("}"); - parts.push(`${varName} << ${24 + bitPos}`); - } - } - w.write(`return ${parts.join(" | ")}`); - w.pop(); - } - } - - w.write("}"); - w.write("return 0"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoRecordNodeStrings(w: CodeWriter) { - w.write("func recordNodeStrings(node *ast.Node, strs *stringTable) uint32 {"); - w.push(); - w.write("switch node.Kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "string" || !info.textMember) continue; - - const kinds = getGoKinds(node); - const castName = goCastName(node); - const textAccess = info.textMember.private - ? `node.${castName}().${api.capitalize(info.textMember.name)}()` - : `node.${castName}().${info.textMember.name}`; - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`return strs.add(${textAccess}, node.Kind, node.Pos(), node.End())`); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write(`panic(fmt.Sprintf("Unexpected node kind %v", node.Kind))`); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoRecordExtendedData(w: CodeWriter) { - w.write("func recordExtendedData(node *ast.Node, strs *stringTable, positionMap *ast.PositionMap, extendedData *[]byte, structuredData *[]byte) uint32 {"); - w.push(); - w.write("offset := uint32(len(*extendedData))"); - w.write("switch node.Kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "extended") continue; - - const kinds = getGoKinds(node); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`recordExtendedData_${node.name}(node, strs, positionMap, extendedData, structuredData)`); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write(`panic(fmt.Sprintf("unknown extended data node kind %v", node.Kind))`); - w.pop(); - w.write("}"); - w.write("return offset"); - w.pop(); - w.write("}"); - w.write(""); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Go Decoder Generation -// ═══════════════════════════════════════════════════════════════════════════ - -function generateGoDecoder(): string { - const w = new CodeWriter(); - w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); - w.write(""); - w.write("package encoder"); - w.write(""); - w.write("import ("); - w.push(); - w.write('"fmt"'); - w.write(""); - w.write('"github.com/microsoft/TypeScript/tsc/internal/ast"'); - w.pop(); - w.write(")"); - w.write(""); - - generateGoCreateStringNode(w); - generateGoCreateExtendedNode(w); - generateGoCreateChildrenNode(w); - - return w.toString(); -} - -function generateGoCreateStringNode(w: CodeWriter) { - w.write("func (d *astDecoder) createStringNode(kind ast.Kind, data uint32, commonData uint8) (*ast.Node, error) {"); - w.push(); - w.write("strIdx := data & NodeDataStringIndexMask"); - w.write("text := d.getString(strIdx)"); - w.write(""); - w.write("switch kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "string") continue; - - const kinds = getGoKinds(node); - const factoryName = goFactoryName(node); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - - // Decode commonData - const commonVars = emitCommonDataDecode(w, node, info); - - // Build factory args - const args: string[] = []; - for (const m of info.factoryMembers) { - if (m.isKindParam()) { - args.push("kind"); - } - else if (m === info.textMember) { - if (m.listKind === "raw") { - args.push("[]string{text}"); - } - else { - args.push("text"); - } - } - else if (isEncodedChild(m)) { - args.push("nil"); - } - else { - const v = commonVars.get(m); - if (v) { - args.push(v); - } - else { - args.push(goDefaultValue(m)); - } - } - } - - w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write(`return nil, fmt.Errorf("unknown string node kind %v", kind)`); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoCreateExtendedNode(w: CodeWriter) { - w.write("func (d *astDecoder) createExtendedNode(kind ast.Kind, data uint32, childIndices []int, commonData uint8) (*ast.Node, error) {"); - w.push(); - w.write("switch kind {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "extended") continue; - - const kinds = getGoKinds(node); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - // Extended data nodes call hand-written decode functions - w.write(`return d.decodeExtendedData_${node.name}(data, childIndices, commonData)`); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write(`return nil, fmt.Errorf("unknown extended data node kind %v", kind)`); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateGoCreateChildrenNode(w: CodeWriter) { - w.write("func (d *astDecoder) createChildrenNode(kind ast.Kind, data uint32, childIndices []int, commonData uint8) (*ast.Node, error) {"); - w.push(); - w.write("mask := uint8(data & NodeDataChildMask)"); - w.write(""); - w.write("switch kind {"); - - // Build a set of all kinds claimed by specific nodes, so that the most - // specific node (fewest kinds) takes priority for shared kinds. - const kindOwner = new Map(); - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "children") continue; - const kinds = getGoKinds(node); - for (const k of kinds) { - const existing = kindOwner.get(k); - if (!existing || kinds.length < existing.totalKinds) { - kindOwner.set(k, { node, info, totalKinds: kinds.length }); - } - } - } - - // Group kinds by their owning node (deconflicted). - const nodeKinds = new Map(); - for (const [kind, owner] of kindOwner) { - const key = owner.node.name; - if (!nodeKinds.has(key)) nodeKinds.set(key, []); - nodeKinds.get(key)!.push(kind); - } - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType !== "children") continue; - - const kinds = nodeKinds.get(node.name); - if (!kinds || kinds.length === 0) continue; - - if (info.childProps.length === 0) { - emitZeroChildDecoder(w, node, info, kinds); - } - else if (info.childProps.length === 1) { - emitSingleChildDecoder(w, node, info, kinds); - } - else { - emitMultiChildDecoder(w, node, info, kinds); - } - } - - // Default: error for unhandled kinds - w.write("default:"); - w.push(); - w.write(`return nil, fmt.Errorf("unhandled node kind %v with %d children", kind, len(childIndices))`); - w.pop(); - - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Decoder helpers -// ═══════════════════════════════════════════════════════════════════════════ - -/** - * Emits commonData decoding and returns a map of member → Go variable name. - * For auto-bool nodes: decodes bools from bit positions. - * For hand-written nodes: calls decodeNodeCommonData_(commonData). - */ -function emitCommonDataDecode(w: CodeWriter, node: NodeType, info: EncoderNodeInfo): Map { - const vars = new Map(); - - if (info.handWrittenCommonData) { - const dataMembers = getHandWrittenDataMembers(node); - if (dataMembers.length === 0) return vars; - - const varNames = dataMembers.map(m => goParamName(m)); - if (dataMembers.length === 1) { - w.write(`${varNames[0]} := decodeNodeCommonData_${node.name}(commonData)`); - } - else { - w.write(`${varNames.join(", ")} := decodeNodeCommonData_${node.name}(commonData)`); - } - for (let i = 0; i < dataMembers.length; i++) { - vars.set(dataMembers[i], varNames[i]); - } - } - else { - const layout = getAutoEncodedLayout(info); - for (const { member: m, bitPos, bitWidth } of layout) { - const varName = goParamName(m); - if (!isSyntaxKindUnion(m)) { - // Bool or bitmask - w.write(`${varName} := commonData&${1 << bitPos} != 0`); - vars.set(m, varName); - } - else { - // SyntaxKind union → index-based decoding - const kinds = unionKindValues(m.declaredType); - const mask = (1 << bitWidth) - 1; - const indexExpr = bitPos === 0 - ? `commonData & ${mask}` - : `(commonData >> ${bitPos}) & ${mask}`; - if (m.optional) { - // Optional: 0 = absent (KindUnknown), 1..N = values[0]..values[N-1] - w.write(`var ${varName} ast.Kind`); - w.write(`switch ${indexExpr} {`); - for (let i = 0; i < kinds.length; i++) { - w.write(`case ${i + 1}: ${varName} = ast.${kinds[i].formatGoConstant()}`); - } - w.write("}"); - } - else if (kinds.length === 2) { - // Non-optional 2-value: simple if - w.write(`${varName} := ast.${kinds[0].formatGoConstant()}`); - w.write(`if ${indexExpr} != 0 {`); - w.push(); - w.write(`${varName} = ast.${kinds[1].formatGoConstant()}`); - w.pop(); - w.write("}"); - } - else { - // Non-optional N-value: switch - w.write(`var ${varName} ast.Kind`); - w.write(`switch ${indexExpr} {`); - for (let i = 0; i < kinds.length; i++) { - w.write(`case ${i}: ${varName} = ast.${kinds[i].formatGoConstant()}`); - } - w.write("}"); - } - vars.set(m, varName); - } - } - } - - return vars; -} - -function emitZeroChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { - const factoryName = goFactoryName(node); - - w.write(`case ${kinds.join(",\n\t\t")}:`); - w.push(); - - const commonVars = emitCommonDataDecode(w, node, info); - - const args: string[] = []; - for (const m of info.factoryMembers) { - if (m.isKindParam()) { - args.push("kind"); - continue; - } - const v = commonVars.get(m); - if (v) { - args.push(v); - continue; - } - args.push(goDefaultValue(m)); - } - - w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); - w.pop(); -} - -function emitSingleChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { - const cp = info.childProps[0]; - const ct = childType(cp); - const factoryName = goFactoryName(node); - const hasCommonData = info.autoBoolBits.length > 0 || info.handWrittenCommonData; - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - - // Decode commonData if needed - const commonVars = emitCommonDataDecode(w, node, info); - - // Build factory args - const args: string[] = []; - for (const m of info.factoryMembers) { - if (m.isKindParam()) { - args.push("kind"); - } - else if (m === cp) { - if (ct === "rawNodeList") { - w.write(`nodes := d.allocNodeSlice(len(childIndices))`); - w.write("for i, ci := range childIndices {"); - w.push(); - w.write("nodes[i] = d.nodes[ci]"); - w.pop(); - w.write("}"); - args.push("nodes"); - } - else if (ct === "nodeList") { - if (hasCommonData) { - w.write("var list *ast.NodeList"); - w.write("if len(childIndices) > 0 {"); - w.push(); - w.write("list = d.nodeListAt(childIndices[0])"); - w.pop(); - w.write("}"); - args.push("list"); - } - else { - args.push("d.singleNodeListChild(childIndices)"); - } - } - else if (ct === "modifierList") { - w.write("var mods *ast.ModifierList"); - w.write("if len(childIndices) > 0 {"); - w.push(); - w.write("mods = d.modifierListAt(childIndices[0])"); - w.pop(); - w.write("}"); - args.push("mods"); - } - else { - args.push("d.singleChild(childIndices)"); - } - } - else { - const cdVar = commonVars.get(m); - if (cdVar) { - args.push(cdVar); - } - else { - args.push(goDefaultValue(m)); - } - } - } - - w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); - w.pop(); -} - -function emitMultiChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { - const factoryName = goFactoryName(node); - - w.write(`case ${kinds.join(", ")}:`); - w.push(); - - // Decode commonData - const commonVars = emitCommonDataDecode(w, node, info); - - // Child iterator - w.write("it := newChildIter(childIndices)"); - - // Decode each child from mask - const childVars = new Map(); - for (let i = 0; i < info.childProps.length; i++) { - const m = info.childProps[i]; - const ct = childType(m); - const varName = goParamName(m); - let decode: string; - if (ct === "modifierList") { - decode = `d.modifierListAt(it.nextIf(mask, ${i}))`; - } - else if (ct === "rawNodeList") { - const nlVar = `${varName}NL`; - w.write(`${nlVar} := d.nodeListAt(it.nextIf(mask, ${i}))`); - w.write(`var ${varName} []*ast.Node`); - w.write(`if ${nlVar} != nil {`); - w.push(); - w.write(`${varName} = ${nlVar}.Nodes`); - w.pop(); - w.write("}"); - childVars.set(m, varName); - continue; - } - else if (ct === "nodeList") { - decode = `d.nodeListAt(it.nextIf(mask, ${i}))`; - } - else { - decode = `d.nodeAt(it.nextIf(mask, ${i}))`; - } - w.write(`${varName} := ${decode}`); - childVars.set(m, varName); - } - - // Build factory args - const args: string[] = []; - for (const m of info.factoryMembers) { - if (m.isKindParam()) { - args.push("kind"); - continue; - } - const childVar = childVars.get(m); - if (childVar) { - args.push(childVar); - continue; - } - const cdVar = commonVars.get(m); - if (cdVar) { - args.push(cdVar); - continue; - } - args.push(goDefaultValue(m)); - } - - // Handle kindAliases with separate factories - if (node.kindAliases.length > 0 && !info.kindMember) { - for (const alias of node.kindAliases) { - w.write(`if kind == ast.Kind${alias} {`); - w.push(); - w.write(`return d.factory.New${alias}(${args.slice(info.kindMember ? 1 : 0).join(", ")}), nil`); - w.pop(); - w.write("}"); - } - } - - w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); - w.pop(); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// TypeScript Protocol Generation -// ═══════════════════════════════════════════════════════════════════════════ - -function generateTSProtocol(): string { - const w = new CodeWriter(" "); - w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); - w.write(""); - w.write('import { SyntaxKind } from "../../ast/index.ts";'); - w.write(""); - - // Complete childProperties mapping — includes all nodes with children - // (single-child, multi-child, and extended data nodes). - w.write("export const childProperties: Readonly>> = {"); - w.push(); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.childProps.length === 0) continue; - - const kinds = getTSKinds(node); - const props = info.childProps.map(m => `"${api.uncapitalize(m.name)}"`).join(", "); - for (const kind of kinds) { - w.write(`[SyntaxKind.${kind}]: [${props}],`); - } - } - - w.pop(); - w.write("};"); - w.write(""); - - // singleChildNodePropertyNames mapping - w.write("export const singleChildNodePropertyNames: Readonly>> = {"); - w.push(); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "extended") continue; - if (info.childProps.length !== 1) continue; - - const kinds = getTSKinds(node); - const prop = api.uncapitalize(info.childProps[0].name); - - for (const kind of kinds) { - w.write(`[SyntaxKind.${kind}]: "${prop}",`); - } - } - - w.pop(); - w.write("};"); - w.write(""); - - return w.toString(); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// TypeScript Encoder Generation (encoder.generated.ts) -// ═══════════════════════════════════════════════════════════════════════════ - -/** Get all KindType values from a SyntaxKind union type. Resolves through aliases. */ -function unionKindValues(dt: import("./schema.ts").Type): import("./schema.ts").KindType[] { - const resolved = resolveUnion(dt); - if (!resolved || resolved.kind !== "union") return []; - return resolved.types.filter((t): t is import("./schema.ts").KindType => t.kind === "kind"); -} - -function generateTSEncoder(): string { - const w = new CodeWriter(" "); - w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); - w.write(""); - - // Collect needed type imports - const typeImports = new Set(); - const valueImports = new Set(["SyntaxKind"]); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "extended") continue; - - if (info.autoBoolBits.length > 0 || info.autoUnionBits.length > 0) { - typeImports.add(node.name); - } - else if (info.handWrittenCommonData) { - typeImports.add(node.name); - } - } - - // Write imports - if (typeImports.size > 0) { - w.write("import type {"); - w.push(); - w.write("Node,"); - for (const t of [...typeImports].sort()) { - w.write(`${t},`); - } - w.pop(); - w.write('} from "../../ast/index.ts";'); - } - w.write("import {"); - w.push(); - for (const v of [...valueImports].sort()) { - w.write(`${v},`); - } - w.pop(); - w.write('} from "../../ast/index.ts";'); - w.write("import {"); - w.push(); - w.write("NODE_DATA_TYPE_CHILDREN,"); - w.write("NODE_DATA_TYPE_EXTENDED,"); - w.write("NODE_DATA_TYPE_STRING,"); - w.pop(); - w.write('} from "./protocol.ts";'); - w.write(""); - - generateTSGetNodeDataType(w); - generateTSGetNodeCommonData(w); - - return w.toString(); -} - -function generateTSGetNodeDataType(w: CodeWriter) { - w.write("export function getNodeDataType(kind: SyntaxKind): number {"); - w.push(); - w.write("switch (kind) {"); - - const stringKinds: string[] = []; - const extendedKinds: string[] = []; - - for (const node of api.nodes()) { - const info = analyzeNode(node); - const kinds = getTSKinds(node); - if (info.dataType === "string") { - stringKinds.push(...kinds); - } - else if (info.dataType === "extended") { - extendedKinds.push(...kinds); - } - } - - if (stringKinds.length > 0) { - for (const k of stringKinds) { - w.write(`case SyntaxKind.${k}:`); - } - w.push(); - w.write("return NODE_DATA_TYPE_STRING;"); - w.pop(); - } - if (extendedKinds.length > 0) { - for (const k of extendedKinds) { - w.write(`case SyntaxKind.${k}:`); - } - w.push(); - w.write("return NODE_DATA_TYPE_EXTENDED;"); - w.pop(); - } - - w.write("default:"); - w.push(); - w.write("return NODE_DATA_TYPE_CHILDREN;"); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateTSGetNodeCommonData(w: CodeWriter) { - w.write("export function getNodeCommonData(node: Node): number {"); - w.push(); - w.write("switch (node.kind) {"); - - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "extended") continue; - - if (hasAutoEncodedData(info)) { - // Auto-encoded: generate bit packing for bools and index encoding for unions - const kinds = getTSKinds(node); - const layout = getAutoEncodedLayout(info); - for (const k of kinds) { - w.write(`case SyntaxKind.${k}:`); - } - w.push(); - const parts: string[] = []; - for (const { member: m, bitPos, bitWidth } of layout) { - const propName = api.uncapitalize(m.name); - if (!isSyntaxKindUnion(m)) { - // Bool - parts.push(`((node as ${node.name}).${propName} ? 1 : 0) << ${24 + bitPos}`); - } - else { - // SyntaxKind union → index-based encoding - const kinds = unionKindValues(m.declaredType); - if (m.optional) { - // Optional union: 0 = absent, 1..N = values[0]..values[N-1] - const cases = kinds.map((k, i) => `(node as ${node.name}).${propName} === ${k.formatTypeScript()} ? ${i + 1} : `).join(""); - parts.push(`(${cases}0) << ${24 + bitPos}`); - } - else { - // Required union: index into values array - const cases = kinds.slice(1).map((k, i) => `(node as ${node.name}).${propName} === ${k.formatTypeScript()} ? ${i + 1} : `).join(""); - parts.push(`(${cases}0) << ${24 + bitPos}`); - } - } - } - w.write(`return ${parts.join(" | ")};`); - w.pop(); - } - else if (info.handWrittenCommonData) { - // Hand-written: generate encoding based on member types - const kinds = getTSKinds(node); - const dataMembers = getHandWrittenDataMembers(node); - if (dataMembers.length === 0) continue; - - // Skip nodes with 'any' type data members (e.g., SyntheticExpression) — they should never be encoded - if (dataMembers.some(m => m.declaredType.kind === "primitive" && m.declaredType.name === "any")) { - continue; - } - - for (const k of kinds) { - w.write(`case SyntaxKind.${k}:`); - } - w.push(); - - emitTSCommonDataEncoding(w, node, dataMembers); - - w.pop(); - } - } - - w.write("}"); - w.write("return 0;"); - w.pop(); - w.write("}"); - w.write(""); -} - -function emitTSCommonDataEncoding(w: CodeWriter, node: NodeType, dataMembers: MemberInfo[]) { - const parts: string[] = []; - let bitPos = 24; - - for (const m of dataMembers) { - const propName = api.uncapitalize(m.name); - const dt = m.declaredType; - - if (dt.kind === "primitive" && dt.name === "bool") { - parts.push(`((node as ${node.name}).${propName} ? 1 : 0) << ${bitPos}`); - bitPos++; - } - else { - throw new Error(`Unexpected hand-written data member ${node.name}.${m.name} of type ${dt.kind}`); - } - } - - if (parts.length === 0) { - w.write("return 0;"); - } - else if (parts.length === 1) { - w.write(`return ${parts[0]};`); - } - else { - w.write("return " + parts.join(" |\n ") + ";"); - } -} - -// ═══════════════════════════════════════════════════════════════════════════ -// TypeScript Node Generation (node.ts — entire file) -// ═══════════════════════════════════════════════════════════════════════════ - -function generateTSNodeGenerated(): string { - const w = new CodeWriter(" "); - - // Collect all unique child property names and their types (node vs nodeList) - const childGetters = new Map(); - for (const node of api.nodes()) { - const info = analyzeNode(node); - for (const m of info.childProps) { - const propName = api.uncapitalize(m.name); - const ct = childType(m); - const isListType = ct === "nodeList" || ct === "modifierList"; - const existing = childGetters.get(propName); - if (!existing) { - childGetters.set(propName, isListType ? "nodeList" : "node"); - } - else if ((existing === "node" && isListType) || (existing === "nodeList" && !isListType)) { - childGetters.set(propName, "both"); - } - } - } - - // Collect all unique auto-bool property names with their bit positions - const boolGetters = new Map(); - for (const node of api.nodes()) { - const info = analyzeNode(node); - const layout = getAutoEncodedLayout(info); - for (const { member: m, bitPos, bitWidth } of layout) { - if (!isSyntaxKindUnion(m)) { - const propName = api.uncapitalize(m.name); - const absBitPos = 24 + bitPos; - const existing = boolGetters.get(propName); - if (existing !== undefined && existing !== absBitPos) { - throw new Error(`Bool property "${propName}" has inconsistent bit positions: ${existing} vs ${absBitPos}`); - } - boolGetters.set(propName, absBitPos); - } - } - } - - // Collect all unique SyntaxKind union property getters: - // Map from property name → array of { kinds, bitPos, bitWidth, values, optional } - interface UnionGetterEntry { - kinds: string[]; - bitPos: number; - bitWidth: number; - values: KindType[]; - optional: boolean; - } - const unionGetters = new Map(); - for (const node of api.nodes()) { - const info = analyzeNode(node); - const layout = getAutoEncodedLayout(info); - for (const { member: m, bitPos, bitWidth } of layout) { - if (isSyntaxKindUnion(m)) { - const propName = api.uncapitalize(m.name); - const entries = unionGetters.get(propName) || []; - entries.push({ - kinds: getTSKinds(node), - bitPos: 24 + bitPos, - bitWidth, - values: unionKindValues(m.declaredType), - optional: !!m.optional, - }); - unionGetters.set(propName, entries); - } - } - } - - // Collect string data property info - const stringTextKinds: string[] = []; - const extendedTextKinds: string[] = []; - for (const node of api.nodes()) { - const info = analyzeNode(node); - if (info.dataType === "string" && info.textMember) { - stringTextKinds.push(...getTSKinds(node)); - } - else if (info.dataType === "extended") { - extendedTextKinds.push(...getTSKinds(node)); - } - } - - // Emit the file - w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); - w.write(""); - emitNodeGeneratedImports(w); - w.write(""); - emitRemoteNodeList(w); - w.write(""); - emitRemoteNodeClassOpen(w); - w.write(""); - - // ── Generated: Boolean property getters ── - w.write(" // ═══ Generated boolean property getters ═══"); - w.write(""); - for (const [propName, bitPos] of [...boolGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { - w.write(` get ${propName}(): boolean {`); - w.write(` return (this.data & (1 << ${bitPos})) !== 0;`); - w.write(` }`); - w.write(""); - } - - // ── Generated: SyntaxKind union property getters ── - w.write(" // ═══ Generated SyntaxKind union property getters ═══"); - w.write(""); - for (const [propName, entries] of [...unionGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { - // Determine return type: if any entry is optional, return type includes undefined - const anyOptional = entries.some(e => e.optional); - const returnType = anyOptional ? "SyntaxKind | undefined" : "SyntaxKind | undefined"; - w.write(` get ${propName}(): ${returnType} {`); - w.write(` switch (this.kind) {`); - for (const entry of entries) { - for (const kind of entry.kinds) { - w.write(` case SyntaxKind.${kind}:`); - } - const mask = (1 << entry.bitWidth) - 1; - const indexExpr = `(this.data >> ${entry.bitPos}) & 0x${mask.toString(16)}`; - if (entry.optional) { - // Optional: 0 = undefined, 1..N = values[0]..values[N-1] - w.write(` {`); - w.write(` const idx = ${indexExpr};`); - w.write(` if (idx === 0) return undefined;`); - const cases = entry.values.map((k, i) => `idx === ${i + 1} ? ${k.formatTypeScript()} : `).join(""); - w.write(` return ${cases}undefined;`); - w.write(` }`); - } - else if (entry.values.length === 2) { - // 2-value: simple ternary - w.write(` return ${indexExpr} ? ${entry.values[1].formatTypeScript()} : ${entry.values[0].formatTypeScript()};`); - } - else { - // N-value: switch on index - w.write(` {`); - w.write(` const idx = ${indexExpr};`); - for (let i = 0; i < entry.values.length; i++) { - if (i === 0) { - // default case (index 0) - } - else { - w.write(` if (idx === ${i}) return ${entry.values[i].formatTypeScript()};`); - } - } - w.write(` return ${entry.values[0].formatTypeScript()};`); - w.write(` }`); - } - } - w.write(` }`); - w.write(` }`); - w.write(""); - } - - // ── Generated: templateFlags (extended data, not a union) ── - emitTemplateFlagsGetter(w); - w.write(""); - - // ── Generated: tokenFlags (extended data for RegularExpressionLiteral) ── - emitTokenFlagsGetter(w); - w.write(""); - - // ── Generated: Child property getters ── - w.write(" // ═══ Generated child property getters ═══"); - w.write(""); - for (const [propName, type] of [...childGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { - const returnType = type === "nodeList" ? "RemoteNodeList" : type === "both" ? "RemoteNode | RemoteNodeList" : "RemoteNode"; - const castType = type === "nodeList" ? "RemoteNodeList" : type === "both" ? "RemoteNode | RemoteNodeList" : "RemoteNode"; - w.write(` get ${propName}(): ${returnType} | undefined {`); - w.write(` return this.getNamedChild(${JSON.stringify(propName)}) as ${castType};`); - w.write(` }`); - } - w.write(""); - - // ── Generated: String property getters (text, rawText) ── - w.write(" // ═══ Generated string property getters ═══"); - w.write(""); - emitStringGetters(w, stringTextKinds, extendedTextKinds); - w.write(""); - - // ── Generated: Extended data property getters (SourceFile-specific, etc.) ── - w.write(" // ═══ Generated extended data property getters ═══"); - w.write(""); - emitExtendedDataGetters(w); - w.write(""); - - // ── Hand-written remaining getters (flags, modifierFlags, etc.) ── - emitRemoteNodeClassClose(w); - w.write(""); - - return w.toString(); -} - -// ── Infrastructure template sections ── - -function emitNodeGeneratedImports(w: CodeWriter) { - w.write(`import {`); - w.write(` getChildren,`); - w.write(` getFirstToken,`); - w.write(` getLastToken,`); - w.write(` getTokenPosOfNode,`); - w.write(` ModifierFlags,`); - w.write(` type Node,`); - w.write(` type NodeArray,`); - w.write(` type SourceFile,`); - w.write(` SyntaxKind,`); - w.write(`} from "../../ast/index.ts";`); - w.write(`import {`); - w.write(` childProperties,`); - w.write(` KIND_NODE_LIST,`); - w.write(` NODE_DATA_TYPE_CHILDREN,`); - w.write(` NODE_DATA_TYPE_EXTENDED,`); - w.write(` NODE_DATA_TYPE_STRING,`); - w.write(` NODE_LEN,`); - w.write(` NODE_OFFSET_DATA,`); - w.write(` NODE_OFFSET_END,`); - w.write(` NODE_OFFSET_FLAGS,`); - w.write(` NODE_OFFSET_KIND,`); - w.write(` NODE_OFFSET_NEXT,`); - w.write(` NODE_OFFSET_PARENT,`); - w.write(` NODE_OFFSET_POS,`); - w.write(`} from "./protocol.ts";`); - w.write(`import {`); - w.write(` type NodeDataType,`); - w.write(` NODE_CHILD_MASK,`); - w.write(` NODE_DATA_TYPE_MASK,`); - w.write(` NODE_EXTENDED_DATA_MASK,`); - w.write(` NODE_STRING_INDEX_MASK,`); - w.write(` modifierToFlag,`); - w.write(` popcount8,`); - w.write(` RemoteNodeBase,`); - w.write(` type SourceFileInfo,`); - w.write(`} from "./node.infrastructure.ts";`); -} - -function emitRemoteNodeList(w: CodeWriter) { - w.write(`export class RemoteNodeList extends Array implements NodeArray {`); - w.write(` // Inherited Array methods like filter/map/slice use ArraySpeciesCreate, which would`); - w.write(` // otherwise call \`new RemoteNodeList(length)\` and fail. Produce a plain Array instead.`); - w.write(` static get [Symbol.species](): ArrayConstructor {`); - w.write(` return Array;`); - w.write(` }`); - w.write(``); - w.write(` parent: RemoteNode;`); - w.write(` transformFlags: number = 0;`); - w.write(` protected view: DataView;`); - w.write(` protected index: number;`); - w.write(` private _byteIndex: number;`); - w.write(` // Cursor memoizing the last resolved (logical index -> node index) so that`); - w.write(` // sequential forward access (index loops and list[i], plus forEach/map/`); - w.write(` // reduce/filter) resumes instead of re-walking from the head, turning an`); - w.write(` // O(n) pass over the whole list from O(n^2) into O(n).`); - w.write(` private _cursorIndex: number = 0;`); - w.write(` private _cursorNodeIndex: number = 0;`); - w.write(``); - w.write(` get pos(): number {`); - w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_POS, true);`); - w.write(` }`); - w.write(``); - w.write(` get end(): number {`); - w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_END, true);`); - w.write(` }`); - w.write(``); - w.write(` get next(): number {`); - w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true);`); - w.write(` }`); - w.write(``); - w.write(` get firstNodeIndex(): number {`); - w.write(` return this.index + 1;`); - w.write(` }`); - w.write(``); - w.write(` private get data(): number {`); - w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true);`); - w.write(` }`); - w.write(``); - w.write(` get hasTrailingComma(): boolean {`); - w.write(` return (this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true) & 1) !== 0;`); - w.write(` }`); - w.write(``); - w.write(` private sourceFile: SourceFileInfo;`); - w.write(``); - w.write(` constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) {`); - w.write(` super(view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_DATA, true));`); - w.write(` this.view = view;`); - w.write(` this.index = index;`); - w.write(` this.parent = parent;`); - w.write(` this.sourceFile = sourceFile;`); - w.write(` this._byteIndex = offsetNodes + index * NODE_LEN;`); - w.write(` this._cursorNodeIndex = index + 1;`); - w.write(``); - w.write(` const length = this.length;`); - w.write(` for (let i = 16; i < length; i++) {`); - w.write(` Object.defineProperty(this, i, {`); - w.write(` get() {`); - w.write(` return this.at(i);`); - w.write(` },`); - w.write(` });`); - w.write(` }`); - w.write(` }`); - - // Emit indexed getters 0..15 - for (let i = 0; i < 16; i++) { - w.write(` get ${i}(): RemoteNode {`); - w.write(` return this.at(${i});`); - w.write(` }`); - } - - w.write(``); - w.write(` *[Symbol.iterator](): ArrayIterator {`); - w.write(` if (!this.length) return;`); - w.write(` let next = this.index + 1;`); - w.write(` while (next) {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` next = child.next;`); - w.write(` yield child as RemoteNode;`); - w.write(` }`); - w.write(` }`); - w.write(``); - w.write(` forEachNode(visitNode: (node: RemoteNode) => T | undefined): T | undefined {`); - w.write(` if (!this.length) return;`); - w.write(` let next = this.index + 1;`); - w.write(` while (next) {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` next = child.next;`); - w.write(` const result = visitNode(child as RemoteNode);`); - w.write(` if (result) return result;`); - w.write(` }`); - w.write(` }`); - w.write(``); - w.write(` at(index: number): RemoteNode {`); - w.write(` if (!Number.isInteger(index)) {`); - w.write(` return undefined!;`); - w.write(` }`); - w.write(` if (index >= this.data || (index < 0 && -index > this.data)) {`); - w.write(` return undefined!;`); - w.write(` }`); - w.write(` if (index < 0) {`); - w.write(` index = this.length + index;`); - w.write(` }`); - w.write(` // Walk the raw buffer following each node's \`next\` pointer instead of`); - w.write(` // materializing every intermediate RemoteNode just to read it. Resume from`); - w.write(` // the memoized cursor when possible so sequential forward access is O(1)`); - w.write(` // amortized (a full in-order pass is O(n) rather than O(n^2)).`); - w.write(` const offsetNodes = this.sourceFile._offsetNodes;`); - w.write(` let i: number;`); - w.write(` let next: number;`); - w.write(` if (index >= this._cursorIndex) {`); - w.write(` i = this._cursorIndex;`); - w.write(` next = this._cursorNodeIndex;`); - w.write(` }`); - w.write(` else {`); - w.write(` i = 0;`); - w.write(` next = this.index + 1;`); - w.write(` }`); - w.write(` for (; i < index; i++) {`); - w.write(` next = this.view.getUint32(offsetNodes + next * NODE_LEN + NODE_OFFSET_NEXT, true);`); - w.write(` }`); - w.write(` this._cursorIndex = index;`); - w.write(` this._cursorNodeIndex = next;`); - w.write(` return this.getOrCreateChildAtNodeIndex(next) as RemoteNode;`); - w.write(` }`); - w.write(``); - w.write(` getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList {`); - w.write(` let child = this.sourceFile.nodes[index];`); - w.write(` if (!child) {`); - w.write(` const kind = this.view.getUint32(this.sourceFile._offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true);`); - w.write(` if (kind === KIND_NODE_LIST) {`); - w.write(` throw new Error("NodeList cannot directly contain another NodeList");`); - w.write(` }`); - w.write(` const sf = this.sourceFile;`); - w.write(` child = new RemoteNode(this.view, index, this.parent, sf, sf._offsetNodes);`); - w.write(` sf.nodes[index] = child;`); - w.write(` sf._timing?.recordMaterialization();`); - w.write(` }`); - w.write(` return child;`); - w.write(` }`); - w.write(``); - w.write(` __print(): string {`); - w.write(` const result = [];`); - w.write(` result.push(\`kind: NodeList\`);`); - w.write(` result.push(\`index: \${this.index}\`);`); - w.write(` result.push(\`byteIndex: \${this._byteIndex}\`);`); - w.write(` result.push(\`length: \${this.length}\`);`); - w.write(` return result.join("\\n");`); - w.write(` }`); - w.write(`}`); -} - -function emitRemoteNodeClassOpen(w: CodeWriter) { - w.write(`export class RemoteNode extends RemoteNodeBase implements Node {`); - w.write(` protected static NODE_LEN: number = NODE_LEN;`); - w.write(` protected override get sourceFile(): SourceFileInfo {`); - w.write(` return this._sourceFile;`); - w.write(` }`); - w.write(` protected _sourceFile: SourceFileInfo;`); - w.write(` get id(): string {`); - w.write(` return \`\${this.index}.\${this.kind}.\${this.sourceFile.path}\`;`); - w.write(` }`); - w.write(``); - w.write(` constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) {`); - w.write(` super(view, index, parent, offsetNodes + index * NODE_LEN);`); - w.write(` this._sourceFile = sourceFile;`); - w.write(` }`); - w.write(``); - w.write(` forEachChild(visitNode: (node: Node) => T, visitList?: (list: NodeArray) => T): T | undefined {`); - w.write(` if (this.hasChildren()) {`); - w.write(` let next = this.index + 1;`); - w.write(` do {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` if (child instanceof RemoteNodeList) {`); - w.write(` if (visitList) {`); - w.write(` const result = visitList(child);`); - w.write(` if (result) {`); - w.write(` return result;`); - w.write(` }`); - w.write(` }`); - w.write(` else {`); - w.write(` const result = child.forEachNode(visitNode);`); - w.write(` if (result) {`); - w.write(` return result;`); - w.write(` }`); - w.write(` }`); - w.write(` }`); - w.write(` else if (child.kind !== SyntaxKind.JSDoc) {`); - w.write(` const result = visitNode(child);`); - w.write(` if (result) {`); - w.write(` return result;`); - w.write(` }`); - w.write(` }`); - w.write(` next = child.next;`); - w.write(` }`); - w.write(` while (next);`); - w.write(` }`); - w.write(` }`); - w.write(``); - w.write(` *childrenIter(): Generator {`); - w.write(` if (this.hasChildren()) {`); - w.write(` let next = this.index + 1;`); - w.write(` do {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` if (child instanceof RemoteNodeList) {`); - w.write(` if (child.length) {`); - w.write(` let listNext = child.firstNodeIndex;`); - w.write(` while (listNext) {`); - w.write(` const node = child.getOrCreateChildAtNodeIndex(listNext) as RemoteNode;`); - w.write(` listNext = node.next;`); - w.write(` const result = yield node;`); - w.write(` if (result) {`); - w.write(` return result;`); - w.write(` }`); - w.write(` }`); - w.write(` }`); - w.write(` }`); - w.write(` else if (child.kind !== SyntaxKind.JSDoc) {`); - w.write(` const result = yield child;`); - w.write(` if (result) {`); - w.write(` return result;`); - w.write(` }`); - w.write(` }`); - w.write(` next = child.next;`); - w.write(` }`); - w.write(` while (next);`); - w.write(` }`); - w.write(` }`); - w.write(``); - w.write(` get jsDoc(): readonly Node[] | undefined {`); - w.write(` if (!this.hasChildren()) {`); - w.write(` return undefined;`); - w.write(` }`); - w.write(` let result: Node[] | undefined;`); - w.write(` let next = this.index + 1;`); - w.write(` do {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` if (!(child instanceof RemoteNodeList) && child.kind === SyntaxKind.JSDoc) {`); - w.write(` (result ??= []).push(child);`); - w.write(` }`); - w.write(` next = child.next;`); - w.write(` }`); - w.write(` while (next);`); - w.write(` return result;`); - w.write(` }`); - w.write(``); - w.write(` getSourceFile(): SourceFile {`); - w.write(` return this.sourceFile as unknown as SourceFile;`); - w.write(` }`); - w.write(``); - w.write(` getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number {`); - w.write(` return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment);`); - w.write(` }`); - w.write(``); - w.write(` getFullStart(): number {`); - w.write(` return this.pos;`); - w.write(` }`); - w.write(``); - w.write(` getEnd(): number {`); - w.write(` return this.end;`); - w.write(` }`); - w.write(``); - w.write(` getWidth(sourceFile?: SourceFile): number {`); - w.write(` return this.getEnd() - this.getStart(sourceFile);`); - w.write(` }`); - w.write(``); - w.write(` getFullWidth(): number {`); - w.write(` return this.end - this.pos;`); - w.write(` }`); - w.write(``); - w.write(` getLeadingTriviaWidth(sourceFile?: SourceFile): number {`); - w.write(` return this.getStart(sourceFile) - this.pos;`); - w.write(` }`); - w.write(``); - w.write(` getFullText(sourceFile?: SourceFile): string {`); - w.write(` return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end);`); - w.write(` }`); - w.write(``); - w.write(` getText(sourceFile?: SourceFile): string {`); - w.write(` sourceFile ??= this.getSourceFile();`); - w.write(` return sourceFile.text.substring(this.getStart(sourceFile), this.end);`); - w.write(` }`); - w.write(``); - w.write(` getChildCount(sourceFile?: SourceFile): number {`); - w.write(` return this.getChildren(sourceFile).length;`); - w.write(` }`); - w.write(``); - w.write(` getChildAt(index: number, sourceFile?: SourceFile): Node {`); - w.write(` return this.getChildren(sourceFile)[index];`); - w.write(` }`); - w.write(``); - w.write(` getChildren(sourceFile?: SourceFile): readonly Node[] {`); - w.write(` return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - w.write(` }`); - w.write(``); - w.write(` getFirstToken(sourceFile?: SourceFile): Node | undefined {`); - w.write(` return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - w.write(` }`); - w.write(``); - w.write(` getLastToken(sourceFile?: SourceFile): Node | undefined {`); - w.write(` return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - w.write(` }`); - w.write(``); - w.write(` protected getString(index: number): string {`); - w.write(` const offsetStringTableOffsets = this.sourceFile._offsetStringTableOffsets;`); - w.write(` const start = this.view.getUint32(offsetStringTableOffsets + index * 4, true);`); - w.write(` const end = this.view.getUint32(offsetStringTableOffsets + (index + 1) * 4, true);`); - w.write(` const offsetStringTable = this.sourceFile._offsetStringTable;`); - w.write(` const text = new Uint8Array(this.view.buffer, this.view.byteOffset + offsetStringTable + start, end - start);`); - w.write(` return this.sourceFile._decoder.decode(text);`); - w.write(` }`); - w.write(``); - w.write(` private getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList {`); - w.write(` let child = this.sourceFile.nodes[index];`); - w.write(` if (!child) {`); - w.write(` const sf = this.sourceFile;`); - w.write(` const offsetNodes = sf._offsetNodes;`); - w.write(` const kind = this.view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true);`); - w.write(` child = kind === KIND_NODE_LIST`); - w.write(` ? new RemoteNodeList(this.view, index, this, sf, offsetNodes)`); - w.write(` : new RemoteNode(this.view, index, this, sf, offsetNodes);`); - w.write(` sf.nodes[index] = child;`); - w.write(` sf._timing?.recordMaterialization();`); - w.write(` }`); - w.write(` return child;`); - w.write(` }`); - w.write(``); - w.write(` private hasChildren(): boolean {`); - w.write(` if (this._byteIndex >= this.view.byteLength - NODE_LEN) {`); - w.write(` return false;`); - w.write(` }`); - w.write(` const nextNodeParent = this.view.getUint32(this.sourceFile._offsetNodes + (this.index + 1) * NODE_LEN + NODE_OFFSET_PARENT, true);`); - w.write(` return nextNodeParent === this.index;`); - w.write(` }`); - w.write(``); - w.write(` private getNamedChild(propertyName: string): RemoteNode | RemoteNodeList | undefined {`); - w.write(` const kind = this.kind;`); - w.write(` const propertyNames = childProperties[kind];`); - w.write(` if (!propertyNames) {`); - w.write(` return undefined;`); - w.write(` }`); - w.write(``); - w.write(` const order = propertyNames.indexOf(propertyName);`); - w.write(` if (order === -1) {`); - w.write(` return undefined;`); - w.write(` }`); - w.write(` return this.getChildAtOrder(order);`); - w.write(` }`); - w.write(``); - w.write(` private getChildAtOrder(order: number): RemoteNode | RemoteNodeList | undefined {`); - w.write(` if (!this.hasChildren()) return undefined;`); - w.write(` const mask = this.childMask;`); - w.write(` if (!(mask & (1 << order))) {`); - w.write(` // Property is not present`); - w.write(` return undefined;`); - w.write(` }`); - w.write(``); - w.write(` // The property index is \`order\`, minus the number of zeros in the mask that are in bit positions less`); - w.write(` // than the \`order\`th bit. Example:`); - w.write(` //`); - w.write(` // This is a MethodDeclaration with mask 0b01110101. The possible properties are`); - w.write(` // ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"]`); - w.write(` // (it has modifiers, name, typeParameters, parameters, and type).`); - w.write(` //`); - w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); - w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); - w.write(` // | Value | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |`); - w.write(` // | Name | body | type | parameters | typeParameters | postfixToken | name | asteriskToken | modifiers |`); - w.write(` //`); - w.write(` // We are trying to get the index of "parameters" (bit = 5).`); - w.write(` // First, set all the more significant bits to 1:`); - w.write(` //`); - w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); - w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); - w.write(` // | Value | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |`); - w.write(` //`); - w.write(` // Then, flip the bits:`); - w.write(` //`); - w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); - w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); - w.write(` // | Value | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |`); - w.write(` //`); - w.write(` // Counting the 1s gives us the number of *missing properties* before the \`order\`th property. If every property`); - w.write(` // were present, we would have \`parameters = children[5]\`, but since \`postfixToken\` and \`astersiskToken\` are`); - w.write(` // missing, we have \`parameters = children[5 - 2]\`.`); - w.write(` const propertyIndex = order - popcount8[~(mask | ((0xff << order) & 0xff)) & 0xff];`); - w.write(` let childIndex = this.index + 1;`); - w.write(` for (let i = 0; i < propertyIndex; i++) {`); - w.write(` // Walk through children via their \`next\` pointer until we get to the right property index`); - w.write(` childIndex = this.view.getUint32(this.sourceFile._offsetNodes + childIndex * NODE_LEN + NODE_OFFSET_NEXT, true);`); - w.write(` }`); - w.write(` return this.getOrCreateChildAtNodeIndex(childIndex);`); - w.write(` }`); - w.write(``); - w.write(` __print(): string {`); - w.write(` const result = [];`); - w.write(` result.push(\`index: \${this.index}\`);`); - w.write(` result.push(\`byteIndex: \${this._byteIndex}\`);`); - w.write(` result.push(\`kind: \${SyntaxKind[this.kind]}\`);`); - w.write(` result.push(\`pos: \${this.pos}\`);`); - w.write(` result.push(\`end: \${this.end}\`);`); - w.write(` result.push(\`next: \${this.next}\`);`); - w.write(` result.push(\`parent: \${this.parentIndex}\`);`); - w.write(` result.push(\`data: \${this.data.toString(2).padStart(32, "0")}\`);`); - w.write(` const dataType = this.dataType === NODE_DATA_TYPE_CHILDREN ? "children" :`); - w.write(` this.dataType === NODE_DATA_TYPE_STRING ? "string" :`); - w.write(` "extended";`); - w.write(` result.push(\`dataType: \${dataType}\`);`); - w.write(` if (this.dataType === NODE_DATA_TYPE_CHILDREN) {`); - w.write(` result.push(\`childMask: \${this.childMask.toString(2).padStart(8, "0")}\`);`); - w.write(` result.push(\`childProperties: \${childProperties[this.kind]?.join(", ")}\`);`); - w.write(` }`); - w.write(` return result.join("\\n");`); - w.write(` }`); - w.write(``); - w.write(` __printChildren(): string {`); - w.write(` const result = [];`); - w.write(` let next = this.index + 1;`); - w.write(` while (next) {`); - w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); - w.write(` next = child.next;`); - w.write(` result.push(child.__print());`); - w.write(` }`); - w.write(` return result.join("\\n\\n");`); - w.write(` }`); - w.write(``); - w.write(` __printSubtree(): string {`); - w.write(` const result = [this.__print()];`); - w.write(` this.forEachChild(function visitNode(node) {`); - w.write(` result.push((node as RemoteNode).__print());`); - w.write(` node.forEachChild(visitNode);`); - w.write(` }, visitList => {`); - w.write(` result.push((visitList as RemoteNodeList).__print());`); - w.write(` });`); - w.write(` return result.join("\\n\\n");`); - w.write(` }`); -} - -function emitTemplateFlagsGetter(w: CodeWriter) { - // templateFlags — from extended data (not a commonData union) - w.write(` get templateFlags(): number | undefined {`); - w.write(` switch (this.kind) {`); - w.write(` case SyntaxKind.TemplateHead:`); - w.write(` case SyntaxKind.TemplateMiddle:`); - w.write(` case SyntaxKind.TemplateTail:`); - w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); - w.write(` return this.view.getUint32(extendedDataOffset + 8, true);`); - w.write(` }`); - w.write(` }`); -} - -function emitTokenFlagsGetter(w: CodeWriter) { - // tokenFlags — from extended data for literal kinds that store TokenFlags - w.write(` get tokenFlags(): number {`); - w.write(` switch (this.kind) {`); - w.write(` case SyntaxKind.StringLiteral:`); - w.write(` case SyntaxKind.NumericLiteral:`); - w.write(` case SyntaxKind.BigIntLiteral:`); - w.write(` case SyntaxKind.RegularExpressionLiteral:`); - w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); - w.write(` return this.view.getUint32(extendedDataOffset + 4, true);`); - w.write(` default:`); - w.write(` return 0;`); - w.write(` }`); - w.write(` }`); -} - -function emitStringGetters(w: CodeWriter, stringTextKinds: string[], extendedTextKinds: string[]) { - // text getter — string data kinds vs extended data kinds - w.write(` get text(): string | undefined {`); - w.write(` switch (this.kind) {`); - for (const k of stringTextKinds) { - w.write(` case SyntaxKind.${k}:`); - } - w.write(` {`); - w.write(` const stringIndex = this.data & NODE_STRING_INDEX_MASK;`); - w.write(` return this.getString(stringIndex);`); - w.write(` }`); - for (const k of extendedTextKinds) { - w.write(` case SyntaxKind.${k}:`); - } - w.write(` {`); - w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); - w.write(` const stringIndex = this.view.getUint32(extendedDataOffset, true);`); - w.write(` return this.getString(stringIndex);`); - w.write(` }`); - w.write(` }`); - w.write(` }`); - w.write(``); - // rawText — template kinds only - w.write(` get rawText(): string | undefined {`); - w.write(` switch (this.kind) {`); - w.write(` case SyntaxKind.TemplateHead:`); - w.write(` case SyntaxKind.TemplateMiddle:`); - w.write(` case SyntaxKind.TemplateTail:`); - w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); - w.write(` const stringIndex = this.view.getUint32(extendedDataOffset + 4, true);`); - w.write(` return this.getString(stringIndex);`); - w.write(` }`); - w.write(` }`); -} - -function emitExtendedDataGetters(w: CodeWriter) { - // SourceFile-specific extended data getters live on RemoteSourceFile in node.ts. - // Only non-SourceFile extended data getters are emitted here. -} - -function emitRemoteNodeClassClose(w: CodeWriter) { - w.write(` // ═══ Other property getters ═══`); - w.write(``); - w.write(` get flags(): number {`); - w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true);`); - w.write(` }`); - w.write(``); - w.write(` get modifierFlags(): ModifierFlags {`); - w.write(` const mods = this.modifiers;`); - w.write(` if (!mods) return ModifierFlags.None;`); - w.write(` let flags: ModifierFlags = ModifierFlags.None;`); - w.write(` for (const mod of mods) {`); - w.write(` flags |= modifierToFlag(mod.kind);`); - w.write(` }`); - w.write(` return flags;`); - w.write(` }`); - w.write(`}`); -} - -// ═══════════════════════════════════════════════════════════════════════════ -// Main: generate and write all files -// ═══════════════════════════════════════════════════════════════════════════ - -function writeAndFormat(filePath: string, generate: () => string, force: boolean) { - const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); - if (generated.isCurrent(force)) return; - generated.write(generate() + "\n"); - try { - formatFilesSync([filePath]); - generated.markCurrent(); - } - catch { - console.warn(`Warning: formatter failed for ${filePath}`); - } - console.log(`Wrote ${filePath}`); -} - -export default function main(force = false) { - console.log("Generating encoder/decoder code..."); - - writeAndFormat( - path.join(ROOT, "tsc/internal/api/encoder/encoder_generated.go"), - generateGoEncoder, - force, - ); - - writeAndFormat( - path.join(ROOT, "tsc/internal/api/encoder/decoder_generated.go"), - generateGoDecoder, - force, - ); - - writeAndFormat( - path.join(ROOT, "packages/typescript/src/api/node/protocol.generated.ts"), - generateTSProtocol, - force, - ); - - writeAndFormat( - path.join(ROOT, "packages/typescript/src/api/node/encoder.generated.ts"), - generateTSEncoder, - force, - ); - - writeAndFormat( - path.join(ROOT, "packages/typescript/src/api/node/node.generated.ts"), - generateTSNodeGenerated, - force, - ); - - console.log("Done!"); -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - main(parseGeneratorArgs({}).force); -} +/** + * Encoder/decoder code generator: reads tools/scripts/tsc/ast.json and produces binary + * encoding/decoding code for Go and TypeScript. + * + * Usage: node tools/scripts/tsc/generate-encoder.ts + * + * Generates: + * - internal/api/encoder/encoder_generated.go + * - internal/api/encoder/decoder_generated.go + * - packages/typescript/src/api/node/protocol.generated.ts + */ + +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import { GeneratedFile } from "../gen/generatedFile.mts"; +import { + formatFilesSync, + parseGeneratorArgs, + repoRoot as ROOT, +} from "../gen/utils.mts"; +import type { + KindType, + MemberInfo, + NodeType, +} from "./schema.ts"; +import { api } from "./schema.ts"; + +// ═══════════════════════════════════════════════════════════════════════════ +// Code writer +// ═══════════════════════════════════════════════════════════════════════════ + +class CodeWriter { + private lines: string[] = []; + private indent = 0; + private indentStr: string; + + constructor(indentStr = "\t") { + this.indentStr = indentStr; + } + + write(line = "") { + if (line === "") this.lines.push(""); + else this.lines.push(this.indentStr.repeat(this.indent) + line); + } + + push() { + this.indent++; + } + pop() { + this.indent--; + } + + toString(): string { + return this.lines.join("\n"); + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Node classification +// ═══════════════════════════════════════════════════════════════════════════ + +/** Encoder-visible members: excludes noTS and noGo members. */ +function schemaMembers(node: NodeType): MemberInfo[] { + return node.members.filter(m => !m.noTS && !m.noGo); +} + +/** Whether a member is a child that should be encoded in the binary format. */ +function isEncodedChild(m: MemberInfo): boolean { + return m.isChild() && !m.noTS && !m.noGo; +} + +type ChildType = "node" | "nodeList" | "rawNodeList" | "modifierList"; + +/** Determine the child type for an encoded child member. */ +function childType(m: MemberInfo): ChildType { + if (m.listKind === "ModifierList") return "modifierList"; + if (m.listKind === "NodeList") return "nodeList"; + if (m.type.baseKind() === "list" && m.listKind === "raw") return "rawNodeList"; + return "node"; +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Common data analysis +// ═══════════════════════════════════════════════════════════════════════════ + +/** + * Returns true if the member is a NodeFlags member. NodeFlags are already + * stored verbatim in every node's flags field, so they do not need to be + * redundantly encoded in the commonData bits. + */ +function isNodeFlagsMember(m: MemberInfo): boolean { + const dt = m.declaredType; + return (dt.kind === "primitive" && dt.name === "NodeFlags") || + (!!m.bitmask && m.bitmask.startsWith("NodeFlags")); +} + +/** Returns the bool members that can be auto-encoded in the commonData (1 bit each). */ +function getAutoBoolBits(node: NodeType): MemberInfo[] { + // If any non-auto-encodable data exists, all data encoding is hand-written (including bools). + if (needsHandWrittenCommonData(node)) return []; + const members = schemaMembers(node); + return members.filter(m => { + if (m.isChild() || m.isKindParam()) return false; + const dt = m.declaredType; + return dt.kind === "primitive" && dt.name === "bool"; + }); +} + +/** Returns the SyntaxKind union members that can be auto-encoded. */ +function getAutoUnionBits(node: NodeType): MemberInfo[] { + if (needsHandWrittenCommonData(node)) return []; + const members = schemaMembers(node); + return members.filter(m => { + if (m.isChild() || m.isKindParam()) return false; + return isSyntaxKindUnion(m); + }); +} + +/** Check if a member's type is a union of SyntaxKind values (auto-encodable). */ +function isSyntaxKindUnion(m: MemberInfo): boolean { + const dt = resolveUnion(m.declaredType); + if (!dt || dt.kind !== "union") return false; + return dt.types.every(t => t.kind === "kind"); +} + +/** Resolve through aliases to find an underlying union type, if any. */ +function resolveUnion(dt: import("./schema.ts").Type): import("./schema.ts").Type | undefined { + if (dt.kind === "union") return dt; + if (dt.kind === "alias") return resolveUnion(dt.resolved); + return undefined; +} + +/** Number of bits needed to encode a SyntaxKind union member. */ +function unionBitWidth(m: MemberInfo): number { + const dt = resolveUnion(m.declaredType); + if (!dt || dt.kind !== "union") return 0; + // Optional unions need an extra index for "absent" (index 0 = absent) + const count = m.optional ? dt.types.length + 1 : dt.types.length; + return Math.ceil(Math.log2(count)); +} + +/** + * Returns true if the node has non-bool, non-string data members whose encoding + * format cannot be automatically inferred. Such nodes delegate their entire + * commonData encoding/decoding to hand-written functions. + * + * SyntaxKind union members are auto-encodable and do NOT require hand-written functions. + */ +function needsHandWrittenCommonData(node: NodeType): boolean { + if (node.handWritten) return false; // extended data nodes handle everything + const members = schemaMembers(node); + return members.some(m => { + if (m.isChild() || m.isKindParam()) return false; + const dt = m.declaredType; + if (dt.kind === "primitive" && dt.name === "bool") return false; + if (dt.kind === "primitive" && dt.name === "string") return false; + if (isSyntaxKindUnion(m)) return false; + if (isNodeFlagsMember(m)) return false; + return true; + }); +} + +/** + * Returns all data members (non-child, non-kindParam, non-string) for a node + * that needs hand-written commonData. Includes bools, since the hand-written + * function controls the entire 6-bit layout. + */ +function getHandWrittenDataMembers(node: NodeType): MemberInfo[] { + const members = schemaMembers(node); + return members.filter(m => { + if (m.isChild() || m.isKindParam()) return false; + const dt = m.declaredType; + if (dt.kind === "primitive" && dt.name === "string") return false; + if (isNodeFlagsMember(m)) return false; + return true; + }); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Data type classification +// ═══════════════════════════════════════════════════════════════════════════ + +type DataType = "string" | "children" | "extended"; + +function classifyDataType(node: NodeType): DataType { + if (node.handWritten) return "extended"; + const members = schemaMembers(node); + const stringMembers = members.filter(m => + !m.isChild() && !m.isKindParam() && + m.declaredType.kind === "primitive" && m.declaredType.name === "string" + ); + if (stringMembers.length > 1) return "extended"; + if (stringMembers.length === 1) { + // If the node also has non-bool data members, TokenFlags etc. won't fit in + // 6 common data bits → must use extended data. + if (needsHandWrittenCommonData(node)) return "extended"; + return "string"; + } + return "children"; +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Go factory call helpers +// ═══════════════════════════════════════════════════════════════════════════ + +/** Get all SyntaxKind Go constant names for a node (prefixed with `ast.`). */ +function getGoKinds(node: NodeType): string[] { + return node.allKinds().map(k => `ast.${k.formatGoConstant()}`); +} + +/** Get all SyntaxKind names for a node in TS (without prefix). */ +function getTSKinds(node: NodeType): string[] { + return node.allKinds().map(k => k.name); +} + +/** Get the Go factory method name (e.g., "NewIfStatement"). */ +function goFactoryName(node: NodeType): string { + return `New${node.name}`; +} + +/** Get the Go "As*" cast method name (e.g., "AsIfStatement"). */ +function goCastName(node: NodeType): string { + return `As${node.name}`; +} + +/** Get the Go param name, avoiding Go keywords. */ +function goParamName(m: MemberInfo): string { + return m.goParamName(); +} + +/** Get the Go accessor for a member on a cast struct (e.g., "n.IsTypeOnly", "n.Name()"). */ +function goFieldAccess(m: MemberInfo): string { + if (m.private) return `n.${api.capitalize(m.name)}()`; + return `n.${m.name}`; +} + +/** Get the default Go value for a non-encoded factory parameter. */ +function goDefaultValue(m: MemberInfo): string { + if (m.isChild()) return "nil"; + const dt = m.declaredType; + if (dt.kind === "primitive") { + switch (dt.name) { + case "bool": + return "false"; + case "int": + return "0"; + case "string": + return `""`; + case "NodeFlags": + return "0"; + case "TokenFlags": + return "0"; + case "ModifierFlags": + return "0"; + } + } + if (dt.baseKind() === "kind") return "0"; + return "nil"; +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Encoder node info (per-node analysis) +// ═══════════════════════════════════════════════════════════════════════════ + +interface EncoderNodeInfo { + node: NodeType; + dataType: DataType; + /** Encoded child members in visitor order. */ + childProps: MemberInfo[]; + /** Bool members auto-encoded in commonData (empty if hand-written). */ + autoBoolBits: MemberInfo[]; + /** SyntaxKind union members auto-encoded in commonData. */ + autoUnionBits: MemberInfo[]; + /** Whether commonData encoding is delegated to a hand-written function. */ + handWrittenCommonData: boolean; + /** The text member for string nodes. */ + textMember?: MemberInfo; + /** Whether this node has a Kind parameter in the factory. */ + kindMember?: MemberInfo; + /** All factory parameters, including non-encoded ones. */ + factoryMembers: MemberInfo[]; +} + +function analyzeNode(node: NodeType): EncoderNodeInfo { + const dataType = classifyDataType(node); + const members = schemaMembers(node); + const childProps = members.filter(m => isEncodedChild(m)); + const handWrittenCD = needsHandWrittenCommonData(node); + const autoBoolBits = getAutoBoolBits(node); + const autoUnionBits = getAutoUnionBits(node); + const kindMember = members.find(m => m.isKindParam()); + const textMember = dataType === "string" + ? members.find(m => + !m.isChild() && !m.isKindParam() && + m.declaredType.kind === "primitive" && m.declaredType.name === "string" + ) + : undefined; + // Factory members include all non-noFactory members (even noTS ones), + // since the factory signature is determined by generate-go-ast.ts. + const factoryMembers = node.members.filter(m => !m.noFactory); + + return { + node, + dataType, + childProps, + autoBoolBits, + autoUnionBits, + handWrittenCommonData: handWrittenCD, + textMember, + kindMember, + factoryMembers, + }; +} + +/** + * Compute the bit layout for all auto-encoded data members of a node. + * Bools get 1 bit each, SyntaxKind unions get ceil(log2(N)) bits. + * Returns entries with the bit position (relative to bit 24) and width. + */ +function getAutoEncodedLayout(info: EncoderNodeInfo): { member: MemberInfo; bitPos: number; bitWidth: number; }[] { + const layout: { member: MemberInfo; bitPos: number; bitWidth: number; }[] = []; + let bitPos = 0; + for (const m of info.autoBoolBits) { + layout.push({ member: m, bitPos, bitWidth: 1 }); + bitPos++; + } + for (const m of info.autoUnionBits) { + const width = unionBitWidth(m); + layout.push({ member: m, bitPos, bitWidth: width }); + bitPos += width; + } + return layout; +} + +/** Check if a node has any auto-encoded data members (bools or unions). */ +function hasAutoEncodedData(info: EncoderNodeInfo): boolean { + return info.autoBoolBits.length > 0 || info.autoUnionBits.length > 0; +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Go Encoder Generation +// ═══════════════════════════════════════════════════════════════════════════ + +function generateGoEncoder(): string { + const w = new CodeWriter(); + w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); + w.write(""); + w.write("package encoder"); + w.write(""); + w.write("import ("); + w.push(); + w.write('"fmt"'); + w.write(""); + w.write('"github.com/microsoft/TypeScript/tsc/internal/ast"'); + w.pop(); + w.write(")"); + w.write(""); + + generateGoGetNodeDataType(w); + generateGoGetChildrenPropertyMask(w); + generateGoGetNodeCommonData(w); + generateGoRecordNodeStrings(w); + generateGoRecordExtendedData(w); + + return w.toString(); +} + +function generateGoGetNodeDataType(w: CodeWriter) { + w.write("func getNodeDataType(node *ast.Node) uint32 {"); + w.push(); + w.write("switch node.Kind {"); + + const stringKinds: string[] = []; + const extendedKinds: string[] = []; + + for (const node of api.nodes()) { + const info = analyzeNode(node); + const kinds = getGoKinds(node); + + if (info.dataType === "string") { + stringKinds.push(...kinds); + } + else if (info.dataType === "extended") { + extendedKinds.push(...kinds); + } + } + + if (stringKinds.length > 0) { + w.write(`case ${stringKinds.join(",\n\t\t")}:`); + w.push(); + w.write("return NodeDataTypeString"); + w.pop(); + } + if (extendedKinds.length > 0) { + w.write(`case ${extendedKinds.join(",\n\t\t")}:`); + w.push(); + w.write("return NodeDataTypeExtendedData"); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write("return NodeDataTypeChildren"); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoGetChildrenPropertyMask(w: CodeWriter) { + w.write("func getChildrenPropertyMask(node *ast.Node) uint8 {"); + w.push(); + w.write("switch node.Kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "extended") continue; + if (info.childProps.length === 0) continue; + + const kinds = getGoKinds(node); + const castName = goCastName(node); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`n := node.${castName}()`); + + const parts: string[] = []; + for (let i = 0; i < info.childProps.length; i++) { + const m = info.childProps[i]; + const ct = childType(m); + let check: string; + if (ct === "modifierList") { + check = `hasModifiers(n.Modifiers())`; + } + else if (ct === "nodeList") { + check = `${goFieldAccess(m)} != nil`; + } + else if (ct === "rawNodeList") { + check = `len(${goFieldAccess(m)}) > 0`; + } + else { + check = `${goFieldAccess(m)} != nil`; + } + parts.push(`(boolToByte(${check}) << ${i})`); + } + w.write(`return ${parts.join(" | ")}`); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write("return 0"); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoGetNodeCommonData(w: CodeWriter) { + w.write("func getNodeCommonData(node *ast.Node) uint32 {"); + w.push(); + w.write("switch node.Kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "extended") continue; + + if (info.handWrittenCommonData) { + // Delegate to hand-written function for all non-bool data members. + const kinds = getGoKinds(node); + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`return getNodeCommonData_${node.name}(node)`); + w.pop(); + } + else if (hasAutoEncodedData(info)) { + const kinds = getGoKinds(node); + const castName = goCastName(node); + const layout = getAutoEncodedLayout(info); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`n := node.${castName}()`); + + const parts: string[] = []; + for (const { member: m, bitPos, bitWidth } of layout) { + if (!isSyntaxKindUnion(m)) { + // Bool or bitmask + parts.push(`uint32(boolToByte(${goFieldAccess(m)})) << ${24 + bitPos}`); + } + else { + // SyntaxKind union → index-based encoding + const kinds = unionKindValues(m.declaredType); + const varName = `${goParamName(m)}Idx`; + w.write(`var ${varName} uint32`); + w.write(`switch ${goFieldAccess(m)} {`); + if (m.optional) { + // Optional: 0 = absent, 1..N = values[0]..values[N-1] + for (let i = 0; i < kinds.length; i++) { + w.write(`case ast.${kinds[i].formatGoConstant()}: ${varName} = ${i + 1}`); + } + } + else { + // Non-optional: 0 = values[0] (default), 1..N-1 = values[1]..values[N-1] + for (let i = 1; i < kinds.length; i++) { + w.write(`case ast.${kinds[i].formatGoConstant()}: ${varName} = ${i}`); + } + } + w.write("}"); + parts.push(`${varName} << ${24 + bitPos}`); + } + } + w.write(`return ${parts.join(" | ")}`); + w.pop(); + } + } + + w.write("}"); + w.write("return 0"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoRecordNodeStrings(w: CodeWriter) { + w.write("func recordNodeStrings(node *ast.Node, strs *stringTable) uint32 {"); + w.push(); + w.write("switch node.Kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "string" || !info.textMember) continue; + + const kinds = getGoKinds(node); + const castName = goCastName(node); + const textAccess = info.textMember.private + ? `node.${castName}().${api.capitalize(info.textMember.name)}()` + : `node.${castName}().${info.textMember.name}`; + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`return strs.add(${textAccess}, node.Kind, node.Pos(), node.End())`); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write(`panic(fmt.Sprintf("Unexpected node kind %v", node.Kind))`); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoRecordExtendedData(w: CodeWriter) { + w.write("func recordExtendedData(node *ast.Node, strs *stringTable, positionMap *ast.PositionMap, extendedData *[]byte, structuredData *[]byte) uint32 {"); + w.push(); + w.write("offset := uint32(len(*extendedData))"); + w.write("switch node.Kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "extended") continue; + + const kinds = getGoKinds(node); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`recordExtendedData_${node.name}(node, strs, positionMap, extendedData, structuredData)`); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write(`panic(fmt.Sprintf("unknown extended data node kind %v", node.Kind))`); + w.pop(); + w.write("}"); + w.write("return offset"); + w.pop(); + w.write("}"); + w.write(""); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Go Decoder Generation +// ═══════════════════════════════════════════════════════════════════════════ + +function generateGoDecoder(): string { + const w = new CodeWriter(); + w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); + w.write(""); + w.write("package encoder"); + w.write(""); + w.write("import ("); + w.push(); + w.write('"fmt"'); + w.write(""); + w.write('"github.com/microsoft/TypeScript/tsc/internal/ast"'); + w.pop(); + w.write(")"); + w.write(""); + + generateGoCreateStringNode(w); + generateGoCreateExtendedNode(w); + generateGoCreateChildrenNode(w); + + return w.toString(); +} + +function generateGoCreateStringNode(w: CodeWriter) { + w.write("func (d *astDecoder) createStringNode(kind ast.Kind, data uint32, commonData uint8) (*ast.Node, error) {"); + w.push(); + w.write("strIdx := data & NodeDataStringIndexMask"); + w.write("text := d.getString(strIdx)"); + w.write(""); + w.write("switch kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "string") continue; + + const kinds = getGoKinds(node); + const factoryName = goFactoryName(node); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + + // Decode commonData + const commonVars = emitCommonDataDecode(w, node, info); + + // Build factory args + const args: string[] = []; + for (const m of info.factoryMembers) { + if (m.isKindParam()) { + args.push("kind"); + } + else if (m === info.textMember) { + if (m.listKind === "raw") { + args.push("[]string{text}"); + } + else { + args.push("text"); + } + } + else if (isEncodedChild(m)) { + args.push("nil"); + } + else { + const v = commonVars.get(m); + if (v) { + args.push(v); + } + else { + args.push(goDefaultValue(m)); + } + } + } + + w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write(`return nil, fmt.Errorf("unknown string node kind %v", kind)`); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoCreateExtendedNode(w: CodeWriter) { + w.write("func (d *astDecoder) createExtendedNode(kind ast.Kind, data uint32, childIndices []int, commonData uint8) (*ast.Node, error) {"); + w.push(); + w.write("switch kind {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "extended") continue; + + const kinds = getGoKinds(node); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + // Extended data nodes call hand-written decode functions + w.write(`return d.decodeExtendedData_${node.name}(data, childIndices, commonData)`); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write(`return nil, fmt.Errorf("unknown extended data node kind %v", kind)`); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateGoCreateChildrenNode(w: CodeWriter) { + w.write("func (d *astDecoder) createChildrenNode(kind ast.Kind, data uint32, childIndices []int, commonData uint8) (*ast.Node, error) {"); + w.push(); + w.write("mask := uint8(data & NodeDataChildMask)"); + w.write(""); + w.write("switch kind {"); + + // Build a set of all kinds claimed by specific nodes, so that the most + // specific node (fewest kinds) takes priority for shared kinds. + const kindOwner = new Map(); + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "children") continue; + const kinds = getGoKinds(node); + for (const k of kinds) { + const existing = kindOwner.get(k); + if (!existing || kinds.length < existing.totalKinds) { + kindOwner.set(k, { node, info, totalKinds: kinds.length }); + } + } + } + + // Group kinds by their owning node (deconflicted). + const nodeKinds = new Map(); + for (const [kind, owner] of kindOwner) { + const key = owner.node.name; + if (!nodeKinds.has(key)) nodeKinds.set(key, []); + nodeKinds.get(key)!.push(kind); + } + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType !== "children") continue; + + const kinds = nodeKinds.get(node.name); + if (!kinds || kinds.length === 0) continue; + + if (info.childProps.length === 0) { + emitZeroChildDecoder(w, node, info, kinds); + } + else if (info.childProps.length === 1) { + emitSingleChildDecoder(w, node, info, kinds); + } + else { + emitMultiChildDecoder(w, node, info, kinds); + } + } + + // Default: error for unhandled kinds + w.write("default:"); + w.push(); + w.write(`return nil, fmt.Errorf("unhandled node kind %v with %d children", kind, len(childIndices))`); + w.pop(); + + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Decoder helpers +// ═══════════════════════════════════════════════════════════════════════════ + +/** + * Emits commonData decoding and returns a map of member → Go variable name. + * For auto-bool nodes: decodes bools from bit positions. + * For hand-written nodes: calls decodeNodeCommonData_(commonData). + */ +function emitCommonDataDecode(w: CodeWriter, node: NodeType, info: EncoderNodeInfo): Map { + const vars = new Map(); + + if (info.handWrittenCommonData) { + const dataMembers = getHandWrittenDataMembers(node); + if (dataMembers.length === 0) return vars; + + const varNames = dataMembers.map(m => goParamName(m)); + if (dataMembers.length === 1) { + w.write(`${varNames[0]} := decodeNodeCommonData_${node.name}(commonData)`); + } + else { + w.write(`${varNames.join(", ")} := decodeNodeCommonData_${node.name}(commonData)`); + } + for (let i = 0; i < dataMembers.length; i++) { + vars.set(dataMembers[i], varNames[i]); + } + } + else { + const layout = getAutoEncodedLayout(info); + for (const { member: m, bitPos, bitWidth } of layout) { + const varName = goParamName(m); + if (!isSyntaxKindUnion(m)) { + // Bool or bitmask + w.write(`${varName} := commonData&${1 << bitPos} != 0`); + vars.set(m, varName); + } + else { + // SyntaxKind union → index-based decoding + const kinds = unionKindValues(m.declaredType); + const mask = (1 << bitWidth) - 1; + const indexExpr = bitPos === 0 + ? `commonData & ${mask}` + : `(commonData >> ${bitPos}) & ${mask}`; + if (m.optional) { + // Optional: 0 = absent (KindUnknown), 1..N = values[0]..values[N-1] + w.write(`var ${varName} ast.Kind`); + w.write(`switch ${indexExpr} {`); + for (let i = 0; i < kinds.length; i++) { + w.write(`case ${i + 1}: ${varName} = ast.${kinds[i].formatGoConstant()}`); + } + w.write("}"); + } + else if (kinds.length === 2) { + // Non-optional 2-value: simple if + w.write(`${varName} := ast.${kinds[0].formatGoConstant()}`); + w.write(`if ${indexExpr} != 0 {`); + w.push(); + w.write(`${varName} = ast.${kinds[1].formatGoConstant()}`); + w.pop(); + w.write("}"); + } + else { + // Non-optional N-value: switch + w.write(`var ${varName} ast.Kind`); + w.write(`switch ${indexExpr} {`); + for (let i = 0; i < kinds.length; i++) { + w.write(`case ${i}: ${varName} = ast.${kinds[i].formatGoConstant()}`); + } + w.write("}"); + } + vars.set(m, varName); + } + } + } + + return vars; +} + +function emitZeroChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { + const factoryName = goFactoryName(node); + + w.write(`case ${kinds.join(",\n\t\t")}:`); + w.push(); + + const commonVars = emitCommonDataDecode(w, node, info); + + const args: string[] = []; + for (const m of info.factoryMembers) { + if (m.isKindParam()) { + args.push("kind"); + continue; + } + const v = commonVars.get(m); + if (v) { + args.push(v); + continue; + } + args.push(goDefaultValue(m)); + } + + w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); + w.pop(); +} + +function emitSingleChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { + const cp = info.childProps[0]; + const ct = childType(cp); + const factoryName = goFactoryName(node); + const hasCommonData = info.autoBoolBits.length > 0 || info.handWrittenCommonData; + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + + // Decode commonData if needed + const commonVars = emitCommonDataDecode(w, node, info); + + // Build factory args + const args: string[] = []; + for (const m of info.factoryMembers) { + if (m.isKindParam()) { + args.push("kind"); + } + else if (m === cp) { + if (ct === "rawNodeList") { + w.write(`nodes := d.allocNodeSlice(len(childIndices))`); + w.write("for i, ci := range childIndices {"); + w.push(); + w.write("nodes[i] = d.nodes[ci]"); + w.pop(); + w.write("}"); + args.push("nodes"); + } + else if (ct === "nodeList") { + if (hasCommonData) { + w.write("var list *ast.NodeList"); + w.write("if len(childIndices) > 0 {"); + w.push(); + w.write("list = d.nodeListAt(childIndices[0])"); + w.pop(); + w.write("}"); + args.push("list"); + } + else { + args.push("d.singleNodeListChild(childIndices)"); + } + } + else if (ct === "modifierList") { + w.write("var mods *ast.ModifierList"); + w.write("if len(childIndices) > 0 {"); + w.push(); + w.write("mods = d.modifierListAt(childIndices[0])"); + w.pop(); + w.write("}"); + args.push("mods"); + } + else { + args.push("d.singleChild(childIndices)"); + } + } + else { + const cdVar = commonVars.get(m); + if (cdVar) { + args.push(cdVar); + } + else { + args.push(goDefaultValue(m)); + } + } + } + + w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); + w.pop(); +} + +function emitMultiChildDecoder(w: CodeWriter, node: NodeType, info: EncoderNodeInfo, kinds: string[]) { + const factoryName = goFactoryName(node); + + w.write(`case ${kinds.join(", ")}:`); + w.push(); + + // Decode commonData + const commonVars = emitCommonDataDecode(w, node, info); + + // Child iterator + w.write("it := newChildIter(childIndices)"); + + // Decode each child from mask + const childVars = new Map(); + for (let i = 0; i < info.childProps.length; i++) { + const m = info.childProps[i]; + const ct = childType(m); + const varName = goParamName(m); + let decode: string; + if (ct === "modifierList") { + decode = `d.modifierListAt(it.nextIf(mask, ${i}))`; + } + else if (ct === "rawNodeList") { + const nlVar = `${varName}NL`; + w.write(`${nlVar} := d.nodeListAt(it.nextIf(mask, ${i}))`); + w.write(`var ${varName} []*ast.Node`); + w.write(`if ${nlVar} != nil {`); + w.push(); + w.write(`${varName} = ${nlVar}.Nodes`); + w.pop(); + w.write("}"); + childVars.set(m, varName); + continue; + } + else if (ct === "nodeList") { + decode = `d.nodeListAt(it.nextIf(mask, ${i}))`; + } + else { + decode = `d.nodeAt(it.nextIf(mask, ${i}))`; + } + w.write(`${varName} := ${decode}`); + childVars.set(m, varName); + } + + // Build factory args + const args: string[] = []; + for (const m of info.factoryMembers) { + if (m.isKindParam()) { + args.push("kind"); + continue; + } + const childVar = childVars.get(m); + if (childVar) { + args.push(childVar); + continue; + } + const cdVar = commonVars.get(m); + if (cdVar) { + args.push(cdVar); + continue; + } + args.push(goDefaultValue(m)); + } + + // Handle kindAliases with separate factories + if (node.kindAliases.length > 0 && !info.kindMember) { + for (const alias of node.kindAliases) { + w.write(`if kind == ast.Kind${alias} {`); + w.push(); + w.write(`return d.factory.New${alias}(${args.slice(info.kindMember ? 1 : 0).join(", ")}), nil`); + w.pop(); + w.write("}"); + } + } + + w.write(`return d.factory.${factoryName}(${args.join(", ")}), nil`); + w.pop(); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// TypeScript Protocol Generation +// ═══════════════════════════════════════════════════════════════════════════ + +function generateTSProtocol(): string { + const w = new CodeWriter(" "); + w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); + w.write(""); + w.write('import { SyntaxKind } from "../../ast/index.ts";'); + w.write(""); + + // Complete childProperties mapping — includes all nodes with children + // (single-child, multi-child, and extended data nodes). + w.write("export const childProperties: Readonly>> = {"); + w.push(); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.childProps.length === 0) continue; + + const kinds = getTSKinds(node); + const props = info.childProps.map(m => `"${api.uncapitalize(m.name)}"`).join(", "); + for (const kind of kinds) { + w.write(`[SyntaxKind.${kind}]: [${props}],`); + } + } + + w.pop(); + w.write("};"); + w.write(""); + + // singleChildNodePropertyNames mapping + w.write("export const singleChildNodePropertyNames: Readonly>> = {"); + w.push(); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "extended") continue; + if (info.childProps.length !== 1) continue; + + const kinds = getTSKinds(node); + const prop = api.uncapitalize(info.childProps[0].name); + + for (const kind of kinds) { + w.write(`[SyntaxKind.${kind}]: "${prop}",`); + } + } + + w.pop(); + w.write("};"); + w.write(""); + + return w.toString(); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// TypeScript Encoder Generation (encoder.generated.ts) +// ═══════════════════════════════════════════════════════════════════════════ + +/** Get all KindType values from a SyntaxKind union type. Resolves through aliases. */ +function unionKindValues(dt: import("./schema.ts").Type): import("./schema.ts").KindType[] { + const resolved = resolveUnion(dt); + if (!resolved || resolved.kind !== "union") return []; + return resolved.types.filter((t): t is import("./schema.ts").KindType => t.kind === "kind"); +} + +function generateTSEncoder(): string { + const w = new CodeWriter(" "); + w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); + w.write(""); + + // Collect needed type imports + const typeImports = new Set(); + const valueImports = new Set(["SyntaxKind"]); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "extended") continue; + + if (info.autoBoolBits.length > 0 || info.autoUnionBits.length > 0) { + typeImports.add(node.name); + } + else if (info.handWrittenCommonData) { + typeImports.add(node.name); + } + } + + // Write imports + if (typeImports.size > 0) { + w.write("import type {"); + w.push(); + w.write("Node,"); + for (const t of [...typeImports].sort()) { + w.write(`${t},`); + } + w.pop(); + w.write('} from "../../ast/index.ts";'); + } + w.write("import {"); + w.push(); + for (const v of [...valueImports].sort()) { + w.write(`${v},`); + } + w.pop(); + w.write('} from "../../ast/index.ts";'); + w.write("import {"); + w.push(); + w.write("NODE_DATA_TYPE_CHILDREN,"); + w.write("NODE_DATA_TYPE_EXTENDED,"); + w.write("NODE_DATA_TYPE_STRING,"); + w.pop(); + w.write('} from "./protocol.ts";'); + w.write(""); + + generateTSGetNodeDataType(w); + generateTSGetNodeCommonData(w); + + return w.toString(); +} + +function generateTSGetNodeDataType(w: CodeWriter) { + w.write("export function getNodeDataType(kind: SyntaxKind): number {"); + w.push(); + w.write("switch (kind) {"); + + const stringKinds: string[] = []; + const extendedKinds: string[] = []; + + for (const node of api.nodes()) { + const info = analyzeNode(node); + const kinds = getTSKinds(node); + if (info.dataType === "string") { + stringKinds.push(...kinds); + } + else if (info.dataType === "extended") { + extendedKinds.push(...kinds); + } + } + + if (stringKinds.length > 0) { + for (const k of stringKinds) { + w.write(`case SyntaxKind.${k}:`); + } + w.push(); + w.write("return NODE_DATA_TYPE_STRING;"); + w.pop(); + } + if (extendedKinds.length > 0) { + for (const k of extendedKinds) { + w.write(`case SyntaxKind.${k}:`); + } + w.push(); + w.write("return NODE_DATA_TYPE_EXTENDED;"); + w.pop(); + } + + w.write("default:"); + w.push(); + w.write("return NODE_DATA_TYPE_CHILDREN;"); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateTSGetNodeCommonData(w: CodeWriter) { + w.write("export function getNodeCommonData(node: Node): number {"); + w.push(); + w.write("switch (node.kind) {"); + + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "extended") continue; + + if (hasAutoEncodedData(info)) { + // Auto-encoded: generate bit packing for bools and index encoding for unions + const kinds = getTSKinds(node); + const layout = getAutoEncodedLayout(info); + for (const k of kinds) { + w.write(`case SyntaxKind.${k}:`); + } + w.push(); + const parts: string[] = []; + for (const { member: m, bitPos, bitWidth } of layout) { + const propName = api.uncapitalize(m.name); + if (!isSyntaxKindUnion(m)) { + // Bool + parts.push(`((node as ${node.name}).${propName} ? 1 : 0) << ${24 + bitPos}`); + } + else { + // SyntaxKind union → index-based encoding + const kinds = unionKindValues(m.declaredType); + if (m.optional) { + // Optional union: 0 = absent, 1..N = values[0]..values[N-1] + const cases = kinds.map((k, i) => `(node as ${node.name}).${propName} === ${k.formatTypeScript()} ? ${i + 1} : `).join(""); + parts.push(`(${cases}0) << ${24 + bitPos}`); + } + else { + // Required union: index into values array + const cases = kinds.slice(1).map((k, i) => `(node as ${node.name}).${propName} === ${k.formatTypeScript()} ? ${i + 1} : `).join(""); + parts.push(`(${cases}0) << ${24 + bitPos}`); + } + } + } + w.write(`return ${parts.join(" | ")};`); + w.pop(); + } + else if (info.handWrittenCommonData) { + // Hand-written: generate encoding based on member types + const kinds = getTSKinds(node); + const dataMembers = getHandWrittenDataMembers(node); + if (dataMembers.length === 0) continue; + + // Skip nodes with 'any' type data members (e.g., SyntheticExpression) — they should never be encoded + if (dataMembers.some(m => m.declaredType.kind === "primitive" && m.declaredType.name === "any")) { + continue; + } + + for (const k of kinds) { + w.write(`case SyntaxKind.${k}:`); + } + w.push(); + + emitTSCommonDataEncoding(w, node, dataMembers); + + w.pop(); + } + } + + w.write("}"); + w.write("return 0;"); + w.pop(); + w.write("}"); + w.write(""); +} + +function emitTSCommonDataEncoding(w: CodeWriter, node: NodeType, dataMembers: MemberInfo[]) { + const parts: string[] = []; + let bitPos = 24; + + for (const m of dataMembers) { + const propName = api.uncapitalize(m.name); + const dt = m.declaredType; + + if (dt.kind === "primitive" && dt.name === "bool") { + parts.push(`((node as ${node.name}).${propName} ? 1 : 0) << ${bitPos}`); + bitPos++; + } + else { + throw new Error(`Unexpected hand-written data member ${node.name}.${m.name} of type ${dt.kind}`); + } + } + + if (parts.length === 0) { + w.write("return 0;"); + } + else if (parts.length === 1) { + w.write(`return ${parts[0]};`); + } + else { + w.write("return " + parts.join(" |\n ") + ";"); + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// TypeScript Node Generation (node.ts — entire file) +// ═══════════════════════════════════════════════════════════════════════════ + +function generateTSNodeGenerated(): string { + const w = new CodeWriter(" "); + + // Collect all unique child property names and their types (node vs nodeList) + const childGetters = new Map(); + for (const node of api.nodes()) { + const info = analyzeNode(node); + for (const m of info.childProps) { + const propName = api.uncapitalize(m.name); + const ct = childType(m); + const isListType = ct === "nodeList" || ct === "modifierList"; + const existing = childGetters.get(propName); + if (!existing) { + childGetters.set(propName, isListType ? "nodeList" : "node"); + } + else if ((existing === "node" && isListType) || (existing === "nodeList" && !isListType)) { + childGetters.set(propName, "both"); + } + } + } + + // Collect all unique auto-bool property names with their bit positions + const boolGetters = new Map(); + for (const node of api.nodes()) { + const info = analyzeNode(node); + const layout = getAutoEncodedLayout(info); + for (const { member: m, bitPos, bitWidth } of layout) { + if (!isSyntaxKindUnion(m)) { + const propName = api.uncapitalize(m.name); + const absBitPos = 24 + bitPos; + const existing = boolGetters.get(propName); + if (existing !== undefined && existing !== absBitPos) { + throw new Error(`Bool property "${propName}" has inconsistent bit positions: ${existing} vs ${absBitPos}`); + } + boolGetters.set(propName, absBitPos); + } + } + } + + // Collect all unique SyntaxKind union property getters: + // Map from property name → array of { kinds, bitPos, bitWidth, values, optional } + interface UnionGetterEntry { + kinds: string[]; + bitPos: number; + bitWidth: number; + values: KindType[]; + optional: boolean; + } + const unionGetters = new Map(); + for (const node of api.nodes()) { + const info = analyzeNode(node); + const layout = getAutoEncodedLayout(info); + for (const { member: m, bitPos, bitWidth } of layout) { + if (isSyntaxKindUnion(m)) { + const propName = api.uncapitalize(m.name); + const entries = unionGetters.get(propName) || []; + entries.push({ + kinds: getTSKinds(node), + bitPos: 24 + bitPos, + bitWidth, + values: unionKindValues(m.declaredType), + optional: !!m.optional, + }); + unionGetters.set(propName, entries); + } + } + } + + // Collect string data property info + const stringTextKinds: string[] = []; + const extendedTextKinds: string[] = []; + for (const node of api.nodes()) { + const info = analyzeNode(node); + if (info.dataType === "string" && info.textMember) { + stringTextKinds.push(...getTSKinds(node)); + } + else if (info.dataType === "extended") { + extendedTextKinds.push(...getTSKinds(node)); + } + } + + // Emit the file + w.write("// Code generated by tools/scripts/tsc/generate-encoder.ts. DO NOT EDIT."); + w.write(""); + emitNodeGeneratedImports(w); + w.write(""); + emitRemoteNodeList(w); + w.write(""); + emitRemoteNodeClassOpen(w); + w.write(""); + + // ── Generated: Boolean property getters ── + w.write(" // ═══ Generated boolean property getters ═══"); + w.write(""); + for (const [propName, bitPos] of [...boolGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { + w.write(` get ${propName}(): boolean {`); + w.write(` return (this.data & (1 << ${bitPos})) !== 0;`); + w.write(` }`); + w.write(""); + } + + // ── Generated: SyntaxKind union property getters ── + w.write(" // ═══ Generated SyntaxKind union property getters ═══"); + w.write(""); + for (const [propName, entries] of [...unionGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { + // Determine return type: if any entry is optional, return type includes undefined + const anyOptional = entries.some(e => e.optional); + const returnType = anyOptional ? "SyntaxKind | undefined" : "SyntaxKind | undefined"; + w.write(` get ${propName}(): ${returnType} {`); + w.write(` switch (this.kind) {`); + for (const entry of entries) { + for (const kind of entry.kinds) { + w.write(` case SyntaxKind.${kind}:`); + } + const mask = (1 << entry.bitWidth) - 1; + const indexExpr = `(this.data >> ${entry.bitPos}) & 0x${mask.toString(16)}`; + if (entry.optional) { + // Optional: 0 = undefined, 1..N = values[0]..values[N-1] + w.write(` {`); + w.write(` const idx = ${indexExpr};`); + w.write(` if (idx === 0) return undefined;`); + const cases = entry.values.map((k, i) => `idx === ${i + 1} ? ${k.formatTypeScript()} : `).join(""); + w.write(` return ${cases}undefined;`); + w.write(` }`); + } + else if (entry.values.length === 2) { + // 2-value: simple ternary + w.write(` return ${indexExpr} ? ${entry.values[1].formatTypeScript()} : ${entry.values[0].formatTypeScript()};`); + } + else { + // N-value: switch on index + w.write(` {`); + w.write(` const idx = ${indexExpr};`); + for (let i = 0; i < entry.values.length; i++) { + if (i === 0) { + // default case (index 0) + } + else { + w.write(` if (idx === ${i}) return ${entry.values[i].formatTypeScript()};`); + } + } + w.write(` return ${entry.values[0].formatTypeScript()};`); + w.write(` }`); + } + } + w.write(` }`); + w.write(` }`); + w.write(""); + } + + // ── Generated: templateFlags (extended data, not a union) ── + emitTemplateFlagsGetter(w); + w.write(""); + + // ── Generated: tokenFlags (extended data for RegularExpressionLiteral) ── + emitTokenFlagsGetter(w); + w.write(""); + + // ── Generated: Child property getters ── + w.write(" // ═══ Generated child property getters ═══"); + w.write(""); + for (const [propName, type] of [...childGetters.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { + const returnType = type === "nodeList" ? "RemoteNodeList" : type === "both" ? "RemoteNode | RemoteNodeList" : "RemoteNode"; + const castType = type === "nodeList" ? "RemoteNodeList" : type === "both" ? "RemoteNode | RemoteNodeList" : "RemoteNode"; + w.write(` get ${propName}(): ${returnType} | undefined {`); + w.write(` return this.getNamedChild(${JSON.stringify(propName)}) as ${castType};`); + w.write(` }`); + } + w.write(""); + + // ── Generated: String property getters (text, rawText) ── + w.write(" // ═══ Generated string property getters ═══"); + w.write(""); + emitStringGetters(w, stringTextKinds, extendedTextKinds); + w.write(""); + + // ── Generated: Extended data property getters (SourceFile-specific, etc.) ── + w.write(" // ═══ Generated extended data property getters ═══"); + w.write(""); + emitExtendedDataGetters(w); + w.write(""); + + // ── Hand-written remaining getters (flags, modifierFlags, etc.) ── + emitRemoteNodeClassClose(w); + w.write(""); + + return w.toString(); +} + +// ── Infrastructure template sections ── + +function emitNodeGeneratedImports(w: CodeWriter) { + w.write(`import {`); + w.write(` getChildren,`); + w.write(` getFirstToken,`); + w.write(` getLastToken,`); + w.write(` getTokenPosOfNode,`); + w.write(` ModifierFlags,`); + w.write(` type Node,`); + w.write(` type NodeArray,`); + w.write(` type SourceFile,`); + w.write(` SyntaxKind,`); + w.write(`} from "../../ast/index.ts";`); + w.write(`import {`); + w.write(` childProperties,`); + w.write(` KIND_NODE_LIST,`); + w.write(` NODE_DATA_TYPE_CHILDREN,`); + w.write(` NODE_DATA_TYPE_EXTENDED,`); + w.write(` NODE_DATA_TYPE_STRING,`); + w.write(` NODE_LEN,`); + w.write(` NODE_OFFSET_DATA,`); + w.write(` NODE_OFFSET_END,`); + w.write(` NODE_OFFSET_FLAGS,`); + w.write(` NODE_OFFSET_KIND,`); + w.write(` NODE_OFFSET_NEXT,`); + w.write(` NODE_OFFSET_PARENT,`); + w.write(` NODE_OFFSET_POS,`); + w.write(`} from "./protocol.ts";`); + w.write(`import {`); + w.write(` type NodeDataType,`); + w.write(` NODE_CHILD_MASK,`); + w.write(` NODE_DATA_TYPE_MASK,`); + w.write(` NODE_EXTENDED_DATA_MASK,`); + w.write(` NODE_STRING_INDEX_MASK,`); + w.write(` modifierToFlag,`); + w.write(` popcount8,`); + w.write(` RemoteNodeBase,`); + w.write(` type SourceFileInfo,`); + w.write(`} from "./node.infrastructure.ts";`); +} + +function emitRemoteNodeList(w: CodeWriter) { + w.write(`export class RemoteNodeList extends Array implements NodeArray {`); + w.write(` // Inherited Array methods like filter/map/slice use ArraySpeciesCreate, which would`); + w.write(` // otherwise call \`new RemoteNodeList(length)\` and fail. Produce a plain Array instead.`); + w.write(` static get [Symbol.species](): ArrayConstructor {`); + w.write(` return Array;`); + w.write(` }`); + w.write(``); + w.write(` parent: RemoteNode;`); + w.write(` transformFlags: number = 0;`); + w.write(` protected view: DataView;`); + w.write(` protected index: number;`); + w.write(` private _byteIndex: number;`); + w.write(` // Cursor memoizing the last resolved (logical index -> node index) so that`); + w.write(` // sequential forward access (index loops and list[i], plus forEach/map/`); + w.write(` // reduce/filter) resumes instead of re-walking from the head, turning an`); + w.write(` // O(n) pass over the whole list from O(n^2) into O(n).`); + w.write(` private _cursorIndex: number = 0;`); + w.write(` private _cursorNodeIndex: number = 0;`); + w.write(``); + w.write(` get pos(): number {`); + w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_POS, true);`); + w.write(` }`); + w.write(``); + w.write(` get end(): number {`); + w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_END, true);`); + w.write(` }`); + w.write(``); + w.write(` get next(): number {`); + w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_NEXT, true);`); + w.write(` }`); + w.write(``); + w.write(` get firstNodeIndex(): number {`); + w.write(` return this.index + 1;`); + w.write(` }`); + w.write(``); + w.write(` private get data(): number {`); + w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_DATA, true);`); + w.write(` }`); + w.write(``); + w.write(` get hasTrailingComma(): boolean {`); + w.write(` return (this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true) & 1) !== 0;`); + w.write(` }`); + w.write(``); + w.write(` private sourceFile: SourceFileInfo;`); + w.write(``); + w.write(` constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) {`); + w.write(` super(view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_DATA, true));`); + w.write(` this.view = view;`); + w.write(` this.index = index;`); + w.write(` this.parent = parent;`); + w.write(` this.sourceFile = sourceFile;`); + w.write(` this._byteIndex = offsetNodes + index * NODE_LEN;`); + w.write(` this._cursorNodeIndex = index + 1;`); + w.write(``); + w.write(` const length = this.length;`); + w.write(` for (let i = 16; i < length; i++) {`); + w.write(` Object.defineProperty(this, i, {`); + w.write(` get() {`); + w.write(` return this.at(i);`); + w.write(` },`); + w.write(` });`); + w.write(` }`); + w.write(` }`); + + // Emit indexed getters 0..15 + for (let i = 0; i < 16; i++) { + w.write(` get ${i}(): RemoteNode {`); + w.write(` return this.at(${i});`); + w.write(` }`); + } + + w.write(``); + w.write(` *[Symbol.iterator](): ArrayIterator {`); + w.write(` if (!this.length) return;`); + w.write(` let next = this.index + 1;`); + w.write(` while (next) {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` next = child.next;`); + w.write(` yield child as RemoteNode;`); + w.write(` }`); + w.write(` }`); + w.write(``); + w.write(` forEachNode(visitNode: (node: RemoteNode) => T | undefined): T | undefined {`); + w.write(` if (!this.length) return;`); + w.write(` let next = this.index + 1;`); + w.write(` while (next) {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` next = child.next;`); + w.write(` const result = visitNode(child as RemoteNode);`); + w.write(` if (result) return result;`); + w.write(` }`); + w.write(` }`); + w.write(``); + w.write(` at(index: number): RemoteNode {`); + w.write(` if (!Number.isInteger(index)) {`); + w.write(` return undefined!;`); + w.write(` }`); + w.write(` if (index >= this.data || (index < 0 && -index > this.data)) {`); + w.write(` return undefined!;`); + w.write(` }`); + w.write(` if (index < 0) {`); + w.write(` index = this.length + index;`); + w.write(` }`); + w.write(` // Walk the raw buffer following each node's \`next\` pointer instead of`); + w.write(` // materializing every intermediate RemoteNode just to read it. Resume from`); + w.write(` // the memoized cursor when possible so sequential forward access is O(1)`); + w.write(` // amortized (a full in-order pass is O(n) rather than O(n^2)).`); + w.write(` const offsetNodes = this.sourceFile._offsetNodes;`); + w.write(` let i: number;`); + w.write(` let next: number;`); + w.write(` if (index >= this._cursorIndex) {`); + w.write(` i = this._cursorIndex;`); + w.write(` next = this._cursorNodeIndex;`); + w.write(` }`); + w.write(` else {`); + w.write(` i = 0;`); + w.write(` next = this.index + 1;`); + w.write(` }`); + w.write(` for (; i < index; i++) {`); + w.write(` next = this.view.getUint32(offsetNodes + next * NODE_LEN + NODE_OFFSET_NEXT, true);`); + w.write(` }`); + w.write(` this._cursorIndex = index;`); + w.write(` this._cursorNodeIndex = next;`); + w.write(` return this.getOrCreateChildAtNodeIndex(next) as RemoteNode;`); + w.write(` }`); + w.write(``); + w.write(` getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList {`); + w.write(` let child = this.sourceFile.nodes[index];`); + w.write(` if (!child) {`); + w.write(` const kind = this.view.getUint32(this.sourceFile._offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true);`); + w.write(` if (kind === KIND_NODE_LIST) {`); + w.write(` throw new Error("NodeList cannot directly contain another NodeList");`); + w.write(` }`); + w.write(` const sf = this.sourceFile;`); + w.write(` child = new RemoteNode(this.view, index, this.parent, sf, sf._offsetNodes);`); + w.write(` sf.nodes[index] = child;`); + w.write(` sf._timing?.recordMaterialization();`); + w.write(` }`); + w.write(` return child;`); + w.write(` }`); + w.write(``); + w.write(` __print(): string {`); + w.write(` const result = [];`); + w.write(` result.push(\`kind: NodeList\`);`); + w.write(` result.push(\`index: \${this.index}\`);`); + w.write(` result.push(\`byteIndex: \${this._byteIndex}\`);`); + w.write(` result.push(\`length: \${this.length}\`);`); + w.write(` return result.join("\\n");`); + w.write(` }`); + w.write(`}`); +} + +function emitRemoteNodeClassOpen(w: CodeWriter) { + w.write(`export class RemoteNode extends RemoteNodeBase implements Node {`); + w.write(` protected static NODE_LEN: number = NODE_LEN;`); + w.write(` protected override get sourceFile(): SourceFileInfo {`); + w.write(` return this._sourceFile;`); + w.write(` }`); + w.write(` protected _sourceFile: SourceFileInfo;`); + w.write(` get id(): string {`); + w.write(` return \`\${this.index}.\${this.kind}.\${this.sourceFile.path}\`;`); + w.write(` }`); + w.write(``); + w.write(` constructor(view: DataView, index: number, parent: RemoteNode, sourceFile: SourceFileInfo, offsetNodes: number) {`); + w.write(` super(view, index, parent, offsetNodes + index * NODE_LEN);`); + w.write(` this._sourceFile = sourceFile;`); + w.write(` }`); + w.write(``); + w.write(` forEachChild(visitNode: (node: Node) => T, visitList?: (list: NodeArray) => T): T | undefined {`); + w.write(` if (this.hasChildren()) {`); + w.write(` let next = this.index + 1;`); + w.write(` do {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` if (child instanceof RemoteNodeList) {`); + w.write(` if (visitList) {`); + w.write(` const result = visitList(child);`); + w.write(` if (result) {`); + w.write(` return result;`); + w.write(` }`); + w.write(` }`); + w.write(` else {`); + w.write(` const result = child.forEachNode(visitNode);`); + w.write(` if (result) {`); + w.write(` return result;`); + w.write(` }`); + w.write(` }`); + w.write(` }`); + w.write(` else if (child.kind !== SyntaxKind.JSDoc) {`); + w.write(` const result = visitNode(child);`); + w.write(` if (result) {`); + w.write(` return result;`); + w.write(` }`); + w.write(` }`); + w.write(` next = child.next;`); + w.write(` }`); + w.write(` while (next);`); + w.write(` }`); + w.write(` }`); + w.write(``); + w.write(` *childrenIter(): Generator {`); + w.write(` if (this.hasChildren()) {`); + w.write(` let next = this.index + 1;`); + w.write(` do {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` if (child instanceof RemoteNodeList) {`); + w.write(` if (child.length) {`); + w.write(` let listNext = child.firstNodeIndex;`); + w.write(` while (listNext) {`); + w.write(` const node = child.getOrCreateChildAtNodeIndex(listNext) as RemoteNode;`); + w.write(` listNext = node.next;`); + w.write(` const result = yield node;`); + w.write(` if (result) {`); + w.write(` return result;`); + w.write(` }`); + w.write(` }`); + w.write(` }`); + w.write(` }`); + w.write(` else if (child.kind !== SyntaxKind.JSDoc) {`); + w.write(` const result = yield child;`); + w.write(` if (result) {`); + w.write(` return result;`); + w.write(` }`); + w.write(` }`); + w.write(` next = child.next;`); + w.write(` }`); + w.write(` while (next);`); + w.write(` }`); + w.write(` }`); + w.write(``); + w.write(` get jsDoc(): readonly Node[] | undefined {`); + w.write(` if (!this.hasChildren()) {`); + w.write(` return undefined;`); + w.write(` }`); + w.write(` let result: Node[] | undefined;`); + w.write(` let next = this.index + 1;`); + w.write(` do {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` if (!(child instanceof RemoteNodeList) && child.kind === SyntaxKind.JSDoc) {`); + w.write(` (result ??= []).push(child);`); + w.write(` }`); + w.write(` next = child.next;`); + w.write(` }`); + w.write(` while (next);`); + w.write(` return result;`); + w.write(` }`); + w.write(``); + w.write(` getSourceFile(): SourceFile {`); + w.write(` return this.sourceFile as unknown as SourceFile;`); + w.write(` }`); + w.write(``); + w.write(` getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number {`); + w.write(` return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment);`); + w.write(` }`); + w.write(``); + w.write(` getFullStart(): number {`); + w.write(` return this.pos;`); + w.write(` }`); + w.write(``); + w.write(` getEnd(): number {`); + w.write(` return this.end;`); + w.write(` }`); + w.write(``); + w.write(` getWidth(sourceFile?: SourceFile): number {`); + w.write(` return this.getEnd() - this.getStart(sourceFile);`); + w.write(` }`); + w.write(``); + w.write(` getFullWidth(): number {`); + w.write(` return this.end - this.pos;`); + w.write(` }`); + w.write(``); + w.write(` getLeadingTriviaWidth(sourceFile?: SourceFile): number {`); + w.write(` return this.getStart(sourceFile) - this.pos;`); + w.write(` }`); + w.write(``); + w.write(` getFullText(sourceFile?: SourceFile): string {`); + w.write(` return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end);`); + w.write(` }`); + w.write(``); + w.write(` getText(sourceFile?: SourceFile): string {`); + w.write(` sourceFile ??= this.getSourceFile();`); + w.write(` return sourceFile.text.substring(this.getStart(sourceFile), this.end);`); + w.write(` }`); + w.write(``); + w.write(` getChildCount(sourceFile?: SourceFile): number {`); + w.write(` return this.getChildren(sourceFile).length;`); + w.write(` }`); + w.write(``); + w.write(` getChildAt(index: number, sourceFile?: SourceFile): Node {`); + w.write(` return this.getChildren(sourceFile)[index];`); + w.write(` }`); + w.write(``); + w.write(` getChildren(sourceFile?: SourceFile): readonly Node[] {`); + w.write(` return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + w.write(` }`); + w.write(``); + w.write(` getFirstToken(sourceFile?: SourceFile): Node | undefined {`); + w.write(` return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + w.write(` }`); + w.write(``); + w.write(` getLastToken(sourceFile?: SourceFile): Node | undefined {`); + w.write(` return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + w.write(` }`); + w.write(``); + w.write(` protected getString(index: number): string {`); + w.write(` const offsetStringTableOffsets = this.sourceFile._offsetStringTableOffsets;`); + w.write(` const start = this.view.getUint32(offsetStringTableOffsets + index * 4, true);`); + w.write(` const end = this.view.getUint32(offsetStringTableOffsets + (index + 1) * 4, true);`); + w.write(` const offsetStringTable = this.sourceFile._offsetStringTable;`); + w.write(` const text = new Uint8Array(this.view.buffer, this.view.byteOffset + offsetStringTable + start, end - start);`); + w.write(` return this.sourceFile._decoder.decode(text);`); + w.write(` }`); + w.write(``); + w.write(` private getOrCreateChildAtNodeIndex(index: number): RemoteNode | RemoteNodeList {`); + w.write(` let child = this.sourceFile.nodes[index];`); + w.write(` if (!child) {`); + w.write(` const sf = this.sourceFile;`); + w.write(` const offsetNodes = sf._offsetNodes;`); + w.write(` const kind = this.view.getUint32(offsetNodes + index * NODE_LEN + NODE_OFFSET_KIND, true);`); + w.write(` child = kind === KIND_NODE_LIST`); + w.write(` ? new RemoteNodeList(this.view, index, this, sf, offsetNodes)`); + w.write(` : new RemoteNode(this.view, index, this, sf, offsetNodes);`); + w.write(` sf.nodes[index] = child;`); + w.write(` sf._timing?.recordMaterialization();`); + w.write(` }`); + w.write(` return child;`); + w.write(` }`); + w.write(``); + w.write(` private hasChildren(): boolean {`); + w.write(` if (this._byteIndex >= this.view.byteLength - NODE_LEN) {`); + w.write(` return false;`); + w.write(` }`); + w.write(` const nextNodeParent = this.view.getUint32(this.sourceFile._offsetNodes + (this.index + 1) * NODE_LEN + NODE_OFFSET_PARENT, true);`); + w.write(` return nextNodeParent === this.index;`); + w.write(` }`); + w.write(``); + w.write(` private getNamedChild(propertyName: string): RemoteNode | RemoteNodeList | undefined {`); + w.write(` const kind = this.kind;`); + w.write(` const propertyNames = childProperties[kind];`); + w.write(` if (!propertyNames) {`); + w.write(` return undefined;`); + w.write(` }`); + w.write(``); + w.write(` const order = propertyNames.indexOf(propertyName);`); + w.write(` if (order === -1) {`); + w.write(` return undefined;`); + w.write(` }`); + w.write(` return this.getChildAtOrder(order);`); + w.write(` }`); + w.write(``); + w.write(` private getChildAtOrder(order: number): RemoteNode | RemoteNodeList | undefined {`); + w.write(` if (!this.hasChildren()) return undefined;`); + w.write(` const mask = this.childMask;`); + w.write(` if (!(mask & (1 << order))) {`); + w.write(` // Property is not present`); + w.write(` return undefined;`); + w.write(` }`); + w.write(``); + w.write(` // The property index is \`order\`, minus the number of zeros in the mask that are in bit positions less`); + w.write(` // than the \`order\`th bit. Example:`); + w.write(` //`); + w.write(` // This is a MethodDeclaration with mask 0b01110101. The possible properties are`); + w.write(` // ["modifiers", "asteriskToken", "name", "postfixToken", "typeParameters", "parameters", "type", "body"]`); + w.write(` // (it has modifiers, name, typeParameters, parameters, and type).`); + w.write(` //`); + w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); + w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); + w.write(` // | Value | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |`); + w.write(` // | Name | body | type | parameters | typeParameters | postfixToken | name | asteriskToken | modifiers |`); + w.write(` //`); + w.write(` // We are trying to get the index of "parameters" (bit = 5).`); + w.write(` // First, set all the more significant bits to 1:`); + w.write(` //`); + w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); + w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); + w.write(` // | Value | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |`); + w.write(` //`); + w.write(` // Then, flip the bits:`); + w.write(` //`); + w.write(` // | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |`); + w.write(` // | ----- | ---- | ---- | ---------- | -------------- | ------------ | ---- | ------------- | --------- |`); + w.write(` // | Value | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |`); + w.write(` //`); + w.write(` // Counting the 1s gives us the number of *missing properties* before the \`order\`th property. If every property`); + w.write(` // were present, we would have \`parameters = children[5]\`, but since \`postfixToken\` and \`astersiskToken\` are`); + w.write(` // missing, we have \`parameters = children[5 - 2]\`.`); + w.write(` const propertyIndex = order - popcount8[~(mask | ((0xff << order) & 0xff)) & 0xff];`); + w.write(` let childIndex = this.index + 1;`); + w.write(` for (let i = 0; i < propertyIndex; i++) {`); + w.write(` // Walk through children via their \`next\` pointer until we get to the right property index`); + w.write(` childIndex = this.view.getUint32(this.sourceFile._offsetNodes + childIndex * NODE_LEN + NODE_OFFSET_NEXT, true);`); + w.write(` }`); + w.write(` return this.getOrCreateChildAtNodeIndex(childIndex);`); + w.write(` }`); + w.write(``); + w.write(` __print(): string {`); + w.write(` const result = [];`); + w.write(` result.push(\`index: \${this.index}\`);`); + w.write(` result.push(\`byteIndex: \${this._byteIndex}\`);`); + w.write(` result.push(\`kind: \${SyntaxKind[this.kind]}\`);`); + w.write(` result.push(\`pos: \${this.pos}\`);`); + w.write(` result.push(\`end: \${this.end}\`);`); + w.write(` result.push(\`next: \${this.next}\`);`); + w.write(` result.push(\`parent: \${this.parentIndex}\`);`); + w.write(` result.push(\`data: \${this.data.toString(2).padStart(32, "0")}\`);`); + w.write(` const dataType = this.dataType === NODE_DATA_TYPE_CHILDREN ? "children" :`); + w.write(` this.dataType === NODE_DATA_TYPE_STRING ? "string" :`); + w.write(` "extended";`); + w.write(` result.push(\`dataType: \${dataType}\`);`); + w.write(` if (this.dataType === NODE_DATA_TYPE_CHILDREN) {`); + w.write(` result.push(\`childMask: \${this.childMask.toString(2).padStart(8, "0")}\`);`); + w.write(` result.push(\`childProperties: \${childProperties[this.kind]?.join(", ")}\`);`); + w.write(` }`); + w.write(` return result.join("\\n");`); + w.write(` }`); + w.write(``); + w.write(` __printChildren(): string {`); + w.write(` const result = [];`); + w.write(` let next = this.index + 1;`); + w.write(` while (next) {`); + w.write(` const child = this.getOrCreateChildAtNodeIndex(next);`); + w.write(` next = child.next;`); + w.write(` result.push(child.__print());`); + w.write(` }`); + w.write(` return result.join("\\n\\n");`); + w.write(` }`); + w.write(``); + w.write(` __printSubtree(): string {`); + w.write(` const result = [this.__print()];`); + w.write(` this.forEachChild(function visitNode(node) {`); + w.write(` result.push((node as RemoteNode).__print());`); + w.write(` node.forEachChild(visitNode);`); + w.write(` }, visitList => {`); + w.write(` result.push((visitList as RemoteNodeList).__print());`); + w.write(` });`); + w.write(` return result.join("\\n\\n");`); + w.write(` }`); +} + +function emitTemplateFlagsGetter(w: CodeWriter) { + // templateFlags — from extended data (not a commonData union) + w.write(` get templateFlags(): number | undefined {`); + w.write(` switch (this.kind) {`); + w.write(` case SyntaxKind.TemplateHead:`); + w.write(` case SyntaxKind.TemplateMiddle:`); + w.write(` case SyntaxKind.TemplateTail:`); + w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); + w.write(` return this.view.getUint32(extendedDataOffset + 8, true);`); + w.write(` }`); + w.write(` }`); +} + +function emitTokenFlagsGetter(w: CodeWriter) { + // tokenFlags — from extended data for literal kinds that store TokenFlags + w.write(` get tokenFlags(): number {`); + w.write(` switch (this.kind) {`); + w.write(` case SyntaxKind.StringLiteral:`); + w.write(` case SyntaxKind.NumericLiteral:`); + w.write(` case SyntaxKind.BigIntLiteral:`); + w.write(` case SyntaxKind.RegularExpressionLiteral:`); + w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); + w.write(` return this.view.getUint32(extendedDataOffset + 4, true);`); + w.write(` default:`); + w.write(` return 0;`); + w.write(` }`); + w.write(` }`); +} + +function emitStringGetters(w: CodeWriter, stringTextKinds: string[], extendedTextKinds: string[]) { + // text getter — string data kinds vs extended data kinds + w.write(` get text(): string | undefined {`); + w.write(` switch (this.kind) {`); + for (const k of stringTextKinds) { + w.write(` case SyntaxKind.${k}:`); + } + w.write(` {`); + w.write(` const stringIndex = this.data & NODE_STRING_INDEX_MASK;`); + w.write(` return this.getString(stringIndex);`); + w.write(` }`); + for (const k of extendedTextKinds) { + w.write(` case SyntaxKind.${k}:`); + } + w.write(` {`); + w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); + w.write(` const stringIndex = this.view.getUint32(extendedDataOffset, true);`); + w.write(` return this.getString(stringIndex);`); + w.write(` }`); + w.write(` }`); + w.write(` }`); + w.write(``); + // rawText — template kinds only + w.write(` get rawText(): string | undefined {`); + w.write(` switch (this.kind) {`); + w.write(` case SyntaxKind.TemplateHead:`); + w.write(` case SyntaxKind.TemplateMiddle:`); + w.write(` case SyntaxKind.TemplateTail:`); + w.write(` const extendedDataOffset = this.sourceFile._offsetExtendedData + (this.data & NODE_EXTENDED_DATA_MASK);`); + w.write(` const stringIndex = this.view.getUint32(extendedDataOffset + 4, true);`); + w.write(` return this.getString(stringIndex);`); + w.write(` }`); + w.write(` }`); +} + +function emitExtendedDataGetters(w: CodeWriter) { + // SourceFile-specific extended data getters live on RemoteSourceFile in node.ts. + // Only non-SourceFile extended data getters are emitted here. +} + +function emitRemoteNodeClassClose(w: CodeWriter) { + w.write(` // ═══ Other property getters ═══`); + w.write(``); + w.write(` get flags(): number {`); + w.write(` return this.view.getUint32(this._byteIndex + NODE_OFFSET_FLAGS, true);`); + w.write(` }`); + w.write(``); + w.write(` get modifierFlags(): ModifierFlags {`); + w.write(` const mods = this.modifiers;`); + w.write(` if (!mods) return ModifierFlags.None;`); + w.write(` let flags: ModifierFlags = ModifierFlags.None;`); + w.write(` for (const mod of mods) {`); + w.write(` flags |= modifierToFlag(mod.kind);`); + w.write(` }`); + w.write(` return flags;`); + w.write(` }`); + w.write(`}`); +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Main: generate and write all files +// ═══════════════════════════════════════════════════════════════════════════ + +function writeAndFormat(filePath: string, generate: () => string, force: boolean) { + const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); + if (generated.isCurrent(force)) return; + generated.write(generate() + "\n"); + try { + formatFilesSync([filePath]); + generated.markCurrent(); + } + catch { + console.warn(`Warning: formatter failed for ${filePath}`); + } + console.log(`Wrote ${filePath}`); +} + +export default function main(force = false) { + console.log("Generating encoder/decoder code..."); + + writeAndFormat( + path.join(ROOT, "tsc/internal/api/encoder/encoder_generated.go"), + generateGoEncoder, + force, + ); + + writeAndFormat( + path.join(ROOT, "tsc/internal/api/encoder/decoder_generated.go"), + generateGoDecoder, + force, + ); + + writeAndFormat( + path.join(ROOT, "packages/typescript/src/api/node/protocol.generated.ts"), + generateTSProtocol, + force, + ); + + writeAndFormat( + path.join(ROOT, "packages/typescript/src/api/node/encoder.generated.ts"), + generateTSEncoder, + force, + ); + + writeAndFormat( + path.join(ROOT, "packages/typescript/src/api/node/node.generated.ts"), + generateTSNodeGenerated, + force, + ); + + console.log("Done!"); +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + main(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/generate-enums.ts b/tools/scripts/tsc/generate-enums.ts index 757f598fa88c6..d31473b3676c2 100644 --- a/tools/scripts/tsc/generate-enums.ts +++ b/tools/scripts/tsc/generate-enums.ts @@ -1,579 +1,579 @@ -import assert from "node:assert"; -import fs from "node:fs"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { GeneratedFile } from "../gen/generatedFile.mts"; -import { - formatFiles, - goInputs, - parseGeneratorArgs, - repoRoot as ROOT, - run, -} from "../gen/utils.mts"; -import generateOptions from "./generate-options.ts"; -import { options } from "./options.ts"; -import { api } from "./schema.ts"; - -function runOutput(command: string, args: readonly string[]) { - return run(command, args, { captureOutput: true, cwd: ROOT }); -} - -interface EnumDef { - name: string; - goPrefix: string; - goFile: string; - outDir: string; - fileName?: string | undefined; - metadata?: { file: string; members: EnumMember[]; } | undefined; - stringEnum?: boolean | undefined; - excludeMembers?: readonly string[] | undefined; - valueReplacements?: Record | undefined; -} - -export const enumDefs = [ - { name: "SymbolFlags", goPrefix: "SymbolFlags", goFile: "tsc/internal/ast/symbolflags.go", outDir: "packages/typescript/src/enums" }, - { name: "CheckFlags", goPrefix: "CheckFlags", goFile: "tsc/internal/ast/checkflags.go", outDir: "packages/typescript/src/enums" }, - { name: "SymbolOwnerKind", goPrefix: "SymbolOwnerKind", goFile: "tsc/internal/api/proto.go", outDir: "packages/typescript/src/enums" }, - { name: "TypeFlags", goPrefix: "TypeFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "ObjectFlags", goPrefix: "ObjectFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "SignatureFlags", goPrefix: "SignatureFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "SignatureKind", goPrefix: "SignatureKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "IndexKind", goPrefix: "IndexKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "ElementFlags", goPrefix: "ElementFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "TypePredicateKind", goPrefix: "TypePredicateKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "TypeFormatFlags", goPrefix: "TypeFormatFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, - { name: "DiagnosticCategory", goPrefix: "Category", goFile: "tsc/internal/diagnostics/diagnostics.go", outDir: "packages/typescript/src/enums" }, - { - name: "SyntaxKind", - goPrefix: "Kind", - goFile: "tsc/internal/ast/kind_generated.go", - outDir: "packages/typescript/src/enums", - metadata: { file: "tools/scripts/tsc/ast.json", members: syntaxKindMembers() }, - }, - { name: "NodeFlags", goPrefix: "NodeFlags", goFile: "tsc/internal/ast/nodeflags.go", outDir: "packages/typescript/src/enums" }, - { name: "OuterExpressionKinds", goPrefix: "OEK", goFile: "tsc/internal/ast/utilities.go", outDir: "packages/typescript/src/enums" }, - { name: "JSDeclarationKind", goPrefix: "JSDeclarationKind", goFile: "tsc/internal/ast/utilities.go", outDir: "packages/typescript/src/enums", fileName: "jsDeclarationKind" }, - { name: "ModifierFlags", goPrefix: "ModifierFlags", goFile: "tsc/internal/ast/modifierflags.go", outDir: "packages/typescript/src/enums" }, - ...options.enums.filter(enumDef => enumDef.api).map(enumDef => ({ - name: enumDef.name, - goPrefix: enumDef.name, - goFile: "tsc/internal/core/options_generated.go", - outDir: "packages/typescript/src/enums", - metadata: { - file: "tools/scripts/tsc/options.ts", - members: enumDef.members.filter(member => !member.excludeFromAPI).map(member => ({ name: member.name, value: String(member.value) })), - }, - })), - { name: "ScriptKind", goPrefix: "ScriptKind", goFile: "tsc/internal/core/scriptkind.go", outDir: "packages/typescript/src/enums" }, - { name: "CaseSensitivity", goPrefix: "Case", goFile: "tsc/internal/tspath/path.go", outDir: "packages/typescript/src/enums" }, - { name: "TokenFlags", goPrefix: "TokenFlags", goFile: "tsc/internal/ast/tokenflags.go", outDir: "packages/typescript/src/enums" }, - { name: "DiagnosticDirectivePolicy", goPrefix: "MappedDiagnosticDirectivePolicy", goFile: "tsc/internal/ast/ast.go", outDir: "packages/typescript/src/enums" }, - { name: "SpanMapKind", goPrefix: "Kind", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, - { name: "SpanMapFidelity", goPrefix: "Fidelity", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, - { name: "SpanMapFeature", goPrefix: "Feature", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, - { name: "NodeBuilderFlags", goPrefix: "Flags", goFile: "tsc/internal/nodebuilder/types.go", outDir: "packages/typescript/src/enums" }, - { name: "CompletionItemKind", goPrefix: "CompletionItemKind", goFile: "tsc/internal/lsp/lsproto/lsp_generated.go", outDir: "packages/typescript/src/enums" }, - { name: "EmitOnly", goPrefix: "Emit", goFile: "tsc/internal/compiler/emitter.go", outDir: "packages/typescript/src/enums", excludeMembers: ["OnlyBuilderSignature"] }, - // String enum: Go stores internal names with a "\xFE" sentinel prefix, but the escaped - // form sent over the wire uses "__" (see EscapeSymbolName), so map the sentinel accordingly. - { name: "InternalSymbolName", goPrefix: "InternalSymbolName", goFile: "tsc/internal/ast/symbol.go", outDir: "packages/typescript/src/enums", stringEnum: true, valueReplacements: { InternalSymbolNamePrefix: "__" } }, -] satisfies EnumDef[]; - -function syntaxKindMembers(): EnumMember[] { - const members = api.kindElements().flatMap(element => element.name ? [element.name] : []).map((name, value) => ({ name, value: String(value) })); - return [...members, { name: "Count", value: String(members.length) }, ...api.kindMarkers()]; -} - -function parseGoConstBlock(block: string, def: EnumDef): EnumMember[] { - const prefix = def.goPrefix; - const members: EnumMember[] = []; - let iotaCounter = 0; - let iotaExpression: string | undefined; - - const lines = block.split("\n"); - let i = 0; - - while (i < lines.length) { - const rawLine = lines[i]; - const line = rawLine.replace(/\/\/.*$/, "").trim(); - - if (!line) { - i++; - continue; - } - - // Match: PrefixName Type = value or PrefixName = value - const fullMatch = line.match(new RegExp(`^(${prefix}\\w+)\\s+(?:\\S+\\s*)?=\\s*(.+)$`)); - // Match bare iota continuation: just PrefixName - const bareMatch = !fullMatch && iotaExpression !== undefined - ? line.match(new RegExp(`^(${prefix}\\w+)$`)) - : null; - - if (!fullMatch && !bareMatch) { - i++; - continue; - } - - const goName = fullMatch ? fullMatch[1] : bareMatch![1]; - let goValue = fullMatch ? fullMatch[2].trim() : ""; - const memberName = goName.slice(prefix.length); - - // Accumulate continuation lines ending with | - i++; - while (i < lines.length && goValue.endsWith("|")) { - const nextRaw = lines[i]; - const nextLine = nextRaw.replace(/\/\/.*$/, "").trim(); - if (!nextLine) { - i++; - continue; - } - goValue += " " + nextLine; - i++; - } - - let tsValue: string; - if (def.stringEnum) { - tsValue = parseGoStringValue(goValue, def.valueReplacements ?? {}); - } - else { - let numericValue = goValue; - if (goValue.includes("iota")) { - iotaExpression = goValue; - numericValue = goValue.replace(/\biota\b/g, String(iotaCounter)); - } - else if (iotaExpression !== undefined && goValue === "") { - numericValue = iotaExpression.replace(/\biota\b/g, String(iotaCounter)); - } - tsValue = translateGoNumericExpression(numericValue, prefix); - } - - members.push({ name: memberName, value: tsValue }); - iotaCounter++; - } - - return members; -} - -const goBinaryPrecedence = new Map([ - ["||", 1], - ["&&", 2], - ["==", 3], - ["!=", 3], - ["<", 3], - ["<=", 3], - [">", 3], - [">=", 3], - ["+", 4], - ["-", 4], - ["|", 4], - ["^", 4], - ["*", 5], - ["/", 5], - ["%", 5], - ["<<", 5], - [">>", 5], - ["&", 5], - ["&^", 5], -]); - -const tsBinaryPrecedence = new Map([ - ["||", 4], - ["&&", 5], - ["|", 6], - ["^", 7], - ["&", 8], - ["==", 9], - ["!=", 9], - ["<", 10], - ["<=", 10], - [">", 10], - [">=", 10], - ["<<", 11], - [">>", 11], - ["+", 12], - ["-", 12], - ["*", 13], - ["/", 13], - ["%", 13], -]); - -type GoExpression = - | { kind: "token"; text: string; } - | { kind: "unary"; operator: string; operand: GoExpression; } - | { kind: "binary"; operator: string; left: GoExpression; right: GoExpression; } - | { kind: "parenthesized"; expression: GoExpression; }; - -/** - * Parse with Go's precedence and print with TypeScript's precedence, adding parentheses where - * copying the expression verbatim would change its meaning. - */ -function translateGoNumericExpression(expression: string, prefix: string): string { - const tokens = expression.match(/<<|>>|&\^|\|\||&&|==|!=|<=|>=|[()+\-*/%&|^<>]|(?:0[xX][\dA-Fa-f_]+|0[bB][01_]+|0[oO][0-7_]+|\d[\d_]*)|[A-Za-z_]\w*/g) ?? []; - const withoutWhitespace = expression.replace(/\s/g, ""); - if (tokens.join("") !== withoutWhitespace) { - throw new Error(`Cannot parse numeric enum value: ${expression}`); - } - - let tokenIndex = 0; - - function parseUnary(): GoExpression { - const token = tokens[tokenIndex]; - if (token === "+" || token === "-" || token === "^") { - tokenIndex++; - return { kind: "unary", operator: token === "^" ? "~" : token, operand: parseUnary() }; - } - if (token === "(") { - tokenIndex++; - const inner = parseBinary(1); - if (tokens[tokenIndex] !== ")") { - throw new Error(`Unmatched parenthesis in numeric enum value: ${expression}`); - } - tokenIndex++; - return { kind: "parenthesized", expression: inner }; - } - if (token === undefined || goBinaryPrecedence.has(token) || token === ")") { - throw new Error(`Expected operand in numeric enum value: ${expression}`); - } - tokenIndex++; - return { kind: "token", text: token.replace(new RegExp(`^${prefix}`), "") }; - } - - function parseBinary(minimumPrecedence: number): GoExpression { - let left = parseUnary(); - while (true) { - const operator = tokens[tokenIndex]; - const precedence = goBinaryPrecedence.get(operator); - if (precedence === undefined || precedence < minimumPrecedence) break; - tokenIndex++; - const right = parseBinary(precedence + 1); - left = { kind: "binary", operator, left, right }; - } - return left; - } - - const parsed = parseBinary(1); - if (tokenIndex !== tokens.length) { - throw new Error(`Unexpected token '${tokens[tokenIndex]}' in numeric enum value: ${expression}`); - } - - function print(node: GoExpression, minimumPrecedence: number): string { - if (node.kind === "token") return node.text; - if (node.kind === "parenthesized") return `(${print(node.expression, 0)})`; - if (node.kind === "unary") { - const text = `${node.operator}${print(node.operand, 14)}`; - return 14 < minimumPrecedence ? `(${text})` : text; - } - - const operator = node.operator === "&^" ? "&" : node.operator; - const precedence = tsBinaryPrecedence.get(operator); - assert(precedence !== undefined); - const right = node.operator === "&^" - ? `~${print(node.right, 14)}` - : print(node.right, precedence + 1); - const text = `${print(node.left, precedence)} ${operator} ${right}`; - return precedence < minimumPrecedence ? `(${text})` : text; - } - - return print(parsed, 0); -} - -/** - * Resolve a Go string-constant expression (e.g. `Prefix + "call"` or `"export="`) - * into a quoted, JS-escaped TypeScript string literal. `replacements` maps bare - * Go identifiers (such as a sentinel-prefix constant) to their literal value. - */ -function parseGoStringValue(goValue: string, replacements: Record): string { - let result = ""; - for (const part of goValue.split("+").map(p => p.trim())) { - if (Object.prototype.hasOwnProperty.call(replacements, part)) { - result += replacements[part]; - continue; - } - const stringMatch = part.match(/^"((?:[^"\\]|\\.)*)"$/); - if (stringMatch === null) { - throw new Error(`Cannot parse string enum value: ${goValue}`); - } - // Interpret Go escape sequences via JSON, then re-stringify below. - result += JSON.parse(`"${stringMatch[1]}"`); - } - return JSON.stringify(result); -} - -interface EnumMember { - name: string; - value: string; -} - -function parseGoEnum(def: EnumDef): EnumMember[] { - const source = fs.readFileSync(path.join(ROOT, def.goFile), "utf-8"); - const constBlockRegex = /const\s*\(([\s\S]*?)\n\)/g; - - for (const match of source.matchAll(constBlockRegex)) { - const members = parseGoConstBlock(match[1], def).filter(member => !def.excludeMembers?.includes(member.name)); - if (members.length > 0) return topoSortMembers(members); - } - - throw new Error(`No members found for enum ${def.name} in ${def.goFile}`); -} - -/** - * Topologically sort enum members so composite members appear after - * all members they reference (Go allows forward references, TS does not). - */ -function topoSortMembers(members: EnumMember[]): EnumMember[] { - const nameSet = new Set(members.map(m => m.name)); - const deps = new Map>(); - for (const m of members) { - const refs = new Set(); - // Find all identifier references in the value that are other member names - for (const [ref] of m.value.matchAll(/\b([A-Za-z_]\w*)\b/g)) { - if (ref !== m.name && nameSet.has(ref)) refs.add(ref); - } - deps.set(m.name, refs); - } - - const sorted: EnumMember[] = []; - const visited = new Set(); - const visiting = new Set(); - - function visit(name: string) { - if (visited.has(name)) return; - if (visiting.has(name)) return; // cycle — keep original order - visiting.add(name); - for (const dep of deps.get(name) ?? []) { - visit(dep); - } - visiting.delete(name); - visited.add(name); - const member = members.find(m => m.name === name); - assert(member); - sorted.push(member); - } - - for (const m of members) { - visit(m.name); - } - return sorted; -} - -function renderEnumTS(def: EnumDef, members: EnumMember[]): string { - const source = def.metadata?.file ?? def.goFile; - const header = `// Code generated by tools/scripts/tsc/generate-enums.ts from ${source}. DO NOT EDIT.\n\n`; - - const lines = members.map(m => ` ${m.name} = ${m.value},`); - return `${header}export enum ${def.name} {\n${lines.join("\n")}\n}\n`; -} - -export function generateEnum(def: EnumDef): { members: EnumMember[]; code: string; } { - const members = def.metadata - ? topoSortMembers(def.metadata.members) - : parseGoEnum(def); - return { members, code: renderEnumTS(def, members) }; -} - -const enumValuesGeneratedGoPath = path.join(ROOT, "tsc/internal/api/enum_values_generated.go"); - -interface GeneratedEnum { - def: EnumDef; - code: string; - fileNames: string[]; - members: EnumMember[]; -} - -/** - * Ask the Go compiler what it actually thinks each numeric member's value is, so that - * generated TS values can be checked against Go's own arithmetic rather than trusting that - * copying operator-by-operator text from Go into JS preserves precedence/semantics. - * - * Writes tsc/internal/api/enum_values_generated.go, a standalone program that imports every - * package referenced by enumDefs and references each member by its original Go identifier - * (not by re-deriving it from the parsed TS text), so Go itself — not this script — computes - * the ground-truth value, then prints them as JSON. `internal/api` is used as the host package - * because it already imports (nearly) every package enums are sourced from. - */ -async function computeGoGroundTruth( - generatedEnums: GeneratedEnum[], - generatedGoFile: GeneratedFile, -): Promise>> { - const packagesByDir = new Map(); - function getPackageName(def: EnumDef): string { - const dir = path.dirname(def.goFile); - const importPath = `github.com/microsoft/TypeScript/tsc/${dir.replace(/^tsc[\\/]/, "")}`.replace(/\\/g, "/"); - let info = packagesByDir.get(dir); - if (info === undefined) { - info = { importPath, pkgName: path.basename(dir) }; - packagesByDir.set(dir, info); - } - return info.pkgName; - } - - const entries: string[] = []; - for (const { def, members } of generatedEnums) { - if (def.stringEnum) continue; - const pkgName = getPackageName(def); - - const memberEntries: string[] = members.map(m => { - return `\t\t\t${JSON.stringify(m.name)}: toInt32(${pkgName}.${def.goPrefix}${m.name}),`; - }); - entries.push( - `\t\t${JSON.stringify(def.name)}: {\n${memberEntries.join("\n")}\n\t\t},`, - ); - } - - const importLines = [...packagesByDir.values()] - .sort((a, b) => a.importPath.localeCompare(b.importPath)) - .map(({ pkgName, importPath }) => `\t${pkgName} "${importPath}"`); - - const goSource = `//go:build ignore - -// Code generated by tools/scripts/tsc/generate-enums.ts. DO NOT EDIT. -// Running this program prints the real Go-evaluated value of every generated enum member as -// JSON, so generate:enums can validate that the TypeScript it emits agrees with Go's own -// arithmetic (catching, e.g., operator-precedence mistakes introduced by copying Go expression -// text into TypeScript verbatim). - -package main - -import ( -\t"encoding/json" -\t"os" - -${importLines.join("\n")} -) - -func main() { -\tvalues := map[string]map[string]int32{ -${entries.join("\n")} -\t} -\tif err := json.NewEncoder(os.Stdout).Encode(values); err != nil { -\t\tpanic(err) -\t} -} - -// A generic function call (unlike a constant conversion) forces Go to evaluate the conversion at -// runtime, truncating uint32-backed flags with a leading bitwise-not the same way JS's 32-bit -// bitwise operators would, instead of rejecting "constant overflows int32" at compile time. -func toInt32[T ~int8 | ~int16 | ~int32 | ~int | ~uint8 | ~uint16 | ~uint32](v T) int32 { -\treturn int32(v) -} - -`; - - generatedGoFile.write(goSource); - await formatFiles([enumValuesGeneratedGoPath]); - - const { stdout } = await runOutput("go", ["run", enumValuesGeneratedGoPath]); - const parsed = JSON.parse(stdout) as Record>; - return parsed; -} - -/** - * Evaluate the generated IIFE in a sandbox and return each member's actual runtime value, so - * validation checks what TS really computes rather than re-deriving it from the source text. - */ -async function evaluateEnumMembers(enumSource: string, enumName: string): Promise> { - const enumModule = await import(`data:text/javascript;charset=utf-8,${encodeURIComponent(enumSource)}`); - const enumObj = enumModule[enumName] as Record; - return enumObj; -} - -export default async function generateEnums(force = false) { - await generateOptions(force); - const inputs = [ - import.meta.filename, - path.join(import.meta.dirname, "options.ts"), - path.join(import.meta.dirname, "options-model.ts"), - path.join(import.meta.dirname, "schema.ts"), - ...goInputs(), - ]; - const enumFiles = enumDefs.map(def => { - const camelName = def.fileName ?? def.name.charAt(0).toLowerCase() + def.name.slice(1); - const enumInputs = [...inputs, path.join(ROOT, def.goFile)]; - if (def.metadata) enumInputs.push(path.join(ROOT, def.metadata.file)); - return { - def, - camelName, - typeFile: new GeneratedFile(path.join(ROOT, def.outDir, `${camelName}.enum.ts`), enumInputs), - runtimeFile: new GeneratedFile(path.join(ROOT, def.outDir, `${camelName}.ts`), enumInputs), - }; - }); - const generatedGoFile = new GeneratedFile(enumValuesGeneratedGoPath, [...inputs, ...enumDefs.map(def => path.join(ROOT, def.goFile))]); - const generatedFiles = [generatedGoFile, ...enumFiles.flatMap(({ typeFile, runtimeFile }) => [typeFile, runtimeFile])]; - if (generatedFiles.every(file => file.isCurrent(force))) { - console.log("Enums are up to date."); - return; - } - const ts = await import("typescript"); - - function transpile(enumSource: string): string { - return ts.transpileModule(enumSource, { - compilerOptions: { - module: ts.ModuleKind.ESNext, - target: ts.ScriptTarget.ESNext, - }, - }).outputText; - } - function convertEnumToTs(enumSource: string, enumName: string): string { - return enumSource.replace( - `export var ${enumName};`, - `export var ${enumName}: any;`, - ); - } - - console.log("Generating enums from metadata and Go source..."); - const generatedEnums: GeneratedEnum[] = []; - for (const { def, camelName, typeFile, runtimeFile } of enumFiles) { - const { members, code: enumTS } = generateEnum(def); - - // Generate .enum.ts (TypeScript enum — used for types) - typeFile.write(enumTS); - - // Generate .ts (IIFE — used at runtime) - const enumJsCode = transpile(enumTS); - const iifeSource = convertEnumToTs(enumJsCode, def.name); - runtimeFile.write(iifeSource); - generatedEnums.push({ - code: enumJsCode, - def, - members, - fileNames: [typeFile.fileName, runtimeFile.fileName], - }); - - console.log(` ${def.name}: ${members.length} members → ${camelName}.enum.ts, ${camelName}.ts`); - } - - console.log("Getting values from go"); - const goValuesByEnum = await computeGoGroundTruth(generatedEnums, generatedGoFile); - const mismatches: string[] = []; - for (const { def, members, code } of generatedEnums) { - if (def.stringEnum) continue; - const goValues = goValuesByEnum[def.name]; - assert(goValues, `Enum ${def.name} was not outputted from GO`); - const tsValues = await evaluateEnumMembers(code, def.name); - for (const m of members) { - const goValue = goValues[m.name]; - const tsValue = tsValues[m.name]; - if (tsValue !== goValue) { - mismatches.push( - `${def.name}.${m.name}: Go says ${goValue}, but generated TS (\`${m.value}\`) evaluates to ${tsValue}`, - ); - } - } - } - - if (mismatches.length > 0) { - throw new Error( - `Generated enum values disagree with Go (likely an operator precedence or transcription bug in generate:enums):\n` + - mismatches.map(m => ` - ${m}`).join("\n"), - ); - } - console.log("All generated values match Go."); - - await formatFiles(generatedEnums.flatMap(e => e.fileNames)); - for (const file of generatedFiles) file.markCurrent(); - console.log("Done."); -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - await generateEnums(parseGeneratorArgs({}).force); -} +import assert from "node:assert"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { GeneratedFile } from "../gen/generatedFile.mts"; +import { + formatFiles, + goInputs, + parseGeneratorArgs, + repoRoot as ROOT, + run, +} from "../gen/utils.mts"; +import generateOptions from "./generate-options.ts"; +import { options } from "./options.ts"; +import { api } from "./schema.ts"; + +function runOutput(command: string, args: readonly string[]) { + return run(command, args, { captureOutput: true, cwd: ROOT }); +} + +interface EnumDef { + name: string; + goPrefix: string; + goFile: string; + outDir: string; + fileName?: string | undefined; + metadata?: { file: string; members: EnumMember[]; } | undefined; + stringEnum?: boolean | undefined; + excludeMembers?: readonly string[] | undefined; + valueReplacements?: Record | undefined; +} + +export const enumDefs = [ + { name: "SymbolFlags", goPrefix: "SymbolFlags", goFile: "tsc/internal/ast/symbolflags.go", outDir: "packages/typescript/src/enums" }, + { name: "CheckFlags", goPrefix: "CheckFlags", goFile: "tsc/internal/ast/checkflags.go", outDir: "packages/typescript/src/enums" }, + { name: "SymbolOwnerKind", goPrefix: "SymbolOwnerKind", goFile: "tsc/internal/api/proto.go", outDir: "packages/typescript/src/enums" }, + { name: "TypeFlags", goPrefix: "TypeFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "ObjectFlags", goPrefix: "ObjectFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "SignatureFlags", goPrefix: "SignatureFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "SignatureKind", goPrefix: "SignatureKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "IndexKind", goPrefix: "IndexKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "ElementFlags", goPrefix: "ElementFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "TypePredicateKind", goPrefix: "TypePredicateKind", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "TypeFormatFlags", goPrefix: "TypeFormatFlags", goFile: "tsc/internal/checker/types.go", outDir: "packages/typescript/src/enums" }, + { name: "DiagnosticCategory", goPrefix: "Category", goFile: "tsc/internal/diagnostics/diagnostics.go", outDir: "packages/typescript/src/enums" }, + { + name: "SyntaxKind", + goPrefix: "Kind", + goFile: "tsc/internal/ast/kind_generated.go", + outDir: "packages/typescript/src/enums", + metadata: { file: "tools/scripts/tsc/ast.json", members: syntaxKindMembers() }, + }, + { name: "NodeFlags", goPrefix: "NodeFlags", goFile: "tsc/internal/ast/nodeflags.go", outDir: "packages/typescript/src/enums" }, + { name: "OuterExpressionKinds", goPrefix: "OEK", goFile: "tsc/internal/ast/utilities.go", outDir: "packages/typescript/src/enums" }, + { name: "JSDeclarationKind", goPrefix: "JSDeclarationKind", goFile: "tsc/internal/ast/utilities.go", outDir: "packages/typescript/src/enums", fileName: "jsDeclarationKind" }, + { name: "ModifierFlags", goPrefix: "ModifierFlags", goFile: "tsc/internal/ast/modifierflags.go", outDir: "packages/typescript/src/enums" }, + ...options.enums.filter(enumDef => enumDef.api).map(enumDef => ({ + name: enumDef.name, + goPrefix: enumDef.name, + goFile: "tsc/internal/core/options_generated.go", + outDir: "packages/typescript/src/enums", + metadata: { + file: "tools/scripts/tsc/options.ts", + members: enumDef.members.filter(member => !member.excludeFromAPI).map(member => ({ name: member.name, value: String(member.value) })), + }, + })), + { name: "ScriptKind", goPrefix: "ScriptKind", goFile: "tsc/internal/core/scriptkind.go", outDir: "packages/typescript/src/enums" }, + { name: "CaseSensitivity", goPrefix: "Case", goFile: "tsc/internal/tspath/path.go", outDir: "packages/typescript/src/enums" }, + { name: "TokenFlags", goPrefix: "TokenFlags", goFile: "tsc/internal/ast/tokenflags.go", outDir: "packages/typescript/src/enums" }, + { name: "DiagnosticDirectivePolicy", goPrefix: "MappedDiagnosticDirectivePolicy", goFile: "tsc/internal/ast/ast.go", outDir: "packages/typescript/src/enums" }, + { name: "SpanMapKind", goPrefix: "Kind", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, + { name: "SpanMapFidelity", goPrefix: "Fidelity", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, + { name: "SpanMapFeature", goPrefix: "Feature", goFile: "tsc/internal/spanmap/spanmap.go", outDir: "packages/typescript/src/enums" }, + { name: "NodeBuilderFlags", goPrefix: "Flags", goFile: "tsc/internal/nodebuilder/types.go", outDir: "packages/typescript/src/enums" }, + { name: "CompletionItemKind", goPrefix: "CompletionItemKind", goFile: "tsc/internal/lsp/lsproto/lsp_generated.go", outDir: "packages/typescript/src/enums" }, + { name: "EmitOnly", goPrefix: "Emit", goFile: "tsc/internal/compiler/emitter.go", outDir: "packages/typescript/src/enums", excludeMembers: ["OnlyBuilderSignature"] }, + // String enum: Go stores internal names with a "\xFE" sentinel prefix, but the escaped + // form sent over the wire uses "__" (see EscapeSymbolName), so map the sentinel accordingly. + { name: "InternalSymbolName", goPrefix: "InternalSymbolName", goFile: "tsc/internal/ast/symbol.go", outDir: "packages/typescript/src/enums", stringEnum: true, valueReplacements: { InternalSymbolNamePrefix: "__" } }, +] satisfies EnumDef[]; + +function syntaxKindMembers(): EnumMember[] { + const members = api.kindElements().flatMap(element => element.name ? [element.name] : []).map((name, value) => ({ name, value: String(value) })); + return [...members, { name: "Count", value: String(members.length) }, ...api.kindMarkers()]; +} + +function parseGoConstBlock(block: string, def: EnumDef): EnumMember[] { + const prefix = def.goPrefix; + const members: EnumMember[] = []; + let iotaCounter = 0; + let iotaExpression: string | undefined; + + const lines = block.split("\n"); + let i = 0; + + while (i < lines.length) { + const rawLine = lines[i]; + const line = rawLine.replace(/\/\/.*$/, "").trim(); + + if (!line) { + i++; + continue; + } + + // Match: PrefixName Type = value or PrefixName = value + const fullMatch = line.match(new RegExp(`^(${prefix}\\w+)\\s+(?:\\S+\\s*)?=\\s*(.+)$`)); + // Match bare iota continuation: just PrefixName + const bareMatch = !fullMatch && iotaExpression !== undefined + ? line.match(new RegExp(`^(${prefix}\\w+)$`)) + : null; + + if (!fullMatch && !bareMatch) { + i++; + continue; + } + + const goName = fullMatch ? fullMatch[1] : bareMatch![1]; + let goValue = fullMatch ? fullMatch[2].trim() : ""; + const memberName = goName.slice(prefix.length); + + // Accumulate continuation lines ending with | + i++; + while (i < lines.length && goValue.endsWith("|")) { + const nextRaw = lines[i]; + const nextLine = nextRaw.replace(/\/\/.*$/, "").trim(); + if (!nextLine) { + i++; + continue; + } + goValue += " " + nextLine; + i++; + } + + let tsValue: string; + if (def.stringEnum) { + tsValue = parseGoStringValue(goValue, def.valueReplacements ?? {}); + } + else { + let numericValue = goValue; + if (goValue.includes("iota")) { + iotaExpression = goValue; + numericValue = goValue.replace(/\biota\b/g, String(iotaCounter)); + } + else if (iotaExpression !== undefined && goValue === "") { + numericValue = iotaExpression.replace(/\biota\b/g, String(iotaCounter)); + } + tsValue = translateGoNumericExpression(numericValue, prefix); + } + + members.push({ name: memberName, value: tsValue }); + iotaCounter++; + } + + return members; +} + +const goBinaryPrecedence = new Map([ + ["||", 1], + ["&&", 2], + ["==", 3], + ["!=", 3], + ["<", 3], + ["<=", 3], + [">", 3], + [">=", 3], + ["+", 4], + ["-", 4], + ["|", 4], + ["^", 4], + ["*", 5], + ["/", 5], + ["%", 5], + ["<<", 5], + [">>", 5], + ["&", 5], + ["&^", 5], +]); + +const tsBinaryPrecedence = new Map([ + ["||", 4], + ["&&", 5], + ["|", 6], + ["^", 7], + ["&", 8], + ["==", 9], + ["!=", 9], + ["<", 10], + ["<=", 10], + [">", 10], + [">=", 10], + ["<<", 11], + [">>", 11], + ["+", 12], + ["-", 12], + ["*", 13], + ["/", 13], + ["%", 13], +]); + +type GoExpression = + | { kind: "token"; text: string; } + | { kind: "unary"; operator: string; operand: GoExpression; } + | { kind: "binary"; operator: string; left: GoExpression; right: GoExpression; } + | { kind: "parenthesized"; expression: GoExpression; }; + +/** + * Parse with Go's precedence and print with TypeScript's precedence, adding parentheses where + * copying the expression verbatim would change its meaning. + */ +function translateGoNumericExpression(expression: string, prefix: string): string { + const tokens = expression.match(/<<|>>|&\^|\|\||&&|==|!=|<=|>=|[()+\-*/%&|^<>]|(?:0[xX][\dA-Fa-f_]+|0[bB][01_]+|0[oO][0-7_]+|\d[\d_]*)|[A-Za-z_]\w*/g) ?? []; + const withoutWhitespace = expression.replace(/\s/g, ""); + if (tokens.join("") !== withoutWhitespace) { + throw new Error(`Cannot parse numeric enum value: ${expression}`); + } + + let tokenIndex = 0; + + function parseUnary(): GoExpression { + const token = tokens[tokenIndex]; + if (token === "+" || token === "-" || token === "^") { + tokenIndex++; + return { kind: "unary", operator: token === "^" ? "~" : token, operand: parseUnary() }; + } + if (token === "(") { + tokenIndex++; + const inner = parseBinary(1); + if (tokens[tokenIndex] !== ")") { + throw new Error(`Unmatched parenthesis in numeric enum value: ${expression}`); + } + tokenIndex++; + return { kind: "parenthesized", expression: inner }; + } + if (token === undefined || goBinaryPrecedence.has(token) || token === ")") { + throw new Error(`Expected operand in numeric enum value: ${expression}`); + } + tokenIndex++; + return { kind: "token", text: token.replace(new RegExp(`^${prefix}`), "") }; + } + + function parseBinary(minimumPrecedence: number): GoExpression { + let left = parseUnary(); + while (true) { + const operator = tokens[tokenIndex]; + const precedence = goBinaryPrecedence.get(operator); + if (precedence === undefined || precedence < minimumPrecedence) break; + tokenIndex++; + const right = parseBinary(precedence + 1); + left = { kind: "binary", operator, left, right }; + } + return left; + } + + const parsed = parseBinary(1); + if (tokenIndex !== tokens.length) { + throw new Error(`Unexpected token '${tokens[tokenIndex]}' in numeric enum value: ${expression}`); + } + + function print(node: GoExpression, minimumPrecedence: number): string { + if (node.kind === "token") return node.text; + if (node.kind === "parenthesized") return `(${print(node.expression, 0)})`; + if (node.kind === "unary") { + const text = `${node.operator}${print(node.operand, 14)}`; + return 14 < minimumPrecedence ? `(${text})` : text; + } + + const operator = node.operator === "&^" ? "&" : node.operator; + const precedence = tsBinaryPrecedence.get(operator); + assert(precedence !== undefined); + const right = node.operator === "&^" + ? `~${print(node.right, 14)}` + : print(node.right, precedence + 1); + const text = `${print(node.left, precedence)} ${operator} ${right}`; + return precedence < minimumPrecedence ? `(${text})` : text; + } + + return print(parsed, 0); +} + +/** + * Resolve a Go string-constant expression (e.g. `Prefix + "call"` or `"export="`) + * into a quoted, JS-escaped TypeScript string literal. `replacements` maps bare + * Go identifiers (such as a sentinel-prefix constant) to their literal value. + */ +function parseGoStringValue(goValue: string, replacements: Record): string { + let result = ""; + for (const part of goValue.split("+").map(p => p.trim())) { + if (Object.prototype.hasOwnProperty.call(replacements, part)) { + result += replacements[part]; + continue; + } + const stringMatch = part.match(/^"((?:[^"\\]|\\.)*)"$/); + if (stringMatch === null) { + throw new Error(`Cannot parse string enum value: ${goValue}`); + } + // Interpret Go escape sequences via JSON, then re-stringify below. + result += JSON.parse(`"${stringMatch[1]}"`); + } + return JSON.stringify(result); +} + +interface EnumMember { + name: string; + value: string; +} + +function parseGoEnum(def: EnumDef): EnumMember[] { + const source = fs.readFileSync(path.join(ROOT, def.goFile), "utf-8"); + const constBlockRegex = /const\s*\(([\s\S]*?)\n\)/g; + + for (const match of source.matchAll(constBlockRegex)) { + const members = parseGoConstBlock(match[1], def).filter(member => !def.excludeMembers?.includes(member.name)); + if (members.length > 0) return topoSortMembers(members); + } + + throw new Error(`No members found for enum ${def.name} in ${def.goFile}`); +} + +/** + * Topologically sort enum members so composite members appear after + * all members they reference (Go allows forward references, TS does not). + */ +function topoSortMembers(members: EnumMember[]): EnumMember[] { + const nameSet = new Set(members.map(m => m.name)); + const deps = new Map>(); + for (const m of members) { + const refs = new Set(); + // Find all identifier references in the value that are other member names + for (const [ref] of m.value.matchAll(/\b([A-Za-z_]\w*)\b/g)) { + if (ref !== m.name && nameSet.has(ref)) refs.add(ref); + } + deps.set(m.name, refs); + } + + const sorted: EnumMember[] = []; + const visited = new Set(); + const visiting = new Set(); + + function visit(name: string) { + if (visited.has(name)) return; + if (visiting.has(name)) return; // cycle — keep original order + visiting.add(name); + for (const dep of deps.get(name) ?? []) { + visit(dep); + } + visiting.delete(name); + visited.add(name); + const member = members.find(m => m.name === name); + assert(member); + sorted.push(member); + } + + for (const m of members) { + visit(m.name); + } + return sorted; +} + +function renderEnumTS(def: EnumDef, members: EnumMember[]): string { + const source = def.metadata?.file ?? def.goFile; + const header = `// Code generated by tools/scripts/tsc/generate-enums.ts from ${source}. DO NOT EDIT.\n\n`; + + const lines = members.map(m => ` ${m.name} = ${m.value},`); + return `${header}export enum ${def.name} {\n${lines.join("\n")}\n}\n`; +} + +export function generateEnum(def: EnumDef): { members: EnumMember[]; code: string; } { + const members = def.metadata + ? topoSortMembers(def.metadata.members) + : parseGoEnum(def); + return { members, code: renderEnumTS(def, members) }; +} + +const enumValuesGeneratedGoPath = path.join(ROOT, "tsc/internal/api/enum_values_generated.go"); + +interface GeneratedEnum { + def: EnumDef; + code: string; + fileNames: string[]; + members: EnumMember[]; +} + +/** + * Ask the Go compiler what it actually thinks each numeric member's value is, so that + * generated TS values can be checked against Go's own arithmetic rather than trusting that + * copying operator-by-operator text from Go into JS preserves precedence/semantics. + * + * Writes tsc/internal/api/enum_values_generated.go, a standalone program that imports every + * package referenced by enumDefs and references each member by its original Go identifier + * (not by re-deriving it from the parsed TS text), so Go itself — not this script — computes + * the ground-truth value, then prints them as JSON. `internal/api` is used as the host package + * because it already imports (nearly) every package enums are sourced from. + */ +async function computeGoGroundTruth( + generatedEnums: GeneratedEnum[], + generatedGoFile: GeneratedFile, +): Promise>> { + const packagesByDir = new Map(); + function getPackageName(def: EnumDef): string { + const dir = path.dirname(def.goFile); + const importPath = `github.com/microsoft/TypeScript/tsc/${dir.replace(/^tsc[\\/]/, "")}`.replace(/\\/g, "/"); + let info = packagesByDir.get(dir); + if (info === undefined) { + info = { importPath, pkgName: path.basename(dir) }; + packagesByDir.set(dir, info); + } + return info.pkgName; + } + + const entries: string[] = []; + for (const { def, members } of generatedEnums) { + if (def.stringEnum) continue; + const pkgName = getPackageName(def); + + const memberEntries: string[] = members.map(m => { + return `\t\t\t${JSON.stringify(m.name)}: toInt32(${pkgName}.${def.goPrefix}${m.name}),`; + }); + entries.push( + `\t\t${JSON.stringify(def.name)}: {\n${memberEntries.join("\n")}\n\t\t},`, + ); + } + + const importLines = [...packagesByDir.values()] + .sort((a, b) => a.importPath.localeCompare(b.importPath)) + .map(({ pkgName, importPath }) => `\t${pkgName} "${importPath}"`); + + const goSource = `//go:build ignore + +// Code generated by tools/scripts/tsc/generate-enums.ts. DO NOT EDIT. +// Running this program prints the real Go-evaluated value of every generated enum member as +// JSON, so generate:enums can validate that the TypeScript it emits agrees with Go's own +// arithmetic (catching, e.g., operator-precedence mistakes introduced by copying Go expression +// text into TypeScript verbatim). + +package main + +import ( +\t"encoding/json" +\t"os" + +${importLines.join("\n")} +) + +func main() { +\tvalues := map[string]map[string]int32{ +${entries.join("\n")} +\t} +\tif err := json.NewEncoder(os.Stdout).Encode(values); err != nil { +\t\tpanic(err) +\t} +} + +// A generic function call (unlike a constant conversion) forces Go to evaluate the conversion at +// runtime, truncating uint32-backed flags with a leading bitwise-not the same way JS's 32-bit +// bitwise operators would, instead of rejecting "constant overflows int32" at compile time. +func toInt32[T ~int8 | ~int16 | ~int32 | ~int | ~uint8 | ~uint16 | ~uint32](v T) int32 { +\treturn int32(v) +} + +`; + + generatedGoFile.write(goSource); + await formatFiles([enumValuesGeneratedGoPath]); + + const { stdout } = await runOutput("go", ["run", enumValuesGeneratedGoPath]); + const parsed = JSON.parse(stdout) as Record>; + return parsed; +} + +/** + * Evaluate the generated IIFE in a sandbox and return each member's actual runtime value, so + * validation checks what TS really computes rather than re-deriving it from the source text. + */ +async function evaluateEnumMembers(enumSource: string, enumName: string): Promise> { + const enumModule = await import(`data:text/javascript;charset=utf-8,${encodeURIComponent(enumSource)}`); + const enumObj = enumModule[enumName] as Record; + return enumObj; +} + +export default async function generateEnums(force = false) { + await generateOptions(force); + const inputs = [ + import.meta.filename, + path.join(import.meta.dirname, "options.ts"), + path.join(import.meta.dirname, "options-model.ts"), + path.join(import.meta.dirname, "schema.ts"), + ...goInputs(), + ]; + const enumFiles = enumDefs.map(def => { + const camelName = def.fileName ?? def.name.charAt(0).toLowerCase() + def.name.slice(1); + const enumInputs = [...inputs, path.join(ROOT, def.goFile)]; + if (def.metadata) enumInputs.push(path.join(ROOT, def.metadata.file)); + return { + def, + camelName, + typeFile: new GeneratedFile(path.join(ROOT, def.outDir, `${camelName}.enum.ts`), enumInputs), + runtimeFile: new GeneratedFile(path.join(ROOT, def.outDir, `${camelName}.ts`), enumInputs), + }; + }); + const generatedGoFile = new GeneratedFile(enumValuesGeneratedGoPath, [...inputs, ...enumDefs.map(def => path.join(ROOT, def.goFile))]); + const generatedFiles = [generatedGoFile, ...enumFiles.flatMap(({ typeFile, runtimeFile }) => [typeFile, runtimeFile])]; + if (generatedFiles.every(file => file.isCurrent(force))) { + console.log("Enums are up to date."); + return; + } + const ts = await import("typescript"); + + function transpile(enumSource: string): string { + return ts.transpileModule(enumSource, { + compilerOptions: { + module: ts.ModuleKind.ESNext, + target: ts.ScriptTarget.ESNext, + }, + }).outputText; + } + function convertEnumToTs(enumSource: string, enumName: string): string { + return enumSource.replace( + `export var ${enumName};`, + `export var ${enumName}: any;`, + ); + } + + console.log("Generating enums from metadata and Go source..."); + const generatedEnums: GeneratedEnum[] = []; + for (const { def, camelName, typeFile, runtimeFile } of enumFiles) { + const { members, code: enumTS } = generateEnum(def); + + // Generate .enum.ts (TypeScript enum — used for types) + typeFile.write(enumTS); + + // Generate .ts (IIFE — used at runtime) + const enumJsCode = transpile(enumTS); + const iifeSource = convertEnumToTs(enumJsCode, def.name); + runtimeFile.write(iifeSource); + generatedEnums.push({ + code: enumJsCode, + def, + members, + fileNames: [typeFile.fileName, runtimeFile.fileName], + }); + + console.log(` ${def.name}: ${members.length} members → ${camelName}.enum.ts, ${camelName}.ts`); + } + + console.log("Getting values from go"); + const goValuesByEnum = await computeGoGroundTruth(generatedEnums, generatedGoFile); + const mismatches: string[] = []; + for (const { def, members, code } of generatedEnums) { + if (def.stringEnum) continue; + const goValues = goValuesByEnum[def.name]; + assert(goValues, `Enum ${def.name} was not outputted from GO`); + const tsValues = await evaluateEnumMembers(code, def.name); + for (const m of members) { + const goValue = goValues[m.name]; + const tsValue = tsValues[m.name]; + if (tsValue !== goValue) { + mismatches.push( + `${def.name}.${m.name}: Go says ${goValue}, but generated TS (\`${m.value}\`) evaluates to ${tsValue}`, + ); + } + } + } + + if (mismatches.length > 0) { + throw new Error( + `Generated enum values disagree with Go (likely an operator precedence or transcription bug in generate:enums):\n` + + mismatches.map(m => ` - ${m}`).join("\n"), + ); + } + console.log("All generated values match Go."); + + await formatFiles(generatedEnums.flatMap(e => e.fileNames)); + for (const file of generatedFiles) file.markCurrent(); + console.log("Done."); +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + await generateEnums(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/generate-go-ast.ts b/tools/scripts/tsc/generate-go-ast.ts index c2c7ca98a2570..7f71fc30f830c 100644 --- a/tools/scripts/tsc/generate-go-ast.ts +++ b/tools/scripts/tsc/generate-go-ast.ts @@ -1,1140 +1,1140 @@ -/** - * Go AST code generator: reads tools/scripts/tsc/ast.json and produces internal/ast/ast_generated.go - * - * Usage: node tools/scripts/tsc/generate-go-ast.ts - * - * Generates: - * - Struct definitions for each node kind - * - As*() cast methods on *Node - * - New*()/Update*() factory methods on *NodeFactory - * - ForEachChild() implementations - * - VisitEachChild() implementations - * - Clone() implementations - * - Polymorphic accessor switch statements (Expression(), Type(), etc.) - * - Is*() type guard functions - */ - -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; -import { GeneratedFile } from "../gen/generatedFile.mts"; -import { - formatFilesSync, - parseGeneratorArgs, - repoRoot as ROOT, -} from "../gen/utils.mts"; -import type { - MemberInfo, - NodeType, - Type, -} from "./schema.ts"; -import { - api, - kindGuardName, -} from "./schema.ts"; - -// ──────────────────────────────────────────────────────────────────────────── -// Load schema -// ──────────────────────────────────────────────────────────────────────────── - -// Members that participate in factory/visitor/clone (excludes noFactory) -function schemaMembers(node: NodeType): MemberInfo[] { - return node.members.filter(m => !m.noFactory); -} - -function isTextContentType(type: Type): boolean { - if (type.kind === "primitive") { - return type.name === "string"; - } - if (type.kind === "list" && type.listKind === "raw") { - return type.elementType.kind === "primitive" && type.elementType.name === "string"; - } - return false; -} - -// Does this node have any string-typed member (triggering textCount++)? -function hasTextContent(node: NodeType): boolean { - if (node.members.length === 0) return false; - return schemaMembers(node).some(m => isTextContentType(m.type)); -} - -// ──────────────────────────────────────────────────────────────────────────── -// Code generation -// ──────────────────────────────────────────────────────────────────────────── - -class CodeWriter { - private lines: string[] = []; - private indent = 0; - - write(line: string = "") { - if (line === "") { - this.lines.push(""); - } - else { - this.lines.push("\t".repeat(this.indent) + line); - } - } - - writeRaw(line: string) { - this.lines.push(line); - } - - push() { - this.indent++; - } - pop() { - this.indent--; - } - - toString(): string { - return this.lines.join("\n"); - } -} - -function generateNodeFactoryStruct(w: CodeWriter) { - const arenaFields: { fieldName: string; typeName: string; }[] = []; - for (const node of api.nodes()) { - if (!node.arena) continue; - arenaFields.push({ - fieldName: `${api.uncapitalize(node.name)}Arena`, - typeName: node.name, - }); - } - arenaFields.push({ fieldName: "modifierListArena", typeName: "ModifierList" }); - arenaFields.push({ fieldName: "nodeListArena", typeName: "NodeList" }); - arenaFields.sort((a, b) => a.fieldName.localeCompare(b.fieldName)); - - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// NodeFactory"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - w.write("type NodeFactory struct {"); - w.push(); - w.write("hooks NodeFactoryHooks"); - for (const { fieldName, typeName } of arenaFields) { - w.write(`${fieldName} core.Arena[${typeName}]`); - } - w.write(""); - w.write("nodeCount int"); - w.write("textCount int"); - w.pop(); - w.write("}"); - w.write(""); -} - -function generateHeader(w: CodeWriter) { - w.write("// Code generated by tools/scripts/tsc/generate-go-ast.ts. DO NOT EDIT."); - w.write(""); - w.write("package ast"); - w.write(""); - w.write("import ("); - w.push(); - w.write('"sync/atomic"'); - w.write(""); - w.write('"github.com/microsoft/TypeScript/tsc/internal/core"'); - w.pop(); - w.write(")"); - w.write(""); - w.write("var _ = core.Same[string] // prevent unused import"); - w.write("var _ atomic.Uint32 // prevent unused import"); - w.write(""); -} - -// ── Generate struct definitions ──────────────────────────────────────────── - -/** - * Verifies that the generated Go structs do not embed a base along more than one path. - */ -function verifyNoDuplicateBases(): void { - const problems: string[] = []; - const check = (name: string, goExtends: string[]) => { - const copies = new Map(); - const walk = (keys: string[]) => { - for (const key of keys) { - copies.set(key, (copies.get(key) ?? 0) + 1); - walk(baseGoEmbeds(api.getBase(key))); - } - }; - walk(goExtends); - for (const [base, count] of copies) { - if (count > 1) problems.push(`${name} inherits ${base} ${count} times`); - } - }; - for (const base of api.bases()) check(base.key, baseGoEmbeds(base)); - for (const node of api.nodes()) check(node.name, goEmbeds(node.extendsKeys)); - - if (problems.length > 0) { - throw new Error(`ast.json declares duplicate embedded bases:\n ${problems.sort().join("\n ")}`); - } -} - -/** - * Verifies that the inheritance path containing NodeBase is embedded first. - */ -function verifyNodeBaseAtOffsetZero(): void { - const containsNodeBase = (key: string): boolean => { - if (key === "NodeBase") return true; - return baseGoEmbeds(api.getBase(key)).some(containsNodeBase); - }; - const problems: string[] = []; - const check = (name: string, goExtends: string[], requireNodeBase: boolean) => { - const nodeBaseIndex = goExtends.findIndex(containsNodeBase); - if (nodeBaseIndex < 0 && requireNodeBase) { - problems.push(`${name} does not embed NodeBase`); - } - else if (nodeBaseIndex > 0) { - const preceding = goExtends.slice(0, nodeBaseIndex).filter(key => !isZeroSizeBase(key)); - if (preceding.length > 0) { - problems.push(`${name} embeds ${goExtends[nodeBaseIndex]} after ${preceding.join(", ")}`); - } - } - }; - for (const base of api.bases()) check(base.key, baseGoEmbeds(base), false); - for (const node of api.nodes()) check(node.name, goEmbeds(node.extendsKeys), true); - - if (problems.length > 0) { - throw new Error(`ast.json does not embed NodeBase at offset zero:\n ${problems.sort().join("\n ")}`); - } -} - -verifyNoDuplicateBases(); -verifyNodeBaseAtOffsetZero(); - -// A base generated without fields or embeddings is a struct{} marker. Go pads a struct whose last field is -// zero-size (so the field's address stays in bounds), so markers are embedded first, never last; being -// zero-size, they don't move NodeBase off offset zero. -function isZeroSizeBase(key: string): boolean { - const base = api.getBase(key); - return !!base && base.fields.length === 0 && (base.extendsKeys.length === 0 || isInheritedDeclarationMarker(base)); -} - -function isInheritedDeclarationMarker(base: NodeType | undefined): boolean { - return !!base && - base.fields.length === 0 && - base.extendsKeys.length === 1 && - base.extendsKeys[0] === "DeclarationBase"; -} - -function baseGoEmbeds(base: NodeType | undefined): string[] { - return base && !isInheritedDeclarationMarker(base) ? goEmbeds(base.extendsKeys) : []; -} - -function expandGoExtends(extendsKeys: string[]): string[] { - const result: string[] = []; - const seen = new Set(); - for (const key of extendsKeys) { - const base = api.getBase(key); - // Go cannot embed multiple category bases that share DeclarationBase without - // introducing ambiguous promoted fields and methods. Keep each empty category - // marker and flatten its inherited storage alongside it. - const keys = isInheritedDeclarationMarker(base) ? [key, ...(base?.extendsKeys ?? [])] : [key]; - for (const expanded of keys) { - if (!seen.has(expanded)) { - seen.add(expanded); - result.push(expanded); - } - } - } - return result; -} - -function goEmbeds(extendsKeys: string[]): string[] { - const zeroSized: string[] = []; - const nonZeroSized: string[] = []; - for (const key of expandGoExtends(extendsKeys)) { - if (isZeroSizeBase(key)) { - zeroSized.push(key); - } - else { - nonZeroSized.push(key); - } - } - return [...zeroSized, ...nonZeroSized]; -} - -function generateStructDef(w: CodeWriter, node: NodeType) { - const structName = node.name; - w.write(`type ${structName} struct {`); - w.push(); - - // Embeddings from extends (each maps to a Go struct via convention) - for (const ext of goEmbeds(node.extendsKeys)) { - w.write(ext); - } - - // Fields from members (skip inherited, Kind params, and noGo) - if (node.members.length > 0) { - for (const m of node.members) { - if (m.inherited || m.isKindParam() || m.noGo) continue; - const fieldName = m.name; - const goType = m.goOnly ? m.rawType as string : m.type.formatGoReference(); - const comment = buildFieldComment(m); - if (comment) { - w.write(`${fieldName} ${goType} ${comment}`); - } - else { - w.write(`${fieldName} ${goType}`); - } - } - } - - w.pop(); - w.write("}"); - w.write(""); -} - -function buildFieldComment(m: MemberInfo): string { - const parts: string[] = []; - if (m.optional) parts.push("Optional"); - if (parts.length > 0) return `// ${parts.join(". ")}`; - return ""; -} - -function goSubtreeFactsTerm(m: MemberInfo): string { - const access = `node.${m.name}`; - if (m.listKind === "ModifierList") { - return `propagateModifierListSubtreeFacts(${access})`; - } - if (m.type.kind === "list") { - return `propagateNodeListSubtreeFacts(${access}, propagateSubtreeFacts)`; - } - return `propagateSubtreeFacts(${access})`; -} - -function generateSubtreeFacts(w: CodeWriter, node: NodeType) { - if (!node.generateSubtreeFacts) return; - - const childMembers = schemaMembers(node).filter(m => m.isChild()); - const structName = node.name; - w.write(`func (node *${structName}) computeSubtreeFacts() SubtreeFacts {`); - w.push(); - if (childMembers.length === 0) { - w.write("return SubtreeFactsNone"); - } - else { - for (let index = 0; index < childMembers.length; index++) { - const term = goSubtreeFactsTerm(childMembers[index]); - if (index === 0) { - const suffix = childMembers.length > 1 ? " |" : ""; - w.write(`return ${term}${suffix}`); - } - else { - const suffix = index < childMembers.length - 1 ? " |" : ""; - w.write(`${term}${suffix}`); - } - } - } - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate base struct definitions ────────────────────────────────────── - -// Bases that are hand-written and should not be generated -const HAND_WRITTEN_BASES = new Set(["NodeBase"]); - -function generateBaseStructDefs(w: CodeWriter) { - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// Base struct definitions"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - - for (const base of api.bases()) { - if (HAND_WRITTEN_BASES.has(base.key)) continue; - - const structName = base.key; - - const goExts = baseGoEmbeds(base); - - w.write(`type ${structName} struct {`); - w.push(); - - // Embeddings from extends - for (const ext of goExts) { - w.write(ext); - } - - // Schema fields - if (base.fields.length > 0) { - for (const field of base.fields) { - if (field.noGo) continue; - const goType = field.goOnly ? field.rawType as string : field.type.formatGoReference(); - const comment = field.optional ? " // Optional" : ""; - w.write(`${field.name} ${goType}${comment}`); - } - } - - w.pop(); - w.write("}"); - w.write(""); - } -} - -// ── Generate As*() cast methods ──────────────────────────────────────────── - -function generateAsCast(w: CodeWriter, name: string) { - const structName = name; - w.write(`func (n *Node) As${name}() *${structName} {`); - w.push(); - w.write(`return n.data.(*${structName})`); - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate New*() factory methods ──────────────────────────────────────── - -function isNodeFlagsMember(m: MemberInfo): boolean { - const type = m.type; - return type.kind === "primitive" && type.name === "NodeFlags"; -} - -function emitNewFactory( - w: CodeWriter, - funcName: string, - kindName: string, - structName: string, - node: NodeType, - members: MemberInfo[], - kindMember: MemberInfo | undefined, - nodeFlagsMembers: MemberInfo[], -) { - const params = members.map(m => `${m.goParamName()} ${m.type.formatGoReference()}`).join(", "); - - w.write(`func (f *NodeFactory) ${funcName}(${params}) *Node {`); - w.push(); - - if (node.arena) { - w.write(`data := f.${api.uncapitalize(structName)}Arena.New()`); - } - else { - w.write(`data := &${structName}{}`); - } - - for (const m of members) { - if (m.isKindParam()) continue; - if (isNodeFlagsMember(m)) continue; - const value = m.bitmask ? `${m.goParamName()} & ${m.bitmask}` : m.goParamName(); - w.write(`data.${m.name} = ${value}`); - } - - if (hasTextContent(node)) { - w.write("f.textCount++"); - } - - const kindArg = kindMember ? kindMember.goParamName() : `Kind${kindName}`; - - if (nodeFlagsMembers.length > 0) { - w.write(`node := f.newNode(${kindArg}, data)`); - for (const m of nodeFlagsMembers) { - const param = m.goParamName(); - if (m.bitmask) { - w.write(`node.Flags |= ${param} & ${m.bitmask}`); - } - else { - w.write(`node.Flags = ${param}`); - } - } - w.write("return node"); - } - else { - w.write(`return f.newNode(${kindArg}, data)`); - } - - w.pop(); - w.write("}"); - w.write(""); -} - -function generateNewFactory(w: CodeWriter, node: NodeType) { - const structName = node.name; - const members = schemaMembers(node); - const kindMember = members.find(m => m.isKindParam()); - const nodeFlagsMembers = members.filter(m => isNodeFlagsMember(m)); - emitNewFactory(w, `New${node.name}`, node.syntaxKindName, structName, node, members, kindMember, nodeFlagsMembers); - for (const alias of node.kindAliases) { - emitNewFactory(w, `New${alias}`, alias, structName, node, members, kindMember, nodeFlagsMembers); - } -} - -// ── Generate Update*() factory methods ───────────────────────────────────── - -function generateUpdateFactory(w: CodeWriter, node: NodeType) { - const structName = node.name; - const members = schemaMembers(node); - - // All non-Kind members participate in Update (both child and data) - const updateMembers = members.filter(m => !m.isKindParam()); - if (updateMembers.length === 0) return; - - // Leaf nodes (no child AST node members) don't get Update methods. - if (!updateMembers.some(m => m.isChild())) return; - - // Build parameter list - const params = [ - `node *${structName}`, - ...updateMembers.map(m => `${m.goParamName()} ${m.type.formatGoReference()}`), - ].join(", "); - - w.write(`func (f *NodeFactory) Update${node.name}(${params}) *Node {`); - w.push(); - - // Build comparison (all update members) - const comparisons = updateMembers.map(m => { - const type = m.type; - // Slices can't be compared with != in Go - if (type.kind === "list" && type.listKind === "raw") { - return `!core.Same(${m.goParamName()}, node.${m.name})`; - } - return `${m.goParamName()} != node.${m.name}`; - }); - - w.write(`if ${comparisons.join(" || ")} {`); - w.push(); - - // Call New with all members (Kind from original, everything else from params) - const newArgs = members.map(m => { - if (m.isKindParam()) { - return "node.Kind"; - } - return m.goParamName(); - }).join(", "); - - if (node.kindAliases.length > 0) { - w.write("switch node.Kind {"); - w.push(); - w.write(`case ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}:`); - w.push(); - w.write(`return updateNode(f.New${node.name}(${newArgs}), node.AsNode(), f.hooks)`); - w.pop(); - for (const alias of node.kindAliases) { - w.write(`case Kind${alias}:`); - w.push(); - w.write(`return updateNode(f.New${alias}(${newArgs}), node.AsNode(), f.hooks)`); - w.pop(); - } - w.write("default:"); - w.push(); - w.write(`panic("unexpected kind in Update${node.name}: " + node.Kind.String())`); - w.pop(); - w.pop(); - w.write("}"); - } - else { - w.write(`return updateNode(f.New${node.name}(${newArgs}), node.AsNode(), f.hooks)`); - } - w.pop(); - w.write("}"); - w.write("return node.AsNode()"); - - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate ForEachChild() ──────────────────────────────────────────────── - -function generateForEachChild(w: CodeWriter, node: NodeType) { - const members = schemaMembers(node); - const childMembers = members.filter(m => m.isChild()); - - if (childMembers.length === 0) { - // No children - empty implementation (already provided by NodeDefault) - return; - } - - const structName = node.name; - w.write(`func (node *${structName}) ForEachChild(v Visitor) bool {`); - w.push(); - - // Nodes with runtime-dependent child ordering delegate to a hand-written function. - if (node.handWrittenVisitor) { - w.write(`return forEachChild_${structName}(node, v)`); - w.pop(); - w.write("}"); - w.write(""); - return; - } - - // Build visit chain: visit(v, node.Field) || visitNodeList(v, node.Field) || ... - const parts = childMembers.map(m => { - const access = `node.${m.name}`; - const type = m.type; - const listKind = m.listKind; - if (listKind === "raw") { - return `visitNodes(v, ${access})`; - } - if (listKind === "ModifierList") { - return `visitModifiers(v, ${access})`; - } - if (listKind === "NodeList") { - return `visitNodeList(v, ${access})`; - } - return `visit(v, ${access})`; - }); - - // Join with || across multiple lines if needed - if (parts.length <= 3) { - w.write(`return ${parts.join(" || ")}`); - } - else { - w.write(`return ${parts[0]} ||`); - for (let i = 1; i < parts.length - 1; i++) { - w.write(`\t${parts[i]} ||`); - } - w.write(`\t${parts[parts.length - 1]}`); - } - - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate ForEachChild dispatch ───────────────────────────────────────── - -// Determines whether a node has a meaningful ForEachChild implementation (i.e. -// one that is not the no-op inherited from NodeDefault). This is true for any -// generated node with child members, or for hand-written nodes (e.g. SourceFile) -// which define ForEachChild manually in ast.go. -function hasForEachChild(node: NodeType): boolean { - if (node.handWritten) return true; - return schemaMembers(node).some(m => m.isChild()); -} - -// Generates a (*Node).ForEachChild method that dispatches on node.Kind to the -// concrete node type's ForEachChild method. -// -// This deliberately avoids calling node.data.ForEachChild(v) through the -// nodeData interface. An interface (or other indirect) call is opaque to escape -// analysis, which must then assume the visitor `v` escapes; that forces caller -// closures — and any locals they capture — onto the heap. Dispatching through a -// Kind switch to a statically-resolved concrete method lets escape analysis -// prove the visitor does not escape, keeping caller closures on the stack. The -// integer switch over Kind also compiles to a jump table, making dispatch -// cheaper than the interface call it replaces. -// -// Kinds whose node has no children fall through to `default` and return false, -// matching NodeDefault.ForEachChild. -function generateForEachChildDispatch(w: CodeWriter) { - w.write("func (n *Node) ForEachChild(v Visitor) bool {"); - w.push(); - w.write("switch n.Kind {"); - for (const node of api.nodes()) { - if (!hasForEachChild(node)) continue; - const kinds = node.allKinds().map(k => k.formatGoConstant()); - if (kinds.length === 0) continue; - w.write(`case ${kinds.join(", ")}:`); - w.push(); - w.write(`return n.data.(*${node.name}).ForEachChild(v)`); - w.pop(); - } - w.write("default:"); - w.push(); - w.write("return false"); - w.pop(); - w.write("}"); - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate VisitEachChild() ────────────────────────────────────────────── - -function generateVisitEachChild(w: CodeWriter, node: NodeType) { - const members = schemaMembers(node); - const childMembers = members.filter(m => m.isChild()); - - if (childMembers.length === 0) return; - - const structName = node.name; - w.write(`func (node *${structName}) VisitEachChild(v *NodeVisitor) *Node {`); - w.push(); - - // Nodes with runtime-dependent child ordering delegate to a hand-written function. - if (node.handWrittenVisitor) { - w.write(`return visitEachChild_${structName}(node, v)`); - w.pop(); - w.write("}"); - w.write(""); - return; - } - - // For raw slice lists, emit local variables with core.SameMap - const updateMembers = members.filter(m => !m.isKindParam()); - const rawListLocals: Map = new Map(); - for (const m of updateMembers) { - const type = m.type; - if (m.isChild() && type.kind === "list" && type.listKind === "raw") { - const localName = m.goParamName(); - rawListLocals.set(m.name, localName); - w.write(`${localName} := core.SameMap(node.${m.name}, func(n *Node) *Node { return v.visitNode(n) })`); - } - } - - const args = updateMembers.map(m => { - if (!m.isChild()) { - return `node.${m.name}`; - } - - // Raw list: use the local variable - if (rawListLocals.has(m.name)) { - return rawListLocals.get(m.name)!; - } - - const access = `node.${m.name}`; - const type = m.type; - const listKind = m.listKind; - - if (m.visit) { - return `v.visit${api.capitalize(m.visit)}(${access})`; - } - if (listKind === "ModifierList") { - return `v.visitModifiers(${access})`; - } - if (listKind === "NodeList") { - return `v.visitNodes(${access})`; - } - if (type.kind === "primitive" && type.name === "Token") return `v.visitToken(${access})`; - return `v.visitNode(${access})`; - }).join(", "); - - w.write(`return v.Factory.Update${node.name}(node, ${args})`); - - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate Clone() ─────────────────────────────────────────────────────── - -function generateClone(w: CodeWriter, node: NodeType) { - const structName = node.name; - const members = schemaMembers(node); - - w.write(`func (node *${structName}) Clone(f NodeFactoryCoercible) *Node {`); - w.push(); - - // Build args for New* call - // Clone is a struct method, so it can access private fields directly - const args = members.map(m => { - if (m.isKindParam()) { - return "node.Kind"; - } - const type = m.declaredType; - - if (m.inherited && type?.kind === "alias" && type.name === "ModifierLike") { - return "node.Modifiers()"; - } - // Use direct field access (Clone is a struct method, can access private fields) - return `node.${m.name}`; - }).join(", "); - - if (node.kindAliases.length > 0) { - w.write("switch node.Kind {"); - w.push(); - w.write(`case ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}:`); - w.push(); - w.write(`return cloneNode(f.AsNodeFactory().New${node.name}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); - w.pop(); - for (const alias of node.kindAliases) { - w.write(`case Kind${alias}:`); - w.push(); - w.write(`return cloneNode(f.AsNodeFactory().New${alias}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); - w.pop(); - } - w.write("default:"); - w.push(); - w.write(`panic("unexpected kind in ${structName}.Clone: " + node.Kind.String())`); - w.pop(); - w.pop(); - w.write("}"); - } - else { - w.write(`return cloneNode(f.AsNodeFactory().New${node.name}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); - } - - w.pop(); - w.write("}"); - w.write(""); -} - -// ── Generate Is*() functions ─────────────────────────────────────────────── - -function generateIsFunction(w: CodeWriter, node: NodeType) { - const kindTypes = node.kindTypes(); - if (node.kindType.kind === "typeParameter") { - w.write(`func Is${node.name}(node *Node) bool {`); - w.push(); - w.write("switch node.Kind {"); - w.write(`case ${kindTypes.map(kind => kind.formatGoConstant()).join(", ")}:`); - w.push(); - w.write("return true"); - w.pop(); - w.write("}"); - w.write("return false"); - w.pop(); - w.write("}"); - w.write(""); - return; - } - - if (node.isMultiKind()) { - for (const kind of kindTypes) { - const kindName = kind.name; - w.write(`func Is${kindName}(node *Node) bool {`); - w.push(); - w.write(`return node.Kind == ${kind.formatGoConstant()}`); - w.pop(); - w.write("}"); - w.write(""); - } - return; - } - - w.write(`func Is${node.name}(node *Node) bool {`); - w.push(); - w.write(`return node.Kind == ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}`); - w.pop(); - w.write("}"); - w.write(""); - for (const alias of node.kindAliases) { - w.write(`func Is${alias}(node *Node) bool {`); - w.push(); - w.write(`return node.Kind == Kind${alias}`); - w.pop(); - w.write("}"); - w.write(""); - } -} - -// ── Generate kind alias guards ───────────────────────────────────────────── - -/** Go guard name: "IsTokenKind", "IsKeywordKind", etc. Capital I, no "Syntax". */ -function goKindGuardName(aliasName: string): string { - const tsName = kindGuardName(aliasName); // e.g. "isTokenKind" - return tsName.charAt(0).toUpperCase() + tsName.slice(1); // e.g. "IsTokenKind" -} - -function generateKindAliasGuards(w: CodeWriter) { - // JSDocSyntaxKind → "IsJSDocKind" conflicts with the hand-written IsJSDocKind in utilities.go - // which checks JSDoc NODE kinds (FirstJSDocNode..LastJSDocNode), a completely different semantic. - const skipGuards = new Set(["IsJSDocKind"]); - - for (const guard of api.kindGuards()) { - const funcName = goKindGuardName(guard.aliasName); - if (skipGuards.has(funcName)) continue; - - if (guard.type === "range") { - w.write(`func ${funcName}(kind Kind) bool {`); - w.push(); - w.write(`return kind >= Kind${guard.first} && kind <= Kind${guard.last}`); - w.pop(); - w.write("}"); - w.write(""); - } - else { - // Enumerated: generate a switch statement. - // Expand sub-aliases to their concrete members. - const expanded = api.expandKindAliasMembers(guard.aliasName); - w.write(`func ${funcName}(kind Kind) bool {`); - w.push(); - w.write("switch kind {"); - w.push(); - w.write(`case ${expanded.map(m => m.formatGoConstant()).join(", ")}:`); - w.push(); - w.write("return true"); - w.pop(); - w.pop(); - w.write("}"); - w.write("return false"); - w.pop(); - w.write("}"); - w.write(""); - } - } -} - -// ── Generate Name() accessor ─────────────────────────────────────────────── - -function generateNameAccessor(w: CodeWriter, node: NodeType) { - const members = schemaMembers(node); - const nameMember = members.find(m => m.name === "name"); - if (!nameMember) return; - - // Check if private (either directly or via trait) - const isPrivate = nameMember.inherited - ? (nameMember.inheritedField?.private || false) - : (nameMember.private || false); - if (!isPrivate) return; - - const structName = node.name; - w.write(`func (node *${structName}) Name() *DeclarationName {`); - w.push(); - w.write("return node.name"); - w.pop(); - w.write("}"); - w.write(""); -} - -// ──────────────────────────────────────────────────────────────────────────── -// Main generation -// ──────────────────────────────────────────────────────────────────────────── - -function generate(): string { - const w = new CodeWriter(); - - generateHeader(w); - generateNodeFactoryStruct(w); - - // Generate base struct definitions - generateBaseStructDefs(w); - - // Generate node type aliases (FooNode = Node for every concrete node type) - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// Node type aliases"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - w.write("type ("); - w.push(); - for (const node of api.nodes()) { - w.write(`${node.name}Node = Node`); - } - // Instantiation aliases (e.g. EndOfFile = Node, AbstractKeyword = Node) - for (const node of api.nodes()) { - if (node.instantiationAliases.length === 0) continue; - for (const alias of node.instantiationAliases) { - w.write(`${alias.name} = Node`); - } - } - w.pop(); - w.write(")"); - w.write(""); - - // NodeList type aliases - const listAliases = api.listAliases(); - if (listAliases.length > 0) { - w.write("type ("); - w.push(); - const maxLen = Math.max(...listAliases.map(alias => alias.name.length)); - for (const listAlias of listAliases) { - const padding = " ".repeat(maxLen - listAlias.name.length); - w.write(`${listAlias.name}${padding} = NodeList // NodeList[*${listAlias.elementTypeName}]`); - } - w.pop(); - w.write(")"); - w.write(""); - } - - // Node union aliases (e.g. Statement = Node, BlockOrExpression = Node) - const nodeAliases = api.nodeAliases(); - if (nodeAliases.length > 0) { - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// Node union aliases"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - w.write("type ("); - w.push(); - const maxAliasLen = Math.max(...nodeAliases.map(alias => alias.name.length)); - for (const alias of nodeAliases) { - const padding = " ".repeat(maxAliasLen - alias.name.length); - let comment: string; - if (alias.isBaseAlias && alias.baseKey) { - comment = `Node with ${alias.baseKey}`; - } - else if (alias.isUnion) { - comment = alias.unionMemberNames.join(" | "); - } - else { - comment = ""; - } - w.write(`${alias.name}${padding} = Node${comment ? ` // ${comment}` : ""}`); - } - w.pop(); - w.write(")"); - w.write(""); - } - - // Generate for each node - for (const node of api.nodes()) { - // Section comment - w.write(`// ──────────────────────────────────────────────────────────────────────`); - w.write(`// ${node.name}`); - w.write(`// ──────────────────────────────────────────────────────────────────────`); - w.write(""); - - if (!node.handWritten) { - generateStructDef(w, node); - generateNewFactory(w, node); - generateUpdateFactory(w, node); - generateForEachChild(w, node); - generateVisitEachChild(w, node); - generateClone(w, node); - generateSubtreeFacts(w, node); - generateNameAccessor(w, node); - } - generateIsFunction(w, node); - if (node.handWritten) { - w.write(""); - w.write("// Struct and factory methods hand-written in ./ast.go"); - } - } - - // ForEachChild dispatch - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// ForEachChild dispatch"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - generateForEachChildDispatch(w); - - // As*() casts - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// As*() cast methods"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - for (const node of api.nodes()) { - generateAsCast(w, node.name); - } - - // Kind alias guards - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write("// Kind alias guards"); - w.write("// ──────────────────────────────────────────────────────────────────────"); - w.write(""); - generateKindAliasGuards(w); - - return w.toString(); -} - -// ──────────────────────────────────────────────────────────────────────────── -// Write output -// ──────────────────────────────────────────────────────────────────────────── - -// ──────────────────────────────────────────────────────────────────────────── -// Kind generation -// ──────────────────────────────────────────────────────────────────────────── - -function generateKind(): string { - const w = new CodeWriter(); - w.write("// Code generated by tools/scripts/tsc/generate-go-ast.ts. DO NOT EDIT."); - w.write(""); - w.write("package ast"); - w.write(""); - w.write("//go:generate npx hereby generate:ast-stringer"); - w.write(""); - w.write("type Kind int16"); - w.write(""); - w.write("const ("); - w.push(); - - const elements = api.kindElements(); - const markers = api.kindMarkers(); - const kindUnions = api.kindAliases(); - - // Build set of all defined kind names for validation - const definedKinds = new Set(); - for (const element of elements) { - if (element.name) { - definedKinds.add(element.name); - } - } - - // Validate marker references (markers can reference kind names or other marker names) - const markerNames = new Set(markers.map(m => m.name)); - for (const marker of markers) { - if (!definedKinds.has(marker.value) && !markerNames.has(marker.value)) { - throw new Error(`Kind marker ${marker.name} references undefined kind or marker "${marker.value}"`); - } - } - - // Validate union references - for (const kindUnion of kindUnions) { - for (const m of kindUnion.members) { - if (!definedKinds.has(m) && !api.hasKindAlias(m)) { - throw new Error(`Kind union ${kindUnion.name} references undefined kind or union "${m}"`); - } - } - } - - // Emit elements - let first = true; - for (const el of elements) { - if (!el.name) { - w.write(`// ${el.comment}`); - continue; - } - const trailing = el.comment ? ` // ${el.comment}` : ""; - if (first) { - w.write(`Kind${el.name} Kind = iota${trailing}`); - first = false; - } - else { - w.write(`Kind${el.name}${trailing}`); - } - } - - // KindCount - w.write("KindCount"); - - // Markers - const maxLen = Math.max(...markers.map(m => m.name.length)); - for (const marker of markers) { - const padding = " ".repeat(maxLen - marker.name.length); - w.write(`Kind${marker.name}${padding} = Kind${marker.value}`); - } - - w.pop(); - w.write(")"); - w.write(""); - - // Kind union type aliases - if (kindUnions.length > 0) { - w.write("type ("); - w.push(); - for (const { name, members } of kindUnions) { - function expandMembers(ms: string[]): string[] { - const result: string[] = []; - for (const m of ms) { - const alias = api.getKindAlias(m); - if (alias) { - result.push(...expandMembers(alias.members)); - } - else { - result.push(m); - } - } - return result; - } - const expanded = expandMembers(members); - const comment = expanded.map(m => `Kind${m}`).join(" | "); - w.write(`${name} = Kind // ${comment}`); - } - w.pop(); - w.write(")"); - w.write(""); - } - - return w.toString(); -} - -function writeAndFormat(filePath: string, generateContent: () => string, force: boolean) { - const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); - if (generated.isCurrent(force)) return; - generated.write(generateContent()); - formatFilesSync([filePath]); - generated.markCurrent(); - console.log(`Wrote ${filePath}`); -} - -export default function main(force = false) { - console.log("Generating Go AST code..."); - - const outPath = path.join(ROOT, "tsc/internal/ast/ast_generated.go"); - writeAndFormat(outPath, () => generate() + "\n", force); - - const kindOutPath = path.join(ROOT, "tsc/internal/ast/kind_generated.go"); - writeAndFormat(kindOutPath, () => generateKind() + "\n", force); -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - main(parseGeneratorArgs({}).force); -} +/** + * Go AST code generator: reads tools/scripts/tsc/ast.json and produces internal/ast/ast_generated.go + * + * Usage: node tools/scripts/tsc/generate-go-ast.ts + * + * Generates: + * - Struct definitions for each node kind + * - As*() cast methods on *Node + * - New*()/Update*() factory methods on *NodeFactory + * - ForEachChild() implementations + * - VisitEachChild() implementations + * - Clone() implementations + * - Polymorphic accessor switch statements (Expression(), Type(), etc.) + * - Is*() type guard functions + */ + +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import { GeneratedFile } from "../gen/generatedFile.mts"; +import { + formatFilesSync, + parseGeneratorArgs, + repoRoot as ROOT, +} from "../gen/utils.mts"; +import type { + MemberInfo, + NodeType, + Type, +} from "./schema.ts"; +import { + api, + kindGuardName, +} from "./schema.ts"; + +// ──────────────────────────────────────────────────────────────────────────── +// Load schema +// ──────────────────────────────────────────────────────────────────────────── + +// Members that participate in factory/visitor/clone (excludes noFactory) +function schemaMembers(node: NodeType): MemberInfo[] { + return node.members.filter(m => !m.noFactory); +} + +function isTextContentType(type: Type): boolean { + if (type.kind === "primitive") { + return type.name === "string"; + } + if (type.kind === "list" && type.listKind === "raw") { + return type.elementType.kind === "primitive" && type.elementType.name === "string"; + } + return false; +} + +// Does this node have any string-typed member (triggering textCount++)? +function hasTextContent(node: NodeType): boolean { + if (node.members.length === 0) return false; + return schemaMembers(node).some(m => isTextContentType(m.type)); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Code generation +// ──────────────────────────────────────────────────────────────────────────── + +class CodeWriter { + private lines: string[] = []; + private indent = 0; + + write(line: string = "") { + if (line === "") { + this.lines.push(""); + } + else { + this.lines.push("\t".repeat(this.indent) + line); + } + } + + writeRaw(line: string) { + this.lines.push(line); + } + + push() { + this.indent++; + } + pop() { + this.indent--; + } + + toString(): string { + return this.lines.join("\n"); + } +} + +function generateNodeFactoryStruct(w: CodeWriter) { + const arenaFields: { fieldName: string; typeName: string; }[] = []; + for (const node of api.nodes()) { + if (!node.arena) continue; + arenaFields.push({ + fieldName: `${api.uncapitalize(node.name)}Arena`, + typeName: node.name, + }); + } + arenaFields.push({ fieldName: "modifierListArena", typeName: "ModifierList" }); + arenaFields.push({ fieldName: "nodeListArena", typeName: "NodeList" }); + arenaFields.sort((a, b) => a.fieldName.localeCompare(b.fieldName)); + + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// NodeFactory"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + w.write("type NodeFactory struct {"); + w.push(); + w.write("hooks NodeFactoryHooks"); + for (const { fieldName, typeName } of arenaFields) { + w.write(`${fieldName} core.Arena[${typeName}]`); + } + w.write(""); + w.write("nodeCount int"); + w.write("textCount int"); + w.pop(); + w.write("}"); + w.write(""); +} + +function generateHeader(w: CodeWriter) { + w.write("// Code generated by tools/scripts/tsc/generate-go-ast.ts. DO NOT EDIT."); + w.write(""); + w.write("package ast"); + w.write(""); + w.write("import ("); + w.push(); + w.write('"sync/atomic"'); + w.write(""); + w.write('"github.com/microsoft/TypeScript/tsc/internal/core"'); + w.pop(); + w.write(")"); + w.write(""); + w.write("var _ = core.Same[string] // prevent unused import"); + w.write("var _ atomic.Uint32 // prevent unused import"); + w.write(""); +} + +// ── Generate struct definitions ──────────────────────────────────────────── + +/** + * Verifies that the generated Go structs do not embed a base along more than one path. + */ +function verifyNoDuplicateBases(): void { + const problems: string[] = []; + const check = (name: string, goExtends: string[]) => { + const copies = new Map(); + const walk = (keys: string[]) => { + for (const key of keys) { + copies.set(key, (copies.get(key) ?? 0) + 1); + walk(baseGoEmbeds(api.getBase(key))); + } + }; + walk(goExtends); + for (const [base, count] of copies) { + if (count > 1) problems.push(`${name} inherits ${base} ${count} times`); + } + }; + for (const base of api.bases()) check(base.key, baseGoEmbeds(base)); + for (const node of api.nodes()) check(node.name, goEmbeds(node.extendsKeys)); + + if (problems.length > 0) { + throw new Error(`ast.json declares duplicate embedded bases:\n ${problems.sort().join("\n ")}`); + } +} + +/** + * Verifies that the inheritance path containing NodeBase is embedded first. + */ +function verifyNodeBaseAtOffsetZero(): void { + const containsNodeBase = (key: string): boolean => { + if (key === "NodeBase") return true; + return baseGoEmbeds(api.getBase(key)).some(containsNodeBase); + }; + const problems: string[] = []; + const check = (name: string, goExtends: string[], requireNodeBase: boolean) => { + const nodeBaseIndex = goExtends.findIndex(containsNodeBase); + if (nodeBaseIndex < 0 && requireNodeBase) { + problems.push(`${name} does not embed NodeBase`); + } + else if (nodeBaseIndex > 0) { + const preceding = goExtends.slice(0, nodeBaseIndex).filter(key => !isZeroSizeBase(key)); + if (preceding.length > 0) { + problems.push(`${name} embeds ${goExtends[nodeBaseIndex]} after ${preceding.join(", ")}`); + } + } + }; + for (const base of api.bases()) check(base.key, baseGoEmbeds(base), false); + for (const node of api.nodes()) check(node.name, goEmbeds(node.extendsKeys), true); + + if (problems.length > 0) { + throw new Error(`ast.json does not embed NodeBase at offset zero:\n ${problems.sort().join("\n ")}`); + } +} + +verifyNoDuplicateBases(); +verifyNodeBaseAtOffsetZero(); + +// A base generated without fields or embeddings is a struct{} marker. Go pads a struct whose last field is +// zero-size (so the field's address stays in bounds), so markers are embedded first, never last; being +// zero-size, they don't move NodeBase off offset zero. +function isZeroSizeBase(key: string): boolean { + const base = api.getBase(key); + return !!base && base.fields.length === 0 && (base.extendsKeys.length === 0 || isInheritedDeclarationMarker(base)); +} + +function isInheritedDeclarationMarker(base: NodeType | undefined): boolean { + return !!base && + base.fields.length === 0 && + base.extendsKeys.length === 1 && + base.extendsKeys[0] === "DeclarationBase"; +} + +function baseGoEmbeds(base: NodeType | undefined): string[] { + return base && !isInheritedDeclarationMarker(base) ? goEmbeds(base.extendsKeys) : []; +} + +function expandGoExtends(extendsKeys: string[]): string[] { + const result: string[] = []; + const seen = new Set(); + for (const key of extendsKeys) { + const base = api.getBase(key); + // Go cannot embed multiple category bases that share DeclarationBase without + // introducing ambiguous promoted fields and methods. Keep each empty category + // marker and flatten its inherited storage alongside it. + const keys = isInheritedDeclarationMarker(base) ? [key, ...(base?.extendsKeys ?? [])] : [key]; + for (const expanded of keys) { + if (!seen.has(expanded)) { + seen.add(expanded); + result.push(expanded); + } + } + } + return result; +} + +function goEmbeds(extendsKeys: string[]): string[] { + const zeroSized: string[] = []; + const nonZeroSized: string[] = []; + for (const key of expandGoExtends(extendsKeys)) { + if (isZeroSizeBase(key)) { + zeroSized.push(key); + } + else { + nonZeroSized.push(key); + } + } + return [...zeroSized, ...nonZeroSized]; +} + +function generateStructDef(w: CodeWriter, node: NodeType) { + const structName = node.name; + w.write(`type ${structName} struct {`); + w.push(); + + // Embeddings from extends (each maps to a Go struct via convention) + for (const ext of goEmbeds(node.extendsKeys)) { + w.write(ext); + } + + // Fields from members (skip inherited, Kind params, and noGo) + if (node.members.length > 0) { + for (const m of node.members) { + if (m.inherited || m.isKindParam() || m.noGo) continue; + const fieldName = m.name; + const goType = m.goOnly ? m.rawType as string : m.type.formatGoReference(); + const comment = buildFieldComment(m); + if (comment) { + w.write(`${fieldName} ${goType} ${comment}`); + } + else { + w.write(`${fieldName} ${goType}`); + } + } + } + + w.pop(); + w.write("}"); + w.write(""); +} + +function buildFieldComment(m: MemberInfo): string { + const parts: string[] = []; + if (m.optional) parts.push("Optional"); + if (parts.length > 0) return `// ${parts.join(". ")}`; + return ""; +} + +function goSubtreeFactsTerm(m: MemberInfo): string { + const access = `node.${m.name}`; + if (m.listKind === "ModifierList") { + return `propagateModifierListSubtreeFacts(${access})`; + } + if (m.type.kind === "list") { + return `propagateNodeListSubtreeFacts(${access}, propagateSubtreeFacts)`; + } + return `propagateSubtreeFacts(${access})`; +} + +function generateSubtreeFacts(w: CodeWriter, node: NodeType) { + if (!node.generateSubtreeFacts) return; + + const childMembers = schemaMembers(node).filter(m => m.isChild()); + const structName = node.name; + w.write(`func (node *${structName}) computeSubtreeFacts() SubtreeFacts {`); + w.push(); + if (childMembers.length === 0) { + w.write("return SubtreeFactsNone"); + } + else { + for (let index = 0; index < childMembers.length; index++) { + const term = goSubtreeFactsTerm(childMembers[index]); + if (index === 0) { + const suffix = childMembers.length > 1 ? " |" : ""; + w.write(`return ${term}${suffix}`); + } + else { + const suffix = index < childMembers.length - 1 ? " |" : ""; + w.write(`${term}${suffix}`); + } + } + } + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate base struct definitions ────────────────────────────────────── + +// Bases that are hand-written and should not be generated +const HAND_WRITTEN_BASES = new Set(["NodeBase"]); + +function generateBaseStructDefs(w: CodeWriter) { + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// Base struct definitions"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + + for (const base of api.bases()) { + if (HAND_WRITTEN_BASES.has(base.key)) continue; + + const structName = base.key; + + const goExts = baseGoEmbeds(base); + + w.write(`type ${structName} struct {`); + w.push(); + + // Embeddings from extends + for (const ext of goExts) { + w.write(ext); + } + + // Schema fields + if (base.fields.length > 0) { + for (const field of base.fields) { + if (field.noGo) continue; + const goType = field.goOnly ? field.rawType as string : field.type.formatGoReference(); + const comment = field.optional ? " // Optional" : ""; + w.write(`${field.name} ${goType}${comment}`); + } + } + + w.pop(); + w.write("}"); + w.write(""); + } +} + +// ── Generate As*() cast methods ──────────────────────────────────────────── + +function generateAsCast(w: CodeWriter, name: string) { + const structName = name; + w.write(`func (n *Node) As${name}() *${structName} {`); + w.push(); + w.write(`return n.data.(*${structName})`); + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate New*() factory methods ──────────────────────────────────────── + +function isNodeFlagsMember(m: MemberInfo): boolean { + const type = m.type; + return type.kind === "primitive" && type.name === "NodeFlags"; +} + +function emitNewFactory( + w: CodeWriter, + funcName: string, + kindName: string, + structName: string, + node: NodeType, + members: MemberInfo[], + kindMember: MemberInfo | undefined, + nodeFlagsMembers: MemberInfo[], +) { + const params = members.map(m => `${m.goParamName()} ${m.type.formatGoReference()}`).join(", "); + + w.write(`func (f *NodeFactory) ${funcName}(${params}) *Node {`); + w.push(); + + if (node.arena) { + w.write(`data := f.${api.uncapitalize(structName)}Arena.New()`); + } + else { + w.write(`data := &${structName}{}`); + } + + for (const m of members) { + if (m.isKindParam()) continue; + if (isNodeFlagsMember(m)) continue; + const value = m.bitmask ? `${m.goParamName()} & ${m.bitmask}` : m.goParamName(); + w.write(`data.${m.name} = ${value}`); + } + + if (hasTextContent(node)) { + w.write("f.textCount++"); + } + + const kindArg = kindMember ? kindMember.goParamName() : `Kind${kindName}`; + + if (nodeFlagsMembers.length > 0) { + w.write(`node := f.newNode(${kindArg}, data)`); + for (const m of nodeFlagsMembers) { + const param = m.goParamName(); + if (m.bitmask) { + w.write(`node.Flags |= ${param} & ${m.bitmask}`); + } + else { + w.write(`node.Flags = ${param}`); + } + } + w.write("return node"); + } + else { + w.write(`return f.newNode(${kindArg}, data)`); + } + + w.pop(); + w.write("}"); + w.write(""); +} + +function generateNewFactory(w: CodeWriter, node: NodeType) { + const structName = node.name; + const members = schemaMembers(node); + const kindMember = members.find(m => m.isKindParam()); + const nodeFlagsMembers = members.filter(m => isNodeFlagsMember(m)); + emitNewFactory(w, `New${node.name}`, node.syntaxKindName, structName, node, members, kindMember, nodeFlagsMembers); + for (const alias of node.kindAliases) { + emitNewFactory(w, `New${alias}`, alias, structName, node, members, kindMember, nodeFlagsMembers); + } +} + +// ── Generate Update*() factory methods ───────────────────────────────────── + +function generateUpdateFactory(w: CodeWriter, node: NodeType) { + const structName = node.name; + const members = schemaMembers(node); + + // All non-Kind members participate in Update (both child and data) + const updateMembers = members.filter(m => !m.isKindParam()); + if (updateMembers.length === 0) return; + + // Leaf nodes (no child AST node members) don't get Update methods. + if (!updateMembers.some(m => m.isChild())) return; + + // Build parameter list + const params = [ + `node *${structName}`, + ...updateMembers.map(m => `${m.goParamName()} ${m.type.formatGoReference()}`), + ].join(", "); + + w.write(`func (f *NodeFactory) Update${node.name}(${params}) *Node {`); + w.push(); + + // Build comparison (all update members) + const comparisons = updateMembers.map(m => { + const type = m.type; + // Slices can't be compared with != in Go + if (type.kind === "list" && type.listKind === "raw") { + return `!core.Same(${m.goParamName()}, node.${m.name})`; + } + return `${m.goParamName()} != node.${m.name}`; + }); + + w.write(`if ${comparisons.join(" || ")} {`); + w.push(); + + // Call New with all members (Kind from original, everything else from params) + const newArgs = members.map(m => { + if (m.isKindParam()) { + return "node.Kind"; + } + return m.goParamName(); + }).join(", "); + + if (node.kindAliases.length > 0) { + w.write("switch node.Kind {"); + w.push(); + w.write(`case ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}:`); + w.push(); + w.write(`return updateNode(f.New${node.name}(${newArgs}), node.AsNode(), f.hooks)`); + w.pop(); + for (const alias of node.kindAliases) { + w.write(`case Kind${alias}:`); + w.push(); + w.write(`return updateNode(f.New${alias}(${newArgs}), node.AsNode(), f.hooks)`); + w.pop(); + } + w.write("default:"); + w.push(); + w.write(`panic("unexpected kind in Update${node.name}: " + node.Kind.String())`); + w.pop(); + w.pop(); + w.write("}"); + } + else { + w.write(`return updateNode(f.New${node.name}(${newArgs}), node.AsNode(), f.hooks)`); + } + w.pop(); + w.write("}"); + w.write("return node.AsNode()"); + + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate ForEachChild() ──────────────────────────────────────────────── + +function generateForEachChild(w: CodeWriter, node: NodeType) { + const members = schemaMembers(node); + const childMembers = members.filter(m => m.isChild()); + + if (childMembers.length === 0) { + // No children - empty implementation (already provided by NodeDefault) + return; + } + + const structName = node.name; + w.write(`func (node *${structName}) ForEachChild(v Visitor) bool {`); + w.push(); + + // Nodes with runtime-dependent child ordering delegate to a hand-written function. + if (node.handWrittenVisitor) { + w.write(`return forEachChild_${structName}(node, v)`); + w.pop(); + w.write("}"); + w.write(""); + return; + } + + // Build visit chain: visit(v, node.Field) || visitNodeList(v, node.Field) || ... + const parts = childMembers.map(m => { + const access = `node.${m.name}`; + const type = m.type; + const listKind = m.listKind; + if (listKind === "raw") { + return `visitNodes(v, ${access})`; + } + if (listKind === "ModifierList") { + return `visitModifiers(v, ${access})`; + } + if (listKind === "NodeList") { + return `visitNodeList(v, ${access})`; + } + return `visit(v, ${access})`; + }); + + // Join with || across multiple lines if needed + if (parts.length <= 3) { + w.write(`return ${parts.join(" || ")}`); + } + else { + w.write(`return ${parts[0]} ||`); + for (let i = 1; i < parts.length - 1; i++) { + w.write(`\t${parts[i]} ||`); + } + w.write(`\t${parts[parts.length - 1]}`); + } + + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate ForEachChild dispatch ───────────────────────────────────────── + +// Determines whether a node has a meaningful ForEachChild implementation (i.e. +// one that is not the no-op inherited from NodeDefault). This is true for any +// generated node with child members, or for hand-written nodes (e.g. SourceFile) +// which define ForEachChild manually in ast.go. +function hasForEachChild(node: NodeType): boolean { + if (node.handWritten) return true; + return schemaMembers(node).some(m => m.isChild()); +} + +// Generates a (*Node).ForEachChild method that dispatches on node.Kind to the +// concrete node type's ForEachChild method. +// +// This deliberately avoids calling node.data.ForEachChild(v) through the +// nodeData interface. An interface (or other indirect) call is opaque to escape +// analysis, which must then assume the visitor `v` escapes; that forces caller +// closures — and any locals they capture — onto the heap. Dispatching through a +// Kind switch to a statically-resolved concrete method lets escape analysis +// prove the visitor does not escape, keeping caller closures on the stack. The +// integer switch over Kind also compiles to a jump table, making dispatch +// cheaper than the interface call it replaces. +// +// Kinds whose node has no children fall through to `default` and return false, +// matching NodeDefault.ForEachChild. +function generateForEachChildDispatch(w: CodeWriter) { + w.write("func (n *Node) ForEachChild(v Visitor) bool {"); + w.push(); + w.write("switch n.Kind {"); + for (const node of api.nodes()) { + if (!hasForEachChild(node)) continue; + const kinds = node.allKinds().map(k => k.formatGoConstant()); + if (kinds.length === 0) continue; + w.write(`case ${kinds.join(", ")}:`); + w.push(); + w.write(`return n.data.(*${node.name}).ForEachChild(v)`); + w.pop(); + } + w.write("default:"); + w.push(); + w.write("return false"); + w.pop(); + w.write("}"); + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate VisitEachChild() ────────────────────────────────────────────── + +function generateVisitEachChild(w: CodeWriter, node: NodeType) { + const members = schemaMembers(node); + const childMembers = members.filter(m => m.isChild()); + + if (childMembers.length === 0) return; + + const structName = node.name; + w.write(`func (node *${structName}) VisitEachChild(v *NodeVisitor) *Node {`); + w.push(); + + // Nodes with runtime-dependent child ordering delegate to a hand-written function. + if (node.handWrittenVisitor) { + w.write(`return visitEachChild_${structName}(node, v)`); + w.pop(); + w.write("}"); + w.write(""); + return; + } + + // For raw slice lists, emit local variables with core.SameMap + const updateMembers = members.filter(m => !m.isKindParam()); + const rawListLocals: Map = new Map(); + for (const m of updateMembers) { + const type = m.type; + if (m.isChild() && type.kind === "list" && type.listKind === "raw") { + const localName = m.goParamName(); + rawListLocals.set(m.name, localName); + w.write(`${localName} := core.SameMap(node.${m.name}, func(n *Node) *Node { return v.visitNode(n) })`); + } + } + + const args = updateMembers.map(m => { + if (!m.isChild()) { + return `node.${m.name}`; + } + + // Raw list: use the local variable + if (rawListLocals.has(m.name)) { + return rawListLocals.get(m.name)!; + } + + const access = `node.${m.name}`; + const type = m.type; + const listKind = m.listKind; + + if (m.visit) { + return `v.visit${api.capitalize(m.visit)}(${access})`; + } + if (listKind === "ModifierList") { + return `v.visitModifiers(${access})`; + } + if (listKind === "NodeList") { + return `v.visitNodes(${access})`; + } + if (type.kind === "primitive" && type.name === "Token") return `v.visitToken(${access})`; + return `v.visitNode(${access})`; + }).join(", "); + + w.write(`return v.Factory.Update${node.name}(node, ${args})`); + + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate Clone() ─────────────────────────────────────────────────────── + +function generateClone(w: CodeWriter, node: NodeType) { + const structName = node.name; + const members = schemaMembers(node); + + w.write(`func (node *${structName}) Clone(f NodeFactoryCoercible) *Node {`); + w.push(); + + // Build args for New* call + // Clone is a struct method, so it can access private fields directly + const args = members.map(m => { + if (m.isKindParam()) { + return "node.Kind"; + } + const type = m.declaredType; + + if (m.inherited && type?.kind === "alias" && type.name === "ModifierLike") { + return "node.Modifiers()"; + } + // Use direct field access (Clone is a struct method, can access private fields) + return `node.${m.name}`; + }).join(", "); + + if (node.kindAliases.length > 0) { + w.write("switch node.Kind {"); + w.push(); + w.write(`case ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}:`); + w.push(); + w.write(`return cloneNode(f.AsNodeFactory().New${node.name}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); + w.pop(); + for (const alias of node.kindAliases) { + w.write(`case Kind${alias}:`); + w.push(); + w.write(`return cloneNode(f.AsNodeFactory().New${alias}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); + w.pop(); + } + w.write("default:"); + w.push(); + w.write(`panic("unexpected kind in ${structName}.Clone: " + node.Kind.String())`); + w.pop(); + w.pop(); + w.write("}"); + } + else { + w.write(`return cloneNode(f.AsNodeFactory().New${node.name}(${args}), node.AsNode(), f.AsNodeFactory().hooks)`); + } + + w.pop(); + w.write("}"); + w.write(""); +} + +// ── Generate Is*() functions ─────────────────────────────────────────────── + +function generateIsFunction(w: CodeWriter, node: NodeType) { + const kindTypes = node.kindTypes(); + if (node.kindType.kind === "typeParameter") { + w.write(`func Is${node.name}(node *Node) bool {`); + w.push(); + w.write("switch node.Kind {"); + w.write(`case ${kindTypes.map(kind => kind.formatGoConstant()).join(", ")}:`); + w.push(); + w.write("return true"); + w.pop(); + w.write("}"); + w.write("return false"); + w.pop(); + w.write("}"); + w.write(""); + return; + } + + if (node.isMultiKind()) { + for (const kind of kindTypes) { + const kindName = kind.name; + w.write(`func Is${kindName}(node *Node) bool {`); + w.push(); + w.write(`return node.Kind == ${kind.formatGoConstant()}`); + w.pop(); + w.write("}"); + w.write(""); + } + return; + } + + w.write(`func Is${node.name}(node *Node) bool {`); + w.push(); + w.write(`return node.Kind == ${api.kindType(`SyntaxKind.${node.syntaxKindName}`).formatGoConstant()}`); + w.pop(); + w.write("}"); + w.write(""); + for (const alias of node.kindAliases) { + w.write(`func Is${alias}(node *Node) bool {`); + w.push(); + w.write(`return node.Kind == Kind${alias}`); + w.pop(); + w.write("}"); + w.write(""); + } +} + +// ── Generate kind alias guards ───────────────────────────────────────────── + +/** Go guard name: "IsTokenKind", "IsKeywordKind", etc. Capital I, no "Syntax". */ +function goKindGuardName(aliasName: string): string { + const tsName = kindGuardName(aliasName); // e.g. "isTokenKind" + return tsName.charAt(0).toUpperCase() + tsName.slice(1); // e.g. "IsTokenKind" +} + +function generateKindAliasGuards(w: CodeWriter) { + // JSDocSyntaxKind → "IsJSDocKind" conflicts with the hand-written IsJSDocKind in utilities.go + // which checks JSDoc NODE kinds (FirstJSDocNode..LastJSDocNode), a completely different semantic. + const skipGuards = new Set(["IsJSDocKind"]); + + for (const guard of api.kindGuards()) { + const funcName = goKindGuardName(guard.aliasName); + if (skipGuards.has(funcName)) continue; + + if (guard.type === "range") { + w.write(`func ${funcName}(kind Kind) bool {`); + w.push(); + w.write(`return kind >= Kind${guard.first} && kind <= Kind${guard.last}`); + w.pop(); + w.write("}"); + w.write(""); + } + else { + // Enumerated: generate a switch statement. + // Expand sub-aliases to their concrete members. + const expanded = api.expandKindAliasMembers(guard.aliasName); + w.write(`func ${funcName}(kind Kind) bool {`); + w.push(); + w.write("switch kind {"); + w.push(); + w.write(`case ${expanded.map(m => m.formatGoConstant()).join(", ")}:`); + w.push(); + w.write("return true"); + w.pop(); + w.pop(); + w.write("}"); + w.write("return false"); + w.pop(); + w.write("}"); + w.write(""); + } + } +} + +// ── Generate Name() accessor ─────────────────────────────────────────────── + +function generateNameAccessor(w: CodeWriter, node: NodeType) { + const members = schemaMembers(node); + const nameMember = members.find(m => m.name === "name"); + if (!nameMember) return; + + // Check if private (either directly or via trait) + const isPrivate = nameMember.inherited + ? (nameMember.inheritedField?.private || false) + : (nameMember.private || false); + if (!isPrivate) return; + + const structName = node.name; + w.write(`func (node *${structName}) Name() *DeclarationName {`); + w.push(); + w.write("return node.name"); + w.pop(); + w.write("}"); + w.write(""); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Main generation +// ──────────────────────────────────────────────────────────────────────────── + +function generate(): string { + const w = new CodeWriter(); + + generateHeader(w); + generateNodeFactoryStruct(w); + + // Generate base struct definitions + generateBaseStructDefs(w); + + // Generate node type aliases (FooNode = Node for every concrete node type) + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// Node type aliases"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + w.write("type ("); + w.push(); + for (const node of api.nodes()) { + w.write(`${node.name}Node = Node`); + } + // Instantiation aliases (e.g. EndOfFile = Node, AbstractKeyword = Node) + for (const node of api.nodes()) { + if (node.instantiationAliases.length === 0) continue; + for (const alias of node.instantiationAliases) { + w.write(`${alias.name} = Node`); + } + } + w.pop(); + w.write(")"); + w.write(""); + + // NodeList type aliases + const listAliases = api.listAliases(); + if (listAliases.length > 0) { + w.write("type ("); + w.push(); + const maxLen = Math.max(...listAliases.map(alias => alias.name.length)); + for (const listAlias of listAliases) { + const padding = " ".repeat(maxLen - listAlias.name.length); + w.write(`${listAlias.name}${padding} = NodeList // NodeList[*${listAlias.elementTypeName}]`); + } + w.pop(); + w.write(")"); + w.write(""); + } + + // Node union aliases (e.g. Statement = Node, BlockOrExpression = Node) + const nodeAliases = api.nodeAliases(); + if (nodeAliases.length > 0) { + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// Node union aliases"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + w.write("type ("); + w.push(); + const maxAliasLen = Math.max(...nodeAliases.map(alias => alias.name.length)); + for (const alias of nodeAliases) { + const padding = " ".repeat(maxAliasLen - alias.name.length); + let comment: string; + if (alias.isBaseAlias && alias.baseKey) { + comment = `Node with ${alias.baseKey}`; + } + else if (alias.isUnion) { + comment = alias.unionMemberNames.join(" | "); + } + else { + comment = ""; + } + w.write(`${alias.name}${padding} = Node${comment ? ` // ${comment}` : ""}`); + } + w.pop(); + w.write(")"); + w.write(""); + } + + // Generate for each node + for (const node of api.nodes()) { + // Section comment + w.write(`// ──────────────────────────────────────────────────────────────────────`); + w.write(`// ${node.name}`); + w.write(`// ──────────────────────────────────────────────────────────────────────`); + w.write(""); + + if (!node.handWritten) { + generateStructDef(w, node); + generateNewFactory(w, node); + generateUpdateFactory(w, node); + generateForEachChild(w, node); + generateVisitEachChild(w, node); + generateClone(w, node); + generateSubtreeFacts(w, node); + generateNameAccessor(w, node); + } + generateIsFunction(w, node); + if (node.handWritten) { + w.write(""); + w.write("// Struct and factory methods hand-written in ./ast.go"); + } + } + + // ForEachChild dispatch + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// ForEachChild dispatch"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + generateForEachChildDispatch(w); + + // As*() casts + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// As*() cast methods"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + for (const node of api.nodes()) { + generateAsCast(w, node.name); + } + + // Kind alias guards + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write("// Kind alias guards"); + w.write("// ──────────────────────────────────────────────────────────────────────"); + w.write(""); + generateKindAliasGuards(w); + + return w.toString(); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Write output +// ──────────────────────────────────────────────────────────────────────────── + +// ──────────────────────────────────────────────────────────────────────────── +// Kind generation +// ──────────────────────────────────────────────────────────────────────────── + +function generateKind(): string { + const w = new CodeWriter(); + w.write("// Code generated by tools/scripts/tsc/generate-go-ast.ts. DO NOT EDIT."); + w.write(""); + w.write("package ast"); + w.write(""); + w.write("//go:generate npx hereby generate:ast-stringer"); + w.write(""); + w.write("type Kind int16"); + w.write(""); + w.write("const ("); + w.push(); + + const elements = api.kindElements(); + const markers = api.kindMarkers(); + const kindUnions = api.kindAliases(); + + // Build set of all defined kind names for validation + const definedKinds = new Set(); + for (const element of elements) { + if (element.name) { + definedKinds.add(element.name); + } + } + + // Validate marker references (markers can reference kind names or other marker names) + const markerNames = new Set(markers.map(m => m.name)); + for (const marker of markers) { + if (!definedKinds.has(marker.value) && !markerNames.has(marker.value)) { + throw new Error(`Kind marker ${marker.name} references undefined kind or marker "${marker.value}"`); + } + } + + // Validate union references + for (const kindUnion of kindUnions) { + for (const m of kindUnion.members) { + if (!definedKinds.has(m) && !api.hasKindAlias(m)) { + throw new Error(`Kind union ${kindUnion.name} references undefined kind or union "${m}"`); + } + } + } + + // Emit elements + let first = true; + for (const el of elements) { + if (!el.name) { + w.write(`// ${el.comment}`); + continue; + } + const trailing = el.comment ? ` // ${el.comment}` : ""; + if (first) { + w.write(`Kind${el.name} Kind = iota${trailing}`); + first = false; + } + else { + w.write(`Kind${el.name}${trailing}`); + } + } + + // KindCount + w.write("KindCount"); + + // Markers + const maxLen = Math.max(...markers.map(m => m.name.length)); + for (const marker of markers) { + const padding = " ".repeat(maxLen - marker.name.length); + w.write(`Kind${marker.name}${padding} = Kind${marker.value}`); + } + + w.pop(); + w.write(")"); + w.write(""); + + // Kind union type aliases + if (kindUnions.length > 0) { + w.write("type ("); + w.push(); + for (const { name, members } of kindUnions) { + function expandMembers(ms: string[]): string[] { + const result: string[] = []; + for (const m of ms) { + const alias = api.getKindAlias(m); + if (alias) { + result.push(...expandMembers(alias.members)); + } + else { + result.push(m); + } + } + return result; + } + const expanded = expandMembers(members); + const comment = expanded.map(m => `Kind${m}`).join(" | "); + w.write(`${name} = Kind // ${comment}`); + } + w.pop(); + w.write(")"); + w.write(""); + } + + return w.toString(); +} + +function writeAndFormat(filePath: string, generateContent: () => string, force: boolean) { + const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); + if (generated.isCurrent(force)) return; + generated.write(generateContent()); + formatFilesSync([filePath]); + generated.markCurrent(); + console.log(`Wrote ${filePath}`); +} + +export default function main(force = false) { + console.log("Generating Go AST code..."); + + const outPath = path.join(ROOT, "tsc/internal/ast/ast_generated.go"); + writeAndFormat(outPath, () => generate() + "\n", force); + + const kindOutPath = path.join(ROOT, "tsc/internal/ast/kind_generated.go"); + writeAndFormat(kindOutPath, () => generateKind() + "\n", force); +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + main(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/generate-options.ts b/tools/scripts/tsc/generate-options.ts index 0ee304c803521..8fdaed08fb1ed 100644 --- a/tools/scripts/tsc/generate-options.ts +++ b/tools/scripts/tsc/generate-options.ts @@ -1,903 +1,903 @@ -import assert from "node:assert/strict"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { GeneratedFile } from "../gen/generatedFile.mts"; -import { - formatFiles, - parseGeneratorArgs, - repoRoot, -} from "../gen/utils.mts"; -import { - type CompilerOption, - type CompilerOptionType, - type Declaration, - type DeclarationGroup, - fieldName, - type GoValue, - optionKind, - type OptionsModel, - type StoredDeclaration, -} from "./options-model.ts"; -import { generateConfigSchema } from "./options-schema.ts"; -import { - options, - pluginImportFields, -} from "./options.ts"; - -export { generateConfigSchema } from "./options-schema.ts"; - -const header = "// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT.\n"; -const sourceFiles = ["generate-options.ts", "options.ts", "options-model.ts", "options-schema.ts"]; -const diagnosticsFile = path.join(repoRoot, "tsc/internal/diagnostics/diagnosticMessages.json"); - -function goValue(value: GoValue): string { - return typeof value === "object" ? value.go : JSON.stringify(value); -} - -export function compilerDeclarations(model = options): (Declaration & { group: DeclarationGroup; })[] { - return model.compilerOptions.flatMap(option => { - if (!option.declaration) return []; - const { extraShortNames = [], ...metadata } = option.declaration; - const declaration = { name: option.name, kind: optionKind(option), pathKind: option.type === "[]string" ? undefined : option.pathKind, ...metadata }; - const { description, showInSimplifiedHelpView, ...alias } = declaration; - return [declaration, ...extraShortNames.map(shortName => ({ ...alias, shortName }))]; - }); -} - -function orderByName(items: T[], order: string[], group: string): T[] { - const names = new Set(items.map(item => item.name)); - const orderedNames = new Set(order); - assert.equal(orderedNames.size, order.length, `Duplicate option in ${group} order`); - for (const name of order) { - assert(names.has(name), `Unknown option in ${group} order: ${name}`); - } - const missing = [...names].filter(name => !orderedNames.has(name)); - assert.equal(missing.length, 0, `Missing options in ${group} order: ${missing.join(", ")}`); - return order.flatMap(name => items.filter(item => item.name === name)); -} - -export function validateOptions(model: OptionsModel): void { - const constants = new Set(); - const enumNames = new Set(); - for (const enumDef of model.enums) { - assert(!enumNames.has(enumDef.name), `Duplicate enum: ${enumDef.name}`); - enumNames.add(enumDef.name); - for (const member of enumDef.members) { - const constant = `core.${enumDef.name}${member.name}`; - assert(!constants.has(constant), `Duplicate enum member: ${constant}`); - if (typeof member.value === "string") { - assert(constants.has(`core.${enumDef.name}${member.value}`), `Unknown enum alias: ${constant}`); - } - else assert(Number.isInteger(member.value), `Invalid enum value: ${constant}`); - constants.add(constant); - } - } - const names = new Set(); - const fields = new Set(); - for (const option of model.compilerOptions) { - for (const name of [option.name, ...(option.parseAliases ?? [])]) { - assert(!names.has(name.toLowerCase()), `Duplicate compiler option: ${name}`); - names.add(name.toLowerCase()); - } - assert(!fields.has(fieldName(option)), `Duplicate compiler field: ${fieldName(option)}`); - fields.add(fieldName(option)); - if (option.declaration?.affectsSemanticDiagnostics) { - assert(option.declaration.affectsBuildInfo, `Semantic diagnostics must affect build info: ${option.name}`); - } - if (option.transpile) { - const { value, declarationValue, unless } = option.transpile; - assert(value === "clear" || option.type === "Tristate", `Non-boolean transpile value: ${option.name}`); - assert(declarationValue === undefined || option.type === "Tristate", `Non-boolean declaration value: ${option.name}`); - if (unless) assert(model.compilerOptions.some(option => option.name === unless && option.type === "Tristate"), `Unknown transpile condition: ${unless}`); - } - if (optionKind(option) === "Enum") assert(enumNames.has(option.type), `Unknown enum type: ${option.type}`); - if (option.jsconfigDefault !== undefined) { - const expected = option.type === "Tristate" ? "boolean" : option.type === "*int" ? "number" : "string"; - assert.equal(typeof option.jsconfigDefault, expected, `Invalid jsconfig default: ${option.name}`); - } - } - for (const group of [model.typeAcquisition, model.buildOptions]) { - const fields = group.flatMap(option => option.field ? [option.field.name] : []); - assert.equal(new Set(fields).size, fields.length, "Duplicate stored option field"); - for (const option of group) { - if (option.field) assert.equal(optionKind({ name: option.name, type: option.field.type }), option.kind, `Mismatched field type: ${option.name}`); - } - } - const compiler = compilerDeclarations(model); - for (const group of ["commonOptionsWithBuild", "optionsForCompiler"] as const) { - orderByName(compiler.filter(declaration => declaration.group === group), model.declarationOrder[group], group); - } - orderByName(model.buildOptions.filter(option => option.field), model.buildOptionFieldOrder, "BuildOptions fields"); - const declarations = [...compiler, ...model.typeAcquisition, ...model.buildOptions, ...model.rootOptions, ...Object.values(model.elements)]; - for (const declaration of declarations) { - if (declaration.kind === "Enum") { - assert(model.enumMaps[declaration.name], `Missing enum map: ${declaration.name}`); - } - if (declaration.kind === "List" || declaration.kind === "ListOrElement") { - assert(model.elements[declaration.name], `Missing list element: ${declaration.name}`); - } - assert(declaration.extraValidation === undefined || declaration.extraValidation === "locale", `Invalid extra validation: ${declaration.extraValidation}`); - for (const value of Object.values(declaration)) { - if (typeof value === "object" && value !== null && "go" in value) { - assert(/^(?:core|diagnostics)\.[A-Za-z_]\w*$/.test(value.go), `Invalid Go reference: ${value.go}`); - } - } - } - for (const [name, map] of Object.entries(model.enumMaps)) { - assert(map.values.length, `Empty enum map: ${name}`); - const keys = map.values.map(entry => entry.name); - assert.equal(new Set(keys).size, keys.length, `Duplicate enum keys: ${name}`); - assert(keys.every(key => key === key.toLowerCase()), `Enum keys must be lowercase: ${name}`); - for (const entry of map.values) { - if (typeof entry.value === "object") assert(constants.has(entry.value.go), `Unknown enum constant: ${entry.value.go}`); - } - } -} - -function sectionComment(section: string | undefined): string { - return section ? `\n// ${section.replaceAll("\n", "\n// ")}\n\n` : ""; -} - -type GoCompilerOptionType = - | CompilerOptionType - | "tspath.RootedFilePath" - | "tspath.RootedDirectoryPath" - | "[]tspath.RootedDirectoryPath" - | "tspath.RootedPath" - | "tspath.SourceMapLocation"; - -function goType(option: CompilerOption): GoCompilerOptionType { - switch (option.pathKind) { - case "file": - return "tspath.RootedFilePath"; - case "directory": - return option.type === "[]string" ? "[]tspath.RootedDirectoryPath" : "tspath.RootedDirectoryPath"; - case "fileOrDirectory": - return "tspath.RootedPath"; - case "sourceMapLocation": - return "tspath.SourceMapLocation"; - default: - return option.type; - } -} - -function coreOptions(): string { - const fields = options.compilerOptions.map(option => { - const comments = [ - ...(option.comment ? [option.comment] : []), - ...(option.deprecated ? ["Deprecated: Do not use outside of options parsing and validation."] : []), - ].map(comment => `// ${comment}\n`).join(""); - return `${sectionComment(option.section)}${comments}${fieldName(option)} ${goType(option)} \`json:"${option.name},omitzero"\``; - }); - return `type PluginImport struct { -${pluginImportFields.map(field => `${fieldName(field)} ${field.type} \`json:"${field.name}"\``).join("\n")} -} - -// CompilerOptions contains the compiler options exposed by the API. -type CompilerOptions struct { - _ noCopy - ${fields.join("\n")} -} - -// Clone creates a shallow copy of the CompilerOptions. -func (options *CompilerOptions) Clone() *CompilerOptions { - return &CompilerOptions{ - ${options.compilerOptions.map(option => `${fieldName(option)}: options.${fieldName(option)},`).join("\n")} - } -} - -// Equals reports whether all stored option values are equal, including nil versus empty collections. -// Paths are compared by ordered entries, ignoring backing-storage allocation. -${optionsEquality("CompilerOptions", options.compilerOptions.map(option => ({ name: fieldName(option), type: goType(option) })))} -`; -} - -export function generateCompilerOptionsAPI(model = options): string { - const imports = new Set(); - function typeName(option: CompilerOption): string { - switch (option.pathKind) { - case "file": - imports.add("RootedFilePath"); - return "RootedFilePath"; - case "directory": - imports.add("RootedDirectoryPath"); - return option.type === "[]string" ? "RootedDirectoryPath[]" : "RootedDirectoryPath"; - case "fileOrDirectory": - imports.add("RootedPath"); - return "RootedPath"; - case "sourceMapLocation": - return "string"; - } - switch (option.type) { - case "Tristate": - return "boolean"; - case "string": - return "string"; - case "*int": - return "number"; - case "[]string": - return "string[]"; - case "[]PluginImport": - return "PluginImport[]"; - case "*collections.OrderedMap[string, []string]": - return "Record"; - default: - assert(model.enums.some(definition => definition.name === option.type && definition.api), `Missing API enum: ${option.type}`); - imports.add(option.type); - return option.type; - } - } - const fields = model.compilerOptions.filter(option => !option.internal && !option.deprecated).map(option => { - const comment = option.comment ? `/** ${option.comment.replaceAll("*/", "*\\/").replaceAll("\n", "\n * ")} */\n` : ""; - return `${sectionComment(option.section)}${comment}${option.name}?: ${typeName(option)} | undefined;`; - }); - const pluginFields = pluginImportFields.map(field => `${field.name}: ${typeName(field)};`); - const enumNames = [...imports].sort(); - const pathTypes = enumNames.filter(name => name.startsWith("Rooted")); - const optionEnums = enumNames.filter(name => !name.startsWith("Rooted")); - const enumPath = (name: string) => `#enums/${name[0].toLowerCase() + name.slice(1)}`; - return `${header} -${optionEnums.map(name => `import type { ${name} } from "${enumPath(name)}";`).join("\n")} -${pathTypes.length ? `import type {\n ${pathTypes.join(",\n ")},\n} from "../ast/index.ts";` : ""} - -${optionEnums.map(name => `export { ${name} } from "${enumPath(name)}";`).join("\n")} - -/** CompilerOptions contains the compiler options exposed by the API. */ -export interface CompilerOptions { -${fields.join("\n")} -} - -export interface PluginImport { -${pluginFields.join("\n")} -} -`; -} - -export function generatePrepareCompilerOptionsAPI(model = options): string { - const pathOptions = model.compilerOptions.filter(option => (option.pathKind === "file" || option.pathKind === "directory" || option.pathKind === "fileOrDirectory")); - const converter = (option: CompilerOption): string => { - const value = option.name; - switch (option.pathKind) { - case "file": - return `${value} === undefined ? undefined : toRootedFilePath(${value}, currentDirectory)`; - case "directory": - return option.type === "[]string" - ? `${value}?.map(value => toRootedDirectoryPath(value, currentDirectory))` - : `${value} === undefined ? undefined : toRootedDirectoryPath(${value}, currentDirectory)`; - case "fileOrDirectory": - return `${value} === undefined ? undefined : toRootedPath(${value}, currentDirectory)`; - default: - throw new Error(`Unsupported API path kind for ${option.name}: ${option.pathKind}`); - } - }; - return `${header} -import type { RootedDirectoryPath } from "../ast/index.ts"; -import type { CompilerOptions } from "./compilerOptions.generated.ts"; -import { - toRootedDirectoryPath, - toRootedFilePath, - toRootedPath, -} from "./path.ts"; -import type { RawCompilerOptions } from "./proto.generated.ts"; - -export function prepareCompilerOptions(options: RawCompilerOptions, currentDirectory: RootedDirectoryPath): CompilerOptions { - const { - ${pathOptions.map(option => `${option.name},`).join("\n ")} - ...rest - } = options; - const result = { - ...rest, - ${pathOptions.map(option => `${option.name}: ${converter(option)},`).join("\n ")} - }; - return result; -} -`; -} - -function optionsEquality(name: string, fields: { name: string; type: GoCompilerOptionType; }[]): string { - return `func (options *${name}) Equals(other *${name}) bool { - if options == other { return true } - if options == nil || other == nil { return false } - ${ - fields.map(field => { - const a = `options.${field.name}`; - const b = `other.${field.name}`; - let differs: string; - switch (field.type) { - case "*int": - differs = `${a} != ${b} && (${a} == nil || ${b} == nil || *${a} != *${b})`; - break; - case "[]string": - case "[]PluginImport": - case "[]tspath.RootedDirectoryPath": - differs = `(${a} == nil) != (${b} == nil) || !slices.Equal(${a}, ${b})`; - break; - case "*collections.OrderedMap[string, []string]": - differs = `!${a}.EqualFunc(${b}, func(a, b []string) bool { - return (a == nil) == (b == nil) && slices.Equal(a, b) -})`; - break; - default: - differs = `${a} != ${b}`; - } - return `if ${differs} { return false }`; - }).join("\n") - } - return true -} -`; -} - -function storedOptions(name: string, declarations: StoredDeclaration[]): string { - return `type ${name} struct { -${name === "BuildOptions" ? "_ noCopy\n" : ""} -${declarations.map(option => `${sectionComment(option.field.section)}${option.field.name} ${option.field.type} \`json:"${option.name},omitzero"\``).join("\n")} -} -`; -} - -function zeroValue(option: CompilerOption): string { - const kind = optionKind(option); - return kind === "Boolean" ? "core.TSUnknown" : kind === "String" ? '""' : kind === "Enum" ? "0" : "nil"; -} - -function showConfig(): string { - const serializedOptions = options.compilerOptions.filter(option => { - const declaration = option.declaration; - return option.showConfig !== false && declaration && declaration.category?.go !== "diagnostics.Command_line_Options" && declaration.category?.go !== "diagnostics.Output_Formatting"; - }); - const enumOptions = serializedOptions.filter(option => optionKind(option) === "Enum"); - assert.equal(new Set(enumOptions.map(option => option.type)).size, enumOptions.length, "ShowConfig enum types must have a single option map"); - return `func serializeCompilerOptions(options *core.CompilerOptions, configFilePath tspath.RootedFilePath, caseSensitivity tspath.CaseSensitivity) *collections.OrderedMap[string, any] { - result := collections.NewOrderedMapWithSizeHint[string, any](32) -${ - serializedOptions.map(option => { - const field = `options.${fieldName(option)}`; - const name = JSON.stringify(option.name); - const declaration = option.declaration!; - let value = field; - let condition = `${field} != ${zeroValue(option)}`; - switch (optionKind(option)) { - case "Enum": - return `if ${condition} { - if value := serializeCompilerOptionEnum(${field}); value != "" { - result.Set(${name}, value) - } -}`; - case "Boolean": - condition = `${field} == core.TSTrue || ${field} == core.TSFalse`; - value = `${field} == core.TSTrue`; - break; - case "String": - if (option.pathKind === "file" || option.pathKind === "directory") { - value = `serializeCompilerOptionPath(${field}.AsPath(), configFilePath, caseSensitivity)`; - } - else if (option.pathKind === "fileOrDirectory") { - value = `serializeCompilerOptionPath(${field}, configFilePath, caseSensitivity)`; - } - break; - case "List": { - const element = options.elements[option.name]; - if (option.pathKind === "directory") { - assert.equal(option.type, "[]string", `Unsupported file path list: ${option.name}`); - value = `core.Map(${field}, func(value tspath.RootedDirectoryPath) string { - if value == "" { return "" } - return serializeCompilerOptionPath(value.AsPath(), configFilePath, caseSensitivity) -})`; - } - else if (element?.kind === "Enum") { - assert.equal(option.type, "[]string", `Unsupported enum list: ${option.name}`); - value = `serializeCompilerOptionEnumList(${field}, ${options.enumMaps[option.name].goName})`; - } - break; - } - } - return `if ${condition} { - result.Set(${name}, ${value}) -}`; - }).join("\n") - } - return result -} - -func serializeCompilerOptionEnum(value any) string { - switch value := value.(type) { -${ - enumOptions.map(option => { - const seen = new Set(); - const entries = options.enumMaps[option.name].values.filter(entry => { - const value = goValue(entry.value); - if (seen.has(value)) return false; - seen.add(value); - return true; - }); - return `case core.${option.type}: -${entries.map(entry => `if value == ${goValue(entry.value)} { return ${JSON.stringify(entry.name)} }`).join("\n")}`; - }).join("\n") - } - } - return "" -} -`; -} - -function configDirSubstitution(): string { - const substitutedOptions = options.compilerOptions.filter(option => !option.pathKind && option.declaration?.allowConfigDirTemplateSubstitution); - return `func handleOptionConfigDirTemplateSubstitution(compilerOptions *parsedCompilerOptions, basePath tspath.RootedDirectoryPath) { - if compilerOptions == nil { return } -${ - substitutedOptions.map(option => { - const field = `compilerOptions.${fieldName(option)}`; - switch (option.type) { - case "string": - return `if startsWithConfigDirTemplate(${field}) { - ${field} = getSubstitutedPathWithConfigDirTemplate(${field}, basePath) -}`; - case "[]string": - return `if substitution := getSubstitutedStringArrayWithConfigDirTemplate(${field}, basePath); substitution != nil { - ${field} = substitution -}`; - case "*collections.OrderedMap[string, []string]": - return `{ - var paths *collections.OrderedMap[string, []string] - for k, v := range ${field}.Entries() { - if substitution := getSubstitutedStringArrayWithConfigDirTemplate(v, basePath); substitution != nil { - if paths == nil { - paths = ${field}.Clone() - ${field} = paths - } - paths.Set(k, substitution) - } - } -}`; - default: - throw new Error(`Unsupported configDir substitution type for ${option.name}: ${option.type}`); - } - }).join("\n") - } - for key, value := range compilerOptions.unresolvedPaths { - option := CommandLineCompilerOptionsMap.Get(key) - if option.Kind == CommandLineOptionTypeList { - value = core.Map(ParseStringArray(value), func(path string) any { - return getSubstitutedPathWithConfigDirTemplate(path, basePath) - }) - } else { - value = getSubstitutedPathWithConfigDirTemplate(ParseString(value), basePath) - } - ParseCompilerOptions(key, value, compilerOptions.CompilerOptions) - } - clear(compilerOptions.unresolvedPaths) -} -`; -} - -function mergeCompilerOptions(): string { - return `func mergeCompilerOptionFields(targetOptions, sourceOptions *core.CompilerOptions, explicitNullFields collections.Set[string]) { -${ - options.compilerOptions.map(option => { - const field = fieldName(option); - const zero = zeroValue(option); - return `if explicitNullFields.Has(${JSON.stringify(option.name)}) { - targetOptions.${field} = ${zero} -} else if sourceOptions.${field} != ${zero} { - targetOptions.${field} = sourceOptions.${field} -}`; - }).join("\n") - } -} -`; -} - -function transpileOptions(): string { - const transformedOptions = options.compilerOptions.filter(option => option.transpile); - return `${header} -package transpile - -import "github.com/microsoft/TypeScript/tsc/internal/core" - -func setOptionsForTranspile(options *core.CompilerOptions, declaration bool) { -${ - transformedOptions.map(option => { - const { value, declarationValue, unless } = option.transpile!; - const field = `options.${fieldName(option)}`; - const assigned = value === "clear" ? zeroValue(option) : value ? "core.TSTrue" : "core.TSFalse"; - let code = `${field} = ${assigned}`; - if (declarationValue === "preserve") code = `if !declaration { ${code} }`; - else if (declarationValue !== undefined) code = `if declaration { ${field} = ${declarationValue ? "core.TSTrue" : "core.TSFalse"} } else { ${code} }`; - if (unless) code = `if !options.${fieldName(options.compilerOptions.find(option => option.name === unless)!)}.IsTrue() { ${code} }`; - return code; - }).join("\n") - } -} -`; -} - -function generateBuildInfoOptions(): string { - const storedOptions = options.compilerOptions.filter(option => option.declaration?.affectsBuildInfo); - return `// ForEachCompilerOptionAffectingBuildInfo visits nonzero options in CompilerOptions field order. -func ForEachCompilerOptionAffectingBuildInfo(options *core.CompilerOptions, fn func(option *CommandLineOption, value any)) { -${ - storedOptions.map(option => - `if options.${fieldName(option)} != ${zeroValue(option)} { - fn(CommandLineCompilerOptionsMap.Get(${JSON.stringify(option.name)}), options.${fieldName(option)}) -}` - ).join("\n") - } -} -`; -} - -export function generateOptionComparisons(model = options): string { - const comparisons = [ - ["SemanticDiagnostics", "affectsSemanticDiagnostics"], - ["DeclarationPath", "affectsDeclarationPath"], - ["Emit", "affectsEmit"], - ] as const; - return `${ - comparisons.map(([name, flag]) => { - const expressions = model.compilerOptions.flatMap(option => { - const declaration = option.declaration; - if (!declaration?.[flag]) return []; - const kind = optionKind(option); - assert(kind === "Boolean" || kind === "String" || kind === "Enum", `Unsupported comparison type for ${option.name}: ${option.type}`); - const value = (receiver: string) => { - const field = `${receiver}.${fieldName(option)}`; - if (declaration.strictFlag) return `${receiver}.GetStrictOptionValue(${field})`; - return field; - }; - return [`${value("oldOptions")} != ${value("newOptions")}`]; - }); - return `func CompilerOptionsAffect${name}(oldOptions *core.CompilerOptions, newOptions *core.CompilerOptions) bool { - if oldOptions == newOptions { return false } - if oldOptions == nil || newOptions == nil { return true } - return ${expressions.join(" ||\n") || "false"} -} -`; - }).join("\n") - } -`; -} - -function enumStrings(): string { - return options.enums.filter(enumDef => enumDef.stringer).map(enumDef => { - const stringer = enumDef.stringer!; - return `func (value ${enumDef.name}) String() string { - switch value { - case 0: - panic("should not use zero value of ${enumDef.name}") - ${ - enumDef.members.filter(member => typeof member.value === "number" && member.value !== 0).map(member => { - const constant = `${enumDef.name}${member.name}`; - const text = stringer === "name" ? member.name : options.enumMaps[stringer.enumMap].values.find(entry => typeof entry.value === "object" && entry.value.go === `core.${constant}`)?.name; - assert(text, `Missing display name for ${constant}`); - return `case ${constant}: return ${JSON.stringify(text)}`; - }).join("\n") - } - default: - panic("unhandled case in ${enumDef.name}.String") - } -} -`; - }).join("\n"); -} - -function numericEnums(): string { - return `${ - options.enums.map(enumDef => - `type ${enumDef.name} int32 - -const ( -${enumDef.members.map(member => `${member.comment ? "// " + member.comment.replaceAll("\n", "\n// ") + "\n" : ""}${enumDef.name}${member.name} ${enumDef.name} = ${typeof member.value === "number" ? member.value : enumDef.name + member.value}${member.trailingComment ? " // " + member.trailingComment : ""}`).join("\n")} -) -` - ).join("\n") - } - -var ModuleKindToModuleResolutionKind = map[ModuleKind]ModuleResolutionKind{ -${options.enums.find(enumDef => enumDef.name === "ModuleKind")!.members.filter(member => member.moduleResolution).map(member => `ModuleKind${member.name}: ModuleResolutionKind${member.moduleResolution},`).join("\n")} -} -`; -} - -const declarationFields = new Map([ - ["shortName", "ShortName"], - ["isFilePath", "IsFilePath"], - ["pathKind", "PathKind"], - ["isTSConfigOnly", "IsTSConfigOnly"], - ["isCommandLineOnly", "IsCommandLineOnly"], - ["description", "Description"], - ["defaultValueDescription", "DefaultValueDescription"], - ["showInSimplifiedHelpView", "ShowInSimplifiedHelpView"], - ["category", "Category"], - ["extraValidation", "extraValidation"], - ["minValue", "minValue"], - ["listPreserveFalsyValues", "listPreserveFalsyValues"], -]); - -function declarationLiteral(declaration: Declaration): string { - const { name, kind } = declaration; - const properties = [`Name: ${JSON.stringify(name)},`, `Kind: CommandLineOptionType${kind},`]; - for (const [key, value] of Object.entries(declaration)) { - const goName = declarationFields.get(key); - if (goName === undefined || value === undefined) continue; - const goValueText = key === "extraValidation" - ? "extraValidationLocale" - : key === "pathKind" - ? `CommandLineOptionPathKind${value[0].toUpperCase() + value.slice(1)}` - : goValue(value); - properties.push(`${goName}: ${goValueText},`); - } - return `{\n${properties.join("\n")}\n}`; -} - -function declarations(): string { - const all = compilerDeclarations(); - const groups = ["commonOptionsWithBuild", "optionsForCompiler"] as const; - const arrays: [string, Declaration[]][] = [ - ...groups.map(group => [group, orderByName(all.filter(declaration => declaration.group === group), options.declarationOrder[group], group)] as [string, Declaration[]]), - ["typeAcquisitionDecls", options.typeAcquisition], - ]; - return `var OptionsDeclarations = slices.Concat(commonOptionsWithBuild, optionsForCompiler) - -var BuildOpts = slices.Concat(commonOptionsWithBuild, OptionsForBuild) - -${arrays.map(([name, values]) => `var ${name} = []*CommandLineOption{\n${values.map(declaration => declarationLiteral(declaration) + ",").join("\n")}\n}`).join("\n\n")} - -var commandLineOptionElements = map[string]*CommandLineOption{ -${Object.entries(options.elements).map(([name, declaration]) => `${JSON.stringify(name)}: ${declarationLiteral(declaration)},`).join("\n")} -} - -var TscBuildOption = CommandLineOption${declarationLiteral(options.buildOptions[0])} - -var OptionsForBuild = []*CommandLineOption{ - &TscBuildOption, - ${options.buildOptions.slice(1).map(option => declarationLiteral(option) + ",").join("\n")} -} -`; -} - -function rootDeclarations(): string { - const elementOptions = { - compilerOptions: "CommandLineCompilerOptionsMap", - typeAcquisition: "commandLineOptionsToMap(typeAcquisitionDecls)", - extends: `commandLineOptionsToMap([]*CommandLineOption{${declarationLiteral(options.elements.extends)}})`, - }; - return `${ - options.rootOptions.filter(option => option.variable).map(option => { - let literal = declarationLiteral(option); - if (option.elementOptions) literal = literal.slice(0, -1) + `ElementOptions: ${elementOptions[option.elementOptions]},\n}`; - return `var ${option.variable} = &CommandLineOption${literal}`; - }).join("\n\n") - } - -var tsconfigRootOptionsMap = &CommandLineOption{ - Name: "undefined", - Kind: CommandLineOptionTypeObject, - ElementOptions: commandLineOptionsToMap([]*CommandLineOption{ - ${options.rootOptions.map(option => (option.variable ?? declarationLiteral(option)) + ",").join("\n")} - }), -} -`; -} - -function enumMaps(): string { - return `${Object.values(options.enumMaps).map(map => `var ${map.goName} = collections.NewOrderedMapFromList([]collections.MapEntry[string, any]{\n${map.values.map(entry => `{Key: ${JSON.stringify(entry.name)}, Value: ${goValue(entry.value)}},`).join("\n")}\n})`).join("\n\n")} - -var commandLineOptionEnumMap = map[string]*collections.OrderedMap[string, any]{ -${Object.entries(options.enumMaps).map(([name, map]) => `${JSON.stringify(name)}: ${map.goName},`).join("\n")} -} - -var commandLineOptionDeprecated = map[string]*collections.Set[string]{ -${Object.entries(options.enumMaps).filter(([, map]) => map.deprecatedKeys).map(([name, map]) => `${JSON.stringify(name)}: collections.NewSetFromItems(${map.deprecatedKeys!.map(key => JSON.stringify(key)).join(", ")}),`).join("\n")} -} - -var targetToLibMap = map[core.ScriptTarget]string{ -${options.enums.find(enumDef => enumDef.name === "ScriptTarget")!.members.filter(member => member.lib).toReversed().map(member => `core.ScriptTarget${member.name}: ${JSON.stringify(member.lib)},${member.libComment ? " // " + member.libComment : ""}`).join("\n")} -} -`; -} - -function parserAssignment(option: CompilerOption): string { - const target = `allOptions.${fieldName(option)}`; - switch (option.pathKind) { - case "file": - return `${target} = parseFileName(value)`; - case "directory": - return option.type === "[]string" - ? `${target} = parseDirectoryNames(value)` - : `${target} = parseDirectoryName(value)`; - case "fileOrDirectory": - return `${target} = parseFileOrDirectoryName(value)`; - case "sourceMapLocation": - return `${target} = tspath.ToSourceMapLocation(ParseString(value))`; - } - if (option.name === "lib") { - return `if libs, ok := value.([]string); ok { ${target} = libs } else { ${target} = ParseStringArray(value) }`; - } - if (option.name === "plugins") { - return `if plugins, ok := value.([]any); ok { - ${target} = core.Map(plugins, func(plugin any) core.PluginImport { - if pluginMap, isMap := plugin.(*collections.OrderedMap[string, any]); isMap { - return core.PluginImport{Name: ParseString(pluginMap.GetOrZero("name"))} - } - return core.PluginImport{} - }) - }`; - } - const functions: Partial> = { - "Tristate": "ParseTristate", - "string": "ParseString", - "*int": "parseNumber", - "[]string": "ParseStringArray", - "*collections.OrderedMap[string, []string]": "parseStringMap", - }; - const parser = functions[option.type]; - assert(option.type !== "[]PluginImport", "Plugin options require the plugin parser"); - return `${target} = ${parser ?? `floatOrInt32ToFlag[core.${option.type}]`}(value)`; -} - -function parser(): string { - return `func parseCompilerOptions(key string, value any, allOptions *core.CompilerOptions) (foundKey bool) { - if option := CommandLineCompilerOptionsMap.Get(key); option != nil { key = option.Name } - switch key { - ${options.compilerOptions.map(option => `case ${[option.name, ...(option.parseAliases ?? [])].map(name => JSON.stringify(name)).join(", ")}:\n${parserAssignment(option)}`).join("\n")} - default: - return false - } - return true -} - -func getDefaultCompilerOptions(configFileName tspath.RootedFilePath) *parsedCompilerOptions { - options := &core.CompilerOptions{} - if configFileName != "" && configFileName.BaseName() == "jsconfig.json" { - options = &core.CompilerOptions{ - ${ - options.compilerOptions.filter(option => option.jsconfigDefault !== undefined).map(option => { - const value = option.jsconfigDefault!; - const expression = typeof value === "boolean" ? `core.TS${value ? "True" : "False"}` : typeof value === "number" ? `new(${value})` : JSON.stringify(value); - return `${fieldName(option)}: ${expression},`; - }).join("\n") - } - } - } - return &parsedCompilerOptions{ - CompilerOptions: options, - unresolvedPaths: make(unresolvedCompilerOptionPaths), - } -} - -func getDefaultTypeAcquisition(configFileName tspath.RootedFilePath) *core.TypeAcquisition { - if configFileName != "" && configFileName.BaseName() == "jsconfig.json" { - return &core.TypeAcquisition{ - ${options.typeAcquisition.filter(option => option.jsconfigDefault !== undefined).map(option => `${option.field.name}: core.TS${option.jsconfigDefault ? "True" : "False"},`).join("\n")} - } - } - return &core.TypeAcquisition{} -} -`; -} - -function storedParser(name: string, declarations: StoredDeclaration[]): string { - return `func Parse${name}(key string, value any, allOptions *core.${name}) { - if value == nil { return } - if allOptions == nil { return } - ${name === "BuildOptions" ? "if option := BuildNameMap.Get(key); option != nil { key = option.Name }" : ""} - switch key { - ${ - declarations.map(option => { - const stored: CompilerOption = { name: option.name, goName: option.field.name, type: option.field.type }; - return `case ${JSON.stringify(option.name)}:\n${parserAssignment(stored)}`; - }).join("\n") - } - } -} -`; -} - -export function generateOptions(): Map { - validateOptions(options); - const buildOptions = options.buildOptions.filter((option): option is StoredDeclaration => option.field !== undefined); - return new Map([ - ["packages/typescript/src/api/compilerOptions.generated.ts", generateCompilerOptionsAPI()], - ["packages/typescript/src/api/prepareCompilerOptions.generated.ts", generatePrepareCompilerOptionsAPI()], - [ - "tsc/internal/core/options_generated.go", - `${header} -package core - -import ( - "slices" - - "github.com/microsoft/TypeScript/tsc/internal/collections" - "github.com/microsoft/TypeScript/tsc/internal/tspath" -) - -//go:generate npx hereby generate:compileroptions - -${coreOptions()} -${numericEnums()} -${enumStrings()} -${storedOptions("TypeAcquisition", options.typeAcquisition)} -${storedOptions("BuildOptions", orderByName(buildOptions, options.buildOptionFieldOrder, "BuildOptions fields"))} -`, - ], - ["tsc/internal/transpile/options_generated.go", transpileOptions()], - [ - "tsc/internal/tsoptions/declarations_generated.go", - `${header} -package tsoptions - -import ( - "slices" - - "github.com/microsoft/TypeScript/tsc/internal/collections" - "github.com/microsoft/TypeScript/tsc/internal/core" - "github.com/microsoft/TypeScript/tsc/internal/diagnostics" -) - -${declarations()} -${rootDeclarations()} -${enumMaps()} -`, - ], - [ - "tsc/internal/tsoptions/options_generated.go", - `${header} -package tsoptions - -import ( - "github.com/microsoft/TypeScript/tsc/internal/collections" - "github.com/microsoft/TypeScript/tsc/internal/core" - "github.com/microsoft/TypeScript/tsc/internal/tspath" -) - -${parser()} -${storedParser("TypeAcquisition", options.typeAcquisition)} -${storedParser("BuildOptions", buildOptions)} -${generateOptionComparisons()} -${generateBuildInfoOptions()} -${mergeCompilerOptions()} -${configDirSubstitution()} -${showConfig()} -`, - ], - [ - "tsc/internal/testrunner/options_generated.go", - `${header} -package testrunner - -import "github.com/microsoft/TypeScript/tsc/internal/collections" - -var compilerVaryBy = collections.NewSetFromItems( -${ - options.compilerOptions.filter(option => - option.declaration && !option.declaration.isCommandLineOnly && - (optionKind(option) === "Boolean" || optionKind(option) === "Enum") - ).map(option => option.name.toLowerCase()).sort().map(name => `${JSON.stringify(name)},`).join("\n") - } -) -`, - ], - ...(["tsconfig", "jsconfig"] as const).map(name => [`packages/typescript/schemas/${name}.schema.json`, JSON.stringify(generateConfigSchema(name), null, 4) + "\n"] as [string, string]), - ]); -} - -export default async function generate(force = false): Promise { - const inputs = [...sourceFiles.map(file => path.join(import.meta.dirname, file)), diagnosticsFile]; - const outputs = generateOptions(); - const changed: GeneratedFile[] = []; - for (const [fileName, content] of outputs) { - const file = new GeneratedFile(path.join(repoRoot, fileName), inputs); - if (file.isCurrent(force)) continue; - file.write(content); - changed.push(file); - } - if (changed.length) { - await formatFiles(changed.map(file => file.fileName)); - for (const file of changed) file.markCurrent(); - } -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - await generate(parseGeneratorArgs({}).force); -} +import assert from "node:assert/strict"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { GeneratedFile } from "../gen/generatedFile.mts"; +import { + formatFiles, + parseGeneratorArgs, + repoRoot, +} from "../gen/utils.mts"; +import { + type CompilerOption, + type CompilerOptionType, + type Declaration, + type DeclarationGroup, + fieldName, + type GoValue, + optionKind, + type OptionsModel, + type StoredDeclaration, +} from "./options-model.ts"; +import { generateConfigSchema } from "./options-schema.ts"; +import { + options, + pluginImportFields, +} from "./options.ts"; + +export { generateConfigSchema } from "./options-schema.ts"; + +const header = "// Code generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT.\n"; +const sourceFiles = ["generate-options.ts", "options.ts", "options-model.ts", "options-schema.ts"]; +const diagnosticsFile = path.join(repoRoot, "tsc/internal/diagnostics/diagnosticMessages.json"); + +function goValue(value: GoValue): string { + return typeof value === "object" ? value.go : JSON.stringify(value); +} + +export function compilerDeclarations(model = options): (Declaration & { group: DeclarationGroup; })[] { + return model.compilerOptions.flatMap(option => { + if (!option.declaration) return []; + const { extraShortNames = [], ...metadata } = option.declaration; + const declaration = { name: option.name, kind: optionKind(option), pathKind: option.type === "[]string" ? undefined : option.pathKind, ...metadata }; + const { description, showInSimplifiedHelpView, ...alias } = declaration; + return [declaration, ...extraShortNames.map(shortName => ({ ...alias, shortName }))]; + }); +} + +function orderByName(items: T[], order: string[], group: string): T[] { + const names = new Set(items.map(item => item.name)); + const orderedNames = new Set(order); + assert.equal(orderedNames.size, order.length, `Duplicate option in ${group} order`); + for (const name of order) { + assert(names.has(name), `Unknown option in ${group} order: ${name}`); + } + const missing = [...names].filter(name => !orderedNames.has(name)); + assert.equal(missing.length, 0, `Missing options in ${group} order: ${missing.join(", ")}`); + return order.flatMap(name => items.filter(item => item.name === name)); +} + +export function validateOptions(model: OptionsModel): void { + const constants = new Set(); + const enumNames = new Set(); + for (const enumDef of model.enums) { + assert(!enumNames.has(enumDef.name), `Duplicate enum: ${enumDef.name}`); + enumNames.add(enumDef.name); + for (const member of enumDef.members) { + const constant = `core.${enumDef.name}${member.name}`; + assert(!constants.has(constant), `Duplicate enum member: ${constant}`); + if (typeof member.value === "string") { + assert(constants.has(`core.${enumDef.name}${member.value}`), `Unknown enum alias: ${constant}`); + } + else assert(Number.isInteger(member.value), `Invalid enum value: ${constant}`); + constants.add(constant); + } + } + const names = new Set(); + const fields = new Set(); + for (const option of model.compilerOptions) { + for (const name of [option.name, ...(option.parseAliases ?? [])]) { + assert(!names.has(name.toLowerCase()), `Duplicate compiler option: ${name}`); + names.add(name.toLowerCase()); + } + assert(!fields.has(fieldName(option)), `Duplicate compiler field: ${fieldName(option)}`); + fields.add(fieldName(option)); + if (option.declaration?.affectsSemanticDiagnostics) { + assert(option.declaration.affectsBuildInfo, `Semantic diagnostics must affect build info: ${option.name}`); + } + if (option.transpile) { + const { value, declarationValue, unless } = option.transpile; + assert(value === "clear" || option.type === "Tristate", `Non-boolean transpile value: ${option.name}`); + assert(declarationValue === undefined || option.type === "Tristate", `Non-boolean declaration value: ${option.name}`); + if (unless) assert(model.compilerOptions.some(option => option.name === unless && option.type === "Tristate"), `Unknown transpile condition: ${unless}`); + } + if (optionKind(option) === "Enum") assert(enumNames.has(option.type), `Unknown enum type: ${option.type}`); + if (option.jsconfigDefault !== undefined) { + const expected = option.type === "Tristate" ? "boolean" : option.type === "*int" ? "number" : "string"; + assert.equal(typeof option.jsconfigDefault, expected, `Invalid jsconfig default: ${option.name}`); + } + } + for (const group of [model.typeAcquisition, model.buildOptions]) { + const fields = group.flatMap(option => option.field ? [option.field.name] : []); + assert.equal(new Set(fields).size, fields.length, "Duplicate stored option field"); + for (const option of group) { + if (option.field) assert.equal(optionKind({ name: option.name, type: option.field.type }), option.kind, `Mismatched field type: ${option.name}`); + } + } + const compiler = compilerDeclarations(model); + for (const group of ["commonOptionsWithBuild", "optionsForCompiler"] as const) { + orderByName(compiler.filter(declaration => declaration.group === group), model.declarationOrder[group], group); + } + orderByName(model.buildOptions.filter(option => option.field), model.buildOptionFieldOrder, "BuildOptions fields"); + const declarations = [...compiler, ...model.typeAcquisition, ...model.buildOptions, ...model.rootOptions, ...Object.values(model.elements)]; + for (const declaration of declarations) { + if (declaration.kind === "Enum") { + assert(model.enumMaps[declaration.name], `Missing enum map: ${declaration.name}`); + } + if (declaration.kind === "List" || declaration.kind === "ListOrElement") { + assert(model.elements[declaration.name], `Missing list element: ${declaration.name}`); + } + assert(declaration.extraValidation === undefined || declaration.extraValidation === "locale", `Invalid extra validation: ${declaration.extraValidation}`); + for (const value of Object.values(declaration)) { + if (typeof value === "object" && value !== null && "go" in value) { + assert(/^(?:core|diagnostics)\.[A-Za-z_]\w*$/.test(value.go), `Invalid Go reference: ${value.go}`); + } + } + } + for (const [name, map] of Object.entries(model.enumMaps)) { + assert(map.values.length, `Empty enum map: ${name}`); + const keys = map.values.map(entry => entry.name); + assert.equal(new Set(keys).size, keys.length, `Duplicate enum keys: ${name}`); + assert(keys.every(key => key === key.toLowerCase()), `Enum keys must be lowercase: ${name}`); + for (const entry of map.values) { + if (typeof entry.value === "object") assert(constants.has(entry.value.go), `Unknown enum constant: ${entry.value.go}`); + } + } +} + +function sectionComment(section: string | undefined): string { + return section ? `\n// ${section.replaceAll("\n", "\n// ")}\n\n` : ""; +} + +type GoCompilerOptionType = + | CompilerOptionType + | "tspath.RootedFilePath" + | "tspath.RootedDirectoryPath" + | "[]tspath.RootedDirectoryPath" + | "tspath.RootedPath" + | "tspath.SourceMapLocation"; + +function goType(option: CompilerOption): GoCompilerOptionType { + switch (option.pathKind) { + case "file": + return "tspath.RootedFilePath"; + case "directory": + return option.type === "[]string" ? "[]tspath.RootedDirectoryPath" : "tspath.RootedDirectoryPath"; + case "fileOrDirectory": + return "tspath.RootedPath"; + case "sourceMapLocation": + return "tspath.SourceMapLocation"; + default: + return option.type; + } +} + +function coreOptions(): string { + const fields = options.compilerOptions.map(option => { + const comments = [ + ...(option.comment ? [option.comment] : []), + ...(option.deprecated ? ["Deprecated: Do not use outside of options parsing and validation."] : []), + ].map(comment => `// ${comment}\n`).join(""); + return `${sectionComment(option.section)}${comments}${fieldName(option)} ${goType(option)} \`json:"${option.name},omitzero"\``; + }); + return `type PluginImport struct { +${pluginImportFields.map(field => `${fieldName(field)} ${field.type} \`json:"${field.name}"\``).join("\n")} +} + +// CompilerOptions contains the compiler options exposed by the API. +type CompilerOptions struct { + _ noCopy + ${fields.join("\n")} +} + +// Clone creates a shallow copy of the CompilerOptions. +func (options *CompilerOptions) Clone() *CompilerOptions { + return &CompilerOptions{ + ${options.compilerOptions.map(option => `${fieldName(option)}: options.${fieldName(option)},`).join("\n")} + } +} + +// Equals reports whether all stored option values are equal, including nil versus empty collections. +// Paths are compared by ordered entries, ignoring backing-storage allocation. +${optionsEquality("CompilerOptions", options.compilerOptions.map(option => ({ name: fieldName(option), type: goType(option) })))} +`; +} + +export function generateCompilerOptionsAPI(model = options): string { + const imports = new Set(); + function typeName(option: CompilerOption): string { + switch (option.pathKind) { + case "file": + imports.add("RootedFilePath"); + return "RootedFilePath"; + case "directory": + imports.add("RootedDirectoryPath"); + return option.type === "[]string" ? "RootedDirectoryPath[]" : "RootedDirectoryPath"; + case "fileOrDirectory": + imports.add("RootedPath"); + return "RootedPath"; + case "sourceMapLocation": + return "string"; + } + switch (option.type) { + case "Tristate": + return "boolean"; + case "string": + return "string"; + case "*int": + return "number"; + case "[]string": + return "string[]"; + case "[]PluginImport": + return "PluginImport[]"; + case "*collections.OrderedMap[string, []string]": + return "Record"; + default: + assert(model.enums.some(definition => definition.name === option.type && definition.api), `Missing API enum: ${option.type}`); + imports.add(option.type); + return option.type; + } + } + const fields = model.compilerOptions.filter(option => !option.internal && !option.deprecated).map(option => { + const comment = option.comment ? `/** ${option.comment.replaceAll("*/", "*\\/").replaceAll("\n", "\n * ")} */\n` : ""; + return `${sectionComment(option.section)}${comment}${option.name}?: ${typeName(option)} | undefined;`; + }); + const pluginFields = pluginImportFields.map(field => `${field.name}: ${typeName(field)};`); + const enumNames = [...imports].sort(); + const pathTypes = enumNames.filter(name => name.startsWith("Rooted")); + const optionEnums = enumNames.filter(name => !name.startsWith("Rooted")); + const enumPath = (name: string) => `#enums/${name[0].toLowerCase() + name.slice(1)}`; + return `${header} +${optionEnums.map(name => `import type { ${name} } from "${enumPath(name)}";`).join("\n")} +${pathTypes.length ? `import type {\n ${pathTypes.join(",\n ")},\n} from "../ast/index.ts";` : ""} + +${optionEnums.map(name => `export { ${name} } from "${enumPath(name)}";`).join("\n")} + +/** CompilerOptions contains the compiler options exposed by the API. */ +export interface CompilerOptions { +${fields.join("\n")} +} + +export interface PluginImport { +${pluginFields.join("\n")} +} +`; +} + +export function generatePrepareCompilerOptionsAPI(model = options): string { + const pathOptions = model.compilerOptions.filter(option => (option.pathKind === "file" || option.pathKind === "directory" || option.pathKind === "fileOrDirectory")); + const converter = (option: CompilerOption): string => { + const value = option.name; + switch (option.pathKind) { + case "file": + return `${value} === undefined ? undefined : toRootedFilePath(${value}, currentDirectory)`; + case "directory": + return option.type === "[]string" + ? `${value}?.map(value => toRootedDirectoryPath(value, currentDirectory))` + : `${value} === undefined ? undefined : toRootedDirectoryPath(${value}, currentDirectory)`; + case "fileOrDirectory": + return `${value} === undefined ? undefined : toRootedPath(${value}, currentDirectory)`; + default: + throw new Error(`Unsupported API path kind for ${option.name}: ${option.pathKind}`); + } + }; + return `${header} +import type { RootedDirectoryPath } from "../ast/index.ts"; +import type { CompilerOptions } from "./compilerOptions.generated.ts"; +import { + toRootedDirectoryPath, + toRootedFilePath, + toRootedPath, +} from "./path.ts"; +import type { RawCompilerOptions } from "./proto.generated.ts"; + +export function prepareCompilerOptions(options: RawCompilerOptions, currentDirectory: RootedDirectoryPath): CompilerOptions { + const { + ${pathOptions.map(option => `${option.name},`).join("\n ")} + ...rest + } = options; + const result = { + ...rest, + ${pathOptions.map(option => `${option.name}: ${converter(option)},`).join("\n ")} + }; + return result; +} +`; +} + +function optionsEquality(name: string, fields: { name: string; type: GoCompilerOptionType; }[]): string { + return `func (options *${name}) Equals(other *${name}) bool { + if options == other { return true } + if options == nil || other == nil { return false } + ${ + fields.map(field => { + const a = `options.${field.name}`; + const b = `other.${field.name}`; + let differs: string; + switch (field.type) { + case "*int": + differs = `${a} != ${b} && (${a} == nil || ${b} == nil || *${a} != *${b})`; + break; + case "[]string": + case "[]PluginImport": + case "[]tspath.RootedDirectoryPath": + differs = `(${a} == nil) != (${b} == nil) || !slices.Equal(${a}, ${b})`; + break; + case "*collections.OrderedMap[string, []string]": + differs = `!${a}.EqualFunc(${b}, func(a, b []string) bool { + return (a == nil) == (b == nil) && slices.Equal(a, b) +})`; + break; + default: + differs = `${a} != ${b}`; + } + return `if ${differs} { return false }`; + }).join("\n") + } + return true +} +`; +} + +function storedOptions(name: string, declarations: StoredDeclaration[]): string { + return `type ${name} struct { +${name === "BuildOptions" ? "_ noCopy\n" : ""} +${declarations.map(option => `${sectionComment(option.field.section)}${option.field.name} ${option.field.type} \`json:"${option.name},omitzero"\``).join("\n")} +} +`; +} + +function zeroValue(option: CompilerOption): string { + const kind = optionKind(option); + return kind === "Boolean" ? "core.TSUnknown" : kind === "String" ? '""' : kind === "Enum" ? "0" : "nil"; +} + +function showConfig(): string { + const serializedOptions = options.compilerOptions.filter(option => { + const declaration = option.declaration; + return option.showConfig !== false && declaration && declaration.category?.go !== "diagnostics.Command_line_Options" && declaration.category?.go !== "diagnostics.Output_Formatting"; + }); + const enumOptions = serializedOptions.filter(option => optionKind(option) === "Enum"); + assert.equal(new Set(enumOptions.map(option => option.type)).size, enumOptions.length, "ShowConfig enum types must have a single option map"); + return `func serializeCompilerOptions(options *core.CompilerOptions, configFilePath tspath.RootedFilePath, caseSensitivity tspath.CaseSensitivity) *collections.OrderedMap[string, any] { + result := collections.NewOrderedMapWithSizeHint[string, any](32) +${ + serializedOptions.map(option => { + const field = `options.${fieldName(option)}`; + const name = JSON.stringify(option.name); + const declaration = option.declaration!; + let value = field; + let condition = `${field} != ${zeroValue(option)}`; + switch (optionKind(option)) { + case "Enum": + return `if ${condition} { + if value := serializeCompilerOptionEnum(${field}); value != "" { + result.Set(${name}, value) + } +}`; + case "Boolean": + condition = `${field} == core.TSTrue || ${field} == core.TSFalse`; + value = `${field} == core.TSTrue`; + break; + case "String": + if (option.pathKind === "file" || option.pathKind === "directory") { + value = `serializeCompilerOptionPath(${field}.AsPath(), configFilePath, caseSensitivity)`; + } + else if (option.pathKind === "fileOrDirectory") { + value = `serializeCompilerOptionPath(${field}, configFilePath, caseSensitivity)`; + } + break; + case "List": { + const element = options.elements[option.name]; + if (option.pathKind === "directory") { + assert.equal(option.type, "[]string", `Unsupported file path list: ${option.name}`); + value = `core.Map(${field}, func(value tspath.RootedDirectoryPath) string { + if value == "" { return "" } + return serializeCompilerOptionPath(value.AsPath(), configFilePath, caseSensitivity) +})`; + } + else if (element?.kind === "Enum") { + assert.equal(option.type, "[]string", `Unsupported enum list: ${option.name}`); + value = `serializeCompilerOptionEnumList(${field}, ${options.enumMaps[option.name].goName})`; + } + break; + } + } + return `if ${condition} { + result.Set(${name}, ${value}) +}`; + }).join("\n") + } + return result +} + +func serializeCompilerOptionEnum(value any) string { + switch value := value.(type) { +${ + enumOptions.map(option => { + const seen = new Set(); + const entries = options.enumMaps[option.name].values.filter(entry => { + const value = goValue(entry.value); + if (seen.has(value)) return false; + seen.add(value); + return true; + }); + return `case core.${option.type}: +${entries.map(entry => `if value == ${goValue(entry.value)} { return ${JSON.stringify(entry.name)} }`).join("\n")}`; + }).join("\n") + } + } + return "" +} +`; +} + +function configDirSubstitution(): string { + const substitutedOptions = options.compilerOptions.filter(option => !option.pathKind && option.declaration?.allowConfigDirTemplateSubstitution); + return `func handleOptionConfigDirTemplateSubstitution(compilerOptions *parsedCompilerOptions, basePath tspath.RootedDirectoryPath) { + if compilerOptions == nil { return } +${ + substitutedOptions.map(option => { + const field = `compilerOptions.${fieldName(option)}`; + switch (option.type) { + case "string": + return `if startsWithConfigDirTemplate(${field}) { + ${field} = getSubstitutedPathWithConfigDirTemplate(${field}, basePath) +}`; + case "[]string": + return `if substitution := getSubstitutedStringArrayWithConfigDirTemplate(${field}, basePath); substitution != nil { + ${field} = substitution +}`; + case "*collections.OrderedMap[string, []string]": + return `{ + var paths *collections.OrderedMap[string, []string] + for k, v := range ${field}.Entries() { + if substitution := getSubstitutedStringArrayWithConfigDirTemplate(v, basePath); substitution != nil { + if paths == nil { + paths = ${field}.Clone() + ${field} = paths + } + paths.Set(k, substitution) + } + } +}`; + default: + throw new Error(`Unsupported configDir substitution type for ${option.name}: ${option.type}`); + } + }).join("\n") + } + for key, value := range compilerOptions.unresolvedPaths { + option := CommandLineCompilerOptionsMap.Get(key) + if option.Kind == CommandLineOptionTypeList { + value = core.Map(ParseStringArray(value), func(path string) any { + return getSubstitutedPathWithConfigDirTemplate(path, basePath) + }) + } else { + value = getSubstitutedPathWithConfigDirTemplate(ParseString(value), basePath) + } + ParseCompilerOptions(key, value, compilerOptions.CompilerOptions) + } + clear(compilerOptions.unresolvedPaths) +} +`; +} + +function mergeCompilerOptions(): string { + return `func mergeCompilerOptionFields(targetOptions, sourceOptions *core.CompilerOptions, explicitNullFields collections.Set[string]) { +${ + options.compilerOptions.map(option => { + const field = fieldName(option); + const zero = zeroValue(option); + return `if explicitNullFields.Has(${JSON.stringify(option.name)}) { + targetOptions.${field} = ${zero} +} else if sourceOptions.${field} != ${zero} { + targetOptions.${field} = sourceOptions.${field} +}`; + }).join("\n") + } +} +`; +} + +function transpileOptions(): string { + const transformedOptions = options.compilerOptions.filter(option => option.transpile); + return `${header} +package transpile + +import "github.com/microsoft/TypeScript/tsc/internal/core" + +func setOptionsForTranspile(options *core.CompilerOptions, declaration bool) { +${ + transformedOptions.map(option => { + const { value, declarationValue, unless } = option.transpile!; + const field = `options.${fieldName(option)}`; + const assigned = value === "clear" ? zeroValue(option) : value ? "core.TSTrue" : "core.TSFalse"; + let code = `${field} = ${assigned}`; + if (declarationValue === "preserve") code = `if !declaration { ${code} }`; + else if (declarationValue !== undefined) code = `if declaration { ${field} = ${declarationValue ? "core.TSTrue" : "core.TSFalse"} } else { ${code} }`; + if (unless) code = `if !options.${fieldName(options.compilerOptions.find(option => option.name === unless)!)}.IsTrue() { ${code} }`; + return code; + }).join("\n") + } +} +`; +} + +function generateBuildInfoOptions(): string { + const storedOptions = options.compilerOptions.filter(option => option.declaration?.affectsBuildInfo); + return `// ForEachCompilerOptionAffectingBuildInfo visits nonzero options in CompilerOptions field order. +func ForEachCompilerOptionAffectingBuildInfo(options *core.CompilerOptions, fn func(option *CommandLineOption, value any)) { +${ + storedOptions.map(option => + `if options.${fieldName(option)} != ${zeroValue(option)} { + fn(CommandLineCompilerOptionsMap.Get(${JSON.stringify(option.name)}), options.${fieldName(option)}) +}` + ).join("\n") + } +} +`; +} + +export function generateOptionComparisons(model = options): string { + const comparisons = [ + ["SemanticDiagnostics", "affectsSemanticDiagnostics"], + ["DeclarationPath", "affectsDeclarationPath"], + ["Emit", "affectsEmit"], + ] as const; + return `${ + comparisons.map(([name, flag]) => { + const expressions = model.compilerOptions.flatMap(option => { + const declaration = option.declaration; + if (!declaration?.[flag]) return []; + const kind = optionKind(option); + assert(kind === "Boolean" || kind === "String" || kind === "Enum", `Unsupported comparison type for ${option.name}: ${option.type}`); + const value = (receiver: string) => { + const field = `${receiver}.${fieldName(option)}`; + if (declaration.strictFlag) return `${receiver}.GetStrictOptionValue(${field})`; + return field; + }; + return [`${value("oldOptions")} != ${value("newOptions")}`]; + }); + return `func CompilerOptionsAffect${name}(oldOptions *core.CompilerOptions, newOptions *core.CompilerOptions) bool { + if oldOptions == newOptions { return false } + if oldOptions == nil || newOptions == nil { return true } + return ${expressions.join(" ||\n") || "false"} +} +`; + }).join("\n") + } +`; +} + +function enumStrings(): string { + return options.enums.filter(enumDef => enumDef.stringer).map(enumDef => { + const stringer = enumDef.stringer!; + return `func (value ${enumDef.name}) String() string { + switch value { + case 0: + panic("should not use zero value of ${enumDef.name}") + ${ + enumDef.members.filter(member => typeof member.value === "number" && member.value !== 0).map(member => { + const constant = `${enumDef.name}${member.name}`; + const text = stringer === "name" ? member.name : options.enumMaps[stringer.enumMap].values.find(entry => typeof entry.value === "object" && entry.value.go === `core.${constant}`)?.name; + assert(text, `Missing display name for ${constant}`); + return `case ${constant}: return ${JSON.stringify(text)}`; + }).join("\n") + } + default: + panic("unhandled case in ${enumDef.name}.String") + } +} +`; + }).join("\n"); +} + +function numericEnums(): string { + return `${ + options.enums.map(enumDef => + `type ${enumDef.name} int32 + +const ( +${enumDef.members.map(member => `${member.comment ? "// " + member.comment.replaceAll("\n", "\n// ") + "\n" : ""}${enumDef.name}${member.name} ${enumDef.name} = ${typeof member.value === "number" ? member.value : enumDef.name + member.value}${member.trailingComment ? " // " + member.trailingComment : ""}`).join("\n")} +) +` + ).join("\n") + } + +var ModuleKindToModuleResolutionKind = map[ModuleKind]ModuleResolutionKind{ +${options.enums.find(enumDef => enumDef.name === "ModuleKind")!.members.filter(member => member.moduleResolution).map(member => `ModuleKind${member.name}: ModuleResolutionKind${member.moduleResolution},`).join("\n")} +} +`; +} + +const declarationFields = new Map([ + ["shortName", "ShortName"], + ["isFilePath", "IsFilePath"], + ["pathKind", "PathKind"], + ["isTSConfigOnly", "IsTSConfigOnly"], + ["isCommandLineOnly", "IsCommandLineOnly"], + ["description", "Description"], + ["defaultValueDescription", "DefaultValueDescription"], + ["showInSimplifiedHelpView", "ShowInSimplifiedHelpView"], + ["category", "Category"], + ["extraValidation", "extraValidation"], + ["minValue", "minValue"], + ["listPreserveFalsyValues", "listPreserveFalsyValues"], +]); + +function declarationLiteral(declaration: Declaration): string { + const { name, kind } = declaration; + const properties = [`Name: ${JSON.stringify(name)},`, `Kind: CommandLineOptionType${kind},`]; + for (const [key, value] of Object.entries(declaration)) { + const goName = declarationFields.get(key); + if (goName === undefined || value === undefined) continue; + const goValueText = key === "extraValidation" + ? "extraValidationLocale" + : key === "pathKind" + ? `CommandLineOptionPathKind${value[0].toUpperCase() + value.slice(1)}` + : goValue(value); + properties.push(`${goName}: ${goValueText},`); + } + return `{\n${properties.join("\n")}\n}`; +} + +function declarations(): string { + const all = compilerDeclarations(); + const groups = ["commonOptionsWithBuild", "optionsForCompiler"] as const; + const arrays: [string, Declaration[]][] = [ + ...groups.map(group => [group, orderByName(all.filter(declaration => declaration.group === group), options.declarationOrder[group], group)] as [string, Declaration[]]), + ["typeAcquisitionDecls", options.typeAcquisition], + ]; + return `var OptionsDeclarations = slices.Concat(commonOptionsWithBuild, optionsForCompiler) + +var BuildOpts = slices.Concat(commonOptionsWithBuild, OptionsForBuild) + +${arrays.map(([name, values]) => `var ${name} = []*CommandLineOption{\n${values.map(declaration => declarationLiteral(declaration) + ",").join("\n")}\n}`).join("\n\n")} + +var commandLineOptionElements = map[string]*CommandLineOption{ +${Object.entries(options.elements).map(([name, declaration]) => `${JSON.stringify(name)}: ${declarationLiteral(declaration)},`).join("\n")} +} + +var TscBuildOption = CommandLineOption${declarationLiteral(options.buildOptions[0])} + +var OptionsForBuild = []*CommandLineOption{ + &TscBuildOption, + ${options.buildOptions.slice(1).map(option => declarationLiteral(option) + ",").join("\n")} +} +`; +} + +function rootDeclarations(): string { + const elementOptions = { + compilerOptions: "CommandLineCompilerOptionsMap", + typeAcquisition: "commandLineOptionsToMap(typeAcquisitionDecls)", + extends: `commandLineOptionsToMap([]*CommandLineOption{${declarationLiteral(options.elements.extends)}})`, + }; + return `${ + options.rootOptions.filter(option => option.variable).map(option => { + let literal = declarationLiteral(option); + if (option.elementOptions) literal = literal.slice(0, -1) + `ElementOptions: ${elementOptions[option.elementOptions]},\n}`; + return `var ${option.variable} = &CommandLineOption${literal}`; + }).join("\n\n") + } + +var tsconfigRootOptionsMap = &CommandLineOption{ + Name: "undefined", + Kind: CommandLineOptionTypeObject, + ElementOptions: commandLineOptionsToMap([]*CommandLineOption{ + ${options.rootOptions.map(option => (option.variable ?? declarationLiteral(option)) + ",").join("\n")} + }), +} +`; +} + +function enumMaps(): string { + return `${Object.values(options.enumMaps).map(map => `var ${map.goName} = collections.NewOrderedMapFromList([]collections.MapEntry[string, any]{\n${map.values.map(entry => `{Key: ${JSON.stringify(entry.name)}, Value: ${goValue(entry.value)}},`).join("\n")}\n})`).join("\n\n")} + +var commandLineOptionEnumMap = map[string]*collections.OrderedMap[string, any]{ +${Object.entries(options.enumMaps).map(([name, map]) => `${JSON.stringify(name)}: ${map.goName},`).join("\n")} +} + +var commandLineOptionDeprecated = map[string]*collections.Set[string]{ +${Object.entries(options.enumMaps).filter(([, map]) => map.deprecatedKeys).map(([name, map]) => `${JSON.stringify(name)}: collections.NewSetFromItems(${map.deprecatedKeys!.map(key => JSON.stringify(key)).join(", ")}),`).join("\n")} +} + +var targetToLibMap = map[core.ScriptTarget]string{ +${options.enums.find(enumDef => enumDef.name === "ScriptTarget")!.members.filter(member => member.lib).toReversed().map(member => `core.ScriptTarget${member.name}: ${JSON.stringify(member.lib)},${member.libComment ? " // " + member.libComment : ""}`).join("\n")} +} +`; +} + +function parserAssignment(option: CompilerOption): string { + const target = `allOptions.${fieldName(option)}`; + switch (option.pathKind) { + case "file": + return `${target} = parseFileName(value)`; + case "directory": + return option.type === "[]string" + ? `${target} = parseDirectoryNames(value)` + : `${target} = parseDirectoryName(value)`; + case "fileOrDirectory": + return `${target} = parseFileOrDirectoryName(value)`; + case "sourceMapLocation": + return `${target} = tspath.ToSourceMapLocation(ParseString(value))`; + } + if (option.name === "lib") { + return `if libs, ok := value.([]string); ok { ${target} = libs } else { ${target} = ParseStringArray(value) }`; + } + if (option.name === "plugins") { + return `if plugins, ok := value.([]any); ok { + ${target} = core.Map(plugins, func(plugin any) core.PluginImport { + if pluginMap, isMap := plugin.(*collections.OrderedMap[string, any]); isMap { + return core.PluginImport{Name: ParseString(pluginMap.GetOrZero("name"))} + } + return core.PluginImport{} + }) + }`; + } + const functions: Partial> = { + "Tristate": "ParseTristate", + "string": "ParseString", + "*int": "parseNumber", + "[]string": "ParseStringArray", + "*collections.OrderedMap[string, []string]": "parseStringMap", + }; + const parser = functions[option.type]; + assert(option.type !== "[]PluginImport", "Plugin options require the plugin parser"); + return `${target} = ${parser ?? `floatOrInt32ToFlag[core.${option.type}]`}(value)`; +} + +function parser(): string { + return `func parseCompilerOptions(key string, value any, allOptions *core.CompilerOptions) (foundKey bool) { + if option := CommandLineCompilerOptionsMap.Get(key); option != nil { key = option.Name } + switch key { + ${options.compilerOptions.map(option => `case ${[option.name, ...(option.parseAliases ?? [])].map(name => JSON.stringify(name)).join(", ")}:\n${parserAssignment(option)}`).join("\n")} + default: + return false + } + return true +} + +func getDefaultCompilerOptions(configFileName tspath.RootedFilePath) *parsedCompilerOptions { + options := &core.CompilerOptions{} + if configFileName != "" && configFileName.BaseName() == "jsconfig.json" { + options = &core.CompilerOptions{ + ${ + options.compilerOptions.filter(option => option.jsconfigDefault !== undefined).map(option => { + const value = option.jsconfigDefault!; + const expression = typeof value === "boolean" ? `core.TS${value ? "True" : "False"}` : typeof value === "number" ? `new(${value})` : JSON.stringify(value); + return `${fieldName(option)}: ${expression},`; + }).join("\n") + } + } + } + return &parsedCompilerOptions{ + CompilerOptions: options, + unresolvedPaths: make(unresolvedCompilerOptionPaths), + } +} + +func getDefaultTypeAcquisition(configFileName tspath.RootedFilePath) *core.TypeAcquisition { + if configFileName != "" && configFileName.BaseName() == "jsconfig.json" { + return &core.TypeAcquisition{ + ${options.typeAcquisition.filter(option => option.jsconfigDefault !== undefined).map(option => `${option.field.name}: core.TS${option.jsconfigDefault ? "True" : "False"},`).join("\n")} + } + } + return &core.TypeAcquisition{} +} +`; +} + +function storedParser(name: string, declarations: StoredDeclaration[]): string { + return `func Parse${name}(key string, value any, allOptions *core.${name}) { + if value == nil { return } + if allOptions == nil { return } + ${name === "BuildOptions" ? "if option := BuildNameMap.Get(key); option != nil { key = option.Name }" : ""} + switch key { + ${ + declarations.map(option => { + const stored: CompilerOption = { name: option.name, goName: option.field.name, type: option.field.type }; + return `case ${JSON.stringify(option.name)}:\n${parserAssignment(stored)}`; + }).join("\n") + } + } +} +`; +} + +export function generateOptions(): Map { + validateOptions(options); + const buildOptions = options.buildOptions.filter((option): option is StoredDeclaration => option.field !== undefined); + return new Map([ + ["packages/typescript/src/api/compilerOptions.generated.ts", generateCompilerOptionsAPI()], + ["packages/typescript/src/api/prepareCompilerOptions.generated.ts", generatePrepareCompilerOptionsAPI()], + [ + "tsc/internal/core/options_generated.go", + `${header} +package core + +import ( + "slices" + + "github.com/microsoft/TypeScript/tsc/internal/collections" + "github.com/microsoft/TypeScript/tsc/internal/tspath" +) + +//go:generate npx hereby generate:compileroptions + +${coreOptions()} +${numericEnums()} +${enumStrings()} +${storedOptions("TypeAcquisition", options.typeAcquisition)} +${storedOptions("BuildOptions", orderByName(buildOptions, options.buildOptionFieldOrder, "BuildOptions fields"))} +`, + ], + ["tsc/internal/transpile/options_generated.go", transpileOptions()], + [ + "tsc/internal/tsoptions/declarations_generated.go", + `${header} +package tsoptions + +import ( + "slices" + + "github.com/microsoft/TypeScript/tsc/internal/collections" + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/diagnostics" +) + +${declarations()} +${rootDeclarations()} +${enumMaps()} +`, + ], + [ + "tsc/internal/tsoptions/options_generated.go", + `${header} +package tsoptions + +import ( + "github.com/microsoft/TypeScript/tsc/internal/collections" + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/tspath" +) + +${parser()} +${storedParser("TypeAcquisition", options.typeAcquisition)} +${storedParser("BuildOptions", buildOptions)} +${generateOptionComparisons()} +${generateBuildInfoOptions()} +${mergeCompilerOptions()} +${configDirSubstitution()} +${showConfig()} +`, + ], + [ + "tsc/internal/testrunner/options_generated.go", + `${header} +package testrunner + +import "github.com/microsoft/TypeScript/tsc/internal/collections" + +var compilerVaryBy = collections.NewSetFromItems( +${ + options.compilerOptions.filter(option => + option.declaration && !option.declaration.isCommandLineOnly && + (optionKind(option) === "Boolean" || optionKind(option) === "Enum") + ).map(option => option.name.toLowerCase()).sort().map(name => `${JSON.stringify(name)},`).join("\n") + } +) +`, + ], + ...(["tsconfig", "jsconfig"] as const).map(name => [`packages/typescript/schemas/${name}.schema.json`, JSON.stringify(generateConfigSchema(name), null, 4) + "\n"] as [string, string]), + ]); +} + +export default async function generate(force = false): Promise { + const inputs = [...sourceFiles.map(file => path.join(import.meta.dirname, file)), diagnosticsFile]; + const outputs = generateOptions(); + const changed: GeneratedFile[] = []; + for (const [fileName, content] of outputs) { + const file = new GeneratedFile(path.join(repoRoot, fileName), inputs); + if (file.isCurrent(force)) continue; + file.write(content); + changed.push(file); + } + if (changed.length) { + await formatFiles(changed.map(file => file.fileName)); + for (const file of changed) file.markCurrent(); + } +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + await generate(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/generate-ts-ast.ts b/tools/scripts/tsc/generate-ts-ast.ts index 869b34b2e49a9..599260e1a222e 100644 --- a/tools/scripts/tsc/generate-ts-ast.ts +++ b/tools/scripts/tsc/generate-ts-ast.ts @@ -1,1841 +1,1835 @@ -/** - * Schema-driven TypeScript AST code generator. - * Reads tools/scripts/tsc/ast.json and produces: - * - packages/typescript/src/ast/ast.generated.ts - * - packages/typescript/src/ast/factory.generated.ts - * - packages/typescript/src/ast/is.generated.ts - * - packages/typescript/src/ast/visitor.generated.ts - * - * Usage: node tools/scripts/tsc/generate-ts-ast.ts - */ - -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; -import { GeneratedFile } from "../gen/generatedFile.mts"; -import { - formatFilesSync, - parseGeneratorArgs, - repoRoot as ROOT, -} from "../gen/utils.mts"; -import type { - MemberInfo, - NodeType, - Type, -} from "./schema.ts"; -import { - api, - kindGuardName, -} from "./schema.ts"; - -// ──────────────────────────────────────────────────────────────────────────── -// Load schema -// ──────────────────────────────────────────────────────────────────────────── - -// TS members only (filter noTS/inherited issues) -function tsMembers(node: NodeType): MemberInfo[] { - return node.members.filter(member => !member.isKindParam() && !member.noTS); -} - -function isInheritedFromTsBase(member: MemberInfo): boolean { - return member.inherited && !!member.inheritedField && !member.inheritedField.noTS; -} - -// NodeBase fields (e.g. Flags) are class-level properties on NodeObject, -// not data members stored in _data. -const nodeBaseFieldNames = new Set( - api.bases().find(b => b.name === "NodeBase")?.fields.filter(f => !f.noTS).map(f => f.name) ?? [], -); - -function isNodeBaseProperty(member: MemberInfo): boolean { - return member.inherited && nodeBaseFieldNames.has(member.name); -} - -function tsInterfaceMembers(node: NodeType): MemberInfo[] { - return tsMembers(node).filter(member => !isInheritedFromTsBase(member) || member.hasTypeScriptOverride()); -} - -// ──────────────────────────────────────────────────────────────────────────── -// TS-specific naming and typing -// ──────────────────────────────────────────────────────────────────────────── - -// The JSDoc comment `text` member is stored as a raw []string in Go, but the -// encoder joins it into a single string and both the RemoteNode API and the -// local factory expose it as a scalar string. Collapse just this member to its -// element type in the generated TS. This is intentionally keyed on the property -// name rather than on "raw list of a primitive" so the exception stays narrow -// and explicit; `text` is the only such member. -function collapsedTextType(name: string, type: Type): string | undefined { - if (name === "text" && type.kind === "list" && type.listKind === "raw") { - return type.elementType.formatTypeScript(); - } - return undefined; -} - -function tsParamTypeFrom(name: string, type: Type): string { - return collapsedTextType(name, type) - ?? (type.kind === "list" ? type.raw().formatTypeScript() : type.formatTypeScript()); -} - -function tsParamName(propName: string): string { - if (propName === "arguments") return "arguments_"; - return propName; -} - -// Get factory members in schema order. -function factoryMembers(node: NodeType): MemberInfo[] { - return tsMembers(node).filter(m => !m.noFactory); -} - -function factoryNodes(): NodeType[] { - return api.nodes().filter(node => !node.handWritten && !isVariantNode(node)); -} - -function kindTypeParameter(node: NodeType): { name: string; constraint: string; } | undefined { - const kindType = node.kindType; - if (kindType.kind !== "typeParameter") return undefined; - return { name: kindType.name, constraint: kindType.constraint.formatTypeScript() }; -} - -function isVariantNode(node: NodeType): boolean { - return node.isMultiKind() && node.kindType.kind !== "typeParameter"; -} - -function syntaxKindChecksForNode(node: NodeType): string[] { - return node.allKinds().map(k => k.formatTypeScript()); -} - -// ──────────────────────────────────────────────────────────────────────────── -// Bases for ast.generated.ts -// ──────────────────────────────────────────────────────────────────────────── - -const goOnlyBases = new Set( - api.bases().filter(base => base.isGoOnly()).map(base => base.key), -); - -// Expand goOnly bases transitively: when a goOnly base appears in an extends -// list, replace it with its own non-goOnly extends (recursively). -function expandTsExtends(exts: string[]): string[] { - const result: string[] = []; - const seen = new Set(); - - function expand(bases: string[]) { - for (const b of bases) { - if (seen.has(b)) continue; - seen.add(b); - if (goOnlyBases.has(b)) { - const base = api.getBase(b); - if (base?.extends) { - expand(base.extendsKeys); - } - } - else { - result.push(b); - } - } - } - - expand(exts); - return result; -} - -function baseTsName(base: string | NodeType): string { - return typeof base === "string" ? base : base.formatTypeScript(); -} - -function resolveBaseExtends(base: NodeType): string { - if (base.extendsKeys.length > 0) { - const tsExts = expandTsExtends(base.extendsKeys) - .map(e => baseTsName(e)); - if (tsExts.length > 0) return tsExts.join(", "); - } - return "Node"; -} - -function deriveNodeTsExtends(node: NodeType): string { - const tsExts = expandTsExtends(node.extendsKeys) - .map(e => baseTsName(e)); - return tsExts.length > 0 ? tsExts.join(", ") : "Node"; -} - -function generateBaseFields(base: NodeType): string { - if (base.fields.length === 0) return ""; - let result = ""; - for (const field of base.fields) { - if (field.noTS) continue; - const name = api.uncapitalize(field.name); - const type = collapsedTextType(field.name, field.type) ?? field.type.formatTypeScript(); - const opt = field.optional ? "?" : ""; - result += `\n readonly ${name}${opt}: ${type};`; - } - return result; -} - -// ──────────────────────────────────────────────────────────────────────────── -// Variant types derived from multi-kind Go nodes with enum Kind members. -// ──────────────────────────────────────────────────────────────────────────── - -// Compute TS variant interfaces from multi-kind nodes with enum Kind members. -// For each enum value, create a separate interface; a union type alias uses the Go struct name. -interface TsVariant { - tsName: string; - syntaxKind: string; - tsExtends: string; - members?: MemberInfo[]; - handWrittenVisitor?: boolean; -} - -interface VisitorEntry { - tsName: string; - syntaxKind: string; - updateName: string; - members: MemberInfo[]; - handWrittenVisitor?: boolean; -} - -function computeTsVariants(): TsVariant[] { - const result: TsVariant[] = []; - for (const node of api.nodes()) { - if (!isVariantNode(node)) continue; - - // tsMembers excludes the Kind member; use full set so factory/visitor/clone - // code sees inherited members too. Interface generation filters further. - const otherMembers = tsMembers(node); - const tsExtends = deriveNodeTsExtends(node); - - const kindValues = node.kindTypes().map(kind => kind.name); - - for (const kindValue of kindValues) { - result.push({ - tsName: kindValue, - syntaxKind: kindValue, - tsExtends, - members: otherMembers, - handWrittenVisitor: node.handWrittenVisitor, - }); - } - } - return result; -} - -const tsVariants = computeTsVariants(); - -function visitorNodes(): NodeType[] { - return api.nodes().filter(node => !isVariantNode(node)); -} - -function visitorMembers(node: NodeType): MemberInfo[] { - return factoryMembers(node).filter(member => member.isChild()); -} - -function visitorGuardName(member: MemberInfo): string | undefined { - const typeName = member.type.formatTypeScript(); - if (typeName === "Node" || typeName === "Declaration") { - return undefined; - } - - if (member.typeGuard) { - return member.typeGuard; - } - - switch (member.type.kind) { - case "node": - case "alias": - return `is${member.type.name}`; - case "union": { - throw new Error(`No visitor guard configured for union child type ${member.type.formatTypeScript()} on ${member.node?.name}.${member.name}`); - } - default: - return undefined; - } -} - -function visitorVisitExpression(member: MemberInfo): { expression: string; guardName?: string; } { - const propName = api.uncapitalize(member.name); - if (member.listKind === "raw") { - return { expression: `visitNodesArray(node.${propName}, visitor)` }; - } - if (member.type.kind === "list") { - return { expression: `visitNodes(node.${propName}, visitor)` }; - } - const guardName = visitorGuardName(member); - const guardArg = guardName ? `, ${guardName}` : ""; - return { expression: `visitNode(node.${propName}, visitor${guardArg})`, guardName }; -} - -function visitorEntries(): VisitorEntry[] { - const entries: VisitorEntry[] = []; - - for (const node of visitorNodes()) { - const members = visitorMembers(node); - if (members.length === 0) continue; - entries.push({ - tsName: node.name, - syntaxKind: node.syntaxKindName, - updateName: `update${node.name}`, - members, - handWrittenVisitor: node.handWrittenVisitor, - }); - } - - for (const variant of tsVariants) { - const members = (variant.members || []).filter(member => member.isChild()); - if (members.length === 0) continue; - entries.push({ - tsName: variant.tsName, - syntaxKind: variant.syntaxKind, - updateName: `update${variant.tsName}`, - members, - handWrittenVisitor: variant.handWrittenVisitor, - }); - } - - return entries; -} - -// ──────────────────────────────────────────────────────────────────────────── -// Code generation: ast.generated.ts -// ──────────────────────────────────────────────────────────────────────────── - -function generateAstGenerated(): string { - const eol = "\r\n"; - const parts: string[] = []; - - // ── SyntaxKind union aliases from schema ── - const kindUnions = api.kindAliases(); - for (const { name, members } of kindUnions) { - const parts2 = members.map(m => { - // If it references another union, use the union name directly - if (api.hasKindAlias(m)) return m; - return `SyntaxKind.${m}`; - }); - parts.push(`export type ${name} = ${parts2.join(" | ")};`); - } - - // ── Base interfaces from schema ── - parts.push(""); - for (const base of api.bases()) { - if (goOnlyBases.has(base.key)) continue; - const name = baseTsName(base); - const extendsClause = resolveBaseExtends(base); - const brandProp = base.brand ? `\n readonly ${base.brand}: any;` : ""; - const fields = generateBaseFields(base); - parts.push(`export interface ${name} extends ${extendsClause} {${brandProp}${fields}\n}`); - } - - // ── Concrete node interfaces from schema ── - parts.push(""); - for (const node of api.nodes()) { - if (node.handWritten) continue; - if (isVariantNode(node)) continue; // handled as variant interfaces below - - const interfaceName = node.name; - const extendsClause = deriveNodeTsExtends(node); - - // Generic type parameters - let typeParamStr = ""; - if (node.typeParameters.length > 0) { - const tps = node.typeParameters.map(tp => { - let s = tp.name + " extends " + tp.constraint; - if (tp.default) s += " = " + tp.default; - return s; - }); - typeParamStr = `<${tps.join(", ")}>`; - } - - // Kind line: use type param name if available, otherwise SyntaxKind constant - const kindLine = `\n readonly kind: ${node.kindType.formatTypeScript()};`; - - let memberLines = ""; - for (const m of tsInterfaceMembers(node)) { - if (m.rawType === "SyntaxKind" && m.name === "SyntaxKind") continue; - const propName = api.uncapitalize(m.name); - const propType = m.type.formatTypeScript(); - const opt = m.optional ? "?" : ""; - memberLines += `\n readonly ${propName}${opt}: ${propType};`; - } - - parts.push(`export interface ${interfaceName}${typeParamStr} extends ${extendsClause} {${kindLine}${memberLines}\n}`); - } - - // ── Union types from schema ── - parts.push(""); - for (const alias of api.nodeAliases()) { - if (alias.isUnion) { - const members = alias.unionMemberTypes.map(type => { - if (type.baseKind() === "kind") { - // SyntaxKind -> Node - debugger; - } - return type.formatTypeScript(); - }).join(" | "); - if (!members) continue; - parts.push(`export type ${alias.name} = ${members};`); - } - else if (alias.base) { - parts.push(`export type ${alias.name} = ${baseTsName(alias.base)};`); - } - } - - // ── Variant interfaces (from multi-kind nodes with enum Kind) ── - parts.push(""); - for (const v of tsVariants) { - const kindLine = `\n readonly kind: SyntaxKind.${v.syntaxKind};`; - let memberLines = ""; - if (v.members) { - for (const m of v.members) { - // For interfaces, skip inherited members (they come from the base type) - if (isInheritedFromTsBase(m) && !m.hasTypeScriptOverride()) continue; - const propName = api.uncapitalize(m.name); - const propType = m.type.formatTypeScript(); - const opt = m.optional ? "?" : ""; - memberLines += `\n readonly ${propName}${opt}: ${propType};`; - } - } - parts.push(`export interface ${v.tsName} extends ${v.tsExtends} {${kindLine}${memberLines}\n}`); - } - - // ── Union type aliases for multi-kind nodes ── - for (const node of api.nodes()) { - if (!isVariantNode(node)) continue; - const kindValues = node.kindTypes().map(kind => kind.name); - parts.push(`export type ${node.name} = ${kindValues.join(" | ")};`); - } - - // ── Instantiation aliases for generic nodes ── - for (const node of api.nodes()) { - if (node.instantiationAliases.length === 0) continue; - const interfaceName = node.name; - for (const { name: aliasName, typeArg } of node.instantiationAliases) { - // If the type arg is a kind union name, use it directly; otherwise prefix with SyntaxKind. - const arg = api.hasKindAlias(typeArg) ? typeArg : `SyntaxKind.${typeArg}`; - parts.push(`export type ${aliasName} = ${interfaceName}<${arg}>;`); - } - } - - // ── NodeList type aliases ── - for (const listAlias of api.listAliases()) { - parts.push(`export type ${listAlias.name} = NodeArray<${listAlias.elementTypeName}>;`); - } - - const body = parts.join(eol); - - // ── Header (with imports resolved from the schema model) ── - // Types referenced by the generated declarations but not declared here are - // hand-written in ast.ts; import them so the module type-checks. - const astImports = ["Node", "NodeArray", ...unresolvedAstImports()]; - astImports.sort((a, b) => a.localeCompare(b)); - const header = `// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. - -import type { ModifierFlags } from "#enums/modifierFlags"; -import type { NodeFlags } from "#enums/nodeFlags"; -import { SyntaxKind } from "#enums/syntaxKind"; -import { TokenFlags } from "#enums/tokenFlags"; -import type { ${astImports.join(", ")} } from "./ast.ts";`; - - return [header, body].join(eol); -} - -// TypeScript names that are available without importing from ast.ts: built-in -// primitives, and enums/base types imported from other modules in the header. -const astBuiltinTypeNames = new Set([ - "any", - "boolean", - "never", - "null", - "number", - "string", - "undefined", - "unknown", - "void", - "ModifierFlags", - "NodeFlags", - "TokenFlags", - "SyntaxKind", - "Node", - "NodeArray", -]); - -// Walks a schema Type and records every named type it references in the -// generated TypeScript. Node and alias references contribute their name; -// unions and lists recurse into their members; kinds and type parameters emit -// `SyntaxKind.*` / locally-scoped names and contribute nothing. Names the -// schema cannot resolve fall back to a PrimitiveType whose name is the raw -// reference (e.g. a hand-written `ast.ts` type such as JsxTagNamePropertyAccess). -function collectTypeReferences(type: Type, into: Set): void { - switch (type.kind) { - case "node": - case "alias": - into.add(type.name); - break; - case "union": - for (const member of type.types) collectTypeReferences(member, into); - break; - case "list": - collectTypeReferences(type.elementType, into); - break; - case "primitive": { - const name = type.formatTypeScript(); - if (!astBuiltinTypeNames.has(name)) into.add(name); - break; - } - case "kind": - case "typeParameter": - // Emitted as `SyntaxKind.*` or a locally-declared name; nothing to import. - break; - } -} - -// The set of type names declared within ast.generated.ts itself. Mirrors the -// declarations emitted by generateAstGenerated so references to them are not -// mistaken for hand-written ast.ts types. -function declaredAstNames(): Set { - const declared = new Set(); - for (const { name } of api.kindAliases()) declared.add(name); - for (const base of api.bases()) { - if (!goOnlyBases.has(base.key)) declared.add(baseTsName(base)); - } - // Concrete node interfaces and variant-node union aliases both use node.name. - for (const node of api.nodes()) { - if (!node.handWritten) declared.add(node.name); - } - for (const alias of api.nodeAliases()) declared.add(alias.name); - for (const variant of tsVariants) declared.add(variant.tsName); - for (const node of api.nodes()) { - for (const { name } of node.instantiationAliases) declared.add(name); - } - for (const listAlias of api.listAliases()) declared.add(listAlias.name); - return declared; -} - -// Type names referenced by ast.generated.ts but not declared within it, and so -// hand-written in ast.ts and needing an import. Derived from the schema model: -// the same Type objects generateAstGenerated emits are walked for references. -function unresolvedAstImports(): string[] { - const referenced = new Set(); - - for (const base of api.bases()) { - if (goOnlyBases.has(base.key)) continue; - for (const field of base.fields) { - if (field.noTS) continue; - collectTypeReferences(field.type, referenced); - } - } - for (const node of api.nodes()) { - if (node.handWritten || isVariantNode(node)) continue; - collectTypeReferences(node.kindType, referenced); - for (const member of tsInterfaceMembers(node)) { - collectTypeReferences(member.type, referenced); - } - } - for (const alias of api.nodeAliases()) { - if (alias.isUnion) { - for (const member of alias.unionMemberTypes) collectTypeReferences(member, referenced); - } - else if (alias.base) { - collectTypeReferences(alias.base, referenced); - } - } - for (const variant of tsVariants) { - for (const member of variant.members || []) { - collectTypeReferences(member.type, referenced); - } - } - for (const listAlias of api.listAliases()) { - if (listAlias.elementType) collectTypeReferences(listAlias.elementType, referenced); - } - - const declared = declaredAstNames(); - return [...referenced] - .filter(name => !declared.has(name) && !astBuiltinTypeNames.has(name)) - .sort((a, b) => a.localeCompare(b)); -} - -// ──────────────────────────────────────────────────────────────────────────── -// Code generation: factory.generated.ts -// ──────────────────────────────────────────────────────────────────────────── - -function generateFactory(): string { - const out: string[] = []; - const importTypes = new Set(); - - // Collect all factory-generatable schema nodes - const concreteFactoryNodes = factoryNodes(); - - // ── Collect property names for getters ── - // Exclude names that conflict with NodeObject's own properties - const nodeObjectOwnProps = new Set(["kind", "flags", "pos", "end", "parent", "_data"]); - const getterNames = new Set(); - for (const node of api.nodes()) { - for (const m of tsMembers(node)) { - const name = api.uncapitalize(m.name); - if (!nodeObjectOwnProps.has(name)) getterNames.add(name); - } - } - // Add variant property names - for (const v of tsVariants) { - for (const m of v.members || []) { - const name = api.uncapitalize(m.name); - if (!nodeObjectOwnProps.has(name)) getterNames.add(name); - } - } - // Extra getters for hand-written nodes (SourceFile) whose data properties - // aren't in the schema but are set by hand-written factory functions. - for ( - const name of [ - "fileName", - "originalText", - "contentMapper", - "virtualFileName", - "diagnosticDirectives", - "supplementalSourceFileNames", - "canonicalSourceFileName", - "path", - "languageVariant", - "scriptKind", - "spanMap", - "isDeclarationFile", - "referencedFiles", - "typeReferenceDirectives", - "libReferenceDirectives", - "imports", - "moduleAugmentations", - "ambientModuleNames", - "externalModuleIndicator", - "tokenCache", - ] - ) { - getterNames.add(name); - } - - // ── Collect all types referenced in factory ── - function addType(t: string) { - // Extract base type names from complex types - const stripped = t.replace(/readonly\s+/g, "").replace(/\[\]/g, "") - .replace(/NodeArray<(.+)>/g, "$1").replace(/\s*\|\s*/g, "|"); - for (const part of stripped.split("|")) { - const clean = part.trim(); - if ( - clean && clean !== "undefined" && clean !== "boolean" && clean !== "string" - && clean !== "any" - && clean !== "number" && clean !== "true" && !clean.startsWith("SyntaxKind.") - ) { - importTypes.add(clean); - } - } - } - - // Pre-collect types from factory nodes - for (const node of concreteFactoryNodes) { - addType(node.name); - const kindTypeParam = kindTypeParameter(node); - if (kindTypeParam) addType(kindTypeParam.constraint); - for (const m of tsMembers(node)) { - addType(tsParamTypeFrom(m.name, m.type)); - addType(m.type.formatTypeScript()); - } - } - for (const v of tsVariants) { - addType(v.tsName); - for (const m of v.members || []) { - addType(m.type.formatTypeScript()); - } - } - // Always needed - for (const t of ["Node", "NodeArray", "KeywordTypeSyntaxKind", "Token", "SourceFile", "KeywordTypeNode", "EndOfFile", "RootedFilePath", "ImportPhaseModifierSyntaxKind", "PathKey", "Statement"]) { - importTypes.add(t); - } - const handWrittenCloneHelpers = api.nodes() - .filter(node => node.handWritten && !isVariantNode(node)) - .map(node => ({ node, helperName: `clone${node.name}Data` })); - // Remove enum types that are imported separately - importTypes.delete("NodeFlags"); - importTypes.delete("SyntaxKind"); - importTypes.delete("TokenFlags"); - - // ── Header ── - out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); - out.push(""); - out.push(`import { NodeFlags } from "#enums/nodeFlags";`); - out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); - out.push(`import { TokenFlags } from "#enums/tokenFlags";`); - - const sortedImports = [...importTypes].sort((a, b) => a.localeCompare(b)); - out.push(`import type {`); - for (const t of sortedImports) { - out.push(` ${t},`); - } - out.push(`} from "./ast.ts";`); - out.push(`import { getChildren, getFirstToken, getLastToken, getTokenPosOfNode } from "./astnav.ts";`); - if (handWrittenCloneHelpers.length > 0) { - out.push(`import {`); - for (const helperName of [...new Set(handWrittenCloneHelpers.map(h => h.helperName))].sort((a, b) => a.localeCompare(b))) { - out.push(` ${helperName},`); - } - out.push(`} from "./utils.ts";`); - } - - // Import hand-written forEachChild functions - const handWrittenForEachChildImports: string[] = []; - for (const node of api.nodes()) { - if (node.handWrittenVisitor && !node.handWritten) { - const members = tsMembers(node); - if (members.filter(m => m.isChild()).length > 0) { - for (const kind of node.kindTypes()) { - handWrittenForEachChildImports.push(`forEachChildOf${kind.name}`); - handWrittenForEachChildImports.push(`yieldEachChildOf${kind.name}`); - } - } - } - } - if (handWrittenForEachChildImports.length > 0) { - out.push(`import {`); - for (const name of handWrittenForEachChildImports.sort((a, b) => a.localeCompare(b))) { - out.push(` ${name},`); - } - out.push(`} from "./visitor.ts";`); - } - - out.push(""); - - // ── NodeObject class ── - const sortedGetters = [...getterNames].sort(); - out.push(`export class NodeObject {`); - out.push(` readonly kind: SyntaxKind;`); - out.push(` flags: NodeFlags = 0 as NodeFlags;`); - out.push(` readonly pos: number = -1;`); - out.push(` readonly end: number = -1;`); - out.push(` parent: Node = undefined!;`); - out.push(` _data: any;`); - out.push(``); - out.push(` constructor(kind: SyntaxKind, data: any) {`); - out.push(` this.kind = kind;`); - out.push(` this._data = data;`); - out.push(` }`); - out.push(``); - - // Getters - for (const name of sortedGetters) { - out.push(` get ${name}(): any { return this._data?.${name}; }`); - } - out.push(``); - - // Methods - out.push(` forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined {`); - out.push(` const fn = forEachChildTable[this.kind];`); - out.push(` return fn ? fn(this._data, visitor, visitArray) : undefined;`); - out.push(` }`); - out.push(``); - out.push(` childrenIter(): Generator {`); - out.push(` const fn = yieldEachChildTable[this.kind];`); - out.push(` return fn ? fn(this._data) : emptyChildrenIter();`); - out.push(` }`); - out.push(``); - out.push(` getSourceFile(): SourceFile {`); - out.push(` let node: Node = this as unknown as Node;`); - out.push(` while (node.parent) node = node.parent;`); - out.push(` return node as unknown as SourceFile;`); - out.push(` }`); - out.push(``); - out.push(` getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number {`); - out.push(` return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment);`); - out.push(` }`); - out.push(``); - out.push(` getFullStart(): number {`); - out.push(` return this.pos;`); - out.push(` }`); - out.push(``); - out.push(` getEnd(): number {`); - out.push(` return this.end;`); - out.push(` }`); - out.push(``); - out.push(` getWidth(sourceFile?: SourceFile): number {`); - out.push(` return this.getEnd() - this.getStart(sourceFile);`); - out.push(` }`); - out.push(``); - out.push(` getFullWidth(): number {`); - out.push(` return this.end - this.pos;`); - out.push(` }`); - out.push(``); - out.push(` getLeadingTriviaWidth(sourceFile?: SourceFile): number {`); - out.push(` return this.getStart(sourceFile) - this.pos;`); - out.push(` }`); - out.push(``); - out.push(` getFullText(sourceFile?: SourceFile): string {`); - out.push(` return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end);`); - out.push(` }`); - out.push(``); - out.push(` getText(sourceFile?: SourceFile): string {`); - out.push(` sourceFile ??= this.getSourceFile();`); - out.push(` return sourceFile.text.substring(this.getStart(sourceFile), this.end);`); - out.push(` }`); - out.push(``); - out.push(` getChildCount(sourceFile?: SourceFile): number {`); - out.push(` return this.getChildren(sourceFile).length;`); - out.push(` }`); - out.push(``); - out.push(` getChildAt(index: number, sourceFile?: SourceFile): Node {`); - out.push(` return this.getChildren(sourceFile)[index];`); - out.push(` }`); - out.push(``); - out.push(` getChildren(sourceFile?: SourceFile): readonly Node[] {`); - out.push(` return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - out.push(` }`); - out.push(``); - out.push(` getFirstToken(sourceFile?: SourceFile): Node | undefined {`); - out.push(` return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - out.push(` }`); - out.push(``); - out.push(` getLastToken(sourceFile?: SourceFile): Node | undefined {`); - out.push(` return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); - out.push(` }`); - out.push(`}`); - out.push(``); - - // ── Utility functions ── - out.push(`function isNodeArray(array: readonly T[]): array is NodeArray {`); - out.push(` return "pos" in array && "end" in array;`); - out.push(`}`); - out.push(``); - out.push(`export function createNodeArray(elements: readonly T[], pos: number = -1, end: number = -1): NodeArray {`); - out.push(` if (isNodeArray(elements)) return elements;`); - out.push(` const arr = elements.slice() as unknown as NodeArray & { pos: number; end: number; };`); - out.push(` arr.pos = pos;`); - out.push(` arr.end = end;`); - out.push(` return arr;`); - out.push(`}`); - out.push(``); - out.push(`export function cloneNode(node: T): T {`); - out.push(` const data = cloneNodeData(node);`); - out.push(` const clone = new NodeObject(node.kind, data);`); - out.push(` (clone as any).flags = node.flags;`); - out.push(` (clone as any).pos = node.pos;`); - out.push(` (clone as any).end = node.end;`); - out.push(` return clone as unknown as T;`); - out.push(`}`); - out.push(``); - - // ── cloneNodeData ── - out.push(`function cloneNodeData(node: Node): any {`); - out.push(` const n = node as any;`); - out.push(` switch (node.kind) {`); - // Schema nodes - for (const node of api.nodes()) { - if (node.handWritten) continue; - if (isVariantNode(node)) continue; - const members = tsMembers(node).filter(m => !isNodeBaseProperty(m)); - if (members.length === 0) continue; - const props = members.map(m => api.uncapitalize(m.name)); - if (props.length === 0) continue; - const syntaxKinds = node.allKinds(); - for (const sk of syntaxKinds) { - out.push(` case ${sk.formatTypeScript()}:`); - } - const propStr = props.map(p => `${p}: n.${p}`).join(", "); - out.push(` return { ${propStr} };`); - } - // Variant nodes - for (const v of tsVariants) { - if (!v.members || v.members.length === 0) continue; - const props = v.members.map(m => api.uncapitalize(m.name)); - const propStr = props.map(p => `${p}: n.${p}`).join(", "); - out.push(` case SyntaxKind.${v.syntaxKind}:`); - out.push(` return { ${propStr} };`); - } - for (const { node, helperName } of handWrittenCloneHelpers) { - for (const sk of node.allKinds()) { - out.push(` case ${sk.formatTypeScript()}:`); - } - out.push(` return ${helperName}(n);`); - } - out.push(` default:`); - out.push(` return undefined;`); - out.push(` }`); - out.push(`}`); - out.push(``); - - // ── forEachChildTable ── - out.push(`type ForEachChildFunction = (data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined) => T | undefined;`); - out.push(``); - out.push(`const forEachChildTable: Record = {`); - // Schema nodes - for (const node of api.nodes()) { - if (node.handWritten) continue; - if (isVariantNode(node)) continue; - const members = tsMembers(node); - const childMembers = members.filter(m => m.isChild()); - if (childMembers.length === 0) continue; - const syntaxKinds = node.allKinds(); - if (node.handWrittenVisitor) { - for (const sk of syntaxKinds) { - out.push(` [${sk.formatTypeScript()}]: forEachChildOf${node.name},`); - } - continue; - } - const visits = childMembers.map(m => { - const propName = api.uncapitalize(m.name); - const listKind = m.listKind; - if (listKind) { - return `visitNodes(cbNode, cbNodes, data.${propName})`; - } - return `visitNode(cbNode, data.${propName})`; - }); - const body = visits.join(" ||\n "); - for (const sk of syntaxKinds) { - out.push(` [${sk.formatTypeScript()}]: (data, cbNode, cbNodes) =>`); - out.push(` ${body},`); - } - } - // Variant nodes - for (const v of tsVariants) { - if (!v.members) continue; - const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); - if (childMembers.length === 0) continue; - if (v.handWrittenVisitor) { - out.push(` [SyntaxKind.${v.syntaxKind}]: forEachChildOf${v.tsName},`); - continue; - } - const visits = childMembers.map(m => { - const propName = api.uncapitalize(m.name); - if (m.listKind) return `visitNodes(cbNode, cbNodes, data.${propName})`; - return `visitNode(cbNode, data.${propName})`; - }); - const body = visits.join(" ||\n "); - out.push(` [SyntaxKind.${v.syntaxKind}]: (data, cbNode, cbNodes) =>`); - out.push(` ${body},`); - } - // SourceFile is handWritten so we add its forEachChild entry manually - out.push(` [SyntaxKind.SourceFile]: (data, cbNode, cbNodes) =>`); - out.push(` visitNodes(cbNode, cbNodes, data.statements) ||`); - out.push(` visitNode(cbNode, data.endOfFileToken),`); - out.push(`};`); - out.push(``); - - // ── yieldEachChildTable ── - out.push(`type YieldEachChildFunction = (data: any) => Generator;`); - out.push(``); - out.push(`function* emptyChildrenIter(): Generator {`); - out.push(` return undefined;`); - out.push(`}`); - out.push(``); - out.push(`const yieldEachChildTable: Record = {`); - // Schema nodes - for (const node of api.nodes()) { - if (node.handWritten) continue; - if (isVariantNode(node)) continue; - const members = tsMembers(node); - const childMembers = members.filter(m => m.isChild()); - if (childMembers.length === 0) continue; - const syntaxKinds = node.allKinds(); - if (node.handWrittenVisitor) { - for (const sk of syntaxKinds) { - out.push(` [${sk.formatTypeScript()}]: yieldEachChildOf${node.name},`); - } - continue; - } - const visits = childMembers.map(m => { - const propName = api.uncapitalize(m.name); - const listKind = m.listKind; - if (listKind) { - const visit = `for (const n of data.${propName}) { const res = yield n; if (res) return res; }`; - return m.optional ? `if (data.${propName}) { ${visit} }` : visit; - } - return `if (data.${propName}) { const res = yield data.${propName}; if (res) return res; }`; - }); - const body = visits.join("\n "); - for (const sk of syntaxKinds) { - out.push(` [${sk.formatTypeScript()}]: function* (data) {`); - out.push(` ${body}`); - out.push(` },`); - } - } - // Variant nodes - for (const v of tsVariants) { - if (!v.members) continue; - const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); - if (childMembers.length === 0) continue; - if (v.handWrittenVisitor) { - out.push(` [SyntaxKind.${v.syntaxKind}]: yieldEachChildOf${v.tsName},`); - continue; - } - const visits = childMembers.map(m => { - const propName = api.uncapitalize(m.name); - const listKind = m.listKind; - if (listKind) { - const visit = `for (const n of data.${propName}) { const res = yield n; if (res) return res; }`; - return m.optional ? `if (data.${propName}) { ${visit} }` : visit; - } - return `if (data.${propName}) { const res = yield data.${propName}; if (res) return res; }`; - }); - const body = visits.join("\n "); - out.push(` [SyntaxKind.${v.syntaxKind}]: function* (data) {`); - out.push(` ${body}`); - out.push(` },`); - } - // SourceFile is handWritten so we add its yieldEachChild entry manually - out.push(` [SyntaxKind.SourceFile]: function* (data) {`); - out.push(` for (const n of data.statements) { const res = yield n; if (res) return res; }`); - out.push(` const res = yield data.endOfFileToken; if (res) return res;`); - out.push(` },`); - out.push(`};`); - out.push(``); - - // ── visitNode / visitNodes ── - out.push(`function visitNode(cbNode: (node: Node) => T, node: Node | undefined): T | undefined {`); - out.push(` return node ? cbNode(node) : undefined;`); - out.push(`}`); - out.push(``); - out.push(`function visitNodes(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined {`); - out.push(` if (!nodes) return undefined;`); - out.push(` if (cbNodes) return cbNodes(nodes);`); - out.push(` for (const node of nodes) {`); - out.push(` const result = cbNode(node);`); - out.push(` if (result) return result;`); - out.push(` }`); - out.push(` return undefined;`); - out.push(`}`); - out.push(``); - - // ── Create functions (schema nodes) ── - const createNames: string[] = []; - for (const node of concreteFactoryNodes) { - const iface = node.name; - const members = factoryMembers(node); - const funcName = `create${iface}`; - createNames.push(funcName); - const kindTypeParam = kindTypeParameter(node); - - // Build params - const paramParts: string[] = []; - if (kindTypeParam) { - paramParts.push(`kind: ${kindTypeParam.name}`); - } - - // First pass: determine which members are "required" (cannot be omitted). - // A member is required if it is not optional and not a bool. - const isRequired = members.map(m => { - if (m.optional) return false; - const mt = m.type; - if (!m.isChild() && mt.kind === "primitive" && mt.name === "bool") return false; - return true; - }); - - // Find the index of the last required member. - let lastRequiredIdx = -1; - for (let i = members.length - 1; i >= 0; i--) { - if (isRequired[i]) { - lastRequiredIdx = i; - break; - } - } - - for (let mi = 0; mi < members.length; mi++) { - const m = members[mi]; - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - const paramType = tsParamTypeFrom(m.name, m.type); - const memberType = m.type; - const isBool = !m.isChild() && memberType.kind === "primitive" && memberType.name === "bool"; - - if (isBool) { - if (mi < lastRequiredIdx) { - // Required params follow — use default value instead of optional - paramParts.push(`${paramName}: ${paramType} = false`); - } - else { - paramParts.push(`${paramName}?: ${paramType}`); - } - } - else if (m.optional) { - if (mi < lastRequiredIdx) { - // Required params follow — cannot use ? syntax - paramParts.push(`${paramName}: ${paramType} | undefined`); - } - else { - paramParts.push(`${paramName}?: ${paramType}`); - } - } - else { - paramParts.push(`${paramName}: ${paramType}`); - } - } - - // Build data object (includes ALL tsMembers, not just factory params) - const allMembers = tsMembers(node); - const dataParts: string[] = []; - const nodeProps: { propName: string; paramName: string; }[] = []; - for (const m of allMembers) { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - const listKind = m.listKind; - const isParam = members.includes(m); - // Members inherited from NodeBase (e.g. Flags) are class-level - // properties on NodeObject, not data members. - if (isNodeBaseProperty(m)) { - if (isParam) { - nodeProps.push({ propName, paramName }); - } - continue; - } - if (listKind === "NodeList" || listKind === "ModifierList") { - if (isParam) { - if (m.optional) { - dataParts.push(`${propName}: ${paramName} ? createNodeArray(${paramName}) : undefined`); - } - else { - dataParts.push(`${propName}: createNodeArray(${paramName})`); - } - } - } - else { - if (isParam) { - if (propName === paramName) { - dataParts.push(propName); // shorthand - } - else { - dataParts.push(`${propName}: ${paramName}`); - } - } - } - } - - const paramsStr = paramParts.join(", "); - const dataStr = dataParts.length > 0 - ? `{\n ${dataParts.join(",\n ")},\n }` - : "undefined"; - const genericParamStr = kindTypeParam - ? `<${kindTypeParam.name} extends ${kindTypeParam.constraint}>` - : ""; - const returnType = kindTypeParam - ? `${iface}<${kindTypeParam.name}>` - : iface; - const kindExpr = kindTypeParam ? "kind" : `SyntaxKind.${node.syntaxKindName}`; - - out.push(`export function ${funcName}${genericParamStr}(${paramsStr}): ${returnType} {`); - if (nodeProps.length > 0) { - out.push(` const node = new NodeObject(${kindExpr}, ${dataStr}) as unknown as ${returnType};`); - for (const { propName, paramName } of nodeProps) { - out.push(` (node as any).${propName} = ${paramName};`); - } - out.push(` return node;`); - } - else { - out.push(` return new NodeObject(${kindExpr}, ${dataStr}) as unknown as ${returnType};`); - } - out.push(`}`); - out.push(``); - } - - // ── Create functions (variant nodes) ── - for (const v of tsVariants) { - const funcName = `create${v.tsName}`; - createNames.push(funcName); - if (!v.members || v.members.length === 0) { - out.push(`export function ${funcName}(): ${v.tsName} {`); - out.push(` return new NodeObject(SyntaxKind.${v.syntaxKind}, undefined) as unknown as ${v.tsName};`); - out.push(`}`); - } - else { - const paramParts: string[] = []; - const dataParts: string[] = []; - for (const m of v.members) { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - const paramType = tsParamTypeFrom(m.name, m.type); - if (m.optional) { - paramParts.push(`${paramName}: ${paramType} | undefined`); - } - else { - paramParts.push(`${paramName}: ${paramType}`); - } - if (m.listKind === "NodeList") { - if (m.optional) { - dataParts.push(`${propName}: ${paramName} ? createNodeArray(${paramName}) : undefined`); - } - else { - dataParts.push(`${propName}: createNodeArray(${paramName})`); - } - } - else if (propName === paramName) { - dataParts.push(propName); - } - else { - dataParts.push(`${propName}: ${paramName}`); - } - } - const paramsStr = paramParts.join(", "); - const dataStr = `{\n ${dataParts.join(",\n ")},\n }`; - out.push(`export function ${funcName}(${paramsStr}): ${v.tsName} {`); - out.push(` return new NodeObject(SyntaxKind.${v.syntaxKind}, ${dataStr}) as unknown as ${v.tsName};`); - out.push(`}`); - } - out.push(``); - } - - // ── Update functions (schema nodes) ── - for (const node of concreteFactoryNodes) { - const iface = node.name; - const members = factoryMembers(node); - // Update params: all child members - const updateChildMembers = members.filter(m => m.isChild()); - if (updateChildMembers.length === 0) continue; - - const funcName = `update${iface}`; - const paramParts = [`node: ${iface}`]; - - // Determine which update child members are required - const updateIsRequired = updateChildMembers.map(m => !m.optional); - let updateLastRequiredIdx = -1; - for (let i = updateChildMembers.length - 1; i >= 0; i--) { - if (updateIsRequired[i]) { - updateLastRequiredIdx = i; - break; - } - } - - for (let mi = 0; mi < updateChildMembers.length; mi++) { - const m = updateChildMembers[mi]; - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - const paramType = tsParamTypeFrom(m.name, m.type); - if (m.optional) { - if (mi < updateLastRequiredIdx) { - paramParts.push(`${paramName}: ${paramType} | undefined`); - } - else { - paramParts.push(`${paramName}?: ${paramType}`); - } - } - else { - paramParts.push(`${paramName}: ${paramType}`); - } - } - - // Comparison - const comparisons = updateChildMembers.map(m => { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - return `node.${propName} !== ${paramName}`; - }); - - // Create call args (all factory members, using params for update children, node.prop for rest) - const updateChildNames = new Set(updateChildMembers.map(m => m.name)); - const createArgs = members.map(m => { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - if (updateChildNames.has(m.name)) return paramName; - return `node.${propName}`; - }); - - out.push(`export function ${funcName}(${paramParts.join(", ")}): ${iface} {`); - out.push(` return ${comparisons.join(" || ")} ? create${iface}(${createArgs.join(", ")}) : node;`); - out.push(`}`); - out.push(``); - } - - // ── Update functions (variant nodes) ── - for (const v of tsVariants) { - if (!v.members || v.members.length === 0) continue; - const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); - if (childMembers.length === 0) continue; - - const paramParts = [`node: ${v.tsName}`]; - for (const m of childMembers) { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - const paramType = tsParamTypeFrom(m.name, m.type); - if (m.optional) { - paramParts.push(`${paramName}: ${paramType} | undefined`); - } - else { - paramParts.push(`${paramName}: ${paramType}`); - } - } - - const comparisons = childMembers.map(m => { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - return `node.${propName} !== ${paramName}`; - }); - - const createArgs = (v.members || []).map(m => { - const propName = api.uncapitalize(m.name); - const paramName = tsParamName(propName); - if (m.type.baseKind() !== "node" && m.type.baseKind() !== "list") return `node.${propName}`; - return paramName; - }); - - out.push(`export function update${v.tsName}(${paramParts.join(", ")}): ${v.tsName} {`); - out.push(` return ${comparisons.join(" || ")} ? create${v.tsName}(${createArgs.join(", ")}) : node;`); - out.push(`}`); - out.push(``); - } - - // ── createSourceFile (custom generated implementation — SourceFile is handWritten in schema) ── - out.push(`export function createSourceFile(statements: readonly Statement[], endOfFileToken: EndOfFile, text: string, fileName: RootedFilePath, path: PathKey): SourceFile {`); - out.push(` return new NodeObject(SyntaxKind.SourceFile, {`); - out.push(` statements: createNodeArray(statements),`); - out.push(` endOfFileToken,`); - out.push(` text,`); - out.push(` originalText: text,`); - out.push(` spanMap: undefined,`); - out.push(` contentMapper: undefined,`); - out.push(` virtualFileName: undefined,`); - out.push(` diagnosticDirectives: undefined,`); - out.push(` fileName,`); - out.push(` path,`); - out.push(` }) as unknown as SourceFile;`); - out.push(`}`); - out.push(``); - - out.push(`function cloneSourceFileWithChanges(source: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile {`); - out.push(` return new NodeObject(SyntaxKind.SourceFile, {`); - out.push(` ...cloneSourceFileData(source),`); - out.push(` statements: createNodeArray(statements),`); - out.push(` endOfFileToken,`); - out.push(` }) as unknown as SourceFile;`); - out.push(`}`); - out.push(``); - - // ── updateSourceFile (hand-written in schema) ── - out.push(`export function updateSourceFile(node: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile {`); - out.push(` return node.statements !== statements || node.endOfFileToken !== endOfFileToken`); - out.push(` ? cloneSourceFileWithChanges(node, statements, endOfFileToken)`); - out.push(` : node;`); - out.push(`}`); - out.push(``); - - // Clean up - while (out.length > 0 && out[out.length - 1] === "") out.pop(); - out.push(""); - - let result = out.join("\n"); - result = result.replace(/\n/g, "\r\n"); - return result; -} - -// ──────────────────────────────────────────────────────────────────────────── -// Code generation: is.ts -// ──────────────────────────────────────────────────────────────────────────── - -function generateIsGenerated(): string { - const out: string[] = []; - const importTypes = new Set(); - - // ── Simple is* guards from schema nodes ── - const guards: { funcName: string; typeName: string; kindChecks: string[]; kindAliasConstraint?: string; }[] = []; - - for (const node of api.nodes()) { - if (isVariantNode(node)) continue; - - const typeName = node.name; - const funcName = `is${typeName}`; - // If the node has a type parameter constrained to a kind alias, use the kind-level guard. - const kindParam = node.typeParameters.find(tp => tp.constraint && api.hasKindAlias(tp.constraint)); - const kindAliasConstraint = kindParam?.constraint; - guards.push({ funcName, typeName, kindChecks: syntaxKindChecksForNode(node), kindAliasConstraint }); - importTypes.add(typeName); - } - - // Variant node guards - for (const v of tsVariants) { - const funcName = `is${v.tsName}`; - guards.push({ funcName, typeName: v.tsName, kindChecks: [`SyntaxKind.${v.syntaxKind}`] }); - importTypes.add(v.tsName); - } - - // Always needed - importTypes.add("Node"); - - // ── Composite guards from unions ── - interface CompositeGuard { - funcName: string; - typeName: string; - body: string; - } - const compositeGuards: CompositeGuard[] = []; - - // Build a map from instantiation alias name → SyntaxKind name. - // E.g. "AbstractKeyword" → "AbstractKeyword", "TrueLiteral" → "TrueKeyword" - const instantiationAliasToKind = new Map(); - for (const node of api.nodes()) { - for (const { name: aliasName, typeArg } of node.instantiationAliases) { - // typeArg is either a SyntaxKind name or a kind alias name - if (!api.hasKindAlias(typeArg)) { - instantiationAliasToKind.set(aliasName, typeArg); - } - } - } - - // Recursively resolve union members to SyntaxKind checks. - // Returns null if any member cannot be resolved to concrete kinds. - function resolveUnionKindChecks(members: readonly string[]): string[] | null { - const checks: string[] = []; - for (const m of members) { - const node = api.getNode(m); - if (node) { - checks.push(...syntaxKindChecksForNode(node)); - continue; - } - const variant = tsVariants.find(v => v.tsName === m); - if (variant) { - checks.push(`SyntaxKind.${variant.syntaxKind}`); - continue; - } - // Check if it's a Token instantiation alias (e.g. AbstractKeyword, TrueLiteral) - const kindName = instantiationAliasToKind.get(m); - if (kindName) { - checks.push(`SyntaxKind.${kindName}`); - continue; - } - // Recurse into sub-aliases - const subAlias = api.nodeAliases().find(a => a.name === m); - if (subAlias?.isUnion) { - const sub = resolveUnionKindChecks(subAlias.unionMemberNames); - if (sub === null) return null; - checks.push(...sub); - continue; - } - // Check if it's a kind alias (e.g. ModifierSyntaxKind) — expand to SyntaxKind checks - if (api.hasKindAlias(m)) { - const kindMembers = api.expandKindAliasMembers(m); - checks.push(...kindMembers.map(k => k.formatTypeScript())); - continue; - } - // Unresolvable member (e.g. Expression, Statement) — can't enumerate kinds - return null; - } - return checks; - } - - for (const alias of api.nodeAliases()) { - if (!alias.isUnion) continue; - const members = alias.unionMemberNames; - if (members.length === 0) continue; - - const typeName = alias.name; - const funcName = `is${typeName}`; - if (guards.some(g => g.funcName === funcName)) continue; - - const kindChecksRaw = resolveUnionKindChecks(members); - - if (kindChecksRaw === null || kindChecksRaw.length === 0) { - // Union contains unresolvable members (e.g. Expression) — skip, - // must be hand-written in is.ts - continue; - } - - importTypes.add(typeName); - const kindChecks = [...new Set(kindChecksRaw)]; - let body: string; - - // Build conditions: delegate to kind guard for kind alias members, direct checks for others - const kindAliasMembers = members.filter(m => api.hasKindAlias(m)); - if (kindAliasMembers.length > 0) { - // Collect direct SyntaxKind checks for non-kind-alias members - const nonKindAliasMembers = members.filter(m => !api.hasKindAlias(m)); - const directChecks = nonKindAliasMembers.length > 0 - ? resolveUnionKindChecks(nonKindAliasMembers) ?? [] - : []; - const conditions: string[] = [ - ...kindAliasMembers.map(m => `${kindGuardName(m)}(kind)`), - ...[...new Set(directChecks)].map(k => `kind === ${k}`), - ]; - body = `const kind = node.kind;\n return ${conditions.join(" || ")};`; - } - else if (kindChecks.length <= 3) { - body = `return ${kindChecks.map(k => `node.kind === ${k}`).join(" || ")};`; - } - else { - body = `const kind = node.kind;\n return ${kindChecks.map(k => `kind === ${k}`).join(" || ")};`; - } - - compositeGuards.push({ funcName, typeName, body }); - } - - // ── Kind alias guards (SyntaxKind-level) ── - // Generate `is(kind: SyntaxKind): kind is ` for each enumerated kind alias union. - // Range-based aliases generate `is(kind: SyntaxKind): boolean` with range checks. - // Function names drop "Syntax" from the kind alias name: isTriviaSyntaxKind → isTriviaKind. - - interface KindAliasGuard { - funcName: string; - typeName: string; - conditions: string[]; - } - const kindAliasGuards: KindAliasGuard[] = []; - interface RangeKindAliasGuard { - funcName: string; - first: string; - last: string; - } - const rangeKindAliasGuards: RangeKindAliasGuard[] = []; - for (const guard of api.kindGuards()) { - const { guardName: funcName } = guard; - // Skip if a node-level guard with the same name already exists - if (guards.some(g => g.funcName === funcName)) continue; - if (compositeGuards.some(g => g.funcName === funcName)) continue; - - if (guard.type === "range") { - rangeKindAliasGuards.push({ funcName, first: guard.first, last: guard.last }); - } - else { - importTypes.add(guard.aliasName); - const conditions = guard.members.map(m => { - if (api.hasKindAlias(m)) return `${kindGuardName(m)}(kind)`; - return `kind === SyntaxKind.${m}`; - }); - kindAliasGuards.push({ funcName, typeName: guard.aliasName, conditions }); - } - } - - // ── Token instantiation alias guards ── - // For Token instantiation aliases like `BinaryOperatorToken = Token`, - // generate `is(node: Node): node is ` using the kind-level guard. - // Also generate guards for single-kind Token aliases (like EndOfFile, DotToken, etc.) - // Token aliases whose underlying kind alias is range-based return boolean (not a type predicate). - const rangeKindAliasNames = new Set(rangeKindAliasGuards.map(g => g.funcName)); - interface TokenAliasGuard { - funcName: string; - typeName: string; - body: string; - isRangeBased: boolean; - } - const tokenAliasGuards: TokenAliasGuard[] = []; - for (const node of api.nodes()) { - for (const { name: aliasName, typeArg } of node.instantiationAliases) { - const funcName = `is${aliasName}`; - // Skip if already generated - if (guards.some(g => g.funcName === funcName)) continue; - if (compositeGuards.some(g => g.funcName === funcName)) continue; - - if (api.hasKindAlias(typeArg)) { - const isRangeBased = rangeKindAliasNames.has(kindGuardName(typeArg)); - if (!isRangeBased) importTypes.add(aliasName); - // Multi-kind token alias: use the kind-level guard - tokenAliasGuards.push({ funcName, typeName: aliasName, body: `return ${kindGuardName(typeArg)}(node.kind);`, isRangeBased }); - } - else { - importTypes.add(aliasName); - // Single-kind token alias: direct SyntaxKind check - tokenAliasGuards.push({ funcName, typeName: aliasName, body: `return node.kind === SyntaxKind.${typeArg};`, isRangeBased: false }); - } - } - } - - // ── Build output ── - out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); - out.push(``); - out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); - const sortedImports = [...importTypes].sort((a, b) => a.localeCompare(b)); - out.push(`import type {`); - for (const t of sortedImports) { - out.push(` ${t},`); - } - out.push(`} from "./ast.ts";`); - out.push(`import type { NodeHandle as AsyncNodeHandle } from "../api/async/api.ts";`); - out.push(`import type { NodeHandle as SyncNodeHandle } from "../api/sync/api.ts";`); - out.push(`type NodeHandleLike = { kind: SyntaxKind; resolve(...args: any): any; };`); - // Note that we must `& T` to satisfy the requirements of a type guard, and it must be _second_ so the narrowed `resolve` overload from the specialization is selected (order matters) - out.push(`type SpecializeNodeHandle, U extends Node> = T extends AsyncNodeHandle ? AsyncNodeHandle & T : SyncNodeHandle & T;`); - out.push(``); - - // ── Simple guards ── - for (const g of guards) { - out.push(`export function ${g.funcName}(node: Node): node is ${g.typeName} {`); - if (g.kindAliasConstraint) { - // Use the kind-level guard for nodes with a kind alias constraint - out.push(` return ${kindGuardName(g.kindAliasConstraint)}(node.kind);`); - } - else if (g.kindChecks.length === 1) { - out.push(` return node.kind === ${g.kindChecks[0]};`); - } - else { - out.push(` switch (node.kind) {`); - for (const kindCheck of g.kindChecks) { - out.push(` case ${kindCheck}:`); - } - out.push(` return true;`); - out.push(` default:`); - out.push(` return false;`); - out.push(` }`); - } - out.push(`}`); - out.push(``); - out.push(`export declare namespace ${g.funcName} {`); - out.push(` function Handle>(node: T): node is SpecializeNodeHandle;`); - out.push(`}`); - out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); - out.push(``); - } - - // ── Composite guards ── - for (const g of compositeGuards) { - out.push(`export function ${g.funcName}(node: Node): node is ${g.typeName} {`); - out.push(` ${g.body}`); - out.push(`}`); - out.push(``); - out.push(`export declare namespace ${g.funcName} {`); - out.push(` function Handle>(node: T): node is SpecializeNodeHandle;`); - out.push(`}`); - out.push(``); - out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); - out.push(``); - } - - // ── Kind alias guards ── - for (const g of kindAliasGuards) { - out.push(`export function ${g.funcName}(kind: SyntaxKind): kind is ${g.typeName} {`); - if (g.conditions.length === 1) { - out.push(` return ${g.conditions[0]};`); - } - else { - out.push(` return ${g.conditions.join("\n || ")};`); - } - out.push(`}`); - out.push(``); - } - - // ── Range-based kind alias guards ── - for (const g of rangeKindAliasGuards) { - out.push(`export function ${g.funcName}(kind: SyntaxKind): boolean {`); - out.push(` return kind >= SyntaxKind.${g.first} && kind <= SyntaxKind.${g.last};`); - out.push(`}`); - out.push(``); - } - - // ── Token alias guards ── - for (const g of tokenAliasGuards) { - const returnType = g.isRangeBased ? `boolean` : `node is ${g.typeName}`; - const handleReturnType = g.isRangeBased ? `boolean` : `node is SpecializeNodeHandle`; - out.push(`export function ${g.funcName}(node: Node): ${returnType} {`); - out.push(` ${g.body}`); - out.push(`}`); - out.push(``); - out.push(`export declare namespace ${g.funcName} {`); - out.push(` function Handle>(node: T): ${handleReturnType};`); - out.push(`}`); - out.push(``); - out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); - out.push(``); - } - - while (out.length > 0 && out[out.length - 1] === "") out.pop(); - out.push(""); - - let result = out.join("\n"); - result = result.replace(/\n/g, "\r\n"); - return result; -} - -// ──────────────────────────────────────────────────────────────────────────── -// Code generation: visitor.generated.ts -// ──────────────────────────────────────────────────────────────────────────── - -function generateVisitor(): string { - const out: string[] = []; - const entries = visitorEntries(); - const typeImports = new Set(["Node", "NodeArray"]); - const factoryImports = new Set(["createNodeArray"]); - const isImports = new Set(); - const handWrittenImports = new Set(); - - for (const entry of entries) { - typeImports.add(entry.tsName); - if (entry.handWrittenVisitor) { - handWrittenImports.add(`visitEachChildOf${entry.tsName}`); - } - else { - factoryImports.add(entry.updateName); - } - for (const member of entry.members) { - const { guardName } = visitorVisitExpression(member); - if (guardName) isImports.add(guardName); - } - } - - out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); - out.push(""); - out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); - out.push(`import type {`); - for (const typeName of [...typeImports].sort((a, b) => a.localeCompare(b))) { - out.push(` ${typeName},`); - } - out.push(`} from "./ast.ts";`); - out.push(`import {`); - for (const name of [...factoryImports].sort((a, b) => a.localeCompare(b))) { - out.push(` ${name},`); - } - out.push(`} from "./factory.generated.ts";`); - out.push(`import {`); - for (const name of [...isImports].sort((a, b) => a.localeCompare(b))) { - out.push(` ${name},`); - } - out.push(`} from "./is.ts";`); - if (handWrittenImports.size > 0) { - out.push(`import {`); - for (const name of [...handWrittenImports].sort((a, b) => a.localeCompare(b))) { - out.push(` ${name},`); - } - out.push(`} from "./visitor.ts";`); - } - out.push(""); - out.push(`/**`); - out.push(` * A callback that receives a node and returns a visited node (or undefined to remove it).`); - out.push(` */`); - out.push(`export type Visitor = (node: Node) => Node | undefined;`); - out.push(""); - out.push(`/**`); - out.push(` * Visits a Node using the supplied visitor, possibly returning a new Node in its place.`); - out.push(` *`); - out.push(` * - If the input node is undefined, then the output is undefined.`); - out.push(` * - If the visitor returns undefined, then the output is undefined.`); - out.push(` * - If the output node is not undefined, then it will satisfy the test function.`); - out.push(` * - In order to obtain a return type that is more specific than \`Node\`, a test`); - out.push(` * function must be provided, and that function must be a type predicate.`); - out.push(` *`); - out.push(` * @param node The Node to visit.`); - out.push(` * @param visitor The callback used to visit the Node.`); - out.push(` * @param test A callback to execute to verify the Node is valid.`); - out.push(` */`); - out.push(`export function visitNode(`); - out.push(` node: TIn,`); - out.push(` visitor: Visitor,`); - out.push(` test: (node: Node) => node is TOut,`); - out.push(`): TOut | (TIn & undefined);`); - out.push(`/**`); - out.push(` * Visits a Node using the supplied visitor, possibly returning a new Node in its place.`); - out.push(` *`); - out.push(` * - If the input node is undefined, then the output is undefined.`); - out.push(` * - If the visitor returns undefined, then the output is undefined.`); - out.push(` *`); - out.push(` * @param node The Node to visit.`); - out.push(` * @param visitor The callback used to visit the Node.`); - out.push(` * @param test An optional callback to execute to verify the Node is valid.`); - out.push(` */`); - out.push(`export function visitNode(`); - out.push(` node: TIn,`); - out.push(` visitor: Visitor,`); - out.push(` test?: (node: Node) => boolean,`); - out.push(`): Node | (TIn & undefined);`); - out.push(`export function visitNode(node: Node | undefined, visitor: Visitor, test?: (node: Node) => boolean): Node | undefined {`); - out.push(` if (node === undefined) return undefined;`); - out.push(` const visited = visitor(node);`); - out.push(` if (visited !== undefined && test !== undefined && !test(visited)) {`); - out.push(` throw new Error("Visited node failed test assertion.");`); - out.push(` }`); - out.push(` return visited;`); - out.push(`}`); - out.push(""); - out.push(`/**`); - out.push(` * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place.`); - out.push(` *`); - out.push(` * - If the input node array is undefined, the output is undefined.`); - out.push(` * - If the visitor returns undefined for a node, that node is dropped from the result.`); - out.push(` */`); - out.push(`export function visitNodes(nodes: NodeArray, visitor: Visitor): NodeArray;`); - out.push(`export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined;`); - out.push(`export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined {`); - out.push(` if (nodes === undefined) return undefined;`); - out.push(` const updated = visitNodesArray(nodes, visitor);`); - out.push(` if (updated === nodes) {`); - out.push(` return nodes;`); - out.push(` }`); - out.push(` return createNodeArray(updated, nodes.pos, nodes.end);`); - out.push(`}`); - out.push(""); - out.push(`export function visitNodesArray(nodes: readonly T[], visitor: Visitor): readonly T[];`); - out.push(`export function visitNodesArray(nodes: readonly T[] | undefined, visitor: Visitor): readonly T[] | undefined;`); - out.push(`export function visitNodesArray(nodes: readonly Node[] | undefined, visitor: Visitor): readonly Node[] | undefined {`); - out.push(` if (nodes === undefined) return undefined;`); - out.push(` let updated: Node[] | undefined;`); - out.push(` for (let i = 0; i < nodes.length; i++) {`); - out.push(` const node = nodes[i];`); - out.push(` const visited = visitor(node);`); - out.push(` if (updated) {`); - out.push(` if (visited) updated.push(visited);`); - out.push(` }`); - out.push(` else if (visited !== node) {`); - out.push(` updated = [];`); - out.push(` for (let j = 0; j < i; j++) updated.push(nodes[j]);`); - out.push(` if (visited) updated.push(visited);`); - out.push(` }`); - out.push(` }`); - out.push(` return updated ?? nodes;`); - out.push(`}`); - out.push(""); - out.push(`/**`); - out.push(` * Visits each child of a Node using the supplied visitor, possibly returning a new Node of the same kind in its place.`); - out.push(` *`); - out.push(` * @param node The Node whose children will be visited.`); - out.push(` * @param visitor The callback used to visit each child.`); - out.push(` * @returns The original node if no children changed, or a new node with visited children.`); - out.push(` */`); - out.push(`export function visitEachChild(node: T, visitor: Visitor): T;`); - out.push(`export function visitEachChild(node: T | undefined, visitor: Visitor): T | undefined;`); - out.push(`export function visitEachChild(node: Node | undefined, visitor: Visitor): Node | undefined {`); - out.push(` if (node === undefined) return undefined;`); - out.push(` const fn = visitEachChildTable[node.kind];`); - out.push(` return fn ? fn(node, visitor) : node;`); - out.push(`}`); - out.push(""); - out.push(`type VisitEachChildFunction = (node: any, visitor: Visitor) => Node;`); - out.push(""); - out.push(`const visitEachChildTable: Record = {`); - for (const entry of entries) { - if (entry.handWrittenVisitor) { - out.push(` [SyntaxKind.${entry.syntaxKind}]: visitEachChildOf${entry.tsName},`); - } - else { - out.push(` [SyntaxKind.${entry.syntaxKind}]: (node: ${entry.tsName}, visitor: Visitor): ${entry.tsName} => {`); - const argNames: string[] = []; - for (const member of entry.members) { - const propName = api.uncapitalize(member.name); - const localName = `_${propName}`; - const { expression } = visitorVisitExpression(member); - out.push(` const ${localName} = ${expression};`); - argNames.push(localName); - } - out.push(` return ${entry.updateName}(node, ${argNames.join(", ")});`); - out.push(` },`); - } - } - out.push(`};`); - out.push(""); - while (out.length > 0 && out[out.length - 1] === "") out.pop(); - out.push(""); - - let result = out.join("\n"); - result = result.replace(/\n/g, "\r\n"); - return result; -} - -// ──────────────────────────────────────────────────────────────────────────── -// Main -// ──────────────────────────────────────────────────────────────────────────── - -function writeAndFormat(filePath: string, generate: () => string, force: boolean) { - const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); - if (generated.isCurrent(force)) return; - generated.write(generate()); - formatFilesSync([filePath]); - generated.markCurrent(); - console.log(`Generated ${filePath}`); -} - -export default function main(force = false) { - console.log("Generating TS AST code..."); - - const factoryPath = path.join(ROOT, "packages/typescript/src/ast/factory.generated.ts"); - const isGenPath = path.join(ROOT, "packages/typescript/src/ast/is.generated.ts"); - const astGenPath = path.join(ROOT, "packages/typescript/src/ast/ast.generated.ts"); - const visitorPath = path.join(ROOT, "packages/typescript/src/ast/visitor.generated.ts"); - - writeAndFormat(astGenPath, generateAstGenerated, force); - writeAndFormat(factoryPath, generateFactory, force); - writeAndFormat(isGenPath, generateIsGenerated, force); - writeAndFormat(visitorPath, generateVisitor, force); -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - main(parseGeneratorArgs({}).force); -} +/** + * Schema-driven TypeScript AST code generator. + * Reads tools/scripts/tsc/ast.json and produces: + * - packages/typescript/src/ast/ast.generated.ts + * - packages/typescript/src/ast/factory.generated.ts + * - packages/typescript/src/ast/is.generated.ts + * - packages/typescript/src/ast/visitor.generated.ts + * + * Usage: node tools/scripts/tsc/generate-ts-ast.ts + */ + +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import { GeneratedFile } from "../gen/generatedFile.mts"; +import { + formatFilesSync, + parseGeneratorArgs, + repoRoot as ROOT, +} from "../gen/utils.mts"; +import type { + MemberInfo, + NodeType, + Type, +} from "./schema.ts"; +import { + api, + kindGuardName, +} from "./schema.ts"; + +// ──────────────────────────────────────────────────────────────────────────── +// Load schema +// ──────────────────────────────────────────────────────────────────────────── + +// TS members only (filter noTS/inherited issues) +function tsMembers(node: NodeType): MemberInfo[] { + return node.members.filter(member => !member.isKindParam() && !member.noTS); +} + +function isInheritedFromTsBase(member: MemberInfo): boolean { + return member.inherited && !!member.inheritedField && !member.inheritedField.noTS; +} + +// NodeBase fields (e.g. Flags) are class-level properties on NodeObject, +// not data members stored in _data. +const nodeBaseFieldNames = new Set( + api.bases().find(b => b.name === "NodeBase")?.fields.filter(f => !f.noTS).map(f => f.name) ?? [], +); + +function isNodeBaseProperty(member: MemberInfo): boolean { + return member.inherited && nodeBaseFieldNames.has(member.name); +} + +function tsInterfaceMembers(node: NodeType): MemberInfo[] { + return tsMembers(node).filter(member => !isInheritedFromTsBase(member) || member.hasTypeScriptOverride()); +} + +// ──────────────────────────────────────────────────────────────────────────── +// TS-specific naming and typing +// ──────────────────────────────────────────────────────────────────────────── + +// The JSDoc comment `text` member is stored as a raw []string in Go, but the +// encoder joins it into a single string and both the RemoteNode API and the +// local factory expose it as a scalar string. Collapse just this member to its +// element type in the generated TS. This is intentionally keyed on the property +// name rather than on "raw list of a primitive" so the exception stays narrow +// and explicit; `text` is the only such member. +function collapsedTextType(name: string, type: Type): string | undefined { + if (name === "text" && type.kind === "list" && type.listKind === "raw") { + return type.elementType.formatTypeScript(); + } + return undefined; +} + +function tsParamTypeFrom(name: string, type: Type): string { + return collapsedTextType(name, type) + ?? (type.kind === "list" ? type.raw().formatTypeScript() : type.formatTypeScript()); +} + +function tsParamName(propName: string): string { + if (propName === "arguments") return "arguments_"; + return propName; +} + +// Get factory members in schema order. +function factoryMembers(node: NodeType): MemberInfo[] { + return tsMembers(node).filter(m => !m.noFactory); +} + +function factoryNodes(): NodeType[] { + return api.nodes().filter(node => !node.handWritten && !isVariantNode(node)); +} + +function kindTypeParameter(node: NodeType): { name: string; constraint: string; } | undefined { + const kindType = node.kindType; + if (kindType.kind !== "typeParameter") return undefined; + return { name: kindType.name, constraint: kindType.constraint.formatTypeScript() }; +} + +function isVariantNode(node: NodeType): boolean { + return node.isMultiKind() && node.kindType.kind !== "typeParameter"; +} + +function syntaxKindChecksForNode(node: NodeType): string[] { + return node.allKinds().map(k => k.formatTypeScript()); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Bases for ast.generated.ts +// ──────────────────────────────────────────────────────────────────────────── + +const goOnlyBases = new Set( + api.bases().filter(base => base.isGoOnly()).map(base => base.key), +); + +// Expand goOnly bases transitively: when a goOnly base appears in an extends +// list, replace it with its own non-goOnly extends (recursively). +function expandTsExtends(exts: string[]): string[] { + const result: string[] = []; + const seen = new Set(); + + function expand(bases: string[]) { + for (const b of bases) { + if (seen.has(b)) continue; + seen.add(b); + if (goOnlyBases.has(b)) { + const base = api.getBase(b); + if (base?.extends) { + expand(base.extendsKeys); + } + } + else { + result.push(b); + } + } + } + + expand(exts); + return result; +} + +function baseTsName(base: string | NodeType): string { + return typeof base === "string" ? base : base.formatTypeScript(); +} + +function resolveBaseExtends(base: NodeType): string { + if (base.extendsKeys.length > 0) { + const tsExts = expandTsExtends(base.extendsKeys) + .map(e => baseTsName(e)); + if (tsExts.length > 0) return tsExts.join(", "); + } + return "Node"; +} + +function deriveNodeTsExtends(node: NodeType): string { + const tsExts = expandTsExtends(node.extendsKeys) + .map(e => baseTsName(e)); + return tsExts.length > 0 ? tsExts.join(", ") : "Node"; +} + +function generateBaseFields(base: NodeType): string { + if (base.fields.length === 0) return ""; + let result = ""; + for (const field of base.fields) { + if (field.noTS) continue; + const name = api.uncapitalize(field.name); + const type = collapsedTextType(field.name, field.type) ?? field.type.formatTypeScript(); + const opt = field.optional ? "?" : ""; + result += `\n readonly ${name}${opt}: ${type};`; + } + return result; +} + +// ──────────────────────────────────────────────────────────────────────────── +// Variant types derived from multi-kind Go nodes with enum Kind members. +// ──────────────────────────────────────────────────────────────────────────── + +// Compute TS variant interfaces from multi-kind nodes with enum Kind members. +// For each enum value, create a separate interface; a union type alias uses the Go struct name. +interface TsVariant { + tsName: string; + syntaxKind: string; + tsExtends: string; + members?: MemberInfo[]; + handWrittenVisitor?: boolean; +} + +interface VisitorEntry { + tsName: string; + syntaxKind: string; + updateName: string; + members: MemberInfo[]; + handWrittenVisitor?: boolean; +} + +function computeTsVariants(): TsVariant[] { + const result: TsVariant[] = []; + for (const node of api.nodes()) { + if (!isVariantNode(node)) continue; + + // tsMembers excludes the Kind member; use full set so factory/visitor/clone + // code sees inherited members too. Interface generation filters further. + const otherMembers = tsMembers(node); + const tsExtends = deriveNodeTsExtends(node); + + const kindValues = node.kindTypes().map(kind => kind.name); + + for (const kindValue of kindValues) { + result.push({ + tsName: kindValue, + syntaxKind: kindValue, + tsExtends, + members: otherMembers, + handWrittenVisitor: node.handWrittenVisitor, + }); + } + } + return result; +} + +const tsVariants = computeTsVariants(); + +function visitorNodes(): NodeType[] { + return api.nodes().filter(node => !isVariantNode(node)); +} + +function visitorMembers(node: NodeType): MemberInfo[] { + return factoryMembers(node).filter(member => member.isChild()); +} + +function visitorGuardName(member: MemberInfo): string | undefined { + const typeName = member.type.formatTypeScript(); + if (typeName === "Node" || typeName === "Declaration") { + return undefined; + } + + if (member.typeGuard) { + return member.typeGuard; + } + + switch (member.type.kind) { + case "node": + case "alias": + return `is${member.type.name}`; + case "union": { + throw new Error(`No visitor guard configured for union child type ${member.type.formatTypeScript()} on ${member.node?.name}.${member.name}`); + } + default: + return undefined; + } +} + +function visitorVisitExpression(member: MemberInfo): { expression: string; guardName?: string; } { + const propName = api.uncapitalize(member.name); + if (member.listKind === "raw") { + return { expression: `visitNodesArray(node.${propName}, visitor)` }; + } + if (member.type.kind === "list") { + return { expression: `visitNodes(node.${propName}, visitor)` }; + } + const guardName = visitorGuardName(member); + const guardArg = guardName ? `, ${guardName}` : ""; + return { expression: `visitNode(node.${propName}, visitor${guardArg})`, guardName }; +} + +function visitorEntries(): VisitorEntry[] { + const entries: VisitorEntry[] = []; + + for (const node of visitorNodes()) { + const members = visitorMembers(node); + if (members.length === 0) continue; + entries.push({ + tsName: node.name, + syntaxKind: node.syntaxKindName, + updateName: `update${node.name}`, + members, + handWrittenVisitor: node.handWrittenVisitor, + }); + } + + for (const variant of tsVariants) { + const members = (variant.members || []).filter(member => member.isChild()); + if (members.length === 0) continue; + entries.push({ + tsName: variant.tsName, + syntaxKind: variant.syntaxKind, + updateName: `update${variant.tsName}`, + members, + handWrittenVisitor: variant.handWrittenVisitor, + }); + } + + return entries; +} + +// ──────────────────────────────────────────────────────────────────────────── +// Code generation: ast.generated.ts +// ──────────────────────────────────────────────────────────────────────────── + +function generateAstGenerated(): string { + const eol = "\n"; + const parts: string[] = []; + + // ── SyntaxKind union aliases from schema ── + const kindUnions = api.kindAliases(); + for (const { name, members } of kindUnions) { + const parts2 = members.map(m => { + // If it references another union, use the union name directly + if (api.hasKindAlias(m)) return m; + return `SyntaxKind.${m}`; + }); + parts.push(`export type ${name} = ${parts2.join(" | ")};`); + } + + // ── Base interfaces from schema ── + parts.push(""); + for (const base of api.bases()) { + if (goOnlyBases.has(base.key)) continue; + const name = baseTsName(base); + const extendsClause = resolveBaseExtends(base); + const brandProp = base.brand ? `\n readonly ${base.brand}: any;` : ""; + const fields = generateBaseFields(base); + parts.push(`export interface ${name} extends ${extendsClause} {${brandProp}${fields}\n}`); + } + + // ── Concrete node interfaces from schema ── + parts.push(""); + for (const node of api.nodes()) { + if (node.handWritten) continue; + if (isVariantNode(node)) continue; // handled as variant interfaces below + + const interfaceName = node.name; + const extendsClause = deriveNodeTsExtends(node); + + // Generic type parameters + let typeParamStr = ""; + if (node.typeParameters.length > 0) { + const tps = node.typeParameters.map(tp => { + let s = tp.name + " extends " + tp.constraint; + if (tp.default) s += " = " + tp.default; + return s; + }); + typeParamStr = `<${tps.join(", ")}>`; + } + + // Kind line: use type param name if available, otherwise SyntaxKind constant + const kindLine = `\n readonly kind: ${node.kindType.formatTypeScript()};`; + + let memberLines = ""; + for (const m of tsInterfaceMembers(node)) { + if (m.rawType === "SyntaxKind" && m.name === "SyntaxKind") continue; + const propName = api.uncapitalize(m.name); + const propType = m.type.formatTypeScript(); + const opt = m.optional ? "?" : ""; + memberLines += `\n readonly ${propName}${opt}: ${propType};`; + } + + parts.push(`export interface ${interfaceName}${typeParamStr} extends ${extendsClause} {${kindLine}${memberLines}\n}`); + } + + // ── Union types from schema ── + parts.push(""); + for (const alias of api.nodeAliases()) { + if (alias.isUnion) { + const members = alias.unionMemberTypes.map(type => { + if (type.baseKind() === "kind") { + // SyntaxKind -> Node + debugger; + } + return type.formatTypeScript(); + }).join(" | "); + if (!members) continue; + parts.push(`export type ${alias.name} = ${members};`); + } + else if (alias.base) { + parts.push(`export type ${alias.name} = ${baseTsName(alias.base)};`); + } + } + + // ── Variant interfaces (from multi-kind nodes with enum Kind) ── + parts.push(""); + for (const v of tsVariants) { + const kindLine = `\n readonly kind: SyntaxKind.${v.syntaxKind};`; + let memberLines = ""; + if (v.members) { + for (const m of v.members) { + // For interfaces, skip inherited members (they come from the base type) + if (isInheritedFromTsBase(m) && !m.hasTypeScriptOverride()) continue; + const propName = api.uncapitalize(m.name); + const propType = m.type.formatTypeScript(); + const opt = m.optional ? "?" : ""; + memberLines += `\n readonly ${propName}${opt}: ${propType};`; + } + } + parts.push(`export interface ${v.tsName} extends ${v.tsExtends} {${kindLine}${memberLines}\n}`); + } + + // ── Union type aliases for multi-kind nodes ── + for (const node of api.nodes()) { + if (!isVariantNode(node)) continue; + const kindValues = node.kindTypes().map(kind => kind.name); + parts.push(`export type ${node.name} = ${kindValues.join(" | ")};`); + } + + // ── Instantiation aliases for generic nodes ── + for (const node of api.nodes()) { + if (node.instantiationAliases.length === 0) continue; + const interfaceName = node.name; + for (const { name: aliasName, typeArg } of node.instantiationAliases) { + // If the type arg is a kind union name, use it directly; otherwise prefix with SyntaxKind. + const arg = api.hasKindAlias(typeArg) ? typeArg : `SyntaxKind.${typeArg}`; + parts.push(`export type ${aliasName} = ${interfaceName}<${arg}>;`); + } + } + + // ── NodeList type aliases ── + for (const listAlias of api.listAliases()) { + parts.push(`export type ${listAlias.name} = NodeArray<${listAlias.elementTypeName}>;`); + } + + const body = parts.join(eol); + + // ── Header (with imports resolved from the schema model) ── + // Types referenced by the generated declarations but not declared here are + // hand-written in ast.ts; import them so the module type-checks. + const astImports = ["Node", "NodeArray", ...unresolvedAstImports()]; + astImports.sort((a, b) => a.localeCompare(b)); + const header = `// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT. + +import type { ModifierFlags } from "#enums/modifierFlags"; +import type { NodeFlags } from "#enums/nodeFlags"; +import { SyntaxKind } from "#enums/syntaxKind"; +import { TokenFlags } from "#enums/tokenFlags"; +import type { ${astImports.join(", ")} } from "./ast.ts";`; + + return [header, body].join(eol); +} + +// TypeScript names that are available without importing from ast.ts: built-in +// primitives, and enums/base types imported from other modules in the header. +const astBuiltinTypeNames = new Set([ + "any", + "boolean", + "never", + "null", + "number", + "string", + "undefined", + "unknown", + "void", + "ModifierFlags", + "NodeFlags", + "TokenFlags", + "SyntaxKind", + "Node", + "NodeArray", +]); + +// Walks a schema Type and records every named type it references in the +// generated TypeScript. Node and alias references contribute their name; +// unions and lists recurse into their members; kinds and type parameters emit +// `SyntaxKind.*` / locally-scoped names and contribute nothing. Names the +// schema cannot resolve fall back to a PrimitiveType whose name is the raw +// reference (e.g. a hand-written `ast.ts` type such as JsxTagNamePropertyAccess). +function collectTypeReferences(type: Type, into: Set): void { + switch (type.kind) { + case "node": + case "alias": + into.add(type.name); + break; + case "union": + for (const member of type.types) collectTypeReferences(member, into); + break; + case "list": + collectTypeReferences(type.elementType, into); + break; + case "primitive": { + const name = type.formatTypeScript(); + if (!astBuiltinTypeNames.has(name)) into.add(name); + break; + } + case "kind": + case "typeParameter": + // Emitted as `SyntaxKind.*` or a locally-declared name; nothing to import. + break; + } +} + +// The set of type names declared within ast.generated.ts itself. Mirrors the +// declarations emitted by generateAstGenerated so references to them are not +// mistaken for hand-written ast.ts types. +function declaredAstNames(): Set { + const declared = new Set(); + for (const { name } of api.kindAliases()) declared.add(name); + for (const base of api.bases()) { + if (!goOnlyBases.has(base.key)) declared.add(baseTsName(base)); + } + // Concrete node interfaces and variant-node union aliases both use node.name. + for (const node of api.nodes()) { + if (!node.handWritten) declared.add(node.name); + } + for (const alias of api.nodeAliases()) declared.add(alias.name); + for (const variant of tsVariants) declared.add(variant.tsName); + for (const node of api.nodes()) { + for (const { name } of node.instantiationAliases) declared.add(name); + } + for (const listAlias of api.listAliases()) declared.add(listAlias.name); + return declared; +} + +// Type names referenced by ast.generated.ts but not declared within it, and so +// hand-written in ast.ts and needing an import. Derived from the schema model: +// the same Type objects generateAstGenerated emits are walked for references. +function unresolvedAstImports(): string[] { + const referenced = new Set(); + + for (const base of api.bases()) { + if (goOnlyBases.has(base.key)) continue; + for (const field of base.fields) { + if (field.noTS) continue; + collectTypeReferences(field.type, referenced); + } + } + for (const node of api.nodes()) { + if (node.handWritten || isVariantNode(node)) continue; + collectTypeReferences(node.kindType, referenced); + for (const member of tsInterfaceMembers(node)) { + collectTypeReferences(member.type, referenced); + } + } + for (const alias of api.nodeAliases()) { + if (alias.isUnion) { + for (const member of alias.unionMemberTypes) collectTypeReferences(member, referenced); + } + else if (alias.base) { + collectTypeReferences(alias.base, referenced); + } + } + for (const variant of tsVariants) { + for (const member of variant.members || []) { + collectTypeReferences(member.type, referenced); + } + } + for (const listAlias of api.listAliases()) { + if (listAlias.elementType) collectTypeReferences(listAlias.elementType, referenced); + } + + const declared = declaredAstNames(); + return [...referenced] + .filter(name => !declared.has(name) && !astBuiltinTypeNames.has(name)) + .sort((a, b) => a.localeCompare(b)); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Code generation: factory.generated.ts +// ──────────────────────────────────────────────────────────────────────────── + +function generateFactory(): string { + const out: string[] = []; + const importTypes = new Set(); + + // Collect all factory-generatable schema nodes + const concreteFactoryNodes = factoryNodes(); + + // ── Collect property names for getters ── + // Exclude names that conflict with NodeObject's own properties + const nodeObjectOwnProps = new Set(["kind", "flags", "pos", "end", "parent", "_data"]); + const getterNames = new Set(); + for (const node of api.nodes()) { + for (const m of tsMembers(node)) { + const name = api.uncapitalize(m.name); + if (!nodeObjectOwnProps.has(name)) getterNames.add(name); + } + } + // Add variant property names + for (const v of tsVariants) { + for (const m of v.members || []) { + const name = api.uncapitalize(m.name); + if (!nodeObjectOwnProps.has(name)) getterNames.add(name); + } + } + // Extra getters for hand-written nodes (SourceFile) whose data properties + // aren't in the schema but are set by hand-written factory functions. + for ( + const name of [ + "fileName", + "originalText", + "contentMapper", + "virtualFileName", + "diagnosticDirectives", + "supplementalSourceFileNames", + "canonicalSourceFileName", + "path", + "languageVariant", + "scriptKind", + "spanMap", + "isDeclarationFile", + "referencedFiles", + "typeReferenceDirectives", + "libReferenceDirectives", + "imports", + "moduleAugmentations", + "ambientModuleNames", + "externalModuleIndicator", + "tokenCache", + ] + ) { + getterNames.add(name); + } + + // ── Collect all types referenced in factory ── + function addType(t: string) { + // Extract base type names from complex types + const stripped = t.replace(/readonly\s+/g, "").replace(/\[\]/g, "") + .replace(/NodeArray<(.+)>/g, "$1").replace(/\s*\|\s*/g, "|"); + for (const part of stripped.split("|")) { + const clean = part.trim(); + if ( + clean && clean !== "undefined" && clean !== "boolean" && clean !== "string" + && clean !== "any" + && clean !== "number" && clean !== "true" && !clean.startsWith("SyntaxKind.") + ) { + importTypes.add(clean); + } + } + } + + // Pre-collect types from factory nodes + for (const node of concreteFactoryNodes) { + addType(node.name); + const kindTypeParam = kindTypeParameter(node); + if (kindTypeParam) addType(kindTypeParam.constraint); + for (const m of tsMembers(node)) { + addType(tsParamTypeFrom(m.name, m.type)); + addType(m.type.formatTypeScript()); + } + } + for (const v of tsVariants) { + addType(v.tsName); + for (const m of v.members || []) { + addType(m.type.formatTypeScript()); + } + } + // Always needed + for (const t of ["Node", "NodeArray", "KeywordTypeSyntaxKind", "Token", "SourceFile", "KeywordTypeNode", "EndOfFile", "RootedFilePath", "ImportPhaseModifierSyntaxKind", "PathKey", "Statement"]) { + importTypes.add(t); + } + const handWrittenCloneHelpers = api.nodes() + .filter(node => node.handWritten && !isVariantNode(node)) + .map(node => ({ node, helperName: `clone${node.name}Data` })); + // Remove enum types that are imported separately + importTypes.delete("NodeFlags"); + importTypes.delete("SyntaxKind"); + importTypes.delete("TokenFlags"); + + // ── Header ── + out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); + out.push(""); + out.push(`import { NodeFlags } from "#enums/nodeFlags";`); + out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); + out.push(`import { TokenFlags } from "#enums/tokenFlags";`); + + const sortedImports = [...importTypes].sort((a, b) => a.localeCompare(b)); + out.push(`import type {`); + for (const t of sortedImports) { + out.push(` ${t},`); + } + out.push(`} from "./ast.ts";`); + out.push(`import { getChildren, getFirstToken, getLastToken, getTokenPosOfNode } from "./astnav.ts";`); + if (handWrittenCloneHelpers.length > 0) { + out.push(`import {`); + for (const helperName of [...new Set(handWrittenCloneHelpers.map(h => h.helperName))].sort((a, b) => a.localeCompare(b))) { + out.push(` ${helperName},`); + } + out.push(`} from "./utils.ts";`); + } + + // Import hand-written forEachChild functions + const handWrittenForEachChildImports: string[] = []; + for (const node of api.nodes()) { + if (node.handWrittenVisitor && !node.handWritten) { + const members = tsMembers(node); + if (members.filter(m => m.isChild()).length > 0) { + for (const kind of node.kindTypes()) { + handWrittenForEachChildImports.push(`forEachChildOf${kind.name}`); + handWrittenForEachChildImports.push(`yieldEachChildOf${kind.name}`); + } + } + } + } + if (handWrittenForEachChildImports.length > 0) { + out.push(`import {`); + for (const name of handWrittenForEachChildImports.sort((a, b) => a.localeCompare(b))) { + out.push(` ${name},`); + } + out.push(`} from "./visitor.ts";`); + } + + out.push(""); + + // ── NodeObject class ── + const sortedGetters = [...getterNames].sort(); + out.push(`export class NodeObject {`); + out.push(` readonly kind: SyntaxKind;`); + out.push(` flags: NodeFlags = 0 as NodeFlags;`); + out.push(` readonly pos: number = -1;`); + out.push(` readonly end: number = -1;`); + out.push(` parent: Node = undefined!;`); + out.push(` _data: any;`); + out.push(``); + out.push(` constructor(kind: SyntaxKind, data: any) {`); + out.push(` this.kind = kind;`); + out.push(` this._data = data;`); + out.push(` }`); + out.push(``); + + // Getters + for (const name of sortedGetters) { + out.push(` get ${name}(): any { return this._data?.${name}; }`); + } + out.push(``); + + // Methods + out.push(` forEachChild(visitor: (node: Node) => T, visitArray?: (nodes: NodeArray) => T): T | undefined {`); + out.push(` const fn = forEachChildTable[this.kind];`); + out.push(` return fn ? fn(this._data, visitor, visitArray) : undefined;`); + out.push(` }`); + out.push(``); + out.push(` childrenIter(): Generator {`); + out.push(` const fn = yieldEachChildTable[this.kind];`); + out.push(` return fn ? fn(this._data) : emptyChildrenIter();`); + out.push(` }`); + out.push(``); + out.push(` getSourceFile(): SourceFile {`); + out.push(` let node: Node = this as unknown as Node;`); + out.push(` while (node.parent) node = node.parent;`); + out.push(` return node as unknown as SourceFile;`); + out.push(` }`); + out.push(``); + out.push(` getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number {`); + out.push(` return getTokenPosOfNode(this as unknown as Node, sourceFile ?? this.getSourceFile(), includeJsDocComment);`); + out.push(` }`); + out.push(``); + out.push(` getFullStart(): number {`); + out.push(` return this.pos;`); + out.push(` }`); + out.push(``); + out.push(` getEnd(): number {`); + out.push(` return this.end;`); + out.push(` }`); + out.push(``); + out.push(` getWidth(sourceFile?: SourceFile): number {`); + out.push(` return this.getEnd() - this.getStart(sourceFile);`); + out.push(` }`); + out.push(``); + out.push(` getFullWidth(): number {`); + out.push(` return this.end - this.pos;`); + out.push(` }`); + out.push(``); + out.push(` getLeadingTriviaWidth(sourceFile?: SourceFile): number {`); + out.push(` return this.getStart(sourceFile) - this.pos;`); + out.push(` }`); + out.push(``); + out.push(` getFullText(sourceFile?: SourceFile): string {`); + out.push(` return (sourceFile ?? this.getSourceFile()).text.substring(this.pos, this.end);`); + out.push(` }`); + out.push(``); + out.push(` getText(sourceFile?: SourceFile): string {`); + out.push(` sourceFile ??= this.getSourceFile();`); + out.push(` return sourceFile.text.substring(this.getStart(sourceFile), this.end);`); + out.push(` }`); + out.push(``); + out.push(` getChildCount(sourceFile?: SourceFile): number {`); + out.push(` return this.getChildren(sourceFile).length;`); + out.push(` }`); + out.push(``); + out.push(` getChildAt(index: number, sourceFile?: SourceFile): Node {`); + out.push(` return this.getChildren(sourceFile)[index];`); + out.push(` }`); + out.push(``); + out.push(` getChildren(sourceFile?: SourceFile): readonly Node[] {`); + out.push(` return getChildren(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + out.push(` }`); + out.push(``); + out.push(` getFirstToken(sourceFile?: SourceFile): Node | undefined {`); + out.push(` return getFirstToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + out.push(` }`); + out.push(``); + out.push(` getLastToken(sourceFile?: SourceFile): Node | undefined {`); + out.push(` return getLastToken(this as unknown as Node, sourceFile ?? this.getSourceFile());`); + out.push(` }`); + out.push(`}`); + out.push(``); + + // ── Utility functions ── + out.push(`function isNodeArray(array: readonly T[]): array is NodeArray {`); + out.push(` return "pos" in array && "end" in array;`); + out.push(`}`); + out.push(``); + out.push(`export function createNodeArray(elements: readonly T[], pos: number = -1, end: number = -1): NodeArray {`); + out.push(` if (isNodeArray(elements)) return elements;`); + out.push(` const arr = elements.slice() as unknown as NodeArray & { pos: number; end: number; };`); + out.push(` arr.pos = pos;`); + out.push(` arr.end = end;`); + out.push(` return arr;`); + out.push(`}`); + out.push(``); + out.push(`export function cloneNode(node: T): T {`); + out.push(` const data = cloneNodeData(node);`); + out.push(` const clone = new NodeObject(node.kind, data);`); + out.push(` (clone as any).flags = node.flags;`); + out.push(` (clone as any).pos = node.pos;`); + out.push(` (clone as any).end = node.end;`); + out.push(` return clone as unknown as T;`); + out.push(`}`); + out.push(``); + + // ── cloneNodeData ── + out.push(`function cloneNodeData(node: Node): any {`); + out.push(` const n = node as any;`); + out.push(` switch (node.kind) {`); + // Schema nodes + for (const node of api.nodes()) { + if (node.handWritten) continue; + if (isVariantNode(node)) continue; + const members = tsMembers(node).filter(m => !isNodeBaseProperty(m)); + if (members.length === 0) continue; + const props = members.map(m => api.uncapitalize(m.name)); + if (props.length === 0) continue; + const syntaxKinds = node.allKinds(); + for (const sk of syntaxKinds) { + out.push(` case ${sk.formatTypeScript()}:`); + } + const propStr = props.map(p => `${p}: n.${p}`).join(", "); + out.push(` return { ${propStr} };`); + } + // Variant nodes + for (const v of tsVariants) { + if (!v.members || v.members.length === 0) continue; + const props = v.members.map(m => api.uncapitalize(m.name)); + const propStr = props.map(p => `${p}: n.${p}`).join(", "); + out.push(` case SyntaxKind.${v.syntaxKind}:`); + out.push(` return { ${propStr} };`); + } + for (const { node, helperName } of handWrittenCloneHelpers) { + for (const sk of node.allKinds()) { + out.push(` case ${sk.formatTypeScript()}:`); + } + out.push(` return ${helperName}(n);`); + } + out.push(` default:`); + out.push(` return undefined;`); + out.push(` }`); + out.push(`}`); + out.push(``); + + // ── forEachChildTable ── + out.push(`type ForEachChildFunction = (data: any, cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined) => T | undefined;`); + out.push(``); + out.push(`const forEachChildTable: Record = {`); + // Schema nodes + for (const node of api.nodes()) { + if (node.handWritten) continue; + if (isVariantNode(node)) continue; + const members = tsMembers(node); + const childMembers = members.filter(m => m.isChild()); + if (childMembers.length === 0) continue; + const syntaxKinds = node.allKinds(); + if (node.handWrittenVisitor) { + for (const sk of syntaxKinds) { + out.push(` [${sk.formatTypeScript()}]: forEachChildOf${node.name},`); + } + continue; + } + const visits = childMembers.map(m => { + const propName = api.uncapitalize(m.name); + const listKind = m.listKind; + if (listKind) { + return `visitNodes(cbNode, cbNodes, data.${propName})`; + } + return `visitNode(cbNode, data.${propName})`; + }); + const body = visits.join(" ||\n "); + for (const sk of syntaxKinds) { + out.push(` [${sk.formatTypeScript()}]: (data, cbNode, cbNodes) =>`); + out.push(` ${body},`); + } + } + // Variant nodes + for (const v of tsVariants) { + if (!v.members) continue; + const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); + if (childMembers.length === 0) continue; + if (v.handWrittenVisitor) { + out.push(` [SyntaxKind.${v.syntaxKind}]: forEachChildOf${v.tsName},`); + continue; + } + const visits = childMembers.map(m => { + const propName = api.uncapitalize(m.name); + if (m.listKind) return `visitNodes(cbNode, cbNodes, data.${propName})`; + return `visitNode(cbNode, data.${propName})`; + }); + const body = visits.join(" ||\n "); + out.push(` [SyntaxKind.${v.syntaxKind}]: (data, cbNode, cbNodes) =>`); + out.push(` ${body},`); + } + // SourceFile is handWritten so we add its forEachChild entry manually + out.push(` [SyntaxKind.SourceFile]: (data, cbNode, cbNodes) =>`); + out.push(` visitNodes(cbNode, cbNodes, data.statements) ||`); + out.push(` visitNode(cbNode, data.endOfFileToken),`); + out.push(`};`); + out.push(``); + + // ── yieldEachChildTable ── + out.push(`type YieldEachChildFunction = (data: any) => Generator;`); + out.push(``); + out.push(`function* emptyChildrenIter(): Generator {`); + out.push(` return undefined;`); + out.push(`}`); + out.push(``); + out.push(`const yieldEachChildTable: Record = {`); + // Schema nodes + for (const node of api.nodes()) { + if (node.handWritten) continue; + if (isVariantNode(node)) continue; + const members = tsMembers(node); + const childMembers = members.filter(m => m.isChild()); + if (childMembers.length === 0) continue; + const syntaxKinds = node.allKinds(); + if (node.handWrittenVisitor) { + for (const sk of syntaxKinds) { + out.push(` [${sk.formatTypeScript()}]: yieldEachChildOf${node.name},`); + } + continue; + } + const visits = childMembers.map(m => { + const propName = api.uncapitalize(m.name); + const listKind = m.listKind; + if (listKind) { + const visit = `for (const n of data.${propName}) { const res = yield n; if (res) return res; }`; + return m.optional ? `if (data.${propName}) { ${visit} }` : visit; + } + return `if (data.${propName}) { const res = yield data.${propName}; if (res) return res; }`; + }); + const body = visits.join("\n "); + for (const sk of syntaxKinds) { + out.push(` [${sk.formatTypeScript()}]: function* (data) {`); + out.push(` ${body}`); + out.push(` },`); + } + } + // Variant nodes + for (const v of tsVariants) { + if (!v.members) continue; + const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); + if (childMembers.length === 0) continue; + if (v.handWrittenVisitor) { + out.push(` [SyntaxKind.${v.syntaxKind}]: yieldEachChildOf${v.tsName},`); + continue; + } + const visits = childMembers.map(m => { + const propName = api.uncapitalize(m.name); + const listKind = m.listKind; + if (listKind) { + const visit = `for (const n of data.${propName}) { const res = yield n; if (res) return res; }`; + return m.optional ? `if (data.${propName}) { ${visit} }` : visit; + } + return `if (data.${propName}) { const res = yield data.${propName}; if (res) return res; }`; + }); + const body = visits.join("\n "); + out.push(` [SyntaxKind.${v.syntaxKind}]: function* (data) {`); + out.push(` ${body}`); + out.push(` },`); + } + // SourceFile is handWritten so we add its yieldEachChild entry manually + out.push(` [SyntaxKind.SourceFile]: function* (data) {`); + out.push(` for (const n of data.statements) { const res = yield n; if (res) return res; }`); + out.push(` const res = yield data.endOfFileToken; if (res) return res;`); + out.push(` },`); + out.push(`};`); + out.push(``); + + // ── visitNode / visitNodes ── + out.push(`function visitNode(cbNode: (node: Node) => T, node: Node | undefined): T | undefined {`); + out.push(` return node ? cbNode(node) : undefined;`); + out.push(`}`); + out.push(``); + out.push(`function visitNodes(cbNode: (node: Node) => T, cbNodes: ((nodes: NodeArray) => T) | undefined, nodes: NodeArray | undefined): T | undefined {`); + out.push(` if (!nodes) return undefined;`); + out.push(` if (cbNodes) return cbNodes(nodes);`); + out.push(` for (const node of nodes) {`); + out.push(` const result = cbNode(node);`); + out.push(` if (result) return result;`); + out.push(` }`); + out.push(` return undefined;`); + out.push(`}`); + out.push(``); + + // ── Create functions (schema nodes) ── + const createNames: string[] = []; + for (const node of concreteFactoryNodes) { + const iface = node.name; + const members = factoryMembers(node); + const funcName = `create${iface}`; + createNames.push(funcName); + const kindTypeParam = kindTypeParameter(node); + + // Build params + const paramParts: string[] = []; + if (kindTypeParam) { + paramParts.push(`kind: ${kindTypeParam.name}`); + } + + // First pass: determine which members are "required" (cannot be omitted). + // A member is required if it is not optional and not a bool. + const isRequired = members.map(m => { + if (m.optional) return false; + const mt = m.type; + if (!m.isChild() && mt.kind === "primitive" && mt.name === "bool") return false; + return true; + }); + + // Find the index of the last required member. + let lastRequiredIdx = -1; + for (let i = members.length - 1; i >= 0; i--) { + if (isRequired[i]) { + lastRequiredIdx = i; + break; + } + } + + for (let mi = 0; mi < members.length; mi++) { + const m = members[mi]; + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + const paramType = tsParamTypeFrom(m.name, m.type); + const memberType = m.type; + const isBool = !m.isChild() && memberType.kind === "primitive" && memberType.name === "bool"; + + if (isBool) { + if (mi < lastRequiredIdx) { + // Required params follow — use default value instead of optional + paramParts.push(`${paramName}: ${paramType} = false`); + } + else { + paramParts.push(`${paramName}?: ${paramType}`); + } + } + else if (m.optional) { + if (mi < lastRequiredIdx) { + // Required params follow — cannot use ? syntax + paramParts.push(`${paramName}: ${paramType} | undefined`); + } + else { + paramParts.push(`${paramName}?: ${paramType}`); + } + } + else { + paramParts.push(`${paramName}: ${paramType}`); + } + } + + // Build data object (includes ALL tsMembers, not just factory params) + const allMembers = tsMembers(node); + const dataParts: string[] = []; + const nodeProps: { propName: string; paramName: string; }[] = []; + for (const m of allMembers) { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + const listKind = m.listKind; + const isParam = members.includes(m); + // Members inherited from NodeBase (e.g. Flags) are class-level + // properties on NodeObject, not data members. + if (isNodeBaseProperty(m)) { + if (isParam) { + nodeProps.push({ propName, paramName }); + } + continue; + } + if (listKind === "NodeList" || listKind === "ModifierList") { + if (isParam) { + if (m.optional) { + dataParts.push(`${propName}: ${paramName} ? createNodeArray(${paramName}) : undefined`); + } + else { + dataParts.push(`${propName}: createNodeArray(${paramName})`); + } + } + } + else { + if (isParam) { + if (propName === paramName) { + dataParts.push(propName); // shorthand + } + else { + dataParts.push(`${propName}: ${paramName}`); + } + } + } + } + + const paramsStr = paramParts.join(", "); + const dataStr = dataParts.length > 0 + ? `{\n ${dataParts.join(",\n ")},\n }` + : "undefined"; + const genericParamStr = kindTypeParam + ? `<${kindTypeParam.name} extends ${kindTypeParam.constraint}>` + : ""; + const returnType = kindTypeParam + ? `${iface}<${kindTypeParam.name}>` + : iface; + const kindExpr = kindTypeParam ? "kind" : `SyntaxKind.${node.syntaxKindName}`; + + out.push(`export function ${funcName}${genericParamStr}(${paramsStr}): ${returnType} {`); + if (nodeProps.length > 0) { + out.push(` const node = new NodeObject(${kindExpr}, ${dataStr}) as unknown as ${returnType};`); + for (const { propName, paramName } of nodeProps) { + out.push(` (node as any).${propName} = ${paramName};`); + } + out.push(` return node;`); + } + else { + out.push(` return new NodeObject(${kindExpr}, ${dataStr}) as unknown as ${returnType};`); + } + out.push(`}`); + out.push(``); + } + + // ── Create functions (variant nodes) ── + for (const v of tsVariants) { + const funcName = `create${v.tsName}`; + createNames.push(funcName); + if (!v.members || v.members.length === 0) { + out.push(`export function ${funcName}(): ${v.tsName} {`); + out.push(` return new NodeObject(SyntaxKind.${v.syntaxKind}, undefined) as unknown as ${v.tsName};`); + out.push(`}`); + } + else { + const paramParts: string[] = []; + const dataParts: string[] = []; + for (const m of v.members) { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + const paramType = tsParamTypeFrom(m.name, m.type); + if (m.optional) { + paramParts.push(`${paramName}: ${paramType} | undefined`); + } + else { + paramParts.push(`${paramName}: ${paramType}`); + } + if (m.listKind === "NodeList") { + if (m.optional) { + dataParts.push(`${propName}: ${paramName} ? createNodeArray(${paramName}) : undefined`); + } + else { + dataParts.push(`${propName}: createNodeArray(${paramName})`); + } + } + else if (propName === paramName) { + dataParts.push(propName); + } + else { + dataParts.push(`${propName}: ${paramName}`); + } + } + const paramsStr = paramParts.join(", "); + const dataStr = `{\n ${dataParts.join(",\n ")},\n }`; + out.push(`export function ${funcName}(${paramsStr}): ${v.tsName} {`); + out.push(` return new NodeObject(SyntaxKind.${v.syntaxKind}, ${dataStr}) as unknown as ${v.tsName};`); + out.push(`}`); + } + out.push(``); + } + + // ── Update functions (schema nodes) ── + for (const node of concreteFactoryNodes) { + const iface = node.name; + const members = factoryMembers(node); + // Update params: all child members + const updateChildMembers = members.filter(m => m.isChild()); + if (updateChildMembers.length === 0) continue; + + const funcName = `update${iface}`; + const paramParts = [`node: ${iface}`]; + + // Determine which update child members are required + const updateIsRequired = updateChildMembers.map(m => !m.optional); + let updateLastRequiredIdx = -1; + for (let i = updateChildMembers.length - 1; i >= 0; i--) { + if (updateIsRequired[i]) { + updateLastRequiredIdx = i; + break; + } + } + + for (let mi = 0; mi < updateChildMembers.length; mi++) { + const m = updateChildMembers[mi]; + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + const paramType = tsParamTypeFrom(m.name, m.type); + if (m.optional) { + if (mi < updateLastRequiredIdx) { + paramParts.push(`${paramName}: ${paramType} | undefined`); + } + else { + paramParts.push(`${paramName}?: ${paramType}`); + } + } + else { + paramParts.push(`${paramName}: ${paramType}`); + } + } + + // Comparison + const comparisons = updateChildMembers.map(m => { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + return `node.${propName} !== ${paramName}`; + }); + + // Create call args (all factory members, using params for update children, node.prop for rest) + const updateChildNames = new Set(updateChildMembers.map(m => m.name)); + const createArgs = members.map(m => { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + if (updateChildNames.has(m.name)) return paramName; + return `node.${propName}`; + }); + + out.push(`export function ${funcName}(${paramParts.join(", ")}): ${iface} {`); + out.push(` return ${comparisons.join(" || ")} ? create${iface}(${createArgs.join(", ")}) : node;`); + out.push(`}`); + out.push(``); + } + + // ── Update functions (variant nodes) ── + for (const v of tsVariants) { + if (!v.members || v.members.length === 0) continue; + const childMembers = v.members.filter(m => m.type.baseKind() === "node" || m.type.baseKind() === "list"); + if (childMembers.length === 0) continue; + + const paramParts = [`node: ${v.tsName}`]; + for (const m of childMembers) { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + const paramType = tsParamTypeFrom(m.name, m.type); + if (m.optional) { + paramParts.push(`${paramName}: ${paramType} | undefined`); + } + else { + paramParts.push(`${paramName}: ${paramType}`); + } + } + + const comparisons = childMembers.map(m => { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + return `node.${propName} !== ${paramName}`; + }); + + const createArgs = (v.members || []).map(m => { + const propName = api.uncapitalize(m.name); + const paramName = tsParamName(propName); + if (m.type.baseKind() !== "node" && m.type.baseKind() !== "list") return `node.${propName}`; + return paramName; + }); + + out.push(`export function update${v.tsName}(${paramParts.join(", ")}): ${v.tsName} {`); + out.push(` return ${comparisons.join(" || ")} ? create${v.tsName}(${createArgs.join(", ")}) : node;`); + out.push(`}`); + out.push(``); + } + + // ── createSourceFile (custom generated implementation — SourceFile is handWritten in schema) ── + out.push(`export function createSourceFile(statements: readonly Statement[], endOfFileToken: EndOfFile, text: string, fileName: RootedFilePath, path: PathKey): SourceFile {`); + out.push(` return new NodeObject(SyntaxKind.SourceFile, {`); + out.push(` statements: createNodeArray(statements),`); + out.push(` endOfFileToken,`); + out.push(` text,`); + out.push(` originalText: text,`); + out.push(` spanMap: undefined,`); + out.push(` contentMapper: undefined,`); + out.push(` virtualFileName: undefined,`); + out.push(` diagnosticDirectives: undefined,`); + out.push(` fileName,`); + out.push(` path,`); + out.push(` }) as unknown as SourceFile;`); + out.push(`}`); + out.push(``); + + out.push(`function cloneSourceFileWithChanges(source: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile {`); + out.push(` return new NodeObject(SyntaxKind.SourceFile, {`); + out.push(` ...cloneSourceFileData(source),`); + out.push(` statements: createNodeArray(statements),`); + out.push(` endOfFileToken,`); + out.push(` }) as unknown as SourceFile;`); + out.push(`}`); + out.push(``); + + // ── updateSourceFile (hand-written in schema) ── + out.push(`export function updateSourceFile(node: SourceFile, statements: readonly Statement[], endOfFileToken: EndOfFile): SourceFile {`); + out.push(` return node.statements !== statements || node.endOfFileToken !== endOfFileToken`); + out.push(` ? cloneSourceFileWithChanges(node, statements, endOfFileToken)`); + out.push(` : node;`); + out.push(`}`); + out.push(``); + + // Clean up + while (out.length > 0 && out[out.length - 1] === "") out.pop(); + out.push(""); + + return out.join("\n"); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Code generation: is.ts +// ──────────────────────────────────────────────────────────────────────────── + +function generateIsGenerated(): string { + const out: string[] = []; + const importTypes = new Set(); + + // ── Simple is* guards from schema nodes ── + const guards: { funcName: string; typeName: string; kindChecks: string[]; kindAliasConstraint?: string; }[] = []; + + for (const node of api.nodes()) { + if (isVariantNode(node)) continue; + + const typeName = node.name; + const funcName = `is${typeName}`; + // If the node has a type parameter constrained to a kind alias, use the kind-level guard. + const kindParam = node.typeParameters.find(tp => tp.constraint && api.hasKindAlias(tp.constraint)); + const kindAliasConstraint = kindParam?.constraint; + guards.push({ funcName, typeName, kindChecks: syntaxKindChecksForNode(node), kindAliasConstraint }); + importTypes.add(typeName); + } + + // Variant node guards + for (const v of tsVariants) { + const funcName = `is${v.tsName}`; + guards.push({ funcName, typeName: v.tsName, kindChecks: [`SyntaxKind.${v.syntaxKind}`] }); + importTypes.add(v.tsName); + } + + // Always needed + importTypes.add("Node"); + + // ── Composite guards from unions ── + interface CompositeGuard { + funcName: string; + typeName: string; + body: string; + } + const compositeGuards: CompositeGuard[] = []; + + // Build a map from instantiation alias name → SyntaxKind name. + // E.g. "AbstractKeyword" → "AbstractKeyword", "TrueLiteral" → "TrueKeyword" + const instantiationAliasToKind = new Map(); + for (const node of api.nodes()) { + for (const { name: aliasName, typeArg } of node.instantiationAliases) { + // typeArg is either a SyntaxKind name or a kind alias name + if (!api.hasKindAlias(typeArg)) { + instantiationAliasToKind.set(aliasName, typeArg); + } + } + } + + // Recursively resolve union members to SyntaxKind checks. + // Returns null if any member cannot be resolved to concrete kinds. + function resolveUnionKindChecks(members: readonly string[]): string[] | null { + const checks: string[] = []; + for (const m of members) { + const node = api.getNode(m); + if (node) { + checks.push(...syntaxKindChecksForNode(node)); + continue; + } + const variant = tsVariants.find(v => v.tsName === m); + if (variant) { + checks.push(`SyntaxKind.${variant.syntaxKind}`); + continue; + } + // Check if it's a Token instantiation alias (e.g. AbstractKeyword, TrueLiteral) + const kindName = instantiationAliasToKind.get(m); + if (kindName) { + checks.push(`SyntaxKind.${kindName}`); + continue; + } + // Recurse into sub-aliases + const subAlias = api.nodeAliases().find(a => a.name === m); + if (subAlias?.isUnion) { + const sub = resolveUnionKindChecks(subAlias.unionMemberNames); + if (sub === null) return null; + checks.push(...sub); + continue; + } + // Check if it's a kind alias (e.g. ModifierSyntaxKind) — expand to SyntaxKind checks + if (api.hasKindAlias(m)) { + const kindMembers = api.expandKindAliasMembers(m); + checks.push(...kindMembers.map(k => k.formatTypeScript())); + continue; + } + // Unresolvable member (e.g. Expression, Statement) — can't enumerate kinds + return null; + } + return checks; + } + + for (const alias of api.nodeAliases()) { + if (!alias.isUnion) continue; + const members = alias.unionMemberNames; + if (members.length === 0) continue; + + const typeName = alias.name; + const funcName = `is${typeName}`; + if (guards.some(g => g.funcName === funcName)) continue; + + const kindChecksRaw = resolveUnionKindChecks(members); + + if (kindChecksRaw === null || kindChecksRaw.length === 0) { + // Union contains unresolvable members (e.g. Expression) — skip, + // must be hand-written in is.ts + continue; + } + + importTypes.add(typeName); + const kindChecks = [...new Set(kindChecksRaw)]; + let body: string; + + // Build conditions: delegate to kind guard for kind alias members, direct checks for others + const kindAliasMembers = members.filter(m => api.hasKindAlias(m)); + if (kindAliasMembers.length > 0) { + // Collect direct SyntaxKind checks for non-kind-alias members + const nonKindAliasMembers = members.filter(m => !api.hasKindAlias(m)); + const directChecks = nonKindAliasMembers.length > 0 + ? resolveUnionKindChecks(nonKindAliasMembers) ?? [] + : []; + const conditions: string[] = [ + ...kindAliasMembers.map(m => `${kindGuardName(m)}(kind)`), + ...[...new Set(directChecks)].map(k => `kind === ${k}`), + ]; + body = `const kind = node.kind;\n return ${conditions.join(" || ")};`; + } + else if (kindChecks.length <= 3) { + body = `return ${kindChecks.map(k => `node.kind === ${k}`).join(" || ")};`; + } + else { + body = `const kind = node.kind;\n return ${kindChecks.map(k => `kind === ${k}`).join(" || ")};`; + } + + compositeGuards.push({ funcName, typeName, body }); + } + + // ── Kind alias guards (SyntaxKind-level) ── + // Generate `is(kind: SyntaxKind): kind is ` for each enumerated kind alias union. + // Range-based aliases generate `is(kind: SyntaxKind): boolean` with range checks. + // Function names drop "Syntax" from the kind alias name: isTriviaSyntaxKind → isTriviaKind. + + interface KindAliasGuard { + funcName: string; + typeName: string; + conditions: string[]; + } + const kindAliasGuards: KindAliasGuard[] = []; + interface RangeKindAliasGuard { + funcName: string; + first: string; + last: string; + } + const rangeKindAliasGuards: RangeKindAliasGuard[] = []; + for (const guard of api.kindGuards()) { + const { guardName: funcName } = guard; + // Skip if a node-level guard with the same name already exists + if (guards.some(g => g.funcName === funcName)) continue; + if (compositeGuards.some(g => g.funcName === funcName)) continue; + + if (guard.type === "range") { + rangeKindAliasGuards.push({ funcName, first: guard.first, last: guard.last }); + } + else { + importTypes.add(guard.aliasName); + const conditions = guard.members.map(m => { + if (api.hasKindAlias(m)) return `${kindGuardName(m)}(kind)`; + return `kind === SyntaxKind.${m}`; + }); + kindAliasGuards.push({ funcName, typeName: guard.aliasName, conditions }); + } + } + + // ── Token instantiation alias guards ── + // For Token instantiation aliases like `BinaryOperatorToken = Token`, + // generate `is(node: Node): node is ` using the kind-level guard. + // Also generate guards for single-kind Token aliases (like EndOfFile, DotToken, etc.) + // Token aliases whose underlying kind alias is range-based return boolean (not a type predicate). + const rangeKindAliasNames = new Set(rangeKindAliasGuards.map(g => g.funcName)); + interface TokenAliasGuard { + funcName: string; + typeName: string; + body: string; + isRangeBased: boolean; + } + const tokenAliasGuards: TokenAliasGuard[] = []; + for (const node of api.nodes()) { + for (const { name: aliasName, typeArg } of node.instantiationAliases) { + const funcName = `is${aliasName}`; + // Skip if already generated + if (guards.some(g => g.funcName === funcName)) continue; + if (compositeGuards.some(g => g.funcName === funcName)) continue; + + if (api.hasKindAlias(typeArg)) { + const isRangeBased = rangeKindAliasNames.has(kindGuardName(typeArg)); + if (!isRangeBased) importTypes.add(aliasName); + // Multi-kind token alias: use the kind-level guard + tokenAliasGuards.push({ funcName, typeName: aliasName, body: `return ${kindGuardName(typeArg)}(node.kind);`, isRangeBased }); + } + else { + importTypes.add(aliasName); + // Single-kind token alias: direct SyntaxKind check + tokenAliasGuards.push({ funcName, typeName: aliasName, body: `return node.kind === SyntaxKind.${typeArg};`, isRangeBased: false }); + } + } + } + + // ── Build output ── + out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); + out.push(``); + out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); + const sortedImports = [...importTypes].sort((a, b) => a.localeCompare(b)); + out.push(`import type {`); + for (const t of sortedImports) { + out.push(` ${t},`); + } + out.push(`} from "./ast.ts";`); + out.push(`import type { NodeHandle as AsyncNodeHandle } from "../api/async/api.ts";`); + out.push(`import type { NodeHandle as SyncNodeHandle } from "../api/sync/api.ts";`); + out.push(`type NodeHandleLike = { kind: SyntaxKind; resolve(...args: any): any; };`); + // Note that we must `& T` to satisfy the requirements of a type guard, and it must be _second_ so the narrowed `resolve` overload from the specialization is selected (order matters) + out.push(`type SpecializeNodeHandle, U extends Node> = T extends AsyncNodeHandle ? AsyncNodeHandle & T : SyncNodeHandle & T;`); + out.push(``); + + // ── Simple guards ── + for (const g of guards) { + out.push(`export function ${g.funcName}(node: Node): node is ${g.typeName} {`); + if (g.kindAliasConstraint) { + // Use the kind-level guard for nodes with a kind alias constraint + out.push(` return ${kindGuardName(g.kindAliasConstraint)}(node.kind);`); + } + else if (g.kindChecks.length === 1) { + out.push(` return node.kind === ${g.kindChecks[0]};`); + } + else { + out.push(` switch (node.kind) {`); + for (const kindCheck of g.kindChecks) { + out.push(` case ${kindCheck}:`); + } + out.push(` return true;`); + out.push(` default:`); + out.push(` return false;`); + out.push(` }`); + } + out.push(`}`); + out.push(``); + out.push(`export declare namespace ${g.funcName} {`); + out.push(` function Handle>(node: T): node is SpecializeNodeHandle;`); + out.push(`}`); + out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); + out.push(``); + } + + // ── Composite guards ── + for (const g of compositeGuards) { + out.push(`export function ${g.funcName}(node: Node): node is ${g.typeName} {`); + out.push(` ${g.body}`); + out.push(`}`); + out.push(``); + out.push(`export declare namespace ${g.funcName} {`); + out.push(` function Handle>(node: T): node is SpecializeNodeHandle;`); + out.push(`}`); + out.push(``); + out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); + out.push(``); + } + + // ── Kind alias guards ── + for (const g of kindAliasGuards) { + out.push(`export function ${g.funcName}(kind: SyntaxKind): kind is ${g.typeName} {`); + if (g.conditions.length === 1) { + out.push(` return ${g.conditions[0]};`); + } + else { + out.push(` return ${g.conditions.join("\n || ")};`); + } + out.push(`}`); + out.push(``); + } + + // ── Range-based kind alias guards ── + for (const g of rangeKindAliasGuards) { + out.push(`export function ${g.funcName}(kind: SyntaxKind): boolean {`); + out.push(` return kind >= SyntaxKind.${g.first} && kind <= SyntaxKind.${g.last};`); + out.push(`}`); + out.push(``); + } + + // ── Token alias guards ── + for (const g of tokenAliasGuards) { + const returnType = g.isRangeBased ? `boolean` : `node is ${g.typeName}`; + const handleReturnType = g.isRangeBased ? `boolean` : `node is SpecializeNodeHandle`; + out.push(`export function ${g.funcName}(node: Node): ${returnType} {`); + out.push(` ${g.body}`); + out.push(`}`); + out.push(``); + out.push(`export declare namespace ${g.funcName} {`); + out.push(` function Handle>(node: T): ${handleReturnType};`); + out.push(`}`); + out.push(``); + out.push(`${g.funcName}.Handle = ${g.funcName} as any;`); + out.push(``); + } + + while (out.length > 0 && out[out.length - 1] === "") out.pop(); + out.push(""); + + return out.join("\n"); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Code generation: visitor.generated.ts +// ──────────────────────────────────────────────────────────────────────────── + +function generateVisitor(): string { + const out: string[] = []; + const entries = visitorEntries(); + const typeImports = new Set(["Node", "NodeArray"]); + const factoryImports = new Set(["createNodeArray"]); + const isImports = new Set(); + const handWrittenImports = new Set(); + + for (const entry of entries) { + typeImports.add(entry.tsName); + if (entry.handWrittenVisitor) { + handWrittenImports.add(`visitEachChildOf${entry.tsName}`); + } + else { + factoryImports.add(entry.updateName); + } + for (const member of entry.members) { + const { guardName } = visitorVisitExpression(member); + if (guardName) isImports.add(guardName); + } + } + + out.push(`// Code generated by tools/scripts/tsc/generate-ts-ast.ts. DO NOT EDIT.`); + out.push(""); + out.push(`import { SyntaxKind } from "#enums/syntaxKind";`); + out.push(`import type {`); + for (const typeName of [...typeImports].sort((a, b) => a.localeCompare(b))) { + out.push(` ${typeName},`); + } + out.push(`} from "./ast.ts";`); + out.push(`import {`); + for (const name of [...factoryImports].sort((a, b) => a.localeCompare(b))) { + out.push(` ${name},`); + } + out.push(`} from "./factory.generated.ts";`); + out.push(`import {`); + for (const name of [...isImports].sort((a, b) => a.localeCompare(b))) { + out.push(` ${name},`); + } + out.push(`} from "./is.ts";`); + if (handWrittenImports.size > 0) { + out.push(`import {`); + for (const name of [...handWrittenImports].sort((a, b) => a.localeCompare(b))) { + out.push(` ${name},`); + } + out.push(`} from "./visitor.ts";`); + } + out.push(""); + out.push(`/**`); + out.push(` * A callback that receives a node and returns a visited node (or undefined to remove it).`); + out.push(` */`); + out.push(`export type Visitor = (node: Node) => Node | undefined;`); + out.push(""); + out.push(`/**`); + out.push(` * Visits a Node using the supplied visitor, possibly returning a new Node in its place.`); + out.push(` *`); + out.push(` * - If the input node is undefined, then the output is undefined.`); + out.push(` * - If the visitor returns undefined, then the output is undefined.`); + out.push(` * - If the output node is not undefined, then it will satisfy the test function.`); + out.push(` * - In order to obtain a return type that is more specific than \`Node\`, a test`); + out.push(` * function must be provided, and that function must be a type predicate.`); + out.push(` *`); + out.push(` * @param node The Node to visit.`); + out.push(` * @param visitor The callback used to visit the Node.`); + out.push(` * @param test A callback to execute to verify the Node is valid.`); + out.push(` */`); + out.push(`export function visitNode(`); + out.push(` node: TIn,`); + out.push(` visitor: Visitor,`); + out.push(` test: (node: Node) => node is TOut,`); + out.push(`): TOut | (TIn & undefined);`); + out.push(`/**`); + out.push(` * Visits a Node using the supplied visitor, possibly returning a new Node in its place.`); + out.push(` *`); + out.push(` * - If the input node is undefined, then the output is undefined.`); + out.push(` * - If the visitor returns undefined, then the output is undefined.`); + out.push(` *`); + out.push(` * @param node The Node to visit.`); + out.push(` * @param visitor The callback used to visit the Node.`); + out.push(` * @param test An optional callback to execute to verify the Node is valid.`); + out.push(` */`); + out.push(`export function visitNode(`); + out.push(` node: TIn,`); + out.push(` visitor: Visitor,`); + out.push(` test?: (node: Node) => boolean,`); + out.push(`): Node | (TIn & undefined);`); + out.push(`export function visitNode(node: Node | undefined, visitor: Visitor, test?: (node: Node) => boolean): Node | undefined {`); + out.push(` if (node === undefined) return undefined;`); + out.push(` const visited = visitor(node);`); + out.push(` if (visited !== undefined && test !== undefined && !test(visited)) {`); + out.push(` throw new Error("Visited node failed test assertion.");`); + out.push(` }`); + out.push(` return visited;`); + out.push(`}`); + out.push(""); + out.push(`/**`); + out.push(` * Visits a NodeArray using the supplied visitor, possibly returning a new NodeArray in its place.`); + out.push(` *`); + out.push(` * - If the input node array is undefined, the output is undefined.`); + out.push(` * - If the visitor returns undefined for a node, that node is dropped from the result.`); + out.push(` */`); + out.push(`export function visitNodes(nodes: NodeArray, visitor: Visitor): NodeArray;`); + out.push(`export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined;`); + out.push(`export function visitNodes(nodes: NodeArray | undefined, visitor: Visitor): NodeArray | undefined {`); + out.push(` if (nodes === undefined) return undefined;`); + out.push(` const updated = visitNodesArray(nodes, visitor);`); + out.push(` if (updated === nodes) {`); + out.push(` return nodes;`); + out.push(` }`); + out.push(` return createNodeArray(updated, nodes.pos, nodes.end);`); + out.push(`}`); + out.push(""); + out.push(`export function visitNodesArray(nodes: readonly T[], visitor: Visitor): readonly T[];`); + out.push(`export function visitNodesArray(nodes: readonly T[] | undefined, visitor: Visitor): readonly T[] | undefined;`); + out.push(`export function visitNodesArray(nodes: readonly Node[] | undefined, visitor: Visitor): readonly Node[] | undefined {`); + out.push(` if (nodes === undefined) return undefined;`); + out.push(` let updated: Node[] | undefined;`); + out.push(` for (let i = 0; i < nodes.length; i++) {`); + out.push(` const node = nodes[i];`); + out.push(` const visited = visitor(node);`); + out.push(` if (updated) {`); + out.push(` if (visited) updated.push(visited);`); + out.push(` }`); + out.push(` else if (visited !== node) {`); + out.push(` updated = [];`); + out.push(` for (let j = 0; j < i; j++) updated.push(nodes[j]);`); + out.push(` if (visited) updated.push(visited);`); + out.push(` }`); + out.push(` }`); + out.push(` return updated ?? nodes;`); + out.push(`}`); + out.push(""); + out.push(`/**`); + out.push(` * Visits each child of a Node using the supplied visitor, possibly returning a new Node of the same kind in its place.`); + out.push(` *`); + out.push(` * @param node The Node whose children will be visited.`); + out.push(` * @param visitor The callback used to visit each child.`); + out.push(` * @returns The original node if no children changed, or a new node with visited children.`); + out.push(` */`); + out.push(`export function visitEachChild(node: T, visitor: Visitor): T;`); + out.push(`export function visitEachChild(node: T | undefined, visitor: Visitor): T | undefined;`); + out.push(`export function visitEachChild(node: Node | undefined, visitor: Visitor): Node | undefined {`); + out.push(` if (node === undefined) return undefined;`); + out.push(` const fn = visitEachChildTable[node.kind];`); + out.push(` return fn ? fn(node, visitor) : node;`); + out.push(`}`); + out.push(""); + out.push(`type VisitEachChildFunction = (node: any, visitor: Visitor) => Node;`); + out.push(""); + out.push(`const visitEachChildTable: Record = {`); + for (const entry of entries) { + if (entry.handWrittenVisitor) { + out.push(` [SyntaxKind.${entry.syntaxKind}]: visitEachChildOf${entry.tsName},`); + } + else { + out.push(` [SyntaxKind.${entry.syntaxKind}]: (node: ${entry.tsName}, visitor: Visitor): ${entry.tsName} => {`); + const argNames: string[] = []; + for (const member of entry.members) { + const propName = api.uncapitalize(member.name); + const localName = `_${propName}`; + const { expression } = visitorVisitExpression(member); + out.push(` const ${localName} = ${expression};`); + argNames.push(localName); + } + out.push(` return ${entry.updateName}(node, ${argNames.join(", ")});`); + out.push(` },`); + } + } + out.push(`};`); + out.push(""); + while (out.length > 0 && out[out.length - 1] === "") out.pop(); + out.push(""); + + return out.join("\n"); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Main +// ──────────────────────────────────────────────────────────────────────────── + +function writeAndFormat(filePath: string, generate: () => string, force: boolean) { + const generated = new GeneratedFile(filePath, [import.meta.filename, path.join(ROOT, "tools/scripts/tsc/schema.ts"), path.join(ROOT, "tools/scripts/tsc/ast.json")]); + if (generated.isCurrent(force)) return; + generated.write(generate()); + formatFilesSync([filePath]); + generated.markCurrent(); + console.log(`Generated ${filePath}`); +} + +export default function main(force = false) { + console.log("Generating TS AST code..."); + + const factoryPath = path.join(ROOT, "packages/typescript/src/ast/factory.generated.ts"); + const isGenPath = path.join(ROOT, "packages/typescript/src/ast/is.generated.ts"); + const astGenPath = path.join(ROOT, "packages/typescript/src/ast/ast.generated.ts"); + const visitorPath = path.join(ROOT, "packages/typescript/src/ast/visitor.generated.ts"); + + writeAndFormat(astGenPath, generateAstGenerated, force); + writeAndFormat(factoryPath, generateFactory, force); + writeAndFormat(isGenPath, generateIsGenerated, force); + writeAndFormat(visitorPath, generateVisitor, force); +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + main(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/generate.ts b/tools/scripts/tsc/generate.ts index 65f2a3997980a..74f419708ce7e 100644 --- a/tools/scripts/tsc/generate.ts +++ b/tools/scripts/tsc/generate.ts @@ -1,15 +1,15 @@ -import { fileURLToPath } from "node:url"; -import { parseGeneratorArgs } from "../gen/utils.mts"; -import generateEncoder from "./generate-encoder.ts"; -import generateGoAST from "./generate-go-ast.ts"; -import generateTSAST from "./generate-ts-ast.ts"; - -export default function generate(force = false) { - generateEncoder(force); - generateGoAST(force); - generateTSAST(force); -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - generate(parseGeneratorArgs({}).force); -} +import { fileURLToPath } from "node:url"; +import { parseGeneratorArgs } from "../gen/utils.mts"; +import generateEncoder from "./generate-encoder.ts"; +import generateGoAST from "./generate-go-ast.ts"; +import generateTSAST from "./generate-ts-ast.ts"; + +export default function generate(force = false) { + generateEncoder(force); + generateGoAST(force); + generateTSAST(force); +} + +if (process.argv[1] === fileURLToPath(import.meta.url)) { + generate(parseGeneratorArgs({}).force); +} diff --git a/tools/scripts/tsc/options-model.ts b/tools/scripts/tsc/options-model.ts index 9a44e1b30beab..fb9a0bf0cace8 100644 --- a/tools/scripts/tsc/options-model.ts +++ b/tools/scripts/tsc/options-model.ts @@ -1,167 +1,167 @@ -/** Metadata shared by the compiler options, declaration, and config schema generators. */ - -import type messages from "../../../tsc/internal/diagnostics/diagnosticMessages.json"; - -export interface DiagnosticMessage { - go: `diagnostics.${string}`; - text: keyof typeof messages; -} - -export function diagnostic(text: keyof typeof messages): DiagnosticMessage { - const special: Record = { "*": "_Asterisk", "/": "_Slash", ":": "_Colon" }; - let name = [...text].map(char => special[char] ?? (/[\p{L}\p{Nd}]/u.test(char) ? char : "_")).join("") - .replace(/_+/g, "_").replace(/^_([^0-9])/, "$1").replace(/_+$/, ""); - if (!/^\p{Lu}/u.test(name)) name = (name.startsWith("_") ? "X" : "X_") + name; - return { go: `diagnostics.${name}`, text }; -} - -export type GoValue = string | number | boolean | DiagnosticMessage | { go: `core.${string}`; }; -export type OptionKind = "Boolean" | "String" | "Number" | "Object" | "List" | "ListOrElement" | "Enum"; -export type PathKind = "file" | "directory" | "fileOrDirectory" | "sourceMapLocation" | "fileSpec" | "pathPattern" | "resolvedPathPattern" | "configLocator"; -export type CompilerOptionType = - | "Tristate" - | "string" - | "*int" - | "[]string" - | "[]PluginImport" - | "*collections.OrderedMap[string, []string]" - | "JsxEmit" - | "ModuleKind" - | "ModuleResolutionKind" - | "ModuleDetectionKind" - | "NewLineKind" - | "ScriptTarget"; - -export interface DeclarationMetadata { - shortName?: string; - isFilePath?: boolean; - pathKind?: PathKind; - isTSConfigOnly?: boolean; - isCommandLineOnly?: boolean; - description?: DiagnosticMessage; - schemaDescription?: string; - /** TSConfig reference anchor for schema hovers; defaults to the option name. False omits the link. */ - documentationAnchor?: string | false; - defaultValueDescription?: GoValue; - showInSimplifiedHelpView?: boolean; - category?: DiagnosticMessage; - extraValidation?: "locale"; - minValue?: number; - /** Defaults to isFilePath for compiler options; false explicitly disables substitution. */ - allowConfigDirTemplateSubstitution?: boolean; - affectsDeclarationPath?: boolean; - affectsSemanticDiagnostics?: boolean; - affectsBuildInfo?: boolean; - affectsEmit?: boolean; - strictFlag?: boolean; - listPreserveFalsyValues?: boolean; -} - -export interface Declaration extends DeclarationMetadata { - name: string; - kind: OptionKind; - jsconfigDefault?: boolean; -} - -export interface StoredDeclaration extends Declaration { - field: { name: string; type: CompilerOptionType; section?: string; }; -} - -export interface RootDeclaration extends Declaration { - variable?: string; - elementOptions?: "compilerOptions" | "typeAcquisition" | "extends"; -} - -export type DeclarationGroup = "commonOptionsWithBuild" | "optionsForCompiler"; - -export interface CompilerOption { - name: string; - type: CompilerOptionType; - goName?: string; - internal?: boolean; - deprecated?: boolean; - section?: string; - comment?: string; - pathKind?: PathKind; - parseAliases?: string[]; - declaration?: DeclarationMetadata & { - group: DeclarationGroup; - /** Additional short aliases without repeated help text. */ - extraShortNames?: string[]; - }; - jsconfigDefault?: string | number | boolean; - /** Additional exclusion beyond undeclared options and command-line/output-formatting categories. */ - showConfig?: false; - transpile?: { - value: boolean | "clear"; - declarationValue?: boolean | "preserve"; - /** Preserve the caller's value when the named boolean option is true. */ - unless?: string; - }; -} - -export interface EnumMap { - goName: string; - values: { name: string; value: GoValue; }[]; - deprecatedKeys?: string[]; - /** Removed values retained only in configuration schemas, always deprecated. */ - schemaOnlyValues?: string[]; -} - -export type SchemaOnlyOption = { - name: string; - description: string; -} & ({ type: "boolean" | "string"; } | { type: "enum"; values: string[]; }); - -export interface OptionEnum { - name: string; - api?: boolean; - /** Generate a String method that rejects zero and unknown values. */ - stringer?: "name" | { enumMap: string; }; - members: { - name: string; - value: number | string; - comment?: string; - trailingComment?: string; - excludeFromAPI?: boolean; - lib?: string; - libComment?: string; - moduleResolution?: string; - }[]; -} - -export interface OptionsModel { - compilerOptions: CompilerOption[]; - /** Removed options retained only in configuration schemas, always deprecated. */ - schemaOnlyOptions: SchemaOnlyOption[]; - declarationOrder: Record; - typeAcquisition: StoredDeclaration[]; - buildOptions: (Declaration & { field?: StoredDeclaration["field"]; })[]; - buildOptionFieldOrder: string[]; - rootOptions: RootDeclaration[]; - elements: Record; - enumMaps: Record; - enums: OptionEnum[]; -} - -export function optionKind(option: CompilerOption): OptionKind { - switch (option.type) { - case "Tristate": - return "Boolean"; - case "string": - return "String"; - case "*int": - return "Number"; - case "[]string": - case "[]PluginImport": - return "List"; - case "*collections.OrderedMap[string, []string]": - return "Object"; - default: - return "Enum"; - } -} - -export function fieldName(option: CompilerOption): string { - return option.goName ?? option.name[0].toUpperCase() + option.name.slice(1); -} +/** Metadata shared by the compiler options, declaration, and config schema generators. */ + +import type messages from "../../../tsc/internal/diagnostics/diagnosticMessages.json"; + +export interface DiagnosticMessage { + go: `diagnostics.${string}`; + text: keyof typeof messages; +} + +export function diagnostic(text: keyof typeof messages): DiagnosticMessage { + const special: Record = { "*": "_Asterisk", "/": "_Slash", ":": "_Colon" }; + let name = [...text].map(char => special[char] ?? (/[\p{L}\p{Nd}]/u.test(char) ? char : "_")).join("") + .replace(/_+/g, "_").replace(/^_([^0-9])/, "$1").replace(/_+$/, ""); + if (!/^\p{Lu}/u.test(name)) name = (name.startsWith("_") ? "X" : "X_") + name; + return { go: `diagnostics.${name}`, text }; +} + +export type GoValue = string | number | boolean | DiagnosticMessage | { go: `core.${string}`; }; +export type OptionKind = "Boolean" | "String" | "Number" | "Object" | "List" | "ListOrElement" | "Enum"; +export type PathKind = "file" | "directory" | "fileOrDirectory" | "sourceMapLocation" | "fileSpec" | "pathPattern" | "resolvedPathPattern" | "configLocator"; +export type CompilerOptionType = + | "Tristate" + | "string" + | "*int" + | "[]string" + | "[]PluginImport" + | "*collections.OrderedMap[string, []string]" + | "JsxEmit" + | "ModuleKind" + | "ModuleResolutionKind" + | "ModuleDetectionKind" + | "NewLineKind" + | "ScriptTarget"; + +export interface DeclarationMetadata { + shortName?: string; + isFilePath?: boolean; + pathKind?: PathKind; + isTSConfigOnly?: boolean; + isCommandLineOnly?: boolean; + description?: DiagnosticMessage; + schemaDescription?: string; + /** TSConfig reference anchor for schema hovers; defaults to the option name. False omits the link. */ + documentationAnchor?: string | false; + defaultValueDescription?: GoValue; + showInSimplifiedHelpView?: boolean; + category?: DiagnosticMessage; + extraValidation?: "locale"; + minValue?: number; + /** Defaults to isFilePath for compiler options; false explicitly disables substitution. */ + allowConfigDirTemplateSubstitution?: boolean; + affectsDeclarationPath?: boolean; + affectsSemanticDiagnostics?: boolean; + affectsBuildInfo?: boolean; + affectsEmit?: boolean; + strictFlag?: boolean; + listPreserveFalsyValues?: boolean; +} + +export interface Declaration extends DeclarationMetadata { + name: string; + kind: OptionKind; + jsconfigDefault?: boolean; +} + +export interface StoredDeclaration extends Declaration { + field: { name: string; type: CompilerOptionType; section?: string; }; +} + +export interface RootDeclaration extends Declaration { + variable?: string; + elementOptions?: "compilerOptions" | "typeAcquisition" | "extends"; +} + +export type DeclarationGroup = "commonOptionsWithBuild" | "optionsForCompiler"; + +export interface CompilerOption { + name: string; + type: CompilerOptionType; + goName?: string; + internal?: boolean; + deprecated?: boolean; + section?: string; + comment?: string; + pathKind?: PathKind; + parseAliases?: string[]; + declaration?: DeclarationMetadata & { + group: DeclarationGroup; + /** Additional short aliases without repeated help text. */ + extraShortNames?: string[]; + }; + jsconfigDefault?: string | number | boolean; + /** Additional exclusion beyond undeclared options and command-line/output-formatting categories. */ + showConfig?: false; + transpile?: { + value: boolean | "clear"; + declarationValue?: boolean | "preserve"; + /** Preserve the caller's value when the named boolean option is true. */ + unless?: string; + }; +} + +export interface EnumMap { + goName: string; + values: { name: string; value: GoValue; }[]; + deprecatedKeys?: string[]; + /** Removed values retained only in configuration schemas, always deprecated. */ + schemaOnlyValues?: string[]; +} + +export type SchemaOnlyOption = { + name: string; + description: string; +} & ({ type: "boolean" | "string"; } | { type: "enum"; values: string[]; }); + +export interface OptionEnum { + name: string; + api?: boolean; + /** Generate a String method that rejects zero and unknown values. */ + stringer?: "name" | { enumMap: string; }; + members: { + name: string; + value: number | string; + comment?: string; + trailingComment?: string; + excludeFromAPI?: boolean; + lib?: string; + libComment?: string; + moduleResolution?: string; + }[]; +} + +export interface OptionsModel { + compilerOptions: CompilerOption[]; + /** Removed options retained only in configuration schemas, always deprecated. */ + schemaOnlyOptions: SchemaOnlyOption[]; + declarationOrder: Record; + typeAcquisition: StoredDeclaration[]; + buildOptions: (Declaration & { field?: StoredDeclaration["field"]; })[]; + buildOptionFieldOrder: string[]; + rootOptions: RootDeclaration[]; + elements: Record; + enumMaps: Record; + enums: OptionEnum[]; +} + +export function optionKind(option: CompilerOption): OptionKind { + switch (option.type) { + case "Tristate": + return "Boolean"; + case "string": + return "String"; + case "*int": + return "Number"; + case "[]string": + case "[]PluginImport": + return "List"; + case "*collections.OrderedMap[string, []string]": + return "Object"; + default: + return "Enum"; + } +} + +export function fieldName(option: CompilerOption): string { + return option.goName ?? option.name[0].toUpperCase() + option.name.slice(1); +} diff --git a/tools/scripts/tsc/options-schema.ts b/tools/scripts/tsc/options-schema.ts index cacc817c3349a..e3d972501cd6b 100644 --- a/tools/scripts/tsc/options-schema.ts +++ b/tools/scripts/tsc/options-schema.ts @@ -1,219 +1,219 @@ -import assert from "node:assert/strict"; -import { - type Declaration, - type GoValue, - optionKind, -} from "./options-model.ts"; -import { options } from "./options.ts"; - -export interface JSONSchema { - $schema?: string; - $comment?: string; - $ref?: string; - title?: string; - description?: string; - markdownDescription?: string; - type?: string | string[]; - properties?: Record; - definitions?: Record; - additionalProperties?: boolean | JSONSchema; - required?: string[]; - items?: JSONSchema; - anyOf?: JSONSchema[]; - allOf?: JSONSchema[]; - enum?: string[]; - enumDescriptions?: string[]; - pattern?: string; - default?: string | boolean | number; - minimum?: number; - minLength?: number; - deprecated?: boolean; - deprecationMessage?: string; - allowComments?: boolean; - allowTrailingCommas?: boolean; -} - -function nullable(schema: JSONSchema): JSONSchema { - return { anyOf: [schema, { type: "null" }] }; -} - -function enumSchema(name: string): JSONSchema { - const map = options.enumMaps[name]; - assert(map, `Missing enum map: ${name}`); - const keys = [...map.values.map(entry => entry.name), ...(map.schemaOnlyValues ?? [])]; - return stringEnumSchema(keys, [...(map.deprecatedKeys ?? []), ...(map.schemaOnlyValues ?? [])]); -} - -function stringEnumSchema(keys: string[], deprecatedKeys: string[] = []): JSONSchema { - assert(keys.length > 0, "Empty schema enum"); - assert.equal(new Set(keys).size, keys.length, "Duplicate schema enum values"); - assert(keys.every(key => key === key.toLowerCase()), "Schema enum values must be lowercase"); - const pattern = keys.map(key => [...key].map(char => /[a-z]/.test(char) ? `[${char.toUpperCase()}${char}]` : char.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("")).join("|"); - const suggestions: JSONSchema = { enum: keys }; - if (deprecatedKeys.length) { - suggestions.enumDescriptions = keys.map(key => deprecatedKeys.includes(key) ? "Deprecated." : ""); - } - // Keep enum completions while accepting every casing supported by the parser. - return { type: "string", anyOf: [suggestions, { pattern: `^(${pattern})$` }] }; -} - -function defaultValue(value: GoValue | undefined, name: string): string | number | boolean | undefined { - // Help text may wrap a literal string default in a Markdown code span. - if (typeof value === "string") return value.replace(/^`([^`]*)`$/, "$1"); - if (value === undefined || typeof value !== "object") return value; - if ("text" in value || value.go === "core.TSUnknown") return undefined; - let constant = value.go; - if (constant === "core.ScriptTargetLatestStandard") { - const target = options.enums.find(enumDef => enumDef.name === "ScriptTarget")?.members.find(member => member.name === "LatestStandard"); - assert(target, "Missing ScriptTargetLatestStandard"); - constant = `core.ScriptTarget${target.value}`; - } - const entry = options.enumMaps[name]?.values.find(entry => typeof entry.value === "object" && entry.value.go === constant); - assert(entry, `No schema default for ${name}: ${constant}`); - return entry.name; -} - -function valueSchema(declaration: Declaration): JSONSchema { - switch (declaration.kind) { - case "Boolean": - return { type: "boolean" }; - case "String": - return { type: "string" }; - case "Number": - return { type: "number", ...(declaration.minValue !== undefined ? { minimum: declaration.minValue } : {}) }; - case "Enum": - return enumSchema(declaration.name); - case "List": - case "ListOrElement": { - const element = options.elements[declaration.name]; - assert(element, `Missing list element: ${declaration.name}`); - const items = valueSchema(element); - const array: JSONSchema = { type: "array", items }; - return declaration.kind === "List" ? array : { anyOf: [items, array] }; - } - case "Object": - if (declaration.name === "paths") { - return { type: "object", additionalProperties: { type: "array", items: { type: "string" } } }; - } - if (declaration.name === "plugin") { - return { type: "object", properties: { name: { type: "string" } } }; - } - if (declaration.name === "references") { - return { - type: "object", - properties: { path: { type: "string", minLength: 1 }, circular: { type: "boolean" } }, - required: ["path"], - }; - } - if (declaration.name === "contentMappers") { - return { - type: "object", - properties: { - package: { type: "string", minLength: 1 }, - extensions: { type: "array", items: { type: "string" } }, - options: { type: "object" }, - }, - required: ["package", "extensions"], - additionalProperties: false, - }; - } - throw new Error(`Missing object schema: ${declaration.name}`); - } -} - -function withDescription(schema: JSONSchema, description: string | undefined, anchor: string | false): JSONSchema { - if (description !== undefined) { - schema.description = description; - schema.markdownDescription = anchor === false - ? description - : `${description}\n\nSee the [TSConfig reference](https://www.typescriptlang.org/tsconfig/${anchor ? `#${anchor}` : ""}).`; - } - return schema; -} - -function optionSchema(declaration: Declaration): JSONSchema { - const schema = nullable(valueSchema(declaration)); - if (declaration.schemaDescription !== undefined) schema.description = declaration.schemaDescription; - else if (declaration.description) schema.description = declaration.description.text; - const value = defaultValue(declaration.defaultValueDescription, declaration.name); - if (value !== undefined) schema.default = value; - const defaultDescription = declaration.defaultValueDescription; - if (typeof defaultDescription === "object" && "text" in defaultDescription) { - schema.description = [schema.description, `Default: ${defaultDescription.text}`].filter(Boolean).join("\n\n"); - } - return withDescription(schema, schema.description, declaration.documentationAnchor ?? declaration.name); -} - -function optionObject(properties: Record) { - return { type: ["object", "null"], properties, additionalProperties: true }; -} - -export function generateConfigSchema(kind: "tsconfig" | "jsconfig") { - const compilerProperties: Record = {}; - for (const option of options.compilerOptions) { - const declaration = option.declaration; - if (!declaration || declaration.isCommandLineOnly || declaration.category?.go === "diagnostics.Command_line_Options") continue; - const schema = optionSchema({ - name: option.name, - kind: optionKind(option), - ...declaration, - ...(kind === "jsconfig" && option.jsconfigDefault !== undefined ? { defaultValueDescription: option.jsconfigDefault } : {}), - }); - if (option.deprecated) { - schema.deprecated = true; - schema.deprecationMessage = "This compiler option is deprecated."; - } - compilerProperties[option.name] = schema; - } - for (const option of options.schemaOnlyOptions) { - assert(!options.compilerOptions.some(current => current.name === option.name), `Schema-only option also exists in compiler options: ${option.name}`); - assert(!Object.hasOwn(compilerProperties, option.name), `Duplicate schema-only option: ${option.name}`); - const schema = nullable(option.type === "enum" ? stringEnumSchema(option.values) : { type: option.type }); - schema.deprecated = true; - schema.deprecationMessage = "This option has been removed from TypeScript. It is retained in the schema for historical configurations."; - compilerProperties[option.name] = withDescription(schema, option.description, option.name); - } - const acquisitionProperties = Object.fromEntries(options.typeAcquisition.map(option => [ - option.name, - optionSchema({ - documentationAnchor: "typeAcquisition", - ...option, - ...(kind === "jsconfig" && option.jsconfigDefault !== undefined ? { defaultValueDescription: option.jsconfigDefault } : {}), - }), - ])); - const descriptions: Record = { - compilerOptions: "Options for the TypeScript compiler.", - typeAcquisition: "Options for automatic type acquisition in JavaScript projects.", - extends: "Configuration file or files to inherit from. Later entries take precedence. Relative paths are resolved relative to the configuration file in which they occur.", - files: "Files to include in the project, in addition to files matched by include.", - include: "File names or glob patterns to include. Defaults to all supported files when neither files nor include is specified.", - exclude: "File names or glob patterns excluded from include. Does not exclude files brought in by imports, references, types, or files.", - references: "Referenced projects. Each path identifies a configuration file or a directory containing one.", - compileOnSave: "Compile this project when a file is saved in a supporting editor.", - contentMappers: "External content mapper packages and the file extensions they handle. Execution must be enabled separately with --runExternalCode.", - }; - const properties: Record = { - $schema: { type: "string", description: "The JSON schema used to validate this configuration." }, - }; - for (const option of options.rootOptions) { - const schema = option.elementOptions && option.elementOptions !== "extends" - ? { allOf: [{ $ref: `#/definitions/${option.elementOptions}` }] } - : option.name === "extends" ? valueSchema(option) : optionSchema(option); - properties[option.name] = withDescription(schema, option.schemaDescription ?? descriptions[option.name], option.documentationAnchor ?? option.name); - } - return { - $schema: "http://json-schema.org/draft-07/schema#", - $comment: "Generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT.", - title: kind === "tsconfig" ? "TypeScript configuration" : "JavaScript configuration", - type: "object", - allowComments: true, - allowTrailingCommas: true, - properties, - // Root properties are extensible so tools can use their own config sections. - additionalProperties: true, - definitions: { - compilerOptions: optionObject(compilerProperties), - typeAcquisition: optionObject(acquisitionProperties), - }, - }; -} +import assert from "node:assert/strict"; +import { + type Declaration, + type GoValue, + optionKind, +} from "./options-model.ts"; +import { options } from "./options.ts"; + +export interface JSONSchema { + $schema?: string; + $comment?: string; + $ref?: string; + title?: string; + description?: string; + markdownDescription?: string; + type?: string | string[]; + properties?: Record; + definitions?: Record; + additionalProperties?: boolean | JSONSchema; + required?: string[]; + items?: JSONSchema; + anyOf?: JSONSchema[]; + allOf?: JSONSchema[]; + enum?: string[]; + enumDescriptions?: string[]; + pattern?: string; + default?: string | boolean | number; + minimum?: number; + minLength?: number; + deprecated?: boolean; + deprecationMessage?: string; + allowComments?: boolean; + allowTrailingCommas?: boolean; +} + +function nullable(schema: JSONSchema): JSONSchema { + return { anyOf: [schema, { type: "null" }] }; +} + +function enumSchema(name: string): JSONSchema { + const map = options.enumMaps[name]; + assert(map, `Missing enum map: ${name}`); + const keys = [...map.values.map(entry => entry.name), ...(map.schemaOnlyValues ?? [])]; + return stringEnumSchema(keys, [...(map.deprecatedKeys ?? []), ...(map.schemaOnlyValues ?? [])]); +} + +function stringEnumSchema(keys: string[], deprecatedKeys: string[] = []): JSONSchema { + assert(keys.length > 0, "Empty schema enum"); + assert.equal(new Set(keys).size, keys.length, "Duplicate schema enum values"); + assert(keys.every(key => key === key.toLowerCase()), "Schema enum values must be lowercase"); + const pattern = keys.map(key => [...key].map(char => /[a-z]/.test(char) ? `[${char.toUpperCase()}${char}]` : char.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("")).join("|"); + const suggestions: JSONSchema = { enum: keys }; + if (deprecatedKeys.length) { + suggestions.enumDescriptions = keys.map(key => deprecatedKeys.includes(key) ? "Deprecated." : ""); + } + // Keep enum completions while accepting every casing supported by the parser. + return { type: "string", anyOf: [suggestions, { pattern: `^(${pattern})$` }] }; +} + +function defaultValue(value: GoValue | undefined, name: string): string | number | boolean | undefined { + // Help text may wrap a literal string default in a Markdown code span. + if (typeof value === "string") return value.replace(/^`([^`]*)`$/, "$1"); + if (value === undefined || typeof value !== "object") return value; + if ("text" in value || value.go === "core.TSUnknown") return undefined; + let constant = value.go; + if (constant === "core.ScriptTargetLatestStandard") { + const target = options.enums.find(enumDef => enumDef.name === "ScriptTarget")?.members.find(member => member.name === "LatestStandard"); + assert(target, "Missing ScriptTargetLatestStandard"); + constant = `core.ScriptTarget${target.value}`; + } + const entry = options.enumMaps[name]?.values.find(entry => typeof entry.value === "object" && entry.value.go === constant); + assert(entry, `No schema default for ${name}: ${constant}`); + return entry.name; +} + +function valueSchema(declaration: Declaration): JSONSchema { + switch (declaration.kind) { + case "Boolean": + return { type: "boolean" }; + case "String": + return { type: "string" }; + case "Number": + return { type: "number", ...(declaration.minValue !== undefined ? { minimum: declaration.minValue } : {}) }; + case "Enum": + return enumSchema(declaration.name); + case "List": + case "ListOrElement": { + const element = options.elements[declaration.name]; + assert(element, `Missing list element: ${declaration.name}`); + const items = valueSchema(element); + const array: JSONSchema = { type: "array", items }; + return declaration.kind === "List" ? array : { anyOf: [items, array] }; + } + case "Object": + if (declaration.name === "paths") { + return { type: "object", additionalProperties: { type: "array", items: { type: "string" } } }; + } + if (declaration.name === "plugin") { + return { type: "object", properties: { name: { type: "string" } } }; + } + if (declaration.name === "references") { + return { + type: "object", + properties: { path: { type: "string", minLength: 1 }, circular: { type: "boolean" } }, + required: ["path"], + }; + } + if (declaration.name === "contentMappers") { + return { + type: "object", + properties: { + package: { type: "string", minLength: 1 }, + extensions: { type: "array", items: { type: "string" } }, + options: { type: "object" }, + }, + required: ["package", "extensions"], + additionalProperties: false, + }; + } + throw new Error(`Missing object schema: ${declaration.name}`); + } +} + +function withDescription(schema: JSONSchema, description: string | undefined, anchor: string | false): JSONSchema { + if (description !== undefined) { + schema.description = description; + schema.markdownDescription = anchor === false + ? description + : `${description}\n\nSee the [TSConfig reference](https://www.typescriptlang.org/tsconfig/${anchor ? `#${anchor}` : ""}).`; + } + return schema; +} + +function optionSchema(declaration: Declaration): JSONSchema { + const schema = nullable(valueSchema(declaration)); + if (declaration.schemaDescription !== undefined) schema.description = declaration.schemaDescription; + else if (declaration.description) schema.description = declaration.description.text; + const value = defaultValue(declaration.defaultValueDescription, declaration.name); + if (value !== undefined) schema.default = value; + const defaultDescription = declaration.defaultValueDescription; + if (typeof defaultDescription === "object" && "text" in defaultDescription) { + schema.description = [schema.description, `Default: ${defaultDescription.text}`].filter(Boolean).join("\n\n"); + } + return withDescription(schema, schema.description, declaration.documentationAnchor ?? declaration.name); +} + +function optionObject(properties: Record) { + return { type: ["object", "null"], properties, additionalProperties: true }; +} + +export function generateConfigSchema(kind: "tsconfig" | "jsconfig") { + const compilerProperties: Record = {}; + for (const option of options.compilerOptions) { + const declaration = option.declaration; + if (!declaration || declaration.isCommandLineOnly || declaration.category?.go === "diagnostics.Command_line_Options") continue; + const schema = optionSchema({ + name: option.name, + kind: optionKind(option), + ...declaration, + ...(kind === "jsconfig" && option.jsconfigDefault !== undefined ? { defaultValueDescription: option.jsconfigDefault } : {}), + }); + if (option.deprecated) { + schema.deprecated = true; + schema.deprecationMessage = "This compiler option is deprecated."; + } + compilerProperties[option.name] = schema; + } + for (const option of options.schemaOnlyOptions) { + assert(!options.compilerOptions.some(current => current.name === option.name), `Schema-only option also exists in compiler options: ${option.name}`); + assert(!Object.hasOwn(compilerProperties, option.name), `Duplicate schema-only option: ${option.name}`); + const schema = nullable(option.type === "enum" ? stringEnumSchema(option.values) : { type: option.type }); + schema.deprecated = true; + schema.deprecationMessage = "This option has been removed from TypeScript. It is retained in the schema for historical configurations."; + compilerProperties[option.name] = withDescription(schema, option.description, option.name); + } + const acquisitionProperties = Object.fromEntries(options.typeAcquisition.map(option => [ + option.name, + optionSchema({ + documentationAnchor: "typeAcquisition", + ...option, + ...(kind === "jsconfig" && option.jsconfigDefault !== undefined ? { defaultValueDescription: option.jsconfigDefault } : {}), + }), + ])); + const descriptions: Record = { + compilerOptions: "Options for the TypeScript compiler.", + typeAcquisition: "Options for automatic type acquisition in JavaScript projects.", + extends: "Configuration file or files to inherit from. Later entries take precedence. Relative paths are resolved relative to the configuration file in which they occur.", + files: "Files to include in the project, in addition to files matched by include.", + include: "File names or glob patterns to include. Defaults to all supported files when neither files nor include is specified.", + exclude: "File names or glob patterns excluded from include. Does not exclude files brought in by imports, references, types, or files.", + references: "Referenced projects. Each path identifies a configuration file or a directory containing one.", + compileOnSave: "Compile this project when a file is saved in a supporting editor.", + contentMappers: "External content mapper packages and the file extensions they handle. Execution must be enabled separately with --runExternalCode.", + }; + const properties: Record = { + $schema: { type: "string", description: "The JSON schema used to validate this configuration." }, + }; + for (const option of options.rootOptions) { + const schema = option.elementOptions && option.elementOptions !== "extends" + ? { allOf: [{ $ref: `#/definitions/${option.elementOptions}` }] } + : option.name === "extends" ? valueSchema(option) : optionSchema(option); + properties[option.name] = withDescription(schema, option.schemaDescription ?? descriptions[option.name], option.documentationAnchor ?? option.name); + } + return { + $schema: "http://json-schema.org/draft-07/schema#", + $comment: "Generated by tools/scripts/tsc/generate-options.ts. DO NOT EDIT.", + title: kind === "tsconfig" ? "TypeScript configuration" : "JavaScript configuration", + type: "object", + allowComments: true, + allowTrailingCommas: true, + properties, + // Root properties are extensible so tools can use their own config sections. + additionalProperties: true, + definitions: { + compilerOptions: optionObject(compilerProperties), + typeAcquisition: optionObject(acquisitionProperties), + }, + }; +} diff --git a/tools/scripts/tsc/options.test.ts b/tools/scripts/tsc/options.test.ts index 8d647eeb2d906..ffff2d34c7920 100644 --- a/tools/scripts/tsc/options.test.ts +++ b/tools/scripts/tsc/options.test.ts @@ -1,525 +1,525 @@ -import assert from "node:assert/strict"; -import fs from "node:fs"; -import path from "node:path"; -import { test } from "node:test"; -import { repoRoot } from "../gen/utils.mts"; -import { - enumDefs, - generateEnum, -} from "./generate-enums.ts"; -import { - compilerDeclarations, - generateCompilerOptionsAPI, - generateConfigSchema, - generateOptionComparisons, - generateOptions, - generatePrepareCompilerOptionsAPI, - validateOptions, -} from "./generate-options.ts"; -import { - diagnostic, - optionKind, -} from "./options-model.ts"; -import type { JSONSchema } from "./options-schema.ts"; -import { options } from "./options.ts"; - -test("option metadata is valid", () => { - validateOptions(options); -}); - -test("semantic diagnostic options must be stored in build info", () => { - const model = structuredClone(options); - model.compilerOptions.find(option => option.name === "noImplicitAny")!.declaration!.affectsBuildInfo = false; - assert.throws(() => validateOptions(model), /Semantic diagnostics must affect build info: noImplicitAny/); -}); - -test("compiler test variations accept finite options without requiring affects metadata", () => { - const source = generateOptions().get("tsc/internal/testrunner/options_generated.go")!; - for (const name of ["strict", "module", "noCheck", "preserveSymlinks", "noEmit", "isolatedModules"]) { - assert(source.includes(`"${name.toLowerCase()}",`), name); - } - for (const name of ["lib", "maxNodeModuleJsDepth", "outDir", "watch", "configFilePath"]) { - assert(!source.includes(`"${name.toLowerCase()}",`), name); - } -}); - -test("help short aliases preserve parsing metadata without duplicating help text", () => { - const help = compilerDeclarations().filter(option => option.name === "help"); - assert.deepEqual(help.map(option => option.shortName), ["h", "?"]); - assert.equal(help[0].description?.text, "Print this message."); - assert.equal(help[0].showInSimplifiedHelpView, true); - assert.equal(help[1].description, undefined); - assert.equal(help[1].showInSimplifiedHelpView, undefined); - for (const option of help) { - assert.equal(option.kind, "Boolean"); - assert.equal(option.isCommandLineOnly, true); - assert.equal(option.group, "commonOptionsWithBuild"); - } -}); - -test("API compiler options are generated directly from option metadata", () => { - const source = generateCompilerOptionsAPI(); - for ( - const field of [ - "allowJs?: boolean | undefined;", - "target?: ScriptTarget | undefined;", - "maxNodeModuleJsDepth?: number | undefined;", - "paths?: Record | undefined;", - "plugins?: PluginImport[] | undefined;", - "configFilePath?: RootedFilePath | undefined;", - ] - ) assert(source.includes(field), field); - assert.match(source, /export interface PluginImport \{\s*name: string;/); - assert.doesNotMatch(source, /baseUrl\?:|outFile\?:|watch\?:|help\?:|configFile\?:/); - const model = structuredClone(options); - model.compilerOptions.push({ name: "newAPIOption", type: "Tristate" }); - assert.match(generateCompilerOptionsAPI(model), /newAPIOption\?: boolean \| undefined;/); -}); - -test("API compiler option path preparation is generated directly from option metadata", () => { - const source = generatePrepareCompilerOptionsAPI(); - assert.match(source, /configFilePath: configFilePath === undefined \? undefined : toRootedFilePath\(configFilePath, currentDirectory\)/); - assert.match(source, /outDir: outDir === undefined \? undefined : toRootedDirectoryPath\(outDir, currentDirectory\)/); - assert.match(source, /project: project === undefined \? undefined : toRootedPath\(project, currentDirectory\)/); - assert.match(source, /rootDirs: rootDirs\?\.map\(value => toRootedDirectoryPath\(value, currentDirectory\)\)/); - assert.match(source, /baseUrl: baseUrl === undefined \? undefined : toRootedDirectoryPath\(baseUrl, currentDirectory\)/); - assert.match(source, /generateTrace: generateTrace === undefined \? undefined : toRootedDirectoryPath\(generateTrace, currentDirectory\)/); - assert.match(source, /outFile: outFile === undefined \? undefined : toRootedFilePath\(outFile, currentDirectory\)/); - assert.match(source, /pprofDir: pprofDir === undefined \? undefined : toRootedDirectoryPath\(pprofDir, currentDirectory\)/); - - const model = structuredClone(options); - model.compilerOptions.push({ name: "newPathOption", type: "string", pathKind: "file" }); - assert.match(generatePrepareCompilerOptionsAPI(model), /newPathOption: newPathOption === undefined \? undefined : toRootedFilePath\(newPathOption, currentDirectory\)/); -}); - -test("diagnostic references use checked message text and preserve Go names", () => { - assert.deepEqual(diagnostic("JavaScript Support"), { go: "diagnostics.JavaScript_Support", text: "JavaScript Support" }); - assert.deepEqual(diagnostic("'{0}' expected."), { go: "diagnostics.X_0_expected", text: "'{0}' expected." }); - // @ts-expect-error Diagnostic text must exist in diagnosticMessages.json. - diagnostic("Not a real diagnostic."); -}); - -test("explicit option orders reject duplicates, unknown names, and omissions", () => { - for ( - const select of [ - (model: typeof options) => model.declarationOrder.commonOptionsWithBuild, - (model: typeof options) => model.declarationOrder.optionsForCompiler, - (model: typeof options) => model.buildOptionFieldOrder, - ] - ) { - const duplicate = structuredClone(options); - const duplicateOrder = select(duplicate); - duplicateOrder.push(duplicateOrder[0]); - assert.throws(() => validateOptions(duplicate), /Duplicate option in .* order/); - - const unknown = structuredClone(options); - select(unknown)[0] = "missingOption"; - assert.throws(() => validateOptions(unknown), /Unknown option in .* order: missingOption/); - - const missing = structuredClone(options); - select(missing).pop(); - assert.throws(() => validateOptions(missing), /Missing options in .* order/); - } - const wrongGroup = structuredClone(options); - wrongGroup.declarationOrder.optionsForCompiler[0] = "watch"; - assert.throws(() => validateOptions(wrongGroup), /Unknown option in optionsForCompiler order: watch/); -}); - -test("option TypeScript enums are generated without reading their Go definitions", () => { - for (const optionEnum of options.enums.filter(enumDef => enumDef.api)) { - const def = enumDefs.find(def => def.name === optionEnum.name); - assert(def, optionEnum.name); - const { members, code } = generateEnum({ ...def, goFile: "does-not-exist.go" }); - assert.deepEqual( - members, - optionEnum.members.filter(member => !member.excludeFromAPI).map(member => ({ - name: member.name, - value: String(member.value), - })), - ); - assert.match(code, /^\/\/ Code generated by tools\/scripts\/tsc\/generate-enums.ts from tools\/scripts\/tsc\/options.ts\./); - assert.doesNotMatch(code, /does-not-exist|optionenums_generated/); - if (def.name === "ScriptTarget") { - assert(members.some(member => member.name === "Latest" && member.value === "ESNext")); - for (const name of ["None", "ES5", "LatestStandard"]) assert(!members.some(member => member.name === name), name); - } - } -}); - -test("other TypeScript enums retain their Go sources", () => { - const def = enumDefs.find(def => def.name === "SymbolFlags")!; - const { members, code } = generateEnum(def); - assert(members.length > 0); - assert.match(code, /from tsc\/internal\/ast\/symbolflags.go/); - assert.throws(() => generateEnum({ ...def, goFile: "does-not-exist.go" }), /ENOENT/); -}); - -test("SyntaxKind is generated without reading its Go definition", () => { - const def = enumDefs.find(def => def.name === "SyntaxKind")!; - const { members, code } = generateEnum({ ...def, goFile: "does-not-exist.go" }); - assert.match(code, /^\/\/ Code generated by tools\/scripts\/tsc\/generate-enums.ts from tools\/scripts\/tsc\/ast.json\./); - assert.deepEqual(members[0], { name: "Unknown", value: "0" }); - assert.deepEqual(members[1], { name: "EndOfFile", value: "1" }); - const countIndex = members.findIndex(member => member.name === "Count"); - assert(countIndex > 0); - assert.equal(members[countIndex].value, String(countIndex)); - assert(members.some(member => member.name === "FirstAssignment" && member.value === "EqualsToken")); - assert(members.some(member => member.name === "FirstJSDocTagNode" && member.value === "JSDocUnknownTag")); -}); - -test("metadata enum artifacts are current and use the shared alias ordering", () => { - for (const def of enumDefs.filter(def => def.metadata)) { - const { code } = generateEnum(def); - const name = def.name[0].toLowerCase() + def.name.slice(1); - const actual = fs.readFileSync(path.join(repoRoot, def.outDir, `${name}.enum.ts`), "utf8"); - assert.equal(actual.replaceAll("\r\n", "\n"), code, def.name); - } - const def = enumDefs.find(def => def.name === "SyntaxKind")!; - const { members } = generateEnum({ - ...def, - goFile: "does-not-exist.go", - metadata: { - file: "metadata.json", - members: [{ name: "Alias", value: "Value" }, { name: "Value", value: "7" }], - }, - }); - assert.deepEqual(members, [{ name: "Value", value: "7" }, { name: "Alias", value: "Value" }]); -}); - -test("option comparisons reject types that require deep equality", () => { - for (const name of ["maxNodeModuleJsDepth", "types", "paths", "plugins"]) { - const model = structuredClone(options); - model.compilerOptions.find(option => option.name === name)!.declaration!.affectsEmit = true; - assert.throws(() => generateOptionComparisons(model), new RegExp(`Unsupported comparison type for ${name}:`)); - } -}); - -test("option section headings are detached line comments", () => { - const generated = generateOptions(); - const go = generated.get("tsc/internal/core/options_generated.go")!; - assert.match(go, /\n\/\/ Internal fields\n\nConfigFilePath /); - assert.match(go, /\n\/\/ Internal fields\n\nClean /); - const api = generated.get("packages/typescript/src/api/compilerOptions.generated.ts")!; - assert.match(api, /\n\/\/ Internal fields\n\nconfigFilePath\?:/); - assert.doesNotMatch(api, /\/\*\* Internal fields/); -}); - -test("all generated options artifacts are checked in and current", () => { - for (const [file, content] of generateOptions()) { - const actual = fs.readFileSync(path.join(repoRoot, file), "utf8"); - if (file.endsWith(".json")) { - assert.deepEqual(JSON.parse(actual), JSON.parse(content), file); - } - else { - // Ignore formatting, but preserve the contents of string literals and comments. - const tokens = (source: string) => source.match(/"(?:\\.|[^"\\])*"|`[^`]*`|\/\/[^\r\n]*|[^\s]/g); - assert.deepEqual(tokens(actual), tokens(content), file); - } - } -}); - -test("schemas retain historical options as deprecated", () => { - const historical = { - charset: ["utf8", false], - out: ["bundle.js", false], - noImplicitUseStrict: [true, "true"], - noStrictGenericChecks: [true, "true"], - keyofStringsOnly: [true, "true"], - suppressExcessPropertyErrors: [true, "true"], - suppressImplicitAnyIndexErrors: [true, "true"], - preserveValueImports: [true, "true"], - importsNotUsedAsValues: ["preserve", "invalid"], - }; - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - for (const [name, [valid, invalid]] of Object.entries(historical)) { - const property = schema.definitions.compilerOptions.properties[name]; - assert(property, name); - assert.equal(property.deprecated, true, name); - assert(property.deprecationMessage, name); - assert(property.markdownDescription, name); - assert(accepts(property, valid, schema), name); - assert(accepts(property, null, schema), name); - assert(!accepts(property, invalid, schema), name); - } - for (const [name, value] of [["target", "es3"], ["target", "es5"], ["module", "none"]]) { - const property = schema.definitions.compilerOptions.properties[name]; - assert(accepts(property, value, schema), `${name}: ${value}`); - assert(accepts(property, value.toUpperCase(), schema), `${name}: ${value.toUpperCase()}`); - const suggestions = property.anyOf![0].anyOf![0]; - assert.equal(suggestions.enumDescriptions![suggestions.enum!.indexOf(value)], "Deprecated."); - } - for (const value of ["remove", "preserve", "error", "REMOVE", "PrEsErVe", "ERROR"]) { - assert(accepts(schema.definitions.compilerOptions.properties.importsNotUsedAsValues, value, schema)); - } - const lib = schema.definitions.compilerOptions.properties.lib; - assert(accepts(lib, ["es2022.sharedmemory", "ES2022.SharedMemory"], schema)); - assert(!accepts(lib, ["es2022.sharedmemory.invalid"], schema)); - const suggestions = lib.anyOf![0].items!.anyOf![0]; - assert.equal(suggestions.enumDescriptions![suggestions.enum!.indexOf("es2022.sharedmemory")], "Deprecated."); - } -}); - -// Evaluate only the validation keywords emitted by this generator. Unknown keywords -// fail the test so new schema features must also get acceptance/rejection coverage. -function accepts(schema: JSONSchema, value: unknown, root: JSONSchema): boolean { - for (const key of Object.keys(schema)) { - assert( - [ - "$schema", - "$comment", - "$ref", - "title", - "description", - "markdownDescription", - "type", - "properties", - "definitions", - "additionalProperties", - "required", - "items", - "anyOf", - "allOf", - "enum", - "enumDescriptions", - "pattern", - "default", - "minimum", - "minLength", - "deprecated", - "deprecationMessage", - "allowComments", - "allowTrailingCommas", - ].includes(key), - `Unsupported schema keyword: ${key}`, - ); - } - if (schema.$ref) { - assert.match(schema.$ref, /^#\/definitions\/\w+$/); - const referenced = root.definitions?.[schema.$ref.slice("#/definitions/".length)]; - assert(referenced, `Missing reference: ${schema.$ref}`); - return accepts(referenced, value, root); - } - if (schema.anyOf && !schema.anyOf.some(branch => accepts(branch, value, root))) return false; - if (schema.allOf && !schema.allOf.every(branch => accepts(branch, value, root))) return false; - if (schema.type) { - const types = Array.isArray(schema.type) ? schema.type : [schema.type]; - const type = value === null ? "null" : Array.isArray(value) ? "array" : typeof value; - if (!types.includes(type)) return false; - } - if (schema.enum && !schema.enum.some(item => item === value)) return false; - if (typeof value === "string") { - if (schema.pattern && !new RegExp(schema.pattern).test(value)) return false; - if (schema.minLength !== undefined && value.length < schema.minLength) return false; - } - if (typeof value === "number" && schema.minimum !== undefined && value < schema.minimum) return false; - if (Array.isArray(value) && schema.items && !value.every(item => accepts(schema.items!, item, root))) return false; - if (typeof value === "object" && value !== null && !Array.isArray(value)) { - if (schema.required?.some(name => !Object.hasOwn(value, name))) return false; - for (const [name, property] of Object.entries(value)) { - const child = schema.properties?.[name]; - if (child) { - if (!accepts(child, property, root)) return false; - } - else if (schema.additionalProperties === false) return false; - else if (typeof schema.additionalProperties === "object" && !accepts(schema.additionalProperties, property, root)) return false; - } - } - return true; -} - -test("root option documentation is outside draft-07 references", () => { - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - for (const name of ["compilerOptions", "typeAcquisition"]) { - const property = schema.properties[name]; - assert.equal(property.$ref, undefined, name); - assert.deepEqual(property.allOf, [{ $ref: `#/definitions/${name}` }]); - assert(property.description, name); - assert(property.markdownDescription, name); - } - } -}); - -test("schemas accept representative valid configs and reject malformed configs", () => { - const valid = [ - {}, - { compilerOptions: null, files: null, include: null, exclude: null, references: null, typeAcquisition: null }, - { compilerOptions: { strict: null, target: null, paths: null, types: null, maxNodeModuleJsDepth: null } }, - { extends: "./base.json", files: [] }, - { extends: ["./base.json", "some-package/tsconfig.json"], references: [{ path: "../project", circular: true }] }, - { compilerOptions: { target: "ESNext", module: "NodeNext", moduleResolution: "BUNDLER", jsx: "React-JSX", newLine: "LF" } }, - { compilerOptions: { paths: { "@/*": ["src/*"] }, plugins: [{ name: "some-plugin", customSetting: true }], moduleSuffixes: ["", ".native"] } }, - { typeAcquisition: { enable: true, include: ["node"], exclude: [] } }, - { contentMappers: [{ package: "mapper", extensions: [".vue"], options: { customSetting: true } }] }, - { "$schema": "./tsconfig.schema.json", "tool-specific": { anything: true } }, - ]; - const invalid = [ - null, - [], - true, - { extends: null }, - { extends: 1 }, - { extends: ["./base", false] }, - { files: ["file.ts", 1] }, - { compilerOptions: { strict: "true" } }, - { compilerOptions: { target: "es9999" } }, - { compilerOptions: { target: "es2025\n" } }, - { compilerOptions: { module: 99 } }, - { compilerOptions: { paths: { "@/*": "src/*" } } }, - { compilerOptions: { paths: { "@/*": [false] } } }, - { compilerOptions: { plugins: ["plugin"] } }, - { compilerOptions: { plugins: [{ name: false }] } }, - { compilerOptions: { maxNodeModuleJsDepth: "2" } }, - { typeAcquisition: { enable: "true" } }, - { typeAcquisition: { exclude: [false] } }, - { references: [{ path: false }] }, - { references: [{}] }, - { references: [{ path: "" }] }, - { references: [{ path: null }] }, - { contentMappers: [{ package: "", extensions: [] }] }, - { contentMappers: [{ package: "mapper" }] }, - { contentMappers: [{ package: "mapper", extensions: [1] }] }, - { contentMappers: [{ package: "mapper", extensions: [], options: null }] }, - ]; - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - for (const config of valid) assert(accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); - for (const config of invalid) assert(!accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); - } -}); - -test("schemas preserve SchemaStore's extensible and partial option objects", () => { - const configs = [ - { compilerOptions: { strictTypo: true, showConfig: true } }, - { typeAcquisition: { customSetting: true } }, - { compilerOptions: { plugins: [{}] } }, - { references: [{ path: "../project", customSetting: true }] }, - { "ts-node": { transpileOnly: true }, "buildOptions": { force: true } }, - ]; - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - for (const config of configs) assert(accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); - } -}); - -test("every enum value accepts mixed casing without broadening the accepted names", () => { - const schema = generateConfigSchema("tsconfig"); - for (const [name, map] of Object.entries(options.enumMaps)) { - const option = schema.definitions.compilerOptions.properties[name]; - assert(option, name); - const list = options.compilerOptions.some(option => option.name === name && optionKind(option) === "List"); - for (const entry of map.values) { - for (const text of [entry.name, entry.name.toUpperCase(), entry.name.replace(/[a-z]/g, (char, index: number) => index % 2 ? char.toUpperCase() : char)]) { - assert(accepts(option, list ? [text] : text, schema), `${name}: ${text}`); - } - for (const text of [`${entry.name}x`, `x${entry.name}`, `${entry.name}\n`, entry.name.replaceAll(".", "!")]) { - if (map.values.some(entry => entry.name === text)) continue; - assert(!accepts(option, list ? [text] : text, schema), `${name}: ${JSON.stringify(text)}`); - } - } - } -}); - -test("schema defaults are valid and conditional defaults stay descriptive", () => { - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - for (const definition of Object.values(schema.definitions)) { - for (const [name, property] of Object.entries(definition.properties)) { - if (property.default !== undefined) assert(accepts(property, property.default, schema), `${kind}: ${name}`); - } - } - assert.equal(schema.definitions.compilerOptions.properties.moduleResolution.default, undefined); - assert.match(schema.definitions.compilerOptions.properties.moduleResolution.description!, /Default:/); - const latestStandard = options.enums.find(enumDef => enumDef.name === "ScriptTarget")!.members.find(member => member.name === "LatestStandard")!.value; - assert.equal(schema.definitions.compilerOptions.properties.target.default, String(latestStandard).toLowerCase()); - for ( - const [name, value] of Object.entries({ - jsxFactory: "React.createElement", - newLine: "lf", - }) - ) { - assert.equal(schema.definitions.compilerOptions.properties[name].default, value, `${kind}: ${name}`); - } - } - assert.doesNotMatch(generateConfigSchema("jsconfig").definitions.compilerOptions.properties.allowJs.description!, /Default:.*false/); -}); - -test("schema hover documentation includes reference links and conditional defaults", () => { - for (const kind of ["tsconfig", "jsconfig"] as const) { - const schema = generateConfigSchema(kind); - const compiler = schema.definitions.compilerOptions.properties; - for (const [name, property] of Object.entries(compiler)) { - const declaration = options.compilerOptions.find(option => option.name === name)?.declaration - ?? options.schemaOnlyOptions.find(option => option.name === name); - assert(declaration, `${kind}: ${name}`); - if (!declaration.description) { - assert.equal(property.markdownDescription, undefined, `${kind}: ${name}`); - continue; - } - assert(property.description, `${kind}: ${name}`); - const markdown = property.markdownDescription; - assert(markdown, `${kind}: ${name}`); - assert(markdown.startsWith(property.description), `${kind}: ${name}`); - if (name === "deduplicatePackages" || name === "stableTypeOrdering") { - assert.equal(property.markdownDescription, property.description); - } - else { - assert(markdown.includes(`https://www.typescriptlang.org/tsconfig/#${name}`), `${kind}: ${name}`); - } - } - assert.match(compiler.moduleResolution.markdownDescription!, /Default:/); - for (const property of Object.values(schema.definitions.typeAcquisition.properties)) { - assert.match(property.markdownDescription!, /tsconfig\/#typeAcquisition/); - } - assert.match(schema.properties.include.markdownDescription!, /tsconfig\/#include/); - assert.equal(schema.properties.contentMappers.markdownDescription, schema.properties.contentMappers.description); - } -}); - -test("invalid metadata is rejected before generating files", () => { - const duplicate = structuredClone(options); - duplicate.compilerOptions.push(duplicate.compilerOptions[0]); - assert.throws(() => validateOptions(duplicate), /Duplicate compiler option/); - const missingEnum = structuredClone(options); - delete missingEnum.enumMaps.target; - assert.throws(() => validateOptions(missingEnum), /Missing enum map: target/); - const missingElement = structuredClone(options); - delete missingElement.elements.lib; - assert.throws(() => validateOptions(missingElement), /Missing list element: lib/); - const removedValidation = structuredClone(options); - // @ts-expect-error Only locale validation is supported. - removedValidation.elements.lib.extraValidation = "spec"; - assert.throws(() => validateOptions(removedValidation), /Invalid extra validation: spec/); - const missingConstant = structuredClone(options); - missingConstant.enumMaps.target.values[0].value = { go: "core.ScriptTargetMissing" }; - assert.throws(() => validateOptions(missingConstant), /Unknown enum constant/); - const invalidAlias = structuredClone(options); - invalidAlias.enums[0].members[0].value = "Missing"; - assert.throws(() => validateOptions(invalidAlias), /Unknown enum alias/); - const invalidTranspile = structuredClone(options); - invalidTranspile.compilerOptions[0].transpile = { value: true, unless: "missing" }; - assert.throws(() => validateOptions(invalidTranspile), /Unknown transpile condition/); -}); - -test("schemas include config options, not API-only or command-line-only fields", () => { - const schema = generateConfigSchema("tsconfig"); - const properties = schema.definitions.compilerOptions.properties; - for (const name of ["strict", "paths", "plugins", "lib", "target", "diagnostics", "pretty"]) { - assert.ok(properties[name], name); - } - for (const name of ["configFilePath", "pathsBasePath", "noDtsResolution", "help", "watch", "showConfig", "runExternalCode"]) { - assert.equal(properties[name], undefined, name); - } -}); - -test("jsconfig defaults are distinct from tsconfig defaults", () => { - const ts = generateConfigSchema("tsconfig"); - const js = generateConfigSchema("jsconfig"); - for (const [name, value] of Object.entries({ allowJs: true, noEmit: true, skipLibCheck: true, maxNodeModuleJsDepth: 2 })) { - assert.equal(js.definitions.compilerOptions.properties[name].default, value); - assert.notEqual(ts.definitions.compilerOptions.properties[name].default, value); - } - assert.equal(js.definitions.typeAcquisition.properties.enable.default, true); - assert.equal(ts.definitions.typeAcquisition.properties.enable.default, false); -}); +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { test } from "node:test"; +import { repoRoot } from "../gen/utils.mts"; +import { + enumDefs, + generateEnum, +} from "./generate-enums.ts"; +import { + compilerDeclarations, + generateCompilerOptionsAPI, + generateConfigSchema, + generateOptionComparisons, + generateOptions, + generatePrepareCompilerOptionsAPI, + validateOptions, +} from "./generate-options.ts"; +import { + diagnostic, + optionKind, +} from "./options-model.ts"; +import type { JSONSchema } from "./options-schema.ts"; +import { options } from "./options.ts"; + +test("option metadata is valid", () => { + validateOptions(options); +}); + +test("semantic diagnostic options must be stored in build info", () => { + const model = structuredClone(options); + model.compilerOptions.find(option => option.name === "noImplicitAny")!.declaration!.affectsBuildInfo = false; + assert.throws(() => validateOptions(model), /Semantic diagnostics must affect build info: noImplicitAny/); +}); + +test("compiler test variations accept finite options without requiring affects metadata", () => { + const source = generateOptions().get("tsc/internal/testrunner/options_generated.go")!; + for (const name of ["strict", "module", "noCheck", "preserveSymlinks", "noEmit", "isolatedModules"]) { + assert(source.includes(`"${name.toLowerCase()}",`), name); + } + for (const name of ["lib", "maxNodeModuleJsDepth", "outDir", "watch", "configFilePath"]) { + assert(!source.includes(`"${name.toLowerCase()}",`), name); + } +}); + +test("help short aliases preserve parsing metadata without duplicating help text", () => { + const help = compilerDeclarations().filter(option => option.name === "help"); + assert.deepEqual(help.map(option => option.shortName), ["h", "?"]); + assert.equal(help[0].description?.text, "Print this message."); + assert.equal(help[0].showInSimplifiedHelpView, true); + assert.equal(help[1].description, undefined); + assert.equal(help[1].showInSimplifiedHelpView, undefined); + for (const option of help) { + assert.equal(option.kind, "Boolean"); + assert.equal(option.isCommandLineOnly, true); + assert.equal(option.group, "commonOptionsWithBuild"); + } +}); + +test("API compiler options are generated directly from option metadata", () => { + const source = generateCompilerOptionsAPI(); + for ( + const field of [ + "allowJs?: boolean | undefined;", + "target?: ScriptTarget | undefined;", + "maxNodeModuleJsDepth?: number | undefined;", + "paths?: Record | undefined;", + "plugins?: PluginImport[] | undefined;", + "configFilePath?: RootedFilePath | undefined;", + ] + ) assert(source.includes(field), field); + assert.match(source, /export interface PluginImport \{\s*name: string;/); + assert.doesNotMatch(source, /baseUrl\?:|outFile\?:|watch\?:|help\?:|configFile\?:/); + const model = structuredClone(options); + model.compilerOptions.push({ name: "newAPIOption", type: "Tristate" }); + assert.match(generateCompilerOptionsAPI(model), /newAPIOption\?: boolean \| undefined;/); +}); + +test("API compiler option path preparation is generated directly from option metadata", () => { + const source = generatePrepareCompilerOptionsAPI(); + assert.match(source, /configFilePath: configFilePath === undefined \? undefined : toRootedFilePath\(configFilePath, currentDirectory\)/); + assert.match(source, /outDir: outDir === undefined \? undefined : toRootedDirectoryPath\(outDir, currentDirectory\)/); + assert.match(source, /project: project === undefined \? undefined : toRootedPath\(project, currentDirectory\)/); + assert.match(source, /rootDirs: rootDirs\?\.map\(value => toRootedDirectoryPath\(value, currentDirectory\)\)/); + assert.match(source, /baseUrl: baseUrl === undefined \? undefined : toRootedDirectoryPath\(baseUrl, currentDirectory\)/); + assert.match(source, /generateTrace: generateTrace === undefined \? undefined : toRootedDirectoryPath\(generateTrace, currentDirectory\)/); + assert.match(source, /outFile: outFile === undefined \? undefined : toRootedFilePath\(outFile, currentDirectory\)/); + assert.match(source, /pprofDir: pprofDir === undefined \? undefined : toRootedDirectoryPath\(pprofDir, currentDirectory\)/); + + const model = structuredClone(options); + model.compilerOptions.push({ name: "newPathOption", type: "string", pathKind: "file" }); + assert.match(generatePrepareCompilerOptionsAPI(model), /newPathOption: newPathOption === undefined \? undefined : toRootedFilePath\(newPathOption, currentDirectory\)/); +}); + +test("diagnostic references use checked message text and preserve Go names", () => { + assert.deepEqual(diagnostic("JavaScript Support"), { go: "diagnostics.JavaScript_Support", text: "JavaScript Support" }); + assert.deepEqual(diagnostic("'{0}' expected."), { go: "diagnostics.X_0_expected", text: "'{0}' expected." }); + // @ts-expect-error Diagnostic text must exist in diagnosticMessages.json. + diagnostic("Not a real diagnostic."); +}); + +test("explicit option orders reject duplicates, unknown names, and omissions", () => { + for ( + const select of [ + (model: typeof options) => model.declarationOrder.commonOptionsWithBuild, + (model: typeof options) => model.declarationOrder.optionsForCompiler, + (model: typeof options) => model.buildOptionFieldOrder, + ] + ) { + const duplicate = structuredClone(options); + const duplicateOrder = select(duplicate); + duplicateOrder.push(duplicateOrder[0]); + assert.throws(() => validateOptions(duplicate), /Duplicate option in .* order/); + + const unknown = structuredClone(options); + select(unknown)[0] = "missingOption"; + assert.throws(() => validateOptions(unknown), /Unknown option in .* order: missingOption/); + + const missing = structuredClone(options); + select(missing).pop(); + assert.throws(() => validateOptions(missing), /Missing options in .* order/); + } + const wrongGroup = structuredClone(options); + wrongGroup.declarationOrder.optionsForCompiler[0] = "watch"; + assert.throws(() => validateOptions(wrongGroup), /Unknown option in optionsForCompiler order: watch/); +}); + +test("option TypeScript enums are generated without reading their Go definitions", () => { + for (const optionEnum of options.enums.filter(enumDef => enumDef.api)) { + const def = enumDefs.find(def => def.name === optionEnum.name); + assert(def, optionEnum.name); + const { members, code } = generateEnum({ ...def, goFile: "does-not-exist.go" }); + assert.deepEqual( + members, + optionEnum.members.filter(member => !member.excludeFromAPI).map(member => ({ + name: member.name, + value: String(member.value), + })), + ); + assert.match(code, /^\/\/ Code generated by tools\/scripts\/tsc\/generate-enums.ts from tools\/scripts\/tsc\/options.ts\./); + assert.doesNotMatch(code, /does-not-exist|optionenums_generated/); + if (def.name === "ScriptTarget") { + assert(members.some(member => member.name === "Latest" && member.value === "ESNext")); + for (const name of ["None", "ES5", "LatestStandard"]) assert(!members.some(member => member.name === name), name); + } + } +}); + +test("other TypeScript enums retain their Go sources", () => { + const def = enumDefs.find(def => def.name === "SymbolFlags")!; + const { members, code } = generateEnum(def); + assert(members.length > 0); + assert.match(code, /from tsc\/internal\/ast\/symbolflags.go/); + assert.throws(() => generateEnum({ ...def, goFile: "does-not-exist.go" }), /ENOENT/); +}); + +test("SyntaxKind is generated without reading its Go definition", () => { + const def = enumDefs.find(def => def.name === "SyntaxKind")!; + const { members, code } = generateEnum({ ...def, goFile: "does-not-exist.go" }); + assert.match(code, /^\/\/ Code generated by tools\/scripts\/tsc\/generate-enums.ts from tools\/scripts\/tsc\/ast.json\./); + assert.deepEqual(members[0], { name: "Unknown", value: "0" }); + assert.deepEqual(members[1], { name: "EndOfFile", value: "1" }); + const countIndex = members.findIndex(member => member.name === "Count"); + assert(countIndex > 0); + assert.equal(members[countIndex].value, String(countIndex)); + assert(members.some(member => member.name === "FirstAssignment" && member.value === "EqualsToken")); + assert(members.some(member => member.name === "FirstJSDocTagNode" && member.value === "JSDocUnknownTag")); +}); + +test("metadata enum artifacts are current and use the shared alias ordering", () => { + for (const def of enumDefs.filter(def => def.metadata)) { + const { code } = generateEnum(def); + const name = def.name[0].toLowerCase() + def.name.slice(1); + const actual = fs.readFileSync(path.join(repoRoot, def.outDir, `${name}.enum.ts`), "utf8"); + assert.equal(actual.replaceAll("\r\n", "\n"), code, def.name); + } + const def = enumDefs.find(def => def.name === "SyntaxKind")!; + const { members } = generateEnum({ + ...def, + goFile: "does-not-exist.go", + metadata: { + file: "metadata.json", + members: [{ name: "Alias", value: "Value" }, { name: "Value", value: "7" }], + }, + }); + assert.deepEqual(members, [{ name: "Value", value: "7" }, { name: "Alias", value: "Value" }]); +}); + +test("option comparisons reject types that require deep equality", () => { + for (const name of ["maxNodeModuleJsDepth", "types", "paths", "plugins"]) { + const model = structuredClone(options); + model.compilerOptions.find(option => option.name === name)!.declaration!.affectsEmit = true; + assert.throws(() => generateOptionComparisons(model), new RegExp(`Unsupported comparison type for ${name}:`)); + } +}); + +test("option section headings are detached line comments", () => { + const generated = generateOptions(); + const go = generated.get("tsc/internal/core/options_generated.go")!; + assert.match(go, /\n\/\/ Internal fields\n\nConfigFilePath /); + assert.match(go, /\n\/\/ Internal fields\n\nClean /); + const api = generated.get("packages/typescript/src/api/compilerOptions.generated.ts")!; + assert.match(api, /\n\/\/ Internal fields\n\nconfigFilePath\?:/); + assert.doesNotMatch(api, /\/\*\* Internal fields/); +}); + +test("all generated options artifacts are checked in and current", () => { + for (const [file, content] of generateOptions()) { + const actual = fs.readFileSync(path.join(repoRoot, file), "utf8"); + if (file.endsWith(".json")) { + assert.deepEqual(JSON.parse(actual), JSON.parse(content), file); + } + else { + // Ignore formatting, but preserve the contents of string literals and comments. + const tokens = (source: string) => source.match(/"(?:\\.|[^"\\])*"|`[^`]*`|\/\/[^\r\n]*|[^\s]/g); + assert.deepEqual(tokens(actual), tokens(content), file); + } + } +}); + +test("schemas retain historical options as deprecated", () => { + const historical = { + charset: ["utf8", false], + out: ["bundle.js", false], + noImplicitUseStrict: [true, "true"], + noStrictGenericChecks: [true, "true"], + keyofStringsOnly: [true, "true"], + suppressExcessPropertyErrors: [true, "true"], + suppressImplicitAnyIndexErrors: [true, "true"], + preserveValueImports: [true, "true"], + importsNotUsedAsValues: ["preserve", "invalid"], + }; + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + for (const [name, [valid, invalid]] of Object.entries(historical)) { + const property = schema.definitions.compilerOptions.properties[name]; + assert(property, name); + assert.equal(property.deprecated, true, name); + assert(property.deprecationMessage, name); + assert(property.markdownDescription, name); + assert(accepts(property, valid, schema), name); + assert(accepts(property, null, schema), name); + assert(!accepts(property, invalid, schema), name); + } + for (const [name, value] of [["target", "es3"], ["target", "es5"], ["module", "none"]]) { + const property = schema.definitions.compilerOptions.properties[name]; + assert(accepts(property, value, schema), `${name}: ${value}`); + assert(accepts(property, value.toUpperCase(), schema), `${name}: ${value.toUpperCase()}`); + const suggestions = property.anyOf![0].anyOf![0]; + assert.equal(suggestions.enumDescriptions![suggestions.enum!.indexOf(value)], "Deprecated."); + } + for (const value of ["remove", "preserve", "error", "REMOVE", "PrEsErVe", "ERROR"]) { + assert(accepts(schema.definitions.compilerOptions.properties.importsNotUsedAsValues, value, schema)); + } + const lib = schema.definitions.compilerOptions.properties.lib; + assert(accepts(lib, ["es2022.sharedmemory", "ES2022.SharedMemory"], schema)); + assert(!accepts(lib, ["es2022.sharedmemory.invalid"], schema)); + const suggestions = lib.anyOf![0].items!.anyOf![0]; + assert.equal(suggestions.enumDescriptions![suggestions.enum!.indexOf("es2022.sharedmemory")], "Deprecated."); + } +}); + +// Evaluate only the validation keywords emitted by this generator. Unknown keywords +// fail the test so new schema features must also get acceptance/rejection coverage. +function accepts(schema: JSONSchema, value: unknown, root: JSONSchema): boolean { + for (const key of Object.keys(schema)) { + assert( + [ + "$schema", + "$comment", + "$ref", + "title", + "description", + "markdownDescription", + "type", + "properties", + "definitions", + "additionalProperties", + "required", + "items", + "anyOf", + "allOf", + "enum", + "enumDescriptions", + "pattern", + "default", + "minimum", + "minLength", + "deprecated", + "deprecationMessage", + "allowComments", + "allowTrailingCommas", + ].includes(key), + `Unsupported schema keyword: ${key}`, + ); + } + if (schema.$ref) { + assert.match(schema.$ref, /^#\/definitions\/\w+$/); + const referenced = root.definitions?.[schema.$ref.slice("#/definitions/".length)]; + assert(referenced, `Missing reference: ${schema.$ref}`); + return accepts(referenced, value, root); + } + if (schema.anyOf && !schema.anyOf.some(branch => accepts(branch, value, root))) return false; + if (schema.allOf && !schema.allOf.every(branch => accepts(branch, value, root))) return false; + if (schema.type) { + const types = Array.isArray(schema.type) ? schema.type : [schema.type]; + const type = value === null ? "null" : Array.isArray(value) ? "array" : typeof value; + if (!types.includes(type)) return false; + } + if (schema.enum && !schema.enum.some(item => item === value)) return false; + if (typeof value === "string") { + if (schema.pattern && !new RegExp(schema.pattern).test(value)) return false; + if (schema.minLength !== undefined && value.length < schema.minLength) return false; + } + if (typeof value === "number" && schema.minimum !== undefined && value < schema.minimum) return false; + if (Array.isArray(value) && schema.items && !value.every(item => accepts(schema.items!, item, root))) return false; + if (typeof value === "object" && value !== null && !Array.isArray(value)) { + if (schema.required?.some(name => !Object.hasOwn(value, name))) return false; + for (const [name, property] of Object.entries(value)) { + const child = schema.properties?.[name]; + if (child) { + if (!accepts(child, property, root)) return false; + } + else if (schema.additionalProperties === false) return false; + else if (typeof schema.additionalProperties === "object" && !accepts(schema.additionalProperties, property, root)) return false; + } + } + return true; +} + +test("root option documentation is outside draft-07 references", () => { + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + for (const name of ["compilerOptions", "typeAcquisition"]) { + const property = schema.properties[name]; + assert.equal(property.$ref, undefined, name); + assert.deepEqual(property.allOf, [{ $ref: `#/definitions/${name}` }]); + assert(property.description, name); + assert(property.markdownDescription, name); + } + } +}); + +test("schemas accept representative valid configs and reject malformed configs", () => { + const valid = [ + {}, + { compilerOptions: null, files: null, include: null, exclude: null, references: null, typeAcquisition: null }, + { compilerOptions: { strict: null, target: null, paths: null, types: null, maxNodeModuleJsDepth: null } }, + { extends: "./base.json", files: [] }, + { extends: ["./base.json", "some-package/tsconfig.json"], references: [{ path: "../project", circular: true }] }, + { compilerOptions: { target: "ESNext", module: "NodeNext", moduleResolution: "BUNDLER", jsx: "React-JSX", newLine: "LF" } }, + { compilerOptions: { paths: { "@/*": ["src/*"] }, plugins: [{ name: "some-plugin", customSetting: true }], moduleSuffixes: ["", ".native"] } }, + { typeAcquisition: { enable: true, include: ["node"], exclude: [] } }, + { contentMappers: [{ package: "mapper", extensions: [".vue"], options: { customSetting: true } }] }, + { "$schema": "./tsconfig.schema.json", "tool-specific": { anything: true } }, + ]; + const invalid = [ + null, + [], + true, + { extends: null }, + { extends: 1 }, + { extends: ["./base", false] }, + { files: ["file.ts", 1] }, + { compilerOptions: { strict: "true" } }, + { compilerOptions: { target: "es9999" } }, + { compilerOptions: { target: "es2025\n" } }, + { compilerOptions: { module: 99 } }, + { compilerOptions: { paths: { "@/*": "src/*" } } }, + { compilerOptions: { paths: { "@/*": [false] } } }, + { compilerOptions: { plugins: ["plugin"] } }, + { compilerOptions: { plugins: [{ name: false }] } }, + { compilerOptions: { maxNodeModuleJsDepth: "2" } }, + { typeAcquisition: { enable: "true" } }, + { typeAcquisition: { exclude: [false] } }, + { references: [{ path: false }] }, + { references: [{}] }, + { references: [{ path: "" }] }, + { references: [{ path: null }] }, + { contentMappers: [{ package: "", extensions: [] }] }, + { contentMappers: [{ package: "mapper" }] }, + { contentMappers: [{ package: "mapper", extensions: [1] }] }, + { contentMappers: [{ package: "mapper", extensions: [], options: null }] }, + ]; + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + for (const config of valid) assert(accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); + for (const config of invalid) assert(!accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); + } +}); + +test("schemas preserve SchemaStore's extensible and partial option objects", () => { + const configs = [ + { compilerOptions: { strictTypo: true, showConfig: true } }, + { typeAcquisition: { customSetting: true } }, + { compilerOptions: { plugins: [{}] } }, + { references: [{ path: "../project", customSetting: true }] }, + { "ts-node": { transpileOnly: true }, "buildOptions": { force: true } }, + ]; + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + for (const config of configs) assert(accepts(schema, config, schema), `${kind}: ${JSON.stringify(config)}`); + } +}); + +test("every enum value accepts mixed casing without broadening the accepted names", () => { + const schema = generateConfigSchema("tsconfig"); + for (const [name, map] of Object.entries(options.enumMaps)) { + const option = schema.definitions.compilerOptions.properties[name]; + assert(option, name); + const list = options.compilerOptions.some(option => option.name === name && optionKind(option) === "List"); + for (const entry of map.values) { + for (const text of [entry.name, entry.name.toUpperCase(), entry.name.replace(/[a-z]/g, (char, index: number) => index % 2 ? char.toUpperCase() : char)]) { + assert(accepts(option, list ? [text] : text, schema), `${name}: ${text}`); + } + for (const text of [`${entry.name}x`, `x${entry.name}`, `${entry.name}\n`, entry.name.replaceAll(".", "!")]) { + if (map.values.some(entry => entry.name === text)) continue; + assert(!accepts(option, list ? [text] : text, schema), `${name}: ${JSON.stringify(text)}`); + } + } + } +}); + +test("schema defaults are valid and conditional defaults stay descriptive", () => { + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + for (const definition of Object.values(schema.definitions)) { + for (const [name, property] of Object.entries(definition.properties)) { + if (property.default !== undefined) assert(accepts(property, property.default, schema), `${kind}: ${name}`); + } + } + assert.equal(schema.definitions.compilerOptions.properties.moduleResolution.default, undefined); + assert.match(schema.definitions.compilerOptions.properties.moduleResolution.description!, /Default:/); + const latestStandard = options.enums.find(enumDef => enumDef.name === "ScriptTarget")!.members.find(member => member.name === "LatestStandard")!.value; + assert.equal(schema.definitions.compilerOptions.properties.target.default, String(latestStandard).toLowerCase()); + for ( + const [name, value] of Object.entries({ + jsxFactory: "React.createElement", + newLine: "lf", + }) + ) { + assert.equal(schema.definitions.compilerOptions.properties[name].default, value, `${kind}: ${name}`); + } + } + assert.doesNotMatch(generateConfigSchema("jsconfig").definitions.compilerOptions.properties.allowJs.description!, /Default:.*false/); +}); + +test("schema hover documentation includes reference links and conditional defaults", () => { + for (const kind of ["tsconfig", "jsconfig"] as const) { + const schema = generateConfigSchema(kind); + const compiler = schema.definitions.compilerOptions.properties; + for (const [name, property] of Object.entries(compiler)) { + const declaration = options.compilerOptions.find(option => option.name === name)?.declaration + ?? options.schemaOnlyOptions.find(option => option.name === name); + assert(declaration, `${kind}: ${name}`); + if (!declaration.description) { + assert.equal(property.markdownDescription, undefined, `${kind}: ${name}`); + continue; + } + assert(property.description, `${kind}: ${name}`); + const markdown = property.markdownDescription; + assert(markdown, `${kind}: ${name}`); + assert(markdown.startsWith(property.description), `${kind}: ${name}`); + if (name === "deduplicatePackages" || name === "stableTypeOrdering") { + assert.equal(property.markdownDescription, property.description); + } + else { + assert(markdown.includes(`https://www.typescriptlang.org/tsconfig/#${name}`), `${kind}: ${name}`); + } + } + assert.match(compiler.moduleResolution.markdownDescription!, /Default:/); + for (const property of Object.values(schema.definitions.typeAcquisition.properties)) { + assert.match(property.markdownDescription!, /tsconfig\/#typeAcquisition/); + } + assert.match(schema.properties.include.markdownDescription!, /tsconfig\/#include/); + assert.equal(schema.properties.contentMappers.markdownDescription, schema.properties.contentMappers.description); + } +}); + +test("invalid metadata is rejected before generating files", () => { + const duplicate = structuredClone(options); + duplicate.compilerOptions.push(duplicate.compilerOptions[0]); + assert.throws(() => validateOptions(duplicate), /Duplicate compiler option/); + const missingEnum = structuredClone(options); + delete missingEnum.enumMaps.target; + assert.throws(() => validateOptions(missingEnum), /Missing enum map: target/); + const missingElement = structuredClone(options); + delete missingElement.elements.lib; + assert.throws(() => validateOptions(missingElement), /Missing list element: lib/); + const removedValidation = structuredClone(options); + // @ts-expect-error Only locale validation is supported. + removedValidation.elements.lib.extraValidation = "spec"; + assert.throws(() => validateOptions(removedValidation), /Invalid extra validation: spec/); + const missingConstant = structuredClone(options); + missingConstant.enumMaps.target.values[0].value = { go: "core.ScriptTargetMissing" }; + assert.throws(() => validateOptions(missingConstant), /Unknown enum constant/); + const invalidAlias = structuredClone(options); + invalidAlias.enums[0].members[0].value = "Missing"; + assert.throws(() => validateOptions(invalidAlias), /Unknown enum alias/); + const invalidTranspile = structuredClone(options); + invalidTranspile.compilerOptions[0].transpile = { value: true, unless: "missing" }; + assert.throws(() => validateOptions(invalidTranspile), /Unknown transpile condition/); +}); + +test("schemas include config options, not API-only or command-line-only fields", () => { + const schema = generateConfigSchema("tsconfig"); + const properties = schema.definitions.compilerOptions.properties; + for (const name of ["strict", "paths", "plugins", "lib", "target", "diagnostics", "pretty"]) { + assert.ok(properties[name], name); + } + for (const name of ["configFilePath", "pathsBasePath", "noDtsResolution", "help", "watch", "showConfig", "runExternalCode"]) { + assert.equal(properties[name], undefined, name); + } +}); + +test("jsconfig defaults are distinct from tsconfig defaults", () => { + const ts = generateConfigSchema("tsconfig"); + const js = generateConfigSchema("jsconfig"); + for (const [name, value] of Object.entries({ allowJs: true, noEmit: true, skipLibCheck: true, maxNodeModuleJsDepth: 2 })) { + assert.equal(js.definitions.compilerOptions.properties[name].default, value); + assert.notEqual(ts.definitions.compilerOptions.properties[name].default, value); + } + assert.equal(js.definitions.typeAcquisition.properties.enable.default, true); + assert.equal(ts.definitions.typeAcquisition.properties.enable.default, false); +}); diff --git a/tools/scripts/tsc/options.ts b/tools/scripts/tsc/options.ts index 0aafe5af36a28..bb8afaac8024d 100644 --- a/tools/scripts/tsc/options.ts +++ b/tools/scripts/tsc/options.ts @@ -1,2431 +1,2431 @@ -import { - type CompilerOptionType, - diagnostic, - type OptionsModel, -} from "./options-model.ts"; - -export const pluginImportFields: { name: string; type: CompilerOptionType; }[] = [ - { name: "name", type: "string" }, -]; - -export const options: OptionsModel = { - schemaOnlyOptions: [ - { - name: "charset", - type: "string", - description: "The text encoding used to read source files in early TypeScript versions.", - }, - { - name: "out", - type: "string", - description: "The legacy predecessor of outFile, which combined emitted JavaScript into a single file.", - }, - { - name: "noImplicitUseStrict", - type: "boolean", - description: "Disable adding 'use strict' directives to emitted JavaScript.", - }, - { - name: "noStrictGenericChecks", - type: "boolean", - description: "Disable strict checking of generic signatures in function types.", - }, - { - name: "keyofStringsOnly", - type: "boolean", - description: "Make keyof return only strings instead of strings, numbers, or symbols.", - }, - { - name: "suppressExcessPropertyErrors", - type: "boolean", - description: "Disable excess property errors when creating object literals.", - }, - { - name: "suppressImplicitAnyIndexErrors", - type: "boolean", - description: "Suppress noImplicitAny errors when indexing objects that lack index signatures.", - }, - { - name: "preserveValueImports", - type: "boolean", - description: "Preserve unused imported values in JavaScript output. Superseded by verbatimModuleSyntax.", - }, - { - name: "importsNotUsedAsValues", - type: "enum", - values: ["remove", "preserve", "error"], - description: "Control emit and checking for imports used only as types. Superseded by verbatimModuleSyntax.", - }, - ], - compilerOptions: [ - { - name: "allowJs", - type: "Tristate", - jsconfigDefault: true, - declaration: { - group: "optionsForCompiler", - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("JavaScript Support"), - description: diagnostic("Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files."), - defaultValueDescription: diagnostic("`false`, unless `checkJs` is set"), - }, - }, - { - name: "allowArbitraryExtensions", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Enable importing files with any extension, provided a declaration file is present."), - defaultValueDescription: false, - }, - }, - { - name: "allowImportingTsExtensions", - transpile: { value: "clear" }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Modules"), - description: diagnostic("Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set."), - defaultValueDescription: false, - }, - }, - { - name: "allowNonTsExtensions", - transpile: { value: true }, - type: "Tristate", - }, - { - name: "allowUmdGlobalAccess", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Modules"), - description: diagnostic("Allow accessing UMD globals from modules."), - defaultValueDescription: false, - }, - }, - { - name: "allowUnreachableCode", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Disable error reporting for unreachable code."), - defaultValueDescription: { go: "core.TSUnknown" }, - }, - }, - { - name: "allowUnusedLabels", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Disable error reporting for unused labels."), - defaultValueDescription: { go: "core.TSUnknown" }, - }, - }, - { - name: "assumeChangesOnlyAffectDirectDependencies", - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - affectsSemanticDiagnostics: true, - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Watch and Build Modes"), - description: diagnostic("Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it."), - defaultValueDescription: false, - }, - }, - { - name: "checkJs", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("JavaScript Support"), - description: diagnostic("Enable error reporting in type-checked JavaScript files."), - defaultValueDescription: false, - }, - }, - { - name: "customConditions", - type: "[]string", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Conditions to set in addition to the resolver-specific defaults when resolving imports."), - }, - }, - { - name: "composite", - transpile: { value: "clear" }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsBuildInfo: true, - isTSConfigOnly: true, - category: diagnostic("Projects"), - defaultValueDescription: false, - description: diagnostic("Enable constraints that allow a TypeScript project to be used with project references."), - }, - }, - { - name: "emitDeclarationOnly", - transpile: { value: "clear", declarationValue: true }, - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // Full emit is calculated separately, so this does not set affectsEmit. - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - description: diagnostic("Only output d.ts files and not JavaScript files."), - defaultValueDescription: false, - }, - }, - { - name: "emitBOM", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."), - defaultValueDescription: false, - }, - }, - { - name: "emitDecoratorMetadata", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Emit design-type metadata for decorated declarations in source files."), - defaultValueDescription: false, - }, - }, - { - name: "declaration", - transpile: { value: false, declarationValue: true }, - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // Full emit is calculated separately, so this does not set affectsEmit. - shortName: "d", - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - description: diagnostic("Generate .d.ts files from TypeScript and JavaScript files in your project."), - defaultValueDescription: diagnostic("`false`, unless `composite` is set"), - }, - }, - { - name: "declarationDir", - transpile: { value: "clear" }, - type: "string", - pathKind: "directory", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - affectsDeclarationPath: true, - isFilePath: true, - category: diagnostic("Emit"), - description: diagnostic("Specify the output directory for generated declaration files."), - }, - }, - { - name: "declarationMap", - transpile: { value: false, declarationValue: "preserve" }, - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // Full emit is calculated separately, so this does not set affectsEmit. - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - defaultValueDescription: false, - description: diagnostic("Create sourcemaps for d.ts files."), - }, - }, - { - name: "deduplicatePackages", - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Type Checking"), - description: diagnostic("Deduplicate packages with the same name and version."), - documentationAnchor: false, - defaultValueDescription: true, - }, - }, - { - name: "disableSizeLimit", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Editor Support"), - description: diagnostic("Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."), - defaultValueDescription: false, - }, - }, - { - name: "disableSourceOfProjectReferenceRedirect", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - isTSConfigOnly: true, - category: diagnostic("Projects"), - description: diagnostic("Disable preferring source files instead of declaration files when referencing composite projects."), - defaultValueDescription: false, - }, - }, - { - name: "disableSolutionSearching", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - isTSConfigOnly: true, - category: diagnostic("Projects"), - description: diagnostic("Opt a project out of multi-project reference checking when editing."), - defaultValueDescription: false, - }, - }, - { - name: "disableReferencedProjectLoad", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - isTSConfigOnly: true, - category: diagnostic("Projects"), - description: diagnostic("Reduce the number of projects loaded automatically by TypeScript."), - defaultValueDescription: false, - }, - }, - { - name: "erasableSyntaxOnly", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Interop Constraints"), - description: diagnostic("Do not allow runtime constructs that are not part of ECMAScript."), - defaultValueDescription: false, - affectsBuildInfo: true, - affectsSemanticDiagnostics: true, - }, - }, - { - name: "exactOptionalPropertyTypes", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Interpret optional property types as written, rather than adding 'undefined'."), - defaultValueDescription: false, - }, - }, - { - name: "experimentalDecorators", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Enable experimental support for legacy experimental decorators."), - defaultValueDescription: false, - }, - }, - { - name: "forceConsistentCasingInFileNames", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Interop Constraints"), - description: diagnostic("Ensure that casing is correct in imports."), - defaultValueDescription: true, - }, - }, - { - name: "isolatedModules", - transpile: { value: true, unless: "verbatimModuleSyntax" }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Interop Constraints"), - description: diagnostic("Ensure that each file can be safely transpiled without relying on other imports."), - defaultValueDescription: false, - }, - }, - { - name: "isolatedDeclarations", - transpile: { value: false, declarationValue: true }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Interop Constraints"), - description: diagnostic("Require sufficient annotation on exports so other tools can trivially generate declaration files."), - defaultValueDescription: false, - affectsBuildInfo: true, - affectsSemanticDiagnostics: true, - }, - }, - { - name: "ignoreConfig", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - isCommandLineOnly: true, - description: diagnostic("Ignore the tsconfig found and build with commandline options and files."), - defaultValueDescription: false, - }, - }, - { - name: "ignoreDeprecations", - type: "string", - declaration: { - group: "optionsForCompiler", - defaultValueDescription: { go: "core.TSUnknown" }, - }, - }, - { - name: "importHelpers", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Allow importing helper functions from tslib once per project, instead of including them per-file."), - defaultValueDescription: false, - }, - }, - { - name: "inlineSourceMap", - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // Full emit is calculated separately, so this does not set affectsEmit. - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Include sourcemap files inside the emitted JavaScript."), - defaultValueDescription: false, - }, - }, - { - name: "inlineSources", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Include source code in the sourcemaps inside the emitted JavaScript."), - defaultValueDescription: false, - }, - }, - { - name: "init", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Initializes a TypeScript project and creates a tsconfig.json file."), - defaultValueDescription: false, - }, - }, - { - name: "incremental", - transpile: { value: "clear" }, - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - shortName: "i", - category: diagnostic("Projects"), - description: diagnostic("Save .tsbuildinfo files to allow for incremental compilation of projects."), - defaultValueDescription: diagnostic("`false`, unless `composite` is set"), - }, - }, - { - name: "jsx", - type: "JsxEmit", - declaration: { - group: "optionsForCompiler", - // JSX without this option is a semantic error; changing it must refresh semantic diagnostics. - affectsEmit: true, - affectsBuildInfo: true, - affectsSemanticDiagnostics: true, - showInSimplifiedHelpView: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Specify what JSX code is generated."), - defaultValueDescription: { go: "core.TSUnknown" }, - }, - }, - { - name: "jsxFactory", - type: "string", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Language and Environment"), - description: diagnostic("Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'."), - defaultValueDescription: "`React.createElement`", - }, - }, - { - name: "jsxFragmentFactory", - type: "string", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Language and Environment"), - description: diagnostic("Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."), - defaultValueDescription: "React.Fragment", - }, - }, - { - name: "jsxImportSource", - type: "string", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'."), - defaultValueDescription: "react", - }, - }, - { - name: "lib", - transpile: { value: "clear" }, - type: "[]string", - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Specify a set of bundled library declaration files that describe the target runtime environment."), - }, - }, - { - name: "libReplacement", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Language and Environment"), - description: diagnostic("Enable lib replacement."), - defaultValueDescription: false, - }, - }, - { - name: "locale", - type: "string", - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Command-line Options"), - isCommandLineOnly: true, - description: diagnostic("Set the language of the messaging from TypeScript. This does not affect emit."), - defaultValueDescription: diagnostic("Platform specific"), - extraValidation: "locale", - }, - }, - { - name: "mapRoot", - type: "string", - pathKind: "sourceMapLocation", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Specify the location where debugger should locate map files instead of generated locations."), - }, - }, - { - name: "module", - type: "ModuleKind", - declaration: { - group: "optionsForCompiler", - shortName: "m", - affectsEmit: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Modules"), - description: diagnostic("Specify what module code is generated."), - defaultValueDescription: { go: "core.TSUnknown" }, - }, - }, - { - name: "moduleResolution", - type: "ModuleResolutionKind", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Specify how TypeScript looks up a file from a given module specifier."), - defaultValueDescription: diagnostic("`nodenext` if `module` is `nodenext`; `node16` if `module` is `node16` or `node18`; otherwise, `bundler`."), - }, - }, - { - name: "moduleSuffixes", - type: "[]string", - declaration: { - group: "optionsForCompiler", - listPreserveFalsyValues: true, - category: diagnostic("Modules"), - description: diagnostic("List of file name suffixes to search when resolving a module."), - }, - }, - { - name: "moduleDetection", - type: "ModuleDetectionKind", - parseAliases: [ - "moduleDetectionKind", - ], - declaration: { - group: "optionsForCompiler", - description: diagnostic("Control what method is used to detect module-format JS files."), - category: diagnostic("Language and Environment"), - defaultValueDescription: diagnostic('"auto": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.'), - }, - }, - { - name: "newLine", - type: "NewLineKind", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Set the newline character for emitting files."), - defaultValueDescription: "lf", - }, - }, - { - name: "noEmit", - transpile: { value: "clear" }, - type: "Tristate", - jsconfigDefault: true, - declaration: { - group: "commonOptionsWithBuild", - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - description: diagnostic("Disable emitting files from a compilation."), - defaultValueDescription: false, - }, - }, - { - name: "noCheck", - transpile: { value: true }, - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // The builder handles this specially so changing noCheck does not discard all diagnostics. - showInSimplifiedHelpView: false, - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Disable full type checking (only critical parse and emit errors will be reported)."), - defaultValueDescription: false, - }, - }, - { - name: "noErrorTruncation", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Output Formatting"), - description: diagnostic("Disable truncating types in error messages."), - defaultValueDescription: false, - }, - }, - { - name: "noFallthroughCasesInSwitch", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable error reporting for fallthrough cases in switch statements."), - defaultValueDescription: false, - }, - }, - { - name: "noImplicitAny", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable error reporting for expressions and declarations with an implied 'any' type."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "noImplicitThis", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable error reporting when 'this' is given the type 'any'."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "noImplicitReturns", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable error reporting for codepaths that do not explicitly return in a function."), - defaultValueDescription: false, - }, - }, - { - name: "noEmitHelpers", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Disable generating custom helper functions like '__extends' in compiled output."), - defaultValueDescription: false, - }, - }, - { - name: "noLib", - transpile: { value: true, declarationValue: false }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - // Transpilation does not supply library source files, so noLib avoids reporting missing files. - category: diagnostic("Language and Environment"), - description: diagnostic("Disable including any library files, including the default lib.d.ts."), - defaultValueDescription: false, - }, - }, - { - name: "noPropertyAccessFromIndexSignature", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: false, - category: diagnostic("Type Checking"), - description: diagnostic("Enforces using indexed accessors for keys declared using an indexed type."), - defaultValueDescription: false, - }, - }, - { - name: "noUncheckedIndexedAccess", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Add 'undefined' to a type when accessed using an index."), - defaultValueDescription: false, - }, - }, - { - name: "noEmitOnError", - transpile: { value: "clear" }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Disable emitting files if any type checking errors are reported."), - defaultValueDescription: false, - }, - }, - { - name: "noUnusedLocals", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable error reporting when local variables aren't read."), - defaultValueDescription: false, - }, - }, - { - name: "noUnusedParameters", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Raise an error when a function parameter isn't read."), - defaultValueDescription: false, - }, - }, - { - name: "noResolve", - transpile: { value: true }, - type: "Tristate", - declaration: { - group: "optionsForCompiler", - // Transpilation does not resolve the full program, so noResolve avoids reporting missing files. - category: diagnostic("Modules"), - description: diagnostic("Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project."), - defaultValueDescription: false, - }, - }, - { - name: "noImplicitOverride", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Ensure overriding members in derived classes are marked with an override modifier."), - defaultValueDescription: false, - }, - }, - { - name: "noUncheckedSideEffectImports", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Modules"), - description: diagnostic("Check side effect imports."), - defaultValueDescription: true, - }, - }, - { - name: "outDir", - type: "string", - pathKind: "directory", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - affectsDeclarationPath: true, - isFilePath: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - description: diagnostic("Specify an output folder for all emitted files."), - }, - }, - { - name: "paths", - transpile: { value: "clear" }, - type: "*collections.OrderedMap[string, []string]", - declaration: { - group: "optionsForCompiler", - allowConfigDirTemplateSubstitution: true, - isTSConfigOnly: true, - category: diagnostic("Modules"), - description: diagnostic("Specify a set of entries that re-map imports to additional lookup locations."), - }, - }, - { - name: "plugins", - type: "[]PluginImport", - comment: "Plugins are parsed only so tools can report that native TypeScript does not support them.", - declaration: { - group: "optionsForCompiler", - isTSConfigOnly: true, - description: diagnostic("Specify a list of language service plugins to include."), - category: diagnostic("Editor Support"), - }, - }, - { - name: "preserveConstEnums", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Disable erasing 'const enum' declarations in generated code."), - defaultValueDescription: false, - }, - }, - { - name: "preserveSymlinks", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Interop Constraints"), - description: diagnostic("Disable resolving symlinks to their realpath. This correlates to the same flag in node."), - defaultValueDescription: false, - }, - }, - { - name: "project", - type: "string", - pathKind: "fileOrDirectory", - declaration: { - group: "optionsForCompiler", - shortName: "p", - isFilePath: true, - allowConfigDirTemplateSubstitution: false, - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."), - }, - }, - { - name: "resolveJsonModule", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Enable importing .json files."), - defaultValueDescription: false, - }, - }, - { - name: "resolvePackageJsonExports", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Use the package.json 'exports' field when resolving package imports."), - defaultValueDescription: diagnostic("`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`."), - }, - }, - { - name: "resolvePackageJsonImports", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - category: diagnostic("Modules"), - description: diagnostic("Use the package.json 'imports' field when resolving imports."), - defaultValueDescription: diagnostic("`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`."), - }, - }, - { - name: "removeComments", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - defaultValueDescription: false, - description: diagnostic("Disable emitting comments."), - }, - }, - { - name: "rewriteRelativeImportExtensions", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Modules"), - description: diagnostic("Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files."), - defaultValueDescription: false, - }, - }, - { - name: "reactNamespace", - type: "string", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit."), - defaultValueDescription: "`React`", - }, - }, - { - name: "rootDir", - type: "string", - pathKind: "directory", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - affectsDeclarationPath: true, - isFilePath: true, - category: diagnostic("Modules"), - description: diagnostic("Specify the root folder within your source files."), - defaultValueDescription: diagnostic("Computed from the list of input files"), - }, - }, - { - name: "rootDirs", - transpile: { value: "clear" }, - type: "[]string", - pathKind: "directory", - declaration: { - group: "optionsForCompiler", - isTSConfigOnly: true, - allowConfigDirTemplateSubstitution: true, - category: diagnostic("Modules"), - description: diagnostic("Allow multiple folders to be treated as one when resolving modules."), - defaultValueDescription: diagnostic("Computed from the list of input files"), - }, - }, - { - name: "skipLibCheck", - type: "Tristate", - jsconfigDefault: true, - declaration: { - group: "optionsForCompiler", - // Store this in build info to determine whether library files need to be rechecked. - affectsBuildInfo: true, - category: diagnostic("Completeness"), - description: diagnostic("Skip type checking all .d.ts files."), - defaultValueDescription: false, - }, - }, - { - name: "stableTypeOrdering", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Ensure types are ordered stably and deterministically across compilations."), - documentationAnchor: false, - defaultValueDescription: true, - }, - }, - { - name: "strict", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - // Individual strict flags determine semantic diagnostics. Store strict in build info so their effective values can be recovered. - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Type Checking"), - description: diagnostic("Enable all strict type-checking options."), - defaultValueDescription: true, - }, - }, - { - name: "strictBindCallApply", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Check that the arguments for 'bind', 'call', and 'apply' methods match the original function."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "strictBuiltinIteratorReturn", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "strictFunctionTypes", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("When assigning functions, check to ensure parameters and the return values are subtype-compatible."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "strictNullChecks", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("When type checking, take into account 'null' and 'undefined'."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "strictPropertyInitialization", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Check for class properties that are declared but not set in the constructor."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "stripInternal", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Disable emitting declarations that have '@internal' in their JSDoc comments."), - defaultValueDescription: false, - }, - }, - { - name: "skipDefaultLibCheck", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - // Store this in build info to determine whether library files need to be rechecked. - affectsBuildInfo: true, - category: diagnostic("Completeness"), - description: diagnostic("Skip type checking .d.ts files that are included with TypeScript."), - defaultValueDescription: false, - }, - }, - { - name: "sourceMap", - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - // Full emit is calculated separately, so this does not set affectsEmit. - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - defaultValueDescription: false, - description: diagnostic("Create source map files for emitted JavaScript files."), - }, - }, - { - name: "sourceRoot", - type: "string", - pathKind: "sourceMapLocation", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Specify the root path for debuggers to find the reference source code."), - }, - }, - { - name: "suppressOutputPathCheck", - transpile: { value: true }, - type: "Tristate", - }, - { - name: "target", - type: "ScriptTarget", - declaration: { - group: "optionsForCompiler", - shortName: "t", - affectsEmit: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Set the JavaScript language version for emitted JavaScript and include compatible library declarations."), - defaultValueDescription: { go: "core.ScriptTargetLatestStandard" }, - }, - }, - { - name: "traceResolution", - type: "Tristate", - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Log paths used during the 'moduleResolution' process."), - defaultValueDescription: false, - }, - }, - { - name: "tsBuildInfoFile", - transpile: { value: "clear" }, - type: "string", - pathKind: "file", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - isFilePath: true, - category: diagnostic("Projects"), - defaultValueDescription: ".tsbuildinfo", - description: diagnostic("Specify the path to .tsbuildinfo incremental compilation file."), - }, - }, - { - name: "typeRoots", - type: "[]string", - pathKind: "directory", - declaration: { - group: "optionsForCompiler", - allowConfigDirTemplateSubstitution: true, - category: diagnostic("Modules"), - description: diagnostic("Specify multiple folders that act like './node_modules/@types'."), - }, - }, - { - name: "types", - transpile: { value: "clear" }, - type: "[]string", - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Modules"), - description: diagnostic("Specify type package names to be included without being referenced in a source file."), - }, - }, - { - name: "useDefineForClassFields", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Language and Environment"), - description: diagnostic("Emit ECMAScript-standard-compliant class fields."), - defaultValueDescription: diagnostic("`true` for ES2022 and above, including ESNext."), - }, - }, - { - name: "useUnknownInCatchVariables", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - strictFlag: true, - category: diagnostic("Type Checking"), - description: diagnostic("Default catch clause variables as 'unknown' instead of 'any'."), - defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), - }, - }, - { - name: "verbatimModuleSyntax", - type: "Tristate", - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Interop Constraints"), - description: diagnostic("Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), - defaultValueDescription: false, - }, - }, - { - name: "maxNodeModuleJsDepth", - type: "*int", - jsconfigDefault: 2, - declaration: { - group: "optionsForCompiler", - category: diagnostic("JavaScript Support"), - description: diagnostic("Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'."), - defaultValueDescription: 0, - }, - }, - { - name: "allowSyntheticDefaultImports", - type: "Tristate", - deprecated: true, - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsBuildInfo: true, - category: diagnostic("Interop Constraints"), - description: diagnostic("Allow 'import x from y' when a module doesn't have a default export."), - defaultValueDescription: true, - }, - }, - { - name: "alwaysStrict", - type: "Tristate", - deprecated: true, - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Type Checking"), - description: diagnostic("Ensure 'use strict' is always emitted."), - defaultValueDescription: true, - }, - }, - { - name: "baseUrl", - type: "string", - pathKind: "directory", - deprecated: true, - declaration: { - group: "optionsForCompiler", - isFilePath: true, - category: diagnostic("Modules"), - description: diagnostic("Specify the base directory to resolve non-relative module names."), - }, - }, - { - name: "downlevelIteration", - type: "Tristate", - deprecated: true, - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - category: diagnostic("Emit"), - description: diagnostic("Emit more compliant, but verbose and less performant JavaScript for iteration."), - defaultValueDescription: false, - }, - }, - { - name: "esModuleInterop", - type: "Tristate", - goName: "ESModuleInterop", - deprecated: true, - declaration: { - group: "optionsForCompiler", - affectsSemanticDiagnostics: true, - affectsEmit: true, - affectsBuildInfo: true, - showInSimplifiedHelpView: true, - category: diagnostic("Interop Constraints"), - description: diagnostic("Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility."), - defaultValueDescription: true, - }, - }, - { - name: "outFile", - transpile: { value: "clear" }, - type: "string", - pathKind: "file", - deprecated: true, - declaration: { - group: "optionsForCompiler", - affectsEmit: true, - affectsBuildInfo: true, - affectsDeclarationPath: true, - isFilePath: true, - showInSimplifiedHelpView: true, - category: diagnostic("Emit"), - description: diagnostic("Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output."), - }, - }, - { - name: "configFilePath", - type: "string", - pathKind: "file", - section: "Internal fields", - }, - { - name: "noDtsResolution", - type: "Tristate", - internal: true, - }, - { - name: "pathsBasePath", - type: "string", - pathKind: "directory", - internal: true, - }, - { - name: "diagnostics", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Output compiler performance information after building."), - defaultValueDescription: false, - }, - }, - { - name: "extendedDiagnostics", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Output more detailed compiler performance information after building."), - defaultValueDescription: false, - }, - }, - { - name: "generateCpuProfile", - type: "string", - pathKind: "file", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - isFilePath: true, - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Emit a v8 CPU profile of the compiler run for debugging."), - defaultValueDescription: "profile.cpuprofile", - }, - }, - { - name: "generateTrace", - type: "string", - pathKind: "directory", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - isFilePath: true, - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Generates an event trace and a list of types."), - }, - }, - { - name: "listEmittedFiles", - type: "Tristate", - // File listings are excluded from showConfig despite belonging to Compiler Diagnostics. - showConfig: false, - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Print the names of emitted files after a compilation."), - defaultValueDescription: false, - }, - }, - { - name: "listFiles", - type: "Tristate", - showConfig: false, - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Print all of the files read during the compilation."), - defaultValueDescription: false, - }, - }, - { - name: "explainFiles", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Compiler Diagnostics"), - description: diagnostic("Print files read during the compilation including why it was included."), - defaultValueDescription: false, - }, - }, - { - name: "listFilesOnly", - type: "Tristate", - internal: true, - declaration: { - group: "optionsForCompiler", - category: diagnostic("Command-line Options"), - isCommandLineOnly: true, - description: diagnostic("Print names of files that are part of the compilation and then stop processing."), - defaultValueDescription: false, - }, - }, - { - name: "noEmitForJsFiles", - type: "Tristate", - internal: true, - }, - { - name: "preserveWatchOutput", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - showInSimplifiedHelpView: false, - category: diagnostic("Output Formatting"), - description: diagnostic("Disable wiping the console in watch mode."), - defaultValueDescription: false, - }, - }, - { - name: "pretty", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - showInSimplifiedHelpView: true, - category: diagnostic("Output Formatting"), - description: diagnostic("Enable color and formatting in TypeScript's output to make compiler errors easier to read."), - defaultValueDescription: true, - }, - }, - { - name: "version", - type: "Tristate", - internal: true, - declaration: { - group: "optionsForCompiler", - shortName: "v", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Print the compiler's version."), - defaultValueDescription: false, - }, - }, - { - name: "watch", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - shortName: "w", - showInSimplifiedHelpView: true, - isCommandLineOnly: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Watch input files."), - defaultValueDescription: false, - }, - }, - { - name: "showConfig", - type: "Tristate", - internal: true, - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - isCommandLineOnly: true, - description: diagnostic("Print the final configuration instead of building."), - defaultValueDescription: false, - }, - }, - { - name: "build", - type: "Tristate", - internal: true, - }, - { - name: "help", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - shortName: "h", - extraShortNames: ["?"], - showInSimplifiedHelpView: true, - isCommandLineOnly: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Print this message."), - defaultValueDescription: false, - }, - }, - { - name: "all", - type: "Tristate", - internal: true, - declaration: { - group: "optionsForCompiler", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Show all compiler options."), - defaultValueDescription: false, - }, - }, - { - name: "runExternalCode", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Command-line Options"), - isCommandLineOnly: true, - description: diagnostic("Allow loading external content mapper plugins that execute code during compilation."), - defaultValueDescription: false, - }, - }, - { - name: "pprofDir", - type: "string", - pathKind: "directory", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - isFilePath: true, - allowConfigDirTemplateSubstitution: false, - category: diagnostic("Command-line Options"), - description: diagnostic("Generate pprof CPU/memory profiles to the given directory."), - }, - }, - { - name: "singleThreaded", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Command-line Options"), - description: diagnostic("Run in single threaded mode."), - }, - }, - { - name: "quiet", - type: "Tristate", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - shortName: "q", - category: diagnostic("Command-line Options"), - description: diagnostic("Do not print diagnostics."), - }, - }, - { - name: "checkers", - type: "*int", - internal: true, - declaration: { - group: "commonOptionsWithBuild", - category: diagnostic("Command-line Options"), - description: diagnostic("Set the number of checkers per project."), - defaultValueDescription: diagnostic("4, unless --singleThreaded is passed."), - minValue: 1, - }, - }, - ], - // Preserve help and config output order independently of compiler fields. - declarationOrder: { - commonOptionsWithBuild: [ - "help", - "watch", - "preserveWatchOutput", - "listFiles", - "explainFiles", - "listEmittedFiles", - "pretty", - "traceResolution", - "diagnostics", - "extendedDiagnostics", - "generateCpuProfile", - "generateTrace", - "incremental", - "declaration", - "declarationMap", - "emitDeclarationOnly", - "sourceMap", - "inlineSourceMap", - "noCheck", - "deduplicatePackages", - "noEmit", - "assumeChangesOnlyAffectDirectDependencies", - "locale", - "quiet", - "singleThreaded", - "pprofDir", - "checkers", - "runExternalCode", - ], - optionsForCompiler: [ - "all", - "version", - "init", - "project", - "showConfig", - "listFilesOnly", - "ignoreConfig", - "target", - "module", - "lib", - "allowJs", - "checkJs", - "jsx", - "outFile", - "outDir", - "rootDir", - "composite", - "tsBuildInfoFile", - "removeComments", - "importHelpers", - "downlevelIteration", - "isolatedModules", - "verbatimModuleSyntax", - "isolatedDeclarations", - "erasableSyntaxOnly", - "libReplacement", - "strict", - "noImplicitAny", - "strictNullChecks", - "strictFunctionTypes", - "strictBindCallApply", - "strictPropertyInitialization", - "strictBuiltinIteratorReturn", - "noImplicitThis", - "useUnknownInCatchVariables", - "alwaysStrict", - "stableTypeOrdering", - "noUnusedLocals", - "noUnusedParameters", - "exactOptionalPropertyTypes", - "noImplicitReturns", - "noFallthroughCasesInSwitch", - "noUncheckedIndexedAccess", - "noImplicitOverride", - "noPropertyAccessFromIndexSignature", - "moduleResolution", - "baseUrl", - "paths", - "rootDirs", - "typeRoots", - "types", - "allowSyntheticDefaultImports", - "esModuleInterop", - "preserveSymlinks", - "allowUmdGlobalAccess", - "moduleSuffixes", - "allowImportingTsExtensions", - "rewriteRelativeImportExtensions", - "resolvePackageJsonExports", - "resolvePackageJsonImports", - "customConditions", - "noUncheckedSideEffectImports", - "sourceRoot", - "mapRoot", - "inlineSources", - "experimentalDecorators", - "emitDecoratorMetadata", - "jsxFactory", - "jsxFragmentFactory", - "jsxImportSource", - "resolveJsonModule", - "allowArbitraryExtensions", - "reactNamespace", - "skipDefaultLibCheck", - "emitBOM", - "newLine", - "noErrorTruncation", - "noLib", - "noResolve", - "stripInternal", - "disableSizeLimit", - "disableSourceOfProjectReferenceRedirect", - "disableSolutionSearching", - "disableReferencedProjectLoad", - "noEmitHelpers", - "noEmitOnError", - "preserveConstEnums", - "declarationDir", - "skipLibCheck", - "allowUnusedLabels", - "allowUnreachableCode", - "forceConsistentCasingInFileNames", - "maxNodeModuleJsDepth", - "useDefineForClassFields", - "plugins", - "moduleDetection", - "ignoreDeprecations", - ], - }, - typeAcquisition: [ - { - name: "enable", - kind: "Boolean", - schemaDescription: "Enable automatic type acquisition for JavaScript projects.", - jsconfigDefault: true, - defaultValueDescription: false, - field: { - name: "Enable", - type: "Tristate", - }, - }, - { - name: "include", - kind: "List", - schemaDescription: "Packages to include in automatic type acquisition.", - field: { - name: "Include", - type: "[]string", - }, - }, - { - name: "exclude", - kind: "List", - schemaDescription: "Packages to exclude from automatic type acquisition.", - field: { - name: "Exclude", - type: "[]string", - }, - }, - { - name: "disableFilenameBasedTypeAcquisition", - kind: "Boolean", - schemaDescription: "Disable inferring type acquisition packages from file names.", - defaultValueDescription: false, - field: { - name: "DisableFilenameBasedTypeAcquisition", - type: "Tristate", - }, - }, - ], - buildOptions: [ - { - name: "build", - kind: "Boolean", - shortName: "b", - showInSimplifiedHelpView: true, - category: diagnostic("Command-line Options"), - description: diagnostic("Build one or more projects and their dependencies, if out of date"), - defaultValueDescription: false, - }, - { - name: "verbose", - kind: "Boolean", - shortName: "v", - category: diagnostic("Command-line Options"), - description: diagnostic("Enable verbose logging."), - defaultValueDescription: false, - field: { name: "Verbose", type: "Tristate" }, - }, - { - name: "dry", - kind: "Boolean", - shortName: "d", - category: diagnostic("Command-line Options"), - description: diagnostic("Show what would be built (or deleted, if specified with '--clean')"), - defaultValueDescription: false, - field: { name: "Dry", type: "Tristate" }, - }, - { - name: "force", - kind: "Boolean", - shortName: "f", - category: diagnostic("Command-line Options"), - description: diagnostic("Build all projects, including those that appear to be up to date."), - defaultValueDescription: false, - field: { name: "Force", type: "Tristate" }, - }, - { - name: "clean", - kind: "Boolean", - category: diagnostic("Command-line Options"), - description: diagnostic("Delete the outputs of all projects."), - defaultValueDescription: false, - field: { name: "Clean", type: "Tristate", section: "Internal fields" }, - }, - { - name: "builders", - kind: "Number", - category: diagnostic("Command-line Options"), - description: diagnostic("Set the number of projects to build concurrently."), - defaultValueDescription: diagnostic("4, unless --singleThreaded is passed."), - minValue: 1, - field: { name: "Builders", type: "*int" }, - }, - { - name: "stopBuildOnErrors", - kind: "Boolean", - category: diagnostic("Command-line Options"), - description: diagnostic("Skip building downstream projects on error in upstream project."), - defaultValueDescription: false, - field: { name: "StopBuildOnErrors", type: "Tristate" }, - }, - ], - buildOptionFieldOrder: ["dry", "force", "verbose", "builders", "stopBuildOnErrors", "clean"], - rootOptions: [ - { name: "compilerOptions", kind: "Object", variable: "compilerOptionsDeclaration", elementOptions: "compilerOptions", documentationAnchor: "" }, - { name: "typeAcquisition", kind: "Object", variable: "typeAcquisitionDeclaration", elementOptions: "typeAcquisition" }, - { name: "extends", kind: "ListOrElement", variable: "extendsOptionDeclaration", category: diagnostic("File Management"), elementOptions: "extends" }, - { name: "references", kind: "List" }, - { name: "contentMappers", kind: "List", documentationAnchor: false }, - { name: "files", kind: "List" }, - { name: "include", kind: "List" }, - { name: "exclude", kind: "List" }, - { name: "compileOnSave", kind: "Boolean", variable: "compileOnSaveCommandLineOption", defaultValueDescription: false, documentationAnchor: false }, - ], - elements: { - lib: { - name: "lib", - kind: "Enum", - defaultValueDescription: { go: "core.TSUnknown" }, - }, - rootDirs: { - name: "rootDirs", - kind: "String", - isFilePath: true, - pathKind: "directory", - }, - typeRoots: { - name: "typeRoots", - kind: "String", - isFilePath: true, - pathKind: "directory", - }, - types: { - name: "types", - kind: "String", - }, - moduleSuffixes: { - name: "moduleSuffixes", - kind: "String", - }, - customConditions: { - name: "condition", - kind: "String", - }, - plugins: { - name: "plugin", - kind: "Object", - }, - references: { - name: "references", - kind: "Object", - }, - contentMappers: { - name: "contentMappers", - kind: "Object", - }, - files: { - name: "files", - kind: "String", - pathKind: "fileSpec", - }, - include: { - name: "include", - kind: "String", - pathKind: "pathPattern", - }, - exclude: { - name: "exclude", - kind: "String", - pathKind: "pathPattern", - }, - extends: { - name: "extends", - kind: "String", - pathKind: "configLocator", - }, - libFiles: { - name: "libFiles", - kind: "String", - }, - }, - enumMaps: { - lib: { - goName: "LibMap", - schemaOnlyValues: ["es2022.sharedmemory"], - values: [ - { name: "es5", value: "lib.es5.d.ts" }, - { name: "es6", value: "lib.es2015.d.ts" }, - { name: "es2015", value: "lib.es2015.d.ts" }, - { name: "es7", value: "lib.es2016.d.ts" }, - { name: "es2016", value: "lib.es2016.d.ts" }, - { name: "es2017", value: "lib.es2017.d.ts" }, - { name: "es2018", value: "lib.es2018.d.ts" }, - { name: "es2019", value: "lib.es2019.d.ts" }, - { name: "es2020", value: "lib.es2020.d.ts" }, - { name: "es2021", value: "lib.es2021.d.ts" }, - { name: "es2022", value: "lib.es2022.d.ts" }, - { name: "es2023", value: "lib.es2023.d.ts" }, - { name: "es2024", value: "lib.es2024.d.ts" }, - { name: "es2025", value: "lib.es2025.d.ts" }, - { name: "es2026", value: "lib.es2026.d.ts" }, - { name: "esnext", value: "lib.esnext.d.ts" }, - { name: "dom", value: "lib.dom.d.ts" }, - { name: "dom.iterable", value: "lib.dom.iterable.d.ts" }, - { name: "dom.asynciterable", value: "lib.dom.asynciterable.d.ts" }, - { name: "webworker", value: "lib.webworker.d.ts" }, - { name: "webworker.importscripts", value: "lib.webworker.importscripts.d.ts" }, - { name: "webworker.iterable", value: "lib.webworker.iterable.d.ts" }, - { name: "webworker.asynciterable", value: "lib.webworker.asynciterable.d.ts" }, - { name: "scripthost", value: "lib.scripthost.d.ts" }, - { name: "es2015.core", value: "lib.es2015.core.d.ts" }, - { name: "es2015.collection", value: "lib.es2015.collection.d.ts" }, - { name: "es2015.generator", value: "lib.es2015.generator.d.ts" }, - { name: "es2015.iterable", value: "lib.es2015.iterable.d.ts" }, - { name: "es2015.promise", value: "lib.es2015.promise.d.ts" }, - { name: "es2015.proxy", value: "lib.es2015.proxy.d.ts" }, - { name: "es2015.reflect", value: "lib.es2015.reflect.d.ts" }, - { name: "es2015.symbol", value: "lib.es2015.symbol.d.ts" }, - { name: "es2015.symbol.wellknown", value: "lib.es2015.symbol.wellknown.d.ts" }, - { name: "es2016.array.include", value: "lib.es2016.array.include.d.ts" }, - { name: "es2016.intl", value: "lib.es2016.intl.d.ts" }, - { name: "es2017.arraybuffer", value: "lib.es2017.arraybuffer.d.ts" }, - { name: "es2017.date", value: "lib.es2017.date.d.ts" }, - { name: "es2017.object", value: "lib.es2017.object.d.ts" }, - { name: "es2017.sharedmemory", value: "lib.es2017.sharedmemory.d.ts" }, - { name: "es2017.string", value: "lib.es2017.string.d.ts" }, - { name: "es2017.intl", value: "lib.es2017.intl.d.ts" }, - { name: "es2017.typedarrays", value: "lib.es2017.typedarrays.d.ts" }, - { name: "es2018.asyncgenerator", value: "lib.es2018.asyncgenerator.d.ts" }, - { name: "es2018.asynciterable", value: "lib.es2018.asynciterable.d.ts" }, - { name: "es2018.intl", value: "lib.es2018.intl.d.ts" }, - { name: "es2018.promise", value: "lib.es2018.promise.d.ts" }, - { name: "es2018.regexp", value: "lib.es2018.regexp.d.ts" }, - { name: "es2019.array", value: "lib.es2019.array.d.ts" }, - { name: "es2019.object", value: "lib.es2019.object.d.ts" }, - { name: "es2019.string", value: "lib.es2019.string.d.ts" }, - { name: "es2019.symbol", value: "lib.es2019.symbol.d.ts" }, - { name: "es2019.intl", value: "lib.es2019.intl.d.ts" }, - { name: "es2020.bigint", value: "lib.es2020.bigint.d.ts" }, - { name: "es2020.date", value: "lib.es2020.date.d.ts" }, - { name: "es2020.promise", value: "lib.es2020.promise.d.ts" }, - { name: "es2020.sharedmemory", value: "lib.es2020.sharedmemory.d.ts" }, - { name: "es2020.string", value: "lib.es2020.string.d.ts" }, - { name: "es2020.symbol.wellknown", value: "lib.es2020.symbol.wellknown.d.ts" }, - { name: "es2020.intl", value: "lib.es2020.intl.d.ts" }, - { name: "es2020.number", value: "lib.es2020.number.d.ts" }, - { name: "es2021.promise", value: "lib.es2021.promise.d.ts" }, - { name: "es2021.string", value: "lib.es2021.string.d.ts" }, - { name: "es2021.weakref", value: "lib.es2021.weakref.d.ts" }, - { name: "es2021.intl", value: "lib.es2021.intl.d.ts" }, - { name: "es2022.array", value: "lib.es2022.array.d.ts" }, - { name: "es2022.error", value: "lib.es2022.error.d.ts" }, - { name: "es2022.intl", value: "lib.es2022.intl.d.ts" }, - { name: "es2022.object", value: "lib.es2022.object.d.ts" }, - { name: "es2022.string", value: "lib.es2022.string.d.ts" }, - { name: "es2022.regexp", value: "lib.es2022.regexp.d.ts" }, - { name: "es2023.array", value: "lib.es2023.array.d.ts" }, - { name: "es2023.collection", value: "lib.es2023.collection.d.ts" }, - { name: "es2023.intl", value: "lib.es2023.intl.d.ts" }, - { name: "es2024.arraybuffer", value: "lib.es2024.arraybuffer.d.ts" }, - { name: "es2024.collection", value: "lib.es2024.collection.d.ts" }, - { name: "es2024.object", value: "lib.es2024.object.d.ts" }, - { name: "es2024.promise", value: "lib.es2024.promise.d.ts" }, - { name: "es2024.regexp", value: "lib.es2024.regexp.d.ts" }, - { name: "es2024.sharedmemory", value: "lib.es2024.sharedmemory.d.ts" }, - { name: "es2024.string", value: "lib.es2024.string.d.ts" }, - { name: "es2025.collection", value: "lib.es2025.collection.d.ts" }, - { name: "es2025.float16", value: "lib.es2025.float16.d.ts" }, - { name: "es2025.intl", value: "lib.es2025.intl.d.ts" }, - { name: "es2025.iterator", value: "lib.es2025.iterator.d.ts" }, - { name: "es2025.promise", value: "lib.es2025.promise.d.ts" }, - { name: "es2025.regexp", value: "lib.es2025.regexp.d.ts" }, - { name: "es2026.array", value: "lib.es2026.array.d.ts" }, - { name: "es2026.collection", value: "lib.es2026.collection.d.ts" }, - { name: "es2026.error", value: "lib.es2026.error.d.ts" }, - { name: "es2026.iterator", value: "lib.es2026.iterator.d.ts" }, - { name: "es2026.json", value: "lib.es2026.json.d.ts" }, - { name: "es2026.math", value: "lib.es2026.math.d.ts" }, - { name: "es2026.typedarrays", value: "lib.es2026.typedarrays.d.ts" }, - { name: "esnext.asynciterable", value: "lib.es2018.asynciterable.d.ts" }, - { name: "esnext.symbol", value: "lib.es2019.symbol.d.ts" }, - { name: "esnext.bigint", value: "lib.es2020.bigint.d.ts" }, - { name: "esnext.weakref", value: "lib.es2021.weakref.d.ts" }, - { name: "esnext.object", value: "lib.es2024.object.d.ts" }, - { name: "esnext.regexp", value: "lib.es2024.regexp.d.ts" }, - { name: "esnext.string", value: "lib.es2024.string.d.ts" }, - { name: "esnext.float16", value: "lib.es2025.float16.d.ts" }, - { name: "esnext.array", value: "lib.es2026.array.d.ts" }, - { name: "esnext.collection", value: "lib.es2026.collection.d.ts" }, - { name: "esnext.error", value: "lib.es2026.error.d.ts" }, - { name: "esnext.iterator", value: "lib.es2026.iterator.d.ts" }, - { name: "esnext.typedarrays", value: "lib.es2026.typedarrays.d.ts" }, - { name: "esnext.promise", value: "lib.esnext.promise.d.ts" }, - { name: "esnext.date", value: "lib.esnext.date.d.ts" }, - { name: "esnext.decorators", value: "lib.esnext.decorators.d.ts" }, - { name: "esnext.disposable", value: "lib.esnext.disposable.d.ts" }, - { name: "esnext.intl", value: "lib.esnext.intl.d.ts" }, - { name: "esnext.modulesource", value: "lib.esnext.modulesource.d.ts" }, - { name: "esnext.sharedmemory", value: "lib.esnext.sharedmemory.d.ts" }, - { name: "esnext.temporal", value: "lib.esnext.temporal.d.ts" }, - { name: "decorators", value: "lib.decorators.d.ts" }, - { name: "decorators.legacy", value: "lib.decorators.legacy.d.ts" }, - ], - }, - moduleResolution: { - goName: "moduleResolutionOptionMap", - values: [ - { name: "node16", value: { go: "core.ModuleResolutionKindNode16" } }, - { name: "nodenext", value: { go: "core.ModuleResolutionKindNodeNext" } }, - { name: "bundler", value: { go: "core.ModuleResolutionKindBundler" } }, - { name: "classic", value: { go: "core.ModuleResolutionKindClassic" } }, - { name: "node", value: { go: "core.ModuleResolutionKindNode10" } }, - { name: "node10", value: { go: "core.ModuleResolutionKindNode10" } }, - ], - deprecatedKeys: [ - "node", - "classic", - "node10", - ], - }, - module: { - goName: "moduleOptionMap", - schemaOnlyValues: ["none"], - values: [ - { name: "commonjs", value: { go: "core.ModuleKindCommonJS" } }, - { name: "amd", value: { go: "core.ModuleKindAMD" } }, - { name: "system", value: { go: "core.ModuleKindSystem" } }, - { name: "umd", value: { go: "core.ModuleKindUMD" } }, - { name: "es6", value: { go: "core.ModuleKindES2015" } }, - { name: "es2015", value: { go: "core.ModuleKindES2015" } }, - { name: "es2020", value: { go: "core.ModuleKindES2020" } }, - { name: "es2022", value: { go: "core.ModuleKindES2022" } }, - { name: "esnext", value: { go: "core.ModuleKindESNext" } }, - { name: "node16", value: { go: "core.ModuleKindNode16" } }, - { name: "node18", value: { go: "core.ModuleKindNode18" } }, - { name: "node20", value: { go: "core.ModuleKindNode20" } }, - { name: "nodenext", value: { go: "core.ModuleKindNodeNext" } }, - { name: "preserve", value: { go: "core.ModuleKindPreserve" } }, - ], - deprecatedKeys: [ - "none", - "amd", - "system", - "umd", - ], - }, - target: { - goName: "targetOptionMap", - schemaOnlyValues: ["es3"], - values: [ - { name: "es5", value: { go: "core.ScriptTargetES5" } }, - { name: "es6", value: { go: "core.ScriptTargetES2015" } }, - { name: "es2015", value: { go: "core.ScriptTargetES2015" } }, - { name: "es2016", value: { go: "core.ScriptTargetES2016" } }, - { name: "es2017", value: { go: "core.ScriptTargetES2017" } }, - { name: "es2018", value: { go: "core.ScriptTargetES2018" } }, - { name: "es2019", value: { go: "core.ScriptTargetES2019" } }, - { name: "es2020", value: { go: "core.ScriptTargetES2020" } }, - { name: "es2021", value: { go: "core.ScriptTargetES2021" } }, - { name: "es2022", value: { go: "core.ScriptTargetES2022" } }, - { name: "es2023", value: { go: "core.ScriptTargetES2023" } }, - { name: "es2024", value: { go: "core.ScriptTargetES2024" } }, - { name: "es2025", value: { go: "core.ScriptTargetES2025" } }, - { name: "es2026", value: { go: "core.ScriptTargetES2026" } }, - { name: "esnext", value: { go: "core.ScriptTargetESNext" } }, - ], - deprecatedKeys: [ - "es5", - ], - }, - moduleDetection: { - goName: "moduleDetectionOptionMap", - values: [ - { name: "auto", value: { go: "core.ModuleDetectionKindAuto" } }, - { name: "legacy", value: { go: "core.ModuleDetectionKindLegacy" } }, - { name: "force", value: { go: "core.ModuleDetectionKindForce" } }, - ], - }, - jsx: { - goName: "jsxOptionMap", - values: [ - { name: "preserve", value: { go: "core.JsxEmitPreserve" } }, - { name: "react-native", value: { go: "core.JsxEmitReactNative" } }, - { name: "react-jsx", value: { go: "core.JsxEmitReactJSX" } }, - { name: "react-jsxdev", value: { go: "core.JsxEmitReactJSXDev" } }, - { name: "react", value: { go: "core.JsxEmitReact" } }, - ], - }, - newLine: { - goName: "newLineOptionMap", - values: [ - { name: "crlf", value: { go: "core.NewLineKindCRLF" } }, - { name: "lf", value: { go: "core.NewLineKindLF" } }, - ], - }, - }, - enums: [ - { - name: "ModuleDetectionKind", - api: true, - members: [ - { - name: "None", - value: 0, - }, - { - name: "Auto", - value: 1, - }, - { - name: "Legacy", - value: 2, - }, - { - name: "Force", - value: 3, - }, - ], - }, - { - name: "ModuleKind", - api: true, - members: [ - { - name: "None", - value: 0, - }, - { - name: "CommonJS", - value: 1, - }, - { - name: "AMD", - value: 2, - comment: "Deprecated: Do not use outside of options parsing and validation.", - }, - { - name: "UMD", - value: 3, - comment: "Deprecated: Do not use outside of options parsing and validation.", - }, - { - name: "System", - value: 4, - comment: "Deprecated: Do not use outside of options parsing and validation.", - }, - { - name: "ES2015", - value: 5, - comment: "NOTE: ES module kinds should be contiguous to more easily check whether a module kind is *any* ES module kind.\nNon-ES module kinds should not come between ES2015 (the earliest ES module kind) and ESNext (the last ES\nmodule kind).", - }, - { - name: "ES2020", - value: 6, - }, - { - name: "ES2022", - value: 7, - }, - { - name: "ESNext", - value: 99, - }, - { - name: "Node16", - value: 100, - comment: "Node16+ is an amalgam of commonjs (albeit updated) and es2022+, and represents a distinct module system from es2020/esnext", - moduleResolution: "Node16", - }, - { - name: "Node18", - value: 101, - }, - { - name: "Node20", - value: 102, - }, - { - name: "NodeNext", - value: 199, - moduleResolution: "NodeNext", - }, - { - name: "Preserve", - value: 200, - comment: "Emit as written", - }, - ], - }, - { - name: "ModuleResolutionKind", - api: true, - stringer: "name", - members: [ - { - name: "Unknown", - value: 0, - }, - { - name: "Classic", - value: 1, - comment: "Deprecated: Do not use outside of options parsing and validation.", - }, - { - name: "Node10", - value: 2, - comment: "Deprecated: Do not use outside of options parsing and validation.", - }, - { - name: "Node16", - value: 3, - comment: "Starting with node16, node's module resolver has significant departures from traditional cjs resolution\nto better support ECMAScript modules and their use within node - however more features are still being added.\nTypeScript's Node ESM support was introduced after Node 12 went end-of-life, and Node 14 is the earliest stable\nversion that supports both pattern trailers - *but*, Node 16 is the first version that also supports ECMAScript 2022.\nIn turn, we offer both a `NodeNext` moving resolution target, and a `Node16` version-anchored resolution target", - }, - { - name: "NodeNext", - value: 99, - trailingComment: "Not simply `Node16` so that compiled code linked against TS can use the `Next` value reliably (same as with `ModuleKind`)", - }, - { - name: "Bundler", - value: 100, - }, - ], - }, - { - name: "NewLineKind", - api: true, - members: [ - { - name: "None", - value: 0, - }, - { - name: "CRLF", - value: 1, - }, - { - name: "LF", - value: 2, - }, - ], - }, - { - name: "ScriptTarget", - api: true, - members: [ - { - name: "None", - value: 0, - excludeFromAPI: true, - }, - { - name: "ES5", - value: 1, - comment: "Deprecated: Do not use outside of options parsing and validation.", - excludeFromAPI: true, - }, - { - name: "ES2015", - value: 2, - lib: "lib.es6.d.ts", - libComment: "Use lib.es6.d.ts for compatibility rather than lib.es2015.full.d.ts.", - }, - { - name: "ES2016", - value: 3, - lib: "lib.es2016.full.d.ts", - }, - { - name: "ES2017", - value: 4, - lib: "lib.es2017.full.d.ts", - }, - { - name: "ES2018", - value: 5, - lib: "lib.es2018.full.d.ts", - }, - { - name: "ES2019", - value: 6, - lib: "lib.es2019.full.d.ts", - }, - { - name: "ES2020", - value: 7, - lib: "lib.es2020.full.d.ts", - }, - { - name: "ES2021", - value: 8, - lib: "lib.es2021.full.d.ts", - }, - { - name: "ES2022", - value: 9, - lib: "lib.es2022.full.d.ts", - }, - { - name: "ES2023", - value: 10, - lib: "lib.es2023.full.d.ts", - }, - { - name: "ES2024", - value: 11, - lib: "lib.es2024.full.d.ts", - }, - { - name: "ES2025", - value: 12, - lib: "lib.es2025.full.d.ts", - }, - { - name: "ES2026", - value: 13, - lib: "lib.es2026.full.d.ts", - }, - { - name: "ESNext", - value: 99, - lib: "lib.esnext.full.d.ts", - }, - { - name: "JSON", - value: 100, - }, - { name: "Latest", value: "ESNext" }, - { - name: "LatestStandard", - value: "ES2026", - excludeFromAPI: true, - }, - ], - }, - { - name: "JsxEmit", - api: true, - stringer: { enumMap: "jsx" }, - members: [ - { - name: "None", - value: 0, - }, - { - name: "Preserve", - value: 1, - }, - { - name: "React", - value: 2, - }, - { - name: "ReactNative", - value: 3, - }, - { - name: "ReactJSX", - value: 4, - }, - { - name: "ReactJSXDev", - value: 5, - }, - ], - }, - ], -}; +import { + type CompilerOptionType, + diagnostic, + type OptionsModel, +} from "./options-model.ts"; + +export const pluginImportFields: { name: string; type: CompilerOptionType; }[] = [ + { name: "name", type: "string" }, +]; + +export const options: OptionsModel = { + schemaOnlyOptions: [ + { + name: "charset", + type: "string", + description: "The text encoding used to read source files in early TypeScript versions.", + }, + { + name: "out", + type: "string", + description: "The legacy predecessor of outFile, which combined emitted JavaScript into a single file.", + }, + { + name: "noImplicitUseStrict", + type: "boolean", + description: "Disable adding 'use strict' directives to emitted JavaScript.", + }, + { + name: "noStrictGenericChecks", + type: "boolean", + description: "Disable strict checking of generic signatures in function types.", + }, + { + name: "keyofStringsOnly", + type: "boolean", + description: "Make keyof return only strings instead of strings, numbers, or symbols.", + }, + { + name: "suppressExcessPropertyErrors", + type: "boolean", + description: "Disable excess property errors when creating object literals.", + }, + { + name: "suppressImplicitAnyIndexErrors", + type: "boolean", + description: "Suppress noImplicitAny errors when indexing objects that lack index signatures.", + }, + { + name: "preserveValueImports", + type: "boolean", + description: "Preserve unused imported values in JavaScript output. Superseded by verbatimModuleSyntax.", + }, + { + name: "importsNotUsedAsValues", + type: "enum", + values: ["remove", "preserve", "error"], + description: "Control emit and checking for imports used only as types. Superseded by verbatimModuleSyntax.", + }, + ], + compilerOptions: [ + { + name: "allowJs", + type: "Tristate", + jsconfigDefault: true, + declaration: { + group: "optionsForCompiler", + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("JavaScript Support"), + description: diagnostic("Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files."), + defaultValueDescription: diagnostic("`false`, unless `checkJs` is set"), + }, + }, + { + name: "allowArbitraryExtensions", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Enable importing files with any extension, provided a declaration file is present."), + defaultValueDescription: false, + }, + }, + { + name: "allowImportingTsExtensions", + transpile: { value: "clear" }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Modules"), + description: diagnostic("Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set."), + defaultValueDescription: false, + }, + }, + { + name: "allowNonTsExtensions", + transpile: { value: true }, + type: "Tristate", + }, + { + name: "allowUmdGlobalAccess", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Modules"), + description: diagnostic("Allow accessing UMD globals from modules."), + defaultValueDescription: false, + }, + }, + { + name: "allowUnreachableCode", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Disable error reporting for unreachable code."), + defaultValueDescription: { go: "core.TSUnknown" }, + }, + }, + { + name: "allowUnusedLabels", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Disable error reporting for unused labels."), + defaultValueDescription: { go: "core.TSUnknown" }, + }, + }, + { + name: "assumeChangesOnlyAffectDirectDependencies", + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Watch and Build Modes"), + description: diagnostic("Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it."), + defaultValueDescription: false, + }, + }, + { + name: "checkJs", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("JavaScript Support"), + description: diagnostic("Enable error reporting in type-checked JavaScript files."), + defaultValueDescription: false, + }, + }, + { + name: "customConditions", + type: "[]string", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Conditions to set in addition to the resolver-specific defaults when resolving imports."), + }, + }, + { + name: "composite", + transpile: { value: "clear" }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsBuildInfo: true, + isTSConfigOnly: true, + category: diagnostic("Projects"), + defaultValueDescription: false, + description: diagnostic("Enable constraints that allow a TypeScript project to be used with project references."), + }, + }, + { + name: "emitDeclarationOnly", + transpile: { value: "clear", declarationValue: true }, + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // Full emit is calculated separately, so this does not set affectsEmit. + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + description: diagnostic("Only output d.ts files and not JavaScript files."), + defaultValueDescription: false, + }, + }, + { + name: "emitBOM", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."), + defaultValueDescription: false, + }, + }, + { + name: "emitDecoratorMetadata", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Emit design-type metadata for decorated declarations in source files."), + defaultValueDescription: false, + }, + }, + { + name: "declaration", + transpile: { value: false, declarationValue: true }, + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // Full emit is calculated separately, so this does not set affectsEmit. + shortName: "d", + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + description: diagnostic("Generate .d.ts files from TypeScript and JavaScript files in your project."), + defaultValueDescription: diagnostic("`false`, unless `composite` is set"), + }, + }, + { + name: "declarationDir", + transpile: { value: "clear" }, + type: "string", + pathKind: "directory", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + category: diagnostic("Emit"), + description: diagnostic("Specify the output directory for generated declaration files."), + }, + }, + { + name: "declarationMap", + transpile: { value: false, declarationValue: "preserve" }, + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // Full emit is calculated separately, so this does not set affectsEmit. + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + defaultValueDescription: false, + description: diagnostic("Create sourcemaps for d.ts files."), + }, + }, + { + name: "deduplicatePackages", + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Type Checking"), + description: diagnostic("Deduplicate packages with the same name and version."), + documentationAnchor: false, + defaultValueDescription: true, + }, + }, + { + name: "disableSizeLimit", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Editor Support"), + description: diagnostic("Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."), + defaultValueDescription: false, + }, + }, + { + name: "disableSourceOfProjectReferenceRedirect", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + isTSConfigOnly: true, + category: diagnostic("Projects"), + description: diagnostic("Disable preferring source files instead of declaration files when referencing composite projects."), + defaultValueDescription: false, + }, + }, + { + name: "disableSolutionSearching", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + isTSConfigOnly: true, + category: diagnostic("Projects"), + description: diagnostic("Opt a project out of multi-project reference checking when editing."), + defaultValueDescription: false, + }, + }, + { + name: "disableReferencedProjectLoad", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + isTSConfigOnly: true, + category: diagnostic("Projects"), + description: diagnostic("Reduce the number of projects loaded automatically by TypeScript."), + defaultValueDescription: false, + }, + }, + { + name: "erasableSyntaxOnly", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Interop Constraints"), + description: diagnostic("Do not allow runtime constructs that are not part of ECMAScript."), + defaultValueDescription: false, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true, + }, + }, + { + name: "exactOptionalPropertyTypes", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Interpret optional property types as written, rather than adding 'undefined'."), + defaultValueDescription: false, + }, + }, + { + name: "experimentalDecorators", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Enable experimental support for legacy experimental decorators."), + defaultValueDescription: false, + }, + }, + { + name: "forceConsistentCasingInFileNames", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Interop Constraints"), + description: diagnostic("Ensure that casing is correct in imports."), + defaultValueDescription: true, + }, + }, + { + name: "isolatedModules", + transpile: { value: true, unless: "verbatimModuleSyntax" }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Interop Constraints"), + description: diagnostic("Ensure that each file can be safely transpiled without relying on other imports."), + defaultValueDescription: false, + }, + }, + { + name: "isolatedDeclarations", + transpile: { value: false, declarationValue: true }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Interop Constraints"), + description: diagnostic("Require sufficient annotation on exports so other tools can trivially generate declaration files."), + defaultValueDescription: false, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true, + }, + }, + { + name: "ignoreConfig", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + isCommandLineOnly: true, + description: diagnostic("Ignore the tsconfig found and build with commandline options and files."), + defaultValueDescription: false, + }, + }, + { + name: "ignoreDeprecations", + type: "string", + declaration: { + group: "optionsForCompiler", + defaultValueDescription: { go: "core.TSUnknown" }, + }, + }, + { + name: "importHelpers", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Allow importing helper functions from tslib once per project, instead of including them per-file."), + defaultValueDescription: false, + }, + }, + { + name: "inlineSourceMap", + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // Full emit is calculated separately, so this does not set affectsEmit. + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Include sourcemap files inside the emitted JavaScript."), + defaultValueDescription: false, + }, + }, + { + name: "inlineSources", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Include source code in the sourcemaps inside the emitted JavaScript."), + defaultValueDescription: false, + }, + }, + { + name: "init", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Initializes a TypeScript project and creates a tsconfig.json file."), + defaultValueDescription: false, + }, + }, + { + name: "incremental", + transpile: { value: "clear" }, + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + shortName: "i", + category: diagnostic("Projects"), + description: diagnostic("Save .tsbuildinfo files to allow for incremental compilation of projects."), + defaultValueDescription: diagnostic("`false`, unless `composite` is set"), + }, + }, + { + name: "jsx", + type: "JsxEmit", + declaration: { + group: "optionsForCompiler", + // JSX without this option is a semantic error; changing it must refresh semantic diagnostics. + affectsEmit: true, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true, + showInSimplifiedHelpView: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Specify what JSX code is generated."), + defaultValueDescription: { go: "core.TSUnknown" }, + }, + }, + { + name: "jsxFactory", + type: "string", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Language and Environment"), + description: diagnostic("Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'."), + defaultValueDescription: "`React.createElement`", + }, + }, + { + name: "jsxFragmentFactory", + type: "string", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Language and Environment"), + description: diagnostic("Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."), + defaultValueDescription: "React.Fragment", + }, + }, + { + name: "jsxImportSource", + type: "string", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'."), + defaultValueDescription: "react", + }, + }, + { + name: "lib", + transpile: { value: "clear" }, + type: "[]string", + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Specify a set of bundled library declaration files that describe the target runtime environment."), + }, + }, + { + name: "libReplacement", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Language and Environment"), + description: diagnostic("Enable lib replacement."), + defaultValueDescription: false, + }, + }, + { + name: "locale", + type: "string", + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Command-line Options"), + isCommandLineOnly: true, + description: diagnostic("Set the language of the messaging from TypeScript. This does not affect emit."), + defaultValueDescription: diagnostic("Platform specific"), + extraValidation: "locale", + }, + }, + { + name: "mapRoot", + type: "string", + pathKind: "sourceMapLocation", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Specify the location where debugger should locate map files instead of generated locations."), + }, + }, + { + name: "module", + type: "ModuleKind", + declaration: { + group: "optionsForCompiler", + shortName: "m", + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Modules"), + description: diagnostic("Specify what module code is generated."), + defaultValueDescription: { go: "core.TSUnknown" }, + }, + }, + { + name: "moduleResolution", + type: "ModuleResolutionKind", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Specify how TypeScript looks up a file from a given module specifier."), + defaultValueDescription: diagnostic("`nodenext` if `module` is `nodenext`; `node16` if `module` is `node16` or `node18`; otherwise, `bundler`."), + }, + }, + { + name: "moduleSuffixes", + type: "[]string", + declaration: { + group: "optionsForCompiler", + listPreserveFalsyValues: true, + category: diagnostic("Modules"), + description: diagnostic("List of file name suffixes to search when resolving a module."), + }, + }, + { + name: "moduleDetection", + type: "ModuleDetectionKind", + parseAliases: [ + "moduleDetectionKind", + ], + declaration: { + group: "optionsForCompiler", + description: diagnostic("Control what method is used to detect module-format JS files."), + category: diagnostic("Language and Environment"), + defaultValueDescription: diagnostic('"auto": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.'), + }, + }, + { + name: "newLine", + type: "NewLineKind", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Set the newline character for emitting files."), + defaultValueDescription: "lf", + }, + }, + { + name: "noEmit", + transpile: { value: "clear" }, + type: "Tristate", + jsconfigDefault: true, + declaration: { + group: "commonOptionsWithBuild", + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + description: diagnostic("Disable emitting files from a compilation."), + defaultValueDescription: false, + }, + }, + { + name: "noCheck", + transpile: { value: true }, + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // The builder handles this specially so changing noCheck does not discard all diagnostics. + showInSimplifiedHelpView: false, + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Disable full type checking (only critical parse and emit errors will be reported)."), + defaultValueDescription: false, + }, + }, + { + name: "noErrorTruncation", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Output Formatting"), + description: diagnostic("Disable truncating types in error messages."), + defaultValueDescription: false, + }, + }, + { + name: "noFallthroughCasesInSwitch", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable error reporting for fallthrough cases in switch statements."), + defaultValueDescription: false, + }, + }, + { + name: "noImplicitAny", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable error reporting for expressions and declarations with an implied 'any' type."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "noImplicitThis", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable error reporting when 'this' is given the type 'any'."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "noImplicitReturns", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable error reporting for codepaths that do not explicitly return in a function."), + defaultValueDescription: false, + }, + }, + { + name: "noEmitHelpers", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Disable generating custom helper functions like '__extends' in compiled output."), + defaultValueDescription: false, + }, + }, + { + name: "noLib", + transpile: { value: true, declarationValue: false }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + // Transpilation does not supply library source files, so noLib avoids reporting missing files. + category: diagnostic("Language and Environment"), + description: diagnostic("Disable including any library files, including the default lib.d.ts."), + defaultValueDescription: false, + }, + }, + { + name: "noPropertyAccessFromIndexSignature", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: false, + category: diagnostic("Type Checking"), + description: diagnostic("Enforces using indexed accessors for keys declared using an indexed type."), + defaultValueDescription: false, + }, + }, + { + name: "noUncheckedIndexedAccess", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Add 'undefined' to a type when accessed using an index."), + defaultValueDescription: false, + }, + }, + { + name: "noEmitOnError", + transpile: { value: "clear" }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Disable emitting files if any type checking errors are reported."), + defaultValueDescription: false, + }, + }, + { + name: "noUnusedLocals", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable error reporting when local variables aren't read."), + defaultValueDescription: false, + }, + }, + { + name: "noUnusedParameters", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Raise an error when a function parameter isn't read."), + defaultValueDescription: false, + }, + }, + { + name: "noResolve", + transpile: { value: true }, + type: "Tristate", + declaration: { + group: "optionsForCompiler", + // Transpilation does not resolve the full program, so noResolve avoids reporting missing files. + category: diagnostic("Modules"), + description: diagnostic("Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project."), + defaultValueDescription: false, + }, + }, + { + name: "noImplicitOverride", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Ensure overriding members in derived classes are marked with an override modifier."), + defaultValueDescription: false, + }, + }, + { + name: "noUncheckedSideEffectImports", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Modules"), + description: diagnostic("Check side effect imports."), + defaultValueDescription: true, + }, + }, + { + name: "outDir", + type: "string", + pathKind: "directory", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + description: diagnostic("Specify an output folder for all emitted files."), + }, + }, + { + name: "paths", + transpile: { value: "clear" }, + type: "*collections.OrderedMap[string, []string]", + declaration: { + group: "optionsForCompiler", + allowConfigDirTemplateSubstitution: true, + isTSConfigOnly: true, + category: diagnostic("Modules"), + description: diagnostic("Specify a set of entries that re-map imports to additional lookup locations."), + }, + }, + { + name: "plugins", + type: "[]PluginImport", + comment: "Plugins are parsed only so tools can report that native TypeScript does not support them.", + declaration: { + group: "optionsForCompiler", + isTSConfigOnly: true, + description: diagnostic("Specify a list of language service plugins to include."), + category: diagnostic("Editor Support"), + }, + }, + { + name: "preserveConstEnums", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Disable erasing 'const enum' declarations in generated code."), + defaultValueDescription: false, + }, + }, + { + name: "preserveSymlinks", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Interop Constraints"), + description: diagnostic("Disable resolving symlinks to their realpath. This correlates to the same flag in node."), + defaultValueDescription: false, + }, + }, + { + name: "project", + type: "string", + pathKind: "fileOrDirectory", + declaration: { + group: "optionsForCompiler", + shortName: "p", + isFilePath: true, + allowConfigDirTemplateSubstitution: false, + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."), + }, + }, + { + name: "resolveJsonModule", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Enable importing .json files."), + defaultValueDescription: false, + }, + }, + { + name: "resolvePackageJsonExports", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Use the package.json 'exports' field when resolving package imports."), + defaultValueDescription: diagnostic("`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`."), + }, + }, + { + name: "resolvePackageJsonImports", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + category: diagnostic("Modules"), + description: diagnostic("Use the package.json 'imports' field when resolving imports."), + defaultValueDescription: diagnostic("`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`."), + }, + }, + { + name: "removeComments", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + defaultValueDescription: false, + description: diagnostic("Disable emitting comments."), + }, + }, + { + name: "rewriteRelativeImportExtensions", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Modules"), + description: diagnostic("Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files."), + defaultValueDescription: false, + }, + }, + { + name: "reactNamespace", + type: "string", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit."), + defaultValueDescription: "`React`", + }, + }, + { + name: "rootDir", + type: "string", + pathKind: "directory", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + category: diagnostic("Modules"), + description: diagnostic("Specify the root folder within your source files."), + defaultValueDescription: diagnostic("Computed from the list of input files"), + }, + }, + { + name: "rootDirs", + transpile: { value: "clear" }, + type: "[]string", + pathKind: "directory", + declaration: { + group: "optionsForCompiler", + isTSConfigOnly: true, + allowConfigDirTemplateSubstitution: true, + category: diagnostic("Modules"), + description: diagnostic("Allow multiple folders to be treated as one when resolving modules."), + defaultValueDescription: diagnostic("Computed from the list of input files"), + }, + }, + { + name: "skipLibCheck", + type: "Tristate", + jsconfigDefault: true, + declaration: { + group: "optionsForCompiler", + // Store this in build info to determine whether library files need to be rechecked. + affectsBuildInfo: true, + category: diagnostic("Completeness"), + description: diagnostic("Skip type checking all .d.ts files."), + defaultValueDescription: false, + }, + }, + { + name: "stableTypeOrdering", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Ensure types are ordered stably and deterministically across compilations."), + documentationAnchor: false, + defaultValueDescription: true, + }, + }, + { + name: "strict", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + // Individual strict flags determine semantic diagnostics. Store strict in build info so their effective values can be recovered. + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Type Checking"), + description: diagnostic("Enable all strict type-checking options."), + defaultValueDescription: true, + }, + }, + { + name: "strictBindCallApply", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Check that the arguments for 'bind', 'call', and 'apply' methods match the original function."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "strictBuiltinIteratorReturn", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "strictFunctionTypes", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("When assigning functions, check to ensure parameters and the return values are subtype-compatible."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "strictNullChecks", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("When type checking, take into account 'null' and 'undefined'."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "strictPropertyInitialization", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Check for class properties that are declared but not set in the constructor."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "stripInternal", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Disable emitting declarations that have '@internal' in their JSDoc comments."), + defaultValueDescription: false, + }, + }, + { + name: "skipDefaultLibCheck", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + // Store this in build info to determine whether library files need to be rechecked. + affectsBuildInfo: true, + category: diagnostic("Completeness"), + description: diagnostic("Skip type checking .d.ts files that are included with TypeScript."), + defaultValueDescription: false, + }, + }, + { + name: "sourceMap", + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + // Full emit is calculated separately, so this does not set affectsEmit. + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + defaultValueDescription: false, + description: diagnostic("Create source map files for emitted JavaScript files."), + }, + }, + { + name: "sourceRoot", + type: "string", + pathKind: "sourceMapLocation", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Specify the root path for debuggers to find the reference source code."), + }, + }, + { + name: "suppressOutputPathCheck", + transpile: { value: true }, + type: "Tristate", + }, + { + name: "target", + type: "ScriptTarget", + declaration: { + group: "optionsForCompiler", + shortName: "t", + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Set the JavaScript language version for emitted JavaScript and include compatible library declarations."), + defaultValueDescription: { go: "core.ScriptTargetLatestStandard" }, + }, + }, + { + name: "traceResolution", + type: "Tristate", + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Log paths used during the 'moduleResolution' process."), + defaultValueDescription: false, + }, + }, + { + name: "tsBuildInfoFile", + transpile: { value: "clear" }, + type: "string", + pathKind: "file", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + isFilePath: true, + category: diagnostic("Projects"), + defaultValueDescription: ".tsbuildinfo", + description: diagnostic("Specify the path to .tsbuildinfo incremental compilation file."), + }, + }, + { + name: "typeRoots", + type: "[]string", + pathKind: "directory", + declaration: { + group: "optionsForCompiler", + allowConfigDirTemplateSubstitution: true, + category: diagnostic("Modules"), + description: diagnostic("Specify multiple folders that act like './node_modules/@types'."), + }, + }, + { + name: "types", + transpile: { value: "clear" }, + type: "[]string", + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Modules"), + description: diagnostic("Specify type package names to be included without being referenced in a source file."), + }, + }, + { + name: "useDefineForClassFields", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Language and Environment"), + description: diagnostic("Emit ECMAScript-standard-compliant class fields."), + defaultValueDescription: diagnostic("`true` for ES2022 and above, including ESNext."), + }, + }, + { + name: "useUnknownInCatchVariables", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: diagnostic("Type Checking"), + description: diagnostic("Default catch clause variables as 'unknown' instead of 'any'."), + defaultValueDescription: diagnostic("`true`, unless `strict` is `false`"), + }, + }, + { + name: "verbatimModuleSyntax", + type: "Tristate", + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Interop Constraints"), + description: diagnostic("Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), + defaultValueDescription: false, + }, + }, + { + name: "maxNodeModuleJsDepth", + type: "*int", + jsconfigDefault: 2, + declaration: { + group: "optionsForCompiler", + category: diagnostic("JavaScript Support"), + description: diagnostic("Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'."), + defaultValueDescription: 0, + }, + }, + { + name: "allowSyntheticDefaultImports", + type: "Tristate", + deprecated: true, + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: diagnostic("Interop Constraints"), + description: diagnostic("Allow 'import x from y' when a module doesn't have a default export."), + defaultValueDescription: true, + }, + }, + { + name: "alwaysStrict", + type: "Tristate", + deprecated: true, + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Type Checking"), + description: diagnostic("Ensure 'use strict' is always emitted."), + defaultValueDescription: true, + }, + }, + { + name: "baseUrl", + type: "string", + pathKind: "directory", + deprecated: true, + declaration: { + group: "optionsForCompiler", + isFilePath: true, + category: diagnostic("Modules"), + description: diagnostic("Specify the base directory to resolve non-relative module names."), + }, + }, + { + name: "downlevelIteration", + type: "Tristate", + deprecated: true, + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + category: diagnostic("Emit"), + description: diagnostic("Emit more compliant, but verbose and less performant JavaScript for iteration."), + defaultValueDescription: false, + }, + }, + { + name: "esModuleInterop", + type: "Tristate", + goName: "ESModuleInterop", + deprecated: true, + declaration: { + group: "optionsForCompiler", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: diagnostic("Interop Constraints"), + description: diagnostic("Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility."), + defaultValueDescription: true, + }, + }, + { + name: "outFile", + transpile: { value: "clear" }, + type: "string", + pathKind: "file", + deprecated: true, + declaration: { + group: "optionsForCompiler", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + showInSimplifiedHelpView: true, + category: diagnostic("Emit"), + description: diagnostic("Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output."), + }, + }, + { + name: "configFilePath", + type: "string", + pathKind: "file", + section: "Internal fields", + }, + { + name: "noDtsResolution", + type: "Tristate", + internal: true, + }, + { + name: "pathsBasePath", + type: "string", + pathKind: "directory", + internal: true, + }, + { + name: "diagnostics", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Output compiler performance information after building."), + defaultValueDescription: false, + }, + }, + { + name: "extendedDiagnostics", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Output more detailed compiler performance information after building."), + defaultValueDescription: false, + }, + }, + { + name: "generateCpuProfile", + type: "string", + pathKind: "file", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + isFilePath: true, + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Emit a v8 CPU profile of the compiler run for debugging."), + defaultValueDescription: "profile.cpuprofile", + }, + }, + { + name: "generateTrace", + type: "string", + pathKind: "directory", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + isFilePath: true, + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Generates an event trace and a list of types."), + }, + }, + { + name: "listEmittedFiles", + type: "Tristate", + // File listings are excluded from showConfig despite belonging to Compiler Diagnostics. + showConfig: false, + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Print the names of emitted files after a compilation."), + defaultValueDescription: false, + }, + }, + { + name: "listFiles", + type: "Tristate", + showConfig: false, + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Print all of the files read during the compilation."), + defaultValueDescription: false, + }, + }, + { + name: "explainFiles", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Compiler Diagnostics"), + description: diagnostic("Print files read during the compilation including why it was included."), + defaultValueDescription: false, + }, + }, + { + name: "listFilesOnly", + type: "Tristate", + internal: true, + declaration: { + group: "optionsForCompiler", + category: diagnostic("Command-line Options"), + isCommandLineOnly: true, + description: diagnostic("Print names of files that are part of the compilation and then stop processing."), + defaultValueDescription: false, + }, + }, + { + name: "noEmitForJsFiles", + type: "Tristate", + internal: true, + }, + { + name: "preserveWatchOutput", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + showInSimplifiedHelpView: false, + category: diagnostic("Output Formatting"), + description: diagnostic("Disable wiping the console in watch mode."), + defaultValueDescription: false, + }, + }, + { + name: "pretty", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + showInSimplifiedHelpView: true, + category: diagnostic("Output Formatting"), + description: diagnostic("Enable color and formatting in TypeScript's output to make compiler errors easier to read."), + defaultValueDescription: true, + }, + }, + { + name: "version", + type: "Tristate", + internal: true, + declaration: { + group: "optionsForCompiler", + shortName: "v", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Print the compiler's version."), + defaultValueDescription: false, + }, + }, + { + name: "watch", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + shortName: "w", + showInSimplifiedHelpView: true, + isCommandLineOnly: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Watch input files."), + defaultValueDescription: false, + }, + }, + { + name: "showConfig", + type: "Tristate", + internal: true, + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + isCommandLineOnly: true, + description: diagnostic("Print the final configuration instead of building."), + defaultValueDescription: false, + }, + }, + { + name: "build", + type: "Tristate", + internal: true, + }, + { + name: "help", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + shortName: "h", + extraShortNames: ["?"], + showInSimplifiedHelpView: true, + isCommandLineOnly: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Print this message."), + defaultValueDescription: false, + }, + }, + { + name: "all", + type: "Tristate", + internal: true, + declaration: { + group: "optionsForCompiler", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Show all compiler options."), + defaultValueDescription: false, + }, + }, + { + name: "runExternalCode", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Command-line Options"), + isCommandLineOnly: true, + description: diagnostic("Allow loading external content mapper plugins that execute code during compilation."), + defaultValueDescription: false, + }, + }, + { + name: "pprofDir", + type: "string", + pathKind: "directory", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + isFilePath: true, + allowConfigDirTemplateSubstitution: false, + category: diagnostic("Command-line Options"), + description: diagnostic("Generate pprof CPU/memory profiles to the given directory."), + }, + }, + { + name: "singleThreaded", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Command-line Options"), + description: diagnostic("Run in single threaded mode."), + }, + }, + { + name: "quiet", + type: "Tristate", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + shortName: "q", + category: diagnostic("Command-line Options"), + description: diagnostic("Do not print diagnostics."), + }, + }, + { + name: "checkers", + type: "*int", + internal: true, + declaration: { + group: "commonOptionsWithBuild", + category: diagnostic("Command-line Options"), + description: diagnostic("Set the number of checkers per project."), + defaultValueDescription: diagnostic("4, unless --singleThreaded is passed."), + minValue: 1, + }, + }, + ], + // Preserve help and config output order independently of compiler fields. + declarationOrder: { + commonOptionsWithBuild: [ + "help", + "watch", + "preserveWatchOutput", + "listFiles", + "explainFiles", + "listEmittedFiles", + "pretty", + "traceResolution", + "diagnostics", + "extendedDiagnostics", + "generateCpuProfile", + "generateTrace", + "incremental", + "declaration", + "declarationMap", + "emitDeclarationOnly", + "sourceMap", + "inlineSourceMap", + "noCheck", + "deduplicatePackages", + "noEmit", + "assumeChangesOnlyAffectDirectDependencies", + "locale", + "quiet", + "singleThreaded", + "pprofDir", + "checkers", + "runExternalCode", + ], + optionsForCompiler: [ + "all", + "version", + "init", + "project", + "showConfig", + "listFilesOnly", + "ignoreConfig", + "target", + "module", + "lib", + "allowJs", + "checkJs", + "jsx", + "outFile", + "outDir", + "rootDir", + "composite", + "tsBuildInfoFile", + "removeComments", + "importHelpers", + "downlevelIteration", + "isolatedModules", + "verbatimModuleSyntax", + "isolatedDeclarations", + "erasableSyntaxOnly", + "libReplacement", + "strict", + "noImplicitAny", + "strictNullChecks", + "strictFunctionTypes", + "strictBindCallApply", + "strictPropertyInitialization", + "strictBuiltinIteratorReturn", + "noImplicitThis", + "useUnknownInCatchVariables", + "alwaysStrict", + "stableTypeOrdering", + "noUnusedLocals", + "noUnusedParameters", + "exactOptionalPropertyTypes", + "noImplicitReturns", + "noFallthroughCasesInSwitch", + "noUncheckedIndexedAccess", + "noImplicitOverride", + "noPropertyAccessFromIndexSignature", + "moduleResolution", + "baseUrl", + "paths", + "rootDirs", + "typeRoots", + "types", + "allowSyntheticDefaultImports", + "esModuleInterop", + "preserveSymlinks", + "allowUmdGlobalAccess", + "moduleSuffixes", + "allowImportingTsExtensions", + "rewriteRelativeImportExtensions", + "resolvePackageJsonExports", + "resolvePackageJsonImports", + "customConditions", + "noUncheckedSideEffectImports", + "sourceRoot", + "mapRoot", + "inlineSources", + "experimentalDecorators", + "emitDecoratorMetadata", + "jsxFactory", + "jsxFragmentFactory", + "jsxImportSource", + "resolveJsonModule", + "allowArbitraryExtensions", + "reactNamespace", + "skipDefaultLibCheck", + "emitBOM", + "newLine", + "noErrorTruncation", + "noLib", + "noResolve", + "stripInternal", + "disableSizeLimit", + "disableSourceOfProjectReferenceRedirect", + "disableSolutionSearching", + "disableReferencedProjectLoad", + "noEmitHelpers", + "noEmitOnError", + "preserveConstEnums", + "declarationDir", + "skipLibCheck", + "allowUnusedLabels", + "allowUnreachableCode", + "forceConsistentCasingInFileNames", + "maxNodeModuleJsDepth", + "useDefineForClassFields", + "plugins", + "moduleDetection", + "ignoreDeprecations", + ], + }, + typeAcquisition: [ + { + name: "enable", + kind: "Boolean", + schemaDescription: "Enable automatic type acquisition for JavaScript projects.", + jsconfigDefault: true, + defaultValueDescription: false, + field: { + name: "Enable", + type: "Tristate", + }, + }, + { + name: "include", + kind: "List", + schemaDescription: "Packages to include in automatic type acquisition.", + field: { + name: "Include", + type: "[]string", + }, + }, + { + name: "exclude", + kind: "List", + schemaDescription: "Packages to exclude from automatic type acquisition.", + field: { + name: "Exclude", + type: "[]string", + }, + }, + { + name: "disableFilenameBasedTypeAcquisition", + kind: "Boolean", + schemaDescription: "Disable inferring type acquisition packages from file names.", + defaultValueDescription: false, + field: { + name: "DisableFilenameBasedTypeAcquisition", + type: "Tristate", + }, + }, + ], + buildOptions: [ + { + name: "build", + kind: "Boolean", + shortName: "b", + showInSimplifiedHelpView: true, + category: diagnostic("Command-line Options"), + description: diagnostic("Build one or more projects and their dependencies, if out of date"), + defaultValueDescription: false, + }, + { + name: "verbose", + kind: "Boolean", + shortName: "v", + category: diagnostic("Command-line Options"), + description: diagnostic("Enable verbose logging."), + defaultValueDescription: false, + field: { name: "Verbose", type: "Tristate" }, + }, + { + name: "dry", + kind: "Boolean", + shortName: "d", + category: diagnostic("Command-line Options"), + description: diagnostic("Show what would be built (or deleted, if specified with '--clean')"), + defaultValueDescription: false, + field: { name: "Dry", type: "Tristate" }, + }, + { + name: "force", + kind: "Boolean", + shortName: "f", + category: diagnostic("Command-line Options"), + description: diagnostic("Build all projects, including those that appear to be up to date."), + defaultValueDescription: false, + field: { name: "Force", type: "Tristate" }, + }, + { + name: "clean", + kind: "Boolean", + category: diagnostic("Command-line Options"), + description: diagnostic("Delete the outputs of all projects."), + defaultValueDescription: false, + field: { name: "Clean", type: "Tristate", section: "Internal fields" }, + }, + { + name: "builders", + kind: "Number", + category: diagnostic("Command-line Options"), + description: diagnostic("Set the number of projects to build concurrently."), + defaultValueDescription: diagnostic("4, unless --singleThreaded is passed."), + minValue: 1, + field: { name: "Builders", type: "*int" }, + }, + { + name: "stopBuildOnErrors", + kind: "Boolean", + category: diagnostic("Command-line Options"), + description: diagnostic("Skip building downstream projects on error in upstream project."), + defaultValueDescription: false, + field: { name: "StopBuildOnErrors", type: "Tristate" }, + }, + ], + buildOptionFieldOrder: ["dry", "force", "verbose", "builders", "stopBuildOnErrors", "clean"], + rootOptions: [ + { name: "compilerOptions", kind: "Object", variable: "compilerOptionsDeclaration", elementOptions: "compilerOptions", documentationAnchor: "" }, + { name: "typeAcquisition", kind: "Object", variable: "typeAcquisitionDeclaration", elementOptions: "typeAcquisition" }, + { name: "extends", kind: "ListOrElement", variable: "extendsOptionDeclaration", category: diagnostic("File Management"), elementOptions: "extends" }, + { name: "references", kind: "List" }, + { name: "contentMappers", kind: "List", documentationAnchor: false }, + { name: "files", kind: "List" }, + { name: "include", kind: "List" }, + { name: "exclude", kind: "List" }, + { name: "compileOnSave", kind: "Boolean", variable: "compileOnSaveCommandLineOption", defaultValueDescription: false, documentationAnchor: false }, + ], + elements: { + lib: { + name: "lib", + kind: "Enum", + defaultValueDescription: { go: "core.TSUnknown" }, + }, + rootDirs: { + name: "rootDirs", + kind: "String", + isFilePath: true, + pathKind: "directory", + }, + typeRoots: { + name: "typeRoots", + kind: "String", + isFilePath: true, + pathKind: "directory", + }, + types: { + name: "types", + kind: "String", + }, + moduleSuffixes: { + name: "moduleSuffixes", + kind: "String", + }, + customConditions: { + name: "condition", + kind: "String", + }, + plugins: { + name: "plugin", + kind: "Object", + }, + references: { + name: "references", + kind: "Object", + }, + contentMappers: { + name: "contentMappers", + kind: "Object", + }, + files: { + name: "files", + kind: "String", + pathKind: "fileSpec", + }, + include: { + name: "include", + kind: "String", + pathKind: "pathPattern", + }, + exclude: { + name: "exclude", + kind: "String", + pathKind: "pathPattern", + }, + extends: { + name: "extends", + kind: "String", + pathKind: "configLocator", + }, + libFiles: { + name: "libFiles", + kind: "String", + }, + }, + enumMaps: { + lib: { + goName: "LibMap", + schemaOnlyValues: ["es2022.sharedmemory"], + values: [ + { name: "es5", value: "lib.es5.d.ts" }, + { name: "es6", value: "lib.es2015.d.ts" }, + { name: "es2015", value: "lib.es2015.d.ts" }, + { name: "es7", value: "lib.es2016.d.ts" }, + { name: "es2016", value: "lib.es2016.d.ts" }, + { name: "es2017", value: "lib.es2017.d.ts" }, + { name: "es2018", value: "lib.es2018.d.ts" }, + { name: "es2019", value: "lib.es2019.d.ts" }, + { name: "es2020", value: "lib.es2020.d.ts" }, + { name: "es2021", value: "lib.es2021.d.ts" }, + { name: "es2022", value: "lib.es2022.d.ts" }, + { name: "es2023", value: "lib.es2023.d.ts" }, + { name: "es2024", value: "lib.es2024.d.ts" }, + { name: "es2025", value: "lib.es2025.d.ts" }, + { name: "es2026", value: "lib.es2026.d.ts" }, + { name: "esnext", value: "lib.esnext.d.ts" }, + { name: "dom", value: "lib.dom.d.ts" }, + { name: "dom.iterable", value: "lib.dom.iterable.d.ts" }, + { name: "dom.asynciterable", value: "lib.dom.asynciterable.d.ts" }, + { name: "webworker", value: "lib.webworker.d.ts" }, + { name: "webworker.importscripts", value: "lib.webworker.importscripts.d.ts" }, + { name: "webworker.iterable", value: "lib.webworker.iterable.d.ts" }, + { name: "webworker.asynciterable", value: "lib.webworker.asynciterable.d.ts" }, + { name: "scripthost", value: "lib.scripthost.d.ts" }, + { name: "es2015.core", value: "lib.es2015.core.d.ts" }, + { name: "es2015.collection", value: "lib.es2015.collection.d.ts" }, + { name: "es2015.generator", value: "lib.es2015.generator.d.ts" }, + { name: "es2015.iterable", value: "lib.es2015.iterable.d.ts" }, + { name: "es2015.promise", value: "lib.es2015.promise.d.ts" }, + { name: "es2015.proxy", value: "lib.es2015.proxy.d.ts" }, + { name: "es2015.reflect", value: "lib.es2015.reflect.d.ts" }, + { name: "es2015.symbol", value: "lib.es2015.symbol.d.ts" }, + { name: "es2015.symbol.wellknown", value: "lib.es2015.symbol.wellknown.d.ts" }, + { name: "es2016.array.include", value: "lib.es2016.array.include.d.ts" }, + { name: "es2016.intl", value: "lib.es2016.intl.d.ts" }, + { name: "es2017.arraybuffer", value: "lib.es2017.arraybuffer.d.ts" }, + { name: "es2017.date", value: "lib.es2017.date.d.ts" }, + { name: "es2017.object", value: "lib.es2017.object.d.ts" }, + { name: "es2017.sharedmemory", value: "lib.es2017.sharedmemory.d.ts" }, + { name: "es2017.string", value: "lib.es2017.string.d.ts" }, + { name: "es2017.intl", value: "lib.es2017.intl.d.ts" }, + { name: "es2017.typedarrays", value: "lib.es2017.typedarrays.d.ts" }, + { name: "es2018.asyncgenerator", value: "lib.es2018.asyncgenerator.d.ts" }, + { name: "es2018.asynciterable", value: "lib.es2018.asynciterable.d.ts" }, + { name: "es2018.intl", value: "lib.es2018.intl.d.ts" }, + { name: "es2018.promise", value: "lib.es2018.promise.d.ts" }, + { name: "es2018.regexp", value: "lib.es2018.regexp.d.ts" }, + { name: "es2019.array", value: "lib.es2019.array.d.ts" }, + { name: "es2019.object", value: "lib.es2019.object.d.ts" }, + { name: "es2019.string", value: "lib.es2019.string.d.ts" }, + { name: "es2019.symbol", value: "lib.es2019.symbol.d.ts" }, + { name: "es2019.intl", value: "lib.es2019.intl.d.ts" }, + { name: "es2020.bigint", value: "lib.es2020.bigint.d.ts" }, + { name: "es2020.date", value: "lib.es2020.date.d.ts" }, + { name: "es2020.promise", value: "lib.es2020.promise.d.ts" }, + { name: "es2020.sharedmemory", value: "lib.es2020.sharedmemory.d.ts" }, + { name: "es2020.string", value: "lib.es2020.string.d.ts" }, + { name: "es2020.symbol.wellknown", value: "lib.es2020.symbol.wellknown.d.ts" }, + { name: "es2020.intl", value: "lib.es2020.intl.d.ts" }, + { name: "es2020.number", value: "lib.es2020.number.d.ts" }, + { name: "es2021.promise", value: "lib.es2021.promise.d.ts" }, + { name: "es2021.string", value: "lib.es2021.string.d.ts" }, + { name: "es2021.weakref", value: "lib.es2021.weakref.d.ts" }, + { name: "es2021.intl", value: "lib.es2021.intl.d.ts" }, + { name: "es2022.array", value: "lib.es2022.array.d.ts" }, + { name: "es2022.error", value: "lib.es2022.error.d.ts" }, + { name: "es2022.intl", value: "lib.es2022.intl.d.ts" }, + { name: "es2022.object", value: "lib.es2022.object.d.ts" }, + { name: "es2022.string", value: "lib.es2022.string.d.ts" }, + { name: "es2022.regexp", value: "lib.es2022.regexp.d.ts" }, + { name: "es2023.array", value: "lib.es2023.array.d.ts" }, + { name: "es2023.collection", value: "lib.es2023.collection.d.ts" }, + { name: "es2023.intl", value: "lib.es2023.intl.d.ts" }, + { name: "es2024.arraybuffer", value: "lib.es2024.arraybuffer.d.ts" }, + { name: "es2024.collection", value: "lib.es2024.collection.d.ts" }, + { name: "es2024.object", value: "lib.es2024.object.d.ts" }, + { name: "es2024.promise", value: "lib.es2024.promise.d.ts" }, + { name: "es2024.regexp", value: "lib.es2024.regexp.d.ts" }, + { name: "es2024.sharedmemory", value: "lib.es2024.sharedmemory.d.ts" }, + { name: "es2024.string", value: "lib.es2024.string.d.ts" }, + { name: "es2025.collection", value: "lib.es2025.collection.d.ts" }, + { name: "es2025.float16", value: "lib.es2025.float16.d.ts" }, + { name: "es2025.intl", value: "lib.es2025.intl.d.ts" }, + { name: "es2025.iterator", value: "lib.es2025.iterator.d.ts" }, + { name: "es2025.promise", value: "lib.es2025.promise.d.ts" }, + { name: "es2025.regexp", value: "lib.es2025.regexp.d.ts" }, + { name: "es2026.array", value: "lib.es2026.array.d.ts" }, + { name: "es2026.collection", value: "lib.es2026.collection.d.ts" }, + { name: "es2026.error", value: "lib.es2026.error.d.ts" }, + { name: "es2026.iterator", value: "lib.es2026.iterator.d.ts" }, + { name: "es2026.json", value: "lib.es2026.json.d.ts" }, + { name: "es2026.math", value: "lib.es2026.math.d.ts" }, + { name: "es2026.typedarrays", value: "lib.es2026.typedarrays.d.ts" }, + { name: "esnext.asynciterable", value: "lib.es2018.asynciterable.d.ts" }, + { name: "esnext.symbol", value: "lib.es2019.symbol.d.ts" }, + { name: "esnext.bigint", value: "lib.es2020.bigint.d.ts" }, + { name: "esnext.weakref", value: "lib.es2021.weakref.d.ts" }, + { name: "esnext.object", value: "lib.es2024.object.d.ts" }, + { name: "esnext.regexp", value: "lib.es2024.regexp.d.ts" }, + { name: "esnext.string", value: "lib.es2024.string.d.ts" }, + { name: "esnext.float16", value: "lib.es2025.float16.d.ts" }, + { name: "esnext.array", value: "lib.es2026.array.d.ts" }, + { name: "esnext.collection", value: "lib.es2026.collection.d.ts" }, + { name: "esnext.error", value: "lib.es2026.error.d.ts" }, + { name: "esnext.iterator", value: "lib.es2026.iterator.d.ts" }, + { name: "esnext.typedarrays", value: "lib.es2026.typedarrays.d.ts" }, + { name: "esnext.promise", value: "lib.esnext.promise.d.ts" }, + { name: "esnext.date", value: "lib.esnext.date.d.ts" }, + { name: "esnext.decorators", value: "lib.esnext.decorators.d.ts" }, + { name: "esnext.disposable", value: "lib.esnext.disposable.d.ts" }, + { name: "esnext.intl", value: "lib.esnext.intl.d.ts" }, + { name: "esnext.modulesource", value: "lib.esnext.modulesource.d.ts" }, + { name: "esnext.sharedmemory", value: "lib.esnext.sharedmemory.d.ts" }, + { name: "esnext.temporal", value: "lib.esnext.temporal.d.ts" }, + { name: "decorators", value: "lib.decorators.d.ts" }, + { name: "decorators.legacy", value: "lib.decorators.legacy.d.ts" }, + ], + }, + moduleResolution: { + goName: "moduleResolutionOptionMap", + values: [ + { name: "node16", value: { go: "core.ModuleResolutionKindNode16" } }, + { name: "nodenext", value: { go: "core.ModuleResolutionKindNodeNext" } }, + { name: "bundler", value: { go: "core.ModuleResolutionKindBundler" } }, + { name: "classic", value: { go: "core.ModuleResolutionKindClassic" } }, + { name: "node", value: { go: "core.ModuleResolutionKindNode10" } }, + { name: "node10", value: { go: "core.ModuleResolutionKindNode10" } }, + ], + deprecatedKeys: [ + "node", + "classic", + "node10", + ], + }, + module: { + goName: "moduleOptionMap", + schemaOnlyValues: ["none"], + values: [ + { name: "commonjs", value: { go: "core.ModuleKindCommonJS" } }, + { name: "amd", value: { go: "core.ModuleKindAMD" } }, + { name: "system", value: { go: "core.ModuleKindSystem" } }, + { name: "umd", value: { go: "core.ModuleKindUMD" } }, + { name: "es6", value: { go: "core.ModuleKindES2015" } }, + { name: "es2015", value: { go: "core.ModuleKindES2015" } }, + { name: "es2020", value: { go: "core.ModuleKindES2020" } }, + { name: "es2022", value: { go: "core.ModuleKindES2022" } }, + { name: "esnext", value: { go: "core.ModuleKindESNext" } }, + { name: "node16", value: { go: "core.ModuleKindNode16" } }, + { name: "node18", value: { go: "core.ModuleKindNode18" } }, + { name: "node20", value: { go: "core.ModuleKindNode20" } }, + { name: "nodenext", value: { go: "core.ModuleKindNodeNext" } }, + { name: "preserve", value: { go: "core.ModuleKindPreserve" } }, + ], + deprecatedKeys: [ + "none", + "amd", + "system", + "umd", + ], + }, + target: { + goName: "targetOptionMap", + schemaOnlyValues: ["es3"], + values: [ + { name: "es5", value: { go: "core.ScriptTargetES5" } }, + { name: "es6", value: { go: "core.ScriptTargetES2015" } }, + { name: "es2015", value: { go: "core.ScriptTargetES2015" } }, + { name: "es2016", value: { go: "core.ScriptTargetES2016" } }, + { name: "es2017", value: { go: "core.ScriptTargetES2017" } }, + { name: "es2018", value: { go: "core.ScriptTargetES2018" } }, + { name: "es2019", value: { go: "core.ScriptTargetES2019" } }, + { name: "es2020", value: { go: "core.ScriptTargetES2020" } }, + { name: "es2021", value: { go: "core.ScriptTargetES2021" } }, + { name: "es2022", value: { go: "core.ScriptTargetES2022" } }, + { name: "es2023", value: { go: "core.ScriptTargetES2023" } }, + { name: "es2024", value: { go: "core.ScriptTargetES2024" } }, + { name: "es2025", value: { go: "core.ScriptTargetES2025" } }, + { name: "es2026", value: { go: "core.ScriptTargetES2026" } }, + { name: "esnext", value: { go: "core.ScriptTargetESNext" } }, + ], + deprecatedKeys: [ + "es5", + ], + }, + moduleDetection: { + goName: "moduleDetectionOptionMap", + values: [ + { name: "auto", value: { go: "core.ModuleDetectionKindAuto" } }, + { name: "legacy", value: { go: "core.ModuleDetectionKindLegacy" } }, + { name: "force", value: { go: "core.ModuleDetectionKindForce" } }, + ], + }, + jsx: { + goName: "jsxOptionMap", + values: [ + { name: "preserve", value: { go: "core.JsxEmitPreserve" } }, + { name: "react-native", value: { go: "core.JsxEmitReactNative" } }, + { name: "react-jsx", value: { go: "core.JsxEmitReactJSX" } }, + { name: "react-jsxdev", value: { go: "core.JsxEmitReactJSXDev" } }, + { name: "react", value: { go: "core.JsxEmitReact" } }, + ], + }, + newLine: { + goName: "newLineOptionMap", + values: [ + { name: "crlf", value: { go: "core.NewLineKindCRLF" } }, + { name: "lf", value: { go: "core.NewLineKindLF" } }, + ], + }, + }, + enums: [ + { + name: "ModuleDetectionKind", + api: true, + members: [ + { + name: "None", + value: 0, + }, + { + name: "Auto", + value: 1, + }, + { + name: "Legacy", + value: 2, + }, + { + name: "Force", + value: 3, + }, + ], + }, + { + name: "ModuleKind", + api: true, + members: [ + { + name: "None", + value: 0, + }, + { + name: "CommonJS", + value: 1, + }, + { + name: "AMD", + value: 2, + comment: "Deprecated: Do not use outside of options parsing and validation.", + }, + { + name: "UMD", + value: 3, + comment: "Deprecated: Do not use outside of options parsing and validation.", + }, + { + name: "System", + value: 4, + comment: "Deprecated: Do not use outside of options parsing and validation.", + }, + { + name: "ES2015", + value: 5, + comment: "NOTE: ES module kinds should be contiguous to more easily check whether a module kind is *any* ES module kind.\nNon-ES module kinds should not come between ES2015 (the earliest ES module kind) and ESNext (the last ES\nmodule kind).", + }, + { + name: "ES2020", + value: 6, + }, + { + name: "ES2022", + value: 7, + }, + { + name: "ESNext", + value: 99, + }, + { + name: "Node16", + value: 100, + comment: "Node16+ is an amalgam of commonjs (albeit updated) and es2022+, and represents a distinct module system from es2020/esnext", + moduleResolution: "Node16", + }, + { + name: "Node18", + value: 101, + }, + { + name: "Node20", + value: 102, + }, + { + name: "NodeNext", + value: 199, + moduleResolution: "NodeNext", + }, + { + name: "Preserve", + value: 200, + comment: "Emit as written", + }, + ], + }, + { + name: "ModuleResolutionKind", + api: true, + stringer: "name", + members: [ + { + name: "Unknown", + value: 0, + }, + { + name: "Classic", + value: 1, + comment: "Deprecated: Do not use outside of options parsing and validation.", + }, + { + name: "Node10", + value: 2, + comment: "Deprecated: Do not use outside of options parsing and validation.", + }, + { + name: "Node16", + value: 3, + comment: "Starting with node16, node's module resolver has significant departures from traditional cjs resolution\nto better support ECMAScript modules and their use within node - however more features are still being added.\nTypeScript's Node ESM support was introduced after Node 12 went end-of-life, and Node 14 is the earliest stable\nversion that supports both pattern trailers - *but*, Node 16 is the first version that also supports ECMAScript 2022.\nIn turn, we offer both a `NodeNext` moving resolution target, and a `Node16` version-anchored resolution target", + }, + { + name: "NodeNext", + value: 99, + trailingComment: "Not simply `Node16` so that compiled code linked against TS can use the `Next` value reliably (same as with `ModuleKind`)", + }, + { + name: "Bundler", + value: 100, + }, + ], + }, + { + name: "NewLineKind", + api: true, + members: [ + { + name: "None", + value: 0, + }, + { + name: "CRLF", + value: 1, + }, + { + name: "LF", + value: 2, + }, + ], + }, + { + name: "ScriptTarget", + api: true, + members: [ + { + name: "None", + value: 0, + excludeFromAPI: true, + }, + { + name: "ES5", + value: 1, + comment: "Deprecated: Do not use outside of options parsing and validation.", + excludeFromAPI: true, + }, + { + name: "ES2015", + value: 2, + lib: "lib.es6.d.ts", + libComment: "Use lib.es6.d.ts for compatibility rather than lib.es2015.full.d.ts.", + }, + { + name: "ES2016", + value: 3, + lib: "lib.es2016.full.d.ts", + }, + { + name: "ES2017", + value: 4, + lib: "lib.es2017.full.d.ts", + }, + { + name: "ES2018", + value: 5, + lib: "lib.es2018.full.d.ts", + }, + { + name: "ES2019", + value: 6, + lib: "lib.es2019.full.d.ts", + }, + { + name: "ES2020", + value: 7, + lib: "lib.es2020.full.d.ts", + }, + { + name: "ES2021", + value: 8, + lib: "lib.es2021.full.d.ts", + }, + { + name: "ES2022", + value: 9, + lib: "lib.es2022.full.d.ts", + }, + { + name: "ES2023", + value: 10, + lib: "lib.es2023.full.d.ts", + }, + { + name: "ES2024", + value: 11, + lib: "lib.es2024.full.d.ts", + }, + { + name: "ES2025", + value: 12, + lib: "lib.es2025.full.d.ts", + }, + { + name: "ES2026", + value: 13, + lib: "lib.es2026.full.d.ts", + }, + { + name: "ESNext", + value: 99, + lib: "lib.esnext.full.d.ts", + }, + { + name: "JSON", + value: 100, + }, + { name: "Latest", value: "ESNext" }, + { + name: "LatestStandard", + value: "ES2026", + excludeFromAPI: true, + }, + ], + }, + { + name: "JsxEmit", + api: true, + stringer: { enumMap: "jsx" }, + members: [ + { + name: "None", + value: 0, + }, + { + name: "Preserve", + value: 1, + }, + { + name: "React", + value: 2, + }, + { + name: "ReactNative", + value: 3, + }, + { + name: "ReactJSX", + value: 4, + }, + { + name: "ReactJSXDev", + value: 5, + }, + ], + }, + ], +}; diff --git a/tools/scripts/tsc/schema.ts b/tools/scripts/tsc/schema.ts index 6d2985d433435..3ad86b5d4cb6e 100644 --- a/tools/scripts/tsc/schema.ts +++ b/tools/scripts/tsc/schema.ts @@ -1,1267 +1,1267 @@ -/** Shared type definitions and utilities for ast.json schema, used by both Go and TS generators. */ - -import * as fs from "node:fs"; -import * as path from "node:path"; -import { repoRoot as ROOT } from "../gen/utils.mts"; - -// ──────────────────────────────────────────────────────────────────────────── -// Schema type definitions -// ──────────────────────────────────────────────────────────────────────────── - -export interface Member { - name: string; - type: string | string[]; - optional?: boolean; - list?: "NodeList" | "ModifierList" | "raw"; - visit?: string; - typeGuard?: string; - private?: boolean; - inherited?: boolean; - goOnly?: boolean; - noGo?: boolean; - noTS?: boolean; - noFactory?: boolean; - bitmask?: string; -} - -export interface NodeDef { - kind?: string | string[]; - extends: string[]; - members?: Member[]; - generateSubtreeFacts?: boolean; - arena?: boolean; - handWritten?: boolean; - handWrittenVisitor?: boolean; - typeParameters?: { name: string; constraint: string; default?: string; }[]; - instantiationAliases?: Record; -} - -export interface BaseField { - type: string | string[]; - list?: "NodeList" | "ModifierList" | "raw"; - visit?: string; - typeGuard?: string; - optional?: boolean; - private?: boolean; - goOnly?: boolean; - noGo?: boolean; - noTS?: boolean; - noFactory?: boolean; -} - -export interface BaseEntry { - brand?: string; - extends?: string[]; - fields?: Record; -} - -export interface KindElement { - name?: string; - comment?: string; -} - -export type ListKind = "NodeList" | "ModifierList" | "raw"; -export type BaseTypeKind = "list" | "primitive" | "kind" | "node"; -export type TypeKind = "alias" | "list" | "primitive" | "kind" | "node" | "typeParameter" | "union"; - -abstract class TypeBase { - protected readonly api: SchemaAPI; - - constructor(api: SchemaAPI) { - this.api = api; - } - - abstract readonly kind: TypeKind; - abstract formatGoDeclaration(): string; - abstract formatGoReference(): string; - - abstract formatTypeScript(): string; - abstract baseKind(): BaseTypeKind; -} - -export class PrimitiveType extends TypeBase { - readonly kind = "primitive" as const; - readonly name: string; - - constructor(api: SchemaAPI, name: string) { - super(api); - this.name = name; - } - - formatGoDeclaration(): string { - throw new Error(`Primitive type ${this.name} has no Go declaration form`); - } - - formatGoReference(): string { - return this.name; - } - - formatTypeScript(): string { - const typeMap: Record = { - bool: "boolean", - int: "number", - }; - return typeMap[this.name] || this.name; - } - - baseKind(): BaseTypeKind { - return "primitive"; - } -} - -export class KindType extends TypeBase { - readonly kind = "kind" as const; - readonly value: string; - - constructor(api: SchemaAPI, value: string) { - super(api); - this.value = value; - } - - formatGoDeclaration(): string { - return "Kind"; - } - - formatGoReference(): string { - return "Kind"; - } - - formatTypeScript(): string { - return this.value === "Kind" ? "SyntaxKind" : this.value; - } - - baseKind(): BaseTypeKind { - return "kind"; - } - - get name(): string { - return this.value.startsWith("SyntaxKind.") ? this.value.slice("SyntaxKind.".length) : this.value; - } - - formatGoConstant(): string { - return this.value === "Kind" ? "Kind" : `Kind${this.name}`; - } -} - -export class NodeType extends TypeBase { - readonly kind = "node" as const; - readonly name: string; - private membersCache?: MemberInfo[]; - private fieldsCache?: MemberInfo[]; - private inheritedFieldCache?: Map; - - constructor(api: SchemaAPI, name: string) { - super(api); - this.name = name; - } - - formatGoDeclaration(): string { - return this.name; - } - - formatGoReference(): string { - return this.api.hasNode(this.name) ? `*${this.name}Node` : `*${this.name}`; - } - - formatTypeScript(): string { - return this.name; - } - - baseKind(): BaseTypeKind { - return "node"; - } - - concreteNodeName(): string { - if (!this.isConcrete) { - throw new Error(`${this.name} is not a concrete node`); - } - return this.name; - } - - get key(): string { - return this.name; - } - - get isConcrete(): boolean { - return !!this.def; - } - - get isBase(): boolean { - return !!this.entry; - } - - get def(): NodeDef | undefined { - return this.api.getNodeDef(this.name); - } - - get entry(): BaseEntry | undefined { - return this.api.schema.bases[this.name]; - } - - get syntaxKindName(): string { - const kind = this.def?.kind; - if (Array.isArray(kind)) return kind[0]; - return kind || this.name; - } - - get extendsKeys(): string[] { - return this.def?.extends || this.entry?.extends || []; - } - - get extends(): NodeType[] { - return this.extendsKeys.map(key => this.api.getBase(key)).filter((base): base is NodeType => !!base); - } - - get members(): MemberInfo[] { - if (!this.membersCache) { - this.membersCache = (this.def?.members || []).map(member => new MemberInfo(this.api, member.name, member, this)); - } - return this.membersCache; - } - - get kindAliases(): string[] { - const kind = this.def?.kind; - if (Array.isArray(kind)) return kind.slice(1); - return []; - } - - get brand(): string | undefined { - return this.entry?.brand; - } - - get fields(): MemberInfo[] { - if (!this.fieldsCache) { - this.fieldsCache = Object.entries(this.entry?.fields || {}).map(([name, field]) => new MemberInfo(this.api, name, field)); - } - return this.fieldsCache; - } - - get arena(): boolean { - return this.def?.arena || false; - } - - get handWritten(): boolean { - return this.def?.handWritten || false; - } - - get handWrittenVisitor(): boolean { - return this.def?.handWrittenVisitor || false; - } - - get generateSubtreeFacts(): boolean { - return this.def?.generateSubtreeFacts || false; - } - - get typeParameters(): TypeParameterInfo[] { - return this.def?.typeParameters || []; - } - - get instantiationAliases(): InstantiationAliasInfo[] { - return Object.entries(this.def?.instantiationAliases || {}).map(([name, typeArg]) => ({ name, typeArg })); - } - - get kindType(): Type { - return this.kindMember()?.declaredType ?? this.api.kindType(`SyntaxKind.${this.syntaxKindName}`); - } - - kindMember(): MemberInfo | undefined { - return this.members.find(member => member.name === "Kind" || member.name === "kind"); - } - - field(name: string): MemberInfo | undefined { - return this.fields.find(field => field.name === name); - } - - inheritedField(name: string): MemberInfo | undefined { - if (!this.inheritedFieldCache) { - this.inheritedFieldCache = new Map(); - } - const cached = this.inheritedFieldCache.get(name); - if (cached !== undefined) { - return cached || undefined; - } - - for (const base of this.extends) { - const direct = base.field(name); - if (direct) { - this.inheritedFieldCache.set(name, direct); - return direct; - } - - const inherited = base.inheritedField(name); - if (inherited) { - this.inheritedFieldCache.set(name, inherited); - return inherited; - } - } - - this.inheritedFieldCache.set(name, null); - return undefined; - } - - isMultiKind(): boolean { - return this.kindTypes().length > 1; - } - - kindTypes(): KindType[] { - const collect = (type: Type): KindType[] => { - switch (type.kind) { - case "kind": - return type.value === "Kind" ? [] : [type]; - case "union": - return type.types.flatMap(collect); - case "alias": - return collect(type.resolved); - case "typeParameter": - return collect(type.constraint); - default: - return []; - } - }; - - const kindTypes = collect(this.kindType); - if (kindTypes.length === 0) { - return [this.api.kindType(`SyntaxKind.${this.syntaxKindName}`)]; - } - return [...new Map(kindTypes.map(type => [type.value, type])).values()]; - } - - /** - * All SyntaxKind types for this node, including kindAliases. - * For multi-kind nodes, returns all instantiated kind types. - * For single-kind nodes, returns the primary kind plus any kindAliases. - */ - allKinds(): KindType[] { - return [ - ...this.kindTypes(), - ...this.kindAliases.map(a => this.api.kindType(`SyntaxKind.${a}`)), - ]; - } - - isGoOnly(): boolean { - return this.api.isGoOnlyBase(this.name); - } -} - -export class TypeParameterType extends TypeBase { - readonly kind = "typeParameter" as const; - readonly name: string; - readonly constraint: Type; - - constructor(api: SchemaAPI, name: string, constraint: Type) { - super(api); - this.name = name; - this.constraint = constraint; - } - - formatGoDeclaration(): string { - return this.constraint.formatGoDeclaration(); - } - - formatGoReference(): string { - return this.constraint.formatGoReference(); - } - - formatTypeScript(): string { - return this.name; - } - - baseKind(): BaseTypeKind { - return this.constraint.baseKind(); - } - - concreteNodeName(): string | undefined { - switch (this.constraint.kind) { - case "node": - case "alias": - case "typeParameter": - return this.constraint.concreteNodeName(); - } - return undefined; - } -} - -export class AliasType extends TypeBase { - readonly kind = "alias" as const; - readonly name: string; - readonly resolved: Type; - readonly resolveAs?: "node"; - - constructor(api: SchemaAPI, name: string, resolved: Type, resolveAs?: "node") { - super(api); - this.name = name; - this.resolved = resolved; - this.resolveAs = resolveAs; - } - - formatGoDeclaration(): string { - return this.name; - } - - formatGoReference(): string { - return this.baseKind() === "node" || (this.baseKind() === "list" && (this.resolved as ListType).listKind !== "raw") ? `*${this.name}` : this.name; - } - - formatTypeScript(): string { - return this.name; - } - - baseKind(): BaseTypeKind { - return this.resolved.baseKind(); - } - - concreteNodeName(): string | undefined { - return this.api.getInstantiationNodeName(this.name); - } - - get isUnion(): boolean { - const alias = this.api.schema.nodes.aliases[this.name]; - return Array.isArray(alias); - } - - get isBaseAlias(): boolean { - const alias = this.api.schema.nodes.aliases[this.name]; - return !!alias && !Array.isArray(alias); - } - - get unionMemberNames(): string[] { - const alias = this.api.schema.nodes.aliases[this.name]; - return Array.isArray(alias) ? alias : []; - } - - get unionMemberTypes(): Type[] { - return this.unionMemberNames.map(name => this.api.resolveType(name, undefined, this.resolveAs)); - } - - get baseKey(): string | undefined { - const alias = this.api.schema.nodes.aliases[this.name]; - return alias && !Array.isArray(alias) ? alias.base : undefined; - } - - get base(): NodeType | undefined { - return this.baseKey ? this.api.getBase(this.baseKey) : undefined; - } - - get elementTypeName(): string | undefined { - return this.api.schema.nodes.listAliases?.[this.name]; - } - - get elementType(): Type | undefined { - return this.elementTypeName ? this.api.resolveType(this.elementTypeName) : undefined; - } -} - -export class UnionType extends TypeBase { - readonly kind = "union" as const; - readonly types: Type[]; - - constructor(api: SchemaAPI, types: Type[]) { - super(api); - this.types = types; - } - - formatGoDeclaration(): string { - throw new Error("Cannot declare Go type for union"); - } - - formatGoReference(): string { - const concreteNodes = new Set(); - let allConcreteNodes = true; - for (const type of this.types) { - const nodeName = this.concreteNodeNameOf(type); - if (!nodeName) { - allConcreteNodes = false; - break; - } - concreteNodes.add(nodeName); - } - if (allConcreteNodes && concreteNodes.size === 1) { - return `*${[...concreteNodes][0]}Node`; - } - - if (this.types.some(type => type.baseKind() === "node" || type.baseKind() === "list")) { - return "*Node"; - } - - if (this.types.every(type => type.baseKind() === "kind")) { - return "Kind"; - } - - const references = [...new Set(this.types.map(type => type.formatGoReference()))]; - if (references.length === 1) return references[0]; - throw new Error(`Cannot resolve Go reference form for union ${references.join(" | ")}`); - } - - formatTypeScript(): string { - return this.types.map(type => type.formatTypeScript()).join(" | "); - } - - baseKind(): BaseTypeKind { - const baseKinds = new Set(this.types.map(type => type.baseKind())); - if (baseKinds.size === 1) return this.types[0].baseKind(); - if (this.types.some(type => type.baseKind() === "list" || type.baseKind() === "node")) { - return "node"; - } - if (this.types.some(type => type.baseKind() === "kind")) { - return "kind"; - } - return "primitive"; - } - - private concreteNodeNameOf(type: Type): string | undefined { - switch (type.kind) { - case "node": - case "alias": - case "typeParameter": - return type.concreteNodeName(); - default: - return undefined; - } - } -} - -export class ListType extends TypeBase { - readonly kind = "list" as const; - readonly elementType: Type; - readonly listKind: ListKind; - - constructor(api: SchemaAPI, elementType: Type, listKind: ListKind) { - super(api); - this.elementType = elementType; - this.listKind = listKind; - } - - formatGoDeclaration(): string { - throw new Error(`List type ${this.listKind} has no generated Go declaration form`); - } - - formatGoReference(): string { - if (this.listKind === "raw") { - return this.elementType.baseKind() === "node" ? "[]*Node" : `[]${this.elementType.formatGoReference()}`; - } - if (this.listKind === "ModifierList") { - return "*ModifierList"; - } - return `*${this.api.listAliasName(this.elementType) || "NodeList"}`; - } - - formatTypeScript(): string { - const elementType = this.elementType.formatTypeScript(); - if (this.listKind === "raw") { - return `readonly ${elementType}[]`; - } - return `NodeArray<${elementType}>`; - } - - baseKind(): BaseTypeKind { - return this.elementType.baseKind() === "node" ? "list" : this.elementType.baseKind(); - } - - raw(): ListType { - if (this.listKind === "raw") { - return this; - } - return this.api.listType(this.elementType, "raw"); - } -} - -export type Type = - | AliasType - | KindType - | ListType - | NodeType - | PrimitiveType - | TypeParameterType - | UnionType; - -export interface TypeParameterInfo { - name: string; - constraint: string; - default?: string; -} - -export interface InstantiationAliasInfo { - name: string; - typeArg: string; -} - -export class MemberInfo { - private readonly api: SchemaAPI; - private readonly nameValue: string; - private readonly member?: Member; - private readonly field?: BaseField; - private inheritedFieldCache?: MemberInfo | null; - readonly node?: NodeType; - - constructor(api: SchemaAPI, name: string, source: Member | BaseField, node?: NodeType) { - this.api = api; - this.nameValue = name; - if (node) { - this.member = source as Member; - } - else { - this.field = source as BaseField; - } - this.node = node; - } - - get name(): string { - return this.nameValue; - } - - get declaredType(): Type { - return this.api.resolveType(this.rawType, this.node?.def); - } - - get type(): Type { - return this.listKind ? this.api.listType(this.declaredType, this.listKind) : this.declaredType; - } - - get rawType(): string | string[] { - if (this.field) return this.field.type; - if (this.member && !this.member.inherited) return this.member.type; - // Inherited member with an explicit type override narrows the base type - if (this.member?.inherited && this.member.type) return this.member.type; - if (this.inheritedField) return this.inheritedField.rawType; - if (this.member) return this.member.type; - throw new Error(`Member ${this.name} has no raw type source`); - } - - get listKind(): ListKind | undefined { - if (this.field) return this.field.list; - if (this.member && !this.member.inherited) return this.member.list; - return this.inheritedField?.listKind; - } - - get optional(): boolean { - return this.field?.optional ?? this.member?.optional ?? this.inheritedField?.optional ?? false; - } - - get inherited(): boolean { - return this.member?.inherited ?? false; - } - - get private(): boolean { - if (this.field?.private) return true; - if (this.member?.private) return true; - return this.inheritedField?.private ?? false; - } - - get goOnly(): boolean { - return this.field?.goOnly ?? this.member?.goOnly ?? false; - } - - /** Absent from Go structs, encoding, and factory. noGo implies noFactory. */ - get noGo(): boolean { - return this.field?.noGo ?? this.member?.noGo ?? false; - } - - /** Absent from encoding and all TS files. goOnly implies noTS. */ - get noTS(): boolean { - return this.goOnly || (this.field?.noTS ?? this.member?.noTS ?? false); - } - - /** Absent from factory functions, visitor, and clone. goOnly implies noFactory. */ - get noFactory(): boolean { - return this.goOnly || this.field?.noFactory || this.member?.noFactory || false; - } - - get visit(): string | undefined { - if (this.member?.visit) return this.member.visit; - if (this.field?.visit) return this.field.visit; - return this.inheritedField?.visit; - } - - get typeGuard(): string | undefined { - if (this.member?.typeGuard) return this.member.typeGuard; - if (this.field?.typeGuard) return this.field.typeGuard; - return this.inheritedField?.typeGuard; - } - - get bitmask(): string | undefined { - return this.member?.bitmask; - } - - get inheritedField(): MemberInfo | undefined { - if (!this.member?.inherited || !this.node) return undefined; - if (this.inheritedFieldCache !== undefined) { - return this.inheritedFieldCache || undefined; - } - this.inheritedFieldCache = this.node.inheritedField(this.name) || null; - return this.inheritedFieldCache || undefined; - } - - isKindParam(): boolean { - if (!this.member || !this.node) return false; - if (this.name !== "Kind" && this.name !== "kind") return false; - return this.declaredType.baseKind() === "kind"; - } - - isChild(): boolean { - if (!this.member || !this.node) return false; - return this.type.baseKind() === "list" || this.type.baseKind() === "node"; - } - - /** - * True when this inherited member carries an explicit type or optionality - * override relative to its base field. Such members need their own - * property declaration in a TS interface even though they are inherited. - */ - hasTypeScriptOverride(): boolean { - if (!this.member?.inherited || !this.inheritedField) return false; - // Explicit type override on the member narrows the base type. - if (this.member.type && this.type.formatTypeScript() !== this.inheritedField.type.formatTypeScript()) return true; - // Explicit optionality override (e.g. base is required but this member is optional, or vice-versa). - if (this.member.optional !== undefined && this.optional !== this.inheritedField.optional) return true; - return false; - } - - /** Go parameter name: uncapitalized, with Go keyword avoidance. */ - goParamName(): string { - const name = this.api.uncapitalize(this.name); - if (name === "type") return "typeNode"; - if (name === "default") return "defaultNode"; - if (name === "case") return "caseNode"; - return name; - } -} - -export interface KindElementInfo { - name?: string; - comment?: string; -} - -export interface KindMarkerInfo { - name: string; - value: string; -} - -export interface KindAliasInfo { - name: string; - members: string[]; - range?: [string, string]; -} - -/** A kind guard is either range-based (kind >= First && kind <= Last) or enumerated (switch/conditions). */ -export type KindGuardInfo = - & { - /** The alias name from the schema, e.g. "TokenSyntaxKind". */ - aliasName: string; - /** The guard function name, e.g. "isTokenKind". Drops "Syntax" from the alias name. */ - guardName: string; - } - & ( - | { type: "range"; first: string; last: string; } - | { type: "enumerated"; members: string[]; } - ); - -/** Compute a guard function name from a kind alias name. Drops "Syntax" from the name. */ -export function kindGuardName(aliasName: string): string { - return `is${aliasName.replace("Syntax", "")}`; -} - -export interface Schema { - $schema: string; - bases: Record; - nodes: { - definitions: Record; - aliases: Record; - listAliases?: Record; - }; - kinds?: { - elements: (string | KindElement)[]; - markers: { name: string; value: string; }[]; - aliases?: Record; - }; -} - -// ──────────────────────────────────────────────────────────────────────────── -// SchemaAPI — shared logic for both Go and TS generators -// ──────────────────────────────────────────────────────────────────────────── - -/** - * Wraps the parsed ast.json schema and provides common query/resolution - * methods used by both the Go and TS code generators. - */ -export class SchemaAPI { - readonly schema: Schema; - private readonly listAliasNameMap = new Map(); - private readonly instantiationAliasMap = new Map(); - /** Maps syntax kind names to (aliasName, nodeName) for instantiation aliases, or (undefined, nodeName) for direct nodes. */ - private readonly syntaxKindToNodeInfo = new Map(); - private readonly primitiveTypeMap = new Map(); - private readonly kindTypeMap = new Map(); - private readonly nodeTypeMap = new Map(); - private readonly listTypeMapByKey = new Map(); - private readonly unionTypeMap = new Map(); - private readonly aliasTypeMap = new Map(); - private readonly typeParameterTypeMap = new Map(); - private readonly primitiveTypes = new Set([ - "any", - "bool", - "boolean", - "int", - "ModifierFlags", - "NodeFlags", - "string", - "TokenFlags", - ]); - - constructor(schema: Schema) { - this.schema = schema; - const listAliases = schema.nodes.listAliases || {}; - for (const [aliasName, elementType] of Object.entries(listAliases)) { - this.listAliasNameMap.set(this.typeCacheKey(this.resolveType(elementType)), aliasName); - } - for (const [nodeName, nodeDef] of Object.entries(schema.nodes.definitions)) { - for (const aliasName of Object.keys(nodeDef.instantiationAliases || {})) { - this.instantiationAliasMap.set(aliasName, nodeName); - } - // Map syntax kind names to instantiation aliases - for (const [aliasName, typeArg] of Object.entries(nodeDef.instantiationAliases || {})) { - // typeArg is a syntax kind name or a kind alias name - if (this.hasKindAlias(typeArg)) { - // Multi-kind instantiation alias (e.g. BinaryOperatorToken) — expand the kind alias - for (const kindType of this.expandKindAliasMembers(typeArg)) { - if (!this.syntaxKindToNodeInfo.has(kindType.name)) { - this.syntaxKindToNodeInfo.set(kindType.name, { aliasName, nodeName }); - } - } - } - else { - if (!this.syntaxKindToNodeInfo.has(typeArg)) { - this.syntaxKindToNodeInfo.set(typeArg, { aliasName, nodeName }); - } - } - } - // Map the node's own syntax kind(s) to itself - const primaryKind = Array.isArray(nodeDef.kind) ? nodeDef.kind[0] : (nodeDef.kind || nodeName); - if (!this.syntaxKindToNodeInfo.has(primaryKind)) { - this.syntaxKindToNodeInfo.set(primaryKind, { nodeName }); - } - if (Array.isArray(nodeDef.kind)) { - for (const k of nodeDef.kind.slice(1)) { - if (!this.syntaxKindToNodeInfo.has(k)) { - this.syntaxKindToNodeInfo.set(k, { nodeName }); - } - } - } - } - } - - // ── String helpers ────────────────────────────────────────────────────── - - /** Capitalize the first character: "foo" → "Foo". */ - capitalize(s: string): string { - return s.charAt(0).toUpperCase() + s.slice(1); - } - - /** Uncapitalize, with special handling for "JSDoc" prefix. */ - uncapitalize(s: string): string { - if (s.startsWith("JSDoc")) return "jsdoc" + s.slice(5); - return s.charAt(0).toLowerCase() + s.slice(1); - } - - bases(): NodeType[] { - return Object.keys(this.schema.bases).map(key => this.getBase(key)).filter((base): base is NodeType => !!base); - } - - getBase(key: string): NodeType | undefined { - if (!(key in this.schema.bases)) return undefined; - return this.nodeType(key); - } - - nodes(): NodeType[] { - return Object.keys(this.schema.nodes.definitions).map(key => this.getNode(key)).filter((node): node is NodeType => !!node); - } - - getNode(key: string): NodeType | undefined { - if (!(key in this.schema.nodes.definitions)) return undefined; - return this.nodeType(key); - } - - hasNode(key: string): boolean { - return key in this.schema.nodes.definitions; - } - - getNodeDef(key: string): NodeDef | undefined { - return this.schema.nodes.definitions[key]; - } - - nodeAliases(): AliasType[] { - return Object.keys(this.schema.nodes.aliases).map(name => this.getNodeAlias(name)).filter((alias): alias is AliasType => !!alias); - } - - getNodeAlias(name: string): AliasType | undefined { - if (!(name in this.schema.nodes.aliases)) return undefined; - const type = this.resolveType(name); - return type.kind === "alias" ? type : undefined; - } - - listAliases(): AliasType[] { - return Object.keys(this.schema.nodes.listAliases || {}).map(name => this.resolveType(name)).filter((type): type is AliasType => type.kind === "alias"); - } - - kindElements(): KindElementInfo[] { - return (this.schema.kinds?.elements || []).map(element => { - if (typeof element === "string") { - return { name: element }; - } - return { name: element.name, comment: element.comment }; - }); - } - - kindMarkers(): KindMarkerInfo[] { - return this.schema.kinds?.markers || []; - } - - /** Resolve a marker name to its concrete kind value. If the name is already a kind element, returns itself. */ - resolveKindMarkerValue(name: string): string { - // If it's a marker, resolve to its value (recursively since markers can reference other markers) - const marker = this.kindMarkers().find(m => m.name === name); - if (marker) return this.resolveKindMarkerValue(marker.value); - return name; - } - - kindAliases(): KindAliasInfo[] { - return Object.entries(this.schema.kinds?.aliases || {}).map(([name, value]) => { - if (Array.isArray(value)) { - return { name, members: value }; - } - // Range format: { range: ["FirstX", "LastX"] } - const [first, last] = value.range; - const elements = this.kindElements().filter(e => e.name).map(e => e.name!); - const firstIdx = elements.indexOf(this.resolveKindMarkerValue(first)); - const lastIdx = elements.indexOf(this.resolveKindMarkerValue(last)); - if (firstIdx === -1 || lastIdx === -1) { - throw new Error(`Range alias ${name}: could not resolve range [${first}, ${last}]`); - } - const members = elements.slice(firstIdx, lastIdx + 1); - return { name, members, range: value.range as [string, string] }; - }); - } - - hasKindAlias(name: string): boolean { - return this.kindAliases().some(alias => alias.name === name); - } - - getKindAlias(name: string): KindAliasInfo | undefined { - return this.kindAliases().find(alias => alias.name === name); - } - - /** - * Returns kind guard info for each kind alias. Range-based aliases produce range guards; - * enumerated aliases produce guards whose members reference either sub-alias guard calls - * or concrete kind names. - */ - kindGuards(): KindGuardInfo[] { - return this.kindAliases().map(({ name, members, range }): KindGuardInfo => { - const guardName = kindGuardName(name); - if (range) { - return { aliasName: name, guardName, type: "range", first: range[0], last: range[1] }; - } - return { aliasName: name, guardName, type: "enumerated", members }; - }); - } - - hasKindElement(name: string): boolean { - return this.kindElements().some(element => element.name === name); - } - - expandKindAliasMembers(name: string): KindType[] { - const alias = this.getKindAlias(name); - if (!alias) return [this.kindType(`SyntaxKind.${name}`)]; - const result: KindType[] = []; - for (const member of alias.members) { - if (this.hasKindAlias(member)) { - result.push(...this.expandKindAliasMembers(member)); - } - else { - result.push(this.kindType(`SyntaxKind.${member}`)); - } - } - return result; - } - - /** A base is "Go-only" if it has no brand AND all its fields are both noTS and noFactory. */ - isGoOnlyBase(key: string): boolean { - const base = this.schema.bases[key]; - if (!base) return false; - if (base.brand) return false; - if (!base.fields) return true; - return Object.values(base.fields).every(f => f.goOnly || (f.noTS && f.noFactory)); - } - - /** - * Given a syntax kind name (e.g. "AbstractKeyword"), returns the node type - * that has that syntax kind. For instantiation aliases, returns the alias type - * (e.g. `AliasType("AbstractKeyword", NodeType("Token"))`). For direct nodes, - * returns the node type itself. - */ - resolveNodeTypeForSyntaxKind(syntaxKindName: string): Type | undefined { - const info = this.syntaxKindToNodeInfo.get(syntaxKindName); - if (!info) return undefined; - if (info.aliasName) { - return this.aliasType(info.aliasName, this.nodeType(info.nodeName)); - } - return this.nodeType(info.nodeName); - } - - resolveType(typeName: string | string[], node?: NodeDef, resolveAs?: "node"): Type { - if (Array.isArray(typeName)) { - return this.unionType(typeName.map(type => this.resolveType(type, node, resolveAs))); - } - - if (node?.typeParameters) { - for (const tp of node.typeParameters) { - if (tp.name === typeName) { - const nodeKey = this.nodeKeyFor(node); - if (!nodeKey) { - throw new Error(`Type parameter ${typeName} requires a node context`); - } - const constraint = tp.constraint === typeName - ? this.primitiveType(typeName) - : this.resolveType(tp.constraint, node); - return this.typeParameterType(nodeKey, typeName, constraint); - } - } - } - - const kindAliases = this.schema.kinds?.aliases || {}; - if (typeName in kindAliases) { - if (resolveAs === "node") { - // Resolve each kind in the alias to its corresponding node type - const kindMembers = this.expandKindAliasMembers(typeName); - return this.unionType(kindMembers.map(kindType => { - const resolved = this.resolveNodeTypeForSyntaxKind(kindType.name); - if (!resolved) { - throw new Error(`Kind alias member "${kindType.name}" (from "${typeName}") does not resolve to a node type`); - } - return resolved; - })); - } - return this.aliasType( - typeName, - this.unionType(this.expandKindAliasMembers(typeName)), - ); - } - - if (typeName === "Kind" || typeName.startsWith("SyntaxKind.")) { - return this.kindType(typeName); - } - - if (typeName === "Node") { - return this.nodeType(typeName); - } - - if (this.primitiveTypes.has(typeName)) { - return this.primitiveType(typeName); - } - - const listAliasTarget = this.schema.nodes.listAliases?.[typeName]; - if (listAliasTarget) { - return this.aliasType(typeName, this.listType(this.resolveType(listAliasTarget, node), "NodeList")); - } - - const instantiationNode = this.instantiationAliasMap.get(typeName); - if (instantiationNode) { - return this.aliasType(typeName, this.nodeType(instantiationNode)); - } - - if (typeName in this.schema.nodes.aliases) { - const alias = this.schema.nodes.aliases[typeName]; - if (Array.isArray(alias)) { - return this.aliasType(typeName, this.unionType(alias.map(type => this.resolveType(type, node, "node"))), "node"); - } - return this.aliasType(typeName, this.nodeType(alias.base)); - } - - if (typeName in this.schema.nodes.definitions) { - return this.nodeType(typeName); - } - - if (typeName in this.schema.bases) { - return this.nodeType(typeName); - } - - return this.primitiveType(typeName); - } - - validate(): void { - for (const base of this.bases()) { - if (base !== this.resolveType(base.key)) { - throw new Error(`Base type cache mismatch for ${base.key}`); - } - for (const ext of base.extendsKeys) { - if (!this.getBase(ext)) { - throw new Error(`Unknown base extends target ${ext} from ${base.key}`); - } - } - for (const field of base.fields) { - if (field.type !== field.type) { - throw new Error(`Base field type cache mismatch for ${base.key}.${field.name}`); - } - } - } - - for (const node of this.nodes()) { - if (this.resolveType(node.key) !== this.nodeType(node.key)) { - throw new Error(`Node type cache mismatch for ${node.key}`); - } - for (const ext of node.extendsKeys) { - if (!this.getBase(ext)) { - throw new Error(`Unknown node extends target ${ext} from ${node.key}`); - } - } - for (const member of node.members) { - if (member.type !== member.type) { - throw new Error(`Member type cache mismatch for ${node.key}.${member.name}`); - } - if (member.declaredType !== member.declaredType) { - throw new Error(`Declared member type cache mismatch for ${node.key}.${member.name}`); - } - if (member.inheritedField && member.inheritedField.type !== member.inheritedField.type) { - throw new Error(`Inherited field type cache mismatch for ${node.key}.${member.name}`); - } - } - } - - for (const alias of this.nodeAliases()) { - if (alias !== this.resolveType(alias.name)) { - throw new Error(`Alias type cache mismatch for ${alias.name}`); - } - if (alias.baseKey && !this.getBase(alias.baseKey)) { - throw new Error(`Unknown alias base ${alias.baseKey} from ${alias.name}`); - } - for (const [index, memberName] of alias.unionMemberNames.entries()) { - if (alias.unionMemberTypes[index] !== this.resolveType(memberName, undefined, alias.resolveAs)) { - // Force member types to be reachable and cached via their names. - throw new Error(`Alias union member cache mismatch for ${alias.name}`); - } - } - } - - for (const listAlias of this.listAliases()) { - const resolved = this.resolveType(listAlias.name); - if (resolved.kind !== "alias" || resolved.resolved.kind !== "list") { - throw new Error(`List alias ${listAlias.name} did not resolve to an alias of a list type`); - } - if (!listAlias.elementTypeName) { - throw new Error(`List alias ${listAlias.name} is missing an element type`); - } - if (listAlias.elementType !== this.resolveType(listAlias.elementTypeName)) { - throw new Error(`List alias element type cache mismatch for ${listAlias.name}`); - } - } - - for (const marker of this.kindMarkers()) { - if (!this.hasKindElement(marker.value) && !this.kindMarkers().some(candidate => candidate.name === marker.value)) { - throw new Error(`Kind marker ${marker.name} references undefined kind or marker ${marker.value}`); - } - } - - for (const alias of this.kindAliases()) { - for (const member of alias.members) { - if (!this.hasKindAlias(member) && !this.hasKindElement(member)) { - throw new Error(`Unknown kind alias member ${member} in ${alias.name}`); - } - } - } - } - - primitiveType(name: string): PrimitiveType { - const existing = this.primitiveTypeMap.get(name); - if (existing) return existing; - const type = new PrimitiveType(this, name); - this.primitiveTypeMap.set(name, type); - return type; - } - - kindType(value: string): KindType { - const existing = this.kindTypeMap.get(value); - if (existing) return existing; - const type = new KindType(this, value); - this.kindTypeMap.set(value, type); - return type; - } - - nodeType(name: string): NodeType { - const existing = this.nodeTypeMap.get(name); - if (existing) return existing; - const type = new NodeType(this, name); - this.nodeTypeMap.set(name, type); - return type; - } - - listType(elementType: Type, listKind: ListKind): ListType { - const key = `${listKind}:${this.typeCacheKey(elementType)}`; - const existing = this.listTypeMapByKey.get(key); - if (existing) return existing; - const type = new ListType(this, elementType, listKind); - this.listTypeMapByKey.set(key, type); - return type; - } - - unionType(types: Type[]): UnionType { - const key = types.map(type => this.typeCacheKey(type)).join("|"); - const existing = this.unionTypeMap.get(key); - if (existing) return existing; - const type = new UnionType(this, types); - this.unionTypeMap.set(key, type); - return type; - } - - aliasType(name: string, resolved: Type, resolveAs?: "node"): AliasType { - const key = `${name}:${this.typeCacheKey(resolved)}`; - const existing = this.aliasTypeMap.get(key); - if (existing) return existing; - const type = new AliasType(this, name, resolved, resolveAs); - this.aliasTypeMap.set(key, type); - return type; - } - - typeParameterType(nodeKey: string, name: string, constraint: Type): TypeParameterType { - const key = `${nodeKey}:${name}:${this.typeCacheKey(constraint)}`; - const existing = this.typeParameterTypeMap.get(key); - if (existing) return existing; - const type = new TypeParameterType(this, name, constraint); - this.typeParameterTypeMap.set(key, type); - return type; - } - - getInstantiationNodeName(name: string): string | undefined { - return this.instantiationAliasMap.get(name); - } - - listAliasName(elementType: Type): string | undefined { - return this.listAliasNameMap.get(this.typeCacheKey(elementType)); - } - - private nodeKeyFor(node: NodeDef): string | undefined { - return Object.entries(this.schema.nodes.definitions).find(([, def]) => def === node)?.[0]; - } - - private typeCacheKey(type: Type): string { - switch (type.kind) { - case "primitive": - return `primitive:${type.name}`; - case "kind": - return `kind:${type.value}`; - case "node": - return `node:${type.name}`; - case "alias": - return `alias:${type.name}:${this.typeCacheKey(type.resolved)}`; - case "list": - return `list:${type.listKind}:${this.typeCacheKey(type.elementType)}`; - case "typeParameter": - return `typeParameter:${type.name}:${this.typeCacheKey(type.constraint)}`; - case "union": - return `union:${type.types.map(member => this.typeCacheKey(member)).join("|")}`; - } - } -} - -export const api = new SchemaAPI(JSON.parse( - fs.readFileSync(path.join(ROOT, "tools/scripts/tsc/ast.json"), "utf-8"), -) as Schema); -api.validate(); +/** Shared type definitions and utilities for ast.json schema, used by both Go and TS generators. */ + +import * as fs from "node:fs"; +import * as path from "node:path"; +import { repoRoot as ROOT } from "../gen/utils.mts"; + +// ──────────────────────────────────────────────────────────────────────────── +// Schema type definitions +// ──────────────────────────────────────────────────────────────────────────── + +export interface Member { + name: string; + type: string | string[]; + optional?: boolean; + list?: "NodeList" | "ModifierList" | "raw"; + visit?: string; + typeGuard?: string; + private?: boolean; + inherited?: boolean; + goOnly?: boolean; + noGo?: boolean; + noTS?: boolean; + noFactory?: boolean; + bitmask?: string; +} + +export interface NodeDef { + kind?: string | string[]; + extends: string[]; + members?: Member[]; + generateSubtreeFacts?: boolean; + arena?: boolean; + handWritten?: boolean; + handWrittenVisitor?: boolean; + typeParameters?: { name: string; constraint: string; default?: string; }[]; + instantiationAliases?: Record; +} + +export interface BaseField { + type: string | string[]; + list?: "NodeList" | "ModifierList" | "raw"; + visit?: string; + typeGuard?: string; + optional?: boolean; + private?: boolean; + goOnly?: boolean; + noGo?: boolean; + noTS?: boolean; + noFactory?: boolean; +} + +export interface BaseEntry { + brand?: string; + extends?: string[]; + fields?: Record; +} + +export interface KindElement { + name?: string; + comment?: string; +} + +export type ListKind = "NodeList" | "ModifierList" | "raw"; +export type BaseTypeKind = "list" | "primitive" | "kind" | "node"; +export type TypeKind = "alias" | "list" | "primitive" | "kind" | "node" | "typeParameter" | "union"; + +abstract class TypeBase { + protected readonly api: SchemaAPI; + + constructor(api: SchemaAPI) { + this.api = api; + } + + abstract readonly kind: TypeKind; + abstract formatGoDeclaration(): string; + abstract formatGoReference(): string; + + abstract formatTypeScript(): string; + abstract baseKind(): BaseTypeKind; +} + +export class PrimitiveType extends TypeBase { + readonly kind = "primitive" as const; + readonly name: string; + + constructor(api: SchemaAPI, name: string) { + super(api); + this.name = name; + } + + formatGoDeclaration(): string { + throw new Error(`Primitive type ${this.name} has no Go declaration form`); + } + + formatGoReference(): string { + return this.name; + } + + formatTypeScript(): string { + const typeMap: Record = { + bool: "boolean", + int: "number", + }; + return typeMap[this.name] || this.name; + } + + baseKind(): BaseTypeKind { + return "primitive"; + } +} + +export class KindType extends TypeBase { + readonly kind = "kind" as const; + readonly value: string; + + constructor(api: SchemaAPI, value: string) { + super(api); + this.value = value; + } + + formatGoDeclaration(): string { + return "Kind"; + } + + formatGoReference(): string { + return "Kind"; + } + + formatTypeScript(): string { + return this.value === "Kind" ? "SyntaxKind" : this.value; + } + + baseKind(): BaseTypeKind { + return "kind"; + } + + get name(): string { + return this.value.startsWith("SyntaxKind.") ? this.value.slice("SyntaxKind.".length) : this.value; + } + + formatGoConstant(): string { + return this.value === "Kind" ? "Kind" : `Kind${this.name}`; + } +} + +export class NodeType extends TypeBase { + readonly kind = "node" as const; + readonly name: string; + private membersCache?: MemberInfo[]; + private fieldsCache?: MemberInfo[]; + private inheritedFieldCache?: Map; + + constructor(api: SchemaAPI, name: string) { + super(api); + this.name = name; + } + + formatGoDeclaration(): string { + return this.name; + } + + formatGoReference(): string { + return this.api.hasNode(this.name) ? `*${this.name}Node` : `*${this.name}`; + } + + formatTypeScript(): string { + return this.name; + } + + baseKind(): BaseTypeKind { + return "node"; + } + + concreteNodeName(): string { + if (!this.isConcrete) { + throw new Error(`${this.name} is not a concrete node`); + } + return this.name; + } + + get key(): string { + return this.name; + } + + get isConcrete(): boolean { + return !!this.def; + } + + get isBase(): boolean { + return !!this.entry; + } + + get def(): NodeDef | undefined { + return this.api.getNodeDef(this.name); + } + + get entry(): BaseEntry | undefined { + return this.api.schema.bases[this.name]; + } + + get syntaxKindName(): string { + const kind = this.def?.kind; + if (Array.isArray(kind)) return kind[0]; + return kind || this.name; + } + + get extendsKeys(): string[] { + return this.def?.extends || this.entry?.extends || []; + } + + get extends(): NodeType[] { + return this.extendsKeys.map(key => this.api.getBase(key)).filter((base): base is NodeType => !!base); + } + + get members(): MemberInfo[] { + if (!this.membersCache) { + this.membersCache = (this.def?.members || []).map(member => new MemberInfo(this.api, member.name, member, this)); + } + return this.membersCache; + } + + get kindAliases(): string[] { + const kind = this.def?.kind; + if (Array.isArray(kind)) return kind.slice(1); + return []; + } + + get brand(): string | undefined { + return this.entry?.brand; + } + + get fields(): MemberInfo[] { + if (!this.fieldsCache) { + this.fieldsCache = Object.entries(this.entry?.fields || {}).map(([name, field]) => new MemberInfo(this.api, name, field)); + } + return this.fieldsCache; + } + + get arena(): boolean { + return this.def?.arena || false; + } + + get handWritten(): boolean { + return this.def?.handWritten || false; + } + + get handWrittenVisitor(): boolean { + return this.def?.handWrittenVisitor || false; + } + + get generateSubtreeFacts(): boolean { + return this.def?.generateSubtreeFacts || false; + } + + get typeParameters(): TypeParameterInfo[] { + return this.def?.typeParameters || []; + } + + get instantiationAliases(): InstantiationAliasInfo[] { + return Object.entries(this.def?.instantiationAliases || {}).map(([name, typeArg]) => ({ name, typeArg })); + } + + get kindType(): Type { + return this.kindMember()?.declaredType ?? this.api.kindType(`SyntaxKind.${this.syntaxKindName}`); + } + + kindMember(): MemberInfo | undefined { + return this.members.find(member => member.name === "Kind" || member.name === "kind"); + } + + field(name: string): MemberInfo | undefined { + return this.fields.find(field => field.name === name); + } + + inheritedField(name: string): MemberInfo | undefined { + if (!this.inheritedFieldCache) { + this.inheritedFieldCache = new Map(); + } + const cached = this.inheritedFieldCache.get(name); + if (cached !== undefined) { + return cached || undefined; + } + + for (const base of this.extends) { + const direct = base.field(name); + if (direct) { + this.inheritedFieldCache.set(name, direct); + return direct; + } + + const inherited = base.inheritedField(name); + if (inherited) { + this.inheritedFieldCache.set(name, inherited); + return inherited; + } + } + + this.inheritedFieldCache.set(name, null); + return undefined; + } + + isMultiKind(): boolean { + return this.kindTypes().length > 1; + } + + kindTypes(): KindType[] { + const collect = (type: Type): KindType[] => { + switch (type.kind) { + case "kind": + return type.value === "Kind" ? [] : [type]; + case "union": + return type.types.flatMap(collect); + case "alias": + return collect(type.resolved); + case "typeParameter": + return collect(type.constraint); + default: + return []; + } + }; + + const kindTypes = collect(this.kindType); + if (kindTypes.length === 0) { + return [this.api.kindType(`SyntaxKind.${this.syntaxKindName}`)]; + } + return [...new Map(kindTypes.map(type => [type.value, type])).values()]; + } + + /** + * All SyntaxKind types for this node, including kindAliases. + * For multi-kind nodes, returns all instantiated kind types. + * For single-kind nodes, returns the primary kind plus any kindAliases. + */ + allKinds(): KindType[] { + return [ + ...this.kindTypes(), + ...this.kindAliases.map(a => this.api.kindType(`SyntaxKind.${a}`)), + ]; + } + + isGoOnly(): boolean { + return this.api.isGoOnlyBase(this.name); + } +} + +export class TypeParameterType extends TypeBase { + readonly kind = "typeParameter" as const; + readonly name: string; + readonly constraint: Type; + + constructor(api: SchemaAPI, name: string, constraint: Type) { + super(api); + this.name = name; + this.constraint = constraint; + } + + formatGoDeclaration(): string { + return this.constraint.formatGoDeclaration(); + } + + formatGoReference(): string { + return this.constraint.formatGoReference(); + } + + formatTypeScript(): string { + return this.name; + } + + baseKind(): BaseTypeKind { + return this.constraint.baseKind(); + } + + concreteNodeName(): string | undefined { + switch (this.constraint.kind) { + case "node": + case "alias": + case "typeParameter": + return this.constraint.concreteNodeName(); + } + return undefined; + } +} + +export class AliasType extends TypeBase { + readonly kind = "alias" as const; + readonly name: string; + readonly resolved: Type; + readonly resolveAs?: "node"; + + constructor(api: SchemaAPI, name: string, resolved: Type, resolveAs?: "node") { + super(api); + this.name = name; + this.resolved = resolved; + this.resolveAs = resolveAs; + } + + formatGoDeclaration(): string { + return this.name; + } + + formatGoReference(): string { + return this.baseKind() === "node" || (this.baseKind() === "list" && (this.resolved as ListType).listKind !== "raw") ? `*${this.name}` : this.name; + } + + formatTypeScript(): string { + return this.name; + } + + baseKind(): BaseTypeKind { + return this.resolved.baseKind(); + } + + concreteNodeName(): string | undefined { + return this.api.getInstantiationNodeName(this.name); + } + + get isUnion(): boolean { + const alias = this.api.schema.nodes.aliases[this.name]; + return Array.isArray(alias); + } + + get isBaseAlias(): boolean { + const alias = this.api.schema.nodes.aliases[this.name]; + return !!alias && !Array.isArray(alias); + } + + get unionMemberNames(): string[] { + const alias = this.api.schema.nodes.aliases[this.name]; + return Array.isArray(alias) ? alias : []; + } + + get unionMemberTypes(): Type[] { + return this.unionMemberNames.map(name => this.api.resolveType(name, undefined, this.resolveAs)); + } + + get baseKey(): string | undefined { + const alias = this.api.schema.nodes.aliases[this.name]; + return alias && !Array.isArray(alias) ? alias.base : undefined; + } + + get base(): NodeType | undefined { + return this.baseKey ? this.api.getBase(this.baseKey) : undefined; + } + + get elementTypeName(): string | undefined { + return this.api.schema.nodes.listAliases?.[this.name]; + } + + get elementType(): Type | undefined { + return this.elementTypeName ? this.api.resolveType(this.elementTypeName) : undefined; + } +} + +export class UnionType extends TypeBase { + readonly kind = "union" as const; + readonly types: Type[]; + + constructor(api: SchemaAPI, types: Type[]) { + super(api); + this.types = types; + } + + formatGoDeclaration(): string { + throw new Error("Cannot declare Go type for union"); + } + + formatGoReference(): string { + const concreteNodes = new Set(); + let allConcreteNodes = true; + for (const type of this.types) { + const nodeName = this.concreteNodeNameOf(type); + if (!nodeName) { + allConcreteNodes = false; + break; + } + concreteNodes.add(nodeName); + } + if (allConcreteNodes && concreteNodes.size === 1) { + return `*${[...concreteNodes][0]}Node`; + } + + if (this.types.some(type => type.baseKind() === "node" || type.baseKind() === "list")) { + return "*Node"; + } + + if (this.types.every(type => type.baseKind() === "kind")) { + return "Kind"; + } + + const references = [...new Set(this.types.map(type => type.formatGoReference()))]; + if (references.length === 1) return references[0]; + throw new Error(`Cannot resolve Go reference form for union ${references.join(" | ")}`); + } + + formatTypeScript(): string { + return this.types.map(type => type.formatTypeScript()).join(" | "); + } + + baseKind(): BaseTypeKind { + const baseKinds = new Set(this.types.map(type => type.baseKind())); + if (baseKinds.size === 1) return this.types[0].baseKind(); + if (this.types.some(type => type.baseKind() === "list" || type.baseKind() === "node")) { + return "node"; + } + if (this.types.some(type => type.baseKind() === "kind")) { + return "kind"; + } + return "primitive"; + } + + private concreteNodeNameOf(type: Type): string | undefined { + switch (type.kind) { + case "node": + case "alias": + case "typeParameter": + return type.concreteNodeName(); + default: + return undefined; + } + } +} + +export class ListType extends TypeBase { + readonly kind = "list" as const; + readonly elementType: Type; + readonly listKind: ListKind; + + constructor(api: SchemaAPI, elementType: Type, listKind: ListKind) { + super(api); + this.elementType = elementType; + this.listKind = listKind; + } + + formatGoDeclaration(): string { + throw new Error(`List type ${this.listKind} has no generated Go declaration form`); + } + + formatGoReference(): string { + if (this.listKind === "raw") { + return this.elementType.baseKind() === "node" ? "[]*Node" : `[]${this.elementType.formatGoReference()}`; + } + if (this.listKind === "ModifierList") { + return "*ModifierList"; + } + return `*${this.api.listAliasName(this.elementType) || "NodeList"}`; + } + + formatTypeScript(): string { + const elementType = this.elementType.formatTypeScript(); + if (this.listKind === "raw") { + return `readonly ${elementType}[]`; + } + return `NodeArray<${elementType}>`; + } + + baseKind(): BaseTypeKind { + return this.elementType.baseKind() === "node" ? "list" : this.elementType.baseKind(); + } + + raw(): ListType { + if (this.listKind === "raw") { + return this; + } + return this.api.listType(this.elementType, "raw"); + } +} + +export type Type = + | AliasType + | KindType + | ListType + | NodeType + | PrimitiveType + | TypeParameterType + | UnionType; + +export interface TypeParameterInfo { + name: string; + constraint: string; + default?: string; +} + +export interface InstantiationAliasInfo { + name: string; + typeArg: string; +} + +export class MemberInfo { + private readonly api: SchemaAPI; + private readonly nameValue: string; + private readonly member?: Member; + private readonly field?: BaseField; + private inheritedFieldCache?: MemberInfo | null; + readonly node?: NodeType; + + constructor(api: SchemaAPI, name: string, source: Member | BaseField, node?: NodeType) { + this.api = api; + this.nameValue = name; + if (node) { + this.member = source as Member; + } + else { + this.field = source as BaseField; + } + this.node = node; + } + + get name(): string { + return this.nameValue; + } + + get declaredType(): Type { + return this.api.resolveType(this.rawType, this.node?.def); + } + + get type(): Type { + return this.listKind ? this.api.listType(this.declaredType, this.listKind) : this.declaredType; + } + + get rawType(): string | string[] { + if (this.field) return this.field.type; + if (this.member && !this.member.inherited) return this.member.type; + // Inherited member with an explicit type override narrows the base type + if (this.member?.inherited && this.member.type) return this.member.type; + if (this.inheritedField) return this.inheritedField.rawType; + if (this.member) return this.member.type; + throw new Error(`Member ${this.name} has no raw type source`); + } + + get listKind(): ListKind | undefined { + if (this.field) return this.field.list; + if (this.member && !this.member.inherited) return this.member.list; + return this.inheritedField?.listKind; + } + + get optional(): boolean { + return this.field?.optional ?? this.member?.optional ?? this.inheritedField?.optional ?? false; + } + + get inherited(): boolean { + return this.member?.inherited ?? false; + } + + get private(): boolean { + if (this.field?.private) return true; + if (this.member?.private) return true; + return this.inheritedField?.private ?? false; + } + + get goOnly(): boolean { + return this.field?.goOnly ?? this.member?.goOnly ?? false; + } + + /** Absent from Go structs, encoding, and factory. noGo implies noFactory. */ + get noGo(): boolean { + return this.field?.noGo ?? this.member?.noGo ?? false; + } + + /** Absent from encoding and all TS files. goOnly implies noTS. */ + get noTS(): boolean { + return this.goOnly || (this.field?.noTS ?? this.member?.noTS ?? false); + } + + /** Absent from factory functions, visitor, and clone. goOnly implies noFactory. */ + get noFactory(): boolean { + return this.goOnly || this.field?.noFactory || this.member?.noFactory || false; + } + + get visit(): string | undefined { + if (this.member?.visit) return this.member.visit; + if (this.field?.visit) return this.field.visit; + return this.inheritedField?.visit; + } + + get typeGuard(): string | undefined { + if (this.member?.typeGuard) return this.member.typeGuard; + if (this.field?.typeGuard) return this.field.typeGuard; + return this.inheritedField?.typeGuard; + } + + get bitmask(): string | undefined { + return this.member?.bitmask; + } + + get inheritedField(): MemberInfo | undefined { + if (!this.member?.inherited || !this.node) return undefined; + if (this.inheritedFieldCache !== undefined) { + return this.inheritedFieldCache || undefined; + } + this.inheritedFieldCache = this.node.inheritedField(this.name) || null; + return this.inheritedFieldCache || undefined; + } + + isKindParam(): boolean { + if (!this.member || !this.node) return false; + if (this.name !== "Kind" && this.name !== "kind") return false; + return this.declaredType.baseKind() === "kind"; + } + + isChild(): boolean { + if (!this.member || !this.node) return false; + return this.type.baseKind() === "list" || this.type.baseKind() === "node"; + } + + /** + * True when this inherited member carries an explicit type or optionality + * override relative to its base field. Such members need their own + * property declaration in a TS interface even though they are inherited. + */ + hasTypeScriptOverride(): boolean { + if (!this.member?.inherited || !this.inheritedField) return false; + // Explicit type override on the member narrows the base type. + if (this.member.type && this.type.formatTypeScript() !== this.inheritedField.type.formatTypeScript()) return true; + // Explicit optionality override (e.g. base is required but this member is optional, or vice-versa). + if (this.member.optional !== undefined && this.optional !== this.inheritedField.optional) return true; + return false; + } + + /** Go parameter name: uncapitalized, with Go keyword avoidance. */ + goParamName(): string { + const name = this.api.uncapitalize(this.name); + if (name === "type") return "typeNode"; + if (name === "default") return "defaultNode"; + if (name === "case") return "caseNode"; + return name; + } +} + +export interface KindElementInfo { + name?: string; + comment?: string; +} + +export interface KindMarkerInfo { + name: string; + value: string; +} + +export interface KindAliasInfo { + name: string; + members: string[]; + range?: [string, string]; +} + +/** A kind guard is either range-based (kind >= First && kind <= Last) or enumerated (switch/conditions). */ +export type KindGuardInfo = + & { + /** The alias name from the schema, e.g. "TokenSyntaxKind". */ + aliasName: string; + /** The guard function name, e.g. "isTokenKind". Drops "Syntax" from the alias name. */ + guardName: string; + } + & ( + | { type: "range"; first: string; last: string; } + | { type: "enumerated"; members: string[]; } + ); + +/** Compute a guard function name from a kind alias name. Drops "Syntax" from the name. */ +export function kindGuardName(aliasName: string): string { + return `is${aliasName.replace("Syntax", "")}`; +} + +export interface Schema { + $schema: string; + bases: Record; + nodes: { + definitions: Record; + aliases: Record; + listAliases?: Record; + }; + kinds?: { + elements: (string | KindElement)[]; + markers: { name: string; value: string; }[]; + aliases?: Record; + }; +} + +// ──────────────────────────────────────────────────────────────────────────── +// SchemaAPI — shared logic for both Go and TS generators +// ──────────────────────────────────────────────────────────────────────────── + +/** + * Wraps the parsed ast.json schema and provides common query/resolution + * methods used by both the Go and TS code generators. + */ +export class SchemaAPI { + readonly schema: Schema; + private readonly listAliasNameMap = new Map(); + private readonly instantiationAliasMap = new Map(); + /** Maps syntax kind names to (aliasName, nodeName) for instantiation aliases, or (undefined, nodeName) for direct nodes. */ + private readonly syntaxKindToNodeInfo = new Map(); + private readonly primitiveTypeMap = new Map(); + private readonly kindTypeMap = new Map(); + private readonly nodeTypeMap = new Map(); + private readonly listTypeMapByKey = new Map(); + private readonly unionTypeMap = new Map(); + private readonly aliasTypeMap = new Map(); + private readonly typeParameterTypeMap = new Map(); + private readonly primitiveTypes = new Set([ + "any", + "bool", + "boolean", + "int", + "ModifierFlags", + "NodeFlags", + "string", + "TokenFlags", + ]); + + constructor(schema: Schema) { + this.schema = schema; + const listAliases = schema.nodes.listAliases || {}; + for (const [aliasName, elementType] of Object.entries(listAliases)) { + this.listAliasNameMap.set(this.typeCacheKey(this.resolveType(elementType)), aliasName); + } + for (const [nodeName, nodeDef] of Object.entries(schema.nodes.definitions)) { + for (const aliasName of Object.keys(nodeDef.instantiationAliases || {})) { + this.instantiationAliasMap.set(aliasName, nodeName); + } + // Map syntax kind names to instantiation aliases + for (const [aliasName, typeArg] of Object.entries(nodeDef.instantiationAliases || {})) { + // typeArg is a syntax kind name or a kind alias name + if (this.hasKindAlias(typeArg)) { + // Multi-kind instantiation alias (e.g. BinaryOperatorToken) — expand the kind alias + for (const kindType of this.expandKindAliasMembers(typeArg)) { + if (!this.syntaxKindToNodeInfo.has(kindType.name)) { + this.syntaxKindToNodeInfo.set(kindType.name, { aliasName, nodeName }); + } + } + } + else { + if (!this.syntaxKindToNodeInfo.has(typeArg)) { + this.syntaxKindToNodeInfo.set(typeArg, { aliasName, nodeName }); + } + } + } + // Map the node's own syntax kind(s) to itself + const primaryKind = Array.isArray(nodeDef.kind) ? nodeDef.kind[0] : (nodeDef.kind || nodeName); + if (!this.syntaxKindToNodeInfo.has(primaryKind)) { + this.syntaxKindToNodeInfo.set(primaryKind, { nodeName }); + } + if (Array.isArray(nodeDef.kind)) { + for (const k of nodeDef.kind.slice(1)) { + if (!this.syntaxKindToNodeInfo.has(k)) { + this.syntaxKindToNodeInfo.set(k, { nodeName }); + } + } + } + } + } + + // ── String helpers ────────────────────────────────────────────────────── + + /** Capitalize the first character: "foo" → "Foo". */ + capitalize(s: string): string { + return s.charAt(0).toUpperCase() + s.slice(1); + } + + /** Uncapitalize, with special handling for "JSDoc" prefix. */ + uncapitalize(s: string): string { + if (s.startsWith("JSDoc")) return "jsdoc" + s.slice(5); + return s.charAt(0).toLowerCase() + s.slice(1); + } + + bases(): NodeType[] { + return Object.keys(this.schema.bases).map(key => this.getBase(key)).filter((base): base is NodeType => !!base); + } + + getBase(key: string): NodeType | undefined { + if (!(key in this.schema.bases)) return undefined; + return this.nodeType(key); + } + + nodes(): NodeType[] { + return Object.keys(this.schema.nodes.definitions).map(key => this.getNode(key)).filter((node): node is NodeType => !!node); + } + + getNode(key: string): NodeType | undefined { + if (!(key in this.schema.nodes.definitions)) return undefined; + return this.nodeType(key); + } + + hasNode(key: string): boolean { + return key in this.schema.nodes.definitions; + } + + getNodeDef(key: string): NodeDef | undefined { + return this.schema.nodes.definitions[key]; + } + + nodeAliases(): AliasType[] { + return Object.keys(this.schema.nodes.aliases).map(name => this.getNodeAlias(name)).filter((alias): alias is AliasType => !!alias); + } + + getNodeAlias(name: string): AliasType | undefined { + if (!(name in this.schema.nodes.aliases)) return undefined; + const type = this.resolveType(name); + return type.kind === "alias" ? type : undefined; + } + + listAliases(): AliasType[] { + return Object.keys(this.schema.nodes.listAliases || {}).map(name => this.resolveType(name)).filter((type): type is AliasType => type.kind === "alias"); + } + + kindElements(): KindElementInfo[] { + return (this.schema.kinds?.elements || []).map(element => { + if (typeof element === "string") { + return { name: element }; + } + return { name: element.name, comment: element.comment }; + }); + } + + kindMarkers(): KindMarkerInfo[] { + return this.schema.kinds?.markers || []; + } + + /** Resolve a marker name to its concrete kind value. If the name is already a kind element, returns itself. */ + resolveKindMarkerValue(name: string): string { + // If it's a marker, resolve to its value (recursively since markers can reference other markers) + const marker = this.kindMarkers().find(m => m.name === name); + if (marker) return this.resolveKindMarkerValue(marker.value); + return name; + } + + kindAliases(): KindAliasInfo[] { + return Object.entries(this.schema.kinds?.aliases || {}).map(([name, value]) => { + if (Array.isArray(value)) { + return { name, members: value }; + } + // Range format: { range: ["FirstX", "LastX"] } + const [first, last] = value.range; + const elements = this.kindElements().filter(e => e.name).map(e => e.name!); + const firstIdx = elements.indexOf(this.resolveKindMarkerValue(first)); + const lastIdx = elements.indexOf(this.resolveKindMarkerValue(last)); + if (firstIdx === -1 || lastIdx === -1) { + throw new Error(`Range alias ${name}: could not resolve range [${first}, ${last}]`); + } + const members = elements.slice(firstIdx, lastIdx + 1); + return { name, members, range: value.range as [string, string] }; + }); + } + + hasKindAlias(name: string): boolean { + return this.kindAliases().some(alias => alias.name === name); + } + + getKindAlias(name: string): KindAliasInfo | undefined { + return this.kindAliases().find(alias => alias.name === name); + } + + /** + * Returns kind guard info for each kind alias. Range-based aliases produce range guards; + * enumerated aliases produce guards whose members reference either sub-alias guard calls + * or concrete kind names. + */ + kindGuards(): KindGuardInfo[] { + return this.kindAliases().map(({ name, members, range }): KindGuardInfo => { + const guardName = kindGuardName(name); + if (range) { + return { aliasName: name, guardName, type: "range", first: range[0], last: range[1] }; + } + return { aliasName: name, guardName, type: "enumerated", members }; + }); + } + + hasKindElement(name: string): boolean { + return this.kindElements().some(element => element.name === name); + } + + expandKindAliasMembers(name: string): KindType[] { + const alias = this.getKindAlias(name); + if (!alias) return [this.kindType(`SyntaxKind.${name}`)]; + const result: KindType[] = []; + for (const member of alias.members) { + if (this.hasKindAlias(member)) { + result.push(...this.expandKindAliasMembers(member)); + } + else { + result.push(this.kindType(`SyntaxKind.${member}`)); + } + } + return result; + } + + /** A base is "Go-only" if it has no brand AND all its fields are both noTS and noFactory. */ + isGoOnlyBase(key: string): boolean { + const base = this.schema.bases[key]; + if (!base) return false; + if (base.brand) return false; + if (!base.fields) return true; + return Object.values(base.fields).every(f => f.goOnly || (f.noTS && f.noFactory)); + } + + /** + * Given a syntax kind name (e.g. "AbstractKeyword"), returns the node type + * that has that syntax kind. For instantiation aliases, returns the alias type + * (e.g. `AliasType("AbstractKeyword", NodeType("Token"))`). For direct nodes, + * returns the node type itself. + */ + resolveNodeTypeForSyntaxKind(syntaxKindName: string): Type | undefined { + const info = this.syntaxKindToNodeInfo.get(syntaxKindName); + if (!info) return undefined; + if (info.aliasName) { + return this.aliasType(info.aliasName, this.nodeType(info.nodeName)); + } + return this.nodeType(info.nodeName); + } + + resolveType(typeName: string | string[], node?: NodeDef, resolveAs?: "node"): Type { + if (Array.isArray(typeName)) { + return this.unionType(typeName.map(type => this.resolveType(type, node, resolveAs))); + } + + if (node?.typeParameters) { + for (const tp of node.typeParameters) { + if (tp.name === typeName) { + const nodeKey = this.nodeKeyFor(node); + if (!nodeKey) { + throw new Error(`Type parameter ${typeName} requires a node context`); + } + const constraint = tp.constraint === typeName + ? this.primitiveType(typeName) + : this.resolveType(tp.constraint, node); + return this.typeParameterType(nodeKey, typeName, constraint); + } + } + } + + const kindAliases = this.schema.kinds?.aliases || {}; + if (typeName in kindAliases) { + if (resolveAs === "node") { + // Resolve each kind in the alias to its corresponding node type + const kindMembers = this.expandKindAliasMembers(typeName); + return this.unionType(kindMembers.map(kindType => { + const resolved = this.resolveNodeTypeForSyntaxKind(kindType.name); + if (!resolved) { + throw new Error(`Kind alias member "${kindType.name}" (from "${typeName}") does not resolve to a node type`); + } + return resolved; + })); + } + return this.aliasType( + typeName, + this.unionType(this.expandKindAliasMembers(typeName)), + ); + } + + if (typeName === "Kind" || typeName.startsWith("SyntaxKind.")) { + return this.kindType(typeName); + } + + if (typeName === "Node") { + return this.nodeType(typeName); + } + + if (this.primitiveTypes.has(typeName)) { + return this.primitiveType(typeName); + } + + const listAliasTarget = this.schema.nodes.listAliases?.[typeName]; + if (listAliasTarget) { + return this.aliasType(typeName, this.listType(this.resolveType(listAliasTarget, node), "NodeList")); + } + + const instantiationNode = this.instantiationAliasMap.get(typeName); + if (instantiationNode) { + return this.aliasType(typeName, this.nodeType(instantiationNode)); + } + + if (typeName in this.schema.nodes.aliases) { + const alias = this.schema.nodes.aliases[typeName]; + if (Array.isArray(alias)) { + return this.aliasType(typeName, this.unionType(alias.map(type => this.resolveType(type, node, "node"))), "node"); + } + return this.aliasType(typeName, this.nodeType(alias.base)); + } + + if (typeName in this.schema.nodes.definitions) { + return this.nodeType(typeName); + } + + if (typeName in this.schema.bases) { + return this.nodeType(typeName); + } + + return this.primitiveType(typeName); + } + + validate(): void { + for (const base of this.bases()) { + if (base !== this.resolveType(base.key)) { + throw new Error(`Base type cache mismatch for ${base.key}`); + } + for (const ext of base.extendsKeys) { + if (!this.getBase(ext)) { + throw new Error(`Unknown base extends target ${ext} from ${base.key}`); + } + } + for (const field of base.fields) { + if (field.type !== field.type) { + throw new Error(`Base field type cache mismatch for ${base.key}.${field.name}`); + } + } + } + + for (const node of this.nodes()) { + if (this.resolveType(node.key) !== this.nodeType(node.key)) { + throw new Error(`Node type cache mismatch for ${node.key}`); + } + for (const ext of node.extendsKeys) { + if (!this.getBase(ext)) { + throw new Error(`Unknown node extends target ${ext} from ${node.key}`); + } + } + for (const member of node.members) { + if (member.type !== member.type) { + throw new Error(`Member type cache mismatch for ${node.key}.${member.name}`); + } + if (member.declaredType !== member.declaredType) { + throw new Error(`Declared member type cache mismatch for ${node.key}.${member.name}`); + } + if (member.inheritedField && member.inheritedField.type !== member.inheritedField.type) { + throw new Error(`Inherited field type cache mismatch for ${node.key}.${member.name}`); + } + } + } + + for (const alias of this.nodeAliases()) { + if (alias !== this.resolveType(alias.name)) { + throw new Error(`Alias type cache mismatch for ${alias.name}`); + } + if (alias.baseKey && !this.getBase(alias.baseKey)) { + throw new Error(`Unknown alias base ${alias.baseKey} from ${alias.name}`); + } + for (const [index, memberName] of alias.unionMemberNames.entries()) { + if (alias.unionMemberTypes[index] !== this.resolveType(memberName, undefined, alias.resolveAs)) { + // Force member types to be reachable and cached via their names. + throw new Error(`Alias union member cache mismatch for ${alias.name}`); + } + } + } + + for (const listAlias of this.listAliases()) { + const resolved = this.resolveType(listAlias.name); + if (resolved.kind !== "alias" || resolved.resolved.kind !== "list") { + throw new Error(`List alias ${listAlias.name} did not resolve to an alias of a list type`); + } + if (!listAlias.elementTypeName) { + throw new Error(`List alias ${listAlias.name} is missing an element type`); + } + if (listAlias.elementType !== this.resolveType(listAlias.elementTypeName)) { + throw new Error(`List alias element type cache mismatch for ${listAlias.name}`); + } + } + + for (const marker of this.kindMarkers()) { + if (!this.hasKindElement(marker.value) && !this.kindMarkers().some(candidate => candidate.name === marker.value)) { + throw new Error(`Kind marker ${marker.name} references undefined kind or marker ${marker.value}`); + } + } + + for (const alias of this.kindAliases()) { + for (const member of alias.members) { + if (!this.hasKindAlias(member) && !this.hasKindElement(member)) { + throw new Error(`Unknown kind alias member ${member} in ${alias.name}`); + } + } + } + } + + primitiveType(name: string): PrimitiveType { + const existing = this.primitiveTypeMap.get(name); + if (existing) return existing; + const type = new PrimitiveType(this, name); + this.primitiveTypeMap.set(name, type); + return type; + } + + kindType(value: string): KindType { + const existing = this.kindTypeMap.get(value); + if (existing) return existing; + const type = new KindType(this, value); + this.kindTypeMap.set(value, type); + return type; + } + + nodeType(name: string): NodeType { + const existing = this.nodeTypeMap.get(name); + if (existing) return existing; + const type = new NodeType(this, name); + this.nodeTypeMap.set(name, type); + return type; + } + + listType(elementType: Type, listKind: ListKind): ListType { + const key = `${listKind}:${this.typeCacheKey(elementType)}`; + const existing = this.listTypeMapByKey.get(key); + if (existing) return existing; + const type = new ListType(this, elementType, listKind); + this.listTypeMapByKey.set(key, type); + return type; + } + + unionType(types: Type[]): UnionType { + const key = types.map(type => this.typeCacheKey(type)).join("|"); + const existing = this.unionTypeMap.get(key); + if (existing) return existing; + const type = new UnionType(this, types); + this.unionTypeMap.set(key, type); + return type; + } + + aliasType(name: string, resolved: Type, resolveAs?: "node"): AliasType { + const key = `${name}:${this.typeCacheKey(resolved)}`; + const existing = this.aliasTypeMap.get(key); + if (existing) return existing; + const type = new AliasType(this, name, resolved, resolveAs); + this.aliasTypeMap.set(key, type); + return type; + } + + typeParameterType(nodeKey: string, name: string, constraint: Type): TypeParameterType { + const key = `${nodeKey}:${name}:${this.typeCacheKey(constraint)}`; + const existing = this.typeParameterTypeMap.get(key); + if (existing) return existing; + const type = new TypeParameterType(this, name, constraint); + this.typeParameterTypeMap.set(key, type); + return type; + } + + getInstantiationNodeName(name: string): string | undefined { + return this.instantiationAliasMap.get(name); + } + + listAliasName(elementType: Type): string | undefined { + return this.listAliasNameMap.get(this.typeCacheKey(elementType)); + } + + private nodeKeyFor(node: NodeDef): string | undefined { + return Object.entries(this.schema.nodes.definitions).find(([, def]) => def === node)?.[0]; + } + + private typeCacheKey(type: Type): string { + switch (type.kind) { + case "primitive": + return `primitive:${type.name}`; + case "kind": + return `kind:${type.value}`; + case "node": + return `node:${type.name}`; + case "alias": + return `alias:${type.name}:${this.typeCacheKey(type.resolved)}`; + case "list": + return `list:${type.listKind}:${this.typeCacheKey(type.elementType)}`; + case "typeParameter": + return `typeParameter:${type.name}:${this.typeCacheKey(type.constraint)}`; + case "union": + return `union:${type.types.map(member => this.typeCacheKey(member)).join("|")}`; + } + } +} + +export const api = new SchemaAPI(JSON.parse( + fs.readFileSync(path.join(ROOT, "tools/scripts/tsc/ast.json"), "utf-8"), +) as Schema); +api.validate(); diff --git a/tools/scripts/tsc/tsconfig.json b/tools/scripts/tsc/tsconfig.json index 6f6ba801693cb..bc1439ee8a348 100644 --- a/tools/scripts/tsc/tsconfig.json +++ b/tools/scripts/tsc/tsconfig.json @@ -1,7 +1,7 @@ -{ - "extends": "../gen/tsconfig.json", - "compilerOptions": { - "resolveJsonModule": true - }, - "include": ["**/*.ts"] -} +{ + "extends": "../gen/tsconfig.json", + "compilerOptions": { + "resolveJsonModule": true + }, + "include": ["**/*.ts"] +} diff --git a/tsc/LICENSE b/tsc/LICENSE index 8746124b27791..edc24fd6e1409 100644 --- a/tsc/LICENSE +++ b/tsc/LICENSE @@ -1,55 +1,55 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/tsc/internal/bundled/README.md b/tsc/internal/bundled/README.md index a82b48b820639..2c421df635839 100644 --- a/tsc/internal/bundled/README.md +++ b/tsc/internal/bundled/README.md @@ -1,26 +1,26 @@ -# Read this! - -The files in `libs` are copied and deployed with TypeScript as the set of APIs available as a part of the JavaScript language. - -There are three main domains of APIs: - - - **ECMAScript language features** - e.g. JavaScript APIs like functions on Array etc which are documented in [ECMA-262](https://tc39.es/ecma262/) - - **DOM APIs** - e.g. APIs which are available in web browsers - - **Intl APIs** - e.g. APIs scoped to `Intl` which are documented in [ECMA-402](https://www.ecma-international.org/publications-and-standards/standards/ecma-402/) - -## How do we figure out when to add something? - -TypeScript has a rule-of-thumb to only add something when it has got far enough through the standards process that it is more or less confirmed. For JavaScript APIs and language features, that means the proposal is at stage 3 or later. - -You can find the source of truth for modern language features and Intl APIs in these completed proposal lists: - - - [JavaScript](https://github.com/tc39/proposals/blob/master/finished-proposals.md) - - [Intl](https://github.com/tc39/proposals/blob/master/ecma402/finished-proposals.md) - -For the DOM APIs, which are a bit more free-form, we have asked that APIs are available un-prefixed/flagged in at least 2 browser _engines_ (i.e. not just 2 chromium browsers.) - -## Generated files - -The DOM and web worker files aren't meant to be edited by hand. - -If you need to make changes to such files, make a change to the input files for [**our library generator**](https://github.com/microsoft/TypeScript-DOM-lib-generator). +# Read this! + +The files in `libs` are copied and deployed with TypeScript as the set of APIs available as a part of the JavaScript language. + +There are three main domains of APIs: + + - **ECMAScript language features** - e.g. JavaScript APIs like functions on Array etc which are documented in [ECMA-262](https://tc39.es/ecma262/) + - **DOM APIs** - e.g. APIs which are available in web browsers + - **Intl APIs** - e.g. APIs scoped to `Intl` which are documented in [ECMA-402](https://www.ecma-international.org/publications-and-standards/standards/ecma-402/) + +## How do we figure out when to add something? + +TypeScript has a rule-of-thumb to only add something when it has got far enough through the standards process that it is more or less confirmed. For JavaScript APIs and language features, that means the proposal is at stage 3 or later. + +You can find the source of truth for modern language features and Intl APIs in these completed proposal lists: + + - [JavaScript](https://github.com/tc39/proposals/blob/master/finished-proposals.md) + - [Intl](https://github.com/tc39/proposals/blob/master/ecma402/finished-proposals.md) + +For the DOM APIs, which are a bit more free-form, we have asked that APIs are available un-prefixed/flagged in at least 2 browser _engines_ (i.e. not just 2 chromium browsers.) + +## Generated files + +The DOM and web worker files aren't meant to be edited by hand. + +If you need to make changes to such files, make a change to the input files for [**our library generator**](https://github.com/microsoft/TypeScript-DOM-lib-generator). diff --git a/tsc/internal/bundled/generate.go b/tsc/internal/bundled/generate.go index 36aa46bdefe86..4605f35758a75 100644 --- a/tsc/internal/bundled/generate.go +++ b/tsc/internal/bundled/generate.go @@ -80,10 +80,7 @@ func readLibs() []string { if err != nil { log.Fatalf("failed to read %s: %v", copyrightNotice, err) } - if bytes.ContainsRune(copyright, '\r') || !bytes.HasSuffix(copyright, []byte("\n\n")) { - log.Fatalf("%s must use LF line endings and end with a blank line", copyrightNotice) - } - header := append(copyright, '\n') + header := append(bytes.TrimRight(copyright, "\n"), '\n', '\n') libs := make([]string, 0, len(entries)) for _, entry := range entries { @@ -97,14 +94,8 @@ func readLibs() []string { if err != nil { log.Fatalf("failed to read %s: %v", path, err) } - if bytes.ContainsRune(content, '\r') { - log.Fatalf("%s must use LF line endings", path) - } if !bytes.HasPrefix(content, header) { - log.Fatalf("%s must start with %s followed by a blank line", path, copyrightNotice) - } - if !bytes.HasSuffix(content, []byte("\n")) { - log.Fatalf("%s must end with a newline", path) + log.Fatalf("%s must start with %s", path, copyrightNotice) } libs = append(libs, name) diff --git a/tsc/internal/bundled/libs/lib.d.ts b/tsc/internal/bundled/libs/lib.d.ts index a80f0070486d2..529133f005d28 100644 --- a/tsc/internal/bundled/libs/lib.d.ts +++ b/tsc/internal/bundled/libs/lib.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.decorators.d.ts b/tsc/internal/bundled/libs/lib.decorators.d.ts index 83d82bef2e557..a05ec4d7b671a 100644 --- a/tsc/internal/bundled/libs/lib.decorators.d.ts +++ b/tsc/internal/bundled/libs/lib.decorators.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /** * The decorator context types provided to class element decorators. */ diff --git a/tsc/internal/bundled/libs/lib.decorators.legacy.d.ts b/tsc/internal/bundled/libs/lib.decorators.legacy.d.ts index 89775167cf7e0..0867b0ecc600f 100644 --- a/tsc/internal/bundled/libs/lib.decorators.legacy.d.ts +++ b/tsc/internal/bundled/libs/lib.decorators.legacy.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare type ClassDecorator = (target: TFunction) => TFunction | void; declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; declare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; diff --git a/tsc/internal/bundled/libs/lib.es2015.collection.d.ts b/tsc/internal/bundled/libs/lib.es2015.collection.d.ts index 225e918b76477..1ed676c5abe08 100644 --- a/tsc/internal/bundled/libs/lib.es2015.collection.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.collection.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Map { /** * Removes all elements from the Map. diff --git a/tsc/internal/bundled/libs/lib.es2015.core.d.ts b/tsc/internal/bundled/libs/lib.es2015.core.d.ts index e36b9fbdadd0c..4c056d749f643 100644 --- a/tsc/internal/bundled/libs/lib.es2015.core.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.core.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Array { /** * Returns the value of the first element in the array where predicate is true, and undefined diff --git a/tsc/internal/bundled/libs/lib.es2015.d.ts b/tsc/internal/bundled/libs/lib.es2015.d.ts index 006d4f486f684..f31b6f2a7b187 100644 --- a/tsc/internal/bundled/libs/lib.es2015.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2015.generator.d.ts b/tsc/internal/bundled/libs/lib.es2015.generator.d.ts index 9fedc4d346a13..0e040fde596dc 100644 --- a/tsc/internal/bundled/libs/lib.es2015.generator.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.generator.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Generator extends IteratorObject { diff --git a/tsc/internal/bundled/libs/lib.es2015.iterable.d.ts b/tsc/internal/bundled/libs/lib.es2015.iterable.d.ts index 7396a53feb8cf..4c57f556a800d 100644 --- a/tsc/internal/bundled/libs/lib.es2015.iterable.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.iterable.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface SymbolConstructor { diff --git a/tsc/internal/bundled/libs/lib.es2015.promise.d.ts b/tsc/internal/bundled/libs/lib.es2015.promise.d.ts index 8030a9bb92783..db2ce423f78d7 100644 --- a/tsc/internal/bundled/libs/lib.es2015.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface PromiseConstructor { /** * A reference to the prototype. diff --git a/tsc/internal/bundled/libs/lib.es2015.proxy.d.ts b/tsc/internal/bundled/libs/lib.es2015.proxy.d.ts index 4f99052fde889..a5f5299f60704 100644 --- a/tsc/internal/bundled/libs/lib.es2015.proxy.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.proxy.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ProxyHandler { /** * A trap method for a function call. diff --git a/tsc/internal/bundled/libs/lib.es2015.reflect.d.ts b/tsc/internal/bundled/libs/lib.es2015.reflect.d.ts index f321076579948..296a21529be1d 100644 --- a/tsc/internal/bundled/libs/lib.es2015.reflect.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.reflect.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Reflect { /** * Calls the function with the specified object as the this value diff --git a/tsc/internal/bundled/libs/lib.es2015.symbol.d.ts b/tsc/internal/bundled/libs/lib.es2015.symbol.d.ts index b2ba22dba66fa..fc5ee0b983659 100644 --- a/tsc/internal/bundled/libs/lib.es2015.symbol.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.symbol.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface SymbolConstructor { /** * A reference to the prototype. diff --git a/tsc/internal/bundled/libs/lib.es2015.symbol.wellknown.d.ts b/tsc/internal/bundled/libs/lib.es2015.symbol.wellknown.d.ts index e35b14cb98cd0..c6684a5a6339f 100644 --- a/tsc/internal/bundled/libs/lib.es2015.symbol.wellknown.d.ts +++ b/tsc/internal/bundled/libs/lib.es2015.symbol.wellknown.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface SymbolConstructor { diff --git a/tsc/internal/bundled/libs/lib.es2016.array.include.d.ts b/tsc/internal/bundled/libs/lib.es2016.array.include.d.ts index d6a31cb38260b..35bf66f77728d 100644 --- a/tsc/internal/bundled/libs/lib.es2016.array.include.d.ts +++ b/tsc/internal/bundled/libs/lib.es2016.array.include.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Array { /** * Determines whether an array includes a certain element, returning true or false as appropriate. diff --git a/tsc/internal/bundled/libs/lib.es2016.d.ts b/tsc/internal/bundled/libs/lib.es2016.d.ts index 0fd711fd1ce73..2547ac47fdffc 100644 --- a/tsc/internal/bundled/libs/lib.es2016.d.ts +++ b/tsc/internal/bundled/libs/lib.es2016.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2016.full.d.ts b/tsc/internal/bundled/libs/lib.es2016.full.d.ts index dfd09e5943910..82b7c35830c8f 100644 --- a/tsc/internal/bundled/libs/lib.es2016.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2016.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2016.intl.d.ts b/tsc/internal/bundled/libs/lib.es2016.intl.d.ts index fe677ace3d098..1a9a11b48c13b 100644 --- a/tsc/internal/bundled/libs/lib.es2016.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2016.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { /** * The `Intl.getCanonicalLocales()` method returns an array containing diff --git a/tsc/internal/bundled/libs/lib.es2017.arraybuffer.d.ts b/tsc/internal/bundled/libs/lib.es2017.arraybuffer.d.ts index 1c4a1b5da91a2..66dd25016d554 100644 --- a/tsc/internal/bundled/libs/lib.es2017.arraybuffer.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.arraybuffer.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ArrayBufferConstructor { new (): ArrayBuffer; } diff --git a/tsc/internal/bundled/libs/lib.es2017.d.ts b/tsc/internal/bundled/libs/lib.es2017.d.ts index c7b5f85c2c2ae..6e1fba4f9f1e9 100644 --- a/tsc/internal/bundled/libs/lib.es2017.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2017.date.d.ts b/tsc/internal/bundled/libs/lib.es2017.date.d.ts index 99f161c769726..fb1ea66f5288a 100644 --- a/tsc/internal/bundled/libs/lib.es2017.date.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.date.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface DateConstructor { /** * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. diff --git a/tsc/internal/bundled/libs/lib.es2017.full.d.ts b/tsc/internal/bundled/libs/lib.es2017.full.d.ts index aafe7e27d0d2d..cc8c96eb75acf 100644 --- a/tsc/internal/bundled/libs/lib.es2017.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2017.intl.d.ts b/tsc/internal/bundled/libs/lib.es2017.intl.d.ts index cbbf658903825..09ede376c30f0 100644 --- a/tsc/internal/bundled/libs/lib.es2017.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { interface DateTimeFormatPartTypesRegistry { day: any; diff --git a/tsc/internal/bundled/libs/lib.es2017.object.d.ts b/tsc/internal/bundled/libs/lib.es2017.object.d.ts index 85e93ea341221..bb867644b3833 100644 --- a/tsc/internal/bundled/libs/lib.es2017.object.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.object.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ObjectConstructor { /** * Returns an array of values of the enumerable own properties of an object diff --git a/tsc/internal/bundled/libs/lib.es2017.sharedmemory.d.ts b/tsc/internal/bundled/libs/lib.es2017.sharedmemory.d.ts index 94aee6434e844..07226ac94859b 100644 --- a/tsc/internal/bundled/libs/lib.es2017.sharedmemory.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.sharedmemory.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.es2017.string.d.ts b/tsc/internal/bundled/libs/lib.es2017.string.d.ts index 6d7f89ee98e9a..330352a839ed8 100644 --- a/tsc/internal/bundled/libs/lib.es2017.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface String { /** * Pads the current string with a given string (repeated and/or truncated, if needed) so that the resulting string has a given length. diff --git a/tsc/internal/bundled/libs/lib.es2017.typedarrays.d.ts b/tsc/internal/bundled/libs/lib.es2017.typedarrays.d.ts index ca89ff301bcc5..4ac9df4fb980a 100644 --- a/tsc/internal/bundled/libs/lib.es2017.typedarrays.d.ts +++ b/tsc/internal/bundled/libs/lib.es2017.typedarrays.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Int8ArrayConstructor { new (): Int8Array; } diff --git a/tsc/internal/bundled/libs/lib.es2018.asyncgenerator.d.ts b/tsc/internal/bundled/libs/lib.es2018.asyncgenerator.d.ts index cf9436f74d846..61d30cefe28f7 100644 --- a/tsc/internal/bundled/libs/lib.es2018.asyncgenerator.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.asyncgenerator.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface AsyncGenerator extends AsyncIteratorObject { diff --git a/tsc/internal/bundled/libs/lib.es2018.asynciterable.d.ts b/tsc/internal/bundled/libs/lib.es2018.asynciterable.d.ts index 358fe271faf5b..a3715c5f2ff1e 100644 --- a/tsc/internal/bundled/libs/lib.es2018.asynciterable.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.asynciterable.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.es2018.d.ts b/tsc/internal/bundled/libs/lib.es2018.d.ts index 6bc4051d04f45..b42248b659b62 100644 --- a/tsc/internal/bundled/libs/lib.es2018.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2018.full.d.ts b/tsc/internal/bundled/libs/lib.es2018.full.d.ts index 242b8a3d3a66d..6be356c0199d0 100644 --- a/tsc/internal/bundled/libs/lib.es2018.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2018.intl.d.ts b/tsc/internal/bundled/libs/lib.es2018.intl.d.ts index 90d358b355d27..dd957a24a34f3 100644 --- a/tsc/internal/bundled/libs/lib.es2018.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { // http://cldr.unicode.org/index/cldr-spec/plural-rules#TOC-Determining-Plural-Categories type LDMLPluralRule = "zero" | "one" | "two" | "few" | "many" | "other"; diff --git a/tsc/internal/bundled/libs/lib.es2018.promise.d.ts b/tsc/internal/bundled/libs/lib.es2018.promise.d.ts index 156c843bd37a5..72008eddf0402 100644 --- a/tsc/internal/bundled/libs/lib.es2018.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /** * Represents the completion of an asynchronous operation */ diff --git a/tsc/internal/bundled/libs/lib.es2018.regexp.d.ts b/tsc/internal/bundled/libs/lib.es2018.regexp.d.ts index 4bbca17e25935..f1f7fc306e284 100644 --- a/tsc/internal/bundled/libs/lib.es2018.regexp.d.ts +++ b/tsc/internal/bundled/libs/lib.es2018.regexp.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface RegExpMatchArray { groups?: { [key: string]: string; diff --git a/tsc/internal/bundled/libs/lib.es2019.array.d.ts b/tsc/internal/bundled/libs/lib.es2019.array.d.ts index 204f0e69c7919..c620c58379e97 100644 --- a/tsc/internal/bundled/libs/lib.es2019.array.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.array.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - type FlatArray = { done: Arr; recur: Arr extends ReadonlyArray ? FlatArray diff --git a/tsc/internal/bundled/libs/lib.es2019.d.ts b/tsc/internal/bundled/libs/lib.es2019.d.ts index 09ff746d3a616..bc59e23eadf3b 100644 --- a/tsc/internal/bundled/libs/lib.es2019.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2019.full.d.ts b/tsc/internal/bundled/libs/lib.es2019.full.d.ts index 6c89830f49590..c7d6f37914d30 100644 --- a/tsc/internal/bundled/libs/lib.es2019.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2019.intl.d.ts b/tsc/internal/bundled/libs/lib.es2019.intl.d.ts index 7fb16fc44bb60..25c8c0d5109e9 100644 --- a/tsc/internal/bundled/libs/lib.es2019.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { interface DateTimeFormatPartTypesRegistry { unknown: never; diff --git a/tsc/internal/bundled/libs/lib.es2019.object.d.ts b/tsc/internal/bundled/libs/lib.es2019.object.d.ts index 8a9242d937c40..48f99b6a43a0e 100644 --- a/tsc/internal/bundled/libs/lib.es2019.object.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.object.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface ObjectConstructor { diff --git a/tsc/internal/bundled/libs/lib.es2019.string.d.ts b/tsc/internal/bundled/libs/lib.es2019.string.d.ts index 9ae5be7f53978..7cbac58182b9c 100644 --- a/tsc/internal/bundled/libs/lib.es2019.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface String { /** Removes the trailing white space and line terminator characters from a string. */ trimEnd(): string; diff --git a/tsc/internal/bundled/libs/lib.es2019.symbol.d.ts b/tsc/internal/bundled/libs/lib.es2019.symbol.d.ts index 835350fbdc053..edc93f264b996 100644 --- a/tsc/internal/bundled/libs/lib.es2019.symbol.d.ts +++ b/tsc/internal/bundled/libs/lib.es2019.symbol.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Symbol { /** * Expose the [[Description]] internal slot of a symbol directly. diff --git a/tsc/internal/bundled/libs/lib.es2020.bigint.d.ts b/tsc/internal/bundled/libs/lib.es2020.bigint.d.ts index fde848f721684..ae31d07ab7ca3 100644 --- a/tsc/internal/bundled/libs/lib.es2020.bigint.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.bigint.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface BigIntToLocaleStringOptions { diff --git a/tsc/internal/bundled/libs/lib.es2020.d.ts b/tsc/internal/bundled/libs/lib.es2020.d.ts index e6a9f3a5d0309..0b60790bf809f 100644 --- a/tsc/internal/bundled/libs/lib.es2020.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2020.date.d.ts b/tsc/internal/bundled/libs/lib.es2020.date.d.ts index d56af7f37ebb7..9363e7c4a2327 100644 --- a/tsc/internal/bundled/libs/lib.es2020.date.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.date.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Date { diff --git a/tsc/internal/bundled/libs/lib.es2020.full.d.ts b/tsc/internal/bundled/libs/lib.es2020.full.d.ts index bec1417c07bd8..2c80d06bb5c8d 100644 --- a/tsc/internal/bundled/libs/lib.es2020.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2020.intl.d.ts b/tsc/internal/bundled/libs/lib.es2020.intl.d.ts index 6f0980e0fe909..82ac6849fbe31 100644 --- a/tsc/internal/bundled/libs/lib.es2020.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// declare namespace Intl { /** diff --git a/tsc/internal/bundled/libs/lib.es2020.number.d.ts b/tsc/internal/bundled/libs/lib.es2020.number.d.ts index 99d414b388d3b..0359f637759fb 100644 --- a/tsc/internal/bundled/libs/lib.es2020.number.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.number.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Number { diff --git a/tsc/internal/bundled/libs/lib.es2020.promise.d.ts b/tsc/internal/bundled/libs/lib.es2020.promise.d.ts index 1c28cf67d36c4..ee851c083c9a1 100644 --- a/tsc/internal/bundled/libs/lib.es2020.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface PromiseFulfilledResult { status: "fulfilled"; value: T; diff --git a/tsc/internal/bundled/libs/lib.es2020.sharedmemory.d.ts b/tsc/internal/bundled/libs/lib.es2020.sharedmemory.d.ts index ba412f1dc3c64..22a916ce41e62 100644 --- a/tsc/internal/bundled/libs/lib.es2020.sharedmemory.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.sharedmemory.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Atomics { diff --git a/tsc/internal/bundled/libs/lib.es2020.string.d.ts b/tsc/internal/bundled/libs/lib.es2020.string.d.ts index 0ca623cc895f4..58d595ed532de 100644 --- a/tsc/internal/bundled/libs/lib.es2020.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2020.symbol.wellknown.d.ts b/tsc/internal/bundled/libs/lib.es2020.symbol.wellknown.d.ts index 44bd867eb9c21..de75b048b54f3 100644 --- a/tsc/internal/bundled/libs/lib.es2020.symbol.wellknown.d.ts +++ b/tsc/internal/bundled/libs/lib.es2020.symbol.wellknown.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.es2021.d.ts b/tsc/internal/bundled/libs/lib.es2021.d.ts index 03b1692b39a4f..80c4fed001ad9 100644 --- a/tsc/internal/bundled/libs/lib.es2021.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2021.full.d.ts b/tsc/internal/bundled/libs/lib.es2021.full.d.ts index 7a173fb19552a..6b2de634ca8dc 100644 --- a/tsc/internal/bundled/libs/lib.es2021.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2021.intl.d.ts b/tsc/internal/bundled/libs/lib.es2021.intl.d.ts index 88f4c7e927f0a..e359e517736c6 100644 --- a/tsc/internal/bundled/libs/lib.es2021.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { interface DateTimeFormatPartTypesRegistry { fractionalSecond: any; diff --git a/tsc/internal/bundled/libs/lib.es2021.promise.d.ts b/tsc/internal/bundled/libs/lib.es2021.promise.d.ts index 63c149f22a1eb..0626880c70496 100644 --- a/tsc/internal/bundled/libs/lib.es2021.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface AggregateError extends Error { errors: any[]; } diff --git a/tsc/internal/bundled/libs/lib.es2021.string.d.ts b/tsc/internal/bundled/libs/lib.es2021.string.d.ts index 507877af72652..45c6c0cede8ae 100644 --- a/tsc/internal/bundled/libs/lib.es2021.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface String { /** * Replace all instances of a substring in a string, using a regular expression or search string. diff --git a/tsc/internal/bundled/libs/lib.es2021.weakref.d.ts b/tsc/internal/bundled/libs/lib.es2021.weakref.d.ts index 35598e2717691..294b091f1eed5 100644 --- a/tsc/internal/bundled/libs/lib.es2021.weakref.d.ts +++ b/tsc/internal/bundled/libs/lib.es2021.weakref.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface WeakRef { diff --git a/tsc/internal/bundled/libs/lib.es2022.array.d.ts b/tsc/internal/bundled/libs/lib.es2022.array.d.ts index fb7b28ba8cb29..a5de196291c6f 100644 --- a/tsc/internal/bundled/libs/lib.es2022.array.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.array.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Array { /** * Returns the item located at the specified index. diff --git a/tsc/internal/bundled/libs/lib.es2022.d.ts b/tsc/internal/bundled/libs/lib.es2022.d.ts index 21f17a5ba65fa..fae46b6cd2353 100644 --- a/tsc/internal/bundled/libs/lib.es2022.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2022.error.d.ts b/tsc/internal/bundled/libs/lib.es2022.error.d.ts index 7a1f9898a0e35..37f7bdf5d8ce9 100644 --- a/tsc/internal/bundled/libs/lib.es2022.error.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.error.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface ErrorOptions { diff --git a/tsc/internal/bundled/libs/lib.es2022.full.d.ts b/tsc/internal/bundled/libs/lib.es2022.full.d.ts index 644387dd604f8..abbb322243df7 100644 --- a/tsc/internal/bundled/libs/lib.es2022.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2022.intl.d.ts b/tsc/internal/bundled/libs/lib.es2022.intl.d.ts index d9f758c521173..d486189650b76 100644 --- a/tsc/internal/bundled/libs/lib.es2022.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { /** * An object with some or all properties of the `Intl.Segmenter` constructor `options` parameter. diff --git a/tsc/internal/bundled/libs/lib.es2022.object.d.ts b/tsc/internal/bundled/libs/lib.es2022.object.d.ts index f07c8842f188e..33386b9e5b106 100644 --- a/tsc/internal/bundled/libs/lib.es2022.object.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.object.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ObjectConstructor { /** * Determines whether an object has a property with the specified name. diff --git a/tsc/internal/bundled/libs/lib.es2022.regexp.d.ts b/tsc/internal/bundled/libs/lib.es2022.regexp.d.ts index b632b42dad9d8..52e9615930910 100644 --- a/tsc/internal/bundled/libs/lib.es2022.regexp.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.regexp.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface RegExpMatchArray { indices?: RegExpIndicesArray; } diff --git a/tsc/internal/bundled/libs/lib.es2022.string.d.ts b/tsc/internal/bundled/libs/lib.es2022.string.d.ts index 48e03ea6f486e..bb42b07d620eb 100644 --- a/tsc/internal/bundled/libs/lib.es2022.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2022.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface String { /** * Returns a new String consisting of the single UTF-16 code unit located at the specified index. diff --git a/tsc/internal/bundled/libs/lib.es2023.array.d.ts b/tsc/internal/bundled/libs/lib.es2023.array.d.ts index f5b55982c7c65..fb61d5f3526dc 100644 --- a/tsc/internal/bundled/libs/lib.es2023.array.d.ts +++ b/tsc/internal/bundled/libs/lib.es2023.array.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Array { /** * Returns the value of the last element in the array where predicate is true, and undefined diff --git a/tsc/internal/bundled/libs/lib.es2023.collection.d.ts b/tsc/internal/bundled/libs/lib.es2023.collection.d.ts index 5e67a83554ba6..1151e4fa1e36d 100644 --- a/tsc/internal/bundled/libs/lib.es2023.collection.d.ts +++ b/tsc/internal/bundled/libs/lib.es2023.collection.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface WeakKeyTypes { symbol: symbol; } diff --git a/tsc/internal/bundled/libs/lib.es2023.d.ts b/tsc/internal/bundled/libs/lib.es2023.d.ts index ca01eec1531cd..52fb8af54049f 100644 --- a/tsc/internal/bundled/libs/lib.es2023.d.ts +++ b/tsc/internal/bundled/libs/lib.es2023.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2023.full.d.ts b/tsc/internal/bundled/libs/lib.es2023.full.d.ts index 6e670ae43d909..e86211925795c 100644 --- a/tsc/internal/bundled/libs/lib.es2023.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2023.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2023.intl.d.ts b/tsc/internal/bundled/libs/lib.es2023.intl.d.ts index 5ea242308f044..6e269d28c9e05 100644 --- a/tsc/internal/bundled/libs/lib.es2023.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2023.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - declare namespace Intl { interface NumberFormatOptionsUseGroupingRegistry { min2: never; diff --git a/tsc/internal/bundled/libs/lib.es2024.arraybuffer.d.ts b/tsc/internal/bundled/libs/lib.es2024.arraybuffer.d.ts index 5f375d3aa57ad..90ff44375d0a9 100644 --- a/tsc/internal/bundled/libs/lib.es2024.arraybuffer.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.arraybuffer.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ArrayBuffer { /** * If this ArrayBuffer is resizable, returns the maximum byte length given during construction; returns the byte length if not. diff --git a/tsc/internal/bundled/libs/lib.es2024.collection.d.ts b/tsc/internal/bundled/libs/lib.es2024.collection.d.ts index a254b01572c68..266d74ac90642 100644 --- a/tsc/internal/bundled/libs/lib.es2024.collection.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.collection.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface MapConstructor { /** * Groups members of an iterable according to the return value of the passed callback. diff --git a/tsc/internal/bundled/libs/lib.es2024.d.ts b/tsc/internal/bundled/libs/lib.es2024.d.ts index 723ed4ac005de..cb34ae9d24af2 100644 --- a/tsc/internal/bundled/libs/lib.es2024.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2024.full.d.ts b/tsc/internal/bundled/libs/lib.es2024.full.d.ts index 4264e30645005..838a205f6a68c 100644 --- a/tsc/internal/bundled/libs/lib.es2024.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2024.object.d.ts b/tsc/internal/bundled/libs/lib.es2024.object.d.ts index 5f57880dcd313..89fbbf87f6077 100644 --- a/tsc/internal/bundled/libs/lib.es2024.object.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.object.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ObjectConstructor { /** * Groups members of an iterable according to the return value of the passed callback. diff --git a/tsc/internal/bundled/libs/lib.es2024.promise.d.ts b/tsc/internal/bundled/libs/lib.es2024.promise.d.ts index d74e968d878d2..1293e6595d2f0 100644 --- a/tsc/internal/bundled/libs/lib.es2024.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface PromiseWithResolvers { promise: Promise; resolve: (value: T | PromiseLike) => void; diff --git a/tsc/internal/bundled/libs/lib.es2024.regexp.d.ts b/tsc/internal/bundled/libs/lib.es2024.regexp.d.ts index bd023f77e743d..e7a6adc389f11 100644 --- a/tsc/internal/bundled/libs/lib.es2024.regexp.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.regexp.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface RegExp { /** * Returns a Boolean value indicating the state of the unicodeSets flag (v) used with a regular expression. diff --git a/tsc/internal/bundled/libs/lib.es2024.sharedmemory.d.ts b/tsc/internal/bundled/libs/lib.es2024.sharedmemory.d.ts index f981a325d8236..dcaa149efc503 100644 --- a/tsc/internal/bundled/libs/lib.es2024.sharedmemory.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.sharedmemory.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Atomics { diff --git a/tsc/internal/bundled/libs/lib.es2024.string.d.ts b/tsc/internal/bundled/libs/lib.es2024.string.d.ts index cb2a4eebf028e..72866901ecb4a 100644 --- a/tsc/internal/bundled/libs/lib.es2024.string.d.ts +++ b/tsc/internal/bundled/libs/lib.es2024.string.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface String { /** * Returns true if all leading surrogates and trailing surrogates appear paired and in order. diff --git a/tsc/internal/bundled/libs/lib.es2025.collection.d.ts b/tsc/internal/bundled/libs/lib.es2025.collection.d.ts index 507e5e72a3525..c8bbbc2dce274 100644 --- a/tsc/internal/bundled/libs/lib.es2025.collection.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.collection.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface ReadonlySetLike { diff --git a/tsc/internal/bundled/libs/lib.es2025.d.ts b/tsc/internal/bundled/libs/lib.es2025.d.ts index 78e41e31e201f..ca93869561a6b 100644 --- a/tsc/internal/bundled/libs/lib.es2025.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2025.float16.d.ts b/tsc/internal/bundled/libs/lib.es2025.float16.d.ts index b4ebf8a689d2e..9b670f8ede25a 100644 --- a/tsc/internal/bundled/libs/lib.es2025.float16.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.float16.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.es2025.full.d.ts b/tsc/internal/bundled/libs/lib.es2025.full.d.ts index 0870bb4f53d7b..66090e4494127 100644 --- a/tsc/internal/bundled/libs/lib.es2025.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2025.intl.d.ts b/tsc/internal/bundled/libs/lib.es2025.intl.d.ts index ffc660e027174..9b65bed004982 100644 --- a/tsc/internal/bundled/libs/lib.es2025.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// declare namespace Intl { diff --git a/tsc/internal/bundled/libs/lib.es2025.iterator.d.ts b/tsc/internal/bundled/libs/lib.es2025.iterator.d.ts index 13ca5401a1530..613a90b5980fe 100644 --- a/tsc/internal/bundled/libs/lib.es2025.iterator.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.iterator.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// // NOTE: This is specified as what is essentially an unreachable module. All actual global declarations can be found diff --git a/tsc/internal/bundled/libs/lib.es2025.promise.d.ts b/tsc/internal/bundled/libs/lib.es2025.promise.d.ts index 791fd54e44ea3..99f3747a0a1ce 100644 --- a/tsc/internal/bundled/libs/lib.es2025.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface PromiseConstructor { /** * Takes a callback of any kind (returns or throws, synchronously or asynchronously) and wraps its result diff --git a/tsc/internal/bundled/libs/lib.es2025.regexp.d.ts b/tsc/internal/bundled/libs/lib.es2025.regexp.d.ts index 1e4d7c14f1c85..11ba372e6cf4c 100644 --- a/tsc/internal/bundled/libs/lib.es2025.regexp.d.ts +++ b/tsc/internal/bundled/libs/lib.es2025.regexp.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface RegExpConstructor { /** * Escapes any RegExp syntax characters in the input string, returning a diff --git a/tsc/internal/bundled/libs/lib.es2026.array.d.ts b/tsc/internal/bundled/libs/lib.es2026.array.d.ts index 756bdbf11c66d..9eb835d8a0a13 100644 --- a/tsc/internal/bundled/libs/lib.es2026.array.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.array.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ArrayConstructor { /** * Creates an array from an async iterator or iterable object. diff --git a/tsc/internal/bundled/libs/lib.es2026.collection.d.ts b/tsc/internal/bundled/libs/lib.es2026.collection.d.ts index ab807de98a19d..0e6cac53b0511 100644 --- a/tsc/internal/bundled/libs/lib.es2026.collection.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.collection.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Map { diff --git a/tsc/internal/bundled/libs/lib.es2026.d.ts b/tsc/internal/bundled/libs/lib.es2026.d.ts index 94f4967830955..a6a2bb64b06aa 100644 --- a/tsc/internal/bundled/libs/lib.es2026.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2026.error.d.ts b/tsc/internal/bundled/libs/lib.es2026.error.d.ts index 470aaec5409fe..6908b58f2de62 100644 --- a/tsc/internal/bundled/libs/lib.es2026.error.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.error.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface ErrorConstructor { /** * Indicates whether the argument provided is a built-in Error instance or not. diff --git a/tsc/internal/bundled/libs/lib.es2026.full.d.ts b/tsc/internal/bundled/libs/lib.es2026.full.d.ts index 75b29f99aab6e..760bf3a4386f9 100644 --- a/tsc/internal/bundled/libs/lib.es2026.full.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.es2026.iterator.d.ts b/tsc/internal/bundled/libs/lib.es2026.iterator.d.ts index a91a00f6bd4de..487730b152408 100644 --- a/tsc/internal/bundled/libs/lib.es2026.iterator.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.iterator.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface IteratorConstructor { @@ -21,5 +20,5 @@ interface IteratorConstructor { * Creates an iterator that yields the values of each iterable in sequence. * @param iterables Iterable objects to concatenate. */ - concat(...iterables: { -readonly [K in keyof T]: Iterable & object }): IteratorObject; + concat(...iterables: { -readonly [K in keyof T]: Iterable & object; }): IteratorObject; } diff --git a/tsc/internal/bundled/libs/lib.es2026.json.d.ts b/tsc/internal/bundled/libs/lib.es2026.json.d.ts index 03b82de3a9b5c..dbb6a5d2877fd 100644 --- a/tsc/internal/bundled/libs/lib.es2026.json.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.json.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - export {}; declare class RawJSONInstance { @@ -36,7 +35,7 @@ declare global { * The context object has a `source` property when the property is unmodified and its value is primitive. * @throws {SyntaxError} If `text` is not valid JSON. */ - parse(text: string, reviver: (this: any, key: string, value: any, context: { source?: string }) => any): any; + parse(text: string, reviver: (this: any, key: string, value: any, context: { source?: string; }) => any): any; /** * Creates a frozen object containing JSON text for a primitive value. diff --git a/tsc/internal/bundled/libs/lib.es2026.math.d.ts b/tsc/internal/bundled/libs/lib.es2026.math.d.ts index 1a135e742a95f..adfe55abc5e4b 100644 --- a/tsc/internal/bundled/libs/lib.es2026.math.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.math.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Math { diff --git a/tsc/internal/bundled/libs/lib.es2026.typedarrays.d.ts b/tsc/internal/bundled/libs/lib.es2026.typedarrays.d.ts index 993014195c8b9..51f57e601d30f 100644 --- a/tsc/internal/bundled/libs/lib.es2026.typedarrays.d.ts +++ b/tsc/internal/bundled/libs/lib.es2026.typedarrays.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Uint8Array { /** * Converts the `Uint8Array` to a base64-encoded string. diff --git a/tsc/internal/bundled/libs/lib.es5.d.ts b/tsc/internal/bundled/libs/lib.es5.d.ts index f8ec8286e17d7..87376e31ae242 100644 --- a/tsc/internal/bundled/libs/lib.es5.d.ts +++ b/tsc/internal/bundled/libs/lib.es5.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.es6.d.ts b/tsc/internal/bundled/libs/lib.es6.d.ts index cbedf4609e48b..9f04deefda3cd 100644 --- a/tsc/internal/bundled/libs/lib.es6.d.ts +++ b/tsc/internal/bundled/libs/lib.es6.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.d.ts b/tsc/internal/bundled/libs/lib.esnext.d.ts index 978c2262f6823..aac62761d320e 100644 --- a/tsc/internal/bundled/libs/lib.esnext.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.date.d.ts b/tsc/internal/bundled/libs/lib.esnext.date.d.ts index cbdd6a47f19d0..3c19f6a1b4579 100644 --- a/tsc/internal/bundled/libs/lib.esnext.date.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.date.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface Date { diff --git a/tsc/internal/bundled/libs/lib.esnext.decorators.d.ts b/tsc/internal/bundled/libs/lib.esnext.decorators.d.ts index dad8914acafe3..f26d5e977f0c0 100644 --- a/tsc/internal/bundled/libs/lib.esnext.decorators.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.decorators.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.disposable.d.ts b/tsc/internal/bundled/libs/lib.esnext.disposable.d.ts index 62b07f8832d65..81c1b7066731d 100644 --- a/tsc/internal/bundled/libs/lib.esnext.disposable.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.disposable.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.full.d.ts b/tsc/internal/bundled/libs/lib.esnext.full.d.ts index b963c65b8b652..af69c4071ae52 100644 --- a/tsc/internal/bundled/libs/lib.esnext.full.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.full.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.intl.d.ts b/tsc/internal/bundled/libs/lib.esnext.intl.d.ts index d6c2f82c7be32..b4143f7f99074 100644 --- a/tsc/internal/bundled/libs/lib.esnext.intl.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.intl.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// declare namespace Intl { diff --git a/tsc/internal/bundled/libs/lib.esnext.modulesource.d.ts b/tsc/internal/bundled/libs/lib.esnext.modulesource.d.ts index 25327ccd92f99..08007058b909b 100644 --- a/tsc/internal/bundled/libs/lib.esnext.modulesource.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.modulesource.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// interface AbstractModuleSource { diff --git a/tsc/internal/bundled/libs/lib.esnext.promise.d.ts b/tsc/internal/bundled/libs/lib.esnext.promise.d.ts index 68331d04aa679..e59a96420bb61 100644 --- a/tsc/internal/bundled/libs/lib.esnext.promise.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.promise.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// diff --git a/tsc/internal/bundled/libs/lib.esnext.sharedmemory.d.ts b/tsc/internal/bundled/libs/lib.esnext.sharedmemory.d.ts index 2194de8c67d34..b54a4670ac5ef 100644 --- a/tsc/internal/bundled/libs/lib.esnext.sharedmemory.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.sharedmemory.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - interface Atomics { /** * Performs a finite-time microwait by signaling to the operating system or diff --git a/tsc/internal/bundled/libs/lib.esnext.temporal.d.ts b/tsc/internal/bundled/libs/lib.esnext.temporal.d.ts index 2d18011132a25..5f1293f455333 100644 --- a/tsc/internal/bundled/libs/lib.esnext.temporal.d.ts +++ b/tsc/internal/bundled/libs/lib.esnext.temporal.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - /// /// /// diff --git a/tsc/internal/bundled/libs/lib.scripthost.d.ts b/tsc/internal/bundled/libs/lib.scripthost.d.ts index 75c558b3bcd90..70696a13b5c92 100644 --- a/tsc/internal/bundled/libs/lib.scripthost.d.ts +++ b/tsc/internal/bundled/libs/lib.scripthost.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - ///////////////////////////// /// Windows Script Host APIS ///////////////////////////// diff --git a/tsc/internal/bundled/libs/lib.webworker.importscripts.d.ts b/tsc/internal/bundled/libs/lib.webworker.importscripts.d.ts index 529928af9c302..cae93c8dd2ff1 100644 --- a/tsc/internal/bundled/libs/lib.webworker.importscripts.d.ts +++ b/tsc/internal/bundled/libs/lib.webworker.importscripts.d.ts @@ -13,7 +13,6 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ - ///////////////////////////// /// WorkerGlobalScope APIs ///////////////////////////// diff --git a/tsc/internal/diagnostics/diagnosticMessages.json b/tsc/internal/diagnostics/diagnosticMessages.json index be00151a57d6a..473c828b7f68e 100644 --- a/tsc/internal/diagnostics/diagnosticMessages.json +++ b/tsc/internal/diagnostics/diagnosticMessages.json @@ -1,8919 +1,8919 @@ -{ - "Unterminated string literal.": { - "category": "Error", - "code": 1002 - }, - "Identifier expected.": { - "category": "Error", - "code": 1003 - }, - "'{0}' expected.": { - "category": "Error", - "code": 1005 - }, - "A file cannot have a reference to itself.": { - "category": "Error", - "code": 1006 - }, - "The parser expected to find a '{1}' to match the '{0}' token here.": { - "category": "Error", - "code": 1007 - }, - "Trailing comma not allowed.": { - "category": "Error", - "code": 1009 - }, - "'*/' expected.": { - "category": "Error", - "code": 1010 - }, - "An element access expression should take an argument.": { - "category": "Error", - "code": 1011 - }, - "Unexpected token.": { - "category": "Error", - "code": 1012 - }, - "A rest parameter or binding pattern may not have a trailing comma.": { - "category": "Error", - "code": 1013 - }, - "A rest parameter must be last in a parameter list.": { - "category": "Error", - "code": 1014 - }, - "Parameter cannot have question mark and initializer.": { - "category": "Error", - "code": 1015 - }, - "A required parameter cannot follow an optional parameter.": { - "category": "Error", - "code": 1016 - }, - "An index signature cannot have a rest parameter.": { - "category": "Error", - "code": 1017 - }, - "An index signature parameter cannot have an accessibility modifier.": { - "category": "Error", - "code": 1018 - }, - "An index signature parameter cannot have a question mark.": { - "category": "Error", - "code": 1019 - }, - "An index signature parameter cannot have an initializer.": { - "category": "Error", - "code": 1020 - }, - "An index signature must have a type annotation.": { - "category": "Error", - "code": 1021 - }, - "An index signature parameter must have a type annotation.": { - "category": "Error", - "code": 1022 - }, - "'readonly' modifier can only appear on a property declaration or index signature.": { - "category": "Error", - "code": 1024 - }, - "An index signature cannot have a trailing comma.": { - "category": "Error", - "code": 1025 - }, - "Accessibility modifier already seen.": { - "category": "Error", - "code": 1028 - }, - "'{0}' modifier must precede '{1}' modifier.": { - "category": "Error", - "code": 1029 - }, - "'{0}' modifier already seen.": { - "category": "Error", - "code": 1030 - }, - "'{0}' modifier cannot appear on class elements of this kind.": { - "category": "Error", - "code": 1031 - }, - "'super' must be followed by an argument list or member access.": { - "category": "Error", - "code": 1034 - }, - "Only ambient modules can use quoted names.": { - "category": "Error", - "code": 1035 - }, - "Statements are not allowed in ambient contexts.": { - "category": "Error", - "code": 1036 - }, - "A 'declare' modifier cannot be used in an already ambient context.": { - "category": "Error", - "code": 1038 - }, - "Initializers are not allowed in ambient contexts.": { - "category": "Error", - "code": 1039 - }, - "'{0}' modifier cannot be used in an ambient context.": { - "category": "Error", - "code": 1040 - }, - "'{0}' modifier cannot be used here.": { - "category": "Error", - "code": 1042 - }, - "'{0}' modifier cannot appear on a module or namespace element.": { - "category": "Error", - "code": 1044 - }, - "Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier.": { - "category": "Error", - "code": 1046 - }, - "A rest parameter cannot be optional.": { - "category": "Error", - "code": 1047 - }, - "A rest parameter cannot have an initializer.": { - "category": "Error", - "code": 1048 - }, - "A 'set' accessor must have exactly one parameter.": { - "category": "Error", - "code": 1049 - }, - "A 'set' accessor cannot have an optional parameter.": { - "category": "Error", - "code": 1051 - }, - "A 'set' accessor parameter cannot have an initializer.": { - "category": "Error", - "code": 1052 - }, - "A 'set' accessor cannot have rest parameter.": { - "category": "Error", - "code": 1053 - }, - "A 'get' accessor cannot have parameters.": { - "category": "Error", - "code": 1054 - }, - "Type '{0}' is not a valid async function return type in ES5 because it does not refer to a Promise-compatible constructor value.": { - "category": "Error", - "code": 1055 - }, - "Accessors are only available when targeting ECMAScript 5 and higher.": { - "category": "Error", - "code": 1056 - }, - "The return type of an async function must either be a valid promise or must not contain a callable 'then' member.": { - "category": "Error", - "code": 1058 - }, - "A promise must have a 'then' method.": { - "category": "Error", - "code": 1059 - }, - "The first parameter of the 'then' method of a promise must be a callback.": { - "category": "Error", - "code": 1060 - }, - "Enum member must have initializer.": { - "category": "Error", - "code": 1061 - }, - "Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method.": { - "category": "Error", - "code": 1062 - }, - "An export assignment cannot be used in a namespace.": { - "category": "Error", - "code": 1063 - }, - "The return type of an async function or method must be the global Promise type. Did you mean to write 'Promise<{0}>'?": { - "category": "Error", - "code": 1064 - }, - "The return type of an async function or method must be the global Promise type.": { - "category": "Error", - "code": 1065 - }, - "In ambient enum declarations member initializer must be constant expression.": { - "category": "Error", - "code": 1066 - }, - "Unexpected token. A constructor, method, accessor, or property was expected.": { - "category": "Error", - "code": 1068 - }, - "Unexpected token. A type parameter name was expected without curly braces.": { - "category": "Error", - "code": 1069 - }, - "'{0}' modifier cannot appear on a type member.": { - "category": "Error", - "code": 1070 - }, - "'{0}' modifier cannot appear on an index signature.": { - "category": "Error", - "code": 1071 - }, - "A '{0}' modifier cannot be used with an import declaration.": { - "category": "Error", - "code": 1079 - }, - "Invalid 'reference' directive syntax.": { - "category": "Error", - "code": 1084 - }, - "'{0}' modifier cannot appear on a constructor declaration.": { - "category": "Error", - "code": 1089 - }, - "'{0}' modifier cannot appear on a parameter.": { - "category": "Error", - "code": 1090 - }, - "Only a single variable declaration is allowed in a 'for...in' statement.": { - "category": "Error", - "code": 1091 - }, - "Type parameters cannot appear on a constructor declaration.": { - "category": "Error", - "code": 1092 - }, - "Type annotation cannot appear on a constructor declaration.": { - "category": "Error", - "code": 1093 - }, - "An accessor cannot have type parameters.": { - "category": "Error", - "code": 1094 - }, - "A 'set' accessor cannot have a return type annotation.": { - "category": "Error", - "code": 1095 - }, - "An index signature must have exactly one parameter.": { - "category": "Error", - "code": 1096 - }, - "'{0}' list cannot be empty.": { - "category": "Error", - "code": 1097 - }, - "Type parameter list cannot be empty.": { - "category": "Error", - "code": 1098 - }, - "Type argument list cannot be empty.": { - "category": "Error", - "code": 1099 - }, - "Invalid use of '{0}' in strict mode.": { - "category": "Error", - "code": 1100 - }, - "'with' statements are not allowed in strict mode.": { - "category": "Error", - "code": 1101 - }, - "'delete' cannot be called on an identifier in strict mode.": { - "category": "Error", - "code": 1102 - }, - "'for await' loops are only allowed within async functions and at the top levels of modules.": { - "category": "Error", - "code": 1103 - }, - "A 'continue' statement can only be used within an enclosing iteration statement.": { - "category": "Error", - "code": 1104 - }, - "A 'break' statement can only be used within an enclosing iteration or switch statement.": { - "category": "Error", - "code": 1105 - }, - "The left-hand side of a 'for...of' statement may not be 'async'.": { - "category": "Error", - "code": 1106 - }, - "Jump target cannot cross function boundary.": { - "category": "Error", - "code": 1107 - }, - "A 'return' statement can only be used within a function body.": { - "category": "Error", - "code": 1108 - }, - "Expression expected.": { - "category": "Error", - "code": 1109 - }, - "Type expected.": { - "category": "Error", - "code": 1110 - }, - "Private field '{0}' must be declared in an enclosing class.": { - "category": "Error", - "code": 1111 - }, - "A 'default' clause cannot appear more than once in a 'switch' statement.": { - "category": "Error", - "code": 1113 - }, - "Duplicate label '{0}'.": { - "category": "Error", - "code": 1114 - }, - "A 'continue' statement can only jump to a label of an enclosing iteration statement.": { - "category": "Error", - "code": 1115 - }, - "A 'break' statement can only jump to a label of an enclosing statement.": { - "category": "Error", - "code": 1116 - }, - "An object literal cannot have multiple properties with the same name.": { - "category": "Error", - "code": 1117 - }, - "An object literal cannot have multiple get/set accessors with the same name.": { - "category": "Error", - "code": 1118 - }, - "An object literal cannot have property and accessor with the same name.": { - "category": "Error", - "code": 1119 - }, - "An export assignment cannot have modifiers.": { - "category": "Error", - "code": 1120 - }, - "Octal literals are not allowed. Use the syntax '{0}'.": { - "category": "Error", - "code": 1121 - }, - "Variable declaration list cannot be empty.": { - "category": "Error", - "code": 1123 - }, - "Digit expected.": { - "category": "Error", - "code": 1124 - }, - "Hexadecimal digit expected.": { - "category": "Error", - "code": 1125 - }, - "Unexpected end of text.": { - "category": "Error", - "code": 1126 - }, - "Invalid character.": { - "category": "Error", - "code": 1127 - }, - "Declaration or statement expected.": { - "category": "Error", - "code": 1128 - }, - "Statement expected.": { - "category": "Error", - "code": 1129 - }, - "'case' or 'default' expected.": { - "category": "Error", - "code": 1130 - }, - "Property or signature expected.": { - "category": "Error", - "code": 1131 - }, - "Enum member expected.": { - "category": "Error", - "code": 1132 - }, - "Variable declaration expected.": { - "category": "Error", - "code": 1134 - }, - "Argument expression expected.": { - "category": "Error", - "code": 1135 - }, - "Property assignment expected.": { - "category": "Error", - "code": 1136 - }, - "Expression or comma expected.": { - "category": "Error", - "code": 1137 - }, - "Parameter declaration expected.": { - "category": "Error", - "code": 1138 - }, - "Type parameter declaration expected.": { - "category": "Error", - "code": 1139 - }, - "Type argument expected.": { - "category": "Error", - "code": 1140 - }, - "String literal expected.": { - "category": "Error", - "code": 1141 - }, - "Line break not permitted here.": { - "category": "Error", - "code": 1142 - }, - "'{' or ';' expected.": { - "category": "Error", - "code": 1144 - }, - "'{' or JSX element expected.": { - "category": "Error", - "code": 1145 - }, - "Declaration expected.": { - "category": "Error", - "code": 1146 - }, - "Import declarations in a namespace cannot reference a module.": { - "category": "Error", - "code": 1147 - }, - "Cannot use imports, exports, or module augmentations when '--module' is 'none'.": { - "category": "Error", - "code": 1148 - }, - "File name '{0}' differs from already included file name '{1}' only in casing.": { - "category": "Error", - "code": 1149 - }, - "'{0}' declarations must be initialized.": { - "category": "Error", - "code": 1155 - }, - "'{0}' declarations can only be declared inside a block.": { - "category": "Error", - "code": 1156 - }, - "Unterminated template literal.": { - "category": "Error", - "code": 1160 - }, - "Unterminated regular expression literal.": { - "category": "Error", - "code": 1161 - }, - "An object member cannot be declared optional.": { - "category": "Error", - "code": 1162 - }, - "A 'yield' expression is only allowed in a generator body.": { - "category": "Error", - "code": 1163 - }, - "Computed property names are not allowed in enums.": { - "category": "Error", - "code": 1164 - }, - "A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type.": { - "category": "Error", - "code": 1165 - }, - "A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type.": { - "category": "Error", - "code": 1166 - }, - "A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type.": { - "category": "Error", - "code": 1168 - }, - "A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.": { - "category": "Error", - "code": 1169 - }, - "A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type.": { - "category": "Error", - "code": 1170 - }, - "A comma expression is not allowed in a computed property name.": { - "category": "Error", - "code": 1171 - }, - "'extends' clause already seen.": { - "category": "Error", - "code": 1172 - }, - "'extends' clause must precede 'implements' clause.": { - "category": "Error", - "code": 1173 - }, - "Classes can only extend a single class.": { - "category": "Error", - "code": 1174 - }, - "'implements' clause already seen.": { - "category": "Error", - "code": 1175 - }, - "Interface declaration cannot have 'implements' clause.": { - "category": "Error", - "code": 1176 - }, - "Binary digit expected.": { - "category": "Error", - "code": 1177 - }, - "Octal digit expected.": { - "category": "Error", - "code": 1178 - }, - "Unexpected token. '{' expected.": { - "category": "Error", - "code": 1179 - }, - "Property destructuring pattern expected.": { - "category": "Error", - "code": 1180 - }, - "Array element destructuring pattern expected.": { - "category": "Error", - "code": 1181 - }, - "A destructuring declaration must have an initializer.": { - "category": "Error", - "code": 1182 - }, - "An implementation cannot be declared in ambient contexts.": { - "category": "Error", - "code": 1183 - }, - "Modifiers cannot appear here.": { - "category": "Error", - "code": 1184 - }, - "Merge conflict marker encountered.": { - "category": "Error", - "code": 1185 - }, - "A rest element cannot have an initializer.": { - "category": "Error", - "code": 1186 - }, - "A parameter property may not be declared using a binding pattern.": { - "category": "Error", - "code": 1187 - }, - "Only a single variable declaration is allowed in a 'for...of' statement.": { - "category": "Error", - "code": 1188 - }, - "The variable declaration of a 'for...in' statement cannot have an initializer.": { - "category": "Error", - "code": 1189 - }, - "The variable declaration of a 'for...of' statement cannot have an initializer.": { - "category": "Error", - "code": 1190 - }, - "An import declaration cannot have modifiers.": { - "category": "Error", - "code": 1191 - }, - "Module '{0}' has no default export.": { - "category": "Error", - "code": 1192 - }, - "An export declaration cannot have modifiers.": { - "category": "Error", - "code": 1193 - }, - "Export declarations are not permitted in a namespace.": { - "category": "Error", - "code": 1194 - }, - "'export *' does not re-export a default.": { - "category": "Error", - "code": 1195 - }, - "Catch clause variable type annotation must be 'any' or 'unknown' if specified.": { - "category": "Error", - "code": 1196 - }, - "Catch clause variable cannot have an initializer.": { - "category": "Error", - "code": 1197 - }, - "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.": { - "category": "Error", - "code": 1198 - }, - "Unterminated Unicode escape sequence.": { - "category": "Error", - "code": 1199 - }, - "Line terminator not permitted before arrow.": { - "category": "Error", - "code": 1200 - }, - "Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead.": { - "category": "Error", - "code": 1202 - }, - "Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead.": { - "category": "Error", - "code": 1203 - }, - "Re-exporting a type when '{0}' is enabled requires using 'export type'.": { - "category": "Error", - "code": 1205 - }, - "Decorators are not valid here.": { - "category": "Error", - "code": 1206 - }, - "Decorators cannot be applied to multiple get/set accessors of the same name.": { - "category": "Error", - "code": 1207 - }, - "Invalid optional chain from new expression. Did you mean to call '{0}()'?": { - "category": "Error", - "code": 1209 - }, - "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.": { - "category": "Error", - "code": 1210 - }, - "A class declaration without the 'default' modifier must have a name.": { - "category": "Error", - "code": 1211 - }, - "Identifier expected. '{0}' is a reserved word in strict mode.": { - "category": "Error", - "code": 1212 - }, - "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode.": { - "category": "Error", - "code": 1213 - }, - "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode.": { - "category": "Error", - "code": 1214 - }, - "Invalid use of '{0}'. Modules are automatically in strict mode.": { - "category": "Error", - "code": 1215 - }, - "Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules.": { - "category": "Error", - "code": 1216 - }, - "Export assignment is not supported when '--module' flag is 'system'.": { - "category": "Error", - "code": 1218 - }, - "Generators are not allowed in an ambient context.": { - "category": "Error", - "code": 1221 - }, - "An overload signature cannot be declared as a generator.": { - "category": "Error", - "code": 1222 - }, - "'{0}' tag already specified.": { - "category": "Error", - "code": 1223 - }, - "Signature '{0}' must be a type predicate.": { - "category": "Error", - "code": 1224 - }, - "Cannot find parameter '{0}'.": { - "category": "Error", - "code": 1225 - }, - "Type predicate '{0}' is not assignable to '{1}'.": { - "category": "Error", - "code": 1226 - }, - "Parameter '{0}' is not in the same position as parameter '{1}'.": { - "category": "Error", - "code": 1227 - }, - "A type predicate is only allowed in return type position for functions and methods.": { - "category": "Error", - "code": 1228 - }, - "A type predicate cannot reference a rest parameter.": { - "category": "Error", - "code": 1229 - }, - "A type predicate cannot reference element '{0}' in a binding pattern.": { - "category": "Error", - "code": 1230 - }, - "An export assignment must be at the top level of a file or module declaration.": { - "category": "Error", - "code": 1231 - }, - "An import declaration can only be used at the top level of a namespace or module.": { - "category": "Error", - "code": 1232 - }, - "An export declaration can only be used at the top level of a namespace or module.": { - "category": "Error", - "code": 1233 - }, - "An ambient module declaration is only allowed at the top level in a file.": { - "category": "Error", - "code": 1234 - }, - "A namespace declaration is only allowed at the top level of a namespace or module.": { - "category": "Error", - "code": 1235 - }, - "The return type of a property decorator function must be either 'void' or 'any'.": { - "category": "Error", - "code": 1236 - }, - "The return type of a parameter decorator function must be either 'void' or 'any'.": { - "category": "Error", - "code": 1237 - }, - "Unable to resolve signature of class decorator when called as an expression.": { - "category": "Error", - "code": 1238 - }, - "Unable to resolve signature of parameter decorator when called as an expression.": { - "category": "Error", - "code": 1239 - }, - "Unable to resolve signature of property decorator when called as an expression.": { - "category": "Error", - "code": 1240 - }, - "Unable to resolve signature of method decorator when called as an expression.": { - "category": "Error", - "code": 1241 - }, - "'abstract' modifier can only appear on a class, method, or property declaration.": { - "category": "Error", - "code": 1242 - }, - "'{0}' modifier cannot be used with '{1}' modifier.": { - "category": "Error", - "code": 1243 - }, - "Abstract methods can only appear within an abstract class.": { - "category": "Error", - "code": 1244 - }, - "Method '{0}' cannot have an implementation because it is marked abstract.": { - "category": "Error", - "code": 1245 - }, - "An interface property cannot have an initializer.": { - "category": "Error", - "code": 1246 - }, - "A type literal property cannot have an initializer.": { - "category": "Error", - "code": 1247 - }, - "A class member cannot have the '{0}' keyword.": { - "category": "Error", - "code": 1248 - }, - "A decorator can only decorate a method implementation, not an overload.": { - "category": "Error", - "code": 1249 - }, - "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'.": { - "category": "Error", - "code": 1250 - }, - "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Class definitions are automatically in strict mode.": { - "category": "Error", - "code": 1251 - }, - "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Modules are automatically in strict mode.": { - "category": "Error", - "code": 1252 - }, - "Abstract properties can only appear within an abstract class.": { - "category": "Error", - "code": 1253 - }, - "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.": { - "category": "Error", - "code": 1254 - }, - "A definite assignment assertion '!' is not permitted in this context.": { - "category": "Error", - "code": 1255 - }, - "A required element cannot follow an optional element.": { - "category": "Error", - "code": 1257 - }, - "A default export must be at the top level of a file or module declaration.": { - "category": "Error", - "code": 1258 - }, - "Module '{0}' can only be default-imported using the '{1}' flag": { - "category": "Error", - "code": 1259 - }, - "Keywords cannot contain escape characters.": { - "category": "Error", - "code": 1260 - }, - "Already included file name '{0}' differs from file name '{1}' only in casing.": { - "category": "Error", - "code": 1261 - }, - "Identifier expected. '{0}' is a reserved word at the top-level of a module.": { - "category": "Error", - "code": 1262 - }, - "Declarations with initializers cannot also have definite assignment assertions.": { - "category": "Error", - "code": 1263 - }, - "Declarations with definite assignment assertions must also have type annotations.": { - "category": "Error", - "code": 1264 - }, - "A rest element cannot follow another rest element.": { - "category": "Error", - "code": 1265 - }, - "An optional element cannot follow a rest element.": { - "category": "Error", - "code": 1266 - }, - "Property '{0}' cannot have an initializer because it is marked abstract.": { - "category": "Error", - "code": 1267 - }, - "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type.": { - "category": "Error", - "code": 1268 - }, - "Cannot use 'export import' on a type or type-only namespace when '{0}' is enabled.": { - "category": "Error", - "code": 1269 - }, - "Decorator function return type '{0}' is not assignable to type '{1}'.": { - "category": "Error", - "code": 1270 - }, - "Decorator function return type is '{0}' but is expected to be 'void' or 'any'.": { - "category": "Error", - "code": 1271 - }, - "A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled.": { - "category": "Error", - "code": 1272 - }, - "'{0}' modifier cannot appear on a type parameter": { - "category": "Error", - "code": 1273 - }, - "'{0}' modifier can only appear on a type parameter of a class, interface or type alias": { - "category": "Error", - "code": 1274 - }, - "'accessor' modifier can only appear on a property declaration.": { - "category": "Error", - "code": 1275 - }, - "An 'accessor' property cannot be declared optional.": { - "category": "Error", - "code": 1276 - }, - "'{0}' modifier can only appear on a type parameter of a function, method or class": { - "category": "Error", - "code": 1277 - }, - "The runtime will invoke the decorator with {1} arguments, but the decorator expects {0}.": { - "category": "Error", - "code": 1278 - }, - "The runtime will invoke the decorator with {1} arguments, but the decorator expects at least {0}.": { - "category": "Error", - "code": 1279 - }, - "Namespaces are not allowed in global script files when '{0}' is enabled. If this file is not intended to be a global script, set 'moduleDetection' to 'force' or add an empty 'export {}' statement.": { - "category": "Error", - "code": 1280 - }, - "Cannot access '{0}' from another file without qualification when '{1}' is enabled. Use '{2}' instead.": { - "category": "Error", - "code": 1281 - }, - "An 'export =' declaration must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.": { - "category": "Error", - "code": 1282 - }, - "An 'export =' declaration must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.": { - "category": "Error", - "code": 1283 - }, - "An 'export default' must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.": { - "category": "Error", - "code": 1284 - }, - "An 'export default' must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.": { - "category": "Error", - "code": 1285 - }, - "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'.": { - "category": "Error", - "code": 1286 - }, - "A top-level 'export' modifier cannot be used on value declarations in a CommonJS module when 'verbatimModuleSyntax' is enabled.": { - "category": "Error", - "code": 1287 - }, - "An import alias cannot resolve to a type or type-only declaration when 'verbatimModuleSyntax' is enabled.": { - "category": "Error", - "code": 1288 - }, - "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported.": { - "category": "Error", - "code": 1289 - }, - "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'.": { - "category": "Error", - "code": 1290 - }, - "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported.": { - "category": "Error", - "code": 1291 - }, - "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'.": { - "category": "Error", - "code": 1292 - }, - "ECMAScript module syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'.": { - "category": "Error", - "code": 1293 - }, - "This syntax is not allowed when 'erasableSyntaxOnly' is enabled.": { - "category": "Error", - "code": 1294 - }, - "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'. Adjust the 'type' field in the nearest 'package.json' to make this file an ECMAScript module, or adjust your 'verbatimModuleSyntax', 'module', and 'moduleResolution' settings in TypeScript.": { - "category": "Error", - "code": 1295 - }, - "'with' statements are not allowed in an async function block.": { - "category": "Error", - "code": 1300 - }, - "'await' expressions are only allowed within async functions and at the top levels of modules.": { - "category": "Error", - "code": 1308 - }, - "The current file is a CommonJS module and cannot use 'await' at the top level.": { - "category": "Error", - "code": 1309 - }, - "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern.": { - "category": "Error", - "code": 1312 - }, - "The body of an 'if' statement cannot be the empty statement.": { - "category": "Error", - "code": 1313 - }, - "Global module exports may only appear in module files.": { - "category": "Error", - "code": 1314 - }, - "Global module exports may only appear in declaration files.": { - "category": "Error", - "code": 1315 - }, - "Global module exports may only appear at top level.": { - "category": "Error", - "code": 1316 - }, - "A parameter property cannot be declared using a rest parameter.": { - "category": "Error", - "code": 1317 - }, - "An abstract accessor cannot have an implementation.": { - "category": "Error", - "code": 1318 - }, - "A default export can only be used in an ECMAScript-style module.": { - "category": "Error", - "code": 1319 - }, - "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.": { - "category": "Error", - "code": 1320 - }, - "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member.": { - "category": "Error", - "code": 1321 - }, - "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member.": { - "category": "Error", - "code": 1322 - }, - "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20', or 'nodenext'.": { - "category": "Error", - "code": 1323 - }, - "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'node20', 'nodenext', or 'preserve'.": { - "category": "Error", - "code": 1324 - }, - "Argument of dynamic import cannot be spread element.": { - "category": "Error", - "code": 1325 - }, - "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments.": { - "category": "Error", - "code": 1326 - }, - "String literal with double quotes expected.": { - "category": "Error", - "code": 1327 - }, - "Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.": { - "category": "Error", - "code": 1328 - }, - "'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?": { - "category": "Error", - "code": 1329 - }, - "A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'.": { - "category": "Error", - "code": 1330 - }, - "A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'.": { - "category": "Error", - "code": 1331 - }, - "A variable whose type is a 'unique symbol' type must be 'const'.": { - "category": "Error", - "code": 1332 - }, - "'unique symbol' types may not be used on a variable declaration with a binding name.": { - "category": "Error", - "code": 1333 - }, - "'unique symbol' types are only allowed on variables in a variable statement.": { - "category": "Error", - "code": 1334 - }, - "'unique symbol' types are not allowed here.": { - "category": "Error", - "code": 1335 - }, - "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.": { - "category": "Error", - "code": 1337 - }, - "'infer' declarations are only permitted in the 'extends' clause of a conditional type.": { - "category": "Error", - "code": 1338 - }, - "Module '{0}' does not refer to a value, but is used as a value here.": { - "category": "Error", - "code": 1339 - }, - "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?": { - "category": "Error", - "code": 1340 - }, - "Class constructor may not be an accessor.": { - "category": "Error", - "code": 1341 - }, - "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', or 'nodenext'.": { - "category": "Error", - "code": 1343 - }, - "A label is not allowed here.": { - "category": "Error", - "code": 1344 - }, - "An expression of type 'void' cannot be tested for truthiness.": { - "category": "Error", - "code": 1345 - }, - "This parameter is not allowed with 'use strict' directive.": { - "category": "Error", - "code": 1346 - }, - "'use strict' directive cannot be used with non-simple parameter list.": { - "category": "Error", - "code": 1347 - }, - "Non-simple parameter declared here.": { - "category": "Error", - "code": 1348 - }, - "'use strict' directive used here.": { - "category": "Error", - "code": 1349 - }, - "Print the final configuration instead of building.": { - "category": "Message", - "code": 1350 - }, - "An identifier or keyword cannot immediately follow a numeric literal.": { - "category": "Error", - "code": 1351 - }, - "A bigint literal cannot use exponential notation.": { - "category": "Error", - "code": 1352 - }, - "A bigint literal must be an integer.": { - "category": "Error", - "code": 1353 - }, - "'readonly' type modifier is only permitted on array and tuple literal types.": { - "category": "Error", - "code": 1354 - }, - "A 'const' assertion can only be applied to references to enum members, or string, number, boolean, array, or object literals.": { - "category": "Error", - "code": 1355 - }, - "Did you mean to mark this function as 'async'?": { - "category": "Error", - "code": 1356 - }, - "An enum member name must be followed by a ',', '=', or '}'.": { - "category": "Error", - "code": 1357 - }, - "Tagged template expressions are not permitted in an optional chain.": { - "category": "Error", - "code": 1358 - }, - "Identifier expected. '{0}' is a reserved word that cannot be used here.": { - "category": "Error", - "code": 1359 - }, - "Type '{0}' does not satisfy the expected type '{1}'.": { - "category": "Error", - "code": 1360 - }, - "'{0}' cannot be used as a value because it was imported using 'import type'.": { - "category": "Error", - "code": 1361 - }, - "'{0}' cannot be used as a value because it was exported using 'export type'.": { - "category": "Error", - "code": 1362 - }, - "A type-only import can specify a default import or named bindings, but not both.": { - "category": "Error", - "code": 1363 - }, - "Convert to type-only export": { - "category": "Message", - "code": 1364 - }, - "Convert all re-exported types to type-only exports": { - "category": "Message", - "code": 1365 - }, - "Split into two separate import declarations": { - "category": "Message", - "code": 1366 - }, - "Split all invalid type-only imports": { - "category": "Message", - "code": 1367 - }, - "Class constructor may not be a generator.": { - "category": "Error", - "code": 1368 - }, - "Did you mean '{0}'?": { - "category": "Message", - "code": 1369 - }, - "'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { - "category": "Error", - "code": 1375 - }, - "'{0}' was imported here.": { - "category": "Message", - "code": 1376 - }, - "'{0}' was exported here.": { - "category": "Message", - "code": 1377 - }, - "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { - "category": "Error", - "code": 1378 - }, - "An import alias cannot reference a declaration that was exported using 'export type'.": { - "category": "Error", - "code": 1379 - }, - "An import alias cannot reference a declaration that was imported using 'import type'.": { - "category": "Error", - "code": 1380 - }, - "Unexpected token. Did you mean `{'}'}` or `}`?": { - "category": "Error", - "code": 1381 - }, - "Unexpected token. Did you mean `{'>'}` or `>`?": { - "category": "Error", - "code": 1382 - }, - "Function type notation must be parenthesized when used in a union type.": { - "category": "Error", - "code": 1385 - }, - "Constructor type notation must be parenthesized when used in a union type.": { - "category": "Error", - "code": 1386 - }, - "Function type notation must be parenthesized when used in an intersection type.": { - "category": "Error", - "code": 1387 - }, - "Constructor type notation must be parenthesized when used in an intersection type.": { - "category": "Error", - "code": 1388 - }, - "'{0}' is not allowed as a variable declaration name.": { - "category": "Error", - "code": 1389 - }, - "'{0}' is not allowed as a parameter name.": { - "category": "Error", - "code": 1390 - }, - "An import alias cannot use 'import type'": { - "category": "Error", - "code": 1392 - }, - "Imported via {0} from file '{1}'": { - "category": "Message", - "code": 1393 - }, - "Imported via {0} from file '{1}' with packageId '{2}'": { - "category": "Message", - "code": 1394 - }, - "Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions": { - "category": "Message", - "code": 1395 - }, - "Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions": { - "category": "Message", - "code": 1396 - }, - "Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions": { - "category": "Message", - "code": 1397 - }, - "Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions": { - "category": "Message", - "code": 1398 - }, - "File is included via import here.": { - "category": "Message", - "code": 1399 - }, - "Referenced via '{0}' from file '{1}'": { - "category": "Message", - "code": 1400 - }, - "File is included via reference here.": { - "category": "Message", - "code": 1401 - }, - "Type library referenced via '{0}' from file '{1}'": { - "category": "Message", - "code": 1402 - }, - "Type library referenced via '{0}' from file '{1}' with packageId '{2}'": { - "category": "Message", - "code": 1403 - }, - "File is included via type library reference here.": { - "category": "Message", - "code": 1404 - }, - "Library referenced via '{0}' from file '{1}'": { - "category": "Message", - "code": 1405 - }, - "File is included via library reference here.": { - "category": "Message", - "code": 1406 - }, - "Matched by include pattern '{0}' in '{1}'": { - "category": "Message", - "code": 1407 - }, - "File is matched by include pattern specified here.": { - "category": "Message", - "code": 1408 - }, - "Part of 'files' list in tsconfig.json": { - "category": "Message", - "code": 1409 - }, - "File is matched by 'files' list specified here.": { - "category": "Message", - "code": 1410 - }, - "Output from referenced project '{0}' included because '{1}' specified": { - "category": "Message", - "code": 1411 - }, - "Output from referenced project '{0}' included because '--module' is specified as 'none'": { - "category": "Message", - "code": 1412 - }, - "File is output from referenced project specified here.": { - "category": "Message", - "code": 1413 - }, - "Source from referenced project '{0}' included because '{1}' specified": { - "category": "Message", - "code": 1414 - }, - "Source from referenced project '{0}' included because '--module' is specified as 'none'": { - "category": "Message", - "code": 1415 - }, - "File is source from referenced project specified here.": { - "category": "Message", - "code": 1416 - }, - "Entry point of type library '{0}' specified in compilerOptions": { - "category": "Message", - "code": 1417 - }, - "Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'": { - "category": "Message", - "code": 1418 - }, - "File is entry point of type library specified here.": { - "category": "Message", - "code": 1419 - }, - "Entry point for implicit type library '{0}'": { - "category": "Message", - "code": 1420 - }, - "Entry point for implicit type library '{0}' with packageId '{1}'": { - "category": "Message", - "code": 1421 - }, - "Library '{0}' specified in compilerOptions": { - "category": "Message", - "code": 1422 - }, - "File is library specified here.": { - "category": "Message", - "code": 1423 - }, - "Default library": { - "category": "Message", - "code": 1424 - }, - "Default library for target '{0}'": { - "category": "Message", - "code": 1425 - }, - "File is default library for target specified here.": { - "category": "Message", - "code": 1426 - }, - "Root file specified for compilation": { - "category": "Message", - "code": 1427 - }, - "File is output of project reference source '{0}'": { - "category": "Message", - "code": 1428 - }, - "File redirects to file '{0}'": { - "category": "Message", - "code": 1429 - }, - "The file is in the program because:": { - "category": "Message", - "code": 1430 - }, - "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { - "category": "Error", - "code": 1431 - }, - "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { - "category": "Error", - "code": 1432 - }, - "Neither decorators nor modifiers may be applied to 'this' parameters.": { - "category": "Error", - "code": 1433 - }, - "Unexpected keyword or identifier.": { - "category": "Error", - "code": 1434 - }, - "Unknown keyword or identifier. Did you mean '{0}'?": { - "category": "Error", - "code": 1435 - }, - "Decorators must precede the name and all keywords of property declarations.": { - "category": "Error", - "code": 1436 - }, - "Namespace must be given a name.": { - "category": "Error", - "code": 1437 - }, - "Interface must be given a name.": { - "category": "Error", - "code": 1438 - }, - "Type alias must be given a name.": { - "category": "Error", - "code": 1439 - }, - "Variable declaration not allowed at this location.": { - "category": "Error", - "code": 1440 - }, - "Cannot start a function call in a type annotation.": { - "category": "Error", - "code": 1441 - }, - "Expected '=' for property initializer.": { - "category": "Error", - "code": 1442 - }, - "Module declaration names may only use ' or \" quoted strings.": { - "category": "Error", - "code": 1443 - }, - "'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when '{1}' is enabled.": { - "category": "Error", - "code": 1448 - }, - "Preserve unused imported values in the JavaScript output that would otherwise be removed.": { - "category": "Message", - "code": 1449 - }, - "Dynamic imports can only accept a module specifier and an optional set of attributes as arguments": { - "category": "Message", - "code": 1450 - }, - "Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression": { - "category": "Error", - "code": 1451 - }, - "`resolution-mode` should be either `require` or `import`.": { - "category": "Error", - "code": 1453 - }, - "`resolution-mode` can only be set for type-only imports.": { - "category": "Error", - "code": 1454 - }, - "`resolution-mode` is the only valid key for type import assertions.": { - "category": "Error", - "code": 1455 - }, - "Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`.": { - "category": "Error", - "code": 1456 - }, - "Matched by default include pattern '**/*'": { - "category": "Message", - "code": 1457 - }, - "File is ECMAScript module because '{0}' has field \"type\" with value \"module\"": { - "category": "Message", - "code": 1458 - }, - "File is CommonJS module because '{0}' has field \"type\" whose value is not \"module\"": { - "category": "Message", - "code": 1459 - }, - "File is CommonJS module because '{0}' does not have field \"type\"": { - "category": "Message", - "code": 1460 - }, - "File is CommonJS module because 'package.json' was not found": { - "category": "Message", - "code": 1461 - }, - - "The 'import.meta' meta-property is not allowed in files which will build into CommonJS output.": { - "category": "Error", - "code": 1470 - }, - "Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead.": { - "category": "Error", - "code": 1471 - }, - "'catch' or 'finally' expected.": { - "category": "Error", - "code": 1472 - }, - "An import declaration can only be used at the top level of a module.": { - "category": "Error", - "code": 1473 - }, - "An export declaration can only be used at the top level of a module.": { - "category": "Error", - "code": 1474 - }, - "Control what method is used to detect module-format JS files.": { - "category": "Message", - "code": 1475 - }, - "\"auto\": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.": { - "category": "Message", - "code": 1476 - }, - "An instantiation expression cannot be followed by a property access.": { - "category": "Error", - "code": 1477 - }, - "Identifier or string literal expected.": { - "category": "Error", - "code": 1478 - }, - "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"{0}\")' call instead.": { - "category": "Error", - "code": 1479 - }, - "To convert this file to an ECMAScript module, change its file extension to '{0}' or create a local package.json file with `{ \"type\": \"module\" }`.": { - "category": "Message", - "code": 1480 - }, - "To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field `\"type\": \"module\"` to '{1}'.": { - "category": "Message", - "code": 1481 - }, - "To convert this file to an ECMAScript module, add the field `\"type\": \"module\"` to '{0}'.": { - "category": "Message", - "code": 1482 - }, - "To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`.": { - "category": "Message", - "code": 1483 - }, - "'{0}' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.": { - "category": "Error", - "code": 1484 - }, - "'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.": { - "category": "Error", - "code": 1485 - }, - "Decorator used before 'export' here.": { - "category": "Error", - "code": 1486 - }, - "Octal escape sequences are not allowed. Use the syntax '{0}'.": { - "category": "Error", - "code": 1487 - }, - "Escape sequence '{0}' is not allowed.": { - "category": "Error", - "code": 1488 - }, - "Decimals with leading zeros are not allowed.": { - "category": "Error", - "code": 1489 - }, - "File appears to be binary.": { - "category": "Error", - "code": 1490 - }, - "'{0}' modifier cannot appear on a 'using' declaration.": { - "category": "Error", - "code": 1491 - }, - "'{0}' declarations may not have binding patterns.": { - "category": "Error", - "code": 1492 - }, - "The left-hand side of a 'for...in' statement cannot be a 'using' declaration.": { - "category": "Error", - "code": 1493 - }, - "The left-hand side of a 'for...in' statement cannot be an 'await using' declaration.": { - "category": "Error", - "code": 1494 - }, - "'{0}' modifier cannot appear on an 'await using' declaration.": { - "category": "Error", - "code": 1495 - }, - "Identifier, string literal, or number literal expected.": { - "category": "Error", - "code": 1496 - }, - "Expression must be enclosed in parentheses to be used as a decorator.": { - "category": "Error", - "code": 1497 - }, - "Invalid syntax in decorator.": { - "category": "Error", - "code": 1498 - }, - "Unknown regular expression flag.": { - "category": "Error", - "code": 1499 - }, - "Duplicate regular expression flag.": { - "category": "Error", - "code": 1500 - }, - "This regular expression flag is only available when targeting '{0}' or later.": { - "category": "Error", - "code": 1501 - }, - "The Unicode (u) flag and the Unicode Sets (v) flag cannot be set simultaneously.": { - "category": "Error", - "code": 1502 - }, - "Named capturing groups are only available when targeting 'ES2018' or later.": { - "category": "Error", - "code": 1503 - }, - "Subpattern flags must be present when there is a minus sign.": { - "category": "Error", - "code": 1504 - }, - "Incomplete quantifier. Digit expected.": { - "category": "Error", - "code": 1505 - }, - "Numbers out of order in quantifier.": { - "category": "Error", - "code": 1506 - }, - "There is nothing available for repetition.": { - "category": "Error", - "code": 1507 - }, - "Unexpected '{0}'. Did you mean to escape it with backslash?": { - "category": "Error", - "code": 1508 - }, - "This regular expression flag cannot be toggled within a subpattern.": { - "category": "Error", - "code": 1509 - }, - "'\\k' must be followed by a capturing group name enclosed in angle brackets.": { - "category": "Error", - "code": 1510 - }, - "'\\q' is only available inside character class.": { - "category": "Error", - "code": 1511 - }, - "'\\c' must be followed by an ASCII letter.": { - "category": "Error", - "code": 1512 - }, - "Undetermined character escape.": { - "category": "Error", - "code": 1513 - }, - "Expected a capturing group name.": { - "category": "Error", - "code": 1514 - }, - "Named capturing groups with the same name must be mutually exclusive to each other.": { - "category": "Error", - "code": 1515 - }, - "A character class range must not be bounded by another character class.": { - "category": "Error", - "code": 1516 - }, - "Range out of order in character class.": { - "category": "Error", - "code": 1517 - }, - "Anything that would possibly match more than a single character is invalid inside a negated character class.": { - "category": "Error", - "code": 1518 - }, - "Operators must not be mixed within a character class. Wrap it in a nested class instead.": { - "category": "Error", - "code": 1519 - }, - "Expected a class set operand.": { - "category": "Error", - "code": 1520 - }, - "'\\q' must be followed by string alternatives enclosed in braces.": { - "category": "Error", - "code": 1521 - }, - "A character class must not contain a reserved double punctuator. Did you mean to escape it with backslash?": { - "category": "Error", - "code": 1522 - }, - "Expected a Unicode property name.": { - "category": "Error", - "code": 1523 - }, - "Unknown Unicode property name.": { - "category": "Error", - "code": 1524 - }, - "Expected a Unicode property value.": { - "category": "Error", - "code": 1525 - }, - "Unknown Unicode property value.": { - "category": "Error", - "code": 1526 - }, - "Expected a Unicode property name or value.": { - "category": "Error", - "code": 1527 - }, - "Any Unicode property that would possibly match more than a single character is only available when the Unicode Sets (v) flag is set.": { - "category": "Error", - "code": 1528 - }, - "Unknown Unicode property name or value.": { - "category": "Error", - "code": 1529 - }, - "Unicode property value expressions are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set.": { - "category": "Error", - "code": 1530 - }, - "'\\{0}' must be followed by a Unicode property value expression enclosed in braces.": { - "category": "Error", - "code": 1531 - }, - "There is no capturing group named '{0}' in this regular expression.": { - "category": "Error", - "code": 1532 - }, - "This backreference refers to a group that does not exist. There are only {0} capturing groups in this regular expression.": { - "category": "Error", - "code": 1533 - }, - "This backreference refers to a group that does not exist. There are no capturing groups in this regular expression.": { - "category": "Error", - "code": 1534 - }, - "This character cannot be escaped in a regular expression.": { - "category": "Error", - "code": 1535 - }, - "Octal escape sequences and backreferences are not allowed in a character class. If this was intended as an escape sequence, use the syntax '{0}' instead.": { - "category": "Error", - "code": 1536 - }, - "Decimal escape sequences and backreferences are not allowed in a character class.": { - "category": "Error", - "code": 1537 - }, - "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set.": { - "category": "Error", - "code": 1538 - }, - "A 'bigint' literal cannot be used as a property name.": { - "category": "Error", - "code": 1539 - }, - "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.": { - "category": "Error", - "code": 1540 - }, - "Type-only import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute.": { - "category": "Error", - "code": 1541 - }, - "Type import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute.": { - "category": "Error", - "code": 1542 - }, - "Importing a JSON file into an ECMAScript module requires a 'type: \"json\"' import attribute when 'module' is set to '{0}'.": { - "category": "Error", - "code": 1543 - }, - "Named imports from a JSON file into an ECMAScript module are not allowed when 'module' is set to '{0}'.": { - "category": "Error", - "code": 1544 - }, - "'using' declarations are not allowed in ambient contexts.": { - "category": "Error", - "code": 1545 - }, - "'await using' declarations are not allowed in ambient contexts.": { - "category": "Error", - "code": 1546 - }, - "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.": { - "category": "Error", - "code": 1547 - }, - "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.": { - "category": "Error", - "code": 1548 - }, - "Ignore the tsconfig found and build with commandline options and files.": { - "category": "Message", - "code": 1549 - }, - "An ambient module declaration with import attributes must use a pattern name with an '*' character.": { - "category": "Error", - "code": 1550 - }, - "Import attributes are not allowed on a module augmentation.": { - "category": "Error", - "code": 1551 - }, - "An import attributes type may only contain property signatures.": { - "category": "Error", - "code": 1552 - }, - "An import attributes property must have a type annotation.": { - "category": "Error", - "code": 1553 - }, - "An import attributes property must have a string literal or identifier name.": { - "category": "Error", - "code": 1554 - }, - "An import attributes property must have a string literal type annotation.": { - "category": "Error", - "code": 1555 - }, - "An import attributes property cannot be optional.": { - "category": "Error", - "code": 1556 - }, - "'{0}' is not a valid key for an import attributes type.": { - "category": "Error", - "code": 1557 - }, - "An import attributes property cannot have a 'readonly' modifier.": { - "category": "Error", - "code": 1558 - }, - - "The types of '{0}' are incompatible between these types.": { - "category": "Error", - "code": 2200 - }, - "The types returned by '{0}' are incompatible between these types.": { - "category": "Error", - "code": 2201 - }, - "Call signature return types '{0}' and '{1}' are incompatible.": { - "category": "Error", - "code": 2202, - "elidedInCompatabilityPyramid": true - }, - "Construct signature return types '{0}' and '{1}' are incompatible.": { - "category": "Error", - "code": 2203, - "elidedInCompatabilityPyramid": true - }, - "Call signatures with no arguments have incompatible return types '{0}' and '{1}'.": { - "category": "Error", - "code": 2204, - "elidedInCompatabilityPyramid": true - }, - "Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.": { - "category": "Error", - "code": 2205, - "elidedInCompatabilityPyramid": true - }, - "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.": { - "category": "Error", - "code": 2206 - }, - "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.": { - "category": "Error", - "code": 2207 - }, - "This type parameter might need an `extends {0}` constraint.": { - "category": "Error", - "code": 2208 - }, - - "The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.": { - "category": "Error", - "code": 2209 - }, - "The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.": { - "category": "Error", - "code": 2210 - }, - "Add `extends` constraint.": { - "category": "Message", - "code": 2211 - }, - "Add `extends` constraint to all type parameters": { - "category": "Message", - "code": 2212 - }, - - "Duplicate identifier '{0}'.": { - "category": "Error", - "code": 2300 - }, - "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { - "category": "Error", - "code": 2301 - }, - "Static members cannot reference class type parameters.": { - "category": "Error", - "code": 2302 - }, - "Circular definition of import alias '{0}'.": { - "category": "Error", - "code": 2303 - }, - "Cannot find name '{0}'.": { - "category": "Error", - "code": 2304 - }, - "Module '{0}' has no exported member '{1}'.": { - "category": "Error", - "code": 2305 - }, - "File '{0}' is not a module.": { - "category": "Error", - "code": 2306 - }, - "Cannot find module '{0}' or its corresponding type declarations.": { - "category": "Error", - "code": 2307 - }, - "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity.": { - "category": "Error", - "code": 2308 - }, - "An export assignment cannot be used in a module with other exported elements.": { - "category": "Error", - "code": 2309 - }, - "Type '{0}' recursively references itself as a base type.": { - "category": "Error", - "code": 2310 - }, - "Cannot find name '{0}'. Did you mean to write this in an async function?": { - "category": "Error", - "code": 2311 - }, - "An interface can only extend an object type or intersection of object types with statically known members.": { - "category": "Error", - "code": 2312 - }, - "Type parameter '{0}' has a circular constraint.": { - "category": "Error", - "code": 2313 - }, - "Generic type '{0}' requires {1} type argument(s).": { - "category": "Error", - "code": 2314 - }, - "Type '{0}' is not generic.": { - "category": "Error", - "code": 2315 - }, - "Global type '{0}' must be a class or interface type.": { - "category": "Error", - "code": 2316 - }, - "Global type '{0}' must have {1} type parameter(s).": { - "category": "Error", - "code": 2317 - }, - "Cannot find global type '{0}'.": { - "category": "Error", - "code": 2318 - }, - "Named property '{0}' of types '{1}' and '{2}' are not identical.": { - "category": "Error", - "code": 2319 - }, - "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'.": { - "category": "Error", - "code": 2320 - }, - "Excessive stack depth comparing types '{0}' and '{1}'.": { - "category": "Error", - "code": 2321 - }, - "Type '{0}' is not assignable to type '{1}'.": { - "category": "Error", - "code": 2322 - }, - "Cannot redeclare exported variable '{0}'.": { - "category": "Error", - "code": 2323 - }, - "Property '{0}' is missing in type '{1}'.": { - "category": "Error", - "code": 2324 - }, - "Property '{0}' is private in type '{1}' but not in type '{2}'.": { - "category": "Error", - "code": 2325 - }, - "Types of property '{0}' are incompatible.": { - "category": "Error", - "code": 2326 - }, - "Property '{0}' is optional in type '{1}' but required in type '{2}'.": { - "category": "Error", - "code": 2327 - }, - "Types of parameters '{0}' and '{1}' are incompatible.": { - "category": "Error", - "code": 2328 - }, - "Index signature for type '{0}' is missing in type '{1}'.": { - "category": "Error", - "code": 2329 - }, - "'{0}' and '{1}' index signatures are incompatible.": { - "category": "Error", - "code": 2330 - }, - "'this' cannot be referenced in a module or namespace body.": { - "category": "Error", - "code": 2331 - }, - "'this' cannot be referenced in current location.": { - "category": "Error", - "code": 2332 - }, - "'this' cannot be referenced in a static property initializer.": { - "category": "Error", - "code": 2334 - }, - "'super' can only be referenced in a derived class.": { - "category": "Error", - "code": 2335 - }, - "'super' cannot be referenced in constructor arguments.": { - "category": "Error", - "code": 2336 - }, - "Super calls are not permitted outside constructors or in nested functions inside constructors.": { - "category": "Error", - "code": 2337 - }, - "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { - "category": "Error", - "code": 2338 - }, - "Property '{0}' does not exist on type '{1}'.": { - "category": "Error", - "code": 2339 - }, - "Only public and protected methods of the base class are accessible via the 'super' keyword.": { - "category": "Error", - "code": 2340 - }, - "Property '{0}' is private and only accessible within class '{1}'.": { - "category": "Error", - "code": 2341 - }, - "This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'.": { - "category": "Error", - "code": 2343 - }, - "Type '{0}' does not satisfy the constraint '{1}'.": { - "category": "Error", - "code": 2344 - }, - "Argument of type '{0}' is not assignable to parameter of type '{1}'.": { - "category": "Error", - "code": 2345 - }, - "Call target does not contain any signatures.": { - "category": "Error", - "code": 2346 - }, - "Untyped function calls may not accept type arguments.": { - "category": "Error", - "code": 2347 - }, - "Value of type '{0}' is not callable. Did you mean to include 'new'?": { - "category": "Error", - "code": 2348 - }, - "This expression is not callable.": { - "category": "Error", - "code": 2349 - }, - "Only a void function can be called with the 'new' keyword.": { - "category": "Error", - "code": 2350 - }, - "This expression is not constructable.": { - "category": "Error", - "code": 2351 - }, - "Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.": { - "category": "Error", - "code": 2352 - }, - "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'.": { - "category": "Error", - "code": 2353 - }, - "This syntax requires an imported helper but module '{0}' cannot be found.": { - "category": "Error", - "code": 2354 - }, - "A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.": { - "category": "Error", - "code": 2355 - }, - "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type.": { - "category": "Error", - "code": 2356 - }, - "The operand of an increment or decrement operator must be a variable or a property access.": { - "category": "Error", - "code": 2357 - }, - "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { - "category": "Error", - "code": 2358 - }, - "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method.": { - "category": "Error", - "code": 2359 - }, - "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.": { - "category": "Error", - "code": 2362 - }, - "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.": { - "category": "Error", - "code": 2363 - }, - "The left-hand side of an assignment expression must be a variable or a property access.": { - "category": "Error", - "code": 2364 - }, - "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { - "category": "Error", - "code": 2365 - }, - "Function lacks ending return statement and return type does not include 'undefined'.": { - "category": "Error", - "code": 2366 - }, - "This comparison appears to be unintentional because the types '{0}' and '{1}' have no overlap.": { - "category": "Error", - "code": 2367 - }, - "Type parameter name cannot be '{0}'.": { - "category": "Error", - "code": 2368 - }, - "A parameter property is only allowed in a constructor implementation.": { - "category": "Error", - "code": 2369 - }, - "A rest parameter must be of an array type.": { - "category": "Error", - "code": 2370 - }, - "A parameter initializer is only allowed in a function or constructor implementation.": { - "category": "Error", - "code": 2371 - }, - "Parameter '{0}' cannot reference itself.": { - "category": "Error", - "code": 2372 - }, - "Parameter '{0}' cannot reference identifier '{1}' declared after it.": { - "category": "Error", - "code": 2373 - }, - "Duplicate index signature for type '{0}'.": { - "category": "Error", - "code": 2374 - }, - "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.": { - "category": "Error", - "code": 2375 - }, - "A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers.": { - "category": "Error", - "code": 2376 - }, - "Constructors for derived classes must contain a 'super' call.": { - "category": "Error", - "code": 2377 - }, - "A 'get' accessor must return a value.": { - "category": "Error", - "code": 2378 - }, - "Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.": { - "category": "Error", - "code": 2379 - }, - "Overload signatures must all be exported or non-exported.": { - "category": "Error", - "code": 2383 - }, - "Overload signatures must all be ambient or non-ambient.": { - "category": "Error", - "code": 2384 - }, - "Overload signatures must all be public, private or protected.": { - "category": "Error", - "code": 2385 - }, - "Overload signatures must all be optional or required.": { - "category": "Error", - "code": 2386 - }, - "Function overload must be static.": { - "category": "Error", - "code": 2387 - }, - "Function overload must not be static.": { - "category": "Error", - "code": 2388 - }, - "Function implementation name must be '{0}'.": { - "category": "Error", - "code": 2389 - }, - "Constructor implementation is missing.": { - "category": "Error", - "code": 2390 - }, - "Function implementation is missing or not immediately following the declaration.": { - "category": "Error", - "code": 2391 - }, - "Multiple constructor implementations are not allowed.": { - "category": "Error", - "code": 2392 - }, - "Duplicate function implementation.": { - "category": "Error", - "code": 2393 - }, - "This overload signature is not compatible with its implementation signature.": { - "category": "Error", - "code": 2394 - }, - "Individual declarations in merged declaration '{0}' must be all exported or all local.": { - "category": "Error", - "code": 2395 - }, - "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { - "category": "Error", - "code": 2396 - }, - "Declaration name conflicts with built-in global identifier '{0}'.": { - "category": "Error", - "code": 2397 - }, - "'constructor' cannot be used as a parameter property name.": { - "category": "Error", - "code": 2398 - }, - "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { - "category": "Error", - "code": 2399 - }, - "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { - "category": "Error", - "code": 2400 - }, - "A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers.": { - "category": "Error", - "code": 2401 - }, - "Expression resolves to '_super' that compiler uses to capture base class reference.": { - "category": "Error", - "code": 2402 - }, - "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { - "category": "Error", - "code": 2403 - }, - "The left-hand side of a 'for...in' statement cannot use a type annotation.": { - "category": "Error", - "code": 2404 - }, - "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.": { - "category": "Error", - "code": 2405 - }, - "The left-hand side of a 'for...in' statement must be a variable or a property access.": { - "category": "Error", - "code": 2406 - }, - "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type '{0}'.": { - "category": "Error", - "code": 2407 - }, - "Setters cannot return a value.": { - "category": "Error", - "code": 2408 - }, - "Return type of constructor signature must be assignable to the instance type of the class.": { - "category": "Error", - "code": 2409 - }, - "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.": { - "category": "Error", - "code": 2410 - }, - "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target.": { - "category": "Error", - "code": 2412 - }, - "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'.": { - "category": "Error", - "code": 2411 - }, - "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'.": { - "category": "Error", - "code": 2413 - }, - "Class name cannot be '{0}'.": { - "category": "Error", - "code": 2414 - }, - "Class '{0}' incorrectly extends base class '{1}'.": { - "category": "Error", - "code": 2415 - }, - "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'.": { - "category": "Error", - "code": 2416 - }, - "Class static side '{0}' incorrectly extends base class static side '{1}'.": { - "category": "Error", - "code": 2417 - }, - "Type of computed property's value is '{0}', which is not assignable to type '{1}'.": { - "category": "Error", - "code": 2418 - }, - "Types of construct signatures are incompatible.": { - "category": "Error", - "code": 2419 - }, - "Class '{0}' incorrectly implements interface '{1}'.": { - "category": "Error", - "code": 2420 - }, - "A class can only implement an object type or intersection of object types with statically known members.": { - "category": "Error", - "code": 2422 - }, - "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { - "category": "Error", - "code": 2423 - }, - "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { - "category": "Error", - "code": 2425 - }, - "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { - "category": "Error", - "code": 2426 - }, - "Interface name cannot be '{0}'.": { - "category": "Error", - "code": 2427 - }, - "All declarations of '{0}' must have identical type parameters.": { - "category": "Error", - "code": 2428 - }, - "Interface '{0}' incorrectly extends interface '{1}'.": { - "category": "Error", - "code": 2430 - }, - "Enum name cannot be '{0}'.": { - "category": "Error", - "code": 2431 - }, - "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.": { - "category": "Error", - "code": 2432 - }, - "A namespace declaration cannot be in a different file from a class or function with which it is merged.": { - "category": "Error", - "code": 2433 - }, - "A namespace declaration cannot be located prior to a class or function with which it is merged.": { - "category": "Error", - "code": 2434 - }, - "Ambient modules cannot be nested in other modules or namespaces.": { - "category": "Error", - "code": 2435 - }, - "Ambient module declaration cannot specify relative module name.": { - "category": "Error", - "code": 2436 - }, - "Module '{0}' is hidden by a local declaration with the same name.": { - "category": "Error", - "code": 2437 - }, - "Import name cannot be '{0}'.": { - "category": "Error", - "code": 2438 - }, - "Import or export declaration in an ambient module declaration cannot reference module through relative module name.": { - "category": "Error", - "code": 2439 - }, - "Import declaration conflicts with local declaration of '{0}'.": { - "category": "Error", - "code": 2440 - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module.": { - "category": "Error", - "code": 2441 - }, - "Types have separate declarations of a private property '{0}'.": { - "category": "Error", - "code": 2442 - }, - "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'.": { - "category": "Error", - "code": 2443 - }, - "Property '{0}' is protected in type '{1}' but public in type '{2}'.": { - "category": "Error", - "code": 2444 - }, - "Property '{0}' is protected and only accessible within class '{1}' and its subclasses.": { - "category": "Error", - "code": 2445 - }, - "Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'.": { - "category": "Error", - "code": 2446 - }, - "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead.": { - "category": "Error", - "code": 2447 - }, - "Block-scoped variable '{0}' used before its declaration.": { - "category": "Error", - "code": 2448 - }, - "Class '{0}' used before its declaration.": { - "category": "Error", - "code": 2449 - }, - "Enum '{0}' used before its declaration.": { - "category": "Error", - "code": 2450 - }, - "Cannot redeclare block-scoped variable '{0}'.": { - "category": "Error", - "code": 2451 - }, - "An enum member cannot have a numeric name.": { - "category": "Error", - "code": 2452 - }, - "Variable '{0}' is used before being assigned.": { - "category": "Error", - "code": 2454 - }, - "Type alias '{0}' circularly references itself.": { - "category": "Error", - "code": 2456 - }, - "Type alias name cannot be '{0}'.": { - "category": "Error", - "code": 2457 - }, - "An AMD module cannot have multiple name assignments.": { - "category": "Error", - "code": 2458 - }, - "Module '{0}' declares '{1}' locally, but it is not exported.": { - "category": "Error", - "code": 2459 - }, - "Module '{0}' declares '{1}' locally, but it is exported as '{2}'.": { - "category": "Error", - "code": 2460 - }, - "Type '{0}' is not an array type.": { - "category": "Error", - "code": 2461 - }, - "A rest element must be last in a destructuring pattern.": { - "category": "Error", - "code": 2462 - }, - "A binding pattern parameter cannot be optional in an implementation signature.": { - "category": "Error", - "code": 2463 - }, - "A computed property name must be of type 'string', 'number', 'symbol', or 'any'.": { - "category": "Error", - "code": 2464 - }, - "'this' cannot be referenced in a computed property name.": { - "category": "Error", - "code": 2465 - }, - "'super' cannot be referenced in a computed property name.": { - "category": "Error", - "code": 2466 - }, - "A computed property name cannot reference a type parameter from its containing type.": { - "category": "Error", - "code": 2467 - }, - "Cannot find global value '{0}'.": { - "category": "Error", - "code": 2468 - }, - "The '{0}' operator cannot be applied to type 'symbol'.": { - "category": "Error", - "code": 2469 - }, - "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher.": { - "category": "Error", - "code": 2472 - }, - "Enum declarations must all be const or non-const.": { - "category": "Error", - "code": 2473 - }, - "const enum member initializers must be constant expressions.": { - "category": "Error", - "code": 2474 - }, - "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.": { - "category": "Error", - "code": 2475 - }, - "A const enum member can only be accessed using a string literal.": { - "category": "Error", - "code": 2476 - }, - "'const' enum member initializer was evaluated to a non-finite value.": { - "category": "Error", - "code": 2477 - }, - "'const' enum member initializer was evaluated to disallowed value 'NaN'.": { - "category": "Error", - "code": 2478 - }, - "'let' is not allowed to be used as a name in 'let' or 'const' declarations.": { - "category": "Error", - "code": 2480 - }, - "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'.": { - "category": "Error", - "code": 2481 - }, - "The left-hand side of a 'for...of' statement cannot use a type annotation.": { - "category": "Error", - "code": 2483 - }, - "Export declaration conflicts with exported declaration of '{0}'.": { - "category": "Error", - "code": 2484 - }, - "The left-hand side of a 'for...of' statement must be a variable or a property access.": { - "category": "Error", - "code": 2487 - }, - "Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator.": { - "category": "Error", - "code": 2488 - }, - "An iterator must have a 'next()' method.": { - "category": "Error", - "code": 2489 - }, - "The type returned by the '{0}()' method of an iterator must have a 'value' property.": { - "category": "Error", - "code": 2490 - }, - "The left-hand side of a 'for...in' statement cannot be a destructuring pattern.": { - "category": "Error", - "code": 2491 - }, - "Cannot redeclare identifier '{0}' in catch clause.": { - "category": "Error", - "code": 2492 - }, - "Tuple type '{0}' of length '{1}' has no element at index '{2}'.": { - "category": "Error", - "code": 2493 - }, - "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher.": { - "category": "Error", - "code": 2494 - }, - "Type '{0}' is not an array type or a string type.": { - "category": "Error", - "code": 2495 - }, - "The 'arguments' object cannot be referenced in an arrow function in ES5. Consider using a standard function expression.": { - "category": "Error", - "code": 2496 - }, - "This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export.": { - "category": "Error", - "code": 2497 - }, - "Module '{0}' uses 'export =' and cannot be used with 'export *'.": { - "category": "Error", - "code": 2498 - }, - "An interface can only extend an identifier/qualified-name with optional type arguments.": { - "category": "Error", - "code": 2499 - }, - "A class can only implement an identifier/qualified-name with optional type arguments.": { - "category": "Error", - "code": 2500 - }, - "A rest element cannot contain a binding pattern.": { - "category": "Error", - "code": 2501 - }, - "'{0}' is referenced directly or indirectly in its own type annotation.": { - "category": "Error", - "code": 2502 - }, - "Cannot find namespace '{0}'.": { - "category": "Error", - "code": 2503 - }, - "Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator.": { - "category": "Error", - "code": 2504 - }, - "A generator cannot have a 'void' type annotation.": { - "category": "Error", - "code": 2505 - }, - "'{0}' is referenced directly or indirectly in its own base expression.": { - "category": "Error", - "code": 2506 - }, - "Type '{0}' is not a constructor function type.": { - "category": "Error", - "code": 2507 - }, - "No base constructor has the specified number of type arguments.": { - "category": "Error", - "code": 2508 - }, - "Base constructor return type '{0}' is not an object type or intersection of object types with statically known members.": { - "category": "Error", - "code": 2509 - }, - "Base constructors must all have the same return type.": { - "category": "Error", - "code": 2510 - }, - "Cannot create an instance of an abstract class.": { - "category": "Error", - "code": 2511 - }, - "Overload signatures must all be abstract or non-abstract.": { - "category": "Error", - "code": 2512 - }, - "Abstract method '{0}' in class '{1}' cannot be accessed via super expression.": { - "category": "Error", - "code": 2513 - }, - "A tuple type cannot be indexed with a negative value.": { - "category": "Error", - "code": 2514 - }, - "Non-abstract class '{0}' does not implement inherited abstract member {1} from class '{2}'.": { - "category": "Error", - "code": 2515 - }, - "All declarations of an abstract method must be consecutive.": { - "category": "Error", - "code": 2516 - }, - "Cannot assign an abstract constructor type to a non-abstract constructor type.": { - "category": "Error", - "code": 2517 - }, - "A 'this'-based type guard is not compatible with a parameter-based type guard.": { - "category": "Error", - "code": 2518 - }, - "An async iterator must have a 'next()' method.": { - "category": "Error", - "code": 2519 - }, - "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions.": { - "category": "Error", - "code": 2520 - }, - "The 'arguments' object cannot be referenced in an async function or method in ES5. Consider using a standard function or method.": { - "category": "Error", - "code": 2522 - }, - "'yield' expressions cannot be used in a parameter initializer.": { - "category": "Error", - "code": 2523 - }, - "'await' expressions cannot be used in a parameter initializer.": { - "category": "Error", - "code": 2524 - }, - "A 'this' type is available only in a non-static member of a class or interface.": { - "category": "Error", - "code": 2526 - }, - "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary.": { - "category": "Error", - "code": 2527 - }, - "A module cannot have multiple default exports.": { - "category": "Error", - "code": 2528 - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions.": { - "category": "Error", - "code": 2529 - }, - "Property '{0}' is incompatible with index signature.": { - "category": "Error", - "code": 2530 - }, - "Object is possibly 'null'.": { - "category": "Error", - "code": 2531 - }, - "Object is possibly 'undefined'.": { - "category": "Error", - "code": 2532 - }, - "Object is possibly 'null' or 'undefined'.": { - "category": "Error", - "code": 2533 - }, - "A function returning 'never' cannot have a reachable end point.": { - "category": "Error", - "code": 2534 - }, - "Type '{0}' cannot be used to index type '{1}'.": { - "category": "Error", - "code": 2536 - }, - "Type '{0}' has no matching index signature for type '{1}'.": { - "category": "Error", - "code": 2537 - }, - "Type '{0}' cannot be used as an index type.": { - "category": "Error", - "code": 2538 - }, - "Cannot assign to '{0}' because it is not a variable.": { - "category": "Error", - "code": 2539 - }, - "Cannot assign to '{0}' because it is a read-only property.": { - "category": "Error", - "code": 2540 - }, - "Index signature in type '{0}' only permits reading.": { - "category": "Error", - "code": 2542 - }, - "Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference.": { - "category": "Error", - "code": 2543 - }, - "Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference.": { - "category": "Error", - "code": 2544 - }, - "A mixin class must have a constructor with a single rest parameter of type 'any[]'.": { - "category": "Error", - "code": 2545 - }, - "The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property.": { - "category": "Error", - "code": 2547 - }, - "Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator.": { - "category": "Error", - "code": 2548 - }, - "Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator.": { - "category": "Error", - "code": 2549 - }, - "Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later.": { - "category": "Error", - "code": 2550 - }, - "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?": { - "category": "Error", - "code": 2551 - }, - "Cannot find name '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 2552 - }, - "Computed values are not permitted in an enum with string valued members.": { - "category": "Error", - "code": 2553 - }, - "Expected {0} arguments, but got {1}.": { - "category": "Error", - "code": 2554 - }, - "Expected at least {0} arguments, but got {1}.": { - "category": "Error", - "code": 2555 - }, - "A spread argument must either have a tuple type or be passed to a rest parameter.": { - "category": "Error", - "code": 2556 - }, - "Expected {0} type arguments, but got {1}.": { - "category": "Error", - "code": 2558 - }, - "Type '{0}' has no properties in common with type '{1}'.": { - "category": "Error", - "code": 2559 - }, - "Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?": { - "category": "Error", - "code": 2560 - }, - "Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?": { - "category": "Error", - "code": 2561 - }, - "Base class expressions cannot reference class type parameters.": { - "category": "Error", - "code": 2562 - }, - "The containing function or module body is too large for control flow analysis.": { - "category": "Error", - "code": 2563 - }, - "Property '{0}' has no initializer and is not definitely assigned in the constructor.": { - "category": "Error", - "code": 2564 - }, - "Property '{0}' is used before being assigned.": { - "category": "Error", - "code": 2565 - }, - "A rest element cannot have a property name.": { - "category": "Error", - "code": 2566 - }, - "Enum declarations can only merge with namespace or other enum declarations.": { - "category": "Error", - "code": 2567 - }, - "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?": { - "category": "Error", - "code": 2568 - }, - - "Could not find name '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 2570 - }, - "Object is of type 'unknown'.": { - "category": "Error", - "code": 2571 - }, - "A rest element type must be an array type.": { - "category": "Error", - "code": 2574 - }, - "No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments.": { - "category": "Error", - "code": 2575 - }, - "Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?": { - "category": "Error", - "code": 2576 - }, - "Return type annotation circularly references itself.": { - "category": "Error", - "code": 2577 - }, - "Unused '@ts-expect-error' directive.": { - "category": "Error", - "code": 2578 - }, - "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.": { - "category": "Error", - "code": 2580 - }, - "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`.": { - "category": "Error", - "code": 2581 - }, - "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`.": { - "category": "Error", - "code": 2582 - }, - "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later.": { - "category": "Error", - "code": 2583 - }, - "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.": { - "category": "Error", - "code": 2584 - }, - "'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later.": { - "category": "Error", - "code": 2585 - }, - "Cannot assign to '{0}' because it is a constant.": { - "category": "Error", - "code": 2588 - }, - "Type instantiation is excessively deep and possibly infinite.": { - "category": "Error", - "code": 2589 - }, - "Expression produces a union type that is too complex to represent.": { - "category": "Error", - "code": 2590 - }, - "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.": { - "category": "Error", - "code": 2591 - }, - "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig.": { - "category": "Error", - "code": 2592 - }, - "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig.": { - "category": "Error", - "code": 2593 - }, - "This module is declared with 'export =', and can only be used with a default import when using the '{0}' flag.": { - "category": "Error", - "code": 2594 - }, - "'{0}' can only be imported by using a default import.": { - "category": "Error", - "code": 2595 - }, - "'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import.": { - "category": "Error", - "code": 2596 - }, - "'{0}' can only be imported by using a 'require' call or by using a default import.": { - "category": "Error", - "code": 2597 - }, - "'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import.": { - "category": "Error", - "code": 2598 - }, - "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.": { - "category": "Error", - "code": 2602 - }, - "Property '{0}' in type '{1}' is not assignable to type '{2}'.": { - "category": "Error", - "code": 2603 - }, - "JSX element type '{0}' does not have any construct or call signatures.": { - "category": "Error", - "code": 2604 - }, - "Property '{0}' of JSX spread attribute is not assignable to target property.": { - "category": "Error", - "code": 2606 - }, - "JSX element class does not support attributes because it does not have a '{0}' property.": { - "category": "Error", - "code": 2607 - }, - "The global type 'JSX.{0}' may not have more than one property.": { - "category": "Error", - "code": 2608 - }, - "JSX spread child must be an array type.": { - "category": "Error", - "code": 2609 - }, - "'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property.": { - "category": "Error", - "code": 2610 - }, - "'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor.": { - "category": "Error", - "code": 2611 - }, - "Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration.": { - "category": "Error", - "code": 2612 - }, - "Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?": { - "category": "Error", - "code": 2613 - }, - "Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?": { - "category": "Error", - "code": 2614 - }, - "Type of property '{0}' circularly references itself in mapped type '{1}'.": { - "category": "Error", - "code": 2615 - }, - "'{0}' can only be imported by using 'import {1} = require({2})' or a default import.": { - "category": "Error", - "code": 2616 - }, - "'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import.": { - "category": "Error", - "code": 2617 - }, - "Source has {0} element(s) but target requires {1}.": { - "category": "Error", - "code": 2618 - }, - "Source has {0} element(s) but target allows only {1}.": { - "category": "Error", - "code": 2619 - }, - "Target requires {0} element(s) but source may have fewer.": { - "category": "Error", - "code": 2620 - }, - "Target allows only {0} element(s) but source may have more.": { - "category": "Error", - "code": 2621 - }, - "Source provides no match for required element at position {0} in target.": { - "category": "Error", - "code": 2623 - }, - "Source provides no match for variadic element at position {0} in target.": { - "category": "Error", - "code": 2624 - }, - "Variadic element at position {0} in source does not match element at position {1} in target.": { - "category": "Error", - "code": 2625 - }, - "Type at position {0} in source is not compatible with type at position {1} in target.": { - "category": "Error", - "code": 2626 - }, - "Type at positions {0} through {1} in source is not compatible with type at position {2} in target.": { - "category": "Error", - "code": 2627 - }, - "Cannot assign to '{0}' because it is an enum.": { - "category": "Error", - "code": 2628 - }, - "Cannot assign to '{0}' because it is a class.": { - "category": "Error", - "code": 2629 - }, - "Cannot assign to '{0}' because it is a function.": { - "category": "Error", - "code": 2630 - }, - "Cannot assign to '{0}' because it is a namespace.": { - "category": "Error", - "code": 2631 - }, - "Cannot assign to '{0}' because it is an import.": { - "category": "Error", - "code": 2632 - }, - "JSX property access expressions cannot include JSX namespace names": { - "category": "Error", - "code": 2633 - }, - "'{0}' index signatures are incompatible.": { - "category": "Error", - "code": 2634 - }, - "Type '{0}' has no signatures for which the type argument list is applicable.": { - "category": "Error", - "code": 2635 - }, - "Type '{0}' is not assignable to type '{1}' as implied by variance annotation.": { - "category": "Error", - "code": 2636 - }, - "Variance annotations are only supported in type aliases for object, function, constructor, and mapped types.": { - "category": "Error", - "code": 2637 - }, - "Type '{0}' may represent a primitive value, which is not permitted as the right operand of the 'in' operator.": { - "category": "Error", - "code": 2638 - }, - "React components cannot include JSX namespace names": { - "category": "Error", - "code": 2639 - }, - - "Cannot augment module '{0}' with value exports because it resolves to a non-module entity.": { - "category": "Error", - "code": 2649 - }, - "Non-abstract class expression is missing implementations for the following members of '{0}': {1} and {2} more.": { - "category": "Error", - "code": 2650 - }, - "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.": { - "category": "Error", - "code": 2651 - }, - "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead.": { - "category": "Error", - "code": 2652 - }, - "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'.": { - "category": "Error", - "code": 2653 - }, - "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2}.": { - "category": "Error", - "code": 2654 - }, - "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2} and {3} more.": { - "category": "Error", - "code": 2655 - }, - "Non-abstract class expression is missing implementations for the following members of '{0}': {1}.": { - "category": "Error", - "code": 2656 - }, - "JSX expressions must have one parent element.": { - "category": "Error", - "code": 2657 - }, - "Type '{0}' provides no match for the signature '{1}'.": { - "category": "Error", - "code": 2658 - }, - "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher.": { - "category": "Error", - "code": 2659 - }, - "'super' can only be referenced in members of derived classes or object literal expressions.": { - "category": "Error", - "code": 2660 - }, - "Cannot export '{0}'. Only local declarations can be exported from a module.": { - "category": "Error", - "code": 2661 - }, - "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?": { - "category": "Error", - "code": 2662 - }, - "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?": { - "category": "Error", - "code": 2663 - }, - "Invalid module name in augmentation, module '{0}' cannot be found.": { - "category": "Error", - "code": 2664 - }, - "Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented.": { - "category": "Error", - "code": 2665 - }, - "Exports and export assignments are not permitted in module augmentations.": { - "category": "Error", - "code": 2666 - }, - "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module.": { - "category": "Error", - "code": 2667 - }, - "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.": { - "category": "Error", - "code": 2668 - }, - "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.": { - "category": "Error", - "code": 2669 - }, - "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context.": { - "category": "Error", - "code": 2670 - }, - "Cannot augment module '{0}' because it resolves to a non-module entity.": { - "category": "Error", - "code": 2671 - }, - "Cannot assign a '{0}' constructor type to a '{1}' constructor type.": { - "category": "Error", - "code": 2672 - }, - "Constructor of class '{0}' is private and only accessible within the class declaration.": { - "category": "Error", - "code": 2673 - }, - "Constructor of class '{0}' is protected and only accessible within the class declaration.": { - "category": "Error", - "code": 2674 - }, - "Cannot extend a class '{0}'. Class constructor is marked as private.": { - "category": "Error", - "code": 2675 - }, - "Accessors must both be abstract or non-abstract.": { - "category": "Error", - "code": 2676 - }, - "A type predicate's type must be assignable to its parameter's type.": { - "category": "Error", - "code": 2677 - }, - "Type '{0}' is not comparable to type '{1}'.": { - "category": "Error", - "code": 2678 - }, - "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'.": { - "category": "Error", - "code": 2679 - }, - "A '{0}' parameter must be the first parameter.": { - "category": "Error", - "code": 2680 - }, - "A constructor cannot have a 'this' parameter.": { - "category": "Error", - "code": 2681 - }, - "'this' implicitly has type 'any' because it does not have a type annotation.": { - "category": "Error", - "code": 2683 - }, - "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'.": { - "category": "Error", - "code": 2684 - }, - "The 'this' types of each signature are incompatible.": { - "category": "Error", - "code": 2685 - }, - "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.": { - "category": "Error", - "code": 2686 - }, - "All declarations of '{0}' must have identical modifiers.": { - "category": "Error", - "code": 2687 - }, - "Cannot find type definition file for '{0}'.": { - "category": "Error", - "code": 2688 - }, - "Cannot extend an interface '{0}'. Did you mean 'implements'?": { - "category": "Error", - "code": 2689 - }, - "'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?": { - "category": "Error", - "code": 2690 - }, - "'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible.": { - "category": "Error", - "code": 2692 - }, - "'{0}' only refers to a type, but is being used as a value here.": { - "category": "Error", - "code": 2693 - }, - "Namespace '{0}' has no exported member '{1}'.": { - "category": "Error", - "code": 2694 - }, - "Left side of comma operator is unused and has no side effects.": { - "category": "Error", - "code": 2695, - "reportsUnnecessary": true - }, - "The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?": { - "category": "Error", - "code": 2696 - }, - "An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.": { - "category": "Error", - "code": 2697 - }, - "Spread types may only be created from object types.": { - "category": "Error", - "code": 2698 - }, - "Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'.": { - "category": "Error", - "code": 2699 - }, - "Rest types may only be created from object types.": { - "category": "Error", - "code": 2700 - }, - "The target of an object rest assignment must be a variable or a property access.": { - "category": "Error", - "code": 2701 - }, - "'{0}' only refers to a type, but is being used as a namespace here.": { - "category": "Error", - "code": 2702 - }, - "The operand of a 'delete' operator must be a property reference.": { - "category": "Error", - "code": 2703 - }, - "The operand of a 'delete' operator cannot be a read-only property.": { - "category": "Error", - "code": 2704 - }, - "An async function or method in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.": { - "category": "Error", - "code": 2705 - }, - "Required type parameters may not follow optional type parameters.": { - "category": "Error", - "code": 2706 - }, - "Generic type '{0}' requires between {1} and {2} type arguments.": { - "category": "Error", - "code": 2707 - }, - "Cannot use namespace '{0}' as a value.": { - "category": "Error", - "code": 2708 - }, - "Cannot use namespace '{0}' as a type.": { - "category": "Error", - "code": 2709 - }, - "'{0}' are specified twice. The attribute named '{0}' will be overwritten.": { - "category": "Error", - "code": 2710 - }, - "A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.": { - "category": "Error", - "code": 2711 - }, - "A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.": { - "category": "Error", - "code": 2712 - }, - "Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?": { - "category": "Error", - "code": 2713 - }, - "The expression of an export assignment must be an identifier or qualified name in an ambient context.": { - "category": "Error", - "code": 2714 - }, - "Abstract property '{0}' in class '{1}' cannot be accessed in the constructor.": { - "category": "Error", - "code": 2715 - }, - "Type parameter '{0}' has a circular default.": { - "category": "Error", - "code": 2716 - }, - "Subsequent property declarations must have the same type. Property '{0}' must be of type '{1}', but here has type '{2}'.": { - "category": "Error", - "code": 2717 - }, - "Duplicate property '{0}'.": { - "category": "Error", - "code": 2718 - }, - "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated.": { - "category": "Error", - "code": 2719 - }, - "Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?": { - "category": "Error", - "code": 2720 - }, - "Cannot invoke an object which is possibly 'null'.": { - "category": "Error", - "code": 2721 - }, - "Cannot invoke an object which is possibly 'undefined'.": { - "category": "Error", - "code": 2722 - }, - "Cannot invoke an object which is possibly 'null' or 'undefined'.": { - "category": "Error", - "code": 2723 - }, - "'{0}' has no exported member named '{1}'. Did you mean '{2}'?": { - "category": "Error", - "code": 2724 - }, - "Class name cannot be 'Object' when targeting ES5 and above with module {0}.": { - "category": "Error", - "code": 2725 - }, - "Cannot find lib definition for '{0}'.": { - "category": "Error", - "code": 2726 - }, - "Cannot find lib definition for '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 2727 - }, - "'{0}' is declared here.": { - "category": "Message", - "code": 2728 - }, - "Property '{0}' is used before its initialization.": { - "category": "Error", - "code": 2729 - }, - "An arrow function cannot have a 'this' parameter.": { - "category": "Error", - "code": 2730 - }, - "Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'.": { - "category": "Error", - "code": 2731 - }, - "Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension.": { - "category": "Error", - "code": 2732 - }, - "Property '{0}' was also declared here.": { - "category": "Error", - "code": 2733 - }, - "Are you missing a semicolon?": { - "category": "Error", - "code": 2734 - }, - "Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?": { - "category": "Error", - "code": 2735 - }, - "Operator '{0}' cannot be applied to type '{1}'.": { - "category": "Error", - "code": 2736 - }, - "BigInt literals are not available when targeting lower than ES2020.": { - "category": "Error", - "code": 2737 - }, - "An outer value of 'this' is shadowed by this container.": { - "category": "Message", - "code": 2738 - }, - "Type '{0}' is missing the following properties from type '{1}': {2}": { - "category": "Error", - "code": 2739 - }, - "Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more.": { - "category": "Error", - "code": 2740 - }, - "Property '{0}' is missing in type '{1}' but required in type '{2}'.": { - "category": "Error", - "code": 2741 - }, - "The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary.": { - "category": "Error", - "code": 2742 - }, - "No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments.": { - "category": "Error", - "code": 2743 - }, - "Type parameter defaults can only reference previously declared type parameters.": { - "category": "Error", - "code": 2744 - }, - "This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided.": { - "category": "Error", - "code": 2745 - }, - "This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided.": { - "category": "Error", - "code": 2746 - }, - "'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'.": { - "category": "Error", - "code": 2747 - }, - "Cannot access ambient const enums when '{0}' is enabled.": { - "category": "Error", - "code": 2748 - }, - "'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?": { - "category": "Error", - "code": 2749 - }, - "The implementation signature is declared here.": { - "category": "Error", - "code": 2750 - }, - "Circularity originates in type at this location.": { - "category": "Error", - "code": 2751 - }, - "The first export default is here.": { - "category": "Error", - "code": 2752 - }, - "Another export default is here.": { - "category": "Error", - "code": 2753 - }, - "'super' may not use type arguments.": { - "category": "Error", - "code": 2754 - }, - "No constituent of type '{0}' is callable.": { - "category": "Error", - "code": 2755 - }, - "Not all constituents of type '{0}' are callable.": { - "category": "Error", - "code": 2756 - }, - "Type '{0}' has no call signatures.": { - "category": "Error", - "code": 2757 - }, - "Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other.": { - "category": "Error", - "code": 2758 - }, - "No constituent of type '{0}' is constructable.": { - "category": "Error", - "code": 2759 - }, - "Not all constituents of type '{0}' are constructable.": { - "category": "Error", - "code": 2760 - }, - "Type '{0}' has no construct signatures.": { - "category": "Error", - "code": 2761 - }, - "Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other.": { - "category": "Error", - "code": 2762 - }, - "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'.": { - "category": "Error", - "code": 2763 - }, - "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'.": { - "category": "Error", - "code": 2764 - }, - "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'.": { - "category": "Error", - "code": 2765 - }, - "Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'.": { - "category": "Error", - "code": 2766 - }, - "The '{0}' property of an iterator must be a method.": { - "category": "Error", - "code": 2767 - }, - "The '{0}' property of an async iterator must be a method.": { - "category": "Error", - "code": 2768 - }, - "No overload matches this call.": { - "category": "Error", - "code": 2769 - }, - "The last overload gave the following error.": { - "category": "Error", - "code": 2770 - }, - "The last overload is declared here.": { - "category": "Error", - "code": 2771 - }, - "Overload {0} of {1}, '{2}', gave the following error.": { - "category": "Error", - "code": 2772 - }, - "Did you forget to use 'await'?": { - "category": "Error", - "code": 2773 - }, - "This condition will always return true since this function is always defined. Did you mean to call it instead?": { - "category": "Error", - "code": 2774 - }, - "Assertions require every name in the call target to be declared with an explicit type annotation.": { - "category": "Error", - "code": 2775 - }, - "Assertions require the call target to be an identifier or qualified name.": { - "category": "Error", - "code": 2776 - }, - "The operand of an increment or decrement operator may not be an optional property access.": { - "category": "Error", - "code": 2777 - }, - "The target of an object rest assignment may not be an optional property access.": { - "category": "Error", - "code": 2778 - }, - "The left-hand side of an assignment expression may not be an optional property access.": { - "category": "Error", - "code": 2779 - }, - "The left-hand side of a 'for...in' statement may not be an optional property access.": { - "category": "Error", - "code": 2780 - }, - "The left-hand side of a 'for...of' statement may not be an optional property access.": { - "category": "Error", - "code": 2781 - }, - "'{0}' needs an explicit type annotation.": { - "category": "Message", - "code": 2782 - }, - "'{0}' is specified more than once, so this usage will be overwritten.": { - "category": "Error", - "code": 2783 - }, - "'get' and 'set' accessors cannot declare 'this' parameters.": { - "category": "Error", - "code": 2784 - }, - "This spread always overwrites this property.": { - "category": "Error", - "code": 2785 - }, - "'{0}' cannot be used as a JSX component.": { - "category": "Error", - "code": 2786 - }, - "Its return type '{0}' is not a valid JSX element.": { - "category": "Error", - "code": 2787 - }, - "Its instance type '{0}' is not a valid JSX element.": { - "category": "Error", - "code": 2788 - }, - "Its element type '{0}' is not a valid JSX element.": { - "category": "Error", - "code": 2789 - }, - "The operand of a 'delete' operator must be optional.": { - "category": "Error", - "code": 2790 - }, - "Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later.": { - "category": "Error", - "code": 2791 - }, - "Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?": { - "category": "Error", - "code": 2792 - }, - "The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible.": { - "category": "Error", - "code": 2793 - }, - "Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?": { - "category": "Error", - "code": 2794 - }, - "The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types.": { - "category": "Error", - "code": 2795 - }, - "It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked.": { - "category": "Error", - "code": 2796 - }, - "A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'.": { - "category": "Error", - "code": 2797 - }, - "The declaration was marked as deprecated here.": { - "category": "Error", - "code": 2798 - }, - "Type produces a tuple type that is too large to represent.": { - "category": "Error", - "code": 2799 - }, - "Expression produces a tuple type that is too large to represent.": { - "category": "Error", - "code": 2800 - }, - "This condition will always return true since this '{0}' is always defined.": { - "category": "Error", - "code": 2801 - }, - "Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.": { - "category": "Error", - "code": 2802 - }, - "Cannot assign to private method '{0}'. Private methods are not writable.": { - "category": "Error", - "code": 2803 - }, - "Duplicate identifier '{0}'. Static and instance elements cannot share the same private name.": { - "category": "Error", - "code": 2804 - }, - "Private accessor was defined without a getter.": { - "category": "Error", - "code": 2806 - }, - "This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'.": { - "category": "Error", - "code": 2807 - }, - "A get accessor must be at least as accessible as the setter": { - "category": "Error", - "code": 2808 - }, - "Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the whole assignment in parentheses.": { - "category": "Error", - "code": 2809 - }, - "Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments.": { - "category": "Error", - "code": 2810 - }, - "Initializer for property '{0}'": { - "category": "Error", - "code": 2811 - }, - "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'.": { - "category": "Error", - "code": 2812 - }, - "Class declaration cannot implement overload list for '{0}'.": { - "category": "Error", - "code": 2813 - }, - "Function with bodies can only merge with classes that are ambient.": { - "category": "Error", - "code": 2814 - }, - "'arguments' cannot be referenced in property initializers or class static initialization blocks.": { - "category": "Error", - "code": 2815 - }, - "Cannot use 'this' in a static property initializer of a decorated class.": { - "category": "Error", - "code": 2816 - }, - "Property '{0}' has no initializer and is not definitely assigned in a class static block.": { - "category": "Error", - "code": 2817 - }, - "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers.": { - "category": "Error", - "code": 2818 - }, - "Namespace name cannot be '{0}'.": { - "category": "Error", - "code": 2819 - }, - "Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?": { - "category": "Error", - "code": 2820 - }, - "Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": { - "category": "Error", - "code": 2821 - }, - "Import assertions cannot be used with type-only imports or exports.": { - "category": "Error", - "code": 2822 - }, - "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": { - "category": "Error", - "code": 2823 - }, - "Cannot find namespace '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 2833 - }, - "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path.": { - "category": "Error", - "code": 2834 - }, - "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?": { - "category": "Error", - "code": 2835 - }, - "Import assertions are not allowed on statements that compile to CommonJS 'require' calls.": { - "category": "Error", - "code": 2836 - }, - "Import assertion values must be string literal expressions.": { - "category": "Error", - "code": 2837 - }, - "All declarations of '{0}' must have identical constraints.": { - "category": "Error", - "code": 2838 - }, - "This condition will always return '{0}' since JavaScript compares objects by reference, not value.": { - "category": "Error", - "code": 2839 - }, - "An interface cannot extend a primitive type like '{0}'. It can only extend other named object types.": { - "category": "Error", - "code": 2840 - }, - "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?": { - "category": "Error", - "code": 2842 - }, - "We can only write a type for '{0}' by adding a type for the entire parameter here.": { - "category": "Error", - "code": 2843 - }, - "Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { - "category": "Error", - "code": 2844 - }, - "This condition will always return '{0}'.": { - "category": "Error", - "code": 2845 - }, - "A declaration file cannot be imported without 'import type'. Did you mean to import an implementation file '{0}' instead?": { - "category": "Error", - "code": 2846 - }, - "The right-hand side of an 'instanceof' expression must not be an instantiation expression.": { - "category": "Error", - "code": 2848 - }, - "Target signature provides too few arguments. Expected {0} or more, but got {1}.": { - "category": "Error", - "code": 2849 - }, - "The initializer of a 'using' declaration must be either an object with a '[Symbol.dispose]()' method, or be 'null' or 'undefined'.": { - "category": "Error", - "code": 2850 - }, - "The initializer of an 'await using' declaration must be either an object with a '[Symbol.asyncDispose]()' or '[Symbol.dispose]()' method, or be 'null' or 'undefined'.": { - "category": "Error", - "code": 2851 - }, - "'await using' statements are only allowed within async functions and at the top levels of modules.": { - "category": "Error", - "code": 2852 - }, - "'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { - "category": "Error", - "code": 2853 - }, - "Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { - "category": "Error", - "code": 2854 - }, - "Class field '{0}' defined by the parent class is not accessible in the child class via super.": { - "category": "Error", - "code": 2855 - }, - "Import attributes are not allowed on statements that compile to CommonJS 'require' calls.": { - "category": "Error", - "code": 2856 - }, - "Import attributes cannot be used with type-only imports or exports.": { - "category": "Error", - "code": 2857 - }, - "Import attribute values must be string literal expressions.": { - "category": "Error", - "code": 2858 - }, - "Excessive complexity comparing types '{0}' and '{1}'.": { - "category": "Error", - "code": 2859 - }, - "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method.": { - "category": "Error", - "code": 2860 - }, - "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression.": { - "category": "Error", - "code": 2861 - }, - "Type '{0}' is generic and can only be indexed for reading.": { - "category": "Error", - "code": 2862 - }, - "A class cannot extend a primitive type like '{0}'. Classes can only extend constructable values.": { - "category": "Error", - "code": 2863 - }, - "A class cannot implement a primitive type like '{0}'. It can only implement other named object types.": { - "category": "Error", - "code": 2864 - }, - "Import '{0}' conflicts with local value, so must be declared with a type-only import when 'isolatedModules' is enabled.": { - "category": "Error", - "code": 2865 - }, - "Import '{0}' conflicts with global value used in this file, so must be declared with a type-only import when 'isolatedModules' is enabled.": { - "category": "Error", - "code": 2866 - }, - "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun`.": { - "category": "Error", - "code": 2867 - }, - "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun` and then add 'bun' to the types field in your tsconfig.": { - "category": "Error", - "code": 2868 - }, - "Right operand of ?? is unreachable because the left operand is never nullish.": { - "category": "Error", - "code": 2869 - }, - "This binary expression is never nullish. Are you missing parentheses?": { - "category": "Error", - "code": 2870 - }, - "This expression is always nullish.": { - "category": "Error", - "code": 2871 - }, - "This kind of expression is always truthy.": { - "category": "Error", - "code": 2872 - }, - "This kind of expression is always falsy.": { - "category": "Error", - "code": 2873 - }, - "This JSX tag requires '{0}' to be in scope, but it could not be found.": { - "category": "Error", - "code": 2874 - }, - "This JSX tag requires the module path '{0}' to exist, but none could be found. Make sure you have types for the appropriate package installed.": { - "category": "Error", - "code": 2875 - }, - "This relative import path is unsafe to rewrite because it looks like a file name, but actually resolves to \"{0}\".": { - "category": "Error", - "code": 2876 - }, - "This import uses a '{0}' extension to resolve to an input TypeScript file, but will not be rewritten during emit because it is not a relative path.": { - "category": "Error", - "code": 2877 - }, - "This import path is unsafe to rewrite because it resolves to another project, and the relative path between the projects' output files is not the same as the relative path between its input files.": { - "category": "Error", - "code": 2878 - }, - "Using JSX fragments requires fragment factory '{0}' to be in scope, but it could not be found.": { - "category": "Error", - "code": 2879 - }, - "Import assertions have been replaced by import attributes. Use 'with' instead of 'assert'.": { - "category": "Error", - "code": 2880 - }, - "This expression is never nullish.": { - "category": "Error", - "code": 2881 - }, - "Cannot find module or type declarations for side-effect import of '{0}'.": { - "category": "Error", - "code": 2882 - }, - "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.": { - "category": "Error", - "code": 2883 - }, - - "Import declaration '{0}' is using private name '{1}'.": { - "category": "Error", - "code": 4000 - }, - "Type parameter '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4002 - }, - "Type parameter '{0}' of exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4004 - }, - "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4006 - }, - "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4008 - }, - "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4010 - }, - "Type parameter '{0}' of public method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4012 - }, - "Type parameter '{0}' of method from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4014 - }, - "Type parameter '{0}' of exported function has or is using private name '{1}'.": { - "category": "Error", - "code": 4016 - }, - "Implements clause of exported class '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4019 - }, - "'extends' clause of exported class '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4020 - }, - "'extends' clause of exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 4021 - }, - "'extends' clause of exported interface '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4022 - }, - "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4023 - }, - "Exported variable '{0}' has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4024 - }, - "Exported variable '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4025 - }, - "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4026 - }, - "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4027 - }, - "Public static property '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4028 - }, - "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4029 - }, - "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4030 - }, - "Public property '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4031 - }, - "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4032 - }, - "Property '{0}' of exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4033 - }, - "Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4034 - }, - "Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4035 - }, - "Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4036 - }, - "Parameter type of public setter '{0}' from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4037 - }, - "Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4038 - }, - "Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4039 - }, - "Return type of public static getter '{0}' from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4040 - }, - "Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4041 - }, - "Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4042 - }, - "Return type of public getter '{0}' from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4043 - }, - "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4044 - }, - "Return type of constructor signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 4045 - }, - "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4046 - }, - "Return type of call signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 4047 - }, - "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4048 - }, - "Return type of index signature from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 4049 - }, - "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 4050 - }, - "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4051 - }, - "Return type of public static method from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 4052 - }, - "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 4053 - }, - "Return type of public method from exported class has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4054 - }, - "Return type of public method from exported class has or is using private name '{0}'.": { - "category": "Error", - "code": 4055 - }, - "Return type of method from exported interface has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4056 - }, - "Return type of method from exported interface has or is using private name '{0}'.": { - "category": "Error", - "code": 4057 - }, - "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.": { - "category": "Error", - "code": 4058 - }, - "Return type of exported function has or is using name '{0}' from private module '{1}'.": { - "category": "Error", - "code": 4059 - }, - "Return type of exported function has or is using private name '{0}'.": { - "category": "Error", - "code": 4060 - }, - "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4061 - }, - "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4062 - }, - "Parameter '{0}' of constructor from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4063 - }, - "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4064 - }, - "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4065 - }, - "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4066 - }, - "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4067 - }, - "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4068 - }, - "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4069 - }, - "Parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4070 - }, - "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4071 - }, - "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4072 - }, - "Parameter '{0}' of public method from exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4073 - }, - "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4074 - }, - "Parameter '{0}' of method from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4075 - }, - "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4076 - }, - "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4077 - }, - "Parameter '{0}' of exported function has or is using private name '{1}'.": { - "category": "Error", - "code": 4078 - }, - "Exported type alias '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4081 - }, - "Default export of the module has or is using private name '{0}'.": { - "category": "Error", - "code": 4082 - }, - "Type parameter '{0}' of exported type alias has or is using private name '{1}'.": { - "category": "Error", - "code": 4083 - }, - "Exported type alias '{0}' has or is using private name '{1}' from module {2}.": { - "category": "Error", - "code": 4084 - }, - "Extends clause for inferred type '{0}' has or is using private name '{1}'.": { - "category": "Error", - "code": 4085 - }, - "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4091 - }, - "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4092 - }, - "Property '{0}' of exported anonymous class type may not be private or protected.": { - "category": "Error", - "code": 4094 - }, - "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4095 - }, - "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4096 - }, - "Public static method '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4097 - }, - "Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { - "category": "Error", - "code": 4098 - }, - "Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4099 - }, - "Public method '{0}' of exported class has or is using private name '{1}'.": { - "category": "Error", - "code": 4100 - }, - "Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4101 - }, - "Method '{0}' of exported interface has or is using private name '{1}'.": { - "category": "Error", - "code": 4102 - }, - "Type parameter '{0}' of exported mapped object type is using private name '{1}'.": { - "category": "Error", - "code": 4103 - }, - "The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'.": { - "category": "Error", - "code": 4104 - }, - "Private or protected member '{0}' cannot be accessed on a type parameter.": { - "category": "Error", - "code": 4105 - }, - "Parameter '{0}' of accessor has or is using private name '{1}'.": { - "category": "Error", - "code": 4106 - }, - "Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'.": { - "category": "Error", - "code": 4107 - }, - "Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named.": { - "category": "Error", - "code": 4108 - }, - "Type arguments for '{0}' circularly reference themselves.": { - "category": "Error", - "code": 4109 - }, - "Tuple type arguments circularly reference themselves.": { - "category": "Error", - "code": 4110 - }, - "Property '{0}' comes from an index signature, so it must be accessed with ['{0}'].": { - "category": "Error", - "code": 4111 - }, - "This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class.": { - "category": "Error", - "code": 4112 - }, - "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'.": { - "category": "Error", - "code": 4113 - }, - "This member must have an 'override' modifier because it overrides a member in the base class '{0}'.": { - "category": "Error", - "code": 4114 - }, - "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'.": { - "category": "Error", - "code": 4115 - }, - "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'.": { - "category": "Error", - "code": 4116 - }, - "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 4117 - }, - "The type of this node cannot be serialized because its property '{0}' cannot be serialized.": { - "category": "Error", - "code": 4118 - }, - "This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": { - "category": "Error", - "code": 4119 - }, - "This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": { - "category": "Error", - "code": 4120 - }, - "This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class.": { - "category": "Error", - "code": 4121 - }, - "This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'.": { - "category": "Error", - "code": 4122 - }, - "This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 4123 - }, - "Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.": { - "category": "Error", - "code": 4124 - }, - "Each declaration of '{0}.{1}' differs in its value, where '{2}' was expected but '{3}' was given.": { - "category": "Error", - "code": 4125 - }, - "One value of '{0}.{1}' is the string '{2}', and the other is assumed to be an unknown numeric value.": { - "category": "Error", - "code": 4126 - }, - "This member cannot have an 'override' modifier because its name is dynamic.": { - "category": "Error", - "code": 4127 - }, - "This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.": { - "category": "Error", - "code": 4128 - }, - - "The current host does not support the '{0}' option.": { - "category": "Error", - "code": 5001 - }, - "Option '{0}' requires value to be greater than '{1}'.": { - "category": "Error", - "code": 5002 - }, - "Cannot find the common subdirectory path for the input files.": { - "category": "Error", - "code": 5009 - }, - "File specification cannot end in a recursive directory wildcard ('**'): '{0}'.": { - "category": "Error", - "code": 5010 - }, - "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.": { - "category": "Error", - "code": 5011 - }, - "Cannot read file '{0}': {1}.": { - "category": "Error", - "code": 5012 - }, - "Unknown compiler option '{0}'.": { - "category": "Error", - "code": 5023 - }, - "Compiler option '{0}' requires a value of type {1}.": { - "category": "Error", - "code": 5024 - }, - "Unknown compiler option '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 5025 - }, - "Could not write file '{0}': {1}.": { - "category": "Error", - "code": 5033 - }, - "Option 'project' cannot be mixed with source files on a command line.": { - "category": "Error", - "code": 5042 - }, - "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher.": { - "category": "Error", - "code": 5047 - }, - "Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided.": { - "category": "Error", - "code": 5051 - }, - "Option '{0}' cannot be specified without specifying option '{1}'.": { - "category": "Error", - "code": 5052 - }, - "Option '{0}' cannot be specified with option '{1}'.": { - "category": "Error", - "code": 5053 - }, - "A 'tsconfig.json' file is already defined at: '{0}'.": { - "category": "Error", - "code": 5054 - }, - "Cannot write file '{0}' because it would overwrite input file.": { - "category": "Error", - "code": 5055 - }, - "Cannot write file '{0}' because it would be overwritten by multiple input files.": { - "category": "Error", - "code": 5056 - }, - "Cannot find a tsconfig.json file at the specified directory: '{0}'.": { - "category": "Error", - "code": 5057 - }, - "The specified path does not exist: '{0}'.": { - "category": "Error", - "code": 5058 - }, - "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier.": { - "category": "Error", - "code": 5059 - }, - "Pattern '{0}' can have at most one '*' character.": { - "category": "Error", - "code": 5061 - }, - "Substitution '{0}' in pattern '{1}' can have at most one '*' character.": { - "category": "Error", - "code": 5062 - }, - "Substitutions for pattern '{0}' should be an array.": { - "category": "Error", - "code": 5063 - }, - "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'.": { - "category": "Error", - "code": 5064 - }, - "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'.": { - "category": "Error", - "code": 5065 - }, - "Substitutions for pattern '{0}' shouldn't be an empty array.": { - "category": "Error", - "code": 5066 - }, - "Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name.": { - "category": "Error", - "code": 5067 - }, - "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig.": { - "category": "Error", - "code": 5068 - }, - "Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'.": { - "category": "Error", - "code": 5069 - }, - "Option '--resolveJsonModule' cannot be specified when 'moduleResolution' is set to 'classic'.": { - "category": "Error", - "code": 5070 - }, - "Option '--resolveJsonModule' cannot be specified when 'module' is set to 'none', 'system', or 'umd'.": { - "category": "Error", - "code": 5071 - }, - "Unknown build option '{0}'.": { - "category": "Error", - "code": 5072 - }, - "Build option '{0}' requires a value of type {1}.": { - "category": "Error", - "code": 5073 - }, - "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.": { - "category": "Error", - "code": 5074 - }, - "'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'.": { - "category": "Error", - "code": 5075 - }, - "'{0}' and '{1}' operations cannot be mixed without parentheses.": { - "category": "Error", - "code": 5076 - }, - "Unknown build option '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 5077 - }, - "Unknown watch option '{0}'.": { - "category": "Error", - "code": 5078 - }, - "Unknown watch option '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 5079 - }, - "Watch option '{0}' requires a value of type {1}.": { - "category": "Error", - "code": 5080 - }, - "Cannot find a tsconfig.json file at the current directory: {0}.": { - "category": "Error", - "code": 5081 - }, - "'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'.": { - "category": "Error", - "code": 5082 - }, - "Cannot read file '{0}'.": { - "category": "Error", - "code": 5083 - }, - "A tuple member cannot be both optional and rest.": { - "category": "Error", - "code": 5085 - }, - "A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type.": { - "category": "Error", - "code": 5086 - }, - "A labeled tuple element is declared as rest with a '...' before the name, rather than before the type.": { - "category": "Error", - "code": 5087 - }, - "The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary.": { - "category": "Error", - "code": 5088 - }, - "Option '{0}' cannot be specified when option 'jsx' is '{1}'.": { - "category": "Error", - "code": 5089 - }, - "Non-relative paths are not allowed. Did you forget a leading './'?": { - "category": "Error", - "code": 5090 - }, - "Option 'preserveConstEnums' cannot be disabled when '{0}' is enabled.": { - "category": "Error", - "code": 5091 - }, - "The root value of a '{0}' file must be an object.": { - "category": "Error", - "code": 5092 - }, - "Compiler option '--{0}' may only be used with '--build'.": { - "category": "Error", - "code": 5093 - }, - "Compiler option '--{0}' may not be used with '--build'.": { - "category": "Error", - "code": 5094 - }, - "Option '{0}' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.": { - "category": "Error", - "code": 5095 - }, - "Option 'allowImportingTsExtensions' can only be used when one of 'noEmit', 'emitDeclarationOnly', or 'rewriteRelativeImportExtensions' is set.": { - "category": "Error", - "code": 5096 - }, - "An import path can only end with a '{0}' extension when 'allowImportingTsExtensions' is enabled.": { - "category": "Error", - "code": 5097 - }, - "Option '{0}' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'.": { - "category": "Error", - "code": 5098 - }, - "Option '{0}' is deprecated and will stop functioning in TypeScript {1}. Specify compilerOption '\"ignoreDeprecations\": \"{2}\"' to silence this error.": { - "category": "Error", - "code": 5101 - }, - "Option '{0}' has been removed. Please remove it from your configuration.": { - "category": "Error", - "code": 5102 - }, - "Invalid value for '--ignoreDeprecations'.": { - "category": "Error", - "code": 5103 - }, - "Option '{0}' is redundant and cannot be specified with option '{1}'.": { - "category": "Error", - "code": 5104 - }, - "Option 'verbatimModuleSyntax' cannot be used when 'module' is set to 'UMD', 'AMD', or 'System'.": { - "category": "Error", - "code": 5105 - }, - "Use '{0}' instead.": { - "category": "Message", - "code": 5106 - }, - "Option '{0}={1}' is deprecated and will stop functioning in TypeScript {2}. Specify compilerOption '\"ignoreDeprecations\": \"{3}\"' to silence this error.": { - "category": "Error", - "code": 5107 - }, - "Option '{0}={1}' has been removed. Please remove it from your configuration.": { - "category": "Error", - "code": 5108 - }, - "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'.": { - "category": "Error", - "code": 5109 - }, - "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'.": { - "category": "Error", - "code": 5110 - }, - "Visit https://aka.ms/ts6 for migration information.": { - "category": "Message", - "code": 5111 - }, - "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.": { - "category": "Error", - "code": 5112 - }, - "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.": { - "category": "Error", - "code": 5113 - }, - "Instantiations of type '{0}' appear infinitely circular.": { - "category": "Error", - "code": 5114 - }, - "Instantiations of the following types appear infinitely circular: {0}.": { - "category": "Error", - "code": 5115 - }, - - "Generates a sourcemap for each corresponding '.d.ts' file.": { - "category": "Message", - "code": 6000 - }, - "Concatenate and emit output to single file.": { - "category": "Message", - "code": 6001 - }, - "Generates corresponding '.d.ts' file.": { - "category": "Message", - "code": 6002 - }, - "Specify the location where debugger should locate TypeScript files instead of source locations.": { - "category": "Message", - "code": 6004 - }, - "Watch input files.": { - "category": "Message", - "code": 6005 - }, - "Redirect output structure to the directory.": { - "category": "Message", - "code": 6006 - }, - "Do not erase const enum declarations in generated code.": { - "category": "Message", - "code": 6007 - }, - "Do not emit outputs if any errors were reported.": { - "category": "Message", - "code": 6008 - }, - "Do not emit comments to output.": { - "category": "Message", - "code": 6009 - }, - "Do not emit outputs.": { - "category": "Message", - "code": 6010 - }, - "Allow default imports from modules with no default export. This does not affect code emit, just typechecking.": { - "category": "Message", - "code": 6011 - }, - "Skip type checking of declaration files.": { - "category": "Message", - "code": 6012 - }, - "Do not resolve the real path of symlinks.": { - "category": "Message", - "code": 6013 - }, - "Only emit '.d.ts' declaration files.": { - "category": "Message", - "code": 6014 - }, - "Specify ECMAScript target version.": { - "category": "Message", - "code": 6015 - }, - "Specify module code generation.": { - "category": "Message", - "code": 6016 - }, - "Print this message.": { - "category": "Message", - "code": 6017 - }, - "Print the compiler's version.": { - "category": "Message", - "code": 6019 - }, - "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.": { - "category": "Message", - "code": 6020 - }, - "Syntax: {0}": { - "category": "Message", - "code": 6023 - }, - "options": { - "category": "Message", - "code": 6024 - }, - "file": { - "category": "Message", - "code": 6025 - }, - "Examples: {0}": { - "category": "Message", - "code": 6026 - }, - "Options:": { - "category": "Message", - "code": 6027 - }, - "Version {0}": { - "category": "Message", - "code": 6029 - }, - "Insert command line options and files from a file.": { - "category": "Message", - "code": 6030 - }, - "Starting compilation in watch mode...": { - "category": "Message", - "code": 6031 - }, - "File change detected. Starting incremental compilation...": { - "category": "Message", - "code": 6032 - }, - "KIND": { - "category": "Message", - "code": 6034 - }, - "FILE": { - "category": "Message", - "code": 6035 - }, - "VERSION": { - "category": "Message", - "code": 6036 - }, - "LOCATION": { - "category": "Message", - "code": 6037 - }, - "DIRECTORY": { - "category": "Message", - "code": 6038 - }, - "STRATEGY": { - "category": "Message", - "code": 6039 - }, - "FILE OR DIRECTORY": { - "category": "Message", - "code": 6040 - }, - "Errors Files": { - "_locale_notes": "There is a double space, and the order cannot be changed (they're table headings) ^", - "category": "Message", - "code": 6041 - }, - "Generates corresponding '.map' file.": { - "category": "Message", - "code": 6043 - }, - "Compiler option '{0}' expects an argument.": { - "category": "Error", - "code": 6044 - }, - "Unterminated quoted string in response file '{0}'.": { - "category": "Error", - "code": 6045 - }, - "Argument for '{0}' option must be: {1}.": { - "category": "Error", - "code": 6046 - }, - "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.": { - "category": "Error", - "code": 6048 - }, - "Unable to open file '{0}'.": { - "category": "Error", - "code": 6050 - }, - "Corrupted locale file {0}.": { - "category": "Error", - "code": 6051 - }, - "Raise error on expressions and declarations with an implied 'any' type.": { - "category": "Message", - "code": 6052 - }, - "File '{0}' not found.": { - "category": "Error", - "code": 6053 - }, - "File '{0}' has an unsupported extension. The only supported extensions are {1}.": { - "category": "Error", - "code": 6054 - }, - "Suppress noImplicitAny errors for indexing objects lacking index signatures.": { - "category": "Message", - "code": 6055 - }, - "Do not emit declarations for code that has an '@internal' annotation.": { - "category": "Message", - "code": 6056 - }, - "Specify the root directory of input files. Use to control the output directory structure with --outDir.": { - "category": "Message", - "code": 6058 - }, - "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files.": { - "category": "Error", - "code": 6059 - }, - "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix).": { - "category": "Message", - "code": 6060 - }, - "NEWLINE": { - "category": "Message", - "code": 6061 - }, - "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line.": { - "category": "Error", - "code": 6064 - }, - "Enables experimental support for ES7 decorators.": { - "category": "Message", - "code": 6065 - }, - "Enables experimental support for emitting type metadata for decorators.": { - "category": "Message", - "code": 6066 - }, - "Initializes a TypeScript project and creates a tsconfig.json file.": { - "category": "Message", - "code": 6070 - }, - "Successfully created a tsconfig.json file.": { - "category": "Message", - "code": 6071 - }, - "Suppress excess property checks for object literals.": { - "category": "Message", - "code": 6072 - }, - "Stylize errors and messages using color and context (experimental).": { - "category": "Message", - "code": 6073 - }, - "Do not report errors on unused labels.": { - "category": "Message", - "code": 6074 - }, - "Report error when not all code paths in function return a value.": { - "category": "Message", - "code": 6075 - }, - "Report errors for fallthrough cases in switch statement.": { - "category": "Message", - "code": 6076 - }, - "Do not report errors on unreachable code.": { - "category": "Message", - "code": 6077 - }, - "Disallow inconsistently-cased references to the same file.": { - "category": "Message", - "code": 6078 - }, - "Specify library files to be included in the compilation.": { - "category": "Message", - "code": 6079 - }, - "Specify JSX code generation.": { - "category": "Message", - "code": 6080 - }, - "Only 'amd' and 'system' modules are supported alongside --{0}.": { - "category": "Error", - "code": 6082 - }, - "Base directory to resolve non-absolute module names.": { - "category": "Message", - "code": 6083 - }, - "[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit": { - "category": "Message", - "code": 6084 - }, - "Enable tracing of the name resolution process.": { - "category": "Message", - "code": 6085 - }, - "======== Resolving module '{0}' from '{1}'. ========": { - "category": "Message", - "code": 6086 - }, - "Explicitly specified module resolution kind: '{0}'.": { - "category": "Message", - "code": 6087 - }, - "Module resolution kind is not specified, using '{0}'.": { - "category": "Message", - "code": 6088 - }, - "======== Module name '{0}' was successfully resolved to '{1}'. ========": { - "category": "Message", - "code": 6089 - }, - "======== Module name '{0}' was not resolved. ========": { - "category": "Message", - "code": 6090 - }, - "'paths' option is specified, looking for a pattern to match module name '{0}'.": { - "category": "Message", - "code": 6091 - }, - "Module name '{0}', matched pattern '{1}'.": { - "category": "Message", - "code": 6092 - }, - "Trying substitution '{0}', candidate module location: '{1}'.": { - "category": "Message", - "code": 6093 - }, - "Resolving module name '{0}' relative to base url '{1}' - '{2}'.": { - "category": "Message", - "code": 6094 - }, - "Loading module as file / folder, candidate module location '{0}', target file types: {1}.": { - "category": "Message", - "code": 6095 - }, - "File '{0}' does not exist.": { - "category": "Message", - "code": 6096 - }, - "File '{0}' exists - use it as a name resolution result.": { - "category": "Message", - "code": 6097 - }, - "Loading module '{0}' from 'node_modules' folder, target file types: {1}.": { - "category": "Message", - "code": 6098 - }, - "Found 'package.json' at '{0}'.": { - "category": "Message", - "code": 6099 - }, - "'package.json' does not have a '{0}' field.": { - "category": "Message", - "code": 6100 - }, - "'package.json' has '{0}' field '{1}' that references '{2}'.": { - "category": "Message", - "code": 6101 - }, - "Allow javascript files to be compiled.": { - "category": "Message", - "code": 6102 - }, - "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'.": { - "category": "Message", - "code": 6104 - }, - "Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'.": { - "category": "Message", - "code": 6105 - }, - "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'.": { - "category": "Message", - "code": 6106 - }, - "'rootDirs' option is set, using it to resolve relative module name '{0}'.": { - "category": "Message", - "code": 6107 - }, - "Longest matching prefix for '{0}' is '{1}'.": { - "category": "Message", - "code": 6108 - }, - "Loading '{0}' from the root dir '{1}', candidate location '{2}'.": { - "category": "Message", - "code": 6109 - }, - "Trying other entries in 'rootDirs'.": { - "category": "Message", - "code": 6110 - }, - "Module resolution using 'rootDirs' has failed.": { - "category": "Message", - "code": 6111 - }, - "Do not emit 'use strict' directives in module output.": { - "category": "Message", - "code": 6112 - }, - "Enable strict null checks.": { - "category": "Message", - "code": 6113 - }, - "Unknown option 'excludes'. Did you mean 'exclude'?": { - "category": "Error", - "code": 6114 - }, - "Raise error on 'this' expressions with an implied 'any' type.": { - "category": "Message", - "code": 6115 - }, - "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========": { - "category": "Message", - "code": 6116 - }, - "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========": { - "category": "Message", - "code": 6119 - }, - "======== Type reference directive '{0}' was not resolved. ========": { - "category": "Message", - "code": 6120 - }, - "Resolving with primary search path '{0}'.": { - "category": "Message", - "code": 6121 - }, - "Root directory cannot be determined, skipping primary search paths.": { - "category": "Message", - "code": 6122 - }, - "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========": { - "category": "Message", - "code": 6123 - }, - "Type declaration files to be included in compilation.": { - "category": "Message", - "code": 6124 - }, - "Looking up in 'node_modules' folder, initial location '{0}'.": { - "category": "Message", - "code": 6125 - }, - "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder.": { - "category": "Message", - "code": 6126 - }, - "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========": { - "category": "Message", - "code": 6127 - }, - "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========": { - "category": "Message", - "code": 6128 - }, - "Resolving real path for '{0}', result '{1}'.": { - "category": "Message", - "code": 6130 - }, - "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'.": { - "category": "Error", - "code": 6131 - }, - "File name '{0}' has a '{1}' extension - stripping it.": { - "category": "Message", - "code": 6132 - }, - "'{0}' is declared but its value is never read.": { - "category": "Error", - "code": 6133, - "reportsUnnecessary": true - }, - "Report errors on unused locals.": { - "category": "Message", - "code": 6134 - }, - "Report errors on unused parameters.": { - "category": "Message", - "code": 6135 - }, - "The maximum dependency depth to search under node_modules and load JavaScript files.": { - "category": "Message", - "code": 6136 - }, - "Cannot import type declaration files. Consider importing '{0}' instead of '{1}'.": { - "category": "Error", - "code": 6137 - }, - "Property '{0}' is declared but its value is never read.": { - "category": "Error", - "code": 6138, - "reportsUnnecessary": true - }, - "Import emit helpers from 'tslib'.": { - "category": "Message", - "code": 6139 - }, - "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'.": { - "category": "Error", - "code": 6140 - }, - "Parse in strict mode and emit \"use strict\" for each source file.": { - "category": "Message", - "code": 6141 - }, - "Module '{0}' was resolved to '{1}', but '--jsx' is not set.": { - "category": "Error", - "code": 6142 - }, - "Module '{0}' was resolved as locally declared ambient module in file '{1}'.": { - "category": "Message", - "code": 6144 - }, - "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'.": { - "category": "Message", - "code": 6146 - }, - "Resolution for module '{0}' was found in cache from location '{1}'.": { - "category": "Message", - "code": 6147 - }, - "Directory '{0}' does not exist, skipping all lookups in it.": { - "category": "Message", - "code": 6148 - }, - "Show diagnostic information.": { - "category": "Message", - "code": 6149 - }, - "Show verbose diagnostic information.": { - "category": "Message", - "code": 6150 - }, - "Emit a single file with source maps instead of having a separate file.": { - "category": "Message", - "code": 6151 - }, - "Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set.": { - "category": "Message", - "code": 6152 - }, - "Transpile each file as a separate module (similar to 'ts.transpileModule').": { - "category": "Message", - "code": 6153 - }, - "Print names of generated files part of the compilation.": { - "category": "Message", - "code": 6154 - }, - "Print names of files part of the compilation.": { - "category": "Message", - "code": 6155 - }, - "The locale used when displaying messages to the user (e.g. 'en-us')": { - "category": "Message", - "code": 6156 - }, - "Do not generate custom helper functions like '__extends' in compiled output.": { - "category": "Message", - "code": 6157 - }, - "Do not include the default library file (lib.d.ts).": { - "category": "Message", - "code": 6158 - }, - "Do not add triple-slash references or imported modules to the list of compiled files.": { - "category": "Message", - "code": 6159 - }, - "[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files.": { - "category": "Message", - "code": 6160 - }, - "List of folders to include type definitions from.": { - "category": "Message", - "code": 6161 - }, - "Disable size limitations on JavaScript projects.": { - "category": "Message", - "code": 6162 - }, - "The character set of the input files.": { - "category": "Message", - "code": 6163 - }, - "Skipping module '{0}' that looks like an absolute URI, target file types: {1}.": { - "category": "Message", - "code": 6164 - }, - "Do not truncate error messages.": { - "category": "Message", - "code": 6165 - }, - "Output directory for generated declaration files.": { - "category": "Message", - "code": 6166 - }, - "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'.": { - "category": "Message", - "code": 6167 - }, - "List of root folders whose combined content represents the structure of the project at runtime.": { - "category": "Message", - "code": 6168 - }, - "Show all compiler options.": { - "category": "Message", - "code": 6169 - }, - "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file": { - "category": "Message", - "code": 6170 - }, - "Command-line Options": { - "category": "Message", - "code": 6171 - }, - "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5'.": { - "category": "Message", - "code": 6179 - }, - "Enable all strict type-checking options.": { - "category": "Message", - "code": 6180 - }, - "Scoped package detected, looking in '{0}'": { - "category": "Message", - "code": 6182 - }, - "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": { - "category": "Message", - "code": 6183 - }, - "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": { - "category": "Message", - "code": 6184 - }, - "Enable strict checking of function types.": { - "category": "Message", - "code": 6186 - }, - "Enable strict checking of property initialization in classes.": { - "category": "Message", - "code": 6187 - }, - "Numeric separators are not allowed here.": { - "category": "Error", - "code": 6188 - }, - "Multiple consecutive numeric separators are not permitted.": { - "category": "Error", - "code": 6189 - }, - "Whether to keep outdated console output in watch mode instead of clearing the screen.": { - "category": "Message", - "code": 6191 - }, - "All imports in import declaration are unused.": { - "category": "Error", - "code": 6192, - "reportsUnnecessary": true - }, - "Found 1 error. Watching for file changes.": { - "category": "Message", - "code": 6193 - }, - "Found {0} errors. Watching for file changes.": { - "category": "Message", - "code": 6194 - }, - "Resolve 'keyof' to string valued property names only (no numbers or symbols).": { - "category": "Message", - "code": 6195 - }, - "'{0}' is declared but never used.": { - "category": "Error", - "code": 6196, - "reportsUnnecessary": true - }, - "Include modules imported with '.json' extension": { - "category": "Message", - "code": 6197 - }, - "All destructured elements are unused.": { - "category": "Error", - "code": 6198, - "reportsUnnecessary": true - }, - "All variables are unused.": { - "category": "Error", - "code": 6199, - "reportsUnnecessary": true - }, - "Definitions of the following identifiers conflict with those in another file: {0}": { - "category": "Error", - "code": 6200 - }, - "Conflicts are in this file.": { - "category": "Message", - "code": 6201 - }, - "Project references may not form a circular graph. Cycle detected: {0}": { - "category": "Error", - "code": 6202 - }, - "'{0}' was also declared here.": { - "category": "Message", - "code": 6203 - }, - "and here.": { - "category": "Message", - "code": 6204 - }, - "All type parameters are unused.": { - "category": "Error", - "code": 6205 - }, - "'package.json' has a 'typesVersions' field with version-specific path mappings.": { - "category": "Message", - "code": 6206 - }, - "'package.json' does not have a 'typesVersions' entry that matches version '{0}'.": { - "category": "Message", - "code": 6207 - }, - "'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'.": { - "category": "Message", - "code": 6208 - }, - "'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range.": { - "category": "Message", - "code": 6209 - }, - "An argument for '{0}' was not provided.": { - "category": "Message", - "code": 6210 - }, - "An argument matching this binding pattern was not provided.": { - "category": "Message", - "code": 6211 - }, - "Did you mean to call this expression?": { - "category": "Message", - "code": 6212 - }, - "Did you mean to use 'new' with this expression?": { - "category": "Message", - "code": 6213 - }, - "Enable strict 'bind', 'call', and 'apply' methods on functions.": { - "category": "Message", - "code": 6214 - }, - "Using compiler options of project reference redirect '{0}'.": { - "category": "Message", - "code": 6215 - }, - "Found 1 error.": { - "category": "Message", - "code": 6216 - }, - "Found {0} errors.": { - "category": "Message", - "code": 6217 - }, - "======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========": { - "category": "Message", - "code": 6218 - }, - "======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========": { - "category": "Message", - "code": 6219 - }, - "'package.json' had a falsy '{0}' field.": { - "category": "Message", - "code": 6220 - }, - "Disable use of source files instead of declaration files from referenced projects.": { - "category": "Message", - "code": 6221 - }, - "Emit class fields with Define instead of Set.": { - "category": "Message", - "code": 6222 - }, - "Generates a CPU profile.": { - "category": "Message", - "code": 6223 - }, - "Disable solution searching for this project.": { - "category": "Message", - "code": 6224 - }, - "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.": { - "category": "Message", - "code": 6225 - }, - "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.": { - "category": "Message", - "code": 6226 - }, - "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.": { - "category": "Message", - "code": 6227 - }, - "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'.": { - "category": "Error", - "code": 6229 - }, - "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line.": { - "category": "Error", - "code": 6230 - }, - "Could not resolve the path '{0}' with the extensions: {1}.": { - "category": "Error", - "code": 6231 - }, - "Declaration augments declaration in another file. This cannot be serialized.": { - "category": "Error", - "code": 6232 - }, - "This is the declaration being augmented. Consider moving the augmenting declaration into the same file.": { - "category": "Error", - "code": 6233 - }, - "This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?": { - "category": "Error", - "code": 6234 - }, - "Disable loading referenced projects.": { - "category": "Message", - "code": 6235 - }, - "Arguments for the rest parameter '{0}' were not provided.": { - "category": "Error", - "code": 6236 - }, - "Generates an event trace and a list of types.": { - "category": "Message", - "code": 6237 - }, - "Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react": { - "category": "Error", - "code": 6238 - }, - "File '{0}' exists according to earlier cached lookups.": { - "category": "Message", - "code": 6239 - }, - "File '{0}' does not exist according to earlier cached lookups.": { - "category": "Message", - "code": 6240 - }, - "Resolution for type reference directive '{0}' was found in cache from location '{1}'.": { - "category": "Message", - "code": 6241 - }, - "======== Resolving type reference directive '{0}', containing file '{1}'. ========": { - "category": "Message", - "code": 6242 - }, - "Interpret optional property types as written, rather than adding 'undefined'.": { - "category": "Message", - "code": 6243 - }, - "Modules": { - "category": "Message", - "code": 6244 - }, - "File Management": { - "category": "Message", - "code": 6245 - }, - "Emit": { - "category": "Message", - "code": 6246 - }, - "JavaScript Support": { - "category": "Message", - "code": 6247 - }, - "Type Checking": { - "category": "Message", - "code": 6248 - }, - "Editor Support": { - "category": "Message", - "code": 6249 - }, - "Watch and Build Modes": { - "category": "Message", - "code": 6250 - }, - "Compiler Diagnostics": { - "category": "Message", - "code": 6251 - }, - "Interop Constraints": { - "category": "Message", - "code": 6252 - }, - "Backwards Compatibility": { - "category": "Message", - "code": 6253 - }, - "Language and Environment": { - "category": "Message", - "code": 6254 - }, - "Projects": { - "category": "Message", - "code": 6255 - }, - "Output Formatting": { - "category": "Message", - "code": 6256 - }, - "Completeness": { - "category": "Message", - "code": 6257 - }, - "'{0}' should be set inside the 'compilerOptions' object of the config json file": { - "category": "Error", - "code": 6258 - }, - "Found 1 error in {0}": { - "category": "Message", - "code": 6259 - }, - "Found {0} errors in the same file, starting at: {1}": { - "category": "Message", - "code": 6260 - }, - "Found {0} errors in {1} files.": { - "category": "Message", - "code": 6261 - }, - "File name '{0}' has a '{1}' extension - looking up '{2}' instead.": { - "category": "Message", - "code": 6262 - }, - "Module '{0}' was resolved to '{1}', but '--allowArbitraryExtensions' is not set.": { - "category": "Error", - "code": 6263 - }, - "Enable importing files with any extension, provided a declaration file is present.": { - "category": "Message", - "code": 6264 - }, - "Resolving type reference directive for program that specifies custom typeRoots, skipping lookup in 'node_modules' folder.": { - "category": "Message", - "code": 6265 - }, - "Option '{0}' can only be specified on command line.": { - "category": "Error", - "code": 6266 - }, - - "Directory '{0}' has no containing package.json scope. Imports will not resolve.": { - "category": "Message", - "code": 6270 - }, - "Import specifier '{0}' does not exist in package.json scope at path '{1}'.": { - "category": "Message", - "code": 6271 - }, - "Invalid import specifier '{0}' has no possible resolutions.": { - "category": "Message", - "code": 6272 - }, - "package.json scope '{0}' has no imports defined.": { - "category": "Message", - "code": 6273 - }, - "package.json scope '{0}' explicitly maps specifier '{1}' to null.": { - "category": "Message", - "code": 6274 - }, - "package.json scope '{0}' has invalid type for target of specifier '{1}'": { - "category": "Message", - "code": 6275 - }, - "Export specifier '{0}' does not exist in package.json scope at path '{1}'.": { - "category": "Message", - "code": 6276 - }, - "Resolution of non-relative name failed; trying with modern Node resolution features disabled to see if npm library needs configuration update.": { - "category": "Message", - "code": 6277 - }, - "There are types at '{0}', but this result could not be resolved when respecting package.json \"exports\". The '{1}' library may need to update its package.json or typings.": { - "category": "Message", - "code": 6278 - }, - "Resolution of non-relative name failed; trying with '--moduleResolution bundler' to see if project may need configuration update.": { - "category": "Message", - "code": 6279 - }, - "There are types at '{0}', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'.": { - "category": "Message", - "code": 6280 - }, - "'package.json' has a 'peerDependencies' field.": { - "category": "Message", - "code": 6281 - }, - "Found peerDependency '{0}' with '{1}' version.": { - "category": "Message", - "code": 6282 - }, - "Failed to find peerDependency '{0}'.": { - "category": "Message", - "code": 6283 - }, - "File Layout": { - "category": "Message", - "code": 6284 - }, - "Environment Settings": { - "category": "Message", - "code": 6285 - }, - "See also https://aka.ms/tsconfig/module": { - "category": "Message", - "code": 6286 - }, - "For nodejs:": { - "category": "Message", - "code": 6287 - }, - "and npm install -D @types/node": { - "category": "Message", - "code": 6290 - }, - "Other Outputs": { - "category": "Message", - "code": 6291 - }, - "Stricter Typechecking Options": { - "category": "Message", - "code": 6292 - }, - "Style Options": { - "category": "Message", - "code": 6293 - }, - "Recommended Options": { - "category": "Message", - "code": 6294 - }, - - "Enable project compilation": { - "category": "Message", - "code": 6302 - }, - "Composite projects may not disable declaration emit.": { - "category": "Error", - "code": 6304 - }, - "Output file '{0}' has not been built from source file '{1}'.": { - "category": "Error", - "code": 6305 - }, - "Referenced project '{0}' must have setting \"composite\": true.": { - "category": "Error", - "code": 6306 - }, - "File '{0}' is not listed within the file list of project '{1}'. Projects must list all files or use an 'include' pattern.": { - "category": "Error", - "code": 6307 - }, - "Referenced project '{0}' may not disable emit.": { - "category": "Error", - "code": 6310 - }, - "Project '{0}' is out of date because output '{1}' is older than input '{2}'": { - "category": "Message", - "code": 6350 - }, - "Project '{0}' is up to date because newest input '{1}' is older than output '{2}'": { - "category": "Message", - "code": 6351 - }, - "Project '{0}' is out of date because output file '{1}' does not exist": { - "category": "Message", - "code": 6352 - }, - "Failed to delete file '{0}'.": { - "category": "Message", - "code": 6353 - }, - "Project '{0}' is up to date with .d.ts files from its dependencies": { - "category": "Message", - "code": 6354 - }, - "Projects in this build: {0}": { - "category": "Message", - "code": 6355 - }, - "A non-dry build would delete the following files: {0}": { - "category": "Message", - "code": 6356 - }, - "A non-dry build would build project '{0}'": { - "category": "Message", - "code": 6357 - }, - "Building project '{0}'...": { - "category": "Message", - "code": 6358 - }, - "Updating output timestamps of project '{0}'...": { - "category": "Message", - "code": 6359 - }, - "Project '{0}' is up to date": { - "category": "Message", - "code": 6361 - }, - "Skipping build of project '{0}' because its dependency '{1}' has errors": { - "category": "Message", - "code": 6362 - }, - "Project '{0}' can't be built because its dependency '{1}' has errors": { - "category": "Message", - "code": 6363 - }, - "Build one or more projects and their dependencies, if out of date": { - "category": "Message", - "code": 6364 - }, - "Delete the outputs of all projects.": { - "category": "Message", - "code": 6365 - }, - "Show what would be built (or deleted, if specified with '--clean')": { - "category": "Message", - "code": 6367 - }, - "Option '--build' must be the first command line argument.": { - "category": "Error", - "code": 6369 - }, - "Options '{0}' and '{1}' cannot be combined.": { - "category": "Error", - "code": 6370 - }, - "Updating unchanged output timestamps of project '{0}'...": { - "category": "Message", - "code": 6371 - }, - "A non-dry build would update timestamps for output of project '{0}'": { - "category": "Message", - "code": 6374 - }, - "Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'": { - "category": "Error", - "code": 6377 - }, - "Composite projects may not disable incremental compilation.": { - "category": "Error", - "code": 6379 - }, - "Specify file to store incremental compilation information": { - "category": "Message", - "code": 6380 - }, - "Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'": { - "category": "Message", - "code": 6381 - }, - "Skipping build of project '{0}' because its dependency '{1}' was not built": { - "category": "Message", - "code": 6382 - }, - "Project '{0}' can't be built because its dependency '{1}' was not built": { - "category": "Message", - "code": 6383 - }, - "Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it.": { - "category": "Message", - "code": 6384 - }, - "'{0}' is deprecated.": { - "category": "Suggestion", - "code": 6385, - "reportsDeprecated": true - }, - "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found.": { - "category": "Message", - "code": 6386 - }, - "The signature '{0}' of '{1}' is deprecated.": { - "category": "Suggestion", - "code": 6387, - "reportsDeprecated": true - }, - "Project '{0}' is being forcibly rebuilt": { - "category": "Message", - "code": 6388 - }, - "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved.": { - "category": "Message", - "code": 6389 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": { - "category": "Message", - "code": 6390 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": { - "category": "Message", - "code": 6391 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved.": { - "category": "Message", - "code": 6392 - }, - "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": { - "category": "Message", - "code": 6393 - }, - "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": { - "category": "Message", - "code": 6394 - }, - "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": { - "category": "Message", - "code": 6395 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": { - "category": "Message", - "code": 6396 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": { - "category": "Message", - "code": 6397 - }, - "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": { - "category": "Message", - "code": 6398 - }, - "Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted": { - "category": "Message", - "code": 6399 - }, - "Project '{0}' is up to date but needs to update timestamps of output files that are older than input files": { - "category": "Message", - "code": 6400 - }, - "Project '{0}' is out of date because config file does not exist.": { - "category": "Message", - "code": 6401 - }, - "Resolving in {0} mode with conditions {1}.": { - "category": "Message", - "code": 6402 - }, - "Matched '{0}' condition '{1}'.": { - "category": "Message", - "code": 6403 - }, - "Using '{0}' subpath '{1}' with target '{2}'.": { - "category": "Message", - "code": 6404 - }, - "Saw non-matching condition '{0}'.": { - "category": "Message", - "code": 6405 - }, - "Project '{0}' is out of date because buildinfo file '{1}' indicates there is change in compilerOptions": { - "category": "Message", - "code": 6406 - }, - "Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set.": { - "category": "Message", - "code": 6407 - }, - "Use the package.json 'exports' field when resolving package imports.": { - "category": "Message", - "code": 6408 - }, - "Use the package.json 'imports' field when resolving imports.": { - "category": "Message", - "code": 6409 - }, - "Conditions to set in addition to the resolver-specific defaults when resolving imports.": { - "category": "Message", - "code": 6410 - }, - "`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`.": { - "category": "Message", - "code": 6411 - }, - "Project '{0}' is out of date because buildinfo file '{1}' indicates that file '{2}' was root file of compilation but not any more.": { - "category": "Message", - "code": 6412 - }, - "Entering conditional exports.": { - "category": "Message", - "code": 6413 - }, - "Resolved under condition '{0}'.": { - "category": "Message", - "code": 6414 - }, - "Failed to resolve under condition '{0}'.": { - "category": "Message", - "code": 6415 - }, - "Exiting conditional exports.": { - "category": "Message", - "code": 6416 - }, - "Searching all ancestor node_modules directories for preferred extensions: {0}.": { - "category": "Message", - "code": 6417 - }, - "Searching all ancestor node_modules directories for fallback extensions: {0}.": { - "category": "Message", - "code": 6418 - }, - "Project '{0}' is out of date because buildinfo file '{1}' indicates that program needs to report errors.": { - "category": "Message", - "code": 6419 - }, - "Project '{0}' is out of date because input '{1}' does not exist.": { - "category": "Message", - "code": 6420 - }, - "Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files.": { - "category": "Message", - "code": 6421 - }, - "Project '{0}' is out of date because it has errors.": { - "category": "Message", - "code": 6423 - }, - "Multiple 'module.exports' assignments cannot be serialized for declaration emit.": { - "category": "Error", - "code": 6424 - }, - "Nested CommonJS export constructs cannot be serialized for declaration emit.": { - "category": "Error", - "code": 6425 - }, - - "The expected type comes from property '{0}' which is declared here on type '{1}'": { - "category": "Message", - "code": 6500 - }, - "The expected type comes from this index signature.": { - "category": "Message", - "code": 6501 - }, - "The expected type comes from the return type of this signature.": { - "category": "Message", - "code": 6502 - }, - "Print names of files that are part of the compilation and then stop processing.": { - "category": "Message", - "code": 6503 - }, - "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?": { - "category": "Error", - "code": 6504 - }, - "Print names of files and the reason they are part of the compilation.": { - "category": "Message", - "code": 6505 - }, - "Consider adding a 'declare' modifier to this class.": { - "category": "Message", - "code": 6506 - }, - "Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files.": { - "category": "Message", - "code": 6600 - }, - "Allow 'import x from y' when a module doesn't have a default export.": { - "category": "Message", - "code": 6601 - }, - "Allow accessing UMD globals from modules.": { - "category": "Message", - "code": 6602 - }, - "Disable error reporting for unreachable code.": { - "category": "Message", - "code": 6603 - }, - "Disable error reporting for unused labels.": { - "category": "Message", - "code": 6604 - }, - "Ensure 'use strict' is always emitted.": { - "category": "Message", - "code": 6605 - }, - "Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it.": { - "category": "Message", - "code": 6606 - }, - "Specify the base directory to resolve non-relative module names.": { - "category": "Message", - "code": 6607 - }, - "No longer supported. In early versions, manually set the text encoding for reading files.": { - "category": "Message", - "code": 6608 - }, - "Enable error reporting in type-checked JavaScript files.": { - "category": "Message", - "code": 6609 - }, - "Enable constraints that allow a TypeScript project to be used with project references.": { - "category": "Message", - "code": 6611 - }, - "Generate .d.ts files from TypeScript and JavaScript files in your project.": { - "category": "Message", - "code": 6612 - }, - "Specify the output directory for generated declaration files.": { - "category": "Message", - "code": 6613 - }, - "Create sourcemaps for d.ts files.": { - "category": "Message", - "code": 6614 - }, - "Output compiler performance information after building.": { - "category": "Message", - "code": 6615 - }, - "Disables inference for type acquisition by looking at filenames in a project.": { - "category": "Message", - "code": 6616 - }, - "Reduce the number of projects loaded automatically by TypeScript.": { - "category": "Message", - "code": 6617 - }, - "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.": { - "category": "Message", - "code": 6618 - }, - "Opt a project out of multi-project reference checking when editing.": { - "category": "Message", - "code": 6619 - }, - "Disable preferring source files instead of declaration files when referencing composite projects.": { - "category": "Message", - "code": 6620 - }, - "Emit more compliant, but verbose and less performant JavaScript for iteration.": { - "category": "Message", - "code": 6621 - }, - "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.": { - "category": "Message", - "code": 6622 - }, - "Only output d.ts files and not JavaScript files.": { - "category": "Message", - "code": 6623 - }, - "Emit design-type metadata for decorated declarations in source files.": { - "category": "Message", - "code": 6624 - }, - "Disable the type acquisition for JavaScript projects": { - "category": "Message", - "code": 6625 - }, - "Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility.": { - "category": "Message", - "code": 6626 - }, - "Filters results from the `include` option.": { - "category": "Message", - "code": 6627 - }, - "Remove a list of directories from the watch process.": { - "category": "Message", - "code": 6628 - }, - "Remove a list of files from the watch mode's processing.": { - "category": "Message", - "code": 6629 - }, - "Enable experimental support for legacy experimental decorators.": { - "category": "Message", - "code": 6630 - }, - "Print files read during the compilation including why it was included.": { - "category": "Message", - "code": 6631 - }, - "Output more detailed compiler performance information after building.": { - "category": "Message", - "code": 6632 - }, - "Specify one or more path or node module references to base configuration files from which settings are inherited.": { - "category": "Message", - "code": 6633 - }, - "Specify what approach the watcher should use if the system runs out of native file watchers.": { - "category": "Message", - "code": 6634 - }, - "Include a list of files. This does not support glob patterns, as opposed to `include`.": { - "category": "Message", - "code": 6635 - }, - "Build all projects, including those that appear to be up to date.": { - "category": "Message", - "code": 6636 - }, - "Ensure that casing is correct in imports.": { - "category": "Message", - "code": 6637 - }, - "Emit a v8 CPU profile of the compiler run for debugging.": { - "category": "Message", - "code": 6638 - }, - "Allow importing helper functions from tslib once per project, instead of including them per-file.": { - "category": "Message", - "code": 6639 - }, - "Skip building downstream projects on error in upstream project.": { - "category": "Message", - "code": 6640 - }, - "Specify a list of glob patterns that match files to be included in compilation.": { - "category": "Message", - "code": 6641 - }, - "Save .tsbuildinfo files to allow for incremental compilation of projects.": { - "category": "Message", - "code": 6642 - }, - "Include sourcemap files inside the emitted JavaScript.": { - "category": "Message", - "code": 6643 - }, - "Include source code in the sourcemaps inside the emitted JavaScript.": { - "category": "Message", - "code": 6644 - }, - "Ensure that each file can be safely transpiled without relying on other imports.": { - "category": "Message", - "code": 6645 - }, - "Specify what JSX code is generated.": { - "category": "Message", - "code": 6646 - }, - "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'.": { - "category": "Message", - "code": 6647 - }, - "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.": { - "category": "Message", - "code": 6648 - }, - "Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'.": { - "category": "Message", - "code": 6649 - }, - "Make keyof only return strings instead of string, numbers or symbols. Legacy option.": { - "category": "Message", - "code": 6650 - }, - "Specify a set of bundled library declaration files that describe the target runtime environment.": { - "category": "Message", - "code": 6651 - }, - "Print the names of emitted files after a compilation.": { - "category": "Message", - "code": 6652 - }, - "Print all of the files read during the compilation.": { - "category": "Message", - "code": 6653 - }, - "Set the language of the messaging from TypeScript. This does not affect emit.": { - "category": "Message", - "code": 6654 - }, - "Specify the location where debugger should locate map files instead of generated locations.": { - "category": "Message", - "code": 6655 - }, - "Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'.": { - "category": "Message", - "code": 6656 - }, - "Specify what module code is generated.": { - "category": "Message", - "code": 6657 - }, - "Specify how TypeScript looks up a file from a given module specifier.": { - "category": "Message", - "code": 6658 - }, - "Set the newline character for emitting files.": { - "category": "Message", - "code": 6659 - }, - "Disable emitting files from a compilation.": { - "category": "Message", - "code": 6660 - }, - "Disable generating custom helper functions like '__extends' in compiled output.": { - "category": "Message", - "code": 6661 - }, - "Disable emitting files if any type checking errors are reported.": { - "category": "Message", - "code": 6662 - }, - "Disable truncating types in error messages.": { - "category": "Message", - "code": 6663 - }, - "Enable error reporting for fallthrough cases in switch statements.": { - "category": "Message", - "code": 6664 - }, - "Enable error reporting for expressions and declarations with an implied 'any' type.": { - "category": "Message", - "code": 6665 - }, - "Ensure overriding members in derived classes are marked with an override modifier.": { - "category": "Message", - "code": 6666 - }, - "Enable error reporting for codepaths that do not explicitly return in a function.": { - "category": "Message", - "code": 6667 - }, - "Enable error reporting when 'this' is given the type 'any'.": { - "category": "Message", - "code": 6668 - }, - "Disable adding 'use strict' directives in emitted JavaScript files.": { - "category": "Message", - "code": 6669 - }, - "Disable including any library files, including the default lib.d.ts.": { - "category": "Message", - "code": 6670 - }, - "Enforces using indexed accessors for keys declared using an indexed type.": { - "category": "Message", - "code": 6671 - }, - "Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project.": { - "category": "Message", - "code": 6672 - }, - "Disable strict checking of generic signatures in function types.": { - "category": "Message", - "code": 6673 - }, - "Add 'undefined' to a type when accessed using an index.": { - "category": "Message", - "code": 6674 - }, - "Enable error reporting when local variables aren't read.": { - "category": "Message", - "code": 6675 - }, - "Raise an error when a function parameter isn't read.": { - "category": "Message", - "code": 6676 - }, - "Deprecated setting. Use 'outFile' instead.": { - "category": "Message", - "code": 6677 - }, - "Specify an output folder for all emitted files.": { - "category": "Message", - "code": 6678 - }, - "Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output.": { - "category": "Message", - "code": 6679 - }, - "Specify a set of entries that re-map imports to additional lookup locations.": { - "category": "Message", - "code": 6680 - }, - "Specify a list of language service plugins to include.": { - "category": "Message", - "code": 6681 - }, - "Disable erasing 'const enum' declarations in generated code.": { - "category": "Message", - "code": 6682 - }, - "Disable resolving symlinks to their realpath. This correlates to the same flag in node.": { - "category": "Message", - "code": 6683 - }, - "Disable wiping the console in watch mode.": { - "category": "Message", - "code": 6684 - }, - "Enable color and formatting in TypeScript's output to make compiler errors easier to read.": { - "category": "Message", - "code": 6685 - }, - "Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit.": { - "category": "Message", - "code": 6686 - }, - "Specify an array of objects that specify paths for projects. Used in project references.": { - "category": "Message", - "code": 6687 - }, - "Disable emitting comments.": { - "category": "Message", - "code": 6688 - }, - "Enable importing .json files.": { - "category": "Message", - "code": 6689 - }, - "Specify the root folder within your source files.": { - "category": "Message", - "code": 6690 - }, - "Allow multiple folders to be treated as one when resolving modules.": { - "category": "Message", - "code": 6691 - }, - "Skip type checking .d.ts files that are included with TypeScript.": { - "category": "Message", - "code": 6692 - }, - "Skip type checking all .d.ts files.": { - "category": "Message", - "code": 6693 - }, - "Create source map files for emitted JavaScript files.": { - "category": "Message", - "code": 6694 - }, - "Specify the root path for debuggers to find the reference source code.": { - "category": "Message", - "code": 6695 - }, - "Check that the arguments for 'bind', 'call', and 'apply' methods match the original function.": { - "category": "Message", - "code": 6697 - }, - "When assigning functions, check to ensure parameters and the return values are subtype-compatible.": { - "category": "Message", - "code": 6698 - }, - "When type checking, take into account 'null' and 'undefined'.": { - "category": "Message", - "code": 6699 - }, - "Check for class properties that are declared but not set in the constructor.": { - "category": "Message", - "code": 6700 - }, - "Disable emitting declarations that have '@internal' in their JSDoc comments.": { - "category": "Message", - "code": 6701 - }, - "Disable reporting of excess property errors during the creation of object literals.": { - "category": "Message", - "code": 6702 - }, - "Suppress 'noImplicitAny' errors when indexing objects that lack index signatures.": { - "category": "Message", - "code": 6703 - }, - "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively.": { - "category": "Message", - "code": 6704 - }, - "Set the JavaScript language version for emitted JavaScript and include compatible library declarations.": { - "category": "Message", - "code": 6705 - }, - "Log paths used during the 'moduleResolution' process.": { - "category": "Message", - "code": 6706 - }, - "Specify the path to .tsbuildinfo incremental compilation file.": { - "category": "Message", - "code": 6707 - }, - "Specify options for automatic acquisition of declaration files.": { - "category": "Message", - "code": 6709 - }, - "Specify multiple folders that act like './node_modules/@types'.": { - "category": "Message", - "code": 6710 - }, - "Specify type package names to be included without being referenced in a source file.": { - "category": "Message", - "code": 6711 - }, - "Emit ECMAScript-standard-compliant class fields.": { - "category": "Message", - "code": 6712 - }, - "Enable verbose logging.": { - "category": "Message", - "code": 6713 - }, - "Specify how directories are watched on systems that lack recursive file-watching functionality.": { - "category": "Message", - "code": 6714 - }, - "Specify how the TypeScript watch mode works.": { - "category": "Message", - "code": 6715 - }, - "Require undeclared properties from index signatures to use element accesses.": { - "category": "Message", - "code": 6717 - }, - "Specify emit/checking behavior for imports that are only used for types.": { - "category": "Message", - "code": 6718 - }, - "Require sufficient annotation on exports so other tools can trivially generate declaration files.": { - "category": "Message", - "code": 6719 - }, - "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'.": { - "category": "Message", - "code": 6720 - }, - "Do not allow runtime constructs that are not part of ECMAScript.": { - "category": "Message", - "code": 6721 - }, - "Default catch clause variables as 'unknown' instead of 'any'.": { - "category": "Message", - "code": 6803 - }, - "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting.": { - "category": "Message", - "code": 6804 - }, - "Disable full type checking (only critical parse and emit errors will be reported).": { - "category": "Message", - "code": 6805 - }, - "Check side effect imports.": { - "category": "Message", - "code": 6806 - }, - "This operation can be simplified. This shift is identical to `{0} {1} {2}`.": { - "category": "Error", - "code": 6807 - }, - "Enable lib replacement.": { - "category": "Message", - "code": 6808 - }, - "Ensure types are ordered stably and deterministically across compilations.": { - "category": "Message", - "code": 6809 - }, - - "one of:": { - "category": "Message", - "code": 6900 - }, - "one or more:": { - "category": "Message", - "code": 6901 - }, - "type:": { - "category": "Message", - "code": 6902 - }, - "default:": { - "category": "Message", - "code": 6903 - }, - - "`true`, unless `strict` is `false`": { - "category": "Message", - "code": 6905 - }, - "`false`, unless `composite` is set": { - "category": "Message", - "code": 6906 - }, - "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified.": { - "category": "Message", - "code": 6907 - }, - "`[]` if `files` is specified, otherwise `[\"**/*\"]`": { - "category": "Message", - "code": 6908 - }, - "`true` if `composite`, `false` otherwise": { - "category": "Message", - "code": 6909 - }, - "`nodenext` if `module` is `nodenext`; `node16` if `module` is `node16` or `node18`; otherwise, `bundler`.": { - "category": "Message", - "code": 69010 - }, - "Computed from the list of input files": { - "category": "Message", - "code": 6911 - }, - "Platform specific": { - "category": "Message", - "code": 6912 - }, - "You can learn about all of the compiler options at {0}": { - "category": "Message", - "code": 6913 - }, - "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:": { - "category": "Message", - "code": 6914 - }, - "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}": { - "category": "Message", - "code": 6915 - }, - "COMMON COMMANDS": { - "category": "Message", - "code": 6916 - }, - "ALL COMPILER OPTIONS": { - "category": "Message", - "code": 6917 - }, - "WATCH OPTIONS": { - "category": "Message", - "code": 6918 - }, - "BUILD OPTIONS": { - "category": "Message", - "code": 6919 - }, - "COMMON COMPILER OPTIONS": { - "category": "Message", - "code": 6920 - }, - "COMMAND LINE FLAGS": { - "category": "Message", - "code": 6921 - }, - "tsc: The TypeScript Compiler": { - "category": "Message", - "code": 6922 - }, - "Compiles the current project (tsconfig.json in the working directory.)": { - "category": "Message", - "code": 6923 - }, - "Ignoring tsconfig.json, compiles the specified files with default compiler options.": { - "category": "Message", - "code": 6924 - }, - "Build a composite project in the working directory.": { - "category": "Message", - "code": 6925 - }, - "Creates a tsconfig.json with the recommended settings in the working directory.": { - "category": "Message", - "code": 6926 - }, - "Compiles the TypeScript project located at the specified path.": { - "category": "Message", - "code": 6927 - }, - "An expanded version of this information, showing all possible compiler options": { - "category": "Message", - "code": 6928 - }, - "Compiles the current project, with additional settings.": { - "category": "Message", - "code": 6929 - }, - "`true` for ES2022 and above, including ESNext.": { - "category": "Message", - "code": 6930 - }, - "List of file name suffixes to search when resolving a module.": { - "category": "Error", - "code": 6931 - }, - "`false`, unless `checkJs` is set": { - "category": "Message", - "code": 6932 - }, - "Do not print diagnostics.": { - "category": "Message", - "code": 6933 - }, - "Run in single threaded mode.": { - "category": "Message", - "code": 6934 - }, - "Generate pprof CPU/memory profiles to the given directory.": { - "category": "Message", - "code": 6935 - }, - "Set the number of checkers per project.": { - "category": "Message", - "code": 6936 - }, - "4, unless --singleThreaded is passed.": { - "category": "Message", - "code": 6937 - }, - "Set the number of projects to build concurrently.": { - "category": "Message", - "code": 6938 - }, - "Deduplicate packages with the same name and version.": { - "category": "Message", - "code": 6939 - }, - "Allow loading external content mapper plugins that execute code during compilation.": { - "category": "Message", - "code": 6940 - }, - - "Variable '{0}' implicitly has an '{1}' type.": { - "category": "Error", - "code": 7005 - }, - "Parameter '{0}' implicitly has an '{1}' type.": { - "category": "Error", - "code": 7006 - }, - "Member '{0}' implicitly has an '{1}' type.": { - "category": "Error", - "code": 7008 - }, - "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.": { - "category": "Error", - "code": 7009 - }, - "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type.": { - "category": "Error", - "code": 7010 - }, - "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type.": { - "category": "Error", - "code": 7011 - }, - "This overload implicitly returns the type '{0}' because it lacks a return type annotation.": { - "category": "Error", - "code": 7012 - }, - "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type.": { - "category": "Error", - "code": 7013 - }, - "Function type, which lacks return-type annotation, implicitly has an '{0}' return type.": { - "category": "Error", - "code": 7014 - }, - "Element implicitly has an 'any' type because index expression is not of type 'number'.": { - "category": "Error", - "code": 7015 - }, - "Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type.": { - "category": "Error", - "code": 7016 - }, - "Element implicitly has an 'any' type because type '{0}' has no index signature.": { - "category": "Error", - "code": 7017 - }, - "Object literal's property '{0}' implicitly has an '{1}' type.": { - "category": "Error", - "code": 7018 - }, - "Rest parameter '{0}' implicitly has an 'any[]' type.": { - "category": "Error", - "code": 7019 - }, - "Call signature, which lacks return-type annotation, implicitly has an 'any' return type.": { - "category": "Error", - "code": 7020 - }, - "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.": { - "category": "Error", - "code": 7022 - }, - "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.": { - "category": "Error", - "code": 7023 - }, - "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.": { - "category": "Error", - "code": 7024 - }, - "Generator implicitly has yield type '{0}'. Consider supplying a return type annotation.": { - "category": "Error", - "code": 7025 - }, - "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists.": { - "category": "Error", - "code": 7026 - }, - "Unreachable code detected.": { - "category": "Error", - "code": 7027, - "reportsUnnecessary": true - }, - "Unused label.": { - "category": "Error", - "code": 7028, - "reportsUnnecessary": true - }, - "Fallthrough case in switch.": { - "category": "Error", - "code": 7029 - }, - "Not all code paths return a value.": { - "category": "Error", - "code": 7030 - }, - "Binding element '{0}' implicitly has an '{1}' type.": { - "category": "Error", - "code": 7031 - }, - "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation.": { - "category": "Error", - "code": 7032 - }, - "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation.": { - "category": "Error", - "code": 7033 - }, - "Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined.": { - "category": "Error", - "code": 7034 - }, - "Try `npm i --save-dev @types/{1}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`": { - "category": "Error", - "code": 7035 - }, - "Dynamic import's specifier must be of type 'string', but here has type '{0}'.": { - "category": "Error", - "code": 7036 - }, - "Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'.": { - "category": "Message", - "code": 7037 - }, - "Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.": { - "category": "Message", - "code": 7038 - }, - "Mapped object type implicitly has an 'any' template type.": { - "category": "Error", - "code": 7039 - }, - "If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'": { - "category": "Error", - "code": 7040 - }, - "The containing arrow function captures the global value of 'this'.": { - "category": "Error", - "code": 7041 - }, - "Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used.": { - "category": "Error", - "code": 7042 - }, - "Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7043 - }, - "Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7044 - }, - "Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7045 - }, - "Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7046 - }, - "Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7047 - }, - "Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage.": { - "category": "Suggestion", - "code": 7048 - }, - "Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage.": { - "category": "Suggestion", - "code": 7049 - }, - "'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage.": { - "category": "Suggestion", - "code": 7050 - }, - "Parameter has a name but no type. Did you mean '{0}: {1}'?": { - "category": "Error", - "code": 7051 - }, - "Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?": { - "category": "Error", - "code": 7052 - }, - "Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'.": { - "category": "Error", - "code": 7053 - }, - "No index signature with a parameter of type '{0}' was found on type '{1}'.": { - "category": "Error", - "code": 7054 - }, - "'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type.": { - "category": "Error", - "code": 7055 - }, - "The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.": { - "category": "Error", - "code": 7056 - }, - "'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.": { - "category": "Error", - "code": 7057 - }, - "If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`": { - "category": "Error", - "code": 7058 - }, - "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.": { - "category": "Error", - "code": 7059 - }, - "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint.": { - "category": "Error", - "code": 7060 - }, - "A mapped type may not declare properties or methods.": { - "category": "Error", - "code": 7061 - }, - "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.": { - "category": "Error", - "code": 7080 - }, - - "You cannot rename this element.": { - "category": "Error", - "code": 8000 - }, - "You cannot rename elements that are defined in the standard TypeScript library.": { - "category": "Error", - "code": 8001 - }, - "'import ... =' can only be used in TypeScript files.": { - "category": "Error", - "code": 8002 - }, - "'export =' can only be used in TypeScript files.": { - "category": "Error", - "code": 8003 - }, - "Type parameter declarations can only be used in TypeScript files.": { - "category": "Error", - "code": 8004 - }, - "'implements' clauses can only be used in TypeScript files.": { - "category": "Error", - "code": 8005 - }, - "'{0}' declarations can only be used in TypeScript files.": { - "category": "Error", - "code": 8006 - }, - "Type aliases can only be used in TypeScript files.": { - "category": "Error", - "code": 8008 - }, - "The '{0}' modifier can only be used in TypeScript files.": { - "category": "Error", - "code": 8009 - }, - "Type annotations can only be used in TypeScript files.": { - "category": "Error", - "code": 8010 - }, - "Type arguments can only be used in TypeScript files.": { - "category": "Error", - "code": 8011 - }, - "Parameter modifiers can only be used in TypeScript files.": { - "category": "Error", - "code": 8012 - }, - "Non-null assertions can only be used in TypeScript files.": { - "category": "Error", - "code": 8013 - }, - "Type assertion expressions can only be used in TypeScript files.": { - "category": "Error", - "code": 8016 - }, - "Signature declarations can only be used in TypeScript files.": { - "category": "Error", - "code": 8017 - }, - "Report errors in .js files.": { - "category": "Message", - "code": 8019 - }, - "JSDoc types can only be used inside documentation comments.": { - "category": "Error", - "code": 8020 - }, - "JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags.": { - "category": "Error", - "code": 8021 - }, - "JSDoc '@{0}' is not attached to a class.": { - "category": "Error", - "code": 8022 - }, - "JSDoc '@{0} {1}' does not match the 'extends {2}' clause.": { - "category": "Error", - "code": 8023 - }, - "JSDoc '@param' tag has name '{0}', but there is no parameter with that name.": { - "category": "Error", - "code": 8024 - }, - "Class declarations cannot have more than one '@augments' or '@extends' tag.": { - "category": "Error", - "code": 8025 - }, - "Expected {0} type arguments; provide these with an '@extends' tag.": { - "category": "Error", - "code": 8026 - }, - "Expected {0}-{1} type arguments; provide these with an '@extends' tag.": { - "category": "Error", - "code": 8027 - }, - "JSDoc '...' may only appear in the last parameter of a signature.": { - "category": "Error", - "code": 8028 - }, - "JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type.": { - "category": "Error", - "code": 8029 - }, - "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.": { - "category": "Error", - "code": 8030 - }, - "You cannot rename a module via a global import.": { - "category": "Error", - "code": 8031 - }, - "Qualified name '{0}' is not allowed without a leading '@param {object} {1}'.": { - "category": "Error", - "code": 8032 - }, - "A JSDoc '@typedef' comment may not contain multiple '@type' tags.": { - "category": "Error", - "code": 8033 - }, - "The tag was first specified here.": { - "category": "Error", - "code": 8034 - }, - "You cannot rename elements that are defined in a 'node_modules' folder.": { - "category": "Error", - "code": 8035 - }, - "You cannot rename elements that are defined in another 'node_modules' folder.": { - "category": "Error", - "code": 8036 - }, - "Type satisfaction expressions can only be used in TypeScript files.": { - "category": "Error", - "code": 8037 - }, - "Decorators may not appear after 'export' or 'export default' if they also appear before 'export'.": { - "category": "Error", - "code": 8038 - }, - "A JSDoc '@template' tag may not follow a '@typedef', '@callback', or '@overload' tag": { - "category": "Error", - "code": 8039 - }, - "File rename is not supported by the editor": { - "category": "Error", - "code": 8040 - }, - - "Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit.": { - "category": "Error", - "code": 9005 - }, - "Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit.": { - "category": "Error", - "code": 9006 - }, - "Function must have an explicit return type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9007 - }, - "Method must have an explicit return type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9008 - }, - "At least one accessor must have an explicit type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9009 - }, - "Variable must have an explicit type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9010 - }, - "Parameter must have an explicit type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9011 - }, - "Property must have an explicit type annotation with --isolatedDeclarations.": { - "category": "Error", - "code": 9012 - }, - "Expression type can't be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9013 - }, - "Computed properties must be number or string literals, variables or dotted expressions with --isolatedDeclarations.": { - "category": "Error", - "code": 9014 - }, - "Objects that contain spread assignments can't be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9015 - }, - "Objects that contain shorthand properties can't be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9016 - }, - "Only const arrays can be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9017 - }, - "Arrays with spread elements can't inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9018 - }, - "Binding elements with initializers can't be exported directly with --isolatedDeclarations.": { - "category": "Error", - "code": 9019 - }, - "Enum member initializers must be computable without references to external symbols with --isolatedDeclarations.": { - "category": "Error", - "code": 9020 - }, - "Extends clause can't contain an expression with --isolatedDeclarations.": { - "category": "Error", - "code": 9021 - }, - "Inference from class expressions is not supported with --isolatedDeclarations.": { - "category": "Error", - "code": 9022 - }, - "Assigning properties to functions without declaring them is not supported with --isolatedDeclarations. Add an explicit declaration for the properties assigned to this function.": { - "category": "Error", - "code": 9023 - }, - "Declaration emit for this parameter requires implicitly adding undefined to its type. This is not supported with --isolatedDeclarations.": { - "category": "Error", - "code": 9025 - }, - "Declaration emit for this file requires preserving this import for augmentations. This is not supported with --isolatedDeclarations.": { - "category": "Error", - "code": 9026 - }, - "Add a type annotation to the variable {0}.": { - "category": "Error", - "code": 9027 - }, - "Add a type annotation to the parameter {0}.": { - "category": "Error", - "code": 9028 - }, - "Add a type annotation to the property {0}.": { - "category": "Error", - "code": 9029 - }, - "Add a return type to the function expression.": { - "category": "Error", - "code": 9030 - }, - "Add a return type to the function declaration.": { - "category": "Error", - "code": 9031 - }, - "Add a return type to the get accessor declaration.": { - "category": "Error", - "code": 9032 - }, - "Add a type to parameter of the set accessor declaration.": { - "category": "Error", - "code": 9033 - }, - "Add a return type to the method": { - "category": "Error", - "code": 9034 - }, - "Add satisfies and a type assertion to this expression (satisfies T as T) to make the type explicit.": { - "category": "Error", - "code": 9035 - }, - "Move the expression in default export to a variable and add a type annotation to it.": { - "category": "Error", - "code": 9036 - }, - "Default exports can't be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9037 - }, - "Computed property names on class or object literals cannot be inferred with --isolatedDeclarations.": { - "category": "Error", - "code": 9038 - }, - "Type containing private name '{0}' can't be used with --isolatedDeclarations.": { - "category": "Error", - "code": 9039 - }, - "JSX attributes must only be assigned a non-empty 'expression'.": { - "category": "Error", - "code": 17000 - }, - "JSX elements cannot have multiple attributes with the same name.": { - "category": "Error", - "code": 17001 - }, - "Expected corresponding JSX closing tag for '{0}'.": { - "category": "Error", - "code": 17002 - }, - "Cannot use JSX unless the '--jsx' flag is provided.": { - "category": "Error", - "code": 17004 - }, - "A constructor cannot contain a 'super' call when its class extends 'null'.": { - "category": "Error", - "code": 17005 - }, - "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { - "category": "Error", - "code": 17006 - }, - "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { - "category": "Error", - "code": 17007 - }, - "JSX element '{0}' has no corresponding closing tag.": { - "category": "Error", - "code": 17008 - }, - "'super' must be called before accessing 'this' in the constructor of a derived class.": { - "category": "Error", - "code": 17009 - }, - "Unknown type acquisition option '{0}'.": { - "category": "Error", - "code": 17010 - }, - "'super' must be called before accessing a property of 'super' in the constructor of a derived class.": { - "category": "Error", - "code": 17011 - }, - "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?": { - "category": "Error", - "code": 17012 - }, - "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor.": { - "category": "Error", - "code": 17013 - }, - "JSX fragment has no corresponding closing tag.": { - "category": "Error", - "code": 17014 - }, - "Expected corresponding closing tag for JSX fragment.": { - "category": "Error", - "code": 17015 - }, - "The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option.": { - "category": "Error", - "code": 17016 - }, - "An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments.": { - "category": "Error", - "code": 17017 - }, - "Unknown type acquisition option '{0}'. Did you mean '{1}'?": { - "category": "Error", - "code": 17018 - }, - "'{0}' at the end of a type is not valid TypeScript syntax. Did you mean to write '{1}'?": { - "category": "Error", - "code": 17019 - }, - "'{0}' at the start of a type is not valid TypeScript syntax. Did you mean to write '{1}'?": { - "category": "Error", - "code": 17020 - }, - "Unicode escape sequence cannot appear here.": { - "category": "Error", - "code": 17021 - }, - "Circularity detected while resolving configuration: {0}": { - "category": "Error", - "code": 18000 - }, - "The 'files' list in config file '{0}' is empty.": { - "category": "Error", - "code": 18002 - }, - "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'.": { - "category": "Error", - "code": 18003 - }, - - "File is a CommonJS module; it may be converted to an ES module.": { - "category": "Suggestion", - "code": 80001 - }, - "This constructor function may be converted to a class declaration.": { - "category": "Suggestion", - "code": 80002 - }, - "Import may be converted to a default import.": { - "category": "Suggestion", - "code": 80003 - }, - "JSDoc types may be moved to TypeScript types.": { - "category": "Suggestion", - "code": 80004 - }, - "'require' call may be converted to an import.": { - "category": "Suggestion", - "code": 80005 - }, - "This may be converted to an async function.": { - "category": "Suggestion", - "code": 80006 - }, - "'await' has no effect on the type of this expression.": { - "category": "Suggestion", - "code": 80007 - }, - "Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.": { - "category": "Suggestion", - "code": 80008 - }, - "JSDoc typedef may be converted to TypeScript type.": { - "category": "Suggestion", - "code": 80009 - }, - "JSDoc typedefs may be converted to TypeScript types.": { - "category": "Suggestion", - "code": 80010 - }, - - "Add missing 'super()' call": { - "category": "Message", - "code": 90001 - }, - "Make 'super()' call the first statement in the constructor": { - "category": "Message", - "code": 90002 - }, - "Change 'extends' to 'implements'": { - "category": "Message", - "code": 90003 - }, - "Remove unused declaration for: '{0}'": { - "category": "Message", - "code": 90004 - }, - "Remove import from '{0}'": { - "category": "Message", - "code": 90005 - }, - "Implement interface '{0}'": { - "category": "Message", - "code": 90006 - }, - "Implement inherited abstract class": { - "category": "Message", - "code": 90007 - }, - "Add '{0}.' to unresolved variable": { - "category": "Message", - "code": 90008 - }, - "Remove variable statement": { - "category": "Message", - "code": 90010 - }, - "Remove template tag": { - "category": "Message", - "code": 90011 - }, - "Remove type parameters": { - "category": "Message", - "code": 90012 - }, - "Import '{0}' from \"{1}\"": { - "category": "Message", - "code": 90013 - }, - "Change '{0}' to '{1}'": { - "category": "Message", - "code": 90014 - }, - "Declare property '{0}'": { - "category": "Message", - "code": 90016 - }, - "Add index signature for property '{0}'": { - "category": "Message", - "code": 90017 - }, - "Disable checking for this file": { - "category": "Message", - "code": 90018 - }, - "Ignore this error message": { - "category": "Message", - "code": 90019 - }, - "Initialize property '{0}' in the constructor": { - "category": "Message", - "code": 90020 - }, - "Initialize static property '{0}'": { - "category": "Message", - "code": 90021 - }, - "Change spelling to '{0}'": { - "category": "Message", - "code": 90022 - }, - "Declare method '{0}'": { - "category": "Message", - "code": 90023 - }, - "Declare static method '{0}'": { - "category": "Message", - "code": 90024 - }, - "Prefix '{0}' with an underscore": { - "category": "Message", - "code": 90025 - }, - "Rewrite as the indexed access type '{0}'": { - "category": "Message", - "code": 90026 - }, - "Declare static property '{0}'": { - "category": "Message", - "code": 90027 - }, - "Call decorator expression": { - "category": "Message", - "code": 90028 - }, - "Add async modifier to containing function": { - "category": "Message", - "code": 90029 - }, - "Replace 'infer {0}' with 'unknown'": { - "category": "Message", - "code": 90030 - }, - "Replace all unused 'infer' with 'unknown'": { - "category": "Message", - "code": 90031 - }, - "Add parameter name": { - "category": "Message", - "code": 90034 - }, - "Declare private property '{0}'": { - "category": "Message", - "code": 90035 - }, - "Replace '{0}' with 'Promise<{1}>'": { - "category": "Message", - "code": 90036 - }, - "Fix all incorrect return type of an async functions": { - "category": "Message", - "code": 90037 - }, - "Declare private method '{0}'": { - "category": "Message", - "code": 90038 - }, - "Remove unused destructuring declaration": { - "category": "Message", - "code": 90039 - }, - "Remove unused declarations for: '{0}'": { - "category": "Message", - "code": 90041 - }, - "Declare a private field named '{0}'.": { - "category": "Message", - "code": 90053 - }, - "Includes imports of types referenced by '{0}'": { - "category": "Message", - "code": 90054 - }, - "Remove 'type' from import declaration from \"{0}\"": { - "category": "Message", - "code": 90055 - }, - "Remove 'type' from import of '{0}' from \"{1}\"": { - "category": "Message", - "code": 90056 - }, - "Add import from \"{0}\"": { - "category": "Message", - "code": 90057 - }, - "Update import from \"{0}\"": { - "category": "Message", - "code": 90058 - }, - "Export '{0}' from module '{1}'": { - "category": "Message", - "code": 90059 - }, - "Export all referenced locals": { - "category": "Message", - "code": 90060 - }, - "Update modifiers of '{0}'": { - "category": "Message", - "code": 90061 - }, - "Add annotation of type '{0}'": { - "category": "Message", - "code": 90062 - }, - "Add return type '{0}'": { - "category": "Message", - "code": 90063 - }, - "Extract base class to variable": { - "category": "Message", - "code": 90064 - }, - "Extract default export to variable": { - "category": "Message", - "code": 90065 - }, - "Extract binding expressions to variable": { - "category": "Message", - "code": 90066 - }, - "Add all missing type annotations": { - "category": "Message", - "code": 90067 - }, - "Add satisfies and an inline type assertion with '{0}'": { - "category": "Message", - "code": 90068 - }, - "Extract to variable and replace with '{0} as typeof {0}'": { - "category": "Message", - "code": 90069 - }, - "Mark array literal as const": { - "category": "Message", - "code": 90070 - }, - "Annotate types of properties expando function in a namespace": { - "category": "Message", - "code": 90071 - }, - - "Convert function to an ES2015 class": { - "category": "Message", - "code": 95001 - }, - "Convert '{0}' to '{1} in {0}'": { - "category": "Message", - "code": 95003 - }, - "Extract to {0} in {1}": { - "category": "Message", - "code": 95004 - }, - "Extract function": { - "category": "Message", - "code": 95005 - }, - "Extract constant": { - "category": "Message", - "code": 95006 - }, - "Extract to {0} in enclosing scope": { - "category": "Message", - "code": 95007 - }, - "Extract to {0} in {1} scope": { - "category": "Message", - "code": 95008 - }, - "Annotate with type from JSDoc": { - "category": "Message", - "code": 95009 - }, - "Infer type of '{0}' from usage": { - "category": "Message", - "code": 95011 - }, - "Infer parameter types from usage": { - "category": "Message", - "code": 95012 - }, - "Convert to default import": { - "category": "Message", - "code": 95013 - }, - "Install '{0}'": { - "category": "Message", - "code": 95014 - }, - "Replace import with '{0}'.": { - "category": "Message", - "code": 95015 - }, - "Use synthetic 'default' member.": { - "category": "Message", - "code": 95016 - }, - "Convert to ES module": { - "category": "Message", - "code": 95017 - }, - "Add 'undefined' type to property '{0}'": { - "category": "Message", - "code": 95018 - }, - "Add initializer to property '{0}'": { - "category": "Message", - "code": 95019 - }, - "Add definite assignment assertion to property '{0}'": { - "category": "Message", - "code": 95020 - }, - "Convert all type literals to mapped type": { - "category": "Message", - "code": 95021 - }, - "Add all missing members": { - "category": "Message", - "code": 95022 - }, - "Infer all types from usage": { - "category": "Message", - "code": 95023 - }, - "Delete all unused declarations": { - "category": "Message", - "code": 95024 - }, - "Prefix all unused declarations with '_' where possible": { - "category": "Message", - "code": 95025 - }, - "Fix all detected spelling errors": { - "category": "Message", - "code": 95026 - }, - "Add initializers to all uninitialized properties": { - "category": "Message", - "code": 95027 - }, - "Add definite assignment assertions to all uninitialized properties": { - "category": "Message", - "code": 95028 - }, - "Add undefined type to all uninitialized properties": { - "category": "Message", - "code": 95029 - }, - "Change all jsdoc-style types to TypeScript": { - "category": "Message", - "code": 95030 - }, - "Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)": { - "category": "Message", - "code": 95031 - }, - "Implement all unimplemented interfaces": { - "category": "Message", - "code": 95032 - }, - "Install all missing types packages": { - "category": "Message", - "code": 95033 - }, - "Rewrite all as indexed access types": { - "category": "Message", - "code": 95034 - }, - "Convert all to default imports": { - "category": "Message", - "code": 95035 - }, - "Make all 'super()' calls the first statement in their constructor": { - "category": "Message", - "code": 95036 - }, - "Add qualifier to all unresolved variables matching a member name": { - "category": "Message", - "code": 95037 - }, - "Change all extended interfaces to 'implements'": { - "category": "Message", - "code": 95038 - }, - "Add all missing super calls": { - "category": "Message", - "code": 95039 - }, - "Implement all inherited abstract classes": { - "category": "Message", - "code": 95040 - }, - "Add all missing 'async' modifiers": { - "category": "Message", - "code": 95041 - }, - "Add '@ts-ignore' to all error messages": { - "category": "Message", - "code": 95042 - }, - "Annotate everything with types from JSDoc": { - "category": "Message", - "code": 95043 - }, - "Add '()' to all uncalled decorators": { - "category": "Message", - "code": 95044 - }, - "Convert all constructor functions to classes": { - "category": "Message", - "code": 95045 - }, - "Generate 'get' and 'set' accessors": { - "category": "Message", - "code": 95046 - }, - "Convert 'require' to 'import'": { - "category": "Message", - "code": 95047 - }, - "Convert all 'require' to 'import'": { - "category": "Message", - "code": 95048 - }, - "Move to a new file": { - "category": "Message", - "code": 95049 - }, - "Remove unreachable code": { - "category": "Message", - "code": 95050 - }, - "Remove all unreachable code": { - "category": "Message", - "code": 95051 - }, - "Add missing 'typeof'": { - "category": "Message", - "code": 95052 - }, - "Remove unused label": { - "category": "Message", - "code": 95053 - }, - "Remove all unused labels": { - "category": "Message", - "code": 95054 - }, - "Convert '{0}' to mapped object type": { - "category": "Message", - "code": 95055 - }, - "Convert namespace import to named imports": { - "category": "Message", - "code": 95056 - }, - "Convert named imports to namespace import": { - "category": "Message", - "code": 95057 - }, - "Add or remove braces in an arrow function": { - "category": "Message", - "code": 95058 - }, - "Add braces to arrow function": { - "category": "Message", - "code": 95059 - }, - "Remove braces from arrow function": { - "category": "Message", - "code": 95060 - }, - "Convert default export to named export": { - "category": "Message", - "code": 95061 - }, - "Convert named export to default export": { - "category": "Message", - "code": 95062 - }, - "Add missing enum member '{0}'": { - "category": "Message", - "code": 95063 - }, - "Add all missing imports": { - "category": "Message", - "code": 95064 - }, - "Convert to async function": { - "category": "Message", - "code": 95065 - }, - "Convert all to async functions": { - "category": "Message", - "code": 95066 - }, - "Add missing call parentheses": { - "category": "Message", - "code": 95067 - }, - "Add all missing call parentheses": { - "category": "Message", - "code": 95068 - }, - "Add 'unknown' conversion for non-overlapping types": { - "category": "Message", - "code": 95069 - }, - "Add 'unknown' to all conversions of non-overlapping types": { - "category": "Message", - "code": 95070 - }, - "Add missing 'new' operator to call": { - "category": "Message", - "code": 95071 - }, - "Add missing 'new' operator to all calls": { - "category": "Message", - "code": 95072 - }, - "Add names to all parameters without names": { - "category": "Message", - "code": 95073 - }, - "Enable the 'experimentalDecorators' option in your configuration file": { - "category": "Message", - "code": 95074 - }, - "Convert parameters to destructured object": { - "category": "Message", - "code": 95075 - }, - "Extract type": { - "category": "Message", - "code": 95077 - }, - "Extract to type alias": { - "category": "Message", - "code": 95078 - }, - "Extract to typedef": { - "category": "Message", - "code": 95079 - }, - "Infer 'this' type of '{0}' from usage": { - "category": "Message", - "code": 95080 - }, - "Add 'const' to unresolved variable": { - "category": "Message", - "code": 95081 - }, - "Add 'const' to all unresolved variables": { - "category": "Message", - "code": 95082 - }, - "Add 'await'": { - "category": "Message", - "code": 95083 - }, - "Add 'await' to initializer for '{0}'": { - "category": "Message", - "code": 95084 - }, - "Fix all expressions possibly missing 'await'": { - "category": "Message", - "code": 95085 - }, - "Remove unnecessary 'await'": { - "category": "Message", - "code": 95086 - }, - "Remove all unnecessary uses of 'await'": { - "category": "Message", - "code": 95087 - }, - "Enable the '--jsx' flag in your configuration file": { - "category": "Message", - "code": 95088 - }, - "Add 'await' to initializers": { - "category": "Message", - "code": 95089 - }, - "Extract to interface": { - "category": "Message", - "code": 95090 - }, - "Convert to a bigint numeric literal": { - "category": "Message", - "code": 95091 - }, - "Convert all to bigint numeric literals": { - "category": "Message", - "code": 95092 - }, - "Convert 'const' to 'let'": { - "category": "Message", - "code": 95093 - }, - "Prefix with 'declare'": { - "category": "Message", - "code": 95094 - }, - "Prefix all incorrect property declarations with 'declare'": { - "category": "Message", - "code": 95095 - }, - "Convert to template string": { - "category": "Message", - "code": 95096 - }, - "Add 'export {}' to make this file into a module": { - "category": "Message", - "code": 95097 - }, - "Set the 'target' option in your configuration file to '{0}'": { - "category": "Message", - "code": 95098 - }, - "Set the 'module' option in your configuration file to '{0}'": { - "category": "Message", - "code": 95099 - }, - "Convert invalid character to its html entity code": { - "category": "Message", - "code": 95100 - }, - "Convert all invalid characters to HTML entity code": { - "category": "Message", - "code": 95101 - }, - "Convert all 'const' to 'let'": { - "category": "Message", - "code": 95102 - }, - "Convert function expression '{0}' to arrow function": { - "category": "Message", - "code": 95105 - }, - "Convert function declaration '{0}' to arrow function": { - "category": "Message", - "code": 95106 - }, - "Fix all implicit-'this' errors": { - "category": "Message", - "code": 95107 - }, - "Wrap invalid character in an expression container": { - "category": "Message", - "code": 95108 - }, - "Wrap all invalid characters in an expression container": { - "category": "Message", - "code": 95109 - }, - "Visit https://aka.ms/tsconfig to read more about this file": { - "category": "Message", - "code": 95110 - }, - "Add a return statement": { - "category": "Message", - "code": 95111 - }, - "Remove braces from arrow function body": { - "category": "Message", - "code": 95112 - }, - "Wrap the following body with parentheses which should be an object literal": { - "category": "Message", - "code": 95113 - }, - "Add all missing return statement": { - "category": "Message", - "code": 95114 - }, - "Remove braces from all arrow function bodies with relevant issues": { - "category": "Message", - "code": 95115 - }, - "Wrap all object literal with parentheses": { - "category": "Message", - "code": 95116 - }, - "Move labeled tuple element modifiers to labels": { - "category": "Message", - "code": 95117 - }, - "Convert overload list to single signature": { - "category": "Message", - "code": 95118 - }, - "Generate 'get' and 'set' accessors for all overriding properties": { - "category": "Message", - "code": 95119 - }, - "Wrap in JSX fragment": { - "category": "Message", - "code": 95120 - }, - "Wrap all unparented JSX in JSX fragment": { - "category": "Message", - "code": 95121 - }, - "Convert arrow function or function expression": { - "category": "Message", - "code": 95122 - }, - "Convert to anonymous function": { - "category": "Message", - "code": 95123 - }, - "Convert to named function": { - "category": "Message", - "code": 95124 - }, - "Convert to arrow function": { - "category": "Message", - "code": 95125 - }, - "Remove parentheses": { - "category": "Message", - "code": 95126 - }, - "Could not find a containing arrow function": { - "category": "Message", - "code": 95127 - }, - "Containing function is not an arrow function": { - "category": "Message", - "code": 95128 - }, - "Could not find export statement": { - "category": "Message", - "code": 95129 - }, - "This file already has a default export": { - "category": "Message", - "code": 95130 - }, - "Could not find import clause": { - "category": "Message", - "code": 95131 - }, - "Could not find namespace import or named imports": { - "category": "Message", - "code": 95132 - }, - "Selection is not a valid type node": { - "category": "Message", - "code": 95133 - }, - "No type could be extracted from this type node": { - "category": "Message", - "code": 95134 - }, - "Could not find property for which to generate accessor": { - "category": "Message", - "code": 95135 - }, - "Name is not valid": { - "category": "Message", - "code": 95136 - }, - "Can only convert property with modifier": { - "category": "Message", - "code": 95137 - }, - "Switch each misused '{0}' to '{1}'": { - "category": "Message", - "code": 95138 - }, - "Convert to optional chain expression": { - "category": "Message", - "code": 95139 - }, - "Could not find convertible access expression": { - "category": "Message", - "code": 95140 - }, - "Could not find matching access expressions": { - "category": "Message", - "code": 95141 - }, - "Can only convert logical AND access chains": { - "category": "Message", - "code": 95142 - }, - "Add 'void' to Promise resolved without a value": { - "category": "Message", - "code": 95143 - }, - "Add 'void' to all Promises resolved without a value": { - "category": "Message", - "code": 95144 - }, - "Use element access for '{0}'": { - "category": "Message", - "code": 95145 - }, - "Use element access for all undeclared properties.": { - "category": "Message", - "code": 95146 - }, - "Delete all unused imports": { - "category": "Message", - "code": 95147 - }, - "Infer function return type": { - "category": "Message", - "code": 95148 - }, - "Return type must be inferred from a function": { - "category": "Message", - "code": 95149 - }, - "Could not determine function return type": { - "category": "Message", - "code": 95150 - }, - "Could not convert to arrow function": { - "category": "Message", - "code": 95151 - }, - "Could not convert to named function": { - "category": "Message", - "code": 95152 - }, - "Could not convert to anonymous function": { - "category": "Message", - "code": 95153 - }, - "Can only convert string concatenations and string literals": { - "category": "Message", - "code": 95154 - }, - "Selection is not a valid statement or statements": { - "category": "Message", - "code": 95155 - }, - "Add missing function declaration '{0}'": { - "category": "Message", - "code": 95156 - }, - "Add all missing function declarations": { - "category": "Message", - "code": 95157 - }, - "Method not implemented.": { - "category": "Message", - "code": 95158 - }, - "Function not implemented.": { - "category": "Message", - "code": 95159 - }, - "Add 'override' modifier": { - "category": "Message", - "code": 95160 - }, - "Remove 'override' modifier": { - "category": "Message", - "code": 95161 - }, - "Add all missing 'override' modifiers": { - "category": "Message", - "code": 95162 - }, - "Remove all unnecessary 'override' modifiers": { - "category": "Message", - "code": 95163 - }, - "Can only convert named export": { - "category": "Message", - "code": 95164 - }, - "Add missing properties": { - "category": "Message", - "code": 95165 - }, - "Add all missing properties": { - "category": "Message", - "code": 95166 - }, - "Add missing attributes": { - "category": "Message", - "code": 95167 - }, - "Add all missing attributes": { - "category": "Message", - "code": 95168 - }, - "Add 'undefined' to optional property type": { - "category": "Message", - "code": 95169 - }, - "Convert named imports to default import": { - "category": "Message", - "code": 95170 - }, - "Delete unused '@param' tag '{0}'": { - "category": "Message", - "code": 95171 - }, - "Delete all unused '@param' tags": { - "category": "Message", - "code": 95172 - }, - "Rename '@param' tag name '{0}' to '{1}'": { - "category": "Message", - "code": 95173 - }, - "Use `{0}`.": { - "category": "Message", - "code": 95174 - }, - "Use `Number.isNaN` in all conditions.": { - "category": "Message", - "code": 95175 - }, - "Convert typedef to TypeScript type.": { - "category": "Message", - "code": 95176 - }, - "Convert all typedef to TypeScript types.": { - "category": "Message", - "code": 95177 - }, - "Move to file": { - "category": "Message", - "code": 95178 - }, - "Cannot move to file, selected file is invalid": { - "category": "Message", - "code": 95179 - }, - "Use 'import type'": { - "category": "Message", - "code": 95180 - }, - "Use 'type {0}'": { - "category": "Message", - "code": 95181 - }, - "Fix all with type-only imports": { - "category": "Message", - "code": 95182 - }, - "Cannot move statements to the selected file": { - "category": "Message", - "code": 95183 - }, - "Inline variable": { - "category": "Message", - "code": 95184 - }, - "Could not find variable to inline.": { - "category": "Message", - "code": 95185 - }, - "Variables with multiple declarations cannot be inlined.": { - "category": "Message", - "code": 95186 - }, - "Add missing comma for object member completion '{0}'.": { - "category": "Message", - "code": 95187 - }, - "Add missing parameter to '{0}'": { - "category": "Message", - "code": 95188 - }, - "Add missing parameters to '{0}'": { - "category": "Message", - "code": 95189 - }, - "Add all missing parameters": { - "category": "Message", - "code": 95190 - }, - "Add optional parameter to '{0}'": { - "category": "Message", - "code": 95191 - }, - "Add optional parameters to '{0}'": { - "category": "Message", - "code": 95192 - }, - "Add all optional parameters": { - "category": "Message", - "code": 95193 - }, - "Wrap in parentheses": { - "category": "Message", - "code": 95194 - }, - "Wrap all invalid decorator expressions in parentheses": { - "category": "Message", - "code": 95195 - }, - "Add 'resolution-mode' import attribute": { - "category": "Message", - "code": 95196 - }, - "Add 'resolution-mode' import attribute to all type-only imports that need it": { - "category": "Message", - "code": 95197 - }, - "{0} references": { - "category": "Message", - "code": 95198 - }, - "1 reference": { - "category": "Message", - "code": 95199 - }, - "{0} implementations": { - "category": "Message", - "code": 95200 - }, - "1 implementation": { - "category": "Message", - "code": 95201 - }, - "Loading": { - "category": "Message", - "code": 95202 - }, - "Installing types for '{0}'": { - "category": "Message", - "code": 95203 - }, - "Project '{0}'": { - "category": "Message", - "code": 95204 - }, - "Fix All": { - "category": "Message", - "code": 95205 - }, - "Organize Imports": { - "category": "Message", - "code": 95206 - }, - "Remove Unused Imports": { - "category": "Message", - "code": 95207 - }, - "Sort Imports": { - "category": "Message", - "code": 95208 - }, - "JSDoc comment": { - "category": "Message", - "code": 95209 - }, - - "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer.": { - "category": "Error", - "code": 18004 - }, - "Classes may not have a field named 'constructor'.": { - "category": "Error", - "code": 18006 - }, - "JSX expressions may not use the comma operator. Did you mean to write an array?": { - "category": "Error", - "code": 18007 - }, - "Private identifiers cannot be used as parameters.": { - "category": "Error", - "code": 18009 - }, - "An accessibility modifier cannot be used with a private identifier.": { - "category": "Error", - "code": 18010 - }, - "The operand of a 'delete' operator cannot be a private identifier.": { - "category": "Error", - "code": 18011 - }, - "'#constructor' is a reserved word.": { - "category": "Error", - "code": 18012 - }, - "Property '{0}' is not accessible outside class '{1}' because it has a private identifier.": { - "category": "Error", - "code": 18013 - }, - "The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling.": { - "category": "Error", - "code": 18014 - }, - "Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'.": { - "category": "Error", - "code": 18015 - }, - "Private identifiers are not allowed outside class bodies.": { - "category": "Error", - "code": 18016 - }, - "The shadowing declaration of '{0}' is defined here": { - "category": "Error", - "code": 18017 - }, - "The declaration of '{0}' that you probably intended to use is defined here": { - "category": "Error", - "code": 18018 - }, - "'{0}' modifier cannot be used with a private identifier.": { - "category": "Error", - "code": 18019 - }, - "An enum member cannot be named with a private identifier.": { - "category": "Error", - "code": 18024 - }, - "'#!' can only be used at the start of a file.": { - "category": "Error", - "code": 18026 - }, - "Compiler reserves name '{0}' when emitting private identifier downlevel.": { - "category": "Error", - "code": 18027 - }, - "Private identifiers are only available when targeting ECMAScript 2015 and higher.": { - "category": "Error", - "code": 18028 - }, - "Private identifiers are not allowed in variable declarations.": { - "category": "Error", - "code": 18029 - }, - "An optional chain cannot contain private identifiers.": { - "category": "Error", - "code": 18030 - }, - "The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents.": { - "category": "Error", - "code": 18031 - }, - "The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some.": { - "category": "Error", - "code": 18032 - }, - "Type '{0}' is not assignable to type '{1}' as required for computed enum member values.": { - "category": "Error", - "code": 18033 - }, - "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'.": { - "category": "Message", - "code": 18034 - }, - "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name.": { - "category": "Error", - "code": 18035 - }, - "Class decorators can't be used with static private identifier. Consider removing the experimental decorator.": { - "category": "Error", - "code": 18036 - }, - "'await' expression cannot be used inside a class static block.": { - "category": "Error", - "code": 18037 - }, - "'for await' loops cannot be used inside a class static block.": { - "category": "Error", - "code": 18038 - }, - "Invalid use of '{0}'. It cannot be used inside a class static block.": { - "category": "Error", - "code": 18039 - }, - "A 'return' statement cannot be used inside a class static block.": { - "category": "Error", - "code": 18041 - }, - "'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation.": { - "category": "Error", - "code": 18042 - }, - "Types cannot appear in export declarations in JavaScript files.": { - "category": "Error", - "code": 18043 - }, - "'{0}' is automatically exported here.": { - "category": "Message", - "code": 18044 - }, - "Properties with the 'accessor' modifier are only available when targeting ECMAScript 2015 and higher.": { - "category": "Error", - "code": 18045 - }, - "'{0}' is of type 'unknown'.": { - "category": "Error", - "code": 18046 - }, - "'{0}' is possibly 'null'.": { - "category": "Error", - "code": 18047 - }, - "'{0}' is possibly 'undefined'.": { - "category": "Error", - "code": 18048 - }, - "'{0}' is possibly 'null' or 'undefined'.": { - "category": "Error", - "code": 18049 - }, - "The value '{0}' cannot be used here.": { - "category": "Error", - "code": 18050 - }, - "Compiler option '{0}' cannot be given an empty string.": { - "category": "Error", - "code": 18051 - }, - "Its type '{0}' is not a valid JSX element type.": { - "category": "Error", - "code": 18053 - }, - "'await using' statements cannot be used inside a class static block.": { - "category": "Error", - "code": 18054 - }, - "'{0}' has a string type, but must have syntactically recognizable string syntax when 'isolatedModules' is enabled.": { - "category": "Error", - "code": 18055 - }, - "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled.": { - "category": "Error", - "code": 18056 - }, - "String literal import and export names are not supported when the '--module' flag is set to 'es2015' or 'es2020'.": { - "category": "Error", - "code": 18057 - }, - "Default imports are not allowed in a deferred import.": { - "category": "Error", - "code": 18058 - }, - "Named imports are not allowed in a deferred import.": { - "category": "Error", - "code": 18059 - }, - "Deferred imports are only supported when the '--module' flag is set to 'esnext' or 'preserve'.": { - "category": "Error", - "code": 18060 - }, - "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?": { - "category": "Error", - "code": 18061 - }, - "Regular expression pattern modifiers are only available when targeting '{0}' or later.": { - "category": "Error", - "code": 18062 - }, - "Duplicate named capturing groups are only available when targeting '{0}' or later.": { - "category": "Error", - "code": 18063 - }, - "Private identifiers cannot be used in destructuring patterns.": { - "category": "Error", - "code": 18064 - }, - "Content mapper file extension '{0}' must begin with a '.'.": { - "category": "Error", - "code": 18065 - }, - "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.": { - "category": "Error", - "code": 18066 - }, - "Content mapper file extension '{0}' is registered by more than one content mapper.": { - "category": "Error", - "code": 18067 - }, - "Content mappers require the '--runExternalCode' command line flag to be enabled.": { - "category": "Error", - "code": 18068 - }, - "The content mapper '{0}' failed to transform this file.": { - "category": "Error", - "code": 18069 - }, - "The content mapper '{0}' failed {1} times and will not be used.": { - "category": "Error", - "code": 18070 - }, - "The content mapper '{0}' did not provide the required position mappings.": { - "category": "Error", - "code": 18071 - }, - "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).": { - "category": "Error", - "code": 18072 - }, - "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).": { - "category": "Error", - "code": 18073 - }, - "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.": { - "category": "Message", - "code": 18074 - }, - "The content mapper package '{0}' could not be resolved.": { - "category": "Error", - "code": 18075 - }, - "The 'package.json' of the content mapper package '{0}' could not be parsed.": { - "category": "Error", - "code": 18076 - }, - "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.": { - "category": "Error", - "code": 18077 - }, - "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.": { - "category": "Error", - "code": 18078 - }, - "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.": { - "category": "Error", - "code": 18079 - }, - "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.": { - "category": "Error", - "code": 18080 - }, - "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).": { - "category": "Error", - "code": 18081 - }, - "The content mapper '{0}' produced invalid mapping features near original offset {1}.": { - "category": "Error", - "code": 18082 - }, - "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).": { - "category": "Error", - "code": 18083 - }, - "The content mapper process could not be started or initialized.": { - "category": "Message", - "code": 18084 - }, - "The content mapper process failed while handling the transform request.": { - "category": "Message", - "code": 18085 - }, - "The content mapper returned an invalid transform response.": { - "category": "Message", - "code": 18086 - }, - "The content mapper selected unsupported position encoding '{0}'.": { - "category": "Message", - "code": 18087 - }, - "The content mapper diagnostic source must not be empty.": { - "category": "Message", - "code": 18088 - }, - "The content mapper diagnostic source '{0}' is reserved by TypeScript.": { - "category": "Message", - "code": 18089 - }, - "The content mapper returned a project response that could not be decoded.": { - "category": "Message", - "code": 18090 - }, - "The content mapper process failed while handling the project request.": { - "category": "Message", - "code": 18091 - }, - "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.": { - "category": "Message", - "code": 18092 - }, - "The content mapper returned a non-absolute path in 'watchedFiles'.": { - "category": "Message", - "code": 18093 - }, - "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.": { - "category": "Message", - "code": 18094 - }, - "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.": { - "category": "Message", - "code": 18095 - }, - "Content mapper supplemental output file '{0}' conflicts with an existing file.": { - "category": "Message", - "code": 18096 - }, - "Supplemental virtual file produced by the content mapper for file '{0}'.": { - "category": "Message", - "code": 18097 - }, - "The content mapper returned an output with unsupported virtual extension '{0}'.": { - "category": "Message", - "code": 18098 - }, - "The content mapper '{0}' could not be initialized.": { - "category": "Error", - "code": 18099 - }, - "The content mapper command '{0}' could not be started: {1}": { - "category": "Message", - "code": 18100 - }, - "The content mapper process exited before responding to the 'initialize' request (exit code {0}).": { - "category": "Message", - "code": 18101 - }, - "The content mapper did not respond to the 'initialize' request within {0} seconds.": { - "category": "Message", - "code": 18102 - }, - "The content mapper returned an 'initialize' response that could not be decoded: {0}": { - "category": "Message", - "code": 18103 - }, - "The content mapper's 'initialize' request failed: {0}": { - "category": "Message", - "code": 18104 - }, - "Diagnostic directive {0} returned by the content mapper has an invalid range.": { - "category": "Message", - "code": 18105 - }, - "The content mapper returned a diagnostic directive with invalid policy '{0}'.": { - "category": "Message", - "code": 18106 - }, - "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.": { - "category": "Message", - "code": 18107 - }, - "The content mapper returned diagnostic directives with overlapping virtual ranges.": { - "category": "Message", - "code": 18108 - }, - "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.": { - "category": "Message", - "code": 18109 - }, - "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.": { - "category": "Message", - "code": 18110 - }, - "A source phase import must specify a local binding.": { - "category": "Error", - "code": 18111 - }, - "Named and namespace imports are not allowed in a source phase import.": { - "category": "Error", - "code": 18112 - }, - "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.": { - "category": "Error", - "code": 18113 - }, - "Optional chaining cannot be used with 'import.source'.": { - "category": "Error", - "code": 18114 - }, - "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.": { - "category": "Error", - "code": 18115 - } -} +{ + "Unterminated string literal.": { + "category": "Error", + "code": 1002 + }, + "Identifier expected.": { + "category": "Error", + "code": 1003 + }, + "'{0}' expected.": { + "category": "Error", + "code": 1005 + }, + "A file cannot have a reference to itself.": { + "category": "Error", + "code": 1006 + }, + "The parser expected to find a '{1}' to match the '{0}' token here.": { + "category": "Error", + "code": 1007 + }, + "Trailing comma not allowed.": { + "category": "Error", + "code": 1009 + }, + "'*/' expected.": { + "category": "Error", + "code": 1010 + }, + "An element access expression should take an argument.": { + "category": "Error", + "code": 1011 + }, + "Unexpected token.": { + "category": "Error", + "code": 1012 + }, + "A rest parameter or binding pattern may not have a trailing comma.": { + "category": "Error", + "code": 1013 + }, + "A rest parameter must be last in a parameter list.": { + "category": "Error", + "code": 1014 + }, + "Parameter cannot have question mark and initializer.": { + "category": "Error", + "code": 1015 + }, + "A required parameter cannot follow an optional parameter.": { + "category": "Error", + "code": 1016 + }, + "An index signature cannot have a rest parameter.": { + "category": "Error", + "code": 1017 + }, + "An index signature parameter cannot have an accessibility modifier.": { + "category": "Error", + "code": 1018 + }, + "An index signature parameter cannot have a question mark.": { + "category": "Error", + "code": 1019 + }, + "An index signature parameter cannot have an initializer.": { + "category": "Error", + "code": 1020 + }, + "An index signature must have a type annotation.": { + "category": "Error", + "code": 1021 + }, + "An index signature parameter must have a type annotation.": { + "category": "Error", + "code": 1022 + }, + "'readonly' modifier can only appear on a property declaration or index signature.": { + "category": "Error", + "code": 1024 + }, + "An index signature cannot have a trailing comma.": { + "category": "Error", + "code": 1025 + }, + "Accessibility modifier already seen.": { + "category": "Error", + "code": 1028 + }, + "'{0}' modifier must precede '{1}' modifier.": { + "category": "Error", + "code": 1029 + }, + "'{0}' modifier already seen.": { + "category": "Error", + "code": 1030 + }, + "'{0}' modifier cannot appear on class elements of this kind.": { + "category": "Error", + "code": 1031 + }, + "'super' must be followed by an argument list or member access.": { + "category": "Error", + "code": 1034 + }, + "Only ambient modules can use quoted names.": { + "category": "Error", + "code": 1035 + }, + "Statements are not allowed in ambient contexts.": { + "category": "Error", + "code": 1036 + }, + "A 'declare' modifier cannot be used in an already ambient context.": { + "category": "Error", + "code": 1038 + }, + "Initializers are not allowed in ambient contexts.": { + "category": "Error", + "code": 1039 + }, + "'{0}' modifier cannot be used in an ambient context.": { + "category": "Error", + "code": 1040 + }, + "'{0}' modifier cannot be used here.": { + "category": "Error", + "code": 1042 + }, + "'{0}' modifier cannot appear on a module or namespace element.": { + "category": "Error", + "code": 1044 + }, + "Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier.": { + "category": "Error", + "code": 1046 + }, + "A rest parameter cannot be optional.": { + "category": "Error", + "code": 1047 + }, + "A rest parameter cannot have an initializer.": { + "category": "Error", + "code": 1048 + }, + "A 'set' accessor must have exactly one parameter.": { + "category": "Error", + "code": 1049 + }, + "A 'set' accessor cannot have an optional parameter.": { + "category": "Error", + "code": 1051 + }, + "A 'set' accessor parameter cannot have an initializer.": { + "category": "Error", + "code": 1052 + }, + "A 'set' accessor cannot have rest parameter.": { + "category": "Error", + "code": 1053 + }, + "A 'get' accessor cannot have parameters.": { + "category": "Error", + "code": 1054 + }, + "Type '{0}' is not a valid async function return type in ES5 because it does not refer to a Promise-compatible constructor value.": { + "category": "Error", + "code": 1055 + }, + "Accessors are only available when targeting ECMAScript 5 and higher.": { + "category": "Error", + "code": 1056 + }, + "The return type of an async function must either be a valid promise or must not contain a callable 'then' member.": { + "category": "Error", + "code": 1058 + }, + "A promise must have a 'then' method.": { + "category": "Error", + "code": 1059 + }, + "The first parameter of the 'then' method of a promise must be a callback.": { + "category": "Error", + "code": 1060 + }, + "Enum member must have initializer.": { + "category": "Error", + "code": 1061 + }, + "Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method.": { + "category": "Error", + "code": 1062 + }, + "An export assignment cannot be used in a namespace.": { + "category": "Error", + "code": 1063 + }, + "The return type of an async function or method must be the global Promise type. Did you mean to write 'Promise<{0}>'?": { + "category": "Error", + "code": 1064 + }, + "The return type of an async function or method must be the global Promise type.": { + "category": "Error", + "code": 1065 + }, + "In ambient enum declarations member initializer must be constant expression.": { + "category": "Error", + "code": 1066 + }, + "Unexpected token. A constructor, method, accessor, or property was expected.": { + "category": "Error", + "code": 1068 + }, + "Unexpected token. A type parameter name was expected without curly braces.": { + "category": "Error", + "code": 1069 + }, + "'{0}' modifier cannot appear on a type member.": { + "category": "Error", + "code": 1070 + }, + "'{0}' modifier cannot appear on an index signature.": { + "category": "Error", + "code": 1071 + }, + "A '{0}' modifier cannot be used with an import declaration.": { + "category": "Error", + "code": 1079 + }, + "Invalid 'reference' directive syntax.": { + "category": "Error", + "code": 1084 + }, + "'{0}' modifier cannot appear on a constructor declaration.": { + "category": "Error", + "code": 1089 + }, + "'{0}' modifier cannot appear on a parameter.": { + "category": "Error", + "code": 1090 + }, + "Only a single variable declaration is allowed in a 'for...in' statement.": { + "category": "Error", + "code": 1091 + }, + "Type parameters cannot appear on a constructor declaration.": { + "category": "Error", + "code": 1092 + }, + "Type annotation cannot appear on a constructor declaration.": { + "category": "Error", + "code": 1093 + }, + "An accessor cannot have type parameters.": { + "category": "Error", + "code": 1094 + }, + "A 'set' accessor cannot have a return type annotation.": { + "category": "Error", + "code": 1095 + }, + "An index signature must have exactly one parameter.": { + "category": "Error", + "code": 1096 + }, + "'{0}' list cannot be empty.": { + "category": "Error", + "code": 1097 + }, + "Type parameter list cannot be empty.": { + "category": "Error", + "code": 1098 + }, + "Type argument list cannot be empty.": { + "category": "Error", + "code": 1099 + }, + "Invalid use of '{0}' in strict mode.": { + "category": "Error", + "code": 1100 + }, + "'with' statements are not allowed in strict mode.": { + "category": "Error", + "code": 1101 + }, + "'delete' cannot be called on an identifier in strict mode.": { + "category": "Error", + "code": 1102 + }, + "'for await' loops are only allowed within async functions and at the top levels of modules.": { + "category": "Error", + "code": 1103 + }, + "A 'continue' statement can only be used within an enclosing iteration statement.": { + "category": "Error", + "code": 1104 + }, + "A 'break' statement can only be used within an enclosing iteration or switch statement.": { + "category": "Error", + "code": 1105 + }, + "The left-hand side of a 'for...of' statement may not be 'async'.": { + "category": "Error", + "code": 1106 + }, + "Jump target cannot cross function boundary.": { + "category": "Error", + "code": 1107 + }, + "A 'return' statement can only be used within a function body.": { + "category": "Error", + "code": 1108 + }, + "Expression expected.": { + "category": "Error", + "code": 1109 + }, + "Type expected.": { + "category": "Error", + "code": 1110 + }, + "Private field '{0}' must be declared in an enclosing class.": { + "category": "Error", + "code": 1111 + }, + "A 'default' clause cannot appear more than once in a 'switch' statement.": { + "category": "Error", + "code": 1113 + }, + "Duplicate label '{0}'.": { + "category": "Error", + "code": 1114 + }, + "A 'continue' statement can only jump to a label of an enclosing iteration statement.": { + "category": "Error", + "code": 1115 + }, + "A 'break' statement can only jump to a label of an enclosing statement.": { + "category": "Error", + "code": 1116 + }, + "An object literal cannot have multiple properties with the same name.": { + "category": "Error", + "code": 1117 + }, + "An object literal cannot have multiple get/set accessors with the same name.": { + "category": "Error", + "code": 1118 + }, + "An object literal cannot have property and accessor with the same name.": { + "category": "Error", + "code": 1119 + }, + "An export assignment cannot have modifiers.": { + "category": "Error", + "code": 1120 + }, + "Octal literals are not allowed. Use the syntax '{0}'.": { + "category": "Error", + "code": 1121 + }, + "Variable declaration list cannot be empty.": { + "category": "Error", + "code": 1123 + }, + "Digit expected.": { + "category": "Error", + "code": 1124 + }, + "Hexadecimal digit expected.": { + "category": "Error", + "code": 1125 + }, + "Unexpected end of text.": { + "category": "Error", + "code": 1126 + }, + "Invalid character.": { + "category": "Error", + "code": 1127 + }, + "Declaration or statement expected.": { + "category": "Error", + "code": 1128 + }, + "Statement expected.": { + "category": "Error", + "code": 1129 + }, + "'case' or 'default' expected.": { + "category": "Error", + "code": 1130 + }, + "Property or signature expected.": { + "category": "Error", + "code": 1131 + }, + "Enum member expected.": { + "category": "Error", + "code": 1132 + }, + "Variable declaration expected.": { + "category": "Error", + "code": 1134 + }, + "Argument expression expected.": { + "category": "Error", + "code": 1135 + }, + "Property assignment expected.": { + "category": "Error", + "code": 1136 + }, + "Expression or comma expected.": { + "category": "Error", + "code": 1137 + }, + "Parameter declaration expected.": { + "category": "Error", + "code": 1138 + }, + "Type parameter declaration expected.": { + "category": "Error", + "code": 1139 + }, + "Type argument expected.": { + "category": "Error", + "code": 1140 + }, + "String literal expected.": { + "category": "Error", + "code": 1141 + }, + "Line break not permitted here.": { + "category": "Error", + "code": 1142 + }, + "'{' or ';' expected.": { + "category": "Error", + "code": 1144 + }, + "'{' or JSX element expected.": { + "category": "Error", + "code": 1145 + }, + "Declaration expected.": { + "category": "Error", + "code": 1146 + }, + "Import declarations in a namespace cannot reference a module.": { + "category": "Error", + "code": 1147 + }, + "Cannot use imports, exports, or module augmentations when '--module' is 'none'.": { + "category": "Error", + "code": 1148 + }, + "File name '{0}' differs from already included file name '{1}' only in casing.": { + "category": "Error", + "code": 1149 + }, + "'{0}' declarations must be initialized.": { + "category": "Error", + "code": 1155 + }, + "'{0}' declarations can only be declared inside a block.": { + "category": "Error", + "code": 1156 + }, + "Unterminated template literal.": { + "category": "Error", + "code": 1160 + }, + "Unterminated regular expression literal.": { + "category": "Error", + "code": 1161 + }, + "An object member cannot be declared optional.": { + "category": "Error", + "code": 1162 + }, + "A 'yield' expression is only allowed in a generator body.": { + "category": "Error", + "code": 1163 + }, + "Computed property names are not allowed in enums.": { + "category": "Error", + "code": 1164 + }, + "A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type.": { + "category": "Error", + "code": 1165 + }, + "A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type.": { + "category": "Error", + "code": 1166 + }, + "A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type.": { + "category": "Error", + "code": 1168 + }, + "A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.": { + "category": "Error", + "code": 1169 + }, + "A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type.": { + "category": "Error", + "code": 1170 + }, + "A comma expression is not allowed in a computed property name.": { + "category": "Error", + "code": 1171 + }, + "'extends' clause already seen.": { + "category": "Error", + "code": 1172 + }, + "'extends' clause must precede 'implements' clause.": { + "category": "Error", + "code": 1173 + }, + "Classes can only extend a single class.": { + "category": "Error", + "code": 1174 + }, + "'implements' clause already seen.": { + "category": "Error", + "code": 1175 + }, + "Interface declaration cannot have 'implements' clause.": { + "category": "Error", + "code": 1176 + }, + "Binary digit expected.": { + "category": "Error", + "code": 1177 + }, + "Octal digit expected.": { + "category": "Error", + "code": 1178 + }, + "Unexpected token. '{' expected.": { + "category": "Error", + "code": 1179 + }, + "Property destructuring pattern expected.": { + "category": "Error", + "code": 1180 + }, + "Array element destructuring pattern expected.": { + "category": "Error", + "code": 1181 + }, + "A destructuring declaration must have an initializer.": { + "category": "Error", + "code": 1182 + }, + "An implementation cannot be declared in ambient contexts.": { + "category": "Error", + "code": 1183 + }, + "Modifiers cannot appear here.": { + "category": "Error", + "code": 1184 + }, + "Merge conflict marker encountered.": { + "category": "Error", + "code": 1185 + }, + "A rest element cannot have an initializer.": { + "category": "Error", + "code": 1186 + }, + "A parameter property may not be declared using a binding pattern.": { + "category": "Error", + "code": 1187 + }, + "Only a single variable declaration is allowed in a 'for...of' statement.": { + "category": "Error", + "code": 1188 + }, + "The variable declaration of a 'for...in' statement cannot have an initializer.": { + "category": "Error", + "code": 1189 + }, + "The variable declaration of a 'for...of' statement cannot have an initializer.": { + "category": "Error", + "code": 1190 + }, + "An import declaration cannot have modifiers.": { + "category": "Error", + "code": 1191 + }, + "Module '{0}' has no default export.": { + "category": "Error", + "code": 1192 + }, + "An export declaration cannot have modifiers.": { + "category": "Error", + "code": 1193 + }, + "Export declarations are not permitted in a namespace.": { + "category": "Error", + "code": 1194 + }, + "'export *' does not re-export a default.": { + "category": "Error", + "code": 1195 + }, + "Catch clause variable type annotation must be 'any' or 'unknown' if specified.": { + "category": "Error", + "code": 1196 + }, + "Catch clause variable cannot have an initializer.": { + "category": "Error", + "code": 1197 + }, + "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.": { + "category": "Error", + "code": 1198 + }, + "Unterminated Unicode escape sequence.": { + "category": "Error", + "code": 1199 + }, + "Line terminator not permitted before arrow.": { + "category": "Error", + "code": 1200 + }, + "Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead.": { + "category": "Error", + "code": 1202 + }, + "Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead.": { + "category": "Error", + "code": 1203 + }, + "Re-exporting a type when '{0}' is enabled requires using 'export type'.": { + "category": "Error", + "code": 1205 + }, + "Decorators are not valid here.": { + "category": "Error", + "code": 1206 + }, + "Decorators cannot be applied to multiple get/set accessors of the same name.": { + "category": "Error", + "code": 1207 + }, + "Invalid optional chain from new expression. Did you mean to call '{0}()'?": { + "category": "Error", + "code": 1209 + }, + "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.": { + "category": "Error", + "code": 1210 + }, + "A class declaration without the 'default' modifier must have a name.": { + "category": "Error", + "code": 1211 + }, + "Identifier expected. '{0}' is a reserved word in strict mode.": { + "category": "Error", + "code": 1212 + }, + "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode.": { + "category": "Error", + "code": 1213 + }, + "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode.": { + "category": "Error", + "code": 1214 + }, + "Invalid use of '{0}'. Modules are automatically in strict mode.": { + "category": "Error", + "code": 1215 + }, + "Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules.": { + "category": "Error", + "code": 1216 + }, + "Export assignment is not supported when '--module' flag is 'system'.": { + "category": "Error", + "code": 1218 + }, + "Generators are not allowed in an ambient context.": { + "category": "Error", + "code": 1221 + }, + "An overload signature cannot be declared as a generator.": { + "category": "Error", + "code": 1222 + }, + "'{0}' tag already specified.": { + "category": "Error", + "code": 1223 + }, + "Signature '{0}' must be a type predicate.": { + "category": "Error", + "code": 1224 + }, + "Cannot find parameter '{0}'.": { + "category": "Error", + "code": 1225 + }, + "Type predicate '{0}' is not assignable to '{1}'.": { + "category": "Error", + "code": 1226 + }, + "Parameter '{0}' is not in the same position as parameter '{1}'.": { + "category": "Error", + "code": 1227 + }, + "A type predicate is only allowed in return type position for functions and methods.": { + "category": "Error", + "code": 1228 + }, + "A type predicate cannot reference a rest parameter.": { + "category": "Error", + "code": 1229 + }, + "A type predicate cannot reference element '{0}' in a binding pattern.": { + "category": "Error", + "code": 1230 + }, + "An export assignment must be at the top level of a file or module declaration.": { + "category": "Error", + "code": 1231 + }, + "An import declaration can only be used at the top level of a namespace or module.": { + "category": "Error", + "code": 1232 + }, + "An export declaration can only be used at the top level of a namespace or module.": { + "category": "Error", + "code": 1233 + }, + "An ambient module declaration is only allowed at the top level in a file.": { + "category": "Error", + "code": 1234 + }, + "A namespace declaration is only allowed at the top level of a namespace or module.": { + "category": "Error", + "code": 1235 + }, + "The return type of a property decorator function must be either 'void' or 'any'.": { + "category": "Error", + "code": 1236 + }, + "The return type of a parameter decorator function must be either 'void' or 'any'.": { + "category": "Error", + "code": 1237 + }, + "Unable to resolve signature of class decorator when called as an expression.": { + "category": "Error", + "code": 1238 + }, + "Unable to resolve signature of parameter decorator when called as an expression.": { + "category": "Error", + "code": 1239 + }, + "Unable to resolve signature of property decorator when called as an expression.": { + "category": "Error", + "code": 1240 + }, + "Unable to resolve signature of method decorator when called as an expression.": { + "category": "Error", + "code": 1241 + }, + "'abstract' modifier can only appear on a class, method, or property declaration.": { + "category": "Error", + "code": 1242 + }, + "'{0}' modifier cannot be used with '{1}' modifier.": { + "category": "Error", + "code": 1243 + }, + "Abstract methods can only appear within an abstract class.": { + "category": "Error", + "code": 1244 + }, + "Method '{0}' cannot have an implementation because it is marked abstract.": { + "category": "Error", + "code": 1245 + }, + "An interface property cannot have an initializer.": { + "category": "Error", + "code": 1246 + }, + "A type literal property cannot have an initializer.": { + "category": "Error", + "code": 1247 + }, + "A class member cannot have the '{0}' keyword.": { + "category": "Error", + "code": 1248 + }, + "A decorator can only decorate a method implementation, not an overload.": { + "category": "Error", + "code": 1249 + }, + "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'.": { + "category": "Error", + "code": 1250 + }, + "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Class definitions are automatically in strict mode.": { + "category": "Error", + "code": 1251 + }, + "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Modules are automatically in strict mode.": { + "category": "Error", + "code": 1252 + }, + "Abstract properties can only appear within an abstract class.": { + "category": "Error", + "code": 1253 + }, + "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.": { + "category": "Error", + "code": 1254 + }, + "A definite assignment assertion '!' is not permitted in this context.": { + "category": "Error", + "code": 1255 + }, + "A required element cannot follow an optional element.": { + "category": "Error", + "code": 1257 + }, + "A default export must be at the top level of a file or module declaration.": { + "category": "Error", + "code": 1258 + }, + "Module '{0}' can only be default-imported using the '{1}' flag": { + "category": "Error", + "code": 1259 + }, + "Keywords cannot contain escape characters.": { + "category": "Error", + "code": 1260 + }, + "Already included file name '{0}' differs from file name '{1}' only in casing.": { + "category": "Error", + "code": 1261 + }, + "Identifier expected. '{0}' is a reserved word at the top-level of a module.": { + "category": "Error", + "code": 1262 + }, + "Declarations with initializers cannot also have definite assignment assertions.": { + "category": "Error", + "code": 1263 + }, + "Declarations with definite assignment assertions must also have type annotations.": { + "category": "Error", + "code": 1264 + }, + "A rest element cannot follow another rest element.": { + "category": "Error", + "code": 1265 + }, + "An optional element cannot follow a rest element.": { + "category": "Error", + "code": 1266 + }, + "Property '{0}' cannot have an initializer because it is marked abstract.": { + "category": "Error", + "code": 1267 + }, + "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type.": { + "category": "Error", + "code": 1268 + }, + "Cannot use 'export import' on a type or type-only namespace when '{0}' is enabled.": { + "category": "Error", + "code": 1269 + }, + "Decorator function return type '{0}' is not assignable to type '{1}'.": { + "category": "Error", + "code": 1270 + }, + "Decorator function return type is '{0}' but is expected to be 'void' or 'any'.": { + "category": "Error", + "code": 1271 + }, + "A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled.": { + "category": "Error", + "code": 1272 + }, + "'{0}' modifier cannot appear on a type parameter": { + "category": "Error", + "code": 1273 + }, + "'{0}' modifier can only appear on a type parameter of a class, interface or type alias": { + "category": "Error", + "code": 1274 + }, + "'accessor' modifier can only appear on a property declaration.": { + "category": "Error", + "code": 1275 + }, + "An 'accessor' property cannot be declared optional.": { + "category": "Error", + "code": 1276 + }, + "'{0}' modifier can only appear on a type parameter of a function, method or class": { + "category": "Error", + "code": 1277 + }, + "The runtime will invoke the decorator with {1} arguments, but the decorator expects {0}.": { + "category": "Error", + "code": 1278 + }, + "The runtime will invoke the decorator with {1} arguments, but the decorator expects at least {0}.": { + "category": "Error", + "code": 1279 + }, + "Namespaces are not allowed in global script files when '{0}' is enabled. If this file is not intended to be a global script, set 'moduleDetection' to 'force' or add an empty 'export {}' statement.": { + "category": "Error", + "code": 1280 + }, + "Cannot access '{0}' from another file without qualification when '{1}' is enabled. Use '{2}' instead.": { + "category": "Error", + "code": 1281 + }, + "An 'export =' declaration must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.": { + "category": "Error", + "code": 1282 + }, + "An 'export =' declaration must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.": { + "category": "Error", + "code": 1283 + }, + "An 'export default' must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.": { + "category": "Error", + "code": 1284 + }, + "An 'export default' must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.": { + "category": "Error", + "code": 1285 + }, + "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'.": { + "category": "Error", + "code": 1286 + }, + "A top-level 'export' modifier cannot be used on value declarations in a CommonJS module when 'verbatimModuleSyntax' is enabled.": { + "category": "Error", + "code": 1287 + }, + "An import alias cannot resolve to a type or type-only declaration when 'verbatimModuleSyntax' is enabled.": { + "category": "Error", + "code": 1288 + }, + "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported.": { + "category": "Error", + "code": 1289 + }, + "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'.": { + "category": "Error", + "code": 1290 + }, + "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported.": { + "category": "Error", + "code": 1291 + }, + "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'.": { + "category": "Error", + "code": 1292 + }, + "ECMAScript module syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'.": { + "category": "Error", + "code": 1293 + }, + "This syntax is not allowed when 'erasableSyntaxOnly' is enabled.": { + "category": "Error", + "code": 1294 + }, + "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'. Adjust the 'type' field in the nearest 'package.json' to make this file an ECMAScript module, or adjust your 'verbatimModuleSyntax', 'module', and 'moduleResolution' settings in TypeScript.": { + "category": "Error", + "code": 1295 + }, + "'with' statements are not allowed in an async function block.": { + "category": "Error", + "code": 1300 + }, + "'await' expressions are only allowed within async functions and at the top levels of modules.": { + "category": "Error", + "code": 1308 + }, + "The current file is a CommonJS module and cannot use 'await' at the top level.": { + "category": "Error", + "code": 1309 + }, + "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern.": { + "category": "Error", + "code": 1312 + }, + "The body of an 'if' statement cannot be the empty statement.": { + "category": "Error", + "code": 1313 + }, + "Global module exports may only appear in module files.": { + "category": "Error", + "code": 1314 + }, + "Global module exports may only appear in declaration files.": { + "category": "Error", + "code": 1315 + }, + "Global module exports may only appear at top level.": { + "category": "Error", + "code": 1316 + }, + "A parameter property cannot be declared using a rest parameter.": { + "category": "Error", + "code": 1317 + }, + "An abstract accessor cannot have an implementation.": { + "category": "Error", + "code": 1318 + }, + "A default export can only be used in an ECMAScript-style module.": { + "category": "Error", + "code": 1319 + }, + "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.": { + "category": "Error", + "code": 1320 + }, + "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member.": { + "category": "Error", + "code": 1321 + }, + "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member.": { + "category": "Error", + "code": 1322 + }, + "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20', or 'nodenext'.": { + "category": "Error", + "code": 1323 + }, + "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'node20', 'nodenext', or 'preserve'.": { + "category": "Error", + "code": 1324 + }, + "Argument of dynamic import cannot be spread element.": { + "category": "Error", + "code": 1325 + }, + "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments.": { + "category": "Error", + "code": 1326 + }, + "String literal with double quotes expected.": { + "category": "Error", + "code": 1327 + }, + "Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.": { + "category": "Error", + "code": 1328 + }, + "'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?": { + "category": "Error", + "code": 1329 + }, + "A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'.": { + "category": "Error", + "code": 1330 + }, + "A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'.": { + "category": "Error", + "code": 1331 + }, + "A variable whose type is a 'unique symbol' type must be 'const'.": { + "category": "Error", + "code": 1332 + }, + "'unique symbol' types may not be used on a variable declaration with a binding name.": { + "category": "Error", + "code": 1333 + }, + "'unique symbol' types are only allowed on variables in a variable statement.": { + "category": "Error", + "code": 1334 + }, + "'unique symbol' types are not allowed here.": { + "category": "Error", + "code": 1335 + }, + "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.": { + "category": "Error", + "code": 1337 + }, + "'infer' declarations are only permitted in the 'extends' clause of a conditional type.": { + "category": "Error", + "code": 1338 + }, + "Module '{0}' does not refer to a value, but is used as a value here.": { + "category": "Error", + "code": 1339 + }, + "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?": { + "category": "Error", + "code": 1340 + }, + "Class constructor may not be an accessor.": { + "category": "Error", + "code": 1341 + }, + "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', or 'nodenext'.": { + "category": "Error", + "code": 1343 + }, + "A label is not allowed here.": { + "category": "Error", + "code": 1344 + }, + "An expression of type 'void' cannot be tested for truthiness.": { + "category": "Error", + "code": 1345 + }, + "This parameter is not allowed with 'use strict' directive.": { + "category": "Error", + "code": 1346 + }, + "'use strict' directive cannot be used with non-simple parameter list.": { + "category": "Error", + "code": 1347 + }, + "Non-simple parameter declared here.": { + "category": "Error", + "code": 1348 + }, + "'use strict' directive used here.": { + "category": "Error", + "code": 1349 + }, + "Print the final configuration instead of building.": { + "category": "Message", + "code": 1350 + }, + "An identifier or keyword cannot immediately follow a numeric literal.": { + "category": "Error", + "code": 1351 + }, + "A bigint literal cannot use exponential notation.": { + "category": "Error", + "code": 1352 + }, + "A bigint literal must be an integer.": { + "category": "Error", + "code": 1353 + }, + "'readonly' type modifier is only permitted on array and tuple literal types.": { + "category": "Error", + "code": 1354 + }, + "A 'const' assertion can only be applied to references to enum members, or string, number, boolean, array, or object literals.": { + "category": "Error", + "code": 1355 + }, + "Did you mean to mark this function as 'async'?": { + "category": "Error", + "code": 1356 + }, + "An enum member name must be followed by a ',', '=', or '}'.": { + "category": "Error", + "code": 1357 + }, + "Tagged template expressions are not permitted in an optional chain.": { + "category": "Error", + "code": 1358 + }, + "Identifier expected. '{0}' is a reserved word that cannot be used here.": { + "category": "Error", + "code": 1359 + }, + "Type '{0}' does not satisfy the expected type '{1}'.": { + "category": "Error", + "code": 1360 + }, + "'{0}' cannot be used as a value because it was imported using 'import type'.": { + "category": "Error", + "code": 1361 + }, + "'{0}' cannot be used as a value because it was exported using 'export type'.": { + "category": "Error", + "code": 1362 + }, + "A type-only import can specify a default import or named bindings, but not both.": { + "category": "Error", + "code": 1363 + }, + "Convert to type-only export": { + "category": "Message", + "code": 1364 + }, + "Convert all re-exported types to type-only exports": { + "category": "Message", + "code": 1365 + }, + "Split into two separate import declarations": { + "category": "Message", + "code": 1366 + }, + "Split all invalid type-only imports": { + "category": "Message", + "code": 1367 + }, + "Class constructor may not be a generator.": { + "category": "Error", + "code": 1368 + }, + "Did you mean '{0}'?": { + "category": "Message", + "code": 1369 + }, + "'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { + "category": "Error", + "code": 1375 + }, + "'{0}' was imported here.": { + "category": "Message", + "code": 1376 + }, + "'{0}' was exported here.": { + "category": "Message", + "code": 1377 + }, + "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { + "category": "Error", + "code": 1378 + }, + "An import alias cannot reference a declaration that was exported using 'export type'.": { + "category": "Error", + "code": 1379 + }, + "An import alias cannot reference a declaration that was imported using 'import type'.": { + "category": "Error", + "code": 1380 + }, + "Unexpected token. Did you mean `{'}'}` or `}`?": { + "category": "Error", + "code": 1381 + }, + "Unexpected token. Did you mean `{'>'}` or `>`?": { + "category": "Error", + "code": 1382 + }, + "Function type notation must be parenthesized when used in a union type.": { + "category": "Error", + "code": 1385 + }, + "Constructor type notation must be parenthesized when used in a union type.": { + "category": "Error", + "code": 1386 + }, + "Function type notation must be parenthesized when used in an intersection type.": { + "category": "Error", + "code": 1387 + }, + "Constructor type notation must be parenthesized when used in an intersection type.": { + "category": "Error", + "code": 1388 + }, + "'{0}' is not allowed as a variable declaration name.": { + "category": "Error", + "code": 1389 + }, + "'{0}' is not allowed as a parameter name.": { + "category": "Error", + "code": 1390 + }, + "An import alias cannot use 'import type'": { + "category": "Error", + "code": 1392 + }, + "Imported via {0} from file '{1}'": { + "category": "Message", + "code": 1393 + }, + "Imported via {0} from file '{1}' with packageId '{2}'": { + "category": "Message", + "code": 1394 + }, + "Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions": { + "category": "Message", + "code": 1395 + }, + "Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions": { + "category": "Message", + "code": 1396 + }, + "Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions": { + "category": "Message", + "code": 1397 + }, + "Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions": { + "category": "Message", + "code": 1398 + }, + "File is included via import here.": { + "category": "Message", + "code": 1399 + }, + "Referenced via '{0}' from file '{1}'": { + "category": "Message", + "code": 1400 + }, + "File is included via reference here.": { + "category": "Message", + "code": 1401 + }, + "Type library referenced via '{0}' from file '{1}'": { + "category": "Message", + "code": 1402 + }, + "Type library referenced via '{0}' from file '{1}' with packageId '{2}'": { + "category": "Message", + "code": 1403 + }, + "File is included via type library reference here.": { + "category": "Message", + "code": 1404 + }, + "Library referenced via '{0}' from file '{1}'": { + "category": "Message", + "code": 1405 + }, + "File is included via library reference here.": { + "category": "Message", + "code": 1406 + }, + "Matched by include pattern '{0}' in '{1}'": { + "category": "Message", + "code": 1407 + }, + "File is matched by include pattern specified here.": { + "category": "Message", + "code": 1408 + }, + "Part of 'files' list in tsconfig.json": { + "category": "Message", + "code": 1409 + }, + "File is matched by 'files' list specified here.": { + "category": "Message", + "code": 1410 + }, + "Output from referenced project '{0}' included because '{1}' specified": { + "category": "Message", + "code": 1411 + }, + "Output from referenced project '{0}' included because '--module' is specified as 'none'": { + "category": "Message", + "code": 1412 + }, + "File is output from referenced project specified here.": { + "category": "Message", + "code": 1413 + }, + "Source from referenced project '{0}' included because '{1}' specified": { + "category": "Message", + "code": 1414 + }, + "Source from referenced project '{0}' included because '--module' is specified as 'none'": { + "category": "Message", + "code": 1415 + }, + "File is source from referenced project specified here.": { + "category": "Message", + "code": 1416 + }, + "Entry point of type library '{0}' specified in compilerOptions": { + "category": "Message", + "code": 1417 + }, + "Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'": { + "category": "Message", + "code": 1418 + }, + "File is entry point of type library specified here.": { + "category": "Message", + "code": 1419 + }, + "Entry point for implicit type library '{0}'": { + "category": "Message", + "code": 1420 + }, + "Entry point for implicit type library '{0}' with packageId '{1}'": { + "category": "Message", + "code": 1421 + }, + "Library '{0}' specified in compilerOptions": { + "category": "Message", + "code": 1422 + }, + "File is library specified here.": { + "category": "Message", + "code": 1423 + }, + "Default library": { + "category": "Message", + "code": 1424 + }, + "Default library for target '{0}'": { + "category": "Message", + "code": 1425 + }, + "File is default library for target specified here.": { + "category": "Message", + "code": 1426 + }, + "Root file specified for compilation": { + "category": "Message", + "code": 1427 + }, + "File is output of project reference source '{0}'": { + "category": "Message", + "code": 1428 + }, + "File redirects to file '{0}'": { + "category": "Message", + "code": 1429 + }, + "The file is in the program because:": { + "category": "Message", + "code": 1430 + }, + "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { + "category": "Error", + "code": 1431 + }, + "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { + "category": "Error", + "code": 1432 + }, + "Neither decorators nor modifiers may be applied to 'this' parameters.": { + "category": "Error", + "code": 1433 + }, + "Unexpected keyword or identifier.": { + "category": "Error", + "code": 1434 + }, + "Unknown keyword or identifier. Did you mean '{0}'?": { + "category": "Error", + "code": 1435 + }, + "Decorators must precede the name and all keywords of property declarations.": { + "category": "Error", + "code": 1436 + }, + "Namespace must be given a name.": { + "category": "Error", + "code": 1437 + }, + "Interface must be given a name.": { + "category": "Error", + "code": 1438 + }, + "Type alias must be given a name.": { + "category": "Error", + "code": 1439 + }, + "Variable declaration not allowed at this location.": { + "category": "Error", + "code": 1440 + }, + "Cannot start a function call in a type annotation.": { + "category": "Error", + "code": 1441 + }, + "Expected '=' for property initializer.": { + "category": "Error", + "code": 1442 + }, + "Module declaration names may only use ' or \" quoted strings.": { + "category": "Error", + "code": 1443 + }, + "'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when '{1}' is enabled.": { + "category": "Error", + "code": 1448 + }, + "Preserve unused imported values in the JavaScript output that would otherwise be removed.": { + "category": "Message", + "code": 1449 + }, + "Dynamic imports can only accept a module specifier and an optional set of attributes as arguments": { + "category": "Message", + "code": 1450 + }, + "Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression": { + "category": "Error", + "code": 1451 + }, + "`resolution-mode` should be either `require` or `import`.": { + "category": "Error", + "code": 1453 + }, + "`resolution-mode` can only be set for type-only imports.": { + "category": "Error", + "code": 1454 + }, + "`resolution-mode` is the only valid key for type import assertions.": { + "category": "Error", + "code": 1455 + }, + "Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`.": { + "category": "Error", + "code": 1456 + }, + "Matched by default include pattern '**/*'": { + "category": "Message", + "code": 1457 + }, + "File is ECMAScript module because '{0}' has field \"type\" with value \"module\"": { + "category": "Message", + "code": 1458 + }, + "File is CommonJS module because '{0}' has field \"type\" whose value is not \"module\"": { + "category": "Message", + "code": 1459 + }, + "File is CommonJS module because '{0}' does not have field \"type\"": { + "category": "Message", + "code": 1460 + }, + "File is CommonJS module because 'package.json' was not found": { + "category": "Message", + "code": 1461 + }, + + "The 'import.meta' meta-property is not allowed in files which will build into CommonJS output.": { + "category": "Error", + "code": 1470 + }, + "Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead.": { + "category": "Error", + "code": 1471 + }, + "'catch' or 'finally' expected.": { + "category": "Error", + "code": 1472 + }, + "An import declaration can only be used at the top level of a module.": { + "category": "Error", + "code": 1473 + }, + "An export declaration can only be used at the top level of a module.": { + "category": "Error", + "code": 1474 + }, + "Control what method is used to detect module-format JS files.": { + "category": "Message", + "code": 1475 + }, + "\"auto\": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.": { + "category": "Message", + "code": 1476 + }, + "An instantiation expression cannot be followed by a property access.": { + "category": "Error", + "code": 1477 + }, + "Identifier or string literal expected.": { + "category": "Error", + "code": 1478 + }, + "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"{0}\")' call instead.": { + "category": "Error", + "code": 1479 + }, + "To convert this file to an ECMAScript module, change its file extension to '{0}' or create a local package.json file with `{ \"type\": \"module\" }`.": { + "category": "Message", + "code": 1480 + }, + "To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field `\"type\": \"module\"` to '{1}'.": { + "category": "Message", + "code": 1481 + }, + "To convert this file to an ECMAScript module, add the field `\"type\": \"module\"` to '{0}'.": { + "category": "Message", + "code": 1482 + }, + "To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`.": { + "category": "Message", + "code": 1483 + }, + "'{0}' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.": { + "category": "Error", + "code": 1484 + }, + "'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.": { + "category": "Error", + "code": 1485 + }, + "Decorator used before 'export' here.": { + "category": "Error", + "code": 1486 + }, + "Octal escape sequences are not allowed. Use the syntax '{0}'.": { + "category": "Error", + "code": 1487 + }, + "Escape sequence '{0}' is not allowed.": { + "category": "Error", + "code": 1488 + }, + "Decimals with leading zeros are not allowed.": { + "category": "Error", + "code": 1489 + }, + "File appears to be binary.": { + "category": "Error", + "code": 1490 + }, + "'{0}' modifier cannot appear on a 'using' declaration.": { + "category": "Error", + "code": 1491 + }, + "'{0}' declarations may not have binding patterns.": { + "category": "Error", + "code": 1492 + }, + "The left-hand side of a 'for...in' statement cannot be a 'using' declaration.": { + "category": "Error", + "code": 1493 + }, + "The left-hand side of a 'for...in' statement cannot be an 'await using' declaration.": { + "category": "Error", + "code": 1494 + }, + "'{0}' modifier cannot appear on an 'await using' declaration.": { + "category": "Error", + "code": 1495 + }, + "Identifier, string literal, or number literal expected.": { + "category": "Error", + "code": 1496 + }, + "Expression must be enclosed in parentheses to be used as a decorator.": { + "category": "Error", + "code": 1497 + }, + "Invalid syntax in decorator.": { + "category": "Error", + "code": 1498 + }, + "Unknown regular expression flag.": { + "category": "Error", + "code": 1499 + }, + "Duplicate regular expression flag.": { + "category": "Error", + "code": 1500 + }, + "This regular expression flag is only available when targeting '{0}' or later.": { + "category": "Error", + "code": 1501 + }, + "The Unicode (u) flag and the Unicode Sets (v) flag cannot be set simultaneously.": { + "category": "Error", + "code": 1502 + }, + "Named capturing groups are only available when targeting 'ES2018' or later.": { + "category": "Error", + "code": 1503 + }, + "Subpattern flags must be present when there is a minus sign.": { + "category": "Error", + "code": 1504 + }, + "Incomplete quantifier. Digit expected.": { + "category": "Error", + "code": 1505 + }, + "Numbers out of order in quantifier.": { + "category": "Error", + "code": 1506 + }, + "There is nothing available for repetition.": { + "category": "Error", + "code": 1507 + }, + "Unexpected '{0}'. Did you mean to escape it with backslash?": { + "category": "Error", + "code": 1508 + }, + "This regular expression flag cannot be toggled within a subpattern.": { + "category": "Error", + "code": 1509 + }, + "'\\k' must be followed by a capturing group name enclosed in angle brackets.": { + "category": "Error", + "code": 1510 + }, + "'\\q' is only available inside character class.": { + "category": "Error", + "code": 1511 + }, + "'\\c' must be followed by an ASCII letter.": { + "category": "Error", + "code": 1512 + }, + "Undetermined character escape.": { + "category": "Error", + "code": 1513 + }, + "Expected a capturing group name.": { + "category": "Error", + "code": 1514 + }, + "Named capturing groups with the same name must be mutually exclusive to each other.": { + "category": "Error", + "code": 1515 + }, + "A character class range must not be bounded by another character class.": { + "category": "Error", + "code": 1516 + }, + "Range out of order in character class.": { + "category": "Error", + "code": 1517 + }, + "Anything that would possibly match more than a single character is invalid inside a negated character class.": { + "category": "Error", + "code": 1518 + }, + "Operators must not be mixed within a character class. Wrap it in a nested class instead.": { + "category": "Error", + "code": 1519 + }, + "Expected a class set operand.": { + "category": "Error", + "code": 1520 + }, + "'\\q' must be followed by string alternatives enclosed in braces.": { + "category": "Error", + "code": 1521 + }, + "A character class must not contain a reserved double punctuator. Did you mean to escape it with backslash?": { + "category": "Error", + "code": 1522 + }, + "Expected a Unicode property name.": { + "category": "Error", + "code": 1523 + }, + "Unknown Unicode property name.": { + "category": "Error", + "code": 1524 + }, + "Expected a Unicode property value.": { + "category": "Error", + "code": 1525 + }, + "Unknown Unicode property value.": { + "category": "Error", + "code": 1526 + }, + "Expected a Unicode property name or value.": { + "category": "Error", + "code": 1527 + }, + "Any Unicode property that would possibly match more than a single character is only available when the Unicode Sets (v) flag is set.": { + "category": "Error", + "code": 1528 + }, + "Unknown Unicode property name or value.": { + "category": "Error", + "code": 1529 + }, + "Unicode property value expressions are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set.": { + "category": "Error", + "code": 1530 + }, + "'\\{0}' must be followed by a Unicode property value expression enclosed in braces.": { + "category": "Error", + "code": 1531 + }, + "There is no capturing group named '{0}' in this regular expression.": { + "category": "Error", + "code": 1532 + }, + "This backreference refers to a group that does not exist. There are only {0} capturing groups in this regular expression.": { + "category": "Error", + "code": 1533 + }, + "This backreference refers to a group that does not exist. There are no capturing groups in this regular expression.": { + "category": "Error", + "code": 1534 + }, + "This character cannot be escaped in a regular expression.": { + "category": "Error", + "code": 1535 + }, + "Octal escape sequences and backreferences are not allowed in a character class. If this was intended as an escape sequence, use the syntax '{0}' instead.": { + "category": "Error", + "code": 1536 + }, + "Decimal escape sequences and backreferences are not allowed in a character class.": { + "category": "Error", + "code": 1537 + }, + "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set.": { + "category": "Error", + "code": 1538 + }, + "A 'bigint' literal cannot be used as a property name.": { + "category": "Error", + "code": 1539 + }, + "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.": { + "category": "Error", + "code": 1540 + }, + "Type-only import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute.": { + "category": "Error", + "code": 1541 + }, + "Type import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute.": { + "category": "Error", + "code": 1542 + }, + "Importing a JSON file into an ECMAScript module requires a 'type: \"json\"' import attribute when 'module' is set to '{0}'.": { + "category": "Error", + "code": 1543 + }, + "Named imports from a JSON file into an ECMAScript module are not allowed when 'module' is set to '{0}'.": { + "category": "Error", + "code": 1544 + }, + "'using' declarations are not allowed in ambient contexts.": { + "category": "Error", + "code": 1545 + }, + "'await using' declarations are not allowed in ambient contexts.": { + "category": "Error", + "code": 1546 + }, + "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.": { + "category": "Error", + "code": 1547 + }, + "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.": { + "category": "Error", + "code": 1548 + }, + "Ignore the tsconfig found and build with commandline options and files.": { + "category": "Message", + "code": 1549 + }, + "An ambient module declaration with import attributes must use a pattern name with an '*' character.": { + "category": "Error", + "code": 1550 + }, + "Import attributes are not allowed on a module augmentation.": { + "category": "Error", + "code": 1551 + }, + "An import attributes type may only contain property signatures.": { + "category": "Error", + "code": 1552 + }, + "An import attributes property must have a type annotation.": { + "category": "Error", + "code": 1553 + }, + "An import attributes property must have a string literal or identifier name.": { + "category": "Error", + "code": 1554 + }, + "An import attributes property must have a string literal type annotation.": { + "category": "Error", + "code": 1555 + }, + "An import attributes property cannot be optional.": { + "category": "Error", + "code": 1556 + }, + "'{0}' is not a valid key for an import attributes type.": { + "category": "Error", + "code": 1557 + }, + "An import attributes property cannot have a 'readonly' modifier.": { + "category": "Error", + "code": 1558 + }, + + "The types of '{0}' are incompatible between these types.": { + "category": "Error", + "code": 2200 + }, + "The types returned by '{0}' are incompatible between these types.": { + "category": "Error", + "code": 2201 + }, + "Call signature return types '{0}' and '{1}' are incompatible.": { + "category": "Error", + "code": 2202, + "elidedInCompatabilityPyramid": true + }, + "Construct signature return types '{0}' and '{1}' are incompatible.": { + "category": "Error", + "code": 2203, + "elidedInCompatabilityPyramid": true + }, + "Call signatures with no arguments have incompatible return types '{0}' and '{1}'.": { + "category": "Error", + "code": 2204, + "elidedInCompatabilityPyramid": true + }, + "Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.": { + "category": "Error", + "code": 2205, + "elidedInCompatabilityPyramid": true + }, + "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.": { + "category": "Error", + "code": 2206 + }, + "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.": { + "category": "Error", + "code": 2207 + }, + "This type parameter might need an `extends {0}` constraint.": { + "category": "Error", + "code": 2208 + }, + + "The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.": { + "category": "Error", + "code": 2209 + }, + "The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.": { + "category": "Error", + "code": 2210 + }, + "Add `extends` constraint.": { + "category": "Message", + "code": 2211 + }, + "Add `extends` constraint to all type parameters": { + "category": "Message", + "code": 2212 + }, + + "Duplicate identifier '{0}'.": { + "category": "Error", + "code": 2300 + }, + "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { + "category": "Error", + "code": 2301 + }, + "Static members cannot reference class type parameters.": { + "category": "Error", + "code": 2302 + }, + "Circular definition of import alias '{0}'.": { + "category": "Error", + "code": 2303 + }, + "Cannot find name '{0}'.": { + "category": "Error", + "code": 2304 + }, + "Module '{0}' has no exported member '{1}'.": { + "category": "Error", + "code": 2305 + }, + "File '{0}' is not a module.": { + "category": "Error", + "code": 2306 + }, + "Cannot find module '{0}' or its corresponding type declarations.": { + "category": "Error", + "code": 2307 + }, + "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity.": { + "category": "Error", + "code": 2308 + }, + "An export assignment cannot be used in a module with other exported elements.": { + "category": "Error", + "code": 2309 + }, + "Type '{0}' recursively references itself as a base type.": { + "category": "Error", + "code": 2310 + }, + "Cannot find name '{0}'. Did you mean to write this in an async function?": { + "category": "Error", + "code": 2311 + }, + "An interface can only extend an object type or intersection of object types with statically known members.": { + "category": "Error", + "code": 2312 + }, + "Type parameter '{0}' has a circular constraint.": { + "category": "Error", + "code": 2313 + }, + "Generic type '{0}' requires {1} type argument(s).": { + "category": "Error", + "code": 2314 + }, + "Type '{0}' is not generic.": { + "category": "Error", + "code": 2315 + }, + "Global type '{0}' must be a class or interface type.": { + "category": "Error", + "code": 2316 + }, + "Global type '{0}' must have {1} type parameter(s).": { + "category": "Error", + "code": 2317 + }, + "Cannot find global type '{0}'.": { + "category": "Error", + "code": 2318 + }, + "Named property '{0}' of types '{1}' and '{2}' are not identical.": { + "category": "Error", + "code": 2319 + }, + "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'.": { + "category": "Error", + "code": 2320 + }, + "Excessive stack depth comparing types '{0}' and '{1}'.": { + "category": "Error", + "code": 2321 + }, + "Type '{0}' is not assignable to type '{1}'.": { + "category": "Error", + "code": 2322 + }, + "Cannot redeclare exported variable '{0}'.": { + "category": "Error", + "code": 2323 + }, + "Property '{0}' is missing in type '{1}'.": { + "category": "Error", + "code": 2324 + }, + "Property '{0}' is private in type '{1}' but not in type '{2}'.": { + "category": "Error", + "code": 2325 + }, + "Types of property '{0}' are incompatible.": { + "category": "Error", + "code": 2326 + }, + "Property '{0}' is optional in type '{1}' but required in type '{2}'.": { + "category": "Error", + "code": 2327 + }, + "Types of parameters '{0}' and '{1}' are incompatible.": { + "category": "Error", + "code": 2328 + }, + "Index signature for type '{0}' is missing in type '{1}'.": { + "category": "Error", + "code": 2329 + }, + "'{0}' and '{1}' index signatures are incompatible.": { + "category": "Error", + "code": 2330 + }, + "'this' cannot be referenced in a module or namespace body.": { + "category": "Error", + "code": 2331 + }, + "'this' cannot be referenced in current location.": { + "category": "Error", + "code": 2332 + }, + "'this' cannot be referenced in a static property initializer.": { + "category": "Error", + "code": 2334 + }, + "'super' can only be referenced in a derived class.": { + "category": "Error", + "code": 2335 + }, + "'super' cannot be referenced in constructor arguments.": { + "category": "Error", + "code": 2336 + }, + "Super calls are not permitted outside constructors or in nested functions inside constructors.": { + "category": "Error", + "code": 2337 + }, + "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { + "category": "Error", + "code": 2338 + }, + "Property '{0}' does not exist on type '{1}'.": { + "category": "Error", + "code": 2339 + }, + "Only public and protected methods of the base class are accessible via the 'super' keyword.": { + "category": "Error", + "code": 2340 + }, + "Property '{0}' is private and only accessible within class '{1}'.": { + "category": "Error", + "code": 2341 + }, + "This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'.": { + "category": "Error", + "code": 2343 + }, + "Type '{0}' does not satisfy the constraint '{1}'.": { + "category": "Error", + "code": 2344 + }, + "Argument of type '{0}' is not assignable to parameter of type '{1}'.": { + "category": "Error", + "code": 2345 + }, + "Call target does not contain any signatures.": { + "category": "Error", + "code": 2346 + }, + "Untyped function calls may not accept type arguments.": { + "category": "Error", + "code": 2347 + }, + "Value of type '{0}' is not callable. Did you mean to include 'new'?": { + "category": "Error", + "code": 2348 + }, + "This expression is not callable.": { + "category": "Error", + "code": 2349 + }, + "Only a void function can be called with the 'new' keyword.": { + "category": "Error", + "code": 2350 + }, + "This expression is not constructable.": { + "category": "Error", + "code": 2351 + }, + "Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.": { + "category": "Error", + "code": 2352 + }, + "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'.": { + "category": "Error", + "code": 2353 + }, + "This syntax requires an imported helper but module '{0}' cannot be found.": { + "category": "Error", + "code": 2354 + }, + "A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.": { + "category": "Error", + "code": 2355 + }, + "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type.": { + "category": "Error", + "code": 2356 + }, + "The operand of an increment or decrement operator must be a variable or a property access.": { + "category": "Error", + "code": 2357 + }, + "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { + "category": "Error", + "code": 2358 + }, + "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method.": { + "category": "Error", + "code": 2359 + }, + "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.": { + "category": "Error", + "code": 2362 + }, + "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.": { + "category": "Error", + "code": 2363 + }, + "The left-hand side of an assignment expression must be a variable or a property access.": { + "category": "Error", + "code": 2364 + }, + "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { + "category": "Error", + "code": 2365 + }, + "Function lacks ending return statement and return type does not include 'undefined'.": { + "category": "Error", + "code": 2366 + }, + "This comparison appears to be unintentional because the types '{0}' and '{1}' have no overlap.": { + "category": "Error", + "code": 2367 + }, + "Type parameter name cannot be '{0}'.": { + "category": "Error", + "code": 2368 + }, + "A parameter property is only allowed in a constructor implementation.": { + "category": "Error", + "code": 2369 + }, + "A rest parameter must be of an array type.": { + "category": "Error", + "code": 2370 + }, + "A parameter initializer is only allowed in a function or constructor implementation.": { + "category": "Error", + "code": 2371 + }, + "Parameter '{0}' cannot reference itself.": { + "category": "Error", + "code": 2372 + }, + "Parameter '{0}' cannot reference identifier '{1}' declared after it.": { + "category": "Error", + "code": 2373 + }, + "Duplicate index signature for type '{0}'.": { + "category": "Error", + "code": 2374 + }, + "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.": { + "category": "Error", + "code": 2375 + }, + "A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers.": { + "category": "Error", + "code": 2376 + }, + "Constructors for derived classes must contain a 'super' call.": { + "category": "Error", + "code": 2377 + }, + "A 'get' accessor must return a value.": { + "category": "Error", + "code": 2378 + }, + "Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.": { + "category": "Error", + "code": 2379 + }, + "Overload signatures must all be exported or non-exported.": { + "category": "Error", + "code": 2383 + }, + "Overload signatures must all be ambient or non-ambient.": { + "category": "Error", + "code": 2384 + }, + "Overload signatures must all be public, private or protected.": { + "category": "Error", + "code": 2385 + }, + "Overload signatures must all be optional or required.": { + "category": "Error", + "code": 2386 + }, + "Function overload must be static.": { + "category": "Error", + "code": 2387 + }, + "Function overload must not be static.": { + "category": "Error", + "code": 2388 + }, + "Function implementation name must be '{0}'.": { + "category": "Error", + "code": 2389 + }, + "Constructor implementation is missing.": { + "category": "Error", + "code": 2390 + }, + "Function implementation is missing or not immediately following the declaration.": { + "category": "Error", + "code": 2391 + }, + "Multiple constructor implementations are not allowed.": { + "category": "Error", + "code": 2392 + }, + "Duplicate function implementation.": { + "category": "Error", + "code": 2393 + }, + "This overload signature is not compatible with its implementation signature.": { + "category": "Error", + "code": 2394 + }, + "Individual declarations in merged declaration '{0}' must be all exported or all local.": { + "category": "Error", + "code": 2395 + }, + "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { + "category": "Error", + "code": 2396 + }, + "Declaration name conflicts with built-in global identifier '{0}'.": { + "category": "Error", + "code": 2397 + }, + "'constructor' cannot be used as a parameter property name.": { + "category": "Error", + "code": 2398 + }, + "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { + "category": "Error", + "code": 2399 + }, + "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { + "category": "Error", + "code": 2400 + }, + "A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers.": { + "category": "Error", + "code": 2401 + }, + "Expression resolves to '_super' that compiler uses to capture base class reference.": { + "category": "Error", + "code": 2402 + }, + "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { + "category": "Error", + "code": 2403 + }, + "The left-hand side of a 'for...in' statement cannot use a type annotation.": { + "category": "Error", + "code": 2404 + }, + "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.": { + "category": "Error", + "code": 2405 + }, + "The left-hand side of a 'for...in' statement must be a variable or a property access.": { + "category": "Error", + "code": 2406 + }, + "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type '{0}'.": { + "category": "Error", + "code": 2407 + }, + "Setters cannot return a value.": { + "category": "Error", + "code": 2408 + }, + "Return type of constructor signature must be assignable to the instance type of the class.": { + "category": "Error", + "code": 2409 + }, + "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.": { + "category": "Error", + "code": 2410 + }, + "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target.": { + "category": "Error", + "code": 2412 + }, + "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'.": { + "category": "Error", + "code": 2411 + }, + "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'.": { + "category": "Error", + "code": 2413 + }, + "Class name cannot be '{0}'.": { + "category": "Error", + "code": 2414 + }, + "Class '{0}' incorrectly extends base class '{1}'.": { + "category": "Error", + "code": 2415 + }, + "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'.": { + "category": "Error", + "code": 2416 + }, + "Class static side '{0}' incorrectly extends base class static side '{1}'.": { + "category": "Error", + "code": 2417 + }, + "Type of computed property's value is '{0}', which is not assignable to type '{1}'.": { + "category": "Error", + "code": 2418 + }, + "Types of construct signatures are incompatible.": { + "category": "Error", + "code": 2419 + }, + "Class '{0}' incorrectly implements interface '{1}'.": { + "category": "Error", + "code": 2420 + }, + "A class can only implement an object type or intersection of object types with statically known members.": { + "category": "Error", + "code": 2422 + }, + "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { + "category": "Error", + "code": 2423 + }, + "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { + "category": "Error", + "code": 2425 + }, + "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { + "category": "Error", + "code": 2426 + }, + "Interface name cannot be '{0}'.": { + "category": "Error", + "code": 2427 + }, + "All declarations of '{0}' must have identical type parameters.": { + "category": "Error", + "code": 2428 + }, + "Interface '{0}' incorrectly extends interface '{1}'.": { + "category": "Error", + "code": 2430 + }, + "Enum name cannot be '{0}'.": { + "category": "Error", + "code": 2431 + }, + "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.": { + "category": "Error", + "code": 2432 + }, + "A namespace declaration cannot be in a different file from a class or function with which it is merged.": { + "category": "Error", + "code": 2433 + }, + "A namespace declaration cannot be located prior to a class or function with which it is merged.": { + "category": "Error", + "code": 2434 + }, + "Ambient modules cannot be nested in other modules or namespaces.": { + "category": "Error", + "code": 2435 + }, + "Ambient module declaration cannot specify relative module name.": { + "category": "Error", + "code": 2436 + }, + "Module '{0}' is hidden by a local declaration with the same name.": { + "category": "Error", + "code": 2437 + }, + "Import name cannot be '{0}'.": { + "category": "Error", + "code": 2438 + }, + "Import or export declaration in an ambient module declaration cannot reference module through relative module name.": { + "category": "Error", + "code": 2439 + }, + "Import declaration conflicts with local declaration of '{0}'.": { + "category": "Error", + "code": 2440 + }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module.": { + "category": "Error", + "code": 2441 + }, + "Types have separate declarations of a private property '{0}'.": { + "category": "Error", + "code": 2442 + }, + "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'.": { + "category": "Error", + "code": 2443 + }, + "Property '{0}' is protected in type '{1}' but public in type '{2}'.": { + "category": "Error", + "code": 2444 + }, + "Property '{0}' is protected and only accessible within class '{1}' and its subclasses.": { + "category": "Error", + "code": 2445 + }, + "Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'.": { + "category": "Error", + "code": 2446 + }, + "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead.": { + "category": "Error", + "code": 2447 + }, + "Block-scoped variable '{0}' used before its declaration.": { + "category": "Error", + "code": 2448 + }, + "Class '{0}' used before its declaration.": { + "category": "Error", + "code": 2449 + }, + "Enum '{0}' used before its declaration.": { + "category": "Error", + "code": 2450 + }, + "Cannot redeclare block-scoped variable '{0}'.": { + "category": "Error", + "code": 2451 + }, + "An enum member cannot have a numeric name.": { + "category": "Error", + "code": 2452 + }, + "Variable '{0}' is used before being assigned.": { + "category": "Error", + "code": 2454 + }, + "Type alias '{0}' circularly references itself.": { + "category": "Error", + "code": 2456 + }, + "Type alias name cannot be '{0}'.": { + "category": "Error", + "code": 2457 + }, + "An AMD module cannot have multiple name assignments.": { + "category": "Error", + "code": 2458 + }, + "Module '{0}' declares '{1}' locally, but it is not exported.": { + "category": "Error", + "code": 2459 + }, + "Module '{0}' declares '{1}' locally, but it is exported as '{2}'.": { + "category": "Error", + "code": 2460 + }, + "Type '{0}' is not an array type.": { + "category": "Error", + "code": 2461 + }, + "A rest element must be last in a destructuring pattern.": { + "category": "Error", + "code": 2462 + }, + "A binding pattern parameter cannot be optional in an implementation signature.": { + "category": "Error", + "code": 2463 + }, + "A computed property name must be of type 'string', 'number', 'symbol', or 'any'.": { + "category": "Error", + "code": 2464 + }, + "'this' cannot be referenced in a computed property name.": { + "category": "Error", + "code": 2465 + }, + "'super' cannot be referenced in a computed property name.": { + "category": "Error", + "code": 2466 + }, + "A computed property name cannot reference a type parameter from its containing type.": { + "category": "Error", + "code": 2467 + }, + "Cannot find global value '{0}'.": { + "category": "Error", + "code": 2468 + }, + "The '{0}' operator cannot be applied to type 'symbol'.": { + "category": "Error", + "code": 2469 + }, + "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher.": { + "category": "Error", + "code": 2472 + }, + "Enum declarations must all be const or non-const.": { + "category": "Error", + "code": 2473 + }, + "const enum member initializers must be constant expressions.": { + "category": "Error", + "code": 2474 + }, + "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.": { + "category": "Error", + "code": 2475 + }, + "A const enum member can only be accessed using a string literal.": { + "category": "Error", + "code": 2476 + }, + "'const' enum member initializer was evaluated to a non-finite value.": { + "category": "Error", + "code": 2477 + }, + "'const' enum member initializer was evaluated to disallowed value 'NaN'.": { + "category": "Error", + "code": 2478 + }, + "'let' is not allowed to be used as a name in 'let' or 'const' declarations.": { + "category": "Error", + "code": 2480 + }, + "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'.": { + "category": "Error", + "code": 2481 + }, + "The left-hand side of a 'for...of' statement cannot use a type annotation.": { + "category": "Error", + "code": 2483 + }, + "Export declaration conflicts with exported declaration of '{0}'.": { + "category": "Error", + "code": 2484 + }, + "The left-hand side of a 'for...of' statement must be a variable or a property access.": { + "category": "Error", + "code": 2487 + }, + "Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator.": { + "category": "Error", + "code": 2488 + }, + "An iterator must have a 'next()' method.": { + "category": "Error", + "code": 2489 + }, + "The type returned by the '{0}()' method of an iterator must have a 'value' property.": { + "category": "Error", + "code": 2490 + }, + "The left-hand side of a 'for...in' statement cannot be a destructuring pattern.": { + "category": "Error", + "code": 2491 + }, + "Cannot redeclare identifier '{0}' in catch clause.": { + "category": "Error", + "code": 2492 + }, + "Tuple type '{0}' of length '{1}' has no element at index '{2}'.": { + "category": "Error", + "code": 2493 + }, + "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher.": { + "category": "Error", + "code": 2494 + }, + "Type '{0}' is not an array type or a string type.": { + "category": "Error", + "code": 2495 + }, + "The 'arguments' object cannot be referenced in an arrow function in ES5. Consider using a standard function expression.": { + "category": "Error", + "code": 2496 + }, + "This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export.": { + "category": "Error", + "code": 2497 + }, + "Module '{0}' uses 'export =' and cannot be used with 'export *'.": { + "category": "Error", + "code": 2498 + }, + "An interface can only extend an identifier/qualified-name with optional type arguments.": { + "category": "Error", + "code": 2499 + }, + "A class can only implement an identifier/qualified-name with optional type arguments.": { + "category": "Error", + "code": 2500 + }, + "A rest element cannot contain a binding pattern.": { + "category": "Error", + "code": 2501 + }, + "'{0}' is referenced directly or indirectly in its own type annotation.": { + "category": "Error", + "code": 2502 + }, + "Cannot find namespace '{0}'.": { + "category": "Error", + "code": 2503 + }, + "Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator.": { + "category": "Error", + "code": 2504 + }, + "A generator cannot have a 'void' type annotation.": { + "category": "Error", + "code": 2505 + }, + "'{0}' is referenced directly or indirectly in its own base expression.": { + "category": "Error", + "code": 2506 + }, + "Type '{0}' is not a constructor function type.": { + "category": "Error", + "code": 2507 + }, + "No base constructor has the specified number of type arguments.": { + "category": "Error", + "code": 2508 + }, + "Base constructor return type '{0}' is not an object type or intersection of object types with statically known members.": { + "category": "Error", + "code": 2509 + }, + "Base constructors must all have the same return type.": { + "category": "Error", + "code": 2510 + }, + "Cannot create an instance of an abstract class.": { + "category": "Error", + "code": 2511 + }, + "Overload signatures must all be abstract or non-abstract.": { + "category": "Error", + "code": 2512 + }, + "Abstract method '{0}' in class '{1}' cannot be accessed via super expression.": { + "category": "Error", + "code": 2513 + }, + "A tuple type cannot be indexed with a negative value.": { + "category": "Error", + "code": 2514 + }, + "Non-abstract class '{0}' does not implement inherited abstract member {1} from class '{2}'.": { + "category": "Error", + "code": 2515 + }, + "All declarations of an abstract method must be consecutive.": { + "category": "Error", + "code": 2516 + }, + "Cannot assign an abstract constructor type to a non-abstract constructor type.": { + "category": "Error", + "code": 2517 + }, + "A 'this'-based type guard is not compatible with a parameter-based type guard.": { + "category": "Error", + "code": 2518 + }, + "An async iterator must have a 'next()' method.": { + "category": "Error", + "code": 2519 + }, + "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions.": { + "category": "Error", + "code": 2520 + }, + "The 'arguments' object cannot be referenced in an async function or method in ES5. Consider using a standard function or method.": { + "category": "Error", + "code": 2522 + }, + "'yield' expressions cannot be used in a parameter initializer.": { + "category": "Error", + "code": 2523 + }, + "'await' expressions cannot be used in a parameter initializer.": { + "category": "Error", + "code": 2524 + }, + "A 'this' type is available only in a non-static member of a class or interface.": { + "category": "Error", + "code": 2526 + }, + "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary.": { + "category": "Error", + "code": 2527 + }, + "A module cannot have multiple default exports.": { + "category": "Error", + "code": 2528 + }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions.": { + "category": "Error", + "code": 2529 + }, + "Property '{0}' is incompatible with index signature.": { + "category": "Error", + "code": 2530 + }, + "Object is possibly 'null'.": { + "category": "Error", + "code": 2531 + }, + "Object is possibly 'undefined'.": { + "category": "Error", + "code": 2532 + }, + "Object is possibly 'null' or 'undefined'.": { + "category": "Error", + "code": 2533 + }, + "A function returning 'never' cannot have a reachable end point.": { + "category": "Error", + "code": 2534 + }, + "Type '{0}' cannot be used to index type '{1}'.": { + "category": "Error", + "code": 2536 + }, + "Type '{0}' has no matching index signature for type '{1}'.": { + "category": "Error", + "code": 2537 + }, + "Type '{0}' cannot be used as an index type.": { + "category": "Error", + "code": 2538 + }, + "Cannot assign to '{0}' because it is not a variable.": { + "category": "Error", + "code": 2539 + }, + "Cannot assign to '{0}' because it is a read-only property.": { + "category": "Error", + "code": 2540 + }, + "Index signature in type '{0}' only permits reading.": { + "category": "Error", + "code": 2542 + }, + "Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference.": { + "category": "Error", + "code": 2543 + }, + "Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference.": { + "category": "Error", + "code": 2544 + }, + "A mixin class must have a constructor with a single rest parameter of type 'any[]'.": { + "category": "Error", + "code": 2545 + }, + "The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property.": { + "category": "Error", + "code": 2547 + }, + "Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator.": { + "category": "Error", + "code": 2548 + }, + "Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator.": { + "category": "Error", + "code": 2549 + }, + "Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later.": { + "category": "Error", + "code": 2550 + }, + "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 2551 + }, + "Cannot find name '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 2552 + }, + "Computed values are not permitted in an enum with string valued members.": { + "category": "Error", + "code": 2553 + }, + "Expected {0} arguments, but got {1}.": { + "category": "Error", + "code": 2554 + }, + "Expected at least {0} arguments, but got {1}.": { + "category": "Error", + "code": 2555 + }, + "A spread argument must either have a tuple type or be passed to a rest parameter.": { + "category": "Error", + "code": 2556 + }, + "Expected {0} type arguments, but got {1}.": { + "category": "Error", + "code": 2558 + }, + "Type '{0}' has no properties in common with type '{1}'.": { + "category": "Error", + "code": 2559 + }, + "Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?": { + "category": "Error", + "code": 2560 + }, + "Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?": { + "category": "Error", + "code": 2561 + }, + "Base class expressions cannot reference class type parameters.": { + "category": "Error", + "code": 2562 + }, + "The containing function or module body is too large for control flow analysis.": { + "category": "Error", + "code": 2563 + }, + "Property '{0}' has no initializer and is not definitely assigned in the constructor.": { + "category": "Error", + "code": 2564 + }, + "Property '{0}' is used before being assigned.": { + "category": "Error", + "code": 2565 + }, + "A rest element cannot have a property name.": { + "category": "Error", + "code": 2566 + }, + "Enum declarations can only merge with namespace or other enum declarations.": { + "category": "Error", + "code": 2567 + }, + "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 2568 + }, + + "Could not find name '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 2570 + }, + "Object is of type 'unknown'.": { + "category": "Error", + "code": 2571 + }, + "A rest element type must be an array type.": { + "category": "Error", + "code": 2574 + }, + "No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments.": { + "category": "Error", + "code": 2575 + }, + "Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?": { + "category": "Error", + "code": 2576 + }, + "Return type annotation circularly references itself.": { + "category": "Error", + "code": 2577 + }, + "Unused '@ts-expect-error' directive.": { + "category": "Error", + "code": 2578 + }, + "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.": { + "category": "Error", + "code": 2580 + }, + "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`.": { + "category": "Error", + "code": 2581 + }, + "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`.": { + "category": "Error", + "code": 2582 + }, + "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later.": { + "category": "Error", + "code": 2583 + }, + "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.": { + "category": "Error", + "code": 2584 + }, + "'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later.": { + "category": "Error", + "code": 2585 + }, + "Cannot assign to '{0}' because it is a constant.": { + "category": "Error", + "code": 2588 + }, + "Type instantiation is excessively deep and possibly infinite.": { + "category": "Error", + "code": 2589 + }, + "Expression produces a union type that is too complex to represent.": { + "category": "Error", + "code": 2590 + }, + "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.": { + "category": "Error", + "code": 2591 + }, + "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig.": { + "category": "Error", + "code": 2592 + }, + "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig.": { + "category": "Error", + "code": 2593 + }, + "This module is declared with 'export =', and can only be used with a default import when using the '{0}' flag.": { + "category": "Error", + "code": 2594 + }, + "'{0}' can only be imported by using a default import.": { + "category": "Error", + "code": 2595 + }, + "'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import.": { + "category": "Error", + "code": 2596 + }, + "'{0}' can only be imported by using a 'require' call or by using a default import.": { + "category": "Error", + "code": 2597 + }, + "'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import.": { + "category": "Error", + "code": 2598 + }, + "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.": { + "category": "Error", + "code": 2602 + }, + "Property '{0}' in type '{1}' is not assignable to type '{2}'.": { + "category": "Error", + "code": 2603 + }, + "JSX element type '{0}' does not have any construct or call signatures.": { + "category": "Error", + "code": 2604 + }, + "Property '{0}' of JSX spread attribute is not assignable to target property.": { + "category": "Error", + "code": 2606 + }, + "JSX element class does not support attributes because it does not have a '{0}' property.": { + "category": "Error", + "code": 2607 + }, + "The global type 'JSX.{0}' may not have more than one property.": { + "category": "Error", + "code": 2608 + }, + "JSX spread child must be an array type.": { + "category": "Error", + "code": 2609 + }, + "'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property.": { + "category": "Error", + "code": 2610 + }, + "'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor.": { + "category": "Error", + "code": 2611 + }, + "Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration.": { + "category": "Error", + "code": 2612 + }, + "Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?": { + "category": "Error", + "code": 2613 + }, + "Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?": { + "category": "Error", + "code": 2614 + }, + "Type of property '{0}' circularly references itself in mapped type '{1}'.": { + "category": "Error", + "code": 2615 + }, + "'{0}' can only be imported by using 'import {1} = require({2})' or a default import.": { + "category": "Error", + "code": 2616 + }, + "'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import.": { + "category": "Error", + "code": 2617 + }, + "Source has {0} element(s) but target requires {1}.": { + "category": "Error", + "code": 2618 + }, + "Source has {0} element(s) but target allows only {1}.": { + "category": "Error", + "code": 2619 + }, + "Target requires {0} element(s) but source may have fewer.": { + "category": "Error", + "code": 2620 + }, + "Target allows only {0} element(s) but source may have more.": { + "category": "Error", + "code": 2621 + }, + "Source provides no match for required element at position {0} in target.": { + "category": "Error", + "code": 2623 + }, + "Source provides no match for variadic element at position {0} in target.": { + "category": "Error", + "code": 2624 + }, + "Variadic element at position {0} in source does not match element at position {1} in target.": { + "category": "Error", + "code": 2625 + }, + "Type at position {0} in source is not compatible with type at position {1} in target.": { + "category": "Error", + "code": 2626 + }, + "Type at positions {0} through {1} in source is not compatible with type at position {2} in target.": { + "category": "Error", + "code": 2627 + }, + "Cannot assign to '{0}' because it is an enum.": { + "category": "Error", + "code": 2628 + }, + "Cannot assign to '{0}' because it is a class.": { + "category": "Error", + "code": 2629 + }, + "Cannot assign to '{0}' because it is a function.": { + "category": "Error", + "code": 2630 + }, + "Cannot assign to '{0}' because it is a namespace.": { + "category": "Error", + "code": 2631 + }, + "Cannot assign to '{0}' because it is an import.": { + "category": "Error", + "code": 2632 + }, + "JSX property access expressions cannot include JSX namespace names": { + "category": "Error", + "code": 2633 + }, + "'{0}' index signatures are incompatible.": { + "category": "Error", + "code": 2634 + }, + "Type '{0}' has no signatures for which the type argument list is applicable.": { + "category": "Error", + "code": 2635 + }, + "Type '{0}' is not assignable to type '{1}' as implied by variance annotation.": { + "category": "Error", + "code": 2636 + }, + "Variance annotations are only supported in type aliases for object, function, constructor, and mapped types.": { + "category": "Error", + "code": 2637 + }, + "Type '{0}' may represent a primitive value, which is not permitted as the right operand of the 'in' operator.": { + "category": "Error", + "code": 2638 + }, + "React components cannot include JSX namespace names": { + "category": "Error", + "code": 2639 + }, + + "Cannot augment module '{0}' with value exports because it resolves to a non-module entity.": { + "category": "Error", + "code": 2649 + }, + "Non-abstract class expression is missing implementations for the following members of '{0}': {1} and {2} more.": { + "category": "Error", + "code": 2650 + }, + "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.": { + "category": "Error", + "code": 2651 + }, + "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead.": { + "category": "Error", + "code": 2652 + }, + "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'.": { + "category": "Error", + "code": 2653 + }, + "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2}.": { + "category": "Error", + "code": 2654 + }, + "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2} and {3} more.": { + "category": "Error", + "code": 2655 + }, + "Non-abstract class expression is missing implementations for the following members of '{0}': {1}.": { + "category": "Error", + "code": 2656 + }, + "JSX expressions must have one parent element.": { + "category": "Error", + "code": 2657 + }, + "Type '{0}' provides no match for the signature '{1}'.": { + "category": "Error", + "code": 2658 + }, + "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher.": { + "category": "Error", + "code": 2659 + }, + "'super' can only be referenced in members of derived classes or object literal expressions.": { + "category": "Error", + "code": 2660 + }, + "Cannot export '{0}'. Only local declarations can be exported from a module.": { + "category": "Error", + "code": 2661 + }, + "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?": { + "category": "Error", + "code": 2662 + }, + "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?": { + "category": "Error", + "code": 2663 + }, + "Invalid module name in augmentation, module '{0}' cannot be found.": { + "category": "Error", + "code": 2664 + }, + "Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented.": { + "category": "Error", + "code": 2665 + }, + "Exports and export assignments are not permitted in module augmentations.": { + "category": "Error", + "code": 2666 + }, + "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module.": { + "category": "Error", + "code": 2667 + }, + "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.": { + "category": "Error", + "code": 2668 + }, + "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.": { + "category": "Error", + "code": 2669 + }, + "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context.": { + "category": "Error", + "code": 2670 + }, + "Cannot augment module '{0}' because it resolves to a non-module entity.": { + "category": "Error", + "code": 2671 + }, + "Cannot assign a '{0}' constructor type to a '{1}' constructor type.": { + "category": "Error", + "code": 2672 + }, + "Constructor of class '{0}' is private and only accessible within the class declaration.": { + "category": "Error", + "code": 2673 + }, + "Constructor of class '{0}' is protected and only accessible within the class declaration.": { + "category": "Error", + "code": 2674 + }, + "Cannot extend a class '{0}'. Class constructor is marked as private.": { + "category": "Error", + "code": 2675 + }, + "Accessors must both be abstract or non-abstract.": { + "category": "Error", + "code": 2676 + }, + "A type predicate's type must be assignable to its parameter's type.": { + "category": "Error", + "code": 2677 + }, + "Type '{0}' is not comparable to type '{1}'.": { + "category": "Error", + "code": 2678 + }, + "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'.": { + "category": "Error", + "code": 2679 + }, + "A '{0}' parameter must be the first parameter.": { + "category": "Error", + "code": 2680 + }, + "A constructor cannot have a 'this' parameter.": { + "category": "Error", + "code": 2681 + }, + "'this' implicitly has type 'any' because it does not have a type annotation.": { + "category": "Error", + "code": 2683 + }, + "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'.": { + "category": "Error", + "code": 2684 + }, + "The 'this' types of each signature are incompatible.": { + "category": "Error", + "code": 2685 + }, + "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.": { + "category": "Error", + "code": 2686 + }, + "All declarations of '{0}' must have identical modifiers.": { + "category": "Error", + "code": 2687 + }, + "Cannot find type definition file for '{0}'.": { + "category": "Error", + "code": 2688 + }, + "Cannot extend an interface '{0}'. Did you mean 'implements'?": { + "category": "Error", + "code": 2689 + }, + "'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?": { + "category": "Error", + "code": 2690 + }, + "'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible.": { + "category": "Error", + "code": 2692 + }, + "'{0}' only refers to a type, but is being used as a value here.": { + "category": "Error", + "code": 2693 + }, + "Namespace '{0}' has no exported member '{1}'.": { + "category": "Error", + "code": 2694 + }, + "Left side of comma operator is unused and has no side effects.": { + "category": "Error", + "code": 2695, + "reportsUnnecessary": true + }, + "The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?": { + "category": "Error", + "code": 2696 + }, + "An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.": { + "category": "Error", + "code": 2697 + }, + "Spread types may only be created from object types.": { + "category": "Error", + "code": 2698 + }, + "Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'.": { + "category": "Error", + "code": 2699 + }, + "Rest types may only be created from object types.": { + "category": "Error", + "code": 2700 + }, + "The target of an object rest assignment must be a variable or a property access.": { + "category": "Error", + "code": 2701 + }, + "'{0}' only refers to a type, but is being used as a namespace here.": { + "category": "Error", + "code": 2702 + }, + "The operand of a 'delete' operator must be a property reference.": { + "category": "Error", + "code": 2703 + }, + "The operand of a 'delete' operator cannot be a read-only property.": { + "category": "Error", + "code": 2704 + }, + "An async function or method in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.": { + "category": "Error", + "code": 2705 + }, + "Required type parameters may not follow optional type parameters.": { + "category": "Error", + "code": 2706 + }, + "Generic type '{0}' requires between {1} and {2} type arguments.": { + "category": "Error", + "code": 2707 + }, + "Cannot use namespace '{0}' as a value.": { + "category": "Error", + "code": 2708 + }, + "Cannot use namespace '{0}' as a type.": { + "category": "Error", + "code": 2709 + }, + "'{0}' are specified twice. The attribute named '{0}' will be overwritten.": { + "category": "Error", + "code": 2710 + }, + "A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.": { + "category": "Error", + "code": 2711 + }, + "A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.": { + "category": "Error", + "code": 2712 + }, + "Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?": { + "category": "Error", + "code": 2713 + }, + "The expression of an export assignment must be an identifier or qualified name in an ambient context.": { + "category": "Error", + "code": 2714 + }, + "Abstract property '{0}' in class '{1}' cannot be accessed in the constructor.": { + "category": "Error", + "code": 2715 + }, + "Type parameter '{0}' has a circular default.": { + "category": "Error", + "code": 2716 + }, + "Subsequent property declarations must have the same type. Property '{0}' must be of type '{1}', but here has type '{2}'.": { + "category": "Error", + "code": 2717 + }, + "Duplicate property '{0}'.": { + "category": "Error", + "code": 2718 + }, + "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated.": { + "category": "Error", + "code": 2719 + }, + "Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?": { + "category": "Error", + "code": 2720 + }, + "Cannot invoke an object which is possibly 'null'.": { + "category": "Error", + "code": 2721 + }, + "Cannot invoke an object which is possibly 'undefined'.": { + "category": "Error", + "code": 2722 + }, + "Cannot invoke an object which is possibly 'null' or 'undefined'.": { + "category": "Error", + "code": 2723 + }, + "'{0}' has no exported member named '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 2724 + }, + "Class name cannot be 'Object' when targeting ES5 and above with module {0}.": { + "category": "Error", + "code": 2725 + }, + "Cannot find lib definition for '{0}'.": { + "category": "Error", + "code": 2726 + }, + "Cannot find lib definition for '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 2727 + }, + "'{0}' is declared here.": { + "category": "Message", + "code": 2728 + }, + "Property '{0}' is used before its initialization.": { + "category": "Error", + "code": 2729 + }, + "An arrow function cannot have a 'this' parameter.": { + "category": "Error", + "code": 2730 + }, + "Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'.": { + "category": "Error", + "code": 2731 + }, + "Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension.": { + "category": "Error", + "code": 2732 + }, + "Property '{0}' was also declared here.": { + "category": "Error", + "code": 2733 + }, + "Are you missing a semicolon?": { + "category": "Error", + "code": 2734 + }, + "Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?": { + "category": "Error", + "code": 2735 + }, + "Operator '{0}' cannot be applied to type '{1}'.": { + "category": "Error", + "code": 2736 + }, + "BigInt literals are not available when targeting lower than ES2020.": { + "category": "Error", + "code": 2737 + }, + "An outer value of 'this' is shadowed by this container.": { + "category": "Message", + "code": 2738 + }, + "Type '{0}' is missing the following properties from type '{1}': {2}": { + "category": "Error", + "code": 2739 + }, + "Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more.": { + "category": "Error", + "code": 2740 + }, + "Property '{0}' is missing in type '{1}' but required in type '{2}'.": { + "category": "Error", + "code": 2741 + }, + "The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary.": { + "category": "Error", + "code": 2742 + }, + "No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments.": { + "category": "Error", + "code": 2743 + }, + "Type parameter defaults can only reference previously declared type parameters.": { + "category": "Error", + "code": 2744 + }, + "This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided.": { + "category": "Error", + "code": 2745 + }, + "This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided.": { + "category": "Error", + "code": 2746 + }, + "'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'.": { + "category": "Error", + "code": 2747 + }, + "Cannot access ambient const enums when '{0}' is enabled.": { + "category": "Error", + "code": 2748 + }, + "'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?": { + "category": "Error", + "code": 2749 + }, + "The implementation signature is declared here.": { + "category": "Error", + "code": 2750 + }, + "Circularity originates in type at this location.": { + "category": "Error", + "code": 2751 + }, + "The first export default is here.": { + "category": "Error", + "code": 2752 + }, + "Another export default is here.": { + "category": "Error", + "code": 2753 + }, + "'super' may not use type arguments.": { + "category": "Error", + "code": 2754 + }, + "No constituent of type '{0}' is callable.": { + "category": "Error", + "code": 2755 + }, + "Not all constituents of type '{0}' are callable.": { + "category": "Error", + "code": 2756 + }, + "Type '{0}' has no call signatures.": { + "category": "Error", + "code": 2757 + }, + "Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other.": { + "category": "Error", + "code": 2758 + }, + "No constituent of type '{0}' is constructable.": { + "category": "Error", + "code": 2759 + }, + "Not all constituents of type '{0}' are constructable.": { + "category": "Error", + "code": 2760 + }, + "Type '{0}' has no construct signatures.": { + "category": "Error", + "code": 2761 + }, + "Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other.": { + "category": "Error", + "code": 2762 + }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'.": { + "category": "Error", + "code": 2763 + }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'.": { + "category": "Error", + "code": 2764 + }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'.": { + "category": "Error", + "code": 2765 + }, + "Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'.": { + "category": "Error", + "code": 2766 + }, + "The '{0}' property of an iterator must be a method.": { + "category": "Error", + "code": 2767 + }, + "The '{0}' property of an async iterator must be a method.": { + "category": "Error", + "code": 2768 + }, + "No overload matches this call.": { + "category": "Error", + "code": 2769 + }, + "The last overload gave the following error.": { + "category": "Error", + "code": 2770 + }, + "The last overload is declared here.": { + "category": "Error", + "code": 2771 + }, + "Overload {0} of {1}, '{2}', gave the following error.": { + "category": "Error", + "code": 2772 + }, + "Did you forget to use 'await'?": { + "category": "Error", + "code": 2773 + }, + "This condition will always return true since this function is always defined. Did you mean to call it instead?": { + "category": "Error", + "code": 2774 + }, + "Assertions require every name in the call target to be declared with an explicit type annotation.": { + "category": "Error", + "code": 2775 + }, + "Assertions require the call target to be an identifier or qualified name.": { + "category": "Error", + "code": 2776 + }, + "The operand of an increment or decrement operator may not be an optional property access.": { + "category": "Error", + "code": 2777 + }, + "The target of an object rest assignment may not be an optional property access.": { + "category": "Error", + "code": 2778 + }, + "The left-hand side of an assignment expression may not be an optional property access.": { + "category": "Error", + "code": 2779 + }, + "The left-hand side of a 'for...in' statement may not be an optional property access.": { + "category": "Error", + "code": 2780 + }, + "The left-hand side of a 'for...of' statement may not be an optional property access.": { + "category": "Error", + "code": 2781 + }, + "'{0}' needs an explicit type annotation.": { + "category": "Message", + "code": 2782 + }, + "'{0}' is specified more than once, so this usage will be overwritten.": { + "category": "Error", + "code": 2783 + }, + "'get' and 'set' accessors cannot declare 'this' parameters.": { + "category": "Error", + "code": 2784 + }, + "This spread always overwrites this property.": { + "category": "Error", + "code": 2785 + }, + "'{0}' cannot be used as a JSX component.": { + "category": "Error", + "code": 2786 + }, + "Its return type '{0}' is not a valid JSX element.": { + "category": "Error", + "code": 2787 + }, + "Its instance type '{0}' is not a valid JSX element.": { + "category": "Error", + "code": 2788 + }, + "Its element type '{0}' is not a valid JSX element.": { + "category": "Error", + "code": 2789 + }, + "The operand of a 'delete' operator must be optional.": { + "category": "Error", + "code": 2790 + }, + "Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later.": { + "category": "Error", + "code": 2791 + }, + "Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?": { + "category": "Error", + "code": 2792 + }, + "The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible.": { + "category": "Error", + "code": 2793 + }, + "Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?": { + "category": "Error", + "code": 2794 + }, + "The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types.": { + "category": "Error", + "code": 2795 + }, + "It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked.": { + "category": "Error", + "code": 2796 + }, + "A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'.": { + "category": "Error", + "code": 2797 + }, + "The declaration was marked as deprecated here.": { + "category": "Error", + "code": 2798 + }, + "Type produces a tuple type that is too large to represent.": { + "category": "Error", + "code": 2799 + }, + "Expression produces a tuple type that is too large to represent.": { + "category": "Error", + "code": 2800 + }, + "This condition will always return true since this '{0}' is always defined.": { + "category": "Error", + "code": 2801 + }, + "Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.": { + "category": "Error", + "code": 2802 + }, + "Cannot assign to private method '{0}'. Private methods are not writable.": { + "category": "Error", + "code": 2803 + }, + "Duplicate identifier '{0}'. Static and instance elements cannot share the same private name.": { + "category": "Error", + "code": 2804 + }, + "Private accessor was defined without a getter.": { + "category": "Error", + "code": 2806 + }, + "This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'.": { + "category": "Error", + "code": 2807 + }, + "A get accessor must be at least as accessible as the setter": { + "category": "Error", + "code": 2808 + }, + "Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the whole assignment in parentheses.": { + "category": "Error", + "code": 2809 + }, + "Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments.": { + "category": "Error", + "code": 2810 + }, + "Initializer for property '{0}'": { + "category": "Error", + "code": 2811 + }, + "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'.": { + "category": "Error", + "code": 2812 + }, + "Class declaration cannot implement overload list for '{0}'.": { + "category": "Error", + "code": 2813 + }, + "Function with bodies can only merge with classes that are ambient.": { + "category": "Error", + "code": 2814 + }, + "'arguments' cannot be referenced in property initializers or class static initialization blocks.": { + "category": "Error", + "code": 2815 + }, + "Cannot use 'this' in a static property initializer of a decorated class.": { + "category": "Error", + "code": 2816 + }, + "Property '{0}' has no initializer and is not definitely assigned in a class static block.": { + "category": "Error", + "code": 2817 + }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers.": { + "category": "Error", + "code": 2818 + }, + "Namespace name cannot be '{0}'.": { + "category": "Error", + "code": 2819 + }, + "Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 2820 + }, + "Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": { + "category": "Error", + "code": 2821 + }, + "Import assertions cannot be used with type-only imports or exports.": { + "category": "Error", + "code": 2822 + }, + "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'.": { + "category": "Error", + "code": 2823 + }, + "Cannot find namespace '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 2833 + }, + "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path.": { + "category": "Error", + "code": 2834 + }, + "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?": { + "category": "Error", + "code": 2835 + }, + "Import assertions are not allowed on statements that compile to CommonJS 'require' calls.": { + "category": "Error", + "code": 2836 + }, + "Import assertion values must be string literal expressions.": { + "category": "Error", + "code": 2837 + }, + "All declarations of '{0}' must have identical constraints.": { + "category": "Error", + "code": 2838 + }, + "This condition will always return '{0}' since JavaScript compares objects by reference, not value.": { + "category": "Error", + "code": 2839 + }, + "An interface cannot extend a primitive type like '{0}'. It can only extend other named object types.": { + "category": "Error", + "code": 2840 + }, + "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?": { + "category": "Error", + "code": 2842 + }, + "We can only write a type for '{0}' by adding a type for the entire parameter here.": { + "category": "Error", + "code": 2843 + }, + "Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { + "category": "Error", + "code": 2844 + }, + "This condition will always return '{0}'.": { + "category": "Error", + "code": 2845 + }, + "A declaration file cannot be imported without 'import type'. Did you mean to import an implementation file '{0}' instead?": { + "category": "Error", + "code": 2846 + }, + "The right-hand side of an 'instanceof' expression must not be an instantiation expression.": { + "category": "Error", + "code": 2848 + }, + "Target signature provides too few arguments. Expected {0} or more, but got {1}.": { + "category": "Error", + "code": 2849 + }, + "The initializer of a 'using' declaration must be either an object with a '[Symbol.dispose]()' method, or be 'null' or 'undefined'.": { + "category": "Error", + "code": 2850 + }, + "The initializer of an 'await using' declaration must be either an object with a '[Symbol.asyncDispose]()' or '[Symbol.dispose]()' method, or be 'null' or 'undefined'.": { + "category": "Error", + "code": 2851 + }, + "'await using' statements are only allowed within async functions and at the top levels of modules.": { + "category": "Error", + "code": 2852 + }, + "'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.": { + "category": "Error", + "code": 2853 + }, + "Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher.": { + "category": "Error", + "code": 2854 + }, + "Class field '{0}' defined by the parent class is not accessible in the child class via super.": { + "category": "Error", + "code": 2855 + }, + "Import attributes are not allowed on statements that compile to CommonJS 'require' calls.": { + "category": "Error", + "code": 2856 + }, + "Import attributes cannot be used with type-only imports or exports.": { + "category": "Error", + "code": 2857 + }, + "Import attribute values must be string literal expressions.": { + "category": "Error", + "code": 2858 + }, + "Excessive complexity comparing types '{0}' and '{1}'.": { + "category": "Error", + "code": 2859 + }, + "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method.": { + "category": "Error", + "code": 2860 + }, + "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression.": { + "category": "Error", + "code": 2861 + }, + "Type '{0}' is generic and can only be indexed for reading.": { + "category": "Error", + "code": 2862 + }, + "A class cannot extend a primitive type like '{0}'. Classes can only extend constructable values.": { + "category": "Error", + "code": 2863 + }, + "A class cannot implement a primitive type like '{0}'. It can only implement other named object types.": { + "category": "Error", + "code": 2864 + }, + "Import '{0}' conflicts with local value, so must be declared with a type-only import when 'isolatedModules' is enabled.": { + "category": "Error", + "code": 2865 + }, + "Import '{0}' conflicts with global value used in this file, so must be declared with a type-only import when 'isolatedModules' is enabled.": { + "category": "Error", + "code": 2866 + }, + "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun`.": { + "category": "Error", + "code": 2867 + }, + "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun` and then add 'bun' to the types field in your tsconfig.": { + "category": "Error", + "code": 2868 + }, + "Right operand of ?? is unreachable because the left operand is never nullish.": { + "category": "Error", + "code": 2869 + }, + "This binary expression is never nullish. Are you missing parentheses?": { + "category": "Error", + "code": 2870 + }, + "This expression is always nullish.": { + "category": "Error", + "code": 2871 + }, + "This kind of expression is always truthy.": { + "category": "Error", + "code": 2872 + }, + "This kind of expression is always falsy.": { + "category": "Error", + "code": 2873 + }, + "This JSX tag requires '{0}' to be in scope, but it could not be found.": { + "category": "Error", + "code": 2874 + }, + "This JSX tag requires the module path '{0}' to exist, but none could be found. Make sure you have types for the appropriate package installed.": { + "category": "Error", + "code": 2875 + }, + "This relative import path is unsafe to rewrite because it looks like a file name, but actually resolves to \"{0}\".": { + "category": "Error", + "code": 2876 + }, + "This import uses a '{0}' extension to resolve to an input TypeScript file, but will not be rewritten during emit because it is not a relative path.": { + "category": "Error", + "code": 2877 + }, + "This import path is unsafe to rewrite because it resolves to another project, and the relative path between the projects' output files is not the same as the relative path between its input files.": { + "category": "Error", + "code": 2878 + }, + "Using JSX fragments requires fragment factory '{0}' to be in scope, but it could not be found.": { + "category": "Error", + "code": 2879 + }, + "Import assertions have been replaced by import attributes. Use 'with' instead of 'assert'.": { + "category": "Error", + "code": 2880 + }, + "This expression is never nullish.": { + "category": "Error", + "code": 2881 + }, + "Cannot find module or type declarations for side-effect import of '{0}'.": { + "category": "Error", + "code": 2882 + }, + "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.": { + "category": "Error", + "code": 2883 + }, + + "Import declaration '{0}' is using private name '{1}'.": { + "category": "Error", + "code": 4000 + }, + "Type parameter '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4002 + }, + "Type parameter '{0}' of exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4004 + }, + "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4006 + }, + "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4008 + }, + "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4010 + }, + "Type parameter '{0}' of public method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4012 + }, + "Type parameter '{0}' of method from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4014 + }, + "Type parameter '{0}' of exported function has or is using private name '{1}'.": { + "category": "Error", + "code": 4016 + }, + "Implements clause of exported class '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4019 + }, + "'extends' clause of exported class '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4020 + }, + "'extends' clause of exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4021 + }, + "'extends' clause of exported interface '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4022 + }, + "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4023 + }, + "Exported variable '{0}' has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4024 + }, + "Exported variable '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4025 + }, + "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4026 + }, + "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4027 + }, + "Public static property '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4028 + }, + "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4029 + }, + "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4030 + }, + "Public property '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4031 + }, + "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4032 + }, + "Property '{0}' of exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4033 + }, + "Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4034 + }, + "Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4035 + }, + "Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4036 + }, + "Parameter type of public setter '{0}' from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4037 + }, + "Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4038 + }, + "Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4039 + }, + "Return type of public static getter '{0}' from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4040 + }, + "Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4041 + }, + "Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4042 + }, + "Return type of public getter '{0}' from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4043 + }, + "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4044 + }, + "Return type of constructor signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4045 + }, + "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4046 + }, + "Return type of call signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4047 + }, + "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4048 + }, + "Return type of index signature from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4049 + }, + "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4050 + }, + "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4051 + }, + "Return type of public static method from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4052 + }, + "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4053 + }, + "Return type of public method from exported class has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4054 + }, + "Return type of public method from exported class has or is using private name '{0}'.": { + "category": "Error", + "code": 4055 + }, + "Return type of method from exported interface has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4056 + }, + "Return type of method from exported interface has or is using private name '{0}'.": { + "category": "Error", + "code": 4057 + }, + "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.": { + "category": "Error", + "code": 4058 + }, + "Return type of exported function has or is using name '{0}' from private module '{1}'.": { + "category": "Error", + "code": 4059 + }, + "Return type of exported function has or is using private name '{0}'.": { + "category": "Error", + "code": 4060 + }, + "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4061 + }, + "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4062 + }, + "Parameter '{0}' of constructor from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4063 + }, + "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4064 + }, + "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4065 + }, + "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4066 + }, + "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4067 + }, + "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4068 + }, + "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4069 + }, + "Parameter '{0}' of public static method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4070 + }, + "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4071 + }, + "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4072 + }, + "Parameter '{0}' of public method from exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4073 + }, + "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4074 + }, + "Parameter '{0}' of method from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4075 + }, + "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4076 + }, + "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4077 + }, + "Parameter '{0}' of exported function has or is using private name '{1}'.": { + "category": "Error", + "code": 4078 + }, + "Exported type alias '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4081 + }, + "Default export of the module has or is using private name '{0}'.": { + "category": "Error", + "code": 4082 + }, + "Type parameter '{0}' of exported type alias has or is using private name '{1}'.": { + "category": "Error", + "code": 4083 + }, + "Exported type alias '{0}' has or is using private name '{1}' from module {2}.": { + "category": "Error", + "code": 4084 + }, + "Extends clause for inferred type '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4085 + }, + "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4091 + }, + "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4092 + }, + "Property '{0}' of exported anonymous class type may not be private or protected.": { + "category": "Error", + "code": 4094 + }, + "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4095 + }, + "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4096 + }, + "Public static method '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4097 + }, + "Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": { + "category": "Error", + "code": 4098 + }, + "Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4099 + }, + "Public method '{0}' of exported class has or is using private name '{1}'.": { + "category": "Error", + "code": 4100 + }, + "Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4101 + }, + "Method '{0}' of exported interface has or is using private name '{1}'.": { + "category": "Error", + "code": 4102 + }, + "Type parameter '{0}' of exported mapped object type is using private name '{1}'.": { + "category": "Error", + "code": 4103 + }, + "The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'.": { + "category": "Error", + "code": 4104 + }, + "Private or protected member '{0}' cannot be accessed on a type parameter.": { + "category": "Error", + "code": 4105 + }, + "Parameter '{0}' of accessor has or is using private name '{1}'.": { + "category": "Error", + "code": 4106 + }, + "Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'.": { + "category": "Error", + "code": 4107 + }, + "Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named.": { + "category": "Error", + "code": 4108 + }, + "Type arguments for '{0}' circularly reference themselves.": { + "category": "Error", + "code": 4109 + }, + "Tuple type arguments circularly reference themselves.": { + "category": "Error", + "code": 4110 + }, + "Property '{0}' comes from an index signature, so it must be accessed with ['{0}'].": { + "category": "Error", + "code": 4111 + }, + "This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class.": { + "category": "Error", + "code": 4112 + }, + "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'.": { + "category": "Error", + "code": 4113 + }, + "This member must have an 'override' modifier because it overrides a member in the base class '{0}'.": { + "category": "Error", + "code": 4114 + }, + "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'.": { + "category": "Error", + "code": 4115 + }, + "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'.": { + "category": "Error", + "code": 4116 + }, + "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 4117 + }, + "The type of this node cannot be serialized because its property '{0}' cannot be serialized.": { + "category": "Error", + "code": 4118 + }, + "This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": { + "category": "Error", + "code": 4119 + }, + "This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.": { + "category": "Error", + "code": 4120 + }, + "This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class.": { + "category": "Error", + "code": 4121 + }, + "This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'.": { + "category": "Error", + "code": 4122 + }, + "This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 4123 + }, + "Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.": { + "category": "Error", + "code": 4124 + }, + "Each declaration of '{0}.{1}' differs in its value, where '{2}' was expected but '{3}' was given.": { + "category": "Error", + "code": 4125 + }, + "One value of '{0}.{1}' is the string '{2}', and the other is assumed to be an unknown numeric value.": { + "category": "Error", + "code": 4126 + }, + "This member cannot have an 'override' modifier because its name is dynamic.": { + "category": "Error", + "code": 4127 + }, + "This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.": { + "category": "Error", + "code": 4128 + }, + + "The current host does not support the '{0}' option.": { + "category": "Error", + "code": 5001 + }, + "Option '{0}' requires value to be greater than '{1}'.": { + "category": "Error", + "code": 5002 + }, + "Cannot find the common subdirectory path for the input files.": { + "category": "Error", + "code": 5009 + }, + "File specification cannot end in a recursive directory wildcard ('**'): '{0}'.": { + "category": "Error", + "code": 5010 + }, + "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.": { + "category": "Error", + "code": 5011 + }, + "Cannot read file '{0}': {1}.": { + "category": "Error", + "code": 5012 + }, + "Unknown compiler option '{0}'.": { + "category": "Error", + "code": 5023 + }, + "Compiler option '{0}' requires a value of type {1}.": { + "category": "Error", + "code": 5024 + }, + "Unknown compiler option '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 5025 + }, + "Could not write file '{0}': {1}.": { + "category": "Error", + "code": 5033 + }, + "Option 'project' cannot be mixed with source files on a command line.": { + "category": "Error", + "code": 5042 + }, + "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher.": { + "category": "Error", + "code": 5047 + }, + "Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided.": { + "category": "Error", + "code": 5051 + }, + "Option '{0}' cannot be specified without specifying option '{1}'.": { + "category": "Error", + "code": 5052 + }, + "Option '{0}' cannot be specified with option '{1}'.": { + "category": "Error", + "code": 5053 + }, + "A 'tsconfig.json' file is already defined at: '{0}'.": { + "category": "Error", + "code": 5054 + }, + "Cannot write file '{0}' because it would overwrite input file.": { + "category": "Error", + "code": 5055 + }, + "Cannot write file '{0}' because it would be overwritten by multiple input files.": { + "category": "Error", + "code": 5056 + }, + "Cannot find a tsconfig.json file at the specified directory: '{0}'.": { + "category": "Error", + "code": 5057 + }, + "The specified path does not exist: '{0}'.": { + "category": "Error", + "code": 5058 + }, + "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier.": { + "category": "Error", + "code": 5059 + }, + "Pattern '{0}' can have at most one '*' character.": { + "category": "Error", + "code": 5061 + }, + "Substitution '{0}' in pattern '{1}' can have at most one '*' character.": { + "category": "Error", + "code": 5062 + }, + "Substitutions for pattern '{0}' should be an array.": { + "category": "Error", + "code": 5063 + }, + "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'.": { + "category": "Error", + "code": 5064 + }, + "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'.": { + "category": "Error", + "code": 5065 + }, + "Substitutions for pattern '{0}' shouldn't be an empty array.": { + "category": "Error", + "code": 5066 + }, + "Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name.": { + "category": "Error", + "code": 5067 + }, + "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig.": { + "category": "Error", + "code": 5068 + }, + "Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'.": { + "category": "Error", + "code": 5069 + }, + "Option '--resolveJsonModule' cannot be specified when 'moduleResolution' is set to 'classic'.": { + "category": "Error", + "code": 5070 + }, + "Option '--resolveJsonModule' cannot be specified when 'module' is set to 'none', 'system', or 'umd'.": { + "category": "Error", + "code": 5071 + }, + "Unknown build option '{0}'.": { + "category": "Error", + "code": 5072 + }, + "Build option '{0}' requires a value of type {1}.": { + "category": "Error", + "code": 5073 + }, + "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.": { + "category": "Error", + "code": 5074 + }, + "'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'.": { + "category": "Error", + "code": 5075 + }, + "'{0}' and '{1}' operations cannot be mixed without parentheses.": { + "category": "Error", + "code": 5076 + }, + "Unknown build option '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 5077 + }, + "Unknown watch option '{0}'.": { + "category": "Error", + "code": 5078 + }, + "Unknown watch option '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 5079 + }, + "Watch option '{0}' requires a value of type {1}.": { + "category": "Error", + "code": 5080 + }, + "Cannot find a tsconfig.json file at the current directory: {0}.": { + "category": "Error", + "code": 5081 + }, + "'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'.": { + "category": "Error", + "code": 5082 + }, + "Cannot read file '{0}'.": { + "category": "Error", + "code": 5083 + }, + "A tuple member cannot be both optional and rest.": { + "category": "Error", + "code": 5085 + }, + "A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type.": { + "category": "Error", + "code": 5086 + }, + "A labeled tuple element is declared as rest with a '...' before the name, rather than before the type.": { + "category": "Error", + "code": 5087 + }, + "The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary.": { + "category": "Error", + "code": 5088 + }, + "Option '{0}' cannot be specified when option 'jsx' is '{1}'.": { + "category": "Error", + "code": 5089 + }, + "Non-relative paths are not allowed. Did you forget a leading './'?": { + "category": "Error", + "code": 5090 + }, + "Option 'preserveConstEnums' cannot be disabled when '{0}' is enabled.": { + "category": "Error", + "code": 5091 + }, + "The root value of a '{0}' file must be an object.": { + "category": "Error", + "code": 5092 + }, + "Compiler option '--{0}' may only be used with '--build'.": { + "category": "Error", + "code": 5093 + }, + "Compiler option '--{0}' may not be used with '--build'.": { + "category": "Error", + "code": 5094 + }, + "Option '{0}' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.": { + "category": "Error", + "code": 5095 + }, + "Option 'allowImportingTsExtensions' can only be used when one of 'noEmit', 'emitDeclarationOnly', or 'rewriteRelativeImportExtensions' is set.": { + "category": "Error", + "code": 5096 + }, + "An import path can only end with a '{0}' extension when 'allowImportingTsExtensions' is enabled.": { + "category": "Error", + "code": 5097 + }, + "Option '{0}' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'.": { + "category": "Error", + "code": 5098 + }, + "Option '{0}' is deprecated and will stop functioning in TypeScript {1}. Specify compilerOption '\"ignoreDeprecations\": \"{2}\"' to silence this error.": { + "category": "Error", + "code": 5101 + }, + "Option '{0}' has been removed. Please remove it from your configuration.": { + "category": "Error", + "code": 5102 + }, + "Invalid value for '--ignoreDeprecations'.": { + "category": "Error", + "code": 5103 + }, + "Option '{0}' is redundant and cannot be specified with option '{1}'.": { + "category": "Error", + "code": 5104 + }, + "Option 'verbatimModuleSyntax' cannot be used when 'module' is set to 'UMD', 'AMD', or 'System'.": { + "category": "Error", + "code": 5105 + }, + "Use '{0}' instead.": { + "category": "Message", + "code": 5106 + }, + "Option '{0}={1}' is deprecated and will stop functioning in TypeScript {2}. Specify compilerOption '\"ignoreDeprecations\": \"{3}\"' to silence this error.": { + "category": "Error", + "code": 5107 + }, + "Option '{0}={1}' has been removed. Please remove it from your configuration.": { + "category": "Error", + "code": 5108 + }, + "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'.": { + "category": "Error", + "code": 5109 + }, + "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'.": { + "category": "Error", + "code": 5110 + }, + "Visit https://aka.ms/ts6 for migration information.": { + "category": "Message", + "code": 5111 + }, + "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.": { + "category": "Error", + "code": 5112 + }, + "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.": { + "category": "Error", + "code": 5113 + }, + "Instantiations of type '{0}' appear infinitely circular.": { + "category": "Error", + "code": 5114 + }, + "Instantiations of the following types appear infinitely circular: {0}.": { + "category": "Error", + "code": 5115 + }, + + "Generates a sourcemap for each corresponding '.d.ts' file.": { + "category": "Message", + "code": 6000 + }, + "Concatenate and emit output to single file.": { + "category": "Message", + "code": 6001 + }, + "Generates corresponding '.d.ts' file.": { + "category": "Message", + "code": 6002 + }, + "Specify the location where debugger should locate TypeScript files instead of source locations.": { + "category": "Message", + "code": 6004 + }, + "Watch input files.": { + "category": "Message", + "code": 6005 + }, + "Redirect output structure to the directory.": { + "category": "Message", + "code": 6006 + }, + "Do not erase const enum declarations in generated code.": { + "category": "Message", + "code": 6007 + }, + "Do not emit outputs if any errors were reported.": { + "category": "Message", + "code": 6008 + }, + "Do not emit comments to output.": { + "category": "Message", + "code": 6009 + }, + "Do not emit outputs.": { + "category": "Message", + "code": 6010 + }, + "Allow default imports from modules with no default export. This does not affect code emit, just typechecking.": { + "category": "Message", + "code": 6011 + }, + "Skip type checking of declaration files.": { + "category": "Message", + "code": 6012 + }, + "Do not resolve the real path of symlinks.": { + "category": "Message", + "code": 6013 + }, + "Only emit '.d.ts' declaration files.": { + "category": "Message", + "code": 6014 + }, + "Specify ECMAScript target version.": { + "category": "Message", + "code": 6015 + }, + "Specify module code generation.": { + "category": "Message", + "code": 6016 + }, + "Print this message.": { + "category": "Message", + "code": 6017 + }, + "Print the compiler's version.": { + "category": "Message", + "code": 6019 + }, + "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.": { + "category": "Message", + "code": 6020 + }, + "Syntax: {0}": { + "category": "Message", + "code": 6023 + }, + "options": { + "category": "Message", + "code": 6024 + }, + "file": { + "category": "Message", + "code": 6025 + }, + "Examples: {0}": { + "category": "Message", + "code": 6026 + }, + "Options:": { + "category": "Message", + "code": 6027 + }, + "Version {0}": { + "category": "Message", + "code": 6029 + }, + "Insert command line options and files from a file.": { + "category": "Message", + "code": 6030 + }, + "Starting compilation in watch mode...": { + "category": "Message", + "code": 6031 + }, + "File change detected. Starting incremental compilation...": { + "category": "Message", + "code": 6032 + }, + "KIND": { + "category": "Message", + "code": 6034 + }, + "FILE": { + "category": "Message", + "code": 6035 + }, + "VERSION": { + "category": "Message", + "code": 6036 + }, + "LOCATION": { + "category": "Message", + "code": 6037 + }, + "DIRECTORY": { + "category": "Message", + "code": 6038 + }, + "STRATEGY": { + "category": "Message", + "code": 6039 + }, + "FILE OR DIRECTORY": { + "category": "Message", + "code": 6040 + }, + "Errors Files": { + "_locale_notes": "There is a double space, and the order cannot be changed (they're table headings) ^", + "category": "Message", + "code": 6041 + }, + "Generates corresponding '.map' file.": { + "category": "Message", + "code": 6043 + }, + "Compiler option '{0}' expects an argument.": { + "category": "Error", + "code": 6044 + }, + "Unterminated quoted string in response file '{0}'.": { + "category": "Error", + "code": 6045 + }, + "Argument for '{0}' option must be: {1}.": { + "category": "Error", + "code": 6046 + }, + "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.": { + "category": "Error", + "code": 6048 + }, + "Unable to open file '{0}'.": { + "category": "Error", + "code": 6050 + }, + "Corrupted locale file {0}.": { + "category": "Error", + "code": 6051 + }, + "Raise error on expressions and declarations with an implied 'any' type.": { + "category": "Message", + "code": 6052 + }, + "File '{0}' not found.": { + "category": "Error", + "code": 6053 + }, + "File '{0}' has an unsupported extension. The only supported extensions are {1}.": { + "category": "Error", + "code": 6054 + }, + "Suppress noImplicitAny errors for indexing objects lacking index signatures.": { + "category": "Message", + "code": 6055 + }, + "Do not emit declarations for code that has an '@internal' annotation.": { + "category": "Message", + "code": 6056 + }, + "Specify the root directory of input files. Use to control the output directory structure with --outDir.": { + "category": "Message", + "code": 6058 + }, + "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files.": { + "category": "Error", + "code": 6059 + }, + "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix).": { + "category": "Message", + "code": 6060 + }, + "NEWLINE": { + "category": "Message", + "code": 6061 + }, + "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line.": { + "category": "Error", + "code": 6064 + }, + "Enables experimental support for ES7 decorators.": { + "category": "Message", + "code": 6065 + }, + "Enables experimental support for emitting type metadata for decorators.": { + "category": "Message", + "code": 6066 + }, + "Initializes a TypeScript project and creates a tsconfig.json file.": { + "category": "Message", + "code": 6070 + }, + "Successfully created a tsconfig.json file.": { + "category": "Message", + "code": 6071 + }, + "Suppress excess property checks for object literals.": { + "category": "Message", + "code": 6072 + }, + "Stylize errors and messages using color and context (experimental).": { + "category": "Message", + "code": 6073 + }, + "Do not report errors on unused labels.": { + "category": "Message", + "code": 6074 + }, + "Report error when not all code paths in function return a value.": { + "category": "Message", + "code": 6075 + }, + "Report errors for fallthrough cases in switch statement.": { + "category": "Message", + "code": 6076 + }, + "Do not report errors on unreachable code.": { + "category": "Message", + "code": 6077 + }, + "Disallow inconsistently-cased references to the same file.": { + "category": "Message", + "code": 6078 + }, + "Specify library files to be included in the compilation.": { + "category": "Message", + "code": 6079 + }, + "Specify JSX code generation.": { + "category": "Message", + "code": 6080 + }, + "Only 'amd' and 'system' modules are supported alongside --{0}.": { + "category": "Error", + "code": 6082 + }, + "Base directory to resolve non-absolute module names.": { + "category": "Message", + "code": 6083 + }, + "[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit": { + "category": "Message", + "code": 6084 + }, + "Enable tracing of the name resolution process.": { + "category": "Message", + "code": 6085 + }, + "======== Resolving module '{0}' from '{1}'. ========": { + "category": "Message", + "code": 6086 + }, + "Explicitly specified module resolution kind: '{0}'.": { + "category": "Message", + "code": 6087 + }, + "Module resolution kind is not specified, using '{0}'.": { + "category": "Message", + "code": 6088 + }, + "======== Module name '{0}' was successfully resolved to '{1}'. ========": { + "category": "Message", + "code": 6089 + }, + "======== Module name '{0}' was not resolved. ========": { + "category": "Message", + "code": 6090 + }, + "'paths' option is specified, looking for a pattern to match module name '{0}'.": { + "category": "Message", + "code": 6091 + }, + "Module name '{0}', matched pattern '{1}'.": { + "category": "Message", + "code": 6092 + }, + "Trying substitution '{0}', candidate module location: '{1}'.": { + "category": "Message", + "code": 6093 + }, + "Resolving module name '{0}' relative to base url '{1}' - '{2}'.": { + "category": "Message", + "code": 6094 + }, + "Loading module as file / folder, candidate module location '{0}', target file types: {1}.": { + "category": "Message", + "code": 6095 + }, + "File '{0}' does not exist.": { + "category": "Message", + "code": 6096 + }, + "File '{0}' exists - use it as a name resolution result.": { + "category": "Message", + "code": 6097 + }, + "Loading module '{0}' from 'node_modules' folder, target file types: {1}.": { + "category": "Message", + "code": 6098 + }, + "Found 'package.json' at '{0}'.": { + "category": "Message", + "code": 6099 + }, + "'package.json' does not have a '{0}' field.": { + "category": "Message", + "code": 6100 + }, + "'package.json' has '{0}' field '{1}' that references '{2}'.": { + "category": "Message", + "code": 6101 + }, + "Allow javascript files to be compiled.": { + "category": "Message", + "code": 6102 + }, + "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'.": { + "category": "Message", + "code": 6104 + }, + "Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'.": { + "category": "Message", + "code": 6105 + }, + "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'.": { + "category": "Message", + "code": 6106 + }, + "'rootDirs' option is set, using it to resolve relative module name '{0}'.": { + "category": "Message", + "code": 6107 + }, + "Longest matching prefix for '{0}' is '{1}'.": { + "category": "Message", + "code": 6108 + }, + "Loading '{0}' from the root dir '{1}', candidate location '{2}'.": { + "category": "Message", + "code": 6109 + }, + "Trying other entries in 'rootDirs'.": { + "category": "Message", + "code": 6110 + }, + "Module resolution using 'rootDirs' has failed.": { + "category": "Message", + "code": 6111 + }, + "Do not emit 'use strict' directives in module output.": { + "category": "Message", + "code": 6112 + }, + "Enable strict null checks.": { + "category": "Message", + "code": 6113 + }, + "Unknown option 'excludes'. Did you mean 'exclude'?": { + "category": "Error", + "code": 6114 + }, + "Raise error on 'this' expressions with an implied 'any' type.": { + "category": "Message", + "code": 6115 + }, + "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========": { + "category": "Message", + "code": 6116 + }, + "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========": { + "category": "Message", + "code": 6119 + }, + "======== Type reference directive '{0}' was not resolved. ========": { + "category": "Message", + "code": 6120 + }, + "Resolving with primary search path '{0}'.": { + "category": "Message", + "code": 6121 + }, + "Root directory cannot be determined, skipping primary search paths.": { + "category": "Message", + "code": 6122 + }, + "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========": { + "category": "Message", + "code": 6123 + }, + "Type declaration files to be included in compilation.": { + "category": "Message", + "code": 6124 + }, + "Looking up in 'node_modules' folder, initial location '{0}'.": { + "category": "Message", + "code": 6125 + }, + "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder.": { + "category": "Message", + "code": 6126 + }, + "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========": { + "category": "Message", + "code": 6127 + }, + "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========": { + "category": "Message", + "code": 6128 + }, + "Resolving real path for '{0}', result '{1}'.": { + "category": "Message", + "code": 6130 + }, + "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'.": { + "category": "Error", + "code": 6131 + }, + "File name '{0}' has a '{1}' extension - stripping it.": { + "category": "Message", + "code": 6132 + }, + "'{0}' is declared but its value is never read.": { + "category": "Error", + "code": 6133, + "reportsUnnecessary": true + }, + "Report errors on unused locals.": { + "category": "Message", + "code": 6134 + }, + "Report errors on unused parameters.": { + "category": "Message", + "code": 6135 + }, + "The maximum dependency depth to search under node_modules and load JavaScript files.": { + "category": "Message", + "code": 6136 + }, + "Cannot import type declaration files. Consider importing '{0}' instead of '{1}'.": { + "category": "Error", + "code": 6137 + }, + "Property '{0}' is declared but its value is never read.": { + "category": "Error", + "code": 6138, + "reportsUnnecessary": true + }, + "Import emit helpers from 'tslib'.": { + "category": "Message", + "code": 6139 + }, + "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'.": { + "category": "Error", + "code": 6140 + }, + "Parse in strict mode and emit \"use strict\" for each source file.": { + "category": "Message", + "code": 6141 + }, + "Module '{0}' was resolved to '{1}', but '--jsx' is not set.": { + "category": "Error", + "code": 6142 + }, + "Module '{0}' was resolved as locally declared ambient module in file '{1}'.": { + "category": "Message", + "code": 6144 + }, + "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'.": { + "category": "Message", + "code": 6146 + }, + "Resolution for module '{0}' was found in cache from location '{1}'.": { + "category": "Message", + "code": 6147 + }, + "Directory '{0}' does not exist, skipping all lookups in it.": { + "category": "Message", + "code": 6148 + }, + "Show diagnostic information.": { + "category": "Message", + "code": 6149 + }, + "Show verbose diagnostic information.": { + "category": "Message", + "code": 6150 + }, + "Emit a single file with source maps instead of having a separate file.": { + "category": "Message", + "code": 6151 + }, + "Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set.": { + "category": "Message", + "code": 6152 + }, + "Transpile each file as a separate module (similar to 'ts.transpileModule').": { + "category": "Message", + "code": 6153 + }, + "Print names of generated files part of the compilation.": { + "category": "Message", + "code": 6154 + }, + "Print names of files part of the compilation.": { + "category": "Message", + "code": 6155 + }, + "The locale used when displaying messages to the user (e.g. 'en-us')": { + "category": "Message", + "code": 6156 + }, + "Do not generate custom helper functions like '__extends' in compiled output.": { + "category": "Message", + "code": 6157 + }, + "Do not include the default library file (lib.d.ts).": { + "category": "Message", + "code": 6158 + }, + "Do not add triple-slash references or imported modules to the list of compiled files.": { + "category": "Message", + "code": 6159 + }, + "[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files.": { + "category": "Message", + "code": 6160 + }, + "List of folders to include type definitions from.": { + "category": "Message", + "code": 6161 + }, + "Disable size limitations on JavaScript projects.": { + "category": "Message", + "code": 6162 + }, + "The character set of the input files.": { + "category": "Message", + "code": 6163 + }, + "Skipping module '{0}' that looks like an absolute URI, target file types: {1}.": { + "category": "Message", + "code": 6164 + }, + "Do not truncate error messages.": { + "category": "Message", + "code": 6165 + }, + "Output directory for generated declaration files.": { + "category": "Message", + "code": 6166 + }, + "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'.": { + "category": "Message", + "code": 6167 + }, + "List of root folders whose combined content represents the structure of the project at runtime.": { + "category": "Message", + "code": 6168 + }, + "Show all compiler options.": { + "category": "Message", + "code": 6169 + }, + "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file": { + "category": "Message", + "code": 6170 + }, + "Command-line Options": { + "category": "Message", + "code": 6171 + }, + "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5'.": { + "category": "Message", + "code": 6179 + }, + "Enable all strict type-checking options.": { + "category": "Message", + "code": 6180 + }, + "Scoped package detected, looking in '{0}'": { + "category": "Message", + "code": 6182 + }, + "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": { + "category": "Message", + "code": 6183 + }, + "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": { + "category": "Message", + "code": 6184 + }, + "Enable strict checking of function types.": { + "category": "Message", + "code": 6186 + }, + "Enable strict checking of property initialization in classes.": { + "category": "Message", + "code": 6187 + }, + "Numeric separators are not allowed here.": { + "category": "Error", + "code": 6188 + }, + "Multiple consecutive numeric separators are not permitted.": { + "category": "Error", + "code": 6189 + }, + "Whether to keep outdated console output in watch mode instead of clearing the screen.": { + "category": "Message", + "code": 6191 + }, + "All imports in import declaration are unused.": { + "category": "Error", + "code": 6192, + "reportsUnnecessary": true + }, + "Found 1 error. Watching for file changes.": { + "category": "Message", + "code": 6193 + }, + "Found {0} errors. Watching for file changes.": { + "category": "Message", + "code": 6194 + }, + "Resolve 'keyof' to string valued property names only (no numbers or symbols).": { + "category": "Message", + "code": 6195 + }, + "'{0}' is declared but never used.": { + "category": "Error", + "code": 6196, + "reportsUnnecessary": true + }, + "Include modules imported with '.json' extension": { + "category": "Message", + "code": 6197 + }, + "All destructured elements are unused.": { + "category": "Error", + "code": 6198, + "reportsUnnecessary": true + }, + "All variables are unused.": { + "category": "Error", + "code": 6199, + "reportsUnnecessary": true + }, + "Definitions of the following identifiers conflict with those in another file: {0}": { + "category": "Error", + "code": 6200 + }, + "Conflicts are in this file.": { + "category": "Message", + "code": 6201 + }, + "Project references may not form a circular graph. Cycle detected: {0}": { + "category": "Error", + "code": 6202 + }, + "'{0}' was also declared here.": { + "category": "Message", + "code": 6203 + }, + "and here.": { + "category": "Message", + "code": 6204 + }, + "All type parameters are unused.": { + "category": "Error", + "code": 6205 + }, + "'package.json' has a 'typesVersions' field with version-specific path mappings.": { + "category": "Message", + "code": 6206 + }, + "'package.json' does not have a 'typesVersions' entry that matches version '{0}'.": { + "category": "Message", + "code": 6207 + }, + "'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'.": { + "category": "Message", + "code": 6208 + }, + "'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range.": { + "category": "Message", + "code": 6209 + }, + "An argument for '{0}' was not provided.": { + "category": "Message", + "code": 6210 + }, + "An argument matching this binding pattern was not provided.": { + "category": "Message", + "code": 6211 + }, + "Did you mean to call this expression?": { + "category": "Message", + "code": 6212 + }, + "Did you mean to use 'new' with this expression?": { + "category": "Message", + "code": 6213 + }, + "Enable strict 'bind', 'call', and 'apply' methods on functions.": { + "category": "Message", + "code": 6214 + }, + "Using compiler options of project reference redirect '{0}'.": { + "category": "Message", + "code": 6215 + }, + "Found 1 error.": { + "category": "Message", + "code": 6216 + }, + "Found {0} errors.": { + "category": "Message", + "code": 6217 + }, + "======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========": { + "category": "Message", + "code": 6218 + }, + "======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========": { + "category": "Message", + "code": 6219 + }, + "'package.json' had a falsy '{0}' field.": { + "category": "Message", + "code": 6220 + }, + "Disable use of source files instead of declaration files from referenced projects.": { + "category": "Message", + "code": 6221 + }, + "Emit class fields with Define instead of Set.": { + "category": "Message", + "code": 6222 + }, + "Generates a CPU profile.": { + "category": "Message", + "code": 6223 + }, + "Disable solution searching for this project.": { + "category": "Message", + "code": 6224 + }, + "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.": { + "category": "Message", + "code": 6225 + }, + "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.": { + "category": "Message", + "code": 6226 + }, + "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.": { + "category": "Message", + "code": 6227 + }, + "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'.": { + "category": "Error", + "code": 6229 + }, + "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line.": { + "category": "Error", + "code": 6230 + }, + "Could not resolve the path '{0}' with the extensions: {1}.": { + "category": "Error", + "code": 6231 + }, + "Declaration augments declaration in another file. This cannot be serialized.": { + "category": "Error", + "code": 6232 + }, + "This is the declaration being augmented. Consider moving the augmenting declaration into the same file.": { + "category": "Error", + "code": 6233 + }, + "This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?": { + "category": "Error", + "code": 6234 + }, + "Disable loading referenced projects.": { + "category": "Message", + "code": 6235 + }, + "Arguments for the rest parameter '{0}' were not provided.": { + "category": "Error", + "code": 6236 + }, + "Generates an event trace and a list of types.": { + "category": "Message", + "code": 6237 + }, + "Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react": { + "category": "Error", + "code": 6238 + }, + "File '{0}' exists according to earlier cached lookups.": { + "category": "Message", + "code": 6239 + }, + "File '{0}' does not exist according to earlier cached lookups.": { + "category": "Message", + "code": 6240 + }, + "Resolution for type reference directive '{0}' was found in cache from location '{1}'.": { + "category": "Message", + "code": 6241 + }, + "======== Resolving type reference directive '{0}', containing file '{1}'. ========": { + "category": "Message", + "code": 6242 + }, + "Interpret optional property types as written, rather than adding 'undefined'.": { + "category": "Message", + "code": 6243 + }, + "Modules": { + "category": "Message", + "code": 6244 + }, + "File Management": { + "category": "Message", + "code": 6245 + }, + "Emit": { + "category": "Message", + "code": 6246 + }, + "JavaScript Support": { + "category": "Message", + "code": 6247 + }, + "Type Checking": { + "category": "Message", + "code": 6248 + }, + "Editor Support": { + "category": "Message", + "code": 6249 + }, + "Watch and Build Modes": { + "category": "Message", + "code": 6250 + }, + "Compiler Diagnostics": { + "category": "Message", + "code": 6251 + }, + "Interop Constraints": { + "category": "Message", + "code": 6252 + }, + "Backwards Compatibility": { + "category": "Message", + "code": 6253 + }, + "Language and Environment": { + "category": "Message", + "code": 6254 + }, + "Projects": { + "category": "Message", + "code": 6255 + }, + "Output Formatting": { + "category": "Message", + "code": 6256 + }, + "Completeness": { + "category": "Message", + "code": 6257 + }, + "'{0}' should be set inside the 'compilerOptions' object of the config json file": { + "category": "Error", + "code": 6258 + }, + "Found 1 error in {0}": { + "category": "Message", + "code": 6259 + }, + "Found {0} errors in the same file, starting at: {1}": { + "category": "Message", + "code": 6260 + }, + "Found {0} errors in {1} files.": { + "category": "Message", + "code": 6261 + }, + "File name '{0}' has a '{1}' extension - looking up '{2}' instead.": { + "category": "Message", + "code": 6262 + }, + "Module '{0}' was resolved to '{1}', but '--allowArbitraryExtensions' is not set.": { + "category": "Error", + "code": 6263 + }, + "Enable importing files with any extension, provided a declaration file is present.": { + "category": "Message", + "code": 6264 + }, + "Resolving type reference directive for program that specifies custom typeRoots, skipping lookup in 'node_modules' folder.": { + "category": "Message", + "code": 6265 + }, + "Option '{0}' can only be specified on command line.": { + "category": "Error", + "code": 6266 + }, + + "Directory '{0}' has no containing package.json scope. Imports will not resolve.": { + "category": "Message", + "code": 6270 + }, + "Import specifier '{0}' does not exist in package.json scope at path '{1}'.": { + "category": "Message", + "code": 6271 + }, + "Invalid import specifier '{0}' has no possible resolutions.": { + "category": "Message", + "code": 6272 + }, + "package.json scope '{0}' has no imports defined.": { + "category": "Message", + "code": 6273 + }, + "package.json scope '{0}' explicitly maps specifier '{1}' to null.": { + "category": "Message", + "code": 6274 + }, + "package.json scope '{0}' has invalid type for target of specifier '{1}'": { + "category": "Message", + "code": 6275 + }, + "Export specifier '{0}' does not exist in package.json scope at path '{1}'.": { + "category": "Message", + "code": 6276 + }, + "Resolution of non-relative name failed; trying with modern Node resolution features disabled to see if npm library needs configuration update.": { + "category": "Message", + "code": 6277 + }, + "There are types at '{0}', but this result could not be resolved when respecting package.json \"exports\". The '{1}' library may need to update its package.json or typings.": { + "category": "Message", + "code": 6278 + }, + "Resolution of non-relative name failed; trying with '--moduleResolution bundler' to see if project may need configuration update.": { + "category": "Message", + "code": 6279 + }, + "There are types at '{0}', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'.": { + "category": "Message", + "code": 6280 + }, + "'package.json' has a 'peerDependencies' field.": { + "category": "Message", + "code": 6281 + }, + "Found peerDependency '{0}' with '{1}' version.": { + "category": "Message", + "code": 6282 + }, + "Failed to find peerDependency '{0}'.": { + "category": "Message", + "code": 6283 + }, + "File Layout": { + "category": "Message", + "code": 6284 + }, + "Environment Settings": { + "category": "Message", + "code": 6285 + }, + "See also https://aka.ms/tsconfig/module": { + "category": "Message", + "code": 6286 + }, + "For nodejs:": { + "category": "Message", + "code": 6287 + }, + "and npm install -D @types/node": { + "category": "Message", + "code": 6290 + }, + "Other Outputs": { + "category": "Message", + "code": 6291 + }, + "Stricter Typechecking Options": { + "category": "Message", + "code": 6292 + }, + "Style Options": { + "category": "Message", + "code": 6293 + }, + "Recommended Options": { + "category": "Message", + "code": 6294 + }, + + "Enable project compilation": { + "category": "Message", + "code": 6302 + }, + "Composite projects may not disable declaration emit.": { + "category": "Error", + "code": 6304 + }, + "Output file '{0}' has not been built from source file '{1}'.": { + "category": "Error", + "code": 6305 + }, + "Referenced project '{0}' must have setting \"composite\": true.": { + "category": "Error", + "code": 6306 + }, + "File '{0}' is not listed within the file list of project '{1}'. Projects must list all files or use an 'include' pattern.": { + "category": "Error", + "code": 6307 + }, + "Referenced project '{0}' may not disable emit.": { + "category": "Error", + "code": 6310 + }, + "Project '{0}' is out of date because output '{1}' is older than input '{2}'": { + "category": "Message", + "code": 6350 + }, + "Project '{0}' is up to date because newest input '{1}' is older than output '{2}'": { + "category": "Message", + "code": 6351 + }, + "Project '{0}' is out of date because output file '{1}' does not exist": { + "category": "Message", + "code": 6352 + }, + "Failed to delete file '{0}'.": { + "category": "Message", + "code": 6353 + }, + "Project '{0}' is up to date with .d.ts files from its dependencies": { + "category": "Message", + "code": 6354 + }, + "Projects in this build: {0}": { + "category": "Message", + "code": 6355 + }, + "A non-dry build would delete the following files: {0}": { + "category": "Message", + "code": 6356 + }, + "A non-dry build would build project '{0}'": { + "category": "Message", + "code": 6357 + }, + "Building project '{0}'...": { + "category": "Message", + "code": 6358 + }, + "Updating output timestamps of project '{0}'...": { + "category": "Message", + "code": 6359 + }, + "Project '{0}' is up to date": { + "category": "Message", + "code": 6361 + }, + "Skipping build of project '{0}' because its dependency '{1}' has errors": { + "category": "Message", + "code": 6362 + }, + "Project '{0}' can't be built because its dependency '{1}' has errors": { + "category": "Message", + "code": 6363 + }, + "Build one or more projects and their dependencies, if out of date": { + "category": "Message", + "code": 6364 + }, + "Delete the outputs of all projects.": { + "category": "Message", + "code": 6365 + }, + "Show what would be built (or deleted, if specified with '--clean')": { + "category": "Message", + "code": 6367 + }, + "Option '--build' must be the first command line argument.": { + "category": "Error", + "code": 6369 + }, + "Options '{0}' and '{1}' cannot be combined.": { + "category": "Error", + "code": 6370 + }, + "Updating unchanged output timestamps of project '{0}'...": { + "category": "Message", + "code": 6371 + }, + "A non-dry build would update timestamps for output of project '{0}'": { + "category": "Message", + "code": 6374 + }, + "Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'": { + "category": "Error", + "code": 6377 + }, + "Composite projects may not disable incremental compilation.": { + "category": "Error", + "code": 6379 + }, + "Specify file to store incremental compilation information": { + "category": "Message", + "code": 6380 + }, + "Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'": { + "category": "Message", + "code": 6381 + }, + "Skipping build of project '{0}' because its dependency '{1}' was not built": { + "category": "Message", + "code": 6382 + }, + "Project '{0}' can't be built because its dependency '{1}' was not built": { + "category": "Message", + "code": 6383 + }, + "Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it.": { + "category": "Message", + "code": 6384 + }, + "'{0}' is deprecated.": { + "category": "Suggestion", + "code": 6385, + "reportsDeprecated": true + }, + "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found.": { + "category": "Message", + "code": 6386 + }, + "The signature '{0}' of '{1}' is deprecated.": { + "category": "Suggestion", + "code": 6387, + "reportsDeprecated": true + }, + "Project '{0}' is being forcibly rebuilt": { + "category": "Message", + "code": 6388 + }, + "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved.": { + "category": "Message", + "code": 6389 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": { + "category": "Message", + "code": 6390 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": { + "category": "Message", + "code": 6391 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved.": { + "category": "Message", + "code": 6392 + }, + "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": { + "category": "Message", + "code": 6393 + }, + "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": { + "category": "Message", + "code": 6394 + }, + "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": { + "category": "Message", + "code": 6395 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": { + "category": "Message", + "code": 6396 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": { + "category": "Message", + "code": 6397 + }, + "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": { + "category": "Message", + "code": 6398 + }, + "Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted": { + "category": "Message", + "code": 6399 + }, + "Project '{0}' is up to date but needs to update timestamps of output files that are older than input files": { + "category": "Message", + "code": 6400 + }, + "Project '{0}' is out of date because config file does not exist.": { + "category": "Message", + "code": 6401 + }, + "Resolving in {0} mode with conditions {1}.": { + "category": "Message", + "code": 6402 + }, + "Matched '{0}' condition '{1}'.": { + "category": "Message", + "code": 6403 + }, + "Using '{0}' subpath '{1}' with target '{2}'.": { + "category": "Message", + "code": 6404 + }, + "Saw non-matching condition '{0}'.": { + "category": "Message", + "code": 6405 + }, + "Project '{0}' is out of date because buildinfo file '{1}' indicates there is change in compilerOptions": { + "category": "Message", + "code": 6406 + }, + "Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set.": { + "category": "Message", + "code": 6407 + }, + "Use the package.json 'exports' field when resolving package imports.": { + "category": "Message", + "code": 6408 + }, + "Use the package.json 'imports' field when resolving imports.": { + "category": "Message", + "code": 6409 + }, + "Conditions to set in addition to the resolver-specific defaults when resolving imports.": { + "category": "Message", + "code": 6410 + }, + "`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`.": { + "category": "Message", + "code": 6411 + }, + "Project '{0}' is out of date because buildinfo file '{1}' indicates that file '{2}' was root file of compilation but not any more.": { + "category": "Message", + "code": 6412 + }, + "Entering conditional exports.": { + "category": "Message", + "code": 6413 + }, + "Resolved under condition '{0}'.": { + "category": "Message", + "code": 6414 + }, + "Failed to resolve under condition '{0}'.": { + "category": "Message", + "code": 6415 + }, + "Exiting conditional exports.": { + "category": "Message", + "code": 6416 + }, + "Searching all ancestor node_modules directories for preferred extensions: {0}.": { + "category": "Message", + "code": 6417 + }, + "Searching all ancestor node_modules directories for fallback extensions: {0}.": { + "category": "Message", + "code": 6418 + }, + "Project '{0}' is out of date because buildinfo file '{1}' indicates that program needs to report errors.": { + "category": "Message", + "code": 6419 + }, + "Project '{0}' is out of date because input '{1}' does not exist.": { + "category": "Message", + "code": 6420 + }, + "Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files.": { + "category": "Message", + "code": 6421 + }, + "Project '{0}' is out of date because it has errors.": { + "category": "Message", + "code": 6423 + }, + "Multiple 'module.exports' assignments cannot be serialized for declaration emit.": { + "category": "Error", + "code": 6424 + }, + "Nested CommonJS export constructs cannot be serialized for declaration emit.": { + "category": "Error", + "code": 6425 + }, + + "The expected type comes from property '{0}' which is declared here on type '{1}'": { + "category": "Message", + "code": 6500 + }, + "The expected type comes from this index signature.": { + "category": "Message", + "code": 6501 + }, + "The expected type comes from the return type of this signature.": { + "category": "Message", + "code": 6502 + }, + "Print names of files that are part of the compilation and then stop processing.": { + "category": "Message", + "code": 6503 + }, + "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?": { + "category": "Error", + "code": 6504 + }, + "Print names of files and the reason they are part of the compilation.": { + "category": "Message", + "code": 6505 + }, + "Consider adding a 'declare' modifier to this class.": { + "category": "Message", + "code": 6506 + }, + "Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files.": { + "category": "Message", + "code": 6600 + }, + "Allow 'import x from y' when a module doesn't have a default export.": { + "category": "Message", + "code": 6601 + }, + "Allow accessing UMD globals from modules.": { + "category": "Message", + "code": 6602 + }, + "Disable error reporting for unreachable code.": { + "category": "Message", + "code": 6603 + }, + "Disable error reporting for unused labels.": { + "category": "Message", + "code": 6604 + }, + "Ensure 'use strict' is always emitted.": { + "category": "Message", + "code": 6605 + }, + "Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it.": { + "category": "Message", + "code": 6606 + }, + "Specify the base directory to resolve non-relative module names.": { + "category": "Message", + "code": 6607 + }, + "No longer supported. In early versions, manually set the text encoding for reading files.": { + "category": "Message", + "code": 6608 + }, + "Enable error reporting in type-checked JavaScript files.": { + "category": "Message", + "code": 6609 + }, + "Enable constraints that allow a TypeScript project to be used with project references.": { + "category": "Message", + "code": 6611 + }, + "Generate .d.ts files from TypeScript and JavaScript files in your project.": { + "category": "Message", + "code": 6612 + }, + "Specify the output directory for generated declaration files.": { + "category": "Message", + "code": 6613 + }, + "Create sourcemaps for d.ts files.": { + "category": "Message", + "code": 6614 + }, + "Output compiler performance information after building.": { + "category": "Message", + "code": 6615 + }, + "Disables inference for type acquisition by looking at filenames in a project.": { + "category": "Message", + "code": 6616 + }, + "Reduce the number of projects loaded automatically by TypeScript.": { + "category": "Message", + "code": 6617 + }, + "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.": { + "category": "Message", + "code": 6618 + }, + "Opt a project out of multi-project reference checking when editing.": { + "category": "Message", + "code": 6619 + }, + "Disable preferring source files instead of declaration files when referencing composite projects.": { + "category": "Message", + "code": 6620 + }, + "Emit more compliant, but verbose and less performant JavaScript for iteration.": { + "category": "Message", + "code": 6621 + }, + "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.": { + "category": "Message", + "code": 6622 + }, + "Only output d.ts files and not JavaScript files.": { + "category": "Message", + "code": 6623 + }, + "Emit design-type metadata for decorated declarations in source files.": { + "category": "Message", + "code": 6624 + }, + "Disable the type acquisition for JavaScript projects": { + "category": "Message", + "code": 6625 + }, + "Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility.": { + "category": "Message", + "code": 6626 + }, + "Filters results from the `include` option.": { + "category": "Message", + "code": 6627 + }, + "Remove a list of directories from the watch process.": { + "category": "Message", + "code": 6628 + }, + "Remove a list of files from the watch mode's processing.": { + "category": "Message", + "code": 6629 + }, + "Enable experimental support for legacy experimental decorators.": { + "category": "Message", + "code": 6630 + }, + "Print files read during the compilation including why it was included.": { + "category": "Message", + "code": 6631 + }, + "Output more detailed compiler performance information after building.": { + "category": "Message", + "code": 6632 + }, + "Specify one or more path or node module references to base configuration files from which settings are inherited.": { + "category": "Message", + "code": 6633 + }, + "Specify what approach the watcher should use if the system runs out of native file watchers.": { + "category": "Message", + "code": 6634 + }, + "Include a list of files. This does not support glob patterns, as opposed to `include`.": { + "category": "Message", + "code": 6635 + }, + "Build all projects, including those that appear to be up to date.": { + "category": "Message", + "code": 6636 + }, + "Ensure that casing is correct in imports.": { + "category": "Message", + "code": 6637 + }, + "Emit a v8 CPU profile of the compiler run for debugging.": { + "category": "Message", + "code": 6638 + }, + "Allow importing helper functions from tslib once per project, instead of including them per-file.": { + "category": "Message", + "code": 6639 + }, + "Skip building downstream projects on error in upstream project.": { + "category": "Message", + "code": 6640 + }, + "Specify a list of glob patterns that match files to be included in compilation.": { + "category": "Message", + "code": 6641 + }, + "Save .tsbuildinfo files to allow for incremental compilation of projects.": { + "category": "Message", + "code": 6642 + }, + "Include sourcemap files inside the emitted JavaScript.": { + "category": "Message", + "code": 6643 + }, + "Include source code in the sourcemaps inside the emitted JavaScript.": { + "category": "Message", + "code": 6644 + }, + "Ensure that each file can be safely transpiled without relying on other imports.": { + "category": "Message", + "code": 6645 + }, + "Specify what JSX code is generated.": { + "category": "Message", + "code": 6646 + }, + "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'.": { + "category": "Message", + "code": 6647 + }, + "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.": { + "category": "Message", + "code": 6648 + }, + "Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'.": { + "category": "Message", + "code": 6649 + }, + "Make keyof only return strings instead of string, numbers or symbols. Legacy option.": { + "category": "Message", + "code": 6650 + }, + "Specify a set of bundled library declaration files that describe the target runtime environment.": { + "category": "Message", + "code": 6651 + }, + "Print the names of emitted files after a compilation.": { + "category": "Message", + "code": 6652 + }, + "Print all of the files read during the compilation.": { + "category": "Message", + "code": 6653 + }, + "Set the language of the messaging from TypeScript. This does not affect emit.": { + "category": "Message", + "code": 6654 + }, + "Specify the location where debugger should locate map files instead of generated locations.": { + "category": "Message", + "code": 6655 + }, + "Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'.": { + "category": "Message", + "code": 6656 + }, + "Specify what module code is generated.": { + "category": "Message", + "code": 6657 + }, + "Specify how TypeScript looks up a file from a given module specifier.": { + "category": "Message", + "code": 6658 + }, + "Set the newline character for emitting files.": { + "category": "Message", + "code": 6659 + }, + "Disable emitting files from a compilation.": { + "category": "Message", + "code": 6660 + }, + "Disable generating custom helper functions like '__extends' in compiled output.": { + "category": "Message", + "code": 6661 + }, + "Disable emitting files if any type checking errors are reported.": { + "category": "Message", + "code": 6662 + }, + "Disable truncating types in error messages.": { + "category": "Message", + "code": 6663 + }, + "Enable error reporting for fallthrough cases in switch statements.": { + "category": "Message", + "code": 6664 + }, + "Enable error reporting for expressions and declarations with an implied 'any' type.": { + "category": "Message", + "code": 6665 + }, + "Ensure overriding members in derived classes are marked with an override modifier.": { + "category": "Message", + "code": 6666 + }, + "Enable error reporting for codepaths that do not explicitly return in a function.": { + "category": "Message", + "code": 6667 + }, + "Enable error reporting when 'this' is given the type 'any'.": { + "category": "Message", + "code": 6668 + }, + "Disable adding 'use strict' directives in emitted JavaScript files.": { + "category": "Message", + "code": 6669 + }, + "Disable including any library files, including the default lib.d.ts.": { + "category": "Message", + "code": 6670 + }, + "Enforces using indexed accessors for keys declared using an indexed type.": { + "category": "Message", + "code": 6671 + }, + "Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project.": { + "category": "Message", + "code": 6672 + }, + "Disable strict checking of generic signatures in function types.": { + "category": "Message", + "code": 6673 + }, + "Add 'undefined' to a type when accessed using an index.": { + "category": "Message", + "code": 6674 + }, + "Enable error reporting when local variables aren't read.": { + "category": "Message", + "code": 6675 + }, + "Raise an error when a function parameter isn't read.": { + "category": "Message", + "code": 6676 + }, + "Deprecated setting. Use 'outFile' instead.": { + "category": "Message", + "code": 6677 + }, + "Specify an output folder for all emitted files.": { + "category": "Message", + "code": 6678 + }, + "Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output.": { + "category": "Message", + "code": 6679 + }, + "Specify a set of entries that re-map imports to additional lookup locations.": { + "category": "Message", + "code": 6680 + }, + "Specify a list of language service plugins to include.": { + "category": "Message", + "code": 6681 + }, + "Disable erasing 'const enum' declarations in generated code.": { + "category": "Message", + "code": 6682 + }, + "Disable resolving symlinks to their realpath. This correlates to the same flag in node.": { + "category": "Message", + "code": 6683 + }, + "Disable wiping the console in watch mode.": { + "category": "Message", + "code": 6684 + }, + "Enable color and formatting in TypeScript's output to make compiler errors easier to read.": { + "category": "Message", + "code": 6685 + }, + "Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit.": { + "category": "Message", + "code": 6686 + }, + "Specify an array of objects that specify paths for projects. Used in project references.": { + "category": "Message", + "code": 6687 + }, + "Disable emitting comments.": { + "category": "Message", + "code": 6688 + }, + "Enable importing .json files.": { + "category": "Message", + "code": 6689 + }, + "Specify the root folder within your source files.": { + "category": "Message", + "code": 6690 + }, + "Allow multiple folders to be treated as one when resolving modules.": { + "category": "Message", + "code": 6691 + }, + "Skip type checking .d.ts files that are included with TypeScript.": { + "category": "Message", + "code": 6692 + }, + "Skip type checking all .d.ts files.": { + "category": "Message", + "code": 6693 + }, + "Create source map files for emitted JavaScript files.": { + "category": "Message", + "code": 6694 + }, + "Specify the root path for debuggers to find the reference source code.": { + "category": "Message", + "code": 6695 + }, + "Check that the arguments for 'bind', 'call', and 'apply' methods match the original function.": { + "category": "Message", + "code": 6697 + }, + "When assigning functions, check to ensure parameters and the return values are subtype-compatible.": { + "category": "Message", + "code": 6698 + }, + "When type checking, take into account 'null' and 'undefined'.": { + "category": "Message", + "code": 6699 + }, + "Check for class properties that are declared but not set in the constructor.": { + "category": "Message", + "code": 6700 + }, + "Disable emitting declarations that have '@internal' in their JSDoc comments.": { + "category": "Message", + "code": 6701 + }, + "Disable reporting of excess property errors during the creation of object literals.": { + "category": "Message", + "code": 6702 + }, + "Suppress 'noImplicitAny' errors when indexing objects that lack index signatures.": { + "category": "Message", + "code": 6703 + }, + "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively.": { + "category": "Message", + "code": 6704 + }, + "Set the JavaScript language version for emitted JavaScript and include compatible library declarations.": { + "category": "Message", + "code": 6705 + }, + "Log paths used during the 'moduleResolution' process.": { + "category": "Message", + "code": 6706 + }, + "Specify the path to .tsbuildinfo incremental compilation file.": { + "category": "Message", + "code": 6707 + }, + "Specify options for automatic acquisition of declaration files.": { + "category": "Message", + "code": 6709 + }, + "Specify multiple folders that act like './node_modules/@types'.": { + "category": "Message", + "code": 6710 + }, + "Specify type package names to be included without being referenced in a source file.": { + "category": "Message", + "code": 6711 + }, + "Emit ECMAScript-standard-compliant class fields.": { + "category": "Message", + "code": 6712 + }, + "Enable verbose logging.": { + "category": "Message", + "code": 6713 + }, + "Specify how directories are watched on systems that lack recursive file-watching functionality.": { + "category": "Message", + "code": 6714 + }, + "Specify how the TypeScript watch mode works.": { + "category": "Message", + "code": 6715 + }, + "Require undeclared properties from index signatures to use element accesses.": { + "category": "Message", + "code": 6717 + }, + "Specify emit/checking behavior for imports that are only used for types.": { + "category": "Message", + "code": 6718 + }, + "Require sufficient annotation on exports so other tools can trivially generate declaration files.": { + "category": "Message", + "code": 6719 + }, + "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'.": { + "category": "Message", + "code": 6720 + }, + "Do not allow runtime constructs that are not part of ECMAScript.": { + "category": "Message", + "code": 6721 + }, + "Default catch clause variables as 'unknown' instead of 'any'.": { + "category": "Message", + "code": 6803 + }, + "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting.": { + "category": "Message", + "code": 6804 + }, + "Disable full type checking (only critical parse and emit errors will be reported).": { + "category": "Message", + "code": 6805 + }, + "Check side effect imports.": { + "category": "Message", + "code": 6806 + }, + "This operation can be simplified. This shift is identical to `{0} {1} {2}`.": { + "category": "Error", + "code": 6807 + }, + "Enable lib replacement.": { + "category": "Message", + "code": 6808 + }, + "Ensure types are ordered stably and deterministically across compilations.": { + "category": "Message", + "code": 6809 + }, + + "one of:": { + "category": "Message", + "code": 6900 + }, + "one or more:": { + "category": "Message", + "code": 6901 + }, + "type:": { + "category": "Message", + "code": 6902 + }, + "default:": { + "category": "Message", + "code": 6903 + }, + + "`true`, unless `strict` is `false`": { + "category": "Message", + "code": 6905 + }, + "`false`, unless `composite` is set": { + "category": "Message", + "code": 6906 + }, + "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified.": { + "category": "Message", + "code": 6907 + }, + "`[]` if `files` is specified, otherwise `[\"**/*\"]`": { + "category": "Message", + "code": 6908 + }, + "`true` if `composite`, `false` otherwise": { + "category": "Message", + "code": 6909 + }, + "`nodenext` if `module` is `nodenext`; `node16` if `module` is `node16` or `node18`; otherwise, `bundler`.": { + "category": "Message", + "code": 69010 + }, + "Computed from the list of input files": { + "category": "Message", + "code": 6911 + }, + "Platform specific": { + "category": "Message", + "code": 6912 + }, + "You can learn about all of the compiler options at {0}": { + "category": "Message", + "code": 6913 + }, + "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:": { + "category": "Message", + "code": 6914 + }, + "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}": { + "category": "Message", + "code": 6915 + }, + "COMMON COMMANDS": { + "category": "Message", + "code": 6916 + }, + "ALL COMPILER OPTIONS": { + "category": "Message", + "code": 6917 + }, + "WATCH OPTIONS": { + "category": "Message", + "code": 6918 + }, + "BUILD OPTIONS": { + "category": "Message", + "code": 6919 + }, + "COMMON COMPILER OPTIONS": { + "category": "Message", + "code": 6920 + }, + "COMMAND LINE FLAGS": { + "category": "Message", + "code": 6921 + }, + "tsc: The TypeScript Compiler": { + "category": "Message", + "code": 6922 + }, + "Compiles the current project (tsconfig.json in the working directory.)": { + "category": "Message", + "code": 6923 + }, + "Ignoring tsconfig.json, compiles the specified files with default compiler options.": { + "category": "Message", + "code": 6924 + }, + "Build a composite project in the working directory.": { + "category": "Message", + "code": 6925 + }, + "Creates a tsconfig.json with the recommended settings in the working directory.": { + "category": "Message", + "code": 6926 + }, + "Compiles the TypeScript project located at the specified path.": { + "category": "Message", + "code": 6927 + }, + "An expanded version of this information, showing all possible compiler options": { + "category": "Message", + "code": 6928 + }, + "Compiles the current project, with additional settings.": { + "category": "Message", + "code": 6929 + }, + "`true` for ES2022 and above, including ESNext.": { + "category": "Message", + "code": 6930 + }, + "List of file name suffixes to search when resolving a module.": { + "category": "Error", + "code": 6931 + }, + "`false`, unless `checkJs` is set": { + "category": "Message", + "code": 6932 + }, + "Do not print diagnostics.": { + "category": "Message", + "code": 6933 + }, + "Run in single threaded mode.": { + "category": "Message", + "code": 6934 + }, + "Generate pprof CPU/memory profiles to the given directory.": { + "category": "Message", + "code": 6935 + }, + "Set the number of checkers per project.": { + "category": "Message", + "code": 6936 + }, + "4, unless --singleThreaded is passed.": { + "category": "Message", + "code": 6937 + }, + "Set the number of projects to build concurrently.": { + "category": "Message", + "code": 6938 + }, + "Deduplicate packages with the same name and version.": { + "category": "Message", + "code": 6939 + }, + "Allow loading external content mapper plugins that execute code during compilation.": { + "category": "Message", + "code": 6940 + }, + + "Variable '{0}' implicitly has an '{1}' type.": { + "category": "Error", + "code": 7005 + }, + "Parameter '{0}' implicitly has an '{1}' type.": { + "category": "Error", + "code": 7006 + }, + "Member '{0}' implicitly has an '{1}' type.": { + "category": "Error", + "code": 7008 + }, + "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.": { + "category": "Error", + "code": 7009 + }, + "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type.": { + "category": "Error", + "code": 7010 + }, + "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type.": { + "category": "Error", + "code": 7011 + }, + "This overload implicitly returns the type '{0}' because it lacks a return type annotation.": { + "category": "Error", + "code": 7012 + }, + "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type.": { + "category": "Error", + "code": 7013 + }, + "Function type, which lacks return-type annotation, implicitly has an '{0}' return type.": { + "category": "Error", + "code": 7014 + }, + "Element implicitly has an 'any' type because index expression is not of type 'number'.": { + "category": "Error", + "code": 7015 + }, + "Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type.": { + "category": "Error", + "code": 7016 + }, + "Element implicitly has an 'any' type because type '{0}' has no index signature.": { + "category": "Error", + "code": 7017 + }, + "Object literal's property '{0}' implicitly has an '{1}' type.": { + "category": "Error", + "code": 7018 + }, + "Rest parameter '{0}' implicitly has an 'any[]' type.": { + "category": "Error", + "code": 7019 + }, + "Call signature, which lacks return-type annotation, implicitly has an 'any' return type.": { + "category": "Error", + "code": 7020 + }, + "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.": { + "category": "Error", + "code": 7022 + }, + "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.": { + "category": "Error", + "code": 7023 + }, + "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.": { + "category": "Error", + "code": 7024 + }, + "Generator implicitly has yield type '{0}'. Consider supplying a return type annotation.": { + "category": "Error", + "code": 7025 + }, + "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists.": { + "category": "Error", + "code": 7026 + }, + "Unreachable code detected.": { + "category": "Error", + "code": 7027, + "reportsUnnecessary": true + }, + "Unused label.": { + "category": "Error", + "code": 7028, + "reportsUnnecessary": true + }, + "Fallthrough case in switch.": { + "category": "Error", + "code": 7029 + }, + "Not all code paths return a value.": { + "category": "Error", + "code": 7030 + }, + "Binding element '{0}' implicitly has an '{1}' type.": { + "category": "Error", + "code": 7031 + }, + "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation.": { + "category": "Error", + "code": 7032 + }, + "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation.": { + "category": "Error", + "code": 7033 + }, + "Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined.": { + "category": "Error", + "code": 7034 + }, + "Try `npm i --save-dev @types/{1}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`": { + "category": "Error", + "code": 7035 + }, + "Dynamic import's specifier must be of type 'string', but here has type '{0}'.": { + "category": "Error", + "code": 7036 + }, + "Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'.": { + "category": "Message", + "code": 7037 + }, + "Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.": { + "category": "Message", + "code": 7038 + }, + "Mapped object type implicitly has an 'any' template type.": { + "category": "Error", + "code": 7039 + }, + "If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'": { + "category": "Error", + "code": 7040 + }, + "The containing arrow function captures the global value of 'this'.": { + "category": "Error", + "code": 7041 + }, + "Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used.": { + "category": "Error", + "code": 7042 + }, + "Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7043 + }, + "Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7044 + }, + "Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7045 + }, + "Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7046 + }, + "Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7047 + }, + "Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage.": { + "category": "Suggestion", + "code": 7048 + }, + "Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage.": { + "category": "Suggestion", + "code": 7049 + }, + "'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage.": { + "category": "Suggestion", + "code": 7050 + }, + "Parameter has a name but no type. Did you mean '{0}: {1}'?": { + "category": "Error", + "code": 7051 + }, + "Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?": { + "category": "Error", + "code": 7052 + }, + "Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'.": { + "category": "Error", + "code": 7053 + }, + "No index signature with a parameter of type '{0}' was found on type '{1}'.": { + "category": "Error", + "code": 7054 + }, + "'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type.": { + "category": "Error", + "code": 7055 + }, + "The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.": { + "category": "Error", + "code": 7056 + }, + "'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.": { + "category": "Error", + "code": 7057 + }, + "If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`": { + "category": "Error", + "code": 7058 + }, + "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.": { + "category": "Error", + "code": 7059 + }, + "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint.": { + "category": "Error", + "code": 7060 + }, + "A mapped type may not declare properties or methods.": { + "category": "Error", + "code": 7061 + }, + "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.": { + "category": "Error", + "code": 7080 + }, + + "You cannot rename this element.": { + "category": "Error", + "code": 8000 + }, + "You cannot rename elements that are defined in the standard TypeScript library.": { + "category": "Error", + "code": 8001 + }, + "'import ... =' can only be used in TypeScript files.": { + "category": "Error", + "code": 8002 + }, + "'export =' can only be used in TypeScript files.": { + "category": "Error", + "code": 8003 + }, + "Type parameter declarations can only be used in TypeScript files.": { + "category": "Error", + "code": 8004 + }, + "'implements' clauses can only be used in TypeScript files.": { + "category": "Error", + "code": 8005 + }, + "'{0}' declarations can only be used in TypeScript files.": { + "category": "Error", + "code": 8006 + }, + "Type aliases can only be used in TypeScript files.": { + "category": "Error", + "code": 8008 + }, + "The '{0}' modifier can only be used in TypeScript files.": { + "category": "Error", + "code": 8009 + }, + "Type annotations can only be used in TypeScript files.": { + "category": "Error", + "code": 8010 + }, + "Type arguments can only be used in TypeScript files.": { + "category": "Error", + "code": 8011 + }, + "Parameter modifiers can only be used in TypeScript files.": { + "category": "Error", + "code": 8012 + }, + "Non-null assertions can only be used in TypeScript files.": { + "category": "Error", + "code": 8013 + }, + "Type assertion expressions can only be used in TypeScript files.": { + "category": "Error", + "code": 8016 + }, + "Signature declarations can only be used in TypeScript files.": { + "category": "Error", + "code": 8017 + }, + "Report errors in .js files.": { + "category": "Message", + "code": 8019 + }, + "JSDoc types can only be used inside documentation comments.": { + "category": "Error", + "code": 8020 + }, + "JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags.": { + "category": "Error", + "code": 8021 + }, + "JSDoc '@{0}' is not attached to a class.": { + "category": "Error", + "code": 8022 + }, + "JSDoc '@{0} {1}' does not match the 'extends {2}' clause.": { + "category": "Error", + "code": 8023 + }, + "JSDoc '@param' tag has name '{0}', but there is no parameter with that name.": { + "category": "Error", + "code": 8024 + }, + "Class declarations cannot have more than one '@augments' or '@extends' tag.": { + "category": "Error", + "code": 8025 + }, + "Expected {0} type arguments; provide these with an '@extends' tag.": { + "category": "Error", + "code": 8026 + }, + "Expected {0}-{1} type arguments; provide these with an '@extends' tag.": { + "category": "Error", + "code": 8027 + }, + "JSDoc '...' may only appear in the last parameter of a signature.": { + "category": "Error", + "code": 8028 + }, + "JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type.": { + "category": "Error", + "code": 8029 + }, + "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.": { + "category": "Error", + "code": 8030 + }, + "You cannot rename a module via a global import.": { + "category": "Error", + "code": 8031 + }, + "Qualified name '{0}' is not allowed without a leading '@param {object} {1}'.": { + "category": "Error", + "code": 8032 + }, + "A JSDoc '@typedef' comment may not contain multiple '@type' tags.": { + "category": "Error", + "code": 8033 + }, + "The tag was first specified here.": { + "category": "Error", + "code": 8034 + }, + "You cannot rename elements that are defined in a 'node_modules' folder.": { + "category": "Error", + "code": 8035 + }, + "You cannot rename elements that are defined in another 'node_modules' folder.": { + "category": "Error", + "code": 8036 + }, + "Type satisfaction expressions can only be used in TypeScript files.": { + "category": "Error", + "code": 8037 + }, + "Decorators may not appear after 'export' or 'export default' if they also appear before 'export'.": { + "category": "Error", + "code": 8038 + }, + "A JSDoc '@template' tag may not follow a '@typedef', '@callback', or '@overload' tag": { + "category": "Error", + "code": 8039 + }, + "File rename is not supported by the editor": { + "category": "Error", + "code": 8040 + }, + + "Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit.": { + "category": "Error", + "code": 9005 + }, + "Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit.": { + "category": "Error", + "code": 9006 + }, + "Function must have an explicit return type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9007 + }, + "Method must have an explicit return type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9008 + }, + "At least one accessor must have an explicit type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9009 + }, + "Variable must have an explicit type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9010 + }, + "Parameter must have an explicit type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9011 + }, + "Property must have an explicit type annotation with --isolatedDeclarations.": { + "category": "Error", + "code": 9012 + }, + "Expression type can't be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9013 + }, + "Computed properties must be number or string literals, variables or dotted expressions with --isolatedDeclarations.": { + "category": "Error", + "code": 9014 + }, + "Objects that contain spread assignments can't be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9015 + }, + "Objects that contain shorthand properties can't be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9016 + }, + "Only const arrays can be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9017 + }, + "Arrays with spread elements can't inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9018 + }, + "Binding elements with initializers can't be exported directly with --isolatedDeclarations.": { + "category": "Error", + "code": 9019 + }, + "Enum member initializers must be computable without references to external symbols with --isolatedDeclarations.": { + "category": "Error", + "code": 9020 + }, + "Extends clause can't contain an expression with --isolatedDeclarations.": { + "category": "Error", + "code": 9021 + }, + "Inference from class expressions is not supported with --isolatedDeclarations.": { + "category": "Error", + "code": 9022 + }, + "Assigning properties to functions without declaring them is not supported with --isolatedDeclarations. Add an explicit declaration for the properties assigned to this function.": { + "category": "Error", + "code": 9023 + }, + "Declaration emit for this parameter requires implicitly adding undefined to its type. This is not supported with --isolatedDeclarations.": { + "category": "Error", + "code": 9025 + }, + "Declaration emit for this file requires preserving this import for augmentations. This is not supported with --isolatedDeclarations.": { + "category": "Error", + "code": 9026 + }, + "Add a type annotation to the variable {0}.": { + "category": "Error", + "code": 9027 + }, + "Add a type annotation to the parameter {0}.": { + "category": "Error", + "code": 9028 + }, + "Add a type annotation to the property {0}.": { + "category": "Error", + "code": 9029 + }, + "Add a return type to the function expression.": { + "category": "Error", + "code": 9030 + }, + "Add a return type to the function declaration.": { + "category": "Error", + "code": 9031 + }, + "Add a return type to the get accessor declaration.": { + "category": "Error", + "code": 9032 + }, + "Add a type to parameter of the set accessor declaration.": { + "category": "Error", + "code": 9033 + }, + "Add a return type to the method": { + "category": "Error", + "code": 9034 + }, + "Add satisfies and a type assertion to this expression (satisfies T as T) to make the type explicit.": { + "category": "Error", + "code": 9035 + }, + "Move the expression in default export to a variable and add a type annotation to it.": { + "category": "Error", + "code": 9036 + }, + "Default exports can't be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9037 + }, + "Computed property names on class or object literals cannot be inferred with --isolatedDeclarations.": { + "category": "Error", + "code": 9038 + }, + "Type containing private name '{0}' can't be used with --isolatedDeclarations.": { + "category": "Error", + "code": 9039 + }, + "JSX attributes must only be assigned a non-empty 'expression'.": { + "category": "Error", + "code": 17000 + }, + "JSX elements cannot have multiple attributes with the same name.": { + "category": "Error", + "code": 17001 + }, + "Expected corresponding JSX closing tag for '{0}'.": { + "category": "Error", + "code": 17002 + }, + "Cannot use JSX unless the '--jsx' flag is provided.": { + "category": "Error", + "code": 17004 + }, + "A constructor cannot contain a 'super' call when its class extends 'null'.": { + "category": "Error", + "code": 17005 + }, + "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { + "category": "Error", + "code": 17006 + }, + "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { + "category": "Error", + "code": 17007 + }, + "JSX element '{0}' has no corresponding closing tag.": { + "category": "Error", + "code": 17008 + }, + "'super' must be called before accessing 'this' in the constructor of a derived class.": { + "category": "Error", + "code": 17009 + }, + "Unknown type acquisition option '{0}'.": { + "category": "Error", + "code": 17010 + }, + "'super' must be called before accessing a property of 'super' in the constructor of a derived class.": { + "category": "Error", + "code": 17011 + }, + "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 17012 + }, + "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor.": { + "category": "Error", + "code": 17013 + }, + "JSX fragment has no corresponding closing tag.": { + "category": "Error", + "code": 17014 + }, + "Expected corresponding closing tag for JSX fragment.": { + "category": "Error", + "code": 17015 + }, + "The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option.": { + "category": "Error", + "code": 17016 + }, + "An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments.": { + "category": "Error", + "code": 17017 + }, + "Unknown type acquisition option '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 17018 + }, + "'{0}' at the end of a type is not valid TypeScript syntax. Did you mean to write '{1}'?": { + "category": "Error", + "code": 17019 + }, + "'{0}' at the start of a type is not valid TypeScript syntax. Did you mean to write '{1}'?": { + "category": "Error", + "code": 17020 + }, + "Unicode escape sequence cannot appear here.": { + "category": "Error", + "code": 17021 + }, + "Circularity detected while resolving configuration: {0}": { + "category": "Error", + "code": 18000 + }, + "The 'files' list in config file '{0}' is empty.": { + "category": "Error", + "code": 18002 + }, + "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'.": { + "category": "Error", + "code": 18003 + }, + + "File is a CommonJS module; it may be converted to an ES module.": { + "category": "Suggestion", + "code": 80001 + }, + "This constructor function may be converted to a class declaration.": { + "category": "Suggestion", + "code": 80002 + }, + "Import may be converted to a default import.": { + "category": "Suggestion", + "code": 80003 + }, + "JSDoc types may be moved to TypeScript types.": { + "category": "Suggestion", + "code": 80004 + }, + "'require' call may be converted to an import.": { + "category": "Suggestion", + "code": 80005 + }, + "This may be converted to an async function.": { + "category": "Suggestion", + "code": 80006 + }, + "'await' has no effect on the type of this expression.": { + "category": "Suggestion", + "code": 80007 + }, + "Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.": { + "category": "Suggestion", + "code": 80008 + }, + "JSDoc typedef may be converted to TypeScript type.": { + "category": "Suggestion", + "code": 80009 + }, + "JSDoc typedefs may be converted to TypeScript types.": { + "category": "Suggestion", + "code": 80010 + }, + + "Add missing 'super()' call": { + "category": "Message", + "code": 90001 + }, + "Make 'super()' call the first statement in the constructor": { + "category": "Message", + "code": 90002 + }, + "Change 'extends' to 'implements'": { + "category": "Message", + "code": 90003 + }, + "Remove unused declaration for: '{0}'": { + "category": "Message", + "code": 90004 + }, + "Remove import from '{0}'": { + "category": "Message", + "code": 90005 + }, + "Implement interface '{0}'": { + "category": "Message", + "code": 90006 + }, + "Implement inherited abstract class": { + "category": "Message", + "code": 90007 + }, + "Add '{0}.' to unresolved variable": { + "category": "Message", + "code": 90008 + }, + "Remove variable statement": { + "category": "Message", + "code": 90010 + }, + "Remove template tag": { + "category": "Message", + "code": 90011 + }, + "Remove type parameters": { + "category": "Message", + "code": 90012 + }, + "Import '{0}' from \"{1}\"": { + "category": "Message", + "code": 90013 + }, + "Change '{0}' to '{1}'": { + "category": "Message", + "code": 90014 + }, + "Declare property '{0}'": { + "category": "Message", + "code": 90016 + }, + "Add index signature for property '{0}'": { + "category": "Message", + "code": 90017 + }, + "Disable checking for this file": { + "category": "Message", + "code": 90018 + }, + "Ignore this error message": { + "category": "Message", + "code": 90019 + }, + "Initialize property '{0}' in the constructor": { + "category": "Message", + "code": 90020 + }, + "Initialize static property '{0}'": { + "category": "Message", + "code": 90021 + }, + "Change spelling to '{0}'": { + "category": "Message", + "code": 90022 + }, + "Declare method '{0}'": { + "category": "Message", + "code": 90023 + }, + "Declare static method '{0}'": { + "category": "Message", + "code": 90024 + }, + "Prefix '{0}' with an underscore": { + "category": "Message", + "code": 90025 + }, + "Rewrite as the indexed access type '{0}'": { + "category": "Message", + "code": 90026 + }, + "Declare static property '{0}'": { + "category": "Message", + "code": 90027 + }, + "Call decorator expression": { + "category": "Message", + "code": 90028 + }, + "Add async modifier to containing function": { + "category": "Message", + "code": 90029 + }, + "Replace 'infer {0}' with 'unknown'": { + "category": "Message", + "code": 90030 + }, + "Replace all unused 'infer' with 'unknown'": { + "category": "Message", + "code": 90031 + }, + "Add parameter name": { + "category": "Message", + "code": 90034 + }, + "Declare private property '{0}'": { + "category": "Message", + "code": 90035 + }, + "Replace '{0}' with 'Promise<{1}>'": { + "category": "Message", + "code": 90036 + }, + "Fix all incorrect return type of an async functions": { + "category": "Message", + "code": 90037 + }, + "Declare private method '{0}'": { + "category": "Message", + "code": 90038 + }, + "Remove unused destructuring declaration": { + "category": "Message", + "code": 90039 + }, + "Remove unused declarations for: '{0}'": { + "category": "Message", + "code": 90041 + }, + "Declare a private field named '{0}'.": { + "category": "Message", + "code": 90053 + }, + "Includes imports of types referenced by '{0}'": { + "category": "Message", + "code": 90054 + }, + "Remove 'type' from import declaration from \"{0}\"": { + "category": "Message", + "code": 90055 + }, + "Remove 'type' from import of '{0}' from \"{1}\"": { + "category": "Message", + "code": 90056 + }, + "Add import from \"{0}\"": { + "category": "Message", + "code": 90057 + }, + "Update import from \"{0}\"": { + "category": "Message", + "code": 90058 + }, + "Export '{0}' from module '{1}'": { + "category": "Message", + "code": 90059 + }, + "Export all referenced locals": { + "category": "Message", + "code": 90060 + }, + "Update modifiers of '{0}'": { + "category": "Message", + "code": 90061 + }, + "Add annotation of type '{0}'": { + "category": "Message", + "code": 90062 + }, + "Add return type '{0}'": { + "category": "Message", + "code": 90063 + }, + "Extract base class to variable": { + "category": "Message", + "code": 90064 + }, + "Extract default export to variable": { + "category": "Message", + "code": 90065 + }, + "Extract binding expressions to variable": { + "category": "Message", + "code": 90066 + }, + "Add all missing type annotations": { + "category": "Message", + "code": 90067 + }, + "Add satisfies and an inline type assertion with '{0}'": { + "category": "Message", + "code": 90068 + }, + "Extract to variable and replace with '{0} as typeof {0}'": { + "category": "Message", + "code": 90069 + }, + "Mark array literal as const": { + "category": "Message", + "code": 90070 + }, + "Annotate types of properties expando function in a namespace": { + "category": "Message", + "code": 90071 + }, + + "Convert function to an ES2015 class": { + "category": "Message", + "code": 95001 + }, + "Convert '{0}' to '{1} in {0}'": { + "category": "Message", + "code": 95003 + }, + "Extract to {0} in {1}": { + "category": "Message", + "code": 95004 + }, + "Extract function": { + "category": "Message", + "code": 95005 + }, + "Extract constant": { + "category": "Message", + "code": 95006 + }, + "Extract to {0} in enclosing scope": { + "category": "Message", + "code": 95007 + }, + "Extract to {0} in {1} scope": { + "category": "Message", + "code": 95008 + }, + "Annotate with type from JSDoc": { + "category": "Message", + "code": 95009 + }, + "Infer type of '{0}' from usage": { + "category": "Message", + "code": 95011 + }, + "Infer parameter types from usage": { + "category": "Message", + "code": 95012 + }, + "Convert to default import": { + "category": "Message", + "code": 95013 + }, + "Install '{0}'": { + "category": "Message", + "code": 95014 + }, + "Replace import with '{0}'.": { + "category": "Message", + "code": 95015 + }, + "Use synthetic 'default' member.": { + "category": "Message", + "code": 95016 + }, + "Convert to ES module": { + "category": "Message", + "code": 95017 + }, + "Add 'undefined' type to property '{0}'": { + "category": "Message", + "code": 95018 + }, + "Add initializer to property '{0}'": { + "category": "Message", + "code": 95019 + }, + "Add definite assignment assertion to property '{0}'": { + "category": "Message", + "code": 95020 + }, + "Convert all type literals to mapped type": { + "category": "Message", + "code": 95021 + }, + "Add all missing members": { + "category": "Message", + "code": 95022 + }, + "Infer all types from usage": { + "category": "Message", + "code": 95023 + }, + "Delete all unused declarations": { + "category": "Message", + "code": 95024 + }, + "Prefix all unused declarations with '_' where possible": { + "category": "Message", + "code": 95025 + }, + "Fix all detected spelling errors": { + "category": "Message", + "code": 95026 + }, + "Add initializers to all uninitialized properties": { + "category": "Message", + "code": 95027 + }, + "Add definite assignment assertions to all uninitialized properties": { + "category": "Message", + "code": 95028 + }, + "Add undefined type to all uninitialized properties": { + "category": "Message", + "code": 95029 + }, + "Change all jsdoc-style types to TypeScript": { + "category": "Message", + "code": 95030 + }, + "Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)": { + "category": "Message", + "code": 95031 + }, + "Implement all unimplemented interfaces": { + "category": "Message", + "code": 95032 + }, + "Install all missing types packages": { + "category": "Message", + "code": 95033 + }, + "Rewrite all as indexed access types": { + "category": "Message", + "code": 95034 + }, + "Convert all to default imports": { + "category": "Message", + "code": 95035 + }, + "Make all 'super()' calls the first statement in their constructor": { + "category": "Message", + "code": 95036 + }, + "Add qualifier to all unresolved variables matching a member name": { + "category": "Message", + "code": 95037 + }, + "Change all extended interfaces to 'implements'": { + "category": "Message", + "code": 95038 + }, + "Add all missing super calls": { + "category": "Message", + "code": 95039 + }, + "Implement all inherited abstract classes": { + "category": "Message", + "code": 95040 + }, + "Add all missing 'async' modifiers": { + "category": "Message", + "code": 95041 + }, + "Add '@ts-ignore' to all error messages": { + "category": "Message", + "code": 95042 + }, + "Annotate everything with types from JSDoc": { + "category": "Message", + "code": 95043 + }, + "Add '()' to all uncalled decorators": { + "category": "Message", + "code": 95044 + }, + "Convert all constructor functions to classes": { + "category": "Message", + "code": 95045 + }, + "Generate 'get' and 'set' accessors": { + "category": "Message", + "code": 95046 + }, + "Convert 'require' to 'import'": { + "category": "Message", + "code": 95047 + }, + "Convert all 'require' to 'import'": { + "category": "Message", + "code": 95048 + }, + "Move to a new file": { + "category": "Message", + "code": 95049 + }, + "Remove unreachable code": { + "category": "Message", + "code": 95050 + }, + "Remove all unreachable code": { + "category": "Message", + "code": 95051 + }, + "Add missing 'typeof'": { + "category": "Message", + "code": 95052 + }, + "Remove unused label": { + "category": "Message", + "code": 95053 + }, + "Remove all unused labels": { + "category": "Message", + "code": 95054 + }, + "Convert '{0}' to mapped object type": { + "category": "Message", + "code": 95055 + }, + "Convert namespace import to named imports": { + "category": "Message", + "code": 95056 + }, + "Convert named imports to namespace import": { + "category": "Message", + "code": 95057 + }, + "Add or remove braces in an arrow function": { + "category": "Message", + "code": 95058 + }, + "Add braces to arrow function": { + "category": "Message", + "code": 95059 + }, + "Remove braces from arrow function": { + "category": "Message", + "code": 95060 + }, + "Convert default export to named export": { + "category": "Message", + "code": 95061 + }, + "Convert named export to default export": { + "category": "Message", + "code": 95062 + }, + "Add missing enum member '{0}'": { + "category": "Message", + "code": 95063 + }, + "Add all missing imports": { + "category": "Message", + "code": 95064 + }, + "Convert to async function": { + "category": "Message", + "code": 95065 + }, + "Convert all to async functions": { + "category": "Message", + "code": 95066 + }, + "Add missing call parentheses": { + "category": "Message", + "code": 95067 + }, + "Add all missing call parentheses": { + "category": "Message", + "code": 95068 + }, + "Add 'unknown' conversion for non-overlapping types": { + "category": "Message", + "code": 95069 + }, + "Add 'unknown' to all conversions of non-overlapping types": { + "category": "Message", + "code": 95070 + }, + "Add missing 'new' operator to call": { + "category": "Message", + "code": 95071 + }, + "Add missing 'new' operator to all calls": { + "category": "Message", + "code": 95072 + }, + "Add names to all parameters without names": { + "category": "Message", + "code": 95073 + }, + "Enable the 'experimentalDecorators' option in your configuration file": { + "category": "Message", + "code": 95074 + }, + "Convert parameters to destructured object": { + "category": "Message", + "code": 95075 + }, + "Extract type": { + "category": "Message", + "code": 95077 + }, + "Extract to type alias": { + "category": "Message", + "code": 95078 + }, + "Extract to typedef": { + "category": "Message", + "code": 95079 + }, + "Infer 'this' type of '{0}' from usage": { + "category": "Message", + "code": 95080 + }, + "Add 'const' to unresolved variable": { + "category": "Message", + "code": 95081 + }, + "Add 'const' to all unresolved variables": { + "category": "Message", + "code": 95082 + }, + "Add 'await'": { + "category": "Message", + "code": 95083 + }, + "Add 'await' to initializer for '{0}'": { + "category": "Message", + "code": 95084 + }, + "Fix all expressions possibly missing 'await'": { + "category": "Message", + "code": 95085 + }, + "Remove unnecessary 'await'": { + "category": "Message", + "code": 95086 + }, + "Remove all unnecessary uses of 'await'": { + "category": "Message", + "code": 95087 + }, + "Enable the '--jsx' flag in your configuration file": { + "category": "Message", + "code": 95088 + }, + "Add 'await' to initializers": { + "category": "Message", + "code": 95089 + }, + "Extract to interface": { + "category": "Message", + "code": 95090 + }, + "Convert to a bigint numeric literal": { + "category": "Message", + "code": 95091 + }, + "Convert all to bigint numeric literals": { + "category": "Message", + "code": 95092 + }, + "Convert 'const' to 'let'": { + "category": "Message", + "code": 95093 + }, + "Prefix with 'declare'": { + "category": "Message", + "code": 95094 + }, + "Prefix all incorrect property declarations with 'declare'": { + "category": "Message", + "code": 95095 + }, + "Convert to template string": { + "category": "Message", + "code": 95096 + }, + "Add 'export {}' to make this file into a module": { + "category": "Message", + "code": 95097 + }, + "Set the 'target' option in your configuration file to '{0}'": { + "category": "Message", + "code": 95098 + }, + "Set the 'module' option in your configuration file to '{0}'": { + "category": "Message", + "code": 95099 + }, + "Convert invalid character to its html entity code": { + "category": "Message", + "code": 95100 + }, + "Convert all invalid characters to HTML entity code": { + "category": "Message", + "code": 95101 + }, + "Convert all 'const' to 'let'": { + "category": "Message", + "code": 95102 + }, + "Convert function expression '{0}' to arrow function": { + "category": "Message", + "code": 95105 + }, + "Convert function declaration '{0}' to arrow function": { + "category": "Message", + "code": 95106 + }, + "Fix all implicit-'this' errors": { + "category": "Message", + "code": 95107 + }, + "Wrap invalid character in an expression container": { + "category": "Message", + "code": 95108 + }, + "Wrap all invalid characters in an expression container": { + "category": "Message", + "code": 95109 + }, + "Visit https://aka.ms/tsconfig to read more about this file": { + "category": "Message", + "code": 95110 + }, + "Add a return statement": { + "category": "Message", + "code": 95111 + }, + "Remove braces from arrow function body": { + "category": "Message", + "code": 95112 + }, + "Wrap the following body with parentheses which should be an object literal": { + "category": "Message", + "code": 95113 + }, + "Add all missing return statement": { + "category": "Message", + "code": 95114 + }, + "Remove braces from all arrow function bodies with relevant issues": { + "category": "Message", + "code": 95115 + }, + "Wrap all object literal with parentheses": { + "category": "Message", + "code": 95116 + }, + "Move labeled tuple element modifiers to labels": { + "category": "Message", + "code": 95117 + }, + "Convert overload list to single signature": { + "category": "Message", + "code": 95118 + }, + "Generate 'get' and 'set' accessors for all overriding properties": { + "category": "Message", + "code": 95119 + }, + "Wrap in JSX fragment": { + "category": "Message", + "code": 95120 + }, + "Wrap all unparented JSX in JSX fragment": { + "category": "Message", + "code": 95121 + }, + "Convert arrow function or function expression": { + "category": "Message", + "code": 95122 + }, + "Convert to anonymous function": { + "category": "Message", + "code": 95123 + }, + "Convert to named function": { + "category": "Message", + "code": 95124 + }, + "Convert to arrow function": { + "category": "Message", + "code": 95125 + }, + "Remove parentheses": { + "category": "Message", + "code": 95126 + }, + "Could not find a containing arrow function": { + "category": "Message", + "code": 95127 + }, + "Containing function is not an arrow function": { + "category": "Message", + "code": 95128 + }, + "Could not find export statement": { + "category": "Message", + "code": 95129 + }, + "This file already has a default export": { + "category": "Message", + "code": 95130 + }, + "Could not find import clause": { + "category": "Message", + "code": 95131 + }, + "Could not find namespace import or named imports": { + "category": "Message", + "code": 95132 + }, + "Selection is not a valid type node": { + "category": "Message", + "code": 95133 + }, + "No type could be extracted from this type node": { + "category": "Message", + "code": 95134 + }, + "Could not find property for which to generate accessor": { + "category": "Message", + "code": 95135 + }, + "Name is not valid": { + "category": "Message", + "code": 95136 + }, + "Can only convert property with modifier": { + "category": "Message", + "code": 95137 + }, + "Switch each misused '{0}' to '{1}'": { + "category": "Message", + "code": 95138 + }, + "Convert to optional chain expression": { + "category": "Message", + "code": 95139 + }, + "Could not find convertible access expression": { + "category": "Message", + "code": 95140 + }, + "Could not find matching access expressions": { + "category": "Message", + "code": 95141 + }, + "Can only convert logical AND access chains": { + "category": "Message", + "code": 95142 + }, + "Add 'void' to Promise resolved without a value": { + "category": "Message", + "code": 95143 + }, + "Add 'void' to all Promises resolved without a value": { + "category": "Message", + "code": 95144 + }, + "Use element access for '{0}'": { + "category": "Message", + "code": 95145 + }, + "Use element access for all undeclared properties.": { + "category": "Message", + "code": 95146 + }, + "Delete all unused imports": { + "category": "Message", + "code": 95147 + }, + "Infer function return type": { + "category": "Message", + "code": 95148 + }, + "Return type must be inferred from a function": { + "category": "Message", + "code": 95149 + }, + "Could not determine function return type": { + "category": "Message", + "code": 95150 + }, + "Could not convert to arrow function": { + "category": "Message", + "code": 95151 + }, + "Could not convert to named function": { + "category": "Message", + "code": 95152 + }, + "Could not convert to anonymous function": { + "category": "Message", + "code": 95153 + }, + "Can only convert string concatenations and string literals": { + "category": "Message", + "code": 95154 + }, + "Selection is not a valid statement or statements": { + "category": "Message", + "code": 95155 + }, + "Add missing function declaration '{0}'": { + "category": "Message", + "code": 95156 + }, + "Add all missing function declarations": { + "category": "Message", + "code": 95157 + }, + "Method not implemented.": { + "category": "Message", + "code": 95158 + }, + "Function not implemented.": { + "category": "Message", + "code": 95159 + }, + "Add 'override' modifier": { + "category": "Message", + "code": 95160 + }, + "Remove 'override' modifier": { + "category": "Message", + "code": 95161 + }, + "Add all missing 'override' modifiers": { + "category": "Message", + "code": 95162 + }, + "Remove all unnecessary 'override' modifiers": { + "category": "Message", + "code": 95163 + }, + "Can only convert named export": { + "category": "Message", + "code": 95164 + }, + "Add missing properties": { + "category": "Message", + "code": 95165 + }, + "Add all missing properties": { + "category": "Message", + "code": 95166 + }, + "Add missing attributes": { + "category": "Message", + "code": 95167 + }, + "Add all missing attributes": { + "category": "Message", + "code": 95168 + }, + "Add 'undefined' to optional property type": { + "category": "Message", + "code": 95169 + }, + "Convert named imports to default import": { + "category": "Message", + "code": 95170 + }, + "Delete unused '@param' tag '{0}'": { + "category": "Message", + "code": 95171 + }, + "Delete all unused '@param' tags": { + "category": "Message", + "code": 95172 + }, + "Rename '@param' tag name '{0}' to '{1}'": { + "category": "Message", + "code": 95173 + }, + "Use `{0}`.": { + "category": "Message", + "code": 95174 + }, + "Use `Number.isNaN` in all conditions.": { + "category": "Message", + "code": 95175 + }, + "Convert typedef to TypeScript type.": { + "category": "Message", + "code": 95176 + }, + "Convert all typedef to TypeScript types.": { + "category": "Message", + "code": 95177 + }, + "Move to file": { + "category": "Message", + "code": 95178 + }, + "Cannot move to file, selected file is invalid": { + "category": "Message", + "code": 95179 + }, + "Use 'import type'": { + "category": "Message", + "code": 95180 + }, + "Use 'type {0}'": { + "category": "Message", + "code": 95181 + }, + "Fix all with type-only imports": { + "category": "Message", + "code": 95182 + }, + "Cannot move statements to the selected file": { + "category": "Message", + "code": 95183 + }, + "Inline variable": { + "category": "Message", + "code": 95184 + }, + "Could not find variable to inline.": { + "category": "Message", + "code": 95185 + }, + "Variables with multiple declarations cannot be inlined.": { + "category": "Message", + "code": 95186 + }, + "Add missing comma for object member completion '{0}'.": { + "category": "Message", + "code": 95187 + }, + "Add missing parameter to '{0}'": { + "category": "Message", + "code": 95188 + }, + "Add missing parameters to '{0}'": { + "category": "Message", + "code": 95189 + }, + "Add all missing parameters": { + "category": "Message", + "code": 95190 + }, + "Add optional parameter to '{0}'": { + "category": "Message", + "code": 95191 + }, + "Add optional parameters to '{0}'": { + "category": "Message", + "code": 95192 + }, + "Add all optional parameters": { + "category": "Message", + "code": 95193 + }, + "Wrap in parentheses": { + "category": "Message", + "code": 95194 + }, + "Wrap all invalid decorator expressions in parentheses": { + "category": "Message", + "code": 95195 + }, + "Add 'resolution-mode' import attribute": { + "category": "Message", + "code": 95196 + }, + "Add 'resolution-mode' import attribute to all type-only imports that need it": { + "category": "Message", + "code": 95197 + }, + "{0} references": { + "category": "Message", + "code": 95198 + }, + "1 reference": { + "category": "Message", + "code": 95199 + }, + "{0} implementations": { + "category": "Message", + "code": 95200 + }, + "1 implementation": { + "category": "Message", + "code": 95201 + }, + "Loading": { + "category": "Message", + "code": 95202 + }, + "Installing types for '{0}'": { + "category": "Message", + "code": 95203 + }, + "Project '{0}'": { + "category": "Message", + "code": 95204 + }, + "Fix All": { + "category": "Message", + "code": 95205 + }, + "Organize Imports": { + "category": "Message", + "code": 95206 + }, + "Remove Unused Imports": { + "category": "Message", + "code": 95207 + }, + "Sort Imports": { + "category": "Message", + "code": 95208 + }, + "JSDoc comment": { + "category": "Message", + "code": 95209 + }, + + "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer.": { + "category": "Error", + "code": 18004 + }, + "Classes may not have a field named 'constructor'.": { + "category": "Error", + "code": 18006 + }, + "JSX expressions may not use the comma operator. Did you mean to write an array?": { + "category": "Error", + "code": 18007 + }, + "Private identifiers cannot be used as parameters.": { + "category": "Error", + "code": 18009 + }, + "An accessibility modifier cannot be used with a private identifier.": { + "category": "Error", + "code": 18010 + }, + "The operand of a 'delete' operator cannot be a private identifier.": { + "category": "Error", + "code": 18011 + }, + "'#constructor' is a reserved word.": { + "category": "Error", + "code": 18012 + }, + "Property '{0}' is not accessible outside class '{1}' because it has a private identifier.": { + "category": "Error", + "code": 18013 + }, + "The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling.": { + "category": "Error", + "code": 18014 + }, + "Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'.": { + "category": "Error", + "code": 18015 + }, + "Private identifiers are not allowed outside class bodies.": { + "category": "Error", + "code": 18016 + }, + "The shadowing declaration of '{0}' is defined here": { + "category": "Error", + "code": 18017 + }, + "The declaration of '{0}' that you probably intended to use is defined here": { + "category": "Error", + "code": 18018 + }, + "'{0}' modifier cannot be used with a private identifier.": { + "category": "Error", + "code": 18019 + }, + "An enum member cannot be named with a private identifier.": { + "category": "Error", + "code": 18024 + }, + "'#!' can only be used at the start of a file.": { + "category": "Error", + "code": 18026 + }, + "Compiler reserves name '{0}' when emitting private identifier downlevel.": { + "category": "Error", + "code": 18027 + }, + "Private identifiers are only available when targeting ECMAScript 2015 and higher.": { + "category": "Error", + "code": 18028 + }, + "Private identifiers are not allowed in variable declarations.": { + "category": "Error", + "code": 18029 + }, + "An optional chain cannot contain private identifiers.": { + "category": "Error", + "code": 18030 + }, + "The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents.": { + "category": "Error", + "code": 18031 + }, + "The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some.": { + "category": "Error", + "code": 18032 + }, + "Type '{0}' is not assignable to type '{1}' as required for computed enum member values.": { + "category": "Error", + "code": 18033 + }, + "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'.": { + "category": "Message", + "code": 18034 + }, + "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name.": { + "category": "Error", + "code": 18035 + }, + "Class decorators can't be used with static private identifier. Consider removing the experimental decorator.": { + "category": "Error", + "code": 18036 + }, + "'await' expression cannot be used inside a class static block.": { + "category": "Error", + "code": 18037 + }, + "'for await' loops cannot be used inside a class static block.": { + "category": "Error", + "code": 18038 + }, + "Invalid use of '{0}'. It cannot be used inside a class static block.": { + "category": "Error", + "code": 18039 + }, + "A 'return' statement cannot be used inside a class static block.": { + "category": "Error", + "code": 18041 + }, + "'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation.": { + "category": "Error", + "code": 18042 + }, + "Types cannot appear in export declarations in JavaScript files.": { + "category": "Error", + "code": 18043 + }, + "'{0}' is automatically exported here.": { + "category": "Message", + "code": 18044 + }, + "Properties with the 'accessor' modifier are only available when targeting ECMAScript 2015 and higher.": { + "category": "Error", + "code": 18045 + }, + "'{0}' is of type 'unknown'.": { + "category": "Error", + "code": 18046 + }, + "'{0}' is possibly 'null'.": { + "category": "Error", + "code": 18047 + }, + "'{0}' is possibly 'undefined'.": { + "category": "Error", + "code": 18048 + }, + "'{0}' is possibly 'null' or 'undefined'.": { + "category": "Error", + "code": 18049 + }, + "The value '{0}' cannot be used here.": { + "category": "Error", + "code": 18050 + }, + "Compiler option '{0}' cannot be given an empty string.": { + "category": "Error", + "code": 18051 + }, + "Its type '{0}' is not a valid JSX element type.": { + "category": "Error", + "code": 18053 + }, + "'await using' statements cannot be used inside a class static block.": { + "category": "Error", + "code": 18054 + }, + "'{0}' has a string type, but must have syntactically recognizable string syntax when 'isolatedModules' is enabled.": { + "category": "Error", + "code": 18055 + }, + "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled.": { + "category": "Error", + "code": 18056 + }, + "String literal import and export names are not supported when the '--module' flag is set to 'es2015' or 'es2020'.": { + "category": "Error", + "code": 18057 + }, + "Default imports are not allowed in a deferred import.": { + "category": "Error", + "code": 18058 + }, + "Named imports are not allowed in a deferred import.": { + "category": "Error", + "code": 18059 + }, + "Deferred imports are only supported when the '--module' flag is set to 'esnext' or 'preserve'.": { + "category": "Error", + "code": 18060 + }, + "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?": { + "category": "Error", + "code": 18061 + }, + "Regular expression pattern modifiers are only available when targeting '{0}' or later.": { + "category": "Error", + "code": 18062 + }, + "Duplicate named capturing groups are only available when targeting '{0}' or later.": { + "category": "Error", + "code": 18063 + }, + "Private identifiers cannot be used in destructuring patterns.": { + "category": "Error", + "code": 18064 + }, + "Content mapper file extension '{0}' must begin with a '.'.": { + "category": "Error", + "code": 18065 + }, + "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.": { + "category": "Error", + "code": 18066 + }, + "Content mapper file extension '{0}' is registered by more than one content mapper.": { + "category": "Error", + "code": 18067 + }, + "Content mappers require the '--runExternalCode' command line flag to be enabled.": { + "category": "Error", + "code": 18068 + }, + "The content mapper '{0}' failed to transform this file.": { + "category": "Error", + "code": 18069 + }, + "The content mapper '{0}' failed {1} times and will not be used.": { + "category": "Error", + "code": 18070 + }, + "The content mapper '{0}' did not provide the required position mappings.": { + "category": "Error", + "code": 18071 + }, + "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).": { + "category": "Error", + "code": 18072 + }, + "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).": { + "category": "Error", + "code": 18073 + }, + "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.": { + "category": "Message", + "code": 18074 + }, + "The content mapper package '{0}' could not be resolved.": { + "category": "Error", + "code": 18075 + }, + "The 'package.json' of the content mapper package '{0}' could not be parsed.": { + "category": "Error", + "code": 18076 + }, + "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.": { + "category": "Error", + "code": 18077 + }, + "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.": { + "category": "Error", + "code": 18078 + }, + "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.": { + "category": "Error", + "code": 18079 + }, + "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.": { + "category": "Error", + "code": 18080 + }, + "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).": { + "category": "Error", + "code": 18081 + }, + "The content mapper '{0}' produced invalid mapping features near original offset {1}.": { + "category": "Error", + "code": 18082 + }, + "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).": { + "category": "Error", + "code": 18083 + }, + "The content mapper process could not be started or initialized.": { + "category": "Message", + "code": 18084 + }, + "The content mapper process failed while handling the transform request.": { + "category": "Message", + "code": 18085 + }, + "The content mapper returned an invalid transform response.": { + "category": "Message", + "code": 18086 + }, + "The content mapper selected unsupported position encoding '{0}'.": { + "category": "Message", + "code": 18087 + }, + "The content mapper diagnostic source must not be empty.": { + "category": "Message", + "code": 18088 + }, + "The content mapper diagnostic source '{0}' is reserved by TypeScript.": { + "category": "Message", + "code": 18089 + }, + "The content mapper returned a project response that could not be decoded.": { + "category": "Message", + "code": 18090 + }, + "The content mapper process failed while handling the project request.": { + "category": "Message", + "code": 18091 + }, + "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.": { + "category": "Message", + "code": 18092 + }, + "The content mapper returned a non-absolute path in 'watchedFiles'.": { + "category": "Message", + "code": 18093 + }, + "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.": { + "category": "Message", + "code": 18094 + }, + "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.": { + "category": "Message", + "code": 18095 + }, + "Content mapper supplemental output file '{0}' conflicts with an existing file.": { + "category": "Message", + "code": 18096 + }, + "Supplemental virtual file produced by the content mapper for file '{0}'.": { + "category": "Message", + "code": 18097 + }, + "The content mapper returned an output with unsupported virtual extension '{0}'.": { + "category": "Message", + "code": 18098 + }, + "The content mapper '{0}' could not be initialized.": { + "category": "Error", + "code": 18099 + }, + "The content mapper command '{0}' could not be started: {1}": { + "category": "Message", + "code": 18100 + }, + "The content mapper process exited before responding to the 'initialize' request (exit code {0}).": { + "category": "Message", + "code": 18101 + }, + "The content mapper did not respond to the 'initialize' request within {0} seconds.": { + "category": "Message", + "code": 18102 + }, + "The content mapper returned an 'initialize' response that could not be decoded: {0}": { + "category": "Message", + "code": 18103 + }, + "The content mapper's 'initialize' request failed: {0}": { + "category": "Message", + "code": 18104 + }, + "Diagnostic directive {0} returned by the content mapper has an invalid range.": { + "category": "Message", + "code": 18105 + }, + "The content mapper returned a diagnostic directive with invalid policy '{0}'.": { + "category": "Message", + "code": 18106 + }, + "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.": { + "category": "Message", + "code": 18107 + }, + "The content mapper returned diagnostic directives with overlapping virtual ranges.": { + "category": "Message", + "code": 18108 + }, + "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.": { + "category": "Message", + "code": 18109 + }, + "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.": { + "category": "Message", + "code": 18110 + }, + "A source phase import must specify a local binding.": { + "category": "Error", + "code": 18111 + }, + "Named and namespace imports are not allowed in a source phase import.": { + "category": "Error", + "code": 18112 + }, + "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.": { + "category": "Error", + "code": 18113 + }, + "Optional chaining cannot be used with 'import.source'.": { + "category": "Error", + "code": 18114 + }, + "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.": { + "category": "Error", + "code": 18115 + } +} diff --git a/tsc/internal/diagnostics/diagnostics_test.go b/tsc/internal/diagnostics/diagnostics_test.go index ba925802f237e..562b0d2e16743 100644 --- a/tsc/internal/diagnostics/diagnostics_test.go +++ b/tsc/internal/diagnostics/diagnostics_test.go @@ -191,7 +191,7 @@ func validateLocaleFile(t *testing.T, data []byte, runtimeMessages map[Key]strin } expected, err := json.MarshalIndent(&orderedMessages, "", " ") assert.NilError(t, err) - expected = bytes.ReplaceAll(expected, []byte("\n"), []byte("\r\n")) + expected = append(expected, '\n') assert.Equal(t, string(data), string(expected), "handback must use sorted keys and canonical formatting") if len(activeMessages) == 0 { @@ -203,14 +203,14 @@ func validateLocaleFile(t *testing.T, data []byte, runtimeMessages map[Key]strin func TestLocaleFilesIgnoreStaleDiagnostics(t *testing.T) { t.Parallel() - data := []byte("{\r\n" + - " \"Identifier_expected_1003\": \"Known translation.\",\r\n" + - " \"Removed_diagnostic_99999\": \"Stale translation.\"\r\n" + - "}") + data := []byte("{\n" + + " \"Identifier_expected_1003\": \"Known translation.\",\n" + + " \"Removed_diagnostic_99999\": \"Stale translation.\"\n" + + "}\n") validateLocaleFile(t, data, map[Key]string{ "Identifier_expected_1003": "Known translation.", }) - validateLocaleFile(t, []byte("{\r\n \"Removed_diagnostic_99999\": \"Stale translation.\"\r\n}"), nil) + validateLocaleFile(t, []byte("{\n \"Removed_diagnostic_99999\": \"Stale translation.\"\n}\n"), nil) } func TestGenerateLocalizations(t *testing.T) { diff --git a/tsc/internal/diagnostics/loc/cs-CZ.generated.json b/tsc/internal/diagnostics/loc/cs-CZ.generated.json index 1e829f3aee51e..043bb3ba4f599 100644 --- a/tsc/internal/diagnostics/loc/cs-CZ.generated.json +++ b/tsc/internal/diagnostics/loc/cs-CZ.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "VŠECHNY MOŽNOSTI KOMPILÁTORU", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modifikátor {0} nejde použít s deklarací import.", - "A_0_parameter_must_be_the_first_parameter_2680": "Parametr {0} musí být prvním parametrem.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Značka „@template“ jazyka JSDoc nemůže následovat po značce „@typedef“, „@callback“ nebo „@overload“.", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentář JSDoc @typedef nemůže obsahovat více než jednu značku @type.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literál „bigint“ nelze použít jako název vlastnosti.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Literál typu bigint nemůže používat exponenciální notaci.", - "A_bigint_literal_must_be_an_integer_1353": "Literál typu bigint musí být celé číslo.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr vzoru vazby nemůže být u podpisu implementace nepovinný.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Příkaz break se dá použít jenom uvnitř nadřazené iterace nebo příkazu switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Příkaz break může skočit jenom na popisek nadřazeného příkazu.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Třída znaků nesmí obsahovat vyhrazené dvojité interpunkční znaménko. Nechtěli jste ho uvést zpětným lomítkem?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Rozsah třídy znaků nesmí být ohraničen jinou třídou znaků.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Třída může implementovat jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Třída může implementovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Třída nemůže rozšiřovat primitivní typ, jako je například „{0}“. Třídy můžou rozšiřovat pouze konstruovatelné hodnoty.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Třída nemůže implementovat primitivní typ, jako je například „{0}“. Může implementovat pouze jiné typy pojmenovaných objektů.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklarace třídy bez modifikátoru default musí mít název.", - "A_class_member_cannot_have_the_0_keyword_1248": "Člen třídy nemůže mít klíčové slovo {0}.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Výraz s čárkou není v názvu počítané vlastnosti povolený.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Název počítané vlastnosti nemůže odkazovat na parametr typu z jeho nadřazeného typu.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Název počítané vlastnosti v deklaraci vlastnosti třídy musí mít jednoduchý typ literálu nebo typ unique symbol.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Název počítané vlastnosti v přetížené metodě musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Název počítané vlastnosti v literálu typu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Název počítané vlastnosti v ambientním kontextu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Název počítané vlastnosti v rozhraní musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Název počítané vlastnosti musí být typu string, number, symbol nebo any.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Kontrolní výraz „const“ lze použít pouze na odkazy na členy výčtu nebo na řetězce, čísla, logické hodnoty, pole nebo objektové literály.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Ke členu konstantního výčtu se dá získat přístup jenom pomocí řetězcového literálu.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Inicializátor const v ambientním kontextu musí být řetězec, číselný literál nebo odkaz na výčet literálů.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Konstruktor nemůže obsahovat volání super, pokud jeho třída rozšiřuje null.", - "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nemůže mít parametr this.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Příkaz continue se dá použít jenom uvnitř příkazu nadřazené iterace.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Příkaz continue může přejít jenom na popisek příkazu nadřazené iterace.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Soubor deklarace nelze importovat bez hodnoty „import type“. Nechtěli jste místo toho importovat soubor implementace „{0}“?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Modifikátor declare se nedá použít v kontextu, který už je ambientní.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorátor může dekorovat jenom implementaci metody, ne přetížení.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzule default nemůže být v příkazu switch víc než jednou.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "V modulu ve stylu ECMAScriptu se dá použít jenom výchozí export.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Výchozí export musí být na nejvyšší úrovni deklarace souboru nebo modulu.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Určitý kontrolní výraz přiřazení '!' není v tomto kontextu povolený.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Destrukturační deklarace musí obsahovat inicializátor.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Volání dynamického importu v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Volání dynamického importu vrací hodnotu ‚Promise‘. Ujistěte se, že pro ni máte deklaraci, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.", - "A_file_cannot_have_a_reference_to_itself_1006": "Soubor nemůže odkazovat sám na sebe.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkce, která vrací hodnotu never, nemůže mít dosažitelný koncový bod.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkce volaná klíčovým slovem new nemůže mít typ this, který je void.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkce, jejíž deklarovaný typ není „undefined“, „void“ ani „any“, musí vracet hodnotu.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Generátor nemůže mít anotaci typu void.", - "A_get_accessor_cannot_have_parameters_1054": "Přístupový objekt get nemůže obsahovat parametry.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Přístupový objekt get musí být alespoň tak přístupný jako metoda setter.", - "A_get_accessor_must_return_a_value_2378": "Přístupový objekt get musí vracet hodnotu.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element popsané řazené kolekce členů se deklaroval jako nepovinný pomocí otazníku za názvem a před dvojtečkou, nikoli za typem.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Element popsané řazené kolekce členů se deklaroval jako zbytek s třemi tečkami (...) před názvem, nikoli před typem.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Mapovaný typ nemůže deklarovat vlastnosti nebo metody.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicializátor členu v deklaraci výčtu nemůže odkazovat na členy deklarované až po výčtu, a to ani členy definované v jiných výčtech.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Třída mixin musí mít konstruktor s jediným parametrem rest typu any[].", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Třída mixin, která rozšiřuje proměnnou typu obsahující signaturu abstraktního konstruktu, musí být také deklarovaná jako abstract.", - "A_module_cannot_have_multiple_default_exports_2528": "Modul nemůže mít víc výchozích exportů.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklarace oboru názvů nemůže být v jiném souboru než třída nebo funkce, se kterou se slučuje.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklarace oboru názvů nemůže být umístěná před třídou nebo funkcí, se kterou se slučuje.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklarace oboru názvů je povolená pouze na nejvyšší úrovni oboru názvů nebo v modulu.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklarace namespace by se neměla deklarovat pomocí klíčového slova module. Místo toho prosím použijte klíčové slovo namespace.", - "A_non_dry_build_would_build_project_0_6357": "Build bez příznaku -dry by vytvořil projekt {0}.", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Build bez příznaku -dry by odstranil následující soubory: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Build bez příznaku -dry by aktualizoval časová razítka pro výstup projektu {0}.", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicializátor parametru je povolený jenom v implementaci funkce nebo konstruktoru.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Vlastnost parametru se nedá deklarovat pomocí parametru rest.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Vlastnost parametru je povolená jenom v implementaci konstruktoru.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Vlastnost parametru se nedá deklarovat pomocí vzoru vazby.", - "A_promise_must_have_a_then_method_1059": "Příslib musí mít metodu then.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Vlastnost třídy, jejíž typ je unique symbol, musí být static a readonly.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Vlastnost rozhraní nebo literálu typu, jehož typ je unique symbol, musí být readonly.", - "A_required_element_cannot_follow_an_optional_element_1257": "Povinný element nemůže následovat po nepovinném elementu.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Povinný parametr nemůže následovat po nepovinném parametru.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nemůže obsahovat vzor vazby.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nemůže následovat za jiným elementem rest.", - "A_rest_element_cannot_have_a_property_name_2566": "Element rest nemůže mít název vlastnosti.", - "A_rest_element_cannot_have_an_initializer_1186": "Element rest nemůže obsahovat inicializátor.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musí být ve vzoru destrukturalizace poslední.", - "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musí být typu pole.", - "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nemůže být nepovinný.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nemůže obsahovat inicializátor.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Parametr rest musí být posledním v seznamu parametrů.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musí být typu pole.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest nebo vzor vazby nesmí mít na konci čárku.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Příkaz return se dá použít jenom v těle funkce.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Příkaz return nejde použít uvnitř statického bloku třídy.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Řada záznamů, které mění mapování importů do umístění vyhledávání relativních vůči baseUrl.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Přístupový objekt set nemůže obsahovat anotaci návratového typu.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Přístupový objekt set nemůže obsahovat nepovinný parametr.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Přístupový objekt get nemůže obsahovat parametr rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Přístupový objekt set musí obsahovat přesně jeden parametr.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr přístupového objektu set nemůže obsahovat inicializátor.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument rozprostření musí mít buď typ řazené kolekce členů, nebo musí být předán do parametru rest.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Volání super musí být příkaz na kořenové úrovni v konstruktoru odvozené třídy, který obsahuje inicializované vlastnosti, vlastnosti parametrů nebo privátní identifikátory.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Volání super musí být prvním příkazem v konstruktoru, který odkazuje na super nebo toto, když odvozená třída obsahuje inicializované vlastnosti, vlastnosti parametrů nebo soukromé identifikátory.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrana typu this není kompatibilní s ochranou typu založeného na parametru.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ this je k dispozici jenom v nestatických členech třídy nebo rozhraní.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modifikátor „export“ nejvyšší úrovně nelze použít pro deklarace hodnot v modulu CommonJS, když je povolený modifikátor „verbatimModuleSyntax“.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Soubor tsconfig.json je už v {0} definovaný.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Člen řazené kolekce členů nemůže být volitelný a zbytek.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Typ řazené kolekce členů není možné indexovat zápornou hodnotou.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Výraz potvrzení typu se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Vlastnost literálu typu nemůže mít inicializátor.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Import, při kterém se importují jen typy, může určovat výchozí import nebo pojmenované vazby, ale ne obojí.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Predikát typu nemůže odkazovat na parametr rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Predikát typu nemůže odkazovat na element {0} ve vzoru vazby.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Predikát typu je povolený jenom na pozici návratového typu funkcí a metod.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Typ predikátu typu musí být přiřaditelný k typu jeho parametru.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Typ odkazovaný v dekorovaném podpisu musí být importován pomocí import type nebo importu oboru názvů, pokud jsou povoleny elementy isolatedModules a emitDecoratorMetadata.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Proměnná, jejíž typ je unique symbol, musí být const.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Výraz yield je povolený jenom v těle generátoru.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "K abstraktní metodě {0} ve třídě {1} nejde získat přístup prostřednictvím výrazu super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstraktní metody se můžou vyskytovat jenom v abstraktní třídě.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstraktní vlastnosti se můžou vyskytovat jenom v abstraktní třídě.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "K abstraktní vlastnosti {0} ve třídě {1} nelze získat přístup v konstruktoru.", - "Accessibility_modifier_already_seen_1028": "Modifikátor dostupnosti se už jednou vyskytl.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Přístupové objekty jsou dostupné, jenom když je cílem ECMAScript 5 a vyšší verze.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Přistupující objekty musí být abstraktní nebo neabstraktní.", - "Add_0_to_unresolved_variable_90008": "Přidat {0}. k nerozpoznané proměnné", - "Add_a_return_statement_95111": "Přidat příkaz return", - "Add_a_return_type_to_the_function_declaration_9031": "Přidejte návratový typ do deklarace funkce.", - "Add_a_return_type_to_the_function_expression_9030": "Přidejte návratový typ do výrazu funkce.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Přidejte návratový typ do deklarace přistupujícího objektu get.", - "Add_a_return_type_to_the_method_9034": "Přidejte do metody návratový typ.", - "Add_a_type_annotation_to_the_parameter_0_9028": "Přidejte anotaci typu k parametru „{0}“.", - "Add_a_type_annotation_to_the_property_0_9029": "Přidejte anotaci typu k vlastnosti „{0}“.", - "Add_a_type_annotation_to_the_variable_0_9027": "Přidejte anotaci typu k proměnné „{0}“.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Přidejte typ k parametru deklarace přistupujícího objektu set.", - "Add_all_missing_async_modifiers_95041": "Přidat všechny chybějící modifikátory async", - "Add_all_missing_attributes_95168": "Přidat všechny chybějící atributy", - "Add_all_missing_call_parentheses_95068": "Přidat všechny chybějící závorky volání", - "Add_all_missing_function_declarations_95157": "Přidat všechny chybějící deklarace funkcí", - "Add_all_missing_imports_95064": "Přidat všechny chybějící importy", - "Add_all_missing_members_95022": "Přidat všechny chybějící členy", - "Add_all_missing_override_modifiers_95162": "Přidat všechny chybějící modifikátory override", - "Add_all_missing_parameters_95190": "Přidejte všechny chybějící parametry.", - "Add_all_missing_properties_95166": "Přidat všechny chybějící importy", - "Add_all_missing_return_statement_95114": "Přidat všechny chybějící příkazy return", - "Add_all_missing_super_calls_95039": "Přidat všechna chybějící volání pomocí super", - "Add_all_missing_type_annotations_90067": "Přidejte všechny chybějící anotace typů.", - "Add_all_optional_parameters_95193": "Přidejte všechny volitelné parametry.", - "Add_annotation_of_type_0_90062": "Přidejte anotaci typu „{0}“.", - "Add_async_modifier_to_containing_function_90029": "Přidat modifikátor async do obsahující funkce", - "Add_await_95083": "Přidat await", - "Add_await_to_initializer_for_0_95084": "Přidat await do inicializátoru pro {0}", - "Add_await_to_initializers_95089": "Přidat await do inicializátorů", - "Add_braces_to_arrow_function_95059": "Přidat složené závorky k funkci šipky", - "Add_const_to_all_unresolved_variables_95082": "Přidat const ke všem nerozpoznaným proměnným", - "Add_const_to_unresolved_variable_95081": "Přidat const k nerozpoznané proměnné", - "Add_definite_assignment_assertion_to_property_0_95020": "Přidat kontrolní výraz jednoznačného přiřazení k vlastnosti {0}", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Přidat kontrolní výrazy jednoznačného přiřazení do všech neinicializovaných vlastností", - "Add_export_to_make_this_file_into_a_module_95097": "Přidat export {}, aby se tento soubor převedl na modul", - "Add_extends_constraint_2211": "Přidejte omezení extends.", - "Add_extends_constraint_to_all_type_parameters_2212": "Přidat omezení extends ke všem parametrům typu", - "Add_import_from_0_90057": "Přidat import z {0}", - "Add_index_signature_for_property_0_90017": "Přidat signaturu indexu pro vlastnost {0}", - "Add_initializer_to_property_0_95019": "Přidat inicializační výraz k vlastnosti {0}", - "Add_initializers_to_all_uninitialized_properties_95027": "Přidat inicializátory do všech neinicializovaných vlastností", - "Add_missing_attributes_95167": "Přidat chybějící atributy", - "Add_missing_call_parentheses_95067": "Přidat chybějící závorky volání", - "Add_missing_comma_for_object_member_completion_0_95187": "Přidejte chybějící čárku pro dokončování členů objektu „{0}“.", - "Add_missing_enum_member_0_95063": "Přidat chybějící člen výčtu {0}", - "Add_missing_function_declaration_0_95156": "Přidat chybějící deklaraci funkce {0}", - "Add_missing_new_operator_to_all_calls_95072": "Přidat chybějící operátor new ke všem voláním", - "Add_missing_new_operator_to_call_95071": "Přidat chybějící operátor new k volání", - "Add_missing_parameter_to_0_95188": "Přidejte chybějící parametr do „{0}“.", - "Add_missing_parameters_to_0_95189": "Přidejte chybějící parametry do „{0}“.", - "Add_missing_properties_95165": "Přidat chybějící vlastnosti", - "Add_missing_super_call_90001": "Přidat chybějící volání metody super()", - "Add_missing_typeof_95052": "Přidat chybějící typeof", - "Add_names_to_all_parameters_without_names_95073": "Přidat názvy do všech parametrů bez názvů", - "Add_optional_parameter_to_0_95191": "Přidejte volitelný parametr do „{0}“", - "Add_optional_parameters_to_0_95192": "Přidat volitelné parametry do {0}", - "Add_or_remove_braces_in_an_arrow_function_95058": "Přidat nebo odebrat složené závorky ve funkci šipky", - "Add_override_modifier_95160": "Přidat modifikátor override", - "Add_parameter_name_90034": "Přidat název parametru", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Přidat kvalifikátor do všech nerozpoznaných proměnných odpovídajících názvu členu", - "Add_resolution_mode_import_attribute_95196": "Přidat atribut importu resolution-mode", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Přidat atribut importu resolution-mode do všech importů, při kterých se importuje pouze typ, které ho potřebují", - "Add_return_type_0_90063": "Přidejte návratový typ „{0}“", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Chcete-li typ nastavit jako explicitní, přidejte do tohoto výrazu operátor „satisfies“ a kontrolní výraz typu („satisfies T as T“).", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Přidejte operátor „satisfies“ a kontrolní výraz vloženého typu s „{0}“.", - "Add_to_all_uncalled_decorators_95044": "Přidat () do všech nevolaných dekorátorů", - "Add_ts_ignore_to_all_error_messages_95042": "Přidat @ts-ignore do všech chybových zpráv", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Pokud k přístupu používáte index, přidejte k typu řetězec undefined.", - "Add_undefined_to_optional_property_type_95169": "Přidat hodnotu undefined do volitelného typu vlastnosti", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Přidat nedefinovaný typ do všech neinicializovaných vlastností", - "Add_undefined_type_to_property_0_95018": "Přidat typ undefined k vlastnosti {0}", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Přidat převod unknown pro typy, které se nepřekrývají", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Přidat unknown do všech převodů pro typy, které se nepřekrývají", - "Add_void_to_Promise_resolved_without_a_value_95143": "Přidat void k objektu Promise vyřešenému bez hodnoty", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Přidat void ke všem objektům Promise vyřešeným bez hodnoty", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Přidání souboru tsconfig.json vám pomůže uspořádat projekty, které obsahují jak soubory TypeScript, tak soubory JavaScript. Další informace najdete na adrese https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Všechny deklarace {0} musí mít identická omezení.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Všechny deklarace {0} musí mít stejné modifikátory.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Všechny deklarace {0} musí mít stejné parametry typu.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Všechny deklarace abstraktní metody musí jít po sobě.", - "All_destructured_elements_are_unused_6198": "Žádný z destrukturovaných elementů se nepoužívá.", - "All_imports_in_import_declaration_are_unused_6192": "Žádné importy z deklarace importu se nepoužívají.", - "All_type_parameters_are_unused_6205": "Všechny parametry typů jsou nevyužité.", - "All_variables_are_unused_6199": "Žádná z proměnných se nepoužívá.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Povolte, aby se soubory JavaScriptu staly součástí programu. K získání informací o chybách v těchto souborech použít možnost checkJs.", - "Allow_accessing_UMD_globals_from_modules_6602": "Povolit přístup ke globálním proměnným UMD z modulů", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Povolte výchozí importy z modulů bez výchozího exportu. Nebude to mít vliv na generování kódu, jenom na kontrolu typů.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Pokud modul nemá výchozí export, povolte import X z Y.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Povolte import pomocných funkcí z knihovny tslib jednou za celý projekt místo jejich zahrnutí do každého souboru.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Povolte, aby importy zahrnovaly přípony souborů TypeScriptu. Vyžaduje nastavení možnosti „--moduleResolution bundler“ a buď „--noEmit“, nebo „--emitDeclarationOnly“.", - "Allow_javascript_files_to_be_compiled_6102": "Povolí kompilaci souborů javascript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Při řešení modulů povolit, aby se s více složkami zacházelo jako s jednou.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Název souboru {0}, který se už zahrnul, se od názvu souboru {1} liší jen ve velkých a malých písmenech.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklarace ambientního modulu nemůže uvádět relativní název modulu.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Ambientní moduly se nedají zanořovat do jiných modulů nebo oborů názvů.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Modul AMD nemůže obsahovat víc přiřazení názvů.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstraktní přístupový objekt nemůže mít implementaci.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modifikátor přístupnosti se nedá použít spolu s privátním identifikátorem.", - "An_accessor_cannot_have_type_parameters_1094": "Přístupový objekt nemůže obsahovat parametry typu.", - "An_accessor_property_cannot_be_declared_optional_1276": "Vlastnost accessor nejde deklarovat jako volitelnou.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklarace ambientního modulu je povolená jenom na nejvyšší úrovni v souboru.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Neposkytl se argument pro {0}.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Neposkytl se argument, který by odpovídal tomuto vzoru vazby.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetický operand musí být typu any, number, bigint nebo typu výčtu.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkce šipky nemůže mít parametr this.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchronní funkce nebo metoda v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchronní funkce nebo metoda musí vracet hodnotu ‚Promise‘. Přesvědčte se, že pro ni máte deklaraci, nebo zahrňte ‚ES2015‘ do možnosti ‚--lib‘.", - "An_async_iterator_must_have_a_next_method_2519": "Asynchronní iterátor musí mít metodu next().", - "An_element_access_expression_should_take_an_argument_1011": "Výraz přístupu k elementu by měl přijímat argument.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Člen výčtu není možné pojmenovat privátním identifikátorem.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Člen výčtu nemůže mít číselný název.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Za názvem členu výčtu musí následovat znak čárky (,), rovnítka (=) nebo pravé složené závorky (}).", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozšířená verze těchto informací, zobrazující všechny možné možnosti kompilátoru", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Přiřazení exportu se nedá použít v modulu s jinými exportovanými elementy.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Přiřazení exportu se nedá používat v oboru názvů.", - "An_export_assignment_cannot_have_modifiers_1120": "Přiřazení exportu nemůže mít modifikátory.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Přiřazení exportu musí být na nejvyšší úrovni deklarace souboru nebo modulu.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklarace exportu se dá použít pouze na nejvyšší úrovni modulu.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklarace exportu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", - "An_export_declaration_cannot_have_modifiers_1193": "Deklarace exportu nemůže mít modifikátory.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Když je povolená možnost verbatimModuleSyntax, musí deklarace „export =“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklarace „export =“ musí odkazovat na hodnotu, když je povolená možnost „verbatimModuleSyntax“, ale „{0}“ odkazuje jenom na typ.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Když je povolená možnost verbatimModuleSyntax, musí „export default“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Pokud je povolená možnost „verbatimModuleSyntax“, musí „export default“ odkazovat na hodnotu, ale „{0}“ odkazuje jenom na typ.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Není možné testovat pravdivost výrazu typu void.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozšířená řídicí hodnota Unicode musí být mezi 0x0 a 0x10FFFF (včetně).", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identifikátor nebo klíčové slovo nemůže následovat hned po číselném literálu.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementace se nedá deklarovat v ambientních kontextech.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu se nemůže odkazovat na deklaraci, která se exportovala pomocí export type.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu se nemůže odkazovat na deklaraci, která se importovala pomocí import type.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Pokud je povolená možnost „verbatimModuleSyntax“, alias importu nelze přeložit na deklaraci typu nebo deklaraci „pouze typ“.", - "An_import_alias_cannot_use_import_type_1392": "Alias importu nemůže používat import type.", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklarace importu se dá použít pouze na nejvyšší úrovni modulu.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklarace importu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", - "An_import_declaration_cannot_have_modifiers_1191": "Deklarace importu nemůže mít modifikátory.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Když je povolená možnost „allowImportingTsExtensions“, může cesta importu končit pouze příponou „{0}“.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Signatura indexu indexu nemůže obsahovat parametr rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Signatura indexu nemůže mít na konci čárku.", - "An_index_signature_must_have_a_type_annotation_1021": "Signatura indexu musí mít anotaci typu.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Signatura indexu musí mít právě jeden parametr.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "V parametru signatury indexu nemůže být otazník.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "V parametru signatury indexu nemůže být modifikátor přístupnosti.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "V parametru signatury indexu nemůže být inicializátor.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "V parametru signatury indexu nemůže být anotace typu.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru signatury indexu nemůže být typ literálu nebo obecný typ. Místo toho zvažte použití namapovaného typu objektu.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Typ parametru signatury indexu musí být řetězec, číslo, symbol nebo typ literálu šablony.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po výrazu vytvoření instance nemůže následovat přístup k vlastnosti.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Rozhraní může rozšířit jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Rozhraní může rozšiřovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Rozhraní nemůže rozšiřovat primitivní typ, jako je například „{0}“. Může rozšiřovat pouze jiné typy pojmenovaných objektů.", - "An_interface_property_cannot_have_an_initializer_1246": "Vlastnost rozhraní nemůže mít inicializátor.", - "An_iterator_must_have_a_next_method_2489": "Iterátor musí mít metodu next().", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Při použití direktivy pragma @jsx s fragmenty JSX se vyžaduje direktiva pragma @jsxFrag.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Literál objektu nemůže obsahovat několik přístupových objektů get/set se stejným názvem.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literál objektu nemůže mít víc vlastností se stejným názvem.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literál objektu nemůže obsahovat vlastnost a přístupový objekt se stejným názvem.", - "An_object_member_cannot_be_declared_optional_1162": "Člen objektu nemůže být deklarovaný jako nepovinný.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]“ objektu musí vracet logickou hodnotu, aby ji bylo možné použít na pravé straně výrazu „instanceof“.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Nepovinný řetěz nemůže obsahovat privátní identifikátory.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Element optional nemůže následovat za elementem rest.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Tento kontejner zakrývá vnější hodnotu this.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Signatura přetížení nemůže být deklarovaný jako generátor.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unární výraz s operátorem {0} se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.", - "Annotate_everything_with_types_from_JSDoc_95043": "Vše s typy z JSDoc opatřit poznámkami", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Přidejte anotace typů funkce expando ve vlastnostech v oboru názvů.", - "Annotate_with_type_from_JSDoc_95009": "Přidat poznámku s typem z JSDoc", - "Another_export_default_is_here_2753": "Další výchozí hodnota exportu je tady.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jakákoli vlastnost Unicode, která by mohla odpovídat více než jednomu znaku, je k dispozici pouze v případě, že je nastaven příznak Unicode Sets (v).", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Cokoli, co by mohlo odpovídat více než jednomu znaku, je v negované třídě znaků neplatné.", - "Are_you_missing_a_semicolon_2734": "Nechybí středník?", - "Argument_expression_expected_1135": "Očekává se výraz argumentu.", - "Argument_for_0_option_must_be_Colon_1_6046": "Argument možnosti {0} musí být {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Argument dynamického importu nemůže být element rozestření.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Argument typu {0} nejde přiřadit k parametru typu {1}.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argument typu {0} se nedá přiřadit k parametru typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nezadaly se argumenty pro parametr rest {0}.", - "Array_element_destructuring_pattern_expected_1181": "Očekával se destrukturační vzor elementu pole.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Pole s elementy spread nelze odvodit pomocí možnosti --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Kontrolní výrazy vyžadují, aby se všechny názvy v cíli volání deklarovaly s explicitní anotací typu.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Kontrolní výrazy vyžadují, aby cíl volání byl identifikátor, nebo kvalifikovaný název.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Přiřazování vlastností funkcím bez jejich deklarování není u s možností --isolatedDeclarations podporováno. Přidejte explicitní deklaraci pro vlastnosti přiřazené k této funkci.", - "Asterisk_Slash_expected_1010": "Očekával se znak */.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Minimálně jeden přistupující objekt musí mít explicitní anotaci typu s možností --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozšíření pro globální rozsah může být jenom přímo vnořené v externích modulech nebo deklaracích ambientního modulu.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozšíření pro globální rozsah by měla mít modifikátor declare, pokud se neobjeví v kontextu, který je už ambientní.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatické zjišťování pro psaní je povolené v projektu {0}. Spouští se speciální průchod řešení pro modul {1} prostřednictvím umístění mezipaměti {2}.", - "BUILD_OPTIONS_6919": "MOŽNOSTI SESTAVENÍ", - "Backwards_Compatibility_6253": "Zpětná kompatibilita", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Výrazy základní třídy nemůžou odkazovat na parametry typu třídy.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Návratový typ základního konstruktoru {0} není typ objektu ani průsečík typů objektů se staticky známými členy.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Všechny základní konstruktory musí mít stejný návratový typ.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Základní adresář pro překlad neabsolutních názvů modulů.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Když je cíl nastavený níže než ES2020, literály typu BigInt nejsou k dispozici.", - "Binary_digit_expected_1177": "Očekává se binární číslice.", - "Binding_element_0_implicitly_has_an_1_type_7031": "Element vazby {0} má implicitně typ {1}.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Proměnná bloku {0} se používá před vlastní deklarací.", - "Build_a_composite_project_in_the_working_directory_6925": "Sestavte složený projekt v pracovním adresáři.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Sestavujte všechny projekty včetně těch, které se zdají aktuální.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Sestavit jeden nebo více projektů a jejich závislosti, pokud jsou zastaralé", - "Build_option_0_requires_a_value_of_type_1_5073": "Možnost buildu {0} vyžaduje hodnotu typu {1}.", - "Building_project_0_6358": "Sestavuje se projekt {0}...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Instance integrovaných iterátorů jsou vytvářeny s typem „TReturn“ s hodnotou „undefined“ místo hodnoty „any“.", - "COMMAND_LINE_FLAGS_6921": "PŘÍZNAKY PŘÍKAZOVÉHO ŘÁDKU", - "COMMON_COMMANDS_6916": "BĚŽNÉ PŘÍKAZY", - "COMMON_COMPILER_OPTIONS_6920": "BĚŽNÉ PARAMETRY KOMPILÁTORU", - "Call_decorator_expression_90028": "Zavolat výraz dekorátoru", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Návratové typy signatury volání {0} a {1} nejsou kompatibilní.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Signatura volání s chybějící anotací návratového typu má implicitně návratový typ any.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Signatury volání bez argumentů mají nekompatibilní návratové typy {0} a {1}.", - "Call_target_does_not_contain_any_signatures_2346": "Cíl volání neobsahuje žádné signatury.", - "Can_only_convert_logical_AND_access_chains_95142": "Převést se dají jen logické řetězy přístupu AND.", - "Can_only_convert_named_export_95164": "Lze převést pouze pojmenovaný export ", - "Can_only_convert_property_with_modifier_95137": "Převést se dá jenom vlastnost s modifikátorem.", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Převést lze pouze zřetězení řetězců a řetězcové literály.", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "K {0}.{1} nelze získat přístup, protože {0} je typ, nikoli názvový prostor. Chtěli jste načíst typ vlastnosti {1} v {0} pomocí {0}[{1}]?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Když je povolena možnost „{0}“, nelze získat přístup k „{1}“ z jiného souboru bez kvalifikace. Místo toho použijte možnost „{2}“.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Když je povolená možnost „{0}“, nelze přistupovat k výčtům prostředí „const enum“.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Typ konstruktoru {0} se nedá přiřadit k typu konstruktoru {1}.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Abstraktní typ konstruktoru nejde přiřadit neabstraktnímu typu konstruktoru.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Do {0} se nedá přiřazovat, protože je to třída.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nejde přiřadit k vlastnosti {0}, protože je konstantní.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Do {0} se nedá přiřazovat, protože je to funkce.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Do {0} se nedá přiřazovat, protože je to obor názvů.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nejde přiřadit k vlastnosti {0}, protože je jen pro čtení.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Do {0} se nedá přiřazovat, protože je to výčet.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Do {0} se nedá přiřazovat, protože je to import.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nejde přiřadit k položce {0}, to není proměnná.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Není možné přiřazovat hodnoty do privátní metody {0}. Do privátních metod se nedá zapisovat.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Modul {0} se nedá rozšířit, protože se překládá do entity, která není modul.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modul {0} se nedá rozšířit, protože se překládá na entitu, která není modul.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Moduly nejde kompilovat pomocí možnosti {0}, pokud příznak --module nemá hodnotu amd nebo system.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Nejde vytvořit instance abstraktní třídy.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Iterace se nedá delegovat na hodnotu, protože metoda next jejího iterátoru očekává typ {1}, ale obsahující generátor vždy pošle {0}.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "{0} se nedá exportovat. Z modulu je možné exportovat jenom místní deklarace.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Třída {0} se nedá rozšířit. Konstruktor třídy je označený jako privátní.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Nejde rozšířit rozhraní {0}. Měli jste na mysli 'implements'?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Soubor tsconfig.json nejde najít v aktuálním adresáři: {0}", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Soubor tsconfig.json nejde najít v zadaném adresáři: {0}", - "Cannot_find_global_type_0_2318": "Globální typ {0} se nenašel.", - "Cannot_find_global_value_0_2468": "Globální hodnota {0} se nenašla.", - "Cannot_find_lib_definition_for_0_2726": "Nepovedlo se najít definici knihovny pro {0}.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nepovedlo se najít definici knihovny pro {0}. Neměli jste na mysli spíš {1}?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nepovedlo se najít modul {0}. Zvažte možnost importovat modul s příponou .json pomocí --resolveJsonModule.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nepovedlo se najít modul „{0}“. Nechtěli jste nastavit možnost „moduleResolution“ na „nodenext“ nebo přidat do možnosti „paths“ aliasy?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nepovedlo se najít modul {0} nebo jeho odpovídající deklarace typů.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Nelze najít deklarace modulu nebo typu pro import vedlejšího efektu {0}.", - "Cannot_find_name_0_2304": "Název {0} se nenašel.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Nepovedlo se najít název {0}. Měli jste na mysli {1}?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Název {0} se nedá najít. Měli jste na mysli člena instance this.{0}?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Název {0} se nedá najít. Měli jste na mysli statický člen {1}.{0}?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nelze najít název {0}. Nechtěli jste to napsat v asynchronní funkci?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{1}‘ nebo novější.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ tak, aby obsahovala ‚dom‘.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“ a pak do pole typů v tsconfig přidejte „bun“.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste npm i --save-dev @types/jest nebo npm i --save-dev @types/mocha.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste ‚npm i --save-dev@ types/jest‘ nebo ‚npm i --save-dev @types/mocha‘ a pak do polí typů v tsconfig přidejte ‚jest‘ nebo ‚mocha‘.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro jQuery? Zkuste npm i --save-dev @types/jquery.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro jQuery? Zkuste ‚npm i --save-dev @types/jquery` a pak pro pole typů v tsconfig přidejte ‚jquery‘.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro Node? Zkuste npm i --save-dev @types/node.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro uzel? Zkuste ‚npm i --save-dev @types/node‘ a pak do pole typů v tsconfig přidejte ‚node‘.", - "Cannot_find_namespace_0_2503": "Nenašel se obor názvů {0}.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Obor názvů {0} nejde najít. Měli jste na mysli „{1}“?", - "Cannot_find_parameter_0_1225": "Nenašel se parametr {0}.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nenašla se společná cesta podadresářů pro vstupní soubory.", - "Cannot_find_type_definition_file_for_0_2688": "Nejde najít soubor definice pro {0}.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Soubory deklarací typů nejde importovat. Zvažte možnost místo {1} naimportovat {0}.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Proměnnou {0} s vnějším oborem nejde inicializovat ve stejném oboru jako deklaraci {1} s oborem bloku.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Nejde vyvolat objekt, který může být null.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Nejde vyvolat objekt, který může být null nebo nedefinovaný.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Nejde vyvolat objekt, který může být nedefinovaný.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale při destrukci pole se vždy pošle {0}.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale rozsah pole bude vždy posílat {0}.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale for-of bude vždy posílat {0}.", - "Cannot_move_statements_to_the_selected_file_95183": "Příkazy nelze přesunout do vybraného souboru.", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Nelze přesunout do souboru, vybraný soubor je neplatný.", - "Cannot_read_file_0_5083": "Nejde přečíst soubor {0}.", - "Cannot_read_file_0_Colon_1_5012": "Nejde číst soubor {0}: {1}", - "Cannot_redeclare_block_scoped_variable_0_2451": "Nejde předeklarovat proměnnou bloku {0}.", - "Cannot_redeclare_exported_variable_0_2323": "Exportovanou proměnnou {0} není možné znovu deklarovat.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nejde předeklarovat identifikátor {0} v klauzuli catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nejde spustit volání funkce v poznámce typu.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Pokud se nezadá příznak -jsx, nepůjde JSX použít.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Když se povolená možnost „{0}“, nelze pro obor názvů typů nebo obor názvů „pouze typ“ použít „export import“.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nejde používat importy, exporty nebo rozšíření modulu, pokud má příznak --module hodnotu none.", - "Cannot_use_namespace_0_as_a_type_2709": "Obor názvů {0} nejde použít jako typ.", - "Cannot_use_namespace_0_as_a_value_2708": "Obor názvů {0} nejde použít jako hodnotu.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Klíčové slovo „this“ nejde použít v inicializátoru statické vlastnosti dekorované třídy.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Soubor {0} se nedá zapsat, protože přepíše soubor .tsbuildinfo vygenerovaný odkazovaným projektem {1}.", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Do souboru {0} se nedá zapisovat, protože by se přepsal více vstupními soubory.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Do souboru {0} se nedá zapisovat, protože by přepsal vstupní soubor.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Proměnná klauzule catch nemůže mít inicializátor.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Pokud se zadá typ proměnné klauzule catch, jeho anotace musí být any nebo unknown.", - "Change_0_to_1_90014": "Změnit {0} na {1}", - "Change_all_extended_interfaces_to_implements_95038": "Změnit všechna rozšířená rozhraní na implements", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Změnit všechny typy jsdoc-style na TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Změnit všechny typy jsdoc-style na TypeScript (a přidat | undefined do typů s možnou hodnotou null)", - "Change_extends_to_implements_90003": "Změnit extends na implements", - "Change_spelling_to_0_90022": "Změnit pravopis na {0}", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Zkontrolujte vlastnosti třídy, které sice jsou deklarované, ale nejsou nastavené v konstruktoru.", - "Check_side_effect_imports_6806": "Zkontrolujte importy typu „side effect“.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Zkontrolujte, jestli argumenty metod bind, call a apply odpovídají původní funkci.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Kontroluje se, jestli je {0} nejdelší odpovídající předpona pro {1}–{2}.", - "Circular_definition_of_import_alias_0_2303": "Cyklická definice aliasu importu {0}", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Při překladu konfigurace se zjistila cykličnost: {0}.", - "Circularity_originates_in_type_at_this_location_2751": "Zdrojem cykličnosti je typ na tomto umístění.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Třída {0} definuje členský přístupový objekt instance {1}, ale rozšířená třída {2} ho definuje jako členskou funkci instance.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Třída {0} definuje členskou funkci instance {1}, ale rozšířená třída {2} ji definuje jako členský přístupový objekt instance.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Třída {0} definuje vlastnost člena instance {1}, ale rozšířená třída {2} ji definuje jako členskou funkci instance.", - "Class_0_incorrectly_extends_base_class_1_2415": "Třída {0} nesprávně rozšiřuje základní třídu {1}.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Třída {0} nesprávně implementuje třídu {1}. Nechtěli jste rozšířit třídu {1} a dědit její členy jako podtřídu?", - "Class_0_incorrectly_implements_interface_1_2420": "Třída {0} nesprávně implementuje rozhraní {1}.", - "Class_0_used_before_its_declaration_2449": "Třída {0} se používá dříve, než se deklaruje.", - "Class_constructor_may_not_be_a_generator_1368": "Konstruktor třídy nemůže být generátor.", - "Class_constructor_may_not_be_an_accessor_1341": "Konstruktor třídy nemůže být přístupový objekt.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklarace třídy nemůže implementovat seznam přetížení pro {0}.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku ‚@augments‘ nebo ‚@extends‘.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekorátory tříd se nedají použít se statickým privátním identifikátorem. Zvažte možnost odebrat experimentální dekorátor.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole třídy „{0}“ definované nadřazenou třídou není v podřízené třídě přístupné přes třídu typu super.", - "Class_name_cannot_be_0_2414": "Třída nemůže mít název {0}.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Když se cílí na ES5 a výše s modulem {0}, název třídy nemůže být Object.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Statická strana třídy {0} nesprávně rozšiřuje statickou stranu základní třídy {1}.", - "Classes_can_only_extend_a_single_class_1174": "Třídy můžou rozšířit jenom jednu třídu.", - "Classes_may_not_have_a_field_named_constructor_18006": "Třídy nemůžou mít pole s názvem constructor.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Kód obsažený ve třídě se vyhodnocuje ve striktním režimu jazyka JavaScript, který toto použití {0} nepovoluje. Další informace najdete tady: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode", - "Command_line_Options_6171": "Možnosti příkazového řádku", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Zkompilujte projekt podle cesty k jeho konfiguračnímu souboru nebo do složky se souborem tsconfig.json.", - "Compiler_Diagnostics_6251": "Diagnostika kompilátoru", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Možnost kompilátoru „{0}“ nemůže mít prázdný řetězec.", - "Compiler_option_0_expects_an_argument_6044": "Parametr kompilátoru {0} očekává argument.", - "Compiler_option_0_may_not_be_used_with_build_5094": "Možnost kompilátoru „--{0}“ se nesmí používat s „--build“.", - "Compiler_option_0_may_only_be_used_with_build_5093": "Možnost kompilátoru „--{0}“ se smí používat jenom s „--build“.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Možnost kompilátoru {0} hodnoty {1} je nestabilní. Ke ztlumení této chyby použijte noční TypeScript. Zkuste provést aktualizaci pomocí příkazu npm install -D typescript@next.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "Parametr kompilátoru {0} vyžaduje hodnotu typu {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilátor si rezervuje název {0} při generování privátního identifikátoru pro nižší úroveň.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Zkompiluje projekt TypeScriptu umístěný v zadané cestě.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Zkompiluje aktuální projekt (tsconfig.json v pracovním adresáři).", - "Compiles_the_current_project_with_additional_settings_6929": "Zkompiluje aktuální projekt s dalšími nastaveními.", - "Completeness_6257": "Úplnost", - "Composite_projects_may_not_disable_declaration_emit_6304": "Složené projekty nemůžou zakázat generování deklarací.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Složené projekty nemůžou zakázat přírůstkovou kompilaci.", - "Computed_from_the_list_of_input_files_6911": "Vypočítáno ze seznamu vstupních souborů", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Počítané vlastnosti musí být číselné nebo řetězcové literály, proměnné nebo výrazy s tečkami s možností --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Názvy počítaných vlastností se ve výčtech nepovolují.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Názvy počítaných vlastností v literálech třídy nebo objektu nelze odvodit pomocí možnosti --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Ve výčtu, jehož členy mají hodnoty typu string, se nepovolují vypočítané hodnoty.", - "Concatenate_and_emit_output_to_single_file_6001": "Zřetězit a generovat výstup do jednoho souboru", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Podmínky, které se mají nastavit kromě výchozích hodnot specifických pro překladač při překladu importů.", - "Conflicts_are_in_this_file_6201": "V tomto souboru se nacházejí konflikty.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Zvažte přidání modifikátoru „declare“ do této třídy.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Návratové typy signatury konstruktu {0} a {1} nejsou kompatibilní.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Podpis konstruktoru s chybějící anotací návratového typu má implicitně návratový typ any.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Signatury konstruktů bez argumentů mají nekompatibilní návratové typy {0} a {1}.", - "Constructor_implementation_is_missing_2390": "Chybí implementace konstruktoru.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Konstruktor třídy {0} je privátní a dostupný jenom v rámci deklarace třídy.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor třídy {0} je chráněný a dostupný jenom v rámci deklarace třídy.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Když se notace typu konstruktoru používá v typu sjednocení, musí být uzavřená do závorky.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Když se notace typu konstruktoru používá v typu průniku, musí být uzavřená do závorky.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory odvozených tříd musí obsahovat volání příkazu super.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Není zadaný obsažený soubor a nedá se určit kořenový adresář – přeskakuje se vyhledávání ve složce node_modules.", - "Containing_function_is_not_an_arrow_function_95128": "Obsahující funkce není funkcí šipky.", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Určete, která metoda se používá k detekci souborů JS ve formátu modulu.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Převod typu {0} na typ {1} může být chyba, protože ani jeden z těchto typů se s tím druhým dostatečně nepřekrývá. Pokud je to záměr, převeďte nejdříve výraz na unknown.", - "Convert_0_to_1_in_0_95003": "Převést {0} na {1} v {0}", - "Convert_0_to_mapped_object_type_95055": "Převést {0} na typ mapovaného objektu", - "Convert_all_const_to_let_95102": "Převést všechny const na let", - "Convert_all_constructor_functions_to_classes_95045": "Převést všechny funkce konstruktoru na třídy", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Převést všechny neplatné znaky na kód entity HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Převést všechny opětovně exportované typy na exporty, při kterých se exportují jen typy", - "Convert_all_require_to_import_95048": "Převést všechna volání require na import", - "Convert_all_to_async_functions_95066": "Převést vše na asynchronní funkce", - "Convert_all_to_bigint_numeric_literals_95092": "Převést vše na číselné literály bigint", - "Convert_all_to_default_imports_95035": "Převést vše na výchozí importy", - "Convert_all_type_literals_to_mapped_type_95021": "Převést všechny literály typů na namapovaný typ", - "Convert_all_typedef_to_TypeScript_types_95177": "Převeďte všechny typy typedef na typy TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Převést funkci šipky nebo výraz funkce", - "Convert_const_to_let_95093": "Převést const na let", - "Convert_default_export_to_named_export_95061": "Převést výchozí export na pojmenovaný export", - "Convert_function_declaration_0_to_arrow_function_95106": "Převést deklaraci funkce {0} na funkci šipky", - "Convert_function_expression_0_to_arrow_function_95105": "Převést výraz funkce {0} na funkci šipky", - "Convert_function_to_an_ES2015_class_95001": "Převést funkci na třídu ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Převést neplatný znak na jeho kód entity HTML", - "Convert_named_export_to_default_export_95062": "Převést pojmenovaný export na výchozí export", - "Convert_named_imports_to_default_import_95170": "Převést pojmenované importy na výchozí import", - "Convert_named_imports_to_namespace_import_95057": "Převést pojmenované importy na import oboru názvů", - "Convert_namespace_import_to_named_imports_95056": "Převést import oboru názvů na pojmenované importy", - "Convert_overload_list_to_single_signature_95118": "Převést seznam přetížení na jednu signaturu", - "Convert_parameters_to_destructured_object_95075": "Převést parametry na destrukturovaný objekt", - "Convert_require_to_import_95047": "Převést require na import", - "Convert_to_ES_module_95017": "Převést na modul ES", - "Convert_to_a_bigint_numeric_literal_95091": "Převést na číselný literál bigint", - "Convert_to_anonymous_function_95123": "Převést na anonymní funkci", - "Convert_to_arrow_function_95125": "Převést na funkci šipky", - "Convert_to_async_function_95065": "Převést na asynchronní funkci", - "Convert_to_default_import_95013": "Převést na výchozí import", - "Convert_to_named_function_95124": "Převést na pojmenovanou funkci", - "Convert_to_optional_chain_expression_95139": "Převést na nepovinný výraz řetězu.", - "Convert_to_template_string_95096": "Převést na řetězec šablony", - "Convert_to_type_only_export_1364": "Převést na export, při kterém se exportují jen typy", - "Convert_typedef_to_TypeScript_type_95176": "Převeďte typedef na typ TypeScript.", - "Corrupted_locale_file_0_6051": "Soubor národního prostředí {0} je poškozený.", - "Could_not_convert_to_anonymous_function_95153": "Nepovedlo se převést na anonymní funkci.", - "Could_not_convert_to_arrow_function_95151": "Nepovedlo se převést na funkci šipky.", - "Could_not_convert_to_named_function_95152": "Nepovedlo se převést na pojmenovanou funkci.", - "Could_not_determine_function_return_type_95150": "Nepovedlo se určit návratový typ funkce.", - "Could_not_find_a_containing_arrow_function_95127": "Nepovedlo se najít obsahující funkci šipky.", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nenašel se soubor deklarací pro modul {0}. {1} má implicitně typ any.", - "Could_not_find_convertible_access_expression_95140": "Nepovedlo se najít převoditelný výraz přístupu.", - "Could_not_find_export_statement_95129": "Nešlo najít příkaz export.", - "Could_not_find_import_clause_95131": "Nešlo najít klauzuli import.", - "Could_not_find_matching_access_expressions_95141": "Nepovedlo se najít odpovídající výrazy přístupu.", - "Could_not_find_name_0_Did_you_mean_1_2570": "Nepodařilo se najít název {0}. Měli jste na mysli {1}?", - "Could_not_find_namespace_import_or_named_imports_95132": "Nepovedlo se najít import oboru názvů nebo pojmenované importy.", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Nepovedlo se najít vlastnost, pro kterou se má vygenerovat přístupový objekt.", - "Could_not_find_variable_to_inline_95185": "Nepodařilo se najít proměnnou, která se má vložit.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nepovedlo se přeložit cestu {0} s příponami {1}.", - "Could_not_write_file_0_Colon_1_5033": "Nedá se zapisovat do souboru {0}: {1}", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Vytvořte pro generované soubory JavaScriptu soubory sourcemap.", - "Create_sourcemaps_for_d_ts_files_6614": "Pro soubory d.ts vytvořte soubory sourcemap.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Vytvoří tsconfig.json doporučenými nastaveními v pracovním adresáři.", - "DIRECTORY_6038": "ADRESÁŘ", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Desítkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Desetinná čísla s úvodními nulami nejsou povolena.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklarace rozšiřuje deklaraci v jiném souboru. Toto není možné serializovat.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Generování deklarace pro tento soubor vyžaduje zachování tohoto importu pro rozšíření. Toto není podporováno s možností --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0}. Explicitní anotace typu může generování deklarací odblokovat.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0} z modulu {1}. Explicitní anotace typu může generování deklarací odblokovat.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Generování deklarace pro tento parametr vyžaduje implicitní přidání možnosti „undefined“ do jeho typu. Není podporováno s možností „--isolatedDeclarations“.", - "Declaration_expected_1146": "Očekává se deklarace.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Název deklarace je v konfliktu s integrovaným globálním identifikátorem {0}.", - "Declaration_or_statement_expected_1128": "Očekává se deklarace nebo příkaz.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Očekávala se deklarace nebo příkaz. Tento znak = následuje blok příkazů, takže pokud jste chtěli napsat destrukturační přiřazení, možná bude nutné uzavřít celé přiřazení do závorek.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarace s kontrolními výrazy jednoznačného přiřazení musí mít také anotace typu.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarace s inicializátory nemůžou mít také kontrolní výrazy jednoznačného přiřazení.", - "Declare_a_private_field_named_0_90053": "Deklarovat privátní pole s názvem {0}", - "Declare_method_0_90023": "Deklarovat metodu {0}", - "Declare_private_method_0_90038": "Deklarovat privátní metodu {0}", - "Declare_private_property_0_90035": "Deklarujte privátní vlastnost {0}.", - "Declare_property_0_90016": "Deklarovat vlastnost {0}", - "Declare_static_method_0_90024": "Deklarovat statickou metodu {0}", - "Declare_static_property_0_90027": "Deklarovat statickou vlastnost {0}", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Návratový typ funkce dekoratéru {0} se nedá přiřadit k typu {1}.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Návratový typ funkce dekoratéru je {0}, ale očekává se, že bude void nebo any.", - "Decorator_used_before_export_here_1486": "Dekoratér je tu použit před možností „export“.", - "Decorators_are_not_valid_here_1206": "Dekorátory tady nejsou platné.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekorátory nejde použít na víc přístupových objektů get/set se stejným názvem.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratéry se nemůžou vyskytovat po „export“ nebo „export default“, pokud se taky vyskytují před možností „export“.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratéry musí předcházet název a všechna klíčová slova deklarace vlastností.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Výchozí proměnné klauzule catch jako unknown namísto any.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Výchozí export modulu má nebo používá privátní název {0}.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Výchozí exporty nelze odvodit pomocí --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Výchozí importy nejsou v odloženém importu povolené.", - "Default_library_1424": "Výchozí knihovna", - "Default_library_for_target_0_1425": "Výchozí knihovna pro cíl {0}", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Odložené importy jsou podporovány pouze v případě, že je příznak --module nastaven na hodnotu esnext nebo preserve.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definice následujících identifikátorů je v konfliktu s definicemi v jiném souboru: {0}", - "Delete_all_unused_declarations_95024": "Odstranit všechny nepoužívané deklarace", - "Delete_all_unused_imports_95147": "Odstranit všechny nepoužívané importy", - "Delete_all_unused_param_tags_95172": "Odstranit všechny nepoužívané značky @param", - "Delete_the_outputs_of_all_projects_6365": "Odstraňte výstupy všech projektů.", - "Delete_unused_param_tag_0_95171": "Odstranit nepoužívanou značku @param {0}", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Zastaralé] Použijte místo toho --jsxFactory. Určí objekt vyvolaný pro createElement při cílení na generování JSX react.", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Zastaralé] Použijte místo toho --outFile. Zřetězí a vygeneruje výstup do jednoho souboru.", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Zastaralé] Použijte místo toho --skipLibCheck. Přeskočí kontrolu typů výchozích souborů deklarací knihovny.", - "Deprecated_setting_Use_outFile_instead_6677": "Nastavení je zastaralé. Místo něj použijte outFile.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Nezapomněli jste použít await?", - "Did_you_mean_0_1369": "Měli jste na mysli {0}?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Měli jste na mysli omezení {0} na typ new (...args: any[]) => {1}?", - "Did_you_mean_to_call_this_expression_6212": "Nechtěli jste zavolat tento výraz?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Nechtěli jste označit tuto funkci jako async?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Neměli jste v úmyslu použít znak :? Znak = může následovat pouze po názvu vlastnosti, když je obsahující objekt literálu součástí vzoru destrukturalizace.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Nechtěli jste u tohoto výrazu použít new?", - "Digit_expected_1124": "Očekává se číslice.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Adresář {0} neexistuje. Všechna vyhledávání v něm se přeskočí.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Adresář {0} neobsahuje package.json scope. Importy nebudou vyřešeny.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "V generovaných souborech JavaScriptu zakažte přidávání direktiv „use strict“.", - "Disable_checking_for_this_file_90018": "Zakázat kontrolu tohoto souboru", - "Disable_emitting_comments_6688": "Zakázat generování komentářů.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Zakažte generování deklarací s příznakem „@internal“ v komentářích JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Zakažte generování souborů z kompilace.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Zakažte generování souborů, pokud jsou při kontrole typů nahlášeny jakékoli chyby.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Zakažte v generovaném kódu mazání deklarací const enum.", - "Disable_error_reporting_for_unreachable_code_6603": "Zakažte hlášení chyb, pokud je kód nedosažitelný.", - "Disable_error_reporting_for_unused_labels_6604": "Zakažte hlášení chyb u nepoužitých popisků.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Zakažte úplnou kontrolu typů (budou hlášeny pouze kritické chyby analýzy a generování).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Zakázat v kompilovaném výstupu generování vlastních pomocných funkcí, jako je __extends.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Zakažte zahrnutí všech souborů knihoven, včetně výchozí lib.d.ts.", - "Disable_loading_referenced_projects_6235": "Zakažte načítání odkazovaných projektů.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Zakažte v odkazech na složené projekty místo deklaračních souborů používat preferované zdrojové soubory.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Zakažte při vytváření literálů objektů hlášení zbytečně velkého počtu chyb vlastností.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Zakažte překlad odkazů symlink na jejich skutečnou cestu (realpath). Toto nastavení koreluje se stejným příznakem uzlu.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Zakázat omezení velikosti v projektech JavaScriptu", - "Disable_solution_searching_for_this_project_6224": "Zakažte vyhledávání řešení pro tento projekt.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Zakáže striktní kontroly generických signatur v typech funkcí.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Zakázat v javascriptových projektech získávání typů", - "Disable_truncating_types_in_error_messages_6663": "Zakázat v chybových zprávách zkracování typů.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Zakažte možnost používat zdrojové soubory místo souborů deklarací z odkazovaných projektů.", - "Disable_wiping_the_console_in_watch_mode_6684": "Zakažte vymazání konzole v režimu sledování.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Při získávání typů se zakáže odvozování. Názvy souborů se vyhledají v projektu.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Zakázat import, require nebo zvětšování počtu souborů, které by typeScript měl přidat do projektu.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Zakažte odkazy na stejný soubor s nekonzistentně použitými malými a velkými písmeny.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nepřidávat odkazy se třemi lomítky nebo importované moduly do seznamu kompilovaných souborů", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Nepovolit konstruktory modulu runtime, které nejsou součástí ECMAScriptu", - "Do_not_emit_comments_to_output_6009": "Negenerovat komentáře pro výstup", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Negenerovat deklarace pro kód s anotací @internal", - "Do_not_emit_outputs_6010": "Negenerovat výstupy", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Negenerovat výstupy, pokud byly oznámeny chyby", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Negenerujte direktivy use strict ve výstupu modulu.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Nemazat deklarace konstantního výčtu v generovaném kódu", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Negenerovat v kompilovaném výstupu vlastní pomocné funkce jako __extends", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Nezahrnovat výchozí soubor knihovny (lib.d.ts)", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Neoznamují se chyby v nedosažitelném kódu.", - "Do_not_report_errors_on_unused_labels_6074": "Neoznamují se chyby v nepoužívaných popiscích.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Nepřekládat skutečnou cestu symbolických odkazů", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Netransformujte ani nevynechávejte žádné importy nebo exporty, které nejsou označeny jako „pouze typ“, a zajistěte, aby byly zapsány ve formátu výstupního souboru podle nastavení „module“.", - "Do_not_truncate_error_messages_6165": "Nezkracovat chybové zprávy", - "Duplicate_function_implementation_2393": "Duplicitní implementace funkce", - "Duplicate_identifier_0_2300": "Duplicitní identifikátor {0}", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Duplicitní identifikátor {0}. Kompilátor si vyhrazuje název {1} v oboru nejvyšší úrovně pro daný modul.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1} v oboru nejvyšší úrovně modulu, který obsahuje asynchronní funkce.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1}, když se generují odkazy super ve statických inicializátorech.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Duplicitní identifikátor {0}. Kompilátor používá deklaraci {1} pro podporu asynchronních funkcí.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Duplicitní identifikátor {0}. Statické elementy a elementy instancí nemůžou sdílet stejný privátní název.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Duplicitní identifikátor arguments. Kompilátor pomocí identifikátoru arguments inicializuje parametry rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Duplicitní identifikátor _newTarget. Kompilátor používá deklaraci proměnné _newTarget k zachycení odkazu na metavlastnost new.target.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Duplicitní identifikátor _this. Kompilátor pomocí deklarace proměnné _this zaznamenává odkaz na příkaz this.", - "Duplicate_index_signature_for_type_0_2374": "Duplicitní signatura indexu pro typ {0}.", - "Duplicate_label_0_1114": "Duplicitní popisek {0}", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Duplicitní vlastnost {0}.", - "Duplicate_regular_expression_flag_1500": "Duplikovaný příznak regulárního výrazu", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specifikátor dynamického importu musí být typu string, ale tady má typ {0}.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamické importy se podporují jenom v případě, že je příznak --module nastavený na es2020, es2022, esnext, commonjs, amd, system, umd, node16, node18, node20 nebo nodenext.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamické importy můžou jako argumenty přijímat jenom specifikátor modulu a volitelnou sadu atributů.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dynamické importy podporují druhý argument, pouze pokud je možnost --module nastavena na esnext, node16, node18, node20, nodenext nebo preserve.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importy a exporty ECMAScript nelze zapsat do souboru CommonJS v části verbatimModuleSyntax.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importy a exporty ECMAScript nelze zapsat do souboru CommonJS v části verbatimModuleSyntax. Upravte pole type v nejbližším souboru package.json tak, aby tento soubor byl modulem ECMAScript, případně upravte nastavení verbatimModuleSyntax, module a moduleResolution v TypeScriptu.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Syntaxe modulu ECMAScript není v modulu CommonJS povolená, pokud je možnost module nastavená na preserve.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Každá deklarace „{0}.{1}“ se liší ve své hodnotě. Bylo očekáváno „{2}“, ale zadáno bylo „{3}“.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Každý člen typu sjednocení {0} má signatury konstruktu, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Každý člen typu sjednocení {0} má signatury, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", - "Editor_Support_6249": "Podpora editoru", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element má implicitně typ any, protože pomocí výrazu typu {0} není možné indexovat typ {1}.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element má implicitně typ any, protože indexový výraz není typu number.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu. Nechtěli jste zavolat {1}?", - "Emit_6246": "Generovat", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Generovat pole třídy ECMAScript-standard-compliant.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Vygeneruje na začátku výstupních souborů značku pořadí bajtů ve formátu UTF-8.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Vygeneruje jediný soubor se zdrojovými mapováními namísto samostatného souboru.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Vygenerujte profil procesoru v8 spuštěného kompilátoru pro ladění.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Vygenerujte další JavaScript, aby se podpora importování modulů CommonJS ulehčila. Tím se za účelem kompatibility typů povolí „allowSyntheticDefaultImports“.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Vygenerujte pole třídy pomocí Define namísto Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Vygenerujte metadata o typu návrhu pro dekorované deklarace ve zdrojových souborech.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Generovat kompatibilnější kód, ale při iteraci použít režim s komentářem (verbose) a méně výkonný JavaScript.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Vygeneruje zdroj spolu se zdrojovými mapováními v jednom souboru. Vyžaduje, aby byla nastavená možnost --inlineSourceMap nebo --sourceMap.", - "Enable_all_strict_type_checking_options_6180": "Povolí všechny možnosti striktní kontroly typů.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Povolte ve výstupu TypeScriptu barvu a formátování, aby byly chyby kompilátoru čitelnější.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Povolte omezení, která v projektu TypeScriptu umožní používat odkazy na projekt.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Povolte hlášení chyb u cest kódu, které funkce výslovně nevrátí.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Povolte hlášení chyb u výrazů a deklarací s implicitním typem any.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Povolit hlášení chyb v příkazech switch v případě fallthrough.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Povolit hlášení chyb v javascriptových souborech se zkontrolovanými typy.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Povolte hlášení chyb, když se místní proměnná nepřečte.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Povolte hlášení chyb, když má „this“ určený typ „any“.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Povolte experimentální podporu pro starší experimentální dekoratéry.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Povolte import souborů s libovolnou příponou za předpokladu, že je k dispozici soubor deklarace.", - "Enable_importing_json_files_6689": "Povolte importování souborů .json.", - "Enable_lib_replacement_6808": "Povolit nahrazení knihovny", - "Enable_project_compilation_6302": "Povolit kompilování projektu", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Povolte ve funkcích metody bind, call a apply.", - "Enable_strict_checking_of_function_types_6186": "Povolí striktní kontrolu typů funkcí.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Povolí striktní kontrolu inicializace vlastností ve třídách.", - "Enable_strict_null_checks_6113": "Povolte striktní kontroly hodnot null.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Povolte v konfiguračním souboru možnost experimentalDecorators.", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Povolte v konfiguračním souboru příznak --jsx.", - "Enable_tracing_of_the_name_resolution_process_6085": "Povolte trasování procesu překladu IP adres.", - "Enable_verbose_logging_6713": "Povolte podrobné protokolování.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Povolí interoperabilitu generování mezi moduly CommonJS a ES prostřednictvím vytváření objektů oboru názvů pro všechny importy. Implikuje allowSyntheticDefaultImports.", - "Enables_experimental_support_for_ES7_decorators_6065": "Povolí experimentální podporu pro dekorátory ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Povolí experimentální podporu pro generování metadat typu pro dekorátory.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Vynucuje použití indexovaných přístupových objektů pro klíče deklarované přes indexovaný typ.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Zajistěte označení přepisovaných členů v odvozených třídách modifikátorem override.", - "Ensure_that_casing_is_correct_in_imports_6637": "Při importu ověřovat správnost používání malých a velkých písmen.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Zajistit bezpečnou transpilaci všech souborů bez spoléhání na jiné importy.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Vždy zajistěte generování direktivy „use strict“.", - "Entering_conditional_exports_6413": "Vstup do podmíněných exportů", - "Entry_point_for_implicit_type_library_0_1420": "Vstupní bod pro knihovnu implicitních typů {0}", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Vstupní bod pro knihovnu implicitních typů {0} s packageId {1}", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions s packageId {1}", - "Enum_0_used_before_its_declaration_2450": "Výčet {0} se používá dříve, než se deklaruje.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklarace výčtu jdou sloučit jenom s oborem názvů nebo jinými deklaracemi výčtu.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Všechny deklarace výčtu musí být konstantní nebo nekonstantní.", - "Enum_member_expected_1132": "Očekává se člen výčtu.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Když je povolená možnost „isolatedModules“, musí mít člen výčtu následující po neliterálovém číselném členu inicializátor.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicializátory členů výčtu musí být počítatelné bez odkazů na externí symboly s možností „--isolatedDeclarations“.", - "Enum_member_must_have_initializer_1061": "Člen výčtu musí mít inicializátor.", - "Enum_name_cannot_be_0_2431": "Název výčtu nemůže být {0}.", - "Environment_Settings_6285": "Nastavení prostředí", - "Errors_Files_6041": "Soubory chyb", - "Escape_sequence_0_is_not_allowed_1488": "Řídicí sekvence „{0}“ není povolená.", - "Examples_Colon_0_6026": "Příklady: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Nadměrná složitost při porovnávání typů „{0}“ a „{1}“.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadměrná hloubka zásobníku při porovnávání typů {0} a {1}", - "Exiting_conditional_exports_6416": "Opuštění podmíněných exportů.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Očekávané argumenty typu {0}–{1}; zadejte je se značkou @extends.", - "Expected_0_arguments_but_got_1_2554": "Očekával se tento počet argumentů: {0}. Počet předaných argumentů: {1}", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Očekával se tento počet argumentů: {0}, ale byl přijat tento počet: {1}. Nezapomněli jste zahrnout void do argumentu typu pro objekt Promise?", - "Expected_0_type_arguments_but_got_1_2558": "Očekávaly se argumenty typu {0}, ale předaly se argumenty typu {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Očekávané argumenty typu {0}; zadejte je se značkou @extends.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Očekával se 1 argument, ale bylo jich 0. New Promise() potřebuje pomocný parametr JSDoc k vytvoření resolve, který se dá volat bez argumentů.", - "Expected_a_Unicode_property_name_1523": "Byl očekáván název vlastnosti Unicode.", - "Expected_a_Unicode_property_name_or_value_1527": "Byl očekáván název nebo hodnota vlastnosti Unicode.", - "Expected_a_Unicode_property_value_1525": "Byla očekávána hodnota vlastnosti Unicode.", - "Expected_a_capturing_group_name_1514": "Byl očekáván název zachycující skupiny.", - "Expected_a_class_set_operand_1520": "Byl očekáván operand nastavení třídy.", - "Expected_at_least_0_arguments_but_got_1_2555": "Očekával se aspoň tento počet argumentů: {0}. Počet předaných argumentů: {1}", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Očekávala se odpovídající ukončující značka JSX pro {0}.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Pro fragment JSX se očekávala odpovídající uzavírací značka.", - "Expected_for_property_initializer_1442": "Pro inicializátor vlastnosti se očekával znak =.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Očekávaný typ pole {0} v souboru package.json byl {1}, získal se typ {2}.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explicitně zadaný druh překladu modulu: {0}.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Pokud není možnost target nastavená na es2016 nebo novější, nedají se hodnoty bigint umocnit.", - "Export_0_from_module_1_90059": "Exportovat {0} z modulu {1}", - "Export_all_referenced_locals_90060": "Exportovat všechny odkazované místní hodnoty", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Přiřazení exportu nelze použít, pokud jsou cílem moduly ECMAScript. Zkuste místo toho použít export default nebo jiný formát modulu.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Když má příznak --module hodnotu system, nepodporuje se přiřazení exportu.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Konflikty deklarace exportu s exportovanou deklarací {0}", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Deklarace exportu nejsou povolené v oboru názvů.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Specifikátor exportu {0} neexistuje v package.json scope na cestě {1}.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias exportovaného typu {0} má nebo používá privátní název {1}.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Alias exportovaného typu {0} má nebo používá privátní název {1} z modulu {2}.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Exportovaná proměnná {0} má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Exportovaná proměnná {0} má nebo používá název {1} z privátního modulu {2}.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "Exportovaná proměnná {0} má nebo používá privátní název {1}.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporty a přiřazení exportů nejsou povolené v rozšířeních modulů.", - "Expression_expected_1109": "Očekával se výraz.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Výraz musí být uzavřen v závorkách, aby se mohl používat jako dekoratér.", - "Expression_or_comma_expected_1137": "Očekával se výraz nebo čárka.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Výraz vytvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Výraz vytvoří typ sjednocení, který se nedá reprezentovat, protože je příliš složitý.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Výraz se přeloží na identifikátor _super, pomocí kterého kompilátor zaznamenává odkaz na základní třídu.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Výraz se vyhodnocuje na deklaraci proměnné _newTarget, kterou kompilátor používá k zachycení odkazu na metavlastnost new.target.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Výraz se přeloží na deklaraci proměnné _this, pomocí které kompilátor zaznamenává odkazy na příkaz this.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Typ výrazu nejde odvodit pomocí --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzule Extends nemůže obsahovat výraz s možností „--isolatedDeclarations“.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzule extends pro odvozený typ „{0}“ má nebo používá privátní název „{1}“.", - "Extract_base_class_to_variable_90064": "Extrahovat základní třídu do proměnné", - "Extract_binding_expressions_to_variable_90066": "Extrahujte výrazy s vazbami do proměnné", - "Extract_constant_95006": "Extrahovat konstantu", - "Extract_default_export_to_variable_90065": "Extrahovat výchozí export do proměnné", - "Extract_function_95005": "Extrahovat funkci", - "Extract_to_0_in_1_95004": "Extrahovat do {0} v {1}", - "Extract_to_0_in_1_scope_95008": "Extrahovat do {0} v oboru {1}", - "Extract_to_0_in_enclosing_scope_95007": "Extrahovat do {0} v nadřazeném oboru", - "Extract_to_interface_95090": "Extrahovat do rozhraní", - "Extract_to_type_alias_95078": "Extrahovat do aliasu typu", - "Extract_to_typedef_95079": "Extrahovat do typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrahovat do proměnné a nahradit pomocí „{0} as typeof {0}“", - "Extract_type_95077": "Typ extrahování", - "FILE_6035": "SOUBOR", - "FILE_OR_DIRECTORY_6040": "SOUBOR NEBO ADRESÁŘ", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Nepodařilo se najít peerDependency „{0}“.", - "Failed_to_resolve_under_condition_0_6415": "Nepodařilo se přeložit za podmínky „{0}“.", - "Fallthrough_case_in_switch_7029": "Případ Fallthrough v příkazu switch", - "File_0_does_not_exist_6096": "Soubor {0} neexistuje.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Podle dřívějších vyhledávání v mezipaměti soubor {0} neexistuje.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Podle dřívějších vyhledávání v mezipaměti soubor {0} existuje.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Soubor „{0}“ existuje – použijte ho jako výsledek překladu IP adres.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Soubor {0} má nepodporovanou příponu. Jediné podporované přípony jsou {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Soubor {0} je javascriptový soubor. Nechtěli jste povolit možnost allowJs?", - "File_0_is_not_a_module_2306": "Soubor {0} není modul.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Soubor {0} není uvedený na seznamu souborů projektu {1}. Projekty musí uvádět všechny soubory nebo používat vzor include.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Soubor {0} není pod kořenovým adresářem rootDir {1}. Očekává se, že rootDir bude obsahovat všechny zdrojové soubory.", - "File_0_not_found_6053": "Soubor {0} se nenašel.", - "File_Layout_6284": "Rozložení souboru", - "File_Management_6245": "Správa souborů", - "File_appears_to_be_binary_1490": "Zdá se, že soubor je binární.", - "File_change_detected_Starting_incremental_compilation_6032": "Zjistila se změna souboru. Spouští se přírůstková kompilace...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Soubor je modul CommonJS, protože {0} nemá pole type", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Soubor je modul CommonJS, protože {0} má pole type, jehož hodnota není module", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Soubor je modul CommonJS, protože se nenašel package.json", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Soubor je modul ECMAScript, protože {0} má pole type s hodnotou module", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Soubor je modul CommonJS; může být převeden na modul ES.", - "File_is_default_library_for_target_specified_here_1426": "Soubor je výchozí knihovna pro cíl, který se zadal na tomto místě.", - "File_is_entry_point_of_type_library_specified_here_1419": "Soubor je vstupní bod knihovny typů, která se zadala na tomto místě.", - "File_is_included_via_import_here_1399": "Soubor se zahrnuje pomocí importu na tomto místě.", - "File_is_included_via_library_reference_here_1406": "Soubor se zahrnuje pomocí odkazu na knihovnu na tomto místě.", - "File_is_included_via_reference_here_1401": "Soubor se zahrnuje pomocí odkazu na tomto místě.", - "File_is_included_via_type_library_reference_here_1404": "Soubor se zahrnuje pomocí odkazu na knihovnu typů na tomto místě.", - "File_is_library_specified_here_1423": "Soubor je knihovna zadaná na tomto místě.", - "File_is_matched_by_files_list_specified_here_1410": "Soubor se srovnává se seznamem files zadaným na tomto místě.", - "File_is_matched_by_include_pattern_specified_here_1408": "Soubor se srovnává podle vzoru zahrnutí zadaného na tomto místě.", - "File_is_output_from_referenced_project_specified_here_1413": "Soubor je výstup z odkazovaného projektu zadaného na tomto místě.", - "File_is_output_of_project_reference_source_0_1428": "Soubor je výstup zdroje odkazů na projekt {0}.", - "File_is_source_from_referenced_project_specified_here_1416": "Soubor je zdroj z odkazovaného projektu zadaného na tomto místě.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Název souboru {0} se od už zahrnutého názvu souboru {1} liší jenom velikostí písmen.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Název souboru „{0}“ má příponu „{1}“ – místo toho se hledá: „{2}“.", - "File_name_0_has_a_1_extension_stripping_it_6132": "Název souboru {0} má příponu {1} – odstraňuje se", - "File_redirects_to_file_0_1429": "Soubor se přesměrovává na soubor {0}.", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specifikace souboru nemůže obsahovat nadřazený adresář (..), který se vyskytuje za rekurzivním zástupným znakem adresáře (**): {0}.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specifikace souboru nemůže končit rekurzivním zástupným znakem adresáře (**): {0}.", - "Filters_results_from_the_include_option_6627": "Filtrovat výsledky možnosti „zahrnout“.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Opravit všechny zjištěné pravopisné chyby", - "Fix_all_expressions_possibly_missing_await_95085": "Opravit všechny výrazy, kde je možné, že chybí await", - "Fix_all_implicit_this_errors_95107": "Opravit všechny chyby implicit-'this'", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Opravit všechny nesprávné návratové typy asynchronních funkcí", - "Fix_all_with_type_only_imports_95182": "Opravit vše s importy „type-only“", - "For_nodejs_Colon_6287": "Pro nodejs:", - "Found_0_errors_6217": "Našel se tento počet chyb: {0}.", - "Found_0_errors_Watching_for_file_changes_6194": "Byl nalezen tento počet chyb: {0}. Sledují se změny souborů.", - "Found_0_errors_in_1_files_6261": "V {1} souborech byly nalezeny chyby ({0}).", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Ve stejném souboru byly nalezeny chyby ({0}). Začínají na: {1}", - "Found_1_error_6216": "Našla se 1 chyba.", - "Found_1_error_Watching_for_file_changes_6193": "Byla nalezena 1 chyba. Sledují se změny souborů.", - "Found_1_error_in_0_6259": "Našla se 1 chyba v {0}.", - "Found_package_json_at_0_6099": "Soubor package.json se našel v {0}.", - "Found_peerDependency_0_with_1_version_6282": "Nalezeno: peerDependency – „{0}“ s verzí „{1}“", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Definice tříd jsou automaticky ve striktním režimu.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Moduly jsou automaticky ve striktním režimu.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Výraz funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Implementace funkce chybí nebo nenásleduje hned po deklaraci.", - "Function_implementation_name_must_be_0_2389": "Název implementace funkce musí být {0}.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Funkce implicitně obsahuje návratový typ any, protože neobsahuje anotaci návratového typu a odkazuje se na ni přímo nebo nepřímo v jednom z jejích návratových výrazů.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Ve funkci chybí koncový příkaz return a návratový typ neobsahuje undefined.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkce musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", - "Function_not_implemented_95159": "Funkce není implementovaná.", - "Function_overload_must_be_static_2387": "Přetížení funkce musí být statické.", - "Function_overload_must_not_be_static_2388": "Přetížení funkce nesmí být statické.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Když se notace typu funkce používá v typu sjednocení, musí být uzavřená do závorky.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Když se notace typu funkce používá v typu průniku, musí být uzavřená do závorky.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Typ funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkce s těly se dá sloučit jenom s třídami, které jsou ambientní.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Vygenerujte ze souborů TypeScriptu a JavaScriptu projektu soubory d.ts.", - "Generate_get_and_set_accessors_95046": "Generovat přístupové objekty get a set", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generovat přístupové objekty get a set pro všechny přepisující vlastnosti", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Vygeneruje profil procesoru.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Pro každý odpovídající soubor .d.ts vygeneruje sourcemap.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Generuje trasování události a seznam typů.", - "Generates_corresponding_d_ts_file_6002": "Generuje odpovídající soubor .d.ts.", - "Generates_corresponding_map_file_6043": "Generuje odpovídající soubor .map.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Generátor má implicitně typ yield {0}. Zvažte možnost přidat anotaci návratového typu.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Generátory nejsou v ambientním kontextu povolené.", - "Generic_type_0_requires_1_type_argument_s_2314": "Obecný typ {0} vyžaduje argumenty typu {1}.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Obecný typ {0} vyžaduje konkrétní počet argumentů ({1} až {2}).", - "Global_module_exports_may_only_appear_at_top_level_1316": "Exporty globálního modulu se můžou objevit jenom na nejvyšší úrovni.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Exporty globálního modulu se můžou objevit jenom v souborech deklarací.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Exporty globálního modulu se můžou objevit jenom v souborech modulů.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Globální typ {0} musí být typu třída nebo rozhraní.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Globální typ {0} musí mít parametry typu {1}.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Opakované kompilace --incremental a --watch předpokládají, že změny v souboru budou mít vliv jen na soubory, které na něm přímo závisejí.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Opakované kompilace v projektech, které používají režimy „incremental“ a „watch“ předpokládají, že změny v souboru budou mít vliv pouze na soubory, které na daném souboru přímo závisejí.", - "Hexadecimal_digit_expected_1125": "Očekávala se šestnáctková číslice.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Očekával se identifikátor. {0} je vyhrazené slovo na nejvyšší úrovni modulu.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo. Definice tříd jsou automaticky ve striktním režimu.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo. Moduly jsou automaticky ve striktním režimu.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Očekává se identifikátor. {0} je rezervované slovo, které se tady nedá použít.", - "Identifier_expected_1003": "Očekával se identifikátor.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Očekává se identifikátor. __esModule je při transformaci modulů ECMAScript rezervované jako označení exportu.", - "Identifier_or_string_literal_expected_1478": "Očekává se identifikátor nebo řetězcový literál.", - "Identifier_string_literal_or_number_literal_expected_1496": "Očekával se identifikátor, řetězcový literál nebo číselný literál.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Pokud balíček ‚{0}‘ ve skutečnosti zveřejňuje tento modul, zvažte možnost poslat žádost o přijetí změn, aby se připojila adresa ‚https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}‘", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Pokud balíček {0} skutečně zpřístupňuje tento modul, zkuste přidat nový soubor deklarace (.d.ts), který obsahuje declare module {1};", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignorujte nalezenou konfiguraci tsconfig a sestavte pomocí možností příkazového řádku a souborů.", - "Ignore_this_error_message_90019": "Ignorovat tuto chybovou zprávu", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoruje se tsconfig.js, zkompiluje zadané soubory s výchozími možnostmi kompilátoru.", - "Implement_all_inherited_abstract_classes_95040": "Implementovat všechny zděděné abstraktní třídy", - "Implement_all_unimplemented_interfaces_95032": "Implementovat všechna neimplementovaná rozhraní", - "Implement_inherited_abstract_class_90007": "Implementovat zděděnou abstraktní třídu", - "Implement_interface_0_90006": "Implementovat rozhraní {0}", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzule implements exportované třídy {0} má nebo používá privátní název {1}.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Implicitní převod symbol na string za běhu neproběhne úspěšně. Zvažte možnost zabalit tento výraz do String(...).", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}“ je v konfliktu s globální hodnotou použitou v tomto souboru, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}“ je v konfliktu s lokální hodnotou, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", - "Import_0_from_1_90013": "Importovat {0} z: {1}", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Hodnoty kontrolních výrazů importu musí být výrazy formou řetězcových literálů.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují kontrolní výrazy importu.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Kontrolní výrazy importu jsou podporovány pouze v případě, že je možnost --module nastavena na esnext, node18, node20, nodenext nebo preserve.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Kontrolní výrazy importu se nedají použít s importy nebo exporty, které jsou jenom typ.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Kontrolní výrazy importu byly nahrazeny atributy importu. Místo assert použijte with.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Přiřazení importu nelze použít, pokud jsou cílem moduly ECMAScript. Zkuste místo toho použít import * as ns from \"mod\", import {a} from \"mod\", import d from \"mod\" nebo jiný formát modulu.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Hodnoty atributů importu musí být výrazy formou řetězcových literálů.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují atributy importu.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Atributy importu jsou podporovány pouze v případě, že je možnost --module nastavena na esnext, node18, node20, nodenext nebo preserve.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atributy importu se nedají použít s importy nebo exporty „type-only“.", - "Import_declaration_0_is_using_private_name_1_4000": "Deklarace importu {0} používá privátní název {1}.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklarace importu je v konfliktu s místní deklarací {0}.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklarace importu v oboru názvů nemůžou odkazovat na modul.", - "Import_emit_helpers_from_tslib_6139": "Importovat pomocné rutiny pro generování z tslib", - "Import_may_be_converted_to_a_default_import_80003": "Import se může převést na výchozí import.", - "Import_name_cannot_be_0_2438": "Název importu nemůže být {0}.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklarace importu nebo exportu v deklaraci ambientního modulu nemůže odkazovat na modul pomocí jeho relativního názvu.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Specifikátor importu {0} neexistuje v package.json scope na cestě {1}.", - "Imported_via_0_from_file_1_1393": "Importováno přes {0} ze souboru {1}", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importováno přes {0} ze souboru {1}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importováno přes {0} ze souboru {1}, aby se provedl import výrobních funkcí jsx a jsxs", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Importováno přes {0} ze souboru {1} s packageId {2}", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import výrobních funkcí jsx a jsxs", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Import souboru JSON do modulu ECMAScript vyžaduje atribut importu type: \"json\", pokud je možnost module nastavená na {0}.", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nejsou povolené v rozšířeních modulů. Zvažte jejich přesunutí do uzavírajícího externího modulu.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Inicializátor členu v deklaracích ambientního výčtu musí být konstantní výraz.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Ve výčtu s víc deklaracemi může být jenom u jedné deklarace vynechaný inicializátor u prvního elementu výčtu.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Zahrnout seznam souborů. Tato možnost, na rozdíl od možnosti „include“, nepodporuje vzory glob.", - "Include_modules_imported_with_json_extension_6197": "Zahrnout moduly importované s příponou .json", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Do souborů sourcemap v generovaném JavaScriptu zahrňte zdrojový kód.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Zahrňte do generovaného JavaScriptu soubory sourcemap.", - "Includes_imports_of_types_referenced_by_0_90054": "Zahrnuje importy typů, na které odkazuje {0}", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Včetně --watch, -w začne sledovat aktuální projekt ohledně změn souboru. Po nastavení můžete konfigurovat režim sledování pomocí:", - "Incomplete_quantifier_Digit_expected_1505": "Neúplný kvantifikátor Očekává se číslice.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "Signatura indexu pro typ {0} chybí v typu {1}.", - "Index_signature_in_type_0_only_permits_reading_2542": "Signatura indexu v typu {0} povoluje jen čtení.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Jednotlivé deklarace ve sloučené deklaraci {0} musí být všechny exportované nebo všechny místní.", - "Infer_all_types_from_usage_95023": "Odvodit všechny typy z použití", - "Infer_function_return_type_95148": "Odvodit návratový typ funkce", - "Infer_parameter_types_from_usage_95012": "Odvodit typy parametrů z využití", - "Infer_this_type_of_0_from_usage_95080": "Vyvodit typ this pro {0} z použití", - "Infer_type_of_0_from_usage_95011": "Odvodit typ {0} z využití", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Odvozování z výrazů tříd není podporováno s možností „--isolatedDeclarations“.", - "Initialize_property_0_in_the_constructor_90020": "Inicializovat vlastnost {0} v konstruktoru", - "Initialize_static_property_0_90021": "Inicializovat statickou vlastnost {0}", - "Initializer_for_property_0_2811": "Inicializátor vlastnosti „{0}“", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicializátor instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializátory nejsou povolené v ambientních kontextech.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializuje projekt TypeScript a vytvoří soubor tsconfig.json.", - "Inline_variable_95184": "Vložená proměnná", - "Insert_command_line_options_and_files_from_a_file_6030": "Vložte parametry příkazového řádku a soubory ze souboru.", - "Install_0_95014": "Nainstalovat {0}", - "Install_all_missing_types_packages_95033": "Nainstalovat všechny chybějící balíčky typů", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Rozhraní {0} nemůže současně rozšiřovat typ {1} i {2}.", - "Interface_0_incorrectly_extends_interface_1_2430": "Rozhraní {0} nesprávně rozšiřuje rozhraní {1}.", - "Interface_declaration_cannot_have_implements_clause_1176": "Deklarace rozhraní nemůže obsahovat klauzuli implements.", - "Interface_must_be_given_a_name_1438": "Rozhraní musí mít název.", - "Interface_name_cannot_be_0_2427": "Název rozhraní nemůže být {0}.", - "Interop_Constraints_6252": "Omezení spolupráce", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretujte volitelné typy vlastností jako zapsané, místo přidání „undefined“.", - "Invalid_character_1127": "Neplatný znak", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Neplatný specifikátor importu {0} nemá žádná možná řešení.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Neplatný název modulu v rozšíření. Modul {0} se převede na netypový modul v {1}, který se nedá rozšířit.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "V rozšíření je neplatný název modulu, modul {0} se nedá najít.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Neplatný volitelný řetěz z nového výrazu. Chtěli jste volat {0}()?", - "Invalid_reference_directive_syntax_1084": "Neplatná syntaxe direktivy reference", - "Invalid_syntax_in_decorator_1498": "Neplatná syntaxe v dekoratéru", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Neplatné použití „{0}“. Nelze jej použít uvnitř statického bloku třídy.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Neplatné použití {0}. Moduly jsou automaticky ve striktním režimu.", - "Invalid_use_of_0_in_strict_mode_1100": "Neplatné použití {0} ve striktním režimu", - "Invalid_value_for_ignoreDeprecations_5103": "Neplatná hodnota pro možnost „--ignoreDeprecations“", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Neplatná hodnota pro jsxFactory. {0} není platný identifikátor nebo kvalifikovaný název.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Neplatná hodnota pro jsxFragmentFactory. {0} není platný identifikátor nebo kvalifikovaný název.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Neplatná hodnota --reactNamespace. {0} není platný identifikátor.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Pravděpodobně chybí čárka, která by oddělila tyto dva výrazy šablony. Tvoří výraz šablony se značkami, který se nedá vyvolat.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Typ prvku {0} není platný prvek JSX.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Typ instance {0} není platný prvek JSX.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Návratový typ {0} není platný prvek JSX.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Typ „{0}“ není platný typ elementu JSX.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Značka JSDoc @{0} {1} neodpovídá klauzuli extends {2}.", - "JSDoc_0_is_not_attached_to_a_class_8022": "Značka JSDoc @{0} není připojená k třídě.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc ... se může nacházet jen v posledním parametru signatury.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Značka JSDoc @param má název {0}, ale neexistuje žádný parametr s tímto názvem.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Značka JSDoc @param má název {0}, ale žádný parametr s tímto názvem neexistuje. Musí odpovídat hodnotě arguments, pokud má typ pole.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef se dá převést na typ TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Značka JSDoc @typedef by měla mít poznámku k typu nebo by za ní měly následovat značky @property nebo @member.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef lze převádět na typy TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc se můžou používat jenom v dokumentačních komentářích.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc se můžou přesunout na typy TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atributy JSX musí mít přiřazený neprázdný výraz.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "Element JSX {0} nemá odpovídající uzavírací značku.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Třída elementu JSX nepodporuje atributy, protože nemá vlastnost {0}.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Element JSX má implicitně typ any, protože neexistuje žádné rozhraní JSX.{0}.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Element JSX má implicitně typ any, protože neexistuje globální typ JSX.Element.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Typ elementu JSX {0} nemá žádnou signaturu konstrukce nebo volání.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementy JSX nemůžou mít víc atributů se stejným názvem.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Výrazy JSX nemůžou používat operátor čárky. Nechtěli jste napsat pole?", - "JSX_expressions_must_have_one_parent_element_2657": "Výrazy JSX musí mít jeden nadřazený element.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment JSX nemá odpovídající uzavírací značku.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Výrazy přístupu k vlastnosti JSX nemůžou obsahovat názvy oborů názvů JSX.", - "JSX_spread_child_must_be_an_array_type_2609": "Podřízený objekt JSX spread musí být typu pole.", - "JavaScript_Support_6247": "Podpora JavaScriptu", - "Jump_target_cannot_cross_function_boundary_1107": "Cíl odkazu nemůže překročit hranici funkce.", - "KIND_6034": "DRUH", - "Keywords_cannot_contain_escape_characters_1260": "Klíčová slova nemůžou obsahovat řídicí znaky.", - "LOCATION_6037": "UMÍSTĚNÍ", - "Language_and_Environment_6254": "Jazyk a prostředí", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Levá strana operátoru čárky se nepoužívá a nemá žádné vedlejší účinky.", - "Library_0_specified_in_compilerOptions_1422": "Knihovna {0} zadaná v compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Knihovna odkazovaná přes {0} ze souboru {1}", - "Line_break_not_permitted_here_1142": "Na tomto místě se konec řádku nepovoluje.", - "Line_terminator_not_permitted_before_arrow_1200": "Konec řádku před šipkou se nepovoluje.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Seznam přípon názvů souborů, které se mají vyhledat při překladu modulu", - "List_of_folders_to_include_type_definitions_from_6161": "Seznam složek, ze kterých se zahrnou definice typů", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Seznam kořenových složek, jejichž kombinovaný obsah představuje strukturu projektu za běhu", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Načítá se {0} z kořenového adresáře {1}, umístění kandidáta {2}.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Načítá se modul „{0}“ ze složky node_modules. Cílové typy souborů: {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Načítá se modul jako soubor/složka, umístění kandidátského modulu: „{0}“, cílové typy souborů: {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Cesty protokolu používané v procesu moduleResolution.", - "Longest_matching_prefix_for_0_is_1_6108": "Nejdelší odpovídající předpona pro {0} je {1}.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Hledání ve složce node_modules, počáteční umístění {0}", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Nastavit všechna volání metody super() prvním příkazem v jejich konstruktoru", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Vytvořte klíč jenom ze zpětných řetězců místo z řetězců, čísel nebo symbolů (možnost ze starší verze).", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Nastavit volání metody super() jako první příkaz v konstruktoru", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Typu mapovaného objektu má implicitně typ šablony any.", - "Mark_array_literal_as_const_90070": "Označit literál pole jako const", - "Matched_0_condition_1_6403": "Odpovídá {0} podmínce {1}", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Porovnává se ve výchozím nastavení se vzorem zahrnutí **/*.", - "Matched_by_include_pattern_0_in_1_1407": "Porovnáváno podle vzoru zahrnutí {0} v {1}", - "Member_0_implicitly_has_an_1_type_7008": "Člen {0} má implicitně typ {1}.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Člen {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z použití.", - "Merge_conflict_marker_encountered_1185": "Zjistila se značka konfliktu sloučení.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Spojená deklarace {0} nemůže obsahovat výchozí deklaraci exportu. Zvažte namísto toho možnost přidat samostatnou deklaraci export default {0}.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Metavlastnost {0} je povolená jenom v těle deklarace funkce, výrazu funkce nebo konstruktoru.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda {0} nemůže mít implementaci, protože je označená jako abstraktní.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda {0} z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda {0} z exportovaného rozhraní má nebo používá privátní název {1}.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", - "Method_not_implemented_95158": "Metoda není implementovaná.", - "Modifiers_cannot_appear_here_1184": "Tady nejde použít modifikátory.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Modul {0} se dá importovat podle výchozího nastavení jen pomocí příznaku {1}.", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Modul {0} nejde importovat pomocí této konstrukce. Specifikátor se převede jenom na modul ES, který se nedá importovat s příkazem require. Místo toho použijte import ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Modul {0} deklaruje {1} místně, ale exportuje se jako {2}.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Modul {0} deklaruje {1} místně, ale neexportuje se.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Modul {0} neodkazuje na typ, ale používá se tady jako typ. Měli jste na mysli typeof import('{0}')?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Modul {0} neodkazuje na hodnotu, ale používá se tady jako hodnota.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Modul {0} už exportoval člena s názvem {1}. Zvažte možnost vyřešení nejednoznačnosti explicitním opakováním exportu.", - "Module_0_has_no_default_export_1192": "Modul {0} nemá žádný výchozí export.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Modul {0} nemá žádný výchozí export. Nechtěli jste místo toho použít import { {1} } from {0}?", - "Module_0_has_no_exported_member_1_2305": "V modulu {0} není žádný exportovaný člen {1}.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Modul {0} nemá žádný exportovaný člen {1}. Nechtěli jste místo toho použít import { {1} } from {0}?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Modul {0} je skrytý místní deklarací se stejným názvem.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Modul {0} používá export = a nedá se použít s možností export *.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Modul {0} se převedl jako lokálně deklarovaný ambientní modul v souboru {1}.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Modul „{0}“ byl přeložen na „{1}“, ale není nastavena možnost „--allowArbitraryExtensions“.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Modul {0} se přeložil na {1}, není ale nastavená možnost --jsx.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Modul {0} se přeložil na {1}, ale nepoužívá se --resolveJsonModule.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Názvy deklarací modulů můžou používat jenom řetězce v jednoduchých nebo dvojitých uvozovkách.", - "Module_name_0_matched_pattern_1_6092": "Název modulu {0}, odpovídající vzor {1}", - "Module_name_0_was_not_resolved_6090": "======== Název modulu {0} nebyl přeložen. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Název modulu {0} byl úspěšně přeložen na {1}. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Název modulu {0} se úspěšně přeložil na {1} s ID balíčku {2}. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Druh překladu modulu nebyl určen, použije se {0}.", - "Module_resolution_using_rootDirs_has_failed_6111": "Překlad modulu pomocí rootDirs se nepovedl.", - "Modules_6244": "Moduly", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Přesunout modifikátory elementu popsané řazené kolekce členů na popisky", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Přesuňte výraz ve výchozím exportu do proměnné a přidejte k němu anotaci typu.", - "Move_to_a_new_file_95049": "Přesunout do nového souboru", - "Move_to_file_95178": "Přesunout do souboru", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Více po sobě jdoucích číselných oddělovačů se nepovoluje.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Víc implementací konstruktoru se nepovoluje.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NOVÝ ŘÁDEK", - "Name_is_not_valid_95136": "Název není platný.", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Pojmenované zachytávací skupiny jsou k dispozici jen při cílení na „ES2018“ nebo novější.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Pojmenované zachytávací skupiny se stejným názvem se musí navzájem vylučovat.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Pojmenované importy nejsou povoleny v odloženém importu.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Pojmenované importy ze souboru JSON do modulu ECMAScript nejsou povolené, když je možnost module nastavená na {0}.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Pojmenovaná vlastnost {0} není u typu {1} stejná jako u typu {2}.", - "Namespace_0_has_no_exported_member_1_2694": "Obor názvů {0} nemá žádný exportovaný člen {1}.", - "Namespace_must_be_given_a_name_1437": "Obor názvů musí mít název.", - "Namespace_name_cannot_be_0_2819": "Název oboru názvů nemůže být „{0}“.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Pokud je povolena možnost „{0}“, nejsou v souborech globálních skriptů povoleny obory názvů. Pokud tento soubor nemá být globálním skriptem, nastavte možnost „moduleDetection“ na hodnotu „force“ nebo přidejte prázdný příkaz „export {}“.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "U parametrů „this“ nelze použít dekoratéry ani modifikátory.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Žádný základní konstruktor nemá zadaný počet argumentů typu.", - "No_constituent_of_type_0_is_callable_2755": "Žádný konstituent typu {0} se nedá zavolat.", - "No_constituent_of_type_0_is_constructable_2759": "Žádný konstituent typu {0} se nedá vytvořit.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "V typu {1} se nenašla žádná signatura indexu s typem parametru {0}.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "V konfiguračním souboru {0} se nenašly žádné vstupy. Pro zahrnutí jsou zadané tyto cesty: {1} a pro vyloučení tyto cesty: {2}.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Funkce už není podporovaná. Ve starších verzích sloužila k ručnímu nastavení kódování textu při čtení souborů.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Žádné přetížení neočekává tento počet argumentů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů: {2}", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Žádné přetížení neočekává tento počet argumentů typů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů typů: {2}", - "No_overload_matches_this_call_2769": "Žádné přetížení neodpovídá tomuto volání.", - "No_type_could_be_extracted_from_this_type_node_95134": "Z tohoto uzlu typů nešlo extrahovat žádný typ.", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "V oboru pro sdruženou vlastnost {0} neexistuje žádná hodnota. Buď nějakou deklarujte, nebo poskytněte inicializátor.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Neabstraktní třída „{0}“ neimplementuje zděděného abstraktního člena {1} ze třídy „{2}“.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "V neabstraktní třídě „{0}“ chybí implementace pro následující členy „{1}“: {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "V neabstraktní třídě {0} chybí implementace pro následující členy „{1}“: {2} a {3} další(ch).", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Výraz neabstraktní třídy neimplementuje zděděný abstraktní člen {0} z třídy {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1} a {2} další(ch).", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Kontrolní výrazy jiné než null se dají používat jen v typescriptových souborech.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Deklaroval se tady parametr, který není jednoduchý.", - "Not_all_code_paths_return_a_value_7030": "Ne všechny cesty kódu vracejí hodnotu.", - "Not_all_constituents_of_type_0_are_callable_2756": "Ne všichni konstituenti typu {0} se dají zavolat.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Ne všichni konstituenti typu {0} se dají vytvořit.", - "Numbers_out_of_order_in_quantifier_1506": "Čísla ve kvantifikátoru jsou mimo pořadí.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Číselné literály s absolutními hodnotami, které se rovnají hodnotě 2^53 nebo větší, se nedají reprezentovat přesně jako celá čísla, protože jsou příliš velké.", - "Numeric_separators_are_not_allowed_here_6188": "Číselné oddělovače tady nejsou povolené.", - "Object_is_of_type_unknown_2571": "Objekt je typu Neznámý.", - "Object_is_possibly_null_2531": "Objekt je pravděpodobně null.", - "Object_is_possibly_null_or_undefined_2533": "Objekt je pravděpodobně null nebo undefined.", - "Object_is_possibly_undefined_2532": "Objekt je pravděpodobně undefined.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Literál objektu může specifikovat jenom známé vlastnosti a {0} v typu {1} neexistuje.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literál objektu může určovat jenom známé vlastnosti, ale {0} v typu {1} neexistuje. Chtěli jste zapsat {2}?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Vlastnost {0} literálu objektu má implicitně typ {1}.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekty, které obsahují sdružené vlastnosti, nelze odvodit pomocí možnosti „--isolatedDeclarations“.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekty, které obsahují přiřazení rozprostření, se nedají odvodit pomocí možnosti „--isolatedDeclarations“.", - "Octal_digit_expected_1178": "Očekává se osmičková číslice.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Osmičkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny. Pokud to bylo zamýšleno jako řídicí sekvence, použijte místo toho syntaxi „{0}“.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Osmičkové řídicí sekvence nejsou povoleny. Použijte syntaxi „{0}“.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Osmičkové literály nejsou povoleny. Použijte syntaxi „{0}“.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedna hodnota z „{0}.{1}“ je řetězec „{2}“ a druhá hodnota se považuje za neznámou číselnou hodnotu.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "V příkazu for...in se povoluje deklarovat jenom jednu proměnnou.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "V příkazu for...of se povoluje deklarovat jenom jednu proměnnou.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Klíčovým slovem new se dá volat jenom funkce void.", - "Only_ambient_modules_can_use_quoted_names_1035": "Názvy v uvozovkách můžou mít jenom ambientní moduly.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Spolu s --{0} se podporují jenom moduly amd a system.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Pomocí možnosti „--isolatedDeclarations“ lze odvodit pouze pole const.", - "Only_emit_d_ts_declaration_files_6014": "Bude vydávat jen soubory deklarací .d.ts.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Zahrňte do výstupu jenom soubory d.ts, nikoli soubory JavaScriptu.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Prostřednictvím klíčového slova super jsou přístupné jenom veřejné a chráněné metody základní třídy.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Operátor {0} se nedá použít na typ {1}.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Operátor {0} nejde použít u typů {1} a {2}.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "V rámci třídy znaků nelze kombinovat operátory. Místo toho je zabalte do vnořené třídy.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Při úpravách vyloučit projekt z kontroly odkazů ve více projektech.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Možnost „{0}={1}“ byla odebrána. Odeberte ji prosím z konfigurace.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Možnost „{0}={1}“ je zastaralá a v jazyce TypeScript {2} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{3}\"'.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu false nebo null.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu null.", - "Option_0_can_only_be_specified_on_command_line_6266": "Možnost „{0}“ lze zadat pouze na příkazovém řádku.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Možnost {0} jde použít jenom při zadání možnosti --inlineSourceMap nebo možnosti --sourceMap.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „moduleResolution“ nastavená na „node16“, „nodenext“ nebo „bundler“.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „modul“ nastavená na „preserve“, „commonjs“ nebo na „es2015“ a novější.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Když je možnost jsx nastavená na {1}, možnost {0} se nedá zadat.", - "Option_0_cannot_be_specified_with_option_1_5053": "Možnosti {0} a {1} nejde zadat zároveň.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Možnost {0} nejde zadat bez možnosti {1}.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Možnost {0} nejde zadat bez možnosti {1} nebo {2}.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Možnost „{0}“ byla odebrána. Odeberte ji prosím z konfigurace.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Možnost „{0}“ je zastaralá a v jazyce TypeScript {1} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{2}\"'.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Možnost „{0}“ je redundantní a nelze ji zadat s možností „{1}“.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Možnost allowImportingTsExtensions se dá použít jenom v případě, že je nastavená možnost noEmit, emitDeclarationOnly nebo rewriteRelativeImportExtensions.", - "Option_build_must_be_the_first_command_line_argument_6369": "Možnost --build musí být prvním argumentem příkazového řádku.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Možnost isolatedModules jde použít jenom v případě, že je poskytnutá možnost --module nebo že možnost target je ES2015 nebo vyšší verze.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Když je možnost „module“ nastavená na „{0}“, možnost „moduleResolution“ musí být nastavená na „{1}“ (nebo musí zůstat nezadaná).", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Když je možnost „moduleResolution“ nastavená na „{1}“, možnost „module“ musí být nastavená na „{0}“.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Když je povolená možnost „{0}“, možnost „preserveConstEnums“ se nedá zakázat.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Možnost project se na příkazovém řádku nedá kombinovat se zdrojovým souborem.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „moduleResolution“ nastavená na hodnotu „classic“.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „module“ nastavená na „none“, „system“ nebo „umd“.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Možnost „verbatimModuleSyntax“ nejde použít, pokud je možnost „module“ nastavená na „UMD“, „AMD“ nebo „System“.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Možnosti {0} a {1} nejde kombinovat.", - "Options_Colon_6027": "Možnosti:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Další výstupy", - "Output_Formatting_6256": "Formátování výstupu", - "Output_compiler_performance_information_after_building_6615": "Po sestavení generovat informace o výkonu kompilátoru.", - "Output_directory_for_generated_declaration_files_6166": "Výstupní adresář pro vygenerované soubory deklarace", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Výstupní soubor {0} se nesestavil ze zdrojového souboru {1}.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Do výstupu po sestavení zahrňte podrobnější informace o výkonu kompilátoru.", - "Overload_0_of_1_2_gave_the_following_error_2772": "Přetížení {0} z {1}, {2}, vrátilo následující chybu.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Signatury přetížení musí být všechny abstraktní nebo neabstraktní.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Signatury přetížení musí být všechny ambientní nebo neambientní.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Signatury přetížení musí být všechny exportované nebo neexportované.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Signatury přetížení musí být všechny nepovinné nebo povinné.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Signatury přetížení musí být všechny veřejné, privátní nebo chráněné.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Parametr {0} nemůže odkazovat na identifikátor {1} deklarovaný za ním.", - "Parameter_0_cannot_reference_itself_2372": "Parametr {0} nemůže odkazovat sám na sebe.", - "Parameter_0_implicitly_has_an_1_type_7006": "Parametr {0} má implicitně typ {1}.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Parametr {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z použití.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Parametr {0} není na stejné pozici jako parametr {1}.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Parametr {0} přístupového objektu má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Parametr {0} přístupového objektu má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Parametr {0} přístupového objektu má nebo používá privátní název {1}.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Parametr {0} signatury volání z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Parametr {0} signatury volání z exportovaného rozhraní má nebo používá privátní název {1}.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Parametr {0} konstruktoru z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Parametr {0} konstruktoru z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Parametr {0} konstruktoru z exportované třídy má nebo používá privátní název {1}.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Parametr {0} signatury konstruktoru z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Parametr {0} signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {1}.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Parametr {0} exportované funkce má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Parametr {0} exportované funkce má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Parametr {0} exportované funkce má nebo používá privátní název {1}.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Parametr {0} signatury indexu z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Parametr {0} signatury indexu z exportovaného rozhraní má nebo používá privátní název {1}.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Parametr {0} metody z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Parametr {0} metody z exportovaného rozhraní má nebo používá privátní název {1}.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Parametr {0} veřejné metody z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Parametr {0} veřejné metody z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Parametr {0} veřejné metody z exportované třídy má nebo používá privátní název {1}.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá privátní název {1}.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametr nemůže obsahovat otazník a inicializátor.", - "Parameter_declaration_expected_1138": "Očekává se deklarace parametru.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr má název, ale žádný typ. Měli jste na mysli {0}: {1}?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modifikátory parametrů se dají používat jen v typescriptových souborech.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá privátní název {1}.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá privátní název {1}.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Parsovat ve striktním režimu a generovat striktní používání pro každý zdrojový soubor", - "Part_of_files_list_in_tsconfig_json_1409": "Součást seznamu files v souboru tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Vzor {0} může obsahovat nanejvýš jeden znak * (hvězdička).", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Časování výkonu pro --diagnostics nebo --extendedDiagnostics nejsou v této relaci k dispozici. Nepovedlo se najít nativní implementace rozhraní Web Performance API.", - "Platform_specific_6912": "Specifická pro platformu", - "Prefix_0_with_an_underscore_90025": "Předpona {0} s podtržítkem", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Před všechny nesprávné deklarace vlastností přidejte declare.", - "Prefix_all_unused_declarations_with_where_possible_95025": "Přidat příponu _ ke všem nepoužívaným deklaracím tam, kde je to možné", - "Prefix_with_declare_95094": "Přidat předponu declare", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Zachovejte nepoužívané importované hodnoty ve výstupu JavaScriptu, který by se jinak odebral.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Vytiskněte si všechny soubory přečtené při kompilaci.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Vytiskněte si soubory přečtené při kompilaci, včetně důvodu jejich zahrnutí.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Umožňuje vypsat názvy souborů a důvod, proč jsou součástí kompilace.", - "Print_names_of_files_part_of_the_compilation_6155": "Část kompilace, při které se vypisují názvy souborů", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Vypsat názvy souborů, které jsou součástí kompilace, a pak ukončit zpracovávání", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Část kompilace, při které se vypisují názvy generovaných souborů", - "Print_the_compiler_s_version_6019": "Vytisknout verzi kompilátoru", - "Print_the_final_configuration_instead_of_building_1350": "Místo sestavení vypsat konečnou konfiguraci", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Po kompilaci vytiskněte názvy generovaných souborů.", - "Print_this_message_6017": "Vytisknout tuto zprávu", - "Private_accessor_was_defined_without_a_getter_2806": "Privátní přístupový objekt se definoval bez metody getter.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Privátní pole „{0}“ musí být deklarované v nadřazené třídě.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Privátní identifikátory se v deklaracích proměnných nepovolují.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Privátní identifikátory se mimo těla tříd nepovolují.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Privátní identifikátory jsou povolené jenom v tělech třídy a smí se používat jenom jako součást deklarace člena třídy nebo přístupu k vlastnosti, případně na levé straně výrazu in.", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Privátní identifikátory jsou dostupné jen při cílení na ECMAScript 2015 a novější.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Privátní identifikátory se nedají použít jako parametry.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "K privátnímu nebo chráněnému členu {0} se nedá přistupovat v parametru typu.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt {0} nejde sestavit, protože jeho závislost {1} obsahuje chyby.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Projekt {0} nejde sestavit, protože se nesestavila jeho závislost {1}.", - "Project_0_is_being_forcibly_rebuilt_6388": "Projekt {0} se nuceně vytváří znovu.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že soubor „{2}“ byl kořenovým souborem kompilace, ale už není.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt {0} je zastaralý, protože soubor buildinfo „{1}“ označuje, že program musí hlásit chyby.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "{0} projektu je zastaralý, protože soubor buildinfo {1} indikuje, že se některé změny nevygenerovaly.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že došlo ke změně v možnosti „compilerOptions“.", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt {0} je zastaralý, protože výstup {1} je starší než vstup {2}.", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt {0} je zastaralý, protože výstupní soubor {1} neexistuje.", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt {0} je zastaralý, protože jeho výstup se vygeneroval pomocí verze {1}, která se liší od aktuální verze {2}.", - "Project_0_is_up_to_date_6361": "Projekt {0} je aktuální.", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt {0} je aktuální, protože nejnovější vstup {1} je starší než výstup {2}.", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Projekt {0} je aktuální, ale musí aktualizovat časová razítka výstupních souborů, které jsou starší než vstupní soubory.", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt {0} je aktualizovaný soubory .d.ts z jeho závislostí.", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odkazy projektu nemůžou tvořit cyklický graf. Zjistil se cyklus: {0}", - "Projects_6255": "Projekty", - "Projects_in_this_build_Colon_0_6355": "Projekty v tomto sestavení: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Vlastnosti s modifikátorem accessor jsou k dispozici jen při cílení na ECMAScript 2015 a vyšší.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Vlastnost {0} nemůže mít inicializátor, protože je označená jako abstraktní.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Vlastnost {0} pochází ze signatury indexu, proto je zapotřebí k ní přistupovat pomocí ['{0}'].", - "Property_0_does_not_exist_on_type_1_2339": "Vlastnost {0} v typu {1} neexistuje.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Vlastnost {0} v typu {1} neexistuje. Chtěli jste místo toho přistoupit ke statickému členu {2}?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Vlastnost ‚{0}‘ neexistuje u typu ‚{1}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{2}‘ nebo novější.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Vlastnost „{0}“ pro typ „{1}“ neexistuje. Zkuste změnit možnost kompilátoru „lib“, aby zahrnovala „dom“.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Vlastnost „{0}“ nemá žádný inicializátor a není jednoznačně přiřazena ve statickém bloku třídy.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Vlastnost {0} nemá žádný inicializátor a není jednoznačně přiřazena v konstruktoru.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt get nemá anotaci návratového typu.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt set nemá anotaci parametrového typu.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Vlastnost {0} má implicitně typ any, ale je možné, že lepší typ pro jeho přístupový objekt get by se vyvodil z použití.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Vlastnost {0} má implicitně typ any, ale je možné, že lepší typ pro jeho přístupový objekt set by se vyvodil z použití.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Vlastnost {0} v typu {1} nejde přiřadit ke stejné vlastnosti v základním typu {2}.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Vlastnost {0} v typu {1} nejde přiřadit typu {2}.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Vlastnost {0} v typu {1} odkazuje na jiného člena, ke kterému není možné získat přístup z typu {2}.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "Deklaruje se vlastnost {0}, ale její hodnota se vůbec nečte.", - "Property_0_is_incompatible_with_index_signature_2530": "Vlastnost {0} není kompatibilní se signaturou indexu.", - "Property_0_is_missing_in_type_1_2324": "Vlastnost {0} v typu {1} chybí.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Vlastnost {0} chybí v typu {1}, ale vyžaduje se v typu {2}.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Vlastnost {0} není přístupná mimo třídu {1}, protože má privátní identifikátor.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Vlastnost {0} je v typu {1} nepovinná, ale vyžaduje se v typu {2}.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "Vlastnost {0} je privátní a dostupná jenom ve třídě {1}.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Vlastnost {0} je v typu {1} privátní, ale v typu {2} ne.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Vlastnost {0} je chráněná a dá se k ní přistupovat jen přes instanci třídy {1}. Toto je instance třídy {2}.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Vlastnost {0} je chráněná a je dostupná jenom ve třídě {1} a jejích podtřídách.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Vlastnost {0} je chráněná, ale typ {1} není třída odvozená od {2}.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Vlastnost {0} je v typu {1} chráněná, ale v typu {2} veřejná.", - "Property_0_is_used_before_being_assigned_2565": "Vlastnost {0} je použitá před přiřazením.", - "Property_0_is_used_before_its_initialization_2729": "Vlastnost {0} se používá dříve, než se inicializuje.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Zdá se, že vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Vlastnost {0} rozšířeného atributu JSX nejde přiřadit cílové vlastnosti.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Vlastnost „{0}“ exportovaného anonymního typu třídy nesmí být privátní ani chráněná.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Vlastnost {0} exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Vlastnost {0} exportovaného rozhraní má nebo používá privátní název {1}.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Vlastnost {0} typu {1} se nedá přiřadit k {2} typu indexu {3}.", - "Property_0_was_also_declared_here_2733": "Vlastnost {0} se deklarovala i tady.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Vlastnost {0} přepíše základní vlastnost v {1}. Pokud je to záměr, přidejte inicializátor. Jinak přidejte modifikátor declare nebo odeberte redundantní deklaraci.", - "Property_assignment_expected_1136": "Očekává se přiřazení vlastnosti.", - "Property_destructuring_pattern_expected_1180": "Očekává se vzor destruktoru vlastnosti.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Vlastnost musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", - "Property_or_signature_expected_1131": "Očekává se vlastnost nebo podpis.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Hodnota vlastnosti může být jenom řetězcový literál, číselný literál, true, false, null, literál objektu nebo literál pole.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Při cílení na „ES5“ poskytněte plnou podporu iterovatelných proměnných v příkazu „for-of“, rozšíření a destrukturování.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Veřejná metoda {0} z exportované třídy má nebo používá privátní název {1}.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Veřejná vlastnost {0} exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Veřejná vlastnost {0} exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Veřejná vlastnost {0} exportované třídy má nebo používá privátní název {1}.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Veřejná statická metoda {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Veřejná statická metoda {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Veřejná statická metoda {0} z exportované třídy má nebo používá privátní název {1}.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Veřejná statická vlastnost {0} exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Veřejná statická vlastnost {0} exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Veřejná statická vlastnost {0} exportované třídy má nebo používá privátní název {1}.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Kvalifikovaný název {0} se nepovoluje bez @param {object} {1} na začátku.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Když se parametr funkce nepřečte, nahlaste chybu.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Vyvolat chybu u výrazů a deklarací s implikovaným typem any", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Vyvolá chybu u výrazů this s implikovaným typem any.", - "Range_out_of_order_in_character_class_1517": "Rozsah ve třídě znaků je mimo pořadí.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Při opětovném exportu typu s povolenou možností „{0}“ je nutné použít možnost „export type“.", - "React_components_cannot_include_JSX_namespace_names_2639": "Komponenty React nemůžou obsahovat názvy oborů názvů JSX.", - "Recommended_Options_6294": "Doporučené možnosti", - "Redirect_output_structure_to_the_directory_6006": "Přesměrování výstupní struktury do adresáře", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Snižte počet projektů, které TypeScript načítá automaticky.", - "Referenced_project_0_may_not_disable_emit_6310": "Odkazovaný projekt {0} nemůže zakazovat generování.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Odkazovaný projekt {0} musí mít nastavení \"composite\": true.", - "Referenced_via_0_from_file_1_1400": "Odkazováno přes {0} ze souboru {1}", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Zvažte přidání přípony do cesty importu.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Měli jste na mysli „{0}“?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Odeberte z procesu sledování seznam adresářů.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Ze zpracování režimu sledování odeberte seznam souborů.", - "Remove_all_unnecessary_override_modifiers_95163": "Odebrat všechny nepotřebné modifikátory override", - "Remove_all_unnecessary_uses_of_await_95087": "Odebrat všechna nepotřebná použití výrazu await", - "Remove_all_unreachable_code_95051": "Odebrat veškerý nedosažitelný kód", - "Remove_all_unused_labels_95054": "Odebrat všechny nepoužívané popisky", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Odeberte složené závorky ze všech těl funkcí šipek, u kterých dochází k problémům.", - "Remove_braces_from_arrow_function_95060": "Odebrat složené závorky z funkce šipky", - "Remove_braces_from_arrow_function_body_95112": "Odebrat složené závorky z těla funkce šipky", - "Remove_import_from_0_90005": "Odebrat import z {0}", - "Remove_override_modifier_95161": "Odebrat modifikátor override", - "Remove_parentheses_95126": "Odebrat závorky", - "Remove_template_tag_90011": "Odebrat značku šablonu", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Odeberte limit 20 MB pro celkovou velikost zdrojového kódu souborů JavaScriptu na jazykovém serveru TypeScriptu.", - "Remove_type_from_import_declaration_from_0_90055": "Odebrat „type“ z deklarace importu z „{0}“", - "Remove_type_from_import_of_0_from_1_90056": "Odebrat „type“ z importu {0} z „{1}“", - "Remove_type_parameters_90012": "Odebrat parametry typů", - "Remove_unnecessary_await_95086": "Odebrat nepotřebné výrazy await", - "Remove_unreachable_code_95050": "Odebrat nedosažitelný kód", - "Remove_unused_declaration_for_Colon_0_90004": "Odebrat nepoužívané deklarace pro {0}", - "Remove_unused_declarations_for_Colon_0_90041": "Odebrat nepoužívané deklarace pro {0}", - "Remove_unused_destructuring_declaration_90039": "Odebrat nepoužívané destrukční deklarace", - "Remove_unused_label_95053": "Odebrat nepoužitý popisek", - "Remove_variable_statement_90010": "Odebrat příkaz proměnné", - "Rename_param_tag_name_0_to_1_95173": "Přejmenovat značku @param {0} na {1}", - "Replace_0_with_Promise_1_90036": "Místo {0} použijte Promise<{1}>", - "Replace_all_unused_infer_with_unknown_90031": "Nahradit všechny nepoužívané příkazy infer za unknown", - "Replace_import_with_0_95015": "Nahradí import použitím: {0}.", - "Replace_infer_0_with_unknown_90030": "Nahradit infer {0} za unknown", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Oznámí se chyba, když některé cesty kódu ve funkci nevracejí hodnotu.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Oznámí se chyby v případech fallthrough v příkazu switch.", - "Report_errors_in_js_files_8019": "Ohlásit chyby v souborech .js", - "Report_errors_on_unused_locals_6134": "Umožňuje nahlásit chyby u nevyužitých místních hodnot.", - "Report_errors_on_unused_parameters_6135": "Umožňuje nahlásit chyby u nevyužitých parametrů.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Vyžadujte u exportů dostatečnou anotaci, aby ostatní nástroje mohly triviálně generovat soubory deklarací.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Vyžadovat, aby nedeklarované vlastnosti ze signatur indexů používaly přístupy k elementům", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Požadované parametry typu nemůžou být až za volitelnými parametry typu.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Překlad pro modul {0} se našel v mezipaměti umístění {1}.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Překlad pro direktivu odkazu na typ {0} se našel v mezipaměti umístění {1}.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Překlad nerelativního názvu selhal; zkoušíme to se zakázanými moderními funkcemi překladu Node, abychom zjistili, jestli není potřeba aktualizovat konfiguraci knihovny npm.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Překlad nerelativního názvu selhal. Zkoušíme to s možností „--moduleResolution bundler“, abychom zjistili, jestli projekt nepotřebuje aktualizaci konfigurace.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "keyof překládejte jen na názvy vlastností s hodnotami typu string (ne čísla ani symboly).", - "Resolved_under_condition_0_6414": "Vyřešeno za podmínky „{0}“.", - "Resolving_in_0_mode_with_conditions_1_6402": "Řešení v režimu {0} s podmínkami {1}.", - "Resolving_module_0_from_1_6086": "======== Překládá se modul {0} z {1}. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Překládá se název modulu {0} relativní k základní adrese URL {1}–{2}.", - "Resolving_real_path_for_0_result_1_6130": "Překládá se skutečná cesta pro {0}, výsledek {1}.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Překládá se direktiva odkazu na typ {0} obsahující soubor {1}. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář {2}. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář není nastavený. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář {1}. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář není nastavený. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Překlad direktivy odkazu na typ pro program, který zadává vlastní hodnoty typeRoot, s přeskočením vyhledávání ve složce „node_modules“.", - "Resolving_with_primary_search_path_0_6121": "Probíhá překlad pomocí primární cesty hledání {0}.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Parametr rest {0} implicitně obsahuje typ any[].", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest {0} má implicitně typ any[], ale je možné, že lepší typ by se vyvodil z použití.", - "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest se dají vytvářet jenom z typů object.", - "Return_type_annotation_circularly_references_itself_2577": "Anotace návratového typu se cyklicky odkazuje sama na sebe.", - "Return_type_must_be_inferred_from_a_function_95149": "Návratový typ musí být odvozen z funkce.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá privátní název {0}.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Návratový typ signatury konstruktoru z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Návratový typ signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {0}.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Návratový typ signatury konstruktoru musí jít přiřadit k typu instance třídy.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Návratový typ exportované funkce má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Návratový typ exportované funkce má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Návratový typ exportované funkce má nebo používá privátní název {0}.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Návratový typ signatury indexu z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Návratový typ signatury indexu z exportovaného rozhraní má nebo používá privátní název {0}.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Návratový typ metody z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Návratový typ metody z exportovaného rozhraní má nebo používá privátní název {0}.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá privátní název {1}.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Návratový typ veřejné metody z exportované třídy má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Návratový typ veřejné metody z exportované třídy má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Návratový typ veřejné metody z exportované třídy má nebo používá privátní název {0}.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá privátní název {1}.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z privátního modulu {1}.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Návratový typ veřejné statické metody z exportované třídy má nebo používá privátní název {0}.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Opětovné použití překladu modulu {0} z {1} starého programu se nevyřešilo.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu se nevyřešilo.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.", - "Rewrite_all_as_indexed_access_types_95034": "Přepsat vše jako indexované typy přístupu", - "Rewrite_as_the_indexed_access_type_0_90026": "Přepsat jako indexovaný typ přístupu {0}", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Přepište přípony souborů .ts, .tsx, .mts a .cts v relativních cestách importu na jejich javascriptový ekvivalent ve výstupních souborech.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Pravý operand ?? je nedostupný, protože levý operand nemá nikdy hodnotu null.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nedá se určit kořenový adresář, přeskakují se primární cesty hledání.", - "Root_file_specified_for_compilation_1427": "Kořenový soubor, který se zadal pro kompilaci", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATEGIE", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Uložte soubory .tsbuildinfo, aby byla možná přírůstková kompilace projektů.", - "Saw_non_matching_condition_0_6405": "Byla zjištěna neshodná podmínka {0}.", - "Scoped_package_detected_looking_in_0_6182": "Zjištěn balíček v oboru, hledání v: {0}", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Vyhledávají se záložní rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Vyhledávají se upřednostňovaná rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Voz také https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "Výběr nepředstavuje platný příkaz (platné příkazy).", - "Selection_is_not_a_valid_type_node_95133": "Výběr není platným uzlem typů.", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Nastavte verzi jazyka JavaScript pro generovaný JavaScript a zahrňte deklarace kompatibilních knihoven.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Nastavte jazyk posílání zpráv z TypeScriptu. Toto nastavení neovlivní generování.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Nastavte možnost module v konfiguračním souboru na {0}.", - "Set_the_newline_character_for_emitting_files_6659": "Nastavte pro generované soubory znak nového řádku.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Nastavte možnost target v konfiguračním souboru na {0}.", - "Setters_cannot_return_a_value_2408": "Metody setter nemůžou vracet hodnotu.", - "Show_all_compiler_options_6169": "Zobrazí všechny možnosti kompilátoru.", - "Show_diagnostic_information_6149": "Zobrazí diagnostické informace.", - "Show_verbose_diagnostic_information_6150": "Zobrazí podrobné diagnostické informace.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Zobrazit, co by se sestavilo (nebo odstranilo, pokud je zadaná možnost --clean)", - "Signature_0_must_be_a_type_predicate_1224": "Signatura {0} musí být predikát typu.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklarace signatur se dají používat jen v typescriptových souborech.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Přeskočí vytváření podřízených projektů při chybě v nadřazeném projektu.", - "Skip_type_checking_all_d_ts_files_6693": "Přeskočte kontrolu typů ve všech souborech .d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Při kontrole typů vynechte soubory .d.ts zahrnuté do TypeScriptu.", - "Skip_type_checking_of_declaration_files_6012": "Přeskočit kontrolu typu souborů deklarace", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Sestavení projektu {0} se přeskakuje, protože jeho závislost {1} obsahuje chyby.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Sestavení projektu {0} se přeskakuje, protože se nesestavila jeho závislost {1}.", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Přeskakuje se modul „{0}“, který vypadá jako absolutní identifikátor URI. Cílové typy souborů: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}.", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none.", - "Source_has_0_element_s_but_target_allows_only_1_2619": "Zdroj má následující počet elementů, ale cíl jich povoluje jen {1}: {0}", - "Source_has_0_element_s_but_target_requires_1_2618": "Zdroj má následující počet elementů, ale cíl jich vyžaduje {1}: {0}", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Zdroj nenabízí v cíli pro element required na pozici {0} žádnou shodu.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Zdroj nenabízí v cíli pro element variadic na pozici {0} žádnou shodu.", - "Specify_ECMAScript_target_version_6015": "Zadejte cílovou verzi ECMAScriptu.", - "Specify_JSX_code_generation_6080": "Zadejte generování kódu JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Zadejte soubor, který sloučí všechny výstupy do jediného souboru JavaScriptu. Pokud má „declaration“ pravdivou hodnotu,, určete soubor, který sloučí všechny výstupní soubory .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Zadejte seznam vzorů glob, které odpovídají souborům zahrnutým do kompilace.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Zadejte seznam zahrnutých pluginů jazykových služeb.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Zadejte sadu souborů spojených deklaračních knihoven, které popisují cílové běhové prostředí.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Zadejte sadu položek, které se při importu znovu namapují na další nalezená místa.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Zadejte pole objektů, které určují cesty pro projekty. Používá se v odkazech na projekt.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Zadejte výstupní složku pro všechny generované soubory.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Zadejte chování generování nebo kontroly pro importy, které se používají jen pro typy.", - "Specify_file_to_store_incremental_compilation_information_6380": "Zadejte soubor, do kterého se uloží informace o přírůstkové kompilaci.", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Zadejte, jak TypeScript v daném specifikátoru modulu najde soubor.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Zadejte, jak sledovat adresáře v systémech, které nemají funkci rekurzivního sledování souborů.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Zadejte, jak má fungovat režim sledování TypeScriptu.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Zadejte soubory knihovny, které se mají zahrnout do kompilace.", - "Specify_module_code_generation_6016": "Určete generování kódu modulu.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Zadejte specifikátor modulu, který se použije k naimportování továrních funkcí JSX při použití „jsx: react-jsx“.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Zadejte více složek, které budou figurovat jako „node_modules/@types“.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Zadejte jednu nebo více cest nebo jeden či více odkazů na moduly uzlů se základními konfiguračními soubory, ze kterých se dědí nastavení.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Zadejte možnosti automatického získávání deklaračních souborů.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Zadejte strategii pro vytvoření sledování načítání, když se ho nepovede vytvořit pomocí událostí souborového systému: FixedInterval (výchozí), PriorityInterval, DynamicPriority, FixedChunkSize", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Zadejte strategii pro sledování adresáře na platformách, které nepodporují nativně rekurzivní sledování: UseFsEvents (výchozí), FixedPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Zadejte strategii pro sledování souboru: FixedPollingInterval (výchozí), PriorityPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling, UseFsEvents, UseFsEventsOnParentDirectory", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Zadejte odkaz na fragment JSX, který se použije pro fragmenty při cíleném generování React JSX, např. „React.Fragment“ nebo „Fragment“.", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Zadejte funkci objektu pro vytváření JSX, která se použije při zaměření na generování JSX react, např. React.createElement nebo h.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Zadejte funkci objektu pro vytváření JSX použitou při cílení na generování React JSX, např. React.createElement nebo h.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Zadejte funkci objektu pro vytváření fragmentů JSX, která se použije při cílení na generování JSX react se zadanou možností kompilátoru jsxFactory, například Fragment.", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Zadejte základní adresář, který se použije k řešení názvů modulů, které nejsou relativní.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Zdejte sekvenci konce řádku, která se má použít při generování souborů: CRLF (dos) nebo LF (unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Zadejte umístění, ve kterém by měl ladicí program najít soubory TypeScript namísto umístění zdroje.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Zadejte umístění, ve kterém by měl ladicí program najít soubory mapy namísto generovaných umístění.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Zadejte maximální hloubku složky, která se použije pro kontrolu souborů JavaScriptu z node_modules. Platí pouze pro allowJs.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Zadejte specifikátor modulu, který se má použít k importu továrních funkcí ‚jsx‘ a ‚jsxs‘ např. z funkce react.", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Zadejte objekt vyvolaný pro createElement. To platí pouze při cílení na generování JSX react.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Zadejte výstupní adresář pro generované deklarační soubory.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Zadejte cestu pro soubor přírůstkové kompilace .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Zadejte kořenový adresář vstupních souborů. Slouží ke kontrole struktury výstupního adresáře pomocí --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Zadejte kořenovou složku se zdrojovými soubory.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Zadejte pro ladicí programy kořenovou cestu, kde najdou referenční zdrojový kód.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Zadejte názvy typů balíčků, které se zahrnou, i když na ně neodkazuje zdrojový soubor.", - "Specify_what_JSX_code_is_generated_6646": "Zadejte, jaký kód JSX se vygeneruje.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Zadejte, jak má sledovací proces postupovat, když systému dojdou nativní sledovací procesy souborů.", - "Specify_what_module_code_is_generated_6657": "Určete, pro jaký modul se kód generuje.", - "Split_all_invalid_type_only_imports_1367": "Rozdělit všechny neplatné importy, při kterých se importují jen typy", - "Split_into_two_separate_import_declarations_1366": "Rozdělit na dvě samostatné deklarace importu", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operátor rozšíření ve výrazech new je dostupný jenom při cílení na verzi ECMAScript 5 a vyšší.", - "Spread_types_may_only_be_created_from_object_types_2698": "Typy spread se dají vytvářet jenom z typů object.", - "Starting_compilation_in_watch_mode_6031": "Spouští se kompilace v režimu sledování...", - "Statement_expected_1129": "Očekává se příkaz.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Příkazy se nepovolují v ambientních kontextech.", - "Static_members_cannot_reference_class_type_parameters_2302": "Statické členy nemůžou odkazovat na parametry typu třídy.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Statická vlastnost {0} je v konfliktu s předdefinovanou vlastností Function.{0} funkce konstruktoru {1}.", - "Stricter_Typechecking_Options_6292": "Přísnější možnosti kontroly typů", - "String_literal_expected_1141": "Očekává se řetězcový literál.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Názvy importu a exportu řetězcového literálu se nepodporují, pokud je příznak „--module“ nastavený na „es2015“ nebo „es2020“.", - "String_literal_with_double_quotes_expected_1327": "Očekával se řetězcový literál s dvojitými uvozovkami.", - "Style_Options_6293": "Možnosti stylu", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylizujte chyby a zprávy pomocí barev a kontextu (experimentální).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "V případě znaménka minus musí být uvedeny příznaky dílčích vzorů.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Deklarace následných vlastností musí obsahovat stejný typ. Vlastnost {0} musí být typu {1}, ale tady je typu {2}.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Deklarace následných proměnných musí obsahovat stejný typ. Proměnná {0} musí být typu {1}, ale tady je typu {2}.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Nahrazení {0} za vzor {1} má nesprávný typ, očekával se typ string, obdržený je {2}.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Nahrazení {0} ve vzoru {1} může obsahovat maximálně jeden znak * (hvězdička).", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Náhrady vzoru {0} by měly být pole.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Nahrazení vzoru {0} nesmí být prázdné pole.", - "Successfully_created_a_tsconfig_json_file_6071": "Soubor tsconfig.json se úspěšně vytvořil.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Volání pomocí super se nepovolují mimo konstruktory a ve funkcích vnořených v konstruktorech.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Potlačit nadměrné kontroly vlastností pro literály objektů", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Potlačit chyby noImplicitAny u objektů indexování bez signatur indexu", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Při indexování objektů bez podpisů indexování potlačte chyby „noImplicitAny“.", - "Switch_each_misused_0_to_1_95138": "Přepnout každé chybně použité {0} na {1}", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronně volejte zpětná volání a aktualizujte stav sledování adresářů i u platforem, které nativně nepodporují rekurzivní sledování.", - "Syntax_Colon_0_6023": "Syntaxe: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Značka {0} očekává určitý minimální počet argumentů ({1}), ale objekt pro vytváření JSX {2} jich poskytuje maximálně {3}.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Označené výrazy šablony se v nepovinném řetězu nepovolují.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Cíl povoluje jen určitý počet elementů ({0}), ale zdroj jich může mít více.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Cíl vyžaduje určitý počet elementů ({0}), ale zdroj jich může mít méně.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Cílový podpis poskytuje příliš málo argumentů. Očekávalo se {0} nebo více, ale bylo obdrženo {1}.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modifikátor {0} se dá používat jen v typescriptových souborech.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Operátor {0} nejde použít u typu symbol.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operátor {0} není u logických typů povolený. Můžete ale použít {1}.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Vlastnost {0} asynchronního iterátoru musí být metoda.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "Vlastnost {0} iterátoru musí být metoda.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ Object se dá přiřadit jen k malému počtu dalších typů. Nechtěli jste místo toho použít typ any?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Příznaky Unicode (u) a Unicode Sets (v) nelze nastavit současně.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Funkce s šipkou v ES5 nemůže odkazovat na objekt „arguments“. Zvažte použití standardního výrazu funkce.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "V ES5 se na objekt „arguments“ nedá odkazovat v asynchronní funkci nebo metodě. Zvažte možnost použít standardní funkci nebo metodu.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Tělo příkazu if nemůže být prázdný příkaz.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Volání by pro tuto implementaci proběhlo úspěšně, ale signatury implementace pro přetížení nejsou externě k dispozici.", - "The_character_set_of_the_input_files_6163": "Znaková sada vstupních souborů", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Obsahující funkce šipky zachytává globální hodnotu pro this.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Text obsahující funkce nebo modulu je pro analýzu toku řízení příliš dlouhý.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Aktuální soubor je modul CommonJS a na nejvyšší úrovni nemůže používat await.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Aktuální soubor je modul CommonJS, jehož importy vytvoří volání require. Odkazovaný soubor je však modul ECMAScript a nelze ho importovat pomocí příkazu require. Raději zvažte vytvoření dynamického volání import(\"{0}\").", - "The_current_host_does_not_support_the_0_option_5001": "Aktuální hostitel nepodporuje možnost {0}.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Deklarace {0}, kterou jste pravděpodobně chtěli použít, je definovaná tady.", - "The_declaration_was_marked_as_deprecated_here_2798": "Deklarace se tady označila jako zastaralá.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Očekávaný typ pochází z vlastnosti {0}, která je deklarovaná tady v typu {1}.", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Očekávaný typ pochází z návratového typu této signatury.", - "The_expected_type_comes_from_this_index_signature_6501": "Očekávaný typ pochází z této signatury indexu.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Výraz přiřazení exportu musí být identifikátor nebo kvalifikovaný název v ambientním kontextu.", - "The_file_is_in_the_program_because_Colon_1430": "Soubor se nachází v programu, protože:", - "The_files_list_in_config_file_0_is_empty_18002": "Seznam files v konfiguračním souboru {0} je prázdný.", - "The_first_export_default_is_here_2752": "První výchozí nastavení exportu je tady.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "První parametr metody then příslibu musí být zpětné volání.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Globální typ JSX.{0} by neměl mít více než jednu vlastnost.", - "The_implementation_signature_is_declared_here_2750": "Signatura implementace se deklarovala tady.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Meta-vlastnost import.meta není povolena v souborech, které se sestaví do výstupu CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Metavlastnost import.meta je povolena pouze v případě, že možnost --module je es2020, es2022, esnext, system, node16, node18, node20 nebo nodenext.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Odvozený typ {0} se nedá pojmenovat bez odkazu na {1}. Pravděpodobně to nebude přenosné. Vyžaduje se anotace typu.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Odvozený typ {0} se odkazuje na typ s cyklickou strukturou, která se nedá triviálně serializovat. Musí se použít anotace typu.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Odvozený typ {0} odkazuje na nepřístupný typ {1}. Musí se použít anotace typu.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Odvozený typ tohoto uzlu přesahuje maximální délku, kterou kompilátor může serializovat. Je potřeba zadat explicitní anotaci typu.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicializátor deklarace „using“ musí být buď objekt s metodou „[Symbol.dispose]()“, nebo musí mít hodnotu „null“ nebo „undefined“.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicializátor deklarace „await using“ musí být buď objekt s metodou „[Symbol.asyncDispose]()“ nebo „[Symbol.dispose]()“, nebo musí mít hodnotu „null“ nebo „undefined“.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Průnik {0} se omezil na never, protože vlastnost {1} existuje v několika konstituentech a v některých z nich je privátní.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Průnik {0} se omezil na never, protože vlastnost {1} má v některých konstituentech konfliktní typy.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Klíčové slovo intrinsic se dá použít jenom k deklaraci vnitřních typů poskytovaných kompilátorem.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Aby bylo možné použít fragmenty JSX s možností kompilátoru jsxFactory, je třeba zadat možnost kompilátoru jsxFragmentFactory.", - "The_last_overload_gave_the_following_error_2770": "Poslední přetížení vrátilo následující chybu.", - "The_last_overload_is_declared_here_2771": "Poslední přetížení je deklarované tady.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Levá strana příkazu for...in nemůže být destrukturačním vzorem.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Levá strana příkazu „for...in“ nemůže být deklarace „using“.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Levá strana příkazu „for...in“ nemůže být deklarace „await using“.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Levá strana příkazu for...in nemůže používat anotaci typu.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Levá strana příkazu for...in nemůže představovat přístup k nepovinné vlastnosti.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Levá strana příkazu for..n musí být proměnná nebo přístup k vlastnosti.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Levá strana příkazu for...in musí být typu string nebo any.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Levá strana příkazu for...of nemůže používat anotaci typu.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Levá strana příkazu for...of nemůže představovat přístup k nepovinné vlastnosti.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Levá strana příkazu for...of nemůže být async.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Levá strana příkazu for...of musí být proměnná nebo přístup k vlastnosti.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Levá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Levá strana výrazu přiřazení nemůže představovat přístup k nepovinné vlastnosti.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Levá strana výrazu přiřazení musí být proměnná nebo přístup k vlastnosti.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Levá strana výrazu „instanceof“ musí být přiřaditelná k prvnímu argumentu metody „[Symbol.hasInstance]“ na pravé straně.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Levá strana výrazu instanceof musí být typu any, typem objektu nebo parametrem typu.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Národní prostředí, které se používá při zobrazování zpráv uživateli (třeba cs-CZ)", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maximální hloubka závislostí pro vyhledávání pod node_modules a načítání javascriptových souborů", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Operandem operátoru delete nemůže být privátní identifikátor.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Operandem operátoru delete nemůže být vlastnost určená jen pro čtení.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Operandem operátoru delete musí být odkaz na vlastnost.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "Operand operátoru delete musí být nepovinný.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Operandem operátoru inkrementace nebo dekrementace nemůže být přístup k nepovinné vlastnosti.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Operand operátoru inkrementace nebo dekrementace musí být proměnná nebo přístup k vlastnosti.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Parser očekával, že najde token {1}, který by odpovídal tokenu {0} tady.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování exportu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování importu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "K vlastnosti {0} se nedá přistupovat v typu {1} v této třídě, protože ho překrývá jiný privátní identifikátor se stejným zápisem.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Návratový typ funkce dekorátoru parametru funkce musí být void nebo any.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Návratový typ funkce dekorátoru vlastnosti musí být void nebo any.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Návratový typ asynchronní funkce musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise. Zamýšleli jste napsat Promise<{0}>?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Pravá strana příkazu for...in musí být typu any, typem objektu nebo parametrem typu, ale tady má typ {0}.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Pravá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Pravá strana výrazu „instanceof“ musí být typ „any“, třída, funkce nebo jiný typ, který se dá přiřadit k typu rozhraní „Function“, nebo typu objektu s metodou „Symbol.hasInstance“.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Pravá strana výrazu „instanceof“ nesmí být výrazem vytvoření instance.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "Kořenová hodnota souboru {0} musí být objekt.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává alespoň {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "Překrývající deklarace {0} je definovaná tady.", - "The_signature_0_of_1_is_deprecated_6387": "Signatura {0} pro {1} je zastaralá.", - "The_specified_path_does_not_exist_Colon_0_5058": "Zadaná cesta neexistuje: {0}", - "The_tag_was_first_specified_here_8034": "Značka se poprvé zadala tady.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Cíl přiřazení rest objektu nemůže představovat přístup k nepovinné vlastnosti.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Cílem přiřazení zbytku objektu musí být proměnná nebo přístup k vlastnosti.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Kontext this typu {0} se nedá přiřadit k možnosti this metody typu {1}.", - "The_this_types_of_each_signature_are_incompatible_2685": "Typy this jednotlivých signatur nejsou kompatibilní.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ {0} je readonly a nedá se přiřadit k neměnnému typu {1}.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Pokud se v příkazu k exportu používá „export type“, nemůžete v pojmenovaném exportu použít modifikátor „type“.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Pokud se v příkazu k importu používá „import type“, nemůžete v pojmenovaném importu použít modifikátor „type“.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Uzel tohoto typu nejde serializovat, protože nejde serializovat jeho vlastnost {0}.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ vrácený metodou {0}() asynchronního iterátoru musí být příslib pro typ s vlastností value.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ vrácený metodou {0}() iterátoru musí obsahovat vlastnost value.", - "The_types_of_0_are_incompatible_between_these_types_2200": "Typy {0} nejsou mezi těmito typy kompatibilní.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Typy vrácené metodou {0} nejsou mezi těmito typy kompatibilní.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "Hodnota „{0}“ se tady nedá použít.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklarace proměnné příkazu for...in nemůže obsahovat inicializátor.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklarace proměnné příkazu for...of nemůže obsahovat inicializátor.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Příkaz with není podporovaný. Všechny symboly s blokem with budou typu any.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "V „{0}“ jsou typy, ale tento výsledek se v aktuálním nastavení „moduleResolution“ nepovedlo vyřešit. Zvažte aktualizaci na „node16“, „nodenext“ nebo „bundler“.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "V „{0}“ jsou typy, ale tento výsledek se při respektování pole „exports“ souboru package.json nepodařilo vyřešit. Knihovna „{1}“ bude pravděpodobně muset aktualizovat svůj soubor package.json nebo typings.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "V tomto regulárním výrazu není žádná zachycující skupina s názvem „{0}“.", - "There_is_nothing_available_for_repetition_1507": "Není k dispozici nic pro opakování.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Tato značka JSX vyžaduje, aby objekt pro vytváření fragmentů {0} byl v oboru, ale nepovedlo se ho najít.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Tato značka JSX vyžaduje, aby existovala cesta k modulu {0}, ale žádná nebyla nalezena. Ujistěte se, že máte nainstalované typy pro příslušný balíček.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Vlastnost {0} této značky JSX očekává jeden podřízený objekt typu {1}, ale poskytlo se jich více.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Vlastnost {0} této značky JSX očekává typ {1}, který vyžaduje více podřízených objektů, ale zadal se jen jeden.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu nejsou žádné zachytávací skupiny.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu jsou pouze {0} zachytávací skupiny.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Tento binární výraz nikdy nemá hodnotu null. Nechybí vám závorky?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tento znak nelze uvozovat v regulárním výrazu.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Toto porovnání se zdá být neúmyslné, protože typy {0} a {1} se nijak nepřekrývají.", - "This_condition_will_always_return_0_2845": "Tato podmínka vždy vrátí {0}.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Tato podmínka vždy vrátí „{0}“, protože JavaScript porovnává objekty pomocí odkazu, nikoli hodnoty.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Tato podmínka vždy vrátí hodnotu True, protože tato {0} je vždy definovaná.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Tato podmínka vždy vrátí hodnotu True, protože tato funkce je vždy definována. Chtěli jste ji místo toho nazvat?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Tato funkce konstruktoru se může převést na deklaraci třídy.", - "This_expression_is_always_nullish_2871": "Tento výraz má vždy hodnotu null.", - "This_expression_is_never_nullish_2881": "Tento výraz nikdy nemá hodnotu null.", - "This_expression_is_not_callable_2349": "Tento výraz se nedá zavolat.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tento výraz se nedá volat, protože je to přístupový objekt get. Nechtěli jste ho použít bez ()?", - "This_expression_is_not_constructable_2351": "Tento výraz se nedá vytvořit.", - "This_file_already_has_a_default_export_95130": "Tento soubor už má výchozí export.", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Přepsání této cesty importu není bezpečné, protože cesta se překládá na jiný projekt a relativní cesta mezi výstupními soubory projektů není stejná jako relativní cesta mezi příslušnými vstupními soubory.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Tento import používá k překladu na vstupní soubor TypeScript rozšíření {0}, ale během generování se nepřepíše, protože se nejedná o relativní cestu.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Toto je deklarace, která se rozšiřuje. Zvažte možnost přesunout rozšiřující deklaraci do stejného souboru.", - "This_kind_of_expression_is_always_falsy_2873": "Tento druh výrazu je vždy nepravdivý.", - "This_kind_of_expression_is_always_truthy_2872": "Tento druh výrazu je vždy pravdivý.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Toto je možné převést na asynchronní funkci.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože třída {0}, která ho obsahuje, nerozšiřuje jinou třídu.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože jeho název je dynamický.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Tento člen nemůže mít modifikátor override, protože třída {0}, která ho obsahuje, nerozšiřuje jinou třídu.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Tento člen nemůže mít modifikátor override, protože jeho název je dynamický.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Tento člen musí mít komentář JSDoc se značkou @override, protože přepisuje člen v základní třídě {0}.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Tento člen musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Tento člen musí mít modifikátor override, protože přepisuje abstraktní metodu, která je deklarovaná v základní třídě {0}.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Na tento modul je možné se pomocí importů nebo exportů ECMAScript odkazovat jen tak, že se zapne příznak {0} a odkáže se na výchozí export.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Tento modul se deklaroval pomocí export =, a dá se použít jenom s výchozím importem při použití příznaku {0}.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tato operace se dá zjednodušit. Tento posun je totožný s {0} {1} {2}.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Toto přetížení implicitně vrací typ „{0}“, protože postrádá anotaci návratového typu.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Tato signatura přetížení není kompatibilní se signaturou implementace.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Tento parametr se nepodporuje s direktivou use strict.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Tato vlastnost parametru musí mít komentář JSDoc se značkou @override, protože přepisuje člen v základní třídě {0}.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Tato vlastnost parametru musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tento příznak regulárního výrazu nelze přepnout v rámci dílčího vzoru.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Tento příznak regulárního výrazu je k dispozici pouze při cílení na „{0}“ nebo novější.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Přepsání této relativní cesty importu není bezpečné, protože cesta vypadá jako název souboru, ale ve skutečnosti se překládá na {0}.", - "This_spread_always_overwrites_this_property_2785": "Tento rozsah vždy přepíše tuto vlastnost.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Tato syntaxe není povolená, pokud je povolená možnost erasableSyntaxOnly.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Přidejte koncovou čárku nebo explicitní omezení.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Místo toho použijte výraz „as“.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Tato syntaxe vyžaduje importovanou podpůrnou aplikaci, ale modul {0} se nenašel.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1}, která v {0} neexistuje. Zvažte možnost upgradovat verzi {0}.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1} a parametry {2}, která není kompatibilní s tou v {0}. Zvažte upgrade verze {0}.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Tento parametr typu může potřebovat omezení extends {0}.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Toto použití importu není platné. Volání import() se dají zapsat, ale musí mít závorky a nemůžou mít typové argumenty.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Pokud chcete tento soubor převést na modul ECMAScript, přidejte pole \"type\": \"module\" do {0}.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0}\" nebo přidejte pole \"type\": \"module\" do {1}.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0} nebo vytvořte místní soubor package.json s {\"type\": \"module\"}.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pokud chcete tento soubor převést na modul ECMAScript, vytvořte místní soubor package.json s { \"type\": \"module\" }.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Výrazy await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Výrazy await using nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarace nejvyšší úrovně v souborech .d.ts musí začínat modifikátorem declare, nebo export.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Smyčky for await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", - "Trailing_comma_not_allowed_1009": "Čárka na konci není povolená.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluje každý soubor jako samostatný modul (podobné jako ts.transpileModule).", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Vyzkoušejte deklaraci npm i --save-dev @types/{1}, pokud existuje, nebo přidejte nový soubor deklarací (.d.ts) s deklarací declare module '{0}';.", - "Trying_other_entries_in_rootDirs_6110": "Zkoušejí se další položky v rootDirs.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Zkouší se nahrazení {0}, umístění modulu kandidáta: {1}.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ řazené kolekce členů {0} délky {1} nemá na indexu {2} žádný prvek.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typů řazené kolekce členů cyklicky odkazují samy na sebe.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Typem {0} se dá iterovat, pouze když se použije příznak --downlevelIteration nebo s možností --target nastavenou na es2015 nebo vyšší.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Typ {0} se nedá použít jako typ indexu.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Typ {0} nejde použít k indexování typu {1}.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ {0} nevyhovuje omezení {1}.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Typ {0} nevyhovuje očekávanému typu {1}.", - "Type_0_has_no_call_signatures_2757": "Typ {0} nemá žádné signatury volání.", - "Type_0_has_no_construct_signatures_2761": "Typ {0} nemá žádné signatury konstruktu.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ {0} nemá odpovídající signaturu indexu pro typ {1}.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "Typ {0} nemá žádné vlastnosti společné s typem {1}.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "U typu {0} nejsou žádné podpisy, pro které platí seznam argumentů obecného typu.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}“ je obecný a lze ho indexovat pouze pro čtení.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "V typu {0} chybí následující vlastnosti z typu {1}: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "V typu {0} chybí následující vlastnosti z typu {1}: {2} a ještě {3}", - "Type_0_is_not_a_constructor_function_type_2507": "Typ {0} není typ funkce konstruktoru.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}“ nepředstavuje platný návratový typ asynchronní funkce v ES5, protože neodkazuje na hodnotu konstruktoru kompatibilní s konstruktorem Promise.", - "Type_0_is_not_an_array_type_2461": "Typ {0} není typ pole.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ {0} není typem pole nebo řetězce.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ {0} není typem pole nebo řetězce, nebo nemá metodu [Symbol.iterator](), která vrací iterátor.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ {0} není typem pole, nebo nemá metodu [Symbol.iterator](), která vrací iterátor.", - "Type_0_is_not_assignable_to_type_1_2322": "Typ {0} nejde přiřadit typu {1}.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ {0} se nedá přiřadit k typu {1}. Měli jste na mysli {2}?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typ {0} se nedá přiřadit typu {1}. Existují dva různé typy s tímto názvem, ale nesouvisí spolu.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Typ {0} nelze přiřadit k typu {1}, jak je implikováno anotací odchylky.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Typ „{0}“ nelze přiřadit k typu „{1}“, jak je vyžadováno pro vypočítané hodnoty členů výčtu.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typu cíle.", - "Type_0_is_not_comparable_to_type_1_2678": "Typ {0} se nedá porovnat s typem {1}.", - "Type_0_is_not_generic_2315": "Typ {0} není obecný.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ {0} může představovat primitivní hodnotu, která není povolena jako pravý operand operátoru in.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Typ {0} musí mít metodu [Symbol.asyncIterator](), která vrací asynchronní iterátor.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ {0} musí mít metodu [Symbol.iterator](), která vrací iterátor.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Typ {0} neposkytuje žádnou shodu pro podpis {1}.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ {0} odkazuje rekurzivně sám na sebe jako na základní typ.", - "Type_Checking_6248": "Kontrola typů", - "Type_alias_0_circularly_references_itself_2456": "Alias typu {0} odkazuje cyklicky sám na sebe.", - "Type_alias_must_be_given_a_name_1439": "Alias typu musí mít název.", - "Type_alias_name_cannot_be_0_2457": "Název aliasu typu nemůže být {0}.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasy typů se dají používat jen v typescriptových souborech.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "V deklaraci konstruktoru se nemůže objevit anotace typu.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Anotace typů se dají používat jen v typescriptových souborech.", - "Type_argument_expected_1140": "Očekává se argument typu.", - "Type_argument_list_cannot_be_empty_1099": "Seznam argumentů typu nemůže být prázdný.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typů se dají používat jen v typescriptových souborech.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typů pro {0} se cyklicky odkazují samy na sebe.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozici {0} ve zdroji není kompatibilní s typem na pozici {1} v cíli.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozicích {0} až {1} ve zdroji není kompatibilní s typem na pozici {2} v cíli.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ obsahující privátní název „{0}“ nejde použít s možností --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Soubory deklarace typu, které se mají zahrnout do kompilace", - "Type_expected_1110": "Očekával se typ.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Kontrolní výrazy importu typů by měly mít přesně jeden klíč – resolution-mode – s hodnotou import nebo require.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Import typu modulu ECMAScript z modulu CommonJS musí mít atribut resolution-mode.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Vytvoření instance typu je příliš hluboké a může být nekonečné.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ se přímo nebo nepřímo odkazuje ve zpětném volání jeho vlastní metody then při splnění.", - "Type_library_referenced_via_0_from_file_1_1402": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1}", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1} s packageId {2}", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu await musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ hodnoty počítané vlastnosti je {0} a nedá se přiřadit do typu {1}.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Typ instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterovaných elementů yield* musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Typ vlastnosti {0} cyklicky odkazuje sám na sebe v mapovaném typu {1}.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Typ operandu yield v asynchronním generátoru musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Import, při kterém se importuje pouze typ modulu ECMAScript z modulu CommonJS, musí mít atribut resolution-mode.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Typ pochází z tohoto importu. Import stylu oboru názvů není možné zavolat ani vytvořit a při běhu způsobí chybu. Zvažte možnost použít tady místo toho výchozí import nebo importovat require.", - "Type_parameter_0_has_a_circular_constraint_2313": "Parametr typu {0} má cyklické omezení.", - "Type_parameter_0_has_a_circular_default_2716": "Parametr typu {0} má cyklickou výchozí hodnotu.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Parametr typu {0} signatury volání z exportovaného rozhraní má nebo používá privátní název {1}.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Parametr typu {0} signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {1}.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Parametr typu {0} exportované třídy má nebo používá privátní název {1}.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Parametr typu {0} exportované funkce má nebo používá privátní název {1}.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Parametr typu {0} exportovaného rozhraní má nebo používá privátní název {1}.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Parametr typu {0} exportovaného typu namapovaného objektu typu má nebo používá privátní název {1}.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Parametr typu {0} exportovaného aliasu typu má nebo používá privátní název {1}.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Parametr typu {0} metody z exportovaného rozhraní má nebo používá privátní název {1}.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Parametr typu {0} veřejné metody z exportované třídy má nebo používá privátní název {1}.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Parametr typu {0} veřejné statické metody z exportované třídy má nebo používá privátní název {1}.", - "Type_parameter_declaration_expected_1139": "Očekává se deklarace parametru typu.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Deklarace parametrů typů se dají používat jen v typescriptových souborech.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Výchozí parametry typů se můžou odkazovat jen na dříve deklarované parametry typů.", - "Type_parameter_list_cannot_be_empty_1098": "Seznam parametrů typu nemůže být prázdný.", - "Type_parameter_name_cannot_be_0_2368": "Název parametru typu nemůže být {0}.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu se nemůžou vyskytovat v deklaraci konstruktoru.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Predikát typu {0} nejde přiřadit {1}.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.", - "Type_reference_directive_0_was_not_resolved_6120": "======== Direktiva odkazu na typ {0} se nepřeložila. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1}, primární: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1} s ID balíčku {2}, primární: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typy se v deklaracích exportu v souborech JavaScriptu nemůžou vyskytovat.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Typy mají samostatné deklarace privátní vlastnosti {0}.", - "Types_of_construct_signatures_are_incompatible_2419": "Typy signatur konstruktorů nejsou kompatibilní.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Typy parametrů {0} a {1} jsou nekompatibilní.", - "Types_of_property_0_are_incompatible_2326": "Typy vlastnosti {0} nejsou kompatibilní.", - "Unable_to_open_file_0_6050": "Soubor {0} nejde otevřít.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Když se podpis dekorátoru třídy volá jako výraz, nejde přeložit.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Když se podpis dekorátoru metody volá jako výraz, nejde přeložit.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Když se podpis dekorátoru parametru volá jako výraz, nejde přeložit.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Když se podpis dekorátoru vlastnosti volá jako výraz, nejde přeložit.", - "Undetermined_character_escape_1513": "Neurčený řídicí znak.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Neočekáváno: „{0}“. Nechtěli jste ho uvést zpětným lomítkem?", - "Unexpected_end_of_text_1126": "Neočekávaný konec textu", - "Unexpected_keyword_or_identifier_1434": "Neočekávané klíčové slovo nebo identifikátor.", - "Unexpected_token_1012": "Neočekávaný token", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Neočekávaný token. Očekával se konstruktor, metoda, přístupový objekt nebo vlastnost.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Neočekávaný token. Očekával se název parametru typu bez složených závorek.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Neočekávaný token. Měli jste na mysli {'>'} nebo >?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Neočekávaný token. Měli jste na mysli {'}'} nebo }?", - "Unexpected_token_expected_1179": "Neočekávaný token. Očekává se znak {.", - "Unicode_escape_sequence_cannot_appear_here_17021": "Řídicí sekvence Unicode se tady nemůže vyskytovat.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Řídicí sekvence Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Výrazy hodnoty vlastnosti Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", - "Unknown_Unicode_property_name_1524": "Neznámý název vlastnosti Unicode.", - "Unknown_Unicode_property_name_or_value_1529": "Neznámý název nebo hodnota vlastnosti Unicode.", - "Unknown_Unicode_property_value_1526": "Neznámá hodnota vlastnosti Unicode.", - "Unknown_build_option_0_5072": "Neznámá možnost sestavení {0}", - "Unknown_build_option_0_Did_you_mean_1_5077": "Neznámá možnost sestavení {0}. Měli jste na mysli {1}?", - "Unknown_compiler_option_0_5023": "Neznámá možnost kompilátoru {0}", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Neznámá možnost kompilátoru {0}. Měli jste na mysli {1}?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Neznámé klíčové slovo nebo identifikátor. Neměli jste na mysli „{0}“?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Neznámá možnost excludes. Měli jste na mysli exclude?", - "Unknown_regular_expression_flag_1499": "Neznámý příznak regulárního výrazu.", - "Unknown_type_acquisition_option_0_17010": "Neznámá možnost získání typu {0}", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Neznámá možnost získání typu {0}. Měli jste na mysli {1}?", - "Unknown_watch_option_0_5078": "Neznámá možnost sledování {0}", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Neznámá možnost sledování {0}. Měli jste na mysli {1}?", - "Unreachable_code_detected_7027": "Zjistil se nedosažitelný kód.", - "Unterminated_Unicode_escape_sequence_1199": "Neukončená řídicí sekvence Unicode", - "Unterminated_quoted_string_in_response_file_0_6045": "Neukončený řetězec v uvozovkách v souboru odezvy {0}", - "Unterminated_regular_expression_literal_1161": "Neukončený literál regulárního výrazu", - "Unterminated_string_literal_1002": "Neukončený řetězcový literál", - "Unterminated_template_literal_1160": "Neukončený literál šablony", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Volání netypové funkce nemusí přijmout argumenty typu.", - "Unused_label_7028": "Nepoužívaný popisek", - "Unused_ts_expect_error_directive_2578": "Nepoužitá direktiva @ts-expect-error", - "Update_import_from_0_90058": "Aktualizovat import z: {0}", - "Update_modifiers_of_0_90061": "Aktualizujte modifikátory „{0}“", - "Updating_output_timestamps_of_project_0_6359": "Aktualizují se výstupní časová razítka projektu {0}...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Aktualizují se nezměněná výstupní časová razítka projektu {0}...", - "Use_0_95174": "Použít {0}", - "Use_0_instead_5106": "Místo toho použijte možnost „{0}“.", - "Use_Number_isNaN_in_all_conditions_95175": "Ve všech podmínkách použijte Number.isNaN.", - "Use_element_access_for_0_95145": "Použít přístup k elementům pro {0}", - "Use_element_access_for_all_undeclared_properties_95146": "Použít přístup k elementům pro všechny nedeklarované vlastnosti", - "Use_import_type_95180": "Použijte „import type“.", - "Use_synthetic_default_member_95016": "Použije syntetického výchozího člena.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Při překladu importů balíčků použijte pole „exports“ souboru package.json.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Při řešení importů použijte pole „imports“ v souboru package.json.", - "Use_type_0_95181": "Použijte „type {0}„.", - "Using_0_subpath_1_with_target_2_6404": "Používá se {0} dílčí cesta {1} s cílem {2}.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Použití fragmentů JSX vyžaduje, aby objekt pro vytváření fragmentů {0} byl v oboru, ale nepovedlo se ho najít.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Použití řetězce v příkazu for...of se podporuje jenom v ECMAScript 5 nebo vyšší verzi.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Použití --build, -b způsobí, že se tsc bude chovat spíše jako orchestrátor sestavení než kompilátor. Pomocí této možnosti můžete aktivovat vytváření složených projektů, o kterých se můžete dozvědět více {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", - "VERSION_6036": "VERZE", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Hodnota typu {0} nemá žádné vlastnosti společné s typem {1}. Chtěli jste ji volat?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Hodnota typu {0} se nedá volat. Nechtěli jste zahrnout new?", - "Variable_0_implicitly_has_an_1_type_7005": "Proměnná {0} má implicitně typ {1}.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Proměnná {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Proměnná {0} má na některých místech implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "V některých umístěních, kde se nedá určit typ proměnné, má proměnná {0} implicitně typ {1}.", - "Variable_0_is_used_before_being_assigned_2454": "Proměnná {0} je použitá před přiřazením.", - "Variable_declaration_expected_1134": "Očekává se deklarace proměnné.", - "Variable_declaration_list_cannot_be_empty_1123": "Seznam deklarací proměnných nemůže být prázdný.", - "Variable_declaration_not_allowed_at_this_location_1440": "Deklarace proměnné není v tomto umístění povolená.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Proměnná musí mít explicitní anotaci typu s možností --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Proměnné s více deklaracemi nemohou být vložené.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element variadic na pozici {0} ve zdroji neodpovídá elementu na pozici {1} v cíli.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Poznámky Variance se podporují pouze u aliasů typů pro typy objektů, funkcí, konstruktorů a mapování.", - "Version_0_6029": "Verze {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Informace o migraci najdete na https://aka.ms/ts6.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Další informace o tomto souboru si můžete přečíst na https://aka.ms/tsconfig", - "WATCH_OPTIONS_6918": "MOŽNOSTI SLEDOVÁNÍ", - "Watch_and_Build_Modes_6250": "Režimy sledování a sestavování", - "Watch_input_files_6005": "Sledovat vstupní soubory", - "Watch_option_0_requires_a_value_of_type_1_5080": "Možnost sledování {0} vyžaduje hodnotu typu {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Pro {0} můžeme napsat typ jenom tak, že sem přidáme typ pro celý parametr.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Při přiřazování funkcí zkontrolujte a zajistěte, aby parametry a vrácené hodnoty měly kompatibilní podtypy.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Při kontrole typů berte v potaz i hodnoty „null“ a „undefined“.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Určuje, jestli se místo vymazání obrazovky má zachovat zastaralý výstup konzoly v režimu sledování.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Zabalit všechny neplatné znaky do kontejneru výrazu", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Uzavřít všechny neplatné výrazy dekoratéru do závorek", - "Wrap_all_object_literal_with_parentheses_95116": "Uzavřít všechny literály objektů do závorek", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Zabalit všechny JSX bez nadřazených položek ve fragmentu JSX", - "Wrap_in_JSX_fragment_95120": "Zabalit ve fragmentu JSX", - "Wrap_in_parentheses_95194": "Uzavřít do závorek", - "Wrap_invalid_character_in_an_expression_container_95108": "Zabalit neplatný znak do kontejneru výrazu", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Uzavřít následující kód, který by měl být literál objektu, do závorek", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informace o všech možnostech kompilátoru najdete na {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Přes globální import se modul nedá přejmenovat.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Nelze přejmenovat elementy definované ve složce node_modules.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Nelze přejmenovat elementy definované v jiné složce node_modules.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nejde přejmenovat elementy definované ve standardní knihovně TypeScriptu.", - "You_cannot_rename_this_element_8000": "Tento element nejde přejmenovat.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Objekt {0} přijímá málo argumentů k tomu, aby se dal použít jako dekoratér. Nechtěli jste ho nejprve volat a napsat @{0}()?", - "_0_and_1_index_signatures_are_incompatible_2330": "Signatury indexu {0} a {1} jsou nekompatibilní.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operace {0} a {1} se nedají kombinovat bez závorek.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Položka {0} je zadána dvakrát. Atribut s názvem {0} se přepíše.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ na konci typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ na začátku typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "{0} se dá importovat jen zapnutím příznaku esModuleInterop a pomocí výchozího importu.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "{0} se dá importovat jen pomocí výchozího importu.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "{0} se dá importovat jen pomocí volání require nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "{0} se dá importovat jen pomocí volání require nebo pomocí výchozího importu.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo výchozího importu.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", - "_0_cannot_be_used_as_a_JSX_component_2786": "{0} se nedá použít jako součást JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "{0} se nedá používat jako hodnota, protože se exportovalo pomocí export type.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "{0} se nedá používat jako hodnota, protože se importovalo pomocí import type.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Komponenty {0} nepřijímají text jako podřízené prvky. Text v JSX má typ string, ale očekávaný typ {1} je {2}.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Instanci {0} by bylo možné vytvořit s libovolným typem, který by nemusel souviset s {1}.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklarace „{0}“ je možné deklarovat jenom uvnitř bloku.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklarace {0} se dají používat jen v typescriptových souborech.", - "_0_declarations_may_not_have_binding_patterns_1492": "Deklarace „{0}“ nesmí mít vzory s vazbami.", - "_0_declarations_must_be_initialized_1155": "Deklarace „{0}“ se musejí inicializovat.", - "_0_expected_1005": "Očekával se: {0}.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ má typ řetězce, ale pokud je povolená možnost isolatedModules, musí mít syntakticky rozpoznatelnou syntaxi řetězce.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "{0} nemá žádný exportovaný člen s názvem {1}. Neměli jste na mysli {2}?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "{0} má implicitně návratový typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "{0} obsahuje implicitně návratový typ any, protože neobsahuje anotaci návratového typu a přímo nebo nepřímo se odkazuje v jednom ze svých návratových výrazů.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "{0} má implicitně typ any, protože nemá anotaci typu a odkazuje se přímo nebo nepřímo v jeho vlastním inicializátoru.", - "_0_index_signatures_are_incompatible_2634": "Signatury indexu {0} jsou nekompatibilní.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "{0} Typ indexu {1} se nedá přiřadit k {2} typu indexu {3}.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0} je primitivum, ale {1} je obálkový objekt. Pokud je to možné, použijte raději {0}.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "{0} je typ a nedá se importovat do javascriptových souborů. V poznámce typu JSDoc použijte {1}.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ je typ a musí se importovat pomocí importu „pouze typ“, pokud je povolená možnost verbatimModuleSyntax.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "{0} je nepoužívané přejmenování {1}. Chtěli jste ji použít jako poznámku typu?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "{0} se dá přiřadit k omezení typu {1}, ale pro {1} se dala vytvořit instance s jiným podtypem omezení {2}.", - "_0_is_automatically_exported_here_18044": "{0} se sem automaticky exportuje.", - "_0_is_declared_but_its_value_is_never_read_6133": "Deklaruje se {0}, ale jeho hodnota se vůbec nečte.", - "_0_is_declared_but_never_used_6196": "{0} se nadeklarovalo, ale nepoužilo.", - "_0_is_declared_here_2728": "{0} je deklarované tady.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "{0} je definované jako vlastnost ve třídě {1}, ale v {2} se tady přepisuje jako přístupový objekt.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "{0} je definované jako přístupový objekt ve třídě {1}, ale v {2} se tady přepisuje jako vlastnost instance.", - "_0_is_deprecated_6385": "{0} je zastaralé.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "{0} není platnou metavlastností pro klíčové slovo {1}. Měli jste na mysli {2}?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "{0} není povolen jako název parametru.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "{0} se nepovoluje jako název deklarace proměnné.", - "_0_is_of_type_unknown_18046": "„{0}“ je typ unknown", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "„{0}“ je pravděpodobně typ null.", - "_0_is_possibly_null_or_undefined_18049": "„{0}“ je typ null nebo undefined", - "_0_is_possibly_undefined_18048": "„{0}“ je pravděpodobně typ undefined.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Na {0} se přímo nebo nepřímo odkazuje ve vlastním základním výrazu.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Na {0} se odkazuje přímo nebo nepřímo v jeho vlastní anotaci typu.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "{0} se zadalo více než jednou, proto se toto použití přepíše.", - "_0_list_cannot_be_empty_1097": "Seznam {0} nemůže být prázdný.", - "_0_modifier_already_seen_1030": "Modifikátor {0} se už jednou vyskytl.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modifikátor {0} se může vyskytovat jenom u parametru typu aliasu třídy, rozhraní nebo typu.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modifikátor „{0}“ se může vyskytovat jenom u parametru typu funkce, metody nebo třídy.", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modifikátor {0} se nemůže objevit v deklaraci konstruktoru.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modifikátor {0} se nemůže objevit v elementu modulu nebo oboru názvů.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Modifikátor {0} se nemůže objevit v parametru.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Modifikátor {0} se nemůže objevit u člena typu.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modifikátor {0} se nemůže objevit u parametru typu.", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modifikátor „{0}“ se nemůže vyskytovat v deklaraci „using“.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modifikátor {0} se nemůže vyskytovat v deklaraci „await using“.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modifikátor {0} se nemůže objevit v signatuře indexu.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modifikátor {0} se nemůže objevit u elementů třídy tohoto typu.", - "_0_modifier_cannot_be_used_here_1042": "Modifikátor {0} tady nejde použít.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Modifikátor {0} nejde použít v ambientním kontextu.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modifikátor {0} nejde použít s modifikátorem {1}.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modifikátor {0} se nedá použít s privátním identifikátorem.", - "_0_modifier_must_precede_1_modifier_1029": "Modifikátor {0} se musí vyskytovat před modifikátorem {1}.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po „\\{0}“ musí následovat výraz s hodnotou vlastnosti Unicode uzavřený do složených závorek.", - "_0_needs_an_explicit_type_annotation_2782": "{0} vyžaduje explicitní anotaci typu.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "{0} jenom odkazuje na typ, ale tady se používá jako obor názvů.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "{0} odkazuje jenom na typ, ale používá se tady jako hodnota.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "{0} odkazuje jenom na typ, ale tady se používá jako hodnota. Nechtěli jste použít {1} v {0}?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "‚{0}‘ odkazuje jen na typ, ale tady se používá jako hodnota. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na es2015 nebo novější.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "{0} odkazuje na globální UMD, ale aktuální soubor je modul. Zvažte raději přidání importu.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "{0} odkazuje na hodnotu, ale tady se používá jako typ. Měli jste na mysli typeof {0}?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ se překládá na deklaraci „pouze typ“ a musí se exportovat pomocí importu „pouze typ“, když je povolena možnost „verbatimModuleSyntax“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Hodnota „{0}“ se překládá na deklaraci „pouze typ“ a musí se znovu exportovat pomocí zpětného exportu „pouze typ“, když je povoleno {1}.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Klíčové slovo {0} by mělo být nastaveno uvnitř objektu compilerOptions konfiguračního souboru JSON.", - "_0_tag_already_specified_1223": "Značka {0} se už specifikovala.", - "_0_was_also_declared_here_6203": "{0} se deklarovalo i tady.", - "_0_was_exported_here_1377": "{0} se exportovalo tady.", - "_0_was_imported_here_1376": "{0} se importovalo tady.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "{0} s chybějící anotací návratového typu má implicitně návratový typ {1}.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "{0} s chybějící anotací návratového typu má implicitně typ yield {1}.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modifikátor abstract se může objevit jenom v deklaraci třídy, metody nebo vlastnosti.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Modifikátor accessor se může objevit jenom v deklaraci vlastnosti.", - "and_here_6204": "a tady.", - "and_npm_install_D_types_Slashnode_6290": "a npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Na „arguments“ nelze odkazovat v inicializátorech vlastností nebo statických inicializačních blocích třídy.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "auto: Považovat soubory s importy, exporty, import.meta, jsx (s jsx: react-jsx) nebo formátem esm (s modulem node16+) za moduly.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Výraz „await“ nelze použít uvnitř statického bloku třídy.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Výrazy await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Výrazy await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Výrazy await nejdou použít v inicializátoru parametru.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "Výraz await nemá žádný vliv na typ tohoto výrazu.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Deklarace await using nejsou v ambientní kontextech povolené.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Deklarace await using nejsou povoleny v klauzulích case ani default, pokud nejsou obsaženy v bloku.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Příkazy „await using“ jsou povoleny jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat „export {}“, aby se tento soubor převedl na modul.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Výrazy „await“ se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Příkazy „await using“ nelze použít uvnitř statického bloku třídy.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Možnost baseUrl je nastavená na {0}, pomocí této hodnoty se přeloží název modulu {1}, který není relativní.", - "c_must_be_followed_by_an_ASCII_letter_1512": "Po „\\c“ musí následovat písmeno v ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "#! se dá použít jen na začátku souboru.", - "case_or_default_expected_1130": "Očekává se case nebo default.", - "catch_or_finally_expected_1472": "Očekávalo se catch nebo finally.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Inicializátor člena výčtu const se vyhodnotil na nekonečnou hodnotu.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Inicializátor člena výčtu const se vyhodnotil na nepovolenou hodnotu NaN.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Inicializátory členů konstantního výčtu musí být konstantní výrazy.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Výčty const se dají použít jenom ve výrazech přístupu k vlastnosti nebo indexu nebo na pravé straně deklarace importu, přiřazení exportu nebo dotazu na typ.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "constructor se nedá použít jako název vlastnosti parametru.", - "constructor_is_a_reserved_word_18012": "#constructor je rezervované slovo.", - "default_Colon_6903": "výchozí:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Příkaz delete nejde volat u identifikátoru ve striktním režimu.", - "export_Asterisk_does_not_re_export_a_default_1195": "export * neprovádí opakovaný export výchozí hodnoty.", - "export_can_only_be_used_in_TypeScript_files_8003": "export = se dá používat jen v typescriptových souborech.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Modifikátor export se nedá použít u ambientních modulů a rozšíření modulů, protože jsou vždy viditelné.", - "extends_clause_already_seen_1172": "Klauzule extends se už jednou vyskytla.", - "extends_clause_must_precede_implements_clause_1173": "Klauzule extends se musí vyskytovat před klauzulí implements.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzule extends exportované třídy {0} má nebo používá privátní název {1}.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzule extends exportované třídy má nebo používá privátní název {0}.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzule extends exportovaného rozhraní {0} má nebo používá privátní název {1}.", - "false_unless_checkJs_is_set_6932": "„false“, pokud není nastavené „checkJs“.", - "false_unless_composite_is_set_6906": "„false“, pokud není nastavené „composite“.", - "file_6025": "soubor", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Smyčky for await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Smyčky for await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Smyčky „for await“ nelze použít uvnitř statického bloku třídy.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Přístupové objekty get a set nemůžou deklarovat parametry this.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "[], pokud je zadáno „soubory“, jinak [\"**/*\"]", - "implements_clause_already_seen_1175": "Klauzule implements se už jednou vyskytla.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule implements se dají používat jen v typescriptových souborech.", - "import_can_only_be_used_in_TypeScript_files_8002": "import = se dá používat jen v typescriptových souborech.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklarace infer jsou povolené jenom v klauzuli extends podmíněného typu.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po „\\k“ musí následovat název zachycující skupiny uzavřený do ostrých závorek.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Nepovoluje se používat let jako název v deklaracích let nebo const.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Výraz new s chybějící signaturou konstruktoru v cíli má implicitně typ any.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "[\"node_modules\", \"bower_components\", \"jspm_packages\"] a hodnotu „outDir“, pokud je zadána.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext`, pokud je `module` nastaveno na `nodenext`; `node16`, pokud je `module` nastaveno na `node16` nebo `node18`; jinak `bundler`.", - "one_of_Colon_6900": "jeden z:", - "one_or_more_Colon_6901": "1 nebo více:", - "options_6024": "možnosti", - "or_JSX_element_expected_1145": "Očekával se element { nebo JSX.", - "or_expected_1144": "Očekává se znak { nebo ;.", - "package_json_does_not_have_a_0_field_6100": "Soubor package.json neobsahuje pole {0}.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "package.json nemá položku typesVersions, která by odpovídala verzi {0}.", - "package_json_had_a_falsy_0_field_6220": "Soubor package.json obsahoval neplatné pole {0}.", - "package_json_has_0_field_1_that_references_2_6101": "Soubor package.json má pole {0} {1}, které odkazuje na {2}.", - "package_json_has_a_peerDependencies_field_6281": "Soubor package.json má pole „peerDependencies“.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "package.json má položku typesVersions {0}, která není platný rozsah semver.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "package.json má položku typesVersions {0}, která odpovídá verzi kompilátoru {1}. Hledá se vzor, který bude odpovídat názvu modulu {2}.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "package.json má pole typesVersions s mapováními cesty specifickými pro verzi.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json scope {0} implicitně mapuje specifikátor {1} na hodnotu null.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json scope {0} má neplatný typ pro cíl specifikátoru {1}.", - "package_json_scope_0_has_no_imports_defined_6273": "package.json scope {0} nemá definovány žádné importy.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Je zadaná možnost paths, hledá se vzor, který odpovídá názvu modulu {0}.", - "q_is_only_available_inside_character_class_1511": "„\\q“ je k dispozici pouze uvnitř třídy znaků.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po „\\q“ musí následovat řetězcové alternativy uzavřené ve složených závorkách.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modifikátor readonly se může objevit jenom v deklaraci vlastnosti nebo signatuře indexu.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modifikátor typu readonly se povoluje jen pro typy literálů pole a řazené kolekce členů.", - "require_call_may_be_converted_to_an_import_80005": "Volání require se dá převést na import.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "resolution-mode se dá nastavit pouze pro importy type-only.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "resolution-mode je jediný platný klíč pro kontrolní výrazy importu typů.", - "resolution_mode_should_be_either_require_or_import_1453": "resolution-mode by měl být buď require, nebo import.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Je nastavená možnost rootDirs, použije se k překladu relativního názvu modulu {0}.", - "super_can_only_be_referenced_in_a_derived_class_2335": "Na vlastnost super se dá odkazovat jenom v odvozené třídě.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Na možnost super je možné odkazovat jenom ve členech odvozených tříd nebo výrazů literálu objektu.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Na vlastnost super se nedá odkazovat v názvu počítané vlastnosti.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "Na vlastnost super se nedá odkazovat v argumentech konstruktoru.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Možnost super je povolená jenom ve členech výrazů literálu objektu, pokud je možnost target ES2015 nebo vyšší.", - "super_may_not_use_type_arguments_2754": "super nemůže používat argumenty typů.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Před přístupem k vlastnosti super v konstruktoru odvozené třídy se musí zavolat super.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Možnost super se musí volat před přístupem k this v konstruktoru odvozené třídy.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Po vlastnosti super musí následovat seznam argumentů nebo přístup ke členu.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Přístup k vlastnostem pomocí super je povolený jenom v konstruktoru, členské funkci nebo členském přístupovém objektu odvozené třídy.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "Na vlastnost this se nedá odkazovat v názvu počítaného prostředku.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Na vlastnost this se nedá odkazovat v modulu nebo těle oboru názvů.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Na vlastnost this se nedá odkazovat v inicializátoru statické vlastnosti.", - "this_cannot_be_referenced_in_current_location_2332": "Na vlastnost this se nedá odkazovat v aktuálním umístění.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Možnost this má implicitně typ any, protože nemá anotaci typu.", - "true_for_ES2022_and_above_including_ESNext_6930": "„true“ pro ES2022 a vyšší, včetně ESNext.", - "true_if_composite_false_otherwise_6909": "„true“, pokud „composite“, „false“ jinak", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "Má hodnotu True, když „moduleResolution“ je „node16“, „nodenext“ nebo „bundler“; v opačném případě má hodnotu False.", - "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: kompilátor TypeScriptu", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json je k dispozici, ale nebude načten, pokud jsou soubory zadány v příkazovém řádku. K přeskočení této chyby použijte --ignoreConfig.", - "type_Colon_6902": "typ:", - "unique_symbol_types_are_not_allowed_here_1335": "Typy unique symbol tady nejsou povolené.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy unique symbol jsou povolené jen u proměnných v příkazu proměnné.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typy unique symbol nejde použít v deklaraci proměnné s názvem vazby.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Direktiva use strict se nedá použít se seznamem parametrů, které nejsou jednoduché.", - "use_strict_directive_used_here_1349": "Direktiva use strict se použila tady.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Deklarace using nejsou v ambientní kontextech povolené.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Deklarace using nejsou povoleny v klauzulích case ani default, pokud nejsou obsaženy v bloku.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "Příkazy with se ve funkčním bloku async nepovolují.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Příkazy with se ve striktním režimu nepovolují.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Implicitním výsledkem výrazu yield je typ any, protože v jeho obsahujícím generátoru chybí anotace návratového typu.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Výrazy yield nejde použít v inicializátoru parametru." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "VŠECHNY MOŽNOSTI KOMPILÁTORU", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modifikátor {0} nejde použít s deklarací import.", + "A_0_parameter_must_be_the_first_parameter_2680": "Parametr {0} musí být prvním parametrem.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Značka „@template“ jazyka JSDoc nemůže následovat po značce „@typedef“, „@callback“ nebo „@overload“.", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentář JSDoc @typedef nemůže obsahovat více než jednu značku @type.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literál „bigint“ nelze použít jako název vlastnosti.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Literál typu bigint nemůže používat exponenciální notaci.", + "A_bigint_literal_must_be_an_integer_1353": "Literál typu bigint musí být celé číslo.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr vzoru vazby nemůže být u podpisu implementace nepovinný.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Příkaz break se dá použít jenom uvnitř nadřazené iterace nebo příkazu switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Příkaz break může skočit jenom na popisek nadřazeného příkazu.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Třída znaků nesmí obsahovat vyhrazené dvojité interpunkční znaménko. Nechtěli jste ho uvést zpětným lomítkem?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Rozsah třídy znaků nesmí být ohraničen jinou třídou znaků.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Třída může implementovat jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Třída může implementovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Třída nemůže rozšiřovat primitivní typ, jako je například „{0}“. Třídy můžou rozšiřovat pouze konstruovatelné hodnoty.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Třída nemůže implementovat primitivní typ, jako je například „{0}“. Může implementovat pouze jiné typy pojmenovaných objektů.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklarace třídy bez modifikátoru default musí mít název.", + "A_class_member_cannot_have_the_0_keyword_1248": "Člen třídy nemůže mít klíčové slovo {0}.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Výraz s čárkou není v názvu počítané vlastnosti povolený.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Název počítané vlastnosti nemůže odkazovat na parametr typu z jeho nadřazeného typu.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Název počítané vlastnosti v deklaraci vlastnosti třídy musí mít jednoduchý typ literálu nebo typ unique symbol.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Název počítané vlastnosti v přetížené metodě musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Název počítané vlastnosti v literálu typu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Název počítané vlastnosti v ambientním kontextu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Název počítané vlastnosti v rozhraní musí odkazovat na výraz, jehož typ je literál nebo unique symbol.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Název počítané vlastnosti musí být typu string, number, symbol nebo any.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Kontrolní výraz „const“ lze použít pouze na odkazy na členy výčtu nebo na řetězce, čísla, logické hodnoty, pole nebo objektové literály.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Ke členu konstantního výčtu se dá získat přístup jenom pomocí řetězcového literálu.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Inicializátor const v ambientním kontextu musí být řetězec, číselný literál nebo odkaz na výčet literálů.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Konstruktor nemůže obsahovat volání super, pokud jeho třída rozšiřuje null.", + "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nemůže mít parametr this.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Příkaz continue se dá použít jenom uvnitř příkazu nadřazené iterace.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Příkaz continue může přejít jenom na popisek příkazu nadřazené iterace.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Soubor deklarace nelze importovat bez hodnoty „import type“. Nechtěli jste místo toho importovat soubor implementace „{0}“?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Modifikátor declare se nedá použít v kontextu, který už je ambientní.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorátor může dekorovat jenom implementaci metody, ne přetížení.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzule default nemůže být v příkazu switch víc než jednou.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "V modulu ve stylu ECMAScriptu se dá použít jenom výchozí export.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Výchozí export musí být na nejvyšší úrovni deklarace souboru nebo modulu.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Určitý kontrolní výraz přiřazení '!' není v tomto kontextu povolený.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Destrukturační deklarace musí obsahovat inicializátor.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Volání dynamického importu v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Volání dynamického importu vrací hodnotu ‚Promise‘. Ujistěte se, že pro ni máte deklaraci, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.", + "A_file_cannot_have_a_reference_to_itself_1006": "Soubor nemůže odkazovat sám na sebe.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkce, která vrací hodnotu never, nemůže mít dosažitelný koncový bod.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkce volaná klíčovým slovem new nemůže mít typ this, který je void.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkce, jejíž deklarovaný typ není „undefined“, „void“ ani „any“, musí vracet hodnotu.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Generátor nemůže mít anotaci typu void.", + "A_get_accessor_cannot_have_parameters_1054": "Přístupový objekt get nemůže obsahovat parametry.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Přístupový objekt get musí být alespoň tak přístupný jako metoda setter.", + "A_get_accessor_must_return_a_value_2378": "Přístupový objekt get musí vracet hodnotu.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element popsané řazené kolekce členů se deklaroval jako nepovinný pomocí otazníku za názvem a před dvojtečkou, nikoli za typem.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Element popsané řazené kolekce členů se deklaroval jako zbytek s třemi tečkami (...) před názvem, nikoli před typem.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Mapovaný typ nemůže deklarovat vlastnosti nebo metody.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicializátor členu v deklaraci výčtu nemůže odkazovat na členy deklarované až po výčtu, a to ani členy definované v jiných výčtech.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Třída mixin musí mít konstruktor s jediným parametrem rest typu any[].", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Třída mixin, která rozšiřuje proměnnou typu obsahující signaturu abstraktního konstruktu, musí být také deklarovaná jako abstract.", + "A_module_cannot_have_multiple_default_exports_2528": "Modul nemůže mít víc výchozích exportů.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklarace oboru názvů nemůže být v jiném souboru než třída nebo funkce, se kterou se slučuje.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklarace oboru názvů nemůže být umístěná před třídou nebo funkcí, se kterou se slučuje.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklarace oboru názvů je povolená pouze na nejvyšší úrovni oboru názvů nebo v modulu.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklarace namespace by se neměla deklarovat pomocí klíčového slova module. Místo toho prosím použijte klíčové slovo namespace.", + "A_non_dry_build_would_build_project_0_6357": "Build bez příznaku -dry by vytvořil projekt {0}.", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Build bez příznaku -dry by odstranil následující soubory: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Build bez příznaku -dry by aktualizoval časová razítka pro výstup projektu {0}.", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicializátor parametru je povolený jenom v implementaci funkce nebo konstruktoru.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Vlastnost parametru se nedá deklarovat pomocí parametru rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Vlastnost parametru je povolená jenom v implementaci konstruktoru.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Vlastnost parametru se nedá deklarovat pomocí vzoru vazby.", + "A_promise_must_have_a_then_method_1059": "Příslib musí mít metodu then.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Vlastnost třídy, jejíž typ je unique symbol, musí být static a readonly.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Vlastnost rozhraní nebo literálu typu, jehož typ je unique symbol, musí být readonly.", + "A_required_element_cannot_follow_an_optional_element_1257": "Povinný element nemůže následovat po nepovinném elementu.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Povinný parametr nemůže následovat po nepovinném parametru.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nemůže obsahovat vzor vazby.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nemůže následovat za jiným elementem rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Element rest nemůže mít název vlastnosti.", + "A_rest_element_cannot_have_an_initializer_1186": "Element rest nemůže obsahovat inicializátor.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musí být ve vzoru destrukturalizace poslední.", + "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musí být typu pole.", + "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nemůže být nepovinný.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nemůže obsahovat inicializátor.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Parametr rest musí být posledním v seznamu parametrů.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musí být typu pole.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest nebo vzor vazby nesmí mít na konci čárku.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Příkaz return se dá použít jenom v těle funkce.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Příkaz return nejde použít uvnitř statického bloku třídy.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Řada záznamů, které mění mapování importů do umístění vyhledávání relativních vůči baseUrl.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Přístupový objekt set nemůže obsahovat anotaci návratového typu.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Přístupový objekt set nemůže obsahovat nepovinný parametr.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Přístupový objekt get nemůže obsahovat parametr rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Přístupový objekt set musí obsahovat přesně jeden parametr.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr přístupového objektu set nemůže obsahovat inicializátor.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument rozprostření musí mít buď typ řazené kolekce členů, nebo musí být předán do parametru rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Volání super musí být příkaz na kořenové úrovni v konstruktoru odvozené třídy, který obsahuje inicializované vlastnosti, vlastnosti parametrů nebo privátní identifikátory.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Volání super musí být prvním příkazem v konstruktoru, který odkazuje na super nebo toto, když odvozená třída obsahuje inicializované vlastnosti, vlastnosti parametrů nebo soukromé identifikátory.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrana typu this není kompatibilní s ochranou typu založeného na parametru.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ this je k dispozici jenom v nestatických členech třídy nebo rozhraní.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modifikátor „export“ nejvyšší úrovně nelze použít pro deklarace hodnot v modulu CommonJS, když je povolený modifikátor „verbatimModuleSyntax“.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Soubor tsconfig.json je už v {0} definovaný.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Člen řazené kolekce členů nemůže být volitelný a zbytek.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Typ řazené kolekce členů není možné indexovat zápornou hodnotou.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Výraz potvrzení typu se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Vlastnost literálu typu nemůže mít inicializátor.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Import, při kterém se importují jen typy, může určovat výchozí import nebo pojmenované vazby, ale ne obojí.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Predikát typu nemůže odkazovat na parametr rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Predikát typu nemůže odkazovat na element {0} ve vzoru vazby.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Predikát typu je povolený jenom na pozici návratového typu funkcí a metod.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Typ predikátu typu musí být přiřaditelný k typu jeho parametru.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Typ odkazovaný v dekorovaném podpisu musí být importován pomocí import type nebo importu oboru názvů, pokud jsou povoleny elementy isolatedModules a emitDecoratorMetadata.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Proměnná, jejíž typ je unique symbol, musí být const.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Výraz yield je povolený jenom v těle generátoru.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "K abstraktní metodě {0} ve třídě {1} nejde získat přístup prostřednictvím výrazu super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstraktní metody se můžou vyskytovat jenom v abstraktní třídě.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstraktní vlastnosti se můžou vyskytovat jenom v abstraktní třídě.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "K abstraktní vlastnosti {0} ve třídě {1} nelze získat přístup v konstruktoru.", + "Accessibility_modifier_already_seen_1028": "Modifikátor dostupnosti se už jednou vyskytl.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Přístupové objekty jsou dostupné, jenom když je cílem ECMAScript 5 a vyšší verze.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Přistupující objekty musí být abstraktní nebo neabstraktní.", + "Add_0_to_unresolved_variable_90008": "Přidat {0}. k nerozpoznané proměnné", + "Add_a_return_statement_95111": "Přidat příkaz return", + "Add_a_return_type_to_the_function_declaration_9031": "Přidejte návratový typ do deklarace funkce.", + "Add_a_return_type_to_the_function_expression_9030": "Přidejte návratový typ do výrazu funkce.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Přidejte návratový typ do deklarace přistupujícího objektu get.", + "Add_a_return_type_to_the_method_9034": "Přidejte do metody návratový typ.", + "Add_a_type_annotation_to_the_parameter_0_9028": "Přidejte anotaci typu k parametru „{0}“.", + "Add_a_type_annotation_to_the_property_0_9029": "Přidejte anotaci typu k vlastnosti „{0}“.", + "Add_a_type_annotation_to_the_variable_0_9027": "Přidejte anotaci typu k proměnné „{0}“.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Přidejte typ k parametru deklarace přistupujícího objektu set.", + "Add_all_missing_async_modifiers_95041": "Přidat všechny chybějící modifikátory async", + "Add_all_missing_attributes_95168": "Přidat všechny chybějící atributy", + "Add_all_missing_call_parentheses_95068": "Přidat všechny chybějící závorky volání", + "Add_all_missing_function_declarations_95157": "Přidat všechny chybějící deklarace funkcí", + "Add_all_missing_imports_95064": "Přidat všechny chybějící importy", + "Add_all_missing_members_95022": "Přidat všechny chybějící členy", + "Add_all_missing_override_modifiers_95162": "Přidat všechny chybějící modifikátory override", + "Add_all_missing_parameters_95190": "Přidejte všechny chybějící parametry.", + "Add_all_missing_properties_95166": "Přidat všechny chybějící importy", + "Add_all_missing_return_statement_95114": "Přidat všechny chybějící příkazy return", + "Add_all_missing_super_calls_95039": "Přidat všechna chybějící volání pomocí super", + "Add_all_missing_type_annotations_90067": "Přidejte všechny chybějící anotace typů.", + "Add_all_optional_parameters_95193": "Přidejte všechny volitelné parametry.", + "Add_annotation_of_type_0_90062": "Přidejte anotaci typu „{0}“.", + "Add_async_modifier_to_containing_function_90029": "Přidat modifikátor async do obsahující funkce", + "Add_await_95083": "Přidat await", + "Add_await_to_initializer_for_0_95084": "Přidat await do inicializátoru pro {0}", + "Add_await_to_initializers_95089": "Přidat await do inicializátorů", + "Add_braces_to_arrow_function_95059": "Přidat složené závorky k funkci šipky", + "Add_const_to_all_unresolved_variables_95082": "Přidat const ke všem nerozpoznaným proměnným", + "Add_const_to_unresolved_variable_95081": "Přidat const k nerozpoznané proměnné", + "Add_definite_assignment_assertion_to_property_0_95020": "Přidat kontrolní výraz jednoznačného přiřazení k vlastnosti {0}", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Přidat kontrolní výrazy jednoznačného přiřazení do všech neinicializovaných vlastností", + "Add_export_to_make_this_file_into_a_module_95097": "Přidat export {}, aby se tento soubor převedl na modul", + "Add_extends_constraint_2211": "Přidejte omezení extends.", + "Add_extends_constraint_to_all_type_parameters_2212": "Přidat omezení extends ke všem parametrům typu", + "Add_import_from_0_90057": "Přidat import z {0}", + "Add_index_signature_for_property_0_90017": "Přidat signaturu indexu pro vlastnost {0}", + "Add_initializer_to_property_0_95019": "Přidat inicializační výraz k vlastnosti {0}", + "Add_initializers_to_all_uninitialized_properties_95027": "Přidat inicializátory do všech neinicializovaných vlastností", + "Add_missing_attributes_95167": "Přidat chybějící atributy", + "Add_missing_call_parentheses_95067": "Přidat chybějící závorky volání", + "Add_missing_comma_for_object_member_completion_0_95187": "Přidejte chybějící čárku pro dokončování členů objektu „{0}“.", + "Add_missing_enum_member_0_95063": "Přidat chybějící člen výčtu {0}", + "Add_missing_function_declaration_0_95156": "Přidat chybějící deklaraci funkce {0}", + "Add_missing_new_operator_to_all_calls_95072": "Přidat chybějící operátor new ke všem voláním", + "Add_missing_new_operator_to_call_95071": "Přidat chybějící operátor new k volání", + "Add_missing_parameter_to_0_95188": "Přidejte chybějící parametr do „{0}“.", + "Add_missing_parameters_to_0_95189": "Přidejte chybějící parametry do „{0}“.", + "Add_missing_properties_95165": "Přidat chybějící vlastnosti", + "Add_missing_super_call_90001": "Přidat chybějící volání metody super()", + "Add_missing_typeof_95052": "Přidat chybějící typeof", + "Add_names_to_all_parameters_without_names_95073": "Přidat názvy do všech parametrů bez názvů", + "Add_optional_parameter_to_0_95191": "Přidejte volitelný parametr do „{0}“", + "Add_optional_parameters_to_0_95192": "Přidat volitelné parametry do {0}", + "Add_or_remove_braces_in_an_arrow_function_95058": "Přidat nebo odebrat složené závorky ve funkci šipky", + "Add_override_modifier_95160": "Přidat modifikátor override", + "Add_parameter_name_90034": "Přidat název parametru", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Přidat kvalifikátor do všech nerozpoznaných proměnných odpovídajících názvu členu", + "Add_resolution_mode_import_attribute_95196": "Přidat atribut importu resolution-mode", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Přidat atribut importu resolution-mode do všech importů, při kterých se importuje pouze typ, které ho potřebují", + "Add_return_type_0_90063": "Přidejte návratový typ „{0}“", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Chcete-li typ nastavit jako explicitní, přidejte do tohoto výrazu operátor „satisfies“ a kontrolní výraz typu („satisfies T as T“).", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Přidejte operátor „satisfies“ a kontrolní výraz vloženého typu s „{0}“.", + "Add_to_all_uncalled_decorators_95044": "Přidat () do všech nevolaných dekorátorů", + "Add_ts_ignore_to_all_error_messages_95042": "Přidat @ts-ignore do všech chybových zpráv", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Pokud k přístupu používáte index, přidejte k typu řetězec undefined.", + "Add_undefined_to_optional_property_type_95169": "Přidat hodnotu undefined do volitelného typu vlastnosti", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Přidat nedefinovaný typ do všech neinicializovaných vlastností", + "Add_undefined_type_to_property_0_95018": "Přidat typ undefined k vlastnosti {0}", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Přidat převod unknown pro typy, které se nepřekrývají", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Přidat unknown do všech převodů pro typy, které se nepřekrývají", + "Add_void_to_Promise_resolved_without_a_value_95143": "Přidat void k objektu Promise vyřešenému bez hodnoty", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Přidat void ke všem objektům Promise vyřešeným bez hodnoty", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Přidání souboru tsconfig.json vám pomůže uspořádat projekty, které obsahují jak soubory TypeScript, tak soubory JavaScript. Další informace najdete na adrese https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Všechny deklarace {0} musí mít identická omezení.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Všechny deklarace {0} musí mít stejné modifikátory.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Všechny deklarace {0} musí mít stejné parametry typu.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Všechny deklarace abstraktní metody musí jít po sobě.", + "All_destructured_elements_are_unused_6198": "Žádný z destrukturovaných elementů se nepoužívá.", + "All_imports_in_import_declaration_are_unused_6192": "Žádné importy z deklarace importu se nepoužívají.", + "All_type_parameters_are_unused_6205": "Všechny parametry typů jsou nevyužité.", + "All_variables_are_unused_6199": "Žádná z proměnných se nepoužívá.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Povolte, aby se soubory JavaScriptu staly součástí programu. K získání informací o chybách v těchto souborech použít možnost checkJs.", + "Allow_accessing_UMD_globals_from_modules_6602": "Povolit přístup ke globálním proměnným UMD z modulů", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Povolte výchozí importy z modulů bez výchozího exportu. Nebude to mít vliv na generování kódu, jenom na kontrolu typů.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Pokud modul nemá výchozí export, povolte import X z Y.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Povolte import pomocných funkcí z knihovny tslib jednou za celý projekt místo jejich zahrnutí do každého souboru.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Povolte, aby importy zahrnovaly přípony souborů TypeScriptu. Vyžaduje nastavení možnosti „--moduleResolution bundler“ a buď „--noEmit“, nebo „--emitDeclarationOnly“.", + "Allow_javascript_files_to_be_compiled_6102": "Povolí kompilaci souborů javascript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Při řešení modulů povolit, aby se s více složkami zacházelo jako s jednou.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Název souboru {0}, který se už zahrnul, se od názvu souboru {1} liší jen ve velkých a malých písmenech.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklarace ambientního modulu nemůže uvádět relativní název modulu.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Ambientní moduly se nedají zanořovat do jiných modulů nebo oborů názvů.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Modul AMD nemůže obsahovat víc přiřazení názvů.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstraktní přístupový objekt nemůže mít implementaci.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modifikátor přístupnosti se nedá použít spolu s privátním identifikátorem.", + "An_accessor_cannot_have_type_parameters_1094": "Přístupový objekt nemůže obsahovat parametry typu.", + "An_accessor_property_cannot_be_declared_optional_1276": "Vlastnost accessor nejde deklarovat jako volitelnou.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklarace ambientního modulu je povolená jenom na nejvyšší úrovni v souboru.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Neposkytl se argument pro {0}.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Neposkytl se argument, který by odpovídal tomuto vzoru vazby.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetický operand musí být typu any, number, bigint nebo typu výčtu.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkce šipky nemůže mít parametr this.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchronní funkce nebo metoda v ES5 vyžaduje konstruktor „Promise“. Ujistěte se, že máte deklaraci konstruktoru „Promise“, nebo do možnosti „--lib“ přidejte „ES2015“.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchronní funkce nebo metoda musí vracet hodnotu ‚Promise‘. Přesvědčte se, že pro ni máte deklaraci, nebo zahrňte ‚ES2015‘ do možnosti ‚--lib‘.", + "An_async_iterator_must_have_a_next_method_2519": "Asynchronní iterátor musí mít metodu next().", + "An_element_access_expression_should_take_an_argument_1011": "Výraz přístupu k elementu by měl přijímat argument.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Člen výčtu není možné pojmenovat privátním identifikátorem.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Člen výčtu nemůže mít číselný název.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Za názvem členu výčtu musí následovat znak čárky (,), rovnítka (=) nebo pravé složené závorky (}).", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozšířená verze těchto informací, zobrazující všechny možné možnosti kompilátoru", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Přiřazení exportu se nedá použít v modulu s jinými exportovanými elementy.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Přiřazení exportu se nedá používat v oboru názvů.", + "An_export_assignment_cannot_have_modifiers_1120": "Přiřazení exportu nemůže mít modifikátory.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Přiřazení exportu musí být na nejvyšší úrovni deklarace souboru nebo modulu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklarace exportu se dá použít pouze na nejvyšší úrovni modulu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklarace exportu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", + "An_export_declaration_cannot_have_modifiers_1193": "Deklarace exportu nemůže mít modifikátory.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Když je povolená možnost verbatimModuleSyntax, musí deklarace „export =“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklarace „export =“ musí odkazovat na hodnotu, když je povolená možnost „verbatimModuleSyntax“, ale „{0}“ odkazuje jenom na typ.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Když je povolená možnost verbatimModuleSyntax, musí „export default“ odkazovat na skutečnou hodnotu, ale „{0}“ se překládá na deklaraci „pouze typ“.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Pokud je povolená možnost „verbatimModuleSyntax“, musí „export default“ odkazovat na hodnotu, ale „{0}“ odkazuje jenom na typ.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Není možné testovat pravdivost výrazu typu void.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozšířená řídicí hodnota Unicode musí být mezi 0x0 a 0x10FFFF (včetně).", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identifikátor nebo klíčové slovo nemůže následovat hned po číselném literálu.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementace se nedá deklarovat v ambientních kontextech.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu se nemůže odkazovat na deklaraci, která se exportovala pomocí export type.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu se nemůže odkazovat na deklaraci, která se importovala pomocí import type.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Pokud je povolená možnost „verbatimModuleSyntax“, alias importu nelze přeložit na deklaraci typu nebo deklaraci „pouze typ“.", + "An_import_alias_cannot_use_import_type_1392": "Alias importu nemůže používat import type.", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklarace importu se dá použít pouze na nejvyšší úrovni modulu.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklarace importu se dá použít pouze na nejvyšší úrovni oboru názvů nebo modulu.", + "An_import_declaration_cannot_have_modifiers_1191": "Deklarace importu nemůže mít modifikátory.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Když je povolená možnost „allowImportingTsExtensions“, může cesta importu končit pouze příponou „{0}“.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Signatura indexu indexu nemůže obsahovat parametr rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Signatura indexu nemůže mít na konci čárku.", + "An_index_signature_must_have_a_type_annotation_1021": "Signatura indexu musí mít anotaci typu.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Signatura indexu musí mít právě jeden parametr.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "V parametru signatury indexu nemůže být otazník.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "V parametru signatury indexu nemůže být modifikátor přístupnosti.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "V parametru signatury indexu nemůže být inicializátor.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "V parametru signatury indexu nemůže být anotace typu.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru signatury indexu nemůže být typ literálu nebo obecný typ. Místo toho zvažte použití namapovaného typu objektu.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Typ parametru signatury indexu musí být řetězec, číslo, symbol nebo typ literálu šablony.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po výrazu vytvoření instance nemůže následovat přístup k vlastnosti.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Rozhraní může rozšířit jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Rozhraní může rozšiřovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Rozhraní nemůže rozšiřovat primitivní typ, jako je například „{0}“. Může rozšiřovat pouze jiné typy pojmenovaných objektů.", + "An_interface_property_cannot_have_an_initializer_1246": "Vlastnost rozhraní nemůže mít inicializátor.", + "An_iterator_must_have_a_next_method_2489": "Iterátor musí mít metodu next().", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Při použití direktivy pragma @jsx s fragmenty JSX se vyžaduje direktiva pragma @jsxFrag.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Literál objektu nemůže obsahovat několik přístupových objektů get/set se stejným názvem.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literál objektu nemůže mít víc vlastností se stejným názvem.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literál objektu nemůže obsahovat vlastnost a přístupový objekt se stejným názvem.", + "An_object_member_cannot_be_declared_optional_1162": "Člen objektu nemůže být deklarovaný jako nepovinný.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]“ objektu musí vracet logickou hodnotu, aby ji bylo možné použít na pravé straně výrazu „instanceof“.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Nepovinný řetěz nemůže obsahovat privátní identifikátory.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Element optional nemůže následovat za elementem rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Tento kontejner zakrývá vnější hodnotu this.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Signatura přetížení nemůže být deklarovaný jako generátor.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unární výraz s operátorem {0} se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.", + "Annotate_everything_with_types_from_JSDoc_95043": "Vše s typy z JSDoc opatřit poznámkami", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Přidejte anotace typů funkce expando ve vlastnostech v oboru názvů.", + "Annotate_with_type_from_JSDoc_95009": "Přidat poznámku s typem z JSDoc", + "Another_export_default_is_here_2753": "Další výchozí hodnota exportu je tady.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jakákoli vlastnost Unicode, která by mohla odpovídat více než jednomu znaku, je k dispozici pouze v případě, že je nastaven příznak Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Cokoli, co by mohlo odpovídat více než jednomu znaku, je v negované třídě znaků neplatné.", + "Are_you_missing_a_semicolon_2734": "Nechybí středník?", + "Argument_expression_expected_1135": "Očekává se výraz argumentu.", + "Argument_for_0_option_must_be_Colon_1_6046": "Argument možnosti {0} musí být {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Argument dynamického importu nemůže být element rozestření.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Argument typu {0} nejde přiřadit k parametru typu {1}.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argument typu {0} se nedá přiřadit k parametru typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nezadaly se argumenty pro parametr rest {0}.", + "Array_element_destructuring_pattern_expected_1181": "Očekával se destrukturační vzor elementu pole.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Pole s elementy spread nelze odvodit pomocí možnosti --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Kontrolní výrazy vyžadují, aby se všechny názvy v cíli volání deklarovaly s explicitní anotací typu.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Kontrolní výrazy vyžadují, aby cíl volání byl identifikátor, nebo kvalifikovaný název.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Přiřazování vlastností funkcím bez jejich deklarování není u s možností --isolatedDeclarations podporováno. Přidejte explicitní deklaraci pro vlastnosti přiřazené k této funkci.", + "Asterisk_Slash_expected_1010": "Očekával se znak */.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Minimálně jeden přistupující objekt musí mít explicitní anotaci typu s možností --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozšíření pro globální rozsah může být jenom přímo vnořené v externích modulech nebo deklaracích ambientního modulu.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozšíření pro globální rozsah by měla mít modifikátor declare, pokud se neobjeví v kontextu, který je už ambientní.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatické zjišťování pro psaní je povolené v projektu {0}. Spouští se speciální průchod řešení pro modul {1} prostřednictvím umístění mezipaměti {2}.", + "BUILD_OPTIONS_6919": "MOŽNOSTI SESTAVENÍ", + "Backwards_Compatibility_6253": "Zpětná kompatibilita", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Výrazy základní třídy nemůžou odkazovat na parametry typu třídy.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Návratový typ základního konstruktoru {0} není typ objektu ani průsečík typů objektů se staticky známými členy.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Všechny základní konstruktory musí mít stejný návratový typ.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Základní adresář pro překlad neabsolutních názvů modulů.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Když je cíl nastavený níže než ES2020, literály typu BigInt nejsou k dispozici.", + "Binary_digit_expected_1177": "Očekává se binární číslice.", + "Binding_element_0_implicitly_has_an_1_type_7031": "Element vazby {0} má implicitně typ {1}.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Proměnná bloku {0} se používá před vlastní deklarací.", + "Build_a_composite_project_in_the_working_directory_6925": "Sestavte složený projekt v pracovním adresáři.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Sestavujte všechny projekty včetně těch, které se zdají aktuální.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Sestavit jeden nebo více projektů a jejich závislosti, pokud jsou zastaralé", + "Build_option_0_requires_a_value_of_type_1_5073": "Možnost buildu {0} vyžaduje hodnotu typu {1}.", + "Building_project_0_6358": "Sestavuje se projekt {0}...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Instance integrovaných iterátorů jsou vytvářeny s typem „TReturn“ s hodnotou „undefined“ místo hodnoty „any“.", + "COMMAND_LINE_FLAGS_6921": "PŘÍZNAKY PŘÍKAZOVÉHO ŘÁDKU", + "COMMON_COMMANDS_6916": "BĚŽNÉ PŘÍKAZY", + "COMMON_COMPILER_OPTIONS_6920": "BĚŽNÉ PARAMETRY KOMPILÁTORU", + "Call_decorator_expression_90028": "Zavolat výraz dekorátoru", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Návratové typy signatury volání {0} a {1} nejsou kompatibilní.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Signatura volání s chybějící anotací návratového typu má implicitně návratový typ any.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Signatury volání bez argumentů mají nekompatibilní návratové typy {0} a {1}.", + "Call_target_does_not_contain_any_signatures_2346": "Cíl volání neobsahuje žádné signatury.", + "Can_only_convert_logical_AND_access_chains_95142": "Převést se dají jen logické řetězy přístupu AND.", + "Can_only_convert_named_export_95164": "Lze převést pouze pojmenovaný export ", + "Can_only_convert_property_with_modifier_95137": "Převést se dá jenom vlastnost s modifikátorem.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Převést lze pouze zřetězení řetězců a řetězcové literály.", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "K {0}.{1} nelze získat přístup, protože {0} je typ, nikoli názvový prostor. Chtěli jste načíst typ vlastnosti {1} v {0} pomocí {0}[{1}]?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Když je povolena možnost „{0}“, nelze získat přístup k „{1}“ z jiného souboru bez kvalifikace. Místo toho použijte možnost „{2}“.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Když je povolená možnost „{0}“, nelze přistupovat k výčtům prostředí „const enum“.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Typ konstruktoru {0} se nedá přiřadit k typu konstruktoru {1}.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Abstraktní typ konstruktoru nejde přiřadit neabstraktnímu typu konstruktoru.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Do {0} se nedá přiřazovat, protože je to třída.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nejde přiřadit k vlastnosti {0}, protože je konstantní.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Do {0} se nedá přiřazovat, protože je to funkce.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Do {0} se nedá přiřazovat, protože je to obor názvů.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nejde přiřadit k vlastnosti {0}, protože je jen pro čtení.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Do {0} se nedá přiřazovat, protože je to výčet.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Do {0} se nedá přiřazovat, protože je to import.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nejde přiřadit k položce {0}, to není proměnná.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Není možné přiřazovat hodnoty do privátní metody {0}. Do privátních metod se nedá zapisovat.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Modul {0} se nedá rozšířit, protože se překládá do entity, která není modul.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modul {0} se nedá rozšířit, protože se překládá na entitu, která není modul.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Moduly nejde kompilovat pomocí možnosti {0}, pokud příznak --module nemá hodnotu amd nebo system.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Nejde vytvořit instance abstraktní třídy.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Iterace se nedá delegovat na hodnotu, protože metoda next jejího iterátoru očekává typ {1}, ale obsahující generátor vždy pošle {0}.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "{0} se nedá exportovat. Z modulu je možné exportovat jenom místní deklarace.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Třída {0} se nedá rozšířit. Konstruktor třídy je označený jako privátní.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Nejde rozšířit rozhraní {0}. Měli jste na mysli 'implements'?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Soubor tsconfig.json nejde najít v aktuálním adresáři: {0}", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Soubor tsconfig.json nejde najít v zadaném adresáři: {0}", + "Cannot_find_global_type_0_2318": "Globální typ {0} se nenašel.", + "Cannot_find_global_value_0_2468": "Globální hodnota {0} se nenašla.", + "Cannot_find_lib_definition_for_0_2726": "Nepovedlo se najít definici knihovny pro {0}.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nepovedlo se najít definici knihovny pro {0}. Neměli jste na mysli spíš {1}?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nepovedlo se najít modul {0}. Zvažte možnost importovat modul s příponou .json pomocí --resolveJsonModule.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nepovedlo se najít modul „{0}“. Nechtěli jste nastavit možnost „moduleResolution“ na „nodenext“ nebo přidat do možnosti „paths“ aliasy?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nepovedlo se najít modul {0} nebo jeho odpovídající deklarace typů.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Nelze najít deklarace modulu nebo typu pro import vedlejšího efektu {0}.", + "Cannot_find_name_0_2304": "Název {0} se nenašel.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Nepovedlo se najít název {0}. Měli jste na mysli {1}?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Název {0} se nedá najít. Měli jste na mysli člena instance this.{0}?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Název {0} se nedá najít. Měli jste na mysli statický člen {1}.{0}?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nelze najít název {0}. Nechtěli jste to napsat v asynchronní funkci?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{1}‘ nebo novější.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ tak, aby obsahovala ‚dom‘.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nepodařilo se najít název „{0}“. Potřebujete nainstalovat definice typů pro Bun? Zkuste použít „npm i --save-dev @types/bun“ a pak do pole typů v tsconfig přidejte „bun“.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste npm i --save-dev @types/jest nebo npm i --save-dev @types/mocha.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste ‚npm i --save-dev@ types/jest‘ nebo ‚npm i --save-dev @types/mocha‘ a pak do polí typů v tsconfig přidejte ‚jest‘ nebo ‚mocha‘.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro jQuery? Zkuste npm i --save-dev @types/jquery.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro jQuery? Zkuste ‚npm i --save-dev @types/jquery` a pak pro pole typů v tsconfig přidejte ‚jquery‘.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro Node? Zkuste npm i --save-dev @types/node.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro uzel? Zkuste ‚npm i --save-dev @types/node‘ a pak do pole typů v tsconfig přidejte ‚node‘.", + "Cannot_find_namespace_0_2503": "Nenašel se obor názvů {0}.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Obor názvů {0} nejde najít. Měli jste na mysli „{1}“?", + "Cannot_find_parameter_0_1225": "Nenašel se parametr {0}.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nenašla se společná cesta podadresářů pro vstupní soubory.", + "Cannot_find_type_definition_file_for_0_2688": "Nejde najít soubor definice pro {0}.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Soubory deklarací typů nejde importovat. Zvažte možnost místo {1} naimportovat {0}.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Proměnnou {0} s vnějším oborem nejde inicializovat ve stejném oboru jako deklaraci {1} s oborem bloku.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Nejde vyvolat objekt, který může být null.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Nejde vyvolat objekt, který může být null nebo nedefinovaný.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Nejde vyvolat objekt, který může být nedefinovaný.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale při destrukci pole se vždy pošle {0}.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale rozsah pole bude vždy posílat {0}.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Hodnota se nedá iterovat, protože metoda next jejího iterátoru očekává typ {1}, ale for-of bude vždy posílat {0}.", + "Cannot_move_statements_to_the_selected_file_95183": "Příkazy nelze přesunout do vybraného souboru.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Nelze přesunout do souboru, vybraný soubor je neplatný.", + "Cannot_read_file_0_5083": "Nejde přečíst soubor {0}.", + "Cannot_read_file_0_Colon_1_5012": "Nejde číst soubor {0}: {1}", + "Cannot_redeclare_block_scoped_variable_0_2451": "Nejde předeklarovat proměnnou bloku {0}.", + "Cannot_redeclare_exported_variable_0_2323": "Exportovanou proměnnou {0} není možné znovu deklarovat.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nejde předeklarovat identifikátor {0} v klauzuli catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nejde spustit volání funkce v poznámce typu.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Pokud se nezadá příznak -jsx, nepůjde JSX použít.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Když se povolená možnost „{0}“, nelze pro obor názvů typů nebo obor názvů „pouze typ“ použít „export import“.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nejde používat importy, exporty nebo rozšíření modulu, pokud má příznak --module hodnotu none.", + "Cannot_use_namespace_0_as_a_type_2709": "Obor názvů {0} nejde použít jako typ.", + "Cannot_use_namespace_0_as_a_value_2708": "Obor názvů {0} nejde použít jako hodnotu.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Klíčové slovo „this“ nejde použít v inicializátoru statické vlastnosti dekorované třídy.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Soubor {0} se nedá zapsat, protože přepíše soubor .tsbuildinfo vygenerovaný odkazovaným projektem {1}.", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Do souboru {0} se nedá zapisovat, protože by se přepsal více vstupními soubory.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Do souboru {0} se nedá zapisovat, protože by přepsal vstupní soubor.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Proměnná klauzule catch nemůže mít inicializátor.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Pokud se zadá typ proměnné klauzule catch, jeho anotace musí být any nebo unknown.", + "Change_0_to_1_90014": "Změnit {0} na {1}", + "Change_all_extended_interfaces_to_implements_95038": "Změnit všechna rozšířená rozhraní na implements", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Změnit všechny typy jsdoc-style na TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Změnit všechny typy jsdoc-style na TypeScript (a přidat | undefined do typů s možnou hodnotou null)", + "Change_extends_to_implements_90003": "Změnit extends na implements", + "Change_spelling_to_0_90022": "Změnit pravopis na {0}", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Zkontrolujte vlastnosti třídy, které sice jsou deklarované, ale nejsou nastavené v konstruktoru.", + "Check_side_effect_imports_6806": "Zkontrolujte importy typu „side effect“.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Zkontrolujte, jestli argumenty metod bind, call a apply odpovídají původní funkci.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Kontroluje se, jestli je {0} nejdelší odpovídající předpona pro {1}–{2}.", + "Circular_definition_of_import_alias_0_2303": "Cyklická definice aliasu importu {0}", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Při překladu konfigurace se zjistila cykličnost: {0}.", + "Circularity_originates_in_type_at_this_location_2751": "Zdrojem cykličnosti je typ na tomto umístění.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Třída {0} definuje členský přístupový objekt instance {1}, ale rozšířená třída {2} ho definuje jako členskou funkci instance.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Třída {0} definuje členskou funkci instance {1}, ale rozšířená třída {2} ji definuje jako členský přístupový objekt instance.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Třída {0} definuje vlastnost člena instance {1}, ale rozšířená třída {2} ji definuje jako členskou funkci instance.", + "Class_0_incorrectly_extends_base_class_1_2415": "Třída {0} nesprávně rozšiřuje základní třídu {1}.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Třída {0} nesprávně implementuje třídu {1}. Nechtěli jste rozšířit třídu {1} a dědit její členy jako podtřídu?", + "Class_0_incorrectly_implements_interface_1_2420": "Třída {0} nesprávně implementuje rozhraní {1}.", + "Class_0_used_before_its_declaration_2449": "Třída {0} se používá dříve, než se deklaruje.", + "Class_constructor_may_not_be_a_generator_1368": "Konstruktor třídy nemůže být generátor.", + "Class_constructor_may_not_be_an_accessor_1341": "Konstruktor třídy nemůže být přístupový objekt.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklarace třídy nemůže implementovat seznam přetížení pro {0}.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku ‚@augments‘ nebo ‚@extends‘.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekorátory tříd se nedají použít se statickým privátním identifikátorem. Zvažte možnost odebrat experimentální dekorátor.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole třídy „{0}“ definované nadřazenou třídou není v podřízené třídě přístupné přes třídu typu super.", + "Class_name_cannot_be_0_2414": "Třída nemůže mít název {0}.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Když se cílí na ES5 a výše s modulem {0}, název třídy nemůže být Object.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Statická strana třídy {0} nesprávně rozšiřuje statickou stranu základní třídy {1}.", + "Classes_can_only_extend_a_single_class_1174": "Třídy můžou rozšířit jenom jednu třídu.", + "Classes_may_not_have_a_field_named_constructor_18006": "Třídy nemůžou mít pole s názvem constructor.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Kód obsažený ve třídě se vyhodnocuje ve striktním režimu jazyka JavaScript, který toto použití {0} nepovoluje. Další informace najdete tady: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode", + "Command_line_Options_6171": "Možnosti příkazového řádku", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Zkompilujte projekt podle cesty k jeho konfiguračnímu souboru nebo do složky se souborem tsconfig.json.", + "Compiler_Diagnostics_6251": "Diagnostika kompilátoru", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Možnost kompilátoru „{0}“ nemůže mít prázdný řetězec.", + "Compiler_option_0_expects_an_argument_6044": "Parametr kompilátoru {0} očekává argument.", + "Compiler_option_0_may_not_be_used_with_build_5094": "Možnost kompilátoru „--{0}“ se nesmí používat s „--build“.", + "Compiler_option_0_may_only_be_used_with_build_5093": "Možnost kompilátoru „--{0}“ se smí používat jenom s „--build“.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Možnost kompilátoru {0} hodnoty {1} je nestabilní. Ke ztlumení této chyby použijte noční TypeScript. Zkuste provést aktualizaci pomocí příkazu npm install -D typescript@next.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Parametr kompilátoru {0} vyžaduje hodnotu typu {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilátor si rezervuje název {0} při generování privátního identifikátoru pro nižší úroveň.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Zkompiluje projekt TypeScriptu umístěný v zadané cestě.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Zkompiluje aktuální projekt (tsconfig.json v pracovním adresáři).", + "Compiles_the_current_project_with_additional_settings_6929": "Zkompiluje aktuální projekt s dalšími nastaveními.", + "Completeness_6257": "Úplnost", + "Composite_projects_may_not_disable_declaration_emit_6304": "Složené projekty nemůžou zakázat generování deklarací.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Složené projekty nemůžou zakázat přírůstkovou kompilaci.", + "Computed_from_the_list_of_input_files_6911": "Vypočítáno ze seznamu vstupních souborů", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Počítané vlastnosti musí být číselné nebo řetězcové literály, proměnné nebo výrazy s tečkami s možností --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Názvy počítaných vlastností se ve výčtech nepovolují.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Názvy počítaných vlastností v literálech třídy nebo objektu nelze odvodit pomocí možnosti --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Ve výčtu, jehož členy mají hodnoty typu string, se nepovolují vypočítané hodnoty.", + "Concatenate_and_emit_output_to_single_file_6001": "Zřetězit a generovat výstup do jednoho souboru", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Podmínky, které se mají nastavit kromě výchozích hodnot specifických pro překladač při překladu importů.", + "Conflicts_are_in_this_file_6201": "V tomto souboru se nacházejí konflikty.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Zvažte přidání modifikátoru „declare“ do této třídy.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Návratové typy signatury konstruktu {0} a {1} nejsou kompatibilní.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Podpis konstruktoru s chybějící anotací návratového typu má implicitně návratový typ any.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Signatury konstruktů bez argumentů mají nekompatibilní návratové typy {0} a {1}.", + "Constructor_implementation_is_missing_2390": "Chybí implementace konstruktoru.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Konstruktor třídy {0} je privátní a dostupný jenom v rámci deklarace třídy.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor třídy {0} je chráněný a dostupný jenom v rámci deklarace třídy.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Když se notace typu konstruktoru používá v typu sjednocení, musí být uzavřená do závorky.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Když se notace typu konstruktoru používá v typu průniku, musí být uzavřená do závorky.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory odvozených tříd musí obsahovat volání příkazu super.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Není zadaný obsažený soubor a nedá se určit kořenový adresář – přeskakuje se vyhledávání ve složce node_modules.", + "Containing_function_is_not_an_arrow_function_95128": "Obsahující funkce není funkcí šipky.", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Určete, která metoda se používá k detekci souborů JS ve formátu modulu.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Převod typu {0} na typ {1} může být chyba, protože ani jeden z těchto typů se s tím druhým dostatečně nepřekrývá. Pokud je to záměr, převeďte nejdříve výraz na unknown.", + "Convert_0_to_1_in_0_95003": "Převést {0} na {1} v {0}", + "Convert_0_to_mapped_object_type_95055": "Převést {0} na typ mapovaného objektu", + "Convert_all_const_to_let_95102": "Převést všechny const na let", + "Convert_all_constructor_functions_to_classes_95045": "Převést všechny funkce konstruktoru na třídy", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Převést všechny neplatné znaky na kód entity HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Převést všechny opětovně exportované typy na exporty, při kterých se exportují jen typy", + "Convert_all_require_to_import_95048": "Převést všechna volání require na import", + "Convert_all_to_async_functions_95066": "Převést vše na asynchronní funkce", + "Convert_all_to_bigint_numeric_literals_95092": "Převést vše na číselné literály bigint", + "Convert_all_to_default_imports_95035": "Převést vše na výchozí importy", + "Convert_all_type_literals_to_mapped_type_95021": "Převést všechny literály typů na namapovaný typ", + "Convert_all_typedef_to_TypeScript_types_95177": "Převeďte všechny typy typedef na typy TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Převést funkci šipky nebo výraz funkce", + "Convert_const_to_let_95093": "Převést const na let", + "Convert_default_export_to_named_export_95061": "Převést výchozí export na pojmenovaný export", + "Convert_function_declaration_0_to_arrow_function_95106": "Převést deklaraci funkce {0} na funkci šipky", + "Convert_function_expression_0_to_arrow_function_95105": "Převést výraz funkce {0} na funkci šipky", + "Convert_function_to_an_ES2015_class_95001": "Převést funkci na třídu ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Převést neplatný znak na jeho kód entity HTML", + "Convert_named_export_to_default_export_95062": "Převést pojmenovaný export na výchozí export", + "Convert_named_imports_to_default_import_95170": "Převést pojmenované importy na výchozí import", + "Convert_named_imports_to_namespace_import_95057": "Převést pojmenované importy na import oboru názvů", + "Convert_namespace_import_to_named_imports_95056": "Převést import oboru názvů na pojmenované importy", + "Convert_overload_list_to_single_signature_95118": "Převést seznam přetížení na jednu signaturu", + "Convert_parameters_to_destructured_object_95075": "Převést parametry na destrukturovaný objekt", + "Convert_require_to_import_95047": "Převést require na import", + "Convert_to_ES_module_95017": "Převést na modul ES", + "Convert_to_a_bigint_numeric_literal_95091": "Převést na číselný literál bigint", + "Convert_to_anonymous_function_95123": "Převést na anonymní funkci", + "Convert_to_arrow_function_95125": "Převést na funkci šipky", + "Convert_to_async_function_95065": "Převést na asynchronní funkci", + "Convert_to_default_import_95013": "Převést na výchozí import", + "Convert_to_named_function_95124": "Převést na pojmenovanou funkci", + "Convert_to_optional_chain_expression_95139": "Převést na nepovinný výraz řetězu.", + "Convert_to_template_string_95096": "Převést na řetězec šablony", + "Convert_to_type_only_export_1364": "Převést na export, při kterém se exportují jen typy", + "Convert_typedef_to_TypeScript_type_95176": "Převeďte typedef na typ TypeScript.", + "Corrupted_locale_file_0_6051": "Soubor národního prostředí {0} je poškozený.", + "Could_not_convert_to_anonymous_function_95153": "Nepovedlo se převést na anonymní funkci.", + "Could_not_convert_to_arrow_function_95151": "Nepovedlo se převést na funkci šipky.", + "Could_not_convert_to_named_function_95152": "Nepovedlo se převést na pojmenovanou funkci.", + "Could_not_determine_function_return_type_95150": "Nepovedlo se určit návratový typ funkce.", + "Could_not_find_a_containing_arrow_function_95127": "Nepovedlo se najít obsahující funkci šipky.", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nenašel se soubor deklarací pro modul {0}. {1} má implicitně typ any.", + "Could_not_find_convertible_access_expression_95140": "Nepovedlo se najít převoditelný výraz přístupu.", + "Could_not_find_export_statement_95129": "Nešlo najít příkaz export.", + "Could_not_find_import_clause_95131": "Nešlo najít klauzuli import.", + "Could_not_find_matching_access_expressions_95141": "Nepovedlo se najít odpovídající výrazy přístupu.", + "Could_not_find_name_0_Did_you_mean_1_2570": "Nepodařilo se najít název {0}. Měli jste na mysli {1}?", + "Could_not_find_namespace_import_or_named_imports_95132": "Nepovedlo se najít import oboru názvů nebo pojmenované importy.", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Nepovedlo se najít vlastnost, pro kterou se má vygenerovat přístupový objekt.", + "Could_not_find_variable_to_inline_95185": "Nepodařilo se najít proměnnou, která se má vložit.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nepovedlo se přeložit cestu {0} s příponami {1}.", + "Could_not_write_file_0_Colon_1_5033": "Nedá se zapisovat do souboru {0}: {1}", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Vytvořte pro generované soubory JavaScriptu soubory sourcemap.", + "Create_sourcemaps_for_d_ts_files_6614": "Pro soubory d.ts vytvořte soubory sourcemap.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Vytvoří tsconfig.json doporučenými nastaveními v pracovním adresáři.", + "DIRECTORY_6038": "ADRESÁŘ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Desítkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Desetinná čísla s úvodními nulami nejsou povolena.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklarace rozšiřuje deklaraci v jiném souboru. Toto není možné serializovat.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Generování deklarace pro tento soubor vyžaduje zachování tohoto importu pro rozšíření. Toto není podporováno s možností --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0}. Explicitní anotace typu může generování deklarací odblokovat.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0} z modulu {1}. Explicitní anotace typu může generování deklarací odblokovat.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Generování deklarace pro tento parametr vyžaduje implicitní přidání možnosti „undefined“ do jeho typu. Není podporováno s možností „--isolatedDeclarations“.", + "Declaration_expected_1146": "Očekává se deklarace.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Název deklarace je v konfliktu s integrovaným globálním identifikátorem {0}.", + "Declaration_or_statement_expected_1128": "Očekává se deklarace nebo příkaz.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Očekávala se deklarace nebo příkaz. Tento znak = následuje blok příkazů, takže pokud jste chtěli napsat destrukturační přiřazení, možná bude nutné uzavřít celé přiřazení do závorek.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarace s kontrolními výrazy jednoznačného přiřazení musí mít také anotace typu.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarace s inicializátory nemůžou mít také kontrolní výrazy jednoznačného přiřazení.", + "Declare_a_private_field_named_0_90053": "Deklarovat privátní pole s názvem {0}", + "Declare_method_0_90023": "Deklarovat metodu {0}", + "Declare_private_method_0_90038": "Deklarovat privátní metodu {0}", + "Declare_private_property_0_90035": "Deklarujte privátní vlastnost {0}.", + "Declare_property_0_90016": "Deklarovat vlastnost {0}", + "Declare_static_method_0_90024": "Deklarovat statickou metodu {0}", + "Declare_static_property_0_90027": "Deklarovat statickou vlastnost {0}", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Návratový typ funkce dekoratéru {0} se nedá přiřadit k typu {1}.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Návratový typ funkce dekoratéru je {0}, ale očekává se, že bude void nebo any.", + "Decorator_used_before_export_here_1486": "Dekoratér je tu použit před možností „export“.", + "Decorators_are_not_valid_here_1206": "Dekorátory tady nejsou platné.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekorátory nejde použít na víc přístupových objektů get/set se stejným názvem.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratéry se nemůžou vyskytovat po „export“ nebo „export default“, pokud se taky vyskytují před možností „export“.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratéry musí předcházet název a všechna klíčová slova deklarace vlastností.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Výchozí proměnné klauzule catch jako unknown namísto any.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Výchozí export modulu má nebo používá privátní název {0}.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Výchozí exporty nelze odvodit pomocí --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Výchozí importy nejsou v odloženém importu povolené.", + "Default_library_1424": "Výchozí knihovna", + "Default_library_for_target_0_1425": "Výchozí knihovna pro cíl {0}", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Odložené importy jsou podporovány pouze v případě, že je příznak --module nastaven na hodnotu esnext nebo preserve.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definice následujících identifikátorů je v konfliktu s definicemi v jiném souboru: {0}", + "Delete_all_unused_declarations_95024": "Odstranit všechny nepoužívané deklarace", + "Delete_all_unused_imports_95147": "Odstranit všechny nepoužívané importy", + "Delete_all_unused_param_tags_95172": "Odstranit všechny nepoužívané značky @param", + "Delete_the_outputs_of_all_projects_6365": "Odstraňte výstupy všech projektů.", + "Delete_unused_param_tag_0_95171": "Odstranit nepoužívanou značku @param {0}", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Zastaralé] Použijte místo toho --jsxFactory. Určí objekt vyvolaný pro createElement při cílení na generování JSX react.", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Zastaralé] Použijte místo toho --outFile. Zřetězí a vygeneruje výstup do jednoho souboru.", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Zastaralé] Použijte místo toho --skipLibCheck. Přeskočí kontrolu typů výchozích souborů deklarací knihovny.", + "Deprecated_setting_Use_outFile_instead_6677": "Nastavení je zastaralé. Místo něj použijte outFile.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Nezapomněli jste použít await?", + "Did_you_mean_0_1369": "Měli jste na mysli {0}?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Měli jste na mysli omezení {0} na typ new (...args: any[]) => {1}?", + "Did_you_mean_to_call_this_expression_6212": "Nechtěli jste zavolat tento výraz?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Nechtěli jste označit tuto funkci jako async?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Neměli jste v úmyslu použít znak :? Znak = může následovat pouze po názvu vlastnosti, když je obsahující objekt literálu součástí vzoru destrukturalizace.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Nechtěli jste u tohoto výrazu použít new?", + "Digit_expected_1124": "Očekává se číslice.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Adresář {0} neexistuje. Všechna vyhledávání v něm se přeskočí.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Adresář {0} neobsahuje package.json scope. Importy nebudou vyřešeny.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "V generovaných souborech JavaScriptu zakažte přidávání direktiv „use strict“.", + "Disable_checking_for_this_file_90018": "Zakázat kontrolu tohoto souboru", + "Disable_emitting_comments_6688": "Zakázat generování komentářů.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Zakažte generování deklarací s příznakem „@internal“ v komentářích JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Zakažte generování souborů z kompilace.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Zakažte generování souborů, pokud jsou při kontrole typů nahlášeny jakékoli chyby.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Zakažte v generovaném kódu mazání deklarací const enum.", + "Disable_error_reporting_for_unreachable_code_6603": "Zakažte hlášení chyb, pokud je kód nedosažitelný.", + "Disable_error_reporting_for_unused_labels_6604": "Zakažte hlášení chyb u nepoužitých popisků.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Zakažte úplnou kontrolu typů (budou hlášeny pouze kritické chyby analýzy a generování).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Zakázat v kompilovaném výstupu generování vlastních pomocných funkcí, jako je __extends.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Zakažte zahrnutí všech souborů knihoven, včetně výchozí lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Zakažte načítání odkazovaných projektů.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Zakažte v odkazech na složené projekty místo deklaračních souborů používat preferované zdrojové soubory.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Zakažte při vytváření literálů objektů hlášení zbytečně velkého počtu chyb vlastností.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Zakažte překlad odkazů symlink na jejich skutečnou cestu (realpath). Toto nastavení koreluje se stejným příznakem uzlu.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Zakázat omezení velikosti v projektech JavaScriptu", + "Disable_solution_searching_for_this_project_6224": "Zakažte vyhledávání řešení pro tento projekt.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Zakáže striktní kontroly generických signatur v typech funkcí.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Zakázat v javascriptových projektech získávání typů", + "Disable_truncating_types_in_error_messages_6663": "Zakázat v chybových zprávách zkracování typů.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Zakažte možnost používat zdrojové soubory místo souborů deklarací z odkazovaných projektů.", + "Disable_wiping_the_console_in_watch_mode_6684": "Zakažte vymazání konzole v režimu sledování.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Při získávání typů se zakáže odvozování. Názvy souborů se vyhledají v projektu.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Zakázat import, require nebo zvětšování počtu souborů, které by typeScript měl přidat do projektu.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Zakažte odkazy na stejný soubor s nekonzistentně použitými malými a velkými písmeny.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nepřidávat odkazy se třemi lomítky nebo importované moduly do seznamu kompilovaných souborů", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Nepovolit konstruktory modulu runtime, které nejsou součástí ECMAScriptu", + "Do_not_emit_comments_to_output_6009": "Negenerovat komentáře pro výstup", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Negenerovat deklarace pro kód s anotací @internal", + "Do_not_emit_outputs_6010": "Negenerovat výstupy", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Negenerovat výstupy, pokud byly oznámeny chyby", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Negenerujte direktivy use strict ve výstupu modulu.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Nemazat deklarace konstantního výčtu v generovaném kódu", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Negenerovat v kompilovaném výstupu vlastní pomocné funkce jako __extends", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Nezahrnovat výchozí soubor knihovny (lib.d.ts)", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Neoznamují se chyby v nedosažitelném kódu.", + "Do_not_report_errors_on_unused_labels_6074": "Neoznamují se chyby v nepoužívaných popiscích.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Nepřekládat skutečnou cestu symbolických odkazů", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Netransformujte ani nevynechávejte žádné importy nebo exporty, které nejsou označeny jako „pouze typ“, a zajistěte, aby byly zapsány ve formátu výstupního souboru podle nastavení „module“.", + "Do_not_truncate_error_messages_6165": "Nezkracovat chybové zprávy", + "Duplicate_function_implementation_2393": "Duplicitní implementace funkce", + "Duplicate_identifier_0_2300": "Duplicitní identifikátor {0}", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Duplicitní identifikátor {0}. Kompilátor si vyhrazuje název {1} v oboru nejvyšší úrovně pro daný modul.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1} v oboru nejvyšší úrovně modulu, který obsahuje asynchronní funkce.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1}, když se generují odkazy super ve statických inicializátorech.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Duplicitní identifikátor {0}. Kompilátor používá deklaraci {1} pro podporu asynchronních funkcí.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Duplicitní identifikátor {0}. Statické elementy a elementy instancí nemůžou sdílet stejný privátní název.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Duplicitní identifikátor arguments. Kompilátor pomocí identifikátoru arguments inicializuje parametry rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Duplicitní identifikátor _newTarget. Kompilátor používá deklaraci proměnné _newTarget k zachycení odkazu na metavlastnost new.target.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Duplicitní identifikátor _this. Kompilátor pomocí deklarace proměnné _this zaznamenává odkaz na příkaz this.", + "Duplicate_index_signature_for_type_0_2374": "Duplicitní signatura indexu pro typ {0}.", + "Duplicate_label_0_1114": "Duplicitní popisek {0}", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Duplicitní vlastnost {0}.", + "Duplicate_regular_expression_flag_1500": "Duplikovaný příznak regulárního výrazu", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specifikátor dynamického importu musí být typu string, ale tady má typ {0}.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamické importy se podporují jenom v případě, že je příznak --module nastavený na es2020, es2022, esnext, commonjs, amd, system, umd, node16, node18, node20 nebo nodenext.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamické importy můžou jako argumenty přijímat jenom specifikátor modulu a volitelnou sadu atributů.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dynamické importy podporují druhý argument, pouze pokud je možnost --module nastavena na esnext, node16, node18, node20, nodenext nebo preserve.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importy a exporty ECMAScript nelze zapsat do souboru CommonJS v části verbatimModuleSyntax.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importy a exporty ECMAScript nelze zapsat do souboru CommonJS v části verbatimModuleSyntax. Upravte pole type v nejbližším souboru package.json tak, aby tento soubor byl modulem ECMAScript, případně upravte nastavení verbatimModuleSyntax, module a moduleResolution v TypeScriptu.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Syntaxe modulu ECMAScript není v modulu CommonJS povolená, pokud je možnost module nastavená na preserve.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Každá deklarace „{0}.{1}“ se liší ve své hodnotě. Bylo očekáváno „{2}“, ale zadáno bylo „{3}“.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Každý člen typu sjednocení {0} má signatury konstruktu, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Každý člen typu sjednocení {0} má signatury, ale žádná z těchto signatur není kompatibilní s jinou signaturou.", + "Editor_Support_6249": "Podpora editoru", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element má implicitně typ any, protože pomocí výrazu typu {0} není možné indexovat typ {1}.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element má implicitně typ any, protože indexový výraz není typu number.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu. Nechtěli jste zavolat {1}?", + "Emit_6246": "Generovat", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Generovat pole třídy ECMAScript-standard-compliant.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Vygeneruje na začátku výstupních souborů značku pořadí bajtů ve formátu UTF-8.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Vygeneruje jediný soubor se zdrojovými mapováními namísto samostatného souboru.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Vygenerujte profil procesoru v8 spuštěného kompilátoru pro ladění.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Vygenerujte další JavaScript, aby se podpora importování modulů CommonJS ulehčila. Tím se za účelem kompatibility typů povolí „allowSyntheticDefaultImports“.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Vygenerujte pole třídy pomocí Define namísto Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Vygenerujte metadata o typu návrhu pro dekorované deklarace ve zdrojových souborech.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Generovat kompatibilnější kód, ale při iteraci použít režim s komentářem (verbose) a méně výkonný JavaScript.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Vygeneruje zdroj spolu se zdrojovými mapováními v jednom souboru. Vyžaduje, aby byla nastavená možnost --inlineSourceMap nebo --sourceMap.", + "Enable_all_strict_type_checking_options_6180": "Povolí všechny možnosti striktní kontroly typů.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Povolte ve výstupu TypeScriptu barvu a formátování, aby byly chyby kompilátoru čitelnější.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Povolte omezení, která v projektu TypeScriptu umožní používat odkazy na projekt.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Povolte hlášení chyb u cest kódu, které funkce výslovně nevrátí.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Povolte hlášení chyb u výrazů a deklarací s implicitním typem any.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Povolit hlášení chyb v příkazech switch v případě fallthrough.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Povolit hlášení chyb v javascriptových souborech se zkontrolovanými typy.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Povolte hlášení chyb, když se místní proměnná nepřečte.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Povolte hlášení chyb, když má „this“ určený typ „any“.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Povolte experimentální podporu pro starší experimentální dekoratéry.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Povolte import souborů s libovolnou příponou za předpokladu, že je k dispozici soubor deklarace.", + "Enable_importing_json_files_6689": "Povolte importování souborů .json.", + "Enable_lib_replacement_6808": "Povolit nahrazení knihovny", + "Enable_project_compilation_6302": "Povolit kompilování projektu", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Povolte ve funkcích metody bind, call a apply.", + "Enable_strict_checking_of_function_types_6186": "Povolí striktní kontrolu typů funkcí.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Povolí striktní kontrolu inicializace vlastností ve třídách.", + "Enable_strict_null_checks_6113": "Povolte striktní kontroly hodnot null.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Povolte v konfiguračním souboru možnost experimentalDecorators.", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Povolte v konfiguračním souboru příznak --jsx.", + "Enable_tracing_of_the_name_resolution_process_6085": "Povolte trasování procesu překladu IP adres.", + "Enable_verbose_logging_6713": "Povolte podrobné protokolování.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Povolí interoperabilitu generování mezi moduly CommonJS a ES prostřednictvím vytváření objektů oboru názvů pro všechny importy. Implikuje allowSyntheticDefaultImports.", + "Enables_experimental_support_for_ES7_decorators_6065": "Povolí experimentální podporu pro dekorátory ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Povolí experimentální podporu pro generování metadat typu pro dekorátory.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Vynucuje použití indexovaných přístupových objektů pro klíče deklarované přes indexovaný typ.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Zajistěte označení přepisovaných členů v odvozených třídách modifikátorem override.", + "Ensure_that_casing_is_correct_in_imports_6637": "Při importu ověřovat správnost používání malých a velkých písmen.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Zajistit bezpečnou transpilaci všech souborů bez spoléhání na jiné importy.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Vždy zajistěte generování direktivy „use strict“.", + "Entering_conditional_exports_6413": "Vstup do podmíněných exportů", + "Entry_point_for_implicit_type_library_0_1420": "Vstupní bod pro knihovnu implicitních typů {0}", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Vstupní bod pro knihovnu implicitních typů {0} s packageId {1}", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions s packageId {1}", + "Enum_0_used_before_its_declaration_2450": "Výčet {0} se používá dříve, než se deklaruje.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklarace výčtu jdou sloučit jenom s oborem názvů nebo jinými deklaracemi výčtu.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Všechny deklarace výčtu musí být konstantní nebo nekonstantní.", + "Enum_member_expected_1132": "Očekává se člen výčtu.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Když je povolená možnost „isolatedModules“, musí mít člen výčtu následující po neliterálovém číselném členu inicializátor.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicializátory členů výčtu musí být počítatelné bez odkazů na externí symboly s možností „--isolatedDeclarations“.", + "Enum_member_must_have_initializer_1061": "Člen výčtu musí mít inicializátor.", + "Enum_name_cannot_be_0_2431": "Název výčtu nemůže být {0}.", + "Environment_Settings_6285": "Nastavení prostředí", + "Errors_Files_6041": "Soubory chyb", + "Escape_sequence_0_is_not_allowed_1488": "Řídicí sekvence „{0}“ není povolená.", + "Examples_Colon_0_6026": "Příklady: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Nadměrná složitost při porovnávání typů „{0}“ a „{1}“.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadměrná hloubka zásobníku při porovnávání typů {0} a {1}", + "Exiting_conditional_exports_6416": "Opuštění podmíněných exportů.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Očekávané argumenty typu {0}–{1}; zadejte je se značkou @extends.", + "Expected_0_arguments_but_got_1_2554": "Očekával se tento počet argumentů: {0}. Počet předaných argumentů: {1}", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Očekával se tento počet argumentů: {0}, ale byl přijat tento počet: {1}. Nezapomněli jste zahrnout void do argumentu typu pro objekt Promise?", + "Expected_0_type_arguments_but_got_1_2558": "Očekávaly se argumenty typu {0}, ale předaly se argumenty typu {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Očekávané argumenty typu {0}; zadejte je se značkou @extends.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Očekával se 1 argument, ale bylo jich 0. New Promise() potřebuje pomocný parametr JSDoc k vytvoření resolve, který se dá volat bez argumentů.", + "Expected_a_Unicode_property_name_1523": "Byl očekáván název vlastnosti Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Byl očekáván název nebo hodnota vlastnosti Unicode.", + "Expected_a_Unicode_property_value_1525": "Byla očekávána hodnota vlastnosti Unicode.", + "Expected_a_capturing_group_name_1514": "Byl očekáván název zachycující skupiny.", + "Expected_a_class_set_operand_1520": "Byl očekáván operand nastavení třídy.", + "Expected_at_least_0_arguments_but_got_1_2555": "Očekával se aspoň tento počet argumentů: {0}. Počet předaných argumentů: {1}", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Očekávala se odpovídající ukončující značka JSX pro {0}.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Pro fragment JSX se očekávala odpovídající uzavírací značka.", + "Expected_for_property_initializer_1442": "Pro inicializátor vlastnosti se očekával znak =.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Očekávaný typ pole {0} v souboru package.json byl {1}, získal se typ {2}.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explicitně zadaný druh překladu modulu: {0}.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Pokud není možnost target nastavená na es2016 nebo novější, nedají se hodnoty bigint umocnit.", + "Export_0_from_module_1_90059": "Exportovat {0} z modulu {1}", + "Export_all_referenced_locals_90060": "Exportovat všechny odkazované místní hodnoty", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Přiřazení exportu nelze použít, pokud jsou cílem moduly ECMAScript. Zkuste místo toho použít export default nebo jiný formát modulu.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Když má příznak --module hodnotu system, nepodporuje se přiřazení exportu.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Konflikty deklarace exportu s exportovanou deklarací {0}", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Deklarace exportu nejsou povolené v oboru názvů.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Specifikátor exportu {0} neexistuje v package.json scope na cestě {1}.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias exportovaného typu {0} má nebo používá privátní název {1}.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Alias exportovaného typu {0} má nebo používá privátní název {1} z modulu {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Exportovaná proměnná {0} má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Exportovaná proměnná {0} má nebo používá název {1} z privátního modulu {2}.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Exportovaná proměnná {0} má nebo používá privátní název {1}.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporty a přiřazení exportů nejsou povolené v rozšířeních modulů.", + "Expression_expected_1109": "Očekával se výraz.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Výraz musí být uzavřen v závorkách, aby se mohl používat jako dekoratér.", + "Expression_or_comma_expected_1137": "Očekával se výraz nebo čárka.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Výraz vytvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Výraz vytvoří typ sjednocení, který se nedá reprezentovat, protože je příliš složitý.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Výraz se přeloží na identifikátor _super, pomocí kterého kompilátor zaznamenává odkaz na základní třídu.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Výraz se vyhodnocuje na deklaraci proměnné _newTarget, kterou kompilátor používá k zachycení odkazu na metavlastnost new.target.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Výraz se přeloží na deklaraci proměnné _this, pomocí které kompilátor zaznamenává odkazy na příkaz this.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Typ výrazu nejde odvodit pomocí --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzule Extends nemůže obsahovat výraz s možností „--isolatedDeclarations“.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzule extends pro odvozený typ „{0}“ má nebo používá privátní název „{1}“.", + "Extract_base_class_to_variable_90064": "Extrahovat základní třídu do proměnné", + "Extract_binding_expressions_to_variable_90066": "Extrahujte výrazy s vazbami do proměnné", + "Extract_constant_95006": "Extrahovat konstantu", + "Extract_default_export_to_variable_90065": "Extrahovat výchozí export do proměnné", + "Extract_function_95005": "Extrahovat funkci", + "Extract_to_0_in_1_95004": "Extrahovat do {0} v {1}", + "Extract_to_0_in_1_scope_95008": "Extrahovat do {0} v oboru {1}", + "Extract_to_0_in_enclosing_scope_95007": "Extrahovat do {0} v nadřazeném oboru", + "Extract_to_interface_95090": "Extrahovat do rozhraní", + "Extract_to_type_alias_95078": "Extrahovat do aliasu typu", + "Extract_to_typedef_95079": "Extrahovat do typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrahovat do proměnné a nahradit pomocí „{0} as typeof {0}“", + "Extract_type_95077": "Typ extrahování", + "FILE_6035": "SOUBOR", + "FILE_OR_DIRECTORY_6040": "SOUBOR NEBO ADRESÁŘ", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Nepodařilo se najít peerDependency „{0}“.", + "Failed_to_resolve_under_condition_0_6415": "Nepodařilo se přeložit za podmínky „{0}“.", + "Fallthrough_case_in_switch_7029": "Případ Fallthrough v příkazu switch", + "File_0_does_not_exist_6096": "Soubor {0} neexistuje.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Podle dřívějších vyhledávání v mezipaměti soubor {0} neexistuje.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Podle dřívějších vyhledávání v mezipaměti soubor {0} existuje.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Soubor „{0}“ existuje – použijte ho jako výsledek překladu IP adres.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Soubor {0} má nepodporovanou příponu. Jediné podporované přípony jsou {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Soubor {0} je javascriptový soubor. Nechtěli jste povolit možnost allowJs?", + "File_0_is_not_a_module_2306": "Soubor {0} není modul.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Soubor {0} není uvedený na seznamu souborů projektu {1}. Projekty musí uvádět všechny soubory nebo používat vzor include.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Soubor {0} není pod kořenovým adresářem rootDir {1}. Očekává se, že rootDir bude obsahovat všechny zdrojové soubory.", + "File_0_not_found_6053": "Soubor {0} se nenašel.", + "File_Layout_6284": "Rozložení souboru", + "File_Management_6245": "Správa souborů", + "File_appears_to_be_binary_1490": "Zdá se, že soubor je binární.", + "File_change_detected_Starting_incremental_compilation_6032": "Zjistila se změna souboru. Spouští se přírůstková kompilace...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Soubor je modul CommonJS, protože {0} nemá pole type", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Soubor je modul CommonJS, protože {0} má pole type, jehož hodnota není module", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Soubor je modul CommonJS, protože se nenašel package.json", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Soubor je modul ECMAScript, protože {0} má pole type s hodnotou module", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Soubor je modul CommonJS; může být převeden na modul ES.", + "File_is_default_library_for_target_specified_here_1426": "Soubor je výchozí knihovna pro cíl, který se zadal na tomto místě.", + "File_is_entry_point_of_type_library_specified_here_1419": "Soubor je vstupní bod knihovny typů, která se zadala na tomto místě.", + "File_is_included_via_import_here_1399": "Soubor se zahrnuje pomocí importu na tomto místě.", + "File_is_included_via_library_reference_here_1406": "Soubor se zahrnuje pomocí odkazu na knihovnu na tomto místě.", + "File_is_included_via_reference_here_1401": "Soubor se zahrnuje pomocí odkazu na tomto místě.", + "File_is_included_via_type_library_reference_here_1404": "Soubor se zahrnuje pomocí odkazu na knihovnu typů na tomto místě.", + "File_is_library_specified_here_1423": "Soubor je knihovna zadaná na tomto místě.", + "File_is_matched_by_files_list_specified_here_1410": "Soubor se srovnává se seznamem files zadaným na tomto místě.", + "File_is_matched_by_include_pattern_specified_here_1408": "Soubor se srovnává podle vzoru zahrnutí zadaného na tomto místě.", + "File_is_output_from_referenced_project_specified_here_1413": "Soubor je výstup z odkazovaného projektu zadaného na tomto místě.", + "File_is_output_of_project_reference_source_0_1428": "Soubor je výstup zdroje odkazů na projekt {0}.", + "File_is_source_from_referenced_project_specified_here_1416": "Soubor je zdroj z odkazovaného projektu zadaného na tomto místě.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Název souboru {0} se od už zahrnutého názvu souboru {1} liší jenom velikostí písmen.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Název souboru „{0}“ má příponu „{1}“ – místo toho se hledá: „{2}“.", + "File_name_0_has_a_1_extension_stripping_it_6132": "Název souboru {0} má příponu {1} – odstraňuje se", + "File_redirects_to_file_0_1429": "Soubor se přesměrovává na soubor {0}.", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specifikace souboru nemůže obsahovat nadřazený adresář (..), který se vyskytuje za rekurzivním zástupným znakem adresáře (**): {0}.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specifikace souboru nemůže končit rekurzivním zástupným znakem adresáře (**): {0}.", + "Filters_results_from_the_include_option_6627": "Filtrovat výsledky možnosti „zahrnout“.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Opravit všechny zjištěné pravopisné chyby", + "Fix_all_expressions_possibly_missing_await_95085": "Opravit všechny výrazy, kde je možné, že chybí await", + "Fix_all_implicit_this_errors_95107": "Opravit všechny chyby implicit-'this'", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Opravit všechny nesprávné návratové typy asynchronních funkcí", + "Fix_all_with_type_only_imports_95182": "Opravit vše s importy „type-only“", + "For_nodejs_Colon_6287": "Pro nodejs:", + "Found_0_errors_6217": "Našel se tento počet chyb: {0}.", + "Found_0_errors_Watching_for_file_changes_6194": "Byl nalezen tento počet chyb: {0}. Sledují se změny souborů.", + "Found_0_errors_in_1_files_6261": "V {1} souborech byly nalezeny chyby ({0}).", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Ve stejném souboru byly nalezeny chyby ({0}). Začínají na: {1}", + "Found_1_error_6216": "Našla se 1 chyba.", + "Found_1_error_Watching_for_file_changes_6193": "Byla nalezena 1 chyba. Sledují se změny souborů.", + "Found_1_error_in_0_6259": "Našla se 1 chyba v {0}.", + "Found_package_json_at_0_6099": "Soubor package.json se našel v {0}.", + "Found_peerDependency_0_with_1_version_6282": "Nalezeno: peerDependency – „{0}“ s verzí „{1}“", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Definice tříd jsou automaticky ve striktním režimu.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklarace funkcí nejsou povolené uvnitř bloků ve striktním režimu, pokud je cíl „ES5“. Moduly jsou automaticky ve striktním režimu.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Výraz funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Implementace funkce chybí nebo nenásleduje hned po deklaraci.", + "Function_implementation_name_must_be_0_2389": "Název implementace funkce musí být {0}.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Funkce implicitně obsahuje návratový typ any, protože neobsahuje anotaci návratového typu a odkazuje se na ni přímo nebo nepřímo v jednom z jejích návratových výrazů.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Ve funkci chybí koncový příkaz return a návratový typ neobsahuje undefined.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkce musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", + "Function_not_implemented_95159": "Funkce není implementovaná.", + "Function_overload_must_be_static_2387": "Přetížení funkce musí být statické.", + "Function_overload_must_not_be_static_2388": "Přetížení funkce nesmí být statické.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Když se notace typu funkce používá v typu sjednocení, musí být uzavřená do závorky.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Když se notace typu funkce používá v typu průniku, musí být uzavřená do závorky.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Typ funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkce s těly se dá sloučit jenom s třídami, které jsou ambientní.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Vygenerujte ze souborů TypeScriptu a JavaScriptu projektu soubory d.ts.", + "Generate_get_and_set_accessors_95046": "Generovat přístupové objekty get a set", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generovat přístupové objekty get a set pro všechny přepisující vlastnosti", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Vygeneruje profil procesoru.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Pro každý odpovídající soubor .d.ts vygeneruje sourcemap.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Generuje trasování události a seznam typů.", + "Generates_corresponding_d_ts_file_6002": "Generuje odpovídající soubor .d.ts.", + "Generates_corresponding_map_file_6043": "Generuje odpovídající soubor .map.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Generátor má implicitně typ yield {0}. Zvažte možnost přidat anotaci návratového typu.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Generátory nejsou v ambientním kontextu povolené.", + "Generic_type_0_requires_1_type_argument_s_2314": "Obecný typ {0} vyžaduje argumenty typu {1}.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Obecný typ {0} vyžaduje konkrétní počet argumentů ({1} až {2}).", + "Global_module_exports_may_only_appear_at_top_level_1316": "Exporty globálního modulu se můžou objevit jenom na nejvyšší úrovni.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Exporty globálního modulu se můžou objevit jenom v souborech deklarací.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Exporty globálního modulu se můžou objevit jenom v souborech modulů.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Globální typ {0} musí být typu třída nebo rozhraní.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Globální typ {0} musí mít parametry typu {1}.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Opakované kompilace --incremental a --watch předpokládají, že změny v souboru budou mít vliv jen na soubory, které na něm přímo závisejí.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Opakované kompilace v projektech, které používají režimy „incremental“ a „watch“ předpokládají, že změny v souboru budou mít vliv pouze na soubory, které na daném souboru přímo závisejí.", + "Hexadecimal_digit_expected_1125": "Očekávala se šestnáctková číslice.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Očekával se identifikátor. {0} je vyhrazené slovo na nejvyšší úrovni modulu.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo. Definice tříd jsou automaticky ve striktním režimu.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo. Moduly jsou automaticky ve striktním režimu.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Očekává se identifikátor. {0} je rezervované slovo, které se tady nedá použít.", + "Identifier_expected_1003": "Očekával se identifikátor.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Očekává se identifikátor. __esModule je při transformaci modulů ECMAScript rezervované jako označení exportu.", + "Identifier_or_string_literal_expected_1478": "Očekává se identifikátor nebo řetězcový literál.", + "Identifier_string_literal_or_number_literal_expected_1496": "Očekával se identifikátor, řetězcový literál nebo číselný literál.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Pokud balíček ‚{0}‘ ve skutečnosti zveřejňuje tento modul, zvažte možnost poslat žádost o přijetí změn, aby se připojila adresa ‚https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}‘", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Pokud balíček {0} skutečně zpřístupňuje tento modul, zkuste přidat nový soubor deklarace (.d.ts), který obsahuje declare module {1};", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignorujte nalezenou konfiguraci tsconfig a sestavte pomocí možností příkazového řádku a souborů.", + "Ignore_this_error_message_90019": "Ignorovat tuto chybovou zprávu", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoruje se tsconfig.js, zkompiluje zadané soubory s výchozími možnostmi kompilátoru.", + "Implement_all_inherited_abstract_classes_95040": "Implementovat všechny zděděné abstraktní třídy", + "Implement_all_unimplemented_interfaces_95032": "Implementovat všechna neimplementovaná rozhraní", + "Implement_inherited_abstract_class_90007": "Implementovat zděděnou abstraktní třídu", + "Implement_interface_0_90006": "Implementovat rozhraní {0}", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzule implements exportované třídy {0} má nebo používá privátní název {1}.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Implicitní převod symbol na string za běhu neproběhne úspěšně. Zvažte možnost zabalit tento výraz do String(...).", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}“ je v konfliktu s globální hodnotou použitou v tomto souboru, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}“ je v konfliktu s lokální hodnotou, proto se musí deklarovat s importem „type-only“, pokud je povolena možnost „isolatedModules“.", + "Import_0_from_1_90013": "Importovat {0} z: {1}", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Hodnoty kontrolních výrazů importu musí být výrazy formou řetězcových literálů.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují kontrolní výrazy importu.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Kontrolní výrazy importu jsou podporovány pouze v případě, že je možnost --module nastavena na esnext, node18, node20, nodenext nebo preserve.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Kontrolní výrazy importu se nedají použít s importy nebo exporty, které jsou jenom typ.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Kontrolní výrazy importu byly nahrazeny atributy importu. Místo assert použijte with.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Přiřazení importu nelze použít, pokud jsou cílem moduly ECMAScript. Zkuste místo toho použít import * as ns from \"mod\", import {a} from \"mod\", import d from \"mod\" nebo jiný formát modulu.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Hodnoty atributů importu musí být výrazy formou řetězcových literálů.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "V příkazech, které se kompilují na volání CommonJS „require“, se nepovolují atributy importu.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Atributy importu jsou podporovány pouze v případě, že je možnost --module nastavena na esnext, node18, node20, nodenext nebo preserve.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atributy importu se nedají použít s importy nebo exporty „type-only“.", + "Import_declaration_0_is_using_private_name_1_4000": "Deklarace importu {0} používá privátní název {1}.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklarace importu je v konfliktu s místní deklarací {0}.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklarace importu v oboru názvů nemůžou odkazovat na modul.", + "Import_emit_helpers_from_tslib_6139": "Importovat pomocné rutiny pro generování z tslib", + "Import_may_be_converted_to_a_default_import_80003": "Import se může převést na výchozí import.", + "Import_name_cannot_be_0_2438": "Název importu nemůže být {0}.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklarace importu nebo exportu v deklaraci ambientního modulu nemůže odkazovat na modul pomocí jeho relativního názvu.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Specifikátor importu {0} neexistuje v package.json scope na cestě {1}.", + "Imported_via_0_from_file_1_1393": "Importováno přes {0} ze souboru {1}", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importováno přes {0} ze souboru {1}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importováno přes {0} ze souboru {1}, aby se provedl import výrobních funkcí jsx a jsxs", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importováno přes {0} ze souboru {1} s packageId {2}", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import výrobních funkcí jsx a jsxs", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Import souboru JSON do modulu ECMAScript vyžaduje atribut importu type: \"json\", pokud je možnost module nastavená na {0}.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nejsou povolené v rozšířeních modulů. Zvažte jejich přesunutí do uzavírajícího externího modulu.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Inicializátor členu v deklaracích ambientního výčtu musí být konstantní výraz.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Ve výčtu s víc deklaracemi může být jenom u jedné deklarace vynechaný inicializátor u prvního elementu výčtu.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Zahrnout seznam souborů. Tato možnost, na rozdíl od možnosti „include“, nepodporuje vzory glob.", + "Include_modules_imported_with_json_extension_6197": "Zahrnout moduly importované s příponou .json", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Do souborů sourcemap v generovaném JavaScriptu zahrňte zdrojový kód.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Zahrňte do generovaného JavaScriptu soubory sourcemap.", + "Includes_imports_of_types_referenced_by_0_90054": "Zahrnuje importy typů, na které odkazuje {0}", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Včetně --watch, -w začne sledovat aktuální projekt ohledně změn souboru. Po nastavení můžete konfigurovat režim sledování pomocí:", + "Incomplete_quantifier_Digit_expected_1505": "Neúplný kvantifikátor Očekává se číslice.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "Signatura indexu pro typ {0} chybí v typu {1}.", + "Index_signature_in_type_0_only_permits_reading_2542": "Signatura indexu v typu {0} povoluje jen čtení.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Jednotlivé deklarace ve sloučené deklaraci {0} musí být všechny exportované nebo všechny místní.", + "Infer_all_types_from_usage_95023": "Odvodit všechny typy z použití", + "Infer_function_return_type_95148": "Odvodit návratový typ funkce", + "Infer_parameter_types_from_usage_95012": "Odvodit typy parametrů z využití", + "Infer_this_type_of_0_from_usage_95080": "Vyvodit typ this pro {0} z použití", + "Infer_type_of_0_from_usage_95011": "Odvodit typ {0} z využití", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Odvozování z výrazů tříd není podporováno s možností „--isolatedDeclarations“.", + "Initialize_property_0_in_the_constructor_90020": "Inicializovat vlastnost {0} v konstruktoru", + "Initialize_static_property_0_90021": "Inicializovat statickou vlastnost {0}", + "Initializer_for_property_0_2811": "Inicializátor vlastnosti „{0}“", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicializátor instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializátory nejsou povolené v ambientních kontextech.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializuje projekt TypeScript a vytvoří soubor tsconfig.json.", + "Inline_variable_95184": "Vložená proměnná", + "Insert_command_line_options_and_files_from_a_file_6030": "Vložte parametry příkazového řádku a soubory ze souboru.", + "Install_0_95014": "Nainstalovat {0}", + "Install_all_missing_types_packages_95033": "Nainstalovat všechny chybějící balíčky typů", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Rozhraní {0} nemůže současně rozšiřovat typ {1} i {2}.", + "Interface_0_incorrectly_extends_interface_1_2430": "Rozhraní {0} nesprávně rozšiřuje rozhraní {1}.", + "Interface_declaration_cannot_have_implements_clause_1176": "Deklarace rozhraní nemůže obsahovat klauzuli implements.", + "Interface_must_be_given_a_name_1438": "Rozhraní musí mít název.", + "Interface_name_cannot_be_0_2427": "Název rozhraní nemůže být {0}.", + "Interop_Constraints_6252": "Omezení spolupráce", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretujte volitelné typy vlastností jako zapsané, místo přidání „undefined“.", + "Invalid_character_1127": "Neplatný znak", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Neplatný specifikátor importu {0} nemá žádná možná řešení.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Neplatný název modulu v rozšíření. Modul {0} se převede na netypový modul v {1}, který se nedá rozšířit.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "V rozšíření je neplatný název modulu, modul {0} se nedá najít.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Neplatný volitelný řetěz z nového výrazu. Chtěli jste volat {0}()?", + "Invalid_reference_directive_syntax_1084": "Neplatná syntaxe direktivy reference", + "Invalid_syntax_in_decorator_1498": "Neplatná syntaxe v dekoratéru", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Neplatné použití „{0}“. Nelze jej použít uvnitř statického bloku třídy.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Neplatné použití {0}. Moduly jsou automaticky ve striktním režimu.", + "Invalid_use_of_0_in_strict_mode_1100": "Neplatné použití {0} ve striktním režimu", + "Invalid_value_for_ignoreDeprecations_5103": "Neplatná hodnota pro možnost „--ignoreDeprecations“", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Neplatná hodnota pro jsxFactory. {0} není platný identifikátor nebo kvalifikovaný název.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Neplatná hodnota pro jsxFragmentFactory. {0} není platný identifikátor nebo kvalifikovaný název.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Neplatná hodnota --reactNamespace. {0} není platný identifikátor.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Pravděpodobně chybí čárka, která by oddělila tyto dva výrazy šablony. Tvoří výraz šablony se značkami, který se nedá vyvolat.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Typ prvku {0} není platný prvek JSX.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Typ instance {0} není platný prvek JSX.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Návratový typ {0} není platný prvek JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Typ „{0}“ není platný typ elementu JSX.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Značka JSDoc @{0} {1} neodpovídá klauzuli extends {2}.", + "JSDoc_0_is_not_attached_to_a_class_8022": "Značka JSDoc @{0} není připojená k třídě.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc ... se může nacházet jen v posledním parametru signatury.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Značka JSDoc @param má název {0}, ale neexistuje žádný parametr s tímto názvem.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Značka JSDoc @param má název {0}, ale žádný parametr s tímto názvem neexistuje. Musí odpovídat hodnotě arguments, pokud má typ pole.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef se dá převést na typ TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Značka JSDoc @typedef by měla mít poznámku k typu nebo by za ní měly následovat značky @property nebo @member.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef lze převádět na typy TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc se můžou používat jenom v dokumentačních komentářích.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc se můžou přesunout na typy TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atributy JSX musí mít přiřazený neprázdný výraz.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Element JSX {0} nemá odpovídající uzavírací značku.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Třída elementu JSX nepodporuje atributy, protože nemá vlastnost {0}.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Element JSX má implicitně typ any, protože neexistuje žádné rozhraní JSX.{0}.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Element JSX má implicitně typ any, protože neexistuje globální typ JSX.Element.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Typ elementu JSX {0} nemá žádnou signaturu konstrukce nebo volání.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementy JSX nemůžou mít víc atributů se stejným názvem.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Výrazy JSX nemůžou používat operátor čárky. Nechtěli jste napsat pole?", + "JSX_expressions_must_have_one_parent_element_2657": "Výrazy JSX musí mít jeden nadřazený element.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment JSX nemá odpovídající uzavírací značku.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Výrazy přístupu k vlastnosti JSX nemůžou obsahovat názvy oborů názvů JSX.", + "JSX_spread_child_must_be_an_array_type_2609": "Podřízený objekt JSX spread musí být typu pole.", + "JavaScript_Support_6247": "Podpora JavaScriptu", + "Jump_target_cannot_cross_function_boundary_1107": "Cíl odkazu nemůže překročit hranici funkce.", + "KIND_6034": "DRUH", + "Keywords_cannot_contain_escape_characters_1260": "Klíčová slova nemůžou obsahovat řídicí znaky.", + "LOCATION_6037": "UMÍSTĚNÍ", + "Language_and_Environment_6254": "Jazyk a prostředí", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Levá strana operátoru čárky se nepoužívá a nemá žádné vedlejší účinky.", + "Library_0_specified_in_compilerOptions_1422": "Knihovna {0} zadaná v compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Knihovna odkazovaná přes {0} ze souboru {1}", + "Line_break_not_permitted_here_1142": "Na tomto místě se konec řádku nepovoluje.", + "Line_terminator_not_permitted_before_arrow_1200": "Konec řádku před šipkou se nepovoluje.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Seznam přípon názvů souborů, které se mají vyhledat při překladu modulu", + "List_of_folders_to_include_type_definitions_from_6161": "Seznam složek, ze kterých se zahrnou definice typů", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Seznam kořenových složek, jejichž kombinovaný obsah představuje strukturu projektu za běhu", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Načítá se {0} z kořenového adresáře {1}, umístění kandidáta {2}.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Načítá se modul „{0}“ ze složky node_modules. Cílové typy souborů: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Načítá se modul jako soubor/složka, umístění kandidátského modulu: „{0}“, cílové typy souborů: {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Cesty protokolu používané v procesu moduleResolution.", + "Longest_matching_prefix_for_0_is_1_6108": "Nejdelší odpovídající předpona pro {0} je {1}.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Hledání ve složce node_modules, počáteční umístění {0}", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Nastavit všechna volání metody super() prvním příkazem v jejich konstruktoru", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Vytvořte klíč jenom ze zpětných řetězců místo z řetězců, čísel nebo symbolů (možnost ze starší verze).", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Nastavit volání metody super() jako první příkaz v konstruktoru", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Typu mapovaného objektu má implicitně typ šablony any.", + "Mark_array_literal_as_const_90070": "Označit literál pole jako const", + "Matched_0_condition_1_6403": "Odpovídá {0} podmínce {1}", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Porovnává se ve výchozím nastavení se vzorem zahrnutí **/*.", + "Matched_by_include_pattern_0_in_1_1407": "Porovnáváno podle vzoru zahrnutí {0} v {1}", + "Member_0_implicitly_has_an_1_type_7008": "Člen {0} má implicitně typ {1}.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Člen {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z použití.", + "Merge_conflict_marker_encountered_1185": "Zjistila se značka konfliktu sloučení.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Spojená deklarace {0} nemůže obsahovat výchozí deklaraci exportu. Zvažte namísto toho možnost přidat samostatnou deklaraci export default {0}.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Metavlastnost {0} je povolená jenom v těle deklarace funkce, výrazu funkce nebo konstruktoru.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda {0} nemůže mít implementaci, protože je označená jako abstraktní.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda {0} z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda {0} z exportovaného rozhraní má nebo používá privátní název {1}.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musí mít explicitní anotaci návratového typu s možností „--isolatedDeclarations“.", + "Method_not_implemented_95158": "Metoda není implementovaná.", + "Modifiers_cannot_appear_here_1184": "Tady nejde použít modifikátory.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Modul {0} se dá importovat podle výchozího nastavení jen pomocí příznaku {1}.", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Modul {0} nejde importovat pomocí této konstrukce. Specifikátor se převede jenom na modul ES, který se nedá importovat s příkazem require. Místo toho použijte import ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Modul {0} deklaruje {1} místně, ale exportuje se jako {2}.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Modul {0} deklaruje {1} místně, ale neexportuje se.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Modul {0} neodkazuje na typ, ale používá se tady jako typ. Měli jste na mysli typeof import('{0}')?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Modul {0} neodkazuje na hodnotu, ale používá se tady jako hodnota.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Modul {0} už exportoval člena s názvem {1}. Zvažte možnost vyřešení nejednoznačnosti explicitním opakováním exportu.", + "Module_0_has_no_default_export_1192": "Modul {0} nemá žádný výchozí export.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Modul {0} nemá žádný výchozí export. Nechtěli jste místo toho použít import { {1} } from {0}?", + "Module_0_has_no_exported_member_1_2305": "V modulu {0} není žádný exportovaný člen {1}.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Modul {0} nemá žádný exportovaný člen {1}. Nechtěli jste místo toho použít import { {1} } from {0}?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Modul {0} je skrytý místní deklarací se stejným názvem.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Modul {0} používá export = a nedá se použít s možností export *.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Modul {0} se převedl jako lokálně deklarovaný ambientní modul v souboru {1}.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Modul „{0}“ byl přeložen na „{1}“, ale není nastavena možnost „--allowArbitraryExtensions“.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Modul {0} se přeložil na {1}, není ale nastavená možnost --jsx.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Modul {0} se přeložil na {1}, ale nepoužívá se --resolveJsonModule.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Názvy deklarací modulů můžou používat jenom řetězce v jednoduchých nebo dvojitých uvozovkách.", + "Module_name_0_matched_pattern_1_6092": "Název modulu {0}, odpovídající vzor {1}", + "Module_name_0_was_not_resolved_6090": "======== Název modulu {0} nebyl přeložen. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Název modulu {0} byl úspěšně přeložen na {1}. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Název modulu {0} se úspěšně přeložil na {1} s ID balíčku {2}. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Druh překladu modulu nebyl určen, použije se {0}.", + "Module_resolution_using_rootDirs_has_failed_6111": "Překlad modulu pomocí rootDirs se nepovedl.", + "Modules_6244": "Moduly", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Přesunout modifikátory elementu popsané řazené kolekce členů na popisky", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Přesuňte výraz ve výchozím exportu do proměnné a přidejte k němu anotaci typu.", + "Move_to_a_new_file_95049": "Přesunout do nového souboru", + "Move_to_file_95178": "Přesunout do souboru", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Více po sobě jdoucích číselných oddělovačů se nepovoluje.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Víc implementací konstruktoru se nepovoluje.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NOVÝ ŘÁDEK", + "Name_is_not_valid_95136": "Název není platný.", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Pojmenované zachytávací skupiny jsou k dispozici jen při cílení na „ES2018“ nebo novější.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Pojmenované zachytávací skupiny se stejným názvem se musí navzájem vylučovat.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Pojmenované importy nejsou povoleny v odloženém importu.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Pojmenované importy ze souboru JSON do modulu ECMAScript nejsou povolené, když je možnost module nastavená na {0}.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Pojmenovaná vlastnost {0} není u typu {1} stejná jako u typu {2}.", + "Namespace_0_has_no_exported_member_1_2694": "Obor názvů {0} nemá žádný exportovaný člen {1}.", + "Namespace_must_be_given_a_name_1437": "Obor názvů musí mít název.", + "Namespace_name_cannot_be_0_2819": "Název oboru názvů nemůže být „{0}“.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Pokud je povolena možnost „{0}“, nejsou v souborech globálních skriptů povoleny obory názvů. Pokud tento soubor nemá být globálním skriptem, nastavte možnost „moduleDetection“ na hodnotu „force“ nebo přidejte prázdný příkaz „export {}“.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "U parametrů „this“ nelze použít dekoratéry ani modifikátory.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Žádný základní konstruktor nemá zadaný počet argumentů typu.", + "No_constituent_of_type_0_is_callable_2755": "Žádný konstituent typu {0} se nedá zavolat.", + "No_constituent_of_type_0_is_constructable_2759": "Žádný konstituent typu {0} se nedá vytvořit.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "V typu {1} se nenašla žádná signatura indexu s typem parametru {0}.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "V konfiguračním souboru {0} se nenašly žádné vstupy. Pro zahrnutí jsou zadané tyto cesty: {1} a pro vyloučení tyto cesty: {2}.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Funkce už není podporovaná. Ve starších verzích sloužila k ručnímu nastavení kódování textu při čtení souborů.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Žádné přetížení neočekává tento počet argumentů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů: {2}", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Žádné přetížení neočekává tento počet argumentů typů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů typů: {2}", + "No_overload_matches_this_call_2769": "Žádné přetížení neodpovídá tomuto volání.", + "No_type_could_be_extracted_from_this_type_node_95134": "Z tohoto uzlu typů nešlo extrahovat žádný typ.", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "V oboru pro sdruženou vlastnost {0} neexistuje žádná hodnota. Buď nějakou deklarujte, nebo poskytněte inicializátor.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Neabstraktní třída „{0}“ neimplementuje zděděného abstraktního člena {1} ze třídy „{2}“.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "V neabstraktní třídě „{0}“ chybí implementace pro následující členy „{1}“: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "V neabstraktní třídě {0} chybí implementace pro následující členy „{1}“: {2} a {3} další(ch).", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Výraz neabstraktní třídy neimplementuje zděděný abstraktní člen {0} z třídy {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Ve výrazu neabstraktní třídy chybí implementace pro následující členy „{0}“: {1} a {2} další(ch).", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Kontrolní výrazy jiné než null se dají používat jen v typescriptových souborech.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Deklaroval se tady parametr, který není jednoduchý.", + "Not_all_code_paths_return_a_value_7030": "Ne všechny cesty kódu vracejí hodnotu.", + "Not_all_constituents_of_type_0_are_callable_2756": "Ne všichni konstituenti typu {0} se dají zavolat.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Ne všichni konstituenti typu {0} se dají vytvořit.", + "Numbers_out_of_order_in_quantifier_1506": "Čísla ve kvantifikátoru jsou mimo pořadí.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Číselné literály s absolutními hodnotami, které se rovnají hodnotě 2^53 nebo větší, se nedají reprezentovat přesně jako celá čísla, protože jsou příliš velké.", + "Numeric_separators_are_not_allowed_here_6188": "Číselné oddělovače tady nejsou povolené.", + "Object_is_of_type_unknown_2571": "Objekt je typu Neznámý.", + "Object_is_possibly_null_2531": "Objekt je pravděpodobně null.", + "Object_is_possibly_null_or_undefined_2533": "Objekt je pravděpodobně null nebo undefined.", + "Object_is_possibly_undefined_2532": "Objekt je pravděpodobně undefined.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Literál objektu může specifikovat jenom známé vlastnosti a {0} v typu {1} neexistuje.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literál objektu může určovat jenom známé vlastnosti, ale {0} v typu {1} neexistuje. Chtěli jste zapsat {2}?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Vlastnost {0} literálu objektu má implicitně typ {1}.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekty, které obsahují sdružené vlastnosti, nelze odvodit pomocí možnosti „--isolatedDeclarations“.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekty, které obsahují přiřazení rozprostření, se nedají odvodit pomocí možnosti „--isolatedDeclarations“.", + "Octal_digit_expected_1178": "Očekává se osmičková číslice.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Osmičkové řídicí sekvence a zpětné odkazy nejsou ve třídě znaků povoleny. Pokud to bylo zamýšleno jako řídicí sekvence, použijte místo toho syntaxi „{0}“.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Osmičkové řídicí sekvence nejsou povoleny. Použijte syntaxi „{0}“.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Osmičkové literály nejsou povoleny. Použijte syntaxi „{0}“.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedna hodnota z „{0}.{1}“ je řetězec „{2}“ a druhá hodnota se považuje za neznámou číselnou hodnotu.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "V příkazu for...in se povoluje deklarovat jenom jednu proměnnou.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "V příkazu for...of se povoluje deklarovat jenom jednu proměnnou.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Klíčovým slovem new se dá volat jenom funkce void.", + "Only_ambient_modules_can_use_quoted_names_1035": "Názvy v uvozovkách můžou mít jenom ambientní moduly.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Spolu s --{0} se podporují jenom moduly amd a system.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Pomocí možnosti „--isolatedDeclarations“ lze odvodit pouze pole const.", + "Only_emit_d_ts_declaration_files_6014": "Bude vydávat jen soubory deklarací .d.ts.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Zahrňte do výstupu jenom soubory d.ts, nikoli soubory JavaScriptu.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Prostřednictvím klíčového slova super jsou přístupné jenom veřejné a chráněné metody základní třídy.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Operátor {0} se nedá použít na typ {1}.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Operátor {0} nejde použít u typů {1} a {2}.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "V rámci třídy znaků nelze kombinovat operátory. Místo toho je zabalte do vnořené třídy.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Při úpravách vyloučit projekt z kontroly odkazů ve více projektech.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Možnost „{0}={1}“ byla odebrána. Odeberte ji prosím z konfigurace.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Možnost „{0}={1}“ je zastaralá a v jazyce TypeScript {2} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{3}\"'.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu false nebo null.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu null.", + "Option_0_can_only_be_specified_on_command_line_6266": "Možnost „{0}“ lze zadat pouze na příkazovém řádku.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Možnost {0} jde použít jenom při zadání možnosti --inlineSourceMap nebo možnosti --sourceMap.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „moduleResolution“ nastavená na „node16“, „nodenext“ nebo „bundler“.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Možnost „{0}“ se dá použít jenom v případě, že je možnost „modul“ nastavená na „preserve“, „commonjs“ nebo na „es2015“ a novější.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Když je možnost jsx nastavená na {1}, možnost {0} se nedá zadat.", + "Option_0_cannot_be_specified_with_option_1_5053": "Možnosti {0} a {1} nejde zadat zároveň.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Možnost {0} nejde zadat bez možnosti {1}.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Možnost {0} nejde zadat bez možnosti {1} nebo {2}.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Možnost „{0}“ byla odebrána. Odeberte ji prosím z konfigurace.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Možnost „{0}“ je zastaralá a v jazyce TypeScript {1} přestane fungovat. Tuto chybu můžete potlačit zadáním compilerOption '\"ignoreDeprecations\": \"{2}\"'.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Možnost „{0}“ je redundantní a nelze ji zadat s možností „{1}“.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Možnost allowImportingTsExtensions se dá použít jenom v případě, že je nastavená možnost noEmit, emitDeclarationOnly nebo rewriteRelativeImportExtensions.", + "Option_build_must_be_the_first_command_line_argument_6369": "Možnost --build musí být prvním argumentem příkazového řádku.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Možnost isolatedModules jde použít jenom v případě, že je poskytnutá možnost --module nebo že možnost target je ES2015 nebo vyšší verze.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Když je možnost „module“ nastavená na „{0}“, možnost „moduleResolution“ musí být nastavená na „{1}“ (nebo musí zůstat nezadaná).", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Když je možnost „moduleResolution“ nastavená na „{1}“, možnost „module“ musí být nastavená na „{0}“.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Když je povolená možnost „{0}“, možnost „preserveConstEnums“ se nedá zakázat.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Možnost project se na příkazovém řádku nedá kombinovat se zdrojovým souborem.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „moduleResolution“ nastavená na hodnotu „classic“.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Možnost „--resolveJsonModule“ se nedá zadat, pokud je možnost „module“ nastavená na „none“, „system“ nebo „umd“.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Možnost „verbatimModuleSyntax“ nejde použít, pokud je možnost „module“ nastavená na „UMD“, „AMD“ nebo „System“.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Možnosti {0} a {1} nejde kombinovat.", + "Options_Colon_6027": "Možnosti:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Další výstupy", + "Output_Formatting_6256": "Formátování výstupu", + "Output_compiler_performance_information_after_building_6615": "Po sestavení generovat informace o výkonu kompilátoru.", + "Output_directory_for_generated_declaration_files_6166": "Výstupní adresář pro vygenerované soubory deklarace", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Výstupní soubor {0} se nesestavil ze zdrojového souboru {1}.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Do výstupu po sestavení zahrňte podrobnější informace o výkonu kompilátoru.", + "Overload_0_of_1_2_gave_the_following_error_2772": "Přetížení {0} z {1}, {2}, vrátilo následující chybu.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Signatury přetížení musí být všechny abstraktní nebo neabstraktní.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Signatury přetížení musí být všechny ambientní nebo neambientní.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Signatury přetížení musí být všechny exportované nebo neexportované.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Signatury přetížení musí být všechny nepovinné nebo povinné.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Signatury přetížení musí být všechny veřejné, privátní nebo chráněné.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Parametr {0} nemůže odkazovat na identifikátor {1} deklarovaný za ním.", + "Parameter_0_cannot_reference_itself_2372": "Parametr {0} nemůže odkazovat sám na sebe.", + "Parameter_0_implicitly_has_an_1_type_7006": "Parametr {0} má implicitně typ {1}.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Parametr {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z použití.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Parametr {0} není na stejné pozici jako parametr {1}.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Parametr {0} přístupového objektu má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Parametr {0} přístupového objektu má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Parametr {0} přístupového objektu má nebo používá privátní název {1}.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Parametr {0} signatury volání z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Parametr {0} signatury volání z exportovaného rozhraní má nebo používá privátní název {1}.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Parametr {0} konstruktoru z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Parametr {0} konstruktoru z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Parametr {0} konstruktoru z exportované třídy má nebo používá privátní název {1}.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Parametr {0} signatury konstruktoru z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Parametr {0} signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {1}.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Parametr {0} exportované funkce má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Parametr {0} exportované funkce má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Parametr {0} exportované funkce má nebo používá privátní název {1}.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Parametr {0} signatury indexu z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Parametr {0} signatury indexu z exportovaného rozhraní má nebo používá privátní název {1}.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Parametr {0} metody z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Parametr {0} metody z exportovaného rozhraní má nebo používá privátní název {1}.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Parametr {0} veřejné metody z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Parametr {0} veřejné metody z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Parametr {0} veřejné metody z exportované třídy má nebo používá privátní název {1}.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Parametr {0} veřejné statické metody z exportované třídy má nebo používá privátní název {1}.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametr nemůže obsahovat otazník a inicializátor.", + "Parameter_declaration_expected_1138": "Očekává se deklarace parametru.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr má název, ale žádný typ. Měli jste na mysli {0}: {1}?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modifikátory parametrů se dají používat jen v typescriptových souborech.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru veřejné metody setter {0} z exportované třídy má nebo používá privátní název {1}.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá privátní název {1}.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Parsovat ve striktním režimu a generovat striktní používání pro každý zdrojový soubor", + "Part_of_files_list_in_tsconfig_json_1409": "Součást seznamu files v souboru tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Vzor {0} může obsahovat nanejvýš jeden znak * (hvězdička).", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Časování výkonu pro --diagnostics nebo --extendedDiagnostics nejsou v této relaci k dispozici. Nepovedlo se najít nativní implementace rozhraní Web Performance API.", + "Platform_specific_6912": "Specifická pro platformu", + "Prefix_0_with_an_underscore_90025": "Předpona {0} s podtržítkem", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Před všechny nesprávné deklarace vlastností přidejte declare.", + "Prefix_all_unused_declarations_with_where_possible_95025": "Přidat příponu _ ke všem nepoužívaným deklaracím tam, kde je to možné", + "Prefix_with_declare_95094": "Přidat předponu declare", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Zachovejte nepoužívané importované hodnoty ve výstupu JavaScriptu, který by se jinak odebral.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Vytiskněte si všechny soubory přečtené při kompilaci.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Vytiskněte si soubory přečtené při kompilaci, včetně důvodu jejich zahrnutí.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Umožňuje vypsat názvy souborů a důvod, proč jsou součástí kompilace.", + "Print_names_of_files_part_of_the_compilation_6155": "Část kompilace, při které se vypisují názvy souborů", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Vypsat názvy souborů, které jsou součástí kompilace, a pak ukončit zpracovávání", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Část kompilace, při které se vypisují názvy generovaných souborů", + "Print_the_compiler_s_version_6019": "Vytisknout verzi kompilátoru", + "Print_the_final_configuration_instead_of_building_1350": "Místo sestavení vypsat konečnou konfiguraci", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Po kompilaci vytiskněte názvy generovaných souborů.", + "Print_this_message_6017": "Vytisknout tuto zprávu", + "Private_accessor_was_defined_without_a_getter_2806": "Privátní přístupový objekt se definoval bez metody getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Privátní pole „{0}“ musí být deklarované v nadřazené třídě.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Privátní identifikátory se v deklaracích proměnných nepovolují.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Privátní identifikátory se mimo těla tříd nepovolují.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Privátní identifikátory jsou povolené jenom v tělech třídy a smí se používat jenom jako součást deklarace člena třídy nebo přístupu k vlastnosti, případně na levé straně výrazu in.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Privátní identifikátory jsou dostupné jen při cílení na ECMAScript 2015 a novější.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Privátní identifikátory se nedají použít jako parametry.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "K privátnímu nebo chráněnému členu {0} se nedá přistupovat v parametru typu.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt {0} nejde sestavit, protože jeho závislost {1} obsahuje chyby.", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Projekt {0} nejde sestavit, protože se nesestavila jeho závislost {1}.", + "Project_0_is_being_forcibly_rebuilt_6388": "Projekt {0} se nuceně vytváří znovu.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že soubor „{2}“ byl kořenovým souborem kompilace, ale už není.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt {0} je zastaralý, protože soubor buildinfo „{1}“ označuje, že program musí hlásit chyby.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "{0} projektu je zastaralý, protože soubor buildinfo {1} indikuje, že se některé změny nevygenerovaly.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}“ je zastaralý, protože soubor buildinfo „{1}“ označuje, že došlo ke změně v možnosti „compilerOptions“.", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt {0} je zastaralý, protože výstup {1} je starší než vstup {2}.", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt {0} je zastaralý, protože výstupní soubor {1} neexistuje.", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt {0} je zastaralý, protože jeho výstup se vygeneroval pomocí verze {1}, která se liší od aktuální verze {2}.", + "Project_0_is_up_to_date_6361": "Projekt {0} je aktuální.", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt {0} je aktuální, protože nejnovější vstup {1} je starší než výstup {2}.", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Projekt {0} je aktuální, ale musí aktualizovat časová razítka výstupních souborů, které jsou starší než vstupní soubory.", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt {0} je aktualizovaný soubory .d.ts z jeho závislostí.", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odkazy projektu nemůžou tvořit cyklický graf. Zjistil se cyklus: {0}", + "Projects_6255": "Projekty", + "Projects_in_this_build_Colon_0_6355": "Projekty v tomto sestavení: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Vlastnosti s modifikátorem accessor jsou k dispozici jen při cílení na ECMAScript 2015 a vyšší.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Vlastnost {0} nemůže mít inicializátor, protože je označená jako abstraktní.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Vlastnost {0} pochází ze signatury indexu, proto je zapotřebí k ní přistupovat pomocí ['{0}'].", + "Property_0_does_not_exist_on_type_1_2339": "Vlastnost {0} v typu {1} neexistuje.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Vlastnost {0} v typu {1} neexistuje. Chtěli jste místo toho přistoupit ke statickému členu {2}?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Vlastnost ‚{0}‘ neexistuje u typu ‚{1}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{2}‘ nebo novější.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Vlastnost „{0}“ pro typ „{1}“ neexistuje. Zkuste změnit možnost kompilátoru „lib“, aby zahrnovala „dom“.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Vlastnost „{0}“ nemá žádný inicializátor a není jednoznačně přiřazena ve statickém bloku třídy.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Vlastnost {0} nemá žádný inicializátor a není jednoznačně přiřazena v konstruktoru.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt get nemá anotaci návratového typu.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt set nemá anotaci parametrového typu.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Vlastnost {0} má implicitně typ any, ale je možné, že lepší typ pro jeho přístupový objekt get by se vyvodil z použití.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Vlastnost {0} má implicitně typ any, ale je možné, že lepší typ pro jeho přístupový objekt set by se vyvodil z použití.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Vlastnost {0} v typu {1} nejde přiřadit ke stejné vlastnosti v základním typu {2}.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Vlastnost {0} v typu {1} nejde přiřadit typu {2}.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Vlastnost {0} v typu {1} odkazuje na jiného člena, ke kterému není možné získat přístup z typu {2}.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "Deklaruje se vlastnost {0}, ale její hodnota se vůbec nečte.", + "Property_0_is_incompatible_with_index_signature_2530": "Vlastnost {0} není kompatibilní se signaturou indexu.", + "Property_0_is_missing_in_type_1_2324": "Vlastnost {0} v typu {1} chybí.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Vlastnost {0} chybí v typu {1}, ale vyžaduje se v typu {2}.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Vlastnost {0} není přístupná mimo třídu {1}, protože má privátní identifikátor.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Vlastnost {0} je v typu {1} nepovinná, ale vyžaduje se v typu {2}.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "Vlastnost {0} je privátní a dostupná jenom ve třídě {1}.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Vlastnost {0} je v typu {1} privátní, ale v typu {2} ne.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Vlastnost {0} je chráněná a dá se k ní přistupovat jen přes instanci třídy {1}. Toto je instance třídy {2}.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Vlastnost {0} je chráněná a je dostupná jenom ve třídě {1} a jejích podtřídách.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Vlastnost {0} je chráněná, ale typ {1} není třída odvozená od {2}.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Vlastnost {0} je v typu {1} chráněná, ale v typu {2} veřejná.", + "Property_0_is_used_before_being_assigned_2565": "Vlastnost {0} je použitá před přiřazením.", + "Property_0_is_used_before_its_initialization_2729": "Vlastnost {0} se používá dříve, než se inicializuje.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Zdá se, že vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Vlastnost {0} rozšířeného atributu JSX nejde přiřadit cílové vlastnosti.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Vlastnost „{0}“ exportovaného anonymního typu třídy nesmí být privátní ani chráněná.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Vlastnost {0} exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Vlastnost {0} exportovaného rozhraní má nebo používá privátní název {1}.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Vlastnost {0} typu {1} se nedá přiřadit k {2} typu indexu {3}.", + "Property_0_was_also_declared_here_2733": "Vlastnost {0} se deklarovala i tady.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Vlastnost {0} přepíše základní vlastnost v {1}. Pokud je to záměr, přidejte inicializátor. Jinak přidejte modifikátor declare nebo odeberte redundantní deklaraci.", + "Property_assignment_expected_1136": "Očekává se přiřazení vlastnosti.", + "Property_destructuring_pattern_expected_1180": "Očekává se vzor destruktoru vlastnosti.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Vlastnost musí mít explicitní anotaci typu s možností „--isolatedDeclarations“.", + "Property_or_signature_expected_1131": "Očekává se vlastnost nebo podpis.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Hodnota vlastnosti může být jenom řetězcový literál, číselný literál, true, false, null, literál objektu nebo literál pole.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Při cílení na „ES5“ poskytněte plnou podporu iterovatelných proměnných v příkazu „for-of“, rozšíření a destrukturování.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Veřejná metoda {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Veřejná metoda {0} z exportované třídy má nebo používá privátní název {1}.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Veřejná vlastnost {0} exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Veřejná vlastnost {0} exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Veřejná vlastnost {0} exportované třídy má nebo používá privátní název {1}.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Veřejná statická metoda {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Veřejná statická metoda {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Veřejná statická metoda {0} z exportované třídy má nebo používá privátní název {1}.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Veřejná statická vlastnost {0} exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Veřejná statická vlastnost {0} exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Veřejná statická vlastnost {0} exportované třídy má nebo používá privátní název {1}.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Kvalifikovaný název {0} se nepovoluje bez @param {object} {1} na začátku.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Když se parametr funkce nepřečte, nahlaste chybu.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Vyvolat chybu u výrazů a deklarací s implikovaným typem any", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Vyvolá chybu u výrazů this s implikovaným typem any.", + "Range_out_of_order_in_character_class_1517": "Rozsah ve třídě znaků je mimo pořadí.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Při opětovném exportu typu s povolenou možností „{0}“ je nutné použít možnost „export type“.", + "React_components_cannot_include_JSX_namespace_names_2639": "Komponenty React nemůžou obsahovat názvy oborů názvů JSX.", + "Recommended_Options_6294": "Doporučené možnosti", + "Redirect_output_structure_to_the_directory_6006": "Přesměrování výstupní struktury do adresáře", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Snižte počet projektů, které TypeScript načítá automaticky.", + "Referenced_project_0_may_not_disable_emit_6310": "Odkazovaný projekt {0} nemůže zakazovat generování.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Odkazovaný projekt {0} musí mít nastavení \"composite\": true.", + "Referenced_via_0_from_file_1_1400": "Odkazováno přes {0} ze souboru {1}", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Zvažte přidání přípony do cesty importu.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relativní cesty importu vyžadují explicitní přípony souborů v importech ECMAScriptu, když „--moduleResolution“ je „node16“ nebo „nodenext“. Měli jste na mysli „{0}“?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Odeberte z procesu sledování seznam adresářů.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Ze zpracování režimu sledování odeberte seznam souborů.", + "Remove_all_unnecessary_override_modifiers_95163": "Odebrat všechny nepotřebné modifikátory override", + "Remove_all_unnecessary_uses_of_await_95087": "Odebrat všechna nepotřebná použití výrazu await", + "Remove_all_unreachable_code_95051": "Odebrat veškerý nedosažitelný kód", + "Remove_all_unused_labels_95054": "Odebrat všechny nepoužívané popisky", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Odeberte složené závorky ze všech těl funkcí šipek, u kterých dochází k problémům.", + "Remove_braces_from_arrow_function_95060": "Odebrat složené závorky z funkce šipky", + "Remove_braces_from_arrow_function_body_95112": "Odebrat složené závorky z těla funkce šipky", + "Remove_import_from_0_90005": "Odebrat import z {0}", + "Remove_override_modifier_95161": "Odebrat modifikátor override", + "Remove_parentheses_95126": "Odebrat závorky", + "Remove_template_tag_90011": "Odebrat značku šablonu", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Odeberte limit 20 MB pro celkovou velikost zdrojového kódu souborů JavaScriptu na jazykovém serveru TypeScriptu.", + "Remove_type_from_import_declaration_from_0_90055": "Odebrat „type“ z deklarace importu z „{0}“", + "Remove_type_from_import_of_0_from_1_90056": "Odebrat „type“ z importu {0} z „{1}“", + "Remove_type_parameters_90012": "Odebrat parametry typů", + "Remove_unnecessary_await_95086": "Odebrat nepotřebné výrazy await", + "Remove_unreachable_code_95050": "Odebrat nedosažitelný kód", + "Remove_unused_declaration_for_Colon_0_90004": "Odebrat nepoužívané deklarace pro {0}", + "Remove_unused_declarations_for_Colon_0_90041": "Odebrat nepoužívané deklarace pro {0}", + "Remove_unused_destructuring_declaration_90039": "Odebrat nepoužívané destrukční deklarace", + "Remove_unused_label_95053": "Odebrat nepoužitý popisek", + "Remove_variable_statement_90010": "Odebrat příkaz proměnné", + "Rename_param_tag_name_0_to_1_95173": "Přejmenovat značku @param {0} na {1}", + "Replace_0_with_Promise_1_90036": "Místo {0} použijte Promise<{1}>", + "Replace_all_unused_infer_with_unknown_90031": "Nahradit všechny nepoužívané příkazy infer za unknown", + "Replace_import_with_0_95015": "Nahradí import použitím: {0}.", + "Replace_infer_0_with_unknown_90030": "Nahradit infer {0} za unknown", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Oznámí se chyba, když některé cesty kódu ve funkci nevracejí hodnotu.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Oznámí se chyby v případech fallthrough v příkazu switch.", + "Report_errors_in_js_files_8019": "Ohlásit chyby v souborech .js", + "Report_errors_on_unused_locals_6134": "Umožňuje nahlásit chyby u nevyužitých místních hodnot.", + "Report_errors_on_unused_parameters_6135": "Umožňuje nahlásit chyby u nevyužitých parametrů.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Vyžadujte u exportů dostatečnou anotaci, aby ostatní nástroje mohly triviálně generovat soubory deklarací.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Vyžadovat, aby nedeklarované vlastnosti ze signatur indexů používaly přístupy k elementům", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Požadované parametry typu nemůžou být až za volitelnými parametry typu.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Překlad pro modul {0} se našel v mezipaměti umístění {1}.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Překlad pro direktivu odkazu na typ {0} se našel v mezipaměti umístění {1}.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Překlad nerelativního názvu selhal; zkoušíme to se zakázanými moderními funkcemi překladu Node, abychom zjistili, jestli není potřeba aktualizovat konfiguraci knihovny npm.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Překlad nerelativního názvu selhal. Zkoušíme to s možností „--moduleResolution bundler“, abychom zjistili, jestli projekt nepotřebuje aktualizaci konfigurace.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "keyof překládejte jen na názvy vlastností s hodnotami typu string (ne čísla ani symboly).", + "Resolved_under_condition_0_6414": "Vyřešeno za podmínky „{0}“.", + "Resolving_in_0_mode_with_conditions_1_6402": "Řešení v režimu {0} s podmínkami {1}.", + "Resolving_module_0_from_1_6086": "======== Překládá se modul {0} z {1}. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Překládá se název modulu {0} relativní k základní adrese URL {1}–{2}.", + "Resolving_real_path_for_0_result_1_6130": "Překládá se skutečná cesta pro {0}, výsledek {1}.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Překládá se direktiva odkazu na typ {0} obsahující soubor {1}. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář {2}. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář není nastavený. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář {1}. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář není nastavený. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Překlad direktivy odkazu na typ pro program, který zadává vlastní hodnoty typeRoot, s přeskočením vyhledávání ve složce „node_modules“.", + "Resolving_with_primary_search_path_0_6121": "Probíhá překlad pomocí primární cesty hledání {0}.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Parametr rest {0} implicitně obsahuje typ any[].", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest {0} má implicitně typ any[], ale je možné, že lepší typ by se vyvodil z použití.", + "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest se dají vytvářet jenom z typů object.", + "Return_type_annotation_circularly_references_itself_2577": "Anotace návratového typu se cyklicky odkazuje sama na sebe.", + "Return_type_must_be_inferred_from_a_function_95149": "Návratový typ musí být odvozen z funkce.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá privátní název {0}.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Návratový typ signatury konstruktoru z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Návratový typ signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {0}.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Návratový typ signatury konstruktoru musí jít přiřadit k typu instance třídy.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Návratový typ exportované funkce má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Návratový typ exportované funkce má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Návratový typ exportované funkce má nebo používá privátní název {0}.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Návratový typ signatury indexu z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Návratový typ signatury indexu z exportovaného rozhraní má nebo používá privátní název {0}.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Návratový typ metody z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Návratový typ metody z exportovaného rozhraní má nebo používá privátní název {0}.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Návratový typ veřejné metody getter {0} z exportované třídy má nebo používá privátní název {1}.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Návratový typ veřejné metody z exportované třídy má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Návratový typ veřejné metody z exportované třídy má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Návratový typ veřejné metody z exportované třídy má nebo používá privátní název {0}.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Návratový typ veřejné statické metody getter {0} z exportované třídy má nebo používá privátní název {1}.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z privátního modulu {1}.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Návratový typ veřejné statické metody z exportované třídy má nebo používá privátní název {0}.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Opětovné použití překladu modulu {0} z {1} starého programu se nevyřešilo.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu se nevyřešilo.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.", + "Rewrite_all_as_indexed_access_types_95034": "Přepsat vše jako indexované typy přístupu", + "Rewrite_as_the_indexed_access_type_0_90026": "Přepsat jako indexovaný typ přístupu {0}", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Přepište přípony souborů .ts, .tsx, .mts a .cts v relativních cestách importu na jejich javascriptový ekvivalent ve výstupních souborech.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Pravý operand ?? je nedostupný, protože levý operand nemá nikdy hodnotu null.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nedá se určit kořenový adresář, přeskakují se primární cesty hledání.", + "Root_file_specified_for_compilation_1427": "Kořenový soubor, který se zadal pro kompilaci", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATEGIE", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Uložte soubory .tsbuildinfo, aby byla možná přírůstková kompilace projektů.", + "Saw_non_matching_condition_0_6405": "Byla zjištěna neshodná podmínka {0}.", + "Scoped_package_detected_looking_in_0_6182": "Zjištěn balíček v oboru, hledání v: {0}", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Vyhledávají se záložní rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Vyhledávají se upřednostňovaná rozšíření ve všech nadřazených adresářích „node_modules“: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Voz také https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Výběr nepředstavuje platný příkaz (platné příkazy).", + "Selection_is_not_a_valid_type_node_95133": "Výběr není platným uzlem typů.", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Nastavte verzi jazyka JavaScript pro generovaný JavaScript a zahrňte deklarace kompatibilních knihoven.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Nastavte jazyk posílání zpráv z TypeScriptu. Toto nastavení neovlivní generování.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Nastavte možnost module v konfiguračním souboru na {0}.", + "Set_the_newline_character_for_emitting_files_6659": "Nastavte pro generované soubory znak nového řádku.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Nastavte možnost target v konfiguračním souboru na {0}.", + "Setters_cannot_return_a_value_2408": "Metody setter nemůžou vracet hodnotu.", + "Show_all_compiler_options_6169": "Zobrazí všechny možnosti kompilátoru.", + "Show_diagnostic_information_6149": "Zobrazí diagnostické informace.", + "Show_verbose_diagnostic_information_6150": "Zobrazí podrobné diagnostické informace.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Zobrazit, co by se sestavilo (nebo odstranilo, pokud je zadaná možnost --clean)", + "Signature_0_must_be_a_type_predicate_1224": "Signatura {0} musí být predikát typu.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklarace signatur se dají používat jen v typescriptových souborech.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Přeskočí vytváření podřízených projektů při chybě v nadřazeném projektu.", + "Skip_type_checking_all_d_ts_files_6693": "Přeskočte kontrolu typů ve všech souborech .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Při kontrole typů vynechte soubory .d.ts zahrnuté do TypeScriptu.", + "Skip_type_checking_of_declaration_files_6012": "Přeskočit kontrolu typu souborů deklarace", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Sestavení projektu {0} se přeskakuje, protože jeho závislost {1} obsahuje chyby.", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Sestavení projektu {0} se přeskakuje, protože se nesestavila jeho závislost {1}.", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Přeskakuje se modul „{0}“, který vypadá jako absolutní identifikátor URI. Cílové typy souborů: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}.", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none.", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Zdroj má následující počet elementů, ale cíl jich povoluje jen {1}: {0}", + "Source_has_0_element_s_but_target_requires_1_2618": "Zdroj má následující počet elementů, ale cíl jich vyžaduje {1}: {0}", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Zdroj nenabízí v cíli pro element required na pozici {0} žádnou shodu.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Zdroj nenabízí v cíli pro element variadic na pozici {0} žádnou shodu.", + "Specify_ECMAScript_target_version_6015": "Zadejte cílovou verzi ECMAScriptu.", + "Specify_JSX_code_generation_6080": "Zadejte generování kódu JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Zadejte soubor, který sloučí všechny výstupy do jediného souboru JavaScriptu. Pokud má „declaration“ pravdivou hodnotu,, určete soubor, který sloučí všechny výstupní soubory .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Zadejte seznam vzorů glob, které odpovídají souborům zahrnutým do kompilace.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Zadejte seznam zahrnutých pluginů jazykových služeb.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Zadejte sadu souborů spojených deklaračních knihoven, které popisují cílové běhové prostředí.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Zadejte sadu položek, které se při importu znovu namapují na další nalezená místa.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Zadejte pole objektů, které určují cesty pro projekty. Používá se v odkazech na projekt.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Zadejte výstupní složku pro všechny generované soubory.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Zadejte chování generování nebo kontroly pro importy, které se používají jen pro typy.", + "Specify_file_to_store_incremental_compilation_information_6380": "Zadejte soubor, do kterého se uloží informace o přírůstkové kompilaci.", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Zadejte, jak TypeScript v daném specifikátoru modulu najde soubor.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Zadejte, jak sledovat adresáře v systémech, které nemají funkci rekurzivního sledování souborů.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Zadejte, jak má fungovat režim sledování TypeScriptu.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Zadejte soubory knihovny, které se mají zahrnout do kompilace.", + "Specify_module_code_generation_6016": "Určete generování kódu modulu.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Zadejte specifikátor modulu, který se použije k naimportování továrních funkcí JSX při použití „jsx: react-jsx“.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Zadejte více složek, které budou figurovat jako „node_modules/@types“.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Zadejte jednu nebo více cest nebo jeden či více odkazů na moduly uzlů se základními konfiguračními soubory, ze kterých se dědí nastavení.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Zadejte možnosti automatického získávání deklaračních souborů.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Zadejte strategii pro vytvoření sledování načítání, když se ho nepovede vytvořit pomocí událostí souborového systému: FixedInterval (výchozí), PriorityInterval, DynamicPriority, FixedChunkSize", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Zadejte strategii pro sledování adresáře na platformách, které nepodporují nativně rekurzivní sledování: UseFsEvents (výchozí), FixedPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Zadejte strategii pro sledování souboru: FixedPollingInterval (výchozí), PriorityPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling, UseFsEvents, UseFsEventsOnParentDirectory", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Zadejte odkaz na fragment JSX, který se použije pro fragmenty při cíleném generování React JSX, např. „React.Fragment“ nebo „Fragment“.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Zadejte funkci objektu pro vytváření JSX, která se použije při zaměření na generování JSX react, např. React.createElement nebo h.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Zadejte funkci objektu pro vytváření JSX použitou při cílení na generování React JSX, např. React.createElement nebo h.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Zadejte funkci objektu pro vytváření fragmentů JSX, která se použije při cílení na generování JSX react se zadanou možností kompilátoru jsxFactory, například Fragment.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Zadejte základní adresář, který se použije k řešení názvů modulů, které nejsou relativní.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Zdejte sekvenci konce řádku, která se má použít při generování souborů: CRLF (dos) nebo LF (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Zadejte umístění, ve kterém by měl ladicí program najít soubory TypeScript namísto umístění zdroje.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Zadejte umístění, ve kterém by měl ladicí program najít soubory mapy namísto generovaných umístění.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Zadejte maximální hloubku složky, která se použije pro kontrolu souborů JavaScriptu z node_modules. Platí pouze pro allowJs.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Zadejte specifikátor modulu, který se má použít k importu továrních funkcí ‚jsx‘ a ‚jsxs‘ např. z funkce react.", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Zadejte objekt vyvolaný pro createElement. To platí pouze při cílení na generování JSX react.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Zadejte výstupní adresář pro generované deklarační soubory.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Zadejte cestu pro soubor přírůstkové kompilace .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Zadejte kořenový adresář vstupních souborů. Slouží ke kontrole struktury výstupního adresáře pomocí --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Zadejte kořenovou složku se zdrojovými soubory.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Zadejte pro ladicí programy kořenovou cestu, kde najdou referenční zdrojový kód.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Zadejte názvy typů balíčků, které se zahrnou, i když na ně neodkazuje zdrojový soubor.", + "Specify_what_JSX_code_is_generated_6646": "Zadejte, jaký kód JSX se vygeneruje.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Zadejte, jak má sledovací proces postupovat, když systému dojdou nativní sledovací procesy souborů.", + "Specify_what_module_code_is_generated_6657": "Určete, pro jaký modul se kód generuje.", + "Split_all_invalid_type_only_imports_1367": "Rozdělit všechny neplatné importy, při kterých se importují jen typy", + "Split_into_two_separate_import_declarations_1366": "Rozdělit na dvě samostatné deklarace importu", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operátor rozšíření ve výrazech new je dostupný jenom při cílení na verzi ECMAScript 5 a vyšší.", + "Spread_types_may_only_be_created_from_object_types_2698": "Typy spread se dají vytvářet jenom z typů object.", + "Starting_compilation_in_watch_mode_6031": "Spouští se kompilace v režimu sledování...", + "Statement_expected_1129": "Očekává se příkaz.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Příkazy se nepovolují v ambientních kontextech.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statické členy nemůžou odkazovat na parametry typu třídy.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Statická vlastnost {0} je v konfliktu s předdefinovanou vlastností Function.{0} funkce konstruktoru {1}.", + "Stricter_Typechecking_Options_6292": "Přísnější možnosti kontroly typů", + "String_literal_expected_1141": "Očekává se řetězcový literál.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Názvy importu a exportu řetězcového literálu se nepodporují, pokud je příznak „--module“ nastavený na „es2015“ nebo „es2020“.", + "String_literal_with_double_quotes_expected_1327": "Očekával se řetězcový literál s dvojitými uvozovkami.", + "Style_Options_6293": "Možnosti stylu", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylizujte chyby a zprávy pomocí barev a kontextu (experimentální).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "V případě znaménka minus musí být uvedeny příznaky dílčích vzorů.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Deklarace následných vlastností musí obsahovat stejný typ. Vlastnost {0} musí být typu {1}, ale tady je typu {2}.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Deklarace následných proměnných musí obsahovat stejný typ. Proměnná {0} musí být typu {1}, ale tady je typu {2}.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Nahrazení {0} za vzor {1} má nesprávný typ, očekával se typ string, obdržený je {2}.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Nahrazení {0} ve vzoru {1} může obsahovat maximálně jeden znak * (hvězdička).", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Náhrady vzoru {0} by měly být pole.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Nahrazení vzoru {0} nesmí být prázdné pole.", + "Successfully_created_a_tsconfig_json_file_6071": "Soubor tsconfig.json se úspěšně vytvořil.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Volání pomocí super se nepovolují mimo konstruktory a ve funkcích vnořených v konstruktorech.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Potlačit nadměrné kontroly vlastností pro literály objektů", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Potlačit chyby noImplicitAny u objektů indexování bez signatur indexu", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Při indexování objektů bez podpisů indexování potlačte chyby „noImplicitAny“.", + "Switch_each_misused_0_to_1_95138": "Přepnout každé chybně použité {0} na {1}", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronně volejte zpětná volání a aktualizujte stav sledování adresářů i u platforem, které nativně nepodporují rekurzivní sledování.", + "Syntax_Colon_0_6023": "Syntaxe: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Značka {0} očekává určitý minimální počet argumentů ({1}), ale objekt pro vytváření JSX {2} jich poskytuje maximálně {3}.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Označené výrazy šablony se v nepovinném řetězu nepovolují.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Cíl povoluje jen určitý počet elementů ({0}), ale zdroj jich může mít více.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Cíl vyžaduje určitý počet elementů ({0}), ale zdroj jich může mít méně.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Cílový podpis poskytuje příliš málo argumentů. Očekávalo se {0} nebo více, ale bylo obdrženo {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modifikátor {0} se dá používat jen v typescriptových souborech.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Operátor {0} nejde použít u typu symbol.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operátor {0} není u logických typů povolený. Můžete ale použít {1}.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Vlastnost {0} asynchronního iterátoru musí být metoda.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Vlastnost {0} iterátoru musí být metoda.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ Object se dá přiřadit jen k malému počtu dalších typů. Nechtěli jste místo toho použít typ any?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Příznaky Unicode (u) a Unicode Sets (v) nelze nastavit současně.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Funkce s šipkou v ES5 nemůže odkazovat na objekt „arguments“. Zvažte použití standardního výrazu funkce.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "V ES5 se na objekt „arguments“ nedá odkazovat v asynchronní funkci nebo metodě. Zvažte možnost použít standardní funkci nebo metodu.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Tělo příkazu if nemůže být prázdný příkaz.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Volání by pro tuto implementaci proběhlo úspěšně, ale signatury implementace pro přetížení nejsou externě k dispozici.", + "The_character_set_of_the_input_files_6163": "Znaková sada vstupních souborů", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Obsahující funkce šipky zachytává globální hodnotu pro this.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Text obsahující funkce nebo modulu je pro analýzu toku řízení příliš dlouhý.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Aktuální soubor je modul CommonJS a na nejvyšší úrovni nemůže používat await.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Aktuální soubor je modul CommonJS, jehož importy vytvoří volání require. Odkazovaný soubor je však modul ECMAScript a nelze ho importovat pomocí příkazu require. Raději zvažte vytvoření dynamického volání import(\"{0}\").", + "The_current_host_does_not_support_the_0_option_5001": "Aktuální hostitel nepodporuje možnost {0}.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Deklarace {0}, kterou jste pravděpodobně chtěli použít, je definovaná tady.", + "The_declaration_was_marked_as_deprecated_here_2798": "Deklarace se tady označila jako zastaralá.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Očekávaný typ pochází z vlastnosti {0}, která je deklarovaná tady v typu {1}.", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Očekávaný typ pochází z návratového typu této signatury.", + "The_expected_type_comes_from_this_index_signature_6501": "Očekávaný typ pochází z této signatury indexu.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Výraz přiřazení exportu musí být identifikátor nebo kvalifikovaný název v ambientním kontextu.", + "The_file_is_in_the_program_because_Colon_1430": "Soubor se nachází v programu, protože:", + "The_files_list_in_config_file_0_is_empty_18002": "Seznam files v konfiguračním souboru {0} je prázdný.", + "The_first_export_default_is_here_2752": "První výchozí nastavení exportu je tady.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "První parametr metody then příslibu musí být zpětné volání.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Globální typ JSX.{0} by neměl mít více než jednu vlastnost.", + "The_implementation_signature_is_declared_here_2750": "Signatura implementace se deklarovala tady.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Meta-vlastnost import.meta není povolena v souborech, které se sestaví do výstupu CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Metavlastnost import.meta je povolena pouze v případě, že možnost --module je es2020, es2022, esnext, system, node16, node18, node20 nebo nodenext.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Odvozený typ {0} se nedá pojmenovat bez odkazu na {1}. Pravděpodobně to nebude přenosné. Vyžaduje se anotace typu.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Odvozený typ {0} se odkazuje na typ s cyklickou strukturou, která se nedá triviálně serializovat. Musí se použít anotace typu.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Odvozený typ {0} odkazuje na nepřístupný typ {1}. Musí se použít anotace typu.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Odvozený typ tohoto uzlu přesahuje maximální délku, kterou kompilátor může serializovat. Je potřeba zadat explicitní anotaci typu.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicializátor deklarace „using“ musí být buď objekt s metodou „[Symbol.dispose]()“, nebo musí mít hodnotu „null“ nebo „undefined“.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicializátor deklarace „await using“ musí být buď objekt s metodou „[Symbol.asyncDispose]()“ nebo „[Symbol.dispose]()“, nebo musí mít hodnotu „null“ nebo „undefined“.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Průnik {0} se omezil na never, protože vlastnost {1} existuje v několika konstituentech a v některých z nich je privátní.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Průnik {0} se omezil na never, protože vlastnost {1} má v některých konstituentech konfliktní typy.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Klíčové slovo intrinsic se dá použít jenom k deklaraci vnitřních typů poskytovaných kompilátorem.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Aby bylo možné použít fragmenty JSX s možností kompilátoru jsxFactory, je třeba zadat možnost kompilátoru jsxFragmentFactory.", + "The_last_overload_gave_the_following_error_2770": "Poslední přetížení vrátilo následující chybu.", + "The_last_overload_is_declared_here_2771": "Poslední přetížení je deklarované tady.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Levá strana příkazu for...in nemůže být destrukturačním vzorem.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Levá strana příkazu „for...in“ nemůže být deklarace „using“.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Levá strana příkazu „for...in“ nemůže být deklarace „await using“.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Levá strana příkazu for...in nemůže používat anotaci typu.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Levá strana příkazu for...in nemůže představovat přístup k nepovinné vlastnosti.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Levá strana příkazu for..n musí být proměnná nebo přístup k vlastnosti.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Levá strana příkazu for...in musí být typu string nebo any.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Levá strana příkazu for...of nemůže používat anotaci typu.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Levá strana příkazu for...of nemůže představovat přístup k nepovinné vlastnosti.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Levá strana příkazu for...of nemůže být async.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Levá strana příkazu for...of musí být proměnná nebo přístup k vlastnosti.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Levá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Levá strana výrazu přiřazení nemůže představovat přístup k nepovinné vlastnosti.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Levá strana výrazu přiřazení musí být proměnná nebo přístup k vlastnosti.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Levá strana výrazu „instanceof“ musí být přiřaditelná k prvnímu argumentu metody „[Symbol.hasInstance]“ na pravé straně.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Levá strana výrazu instanceof musí být typu any, typem objektu nebo parametrem typu.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Národní prostředí, které se používá při zobrazování zpráv uživateli (třeba cs-CZ)", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maximální hloubka závislostí pro vyhledávání pod node_modules a načítání javascriptových souborů", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Operandem operátoru delete nemůže být privátní identifikátor.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Operandem operátoru delete nemůže být vlastnost určená jen pro čtení.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Operandem operátoru delete musí být odkaz na vlastnost.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "Operand operátoru delete musí být nepovinný.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Operandem operátoru inkrementace nebo dekrementace nemůže být přístup k nepovinné vlastnosti.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Operand operátoru inkrementace nebo dekrementace musí být proměnná nebo přístup k vlastnosti.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Parser očekával, že najde token {1}, který by odpovídal tokenu {0} tady.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování exportu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Kořen projektu je nejednoznačný, ale je vyžadován pro vyřešení položky {0} mapování importu v souboru {1}. Pokud chcete zrušit dvojznačnost, zadejte možnost kompilátoru rootDir.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "K vlastnosti {0} se nedá přistupovat v typu {1} v této třídě, protože ho překrývá jiný privátní identifikátor se stejným zápisem.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Návratový typ funkce dekorátoru parametru funkce musí být void nebo any.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Návratový typ funkce dekorátoru vlastnosti musí být void nebo any.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Návratový typ asynchronní funkce musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise. Zamýšleli jste napsat Promise<{0}>?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Pravá strana příkazu for...in musí být typu any, typem objektu nebo parametrem typu, ale tady má typ {0}.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Pravá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Pravá strana výrazu „instanceof“ musí být typ „any“, třída, funkce nebo jiný typ, který se dá přiřadit k typu rozhraní „Function“, nebo typu objektu s metodou „Symbol.hasInstance“.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Pravá strana výrazu „instanceof“ nesmí být výrazem vytvoření instance.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Kořenová hodnota souboru {0} musí být objekt.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Modul runtime vyvolá dekoratér s {1} argumenty, ale dekoratér očekává alespoň {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "Překrývající deklarace {0} je definovaná tady.", + "The_signature_0_of_1_is_deprecated_6387": "Signatura {0} pro {1} je zastaralá.", + "The_specified_path_does_not_exist_Colon_0_5058": "Zadaná cesta neexistuje: {0}", + "The_tag_was_first_specified_here_8034": "Značka se poprvé zadala tady.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Cíl přiřazení rest objektu nemůže představovat přístup k nepovinné vlastnosti.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Cílem přiřazení zbytku objektu musí být proměnná nebo přístup k vlastnosti.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Kontext this typu {0} se nedá přiřadit k možnosti this metody typu {1}.", + "The_this_types_of_each_signature_are_incompatible_2685": "Typy this jednotlivých signatur nejsou kompatibilní.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ {0} je readonly a nedá se přiřadit k neměnnému typu {1}.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Pokud se v příkazu k exportu používá „export type“, nemůžete v pojmenovaném exportu použít modifikátor „type“.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Pokud se v příkazu k importu používá „import type“, nemůžete v pojmenovaném importu použít modifikátor „type“.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Uzel tohoto typu nejde serializovat, protože nejde serializovat jeho vlastnost {0}.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ vrácený metodou {0}() asynchronního iterátoru musí být příslib pro typ s vlastností value.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ vrácený metodou {0}() iterátoru musí obsahovat vlastnost value.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Typy {0} nejsou mezi těmito typy kompatibilní.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Typy vrácené metodou {0} nejsou mezi těmito typy kompatibilní.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "Hodnota „{0}“ se tady nedá použít.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklarace proměnné příkazu for...in nemůže obsahovat inicializátor.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklarace proměnné příkazu for...of nemůže obsahovat inicializátor.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Příkaz with není podporovaný. Všechny symboly s blokem with budou typu any.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "V „{0}“ jsou typy, ale tento výsledek se v aktuálním nastavení „moduleResolution“ nepovedlo vyřešit. Zvažte aktualizaci na „node16“, „nodenext“ nebo „bundler“.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "V „{0}“ jsou typy, ale tento výsledek se při respektování pole „exports“ souboru package.json nepodařilo vyřešit. Knihovna „{1}“ bude pravděpodobně muset aktualizovat svůj soubor package.json nebo typings.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "V tomto regulárním výrazu není žádná zachycující skupina s názvem „{0}“.", + "There_is_nothing_available_for_repetition_1507": "Není k dispozici nic pro opakování.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Tato značka JSX vyžaduje, aby objekt pro vytváření fragmentů {0} byl v oboru, ale nepovedlo se ho najít.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Tato značka JSX vyžaduje, aby existovala cesta k modulu {0}, ale žádná nebyla nalezena. Ujistěte se, že máte nainstalované typy pro příslušný balíček.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Vlastnost {0} této značky JSX očekává jeden podřízený objekt typu {1}, ale poskytlo se jich více.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Vlastnost {0} této značky JSX očekává typ {1}, který vyžaduje více podřízených objektů, ale zadal se jen jeden.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu nejsou žádné zachytávací skupiny.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Tento zpětný odkaz odkazuje na skupinu, která neexistuje. V tomto regulárním výrazu jsou pouze {0} zachytávací skupiny.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Tento binární výraz nikdy nemá hodnotu null. Nechybí vám závorky?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tento znak nelze uvozovat v regulárním výrazu.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Toto porovnání se zdá být neúmyslné, protože typy {0} a {1} se nijak nepřekrývají.", + "This_condition_will_always_return_0_2845": "Tato podmínka vždy vrátí {0}.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Tato podmínka vždy vrátí „{0}“, protože JavaScript porovnává objekty pomocí odkazu, nikoli hodnoty.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Tato podmínka vždy vrátí hodnotu True, protože tato {0} je vždy definovaná.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Tato podmínka vždy vrátí hodnotu True, protože tato funkce je vždy definována. Chtěli jste ji místo toho nazvat?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Tato funkce konstruktoru se může převést na deklaraci třídy.", + "This_expression_is_always_nullish_2871": "Tento výraz má vždy hodnotu null.", + "This_expression_is_never_nullish_2881": "Tento výraz nikdy nemá hodnotu null.", + "This_expression_is_not_callable_2349": "Tento výraz se nedá zavolat.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tento výraz se nedá volat, protože je to přístupový objekt get. Nechtěli jste ho použít bez ()?", + "This_expression_is_not_constructable_2351": "Tento výraz se nedá vytvořit.", + "This_file_already_has_a_default_export_95130": "Tento soubor už má výchozí export.", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Přepsání této cesty importu není bezpečné, protože cesta se překládá na jiný projekt a relativní cesta mezi výstupními soubory projektů není stejná jako relativní cesta mezi příslušnými vstupními soubory.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Tento import používá k překladu na vstupní soubor TypeScript rozšíření {0}, ale během generování se nepřepíše, protože se nejedná o relativní cestu.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Toto je deklarace, která se rozšiřuje. Zvažte možnost přesunout rozšiřující deklaraci do stejného souboru.", + "This_kind_of_expression_is_always_falsy_2873": "Tento druh výrazu je vždy nepravdivý.", + "This_kind_of_expression_is_always_truthy_2872": "Tento druh výrazu je vždy pravdivý.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Toto je možné převést na asynchronní funkci.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože třída {0}, která ho obsahuje, nerozšiřuje jinou třídu.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Tento člen nemůže mít komentář JSDoc se značkou @override, protože jeho název je dynamický.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Tento člen nemůže mít modifikátor override, protože třída {0}, která ho obsahuje, nerozšiřuje jinou třídu.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Tento člen nemůže mít modifikátor override, protože jeho název je dynamický.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Tento člen musí mít komentář JSDoc se značkou @override, protože přepisuje člen v základní třídě {0}.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Tento člen musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Tento člen musí mít modifikátor override, protože přepisuje abstraktní metodu, která je deklarovaná v základní třídě {0}.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Na tento modul je možné se pomocí importů nebo exportů ECMAScript odkazovat jen tak, že se zapne příznak {0} a odkáže se na výchozí export.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Tento modul se deklaroval pomocí export =, a dá se použít jenom s výchozím importem při použití příznaku {0}.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tato operace se dá zjednodušit. Tento posun je totožný s {0} {1} {2}.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Toto přetížení implicitně vrací typ „{0}“, protože postrádá anotaci návratového typu.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Tato signatura přetížení není kompatibilní se signaturou implementace.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Tento parametr se nepodporuje s direktivou use strict.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Tato vlastnost parametru musí mít komentář JSDoc se značkou @override, protože přepisuje člen v základní třídě {0}.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Tato vlastnost parametru musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tento příznak regulárního výrazu nelze přepnout v rámci dílčího vzoru.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Tento příznak regulárního výrazu je k dispozici pouze při cílení na „{0}“ nebo novější.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Přepsání této relativní cesty importu není bezpečné, protože cesta vypadá jako název souboru, ale ve skutečnosti se překládá na {0}.", + "This_spread_always_overwrites_this_property_2785": "Tento rozsah vždy přepíše tuto vlastnost.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Tato syntaxe není povolená, pokud je povolená možnost erasableSyntaxOnly.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Přidejte koncovou čárku nebo explicitní omezení.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Tato syntaxe je vyhrazená pro soubory s příponou .mts nebo .cts. Místo toho použijte výraz „as“.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Tato syntaxe vyžaduje importovanou podpůrnou aplikaci, ale modul {0} se nenašel.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1}, která v {0} neexistuje. Zvažte možnost upgradovat verzi {0}.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1} a parametry {2}, která není kompatibilní s tou v {0}. Zvažte upgrade verze {0}.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Tento parametr typu může potřebovat omezení extends {0}.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Toto použití importu není platné. Volání import() se dají zapsat, ale musí mít závorky a nemůžou mít typové argumenty.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Pokud chcete tento soubor převést na modul ECMAScript, přidejte pole \"type\": \"module\" do {0}.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0}\" nebo přidejte pole \"type\": \"module\" do {1}.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pokud chcete tento soubor převést na modul ECMAScript, změňte jeho příponu na {0} nebo vytvořte místní soubor package.json s {\"type\": \"module\"}.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pokud chcete tento soubor převést na modul ECMAScript, vytvořte místní soubor package.json s { \"type\": \"module\" }.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Výrazy await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Výrazy await using nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarace nejvyšší úrovně v souborech .d.ts musí začínat modifikátorem declare, nebo export.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Smyčky for await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na es2022, esnext, system, node16, node18, node20, nodenext nebo preserve a možnost target je nastavená na es2017 nebo vyšší.", + "Trailing_comma_not_allowed_1009": "Čárka na konci není povolená.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluje každý soubor jako samostatný modul (podobné jako ts.transpileModule).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Vyzkoušejte deklaraci npm i --save-dev @types/{1}, pokud existuje, nebo přidejte nový soubor deklarací (.d.ts) s deklarací declare module '{0}';.", + "Trying_other_entries_in_rootDirs_6110": "Zkoušejí se další položky v rootDirs.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Zkouší se nahrazení {0}, umístění modulu kandidáta: {1}.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ řazené kolekce členů {0} délky {1} nemá na indexu {2} žádný prvek.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typů řazené kolekce členů cyklicky odkazují samy na sebe.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Typem {0} se dá iterovat, pouze když se použije příznak --downlevelIteration nebo s možností --target nastavenou na es2015 nebo vyšší.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Typ {0} se nedá použít jako typ indexu.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Typ {0} nejde použít k indexování typu {1}.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ {0} nevyhovuje omezení {1}.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Typ {0} nevyhovuje očekávanému typu {1}.", + "Type_0_has_no_call_signatures_2757": "Typ {0} nemá žádné signatury volání.", + "Type_0_has_no_construct_signatures_2761": "Typ {0} nemá žádné signatury konstruktu.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ {0} nemá odpovídající signaturu indexu pro typ {1}.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Typ {0} nemá žádné vlastnosti společné s typem {1}.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "U typu {0} nejsou žádné podpisy, pro které platí seznam argumentů obecného typu.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}“ je obecný a lze ho indexovat pouze pro čtení.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "V typu {0} chybí následující vlastnosti z typu {1}: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "V typu {0} chybí následující vlastnosti z typu {1}: {2} a ještě {3}", + "Type_0_is_not_a_constructor_function_type_2507": "Typ {0} není typ funkce konstruktoru.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}“ nepředstavuje platný návratový typ asynchronní funkce v ES5, protože neodkazuje na hodnotu konstruktoru kompatibilní s konstruktorem Promise.", + "Type_0_is_not_an_array_type_2461": "Typ {0} není typ pole.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ {0} není typem pole nebo řetězce.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ {0} není typem pole nebo řetězce, nebo nemá metodu [Symbol.iterator](), která vrací iterátor.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ {0} není typem pole, nebo nemá metodu [Symbol.iterator](), která vrací iterátor.", + "Type_0_is_not_assignable_to_type_1_2322": "Typ {0} nejde přiřadit typu {1}.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ {0} se nedá přiřadit k typu {1}. Měli jste na mysli {2}?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typ {0} se nedá přiřadit typu {1}. Existují dva různé typy s tímto názvem, ale nesouvisí spolu.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Typ {0} nelze přiřadit k typu {1}, jak je implikováno anotací odchylky.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Typ „{0}“ nelze přiřadit k typu „{1}“, jak je vyžadováno pro vypočítané hodnoty členů výčtu.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typů vlastností cíle.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Typ {0} se nedá přiřadit k typu {1} s hodnotou exactOptionalPropertyTypes: true. Zvažte možnost přidat hodnotu undefined do typu cíle.", + "Type_0_is_not_comparable_to_type_1_2678": "Typ {0} se nedá porovnat s typem {1}.", + "Type_0_is_not_generic_2315": "Typ {0} není obecný.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ {0} může představovat primitivní hodnotu, která není povolena jako pravý operand operátoru in.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Typ {0} musí mít metodu [Symbol.asyncIterator](), která vrací asynchronní iterátor.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ {0} musí mít metodu [Symbol.iterator](), která vrací iterátor.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Typ {0} neposkytuje žádnou shodu pro podpis {1}.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ {0} odkazuje rekurzivně sám na sebe jako na základní typ.", + "Type_Checking_6248": "Kontrola typů", + "Type_alias_0_circularly_references_itself_2456": "Alias typu {0} odkazuje cyklicky sám na sebe.", + "Type_alias_must_be_given_a_name_1439": "Alias typu musí mít název.", + "Type_alias_name_cannot_be_0_2457": "Název aliasu typu nemůže být {0}.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasy typů se dají používat jen v typescriptových souborech.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "V deklaraci konstruktoru se nemůže objevit anotace typu.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Anotace typů se dají používat jen v typescriptových souborech.", + "Type_argument_expected_1140": "Očekává se argument typu.", + "Type_argument_list_cannot_be_empty_1099": "Seznam argumentů typu nemůže být prázdný.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typů se dají používat jen v typescriptových souborech.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typů pro {0} se cyklicky odkazují samy na sebe.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozici {0} ve zdroji není kompatibilní s typem na pozici {1} v cíli.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozicích {0} až {1} ve zdroji není kompatibilní s typem na pozici {2} v cíli.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ obsahující privátní název „{0}“ nejde použít s možností --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Soubory deklarace typu, které se mají zahrnout do kompilace", + "Type_expected_1110": "Očekával se typ.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Kontrolní výrazy importu typů by měly mít přesně jeden klíč – resolution-mode – s hodnotou import nebo require.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Import typu modulu ECMAScript z modulu CommonJS musí mít atribut resolution-mode.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Vytvoření instance typu je příliš hluboké a může být nekonečné.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ se přímo nebo nepřímo odkazuje ve zpětném volání jeho vlastní metody then při splnění.", + "Type_library_referenced_via_0_from_file_1_1402": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1}", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1} s packageId {2}", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu await musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ hodnoty počítané vlastnosti je {0} a nedá se přiřadit do typu {1}.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Typ instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterovaných elementů yield* musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Typ vlastnosti {0} cyklicky odkazuje sám na sebe v mapovaném typu {1}.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Typ operandu yield v asynchronním generátoru musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Import, při kterém se importuje pouze typ modulu ECMAScript z modulu CommonJS, musí mít atribut resolution-mode.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Typ pochází z tohoto importu. Import stylu oboru názvů není možné zavolat ani vytvořit a při běhu způsobí chybu. Zvažte možnost použít tady místo toho výchozí import nebo importovat require.", + "Type_parameter_0_has_a_circular_constraint_2313": "Parametr typu {0} má cyklické omezení.", + "Type_parameter_0_has_a_circular_default_2716": "Parametr typu {0} má cyklickou výchozí hodnotu.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Parametr typu {0} signatury volání z exportovaného rozhraní má nebo používá privátní název {1}.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Parametr typu {0} signatury konstruktoru z exportovaného rozhraní má nebo používá privátní název {1}.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Parametr typu {0} exportované třídy má nebo používá privátní název {1}.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Parametr typu {0} exportované funkce má nebo používá privátní název {1}.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Parametr typu {0} exportovaného rozhraní má nebo používá privátní název {1}.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Parametr typu {0} exportovaného typu namapovaného objektu typu má nebo používá privátní název {1}.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Parametr typu {0} exportovaného aliasu typu má nebo používá privátní název {1}.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Parametr typu {0} metody z exportovaného rozhraní má nebo používá privátní název {1}.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Parametr typu {0} veřejné metody z exportované třídy má nebo používá privátní název {1}.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Parametr typu {0} veřejné statické metody z exportované třídy má nebo používá privátní název {1}.", + "Type_parameter_declaration_expected_1139": "Očekává se deklarace parametru typu.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Deklarace parametrů typů se dají používat jen v typescriptových souborech.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Výchozí parametry typů se můžou odkazovat jen na dříve deklarované parametry typů.", + "Type_parameter_list_cannot_be_empty_1098": "Seznam parametrů typu nemůže být prázdný.", + "Type_parameter_name_cannot_be_0_2368": "Název parametru typu nemůže být {0}.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu se nemůžou vyskytovat v deklaraci konstruktoru.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Predikát typu {0} nejde přiřadit {1}.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.", + "Type_reference_directive_0_was_not_resolved_6120": "======== Direktiva odkazu na typ {0} se nepřeložila. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1}, primární: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1} s ID balíčku {2}, primární: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typy se v deklaracích exportu v souborech JavaScriptu nemůžou vyskytovat.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Typy mají samostatné deklarace privátní vlastnosti {0}.", + "Types_of_construct_signatures_are_incompatible_2419": "Typy signatur konstruktorů nejsou kompatibilní.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Typy parametrů {0} a {1} jsou nekompatibilní.", + "Types_of_property_0_are_incompatible_2326": "Typy vlastnosti {0} nejsou kompatibilní.", + "Unable_to_open_file_0_6050": "Soubor {0} nejde otevřít.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Když se podpis dekorátoru třídy volá jako výraz, nejde přeložit.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Když se podpis dekorátoru metody volá jako výraz, nejde přeložit.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Když se podpis dekorátoru parametru volá jako výraz, nejde přeložit.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Když se podpis dekorátoru vlastnosti volá jako výraz, nejde přeložit.", + "Undetermined_character_escape_1513": "Neurčený řídicí znak.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Neočekáváno: „{0}“. Nechtěli jste ho uvést zpětným lomítkem?", + "Unexpected_end_of_text_1126": "Neočekávaný konec textu", + "Unexpected_keyword_or_identifier_1434": "Neočekávané klíčové slovo nebo identifikátor.", + "Unexpected_token_1012": "Neočekávaný token", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Neočekávaný token. Očekával se konstruktor, metoda, přístupový objekt nebo vlastnost.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Neočekávaný token. Očekával se název parametru typu bez složených závorek.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Neočekávaný token. Měli jste na mysli {'>'} nebo >?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Neočekávaný token. Měli jste na mysli {'}'} nebo }?", + "Unexpected_token_expected_1179": "Neočekávaný token. Očekává se znak {.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Řídicí sekvence Unicode se tady nemůže vyskytovat.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Řídicí sekvence Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Výrazy hodnoty vlastnosti Unicode jsou k dispozici pouze v případě, že je nastaven příznak Unicode (u) nebo Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Neznámý název vlastnosti Unicode.", + "Unknown_Unicode_property_name_or_value_1529": "Neznámý název nebo hodnota vlastnosti Unicode.", + "Unknown_Unicode_property_value_1526": "Neznámá hodnota vlastnosti Unicode.", + "Unknown_build_option_0_5072": "Neznámá možnost sestavení {0}", + "Unknown_build_option_0_Did_you_mean_1_5077": "Neznámá možnost sestavení {0}. Měli jste na mysli {1}?", + "Unknown_compiler_option_0_5023": "Neznámá možnost kompilátoru {0}", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Neznámá možnost kompilátoru {0}. Měli jste na mysli {1}?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Neznámé klíčové slovo nebo identifikátor. Neměli jste na mysli „{0}“?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Neznámá možnost excludes. Měli jste na mysli exclude?", + "Unknown_regular_expression_flag_1499": "Neznámý příznak regulárního výrazu.", + "Unknown_type_acquisition_option_0_17010": "Neznámá možnost získání typu {0}", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Neznámá možnost získání typu {0}. Měli jste na mysli {1}?", + "Unknown_watch_option_0_5078": "Neznámá možnost sledování {0}", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Neznámá možnost sledování {0}. Měli jste na mysli {1}?", + "Unreachable_code_detected_7027": "Zjistil se nedosažitelný kód.", + "Unterminated_Unicode_escape_sequence_1199": "Neukončená řídicí sekvence Unicode", + "Unterminated_quoted_string_in_response_file_0_6045": "Neukončený řetězec v uvozovkách v souboru odezvy {0}", + "Unterminated_regular_expression_literal_1161": "Neukončený literál regulárního výrazu", + "Unterminated_string_literal_1002": "Neukončený řetězcový literál", + "Unterminated_template_literal_1160": "Neukončený literál šablony", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Volání netypové funkce nemusí přijmout argumenty typu.", + "Unused_label_7028": "Nepoužívaný popisek", + "Unused_ts_expect_error_directive_2578": "Nepoužitá direktiva @ts-expect-error", + "Update_import_from_0_90058": "Aktualizovat import z: {0}", + "Update_modifiers_of_0_90061": "Aktualizujte modifikátory „{0}“", + "Updating_output_timestamps_of_project_0_6359": "Aktualizují se výstupní časová razítka projektu {0}...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Aktualizují se nezměněná výstupní časová razítka projektu {0}...", + "Use_0_95174": "Použít {0}", + "Use_0_instead_5106": "Místo toho použijte možnost „{0}“.", + "Use_Number_isNaN_in_all_conditions_95175": "Ve všech podmínkách použijte Number.isNaN.", + "Use_element_access_for_0_95145": "Použít přístup k elementům pro {0}", + "Use_element_access_for_all_undeclared_properties_95146": "Použít přístup k elementům pro všechny nedeklarované vlastnosti", + "Use_import_type_95180": "Použijte „import type“.", + "Use_synthetic_default_member_95016": "Použije syntetického výchozího člena.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Při překladu importů balíčků použijte pole „exports“ souboru package.json.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Při řešení importů použijte pole „imports“ v souboru package.json.", + "Use_type_0_95181": "Použijte „type {0}„.", + "Using_0_subpath_1_with_target_2_6404": "Používá se {0} dílčí cesta {1} s cílem {2}.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Použití fragmentů JSX vyžaduje, aby objekt pro vytváření fragmentů {0} byl v oboru, ale nepovedlo se ho najít.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Použití řetězce v příkazu for...of se podporuje jenom v ECMAScript 5 nebo vyšší verzi.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Použití --build, -b způsobí, že se tsc bude chovat spíše jako orchestrátor sestavení než kompilátor. Pomocí této možnosti můžete aktivovat vytváření složených projektů, o kterých se můžete dozvědět více {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", + "VERSION_6036": "VERZE", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Hodnota typu {0} nemá žádné vlastnosti společné s typem {1}. Chtěli jste ji volat?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Hodnota typu {0} se nedá volat. Nechtěli jste zahrnout new?", + "Variable_0_implicitly_has_an_1_type_7005": "Proměnná {0} má implicitně typ {1}.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Proměnná {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Proměnná {0} má na některých místech implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "V některých umístěních, kde se nedá určit typ proměnné, má proměnná {0} implicitně typ {1}.", + "Variable_0_is_used_before_being_assigned_2454": "Proměnná {0} je použitá před přiřazením.", + "Variable_declaration_expected_1134": "Očekává se deklarace proměnné.", + "Variable_declaration_list_cannot_be_empty_1123": "Seznam deklarací proměnných nemůže být prázdný.", + "Variable_declaration_not_allowed_at_this_location_1440": "Deklarace proměnné není v tomto umístění povolená.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Proměnná musí mít explicitní anotaci typu s možností --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Proměnné s více deklaracemi nemohou být vložené.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element variadic na pozici {0} ve zdroji neodpovídá elementu na pozici {1} v cíli.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Poznámky Variance se podporují pouze u aliasů typů pro typy objektů, funkcí, konstruktorů a mapování.", + "Version_0_6029": "Verze {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Informace o migraci najdete na https://aka.ms/ts6.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Další informace o tomto souboru si můžete přečíst na https://aka.ms/tsconfig", + "WATCH_OPTIONS_6918": "MOŽNOSTI SLEDOVÁNÍ", + "Watch_and_Build_Modes_6250": "Režimy sledování a sestavování", + "Watch_input_files_6005": "Sledovat vstupní soubory", + "Watch_option_0_requires_a_value_of_type_1_5080": "Možnost sledování {0} vyžaduje hodnotu typu {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Pro {0} můžeme napsat typ jenom tak, že sem přidáme typ pro celý parametr.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Při přiřazování funkcí zkontrolujte a zajistěte, aby parametry a vrácené hodnoty měly kompatibilní podtypy.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Při kontrole typů berte v potaz i hodnoty „null“ a „undefined“.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Určuje, jestli se místo vymazání obrazovky má zachovat zastaralý výstup konzoly v režimu sledování.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Zabalit všechny neplatné znaky do kontejneru výrazu", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Uzavřít všechny neplatné výrazy dekoratéru do závorek", + "Wrap_all_object_literal_with_parentheses_95116": "Uzavřít všechny literály objektů do závorek", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Zabalit všechny JSX bez nadřazených položek ve fragmentu JSX", + "Wrap_in_JSX_fragment_95120": "Zabalit ve fragmentu JSX", + "Wrap_in_parentheses_95194": "Uzavřít do závorek", + "Wrap_invalid_character_in_an_expression_container_95108": "Zabalit neplatný znak do kontejneru výrazu", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Uzavřít následující kód, který by měl být literál objektu, do závorek", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informace o všech možnostech kompilátoru najdete na {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Přes globální import se modul nedá přejmenovat.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Nelze přejmenovat elementy definované ve složce node_modules.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Nelze přejmenovat elementy definované v jiné složce node_modules.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nejde přejmenovat elementy definované ve standardní knihovně TypeScriptu.", + "You_cannot_rename_this_element_8000": "Tento element nejde přejmenovat.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Objekt {0} přijímá málo argumentů k tomu, aby se dal použít jako dekoratér. Nechtěli jste ho nejprve volat a napsat @{0}()?", + "_0_and_1_index_signatures_are_incompatible_2330": "Signatury indexu {0} a {1} jsou nekompatibilní.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operace {0} a {1} se nedají kombinovat bez závorek.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Položka {0} je zadána dvakrát. Atribut s názvem {0} se přepíše.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ na konci typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ na začátku typu není platná syntaxe TypeScriptu. Nechtěli jste napsat „{1}“?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "{0} se dá importovat jen zapnutím příznaku esModuleInterop a pomocí výchozího importu.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "{0} se dá importovat jen pomocí výchozího importu.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "{0} se dá importovat jen pomocí volání require nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "{0} se dá importovat jen pomocí volání require nebo pomocí výchozího importu.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo výchozího importu.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "{0} se dá importovat jen pomocí import {1} = require({2}) nebo zapnutím příznaku esModuleInterop a pomocí výchozího importu.", + "_0_cannot_be_used_as_a_JSX_component_2786": "{0} se nedá použít jako součást JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "{0} se nedá používat jako hodnota, protože se exportovalo pomocí export type.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "{0} se nedá používat jako hodnota, protože se importovalo pomocí import type.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Komponenty {0} nepřijímají text jako podřízené prvky. Text v JSX má typ string, ale očekávaný typ {1} je {2}.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Instanci {0} by bylo možné vytvořit s libovolným typem, který by nemusel souviset s {1}.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklarace „{0}“ je možné deklarovat jenom uvnitř bloku.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklarace {0} se dají používat jen v typescriptových souborech.", + "_0_declarations_may_not_have_binding_patterns_1492": "Deklarace „{0}“ nesmí mít vzory s vazbami.", + "_0_declarations_must_be_initialized_1155": "Deklarace „{0}“ se musejí inicializovat.", + "_0_expected_1005": "Očekával se: {0}.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ má typ řetězce, ale pokud je povolená možnost isolatedModules, musí mít syntakticky rozpoznatelnou syntaxi řetězce.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "{0} nemá žádný exportovaný člen s názvem {1}. Neměli jste na mysli {2}?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "{0} má implicitně návratový typ {1}, ale je možné, že lepší typ by se vyvodil z využití.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "{0} obsahuje implicitně návratový typ any, protože neobsahuje anotaci návratového typu a přímo nebo nepřímo se odkazuje v jednom ze svých návratových výrazů.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "{0} má implicitně typ any, protože nemá anotaci typu a odkazuje se přímo nebo nepřímo v jeho vlastním inicializátoru.", + "_0_index_signatures_are_incompatible_2634": "Signatury indexu {0} jsou nekompatibilní.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "{0} Typ indexu {1} se nedá přiřadit k {2} typu indexu {3}.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0} je primitivum, ale {1} je obálkový objekt. Pokud je to možné, použijte raději {0}.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "{0} je typ a nedá se importovat do javascriptových souborů. V poznámce typu JSDoc použijte {1}.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ je typ a musí se importovat pomocí importu „pouze typ“, pokud je povolená možnost verbatimModuleSyntax.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "{0} je nepoužívané přejmenování {1}. Chtěli jste ji použít jako poznámku typu?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "{0} se dá přiřadit k omezení typu {1}, ale pro {1} se dala vytvořit instance s jiným podtypem omezení {2}.", + "_0_is_automatically_exported_here_18044": "{0} se sem automaticky exportuje.", + "_0_is_declared_but_its_value_is_never_read_6133": "Deklaruje se {0}, ale jeho hodnota se vůbec nečte.", + "_0_is_declared_but_never_used_6196": "{0} se nadeklarovalo, ale nepoužilo.", + "_0_is_declared_here_2728": "{0} je deklarované tady.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "{0} je definované jako vlastnost ve třídě {1}, ale v {2} se tady přepisuje jako přístupový objekt.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "{0} je definované jako přístupový objekt ve třídě {1}, ale v {2} se tady přepisuje jako vlastnost instance.", + "_0_is_deprecated_6385": "{0} je zastaralé.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "{0} není platnou metavlastností pro klíčové slovo {1}. Měli jste na mysli {2}?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "{0} není povolen jako název parametru.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "{0} se nepovoluje jako název deklarace proměnné.", + "_0_is_of_type_unknown_18046": "„{0}“ je typ unknown", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "„{0}“ je pravděpodobně typ null.", + "_0_is_possibly_null_or_undefined_18049": "„{0}“ je typ null nebo undefined", + "_0_is_possibly_undefined_18048": "„{0}“ je pravděpodobně typ undefined.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Na {0} se přímo nebo nepřímo odkazuje ve vlastním základním výrazu.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Na {0} se odkazuje přímo nebo nepřímo v jeho vlastní anotaci typu.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "{0} se zadalo více než jednou, proto se toto použití přepíše.", + "_0_list_cannot_be_empty_1097": "Seznam {0} nemůže být prázdný.", + "_0_modifier_already_seen_1030": "Modifikátor {0} se už jednou vyskytl.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modifikátor {0} se může vyskytovat jenom u parametru typu aliasu třídy, rozhraní nebo typu.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modifikátor „{0}“ se může vyskytovat jenom u parametru typu funkce, metody nebo třídy.", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modifikátor {0} se nemůže objevit v deklaraci konstruktoru.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modifikátor {0} se nemůže objevit v elementu modulu nebo oboru názvů.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Modifikátor {0} se nemůže objevit v parametru.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Modifikátor {0} se nemůže objevit u člena typu.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modifikátor {0} se nemůže objevit u parametru typu.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modifikátor „{0}“ se nemůže vyskytovat v deklaraci „using“.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modifikátor {0} se nemůže vyskytovat v deklaraci „await using“.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modifikátor {0} se nemůže objevit v signatuře indexu.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modifikátor {0} se nemůže objevit u elementů třídy tohoto typu.", + "_0_modifier_cannot_be_used_here_1042": "Modifikátor {0} tady nejde použít.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Modifikátor {0} nejde použít v ambientním kontextu.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modifikátor {0} nejde použít s modifikátorem {1}.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modifikátor {0} se nedá použít s privátním identifikátorem.", + "_0_modifier_must_precede_1_modifier_1029": "Modifikátor {0} se musí vyskytovat před modifikátorem {1}.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po „\\{0}“ musí následovat výraz s hodnotou vlastnosti Unicode uzavřený do složených závorek.", + "_0_needs_an_explicit_type_annotation_2782": "{0} vyžaduje explicitní anotaci typu.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "{0} jenom odkazuje na typ, ale tady se používá jako obor názvů.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "{0} odkazuje jenom na typ, ale používá se tady jako hodnota.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "{0} odkazuje jenom na typ, ale tady se používá jako hodnota. Nechtěli jste použít {1} v {0}?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "‚{0}‘ odkazuje jen na typ, ale tady se používá jako hodnota. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na es2015 nebo novější.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "{0} odkazuje na globální UMD, ale aktuální soubor je modul. Zvažte raději přidání importu.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "{0} odkazuje na hodnotu, ale tady se používá jako typ. Měli jste na mysli typeof {0}?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ se překládá na typ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ se překládá na deklaraci „pouze typ“ a musí se exportovat pomocí importu „pouze typ“, když je povolena možnost „verbatimModuleSyntax“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „import type“, kde se importuje „{0}“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ se překládá na deklaraci „pouze typ“ a musí být v tomto souboru označen jako „pouze typ“, než se znovu exportuje, když je povolená možnost „{1}“. Zvažte možnost použít „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Hodnota „{0}“ se překládá na deklaraci „pouze typ“ a musí se znovu exportovat pomocí zpětného exportu „pouze typ“, když je povoleno {1}.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Klíčové slovo {0} by mělo být nastaveno uvnitř objektu compilerOptions konfiguračního souboru JSON.", + "_0_tag_already_specified_1223": "Značka {0} se už specifikovala.", + "_0_was_also_declared_here_6203": "{0} se deklarovalo i tady.", + "_0_was_exported_here_1377": "{0} se exportovalo tady.", + "_0_was_imported_here_1376": "{0} se importovalo tady.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "{0} s chybějící anotací návratového typu má implicitně návratový typ {1}.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "{0} s chybějící anotací návratového typu má implicitně typ yield {1}.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modifikátor abstract se může objevit jenom v deklaraci třídy, metody nebo vlastnosti.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Modifikátor accessor se může objevit jenom v deklaraci vlastnosti.", + "and_here_6204": "a tady.", + "and_npm_install_D_types_Slashnode_6290": "a npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Na „arguments“ nelze odkazovat v inicializátorech vlastností nebo statických inicializačních blocích třídy.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "auto: Považovat soubory s importy, exporty, import.meta, jsx (s jsx: react-jsx) nebo formátem esm (s modulem node16+) za moduly.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Výraz „await“ nelze použít uvnitř statického bloku třídy.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Výrazy await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Výrazy await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Výrazy await nejdou použít v inicializátoru parametru.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "Výraz await nemá žádný vliv na typ tohoto výrazu.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Deklarace await using nejsou v ambientní kontextech povolené.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Deklarace await using nejsou povoleny v klauzulích case ani default, pokud nejsou obsaženy v bloku.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Příkazy „await using“ jsou povoleny jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat „export {}“, aby se tento soubor převedl na modul.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Výrazy „await“ se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Příkazy „await using“ nelze použít uvnitř statického bloku třídy.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Možnost baseUrl je nastavená na {0}, pomocí této hodnoty se přeloží název modulu {1}, který není relativní.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Po „\\c“ musí následovat písmeno v ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "#! se dá použít jen na začátku souboru.", + "case_or_default_expected_1130": "Očekává se case nebo default.", + "catch_or_finally_expected_1472": "Očekávalo se catch nebo finally.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Inicializátor člena výčtu const se vyhodnotil na nekonečnou hodnotu.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Inicializátor člena výčtu const se vyhodnotil na nepovolenou hodnotu NaN.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Inicializátory členů konstantního výčtu musí být konstantní výrazy.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Výčty const se dají použít jenom ve výrazech přístupu k vlastnosti nebo indexu nebo na pravé straně deklarace importu, přiřazení exportu nebo dotazu na typ.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "constructor se nedá použít jako název vlastnosti parametru.", + "constructor_is_a_reserved_word_18012": "#constructor je rezervované slovo.", + "default_Colon_6903": "výchozí:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Příkaz delete nejde volat u identifikátoru ve striktním režimu.", + "export_Asterisk_does_not_re_export_a_default_1195": "export * neprovádí opakovaný export výchozí hodnoty.", + "export_can_only_be_used_in_TypeScript_files_8003": "export = se dá používat jen v typescriptových souborech.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Modifikátor export se nedá použít u ambientních modulů a rozšíření modulů, protože jsou vždy viditelné.", + "extends_clause_already_seen_1172": "Klauzule extends se už jednou vyskytla.", + "extends_clause_must_precede_implements_clause_1173": "Klauzule extends se musí vyskytovat před klauzulí implements.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzule extends exportované třídy {0} má nebo používá privátní název {1}.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzule extends exportované třídy má nebo používá privátní název {0}.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzule extends exportovaného rozhraní {0} má nebo používá privátní název {1}.", + "false_unless_checkJs_is_set_6932": "„false“, pokud není nastavené „checkJs“.", + "false_unless_composite_is_set_6906": "„false“, pokud není nastavené „composite“.", + "file_6025": "soubor", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Smyčky for await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Smyčky for await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Smyčky „for await“ nelze použít uvnitř statického bloku třídy.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Přístupové objekty get a set nemůžou deklarovat parametry this.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "[], pokud je zadáno „soubory“, jinak [\"**/*\"]", + "implements_clause_already_seen_1175": "Klauzule implements se už jednou vyskytla.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule implements se dají používat jen v typescriptových souborech.", + "import_can_only_be_used_in_TypeScript_files_8002": "import = se dá používat jen v typescriptových souborech.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklarace infer jsou povolené jenom v klauzuli extends podmíněného typu.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po „\\k“ musí následovat název zachycující skupiny uzavřený do ostrých závorek.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Nepovoluje se používat let jako název v deklaracích let nebo const.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Výraz new s chybějící signaturou konstruktoru v cíli má implicitně typ any.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "[\"node_modules\", \"bower_components\", \"jspm_packages\"] a hodnotu „outDir“, pokud je zadána.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext`, pokud je `module` nastaveno na `nodenext`; `node16`, pokud je `module` nastaveno na `node16` nebo `node18`; jinak `bundler`.", + "one_of_Colon_6900": "jeden z:", + "one_or_more_Colon_6901": "1 nebo více:", + "options_6024": "možnosti", + "or_JSX_element_expected_1145": "Očekával se element { nebo JSX.", + "or_expected_1144": "Očekává se znak { nebo ;.", + "package_json_does_not_have_a_0_field_6100": "Soubor package.json neobsahuje pole {0}.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "package.json nemá položku typesVersions, která by odpovídala verzi {0}.", + "package_json_had_a_falsy_0_field_6220": "Soubor package.json obsahoval neplatné pole {0}.", + "package_json_has_0_field_1_that_references_2_6101": "Soubor package.json má pole {0} {1}, které odkazuje na {2}.", + "package_json_has_a_peerDependencies_field_6281": "Soubor package.json má pole „peerDependencies“.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "package.json má položku typesVersions {0}, která není platný rozsah semver.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "package.json má položku typesVersions {0}, která odpovídá verzi kompilátoru {1}. Hledá se vzor, který bude odpovídat názvu modulu {2}.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "package.json má pole typesVersions s mapováními cesty specifickými pro verzi.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json scope {0} implicitně mapuje specifikátor {1} na hodnotu null.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json scope {0} má neplatný typ pro cíl specifikátoru {1}.", + "package_json_scope_0_has_no_imports_defined_6273": "package.json scope {0} nemá definovány žádné importy.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Je zadaná možnost paths, hledá se vzor, který odpovídá názvu modulu {0}.", + "q_is_only_available_inside_character_class_1511": "„\\q“ je k dispozici pouze uvnitř třídy znaků.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po „\\q“ musí následovat řetězcové alternativy uzavřené ve složených závorkách.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modifikátor readonly se může objevit jenom v deklaraci vlastnosti nebo signatuře indexu.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modifikátor typu readonly se povoluje jen pro typy literálů pole a řazené kolekce členů.", + "require_call_may_be_converted_to_an_import_80005": "Volání require se dá převést na import.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "resolution-mode se dá nastavit pouze pro importy type-only.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "resolution-mode je jediný platný klíč pro kontrolní výrazy importu typů.", + "resolution_mode_should_be_either_require_or_import_1453": "resolution-mode by měl být buď require, nebo import.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Je nastavená možnost rootDirs, použije se k překladu relativního názvu modulu {0}.", + "super_can_only_be_referenced_in_a_derived_class_2335": "Na vlastnost super se dá odkazovat jenom v odvozené třídě.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Na možnost super je možné odkazovat jenom ve členech odvozených tříd nebo výrazů literálu objektu.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Na vlastnost super se nedá odkazovat v názvu počítané vlastnosti.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Na vlastnost super se nedá odkazovat v argumentech konstruktoru.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Možnost super je povolená jenom ve členech výrazů literálu objektu, pokud je možnost target ES2015 nebo vyšší.", + "super_may_not_use_type_arguments_2754": "super nemůže používat argumenty typů.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Před přístupem k vlastnosti super v konstruktoru odvozené třídy se musí zavolat super.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Možnost super se musí volat před přístupem k this v konstruktoru odvozené třídy.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Po vlastnosti super musí následovat seznam argumentů nebo přístup ke členu.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Přístup k vlastnostem pomocí super je povolený jenom v konstruktoru, členské funkci nebo členském přístupovém objektu odvozené třídy.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Na vlastnost this se nedá odkazovat v názvu počítaného prostředku.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Na vlastnost this se nedá odkazovat v modulu nebo těle oboru názvů.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Na vlastnost this se nedá odkazovat v inicializátoru statické vlastnosti.", + "this_cannot_be_referenced_in_current_location_2332": "Na vlastnost this se nedá odkazovat v aktuálním umístění.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Možnost this má implicitně typ any, protože nemá anotaci typu.", + "true_for_ES2022_and_above_including_ESNext_6930": "„true“ pro ES2022 a vyšší, včetně ESNext.", + "true_if_composite_false_otherwise_6909": "„true“, pokud „composite“, „false“ jinak", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "Má hodnotu True, když „moduleResolution“ je „node16“, „nodenext“ nebo „bundler“; v opačném případě má hodnotu False.", + "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: kompilátor TypeScriptu", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json je k dispozici, ale nebude načten, pokud jsou soubory zadány v příkazovém řádku. K přeskočení této chyby použijte --ignoreConfig.", + "type_Colon_6902": "typ:", + "unique_symbol_types_are_not_allowed_here_1335": "Typy unique symbol tady nejsou povolené.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy unique symbol jsou povolené jen u proměnných v příkazu proměnné.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typy unique symbol nejde použít v deklaraci proměnné s názvem vazby.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Direktiva use strict se nedá použít se seznamem parametrů, které nejsou jednoduché.", + "use_strict_directive_used_here_1349": "Direktiva use strict se použila tady.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Deklarace using nejsou v ambientní kontextech povolené.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Deklarace using nejsou povoleny v klauzulích case ani default, pokud nejsou obsaženy v bloku.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Příkazy with se ve funkčním bloku async nepovolují.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Příkazy with se ve striktním režimu nepovolují.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Implicitním výsledkem výrazu yield je typ any, protože v jeho obsahujícím generátoru chybí anotace návratového typu.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Výrazy yield nejde použít v inicializátoru parametru." +} diff --git a/tsc/internal/diagnostics/loc/de-DE.generated.json b/tsc/internal/diagnostics/loc/de-DE.generated.json index f30ab1fbaaee2..44af6f0906c93 100644 --- a/tsc/internal/diagnostics/loc/de-DE.generated.json +++ b/tsc/internal/diagnostics/loc/de-DE.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "ALLE COMPILEROPTIONEN", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Ein Modifizierer \"{0}\" darf nicht mit einer Importdeklaration verwendet werden.", - "A_0_parameter_must_be_the_first_parameter_2680": "Ein \"{0}\"-Parameter muss der erste Parameter sein.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Ein JSDoc-Tag \"@template\" darf nicht auf ein \"@typedef\", \"@callback\" oder \"@overload\" folgen.", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Ein JSDoc-Kommentar \"@typedef\" darf nicht mehrere @type-Tags enthalten.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Ein \"bigint\"-Literal kann nicht als Eigenschaftenname verwendet werden.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Ein bigint-Literal kann keine exponentielle Notation verwenden.", - "A_bigint_literal_must_be_an_integer_1353": "Ein bigint-Literal muss eine ganze Zahl sein.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Ein Bindungsmusterparameter darf in einer Implementierungssignatur nicht optional sein.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Eine break-Anweisung darf nur in einer einschließenden iteration- oder switch-Anweisung verwendet werden.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Eine break-Anweisung kann nur zu einer Bezeichnung einer einschließenden Anweisung springen.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Eine Zeichenklasse darf kein reserviertes doppeltes Interpunktionszeichen enthalten. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Ein Zeichenklassenbereich darf nicht durch eine andere Zeichenklasse gebunden werden.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Eine Klasse kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten implementieren.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Eine Klasse kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern implementieren.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Eine Klasse kann einen primitiven Typ wie \"{0}\" nicht erweitern. Klassen können nur konstruierbare Werte erweitern.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Eine Klasse kann keinen primitiven Typ wie \"{0}\" implementieren. Es können nur andere benannte Objekttypen implementiert werden.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Eine Klassendeklaration ohne den default-Modifizierer muss einen Namen besitzen.", - "A_class_member_cannot_have_the_0_keyword_1248": "Ein Klassenmember darf nicht das Schlüsselwort \"{0}\" aufweisen.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Ein Kommaausdruck ist in einem berechneten Eigenschaftennamen unzulässig.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Ein berechneter Eigenschaftenname kann nicht aus seinem enthaltenden Typ auf einen Typparameter verweisen.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Ein berechneter Eigenschaftenname in einer Klasseneigenschaftsdeklaration muss einen einfachen Literaltyp oder den Typ \"unique symbol\" aufweisen.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Ein berechneter Eigenschaftenname in einer Methodenüberladung muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Ein berechneter Eigenschaftenname in einem Typliteral muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Ein berechneter Eigenschaftenname in einem Umgebungskontext muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Ein berechneter Eigenschaftenname in einer Schnittstelle muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Ein berechneter Eigenschaftenname muss vom Typ \"string\", \"number\", \"symbol\" oder \"any\" sein.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Eine „const“-Assertion kann nur auf Referenzen auf Enumerationsmitglieder oder auf String-, Zahlen-, Boolean-, Array- oder Objektliterale angewendet werden.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Auf einen const-Enumerationsmember kann nur mithilfe eines Zeichenfolgenliterals zugegriffen werden.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Bei einem const-Initialisierer in einem Umgebungskontext muss es sich um ein Zeichenfolgen- oder um ein numerisches Literal oder um einen Verweis auf ein Enumerationsliteral handeln.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Ein Konstruktor darf keinen super-Aufruf enthalten, wenn seine Klasse \"null\" erweitert.", - "A_constructor_cannot_have_a_this_parameter_2681": "Ein Konstruktor darf keinen \"this\"-Parameter aufweisen.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Eine continue-Anweisung darf nur in einer einschließenden iteration-Anweisung verwendet werden.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Eine continue-Anweisung kann nur zu einer Bezeichnung einer einschließenden Iterationsanweisung springen.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Eine Deklarationsdatei kann nicht ohne \"import type\" importiert werden. Wollten Sie stattdessen eine Implementierungsdatei \"{0}\" importieren?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Ein declare-Modifizierer darf nicht in einem Kontext verwendet werden, der bereits ein Umgebungskontext ist.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Ein Decorator-Element kann nur für eine Methodenimplementierung und nicht für eine Überladung verwendet werden.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Eine default-Klausel darf nicht mehrmals in einer switch-Anweisung auftreten.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Ein Standardexport kann nur in einem Modul des Typs ECMAScript verwendet werden.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Ein Standardexport muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Eine definitive Zuweisungsassertion \"!\" ist in diesem Kontext nicht zulässig.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Eine destrukturierende Deklaration muss einen Initialisierer besitzen.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Ein dynamischer Importaufruf in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Ein dynamischer Importaufruf gibt \"Promise\" zurück. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihre Option \"--lib\" ein.", - "A_file_cannot_have_a_reference_to_itself_1006": "Eine Datei darf keinen Verweis auf sich selbst enthalten.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Eine Funktion, die \"never\" zurückgibt, kann keinen erreichbaren Endpunkt besitzen.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Eine Funktion, die mit dem Schlüsselwort \"new\" aufgerufen wird, darf keinen \"this\"-Typ aufweisen, der \"void\" ist.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Eine Funktion, deren Typ weder als \"void\" noch als \"any\" deklariert ist, muss einen Wert zurückgeben.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Ein Generator darf keine void-Typanmerkung aufweisen.", - "A_get_accessor_cannot_have_parameters_1054": "Eine get-Zugriffsmethode darf keine Parameter haben.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Eine Get-Zugriffsmethode muss mindestens so zugänglich sein wie der Setter.", - "A_get_accessor_must_return_a_value_2378": "Eine get-Zugriffsmethode muss einen Wert zurückgeben.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Ein bezeichnetes Tupelelement wird optional mit einem Fragezeichen nach dem Namen und vor dem Doppelpunkt deklariert, nicht nach dem Typ.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Ein bezeichnetes Tupelelement wird mit \"...\" vor dem Namen und nicht vor dem Typ als \"rest\" deklariert.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Ein zugeordneter Typ darf keine Eigenschaften oder Methoden deklarieren.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Ein Memberinitialisierer in einer Enumerationsdeklaration darf nicht auf Member verweisen, die anschließend deklariert werden (einschließlich Member, die in anderen Enumerationen definiert sind).", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Eine Mixin-Klasse benötigt einen Konstruktor mit einem einzelnen REST-Parameter des Typs \"any[]\".", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Eine Mixin-Klasse, die aus einer Typvariable mit einer abstrakten Konstruktsignatur erweitert wird, muss auch als \"abstract\" deklariert werden.", - "A_module_cannot_have_multiple_default_exports_2528": "Ein Modul darf nicht mehrere Standardexporte aufweisen.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Eine Namespacedeklaration darf sich nicht in einer anderen Datei als die Klasse oder Funktion befinden, mit der sie zusammengeführt wird.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Eine Namespacedeklaration darf nicht vor der Klasse oder Funktion positioniert werden, mit der sie zusammengeführt wird.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Eine Namespacedeklaration ist nur auf der obersten Ebene eines Namespaces oder Moduls zulässig.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Eine Namespace-Deklaration darf nicht mit dem Schlüsselwort \"module\" deklariert werden. Verwenden Sie stattdessen das Schlüsselwort \"namespace\".", - "A_non_dry_build_would_build_project_0_6357": "Bei einem Build ohne das Flag \"-dry\" würde das Projekt \"{0}\" erstellt.", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Bei einem Build ohne das Flag \"-dry\" würden die folgenden Dateien gelöscht: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Ein Build ohne das Flag \"-dry\" würde die Zeitstempel der Ausgabe von Projekt \"{0}\" aktualisieren.", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Ein Parameterinitialisierer ist nur in einer Funktions- oder Konstruktorimplementierung zulässig.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Eine Parametereigenschaft darf nicht mithilfe eines rest-Parameters deklariert werden.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Eine Parametereigenschaft ist nur in einer Konstruktorimplementierung zulässig.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Eine Parametereigenschaft darf nicht mithilfe eines Bindungsmusters deklariert werden.", - "A_promise_must_have_a_then_method_1059": "Ein Zusage muss eine \"then\"-Methode aufweisen.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Eine Eigenschaft einer Klasse, deren Typ ein \"unique symbol\"-Typ ist, muss sowohl \"static\" als auch \"readonly\" sein.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Eine Eigenschaft einer Schnittstelle oder eines Typliterals, deren Typ ein \"unique symbol\"-Typ ist, muss \"readonly\" sein.", - "A_required_element_cannot_follow_an_optional_element_1257": "Ein erforderliches Element kann nicht auf ein optionales Element folgen.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Ein erforderlicher Parameter darf nicht auf einen optionalen Parameter folgen.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Ein rest-Element darf kein Bindungsmuster enthalten.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Ein rest-Element darf nicht auf ein anderes rest-Element folgen.", - "A_rest_element_cannot_have_a_property_name_2566": "Ein rest-Element darf keinen Eigenschaftennamen aufweisen.", - "A_rest_element_cannot_have_an_initializer_1186": "Ein rest-Element darf keinen Initialisierer aufweisen.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Ein rest-Element muss das letzte Element in einem Destrukturierungsmuster sein.", - "A_rest_element_type_must_be_an_array_type_2574": "Ein rest-Elementtyp muss ein Arraytyp sein.", - "A_rest_parameter_cannot_be_optional_1047": "Ein rest-Parameter darf nicht optional sein.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Ein rest-Parameter darf keinen Initialisierer aufweisen.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Ein rest-Parameter muss in einer Parameterliste der letzte Eintrag sein.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Ein rest-Parameter muss ein Arraytyp sein.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Ein rest-Parameter oder ein Bindungsmuster dürfen kein nachgestelltes Komma aufweisen.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Eine return-Anweisung kann nur in einem Funktionstext verwendet werden.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Eine \"return\"-Anweisung kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Eine Reihe von Einträgen, die Importe zum Nachschlagen von Speicherorten in Bezug auf die \"baseUrl\" neu zuordnen.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Eine set-Zugriffsmethode darf keine Rückgabetypanmerkung aufweisen.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Eine set-Zugriffsmethode darf keinen optionalen Parameter aufweisen.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Eine set-Zugriffsmethode darf keinen rest-Parameter aufweisen.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Eine set-Zugriffsmethode muss genau einen Parameter aufweisen.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Ein set-Zugriffsmethodenparameter darf keinen Initialisierer aufweisen.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Ein Überfüllungsargument muss entweder einen Tupeltyp aufweisen oder an einen Restparameter übergeben werden.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Ein „super“ Aufruf muss eine Anweisung auf Stammebene innerhalb eines Konstruktors einer abgeleiteten Klasse sein, die initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Ein „super“ Aufruf muss die erste Anweisung im Konstruktor sein, um auf „super“ oder „this“ zu verweisen, wenn eine abgeleitete Klasse initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ein auf \"this\" basierender Typwächter ist nicht mit einem parameterbasierten Typwächter kompatibel.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Ein this-Typ ist nur in einem nicht statischen Member einer Klasse oder Schnittstelle verfügbar.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Ein \"export\"-Modifizierer der obersten Ebene kann nicht für Wertdeklarationen in einem CommonJS-Modul verwendet werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Eine Datei \"tsconfig.json\" ist bereits definiert unter: \"{0}\".", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Ein Tupelelement kann nicht gleichzeitig als \"optional\" und als \"rest\" festgelegt werden.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Ein Tupeltyp kann nicht mit einem negativen Wert indiziert werden.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Typassertionsausdrücke sind in der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Typliteraleigenschaften können keinen Initialisierer aufweisen.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Ein reiner Typenimport kann einen Standardimport oder benannte Bindungen angeben, aber nicht beides.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Ein Typprädikat darf nicht auf einen rest-Parameter verweisen.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Ein Typprädikat darf nicht auf ein Element \"{0}\" in einem Bindungsmuster verweisen.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Ein Typprädikat ist nur an der Rückgabetypposition für Funktionen und Methoden zulässig.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Der Typ eines Typprädikats muss dem Typ seines Parameters zugewiesen werden können.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Ein Typ, auf den in einer ergänzten Signatur verwiesen wird, muss mit „import type“ oder einem Namespaceimport importiert werden, wenn „isolatedModules“ und „emitDecoratorMetadata“ aktiviert sind.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Eine Variable, deren Typ ein \"unique symbol\"-Typ ist, muss \"const\" sein.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Ein yield-Ausdruck ist nur in einem Generatortext zulässig.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Auf die abstrakte Methode \"{0}\" in der Klasse \"{1}\" kann nicht über den super-Ausdruck zugegriffen werden.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Auf die abstrakte Eigenschaft \"{0}\" in der Klasse \"{1}\" kann im Konstruktor nicht zugegriffen werden.", - "Accessibility_modifier_already_seen_1028": "Der Zugriffsmodifizierer ist bereits vorhanden.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Zugriffsmethoden sind nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Beide Accessoren müssen abstrakt oder nicht abstrakt sein.", - "Add_0_to_unresolved_variable_90008": "Der nicht aufgelösten Variablen \"{0}.\" hinzufügen", - "Add_a_return_statement_95111": "return-Anweisung hinzufügen", - "Add_a_return_type_to_the_function_declaration_9031": "Fügen Sie der Funktionsdeklaration einen Rückgabetyp hinzu.", - "Add_a_return_type_to_the_function_expression_9030": "Fügen Sie dem Funktionsausdruck einen Rückgabetyp hinzu.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Fügen Sie der get-Accessordeklaration einen Rückgabetyp hinzu.", - "Add_a_return_type_to_the_method_9034": "Der Methode einen Rückgabetyp hinzufügen", - "Add_a_type_annotation_to_the_parameter_0_9028": "Fügen Sie dem Parameter {0} eine Typanmerkung hinzu.", - "Add_a_type_annotation_to_the_property_0_9029": "Fügen Sie der Eigenschaft {0} eine Typanmerkung hinzu.", - "Add_a_type_annotation_to_the_variable_0_9027": "Fügen Sie der Variable {0} eine Typanmerkung hinzu.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Fügen Sie dem Parameter der set-Accessordeklaration einen Typ hinzu.", - "Add_all_missing_async_modifiers_95041": "Alle fehlenden async-Modifizierer hinzufügen", - "Add_all_missing_attributes_95168": "Alle fehlenden Attribute hinzufügen", - "Add_all_missing_call_parentheses_95068": "Alle fehlenden Klammern in Aufrufen hinzufügen", - "Add_all_missing_function_declarations_95157": "Alle fehlenden Funktionsdeklarationen hinzufügen", - "Add_all_missing_imports_95064": "Alle fehlenden Importe hinzufügen", - "Add_all_missing_members_95022": "Alle fehlenden Member hinzufügen", - "Add_all_missing_override_modifiers_95162": "Alle fehlenden override-Modifizierer hinzufügen", - "Add_all_missing_parameters_95190": "Alle fehlenden Parameter hinzufügen", - "Add_all_missing_properties_95166": "Alle fehlenden Eigenschaften hinzufügen", - "Add_all_missing_return_statement_95114": "Alle fehlenden return-Anweisungen hinzufügen", - "Add_all_missing_super_calls_95039": "Alle fehlenden super-Aufrufe hinzufügen", - "Add_all_missing_type_annotations_90067": "Alle fehlenden Typanmerkungen hinzufügen", - "Add_all_optional_parameters_95193": "Alle optionalen Parameter hinzufügen", - "Add_annotation_of_type_0_90062": "Anmerkung vom Typ \"{0}\" hinzufügen", - "Add_async_modifier_to_containing_function_90029": "Async-Modifizierer zur enthaltenden Funktion hinzufügen", - "Add_await_95083": "\"await\" hinzufügen", - "Add_await_to_initializer_for_0_95084": "\"await\" zum Initialisierer für \"{0}\" hinzufügen", - "Add_await_to_initializers_95089": "\"await\" zu Initialisierern hinzufügen", - "Add_braces_to_arrow_function_95059": "Geschweifte Klammern zu Pfeilfunktion hinzufügen", - "Add_const_to_all_unresolved_variables_95082": "\"const\" zu allen nicht aufgelösten Variablen hinzufügen", - "Add_const_to_unresolved_variable_95081": "\"const\" zur nicht aufgelösten Variable hinzufügen", - "Add_definite_assignment_assertion_to_property_0_95020": "Definitive Zuweisungsassertion zu Eigenschaft \"{0}\" hinzufügen", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Allen nicht initialisierten Eigenschaften definitive Zuweisungsassertionen hinzufügen", - "Add_export_to_make_this_file_into_a_module_95097": "\"export {}\" hinzufügen, um diese Datei in ein Modul umzuwandeln", - "Add_extends_constraint_2211": "\"extends\"-Einschränkung hinzufügen", - "Add_extends_constraint_to_all_type_parameters_2212": "\"extends\"-Einschränkung zu allen Typparametern hinzufügen", - "Add_import_from_0_90057": "Import aus \"{0}\" hinzufügen", - "Add_index_signature_for_property_0_90017": "Indexsignatur für die Eigenschaft \"{0}\" hinzufügen", - "Add_initializer_to_property_0_95019": "Initialisierer zu Eigenschaft \"{0}\" hinzufügen", - "Add_initializers_to_all_uninitialized_properties_95027": "Allen nicht initialisierten Eigenschaften Initialisierer hinzufügen", - "Add_missing_attributes_95167": "Fehlende Attribute hinzufügen", - "Add_missing_call_parentheses_95067": "Fehlende Klammern in Aufrufen hinzufügen", - "Add_missing_comma_for_object_member_completion_0_95187": "Fügen Sie ein fehlendes Komma für die Vervollständigung von Objektmembern \"{0}\" hinzu.", - "Add_missing_enum_member_0_95063": "Fehlenden Enumerationsmember \"{0}\" hinzufügen", - "Add_missing_function_declaration_0_95156": "Fehlende Funktionsdeklaration \"{0}\" hinzufügen", - "Add_missing_new_operator_to_all_calls_95072": "Fehlenden new-Operator zu allen Aufrufen hinzufügen", - "Add_missing_new_operator_to_call_95071": "Fehlender new-Operator zum Aufruf hinzufügen", - "Add_missing_parameter_to_0_95188": "Fehlenden Parameter zu \"{0}\" hinzufügen", - "Add_missing_parameters_to_0_95189": "Fehlende Parameter zu \"{0}\" hinzufügen", - "Add_missing_properties_95165": "Fehlende Eigenschaften hinzufügen", - "Add_missing_super_call_90001": "Fehlenden super()-Aufruf hinzufügen", - "Add_missing_typeof_95052": "Fehlenden \"typeof\" hinzufügen", - "Add_names_to_all_parameters_without_names_95073": "Namen zu allen Parametern ohne Namen hinzufügen", - "Add_optional_parameter_to_0_95191": "Optionale Parameter zu \"{0}\" hinzufügen", - "Add_optional_parameters_to_0_95192": "Optionale Parameter zu \"{0}\" hinzufügen", - "Add_or_remove_braces_in_an_arrow_function_95058": "Geschweifte Klammern zu einer Pfeilfunktion hinzufügen oder daraus entfernen", - "Add_override_modifier_95160": "override-Modifizierer hinzufügen", - "Add_parameter_name_90034": "Parameternamen hinzufügen", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Allen nicht aufgelösten Variablen, die einem Membernamen entsprechen, Qualifizierer hinzufügen", - "Add_resolution_mode_import_attribute_95196": "Hinzufügen des Importattributs für den Auflösungsmodus (resolution-mode)", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Hinzufügen des Importattributs für den Auflösungsmodus (resolution-mode) für alle reinen Typimporte, die dieses Attribut benötigen", - "Add_return_type_0_90063": "Rückgabetyp \"{0}\" hinzufügen", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Fügen Sie diesem Ausdruck Erfüllungen und eine Typassertion hinzu (entspricht T als T), um den Typ explizit zu machen.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Erfüllungen und eine Inlinetypassertion mit \"{0}\" hinzufügen", - "Add_to_all_uncalled_decorators_95044": "Allen nicht aufgerufenen Decorators \"()\" hinzufügen", - "Add_ts_ignore_to_all_error_messages_95042": "Allen Fehlermeldungen \"@ts-ignore\" hinzufügen", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Fügen Sie einem Typ „undefined“ hinzu, wenn über einen Index darauf zugegriffen wird.", - "Add_undefined_to_optional_property_type_95169": "„Undefined“ zum optionalen Eigenschaftstyp hinzufügen", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Allen nicht initialisierten Eigenschaften einen nicht definierten Typ hinzufügen", - "Add_undefined_type_to_property_0_95018": "undefined-Typ zu Eigenschaft \"{0}\" hinzufügen", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Konvertierung \"unknown\" für Typen ohne Überschneidung hinzufügen", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "\"unknown\" zu allen Konvertierungen für Typen ohne Überschneidung hinzufügen", - "Add_void_to_Promise_resolved_without_a_value_95143": "\"Void\" zu ohne Wert aufgelöstem Promise hinzufügen", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "\"Void\" allen ohne Wert aufgelösten Promises hinzufügen", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Das Hinzufügen einer \"tsconfig.json\"-Datei erleichtert die Organisation von Projekten, die sowohl TypeScript- als auch JavaScript-Dateien enthalten. Weitere Informationen finden Sie unter https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Alle Deklarationen von \"{0}\" müssen identische Modifizierer aufweisen.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Alle Deklarationen von \"{0}\" müssen identische Modifizierer aufweisen.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Alle Deklarationen von \"{0}\" müssen identische Typparameter aufweisen.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Alle Deklarationen einer abstrakten Methode müssen aufeinanderfolgend sein.", - "All_destructured_elements_are_unused_6198": "Alle destrukturierten Elemente werden nicht verwendet.", - "All_imports_in_import_declaration_are_unused_6192": "Keiner der Importe in der Importdeklaration wird verwendet.", - "All_type_parameters_are_unused_6205": "Sämtliche Typparameter werden nicht verwendet.", - "All_variables_are_unused_6199": "Alle Variablen werden nicht verwendet.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Lassen Sie zu, dass JavaScript-Dateien Teil Ihres Programms werden. Verwenden Sie die Option „checkJS“, um Fehler aus diesen Dateien abzurufen.", - "Allow_accessing_UMD_globals_from_modules_6602": "Zugriff auf globale UMD-Bibliotheken aus Modulen zulassen", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Standardimporte von Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Codeausgabe aus, lediglich auf die Typprüfung.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "\"Import x from y\" zulassen, wenn ein Modul keinen Standardexport hat.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Das Importieren von Hilfsfunktionen aus tslib einmal pro Projekt zulassen, anstatt sie pro Datei einzubeziehen.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Importe dürfen TypeScript-Dateierweiterungen enthalten. Erfordert die Festlegung von \"--moduleResolution bundler\" und \"--noEmit\" oder \"--emitDeclarationOnly\".", - "Allow_javascript_files_to_be_compiled_6102": "Kompilierung von JavaScript-Dateien zulassen.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Lassen Sie zu, dass mehrere Ordner beim Auflösen von Modulen als ein Ordner behandelt werden.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Der bereits enthaltene Dateiname \"{0}\" unterscheidet sich vom Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Die Umgebungsmoduldeklaration darf keinen relativen Modulnamen angeben.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Umgebungsmodule dürfen nicht in andere Module oder Namespaces geschachtelt werden.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Ein AMD-Modul darf nicht mehrere Namenzuweisungen aufweisen.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Ein abstrakter Accessor kann keine Implementierung aufweisen.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Ein Zugriffsmodifizierer kann nicht mit einem privaten Bezeichner verwendet werden.", - "An_accessor_cannot_have_type_parameters_1094": "Eine Zugriffsmethode darf keine Typparameter aufweisen.", - "An_accessor_property_cannot_be_declared_optional_1276": "Eine Accessoreigenschaft kann nicht als optional deklariert werden.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Eine Umgebungsmoduldeklaration ist nur auf der obersten Ebene in einer Datei zulässig.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Für \"{0}\" wurde ein Argument nicht angegeben.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Es wurde kein Argument angegeben, das diesem Bindungsmuster entspricht.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Ein arithmetischer Operand muss vom Typ \"any\", \"number\" oder \"bigint\" oder ein Enumerationstyp sein.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Eine Pfeilfunktion darf keinen this-Parameter aufweisen.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Eine Async-Funktion oder -Methode in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Eine asynchrone Funktion oder Methode muss \"Promise\" zurückgeben. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihrer Option \"--lib\" ein.", - "An_async_iterator_must_have_a_next_method_2519": "Ein Async-Iterator muss eine \"next()\"-Async-Methode aufweisen.", - "An_element_access_expression_should_take_an_argument_1011": "Ein Ausdruck für einen Elementzugriff muss ein Argument verwenden.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Ein Enumerationsmember kann nicht mit einem privaten Bezeichner benannt werden.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Ein Enumerationsmember darf keinen numerischen Namen besitzen.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Auf einen Namen eines Enumerationsmembers muss ein \",\", \"=\" oder \"}\" folgen.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Eine erweiterte Version dieser Informationen mit allen möglichen Compileroptionen", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Eine Exportzuweisung darf nicht in einem Modul mit anderen exportierten Elementen verwendet werden.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Eine Exportzuweisung darf nicht in einem Namespace verwendet werden.", - "An_export_assignment_cannot_have_modifiers_1120": "Eine Exportzuweisung darf keine Modifizierer besitzen.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Eine Exportzuweisung muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", - "An_export_declaration_cannot_have_modifiers_1193": "Eine Exportdeklaration darf keine Modifizierer besitzen.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Eine \"export =\"-Deklaration muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Eine \"export =\"-Deklaration muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"export default\" muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Ein \"export default\" muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Für einen Ausdruck vom Typ \"void\" kann nicht getestet werden, ob er wahr oder falsch ist.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Ein erweiterter Unicode-Escapewert muss zwischen 0x0 und 0x10FFFF (einschließlich) liegen.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Ein Bezeichner oder ein Schlüsselwort kann nicht direkt auf ein numerisches Literal folgen.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Eine Implementierung darf nicht in Umgebungskontexten deklariert werden.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"export type\" exportiert wurde.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"import type\" importiert wurde.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Ein Importalias kann nicht in eine Typ- oder nur Typdeklaration aufgelöst werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", - "An_import_alias_cannot_use_import_type_1392": "Ein Importalias kann \"import type\" nicht verwenden.", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Eine Importdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Eine Importdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", - "An_import_declaration_cannot_have_modifiers_1191": "Eine Importdeklaration darf keine Modifizierer besitzen.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ein Importpfad kann nur mit einer \"{0}\"-Erweiterung enden, wenn \"allowImportingTsExtensions\" aktiviert ist.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Eine Indexsignatur darf keinen rest-Parameter besitzen.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Eine Indexsignatur darf kein nachstehendes Komma aufweisen.", - "An_index_signature_must_have_a_type_annotation_1021": "Eine Indexsignatur muss eine Typanmerkung besitzen.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Eine Indexsignatur muss genau einen Parameter besitzen.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Ein Indexsignaturparameter darf kein Fragezeichen aufweisen.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Ein Indexsignaturparameter darf keinen Zugriffsmodifizierer besitzen.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Ein Indexsignaturparameter darf keinen Initialisierer besitzen.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Ein Indexsignaturparameter muss eine Typanmerkung besitzen.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Ein Indexsignaturparametertyp darf kein Literaltyp oder generischer Typ sein. Erwägen Sie stattdessen die Verwendung eines zugeordneten Objekttyps.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Ein Parametertyp für die Indexsignatur muss \"string\", \"number\", \"symbol\" oder ein Vorlagenliteraltyp sein.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Auf einen Instanziierungsausdruck kann kein Eigenschaftenzugriff folgen.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Eine Schnittstelle kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten erweitern.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Eine Schnittstelle kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern erweitern.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Eine Schnittstelle kann einen primitiven Typ wie \"{0}\" nicht erweitern. Es können nur andere benannte Objekttypen erweitert werden.", - "An_interface_property_cannot_have_an_initializer_1246": "Schnittstelleneigenschaften können keinen Initialisierer aufweisen.", - "An_iterator_must_have_a_next_method_2489": "Ein Iterator muss eine Methode \"next()\" besitzen.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Bei Verwendung eines @jsx-Pragmas mit JSX-Fragmenten wird ein @jsxFrag-Pragma benötigt.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Ein Objektliteral darf nicht mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen besitzen.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Ein Objektliteral darf nicht über mehrere Eigenschaften mit demselben Namen verfügen.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Ein Objektliteral darf nicht eine Eigenschaft und eine Zugriffsmethode mit demselben Namen besitzen.", - "An_object_member_cannot_be_declared_optional_1162": "Ein Objektmember darf nicht als optional deklariert werden.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Die Methode \"[Symbol.hasInstance]\" eines Objekts muss einen booleschen Wert zurückgeben, damit es auf der rechten Seite eines instanceof-Ausdrucks verwendet werden kann.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Eine optionale Kette kann keine privaten Bezeichner enthalten.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Ein optionales Element darf nicht auf ein rest-Element folgen.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Ein äußerer Wert von \"this\" wird durch diesen Container verborgen.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Eine Überladungssignatur darf nicht als ein Generator deklariert werden.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unäre Ausdrücke mit dem Operator \"{0}\" sind auf der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.", - "Annotate_everything_with_types_from_JSDoc_95043": "Alle Funktionen mit Typen aus JSDoc kommentieren", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Erweiterungsfunktionstypen von Eigenschaften in einem Namespace mit Anmerkungen versehen", - "Annotate_with_type_from_JSDoc_95009": "Mit Typ aus JSDoc kommentieren", - "Another_export_default_is_here_2753": "Ein weiterer Exportstandardwert befindet sich hier.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jede Unicode-Eigenschaft, die möglicherweise mehr als ein einzelnes Zeichen enthalten würde, ist nur verfügbar, wenn das Flag \"Unicode Sets (v)\" festgelegt ist.", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Alle Elemente, die möglicherweise mehr als einem einzelnen Zeichen entsprechen, sind innerhalb einer negierten Zeichenklasse ungültig.", - "Are_you_missing_a_semicolon_2734": "Fehlt ein Semikolon?", - "Argument_expression_expected_1135": "Es wurde ein Argumentausdruck erwartet.", - "Argument_for_0_option_must_be_Colon_1_6046": "Das Argument für die Option \"{0}\" muss \"{1}\" sein.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Das Argument des dynamischen Imports kann kein Überfüllungselement sein.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Das Argument vom Typ \"{0}\" kann dem Parameter vom Typ \"{1}\" nicht zugewiesen werden.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Das Argument vom Typ „{0}“ kann dem Parameter vom Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Es wurden keine Argumente für den rest-Parameter \"{0}\" angegeben.", - "Array_element_destructuring_pattern_expected_1181": "Ein Arrayelement-Destrukturierungsmuster wurde erwartet.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Arrays mit Verteilungselementen können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Assertionen erfordern, dass jeder Name im Aufrufziel mit einer expliziten Typanmerkung deklariert wird.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Assertionen erfordern, dass das Aufrufziel ein Bezeichner oder ein qualifizierter Name ist.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Das Zuweisen von Eigenschaften zu Funktionen ohne Deklaration wird mit \"--isolatedDeclarations\" nicht unterstützt. Fügen Sie eine explizite Deklaration für die Eigenschaften hinzu, die dieser Funktion zugewiesen sind.", - "Asterisk_Slash_expected_1010": "\"*/\" wurde erwartet.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Mindestens ein Accessor muss über eine explizite Typanmerkung mit „--isolatedDeclarations“ verfügen.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Erweiterungen für den globalen Bereich können nur in externen Modulen oder Umgebungsmoduldeklarationen direkt geschachtelt werden.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Erweiterungen für den globalen Bereich sollten den Modifizierer \"declare\" aufweisen, wenn sie nicht bereits in einem Umgebungskontext auftreten.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "In Projekt \"{0}\" ist die automatische Erkennung von Eingaben aktiviert. Es wird ein zusätzlicher Auflösungsdurchlauf für das Modul \"{1}\" unter Verwendung von Cachespeicherort \"{2}\" ausgeführt.", - "BUILD_OPTIONS_6919": "BUILDOPTIONEN", - "Backwards_Compatibility_6253": "Abwärtskompatibilität", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Basisklassenausdrücke können nicht auf Klassentypparameter verweisen.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Der Rückgabetyp \"{0}\" des Basiskonstruktors ist kein Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Basiskonstruktoren müssen alle den gleichen Rückgabetyp aufweisen.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Das Basisverzeichnis zum Auflösen nicht absoluter Modulnamen.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "bigint-Literale sind nicht verfügbar, wenn die Zielversion niedriger ist als ES2020.", - "Binary_digit_expected_1177": "Es wurde eine Binärzahl erwartet.", - "Binding_element_0_implicitly_has_an_1_type_7031": "Das Bindungselement \"{0}\" weist implizit einen Typ \"{1}\" auf.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Die blockbezogene Variable \"{0}\" wurde vor ihrer Deklaration verwendet.", - "Build_a_composite_project_in_the_working_directory_6925": "Erstellen Sie ein zusammengesetztes Projekt im Arbeitsverzeichnis.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Erstellen Sie alle Projekte, einschließlich der Projekte, die aktuell zu sein scheinen.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Mindestens ein Projekt und die zugehörigen Abhängigkeiten erstellen, wenn veraltet", - "Build_option_0_requires_a_value_of_type_1_5073": "Die Buildoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", - "Building_project_0_6358": "Projekt \"{0}\" wird erstellt...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Integrierte Iteratoren werden mit dem Typ \"TReturn\" vom Typ \"undefined\" anstelle von \"any\" instanziiert.", - "COMMAND_LINE_FLAGS_6921": "BEFEHLSZEILENFLAGS", - "COMMON_COMMANDS_6916": "ALLGEMEINE BEFEHLE", - "COMMON_COMPILER_OPTIONS_6920": "ALLGEMEINE COMPILEROPTIONEN", - "Call_decorator_expression_90028": "Decorator-Ausdruck aufrufen", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Die Rückgabetypen \"{0}\" und \"{1}\" der Aufrufsignatur sind nicht kompatibel.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Eine Aufrufsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Aufrufsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.", - "Call_target_does_not_contain_any_signatures_2346": "Das Aufrufziel enthält keine Signaturen.", - "Can_only_convert_logical_AND_access_chains_95142": "Es können nur Zugriffsketten mit logischem \"Und\" konvertiert werden.", - "Can_only_convert_named_export_95164": "Nur ein benannter Export kann konvertiert werden.", - "Can_only_convert_property_with_modifier_95137": "Die Eigenschaft kann nur mit einem Modifizierer konvertiert werden.", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Nur Zeichenfolgenverkettungen und Zeichenfolgenliterale können konvertiert werden.", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Der Zugriff auf \"{0}.{1}\" ist nicht möglich, da \"{0}\" ein Typ ist, aber kein Namespace. Wollten Sie den Typ der Eigenschaft \"{1}\" in \"{0}\" mit \"{0}[\"{1}\"]\" abrufen?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Auf \"{0}\" aus einer anderen Datei kann nicht ohne Qualifizierung zugegriffen werden, wenn \"{1}\" aktiviert ist. Verwenden Sie stattdessen \"{2}\".", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Auf Umgebungskonstantenenumerationen kann nicht zugegriffen werden, wenn \"{0}\" aktiviert ist.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Ein Konstruktortyp \"{0}\" kann nicht einem Konstruktortyp \"{1}\" zugewiesen werden.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Ein abstrakter Konstruktortyp kann nicht einem nicht abstrakten Konstruktortyp zugewiesen werden.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Klasse handelt.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Konstante handelt.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Funktion handelt.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Namespace handelt.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine schreibgeschützte Eigenschaft handelt.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Enumeration handelt.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Import handelt.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich nicht um eine Variable handelt.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Eine Zuweisung zur private Methode \"{0}\" ist nicht möglich. In private Methoden kann nicht geschrieben werden.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Das Modul \"{0}\" kann nicht erweitert werden, weil es in eine Nicht-Modulentität aufgelöst wird.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Das Modul \"{0}\" kann nicht mit Wertexporten vergrößert werden, da es zu einer Entität aufgelöst wird, die kein Modul darstellt.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Module können nur mithilfe der Option \"{0}\" kompiliert werden, wenn die Kennzeichnung \"-module\" den Wert \"amd\" oder \"system\" aufweist.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Eine Instanz der abstrakten Klasse kann nicht erstellt werden.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Die Iteration kann nicht an einen Wert delegiert werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, aber der enthaltende Generator immer \"{0}\" sendet.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "\"{0}\" kann nicht exportiert werden. Nur lokale Deklarationen können aus einem Modul exportiert werden.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Eine Klasse \"{0}\" kann nicht erweitert werden. Der Klassenkonstruktor ist als privat markiert.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Eine Schnittstelle \"{0}\" kann nicht erweitert werden. Meinten Sie \"implements\"?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Im angegebenen Verzeichnis \"{0}\" wurde keine Datei \"tsconfig.json\" gefunden.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Im angegebenen Verzeichnis \"{0}\" wurde keine \"tsconfig.json\"-Datei gefunden.", - "Cannot_find_global_type_0_2318": "Der globale Typ \"{0}\" wurde nicht gefunden.", - "Cannot_find_global_value_0_2468": "Der globale Wert \"{0}\" wurde nicht gefunden.", - "Cannot_find_lib_definition_for_0_2726": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Das Modul \"{0}\" wurde nicht gefunden. Erwägen Sie die Verwendung von \"--resolveJsonModule\" zum Importieren eines Moduls mit der Erweiterung \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Das Modul \"{0}\" wurde nicht gefunden. Möchten Sie die Option \"moduleResolution\" auf \"nodenext\" festlegen oder Aliase zur Option \"paths\" hinzufügen?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Das Modul \"{0}\" oder die zugehörigen Typdeklarationen wurden nicht gefunden.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Es können keine Modul- oder Typdeklarationen für den Import von Nebeneffekten von „{0}“ gefunden werden.", - "Cannot_find_name_0_2304": "Der Name \"{0}\" wurde nicht gefunden.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie den Instanzmember \"this.{0}\"?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie den statischen Member \"{1}.{0}\"?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Der Name „{0}“ wurde nicht gefunden. Wollten Sie dies in eine asynchrone Funktion schreiben?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{1}\" oder höher.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" so ab, dass sie \"dom\" enthält.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"bun\" hinzu.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"jest\" oder \"mocha\" hinzu.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für jQuery installieren? Versuchen Sie es mit \"npm i --save-dev @types/jquery\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für jQuery installieren? Versuchen Sie es mit \"npm i --save-dev @types/jquery\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"jquery\" hinzu.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Node installieren? Versuchen Sie es mit \"npm i --save-dev @types/node\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Node installieren? Versuchen Sie es mit \"npm i --save-dev @types/node\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"node\" hinzu.", - "Cannot_find_namespace_0_2503": "Der Namespace \"{0}\" wurde nicht gefunden.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Namespace \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", - "Cannot_find_parameter_0_1225": "Der Parameter \"{0}\" wurde nicht gefunden.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Das gemeinsame Unterverzeichnis für die Eingabedateien wurde nicht gefunden.", - "Cannot_find_type_definition_file_for_0_2688": "Die Typdefinitionsdatei für \"{0}\" wurde nicht gefunden.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Typdeklarationsdateien können nicht importiert werden. Importieren Sie ggf. \"{0}\" anstelle von \"{1}\".", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Die Variable \"{0}\" mit dem äußeren Bereich im gleichen Bereich wie die Deklaration \"{1}\" mit dem Blockbereich kann nicht initialisiert werden.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Ein Objekt, das möglicherweise NULL ist, kann nicht aufgerufen werden.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Ein Objekt, das möglicherweise NULL oder nicht definiert ist, kann nicht aufgerufen werden.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Ein Objekt, das möglicherweise nicht definiert ist, kann nicht aufgerufen werden.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arraydestrukturierung aber immer \"{0}\" sendet.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arrayverteilung aber immer \"{0}\" sendet.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, \"for-of\" aber immer \"{0}\" sendet.", - "Cannot_move_statements_to_the_selected_file_95183": "Anweisungen können nicht in die ausgewählte Datei verschoben werden.", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Verschieben in Datei nicht möglich, die ausgewählte Datei ist ungültig", - "Cannot_read_file_0_5083": "Die Datei \"{0}\" kann nicht gelesen werden.", - "Cannot_read_file_0_Colon_1_5012": "Die Datei \"{0}\" kann nicht gelesen werden: {1}", - "Cannot_redeclare_block_scoped_variable_0_2451": "Die blockbezogene Variable \"{0}\" Blockbereich kann nicht erneut deklariert werden.", - "Cannot_redeclare_exported_variable_0_2323": "Die exportierte Variable \"{0}\" kann nicht erneut deklariert werden.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Der Bezeichner \"{0}\" in der Catch-Klausel kann nicht erneut deklariert werden.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Kann in einer Typanmerkung keinen Funktionsaufruf starten.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX kann nur verwendet werden, wenn das Flag \"-jsx\" angegeben wird.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "\"export import\" kann nicht für einen Typ oder einen reinen Typnamespace verwendet werden, wenn {0} aktiviert ist.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Es können keine imports-, exports- oder module-Erweiterungen verwendet werden, wenn \"-module\" den Wert \"none\" aufweist.", - "Cannot_use_namespace_0_as_a_type_2709": "Der Namespace \"{0}\" kann nicht als Typ verwendet werden.", - "Cannot_use_namespace_0_as_a_value_2708": "Der Namespace \"{0}\" kann nicht als Wert verwendet werden.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "\"This\" kann nicht in einem statischen Eigenschafteninitialisierer einer ergänzten Klasse verwendet werden.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Die Datei \"{0}\" kann nicht geschrieben werden, weil hierdurch die TSBUILDINFO-Datei überschrieben wird, die durch das referenzierte Projekt \"{1}\" generiert wird.", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie durch mehrere Eingabedateien überschrieben würde.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie eine Eingabedatei überschreiben würde.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Die Variable der Catch-Klausel darf keinen Initialisierer aufweisen.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Die Anmerkung des Variablentyps der catch-Klausel muss \"any\" oder \"unknown\" lauten, sofern angegeben.", - "Change_0_to_1_90014": "\"{0}\" in \"{1}\" ändern", - "Change_all_extended_interfaces_to_implements_95038": "Alle erweiterten Schnittstellen in \"implements\" ändern", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Alle jsdoc-style-Typen in TypeScript ändern", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alle jsdoc-style-Typen in TypeScript ändern (und Nullable-Typen \"| undefined\" hinzufügen)", - "Change_extends_to_implements_90003": "\"extends\" in \"implements\" ändern", - "Change_spelling_to_0_90022": "Schreibweise in \"{0}\" ändern", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Suchen Sie nach Klasseneigenschaften, die im Konstruktor deklariert, aber nicht festgelegt sind.", - "Check_side_effect_imports_6806": "Überprüfen Sie die Nebeneffektimporte.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Überprüfen Sie, ob die Argumente für die Methoden „bind“, „call“ und „apply“ mit der ursprünglichen Funktion übereinstimmen.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Es wird überprüft, ob \"{0}\" das längste übereinstimmende Präfix für \"{1}\"–\"{2}\" ist.", - "Circular_definition_of_import_alias_0_2303": "Zirkuläre Definition des Importalias \"{0}\".", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Eine Zirkularität wurde beim Auflösen der Konfiguration erkannt: {0}", - "Circularity_originates_in_type_at_this_location_2751": "Die Zirkularität stammt vom Typ an diesem Standort.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Die Klasse \"{0}\" definiert die Instanzmember-Zugriffsmethode \"{1}\", die erweiterte Klasse \"{2}\" definiert diesen jedoch als Instanzmemberfunktion.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Die Klasse \"{0}\" definiert die Instanzmember-Zugriffsmethode \"{1}\", die erweiterte Klasse \"{2}\" definiert diese jedoch als Instanzmember-Zugriffsmethode.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Die Klasse \"{0}\" definiert die Instanzmembereigenschaft \"{1}\", die erweiterte Klasse \"{2}\" definiert diese jedoch als Instanzmemberfunktion.", - "Class_0_incorrectly_extends_base_class_1_2415": "Die Klasse \"{0}\" erweitert fälschlicherweise die Basisklasse \"{1}\".", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Die Klasse \"{0}\" implementiert fälschlicherweise die Klasse \"{1}\". Wollten Sie \"{1}\" erweitern und ihre Member als Unterklasse vererben?", - "Class_0_incorrectly_implements_interface_1_2420": "Die Klasse \"{0}\" implementiert fälschlicherweise die Schnittstelle \"{1}\".", - "Class_0_used_before_its_declaration_2449": "Klasse \"{0}\", die vor der Deklaration verwendet wurde.", - "Class_constructor_may_not_be_a_generator_1368": "Der Klassenkonstruktor darf kein Generator sein.", - "Class_constructor_may_not_be_an_accessor_1341": "Der Klassenkonstruktor darf kein Accessor sein.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "Die Klassendeklaration kann die Überladungsliste für \"{0}\" nicht implementieren.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Klassendeklarationen dürfen maximal ein \"@augments\"- oder \"@extends\"-Tag aufweisen.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Decorator-Elemente von Klassen können nicht mit einem statischen privaten Bezeichner verwendet werden. Erwägen Sie, das experimentelle Decorator-Element zu entfernen.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Auf das von der übergeordneten Klasse definierte Klassenfeld \"{0}\" kann in der untergeordneten Klasse nicht über \"super\" zugegriffen werden.", - "Class_name_cannot_be_0_2414": "Der Klassenname darf nicht \"{0}\" sein.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Der Klassenname darf nicht „Object“ lauten, wenn ES5 und höher mit Modul „{0}“ als Ziel verwendet wird.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Die statische Seite der Klasse \"{0}\" erweitert fälschlicherweise die statische Seite der Basisklasse \"{1}\".", - "Classes_can_only_extend_a_single_class_1174": "Klassen dürfen nur eine einzelne Klasse erweitern.", - "Classes_may_not_have_a_field_named_constructor_18006": "Klassen dürfen kein Feld mit dem Namen \"constructor\" aufweisen.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Code, der in einer Klasse enthalten ist, wird im Strict-Modus von JavaScript ausgewertet, der diese Verwendung von \"{0}\" nicht zulässt. Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Befehlszeilenoptionen", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Kompilieren Sie das dem Pfad zugewiesene Projekt zu dessen Konfigurationsdatei oder zu einem Ordner mit der Datei \"tsconfig.json\".", - "Compiler_Diagnostics_6251": "Compilerdiagnose", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Die Compileroption \"{0}\" darf keine leere Zeichenfolge erhalten.", - "Compiler_option_0_expects_an_argument_6044": "Die Compileroption \"{0}\" erwartet ein Argument.", - "Compiler_option_0_may_not_be_used_with_build_5094": "Die Compileroption \"--{0}\" darf nicht mit \"--build\" verwendet werden.", - "Compiler_option_0_may_only_be_used_with_build_5093": "Die Compileroption \"--{0}\" darf nur mit \"--build\" verwendet werden.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Die Compileroption „{0}“ des Werts „{1}“ ist instabil. Verwenden Sie „Nightly TypeScript“, um diesen Fehler zu beheben. Versuchen Sie die Aktualisierung mit „npm install -D typescript@next“ durchzuführen.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "Die Compileroption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Der Compiler reserviert den Namen \"{0}\", wenn er einen privaten Bezeichner für Vorgängerversionen ausgibt.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiliert das sich am angegebenen Pfad befindliche TypeScript-Projekt.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiliert das aktuelle Projekt (tsconfig.json im Arbeitsverzeichnis.)", - "Compiles_the_current_project_with_additional_settings_6929": "Kompiliert das aktuelle Projekt mit zusätzlichen Einstellungen.", - "Completeness_6257": "Vollständigkeit", - "Composite_projects_may_not_disable_declaration_emit_6304": "In zusammengesetzten Projekten kann die Deklarationsausgabe nicht deaktiviert werden.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Zusammengesetzte Projekte dürfen die inkrementelle Kompilierung nicht deaktivieren.", - "Computed_from_the_list_of_input_files_6911": "Aus der Liste der Eingabedateien berechnet", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Berechnete Eigenschaften müssen Zahlen- oder Zeichenfolgenliterale, Variablen oder gepunktete Ausdrücke mit \"--isolatedDeclarations\" sein.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Berechnete Eigenschaftennamen sind in Enumerationen unzulässig.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Berechnete Eigenschaftsnamen für Klassen- oder Objektliterale können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Berechnete Werte sind in einer Enumeration mit Membern mit Zeichenfolgenwerten nicht zulässig.", - "Concatenate_and_emit_output_to_single_file_6001": "Verketten und Ausgabe in einer Datei speichern.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Bedingungen, die zusätzlich zu den konfliktlöserspezifischen Standardwerten beim Auflösen von Importen festgelegt werden sollen.", - "Conflicts_are_in_this_file_6201": "In dieser Datei liegen Konflikte vor.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Erwägen Sie, dieser Klasse einen declare-Modifizierer hinzuzufügen.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Die Rückgabetypen \"{0}\" und \"{1}\" der Konstruktsignatur sind nicht kompatibel.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Eine Konstruktsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Konstruktsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.", - "Constructor_implementation_is_missing_2390": "Die Konstruktorimplementierung fehlt.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Der Konstruktor der Klasse \"{0}\" ist privat. Auf ihn kann nur innerhalb der Klassendeklaration zugegriffen werden.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Der Konstruktor der Klasse \"{0}\" ist geschützt. Auf ihn kann nur innerhalb der Klassendeklaration zugegriffen werden.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Die Typnotation des Konstruktors muss in Klammern gesetzt werden, wenn sie in einem Union-Typ verwendet wird.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Die Typnotation des Konstruktors muss in Klammern gesetzt werden, wenn sie in einem Intersection-Typ verwendet wird.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktoren für abgeleitete Klassen müssen einen Aufruf \"super\" enthalten.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Die enthaltene Datei wird nicht angegeben, und das Stammverzeichnis kann nicht ermittelt werden. Die Suche im Ordner \"node_modules\" wird übersprungen.", - "Containing_function_is_not_an_arrow_function_95128": "Die enthaltende Funktion ist keine Pfeilfunktion.", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Steuern Sie, welche Methode zum Erkennen von JS-Dateien im Modulformat verwendet wird.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Die Konvertierung des Typs \"{0}\" in den Typ \"{1}\" kann ein Fehler sein, weil die Typen keine ausreichende Überschneidung aufweisen. Wenn dies beabsichtigt war, konvertieren Sie den Ausdruck zuerst in \"unknown\".", - "Convert_0_to_1_in_0_95003": "\"{0}\" in \"{1} in {0}\" konvertieren", - "Convert_0_to_mapped_object_type_95055": "\"{0}\" in zugeordneten Objekttyp konvertieren", - "Convert_all_const_to_let_95102": "Alle \"const\" in \"let\" konvertieren", - "Convert_all_constructor_functions_to_classes_95045": "Alle Konstruktorfunktionen in Klassen konvertieren", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Alle ungültigen Zeichen in HTML-Entitätscode konvertieren", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Alle erneut exportierten Typen in reine Typenexporte konvertieren", - "Convert_all_require_to_import_95048": "Alle Aufrufe von \"require\" in \"import\" konvertieren", - "Convert_all_to_async_functions_95066": "Alle in asynchrone Funktionen konvertieren", - "Convert_all_to_bigint_numeric_literals_95092": "Alle in numerische bigint-Literale konvertieren", - "Convert_all_to_default_imports_95035": "Alle in Standardimporte konvertieren", - "Convert_all_type_literals_to_mapped_type_95021": "Alle Typliterale in einen zugeordneten Typ konvertieren", - "Convert_all_typedef_to_TypeScript_types_95177": "Konvertieren Sie alle typedef in TypeScript-Typen.", - "Convert_arrow_function_or_function_expression_95122": "Pfeilfunktion oder Funktionsausdruck konvertieren", - "Convert_const_to_let_95093": "\"const\" in \"let\" konvertieren", - "Convert_default_export_to_named_export_95061": "Standardexport in benannten Export konvertieren", - "Convert_function_declaration_0_to_arrow_function_95106": "Funktionsdeklaration \"{0}\" in Pfeilfunktion konvertieren", - "Convert_function_expression_0_to_arrow_function_95105": "Funktionsausdruck \"{0}\" in Pfeilfunktion konvertieren", - "Convert_function_to_an_ES2015_class_95001": "Funktion in eine ES2015-Klasse konvertieren", - "Convert_invalid_character_to_its_html_entity_code_95100": "Ungültiges Zeichen in entsprechenden HTML-Entitätscode konvertieren", - "Convert_named_export_to_default_export_95062": "Benannten Export in Standardexport konvertieren", - "Convert_named_imports_to_default_import_95170": "Konvertieren benannter Importe in Standardimporte", - "Convert_named_imports_to_namespace_import_95057": "Benannte Importe in Namespaceimport konvertieren", - "Convert_namespace_import_to_named_imports_95056": "Namespaceimport in benannte Importe konvertieren", - "Convert_overload_list_to_single_signature_95118": "Überladungsliste in einzelne Signatur konvertieren", - "Convert_parameters_to_destructured_object_95075": "Parameter in destrukturiertes Objekt konvertieren", - "Convert_require_to_import_95047": "\"require\" in \"import\" konvertieren", - "Convert_to_ES_module_95017": "In ES-Modul konvertieren", - "Convert_to_a_bigint_numeric_literal_95091": "In numerisches bigint-Literal konvertieren", - "Convert_to_anonymous_function_95123": "In anonyme Funktion konvertieren", - "Convert_to_arrow_function_95125": "In Pfeilfunktion konvertieren", - "Convert_to_async_function_95065": "In asynchrone Funktion konvertieren", - "Convert_to_default_import_95013": "In Standardimport konvertieren", - "Convert_to_named_function_95124": "In benannte Funktion konvertieren", - "Convert_to_optional_chain_expression_95139": "In optionalen Kettenausdruck konvertieren", - "Convert_to_template_string_95096": "In Vorlagenzeichenfolge konvertieren", - "Convert_to_type_only_export_1364": "In reinen Typenexport konvertieren", - "Convert_typedef_to_TypeScript_type_95176": "Konvertieren Sie typedef in den TypeScript-Typ.", - "Corrupted_locale_file_0_6051": "Die Gebietsschemadatei \"{0}\" ist beschädigt.", - "Could_not_convert_to_anonymous_function_95153": "Die Konvertierung in eine anonyme Funktion ist nicht möglich.", - "Could_not_convert_to_arrow_function_95151": "Die Konvertierung in eine Pfeilfunktion ist nicht möglich.", - "Could_not_convert_to_named_function_95152": "Die Konvertierung in eine benannte Funktion ist nicht möglich.", - "Could_not_determine_function_return_type_95150": "Der Rückgabetyp der Funktion konnte nicht bestimmt werden.", - "Could_not_find_a_containing_arrow_function_95127": "Es wurde keine enthaltende Pfeilfunktion gefunden.", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Es wurde keine Deklarationsdatei für das Modul \"{0}\" gefunden. \"{1}\" weist implizit den Typ \"any\" auf.", - "Could_not_find_convertible_access_expression_95140": "Kein konvertierbarer Zugriffsausdruck gefunden", - "Could_not_find_export_statement_95129": "Die Exportanweisung wurde nicht gefunden.", - "Could_not_find_import_clause_95131": "Die Importklausel wurde nicht gefunden.", - "Could_not_find_matching_access_expressions_95141": "Keine übereinstimmenden Zugriffsausdrücke gefunden", - "Could_not_find_name_0_Did_you_mean_1_2570": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", - "Could_not_find_namespace_import_or_named_imports_95132": "Der Namespaceimport oder benannte Importe wurden nicht gefunden.", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Die Eigenschaft, für die die Zugriffsmethode generiert werden soll, wurde nicht gefunden.", - "Could_not_find_variable_to_inline_95185": "Die Variable zum Inlinevorgang wurde nicht gefunden.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Der Pfad \"{0}\" mit den Erweiterungen konnte nicht aufgelöst werden: {1}.", - "Could_not_write_file_0_Colon_1_5033": "Die Datei \"{0}\" konnte nicht geschrieben werden. {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Erstellen Sie Quellzuordnungsdateien für ausgegebene JavaScript-Dateien.", - "Create_sourcemaps_for_d_ts_files_6614": "Erstellen Sie Quellzuordnungen für d.ts-Dateien.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Erstellt eine tsconfig.json mit den empfohlenen Einstellungen im Arbeitsverzeichnis.", - "DIRECTORY_6038": "VERZEICHNIS", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Dezimale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Dezimalstellen mit führenden Nullen sind nicht zulässig.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Die Deklaration erweitert die Deklaration in einer anderen Datei. Dieser Vorgang kann nicht serialisiert werden.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Die Deklarationsausgabe für diese Datei erfordert, dass dieser Import für Augmentationen beibehalten wird. Dies wird mit \"--isolatedDeclarations\" nicht unterstützt.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" aus dem Modul \"{1}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Die Deklarationsausgabe für diesen Parameter erfordert das implizit undefinierte Hinzufügen zum Typ. Dies wird mit „--isolatedDeclarations“ nicht unterstützt.", - "Declaration_expected_1146": "Es wurde eine Deklaration erwartet.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Der Deklarationsname steht in Konflikt mit dem integrierten globalen Bezeichner \"{0}\".", - "Declaration_or_statement_expected_1128": "Es wurde eine Deklaration oder Anweisung erwartet.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Es wurde eine Deklaration oder Anweisung erwartet. Dieses Gleichheitszeichen (=) folgt auf einen Anweisungsblock. Wenn Sie daher eine Destrukturierungszuweisung schreiben möchten, müssen Sie möglicherweise die gesamte Zuweisung in runde Klammern einschließen.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarationen mit definitiven Zuweisungsassertionen müssen auch Typanmerkungen aufweisen.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarationen mit Initialisierern dürfen keine definitiven Zuweisungsassertionen aufweisen.", - "Declare_a_private_field_named_0_90053": "Deklarieren Sie ein privates Feld mit dem Namen \"{0}\".", - "Declare_method_0_90023": "Methode \"{0}\" deklarieren", - "Declare_private_method_0_90038": "Private Methode \"{0}\" deklarieren", - "Declare_private_property_0_90035": "Private Eigenschaft \"{0}\" deklarieren", - "Declare_property_0_90016": "Eigenschaft \"{0}\" deklarieren", - "Declare_static_method_0_90024": "Statische Methode \"{0}\" deklarieren", - "Declare_static_property_0_90027": "Statische Eigenschaft \"{0}\" deklarieren", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Der Rückgabetyp der Decorator-Funktion „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Der Rückgabetyp der Decorator-Funktion ist „{0}“, es wird jedoch erwartet, dass er „void“ oder „any“ ist.", - "Decorator_used_before_export_here_1486": "Decorator, der hier vor \"export\" verwendet wird.", - "Decorators_are_not_valid_here_1206": "Decorators sind hier ungültig.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Decorators dürfen nicht auf mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen angewendet werden.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Decorators dürfen nicht nach \"export\" oder \"export default\" angezeigt werden, wenn sie auch vor \"export\" angezeigt werden.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Vor dem Namen und allen Schlüsselwörtern von Eigenschaftendeklarationen müssen Decorator-Elemente stehen.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Stellen Sie die Variablen der Catch-Klauseln standardmäßig als „unknown“ anstelle von „any“ ein.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Der Standardexport des Moduls besitzt oder verwendet den privaten Namen \"{0}\".", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Standardexporte können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Standardimporte sind in einem verzögerten Import nicht zulässig.", - "Default_library_1424": "Standardbibliothek", - "Default_library_for_target_0_1425": "Standardbibliothek für Ziel \"{0}\"", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Verzögerte Importe werden nur unterstützt, wenn das Flag „--module“ auf „esnext“ oder „preserve“ festgelegt ist.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definitionen der folgenden Bezeichner stehen in Konflikt mit denen in einer anderen Datei: {0}", - "Delete_all_unused_declarations_95024": "Alle nicht verwendeten Deklarationen löschen", - "Delete_all_unused_imports_95147": "Alle nicht verwendeten Importe löschen", - "Delete_all_unused_param_tags_95172": "Alle nicht verwendeten \"@param\"-Tags löschen", - "Delete_the_outputs_of_all_projects_6365": "Löschen Sie die Ausgaben aller Projekte.", - "Delete_unused_param_tag_0_95171": "Nicht verwendete \"@param\"-Tag-\"{0}\" löschen", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Veraltet] Verwenden Sie stattdessen \"--jsxFactory\". Geben Sie das Objekt an, das für \"createElement\" aufgerufen wurde, wenn das Ziel die JSX-Ausgabe \"react\" ist.", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Veraltet] Verwenden Sie stattdessen \"--outFile\". Verketten und Ausgeben in eine einzige Datei", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Veraltet] Verwenden Sie stattdessen \"--skipLibCheck\". Überspringen Sie die Typüberprüfung der Standardbibliothek-Deklarationsdateien.", - "Deprecated_setting_Use_outFile_instead_6677": "Veraltete Einstellung. Verwenden Sie stattdessen „outFile“.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Haben Sie vergessen, \"await\" zu verwenden?", - "Did_you_mean_0_1369": "Meinten Sie \"{0}\"?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Wollten Sie \"{0}\" auf den Typ \"new (...args: any[]) => {1}\" einschränken?", - "Did_you_mean_to_call_this_expression_6212": "Wollten Sie diesen Ausdruck aufrufen?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Wollten Sie diese Funktion als \"async\" markieren?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Wollten Sie \":\" verwenden? Ein \"=\" kann nur dann auf einen Eigenschaftennamen folgen, wenn das enthaltende Objektliteral Teil eines Destrukturierungsmusters ist.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Wollten Sie \"new\" mit diesem Ausdruck verwenden?", - "Digit_expected_1124": "Eine Ziffer wurde erwartet.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Das Verzeichnis \"{0}\" ist nicht vorhanden, Suchvorgänge darin werden übersprungen.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Das Verzeichnis \"{0}\" enthält keinen package.json-Bereich. Importe werden nicht aufgelöst.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deaktivieren Sie das Hinzufügen von \"Use Strict\"-Direktiven in ausgesendeten JavaScript-Dateien.", - "Disable_checking_for_this_file_90018": "Überprüfung für diese Datei deaktivieren", - "Disable_emitting_comments_6688": "Deaktivieren Sie das Ausgeben von Kommentaren.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deaktivieren Sie das Ausgeben von Deklarationen mit „@internal“ in ihren JSDoc-Kommentaren.", - "Disable_emitting_files_from_a_compilation_6660": "Deaktivieren Sie das Ausgeben von Dateien aus einer Kompilierung.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deaktivieren Sie das Ausgeben von Dateien, wenn Typüberprüfungsfehler gemeldet werden.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deaktivieren Sie das Löschen von „const enum“-Deklarationen in generiertem Code.", - "Disable_error_reporting_for_unreachable_code_6603": "Deaktivieren Sie die Fehlerberichterstattung für nicht erreichbaren Code.", - "Disable_error_reporting_for_unused_labels_6604": "Deaktivieren Sie die Fehlerberichterstattung für nicht verwendete Bezeichnungen.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deaktivieren Sie die vollständige Typüberprüfung (nur kritische Analyse- und Ausgabefehler werden gemeldet).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deaktivieren Sie das Generieren von benutzerdefinierten Hilfsfunktionen wie „__extends“ in der kompilierten Ausgabe.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deaktivieren Sie das Einschließen von Bibliotheksdateien, einschließlich der Standarddatei \"lib.d.ts\".", - "Disable_loading_referenced_projects_6235": "Deaktivieren Sie das Laden referenzierter Projekte.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deaktivieren Sie bevorzugte Quelldateien anstelle von Deklarationsdateien, wenn Sie auf zusammengesetzte Projekte verweisen.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deaktivieren Sie die Meldung übermäßiger Eigenschaftsfehler während der Erstellung von Objektliteralen.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deaktivieren Sie das Auflösen von symlinks in ihren Realpfad. Dies korreliert mit derselben Kennzeichnung im Knoten.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Größenbeschränkungen für JavaScript-Projekte deaktivieren.", - "Disable_solution_searching_for_this_project_6224": "Deaktivieren Sie die Projektmappensuche für dieses Projekt.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deaktivieren Sie die strenge Überprüfung generischer Signaturen in Funktionstypen.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Typ-Akquisition für JavaScript-Projekte deaktivieren", - "Disable_truncating_types_in_error_messages_6663": "Deaktivieren Sie das Abschneiden von Typen in Fehlermeldungen.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deaktivieren Sie die Verwendung von Quelldateien anstelle von Deklarationsdateien aus referenzierten Projekten.", - "Disable_wiping_the_console_in_watch_mode_6684": "Deaktivieren Sie das Zurücksetzen der Konsole im Überwachungsmodus.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deaktiviert den Rückschluss für den Typabruf, indem Dateinamen in einem Projekt betrachtet werden.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Hiermit wird verhindert, dass „import“, „require“ oder „“ die Anzahl der Dateien erweitern, die TypeScript einem Projekt hinzufügen soll.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Verweise mit uneinheitlicher Groß-/Kleinschreibung auf die gleiche Datei nicht zulassen.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Fügen Sie keine Verweise mit dreifachen Schrägstrichen oder importierte Module zur Liste kompilierter Dateien hinzu.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Laufzeitkonstrukte, die nicht Teil von ECMAScript sind, nicht zulassen", - "Do_not_emit_comments_to_output_6009": "Kommentare nicht an die Ausgabe ausgeben.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Deklarationen für Code mit einer Anmerkung \"@internal\" nicht ausgeben.", - "Do_not_emit_outputs_6010": "Keine Ausgaben ausgeben.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Keine Ausgaben ausgeben, wenn Fehler gemeldet wurden.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Keine \"use strict\"-Direktiven in Modulausgabe ausgeben.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "const-Enumerationsdeklarationen im generierten Code nicht löschen.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Erstellen Sie keine benutzerdefinierten Hilfsfunktionen wie \"__extends\" in der kompilierten Ausgabe.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Beziehen Sie die Standardbibliotheksdatei (lib.d.ts) nicht ein.", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Fehler zu nicht erreichbarem Code nicht melden.", - "Do_not_report_errors_on_unused_labels_6074": "Fehler zu nicht verwendeten Bezeichnungen nicht melden.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Tatsächlichen Pfad von symbolischen Verknüpfungen nicht auflösen.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Sie sollten keine Importe oder Exporte transformieren oder ausblenden, die nicht als typgeschützt markiert sind. Stellen Sie sicher, dass sie basierend auf der Einstellung \"module\" im Format der Ausgabedatei geschrieben werden.", - "Do_not_truncate_error_messages_6165": "Kürzen Sie keine Fehlermeldungen.", - "Duplicate_function_implementation_2393": "Doppelte Funktionsimplementierung.", - "Duplicate_identifier_0_2300": "Doppelter Bezeichner \"{0}\".", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls, das asynchrone Funktionen enthält.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Doppelter Bezeichner „{0}“. Der Compiler reserviert den Namen „{1}“ beim Ausgeben von „Super“-Verweisen in statischen Initialisierern.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Doppelter Bezeichner \"{0}\". Der Compiler verwendet die Deklaration \"{1}\", um asynchrone Funktionen zu unterstützen.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Doppelter Bezeichner \"{0}\". Statische Elemente und Instanzelemente dürfen nicht denselben privaten Namen aufweisen.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Doppelter Bezeichner \"arguments\". Der Compiler verwendet \"arguments\" zum Initialisieren der rest-Parameter.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Doppelter Bezeichner \"_newTarget\". Der Compiler verwendet die Variablendeklaration \"_newTarget\" zum Erfassen der Metaeigenschaftenreferenz \"new.target\".", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Doppelter Bezeichner \"_this\". Der Compiler verwendet die Variablendeklaration \"_this\" zum Erfassen des this-Verweises.", - "Duplicate_index_signature_for_type_0_2374": "Doppelte Indexsignatur für Typ \"{0}\".", - "Duplicate_label_0_1114": "Doppelte Bezeichnung \"{0}\".", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Doppelte Eigenschaft: {0}", - "Duplicate_regular_expression_flag_1500": "Doppeltes Flag für reguläre Ausdrücke.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Der Spezifizierer des dynamischen Imports muss den Typ \"string\" aufweisen, hier ist er jedoch vom Typ \"{0}\".", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamische Importe werden nur unterstützt, wenn das Flag „--module“ auf „es2020“, „es2022“, „esnext“, „commonjs“, „amd“, „system“, „umd“, „node16“, „node18“, „node20“ oder „nodenext“ festgelegt ist.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamische Importe können nur einen Modulspezifizierer und ein optionales Set mit Attributen als Argumente akzeptieren.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dynamische Importe unterstützen nur ein zweites Argument, wenn die Option „--module“ auf „esnext“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript-Importe und -Exporte können nicht in eine CommonJS-Datei unter „verbatimModuleSyntax“ geschrieben werden.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript-Importe und -Exporte können nicht in eine CommonJS-Datei unter „verbatimModuleSyntax“ geschrieben werden. Passen Sie das Feld „type“ im nächsten „package.json“ an, um diese Datei zu einem ECMAScript-Modul zu machen, oder passen Sie die Einstellungen „verbatimModuleSyntax“, „module“ und „moduleResolution“ in TypeScript an.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Die ECMAScript-Modulsyntax ist in einem CommonJS-Modul nicht zulässig, wenn „module“ auf „preserve“ festgelegt ist.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Jede Deklaration von \"{0}.{1}\" unterscheidet sich in ihrem Wert, wobei \"{2}\" erwartet, aber \"{3}\" angegeben wurde.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Jeder Member des union-Typs \"{0}\" weist Konstruktsignaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Jeder Member des union-Typs \"{0}\" weist Signaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", - "Editor_Support_6249": "Editor-Unterstützung", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Das Element weist implizit einen Typ \"any\" auf, weil der Ausdruck vom Typ \"{0}\" nicht für den Indextyp \"{1}\" verwendet werden kann.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Das Element weist implizit einen Typ \"any\" auf, weil der Indexausdruck nicht vom Typ \"number\" ist.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst. Wollten Sie \"{1}\" aufrufen?", - "Emit_6246": "Ausgeben", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Geben Sie ECMAScript-standardkonforme Klassenfelder aus.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Geben Sie zu Beginn der Ausgabedateien eine UTF-8-Bytereihenfolge-Marke (BOM) aus.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Geben Sie eine einzelne Datei mit Quellzuordnungen anstelle einer separaten Datei aus.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Geben Sie ein v8-CPU-Profil der Compilerausführung zum Debuggen aus.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Geben Sie zusätzliches JavaScript aus, um die Unterstützung beim Importieren von CommonJS-Modulen zu vereinfachen. Dadurch wird „allowSyntheticDefaultImports“ für die Typkompatibilität aktiviert.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Geben Sie Klassenfelder mit \"Define\" anstelle von \"Set\" aus.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Geben Sie Entwurfstypmetadaten für ergänzte Deklarationen in Quelldateien aus.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Geben Sie mehr kompatibles, aber ausführliches und weniger leistungsfähiges JavaScript für die Iteration aus.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Geben Sie die Quelle zusammen mit den Quellzuordnungen innerhalb einer einzelnen Datei aus; hierfür muss \"--inlineSourceMap\" oder \"--sourceMap\" festgelegt sein.", - "Enable_all_strict_type_checking_options_6180": "Aktivieren Sie alle strengen Typüberprüfungsoptionen.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Aktivieren Sie Farbe und Formatierung in der TypeScript-Ausgabe, um Compilerfehler leichter zu lesen.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Aktivieren Sie Einschränkungen, die die Verwendung eines TypeScript-Projekts mit Projektverweisen ermöglichen.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Aktivieren Sie die Fehlerberichterstattung für Codepfade, die nicht explizit in einer Funktion zurückgegeben werden.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Aktivieren Sie die Fehlerberichterstattung für Ausdrücke und Deklarationen mit einem impliziten „any“-Typ.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Aktivieren Sie die Fehlerberichterstellung für Fallthroughfälle in Switch-Anweisungen.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Aktivieren Sie die Fehlerberichterstattung in typgeprüften JavaScript-Dateien.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Aktivieren Sie die Fehlerberichterstattung, wenn lokale Variablen nicht gelesen werden.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Aktivieren Sie die Fehlerberichterstattung, wenn „this“ den Typ „any“ erhält.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Aktivieren Sie experimentelle Unterstützung für experimentelle Legacy-Decorators.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Hiermit wird das Importieren von Dateien mit beliebiger Erweiterung aktiviert, sofern eine Deklarationsdatei vorhanden ist.", - "Enable_importing_json_files_6689": "Aktivieren Sie das Importieren von JSON-Dateien.", - "Enable_lib_replacement_6808": "Libersetzung aktivieren.", - "Enable_project_compilation_6302": "Projektkompilierung aktivieren", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Aktivieren Sie die strict-Methoden \"bind\", \"call\" und \"apply\" für Funktionen.", - "Enable_strict_checking_of_function_types_6186": "Aktivieren Sie die strenge Überprüfung für Funktionstypen.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Aktivieren Sie die strenge Überprüfung der Eigenschafteninitialisierung in Klassen.", - "Enable_strict_null_checks_6113": "Strenge NULL-Überprüfungen aktivieren.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Aktivieren Sie die Option \"experimentalDecorators\" in Ihrer Konfigurationsdatei.", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Aktivieren Sie das Flag \"--jsx\" in Ihrer Konfigurationsdatei.", - "Enable_tracing_of_the_name_resolution_process_6085": "Ablaufverfolgung des Namensauflösungsvorgangs aktivieren.", - "Enable_verbose_logging_6713": "Aktivieren Sie die ausführliche Protokollierung.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Ermöglicht Ausgabeinteroperabilität zwischen CommonJS- und ES-Modulen durch die Erstellung von Namespaceobjekten für alle Importe. Impliziert \"AllowSyntheticDefaultImports\".", - "Enables_experimental_support_for_ES7_decorators_6065": "Ermöglicht experimentelle Unterstützung für asynchrone ES7-Decorators.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Ermöglicht experimentelle Unterstützung zum Ausgeben von Typmetadaten für Decorators.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Erzwingt die Verwendung indizierter Accessoren für Schlüssel, die mithilfe eines indizierten Typs deklariert wurden.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Stellen Sie sicher, dass überschreibende Member in abgeleiteten Klassen mit einem Überschreibungsmodifizierer markiert sind.", - "Ensure_that_casing_is_correct_in_imports_6637": "Stellen Sie sicher, dass die Groß-/Kleinschreibung beim Import korrekt ist.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Stellen Sie sicher, dass jede Datei sicher transpiliert werden kann, ohne dass andere Importe erforderlich sind.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Stellen Sie sicher, dass \"Use Strict\" immer ausgegeben wird.", - "Entering_conditional_exports_6413": "Bedingte Exporte werden eingegeben.", - "Entry_point_for_implicit_type_library_0_1420": "Einstiegspunkt für implizite Typbibliothek \"{0}\"", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Einstiegspunkt für die implizite Typbibliothek \"{0}\" mit packageId \"{1}\"", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\"", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\" mit packageId \"{1}\"", - "Enum_0_used_before_its_declaration_2450": "Enumeration \"{0}\", die vor der Deklaration wurde.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Enumerationsdeklarationen können nur mit Namespace- oder anderen Enumerationsdeklarationen zusammengeführt werden.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Enumerationsdeklarationen müssen alle konstant oder nicht konstant sein.", - "Enum_member_expected_1132": "Ein Enumerationsmember wurde erwartet.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Der Enumerationsmember, der auf ein nicht literales numerisches Element folgt, muss über einen Initialisierer verfügen, wenn \"isolatedModules\" aktiviert ist.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Enumerationsmemberinitialisierer müssen ohne Verweise auf externe Symbole mit \"--isolatedDeclarations\" berechenbar sein.", - "Enum_member_must_have_initializer_1061": "Ein Enumerationsmember muss einen Initialisierer aufweisen.", - "Enum_name_cannot_be_0_2431": "Der Enumerationsname darf nicht \"{0}\" sein.", - "Environment_Settings_6285": "Umgebungseinstellungen", - "Errors_Files_6041": "Fehlerdateien", - "Escape_sequence_0_is_not_allowed_1488": "Escapesequenz \"{0}\" ist nicht zulässig.", - "Examples_Colon_0_6026": "Beispiele: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Übermäßige Komplexität beim Vergleichen der Typen \"{0}\" und \"{1}\".", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Übermäßige Stapeltiefe beim Vergleichen der Typen \"{0}\" und \"{1}\".", - "Exiting_conditional_exports_6416": "Bedingte Exporte werden beendet.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", - "Expected_0_arguments_but_got_1_2554": "{0} Argumente wurden erwartet, empfangen wurden aber {1}.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Es wurden {0} Argumente erwartet, aber {1} erhalten. Sollte \"void\" in Ihr Typargument in \"Promise\" eingeschlossen werden?", - "Expected_0_type_arguments_but_got_1_2558": "{0} Typenargumente wurden erwartet, empfangen wurden aber {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 Argument erwartet, aber 0 erhalten. „new Promise()“ benötigt einen JSDoc-Hinweis, um einen „resolve“ zu erzeugen, der ohne Argumente aufgerufen werden kann.", - "Expected_a_Unicode_property_name_1523": "Es wurde ein Unicode-Eigenschaftsname erwartet.", - "Expected_a_Unicode_property_name_or_value_1527": "Es wurde ein Unicode-Eigenschaftsname oder -wert erwartet.", - "Expected_a_Unicode_property_value_1525": "Es wurde ein Unicode-Eigenschaftswert erwartet.", - "Expected_a_capturing_group_name_1514": "Es wurde ein Name für die Erfassungsgruppe erwartet.", - "Expected_a_class_set_operand_1520": "Es wurde ein Klassensatzoperand erwartet.", - "Expected_at_least_0_arguments_but_got_1_2555": "Mindestens {0} Argumente wurden erwartet, empfangen wurden aber {1}.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Das entsprechende schließende JSX-Tag wurde für \"{0}\" erwartet.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Für das JSX-Fragment wurde das entsprechende schließende Tag erwartet.", - "Expected_for_property_initializer_1442": "Für den Eigenschafteninitialisierer wurde \"=\" erwartet.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Der erwartete Typ des Felds \"{0}\" in der Datei \"package.json\" lautet \"{1}\", empfangen wurde \"{2}\".", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explizit angegebene Art der Modulauflösung: \"{0}\".", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Die Potenzierung kann für bigint-Werte nur durchgeführt werden, wenn die Option \"target\" auf \"es2016\" oder höher festgelegt ist.", - "Export_0_from_module_1_90059": "Exportieren von \"{0}\" aus Modul \"{1}\"", - "Export_all_referenced_locals_90060": "Alle referenzierten lokalen Elemente exportieren", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Die Exportzuweisung darf nicht verwendet werden, wenn das Ziel ECMAScript-Module sind. Verwenden Sie stattdessen ggf. \"export default\" oder ein anderes Modulformat.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Die Exportzuweisung wird nicht unterstützt, wenn das Flag \"-module\" den Wert \"system\" aufweist.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Die Exportdeklaration verursacht einen Konflikt mit der exportierten Deklaration von \"{0}\".", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Exportdeklarationen sind in einem Namespace unzulässig.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Der Exportspezifizierer \"{0}\" ist im package.json-Bereich beim Pfad \"{1}\" nicht vorhanden.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\" aus dem Modul \"{2}\".", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "Die exportierte Variable \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporte und Exportzuweisungen sind in Modulerweiterungen unzulässig.", - "Expression_expected_1109": "Es wurde ein Ausdruck erwartet.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Der Ausdruck muss in Klammern eingeschlossen werden, damit er als Decorator verwendet werden kann.", - "Expression_or_comma_expected_1137": "Es wurde ein Ausdruck oder Komma erwartet.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Der Ausdruck erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Der Ausdruck erzeugt einen union-Typ, der für die Darstellung zu komplex ist.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Der Ausdruck wird in \"_super\" aufgelöst. Damit erfasst der Compiler den Basisklassenverweis.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Der Ausdruck wird in die Variablendeklaration \"_newTarget\" aufgelöst, die der Compiler zum Erfassen der Metaeigenschaftenreferenz \"new.target\" verwendet.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Der Ausdruck wird in die Variablendeklaration \"_this\" aufgelöst, die der Compiler verwendet, um den this-Verweis zu erfassen.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Der Ausdruckstyp kann nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Die Extends-Klausel darf keinen Ausdruck mit \"--isolatedDeclarations\" enthalten.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Die extends-Klausel für den abgeleiteten Typ \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "Extract_base_class_to_variable_90064": "Basisklasse in Variable extrahieren", - "Extract_binding_expressions_to_variable_90066": "Extrahieren von Bindungsausdrücken in eine Variable", - "Extract_constant_95006": "Konstante extrahieren", - "Extract_default_export_to_variable_90065": "Standardexport in Variable extrahieren", - "Extract_function_95005": "Funktion extrahieren", - "Extract_to_0_in_1_95004": "Als {0} nach {1} extrahieren", - "Extract_to_0_in_1_scope_95008": "Als {0} in {1}-Bereich extrahieren", - "Extract_to_0_in_enclosing_scope_95007": "Als {0} in einschließenden Bereich extrahieren", - "Extract_to_interface_95090": "In Schnittstelle extrahieren", - "Extract_to_type_alias_95078": "In Typalias extrahieren", - "Extract_to_typedef_95079": "In TypeDef extrahieren", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "In Variable extrahieren und durch \"{0} as typeof {0}\" ersetzen", - "Extract_type_95077": "Typ extrahieren", - "FILE_6035": "DATEI", - "FILE_OR_DIRECTORY_6040": "DATEI ODER VERZEICHNIS", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Fehler beim Suchen der peerDependency \"{0}\".", - "Failed_to_resolve_under_condition_0_6415": "Fehler beim Auflösen unter der Bedingung \"{0}\".", - "Fallthrough_case_in_switch_7029": "FallThrough-Fall in switch-Anweisung.", - "File_0_does_not_exist_6096": "Die Datei \"{0}\" ist nicht vorhanden.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups nicht vorhanden.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups vorhanden.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Die Datei \"{0}\" ist vorhanden – sie wird als Ergebnis der Namensauflösung verwendet.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Die Datei \"{0}\" weist eine nicht unterstützte Erweiterung auf. Es werden nur die folgenden Erweiterungen unterstützt: {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Die Datei \"{0}\" ist eine JavaScript-Datei. Wollten Sie die Option \"allowJs\" aktivieren?", - "File_0_is_not_a_module_2306": "Die Datei \"{0}\" ist kein Modul.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Die Datei \"{0}\" befindet sich nicht in der Dateiliste von Projekt \"{1}\". Projekte müssen alle Dateien auflisten oder ein include-Muster verwenden.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Datei \"{0}\" befindet sich nicht unter \"rootDir\" \"{1}\". \"rootDir\" muss alle Quelldateien enthalten.", - "File_0_not_found_6053": "Die Datei \"{0}\" wurde nicht gefunden.", - "File_Layout_6284": "Dateilayout", - "File_Management_6245": "Dateiverwaltung", - "File_appears_to_be_binary_1490": "Die Datei scheint binär zu sein.", - "File_change_detected_Starting_incremental_compilation_6032": "Es wurde eine Dateiänderung erkannt. Die inkrementelle Kompilierung wird gestartet...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Die Datei ist ein CommonJS-Modul, da '{0}' nicht das Feld „Typ“ aufweist", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Die Datei ist ein CommonJS-Modul, da '{0}' das Feld „Typ“ aufweist, dessen Wert nicht „Modul“ ist", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Die Datei ist ein CommonJS-Modul, da „package.json“ nicht gefunden wurde", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Die Datei ist ein ECMAScript-Modul, da '{0}' das Feld „Typ“ mit dem Wert „Modul“ aufweist.", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Die Datei ist ein CommonJS-Modul und kann möglicherweise in ein ES-Modul konvertiert werden.", - "File_is_default_library_for_target_specified_here_1426": "Die Datei ist die Standardbibliothek für das hier angegebene Ziel.", - "File_is_entry_point_of_type_library_specified_here_1419": "Die Datei ist ein Einstiegspunkt der hier angegebenen Typbibliothek.", - "File_is_included_via_import_here_1399": "Die Datei wird hier per Import eingeschlossen.", - "File_is_included_via_library_reference_here_1406": "Die Datei wird hier per Bibliotheksverweis eingeschlossen.", - "File_is_included_via_reference_here_1401": "Die Datei wird hier per Verweis eingeschlossen.", - "File_is_included_via_type_library_reference_here_1404": "Die Datei wird hier per Typbibliotheksverweis eingeschlossen.", - "File_is_library_specified_here_1423": "Die Datei ist die hier angegebene Bibliothek.", - "File_is_matched_by_files_list_specified_here_1410": "Die Datei wird mit der hier angegebenen Liste \"files\" abgeglichen.", - "File_is_matched_by_include_pattern_specified_here_1408": "Die Datei wird mit dem hier angegebenen include-Muster abgeglichen.", - "File_is_output_from_referenced_project_specified_here_1413": "Die Datei ist die Ausgabe des hier angegebenen referenzierten Projekts.", - "File_is_output_of_project_reference_source_0_1428": "Die Datei ist die Ausgabe der Projektverweisquelle \"{0}\".", - "File_is_source_from_referenced_project_specified_here_1416": "Die Datei ist die Quelle des hier angegebenen referenzierten Projekts.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Der Dateiname \"{0}\" unterscheidet sich vom bereits enthaltenen Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Der Dateiname \"{0}\" hat eine \"{1}\"-Erweiterung. Stattdessen wird nach \"{2}\" gesucht.", - "File_name_0_has_a_1_extension_stripping_it_6132": "Der Dateiname \"{0}\" weist eine Erweiterung \"{1}\" auf. Diese wird entfernt.", - "File_redirects_to_file_0_1429": "Die Datei leitet an die Datei \"{0}\" um.", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Die Dateispezifikation darf kein übergeordnetes Verzeichnis (\"..\") enthalten, das nach einem rekursiven Verzeichnisplatzhalter (\"**\") angegeben wird: \"{0}\".", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Die Dateispezifikation darf nicht mit einem rekursiven Verzeichnisplatzhalter (\"**\") enden: \"{0}\".", - "Filters_results_from_the_include_option_6627": "Filtert Ergebnisse aus der Option \"include\".", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Alle erkannten Rechtschreibfehler korrigieren", - "Fix_all_expressions_possibly_missing_await_95085": "Korrigieren Sie alle Ausdrücke, in denen \"await\" möglicherweise fehlt.", - "Fix_all_implicit_this_errors_95107": "Alle impliziten this-Fehler beheben", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Alle falschen Rückgabetypen einer asynchronen Funktionen korrigieren", - "Fix_all_with_type_only_imports_95182": "Alle mit rein typbasierten Importen korrigieren", - "For_nodejs_Colon_6287": "Für Node.js:", - "Found_0_errors_6217": "{0} Fehler gefunden.", - "Found_0_errors_Watching_for_file_changes_6194": "{0} Fehler gefunden. Es wird auf Dateiänderungen überwacht.", - "Found_0_errors_in_1_files_6261": "In {1} Dateien wurden {0} Fehler gefunden.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Es wurden {0} Fehler in derselben Datei gefunden, beginnend bei: {1}", - "Found_1_error_6216": "1 Fehler gefunden.", - "Found_1_error_Watching_for_file_changes_6193": "1 Fehler gefunden. Es wird auf Dateiänderungen überwacht.", - "Found_1_error_in_0_6259": "1 Fehler in {0} gefunden", - "Found_package_json_at_0_6099": "\"package.json\" wurde unter \"{0}\" gefunden.", - "Found_peerDependency_0_with_1_version_6282": "Es wurde eine peerDependency \"{0}\" mit Version \"{1}\" gefunden.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Klassendefinitionen befinden sich automatisch im Strict-Modus.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Module befinden sich automatisch im Strict-Modus.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Ein Funktionsausdruck ohne Rückgabetypanmerkung weist implizit einen {0}-Rückgabetyp auf.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Die Funktionsimplementierung fehlt oder folgt nicht unmittelbar auf die Deklaration.", - "Function_implementation_name_must_be_0_2389": "Der Name der Funktionsimplementierung muss \"{0}\" lauten.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Die Funktion weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem ihrer Rückgabeausdrücke verwiesen wird.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Der Funktion fehlt die abschließende return-Anweisung, und der Rückgabetyp enthält nicht \"undefined\".", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Die Funktion muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", - "Function_not_implemented_95159": "Die Funktion ist nicht implementiert.", - "Function_overload_must_be_static_2387": "Die Funktionsüberladung muss statisch sein.", - "Function_overload_must_not_be_static_2388": "Die Funktionsüberladung darf nicht statisch sein.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Union-Typ verwendet wird.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Intersection-Typ verwendet wird.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Ein Funktionstyp ohne Rückgabetypanmerkung weist implizit einen Rückgabetyp \"{0}\" auf.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Eine Funktion mit Textkörpern kann nur mit Umgebungsklassen zusammengeführt werden.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generieren Sie .d.ts-Dateien aus TypeScript- und JavaScript-Dateien in Ihrem Projekt.", - "Generate_get_and_set_accessors_95046": "GET- und SET-Accessoren generieren", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "get- und set-Zugriffsmethoden für alle überschreibenden Eigenschaften generieren", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Generiert ein CPU-Profil.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Generiert eine sourcemap für jede entsprechende .d.ts-Datei.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Generiert eine Ereignisablaufverfolgung und eine Liste von Typen.", - "Generates_corresponding_d_ts_file_6002": "Generiert die entsprechende .d.ts-Datei.", - "Generates_corresponding_map_file_6043": "Generiert die entsprechende MAP-Datei.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Der Generator hat implizit den Yield-Typ '{0}'. Erwägen Sie die Angabe eines Rückgabetyps.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Generatoren sind in einem Umgebungskontext unzulässig.", - "Generic_type_0_requires_1_type_argument_s_2314": "Der generische Typ \"{0}\" erfordert {1} Typargument(e).", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Der generische Typ \"{0}\" benötigt zwischen {1} und {2} Typargumente.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Globale Modulexporte dürfen nur auf der obersten Ebene auftreten.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globale Modulexporte dürfen nur in Deklarationsdateien auftreten.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Globale Modulexporte dürfen nur in Moduldateien auftreten.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Der globale Typ \"{0}\" muss eine Klassen- oder Schnittstellentyp sein.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Der globale Typ \"{0}\" muss {1} Typparameter aufweisen.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Legen Sie für Neukompilierungen in \"--incremental\" und \"--watch\" fest, dass sich Änderungen innerhalb einer Datei nur auf die direkt davon abhängigen Dateien auswirken.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Bei Neukompilierungen in Projekten, die die Modi „incremental“ und „watch“ verwenden, wird davon ausgegangen, dass Änderungen innerhalb einer Datei sich nur direkt auf Dateien auswirken.", - "Hexadecimal_digit_expected_1125": "Es wurde eine hexadezimale Zahl erwartet.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort auf der obersten Ebene eines Moduls.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ein Bezeichner wird erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Es wurde ein Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus. Klassendefinitionen befinden sich automatisch im Strict-Modus.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Es wurde ein Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus. Module befinden sich automatisch im Strict-Modus.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort, das hier nicht verwendet werden kann.", - "Identifier_expected_1003": "Es wurde ein Bezeichner erwartet.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Bezeichner erwartet. \"__esModule\" ist als exportierter Marker für die Umwandlung von ECMAScript-Modulen reserviert.", - "Identifier_or_string_literal_expected_1478": "Bezeichner oder Zeichenfolgenliteral erwartet.", - "Identifier_string_literal_or_number_literal_expected_1496": "Bezeichner, Zeichenfolgenliteral oder Zahlenliteral erwartet.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, erwägen Sie, einen Pull Request zum Ändern von https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1} zu senden.", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, versuchen Sie, eine neue Deklarationsdatei (.d.ts) hinzuzufügen, die Declare-Modul \"{1}\" enthält.", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", - "Ignore_this_error_message_90019": "Diese Fehlermeldung ignorieren", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoriert tsconfig.json und kompiliert die angegebenen Dateien mit den Standardkompilieroptionen.", - "Implement_all_inherited_abstract_classes_95040": "Alle geerbten abstrakten Klassen implementieren", - "Implement_all_unimplemented_interfaces_95032": "Alle nicht implementierten Schnittstellen implementieren", - "Implement_inherited_abstract_class_90007": "Geerbte abstrakte Klasse implementieren", - "Implement_interface_0_90006": "Schnittstelle \"{0}\" implementieren", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Die implements-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Die implizite Konvertierung von \"symbol\" in \"string\" führt zur Laufzeit zu einem Fehler. Erwägen Sie, diesen Ausdruck in \"String(...)\" einzuschließen.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import \"{0}\" steht in Konflikt mit dem in dieser Datei verwendeten globalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import \"{0}\" steht in Konflikt mit dem lokalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", - "Import_0_from_1_90013": "\"{0}\" aus \"{1}\" importieren", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Importassertionswerte müssen Zeichenfolgenliteralausdrücke sein.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Importassertionen sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompilieren, nicht zulässig.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Importassertionen werden nur unterstützt, wenn die Option „--module“ auf „esnext“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Importassertionen können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Importassertionen wurden durch Importattribute ersetzt. Verwenden Sie \"with\" anstelle von \"assert\".", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Die Importzuweisung kann nicht verwendet werden, wenn das Ziel ECMAScript-Module sind. Verwenden Sie stattdessen ggf. \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" oder ein anderes Modulformat.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Importattributwerte müssen Zeichenfolgenliteralausdrücke sein.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Importattribute sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompiliert werden, nicht zulässig.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Importattribute werden nur unterstützt, wenn die Option „--module“ auf „esnext“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Importattribute können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", - "Import_declaration_0_is_using_private_name_1_4000": "Die Importdeklaration \"{0}\" verwendet den privaten Namen \"{1}\".", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Die Importdeklaration verursacht einen Konflikt mit der lokalen Deklaration von \"{0}\".", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Importdeklarationen in einem Namespace dürfen nicht auf ein Modul verweisen.", - "Import_emit_helpers_from_tslib_6139": "Ausgabehilfsprogramme aus \"tslib\" importieren.", - "Import_may_be_converted_to_a_default_import_80003": "Der Import kann in einen Standardimport konvertiert werden.", - "Import_name_cannot_be_0_2438": "Der Importname darf nicht \"{0}\" sein.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Import- oder Exportdeklaration in einer Umgebungsmoduldeklaration dürfen nicht über den relativen Modulnamen auf ein Modul verweisen.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Der Importspezifizierer \"{0}\" ist im package.json-Bereich beim Pfad \"{1}\" nicht vorhanden.", - "Imported_via_0_from_file_1_1393": "Importiert über \"{0}\" aus der Datei \"{1}\"", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\"", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "\"Das Importieren einer JSON-Datei in ein ECMAScript-Modul erfordert ein Importattribut 'type: \"json\"', wenn 'module' auf '{0}' gesetzt ist.", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importe sind in Modulerweiterungen unzulässig. Verschieben Sie diese ggf. in das einschließende externe Modul.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "In Umgebungsenumerationsdeklarationen muss der Memberinitialisierer ein konstanter Ausdruck sein.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In einer Enumeration mit mehreren Deklarationen kann nur eine Deklaration einen Initialisierer für das erste Enumerationselement ausgeben.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Schließen Sie eine Liste von Dateien ein. Dies unterstützt keine Globmuster im Gegensatz zu \"include\".", - "Include_modules_imported_with_json_extension_6197": "Importierte Module mit der Erweiterung \"JSON\" einschließen", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Fügen Sie den Quellcode in die Quellzuordnungen innerhalb des ausgesendeten JavaScript-Codes ein.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Schließen Sie Quellzuordnungsdateien in das ausgegebene JavaScript ein.", - "Includes_imports_of_types_referenced_by_0_90054": "Schließt Importe von Typen ein, auf die von „{0}“ verwiesen wird", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Bei Einschließung von --watch beginnt -w, das aktuelle Projekt auf Dateiänderungen zu überwachen. Einmal eingestellt, können Sie den Überwachungsmodus konfigurieren, und zwar mit:", - "Incomplete_quantifier_Digit_expected_1505": "Unvollständiger Quantifizierer. Eine Ziffer wurde erwartet.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "Die Indexsignatur für den Typ \"{0}\" fehlt im Typ \"{1}\".", - "Index_signature_in_type_0_only_permits_reading_2542": "Die Indexsignatur in Typ \"{0}\" lässt nur Lesevorgänge zu.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Einzelne Deklarationen in der gemergten Deklaration \"{0}\" müssen alle exportiert oder alle lokal sein.", - "Infer_all_types_from_usage_95023": "Alle Typen aus der Syntax ableiten", - "Infer_function_return_type_95148": "Funktionsrückgabetyp ableiten", - "Infer_parameter_types_from_usage_95012": "Parametertypen aus der Nutzung ableiten", - "Infer_this_type_of_0_from_usage_95080": "Typ \"this\" von \"{0}\" aus Syntax ableiten", - "Infer_type_of_0_from_usage_95011": "Typ von \"{0}\" aus der Nutzung ableiten", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Der Rückschluss von Klassenausdrücken wird mit \"--isolatedDeclarations\" nicht unterstützt.", - "Initialize_property_0_in_the_constructor_90020": "Eigenschaft \"{0}\" im Konstruktor initialisieren", - "Initialize_static_property_0_90021": "Statische Eigenschaft \"{0}\" initialisieren", - "Initializer_for_property_0_2811": "Initialisierer für Eigenschaft \"{0}\"", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Der Initialisierer der Instanzmembervariablen \"{0}\" darf nicht auf den im Konstruktor deklarierten Bezeichner \"{1}\" verweisen.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Initialisierer sind in Umgebungskontexten unzulässig.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialisiert ein TypeScript-Projekt und erstellt eine Datei \"tsconfig.json\".", - "Inline_variable_95184": "Inlinevariable", - "Insert_command_line_options_and_files_from_a_file_6030": "Fügt Befehlszeilenoptionen und Dateien aus einer Datei ein.", - "Install_0_95014": "\"{0}\" installieren", - "Install_all_missing_types_packages_95033": "Alle fehlenden Typenpakete installieren", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Die Schnittstelle \"{0}\" kann die Typen \"{1}\" und \"{2}\" nicht gleichzeitig erweitern.", - "Interface_0_incorrectly_extends_interface_1_2430": "Die Schnittstelle \"{0}\" erweitert fälschlicherweise die Schnittstelle \"{1}\".", - "Interface_declaration_cannot_have_implements_clause_1176": "Die Schnittstellendeklarationen darf keine implements-Klausel aufweisen.", - "Interface_must_be_given_a_name_1438": "Schnittstelle muss einen Namen erhalten.", - "Interface_name_cannot_be_0_2427": "Der Schnittstellenname darf nicht \"{0}\" sein.", - "Interop_Constraints_6252": "Interop-Einschränkungen", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretieren Sie optionale Eigenschaftstypen als geschrieben, statt 'nicht definiert' hinzuzufügen.", - "Invalid_character_1127": "Ungültiges Zeichen.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Der ungültige Importbezeichner \"{0}\" weist keine möglichen Auflösungen auf.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Ungültiger Modulname in Augmentation. Das Modul \"{0}\" wird in ein nicht typisiertes Modul in \"{1}\" aufgelöst, das nicht augmentiert werden kann.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Ungültiger Modulname in der Erweiterung. Das Modul \"{0}\" wurde nicht gefunden.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Ungültige optionale Kette aus neuem Ausdruck. Wollten Sie '{0}()' anrufen?", - "Invalid_reference_directive_syntax_1084": "Ungültige Syntax der reference-Direktive.", - "Invalid_syntax_in_decorator_1498": "Ungültige Syntax im Decorator.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Ungültige Verwendung von \"{0}\". Es kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Ungültige Verwendung von \"{0}\". Module befinden sich automatisch im Strict-Modus.", - "Invalid_use_of_0_in_strict_mode_1100": "Ungültige Verwendung von \"{0}\" im Strict-Modus.", - "Invalid_value_for_ignoreDeprecations_5103": "Ungültiger Wert für \"--ignoreDeprecations\".", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Ungültiger Wert für \"jsxFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Ungültiger Wert für \"jsxFragmentFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Ungültiger Wert für \"-reactNamespace\". \"{0}\" ist kein gültiger Bezeichner.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Möglicherweise fehlt ein Komma, um diese beiden Vorlagenausdrücke zu trennen. Sie bilden einen Vorlagenausdruck mit Tags, der nicht aufgerufen werden kann.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Der zugehörige Elementtyp \"{0}\" ist kein gültiges JSX-Element.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Der zugehörige Instanztyp \"{0}\" ist kein gültiges JSX-Element.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Der Rückgabetyp \"{0}\" ist kein gültiges JSX-Element.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Der zugehörige Typ \"{0}\" ist kein gültiger JSX-Elementtyp.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" entspricht nicht der Klausel \"extends {2}\".", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" ist keiner Klassendeklaration zugeordnet.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Das JSDoc-Tag \"...\" wird möglicherweise nur im letzten Parameter einer Signatur angezeigt.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es gibt jedoch keinen Parameter dieses Namens.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es ist jedoch kein Parameter dieses Namens vorhanden. Es läge eine Übereinstimmung mit \"arguments\" vor, wenn ein Arraytyp vorläge.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef kann in TypeScript-Typ konvertiert werden.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Das JSDoc-Tag \"@typedef\" muss entweder eine Typanmerkung aufweisen, oder die Tags \"@property\" oder \"@member\" müssen darauf folgen.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs können in TypeScript-Typen konvertiert werden.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc-Typen können nur innerhalb von Dokumentationskommentaren verwendet werden.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc-Typen können in TypeScript-Typen verschoben werden.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX-Attributen darf nur ein nicht leeres expression-Objekt zugewiesen werden.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "Das JSX-Element \"{0}\" weist kein entsprechendes schließendes Tag auf.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Die JSX-Elementklasse unterstützt keine Attribute, weil sie keine Eigenschaft \"{0}\" aufweist.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Das JSX-Element enthält implizit den Typ \"any\", weil keine Schnittstelle \"JSX.{0}\" vorhanden ist.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Das JSX-Element enthält implizit den Typ \"any\", weil der globale Typ \"JSX.Element\" nicht vorhanden ist.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Der JSX-Elementtyp \"{0}\"weist keine Konstrukt- oder Aufrufsignaturen auf.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX-Elemente dürfen nicht mehrere Attribute mit dem gleichen Namen aufweisen.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX-Ausdrücke dürfen keinen Komma-Operator verwenden. Wollten Sie ein Array schreiben?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX-Ausdrücke müssen ein übergeordnetes Element aufweisen.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Das JSX-Fragment weist kein entsprechendes schließendes Tag auf.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Ausdrücke für den Zugriff auf JSX-Eigenschaften dürfen keine JSX-Namespacenamen enthalten.", - "JSX_spread_child_must_be_an_array_type_2609": "Die untergeordnete JSX-Verteilung muss ein Arraytyp sein.", - "JavaScript_Support_6247": "JavaScript-Unterstützung", - "Jump_target_cannot_cross_function_boundary_1107": "Das Sprungziel darf die Funktionsgrenze nicht überschreiten.", - "KIND_6034": "ART", - "Keywords_cannot_contain_escape_characters_1260": "Schlüsselwörter können keine Escapezeichen enthalten.", - "LOCATION_6037": "SPEICHERORT", - "Language_and_Environment_6254": "Sprache und Umgebung", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Die linke Seite des Kommaoperators wird nicht verwendet besitzt keine Nebenwirkungen.", - "Library_0_specified_in_compilerOptions_1422": "In \"compilerOptions\" angegebene Bibliothek \"{0}\"", - "Library_referenced_via_0_from_file_1_1405": "Bibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird", - "Line_break_not_permitted_here_1142": "Ein Zeilenumbruch ist hier unzulässig.", - "Line_terminator_not_permitted_before_arrow_1200": "Das Zeilenabschlusszeichen ist vor dem Pfeil unzulässig.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Liste der Dateinamensuffixe, die beim Auflösen eines Moduls gesucht werden sollen.", - "List_of_folders_to_include_type_definitions_from_6161": "Liste der Ordner, aus denen Typendefinitionen einbezogen werden sollen.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste der Stammordner, deren kombinierter Inhalt die Struktur des Projekts zur Laufzeit darstellt.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "\"{0}\" wird aus dem Stammverzeichnis \"{1}\" geladen. Speicherort des Kandidaten \"{2}\".", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Modul \"{0}\" wird aus dem Ordner \"node_modules\" geladen, Zieldateitypen: {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modul wird als Datei/Ordner geladen, der Speicherort des Kandidatenmoduls ist \"{0}\", Zieldateitypen: {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Protokollpfade, die während des „moduleResolution“-Prozesses verwendet werden.", - "Longest_matching_prefix_for_0_is_1_6108": "Das längste übereinstimmende Präfix für \"{0}\" ist \"{1}\".", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Die Suche erfolgt im Ordner \"node_modules\". Anfangsspeicherort \"{0}\".", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Alle \"super()\"-Aufrufe als erste Anweisung im entsprechenden Konstruktor festlegen", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Stellen Sie ein, dass keyof nur Zeichenfolgen, anstelle von Zeichenfolgen, Zahlen oder Symbolen zurückgibt. Legacy-Option.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "super()-Aufruf als erste Anweisung im Konstruktor festlegen", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Der zugeordnete Objekttyp weist implizit einen any-Vorlagentyp auf.", - "Mark_array_literal_as_const_90070": "Arrayliteral als \"const\" markieren", - "Matched_0_condition_1_6403": "Übereinstimmung mit \"{0}\" Bedingung \"{1}\".", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Standardmäßig zugeordnetes Includemuster „**/*“", - "Matched_by_include_pattern_0_in_1_1407": "Abgeglichen mit dem include-Muster \"{0}\" in \"{1}\"", - "Member_0_implicitly_has_an_1_type_7008": "Der Member \"{0}\" weist implizit den Typ \"{1}\" auf.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Member \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "Merge_conflict_marker_encountered_1185": "Mergekonfliktmarkierung", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Die gemergte Deklaration \"{0}\" darf keine Exportstandarddeklaration enthalten. Fügen Sie ggf. eine separate Deklaration \"export default {0}\" hinzu.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Die Metaeigenschaft \"{0}\" ist nur im Text einer Funktionsdeklaration, eines Funktionsausdrucks oder eines Konstruktors zulässig.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Die Methode \"{0}\" darf keine Implementierung besitzen, weil sie als abstrakt markiert ist.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Die Methode muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", - "Method_not_implemented_95158": "Die Methode ist nicht implementiert.", - "Modifiers_cannot_appear_here_1184": "Modifizierer dürfen hier nicht enthalten sein.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Das Modul \"{0}\" kann nur mit dem Flag \"{1}\" als Standard importiert werden.", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Das Modul \"{0}\" kann nicht mit diesem Konstrukt importiert werden. Der Spezifizierer wird nur in ein ES-Modul aufgelöst, das nicht mit \"require\" importiert werden kann. Verwenden Sie stattdessen einen ECMAScript-Import.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Das Modul \"{0}\" deklariert \"{1}\" lokal, der Export erfolgt jedoch als \"{2}\".", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Das Modul \"{0}\" deklariert \"{1}\" lokal, es erfolgt jedoch kein Export.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Das Modul \"{0}\" verweist nicht auf einen Typ, wird hier aber als Typ verwendet. Meinten Sie \"typeof import('{0}')\"?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Das Modul \"{0}\" verweist nicht auf einen Wert, wird hier aber als Wert verwendet.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Das Modul \"{0}\" hat bereits einen Member mit dem Namen \"{1}\" exportiert. Erwägen Sie, ihn explizit erneut zu exportieren, um die Mehrdeutigkeit zu vermeiden.", - "Module_0_has_no_default_export_1192": "Das Modul \"{0}\" weist keinen Standardexport auf.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Das Modul \"{0}\" weist keinen Standardexport auf. Wollten Sie stattdessen \"import { {1} } from {0}\" verwenden?", - "Module_0_has_no_exported_member_1_2305": "Das Modul \"{0}\" weist keinen exportierten Member \"{1}\" auf.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Das Modul \"{0}\" umfasst keinen exportierten Member \"{1}\". Wollten Sie stattdessen \"import {1} from {0}\" verwenden?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Das Modul \"{0}\" wird durch eine lokale Deklaration mit dem gleichen Namen ausgeblendet.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Das Modul \"{0}\" verwendet \"export =\" und darf nicht mit \"export *\" verwendet werden.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Das Modul \"{0}\" wurde als lokal deklariertes Umgebungsmodul in der Datei \"{1}\" aufgelöst.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--allowArbitraryExtensions\" ist nicht festgelegt.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Das Modul \"{0}\" wurde zu \"{1}\" aufgelöst, aber \"--jsx\" wurde nicht festgelegt.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--resolveJsonModule\" wird nicht verwendet.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Namen der Moduldeklaration dürfen nur Zeichenfolgen enthalten, die von ' oder \" eingeschlossen werden.", - "Module_name_0_matched_pattern_1_6092": "Modulname \"{0}\", übereinstimmendes Muster \"{1}\".", - "Module_name_0_was_not_resolved_6090": "======== Der Modulname \"{0}\" wurde nicht aufgelöst. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Die Art der Modulauflösung wird nicht angegeben. \"{0}\" wird verwendet.", - "Module_resolution_using_rootDirs_has_failed_6111": "Fehler bei der Modulauflösung mithilfe von \"rootDirs\".", - "Modules_6244": "Module", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Modifizierer für bezeichnete Tupelelemente in Bezeichnungen verschieben", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Verschieben Sie den Ausdruck im Standardexport in eine Variable, und fügen Sie ihm eine Typanmerkung hinzu.", - "Move_to_a_new_file_95049": "In neue Datei verschieben", - "Move_to_file_95178": "In Datei verschieben", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Mehrere aufeinander folgende numerische Trennzeichen sind nicht zulässig.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Mehrere Konstruktorimplementierungen sind unzulässig.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NEUE ZEILE", - "Name_is_not_valid_95136": "Der Name ist ungültig.", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Benannte Erfassungsgruppen sind nur verfügbar, wenn das Ziel \"ES2018\" oder höher ist.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Benannte Erfassungsgruppen mit demselben Namen müssen sich gegenseitig ausschließen.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Benannte Importe sind in einem verzögerten Import nicht zulässig.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Benannte Importe aus einer JSON-Datei in ein ECMAScript-Modul sind nicht erlaubt, wenn 'module' auf '{0}'.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Die benannte Eigenschaft \"{0}\" der Typen \"{1}\" und \"{2}\" ist nicht identisch.", - "Namespace_0_has_no_exported_member_1_2694": "Der Namespace \"{0}\" besitzt keinen exportierten Member \"{1}\".", - "Namespace_must_be_given_a_name_1437": "Namespace muss einen Namen erhalten.", - "Namespace_name_cannot_be_0_2819": "Namespacename darf nicht \"{0}\" sein.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces sind in globalen Skriptdateien nicht zulässig, wenn \"{0}\" aktiviert ist. Wenn diese Datei kein globales Skript sein soll, legen Sie \"moduleDetection\" auf \"force\" fest, oder fügen Sie eine leere \"export {}\"-Anweisung hinzu.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Weder Decorators noch Modifizierer können auf \"this\"-Parameter angewendet werden.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Kein Basiskonstruktor weist die angegebene Anzahl von Typargumenten auf.", - "No_constituent_of_type_0_is_callable_2755": "Es ist kein Bestandteil vom Typ \"{0}\" aufrufbar.", - "No_constituent_of_type_0_is_constructable_2759": "Es kann kein Bestandteil vom Typ \"{0}\" erstellt werden.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Für den Typ \"{1}\" wurde keine Indexsignatur mit einem Parameter vom Typ \"{0}\" gefunden.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "In der Konfigurationsdatei \"{0}\" wurden keine Eingaben gefunden. Als include-Pfade wurden \"{1}\", als exclude-Pfade wurden \"{2}\" angegeben.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Wird nicht mehr unterstützt. Legen Sie die Textcodierung für das Lesen von Dateien in früheren Versionen manuell fest.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Keine Überladung erwartet {0} Argumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Argumente erwarten.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Keine Überladung erwartet {0} Typargumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Typargumente erwarten.", - "No_overload_matches_this_call_2769": "Keine Überladung stimmt mit diesem Aufruf überein.", - "No_type_could_be_extracted_from_this_type_node_95134": "Aus diesem Typknoten konnte kein Typ extrahiert werden.", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Im Bereich für die Kompakteigenschaft \"{0}\" ist kein Wert vorhanden. Deklarieren Sie entweder einen Wert, oder geben Sie einen Initialisierer an.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Die nicht abstrakte Klasse \"{0}\" implementiert nicht den geerbten abstrakten Member {1} aus der Klasse \"{2}\".", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2} und {3} weitere.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Der nicht abstrakte Ausdruck implementiert nicht den geerbten abstrakten Member \"{0}\" aus der Klasse \"{1}\".", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1} und {2} weitere.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Assertionen ungleich NULL können nur in TypeScript-Dateien verwendet werden.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Hier wurde ein nicht einfacher Parameter deklariert.", - "Not_all_code_paths_return_a_value_7030": "Nicht alle Codepfade geben einen Wert zurück.", - "Not_all_constituents_of_type_0_are_callable_2756": "Nicht alle Bestandteile vom Typ \"{0}\" können aufgerufen werden.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Nicht alle Bestandteile vom Typ \"{0}\" können erstellt werden.", - "Numbers_out_of_order_in_quantifier_1506": "Zahlen im Quantifizierer nicht in der richtigen Reihenfolge.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Numerische Literale mit absoluten Werten von 2^53 oder höher sind zu groß, um als ganze Zahlen genau dargestellt werden zu können.", - "Numeric_separators_are_not_allowed_here_6188": "Numerische Trennzeichen sind hier nicht zulässig.", - "Object_is_of_type_unknown_2571": "Das Objekt ist vom Typ \"Unbekannt\".", - "Object_is_possibly_null_2531": "Das Objekt ist möglicherweise \"NULL\".", - "Object_is_possibly_null_or_undefined_2533": "Das Objekt ist möglicherweise \"NULL\" oder \"nicht definiert\".", - "Object_is_possibly_undefined_2532": "Das Objekt ist möglicherweise \"nicht definiert\".", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Das Objektliteral kann nur bekannte Eigenschaften angeben, und \"{0}\" ist im Typ \"{1}\" nicht vorhanden.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Das Objektliteral gibt möglicherweise nur bekannte Eigenschaften an, \"{0}\" ist jedoch im Typ \"{1}\" nicht vorhanden. Wollten Sie \"{2}\" schreiben?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Die Eigenschaft \"{0}\" des Objektliterals weist implizit den Typ \"{1}\" auf.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekte, die Kurzformeigenschaften enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekte, die Verteilungszuweisungen enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", - "Octal_digit_expected_1178": "Es wurde eine Oktalzahl erwartet.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Oktale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig. Wenn dies als Escapesequenz vorgesehen war, verwenden Sie stattdessen die Syntax \"{0}\".", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Oktale Escapesequenzen sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Oktale Literale sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Ein Wert von \"{0}.{1}\" ist die Zeichenfolge \"{2}\", und der andere Wert wird als unbekannter numerischer Wert angenommen.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In einer for...in-Anweisung ist nur eine einzige Variablendeklaration zulässig.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In einer for...of-Anweisung ist nur eine einzige Variablendeklaration zulässig.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Nur eine void-Funktion kann mit dem Schlüsselwort \"new\" aufgerufen werden.", - "Only_ambient_modules_can_use_quoted_names_1035": "Nur Umgebungsmodule dürfen Namen in Anführungszeichen verwenden.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Nur die Module \"amd\" und \"system\" werden in Verbindung mit --{0} unterstützt.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Nur const-Arrays können mit \"--isolatedDeclarations\" abgeleitet werden.", - "Only_emit_d_ts_declaration_files_6014": "Geben Sie nur .d.ts-Deklarationsdateien aus.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Nur d.ts-Dateien und keine JavaScript-Dateien ausgeben.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Nur auf öffentliche und geschützte Methoden der Basisklasse kann über das Schlüsselwort \"super\" zugegriffen werden.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Der Operator \"{0}\" kann nicht auf den Typ \"{1}\" angewendet werden.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Der Operator \"{0}\" darf nicht auf die Typen \"{1}\" und \"{2}\" angewendet werden.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatoren dürfen innerhalb einer Zeichenklasse nicht gemischt werden. Verpacken Sie ihn stattdessen in eine geschachtelte Klasse.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Deaktivieren Sie bei der Bearbeitung ein Projekt von der Überprüfung mehrerer Projektverweise.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Die Option \"{0}={1}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Die Option \"{0}={1}\" ist veraltet und funktioniert in TypeScript {2} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{3}\" an, um diesen Fehler stumm zu schalten.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf FALSE oder NULL festgelegt werden.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf NULL festgelegt werden.", - "Option_0_can_only_be_specified_on_command_line_6266": "Die Option \"{0}\" kann nur in der Befehlszeile angegeben werden.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Die Option \"{0}\" kann nur verwendet werden, wenn die Option \"-inlineSourceMap\" oder \"-sourceMap\" angegeben wird.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Die Option \"{0}\" kann nur verwendet werden, wenn \"moduleResolution\" auf \"node16\", \"nodenext\" oder \"bundler\" festgelegt ist.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Die Option „{0}“ kann nur verwendet werden, wenn „module“ auf „preserve“, „commonjs“, „es2015“ oder höher festgelegt ist.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Die Option \"{0}\" kann nicht angegeben werden, wenn die Option \"jsx\" den Wert \"{1}\" aufweist.", - "Option_0_cannot_be_specified_with_option_1_5053": "Die Option \"{0}\" darf nicht zusammen mit der Option \"{1}\" angegeben werden.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Die Option \"{0}\" darf nicht ohne die Option \"{1}\" angegeben werden.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Die Option \"{0}\" kann nicht ohne die Option \"{1}\" oder \"{2}\" angegeben werden.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Die Option \"{0}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Die Option \"{0}\" ist veraltet und funktioniert in TypeScript {1} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{2}\" an, um diesen Fehler stumm zu schalten.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Die Option \"{0}\" ist redundant und darf nicht zusammen mit der Option \"{1}\" angegeben werden.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Die Option „allowImportingTsExtensions“ kann nur verwendet werden, wenn eine der Optionen „noEmit“, „emitDeclarationOnly“ oder „rewriteRelativeImportExtensions“ festgelegt ist.", - "Option_build_must_be_the_first_command_line_argument_6369": "Die Option \"--build\" muss das erste Befehlszeilenargument sein.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Die Option \"isolatedModules\" kann nur verwendet werden, wenn entweder die Option \"--module\" angegeben ist oder die Option \"target\" den Wert \"ES2015\" oder höher aufweist.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Die Option \"moduleResolution\" muss auf \"{0}\" festgelegt werden (oder nicht angegeben werden), wenn die Option \"module\" auf \"{1}\" festgelegt ist.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Die Option \"module\" muss auf \"{0}\" festgelegt werden, wenn die Option \"moduleResolution\" auf \"{1}\" festgelegt ist.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Die Option \"preserveConstEnums\" kann nicht deaktiviert werden, wenn \"{0}\" aktiviert ist.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Die Option \"project\" darf nicht mit Quelldateien in einer Befehlszeile kombiniert werden.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"moduleResolution\" auf \"classic\" festgelegt ist.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"module\" auf \"none\", \"system\" oder \"umd\" festgelegt ist.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Die Option \"verbatimModuleSyntax\" kann nicht verwendet werden, wenn \"module\" auf \"UMD\", \"AMD\" oder \"System\" festgelegt ist.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Die Optionen \"{0}\" und \"{1}\" können nicht kombiniert werden.", - "Options_Colon_6027": "Optionen:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Andere Ausgaben", - "Output_Formatting_6256": "Ausgabeformatierung", - "Output_compiler_performance_information_after_building_6615": "Ausgabe Compiler-Leistungsinformationen nach dem Erstellen.", - "Output_directory_for_generated_declaration_files_6166": "Ausgabeverzeichnis für erstellte Deklarationsdateien.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Die Ausgabedatei \"{0}\" wurde nicht aus der Quelldatei \"{1}\" erstellt.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"{1}\" angegeben wurde", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"--module\" als \"none\" angegeben wurde", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Geben Sie ausführlichere Compilerleistungsinformationen nach der Erstellung aus.", - "Overload_0_of_1_2_gave_the_following_error_2772": "Die Überladung {0} von {1} ({2}) hat den folgenden Fehler verursacht.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Überladungssignaturen müssen alle abstrakt oder nicht abstrakt sein.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Überladungssignaturen müssen alle umgebend oder nicht umgebend sein.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Überladungssignaturen müssen alle exportiert oder nicht exportiert sein.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Überladungssignaturen müssen alle optional oder erforderlich sein.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Überladungssignaturen müssen alle öffentlich, privat oder geschützt sein.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Der Parameter \"{0}\" darf nicht auf den anschließend deklarierten Bezeichner \"{1}\" verweisen.", - "Parameter_0_cannot_reference_itself_2372": "Der Parameter \"{0}\" kann nicht auf sich selbst verweisen.", - "Parameter_0_implicitly_has_an_1_type_7006": "Der Parameter \"{0}\" weist implizit einen Typ \"{1}\" auf.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Der Parameter \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Der Parameter \"{0}\" befindet sich nicht an der gleichen Position wie der Parameter \"{1}\".", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Der Parameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Der Parameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Der Parameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Der Parameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Der Parameter \"{0}\" der Indexsignatur aus der exportierten Schnittstelle weist den Namen \"{1}\" aus dem privaten Modul \"{2}\" auf oder verwendet diesen.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Der Parameter \"{0}\" der Indexsignatur aus der exportierten Schnittstelle weist den privaten Namen \"{1}\" auf oder verwendet diesen.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Der Parameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Der Parameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Der Parameter darf kein Fragezeichen und keinen Initialisierer aufweisen.", - "Parameter_declaration_expected_1138": "Eine Parameterdeklaration wurde erwartet.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Der Parameter weist einen Namen, aber keinen Typ auf. Meinten Sie \"{0}: {1}\"?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametermodifizierer können nur in TypeScript-Dateien verwendet werden.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Der Parameter muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Im Strict-Modus analysieren und \"use strict\" für jede Quelldatei ausgeben.", - "Part_of_files_list_in_tsconfig_json_1409": "Teil der Liste \"files\" in tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Das Muster \"{0}\" darf höchstens ein Zeichen \"*\" aufweisen.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Leistungsdaten zum zeitlichen Ablauf sind für \"--diagnostics\" oder \"--extendedDiagnostics\" in dieser Sitzung nicht verfügbar. Eine native Implementierung der Webleistungs-API wurde nicht gefunden.", - "Platform_specific_6912": "Plattformspezifisch", - "Prefix_0_with_an_underscore_90025": "\"{0}\" einen Unterstrich voranstellen", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Verwenden Sie für alle falschen Eigenschaftendeklarationen das Präfix \"declare\".", - "Prefix_all_unused_declarations_with_where_possible_95025": "Alle nicht verwendeten Deklarationen nach Möglichkeit mit dem Präfix \"_\" versehen", - "Prefix_with_declare_95094": "Präfix \"declare\" voranstellen", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Behalten Sie nicht verwendete importierte Werte in der JavaScript-Ausgabe bei, die andernfalls entfernt werden würden.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Drucken Sie alle Dateien, die während der Kompilierung gelesen wurden.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Während der Kompilierung gelesene Dateien drucken, einschließlich der Gründe für ihre Aufnahme.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Hiermit werden die Namen der Dateien und der Grund dafür ausgegeben, dass die Dateien in der Kompilierung enthalten sind.", - "Print_names_of_files_part_of_the_compilation_6155": "Drucknamen des Dateiteils der Kompilierung.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Hiermit werden Namen der Dateien ausgegeben, die Teil der Kompilierung sind. Anschließend wird die Verarbeitung beendet.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Drucknamen des generierten Dateiteils der Kompilierung.", - "Print_the_compiler_s_version_6019": "Die Version des Compilers ausgeben.", - "Print_the_final_configuration_instead_of_building_1350": "Hiermit wird anstelle eines Builds die endgültige Konfiguration ausgegeben.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Drucken Sie die Namen der ausgegebenen Dateien nach einer Kompilierung.", - "Print_this_message_6017": "Diese Nachricht ausgeben.", - "Private_accessor_was_defined_without_a_getter_2806": "Die private Zugriffsmethode wurde ohne Getter definiert.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Das private Feld \"{0}\" muss in einer einschließenden Klasse deklariert werden.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Private Bezeichner sind in Variablendeklarationen nicht zulässig.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Private Bezeichner sind außerhalb des Textes von Klassen nicht zulässig.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Private Bezeichner sind nur in Klassentexten zulässig und dürfen nur als Teil einer Klassenmitgliedsdeklaration, eines Eigenschaftszugriffs oder auf der linken Seite eines in-Ausdrucks verwendet werden.", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Private Bezeichner sind nur verfügbar, wenn als Ziel ECMAScript 2015 oder höher verwendet wird.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Private Bezeichner können nicht als Parameter verwendet werden.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Für einen Typparameter kann nicht auf den privaten oder geschützten Member \"{0}\" zugegriffen werden.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt \"{0}\" kann nicht erstellt werden, weil die Abhängigkeit \"{1}\" Fehler enthält.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Das Projekt \"{0}\" kann nicht erstellt werden, weil die zugehörige Abhängigkeit \"{1}\" nicht erstellt wurde.", - "Project_0_is_being_forcibly_rebuilt_6388": "Die Neuerstellung des Projekts \"{0}\" wird erzwungen.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Das Projekt \"{0}\" ist veraltet, da die buildinfo-Datei \"{1}\" darauf hinweist, dass die Datei \"{2}\" die Stammdatei der Kompilierung war, es jetzt jedoch nicht mehr ist.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" darauf hinweist, dass das Programm Fehler melden muss.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" angibt, dass einige der Änderungen nicht ausgegeben wurden.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" auf eine Änderung in compilerOptions hinweist.", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe \"{1}\" älter ist als die Eingabe \"{2}\"", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt \"{0}\" ist veraltet, weil die Ausgabedatei \"{1}\" nicht vorhanden ist.", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe für das Projekt mit Version {1} generiert wurde, die sich von der aktuellen Version {2} unterscheidet.", - "Project_0_is_up_to_date_6361": "Projekt \"{0}\" ist auf dem neuesten Stand.", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt \"{0}\" ist auf dem neuesten Stand, weil die neueste Eingabe \"{1}\" älter ist als die Ausgabe \"{2}\".", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Das Projekt \"{0}\" ist aktuell, muss jedoch Zeitstempel von Ausgabedateien aktualisieren, die älter als Eingabedateien sind.", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt \"{0}\" ist mit .d.ts-Dateien aus den zugehörigen Abhängigkeiten auf dem neuesten Stand.", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Projektverweise dürfen keinen kreisförmigen Graphen bilden. Zyklus erkannt: {0}", - "Projects_6255": "Projekte", - "Projects_in_this_build_Colon_0_6355": "Projekte in diesem Build: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Eigenschaften mit dem Accessormodifizierer sind nur für ECMAScript 2015 und höher verfügbar.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Die Eigenschaft \"{0}\" darf keinen Initialisierer aufweisen, weil sie als abstrakt markiert ist.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Die Eigenschaft \"{0}\" stammt aus einer Indexsignatur. Der Zugriff muss daher mit [\"{0}\"] erfolgen.", - "Property_0_does_not_exist_on_type_1_2339": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Die Eigenschaft \"{0}\" existiert nicht für Typ \"{1}\". Meinten Sie \"{2}\"?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Möchten Sie stattdessen auf den statischen Member \"{2}\" zugreifen?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{2}\" oder höher.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Ändern Sie die Compileroption \"lib\" so, dass sie \"dom\" enthält.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist in einem statischen Klassenblock nicht definitiv zugewiesen.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist im Konstruktor nicht definitiv zugewiesen.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem get-Accessor eine Parametertypanmerkung fehlt.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem set-Accessor eine Parametertypanmerkung fehlt.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, aber für den zugehörigen get-Accessor kann möglicherweise ein besserer Typ aus der Syntax abgeleitet werden.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, aber für den zugehörigen set-Accessor kann möglicherweise ein besserer Typ aus der Syntax abgeleitet werden.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Die Eigenschaft \"{0}\" im Typ \"{1}\" kann nicht der gleichen Eigenschaft in Basistyp \"{2}\" zugewiesen werden.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Die Eigenschaft \"{0}\" im Typ \"{1}\" kann dem Typ \"{2}\" nicht zugewiesen werden.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Die Eigenschaft \"{0}\" im Typ \"{1}\" verweist auf einen anderen Member, auf den nicht aus Typ \"{2}\" zugegriffen werden kann.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "Die Eigenschaft \"{0}\" ist deklariert, aber ihr Wert wird nie gelesen.", - "Property_0_is_incompatible_with_index_signature_2530": "Die Eigenschaft \"{0}\" ist nicht mit der Indexsignatur kompatibel.", - "Property_0_is_missing_in_type_1_2324": "Die Eigenschaft \"{0}\" fehlt im Typ \"{1}\".", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Die Eigenschaft \"{0}\" fehlt im Typ \"{1}\", aber ist im Typ \"{2}\" erforderlich.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Auf die Eigenschaft \"{0}\" kann außerhalb der Klasse \"{1}\" nicht zugegriffen werden, weil sie einen privaten Bezeichner aufweist.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" optional, im Typ \"{2}\" aber erforderlich.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "Die Eigenschaft \"{0}\" ist privat. Auf sie kann nur innerhalb der Klasse \"{1}\" zugegriffen werden.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" privat, im Typ \"{2}\" hingegen nicht.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Die Eigenschaft \"{0}\" ist geschützt und nur über eine Instanz der Klasse \"{1}\" zugänglich. Dies ist eine Instanz der Klasse \"{2}\".", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Die Eigenschaft \"{0}\" ist geschützt. Auf sie kann nur innerhalb der Klasse \"{1}\" und ihrer Unterklassen zugegriffen werden.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Die Eigenschaft \"{0}\" ist geschützt, Typ \"{1}\" ist aber keine von \"{2}\" abgeleitete Klasse.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" geschützt, im Typ \"{2}\" aber öffentlich.", - "Property_0_is_used_before_being_assigned_2565": "Die Eigenschaft \"{0}\" wird vor ihrer Zuweisung verwendet.", - "Property_0_is_used_before_its_initialization_2729": "Die Eigenschaft \"{0}\" wird vor ihrer Initialisierung verwendet.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" möglicherweise nicht vorhanden. Meinten Sie \"{2}\"?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Die Eigenschaft \"{0}\" des JSX-Verteilungsattributs kann nicht der Zieleigenschaft zugewiesen werden.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Die Eigenschaft \"{0}\" des exportierten anonymen Klassentyps ist unter Umständen nicht privat oder geschützt.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Die Eigenschaft \"{0}\" von Typ \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", - "Property_0_was_also_declared_here_2733": "Die Eigenschaft \"{0}\" wurde hier ebenfalls deklariert.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Die Eigenschaft \"{0}\" überschreibt die Basiseigenschaft in \"{1}\". Wenn dies beabsichtigt ist, fügen Sie einen Initialisierer hinzu. Andernfalls fügen Sie einen declare-Modifizierer hinzu, oder entfernen Sie die redundante Deklaration.", - "Property_assignment_expected_1136": "Die Zuweisung einer Eigenschaft wurde erwartet.", - "Property_destructuring_pattern_expected_1180": "Ein Eigenschaftendestrukturierungsmuster wurde erwartet.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Die Eigenschaft muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", - "Property_or_signature_expected_1131": "Eine Eigenschaft oder Signatur wurde erwartet.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Der Eigenschaftswert kann nur ein Zeichenfolgenliteral, ein numerisches Literal, \"true\", \"false\", \"NULL\", ein Objektliteral oder ein Arrayliteral sein.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Bieten Sie vollständige Unterstützung für Iterablen in \"for-of\", Verteilung und Destrukturierung mit dem Ziel \"ES5\".", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Der qualifizierte Name \"{0}\" ist ohne Voranstellung von \"@param {object} {1}\" nicht zulässig.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Löst einen Fehler aus, wenn ein Funktionsparameter nicht gelesen wird.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Fehler für Ausdrücke und Deklarationen mit einem impliziten any-Typ auslösen.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Fehler für \"this\"-Ausdrücke mit einem impliziten any-Typ auslösen.", - "Range_out_of_order_in_character_class_1517": "Der Bereich in der Zeichenklasse liegt außerhalb der Reihenfolge.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Wenn \"{0}\" aktiviert ist, erfordert das erneute Exportieren eines Typs die Verwendung von \"export type\".", - "React_components_cannot_include_JSX_namespace_names_2639": "React-Komponenten dürfen keine JSX-Namespacenamen enthalten.", - "Recommended_Options_6294": "Empfohlene Optionen", - "Redirect_output_structure_to_the_directory_6006": "Die Ausgabestruktur in das Verzeichnis umleiten.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Verringern Sie die Anzahl der Projekte, die von TypeScript automatisch geladen werden.", - "Referenced_project_0_may_not_disable_emit_6310": "Beim referenzierten Projekt \"{0}\" darf nicht die Ausgabe deaktiviert werden.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Das referenzierte Projekt \"{0}\" muss für die Einstellung \"composite\" den Wert TRUE aufweisen.", - "Referenced_via_0_from_file_1_1400": "Referenziert über \"{0}\" aus der Datei \"{1}\"", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Erwägen Sie, dem Importpfad eine Erweiterung hinzuzufügen.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Meinten Sie \"{0}\"?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Entfernen Sie eine Liste von Verzeichnissen aus dem Überwachungsvorgang.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Entfernen Sie eine Liste von Dateien aus der Verarbeitung des Überwachungsmodus.", - "Remove_all_unnecessary_override_modifiers_95163": "Alle nicht benötigten override-Modifizierer entfernen", - "Remove_all_unnecessary_uses_of_await_95087": "Alle nicht benötigten Verwendungen von \"await\" entfernen", - "Remove_all_unreachable_code_95051": "Gesamten nicht erreichbaren Code entfernen", - "Remove_all_unused_labels_95054": "Alle nicht verwendeten Bezeichnungen entfernen", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Entfernen Sie die geschweiften Klammern aus dem Text aller Pfeilfunktionen mit entsprechenden Problemen.", - "Remove_braces_from_arrow_function_95060": "Geschweifte Klammern aus Pfeilfunktion entfernen", - "Remove_braces_from_arrow_function_body_95112": "Geschweifte Klammern aus Pfeilfunktionstext entfernen", - "Remove_import_from_0_90005": "Import aus \"{0}\" entfernen", - "Remove_override_modifier_95161": "override-Modifizierer entfernen", - "Remove_parentheses_95126": "Klammern entfernen", - "Remove_template_tag_90011": "Vorlagentag entfernen", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Entfernen Sie die Obergrenze von 20 MB für die Gesamtgröße des Quellcodes für JavaScript-Dateien auf dem TypeScript-Sprachserver.", - "Remove_type_from_import_declaration_from_0_90055": "„type“ aus Importdeklaration aus „{0}“ entfernen", - "Remove_type_from_import_of_0_from_1_90056": "„type“ aus Import von „{0}“ aus „{1}“ entfernen", - "Remove_type_parameters_90012": "Typparameter entfernen", - "Remove_unnecessary_await_95086": "Unnötige Vorkommen von \"await\" entfernen", - "Remove_unreachable_code_95050": "Nicht erreichbaren Code entfernen", - "Remove_unused_declaration_for_Colon_0_90004": "Nicht verwendete Deklaration für \"{0}\" entfernen", - "Remove_unused_declarations_for_Colon_0_90041": "Nicht verwendete Deklarationen für \"{0}\" entfernen", - "Remove_unused_destructuring_declaration_90039": "Nicht verwendete Destrukturierungsdeklaration entfernen", - "Remove_unused_label_95053": "Nicht verwendete Bezeichnung entfernen", - "Remove_variable_statement_90010": "Variablenanweisung entfernen", - "Rename_param_tag_name_0_to_1_95173": "Tagnamen \"@param\" \"{0}\" in \"{1}\" umbenennen", - "Replace_0_with_Promise_1_90036": "\"{0}\" durch \"Promise<{1}>\" ersetzen", - "Replace_all_unused_infer_with_unknown_90031": "Alle nicht verwendeten Vorkommen von \"infer\" durch \"unknown\" ersetzen", - "Replace_import_with_0_95015": "Ersetzen Sie den Import durch \"{0}\".", - "Replace_infer_0_with_unknown_90030": "\"infer {0}\" durch \"unknown\" ersetzen", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Fehler melden, wenn nicht alle Codepfade in der Funktion einen Wert zurückgeben.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Für FallTrough-Fälle in switch-Anweisung Fehler melden.", - "Report_errors_in_js_files_8019": "Fehler in .js-Dateien melden.", - "Report_errors_on_unused_locals_6134": "Fehler für nicht verwendete lokale Variablen melden.", - "Report_errors_on_unused_parameters_6135": "Fehler für nicht verwendete Parameter melden.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Fordern Sie eine ausreichende Anmerkung zu Exporten an, damit andere Tools Deklarationsdateien trivial generieren können.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Nicht deklarierte Eigenschaften aus Indexsignaturen müssen Elementzugriffe verwenden.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Erforderliche Typparameter dürfen nicht auf optionale Typparameter folgen.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Die Auflösung für das Modul \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Die Auflösung für die Typreferenzanweisung \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Fehler beim Auflösen des nicht relativen Namens. Es wird versucht, moderne Funktionen zur Knotenauflösung zu deaktivieren, um festzustellen, ob die npm-Bibliothek eine Konfigurationsaktualisierung erfordert.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Fehler beim Auflösen des nicht relativen Namens. Mit \"--moduleResolution bundler\" wird versucht festzustellen, ob das Projekt möglicherweise aktualisiert werden muss.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "\"keyof\" darf nur in Eigenschaftennamen mit Zeichenfolgenwert aufgelöst werden (keine Ziffern oder Symbole).", - "Resolved_under_condition_0_6414": "Aufgelöst unter Bedingung \"{0}\".", - "Resolving_in_0_mode_with_conditions_1_6402": "Wird im {0}-Modus mit Bedingungen \"{1}\" aufgelöst.", - "Resolving_module_0_from_1_6086": "======== Das Modul \"{0}\" aus \"{1}\" wird aufgelöst. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Der Modulname \"{0}\" relativ zur Basis-URL \"{1}\"–\"{2}\" wird aufgelöst.", - "Resolving_real_path_for_0_result_1_6130": "Der tatsächliche Pfad für \"{0}\" wird aufgelöst, Ergebnis \"{1}\".", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist \"{2}\". ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist nicht festgelegt. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist \"{1}\". ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist nicht festgelegt. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Die Typverweisdirektive für das Programm, das benutzerdefinierte typeRoots angibt, wird aufgelöst. Lookup im Ordner \"node_modules\" wird übersprungen.", - "Resolving_with_primary_search_path_0_6121": "Die Auflösung erfolgt mit dem primären Suchpfad \"{0}\".", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Der rest-parameter \"{0}\" weist implizit einen Typ \"any[]\" auf.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Der rest-Parameter \"{0}\" weist implizit einen Typ \"any[]\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "Rest_types_may_only_be_created_from_object_types_2700": "Rest-Typen dürfen nur aus object-Typen erstellt werden.", - "Return_type_annotation_circularly_references_itself_2577": "Die Rückgabetypanmerkung verweist zirkulär auf sich selbst.", - "Return_type_must_be_inferred_from_a_function_95149": "Der Rückgabetyp muss aus einer Funktion abgeleitet werden.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Der Rückgabetyp der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Der Rückgabetyp der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Der Rückgabetyp der Konstruktorsignatur muss dem Instanztyp der Klasse zugewiesen werden können.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Der Rückgabetyp der Indexsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Der Rückgabetyp der Indexsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Der Rückgabetyp der Methode aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Der Rückgabetyp der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Die Auflösung des Moduls „{0}“ aus „{1}\" im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.", - "Rewrite_all_as_indexed_access_types_95034": "Alle als indizierte Zugriffstypen neu schreiben", - "Rewrite_as_the_indexed_access_type_0_90026": "Als indizierten Zugriffstyp \"{0}\" neu schreiben", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Schreiben Sie die Dateiendungen '.ts', '.tsx', '.mts' und '.cts' in relativen Importpfaden in ihren JavaScript-Äquivalenten in den Ausgabedateien um.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Rechter Operand von ?? ist nicht erreichbar, weil der linke Operand nie \"NULLISH\" ist.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Das Stammverzeichnis kann nicht ermittelt werden. Die primären Suchpfade werden übersprungen.", - "Root_file_specified_for_compilation_1427": "Für die Kompilierung angegebene Stammdatei", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATEGIE", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Speichern Sie die .tsbuildinfo-Dateien, um eine inkrementelle Kompilierung von Projekten zuzulassen.", - "Saw_non_matching_condition_0_6405": "Die nicht übereinstimmende Bedingung \"{0}\" wurde angezeigt.", - "Scoped_package_detected_looking_in_0_6182": "Bereichsbezogenes Paket erkannt. In \"{0}\" wird gesucht", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Alle node_modules-Vorgängerverzeichnisse werden nach Fallbackerweiterungen durchsucht: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Alle node_modules-Vorgängerverzeichnisse werden nach bevorzugten Erweiterungen durchsucht: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Siehe auch https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "Die Auswahl umfasst keine gültigen Anweisungen.", - "Selection_is_not_a_valid_type_node_95133": "Die Auswahl ist kein gültiger Typknoten.", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Legen Sie die JavaScript-Sprachversion für das ausgegebene JavaScript fest, und schließen Sie kompatible Bibliotheksdeklarationen ein.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Legen Sie die Sprache des Messagings von TypeScript fest. Dies wirkt sich nicht auf die Ausgabe aus.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Legen Sie die Option \"module\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.", - "Set_the_newline_character_for_emitting_files_6659": "Legen Sie das Zeilenumbruchzeichen für Ausgabedateien fest.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Legen Sie die Option \"target\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.", - "Setters_cannot_return_a_value_2408": "Setter können keinen Wert zurückgeben.", - "Show_all_compiler_options_6169": "Alle Compileroptionen anzeigen.", - "Show_diagnostic_information_6149": "Diagnoseinformationen anzeigen.", - "Show_verbose_diagnostic_information_6150": "Ausführliche Diagnoseinformationen anzeigen.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Anzeigen, was erstellt würde (oder gelöscht würde, wenn mit \"--clean\" angegeben)", - "Signature_0_must_be_a_type_predicate_1224": "Die Signatur \"{0}\" muss ein Typprädikat sein.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Signaturdeklarationen können nur in TypeScript-Dateien verwendet werden.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Überspringen Sie die Erstellung von Downstreamprojekten bei einem Fehler im Upstreamprojekt.", - "Skip_type_checking_all_d_ts_files_6693": "Überspringen Sie die Typüberprüfung aller .d.ts-Dateien.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Überspringen Sie die Typüberprüfung von .d.ts-Dateien, die in TypeScript enthalten sind.", - "Skip_type_checking_of_declaration_files_6012": "Überspringen Sie die Typüberprüfung von Deklarationsdateien.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Das Erstellen von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" einen Fehler aufweist.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Das Kompilieren von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" nicht erstellt wurde.", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Modul \"{0}\", das wie ein absoluter URI aussieht, wird übersprungen, Zieldateitypen: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Quelle aus referenziertem Projekt \"{0}\", da \"{1}\" angegeben wurde", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Quelle aus referenziertem Projekt \"{0}\", da \"--module\" als \"none\" angegeben wurde", - "Source_has_0_element_s_but_target_allows_only_1_2619": "Die Quelle weist {0} Element(e) auf, aber das Ziel lässt nur {1} zu.", - "Source_has_0_element_s_but_target_requires_1_2618": "Die Quelle weist {0} Element(e) auf, aber das Ziel erfordert {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Die Quelle weist keine Übereinstimmung für das erforderliche Element an Position {0} im Ziel auf.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Die Quelle weist keine Übereinstimmung für das variadic-Element an Position {0} im Ziel auf.", - "Specify_ECMAScript_target_version_6015": "Geben Sie die ECMAScript-Zielversion an.", - "Specify_JSX_code_generation_6080": "Geben Sie die JSX-Codegenerierung an.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Geben Sie eine Datei an, die alle Ausgaben in einer JavaScript-Datei bündelt. Wenn „declaration“ TRUE ist, wird auch eine Datei festgelegt, die alle „.d.ts“-Ausgaben bündelt.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Geben Sie eine Liste von Globmustern an, die mit Dateien übereinstimmen, die in die Kompilierung einbezogen werden sollen.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Geben Sie eine Liste der einzuschließenden Sprachdienst-Plug-Ins an.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Geben Sie einen Satz gebündelter Bibliotheksdeklarationsdateien an, die die Ziellaufzeitumgebung beschreiben.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Geben Sie einen Satz von Einträgen an, die Importe an zusätzliche Lookup-Speicherorte neu zuordnen.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Geben Sie ein Objektarray an, das Pfade für Projekte angibt. Wird in Projekt verweisen verwendet.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Geben Sie einen Ausgabeordner für alle ausgegebenen Dateien an.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Geben Sie das Ausgabe-/Überprüfungsverhalten für Importe an, die nur für Typen verwendet werden.", - "Specify_file_to_store_incremental_compilation_information_6380": "Datei zum Speichern inkrementeller Kompilierungsinformationen angeben", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Geben Sie an, wie TypeScript eine Datei aus einem angegebenen Modulspezifizierer sucht.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Geben Sie an, wie Verzeichnisse auf Systemen überwacht werden, für die eine rekursive Dateiüberwachungsfunktion fehlt.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Geben Sie an, wie der TypeScript-Überwachungsmodus funktioniert.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Geben Sie Bibliotheksdateien an, die in die Kompilierung eingeschlossen werden sollen.", - "Specify_module_code_generation_6016": "Geben Sie die Modulcodegenerierung an.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Geben Sie den Modulspezifizierer an, der zum Importieren der JSX-Factoryfunktionen verwendet wird, wenn Sie „jsx: react-jsx*“ verwenden.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Geben Sie mehrere Ordner an, die als „./node_modules/@types“ fungieren.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Geben Sie einen oder mehrere Pfad- oder Knotenmodulverweise auf Basiskonfigurationsdateien an, von denen Einstellungen geerbt werden.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Geben Sie Optionen für den automatischen Erwerb von Deklarationsdateien an.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Geben Sie die Strategie zum Erstellen einer Abrufüberwachung an, wenn eine Erstellung mit Dateisystemereignissen nicht erfolgreich ist: \"FixedInterval\" (Standardwert), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Geben Sie die Strategie für die Verzeichnisüberwachung auf Plattformen an, die eine rekursive Überwachung nativ nicht unterstützen: \"UseFsEvents\" (Standardwert), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Geben Sie die Strategie für die Dateiüberwachung an: \"FixedPollingInterval\" (Standardwert), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Geben Sie den JSX-Fragmentverweis an, der für Fragmente verwendet wird, wenn die React JSX-Ausgabe als Ziel verwendet wird, z. B. \"React.Fragment\" oder \"Fragment\".", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Geben Sie die JSX-Factoryfunktion an, die für eine react-JSX-Ausgabe verwendet werden soll, z. B. \"React.createElement\" oder \"h\".", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Geben Sie die JSX-Factoryfunktion an, die verwendet wird, wenn Sie die JSX-Ausgabe „react“ als Ziel verwenden, z. B. „React.createElement“ oder „h“.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Geben Sie die jsxFragmentFactory-Funktion an, die bei Verwendung des JSX-Ausgabeziels \"react\" mit der Compileroption \"jsxFactory\" verwendet werden soll, z. B. \"Fragment\".", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Geben Sie das Basisverzeichnis zum Auflösen nicht relativer Modulnamen an.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Geben Sie die Zeilenendesequenz an, die beim Ausgeben von Dateien verwendet werden soll: \"CRLF\" (DOS) oder \"LF\" (Unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Geben Sie den Speicherort an, an dem der Debugger TypeScript-Dateien ermitteln soll, anstatt Quellspeicherorte zu verwenden.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Geben Sie den Speicherort an, an dem der Debugger Zuordnungsdateien ermitteln soll, anstatt generierte Speicherorte zu verwenden.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Geben Sie die maximale Ordnertiefe an, die zum Überprüfen von JavaScript-Dateien aus „node_modules“ verwendet wird. Gilt nur für „allowJs“.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Geben Sie den Modulspezifizierer an, aus dem die Factoryfunktionen \"jsx\" und \"jsxs\" importiert werden sollen, z. B. \"react\".", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Geben Sie das Objekt an, das für „createElement“ aufgerufen wird. Dies gilt nur, wenn die JSX-Ausgabe „react“ als Ziel verwendet wird.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Geben Sie das Ausgabeverzeichnis für generierte Deklarationsdateien an.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Geben Sie den Pfad zu inkrementelle Kompilierungsdateien .tsbuildinfo an.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Geben Sie das Stammverzeichnis der Eingabedateien an. Verwenden Sie diese Angabe, um die Ausgabeverzeichnisstruktur mithilfe von \"-outDir\" zu steuern.", - "Specify_the_root_folder_within_your_source_files_6690": "Geben Sie den Stammordner in den Quelldateien an.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Geben Sie den Stammpfad für Debugger an, um den Verweisquellcode zu suchen.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Geben Sie Typpaketnamen an, die eingeschlossen werden sollen, ohne in einer Quelldatei referenziert zu werden.", - "Specify_what_JSX_code_is_generated_6646": "Geben Sie an, welcher JSX-Code generiert wird.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Geben Sie an, welchen Ansatz der Watcher verwenden soll, wenn auf dem System keine nativen Dateiüberwachungen mehr vorhanden sind.", - "Specify_what_module_code_is_generated_6657": "Geben Sie an, welcher Modulcode generiert wird.", - "Split_all_invalid_type_only_imports_1367": "Alle ungültigen reinen Typenimporte teilen", - "Split_into_two_separate_import_declarations_1366": "In zwei separate Importdeklarationen teilen", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Der Verteilungsoperator in new-Ausdrücken ist nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.", - "Spread_types_may_only_be_created_from_object_types_2698": "Spread-Typen dürfen nur aus object-Typen erstellt werden.", - "Starting_compilation_in_watch_mode_6031": "Kompilierung im Überwachungsmodus wird gestartet...", - "Statement_expected_1129": "Eine Anweisung wurde erwartet.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Anweisungen sind in Umgebungskontexten unzulässig.", - "Static_members_cannot_reference_class_type_parameters_2302": "Statische Member dürfen nicht auf Klassentypparameter verweisen.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Die statische Eigenschaft \"{0}\" steht in Konflikt mit der integrierten Eigenschaft \"Function.{0}\" der Konstruktorfunktion \"{1}\".", - "Stricter_Typechecking_Options_6292": "Strengere Typprüfungsoptionen", - "String_literal_expected_1141": "Ein Zeichenfolgenliteral wurde erwartet.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Import- und Exportnamen von Zeichenfolgenliteralen werden nicht unterstützt, wenn das Flag \"--module\" auf \"es2015\" oder \"es2020\" festgelegt ist.", - "String_literal_with_double_quotes_expected_1327": "Ein Zeichenfolgenliteral mit doppelten Anführungszeichen wird erwartet.", - "Style_Options_6293": "Stiloptionen", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Fehler und Nachrichten farbig und mit Kontext formatieren (experimentell).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Subpatternkennzeichen müssen vorhanden sein, wenn ein Minuszeichen vorhanden ist.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Nachfolgende Eigenschaftendeklarationen müssen den gleichen Typ aufweisen. Die Eigenschaft \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Nachfolgende Variablendeklarationen müssen den gleichen Typ aufweisen. Die Variable \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Die Ersetzung \"{0}\" für das Muster \"{1}\" weist einen falschen Typ auf. Erwartet wurde \"string\", abgerufen wurde \"{2}\".", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Die Ersetzung \"{0}\" im Muster \"{1}\" darf höchstens ein Zeichen \"*\" aufweisen.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Die Ersetzung für das Muster \"{0}\" muss ein Array sein.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Ersetzungen für das Muster \"{0}\" dürfen kein leeres Array sein.", - "Successfully_created_a_tsconfig_json_file_6071": "Eine Datei \"tsconfig.json\" wurde erfolgreich erstellt.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Aufrufe von \"super\" sind außerhalb von Konstruktoren oder in geschachtelten Funktionen innerhalb von Konstruktoren unzulässig.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Übermäßige Eigenschaftenüberprüfungen für Objektliterale unterdrücken.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "noImplicitAny-Fehler für die Indizierung von Objekten unterdrücken, denen Indexsignaturen fehlen.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Unterdrücken Sie „noImplicitAny“-Fehler beim Indizieren von Objekten ohne Indexsignaturen.", - "Switch_each_misused_0_to_1_95138": "Jedes falsch verwendete {0}-Element in \"{1}\" ändern", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Rufen Sie Rückrufe synchron auf, und aktualisieren Sie den Status von Verzeichnisüberwachungen auf Plattformen, die rekursive Überwachung nicht nativ unterstützen.", - "Syntax_Colon_0_6023": "Syntax: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Das Tag \"{0}\" erwartet mindestens {1} Argumente, von der JSX-Factory \"{2}\" werden aber höchstens {3} bereitgestellt.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Mit Tags versehene Vorlagenausdrücke sind in einer optionalen Kette nicht zulässig.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Das Ziel erlaubt nur {0} Element(e), aber die Quelle kann mehr aufweisen.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Das Ziel erfordert {0} Element(e), aber die Quelle kann weniger aufweisen.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Die Zielsignatur stellt zu wenige Argumente bereit. Erwartete {0} oder mehr, erhielt aber {1}.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Der Modifizierer \"{0}\" kann nur in TypeScript-Dateien verwendet werden.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Der Operator \"{0}\" darf nicht den Typ \"symbol\" angewendet werden.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Der Operator \"{0}\" ist für boolesche Typen unzulässig. Verwenden Sie stattdessen ggf. \"{1}\".", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Die Eigenschaft \"{0}\" eines asynchronen Iterators muss eine Methode sein.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "Die Eigenschaft \"{0}\" eines Iterators muss eine Methode sein.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Der Typ \"Object\" kann nur wenigen anderen Typen zugewiesen werden. Wollten Sie stattdessen den Typ \"any\" verwenden?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Das Unicode-Flag (u) und das Unicode Sets-Flag (v) können nicht gleichzeitig festgelegt werden.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Auf das Objekt „arguments“ darf in einer Pfeilfunktion in ES5 nicht verwiesen werden. Verwenden Sie ggf. einen Standardfunktionsausdruck.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Auf das Objekt „arguments“ darf in einer asynchronen Funktion oder Methode in ES5 nicht verwiesen werden. Verwenden Sie ggf. eine Standardfunktion oder -methode.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Der Text einer \"if\"-Anweisung kann keine leere Anweisung sein.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Der Aufruf wäre für diese Implementierung erfolgreich, aber die Implementierungssignaturen von Überladungen sind nicht extern sichtbar.", - "The_character_set_of_the_input_files_6163": "Der Zeichensatz der Eingabedateien.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Die enthaltende Pfeilfunktion erfasst den globalen Wert von \"this\".", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Der beinhaltende Funktions- oder Modulkörper ist zu groß für eine Ablaufsteuerungsanalyse.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Die aktuelle Datei ist ein CommonJS-Modul und kann „await“ nicht auf der obersten Ebene verwenden.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Die aktuelle Datei ist ein CommonJS-Modul, dessen Importe \"require\"-Aufrufe generieren. Die Datei, auf die verwiesen wird, ist jedoch ein ECMAScript-Modul und kann nicht mit \"require\" importiert werden. Erwägen Sie stattdessen, einen dynamischen 'import(\"{0}\")'-Aufruf zu schreiben.", - "The_current_host_does_not_support_the_0_option_5001": "Der aktuelle Host unterstützt die Option \"{0}\" nicht.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Die Deklaration von \"{0}\", die Sie wahrscheinlich verwenden wollten, ist hier definiert.", - "The_declaration_was_marked_as_deprecated_here_2798": "Die Deklaration wurde hier als veraltet markiert.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Der erwartete Typ stammt aus der Eigenschaft \"{0}\", die hier für den Typ \"{1}\" deklariert wird.", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Der erwartete Typ stammt aus dem Rückgabetyp dieser Signatur.", - "The_expected_type_comes_from_this_index_signature_6501": "Der erwartete Typ stammt aus dieser Indexsignatur.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Der Ausdruck einer Exportzuweisung muss ein Bezeichner oder ein qualifizierter Name in einem Umgebungskontext sein.", - "The_file_is_in_the_program_because_Colon_1430": "Die Datei befindet sich aus folgenden Gründen im Programm:", - "The_files_list_in_config_file_0_is_empty_18002": "Die Liste \"files\" in der Konfigurationsdatei \"{0}\" ist leer.", - "The_first_export_default_is_here_2752": "Der erste Exportstandard befindet sich hier.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Der erste Parameter der \"then\"-Methode einer Zusage muss ein Rückruf sein.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Der globale Typ \"JSX.{0}\" darf nur eine Eigenschaft aufweisen.", - "The_implementation_signature_is_declared_here_2750": "Die Implementierungssignatur wird hier deklariert.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Die Meta-Eigenschaft „import.meta“ ist in Dateien, die in der CommonJS-Ausgabe erstellt werden, nicht zulässig.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Die Metaeigenschaft „import.meta“ ist nur zulässig, wenn die Option „--module“ „es2020“, „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“ oder „nodenext“ lautet.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Der abgeleitete Typ von \"{0}\" kann nicht ohne einen Verweis auf \"{1}\" benannt werden. Eine Portierung ist wahrscheinlich nicht möglich. Eine Typanmerkung ist erforderlich.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ mit zyklischer Struktur, die nicht trivial serialisiert werden kann. Es ist eine Typanmerkung erforderlich.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ \"{1}\", auf den nicht zugegriffen werden kann. Eine Typanmerkung ist erforderlich.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Der abgeleitete Typ dieses Knotens überschreitet die maximale Länge, die vom Compiler serialisiert wird. Eine explizite Typanmerkung ist erforderlich.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Der Initialisierer einer „using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.dispose]()“ sein oder „null“ oder „undefined“ sein.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Der Initialisierer einer „await using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.asyncDispose]()“ oder „[Symbol.dispose]()“ sein oder „null“ oder „undefined“ sein.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in mehreren Bestandteilen vorhanden und in einigen davon privat ist.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in einigen Bestandteilen widersprüchliche Typen aufweist.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Das Schlüsselwort \"intrinsic\" darf nur zum Deklarieren von vom Compiler bereitgestellten intrinsischen Typen verwendet werden.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Um JSX-Fragmente mit der Compileroption \"jsxFactory\" zu verwenden, muss die Compileroption \"jsxFragmentFactory\" angegeben werden.", - "The_last_overload_gave_the_following_error_2770": "Die letzte Überladung hat den folgenden Fehler verursacht.", - "The_last_overload_is_declared_here_2771": "Die letzte Überladung wird hier deklariert.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Die linke Seite einer for...in-Anweisung darf kein Destrukturierungsmuster sein.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Die linke Seite einer „for... in“-Anweisung darf keine „using“-Deklaration sein.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Die linke Seite eines „for...in“-Anweisung darf keine „await using“-Deklaration sein.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Die linke Seite einer for...in-Anweisung darf keine Typanmerkung verwenden.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Die linke Seite einer for...in-Anweisung darf kein optionaler Eigenschaftenzugriff sein.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Die linke Seite einer for...in-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Die linke Seite einer for...in-Anweisung muss vom Typ \"string\" oder \"any\" sein.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Die linke Seite einer for...of-Anweisung darf keine Typanmerkung verwenden.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Die linke Seite einer for...of-Anweisung darf kein optionaler Eigenschaftenzugriff sein.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Die linke Seite einer „for...of“-Anweisung darf nicht „asynchron“ lauten.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Die linke Seite einer for...of-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Die linke Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Die linke Seite eines Zuweisungsausdrucks darf kein optionaler Eigenschaftenzugriff sein.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Die linke Seite eines Zuweisungsausdrucks muss eine Variable oder ein Eigenschaftenzugriff sein.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Die linke Seite eines „instanceof“-Ausdrucks muss dem ersten Argument der „[Symbol.hasInstance]“-Methode der rechten Seite zugewiesen werden können.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Die linke Seite eines instanceof-Ausdrucks muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Das beim Anzeigen von Meldungen für den Benutzer verwendete Gebietsschema (z. B. \"de-de\").", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Die maximale Abhängigkeitstiefe, die unter \"node_modules\" durchsucht und für die JavaScript-Dateien geladen werden sollen.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Der Operand eines delete-Operators darf kein privater Bezeichner sein.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Der Operand eines delete-Operators darf keine schreibgeschützte Eigenschaft sein.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Der Operand eines delete-Operators muss ein Eigenschaftenverweis sein.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "Der Operand eines delete-Operators muss optional sein.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Der Operand eines Inkrement- oder Dekrementoperators darf kein optionaler Eigenschaftenzugriff sein.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Der Operand eines Inkrement- oder Dekrementoperators muss eine Variable oder ein Eigenschaftenzugriff sein.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Der Parser hat ein ein entsprechendes Element \"{1}\" zu dem hier vorhandenen Token \"{0}\" erwartet.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Exportzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Importzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Auf die Eigenschaft \"{0}\" kann für den Typ \"{1}\" nicht innerhalb dieser Klasse zugegriffen werden, weil sie von einem anderen privaten Bezeichner mit der gleichen Schreibweise verborgen wird.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Der Rückgabetyp einer Parameter-Decorator-Funktion muss \"void\" oder \"any\" sein.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Der Rückgabetyp einer Eigenschaften-Decorator-Funktion muss \"void\" oder \"any\" sein.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Der Rückgabetyp einer asynchronen Funktion muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein. Wollten Sie eigentlich \"Promise<{0}>\" verwenden?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Die rechte Seite einer for...in-Anweisung muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein. Sie weist hier jedoch den Typ \"{0}\" auf.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Die rechte Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Die rechte Seite eines „instanceof“-Ausdrucks muss entweder vom Typ „any“, eine Klasse, eine Funktion oder ein anderer Typ, der dem Schnittstellentyp „Function“ zugewiesen werden kann, oder ein Objekttyp mit einer Symbol.hasInstance-Methode sein.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Die rechte Seite eines „instanceof“-Ausdrucks darf kein Instanziierungsausdruck sein.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "Der Stammwert einer {0}-Datei muss ein Objekt sein.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Die Runtime ruft das Decorator-Element mit {1} Argumenten auf, aber das Decorator-Element erwartet {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Die Runtime ruft das Decorator-Element mit {1}-Argumenten auf, aber das Decorator-Element erwartet mindestens {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "Die verbergende Deklaration von \"{0}\" ist hier definiert.", - "The_signature_0_of_1_is_deprecated_6387": "Die Signatur \"{0}\" von \"{1}\" ist veraltet.", - "The_specified_path_does_not_exist_Colon_0_5058": "Der angegebene Pfad \"{0}\" ist nicht vorhanden.", - "The_tag_was_first_specified_here_8034": "Das Tag wurde zuerst hier angegeben.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Das Ziel einer rest-Zuweisung für ein Objekt darf kein optionaler Eigenschaftenzugriff sein.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Das Ziel einer REST-Zuweisung für ein Objekt muss eine Variable oder ein Eigenschaftenzugriff sein.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Der \"this\"-Kontext vom Typ \"{0}\" kann \"this\" vom Typ \"{1}\" der Methode nicht zugewiesen werden.", - "The_this_types_of_each_signature_are_incompatible_2685": "Die \"this\"-Typen jeder Signatur sind nicht kompatibel.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Der Typ \"{0}\" ist als \"readonly\" festgelegt und kann nicht dem änderbaren Typ \"{1}\" zugewiesen werden.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Der \"Type\"-Modifizierer kann nicht für einen benannten Export verwendet werden, wenn \"Export-Typ\" auf seiner Export-Anweisung verwendet wird.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Der \"Type\"-Modifizierer kann nicht für einen benannten Import verwendet werden, wenn der \"Import-Typ\" auf seiner Import-Anweisung verwendet wird.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Der Typ dieses Knotens kann nicht serialisiert werden, da seine Eigenschaft \"{0}\" nicht serialisiert werden kann.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Der von der {0}()-Methode eines Async-Iterators zurückgegebene Typ muss eine Zusage für einen Typ mit einer value-Eigenschaft sein.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Der von der {0}()-Methode eines Iterators zurückgegebene Typ muss eine value-Eigenschaft aufweisen.", - "The_types_of_0_are_incompatible_between_these_types_2200": "Die Typen von \"{0}\" sind zwischen diesen Typen nicht kompatibel.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Die von \"{0}\" zurückgegebenen Typen sind zwischen diesen Typen nicht kompatibel.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "Der Wert \"{0}\" kann hier nicht verwendet werden.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Die Variablendeklaration einer for...in-Anweisung darf keinen Initialisierer aufweisen.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Die Variablendeklaration einer for...of-Anweisung darf keinen Initialisierer aufweisen.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Die with-Anweisung wird nicht unterstützt. Alle Symbole in einem with-Block weisen den Typ \"any\" auf.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte unter Ihrer aktuellen „moduleResolution“-Einstellung nicht aufgelöst werden. Erwägen Sie ein Update auf „node16“, „nodenext“ oder „bundler“.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte nicht aufgelöst werden, wenn package.json „Exporte“ beachtet wird. Die Bibliothek „{1}“ muss möglicherweise ihre package.json oder Eingaben aktualisieren.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "In diesem regulären Ausdruck ist keine Erfassungsgruppe namens „{0}“ vorhanden.", - "There_is_nothing_available_for_repetition_1507": "Es ist nichts für Wiederholungen verfügbar.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Dieses JSX-Tag erfordert, dass '{0}' im Geltungsbereich ist, konnte jedoch nicht gefunden werden.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Für dieses JSX-Tag muss der Modulpfad '{0}' vorhanden sein, aber es wurde keiner gefunden. Stellen Sie sicher, dass die Typen für das entsprechende Paket installiert sind.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet ein einzelnes untergeordnetes Element vom Typ \"{1}\", aber es wurden mehrere untergeordnete Elemente angegeben.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet den Typ \"{1}\", der mehrere untergeordnete Elemente erfordert, aber es wurde nur ein untergeordnetes Elemente angegeben.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. Dieser reguläre Ausdruck enthält keine Erfassungsgruppen.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. In diesem regulären Ausdruck sind nur {0} Erfassungsgruppen vorhanden.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Dieser binäre Ausdruck ist nie „NULLISH“. Fehlen Klammern?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Dieses Zeichen kann in einem regulären Ausdruck nicht mit Escapezeichen versehen werden.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Dieser Vergleich scheint unbeabsichtigt zu sein, da die Typen \"{0}\" und \"{1}\" keine Überlappung aufweisen.", - "This_condition_will_always_return_0_2845": "Diese Bedingung gibt immer „{0}“ zurück.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Diese Bedingung gibt immer „{0}“ zurück, da JavaScript Objekte nach Verweis und nicht nach Wert vergleicht.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Diese Bedingung gibt immer TRUE zurück, weil diese '{0}' immer definiert ist.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Diese Bedingung gibt immer TRUE zurück, weil diese Funktion immer definiert ist. Möchten Sie sie stattdessen aufrufen?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Diese Konstruktorfunktion kann in eine Klassendeklaration konvertiert werden.", - "This_expression_is_always_nullish_2871": "Dieser Ausdruck ist immer „NULLISH“.", - "This_expression_is_never_nullish_2881": "Dieser binäre Ausdruck ist nie „NULLISH“.", - "This_expression_is_not_callable_2349": "Dieser Ausdruck kann nicht aufgerufen werden.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Dieser Ausdruck kann nicht aufgerufen werden, weil es sich um eine get-Zugriffsmethode handelt. Möchten Sie den Wert ohne \"()\" verwenden?", - "This_expression_is_not_constructable_2351": "Dieser Ausdruck kann nicht erstellt werden.", - "This_file_already_has_a_default_export_95130": "Diese Datei weist bereits einen Standardexport auf.", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Dieser Importpfad ist unsicher umzuschreiben, da er auf ein anderes Projekt verweist und der relative Pfad zwischen den Ausgabedateien der Projekte nicht derselbe ist wie der relative Pfad zwischen den Eingabedateien.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Dieser Import verwendet eine '{0}' Erweiterung, um auf eine TypeScript-Eingabedatei zu verweisen, wird jedoch beim Ausgeben nicht umgeschrieben, da es sich nicht um einen relativen Pfad handelt.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Dies ist die erweiterte Deklaration. Die erweiternde Deklaration sollte in dieselbe Datei verschoben werden.", - "This_kind_of_expression_is_always_falsy_2873": "Diese Art von Ausdruck ist immer „FALSY“.", - "This_kind_of_expression_is_always_truthy_2872": "Diese Art von Ausdruck ist immer „TRUTHY“.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Es kann eine Konvertierung in ein asynchrone Funktion durchgeführt werden.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Dieser Member kann keinen JSDoc-Kommentar mit einem \"@override\"-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem Override-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem Tag \"@override\" haben, da dessen enthaltende Klasse \"{0}\" keine andere Klasse erweitert.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem „@override“-Tag haben, da der Name dynamisch ist.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Dieser Member kann keinen override-Modifizierer aufweisen, weil die Klasse \"{0}\", die diesen Member enthält, keine andere Klasse erweitert.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Dieser Member kann keinen override-Modifizierer aufweisen, da sein Name dynamisch ist.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Dieses Mitglied muss über einen JSDoc-Kommentar mit dem Tag \"@override\" verfügen, da er einen Member in der Basisklasse \"{0}\" überschreibt.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Dieser Member muss einen override-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Dieser Member muss einen override-Modifizierer aufweisen, weil er eine abstrakte Methode überschreibt, die in der Basisklasse \"{0}\" deklariert ist.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Auf dieses Modul kann nur mit ECMAScript-Importen/-Exporten verwiesen werden, indem das Flag \"{0}\" aktiviert und auf den Standardexport verwiesen wird.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Dieses Modul wird mit „export =“ deklariert und kann nur bei Verwendung des Kennzeichnens „{0}“ mit einem Standardimport verwendet werden.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Dieser Vorgang kann vereinfacht werden. Diese Schicht ist identisch mit „{0} {1} {2}“.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Diese Überladung gibt implizit den Typ „{0}“ zurück, da keine Rückgabetypanmerkung vorhanden ist.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Diese Überladungssignatur ist nicht mit der zugehörigen Implementierungssignatur kompatibel.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Dieser Parameter ist mit der Direktive \"use strict\" nicht zugelassen.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Diese Parametereigenschaft muss über einen JSDoc-Kommentar mit einem \"@override\"-Tag verfügen, da sie ein Mitglied in der Basisklasse \"{0}\" überschreibt.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Diese Parametereigenschaft muss einen „override“-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Dieses Flag für reguläre Ausdrücke kann nicht innerhalb eines Untermusters umgeschaltet werden.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Dieses Flag für reguläre Ausdrücke ist nur verfügbar, wenn es auf „{0}“ oder höher ausgerichtet ist.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Dieser relative Importpfad ist unsicher umzuschreiben, da er wie ein Dateiname aussieht, aber tatsächlich auf \"{0}\" verweist.", - "This_spread_always_overwrites_this_property_2785": "Diese Eigenschaft wird immer durch diesen Spread-Operator überschrieben.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Diese Syntax ist nicht zulässig, wenn \"erasableSyntaxOnly\" aktiviert ist.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Diese Syntax ist in Dateien mit der Erweiterung .mts oder .cts reserviert. Fügen Sie ein nachfolgendes Komma oder eine explizite Einschränkung hinzu.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Diese Syntax ist in Dateien mit der Erweiterung \".mts\" oder \".cts\" reserviert. Verwenden Sie stattdessen einen „as“-Ausdruck.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Diese Syntax erfordert ein importiertes Hilfsprogramm, aber das Modul \"{0}\" wurde nicht gefunden.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Diese Syntax erfordert ein importiertes Hilfsprogramm namens \"{1}\", das in \"{0}\" nicht vorhanden ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Diese Syntax erfordert ein importiertes Hilfsprogramm mit dem Namen \"{1}\" mit {2} Parametern, die nicht mit der in \"{0}\" kompatibel ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Für diesen Typparameter ist möglicherweise die Einschränkung \"extends {0}\" erforderlich.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Diese Verwendung von „import“ ist ungültig. „import()“-Aufrufe können geschrieben werden, müssen jedoch Klammern aufweisen und dürfen keine Typargumente aufweisen.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, fügen Sie das Feld \"type\": \"module\" zu \"{0}\" hinzu.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie die Dateierweiterung in \"{0}\", oder fügen Sie das Feld ''type': 'module'' zu \"{1}\" hinzu.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie ihre Dateierweiterung in '{0}', oder erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "„await“-Ausdrücke der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "„await using“-Anweisungen der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarationen der obersten Ebene in .d.ts-Dateien müssen entweder mit einem declare- oder einem export-Modifizierer beginnen.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "„await“-Schleifen der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", - "Trailing_comma_not_allowed_1009": "Ein nachgestelltes Komma ist unzulässig.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Jede Datei als separates Modul transpilieren (ähnlich wie bei \"ts.transpileModule\").", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Versuchen Sie es mit \"npm i --save-dev @types/{1}\", sofern vorhanden, oder fügen Sie eine neue Deklarationsdatei (.d.ts) hinzu, die \"declare module '{0}';\" enthält.", - "Trying_other_entries_in_rootDirs_6110": "Andere Einträge in \"rootDirs\" werden versucht.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Die Ersetzung \"{0}\" wird versucht. Speicherort des Kandidatenmoduls: \"{1}\".", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Der Tupeltyp \"{0}\" der Länge {1} weist am Index \"{2}\" kein Element auf.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Tupeltypargumente verweisen zirkulär auf sich selbst.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Der Typ \"{0}\" kann nur durchlaufen werden, wenn das Flag \"--downlevelIteration\" verwendet wird oder \"--target\" den Wert \"es2015\" oder höher aufweist.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Der Typ \"{0}\" kann nicht als Indextyp verwendet werden.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Der Typ \"{0}\" kann nicht zum Indizieren von Typ \"{1}\" verwendet werden.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Der Typ \"{0}\" erfüllt die Einschränkung \"{1}\" nicht.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Der Typ \"{0}\" erfüllt den erwarteten Typ \"{1}\" nicht.", - "Type_0_has_no_call_signatures_2757": "Der Typ \"{0}\" weist keine Aufrufsignaturen auf.", - "Type_0_has_no_construct_signatures_2761": "Der Typ \"{0}\" weist keine Konstruktsignaturen auf.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Der Typ \"{0}\" weist keine übereinstimmende Indexsignatur für den Typ \"{1}\" auf.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "Der Typ \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit Typ \"{1}\".", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Der Typ „{0}“ weist keine Signaturen auf, für die die Liste „Typargument“ gilt.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Der Typ „{0}“ ist generisch und kann nur zum Lesen indiziert werden.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\".", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\" und {3} weitere.", - "Type_0_is_not_a_constructor_function_type_2507": "Der Typ \"{0}\" ist kein Konstruktorfunktionstyp.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Der Typ „{0}“ ist in ES5 kein gültiger Rückgabetyp einer asynchronen Funktion, weil er nicht auf einen Promise-kompatiblen Konstruktorwert verweist.", - "Type_0_is_not_an_array_type_2461": "Der Typ \"{0}\" ist kein Arraytyp.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Der Typ \"{0}\" ist kein Array- oder Zeichenfolgentyp.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ \"{0}\" ist kein Array-Typ oder Zeichenfolgentyp oder weist keine \"[Symbol.iterator]()\"-Methode auf, die einen Iterator zurückgibt.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ \"{0}\" ist kein Array-Typ oder weist keine \"[Symbol.iterator]()\"-Methode auf, die einen Iterator zurückgibt.", - "Type_0_is_not_assignable_to_type_1_2322": "Der Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Meinten Sie \"{2}\"?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Der Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Es sind zwei verschiedene Typen mit diesem Namen vorhanden, diese sind jedoch nicht verwandt.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Der Typ „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden, wie in der Abweichungsanmerkung impliziert.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Der Typ „{0}“ kann nicht dem Typ „{1}“ zugewiesen werden, wie für berechnete Enumerationselementwerte erforderlich.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zum Typ des Ziels.", - "Type_0_is_not_comparable_to_type_1_2678": "Der Typ \"{0}\" kann nicht mit dem Typ \"{1}\" verglichen werden.", - "Type_0_is_not_generic_2315": "Der Typ \"{0}\" ist nicht generisch.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ „{0}“ kann einen primitiven Wert darstellen, der als rechter Operand des „In“-Operators nicht zulässig ist.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Der Typ \"{0}\" muss eine Methode \"[Symbol.asyncIterator]()\" aufweisen, die einen async-Iterator zurückgibt.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Der Typ \"{0}\" muss eine Methode \"[Symbol.iterator]()\" aufweisen, die einen Iterator zurückgibt.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Der Typ \"{0}\" enthält keine Entsprechung für die Signatur \"{1}\".", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Der Typ \"{0}\" verweist rekursiv auf sich selbst als ein Basistyp.", - "Type_Checking_6248": "Typprüfung", - "Type_alias_0_circularly_references_itself_2456": "Der Typalias \"{0}\" verweist zirkulär auf sich selbst.", - "Type_alias_must_be_given_a_name_1439": "Typalias muss einen Namen erhalten.", - "Type_alias_name_cannot_be_0_2457": "Der Typaliasname darf nicht \"{0}\" sein.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Typaliase können nur in TypeScript-Dateien verwendet werden.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Die Typanmerkung darf nicht für eine Konstruktordeklaration verwendet werden.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Typanmerkungen können nur in TypeScript-Dateien verwendet werden.", - "Type_argument_expected_1140": "Ein Typargument wurde erwartet.", - "Type_argument_list_cannot_be_empty_1099": "Die Typargumentliste darf nicht leer sein.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Typargumente können nur in TypeScript-Dateien verwendet werden.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Typargumente für \"{0}\" verweisen zirkulär auf sich selbst.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Typassertionsausdrücke können nur in TypeScript-Dateien verwendet werden.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Der Typ an Position {0} in der Quelle ist nicht mit dem Typ an Position {1} im Ziel kompatibel.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Der Typ an den Positionen {0} bis {1} in der Quelle ist nicht mit dem Typ an Position {2} im Ziel kompatibel.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Der Typ, der den privaten Namen „{0}“ enthält, kann nicht mit „--isolatedDeclarations“ verwendet werden.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Typdeklarationsdateien, die in die Kompilierung eingeschlossen werden sollen.", - "Type_expected_1110": "Es wurde ein Typ erwartet.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Typimportassertionen sollten über genau einen Schlüssel verfügen – „resolution-mode“ – mit dem Wert „import“ oder „require“.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Der Typimport eines ECMAScript-Moduls aus einem CommonJS-Modul muss ein Attribut für den Auflösungsmodus (resolution-mode) aufweisen.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Die Typinstanziierung ist übermäßig tief und möglicherweise unendlich.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Auf den Typ wird direkt oder indirekt im Erfüllungsrückruf der eigenen \"then\"-Methode verwiesen.", - "Type_library_referenced_via_0_from_file_1_1402": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" referenziert wird", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Der Typ des \"await\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Der Typ des Werts der berechneten Eigenschaft lautet \"{0}\" und kann dem Typ \"{1}\" nicht zugewiesen werden.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Der Typ der Instanzmembervariablen „{0}“ darf nicht auf den im Konstruktor deklarierten Bezeichner „{1}“ verweisen.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Der Typ iterierter Elemente eines \"yield*\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Der Typ der Eigenschaft \"{0}\" verweist im zugeordneten Typ \"{1}\" auf sich selbst.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Der Typ eines \"yield\"-Operanden in einem asynchronen Generator muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Der reine Typimport eines ECMAScript-Moduls aus einem CommonJS-Modul muss ein Attribut für den Auflösungsmodus (resolution-mode) aufweisen.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Der Typ stammt aus diesem Import. Ein Import im Namespacestil kann nicht aufgerufen oder erstellt werden und verursacht zur Laufzeit einen Fehler. Erwägen Sie hier stattdessen die Verwendung eines Standardimports oder die den Import über \"require\".", - "Type_parameter_0_has_a_circular_constraint_2313": "Der Typparameter \"{0}\" weist eine zirkuläre Einschränkung auf.", - "Type_parameter_0_has_a_circular_default_2716": "Der Typparameter \"{0}\" besitzt einen zirkulären Standardwert.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Der Typparameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Der Typparameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Der Typparameter \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Der Typparameter \"{0}\" der exportierten Funktion besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Der Typparameter \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Der Typparameter \"{0}\" des exportierten zugeordneten Objekttyps verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Der Typparameter \"{0}\" des exportierten Typalias enthält oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Der Typparameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Der Typparameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Der Typparameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", - "Type_parameter_declaration_expected_1139": "Eine Typparameterdeklaration wurde erwartet.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Typparameterdeklarationen können nur in TypeScript-Dateien verwendet werden.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Standardwerte für Typparameter können nur auf zuvor deklarierte Typparameter verweisen.", - "Type_parameter_list_cannot_be_empty_1098": "Die Typparameterliste darf nicht leer sein.", - "Type_parameter_name_cannot_be_0_2368": "Der Name des Typparameters darf nicht \"{0}\" sein.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Typparameter dürfen nicht für eine Konstruktordeklaration verwendet werden.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Das Typprädikat \"{0}\" kann \"{1}\" nicht zugewiesen werden.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Der Typ erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.", - "Type_reference_directive_0_was_not_resolved_6120": "======== Die Typverweisdirektive \"{0}\" wurde nicht aufgelöst. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. Primär: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. Primär: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Typerfüllungsausdrücke können nur in TypeScript-Dateien verwendet werden.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typen können in Exportdeklarationen in JavaScript-Dateien nicht angezeigt werden.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Typen weisen separate Deklarationen einer privaten Eigenschaft \"{0}\" auf.", - "Types_of_construct_signatures_are_incompatible_2419": "Die Typen der Konstruktsignaturen sind nicht kompatibel.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Die Typen der Parameter \"{0}\" und \"{1}\" sind nicht kompatibel.", - "Types_of_property_0_are_incompatible_2326": "Die Typen der Eigenschaft \"{0}\" sind nicht kompatibel.", - "Unable_to_open_file_0_6050": "Die Datei \"{0}\" kann nicht geöffnet werden.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Die Signatur des Klassen-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Die Signatur des Methoden-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Die Signatur des Parameter-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Die Signatur des Eigenschaften-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", - "Undetermined_character_escape_1513": "Nicht definiertes ESC-zeichen.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Unerwartete(s/r) „{0}“. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", - "Unexpected_end_of_text_1126": "Unerwartetes Textende.", - "Unexpected_keyword_or_identifier_1434": "Unerwartetes Schlüsselwort oder Bezeichner.", - "Unexpected_token_1012": "Unerwartetes Token.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Unerwartetes Token. Ein Konstruktor, eine Methode, eine Zugriffsmethode oder eine Eigenschaft wurde erwartet.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Unerwartetes Token. Es wurde ein Typparametername ohne geschweifte Klammern erwartet.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Unerwartetes Token. Meinten Sie \"{'>'}\" oder \">\"?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Unerwartetes Token. Meinten Sie \"{'}'}\" oder \"}\"?", - "Unexpected_token_expected_1179": "Unerwartetes Token. \"{\" wurde erwartet.", - "Unicode_escape_sequence_cannot_appear_here_17021": "Die Unicode-Escapesequenz kann hier nicht angezeigt werden.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode-Escapesequenzen sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode-Eigenschaftswertausdrücke sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", - "Unknown_Unicode_property_name_1524": "Unbekannter Unicode-Eigenschaftsname.", - "Unknown_Unicode_property_name_or_value_1529": "Unbekannter Unicode-Eigenschaftsname oder -Wert.", - "Unknown_Unicode_property_value_1526": "Unbekannter Unicode-Eigenschaftswert.", - "Unknown_build_option_0_5072": "Unbekannte Buildoption \"{0}\".", - "Unknown_build_option_0_Did_you_mean_1_5077": "Unbekannte Buildoption \"{0}\". Meinten Sie \"{1}\"?", - "Unknown_compiler_option_0_5023": "Unbekannte Compileroption \"{0}\".", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Unbekannte Compileroption \"{0}\". Meinten Sie \"{1}\"?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Unbekanntes Schlüsselwort oder Bezeichner. Meinten Sie \"{0}\"?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Unbekannte Option \"exclude\". Meinten Sie \"exclude\"?", - "Unknown_regular_expression_flag_1499": "Unbekanntes Flag für reguläre Ausdrücke.", - "Unknown_type_acquisition_option_0_17010": "Unbekannte Option zur Typerfassung: {0}.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Unbekannte Typerfassungsoption \"{0}\". Meinten Sie \"{1}\"?", - "Unknown_watch_option_0_5078": "Unbekannte Überwachungsoption \"{0}\".", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Unbekannte Überwachungsoption \"{0}\". Meinten Sie \"{1}\"?", - "Unreachable_code_detected_7027": "Es wurde unerreichbarer Code erkannt.", - "Unterminated_Unicode_escape_sequence_1199": "Nicht abgeschlossene Unicode-Escapesequenz.", - "Unterminated_quoted_string_in_response_file_0_6045": "Nicht abgeschlossene Zeichenfolge in Anführungszeichen in der Datei \"{0}\".", - "Unterminated_regular_expression_literal_1161": "Nicht abgeschlossenes reguläres Ausdrucksliteral.", - "Unterminated_string_literal_1002": "Nicht abgeschlossenes Zeichenfolgenliteral.", - "Unterminated_template_literal_1160": "Nicht abgeschlossenes Vorlagenliteral.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Nicht typisierte Funktionsaufrufe dürfen keine Typargumente annehmen.", - "Unused_label_7028": "Nicht verwendete Bezeichnung.", - "Unused_ts_expect_error_directive_2578": "Nicht verwendete @ts-expect-error-Direktive.", - "Update_import_from_0_90058": "Import von \"{0}\" aktualisieren", - "Update_modifiers_of_0_90061": "Modifizierer von „{0}“ aktualisieren", - "Updating_output_timestamps_of_project_0_6359": "Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Unveränderte Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", - "Use_0_95174": "Verwenden Sie „{0}“.", - "Use_0_instead_5106": "Verwenden Sie stattdessen „{0}“.", - "Use_Number_isNaN_in_all_conditions_95175": "Verwenden Sie „Number.isNaN“ unter allen Bedingungen.", - "Use_element_access_for_0_95145": "Elementzugriff für \"{0}\" verwenden", - "Use_element_access_for_all_undeclared_properties_95146": "Elementzugriff für alle nicht deklarierten Eigenschaften verwenden", - "Use_import_type_95180": "„Importtyp“ verwenden", - "Use_synthetic_default_member_95016": "Verwenden Sie den synthetischen Member \"default\".", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Verwenden Sie das package.json-Feld „exports“, wenn Sie Paketimporte auflösen.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Verwenden Sie das package.json-Feld „imports“, wenn Sie Importe auflösen.", - "Use_type_0_95181": "„Typ {0}“ verwenden", - "Using_0_subpath_1_with_target_2_6404": "Verwenden von \"{0}\" Unterpfad \"{1}\" mit Ziel \"{2}\".", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Die Verwendung von JSX-Fragmenten erfordert, dass die Fragmentfabrik '{0}' im Geltungsbereich ist, aber sie konnte nicht gefunden werden.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Das Verwenden einer Zeichenfolge in einer for...of-Anweisung wird nur in ECMAScript 5 oder höher unterstützt.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Bei Verwendung von --build wird tsc durch -b dazu veranlasst, sich eher wie ein Build-Orchestrator als ein Compiler zu verhalten. Damit wird der Aufbau von zusammengesetzten Projekten ausgelöst. Weitere Informationen dazu finden Sie unter {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Compileroptionen der Projektverweisumleitung \"{0}\" werden verwendet.", - "VERSION_6036": "VERSION", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Der Wert des Typs \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit dem Typ \"{1}\". Wollten Sie ihn aufrufen?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Der Wert des Typs \"{0}\" kann nicht aufgerufen werden. Wollten Sie \"new\" einschließen?", - "Variable_0_implicitly_has_an_1_type_7005": "Die Variable \"{0}\" weist implizit einen Typ \"{1}\" auf.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Die Variable \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Die Variable \"{0}\" weist an einigen Stellen implizit den Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Die Variable \"{0}\" weist an manchen Stellen implizit den Typ \"{1}\" auf, an denen der Typ nicht ermittelt werden kann.", - "Variable_0_is_used_before_being_assigned_2454": "Die Variable \"{0}\" wird vor ihrer Zuweisung verwendet.", - "Variable_declaration_expected_1134": "Eine Variablendeklaration wurde erwartet.", - "Variable_declaration_list_cannot_be_empty_1123": "Die Variablendeklarationsliste darf nicht leer sein.", - "Variable_declaration_not_allowed_at_this_location_1440": "Variablendeklaration ist an dieser Stelle nicht zulässig.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Die Variable muss eine explizite Typanmerkung mit --isolatedDeclarations aufweisen.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variablen mit mehreren Deklarationen können nicht inline verwendet werden.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Das variadic-Element an Position {0} in der Quelle stimmt nicht mit dem Element an Position {1} im Ziel überein.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Abweichungsanmerkungen werden nur in Typaliasnamen für Objekt-, Funktions-, Konstruktor- und zugeordnete Typen unterstützt.", - "Version_0_6029": "Version {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Weitere Informationen zur Migration finden Sie unter https://aka.ms/ts6.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Besuchen Sie https://aka.ms/tsconfig, um mehr über diese Datei zu erfahren.", - "WATCH_OPTIONS_6918": "ÜBERWACHUNGSOPTIONEN", - "Watch_and_Build_Modes_6250": "Überwachungs- und Buildmodi", - "Watch_input_files_6005": "Eingabedateien überwachen.", - "Watch_option_0_requires_a_value_of_type_1_5080": "Die Überwachungsoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Wir können nur einen Typ für „{0}“ schreiben, indem hier ein Typ für den gesamten Parameter hinzugefügt wird.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Überprüfen Sie beim Zuweisen von Funktionen, ob Parameter und Rückgabewerte untertypkompatibel sind.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Berücksichtigen Sie bei der Typüberprüfung „null“ und „undefined“.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Gibt an, ob eine veraltete Konsolenausgabe im Überwachungsmodus beibehalten wird, statt den Bildschirm zu löschen.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Alle ungültigen Zeichen mit einem Ausdruckscontainer umschließen", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Umschließen aller ungültigen Decoratorausdrücke in Klammern", - "Wrap_all_object_literal_with_parentheses_95116": "Gesamtes Objektliteral in Klammern einschließen", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Alle JSX ohne übergeordnetes Element mit JSX -Fragment umschließen", - "Wrap_in_JSX_fragment_95120": "Mit JSX-Fragment umschließen", - "Wrap_in_parentheses_95194": "Umschließen in Klammern", - "Wrap_invalid_character_in_an_expression_container_95108": "Ungültiges Zeichen mit Ausdruckscontainer umschließen", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Schließen Sie den folgenden Text, der ein Objektliteral darstellt, in Klammern ein.", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informationen zu allen Compileroptionen finden Sie unter {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Ein Modul kann nicht über einen globalen Import umbenannt werden.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Elemente, die in einem Ordner \"node_modules\" definiert sind, können nicht umbenannt werden.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Elemente, die in einem anderen Ordner \"node_modules\" definiert sind, können nicht umbenannt werden.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Sie können keine Elemente umbenennen, die in der TypeScript-Standardbibliothek definiert sind.", - "You_cannot_rename_this_element_8000": "Sie können dieses Element nicht umbenennen.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" akzeptiert zu wenige Argumente, um hier als Decorator verwendet zu werden. Wollten Sie es zuerst aufrufen und \"@{0}()\" schreiben?", - "_0_and_1_index_signatures_are_incompatible_2330": "Indexsignaturen \"{0}\" und \"{1}\" sind nicht kompatibel.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Die Vorgänge \"{0}\" und \"{1}\" dürfen nicht ohne Klammern kombiniert werden.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" ist zweimal angegeben. Das Attribut mit dem Namen \"{0}\" wird überschrieben.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ am Ende eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ am Anfang eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" kann nur importiert werden, indem das Flag \"esModuleInterop\" aktiviert und ein Standardimport verwendet wird.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" kann nur mithilfe eines Standardimports importiert werden.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Verwendung eines Standardimports importiert werden.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder über einen Standardimport importiert werden.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", - "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" kann nicht als JSX-Komponente verwendet werden.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" kann nicht als Wert verwendet werden, weil der Export mit \"export type\" durchgeführt wurde.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" kann nicht als Wert verwendet werden, weil der Import mit \"import type\" durchgeführt wurde.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "{0}-Komponenten akzeptieren Text nicht als untergeordnete Elemente. Der Text in der JSX weist den Typ \"string\" auf, aber für \"{1}\" wird der Typ \"{2}\" erwartet.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "\"{0}\" konnte mit einem arbiträren Typ instanziiert werden, der mit \"{1}\" möglicherweise in keinem Zusammenhang steht.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "„{0}“-Deklarationen können nur innerhalb eines Blocks deklariert werden.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "{0}-Deklarationen können nur in TypeScript-Dateien verwendet werden.", - "_0_declarations_may_not_have_binding_patterns_1492": "„{0}“-Deklarationen dürfen keine Bindungsmuster aufweisen.", - "_0_declarations_must_be_initialized_1155": "„{0}“-Deklarationen müssen initialisiert werden.", - "_0_expected_1005": "\"{0}\" wurde erwartet.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ hat einen Zeichenfolgentyp, muss aber syntaktisch erkennbare Zeichenfolgensyntax aufweisen, wenn „isolatedModules“ aktiviert ist.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" umfasst keinen exportierten Member namens \"{1}\". Meinten Sie \"{2}\"?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" weist implizit einen Rückgabetyp \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem der Rückgabeausdrücke des Objekts verwiesen wird.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist und darauf direkt oder indirekt im eigenen Initialisierer verwiesen wird.", - "_0_index_signatures_are_incompatible_2634": "\"{0}\" Indexsignaturen sind inkompatibel.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "\"{0}\" Indextyp \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" ist ein primitiver Typ, aber \"{1}\" ist ein Wrapperobjekt. Verwenden Sie vorzugsweise \"{0}\", wenn möglich.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" ist ein Typ und kann nicht in JavaScript-Dateien importiert werden. Verwenden Sie \"{1}\" in einer JSDoc-Typanmerkung.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ ist ein Typ und muss mit einem reinen Typimport importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}“ ist eine nicht verwendete Umbenennung von „{1}“. Wollten Sie sie als Typanmerkung verwenden?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" kann der Einschränkung vom Typ \"{1}\" zugewiesen werden, aber \"{1}\" könnte mit einem anderen Untertyp der Einschränkung \"{2}\" instanziiert werden.", - "_0_is_automatically_exported_here_18044": "\"{0}\" wird hier automatisch exportiert.", - "_0_is_declared_but_its_value_is_never_read_6133": "\"{0}\" ist deklariert, aber der zugehörige Wert wird nie gelesen.", - "_0_is_declared_but_never_used_6196": "\"{0}\" ist deklariert, wird aber nie verwendet.", - "_0_is_declared_here_2728": "\"{0}\" wird hier deklariert.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" ist als Eigenschaft in der Klasse \"{1}\" definiert, wird aber hier in \"{2}\" als Accessor überschrieben.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" ist als Accessor in der Klasse \"{1}\" definiert, wird aber hier in \"{2}\" als Instanzeigenschaft überschrieben.", - "_0_is_deprecated_6385": "\"{0}\" ist veraltet.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" ist keine gültige Metaeigenschaft für das Schlüsselwort \"{1}\". Meinten Sie \"{2}\"?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "\"{0}\" ist als Parametername nicht zulässig.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "\"{0}\" ist als Name für Variablendeklarationen nicht zulässig.", - "_0_is_of_type_unknown_18046": "\"{0}\" ist vom Typ \"unbekannt\".", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "\"{0}\" ist möglicherweise \"null\".", - "_0_is_possibly_null_or_undefined_18049": "\"{0}\" ist möglicherweise \"null\" oder \"nicht definiert\".", - "_0_is_possibly_undefined_18048": "\"{0}\" ist möglicherweise nicht \"nicht definiert\".", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Auf \"{0}\" wird direkt oder indirekt im eigenen Basisausdruck verwiesen.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Auf \"{0}\" wird direkt oder indirekt in der eigenen Typanmerkung verwiesen.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" wurde mehrmals angegeben, deshalb wird dieses Vorkommen überschrieben.", - "_0_list_cannot_be_empty_1097": "Die {0}-Liste darf nicht leer sein.", - "_0_modifier_already_seen_1030": "Der {0}-Modifizierer ist bereits vorhanden.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Klasse, einer Schnittstelle oder eines Typalias verwendet werden.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Funktion, Methode oder Klasse angezeigt werden.", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Der Modifizierer \"{0}\" darf nicht für eine Konstruktordeklaration verwendet werden.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Der Modifizierer \"{0}\" darf nicht für ein Modul- oder Namespaceelement verwendet werden.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Der Modifizierer \"{0}\" darf nicht für einen Parameter verwendet werden.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Der Modifizierer \"{0}\" darf nicht für einen Typmember verwendet werden.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Der Modifizierer „{0}“ kann nicht für einen Typparameter verwendet werden", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Der Modifizierer „{0}“ kann nicht in einer „using“-Deklaration angezeigt werden.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Der Modifizierer „{0}“ kann nicht in einer „await using“-Deklaration angezeigt werden.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Der Modifizierer \"{0}\" darf nicht für eine Indexsignatur verwendet werden.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Der Modifizierer \"{0}\" kann nicht für Klassenelemente dieser Art verwendet werden.", - "_0_modifier_cannot_be_used_here_1042": "Der Modifizierer \"{0}\" kann hier nicht verwendet werden.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Der Modifizierer \"{0}\" kann nicht in einem Umgebungskontext verwendet werden.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Der Modifizierer \"{0}\" darf nicht mit dem Modifizierer \"{1}\" verwendet werden.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Der Modifizierer \"{0}\" kann nicht mit einem privaten Bezeichner verwendet werden.", - "_0_modifier_must_precede_1_modifier_1029": "Der Modifizierer \"{0}\" muss dem Modifizierer \"{1}\" vorangestellt sein.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Auf „\\{0}“ muss ein Unicode-Eigenschaftswertausdruck folgen, der in geschweifte Klammern eingeschlossen ist.", - "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" erfordert eine explizite Typanmerkung.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Namespace verwendet.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" bezieht sich nur auf einen Typ, wird aber hier als Wert verwendet.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet. Wollten Sie \"{1} in {0}\" verwenden?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"es2015\" oder höher.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" bezieht sich auf eine globale UMD, die aktuelle Datei ist jedoch ein Modul. Ziehen Sie in Betracht, stattdessen einen Import hinzuzufügen.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" bezieht sich auf einen Wert, wird hier jedoch als Typ verwendet. Meinten Sie \"typeof {0}\"?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss mithilfe eines reinen Typimports importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "„{0}“ wird in eine reine Typdeklaration aufgelöst und muss mithilfe eines reinen Typreexports erneut exportiert werden, wenn „{1}“ aktiviert ist.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" sollte im CompilerOptions-Objekt der JSON-Konfigurationsdatei festgelegt werden.", - "_0_tag_already_specified_1223": "Das Tag \"{0}\" wurde bereits angegeben.", - "_0_was_also_declared_here_6203": "\"{0}\" wurde hier ebenfalls deklariert.", - "_0_was_exported_here_1377": "\"{0}\" wurde hier exportiert.", - "_0_was_imported_here_1376": "\"{0}\" wurde hier importiert.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "\"{0}\" ohne Rückgabetypanmerkung weist implizit einen Rückgabetyp \"{1}\" auf.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" ohne Rückgabetypanmerkung weist implizit einen yield-Typ \"{1}\" auf.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Der Modifizierer \"abstract\" darf nur für eine Klassen-, Methoden- oder Eigenschaftendeklaration verwendet werden.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Der Accessormodifizierer kann nur in einer Eigenschaftendeklaration angezeigt werden.", - "and_here_6204": "und hier.", - "and_npm_install_D_types_Slashnode_6290": "und npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "„arguments“ kann in Eigenschaftsinitialisierern oder statischen Initialisierungsblöcken für Klassen nicht referenziert werden.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto“: Dateien mit imports, exports, import.meta, jsx (mit jsx: respond-jsx) oder esm-Format (mit module: node16+) als Module behandeln.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Der „await“-Ausdruck kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "await-Ausdrücke sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "await-Ausdrücke sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "await-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" hat keine Auswirkungen auf den Typ dieses Ausdrucks.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "„await using“-Deklarationen sind in Umgebungskontexten nicht zulässig.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "„await usuing“-Deklarationen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "„await using“-Deklarationen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "„await using“-Anweisungen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Die Option \"baseUrl\" ist auf \"{0}\" festgelegt. Dieser Wert wird verwendet, um den nicht relativen Modulnamen \"{1}\" aufzulösen.", - "c_must_be_followed_by_an_ASCII_letter_1512": "Auf „\\c“ muss ein ASCII-Buchstabe folgen.", - "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" kann nur am Anfang einer Datei verwendet werden.", - "case_or_default_expected_1130": "\"case\" oder \"default\" wurde erwartet.", - "catch_or_finally_expected_1472": "„catch“ oder „finally“ erwartet.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Der const-Enumerationsmemberinitialisierer wurde in einen unendlichen Wert ausgewertet.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Der const-Enumerationsmemberinitialisierer wurde in den unzulässigen Wert \"NaN\" ausgewertet.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Elementitialisierer für Konstantenenummeration müssen konstante Ausdrücke sein.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "const-Enumerationen können nur in Eigenschaften- bzw. Indexzugriffsausdrücken oder auf der rechten Seite einer Importdeklaration oder Exportzuweisung verwendet werden.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "\"constructor\" kann nicht als Parametereigenschaftsname verwendet werden.", - "constructor_is_a_reserved_word_18012": "\"#constructor\" ist ein reserviertes Wort.", - "default_Colon_6903": "Standard:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "\"delete\" kann für einen Bezeichner im Strict-Modus nicht aufgerufen werden.", - "export_Asterisk_does_not_re_export_a_default_1195": "Mit \"export *\" wird ein Standardwert nicht erneut exportiert.", - "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" kann nur in TypeScript-Dateien verwendet werden.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Der Modifizierer \"export\" kann nicht auf Umgebungsmodule und Modulerweiterungen angewendet werden, da diese immer sichtbar sind.", - "extends_clause_already_seen_1172": "Die extends-Klausel ist bereits vorhanden.", - "extends_clause_must_precede_implements_clause_1173": "Die extends-Klausel muss der implements-Klausel vorangestellt sein.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Die \"extends\"-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Die extends-Klausel der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Die \"extends\"-Klausel der exportierten Schnittstelle \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", - "false_unless_checkJs_is_set_6932": "„false“, es sei denn „checkJs“ ist festgelegt", - "false_unless_composite_is_set_6906": "'false', es sei denn 'composite' ist festgelegt", - "file_6025": "Datei", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "\"for await\"-Schleifen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "\"for await\"-Schleifen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "„For await“-Schleifen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "get- und set-Zugriffsmethoden können keine this-Parameter deklarieren.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'[]', wenn 'files' angegeben ist, andernfalls '[\"**/*\"]'", - "implements_clause_already_seen_1175": "Die implements-Klausel ist bereits vorhanden.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "implements-Klauseln können nur in TypeScript-Dateien verwendet werden.", - "import_can_only_be_used_in_TypeScript_files_8002": "\"import... =\" kann nur in TypeScript-Dateien verwendet werden.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "infer-Deklarationen sind nur in der extends-Klausel eines bedingten Typs zulässig.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Auf „\\k“ muss ein Erfassungsgruppenname folgen, der in spitzen Klammern eingeschlossen ist.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" darf nicht als Name in let- oder const-Deklarationen verwendet werden.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Der new-Ausdruck, in dessen Ziel eine Konstruktsignatur fehlt, weist implizit einen Typ \"any\" auf.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\",\"bower_components\",\"jspm_packages\"]', plus der Wert von 'outDir', wenn ein Wert angegeben ist.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "„nodenext“, wenn „module“ auf „nodenext“ festgelegt ist; „node16“, wenn „module“ auf „node16“ oder „node18“ festgelegt ist; andernfalls „bundler“.", - "one_of_Colon_6900": "eines von:", - "one_or_more_Colon_6901": "eins oder mehr:", - "options_6024": "Optionen", - "or_JSX_element_expected_1145": "'{' oder JSX-Element erwartet.", - "or_expected_1144": "\"{\" oder \";\" wurde erwartet.", - "package_json_does_not_have_a_0_field_6100": "\"package.json\" besitzt kein \"{0}\"-Feld.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package.json\" weist keinen Eintrag \"typesVersions\" auf, der mit der Version {0} übereinstimmt.", - "package_json_had_a_falsy_0_field_6220": "\"package.json\" enthielt ein \"falsy\" Feld \"{0}\".", - "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" weist das {0}-Feld \"{1}\" auf, das auf \"{2}\" verweist.", - "package_json_has_a_peerDependencies_field_6281": "„package.json“ weist das Feld „peerDependencies“ auf.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package.json\" weist einen typesversion-Eintrag \"{0}\" auf, der kein gültiger semver-Bereich ist.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package.json\" weist einen typesVersions-Eintrag \"{0}\" auf, der der Compilerversion \"{1}\" entspricht. Es wird nach einem Muster gesucht, das dem Modulnamen \"{2}\" entspricht.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package.json\" weist ein Feld \"typesVersions\" mit versionsspezifischen Pfadzuordnungen auf.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Der package.json-Bereich \"{0}\" ordnet den Bezeichner \"{1}\" explizit NULL zu.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Der package.json-Bereich \"{0}\" weist einen ungültigen Typ für das Ziel des Spezifizierers \"{1}\" auf.", - "package_json_scope_0_has_no_imports_defined_6273": "Für package.jsim, Bereich \"{0}\" wurden keine Importe definiert.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Die Option \"paths\" wurde angegeben. Es wird nach einem Muster gesucht, das mit dem Modulnamen \"{0}\" übereinstimmt.", - "q_is_only_available_inside_character_class_1511": "„\\q“ ist nur innerhalb der Zeichenklasse verfügbar.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Auf „\\q“ müssen Zeichenfolgenalternativen folgen, die in geschweifte Klammern eingeschlossen sind.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Der Modifizierer \"readonly\" darf nur für eine Eigenschaftendeklaration oder Indexsignatur verwendet werden.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Der Typmodifizierer \"readonly\" ist nur für Array- und Tupelliteraltypen zulässig.", - "require_call_may_be_converted_to_an_import_80005": "Der Aufruf von \"require\" kann in einen Aufruf von \"import\" konvertiert werden.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "„resolution-mode“ kann nur für reine Typenimporte festgelegt werden.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "„resolution-mode“ ist für Typimportassertionen der einzige gültige Schlüssel.", - "resolution_mode_should_be_either_require_or_import_1453": "„resolution-mode“ muss entweder auf „require“ oder „import“ festgelegt sein.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Die Option \"rootDirs\" wurde festgelegt. Sie wird zum Auflösen des relativen Modulnamens \"{0}\" verwendet.", - "super_can_only_be_referenced_in_a_derived_class_2335": "Auf \"super\" kann nur in einer abgeleiteten Klasse verwiesen werden.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Auf \"super\" kann nur in Membern abgeleiteter Klassen oder Objektliteralausdrücken verwiesen werden.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Auf \"super\" kann nicht in einem berechneten Eigenschaftennamen verwiesen werden.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "Auf \"super\" kann nicht in Konstruktorargumenten verwiesen werden.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "\"super\" ist nur in Membern von Objektliteralausdrücken zulässig, wenn die Option \"target\" den Wert \"ES2015\" oder höher aufweist.", - "super_may_not_use_type_arguments_2754": "\"super\" darf keine Typargumente verwenden.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Vor dem Zugriff auf eine Eigenschaft von \"super\" im Konstruktor einer abgeleiteten Klasse muss \"super\" aufgerufen werden.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "\"super\" muss vor dem Zugreifen auf \"this\" im Konstruktor einer abgeleiteten Klasse aufgerufen werden.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Auf \"super\" muss eine Argumentliste oder Memberzugriff folgen.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Der Zugriff auf die super-Eigenschaft ist nur in einem Konstruktor, einer Memberfunktion oder einer Memberzugriffsmethode einer abgeleiteten Klasse zulässig.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "Auf \"this\" kann nicht in einem berechneten Eigenschaftennamen verwiesen werden.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Auf \"this\" kann nicht in einem Modul- oder Namespacetext verwiesen werden.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Auf \"this\" kann nicht in einem statischen Eigenschafteninitialisierer verwiesen werden.", - "this_cannot_be_referenced_in_current_location_2332": "Auf \"this\" kann am aktuellen Speicherort nicht verwiesen werden.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist.", - "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" für ES2022 und höher, einschließlich ESNext.", - "true_if_composite_false_otherwise_6909": "'true', wenn 'composite', andernfalls 'false'", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true“, wenn „moduleResolution“ „node16“, „nodenext“ oder „bundler“ ist; andernfalls „false“.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: Der TypeScript-Compiler", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", - "type_Colon_6902": "Typ:", - "unique_symbol_types_are_not_allowed_here_1335": "\"unique symbol\"-Typen sind hier nicht zulässig.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\"-Typen sind nur für Variablen in einer Variablenanweisung zulässig.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "\"unique symbol\"-Typen dürfen für eine Variablendeklaration mit einem Bindungsnamen nicht verwendet werden.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Eine Verwendung der Direktive \"use strict\" mit einer nicht einfachen Parameterliste ist nicht zugelassen.", - "use_strict_directive_used_here_1349": "Die Direktive \"use strict\" wird hier verwendet.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "„using“-Deklarationen sind in Umgebungskontexten nicht zulässig.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "with-Anweisungen sind in einem asynchronen Funktionsblock unzulässig.", - "with_statements_are_not_allowed_in_strict_mode_1101": "this-Anweisungen sind im Strict-Modus unzulässig.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Der Ausdruck \"yield\" führt implizit zu einem Typ \"any\", weil der enthaltende Generator keine Anmerkung vom Rückgabetyp umfasst.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "yield-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "ALLE COMPILEROPTIONEN", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Ein Modifizierer \"{0}\" darf nicht mit einer Importdeklaration verwendet werden.", + "A_0_parameter_must_be_the_first_parameter_2680": "Ein \"{0}\"-Parameter muss der erste Parameter sein.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Ein JSDoc-Tag \"@template\" darf nicht auf ein \"@typedef\", \"@callback\" oder \"@overload\" folgen.", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Ein JSDoc-Kommentar \"@typedef\" darf nicht mehrere @type-Tags enthalten.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Ein \"bigint\"-Literal kann nicht als Eigenschaftenname verwendet werden.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Ein bigint-Literal kann keine exponentielle Notation verwenden.", + "A_bigint_literal_must_be_an_integer_1353": "Ein bigint-Literal muss eine ganze Zahl sein.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Ein Bindungsmusterparameter darf in einer Implementierungssignatur nicht optional sein.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Eine break-Anweisung darf nur in einer einschließenden iteration- oder switch-Anweisung verwendet werden.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Eine break-Anweisung kann nur zu einer Bezeichnung einer einschließenden Anweisung springen.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Eine Zeichenklasse darf kein reserviertes doppeltes Interpunktionszeichen enthalten. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Ein Zeichenklassenbereich darf nicht durch eine andere Zeichenklasse gebunden werden.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Eine Klasse kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten implementieren.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Eine Klasse kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern implementieren.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Eine Klasse kann einen primitiven Typ wie \"{0}\" nicht erweitern. Klassen können nur konstruierbare Werte erweitern.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Eine Klasse kann keinen primitiven Typ wie \"{0}\" implementieren. Es können nur andere benannte Objekttypen implementiert werden.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Eine Klassendeklaration ohne den default-Modifizierer muss einen Namen besitzen.", + "A_class_member_cannot_have_the_0_keyword_1248": "Ein Klassenmember darf nicht das Schlüsselwort \"{0}\" aufweisen.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Ein Kommaausdruck ist in einem berechneten Eigenschaftennamen unzulässig.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Ein berechneter Eigenschaftenname kann nicht aus seinem enthaltenden Typ auf einen Typparameter verweisen.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Ein berechneter Eigenschaftenname in einer Klasseneigenschaftsdeklaration muss einen einfachen Literaltyp oder den Typ \"unique symbol\" aufweisen.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Ein berechneter Eigenschaftenname in einer Methodenüberladung muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Ein berechneter Eigenschaftenname in einem Typliteral muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Ein berechneter Eigenschaftenname in einem Umgebungskontext muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Ein berechneter Eigenschaftenname in einer Schnittstelle muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Ein berechneter Eigenschaftenname muss vom Typ \"string\", \"number\", \"symbol\" oder \"any\" sein.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Eine „const“-Assertion kann nur auf Referenzen auf Enumerationsmitglieder oder auf String-, Zahlen-, Boolean-, Array- oder Objektliterale angewendet werden.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Auf einen const-Enumerationsmember kann nur mithilfe eines Zeichenfolgenliterals zugegriffen werden.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Bei einem const-Initialisierer in einem Umgebungskontext muss es sich um ein Zeichenfolgen- oder um ein numerisches Literal oder um einen Verweis auf ein Enumerationsliteral handeln.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Ein Konstruktor darf keinen super-Aufruf enthalten, wenn seine Klasse \"null\" erweitert.", + "A_constructor_cannot_have_a_this_parameter_2681": "Ein Konstruktor darf keinen \"this\"-Parameter aufweisen.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Eine continue-Anweisung darf nur in einer einschließenden iteration-Anweisung verwendet werden.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Eine continue-Anweisung kann nur zu einer Bezeichnung einer einschließenden Iterationsanweisung springen.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Eine Deklarationsdatei kann nicht ohne \"import type\" importiert werden. Wollten Sie stattdessen eine Implementierungsdatei \"{0}\" importieren?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Ein declare-Modifizierer darf nicht in einem Kontext verwendet werden, der bereits ein Umgebungskontext ist.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Ein Decorator-Element kann nur für eine Methodenimplementierung und nicht für eine Überladung verwendet werden.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Eine default-Klausel darf nicht mehrmals in einer switch-Anweisung auftreten.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Ein Standardexport kann nur in einem Modul des Typs ECMAScript verwendet werden.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Ein Standardexport muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Eine definitive Zuweisungsassertion \"!\" ist in diesem Kontext nicht zulässig.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Eine destrukturierende Deklaration muss einen Initialisierer besitzen.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Ein dynamischer Importaufruf in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Ein dynamischer Importaufruf gibt \"Promise\" zurück. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihre Option \"--lib\" ein.", + "A_file_cannot_have_a_reference_to_itself_1006": "Eine Datei darf keinen Verweis auf sich selbst enthalten.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Eine Funktion, die \"never\" zurückgibt, kann keinen erreichbaren Endpunkt besitzen.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Eine Funktion, die mit dem Schlüsselwort \"new\" aufgerufen wird, darf keinen \"this\"-Typ aufweisen, der \"void\" ist.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Eine Funktion, deren Typ weder als \"void\" noch als \"any\" deklariert ist, muss einen Wert zurückgeben.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Ein Generator darf keine void-Typanmerkung aufweisen.", + "A_get_accessor_cannot_have_parameters_1054": "Eine get-Zugriffsmethode darf keine Parameter haben.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Eine Get-Zugriffsmethode muss mindestens so zugänglich sein wie der Setter.", + "A_get_accessor_must_return_a_value_2378": "Eine get-Zugriffsmethode muss einen Wert zurückgeben.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Ein bezeichnetes Tupelelement wird optional mit einem Fragezeichen nach dem Namen und vor dem Doppelpunkt deklariert, nicht nach dem Typ.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Ein bezeichnetes Tupelelement wird mit \"...\" vor dem Namen und nicht vor dem Typ als \"rest\" deklariert.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Ein zugeordneter Typ darf keine Eigenschaften oder Methoden deklarieren.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Ein Memberinitialisierer in einer Enumerationsdeklaration darf nicht auf Member verweisen, die anschließend deklariert werden (einschließlich Member, die in anderen Enumerationen definiert sind).", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Eine Mixin-Klasse benötigt einen Konstruktor mit einem einzelnen REST-Parameter des Typs \"any[]\".", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Eine Mixin-Klasse, die aus einer Typvariable mit einer abstrakten Konstruktsignatur erweitert wird, muss auch als \"abstract\" deklariert werden.", + "A_module_cannot_have_multiple_default_exports_2528": "Ein Modul darf nicht mehrere Standardexporte aufweisen.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Eine Namespacedeklaration darf sich nicht in einer anderen Datei als die Klasse oder Funktion befinden, mit der sie zusammengeführt wird.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Eine Namespacedeklaration darf nicht vor der Klasse oder Funktion positioniert werden, mit der sie zusammengeführt wird.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Eine Namespacedeklaration ist nur auf der obersten Ebene eines Namespaces oder Moduls zulässig.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Eine Namespace-Deklaration darf nicht mit dem Schlüsselwort \"module\" deklariert werden. Verwenden Sie stattdessen das Schlüsselwort \"namespace\".", + "A_non_dry_build_would_build_project_0_6357": "Bei einem Build ohne das Flag \"-dry\" würde das Projekt \"{0}\" erstellt.", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Bei einem Build ohne das Flag \"-dry\" würden die folgenden Dateien gelöscht: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Ein Build ohne das Flag \"-dry\" würde die Zeitstempel der Ausgabe von Projekt \"{0}\" aktualisieren.", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Ein Parameterinitialisierer ist nur in einer Funktions- oder Konstruktorimplementierung zulässig.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Eine Parametereigenschaft darf nicht mithilfe eines rest-Parameters deklariert werden.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Eine Parametereigenschaft ist nur in einer Konstruktorimplementierung zulässig.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Eine Parametereigenschaft darf nicht mithilfe eines Bindungsmusters deklariert werden.", + "A_promise_must_have_a_then_method_1059": "Ein Zusage muss eine \"then\"-Methode aufweisen.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Eine Eigenschaft einer Klasse, deren Typ ein \"unique symbol\"-Typ ist, muss sowohl \"static\" als auch \"readonly\" sein.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Eine Eigenschaft einer Schnittstelle oder eines Typliterals, deren Typ ein \"unique symbol\"-Typ ist, muss \"readonly\" sein.", + "A_required_element_cannot_follow_an_optional_element_1257": "Ein erforderliches Element kann nicht auf ein optionales Element folgen.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Ein erforderlicher Parameter darf nicht auf einen optionalen Parameter folgen.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Ein rest-Element darf kein Bindungsmuster enthalten.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Ein rest-Element darf nicht auf ein anderes rest-Element folgen.", + "A_rest_element_cannot_have_a_property_name_2566": "Ein rest-Element darf keinen Eigenschaftennamen aufweisen.", + "A_rest_element_cannot_have_an_initializer_1186": "Ein rest-Element darf keinen Initialisierer aufweisen.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Ein rest-Element muss das letzte Element in einem Destrukturierungsmuster sein.", + "A_rest_element_type_must_be_an_array_type_2574": "Ein rest-Elementtyp muss ein Arraytyp sein.", + "A_rest_parameter_cannot_be_optional_1047": "Ein rest-Parameter darf nicht optional sein.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Ein rest-Parameter darf keinen Initialisierer aufweisen.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Ein rest-Parameter muss in einer Parameterliste der letzte Eintrag sein.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Ein rest-Parameter muss ein Arraytyp sein.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Ein rest-Parameter oder ein Bindungsmuster dürfen kein nachgestelltes Komma aufweisen.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Eine return-Anweisung kann nur in einem Funktionstext verwendet werden.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Eine \"return\"-Anweisung kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Eine Reihe von Einträgen, die Importe zum Nachschlagen von Speicherorten in Bezug auf die \"baseUrl\" neu zuordnen.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Eine set-Zugriffsmethode darf keine Rückgabetypanmerkung aufweisen.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Eine set-Zugriffsmethode darf keinen optionalen Parameter aufweisen.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Eine set-Zugriffsmethode darf keinen rest-Parameter aufweisen.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Eine set-Zugriffsmethode muss genau einen Parameter aufweisen.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Ein set-Zugriffsmethodenparameter darf keinen Initialisierer aufweisen.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Ein Überfüllungsargument muss entweder einen Tupeltyp aufweisen oder an einen Restparameter übergeben werden.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Ein „super“ Aufruf muss eine Anweisung auf Stammebene innerhalb eines Konstruktors einer abgeleiteten Klasse sein, die initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Ein „super“ Aufruf muss die erste Anweisung im Konstruktor sein, um auf „super“ oder „this“ zu verweisen, wenn eine abgeleitete Klasse initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ein auf \"this\" basierender Typwächter ist nicht mit einem parameterbasierten Typwächter kompatibel.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Ein this-Typ ist nur in einem nicht statischen Member einer Klasse oder Schnittstelle verfügbar.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Ein \"export\"-Modifizierer der obersten Ebene kann nicht für Wertdeklarationen in einem CommonJS-Modul verwendet werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Eine Datei \"tsconfig.json\" ist bereits definiert unter: \"{0}\".", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Ein Tupelelement kann nicht gleichzeitig als \"optional\" und als \"rest\" festgelegt werden.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Ein Tupeltyp kann nicht mit einem negativen Wert indiziert werden.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Typassertionsausdrücke sind in der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Typliteraleigenschaften können keinen Initialisierer aufweisen.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Ein reiner Typenimport kann einen Standardimport oder benannte Bindungen angeben, aber nicht beides.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Ein Typprädikat darf nicht auf einen rest-Parameter verweisen.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Ein Typprädikat darf nicht auf ein Element \"{0}\" in einem Bindungsmuster verweisen.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Ein Typprädikat ist nur an der Rückgabetypposition für Funktionen und Methoden zulässig.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Der Typ eines Typprädikats muss dem Typ seines Parameters zugewiesen werden können.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Ein Typ, auf den in einer ergänzten Signatur verwiesen wird, muss mit „import type“ oder einem Namespaceimport importiert werden, wenn „isolatedModules“ und „emitDecoratorMetadata“ aktiviert sind.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Eine Variable, deren Typ ein \"unique symbol\"-Typ ist, muss \"const\" sein.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Ein yield-Ausdruck ist nur in einem Generatortext zulässig.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Auf die abstrakte Methode \"{0}\" in der Klasse \"{1}\" kann nicht über den super-Ausdruck zugegriffen werden.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Abstrakte Methoden können nur in einer abstrakten Klasse verwendet werden.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Auf die abstrakte Eigenschaft \"{0}\" in der Klasse \"{1}\" kann im Konstruktor nicht zugegriffen werden.", + "Accessibility_modifier_already_seen_1028": "Der Zugriffsmodifizierer ist bereits vorhanden.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Zugriffsmethoden sind nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Beide Accessoren müssen abstrakt oder nicht abstrakt sein.", + "Add_0_to_unresolved_variable_90008": "Der nicht aufgelösten Variablen \"{0}.\" hinzufügen", + "Add_a_return_statement_95111": "return-Anweisung hinzufügen", + "Add_a_return_type_to_the_function_declaration_9031": "Fügen Sie der Funktionsdeklaration einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_function_expression_9030": "Fügen Sie dem Funktionsausdruck einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Fügen Sie der get-Accessordeklaration einen Rückgabetyp hinzu.", + "Add_a_return_type_to_the_method_9034": "Der Methode einen Rückgabetyp hinzufügen", + "Add_a_type_annotation_to_the_parameter_0_9028": "Fügen Sie dem Parameter {0} eine Typanmerkung hinzu.", + "Add_a_type_annotation_to_the_property_0_9029": "Fügen Sie der Eigenschaft {0} eine Typanmerkung hinzu.", + "Add_a_type_annotation_to_the_variable_0_9027": "Fügen Sie der Variable {0} eine Typanmerkung hinzu.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Fügen Sie dem Parameter der set-Accessordeklaration einen Typ hinzu.", + "Add_all_missing_async_modifiers_95041": "Alle fehlenden async-Modifizierer hinzufügen", + "Add_all_missing_attributes_95168": "Alle fehlenden Attribute hinzufügen", + "Add_all_missing_call_parentheses_95068": "Alle fehlenden Klammern in Aufrufen hinzufügen", + "Add_all_missing_function_declarations_95157": "Alle fehlenden Funktionsdeklarationen hinzufügen", + "Add_all_missing_imports_95064": "Alle fehlenden Importe hinzufügen", + "Add_all_missing_members_95022": "Alle fehlenden Member hinzufügen", + "Add_all_missing_override_modifiers_95162": "Alle fehlenden override-Modifizierer hinzufügen", + "Add_all_missing_parameters_95190": "Alle fehlenden Parameter hinzufügen", + "Add_all_missing_properties_95166": "Alle fehlenden Eigenschaften hinzufügen", + "Add_all_missing_return_statement_95114": "Alle fehlenden return-Anweisungen hinzufügen", + "Add_all_missing_super_calls_95039": "Alle fehlenden super-Aufrufe hinzufügen", + "Add_all_missing_type_annotations_90067": "Alle fehlenden Typanmerkungen hinzufügen", + "Add_all_optional_parameters_95193": "Alle optionalen Parameter hinzufügen", + "Add_annotation_of_type_0_90062": "Anmerkung vom Typ \"{0}\" hinzufügen", + "Add_async_modifier_to_containing_function_90029": "Async-Modifizierer zur enthaltenden Funktion hinzufügen", + "Add_await_95083": "\"await\" hinzufügen", + "Add_await_to_initializer_for_0_95084": "\"await\" zum Initialisierer für \"{0}\" hinzufügen", + "Add_await_to_initializers_95089": "\"await\" zu Initialisierern hinzufügen", + "Add_braces_to_arrow_function_95059": "Geschweifte Klammern zu Pfeilfunktion hinzufügen", + "Add_const_to_all_unresolved_variables_95082": "\"const\" zu allen nicht aufgelösten Variablen hinzufügen", + "Add_const_to_unresolved_variable_95081": "\"const\" zur nicht aufgelösten Variable hinzufügen", + "Add_definite_assignment_assertion_to_property_0_95020": "Definitive Zuweisungsassertion zu Eigenschaft \"{0}\" hinzufügen", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Allen nicht initialisierten Eigenschaften definitive Zuweisungsassertionen hinzufügen", + "Add_export_to_make_this_file_into_a_module_95097": "\"export {}\" hinzufügen, um diese Datei in ein Modul umzuwandeln", + "Add_extends_constraint_2211": "\"extends\"-Einschränkung hinzufügen", + "Add_extends_constraint_to_all_type_parameters_2212": "\"extends\"-Einschränkung zu allen Typparametern hinzufügen", + "Add_import_from_0_90057": "Import aus \"{0}\" hinzufügen", + "Add_index_signature_for_property_0_90017": "Indexsignatur für die Eigenschaft \"{0}\" hinzufügen", + "Add_initializer_to_property_0_95019": "Initialisierer zu Eigenschaft \"{0}\" hinzufügen", + "Add_initializers_to_all_uninitialized_properties_95027": "Allen nicht initialisierten Eigenschaften Initialisierer hinzufügen", + "Add_missing_attributes_95167": "Fehlende Attribute hinzufügen", + "Add_missing_call_parentheses_95067": "Fehlende Klammern in Aufrufen hinzufügen", + "Add_missing_comma_for_object_member_completion_0_95187": "Fügen Sie ein fehlendes Komma für die Vervollständigung von Objektmembern \"{0}\" hinzu.", + "Add_missing_enum_member_0_95063": "Fehlenden Enumerationsmember \"{0}\" hinzufügen", + "Add_missing_function_declaration_0_95156": "Fehlende Funktionsdeklaration \"{0}\" hinzufügen", + "Add_missing_new_operator_to_all_calls_95072": "Fehlenden new-Operator zu allen Aufrufen hinzufügen", + "Add_missing_new_operator_to_call_95071": "Fehlender new-Operator zum Aufruf hinzufügen", + "Add_missing_parameter_to_0_95188": "Fehlenden Parameter zu \"{0}\" hinzufügen", + "Add_missing_parameters_to_0_95189": "Fehlende Parameter zu \"{0}\" hinzufügen", + "Add_missing_properties_95165": "Fehlende Eigenschaften hinzufügen", + "Add_missing_super_call_90001": "Fehlenden super()-Aufruf hinzufügen", + "Add_missing_typeof_95052": "Fehlenden \"typeof\" hinzufügen", + "Add_names_to_all_parameters_without_names_95073": "Namen zu allen Parametern ohne Namen hinzufügen", + "Add_optional_parameter_to_0_95191": "Optionale Parameter zu \"{0}\" hinzufügen", + "Add_optional_parameters_to_0_95192": "Optionale Parameter zu \"{0}\" hinzufügen", + "Add_or_remove_braces_in_an_arrow_function_95058": "Geschweifte Klammern zu einer Pfeilfunktion hinzufügen oder daraus entfernen", + "Add_override_modifier_95160": "override-Modifizierer hinzufügen", + "Add_parameter_name_90034": "Parameternamen hinzufügen", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Allen nicht aufgelösten Variablen, die einem Membernamen entsprechen, Qualifizierer hinzufügen", + "Add_resolution_mode_import_attribute_95196": "Hinzufügen des Importattributs für den Auflösungsmodus (resolution-mode)", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Hinzufügen des Importattributs für den Auflösungsmodus (resolution-mode) für alle reinen Typimporte, die dieses Attribut benötigen", + "Add_return_type_0_90063": "Rückgabetyp \"{0}\" hinzufügen", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Fügen Sie diesem Ausdruck Erfüllungen und eine Typassertion hinzu (entspricht T als T), um den Typ explizit zu machen.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Erfüllungen und eine Inlinetypassertion mit \"{0}\" hinzufügen", + "Add_to_all_uncalled_decorators_95044": "Allen nicht aufgerufenen Decorators \"()\" hinzufügen", + "Add_ts_ignore_to_all_error_messages_95042": "Allen Fehlermeldungen \"@ts-ignore\" hinzufügen", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Fügen Sie einem Typ „undefined“ hinzu, wenn über einen Index darauf zugegriffen wird.", + "Add_undefined_to_optional_property_type_95169": "„Undefined“ zum optionalen Eigenschaftstyp hinzufügen", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Allen nicht initialisierten Eigenschaften einen nicht definierten Typ hinzufügen", + "Add_undefined_type_to_property_0_95018": "undefined-Typ zu Eigenschaft \"{0}\" hinzufügen", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Konvertierung \"unknown\" für Typen ohne Überschneidung hinzufügen", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "\"unknown\" zu allen Konvertierungen für Typen ohne Überschneidung hinzufügen", + "Add_void_to_Promise_resolved_without_a_value_95143": "\"Void\" zu ohne Wert aufgelöstem Promise hinzufügen", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "\"Void\" allen ohne Wert aufgelösten Promises hinzufügen", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Das Hinzufügen einer \"tsconfig.json\"-Datei erleichtert die Organisation von Projekten, die sowohl TypeScript- als auch JavaScript-Dateien enthalten. Weitere Informationen finden Sie unter https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Alle Deklarationen von \"{0}\" müssen identische Modifizierer aufweisen.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Alle Deklarationen von \"{0}\" müssen identische Modifizierer aufweisen.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Alle Deklarationen von \"{0}\" müssen identische Typparameter aufweisen.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Alle Deklarationen einer abstrakten Methode müssen aufeinanderfolgend sein.", + "All_destructured_elements_are_unused_6198": "Alle destrukturierten Elemente werden nicht verwendet.", + "All_imports_in_import_declaration_are_unused_6192": "Keiner der Importe in der Importdeklaration wird verwendet.", + "All_type_parameters_are_unused_6205": "Sämtliche Typparameter werden nicht verwendet.", + "All_variables_are_unused_6199": "Alle Variablen werden nicht verwendet.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Lassen Sie zu, dass JavaScript-Dateien Teil Ihres Programms werden. Verwenden Sie die Option „checkJS“, um Fehler aus diesen Dateien abzurufen.", + "Allow_accessing_UMD_globals_from_modules_6602": "Zugriff auf globale UMD-Bibliotheken aus Modulen zulassen", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Standardimporte von Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Codeausgabe aus, lediglich auf die Typprüfung.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "\"Import x from y\" zulassen, wenn ein Modul keinen Standardexport hat.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Das Importieren von Hilfsfunktionen aus tslib einmal pro Projekt zulassen, anstatt sie pro Datei einzubeziehen.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Importe dürfen TypeScript-Dateierweiterungen enthalten. Erfordert die Festlegung von \"--moduleResolution bundler\" und \"--noEmit\" oder \"--emitDeclarationOnly\".", + "Allow_javascript_files_to_be_compiled_6102": "Kompilierung von JavaScript-Dateien zulassen.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Lassen Sie zu, dass mehrere Ordner beim Auflösen von Modulen als ein Ordner behandelt werden.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Der bereits enthaltene Dateiname \"{0}\" unterscheidet sich vom Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Die Umgebungsmoduldeklaration darf keinen relativen Modulnamen angeben.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Umgebungsmodule dürfen nicht in andere Module oder Namespaces geschachtelt werden.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Ein AMD-Modul darf nicht mehrere Namenzuweisungen aufweisen.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Ein abstrakter Accessor kann keine Implementierung aufweisen.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Ein Zugriffsmodifizierer kann nicht mit einem privaten Bezeichner verwendet werden.", + "An_accessor_cannot_have_type_parameters_1094": "Eine Zugriffsmethode darf keine Typparameter aufweisen.", + "An_accessor_property_cannot_be_declared_optional_1276": "Eine Accessoreigenschaft kann nicht als optional deklariert werden.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Eine Umgebungsmoduldeklaration ist nur auf der obersten Ebene in einer Datei zulässig.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Für \"{0}\" wurde ein Argument nicht angegeben.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Es wurde kein Argument angegeben, das diesem Bindungsmuster entspricht.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Ein arithmetischer Operand muss vom Typ \"any\", \"number\" oder \"bigint\" oder ein Enumerationstyp sein.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Eine Pfeilfunktion darf keinen this-Parameter aufweisen.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Eine Async-Funktion oder -Methode in ES5 erfordert den Konstruktor \"Promise\". Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Eine asynchrone Funktion oder Methode muss \"Promise\" zurückgeben. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihrer Option \"--lib\" ein.", + "An_async_iterator_must_have_a_next_method_2519": "Ein Async-Iterator muss eine \"next()\"-Async-Methode aufweisen.", + "An_element_access_expression_should_take_an_argument_1011": "Ein Ausdruck für einen Elementzugriff muss ein Argument verwenden.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Ein Enumerationsmember kann nicht mit einem privaten Bezeichner benannt werden.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Ein Enumerationsmember darf keinen numerischen Namen besitzen.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Auf einen Namen eines Enumerationsmembers muss ein \",\", \"=\" oder \"}\" folgen.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Eine erweiterte Version dieser Informationen mit allen möglichen Compileroptionen", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Eine Exportzuweisung darf nicht in einem Modul mit anderen exportierten Elementen verwendet werden.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Eine Exportzuweisung darf nicht in einem Namespace verwendet werden.", + "An_export_assignment_cannot_have_modifiers_1120": "Eine Exportzuweisung darf keine Modifizierer besitzen.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Eine Exportzuweisung muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Eine Exportdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", + "An_export_declaration_cannot_have_modifiers_1193": "Eine Exportdeklaration darf keine Modifizierer besitzen.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Eine \"export =\"-Deklaration muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Eine \"export =\"-Deklaration muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"export default\" muss auf einen reellen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" wird jedoch in eine rein typbasierte Deklaration aufgelöst.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Ein \"export default\" muss auf einen Wert verweisen, wenn \"verbatimModuleSyntax\" aktiviert ist, \"{0}\" verweist jedoch auf einen Typ.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Für einen Ausdruck vom Typ \"void\" kann nicht getestet werden, ob er wahr oder falsch ist.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Ein erweiterter Unicode-Escapewert muss zwischen 0x0 und 0x10FFFF (einschließlich) liegen.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Ein Bezeichner oder ein Schlüsselwort kann nicht direkt auf ein numerisches Literal folgen.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Eine Implementierung darf nicht in Umgebungskontexten deklariert werden.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"export type\" exportiert wurde.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Ein Importalias kann nicht auf eine Deklaration verweisen, die mithilfe von \"import type\" importiert wurde.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Ein Importalias kann nicht in eine Typ- oder nur Typdeklaration aufgelöst werden, wenn \"verbatimModuleSyntax\" aktiviert ist.", + "An_import_alias_cannot_use_import_type_1392": "Ein Importalias kann \"import type\" nicht verwenden.", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Eine Importdeklaration kann nur auf der obersten Ebene eines Moduls verwendet werden.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Eine Importdeklaration kann nur auf der obersten Ebene eines Namespace oder Moduls verwendet werden.", + "An_import_declaration_cannot_have_modifiers_1191": "Eine Importdeklaration darf keine Modifizierer besitzen.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ein Importpfad kann nur mit einer \"{0}\"-Erweiterung enden, wenn \"allowImportingTsExtensions\" aktiviert ist.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Eine Indexsignatur darf keinen rest-Parameter besitzen.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Eine Indexsignatur darf kein nachstehendes Komma aufweisen.", + "An_index_signature_must_have_a_type_annotation_1021": "Eine Indexsignatur muss eine Typanmerkung besitzen.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Eine Indexsignatur muss genau einen Parameter besitzen.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Ein Indexsignaturparameter darf kein Fragezeichen aufweisen.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Ein Indexsignaturparameter darf keinen Zugriffsmodifizierer besitzen.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Ein Indexsignaturparameter darf keinen Initialisierer besitzen.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Ein Indexsignaturparameter muss eine Typanmerkung besitzen.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Ein Indexsignaturparametertyp darf kein Literaltyp oder generischer Typ sein. Erwägen Sie stattdessen die Verwendung eines zugeordneten Objekttyps.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Ein Parametertyp für die Indexsignatur muss \"string\", \"number\", \"symbol\" oder ein Vorlagenliteraltyp sein.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Auf einen Instanziierungsausdruck kann kein Eigenschaftenzugriff folgen.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Eine Schnittstelle kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten erweitern.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Eine Schnittstelle kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern erweitern.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Eine Schnittstelle kann einen primitiven Typ wie \"{0}\" nicht erweitern. Es können nur andere benannte Objekttypen erweitert werden.", + "An_interface_property_cannot_have_an_initializer_1246": "Schnittstelleneigenschaften können keinen Initialisierer aufweisen.", + "An_iterator_must_have_a_next_method_2489": "Ein Iterator muss eine Methode \"next()\" besitzen.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Bei Verwendung eines @jsx-Pragmas mit JSX-Fragmenten wird ein @jsxFrag-Pragma benötigt.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Ein Objektliteral darf nicht mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen besitzen.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Ein Objektliteral darf nicht über mehrere Eigenschaften mit demselben Namen verfügen.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Ein Objektliteral darf nicht eine Eigenschaft und eine Zugriffsmethode mit demselben Namen besitzen.", + "An_object_member_cannot_be_declared_optional_1162": "Ein Objektmember darf nicht als optional deklariert werden.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Die Methode \"[Symbol.hasInstance]\" eines Objekts muss einen booleschen Wert zurückgeben, damit es auf der rechten Seite eines instanceof-Ausdrucks verwendet werden kann.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Eine optionale Kette kann keine privaten Bezeichner enthalten.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Ein optionales Element darf nicht auf ein rest-Element folgen.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Ein äußerer Wert von \"this\" wird durch diesen Container verborgen.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Eine Überladungssignatur darf nicht als ein Generator deklariert werden.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unäre Ausdrücke mit dem Operator \"{0}\" sind auf der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.", + "Annotate_everything_with_types_from_JSDoc_95043": "Alle Funktionen mit Typen aus JSDoc kommentieren", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Erweiterungsfunktionstypen von Eigenschaften in einem Namespace mit Anmerkungen versehen", + "Annotate_with_type_from_JSDoc_95009": "Mit Typ aus JSDoc kommentieren", + "Another_export_default_is_here_2753": "Ein weiterer Exportstandardwert befindet sich hier.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Jede Unicode-Eigenschaft, die möglicherweise mehr als ein einzelnes Zeichen enthalten würde, ist nur verfügbar, wenn das Flag \"Unicode Sets (v)\" festgelegt ist.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Alle Elemente, die möglicherweise mehr als einem einzelnen Zeichen entsprechen, sind innerhalb einer negierten Zeichenklasse ungültig.", + "Are_you_missing_a_semicolon_2734": "Fehlt ein Semikolon?", + "Argument_expression_expected_1135": "Es wurde ein Argumentausdruck erwartet.", + "Argument_for_0_option_must_be_Colon_1_6046": "Das Argument für die Option \"{0}\" muss \"{1}\" sein.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Das Argument des dynamischen Imports kann kein Überfüllungselement sein.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Das Argument vom Typ \"{0}\" kann dem Parameter vom Typ \"{1}\" nicht zugewiesen werden.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Das Argument vom Typ „{0}“ kann dem Parameter vom Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Es wurden keine Argumente für den rest-Parameter \"{0}\" angegeben.", + "Array_element_destructuring_pattern_expected_1181": "Ein Arrayelement-Destrukturierungsmuster wurde erwartet.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Arrays mit Verteilungselementen können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Assertionen erfordern, dass jeder Name im Aufrufziel mit einer expliziten Typanmerkung deklariert wird.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Assertionen erfordern, dass das Aufrufziel ein Bezeichner oder ein qualifizierter Name ist.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Das Zuweisen von Eigenschaften zu Funktionen ohne Deklaration wird mit \"--isolatedDeclarations\" nicht unterstützt. Fügen Sie eine explizite Deklaration für die Eigenschaften hinzu, die dieser Funktion zugewiesen sind.", + "Asterisk_Slash_expected_1010": "\"*/\" wurde erwartet.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Mindestens ein Accessor muss über eine explizite Typanmerkung mit „--isolatedDeclarations“ verfügen.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Erweiterungen für den globalen Bereich können nur in externen Modulen oder Umgebungsmoduldeklarationen direkt geschachtelt werden.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Erweiterungen für den globalen Bereich sollten den Modifizierer \"declare\" aufweisen, wenn sie nicht bereits in einem Umgebungskontext auftreten.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "In Projekt \"{0}\" ist die automatische Erkennung von Eingaben aktiviert. Es wird ein zusätzlicher Auflösungsdurchlauf für das Modul \"{1}\" unter Verwendung von Cachespeicherort \"{2}\" ausgeführt.", + "BUILD_OPTIONS_6919": "BUILDOPTIONEN", + "Backwards_Compatibility_6253": "Abwärtskompatibilität", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Basisklassenausdrücke können nicht auf Klassentypparameter verweisen.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Der Rückgabetyp \"{0}\" des Basiskonstruktors ist kein Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Basiskonstruktoren müssen alle den gleichen Rückgabetyp aufweisen.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Das Basisverzeichnis zum Auflösen nicht absoluter Modulnamen.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "bigint-Literale sind nicht verfügbar, wenn die Zielversion niedriger ist als ES2020.", + "Binary_digit_expected_1177": "Es wurde eine Binärzahl erwartet.", + "Binding_element_0_implicitly_has_an_1_type_7031": "Das Bindungselement \"{0}\" weist implizit einen Typ \"{1}\" auf.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Die blockbezogene Variable \"{0}\" wurde vor ihrer Deklaration verwendet.", + "Build_a_composite_project_in_the_working_directory_6925": "Erstellen Sie ein zusammengesetztes Projekt im Arbeitsverzeichnis.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Erstellen Sie alle Projekte, einschließlich der Projekte, die aktuell zu sein scheinen.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Mindestens ein Projekt und die zugehörigen Abhängigkeiten erstellen, wenn veraltet", + "Build_option_0_requires_a_value_of_type_1_5073": "Die Buildoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", + "Building_project_0_6358": "Projekt \"{0}\" wird erstellt...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Integrierte Iteratoren werden mit dem Typ \"TReturn\" vom Typ \"undefined\" anstelle von \"any\" instanziiert.", + "COMMAND_LINE_FLAGS_6921": "BEFEHLSZEILENFLAGS", + "COMMON_COMMANDS_6916": "ALLGEMEINE BEFEHLE", + "COMMON_COMPILER_OPTIONS_6920": "ALLGEMEINE COMPILEROPTIONEN", + "Call_decorator_expression_90028": "Decorator-Ausdruck aufrufen", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Die Rückgabetypen \"{0}\" und \"{1}\" der Aufrufsignatur sind nicht kompatibel.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Eine Aufrufsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Aufrufsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.", + "Call_target_does_not_contain_any_signatures_2346": "Das Aufrufziel enthält keine Signaturen.", + "Can_only_convert_logical_AND_access_chains_95142": "Es können nur Zugriffsketten mit logischem \"Und\" konvertiert werden.", + "Can_only_convert_named_export_95164": "Nur ein benannter Export kann konvertiert werden.", + "Can_only_convert_property_with_modifier_95137": "Die Eigenschaft kann nur mit einem Modifizierer konvertiert werden.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Nur Zeichenfolgenverkettungen und Zeichenfolgenliterale können konvertiert werden.", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Der Zugriff auf \"{0}.{1}\" ist nicht möglich, da \"{0}\" ein Typ ist, aber kein Namespace. Wollten Sie den Typ der Eigenschaft \"{1}\" in \"{0}\" mit \"{0}[\"{1}\"]\" abrufen?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Auf \"{0}\" aus einer anderen Datei kann nicht ohne Qualifizierung zugegriffen werden, wenn \"{1}\" aktiviert ist. Verwenden Sie stattdessen \"{2}\".", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Auf Umgebungskonstantenenumerationen kann nicht zugegriffen werden, wenn \"{0}\" aktiviert ist.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Ein Konstruktortyp \"{0}\" kann nicht einem Konstruktortyp \"{1}\" zugewiesen werden.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Ein abstrakter Konstruktortyp kann nicht einem nicht abstrakten Konstruktortyp zugewiesen werden.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Klasse handelt.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Konstante handelt.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Funktion handelt.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Namespace handelt.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine schreibgeschützte Eigenschaft handelt.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Enumeration handelt.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Import handelt.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich nicht um eine Variable handelt.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Eine Zuweisung zur private Methode \"{0}\" ist nicht möglich. In private Methoden kann nicht geschrieben werden.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Das Modul \"{0}\" kann nicht erweitert werden, weil es in eine Nicht-Modulentität aufgelöst wird.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Das Modul \"{0}\" kann nicht mit Wertexporten vergrößert werden, da es zu einer Entität aufgelöst wird, die kein Modul darstellt.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Module können nur mithilfe der Option \"{0}\" kompiliert werden, wenn die Kennzeichnung \"-module\" den Wert \"amd\" oder \"system\" aufweist.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Eine Instanz der abstrakten Klasse kann nicht erstellt werden.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Die Iteration kann nicht an einen Wert delegiert werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, aber der enthaltende Generator immer \"{0}\" sendet.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "\"{0}\" kann nicht exportiert werden. Nur lokale Deklarationen können aus einem Modul exportiert werden.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Eine Klasse \"{0}\" kann nicht erweitert werden. Der Klassenkonstruktor ist als privat markiert.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Eine Schnittstelle \"{0}\" kann nicht erweitert werden. Meinten Sie \"implements\"?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Im angegebenen Verzeichnis \"{0}\" wurde keine Datei \"tsconfig.json\" gefunden.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Im angegebenen Verzeichnis \"{0}\" wurde keine \"tsconfig.json\"-Datei gefunden.", + "Cannot_find_global_type_0_2318": "Der globale Typ \"{0}\" wurde nicht gefunden.", + "Cannot_find_global_value_0_2468": "Der globale Wert \"{0}\" wurde nicht gefunden.", + "Cannot_find_lib_definition_for_0_2726": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Die Bibliotheksdefinition für \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Das Modul \"{0}\" wurde nicht gefunden. Erwägen Sie die Verwendung von \"--resolveJsonModule\" zum Importieren eines Moduls mit der Erweiterung \".json\".", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Das Modul \"{0}\" wurde nicht gefunden. Möchten Sie die Option \"moduleResolution\" auf \"nodenext\" festlegen oder Aliase zur Option \"paths\" hinzufügen?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Das Modul \"{0}\" oder die zugehörigen Typdeklarationen wurden nicht gefunden.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Es können keine Modul- oder Typdeklarationen für den Import von Nebeneffekten von „{0}“ gefunden werden.", + "Cannot_find_name_0_2304": "Der Name \"{0}\" wurde nicht gefunden.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie den Instanzmember \"this.{0}\"?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie den statischen Member \"{1}.{0}\"?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Der Name „{0}“ wurde nicht gefunden. Wollten Sie dies in eine asynchrone Funktion schreiben?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{1}\" oder höher.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" so ab, dass sie \"dom\" enthält.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Bun installieren? Versuchen Sie es mit \"npm i --save-dev @types/bun\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"bun\" hinzu.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für einen Test Runner installieren? Versuchen Sie es mit \"npm i --save-dev @types/jest\" oder \"npm i --save-dev @types/mocha\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"jest\" oder \"mocha\" hinzu.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für jQuery installieren? Versuchen Sie es mit \"npm i --save-dev @types/jquery\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für jQuery installieren? Versuchen Sie es mit \"npm i --save-dev @types/jquery\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"jquery\" hinzu.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Node installieren? Versuchen Sie es mit \"npm i --save-dev @types/node\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Der Name \"{0}\" wurde nicht gefunden. Müssen Sie Typdefinitionen für Node installieren? Versuchen Sie es mit \"npm i --save-dev @types/node\", und fügen Sie dann dem Typenfeld in Ihrer tsconfig-Datei \"node\" hinzu.", + "Cannot_find_namespace_0_2503": "Der Namespace \"{0}\" wurde nicht gefunden.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Namespace \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", + "Cannot_find_parameter_0_1225": "Der Parameter \"{0}\" wurde nicht gefunden.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Das gemeinsame Unterverzeichnis für die Eingabedateien wurde nicht gefunden.", + "Cannot_find_type_definition_file_for_0_2688": "Die Typdefinitionsdatei für \"{0}\" wurde nicht gefunden.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Typdeklarationsdateien können nicht importiert werden. Importieren Sie ggf. \"{0}\" anstelle von \"{1}\".", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Die Variable \"{0}\" mit dem äußeren Bereich im gleichen Bereich wie die Deklaration \"{1}\" mit dem Blockbereich kann nicht initialisiert werden.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Ein Objekt, das möglicherweise NULL ist, kann nicht aufgerufen werden.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Ein Objekt, das möglicherweise NULL oder nicht definiert ist, kann nicht aufgerufen werden.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Ein Objekt, das möglicherweise nicht definiert ist, kann nicht aufgerufen werden.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arraydestrukturierung aber immer \"{0}\" sendet.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, die Arrayverteilung aber immer \"{0}\" sendet.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Der Wert kann nicht durchlaufen werden, weil die next-Methode des zugehörigen Iterators den Typ \"{1}\" erwartet, \"for-of\" aber immer \"{0}\" sendet.", + "Cannot_move_statements_to_the_selected_file_95183": "Anweisungen können nicht in die ausgewählte Datei verschoben werden.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Verschieben in Datei nicht möglich, die ausgewählte Datei ist ungültig", + "Cannot_read_file_0_5083": "Die Datei \"{0}\" kann nicht gelesen werden.", + "Cannot_read_file_0_Colon_1_5012": "Die Datei \"{0}\" kann nicht gelesen werden: {1}", + "Cannot_redeclare_block_scoped_variable_0_2451": "Die blockbezogene Variable \"{0}\" Blockbereich kann nicht erneut deklariert werden.", + "Cannot_redeclare_exported_variable_0_2323": "Die exportierte Variable \"{0}\" kann nicht erneut deklariert werden.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Der Bezeichner \"{0}\" in der Catch-Klausel kann nicht erneut deklariert werden.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Kann in einer Typanmerkung keinen Funktionsaufruf starten.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX kann nur verwendet werden, wenn das Flag \"-jsx\" angegeben wird.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "\"export import\" kann nicht für einen Typ oder einen reinen Typnamespace verwendet werden, wenn {0} aktiviert ist.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Es können keine imports-, exports- oder module-Erweiterungen verwendet werden, wenn \"-module\" den Wert \"none\" aufweist.", + "Cannot_use_namespace_0_as_a_type_2709": "Der Namespace \"{0}\" kann nicht als Typ verwendet werden.", + "Cannot_use_namespace_0_as_a_value_2708": "Der Namespace \"{0}\" kann nicht als Wert verwendet werden.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "\"This\" kann nicht in einem statischen Eigenschafteninitialisierer einer ergänzten Klasse verwendet werden.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Die Datei \"{0}\" kann nicht geschrieben werden, weil hierdurch die TSBUILDINFO-Datei überschrieben wird, die durch das referenzierte Projekt \"{1}\" generiert wird.", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie durch mehrere Eingabedateien überschrieben würde.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie eine Eingabedatei überschreiben würde.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Die Variable der Catch-Klausel darf keinen Initialisierer aufweisen.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Die Anmerkung des Variablentyps der catch-Klausel muss \"any\" oder \"unknown\" lauten, sofern angegeben.", + "Change_0_to_1_90014": "\"{0}\" in \"{1}\" ändern", + "Change_all_extended_interfaces_to_implements_95038": "Alle erweiterten Schnittstellen in \"implements\" ändern", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Alle jsdoc-style-Typen in TypeScript ändern", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alle jsdoc-style-Typen in TypeScript ändern (und Nullable-Typen \"| undefined\" hinzufügen)", + "Change_extends_to_implements_90003": "\"extends\" in \"implements\" ändern", + "Change_spelling_to_0_90022": "Schreibweise in \"{0}\" ändern", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Suchen Sie nach Klasseneigenschaften, die im Konstruktor deklariert, aber nicht festgelegt sind.", + "Check_side_effect_imports_6806": "Überprüfen Sie die Nebeneffektimporte.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Überprüfen Sie, ob die Argumente für die Methoden „bind“, „call“ und „apply“ mit der ursprünglichen Funktion übereinstimmen.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Es wird überprüft, ob \"{0}\" das längste übereinstimmende Präfix für \"{1}\"–\"{2}\" ist.", + "Circular_definition_of_import_alias_0_2303": "Zirkuläre Definition des Importalias \"{0}\".", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Eine Zirkularität wurde beim Auflösen der Konfiguration erkannt: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Die Zirkularität stammt vom Typ an diesem Standort.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Die Klasse \"{0}\" definiert die Instanzmember-Zugriffsmethode \"{1}\", die erweiterte Klasse \"{2}\" definiert diesen jedoch als Instanzmemberfunktion.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Die Klasse \"{0}\" definiert die Instanzmember-Zugriffsmethode \"{1}\", die erweiterte Klasse \"{2}\" definiert diese jedoch als Instanzmember-Zugriffsmethode.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Die Klasse \"{0}\" definiert die Instanzmembereigenschaft \"{1}\", die erweiterte Klasse \"{2}\" definiert diese jedoch als Instanzmemberfunktion.", + "Class_0_incorrectly_extends_base_class_1_2415": "Die Klasse \"{0}\" erweitert fälschlicherweise die Basisklasse \"{1}\".", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Die Klasse \"{0}\" implementiert fälschlicherweise die Klasse \"{1}\". Wollten Sie \"{1}\" erweitern und ihre Member als Unterklasse vererben?", + "Class_0_incorrectly_implements_interface_1_2420": "Die Klasse \"{0}\" implementiert fälschlicherweise die Schnittstelle \"{1}\".", + "Class_0_used_before_its_declaration_2449": "Klasse \"{0}\", die vor der Deklaration verwendet wurde.", + "Class_constructor_may_not_be_a_generator_1368": "Der Klassenkonstruktor darf kein Generator sein.", + "Class_constructor_may_not_be_an_accessor_1341": "Der Klassenkonstruktor darf kein Accessor sein.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Die Klassendeklaration kann die Überladungsliste für \"{0}\" nicht implementieren.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Klassendeklarationen dürfen maximal ein \"@augments\"- oder \"@extends\"-Tag aufweisen.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Decorator-Elemente von Klassen können nicht mit einem statischen privaten Bezeichner verwendet werden. Erwägen Sie, das experimentelle Decorator-Element zu entfernen.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Auf das von der übergeordneten Klasse definierte Klassenfeld \"{0}\" kann in der untergeordneten Klasse nicht über \"super\" zugegriffen werden.", + "Class_name_cannot_be_0_2414": "Der Klassenname darf nicht \"{0}\" sein.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Der Klassenname darf nicht „Object“ lauten, wenn ES5 und höher mit Modul „{0}“ als Ziel verwendet wird.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Die statische Seite der Klasse \"{0}\" erweitert fälschlicherweise die statische Seite der Basisklasse \"{1}\".", + "Classes_can_only_extend_a_single_class_1174": "Klassen dürfen nur eine einzelne Klasse erweitern.", + "Classes_may_not_have_a_field_named_constructor_18006": "Klassen dürfen kein Feld mit dem Namen \"constructor\" aufweisen.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Code, der in einer Klasse enthalten ist, wird im Strict-Modus von JavaScript ausgewertet, der diese Verwendung von \"{0}\" nicht zulässt. Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Befehlszeilenoptionen", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Kompilieren Sie das dem Pfad zugewiesene Projekt zu dessen Konfigurationsdatei oder zu einem Ordner mit der Datei \"tsconfig.json\".", + "Compiler_Diagnostics_6251": "Compilerdiagnose", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Die Compileroption \"{0}\" darf keine leere Zeichenfolge erhalten.", + "Compiler_option_0_expects_an_argument_6044": "Die Compileroption \"{0}\" erwartet ein Argument.", + "Compiler_option_0_may_not_be_used_with_build_5094": "Die Compileroption \"--{0}\" darf nicht mit \"--build\" verwendet werden.", + "Compiler_option_0_may_only_be_used_with_build_5093": "Die Compileroption \"--{0}\" darf nur mit \"--build\" verwendet werden.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Die Compileroption „{0}“ des Werts „{1}“ ist instabil. Verwenden Sie „Nightly TypeScript“, um diesen Fehler zu beheben. Versuchen Sie die Aktualisierung mit „npm install -D typescript@next“ durchzuführen.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Die Compileroption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Der Compiler reserviert den Namen \"{0}\", wenn er einen privaten Bezeichner für Vorgängerversionen ausgibt.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiliert das sich am angegebenen Pfad befindliche TypeScript-Projekt.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiliert das aktuelle Projekt (tsconfig.json im Arbeitsverzeichnis.)", + "Compiles_the_current_project_with_additional_settings_6929": "Kompiliert das aktuelle Projekt mit zusätzlichen Einstellungen.", + "Completeness_6257": "Vollständigkeit", + "Composite_projects_may_not_disable_declaration_emit_6304": "In zusammengesetzten Projekten kann die Deklarationsausgabe nicht deaktiviert werden.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Zusammengesetzte Projekte dürfen die inkrementelle Kompilierung nicht deaktivieren.", + "Computed_from_the_list_of_input_files_6911": "Aus der Liste der Eingabedateien berechnet", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Berechnete Eigenschaften müssen Zahlen- oder Zeichenfolgenliterale, Variablen oder gepunktete Ausdrücke mit \"--isolatedDeclarations\" sein.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Berechnete Eigenschaftennamen sind in Enumerationen unzulässig.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Berechnete Eigenschaftsnamen für Klassen- oder Objektliterale können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Berechnete Werte sind in einer Enumeration mit Membern mit Zeichenfolgenwerten nicht zulässig.", + "Concatenate_and_emit_output_to_single_file_6001": "Verketten und Ausgabe in einer Datei speichern.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Bedingungen, die zusätzlich zu den konfliktlöserspezifischen Standardwerten beim Auflösen von Importen festgelegt werden sollen.", + "Conflicts_are_in_this_file_6201": "In dieser Datei liegen Konflikte vor.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Erwägen Sie, dieser Klasse einen declare-Modifizierer hinzuzufügen.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Die Rückgabetypen \"{0}\" und \"{1}\" der Konstruktsignatur sind nicht kompatibel.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Eine Konstruktsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Konstruktsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.", + "Constructor_implementation_is_missing_2390": "Die Konstruktorimplementierung fehlt.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Der Konstruktor der Klasse \"{0}\" ist privat. Auf ihn kann nur innerhalb der Klassendeklaration zugegriffen werden.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Der Konstruktor der Klasse \"{0}\" ist geschützt. Auf ihn kann nur innerhalb der Klassendeklaration zugegriffen werden.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Die Typnotation des Konstruktors muss in Klammern gesetzt werden, wenn sie in einem Union-Typ verwendet wird.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Die Typnotation des Konstruktors muss in Klammern gesetzt werden, wenn sie in einem Intersection-Typ verwendet wird.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktoren für abgeleitete Klassen müssen einen Aufruf \"super\" enthalten.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Die enthaltene Datei wird nicht angegeben, und das Stammverzeichnis kann nicht ermittelt werden. Die Suche im Ordner \"node_modules\" wird übersprungen.", + "Containing_function_is_not_an_arrow_function_95128": "Die enthaltende Funktion ist keine Pfeilfunktion.", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Steuern Sie, welche Methode zum Erkennen von JS-Dateien im Modulformat verwendet wird.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Die Konvertierung des Typs \"{0}\" in den Typ \"{1}\" kann ein Fehler sein, weil die Typen keine ausreichende Überschneidung aufweisen. Wenn dies beabsichtigt war, konvertieren Sie den Ausdruck zuerst in \"unknown\".", + "Convert_0_to_1_in_0_95003": "\"{0}\" in \"{1} in {0}\" konvertieren", + "Convert_0_to_mapped_object_type_95055": "\"{0}\" in zugeordneten Objekttyp konvertieren", + "Convert_all_const_to_let_95102": "Alle \"const\" in \"let\" konvertieren", + "Convert_all_constructor_functions_to_classes_95045": "Alle Konstruktorfunktionen in Klassen konvertieren", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Alle ungültigen Zeichen in HTML-Entitätscode konvertieren", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Alle erneut exportierten Typen in reine Typenexporte konvertieren", + "Convert_all_require_to_import_95048": "Alle Aufrufe von \"require\" in \"import\" konvertieren", + "Convert_all_to_async_functions_95066": "Alle in asynchrone Funktionen konvertieren", + "Convert_all_to_bigint_numeric_literals_95092": "Alle in numerische bigint-Literale konvertieren", + "Convert_all_to_default_imports_95035": "Alle in Standardimporte konvertieren", + "Convert_all_type_literals_to_mapped_type_95021": "Alle Typliterale in einen zugeordneten Typ konvertieren", + "Convert_all_typedef_to_TypeScript_types_95177": "Konvertieren Sie alle typedef in TypeScript-Typen.", + "Convert_arrow_function_or_function_expression_95122": "Pfeilfunktion oder Funktionsausdruck konvertieren", + "Convert_const_to_let_95093": "\"const\" in \"let\" konvertieren", + "Convert_default_export_to_named_export_95061": "Standardexport in benannten Export konvertieren", + "Convert_function_declaration_0_to_arrow_function_95106": "Funktionsdeklaration \"{0}\" in Pfeilfunktion konvertieren", + "Convert_function_expression_0_to_arrow_function_95105": "Funktionsausdruck \"{0}\" in Pfeilfunktion konvertieren", + "Convert_function_to_an_ES2015_class_95001": "Funktion in eine ES2015-Klasse konvertieren", + "Convert_invalid_character_to_its_html_entity_code_95100": "Ungültiges Zeichen in entsprechenden HTML-Entitätscode konvertieren", + "Convert_named_export_to_default_export_95062": "Benannten Export in Standardexport konvertieren", + "Convert_named_imports_to_default_import_95170": "Konvertieren benannter Importe in Standardimporte", + "Convert_named_imports_to_namespace_import_95057": "Benannte Importe in Namespaceimport konvertieren", + "Convert_namespace_import_to_named_imports_95056": "Namespaceimport in benannte Importe konvertieren", + "Convert_overload_list_to_single_signature_95118": "Überladungsliste in einzelne Signatur konvertieren", + "Convert_parameters_to_destructured_object_95075": "Parameter in destrukturiertes Objekt konvertieren", + "Convert_require_to_import_95047": "\"require\" in \"import\" konvertieren", + "Convert_to_ES_module_95017": "In ES-Modul konvertieren", + "Convert_to_a_bigint_numeric_literal_95091": "In numerisches bigint-Literal konvertieren", + "Convert_to_anonymous_function_95123": "In anonyme Funktion konvertieren", + "Convert_to_arrow_function_95125": "In Pfeilfunktion konvertieren", + "Convert_to_async_function_95065": "In asynchrone Funktion konvertieren", + "Convert_to_default_import_95013": "In Standardimport konvertieren", + "Convert_to_named_function_95124": "In benannte Funktion konvertieren", + "Convert_to_optional_chain_expression_95139": "In optionalen Kettenausdruck konvertieren", + "Convert_to_template_string_95096": "In Vorlagenzeichenfolge konvertieren", + "Convert_to_type_only_export_1364": "In reinen Typenexport konvertieren", + "Convert_typedef_to_TypeScript_type_95176": "Konvertieren Sie typedef in den TypeScript-Typ.", + "Corrupted_locale_file_0_6051": "Die Gebietsschemadatei \"{0}\" ist beschädigt.", + "Could_not_convert_to_anonymous_function_95153": "Die Konvertierung in eine anonyme Funktion ist nicht möglich.", + "Could_not_convert_to_arrow_function_95151": "Die Konvertierung in eine Pfeilfunktion ist nicht möglich.", + "Could_not_convert_to_named_function_95152": "Die Konvertierung in eine benannte Funktion ist nicht möglich.", + "Could_not_determine_function_return_type_95150": "Der Rückgabetyp der Funktion konnte nicht bestimmt werden.", + "Could_not_find_a_containing_arrow_function_95127": "Es wurde keine enthaltende Pfeilfunktion gefunden.", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Es wurde keine Deklarationsdatei für das Modul \"{0}\" gefunden. \"{1}\" weist implizit den Typ \"any\" auf.", + "Could_not_find_convertible_access_expression_95140": "Kein konvertierbarer Zugriffsausdruck gefunden", + "Could_not_find_export_statement_95129": "Die Exportanweisung wurde nicht gefunden.", + "Could_not_find_import_clause_95131": "Die Importklausel wurde nicht gefunden.", + "Could_not_find_matching_access_expressions_95141": "Keine übereinstimmenden Zugriffsausdrücke gefunden", + "Could_not_find_name_0_Did_you_mean_1_2570": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?", + "Could_not_find_namespace_import_or_named_imports_95132": "Der Namespaceimport oder benannte Importe wurden nicht gefunden.", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Die Eigenschaft, für die die Zugriffsmethode generiert werden soll, wurde nicht gefunden.", + "Could_not_find_variable_to_inline_95185": "Die Variable zum Inlinevorgang wurde nicht gefunden.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Der Pfad \"{0}\" mit den Erweiterungen konnte nicht aufgelöst werden: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Die Datei \"{0}\" konnte nicht geschrieben werden. {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Erstellen Sie Quellzuordnungsdateien für ausgegebene JavaScript-Dateien.", + "Create_sourcemaps_for_d_ts_files_6614": "Erstellen Sie Quellzuordnungen für d.ts-Dateien.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Erstellt eine tsconfig.json mit den empfohlenen Einstellungen im Arbeitsverzeichnis.", + "DIRECTORY_6038": "VERZEICHNIS", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Dezimale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Dezimalstellen mit führenden Nullen sind nicht zulässig.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Die Deklaration erweitert die Deklaration in einer anderen Datei. Dieser Vorgang kann nicht serialisiert werden.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Die Deklarationsausgabe für diese Datei erfordert, dass dieser Import für Augmentationen beibehalten wird. Dies wird mit \"--isolatedDeclarations\" nicht unterstützt.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" aus dem Modul \"{1}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Die Deklarationsausgabe für diesen Parameter erfordert das implizit undefinierte Hinzufügen zum Typ. Dies wird mit „--isolatedDeclarations“ nicht unterstützt.", + "Declaration_expected_1146": "Es wurde eine Deklaration erwartet.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Der Deklarationsname steht in Konflikt mit dem integrierten globalen Bezeichner \"{0}\".", + "Declaration_or_statement_expected_1128": "Es wurde eine Deklaration oder Anweisung erwartet.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Es wurde eine Deklaration oder Anweisung erwartet. Dieses Gleichheitszeichen (=) folgt auf einen Anweisungsblock. Wenn Sie daher eine Destrukturierungszuweisung schreiben möchten, müssen Sie möglicherweise die gesamte Zuweisung in runde Klammern einschließen.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarationen mit definitiven Zuweisungsassertionen müssen auch Typanmerkungen aufweisen.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarationen mit Initialisierern dürfen keine definitiven Zuweisungsassertionen aufweisen.", + "Declare_a_private_field_named_0_90053": "Deklarieren Sie ein privates Feld mit dem Namen \"{0}\".", + "Declare_method_0_90023": "Methode \"{0}\" deklarieren", + "Declare_private_method_0_90038": "Private Methode \"{0}\" deklarieren", + "Declare_private_property_0_90035": "Private Eigenschaft \"{0}\" deklarieren", + "Declare_property_0_90016": "Eigenschaft \"{0}\" deklarieren", + "Declare_static_method_0_90024": "Statische Methode \"{0}\" deklarieren", + "Declare_static_property_0_90027": "Statische Eigenschaft \"{0}\" deklarieren", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Der Rückgabetyp der Decorator-Funktion „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Der Rückgabetyp der Decorator-Funktion ist „{0}“, es wird jedoch erwartet, dass er „void“ oder „any“ ist.", + "Decorator_used_before_export_here_1486": "Decorator, der hier vor \"export\" verwendet wird.", + "Decorators_are_not_valid_here_1206": "Decorators sind hier ungültig.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Decorators dürfen nicht auf mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen angewendet werden.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Decorators dürfen nicht nach \"export\" oder \"export default\" angezeigt werden, wenn sie auch vor \"export\" angezeigt werden.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Vor dem Namen und allen Schlüsselwörtern von Eigenschaftendeklarationen müssen Decorator-Elemente stehen.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Stellen Sie die Variablen der Catch-Klauseln standardmäßig als „unknown“ anstelle von „any“ ein.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Der Standardexport des Moduls besitzt oder verwendet den privaten Namen \"{0}\".", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Standardexporte können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Standardimporte sind in einem verzögerten Import nicht zulässig.", + "Default_library_1424": "Standardbibliothek", + "Default_library_for_target_0_1425": "Standardbibliothek für Ziel \"{0}\"", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Verzögerte Importe werden nur unterstützt, wenn das Flag „--module“ auf „esnext“ oder „preserve“ festgelegt ist.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definitionen der folgenden Bezeichner stehen in Konflikt mit denen in einer anderen Datei: {0}", + "Delete_all_unused_declarations_95024": "Alle nicht verwendeten Deklarationen löschen", + "Delete_all_unused_imports_95147": "Alle nicht verwendeten Importe löschen", + "Delete_all_unused_param_tags_95172": "Alle nicht verwendeten \"@param\"-Tags löschen", + "Delete_the_outputs_of_all_projects_6365": "Löschen Sie die Ausgaben aller Projekte.", + "Delete_unused_param_tag_0_95171": "Nicht verwendete \"@param\"-Tag-\"{0}\" löschen", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Veraltet] Verwenden Sie stattdessen \"--jsxFactory\". Geben Sie das Objekt an, das für \"createElement\" aufgerufen wurde, wenn das Ziel die JSX-Ausgabe \"react\" ist.", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Veraltet] Verwenden Sie stattdessen \"--outFile\". Verketten und Ausgeben in eine einzige Datei", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Veraltet] Verwenden Sie stattdessen \"--skipLibCheck\". Überspringen Sie die Typüberprüfung der Standardbibliothek-Deklarationsdateien.", + "Deprecated_setting_Use_outFile_instead_6677": "Veraltete Einstellung. Verwenden Sie stattdessen „outFile“.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Haben Sie vergessen, \"await\" zu verwenden?", + "Did_you_mean_0_1369": "Meinten Sie \"{0}\"?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Wollten Sie \"{0}\" auf den Typ \"new (...args: any[]) => {1}\" einschränken?", + "Did_you_mean_to_call_this_expression_6212": "Wollten Sie diesen Ausdruck aufrufen?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Wollten Sie diese Funktion als \"async\" markieren?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Wollten Sie \":\" verwenden? Ein \"=\" kann nur dann auf einen Eigenschaftennamen folgen, wenn das enthaltende Objektliteral Teil eines Destrukturierungsmusters ist.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Wollten Sie \"new\" mit diesem Ausdruck verwenden?", + "Digit_expected_1124": "Eine Ziffer wurde erwartet.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Das Verzeichnis \"{0}\" ist nicht vorhanden, Suchvorgänge darin werden übersprungen.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Das Verzeichnis \"{0}\" enthält keinen package.json-Bereich. Importe werden nicht aufgelöst.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deaktivieren Sie das Hinzufügen von \"Use Strict\"-Direktiven in ausgesendeten JavaScript-Dateien.", + "Disable_checking_for_this_file_90018": "Überprüfung für diese Datei deaktivieren", + "Disable_emitting_comments_6688": "Deaktivieren Sie das Ausgeben von Kommentaren.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deaktivieren Sie das Ausgeben von Deklarationen mit „@internal“ in ihren JSDoc-Kommentaren.", + "Disable_emitting_files_from_a_compilation_6660": "Deaktivieren Sie das Ausgeben von Dateien aus einer Kompilierung.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deaktivieren Sie das Ausgeben von Dateien, wenn Typüberprüfungsfehler gemeldet werden.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deaktivieren Sie das Löschen von „const enum“-Deklarationen in generiertem Code.", + "Disable_error_reporting_for_unreachable_code_6603": "Deaktivieren Sie die Fehlerberichterstattung für nicht erreichbaren Code.", + "Disable_error_reporting_for_unused_labels_6604": "Deaktivieren Sie die Fehlerberichterstattung für nicht verwendete Bezeichnungen.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deaktivieren Sie die vollständige Typüberprüfung (nur kritische Analyse- und Ausgabefehler werden gemeldet).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deaktivieren Sie das Generieren von benutzerdefinierten Hilfsfunktionen wie „__extends“ in der kompilierten Ausgabe.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deaktivieren Sie das Einschließen von Bibliotheksdateien, einschließlich der Standarddatei \"lib.d.ts\".", + "Disable_loading_referenced_projects_6235": "Deaktivieren Sie das Laden referenzierter Projekte.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deaktivieren Sie bevorzugte Quelldateien anstelle von Deklarationsdateien, wenn Sie auf zusammengesetzte Projekte verweisen.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deaktivieren Sie die Meldung übermäßiger Eigenschaftsfehler während der Erstellung von Objektliteralen.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deaktivieren Sie das Auflösen von symlinks in ihren Realpfad. Dies korreliert mit derselben Kennzeichnung im Knoten.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Größenbeschränkungen für JavaScript-Projekte deaktivieren.", + "Disable_solution_searching_for_this_project_6224": "Deaktivieren Sie die Projektmappensuche für dieses Projekt.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deaktivieren Sie die strenge Überprüfung generischer Signaturen in Funktionstypen.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Typ-Akquisition für JavaScript-Projekte deaktivieren", + "Disable_truncating_types_in_error_messages_6663": "Deaktivieren Sie das Abschneiden von Typen in Fehlermeldungen.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deaktivieren Sie die Verwendung von Quelldateien anstelle von Deklarationsdateien aus referenzierten Projekten.", + "Disable_wiping_the_console_in_watch_mode_6684": "Deaktivieren Sie das Zurücksetzen der Konsole im Überwachungsmodus.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deaktiviert den Rückschluss für den Typabruf, indem Dateinamen in einem Projekt betrachtet werden.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Hiermit wird verhindert, dass „import“, „require“ oder „“ die Anzahl der Dateien erweitern, die TypeScript einem Projekt hinzufügen soll.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Verweise mit uneinheitlicher Groß-/Kleinschreibung auf die gleiche Datei nicht zulassen.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Fügen Sie keine Verweise mit dreifachen Schrägstrichen oder importierte Module zur Liste kompilierter Dateien hinzu.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Laufzeitkonstrukte, die nicht Teil von ECMAScript sind, nicht zulassen", + "Do_not_emit_comments_to_output_6009": "Kommentare nicht an die Ausgabe ausgeben.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Deklarationen für Code mit einer Anmerkung \"@internal\" nicht ausgeben.", + "Do_not_emit_outputs_6010": "Keine Ausgaben ausgeben.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Keine Ausgaben ausgeben, wenn Fehler gemeldet wurden.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Keine \"use strict\"-Direktiven in Modulausgabe ausgeben.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "const-Enumerationsdeklarationen im generierten Code nicht löschen.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Erstellen Sie keine benutzerdefinierten Hilfsfunktionen wie \"__extends\" in der kompilierten Ausgabe.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Beziehen Sie die Standardbibliotheksdatei (lib.d.ts) nicht ein.", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Fehler zu nicht erreichbarem Code nicht melden.", + "Do_not_report_errors_on_unused_labels_6074": "Fehler zu nicht verwendeten Bezeichnungen nicht melden.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Tatsächlichen Pfad von symbolischen Verknüpfungen nicht auflösen.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Sie sollten keine Importe oder Exporte transformieren oder ausblenden, die nicht als typgeschützt markiert sind. Stellen Sie sicher, dass sie basierend auf der Einstellung \"module\" im Format der Ausgabedatei geschrieben werden.", + "Do_not_truncate_error_messages_6165": "Kürzen Sie keine Fehlermeldungen.", + "Duplicate_function_implementation_2393": "Doppelte Funktionsimplementierung.", + "Duplicate_identifier_0_2300": "Doppelter Bezeichner \"{0}\".", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls, das asynchrone Funktionen enthält.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Doppelter Bezeichner „{0}“. Der Compiler reserviert den Namen „{1}“ beim Ausgeben von „Super“-Verweisen in statischen Initialisierern.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Doppelter Bezeichner \"{0}\". Der Compiler verwendet die Deklaration \"{1}\", um asynchrone Funktionen zu unterstützen.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Doppelter Bezeichner \"{0}\". Statische Elemente und Instanzelemente dürfen nicht denselben privaten Namen aufweisen.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Doppelter Bezeichner \"arguments\". Der Compiler verwendet \"arguments\" zum Initialisieren der rest-Parameter.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Doppelter Bezeichner \"_newTarget\". Der Compiler verwendet die Variablendeklaration \"_newTarget\" zum Erfassen der Metaeigenschaftenreferenz \"new.target\".", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Doppelter Bezeichner \"_this\". Der Compiler verwendet die Variablendeklaration \"_this\" zum Erfassen des this-Verweises.", + "Duplicate_index_signature_for_type_0_2374": "Doppelte Indexsignatur für Typ \"{0}\".", + "Duplicate_label_0_1114": "Doppelte Bezeichnung \"{0}\".", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Doppelte Eigenschaft: {0}", + "Duplicate_regular_expression_flag_1500": "Doppeltes Flag für reguläre Ausdrücke.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Der Spezifizierer des dynamischen Imports muss den Typ \"string\" aufweisen, hier ist er jedoch vom Typ \"{0}\".", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamische Importe werden nur unterstützt, wenn das Flag „--module“ auf „es2020“, „es2022“, „esnext“, „commonjs“, „amd“, „system“, „umd“, „node16“, „node18“, „node20“ oder „nodenext“ festgelegt ist.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dynamische Importe können nur einen Modulspezifizierer und ein optionales Set mit Attributen als Argumente akzeptieren.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dynamische Importe unterstützen nur ein zweites Argument, wenn die Option „--module“ auf „esnext“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript-Importe und -Exporte können nicht in eine CommonJS-Datei unter „verbatimModuleSyntax“ geschrieben werden.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript-Importe und -Exporte können nicht in eine CommonJS-Datei unter „verbatimModuleSyntax“ geschrieben werden. Passen Sie das Feld „type“ im nächsten „package.json“ an, um diese Datei zu einem ECMAScript-Modul zu machen, oder passen Sie die Einstellungen „verbatimModuleSyntax“, „module“ und „moduleResolution“ in TypeScript an.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Die ECMAScript-Modulsyntax ist in einem CommonJS-Modul nicht zulässig, wenn „module“ auf „preserve“ festgelegt ist.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Jede Deklaration von \"{0}.{1}\" unterscheidet sich in ihrem Wert, wobei \"{2}\" erwartet, aber \"{3}\" angegeben wurde.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Jeder Member des union-Typs \"{0}\" weist Konstruktsignaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Jeder Member des union-Typs \"{0}\" weist Signaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.", + "Editor_Support_6249": "Editor-Unterstützung", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Das Element weist implizit einen Typ \"any\" auf, weil der Ausdruck vom Typ \"{0}\" nicht für den Indextyp \"{1}\" verwendet werden kann.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Das Element weist implizit einen Typ \"any\" auf, weil der Indexausdruck nicht vom Typ \"number\" ist.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst. Wollten Sie \"{1}\" aufrufen?", + "Emit_6246": "Ausgeben", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Geben Sie ECMAScript-standardkonforme Klassenfelder aus.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Geben Sie zu Beginn der Ausgabedateien eine UTF-8-Bytereihenfolge-Marke (BOM) aus.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Geben Sie eine einzelne Datei mit Quellzuordnungen anstelle einer separaten Datei aus.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Geben Sie ein v8-CPU-Profil der Compilerausführung zum Debuggen aus.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Geben Sie zusätzliches JavaScript aus, um die Unterstützung beim Importieren von CommonJS-Modulen zu vereinfachen. Dadurch wird „allowSyntheticDefaultImports“ für die Typkompatibilität aktiviert.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Geben Sie Klassenfelder mit \"Define\" anstelle von \"Set\" aus.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Geben Sie Entwurfstypmetadaten für ergänzte Deklarationen in Quelldateien aus.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Geben Sie mehr kompatibles, aber ausführliches und weniger leistungsfähiges JavaScript für die Iteration aus.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Geben Sie die Quelle zusammen mit den Quellzuordnungen innerhalb einer einzelnen Datei aus; hierfür muss \"--inlineSourceMap\" oder \"--sourceMap\" festgelegt sein.", + "Enable_all_strict_type_checking_options_6180": "Aktivieren Sie alle strengen Typüberprüfungsoptionen.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Aktivieren Sie Farbe und Formatierung in der TypeScript-Ausgabe, um Compilerfehler leichter zu lesen.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Aktivieren Sie Einschränkungen, die die Verwendung eines TypeScript-Projekts mit Projektverweisen ermöglichen.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Aktivieren Sie die Fehlerberichterstattung für Codepfade, die nicht explizit in einer Funktion zurückgegeben werden.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Aktivieren Sie die Fehlerberichterstattung für Ausdrücke und Deklarationen mit einem impliziten „any“-Typ.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Aktivieren Sie die Fehlerberichterstellung für Fallthroughfälle in Switch-Anweisungen.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Aktivieren Sie die Fehlerberichterstattung in typgeprüften JavaScript-Dateien.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Aktivieren Sie die Fehlerberichterstattung, wenn lokale Variablen nicht gelesen werden.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Aktivieren Sie die Fehlerberichterstattung, wenn „this“ den Typ „any“ erhält.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Aktivieren Sie experimentelle Unterstützung für experimentelle Legacy-Decorators.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Hiermit wird das Importieren von Dateien mit beliebiger Erweiterung aktiviert, sofern eine Deklarationsdatei vorhanden ist.", + "Enable_importing_json_files_6689": "Aktivieren Sie das Importieren von JSON-Dateien.", + "Enable_lib_replacement_6808": "Libersetzung aktivieren.", + "Enable_project_compilation_6302": "Projektkompilierung aktivieren", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Aktivieren Sie die strict-Methoden \"bind\", \"call\" und \"apply\" für Funktionen.", + "Enable_strict_checking_of_function_types_6186": "Aktivieren Sie die strenge Überprüfung für Funktionstypen.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Aktivieren Sie die strenge Überprüfung der Eigenschafteninitialisierung in Klassen.", + "Enable_strict_null_checks_6113": "Strenge NULL-Überprüfungen aktivieren.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Aktivieren Sie die Option \"experimentalDecorators\" in Ihrer Konfigurationsdatei.", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Aktivieren Sie das Flag \"--jsx\" in Ihrer Konfigurationsdatei.", + "Enable_tracing_of_the_name_resolution_process_6085": "Ablaufverfolgung des Namensauflösungsvorgangs aktivieren.", + "Enable_verbose_logging_6713": "Aktivieren Sie die ausführliche Protokollierung.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Ermöglicht Ausgabeinteroperabilität zwischen CommonJS- und ES-Modulen durch die Erstellung von Namespaceobjekten für alle Importe. Impliziert \"AllowSyntheticDefaultImports\".", + "Enables_experimental_support_for_ES7_decorators_6065": "Ermöglicht experimentelle Unterstützung für asynchrone ES7-Decorators.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Ermöglicht experimentelle Unterstützung zum Ausgeben von Typmetadaten für Decorators.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Erzwingt die Verwendung indizierter Accessoren für Schlüssel, die mithilfe eines indizierten Typs deklariert wurden.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Stellen Sie sicher, dass überschreibende Member in abgeleiteten Klassen mit einem Überschreibungsmodifizierer markiert sind.", + "Ensure_that_casing_is_correct_in_imports_6637": "Stellen Sie sicher, dass die Groß-/Kleinschreibung beim Import korrekt ist.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Stellen Sie sicher, dass jede Datei sicher transpiliert werden kann, ohne dass andere Importe erforderlich sind.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Stellen Sie sicher, dass \"Use Strict\" immer ausgegeben wird.", + "Entering_conditional_exports_6413": "Bedingte Exporte werden eingegeben.", + "Entry_point_for_implicit_type_library_0_1420": "Einstiegspunkt für implizite Typbibliothek \"{0}\"", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Einstiegspunkt für die implizite Typbibliothek \"{0}\" mit packageId \"{1}\"", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\"", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\" mit packageId \"{1}\"", + "Enum_0_used_before_its_declaration_2450": "Enumeration \"{0}\", die vor der Deklaration wurde.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Enumerationsdeklarationen können nur mit Namespace- oder anderen Enumerationsdeklarationen zusammengeführt werden.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Enumerationsdeklarationen müssen alle konstant oder nicht konstant sein.", + "Enum_member_expected_1132": "Ein Enumerationsmember wurde erwartet.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Der Enumerationsmember, der auf ein nicht literales numerisches Element folgt, muss über einen Initialisierer verfügen, wenn \"isolatedModules\" aktiviert ist.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Enumerationsmemberinitialisierer müssen ohne Verweise auf externe Symbole mit \"--isolatedDeclarations\" berechenbar sein.", + "Enum_member_must_have_initializer_1061": "Ein Enumerationsmember muss einen Initialisierer aufweisen.", + "Enum_name_cannot_be_0_2431": "Der Enumerationsname darf nicht \"{0}\" sein.", + "Environment_Settings_6285": "Umgebungseinstellungen", + "Errors_Files_6041": "Fehlerdateien", + "Escape_sequence_0_is_not_allowed_1488": "Escapesequenz \"{0}\" ist nicht zulässig.", + "Examples_Colon_0_6026": "Beispiele: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Übermäßige Komplexität beim Vergleichen der Typen \"{0}\" und \"{1}\".", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Übermäßige Stapeltiefe beim Vergleichen der Typen \"{0}\" und \"{1}\".", + "Exiting_conditional_exports_6416": "Bedingte Exporte werden beendet.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", + "Expected_0_arguments_but_got_1_2554": "{0} Argumente wurden erwartet, empfangen wurden aber {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Es wurden {0} Argumente erwartet, aber {1} erhalten. Sollte \"void\" in Ihr Typargument in \"Promise\" eingeschlossen werden?", + "Expected_0_type_arguments_but_got_1_2558": "{0} Typenargumente wurden erwartet, empfangen wurden aber {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 Argument erwartet, aber 0 erhalten. „new Promise()“ benötigt einen JSDoc-Hinweis, um einen „resolve“ zu erzeugen, der ohne Argumente aufgerufen werden kann.", + "Expected_a_Unicode_property_name_1523": "Es wurde ein Unicode-Eigenschaftsname erwartet.", + "Expected_a_Unicode_property_name_or_value_1527": "Es wurde ein Unicode-Eigenschaftsname oder -wert erwartet.", + "Expected_a_Unicode_property_value_1525": "Es wurde ein Unicode-Eigenschaftswert erwartet.", + "Expected_a_capturing_group_name_1514": "Es wurde ein Name für die Erfassungsgruppe erwartet.", + "Expected_a_class_set_operand_1520": "Es wurde ein Klassensatzoperand erwartet.", + "Expected_at_least_0_arguments_but_got_1_2555": "Mindestens {0} Argumente wurden erwartet, empfangen wurden aber {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Das entsprechende schließende JSX-Tag wurde für \"{0}\" erwartet.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Für das JSX-Fragment wurde das entsprechende schließende Tag erwartet.", + "Expected_for_property_initializer_1442": "Für den Eigenschafteninitialisierer wurde \"=\" erwartet.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Der erwartete Typ des Felds \"{0}\" in der Datei \"package.json\" lautet \"{1}\", empfangen wurde \"{2}\".", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explizit angegebene Art der Modulauflösung: \"{0}\".", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Die Potenzierung kann für bigint-Werte nur durchgeführt werden, wenn die Option \"target\" auf \"es2016\" oder höher festgelegt ist.", + "Export_0_from_module_1_90059": "Exportieren von \"{0}\" aus Modul \"{1}\"", + "Export_all_referenced_locals_90060": "Alle referenzierten lokalen Elemente exportieren", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Die Exportzuweisung darf nicht verwendet werden, wenn das Ziel ECMAScript-Module sind. Verwenden Sie stattdessen ggf. \"export default\" oder ein anderes Modulformat.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Die Exportzuweisung wird nicht unterstützt, wenn das Flag \"-module\" den Wert \"system\" aufweist.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Die Exportdeklaration verursacht einen Konflikt mit der exportierten Deklaration von \"{0}\".", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Exportdeklarationen sind in einem Namespace unzulässig.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Der Exportspezifizierer \"{0}\" ist im package.json-Bereich beim Pfad \"{1}\" nicht vorhanden.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\" aus dem Modul \"{2}\".", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Die exportierte Variable \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporte und Exportzuweisungen sind in Modulerweiterungen unzulässig.", + "Expression_expected_1109": "Es wurde ein Ausdruck erwartet.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Der Ausdruck muss in Klammern eingeschlossen werden, damit er als Decorator verwendet werden kann.", + "Expression_or_comma_expected_1137": "Es wurde ein Ausdruck oder Komma erwartet.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Der Ausdruck erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Der Ausdruck erzeugt einen union-Typ, der für die Darstellung zu komplex ist.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Der Ausdruck wird in \"_super\" aufgelöst. Damit erfasst der Compiler den Basisklassenverweis.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Der Ausdruck wird in die Variablendeklaration \"_newTarget\" aufgelöst, die der Compiler zum Erfassen der Metaeigenschaftenreferenz \"new.target\" verwendet.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Der Ausdruck wird in die Variablendeklaration \"_this\" aufgelöst, die der Compiler verwendet, um den this-Verweis zu erfassen.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Der Ausdruckstyp kann nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Die Extends-Klausel darf keinen Ausdruck mit \"--isolatedDeclarations\" enthalten.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Die extends-Klausel für den abgeleiteten Typ \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "Extract_base_class_to_variable_90064": "Basisklasse in Variable extrahieren", + "Extract_binding_expressions_to_variable_90066": "Extrahieren von Bindungsausdrücken in eine Variable", + "Extract_constant_95006": "Konstante extrahieren", + "Extract_default_export_to_variable_90065": "Standardexport in Variable extrahieren", + "Extract_function_95005": "Funktion extrahieren", + "Extract_to_0_in_1_95004": "Als {0} nach {1} extrahieren", + "Extract_to_0_in_1_scope_95008": "Als {0} in {1}-Bereich extrahieren", + "Extract_to_0_in_enclosing_scope_95007": "Als {0} in einschließenden Bereich extrahieren", + "Extract_to_interface_95090": "In Schnittstelle extrahieren", + "Extract_to_type_alias_95078": "In Typalias extrahieren", + "Extract_to_typedef_95079": "In TypeDef extrahieren", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "In Variable extrahieren und durch \"{0} as typeof {0}\" ersetzen", + "Extract_type_95077": "Typ extrahieren", + "FILE_6035": "DATEI", + "FILE_OR_DIRECTORY_6040": "DATEI ODER VERZEICHNIS", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Fehler beim Suchen der peerDependency \"{0}\".", + "Failed_to_resolve_under_condition_0_6415": "Fehler beim Auflösen unter der Bedingung \"{0}\".", + "Fallthrough_case_in_switch_7029": "FallThrough-Fall in switch-Anweisung.", + "File_0_does_not_exist_6096": "Die Datei \"{0}\" ist nicht vorhanden.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups nicht vorhanden.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups vorhanden.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Die Datei \"{0}\" ist vorhanden – sie wird als Ergebnis der Namensauflösung verwendet.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Die Datei \"{0}\" weist eine nicht unterstützte Erweiterung auf. Es werden nur die folgenden Erweiterungen unterstützt: {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Die Datei \"{0}\" ist eine JavaScript-Datei. Wollten Sie die Option \"allowJs\" aktivieren?", + "File_0_is_not_a_module_2306": "Die Datei \"{0}\" ist kein Modul.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Die Datei \"{0}\" befindet sich nicht in der Dateiliste von Projekt \"{1}\". Projekte müssen alle Dateien auflisten oder ein include-Muster verwenden.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Datei \"{0}\" befindet sich nicht unter \"rootDir\" \"{1}\". \"rootDir\" muss alle Quelldateien enthalten.", + "File_0_not_found_6053": "Die Datei \"{0}\" wurde nicht gefunden.", + "File_Layout_6284": "Dateilayout", + "File_Management_6245": "Dateiverwaltung", + "File_appears_to_be_binary_1490": "Die Datei scheint binär zu sein.", + "File_change_detected_Starting_incremental_compilation_6032": "Es wurde eine Dateiänderung erkannt. Die inkrementelle Kompilierung wird gestartet...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Die Datei ist ein CommonJS-Modul, da '{0}' nicht das Feld „Typ“ aufweist", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Die Datei ist ein CommonJS-Modul, da '{0}' das Feld „Typ“ aufweist, dessen Wert nicht „Modul“ ist", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Die Datei ist ein CommonJS-Modul, da „package.json“ nicht gefunden wurde", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Die Datei ist ein ECMAScript-Modul, da '{0}' das Feld „Typ“ mit dem Wert „Modul“ aufweist.", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Die Datei ist ein CommonJS-Modul und kann möglicherweise in ein ES-Modul konvertiert werden.", + "File_is_default_library_for_target_specified_here_1426": "Die Datei ist die Standardbibliothek für das hier angegebene Ziel.", + "File_is_entry_point_of_type_library_specified_here_1419": "Die Datei ist ein Einstiegspunkt der hier angegebenen Typbibliothek.", + "File_is_included_via_import_here_1399": "Die Datei wird hier per Import eingeschlossen.", + "File_is_included_via_library_reference_here_1406": "Die Datei wird hier per Bibliotheksverweis eingeschlossen.", + "File_is_included_via_reference_here_1401": "Die Datei wird hier per Verweis eingeschlossen.", + "File_is_included_via_type_library_reference_here_1404": "Die Datei wird hier per Typbibliotheksverweis eingeschlossen.", + "File_is_library_specified_here_1423": "Die Datei ist die hier angegebene Bibliothek.", + "File_is_matched_by_files_list_specified_here_1410": "Die Datei wird mit der hier angegebenen Liste \"files\" abgeglichen.", + "File_is_matched_by_include_pattern_specified_here_1408": "Die Datei wird mit dem hier angegebenen include-Muster abgeglichen.", + "File_is_output_from_referenced_project_specified_here_1413": "Die Datei ist die Ausgabe des hier angegebenen referenzierten Projekts.", + "File_is_output_of_project_reference_source_0_1428": "Die Datei ist die Ausgabe der Projektverweisquelle \"{0}\".", + "File_is_source_from_referenced_project_specified_here_1416": "Die Datei ist die Quelle des hier angegebenen referenzierten Projekts.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Der Dateiname \"{0}\" unterscheidet sich vom bereits enthaltenen Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Der Dateiname \"{0}\" hat eine \"{1}\"-Erweiterung. Stattdessen wird nach \"{2}\" gesucht.", + "File_name_0_has_a_1_extension_stripping_it_6132": "Der Dateiname \"{0}\" weist eine Erweiterung \"{1}\" auf. Diese wird entfernt.", + "File_redirects_to_file_0_1429": "Die Datei leitet an die Datei \"{0}\" um.", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Die Dateispezifikation darf kein übergeordnetes Verzeichnis (\"..\") enthalten, das nach einem rekursiven Verzeichnisplatzhalter (\"**\") angegeben wird: \"{0}\".", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Die Dateispezifikation darf nicht mit einem rekursiven Verzeichnisplatzhalter (\"**\") enden: \"{0}\".", + "Filters_results_from_the_include_option_6627": "Filtert Ergebnisse aus der Option \"include\".", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Alle erkannten Rechtschreibfehler korrigieren", + "Fix_all_expressions_possibly_missing_await_95085": "Korrigieren Sie alle Ausdrücke, in denen \"await\" möglicherweise fehlt.", + "Fix_all_implicit_this_errors_95107": "Alle impliziten this-Fehler beheben", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Alle falschen Rückgabetypen einer asynchronen Funktionen korrigieren", + "Fix_all_with_type_only_imports_95182": "Alle mit rein typbasierten Importen korrigieren", + "For_nodejs_Colon_6287": "Für Node.js:", + "Found_0_errors_6217": "{0} Fehler gefunden.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} Fehler gefunden. Es wird auf Dateiänderungen überwacht.", + "Found_0_errors_in_1_files_6261": "In {1} Dateien wurden {0} Fehler gefunden.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Es wurden {0} Fehler in derselben Datei gefunden, beginnend bei: {1}", + "Found_1_error_6216": "1 Fehler gefunden.", + "Found_1_error_Watching_for_file_changes_6193": "1 Fehler gefunden. Es wird auf Dateiänderungen überwacht.", + "Found_1_error_in_0_6259": "1 Fehler in {0} gefunden", + "Found_package_json_at_0_6099": "\"package.json\" wurde unter \"{0}\" gefunden.", + "Found_peerDependency_0_with_1_version_6282": "Es wurde eine peerDependency \"{0}\" mit Version \"{1}\" gefunden.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Klassendefinitionen befinden sich automatisch im Strict-Modus.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Funktionsdeklarationen sind in Blöcken im Strict-Modus unzulässig, wenn das Ziel \"ES5\" ist. Module befinden sich automatisch im Strict-Modus.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Ein Funktionsausdruck ohne Rückgabetypanmerkung weist implizit einen {0}-Rückgabetyp auf.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Die Funktionsimplementierung fehlt oder folgt nicht unmittelbar auf die Deklaration.", + "Function_implementation_name_must_be_0_2389": "Der Name der Funktionsimplementierung muss \"{0}\" lauten.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Die Funktion weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem ihrer Rückgabeausdrücke verwiesen wird.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Der Funktion fehlt die abschließende return-Anweisung, und der Rückgabetyp enthält nicht \"undefined\".", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Die Funktion muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", + "Function_not_implemented_95159": "Die Funktion ist nicht implementiert.", + "Function_overload_must_be_static_2387": "Die Funktionsüberladung muss statisch sein.", + "Function_overload_must_not_be_static_2388": "Die Funktionsüberladung darf nicht statisch sein.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Union-Typ verwendet wird.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Intersection-Typ verwendet wird.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Ein Funktionstyp ohne Rückgabetypanmerkung weist implizit einen Rückgabetyp \"{0}\" auf.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Eine Funktion mit Textkörpern kann nur mit Umgebungsklassen zusammengeführt werden.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generieren Sie .d.ts-Dateien aus TypeScript- und JavaScript-Dateien in Ihrem Projekt.", + "Generate_get_and_set_accessors_95046": "GET- und SET-Accessoren generieren", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "get- und set-Zugriffsmethoden für alle überschreibenden Eigenschaften generieren", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Generiert ein CPU-Profil.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Generiert eine sourcemap für jede entsprechende .d.ts-Datei.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Generiert eine Ereignisablaufverfolgung und eine Liste von Typen.", + "Generates_corresponding_d_ts_file_6002": "Generiert die entsprechende .d.ts-Datei.", + "Generates_corresponding_map_file_6043": "Generiert die entsprechende MAP-Datei.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Der Generator hat implizit den Yield-Typ '{0}'. Erwägen Sie die Angabe eines Rückgabetyps.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Generatoren sind in einem Umgebungskontext unzulässig.", + "Generic_type_0_requires_1_type_argument_s_2314": "Der generische Typ \"{0}\" erfordert {1} Typargument(e).", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Der generische Typ \"{0}\" benötigt zwischen {1} und {2} Typargumente.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Globale Modulexporte dürfen nur auf der obersten Ebene auftreten.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globale Modulexporte dürfen nur in Deklarationsdateien auftreten.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Globale Modulexporte dürfen nur in Moduldateien auftreten.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Der globale Typ \"{0}\" muss eine Klassen- oder Schnittstellentyp sein.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Der globale Typ \"{0}\" muss {1} Typparameter aufweisen.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Legen Sie für Neukompilierungen in \"--incremental\" und \"--watch\" fest, dass sich Änderungen innerhalb einer Datei nur auf die direkt davon abhängigen Dateien auswirken.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Bei Neukompilierungen in Projekten, die die Modi „incremental“ und „watch“ verwenden, wird davon ausgegangen, dass Änderungen innerhalb einer Datei sich nur direkt auf Dateien auswirken.", + "Hexadecimal_digit_expected_1125": "Es wurde eine hexadezimale Zahl erwartet.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort auf der obersten Ebene eines Moduls.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ein Bezeichner wird erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Es wurde ein Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus. Klassendefinitionen befinden sich automatisch im Strict-Modus.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Es wurde ein Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus. Module befinden sich automatisch im Strict-Modus.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort, das hier nicht verwendet werden kann.", + "Identifier_expected_1003": "Es wurde ein Bezeichner erwartet.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Bezeichner erwartet. \"__esModule\" ist als exportierter Marker für die Umwandlung von ECMAScript-Modulen reserviert.", + "Identifier_or_string_literal_expected_1478": "Bezeichner oder Zeichenfolgenliteral erwartet.", + "Identifier_string_literal_or_number_literal_expected_1496": "Bezeichner, Zeichenfolgenliteral oder Zahlenliteral erwartet.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, erwägen Sie, einen Pull Request zum Ändern von https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1} zu senden.", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, versuchen Sie, eine neue Deklarationsdatei (.d.ts) hinzuzufügen, die Declare-Modul \"{1}\" enthält.", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", + "Ignore_this_error_message_90019": "Diese Fehlermeldung ignorieren", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoriert tsconfig.json und kompiliert die angegebenen Dateien mit den Standardkompilieroptionen.", + "Implement_all_inherited_abstract_classes_95040": "Alle geerbten abstrakten Klassen implementieren", + "Implement_all_unimplemented_interfaces_95032": "Alle nicht implementierten Schnittstellen implementieren", + "Implement_inherited_abstract_class_90007": "Geerbte abstrakte Klasse implementieren", + "Implement_interface_0_90006": "Schnittstelle \"{0}\" implementieren", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Die implements-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Die implizite Konvertierung von \"symbol\" in \"string\" führt zur Laufzeit zu einem Fehler. Erwägen Sie, diesen Ausdruck in \"String(...)\" einzuschließen.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import \"{0}\" steht in Konflikt mit dem in dieser Datei verwendeten globalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import \"{0}\" steht in Konflikt mit dem lokalen Wert. Er muss mit einem reinen Typimport deklariert werden, wenn \"isolatedModules\" aktiviert ist.", + "Import_0_from_1_90013": "\"{0}\" aus \"{1}\" importieren", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Importassertionswerte müssen Zeichenfolgenliteralausdrücke sein.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Importassertionen sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompilieren, nicht zulässig.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Importassertionen werden nur unterstützt, wenn die Option „--module“ auf „esnext“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Importassertionen können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Importassertionen wurden durch Importattribute ersetzt. Verwenden Sie \"with\" anstelle von \"assert\".", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Die Importzuweisung kann nicht verwendet werden, wenn das Ziel ECMAScript-Module sind. Verwenden Sie stattdessen ggf. \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" oder ein anderes Modulformat.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Importattributwerte müssen Zeichenfolgenliteralausdrücke sein.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Importattribute sind für Anweisungen, die in \"require\"-Aufrufe von \"CommonJS\" kompiliert werden, nicht zulässig.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Importattribute werden nur unterstützt, wenn die Option „--module“ auf „esnext“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Importattribute können nicht mit rein typbasierten Importen oder Exporten verwendet werden.", + "Import_declaration_0_is_using_private_name_1_4000": "Die Importdeklaration \"{0}\" verwendet den privaten Namen \"{1}\".", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Die Importdeklaration verursacht einen Konflikt mit der lokalen Deklaration von \"{0}\".", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Importdeklarationen in einem Namespace dürfen nicht auf ein Modul verweisen.", + "Import_emit_helpers_from_tslib_6139": "Ausgabehilfsprogramme aus \"tslib\" importieren.", + "Import_may_be_converted_to_a_default_import_80003": "Der Import kann in einen Standardimport konvertiert werden.", + "Import_name_cannot_be_0_2438": "Der Importname darf nicht \"{0}\" sein.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Import- oder Exportdeklaration in einer Umgebungsmoduldeklaration dürfen nicht über den relativen Modulnamen auf ein Modul verweisen.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Der Importspezifizierer \"{0}\" ist im package.json-Bereich beim Pfad \"{1}\" nicht vorhanden.", + "Imported_via_0_from_file_1_1393": "Importiert über \"{0}\" aus der Datei \"{1}\"", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\"", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "\"Das Importieren einer JSON-Datei in ein ECMAScript-Modul erfordert ein Importattribut 'type: \"json\"', wenn 'module' auf '{0}' gesetzt ist.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importe sind in Modulerweiterungen unzulässig. Verschieben Sie diese ggf. in das einschließende externe Modul.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "In Umgebungsenumerationsdeklarationen muss der Memberinitialisierer ein konstanter Ausdruck sein.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In einer Enumeration mit mehreren Deklarationen kann nur eine Deklaration einen Initialisierer für das erste Enumerationselement ausgeben.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Schließen Sie eine Liste von Dateien ein. Dies unterstützt keine Globmuster im Gegensatz zu \"include\".", + "Include_modules_imported_with_json_extension_6197": "Importierte Module mit der Erweiterung \"JSON\" einschließen", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Fügen Sie den Quellcode in die Quellzuordnungen innerhalb des ausgesendeten JavaScript-Codes ein.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Schließen Sie Quellzuordnungsdateien in das ausgegebene JavaScript ein.", + "Includes_imports_of_types_referenced_by_0_90054": "Schließt Importe von Typen ein, auf die von „{0}“ verwiesen wird", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Bei Einschließung von --watch beginnt -w, das aktuelle Projekt auf Dateiänderungen zu überwachen. Einmal eingestellt, können Sie den Überwachungsmodus konfigurieren, und zwar mit:", + "Incomplete_quantifier_Digit_expected_1505": "Unvollständiger Quantifizierer. Eine Ziffer wurde erwartet.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "Die Indexsignatur für den Typ \"{0}\" fehlt im Typ \"{1}\".", + "Index_signature_in_type_0_only_permits_reading_2542": "Die Indexsignatur in Typ \"{0}\" lässt nur Lesevorgänge zu.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Einzelne Deklarationen in der gemergten Deklaration \"{0}\" müssen alle exportiert oder alle lokal sein.", + "Infer_all_types_from_usage_95023": "Alle Typen aus der Syntax ableiten", + "Infer_function_return_type_95148": "Funktionsrückgabetyp ableiten", + "Infer_parameter_types_from_usage_95012": "Parametertypen aus der Nutzung ableiten", + "Infer_this_type_of_0_from_usage_95080": "Typ \"this\" von \"{0}\" aus Syntax ableiten", + "Infer_type_of_0_from_usage_95011": "Typ von \"{0}\" aus der Nutzung ableiten", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Der Rückschluss von Klassenausdrücken wird mit \"--isolatedDeclarations\" nicht unterstützt.", + "Initialize_property_0_in_the_constructor_90020": "Eigenschaft \"{0}\" im Konstruktor initialisieren", + "Initialize_static_property_0_90021": "Statische Eigenschaft \"{0}\" initialisieren", + "Initializer_for_property_0_2811": "Initialisierer für Eigenschaft \"{0}\"", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Der Initialisierer der Instanzmembervariablen \"{0}\" darf nicht auf den im Konstruktor deklarierten Bezeichner \"{1}\" verweisen.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Initialisierer sind in Umgebungskontexten unzulässig.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialisiert ein TypeScript-Projekt und erstellt eine Datei \"tsconfig.json\".", + "Inline_variable_95184": "Inlinevariable", + "Insert_command_line_options_and_files_from_a_file_6030": "Fügt Befehlszeilenoptionen und Dateien aus einer Datei ein.", + "Install_0_95014": "\"{0}\" installieren", + "Install_all_missing_types_packages_95033": "Alle fehlenden Typenpakete installieren", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Die Schnittstelle \"{0}\" kann die Typen \"{1}\" und \"{2}\" nicht gleichzeitig erweitern.", + "Interface_0_incorrectly_extends_interface_1_2430": "Die Schnittstelle \"{0}\" erweitert fälschlicherweise die Schnittstelle \"{1}\".", + "Interface_declaration_cannot_have_implements_clause_1176": "Die Schnittstellendeklarationen darf keine implements-Klausel aufweisen.", + "Interface_must_be_given_a_name_1438": "Schnittstelle muss einen Namen erhalten.", + "Interface_name_cannot_be_0_2427": "Der Schnittstellenname darf nicht \"{0}\" sein.", + "Interop_Constraints_6252": "Interop-Einschränkungen", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretieren Sie optionale Eigenschaftstypen als geschrieben, statt 'nicht definiert' hinzuzufügen.", + "Invalid_character_1127": "Ungültiges Zeichen.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Der ungültige Importbezeichner \"{0}\" weist keine möglichen Auflösungen auf.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Ungültiger Modulname in Augmentation. Das Modul \"{0}\" wird in ein nicht typisiertes Modul in \"{1}\" aufgelöst, das nicht augmentiert werden kann.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Ungültiger Modulname in der Erweiterung. Das Modul \"{0}\" wurde nicht gefunden.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Ungültige optionale Kette aus neuem Ausdruck. Wollten Sie '{0}()' anrufen?", + "Invalid_reference_directive_syntax_1084": "Ungültige Syntax der reference-Direktive.", + "Invalid_syntax_in_decorator_1498": "Ungültige Syntax im Decorator.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Ungültige Verwendung von \"{0}\". Es kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Ungültige Verwendung von \"{0}\". Module befinden sich automatisch im Strict-Modus.", + "Invalid_use_of_0_in_strict_mode_1100": "Ungültige Verwendung von \"{0}\" im Strict-Modus.", + "Invalid_value_for_ignoreDeprecations_5103": "Ungültiger Wert für \"--ignoreDeprecations\".", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Ungültiger Wert für \"jsxFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Ungültiger Wert für \"jsxFragmentFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Ungültiger Wert für \"-reactNamespace\". \"{0}\" ist kein gültiger Bezeichner.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Möglicherweise fehlt ein Komma, um diese beiden Vorlagenausdrücke zu trennen. Sie bilden einen Vorlagenausdruck mit Tags, der nicht aufgerufen werden kann.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Der zugehörige Elementtyp \"{0}\" ist kein gültiges JSX-Element.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Der zugehörige Instanztyp \"{0}\" ist kein gültiges JSX-Element.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Der Rückgabetyp \"{0}\" ist kein gültiges JSX-Element.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Der zugehörige Typ \"{0}\" ist kein gültiger JSX-Elementtyp.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" entspricht nicht der Klausel \"extends {2}\".", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" ist keiner Klassendeklaration zugeordnet.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Das JSDoc-Tag \"...\" wird möglicherweise nur im letzten Parameter einer Signatur angezeigt.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es gibt jedoch keinen Parameter dieses Namens.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Das JSDoc-Tag \"@param\" weist den Namen \"{0}\" auf, es ist jedoch kein Parameter dieses Namens vorhanden. Es läge eine Übereinstimmung mit \"arguments\" vor, wenn ein Arraytyp vorläge.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef kann in TypeScript-Typ konvertiert werden.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Das JSDoc-Tag \"@typedef\" muss entweder eine Typanmerkung aufweisen, oder die Tags \"@property\" oder \"@member\" müssen darauf folgen.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs können in TypeScript-Typen konvertiert werden.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc-Typen können nur innerhalb von Dokumentationskommentaren verwendet werden.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc-Typen können in TypeScript-Typen verschoben werden.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX-Attributen darf nur ein nicht leeres expression-Objekt zugewiesen werden.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Das JSX-Element \"{0}\" weist kein entsprechendes schließendes Tag auf.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Die JSX-Elementklasse unterstützt keine Attribute, weil sie keine Eigenschaft \"{0}\" aufweist.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Das JSX-Element enthält implizit den Typ \"any\", weil keine Schnittstelle \"JSX.{0}\" vorhanden ist.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Das JSX-Element enthält implizit den Typ \"any\", weil der globale Typ \"JSX.Element\" nicht vorhanden ist.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Der JSX-Elementtyp \"{0}\"weist keine Konstrukt- oder Aufrufsignaturen auf.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX-Elemente dürfen nicht mehrere Attribute mit dem gleichen Namen aufweisen.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX-Ausdrücke dürfen keinen Komma-Operator verwenden. Wollten Sie ein Array schreiben?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX-Ausdrücke müssen ein übergeordnetes Element aufweisen.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Das JSX-Fragment weist kein entsprechendes schließendes Tag auf.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Ausdrücke für den Zugriff auf JSX-Eigenschaften dürfen keine JSX-Namespacenamen enthalten.", + "JSX_spread_child_must_be_an_array_type_2609": "Die untergeordnete JSX-Verteilung muss ein Arraytyp sein.", + "JavaScript_Support_6247": "JavaScript-Unterstützung", + "Jump_target_cannot_cross_function_boundary_1107": "Das Sprungziel darf die Funktionsgrenze nicht überschreiten.", + "KIND_6034": "ART", + "Keywords_cannot_contain_escape_characters_1260": "Schlüsselwörter können keine Escapezeichen enthalten.", + "LOCATION_6037": "SPEICHERORT", + "Language_and_Environment_6254": "Sprache und Umgebung", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Die linke Seite des Kommaoperators wird nicht verwendet besitzt keine Nebenwirkungen.", + "Library_0_specified_in_compilerOptions_1422": "In \"compilerOptions\" angegebene Bibliothek \"{0}\"", + "Library_referenced_via_0_from_file_1_1405": "Bibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird", + "Line_break_not_permitted_here_1142": "Ein Zeilenumbruch ist hier unzulässig.", + "Line_terminator_not_permitted_before_arrow_1200": "Das Zeilenabschlusszeichen ist vor dem Pfeil unzulässig.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Liste der Dateinamensuffixe, die beim Auflösen eines Moduls gesucht werden sollen.", + "List_of_folders_to_include_type_definitions_from_6161": "Liste der Ordner, aus denen Typendefinitionen einbezogen werden sollen.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste der Stammordner, deren kombinierter Inhalt die Struktur des Projekts zur Laufzeit darstellt.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "\"{0}\" wird aus dem Stammverzeichnis \"{1}\" geladen. Speicherort des Kandidaten \"{2}\".", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Modul \"{0}\" wird aus dem Ordner \"node_modules\" geladen, Zieldateitypen: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modul wird als Datei/Ordner geladen, der Speicherort des Kandidatenmoduls ist \"{0}\", Zieldateitypen: {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Protokollpfade, die während des „moduleResolution“-Prozesses verwendet werden.", + "Longest_matching_prefix_for_0_is_1_6108": "Das längste übereinstimmende Präfix für \"{0}\" ist \"{1}\".", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Die Suche erfolgt im Ordner \"node_modules\". Anfangsspeicherort \"{0}\".", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Alle \"super()\"-Aufrufe als erste Anweisung im entsprechenden Konstruktor festlegen", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Stellen Sie ein, dass keyof nur Zeichenfolgen, anstelle von Zeichenfolgen, Zahlen oder Symbolen zurückgibt. Legacy-Option.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "super()-Aufruf als erste Anweisung im Konstruktor festlegen", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Der zugeordnete Objekttyp weist implizit einen any-Vorlagentyp auf.", + "Mark_array_literal_as_const_90070": "Arrayliteral als \"const\" markieren", + "Matched_0_condition_1_6403": "Übereinstimmung mit \"{0}\" Bedingung \"{1}\".", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Standardmäßig zugeordnetes Includemuster „**/*“", + "Matched_by_include_pattern_0_in_1_1407": "Abgeglichen mit dem include-Muster \"{0}\" in \"{1}\"", + "Member_0_implicitly_has_an_1_type_7008": "Der Member \"{0}\" weist implizit den Typ \"{1}\" auf.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Member \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "Merge_conflict_marker_encountered_1185": "Mergekonfliktmarkierung", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Die gemergte Deklaration \"{0}\" darf keine Exportstandarddeklaration enthalten. Fügen Sie ggf. eine separate Deklaration \"export default {0}\" hinzu.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Die Metaeigenschaft \"{0}\" ist nur im Text einer Funktionsdeklaration, eines Funktionsausdrucks oder eines Konstruktors zulässig.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Die Methode \"{0}\" darf keine Implementierung besitzen, weil sie als abstrakt markiert ist.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Die Methode muss eine explizite Rückgabetypanmerkung mit \"--isolatedDeclarations\" aufweisen.", + "Method_not_implemented_95158": "Die Methode ist nicht implementiert.", + "Modifiers_cannot_appear_here_1184": "Modifizierer dürfen hier nicht enthalten sein.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Das Modul \"{0}\" kann nur mit dem Flag \"{1}\" als Standard importiert werden.", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Das Modul \"{0}\" kann nicht mit diesem Konstrukt importiert werden. Der Spezifizierer wird nur in ein ES-Modul aufgelöst, das nicht mit \"require\" importiert werden kann. Verwenden Sie stattdessen einen ECMAScript-Import.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Das Modul \"{0}\" deklariert \"{1}\" lokal, der Export erfolgt jedoch als \"{2}\".", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Das Modul \"{0}\" deklariert \"{1}\" lokal, es erfolgt jedoch kein Export.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Das Modul \"{0}\" verweist nicht auf einen Typ, wird hier aber als Typ verwendet. Meinten Sie \"typeof import('{0}')\"?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Das Modul \"{0}\" verweist nicht auf einen Wert, wird hier aber als Wert verwendet.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Das Modul \"{0}\" hat bereits einen Member mit dem Namen \"{1}\" exportiert. Erwägen Sie, ihn explizit erneut zu exportieren, um die Mehrdeutigkeit zu vermeiden.", + "Module_0_has_no_default_export_1192": "Das Modul \"{0}\" weist keinen Standardexport auf.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Das Modul \"{0}\" weist keinen Standardexport auf. Wollten Sie stattdessen \"import { {1} } from {0}\" verwenden?", + "Module_0_has_no_exported_member_1_2305": "Das Modul \"{0}\" weist keinen exportierten Member \"{1}\" auf.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Das Modul \"{0}\" umfasst keinen exportierten Member \"{1}\". Wollten Sie stattdessen \"import {1} from {0}\" verwenden?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Das Modul \"{0}\" wird durch eine lokale Deklaration mit dem gleichen Namen ausgeblendet.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Das Modul \"{0}\" verwendet \"export =\" und darf nicht mit \"export *\" verwendet werden.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Das Modul \"{0}\" wurde als lokal deklariertes Umgebungsmodul in der Datei \"{1}\" aufgelöst.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--allowArbitraryExtensions\" ist nicht festgelegt.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Das Modul \"{0}\" wurde zu \"{1}\" aufgelöst, aber \"--jsx\" wurde nicht festgelegt.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--resolveJsonModule\" wird nicht verwendet.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Namen der Moduldeklaration dürfen nur Zeichenfolgen enthalten, die von ' oder \" eingeschlossen werden.", + "Module_name_0_matched_pattern_1_6092": "Modulname \"{0}\", übereinstimmendes Muster \"{1}\".", + "Module_name_0_was_not_resolved_6090": "======== Der Modulname \"{0}\" wurde nicht aufgelöst. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Die Art der Modulauflösung wird nicht angegeben. \"{0}\" wird verwendet.", + "Module_resolution_using_rootDirs_has_failed_6111": "Fehler bei der Modulauflösung mithilfe von \"rootDirs\".", + "Modules_6244": "Module", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Modifizierer für bezeichnete Tupelelemente in Bezeichnungen verschieben", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Verschieben Sie den Ausdruck im Standardexport in eine Variable, und fügen Sie ihm eine Typanmerkung hinzu.", + "Move_to_a_new_file_95049": "In neue Datei verschieben", + "Move_to_file_95178": "In Datei verschieben", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Mehrere aufeinander folgende numerische Trennzeichen sind nicht zulässig.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Mehrere Konstruktorimplementierungen sind unzulässig.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NEUE ZEILE", + "Name_is_not_valid_95136": "Der Name ist ungültig.", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Benannte Erfassungsgruppen sind nur verfügbar, wenn das Ziel \"ES2018\" oder höher ist.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Benannte Erfassungsgruppen mit demselben Namen müssen sich gegenseitig ausschließen.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Benannte Importe sind in einem verzögerten Import nicht zulässig.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Benannte Importe aus einer JSON-Datei in ein ECMAScript-Modul sind nicht erlaubt, wenn 'module' auf '{0}'.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Die benannte Eigenschaft \"{0}\" der Typen \"{1}\" und \"{2}\" ist nicht identisch.", + "Namespace_0_has_no_exported_member_1_2694": "Der Namespace \"{0}\" besitzt keinen exportierten Member \"{1}\".", + "Namespace_must_be_given_a_name_1437": "Namespace muss einen Namen erhalten.", + "Namespace_name_cannot_be_0_2819": "Namespacename darf nicht \"{0}\" sein.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces sind in globalen Skriptdateien nicht zulässig, wenn \"{0}\" aktiviert ist. Wenn diese Datei kein globales Skript sein soll, legen Sie \"moduleDetection\" auf \"force\" fest, oder fügen Sie eine leere \"export {}\"-Anweisung hinzu.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Weder Decorators noch Modifizierer können auf \"this\"-Parameter angewendet werden.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Kein Basiskonstruktor weist die angegebene Anzahl von Typargumenten auf.", + "No_constituent_of_type_0_is_callable_2755": "Es ist kein Bestandteil vom Typ \"{0}\" aufrufbar.", + "No_constituent_of_type_0_is_constructable_2759": "Es kann kein Bestandteil vom Typ \"{0}\" erstellt werden.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Für den Typ \"{1}\" wurde keine Indexsignatur mit einem Parameter vom Typ \"{0}\" gefunden.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "In der Konfigurationsdatei \"{0}\" wurden keine Eingaben gefunden. Als include-Pfade wurden \"{1}\", als exclude-Pfade wurden \"{2}\" angegeben.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Wird nicht mehr unterstützt. Legen Sie die Textcodierung für das Lesen von Dateien in früheren Versionen manuell fest.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Keine Überladung erwartet {0} Argumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Argumente erwarten.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Keine Überladung erwartet {0} Typargumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Typargumente erwarten.", + "No_overload_matches_this_call_2769": "Keine Überladung stimmt mit diesem Aufruf überein.", + "No_type_could_be_extracted_from_this_type_node_95134": "Aus diesem Typknoten konnte kein Typ extrahiert werden.", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Im Bereich für die Kompakteigenschaft \"{0}\" ist kein Wert vorhanden. Deklarieren Sie entweder einen Wert, oder geben Sie einen Initialisierer an.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Die nicht abstrakte Klasse \"{0}\" implementiert nicht den geerbten abstrakten Member {1} aus der Klasse \"{2}\".", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "In der nicht abstrakten Klasse \"{0}\" fehlen Implementierungen für die folgenden Member von \"{1}\": {2} und {3} weitere.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Der nicht abstrakte Ausdruck implementiert nicht den geerbten abstrakten Member \"{0}\" aus der Klasse \"{1}\".", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Im nicht abstrakten Klassenausdruck fehlen Implementierungen für die folgenden Member von \"{0}\": {1} und {2} weitere.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Assertionen ungleich NULL können nur in TypeScript-Dateien verwendet werden.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Hier wurde ein nicht einfacher Parameter deklariert.", + "Not_all_code_paths_return_a_value_7030": "Nicht alle Codepfade geben einen Wert zurück.", + "Not_all_constituents_of_type_0_are_callable_2756": "Nicht alle Bestandteile vom Typ \"{0}\" können aufgerufen werden.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Nicht alle Bestandteile vom Typ \"{0}\" können erstellt werden.", + "Numbers_out_of_order_in_quantifier_1506": "Zahlen im Quantifizierer nicht in der richtigen Reihenfolge.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Numerische Literale mit absoluten Werten von 2^53 oder höher sind zu groß, um als ganze Zahlen genau dargestellt werden zu können.", + "Numeric_separators_are_not_allowed_here_6188": "Numerische Trennzeichen sind hier nicht zulässig.", + "Object_is_of_type_unknown_2571": "Das Objekt ist vom Typ \"Unbekannt\".", + "Object_is_possibly_null_2531": "Das Objekt ist möglicherweise \"NULL\".", + "Object_is_possibly_null_or_undefined_2533": "Das Objekt ist möglicherweise \"NULL\" oder \"nicht definiert\".", + "Object_is_possibly_undefined_2532": "Das Objekt ist möglicherweise \"nicht definiert\".", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Das Objektliteral kann nur bekannte Eigenschaften angeben, und \"{0}\" ist im Typ \"{1}\" nicht vorhanden.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Das Objektliteral gibt möglicherweise nur bekannte Eigenschaften an, \"{0}\" ist jedoch im Typ \"{1}\" nicht vorhanden. Wollten Sie \"{2}\" schreiben?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Die Eigenschaft \"{0}\" des Objektliterals weist implizit den Typ \"{1}\" auf.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objekte, die Kurzformeigenschaften enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Objekte, die Verteilungszuweisungen enthalten, können nicht mit \"--isolatedDeclarations\" abgeleitet werden.", + "Octal_digit_expected_1178": "Es wurde eine Oktalzahl erwartet.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Oktale Escapesequenzen und Rückvektoren sind in einer Zeichenklasse nicht zulässig. Wenn dies als Escapesequenz vorgesehen war, verwenden Sie stattdessen die Syntax \"{0}\".", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Oktale Escapesequenzen sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Oktale Literale sind nicht zulässig. Verwenden Sie die Syntax \"{0}\".", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Ein Wert von \"{0}.{1}\" ist die Zeichenfolge \"{2}\", und der andere Wert wird als unbekannter numerischer Wert angenommen.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In einer for...in-Anweisung ist nur eine einzige Variablendeklaration zulässig.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In einer for...of-Anweisung ist nur eine einzige Variablendeklaration zulässig.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Nur eine void-Funktion kann mit dem Schlüsselwort \"new\" aufgerufen werden.", + "Only_ambient_modules_can_use_quoted_names_1035": "Nur Umgebungsmodule dürfen Namen in Anführungszeichen verwenden.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Nur die Module \"amd\" und \"system\" werden in Verbindung mit --{0} unterstützt.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Nur const-Arrays können mit \"--isolatedDeclarations\" abgeleitet werden.", + "Only_emit_d_ts_declaration_files_6014": "Geben Sie nur .d.ts-Deklarationsdateien aus.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Nur d.ts-Dateien und keine JavaScript-Dateien ausgeben.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Nur auf öffentliche und geschützte Methoden der Basisklasse kann über das Schlüsselwort \"super\" zugegriffen werden.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Der Operator \"{0}\" kann nicht auf den Typ \"{1}\" angewendet werden.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Der Operator \"{0}\" darf nicht auf die Typen \"{1}\" und \"{2}\" angewendet werden.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatoren dürfen innerhalb einer Zeichenklasse nicht gemischt werden. Verpacken Sie ihn stattdessen in eine geschachtelte Klasse.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Deaktivieren Sie bei der Bearbeitung ein Projekt von der Überprüfung mehrerer Projektverweise.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Die Option \"{0}={1}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Die Option \"{0}={1}\" ist veraltet und funktioniert in TypeScript {2} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{3}\" an, um diesen Fehler stumm zu schalten.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf FALSE oder NULL festgelegt werden.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf NULL festgelegt werden.", + "Option_0_can_only_be_specified_on_command_line_6266": "Die Option \"{0}\" kann nur in der Befehlszeile angegeben werden.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Die Option \"{0}\" kann nur verwendet werden, wenn die Option \"-inlineSourceMap\" oder \"-sourceMap\" angegeben wird.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Die Option \"{0}\" kann nur verwendet werden, wenn \"moduleResolution\" auf \"node16\", \"nodenext\" oder \"bundler\" festgelegt ist.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Die Option „{0}“ kann nur verwendet werden, wenn „module“ auf „preserve“, „commonjs“, „es2015“ oder höher festgelegt ist.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Die Option \"{0}\" kann nicht angegeben werden, wenn die Option \"jsx\" den Wert \"{1}\" aufweist.", + "Option_0_cannot_be_specified_with_option_1_5053": "Die Option \"{0}\" darf nicht zusammen mit der Option \"{1}\" angegeben werden.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Die Option \"{0}\" darf nicht ohne die Option \"{1}\" angegeben werden.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Die Option \"{0}\" kann nicht ohne die Option \"{1}\" oder \"{2}\" angegeben werden.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Die Option \"{0}\" wurde entfernt. Entfernen Sie sie aus Ihrer Konfiguration.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Die Option \"{0}\" ist veraltet und funktioniert in TypeScript {1} nicht mehr. Geben Sie die compilerOption \"ignoreDeprecations\": \"{2}\" an, um diesen Fehler stumm zu schalten.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Die Option \"{0}\" ist redundant und darf nicht zusammen mit der Option \"{1}\" angegeben werden.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Die Option „allowImportingTsExtensions“ kann nur verwendet werden, wenn eine der Optionen „noEmit“, „emitDeclarationOnly“ oder „rewriteRelativeImportExtensions“ festgelegt ist.", + "Option_build_must_be_the_first_command_line_argument_6369": "Die Option \"--build\" muss das erste Befehlszeilenargument sein.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Die Option \"isolatedModules\" kann nur verwendet werden, wenn entweder die Option \"--module\" angegeben ist oder die Option \"target\" den Wert \"ES2015\" oder höher aufweist.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Die Option \"moduleResolution\" muss auf \"{0}\" festgelegt werden (oder nicht angegeben werden), wenn die Option \"module\" auf \"{1}\" festgelegt ist.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Die Option \"module\" muss auf \"{0}\" festgelegt werden, wenn die Option \"moduleResolution\" auf \"{1}\" festgelegt ist.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Die Option \"preserveConstEnums\" kann nicht deaktiviert werden, wenn \"{0}\" aktiviert ist.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Die Option \"project\" darf nicht mit Quelldateien in einer Befehlszeile kombiniert werden.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"moduleResolution\" auf \"classic\" festgelegt ist.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Die Option \"--resolveJsonModule\" kann nicht angegeben werden, wenn \"module\" auf \"none\", \"system\" oder \"umd\" festgelegt ist.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Die Option \"verbatimModuleSyntax\" kann nicht verwendet werden, wenn \"module\" auf \"UMD\", \"AMD\" oder \"System\" festgelegt ist.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Die Optionen \"{0}\" und \"{1}\" können nicht kombiniert werden.", + "Options_Colon_6027": "Optionen:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Andere Ausgaben", + "Output_Formatting_6256": "Ausgabeformatierung", + "Output_compiler_performance_information_after_building_6615": "Ausgabe Compiler-Leistungsinformationen nach dem Erstellen.", + "Output_directory_for_generated_declaration_files_6166": "Ausgabeverzeichnis für erstellte Deklarationsdateien.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Die Ausgabedatei \"{0}\" wurde nicht aus der Quelldatei \"{1}\" erstellt.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"{1}\" angegeben wurde", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"--module\" als \"none\" angegeben wurde", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Geben Sie ausführlichere Compilerleistungsinformationen nach der Erstellung aus.", + "Overload_0_of_1_2_gave_the_following_error_2772": "Die Überladung {0} von {1} ({2}) hat den folgenden Fehler verursacht.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Überladungssignaturen müssen alle abstrakt oder nicht abstrakt sein.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Überladungssignaturen müssen alle umgebend oder nicht umgebend sein.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Überladungssignaturen müssen alle exportiert oder nicht exportiert sein.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Überladungssignaturen müssen alle optional oder erforderlich sein.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Überladungssignaturen müssen alle öffentlich, privat oder geschützt sein.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Der Parameter \"{0}\" darf nicht auf den anschließend deklarierten Bezeichner \"{1}\" verweisen.", + "Parameter_0_cannot_reference_itself_2372": "Der Parameter \"{0}\" kann nicht auf sich selbst verweisen.", + "Parameter_0_implicitly_has_an_1_type_7006": "Der Parameter \"{0}\" weist implizit einen Typ \"{1}\" auf.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Der Parameter \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Der Parameter \"{0}\" befindet sich nicht an der gleichen Position wie der Parameter \"{1}\".", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Der Parameter \"{0}\" des Accessors besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Der Parameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Der Parameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Der Parameter \"{0}\" des Konstruktors aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Der Parameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Der Parameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Der Parameter \"{0}\" der exportierten Funktion besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Der Parameter \"{0}\" der Indexsignatur aus der exportierten Schnittstelle weist den Namen \"{1}\" aus dem privaten Modul \"{2}\" auf oder verwendet diesen.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Der Parameter \"{0}\" der Indexsignatur aus der exportierten Schnittstelle weist den privaten Namen \"{1}\" auf oder verwendet diesen.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Der Parameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Der Parameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Der Parameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Der Parameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Der Parameter darf kein Fragezeichen und keinen Initialisierer aufweisen.", + "Parameter_declaration_expected_1138": "Eine Parameterdeklaration wurde erwartet.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Der Parameter weist einen Namen, aber keinen Typ auf. Meinten Sie \"{0}: {1}\"?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametermodifizierer können nur in TypeScript-Dateien verwendet werden.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Der Parameter muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Der Parametertyp des öffentlichen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Im Strict-Modus analysieren und \"use strict\" für jede Quelldatei ausgeben.", + "Part_of_files_list_in_tsconfig_json_1409": "Teil der Liste \"files\" in tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Das Muster \"{0}\" darf höchstens ein Zeichen \"*\" aufweisen.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Leistungsdaten zum zeitlichen Ablauf sind für \"--diagnostics\" oder \"--extendedDiagnostics\" in dieser Sitzung nicht verfügbar. Eine native Implementierung der Webleistungs-API wurde nicht gefunden.", + "Platform_specific_6912": "Plattformspezifisch", + "Prefix_0_with_an_underscore_90025": "\"{0}\" einen Unterstrich voranstellen", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Verwenden Sie für alle falschen Eigenschaftendeklarationen das Präfix \"declare\".", + "Prefix_all_unused_declarations_with_where_possible_95025": "Alle nicht verwendeten Deklarationen nach Möglichkeit mit dem Präfix \"_\" versehen", + "Prefix_with_declare_95094": "Präfix \"declare\" voranstellen", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Behalten Sie nicht verwendete importierte Werte in der JavaScript-Ausgabe bei, die andernfalls entfernt werden würden.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Drucken Sie alle Dateien, die während der Kompilierung gelesen wurden.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Während der Kompilierung gelesene Dateien drucken, einschließlich der Gründe für ihre Aufnahme.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Hiermit werden die Namen der Dateien und der Grund dafür ausgegeben, dass die Dateien in der Kompilierung enthalten sind.", + "Print_names_of_files_part_of_the_compilation_6155": "Drucknamen des Dateiteils der Kompilierung.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Hiermit werden Namen der Dateien ausgegeben, die Teil der Kompilierung sind. Anschließend wird die Verarbeitung beendet.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Drucknamen des generierten Dateiteils der Kompilierung.", + "Print_the_compiler_s_version_6019": "Die Version des Compilers ausgeben.", + "Print_the_final_configuration_instead_of_building_1350": "Hiermit wird anstelle eines Builds die endgültige Konfiguration ausgegeben.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Drucken Sie die Namen der ausgegebenen Dateien nach einer Kompilierung.", + "Print_this_message_6017": "Diese Nachricht ausgeben.", + "Private_accessor_was_defined_without_a_getter_2806": "Die private Zugriffsmethode wurde ohne Getter definiert.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Das private Feld \"{0}\" muss in einer einschließenden Klasse deklariert werden.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Private Bezeichner sind in Variablendeklarationen nicht zulässig.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Private Bezeichner sind außerhalb des Textes von Klassen nicht zulässig.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Private Bezeichner sind nur in Klassentexten zulässig und dürfen nur als Teil einer Klassenmitgliedsdeklaration, eines Eigenschaftszugriffs oder auf der linken Seite eines in-Ausdrucks verwendet werden.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Private Bezeichner sind nur verfügbar, wenn als Ziel ECMAScript 2015 oder höher verwendet wird.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Private Bezeichner können nicht als Parameter verwendet werden.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Für einen Typparameter kann nicht auf den privaten oder geschützten Member \"{0}\" zugegriffen werden.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt \"{0}\" kann nicht erstellt werden, weil die Abhängigkeit \"{1}\" Fehler enthält.", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Das Projekt \"{0}\" kann nicht erstellt werden, weil die zugehörige Abhängigkeit \"{1}\" nicht erstellt wurde.", + "Project_0_is_being_forcibly_rebuilt_6388": "Die Neuerstellung des Projekts \"{0}\" wird erzwungen.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Das Projekt \"{0}\" ist veraltet, da die buildinfo-Datei \"{1}\" darauf hinweist, dass die Datei \"{2}\" die Stammdatei der Kompilierung war, es jetzt jedoch nicht mehr ist.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" darauf hinweist, dass das Programm Fehler melden muss.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" angibt, dass einige der Änderungen nicht ausgegeben wurden.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Das Projekt \"{0}\" ist veraltet, da die Buildinfodatei \"{1}\" auf eine Änderung in compilerOptions hinweist.", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe \"{1}\" älter ist als die Eingabe \"{2}\"", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt \"{0}\" ist veraltet, weil die Ausgabedatei \"{1}\" nicht vorhanden ist.", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Das Projekt \"{0}\" ist veraltet, weil die Ausgabe für das Projekt mit Version {1} generiert wurde, die sich von der aktuellen Version {2} unterscheidet.", + "Project_0_is_up_to_date_6361": "Projekt \"{0}\" ist auf dem neuesten Stand.", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt \"{0}\" ist auf dem neuesten Stand, weil die neueste Eingabe \"{1}\" älter ist als die Ausgabe \"{2}\".", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Das Projekt \"{0}\" ist aktuell, muss jedoch Zeitstempel von Ausgabedateien aktualisieren, die älter als Eingabedateien sind.", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt \"{0}\" ist mit .d.ts-Dateien aus den zugehörigen Abhängigkeiten auf dem neuesten Stand.", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Projektverweise dürfen keinen kreisförmigen Graphen bilden. Zyklus erkannt: {0}", + "Projects_6255": "Projekte", + "Projects_in_this_build_Colon_0_6355": "Projekte in diesem Build: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Eigenschaften mit dem Accessormodifizierer sind nur für ECMAScript 2015 und höher verfügbar.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Die Eigenschaft \"{0}\" darf keinen Initialisierer aufweisen, weil sie als abstrakt markiert ist.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Die Eigenschaft \"{0}\" stammt aus einer Indexsignatur. Der Zugriff muss daher mit [\"{0}\"] erfolgen.", + "Property_0_does_not_exist_on_type_1_2339": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Die Eigenschaft \"{0}\" existiert nicht für Typ \"{1}\". Meinten Sie \"{2}\"?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Möchten Sie stattdessen auf den statischen Member \"{2}\" zugreifen?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{2}\" oder höher.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Ändern Sie die Compileroption \"lib\" so, dass sie \"dom\" enthält.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist in einem statischen Klassenblock nicht definitiv zugewiesen.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist im Konstruktor nicht definitiv zugewiesen.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem get-Accessor eine Parametertypanmerkung fehlt.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem set-Accessor eine Parametertypanmerkung fehlt.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, aber für den zugehörigen get-Accessor kann möglicherweise ein besserer Typ aus der Syntax abgeleitet werden.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, aber für den zugehörigen set-Accessor kann möglicherweise ein besserer Typ aus der Syntax abgeleitet werden.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Die Eigenschaft \"{0}\" im Typ \"{1}\" kann nicht der gleichen Eigenschaft in Basistyp \"{2}\" zugewiesen werden.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Die Eigenschaft \"{0}\" im Typ \"{1}\" kann dem Typ \"{2}\" nicht zugewiesen werden.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Die Eigenschaft \"{0}\" im Typ \"{1}\" verweist auf einen anderen Member, auf den nicht aus Typ \"{2}\" zugegriffen werden kann.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "Die Eigenschaft \"{0}\" ist deklariert, aber ihr Wert wird nie gelesen.", + "Property_0_is_incompatible_with_index_signature_2530": "Die Eigenschaft \"{0}\" ist nicht mit der Indexsignatur kompatibel.", + "Property_0_is_missing_in_type_1_2324": "Die Eigenschaft \"{0}\" fehlt im Typ \"{1}\".", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Die Eigenschaft \"{0}\" fehlt im Typ \"{1}\", aber ist im Typ \"{2}\" erforderlich.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Auf die Eigenschaft \"{0}\" kann außerhalb der Klasse \"{1}\" nicht zugegriffen werden, weil sie einen privaten Bezeichner aufweist.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" optional, im Typ \"{2}\" aber erforderlich.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "Die Eigenschaft \"{0}\" ist privat. Auf sie kann nur innerhalb der Klasse \"{1}\" zugegriffen werden.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" privat, im Typ \"{2}\" hingegen nicht.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Die Eigenschaft \"{0}\" ist geschützt und nur über eine Instanz der Klasse \"{1}\" zugänglich. Dies ist eine Instanz der Klasse \"{2}\".", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Die Eigenschaft \"{0}\" ist geschützt. Auf sie kann nur innerhalb der Klasse \"{1}\" und ihrer Unterklassen zugegriffen werden.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Die Eigenschaft \"{0}\" ist geschützt, Typ \"{1}\" ist aber keine von \"{2}\" abgeleitete Klasse.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" geschützt, im Typ \"{2}\" aber öffentlich.", + "Property_0_is_used_before_being_assigned_2565": "Die Eigenschaft \"{0}\" wird vor ihrer Zuweisung verwendet.", + "Property_0_is_used_before_its_initialization_2729": "Die Eigenschaft \"{0}\" wird vor ihrer Initialisierung verwendet.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" möglicherweise nicht vorhanden. Meinten Sie \"{2}\"?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Die Eigenschaft \"{0}\" des JSX-Verteilungsattributs kann nicht der Zieleigenschaft zugewiesen werden.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Die Eigenschaft \"{0}\" des exportierten anonymen Klassentyps ist unter Umständen nicht privat oder geschützt.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Die Eigenschaft \"{0}\" von Typ \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", + "Property_0_was_also_declared_here_2733": "Die Eigenschaft \"{0}\" wurde hier ebenfalls deklariert.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Die Eigenschaft \"{0}\" überschreibt die Basiseigenschaft in \"{1}\". Wenn dies beabsichtigt ist, fügen Sie einen Initialisierer hinzu. Andernfalls fügen Sie einen declare-Modifizierer hinzu, oder entfernen Sie die redundante Deklaration.", + "Property_assignment_expected_1136": "Die Zuweisung einer Eigenschaft wurde erwartet.", + "Property_destructuring_pattern_expected_1180": "Ein Eigenschaftendestrukturierungsmuster wurde erwartet.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Die Eigenschaft muss eine explizite Typanmerkung mit \"--isolatedDeclarations\" aufweisen.", + "Property_or_signature_expected_1131": "Eine Eigenschaft oder Signatur wurde erwartet.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Der Eigenschaftswert kann nur ein Zeichenfolgenliteral, ein numerisches Literal, \"true\", \"false\", \"NULL\", ein Objektliteral oder ein Arrayliteral sein.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Bieten Sie vollständige Unterstützung für Iterablen in \"for-of\", Verteilung und Destrukturierung mit dem Ziel \"ES5\".", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Die öffentliche Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Die öffentliche Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Die öffentliche statische Methode \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Der qualifizierte Name \"{0}\" ist ohne Voranstellung von \"@param {object} {1}\" nicht zulässig.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Löst einen Fehler aus, wenn ein Funktionsparameter nicht gelesen wird.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Fehler für Ausdrücke und Deklarationen mit einem impliziten any-Typ auslösen.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Fehler für \"this\"-Ausdrücke mit einem impliziten any-Typ auslösen.", + "Range_out_of_order_in_character_class_1517": "Der Bereich in der Zeichenklasse liegt außerhalb der Reihenfolge.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Wenn \"{0}\" aktiviert ist, erfordert das erneute Exportieren eines Typs die Verwendung von \"export type\".", + "React_components_cannot_include_JSX_namespace_names_2639": "React-Komponenten dürfen keine JSX-Namespacenamen enthalten.", + "Recommended_Options_6294": "Empfohlene Optionen", + "Redirect_output_structure_to_the_directory_6006": "Die Ausgabestruktur in das Verzeichnis umleiten.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Verringern Sie die Anzahl der Projekte, die von TypeScript automatisch geladen werden.", + "Referenced_project_0_may_not_disable_emit_6310": "Beim referenzierten Projekt \"{0}\" darf nicht die Ausgabe deaktiviert werden.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Das referenzierte Projekt \"{0}\" muss für die Einstellung \"composite\" den Wert TRUE aufweisen.", + "Referenced_via_0_from_file_1_1400": "Referenziert über \"{0}\" aus der Datei \"{1}\"", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Erwägen Sie, dem Importpfad eine Erweiterung hinzuzufügen.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Relative Importpfade erfordern explizite Dateierweiterungen in ECMAScript-Importen, wenn „--moduleResolution“ „node16“ oder „nodenext“ ist. Meinten Sie \"{0}\"?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Entfernen Sie eine Liste von Verzeichnissen aus dem Überwachungsvorgang.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Entfernen Sie eine Liste von Dateien aus der Verarbeitung des Überwachungsmodus.", + "Remove_all_unnecessary_override_modifiers_95163": "Alle nicht benötigten override-Modifizierer entfernen", + "Remove_all_unnecessary_uses_of_await_95087": "Alle nicht benötigten Verwendungen von \"await\" entfernen", + "Remove_all_unreachable_code_95051": "Gesamten nicht erreichbaren Code entfernen", + "Remove_all_unused_labels_95054": "Alle nicht verwendeten Bezeichnungen entfernen", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Entfernen Sie die geschweiften Klammern aus dem Text aller Pfeilfunktionen mit entsprechenden Problemen.", + "Remove_braces_from_arrow_function_95060": "Geschweifte Klammern aus Pfeilfunktion entfernen", + "Remove_braces_from_arrow_function_body_95112": "Geschweifte Klammern aus Pfeilfunktionstext entfernen", + "Remove_import_from_0_90005": "Import aus \"{0}\" entfernen", + "Remove_override_modifier_95161": "override-Modifizierer entfernen", + "Remove_parentheses_95126": "Klammern entfernen", + "Remove_template_tag_90011": "Vorlagentag entfernen", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Entfernen Sie die Obergrenze von 20 MB für die Gesamtgröße des Quellcodes für JavaScript-Dateien auf dem TypeScript-Sprachserver.", + "Remove_type_from_import_declaration_from_0_90055": "„type“ aus Importdeklaration aus „{0}“ entfernen", + "Remove_type_from_import_of_0_from_1_90056": "„type“ aus Import von „{0}“ aus „{1}“ entfernen", + "Remove_type_parameters_90012": "Typparameter entfernen", + "Remove_unnecessary_await_95086": "Unnötige Vorkommen von \"await\" entfernen", + "Remove_unreachable_code_95050": "Nicht erreichbaren Code entfernen", + "Remove_unused_declaration_for_Colon_0_90004": "Nicht verwendete Deklaration für \"{0}\" entfernen", + "Remove_unused_declarations_for_Colon_0_90041": "Nicht verwendete Deklarationen für \"{0}\" entfernen", + "Remove_unused_destructuring_declaration_90039": "Nicht verwendete Destrukturierungsdeklaration entfernen", + "Remove_unused_label_95053": "Nicht verwendete Bezeichnung entfernen", + "Remove_variable_statement_90010": "Variablenanweisung entfernen", + "Rename_param_tag_name_0_to_1_95173": "Tagnamen \"@param\" \"{0}\" in \"{1}\" umbenennen", + "Replace_0_with_Promise_1_90036": "\"{0}\" durch \"Promise<{1}>\" ersetzen", + "Replace_all_unused_infer_with_unknown_90031": "Alle nicht verwendeten Vorkommen von \"infer\" durch \"unknown\" ersetzen", + "Replace_import_with_0_95015": "Ersetzen Sie den Import durch \"{0}\".", + "Replace_infer_0_with_unknown_90030": "\"infer {0}\" durch \"unknown\" ersetzen", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Fehler melden, wenn nicht alle Codepfade in der Funktion einen Wert zurückgeben.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Für FallTrough-Fälle in switch-Anweisung Fehler melden.", + "Report_errors_in_js_files_8019": "Fehler in .js-Dateien melden.", + "Report_errors_on_unused_locals_6134": "Fehler für nicht verwendete lokale Variablen melden.", + "Report_errors_on_unused_parameters_6135": "Fehler für nicht verwendete Parameter melden.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Fordern Sie eine ausreichende Anmerkung zu Exporten an, damit andere Tools Deklarationsdateien trivial generieren können.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Nicht deklarierte Eigenschaften aus Indexsignaturen müssen Elementzugriffe verwenden.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Erforderliche Typparameter dürfen nicht auf optionale Typparameter folgen.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Die Auflösung für das Modul \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Die Auflösung für die Typreferenzanweisung \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Fehler beim Auflösen des nicht relativen Namens. Es wird versucht, moderne Funktionen zur Knotenauflösung zu deaktivieren, um festzustellen, ob die npm-Bibliothek eine Konfigurationsaktualisierung erfordert.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Fehler beim Auflösen des nicht relativen Namens. Mit \"--moduleResolution bundler\" wird versucht festzustellen, ob das Projekt möglicherweise aktualisiert werden muss.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "\"keyof\" darf nur in Eigenschaftennamen mit Zeichenfolgenwert aufgelöst werden (keine Ziffern oder Symbole).", + "Resolved_under_condition_0_6414": "Aufgelöst unter Bedingung \"{0}\".", + "Resolving_in_0_mode_with_conditions_1_6402": "Wird im {0}-Modus mit Bedingungen \"{1}\" aufgelöst.", + "Resolving_module_0_from_1_6086": "======== Das Modul \"{0}\" aus \"{1}\" wird aufgelöst. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Der Modulname \"{0}\" relativ zur Basis-URL \"{1}\"–\"{2}\" wird aufgelöst.", + "Resolving_real_path_for_0_result_1_6130": "Der tatsächliche Pfad für \"{0}\" wird aufgelöst, Ergebnis \"{1}\".", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist \"{2}\". ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist nicht festgelegt. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist \"{1}\". ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist nicht festgelegt. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Die Typverweisdirektive für das Programm, das benutzerdefinierte typeRoots angibt, wird aufgelöst. Lookup im Ordner \"node_modules\" wird übersprungen.", + "Resolving_with_primary_search_path_0_6121": "Die Auflösung erfolgt mit dem primären Suchpfad \"{0}\".", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Der rest-parameter \"{0}\" weist implizit einen Typ \"any[]\" auf.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Der rest-Parameter \"{0}\" weist implizit einen Typ \"any[]\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "Rest_types_may_only_be_created_from_object_types_2700": "Rest-Typen dürfen nur aus object-Typen erstellt werden.", + "Return_type_annotation_circularly_references_itself_2577": "Die Rückgabetypanmerkung verweist zirkulär auf sich selbst.", + "Return_type_must_be_inferred_from_a_function_95149": "Der Rückgabetyp muss aus einer Funktion abgeleitet werden.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Der Rückgabetyp der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Der Rückgabetyp der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Der Rückgabetyp der Konstruktorsignatur muss dem Instanztyp der Klasse zugewiesen werden können.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Der Rückgabetyp der exportierten Funktion besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Der Rückgabetyp der Indexsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Der Rückgabetyp der Indexsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Der Rückgabetyp der Methode aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Der Rückgabetyp der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Der Rückgabetyp des öffentlichen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Der Rückgabetyp der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Der Rückgabetyp des öffentlichen statischen Getters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Die Auflösung des Moduls „{0}“ aus „{1}\" im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.", + "Rewrite_all_as_indexed_access_types_95034": "Alle als indizierte Zugriffstypen neu schreiben", + "Rewrite_as_the_indexed_access_type_0_90026": "Als indizierten Zugriffstyp \"{0}\" neu schreiben", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Schreiben Sie die Dateiendungen '.ts', '.tsx', '.mts' und '.cts' in relativen Importpfaden in ihren JavaScript-Äquivalenten in den Ausgabedateien um.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Rechter Operand von ?? ist nicht erreichbar, weil der linke Operand nie \"NULLISH\" ist.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Das Stammverzeichnis kann nicht ermittelt werden. Die primären Suchpfade werden übersprungen.", + "Root_file_specified_for_compilation_1427": "Für die Kompilierung angegebene Stammdatei", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATEGIE", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Speichern Sie die .tsbuildinfo-Dateien, um eine inkrementelle Kompilierung von Projekten zuzulassen.", + "Saw_non_matching_condition_0_6405": "Die nicht übereinstimmende Bedingung \"{0}\" wurde angezeigt.", + "Scoped_package_detected_looking_in_0_6182": "Bereichsbezogenes Paket erkannt. In \"{0}\" wird gesucht", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Alle node_modules-Vorgängerverzeichnisse werden nach Fallbackerweiterungen durchsucht: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Alle node_modules-Vorgängerverzeichnisse werden nach bevorzugten Erweiterungen durchsucht: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Siehe auch https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Die Auswahl umfasst keine gültigen Anweisungen.", + "Selection_is_not_a_valid_type_node_95133": "Die Auswahl ist kein gültiger Typknoten.", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Legen Sie die JavaScript-Sprachversion für das ausgegebene JavaScript fest, und schließen Sie kompatible Bibliotheksdeklarationen ein.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Legen Sie die Sprache des Messagings von TypeScript fest. Dies wirkt sich nicht auf die Ausgabe aus.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Legen Sie die Option \"module\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.", + "Set_the_newline_character_for_emitting_files_6659": "Legen Sie das Zeilenumbruchzeichen für Ausgabedateien fest.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Legen Sie die Option \"target\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.", + "Setters_cannot_return_a_value_2408": "Setter können keinen Wert zurückgeben.", + "Show_all_compiler_options_6169": "Alle Compileroptionen anzeigen.", + "Show_diagnostic_information_6149": "Diagnoseinformationen anzeigen.", + "Show_verbose_diagnostic_information_6150": "Ausführliche Diagnoseinformationen anzeigen.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Anzeigen, was erstellt würde (oder gelöscht würde, wenn mit \"--clean\" angegeben)", + "Signature_0_must_be_a_type_predicate_1224": "Die Signatur \"{0}\" muss ein Typprädikat sein.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Signaturdeklarationen können nur in TypeScript-Dateien verwendet werden.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Überspringen Sie die Erstellung von Downstreamprojekten bei einem Fehler im Upstreamprojekt.", + "Skip_type_checking_all_d_ts_files_6693": "Überspringen Sie die Typüberprüfung aller .d.ts-Dateien.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Überspringen Sie die Typüberprüfung von .d.ts-Dateien, die in TypeScript enthalten sind.", + "Skip_type_checking_of_declaration_files_6012": "Überspringen Sie die Typüberprüfung von Deklarationsdateien.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Das Erstellen von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" einen Fehler aufweist.", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Das Kompilieren von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" nicht erstellt wurde.", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Modul \"{0}\", das wie ein absoluter URI aussieht, wird übersprungen, Zieldateitypen: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Quelle aus referenziertem Projekt \"{0}\", da \"{1}\" angegeben wurde", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Quelle aus referenziertem Projekt \"{0}\", da \"--module\" als \"none\" angegeben wurde", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Die Quelle weist {0} Element(e) auf, aber das Ziel lässt nur {1} zu.", + "Source_has_0_element_s_but_target_requires_1_2618": "Die Quelle weist {0} Element(e) auf, aber das Ziel erfordert {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Die Quelle weist keine Übereinstimmung für das erforderliche Element an Position {0} im Ziel auf.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Die Quelle weist keine Übereinstimmung für das variadic-Element an Position {0} im Ziel auf.", + "Specify_ECMAScript_target_version_6015": "Geben Sie die ECMAScript-Zielversion an.", + "Specify_JSX_code_generation_6080": "Geben Sie die JSX-Codegenerierung an.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Geben Sie eine Datei an, die alle Ausgaben in einer JavaScript-Datei bündelt. Wenn „declaration“ TRUE ist, wird auch eine Datei festgelegt, die alle „.d.ts“-Ausgaben bündelt.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Geben Sie eine Liste von Globmustern an, die mit Dateien übereinstimmen, die in die Kompilierung einbezogen werden sollen.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Geben Sie eine Liste der einzuschließenden Sprachdienst-Plug-Ins an.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Geben Sie einen Satz gebündelter Bibliotheksdeklarationsdateien an, die die Ziellaufzeitumgebung beschreiben.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Geben Sie einen Satz von Einträgen an, die Importe an zusätzliche Lookup-Speicherorte neu zuordnen.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Geben Sie ein Objektarray an, das Pfade für Projekte angibt. Wird in Projekt verweisen verwendet.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Geben Sie einen Ausgabeordner für alle ausgegebenen Dateien an.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Geben Sie das Ausgabe-/Überprüfungsverhalten für Importe an, die nur für Typen verwendet werden.", + "Specify_file_to_store_incremental_compilation_information_6380": "Datei zum Speichern inkrementeller Kompilierungsinformationen angeben", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Geben Sie an, wie TypeScript eine Datei aus einem angegebenen Modulspezifizierer sucht.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Geben Sie an, wie Verzeichnisse auf Systemen überwacht werden, für die eine rekursive Dateiüberwachungsfunktion fehlt.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Geben Sie an, wie der TypeScript-Überwachungsmodus funktioniert.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Geben Sie Bibliotheksdateien an, die in die Kompilierung eingeschlossen werden sollen.", + "Specify_module_code_generation_6016": "Geben Sie die Modulcodegenerierung an.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Geben Sie den Modulspezifizierer an, der zum Importieren der JSX-Factoryfunktionen verwendet wird, wenn Sie „jsx: react-jsx*“ verwenden.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Geben Sie mehrere Ordner an, die als „./node_modules/@types“ fungieren.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Geben Sie einen oder mehrere Pfad- oder Knotenmodulverweise auf Basiskonfigurationsdateien an, von denen Einstellungen geerbt werden.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Geben Sie Optionen für den automatischen Erwerb von Deklarationsdateien an.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Geben Sie die Strategie zum Erstellen einer Abrufüberwachung an, wenn eine Erstellung mit Dateisystemereignissen nicht erfolgreich ist: \"FixedInterval\" (Standardwert), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Geben Sie die Strategie für die Verzeichnisüberwachung auf Plattformen an, die eine rekursive Überwachung nativ nicht unterstützen: \"UseFsEvents\" (Standardwert), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Geben Sie die Strategie für die Dateiüberwachung an: \"FixedPollingInterval\" (Standardwert), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Geben Sie den JSX-Fragmentverweis an, der für Fragmente verwendet wird, wenn die React JSX-Ausgabe als Ziel verwendet wird, z. B. \"React.Fragment\" oder \"Fragment\".", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Geben Sie die JSX-Factoryfunktion an, die für eine react-JSX-Ausgabe verwendet werden soll, z. B. \"React.createElement\" oder \"h\".", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Geben Sie die JSX-Factoryfunktion an, die verwendet wird, wenn Sie die JSX-Ausgabe „react“ als Ziel verwenden, z. B. „React.createElement“ oder „h“.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Geben Sie die jsxFragmentFactory-Funktion an, die bei Verwendung des JSX-Ausgabeziels \"react\" mit der Compileroption \"jsxFactory\" verwendet werden soll, z. B. \"Fragment\".", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Geben Sie das Basisverzeichnis zum Auflösen nicht relativer Modulnamen an.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Geben Sie die Zeilenendesequenz an, die beim Ausgeben von Dateien verwendet werden soll: \"CRLF\" (DOS) oder \"LF\" (Unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Geben Sie den Speicherort an, an dem der Debugger TypeScript-Dateien ermitteln soll, anstatt Quellspeicherorte zu verwenden.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Geben Sie den Speicherort an, an dem der Debugger Zuordnungsdateien ermitteln soll, anstatt generierte Speicherorte zu verwenden.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Geben Sie die maximale Ordnertiefe an, die zum Überprüfen von JavaScript-Dateien aus „node_modules“ verwendet wird. Gilt nur für „allowJs“.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Geben Sie den Modulspezifizierer an, aus dem die Factoryfunktionen \"jsx\" und \"jsxs\" importiert werden sollen, z. B. \"react\".", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Geben Sie das Objekt an, das für „createElement“ aufgerufen wird. Dies gilt nur, wenn die JSX-Ausgabe „react“ als Ziel verwendet wird.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Geben Sie das Ausgabeverzeichnis für generierte Deklarationsdateien an.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Geben Sie den Pfad zu inkrementelle Kompilierungsdateien .tsbuildinfo an.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Geben Sie das Stammverzeichnis der Eingabedateien an. Verwenden Sie diese Angabe, um die Ausgabeverzeichnisstruktur mithilfe von \"-outDir\" zu steuern.", + "Specify_the_root_folder_within_your_source_files_6690": "Geben Sie den Stammordner in den Quelldateien an.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Geben Sie den Stammpfad für Debugger an, um den Verweisquellcode zu suchen.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Geben Sie Typpaketnamen an, die eingeschlossen werden sollen, ohne in einer Quelldatei referenziert zu werden.", + "Specify_what_JSX_code_is_generated_6646": "Geben Sie an, welcher JSX-Code generiert wird.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Geben Sie an, welchen Ansatz der Watcher verwenden soll, wenn auf dem System keine nativen Dateiüberwachungen mehr vorhanden sind.", + "Specify_what_module_code_is_generated_6657": "Geben Sie an, welcher Modulcode generiert wird.", + "Split_all_invalid_type_only_imports_1367": "Alle ungültigen reinen Typenimporte teilen", + "Split_into_two_separate_import_declarations_1366": "In zwei separate Importdeklarationen teilen", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Der Verteilungsoperator in new-Ausdrücken ist nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.", + "Spread_types_may_only_be_created_from_object_types_2698": "Spread-Typen dürfen nur aus object-Typen erstellt werden.", + "Starting_compilation_in_watch_mode_6031": "Kompilierung im Überwachungsmodus wird gestartet...", + "Statement_expected_1129": "Eine Anweisung wurde erwartet.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Anweisungen sind in Umgebungskontexten unzulässig.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statische Member dürfen nicht auf Klassentypparameter verweisen.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Die statische Eigenschaft \"{0}\" steht in Konflikt mit der integrierten Eigenschaft \"Function.{0}\" der Konstruktorfunktion \"{1}\".", + "Stricter_Typechecking_Options_6292": "Strengere Typprüfungsoptionen", + "String_literal_expected_1141": "Ein Zeichenfolgenliteral wurde erwartet.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Import- und Exportnamen von Zeichenfolgenliteralen werden nicht unterstützt, wenn das Flag \"--module\" auf \"es2015\" oder \"es2020\" festgelegt ist.", + "String_literal_with_double_quotes_expected_1327": "Ein Zeichenfolgenliteral mit doppelten Anführungszeichen wird erwartet.", + "Style_Options_6293": "Stiloptionen", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Fehler und Nachrichten farbig und mit Kontext formatieren (experimentell).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Subpatternkennzeichen müssen vorhanden sein, wenn ein Minuszeichen vorhanden ist.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Nachfolgende Eigenschaftendeklarationen müssen den gleichen Typ aufweisen. Die Eigenschaft \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Nachfolgende Variablendeklarationen müssen den gleichen Typ aufweisen. Die Variable \"{0}\" muss den Typ \"{1}\" aufweisen, ist hier aber vom Typ \"{2}\".", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Die Ersetzung \"{0}\" für das Muster \"{1}\" weist einen falschen Typ auf. Erwartet wurde \"string\", abgerufen wurde \"{2}\".", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Die Ersetzung \"{0}\" im Muster \"{1}\" darf höchstens ein Zeichen \"*\" aufweisen.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Die Ersetzung für das Muster \"{0}\" muss ein Array sein.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Ersetzungen für das Muster \"{0}\" dürfen kein leeres Array sein.", + "Successfully_created_a_tsconfig_json_file_6071": "Eine Datei \"tsconfig.json\" wurde erfolgreich erstellt.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Aufrufe von \"super\" sind außerhalb von Konstruktoren oder in geschachtelten Funktionen innerhalb von Konstruktoren unzulässig.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Übermäßige Eigenschaftenüberprüfungen für Objektliterale unterdrücken.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "noImplicitAny-Fehler für die Indizierung von Objekten unterdrücken, denen Indexsignaturen fehlen.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Unterdrücken Sie „noImplicitAny“-Fehler beim Indizieren von Objekten ohne Indexsignaturen.", + "Switch_each_misused_0_to_1_95138": "Jedes falsch verwendete {0}-Element in \"{1}\" ändern", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Rufen Sie Rückrufe synchron auf, und aktualisieren Sie den Status von Verzeichnisüberwachungen auf Plattformen, die rekursive Überwachung nicht nativ unterstützen.", + "Syntax_Colon_0_6023": "Syntax: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Das Tag \"{0}\" erwartet mindestens {1} Argumente, von der JSX-Factory \"{2}\" werden aber höchstens {3} bereitgestellt.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Mit Tags versehene Vorlagenausdrücke sind in einer optionalen Kette nicht zulässig.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Das Ziel erlaubt nur {0} Element(e), aber die Quelle kann mehr aufweisen.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Das Ziel erfordert {0} Element(e), aber die Quelle kann weniger aufweisen.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Die Zielsignatur stellt zu wenige Argumente bereit. Erwartete {0} oder mehr, erhielt aber {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Der Modifizierer \"{0}\" kann nur in TypeScript-Dateien verwendet werden.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Der Operator \"{0}\" darf nicht den Typ \"symbol\" angewendet werden.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Der Operator \"{0}\" ist für boolesche Typen unzulässig. Verwenden Sie stattdessen ggf. \"{1}\".", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Die Eigenschaft \"{0}\" eines asynchronen Iterators muss eine Methode sein.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Die Eigenschaft \"{0}\" eines Iterators muss eine Methode sein.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Der Typ \"Object\" kann nur wenigen anderen Typen zugewiesen werden. Wollten Sie stattdessen den Typ \"any\" verwenden?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Das Unicode-Flag (u) und das Unicode Sets-Flag (v) können nicht gleichzeitig festgelegt werden.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Auf das Objekt „arguments“ darf in einer Pfeilfunktion in ES5 nicht verwiesen werden. Verwenden Sie ggf. einen Standardfunktionsausdruck.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Auf das Objekt „arguments“ darf in einer asynchronen Funktion oder Methode in ES5 nicht verwiesen werden. Verwenden Sie ggf. eine Standardfunktion oder -methode.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Der Text einer \"if\"-Anweisung kann keine leere Anweisung sein.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Der Aufruf wäre für diese Implementierung erfolgreich, aber die Implementierungssignaturen von Überladungen sind nicht extern sichtbar.", + "The_character_set_of_the_input_files_6163": "Der Zeichensatz der Eingabedateien.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Die enthaltende Pfeilfunktion erfasst den globalen Wert von \"this\".", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Der beinhaltende Funktions- oder Modulkörper ist zu groß für eine Ablaufsteuerungsanalyse.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Die aktuelle Datei ist ein CommonJS-Modul und kann „await“ nicht auf der obersten Ebene verwenden.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Die aktuelle Datei ist ein CommonJS-Modul, dessen Importe \"require\"-Aufrufe generieren. Die Datei, auf die verwiesen wird, ist jedoch ein ECMAScript-Modul und kann nicht mit \"require\" importiert werden. Erwägen Sie stattdessen, einen dynamischen 'import(\"{0}\")'-Aufruf zu schreiben.", + "The_current_host_does_not_support_the_0_option_5001": "Der aktuelle Host unterstützt die Option \"{0}\" nicht.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Die Deklaration von \"{0}\", die Sie wahrscheinlich verwenden wollten, ist hier definiert.", + "The_declaration_was_marked_as_deprecated_here_2798": "Die Deklaration wurde hier als veraltet markiert.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Der erwartete Typ stammt aus der Eigenschaft \"{0}\", die hier für den Typ \"{1}\" deklariert wird.", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Der erwartete Typ stammt aus dem Rückgabetyp dieser Signatur.", + "The_expected_type_comes_from_this_index_signature_6501": "Der erwartete Typ stammt aus dieser Indexsignatur.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Der Ausdruck einer Exportzuweisung muss ein Bezeichner oder ein qualifizierter Name in einem Umgebungskontext sein.", + "The_file_is_in_the_program_because_Colon_1430": "Die Datei befindet sich aus folgenden Gründen im Programm:", + "The_files_list_in_config_file_0_is_empty_18002": "Die Liste \"files\" in der Konfigurationsdatei \"{0}\" ist leer.", + "The_first_export_default_is_here_2752": "Der erste Exportstandard befindet sich hier.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Der erste Parameter der \"then\"-Methode einer Zusage muss ein Rückruf sein.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Der globale Typ \"JSX.{0}\" darf nur eine Eigenschaft aufweisen.", + "The_implementation_signature_is_declared_here_2750": "Die Implementierungssignatur wird hier deklariert.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Die Meta-Eigenschaft „import.meta“ ist in Dateien, die in der CommonJS-Ausgabe erstellt werden, nicht zulässig.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Die Metaeigenschaft „import.meta“ ist nur zulässig, wenn die Option „--module“ „es2020“, „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“ oder „nodenext“ lautet.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Der abgeleitete Typ von \"{0}\" kann nicht ohne einen Verweis auf \"{1}\" benannt werden. Eine Portierung ist wahrscheinlich nicht möglich. Eine Typanmerkung ist erforderlich.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ mit zyklischer Struktur, die nicht trivial serialisiert werden kann. Es ist eine Typanmerkung erforderlich.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Der abgeleitete Typ von \"{0}\" verweist auf einen Typ \"{1}\", auf den nicht zugegriffen werden kann. Eine Typanmerkung ist erforderlich.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Der abgeleitete Typ dieses Knotens überschreitet die maximale Länge, die vom Compiler serialisiert wird. Eine explizite Typanmerkung ist erforderlich.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Der Initialisierer einer „using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.dispose]()“ sein oder „null“ oder „undefined“ sein.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Der Initialisierer einer „await using“-Deklaration muss entweder ein Objekt mit der Methode „[Symbol.asyncDispose]()“ oder „[Symbol.dispose]()“ sein oder „null“ oder „undefined“ sein.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in mehreren Bestandteilen vorhanden und in einigen davon privat ist.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Die Schnittmenge \"{0}\" wurde auf \"niemals\" reduziert, weil die Eigenschaft \"{1}\" in einigen Bestandteilen widersprüchliche Typen aufweist.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Das Schlüsselwort \"intrinsic\" darf nur zum Deklarieren von vom Compiler bereitgestellten intrinsischen Typen verwendet werden.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Um JSX-Fragmente mit der Compileroption \"jsxFactory\" zu verwenden, muss die Compileroption \"jsxFragmentFactory\" angegeben werden.", + "The_last_overload_gave_the_following_error_2770": "Die letzte Überladung hat den folgenden Fehler verursacht.", + "The_last_overload_is_declared_here_2771": "Die letzte Überladung wird hier deklariert.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Die linke Seite einer for...in-Anweisung darf kein Destrukturierungsmuster sein.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Die linke Seite einer „for... in“-Anweisung darf keine „using“-Deklaration sein.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Die linke Seite eines „for...in“-Anweisung darf keine „await using“-Deklaration sein.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Die linke Seite einer for...in-Anweisung darf keine Typanmerkung verwenden.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Die linke Seite einer for...in-Anweisung darf kein optionaler Eigenschaftenzugriff sein.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Die linke Seite einer for...in-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Die linke Seite einer for...in-Anweisung muss vom Typ \"string\" oder \"any\" sein.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Die linke Seite einer for...of-Anweisung darf keine Typanmerkung verwenden.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Die linke Seite einer for...of-Anweisung darf kein optionaler Eigenschaftenzugriff sein.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Die linke Seite einer „for...of“-Anweisung darf nicht „asynchron“ lauten.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Die linke Seite einer for...of-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Die linke Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Die linke Seite eines Zuweisungsausdrucks darf kein optionaler Eigenschaftenzugriff sein.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Die linke Seite eines Zuweisungsausdrucks muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Die linke Seite eines „instanceof“-Ausdrucks muss dem ersten Argument der „[Symbol.hasInstance]“-Methode der rechten Seite zugewiesen werden können.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Die linke Seite eines instanceof-Ausdrucks muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Das beim Anzeigen von Meldungen für den Benutzer verwendete Gebietsschema (z. B. \"de-de\").", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Die maximale Abhängigkeitstiefe, die unter \"node_modules\" durchsucht und für die JavaScript-Dateien geladen werden sollen.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Der Operand eines delete-Operators darf kein privater Bezeichner sein.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Der Operand eines delete-Operators darf keine schreibgeschützte Eigenschaft sein.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Der Operand eines delete-Operators muss ein Eigenschaftenverweis sein.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "Der Operand eines delete-Operators muss optional sein.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Der Operand eines Inkrement- oder Dekrementoperators darf kein optionaler Eigenschaftenzugriff sein.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Der Operand eines Inkrement- oder Dekrementoperators muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Der Parser hat ein ein entsprechendes Element \"{1}\" zu dem hier vorhandenen Token \"{0}\" erwartet.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Exportzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Der Projektstamm ist mehrdeutig, wird aber benötigt, um den Importzuordnungseintrag „{0}“ in der Datei „{1}“ aufzulösen. Geben Sie die Compiler-Option „rootDir“ an, um die Mehrdeutigkeit aufzuheben.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Auf die Eigenschaft \"{0}\" kann für den Typ \"{1}\" nicht innerhalb dieser Klasse zugegriffen werden, weil sie von einem anderen privaten Bezeichner mit der gleichen Schreibweise verborgen wird.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Der Rückgabetyp einer Parameter-Decorator-Funktion muss \"void\" oder \"any\" sein.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Der Rückgabetyp einer Eigenschaften-Decorator-Funktion muss \"void\" oder \"any\" sein.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Der Rückgabetyp einer asynchronen Funktion muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise\" sein. Wollten Sie eigentlich \"Promise<{0}>\" verwenden?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Die rechte Seite einer for...in-Anweisung muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein. Sie weist hier jedoch den Typ \"{0}\" auf.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Die rechte Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Die rechte Seite eines „instanceof“-Ausdrucks muss entweder vom Typ „any“, eine Klasse, eine Funktion oder ein anderer Typ, der dem Schnittstellentyp „Function“ zugewiesen werden kann, oder ein Objekttyp mit einer Symbol.hasInstance-Methode sein.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Die rechte Seite eines „instanceof“-Ausdrucks darf kein Instanziierungsausdruck sein.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Der Stammwert einer {0}-Datei muss ein Objekt sein.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Die Runtime ruft das Decorator-Element mit {1} Argumenten auf, aber das Decorator-Element erwartet {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Die Runtime ruft das Decorator-Element mit {1}-Argumenten auf, aber das Decorator-Element erwartet mindestens {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "Die verbergende Deklaration von \"{0}\" ist hier definiert.", + "The_signature_0_of_1_is_deprecated_6387": "Die Signatur \"{0}\" von \"{1}\" ist veraltet.", + "The_specified_path_does_not_exist_Colon_0_5058": "Der angegebene Pfad \"{0}\" ist nicht vorhanden.", + "The_tag_was_first_specified_here_8034": "Das Tag wurde zuerst hier angegeben.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Das Ziel einer rest-Zuweisung für ein Objekt darf kein optionaler Eigenschaftenzugriff sein.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Das Ziel einer REST-Zuweisung für ein Objekt muss eine Variable oder ein Eigenschaftenzugriff sein.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Der \"this\"-Kontext vom Typ \"{0}\" kann \"this\" vom Typ \"{1}\" der Methode nicht zugewiesen werden.", + "The_this_types_of_each_signature_are_incompatible_2685": "Die \"this\"-Typen jeder Signatur sind nicht kompatibel.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Der Typ \"{0}\" ist als \"readonly\" festgelegt und kann nicht dem änderbaren Typ \"{1}\" zugewiesen werden.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Der \"Type\"-Modifizierer kann nicht für einen benannten Export verwendet werden, wenn \"Export-Typ\" auf seiner Export-Anweisung verwendet wird.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Der \"Type\"-Modifizierer kann nicht für einen benannten Import verwendet werden, wenn der \"Import-Typ\" auf seiner Import-Anweisung verwendet wird.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Der Typ dieses Knotens kann nicht serialisiert werden, da seine Eigenschaft \"{0}\" nicht serialisiert werden kann.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Der von der {0}()-Methode eines Async-Iterators zurückgegebene Typ muss eine Zusage für einen Typ mit einer value-Eigenschaft sein.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Der von der {0}()-Methode eines Iterators zurückgegebene Typ muss eine value-Eigenschaft aufweisen.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Die Typen von \"{0}\" sind zwischen diesen Typen nicht kompatibel.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Die von \"{0}\" zurückgegebenen Typen sind zwischen diesen Typen nicht kompatibel.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "Der Wert \"{0}\" kann hier nicht verwendet werden.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Die Variablendeklaration einer for...in-Anweisung darf keinen Initialisierer aufweisen.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Die Variablendeklaration einer for...of-Anweisung darf keinen Initialisierer aufweisen.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Die with-Anweisung wird nicht unterstützt. Alle Symbole in einem with-Block weisen den Typ \"any\" auf.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte unter Ihrer aktuellen „moduleResolution“-Einstellung nicht aufgelöst werden. Erwägen Sie ein Update auf „node16“, „nodenext“ oder „bundler“.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Es gibt Typen unter „{0}“, aber dieses Ergebnis konnte nicht aufgelöst werden, wenn package.json „Exporte“ beachtet wird. Die Bibliothek „{1}“ muss möglicherweise ihre package.json oder Eingaben aktualisieren.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "In diesem regulären Ausdruck ist keine Erfassungsgruppe namens „{0}“ vorhanden.", + "There_is_nothing_available_for_repetition_1507": "Es ist nichts für Wiederholungen verfügbar.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Dieses JSX-Tag erfordert, dass '{0}' im Geltungsbereich ist, konnte jedoch nicht gefunden werden.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Für dieses JSX-Tag muss der Modulpfad '{0}' vorhanden sein, aber es wurde keiner gefunden. Stellen Sie sicher, dass die Typen für das entsprechende Paket installiert sind.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet ein einzelnes untergeordnetes Element vom Typ \"{1}\", aber es wurden mehrere untergeordnete Elemente angegeben.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet den Typ \"{1}\", der mehrere untergeordnete Elemente erfordert, aber es wurde nur ein untergeordnetes Elemente angegeben.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. Dieser reguläre Ausdruck enthält keine Erfassungsgruppen.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Dieser Rückverweis bezieht sich auf eine Gruppe, die nicht vorhanden ist. In diesem regulären Ausdruck sind nur {0} Erfassungsgruppen vorhanden.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Dieser binäre Ausdruck ist nie „NULLISH“. Fehlen Klammern?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Dieses Zeichen kann in einem regulären Ausdruck nicht mit Escapezeichen versehen werden.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Dieser Vergleich scheint unbeabsichtigt zu sein, da die Typen \"{0}\" und \"{1}\" keine Überlappung aufweisen.", + "This_condition_will_always_return_0_2845": "Diese Bedingung gibt immer „{0}“ zurück.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Diese Bedingung gibt immer „{0}“ zurück, da JavaScript Objekte nach Verweis und nicht nach Wert vergleicht.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Diese Bedingung gibt immer TRUE zurück, weil diese '{0}' immer definiert ist.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Diese Bedingung gibt immer TRUE zurück, weil diese Funktion immer definiert ist. Möchten Sie sie stattdessen aufrufen?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Diese Konstruktorfunktion kann in eine Klassendeklaration konvertiert werden.", + "This_expression_is_always_nullish_2871": "Dieser Ausdruck ist immer „NULLISH“.", + "This_expression_is_never_nullish_2881": "Dieser binäre Ausdruck ist nie „NULLISH“.", + "This_expression_is_not_callable_2349": "Dieser Ausdruck kann nicht aufgerufen werden.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Dieser Ausdruck kann nicht aufgerufen werden, weil es sich um eine get-Zugriffsmethode handelt. Möchten Sie den Wert ohne \"()\" verwenden?", + "This_expression_is_not_constructable_2351": "Dieser Ausdruck kann nicht erstellt werden.", + "This_file_already_has_a_default_export_95130": "Diese Datei weist bereits einen Standardexport auf.", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Dieser Importpfad ist unsicher umzuschreiben, da er auf ein anderes Projekt verweist und der relative Pfad zwischen den Ausgabedateien der Projekte nicht derselbe ist wie der relative Pfad zwischen den Eingabedateien.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Dieser Import verwendet eine '{0}' Erweiterung, um auf eine TypeScript-Eingabedatei zu verweisen, wird jedoch beim Ausgeben nicht umgeschrieben, da es sich nicht um einen relativen Pfad handelt.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Dies ist die erweiterte Deklaration. Die erweiternde Deklaration sollte in dieselbe Datei verschoben werden.", + "This_kind_of_expression_is_always_falsy_2873": "Diese Art von Ausdruck ist immer „FALSY“.", + "This_kind_of_expression_is_always_truthy_2872": "Diese Art von Ausdruck ist immer „TRUTHY“.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Es kann eine Konvertierung in ein asynchrone Funktion durchgeführt werden.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Dieser Member kann keinen JSDoc-Kommentar mit einem \"@override\"-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem Override-Tag haben, da er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem Tag \"@override\" haben, da dessen enthaltende Klasse \"{0}\" keine andere Klasse erweitert.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Dieses Mitglied kann keinen JSDoc-Kommentar mit einem „@override“-Tag haben, da der Name dynamisch ist.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Dieser Member kann keinen override-Modifizierer aufweisen, weil die Klasse \"{0}\", die diesen Member enthält, keine andere Klasse erweitert.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Dieser Member kann keinen override-Modifizierer aufweisen, da sein Name dynamisch ist.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Dieses Mitglied muss über einen JSDoc-Kommentar mit dem Tag \"@override\" verfügen, da er einen Member in der Basisklasse \"{0}\" überschreibt.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Dieser Member muss einen override-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Dieser Member muss einen override-Modifizierer aufweisen, weil er eine abstrakte Methode überschreibt, die in der Basisklasse \"{0}\" deklariert ist.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Auf dieses Modul kann nur mit ECMAScript-Importen/-Exporten verwiesen werden, indem das Flag \"{0}\" aktiviert und auf den Standardexport verwiesen wird.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Dieses Modul wird mit „export =“ deklariert und kann nur bei Verwendung des Kennzeichnens „{0}“ mit einem Standardimport verwendet werden.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Dieser Vorgang kann vereinfacht werden. Diese Schicht ist identisch mit „{0} {1} {2}“.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Diese Überladung gibt implizit den Typ „{0}“ zurück, da keine Rückgabetypanmerkung vorhanden ist.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Diese Überladungssignatur ist nicht mit der zugehörigen Implementierungssignatur kompatibel.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Dieser Parameter ist mit der Direktive \"use strict\" nicht zugelassen.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Diese Parametereigenschaft muss über einen JSDoc-Kommentar mit einem \"@override\"-Tag verfügen, da sie ein Mitglied in der Basisklasse \"{0}\" überschreibt.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Diese Parametereigenschaft muss einen „override“-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Dieses Flag für reguläre Ausdrücke kann nicht innerhalb eines Untermusters umgeschaltet werden.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Dieses Flag für reguläre Ausdrücke ist nur verfügbar, wenn es auf „{0}“ oder höher ausgerichtet ist.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Dieser relative Importpfad ist unsicher umzuschreiben, da er wie ein Dateiname aussieht, aber tatsächlich auf \"{0}\" verweist.", + "This_spread_always_overwrites_this_property_2785": "Diese Eigenschaft wird immer durch diesen Spread-Operator überschrieben.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Diese Syntax ist nicht zulässig, wenn \"erasableSyntaxOnly\" aktiviert ist.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Diese Syntax ist in Dateien mit der Erweiterung .mts oder .cts reserviert. Fügen Sie ein nachfolgendes Komma oder eine explizite Einschränkung hinzu.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Diese Syntax ist in Dateien mit der Erweiterung \".mts\" oder \".cts\" reserviert. Verwenden Sie stattdessen einen „as“-Ausdruck.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Diese Syntax erfordert ein importiertes Hilfsprogramm, aber das Modul \"{0}\" wurde nicht gefunden.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Diese Syntax erfordert ein importiertes Hilfsprogramm namens \"{1}\", das in \"{0}\" nicht vorhanden ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Diese Syntax erfordert ein importiertes Hilfsprogramm mit dem Namen \"{1}\" mit {2} Parametern, die nicht mit der in \"{0}\" kompatibel ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Für diesen Typparameter ist möglicherweise die Einschränkung \"extends {0}\" erforderlich.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Diese Verwendung von „import“ ist ungültig. „import()“-Aufrufe können geschrieben werden, müssen jedoch Klammern aufweisen und dürfen keine Typargumente aufweisen.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, fügen Sie das Feld \"type\": \"module\" zu \"{0}\" hinzu.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie die Dateierweiterung in \"{0}\", oder fügen Sie das Feld ''type': 'module'' zu \"{1}\" hinzu.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, ändern Sie ihre Dateierweiterung in '{0}', oder erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Um diese Datei in ein ECMAScript-Modul zu konvertieren, erstellen Sie eine lokale package.json-Datei mit `{ \"type\": \"module\" }`.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "„await“-Ausdrücke der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "„await using“-Anweisungen der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarationen der obersten Ebene in .d.ts-Dateien müssen entweder mit einem declare- oder einem export-Modifizierer beginnen.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "„await“-Schleifen der obersten Ebene sind nur zulässig, wenn die Option „module“ auf „es2022“, „esnext“, „system“, „node16“, „node18“, „node20“, „nodenext“ oder „preserve“ festgelegt ist und die Option „target“ auf „es2017“ oder höher festgelegt ist.", + "Trailing_comma_not_allowed_1009": "Ein nachgestelltes Komma ist unzulässig.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Jede Datei als separates Modul transpilieren (ähnlich wie bei \"ts.transpileModule\").", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Versuchen Sie es mit \"npm i --save-dev @types/{1}\", sofern vorhanden, oder fügen Sie eine neue Deklarationsdatei (.d.ts) hinzu, die \"declare module '{0}';\" enthält.", + "Trying_other_entries_in_rootDirs_6110": "Andere Einträge in \"rootDirs\" werden versucht.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Die Ersetzung \"{0}\" wird versucht. Speicherort des Kandidatenmoduls: \"{1}\".", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Der Tupeltyp \"{0}\" der Länge {1} weist am Index \"{2}\" kein Element auf.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Tupeltypargumente verweisen zirkulär auf sich selbst.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Der Typ \"{0}\" kann nur durchlaufen werden, wenn das Flag \"--downlevelIteration\" verwendet wird oder \"--target\" den Wert \"es2015\" oder höher aufweist.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Der Typ \"{0}\" kann nicht als Indextyp verwendet werden.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Der Typ \"{0}\" kann nicht zum Indizieren von Typ \"{1}\" verwendet werden.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Der Typ \"{0}\" erfüllt die Einschränkung \"{1}\" nicht.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Der Typ \"{0}\" erfüllt den erwarteten Typ \"{1}\" nicht.", + "Type_0_has_no_call_signatures_2757": "Der Typ \"{0}\" weist keine Aufrufsignaturen auf.", + "Type_0_has_no_construct_signatures_2761": "Der Typ \"{0}\" weist keine Konstruktsignaturen auf.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Der Typ \"{0}\" weist keine übereinstimmende Indexsignatur für den Typ \"{1}\" auf.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Der Typ \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit Typ \"{1}\".", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Der Typ „{0}“ weist keine Signaturen auf, für die die Liste „Typargument“ gilt.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Der Typ „{0}“ ist generisch und kann nur zum Lesen indiziert werden.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\".", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Im Typ \"{0}\" fehlen die folgenden Eigenschaften von Typ \"{1}\": \"{2}\" und {3} weitere.", + "Type_0_is_not_a_constructor_function_type_2507": "Der Typ \"{0}\" ist kein Konstruktorfunktionstyp.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Der Typ „{0}“ ist in ES5 kein gültiger Rückgabetyp einer asynchronen Funktion, weil er nicht auf einen Promise-kompatiblen Konstruktorwert verweist.", + "Type_0_is_not_an_array_type_2461": "Der Typ \"{0}\" ist kein Arraytyp.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Der Typ \"{0}\" ist kein Array- oder Zeichenfolgentyp.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ \"{0}\" ist kein Array-Typ oder Zeichenfolgentyp oder weist keine \"[Symbol.iterator]()\"-Methode auf, die einen Iterator zurückgibt.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ \"{0}\" ist kein Array-Typ oder weist keine \"[Symbol.iterator]()\"-Methode auf, die einen Iterator zurückgibt.", + "Type_0_is_not_assignable_to_type_1_2322": "Der Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Meinten Sie \"{2}\"?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Der Typ \"{0}\" kann dem Typ \"{1}\" nicht zugewiesen werden. Es sind zwei verschiedene Typen mit diesem Namen vorhanden, diese sind jedoch nicht verwandt.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Der Typ „{0}“ kann dem Typ „{1}“ nicht zugewiesen werden, wie in der Abweichungsanmerkung impliziert.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Der Typ „{0}“ kann nicht dem Typ „{1}“ zugewiesen werden, wie für berechnete Enumerationselementwerte erforderlich.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zu den Typen der Zieleigenschaften.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Der Typ „{0}“ kann dem Typ „{1}“ mit „exactOptionalPropertyTypes: true“ nicht zugewiesen werden. Erwägen Sie das Hinzufügen von „undefined“ zum Typ des Ziels.", + "Type_0_is_not_comparable_to_type_1_2678": "Der Typ \"{0}\" kann nicht mit dem Typ \"{1}\" verglichen werden.", + "Type_0_is_not_generic_2315": "Der Typ \"{0}\" ist nicht generisch.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ „{0}“ kann einen primitiven Wert darstellen, der als rechter Operand des „In“-Operators nicht zulässig ist.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Der Typ \"{0}\" muss eine Methode \"[Symbol.asyncIterator]()\" aufweisen, die einen async-Iterator zurückgibt.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Der Typ \"{0}\" muss eine Methode \"[Symbol.iterator]()\" aufweisen, die einen Iterator zurückgibt.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Der Typ \"{0}\" enthält keine Entsprechung für die Signatur \"{1}\".", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Der Typ \"{0}\" verweist rekursiv auf sich selbst als ein Basistyp.", + "Type_Checking_6248": "Typprüfung", + "Type_alias_0_circularly_references_itself_2456": "Der Typalias \"{0}\" verweist zirkulär auf sich selbst.", + "Type_alias_must_be_given_a_name_1439": "Typalias muss einen Namen erhalten.", + "Type_alias_name_cannot_be_0_2457": "Der Typaliasname darf nicht \"{0}\" sein.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Typaliase können nur in TypeScript-Dateien verwendet werden.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Die Typanmerkung darf nicht für eine Konstruktordeklaration verwendet werden.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Typanmerkungen können nur in TypeScript-Dateien verwendet werden.", + "Type_argument_expected_1140": "Ein Typargument wurde erwartet.", + "Type_argument_list_cannot_be_empty_1099": "Die Typargumentliste darf nicht leer sein.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Typargumente können nur in TypeScript-Dateien verwendet werden.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Typargumente für \"{0}\" verweisen zirkulär auf sich selbst.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Typassertionsausdrücke können nur in TypeScript-Dateien verwendet werden.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Der Typ an Position {0} in der Quelle ist nicht mit dem Typ an Position {1} im Ziel kompatibel.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Der Typ an den Positionen {0} bis {1} in der Quelle ist nicht mit dem Typ an Position {2} im Ziel kompatibel.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Der Typ, der den privaten Namen „{0}“ enthält, kann nicht mit „--isolatedDeclarations“ verwendet werden.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Typdeklarationsdateien, die in die Kompilierung eingeschlossen werden sollen.", + "Type_expected_1110": "Es wurde ein Typ erwartet.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Typimportassertionen sollten über genau einen Schlüssel verfügen – „resolution-mode“ – mit dem Wert „import“ oder „require“.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Der Typimport eines ECMAScript-Moduls aus einem CommonJS-Modul muss ein Attribut für den Auflösungsmodus (resolution-mode) aufweisen.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Die Typinstanziierung ist übermäßig tief und möglicherweise unendlich.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Auf den Typ wird direkt oder indirekt im Erfüllungsrückruf der eigenen \"then\"-Methode verwiesen.", + "Type_library_referenced_via_0_from_file_1_1402": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" referenziert wird", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Der Typ des \"await\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Der Typ des Werts der berechneten Eigenschaft lautet \"{0}\" und kann dem Typ \"{1}\" nicht zugewiesen werden.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Der Typ der Instanzmembervariablen „{0}“ darf nicht auf den im Konstruktor deklarierten Bezeichner „{1}“ verweisen.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Der Typ iterierter Elemente eines \"yield*\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Der Typ der Eigenschaft \"{0}\" verweist im zugeordneten Typ \"{1}\" auf sich selbst.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Der Typ eines \"yield\"-Operanden in einem asynchronen Generator muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Der reine Typimport eines ECMAScript-Moduls aus einem CommonJS-Modul muss ein Attribut für den Auflösungsmodus (resolution-mode) aufweisen.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Der Typ stammt aus diesem Import. Ein Import im Namespacestil kann nicht aufgerufen oder erstellt werden und verursacht zur Laufzeit einen Fehler. Erwägen Sie hier stattdessen die Verwendung eines Standardimports oder die den Import über \"require\".", + "Type_parameter_0_has_a_circular_constraint_2313": "Der Typparameter \"{0}\" weist eine zirkuläre Einschränkung auf.", + "Type_parameter_0_has_a_circular_default_2716": "Der Typparameter \"{0}\" besitzt einen zirkulären Standardwert.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Der Typparameter \"{0}\" der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Der Typparameter \"{0}\" der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Der Typparameter \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Der Typparameter \"{0}\" der exportierten Funktion besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Der Typparameter \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Der Typparameter \"{0}\" des exportierten zugeordneten Objekttyps verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Der Typparameter \"{0}\" des exportierten Typalias enthält oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Der Typparameter \"{0}\" der Methode aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Der Typparameter \"{0}\" der öffentlichen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Der Typparameter \"{0}\" der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".", + "Type_parameter_declaration_expected_1139": "Eine Typparameterdeklaration wurde erwartet.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Typparameterdeklarationen können nur in TypeScript-Dateien verwendet werden.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Standardwerte für Typparameter können nur auf zuvor deklarierte Typparameter verweisen.", + "Type_parameter_list_cannot_be_empty_1098": "Die Typparameterliste darf nicht leer sein.", + "Type_parameter_name_cannot_be_0_2368": "Der Name des Typparameters darf nicht \"{0}\" sein.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Typparameter dürfen nicht für eine Konstruktordeklaration verwendet werden.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Das Typprädikat \"{0}\" kann \"{1}\" nicht zugewiesen werden.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Der Typ erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.", + "Type_reference_directive_0_was_not_resolved_6120": "======== Die Typverweisdirektive \"{0}\" wurde nicht aufgelöst. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. Primär: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. Primär: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Typerfüllungsausdrücke können nur in TypeScript-Dateien verwendet werden.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typen können in Exportdeklarationen in JavaScript-Dateien nicht angezeigt werden.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Typen weisen separate Deklarationen einer privaten Eigenschaft \"{0}\" auf.", + "Types_of_construct_signatures_are_incompatible_2419": "Die Typen der Konstruktsignaturen sind nicht kompatibel.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Die Typen der Parameter \"{0}\" und \"{1}\" sind nicht kompatibel.", + "Types_of_property_0_are_incompatible_2326": "Die Typen der Eigenschaft \"{0}\" sind nicht kompatibel.", + "Unable_to_open_file_0_6050": "Die Datei \"{0}\" kann nicht geöffnet werden.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Die Signatur des Klassen-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Die Signatur des Methoden-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Die Signatur des Parameter-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Die Signatur des Eigenschaften-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.", + "Undetermined_character_escape_1513": "Nicht definiertes ESC-zeichen.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Unerwartete(s/r) „{0}“. Wollten Sie mit einem umgekehrten Schrägstrich escapen?", + "Unexpected_end_of_text_1126": "Unerwartetes Textende.", + "Unexpected_keyword_or_identifier_1434": "Unerwartetes Schlüsselwort oder Bezeichner.", + "Unexpected_token_1012": "Unerwartetes Token.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Unerwartetes Token. Ein Konstruktor, eine Methode, eine Zugriffsmethode oder eine Eigenschaft wurde erwartet.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Unerwartetes Token. Es wurde ein Typparametername ohne geschweifte Klammern erwartet.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Unerwartetes Token. Meinten Sie \"{'>'}\" oder \">\"?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Unerwartetes Token. Meinten Sie \"{'}'}\" oder \"}\"?", + "Unexpected_token_expected_1179": "Unerwartetes Token. \"{\" wurde erwartet.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Die Unicode-Escapesequenz kann hier nicht angezeigt werden.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode-Escapesequenzen sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode-Eigenschaftswertausdrücke sind nur verfügbar, wenn das Unicode-Flag (u) oder das Unicode Sets-Flag (v) festgelegt ist.", + "Unknown_Unicode_property_name_1524": "Unbekannter Unicode-Eigenschaftsname.", + "Unknown_Unicode_property_name_or_value_1529": "Unbekannter Unicode-Eigenschaftsname oder -Wert.", + "Unknown_Unicode_property_value_1526": "Unbekannter Unicode-Eigenschaftswert.", + "Unknown_build_option_0_5072": "Unbekannte Buildoption \"{0}\".", + "Unknown_build_option_0_Did_you_mean_1_5077": "Unbekannte Buildoption \"{0}\". Meinten Sie \"{1}\"?", + "Unknown_compiler_option_0_5023": "Unbekannte Compileroption \"{0}\".", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Unbekannte Compileroption \"{0}\". Meinten Sie \"{1}\"?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Unbekanntes Schlüsselwort oder Bezeichner. Meinten Sie \"{0}\"?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Unbekannte Option \"exclude\". Meinten Sie \"exclude\"?", + "Unknown_regular_expression_flag_1499": "Unbekanntes Flag für reguläre Ausdrücke.", + "Unknown_type_acquisition_option_0_17010": "Unbekannte Option zur Typerfassung: {0}.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Unbekannte Typerfassungsoption \"{0}\". Meinten Sie \"{1}\"?", + "Unknown_watch_option_0_5078": "Unbekannte Überwachungsoption \"{0}\".", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Unbekannte Überwachungsoption \"{0}\". Meinten Sie \"{1}\"?", + "Unreachable_code_detected_7027": "Es wurde unerreichbarer Code erkannt.", + "Unterminated_Unicode_escape_sequence_1199": "Nicht abgeschlossene Unicode-Escapesequenz.", + "Unterminated_quoted_string_in_response_file_0_6045": "Nicht abgeschlossene Zeichenfolge in Anführungszeichen in der Datei \"{0}\".", + "Unterminated_regular_expression_literal_1161": "Nicht abgeschlossenes reguläres Ausdrucksliteral.", + "Unterminated_string_literal_1002": "Nicht abgeschlossenes Zeichenfolgenliteral.", + "Unterminated_template_literal_1160": "Nicht abgeschlossenes Vorlagenliteral.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Nicht typisierte Funktionsaufrufe dürfen keine Typargumente annehmen.", + "Unused_label_7028": "Nicht verwendete Bezeichnung.", + "Unused_ts_expect_error_directive_2578": "Nicht verwendete @ts-expect-error-Direktive.", + "Update_import_from_0_90058": "Import von \"{0}\" aktualisieren", + "Update_modifiers_of_0_90061": "Modifizierer von „{0}“ aktualisieren", + "Updating_output_timestamps_of_project_0_6359": "Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Unveränderte Ausgabezeitstempel von Projekt \"{0}\" werden aktualisiert...", + "Use_0_95174": "Verwenden Sie „{0}“.", + "Use_0_instead_5106": "Verwenden Sie stattdessen „{0}“.", + "Use_Number_isNaN_in_all_conditions_95175": "Verwenden Sie „Number.isNaN“ unter allen Bedingungen.", + "Use_element_access_for_0_95145": "Elementzugriff für \"{0}\" verwenden", + "Use_element_access_for_all_undeclared_properties_95146": "Elementzugriff für alle nicht deklarierten Eigenschaften verwenden", + "Use_import_type_95180": "„Importtyp“ verwenden", + "Use_synthetic_default_member_95016": "Verwenden Sie den synthetischen Member \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Verwenden Sie das package.json-Feld „exports“, wenn Sie Paketimporte auflösen.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Verwenden Sie das package.json-Feld „imports“, wenn Sie Importe auflösen.", + "Use_type_0_95181": "„Typ {0}“ verwenden", + "Using_0_subpath_1_with_target_2_6404": "Verwenden von \"{0}\" Unterpfad \"{1}\" mit Ziel \"{2}\".", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Die Verwendung von JSX-Fragmenten erfordert, dass die Fragmentfabrik '{0}' im Geltungsbereich ist, aber sie konnte nicht gefunden werden.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Das Verwenden einer Zeichenfolge in einer for...of-Anweisung wird nur in ECMAScript 5 oder höher unterstützt.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Bei Verwendung von --build wird tsc durch -b dazu veranlasst, sich eher wie ein Build-Orchestrator als ein Compiler zu verhalten. Damit wird der Aufbau von zusammengesetzten Projekten ausgelöst. Weitere Informationen dazu finden Sie unter {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Compileroptionen der Projektverweisumleitung \"{0}\" werden verwendet.", + "VERSION_6036": "VERSION", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Der Wert des Typs \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit dem Typ \"{1}\". Wollten Sie ihn aufrufen?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Der Wert des Typs \"{0}\" kann nicht aufgerufen werden. Wollten Sie \"new\" einschließen?", + "Variable_0_implicitly_has_an_1_type_7005": "Die Variable \"{0}\" weist implizit einen Typ \"{1}\" auf.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Die Variable \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Die Variable \"{0}\" weist an einigen Stellen implizit den Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Die Variable \"{0}\" weist an manchen Stellen implizit den Typ \"{1}\" auf, an denen der Typ nicht ermittelt werden kann.", + "Variable_0_is_used_before_being_assigned_2454": "Die Variable \"{0}\" wird vor ihrer Zuweisung verwendet.", + "Variable_declaration_expected_1134": "Eine Variablendeklaration wurde erwartet.", + "Variable_declaration_list_cannot_be_empty_1123": "Die Variablendeklarationsliste darf nicht leer sein.", + "Variable_declaration_not_allowed_at_this_location_1440": "Variablendeklaration ist an dieser Stelle nicht zulässig.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Die Variable muss eine explizite Typanmerkung mit --isolatedDeclarations aufweisen.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variablen mit mehreren Deklarationen können nicht inline verwendet werden.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Das variadic-Element an Position {0} in der Quelle stimmt nicht mit dem Element an Position {1} im Ziel überein.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Abweichungsanmerkungen werden nur in Typaliasnamen für Objekt-, Funktions-, Konstruktor- und zugeordnete Typen unterstützt.", + "Version_0_6029": "Version {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Weitere Informationen zur Migration finden Sie unter https://aka.ms/ts6.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Besuchen Sie https://aka.ms/tsconfig, um mehr über diese Datei zu erfahren.", + "WATCH_OPTIONS_6918": "ÜBERWACHUNGSOPTIONEN", + "Watch_and_Build_Modes_6250": "Überwachungs- und Buildmodi", + "Watch_input_files_6005": "Eingabedateien überwachen.", + "Watch_option_0_requires_a_value_of_type_1_5080": "Die Überwachungsoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Wir können nur einen Typ für „{0}“ schreiben, indem hier ein Typ für den gesamten Parameter hinzugefügt wird.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Überprüfen Sie beim Zuweisen von Funktionen, ob Parameter und Rückgabewerte untertypkompatibel sind.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Berücksichtigen Sie bei der Typüberprüfung „null“ und „undefined“.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Gibt an, ob eine veraltete Konsolenausgabe im Überwachungsmodus beibehalten wird, statt den Bildschirm zu löschen.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Alle ungültigen Zeichen mit einem Ausdruckscontainer umschließen", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Umschließen aller ungültigen Decoratorausdrücke in Klammern", + "Wrap_all_object_literal_with_parentheses_95116": "Gesamtes Objektliteral in Klammern einschließen", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Alle JSX ohne übergeordnetes Element mit JSX -Fragment umschließen", + "Wrap_in_JSX_fragment_95120": "Mit JSX-Fragment umschließen", + "Wrap_in_parentheses_95194": "Umschließen in Klammern", + "Wrap_invalid_character_in_an_expression_container_95108": "Ungültiges Zeichen mit Ausdruckscontainer umschließen", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Schließen Sie den folgenden Text, der ein Objektliteral darstellt, in Klammern ein.", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informationen zu allen Compileroptionen finden Sie unter {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Ein Modul kann nicht über einen globalen Import umbenannt werden.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Elemente, die in einem Ordner \"node_modules\" definiert sind, können nicht umbenannt werden.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Elemente, die in einem anderen Ordner \"node_modules\" definiert sind, können nicht umbenannt werden.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Sie können keine Elemente umbenennen, die in der TypeScript-Standardbibliothek definiert sind.", + "You_cannot_rename_this_element_8000": "Sie können dieses Element nicht umbenennen.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" akzeptiert zu wenige Argumente, um hier als Decorator verwendet zu werden. Wollten Sie es zuerst aufrufen und \"@{0}()\" schreiben?", + "_0_and_1_index_signatures_are_incompatible_2330": "Indexsignaturen \"{0}\" und \"{1}\" sind nicht kompatibel.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Die Vorgänge \"{0}\" und \"{1}\" dürfen nicht ohne Klammern kombiniert werden.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" ist zweimal angegeben. Das Attribut mit dem Namen \"{0}\" wird überschrieben.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "„{0}“ am Ende eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "„{0}“ am Anfang eines Typs ist keine gültige TypeScript-Syntax. Wollten Sie „{1}“ schreiben?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" kann nur importiert werden, indem das Flag \"esModuleInterop\" aktiviert und ein Standardimport verwendet wird.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" kann nur mithilfe eines Standardimports importiert werden.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" kann nur mit einem Aufruf von \"require\" oder durch Verwendung eines Standardimports importiert werden.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder über einen Standardimport importiert werden.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" kann nur mit \"import {1} = require({2})\" oder durch Aktivieren des Flags \"esModuleInterop\" und Verwendung eines Standardimports importiert werden.", + "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" kann nicht als JSX-Komponente verwendet werden.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" kann nicht als Wert verwendet werden, weil der Export mit \"export type\" durchgeführt wurde.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" kann nicht als Wert verwendet werden, weil der Import mit \"import type\" durchgeführt wurde.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "{0}-Komponenten akzeptieren Text nicht als untergeordnete Elemente. Der Text in der JSX weist den Typ \"string\" auf, aber für \"{1}\" wird der Typ \"{2}\" erwartet.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "\"{0}\" konnte mit einem arbiträren Typ instanziiert werden, der mit \"{1}\" möglicherweise in keinem Zusammenhang steht.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "„{0}“-Deklarationen können nur innerhalb eines Blocks deklariert werden.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "{0}-Deklarationen können nur in TypeScript-Dateien verwendet werden.", + "_0_declarations_may_not_have_binding_patterns_1492": "„{0}“-Deklarationen dürfen keine Bindungsmuster aufweisen.", + "_0_declarations_must_be_initialized_1155": "„{0}“-Deklarationen müssen initialisiert werden.", + "_0_expected_1005": "\"{0}\" wurde erwartet.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "„{0}“ hat einen Zeichenfolgentyp, muss aber syntaktisch erkennbare Zeichenfolgensyntax aufweisen, wenn „isolatedModules“ aktiviert ist.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" umfasst keinen exportierten Member namens \"{1}\". Meinten Sie \"{2}\"?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" weist implizit einen Rückgabetyp \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem der Rückgabeausdrücke des Objekts verwiesen wird.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist und darauf direkt oder indirekt im eigenen Initialisierer verwiesen wird.", + "_0_index_signatures_are_incompatible_2634": "\"{0}\" Indexsignaturen sind inkompatibel.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "\"{0}\" Indextyp \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" ist ein primitiver Typ, aber \"{1}\" ist ein Wrapperobjekt. Verwenden Sie vorzugsweise \"{0}\", wenn möglich.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" ist ein Typ und kann nicht in JavaScript-Dateien importiert werden. Verwenden Sie \"{1}\" in einer JSDoc-Typanmerkung.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "„{0}“ ist ein Typ und muss mit einem reinen Typimport importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}“ ist eine nicht verwendete Umbenennung von „{1}“. Wollten Sie sie als Typanmerkung verwenden?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" kann der Einschränkung vom Typ \"{1}\" zugewiesen werden, aber \"{1}\" könnte mit einem anderen Untertyp der Einschränkung \"{2}\" instanziiert werden.", + "_0_is_automatically_exported_here_18044": "\"{0}\" wird hier automatisch exportiert.", + "_0_is_declared_but_its_value_is_never_read_6133": "\"{0}\" ist deklariert, aber der zugehörige Wert wird nie gelesen.", + "_0_is_declared_but_never_used_6196": "\"{0}\" ist deklariert, wird aber nie verwendet.", + "_0_is_declared_here_2728": "\"{0}\" wird hier deklariert.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" ist als Eigenschaft in der Klasse \"{1}\" definiert, wird aber hier in \"{2}\" als Accessor überschrieben.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" ist als Accessor in der Klasse \"{1}\" definiert, wird aber hier in \"{2}\" als Instanzeigenschaft überschrieben.", + "_0_is_deprecated_6385": "\"{0}\" ist veraltet.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" ist keine gültige Metaeigenschaft für das Schlüsselwort \"{1}\". Meinten Sie \"{2}\"?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "\"{0}\" ist als Parametername nicht zulässig.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "\"{0}\" ist als Name für Variablendeklarationen nicht zulässig.", + "_0_is_of_type_unknown_18046": "\"{0}\" ist vom Typ \"unbekannt\".", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "\"{0}\" ist möglicherweise \"null\".", + "_0_is_possibly_null_or_undefined_18049": "\"{0}\" ist möglicherweise \"null\" oder \"nicht definiert\".", + "_0_is_possibly_undefined_18048": "\"{0}\" ist möglicherweise nicht \"nicht definiert\".", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Auf \"{0}\" wird direkt oder indirekt im eigenen Basisausdruck verwiesen.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Auf \"{0}\" wird direkt oder indirekt in der eigenen Typanmerkung verwiesen.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" wurde mehrmals angegeben, deshalb wird dieses Vorkommen überschrieben.", + "_0_list_cannot_be_empty_1097": "Die {0}-Liste darf nicht leer sein.", + "_0_modifier_already_seen_1030": "Der {0}-Modifizierer ist bereits vorhanden.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Klasse, einer Schnittstelle oder eines Typalias verwendet werden.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Der Modifizierer „{0}“ kann nur für einen Typparameter einer Funktion, Methode oder Klasse angezeigt werden.", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Der Modifizierer \"{0}\" darf nicht für eine Konstruktordeklaration verwendet werden.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Der Modifizierer \"{0}\" darf nicht für ein Modul- oder Namespaceelement verwendet werden.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Der Modifizierer \"{0}\" darf nicht für einen Parameter verwendet werden.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Der Modifizierer \"{0}\" darf nicht für einen Typmember verwendet werden.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Der Modifizierer „{0}“ kann nicht für einen Typparameter verwendet werden", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Der Modifizierer „{0}“ kann nicht in einer „using“-Deklaration angezeigt werden.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Der Modifizierer „{0}“ kann nicht in einer „await using“-Deklaration angezeigt werden.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Der Modifizierer \"{0}\" darf nicht für eine Indexsignatur verwendet werden.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Der Modifizierer \"{0}\" kann nicht für Klassenelemente dieser Art verwendet werden.", + "_0_modifier_cannot_be_used_here_1042": "Der Modifizierer \"{0}\" kann hier nicht verwendet werden.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Der Modifizierer \"{0}\" kann nicht in einem Umgebungskontext verwendet werden.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Der Modifizierer \"{0}\" darf nicht mit dem Modifizierer \"{1}\" verwendet werden.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Der Modifizierer \"{0}\" kann nicht mit einem privaten Bezeichner verwendet werden.", + "_0_modifier_must_precede_1_modifier_1029": "Der Modifizierer \"{0}\" muss dem Modifizierer \"{1}\" vorangestellt sein.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Auf „\\{0}“ muss ein Unicode-Eigenschaftswertausdruck folgen, der in geschweifte Klammern eingeschlossen ist.", + "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" erfordert eine explizite Typanmerkung.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Namespace verwendet.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" bezieht sich nur auf einen Typ, wird aber hier als Wert verwendet.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet. Wollten Sie \"{1} in {0}\" verwenden?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"es2015\" oder höher.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" bezieht sich auf eine globale UMD, die aktuelle Datei ist jedoch ein Modul. Ziehen Sie in Betracht, stattdessen einen Import hinzuzufügen.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" bezieht sich auf einen Wert, wird hier jedoch als Typ verwendet. Meinten Sie \"typeof {0}\"?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "„{0}“ wird in einen Typ aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor der Export erneut ausgeführt wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss mithilfe eines reinen Typimports importiert werden, wenn „verbatimModuleSyntax“ aktiviert ist.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Verwenden Sie ggf. „import type“, wobei „{0}“ importiert wird.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "„{0}“ wird in eine schreibgeschützte Deklaration aufgelöst und muss in dieser Datei als schreibgeschützt gekennzeichnet werden, bevor erneut exportiert wird, wenn „{1}“ aktiviert ist. Erwägen Sie die Verwendung von „export type { {0} as default }“.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "„{0}“ wird in eine reine Typdeklaration aufgelöst und muss mithilfe eines reinen Typreexports erneut exportiert werden, wenn „{1}“ aktiviert ist.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" sollte im CompilerOptions-Objekt der JSON-Konfigurationsdatei festgelegt werden.", + "_0_tag_already_specified_1223": "Das Tag \"{0}\" wurde bereits angegeben.", + "_0_was_also_declared_here_6203": "\"{0}\" wurde hier ebenfalls deklariert.", + "_0_was_exported_here_1377": "\"{0}\" wurde hier exportiert.", + "_0_was_imported_here_1376": "\"{0}\" wurde hier importiert.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "\"{0}\" ohne Rückgabetypanmerkung weist implizit einen Rückgabetyp \"{1}\" auf.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" ohne Rückgabetypanmerkung weist implizit einen yield-Typ \"{1}\" auf.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Der Modifizierer \"abstract\" darf nur für eine Klassen-, Methoden- oder Eigenschaftendeklaration verwendet werden.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Der Accessormodifizierer kann nur in einer Eigenschaftendeklaration angezeigt werden.", + "and_here_6204": "und hier.", + "and_npm_install_D_types_Slashnode_6290": "und npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "„arguments“ kann in Eigenschaftsinitialisierern oder statischen Initialisierungsblöcken für Klassen nicht referenziert werden.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto“: Dateien mit imports, exports, import.meta, jsx (mit jsx: respond-jsx) oder esm-Format (mit module: node16+) als Module behandeln.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Der „await“-Ausdruck kann nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "await-Ausdrücke sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "await-Ausdrücke sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "await-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" hat keine Auswirkungen auf den Typ dieses Ausdrucks.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "„await using“-Deklarationen sind in Umgebungskontexten nicht zulässig.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "„await usuing“-Deklarationen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "„await using“-Deklarationen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "„await using“-Anweisungen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Die Option \"baseUrl\" ist auf \"{0}\" festgelegt. Dieser Wert wird verwendet, um den nicht relativen Modulnamen \"{1}\" aufzulösen.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Auf „\\c“ muss ein ASCII-Buchstabe folgen.", + "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" kann nur am Anfang einer Datei verwendet werden.", + "case_or_default_expected_1130": "\"case\" oder \"default\" wurde erwartet.", + "catch_or_finally_expected_1472": "„catch“ oder „finally“ erwartet.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Der const-Enumerationsmemberinitialisierer wurde in einen unendlichen Wert ausgewertet.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Der const-Enumerationsmemberinitialisierer wurde in den unzulässigen Wert \"NaN\" ausgewertet.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Elementitialisierer für Konstantenenummeration müssen konstante Ausdrücke sein.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "const-Enumerationen können nur in Eigenschaften- bzw. Indexzugriffsausdrücken oder auf der rechten Seite einer Importdeklaration oder Exportzuweisung verwendet werden.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "\"constructor\" kann nicht als Parametereigenschaftsname verwendet werden.", + "constructor_is_a_reserved_word_18012": "\"#constructor\" ist ein reserviertes Wort.", + "default_Colon_6903": "Standard:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "\"delete\" kann für einen Bezeichner im Strict-Modus nicht aufgerufen werden.", + "export_Asterisk_does_not_re_export_a_default_1195": "Mit \"export *\" wird ein Standardwert nicht erneut exportiert.", + "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" kann nur in TypeScript-Dateien verwendet werden.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Der Modifizierer \"export\" kann nicht auf Umgebungsmodule und Modulerweiterungen angewendet werden, da diese immer sichtbar sind.", + "extends_clause_already_seen_1172": "Die extends-Klausel ist bereits vorhanden.", + "extends_clause_must_precede_implements_clause_1173": "Die extends-Klausel muss der implements-Klausel vorangestellt sein.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Die \"extends\"-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Die extends-Klausel der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Die \"extends\"-Klausel der exportierten Schnittstelle \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".", + "false_unless_checkJs_is_set_6932": "„false“, es sei denn „checkJs“ ist festgelegt", + "false_unless_composite_is_set_6906": "'false', es sei denn 'composite' ist festgelegt", + "file_6025": "Datei", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "\"for await\"-Schleifen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "\"for await\"-Schleifen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "„For await“-Schleifen können nicht innerhalb eines statischen Klassenblocks verwendet werden.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "get- und set-Zugriffsmethoden können keine this-Parameter deklarieren.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'[]', wenn 'files' angegeben ist, andernfalls '[\"**/*\"]'", + "implements_clause_already_seen_1175": "Die implements-Klausel ist bereits vorhanden.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "implements-Klauseln können nur in TypeScript-Dateien verwendet werden.", + "import_can_only_be_used_in_TypeScript_files_8002": "\"import... =\" kann nur in TypeScript-Dateien verwendet werden.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "infer-Deklarationen sind nur in der extends-Klausel eines bedingten Typs zulässig.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Auf „\\k“ muss ein Erfassungsgruppenname folgen, der in spitzen Klammern eingeschlossen ist.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" darf nicht als Name in let- oder const-Deklarationen verwendet werden.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Der new-Ausdruck, in dessen Ziel eine Konstruktsignatur fehlt, weist implizit einen Typ \"any\" auf.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\",\"bower_components\",\"jspm_packages\"]', plus der Wert von 'outDir', wenn ein Wert angegeben ist.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "„nodenext“, wenn „module“ auf „nodenext“ festgelegt ist; „node16“, wenn „module“ auf „node16“ oder „node18“ festgelegt ist; andernfalls „bundler“.", + "one_of_Colon_6900": "eines von:", + "one_or_more_Colon_6901": "eins oder mehr:", + "options_6024": "Optionen", + "or_JSX_element_expected_1145": "'{' oder JSX-Element erwartet.", + "or_expected_1144": "\"{\" oder \";\" wurde erwartet.", + "package_json_does_not_have_a_0_field_6100": "\"package.json\" besitzt kein \"{0}\"-Feld.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package.json\" weist keinen Eintrag \"typesVersions\" auf, der mit der Version {0} übereinstimmt.", + "package_json_had_a_falsy_0_field_6220": "\"package.json\" enthielt ein \"falsy\" Feld \"{0}\".", + "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" weist das {0}-Feld \"{1}\" auf, das auf \"{2}\" verweist.", + "package_json_has_a_peerDependencies_field_6281": "„package.json“ weist das Feld „peerDependencies“ auf.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package.json\" weist einen typesversion-Eintrag \"{0}\" auf, der kein gültiger semver-Bereich ist.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package.json\" weist einen typesVersions-Eintrag \"{0}\" auf, der der Compilerversion \"{1}\" entspricht. Es wird nach einem Muster gesucht, das dem Modulnamen \"{2}\" entspricht.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package.json\" weist ein Feld \"typesVersions\" mit versionsspezifischen Pfadzuordnungen auf.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Der package.json-Bereich \"{0}\" ordnet den Bezeichner \"{1}\" explizit NULL zu.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Der package.json-Bereich \"{0}\" weist einen ungültigen Typ für das Ziel des Spezifizierers \"{1}\" auf.", + "package_json_scope_0_has_no_imports_defined_6273": "Für package.jsim, Bereich \"{0}\" wurden keine Importe definiert.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Die Option \"paths\" wurde angegeben. Es wird nach einem Muster gesucht, das mit dem Modulnamen \"{0}\" übereinstimmt.", + "q_is_only_available_inside_character_class_1511": "„\\q“ ist nur innerhalb der Zeichenklasse verfügbar.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Auf „\\q“ müssen Zeichenfolgenalternativen folgen, die in geschweifte Klammern eingeschlossen sind.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Der Modifizierer \"readonly\" darf nur für eine Eigenschaftendeklaration oder Indexsignatur verwendet werden.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Der Typmodifizierer \"readonly\" ist nur für Array- und Tupelliteraltypen zulässig.", + "require_call_may_be_converted_to_an_import_80005": "Der Aufruf von \"require\" kann in einen Aufruf von \"import\" konvertiert werden.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "„resolution-mode“ kann nur für reine Typenimporte festgelegt werden.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "„resolution-mode“ ist für Typimportassertionen der einzige gültige Schlüssel.", + "resolution_mode_should_be_either_require_or_import_1453": "„resolution-mode“ muss entweder auf „require“ oder „import“ festgelegt sein.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Die Option \"rootDirs\" wurde festgelegt. Sie wird zum Auflösen des relativen Modulnamens \"{0}\" verwendet.", + "super_can_only_be_referenced_in_a_derived_class_2335": "Auf \"super\" kann nur in einer abgeleiteten Klasse verwiesen werden.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Auf \"super\" kann nur in Membern abgeleiteter Klassen oder Objektliteralausdrücken verwiesen werden.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Auf \"super\" kann nicht in einem berechneten Eigenschaftennamen verwiesen werden.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Auf \"super\" kann nicht in Konstruktorargumenten verwiesen werden.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "\"super\" ist nur in Membern von Objektliteralausdrücken zulässig, wenn die Option \"target\" den Wert \"ES2015\" oder höher aufweist.", + "super_may_not_use_type_arguments_2754": "\"super\" darf keine Typargumente verwenden.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Vor dem Zugriff auf eine Eigenschaft von \"super\" im Konstruktor einer abgeleiteten Klasse muss \"super\" aufgerufen werden.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "\"super\" muss vor dem Zugreifen auf \"this\" im Konstruktor einer abgeleiteten Klasse aufgerufen werden.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Auf \"super\" muss eine Argumentliste oder Memberzugriff folgen.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Der Zugriff auf die super-Eigenschaft ist nur in einem Konstruktor, einer Memberfunktion oder einer Memberzugriffsmethode einer abgeleiteten Klasse zulässig.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Auf \"this\" kann nicht in einem berechneten Eigenschaftennamen verwiesen werden.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Auf \"this\" kann nicht in einem Modul- oder Namespacetext verwiesen werden.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Auf \"this\" kann nicht in einem statischen Eigenschafteninitialisierer verwiesen werden.", + "this_cannot_be_referenced_in_current_location_2332": "Auf \"this\" kann am aktuellen Speicherort nicht verwiesen werden.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist.", + "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" für ES2022 und höher, einschließlich ESNext.", + "true_if_composite_false_otherwise_6909": "'true', wenn 'composite', andernfalls 'false'", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true“, wenn „moduleResolution“ „node16“, „nodenext“ oder „bundler“ ist; andernfalls „false“.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: Der TypeScript-Compiler", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", + "type_Colon_6902": "Typ:", + "unique_symbol_types_are_not_allowed_here_1335": "\"unique symbol\"-Typen sind hier nicht zulässig.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\"-Typen sind nur für Variablen in einer Variablenanweisung zulässig.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "\"unique symbol\"-Typen dürfen für eine Variablendeklaration mit einem Bindungsnamen nicht verwendet werden.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Eine Verwendung der Direktive \"use strict\" mit einer nicht einfachen Parameterliste ist nicht zugelassen.", + "use_strict_directive_used_here_1349": "Die Direktive \"use strict\" wird hier verwendet.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "„using“-Deklarationen sind in Umgebungskontexten nicht zulässig.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "with-Anweisungen sind in einem asynchronen Funktionsblock unzulässig.", + "with_statements_are_not_allowed_in_strict_mode_1101": "this-Anweisungen sind im Strict-Modus unzulässig.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Der Ausdruck \"yield\" führt implizit zu einem Typ \"any\", weil der enthaltende Generator keine Anmerkung vom Rückgabetyp umfasst.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "yield-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden." +} diff --git a/tsc/internal/diagnostics/loc/es-ES.generated.json b/tsc/internal/diagnostics/loc/es-ES.generated.json index 6d2f8b82a82e8..7326f3d5d2bd0 100644 --- a/tsc/internal/diagnostics/loc/es-ES.generated.json +++ b/tsc/internal/diagnostics/loc/es-ES.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "TODAS LAS OPCIONES DEL COMPILADOR", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Un modificador '{0}' no se puede usar con una declaración de importación.", - "A_0_parameter_must_be_the_first_parameter_2680": "El parámetro \"{0}\" debe ser el primer parámetro.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Una etiqueta \"@template\" de JSDoc no puede seguir a una etiqueta \"@typedef\", \"@callback\" u \"@overload\"", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un comentario \"@typedef\" de JSDoc no puede contener varias etiquetas \"@type\".", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "No se puede usar un literal 'bigint' como nombre de propiedad.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Un literal bigint no puede usar la notación exponencial.", - "A_bigint_literal_must_be_an_integer_1353": "Un literal bigint debe ser un entero.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parámetro de patrón de enlace no puede ser opcional en una signatura de implementación.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Una instrucción \"break\" solo se puede usar dentro de una iteración envolvente o en una instrucción switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Una instrucción \"break\" solo puede saltar a una etiqueta de una instrucción envolvente.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una clase de caracteres no debe contener un signo de puntuación doble reservado. ¿Querías escaparlo con barra diagonal inversa?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un rango de clases de caracteres no debe estar limitado por otra clase de caracteres.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una clase solo puede implementar un identificador o nombre completo con argumentos de tipo opcional.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una clase solo puede implementar un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una clase no puede extender un tipo primitivo como '{0}'. Las clases solo pueden extender valores que se puedan construir.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una clase no puede implementar un tipo primitivo como '{0}'. Solo puede implementar otros tipos de objeto con nombre.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Una declaración de clase sin el modificador \"default\" debe tener un nombre.", - "A_class_member_cannot_have_the_0_keyword_1248": "Un miembro de clase no puede tener la palabra clave '{0}'.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "No se admite una expresión de coma en un nombre de propiedad calculada.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nombre de propiedad calculada no puede hacer referencia a un parámetro de tipo desde su tipo contenedor.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nombre de propiedad calculada de una declaración de propiedad de clase debe tener un tipo de literal simple o un tipo \"unique symbol\".", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nombre de propiedad calculada en una sobrecarga de método debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nombre de propiedad calculada en un literal de tipo debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nombre de propiedad calculada en un contexto de ambiente debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nombre de propiedad calculada en una interfaz debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nombre de propiedad calculada debe ser de tipo \"string\", \"number\", \"symbol\" o \"any\".", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Las aserciones \"const\" solo pueden aplicarse a las referencias a miembros de enumeración o a literales de cadena, numéricos, booleanos, de matriz o de objeto.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Solo se puede acceder a un miembro de enumeración const mediante un literal de cadena.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un inicializador \"const\" en un contexto de ambiente debe ser un literal de cadena o numérico o bien una referencia de enumeración de literal.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un constructor no puede contener una llamada a \"super\" si su clase extiende \"null\".", - "A_constructor_cannot_have_a_this_parameter_2681": "Un constructor no puede tener un parámetro 'this'.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Una instrucción \"continue\" solo se puede usar en una instrucción de iteración envolvente.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Una instrucción \"continue\" solo puede saltar a una etiqueta de una instrucción de iteración envolvente.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "No se puede importar un archivo de declaración sin 'import type'. ¿Quería importar un archivo de implementación '{0}' en su lugar?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Un modificador \"declare\" no se puede usar en un contexto de ambiente.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un decorador solo puede modificar la implementación de un método, no una sobrecarga.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una cláusula \"default\" no puede aparecer más de una vez en una instrucción \"switch\".", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Solo se puede usar una exportación predeterminada en un módulo de estilo ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Una exportación predeterminada debe estar en el nivel superior de una declaración de módulo o archivo.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "En este contexto no se permite una aserción de asignación definitiva \"!\".", - "A_destructuring_declaration_must_have_an_initializer_1182": "Una declaración de desestructuración debe tener un inicializador.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Una llamada de importación dinámica en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una llamada de importación dinámica devuelve un valor \"Promise\". Asegúrese de que tiene una declaración para \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", - "A_file_cannot_have_a_reference_to_itself_1006": "Un archivo no puede tener una referencia a sí mismo.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una función que devuelve 'never' no puede tener un punto de conexión alcanzable.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una función a la que se llama con la palabra clave 'new' no puede tener un tipo 'this' que sea 'void'.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una función cuyo tipo declarado no es \"undefined\", \"void\" o \"any\" debe devolver un valor.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Un generador no puede tener una anotación de tipo \"void\".", - "A_get_accessor_cannot_have_parameters_1054": "Un descriptor de acceso \"get\" no puede tener parámetros.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un descriptor de acceso get debe ser al menos tan accesible como el establecedor", - "A_get_accessor_must_return_a_value_2378": "Un descriptor de acceso \"get\" debe devolver un valor.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento de tupla etiquetado se declara como opcional con un signo de interrogación después del nombre y antes de los dos puntos, en lugar de después del tipo.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento de tupla etiquetado se declara como rest con \"...\" delante del nombre, en lugar de delante del tipo.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un tipo asignado no puede declarar propiedades ni métodos.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inicializador de miembro de una declaración de enumeración no puede hacer referencia a los miembros que se declaran después de este, incluidos aquellos definidos en otras enumeraciones.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una clase mixin debe tener un constructor con un solo parámetro rest de tipo \"any[]\"", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una clase mixin que se extiende desde una variable de tipo que contiene una signatura de construcción abstracta debe declararse también como \"abstract\".", - "A_module_cannot_have_multiple_default_exports_2528": "Un módulo no puede tener varias exportaciones predeterminadas.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una declaración de espacio de nombres no puede estar en un archivo distinto de una clase o función con la que se combina.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una declaración de espacio de nombres no se puede situar antes que una clase o función con la que se combina.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una declaración de espacio de nombres solo se permite en el nivel superior de un espacio de nombres o módulo.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una declaración \"namespace\" no debe declararse con la palabra clave \"module\". Use la palabra clave \"namespace\" en su lugar.", - "A_non_dry_build_would_build_project_0_6357": "Una compilación no -dry compilaría el proyecto \"{0}\"", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Una compilación no -dry eliminaría los archivos siguientes: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Una compilación no -dry actualizaría las marcas de tiempo para la salida del proyecto \"{0}\".", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inicializador de parámetros solo se permite en una implementación de función o de constructor.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Una propiedad de parámetro no se puede declarar mediante un parámetro rest.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Una propiedad de parámetro solo se permite en una implementación de constructor.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Una propiedad de parámetro podría no declararse mediante un patrón de enlace.", - "A_promise_must_have_a_then_method_1059": "Una promesa debe tener un método \"then\".", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Una propiedad de una clase cuyo tipo sea \"unique symbol\" debe ser \"static\" y \"readonly\".", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Una propiedad de una interfaz o un literal de tipo cuyo tipo sea \"unique symbol\" debe ser \"readonly\".", - "A_required_element_cannot_follow_an_optional_element_1257": "Un elemento obligatorio no puede seguir a un elemento opcional.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parámetro obligatorio no puede seguir a un parámetro opcional.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest no puede contener un patrón de enlace.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Un elemento rest no puede seguir a otro elemento rest.", - "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest no puede tener un nombre de propiedad.", - "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest no puede tener un inicializador.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest debe ser el último en un patrón de desestructuración.", - "A_rest_element_type_must_be_an_array_type_2574": "Un tipo de elemento rest debe ser un tipo de matriz.", - "A_rest_parameter_cannot_be_optional_1047": "Un parámetro rest no puede ser opcional.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Un parámetro rest no puede tener un inicializador.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un parámetro rest debe ser el último de una lista de parámetros.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Un parámetro rest debe ser de un tipo de matriz.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un parámetro rest o un patrón de enlace no pueden finalizar con una coma.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Una instrucción \"return\" solo se puede usar en el cuerpo de una función.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Una instrucción 'return' no se puede usar dentro de un bloque estático de clase.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie de entradas que reasigna las importaciones a ubicaciones de búsqueda relativas a \"baseUrl\".", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un descriptor de acceso \"set\" no puede tener una anotación de tipo de valor devuelto.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un descriptor de acceso \"set\" no puede tener un parámetro opcional.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Un descriptor de acceso \"set\" no puede tener un parámetro rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Un descriptor de acceso \"set\" debe tener exactamente un parámetro.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parámetro de descriptor de acceso \"set\" no puede tener un inicializador.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argumento de difusión debe tener un tipo de tupla o se puede pasar a un parámetro \"rest\".", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Una llamada \"super\" debe ser una instrucción de nivel raíz dentro de un constructor de una clase derivada que contiene propiedades inicializadas, propiedades de parámetros o identificadores privados.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una llamada \"super\" debe ser la primera instrucción del constructor para hacer referencia a \"super\" o \"this\" cuando una clase derivada contiene propiedades inicializadas, propiedades de parámetro o identificadores privados.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Una restricción de tipo basada en 'this' no es compatible con una restricción de tipo basada en un parámetro.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "El tipo \"this\" solo está disponible en un miembro no estático de una clase o interfaz.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "No se puede usar un modificador \"export\" de nivel superior en declaraciones de valor en un módulo CommonJS cuando \"verbatimModuleSyntax\" está habilitado.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Ya hay un archivo \"tsconfig.json\" definido en: '{0}'.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un miembro de tupla no puede ser tanto opcional como REST.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo de tupla no se puede indizar con un valor negativo.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "No se admite una expresión de aserción de tipo en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Una propiedad de literal de tipo no puede tener un inicializador.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Una importación solo de tipo puede especificar una importación predeterminada o enlaces con nombre, pero no ambos.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un predicado de tipo no puede hacer referencia a un parámetro rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un predicado de tipo no puede hacer referencia al elemento '{0}' de un patrón de enlace.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "En las funciones y los métodos, un predicado de tipo solo se permite en la posición de tipo de valor devuelto.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "El tipo de un predicado de tipo debe poderse asignar al tipo de su parámetro.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un tipo al que se hace referencia en una firma representativo debe importarse con \"import type\" o una importación de espacio de nombres cuando están habilitados \"isolatedModules\" y \"emitDecoratorMetadata\".", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Una variable cuyo tipo sea \"unique symbol\" debe ser \"const\".", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Una expresión \"yield\" solo se permite en un cuerpo de generador.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "No se puede acceder al método abstracto '{0}' de la clase '{1}' mediante una expresión super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Los métodos abstractos solo pueden aparecer en una clase abstracta.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Las propiedades abstractas solo pueden aparecer en una clase abstracta.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "No se puede acceder a la propiedad abstracta \"{0}\" de la clase \"{1}\" en el constructor.", - "Accessibility_modifier_already_seen_1028": "El modificador de accesibilidad ya se ha visto.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Los descriptores de acceso solo están disponibles cuando el destino es ECMAScript 5 y versiones posteriores.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Los descriptores de acceso deben ser los dos abstractos o los dos no abstractos.", - "Add_0_to_unresolved_variable_90008": "Agregar \"{0}.\" a una variable no resuelta", - "Add_a_return_statement_95111": "Agregar una instrucción \"return\"", - "Add_a_return_type_to_the_function_declaration_9031": "Agrega un tipo de valor devuelto a la declaración de función.", - "Add_a_return_type_to_the_function_expression_9030": "Agrega un tipo de valor devuelto a la expresión de función.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Agregue un tipo de valor devuelto a la declaración de get accessor.", - "Add_a_return_type_to_the_method_9034": "Agregar un tipo de valor devuelto al método", - "Add_a_type_annotation_to_the_parameter_0_9028": "Agregue una anotación de tipo al parámetro {0}.", - "Add_a_type_annotation_to_the_property_0_9029": "Agregue una anotación de tipo a la propiedad {0}.", - "Add_a_type_annotation_to_the_variable_0_9027": "Agregue una anotación de tipo a la variable {0}.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Agregue un tipo al parámetro de la declaración del set accessor.", - "Add_all_missing_async_modifiers_95041": "Agregar todos los modificadores \"async\" que faltan", - "Add_all_missing_attributes_95168": "Agregar todos los atributos que faltan", - "Add_all_missing_call_parentheses_95068": "Agregar todos los paréntesis de llamada que faltan", - "Add_all_missing_function_declarations_95157": "Agregar todas las declaraciones de función que faltan", - "Add_all_missing_imports_95064": "Agregar todas las importaciones que faltan", - "Add_all_missing_members_95022": "Agregar todos los miembros que faltan", - "Add_all_missing_override_modifiers_95162": "Agregar todos los modificadores \"override\" que faltan", - "Add_all_missing_parameters_95190": "Agregar todos los parámetros que faltan", - "Add_all_missing_properties_95166": "Agregar todas las propiedades que faltan", - "Add_all_missing_return_statement_95114": "Agregar todas las instrucciones \"return\" que faltan", - "Add_all_missing_super_calls_95039": "Agregar todas las llamadas a super que faltan", - "Add_all_missing_type_annotations_90067": "Agregar todas las anotaciones de tipo que faltan", - "Add_all_optional_parameters_95193": "Agregar todos los parámetros opcionales", - "Add_annotation_of_type_0_90062": "Agregar anotación de tipo '{0}'", - "Add_async_modifier_to_containing_function_90029": "Agregar el modificador async a la función contenedora", - "Add_await_95083": "Agregar \"await\"", - "Add_await_to_initializer_for_0_95084": "Agregar \"await\" al inicializador de \"{0}\"", - "Add_await_to_initializers_95089": "Agregar \"await\" a los inicializadores", - "Add_braces_to_arrow_function_95059": "Agregar llaves a la función de flecha", - "Add_const_to_all_unresolved_variables_95082": "Agregar \"const\" a todas las variables no resueltas", - "Add_const_to_unresolved_variable_95081": "Agregar \"const\" a la variable no resuelta", - "Add_definite_assignment_assertion_to_property_0_95020": "Agregar aserción de asignación definitiva a la propiedad \"{0}\"", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Agregar aserciones de asignación definitiva a todas las propiedades sin inicializar", - "Add_export_to_make_this_file_into_a_module_95097": "Agregar \"export {}\" para transformar este archivo en un módulo", - "Add_extends_constraint_2211": "Agregar restricción \"extends\".", - "Add_extends_constraint_to_all_type_parameters_2212": "Agregar restricción \"extends\" a todos los parámetros de tipo", - "Add_import_from_0_90057": "Agregar importación desde “{0}”", - "Add_index_signature_for_property_0_90017": "Agregar una signatura de índice para la propiedad \"{0}\"", - "Add_initializer_to_property_0_95019": "Agregar inicializador a la propiedad \"{0}\"", - "Add_initializers_to_all_uninitialized_properties_95027": "Agregar inicializadores a todas las propiedades sin inicializar", - "Add_missing_attributes_95167": "Agregar los atributos que faltan", - "Add_missing_call_parentheses_95067": "Agregar los paréntesis de llamada que faltan", - "Add_missing_comma_for_object_member_completion_0_95187": "Agregue la coma que falta para el '{0}' de finalización del miembro del objeto.", - "Add_missing_enum_member_0_95063": "Agregar el miembro de enumeración \"{0}\" que falta", - "Add_missing_function_declaration_0_95156": "Agregar la declaración de función \"{0}\" que falta", - "Add_missing_new_operator_to_all_calls_95072": "Agregar el operador \"new\" que falta a todas las llamadas", - "Add_missing_new_operator_to_call_95071": "Agregar el operador \"new\" que falta a la llamada", - "Add_missing_parameter_to_0_95188": "Agregar parámetro que falta a '{0}'", - "Add_missing_parameters_to_0_95189": "Agregar parámetros que faltan a '{0}'", - "Add_missing_properties_95165": "Agregar propiedades que faltan", - "Add_missing_super_call_90001": "Agregar la llamada a \"super()\" que falta", - "Add_missing_typeof_95052": "Agregar el elemento \"typeof\" que falta", - "Add_names_to_all_parameters_without_names_95073": "Agregar nombres a todos los parámetros sin nombres", - "Add_optional_parameter_to_0_95191": "Agregar parámetro opcional a \"{0}\"", - "Add_optional_parameters_to_0_95192": "Agregar parámetros opcionales a \"{0}\"", - "Add_or_remove_braces_in_an_arrow_function_95058": "Agregar o quitar llaves en una función de flecha", - "Add_override_modifier_95160": "Agregar el modificador \"override\"", - "Add_parameter_name_90034": "Agregar un nombre de parámetro", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Agregar un calificador a todas las variables no resueltas que coincidan con un nombre de miembro", - "Add_resolution_mode_import_attribute_95196": "Agregar atributo de importación \"resolution-mode\"", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Agregar el atributo de importación \"resolution-mode\" a todas las importaciones de solo tipo que lo necesiten", - "Add_return_type_0_90063": "Agregar tipo de valor devuelto '{0}'", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Agregue satisfacciones y una aserción de tipo a esta expresión (satisfacciones T como T) para que el tipo sea explícito.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Agregar satisfacciones y una aserción de tipo insertado con '{0}'", - "Add_to_all_uncalled_decorators_95044": "Agregar \"()\" a todos los elementos Decorator a los que no se llama", - "Add_ts_ignore_to_all_error_messages_95042": "Agregar \"@ts-ignore\" a todos los mensajes de error", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Agregue \"indefinido\" a un tipo cuando se acceda mediante un índice.", - "Add_undefined_to_optional_property_type_95169": "Agregar 'undefined' al tipo de propiedad opcional", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Agregar un tipo no definido a todas las propiedades sin inicializar", - "Add_undefined_type_to_property_0_95018": "Agregar un tipo \"undefined\" a la propiedad \"{0}\"", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Agregar una conversión \"unknown\" para los tipos que no se superponen", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Agregar \"unknown\" a todas las conversiones de tipos que no se superponen", - "Add_void_to_Promise_resolved_without_a_value_95143": "Agregar \"void\" a la instancia de Promise resuelta sin un valor", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Agregar \"void\" a todas las instancias de Promise resueltas sin un valor", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Agregar un archivo tsconfig.json ayuda a organizar los proyectos que contienen archivos TypeScript y JavaScript. Más información en https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Todas las declaraciones de \"{0}\" deben tener delimitaciones idénticas.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas las declaraciones de '{0}' deben tener modificadores idénticos.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas las declaraciones de '{0}' deben tener parámetros de tipo idénticos.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas las declaraciones de un método abstracto deben ser consecutivas.", - "All_destructured_elements_are_unused_6198": "Todos los elementos desestructurados están sin utilizar.", - "All_imports_in_import_declaration_are_unused_6192": "Todas las importaciones de la declaración de importación están sin utilizar.", - "All_type_parameters_are_unused_6205": "Ninguno de los parámetros de tipo se usa.", - "All_variables_are_unused_6199": "Todas las variables son no utilizadas.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Permitir que los archivos JavaScript formen parte del programa. Use la opción \"checkJS\" para obtener errores de estos archivos.", - "Allow_accessing_UMD_globals_from_modules_6602": "Permite el acceso a las bibliotecas globales de UMD desde los módulos.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permitir las importaciones predeterminadas de los módulos sin exportación predeterminada. Esto no afecta a la emisión de código, solo a la comprobación de tipos.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permita \"importar x desde y\" cuando un módulo no tiene una exportación predeterminada.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permita la importación de funciones de ayuda desde tslib una vez por proyecto, en lugar de incluirlas por archivo.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que las importaciones incluyan extensiones de archivo TypeScript. Requiere que se establezca \"--moduleResolution bundler\" y \"--noEmit\" o \"--emitDeclarationOnly\".", - "Allow_javascript_files_to_be_compiled_6102": "Permitir que se compilen los archivos de JavaScript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permita que varias carpetas se consideren como una al resolver módulos.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "El nombre de archivo \"{0}\" ya incluido es diferente del nombre de archivo \"{1}\" solo en el uso de mayúsculas y minúsculas.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "La declaración de módulo de ambiente no puede especificar un nombre de módulo relativo.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Los módulos de ambiente no se pueden anidar en otros módulos o espacios de nombres.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un módulo AMD no puede tener varias asignaciones de nombre.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Un descriptor de acceso abstracto no puede tener una implementación.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "No se puede usar un modificador de accesibilidad con un identificador privado.", - "An_accessor_cannot_have_type_parameters_1094": "Un descriptor de acceso no puede tener parámetros de tipo.", - "An_accessor_property_cannot_be_declared_optional_1276": "Una propiedad 'accessor' no se puede declarar como opcional.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una declaración de módulo de ambiente solo se permite en el nivel superior de un archivo.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "No se proporcionó ningún argumento para \"{0}\".", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "No se proporcionó ningún argumento que coincida con este patrón de enlace.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmético debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Una función de flecha no puede tener un parámetro \"this\".", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Una función o un método de asincronía en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Una función o un método asincrónico debe devolver un \"Promise\". Asegúrese de que tiene una declaración \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", - "An_async_iterator_must_have_a_next_method_2519": "Un iterador de asincronía debe tener un método \"next()\".", - "An_element_access_expression_should_take_an_argument_1011": "Una expresión de acceso de elemento debe admitir un argumento.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "No se puede denominar un miembro de enumeración con un identificador privado.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Un miembro de enumeración no puede tener un nombre numérico.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "El nombre de un miembro de enumeración debe ir seguido de \",\", \"=\" o \"}\".", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Una versión expandida de esta información, que muestra todas las opciones posibles del compilador", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Una asignación de exportación no se puede usar en un módulo con otros elementos exportados.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Una asignación de exportación no se puede usar en espacios de nombres.", - "An_export_assignment_cannot_have_modifiers_1120": "Una asignación de exportación no puede tener modificadores.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Una asignación de exportación debe estar en el nivel superior de una declaración de módulo o archivo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una declaración de exportación solo se puede usar en el nivel superior de un módulo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una declaración de exportación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", - "An_export_declaration_cannot_have_modifiers_1193": "Una declaración de exportación no puede tener modificadores.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Una declaración \"export =\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Una declaración 'export =' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Una declaración \"export default\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Una declaración 'export default' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "No se puede probar la veracidad de una expresión de tipo \"void\".", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valor de escape Unicode extendido debe estar entre 0x0 y 0x10FFFF, incluidos.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificador o una palabra clave no puede seguir inmediatamente a un literal numérico.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Una implementación no se puede declarar en contextos de ambiente.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias de importación no puede hacer referencia a una declaración que se exportó mediante \"export type\".", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias de importación no puede hacer referencia a una declaración que se importó mediante \"import type\".", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias de importación no se puede resolver en una declaración de tipo o solo tipo cuando \"verbatimModuleSyntax\" está habilitado.", - "An_import_alias_cannot_use_import_type_1392": "Un alias de importación no puede usar \"import type\"", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una declaración de importación solo se puede usar en el nivel superior de un módulo.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una declaración de importación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", - "An_import_declaration_cannot_have_modifiers_1191": "Una declaración de importación no puede tener modificadores.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Una ruta de acceso de importación solo puede terminar con una extensión '{0}' cuando \"allowImportingTsExtensions\" está habilitado.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Una signatura de índice no puede tener un parámetro rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Una signatura de índice no puede finalizar con una coma.", - "An_index_signature_must_have_a_type_annotation_1021": "Una signatura de índice debe tener una anotación de tipo.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Una signatura de índice debe tener exactamente un parámetro.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un parámetro de signatura de índice no puede tener un signo de interrogación.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parámetro de signatura de índice no puede tener un modificador de accesibilidad.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parámetro de signatura de índice no puede tener un inicializador.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parámetro de signatura de índice debe tener una anotación de tipo.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo de parámetro de signatura de índice no puede ser un tipo literal o un tipo genérico. Considere la posibilidad de usar, en su lugar, uno de los tipos de objeto asignados.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "El tipo de parámetro de la signatura de índice debe ser \"string\", \"number\", \"symbol\" o un tipo literal de plantilla.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Una expresión de creación de una instancia no puede ir seguida de un acceso a una propiedad.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Una interfaz solo puede extender un identificador o nombre completo con argumentos de tipo opcional.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Una interfaz no puede extender un tipo primitivo como '{0}'. Solo puede extender otros tipos de objeto con nombre.", - "An_interface_property_cannot_have_an_initializer_1246": "Una propiedad de interfaz no puede tener un inicializador.", - "An_iterator_must_have_a_next_method_2489": "Un iterador debe tener un método \"next()\".", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Se necesita una pragma @jsxFrag cuando se usa una pragma @jsx con fragmentos de JSX.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un literal de objeto no puede tener varios descriptores de acceso get o set con el mismo nombre.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un literal de objeto no puede tener varias propiedades con el mismo nombre.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un literal de objeto no puede tener una propiedad y un descriptor de acceso con el mismo nombre.", - "An_object_member_cannot_be_declared_optional_1162": "Un miembro de objeto no se puede declarar como opcional.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "El método '[Symbol.hasInstance]' de un objeto debe devolver un valor booleano para que se use en el lado derecho de una expresión \"instanceof\".", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Una cadena opcional no puede contener identificadores privados.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Un elemento opcional no puede seguir a un elemento rest.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Este contenedor reemplaza un valor externo de \"this\".", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Una signatura de sobrecarga no se puede declarar como generador.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "No se admite una expresión unaria con el operador '{0}' en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.", - "Annotate_everything_with_types_from_JSDoc_95043": "Anotar todo con tipos de JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propiedades de función expando en un espacio de nombres", - "Annotate_with_type_from_JSDoc_95009": "Anotar con tipo de JSDoc", - "Another_export_default_is_here_2753": "Aquí hay otro valor export default.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Cualquier propiedad Unicode que posiblemente coincida con más de un carácter solo está disponible cuando se establece la marca Unicode Sets (v).", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Todo lo que posiblemente coincida con más de un carácter no es válido dentro de una clase de caracteres negada.", - "Are_you_missing_a_semicolon_2734": "¿Falta un punto y coma?", - "Argument_expression_expected_1135": "Se esperaba una expresión de argumento.", - "Argument_for_0_option_must_be_Colon_1_6046": "El argumento para la opción \"{0}\" debe ser {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "El argumento de importación dinámica no puede ser un elemento de propagación.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "No se puede asignar un argumento de tipo \"{0}\" al parámetro de tipo \"{1}\".", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "El argumento de tipo '{0}' no se puede asignar al parámetro de tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "No se proporcionaron argumentos para el parámetro rest \"{0}\".", - "Array_element_destructuring_pattern_expected_1181": "Se esperaba un patrón de desestructuración de elementos de matriz.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Las matrices con elementos spread no se pueden inferir con --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Las aserciones requieren que todos los nombres del destino de llamada se declaren con una anotación de tipo explícito.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Las aserciones requieren que el destino de llamada sea un identificador o un nombre calificado.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "No se admite la asignación de propiedades a funciones sin declararlas con --isolatedDeclarations. Agregue una declaración explícita para las propiedades asignadas a esta función.", - "Asterisk_Slash_expected_1010": "Se esperaba \"*/\".", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Al menos un descriptor de acceso debe tener una anotación de tipo explícita con --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Los aumentos del ámbito global solo pueden anidarse directamente en módulos externos o en declaraciones de módulos de ambiente.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Los aumentos del ámbito global deben tener el modificador 'declare', a menos que aparezcan en un contexto de ambiente.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La detección automática de escritura está habilitada en el proyecto '{0}'. Se va a ejecutar un paso de resolución extra para el módulo '{1}' usando la ubicación de caché '{2}'.", - "BUILD_OPTIONS_6919": "OPCIONES DE COMPILACIÓN", - "Backwards_Compatibility_6253": "Compatibilidad con versiones anteriores", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Las expresiones de clase base no pueden hacer referencia a parámetros de tipo de clase.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "El tipo de valor devuelto del constructor base \"{0}\" no es un tipo de objeto ni una intersección de tipos de objeto con miembros conocidos estáticamente.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Todos los constructores base deben tener el mismo tipo de valor devuelto.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Directorio base para resolver nombres de módulos no absolutos.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Los literales BigInt no están disponibles cuando el destino es anterior a ES2020.", - "Binary_digit_expected_1177": "Se esperaba un dígito binario.", - "Binding_element_0_implicitly_has_an_1_type_7031": "El elemento de enlace '{0}' tiene un tipo '{1}' implícito.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable con ámbito de bloque '{0}' usada antes de su declaración.", - "Build_a_composite_project_in_the_working_directory_6925": "Compile un proyecto compuesto en el directorio de trabajo.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos los proyectos, incluidos los que aparecen actualizados.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Generar uno o varios proyectos y sus dependencias, si no están actualizados", - "Build_option_0_requires_a_value_of_type_1_5073": "La opción de compilación \"{0}\" requiere un valor de tipo {1}.", - "Building_project_0_6358": "Compilando el proyecto \"{0}\"...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Se crea una instancia de los iteradores integrados con un tipo 'TReturn' de 'undefined' en lugar de 'any'.", - "COMMAND_LINE_FLAGS_6921": "MARCAS DE LÍNEA DE COMANDOS", - "COMMON_COMMANDS_6916": "COMANDOS COMUNES", - "COMMON_COMPILER_OPTIONS_6920": "OPCIONES COMUNES DEL COMPILADOR", - "Call_decorator_expression_90028": "Llamar a la expresión decorador", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Los tipos de valor devuelto de la signatura de llamada \"{0}\" y \"{1}\" son incompatibles.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signatura de llamada, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Las signaturas de llamada sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.", - "Call_target_does_not_contain_any_signatures_2346": "El destino de llamada no contiene signaturas.", - "Can_only_convert_logical_AND_access_chains_95142": "Solo pueden convertirse las cadenas lógicas Y de acceso", - "Can_only_convert_named_export_95164": "Solo se pueden convertir exportaciones con nombre.", - "Can_only_convert_property_with_modifier_95137": "Solo se puede convertir la propiedad con el modificador", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Solo se pueden convertir concatenaciones de cadenas y literales de cadena", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "No se puede acceder a \"{0}.{1}\" porque \"{0}\" es un tipo, no un espacio de nombres. ¿Su intención era recuperar el tipo de la propiedad \"{1}\" en \"{0}\" con \"{0}[\"{1}\"]\"?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "No se puede obtener acceso a '{0}' desde otro archivo sin calificación cuando '{1}' está habilitado. Use \"{2}\" en su lugar.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "No se puede tener acceso a las enumeraciones const de ambiente cuando '{0}' está habilitado.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "No se puede asignar un tipo de constructor '{0}' a un tipo de constructor '{1}'.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "No se puede asignar un tipo de constructor abstracto a uno no abstracto.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "No se puede asignar a \"{0}\" porque es una clase.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "No se puede asignar a \"{0}\" porque es una constante.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "No se puede asignar a \"{0}\" porque es una función.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "No se puede asignar a \"{0}\" porque es un espacio de nombres.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "No se puede asignar a \"{0}\" porque es una propiedad de solo lectura.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "No se puede asignar a '{0}' porque es una enumeración.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "No se puede asignar a '{0}' porque es una importación.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "No se puede asignar a '{0}' porque no es una variable.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "No se puede asignar al método privado \"{0}\". No se puede escribir en los métodos privados.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "No se puede aumentar el módulo '{0}' porque se resuelve como una entidad que no es un módulo.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "No se puede aumentar el módulo \"{0}\" con exportaciones de valores porque se resuelve como una entidad que no es un módulo.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "No se pueden compilar los módulos con la opción '{0}' a no ser que la marca \"--module\" sea \"amd\" o \"system\".", - "Cannot_create_an_instance_of_an_abstract_class_2511": "No se puede crear una instancia de una clase abstracta.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "No se puede delegar la iteración en un valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero el generador que lo contiene siempre enviará \"{0}\".", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "No se puede exportar '{0}'. Solo se pueden exportar declaraciones locales desde un módulo.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "No se puede extender una clase '{0}'. El constructor de la clase está marcado como privado.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "No se puede extender una interfaz '{0}'. ¿Quiso decir 'implements'?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "No se encuentra ningún archivo tsconfig.json en el directorio actual: {0}", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "No se encuentra ningún archivo tsconfig.json en el directorio especificado: \"{0}\".", - "Cannot_find_global_type_0_2318": "No se encuentra el tipo '{0}' global.", - "Cannot_find_global_value_0_2468": "No se encuentra el valor '{0}' global.", - "Cannot_find_lib_definition_for_0_2726": "No se encuentra la definición lib para \"{0}\".", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "No se encuentra la definición lib para \"{0}\". ¿Quiso decir \"{1}\"?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "No se encuentra el módulo \"{0}\". Considere la posibilidad de usar \"--resolveJsonModule\" para importar el módulo con la extensión \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "No se encuentra el módulo “{0}”. ¿Pretendía establecer la opción “moduleResolution” en “nodenext” o agregar alias a la opción “paths”?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "No se encuentra el módulo \"{0}\" ni sus declaraciones de tipos correspondientes.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "No se pueden encontrar declaraciones de módulo o tipo para la importación de efectos secundarios de ''{0}\".", - "Cannot_find_name_0_2304": "No se encuentra el nombre '{0}'.", - "Cannot_find_name_0_Did_you_mean_1_2552": "No se encuentra el nombre \"{0}\". ¿Quería decir \"{1}\"?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "No se encuentra el nombre '{0}'. ¿Quería decir el miembro de instancia 'this.{0}'?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "No se encuentra el nombre '{0}'. ¿Quería decir el miembro estático '{1}.{0}'?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "No se puede encontrar el nombre \"{0}\". ¿Ha querido escribir esto en una función asincrónica?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{1}\" o posterior.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" para incluir \"dom\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe `npm i --save-dev @types/bun`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe \"npm i --save-dev @types/bun\" y agregue \"bun\" al campo de tipos de tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un ejecutor de pruebas? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un test runner? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\" y, a continuación, agregue \"jest\" o \"mocha\" al campo de tipos del archivo tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\" y, a continuación, agregue \"jquery\" al campo de tipos del archivo tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para el nodo? Pruebe \"npm i --save-dev @types/node\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para el nodo? Pruebe \"npm i --save-dev @types/node\" y, a continuación, agregue \"node\" al campo de tipos del archivo tsconfig.", - "Cannot_find_namespace_0_2503": "No se encuentra el espacio de nombres '{0}'.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "No se encuentra el espacio de nombres \"{0}\". ¿Quería decir \"{1}\"?", - "Cannot_find_parameter_0_1225": "No se encuentra el parámetro '{0}'.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "No se encuentra la ruta de acceso de subdirectorio común para los archivos de entrada.", - "Cannot_find_type_definition_file_for_0_2688": "No se puede encontrar el archivo de definición de tipo para '{0}'.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "No se pueden importar archivos de declaración de tipos. Considere importar \"{0}\" en lugar de \"{1}\".", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "No se puede inicializar la variable '{0}' de ámbito externo en el mismo ámbito que la declaración '{1}' con ámbito de bloque.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "No se puede invocar un objeto que es posiblemente \"null\".", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "No se puede invocar un objeto que es posiblemente \"null\" o \"no definido\".", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "No se puede invocar un objeto que es posiblemente \"no definido\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la desestructuración de matriz siempre enviará \"{0}\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la propagación de matriz siempre enviará \"{0}\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero for-of siempre enviará \"{0}\".", - "Cannot_move_statements_to_the_selected_file_95183": "No se pueden mover instrucciones al archivo seleccionado", - "Cannot_move_to_file_selected_file_is_invalid_95179": "No se puede mover al archivo, el archivo seleccionado no es válido", - "Cannot_read_file_0_5083": "No se puede leer el archivo \"{0}\".", - "Cannot_read_file_0_Colon_1_5012": "No se puede leer el archivo \"{0}\": {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "No se puede volver a declarar la variable con ámbito de bloque '{0}'.", - "Cannot_redeclare_exported_variable_0_2323": "No se puede volver a declarar la variable '{0}' exportada.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "No se puede volver a declarar el identificador \"{0}\" en la cláusula catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "No se puede iniciar una llamada de función en una anotación de tipo.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX no se puede usar si no se proporciona la marca \"--jsx\".", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "No se puede usar 'export import' en un tipo o espacio de nombres de solo tipo cuando '{0}' está habilitado.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "No se pueden usar importaciones, exportaciones o aumentos de módulos si el valor de \"--module\" es \"none\".", - "Cannot_use_namespace_0_as_a_type_2709": "No se puede utilizar el espacio de nombres '{0}' como un tipo.", - "Cannot_use_namespace_0_as_a_value_2708": "No se puede utilizar el espacio de nombres '{0}' como un valor.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "No se puede usar 'this' en un inicializador de propiedad estática de una clase decorada.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "No se puede escribir en el archivo \"{0}\" porque este sobrescribirá el archivo \".tsbuildinfo\" que el proyecto \"{1}\" al que se hace referencia ha generado.", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "No se puede escribir en el archivo '{0}' porque se sobrescribiría con varios archivos de entrada.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "No se puede escribir en el archivo '{0}' porque sobrescribiría el archivo de entrada.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "La variable de la cláusula catch no puede tener un inicializador.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "La anotación de tipo de variable de la cláusula catch debe ser \"any\" o \"unknown\" si se especifica.", - "Change_0_to_1_90014": "Cambiar \"{0}\" a \"{1}\"", - "Change_all_extended_interfaces_to_implements_95038": "Cambiar todas las interfaces mejoradas a \"implements\"", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Cambiar todos los tipos de jsdoc-style a TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiar todos los tipos de jsdoc-style a TypeScript (y agregar \"| undefined\" a los tipos que aceptan valores NULL)", - "Change_extends_to_implements_90003": "Cambiar \"extends\" a \"implements\"", - "Change_spelling_to_0_90022": "Cambiar la ortografía a \"{0}\"", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Compruebe las propiedades de clase declaradas pero no establecidas en el constructor.", - "Check_side_effect_imports_6806": "Compruebe las importaciones de efectos secundarios.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Compruebe que los argumentos de los métodos 'bind', 'call' y 'apply' coinciden con la función original.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Comprobando si '{0}' es el prefijo coincidente más largo para '{1}' - '{2}'.", - "Circular_definition_of_import_alias_0_2303": "Definición circular del alias de importación '{0}'.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Se detectó circularidad al resolver la configuración: {0}", - "Circularity_originates_in_type_at_this_location_2751": "La circularidad se origina en el tipo de esta ubicación.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La clase '{0}' define el descriptor de acceso del miembro de instancia como '{1}', pero la clase extendida '{2}' lo define como función miembro de instancia.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La clase '{0}' define la función miembro de instancia como '{1}', pero la clase extendida '{2}' la define como descriptor de acceso de miembro de instancia.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La clase '{0}' define la propiedad de miembro de instancia como '{1}', pero la clase extendida '{2}' la define como función miembro de instancia.", - "Class_0_incorrectly_extends_base_class_1_2415": "La clase '{0}' extiende la clase base '{1}' de forma incorrecta.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La clase \"{0}\" no implementa correctamente la clase \"{1}\". ¿Pretendía extender \"{1}\" y heredar sus miembros como una subclase?", - "Class_0_incorrectly_implements_interface_1_2420": "La clase '{0}' implementa la interfaz '{1}' de forma incorrecta.", - "Class_0_used_before_its_declaration_2449": "Se ha usado la clase \"{0}\" antes de declararla.", - "Class_constructor_may_not_be_a_generator_1368": "El constructor de clase no puede ser un generador.", - "Class_constructor_may_not_be_an_accessor_1341": "El constructor de clase no puede ser un descriptor de acceso.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "La declaración de clase no puede implementar la lista de sobrecarga para '{0}'.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Las declaraciones de clase no pueden tener más de una etiqueta \"@augments\" o \"@extends\".", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Los elementos Decorator de una clase no se pueden usar con un identificador privado estático. Pruebe a quitar el elemento Decorator experimental.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "El campo de clase '{0}' definido por la clase primaria no es accesible en la clase secundaria a través de super.", - "Class_name_cannot_be_0_2414": "El nombre de la clase no puede ser \"{0}\".", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "El nombre de clase no puede ser 'Object' cuando el destino es ES5 y versiones posteriores con el módulo {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "El lado estático de la clase '{0}' extiende el lado estático de la clase base '{1}' de forma incorrecta.", - "Classes_can_only_extend_a_single_class_1174": "Las clases solo pueden extender una clase única.", - "Classes_may_not_have_a_field_named_constructor_18006": "Las clases no pueden tener un campo denominado \"constructor\".", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "El código contenido en una clase se calcula en el modo STRICT de JavaScript que no permite este uso de '{0}'. Para obtener más información, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Opciones de la línea de comandos", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila el proyecto teniendo en cuenta la ruta de acceso a su archivo de configuración o a una carpeta con un archivo \"tsconfig.json\".", - "Compiler_Diagnostics_6251": "Diagnóstico del compilador", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "No se puede proporcionar una cadena vacía a la opción del compilador '{0}'.", - "Compiler_option_0_expects_an_argument_6044": "La opción '{0}' del compilador espera un argumento.", - "Compiler_option_0_may_not_be_used_with_build_5094": "La opción \"--{0}\" del compilador no se puede usar con \"--build\".", - "Compiler_option_0_may_only_be_used_with_build_5093": "La opción \"--{0}\" del compilador solo se puede usar con \"--build\".", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "La opción del compilador \"{0}\" del valor \"{1}\" es inestable. Use TypeScript nocturno para silenciar este error. Intente actualizar con \"npm install -D typescript@next\".", - "Compiler_option_0_requires_a_value_of_type_1_5024": "La opción '{0}' del compilador requiere un valor de tipo {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "El compilador reserva el nombre \"{0}\" al emitir un identificador privado válido para versiones anteriores.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila el proyecto TypeScript ubicado en la ruta de acceso especificada.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila el proyecto actual (tsconfig.json en el directorio de trabajo).", - "Compiles_the_current_project_with_additional_settings_6929": "Compila el proyecto actual con opciones de configuración adicionales", - "Completeness_6257": "Integridad", - "Composite_projects_may_not_disable_declaration_emit_6304": "Los proyectos compuestos no pueden deshabilitar la emisión de declaración.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Los proyectos compuestos no pueden deshabilitar la compilación incremental.", - "Computed_from_the_list_of_input_files_6911": "Calculado a partir de la lista de archivos de entrada", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Las propiedades calculadas deben ser literales de número o cadena, variables o expresiones de puntos con --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "No se permiten nombres de propiedad calculada en las enumeraciones.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Los nombres de propiedad calculada en literales de clase u objeto no se pueden inferir con --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "No se permiten valores calculados en una enumeración que tiene miembros con valores de cadena.", - "Concatenate_and_emit_output_to_single_file_6001": "Concatenar y emitir la salida en un único archivo.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condiciones que se establecerán además de los valores predeterminados específicos de la resolución al resolver las importaciones.", - "Conflicts_are_in_this_file_6201": "Hay conflictos en este archivo.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere agregar un modificador 'declare' a esta clase.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Los tipos de valor devuelto de la signatura de construcción \"{0}\" y \"{1}\" son incompatibles.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signatura de construcción, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Las signaturas de construcción sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.", - "Constructor_implementation_is_missing_2390": "Falta la implementación del constructor.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "El constructor de la clase '{0}' es privado y solo es accesible desde la declaración de la clase.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "El constructor de la clase '{0}' está protegido y solo es accesible desde la declaración de la clase.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notación de tipo de constructor debe incluirse entre paréntesis cuando se use en un tipo de unión.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notación de tipo de constructor debe incluirse entre paréntesis cuando se use en un tipo de intersección.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Los constructores de las clases derivadas deben contener una llamada a \"super\".", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "El archivo contenedor no se ha especificado y no se puede determinar el directorio raíz. Se omitirá la búsqueda en la carpeta 'node_modules'.", - "Containing_function_is_not_an_arrow_function_95128": "La función contenedora no es una función de flecha", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controlar qué método se usa para detectar archivos JS con formato de módulo.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversión del tipo \"{0}\" al tipo \"{1}\" puede ser un error, porque ninguno de los tipos se superpone suficientemente al otro. Si esto era intencionado, convierta primero la expresión en \"unknown\".", - "Convert_0_to_1_in_0_95003": "Convertir \"{0}\" a \"{1} en \"{0}\"", - "Convert_0_to_mapped_object_type_95055": "Convertir \"{0}\" en el tipo de objeto asignado", - "Convert_all_const_to_let_95102": "Convertir todo \"const\" en \"let\"", - "Convert_all_constructor_functions_to_classes_95045": "Convertir todas las funciones de constructor en clases", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir todos los caracteres no válidos al código de entidad HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir todos los tipos reexportados en exportaciones solo de tipo", - "Convert_all_require_to_import_95048": "Convertir todas las repeticiones de \"require\" en \"import\"", - "Convert_all_to_async_functions_95066": "Convertir todo en funciones asincrónicas", - "Convert_all_to_bigint_numeric_literals_95092": "Convertir todo en literales numéricos bigint", - "Convert_all_to_default_imports_95035": "Convertir todo en importaciones predeterminadas", - "Convert_all_type_literals_to_mapped_type_95021": "Convertir todos los literales de tipo en un tipo asignado", - "Convert_all_typedef_to_TypeScript_types_95177": "Convertir typedef en todos los tipos TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Convertir una función de flecha o una expresión de función", - "Convert_const_to_let_95093": "Convertir \"const\" en \"let\"", - "Convert_default_export_to_named_export_95061": "Convertir una exportación predeterminada en exportación con nombre", - "Convert_function_declaration_0_to_arrow_function_95106": "Convertir la declaración de función \"{0}\" en función de flecha", - "Convert_function_expression_0_to_arrow_function_95105": "Convertir la expresión de función \"{0}\" en función de flecha", - "Convert_function_to_an_ES2015_class_95001": "Convertir la función en una clase ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Convertir un carácter no válido a su código de entidad HTML", - "Convert_named_export_to_default_export_95062": "Convertir una exportación con nombre en exportación predeterminada", - "Convert_named_imports_to_default_import_95170": "Convertir importaciones con nombre en importación predeterminada", - "Convert_named_imports_to_namespace_import_95057": "Convertir importaciones con nombre en una importación de espacio de nombres", - "Convert_namespace_import_to_named_imports_95056": "Convertir una importación de espacio de nombres en importaciones con nombre", - "Convert_overload_list_to_single_signature_95118": "Convertir lista de sobrecargas en firma única", - "Convert_parameters_to_destructured_object_95075": "Convertir los parámetros en un objeto desestructurado", - "Convert_require_to_import_95047": "Convertir \"require\" en \"import\"", - "Convert_to_ES_module_95017": "Convertir en módulo ES", - "Convert_to_a_bigint_numeric_literal_95091": "Convertir en un literal numérico bigint", - "Convert_to_anonymous_function_95123": "Convertir en función anónima", - "Convert_to_arrow_function_95125": "Convertir en función de flecha", - "Convert_to_async_function_95065": "Convertir en función asincrónica", - "Convert_to_default_import_95013": "Convertir en importación predeterminada", - "Convert_to_named_function_95124": "Convertir en función con nombre", - "Convert_to_optional_chain_expression_95139": "Convertir en expresión de cadena opcional", - "Convert_to_template_string_95096": "Convertir en cadena de plantilla", - "Convert_to_type_only_export_1364": "Convertir en exportación solo de tipo", - "Convert_typedef_to_TypeScript_type_95176": "Convertir typedef en tipo TypeScript.", - "Corrupted_locale_file_0_6051": "Archivo de configuración regional {0} dañado.", - "Could_not_convert_to_anonymous_function_95153": "No se puede convertir a una función anónima", - "Could_not_convert_to_arrow_function_95151": "No se puede convertir a una función de flecha", - "Could_not_convert_to_named_function_95152": "No se puede convertir a una función con nombre", - "Could_not_determine_function_return_type_95150": "No se puede determinar el tipo de valor devuelto de la función", - "Could_not_find_a_containing_arrow_function_95127": "No se pudo encontrar una función de flecha contenedora", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "No se encontró ningún archivo de declaración para el módulo '{0}'. '{1}' tiene un tipo \"any\" de forma implícita.", - "Could_not_find_convertible_access_expression_95140": "No se encontró la expresión de acceso convertible.", - "Could_not_find_export_statement_95129": "No se pudo encontrar la instrucción export", - "Could_not_find_import_clause_95131": "No se pudo encontrar la cláusula import", - "Could_not_find_matching_access_expressions_95141": "No se encontraron expresiones de acceso coincidentes.", - "Could_not_find_name_0_Did_you_mean_1_2570": "No se ha encontrado el nombre \"{0}\". ¿Quiso decir \"{1}\"?", - "Could_not_find_namespace_import_or_named_imports_95132": "No se pudo encontrar la importación del espacio de nombres ni las importaciones con nombre", - "Could_not_find_property_for_which_to_generate_accessor_95135": "No se pudo encontrar la propiedad para la que se debe generar el descriptor de acceso", - "Could_not_find_variable_to_inline_95185": "No se pudo encontrar la variable para insertar.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "No se pudo resolver la ruta de acceso \"{0}\" con las extensiones: {1}.", - "Could_not_write_file_0_Colon_1_5033": "No se puede escribir en el archivo \"{0}\": \"{1}\".", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Cree archivos de mapa de origen para los archivos JavaScript emitidos.", - "Create_sourcemaps_for_d_ts_files_6614": "Cree mapas de origen para archivos d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un archivo tsconfig.json con la configuración recomendada en el directorio de trabajo.", - "DIRECTORY_6038": "DIRECTORIO", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "No se permiten decimales con ceros iniciales.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La declaración aumenta una declaración en otro archivo. Esta operación no se puede serializar.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La emisión de declaración para este archivo requiere conservar esta importación para aumentos. Esto no se admite con --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\" del módulo \"{1}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "La emisión de declaración para este parámetro requiere agregar implícitamente un elemento no definido a su tipo. Esto no se admite con --isolatedDeclarations.", - "Declaration_expected_1146": "Se esperaba una declaración.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Conflictos entre nombres de declaración con el identificador global '{0}' integrado.", - "Declaration_or_statement_expected_1128": "Se esperaba una declaración o una instrucción.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Se esperaba una declaración o una instrucción. El elemento \"=\" sigue a un bloque de instrucciones por lo que, si pretendía escribir una asignación de desestructuración, puede que sea necesario incluir toda la asignación entre paréntesis.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Las declaraciones con aserciones de asignación definitiva deben tener también anotaciones de tipo.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Las declaraciones con inicializadores no pueden tener también aserciones de asignación definitiva.", - "Declare_a_private_field_named_0_90053": "Declare un campo privado denominado \"{0}\".", - "Declare_method_0_90023": "Declarar el método \"{0}\"", - "Declare_private_method_0_90038": "Declarar el método \"{0}\" privado", - "Declare_private_property_0_90035": "Declarar la propiedad \"{0}\" privada", - "Declare_property_0_90016": "Declarar la propiedad \"{0}\"", - "Declare_static_method_0_90024": "Declarar el método estático \"{0}\"", - "Declare_static_property_0_90027": "Declarar la propiedad estática \"{0}\"", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "El tipo de valor devuelto de la función Decorator \"{0}\" no se puede asignar al tipo \"{1}\".", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "El tipo de valor devuelto de la función Decorator es \"{0}\" pero se espera que sea \"void\" o \"any\".", - "Decorator_used_before_export_here_1486": "El elemento Decorator se usa antes de \"exportar\" aquí.", - "Decorators_are_not_valid_here_1206": "Los elementos Decorator no son válidos aquí.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "No se pueden aplicar elementos Decorator a varios descriptores de acceso get o set con el mismo nombre.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Los elementos Decorator no pueden aparecer después de \"export\" o \"export default\" si también aparecen antes de \"export\".", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Los decoradores deben preceder al nombre y a todas las palabras clave de las declaraciones de propiedad.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Variables de cláusula catch predeterminadas como \"unknown\" en lugar de \"any\".", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "La exportación predeterminada del módulo tiene o usa el nombre privado '{0}'.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Las exportaciones predeterminadas no se pueden inferir con --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "No se permiten importaciones predeterminadas en una importación diferida.", - "Default_library_1424": "Biblioteca predeterminada", - "Default_library_for_target_0_1425": "Biblioteca predeterminada para el destino \"{0}\"", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Las importaciones diferidas solo se admiten cuando la marca '--module' está establecida en 'esnext' o 'preserve'.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Las definiciones de los identificadores siguientes entran en conflicto con las de otro archivo: {0}", - "Delete_all_unused_declarations_95024": "Eliminar todas las declaraciones sin usar", - "Delete_all_unused_imports_95147": "Eliminar todas las importaciones sin usar", - "Delete_all_unused_param_tags_95172": "Eliminar todas las etiquetas \"@param\" sin usar", - "Delete_the_outputs_of_all_projects_6365": "Eliminar las salidas de todos los proyectos.", - "Delete_unused_param_tag_0_95171": "Eliminar la etiqueta \"@param\" sin usar \"{0}\"", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[En desuso] Use \"--jsxFactory\" en su lugar. Especifique el objeto invocado para createElement cuando el destino sea la emisión de JSX \"react\"", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[En desuso] Use \"--outFile\" en su lugar. Concatena y emite la salida en un solo archivo.", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[En desuso] Use \"--skipLibCheck\" en su lugar. Omite la comprobación de tipos de los archivos de declaración de biblioteca predeterminados.", - "Deprecated_setting_Use_outFile_instead_6677": "Valor en desuso. Use \"outFile\" en su lugar.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "¿Olvidó usar \"await\"?", - "Did_you_mean_0_1369": "¿Quiso decir \"{0}\"?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "¿Quiso decir que \"{0}\" se restrinja al tipo \"new (...args: any[]) => {1}\"?", - "Did_you_mean_to_call_this_expression_6212": "¿Pretendía llamar a esta expresión?", - "Did_you_mean_to_mark_this_function_as_async_1356": "¿Pretendía marcar esta función como \"async\"?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "¿Pretendía usar \":\"? El símbolo \"=\" solo puede seguir a un nombre de propiedad cuando el literal de objeto contenedor forma parte de un patrón de desestructuración.", - "Did_you_mean_to_use_new_with_this_expression_6213": "¿Pretendía usar \"new\" con esta expresión?", - "Digit_expected_1124": "Se esperaba un dígito.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "El directorio \"{0}\" no existe, se omitirán todas las búsquedas en él.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "El directorio \"{0}\" no tiene ningún ámbito que contenga package.json. Las importaciones no se resolverán.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deshabilite la adición de directivas \"use strict\" en archivos JavaScript emitidos.", - "Disable_checking_for_this_file_90018": "Deshabilitar la comprobación para este archivo", - "Disable_emitting_comments_6688": "Deshabilite el poder escribir comentarios.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deshabilite la emisión de declaraciones que tienen \"@internal\" en los comentarios de JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Deshabilita la emisión de archivos de una compilación.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deshabilite la emisión de archivos si se informa algún error de comprobación de tipos.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deshabilite el borrado de declaraciones \"enumeración const\" en el código generado.", - "Disable_error_reporting_for_unreachable_code_6603": "Deshabilite los informes de errores para los códigos inaccesibles.", - "Disable_error_reporting_for_unused_labels_6604": "Deshabilite los informes de errores para etiquetas sin usar.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deshabilitar la comprobación completa de tipos (solo se notificarán los errores críticos de análisis y emisión).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deshabilite la generación de funciones auxiliares personalizadas como \"__extends\" en la salida compilada.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deshabilite la inclusión de cualquier archivo de biblioteca, incluido el archivo predeterminado lib.d.ts.", - "Disable_loading_referenced_projects_6235": "Deshabilite la carga de proyectos a los que se hace referencia.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deshabilite la preferencia de archivos de código fuente en lugar de archivos de declaración cuando haga referencia a proyectos compuestos.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deshabilite la creación de informes de errores de exceso de propiedad durante la creación de literales de objetos.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deshabilite la resolución de symlink a su realpath. Se corresponde con la misma marca en el nodo.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Deshabilitar los límites de tamaño de proyectos de JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Deshabilite la búsqueda de la solución para este proyecto.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deshabilite la comprobación estricta de firmas genéricas en tipos de función.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Deshabilitar el tipo de adquisición para proyectos de JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Deshabilite los tipos truncados en los mensajes de error.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deshabilite el uso de los archivos de código fuente en lugar de los archivos de declaración de los proyectos a los que se hace referencia.", - "Disable_wiping_the_console_in_watch_mode_6684": "Deshabilita la eliminación de la consola en modo inspección.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deshabilite la inferencia para la adquisición de tipos consultando los nombres de los archivos de un proyecto.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "No permita que ningún \"import\", \"require\" o \"\" amplíe el número de archivos que TypeScript debe agregar a un proyecto.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "No permitir referencias al mismo archivo con un uso incoherente de mayúsculas y minúsculas.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "No agregar módulos importados ni referencias con triple barra diagonal a la lista de archivos compilados.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "No permitir construcciones en tiempo de ejecución que no formen parte de ECMAScript.", - "Do_not_emit_comments_to_output_6009": "No emitir comentarios en la salida.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "No emitir declaraciones para el código que tiene una anotación \"@internal\".", - "Do_not_emit_outputs_6010": "No emitir salidas.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "No emitir salidas si se informa de algún error.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "No emitir directivas 'use strict' en la salida del módulo.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "No borrar las declaraciones de enumeración const en el código generado.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "No generar funciones del asistente personalizadas como \"__extends\" en la salida compilada.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "No incluir el archivo de biblioteca predeterminado (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "No notificar los errores del código inaccesible.", - "Do_not_report_errors_on_unused_labels_6074": "No notificar los errores de las etiquetas no usadas.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "No resolver la ruta de acceso real de los vínculos simbólicos.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "No transforme ni evite ninguna importación o exportación no marcada como solo de tipo, asegurándose de que se escriben en el formato del archivo de salida en función de la configuración \"module\".", - "Do_not_truncate_error_messages_6165": "No truncar los mensajes de error.", - "Duplicate_function_implementation_2393": "Implementación de función duplicada.", - "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador '{0}' duplicado. El compilador se reserva el nombre '{1}' en el ámbito de nivel superior de un módulo.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificador '{0}' duplicado. El compilador reserva el nombre '{1}' en el ámbito de nivel superior de un módulo que contiene funciones asincrónicas.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicar identificador \"{0}\". El compilador reserva el nombre \"{1}\" al emitir referencias \"super\" en inicializadores estáticos.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. El compilador usa la declaración '{1}' para admitir funciones asincrónicas.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "El identificador \"{0}\" está duplicado. Los elementos estáticos y de instancia no pueden compartir el mismo nombre privado.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador \"arguments\" duplicado. El compilador usa \"arguments\" para inicializar parámetros rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado \"_newTarget\". El compilador usa la declaración de variable \"_newTarget\" para capturar la referencia de la propiedad Meta \"new.target\".", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador \"_this\" duplicado. El compilador usa la declaración de variable \"_this\" para capturar una referencia \"this\".", - "Duplicate_index_signature_for_type_0_2374": "Signatura de índice duplicada para el tipo \"{0}\".", - "Duplicate_label_0_1114": "Etiqueta \"{0}\" duplicada.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Propiedad \"{0}\" duplicada.", - "Duplicate_regular_expression_flag_1500": "Marca de expresión regular duplicada.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "El especificador de la importación dinámica debe ser de tipo \"string\", pero aquí tiene el tipo \"{0}\".", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Las importaciones dinámicas solo se admiten cuando la marca \"--module\" se establece en \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" o \"nodenext\".", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Las importaciones dinámicas solo pueden aceptar un especificador de módulo y un set de atributos opcional como argumentos", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Las importaciones dinámicas solo admiten un segundo argumento cuando la opción \"--module\" se establece en \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Las importaciones y exportaciones de ECMAScript no se pueden escribir en un archivo CommonJS en \"verbatimModuleSyntax\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Las importaciones y exportaciones de ECMAScript no se pueden escribir en un archivo CommonJS en \"verbatimModuleSyntax\". Ajuste el campo \"type\" en el \"package.json\" más cercano para convertir este archivo en un módulo ECMAScript o ajuste la configuración \"verbatimModuleSyntax\", \"module\" y \"moduleResolution\" en TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "No se permite la sintaxis del módulo ECMAScript en un módulo CommonJS cuando \"module\" está establecido en \"preserve\".", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaración de \"{0}.{1}\" difiere en su valor, donde se esperaba '{2}' pero se proporcionó '{3}'.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada miembro del tipo de unión \"{0}\" tiene signaturas de construcción, pero ninguna de ellas es compatible entre sí.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada miembro del tipo de unión \"{0}\" tiene signaturas, pero ninguna de ellas es compatible entre sí.", - "Editor_Support_6249": "Compatibilidad con el editor", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "El elemento tiene un tipo \"any\" de forma implícita porque la expresión de tipo \"{0}\" no se puede usar para indexar el tipo \"{1}\".", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "El elemento tiene un tipo 'any' implícito porque la expresión de índice no es de tipo 'number'.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "El elemento tiene un tipo \"any\" implícito porque el tipo '{0}' no tiene signatura de índice.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "El elemento tiene un tipo \"any\" implícito porque el tipo \"{0}\" no tiene ninguna signatura de índice. ¿Pretendía llamar a \"{1}\"?", - "Emit_6246": "Emitir", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emita campos de clases compatibles con el estándar de ECMAScript.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir una marca BOM UTF-8 al principio de los archivos de salida.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir un solo archivo con mapas de origen en lugar de tener un archivo aparte.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emita un perfil de CPU v8 de la ejecución del compilador para la depuración.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emita un JavaScript adicional para facilitar la importación de módulos CommonJS. Esto habilita \"allowSyntheticDefaultImports\" para la compatibilidad de tipos.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de clase con Define en lugar de Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emita metadatos de tipo de diseño para las declaraciones decoradas en los archivos de origen.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emita un JavaScript más compatible, pero más detallado y de menor rendimiento para la iteración.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir el origen junto a los mapas de origen en un solo archivo; requiere que se establezca \"--inlineSourceMap\" o \"--sourceMap\".", - "Enable_all_strict_type_checking_options_6180": "Habilitar todas las opciones de comprobación de tipos estricta.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Habilite el color y el formato en la salida de TypeScript para facilitar la lectura de los errores del compilador.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilite restricciones que permitan usar un proyecto TypeScript con referencias del proyecto.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilite el informe de errores para rutas de código que no devuelvan explícitamente una función.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilite el informe de errores para expresiones y declaraciones con un tipo \"any\" implícito.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilite los informes de errores para los casos de fallthrough en instrucciones switch.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilite el informe de errores en los archivos JavaScript de comprobación de tipos.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilite el informe de errores cuando una variable local no se lea.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilite el informe de errores cuando a 'this' se le asigna el tipo 'any'.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite la compatibilidad experimental con decoradores experimentales heredados.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Habilite la importación de archivos con cualquier extensión, siempre que haya un archivo de declaración presente.", - "Enable_importing_json_files_6689": "Habilite la importación de archivos .json.", - "Enable_lib_replacement_6808": "Habilite el reemplazo de bibliotecas.", - "Enable_project_compilation_6302": "Habilitar la compilación de proyecto", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite los métodos estrictos \"bind\", \"call\" y \"apply\" en las funciones.", - "Enable_strict_checking_of_function_types_6186": "Habilite la comprobación estricta de los tipos de función.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Habilite la comprobación estricta de inicialización de propiedades en las clases.", - "Enable_strict_null_checks_6113": "Habilitar comprobaciones estrictas de elementos nulos.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilite la opción \"experimentalDecorators\" en el archivo de configuración.", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilite la marca \"--jsx\" en el archivo de configuración.", - "Enable_tracing_of_the_name_resolution_process_6085": "Habilitar seguimiento del proceso de resolución de nombres.", - "Enable_verbose_logging_6713": "Habilitar el registro detallado.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emitir interoperabilidad entre módulos CommonJS y ES mediante la creación de objetos de espacio de nombres para todas las importaciones. Implica \"allowSyntheticDefaultImports\".", - "Enables_experimental_support_for_ES7_decorators_6065": "Habilita la compatibilidad experimental con los elementos Decorator de ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita la compatibilidad experimental para emitir metadatos de tipo para los elementos Decorator.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Exige el uso de descriptores de acceso indexados para las claves declaradas mediante un tipo indexado.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Asegúrese de que al invalidar miembros en clases derivadas, estos están marcados con un modificador de invalidación.", - "Ensure_that_casing_is_correct_in_imports_6637": "Verifique el uso correcto de mayúsculas y minúsculas en las importaciones.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Asegúrese de que cada archivo pueda transpilarse con seguridad sin depender de otras importaciones.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Asegúrese de que siempre se emite \"use strict\".", - "Entering_conditional_exports_6413": "Entrando en exportaciones condicionales.", - "Entry_point_for_implicit_type_library_0_1420": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\"", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\" con el valor packageId \"{1}\"", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions con el valor packageId \"{1}\"", - "Enum_0_used_before_its_declaration_2450": "Se ha usado la enumeración \"{0}\" antes de declararla.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Las declaraciones de enumeración solo se pueden combinar con otras declaraciones de enumeración o de espacio de nombres.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Todas las declaraciones de enumeración deben ser de tipo const o no const.", - "Enum_member_expected_1132": "Se esperaba un miembro de enumeración.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "El miembro de enumeración que sigue a un miembro numérico que no sea literal debe tener un inicializador cuando \"isolatedModules\" está habilitado.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Los inicializadores de miembros de enumeración deben poder calcularse sin referencias a símbolos externos con --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "El miembro de enumeración debe tener un inicializador.", - "Enum_name_cannot_be_0_2431": "El nombre de la enumeración no puede ser \"{0}\".", - "Environment_Settings_6285": "Configuración del entorno", - "Errors_Files_6041": "Archivos de errores", - "Escape_sequence_0_is_not_allowed_1488": "No se permite la secuencia de escape \"{0}\".", - "Examples_Colon_0_6026": "Ejemplos: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Complejidad excesiva al comparar los tipos '{0}' y '{1}'.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidad excesiva de la pila al comparar los tipos '{0}' y '{1}'.", - "Exiting_conditional_exports_6416": "Saliendo de las exportaciones condicionales.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Se esperaban argumentos de tipo {0}-{1}; proporciónelos con una etiqueta \"@extends\".", - "Expected_0_arguments_but_got_1_2554": "Se esperaban {0} argumentos, pero se obtuvieron {1}.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Se esperaban {0} argumentos, pero se obtuvo un total de {1}. ¿Olvidó incluir \"void\" en el argumento de tipo para \"Promise\"?", - "Expected_0_type_arguments_but_got_1_2558": "Se esperaban {0} argumentos de tipo, pero se obtuvieron {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Se esperaban argumentos de tipo {0}; proporciónelos con una etiqueta \"@extends\".", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Se esperaba 1 argumento, pero se obtuvo 0. \"new Promise()\" necesita una pista de JSDoc para producir un \"resolve\" que pueda llamarse sin argumentos.", - "Expected_a_Unicode_property_name_1523": "Se esperaba un nombre de propiedad Unicode.", - "Expected_a_Unicode_property_name_or_value_1527": "Se esperaba un valor o un nombre de propiedad Unicode.", - "Expected_a_Unicode_property_value_1525": "Se esperaba un valor de propiedad Unicode.", - "Expected_a_capturing_group_name_1514": "Se esperaba un nombre de grupo de captura.", - "Expected_a_class_set_operand_1520": "Se esperaba un operando de conjunto de clases.", - "Expected_at_least_0_arguments_but_got_1_2555": "Se esperaban al menos {0} argumentos, pero se obtuvieron {1}.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Se esperaba la etiqueta de cierre JSX correspondiente de '{0}'.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Se esperaba la etiqueta de cierre correspondiente para el fragmento de JSX.", - "Expected_for_property_initializer_1442": "Se esperaba '=' para el inicializador de propiedades.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Se esperaba que el tipo del campo \"{0}\" en \"package.json\" fuese \"{1}\", pero se obtuvo \"{2}\".", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolución de módulo especificado de forma explícita: '{0}'.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "No se puede realizar la exponenciación en los valores \"bigint\", a menos que la opción \"target\" esté establecida en \"es2016\" o posterior.", - "Export_0_from_module_1_90059": "Exportar '{0}' desde el módulo '{1}'", - "Export_all_referenced_locals_90060": "Exportar todas las variables locales a las que se hace referencia", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "No se puede usar una asignación de exportación cuando se eligen módulos de ECMAScript como destino. Considere la posibilidad de usar \"export default\" u otro formato de módulo en su lugar.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "La asignación de exportación no es compatible cuando la marca \"--module\" es \"system\".", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La declaración de exportación está en conflicto con la declaración exportada de \"{0}\".", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "No se permiten declaraciones de exportación en un espacio de nombres.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "El especificador de exportación \"{0}\" no existe en el ámbito package.json en la ruta de acceso \"{1}\".", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "El alias de tipo exportado '{0}' tiene o usa el nombre privado '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "El alias de tipo exportado \"{0}\" tiene o usa el nombre privado \"{1}\" del módulo {2}.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportada '{0}' tiene o usa el nombre privado '{1}'.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "En aumentos de módulos, no se admiten exportaciones ni asignaciones de exportación.", - "Expression_expected_1109": "Se esperaba una expresión.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "La expresión debe ir entre paréntesis para usarse como un decorador.", - "Expression_or_comma_expected_1137": "Se esperaba una expresión o una coma.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "La expresión genera un tipo de tupla demasiado grande para representarlo.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "La expresión genera un tipo de unión demasiado complejo para representarlo.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "La expresión se resuelve en el valor \"_super\" que el compilador usa para capturar una referencia a la clase base.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "La expresión se resuelve en una declaración de variable \"_newTarget\" que el compilador usa para capturar la referencia de la propiedad Meta \"new.target\".", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "La expresión se resuelve en la declaración de variable \"_this\" que el compilador usa para capturar una referencia \"this\".", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "No se puede inferir el tipo de expresión con --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La cláusula Extends no puede contener una expresión con --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Extiende la cláusula para el tipo deducido '{0}', tiene o usa el nombre privado '{1}'.", - "Extract_base_class_to_variable_90064": "Extraer clase base en variable", - "Extract_binding_expressions_to_variable_90066": "Extraer expresiones de enlace en variable", - "Extract_constant_95006": "Extraer la constante", - "Extract_default_export_to_variable_90065": "Extraer exportación predeterminada a la variable", - "Extract_function_95005": "Extraer la función", - "Extract_to_0_in_1_95004": "Extraer a {0} en {1}", - "Extract_to_0_in_1_scope_95008": "Extraer a {0} en el ámbito {1}", - "Extract_to_0_in_enclosing_scope_95007": "Extraer a {0} en el ámbito de inclusión", - "Extract_to_interface_95090": "Extraer a la interfaz", - "Extract_to_type_alias_95078": "Extraer al alias de tipo", - "Extract_to_typedef_95079": "Extraer a typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraer en variable y reemplazar por “{0} as typeof {0}”", - "Extract_type_95077": "Extraer el tipo", - "FILE_6035": "ARCHIVO", - "FILE_OR_DIRECTORY_6040": "ARCHIVO O DIRECTORIO", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "No se ha podido encontrar peerDependency “{0}”.", - "Failed_to_resolve_under_condition_0_6415": "No se pudo resolver en la condición “{0}”.", - "Fallthrough_case_in_switch_7029": "Caso de Fallthrough en instrucción switch.", - "File_0_does_not_exist_6096": "El archivo '{0}' no existe.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "El archivo \"{0}\" no existe de acuerdo con las búsquedas en caché anteriores.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "El archivo \"{0}\" existe de acuerdo con las búsquedas en caché anteriores.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "El archivo “{0}” existe. Utilícelo como resultado de resolución de nombres.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "El archivo \"{0}\" tiene una extensión no compatible. Las únicas extensiones compatibles son {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" es un archivo JavaScript. ¿Pretendía habilitar la opción \"allowJs\"?", - "File_0_is_not_a_module_2306": "El archivo '{0}' no es un módulo.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "El archivo \"{0}\" no está en la lista de archivos del proyecto \"{1}\". Los proyectos deben enumerar todos los archivos o usar un patrón \"include\".", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "El archivo '{0}' no está en \"rootDir\" '{1}'. Se espera que \"rootDir\" contenga todos los archivos de origen.", - "File_0_not_found_6053": "Archivo '{0}' no encontrado.", - "File_Layout_6284": "Diseño de archivo", - "File_Management_6245": "Administración de archivos", - "File_appears_to_be_binary_1490": "Parece que el archivo es binario.", - "File_change_detected_Starting_incremental_compilation_6032": "Se detectó un cambio de archivo. Iniciando la compilación incremental...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "El archivo es un módulo CommonJS porque “{0}” no tiene el campo “type”", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "El archivo es el módulo CommonJS porque “{0}” tiene el campo “type” cuyo valor no es “module”.", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "El archivo es un módulo CommonJS porque no se encontró “package.json”", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "El archivo es un módulo ECMAScript porque “{0}” tiene el campo “type” con el valor “module”", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "El archivo es un módulo CommonJS; se puede convertir en un módulo ES.", - "File_is_default_library_for_target_specified_here_1426": "El archivo es la biblioteca predeterminada para el destino que se especifica aquí.", - "File_is_entry_point_of_type_library_specified_here_1419": "El archivo es el punto de entrada de la biblioteca de tipos que se especifica aquí.", - "File_is_included_via_import_here_1399": "El archivo se incluye aquí a través de la importación.", - "File_is_included_via_library_reference_here_1406": "El archivo se incluye aquí a través de la referencia de la biblioteca.", - "File_is_included_via_reference_here_1401": "El archivo se incluye aquí a través de la referencia.", - "File_is_included_via_type_library_reference_here_1404": "El archivo se incluye aquí a través de la referencia de la biblioteca de tipos.", - "File_is_library_specified_here_1423": "El archivo es la biblioteca que se especifica aquí.", - "File_is_matched_by_files_list_specified_here_1410": "El archivo coincide con la lista de \"archivos\" que se especifica aquí.", - "File_is_matched_by_include_pattern_specified_here_1408": "El archivo coincide con el patrón de inclusión que se especifica aquí.", - "File_is_output_from_referenced_project_specified_here_1413": "El archivo es la salida del proyecto al que se hace referencia especificado aquí.", - "File_is_output_of_project_reference_source_0_1428": "El archivo es la salida del origen de referencia del proyecto \"{0}\".", - "File_is_source_from_referenced_project_specified_here_1416": "El archivo es el origen del proyecto al que se hace referencia especificado aquí.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "El nombre de archivo \"{0}\" es diferente del nombre de archivo \"{1}\" ya incluido solo en el uso de mayúsculas y minúsculas.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "El nombre de archivo “{0}” tiene una extensión de “{1}”. Buscando “{2}” en su lugar.", - "File_name_0_has_a_1_extension_stripping_it_6132": "El nombre de archivo \"{0}\" tiene una extensión \"{1}\" y se va a quitar.", - "File_redirects_to_file_0_1429": "El archivo redirecciona al archivo \"{0}\".", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La especificación del archivo no puede contener un directorio primario ('..') que aparezca después de un comodín de directorios recursivo ('**'): '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La especificación de archivo no puede finalizar en un comodín de directorio recursivo ('**'): '{0}'.", - "Filters_results_from_the_include_option_6627": "Filtre resultados de la opción \"include\".", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Corregir todos los errores ortográficos detectados", - "Fix_all_expressions_possibly_missing_await_95085": "Corregir todas las expresiones en las que posiblemente falte \"await\"", - "Fix_all_implicit_this_errors_95107": "Corregir todos los errores de \"this\" implícitos", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corregir todos los tipos de valor devuelto incorrectos de las funciones asincrónicas", - "Fix_all_with_type_only_imports_95182": "Corregir todo con importaciones de solo tipo", - "For_nodejs_Colon_6287": "Para nodejs:", - "Found_0_errors_6217": "Se encontró {0} errores.", - "Found_0_errors_Watching_for_file_changes_6194": "Se encontraron {0} errores. Supervisando los cambios del archivo.", - "Found_0_errors_in_1_files_6261": "Se han encontrado {0} errores en {1} archivos.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Se han encontrado {0} errores en el mismo archivo, empezando por: {1}", - "Found_1_error_6216": "Se encontró 1 error.", - "Found_1_error_Watching_for_file_changes_6193": "Se encontró un error. Supervisando los cambios del archivo.", - "Found_1_error_in_0_6259": "Se ha encontrado 1 error en {0}", - "Found_package_json_at_0_6099": "Se encontró 'package.json' en '{0}'.", - "Found_peerDependency_0_with_1_version_6282": "Se encontró el “{0}” peerDependency con versión “{1}”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Las definiciones de clase están en modo strict de forma automática.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Los módulos están en modo strict de forma automática.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "La expresión de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto '{0}'.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Falta la implementación de función o no sigue inmediatamente a la declaración.", - "Function_implementation_name_must_be_0_2389": "El nombre de la implementación de función debe ser '{0}'.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La función tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a ella directa o indirectamente en una de sus expresiones return.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Falta la instrucción \"return\" final en la función y el tipo de valor devuelto no incluye 'undefined'.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La función debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", - "Function_not_implemented_95159": "La función no está implementada.", - "Function_overload_must_be_static_2387": "La sobrecarga de función debe ser estática.", - "Function_overload_must_not_be_static_2388": "La sobrecarga de función no debe ser estática.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de unión.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de intersección.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "El tipo de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"{0}\".", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La función con cuerpos solo se puede combinar con clases que son ambientes.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genere archivos .d.ts desde los archivos TypeScript y JavaScript del proyecto.", - "Generate_get_and_set_accessors_95046": "Generar los descriptores de acceso \"get\" y \"set\"", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generar los descriptores de acceso \"get\" y \"set\" para todas las propiedades de reemplazo", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Genera un perfil de CPU.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Genera un mapa de origen para cada archivo \".d.ts\" correspondiente.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Genera un seguimiento de eventos y una lista de tipos.", - "Generates_corresponding_d_ts_file_6002": "Genera el archivo \".d.ts\" correspondiente.", - "Generates_corresponding_map_file_6043": "Genera el archivo \".map\" correspondiente.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "El generador tiene implícitamente el tipo de retorno \"{0}\". Considere la posibilidad de proporcionar una anotación de tipo de valor devuelto.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Los generadores no se permiten en un contexto de ambiente.", - "Generic_type_0_requires_1_type_argument_s_2314": "El tipo genérico '{0}' requiere los siguientes argumentos de tipo: {1}.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "El tipo genérico \"{0}\" requiere entre {1} y {2} argumentos de tipo.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Las exportaciones de módulos globales solo pueden aparecer en el nivel superior.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Las exportaciones de módulos globales solo pueden aparecer en archivos de declaración.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Las exportaciones de módulos globales solo pueden aparecer en archivos de módulo.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "El tipo global '{0}' debe ser un tipo de clase o de interfaz.", - "Global_type_0_must_have_1_type_parameter_s_2317": "El tipo global '{0}' debe tener los siguientes parámetros de tipo: {1}.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Al volver a compilar en \"--incremental\" y \"--watch\" se asume que los cambios en un archivo solo afectarán a los archivos que dependan de este directamente.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Hacer que las recompilaciones en los proyectos que utilizan el modo 'incremental' y 'inspección' supongan que los cambios dentro de un archivo sólo afectarán a los archivos que dependen directamente de él.", - "Hexadecimal_digit_expected_1125": "Se esperaba un dígito hexadecimal.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Se esperaba un identificador. \"{0}\" es una palabra reservada en el nivel superior de un módulo.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Se esperaba un identificador. \"{0}\" es una palabra reservada en modo strict.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Se esperaba un identificador. '{0}' es una palabra reservada en modo strict. Las definiciones de clase están en modo strict automáticamente.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Se esperaba un identificador. '{0}' es una palabra reservada en modo strict. Los módulos están en modo strict automáticamente.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Se esperaba un identificador. \"{0}\" es una palabra reservada que no se puede usar aquí.", - "Identifier_expected_1003": "Se esperaba un identificador.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. \"__esModule\" está reservado como marcador exportado al transformar módulos ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Se esperaba un literal de cadena o identificador", - "Identifier_string_literal_or_number_literal_expected_1496": "Se esperaba un identificador, un literal de cadena o un literal de número.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si el paquete \"{0}\" expone realmente este módulo, considere la posibilidad de enviar una solicitud de incorporación de cambios para corregir \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\".", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si el paquete '{0}' realmente expone este módulo, intente agregar un nuevo archivo de declaración (.d.ts) que contenga 'declarar módulo '{1}';`", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Omita la configuración tsconfig encontrada y compile con archivos y opciones de línea de comandos.", - "Ignore_this_error_message_90019": "Ignorar este mensaje de error", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignora tsconfig.json y se compilan los archivos especificados con las opciones predeterminadas del compilador.", - "Implement_all_inherited_abstract_classes_95040": "Implementar todas las clases abstractas heredadas", - "Implement_all_unimplemented_interfaces_95032": "Implementar todas las interfaces no implementadas", - "Implement_inherited_abstract_class_90007": "Implementar clase abstracta heredada", - "Implement_interface_0_90006": "Implementar la interfaz \"{0}\"", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La cláusula implements de la clase '{0}' exportada tiene o usa el nombre privado '{1}'.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversión implícita de un elemento \"symbol\" en \"string\" dará un error en tiempo de ejecución. Considere la posibilidad de encapsular esta expresión en \"String (...)\".", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "La importación “{0}” entra en conflicto con el valor global usado en este archivo, por lo que debe declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Importe los conflictos “{0}” con el valor local, por lo que deben declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", - "Import_0_from_1_90013": "Importar “{0}” desde “{1}”", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Los valores de aserción de importación deben ser expresiones literales de cadena.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "No se permiten aserciones de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Las aserciones de importación solo se admiten cuando la opción \"--module\" se establece en \"esnext\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Las aserciones de importación no se pueden usar con importaciones o exportaciones de solo tipo.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Las aserciones de importación se han reemplazado por atributos de importación. Use 'with' en lugar de 'assert'.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "No se puede usar una asignación de importación cuando se eligen módulos de ECMAScript como destino. Considere la posibilidad de usar \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" u otro formato de módulo en su lugar.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Los valores de atributo de importación deben ser expresiones literales de cadena.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "No se permiten atributos de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Los atributos de importación solo se admiten cuando la opción \"--module\" se establece en \"esnext\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Los atributos de importación no se pueden usar con importaciones o exportaciones de solo tipo.", - "Import_declaration_0_is_using_private_name_1_4000": "La declaración de importación '{0}' usa el nombre privado '{1}'.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La declaración de importación está en conflicto con la declaración local de \"{0}\".", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Las declaraciones de importación de un espacio de nombres no pueden hacer referencia a un módulo.", - "Import_emit_helpers_from_tslib_6139": "Importe asistentes de emisión de \"tslib\".", - "Import_may_be_converted_to_a_default_import_80003": "La importación puede convertirse a una importación predeterminada.", - "Import_name_cannot_be_0_2438": "El nombre de importación no puede ser \"{0}\".", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La declaración de importación o exportación de una declaración de módulo de ambiente no puede hacer referencia al módulo a través de su nombre relativo.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "El especificador de importación \"{0}\" no existe en el ámbito package.json en la ruta de acceso \"{1}\".", - "Imported_via_0_from_file_1_1393": "Se importó mediante {0} desde el archivo \"{1}\".", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Se importó mediante {0} desde el archivo \"{1}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Se importó mediante {0} desde el archivo \"{1}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\".", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "La importación de un archivo JSON en un módulo ECMAScript requiere un atributo de importación \"type: \"json\"\" cuando \"module\" se establece en \"{0}\".", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "No se permiten importaciones en aumentos de módulos. Considere la posibilidad de moverlas al módulo externo envolvente.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "En las declaraciones de enumeración de ambiente, el inicializador de miembro debe ser una expresión constante.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "En una enumeración con varias declaraciones, solo una declaración puede omitir un inicializador para el primer elemento de la enumeración.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluya una lista de archivos. Esto no admite patrones globales, contrario a \"include\".", - "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados con la extensión \".json\"", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluya el código fuente en los mapas de origen dentro del JavaScript emitido.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir archivos de mapas de origen dentro del JavaScript emitido.", - "Includes_imports_of_types_referenced_by_0_90054": "Incluye importaciones de tipos a los que hace referencia \"{0}\"", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Al incluir --watch, -w empezará a ver el proyecto actual por los cambios de archivo. Una vez establecido, puede configurar el modo de inspección con:", - "Incomplete_quantifier_Digit_expected_1505": "Cuantificador incompleto. Se esperaba un dígito.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "Falta la signatura de índice para el tipo \"{0}\" en el tipo \"{1}\".", - "Index_signature_in_type_0_only_permits_reading_2542": "La signatura de índice del tipo '{0}' solo permite lectura.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Las declaraciones individuales de la declaración '{0}' combinada deben ser todas exportadas o todas locales.", - "Infer_all_types_from_usage_95023": "Deducir todos los tipos del uso", - "Infer_function_return_type_95148": "Deducir el tipo de valor devuelto de función", - "Infer_parameter_types_from_usage_95012": "Deducir los tipos de parámetro del uso", - "Infer_this_type_of_0_from_usage_95080": "Inferir el tipo \"this\" de \"{0}\" a partir del uso", - "Infer_type_of_0_from_usage_95011": "Deducir el tipo de \"{0}\" del uso", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "La inferencia de expresiones de clase no se admite con --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Inicializar la propiedad \"{0}\" en el constructor", - "Initialize_static_property_0_90021": "Inicializar la propiedad estática \"{0}\"", - "Initializer_for_property_0_2811": "Inicializador para la propiedad \"{0}\"", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "El inicializador de la variable miembro de instancia '{0}' no puede hacer referencia al identificador '{1}' declarado en el constructor.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "No se permiten inicializadores en los contextos de ambiente.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa un proyecto de TypeScript y crea un archivo tsconfig.json.", - "Inline_variable_95184": "Variable insertada", - "Insert_command_line_options_and_files_from_a_file_6030": "Inserte opciones de la línea de comandos y archivos desde un archivo.", - "Install_0_95014": "Instalar \"{0}\"", - "Install_all_missing_types_packages_95033": "Instalar todos los paquetes de tipos que faltan", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "La interfaz '{0}' no puede extender los tipos '{1}' y '{2}' simultáneamente.", - "Interface_0_incorrectly_extends_interface_1_2430": "La interfaz '{0}' extiende la interfaz '{1}' de forma incorrecta.", - "Interface_declaration_cannot_have_implements_clause_1176": "La declaración de interfaz no puede tener una cláusula \"implements\".", - "Interface_must_be_given_a_name_1438": "Se debe asignar un nombre a la interfaz.", - "Interface_name_cannot_be_0_2427": "El nombre de la interfaz no puede ser \"{0}\".", - "Interop_Constraints_6252": "Restricciones de interoperabilidad", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete los tipos de propiedad opcionales como escritos en lugar de agregar \"undefined\".", - "Invalid_character_1127": "Carácter no válido.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "El especificador de importación no válido \"{0}\" no tiene resoluciones posibles.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nombre de módulo no válido en el aumento. El módulo '{0}' se resuelve como un módulo sin tipo en '{1}', que no se puede aumentar.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nombre de módulo no válido en un aumento, no se encuentra el módulo '{0}'.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadena opcional no válida de la nueva expresión. ¿Quería llamar a \"{0}()\"?", - "Invalid_reference_directive_syntax_1084": "Sintaxis de la directiva \"reference\" no válida.", - "Invalid_syntax_in_decorator_1498": "Sintaxis no válida en Decorator.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso no válido de '{0}'. No se puede usar dentro de un bloque estático de clase.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso de '{0}' no válido. Los módulos están en modo strict automáticamente.", - "Invalid_use_of_0_in_strict_mode_1100": "Uso no válido de '{0}' en modo strict.", - "Invalid_value_for_ignoreDeprecations_5103": "Valor no válido para “--ignoreDeprecations”.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre calificado o un identificador válido.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre cualificado o un identificador válidos.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor no válido para '--reactNamespace'. '{0}' no es un identificador válido.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Es probable que falte una coma para separar estas dos expresiones de plantilla. Forman una expresión de plantilla con etiquetas que no se puede invocar.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "El tipo de elemento \"{0}\" no es un elemento JSX válido.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "El tipo de instancia \"{0}\" no es un elemento JSX válido.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "El tipo de valor devuelto \"{0}\" no es un elemento JSX válido.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "El tipo “{0}” no es un tipo de elemento JSX válido.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La etiqueta \"@{0} {1}\" de JSDoc no coincide con la cláusula \"extends {2}\".", - "JSDoc_0_is_not_attached_to_a_class_8022": "La etiqueta \"@{0}\" de JSDoc no está asociada a una clase.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "\"...\" de JSDoc solo puede aparecer en el último parámetro de una signatura.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La etiqueta \"@param\" de JSDoc tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La etiqueta de JSDoc \"@param\" tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre. Coincidiría con \"arguments\" si tuviera un tipo de matriz.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "El typedef de JSDoc se puede convertir al tipo TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La etiqueta \"@typedef\" de JSDoc debe tener una anotación de tipo o ir seguida de las etiquetas \"@property\" o \"@member\".", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Las definiciones de tipos JSDoc se pueden convertir en tipos TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Los tipos JSDoc solo se pueden usar en los comentarios de la documentación.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Los tipos de JSDoc pueden moverse a tipos de TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "A los atributos JSX se les debe asignar únicamente un elemento \"expression\" que no esté vacío.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "El elemento JSX '{0}' no tiene la etiqueta de cierre correspondiente.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La clase de elemento JSX no admite atributos porque no tiene una propiedad \"{0}\".", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "El elemento JSX tiene el tipo \"any\" implícitamente porque no existe ninguna interfaz \"JSX.{0}\".", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "El elemento JSX tiene el tipo \"any\" implícitamente porque no existe el tipo global \"JSX.Element\".", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "El tipo de elemento JSX '{0}' no tiene ninguna signatura de construcción ni de llamada.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Los elementos JSX no pueden tener varios atributos con el mismo nombre.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Las expresiones JSX no pueden usar el operador de coma. ¿Pretendía escribir una matriz?", - "JSX_expressions_must_have_one_parent_element_2657": "Las expresiones JSX deben tener un elemento primario.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "El fragmento de JSX no tiene la etiqueta de cierre correspondiente.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Las expresiones de acceso a la propiedad JSX no pueden incluir nombres de espacios de nombres JSX", - "JSX_spread_child_must_be_an_array_type_2609": "El elemento secundario de propagación JSX debe ser de tipo matriz.", - "JavaScript_Support_6247": "Compatibilidad con JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "Un destino de salto no puede atravesar el límite de función.", - "KIND_6034": "TIPO", - "Keywords_cannot_contain_escape_characters_1260": "Las palabras clave no pueden contener caracteres de escape.", - "LOCATION_6037": "UBICACIÓN", - "Language_and_Environment_6254": "Lenguaje y ambiente", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "La parte izquierda del operador de coma no se usa y no tiene efectos secundarios.", - "Library_0_specified_in_compilerOptions_1422": "La biblioteca \"{0}\" se especifica en compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Biblioteca a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"", - "Line_break_not_permitted_here_1142": "No se permite el salto de línea aquí.", - "Line_terminator_not_permitted_before_arrow_1200": "No se permite usar un terminador de línea antes de una flecha.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista de sufijos de nombre de archivo para buscar al resolver un módulo.", - "List_of_folders_to_include_type_definitions_from_6161": "Lista de carpetas de donde se deben incluir las definiciones de tipos.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista de carpetas raíz cuyo contenido combinado representa la estructura del proyecto en tiempo de ejecución.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Cargando \"{0}\" del directorio raíz \"{1}\", ubicación candidata: \"{2}\"", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Se cargará el módulo “{0}” de la carpeta “node_modules”, tipos de archivo de destino “{1}”.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Se cargará el módulo como archivo/carpeta, ubicación del módulo candidato “{0}”, tipos de archivo de destino “{1}”.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Rutas de acceso de registro usadas durante el proceso \"moduleResolution\".", - "Longest_matching_prefix_for_0_is_1_6108": "El prefijo coincidente más largo para \"{0}\" es \"{1}\".", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Buscando en la carpeta \"node_modules\", ubicación inicial: \"{0}\".", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Convertir todas las llamadas a \"super()\" en la primera instrucción de su constructor", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Haga que keyof solo devuelva cadenas en lugar de cadenas, números o símbolos. Opción heredada.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Hacer que la llamada a \"super()\" sea la primera instrucción del constructor", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "El tipo de objeto asignado tiene implícitamente un tipo de plantilla \"any\".", - "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", - "Matched_0_condition_1_6403": "Coincidente con '{0}' condición '{1}'.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "La coincidencia de forma predeterminada incluye el patrón '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "Coincidencia con el patrón de inclusión \"{0}\" en \"{1}\"", - "Member_0_implicitly_has_an_1_type_7008": "El miembro '{0}' tiene un tipo '{1}' implícitamente.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "El miembro \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", - "Merge_conflict_marker_encountered_1185": "Se encontró un marcador de conflicto de combinación.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La declaración combinada '{0}' no puede incluir una declaración de exportación predeterminada. Considere la posibilidad de agregar una declaración \"export default {0}\" independiente en su lugar.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La propiedad Meta \"{0}\" solo se permite en el cuerpo de una declaración de función, una expresión de función o un constructor.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "El método '{0}' no puede tener ninguna implementación porque está marcado como abstracto.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre privado \"{1}\".", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "El método debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", - "Method_not_implemented_95158": "El método no está implementado.", - "Modifiers_cannot_appear_here_1184": "Los modificadores no pueden aparecer aquí.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "El módulo \"{0}\" solo puede importarse de forma predeterminada con la marca \"{1}\".", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "El módulo \"{0}\" no se puede importar con esta construcción. El especificador solo se resuelve en un módulo ES, que no se puede importar con \"require\". En su lugar, use una importación de ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "El módulo \"{0}\" declara \"{1}\" localmente, pero se exporta como \"{2}\".", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "El módulo \"{0}\" declara \"{1}\" localmente, pero no se exporta.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "El módulo \"{0}\" no hace referencia a un tipo, pero aquí se usa como tipo. ¿Quiso decir \"typeof import('{0}')\"?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "El módulo \"{0}\" no hace referencia a un valor, pero aquí se usa como valor.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "El módulo {0} ya ha exportado un miembro denominado '{1}'. Considere la posibilidad de volver a exportarlo de forma explícita para resolver la ambigüedad.", - "Module_0_has_no_default_export_1192": "El módulo '{0}' no tiene ninguna exportación predeterminada.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "El módulo \"{0}\" no tiene ninguna exportación predeterminada. ¿Pretendía usar \"import { {1} } from {0}\" en su lugar?", - "Module_0_has_no_exported_member_1_2305": "El módulo '{0}' no tiene ningún miembro '{1}' exportado.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "El módulo \"{0}\" no tiene ningún miembro \"{1}\" exportado. ¿Pretendía usar \"import {1} from {0}\" en su lugar?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "El módulo \"{0}\" está oculto por una declaración local con el mismo nombre.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "El módulo '{0}' usa \"export =\" y no se puede usar con \"export *\".", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "El módulo '{0}' se resolvió como un módulo de ambiente declarado localmente en el archivo '{1}'.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "El módulo “{0}” se ha resuelto en “{1}”, pero “--allowArbitraryExtensions” no está establecido.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "El módulo '{0}' se resolvió en '{1}', pero \"--jsx\" no está establecido.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "El módulo \"{0}\" se resolvió en \"{1}\", pero no se usa \"--resolveJsonModule\".", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Los nombres de declaración de módulo solo pueden usar cadenas con las comillas \" o '.", - "Module_name_0_matched_pattern_1_6092": "Nombre del módulo: '{0}', patrón coincidente: '{1}'.", - "Module_name_0_was_not_resolved_6090": "======== No se resolvió el nombre de módulo '{0}'. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== El nombre del módulo '{0}' se resolvió correctamente como '{1}'. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== El nombre del módulo '{0}' se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\". ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "No se ha especificado el tipo de resolución del módulo, se usará '{0}'.", - "Module_resolution_using_rootDirs_has_failed_6111": "No se pudo resolver el módulo con \"rootDirs\".", - "Modules_6244": "Módulos", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover modificadores de elemento de tupla etiquetados a etiquetas", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mueva la expresión de exportación predeterminada a una variable y agréguele una anotación de tipo.", - "Move_to_a_new_file_95049": "Mover a un nuevo archivo", - "Move_to_file_95178": "Mover a archivo", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "No se permiten varios separadores numéricos consecutivos.", - "Multiple_constructor_implementations_are_not_allowed_2392": "No se permiten varias implementaciones del constructor.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NUEVA LÍNEA", - "Name_is_not_valid_95136": "El nombre no es válido", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Los grupos de captura con nombre solo están disponibles cuando el destino es “ES2018” o posterior.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Los grupos de captura con nombre que tengan el mismo nombre deben ser mutuamente excluyentes entre sí.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "No se permiten importaciones con nombre en una importación diferida.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "No se permiten las importaciones con nombre de un archivo JSON en un módulo ECMAScript cuando \"module\" está establecido en \"{0}\".", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propiedad '{0}' con nombre de los tipos '{1}' y '{2}' no es idéntica en ambos.", - "Namespace_0_has_no_exported_member_1_2694": "El espacio de nombres '{0}' no tiene ningún miembro '{1}' exportado.", - "Namespace_must_be_given_a_name_1437": "Se debe asignar un nombre al espacio de nombres.", - "Namespace_name_cannot_be_0_2819": "El nombre de espacio no puede ser \"{0}\".", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "No se permiten espacios de nombres en archivos de script globales cuando “{0}” está habilitado. Si este archivo no está pensado para ser un script global, establezca “moduleDetection” en “force” o agregue una instrucción “export {}” vacía.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "No se pueden aplicar modificadores ni decoradores a los parámetros “this”.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "No hay ningún constructor base con el número especificado de argumentos de tipo.", - "No_constituent_of_type_0_is_callable_2755": "No se puede llamar a ningún constituyente del tipo \"{0}\".", - "No_constituent_of_type_0_is_constructable_2759": "No se puede construir ningún constituyente del tipo \"{0}\".", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "No se encontró ninguna signatura de índice con un parámetro de tipo \"{0}\" en el tipo \"{1}\".", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "No se encontraron entradas en el archivo de configuración '{0}'. Las rutas 'include' especificadas fueron '{1}' y las rutas 'exclude' fueron '{2}'.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Ya no se admite. En versiones anteriores, establezca manualmente la codificación de texto para leer archivos.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ninguna sobrecarga espera argumentos {0}, pero existen sobrecargas que esperan argumentos {1} o {2}.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ninguna sobrecarga espera argumentos de tipo {0}, pero existen sobrecargas que esperan argumentos de tipo {1} o {2}.", - "No_overload_matches_this_call_2769": "Ninguna sobrecarga coincide con esta llamada.", - "No_type_could_be_extracted_from_this_type_node_95134": "No se pudo extraer ningún tipo de este nodo de tipo", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "No existe ningún valor en el ámbito para la propiedad abreviada \"{0}\". Declare uno o proporcione un inicializador.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La clase '{0}' no abstracta no implementa el miembro abstracto heredado '{1}' de la clase '{2}'.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2} y {3} más.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Una expresión de clase no abstracta no implementa el miembro abstracto heredado '{0}' de la clase '{1}'.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1} y {2} más.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Las aserciones no nulas solo se pueden usar en los archivos TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Se ha declarado un parámetro no simple aquí.", - "Not_all_code_paths_return_a_value_7030": "No todas las rutas de acceso de código devuelven un valor.", - "Not_all_constituents_of_type_0_are_callable_2756": "No se puede llamar a todos los constituyentes del tipo \"{0}\".", - "Not_all_constituents_of_type_0_are_constructable_2760": "No se pueden construir todos los constituyentes del tipo \"{0}\".", - "Numbers_out_of_order_in_quantifier_1506": "Números desordenado en el cuantificador.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Los literales numéricos con valores absolutos iguales a 2^53 o superiores son demasiado grandes para representarlos de forma precisa como enteros.", - "Numeric_separators_are_not_allowed_here_6188": "Aquí no se permiten separadores numéricos.", - "Object_is_of_type_unknown_2571": "El objeto es de tipo \"desconocido\".", - "Object_is_possibly_null_2531": "El objeto es posiblemente \"null\".", - "Object_is_possibly_null_or_undefined_2533": "El objeto es posiblemente \"null\" o \"undefined\".", - "Object_is_possibly_undefined_2532": "El objeto es posiblemente \"undefined\".", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "El literal de objeto solo puede especificar propiedades conocidas y '{0}' no existe en el tipo '{1}'.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "El literal de objeto solo puede especificar propiedades conocidas, pero \"{0}\" no existe en el tipo \"{1}\". ¿Quería escribir \"{2}\"?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propiedad '{0}' del literal de objeto tiene un tipo '{1}' implícitamente.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Los objetos que contienen propiedades abreviadas no se pueden inferir con --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Los objetos que contienen asignaciones de propagación no se pueden inferir con --isolatedDeclarations.", - "Octal_digit_expected_1178": "Se esperaba un dígito octal.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres. Si la intención era una secuencia de escape, use la sintaxis “{0}” en su lugar.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "No se permiten secuencias de escape octal. Use la sintaxis “{0}”.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "No se permiten literales octal. Use la sintaxis “{0}”.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valor de “{0}.{1}” es la cadena “{2}” y se supone que el otro es un valor numérico desconocido.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Solo se permite una declaración de variable en una instrucción \"for...in\".", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Solo se permite una declaración de variable en una instrucción \"for...of\".", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Solo se puede llamar a una función void con la palabra clave \"new\".", - "Only_ambient_modules_can_use_quoted_names_1035": "Solo los módulos de ambiente pueden usar nombres entrecomillados.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Solo los módulos \"amd\" y \"system\" se admiten con --{0}.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Solo se pueden inferir matrices const con --isolatedDeclarations.", - "Only_emit_d_ts_declaration_files_6014": "Solo deben emitirse archivos de declaración \".d.ts\".", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Genere solo archivos d.ts y no archivos JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Solo es posible tener acceso a los métodos públicos y protegidos de la clase base mediante la palabra clave \"super\".", - "Operator_0_cannot_be_applied_to_type_1_2736": "El operador \"{0}\" no se puede aplicar al tipo \"{1}\".", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "El operador '{0}' no se puede aplicar a los tipos '{1}' y '{2}'.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Los operadores no deben mezclarse dentro de una clase de caracteres. Envuelve en una clase anidada en su lugar.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Opte por excluir un proyecto de la comprobación de referencias de varios proyectos al editar.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Se ha quitado la opción “{0}={1}”. Elimínela de la configuración.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "La opción “{0}={1}” está en desuso y dejará de funcionar en TypeScript {2}. Especifique compilerOption “'ignoreDeprecations': '{3}'” para silenciar este error.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"false\" o \"null\" en la línea de comandos.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"null\" en la línea de comandos.", - "Option_0_can_only_be_specified_on_command_line_6266": "La opción “{0}” solo se puede especificar en la línea de comandos.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "La opción '{0}' solo se puede usar cuando se proporciona '--inlineSourceMap' o '--sourceMap'.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "La opción “{0}” solo se puede usar cuando “moduleResolution” está establecido en “node16”, “nodenext” o “bundler”.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "La opción \"{0}\" solo se puede usar cuando \"module\" está establecido en \"preserve\", en \"commonjs\" o en \"es2015\" o posterior.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "No se puede especificar la opción \"{0}\" cuando la opción \"jsx\" es \"{1}\".", - "Option_0_cannot_be_specified_with_option_1_5053": "La opción '{0}' no se puede especificar con la opción '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "La opción '{0}' no se puede especificar sin la opción '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "La opción \"{0}\" no se puede especificar sin la opción \"{1}\" o la opción \"{2}\".", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Se ha quitado la opción “{0}”. Elimínela de la configuración.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "La opción “{0}” está en desuso y dejará de funcionar en TypeScript {1}. Especifique compilerOption “'ignoreDeprecations': '{2}'” para silenciar este error.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "La opción “{0}” es redundante y no se puede especificar con la opción “{1}”.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "La opción \"allowImportingTsExtensions\" solo se puede usar cuando se establece una de las opciones \"noEmit\", \"emitDeclarationOnly\" o \"rewriteRelativeImportExtensions\".", - "Option_build_must_be_the_first_command_line_argument_6369": "La opción \"--build\" debe ser el primer argumento de la línea de comandos.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "La opción \"isolatedModules\" solo se puede usar cuando se proporciona la opción \"--module\" o si la opción \"target\" es \"ES2015\" o una versión posterior.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "La opción “moduleResolution” debe establecerse en “{0}” (o no se especificó) cuando la opción “module” está establecida en “{1}”.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "La opción “module” debe establecerse en “{0}” cuando la opción “moduleResolution” esté establecida en “{1}”.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "La opción “preserveConstEnums” no se puede deshabilitar cuando “{0}” está habilitado.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "La opción \"project\" no se puede combinar con archivos de origen en una línea de comandos.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "No se puede especificar la opción “--resolveJsonModule” cuando “moduleResolution” está establecido en “classic”.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "No se puede especificar la opción “--resolveJsonModule” cuando “module” esté establecido en “none”, “system” o “umd”.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "La opción “verbatimModuleSyntax” no se puede usar cuando “module” está establecido en “UMD”, “AMD” o “System”.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "\"{0}\" y \"{1}\" no se pueden combinar.", - "Options_Colon_6027": "Opciones:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Otras salidas", - "Output_Formatting_6256": "Formato de salida", - "Output_compiler_performance_information_after_building_6615": "Información de rendimiento resultante del compilador después de la compilación.", - "Output_directory_for_generated_declaration_files_6166": "Directorio de salida para los archivos de declaración generados.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "El archivo de salida \"{0}\" no se compiló desde el archivo de origen \"{1}\".", - "Output_from_referenced_project_0_included_because_1_specified_1411": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Produzca información más detallada del rendimiento resultante del compilador después de la compilación.", - "Overload_0_of_1_2_gave_the_following_error_2772": "La sobrecarga {0} de {1}, \"{2}\", dio el error siguiente.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Las signaturas de sobrecarga deben ser todas abstractas o no abstractas.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Las signaturas de sobrecarga deben ser todas de ambiente o de no ambiente.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Las signaturas de sobrecarga deben ser todas exportadas o no exportadas.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Las signaturas de sobrecarga deben ser todas opcionales u obligatorias.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Las signaturas de sobrecarga deben ser todas públicas, privadas o protegidas.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "El parámetro \"{0}\" no puede hacer referencia al identificador \"{1}\" declarado después de este.", - "Parameter_0_cannot_reference_itself_2372": "El parámetro \"{0}\" no puede hacer referencia a sí mismo.", - "Parameter_0_implicitly_has_an_1_type_7006": "El parámetro '{0}' tiene un tipo '{1}' implícitamente.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "El parámetro \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "El parámetro '{0}' no está en la misma posición que el parámetro '{1}'.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre \"{1}\" del módulo \"{2}\" externo, pero no se puede nombrar.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre privado \"{1}\".", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "El parámetro '{0}' de la signatura de llamada de una interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "El parámetro '{0}' de la signatura de llamada de una interfaz exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "El parámetro '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "El parámetro '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "El parámetro '{0}' de la función exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "El parámetro '{0}' de la función exportada tiene o usa el nombre '{1}' del módulo {2} privado.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "El parámetro '{0}' de la función exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "El parámetro \"{0}\" de la signatura de índice de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "El parámetro \"{0}\" de la signatura de índice de la interfaz exportada tiene o usa el nombre privado \"{1}\".", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "El parámetro '{0}' del método de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "El parámetro '{0}' del método de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre privado '{1}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre privado '{1}'.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "El parámetro no puede tener un signo de interrogación y un inicializador.", - "Parameter_declaration_expected_1138": "Se espera una declaración de parámetros.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "El parámetro tiene un nombre, pero no un tipo. ¿Pretendía usar \"{0}: {1}\"?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Los modificadores de parámetro solo se pueden usar en los archivos TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "El parámetro debe tener una anotación de tipo explícita con --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analiza en modo strict y emite \"use strict\" para cada archivo de código fuente.", - "Part_of_files_list_in_tsconfig_json_1409": "Parte de la lista de \"archivos\" de tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "El patrón \"{0}\" puede tener un carácter '*' como máximo.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Los intervalos de rendimiento de \"--diagnostics\" o \"--extendedDiagnostics\" no están disponibles en esta sesión. No se encontró ninguna implementación nativa de la API de rendimiento web.", - "Platform_specific_6912": "Específico de plataforma", - "Prefix_0_with_an_underscore_90025": "Prefijo \"{0}\" con guion bajo", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Agregar el prefijo \"declare\" a todas las declaraciones de propiedad incorrectas", - "Prefix_all_unused_declarations_with_where_possible_95025": "Agregar \"_\" como prefijo a todas las declaraciones sin usar, cuando sea posible", - "Prefix_with_declare_95094": "Agregar el prefijo \"declare\"", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conserva los valores importados no usados en la salida de JavaScript que, de lo contrario, se quitarían.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Imprima todos los archivos leídos durante la compilación.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Imprima los archivos leídos durante la compilación, incluyendo la razón por la que se incluyó.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima los nombres de los archivos y el motivo por el que forman parte de la compilación.", - "Print_names_of_files_part_of_the_compilation_6155": "Imprimir los nombres de los archivos que forman parte de la compilación.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima los nombres de los archivos que forman parte de la compilación y, a continuación, detenga el procesamiento.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimir los nombres de los archivos generados que forman parte de la compilación.", - "Print_the_compiler_s_version_6019": "Imprima la versión del compilador.", - "Print_the_final_configuration_instead_of_building_1350": "Imprima la configuración final en lugar de compilar.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprima los nombres de los archivos emitidos después de una compilación.", - "Print_this_message_6017": "Imprima este mensaje.", - "Private_accessor_was_defined_without_a_getter_2806": "El descriptor de acceso privado se ha definido sin un captador.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "El campo privado “{0}” debe declararse en una clase envolvente.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "No se permiten identificadores privados en las declaraciones de variables.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "No se permiten identificadores privados fuera de los cuerpos de clase.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Los identificadores privados solo están permitidos en cuerpos de clase y solo se pueden utilizan como parte de una declaración de un miembro de clase, acceso de propiedad o en la parte izquierda de una expresión \"in\".", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Los identificadores privados solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Los identificadores privados no se pueden usar como parámetros.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "No se puede acceder al miembro \"{0}\" privado o protegido en un parámetro de tipo.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "El proyecto \"{0}\" no puede generarse porque su dependencia \"{1}\" tiene errores", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "El proyecto \"{0}\" no puede compilarse porque su dependencia \"{1}\" no se ha compilado.", - "Project_0_is_being_forcibly_rebuilt_6388": "El proyecto \"{0}\" se está recompilando de manera forzada.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que el archivo “{2}” era el archivo raíz de la compilación, pero ya no.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "El “{0}” del proyecto no está actualizado porque el archivo buildinfo “{1}” indica que el programa debe informar de errores.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "El proyecto \"{0}\" no está actualizado porque el archivo buildinfo \"{1}\" indica que algunos de los cambios no se emitieron", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que hay cambios en compilerOptions", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "El proyecto \"{0}\" está obsoleto porque la salida \"{1}\" es anterior a la entrada \"{2}\"", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "El proyecto \"{0}\" está obsoleto porque el archivo de salida \"{1}\" no existe", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "El proyecto \"{0}\" está obsoleto porque su salida se generó con la versión \"{1}\", que es distinta a la versión actual \"{2}\".", - "Project_0_is_up_to_date_6361": "El proyecto \"{0}\" está actualizado", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "El proyecto \"{0}\" está actualizado porque la entrada más reciente \"{1}\" es anterior a la salida \"{2}\"", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "El proyecto \"{0}\" está actualizado, pero debe actualizar las marcas de tiempo de los archivos de salida anteriores a los archivos de entrada", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "El proyecto \"{0}\" está actualizado con archivos .d.ts de sus dependencias", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Las referencias del proyecto no pueden formar un gráfico circular. Ciclo detectado: {0}", - "Projects_6255": "Proyectos", - "Projects_in_this_build_Colon_0_6355": "Proyectos de esta compilación: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Las propiedades con el modificador 'accessor' solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propiedad '{0}' no puede tener un mediador porque se marca como abstracto.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propiedad \"{0}\" procede de una signatura de índice, por lo que debe accederse a ella con [\"{0}\"].", - "Property_0_does_not_exist_on_type_1_2339": "La propiedad '{0}' no existe en el tipo '{1}'.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Pretendía acceder al miembro estático \"{2}\"?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "No existe la propiedad \"{0}\" en el tipo \"{1}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{2}\" o posterior.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propiedad \"{0}\" no existe en el tipo \"{1}\". Intente cambiar la opción del compilador \"lib\" para incluir \"dom\".", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propiedad '{0}' no tiene inicializador y no está asignada de forma definitiva en el bloque estático de clase.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propiedad \"{0}\" no tiene inicializador y no está asignada de forma definitiva en el constructor.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso get le falta una anotación de tipo de valor devuelto.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso set le falta una anotación de tipo de parámetro.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La propiedad \"{0}\" tiene el tipo \"any\" de forma implícita, pero se puede inferir un tipo más adecuado para su descriptor de acceso get a partir del uso.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La propiedad \"{0}\" tiene el tipo \"any\" de forma implícita, pero se puede inferir un tipo más adecuado para su descriptor de acceso set a partir del uso.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "La propiedad \"{0}\" del tipo \"{1}\" no se puede asignar a la misma propiedad del tipo base \"{2}\".", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La propiedad \"{0}\" del tipo \"{1}\" no se puede asignar al tipo \"{2}\".", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La propiedad \"{0}\" del tipo \"{1}\" hace referencia a un miembro distinto al que no se puede acceder desde el tipo \"{2}\".", - "Property_0_is_declared_but_its_value_is_never_read_6138": "La propiedad \"{0}\" se declara, pero su valor no se lee nunca.", - "Property_0_is_incompatible_with_index_signature_2530": "La propiedad '{0}' es incompatible con la signatura de índice.", - "Property_0_is_missing_in_type_1_2324": "Falta la propiedad '{0}' en el tipo '{1}'.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La propiedad \"{0}\" falta en el tipo \"{1}\", pero es obligatoria en el tipo \"{2}\".", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "No se puede acceder a la propiedad \"{0}\" fuera de la clase \"{1}\" porque tiene un identificador privado.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propiedad '{0}' es opcional en el tipo '{1}', pero obligatoria en el tipo '{2}'.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propiedad '{0}' es privada y solo se puede acceder a ella en la clase '{1}'.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propiedad '{0}' es privada en el tipo '{1}', pero no en el tipo '{2}'.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propiedad \"{0}\" está protegida y solo puede accederse a ella a través de una instancia de la clase \"{1}\". Esta es una instancia de la clase \"{2}\".", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propiedad '{0}' está protegida y solo se puede acceder a ella en la clase '{1}' y las subclases de esta.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propiedad '{0}' está protegida, pero el tipo '{1}' no es una clase derivada de '{2}'.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propiedad '{0}' está protegida en el tipo '{1}', pero es pública en el tipo '{2}'.", - "Property_0_is_used_before_being_assigned_2565": "La propiedad \"{0}\" se usa antes de asignarla.", - "Property_0_is_used_before_its_initialization_2729": "La propiedad \"{0}\" se usa antes de su inicialización.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La propiedad '{0}' del atributo spread de JSX no se puede asignar a la propiedad de destino.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propiedad “{0}” del tipo de clase anónima exportada no puede ser privada ni estar protegida.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propiedad \"{0}\" de tipo \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", - "Property_0_was_also_declared_here_2733": "La propiedad \"{0}\" también se ha declarado aquí.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propiedad \"{0}\" sobrescribirá la propiedad base en \"{1}\" Si esto es intencionado, agregue un inicializador. De lo contrario, agregue un modificador \"declare\" o quite la declaración redundante.", - "Property_assignment_expected_1136": "Se esperaba una asignación de propiedad.", - "Property_destructuring_pattern_expected_1180": "Se esperaba un patrón de desestructuración de propiedad.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propiedad debe tener una anotación de tipo explícita con --isolatedDeclarations.", - "Property_or_signature_expected_1131": "Se esperaba una propiedad o una signatura.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "El valor de la propiedad puede ser solo un literal de cadena, literal numérico, 'true', 'false', 'null', literal de objeto o literal de matriz.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Proporcionar compatibilidad total con objetos iterables en “for-of”, propagaciones y desestructuraciones cuando el destino es “ES5”.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo externo {2}, pero no puede tener nombre.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "El método público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo externo {2}, pero no puede tener nombre.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "No se permite el nombre calificado \"{0}\" sin un elemento \"@param {object} {1}\" inicial.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un error cuando no se lee un parámetro de función.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Generar un error en las expresiones y las declaraciones con un tipo \"any\" implícito.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Generar un error en expresiones 'this' con un tipo 'any' implícito.", - "Range_out_of_order_in_character_class_1517": "Rango desordenado en la clase de caracteres.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Volver a exportar un tipo cuando “{0}” está habilitado requiere el uso de “export type”.", - "React_components_cannot_include_JSX_namespace_names_2639": "Los componentes de React no pueden incluir nombres de espacio de nombres JSX", - "Recommended_Options_6294": "Opciones recomendadas", - "Redirect_output_structure_to_the_directory_6006": "Redirija la estructura de salida al directorio.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzca el número de proyectos cargados automáticamente por TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "El proyecto \"{0}\" al que se hace referencia no puede deshabilitar la emisión.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "El proyecto \"{0}\" al que se hace referencia debe tener el valor \"composite\": true.", - "Referenced_via_0_from_file_1_1400": "Se hace referencia mediante \"{0}\" desde el archivo \"{1}\".", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. Considere la posibilidad de agregar una extensión a la ruta de acceso de importación.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. ¿Quiso decir “{0}”?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Quite una lista de directorios del proceso de inspección.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Quite una lista de archivos del procesamiento del modo de inspección.", - "Remove_all_unnecessary_override_modifiers_95163": "Quitar todos los modificadores \"override\" innecesarios", - "Remove_all_unnecessary_uses_of_await_95087": "Quitar todos los usos innecesarios de \"await\"", - "Remove_all_unreachable_code_95051": "Quitar todo el código inaccesible", - "Remove_all_unused_labels_95054": "Quitar todas las etiquetas no utilizadas", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Quitar las llaves de todos los cuerpos de función de flecha con problemas relevantes", - "Remove_braces_from_arrow_function_95060": "Quitar las llaves de la función de flecha", - "Remove_braces_from_arrow_function_body_95112": "Quitar las llaves del cuerpo de función de flecha", - "Remove_import_from_0_90005": "Quitar importación de \"{0}\"", - "Remove_override_modifier_95161": "Quitar el modificador \"override\"", - "Remove_parentheses_95126": "Quitar los paréntesis", - "Remove_template_tag_90011": "Quitar la etiqueta de plantilla", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Elimine el límite de 20 MB del tamaño total del código fuente para los archivos JavaScript en el servidor de lenguaje TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Quitar \"type\" de la declaración de importación de \"{0}\"", - "Remove_type_from_import_of_0_from_1_90056": "Quitar \"type\" de la importación de '{0}' de \"{1}\"", - "Remove_type_parameters_90012": "Quitar los parámetros de tipo", - "Remove_unnecessary_await_95086": "Quitar elementos \"await\" innecesarios", - "Remove_unreachable_code_95050": "Quitar el código inaccesible", - "Remove_unused_declaration_for_Colon_0_90004": "Quitar la declaración sin usar para \"{0}\"", - "Remove_unused_declarations_for_Colon_0_90041": "Quite las declaraciones sin usar para \"{0}\"", - "Remove_unused_destructuring_declaration_90039": "Quite la declaración de desestructuración no utilizada", - "Remove_unused_label_95053": "Quitar etiqueta no utilizada", - "Remove_variable_statement_90010": "Quitar la declaración de variable", - "Rename_param_tag_name_0_to_1_95173": "Cambiar el nombre de la etiqueta \"@param\" \"{0}\" a \"{1}\"", - "Replace_0_with_Promise_1_90036": "Reemplazar \"{0}\" por \"Promise<{1}>\"", - "Replace_all_unused_infer_with_unknown_90031": "Reemplazar todos los elementos \"infer\" sin usar por \"unknown\"", - "Replace_import_with_0_95015": "Reemplazar importación por \"{0}\".", - "Replace_infer_0_with_unknown_90030": "Reemplazar \"infer {0}\" por \"unknown\"", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Notificar un error cuando no todas las rutas de acceso de código en funcionamiento devuelven un valor.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Notificar errores de los casos de fallthrough en la instrucción switch.", - "Report_errors_in_js_files_8019": "Notifique los errores de los archivos .js.", - "Report_errors_on_unused_locals_6134": "Informe de errores sobre variables locales no usadas.", - "Report_errors_on_unused_parameters_6135": "Informe de errores sobre parámetros no usados.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Requiere una anotación suficiente en las exportaciones para que otras herramientas puedan generar archivos de declaración de forma trivial.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Se requieren propiedades no declaradas de las signaturas de índice para usar los accesos de elemento.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Los parámetros de tipo requeridos pueden no seguir parámetros de tipo opcionales.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La resolución del módulo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La resolución de la directiva de referencia de tipo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Error en la resolución del nombre no relativo; probando con las características modernas de resolución de nodos deshabilitadas para ver si la biblioteca npm necesita una actualización de la configuración.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Error en la resolución del nombre no relativo; intentando con “--moduleResolution bundler” para ver si el proyecto puede necesitar una actualización de la configuración.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolver \"keyof\" exclusivamente como nombres de propiedad con valores de cadena (sin números ni símbolos).", - "Resolved_under_condition_0_6414": "Resuelto bajo condición “{0}”.", - "Resolving_in_0_mode_with_conditions_1_6402": "Resolviendo en modo {0} con condiciones {1}.", - "Resolving_module_0_from_1_6086": "======== Resolviendo el módulo '{0}' de '{1}'. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolviendo el nombre de módulo '{0}' relativo a la dirección URL base '{1}' - '{2}'.", - "Resolving_real_path_for_0_result_1_6130": "Resolviendo la ruta de acceso real de \"{0}\", resultado: \"{1}\".", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolviendo la directiva de referencia de tipo \"{0}\", archivo contenedor \"{1}\". ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz: '{2}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz no establecido. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz: '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz no establecido. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolviendo la directiva de referencia de tipo para el programa que especifica typeRoots personalizado, omitiendo la búsqueda en la carpeta “node_modules”.", - "Resolving_with_primary_search_path_0_6121": "Resolviendo con la ruta de búsqueda principal \"{0}\".", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "El parámetro rest '{0}' tiene un tipo \"any[]\" implícitamente.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "El parámetro rest \"{0}\" tiene un tipo \"any[]\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", - "Rest_types_may_only_be_created_from_object_types_2700": "Los tipos rest solo se pueden crear a partir de tipos de objeto.", - "Return_type_annotation_circularly_references_itself_2577": "La anotación de tipo de valor devuelto se hace referencia a sí misma de forma circular.", - "Return_type_must_be_inferred_from_a_function_95149": "El tipo de valor devuelto debe inferirse de una función", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "El tipo de valor devuelto de la signatura de constructor de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "El tipo de valor devuelto de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "El tipo de valor devuelto de la signatura de constructor se debe poder asignar al tipo de instancia de la clase.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "El tipo de valor devuelto de la función exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "El tipo de valor devuelto de la función exportada tiene o usa el nombre '{0}' del módulo {1} privado.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "El tipo de valor devuelto de la función exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "El tipo de valor devuelto de la signatura de índice de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "El tipo de valor devuelto de la signatura de índice de la interfaz exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "El tipo de valor devuelto del método de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "El tipo de valor devuelto del método de la interfaz exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo {2} externo, pero no se puede nombrar.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} privado.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre privado '{0}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo {2} externo, pero no se puede nombrar.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} privado.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre privado '{0}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador de paquete \"{4}\".", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" no se resolvió.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\".", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\" con el identificador del paquete \"{3}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador del paquete \"{4}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior no se resolvió.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\" con el identificador de paquete \"{3}\".", - "Rewrite_all_as_indexed_access_types_95034": "Reescribir todo como tipos de acceso indexados", - "Rewrite_as_the_indexed_access_type_0_90026": "Reescribir como tipo de acceso indexado \"{0}\"", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Vuelva a escribir las extensiones de archivo \".ts\", \".tsx\", \".mts\" y \".cts\" en rutas de acceso de importación relativas a su equivalente de JavaScript en los archivos de salida.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "El operando derecho de ?? es inaccesible porque el operando izquierdo nunca es nulo.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "No se puede determinar el directorio raíz, se omitirán las rutas de búsqueda principales.", - "Root_file_specified_for_compilation_1427": "Archivo raíz especificado para la compilación", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "ESTRATEGIA", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Guarde archivos .tsbuildinfo para permitir la compilación incremental de proyectos.", - "Saw_non_matching_condition_0_6405": "Se vio una condición no coincidente '{0}'.", - "Scoped_package_detected_looking_in_0_6182": "Se detectó un paquete con ámbito al buscar en \"{0}\"", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Buscando extensiones de reserva en todos los directorios de node_modules antecesores: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Buscando extensiones preferidas en todos los directorios de node_modules antecesores: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Consulte también https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "La selección no es una instrucción ni instrucciones válidas", - "Selection_is_not_a_valid_type_node_95133": "La selección no es un nodo de tipo válido", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Establezca la versión del lenguaje de JavaScript para las JavaScript emitidas e incluya las declaraciones de bibliotecas compatibles.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Establezca el lenguaje de la mensajería de TypeScript. No afecta a la emisión.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Establecer la opción \"module\" del archivo de configuración en \"{0}\"", - "Set_the_newline_character_for_emitting_files_6659": "Establezca el carácter de nueva línea para emitir archivos.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Establecer la opción \"target\" del archivo de configuración en \"{0}\"", - "Setters_cannot_return_a_value_2408": "Los establecedores no pueden devolver un valor.", - "Show_all_compiler_options_6169": "Mostrar todas las opciones de compilador.", - "Show_diagnostic_information_6149": "Mostrar información de diagnóstico.", - "Show_verbose_diagnostic_information_6150": "Mostrar información de diagnóstico detallada.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar lo que podría compilarse (o eliminarse, si se especifica con \"--clean\")", - "Signature_0_must_be_a_type_predicate_1224": "La signatura '{0}' debe tener un predicado de tipo.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Las declaraciones de signatura solo se pueden usar en los archivos TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Omitir la compilación de proyectos que siguen en la cadena debido a un error en el proyecto ascendente.", - "Skip_type_checking_all_d_ts_files_6693": "Omita la comprobación de tipos de todos los archivos .d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Omita la comprobación de tipos de archivo .d.ts que se incluyen con TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Omita la comprobación de tipos de los archivos de declaración.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" tiene errores", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" no se ha compilado", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Omitiendo el módulo “{0}” que parece un URI absoluto, tipos de archivo de destino: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", - "Source_has_0_element_s_but_target_allows_only_1_2619": "El origen tiene {0} elemento(s), pero el destino solo permite {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "El origen tiene {0} elemento(s), pero el destino requiere {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "El origen no proporciona ninguna coincidencia para el elemento requerido en la posición {0} del destino.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "El origen no proporciona ninguna coincidencia para el elemento variádico en la posición {0} del destino.", - "Specify_ECMAScript_target_version_6015": "Especifique la versión de destino de ECMAScript.", - "Specify_JSX_code_generation_6080": "Especifique la generación de código JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especifique un archivo que agrupe todas las salidas en un archivo JavaScript. Si 'declaración' es verdadera, también designa un archivo que agrupa toda la salida .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especifique una lista de patrones globales que coincidan con los archivos que se incluirán en la compilación.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Especifique una lista de complementos de servicio de lenguaje para incluirlos.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especifique un conjunto de archivos de declaración de biblioteca agrupados que describan el entorno de tiempo de ejecución de destino.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especifique un conjunto de entradas que reasignan las importaciones a ubicaciones de búsqueda adicionales.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique una matriz de objetos que especifique las rutas de acceso a los proyectos. Usada en las referencias del proyecto.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Especifique una carpeta de salida para todos los archivos emitidos.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar el comportamiento de emisión o comprobación para las importaciones que solo se usan para los tipos.", - "Specify_file_to_store_incremental_compilation_information_6380": "Especificar un archivo para almacenar la información de compilación incremental", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique cómo busca TypeScript un archivo a partir del especificador de módulo que se le indique.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especifique cómo se vigilan los directorios en los sistemas que carecen de la funcionalidad de vigilancia recursiva de archivos.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique cómo funciona el modo de inspección de TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique los archivos de biblioteca que se van a incluir en la compilación.", - "Specify_module_code_generation_6016": "Especifique la generación de código del módulo.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especifique el especificador de módulo que se usa para importar las funciones de fábrica de JSX cuando se usa \"jsx: react-jsx*\".", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especifique varias carpetas que actúen como \"./node_modules/@types\".", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especifique una o varias referencias de ruta o de módulo de nodo a los archivos de configuración base desde los que se herede la configuración.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique las opciones para la adquisición automática de los archivos de declaración.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique la estrategia para crear una inspección de sondeo cuando no se pueda crear con eventos del sistema de archivos: \"FixedInterval\" (valor predeterminado), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique la estrategia para inspeccionar el directorio en las plataformas que no admiten las inspecciones recursivas de forma nativa: \"UseFsEvents\" (valor predeterminado), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique la estrategia para inspeccionar el archivo: \"FixedPollingInterval\" (valor predeterminado), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique la referencia de fragmento de JSX utilizada para los fragmentos cuando se dirige a la emisión de JSX de React, por ejemplo, \"React.Fragment\" o \"Fragment\".", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique la función de generador JSX que se usará cuando el destino sea la emisión de JSX \"react\"; por ejemplo, \"React.createElement\" o \"h\".", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique la función de generador JSX que se usa al establecer como destino la emisión JSX de React; por ejemplo, \"React.createElement\" o \"h\".", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique la función de la fábrica de fragmentos de JSX que se va a usar cuando se especifique como destino la emisión de JSX \"react\" con la opción del compilador \"jsxFactory\", por ejemplo, \"fragmento\".", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especifique el directorio base para resolver nombres de módulos no relativos.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique la secuencia de final de línea que debe usarse para emitir archivos: 'CRLF' (Dos) o 'LF' (Unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique la ubicación donde el depurador debe colocar los archivos de TypeScript en lugar de sus ubicaciones de origen.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique la ubicación donde el depurador debe colocar los archivos de asignaciones en lugar de las ubicaciones generadas.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique la profundidad máxima de carpeta usada para comprobar archivos JavaScript de \"node_modules\". Solo es compatible con \"allowJs\".", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique el especificador de módulo que se va a usar para importar las funciones de fábrica \"jsx\" y \"jsxs\"; por ejemplo, react", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique el objeto invocado para 'createElement'. Esto solo se aplica cuando el destino es la emisión JSX \"react\".", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique el directorio de salida para los archivos de declaración generados.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Especifique la ruta de acceso para el archivo de compilación incremental .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique el directorio raíz de los archivos de entrada. Úselo para controlar la estructura del directorio de salida con --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Especifique la carpeta raíz en los archivos de código fuente.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique la ruta raíz para que los depuradores encuentren el código de origen de referencia.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique los nombres de los paquetes de tipo que se incluyen sin ser referenciados en un archivo fuente.", - "Specify_what_JSX_code_is_generated_6646": "Especifique qué código de JSX se generará.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especifique el enfoque que debe usar el monitor si el sistema agota los monitores de archivos nativos.", - "Specify_what_module_code_is_generated_6657": "Especifique qué código de módulo se generará.", - "Split_all_invalid_type_only_imports_1367": "Dividir todas las importaciones solo de tipo no válidas", - "Split_into_two_separate_import_declarations_1366": "Dividir en dos declaraciones de importación independientes", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "El operador spread de las expresiones \"new\" solo está disponible si el destino es ECMAScript 5 y versiones posteriores.", - "Spread_types_may_only_be_created_from_object_types_2698": "Los tipos spread solo se pueden crear a partir de tipos de objeto.", - "Starting_compilation_in_watch_mode_6031": "Iniciando la compilación en modo de inspección...", - "Statement_expected_1129": "Se esperaba una instrucción.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "No se permiten instrucciones en los contextos de ambiente.", - "Static_members_cannot_reference_class_type_parameters_2302": "Los miembros estáticos no pueden hacer referencia a parámetros de tipo de clase.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propiedad estática \"{0}\" está en conflicto con la propiedad integrada \"Function.{0}\" de la función de constructor \"{1}\".", - "Stricter_Typechecking_Options_6292": "Opciones de comprobación de tipos más estrictas", - "String_literal_expected_1141": "Se esperaba un literal de cadena.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "No se admiten los nombres de importación y exportación de literales de cadena cuando la marca “--module” está establecida en “es2015” o “es2020”.", - "String_literal_with_double_quotes_expected_1327": "Se esperaba un literal de cadena entre comillas dobles.", - "Style_Options_6293": "Opciones de estilo", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Use color y contexto para estilizar los errores y los mensajes (experimental).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Las marcas de subpatrones deben estar presentes cuando hay un signo menos.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Las declaraciones de propiedad subsiguientes deben tener el mismo tipo. La propiedad \"{0}\" debe ser de tipo \"{1}\", pero aquí tiene el tipo \"{2}\".", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Las declaraciones de variable subsiguientes deben tener el mismo tipo. La variable '{0}' debe ser de tipo '{1}', pero aquí tiene el tipo '{2}'.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "La sustitución '{0}' para el patrón '{1}' tiene un tipo incorrecto. Se esperaba 'string', pero se obtuvo '{2}'.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La sustitución \"{0}\" del patrón \"{1}\" puede tener un carácter \"*\" como máximo.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Las sustituciones para el patrón '{0}' deben ser una matriz.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Las sustituciones para el patrón '{0}' no deben ser una matriz vacía.", - "Successfully_created_a_tsconfig_json_file_6071": "Archivo tsconfig.json creado correctamente.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "No se permiten llamadas a \"super\" fuera de los constructores o en funciones anidadas dentro de estos.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Suprima las comprobaciones de propiedades en exceso de los literales de objeto.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Eliminar errores de noImplicitAny para los objetos de indexación a los que les falten firmas de índice.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprima los errores \"noImplicitAny\" al indexar objetos que carecen de firmas de índice.", - "Switch_each_misused_0_to_1_95138": "Cambie cada elemento \"{0}\" usado incorrectamente a \"{1}\"", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Llame a las devoluciones de llamada de forma sincrónica y actualice el estado de los monitores de directorio en las plataformas que no admitan la supervisión recursiva de forma nativa.", - "Syntax_Colon_0_6023": "Sintaxis: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La etiqueta \"{0}\" espera al menos \"{1}\" argumentos, pero el generador de JSX \"{2}\" proporciona como máximo \"{3}\".", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "No se permiten expresiones de plantilla con etiquetas en una cadena opcional.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "El destino solo permite {0} elemento(s), pero el origen puede tener más.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "El destino requiere {0} elemento(s), pero el origen puede tener menos.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma de destino proporciona muy pocos argumentos. Se esperaba {0} o más, pero se obtuvo {1}.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "El modificador \"{0}\" solo se puede usar en los archivos TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "El operador '{0}' no se puede aplicar al tipo \"symbol\".", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "No se permite usar el operador '{0}' para los tipos booleanos. Como alternativa, puede usar '{1}'.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propiedad \"{0}\" de un iterador de asincronía debe ser un método.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "La propiedad \"{0}\" de un iterador debe ser un método.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "El tipo 'Object' se puede asignar a muy pocos tipos. ¿Se refería a usar el tipo 'any' en realidad?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Las marcas Unicode (u) y Unicode Sets (v) no se pueden establecer simultáneamente.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "No se puede hacer referencia al objeto “arguments” en una función de flecha en ES5 ni ES5. Considere la posibilidad de usar una expresión de función estándar.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "No se puede hacer referencia al objeto “arguments” en una función o método asincrónico en ES5. Considere la posibilidad de usar un método o función estándar.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "El cuerpo de una instrucción \"if\" no puede ser la instrucción vacía.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La llamada se llevaría a cabo sin problemas en esta implementación, pero las signaturas de implementación de las sobrecargas no están visibles externamente.", - "The_character_set_of_the_input_files_6163": "Conjunto de caracteres de los archivos de entrada.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La función de flecha contenedora captura el valor global de \"this\".", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "El cuerpo de la función o del módulo contenedor es demasiado grande para realizar un análisis de flujo de control.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "El archivo actual es un módulo CommonJS y no puede usar \"await\" en el nivel superior.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "El archivo actual es un módulo CommonJS cuyas importaciones generarán llamadas \"require\"; sin embargo, el archivo al que se hace referencia es un módulo ECMAScript y no se puede importar con \"require\". Considere la posibilidad de escribir una llamada dinámica \"import(\"{0}\")\" en su lugar.", - "The_current_host_does_not_support_the_0_option_5001": "El host actual no admite la opción '{0}'.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La declaración de \"{0}\" que probablemente pretendía usar se define aquí", - "The_declaration_was_marked_as_deprecated_here_2798": "La declaración se ha marcado aquí como en desuso.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "El tipo esperado procede de la propiedad \"{0}\", que se declara aquí en el tipo \"{1}\"", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "El tipo esperado procede del tipo de valor devuelto de esta signatura.", - "The_expected_type_comes_from_this_index_signature_6501": "El tipo esperado procede de esta signatura de índice.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "La expresión de una asignación de exportación debe ser un identificador o un nombre completo en un contexto de ambiente.", - "The_file_is_in_the_program_because_Colon_1430": "El archivo está en el programa porque:", - "The_files_list_in_config_file_0_is_empty_18002": "La lista de archivos del archivo de configuración '{0}' está vacía.", - "The_first_export_default_is_here_2752": "El primer elemento export default está aquí.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "El primer parámetro del método \"then\" de una promesa debe ser una devolución de llamada.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "El tipo \"JSX.{0}\" global no puede tener más de una propiedad.", - "The_implementation_signature_is_declared_here_2750": "La signatura de implementación se declara aquí.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "No se permite la metapropiedad \"import.meta\" en archivos que se compilarán en la salida de CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La metapropiedad \"import.meta\" solo se permite cuando la opción \"--module\" es \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\" o \"nodenext\".", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "No se puede asignar un nombre al tipo inferido de \"{0}\" sin una referencia a \"{1}\". Es probable que no sea portable. Se requiere una anotación de tipo.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "El tipo deducido de \"{0}\" hace referencia a un tipo con una estructura cíclica que no se puede serializar trivialmente. Es necesaria una anotación de tipo.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "El tipo inferido de \"{0}\" hace referencia a un tipo \"{1}\" no accesible. Se requiere una anotación de tipo.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "El tipo inferido de este nodo supera la longitud máxima que el compilador podrá serializar. Se necesita una anotación de tipo explícito.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "El inicializador de una declaración “using” debe ser un objeto con un método “[Symbol.dispose]()”, o ser “null” o “undefined”.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "El inicializador de una declaración “await using” debe ser un objeto con un método “[Symbol.asyncDispose]()” o “[Symbol.dispose]()”, o ser “null” o “undefined”.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" existe en varios constituyentes y es privada en algunos de ellos.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" tiene tipos en conflicto en algunos constituyentes.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La palabra clave \"intrinsic\" solo se puede usar para declarar tipos intrínsecos proporcionados por el compilador.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Se debe proporcionar la opción del compilador \"jsxFragmentFactory\" para usar fragmentos de JSX con la opción del compilador \"jsxFactory\".", - "The_last_overload_gave_the_following_error_2770": "La última sobrecarga dio el error siguiente.", - "The_last_overload_is_declared_here_2771": "La última sobrecarga se declara aquí.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte izquierda de una instrucción \"for...in\" no puede ser un patrón de desestructuración.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "El lado izquierdo de un “for...in” no puede ser una declaración “using”.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "El lado izquierdo de una instrucción “for...in” no puede ser una declaración “await using”.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La parte izquierda de una instrucción \"for...in\" no puede usar una anotación de tipo.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte izquierda de una instrucción \"for...in\" no puede ser un acceso de propiedad opcional.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte izquierda de una instrucción 'for...in' debe ser una variable o el acceso a una propiedad.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte izquierda de una instrucción \"for...in\" debe ser de tipo \"string\" o \"any\".", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La parte izquierda de una instrucción \"for...of\" no puede usar una anotación de tipo.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte izquierda de una instrucción \"for...of\" no puede ser un acceso de propiedad opcional.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "El lado izquierdo de una instrucción de \"para... de\" puede no ser \"async\".", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte izquierda de una instrucción 'for...of' debe ser una variable o el acceso a una propiedad.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte izquierda de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte izquierda de una expresión de asignación no puede ser un acceso de propiedad opcional.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte izquierda de una expresión de asignación debe ser una variable o el acceso a una propiedad.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "El lado izquierdo de una expresión “instanceof” debe poder asignarse al primer argumento del método “[Symbol.hasInstance]” del lado derecho.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte izquierda de una expresión \"instanceof\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Configuración regional utilizada para mostrar los mensajes al usuario (por ejemplo, \"es-es\")", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "La profundidad máxima de dependencia para buscar en node_modules y cargar los archivos de JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "El operando de un operador \"delete\" no puede ser un identificador privado.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "El operando de un operador \"delete\" no puede ser una propiedad de solo lectura.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "El operando de un operador \"delete\" debe ser una referencia de propiedad.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "El operando de un operador \"delete\" debe ser opcional.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "El operando de un operador de incremento o decremento no puede ser un acceso de propiedad opcional.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "El operando de un operador de incremento o decremento debe ser una variable o el acceso a una propiedad.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "El analizador esperaba encontrar un elemento \"{1}\" que coincidiera con el token \"{0}\" aquí.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de exportación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de importación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "No se puede acceder a la propiedad \"{0}\" en el tipo \"{1}\" de esta clase porque se ha reemplazado por otro identificador privado con la misma ortografía.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "El tipo de valor devuelto de una función Decorator de parámetro debe ser \"void\" o \"any\".", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "El tipo de valor devuelto de una función Decorator de propiedad debe ser \"void\" o \"any\".", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "El tipo de valor devuelto de una función asincrónica debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global. ¿Pretendía escribir \"Promise<{0}>\"?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte derecha de una instrucción \"for...in\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo, pero aquí tiene el tipo \"{0}\".", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte derecha de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "El lado derecho de una expresión “instanceof” debe ser de tipo “any”, una clase, función u otro tipo asignable al tipo de interfaz “Function”, o un tipo de objeto con un método “Symbol.hasInstance”.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "El lado derecho de una expresión “instanceof” no debe ser una expresión de creación de instancias.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "El valor raíz de un archivo \"{0}\" debe ser un objeto.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera al menos {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "La declaración que ensombrece a \"{0}\" se define aquí.", - "The_signature_0_of_1_is_deprecated_6387": "La signatura \"{0}\" de \"{1}\" está en desuso.", - "The_specified_path_does_not_exist_Colon_0_5058": "La ruta de acceso especificada no existe: \"{0}\".", - "The_tag_was_first_specified_here_8034": "La etiqueta se especificó aquí primero.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "El destino de una asignación rest de objeto no puede ser un acceso de propiedad opcional.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "El destino de una asignación de reposo de objetos debe ser una variable o un acceso a propiedad.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "El contexto 'this' de tipo '{0}' no se puede asignar al contexto 'this' de tipo '{1}' del método.", - "The_this_types_of_each_signature_are_incompatible_2685": "Los tipos 'this' de cada signatura son incompatibles.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "El tipo \"{0}\" es \"readonly\" y no se puede asignar al tipo mutable \"{1}\".", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "El modificador 'tipo' no se puede usar en una exportación con nombre cuando se usa 'exportar tipo' en su instrucción exportar.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "El modificador 'tipo' no se puede usar en una importación con nombre cuando se usa 'exportar tipo' en su instrucción importar.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "No se ha podido serializar el tipo de este nodo porque su propiedad '{0}' no se puede serializar.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "El tipo devuelto por el método \"{0}()\" de un iterador de asincronía debe ser una promesa para un tipo con una propiedad \"value\".", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "El tipo devuelto por el método \"{0}()\" de un iterador debe tener una propiedad \"value\".", - "The_types_of_0_are_incompatible_between_these_types_2200": "Los tipos de \"{0}\" son incompatibles entre estos tipos.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Los tipos que \"{0}\" devuelve son incompatibles entre estos tipos.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "El valor \"{0}\" no se puede usar aquí.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La declaración de variable de una instrucción \"for...in\" no puede tener un inicializador.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La declaración de variable de una instrucción \"for...of\" no puede tener un inicializador.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "No se admite la instrucción 'with'. Todos los símbolos de un bloque 'with' tendrán el tipo 'any'.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Hay tipos en “{0}”, pero este resultado no se pudo resolver en la configuración actual de “moduleResolution”. Considere la posibilidad de actualizar a “node16”, “nodenext” o “bundler”.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Hay tipos en “{0}”, pero este resultado no se pudo resolver al respetar \"exports\" de package.json. Es posible que la biblioteca “{1}” necesite actualizar sus package.json o tipos.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "No hay ningún grupo de captura denominado “{0}” en esta expresión regular.", - "There_is_nothing_available_for_repetition_1507": "No hay nada disponible para la repetición.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Esta etiqueta JSX requiere que \"{0}\" esté en el ámbito, pero no se encontró.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Esta etiqueta JSX requiere que exista la ruta de acceso del módulo \"{0}\", pero no se encontró ninguna. Asegúrese de que tiene instalados los tipos para el paquete adecuado.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propiedad \"{0}\" de esta etiqueta de JSX espera un solo elemento secundario de tipo \"{1}\", pero se han proporcionado varios elementos secundarios.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propiedad \"{0}\" de esta etiqueta de JSX espera el tipo \"{1}\", que requiere varios elementos secundarios, pero solo se ha proporcionado un elemento secundario.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Esta referencia inversa hace referencia a un grupo que no existe. No hay grupos de captura en esta expresión regular.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Esta referencia inversa hace referencia a un grupo que no existe. Solo hay {0} grupos de captura en esta expresión regular.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Esta expresión binaria nunca acepta valores NULL. ¿Faltan paréntesis?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este carácter no se puede escapar en una expresión regular.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparación parece no intencionada porque los tipos \"{0}\" y \"{1}\" no tienen superposición.", - "This_condition_will_always_return_0_2845": "Esta condición siempre devolverá \"{0}\".", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Esta condición siempre devolverá \"{0}\", ya que JavaScript compara objetos por referencia, no por valor.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condición devolverá siempre true porque siempre se define '{0}'.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condición siempre devolverá true, porque esta función se define siempre. ¿Pretendía llamarla en su lugar?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta función de constructor puede convertirse en una declaración de clase.", - "This_expression_is_always_nullish_2871": "Esta expresión siempre acepta valores NULL.", - "This_expression_is_never_nullish_2881": "Esta expresión nunca es nula.", - "This_expression_is_not_callable_2349": "No se puede llamar a esta expresión.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "No se puede llamar a esta expresión porque es un descriptor de acceso \"get\". ¿Pretendía usarlo sin \"()\"?", - "This_expression_is_not_constructable_2351": "No se puede construir esta expresión.", - "This_file_already_has_a_default_export_95130": "Este archivo ya tiene una exportación predeterminada", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Esta ruta de acceso de importación no es segura de reescribir porque se resuelve en otro proyecto y la ruta de acceso relativa entre los archivos de salida de los proyectos no es la misma que la ruta de acceso relativa entre sus archivos de entrada.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Esta importación usa una extensión \"{0}\" para resolver en un archivo TypeScript de entrada, pero no se reescribe durante la emisión porque no es una ruta de acceso relativa.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta es la declaración que se está aumentando. Considere la posibilidad de mover la declaración en aumento al mismo archivo.", - "This_kind_of_expression_is_always_falsy_2873": "Este tipo de expresión siempre es falso.", - "This_kind_of_expression_is_always_truthy_2872": "Este tipo de expresión siempre es cierto.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Puede convertirse en una función asincrónica.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque no se declara en la clase base '{0}'.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Este miembro no puede tener un comentario JSDoc con una etiqueta 'override' porque no se declara en la clase base '{0}'. ¿Quería decir '{1}'?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque su clase contenedora '{0}' no extiende otra clase.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque su nombre es dinámico.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\".", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\". ¿Quizá quiso decir \"{1}\"?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este miembro no puede tener un modificador \"override\" porque su clase contenedora \"{0}\" no extiende otra clase.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Este miembro no puede tener un modificador 'override' porque su nombre es dinámico.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Este miembro debe tener un comentario JSDoc con una etiqueta '@override' porque invalida un miembro de la clase base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este miembro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este miembro debe tener un modificador \"override\" porque reemplaza a un método abstracto que se declara en la clase base \"{0}\".", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Solo se puede hacer referencia a este módulo con las importaciones o exportaciones de ECMAScript mediante la activación de la marca \"{0}\" y la referencia a su exportación predeterminada.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo se declara con \"export =\" y solo se puede usar con una importación predeterminada cuando se usa la marca \"{0}\".", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Esta operación se puede simplificar. Este turno es idéntico a \"{0} {1} {2}\".", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Esta sobrecarga devuelve implícitamente el tipo “{0}” porque carece de una anotación de tipo de valor devuelto.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta signatura de sobrecarga no es compatible con su signatura de implementación.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parámetro no se permite con la directiva \"use strict\".", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Esta propiedad de parámetro debe tener un comentario JSDoc con una etiqueta '@override' porque invalida un miembro de la clase base '{0}'.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propiedad de parámetro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esta marca de expresión regular no se puede alternar dentro de un subpatrón.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esta marca de expresión regular solo está disponible cuando el destino es “{0}” o posterior.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Esta ruta de acceso de importación relativa no es segura de reescribir porque parece un nombre de archivo, pero realmente se resuelve en \"{0}\".", - "This_spread_always_overwrites_this_property_2785": "Este elemento de propagación siempre sobrescribe esta propiedad.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Esta sintaxis no se permite cuando \"erasableSyntaxOnly\" está habilitado.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Esta sintaxis está reservada en archivos con la extensión .mts o .CTS. Agregue una coma o una restricción explícita al final.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Esta sintaxis se reserva a archivos con la extensión .mts o .cts. En su lugar, use una expresión \"as\".", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Esta sintaxis requiere un asistente importado, pero no se puede encontrar el módulo \"{0}\".", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxis requiere una aplicación auxiliar importada denominada \"{1}\", que no existe en \"{0}\". Considere la posibilidad de actualizar la versión de \"{0}\".", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxis requiere un asistente importado denominado \"{1}\" con parámetros de {2}, que no es compatible con el de \"{0}\". Pruebe a actualizar la versión de \"{0}\".", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Este parámetro de tipo podría necesitar una restricción \"extends {0}\".", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Este uso de \"import\" no es válido. Se pueden escribir llamadas \"import()\", pero deben tener paréntesis y no pueden tener argumentos de tipo.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Para convertir este archivo en un módulo ECMAScript, agregue el campo `\"type\": \"module\"` a \"{0}\"'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o agregue el campo `\"type\": \"module\"` a \"{1}\".", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o cree un archivo package.json local con '{ \"type\": \"module\" }'.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para convertir este archivo en un módulo ECMAScript, cree un archivo package.json local con `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Las expresiones \"await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Las instrucciones \"await using\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Las declaraciones de nivel superior de los archivos .d.ts deben comenzar con un modificador \"declare\" o \"export\".", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Los bucles \"for await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", - "Trailing_comma_not_allowed_1009": "No se permite la coma final.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilar cada archivo como un módulo aparte (parecido a \"ts.transpileModule\").", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Pruebe \"npm i --save-dev @types/{1}\" si existe o agregue un nuevo archivo de declaración (.d.ts) que incluya \"declare module '{0}';\".", - "Trying_other_entries_in_rootDirs_6110": "Se probarán otras entradas de \"rootDirs\".", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Probando la sustitución '{0}', ubicación candidata para el módulo: '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "El tipo de tupla \"{0}\" de longitud \"{1}\" no tiene ningún elemento en el índice \"{2}\".", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Los argumentos de tipo de tupla se hacen referencia a sí mismos de forma circular.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "El tipo \"{0}\" solo puede iterarse cuando se usa la marca \"--downlevelIteration\" o con un valor \"--target\" de \"es2015\" o superior.", - "Type_0_cannot_be_used_as_an_index_type_2538": "El tipo '{0}' no se puede usar como tipo de índice.", - "Type_0_cannot_be_used_to_index_type_1_2536": "El tipo '{0}' no se puede usar para indexar el tipo '{1}'.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "El tipo '{0}' no cumple la restricción '{1}'.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "El tipo \"{0}\" no satisface el tipo esperado \"{1}\".", - "Type_0_has_no_call_signatures_2757": "El tipo \"{0}\" no tiene signaturas de llamada.", - "Type_0_has_no_construct_signatures_2761": "El tipo \"{0}\" no tiene signaturas de construcción.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "El tipo '{0}' no tiene una signatura de índice correspondiente al tipo '{1}'.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "El tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\".", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "El tipo \"{0}\" no tiene firmas para las que sea aplicable la lista de argumentos de tipo.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "El tipo “{0}” es genérico y solo se puede indizar para lectura.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2} y {3} más.", - "Type_0_is_not_a_constructor_function_type_2507": "El tipo '{0}' no es un tipo de función de constructor.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "El tipo “{0}” no es un tipo de valor devuelto válido para una función asincrónica en ES5, porque no hace referencia a un valor de constructor compatible con promesas.", - "Type_0_is_not_an_array_type_2461": "'{0}' no es un tipo de matriz.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' no es un tipo de matriz o un tipo de cadena.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "El tipo \"{0}\" no es un tipo de matriz o un tipo de cadena o no tiene un método \"[Symbol.iterator]()\" que devuelve un iterador.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "El tipo \"{0}\" no es un tipo de matriz o no tiene un método \"[Symbol.iterator]()\" que devuelve un iterador.", - "Type_0_is_not_assignable_to_type_1_2322": "El tipo '{0}' no se puede asignar al tipo '{1}'.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "El tipo '{0}' no se puede asignar al tipo '{1}'. ¿Quería decir \"{2}\"?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "El tipo \"{0}\" no se puede asignar al tipo \"{1}\". Existen dos tipos distintos con este nombre, pero no están relacionados.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "El tipo “{0}” no se puede asignar al tipo “{1}”, tal y como implica la anotación de desviación.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "El tipo “{0}” no se puede asignar al tipo “{1}” según sea necesario para los valores de miembro de enumeración calculados.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" al tipo del destino.", - "Type_0_is_not_comparable_to_type_1_2678": "El tipo '{0}' no se puede comparar con el tipo '{1}'.", - "Type_0_is_not_generic_2315": "El tipo '{0}' no es genérico.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "El tipo \"{0}\" puede representar un valor primitivo, que no se permite como operando derecho del operador \"in\".", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "El tipo \"{0}\" debe tener un método \"[Symbol.asyncIterator]()\" que devuelve un iterador de asincronía.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "El tipo \"{0}\" debe tener un método \"[Symbol.iterator]()\" que devuelve un iterador.", - "Type_0_provides_no_match_for_the_signature_1_2658": "El tipo \"{0}\" no proporciona ninguna coincidencia para la signatura \"{1}\".", - "Type_0_recursively_references_itself_as_a_base_type_2310": "El tipo '{0}' se hace referencia a sí mismo de forma recursiva como tipo base.", - "Type_Checking_6248": "Comprobación de tipos", - "Type_alias_0_circularly_references_itself_2456": "El alias de tipo '{0}' se hace referencia a sí mismo de forma circular.", - "Type_alias_must_be_given_a_name_1439": "Se debe asignar un nombre al alias de tipo.", - "Type_alias_name_cannot_be_0_2457": "El nombre del alias de tipo no puede ser \"{0}\".", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Los alias de tipo solo se pueden usar en los archivos TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Una anotación de tipo no puede aparecer en una declaración de constructor.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Las anotaciones de tipo solo se pueden usar en los archivos TypeScript.", - "Type_argument_expected_1140": "Se esperaba un argumento de tipo.", - "Type_argument_list_cannot_be_empty_1099": "La lista de argumentos de tipo no puede estar vacía.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Los argumentos de tipo solo se pueden usar en los archivos TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Los argumentos de tipo de \"{0}\" se hacen referencia a sí mismos de forma circular.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Las expresiones de aserción de tipo solo se pueden usar en los archivos TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "El tipo en la posición {0} del origen no es compatible con el tipo en la posición {1} del destino.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "El tipo en las posiciones {0} a {1} del origen no es compatible con el tipo en la posición {2} del destino.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "El tipo que contiene el nombre privado “{0}” no se puede usar con --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Archivos de declaración de tipos que se incluirán en la compilación.", - "Type_expected_1110": "Se esperaba un tipo.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Las aserciones de importación de tipos deben tener exactamente una clave - \"resolution-mode\" - con el valor \"import\" o \"require\".", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "La importación de tipos de un módulo ECMAScript desde un módulo CommonJS debe tener un atributo \"resolution-mode\".", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creación de una instancia de tipo es excesivamente profunda y posiblemente infinita.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Se hace referencia al tipo directa o indirectamente en la devolución de llamada de entrega de su propio método \"then\".", - "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\" con el valor packageId \"{2}\"", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "El tipo de operando \"await\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "El tipo de valor de la propiedad calculada es \"{0}\", que no se puede asignar al tipo \"{1}\".", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "El tipo de variable miembro de instancia \"{0}\" no puede hacer referencia al identificador \"{1}\" declarado en el constructor.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "El tipo de elementos iterados de un operando \"yield*\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "El tipo de propiedad \"{0}\" hace referencia circular a sí misma en el tipo asignado \"{1}\".", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "El tipo de operando \"yield\" en un generador asincrónico debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "La importación de solo tipo de un módulo ECMAScript desde un módulo CommonJS debe tener un atributo \"resolution-mode\".", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "El tipo se origina en esta importación. No se puede construir ni llamar a una importación de estilo de espacio de nombres y provocará un error en tiempo de ejecución. Considere la posibilidad de usar una importación predeterminada o require aquí en su lugar.", - "Type_parameter_0_has_a_circular_constraint_2313": "El parámetro de tipo '{0}' tiene una restricción circular.", - "Type_parameter_0_has_a_circular_default_2716": "El parámetro de tipo \"{0}\" tiene un valor circular predeterminado.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "El parámetro de tipo '{0}' de la signatura de llamada de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "El parámetro de tipo '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "El parámetro de tipo '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "El parámetro de tipo '{0}' de la función exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "El parámetro de tipo '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "El parámetro de tipo \"{0}\" del tipo de objeto asignado exportado usa un nombre privado \"{1}\".", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "El parámetro de tipo '{0}' del alias del tipo exportado tiene o usa un nombre privado '{1}'.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "El parámetro de tipo '{0}' del método de la interfaz exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "El parámetro de tipo '{0}' del método público de la clase exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "El parámetro de tipo '{0}' del método estático público de la clase exportada tiene o usa el nombre privado '{1}'.", - "Type_parameter_declaration_expected_1139": "Se esperaba una declaración de parámetros de tipo.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Las declaraciones de parámetros de tipo solo se pueden usar en los archivos TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Los valores predeterminados del parámetro de tipo solo pueden hacer referencia a parámetros de tipo declarados previamente.", - "Type_parameter_list_cannot_be_empty_1098": "La lista de parámetros de tipo no puede estar vacía.", - "Type_parameter_name_cannot_be_0_2368": "El nombre del parámetro de tipo no puede ser \"{0}\".", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Los parámetros de tipo no pueden aparecer en una declaración de constructor.", - "Type_predicate_0_is_not_assignable_to_1_1226": "El predicado de tipo '{0}' no se puede asignar a '{1}'.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "El tipo genera un tipo de tupla demasiado grande para representarlo.", - "Type_reference_directive_0_was_not_resolved_6120": "======== No se resolvió la directiva de referencia de tipo '{0}'. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directiva de referencia de tipo '{0}' se resolvió correctamente como '{1}', principal: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directiva de referencia de tipo \"{0}\" se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\", principal: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Las expresiones de satisfacción de tipo solo se pueden usar en archivos TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Los tipos no pueden aparecer en declaraciones de exportación en archivos JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Los tipos tienen declaraciones independientes de una propiedad '{0}' privada.", - "Types_of_construct_signatures_are_incompatible_2419": "Los tipos de signaturas de construcción son incompatibles.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Los tipos de parámetros '{0}' y '{1}' no son compatibles.", - "Types_of_property_0_are_incompatible_2326": "Los tipos de propiedad '{0}' no son compatibles.", - "Unable_to_open_file_0_6050": "No se puede abrir el archivo '{0}'.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "No se puede resolver la signatura de elemento Decorator de una clase cuando se llama como expresión.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "No se puede resolver la signatura de elemento Decorator de un método cuando se llama como expresión.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "No se puede resolver la signatura de elemento Decorator de un parámetro cuando se llama como expresión.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "No se puede resolver la signatura de elemento Decorator de una propiedad cuando se llama como expresión.", - "Undetermined_character_escape_1513": "Escape de caracteres no determinado.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "“{0}” inesperado. ¿Desea escaparlo con barra diagonal inversa?", - "Unexpected_end_of_text_1126": "Final de texto inesperado.", - "Unexpected_keyword_or_identifier_1434": "Identificador o palabra clave inesperados.", - "Unexpected_token_1012": "Token inesperado.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Se esperaba un constructor, un método, un descriptor de acceso o una propiedad.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Se esperaba un nombre de parámetro de tipo sin llaves.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. ¿Pretendía usar \"{'>'}\" o \">\"?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. ¿Pretendía usar \"{'}'}\" o \"}\"?", - "Unexpected_token_expected_1179": "Token inesperado. Se esperaba \"{\".", - "Unicode_escape_sequence_cannot_appear_here_17021": "La secuencia de escape Unicode no puede aparecer aquí.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Las secuencias de escape Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Las expresiones de valor de propiedad Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", - "Unknown_Unicode_property_name_1524": "Nombre de propiedad Unicode desconocido.", - "Unknown_Unicode_property_name_or_value_1529": "Nombre o valor de propiedad Unicode desconocido.", - "Unknown_Unicode_property_value_1526": "Valor de propiedad Unicode desconocido.", - "Unknown_build_option_0_5072": "Opción de compilación \"{0}\" desconocida.", - "Unknown_build_option_0_Did_you_mean_1_5077": "Opción de compilación \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", - "Unknown_compiler_option_0_5023": "Opción '{0}' del compilador desconocida.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opción del compilador \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Identificador o palabra clave desconocidos. ¿Quiso decir \"{0}\"?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opción 'excludes' desconocida. ¿Quería decir 'exclude'?", - "Unknown_regular_expression_flag_1499": "Marca de expresión regular desconocida.", - "Unknown_type_acquisition_option_0_17010": "Opción '{0}' de adquisición de tipos desconocida.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opción de adquisición de tipos \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", - "Unknown_watch_option_0_5078": "Opción de inspección \"{0}\" desconocida.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Opción de inspección \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", - "Unreachable_code_detected_7027": "Se ha detectado código inaccesible.", - "Unterminated_Unicode_escape_sequence_1199": "Secuencia de escape Unicode sin terminar.", - "Unterminated_quoted_string_in_response_file_0_6045": "Cadena entrecomillada sin terminar en el archivo de respuesta '{0}'.", - "Unterminated_regular_expression_literal_1161": "Literal de expresión regular sin terminar.", - "Unterminated_string_literal_1002": "Literal de cadena sin terminar.", - "Unterminated_template_literal_1160": "Literal de plantilla sin terminar.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Las llamadas a función sin tipo no pueden aceptar argumentos de tipo.", - "Unused_label_7028": "Etiqueta no usada.", - "Unused_ts_expect_error_directive_2578": "Directiva \"@ts-expect-error\" no usada.", - "Update_import_from_0_90058": "Actualizar importación desde “{0}”", - "Update_modifiers_of_0_90061": "Actualizar modificadores de “{0}”", - "Updating_output_timestamps_of_project_0_6359": "Actualizando las marcas de hora de salida del proyecto \"{0}\"...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Actualizando las marcas de hora de salida no modificadas del proyecto \"{0}\"...", - "Use_0_95174": "Usar `{0}`.", - "Use_0_instead_5106": "Use “{0}” en su lugar.", - "Use_Number_isNaN_in_all_conditions_95175": "Use \"Number.isNaN\" en todas las condiciones.", - "Use_element_access_for_0_95145": "Usar acceso de elemento para \"{0}\"", - "Use_element_access_for_all_undeclared_properties_95146": "Use el acceso de elemento para todas las propiedades no declaradas.", - "Use_import_type_95180": "Usar “import type”", - "Use_synthetic_default_member_95016": "Use el miembro sintético \"default\".", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use el campo “exports” de package.json al resolver las importaciones de paquetes.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use el campo “imports” de package.json al resolver importaciones.", - "Use_type_0_95181": "Usar “type {0}”", - "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subruta '{1}' con destino '{2}'.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "El uso de fragmentos JSX requiere que el generador de fragmentos \"{0}\" esté en el ámbito, pero no se encontró.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "El uso de una cadena en una instrucción \"for...of\" solo se admite en ECMAScript 5 y versiones posteriores.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Con --build, -b hará que tsc se comporte más como un orquestador de compilación que como un compilador. Se usa para desencadenar la compilación de proyectos compuestos, sobre los que puede obtener más información en {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Uso de las opciones del compilador de redireccionamiento de la referencia del proyecto \"{0}\".", - "VERSION_6036": "VERSIÓN", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "El valor de tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\". ¿Realmente quiere llamarlo?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "No se puede llamar a un valor de tipo '{0}'. ¿Pretendía incluir \"new\"?", - "Variable_0_implicitly_has_an_1_type_7005": "La variable '{0}' tiene un tipo '{1}' implícitamente.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variable \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variable \"{0}\" tiene un tipo \"{1}\" de forma implícita en algunas ubicaciones, pero se puede inferir un tipo más adecuado a partir del uso.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variable '{0}' tiene implícitamente el tipo '{1}' en algunos sitios donde no se puede determinar su tipo.", - "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' se usa antes de asignarla.", - "Variable_declaration_expected_1134": "Se esperaba una declaración de variable.", - "Variable_declaration_list_cannot_be_empty_1123": "La lista de declaraciones de variable no puede estar vacía.", - "Variable_declaration_not_allowed_at_this_location_1440": "No se permite una declaración de variable en esta ubicación.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable debe tener una anotación de tipo explícita con --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Las variables con varias declaraciones no se pueden insertar.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "El elemento variádico en la posición {0} del origen no coincide con el elemento en la posición {1} del destino.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Las anotaciones de varianza solo se admiten en alias de tipo para los tipos objeto, función, constructor y asignado.", - "Version_0_6029": "Versión {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visite https://aka.ms/ts6 para obtener información sobre la migración.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig para obtener más información acerca de este archivo", - "WATCH_OPTIONS_6918": "OPCIONES DE INSPECCIÓN", - "Watch_and_Build_Modes_6250": "Modos de compilación e inspección", - "Watch_input_files_6005": "Inspeccionar archivos de entrada.", - "Watch_option_0_requires_a_value_of_type_1_5080": "La opción \"{0}\" de inspección requiere un valor de tipo {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Solo se puede escribir un tipo para '{0}' agregando aquí un tipo para todo el parámetro.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Al asignar funciones, compruebe que efectivamente los parámetros y los valores devueltos son compatibles con el subtipo.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Al comprobar tipos, tenga en cuenta \"null\" y \"undefined\".", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Si se debe mantener la salida de la consola no actualizada en el modo de inspección en lugar de borrar la pantalla.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos los caracteres no válidos en un contenedor de expresiones", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Incluir todas las expresiones de decorador no válidas entre paréntesis", - "Wrap_all_object_literal_with_parentheses_95116": "Encapsular todos los literales de objeto entre paréntesis", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Encapsular todos los JSX no primarios en el fragmento de JSX", - "Wrap_in_JSX_fragment_95120": "Ajustar en fragmento de JSX", - "Wrap_in_parentheses_95194": "Incluir entre paréntesis", - "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular el carácter no válido en un contenedor de expresiones", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Encapsular el cuerpo siguiente entre paréntesis, lo cual debe ser un literal de objeto", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Puede obtener información sobre todas las opciones del compilador en {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "No se puede cambiar el nombre de un módulo mediante una importación global.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "No se puede cambiar el nombre de los elementos definidos en una carpeta 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "No se puede cambiar el nombre de los elementos definidos en otra carpeta 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "No se puede cambiar el nombre de elementos definidos en la biblioteca TypeScript estándar.", - "You_cannot_rename_this_element_8000": "No se puede cambiar el nombre a este elemento.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" no acepta suficientes argumentos para utilizarse como decorador aquí. ¿Pretendía llamar primero y escribir \"@{0}()\"?", - "_0_and_1_index_signatures_are_incompatible_2330": "Las signaturas de índice \"{0}\" y \"{1}\" no son compatibles.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Las operaciones \"{0}\" y \"{1}\" no se pueden mezclar sin paréntesis.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" se especifica dos veces. El atributo denominado \"{0}\" se sobrescribirá.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "“{0}” al final de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "“{0}” al principio de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" solo se puede importar si se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" solo se puede importar si se usa una importación predeterminada.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o una importación predeterminada.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o una importación predeterminada.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", - "_0_cannot_be_used_as_a_JSX_component_2786": "No se puede usar \"{0}\" como componente JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "No se puede usar \"{0}\" como valor porque se exportó mediante \"export type\".", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "No se puede usar \"{0}\" como valor porque se importó mediante \"import type\".", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Los componentes \"{0}\" no aceptan el texto como elemento secundario. El texto de JSX tiene el tipo \"string\", pero el tipo que se esperaba de \"{1}\" es \"{2}\".", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Puede crearse una instancia de \"{0}\" con un tipo arbitrario que podría no estar relacionado con \"{1}\".", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Las declaraciones “{0}” solo se pueden declarar dentro de un bloque.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Las declaraciones \"{0}\" solo se pueden usar en los archivos TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "Las declaraciones “{0}” no pueden tener patrones de enlace.", - "_0_declarations_must_be_initialized_1155": "Las declaraciones “{0}” deben inicializarse.", - "_0_expected_1005": "Se esperaba '{0}'.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}” tiene un tipo de cadena, pero debe tener sintaxis de cadena reconocible sintácticamente cuando “isolatedModules” está habilitado.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" no tiene ningún miembro exportado con el nombre \"{1}\". ¿Pretendía usar \"{2}\"?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" tiene un tipo de valor devuelto \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a este directa o indirectamente en una de sus expresiones return.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo y se hace referencia a este directa o indirectamente en su propio inicializador.", - "_0_index_signatures_are_incompatible_2634": "Las signaturas de índice \"{0}\" no son compatibles.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "El tipo de índice \"{0}\"' \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' es un elemento primitivo, pero '{1}' es un objeto contenedor. Use '{0}' preferentemente cuando sea posible.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' es un tipo y no se puede importar en archivos JavaScript. Use '{1}' en una anotación de tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}” es un tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' es un cambio de nombre de '{1}' sin usar. ¿Quería usarlo como una anotación de tipo?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" puede asignarse a la restricción de tipo \"{1}\", pero no se pudo crear una instancia de \"{1}\" con un subtipo distinto de la restricción \"{2}\".", - "_0_is_automatically_exported_here_18044": "'{0}' se exporta automáticamente aquí.", - "_0_is_declared_but_its_value_is_never_read_6133": "Se declara \"{0}\", pero su valor no se lee nunca.", - "_0_is_declared_but_never_used_6196": "\"{0}\" se declara pero nunca se utiliza.", - "_0_is_declared_here_2728": "\"{0}\" se declara aquí.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" se define como propiedad en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como descriptor de acceso.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" se define como descriptor de acceso en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como propiedad de instancia.", - "_0_is_deprecated_6385": "\"{0}\" está en desuso.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" no es una propiedad Meta válida para la palabra clave \"{1}\". ¿Pretendía usar \"{2}\"?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "No se permite “{0}” como nombre de parámetro.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "No se permite \"{0}\" como nombre de declaración de variable.", - "_0_is_of_type_unknown_18046": "\"{0}\" es de tipo \"unknown\".", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "\"{0}\" es posiblemente \"null\".", - "_0_is_possibly_null_or_undefined_18049": "\"{0}\" es posiblemente \"null\" o \"undefined\".", - "_0_is_possibly_undefined_18048": "\"{0}\" es posiblemente \"undefined\".", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Se hace referencia a '{0}' directa o indirectamente en su propia expresión base.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Se hace referencia a '{0}' directa o indirectamente en su propia anotación de tipo.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" se ha especificado más de una vez, por lo que se sobrescribirá este uso.", - "_0_list_cannot_be_empty_1097": "La lista '{0}' no puede estar vacía.", - "_0_modifier_already_seen_1030": "El modificador '{0}' ya se ha visto.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una clase, interfaz o alias de tipo", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una función, método o clase", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "El modificador '{0}' no puede aparecer en una declaración de constructor.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "El modificador '{0}' no puede aparecer en un módulo o un elemento de espacio de nombres.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "El modificador '{0}' no puede aparecer en un parámetro.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "El modificador '{0}' no puede aparecer en un miembro de tipo.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "El modificador “{0}” no puede aparecer en un parámetro de tipo", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "El modificador “{0}” no puede aparecer en una declaración “using”.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "El modificador “{0}” no puede aparecer en una declaración “await using”.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "El modificador '{0}' no puede aparecer en una signatura de índice.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "El modificador \"{0}\" no puede aparecer en elementos de clase de este tipo.", - "_0_modifier_cannot_be_used_here_1042": "El modificador '{0}' no se puede usar aquí.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "El modificador '{0}' no se puede usar en un contexto de ambiente.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "El modificador '{0}' no se puede usar con el modificador '{1}'.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "El modificador \"{0}\" no se puede usar con un identificador privado.", - "_0_modifier_must_precede_1_modifier_1029": "El modificador \"{0}\" debe preceder al modificador \"{1}\".", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}” debe ir seguido de una expresión de valor de propiedad Unicode entre llaves.", - "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" necesita una anotación de tipo explícito.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' solo hace referencia a un tipo, pero aquí se usa como espacio de nombres.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' solo hace referencia a un tipo, pero aquí se usa como valor.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" solo hace referencia a un tipo, pero aquí se usa como valor. ¿Pretendía usar \"{1} en {0}\"?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" solo hace referencia a un tipo, pero aquí se usa como valor. ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a es2015 o posterior.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' hace referencia a un elemento UMD global, pero el archivo actual es un módulo. Puede agregar una importación en su lugar.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" hace referencia a un valor, pero aquí se usa como tipo. ¿Quiso decir \"typeof {0}\"?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}” se resuelve en una declaración de solo tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}” se resuelve como una declaración de solo tipo y debe volverse a exportar con un tipo de reexportación solo cuando esté habilitada la opción “{1}”.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" debe establecerse dentro del objeto \"compilerOptions\" del archivo .json de configuración", - "_0_tag_already_specified_1223": "La etiqueta '{0}' ya se ha especificado.", - "_0_was_also_declared_here_6203": "\"{0}\" también se ha declarado aquí.", - "_0_was_exported_here_1377": "\"{0}\" se ha exportado aquí.", - "_0_was_imported_here_1376": "\"{0}\" se ha importado aquí.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}' carece de una anotación de tipo de valor devuelto, pero tiene un tipo de valor devuelto '{1}' implícitamente.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" carece de una anotación de tipo de valor devuelto, pero tiene un tipo yield \"{1}\" de forma implícita.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "El modificador 'abstract' solo puede aparecer en una declaración de propiedad, clase o método.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "El modificador 'accessor' solo puede aparecer en una declaración de propiedad.", - "and_here_6204": "y aquí.", - "and_npm_install_D_types_Slashnode_6290": "y npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "No se puede hacer referencia a \"arguments\" en inicializadores de propiedades o en bloques de inicialización estática de clase.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trate los archivos con importaciones, exportaciones, import.meta, jsx (con jsx: react-jsx) o formato esm (con el módulo: node16+) como módulos.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "La expresión “await” no se puede usar dentro de un bloque estático de clase.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Las expresiones \"await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Las expresiones \"await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Las expresiones \"await\" no se pueden usar en un inicializador de parámetros.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" no tiene efecto en el tipo de esta expresión.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "No se permiten declaraciones \"await using\" en contextos de ambiente.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Las declaraciones \"await using\" no se permiten en las cláusulas \"case\" o \"default\", a menos que estén contenidas en un bloque.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Las declaraciones “await using” solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Las declaraciones “await using” solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Las instrucciones “await using” no se pueden usar dentro de un bloque estático de clase.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "La opción \"baseUrl\" está establecida en \"{0}\", se usará este valor para resolver el nombre de módulo no relativo \"{1}\".", - "c_must_be_followed_by_an_ASCII_letter_1512": "“\\c” debe ir seguido de una letra ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" solo se puede usar al principio de un archivo.", - "case_or_default_expected_1130": "Se esperaba \"case\" o \"default\".", - "catch_or_finally_expected_1472": "se esperaba \"catch\" o \"finally\".", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor no finito.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor \"NaN\" no permitido.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Los inicializadores de miembro de enumeración const deben ser expresiones constantes.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Las enumeraciones \"const\" solo se pueden usar en expresiones de acceso de propiedad o índice, o en la parte derecha de una declaración de importación, una asignación de exportación o una consulta de tipo.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "El elemento \"constructor\" no se puede usar como nombre de propiedad de parámetro.", - "constructor_is_a_reserved_word_18012": "\"#constructor\" es una palabra reservada.", - "default_Colon_6903": "predeterminadas:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "No se puede llamar a \"delete\" en un identificador en modo strict.", - "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" no vuelve a exportar una exportación predeterminada.", - "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" solo se puede usar en los archivos TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "El modificador 'export' no se puede aplicar a módulos de ambiente ni aumentos de módulos, porque siempre están visibles.", - "extends_clause_already_seen_1172": "La cláusula \"extends\" ya se ha visto.", - "extends_clause_must_precede_implements_clause_1173": "La cláusula \"extends\" debe preceder a la cláusula \"implements\".", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La cláusula \"extends\" de la clase \"{0}\" exportada tiene o usa el nombre privado \"{1}\".", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La cláusula \"extends\" de la clase exportada tiene o usa el nombre privado \"{0}\".", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La cláusula \"extends\" de la interfaz \"{0}\" exportada tiene o usa el nombre privado \"{1}\".", - "false_unless_checkJs_is_set_6932": "`false`, a menos que se establezca `checkJs`", - "false_unless_composite_is_set_6906": "\"false\", a menos que se establezca \"composite\"", - "file_6025": "archivo", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Los bucles \"for await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Los bucles \"for await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Los bucles “for await” no se pueden usar dentro de un bloque estático de clase.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Los descriptores de acceso \"get\" y \"set\" no pueden declarar parámetros \"this\".", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", si se especifica \"archivos\"; de lo contrario, \"[\"**/*\"]\"", - "implements_clause_already_seen_1175": "La cláusula \"implements\" ya se ha visto.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Las cláusulas \"implements\" solo se pueden usar en los archivos TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" solo se puede usar en los archivos TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Las declaraciones \"infer\" solo se permiten en la cláusula \"extends\" de un tipo condicional.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "“\\k” debe ir seguido de un nombre de grupo de captura entre corchetes angulares.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "No se permite usar \"let\" como nombre en las declaraciones \"let\" o \"const\".", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "La expresión \"new\", a cuyo destino le falta una signatura de construcción, tiene implícitamente un tipo \"any\".", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", más el valor de \"outDir\", si se especifica uno.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext` si `module` es `nodenext`; `node16` si `module` es `node16` o `node18`; de lo contrario, `bundler`.", - "one_of_Colon_6900": "uno de:", - "one_or_more_Colon_6901": "uno o más:", - "options_6024": "Opciones", - "or_JSX_element_expected_1145": "Se esperaba \"{\" o un elemento JSX.", - "or_expected_1144": "Se esperaba \"{\" o \";\".", - "package_json_does_not_have_a_0_field_6100": "\"package.json\" no tiene un campo \"{0}\".", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "El archivo \"package.json\" no tiene ninguna entrada \"typesVersions\" que coincida con la versión \"{0}\".", - "package_json_had_a_falsy_0_field_6220": "El archivo \"package.json\" tenía un campo \"{0}\" false.", - "package_json_has_0_field_1_that_references_2_6101": "'package.json' tiene el campo '{1}' de '{0}' que hace referencia a '{2}'.", - "package_json_has_a_peerDependencies_field_6281": "“package.json” tiene un campo “peerDependencies”.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que no es un intervalo de SemVer válido.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que coincide con la versión del compilador \"{1}\"; se busca un patrón que coincida con el nombre de módulo \"{2}\".", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "El archivo \"package.json\" tiene un campo \"typesVersions\" con asignaciones de ruta de acceso específicas de la versión.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "El ámbito de búsqueda package.json scope \"{0}\" asigna explícitamente el especificador \"{1}\" a NULL.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "El ámbito package.json \"{0}\" tiene un tipo no válido para el destino del especificador \"{1}\"", - "package_json_scope_0_has_no_imports_defined_6273": "El ámbito de package.json \"{0}\" no tiene importaciones definidas.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Se ha especificado la opción 'paths'. Se buscará un patrón que coincida con el nombre de módulo '{0}'.", - "q_is_only_available_inside_character_class_1511": "“\\q” solo está disponible dentro de la clase de caracteres.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "“\\q” debe ir seguido de alternativas de cadena entre llaves.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "El modificador 'readonly' solo puede aparecer en una declaración de propiedad o una signatura de índice.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "El modificador de tipo \"readonly\" solo se permite en los tipos literales de matriz y de tupla.", - "require_call_may_be_converted_to_an_import_80005": "La llamada a \"require\" puede convertirse en una importación.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" solo se puede establecer para importaciones solamente de tipo.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" es la única clave válida para las aserciones de importación de tipos.", - "resolution_mode_should_be_either_require_or_import_1453": "\"modo de resolución\" debe ser \"requerir\" o \"importar\".", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Se ha establecido la opción \"rootDirs\". Se usará para resolver el nombre de módulo relativo \"{0}\".", - "super_can_only_be_referenced_in_a_derived_class_2335": "Solo se puede hacer referencia a \"super\" en una clase derivada.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Solo se puede hacer referencia a 'super' en miembros de clases derivadas o expresiones de literal de objeto.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "No se puede hacer referencia a \"super\" en un nombre de propiedad calculada.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "No se puede hacer referencia a \"super\" en argumentos de constructor.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' se permite únicamente en miembros de expresiones de literal de objeto cuando la opción 'target' es 'ES2015' o superior.", - "super_may_not_use_type_arguments_2754": "\"super\" no puede usar argumentos de tipo.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Debe llamarse a \"super\" antes de acceder a una propiedad de \"super\" en el constructor de una clase derivada.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Debe llamarse a 'super' antes de acceder a 'this' en el constructor de una clase derivada.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "\"super\" debe estar seguido de una lista de argumentos o un acceso a miembros.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "El acceso a la propiedad \"super\" se permite únicamente en un constructor, una función miembro o un descriptor de acceso de miembro de una clase derivada.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "No se puede hacer referencia a \"this\" en un nombre de propiedad calculada.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "No se puede hace referencia a \"this\" en el cuerpo de un módulo o de un espacio de nombres.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "No se puede hacer referencia a \"this\" en un inicializador de propiedad estática.", - "this_cannot_be_referenced_in_current_location_2332": "No se puede hacer referencia a \"this\" en la ubicación actual.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' tiene el tipo implícito 'any' porque no tiene una anotación de tipo.", - "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" para ES2022 y versiones posteriores, incluido ESNext.", - "true_if_composite_false_otherwise_6909": "\"true\", si \"composite\"; \"false\", en caso contrario", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "“true” cuando “moduleResolution” es “node16”, “nodenext” o “bundler”; en caso contrario, “false”.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: el compilador de TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json está presente, pero no se cargará si se especifican archivos en la línea de comandos. Use '--ignoreConfig' para omitir este error.", - "type_Colon_6902": "tipo:", - "unique_symbol_types_are_not_allowed_here_1335": "Aquí no se permiten tipos \"unique symbol\".", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Los tipos \"unique symbol\" se permiten solo en variables en una instrucción de variable.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Los tipos \"unique symbol\" no se pueden utilizar en una declaración de variable con un nombre de enlace.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "La directiva \"use strict\" no se puede usar con una lista de parámetros no simples.", - "use_strict_directive_used_here_1349": "La directiva \"use strict\" se ha usado aquí.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "No se permiten declaraciones 'using' en contextos de ambiente.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Las declaraciones \"using\" no se permiten en las cláusulas \"case\" o \"default\", a menos que estén contenidas en un bloque.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "No se permiten instrucciones \"with\" en un bloque de funciones asincrónicas.", - "with_statements_are_not_allowed_in_strict_mode_1101": "No se permiten instrucciones \"with\" en modo strict.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "La expresión \"yield\" da como resultado un tipo \"any\" de forma implícita porque el generador que la contiene no tiene una anotación de tipo de valor devuelto.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Las expresiones \"yield\" no se pueden usar en un inicializador de parámetros." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "TODAS LAS OPCIONES DEL COMPILADOR", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Un modificador '{0}' no se puede usar con una declaración de importación.", + "A_0_parameter_must_be_the_first_parameter_2680": "El parámetro \"{0}\" debe ser el primer parámetro.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Una etiqueta \"@template\" de JSDoc no puede seguir a una etiqueta \"@typedef\", \"@callback\" u \"@overload\"", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un comentario \"@typedef\" de JSDoc no puede contener varias etiquetas \"@type\".", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "No se puede usar un literal 'bigint' como nombre de propiedad.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Un literal bigint no puede usar la notación exponencial.", + "A_bigint_literal_must_be_an_integer_1353": "Un literal bigint debe ser un entero.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parámetro de patrón de enlace no puede ser opcional en una signatura de implementación.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Una instrucción \"break\" solo se puede usar dentro de una iteración envolvente o en una instrucción switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Una instrucción \"break\" solo puede saltar a una etiqueta de una instrucción envolvente.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una clase de caracteres no debe contener un signo de puntuación doble reservado. ¿Querías escaparlo con barra diagonal inversa?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un rango de clases de caracteres no debe estar limitado por otra clase de caracteres.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una clase solo puede implementar un identificador o nombre completo con argumentos de tipo opcional.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una clase solo puede implementar un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una clase no puede extender un tipo primitivo como '{0}'. Las clases solo pueden extender valores que se puedan construir.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una clase no puede implementar un tipo primitivo como '{0}'. Solo puede implementar otros tipos de objeto con nombre.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Una declaración de clase sin el modificador \"default\" debe tener un nombre.", + "A_class_member_cannot_have_the_0_keyword_1248": "Un miembro de clase no puede tener la palabra clave '{0}'.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "No se admite una expresión de coma en un nombre de propiedad calculada.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nombre de propiedad calculada no puede hacer referencia a un parámetro de tipo desde su tipo contenedor.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nombre de propiedad calculada de una declaración de propiedad de clase debe tener un tipo de literal simple o un tipo \"unique symbol\".", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nombre de propiedad calculada en una sobrecarga de método debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nombre de propiedad calculada en un literal de tipo debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nombre de propiedad calculada en un contexto de ambiente debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nombre de propiedad calculada en una interfaz debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nombre de propiedad calculada debe ser de tipo \"string\", \"number\", \"symbol\" o \"any\".", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Las aserciones \"const\" solo pueden aplicarse a las referencias a miembros de enumeración o a literales de cadena, numéricos, booleanos, de matriz o de objeto.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Solo se puede acceder a un miembro de enumeración const mediante un literal de cadena.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un inicializador \"const\" en un contexto de ambiente debe ser un literal de cadena o numérico o bien una referencia de enumeración de literal.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un constructor no puede contener una llamada a \"super\" si su clase extiende \"null\".", + "A_constructor_cannot_have_a_this_parameter_2681": "Un constructor no puede tener un parámetro 'this'.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Una instrucción \"continue\" solo se puede usar en una instrucción de iteración envolvente.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Una instrucción \"continue\" solo puede saltar a una etiqueta de una instrucción de iteración envolvente.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "No se puede importar un archivo de declaración sin 'import type'. ¿Quería importar un archivo de implementación '{0}' en su lugar?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Un modificador \"declare\" no se puede usar en un contexto de ambiente.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un decorador solo puede modificar la implementación de un método, no una sobrecarga.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una cláusula \"default\" no puede aparecer más de una vez en una instrucción \"switch\".", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Solo se puede usar una exportación predeterminada en un módulo de estilo ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Una exportación predeterminada debe estar en el nivel superior de una declaración de módulo o archivo.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "En este contexto no se permite una aserción de asignación definitiva \"!\".", + "A_destructuring_declaration_must_have_an_initializer_1182": "Una declaración de desestructuración debe tener un inicializador.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Una llamada de importación dinámica en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una llamada de importación dinámica devuelve un valor \"Promise\". Asegúrese de que tiene una declaración para \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", + "A_file_cannot_have_a_reference_to_itself_1006": "Un archivo no puede tener una referencia a sí mismo.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una función que devuelve 'never' no puede tener un punto de conexión alcanzable.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una función a la que se llama con la palabra clave 'new' no puede tener un tipo 'this' que sea 'void'.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una función cuyo tipo declarado no es \"undefined\", \"void\" o \"any\" debe devolver un valor.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Un generador no puede tener una anotación de tipo \"void\".", + "A_get_accessor_cannot_have_parameters_1054": "Un descriptor de acceso \"get\" no puede tener parámetros.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un descriptor de acceso get debe ser al menos tan accesible como el establecedor", + "A_get_accessor_must_return_a_value_2378": "Un descriptor de acceso \"get\" debe devolver un valor.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento de tupla etiquetado se declara como opcional con un signo de interrogación después del nombre y antes de los dos puntos, en lugar de después del tipo.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento de tupla etiquetado se declara como rest con \"...\" delante del nombre, en lugar de delante del tipo.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un tipo asignado no puede declarar propiedades ni métodos.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inicializador de miembro de una declaración de enumeración no puede hacer referencia a los miembros que se declaran después de este, incluidos aquellos definidos en otras enumeraciones.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una clase mixin debe tener un constructor con un solo parámetro rest de tipo \"any[]\"", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una clase mixin que se extiende desde una variable de tipo que contiene una signatura de construcción abstracta debe declararse también como \"abstract\".", + "A_module_cannot_have_multiple_default_exports_2528": "Un módulo no puede tener varias exportaciones predeterminadas.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una declaración de espacio de nombres no puede estar en un archivo distinto de una clase o función con la que se combina.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una declaración de espacio de nombres no se puede situar antes que una clase o función con la que se combina.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una declaración de espacio de nombres solo se permite en el nivel superior de un espacio de nombres o módulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una declaración \"namespace\" no debe declararse con la palabra clave \"module\". Use la palabra clave \"namespace\" en su lugar.", + "A_non_dry_build_would_build_project_0_6357": "Una compilación no -dry compilaría el proyecto \"{0}\"", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Una compilación no -dry eliminaría los archivos siguientes: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Una compilación no -dry actualizaría las marcas de tiempo para la salida del proyecto \"{0}\".", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inicializador de parámetros solo se permite en una implementación de función o de constructor.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Una propiedad de parámetro no se puede declarar mediante un parámetro rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Una propiedad de parámetro solo se permite en una implementación de constructor.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Una propiedad de parámetro podría no declararse mediante un patrón de enlace.", + "A_promise_must_have_a_then_method_1059": "Una promesa debe tener un método \"then\".", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Una propiedad de una clase cuyo tipo sea \"unique symbol\" debe ser \"static\" y \"readonly\".", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Una propiedad de una interfaz o un literal de tipo cuyo tipo sea \"unique symbol\" debe ser \"readonly\".", + "A_required_element_cannot_follow_an_optional_element_1257": "Un elemento obligatorio no puede seguir a un elemento opcional.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parámetro obligatorio no puede seguir a un parámetro opcional.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest no puede contener un patrón de enlace.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Un elemento rest no puede seguir a otro elemento rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest no puede tener un nombre de propiedad.", + "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest no puede tener un inicializador.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest debe ser el último en un patrón de desestructuración.", + "A_rest_element_type_must_be_an_array_type_2574": "Un tipo de elemento rest debe ser un tipo de matriz.", + "A_rest_parameter_cannot_be_optional_1047": "Un parámetro rest no puede ser opcional.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Un parámetro rest no puede tener un inicializador.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un parámetro rest debe ser el último de una lista de parámetros.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Un parámetro rest debe ser de un tipo de matriz.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un parámetro rest o un patrón de enlace no pueden finalizar con una coma.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Una instrucción \"return\" solo se puede usar en el cuerpo de una función.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Una instrucción 'return' no se puede usar dentro de un bloque estático de clase.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie de entradas que reasigna las importaciones a ubicaciones de búsqueda relativas a \"baseUrl\".", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un descriptor de acceso \"set\" no puede tener una anotación de tipo de valor devuelto.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un descriptor de acceso \"set\" no puede tener un parámetro opcional.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Un descriptor de acceso \"set\" no puede tener un parámetro rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Un descriptor de acceso \"set\" debe tener exactamente un parámetro.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parámetro de descriptor de acceso \"set\" no puede tener un inicializador.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argumento de difusión debe tener un tipo de tupla o se puede pasar a un parámetro \"rest\".", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Una llamada \"super\" debe ser una instrucción de nivel raíz dentro de un constructor de una clase derivada que contiene propiedades inicializadas, propiedades de parámetros o identificadores privados.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una llamada \"super\" debe ser la primera instrucción del constructor para hacer referencia a \"super\" o \"this\" cuando una clase derivada contiene propiedades inicializadas, propiedades de parámetro o identificadores privados.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Una restricción de tipo basada en 'this' no es compatible con una restricción de tipo basada en un parámetro.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "El tipo \"this\" solo está disponible en un miembro no estático de una clase o interfaz.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "No se puede usar un modificador \"export\" de nivel superior en declaraciones de valor en un módulo CommonJS cuando \"verbatimModuleSyntax\" está habilitado.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Ya hay un archivo \"tsconfig.json\" definido en: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un miembro de tupla no puede ser tanto opcional como REST.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo de tupla no se puede indizar con un valor negativo.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "No se admite una expresión de aserción de tipo en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Una propiedad de literal de tipo no puede tener un inicializador.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Una importación solo de tipo puede especificar una importación predeterminada o enlaces con nombre, pero no ambos.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un predicado de tipo no puede hacer referencia a un parámetro rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un predicado de tipo no puede hacer referencia al elemento '{0}' de un patrón de enlace.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "En las funciones y los métodos, un predicado de tipo solo se permite en la posición de tipo de valor devuelto.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "El tipo de un predicado de tipo debe poderse asignar al tipo de su parámetro.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un tipo al que se hace referencia en una firma representativo debe importarse con \"import type\" o una importación de espacio de nombres cuando están habilitados \"isolatedModules\" y \"emitDecoratorMetadata\".", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Una variable cuyo tipo sea \"unique symbol\" debe ser \"const\".", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Una expresión \"yield\" solo se permite en un cuerpo de generador.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "No se puede acceder al método abstracto '{0}' de la clase '{1}' mediante una expresión super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Los métodos abstractos solo pueden aparecer en una clase abstracta.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Las propiedades abstractas solo pueden aparecer en una clase abstracta.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "No se puede acceder a la propiedad abstracta \"{0}\" de la clase \"{1}\" en el constructor.", + "Accessibility_modifier_already_seen_1028": "El modificador de accesibilidad ya se ha visto.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Los descriptores de acceso solo están disponibles cuando el destino es ECMAScript 5 y versiones posteriores.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Los descriptores de acceso deben ser los dos abstractos o los dos no abstractos.", + "Add_0_to_unresolved_variable_90008": "Agregar \"{0}.\" a una variable no resuelta", + "Add_a_return_statement_95111": "Agregar una instrucción \"return\"", + "Add_a_return_type_to_the_function_declaration_9031": "Agrega un tipo de valor devuelto a la declaración de función.", + "Add_a_return_type_to_the_function_expression_9030": "Agrega un tipo de valor devuelto a la expresión de función.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Agregue un tipo de valor devuelto a la declaración de get accessor.", + "Add_a_return_type_to_the_method_9034": "Agregar un tipo de valor devuelto al método", + "Add_a_type_annotation_to_the_parameter_0_9028": "Agregue una anotación de tipo al parámetro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Agregue una anotación de tipo a la propiedad {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Agregue una anotación de tipo a la variable {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Agregue un tipo al parámetro de la declaración del set accessor.", + "Add_all_missing_async_modifiers_95041": "Agregar todos los modificadores \"async\" que faltan", + "Add_all_missing_attributes_95168": "Agregar todos los atributos que faltan", + "Add_all_missing_call_parentheses_95068": "Agregar todos los paréntesis de llamada que faltan", + "Add_all_missing_function_declarations_95157": "Agregar todas las declaraciones de función que faltan", + "Add_all_missing_imports_95064": "Agregar todas las importaciones que faltan", + "Add_all_missing_members_95022": "Agregar todos los miembros que faltan", + "Add_all_missing_override_modifiers_95162": "Agregar todos los modificadores \"override\" que faltan", + "Add_all_missing_parameters_95190": "Agregar todos los parámetros que faltan", + "Add_all_missing_properties_95166": "Agregar todas las propiedades que faltan", + "Add_all_missing_return_statement_95114": "Agregar todas las instrucciones \"return\" que faltan", + "Add_all_missing_super_calls_95039": "Agregar todas las llamadas a super que faltan", + "Add_all_missing_type_annotations_90067": "Agregar todas las anotaciones de tipo que faltan", + "Add_all_optional_parameters_95193": "Agregar todos los parámetros opcionales", + "Add_annotation_of_type_0_90062": "Agregar anotación de tipo '{0}'", + "Add_async_modifier_to_containing_function_90029": "Agregar el modificador async a la función contenedora", + "Add_await_95083": "Agregar \"await\"", + "Add_await_to_initializer_for_0_95084": "Agregar \"await\" al inicializador de \"{0}\"", + "Add_await_to_initializers_95089": "Agregar \"await\" a los inicializadores", + "Add_braces_to_arrow_function_95059": "Agregar llaves a la función de flecha", + "Add_const_to_all_unresolved_variables_95082": "Agregar \"const\" a todas las variables no resueltas", + "Add_const_to_unresolved_variable_95081": "Agregar \"const\" a la variable no resuelta", + "Add_definite_assignment_assertion_to_property_0_95020": "Agregar aserción de asignación definitiva a la propiedad \"{0}\"", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Agregar aserciones de asignación definitiva a todas las propiedades sin inicializar", + "Add_export_to_make_this_file_into_a_module_95097": "Agregar \"export {}\" para transformar este archivo en un módulo", + "Add_extends_constraint_2211": "Agregar restricción \"extends\".", + "Add_extends_constraint_to_all_type_parameters_2212": "Agregar restricción \"extends\" a todos los parámetros de tipo", + "Add_import_from_0_90057": "Agregar importación desde “{0}”", + "Add_index_signature_for_property_0_90017": "Agregar una signatura de índice para la propiedad \"{0}\"", + "Add_initializer_to_property_0_95019": "Agregar inicializador a la propiedad \"{0}\"", + "Add_initializers_to_all_uninitialized_properties_95027": "Agregar inicializadores a todas las propiedades sin inicializar", + "Add_missing_attributes_95167": "Agregar los atributos que faltan", + "Add_missing_call_parentheses_95067": "Agregar los paréntesis de llamada que faltan", + "Add_missing_comma_for_object_member_completion_0_95187": "Agregue la coma que falta para el '{0}' de finalización del miembro del objeto.", + "Add_missing_enum_member_0_95063": "Agregar el miembro de enumeración \"{0}\" que falta", + "Add_missing_function_declaration_0_95156": "Agregar la declaración de función \"{0}\" que falta", + "Add_missing_new_operator_to_all_calls_95072": "Agregar el operador \"new\" que falta a todas las llamadas", + "Add_missing_new_operator_to_call_95071": "Agregar el operador \"new\" que falta a la llamada", + "Add_missing_parameter_to_0_95188": "Agregar parámetro que falta a '{0}'", + "Add_missing_parameters_to_0_95189": "Agregar parámetros que faltan a '{0}'", + "Add_missing_properties_95165": "Agregar propiedades que faltan", + "Add_missing_super_call_90001": "Agregar la llamada a \"super()\" que falta", + "Add_missing_typeof_95052": "Agregar el elemento \"typeof\" que falta", + "Add_names_to_all_parameters_without_names_95073": "Agregar nombres a todos los parámetros sin nombres", + "Add_optional_parameter_to_0_95191": "Agregar parámetro opcional a \"{0}\"", + "Add_optional_parameters_to_0_95192": "Agregar parámetros opcionales a \"{0}\"", + "Add_or_remove_braces_in_an_arrow_function_95058": "Agregar o quitar llaves en una función de flecha", + "Add_override_modifier_95160": "Agregar el modificador \"override\"", + "Add_parameter_name_90034": "Agregar un nombre de parámetro", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Agregar un calificador a todas las variables no resueltas que coincidan con un nombre de miembro", + "Add_resolution_mode_import_attribute_95196": "Agregar atributo de importación \"resolution-mode\"", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Agregar el atributo de importación \"resolution-mode\" a todas las importaciones de solo tipo que lo necesiten", + "Add_return_type_0_90063": "Agregar tipo de valor devuelto '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Agregue satisfacciones y una aserción de tipo a esta expresión (satisfacciones T como T) para que el tipo sea explícito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Agregar satisfacciones y una aserción de tipo insertado con '{0}'", + "Add_to_all_uncalled_decorators_95044": "Agregar \"()\" a todos los elementos Decorator a los que no se llama", + "Add_ts_ignore_to_all_error_messages_95042": "Agregar \"@ts-ignore\" a todos los mensajes de error", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Agregue \"indefinido\" a un tipo cuando se acceda mediante un índice.", + "Add_undefined_to_optional_property_type_95169": "Agregar 'undefined' al tipo de propiedad opcional", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Agregar un tipo no definido a todas las propiedades sin inicializar", + "Add_undefined_type_to_property_0_95018": "Agregar un tipo \"undefined\" a la propiedad \"{0}\"", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Agregar una conversión \"unknown\" para los tipos que no se superponen", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Agregar \"unknown\" a todas las conversiones de tipos que no se superponen", + "Add_void_to_Promise_resolved_without_a_value_95143": "Agregar \"void\" a la instancia de Promise resuelta sin un valor", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Agregar \"void\" a todas las instancias de Promise resueltas sin un valor", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Agregar un archivo tsconfig.json ayuda a organizar los proyectos que contienen archivos TypeScript y JavaScript. Más información en https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Todas las declaraciones de \"{0}\" deben tener delimitaciones idénticas.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas las declaraciones de '{0}' deben tener modificadores idénticos.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas las declaraciones de '{0}' deben tener parámetros de tipo idénticos.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas las declaraciones de un método abstracto deben ser consecutivas.", + "All_destructured_elements_are_unused_6198": "Todos los elementos desestructurados están sin utilizar.", + "All_imports_in_import_declaration_are_unused_6192": "Todas las importaciones de la declaración de importación están sin utilizar.", + "All_type_parameters_are_unused_6205": "Ninguno de los parámetros de tipo se usa.", + "All_variables_are_unused_6199": "Todas las variables son no utilizadas.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Permitir que los archivos JavaScript formen parte del programa. Use la opción \"checkJS\" para obtener errores de estos archivos.", + "Allow_accessing_UMD_globals_from_modules_6602": "Permite el acceso a las bibliotecas globales de UMD desde los módulos.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permitir las importaciones predeterminadas de los módulos sin exportación predeterminada. Esto no afecta a la emisión de código, solo a la comprobación de tipos.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permita \"importar x desde y\" cuando un módulo no tiene una exportación predeterminada.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permita la importación de funciones de ayuda desde tslib una vez por proyecto, en lugar de incluirlas por archivo.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que las importaciones incluyan extensiones de archivo TypeScript. Requiere que se establezca \"--moduleResolution bundler\" y \"--noEmit\" o \"--emitDeclarationOnly\".", + "Allow_javascript_files_to_be_compiled_6102": "Permitir que se compilen los archivos de JavaScript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permita que varias carpetas se consideren como una al resolver módulos.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "El nombre de archivo \"{0}\" ya incluido es diferente del nombre de archivo \"{1}\" solo en el uso de mayúsculas y minúsculas.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "La declaración de módulo de ambiente no puede especificar un nombre de módulo relativo.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Los módulos de ambiente no se pueden anidar en otros módulos o espacios de nombres.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un módulo AMD no puede tener varias asignaciones de nombre.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Un descriptor de acceso abstracto no puede tener una implementación.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "No se puede usar un modificador de accesibilidad con un identificador privado.", + "An_accessor_cannot_have_type_parameters_1094": "Un descriptor de acceso no puede tener parámetros de tipo.", + "An_accessor_property_cannot_be_declared_optional_1276": "Una propiedad 'accessor' no se puede declarar como opcional.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una declaración de módulo de ambiente solo se permite en el nivel superior de un archivo.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "No se proporcionó ningún argumento para \"{0}\".", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "No se proporcionó ningún argumento que coincida con este patrón de enlace.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmético debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Una función de flecha no puede tener un parámetro \"this\".", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Una función o un método de asincronía en ES5 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Una función o un método asincrónico debe devolver un \"Promise\". Asegúrese de que tiene una declaración \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".", + "An_async_iterator_must_have_a_next_method_2519": "Un iterador de asincronía debe tener un método \"next()\".", + "An_element_access_expression_should_take_an_argument_1011": "Una expresión de acceso de elemento debe admitir un argumento.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "No se puede denominar un miembro de enumeración con un identificador privado.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Un miembro de enumeración no puede tener un nombre numérico.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "El nombre de un miembro de enumeración debe ir seguido de \",\", \"=\" o \"}\".", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Una versión expandida de esta información, que muestra todas las opciones posibles del compilador", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Una asignación de exportación no se puede usar en un módulo con otros elementos exportados.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Una asignación de exportación no se puede usar en espacios de nombres.", + "An_export_assignment_cannot_have_modifiers_1120": "Una asignación de exportación no puede tener modificadores.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Una asignación de exportación debe estar en el nivel superior de una declaración de módulo o archivo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una declaración de exportación solo se puede usar en el nivel superior de un módulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una declaración de exportación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", + "An_export_declaration_cannot_have_modifiers_1193": "Una declaración de exportación no puede tener modificadores.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Una declaración \"export =\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Una declaración 'export =' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Una declaración \"export default\" debe hacer referencia a un valor real cuando \"verbatimModuleSyntax\" está habilitado, pero '{0}' se resuelve en una declaración de solo tipo.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Una declaración 'export default' debe hacer referencia a un valor cuando 'verbatimModuleSyntax' está habilitado, pero '{0}' solo hace referencia a un tipo.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "No se puede probar la veracidad de una expresión de tipo \"void\".", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valor de escape Unicode extendido debe estar entre 0x0 y 0x10FFFF, incluidos.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificador o una palabra clave no puede seguir inmediatamente a un literal numérico.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Una implementación no se puede declarar en contextos de ambiente.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias de importación no puede hacer referencia a una declaración que se exportó mediante \"export type\".", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias de importación no puede hacer referencia a una declaración que se importó mediante \"import type\".", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias de importación no se puede resolver en una declaración de tipo o solo tipo cuando \"verbatimModuleSyntax\" está habilitado.", + "An_import_alias_cannot_use_import_type_1392": "Un alias de importación no puede usar \"import type\"", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una declaración de importación solo se puede usar en el nivel superior de un módulo.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una declaración de importación solo se puede usar en el nivel superior de un espacio de nombres o módulo.", + "An_import_declaration_cannot_have_modifiers_1191": "Una declaración de importación no puede tener modificadores.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Una ruta de acceso de importación solo puede terminar con una extensión '{0}' cuando \"allowImportingTsExtensions\" está habilitado.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Una signatura de índice no puede tener un parámetro rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Una signatura de índice no puede finalizar con una coma.", + "An_index_signature_must_have_a_type_annotation_1021": "Una signatura de índice debe tener una anotación de tipo.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Una signatura de índice debe tener exactamente un parámetro.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un parámetro de signatura de índice no puede tener un signo de interrogación.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parámetro de signatura de índice no puede tener un modificador de accesibilidad.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parámetro de signatura de índice no puede tener un inicializador.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parámetro de signatura de índice debe tener una anotación de tipo.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo de parámetro de signatura de índice no puede ser un tipo literal o un tipo genérico. Considere la posibilidad de usar, en su lugar, uno de los tipos de objeto asignados.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "El tipo de parámetro de la signatura de índice debe ser \"string\", \"number\", \"symbol\" o un tipo literal de plantilla.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Una expresión de creación de una instancia no puede ir seguida de un acceso a una propiedad.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Una interfaz solo puede extender un identificador o nombre completo con argumentos de tipo opcional.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Una interfaz no puede extender un tipo primitivo como '{0}'. Solo puede extender otros tipos de objeto con nombre.", + "An_interface_property_cannot_have_an_initializer_1246": "Una propiedad de interfaz no puede tener un inicializador.", + "An_iterator_must_have_a_next_method_2489": "Un iterador debe tener un método \"next()\".", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Se necesita una pragma @jsxFrag cuando se usa una pragma @jsx con fragmentos de JSX.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un literal de objeto no puede tener varios descriptores de acceso get o set con el mismo nombre.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un literal de objeto no puede tener varias propiedades con el mismo nombre.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un literal de objeto no puede tener una propiedad y un descriptor de acceso con el mismo nombre.", + "An_object_member_cannot_be_declared_optional_1162": "Un miembro de objeto no se puede declarar como opcional.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "El método '[Symbol.hasInstance]' de un objeto debe devolver un valor booleano para que se use en el lado derecho de una expresión \"instanceof\".", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Una cadena opcional no puede contener identificadores privados.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Un elemento opcional no puede seguir a un elemento rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Este contenedor reemplaza un valor externo de \"this\".", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Una signatura de sobrecarga no se puede declarar como generador.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "No se admite una expresión unaria con el operador '{0}' en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.", + "Annotate_everything_with_types_from_JSDoc_95043": "Anotar todo con tipos de JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propiedades de función expando en un espacio de nombres", + "Annotate_with_type_from_JSDoc_95009": "Anotar con tipo de JSDoc", + "Another_export_default_is_here_2753": "Aquí hay otro valor export default.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Cualquier propiedad Unicode que posiblemente coincida con más de un carácter solo está disponible cuando se establece la marca Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Todo lo que posiblemente coincida con más de un carácter no es válido dentro de una clase de caracteres negada.", + "Are_you_missing_a_semicolon_2734": "¿Falta un punto y coma?", + "Argument_expression_expected_1135": "Se esperaba una expresión de argumento.", + "Argument_for_0_option_must_be_Colon_1_6046": "El argumento para la opción \"{0}\" debe ser {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "El argumento de importación dinámica no puede ser un elemento de propagación.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "No se puede asignar un argumento de tipo \"{0}\" al parámetro de tipo \"{1}\".", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "El argumento de tipo '{0}' no se puede asignar al parámetro de tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "No se proporcionaron argumentos para el parámetro rest \"{0}\".", + "Array_element_destructuring_pattern_expected_1181": "Se esperaba un patrón de desestructuración de elementos de matriz.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Las matrices con elementos spread no se pueden inferir con --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Las aserciones requieren que todos los nombres del destino de llamada se declaren con una anotación de tipo explícito.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Las aserciones requieren que el destino de llamada sea un identificador o un nombre calificado.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "No se admite la asignación de propiedades a funciones sin declararlas con --isolatedDeclarations. Agregue una declaración explícita para las propiedades asignadas a esta función.", + "Asterisk_Slash_expected_1010": "Se esperaba \"*/\".", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Al menos un descriptor de acceso debe tener una anotación de tipo explícita con --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Los aumentos del ámbito global solo pueden anidarse directamente en módulos externos o en declaraciones de módulos de ambiente.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Los aumentos del ámbito global deben tener el modificador 'declare', a menos que aparezcan en un contexto de ambiente.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La detección automática de escritura está habilitada en el proyecto '{0}'. Se va a ejecutar un paso de resolución extra para el módulo '{1}' usando la ubicación de caché '{2}'.", + "BUILD_OPTIONS_6919": "OPCIONES DE COMPILACIÓN", + "Backwards_Compatibility_6253": "Compatibilidad con versiones anteriores", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Las expresiones de clase base no pueden hacer referencia a parámetros de tipo de clase.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "El tipo de valor devuelto del constructor base \"{0}\" no es un tipo de objeto ni una intersección de tipos de objeto con miembros conocidos estáticamente.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Todos los constructores base deben tener el mismo tipo de valor devuelto.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Directorio base para resolver nombres de módulos no absolutos.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Los literales BigInt no están disponibles cuando el destino es anterior a ES2020.", + "Binary_digit_expected_1177": "Se esperaba un dígito binario.", + "Binding_element_0_implicitly_has_an_1_type_7031": "El elemento de enlace '{0}' tiene un tipo '{1}' implícito.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable con ámbito de bloque '{0}' usada antes de su declaración.", + "Build_a_composite_project_in_the_working_directory_6925": "Compile un proyecto compuesto en el directorio de trabajo.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos los proyectos, incluidos los que aparecen actualizados.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Generar uno o varios proyectos y sus dependencias, si no están actualizados", + "Build_option_0_requires_a_value_of_type_1_5073": "La opción de compilación \"{0}\" requiere un valor de tipo {1}.", + "Building_project_0_6358": "Compilando el proyecto \"{0}\"...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Se crea una instancia de los iteradores integrados con un tipo 'TReturn' de 'undefined' en lugar de 'any'.", + "COMMAND_LINE_FLAGS_6921": "MARCAS DE LÍNEA DE COMANDOS", + "COMMON_COMMANDS_6916": "COMANDOS COMUNES", + "COMMON_COMPILER_OPTIONS_6920": "OPCIONES COMUNES DEL COMPILADOR", + "Call_decorator_expression_90028": "Llamar a la expresión decorador", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Los tipos de valor devuelto de la signatura de llamada \"{0}\" y \"{1}\" son incompatibles.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signatura de llamada, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Las signaturas de llamada sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.", + "Call_target_does_not_contain_any_signatures_2346": "El destino de llamada no contiene signaturas.", + "Can_only_convert_logical_AND_access_chains_95142": "Solo pueden convertirse las cadenas lógicas Y de acceso", + "Can_only_convert_named_export_95164": "Solo se pueden convertir exportaciones con nombre.", + "Can_only_convert_property_with_modifier_95137": "Solo se puede convertir la propiedad con el modificador", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Solo se pueden convertir concatenaciones de cadenas y literales de cadena", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "No se puede acceder a \"{0}.{1}\" porque \"{0}\" es un tipo, no un espacio de nombres. ¿Su intención era recuperar el tipo de la propiedad \"{1}\" en \"{0}\" con \"{0}[\"{1}\"]\"?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "No se puede obtener acceso a '{0}' desde otro archivo sin calificación cuando '{1}' está habilitado. Use \"{2}\" en su lugar.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "No se puede tener acceso a las enumeraciones const de ambiente cuando '{0}' está habilitado.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "No se puede asignar un tipo de constructor '{0}' a un tipo de constructor '{1}'.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "No se puede asignar un tipo de constructor abstracto a uno no abstracto.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "No se puede asignar a \"{0}\" porque es una clase.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "No se puede asignar a \"{0}\" porque es una constante.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "No se puede asignar a \"{0}\" porque es una función.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "No se puede asignar a \"{0}\" porque es un espacio de nombres.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "No se puede asignar a \"{0}\" porque es una propiedad de solo lectura.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "No se puede asignar a '{0}' porque es una enumeración.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "No se puede asignar a '{0}' porque es una importación.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "No se puede asignar a '{0}' porque no es una variable.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "No se puede asignar al método privado \"{0}\". No se puede escribir en los métodos privados.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "No se puede aumentar el módulo '{0}' porque se resuelve como una entidad que no es un módulo.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "No se puede aumentar el módulo \"{0}\" con exportaciones de valores porque se resuelve como una entidad que no es un módulo.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "No se pueden compilar los módulos con la opción '{0}' a no ser que la marca \"--module\" sea \"amd\" o \"system\".", + "Cannot_create_an_instance_of_an_abstract_class_2511": "No se puede crear una instancia de una clase abstracta.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "No se puede delegar la iteración en un valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero el generador que lo contiene siempre enviará \"{0}\".", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "No se puede exportar '{0}'. Solo se pueden exportar declaraciones locales desde un módulo.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "No se puede extender una clase '{0}'. El constructor de la clase está marcado como privado.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "No se puede extender una interfaz '{0}'. ¿Quiso decir 'implements'?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "No se encuentra ningún archivo tsconfig.json en el directorio actual: {0}", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "No se encuentra ningún archivo tsconfig.json en el directorio especificado: \"{0}\".", + "Cannot_find_global_type_0_2318": "No se encuentra el tipo '{0}' global.", + "Cannot_find_global_value_0_2468": "No se encuentra el valor '{0}' global.", + "Cannot_find_lib_definition_for_0_2726": "No se encuentra la definición lib para \"{0}\".", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "No se encuentra la definición lib para \"{0}\". ¿Quiso decir \"{1}\"?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "No se encuentra el módulo \"{0}\". Considere la posibilidad de usar \"--resolveJsonModule\" para importar el módulo con la extensión \".json\".", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "No se encuentra el módulo “{0}”. ¿Pretendía establecer la opción “moduleResolution” en “nodenext” o agregar alias a la opción “paths”?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "No se encuentra el módulo \"{0}\" ni sus declaraciones de tipos correspondientes.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "No se pueden encontrar declaraciones de módulo o tipo para la importación de efectos secundarios de ''{0}\".", + "Cannot_find_name_0_2304": "No se encuentra el nombre '{0}'.", + "Cannot_find_name_0_Did_you_mean_1_2552": "No se encuentra el nombre \"{0}\". ¿Quería decir \"{1}\"?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "No se encuentra el nombre '{0}'. ¿Quería decir el miembro de instancia 'this.{0}'?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "No se encuentra el nombre '{0}'. ¿Quería decir el miembro estático '{1}.{0}'?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "No se puede encontrar el nombre \"{0}\". ¿Ha querido escribir esto en una función asincrónica?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{1}\" o posterior.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" para incluir \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "No se encuentra el nombre '{0}'. ¿Necesita instalar definiciones de tipo para Bun? Pruebe \"npm i --save-dev @types/bun\" y agregue \"bun\" al campo de tipos de tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un ejecutor de pruebas? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un test runner? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\" y, a continuación, agregue \"jest\" o \"mocha\" al campo de tipos del archivo tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\" y, a continuación, agregue \"jquery\" al campo de tipos del archivo tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para el nodo? Pruebe \"npm i --save-dev @types/node\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para el nodo? Pruebe \"npm i --save-dev @types/node\" y, a continuación, agregue \"node\" al campo de tipos del archivo tsconfig.", + "Cannot_find_namespace_0_2503": "No se encuentra el espacio de nombres '{0}'.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "No se encuentra el espacio de nombres \"{0}\". ¿Quería decir \"{1}\"?", + "Cannot_find_parameter_0_1225": "No se encuentra el parámetro '{0}'.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "No se encuentra la ruta de acceso de subdirectorio común para los archivos de entrada.", + "Cannot_find_type_definition_file_for_0_2688": "No se puede encontrar el archivo de definición de tipo para '{0}'.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "No se pueden importar archivos de declaración de tipos. Considere importar \"{0}\" en lugar de \"{1}\".", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "No se puede inicializar la variable '{0}' de ámbito externo en el mismo ámbito que la declaración '{1}' con ámbito de bloque.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "No se puede invocar un objeto que es posiblemente \"null\".", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "No se puede invocar un objeto que es posiblemente \"null\" o \"no definido\".", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "No se puede invocar un objeto que es posiblemente \"no definido\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la desestructuración de matriz siempre enviará \"{0}\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero la propagación de matriz siempre enviará \"{0}\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "No se puede iterar el valor porque el método \"next\" de su iterador espera el tipo \"{1}\", pero for-of siempre enviará \"{0}\".", + "Cannot_move_statements_to_the_selected_file_95183": "No se pueden mover instrucciones al archivo seleccionado", + "Cannot_move_to_file_selected_file_is_invalid_95179": "No se puede mover al archivo, el archivo seleccionado no es válido", + "Cannot_read_file_0_5083": "No se puede leer el archivo \"{0}\".", + "Cannot_read_file_0_Colon_1_5012": "No se puede leer el archivo \"{0}\": {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "No se puede volver a declarar la variable con ámbito de bloque '{0}'.", + "Cannot_redeclare_exported_variable_0_2323": "No se puede volver a declarar la variable '{0}' exportada.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "No se puede volver a declarar el identificador \"{0}\" en la cláusula catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "No se puede iniciar una llamada de función en una anotación de tipo.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX no se puede usar si no se proporciona la marca \"--jsx\".", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "No se puede usar 'export import' en un tipo o espacio de nombres de solo tipo cuando '{0}' está habilitado.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "No se pueden usar importaciones, exportaciones o aumentos de módulos si el valor de \"--module\" es \"none\".", + "Cannot_use_namespace_0_as_a_type_2709": "No se puede utilizar el espacio de nombres '{0}' como un tipo.", + "Cannot_use_namespace_0_as_a_value_2708": "No se puede utilizar el espacio de nombres '{0}' como un valor.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "No se puede usar 'this' en un inicializador de propiedad estática de una clase decorada.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "No se puede escribir en el archivo \"{0}\" porque este sobrescribirá el archivo \".tsbuildinfo\" que el proyecto \"{1}\" al que se hace referencia ha generado.", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "No se puede escribir en el archivo '{0}' porque se sobrescribiría con varios archivos de entrada.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "No se puede escribir en el archivo '{0}' porque sobrescribiría el archivo de entrada.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "La variable de la cláusula catch no puede tener un inicializador.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "La anotación de tipo de variable de la cláusula catch debe ser \"any\" o \"unknown\" si se especifica.", + "Change_0_to_1_90014": "Cambiar \"{0}\" a \"{1}\"", + "Change_all_extended_interfaces_to_implements_95038": "Cambiar todas las interfaces mejoradas a \"implements\"", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Cambiar todos los tipos de jsdoc-style a TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiar todos los tipos de jsdoc-style a TypeScript (y agregar \"| undefined\" a los tipos que aceptan valores NULL)", + "Change_extends_to_implements_90003": "Cambiar \"extends\" a \"implements\"", + "Change_spelling_to_0_90022": "Cambiar la ortografía a \"{0}\"", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Compruebe las propiedades de clase declaradas pero no establecidas en el constructor.", + "Check_side_effect_imports_6806": "Compruebe las importaciones de efectos secundarios.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Compruebe que los argumentos de los métodos 'bind', 'call' y 'apply' coinciden con la función original.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Comprobando si '{0}' es el prefijo coincidente más largo para '{1}' - '{2}'.", + "Circular_definition_of_import_alias_0_2303": "Definición circular del alias de importación '{0}'.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Se detectó circularidad al resolver la configuración: {0}", + "Circularity_originates_in_type_at_this_location_2751": "La circularidad se origina en el tipo de esta ubicación.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La clase '{0}' define el descriptor de acceso del miembro de instancia como '{1}', pero la clase extendida '{2}' lo define como función miembro de instancia.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La clase '{0}' define la función miembro de instancia como '{1}', pero la clase extendida '{2}' la define como descriptor de acceso de miembro de instancia.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La clase '{0}' define la propiedad de miembro de instancia como '{1}', pero la clase extendida '{2}' la define como función miembro de instancia.", + "Class_0_incorrectly_extends_base_class_1_2415": "La clase '{0}' extiende la clase base '{1}' de forma incorrecta.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La clase \"{0}\" no implementa correctamente la clase \"{1}\". ¿Pretendía extender \"{1}\" y heredar sus miembros como una subclase?", + "Class_0_incorrectly_implements_interface_1_2420": "La clase '{0}' implementa la interfaz '{1}' de forma incorrecta.", + "Class_0_used_before_its_declaration_2449": "Se ha usado la clase \"{0}\" antes de declararla.", + "Class_constructor_may_not_be_a_generator_1368": "El constructor de clase no puede ser un generador.", + "Class_constructor_may_not_be_an_accessor_1341": "El constructor de clase no puede ser un descriptor de acceso.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "La declaración de clase no puede implementar la lista de sobrecarga para '{0}'.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Las declaraciones de clase no pueden tener más de una etiqueta \"@augments\" o \"@extends\".", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Los elementos Decorator de una clase no se pueden usar con un identificador privado estático. Pruebe a quitar el elemento Decorator experimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "El campo de clase '{0}' definido por la clase primaria no es accesible en la clase secundaria a través de super.", + "Class_name_cannot_be_0_2414": "El nombre de la clase no puede ser \"{0}\".", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "El nombre de clase no puede ser 'Object' cuando el destino es ES5 y versiones posteriores con el módulo {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "El lado estático de la clase '{0}' extiende el lado estático de la clase base '{1}' de forma incorrecta.", + "Classes_can_only_extend_a_single_class_1174": "Las clases solo pueden extender una clase única.", + "Classes_may_not_have_a_field_named_constructor_18006": "Las clases no pueden tener un campo denominado \"constructor\".", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "El código contenido en una clase se calcula en el modo STRICT de JavaScript que no permite este uso de '{0}'. Para obtener más información, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opciones de la línea de comandos", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila el proyecto teniendo en cuenta la ruta de acceso a su archivo de configuración o a una carpeta con un archivo \"tsconfig.json\".", + "Compiler_Diagnostics_6251": "Diagnóstico del compilador", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "No se puede proporcionar una cadena vacía a la opción del compilador '{0}'.", + "Compiler_option_0_expects_an_argument_6044": "La opción '{0}' del compilador espera un argumento.", + "Compiler_option_0_may_not_be_used_with_build_5094": "La opción \"--{0}\" del compilador no se puede usar con \"--build\".", + "Compiler_option_0_may_only_be_used_with_build_5093": "La opción \"--{0}\" del compilador solo se puede usar con \"--build\".", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "La opción del compilador \"{0}\" del valor \"{1}\" es inestable. Use TypeScript nocturno para silenciar este error. Intente actualizar con \"npm install -D typescript@next\".", + "Compiler_option_0_requires_a_value_of_type_1_5024": "La opción '{0}' del compilador requiere un valor de tipo {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "El compilador reserva el nombre \"{0}\" al emitir un identificador privado válido para versiones anteriores.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila el proyecto TypeScript ubicado en la ruta de acceso especificada.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila el proyecto actual (tsconfig.json en el directorio de trabajo).", + "Compiles_the_current_project_with_additional_settings_6929": "Compila el proyecto actual con opciones de configuración adicionales", + "Completeness_6257": "Integridad", + "Composite_projects_may_not_disable_declaration_emit_6304": "Los proyectos compuestos no pueden deshabilitar la emisión de declaración.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Los proyectos compuestos no pueden deshabilitar la compilación incremental.", + "Computed_from_the_list_of_input_files_6911": "Calculado a partir de la lista de archivos de entrada", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Las propiedades calculadas deben ser literales de número o cadena, variables o expresiones de puntos con --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "No se permiten nombres de propiedad calculada en las enumeraciones.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Los nombres de propiedad calculada en literales de clase u objeto no se pueden inferir con --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "No se permiten valores calculados en una enumeración que tiene miembros con valores de cadena.", + "Concatenate_and_emit_output_to_single_file_6001": "Concatenar y emitir la salida en un único archivo.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condiciones que se establecerán además de los valores predeterminados específicos de la resolución al resolver las importaciones.", + "Conflicts_are_in_this_file_6201": "Hay conflictos en este archivo.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere agregar un modificador 'declare' a esta clase.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Los tipos de valor devuelto de la signatura de construcción \"{0}\" y \"{1}\" son incompatibles.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signatura de construcción, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Las signaturas de construcción sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.", + "Constructor_implementation_is_missing_2390": "Falta la implementación del constructor.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "El constructor de la clase '{0}' es privado y solo es accesible desde la declaración de la clase.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "El constructor de la clase '{0}' está protegido y solo es accesible desde la declaración de la clase.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notación de tipo de constructor debe incluirse entre paréntesis cuando se use en un tipo de unión.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notación de tipo de constructor debe incluirse entre paréntesis cuando se use en un tipo de intersección.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Los constructores de las clases derivadas deben contener una llamada a \"super\".", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "El archivo contenedor no se ha especificado y no se puede determinar el directorio raíz. Se omitirá la búsqueda en la carpeta 'node_modules'.", + "Containing_function_is_not_an_arrow_function_95128": "La función contenedora no es una función de flecha", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controlar qué método se usa para detectar archivos JS con formato de módulo.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversión del tipo \"{0}\" al tipo \"{1}\" puede ser un error, porque ninguno de los tipos se superpone suficientemente al otro. Si esto era intencionado, convierta primero la expresión en \"unknown\".", + "Convert_0_to_1_in_0_95003": "Convertir \"{0}\" a \"{1} en \"{0}\"", + "Convert_0_to_mapped_object_type_95055": "Convertir \"{0}\" en el tipo de objeto asignado", + "Convert_all_const_to_let_95102": "Convertir todo \"const\" en \"let\"", + "Convert_all_constructor_functions_to_classes_95045": "Convertir todas las funciones de constructor en clases", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir todos los caracteres no válidos al código de entidad HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir todos los tipos reexportados en exportaciones solo de tipo", + "Convert_all_require_to_import_95048": "Convertir todas las repeticiones de \"require\" en \"import\"", + "Convert_all_to_async_functions_95066": "Convertir todo en funciones asincrónicas", + "Convert_all_to_bigint_numeric_literals_95092": "Convertir todo en literales numéricos bigint", + "Convert_all_to_default_imports_95035": "Convertir todo en importaciones predeterminadas", + "Convert_all_type_literals_to_mapped_type_95021": "Convertir todos los literales de tipo en un tipo asignado", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertir typedef en todos los tipos TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Convertir una función de flecha o una expresión de función", + "Convert_const_to_let_95093": "Convertir \"const\" en \"let\"", + "Convert_default_export_to_named_export_95061": "Convertir una exportación predeterminada en exportación con nombre", + "Convert_function_declaration_0_to_arrow_function_95106": "Convertir la declaración de función \"{0}\" en función de flecha", + "Convert_function_expression_0_to_arrow_function_95105": "Convertir la expresión de función \"{0}\" en función de flecha", + "Convert_function_to_an_ES2015_class_95001": "Convertir la función en una clase ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Convertir un carácter no válido a su código de entidad HTML", + "Convert_named_export_to_default_export_95062": "Convertir una exportación con nombre en exportación predeterminada", + "Convert_named_imports_to_default_import_95170": "Convertir importaciones con nombre en importación predeterminada", + "Convert_named_imports_to_namespace_import_95057": "Convertir importaciones con nombre en una importación de espacio de nombres", + "Convert_namespace_import_to_named_imports_95056": "Convertir una importación de espacio de nombres en importaciones con nombre", + "Convert_overload_list_to_single_signature_95118": "Convertir lista de sobrecargas en firma única", + "Convert_parameters_to_destructured_object_95075": "Convertir los parámetros en un objeto desestructurado", + "Convert_require_to_import_95047": "Convertir \"require\" en \"import\"", + "Convert_to_ES_module_95017": "Convertir en módulo ES", + "Convert_to_a_bigint_numeric_literal_95091": "Convertir en un literal numérico bigint", + "Convert_to_anonymous_function_95123": "Convertir en función anónima", + "Convert_to_arrow_function_95125": "Convertir en función de flecha", + "Convert_to_async_function_95065": "Convertir en función asincrónica", + "Convert_to_default_import_95013": "Convertir en importación predeterminada", + "Convert_to_named_function_95124": "Convertir en función con nombre", + "Convert_to_optional_chain_expression_95139": "Convertir en expresión de cadena opcional", + "Convert_to_template_string_95096": "Convertir en cadena de plantilla", + "Convert_to_type_only_export_1364": "Convertir en exportación solo de tipo", + "Convert_typedef_to_TypeScript_type_95176": "Convertir typedef en tipo TypeScript.", + "Corrupted_locale_file_0_6051": "Archivo de configuración regional {0} dañado.", + "Could_not_convert_to_anonymous_function_95153": "No se puede convertir a una función anónima", + "Could_not_convert_to_arrow_function_95151": "No se puede convertir a una función de flecha", + "Could_not_convert_to_named_function_95152": "No se puede convertir a una función con nombre", + "Could_not_determine_function_return_type_95150": "No se puede determinar el tipo de valor devuelto de la función", + "Could_not_find_a_containing_arrow_function_95127": "No se pudo encontrar una función de flecha contenedora", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "No se encontró ningún archivo de declaración para el módulo '{0}'. '{1}' tiene un tipo \"any\" de forma implícita.", + "Could_not_find_convertible_access_expression_95140": "No se encontró la expresión de acceso convertible.", + "Could_not_find_export_statement_95129": "No se pudo encontrar la instrucción export", + "Could_not_find_import_clause_95131": "No se pudo encontrar la cláusula import", + "Could_not_find_matching_access_expressions_95141": "No se encontraron expresiones de acceso coincidentes.", + "Could_not_find_name_0_Did_you_mean_1_2570": "No se ha encontrado el nombre \"{0}\". ¿Quiso decir \"{1}\"?", + "Could_not_find_namespace_import_or_named_imports_95132": "No se pudo encontrar la importación del espacio de nombres ni las importaciones con nombre", + "Could_not_find_property_for_which_to_generate_accessor_95135": "No se pudo encontrar la propiedad para la que se debe generar el descriptor de acceso", + "Could_not_find_variable_to_inline_95185": "No se pudo encontrar la variable para insertar.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "No se pudo resolver la ruta de acceso \"{0}\" con las extensiones: {1}.", + "Could_not_write_file_0_Colon_1_5033": "No se puede escribir en el archivo \"{0}\": \"{1}\".", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Cree archivos de mapa de origen para los archivos JavaScript emitidos.", + "Create_sourcemaps_for_d_ts_files_6614": "Cree mapas de origen para archivos d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un archivo tsconfig.json con la configuración recomendada en el directorio de trabajo.", + "DIRECTORY_6038": "DIRECTORIO", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "No se permiten decimales con ceros iniciales.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La declaración aumenta una declaración en otro archivo. Esta operación no se puede serializar.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La emisión de declaración para este archivo requiere conservar esta importación para aumentos. Esto no se admite con --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\" del módulo \"{1}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "La emisión de declaración para este parámetro requiere agregar implícitamente un elemento no definido a su tipo. Esto no se admite con --isolatedDeclarations.", + "Declaration_expected_1146": "Se esperaba una declaración.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Conflictos entre nombres de declaración con el identificador global '{0}' integrado.", + "Declaration_or_statement_expected_1128": "Se esperaba una declaración o una instrucción.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Se esperaba una declaración o una instrucción. El elemento \"=\" sigue a un bloque de instrucciones por lo que, si pretendía escribir una asignación de desestructuración, puede que sea necesario incluir toda la asignación entre paréntesis.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Las declaraciones con aserciones de asignación definitiva deben tener también anotaciones de tipo.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Las declaraciones con inicializadores no pueden tener también aserciones de asignación definitiva.", + "Declare_a_private_field_named_0_90053": "Declare un campo privado denominado \"{0}\".", + "Declare_method_0_90023": "Declarar el método \"{0}\"", + "Declare_private_method_0_90038": "Declarar el método \"{0}\" privado", + "Declare_private_property_0_90035": "Declarar la propiedad \"{0}\" privada", + "Declare_property_0_90016": "Declarar la propiedad \"{0}\"", + "Declare_static_method_0_90024": "Declarar el método estático \"{0}\"", + "Declare_static_property_0_90027": "Declarar la propiedad estática \"{0}\"", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "El tipo de valor devuelto de la función Decorator \"{0}\" no se puede asignar al tipo \"{1}\".", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "El tipo de valor devuelto de la función Decorator es \"{0}\" pero se espera que sea \"void\" o \"any\".", + "Decorator_used_before_export_here_1486": "El elemento Decorator se usa antes de \"exportar\" aquí.", + "Decorators_are_not_valid_here_1206": "Los elementos Decorator no son válidos aquí.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "No se pueden aplicar elementos Decorator a varios descriptores de acceso get o set con el mismo nombre.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Los elementos Decorator no pueden aparecer después de \"export\" o \"export default\" si también aparecen antes de \"export\".", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Los decoradores deben preceder al nombre y a todas las palabras clave de las declaraciones de propiedad.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Variables de cláusula catch predeterminadas como \"unknown\" en lugar de \"any\".", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "La exportación predeterminada del módulo tiene o usa el nombre privado '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Las exportaciones predeterminadas no se pueden inferir con --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "No se permiten importaciones predeterminadas en una importación diferida.", + "Default_library_1424": "Biblioteca predeterminada", + "Default_library_for_target_0_1425": "Biblioteca predeterminada para el destino \"{0}\"", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Las importaciones diferidas solo se admiten cuando la marca '--module' está establecida en 'esnext' o 'preserve'.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Las definiciones de los identificadores siguientes entran en conflicto con las de otro archivo: {0}", + "Delete_all_unused_declarations_95024": "Eliminar todas las declaraciones sin usar", + "Delete_all_unused_imports_95147": "Eliminar todas las importaciones sin usar", + "Delete_all_unused_param_tags_95172": "Eliminar todas las etiquetas \"@param\" sin usar", + "Delete_the_outputs_of_all_projects_6365": "Eliminar las salidas de todos los proyectos.", + "Delete_unused_param_tag_0_95171": "Eliminar la etiqueta \"@param\" sin usar \"{0}\"", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[En desuso] Use \"--jsxFactory\" en su lugar. Especifique el objeto invocado para createElement cuando el destino sea la emisión de JSX \"react\"", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[En desuso] Use \"--outFile\" en su lugar. Concatena y emite la salida en un solo archivo.", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[En desuso] Use \"--skipLibCheck\" en su lugar. Omite la comprobación de tipos de los archivos de declaración de biblioteca predeterminados.", + "Deprecated_setting_Use_outFile_instead_6677": "Valor en desuso. Use \"outFile\" en su lugar.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "¿Olvidó usar \"await\"?", + "Did_you_mean_0_1369": "¿Quiso decir \"{0}\"?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "¿Quiso decir que \"{0}\" se restrinja al tipo \"new (...args: any[]) => {1}\"?", + "Did_you_mean_to_call_this_expression_6212": "¿Pretendía llamar a esta expresión?", + "Did_you_mean_to_mark_this_function_as_async_1356": "¿Pretendía marcar esta función como \"async\"?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "¿Pretendía usar \":\"? El símbolo \"=\" solo puede seguir a un nombre de propiedad cuando el literal de objeto contenedor forma parte de un patrón de desestructuración.", + "Did_you_mean_to_use_new_with_this_expression_6213": "¿Pretendía usar \"new\" con esta expresión?", + "Digit_expected_1124": "Se esperaba un dígito.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "El directorio \"{0}\" no existe, se omitirán todas las búsquedas en él.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "El directorio \"{0}\" no tiene ningún ámbito que contenga package.json. Las importaciones no se resolverán.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deshabilite la adición de directivas \"use strict\" en archivos JavaScript emitidos.", + "Disable_checking_for_this_file_90018": "Deshabilitar la comprobación para este archivo", + "Disable_emitting_comments_6688": "Deshabilite el poder escribir comentarios.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deshabilite la emisión de declaraciones que tienen \"@internal\" en los comentarios de JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Deshabilita la emisión de archivos de una compilación.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deshabilite la emisión de archivos si se informa algún error de comprobación de tipos.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deshabilite el borrado de declaraciones \"enumeración const\" en el código generado.", + "Disable_error_reporting_for_unreachable_code_6603": "Deshabilite los informes de errores para los códigos inaccesibles.", + "Disable_error_reporting_for_unused_labels_6604": "Deshabilite los informes de errores para etiquetas sin usar.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Deshabilitar la comprobación completa de tipos (solo se notificarán los errores críticos de análisis y emisión).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deshabilite la generación de funciones auxiliares personalizadas como \"__extends\" en la salida compilada.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deshabilite la inclusión de cualquier archivo de biblioteca, incluido el archivo predeterminado lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Deshabilite la carga de proyectos a los que se hace referencia.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deshabilite la preferencia de archivos de código fuente en lugar de archivos de declaración cuando haga referencia a proyectos compuestos.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deshabilite la creación de informes de errores de exceso de propiedad durante la creación de literales de objetos.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deshabilite la resolución de symlink a su realpath. Se corresponde con la misma marca en el nodo.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Deshabilitar los límites de tamaño de proyectos de JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Deshabilite la búsqueda de la solución para este proyecto.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deshabilite la comprobación estricta de firmas genéricas en tipos de función.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Deshabilitar el tipo de adquisición para proyectos de JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Deshabilite los tipos truncados en los mensajes de error.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deshabilite el uso de los archivos de código fuente en lugar de los archivos de declaración de los proyectos a los que se hace referencia.", + "Disable_wiping_the_console_in_watch_mode_6684": "Deshabilita la eliminación de la consola en modo inspección.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deshabilite la inferencia para la adquisición de tipos consultando los nombres de los archivos de un proyecto.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "No permita que ningún \"import\", \"require\" o \"\" amplíe el número de archivos que TypeScript debe agregar a un proyecto.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "No permitir referencias al mismo archivo con un uso incoherente de mayúsculas y minúsculas.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "No agregar módulos importados ni referencias con triple barra diagonal a la lista de archivos compilados.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "No permitir construcciones en tiempo de ejecución que no formen parte de ECMAScript.", + "Do_not_emit_comments_to_output_6009": "No emitir comentarios en la salida.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "No emitir declaraciones para el código que tiene una anotación \"@internal\".", + "Do_not_emit_outputs_6010": "No emitir salidas.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "No emitir salidas si se informa de algún error.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "No emitir directivas 'use strict' en la salida del módulo.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "No borrar las declaraciones de enumeración const en el código generado.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "No generar funciones del asistente personalizadas como \"__extends\" en la salida compilada.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "No incluir el archivo de biblioteca predeterminado (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "No notificar los errores del código inaccesible.", + "Do_not_report_errors_on_unused_labels_6074": "No notificar los errores de las etiquetas no usadas.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "No resolver la ruta de acceso real de los vínculos simbólicos.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "No transforme ni evite ninguna importación o exportación no marcada como solo de tipo, asegurándose de que se escriben en el formato del archivo de salida en función de la configuración \"module\".", + "Do_not_truncate_error_messages_6165": "No truncar los mensajes de error.", + "Duplicate_function_implementation_2393": "Implementación de función duplicada.", + "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador '{0}' duplicado. El compilador se reserva el nombre '{1}' en el ámbito de nivel superior de un módulo.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificador '{0}' duplicado. El compilador reserva el nombre '{1}' en el ámbito de nivel superior de un módulo que contiene funciones asincrónicas.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicar identificador \"{0}\". El compilador reserva el nombre \"{1}\" al emitir referencias \"super\" en inicializadores estáticos.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. El compilador usa la declaración '{1}' para admitir funciones asincrónicas.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "El identificador \"{0}\" está duplicado. Los elementos estáticos y de instancia no pueden compartir el mismo nombre privado.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador \"arguments\" duplicado. El compilador usa \"arguments\" para inicializar parámetros rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado \"_newTarget\". El compilador usa la declaración de variable \"_newTarget\" para capturar la referencia de la propiedad Meta \"new.target\".", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador \"_this\" duplicado. El compilador usa la declaración de variable \"_this\" para capturar una referencia \"this\".", + "Duplicate_index_signature_for_type_0_2374": "Signatura de índice duplicada para el tipo \"{0}\".", + "Duplicate_label_0_1114": "Etiqueta \"{0}\" duplicada.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Propiedad \"{0}\" duplicada.", + "Duplicate_regular_expression_flag_1500": "Marca de expresión regular duplicada.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "El especificador de la importación dinámica debe ser de tipo \"string\", pero aquí tiene el tipo \"{0}\".", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Las importaciones dinámicas solo se admiten cuando la marca \"--module\" se establece en \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" o \"nodenext\".", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Las importaciones dinámicas solo pueden aceptar un especificador de módulo y un set de atributos opcional como argumentos", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Las importaciones dinámicas solo admiten un segundo argumento cuando la opción \"--module\" se establece en \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Las importaciones y exportaciones de ECMAScript no se pueden escribir en un archivo CommonJS en \"verbatimModuleSyntax\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Las importaciones y exportaciones de ECMAScript no se pueden escribir en un archivo CommonJS en \"verbatimModuleSyntax\". Ajuste el campo \"type\" en el \"package.json\" más cercano para convertir este archivo en un módulo ECMAScript o ajuste la configuración \"verbatimModuleSyntax\", \"module\" y \"moduleResolution\" en TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "No se permite la sintaxis del módulo ECMAScript en un módulo CommonJS cuando \"module\" está establecido en \"preserve\".", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaración de \"{0}.{1}\" difiere en su valor, donde se esperaba '{2}' pero se proporcionó '{3}'.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada miembro del tipo de unión \"{0}\" tiene signaturas de construcción, pero ninguna de ellas es compatible entre sí.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada miembro del tipo de unión \"{0}\" tiene signaturas, pero ninguna de ellas es compatible entre sí.", + "Editor_Support_6249": "Compatibilidad con el editor", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "El elemento tiene un tipo \"any\" de forma implícita porque la expresión de tipo \"{0}\" no se puede usar para indexar el tipo \"{1}\".", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "El elemento tiene un tipo 'any' implícito porque la expresión de índice no es de tipo 'number'.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "El elemento tiene un tipo \"any\" implícito porque el tipo '{0}' no tiene signatura de índice.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "El elemento tiene un tipo \"any\" implícito porque el tipo \"{0}\" no tiene ninguna signatura de índice. ¿Pretendía llamar a \"{1}\"?", + "Emit_6246": "Emitir", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emita campos de clases compatibles con el estándar de ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir una marca BOM UTF-8 al principio de los archivos de salida.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir un solo archivo con mapas de origen en lugar de tener un archivo aparte.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emita un perfil de CPU v8 de la ejecución del compilador para la depuración.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emita un JavaScript adicional para facilitar la importación de módulos CommonJS. Esto habilita \"allowSyntheticDefaultImports\" para la compatibilidad de tipos.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de clase con Define en lugar de Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emita metadatos de tipo de diseño para las declaraciones decoradas en los archivos de origen.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emita un JavaScript más compatible, pero más detallado y de menor rendimiento para la iteración.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir el origen junto a los mapas de origen en un solo archivo; requiere que se establezca \"--inlineSourceMap\" o \"--sourceMap\".", + "Enable_all_strict_type_checking_options_6180": "Habilitar todas las opciones de comprobación de tipos estricta.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Habilite el color y el formato en la salida de TypeScript para facilitar la lectura de los errores del compilador.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilite restricciones que permitan usar un proyecto TypeScript con referencias del proyecto.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilite el informe de errores para rutas de código que no devuelvan explícitamente una función.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilite el informe de errores para expresiones y declaraciones con un tipo \"any\" implícito.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilite los informes de errores para los casos de fallthrough en instrucciones switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilite el informe de errores en los archivos JavaScript de comprobación de tipos.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilite el informe de errores cuando una variable local no se lea.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilite el informe de errores cuando a 'this' se le asigna el tipo 'any'.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite la compatibilidad experimental con decoradores experimentales heredados.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Habilite la importación de archivos con cualquier extensión, siempre que haya un archivo de declaración presente.", + "Enable_importing_json_files_6689": "Habilite la importación de archivos .json.", + "Enable_lib_replacement_6808": "Habilite el reemplazo de bibliotecas.", + "Enable_project_compilation_6302": "Habilitar la compilación de proyecto", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite los métodos estrictos \"bind\", \"call\" y \"apply\" en las funciones.", + "Enable_strict_checking_of_function_types_6186": "Habilite la comprobación estricta de los tipos de función.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Habilite la comprobación estricta de inicialización de propiedades en las clases.", + "Enable_strict_null_checks_6113": "Habilitar comprobaciones estrictas de elementos nulos.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilite la opción \"experimentalDecorators\" en el archivo de configuración.", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilite la marca \"--jsx\" en el archivo de configuración.", + "Enable_tracing_of_the_name_resolution_process_6085": "Habilitar seguimiento del proceso de resolución de nombres.", + "Enable_verbose_logging_6713": "Habilitar el registro detallado.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emitir interoperabilidad entre módulos CommonJS y ES mediante la creación de objetos de espacio de nombres para todas las importaciones. Implica \"allowSyntheticDefaultImports\".", + "Enables_experimental_support_for_ES7_decorators_6065": "Habilita la compatibilidad experimental con los elementos Decorator de ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita la compatibilidad experimental para emitir metadatos de tipo para los elementos Decorator.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Exige el uso de descriptores de acceso indexados para las claves declaradas mediante un tipo indexado.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Asegúrese de que al invalidar miembros en clases derivadas, estos están marcados con un modificador de invalidación.", + "Ensure_that_casing_is_correct_in_imports_6637": "Verifique el uso correcto de mayúsculas y minúsculas en las importaciones.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Asegúrese de que cada archivo pueda transpilarse con seguridad sin depender de otras importaciones.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Asegúrese de que siempre se emite \"use strict\".", + "Entering_conditional_exports_6413": "Entrando en exportaciones condicionales.", + "Entry_point_for_implicit_type_library_0_1420": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\"", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\" con el valor packageId \"{1}\"", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions con el valor packageId \"{1}\"", + "Enum_0_used_before_its_declaration_2450": "Se ha usado la enumeración \"{0}\" antes de declararla.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Las declaraciones de enumeración solo se pueden combinar con otras declaraciones de enumeración o de espacio de nombres.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Todas las declaraciones de enumeración deben ser de tipo const o no const.", + "Enum_member_expected_1132": "Se esperaba un miembro de enumeración.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "El miembro de enumeración que sigue a un miembro numérico que no sea literal debe tener un inicializador cuando \"isolatedModules\" está habilitado.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Los inicializadores de miembros de enumeración deben poder calcularse sin referencias a símbolos externos con --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "El miembro de enumeración debe tener un inicializador.", + "Enum_name_cannot_be_0_2431": "El nombre de la enumeración no puede ser \"{0}\".", + "Environment_Settings_6285": "Configuración del entorno", + "Errors_Files_6041": "Archivos de errores", + "Escape_sequence_0_is_not_allowed_1488": "No se permite la secuencia de escape \"{0}\".", + "Examples_Colon_0_6026": "Ejemplos: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complejidad excesiva al comparar los tipos '{0}' y '{1}'.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidad excesiva de la pila al comparar los tipos '{0}' y '{1}'.", + "Exiting_conditional_exports_6416": "Saliendo de las exportaciones condicionales.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Se esperaban argumentos de tipo {0}-{1}; proporciónelos con una etiqueta \"@extends\".", + "Expected_0_arguments_but_got_1_2554": "Se esperaban {0} argumentos, pero se obtuvieron {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Se esperaban {0} argumentos, pero se obtuvo un total de {1}. ¿Olvidó incluir \"void\" en el argumento de tipo para \"Promise\"?", + "Expected_0_type_arguments_but_got_1_2558": "Se esperaban {0} argumentos de tipo, pero se obtuvieron {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Se esperaban argumentos de tipo {0}; proporciónelos con una etiqueta \"@extends\".", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Se esperaba 1 argumento, pero se obtuvo 0. \"new Promise()\" necesita una pista de JSDoc para producir un \"resolve\" que pueda llamarse sin argumentos.", + "Expected_a_Unicode_property_name_1523": "Se esperaba un nombre de propiedad Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Se esperaba un valor o un nombre de propiedad Unicode.", + "Expected_a_Unicode_property_value_1525": "Se esperaba un valor de propiedad Unicode.", + "Expected_a_capturing_group_name_1514": "Se esperaba un nombre de grupo de captura.", + "Expected_a_class_set_operand_1520": "Se esperaba un operando de conjunto de clases.", + "Expected_at_least_0_arguments_but_got_1_2555": "Se esperaban al menos {0} argumentos, pero se obtuvieron {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Se esperaba la etiqueta de cierre JSX correspondiente de '{0}'.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Se esperaba la etiqueta de cierre correspondiente para el fragmento de JSX.", + "Expected_for_property_initializer_1442": "Se esperaba '=' para el inicializador de propiedades.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Se esperaba que el tipo del campo \"{0}\" en \"package.json\" fuese \"{1}\", pero se obtuvo \"{2}\".", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolución de módulo especificado de forma explícita: '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "No se puede realizar la exponenciación en los valores \"bigint\", a menos que la opción \"target\" esté establecida en \"es2016\" o posterior.", + "Export_0_from_module_1_90059": "Exportar '{0}' desde el módulo '{1}'", + "Export_all_referenced_locals_90060": "Exportar todas las variables locales a las que se hace referencia", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "No se puede usar una asignación de exportación cuando se eligen módulos de ECMAScript como destino. Considere la posibilidad de usar \"export default\" u otro formato de módulo en su lugar.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "La asignación de exportación no es compatible cuando la marca \"--module\" es \"system\".", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La declaración de exportación está en conflicto con la declaración exportada de \"{0}\".", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "No se permiten declaraciones de exportación en un espacio de nombres.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "El especificador de exportación \"{0}\" no existe en el ámbito package.json en la ruta de acceso \"{1}\".", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "El alias de tipo exportado '{0}' tiene o usa el nombre privado '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "El alias de tipo exportado \"{0}\" tiene o usa el nombre privado \"{1}\" del módulo {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportada '{0}' tiene o usa el nombre privado '{1}'.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "En aumentos de módulos, no se admiten exportaciones ni asignaciones de exportación.", + "Expression_expected_1109": "Se esperaba una expresión.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "La expresión debe ir entre paréntesis para usarse como un decorador.", + "Expression_or_comma_expected_1137": "Se esperaba una expresión o una coma.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "La expresión genera un tipo de tupla demasiado grande para representarlo.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "La expresión genera un tipo de unión demasiado complejo para representarlo.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "La expresión se resuelve en el valor \"_super\" que el compilador usa para capturar una referencia a la clase base.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "La expresión se resuelve en una declaración de variable \"_newTarget\" que el compilador usa para capturar la referencia de la propiedad Meta \"new.target\".", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "La expresión se resuelve en la declaración de variable \"_this\" que el compilador usa para capturar una referencia \"this\".", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "No se puede inferir el tipo de expresión con --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La cláusula Extends no puede contener una expresión con --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Extiende la cláusula para el tipo deducido '{0}', tiene o usa el nombre privado '{1}'.", + "Extract_base_class_to_variable_90064": "Extraer clase base en variable", + "Extract_binding_expressions_to_variable_90066": "Extraer expresiones de enlace en variable", + "Extract_constant_95006": "Extraer la constante", + "Extract_default_export_to_variable_90065": "Extraer exportación predeterminada a la variable", + "Extract_function_95005": "Extraer la función", + "Extract_to_0_in_1_95004": "Extraer a {0} en {1}", + "Extract_to_0_in_1_scope_95008": "Extraer a {0} en el ámbito {1}", + "Extract_to_0_in_enclosing_scope_95007": "Extraer a {0} en el ámbito de inclusión", + "Extract_to_interface_95090": "Extraer a la interfaz", + "Extract_to_type_alias_95078": "Extraer al alias de tipo", + "Extract_to_typedef_95079": "Extraer a typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraer en variable y reemplazar por “{0} as typeof {0}”", + "Extract_type_95077": "Extraer el tipo", + "FILE_6035": "ARCHIVO", + "FILE_OR_DIRECTORY_6040": "ARCHIVO O DIRECTORIO", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "No se ha podido encontrar peerDependency “{0}”.", + "Failed_to_resolve_under_condition_0_6415": "No se pudo resolver en la condición “{0}”.", + "Fallthrough_case_in_switch_7029": "Caso de Fallthrough en instrucción switch.", + "File_0_does_not_exist_6096": "El archivo '{0}' no existe.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "El archivo \"{0}\" no existe de acuerdo con las búsquedas en caché anteriores.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "El archivo \"{0}\" existe de acuerdo con las búsquedas en caché anteriores.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "El archivo “{0}” existe. Utilícelo como resultado de resolución de nombres.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "El archivo \"{0}\" tiene una extensión no compatible. Las únicas extensiones compatibles son {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" es un archivo JavaScript. ¿Pretendía habilitar la opción \"allowJs\"?", + "File_0_is_not_a_module_2306": "El archivo '{0}' no es un módulo.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "El archivo \"{0}\" no está en la lista de archivos del proyecto \"{1}\". Los proyectos deben enumerar todos los archivos o usar un patrón \"include\".", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "El archivo '{0}' no está en \"rootDir\" '{1}'. Se espera que \"rootDir\" contenga todos los archivos de origen.", + "File_0_not_found_6053": "Archivo '{0}' no encontrado.", + "File_Layout_6284": "Diseño de archivo", + "File_Management_6245": "Administración de archivos", + "File_appears_to_be_binary_1490": "Parece que el archivo es binario.", + "File_change_detected_Starting_incremental_compilation_6032": "Se detectó un cambio de archivo. Iniciando la compilación incremental...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "El archivo es un módulo CommonJS porque “{0}” no tiene el campo “type”", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "El archivo es el módulo CommonJS porque “{0}” tiene el campo “type” cuyo valor no es “module”.", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "El archivo es un módulo CommonJS porque no se encontró “package.json”", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "El archivo es un módulo ECMAScript porque “{0}” tiene el campo “type” con el valor “module”", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "El archivo es un módulo CommonJS; se puede convertir en un módulo ES.", + "File_is_default_library_for_target_specified_here_1426": "El archivo es la biblioteca predeterminada para el destino que se especifica aquí.", + "File_is_entry_point_of_type_library_specified_here_1419": "El archivo es el punto de entrada de la biblioteca de tipos que se especifica aquí.", + "File_is_included_via_import_here_1399": "El archivo se incluye aquí a través de la importación.", + "File_is_included_via_library_reference_here_1406": "El archivo se incluye aquí a través de la referencia de la biblioteca.", + "File_is_included_via_reference_here_1401": "El archivo se incluye aquí a través de la referencia.", + "File_is_included_via_type_library_reference_here_1404": "El archivo se incluye aquí a través de la referencia de la biblioteca de tipos.", + "File_is_library_specified_here_1423": "El archivo es la biblioteca que se especifica aquí.", + "File_is_matched_by_files_list_specified_here_1410": "El archivo coincide con la lista de \"archivos\" que se especifica aquí.", + "File_is_matched_by_include_pattern_specified_here_1408": "El archivo coincide con el patrón de inclusión que se especifica aquí.", + "File_is_output_from_referenced_project_specified_here_1413": "El archivo es la salida del proyecto al que se hace referencia especificado aquí.", + "File_is_output_of_project_reference_source_0_1428": "El archivo es la salida del origen de referencia del proyecto \"{0}\".", + "File_is_source_from_referenced_project_specified_here_1416": "El archivo es el origen del proyecto al que se hace referencia especificado aquí.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "El nombre de archivo \"{0}\" es diferente del nombre de archivo \"{1}\" ya incluido solo en el uso de mayúsculas y minúsculas.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "El nombre de archivo “{0}” tiene una extensión de “{1}”. Buscando “{2}” en su lugar.", + "File_name_0_has_a_1_extension_stripping_it_6132": "El nombre de archivo \"{0}\" tiene una extensión \"{1}\" y se va a quitar.", + "File_redirects_to_file_0_1429": "El archivo redirecciona al archivo \"{0}\".", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La especificación del archivo no puede contener un directorio primario ('..') que aparezca después de un comodín de directorios recursivo ('**'): '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La especificación de archivo no puede finalizar en un comodín de directorio recursivo ('**'): '{0}'.", + "Filters_results_from_the_include_option_6627": "Filtre resultados de la opción \"include\".", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Corregir todos los errores ortográficos detectados", + "Fix_all_expressions_possibly_missing_await_95085": "Corregir todas las expresiones en las que posiblemente falte \"await\"", + "Fix_all_implicit_this_errors_95107": "Corregir todos los errores de \"this\" implícitos", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corregir todos los tipos de valor devuelto incorrectos de las funciones asincrónicas", + "Fix_all_with_type_only_imports_95182": "Corregir todo con importaciones de solo tipo", + "For_nodejs_Colon_6287": "Para nodejs:", + "Found_0_errors_6217": "Se encontró {0} errores.", + "Found_0_errors_Watching_for_file_changes_6194": "Se encontraron {0} errores. Supervisando los cambios del archivo.", + "Found_0_errors_in_1_files_6261": "Se han encontrado {0} errores en {1} archivos.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Se han encontrado {0} errores en el mismo archivo, empezando por: {1}", + "Found_1_error_6216": "Se encontró 1 error.", + "Found_1_error_Watching_for_file_changes_6193": "Se encontró un error. Supervisando los cambios del archivo.", + "Found_1_error_in_0_6259": "Se ha encontrado 1 error en {0}", + "Found_package_json_at_0_6099": "Se encontró 'package.json' en '{0}'.", + "Found_peerDependency_0_with_1_version_6282": "Se encontró el “{0}” peerDependency con versión “{1}”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Las definiciones de clase están en modo strict de forma automática.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "No se permiten declaraciones de función en bloques en modo strict cuando el destino es “ES5”. Los módulos están en modo strict de forma automática.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "La expresión de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto '{0}'.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Falta la implementación de función o no sigue inmediatamente a la declaración.", + "Function_implementation_name_must_be_0_2389": "El nombre de la implementación de función debe ser '{0}'.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La función tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a ella directa o indirectamente en una de sus expresiones return.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Falta la instrucción \"return\" final en la función y el tipo de valor devuelto no incluye 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La función debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", + "Function_not_implemented_95159": "La función no está implementada.", + "Function_overload_must_be_static_2387": "La sobrecarga de función debe ser estática.", + "Function_overload_must_not_be_static_2388": "La sobrecarga de función no debe ser estática.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de unión.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de intersección.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "El tipo de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"{0}\".", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La función con cuerpos solo se puede combinar con clases que son ambientes.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genere archivos .d.ts desde los archivos TypeScript y JavaScript del proyecto.", + "Generate_get_and_set_accessors_95046": "Generar los descriptores de acceso \"get\" y \"set\"", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generar los descriptores de acceso \"get\" y \"set\" para todas las propiedades de reemplazo", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Genera un perfil de CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Genera un mapa de origen para cada archivo \".d.ts\" correspondiente.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Genera un seguimiento de eventos y una lista de tipos.", + "Generates_corresponding_d_ts_file_6002": "Genera el archivo \".d.ts\" correspondiente.", + "Generates_corresponding_map_file_6043": "Genera el archivo \".map\" correspondiente.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "El generador tiene implícitamente el tipo de retorno \"{0}\". Considere la posibilidad de proporcionar una anotación de tipo de valor devuelto.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Los generadores no se permiten en un contexto de ambiente.", + "Generic_type_0_requires_1_type_argument_s_2314": "El tipo genérico '{0}' requiere los siguientes argumentos de tipo: {1}.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "El tipo genérico \"{0}\" requiere entre {1} y {2} argumentos de tipo.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Las exportaciones de módulos globales solo pueden aparecer en el nivel superior.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Las exportaciones de módulos globales solo pueden aparecer en archivos de declaración.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Las exportaciones de módulos globales solo pueden aparecer en archivos de módulo.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "El tipo global '{0}' debe ser un tipo de clase o de interfaz.", + "Global_type_0_must_have_1_type_parameter_s_2317": "El tipo global '{0}' debe tener los siguientes parámetros de tipo: {1}.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Al volver a compilar en \"--incremental\" y \"--watch\" se asume que los cambios en un archivo solo afectarán a los archivos que dependan de este directamente.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Hacer que las recompilaciones en los proyectos que utilizan el modo 'incremental' y 'inspección' supongan que los cambios dentro de un archivo sólo afectarán a los archivos que dependen directamente de él.", + "Hexadecimal_digit_expected_1125": "Se esperaba un dígito hexadecimal.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Se esperaba un identificador. \"{0}\" es una palabra reservada en el nivel superior de un módulo.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Se esperaba un identificador. \"{0}\" es una palabra reservada en modo strict.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Se esperaba un identificador. '{0}' es una palabra reservada en modo strict. Las definiciones de clase están en modo strict automáticamente.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Se esperaba un identificador. '{0}' es una palabra reservada en modo strict. Los módulos están en modo strict automáticamente.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Se esperaba un identificador. \"{0}\" es una palabra reservada que no se puede usar aquí.", + "Identifier_expected_1003": "Se esperaba un identificador.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. \"__esModule\" está reservado como marcador exportado al transformar módulos ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Se esperaba un literal de cadena o identificador", + "Identifier_string_literal_or_number_literal_expected_1496": "Se esperaba un identificador, un literal de cadena o un literal de número.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si el paquete \"{0}\" expone realmente este módulo, considere la posibilidad de enviar una solicitud de incorporación de cambios para corregir \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\".", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si el paquete '{0}' realmente expone este módulo, intente agregar un nuevo archivo de declaración (.d.ts) que contenga 'declarar módulo '{1}';`", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Omita la configuración tsconfig encontrada y compile con archivos y opciones de línea de comandos.", + "Ignore_this_error_message_90019": "Ignorar este mensaje de error", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignora tsconfig.json y se compilan los archivos especificados con las opciones predeterminadas del compilador.", + "Implement_all_inherited_abstract_classes_95040": "Implementar todas las clases abstractas heredadas", + "Implement_all_unimplemented_interfaces_95032": "Implementar todas las interfaces no implementadas", + "Implement_inherited_abstract_class_90007": "Implementar clase abstracta heredada", + "Implement_interface_0_90006": "Implementar la interfaz \"{0}\"", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La cláusula implements de la clase '{0}' exportada tiene o usa el nombre privado '{1}'.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversión implícita de un elemento \"symbol\" en \"string\" dará un error en tiempo de ejecución. Considere la posibilidad de encapsular esta expresión en \"String (...)\".", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "La importación “{0}” entra en conflicto con el valor global usado en este archivo, por lo que debe declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Importe los conflictos “{0}” con el valor local, por lo que deben declararse con una importación de solo tipo cuando “isolatedModules” está habilitado.", + "Import_0_from_1_90013": "Importar “{0}” desde “{1}”", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Los valores de aserción de importación deben ser expresiones literales de cadena.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "No se permiten aserciones de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Las aserciones de importación solo se admiten cuando la opción \"--module\" se establece en \"esnext\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Las aserciones de importación no se pueden usar con importaciones o exportaciones de solo tipo.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Las aserciones de importación se han reemplazado por atributos de importación. Use 'with' en lugar de 'assert'.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "No se puede usar una asignación de importación cuando se eligen módulos de ECMAScript como destino. Considere la posibilidad de usar \"import * as ns from 'mod'\", \"import {a} from 'mod'\", \"import d from 'mod'\" u otro formato de módulo en su lugar.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Los valores de atributo de importación deben ser expresiones literales de cadena.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "No se permiten atributos de importación en instrucciones que se compilan en llamadas “require” de CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Los atributos de importación solo se admiten cuando la opción \"--module\" se establece en \"esnext\", \"node18\", \"node20\", \"nodenext\" o \"preserve\".", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Los atributos de importación no se pueden usar con importaciones o exportaciones de solo tipo.", + "Import_declaration_0_is_using_private_name_1_4000": "La declaración de importación '{0}' usa el nombre privado '{1}'.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La declaración de importación está en conflicto con la declaración local de \"{0}\".", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Las declaraciones de importación de un espacio de nombres no pueden hacer referencia a un módulo.", + "Import_emit_helpers_from_tslib_6139": "Importe asistentes de emisión de \"tslib\".", + "Import_may_be_converted_to_a_default_import_80003": "La importación puede convertirse a una importación predeterminada.", + "Import_name_cannot_be_0_2438": "El nombre de importación no puede ser \"{0}\".", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La declaración de importación o exportación de una declaración de módulo de ambiente no puede hacer referencia al módulo a través de su nombre relativo.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "El especificador de importación \"{0}\" no existe en el ámbito package.json en la ruta de acceso \"{1}\".", + "Imported_via_0_from_file_1_1393": "Se importó mediante {0} desde el archivo \"{1}\".", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Se importó mediante {0} desde el archivo \"{1}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Se importó mediante {0} desde el archivo \"{1}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\".", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "La importación de un archivo JSON en un módulo ECMAScript requiere un atributo de importación \"type: \"json\"\" cuando \"module\" se establece en \"{0}\".", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "No se permiten importaciones en aumentos de módulos. Considere la posibilidad de moverlas al módulo externo envolvente.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "En las declaraciones de enumeración de ambiente, el inicializador de miembro debe ser una expresión constante.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "En una enumeración con varias declaraciones, solo una declaración puede omitir un inicializador para el primer elemento de la enumeración.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluya una lista de archivos. Esto no admite patrones globales, contrario a \"include\".", + "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados con la extensión \".json\"", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluya el código fuente en los mapas de origen dentro del JavaScript emitido.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir archivos de mapas de origen dentro del JavaScript emitido.", + "Includes_imports_of_types_referenced_by_0_90054": "Incluye importaciones de tipos a los que hace referencia \"{0}\"", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Al incluir --watch, -w empezará a ver el proyecto actual por los cambios de archivo. Una vez establecido, puede configurar el modo de inspección con:", + "Incomplete_quantifier_Digit_expected_1505": "Cuantificador incompleto. Se esperaba un dígito.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "Falta la signatura de índice para el tipo \"{0}\" en el tipo \"{1}\".", + "Index_signature_in_type_0_only_permits_reading_2542": "La signatura de índice del tipo '{0}' solo permite lectura.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Las declaraciones individuales de la declaración '{0}' combinada deben ser todas exportadas o todas locales.", + "Infer_all_types_from_usage_95023": "Deducir todos los tipos del uso", + "Infer_function_return_type_95148": "Deducir el tipo de valor devuelto de función", + "Infer_parameter_types_from_usage_95012": "Deducir los tipos de parámetro del uso", + "Infer_this_type_of_0_from_usage_95080": "Inferir el tipo \"this\" de \"{0}\" a partir del uso", + "Infer_type_of_0_from_usage_95011": "Deducir el tipo de \"{0}\" del uso", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "La inferencia de expresiones de clase no se admite con --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Inicializar la propiedad \"{0}\" en el constructor", + "Initialize_static_property_0_90021": "Inicializar la propiedad estática \"{0}\"", + "Initializer_for_property_0_2811": "Inicializador para la propiedad \"{0}\"", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "El inicializador de la variable miembro de instancia '{0}' no puede hacer referencia al identificador '{1}' declarado en el constructor.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "No se permiten inicializadores en los contextos de ambiente.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa un proyecto de TypeScript y crea un archivo tsconfig.json.", + "Inline_variable_95184": "Variable insertada", + "Insert_command_line_options_and_files_from_a_file_6030": "Inserte opciones de la línea de comandos y archivos desde un archivo.", + "Install_0_95014": "Instalar \"{0}\"", + "Install_all_missing_types_packages_95033": "Instalar todos los paquetes de tipos que faltan", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "La interfaz '{0}' no puede extender los tipos '{1}' y '{2}' simultáneamente.", + "Interface_0_incorrectly_extends_interface_1_2430": "La interfaz '{0}' extiende la interfaz '{1}' de forma incorrecta.", + "Interface_declaration_cannot_have_implements_clause_1176": "La declaración de interfaz no puede tener una cláusula \"implements\".", + "Interface_must_be_given_a_name_1438": "Se debe asignar un nombre a la interfaz.", + "Interface_name_cannot_be_0_2427": "El nombre de la interfaz no puede ser \"{0}\".", + "Interop_Constraints_6252": "Restricciones de interoperabilidad", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete los tipos de propiedad opcionales como escritos en lugar de agregar \"undefined\".", + "Invalid_character_1127": "Carácter no válido.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "El especificador de importación no válido \"{0}\" no tiene resoluciones posibles.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nombre de módulo no válido en el aumento. El módulo '{0}' se resuelve como un módulo sin tipo en '{1}', que no se puede aumentar.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nombre de módulo no válido en un aumento, no se encuentra el módulo '{0}'.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadena opcional no válida de la nueva expresión. ¿Quería llamar a \"{0}()\"?", + "Invalid_reference_directive_syntax_1084": "Sintaxis de la directiva \"reference\" no válida.", + "Invalid_syntax_in_decorator_1498": "Sintaxis no válida en Decorator.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso no válido de '{0}'. No se puede usar dentro de un bloque estático de clase.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso de '{0}' no válido. Los módulos están en modo strict automáticamente.", + "Invalid_use_of_0_in_strict_mode_1100": "Uso no válido de '{0}' en modo strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valor no válido para “--ignoreDeprecations”.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre calificado o un identificador válido.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre cualificado o un identificador válidos.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor no válido para '--reactNamespace'. '{0}' no es un identificador válido.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Es probable que falte una coma para separar estas dos expresiones de plantilla. Forman una expresión de plantilla con etiquetas que no se puede invocar.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "El tipo de elemento \"{0}\" no es un elemento JSX válido.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "El tipo de instancia \"{0}\" no es un elemento JSX válido.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "El tipo de valor devuelto \"{0}\" no es un elemento JSX válido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "El tipo “{0}” no es un tipo de elemento JSX válido.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La etiqueta \"@{0} {1}\" de JSDoc no coincide con la cláusula \"extends {2}\".", + "JSDoc_0_is_not_attached_to_a_class_8022": "La etiqueta \"@{0}\" de JSDoc no está asociada a una clase.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "\"...\" de JSDoc solo puede aparecer en el último parámetro de una signatura.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La etiqueta \"@param\" de JSDoc tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La etiqueta de JSDoc \"@param\" tiene el nombre \"{0}\", pero no hay ningún parámetro con ese nombre. Coincidiría con \"arguments\" si tuviera un tipo de matriz.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "El typedef de JSDoc se puede convertir al tipo TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La etiqueta \"@typedef\" de JSDoc debe tener una anotación de tipo o ir seguida de las etiquetas \"@property\" o \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Las definiciones de tipos JSDoc se pueden convertir en tipos TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Los tipos JSDoc solo se pueden usar en los comentarios de la documentación.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Los tipos de JSDoc pueden moverse a tipos de TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "A los atributos JSX se les debe asignar únicamente un elemento \"expression\" que no esté vacío.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "El elemento JSX '{0}' no tiene la etiqueta de cierre correspondiente.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La clase de elemento JSX no admite atributos porque no tiene una propiedad \"{0}\".", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "El elemento JSX tiene el tipo \"any\" implícitamente porque no existe ninguna interfaz \"JSX.{0}\".", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "El elemento JSX tiene el tipo \"any\" implícitamente porque no existe el tipo global \"JSX.Element\".", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "El tipo de elemento JSX '{0}' no tiene ninguna signatura de construcción ni de llamada.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Los elementos JSX no pueden tener varios atributos con el mismo nombre.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Las expresiones JSX no pueden usar el operador de coma. ¿Pretendía escribir una matriz?", + "JSX_expressions_must_have_one_parent_element_2657": "Las expresiones JSX deben tener un elemento primario.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "El fragmento de JSX no tiene la etiqueta de cierre correspondiente.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Las expresiones de acceso a la propiedad JSX no pueden incluir nombres de espacios de nombres JSX", + "JSX_spread_child_must_be_an_array_type_2609": "El elemento secundario de propagación JSX debe ser de tipo matriz.", + "JavaScript_Support_6247": "Compatibilidad con JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "Un destino de salto no puede atravesar el límite de función.", + "KIND_6034": "TIPO", + "Keywords_cannot_contain_escape_characters_1260": "Las palabras clave no pueden contener caracteres de escape.", + "LOCATION_6037": "UBICACIÓN", + "Language_and_Environment_6254": "Lenguaje y ambiente", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "La parte izquierda del operador de coma no se usa y no tiene efectos secundarios.", + "Library_0_specified_in_compilerOptions_1422": "La biblioteca \"{0}\" se especifica en compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Biblioteca a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"", + "Line_break_not_permitted_here_1142": "No se permite el salto de línea aquí.", + "Line_terminator_not_permitted_before_arrow_1200": "No se permite usar un terminador de línea antes de una flecha.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista de sufijos de nombre de archivo para buscar al resolver un módulo.", + "List_of_folders_to_include_type_definitions_from_6161": "Lista de carpetas de donde se deben incluir las definiciones de tipos.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista de carpetas raíz cuyo contenido combinado representa la estructura del proyecto en tiempo de ejecución.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Cargando \"{0}\" del directorio raíz \"{1}\", ubicación candidata: \"{2}\"", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Se cargará el módulo “{0}” de la carpeta “node_modules”, tipos de archivo de destino “{1}”.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Se cargará el módulo como archivo/carpeta, ubicación del módulo candidato “{0}”, tipos de archivo de destino “{1}”.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Rutas de acceso de registro usadas durante el proceso \"moduleResolution\".", + "Longest_matching_prefix_for_0_is_1_6108": "El prefijo coincidente más largo para \"{0}\" es \"{1}\".", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Buscando en la carpeta \"node_modules\", ubicación inicial: \"{0}\".", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Convertir todas las llamadas a \"super()\" en la primera instrucción de su constructor", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Haga que keyof solo devuelva cadenas en lugar de cadenas, números o símbolos. Opción heredada.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Hacer que la llamada a \"super()\" sea la primera instrucción del constructor", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "El tipo de objeto asignado tiene implícitamente un tipo de plantilla \"any\".", + "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", + "Matched_0_condition_1_6403": "Coincidente con '{0}' condición '{1}'.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "La coincidencia de forma predeterminada incluye el patrón '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Coincidencia con el patrón de inclusión \"{0}\" en \"{1}\"", + "Member_0_implicitly_has_an_1_type_7008": "El miembro '{0}' tiene un tipo '{1}' implícitamente.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "El miembro \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", + "Merge_conflict_marker_encountered_1185": "Se encontró un marcador de conflicto de combinación.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La declaración combinada '{0}' no puede incluir una declaración de exportación predeterminada. Considere la posibilidad de agregar una declaración \"export default {0}\" independiente en su lugar.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La propiedad Meta \"{0}\" solo se permite en el cuerpo de una declaración de función, una expresión de función o un constructor.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "El método '{0}' no puede tener ninguna implementación porque está marcado como abstracto.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre privado \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "El método debe tener una anotación de tipo de valor devuelto explícita con --isolatedDeclarations.", + "Method_not_implemented_95158": "El método no está implementado.", + "Modifiers_cannot_appear_here_1184": "Los modificadores no pueden aparecer aquí.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "El módulo \"{0}\" solo puede importarse de forma predeterminada con la marca \"{1}\".", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "El módulo \"{0}\" no se puede importar con esta construcción. El especificador solo se resuelve en un módulo ES, que no se puede importar con \"require\". En su lugar, use una importación de ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "El módulo \"{0}\" declara \"{1}\" localmente, pero se exporta como \"{2}\".", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "El módulo \"{0}\" declara \"{1}\" localmente, pero no se exporta.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "El módulo \"{0}\" no hace referencia a un tipo, pero aquí se usa como tipo. ¿Quiso decir \"typeof import('{0}')\"?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "El módulo \"{0}\" no hace referencia a un valor, pero aquí se usa como valor.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "El módulo {0} ya ha exportado un miembro denominado '{1}'. Considere la posibilidad de volver a exportarlo de forma explícita para resolver la ambigüedad.", + "Module_0_has_no_default_export_1192": "El módulo '{0}' no tiene ninguna exportación predeterminada.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "El módulo \"{0}\" no tiene ninguna exportación predeterminada. ¿Pretendía usar \"import { {1} } from {0}\" en su lugar?", + "Module_0_has_no_exported_member_1_2305": "El módulo '{0}' no tiene ningún miembro '{1}' exportado.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "El módulo \"{0}\" no tiene ningún miembro \"{1}\" exportado. ¿Pretendía usar \"import {1} from {0}\" en su lugar?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "El módulo \"{0}\" está oculto por una declaración local con el mismo nombre.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "El módulo '{0}' usa \"export =\" y no se puede usar con \"export *\".", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "El módulo '{0}' se resolvió como un módulo de ambiente declarado localmente en el archivo '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "El módulo “{0}” se ha resuelto en “{1}”, pero “--allowArbitraryExtensions” no está establecido.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "El módulo '{0}' se resolvió en '{1}', pero \"--jsx\" no está establecido.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "El módulo \"{0}\" se resolvió en \"{1}\", pero no se usa \"--resolveJsonModule\".", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Los nombres de declaración de módulo solo pueden usar cadenas con las comillas \" o '.", + "Module_name_0_matched_pattern_1_6092": "Nombre del módulo: '{0}', patrón coincidente: '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== No se resolvió el nombre de módulo '{0}'. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== El nombre del módulo '{0}' se resolvió correctamente como '{1}'. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== El nombre del módulo '{0}' se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\". ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "No se ha especificado el tipo de resolución del módulo, se usará '{0}'.", + "Module_resolution_using_rootDirs_has_failed_6111": "No se pudo resolver el módulo con \"rootDirs\".", + "Modules_6244": "Módulos", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover modificadores de elemento de tupla etiquetados a etiquetas", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mueva la expresión de exportación predeterminada a una variable y agréguele una anotación de tipo.", + "Move_to_a_new_file_95049": "Mover a un nuevo archivo", + "Move_to_file_95178": "Mover a archivo", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "No se permiten varios separadores numéricos consecutivos.", + "Multiple_constructor_implementations_are_not_allowed_2392": "No se permiten varias implementaciones del constructor.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NUEVA LÍNEA", + "Name_is_not_valid_95136": "El nombre no es válido", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Los grupos de captura con nombre solo están disponibles cuando el destino es “ES2018” o posterior.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Los grupos de captura con nombre que tengan el mismo nombre deben ser mutuamente excluyentes entre sí.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "No se permiten importaciones con nombre en una importación diferida.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "No se permiten las importaciones con nombre de un archivo JSON en un módulo ECMAScript cuando \"module\" está establecido en \"{0}\".", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propiedad '{0}' con nombre de los tipos '{1}' y '{2}' no es idéntica en ambos.", + "Namespace_0_has_no_exported_member_1_2694": "El espacio de nombres '{0}' no tiene ningún miembro '{1}' exportado.", + "Namespace_must_be_given_a_name_1437": "Se debe asignar un nombre al espacio de nombres.", + "Namespace_name_cannot_be_0_2819": "El nombre de espacio no puede ser \"{0}\".", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "No se permiten espacios de nombres en archivos de script globales cuando “{0}” está habilitado. Si este archivo no está pensado para ser un script global, establezca “moduleDetection” en “force” o agregue una instrucción “export {}” vacía.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "No se pueden aplicar modificadores ni decoradores a los parámetros “this”.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "No hay ningún constructor base con el número especificado de argumentos de tipo.", + "No_constituent_of_type_0_is_callable_2755": "No se puede llamar a ningún constituyente del tipo \"{0}\".", + "No_constituent_of_type_0_is_constructable_2759": "No se puede construir ningún constituyente del tipo \"{0}\".", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "No se encontró ninguna signatura de índice con un parámetro de tipo \"{0}\" en el tipo \"{1}\".", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "No se encontraron entradas en el archivo de configuración '{0}'. Las rutas 'include' especificadas fueron '{1}' y las rutas 'exclude' fueron '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Ya no se admite. En versiones anteriores, establezca manualmente la codificación de texto para leer archivos.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ninguna sobrecarga espera argumentos {0}, pero existen sobrecargas que esperan argumentos {1} o {2}.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ninguna sobrecarga espera argumentos de tipo {0}, pero existen sobrecargas que esperan argumentos de tipo {1} o {2}.", + "No_overload_matches_this_call_2769": "Ninguna sobrecarga coincide con esta llamada.", + "No_type_could_be_extracted_from_this_type_node_95134": "No se pudo extraer ningún tipo de este nodo de tipo", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "No existe ningún valor en el ámbito para la propiedad abreviada \"{0}\". Declare uno o proporcione un inicializador.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La clase '{0}' no abstracta no implementa el miembro abstracto heredado '{1}' de la clase '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Faltan implementaciones para los siguientes miembros de “{0}” en la clase no abstracta: “{1}”: {2} y {3} más.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Una expresión de clase no abstracta no implementa el miembro abstracto heredado '{0}' de la clase '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Faltan implementaciones para los siguientes miembros de “{0}” en la expresión de clase no abstracta: {1} y {2} más.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Las aserciones no nulas solo se pueden usar en los archivos TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Se ha declarado un parámetro no simple aquí.", + "Not_all_code_paths_return_a_value_7030": "No todas las rutas de acceso de código devuelven un valor.", + "Not_all_constituents_of_type_0_are_callable_2756": "No se puede llamar a todos los constituyentes del tipo \"{0}\".", + "Not_all_constituents_of_type_0_are_constructable_2760": "No se pueden construir todos los constituyentes del tipo \"{0}\".", + "Numbers_out_of_order_in_quantifier_1506": "Números desordenado en el cuantificador.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Los literales numéricos con valores absolutos iguales a 2^53 o superiores son demasiado grandes para representarlos de forma precisa como enteros.", + "Numeric_separators_are_not_allowed_here_6188": "Aquí no se permiten separadores numéricos.", + "Object_is_of_type_unknown_2571": "El objeto es de tipo \"desconocido\".", + "Object_is_possibly_null_2531": "El objeto es posiblemente \"null\".", + "Object_is_possibly_null_or_undefined_2533": "El objeto es posiblemente \"null\" o \"undefined\".", + "Object_is_possibly_undefined_2532": "El objeto es posiblemente \"undefined\".", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "El literal de objeto solo puede especificar propiedades conocidas y '{0}' no existe en el tipo '{1}'.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "El literal de objeto solo puede especificar propiedades conocidas, pero \"{0}\" no existe en el tipo \"{1}\". ¿Quería escribir \"{2}\"?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propiedad '{0}' del literal de objeto tiene un tipo '{1}' implícitamente.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Los objetos que contienen propiedades abreviadas no se pueden inferir con --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Los objetos que contienen asignaciones de propagación no se pueden inferir con --isolatedDeclarations.", + "Octal_digit_expected_1178": "Se esperaba un dígito octal.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "No se permiten secuencias de escape decimales ni referencias inversas en una clase de caracteres. Si la intención era una secuencia de escape, use la sintaxis “{0}” en su lugar.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "No se permiten secuencias de escape octal. Use la sintaxis “{0}”.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "No se permiten literales octal. Use la sintaxis “{0}”.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valor de “{0}.{1}” es la cadena “{2}” y se supone que el otro es un valor numérico desconocido.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Solo se permite una declaración de variable en una instrucción \"for...in\".", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Solo se permite una declaración de variable en una instrucción \"for...of\".", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Solo se puede llamar a una función void con la palabra clave \"new\".", + "Only_ambient_modules_can_use_quoted_names_1035": "Solo los módulos de ambiente pueden usar nombres entrecomillados.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Solo los módulos \"amd\" y \"system\" se admiten con --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Solo se pueden inferir matrices const con --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Solo deben emitirse archivos de declaración \".d.ts\".", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Genere solo archivos d.ts y no archivos JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Solo es posible tener acceso a los métodos públicos y protegidos de la clase base mediante la palabra clave \"super\".", + "Operator_0_cannot_be_applied_to_type_1_2736": "El operador \"{0}\" no se puede aplicar al tipo \"{1}\".", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "El operador '{0}' no se puede aplicar a los tipos '{1}' y '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Los operadores no deben mezclarse dentro de una clase de caracteres. Envuelve en una clase anidada en su lugar.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Opte por excluir un proyecto de la comprobación de referencias de varios proyectos al editar.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Se ha quitado la opción “{0}={1}”. Elimínela de la configuración.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "La opción “{0}={1}” está en desuso y dejará de funcionar en TypeScript {2}. Especifique compilerOption “'ignoreDeprecations': '{3}'” para silenciar este error.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"false\" o \"null\" en la línea de comandos.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"null\" en la línea de comandos.", + "Option_0_can_only_be_specified_on_command_line_6266": "La opción “{0}” solo se puede especificar en la línea de comandos.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "La opción '{0}' solo se puede usar cuando se proporciona '--inlineSourceMap' o '--sourceMap'.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "La opción “{0}” solo se puede usar cuando “moduleResolution” está establecido en “node16”, “nodenext” o “bundler”.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "La opción \"{0}\" solo se puede usar cuando \"module\" está establecido en \"preserve\", en \"commonjs\" o en \"es2015\" o posterior.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "No se puede especificar la opción \"{0}\" cuando la opción \"jsx\" es \"{1}\".", + "Option_0_cannot_be_specified_with_option_1_5053": "La opción '{0}' no se puede especificar con la opción '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "La opción '{0}' no se puede especificar sin la opción '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "La opción \"{0}\" no se puede especificar sin la opción \"{1}\" o la opción \"{2}\".", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Se ha quitado la opción “{0}”. Elimínela de la configuración.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "La opción “{0}” está en desuso y dejará de funcionar en TypeScript {1}. Especifique compilerOption “'ignoreDeprecations': '{2}'” para silenciar este error.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "La opción “{0}” es redundante y no se puede especificar con la opción “{1}”.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "La opción \"allowImportingTsExtensions\" solo se puede usar cuando se establece una de las opciones \"noEmit\", \"emitDeclarationOnly\" o \"rewriteRelativeImportExtensions\".", + "Option_build_must_be_the_first_command_line_argument_6369": "La opción \"--build\" debe ser el primer argumento de la línea de comandos.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "La opción \"isolatedModules\" solo se puede usar cuando se proporciona la opción \"--module\" o si la opción \"target\" es \"ES2015\" o una versión posterior.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "La opción “moduleResolution” debe establecerse en “{0}” (o no se especificó) cuando la opción “module” está establecida en “{1}”.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "La opción “module” debe establecerse en “{0}” cuando la opción “moduleResolution” esté establecida en “{1}”.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "La opción “preserveConstEnums” no se puede deshabilitar cuando “{0}” está habilitado.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "La opción \"project\" no se puede combinar con archivos de origen en una línea de comandos.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "No se puede especificar la opción “--resolveJsonModule” cuando “moduleResolution” está establecido en “classic”.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "No se puede especificar la opción “--resolveJsonModule” cuando “module” esté establecido en “none”, “system” o “umd”.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "La opción “verbatimModuleSyntax” no se puede usar cuando “module” está establecido en “UMD”, “AMD” o “System”.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "\"{0}\" y \"{1}\" no se pueden combinar.", + "Options_Colon_6027": "Opciones:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Otras salidas", + "Output_Formatting_6256": "Formato de salida", + "Output_compiler_performance_information_after_building_6615": "Información de rendimiento resultante del compilador después de la compilación.", + "Output_directory_for_generated_declaration_files_6166": "Directorio de salida para los archivos de declaración generados.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "El archivo de salida \"{0}\" no se compiló desde el archivo de origen \"{1}\".", + "Output_from_referenced_project_0_included_because_1_specified_1411": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Produzca información más detallada del rendimiento resultante del compilador después de la compilación.", + "Overload_0_of_1_2_gave_the_following_error_2772": "La sobrecarga {0} de {1}, \"{2}\", dio el error siguiente.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Las signaturas de sobrecarga deben ser todas abstractas o no abstractas.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Las signaturas de sobrecarga deben ser todas de ambiente o de no ambiente.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Las signaturas de sobrecarga deben ser todas exportadas o no exportadas.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Las signaturas de sobrecarga deben ser todas opcionales u obligatorias.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Las signaturas de sobrecarga deben ser todas públicas, privadas o protegidas.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "El parámetro \"{0}\" no puede hacer referencia al identificador \"{1}\" declarado después de este.", + "Parameter_0_cannot_reference_itself_2372": "El parámetro \"{0}\" no puede hacer referencia a sí mismo.", + "Parameter_0_implicitly_has_an_1_type_7006": "El parámetro '{0}' tiene un tipo '{1}' implícitamente.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "El parámetro \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "El parámetro '{0}' no está en la misma posición que el parámetro '{1}'.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre \"{1}\" del módulo \"{2}\" externo, pero no se puede nombrar.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "El parámetro \"{0}\" del descriptor de acceso tiene o usa el nombre privado \"{1}\".", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "El parámetro '{0}' de la signatura de llamada de una interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "El parámetro '{0}' de la signatura de llamada de una interfaz exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "El parámetro '{0}' del constructor de la clase exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "El parámetro '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "El parámetro '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "El parámetro '{0}' de la función exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "El parámetro '{0}' de la función exportada tiene o usa el nombre '{1}' del módulo {2} privado.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "El parámetro '{0}' de la función exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "El parámetro \"{0}\" de la signatura de índice de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "El parámetro \"{0}\" de la signatura de índice de la interfaz exportada tiene o usa el nombre privado \"{1}\".", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "El parámetro '{0}' del método de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "El parámetro '{0}' del método de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "El parámetro '{0}' del método público de la clase exportada tiene o usa el nombre privado '{1}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "El parámetro '{0}' del método estático público de la clase exportada tiene o usa el nombre privado '{1}'.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "El parámetro no puede tener un signo de interrogación y un inicializador.", + "Parameter_declaration_expected_1138": "Se espera una declaración de parámetros.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "El parámetro tiene un nombre, pero no un tipo. ¿Pretendía usar \"{0}: {1}\"?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Los modificadores de parámetro solo se pueden usar en los archivos TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "El parámetro debe tener una anotación de tipo explícita con --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "El tipo de parámetro del establecedor público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analiza en modo strict y emite \"use strict\" para cada archivo de código fuente.", + "Part_of_files_list_in_tsconfig_json_1409": "Parte de la lista de \"archivos\" de tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "El patrón \"{0}\" puede tener un carácter '*' como máximo.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Los intervalos de rendimiento de \"--diagnostics\" o \"--extendedDiagnostics\" no están disponibles en esta sesión. No se encontró ninguna implementación nativa de la API de rendimiento web.", + "Platform_specific_6912": "Específico de plataforma", + "Prefix_0_with_an_underscore_90025": "Prefijo \"{0}\" con guion bajo", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Agregar el prefijo \"declare\" a todas las declaraciones de propiedad incorrectas", + "Prefix_all_unused_declarations_with_where_possible_95025": "Agregar \"_\" como prefijo a todas las declaraciones sin usar, cuando sea posible", + "Prefix_with_declare_95094": "Agregar el prefijo \"declare\"", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conserva los valores importados no usados en la salida de JavaScript que, de lo contrario, se quitarían.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Imprima todos los archivos leídos durante la compilación.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Imprima los archivos leídos durante la compilación, incluyendo la razón por la que se incluyó.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima los nombres de los archivos y el motivo por el que forman parte de la compilación.", + "Print_names_of_files_part_of_the_compilation_6155": "Imprimir los nombres de los archivos que forman parte de la compilación.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima los nombres de los archivos que forman parte de la compilación y, a continuación, detenga el procesamiento.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimir los nombres de los archivos generados que forman parte de la compilación.", + "Print_the_compiler_s_version_6019": "Imprima la versión del compilador.", + "Print_the_final_configuration_instead_of_building_1350": "Imprima la configuración final en lugar de compilar.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprima los nombres de los archivos emitidos después de una compilación.", + "Print_this_message_6017": "Imprima este mensaje.", + "Private_accessor_was_defined_without_a_getter_2806": "El descriptor de acceso privado se ha definido sin un captador.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "El campo privado “{0}” debe declararse en una clase envolvente.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "No se permiten identificadores privados en las declaraciones de variables.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "No se permiten identificadores privados fuera de los cuerpos de clase.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Los identificadores privados solo están permitidos en cuerpos de clase y solo se pueden utilizan como parte de una declaración de un miembro de clase, acceso de propiedad o en la parte izquierda de una expresión \"in\".", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Los identificadores privados solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Los identificadores privados no se pueden usar como parámetros.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "No se puede acceder al miembro \"{0}\" privado o protegido en un parámetro de tipo.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "El proyecto \"{0}\" no puede generarse porque su dependencia \"{1}\" tiene errores", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "El proyecto \"{0}\" no puede compilarse porque su dependencia \"{1}\" no se ha compilado.", + "Project_0_is_being_forcibly_rebuilt_6388": "El proyecto \"{0}\" se está recompilando de manera forzada.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que el archivo “{2}” era el archivo raíz de la compilación, pero ya no.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "El “{0}” del proyecto no está actualizado porque el archivo buildinfo “{1}” indica que el programa debe informar de errores.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "El proyecto \"{0}\" no está actualizado porque el archivo buildinfo \"{1}\" indica que algunos de los cambios no se emitieron", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "El proyecto “{0}” no está actualizado porque el archivo buildinfo “{1}” indica que hay cambios en compilerOptions", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "El proyecto \"{0}\" está obsoleto porque la salida \"{1}\" es anterior a la entrada \"{2}\"", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "El proyecto \"{0}\" está obsoleto porque el archivo de salida \"{1}\" no existe", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "El proyecto \"{0}\" está obsoleto porque su salida se generó con la versión \"{1}\", que es distinta a la versión actual \"{2}\".", + "Project_0_is_up_to_date_6361": "El proyecto \"{0}\" está actualizado", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "El proyecto \"{0}\" está actualizado porque la entrada más reciente \"{1}\" es anterior a la salida \"{2}\"", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "El proyecto \"{0}\" está actualizado, pero debe actualizar las marcas de tiempo de los archivos de salida anteriores a los archivos de entrada", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "El proyecto \"{0}\" está actualizado con archivos .d.ts de sus dependencias", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Las referencias del proyecto no pueden formar un gráfico circular. Ciclo detectado: {0}", + "Projects_6255": "Proyectos", + "Projects_in_this_build_Colon_0_6355": "Proyectos de esta compilación: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Las propiedades con el modificador 'accessor' solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propiedad '{0}' no puede tener un mediador porque se marca como abstracto.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propiedad \"{0}\" procede de una signatura de índice, por lo que debe accederse a ella con [\"{0}\"].", + "Property_0_does_not_exist_on_type_1_2339": "La propiedad '{0}' no existe en el tipo '{1}'.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Pretendía acceder al miembro estático \"{2}\"?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "No existe la propiedad \"{0}\" en el tipo \"{1}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{2}\" o posterior.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propiedad \"{0}\" no existe en el tipo \"{1}\". Intente cambiar la opción del compilador \"lib\" para incluir \"dom\".", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propiedad '{0}' no tiene inicializador y no está asignada de forma definitiva en el bloque estático de clase.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propiedad \"{0}\" no tiene inicializador y no está asignada de forma definitiva en el constructor.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso get le falta una anotación de tipo de valor devuelto.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso set le falta una anotación de tipo de parámetro.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La propiedad \"{0}\" tiene el tipo \"any\" de forma implícita, pero se puede inferir un tipo más adecuado para su descriptor de acceso get a partir del uso.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La propiedad \"{0}\" tiene el tipo \"any\" de forma implícita, pero se puede inferir un tipo más adecuado para su descriptor de acceso set a partir del uso.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "La propiedad \"{0}\" del tipo \"{1}\" no se puede asignar a la misma propiedad del tipo base \"{2}\".", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La propiedad \"{0}\" del tipo \"{1}\" no se puede asignar al tipo \"{2}\".", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La propiedad \"{0}\" del tipo \"{1}\" hace referencia a un miembro distinto al que no se puede acceder desde el tipo \"{2}\".", + "Property_0_is_declared_but_its_value_is_never_read_6138": "La propiedad \"{0}\" se declara, pero su valor no se lee nunca.", + "Property_0_is_incompatible_with_index_signature_2530": "La propiedad '{0}' es incompatible con la signatura de índice.", + "Property_0_is_missing_in_type_1_2324": "Falta la propiedad '{0}' en el tipo '{1}'.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La propiedad \"{0}\" falta en el tipo \"{1}\", pero es obligatoria en el tipo \"{2}\".", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "No se puede acceder a la propiedad \"{0}\" fuera de la clase \"{1}\" porque tiene un identificador privado.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propiedad '{0}' es opcional en el tipo '{1}', pero obligatoria en el tipo '{2}'.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propiedad '{0}' es privada y solo se puede acceder a ella en la clase '{1}'.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propiedad '{0}' es privada en el tipo '{1}', pero no en el tipo '{2}'.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propiedad \"{0}\" está protegida y solo puede accederse a ella a través de una instancia de la clase \"{1}\". Esta es una instancia de la clase \"{2}\".", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propiedad '{0}' está protegida y solo se puede acceder a ella en la clase '{1}' y las subclases de esta.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propiedad '{0}' está protegida, pero el tipo '{1}' no es una clase derivada de '{2}'.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propiedad '{0}' está protegida en el tipo '{1}', pero es pública en el tipo '{2}'.", + "Property_0_is_used_before_being_assigned_2565": "La propiedad \"{0}\" se usa antes de asignarla.", + "Property_0_is_used_before_its_initialization_2729": "La propiedad \"{0}\" se usa antes de su inicialización.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La propiedad '{0}' del atributo spread de JSX no se puede asignar a la propiedad de destino.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propiedad “{0}” del tipo de clase anónima exportada no puede ser privada ni estar protegida.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propiedad \"{0}\" de tipo \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", + "Property_0_was_also_declared_here_2733": "La propiedad \"{0}\" también se ha declarado aquí.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propiedad \"{0}\" sobrescribirá la propiedad base en \"{1}\" Si esto es intencionado, agregue un inicializador. De lo contrario, agregue un modificador \"declare\" o quite la declaración redundante.", + "Property_assignment_expected_1136": "Se esperaba una asignación de propiedad.", + "Property_destructuring_pattern_expected_1180": "Se esperaba un patrón de desestructuración de propiedad.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propiedad debe tener una anotación de tipo explícita con --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Se esperaba una propiedad o una signatura.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "El valor de la propiedad puede ser solo un literal de cadena, literal numérico, 'true', 'false', 'null', literal de objeto o literal de matriz.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Proporcionar compatibilidad total con objetos iterables en “for-of”, propagaciones y desestructuraciones cuando el destino es “ES5”.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo externo {2}, pero no puede tener nombre.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "El método público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "El método público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La propiedad pública '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo externo {2}, pero no puede tener nombre.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "El método estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "No se permite el nombre calificado \"{0}\" sin un elemento \"@param {object} {1}\" inicial.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un error cuando no se lee un parámetro de función.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Generar un error en las expresiones y las declaraciones con un tipo \"any\" implícito.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Generar un error en expresiones 'this' con un tipo 'any' implícito.", + "Range_out_of_order_in_character_class_1517": "Rango desordenado en la clase de caracteres.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Volver a exportar un tipo cuando “{0}” está habilitado requiere el uso de “export type”.", + "React_components_cannot_include_JSX_namespace_names_2639": "Los componentes de React no pueden incluir nombres de espacio de nombres JSX", + "Recommended_Options_6294": "Opciones recomendadas", + "Redirect_output_structure_to_the_directory_6006": "Redirija la estructura de salida al directorio.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzca el número de proyectos cargados automáticamente por TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "El proyecto \"{0}\" al que se hace referencia no puede deshabilitar la emisión.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "El proyecto \"{0}\" al que se hace referencia debe tener el valor \"composite\": true.", + "Referenced_via_0_from_file_1_1400": "Se hace referencia mediante \"{0}\" desde el archivo \"{1}\".", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. Considere la posibilidad de agregar una extensión a la ruta de acceso de importación.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Las rutas de acceso de importación relativas necesitan extensiones de archivo explícitas en las importaciones ECMAScript cuando “--moduleResolution” es “node16” o “nodenext”. ¿Quiso decir “{0}”?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Quite una lista de directorios del proceso de inspección.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Quite una lista de archivos del procesamiento del modo de inspección.", + "Remove_all_unnecessary_override_modifiers_95163": "Quitar todos los modificadores \"override\" innecesarios", + "Remove_all_unnecessary_uses_of_await_95087": "Quitar todos los usos innecesarios de \"await\"", + "Remove_all_unreachable_code_95051": "Quitar todo el código inaccesible", + "Remove_all_unused_labels_95054": "Quitar todas las etiquetas no utilizadas", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Quitar las llaves de todos los cuerpos de función de flecha con problemas relevantes", + "Remove_braces_from_arrow_function_95060": "Quitar las llaves de la función de flecha", + "Remove_braces_from_arrow_function_body_95112": "Quitar las llaves del cuerpo de función de flecha", + "Remove_import_from_0_90005": "Quitar importación de \"{0}\"", + "Remove_override_modifier_95161": "Quitar el modificador \"override\"", + "Remove_parentheses_95126": "Quitar los paréntesis", + "Remove_template_tag_90011": "Quitar la etiqueta de plantilla", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Elimine el límite de 20 MB del tamaño total del código fuente para los archivos JavaScript en el servidor de lenguaje TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Quitar \"type\" de la declaración de importación de \"{0}\"", + "Remove_type_from_import_of_0_from_1_90056": "Quitar \"type\" de la importación de '{0}' de \"{1}\"", + "Remove_type_parameters_90012": "Quitar los parámetros de tipo", + "Remove_unnecessary_await_95086": "Quitar elementos \"await\" innecesarios", + "Remove_unreachable_code_95050": "Quitar el código inaccesible", + "Remove_unused_declaration_for_Colon_0_90004": "Quitar la declaración sin usar para \"{0}\"", + "Remove_unused_declarations_for_Colon_0_90041": "Quite las declaraciones sin usar para \"{0}\"", + "Remove_unused_destructuring_declaration_90039": "Quite la declaración de desestructuración no utilizada", + "Remove_unused_label_95053": "Quitar etiqueta no utilizada", + "Remove_variable_statement_90010": "Quitar la declaración de variable", + "Rename_param_tag_name_0_to_1_95173": "Cambiar el nombre de la etiqueta \"@param\" \"{0}\" a \"{1}\"", + "Replace_0_with_Promise_1_90036": "Reemplazar \"{0}\" por \"Promise<{1}>\"", + "Replace_all_unused_infer_with_unknown_90031": "Reemplazar todos los elementos \"infer\" sin usar por \"unknown\"", + "Replace_import_with_0_95015": "Reemplazar importación por \"{0}\".", + "Replace_infer_0_with_unknown_90030": "Reemplazar \"infer {0}\" por \"unknown\"", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Notificar un error cuando no todas las rutas de acceso de código en funcionamiento devuelven un valor.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Notificar errores de los casos de fallthrough en la instrucción switch.", + "Report_errors_in_js_files_8019": "Notifique los errores de los archivos .js.", + "Report_errors_on_unused_locals_6134": "Informe de errores sobre variables locales no usadas.", + "Report_errors_on_unused_parameters_6135": "Informe de errores sobre parámetros no usados.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Requiere una anotación suficiente en las exportaciones para que otras herramientas puedan generar archivos de declaración de forma trivial.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Se requieren propiedades no declaradas de las signaturas de índice para usar los accesos de elemento.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Los parámetros de tipo requeridos pueden no seguir parámetros de tipo opcionales.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La resolución del módulo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La resolución de la directiva de referencia de tipo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Error en la resolución del nombre no relativo; probando con las características modernas de resolución de nodos deshabilitadas para ver si la biblioteca npm necesita una actualización de la configuración.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Error en la resolución del nombre no relativo; intentando con “--moduleResolution bundler” para ver si el proyecto puede necesitar una actualización de la configuración.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolver \"keyof\" exclusivamente como nombres de propiedad con valores de cadena (sin números ni símbolos).", + "Resolved_under_condition_0_6414": "Resuelto bajo condición “{0}”.", + "Resolving_in_0_mode_with_conditions_1_6402": "Resolviendo en modo {0} con condiciones {1}.", + "Resolving_module_0_from_1_6086": "======== Resolviendo el módulo '{0}' de '{1}'. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolviendo el nombre de módulo '{0}' relativo a la dirección URL base '{1}' - '{2}'.", + "Resolving_real_path_for_0_result_1_6130": "Resolviendo la ruta de acceso real de \"{0}\", resultado: \"{1}\".", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolviendo la directiva de referencia de tipo \"{0}\", archivo contenedor \"{1}\". ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz: '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz no establecido. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz: '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz no establecido. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolviendo la directiva de referencia de tipo para el programa que especifica typeRoots personalizado, omitiendo la búsqueda en la carpeta “node_modules”.", + "Resolving_with_primary_search_path_0_6121": "Resolviendo con la ruta de búsqueda principal \"{0}\".", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "El parámetro rest '{0}' tiene un tipo \"any[]\" implícitamente.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "El parámetro rest \"{0}\" tiene un tipo \"any[]\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", + "Rest_types_may_only_be_created_from_object_types_2700": "Los tipos rest solo se pueden crear a partir de tipos de objeto.", + "Return_type_annotation_circularly_references_itself_2577": "La anotación de tipo de valor devuelto se hace referencia a sí misma de forma circular.", + "Return_type_must_be_inferred_from_a_function_95149": "El tipo de valor devuelto debe inferirse de una función", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "El tipo de valor devuelto de la signatura de constructor de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "El tipo de valor devuelto de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "El tipo de valor devuelto de la signatura de constructor se debe poder asignar al tipo de instancia de la clase.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "El tipo de valor devuelto de la función exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "El tipo de valor devuelto de la función exportada tiene o usa el nombre '{0}' del módulo {1} privado.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "El tipo de valor devuelto de la función exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "El tipo de valor devuelto de la signatura de índice de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "El tipo de valor devuelto de la signatura de índice de la interfaz exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "El tipo de valor devuelto del método de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "El tipo de valor devuelto del método de la interfaz exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo {2} externo, pero no se puede nombrar.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "El tipo de valor devuelto del captador público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} privado.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "El tipo de valor devuelto del método público de la clase exportada tiene o usa el nombre privado '{0}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo {2} externo, pero no se puede nombrar.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "El tipo de valor devuelto del captador estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} privado.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre privado '{0}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador de paquete \"{4}\".", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" no se resolvió.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\".", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\" con el identificador del paquete \"{3}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador del paquete \"{4}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior no se resolvió.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\" con el identificador de paquete \"{3}\".", + "Rewrite_all_as_indexed_access_types_95034": "Reescribir todo como tipos de acceso indexados", + "Rewrite_as_the_indexed_access_type_0_90026": "Reescribir como tipo de acceso indexado \"{0}\"", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Vuelva a escribir las extensiones de archivo \".ts\", \".tsx\", \".mts\" y \".cts\" en rutas de acceso de importación relativas a su equivalente de JavaScript en los archivos de salida.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "El operando derecho de ?? es inaccesible porque el operando izquierdo nunca es nulo.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "No se puede determinar el directorio raíz, se omitirán las rutas de búsqueda principales.", + "Root_file_specified_for_compilation_1427": "Archivo raíz especificado para la compilación", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "ESTRATEGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Guarde archivos .tsbuildinfo para permitir la compilación incremental de proyectos.", + "Saw_non_matching_condition_0_6405": "Se vio una condición no coincidente '{0}'.", + "Scoped_package_detected_looking_in_0_6182": "Se detectó un paquete con ámbito al buscar en \"{0}\"", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Buscando extensiones de reserva en todos los directorios de node_modules antecesores: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Buscando extensiones preferidas en todos los directorios de node_modules antecesores: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Consulte también https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "La selección no es una instrucción ni instrucciones válidas", + "Selection_is_not_a_valid_type_node_95133": "La selección no es un nodo de tipo válido", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Establezca la versión del lenguaje de JavaScript para las JavaScript emitidas e incluya las declaraciones de bibliotecas compatibles.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Establezca el lenguaje de la mensajería de TypeScript. No afecta a la emisión.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Establecer la opción \"module\" del archivo de configuración en \"{0}\"", + "Set_the_newline_character_for_emitting_files_6659": "Establezca el carácter de nueva línea para emitir archivos.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Establecer la opción \"target\" del archivo de configuración en \"{0}\"", + "Setters_cannot_return_a_value_2408": "Los establecedores no pueden devolver un valor.", + "Show_all_compiler_options_6169": "Mostrar todas las opciones de compilador.", + "Show_diagnostic_information_6149": "Mostrar información de diagnóstico.", + "Show_verbose_diagnostic_information_6150": "Mostrar información de diagnóstico detallada.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar lo que podría compilarse (o eliminarse, si se especifica con \"--clean\")", + "Signature_0_must_be_a_type_predicate_1224": "La signatura '{0}' debe tener un predicado de tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Las declaraciones de signatura solo se pueden usar en los archivos TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Omitir la compilación de proyectos que siguen en la cadena debido a un error en el proyecto ascendente.", + "Skip_type_checking_all_d_ts_files_6693": "Omita la comprobación de tipos de todos los archivos .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Omita la comprobación de tipos de archivo .d.ts que se incluyen con TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Omita la comprobación de tipos de los archivos de declaración.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" tiene errores", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" no se ha compilado", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Omitiendo el módulo “{0}” que parece un URI absoluto, tipos de archivo de destino: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".", + "Source_has_0_element_s_but_target_allows_only_1_2619": "El origen tiene {0} elemento(s), pero el destino solo permite {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "El origen tiene {0} elemento(s), pero el destino requiere {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "El origen no proporciona ninguna coincidencia para el elemento requerido en la posición {0} del destino.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "El origen no proporciona ninguna coincidencia para el elemento variádico en la posición {0} del destino.", + "Specify_ECMAScript_target_version_6015": "Especifique la versión de destino de ECMAScript.", + "Specify_JSX_code_generation_6080": "Especifique la generación de código JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especifique un archivo que agrupe todas las salidas en un archivo JavaScript. Si 'declaración' es verdadera, también designa un archivo que agrupa toda la salida .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especifique una lista de patrones globales que coincidan con los archivos que se incluirán en la compilación.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Especifique una lista de complementos de servicio de lenguaje para incluirlos.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especifique un conjunto de archivos de declaración de biblioteca agrupados que describan el entorno de tiempo de ejecución de destino.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especifique un conjunto de entradas que reasignan las importaciones a ubicaciones de búsqueda adicionales.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique una matriz de objetos que especifique las rutas de acceso a los proyectos. Usada en las referencias del proyecto.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Especifique una carpeta de salida para todos los archivos emitidos.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar el comportamiento de emisión o comprobación para las importaciones que solo se usan para los tipos.", + "Specify_file_to_store_incremental_compilation_information_6380": "Especificar un archivo para almacenar la información de compilación incremental", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique cómo busca TypeScript un archivo a partir del especificador de módulo que se le indique.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especifique cómo se vigilan los directorios en los sistemas que carecen de la funcionalidad de vigilancia recursiva de archivos.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique cómo funciona el modo de inspección de TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique los archivos de biblioteca que se van a incluir en la compilación.", + "Specify_module_code_generation_6016": "Especifique la generación de código del módulo.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especifique el especificador de módulo que se usa para importar las funciones de fábrica de JSX cuando se usa \"jsx: react-jsx*\".", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especifique varias carpetas que actúen como \"./node_modules/@types\".", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especifique una o varias referencias de ruta o de módulo de nodo a los archivos de configuración base desde los que se herede la configuración.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique las opciones para la adquisición automática de los archivos de declaración.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique la estrategia para crear una inspección de sondeo cuando no se pueda crear con eventos del sistema de archivos: \"FixedInterval\" (valor predeterminado), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique la estrategia para inspeccionar el directorio en las plataformas que no admiten las inspecciones recursivas de forma nativa: \"UseFsEvents\" (valor predeterminado), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique la estrategia para inspeccionar el archivo: \"FixedPollingInterval\" (valor predeterminado), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique la referencia de fragmento de JSX utilizada para los fragmentos cuando se dirige a la emisión de JSX de React, por ejemplo, \"React.Fragment\" o \"Fragment\".", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique la función de generador JSX que se usará cuando el destino sea la emisión de JSX \"react\"; por ejemplo, \"React.createElement\" o \"h\".", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique la función de generador JSX que se usa al establecer como destino la emisión JSX de React; por ejemplo, \"React.createElement\" o \"h\".", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique la función de la fábrica de fragmentos de JSX que se va a usar cuando se especifique como destino la emisión de JSX \"react\" con la opción del compilador \"jsxFactory\", por ejemplo, \"fragmento\".", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especifique el directorio base para resolver nombres de módulos no relativos.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique la secuencia de final de línea que debe usarse para emitir archivos: 'CRLF' (Dos) o 'LF' (Unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique la ubicación donde el depurador debe colocar los archivos de TypeScript en lugar de sus ubicaciones de origen.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique la ubicación donde el depurador debe colocar los archivos de asignaciones en lugar de las ubicaciones generadas.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique la profundidad máxima de carpeta usada para comprobar archivos JavaScript de \"node_modules\". Solo es compatible con \"allowJs\".", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique el especificador de módulo que se va a usar para importar las funciones de fábrica \"jsx\" y \"jsxs\"; por ejemplo, react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique el objeto invocado para 'createElement'. Esto solo se aplica cuando el destino es la emisión JSX \"react\".", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique el directorio de salida para los archivos de declaración generados.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Especifique la ruta de acceso para el archivo de compilación incremental .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique el directorio raíz de los archivos de entrada. Úselo para controlar la estructura del directorio de salida con --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Especifique la carpeta raíz en los archivos de código fuente.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique la ruta raíz para que los depuradores encuentren el código de origen de referencia.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique los nombres de los paquetes de tipo que se incluyen sin ser referenciados en un archivo fuente.", + "Specify_what_JSX_code_is_generated_6646": "Especifique qué código de JSX se generará.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especifique el enfoque que debe usar el monitor si el sistema agota los monitores de archivos nativos.", + "Specify_what_module_code_is_generated_6657": "Especifique qué código de módulo se generará.", + "Split_all_invalid_type_only_imports_1367": "Dividir todas las importaciones solo de tipo no válidas", + "Split_into_two_separate_import_declarations_1366": "Dividir en dos declaraciones de importación independientes", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "El operador spread de las expresiones \"new\" solo está disponible si el destino es ECMAScript 5 y versiones posteriores.", + "Spread_types_may_only_be_created_from_object_types_2698": "Los tipos spread solo se pueden crear a partir de tipos de objeto.", + "Starting_compilation_in_watch_mode_6031": "Iniciando la compilación en modo de inspección...", + "Statement_expected_1129": "Se esperaba una instrucción.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "No se permiten instrucciones en los contextos de ambiente.", + "Static_members_cannot_reference_class_type_parameters_2302": "Los miembros estáticos no pueden hacer referencia a parámetros de tipo de clase.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propiedad estática \"{0}\" está en conflicto con la propiedad integrada \"Function.{0}\" de la función de constructor \"{1}\".", + "Stricter_Typechecking_Options_6292": "Opciones de comprobación de tipos más estrictas", + "String_literal_expected_1141": "Se esperaba un literal de cadena.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "No se admiten los nombres de importación y exportación de literales de cadena cuando la marca “--module” está establecida en “es2015” o “es2020”.", + "String_literal_with_double_quotes_expected_1327": "Se esperaba un literal de cadena entre comillas dobles.", + "Style_Options_6293": "Opciones de estilo", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Use color y contexto para estilizar los errores y los mensajes (experimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Las marcas de subpatrones deben estar presentes cuando hay un signo menos.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Las declaraciones de propiedad subsiguientes deben tener el mismo tipo. La propiedad \"{0}\" debe ser de tipo \"{1}\", pero aquí tiene el tipo \"{2}\".", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Las declaraciones de variable subsiguientes deben tener el mismo tipo. La variable '{0}' debe ser de tipo '{1}', pero aquí tiene el tipo '{2}'.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "La sustitución '{0}' para el patrón '{1}' tiene un tipo incorrecto. Se esperaba 'string', pero se obtuvo '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La sustitución \"{0}\" del patrón \"{1}\" puede tener un carácter \"*\" como máximo.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Las sustituciones para el patrón '{0}' deben ser una matriz.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Las sustituciones para el patrón '{0}' no deben ser una matriz vacía.", + "Successfully_created_a_tsconfig_json_file_6071": "Archivo tsconfig.json creado correctamente.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "No se permiten llamadas a \"super\" fuera de los constructores o en funciones anidadas dentro de estos.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Suprima las comprobaciones de propiedades en exceso de los literales de objeto.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Eliminar errores de noImplicitAny para los objetos de indexación a los que les falten firmas de índice.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprima los errores \"noImplicitAny\" al indexar objetos que carecen de firmas de índice.", + "Switch_each_misused_0_to_1_95138": "Cambie cada elemento \"{0}\" usado incorrectamente a \"{1}\"", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Llame a las devoluciones de llamada de forma sincrónica y actualice el estado de los monitores de directorio en las plataformas que no admitan la supervisión recursiva de forma nativa.", + "Syntax_Colon_0_6023": "Sintaxis: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La etiqueta \"{0}\" espera al menos \"{1}\" argumentos, pero el generador de JSX \"{2}\" proporciona como máximo \"{3}\".", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "No se permiten expresiones de plantilla con etiquetas en una cadena opcional.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "El destino solo permite {0} elemento(s), pero el origen puede tener más.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "El destino requiere {0} elemento(s), pero el origen puede tener menos.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma de destino proporciona muy pocos argumentos. Se esperaba {0} o más, pero se obtuvo {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "El modificador \"{0}\" solo se puede usar en los archivos TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "El operador '{0}' no se puede aplicar al tipo \"symbol\".", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "No se permite usar el operador '{0}' para los tipos booleanos. Como alternativa, puede usar '{1}'.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propiedad \"{0}\" de un iterador de asincronía debe ser un método.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "La propiedad \"{0}\" de un iterador debe ser un método.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "El tipo 'Object' se puede asignar a muy pocos tipos. ¿Se refería a usar el tipo 'any' en realidad?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Las marcas Unicode (u) y Unicode Sets (v) no se pueden establecer simultáneamente.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "No se puede hacer referencia al objeto “arguments” en una función de flecha en ES5 ni ES5. Considere la posibilidad de usar una expresión de función estándar.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "No se puede hacer referencia al objeto “arguments” en una función o método asincrónico en ES5. Considere la posibilidad de usar un método o función estándar.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "El cuerpo de una instrucción \"if\" no puede ser la instrucción vacía.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La llamada se llevaría a cabo sin problemas en esta implementación, pero las signaturas de implementación de las sobrecargas no están visibles externamente.", + "The_character_set_of_the_input_files_6163": "Conjunto de caracteres de los archivos de entrada.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La función de flecha contenedora captura el valor global de \"this\".", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "El cuerpo de la función o del módulo contenedor es demasiado grande para realizar un análisis de flujo de control.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "El archivo actual es un módulo CommonJS y no puede usar \"await\" en el nivel superior.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "El archivo actual es un módulo CommonJS cuyas importaciones generarán llamadas \"require\"; sin embargo, el archivo al que se hace referencia es un módulo ECMAScript y no se puede importar con \"require\". Considere la posibilidad de escribir una llamada dinámica \"import(\"{0}\")\" en su lugar.", + "The_current_host_does_not_support_the_0_option_5001": "El host actual no admite la opción '{0}'.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La declaración de \"{0}\" que probablemente pretendía usar se define aquí", + "The_declaration_was_marked_as_deprecated_here_2798": "La declaración se ha marcado aquí como en desuso.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "El tipo esperado procede de la propiedad \"{0}\", que se declara aquí en el tipo \"{1}\"", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "El tipo esperado procede del tipo de valor devuelto de esta signatura.", + "The_expected_type_comes_from_this_index_signature_6501": "El tipo esperado procede de esta signatura de índice.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "La expresión de una asignación de exportación debe ser un identificador o un nombre completo en un contexto de ambiente.", + "The_file_is_in_the_program_because_Colon_1430": "El archivo está en el programa porque:", + "The_files_list_in_config_file_0_is_empty_18002": "La lista de archivos del archivo de configuración '{0}' está vacía.", + "The_first_export_default_is_here_2752": "El primer elemento export default está aquí.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "El primer parámetro del método \"then\" de una promesa debe ser una devolución de llamada.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "El tipo \"JSX.{0}\" global no puede tener más de una propiedad.", + "The_implementation_signature_is_declared_here_2750": "La signatura de implementación se declara aquí.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "No se permite la metapropiedad \"import.meta\" en archivos que se compilarán en la salida de CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La metapropiedad \"import.meta\" solo se permite cuando la opción \"--module\" es \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\" o \"nodenext\".", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "No se puede asignar un nombre al tipo inferido de \"{0}\" sin una referencia a \"{1}\". Es probable que no sea portable. Se requiere una anotación de tipo.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "El tipo deducido de \"{0}\" hace referencia a un tipo con una estructura cíclica que no se puede serializar trivialmente. Es necesaria una anotación de tipo.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "El tipo inferido de \"{0}\" hace referencia a un tipo \"{1}\" no accesible. Se requiere una anotación de tipo.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "El tipo inferido de este nodo supera la longitud máxima que el compilador podrá serializar. Se necesita una anotación de tipo explícito.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "El inicializador de una declaración “using” debe ser un objeto con un método “[Symbol.dispose]()”, o ser “null” o “undefined”.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "El inicializador de una declaración “await using” debe ser un objeto con un método “[Symbol.asyncDispose]()” o “[Symbol.dispose]()”, o ser “null” o “undefined”.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" existe en varios constituyentes y es privada en algunos de ellos.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "La intersección \"{0}\" se redujo a \"never\" porque la propiedad \"{1}\" tiene tipos en conflicto en algunos constituyentes.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La palabra clave \"intrinsic\" solo se puede usar para declarar tipos intrínsecos proporcionados por el compilador.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Se debe proporcionar la opción del compilador \"jsxFragmentFactory\" para usar fragmentos de JSX con la opción del compilador \"jsxFactory\".", + "The_last_overload_gave_the_following_error_2770": "La última sobrecarga dio el error siguiente.", + "The_last_overload_is_declared_here_2771": "La última sobrecarga se declara aquí.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte izquierda de una instrucción \"for...in\" no puede ser un patrón de desestructuración.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "El lado izquierdo de un “for...in” no puede ser una declaración “using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "El lado izquierdo de una instrucción “for...in” no puede ser una declaración “await using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La parte izquierda de una instrucción \"for...in\" no puede usar una anotación de tipo.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte izquierda de una instrucción \"for...in\" no puede ser un acceso de propiedad opcional.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte izquierda de una instrucción 'for...in' debe ser una variable o el acceso a una propiedad.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte izquierda de una instrucción \"for...in\" debe ser de tipo \"string\" o \"any\".", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La parte izquierda de una instrucción \"for...of\" no puede usar una anotación de tipo.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte izquierda de una instrucción \"for...of\" no puede ser un acceso de propiedad opcional.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "El lado izquierdo de una instrucción de \"para... de\" puede no ser \"async\".", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte izquierda de una instrucción 'for...of' debe ser una variable o el acceso a una propiedad.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte izquierda de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte izquierda de una expresión de asignación no puede ser un acceso de propiedad opcional.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte izquierda de una expresión de asignación debe ser una variable o el acceso a una propiedad.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "El lado izquierdo de una expresión “instanceof” debe poder asignarse al primer argumento del método “[Symbol.hasInstance]” del lado derecho.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte izquierda de una expresión \"instanceof\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Configuración regional utilizada para mostrar los mensajes al usuario (por ejemplo, \"es-es\")", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "La profundidad máxima de dependencia para buscar en node_modules y cargar los archivos de JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "El operando de un operador \"delete\" no puede ser un identificador privado.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "El operando de un operador \"delete\" no puede ser una propiedad de solo lectura.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "El operando de un operador \"delete\" debe ser una referencia de propiedad.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "El operando de un operador \"delete\" debe ser opcional.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "El operando de un operador de incremento o decremento no puede ser un acceso de propiedad opcional.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "El operando de un operador de incremento o decremento debe ser una variable o el acceso a una propiedad.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "El analizador esperaba encontrar un elemento \"{1}\" que coincidiera con el token \"{0}\" aquí.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de exportación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La raíz del proyecto es ambigua, pero es necesaria para resolver la entrada de asignación de importación \"{0}\" en el archivo \"{1}\". Proporcione la opción del compilador \"rootDir\" para eliminar la ambigüedad.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "No se puede acceder a la propiedad \"{0}\" en el tipo \"{1}\" de esta clase porque se ha reemplazado por otro identificador privado con la misma ortografía.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "El tipo de valor devuelto de una función Decorator de parámetro debe ser \"void\" o \"any\".", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "El tipo de valor devuelto de una función Decorator de propiedad debe ser \"void\" o \"any\".", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "El tipo de valor devuelto de una función asincrónica debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise global. ¿Pretendía escribir \"Promise<{0}>\"?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte derecha de una instrucción \"for...in\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo, pero aquí tiene el tipo \"{0}\".", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte derecha de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "El lado derecho de una expresión “instanceof” debe ser de tipo “any”, una clase, función u otro tipo asignable al tipo de interfaz “Function”, o un tipo de objeto con un método “Symbol.hasInstance”.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "El lado derecho de una expresión “instanceof” no debe ser una expresión de creación de instancias.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "El valor raíz de un archivo \"{0}\" debe ser un objeto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "El runtime invocará el decorador con argumentos {1}, pero el decorador espera al menos {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "La declaración que ensombrece a \"{0}\" se define aquí.", + "The_signature_0_of_1_is_deprecated_6387": "La signatura \"{0}\" de \"{1}\" está en desuso.", + "The_specified_path_does_not_exist_Colon_0_5058": "La ruta de acceso especificada no existe: \"{0}\".", + "The_tag_was_first_specified_here_8034": "La etiqueta se especificó aquí primero.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "El destino de una asignación rest de objeto no puede ser un acceso de propiedad opcional.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "El destino de una asignación de reposo de objetos debe ser una variable o un acceso a propiedad.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "El contexto 'this' de tipo '{0}' no se puede asignar al contexto 'this' de tipo '{1}' del método.", + "The_this_types_of_each_signature_are_incompatible_2685": "Los tipos 'this' de cada signatura son incompatibles.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "El tipo \"{0}\" es \"readonly\" y no se puede asignar al tipo mutable \"{1}\".", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "El modificador 'tipo' no se puede usar en una exportación con nombre cuando se usa 'exportar tipo' en su instrucción exportar.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "El modificador 'tipo' no se puede usar en una importación con nombre cuando se usa 'exportar tipo' en su instrucción importar.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "No se ha podido serializar el tipo de este nodo porque su propiedad '{0}' no se puede serializar.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "El tipo devuelto por el método \"{0}()\" de un iterador de asincronía debe ser una promesa para un tipo con una propiedad \"value\".", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "El tipo devuelto por el método \"{0}()\" de un iterador debe tener una propiedad \"value\".", + "The_types_of_0_are_incompatible_between_these_types_2200": "Los tipos de \"{0}\" son incompatibles entre estos tipos.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Los tipos que \"{0}\" devuelve son incompatibles entre estos tipos.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "El valor \"{0}\" no se puede usar aquí.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La declaración de variable de una instrucción \"for...in\" no puede tener un inicializador.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La declaración de variable de una instrucción \"for...of\" no puede tener un inicializador.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "No se admite la instrucción 'with'. Todos los símbolos de un bloque 'with' tendrán el tipo 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Hay tipos en “{0}”, pero este resultado no se pudo resolver en la configuración actual de “moduleResolution”. Considere la posibilidad de actualizar a “node16”, “nodenext” o “bundler”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Hay tipos en “{0}”, pero este resultado no se pudo resolver al respetar \"exports\" de package.json. Es posible que la biblioteca “{1}” necesite actualizar sus package.json o tipos.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "No hay ningún grupo de captura denominado “{0}” en esta expresión regular.", + "There_is_nothing_available_for_repetition_1507": "No hay nada disponible para la repetición.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Esta etiqueta JSX requiere que \"{0}\" esté en el ámbito, pero no se encontró.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Esta etiqueta JSX requiere que exista la ruta de acceso del módulo \"{0}\", pero no se encontró ninguna. Asegúrese de que tiene instalados los tipos para el paquete adecuado.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propiedad \"{0}\" de esta etiqueta de JSX espera un solo elemento secundario de tipo \"{1}\", pero se han proporcionado varios elementos secundarios.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propiedad \"{0}\" de esta etiqueta de JSX espera el tipo \"{1}\", que requiere varios elementos secundarios, pero solo se ha proporcionado un elemento secundario.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Esta referencia inversa hace referencia a un grupo que no existe. No hay grupos de captura en esta expresión regular.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Esta referencia inversa hace referencia a un grupo que no existe. Solo hay {0} grupos de captura en esta expresión regular.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Esta expresión binaria nunca acepta valores NULL. ¿Faltan paréntesis?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este carácter no se puede escapar en una expresión regular.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparación parece no intencionada porque los tipos \"{0}\" y \"{1}\" no tienen superposición.", + "This_condition_will_always_return_0_2845": "Esta condición siempre devolverá \"{0}\".", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Esta condición siempre devolverá \"{0}\", ya que JavaScript compara objetos por referencia, no por valor.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condición devolverá siempre true porque siempre se define '{0}'.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condición siempre devolverá true, porque esta función se define siempre. ¿Pretendía llamarla en su lugar?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta función de constructor puede convertirse en una declaración de clase.", + "This_expression_is_always_nullish_2871": "Esta expresión siempre acepta valores NULL.", + "This_expression_is_never_nullish_2881": "Esta expresión nunca es nula.", + "This_expression_is_not_callable_2349": "No se puede llamar a esta expresión.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "No se puede llamar a esta expresión porque es un descriptor de acceso \"get\". ¿Pretendía usarlo sin \"()\"?", + "This_expression_is_not_constructable_2351": "No se puede construir esta expresión.", + "This_file_already_has_a_default_export_95130": "Este archivo ya tiene una exportación predeterminada", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Esta ruta de acceso de importación no es segura de reescribir porque se resuelve en otro proyecto y la ruta de acceso relativa entre los archivos de salida de los proyectos no es la misma que la ruta de acceso relativa entre sus archivos de entrada.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Esta importación usa una extensión \"{0}\" para resolver en un archivo TypeScript de entrada, pero no se reescribe durante la emisión porque no es una ruta de acceso relativa.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta es la declaración que se está aumentando. Considere la posibilidad de mover la declaración en aumento al mismo archivo.", + "This_kind_of_expression_is_always_falsy_2873": "Este tipo de expresión siempre es falso.", + "This_kind_of_expression_is_always_truthy_2872": "Este tipo de expresión siempre es cierto.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Puede convertirse en una función asincrónica.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque no se declara en la clase base '{0}'.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Este miembro no puede tener un comentario JSDoc con una etiqueta 'override' porque no se declara en la clase base '{0}'. ¿Quería decir '{1}'?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque su clase contenedora '{0}' no extiende otra clase.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Este miembro no puede tener un comentario JSDoc con una etiqueta '@override' porque su nombre es dinámico.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\".", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\". ¿Quizá quiso decir \"{1}\"?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este miembro no puede tener un modificador \"override\" porque su clase contenedora \"{0}\" no extiende otra clase.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Este miembro no puede tener un modificador 'override' porque su nombre es dinámico.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Este miembro debe tener un comentario JSDoc con una etiqueta '@override' porque invalida un miembro de la clase base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este miembro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este miembro debe tener un modificador \"override\" porque reemplaza a un método abstracto que se declara en la clase base \"{0}\".", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Solo se puede hacer referencia a este módulo con las importaciones o exportaciones de ECMAScript mediante la activación de la marca \"{0}\" y la referencia a su exportación predeterminada.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo se declara con \"export =\" y solo se puede usar con una importación predeterminada cuando se usa la marca \"{0}\".", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Esta operación se puede simplificar. Este turno es idéntico a \"{0} {1} {2}\".", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Esta sobrecarga devuelve implícitamente el tipo “{0}” porque carece de una anotación de tipo de valor devuelto.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta signatura de sobrecarga no es compatible con su signatura de implementación.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parámetro no se permite con la directiva \"use strict\".", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Esta propiedad de parámetro debe tener un comentario JSDoc con una etiqueta '@override' porque invalida un miembro de la clase base '{0}'.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propiedad de parámetro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esta marca de expresión regular no se puede alternar dentro de un subpatrón.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esta marca de expresión regular solo está disponible cuando el destino es “{0}” o posterior.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Esta ruta de acceso de importación relativa no es segura de reescribir porque parece un nombre de archivo, pero realmente se resuelve en \"{0}\".", + "This_spread_always_overwrites_this_property_2785": "Este elemento de propagación siempre sobrescribe esta propiedad.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Esta sintaxis no se permite cuando \"erasableSyntaxOnly\" está habilitado.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Esta sintaxis está reservada en archivos con la extensión .mts o .CTS. Agregue una coma o una restricción explícita al final.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Esta sintaxis se reserva a archivos con la extensión .mts o .cts. En su lugar, use una expresión \"as\".", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Esta sintaxis requiere un asistente importado, pero no se puede encontrar el módulo \"{0}\".", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxis requiere una aplicación auxiliar importada denominada \"{1}\", que no existe en \"{0}\". Considere la posibilidad de actualizar la versión de \"{0}\".", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxis requiere un asistente importado denominado \"{1}\" con parámetros de {2}, que no es compatible con el de \"{0}\". Pruebe a actualizar la versión de \"{0}\".", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Este parámetro de tipo podría necesitar una restricción \"extends {0}\".", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Este uso de \"import\" no es válido. Se pueden escribir llamadas \"import()\", pero deben tener paréntesis y no pueden tener argumentos de tipo.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Para convertir este archivo en un módulo ECMAScript, agregue el campo `\"type\": \"module\"` a \"{0}\"'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o agregue el campo `\"type\": \"module\"` a \"{1}\".", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para convertir este archivo en un módulo ECMAScript, cambie su extensión de archivo a \"{0}\" o cree un archivo package.json local con '{ \"type\": \"module\" }'.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para convertir este archivo en un módulo ECMAScript, cree un archivo package.json local con `{ \"type\": \"module\" }`.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Las expresiones \"await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Las instrucciones \"await using\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Las declaraciones de nivel superior de los archivos .d.ts deben comenzar con un modificador \"declare\" o \"export\".", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Los bucles \"for await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" o \"preserve\", y la opción \"target\" se establece en \"es2017\" o superior.", + "Trailing_comma_not_allowed_1009": "No se permite la coma final.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilar cada archivo como un módulo aparte (parecido a \"ts.transpileModule\").", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Pruebe \"npm i --save-dev @types/{1}\" si existe o agregue un nuevo archivo de declaración (.d.ts) que incluya \"declare module '{0}';\".", + "Trying_other_entries_in_rootDirs_6110": "Se probarán otras entradas de \"rootDirs\".", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Probando la sustitución '{0}', ubicación candidata para el módulo: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "El tipo de tupla \"{0}\" de longitud \"{1}\" no tiene ningún elemento en el índice \"{2}\".", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Los argumentos de tipo de tupla se hacen referencia a sí mismos de forma circular.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "El tipo \"{0}\" solo puede iterarse cuando se usa la marca \"--downlevelIteration\" o con un valor \"--target\" de \"es2015\" o superior.", + "Type_0_cannot_be_used_as_an_index_type_2538": "El tipo '{0}' no se puede usar como tipo de índice.", + "Type_0_cannot_be_used_to_index_type_1_2536": "El tipo '{0}' no se puede usar para indexar el tipo '{1}'.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "El tipo '{0}' no cumple la restricción '{1}'.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "El tipo \"{0}\" no satisface el tipo esperado \"{1}\".", + "Type_0_has_no_call_signatures_2757": "El tipo \"{0}\" no tiene signaturas de llamada.", + "Type_0_has_no_construct_signatures_2761": "El tipo \"{0}\" no tiene signaturas de construcción.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "El tipo '{0}' no tiene una signatura de índice correspondiente al tipo '{1}'.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "El tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\".", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "El tipo \"{0}\" no tiene firmas para las que sea aplicable la lista de argumentos de tipo.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "El tipo “{0}” es genérico y solo se puede indizar para lectura.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Al tipo \"{0}\" le faltan las propiedades siguientes del tipo \"{1}\": {2} y {3} más.", + "Type_0_is_not_a_constructor_function_type_2507": "El tipo '{0}' no es un tipo de función de constructor.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "El tipo “{0}” no es un tipo de valor devuelto válido para una función asincrónica en ES5, porque no hace referencia a un valor de constructor compatible con promesas.", + "Type_0_is_not_an_array_type_2461": "'{0}' no es un tipo de matriz.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' no es un tipo de matriz o un tipo de cadena.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "El tipo \"{0}\" no es un tipo de matriz o un tipo de cadena o no tiene un método \"[Symbol.iterator]()\" que devuelve un iterador.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "El tipo \"{0}\" no es un tipo de matriz o no tiene un método \"[Symbol.iterator]()\" que devuelve un iterador.", + "Type_0_is_not_assignable_to_type_1_2322": "El tipo '{0}' no se puede asignar al tipo '{1}'.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "El tipo '{0}' no se puede asignar al tipo '{1}'. ¿Quería decir \"{2}\"?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "El tipo \"{0}\" no se puede asignar al tipo \"{1}\". Existen dos tipos distintos con este nombre, pero no están relacionados.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "El tipo “{0}” no se puede asignar al tipo “{1}”, tal y como implica la anotación de desviación.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "El tipo “{0}” no se puede asignar al tipo “{1}” según sea necesario para los valores de miembro de enumeración calculados.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" a los tipos de propiedades del destino.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "El tipo '{0}' no se puede asignar al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Considere la posibilidad de agregar \"undefined\" al tipo del destino.", + "Type_0_is_not_comparable_to_type_1_2678": "El tipo '{0}' no se puede comparar con el tipo '{1}'.", + "Type_0_is_not_generic_2315": "El tipo '{0}' no es genérico.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "El tipo \"{0}\" puede representar un valor primitivo, que no se permite como operando derecho del operador \"in\".", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "El tipo \"{0}\" debe tener un método \"[Symbol.asyncIterator]()\" que devuelve un iterador de asincronía.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "El tipo \"{0}\" debe tener un método \"[Symbol.iterator]()\" que devuelve un iterador.", + "Type_0_provides_no_match_for_the_signature_1_2658": "El tipo \"{0}\" no proporciona ninguna coincidencia para la signatura \"{1}\".", + "Type_0_recursively_references_itself_as_a_base_type_2310": "El tipo '{0}' se hace referencia a sí mismo de forma recursiva como tipo base.", + "Type_Checking_6248": "Comprobación de tipos", + "Type_alias_0_circularly_references_itself_2456": "El alias de tipo '{0}' se hace referencia a sí mismo de forma circular.", + "Type_alias_must_be_given_a_name_1439": "Se debe asignar un nombre al alias de tipo.", + "Type_alias_name_cannot_be_0_2457": "El nombre del alias de tipo no puede ser \"{0}\".", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Los alias de tipo solo se pueden usar en los archivos TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Una anotación de tipo no puede aparecer en una declaración de constructor.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Las anotaciones de tipo solo se pueden usar en los archivos TypeScript.", + "Type_argument_expected_1140": "Se esperaba un argumento de tipo.", + "Type_argument_list_cannot_be_empty_1099": "La lista de argumentos de tipo no puede estar vacía.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Los argumentos de tipo solo se pueden usar en los archivos TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Los argumentos de tipo de \"{0}\" se hacen referencia a sí mismos de forma circular.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Las expresiones de aserción de tipo solo se pueden usar en los archivos TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "El tipo en la posición {0} del origen no es compatible con el tipo en la posición {1} del destino.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "El tipo en las posiciones {0} a {1} del origen no es compatible con el tipo en la posición {2} del destino.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "El tipo que contiene el nombre privado “{0}” no se puede usar con --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Archivos de declaración de tipos que se incluirán en la compilación.", + "Type_expected_1110": "Se esperaba un tipo.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Las aserciones de importación de tipos deben tener exactamente una clave - \"resolution-mode\" - con el valor \"import\" o \"require\".", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "La importación de tipos de un módulo ECMAScript desde un módulo CommonJS debe tener un atributo \"resolution-mode\".", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creación de una instancia de tipo es excesivamente profunda y posiblemente infinita.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Se hace referencia al tipo directa o indirectamente en la devolución de llamada de entrega de su propio método \"then\".", + "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\" con el valor packageId \"{2}\"", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "El tipo de operando \"await\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "El tipo de valor de la propiedad calculada es \"{0}\", que no se puede asignar al tipo \"{1}\".", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "El tipo de variable miembro de instancia \"{0}\" no puede hacer referencia al identificador \"{1}\" declarado en el constructor.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "El tipo de elementos iterados de un operando \"yield*\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "El tipo de propiedad \"{0}\" hace referencia circular a sí misma en el tipo asignado \"{1}\".", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "El tipo de operando \"yield\" en un generador asincrónico debe ser una promesa válida o no debe contener un miembro \"then\" invocable.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "La importación de solo tipo de un módulo ECMAScript desde un módulo CommonJS debe tener un atributo \"resolution-mode\".", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "El tipo se origina en esta importación. No se puede construir ni llamar a una importación de estilo de espacio de nombres y provocará un error en tiempo de ejecución. Considere la posibilidad de usar una importación predeterminada o require aquí en su lugar.", + "Type_parameter_0_has_a_circular_constraint_2313": "El parámetro de tipo '{0}' tiene una restricción circular.", + "Type_parameter_0_has_a_circular_default_2716": "El parámetro de tipo \"{0}\" tiene un valor circular predeterminado.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "El parámetro de tipo '{0}' de la signatura de llamada de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "El parámetro de tipo '{0}' de la signatura de constructor de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "El parámetro de tipo '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "El parámetro de tipo '{0}' de la función exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "El parámetro de tipo '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "El parámetro de tipo \"{0}\" del tipo de objeto asignado exportado usa un nombre privado \"{1}\".", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "El parámetro de tipo '{0}' del alias del tipo exportado tiene o usa un nombre privado '{1}'.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "El parámetro de tipo '{0}' del método de la interfaz exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "El parámetro de tipo '{0}' del método público de la clase exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "El parámetro de tipo '{0}' del método estático público de la clase exportada tiene o usa el nombre privado '{1}'.", + "Type_parameter_declaration_expected_1139": "Se esperaba una declaración de parámetros de tipo.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Las declaraciones de parámetros de tipo solo se pueden usar en los archivos TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Los valores predeterminados del parámetro de tipo solo pueden hacer referencia a parámetros de tipo declarados previamente.", + "Type_parameter_list_cannot_be_empty_1098": "La lista de parámetros de tipo no puede estar vacía.", + "Type_parameter_name_cannot_be_0_2368": "El nombre del parámetro de tipo no puede ser \"{0}\".", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Los parámetros de tipo no pueden aparecer en una declaración de constructor.", + "Type_predicate_0_is_not_assignable_to_1_1226": "El predicado de tipo '{0}' no se puede asignar a '{1}'.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "El tipo genera un tipo de tupla demasiado grande para representarlo.", + "Type_reference_directive_0_was_not_resolved_6120": "======== No se resolvió la directiva de referencia de tipo '{0}'. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directiva de referencia de tipo '{0}' se resolvió correctamente como '{1}', principal: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directiva de referencia de tipo \"{0}\" se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\", principal: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Las expresiones de satisfacción de tipo solo se pueden usar en archivos TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Los tipos no pueden aparecer en declaraciones de exportación en archivos JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Los tipos tienen declaraciones independientes de una propiedad '{0}' privada.", + "Types_of_construct_signatures_are_incompatible_2419": "Los tipos de signaturas de construcción son incompatibles.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Los tipos de parámetros '{0}' y '{1}' no son compatibles.", + "Types_of_property_0_are_incompatible_2326": "Los tipos de propiedad '{0}' no son compatibles.", + "Unable_to_open_file_0_6050": "No se puede abrir el archivo '{0}'.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "No se puede resolver la signatura de elemento Decorator de una clase cuando se llama como expresión.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "No se puede resolver la signatura de elemento Decorator de un método cuando se llama como expresión.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "No se puede resolver la signatura de elemento Decorator de un parámetro cuando se llama como expresión.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "No se puede resolver la signatura de elemento Decorator de una propiedad cuando se llama como expresión.", + "Undetermined_character_escape_1513": "Escape de caracteres no determinado.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "“{0}” inesperado. ¿Desea escaparlo con barra diagonal inversa?", + "Unexpected_end_of_text_1126": "Final de texto inesperado.", + "Unexpected_keyword_or_identifier_1434": "Identificador o palabra clave inesperados.", + "Unexpected_token_1012": "Token inesperado.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Se esperaba un constructor, un método, un descriptor de acceso o una propiedad.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Se esperaba un nombre de parámetro de tipo sin llaves.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. ¿Pretendía usar \"{'>'}\" o \">\"?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. ¿Pretendía usar \"{'}'}\" o \"}\"?", + "Unexpected_token_expected_1179": "Token inesperado. Se esperaba \"{\".", + "Unicode_escape_sequence_cannot_appear_here_17021": "La secuencia de escape Unicode no puede aparecer aquí.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Las secuencias de escape Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Las expresiones de valor de propiedad Unicode solo están disponibles cuando se establecen las marcas Unicode (u) o Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nombre de propiedad Unicode desconocido.", + "Unknown_Unicode_property_name_or_value_1529": "Nombre o valor de propiedad Unicode desconocido.", + "Unknown_Unicode_property_value_1526": "Valor de propiedad Unicode desconocido.", + "Unknown_build_option_0_5072": "Opción de compilación \"{0}\" desconocida.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Opción de compilación \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", + "Unknown_compiler_option_0_5023": "Opción '{0}' del compilador desconocida.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opción del compilador \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Identificador o palabra clave desconocidos. ¿Quiso decir \"{0}\"?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opción 'excludes' desconocida. ¿Quería decir 'exclude'?", + "Unknown_regular_expression_flag_1499": "Marca de expresión regular desconocida.", + "Unknown_type_acquisition_option_0_17010": "Opción '{0}' de adquisición de tipos desconocida.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opción de adquisición de tipos \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", + "Unknown_watch_option_0_5078": "Opción de inspección \"{0}\" desconocida.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Opción de inspección \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?", + "Unreachable_code_detected_7027": "Se ha detectado código inaccesible.", + "Unterminated_Unicode_escape_sequence_1199": "Secuencia de escape Unicode sin terminar.", + "Unterminated_quoted_string_in_response_file_0_6045": "Cadena entrecomillada sin terminar en el archivo de respuesta '{0}'.", + "Unterminated_regular_expression_literal_1161": "Literal de expresión regular sin terminar.", + "Unterminated_string_literal_1002": "Literal de cadena sin terminar.", + "Unterminated_template_literal_1160": "Literal de plantilla sin terminar.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Las llamadas a función sin tipo no pueden aceptar argumentos de tipo.", + "Unused_label_7028": "Etiqueta no usada.", + "Unused_ts_expect_error_directive_2578": "Directiva \"@ts-expect-error\" no usada.", + "Update_import_from_0_90058": "Actualizar importación desde “{0}”", + "Update_modifiers_of_0_90061": "Actualizar modificadores de “{0}”", + "Updating_output_timestamps_of_project_0_6359": "Actualizando las marcas de hora de salida del proyecto \"{0}\"...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Actualizando las marcas de hora de salida no modificadas del proyecto \"{0}\"...", + "Use_0_95174": "Usar `{0}`.", + "Use_0_instead_5106": "Use “{0}” en su lugar.", + "Use_Number_isNaN_in_all_conditions_95175": "Use \"Number.isNaN\" en todas las condiciones.", + "Use_element_access_for_0_95145": "Usar acceso de elemento para \"{0}\"", + "Use_element_access_for_all_undeclared_properties_95146": "Use el acceso de elemento para todas las propiedades no declaradas.", + "Use_import_type_95180": "Usar “import type”", + "Use_synthetic_default_member_95016": "Use el miembro sintético \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use el campo “exports” de package.json al resolver las importaciones de paquetes.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use el campo “imports” de package.json al resolver importaciones.", + "Use_type_0_95181": "Usar “type {0}”", + "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subruta '{1}' con destino '{2}'.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "El uso de fragmentos JSX requiere que el generador de fragmentos \"{0}\" esté en el ámbito, pero no se encontró.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "El uso de una cadena en una instrucción \"for...of\" solo se admite en ECMAScript 5 y versiones posteriores.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Con --build, -b hará que tsc se comporte más como un orquestador de compilación que como un compilador. Se usa para desencadenar la compilación de proyectos compuestos, sobre los que puede obtener más información en {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Uso de las opciones del compilador de redireccionamiento de la referencia del proyecto \"{0}\".", + "VERSION_6036": "VERSIÓN", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "El valor de tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\". ¿Realmente quiere llamarlo?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "No se puede llamar a un valor de tipo '{0}'. ¿Pretendía incluir \"new\"?", + "Variable_0_implicitly_has_an_1_type_7005": "La variable '{0}' tiene un tipo '{1}' implícitamente.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variable \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variable \"{0}\" tiene un tipo \"{1}\" de forma implícita en algunas ubicaciones, pero se puede inferir un tipo más adecuado a partir del uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variable '{0}' tiene implícitamente el tipo '{1}' en algunos sitios donde no se puede determinar su tipo.", + "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' se usa antes de asignarla.", + "Variable_declaration_expected_1134": "Se esperaba una declaración de variable.", + "Variable_declaration_list_cannot_be_empty_1123": "La lista de declaraciones de variable no puede estar vacía.", + "Variable_declaration_not_allowed_at_this_location_1440": "No se permite una declaración de variable en esta ubicación.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable debe tener una anotación de tipo explícita con --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Las variables con varias declaraciones no se pueden insertar.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "El elemento variádico en la posición {0} del origen no coincide con el elemento en la posición {1} del destino.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Las anotaciones de varianza solo se admiten en alias de tipo para los tipos objeto, función, constructor y asignado.", + "Version_0_6029": "Versión {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visite https://aka.ms/ts6 para obtener información sobre la migración.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig para obtener más información acerca de este archivo", + "WATCH_OPTIONS_6918": "OPCIONES DE INSPECCIÓN", + "Watch_and_Build_Modes_6250": "Modos de compilación e inspección", + "Watch_input_files_6005": "Inspeccionar archivos de entrada.", + "Watch_option_0_requires_a_value_of_type_1_5080": "La opción \"{0}\" de inspección requiere un valor de tipo {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Solo se puede escribir un tipo para '{0}' agregando aquí un tipo para todo el parámetro.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Al asignar funciones, compruebe que efectivamente los parámetros y los valores devueltos son compatibles con el subtipo.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Al comprobar tipos, tenga en cuenta \"null\" y \"undefined\".", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Si se debe mantener la salida de la consola no actualizada en el modo de inspección en lugar de borrar la pantalla.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos los caracteres no válidos en un contenedor de expresiones", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Incluir todas las expresiones de decorador no válidas entre paréntesis", + "Wrap_all_object_literal_with_parentheses_95116": "Encapsular todos los literales de objeto entre paréntesis", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Encapsular todos los JSX no primarios en el fragmento de JSX", + "Wrap_in_JSX_fragment_95120": "Ajustar en fragmento de JSX", + "Wrap_in_parentheses_95194": "Incluir entre paréntesis", + "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular el carácter no válido en un contenedor de expresiones", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Encapsular el cuerpo siguiente entre paréntesis, lo cual debe ser un literal de objeto", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Puede obtener información sobre todas las opciones del compilador en {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "No se puede cambiar el nombre de un módulo mediante una importación global.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "No se puede cambiar el nombre de los elementos definidos en una carpeta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "No se puede cambiar el nombre de los elementos definidos en otra carpeta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "No se puede cambiar el nombre de elementos definidos en la biblioteca TypeScript estándar.", + "You_cannot_rename_this_element_8000": "No se puede cambiar el nombre a este elemento.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" no acepta suficientes argumentos para utilizarse como decorador aquí. ¿Pretendía llamar primero y escribir \"@{0}()\"?", + "_0_and_1_index_signatures_are_incompatible_2330": "Las signaturas de índice \"{0}\" y \"{1}\" no son compatibles.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Las operaciones \"{0}\" y \"{1}\" no se pueden mezclar sin paréntesis.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" se especifica dos veces. El atributo denominado \"{0}\" se sobrescribirá.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "“{0}” al final de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "“{0}” al principio de un tipo no es una sintaxis de TypeScript válida. ¿Pretendía escribir “{1}”?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" solo se puede importar si se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "\"{0}\" solo se puede importar si se usa una importación predeterminada.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "\"{0}\" solo se puede importar si se usa una llamada a \"require\" o una importación predeterminada.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o una importación predeterminada.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "\"{0}\" solo se puede importar si se usa \"import {1} = require({2})\" o bien se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.", + "_0_cannot_be_used_as_a_JSX_component_2786": "No se puede usar \"{0}\" como componente JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "No se puede usar \"{0}\" como valor porque se exportó mediante \"export type\".", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "No se puede usar \"{0}\" como valor porque se importó mediante \"import type\".", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Los componentes \"{0}\" no aceptan el texto como elemento secundario. El texto de JSX tiene el tipo \"string\", pero el tipo que se esperaba de \"{1}\" es \"{2}\".", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Puede crearse una instancia de \"{0}\" con un tipo arbitrario que podría no estar relacionado con \"{1}\".", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Las declaraciones “{0}” solo se pueden declarar dentro de un bloque.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Las declaraciones \"{0}\" solo se pueden usar en los archivos TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Las declaraciones “{0}” no pueden tener patrones de enlace.", + "_0_declarations_must_be_initialized_1155": "Las declaraciones “{0}” deben inicializarse.", + "_0_expected_1005": "Se esperaba '{0}'.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}” tiene un tipo de cadena, pero debe tener sintaxis de cadena reconocible sintácticamente cuando “isolatedModules” está habilitado.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "\"{0}\" no tiene ningún miembro exportado con el nombre \"{1}\". ¿Pretendía usar \"{2}\"?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" tiene un tipo de valor devuelto \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a este directa o indirectamente en una de sus expresiones return.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo y se hace referencia a este directa o indirectamente en su propio inicializador.", + "_0_index_signatures_are_incompatible_2634": "Las signaturas de índice \"{0}\" no son compatibles.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "El tipo de índice \"{0}\"' \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' es un elemento primitivo, pero '{1}' es un objeto contenedor. Use '{0}' preferentemente cuando sea posible.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' es un tipo y no se puede importar en archivos JavaScript. Use '{1}' en una anotación de tipo JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}” es un tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' es un cambio de nombre de '{1}' sin usar. ¿Quería usarlo como una anotación de tipo?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" puede asignarse a la restricción de tipo \"{1}\", pero no se pudo crear una instancia de \"{1}\" con un subtipo distinto de la restricción \"{2}\".", + "_0_is_automatically_exported_here_18044": "'{0}' se exporta automáticamente aquí.", + "_0_is_declared_but_its_value_is_never_read_6133": "Se declara \"{0}\", pero su valor no se lee nunca.", + "_0_is_declared_but_never_used_6196": "\"{0}\" se declara pero nunca se utiliza.", + "_0_is_declared_here_2728": "\"{0}\" se declara aquí.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" se define como propiedad en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como descriptor de acceso.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" se define como descriptor de acceso en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como propiedad de instancia.", + "_0_is_deprecated_6385": "\"{0}\" está en desuso.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" no es una propiedad Meta válida para la palabra clave \"{1}\". ¿Pretendía usar \"{2}\"?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "No se permite “{0}” como nombre de parámetro.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "No se permite \"{0}\" como nombre de declaración de variable.", + "_0_is_of_type_unknown_18046": "\"{0}\" es de tipo \"unknown\".", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "\"{0}\" es posiblemente \"null\".", + "_0_is_possibly_null_or_undefined_18049": "\"{0}\" es posiblemente \"null\" o \"undefined\".", + "_0_is_possibly_undefined_18048": "\"{0}\" es posiblemente \"undefined\".", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Se hace referencia a '{0}' directa o indirectamente en su propia expresión base.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Se hace referencia a '{0}' directa o indirectamente en su propia anotación de tipo.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" se ha especificado más de una vez, por lo que se sobrescribirá este uso.", + "_0_list_cannot_be_empty_1097": "La lista '{0}' no puede estar vacía.", + "_0_modifier_already_seen_1030": "El modificador '{0}' ya se ha visto.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una clase, interfaz o alias de tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "El modificador “{0}” solo puede aparecer en un parámetro de tipo de una función, método o clase", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "El modificador '{0}' no puede aparecer en una declaración de constructor.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "El modificador '{0}' no puede aparecer en un módulo o un elemento de espacio de nombres.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "El modificador '{0}' no puede aparecer en un parámetro.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "El modificador '{0}' no puede aparecer en un miembro de tipo.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "El modificador “{0}” no puede aparecer en un parámetro de tipo", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "El modificador “{0}” no puede aparecer en una declaración “using”.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "El modificador “{0}” no puede aparecer en una declaración “await using”.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "El modificador '{0}' no puede aparecer en una signatura de índice.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "El modificador \"{0}\" no puede aparecer en elementos de clase de este tipo.", + "_0_modifier_cannot_be_used_here_1042": "El modificador '{0}' no se puede usar aquí.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "El modificador '{0}' no se puede usar en un contexto de ambiente.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "El modificador '{0}' no se puede usar con el modificador '{1}'.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "El modificador \"{0}\" no se puede usar con un identificador privado.", + "_0_modifier_must_precede_1_modifier_1029": "El modificador \"{0}\" debe preceder al modificador \"{1}\".", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}” debe ir seguido de una expresión de valor de propiedad Unicode entre llaves.", + "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" necesita una anotación de tipo explícito.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' solo hace referencia a un tipo, pero aquí se usa como espacio de nombres.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' solo hace referencia a un tipo, pero aquí se usa como valor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" solo hace referencia a un tipo, pero aquí se usa como valor. ¿Pretendía usar \"{1} en {0}\"?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" solo hace referencia a un tipo, pero aquí se usa como valor. ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a es2015 o posterior.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' hace referencia a un elemento UMD global, pero el archivo actual es un módulo. Puede agregar una importación en su lugar.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" hace referencia a un valor, pero aquí se usa como tipo. ¿Quiso decir \"typeof {0}\"?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}” se resuelve en un tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}” se resuelve en una declaración de solo tipo y debe importarse mediante una importación de solo tipo cuando “verbatimModuleSyntax” está habilitado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “import type” donde se importa “{0}”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}” se resuelve en una declaración de solo tipo y debe marcarse como de solo tipo en este archivo antes de volver a exportar cuando “{1}” está habilitado. Considere la posibilidad de usar “export type { {0} as default }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}” se resuelve como una declaración de solo tipo y debe volverse a exportar con un tipo de reexportación solo cuando esté habilitada la opción “{1}”.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "\"{0}\" debe establecerse dentro del objeto \"compilerOptions\" del archivo .json de configuración", + "_0_tag_already_specified_1223": "La etiqueta '{0}' ya se ha especificado.", + "_0_was_also_declared_here_6203": "\"{0}\" también se ha declarado aquí.", + "_0_was_exported_here_1377": "\"{0}\" se ha exportado aquí.", + "_0_was_imported_here_1376": "\"{0}\" se ha importado aquí.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}' carece de una anotación de tipo de valor devuelto, pero tiene un tipo de valor devuelto '{1}' implícitamente.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" carece de una anotación de tipo de valor devuelto, pero tiene un tipo yield \"{1}\" de forma implícita.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "El modificador 'abstract' solo puede aparecer en una declaración de propiedad, clase o método.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "El modificador 'accessor' solo puede aparecer en una declaración de propiedad.", + "and_here_6204": "y aquí.", + "and_npm_install_D_types_Slashnode_6290": "y npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "No se puede hacer referencia a \"arguments\" en inicializadores de propiedades o en bloques de inicialización estática de clase.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trate los archivos con importaciones, exportaciones, import.meta, jsx (con jsx: react-jsx) o formato esm (con el módulo: node16+) como módulos.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "La expresión “await” no se puede usar dentro de un bloque estático de clase.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Las expresiones \"await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Las expresiones \"await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Las expresiones \"await\" no se pueden usar en un inicializador de parámetros.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" no tiene efecto en el tipo de esta expresión.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "No se permiten declaraciones \"await using\" en contextos de ambiente.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Las declaraciones \"await using\" no se permiten en las cláusulas \"case\" o \"default\", a menos que estén contenidas en un bloque.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Las declaraciones “await using” solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Las declaraciones “await using” solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Las instrucciones “await using” no se pueden usar dentro de un bloque estático de clase.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "La opción \"baseUrl\" está establecida en \"{0}\", se usará este valor para resolver el nombre de módulo no relativo \"{1}\".", + "c_must_be_followed_by_an_ASCII_letter_1512": "“\\c” debe ir seguido de una letra ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" solo se puede usar al principio de un archivo.", + "case_or_default_expected_1130": "Se esperaba \"case\" o \"default\".", + "catch_or_finally_expected_1472": "se esperaba \"catch\" o \"finally\".", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor no finito.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "El inicializador de miembros de enumeración \"const\" se evaluó con un valor \"NaN\" no permitido.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Los inicializadores de miembro de enumeración const deben ser expresiones constantes.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Las enumeraciones \"const\" solo se pueden usar en expresiones de acceso de propiedad o índice, o en la parte derecha de una declaración de importación, una asignación de exportación o una consulta de tipo.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "El elemento \"constructor\" no se puede usar como nombre de propiedad de parámetro.", + "constructor_is_a_reserved_word_18012": "\"#constructor\" es una palabra reservada.", + "default_Colon_6903": "predeterminadas:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "No se puede llamar a \"delete\" en un identificador en modo strict.", + "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" no vuelve a exportar una exportación predeterminada.", + "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" solo se puede usar en los archivos TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "El modificador 'export' no se puede aplicar a módulos de ambiente ni aumentos de módulos, porque siempre están visibles.", + "extends_clause_already_seen_1172": "La cláusula \"extends\" ya se ha visto.", + "extends_clause_must_precede_implements_clause_1173": "La cláusula \"extends\" debe preceder a la cláusula \"implements\".", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La cláusula \"extends\" de la clase \"{0}\" exportada tiene o usa el nombre privado \"{1}\".", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La cláusula \"extends\" de la clase exportada tiene o usa el nombre privado \"{0}\".", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La cláusula \"extends\" de la interfaz \"{0}\" exportada tiene o usa el nombre privado \"{1}\".", + "false_unless_checkJs_is_set_6932": "`false`, a menos que se establezca `checkJs`", + "false_unless_composite_is_set_6906": "\"false\", a menos que se establezca \"composite\"", + "file_6025": "archivo", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Los bucles \"for await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Los bucles \"for await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Los bucles “for await” no se pueden usar dentro de un bloque estático de clase.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Los descriptores de acceso \"get\" y \"set\" no pueden declarar parámetros \"this\".", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", si se especifica \"archivos\"; de lo contrario, \"[\"**/*\"]\"", + "implements_clause_already_seen_1175": "La cláusula \"implements\" ya se ha visto.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Las cláusulas \"implements\" solo se pueden usar en los archivos TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" solo se puede usar en los archivos TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Las declaraciones \"infer\" solo se permiten en la cláusula \"extends\" de un tipo condicional.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "“\\k” debe ir seguido de un nombre de grupo de captura entre corchetes angulares.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "No se permite usar \"let\" como nombre en las declaraciones \"let\" o \"const\".", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "La expresión \"new\", a cuyo destino le falta una signatura de construcción, tiene implícitamente un tipo \"any\".", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", más el valor de \"outDir\", si se especifica uno.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext` si `module` es `nodenext`; `node16` si `module` es `node16` o `node18`; de lo contrario, `bundler`.", + "one_of_Colon_6900": "uno de:", + "one_or_more_Colon_6901": "uno o más:", + "options_6024": "Opciones", + "or_JSX_element_expected_1145": "Se esperaba \"{\" o un elemento JSX.", + "or_expected_1144": "Se esperaba \"{\" o \";\".", + "package_json_does_not_have_a_0_field_6100": "\"package.json\" no tiene un campo \"{0}\".", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "El archivo \"package.json\" no tiene ninguna entrada \"typesVersions\" que coincida con la versión \"{0}\".", + "package_json_had_a_falsy_0_field_6220": "El archivo \"package.json\" tenía un campo \"{0}\" false.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' tiene el campo '{1}' de '{0}' que hace referencia a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "“package.json” tiene un campo “peerDependencies”.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que no es un intervalo de SemVer válido.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "El archivo \"package.json\" tiene una entrada \"typesVersions\" \"{0}\" que coincide con la versión del compilador \"{1}\"; se busca un patrón que coincida con el nombre de módulo \"{2}\".", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "El archivo \"package.json\" tiene un campo \"typesVersions\" con asignaciones de ruta de acceso específicas de la versión.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "El ámbito de búsqueda package.json scope \"{0}\" asigna explícitamente el especificador \"{1}\" a NULL.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "El ámbito package.json \"{0}\" tiene un tipo no válido para el destino del especificador \"{1}\"", + "package_json_scope_0_has_no_imports_defined_6273": "El ámbito de package.json \"{0}\" no tiene importaciones definidas.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Se ha especificado la opción 'paths'. Se buscará un patrón que coincida con el nombre de módulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "“\\q” solo está disponible dentro de la clase de caracteres.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "“\\q” debe ir seguido de alternativas de cadena entre llaves.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "El modificador 'readonly' solo puede aparecer en una declaración de propiedad o una signatura de índice.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "El modificador de tipo \"readonly\" solo se permite en los tipos literales de matriz y de tupla.", + "require_call_may_be_converted_to_an_import_80005": "La llamada a \"require\" puede convertirse en una importación.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" solo se puede establecer para importaciones solamente de tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" es la única clave válida para las aserciones de importación de tipos.", + "resolution_mode_should_be_either_require_or_import_1453": "\"modo de resolución\" debe ser \"requerir\" o \"importar\".", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Se ha establecido la opción \"rootDirs\". Se usará para resolver el nombre de módulo relativo \"{0}\".", + "super_can_only_be_referenced_in_a_derived_class_2335": "Solo se puede hacer referencia a \"super\" en una clase derivada.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Solo se puede hacer referencia a 'super' en miembros de clases derivadas o expresiones de literal de objeto.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "No se puede hacer referencia a \"super\" en un nombre de propiedad calculada.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "No se puede hacer referencia a \"super\" en argumentos de constructor.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' se permite únicamente en miembros de expresiones de literal de objeto cuando la opción 'target' es 'ES2015' o superior.", + "super_may_not_use_type_arguments_2754": "\"super\" no puede usar argumentos de tipo.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Debe llamarse a \"super\" antes de acceder a una propiedad de \"super\" en el constructor de una clase derivada.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Debe llamarse a 'super' antes de acceder a 'this' en el constructor de una clase derivada.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "\"super\" debe estar seguido de una lista de argumentos o un acceso a miembros.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "El acceso a la propiedad \"super\" se permite únicamente en un constructor, una función miembro o un descriptor de acceso de miembro de una clase derivada.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "No se puede hacer referencia a \"this\" en un nombre de propiedad calculada.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "No se puede hace referencia a \"this\" en el cuerpo de un módulo o de un espacio de nombres.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "No se puede hacer referencia a \"this\" en un inicializador de propiedad estática.", + "this_cannot_be_referenced_in_current_location_2332": "No se puede hacer referencia a \"this\" en la ubicación actual.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' tiene el tipo implícito 'any' porque no tiene una anotación de tipo.", + "true_for_ES2022_and_above_including_ESNext_6930": "\"true\" para ES2022 y versiones posteriores, incluido ESNext.", + "true_if_composite_false_otherwise_6909": "\"true\", si \"composite\"; \"false\", en caso contrario", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "“true” cuando “moduleResolution” es “node16”, “nodenext” o “bundler”; en caso contrario, “false”.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: el compilador de TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json está presente, pero no se cargará si se especifican archivos en la línea de comandos. Use '--ignoreConfig' para omitir este error.", + "type_Colon_6902": "tipo:", + "unique_symbol_types_are_not_allowed_here_1335": "Aquí no se permiten tipos \"unique symbol\".", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Los tipos \"unique symbol\" se permiten solo en variables en una instrucción de variable.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Los tipos \"unique symbol\" no se pueden utilizar en una declaración de variable con un nombre de enlace.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "La directiva \"use strict\" no se puede usar con una lista de parámetros no simples.", + "use_strict_directive_used_here_1349": "La directiva \"use strict\" se ha usado aquí.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "No se permiten declaraciones 'using' en contextos de ambiente.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Las declaraciones \"using\" no se permiten en las cláusulas \"case\" o \"default\", a menos que estén contenidas en un bloque.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "No se permiten instrucciones \"with\" en un bloque de funciones asincrónicas.", + "with_statements_are_not_allowed_in_strict_mode_1101": "No se permiten instrucciones \"with\" en modo strict.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "La expresión \"yield\" da como resultado un tipo \"any\" de forma implícita porque el generador que la contiene no tiene una anotación de tipo de valor devuelto.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Las expresiones \"yield\" no se pueden usar en un inicializador de parámetros." +} diff --git a/tsc/internal/diagnostics/loc/fr-FR.generated.json b/tsc/internal/diagnostics/loc/fr-FR.generated.json index 19f0115bfd550..00db255226470 100644 --- a/tsc/internal/diagnostics/loc/fr-FR.generated.json +++ b/tsc/internal/diagnostics/loc/fr-FR.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "TOUTES LES OPTIONS DU COMPILATEUR", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Impossible d'utiliser un modificateur '{0}' avec une déclaration d'importation.", - "A_0_parameter_must_be_the_first_parameter_2680": "Un paramètre '{0}' doit être le premier paramètre.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Une balise JSDoc « @template » ne peut pas suivre une balise « @typedef », « @callback » ou « @overload »", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commentaire JSDoc '@typedef' ne peut pas contenir plusieurs balises '@type'.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Un littéral « bigint » ne peut pas être utilisé comme nom de propriété.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Un littéral bigint ne peut pas utiliser la notation exponentielle.", - "A_bigint_literal_must_be_an_integer_1353": "Un littéral bigint doit être un entier.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un paramètre de modèle de liaison ne peut pas être facultatif dans une signature d'implémentation.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Une instruction 'break' peut être utilisée uniquement dans une itération englobante ou une instruction switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Une instruction 'break' peut accéder uniquement à une étiquette d'une instruction englobante.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Une classe de caractères ne doit pas contenir de ponctuation double réservée. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Une plage de classes de caractères ne doit pas être liée par une autre classe de caractères.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Une classe peut uniquement implémenter un identificateur/nom qualifié avec des arguments de type facultatifs.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Une classe peut implémenter uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Une classe ne peut pas étendre un type primitif comme « {0} ». Les classes peuvent uniquement étendre des valeurs pouvant être construites.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Une classe ne peut pas implémenter un type primitif tel que « {0} ». Elle ne peut implémenter que d’autres types d’objets nommés.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Une déclaration de classe sans modificateur 'default' doit porter un nom.", - "A_class_member_cannot_have_the_0_keyword_1248": "Un membre de classe ne peut pas avoir le mot clé '{0}'.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Une expression avec virgule n'est pas autorisée dans un nom de propriété calculée.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nom de propriété calculée ne peut pas référencer un paramètre de type à partir de son type conteneur.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nom de propriété calculée dans une déclaration de propriété de classe doit avoir un type littéral simple ou un type 'unique symbol'.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nom de propriété calculée dans une surcharge de méthode doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nom de propriété calculée dans un littéral de type doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nom de propriété calculée dans un contexte ambiant doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nom de propriété calculée dans une interface doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nom de propriété calculée doit être de type 'string', 'number', 'symbol' ou 'any'.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Une assertion « const » peut uniquement être appliquée aux références à des membres enum, des littéraux de chaînes, des littéraux de nombres, des littéraux de valeurs booléennes, des littéraux de tableaux ou des littéraux d'objets.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Un membre d'enum const n'est accessible qu'à l'aide d'un littéral de chaîne.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un initialiseur 'const' dans un contexte ambiant doit être un littéral de chaîne ou un littéral numérique, ou une référence à un enum littéral.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un constructeur ne peut pas contenir d'appel de 'super' quand sa classe étend 'null'.", - "A_constructor_cannot_have_a_this_parameter_2681": "Un constructeur ne peut pas avoir un paramètre 'this'.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Une instruction 'continue' peut uniquement être utilisée dans une instruction d'itération englobante.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Une instruction 'continue' peut accéder uniquement à une étiquette d'une instruction d'itération englobante.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nous ne pouvons pas importer un fichier de déclaration sans « import type ». Vouliez-vous importer un fichier d’implémentation « {0} » à la place ?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Impossible d'utiliser un modificateur 'declare' dans un contexte ambiant déjà défini.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un élément décoratif peut uniquement décorer une implémentation de méthode, pas une surcharge.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Une clause 'default' ne peut pas figurer plusieurs fois dans une instruction 'switch'.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Une exportation par défaut ne peut être utilisée que dans un module ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Une exportation par défaut doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Une assertion d'affectation définie ' !' n'est pas autorisée dans ce contexte.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Une déclaration de déstructuration doit avoir un initialiseur.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Un appel d’importation dynamique dans ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Un appel d'importation dynamique retourne 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", - "A_file_cannot_have_a_reference_to_itself_1006": "Un fichier ne peut pas contenir une référence à lui-même.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Une fonction qui retourne 'never' ne peut pas avoir de point de terminaison accessible.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Une fonction appelée avec le mot clé 'new' ne peut pas avoir un type 'this' dont la valeur est 'void'.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Une fonction dont le type déclaré n'est ni « undefined », « void » ni « any » doit renvoyer une valeur.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Un générateur ne peut pas avoir d'annotation de type 'void'.", - "A_get_accessor_cannot_have_parameters_1054": "Un accesseur 'get' ne peut pas avoir de paramètres.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un accesseur get doit être au moins aussi accessible que la méthode setter", - "A_get_accessor_must_return_a_value_2378": "Un accesseur 'get' doit retourner une valeur.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un élément de tuple étiqueté est déclaré facultatif avec un point d'interrogation après le nom et avant les deux points, plutôt qu'après le type.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un élément de tuple étiqueté est déclaré en tant que rest avec '...' avant le nom, plutôt qu'avant le type.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un type mappé ne peut pas déclarer de propriétés ou de méthodes.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un initialiseur de membre dans une déclaration d'enum ne peut pas référencer des membres déclarés après lui, notamment des membres définis dans d'autres enums.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Une classe mixin doit avoir un constructeur avec un paramètre rest unique de type 'any[]'.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Une classe mixin qui s'étend à partir d'une variable de type contenant une signature de construction abstraite doit également être déclarée 'abstract'.", - "A_module_cannot_have_multiple_default_exports_2528": "Un module ne peut pas avoir plusieurs exportations par défaut.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Une déclaration d'espace de noms ne peut pas se trouver dans un autre fichier que celui d'une classe ou d'une fonction avec laquelle elle est fusionnée.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Une déclaration d'espace de noms ne peut pas se trouver avant une classe ou une fonction avec laquelle elle est fusionnée.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Une déclaration d’espace de noms n’est autorisée qu’au niveau supérieur d’un espace de noms ou d’un module.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Une déclaration d’« espace de noms » ne doit pas être déclarée à l’aide du mot clé « module ». Utilisez plutôt le mot clé « espace de noms ».", - "A_non_dry_build_would_build_project_0_6357": "Une build non-dry va générer le projet '{0}'", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Une build non-dry va supprimer les fichiers suivants : {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Une build non-dry va mettre à jour les horodatages de la sortie du projet '{0}'", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un initialiseur de paramètre est uniquement autorisé dans une implémentation de fonction ou de constructeur.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Impossible de déclarer une propriété de paramètre à l'aide d'un paramètre rest.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Une propriété de paramètre est uniquement autorisée dans une implémentation de constructeur.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Impossible de déclarer une propriété de paramètre à l'aide d'un modèle de liaison.", - "A_promise_must_have_a_then_method_1059": "Une promesse doit avoir une méthode 'then'.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Une propriété d'une classe dont le type est un type 'unique symbol' doit être à la fois 'static' et 'readonly'.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Une propriété d'une interface ou d'un littéral de type dont le type est un type 'unique symbol' doit être 'readonly'.", - "A_required_element_cannot_follow_an_optional_element_1257": "Un élément required ne peut pas suivre un élément optional.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un paramètre obligatoire ne peut pas suivre un paramètre optionnel.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un élément rest ne peut pas contenir de modèle de liaison.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Un élément rest ne peut pas suivre un autre élément rest.", - "A_rest_element_cannot_have_a_property_name_2566": "Un élément rest ne peut pas avoir de nom de propriété.", - "A_rest_element_cannot_have_an_initializer_1186": "Un élément rest ne peut pas avoir d'initialiseur.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un élément rest doit être le dernier dans un modèle de déstructuration.", - "A_rest_element_type_must_be_an_array_type_2574": "Un type d'élément rest doit être un type tableau.", - "A_rest_parameter_cannot_be_optional_1047": "Un paramètre rest ne peut pas être facultatif.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Un paramètre rest ne peut pas avoir d'initialiseur.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un paramètre rest doit être le dernier dans une liste de paramètres.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Un paramètre rest doit être de type tableau.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Les modèles de liaison ou les paramètres rest ne doivent pas avoir de virgule de fin.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Une instruction 'return' peut être utilisée uniquement dans un corps de fonction.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Une instruction « return » ne peut pas être utilisée à l’intérieur d’un bloc statique de classe.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Série d'entrées qui remappent les importations aux emplacements de recherche en fonction de 'baseUrl'.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un accesseur 'set' ne peut pas avoir d'annotation de type de retour.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un accesseur 'set' ne peut pas avoir de paramètre optionnel.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Un accesseur 'set' ne peut pas avoir de paramètre rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Un accesseur 'set' doit avoir un seul paramètre.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un paramètre d'accesseur 'set' ne peut pas avoir d'initialiseur.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argument d’engraissement doit soit avoir un type de tuple, soit être passé à un paramètre REST.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Un appel « super » doit être une instruction de niveau racine dans un constructeur d’une classe dérivée qui contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Un appel 'super' doit être la première instruction du constructeur à faire référence à « super » ou « this » lorsqu’une classe dérivée contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Une protection de type basée sur 'this' n'est pas compatible avec une protection de type basée sur des paramètres.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un type 'this' est disponible uniquement dans un membre non statique d'une classe ou d'une interface.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Un modificateur « export » de niveau supérieur ne peut pas être utilisé sur des déclarations de valeur dans un module CommonJS quand « verbatimModuleSyntax » est activé.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un fichier 'tsconfig.json' est déjà défini à l'emplacement '{0}'.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membre de tuple ne peut pas être à la fois facultatif et rest.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un type tuple ne peut pas être indexé avec une valeur négative.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Une expression d'assertion de type n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Une propriété de littéral de type ne peut pas avoir d'initialiseur.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Une importation de type uniquement peut spécifier une importation par défaut ou des liaisons nommées, mais pas les deux.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un prédicat de type ne peut pas référencer un paramètre rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un prédicat de type ne peut pas référencer un élément '{0}' dans un modèle de liaison.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Un prédicat de type est autorisé uniquement dans une position de type de retour pour les fonctions et les méthodes.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Le type d'un prédicat de type doit être assignable au type de son paramètre.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un type référencé dans une signature décorée doit être importé avec « import type » ou une importation d’espace de noms quand « isolatedModules » et « emitDecoratorMetadata » sont activés.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Une variable dont le type est un type 'unique symbol' doit être 'const'.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Une expression 'yield' est autorisée uniquement dans le corps d'un générateur.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "La méthode abstraite '{0}' de la classe '{1}' n'est pas accessible au moyen de l'expression super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Les méthodes abstraites peuvent uniquement apparaître dans une classe abstraite.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Les propriétés abstraites peuvent uniquement apparaître dans une classe abstraite.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "La propriété abstraite '{0}' de la classe '{1}' n'est pas accessible dans le constructeur.", - "Accessibility_modifier_already_seen_1028": "Modificateur d'accessibilité déjà rencontré.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Les accesseurs sont uniquement disponibles quand EcmaScript 5 ou version supérieure est ciblé.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Les accesseurs doivent être abstraits ou non abstraits.", - "Add_0_to_unresolved_variable_90008": "Ajouter '{0}.' à la variable non résolue", - "Add_a_return_statement_95111": "Ajouter une instruction return", - "Add_a_return_type_to_the_function_declaration_9031": "Ajoutez un type de retour à la déclaration de fonction.", - "Add_a_return_type_to_the_function_expression_9030": "Ajoutez un type de retour à l’expression de fonction.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Ajoutez un type de retour à la déclaration d’accesseur get.", - "Add_a_return_type_to_the_method_9034": "Ajouter un type de retour à la méthode", - "Add_a_type_annotation_to_the_parameter_0_9028": "Ajoutez une annotation de type au paramètre {0}.", - "Add_a_type_annotation_to_the_property_0_9029": "Ajoutez une annotation de type à la propriété {0}.", - "Add_a_type_annotation_to_the_variable_0_9027": "Ajoutez une annotation de type à la variable {0}.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ajoutez un type au paramètre de la déclaration d’accesseur set.", - "Add_all_missing_async_modifiers_95041": "Ajouter tous les modificateurs 'async' manquants", - "Add_all_missing_attributes_95168": "Ajouter tous les attributs manquants", - "Add_all_missing_call_parentheses_95068": "Ajouter toutes les parenthèses d'appel manquantes", - "Add_all_missing_function_declarations_95157": "Ajouter toutes les déclarations de fonction manquantes", - "Add_all_missing_imports_95064": "Ajouter toutes les importations manquantes", - "Add_all_missing_members_95022": "Ajouter tous les membres manquants", - "Add_all_missing_override_modifiers_95162": "Ajouter tous les modificateurs 'override' manquants", - "Add_all_missing_parameters_95190": "Ajouter tous les paramètres manquants", - "Add_all_missing_properties_95166": "Ajouter toutes les propriétés manquantes", - "Add_all_missing_return_statement_95114": "Ajouter toutes les instructions return manquantes", - "Add_all_missing_super_calls_95039": "Ajouter tous les appels super manquants", - "Add_all_missing_type_annotations_90067": "Ajouter toutes les annotations de type manquantes", - "Add_all_optional_parameters_95193": "Ajouter tous les paramètres optionnels", - "Add_annotation_of_type_0_90062": "Ajouter une annotation de type « {0} »", - "Add_async_modifier_to_containing_function_90029": "Ajouter le modificateur async dans la fonction conteneur", - "Add_await_95083": "Ajouter 'await'", - "Add_await_to_initializer_for_0_95084": "Ajouter 'await' à l'initialiseur pour '{0}'", - "Add_await_to_initializers_95089": "Ajouter 'await' aux initialiseurs", - "Add_braces_to_arrow_function_95059": "Ajouter des accolades à la fonction arrow", - "Add_const_to_all_unresolved_variables_95082": "Ajouter 'const' à toutes les variables non résolues", - "Add_const_to_unresolved_variable_95081": "Ajouter 'const' à la variable non résolue", - "Add_definite_assignment_assertion_to_property_0_95020": "Ajouter une assertion d'assignation définie à la propriété '{0}'", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Ajouter des assertions d'affectation définie à toutes les propriétés non initialisées", - "Add_export_to_make_this_file_into_a_module_95097": "Ajouter 'export {}' pour faire de ce fichier un module", - "Add_extends_constraint_2211": "Ajoutez la contrainte « extends ».", - "Add_extends_constraint_to_all_type_parameters_2212": "Ajouter la contrainte « extends » à tous les paramètres de type", - "Add_import_from_0_90057": "Ajouter l'importation de \"{0}\"", - "Add_index_signature_for_property_0_90017": "Ajouter une signature d'index pour la propriété '{0}'", - "Add_initializer_to_property_0_95019": "Ajouter un initialiseur à la propriété '{0}'", - "Add_initializers_to_all_uninitialized_properties_95027": "Ajouter des initialiseurs à toutes les propriétés non initialisées", - "Add_missing_attributes_95167": "Ajouter les attributs manquants", - "Add_missing_call_parentheses_95067": "Ajouter les parenthèses d'appel manquantes", - "Add_missing_comma_for_object_member_completion_0_95187": "Ajoutez une virgule manquante pour l’achèvement de membre d’objet « {0} ».", - "Add_missing_enum_member_0_95063": "Ajouter le membre enum manquant '{0}'", - "Add_missing_function_declaration_0_95156": "Ajouter la déclaration de fonction manquante '{0}'", - "Add_missing_new_operator_to_all_calls_95072": "Ajouter l'opérateur 'new' manquant à tous les appels", - "Add_missing_new_operator_to_call_95071": "Ajouter l'opérateur 'new' manquant à l'appel", - "Add_missing_parameter_to_0_95188": "Ajouter le paramètre manquant dans « {0} »", - "Add_missing_parameters_to_0_95189": "Ajouter les paramètres manquants dans « {0} »", - "Add_missing_properties_95165": "Ajouter des propriétés manquantes", - "Add_missing_super_call_90001": "Ajouter l'appel manquant à 'super()'", - "Add_missing_typeof_95052": "Ajouter un 'typeof' manquant", - "Add_names_to_all_parameters_without_names_95073": "Ajouter des noms à tous les paramètres sans noms", - "Add_optional_parameter_to_0_95191": "Ajouter un paramètre optionnel à « {0} »", - "Add_optional_parameters_to_0_95192": "Ajouter des paramètres optionnels à '{0}'", - "Add_or_remove_braces_in_an_arrow_function_95058": "Ajouter ou supprimer les accolades dans une fonction arrow", - "Add_override_modifier_95160": "Ajouter un modificateur 'override'", - "Add_parameter_name_90034": "Ajouter un nom de paramètre", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Ajouter un qualificateur à toutes les variables non résolues correspondant à un nom de membre", - "Add_resolution_mode_import_attribute_95196": "Ajouter l'attribut d'importation « mode de résolution »", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Ajoutez l'attribut d'importation « mode de résolution » à toutes les importations de type uniquement qui en ont besoin", - "Add_return_type_0_90063": "Ajouter le type de retour « {0} »", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Ajoutez des satisfactions et une assertion de type à cette expression (satisfait T en tant que T) pour rendre le type explicite.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Ajouter des satisfactions et une assertion de type inlined avec « {0} »", - "Add_to_all_uncalled_decorators_95044": "Ajouter '()' à tous les décorateurs non appelés", - "Add_ts_ignore_to_all_error_messages_95042": "Ajouter '@ts-ignore' à tous les messages d'erreur", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Ajoutez « undefined » à un type lorsque vous y accédez à l’aide d’un index.", - "Add_undefined_to_optional_property_type_95169": "Ajouter « undefined » à un type de propriété facultatif", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Ajouter un type non défini à toutes les propriétés non initialisées", - "Add_undefined_type_to_property_0_95018": "Ajouter un type 'undefined' à la propriété '{0}'", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Ajouter une conversion 'unknown' pour les types qui ne se chevauchent pas", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Ajouter 'unknown' à toutes les conversions de types qui ne se chevauchent pas", - "Add_void_to_Promise_resolved_without_a_value_95143": "Ajouter 'void' à un Promise résolu sans valeur", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Ajouter 'void' à toutes les promesses résolues sans valeur", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "L'ajout d'un fichier tsconfig.json permet d'organiser les projets qui contiennent des fichiers TypeScript et JavaScript. En savoir plus sur https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Toutes les déclarations de « {0} » doivent avoir des contraintes identiques.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Toutes les déclarations de '{0}' doivent avoir des modificateurs identiques.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Toutes les déclarations de '{0}' doivent avoir des paramètres de type identiques.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Toutes les déclarations d'une méthode abstraite doivent être consécutives.", - "All_destructured_elements_are_unused_6198": "Tous les éléments déstructurés sont inutilisés.", - "All_imports_in_import_declaration_are_unused_6192": "Les importations de la déclaration d'importation ne sont pas toutes utilisées.", - "All_type_parameters_are_unused_6205": "Tous les paramètres de type sont inutilisés.", - "All_variables_are_unused_6199": "Toutes les variables sont inutilisées.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Autorisez les fichiers JavaScript à faire partie de votre programme. Utilisez l’option « checkJS » pour obtenir des erreurs à partir de ces fichiers.", - "Allow_accessing_UMD_globals_from_modules_6602": "Autorisez l'accès aux variables globales UMD à partir des modules.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Autorisez les importations par défaut à partir des modules sans exportation par défaut. Cela n'affecte pas l'émission du code, juste le contrôle de type.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Autoriser « importation de x à partir de y » quand un module n’a pas d’exportation par défaut.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Autorisez l’importation de fonctions d’assistance à partir de tslib une fois par projet, au lieu de les inclure par fichier.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Autorisez les importations pour inclure des extensions de fichier TypeScript. Nécessite la définition de « --moduleResolution bundler » et de « --noEmit » ou « --emitDeclarationOnly ».", - "Allow_javascript_files_to_be_compiled_6102": "Autorisez la compilation des fichiers JavaScript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Autorisez plusieurs dossiers à être considérés comme un seul lors de la résolution des modules.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Le nom de fichier déjà inclus '{0}' diffère du nom de fichier '{1}' uniquement par la casse.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Une déclaration de module ambiant ne peut pas spécifier un nom de module relatif.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Impossible d'imbriquer des modules ambiants dans d'autres modules ou espaces de noms.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un module AMD ne peut pas avoir plusieurs affectations de nom.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Un accesseur abstrait ne peut pas avoir d'implémentation.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Un modificateur d'accessibilité ne peut pas être utilisé avec un identificateur privé.", - "An_accessor_cannot_have_type_parameters_1094": "Un accesseur ne peut pas avoir de paramètres de type.", - "An_accessor_property_cannot_be_declared_optional_1276": "Une propriété 'accessor' ne peut pas être déclarée comme facultative.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Une déclaration de module ambiant est uniquement autorisée au niveau supérieur dans un fichier.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Aucun argument pour '{0}' n'a été fourni.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Aucun argument correspondant à ce modèle de liaison n'a été fourni.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un opérande arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Une fonction arrow ne peut pas avoir un paramètre 'this'.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Une fonction ou méthode asynchrone dan ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Une fonction ou une méthode async doit retourner 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", - "An_async_iterator_must_have_a_next_method_2519": "Un itérateur asynchrone doit comporter une méthode 'next()'.", - "An_element_access_expression_should_take_an_argument_1011": "Une expression d'accès à un élément doit accepter un argument.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Un membre enum ne peut pas être nommé avec un identificateur privé.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Un membre enum ne peut pas avoir un nom numérique.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Un nom de membre enum doit être suivi de ',', de '=' ou de '}'.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Version développée de ces informations, affichant toutes les options possibles du compilateur", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Impossible d'utiliser une assignation d'exportation dans un module comportant d'autres éléments exportés.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Une affectation d'exportation ne peut pas être utilisée dans un espace de noms.", - "An_export_assignment_cannot_have_modifiers_1120": "Une assignation d'exportation ne peut pas avoir de modificateurs.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Une affectation d’exportation doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un module.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", - "An_export_declaration_cannot_have_modifiers_1193": "Une déclaration d'exportation ne peut pas avoir de modificateurs.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Une déclaration « export = » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Une déclaration « export = » doit faire référence à une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Une « export default » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Une « export default » doit référencer une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Impossible de tester une expression de type 'void' pour déterminer si elle a la valeur true.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Une valeur d'échappement Unicode étendue doit être comprise entre 0x0 et 0x10FFFF inclus.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificateur ou un mot clé ne peut pas suivre immédiatement un littéral numérique.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Impossible de déclarer une implémentation dans des contextes ambiants.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias d'importation ne peut pas référencer une déclaration exportée à l'aide de 'export type'.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias d'importation ne peut pas référencer une déclaration importée à l'aide de 'import type'.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias d'importation ne peut pas être résolu en une déclaration de type ou de type uniquement lorsque « verbatimModuleSyntax » est activé.", - "An_import_alias_cannot_use_import_type_1392": "Un alias d'importation ne peut pas utiliser 'import type'", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un module.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", - "An_import_declaration_cannot_have_modifiers_1191": "Une déclaration d'importation ne peut pas avoir de modificateurs.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un chemin d’importation ne peut se terminer que par une extension « {0} » lorsque « allowImportingTsExtensions » est activé.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Une signature d'index ne peut pas avoir de paramètre rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Une signature d'index ne peut pas avoir de virgule de fin.", - "An_index_signature_must_have_a_type_annotation_1021": "Une signature d'index doit avoir une annotation de type.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Une signature d'index doit avoir un seul paramètre.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un paramètre de signature d'index ne peut pas contenir de point d'interrogation.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un paramètre de signature d'index ne peut pas avoir de modificateur d'accessibilité.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un paramètre de signature d'index ne peut pas avoir d'initialiseur.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un paramètre de signature d'index doit avoir une annotation de type.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un type de paramètre de signature d’index ne peut pas être un type littéral ni générique. Envisagez plutôt d’utiliser un type d’objet mappé.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un type de paramètre de signature d’index doit être « string », « number », « symbol » ou un type littéral de modèle.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Une expression d’instanciation ne peut pas être suivie d’un accès à la propriété.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Une interface peut uniquement étendre un identificateur/nom qualifié avec des arguments de type facultatifs.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Une interface peut étendre uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Une interface ne peut pas étendre un type primitif comme « {0} ». Elle peut uniquement étendre d’autres types d’objets nommés.", - "An_interface_property_cannot_have_an_initializer_1246": "Une propriété d'interface ne peut pas avoir d'initialiseur.", - "An_iterator_must_have_a_next_method_2489": "Un itérateur doit comporter une méthode 'next()'.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Un pragma @jsxFrag est nécessaire quand un pragma @jsx est utilisé avec des fragments JSX.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un littéral d'objet ne peut pas avoir plusieurs accesseurs get/set portant le même nom.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un littéral d’objet ne peut pas avoir plusieurs propriétés portant le même nom.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un littéral d'objet ne peut pas avoir une propriété et un accesseur portant le même nom.", - "An_object_member_cannot_be_declared_optional_1162": "Impossible de déclarer un membre d'objet comme étant facultatif.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "La méthode « [Symbol.hasInstance] » d’un objet doit retourner une valeur booléenne pour qu’elle soit utilisée à droite d’une expression « instanceof ».", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Une chaîne facultative ne peut pas contenir d'identificateurs privés.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Un élément optional ne peut pas suivre un élément rest.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Une valeur externe de 'this' est mise en mémoire fantôme par ce conteneur.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Une signature de surcharge ne peut pas être déclarée en tant que générateur.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Une expression unaire avec l'opérateur '{0}' n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.", - "Annotate_everything_with_types_from_JSDoc_95043": "Annoter tout avec des types de JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annoter les types de fonction expando de propriétés dans un espace de noms", - "Annotate_with_type_from_JSDoc_95009": "Annoter avec le type de JSDoc", - "Another_export_default_is_here_2753": "Une autre valeur par défaut d'exportation se trouve ici.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Les propriétés Unicode susceptibles de correspondre à plus d’un caractère unique ne sont disponibles que lorsque l’indicateur Unicode Sets (v) est défini.", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tout ce qui peut correspondre à plus d’un seul caractère n’est pas valide dans une classe de caractères négatif.", - "Are_you_missing_a_semicolon_2734": "Il vous manque un point-virgule ?", - "Argument_expression_expected_1135": "Expression d'argument attendue.", - "Argument_for_0_option_must_be_Colon_1_6046": "L'argument de l'option '{0}' doit être {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "L’argument de l’importation dynamique ne peut pas être un élément de propagation.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "L'argument de type '{0}' n'est pas attribuable au paramètre de type '{1}'.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argument de type '{0}' n'est pas assignable au paramètre de type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Les arguments du paramètre de reste '{0}' n'ont pas été fournis.", - "Array_element_destructuring_pattern_expected_1181": "Modèle de déstructuration d'élément de tableau attendu.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Les tableaux avec des éléments de diffusion ne peuvent pas être déduits avec --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Quand vous utilisez des assertions, chaque nom de la cible d'appel doit être déclaré à l'aide d'une annotation de type explicite.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Quand vous utilisez des assertions, la cible d'appel doit être un identificateur ou un nom qualifié.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L’affectation de propriétés à des fonctions sans les déclarer n’est pas prise en charge avec --isolatedDeclarations. Ajoutez une déclaration explicite pour les propriétés affectées à cette fonction.", - "Asterisk_Slash_expected_1010": "'.' attendu.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Au moins un accesseur doit avoir une annotation de type explicite avec --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Les augmentations de la portée globale ne peuvent être directement imbriquées que dans les modules externes ou les déclarations de modules ambiants.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Les augmentations de la portée globale doivent comporter un modificateur 'declare', sauf si elles apparaissent déjà dans un contexte ambiant.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La détection automatique des typages est activée dans le projet '{0}'. Exécution de la passe de résolution supplémentaire pour le module '{1}' à l'aide de l'emplacement du cache '{2}'.", - "BUILD_OPTIONS_6919": "OPTIONS DE BUILD", - "Backwards_Compatibility_6253": "Rétrocompatibilité", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Les expressions de classe de base ne peuvent pas référencer les paramètres de type de classe.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Le type de retour '{0}' du constructeur de base n'est pas un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Les constructeurs de base doivent tous avoir le même type de retour.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Répertoire de base pour la résolution des noms de modules non absolus.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Les littéraux BigInt ne sont pas disponibles quand la version ciblée est antérieure à ES2020.", - "Binary_digit_expected_1177": "Chiffre binaire attendu.", - "Binding_element_0_implicitly_has_an_1_type_7031": "L'élément de liaison '{0}' possède implicitement un type '{1}'.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable de portée de bloc '{0}' utilisée avant sa déclaration.", - "Build_a_composite_project_in_the_working_directory_6925": "Générer un projet composite dans le répertoire de travail.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Générer tous les projets, même ceux qui semblent être à jour.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Générer un ou plusieurs projets et leurs dépendances (s'ils sont obsolètes)", - "Build_option_0_requires_a_value_of_type_1_5073": "L'option de build '{0}' nécessite une valeur de type {1}.", - "Building_project_0_6358": "Génération du projet '{0}'...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Les itérateurs intégrés sont instanciés avec un type « TReturn » « undefined » au lieu de « any ».", - "COMMAND_LINE_FLAGS_6921": "INDICATEURS DE LIGNE DE COMMANDE", - "COMMON_COMMANDS_6916": "COMMANDES COURANTES", - "COMMON_COMPILER_OPTIONS_6920": "OPTIONS COURANTES DU COMPILATEUR", - "Call_decorator_expression_90028": "Appeler l'expression de l'élément décoratif", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Les types de retour de signature d'appel '{0}' et '{1}' sont incompatibles.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signature d'appel, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Les signatures d'appel sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "La cible de l'appel ne contient aucune signature.", - "Can_only_convert_logical_AND_access_chains_95142": "Conversion uniquement de chaînes logiques ET de chaînes d'accès", - "Can_only_convert_named_export_95164": "Peut uniquement convertir l’exportation nommée", - "Can_only_convert_property_with_modifier_95137": "La propriété peut uniquement être convertie avec un modificateur", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Peut uniquement convertir des concaténations de chaînes et des littéraux de chaîne", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Impossible d'accéder à '{0}.{1}', car '{0}' est un type, mais pas un espace de noms. Voulez-vous plutôt récupérer le type de la propriété '{1}' dans '{0}' avec '{0}[\"{1}\"]' ?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Désolé... Nous ne pouvons pas accéder à « {0} » à partir d’un autre fichier sans qualification lorsque « {1} » est activé. Utilisez « {2} » à la place.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Impossible d’accéder aux enums const ambiants quand '{0}' est activé.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Impossible d'assigner un type de constructeur '{0}' à un type de constructeur '{1}'.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Impossible d'attribuer un type de constructeur abstrait à un type de constructeur non abstrait.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une classe.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une constante.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une fonction.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un espace de noms.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une propriété en lecture seule.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un enum.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une importation.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Impossible d'effectuer une assignation à '{0}', car il ne s'agit pas d'une variable.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Impossible d'effectuer une assignation à la méthode privée '{0}'. Les méthodes privées ne sont pas accessibles en écriture.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Impossible d'augmenter le module '{0}', car il se résout en une entité non-module.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Impossible d'augmenter le module '{0}' avec des exportations de valeurs, car il se résout en une entité non-module.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Impossible de compiler des modules à l'aide de l'option '{0}' tant que l'indicateur '--module' n'a pas la valeur 'amd' ou 'system'.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Impossible de créer une instance d'une classe abstraite.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Impossible de déléguer l'itération à la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais le générateur conteneur envoie toujours '{0}'.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Impossible d'exporter '{0}'. Seules les déclarations locales peuvent être exportées à partir d'un module.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Impossible d'étendre une classe '{0}'. Le constructeur de classe est marqué comme étant privé.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Impossible d'étendre une interface '{0}'. Vouliez-vous dire 'implements' ?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Le fichier tsconfig.json est introuvable dans le répertoire actif : {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Le fichier tsconfig.json est introuvable dans le répertoire spécifié : '{0}'.", - "Cannot_find_global_type_0_2318": "Le type global '{0}' est introuvable.", - "Cannot_find_global_value_0_2468": "La valeur globale '{0}' est introuvable.", - "Cannot_find_lib_definition_for_0_2726": "Définition de bibliothèque introuvable pour '{0}'.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Définition de bibliothèque introuvable pour '{0}'. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Le module '{0}' est introuvable. Utilisez '--resolveJsonModule' pour importer le module avec l'extension '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Le module « {0} » est introuvable. Vouliez-vous définir l’option « moduleResolution » sur la valeur « node » ou ajouter des alias à l’option « paths » ?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Impossible de localiser le module '{0}' ou les déclarations de type correspondantes.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Impossible de trouver les déclarations de module ou de type pour l’importation à effet secondaire de « {0} ».", - "Cannot_find_name_0_2304": "Le nom '{0}' est introuvable.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Le nom '{0}' est introuvable. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Le nom '{0}' est introuvable. Voulez-vous utiliser le membre d'instance 'this.{0}' ?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Le nom '{0}' est introuvable. Voulez-vous utiliser le membre statique '{1}.{0}' ?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Le nom « {0} » est introuvable. Voulez-vous écrire ceci dans une fonction asynchrone ?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{1}' ou une version ultérieure.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' pour inclure 'dom'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`, puis ajoutez « bun » au champ types de votre fichier tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha', puis ajoutez 'jest' ou 'mocha' au champ types de votre fichier tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour jQuery ? Essayez 'npm i --save-dev @types/jquery'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour jQuery ? Essayez 'npm i --save-dev @types/jquery', puis ajoutez 'jquery' au champ types de votre fichier tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour node ? Essayez 'npm i --save-dev @types/node'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour node ? Essayez 'npm i --save-dev @types/node', puis ajoutez 'node' au champ types de votre fichier tsconfig.", - "Cannot_find_namespace_0_2503": "L'espace de noms '{0}' est introuvable.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Impossible de trouver l'espace de noms '{0}'. Vouliez-vous dire '{1}'?", - "Cannot_find_parameter_0_1225": "Paramètre '{0}' introuvable.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Impossible de trouver le chemin d'accès au sous-répertoire commun pour les fichiers d'entrée.", - "Cannot_find_type_definition_file_for_0_2688": "Le fichier de définition de type est introuvable pour '{0}'.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Impossible d'importer les fichiers de déclaration de type. Importez '{0}' à la place de '{1}'.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Impossible d'initialiser la variable de portée externe '{0}' dans la même portée que celle de la déclaration de portée de bloc '{1}'.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Impossible d'appeler un objet qui a éventuellement une valeur 'null'.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Impossible d'appeler un objet qui a éventuellement une valeur 'null' ou 'undefined'.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Impossible d'appeler un objet qui a éventuellement une valeur 'undefined'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la déstructuration de tableau envoie toujours '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la diffusion de tableau envoie toujours '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la boucle for-of envoie toujours '{0}'.", - "Cannot_move_statements_to_the_selected_file_95183": "Désolé... Nous ne pouvons pas déplacer les instructions vers le fichier sélectionné", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Désolé... Nous ne pouvons pas déplacer vers le fichier. Le fichier sélectionné n’est pas valide", - "Cannot_read_file_0_5083": "Impossible de lire le fichier '{0}'.", - "Cannot_read_file_0_Colon_1_5012": "Impossible de lire le fichier '{0}' : {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Impossible de redéclarer la variable de portée de bloc '{0}'.", - "Cannot_redeclare_exported_variable_0_2323": "Impossible de redéclarer la variable exportée '{0}'.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Impossible de redéclarer l'identificateur '{0}' dans la clause catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Impossible de démarrer un appel de fonction dans une annotation de type.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Impossible d'utiliser JSX, sauf si l'indicateur '--jsx' est fourni.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Désolé... Nous ne pouvons pas utiliser « export import » sur un type ou espace de noms de type uniquement lorsque l’indicateur « {0} » est activé.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Impossible d'utiliser des importations, des exportations ou des augmentations de module quand '--module' a la valeur 'none'.", - "Cannot_use_namespace_0_as_a_type_2709": "Impossible d'utiliser l'espace de noms '{0}' en tant que type.", - "Cannot_use_namespace_0_as_a_value_2708": "Impossible d'utiliser l'espace de noms '{0}' en tant que valeur.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Impossible d'utiliser « this » dans un initialiseur de propriété statique d'une classe décorée.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Impossible d'écrire le fichier '{0}', car il va remplacer le fichier '.tsbuildinfo' généré par le projet référencé '{1}'", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Impossible d'écrire le fichier '{0}', car il serait remplacé par plusieurs fichiers d'entrée.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Impossible d'écrire le fichier '{0}', car cela entraînerait le remplacement du fichier d'entrée.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Une variable de clause catch ne peut pas avoir d'initialiseur.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "L'annotation de type de variable de la clause catch doit être 'any' ou 'unknown' si elle est spécifiée.", - "Change_0_to_1_90014": "Changer '{0}' en '{1}'", - "Change_all_extended_interfaces_to_implements_95038": "Remplacer toutes les interfaces étendues par 'implements'", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Remplacer tous les types jsdoc-style par TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Remplacer tous les types jsdoc-type par TypeScript (et ajouter '| undefined' aux types nullable)", - "Change_extends_to_implements_90003": "Changer 'extends' en 'implements'", - "Change_spelling_to_0_90022": "Changer l'orthographe en '{0}'", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Recherchez les propriétés de classe déclarées mais non définies dans le constructeur.", - "Check_side_effect_imports_6806": "Vérifiez les importations d’effet secondaire.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Vérifiez que les arguments des méthodes « bind », « call » et « apply » correspondent à la fonction d’origine.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Vérification en cours pour déterminer si '{0}' est le préfixe correspondant le plus long pour '{1}' - '{2}'.", - "Circular_definition_of_import_alias_0_2303": "Définition circulaire de l'alias d'importation '{0}'.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularité détectée durant la résolution de la configuration : {0}", - "Circularity_originates_in_type_at_this_location_2751": "La circularité est issue du type à cet emplacement.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La classe '{0}' définit l'accesseur de membre d'instance '{1}', mais la classe étendue '{2}' le définit comme fonction de membre d'instance.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La classe '{0}' définit la fonction de membre d'instance '{1}', mais la classe étendue '{2}' la définit comme accesseur de membre d'instance.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La classe '{0}' définit la propriété de membre d'instance '{1}', mais la classe étendue '{2}' le définit comme fonction de membre d'instance.", - "Class_0_incorrectly_extends_base_class_1_2415": "La classe '{0}' étend de manière incorrecte la classe de base '{1}'.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implémente de manière incorrecte la classe '{1}'. Voulez-vous vraiment étendre '{1}' et hériter de ses membres en tant que sous-classe ?", - "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implémente de manière incorrecte l'interface '{1}'.", - "Class_0_used_before_its_declaration_2449": "Classe '{0}' utilisée avant sa déclaration.", - "Class_constructor_may_not_be_a_generator_1368": "Le constructeur de classe ne peut pas être un générateur.", - "Class_constructor_may_not_be_an_accessor_1341": "Le constructeur de la classe ne peut pas être un accesseur.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "La déclaration de classe ne peut pas implémenter la liste de surcharge pour «{0}».", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Les déclarations de classes ne peuvent pas avoir plusieurs balises '@augments' ou '@extends'.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Impossible d'utiliser des éléments décoratifs de classe avec un identificateur privé static. Supprimez l'élément décoratif expérimental.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Le champ de classe « {0} » défini par la classe parente n’est pas accessible dans la classe enfant via super.", - "Class_name_cannot_be_0_2414": "Le nom de la classe ne peut pas être '{0}'.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Le nom de la classe ne peut pas être « Object » quand ES5 et ses versions ultérieures sont ciblées avec le module {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Le côté statique de la classe '{0}' étend de manière incorrecte le côté statique de la classe de base '{1}'.", - "Classes_can_only_extend_a_single_class_1174": "Les classes ne peuvent étendre qu'une seule classe.", - "Classes_may_not_have_a_field_named_constructor_18006": "Les classes n'ont peut-être pas de champ nommé 'constructor'.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Le code contenu dans une classe est évalué en mode strict JavaScript qui n’autorise pas l’utilisation de « {0} ». Pour plus d’informations, consultez https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Options de ligne de commande", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compilez le projet en fonction du chemin de son fichier config ou d'un dossier contenant 'tsconfig.json'.", - "Compiler_Diagnostics_6251": "Diagnostics du compilateur", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "L’option du compilateur « {0} » ne peut pas recevoir une chaîne vide.", - "Compiler_option_0_expects_an_argument_6044": "L'option de compilateur '{0}' attend an argument.", - "Compiler_option_0_may_not_be_used_with_build_5094": "L’option '--{0}' du compilateur ne peut pas être utilisée avec '--build'.", - "Compiler_option_0_may_only_be_used_with_build_5093": "Option du compilateur '--{0}' ne peut être utilisée qu’avec '--build'.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "L’option de compilateur « {0} » de la valeur «{1}» est instable. Utilisez TypeScript nocturne pour désactiver cette erreur. Essayez de mettre à jour avec « npm install -D typescript@next ».", - "Compiler_option_0_requires_a_value_of_type_1_5024": "L'option de compilateur '{0}' exige une valeur de type {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Le compilateur réserve le nom '{0}' quand il émet un identificateur privé pour une version antérieure.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compile le projet TypeScript situé au chemin d’accès spécifié.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compile le projet actif (tsconfig.json sur le répertoire de travail.)", - "Compiles_the_current_project_with_additional_settings_6929": "Compile le projet actif, avec des paramètres supplémentaires.", - "Completeness_6257": "Exhaustivité", - "Composite_projects_may_not_disable_declaration_emit_6304": "Les projets composites ne doivent pas désactiver l'émission de déclaration.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Les projets composites ne doivent pas désactiver la compilation incrémentielle.", - "Computed_from_the_list_of_input_files_6911": "Calculé à partir de la liste des fichiers d’entrée", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Les propriétés calculées doivent être des littéraux de chaîne ou de nombre, des variables ou des expressions en pointillé avec --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Les noms de propriétés calculées ne sont pas autorisés dans les enums.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Les noms de propriétés calculées sur des littéraux de classe ou d’objet ne peuvent pas être déduits avec --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Les valeurs calculées ne sont pas autorisées dans un enum avec des membres ayant une valeur de chaîne.", - "Concatenate_and_emit_output_to_single_file_6001": "Concaténer la sortie et l'émettre vers un seul fichier.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Conditions à définir en plus des valeurs par défaut spécifiques au résolveur lors de la résolution des importations.", - "Conflicts_are_in_this_file_6201": "Il existe des conflits dans ce fichier.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Envisagez d’ajouter un modificateur « declare » à cette classe.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Les types de retour de signature de construction '{0}' et '{1}' sont incompatibles.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signature de construction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Les signatures de construction sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.", - "Constructor_implementation_is_missing_2390": "L'implémentation de constructeur est manquante.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Le constructeur de la classe '{0}' est privé et uniquement accessible dans la déclaration de classe.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Le constructeur de la classe '{0}' est protégé et uniquement accessible dans la déclaration de classe.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notation de type d'un constructeur doit être placée entre parenthèses quand elle est utilisée dans un type union.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notation de type d'un constructeur doit être placée entre parenthèses quand elle est utilisée dans un type intersection.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Les constructeurs pour les classes dérivées doivent contenir un appel de 'super'.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Fichier conteneur non spécifié et répertoire racine impossible à déterminer. Recherche ignorée dans le dossier 'node_modules'.", - "Containing_function_is_not_an_arrow_function_95128": "La fonction conteneur n'est pas une fonction arrow", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Contrôlez la méthode utilisée pour détecter les fichiers JS au format module.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversion du type '{0}' en type '{1}' est peut-être une erreur, car aucun type ne chevauche suffisamment l'autre. Si cela est intentionnel, convertissez d'abord l'expression en 'unknown'.", - "Convert_0_to_1_in_0_95003": "Convertir '{0}' en '{1} dans {0}'", - "Convert_0_to_mapped_object_type_95055": "Convertir '{0}' en type d'objet mappé", - "Convert_all_const_to_let_95102": "Convertir tous les 'const' en 'let'", - "Convert_all_constructor_functions_to_classes_95045": "Convertir toutes les fonctions de constructeur en classes", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir tous les caractères non valides en code d'entité HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir tous les types réexportés en exportations de types uniquement", - "Convert_all_require_to_import_95048": "Convertir tous les 'require' en 'import'", - "Convert_all_to_async_functions_95066": "Tout convertir en fonctions asynchrones", - "Convert_all_to_bigint_numeric_literals_95092": "Tout convertir en littéraux numériques bigint", - "Convert_all_to_default_imports_95035": "Convertir tout en importations par défaut", - "Convert_all_type_literals_to_mapped_type_95021": "Convertir tous les littéraux de type en type mappé", - "Convert_all_typedef_to_TypeScript_types_95177": "Convertissez tous les typedef en types TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Convertir une fonction arrow ou une expression de fonction", - "Convert_const_to_let_95093": "Convertir 'const' en 'let'", - "Convert_default_export_to_named_export_95061": "Convertir l'exportation par défaut en exportation nommée", - "Convert_function_declaration_0_to_arrow_function_95106": "Convertir la déclaration de fonction '{0}' en fonction arrow", - "Convert_function_expression_0_to_arrow_function_95105": "Convertir l'expression de fonction '{0}' en fonction arrow", - "Convert_function_to_an_ES2015_class_95001": "Convertir la fonction en classe ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Convertir un caractère non valide en son code d'entité html", - "Convert_named_export_to_default_export_95062": "Convertir l'exportation nommée en exportation par défaut", - "Convert_named_imports_to_default_import_95170": "Convertir les importations nommées en importation par défaut", - "Convert_named_imports_to_namespace_import_95057": "Convertir les importations nommées en importation d'espace de noms", - "Convert_namespace_import_to_named_imports_95056": "Convertir l'importation d'espace de noms en importations nommées", - "Convert_overload_list_to_single_signature_95118": "Convertir la liste de surcharge en une seule signature", - "Convert_parameters_to_destructured_object_95075": "Convertir les paramètres en objet déstructuré", - "Convert_require_to_import_95047": "Convertir 'require' en 'import'", - "Convert_to_ES_module_95017": "Convertir en module ES", - "Convert_to_a_bigint_numeric_literal_95091": "Convertir en littéral numérique bigint", - "Convert_to_anonymous_function_95123": "Convertir en fonction anonyme", - "Convert_to_arrow_function_95125": "Convertir en fonction arrow", - "Convert_to_async_function_95065": "Convertir en fonction asynchrone", - "Convert_to_default_import_95013": "Convertir en importation par défaut", - "Convert_to_named_function_95124": "Convertir en fonction nommée", - "Convert_to_optional_chain_expression_95139": "Convertir en expression de chaîne facultative", - "Convert_to_template_string_95096": "Convertir en chaîne de modèle", - "Convert_to_type_only_export_1364": "Convertir en exportation de type uniquement", - "Convert_typedef_to_TypeScript_type_95176": "Convertissez typedef en type TypeScript.", - "Corrupted_locale_file_0_6051": "Fichier de paramètres régionaux endommagé : {0}.", - "Could_not_convert_to_anonymous_function_95153": "Impossible de convertir en fonction anonyme", - "Could_not_convert_to_arrow_function_95151": "Impossible de convertir en fonction arrow", - "Could_not_convert_to_named_function_95152": "Impossible de convertir en fonction nommée", - "Could_not_determine_function_return_type_95150": "Impossible de déterminer le type de retour de la fonction", - "Could_not_find_a_containing_arrow_function_95127": "Fonction arrow conteneur introuvable", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Le fichier de déclaration du module '{0}' est introuvable. '{1}' a implicitement un type 'any'.", - "Could_not_find_convertible_access_expression_95140": "L'expression d'accès convertible est introuvable", - "Could_not_find_export_statement_95129": "Instruction export introuvable", - "Could_not_find_import_clause_95131": "Clause import introuvable", - "Could_not_find_matching_access_expressions_95141": "L'expression d'accès correspondante est introuvable", - "Could_not_find_name_0_Did_you_mean_1_2570": "Le nom «{0}» est introuvable. Voulez-vous dire «{1}» ?", - "Could_not_find_namespace_import_or_named_imports_95132": "Impossible de localiser l'importation d'espace de noms ou les importations nommées", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Impossible de localiser la propriété dont l'accesseur doit être généré", - "Could_not_find_variable_to_inline_95185": "Désolé... Nous n’avons pas pu trouver de variable à intégrer.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Impossible de résoudre le chemin '{0}' avec les extensions {1}.", - "Could_not_write_file_0_Colon_1_5033": "Impossible d'écrire le fichier '{0}' : {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Créez des fichiers de mappage source pour les fichiers JavaScript émis.", - "Create_sourcemaps_for_d_ts_files_6614": "Créez des mappage de source pour les fichiers d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crée un tsconfig.json avec les paramètres recommandés dans le répertoire de travail.", - "DIRECTORY_6038": "RÉPERTOIRE", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Les séquences d’échappement décimales et les références arrière ne sont pas autorisées dans une classe de caractères.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Les décimales avec des zéros de début ne sont pas autorisées.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Cette déclaration augmente la déclaration dans un autre fichier. Cette opération ne peut pas être sérialisée.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "L’émission de déclaration pour ce fichier nécessite la conservation de cette importation pour des augmentations. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}' à partir du module '{1}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "L’émission de déclaration pour ce paramètre nécessite l’ajout implicite de « non défini » à son type. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", - "Declaration_expected_1146": "Déclaration attendue.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Le nom de la déclaration est en conflit avec l'identificateur global intégré '{0}'.", - "Declaration_or_statement_expected_1128": "Déclaration ou instruction attendue.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Une déclaration ou instruction est attendue. Ce '=' suit un bloc d’instructions. Si vous avez l’intention d'écrire une affectation de déstructuration, il est possible que vous deviez mettre l’ensemble de l’affectation entre parenthèses.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Les déclarations avec des assertions d'affectation définies doivent également avoir des annotations de type.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Les déclarations avec des initialiseurs ne peuvent pas avoir également des assertions d'affectation définies.", - "Declare_a_private_field_named_0_90053": "Déclarez un champ privé nommé '{0}'.", - "Declare_method_0_90023": "Déclarer la méthode '{0}'", - "Declare_private_method_0_90038": "Déclarer la méthode privée '{0}'", - "Declare_private_property_0_90035": "Déclarer la propriété privée '{0}'", - "Declare_property_0_90016": "Déclarer la propriété '{0}'", - "Declare_static_method_0_90024": "Déclarer la méthode statique '{0}'", - "Declare_static_property_0_90027": "Déclarer la propriété statique '{0}'", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Le type de retour de la fonction de décorateur '{0}' n’est pas attribuable au type '{1}'.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Le type de retour de la fonction de décorateur est '{0}' mais doit être 'void' ou 'any'.", - "Decorator_used_before_export_here_1486": "Élément décoratif utilisé ci avant « export ».", - "Decorators_are_not_valid_here_1206": "Les éléments décoratifs ne sont pas valides ici.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Impossible d'appliquer des éléments décoratifs à plusieurs accesseurs get/set du même nom.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Les éléments décoratifs ne peuvent pas apparaître après « export » ou « export default » s’ils apparaissent également avant « export ».", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Les éléments décoratifs doivent précéder le nom et tous les mots clés des déclarations de propriété.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Les variables de clause catch par défaut sont « unknown » au lieu de « any ».", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'exportation par défaut du module a utilisé ou utilise le nom privé '{0}'.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Les exportations par défaut ne peuvent peut pas être déduites avec --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Les importations par défaut ne sont pas autorisées dans une importation différée.", - "Default_library_1424": "Bibliothèque par défaut", - "Default_library_for_target_0_1425": "Bibliothèque par défaut pour la cible '{0}'", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Les importations différées ne sont prises en charge que lorsque l’indicateur « --module » est défini sur « esnext » ou « preserve ».", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Les définitions des identificateurs suivants sont en conflit avec celles d'un autre fichier : {0}", - "Delete_all_unused_declarations_95024": "Supprimer toutes les déclarations inutilisées", - "Delete_all_unused_imports_95147": "Supprimer toutes les importations inutilisées", - "Delete_all_unused_param_tags_95172": "Supprimer toutes les balises '@param' inutilisées", - "Delete_the_outputs_of_all_projects_6365": "Supprimer les sorties de tous les projets.", - "Delete_unused_param_tag_0_95171": "Supprimer la balise '@param' inutilisée '{0}'", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Déconseillé] Utilisez '--jsxFactory' à la place. Permet de spécifier l'objet appelé pour createElement durant le ciblage de 'react' pour l'émission JSX", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Déconseillé] Utilisez '--outFile' à la place. Permet de concaténer et d'émettre la sortie vers un seul fichier", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Déconseillé] Utilisez '--skipLibCheck' à la place. Permet d'ignorer le contrôle de type des fichiers de déclaration de la bibliothèque par défaut.", - "Deprecated_setting_Use_outFile_instead_6677": "Paramètre déconseillé. Utilisez « outFile » à la place.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Avez-vous oublié d'utiliser 'await' ?", - "Did_you_mean_0_1369": "Est-ce que vous avez voulu utiliser '{0}' ?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Est-ce que vous avez voulu que '{0}' soit contraint en tant que type 'new (...args: any[]) => {1}' ?", - "Did_you_mean_to_call_this_expression_6212": "Est-ce que vous avez voulu appeler cette expression ?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Est-ce que vous avez voulu marquer cette fonction comme étant 'async' ?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Voulez-vous vraiment utiliser le signe ':' ? Le signe '=' peut suivre uniquement un nom de propriété quand le littéral d'objet conteneur fait partie d'un modèle de déstructuration.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Est-ce que vous avez voulu utiliser 'new' avec cette expression ?", - "Digit_expected_1124": "Chiffre attendu", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Le répertoire '{0}' n'existe pas. Toutes les recherches associées sont ignorées.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Le répertoire « {0} » ne comporte pas d'étendue package.json comme contenant. Les importations ne seront pas résolues.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Désactivez l’ajout de directives « use strict » dans les fichiers JavaScript émis.", - "Disable_checking_for_this_file_90018": "Désactiver la vérification de ce fichier", - "Disable_emitting_comments_6688": "Désactivez les commentaires émettant.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Désactivez l’émission de déclarations qui ont « @internal » dans leurs commentaires JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Désactivez l’émission des fichiers à partir d’une compilation.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Désactivez l’émission de fichiers si des erreurs de vérification de type sont signalées.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Désactivez l’effacement des déclarations « const enum » dans le code généré.", - "Disable_error_reporting_for_unreachable_code_6603": "Désactivez le rapport d’erreurs pour le code inaccessible.", - "Disable_error_reporting_for_unused_labels_6604": "Désactivez le rapport d’erreurs pour les étiquettes inutilisées.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Désactivez la vérification complète des types (seules les erreurs critiques d’analyse et d’émission sont signalées).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Désactiver la création de fonctions d'assistance personnalisées comme «__extends» dans la sortie compilée.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Désactivez l’inclusion des fichiers de bibliothèque, y compris la valeur par défaut de lib.d.ts.", - "Disable_loading_referenced_projects_6235": "Désactivez le chargement des projets référencés.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Désactiver la préférence des fichiers sources à la place des fichiers de déclaration lors du référencement des projets composites.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Désactivez le signalement d’erreurs de propriétés excessives lors de la création de littéraux d’objet.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Désactivez la résolution des liens symboliques vers leur chemin d’accès réel. Cela correspond au même indicateur dans le nœud.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Désactivez les limitations de taille sur les projets JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Désactivez la recherche de solutions pour ce projet.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Désactivez la vérification stricte des signatures génériques dans les types de fonction.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Désactiver l’acquisition de type pour les projets JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Désactivez les types tronqués dans les messages d’erreur.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Désactivez l'utilisation des fichiers sources à la place des fichiers de déclaration dans les projets référencés.", - "Disable_wiping_the_console_in_watch_mode_6684": "Désactiver la réinitialisation de la console en mode espion.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Désactive l’inférence pour l’acquisition de type en examinant des noms de fichiers dans un projet.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Interdire à « import », « require » ou « » d’étendre le nombre de fichiers que TypeScript doit ajouter à un projet.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Interdisez les références dont la casse est incohérente dans le même fichier.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "N'ajoutez pas de références avec trois barres obliques, ni de modules importés à la liste des fichiers compilés.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "N’autorisez pas les constructions d’exécution qui ne font pas partie d’ECMAScript.", - "Do_not_emit_comments_to_output_6009": "Ne pas émettre de commentaires dans la sortie.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "N'émettez pas de déclarations pour du code ayant une annotation '@internal'.", - "Do_not_emit_outputs_6010": "N'émettez pas de sorties.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "N'émettez pas de sortie si des erreurs sont signalées.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "N'émettez pas de directives 'use strict' dans une sortie de module.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "N'effacez pas les déclarations d'enum const dans le code généré.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Ne générez pas de fonctions d'assistance personnalisées comme '__extends' dans la sortie compilée.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "N'incluez pas le fichier bibliothèque par défaut (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Ne signalez pas les erreurs pour le code inaccessible.", - "Do_not_report_errors_on_unused_labels_6074": "Ne signalez pas les erreurs pour les étiquettes inutilisées.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Ne pas résoudre le chemin réel des liens symboliques.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Ne transformez ou n’elidez pas les importations ou exportations non marquées en tant que type uniquement, en veillant à ce qu’elles soient écrites dans le format du fichier de sortie en fonction du paramètre « module ».", - "Do_not_truncate_error_messages_6165": "Ne tronquez pas les messages d'erreur.", - "Duplicate_function_implementation_2393": "Implémentation de fonction en double.", - "Duplicate_identifier_0_2300": "Identificateur '{0}' en double.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans l'étendue de plus haut niveau d'un module.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans la portée de plus haut niveau d'un module contenant des fonctions async.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificateur en double «{0}». Le compilateur réserve le nom «{1}» lors de l’émission de références « super » dans les initialiseurs statiques.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificateur '{0}' en double. Le compilateur utilise la déclaration '{1}' pour prendre en charge les fonctions async.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificateur '{0}' dupliqué. Les éléments statiques et les éléments d'instance ne peuvent pas partager le même nom privé.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificateur dupliqué 'arguments'. Le compilateur utilise 'arguments' pour initialiser les paramètres rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Dupliquez l'identificateur '_newTarget'. Le compilateur utilise la déclaration de variable '_newTarget' pour capturer la référence de méta-propriété 'new.target'.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificateur dupliqué '_this'. Le compilateur utilise la déclaration de variable '_this' pour capturer la référence 'this'.", - "Duplicate_index_signature_for_type_0_2374": "Doublon de signature d’index pour le type « {0} ».", - "Duplicate_label_0_1114": "Étiquette '{0}' en double.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Propriété dupliquée '{0}'.", - "Duplicate_regular_expression_flag_1500": "L’indicateur d’expression régulière est dupliqué.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Le spécificateur de l'importation dynamique doit être de type 'string', mais ici il est de type '{0}'.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Les importations dynamiques sont prises en charge uniquement lorsque l’indicateur « --module » est défini sur « es2020 », « es2022 », « esnext », « commonjs », « amd », « system », « umd », « node16 », « node18 », « node20 » ou « nodenext ».", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Les importations dynamiques peuvent accepter uniquement un spécificateur de module et un ensemble facultatif d’attributs en tant qu’arguments", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Les importations dynamiques prennent uniquement en charge un deuxième argument lorsque l’option « --module » est définie sur « esnext », « node16 », « node18 », « node20 », « nodenext » ou « preserve ».", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Les importations et exportations ECMAScript ne peuvent pas être écrites dans un fichier CommonJS sous 'verbatimModuleSyntax'.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Les importations et exportations ECMAScript ne peuvent pas être écrites dans un fichier CommonJS sous 'verbatimModuleSyntax'. Ajustez le champ 'type' dans le 'package.json' le plus proche pour faire de ce fichier un module ECMAScript, ou ajustez vos paramètres 'verbatimModuleSyntax', 'module' et 'moduleResolution' dans TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "La syntaxe du module ECMAScript n’est pas autorisée dans un module CommonJS quand 'module' est défini sur 'preserve'.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Chaque déclaration de '{0}.{1}' diffère dans sa valeur, où '{2}' était attendu, mais '{3}' a été donné.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Chaque membre du type union '{0}' a des signatures de construction, mais aucune de ces signatures n'est compatible avec les autres.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Chaque membre du type union '{0}' a des signatures, mais aucune de ces signatures n'est compatible avec les autres.", - "Editor_Support_6249": "Prise en charge de l’Éditeur", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'élément a implicitement un type 'any', car l'expression de type '{0}' ne peut pas être utilisée pour indexer le type '{1}'.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'élément possède implicitement un type 'any', car l'expression d'index n'est pas de type 'number'.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index. Est-ce que vous avez voulu appeler '{1}' ?", - "Emit_6246": "Émet", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Émettez des champs de classe conformes à la norme ECMAScript.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Émettez une marque d'ordre d'octet (BOM) UTF-8 au début des fichiers de sortie.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Émettez un seul fichier avec des mappages de sources au lieu d'avoir un fichier distinct.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Émettez un profil processeur V8 de l’exécution du compilateur pour le débogage.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Émettez un code JavaScript supplémentaire pour simplifier la prise en charge de l’importation des modules CommonJS. Cela permet à « allowSyntheticDefaultImports » d’être compatible avec le type.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Émettez des champs de classe avec Define à la place de Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Émettez des métadonnées de type conception pour les déclarations décorées dans les fichiers sources.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Émettez des JavaScript plus conformes, mais plus détaillés et moins performants pour l’itération.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Émettez la source aux côtés des mappages de sources dans un fichier unique. Nécessite la définition de '--inlineSourceMap' ou '--sourceMap'.", - "Enable_all_strict_type_checking_options_6180": "Activez toutes les options de contrôle de type strict.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Activer la couleur et la mise en forme dans la sortie de TypeScript pour faciliter la lecture des erreurs du compilateur.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Activez les contraintes qui autorisent l’utilisation d’un projet TypeScript avec des références de projet.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Activez le rapport d’erreurs pour les chemins de code qui ne sont pas explicitement renvoyés dans une fonction.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Activez le rapport d’erreurs pour les expressions et les déclarations avec un type « any » implicite.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Activez le rapport d’erreurs pour les cas échoués dans les instructions switch.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Activez le rapport d’erreurs dans les fichiers JavaScript vérifiés par type.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Activez le rapport d’erreurs lorsque les variables locales ne sont pas lues.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Activez le rapport d’erreurs lorsque « this » reçoit le type « any ».", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Activez la prise en charge expérimentale des éléments décoratifs expérimentaux hérités.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Activez l’importation de fichiers avec n’importe quelle extension, à condition qu’un fichier de déclaration soit présent.", - "Enable_importing_json_files_6689": "Activer l’importation des fichiers .json.", - "Enable_lib_replacement_6808": "Activez le remplacement de la bibliothèque.", - "Enable_project_compilation_6302": "Activer la compilation du projet", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Activez des méthodes 'bind', 'call' et 'apply' strictes sur les fonctions.", - "Enable_strict_checking_of_function_types_6186": "Activez la vérification stricte des types de fonction.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Activez la vérification stricte de l'initialisation des propriétés dans les classes.", - "Enable_strict_null_checks_6113": "Activez strict null checks.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Activer l'option 'experimentalDecorators' dans votre fichier config", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Activer l'indicateur '--jsx' dans votre fichier config", - "Enable_tracing_of_the_name_resolution_process_6085": "Activez le traçage du processus de résolution de noms.", - "Enable_verbose_logging_6713": "Activer la journalisation détaillée.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Active l'interopérabilité entre les modules CommonJS et ES via la création d'objets d'espace de noms pour toutes les importations. Implique 'allowSyntheticDefaultImports'.", - "Enables_experimental_support_for_ES7_decorators_6065": "Active la prise en charge expérimentale des éléments décoratifs ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Active la prise en charge expérimentale pour l'émission des métadonnées de type pour les éléments décoratifs.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Applique l’utilisation d’accesseurs indexés pour les clés déclarées à l’aide d’un type indexé.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Vérifiez que les membres de substitution dans les classes dérivées sont marqués avec un modificateur de remplacement.", - "Ensure_that_casing_is_correct_in_imports_6637": "Assurez-vous que la casse est correcte dans les importations.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Assurez-vous que chaque fichier peut être recompilé en toute sécurité sans s’appuyer sur d’autres importations.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Assurez-vous que « use strict » est toujours émis.", - "Entering_conditional_exports_6413": "Entrée dans des exportations conditionnelles.", - "Entry_point_for_implicit_type_library_0_1420": "Point d'entrée pour la bibliothèque de types implicites '{0}'", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Point d'entrée pour la bibliothèque de types implicites '{0}' ayant le packageId '{1}'", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions et ayant le packageId '{1}'", - "Enum_0_used_before_its_declaration_2450": "Enum '{0}' utilisé avant sa déclaration.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Les déclarations enum ne peuvent fusionner qu'avec des espaces de noms ou d'autres déclarations enum.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Les déclarations d'enum doivent toutes être const ou non const.", - "Enum_member_expected_1132": "Membre enum attendu.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Le membre Enum suivant un membre numérique non littéral doit avoir un initialiseur lorsque « isolatedModules » est activé.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Les initialiseurs de membre enum doivent être calculables sans référence à des symboles externes avec --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "Un membre enum doit posséder un initialiseur.", - "Enum_name_cannot_be_0_2431": "Le nom d'enum ne peut pas être '{0}'.", - "Environment_Settings_6285": "Paramètres d'environnement", - "Errors_Files_6041": "Fichiers d’erreurs", - "Escape_sequence_0_is_not_allowed_1488": "La séquence d’échappement « {0} » n’est pas autorisée.", - "Examples_Colon_0_6026": "Exemples : {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Complexité excessive comparant les types « {0} » et « {1} ».", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profondeur excessive de la pile pour la comparaison des types '{0}' et '{1}'.", - "Exiting_conditional_exports_6416": "Sortie des exportations conditionnelles.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Arguments de type {0}-{1} attendus ; indiquez-les avec la balise '@extends'.", - "Expected_0_arguments_but_got_1_2554": "{0} arguments attendus, mais {1} reçus.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} arguments attendus, mais {1} reçus. Avez-vous oublié d'inclure 'void' dans votre argument de type pour 'Promise' ?", - "Expected_0_type_arguments_but_got_1_2558": "{0} arguments de type attendus, mais {1} reçus.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Arguments de type {0} attendus ; indiquez-les avec la balise '@extends'.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 argument attendu, mais 0 obtenu. 'new Promise()' a besoin d’un indicateur JSDoc pour produire un 'resolve' qui peut être appelé sans arguments.", - "Expected_a_Unicode_property_name_1523": "Le nom de propriété Unicode est attendu.", - "Expected_a_Unicode_property_name_or_value_1527": "Une valeur ou un nom de propriété Unicode est attendu.", - "Expected_a_Unicode_property_value_1525": "La valeur de propriété Unicode est attendue.", - "Expected_a_capturing_group_name_1514": "Le nom de groupe de capture est attendu.", - "Expected_a_class_set_operand_1520": "Une opérande de jeu de classes est attendue.", - "Expected_at_least_0_arguments_but_got_1_2555": "Au moins {0} arguments attendus, mais {1} reçus.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Balise de fermeture JSX correspondante attendue pour '{0}'.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Balise de fermeture correspondante attendue pour le fragment JSX.", - "Expected_for_property_initializer_1442": "« = » attendu pour l’initialiseur de propriété.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Le type attendu du champ '{0}' dans 'package.json' est censé être '{1}'. Obtention de '{2}'.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Spécification explicite du genre de résolution de module : '{0}'.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Impossible d'effectuer l'élévation à une puissance sur des valeurs 'bigint' sauf si l'option 'target' a la valeur 'es2016' ou une valeur qui correspond à une version ultérieure.", - "Export_0_from_module_1_90059": "Exporter '{0}' à partir du module '{1}'", - "Export_all_referenced_locals_90060": "Exporter tous les variables locales référencées", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Vous ne pouvez pas utiliser l'assignation d'exportation pour cibler des modules ECMAScript. Utilisez 'export default' ou un autre format de module à la place.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "L'assignation d'exportation n'est pas prise en charge quand l'indicateur '--module' est 'system'.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La déclaration d'exportation est en conflit avec la déclaration exportée de '{0}'.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Les déclarations d'exportation ne sont pas autorisées dans un espace de noms.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Le spécificateur d’exportation « {0} » n’existe pas dans l’étendue package.json sur le chemin d’accès « {1} ».", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias de type exporté '{0}' possède ou utilise le nom privé '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias de type exporté '{0}' a ou utilise le nom privé '{1}' du module {2}.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module privé '{2}'.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportée '{0}' possède ou utilise le nom privé '{1}'.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Les exportations et les assignations d'exportation ne sont pas autorisées dans les augmentations de module.", - "Expression_expected_1109": "Expression attendue.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L’expression doit être entre parenthèses pour être utilisée comme élément décoratif.", - "Expression_or_comma_expected_1137": "Expression ou virgule attendue.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'expression produit un type de tuple trop grand pour être représenté.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'expression produit un type union trop complexe à représenter.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Expression résolue en '_super' et utilisée par le compilateur pour capturer la référence de classe de base.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'expression génère une déclaration de variable '_newTarget' que le compilateur utilise pour capturer la référence de méta-propriété 'new.target'.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Expression résolue en déclaration de variable '_this' et utilisée par le compilateur pour capturer la référence 'this'.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Le type d'expression ne peut pas être déduit avec --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clause Extends ne peut pas contenir d’expression avec --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clause Extends pour le type déduit « {0} » a ou utilise le nom privé « {1} ».", - "Extract_base_class_to_variable_90064": "Extraire la classe de base dans la variable", - "Extract_binding_expressions_to_variable_90066": "Extraire des expressions de liaison dans une variable", - "Extract_constant_95006": "Extraire la constante", - "Extract_default_export_to_variable_90065": "Extraire l’exportation par défaut vers la variable", - "Extract_function_95005": "Extraire la fonction", - "Extract_to_0_in_1_95004": "Extraire vers {0} dans {1}", - "Extract_to_0_in_1_scope_95008": "Extraire vers {0} dans la portée {1}", - "Extract_to_0_in_enclosing_scope_95007": "Extraire vers {0} dans la portée englobante", - "Extract_to_interface_95090": "Extraire vers l'interface", - "Extract_to_type_alias_95078": "Extraire vers l'alias de type", - "Extract_to_typedef_95079": "Extraire vers typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraire dans la variable et remplacer par '{0} en tant que typeof {0}'", - "Extract_type_95077": "Type d'extraction", - "FILE_6035": "FICHIER", - "FILE_OR_DIRECTORY_6040": "FICHIER OU RÉPERTOIRE", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Échec de la recherche de peerDependency '{0}'.", - "Failed_to_resolve_under_condition_0_6415": "Échec de la résolution sous la condition «{0}».", - "Fallthrough_case_in_switch_7029": "Case avec fallthrough dans une instruction switch.", - "File_0_does_not_exist_6096": "Le fichier '{0}' n'existe pas.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Selon des recherches mises en cache antérieures, le fichier '{0}' n’existe pas.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Selon des recherches mises en cache antérieures, le fichier '{0}' existe.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Le fichier '{0}' existe - utilisez-le comme résultat de résolution de nom.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Le fichier '{0}' a une extension non prise en charge. Les seules extensions prises en charge sont {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Le fichier '{0}' est un fichier JavaScript. Est-ce que vous avez voulu activer l'option 'allowJs' ?", - "File_0_is_not_a_module_2306": "Le fichier '{0}' n'est pas un module.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Le fichier '{0}' ne figure pas dans la liste de fichiers du projet '{1}'. Les projets doivent lister tous les fichiers ou utiliser un modèle 'include'.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Le fichier '{0}' ne se trouve pas sous 'rootDir' '{1}'. 'rootDir' est supposé contenir tous les fichiers sources.", - "File_0_not_found_6053": "Fichier '{0}' introuvable.", - "File_Layout_6284": "Disposition de fichier", - "File_Management_6245": "Gestion de fichiers", - "File_appears_to_be_binary_1490": "Le fichier semble être binaire.", - "File_change_detected_Starting_incremental_compilation_6032": "Modification de fichier détectée. Démarrage de la compilation incrémentielle...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Le fichier est un module CommonJS, car « {0} » n’a pas de champ « type »", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Le fichier est un module CommonJS, car « {0} » a un champ « type » dont la valeur n’est pas « module »", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Le fichier est un module CommonJS, car « package.json » est introuvable", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Le fichier est un module ECMAScript, car « {0} » a un champ « type » avec la valeur « module »", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Le fichier est un module CommonJS ; il peut être converti en module ES.", - "File_is_default_library_for_target_specified_here_1426": "Le fichier représente la bibliothèque par défaut de la cible spécifiée ici.", - "File_is_entry_point_of_type_library_specified_here_1419": "Le fichier représente le point d'entrée de la bibliothèque de types spécifiée ici.", - "File_is_included_via_import_here_1399": "Le fichier est inclus via une importation ici.", - "File_is_included_via_library_reference_here_1406": "Le fichier est inclus via une référence à la bibliothèque ici.", - "File_is_included_via_reference_here_1401": "Le fichier est inclus via une référence ici.", - "File_is_included_via_type_library_reference_here_1404": "Le fichier est inclus via une référence à la bibliothèque de types ici.", - "File_is_library_specified_here_1423": "Le fichier représente la bibliothèque spécifiée ici.", - "File_is_matched_by_files_list_specified_here_1410": "Le fichier correspond à la liste 'files' spécifiée ici.", - "File_is_matched_by_include_pattern_specified_here_1408": "Le fichier correspond au modèle include spécifié ici.", - "File_is_output_from_referenced_project_specified_here_1413": "Le fichier représente la sortie du projet référencé spécifié ici.", - "File_is_output_of_project_reference_source_0_1428": "Le fichier représente la sortie de la source de référence de projet '{0}'", - "File_is_source_from_referenced_project_specified_here_1416": "Le fichier représente la source du projet référencé spécifié ici.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Le nom de fichier '{0}' diffère du nom de fichier '{1}' déjà inclus uniquement par la casse.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Le nom de fichier '{0}' a une extension '{1}' - recherche '{2}' à la place.", - "File_name_0_has_a_1_extension_stripping_it_6132": "Le nom de fichier '{0}' a une extension '{1}'. Suppression de l'extension.", - "File_redirects_to_file_0_1429": "Le fichier est redirigé vers le fichier '{0}'", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La spécification de fichier ne peut pas contenir un répertoire parent ('..') après un caractère générique de répertoire récursif ('**') : '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Une spécification de fichier ne peut pas se terminer par un caractère générique de répertoire récursif ('**') : '{0}'.", - "Filters_results_from_the_include_option_6627": "Filtre les résultats de l’option « inclure ».", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Corriger toutes les fautes d'orthographe détectées", - "Fix_all_expressions_possibly_missing_await_95085": "Corriger toutes les expressions où il manque éventuellement 'await'", - "Fix_all_implicit_this_errors_95107": "Corriger toutes les erreurs implicites liées à 'this'", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corriger tous les types de retour incorrects des fonctions asynchrone", - "Fix_all_with_type_only_imports_95182": "Corriger tout avec des importations de type uniquement", - "For_nodejs_Colon_6287": "Pour nodejs :", - "Found_0_errors_6217": "{0} erreurs trouvées.", - "Found_0_errors_Watching_for_file_changes_6194": "{0} erreurs trouvées. Changements de fichier sous surveillance.", - "Found_0_errors_in_1_files_6261": "Erreurs {0} trouvées dans les fichiers {1} .", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Erreurs {0} trouvées dans le même fichier, à partir de : {1}", - "Found_1_error_6216": "1 erreur trouvée.", - "Found_1_error_Watching_for_file_changes_6193": "1 erreur trouvée. Changements de fichier sous surveillance.", - "Found_1_error_in_0_6259": "1 erreur trouvée dans {0}", - "Found_package_json_at_0_6099": "'package.json' trouvé sur '{0}'.", - "Found_peerDependency_0_with_1_version_6282": "PeerDependency '{0}' trouvé avec '{1}' version.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ».", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les définitions de classe sont automatiquement en mode strict.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les modules sont automatiquement en mode strict.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'expression de fonction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour '{0}'.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implémentation de fonction est manquante ou ne suit pas immédiatement la déclaration.", - "Function_implementation_name_must_be_0_2389": "Le nom de l'implémentation de fonction doit être '{0}'.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La fonction possède implicitement le type de retour 'any', car elle n'a pas d'annotation de type de retour, et est référencée directement ou indirectement dans l'une de ses expressions de retour.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "La fonction n'a pas d'instruction return de fin, et le type de retour n'inclut pas 'undefined'.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La fonction doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", - "Function_not_implemented_95159": "Fonction non implémentée.", - "Function_overload_must_be_static_2387": "La surcharge de fonction doit être statique.", - "Function_overload_must_not_be_static_2388": "La surcharge de fonction ne doit pas être statique.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type union.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type intersection.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Le type de fonction, qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{0}'.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La fonction avec des corps ne peut fusionner qu’avec des classes qui sont ambiantes.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Générez des fichiers .d.ts à partir de fichiers TypeScript et JavaScript dans votre projet.", - "Generate_get_and_set_accessors_95046": "Générer les accesseurs 'get' et 'set'", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Générer des accesseurs 'get' et 'set' pour toutes les propriétés de remplacement", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Génère un profil de processeur.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Génère un mappage de source pour chaque fichier '.d.ts' correspondant.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Génère une trace d'événement et une liste de types.", - "Generates_corresponding_d_ts_file_6002": "Génère le fichier '.d.ts' correspondant.", - "Generates_corresponding_map_file_6043": "Génère le fichier '.map' correspondant.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Le générateur a implicitement un type de rendement « {0} ». Envisagez de fournir une annotation de type de retour.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Les générateurs ne sont pas autorisés dans un contexte ambiant.", - "Generic_type_0_requires_1_type_argument_s_2314": "Le type générique '{0}' exige {1} argument(s) de type.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Le type générique '{0}' nécessite entre {1} et {2} arguments de type.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Les exportations de modules globaux ne peuvent apparaître qu'au niveau supérieur.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de déclaration.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de module.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Le type global '{0}' doit être un type de classe ou d'interface.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Le type global '{0}' doit avoir {1} paramètre(s) de type.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Les recompilations dans '--incremental' et '--watch' supposent que les changements apportés à un fichier affectent uniquement les fichiers qui dépendent directement de ce fichier.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Les recompilations dans les projets qui utilisent le mode « incrémentiel » et « espion » supposent que les modifications au sein d’un fichier affectent uniquement les fichiers directement en fonction de celui-ci.", - "Hexadecimal_digit_expected_1125": "Chiffre hexadécimal attendu.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Identificateur attendu. '{0}' est un mot réservé au niveau supérieur d'un module.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificateur attendu. '{0}' est un mot réservé en mode strict.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Identificateur attendu. '{0}' est un mot réservé en mode strict. Les définitions de classe sont automatiquement en mode strict.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Identificateur attendu. '{0}' est un mot réservé en mode strict. Les modules sont automatiquement en mode strict.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificateur attendu. '{0}' est un mot réservé qui ne peut pas être utilisé ici.", - "Identifier_expected_1003": "Identificateur attendu.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificateur attendu. '__esModule' est réservé en tant que marqueur exporté durant la transformation des modules ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Identificateur ou littéral de chaîne attendu", - "Identifier_string_literal_or_number_literal_expected_1496": "Identificateur, littéral de chaîne ou littéral de nombre attendu.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si le package '{0}' expose réellement ce module, envoyez une demande de tirage (pull request) pour modifier 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si le package' {0} 'expose effectivement ce module, essayez d’ajouter un nouveau fichier de déclaration (. d. TS) contenant’declare module' {1} '; '", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignorez le fichier tsconfig trouvé et compilez avec les options et fichiers spécifiés en ligne de commande.", - "Ignore_this_error_message_90019": "Ignorer ce message d'erreur", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignore tsconfig.json, compile les fichiers spécifiés avec les options du compilateur par défaut.", - "Implement_all_inherited_abstract_classes_95040": "Implémenter toutes les classes abstraites héritées", - "Implement_all_unimplemented_interfaces_95032": "Implémenter toutes les interfaces non implémentées", - "Implement_inherited_abstract_class_90007": "Implémenter la classe abstraite héritée", - "Implement_interface_0_90006": "Implémenter l'interface '{0}'", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clause implements de la classe exportée '{0}' possède ou utilise le nom privé '{1}'.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversion implicite de 'symbol' en 'string' va échouer au moment de l'exécution. Incluez dans un wrapper cette expression en 'String(...)'.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L’importation «{0}» est en conflit avec la valeur globale utilisée dans ce fichier. Elle doit donc être déclarée avec une importation de type uniquement lorsque ' isolatedModules ' est activé.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L’importation '{0}' est en conflit avec la valeur locale. Elle doit donc être déclarée avec une importation de type uniquement lorsque 'isolatedModules' est activé.", - "Import_0_from_1_90013": "Importez '{0}' à partir de \"{1}\".", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Les valeurs d’assertion d’importation doivent être des expressions littérales de chaîne.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Les assertions d’importation ne sont pas autorisées sur les instructions qui se compilent en appels CommonJS ' require'.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Les assertions d’importation sont prises en charge uniquement lorsque l’option « --module » est définie sur « esnext », « node18 », « node20 », « nodenext » ou « preserve ».", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Les assertions d’importation ne peuvent pas être utilisées avec les importations ou exportations de type uniquement.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Les assertions d’importation ont été remplacées par des attributs d’importation. Utilisez 'with' à la place de 'assert'.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Vous ne pouvez pas utiliser l'assignation d'importation pour cibler des modules ECMAScript. Utilisez plutôt 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' ou un autre format de module.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Les valeurs d’attribut d’importation doivent être des expressions littérales de chaîne.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Les attributs d’importation ne sont pas autorisés sur les instructions qui se compilent en appels CommonJS ' require'.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Les attributs d’importation sont pris en charge uniquement lorsque l’option « --module » a la valeur « esnext », « node18 », « node20 », « nodenext » ou « preserve ».", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Les attributs d’importation ne peuvent pas être utilisés avec des importations ou des exportations de type uniquement.", - "Import_declaration_0_is_using_private_name_1_4000": "La déclaration d'importation '{0}' utilise le nom privé '{1}'.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La déclaration d'importation est en conflit avec la déclaration locale de '{0}'.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Les déclarations d'importation dans un espace de noms ne peuvent pas référencer un module.", - "Import_emit_helpers_from_tslib_6139": "Importer l'assistance à l'émission à partir de 'tslib'.", - "Import_may_be_converted_to_a_default_import_80003": "L'importation peut être convertie en importation par défaut.", - "Import_name_cannot_be_0_2438": "Le nom d'importation ne peut pas être '{0}'.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Une déclaration d'importation ou d'exportation dans une déclaration de module ambiant ne peut référencer un module au moyen d'un nom de module relatif.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Le spécificateur d’importation « {0} » n’existe pas dans l’étendue package.json sur le chemin d’accès « {1} ».", - "Imported_via_0_from_file_1_1393": "Importé(e) via {0} à partir du fichier '{1}'", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importé(e) via {0} à partir du fichier '{1}' pour importer 'importHelpers' comme indiqué dans compilerOptions", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importé(e) via {0} à partir du fichier '{1}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}'", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer 'importHelpers' comme indiqué dans compilerOptions", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "L'importation d'un fichier JSON dans un module ECMAScript nécessite un attribut d'importation « type : « json » » lorsque « module » est défini sur « {0} ».", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Les importations ne sont pas autorisées dans les augmentations de module. Déplacez-les vers le module externe englobant.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Dans les déclarations d'enums ambiants, l'initialiseur de membre doit être une expression constante.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Dans un enum avec plusieurs déclarations, seule une déclaration peut omettre un initialiseur pour son premier élément d'enum.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluez une liste de fichiers. Cela ne prend pas en charge les modèles Glob, par opposition à « inclure ».", - "Include_modules_imported_with_json_extension_6197": "Inclure les modules importés avec l'extension '.json'", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluez le code source dans les images sources à l’intérieur du Code JavaScript émis.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluez les fichiers sourcemap à l’intérieur du Code JavaScript émis.", - "Includes_imports_of_types_referenced_by_0_90054": "Inclut les importations de types référencés par « {0} »", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "En incluant --watch, -w commence à regarder le projet actuel pour les modifications apportées au fichier. Une fois défini, vous pouvez configurer le mode espion avec :", - "Incomplete_quantifier_Digit_expected_1505": "Quantificateur incomplet. Chiffre attendu.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "La signature d’index pour le type « {0} » est manquante dans le type « {1} ».", - "Index_signature_in_type_0_only_permits_reading_2542": "La signature d'index du type '{0}' autorise uniquement la lecture.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Les déclarations individuelles de la déclaration fusionnée '{0}' doivent toutes être exportées ou locales.", - "Infer_all_types_from_usage_95023": "Déduire tous les types de l'utilisation", - "Infer_function_return_type_95148": "Déduire le type de retour de la fonction", - "Infer_parameter_types_from_usage_95012": "Déduire les types des paramètres à partir de l'utilisation", - "Infer_this_type_of_0_from_usage_95080": "Déduire le type 'this' de '{0}' à partir de l'utilisation", - "Infer_type_of_0_from_usage_95011": "Déduire le type de '{0}' à partir de l'utilisation", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L’inférence des expressions de classe n’est pas prise en charge avec --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Initialiser la propriété '{0}' dans le constructeur", - "Initialize_static_property_0_90021": "Initialiser la propriété statique '{0}'", - "Initializer_for_property_0_2811": "Initialiseur de la propriété '{0}'", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'initialiseur de la variable membre d'instance '{0}' ne peut pas référencer l'identificateur '{1}' déclaré dans le constructeur.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Les initialiseurs ne sont pas autorisés dans les contextes ambiants.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialise un projet TypeScript et crée un fichier tsconfig.json.", - "Inline_variable_95184": "Variable inline", - "Insert_command_line_options_and_files_from_a_file_6030": "Insérer les options de ligne de commande et les fichiers à partir d'un fichier texte.", - "Install_0_95014": "Installer '{0}'", - "Install_all_missing_types_packages_95033": "Installer tous les packages de types manquants", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interface '{0}' ne peut pas étendre simultanément les types '{1}' et '{2}'.", - "Interface_0_incorrectly_extends_interface_1_2430": "L'interface '{0}' étend de manière incorrecte l'interface '{1}'.", - "Interface_declaration_cannot_have_implements_clause_1176": "Une déclaration d'interface ne peut pas avoir de clause 'implements'.", - "Interface_must_be_given_a_name_1438": "Un nom doit être attribué à l’interface.", - "Interface_name_cannot_be_0_2427": "Le nom de l'interface ne peut pas être '{0}'.", - "Interop_Constraints_6252": "Contraintes d’interopérabilité", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpréter les types de propriétés facultatifs comme écrits, plutôt que d’ajouter « undefined ».", - "Invalid_character_1127": "Caractère non valide.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Le spécificateur d’importation non valide « {0} » n’a aucune résolution possible.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nom de module non valide dans l'augmentation. Le module '{0}' est résolu en module non typé à l'emplacement '{1}', ce qui empêche toute augmentation.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nom de module non valide dans l'augmentation. Le module '{0}' est introuvable.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Chaîne facultative non valide à partir de la nouvelle expression. Voulez-vous appeler '{0}()' ?", - "Invalid_reference_directive_syntax_1084": "Syntaxe de directive 'reference' non valide.", - "Invalid_syntax_in_decorator_1498": "Syntaxe non valide dans l’élément décoratif.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Utilisation non valide de « {0} ». Il ne peut pas être utilisé à l’intérieur d’un bloc statique de classe.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Utilisation non valide de '{0}'. Les modules sont automatiquement en mode strict.", - "Invalid_use_of_0_in_strict_mode_1100": "Utilisation non valide de '{0}' en mode strict.", - "Invalid_value_for_ignoreDeprecations_5103": "Valeur non valide pour '--ignoreDeprecations'.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valeur non valide pour 'jsxFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valeur non valide pour 'jsxFragmentFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valeur non valide pour '--reactNamespace'. '{0}' n'est pas un identificateur valide.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Il manque probablement une virgule pour séparer ces deux expressions de modèle. Elles forment une expression de modèle étiquetée qui ne peut pas être appelée.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Son type d'élément '{0}' n'est pas un élément JSX valide.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Son type d'instance '{0}' n'est pas un élément JSX valide.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Son type de retour '{0}' n'est pas un élément JSX valide.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Son type '{0}' n’est pas un type d’élément JSX valide.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La balise JSDoc '@{0} {1}' ne correspond pas à la clause 'extends {2}'.", - "JSDoc_0_is_not_attached_to_a_class_8022": "La balise JSDoc '@{0}' n'est pas attachée à une classe.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' peut apparaître uniquement dans le dernier paramètre d'une signature.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom. Elle doit correspondre à 'arguments', si elle est de type tableau.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Le typedef JSDoc peut être converti en type TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La balise JSDoc '@typedef' doit avoir une annotation de type ou être suivie des balises '@property' ou '@member'.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Les typedefs JSDoc peuvent être convertis en types TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Les types JSDoc peuvent uniquement être utilisés dans les commentaires de la documentation.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Les types JSDoc peuvent être déplacés vers les types TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Les attributs JSX doivent uniquement être attribués à une 'expression' non vide.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "L'élément JSX '{0}' n'a pas de balise de fermeture correspondante.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La classe de l'élément JSX ne prend pas en charge les attributs, car elle n'a pas de propriété '{0}'.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "L'élément JSX a implicitement le type 'any', car il n'existe aucune interface 'JSX.{0}'.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "L'élément JSX a implicitement le type 'any', car le type global 'JSX.Element' n'existe pas.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Le type '{0}' de l'élément JSX n'a pas de signatures de construction ou d'appel.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Les éléments JSX ne peuvent pas avoir plusieurs attributs du même nom.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Les expressions JSX ne peuvent pas utiliser l'opérateur virgule. Est-ce que vous avez voulu écrire un tableau ?", - "JSX_expressions_must_have_one_parent_element_2657": "Les expressions JSX doivent avoir un élément parent.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Le fragment JSX n'a pas de balise de fermeture correspondante.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Les expressions d'accès aux propriétés JSX ne peuvent pas inclure de noms d'espaces de noms JSX", - "JSX_spread_child_must_be_an_array_type_2609": "L'enfant spread JSX doit être un type de tableau.", - "JavaScript_Support_6247": "Prise en charge de JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "La cible du saut ne peut pas traverser une limite de fonction.", - "KIND_6034": "GENRE", - "Keywords_cannot_contain_escape_characters_1260": "Les mots clés ne peuvent pas contenir de caractères d'échappement.", - "LOCATION_6037": "EMPLACEMENT", - "Language_and_Environment_6254": "Langage et Environnement", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Le côté gauche de l'opérateur virgule n'est pas utilisé, et n'a aucun effet secondaire.", - "Library_0_specified_in_compilerOptions_1422": "Bibliothèque '{0}' spécifiée dans compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Bibliothèque référencée via '{0}' à partir du fichier '{1}'", - "Line_break_not_permitted_here_1142": "Saut de ligne non autorisé ici.", - "Line_terminator_not_permitted_before_arrow_1200": "Marque de fin de ligne non autorisée devant une flèche.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Liste des suffixes de nom de fichier à rechercher lors de la résolution d’un module.", - "List_of_folders_to_include_type_definitions_from_6161": "Liste des dossiers à partir desquels inclure les définitions de type.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste des dossiers racines dont le contenu combiné représente la structure du projet au moment de l'exécution.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Chargement de '{0}' à partir du répertoire racine '{1}', emplacement candidat '{2}'.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Chargement du module «{0}» à partir du dossier « node_modules », types de fichiers cibles : {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Chargement du module en tant que fichier/dossier, emplacement du module candidat '{0}', types de fichiers cibles : {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Chemins d’accès de journal utilisés pendant le processus « moduleResolution ».", - "Longest_matching_prefix_for_0_is_1_6108": "Le préfixe correspondant le plus long pour '{0}' est '{1}'.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Recherche dans le dossier 'node_modules', emplacement initial '{0}'.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Faire de tous les appels 'super()' la première instruction dans leur constructeur", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Faites en sorte que keyof retourne uniquement des chaînes au lieu de chaînes, de nombres ou de symboles. Option héritée.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Faire de l'appel à 'super()' la première instruction du constructeur", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Le type d'objet mappé a implicitement un type de modèle 'any'.", - "Mark_array_literal_as_const_90070": "Marquer le littéral du tableau comme const", - "Matched_0_condition_1_6403": "Condition '{0}' correspondant à '{1}'.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Mise en correspondance par défaut du modèle include '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "Correspond au modèle include '{0}' dans '{1}'", - "Member_0_implicitly_has_an_1_type_7008": "Le membre '{0}' possède implicitement un type '{1}'.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Le membre '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "Merge_conflict_marker_encountered_1185": "Marqueur de conflit de fusion rencontré.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La déclaration fusionnée '{0}' ne peut pas inclure de déclaration d'exportation par défaut. Ajoutez plutôt une déclaration 'export default {0}' distincte.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La méta-propriété '{0}' n'est autorisée que dans le corps d'une déclaration de fonction, d'une expression de fonction ou d'un constructeur.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "La méthode '{0}' ne peut pas avoir d'implémentation, car elle est marquée comme étant abstraite.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom privé '{1}'.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "La méthode doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", - "Method_not_implemented_95158": "Méthode non implémentée.", - "Modifiers_cannot_appear_here_1184": "Les modificateurs ne peuvent pas apparaître ici.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Le module '{0}' peut uniquement être importé par défaut à l'aide de l'indicateur '{1}'", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Le module '{0}' ne peut pas être importé à l'aide de cette construction. Le spécificateur se résout uniquement en un module ES, qui ne peut pas être importé avec 'require'. Utilisez plutôt une importation ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Le module '{0}' déclare '{1}' localement, mais il est exporté en tant que '{2}'.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Le module '{0}' déclare '{1}' localement, mais il n'est pas exporté.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Le module '{0}' ne fait pas référence à un type, mais il est utilisé ici en tant que type. Est-ce que vous avez voulu utiliser 'typeof import('{0}')' ?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Le module '{0}' ne fait pas référence à une valeur, mais est utilisé en tant que valeur ici.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Le module {0} a déjà exporté un membre nommé '{1}'. Effectuez une réexportation explicite pour lever l'ambiguïté.", - "Module_0_has_no_default_export_1192": "Le module '{0}' n'a pas d'exportation par défaut.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Le module '{0}' n'a aucune exportation par défaut. Est-ce que vous avez voulu utiliser 'import { {1} } from {0}' à la place ?", - "Module_0_has_no_exported_member_1_2305": "Le module '{0}' n'a aucun membre exporté '{1}'.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Le module '{0}' n'a aucun membre exporté '{1}'. Est-ce que vous avez voulu utiliser 'import {1} from {0}' à la place ?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Le module '{0}' est masqué par une déclaration locale portant le même nom.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Le module '{0}' utilise 'export =' et ne peut pas être utilisé avec 'export *'.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Le module '{0}' a été résolu en tant que module ambiant déclaré localement dans le fichier '{1}'.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Le module «{0}» a été résolu en «{1}», mais « --allowArbitraryExtensions » n’est pas défini.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Le module '{0}' a été résolu en '{1}' mais '--jsx' n'est pas défini.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Le module '{0}' a été résolu en '{1}' mais '--resolveJsonModule' n'est pas utilisé.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Les noms de déclaration de module ne peuvent utiliser que des chaînes entre guillemets.", - "Module_name_0_matched_pattern_1_6092": "Nom de module '{0}', modèle correspondant '{1}'.", - "Module_name_0_was_not_resolved_6090": "======== Le nom de module '{0}' n'a pas été résolu. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Le nom de module '{0}' a été correctement résolu en '{1}'. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Le nom de module '{0}' a été correctement résolu en '{1}' avec l'ID de package '{2}'. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Le genre de résolution de module n'est pas spécifié. Utilisation de '{0}'.", - "Module_resolution_using_rootDirs_has_failed_6111": "Échec de la résolution de module à l'aide de 'rootDirs'.", - "Modules_6244": "Modules", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Déplacer les modificateurs d'élément de tuple étiqueté vers les étiquettes", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Déplacez l’expression dans l’exportation par défaut vers une variable et ajoutez-y une annotation de type.", - "Move_to_a_new_file_95049": "Déplacer vers un nouveau fichier", - "Move_to_file_95178": "Déplacer vers le fichier", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Les séparateurs numériques consécutifs multiples ne sont pas autorisés.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Les implémentations de plusieurs constructeurs ne sont pas autorisées.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NOUVELLE LIGNE", - "Name_is_not_valid_95136": "Le nom n'est pas valide", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Les groupes de capture nommés sont disponibles uniquement lorsque vous ciblez « ES2018 » ou une version ultérieure.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Les groupes de capture nommés portant le même nom doivent s’excluent mutuellement les uns des autres.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Les importations nommées ne sont pas autorisées dans une importation différée.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Les importations nommées d'un fichier JSON dans un module ECMAScript ne sont pas autorisées lorsque « module » est défini sur '{0}'.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propriété nommée '{0}' des types '{1}' et '{2}' n'est pas identique.", - "Namespace_0_has_no_exported_member_1_2694": "L'espace de noms '{0}' n'a aucun membre exporté '{1}'.", - "Namespace_must_be_given_a_name_1437": "Un nom doit être attribué à l’espace de noms.", - "Namespace_name_cannot_be_0_2819": "L’espace de noms ne peut pas être «{0}».", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Les espaces de noms ne sont pas autorisés dans les fichiers de script globaux lorsque «{0}» est activé. Si ce fichier n’est pas destiné à être un script global, définissez 'moduleDetection' sur 'force' ou ajoutez une instruction 'export {}' vide.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Ni les décorateurs ni les modificateurs ne peuvent être appliqués aux paramètres « this ».", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Aucun constructeur de base n'a le nombre spécifié d'arguments de type.", - "No_constituent_of_type_0_is_callable_2755": "Aucun constituant de type '{0}' ne peut être appelé.", - "No_constituent_of_type_0_is_constructable_2759": "Aucun constituant de type '{0}' ne peut être construit.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Aucune signature d'index avec un paramètre de type '{0}' n'a été localisée sur le type '{1}'.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Aucune entrée dans le fichier config '{0}'. Les chemins 'include' spécifiés étaient '{1}' et les chemins 'exclude' étaient '{2}'.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Plus prise en charge. Dans les premières versions, définissez manuellement l’encodage de texte pour la lecture des fichiers.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Aucune surcharge n'attend {0} arguments, mais il existe des surcharges qui attendent {1} ou {2} arguments.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Aucune surcharge n'attend {0} arguments de type, mais il existe des surcharges qui attendent {1} ou {2} arguments de type.", - "No_overload_matches_this_call_2769": "Aucune surcharge ne correspond à cet appel.", - "No_type_could_be_extracted_from_this_type_node_95134": "Aucun type n'a pu être extrait de ce nœud de type", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Il n'existe aucune valeur dans l'étendue de la propriété raccourcie '{0}'. Vous devez en déclarez une, ou fournir un initialiseur.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non abstraite « {0} » n'implémente pas le membre abstrait « {1} » hérité de la classe « {2} ».", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2} et {3} plus encore.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'expression de classe non abstraite '{0}' n'implémente pas le membre abstrait hérité '{0}' de la classe '{1}'.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Les implémentations de l’expression de classe non abstraite sont manquantes pour les membres suivants de '{0}' : {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Il manque des implémentations d’expression de classe non abstraite pour les membres suivants de '{0}' : {1} et {2} plus.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Les assertions non null peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Paramètre non simple déclaré ici.", - "Not_all_code_paths_return_a_value_7030": "Les chemins du code ne retournent pas tous une valeur.", - "Not_all_constituents_of_type_0_are_callable_2756": "Tous les constituants de type '{0}' ne peuvent pas être appelés.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Tous les constituants de type '{0}' ne peuvent pas être construits.", - "Numbers_out_of_order_in_quantifier_1506": "Nombres incommandants dans le quantificateur.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Les littéraux numériques ayant des valeurs absolues égales ou supérieures à 2^53 sont trop grands pour être représentés avec précision sous forme d'entiers.", - "Numeric_separators_are_not_allowed_here_6188": "Les séparateurs numériques ne sont pas autorisés ici.", - "Object_is_of_type_unknown_2571": "L'objet est de type 'unknown'.", - "Object_is_possibly_null_2531": "L'objet a peut-être la valeur 'null'.", - "Object_is_possibly_null_or_undefined_2533": "L'objet a peut-être la valeur 'null' ou 'undefined'.", - "Object_is_possibly_undefined_2532": "L'objet a peut-être la valeur 'undefined'.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Un littéral d'objet peut uniquement spécifier des propriétés connues, et '{0}' n'existe pas dans le type '{1}'.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Un littéral d'objet peut uniquement spécifier des propriétés connues, mais '{0}' n'existe pas dans le type '{1}'. Est-ce que vous avez voulu écrire '{2}' ?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propriété '{0}' du littéral d'objet possède implicitement un type '{1}'.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Les objets qui contiennent des propriétés raccourcies ne peuvent pas être déduits avec --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Les objets qui contiennent des affectations de propagation ne peuvent pas être déduits avec --isolatedDeclarations.", - "Octal_digit_expected_1178": "Chiffre octal attendu.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Les séquences d’échappement octales et les références arrière ne sont pas autorisées dans une classe de caractères. S’il s’agissait d’une séquence d’échappement, utilisez la syntaxe '{0}' à la place.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Les séquences d’échappement octales ne sont pas autorisées. Utilisez la syntaxe '{0}'.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Les littéraux octaux ne sont pas autorisés. Utilisez la syntaxe '{0}'.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Une valeur de '{0}.{1}' est la chaîne '{2}', et l’autre est supposé être une valeur numérique inconnue.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Une seule déclaration de variable est autorisée dans une instruction 'for...in'.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Seule une déclaration de variable unique est autorisée dans une instruction 'for...of'.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Seule une fonction void peut être appelée avec le mot clé 'new'.", - "Only_ambient_modules_can_use_quoted_names_1035": "Seuls les modules ambiants peuvent utiliser des noms entre guillemets.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Seuls les modules 'amd' et 'system' sont pris en charge avec --{0}.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Seuls les tableaux const peuvent être déduits avec --isolatedDeclarations.", - "Only_emit_d_ts_declaration_files_6014": "Émettez uniquement les fichiers de déclaration '.d.ts'.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Sortie uniquement des fichiers d.ts et non des fichiers JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Seules les méthodes publiques et protégées de la classe de base sont accessibles par le biais du mot clé 'super'.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Impossible d'appliquer l'opérateur '{0}' au type '{1}'.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Impossible d'appliquer l'opérateur '{0}' aux types '{1}' et '{2}'.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Les opérateurs ne doivent pas être mixtes dans une classe de caractères. Encapsulez-le dans une classe imbriqué à la place.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Choisir un projet en dehors de la vérification des références multiprojets lors de l’édition.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L’option '{0}={1}' a été supprimée. Supprimez-le de votre configuration.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L’option '{0}={1}' est déconseillée et cessera de fonctionner dans TypeScript {2}. Spécifiez compilerOption « ignoreDeprecations » : «{3}« » pour désactiver cette erreur.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'false' ou 'null' sur la ligne de commande.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'null' sur la ligne de commande.", - "Option_0_can_only_be_specified_on_command_line_6266": "L’option '{0}' ne peut être spécifiée que sur la ligne de commande.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'option '{0}' peut être utilisée uniquement quand l'option '--inlineSourceMap' ou l'option '--sourceMap' est spécifiée.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L’option '{0}' ne peut être utilisée que lorsque 'moduleResolution' a la valeur 'node16', 'nodenext' ou 'bundler'.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "L’option « {0} » ne peut être utilisée que lorsque « module » a la valeur « preserve », « commonjs » ou « es2015 » ou une version ultérieure.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Impossible de spécifier l'option '{0}' quand l'option 'jsx' a la valeur '{1}'.", - "Option_0_cannot_be_specified_with_option_1_5053": "Impossible de spécifier l'option '{0}' avec l'option '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}' ou l'option '{2}'.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L’option «{0}» a été supprimée. Supprimez-le de votre configuration.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L’option '{0}' est déconseillée et cessera de fonctionner dans TypeScript {1}. Spécifiez compilerOption « ignoreDeprecations » : «{2}« » pour désactiver cette erreur.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L’option '{0}' est redondante et ne peut pas être spécifiée avec l’option '{1}'.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "L’option 'allowImportingTsExtensions' ne peut être utilisée que lorsque l’une des options 'noEmit', 'emitDeclarationOnly' ou 'rewriteRelativeImportExtensions' est définie.", - "Option_build_must_be_the_first_command_line_argument_6369": "L'option '--build' doit être le premier argument de ligne de commande.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'option 'isolatedModules' peut être utilisée seulement quand l'option '--module' est spécifiée, ou quand l'option 'target' a la valeur 'ES2015' ou une version supérieure.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L’option 'moduleResolution' doit avoir la valeur '{0}' (ou laisser non spécifiée) lorsque l’option 'module' a la valeur '{1}'.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L’option 'module' doit être définie sur '{0}' quand l’option 'moduleResolution' a la valeur '{1}'.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "L’option 'preserveConstEnums' ne peut pas être désactivée quand '{0}' est activé.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Impossible d'associer l'option 'project' à des fichiers sources sur une ligne de commande.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Impossible de spécifier l’option '--resolveJsonModule' quand 'moduleResolution' a la valeur 'classic'.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Impossible de spécifier l’option '--resolveJsonModule' quand 'module' a la valeur 'none', 'system' ou 'umd'.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "L’option 'verbatimModuleSyntax' ne peut pas être utilisée quand 'module' a la valeur 'UMD', 'AMD' ou 'System'.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Impossible de combiner les options '{0}' et '{1}'.", - "Options_Colon_6027": "Options :", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Autres sorties", - "Output_Formatting_6256": "Mise en forme de sortie", - "Output_compiler_performance_information_after_building_6615": "Informations de performances du compilateur de sortie après la génération.", - "Output_directory_for_generated_declaration_files_6166": "Répertoire de sortie pour les fichiers de déclaration générés.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Le fichier de sortie '{0}' n'a pas été créé à partir du fichier source '{1}'.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Sortie du projet référencé '{0}' incluse, car '{1}' est spécifié", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Sortie du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Affichez des informations plus détaillées sur les performances du compilateur après la génération.", - "Overload_0_of_1_2_gave_the_following_error_2772": "La surcharge {0} sur {1}, '{2}', a généré l'erreur suivante.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Les signatures de surcharge doivent toutes être abstraites ou non abstraites.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Les signatures de surcharge doivent toutes être ambiantes ou non ambiantes.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Les signatures de surcharge doivent toutes être exportées ou non exportées.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Les signatures de surcharge doivent toutes être facultatives ou requises.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Les signatures de surcharge doivent toutes être publiques, privées ou protégées.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Le paramètre '{0}' ne peut pas référencer l'identificateur '{1}' déclaré après lui.", - "Parameter_0_cannot_reference_itself_2372": "Le paramètre '{0}' ne peut pas se référencer lui-même.", - "Parameter_0_implicitly_has_an_1_type_7006": "Le paramètre '{0}' possède implicitement un type '{1}'.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Le paramètre '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Le paramètre '{0}' n'est pas à la même position que le paramètre '{1}'.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom '{1}' du module externe '{2}' mais ne peut pas être nommé.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom privé '{1}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Le paramètre '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Le paramètre '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Le paramètre '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Le paramètre '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Le paramètre '{0}' de la signature d'index de l'interface exportée a ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Le paramètre '{0}' de la signature d'index de l'interface exportée a ou utilise le nom privé '{1}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Le paramètre '{0}' de la méthode de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Le paramètre '{0}' de la méthode de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom privé '{1}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{1}'.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Un paramètre ne peut pas contenir de point d'interrogation et d'initialiseur.", - "Parameter_declaration_expected_1138": "Déclaration de paramètre attendue.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Le paramètre a un nom mais aucun type. Est-ce que vous avez voulu utiliser '{0} : {1}' ?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Les modificateurs de paramètres peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Le paramètre doit avoir une annotation de type explicite avec --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analyser en mode strict et émettre \"use strict\" pour chaque fichier source.", - "Part_of_files_list_in_tsconfig_json_1409": "Partie de la liste 'files' dans tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Le modèle '{0}' ne peut avoir qu'un seul caractère '*' au maximum.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Les minutages de performances pour '--diagnostics' ou '--extendedDiagnostics' ne sont pas disponibles dans cette session. Une implémentation native de l'API de performances web est introuvable.", - "Platform_specific_6912": "Spécifique à la plateforme", - "Prefix_0_with_an_underscore_90025": "Faire précéder '{0}' d'un trait de soulignement", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Faire commencer toutes les déclarations de propriété incorrectes par 'declare'", - "Prefix_all_unused_declarations_with_where_possible_95025": "Préfixer toutes les déclarations inutilisées avec '_' si possible", - "Prefix_with_declare_95094": "Faire commencer par 'declare'", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conservez les valeurs importées inutilisées dans la sortie JavaScript qui seraient normalement supprimées.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimez tous les fichiers lus pendant la compilation.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Fichiers d’impression lus pendant la compilation, notamment la raison de l’inclusion.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Affiche les noms des fichiers et la raison pour laquelle ils font partie de la compilation.", - "Print_names_of_files_part_of_the_compilation_6155": "Imprimez les noms des fichiers faisant partie de la compilation.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Affichez les noms des fichiers qui font partie de la compilation, puis arrêtez le traitement.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimez les noms des fichiers générés faisant partie de la compilation.", - "Print_the_compiler_s_version_6019": "Affichez la version du compilateur.", - "Print_the_final_configuration_instead_of_building_1350": "Affichez la configuration finale au lieu d'effectuer la génération.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimez les noms des fichiers émis après une compilation.", - "Print_this_message_6017": "Imprimez ce message.", - "Private_accessor_was_defined_without_a_getter_2806": "L'accesseur privé a été défini sans getter.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Le champ privé '{0}' doit être déclaré dans une classe englobante.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Les identificateurs privés ne sont pas autorisés dans les déclarations de variable.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Les identificateurs privés ne sont pas autorisés en dehors des corps de classe.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Les identificateurs privés ne sont autorisés que dans les corps de classe et ne peuvent être utilisés que dans le cadre d’une déclaration de membre de classe, d’accès à une propriété ou de la partie gauche d’une expression ’in'", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Les identificateurs privés sont disponibles uniquement durant le ciblage d'ECMAScript 2015 et version ultérieure.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Les identificateurs privés ne peuvent pas être utilisés en tant que paramètres.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Le membre privé ou protégé '{0}' n'est pas accessible sur un paramètre de type.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Impossible de générer le projet '{0}' car sa dépendance '{1}' comporte des erreurs", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Impossible de générer le projet '{0}', car sa dépendance '{1}' n'a pas été générée", - "Project_0_is_being_forcibly_rebuilt_6388": "Le projet « {0} » est en cours de régénération forcée", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le fichier «{2}» était un fichier racine de compilation, mais pas plus.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le programme doit signaler des erreurs.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Le projet « {0} » est obsolète, car le fichier buildinfo « {1} » indique que certaines modifications n’ont pas été émises", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Le projet '{0}' est obsolète, car le fichier buildinfo '{1}' indique qu’il y a un changement dans compilerOptions", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Le projet '{0}' est obsolète car la sortie (« {1} ») est antérieure à l'entrée « {2} »", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Le projet '{0}' est obsolète car le fichier de sortie '{1}' n'existe pas", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Le projet '{0}' est obsolète, car sa sortie a été générée avec la version '{1}', qui diffère de la version actuelle '{2}'", - "Project_0_is_up_to_date_6361": "Le projet '{0}' est à jour", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Le projet « {0} » est à jour car l'entrée la plus récente (« {1} ») est antérieure à la sortie (« {2} »)", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Project « {0} » est à jour, mais doit mettre à jour les horodatages des fichiers de sortie plus anciens que les fichiers d’entrée", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Le projet '{0}' est à jour avec les fichiers .d.ts de ses dépendances", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Les références de projet ne peuvent pas former un graphe circulaire. Cycle détecté : {0}", - "Projects_6255": "Projets", - "Projects_in_this_build_Colon_0_6355": "Projets dans cette build : {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Les propriétés avec le modificateur 'accessor' ne sont disponibles que pour le ciblage d’ECMAScript 2015 et versions ultérieures.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propriété « {0} » ne peut pas avoir d’initialiseur, car elle est marquée comme abstraite.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propriété '{0}' est issue d'une signature d'index, elle doit donc faire l'objet d'un accès avec ['{0}'].", - "Property_0_does_not_exist_on_type_1_2339": "La propriété '{0}' n'existe pas sur le type '{1}'.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propriété '{0}' n'existe pas sur le type '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propriété '{0}' n'existe pas sur le type '{1}'. Ne vouliez-vous pas plutôt accéder au membre statique '{2}' ?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La propriété '{0}' n'existe pas sur le type '{1}'. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{2}' ou une version ultérieure.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propriété '{0}' n’existe pas sur le type '{1}'. Essayez de modifier l’option de compileur 'lib' pour inclure 'dom'.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propriété « {0} » n'a aucun initialiseur et n'est pas définitivement assignée dans un bloc statique de classe.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propriété '{0}' n'a aucun initialiseur et n'est pas définitivement assignée dans le constructeur.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propriété '{0}' a implicitement le type 'any', car son accesseur get ne dispose pas d'une annotation de type de retour.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propriété '{0}' a implicitement le type 'any', car son accesseur set ne dispose pas d'une annotation de type de paramètre.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La propriété '{0}' a implicitement le type 'any', mais il est possible de déduire un meilleur type pour son accesseur get à partir de l'utilisation.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La propriété '{0}' a implicitement le type 'any', mais il est possible de déduire un meilleur type pour son accesseur set à partir de l'utilisation.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Impossible d'assigner la propriété '{0}' du type '{1}' à la même propriété du type de base '{2}'.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La propriété '{0}' du type '{1}' ne peut pas être assignée au type '{2}'.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La propriété '{0}' du type '{1}' fait référence à un membre distinct, qui n'est pas accessible à partir du type '{2}'.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "La propriété '{0}' est déclarée mais sa valeur n'est jamais lue.", - "Property_0_is_incompatible_with_index_signature_2530": "La propriété '{0}' est incompatible avec la signature d'index.", - "Property_0_is_missing_in_type_1_2324": "La propriété '{0}' est manquante dans le type '{1}'.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La propriété '{0}' est absente du type '{1}' mais obligatoire dans le type '{2}'.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "La propriété '{0}' n'est pas accessible en dehors de la classe '{1}', car elle a un identificateur privé.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propriété '{0}' est facultative dans le type '{1}', mais obligatoire dans le type '{2}'.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propriété '{0}' est privée et uniquement accessible dans la classe '{1}'.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propriété '{0}' est privée dans le type '{1}', mais pas dans le type '{2}'.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propriété '{0}' est protégée et uniquement accessible via une instance de la classe '{1}'. Ceci est une instance de la classe '{2}'.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propriété '{0}' est protégée et uniquement accessible dans la classe '{1}' et ses sous-classes.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propriété '{0}' est protégée, mais le type '{1}' n'est pas une classe dérivée de '{2}'.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propriété '{0}' est protégée dans le type '{1}', mais publique dans le type '{2}'.", - "Property_0_is_used_before_being_assigned_2565": "La propriété '{0}' est utilisée avant d'être assignée.", - "Property_0_is_used_before_its_initialization_2729": "La propriété '{0}' est utilisée avant son initialisation.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propriété «{0}» n'existe pas sur le type «{1}». Est-ce qu'il ne s'agit pas plutôt de «{2}»?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Impossible d'assigner la propriété '{0}' de l'attribut spread JSX à la propriété cible.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propriété '{0}' du type de classe anonyme exporté ne peut pas être privée ou protégée.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propriété '{0}' de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propriété '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propriété « {0} » de type « {1} » ne peut pas être attribuée au type d’index « {2} », « {3} ».", - "Property_0_was_also_declared_here_2733": "La propriété '{0}' a également été déclarée ici.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propriété '{0}' va remplacer la propriété de base dans '{1}'. Si cela est intentionnel, ajoutez un initialiseur. Sinon, ajoutez un modificateur 'declare', ou supprimez la déclaration redondante.", - "Property_assignment_expected_1136": "Assignation de propriété attendue.", - "Property_destructuring_pattern_expected_1180": "Modèle de déstructuration de propriété attendu.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propriété doit avoir une annotation de type explicite avec --isolatedDeclarations.", - "Property_or_signature_expected_1131": "Propriété ou signature attendue.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "La valeur de la propriété peut être uniquement un littéral de chaîne, un littéral numérique, 'true', 'false', 'null', un littéral d'objet ou un littéral de tableau.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fournissez une prise en charge complète des itérables dans 'for-of', la propagation et la destruction lors du ciblage de 'ES5'.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module externe {2} mais ne peut pas être nommée.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom privé '{1}'.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La propriété publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La propriété publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La propriété publique '{0}' de la classe exportée possède ou utilise le type privé '{1}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module externe {2} mais ne peut pas être nommée.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom privé '{1}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le type privé '{1}'.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Le nom qualifié '{0}' n'est pas autorisé si '@param {object} {1}' n'est pas placé au début.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Déclencher une erreur quand un paramètre de fonction n’est pas lu.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Lever une erreur sur les expressions et les déclarations ayant un type 'any' implicite.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Déclenche une erreur sur les expressions 'this' avec un type 'any' implicite.", - "Range_out_of_order_in_character_class_1517": "Plage dans l’ordre dans la classe de caractères.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "La réexportation d’un type lorsque «{0}» est activé nécessite l’utilisation de « type d’exportation ».", - "React_components_cannot_include_JSX_namespace_names_2639": "Les composants React ne peuvent pas inclure de noms d’espace de noms JSX", - "Recommended_Options_6294": "Options recommandées", - "Redirect_output_structure_to_the_directory_6006": "Rediriger la structure de sortie vers le répertoire.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Réduisez le nombre de projets chargés automatiquement par TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "Le projet référencé '{0}' ne doit pas désactiver l'émission.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Le projet référencé '{0}' doit avoir le paramètre \"composite\" avec la valeur true.", - "Referenced_via_0_from_file_1_1400": "Référencé(e) via '{0}' à partir du fichier '{1}'", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Envisagez d’ajouter une extension au chemin d’importation.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Est-ce que vous avez voulu utiliser '{0}' ?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Supprimez une liste de répertoires du processus d’observation.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Supprimez une liste de fichiers du traitement du mode espion.", - "Remove_all_unnecessary_override_modifiers_95163": "Supprimer tous les modificateurs 'override' inutiles", - "Remove_all_unnecessary_uses_of_await_95087": "Supprimer toutes les utilisations non nécessaires de 'await'", - "Remove_all_unreachable_code_95051": "Supprimer tout le code inaccessible", - "Remove_all_unused_labels_95054": "Supprimer toutes les étiquettes inutilisées", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Supprimer les accolades de tous les corps de fonction arrow présentant des problèmes pertinents", - "Remove_braces_from_arrow_function_95060": "Supprimer les accolades de la fonction arrow", - "Remove_braces_from_arrow_function_body_95112": "Supprimer les accolades du corps de fonction arrow", - "Remove_import_from_0_90005": "Supprimer l'importation de '{0}'", - "Remove_override_modifier_95161": "Supprimer un modificateur 'override'", - "Remove_parentheses_95126": "Supprimer les parenthèses", - "Remove_template_tag_90011": "Supprimer la balise template", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Supprimez la limite de 20 Mo sur la taille totale du code source pour les fichiers JavaScript dans le serveur de langage TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Supprimer 'type' de la déclaration d’importation de « {0} »", - "Remove_type_from_import_of_0_from_1_90056": "Supprimer 'type' de l’importation de « {0} » de «{1}»", - "Remove_type_parameters_90012": "Supprimer les paramètres de type", - "Remove_unnecessary_await_95086": "Supprimer toute utilisation non nécessaire de 'await'", - "Remove_unreachable_code_95050": "Supprimer le code inaccessible", - "Remove_unused_declaration_for_Colon_0_90004": "Supprimer la déclaration inutilisée pour : '{0}'", - "Remove_unused_declarations_for_Colon_0_90041": "Supprimer les déclarations inutilisées pour '{0}'", - "Remove_unused_destructuring_declaration_90039": "Supprimer la déclaration de déstructuration inutilisée", - "Remove_unused_label_95053": "Supprimer l'étiquette inutilisée", - "Remove_variable_statement_90010": "Supprimer l'instruction de variable", - "Rename_param_tag_name_0_to_1_95173": "Renommez le nom de balise '@param' '{0}' en '{1}'", - "Replace_0_with_Promise_1_90036": "Remplacer '{0}' par 'Promise<{1}>'", - "Replace_all_unused_infer_with_unknown_90031": "Remplacer tous les 'infer' inutilisés par 'unknown'", - "Replace_import_with_0_95015": "Remplacez l'importation par '{0}'.", - "Replace_infer_0_with_unknown_90030": "Remplacer 'infer {0}' par 'unknown'", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Signalez une erreur quand les chemins du code de la fonction ne retournent pas tous une valeur.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Signalez les erreurs pour les case avec fallthrough dans une instruction switch.", - "Report_errors_in_js_files_8019": "Signalez les erreurs dans les fichiers .js.", - "Report_errors_on_unused_locals_6134": "Signaler les erreurs sur les variables locales inutilisées.", - "Report_errors_on_unused_parameters_6135": "Signaler les erreurs sur les paramètres inutilisés.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exiger une annotation suffisante sur les exportations afin que d’autres outils puissent générer de manière triviale des fichiers de déclaration.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Les propriétés non déclarées sont imposées à partir des signatures d'index pour permettre l'utilisation des accès aux éléments.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Les paramètres de type obligatoires ne peuvent pas être placés à la suite des paramètres de type optionnels.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La résolution du module '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La résolution de la directive de référence de type '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Échec de la résolution du nom non relatif ; tentative avec les fonctionnalités de résolution de nœud modernes désactivées pour voir si la bibliothèque npm a besoin d’une mise à jour de configuration.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Échec de la résolution du nom non relatif ; en essayant avec '--moduleResolution bundler' pour voir si le projet peut avoir besoin d’une mise à jour de configuration.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Résoudre 'keyof' en noms de propriétés de valeur chaîne uniquement (aucun nombre ou symbole).", - "Resolved_under_condition_0_6414": "Résolu sous la condition '{0}'.", - "Resolving_in_0_mode_with_conditions_1_6402": "Résolution en mode {0} avec des conditions {1}.", - "Resolving_module_0_from_1_6086": "======== Résolution du module '{0}' à partir de '{1}'. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Résolution du nom de module '{0}' par rapport à l'URL de base '{1}' - '{2}'.", - "Resolving_real_path_for_0_result_1_6130": "Résolution du chemin réel pour '{0}', résultat '{1}'.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine '{2}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine non défini. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine non défini. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Résolution de la directive de référence de type pour le programme qui spécifie des typesRoots personnalisés, en ignorant la recherche dans le dossier « node_modules ».", - "Resolving_with_primary_search_path_0_6121": "Résolution à l'aide du chemin de recherche primaire '{0}'.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Le paramètre rest '{0}' possède implicitement un type 'any[]'.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Le paramètre Rest '{0}' a implicitement un type 'any[]', mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "Rest_types_may_only_be_created_from_object_types_2700": "Vous ne pouvez créer des types Rest qu'à partir de types d'objet.", - "Return_type_annotation_circularly_references_itself_2577": "L'annotation de type de retour se référence de manière circulaire.", - "Return_type_must_be_inferred_from_a_function_95149": "Le type de retour doit être déduit d'une fonction", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Le type de retour de la signature de constructeur de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Le type de retour de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Le type de retour de la signature de constructeur doit pouvoir être assigné au type d'instance de la classe.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Le type de retour de la fonction exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Le type de retour de la fonction exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Le type de retour de la fonction exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Le type de retour de la signature d'index de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Le type de retour de la signature d'index de l'interface exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Le type de retour de la méthode de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Le type de retour de la méthode de l'interface exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom privé '{0}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module privé '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{0}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} avec l’ID de package « {3} ».", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} » avec l’ID de package « {3} ».", - "Rewrite_all_as_indexed_access_types_95034": "Réécrire tout comme types d'accès indexés", - "Rewrite_as_the_indexed_access_type_0_90026": "Réécrire en tant que type d'accès indexé '{0}'", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Réécrivez les extensions de fichier « .ts », « .tsx », « .mts » et « .cts » dans les chemins d'importation relatifs vers leur équivalent JavaScript dans les fichiers de sortie.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Opérande droit de ?? est inaccessible, car l’opérande de gauche n’est jamais nullish.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Impossible de déterminer le répertoire racine, chemins de recherche primaires ignorés.", - "Root_file_specified_for_compilation_1427": "Fichier racine spécifié pour la compilation", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATÉGIE", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Enregistrez les fichiers .tsbuildinfo pour permettre la compilation incrémentielle des projets.", - "Saw_non_matching_condition_0_6405": "Condition non correspondante '{0}' visible.", - "Scoped_package_detected_looking_in_0_6182": "Package de portée détecté. Recherche dans '{0}'", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Recherche d’extensions de secours dans tous les répertoires node_modules ancêtres : {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Recherche d’extensions préférées dans tous les répertoires node_modules ancêtres : {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Voir aussi https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "La sélection ne correspond pas à une ou des instructions valides", - "Selection_is_not_a_valid_type_node_95133": "La sélection n'est pas un nœud de type valide", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Définissez la version du langage JavaScript pour JavaScript émis et incluez des déclarations de bibliothèque compatibles.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Définissez la langue de la messagerie à partir de TypeScript. Cela n’affecte pas l’émission.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Affecter à l'option 'module' de votre fichier config la valeur '{0}'", - "Set_the_newline_character_for_emitting_files_6659": "Définissez le caractère de nouvelle ligne pour l’émission de fichiers.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Affecter à l'option 'target' de votre fichier config la valeur '{0}'", - "Setters_cannot_return_a_value_2408": "Les méthodes setter ne peuvent pas retourner de valeur.", - "Show_all_compiler_options_6169": "Affichez toutes les options du compilateur.", - "Show_diagnostic_information_6149": "Affichez les informations de diagnostic.", - "Show_verbose_diagnostic_information_6150": "Affichez les informations de diagnostic détaillées.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Montrer ce qui serait généré (ou supprimé si '--clean' est spécifié)", - "Signature_0_must_be_a_type_predicate_1224": "La signature '{0}' doit être un prédicat de type.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Les déclarations de signature peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorer la génération de projets en aval en cas d’erreur dans le projet en amont.", - "Skip_type_checking_all_d_ts_files_6693": "Ignorer la vérification de type dans tous les fichiers .d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorer la vérification de type des fichiers .d.ts inclus dans TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Ignorer le contrôle de type des fichiers de déclaration.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorer la génération du projet '{0}' car sa dépendance '{1}' comporte des erreurs", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorer la build du projet '{0}', car sa dépendance '{1}' n'a pas été générée", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Le module '{0}' qui ressemble à un URI absolu, types de fichiers cibles : {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Source du projet référencé '{0}' incluse, car '{1}' est spécifié", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Source du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", - "Source_has_0_element_s_but_target_allows_only_1_2619": "La source a {0} élément(s) mais la cible n'en autorise que {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "La source a {0} élément(s) mais la cible en nécessite {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "La source ne fournit aucune correspondance pour l'élément obligatoire situé à la position {0} dans la cible.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "La source ne fournit aucune correspondance pour l'élément variadique situé à la position {0} dans la cible.", - "Specify_ECMAScript_target_version_6015": "Spécifiez la version cible ECMAScript.", - "Specify_JSX_code_generation_6080": "Spécifiez la génération de code JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Spécifiez un fichier qui regroupe toutes les sorties dans un fichier JavaScript. Si « declaration » a la valeur true, désigne également un fichier qui regroupe toutes les sorties .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Spécifiez une liste de modèles glob qui correspondent aux fichiers à inclure dans la compilation.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Spécifiez une liste de plug-ins de service de langage à ajouter.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Spécifiez un ensemble de fichiers de déclaration de bibliothèque groupée qui décrivent l’environnement d’exécution cible.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Spécifiez un ensemble d’entrées qui re-mappent les importations à d’autres emplacements de recherche.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Spécifiez un tableau d’objets qui spécifient les chemins d’accès pour les projets. Utilisé dans les références de projet.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Spécifiez un dossier de sortie pour tous les fichiers émis.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Spécifier le comportement d'émission/de vérification des importations utilisées uniquement pour les types.", - "Specify_file_to_store_incremental_compilation_information_6380": "Spécifier le fichier de stockage des informations de compilation incrémentielle", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Spécifiez comment TypeScript recherche un fichier à partir d’un spécificateur de module donné.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Spécifiez la façon dont les répertoires sont surveillés sur les systèmes qui ne disposent pas de fonctionnalités récursives de surveillance des fichiers.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Spécifiez le fonctionnement du mode espion TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Spécifiez les fichiers bibliothèques à inclure dans la compilation.", - "Specify_module_code_generation_6016": "Spécifier la génération de code de module.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Spécifiez le spécificateur de module utilisé pour importer les fonctions de fabrique JSX lors de l’utilisation de « jsx: react-jsx* ».", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Spécifiez plusieurs dossiers qui agissent comme « ./node_modules/@types ».", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Spécifiez une ou plusieurs références de module de chemin d’accès ou de nœud aux fichiers de configuration de base dont les paramètres sont hérités.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Spécifiez les options d’acquisition automatique des fichiers de déclaration.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Spécifiez la stratégie en cas d'échec de la création d'une surveillance de l'interrogation à l'aide des événements liés au système de fichiers : 'FixedInterval' (par défaut), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Spécifiez la stratégie de surveillance des répertoires sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif : 'UseFsEvents' (par défaut), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Spécifiez la stratégie de surveillance des fichiers : 'FixedPollingInterval' (par défaut), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Spécifiez la référence de fragment JSX utilisée pour les fragments lors du ciblage de l’émission de réaction JSX par exemple « React.Fragment » ou « Fragment ».", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX 'react', par exemple 'React.createElement' ou 'h'.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX « react », par exemple « React.createElement » ou « h ».", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Spécifiez la fonction de fabrique de fragments JSX à utiliser durant le ciblage de l'émission JSX 'react' avec l'option de compilateur 'jsxFactory', par exemple 'Fragment'.", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Spécifiez le répertoire de base pour résoudre les noms de modules non relatifs.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Spécifiez la séquence de fin de ligne à utiliser durant l'émission des fichiers : 'CRLF' (Dos) ou 'LF' (Unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers TypeScript au lieu des emplacements sources.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers de mappage au lieu des emplacements générés.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Spécifiez la profondeur maximale de dossier utilisée pour la vérification des fichiers JavaScript à partir de « node_modules ». Applicable uniquement à l’aide de « allowJs ».", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Spécifiez le spécificateur de module à utiliser pour importer les fonctions de fabrique 'jsx' et 'jsxs' à partir de react, par exemple", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Spécifiez l’objet appelé pour « createElement ». Ceci s’applique uniquement quand le ciblage de l’émission de JSX « react » est actif.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Spécifiez le répertoire de sortie pour les fichiers de déclaration générés.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Spécifiez le chemin d’accès au fichier de compilation incrémentielle .incrémentielle .", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Spécifiez le répertoire racine des fichiers d'entrée. Contrôlez la structure des répertoires de sortie avec --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Spécifiez le dossier racine dans vos fichiers sources.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Spécifiez le chemin d’accès racine des débogueurs pour trouver le code source de référence.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Spécifiez les noms de packages de types à inclure sans être référencés dans un fichier source.", - "Specify_what_JSX_code_is_generated_6646": "Spécifiez le code JSX généré.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Spécifiez l’approche que l’observateur doit utiliser si le système manque d’observateurs de fichiers natifs.", - "Specify_what_module_code_is_generated_6657": "Spécifiez le code de module généré.", - "Split_all_invalid_type_only_imports_1367": "Diviser toutes les importations de type uniquement non valides", - "Split_into_two_separate_import_declarations_1366": "Diviser en deux déclarations import distinctes", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'opérateur spread dans les expressions 'new' est disponible uniquement quand ECMAScript 5 ou version supérieure est ciblé.", - "Spread_types_may_only_be_created_from_object_types_2698": "Vous ne pouvez créer des types Spread qu'à partir de types d'objet.", - "Starting_compilation_in_watch_mode_6031": "Démarrage de la compilation en mode espion...", - "Statement_expected_1129": "Instruction attendue.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Les instructions ne sont pas autorisées dans les contextes ambiants.", - "Static_members_cannot_reference_class_type_parameters_2302": "Les membres statiques ne peuvent pas référencer des paramètres de type de classe.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propriété statique '{0}' est en conflit avec la propriété intégrée 'Function.{0}' de la fonction constructeur '{1}'.", - "Stricter_Typechecking_Options_6292": "Options de vérification de type plus strictes", - "String_literal_expected_1141": "Littéral de chaîne attendu.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Les noms d’importation et d’exportation de littéral de chaîne ne sont pas pris en charge lorsque l’indicateur « --module » a la valeur « es2015 » ou « es2020 ».", - "String_literal_with_double_quotes_expected_1327": "Littéral de chaîne avec guillemets doubles attendu.", - "Style_Options_6293": "Options de style", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylisez les erreurs et les messages avec de la couleur et du contexte (expérimental).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Les indicateurs de sous-modèle doivent être présents lorsqu’il existe un signe moins.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Les prochaines déclarations de propriétés doivent avoir le même type. La propriété '{0}' doit avoir le type '{1}', mais elle a ici le type '{2}'.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Les déclarations de variable ultérieures doivent avoir le même type. La variable '{0}' doit être de type '{1}', mais elle a ici le type '{2}'.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Le type de la substitution '{0}' du modèle '{1}' est incorrect. Attente de 'string'. Obtention de '{2}'.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La substitution '{0}' dans le modèle '{1}' ne peut avoir qu'un seul caractère '*' au maximum.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Les substitutions du modèle '{0}' doivent correspondre à un tableau.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Les substitutions du modèle '{0}' ne doivent pas correspondre à un tableau vide.", - "Successfully_created_a_tsconfig_json_file_6071": "Un fichier tsconfig.json a été créé.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Les appels de 'super' ne sont pas autorisés hors des constructeurs ou dans des fonctions imbriquées dans des constructeurs.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Supprimez les vérifications des propriétés en trop pour les littéraux d'objet.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Supprimer les erreurs noImplicitAny pour les objets d'indexation auxquels il manque des signatures d'index.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Supprimez les erreurs « noImplicitAny » lors de l’indexation d’objets qui n’ont pas de signatures d’index.", - "Switch_each_misused_0_to_1_95138": "Remplacer chaque utilisation incorrecte de '{0}' par '{1}'", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Appelez les rappels de façon synchrone, et mettez à jour l'état des observateurs de répertoire sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif.", - "Syntax_Colon_0_6023": "Syntaxe : {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La balise '{0}' attend au moins '{1}' arguments, mais la fabrique JSX '{2}' en fournit au maximum '{3}'.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Les expressions de modèle étiquetées ne sont pas autorisées dans une chaîne facultative.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La cible autorise uniquement {0} élément(s) mais la source peut en avoir plus.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La cible nécessite {0} élément(s) mais la source peut en avoir moins.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La signature cible offre trop peu d’arguments. {0} ou plus sont attendus, mais {1} ont été reçus.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Le modificateur '{0}' peut uniquement être utilisé dans les fichiers TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Impossible d'appliquer l'opérateur '{0}' au type 'symbol'.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'opérateur '{0}' n'est pas autorisé pour les types booléens. Utilisez '{1}' à la place.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propriété '{0}' d'un itérateur asynchrone doit être une méthode.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "La propriété '{0}' d'un itérateur doit être une méthode.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Le type 'Object' peut être assigné à très peu d'autres types. Souhaitez-vous utiliser le type 'any' à la place ?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "L’indicateur Unicode (u) et l’indicateur Unicode Sets (v) ne peuvent pas être définis simultanément.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Désolé... Nous ne pouvons pas référencer l’objet « arguments » dans une fonction arrow d’ES5. Utilisez plutôt une expression de fonction standard.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "L’objet « arguments » ne peut pas être référencé dans une fonction ou méthode asynchrone dans ES5. Utilisez une fonction ou méthode standard.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Le corps d'une instruction 'if' ne peut pas être l'instruction vide.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "L'appel aurait pu réussir sur cette implémentation, mais les signatures de surcharges de l'implémentation ne sont pas visibles en externe.", - "The_character_set_of_the_input_files_6163": "Jeu de caractères des fichiers d'entrée.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La fonction arrow conteneur capture la valeur globale de 'this'.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Le corps de la fonction ou du module conteneur est trop grand pour l'analyse du flux de contrôle.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Le fichier actuel est un module CommonJS et ne peut pas utiliser 'await' au niveau supérieur.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Le fichier actuel est un module CommonJS dont les importations produiront des appels 'require' ; cependant, le fichier référencé est un module ECMAScript et ne peut pas être importé avec 'require'. Envisagez d'écrire un appel dynamique 'import(\"{0}\")' à la place.", - "The_current_host_does_not_support_the_0_option_5001": "L'hôte actuel ne prend pas en charge l'option '{0}'.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La déclaration de '{0}' que vous aviez probablement l'intention d'utiliser est définie ici", - "The_declaration_was_marked_as_deprecated_here_2798": "La déclaration a été marquée ici comme étant dépréciée.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Le type attendu provient de la propriété '{0}', qui est déclarée ici sur le type '{1}'", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Le type attendu provient du type de retour de cette signature.", - "The_expected_type_comes_from_this_index_signature_6501": "Le type attendu provient de cette signature d'index.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'expression d'une assignation d'exportation doit être un identificateur ou un nom qualifié dans un contexte ambiant.", - "The_file_is_in_the_program_because_Colon_1430": "Le fichier est dans le programme pour la ou les raisons suivantes :", - "The_files_list_in_config_file_0_is_empty_18002": "La liste 'files' du fichier config '{0}' est vide.", - "The_first_export_default_is_here_2752": "La première valeur par défaut d'exportation se trouve ici.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Le premier paramètre de la méthode 'then' d'une promesse doit être un rappel.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Le type global 'JSX.{0}' ne peut pas avoir plusieurs propriétés.", - "The_implementation_signature_is_declared_here_2750": "La signature d'implémentation est déclarée ici.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "La métapropriété « import.meta » n’est pas autorisée dans les fichiers qui seront intégrés dans la sortie CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La méta-propriété « import.meta » est autorisée uniquement lorsque l’option « --module » est « es2020 », « es2022 », « esnext », « system », « node16 », « node18 » ou « node20 » « nodenext ».", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Le type déduit de '{0}' ne peut pas être nommé sans référence à '{1}'. Cela n'est probablement pas portable. Une annotation de type est nécessaire.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Le type déduit de '{0}' référence un type avec une structure cyclique qui ne peut pas être sérialisée de manière triviale. Une annotation de type est nécessaire.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Le type déduit de '{0}' référence un type '{1}' inaccessible. Une annotation de type est nécessaire.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Le type déduit de ce nœud dépasse la longueur maximale que le compilateur va sérialiser. Une annotation de type explicite est nécessaire.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L’initialiseur d’une déclaration « using » doit être un objet avec une méthode « [Symbol.dispose]() », ou avoir la valeur « null » ou « undefined ».", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L’initialiseur d’une déclaration « await using » doit être un objet avec une méthode « [Symbol.asyncDispose]() » ou « [Symbol.dispose]() », ou avoir la valeur « null » ou « undefined ».", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' existe dans plusieurs constituants et est privée dans certains d'entre eux.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' a des types en conflit dans certains constituants.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Le mot clé 'intrinsic' peut uniquement être utilisé pour déclarer les types intrinsèques fournis par le compilateur.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "L'option de compilateur 'jsxFragmentFactory' doit être fournie pour permettre l'utilisation des fragments JSX avec l'option de compilateur 'jsxFactory'.", - "The_last_overload_gave_the_following_error_2770": "La dernière surcharge a généré l'erreur suivante.", - "The_last_overload_is_declared_here_2771": "La dernière surcharge est déclarée ici.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La partie gauche d'une instruction 'for...in' ne peut pas être un modèle de déstructuration.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « using ».", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « await using ».", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La partie gauche d'une instruction 'for...in' ne peut pas utiliser d'annotation de type.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La partie gauche d'une instruction 'for...in' ne doit pas être un accès à une propriété facultative.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La partie gauche d'une instruction 'for...in' doit être un accès à une variable ou une propriété.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La partie gauche d'une instruction 'for...in' doit être de type 'string' ou 'any'.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La partie gauche d'une instruction 'for...of' ne peut pas utiliser d'annotation de type.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La partie gauche d'une instruction 'for...of' ne doit pas être un accès à une propriété facultative.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Il est possible que le côté gauche d’une instruction « for...of » ne soit pas « async ».", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La partie gauche d'une instruction 'for...of' doit être un accès à une variable ou une propriété.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La partie gauche d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La partie gauche d'une expression d'assignation ne doit pas être un accès à une propriété facultative.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La partie gauche d'une expression d'assignation doit être un accès à une variable ou une propriété.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La partie gauche d’une expression « instanceof » doit pouvoir être assignée au premier argument de la méthode « [Symbol.hasInstance] » du côté droit.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La partie gauche d'une expression 'instanceof' doit être de type 'any', un type d'objet ou un paramètre de type.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Paramètres régionaux utilisés pour afficher les messages à l'utilisateur (exemple : 'fr-fr')", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondeur de dépendance maximale pour la recherche sous node_modules et le chargement de fichiers JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "L'opérande d'un opérateur 'delete' ne peut pas être un identificateur privé.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "L'opérande d'un opérateur 'delete' ne peut pas être une propriété en lecture seule.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "L'opérande d'un opérateur 'delete' doit être une référence de propriété.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "L'opérande d'un opérateur 'delete' doit être facultatif.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "L'opérande d'un opérateur d'incrémentation ou de décrémentation ne doit pas être un accès à une propriété facultative.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "L'opérande d'un opérateur d'incrémentation ou de décrémentation doit être un accès à une variable ou une propriété.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "L'analyseur s'attendait à trouver '{1}' pour correspondre au jeton '{0}' ici.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’exportation '{0}' dans le fichier '{1}'. Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’importation «{0}» dans le fichier «{1}». Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "La propriété '{0}' n'est pas accessible sur le type '{1}' dans cette classe, car elle est mise en mémoire fantôme par un autre identificateur privé ayant la même orthographe.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Le type de retour d'une fonction d'élément décoratif de paramètre doit être 'void' ou 'any'.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Le type de retour d'une fonction d'élément décoratif de propriété doit être 'void' ou 'any'.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Le type de retour d'une fonction asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Le type de retour d'une fonction ou d'une méthode async doit être le type Promise global.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Le type de retour d'une fonction ou d'une méthode asynchrone doit être le type global Promise. Vouliez-vous vraiment écrire 'Promise<{0}>' ?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La partie droite d'une instruction 'for...in' doit être de type 'any', un type d'objet ou un paramètre de type, mais elle a le type '{0}' ici.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La partie droite d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La partie droite d’une expression « instanceof » doit être de type « any », une classe, une fonction ou un autre type pouvant être affecté au type d’interface « Function », ou un type d’objet avec une méthode « Symbol.hasInstance ».", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La partie droite d’une expression « instanceof » ne doit pas être une expression d’instanciation.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "La valeur racine d'un fichier '{0}' doit être un objet.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend au moins {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "La déclaration avec mise en mémoire fantôme de '{0}' est définie ici", - "The_signature_0_of_1_is_deprecated_6387": "La signature '{0}' de '{1}' est dépréciée.", - "The_specified_path_does_not_exist_Colon_0_5058": "Le chemin spécifié n'existe pas : '{0}'.", - "The_tag_was_first_specified_here_8034": "La balise a d'abord été spécifiée ici.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "La cible d'une assignation rest d'objet ne doit pas être un accès à une propriété facultative.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "La cible de l'assignation du reste d'un objet doit être un accès à une variable ou une propriété.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Le contexte 'this' de type '{0}' n'est pas assignable au contexte 'this' de type '{1}' de la méthode.", - "The_this_types_of_each_signature_are_incompatible_2685": "Les types 'this' de chaque signature sont incompatibles.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Le type '{0}' est 'readonly' et ne peut pas être assigné au type modifiable '{1}'.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’exportation est utilisé dans son instruction import.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’importation est utilisé dans son instruction import.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossible de sérialiser le type de ce nœud, car sa propriété «{0}» ne peut pas être sérialisée.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Le type retourné par la méthode '{0}()' d'un itérateur asynchrone doit être une promesse pour un type ayant une propriété 'value'.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Le type retourné par la méthode '{0}()' d'un itérateur doit avoir une propriété 'value'.", - "The_types_of_0_are_incompatible_between_these_types_2200": "Les types de '{0}' sont incompatibles entre eux.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Les types retournés par '{0}' sont incompatibles entre eux.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "La valeur '{0}' ne peut pas être utilisée ici.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La déclaration de variable d'une instruction 'for...in' ne peut pas avoir d'initialiseur.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La déclaration de variable d'une instruction 'for...of' ne peut pas avoir d'initialiseur.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'instruction 'with' n'est pas prise en charge. Tous les symboles d'un bloc 'with' ont le type 'any'.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu sous votre paramètre « moduleResolution » actuel. Envisagez la mise à jour vers « node16 », « nodenext » ou « bundler ».", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu lors du respect des « exports » package.json. La bibliothèque « {1} » devra peut-être mettre à jour son package.json ou ses typages.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Il n’existe aucun groupe de capture nommé « {0} » dans cette expression régulière.", - "There_is_nothing_available_for_repetition_1507": "Aucun élément n’est disponible pour la répétition.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Cette balise JSX nécessite que « {0} » soit dans la portée, mais elle n'a pas pu être trouvée.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Cette balise JSX nécessite que le chemin du module '{0}' existe, mais aucun n'a pu être trouvé. Assurez-vous que les types pour le package approprié sont installés.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propriété '{0}' de cette balise JSX attend un seul enfant de type '{1}', mais plusieurs enfants ont été fournis.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propriété '{0}' de cette balise JSX attend le type '{1}', qui nécessite plusieurs enfants, mais un seul enfant a été fourni.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a aucun groupe de capture dans cette expression régulière.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a que {0} groupes de capture dans cette expression régulière.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Cette expression binaire n’est jamais nulle. Avez-vous des parenthèses manquantes ?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Ce caractère ne peut pas être placé dans une séquence d’échappement d’expression régulière.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Cette comparaison semble involontaire, car les types '{0}' et '{1}' n’ont pas de chevauchement.", - "This_condition_will_always_return_0_2845": "Cette condition retourne toujours '{0}'.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Cette condition retourne toujours '{0}', car JavaScript compare les objets par référence, et non par valeur.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Cette condition retourne toujours true, car cette « {0} » est toujours définie.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Cette condition retourne toujours true, car cette fonction est toujours définie. Est-ce que vous avez voulu l'appeler à la place ?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Cette fonction constructeur peut être convertie en déclaration de classe.", - "This_expression_is_always_nullish_2871": "Cette expression est toujours nulle.", - "This_expression_is_never_nullish_2881": "Cette expression n’est jamais nulle.", - "This_expression_is_not_callable_2349": "Impossible d'appeler cette expression.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Impossible d'appeler cette expression, car il s'agit d'un accesseur 'get'. Voulez-vous vraiment l'utiliser sans '()' ?", - "This_expression_is_not_constructable_2351": "Impossible de construire cette expression.", - "This_file_already_has_a_default_export_95130": "Ce fichier a déjà une exportation par défaut", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Ce chemin d'importation n'est pas sûr à réécrire car il renvoie à un autre projet et le chemin relatif entre les fichiers de sortie des projets n'est pas le même que le chemin relatif entre ses fichiers d'entrée.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Cette importation utilise une extension '{0}' pour résoudre un fichier TypeScript d'entrée, mais ne sera pas réécrite pendant l'émission car il ne s'agit pas d'un chemin relatif.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Ceci est la déclaration augmentée. Pensez à déplacer la déclaration d'augmentation dans le même fichier.", - "This_kind_of_expression_is_always_falsy_2873": "Ce genre d’expression est toujours fausse.", - "This_kind_of_expression_is_always_truthy_2872": "Ce genre d’expression est toujours vrai.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Ceci peut être converti en fonction asynchrone.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise '@override' car il n'est pas déclaré dans la classe de base '{0}'.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise 'override' car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}' ?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise '@override' car sa classe conteneur '{0}' n'étend pas une autre classe.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise « @override », car son nom est dynamique.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}'?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ce membre ne peut pas avoir de modificateur 'override', car sa classe conteneur '{0}' n'étend pas une autre classe.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Ce membre ne peut pas avoir de modificateur 'override', car son nom est dynamique.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Ce membre doit avoir un commentaire JSDoc avec une balise '@override' car il remplace un membre de la classe de base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ce membre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ce membre doit avoir un modificateur 'override', car il se substitue à une méthode abstraite déclarée dans la classe de base '{0}'.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Vous pouvez référencer ce module uniquement avec les importations/exportations ECMAScript en activant l'indicateur '{0}' et en référençant son exportation par défaut.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ce module est déclaré avec 'export =', et ne peut être utilisé qu’avec une importation par défaut lors de l’utilisation de l’indicateur '{0}'.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Cette opération peut être simplifiée. Ce shift est identique à '{0} {1} {2}'.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Cette surcharge retourne implicitement le type « {0} », car elle n’a pas d’annotation de type de retour.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Cette signature de surcharge n'est pas compatible avec sa signature d'implémentation.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ce paramètre n'est pas autorisé avec la directive 'use strict'.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Cette propriété de paramètre doit avoir un commentaire JSDoc avec une balise '@override' car elle remplace un membre dans la classe de base '{0}'.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Cette propriété de paramètre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Cet indicateur d’expression régulière ne peut pas être activé/désactivé dans un sous-modèle.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Cet indicateur d’expression régulière n’est disponible que lors du ciblage de « {0} » ou d’une version ultérieure.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Ce chemin d'importation relatif n'est pas sûr à réécrire car il ressemble à un nom de fichier, mais se résout en réalité en « {0} ».", - "This_spread_always_overwrites_this_property_2785": "Cette diffusion écrase toujours cette propriété.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Cette syntaxe n’est pas autorisée quand 'erasableSyntaxOnly' est activé.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Veuillez ajouter une virgule de fin ou une contrainte explicite.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Utilisez une expression « as »à la place.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Cette syntaxe nécessite une application d'assistance importée, mais le module '{0}' est introuvable.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Cette syntaxe nécessite une assistance importée nommée '{1}' mais qui n'existe pas dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Cette syntaxe nécessite un composant d'assistance importé nommé '{1}' avec {2} paramètres, ce qui n'est pas compatible avec celui qui se trouve dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Ce paramètre de type nécessite peut-être une contrainte « extends {0}».", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Cette utilisation de « import » n’est pas valide. Les appels « import() » peuvent être écrits, mais ils doivent avoir des parenthèses et ne peuvent pas avoir d’arguments de type.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Pour convertir ce fichier en module ECMAScript, ajoutez le champ `\"type\" : \"module\"` à '{0}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}', ou ajoutez le champ `\"type\" : \"module\"` à '{1}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}' ou créez un fichier package.json local avec `{ \"type\": \"module\" }`.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pour convertir ce fichier en module ECMAScript, créez un fichier package.json local avec `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Les expressions « await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » est définie sur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Les instructions « await using » de niveau supérieur sont autorisées uniquement lorsque l’option « module » a la valeur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Les déclarations de niveau supérieur dans les fichiers .d.ts doivent commencer par un modificateur 'declare' ou 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Les boucles « for await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » a la valeur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", - "Trailing_comma_not_allowed_1009": "Virgule de fin non autorisée.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilez chaque fichier sous forme de module distinct (semblable à 'ts.transpileModule').", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Essayez 'npm i --save-dev @types/{1}' s'il existe, ou ajoutez un nouveau fichier de déclaration (.d.ts) contenant 'declare module '{0}';'", - "Trying_other_entries_in_rootDirs_6110": "Essai avec d'autres entrées dans 'rootDirs'.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Essai avec la substitution '{0}', emplacement de module candidat : '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Le type tuple '{0}' de longueur '{1}' n'a aucun élément à l'index '{2}'.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Les arguments de type tuple se référencent de manière circulaire.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Le type '{0}' peut être itéré uniquement à l'aide de l'indicateur '--downlevelIteration' ou avec un '--target' dont la valeur est 'es2015' ou une version ultérieure.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Impossible d'utiliser le type '{0}' comme type d'index.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Le type '{0}' ne peut pas être utilisé pour indexer le type '{1}'.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Le type '{0}' ne satisfait pas la contrainte '{1}'.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Le type '{0}' ne satisfait pas le type attendu '{1}'.", - "Type_0_has_no_call_signatures_2757": "Le type '{0}' n'a aucune signature d'appel.", - "Type_0_has_no_construct_signatures_2761": "Le type '{0}' n'a aucune signature de construction.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Le type '{0}' n'a aucune signature d'index correspondant au type '{1}'.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "Le type '{0}' n'a aucune propriété en commun avec le type '{1}'.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Le type '{0}' n’a aucune signature pour laquelle la liste d’arguments de type est applicable.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Le type « {0} » est générique et ne peut être indexé que pour la lecture.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2} et de {3} autres.", - "Type_0_is_not_a_constructor_function_type_2507": "Le type '{0}' n'est pas un type de fonction constructeur.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Le type « {0} » n’est pas un type de retour de fonction asynchrone valide dans ES5, car il ne fait pas référence à une valeur de constructeur compatible avec une promesse.", - "Type_0_is_not_an_array_type_2461": "Le type '{0}' n'est pas un type de tableau.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Le type '{0}' n'est pas un type de tableau ou un type de chaîne.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Le type '{0}' n'est pas un type tableau ou un type chaîne, ou n'a pas de méthode '[Symbol.iterator]()' qui retourne un itérateur.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Le type '{0}' n'est pas un type tableau ou n'a pas de méthode '[Symbol.iterator]()' qui retourne un itérateur.", - "Type_0_is_not_assignable_to_type_1_2322": "Impossible d'assigner le type '{0}' au type '{1}'.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Le type '{0}' ne peut pas être attribué au type '{1}'. Voulez-vous dire '{2}'?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Impossible d'assigner le type '{0}' au type '{1}'. Il existe deux types distincts portant ce nom, mais ils ne sont pas liés.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Le type «{0}» n’est pas assignable au type «{1}» comme implicite par l’annotation de variance.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Le type « {0} » n’est pas attribuable au type « {1} » comme requis pour les valeurs de membre enum calculées.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' au type de la cible.", - "Type_0_is_not_comparable_to_type_1_2678": "Le type '{0}' n'est pas comparable au type '{1}'.", - "Type_0_is_not_generic_2315": "Le type '{0}' n'est pas générique.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Le type '{0}' peut représenter une valeur primitive, ce qui n’est pas autorisé en tant qu’opérande droit de l’opérateur 'in'.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Le type '{0}' doit avoir une méthode '[Symbol.asyncIterator]()' qui retourne un itérateur asynchrone.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Le type '{0}' doit avoir une méthode '[Symbol.iterator]()' qui retourne un itérateur.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Le type '{0}' ne fournit aucune correspondance pour la signature '{1}'.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Le type '{0}' fait référence à lui-même de manière récursive en tant que type de base.", - "Type_Checking_6248": "Vérification du type", - "Type_alias_0_circularly_references_itself_2456": "L'alias de type '{0}' fait référence à lui-même de manière circulaire.", - "Type_alias_must_be_given_a_name_1439": "Un nom doit être attribué à l’alias de type.", - "Type_alias_name_cannot_be_0_2457": "Le nom de l'alias de type ne peut pas être '{0}'.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Les alias de type peuvent uniquement être utilisés dans les fichiers TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Une annotation de type ne peut pas apparaître sur une déclaration de constructeur.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Les annotations de type peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Type_argument_expected_1140": "Argument de type attendu.", - "Type_argument_list_cannot_be_empty_1099": "La liste des arguments de type ne peut pas être vide.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Les arguments de type peuvent uniquement être utilisés dans les fichiers TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Les arguments de type pour '{0}' se référencent de manière circulaire.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Les expressions d'assertion de type peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Le type situé à la position {0} dans la source n'est pas compatible avec le type situé à la position {1} dans la cible.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Le type situé aux positions allant de {0} à {1} dans la source n'est pas compatible avec le type situé à la position {2} dans la cible.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Le type contenant le nom privé « {0} » ne peut pas être utilisé avec --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Fichiers de déclaration de type à inclure dans la compilation.", - "Type_expected_1110": "Type attendu.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Les assertions d’importation de type doivent avoir exactement une clé ( « mode résolution » ) avec la valeur « import » ou « require ».", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "L'importation de type d'un module ECMAScript à partir d'un module CommonJS doit avoir un attribut « resolution-mode ».", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "L'instanciation de type est trop profonde et éventuellement infinie.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Le type est directement ou indirectement référencé dans le rappel d'exécution de sa propre méthode 'then'.", - "Type_library_referenced_via_0_from_file_1_1402": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}'", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}' ayant le packageId '{2}'", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Le type d'un opérande 'await' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Le type de la valeur de la propriété calculée est '{0}'. Il ne peut pas être assigné au type '{1}'.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Le type de variable membre d’instance '{0}' ne peut pas référencer l’identificateur '{1}' déclaré dans le constructeur.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Le type des éléments itérés d'un opérande 'yield*' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Le type de la propriété '{0}' se référence de façon circulaire dans le type mappé '{1}'.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Le type d'un opérande 'yield' dans un générateur asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "L'importation de type uniquement d'un module ECMAScript à partir d'un module CommonJS doit avoir un attribut « mode de résolution ».", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Le type provient de cette importation. Impossible d'appeler ou de construire une importation de style d'espace de noms, ce qui va entraîner un échec au moment de l'exécution. À la place, utilisez ici une importation par défaut ou une importation avec require.", - "Type_parameter_0_has_a_circular_constraint_2313": "Le paramètre de type '{0}' possède une contrainte circulaire.", - "Type_parameter_0_has_a_circular_default_2716": "Le paramètre de type '{0}' a une valeur par défaut circulaire.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Le paramètre de type '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Le paramètre de type '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Le paramètre de type '{0}' de la classe exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Le paramètre de type '{0}' de la fonction exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Le paramètre de type '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Le paramètre de type '{0}' du type d'objet mappé exporté utilise le nom privé '{1}'.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Le paramètre de type '{0}' de l'alias du type exporté contient ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Le paramètre de type '{0}' de la méthode de l'interface exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Le paramètre de type '{0}' de la méthode publique de la classe exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Le paramètre de type '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{1}'.", - "Type_parameter_declaration_expected_1139": "Déclaration du paramètre de type attendue.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Les déclarations de paramètre de type peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Les valeurs par défaut des paramètres de type peuvent uniquement référencer des paramètres de type déclarés.", - "Type_parameter_list_cannot_be_empty_1098": "La liste des paramètres de type ne peut pas être vide.", - "Type_parameter_name_cannot_be_0_2368": "Le nom du paramètre de type ne peut pas être '{0}'.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Les paramètres de type ne peuvent pas apparaître sur une déclaration de constructeur.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Impossible d'assigner le prédicat de type '{0}' à '{1}'.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Le type produit un type de tuple trop grand pour être représenté.", - "Type_reference_directive_0_was_not_resolved_6120": "======== La directive de référence de type '{0}' n'a pas été résolue. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}', primaire : {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}' avec l'ID de package '{2}', primaire : {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Les expressions de satisfaction de type peuvent uniquement être utilisées dans les fichiers TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Les types ne peuvent pas apparaître dans les déclarations d’exportation dans les fichiers JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Les types ont des déclarations distinctes d'une propriété privée '{0}'.", - "Types_of_construct_signatures_are_incompatible_2419": "Les types de signature de construction sont incompatibles.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Les types des paramètres '{0}' et '{1}' sont incompatibles.", - "Types_of_property_0_are_incompatible_2326": "Les types de la propriété '{0}' sont incompatibles.", - "Unable_to_open_file_0_6050": "Impossible d'ouvrir le fichier '{0}'.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Impossible de résoudre la signature d'un élément décoratif de classe quand il est appelé en tant qu'expression.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Impossible de résoudre la signature d'un élément décoratif de méthode quand il est appelé en tant qu'expression.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Impossible de résoudre la signature d'un élément décoratif de paramètre quand il est appelé en tant qu'expression.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Impossible de résoudre la signature d'un élément décoratif de propriété quand il est appelé en tant qu'expression.", - "Undetermined_character_escape_1513": "L’échappement de caractère n’est pas déterminé.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "« {0} » est inattendu. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", - "Unexpected_end_of_text_1126": "Fin de texte inattendue.", - "Unexpected_keyword_or_identifier_1434": "Mot clé ou identificateur inattendu.", - "Unexpected_token_1012": "Jeton inattendu.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Jeton inattendu. Un constructeur, une méthode, un accesseur ou une propriété est attendu.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Jeton inattendu. Un nom de paramètre de type est attendu sans accolades.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'>'}' ou '>' ?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'}'}' ou '}' ?", - "Unexpected_token_expected_1179": "Jeton inattendu. '{' est attendu.", - "Unicode_escape_sequence_cannot_appear_here_17021": "La séquence d’échappement Unicode ne peut pas apparaître ici.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Les séquences d’échappement Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Les expressions de valeur de propriété Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", - "Unknown_Unicode_property_name_1524": "Le nom de propriété Unicode est inconnu.", - "Unknown_Unicode_property_name_or_value_1529": "Une valeur ou un nom de propriété Unicode est inconnu.", - "Unknown_Unicode_property_value_1526": "La valeur de propriété Unicode est inconnue.", - "Unknown_build_option_0_5072": "Option de build inconnue : '{0}'.", - "Unknown_build_option_0_Did_you_mean_1_5077": "Option de build inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", - "Unknown_compiler_option_0_5023": "Option de compilateur '{0}' inconnue.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Option de compilateur inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Mot clé ou identificateur inconnu. Souhaitiez-vous utiliser «{0}» ?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Option 'excludes' inconnue. Voulez-vous utiliser 'exclude' ?", - "Unknown_regular_expression_flag_1499": "L’indicateur d’expression régulière est inconnu.", - "Unknown_type_acquisition_option_0_17010": "Option d'acquisition de type inconnue '{0}'.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Option d'acquisition de type inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", - "Unknown_watch_option_0_5078": "Option de surveillance inconnue : '{0}'.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Option de surveillance inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", - "Unreachable_code_detected_7027": "Code inatteignable détecté.", - "Unterminated_Unicode_escape_sequence_1199": "Séquence d'échappement Unicode inachevée.", - "Unterminated_quoted_string_in_response_file_0_6045": "Chaîne entre guillemets inachevée dans le fichier réponse '{0}'.", - "Unterminated_regular_expression_literal_1161": "Littéral d'expression régulière inachevé.", - "Unterminated_string_literal_1002": "Littéral de chaîne inachevé.", - "Unterminated_template_literal_1160": "Littéral de modèle inachevé.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Les appels de fonctions non typées ne peuvent pas accepter d'arguments de type.", - "Unused_label_7028": "Étiquette inutilisée.", - "Unused_ts_expect_error_directive_2578": "Directive '@ts-expect-error' inutilisée.", - "Update_import_from_0_90058": "Mettre à jour l’importation à partir de \"{0}\"", - "Update_modifiers_of_0_90061": "Mettre à jour les modificateurs de « {0} »", - "Updating_output_timestamps_of_project_0_6359": "Mise à jour des horodatages de sortie du projet '{0}'...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Mise à jour des horodatages de sortie inchangés du projet '{0}'...", - "Use_0_95174": "Utilisez `{0}`.", - "Use_0_instead_5106": "Utilisez « {0} » à la place.", - "Use_Number_isNaN_in_all_conditions_95175": "Utilisez 'Number.isNaN' dans toutes les conditions.", - "Use_element_access_for_0_95145": "Utiliser l'accès à l'élément pour '{0}'", - "Use_element_access_for_all_undeclared_properties_95146": "L'accès à l'élément est utilisé pour toutes les propriétés non déclarées.", - "Use_import_type_95180": "Utiliser « import type »", - "Use_synthetic_default_member_95016": "Utilisez un membre 'default' synthétique.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Utilisez le champ « exports » package.json lors de la résolution des importations de package.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Utilisez le champ « imports » package.json lors de la résolution des importations.", - "Use_type_0_95181": "Utiliser « type {0} »", - "Using_0_subpath_1_with_target_2_6404": "Utilisation de '{0}' de sous-chemin '{1}' avec la cible '{2}'.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "L'utilisation de fragments JSX nécessite que la fabrique de fragments '{0}' soit dans la portée, mais elle n'a pas pu être trouvée.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'utilisation d'une chaîne dans une instruction 'for...of' est prise en charge uniquement dans ECMAScript 5 et version supérieure.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "L’utilisation de--build,-b fera en sorte que tsc se comporte plus comme une build orchestrateur qu’un compilateur. Utilisé pour déclencher la génération de projets composites sur lesquels vous pouvez obtenir des informations supplémentaires sur {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Utilisation des options de compilateur de la redirection de référence de projet : '{0}'.", - "VERSION_6036": "VERSION", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "La valeur de type '{0}' n'a aucune propriété en commun avec le type '{1}'. Voulez-vous vraiment l'appeler ?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "La valeur de type '{0}' ne peut pas être appelée. Voulez-vous inclure 'new' ?", - "Variable_0_implicitly_has_an_1_type_7005": "La variable '{0}' possède implicitement un type '{1}'.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variable '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variable '{0}' a implicitement le type '{1}' à certains emplacements, mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variable '{0}' a implicitement le type '{1}' dans certains emplacements où son type ne peut pas être déterminé.", - "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' est utilisée avant d'être assignée.", - "Variable_declaration_expected_1134": "Déclaration de variable attendue.", - "Variable_declaration_list_cannot_be_empty_1123": "La liste des déclarations de variable ne peut pas être vide.", - "Variable_declaration_not_allowed_at_this_location_1440": "Déclaration de variable non autorisée à cet emplacement.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable doit avoir une annotation de type explicite avec --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Les variables avec plusieurs déclarations ne peuvent pas être inlined.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'élément variadique situé à la position {0} dans la source ne correspond pas à l'élément situé à la position {1} dans la cible.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Les annotations de variance sont uniquement prises en charge dans les alias de type pour les types objet, fonction, constructeur et mappé.", - "Version_0_6029": "Version {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visitez https://aka.ms/ts6 pour obtenir des informations sur la migration.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visitez https://aka.ms/tsconfig pour en savoir plus sur ce fichier", - "WATCH_OPTIONS_6918": "OPTIONS D’OBSERVATION", - "Watch_and_Build_Modes_6250": "Modes d’Observation et de Génération", - "Watch_input_files_6005": "Fichiers d'entrée d'espion.", - "Watch_option_0_requires_a_value_of_type_1_5080": "L'option de surveillance '{0}' nécessite une valeur de type {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Nous ne pouvons écrire un type pour « {0} » qu’en ajoutant un type pour l’ensemble du paramètre ici.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Lors de l’attribution de fonctions, vérifiez que les paramètres et les valeurs de retour sont compatibles avec le sous-type.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Lors de la vérification de type, prenez en compte « null » et « undefined ».", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Garder la sortie de console obsolète en mode espion au lieu d'effacer l'écran.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Inclure dans un wrapper tous les caractères non valides au sein d'un conteneur d'expressions", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Mettre toutes les expressions de décorateurs non valides entre parenthèses", - "Wrap_all_object_literal_with_parentheses_95116": "Placer tous les littéraux d'objet entre parenthèses", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Inclure dans un wrapper tous les JSX non apparentés au sein d'un fragment JSX", - "Wrap_in_JSX_fragment_95120": "Inclure dans un wrapper au sein d'un fragment JSX", - "Wrap_in_parentheses_95194": "Mettre entre parenthèses", - "Wrap_invalid_character_in_an_expression_container_95108": "Inclure dans un wrapper un caractère non valide au sein d'un conteneur d'expressions", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Placer le corps suivant entre parenthèses pour indiquer qu'il s'agit d'un littéral d'objet", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Vous pouvez en savoir plus sur toutes les options du compilateur sur {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Vous ne pouvez pas renommer un module via une importation globale.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Vous ne pouvez pas renommer les éléments définis dans un dossier « node_modules ».", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Vous ne pouvez pas renommer les éléments définis dans un autre dossier « node_modules ».", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Vous ne pouvez pas renommer des éléments définis dans la bibliothèque TypeScript standard.", - "You_cannot_rename_this_element_8000": "Vous ne pouvez pas renommer cet élément.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accepte trop peu d'arguments pour pouvoir être utilisé ici en tant qu'élément décoratif. Voulez-vous vraiment l'appeler d'abord et écrire '@{0}()' ?", - "_0_and_1_index_signatures_are_incompatible_2330": "Les signatures d'index « {0} » et « {1} » sont incompatibles.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Les opérations '{0}' et '{1}' ne peuvent pas être mélangées sans parenthèses.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' spécifié deux fois. L'attribut nommé '{0}' va être remplacé.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "« {0} » à la fin d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "« {0} » au début d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' peut uniquement être importé via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' peut uniquement être importé via l'utilisation d'une importation par défaut.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'utilisation d'une importation par défaut.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'utilisation d'une importation par défaut.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", - "_0_cannot_be_used_as_a_JSX_component_2786": "Impossible d'utiliser '{0}' comme composant JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été exporté à l'aide de 'export type'.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été importé à l'aide de 'import type'.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Les composants '{0}' n'acceptent pas du texte en tant qu'éléments enfants. Le texte dans JSX a le type 'string', mais le type attendu de '{1}' est '{2}'.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' a pu être instancié avec un type arbitraire qui n'est peut-être pas lié à '{1}'.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Les déclarations « {0} » ne peuvent être déclarées que dans un bloc.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Les déclarations '{0}' peuvent uniquement être utilisées dans les fichiers TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "Les déclarations « {0} » ne peuvent pas avoir de modèles de liaison.", - "_0_declarations_must_be_initialized_1155": "Les déclarations « {0} » doivent être initialisées.", - "_0_expected_1005": "'{0}' attendu.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "« {0} » a un type de chaîne, mais doit avoir une syntaxe de chaîne syntaxiquement reconnaissable quand « isolatedModules » est activé.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' n'a aucun membre exporté nommé '{1}'. Est-ce que vous pensiez à '{2}' ?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' a implicitement un type de retour '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' possède implicitement le type de retour 'any', car il n'a pas d'annotation de type de retour, et est référencé directement ou indirectement dans l'une de ses expressions de retour.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' a implicitement le type 'any', car il n'a pas d'annotation de type et est référencé directement ou indirectement dans son propre initialiseur.", - "_0_index_signatures_are_incompatible_2634": "Les signatures d'index « {0} » sont incompatibles.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Le type d’index « {0} », « {1} », ne peut pas être attribué au type d’index « {2} », « {3} ».", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' est une primitive, mais '{1}' est un objet wrapper. Si possible, utilisez '{0}' de préférence.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' est un type qui ne peut pas être importé dans des fichiers JavaScript. Utilisez '{1}' dans une annotation de type JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "« {0} » est un type et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "« {0} » est un changement de nom inutilisé de « {1} ». Souhaitiez-vous l’utiliser comme annotation de type?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' peut être assigné à la contrainte de type '{1}', mais '{1}' a pu être instancié avec un autre sous-type de contrainte '{2}'.", - "_0_is_automatically_exported_here_18044": "'{0}' est automatiquement exporté ici.", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' est déclaré mais sa valeur n'est jamais lue.", - "_0_is_declared_but_never_used_6196": "'{0}' est déclaré mais n'est jamais utilisé.", - "_0_is_declared_here_2728": "'{0}' est déclaré ici.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' est défini en tant que propriété dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant qu'accesseur.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' est défini en tant qu'accesseur dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant que propriété d'instance.", - "_0_is_deprecated_6385": "'{0}' est déprécié.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' n'est pas une métapropriété valide pour le mot clé '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' n'est pas autorisé comme nom de paramètre.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' n'est pas autorisé en tant que nom de déclaration de variable.", - "_0_is_of_type_unknown_18046": "'{0}' est de type 'unknown'.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' est peut-être 'null'.", - "_0_is_possibly_null_or_undefined_18049": "'{0}' est peut-être 'null' ou 'undefined'.", - "_0_is_possibly_undefined_18048": "'{0}' est peut-être 'non défini'.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' est référencé directement ou indirectement dans sa propre expression de base.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' est référencé directement ou indirectement dans sa propre annotation de type.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' est spécifié plusieurs fois. Cette utilisation va donc être remplacée.", - "_0_list_cannot_be_empty_1097": "La liste '{0}' ne peut pas être vide.", - "_0_modifier_already_seen_1030": "Modificateur '{0}' déjà rencontré.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Le modificateur «{0}» ne peut apparaître que sur un paramètre de type d’une classe, d’une interface ou d’un alias de type", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Le modificateur « {0} » ne peut apparaître que sur un paramètre de type d’une fonction, d’une méthode ou d’une classe", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Le modificateur '{0}' ne peut pas apparaître sur une déclaration de constructeur.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Le modificateur '{0}' ne peut pas apparaître dans un élément de module ou d'espace de noms.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Le modificateur '{0}' ne peut pas apparaître dans un paramètre.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Le modificateur '{0}' ne peut pas apparaître dans un membre de type.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Le modificateur «{0}» ne peut pas apparaître sur un paramètre de type", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « using ».", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « await using ».", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Le modificateur '{0}' ne peut pas apparaître dans une signature d'index.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Le modificateur '{0}' ne peut pas apparaître sur les éléments de classe de ce genre.", - "_0_modifier_cannot_be_used_here_1042": "Impossible d'utiliser le modificateur '{0}' ici.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Impossible d'utiliser le modificateur '{0}' dans un contexte ambiant.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Impossible d'utiliser les modificateurs '{0}' et '{1}' ensemble.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Le modificateur '{0}' ne peut pas être utilisé avec un identificateur privé.", - "_0_modifier_must_precede_1_modifier_1029": "Le modificateur '{0}' doit précéder le modificateur '{1}'.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "« \\{0} » doit être suivi d’une expression de valeur de propriété Unicode entre accolades.", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' a besoin d'une annotation de type explicite.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' référence uniquement un type mais s'utilise en tant qu'espace de noms ici.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fait uniquement référence à un type mais s'utilise en tant que valeur ici.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' fait uniquement référence à un type, mais il est utilisé ici en tant que valeur. Voulez-vous vraiment utiliser '{1} dans {0}' ?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' fait uniquement référence à un type, mais il est utilisé ici en tant que valeur. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' par es2015 ou une version ultérieure.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fait référence à une variable globale UMD, mais le fichier actuel est un module. Ajoutez une importation à la place.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fait référence à une valeur, mais il est utilisé ici en tant que type. Est-ce que vous avez voulu utiliser 'typeof {0}' ?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "« {0} » se résout en une déclaration de type uniquement et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "« {0} » doit être résolu en déclaration de type unique et doit être réexporté en utilisant une réexportation de type unique lorsque l’option {1} est activée.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' doit être défini dans l'objet 'compilerOptions' du fichier de configuration json", - "_0_tag_already_specified_1223": "La balise '{0}' est déjà spécifiée.", - "_0_was_also_declared_here_6203": "'{0}' a également été déclaré ici.", - "_0_was_exported_here_1377": "'{0}' a été exporté ici.", - "_0_was_imported_here_1376": "'{0}' a été importé ici.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour '{1}'.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{1}'.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Le modificateur 'abstract' peut apparaître uniquement dans une déclaration de classe, de méthode ou de propriété.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Le modificateur 'accessor' ne peut apparaître que sur une déclaration de propriété.", - "and_here_6204": "et ici.", - "and_npm_install_D_types_Slashnode_6290": "et npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Les « arguments » ne peuvent pas être référencés dans les initialiseurs de propriétés ou les blocs d'initialisation statique de classe.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "« auto » : traitez les fichiers avec des importations, des exportations, import.meta, jsx (avec jsx: react-jsx) ou un format esm (avec module : node16+) en tant que modules.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "L’expression « await » à l’intérieur d’un bloc statique de classe.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Les expressions 'await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a pas d'importations ou d'exportations. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Les expressions 'await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Impossible d'utiliser des expressions 'await' dans un initialiseur de paramètre.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' n'a aucun effet sur le type de cette expression.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Les déclarations « await using » ne sont pas autorisées dans les contextes ambiants.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Les déclarations 'await using' ne sont pas autorisées dans les clauses 'case' ou 'default', sauf si elles sont contenues dans un bloc.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Les instructions « await using » sont uniquement autorisées au niveau supérieur d’un fichier quand celui-ci est un module, mais le fichier actuel n’a aucune importation ou exportation. Envisagez d’ajouter un « export {} » vide pour faire de ce fichier un module.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Les expressions « await using » sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Des instructions « await using » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'option 'baseUrl' a la valeur '{0}'. Utilisation de cette valeur pour la résolution du nom de module non relatif '{1}'.", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' doit être suivi d’une lettre ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' peut uniquement être utilisé au début d'un fichier.", - "case_or_default_expected_1130": "'case' ou 'default' attendu.", - "catch_or_finally_expected_1472": "« Catch » ou « finally » attendu.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'initialiseur de membre enum 'const' donne une valeur non finie.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'initialiseur de membre enum 'const' donne une valeur non autorisée 'NaN'.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Les initialiseurs de membre enum const doivent être des expressions constantes.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Les enums 'const' ne peuvent être utilisés que dans les expressions d'accès à une propriété ou un index, ou dans la partie droite d'une déclaration d'importation, d'une assignation d'exportation ou d'une requête de type.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' ne peut pas être utilisé en tant que nom de propriété de paramètre.", - "constructor_is_a_reserved_word_18012": "'#constructor' est un mot réservé.", - "default_Colon_6903": "Par défaut :", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' ne peut pas être appelé dans un identificateur en mode strict.", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' ne réexporte pas d'exportations par défaut.", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' peut uniquement être utilisé dans les fichiers TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Impossible d'appliquer le modificateur 'export' aux modules ambients et aux augmentations de module, car ils sont toujours visibles.", - "extends_clause_already_seen_1172": "Clause 'extends' déjà rencontrée.", - "extends_clause_must_precede_implements_clause_1173": "La clause 'extends' doit précéder la clause 'implements'.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clause 'extends' de la classe exportée '{0}' comporte ou utilise le nom privé '{1}'.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clause 'extends' de la classe exportée comporte ou utilise le nom privé '{0}'.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clause 'extends' de l'interface exportée '{0}' comporte ou utilise le nom privé '{1}'.", - "false_unless_checkJs_is_set_6932": "« false », sauf si « checkJs » est défini", - "false_unless_composite_is_set_6906": "« false », sauf si « composite » est défini", - "file_6025": "fichier", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Les boucles 'for await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a aucune importation ou exportation. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Les boucles 'for await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Les boucles « for await » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Les accesseurs 'get' et 'set' ne peuvent pas déclarer les paramètres 'this'.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "«[]» si « files » est spécifié, sinon « [\"**/*\"] »", - "implements_clause_already_seen_1175": "Clause 'implements' déjà rencontrée.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Les clauses 'implements' peuvent uniquement être utilisées dans les fichiers TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' peut uniquement être utilisé dans les fichiers TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Les déclarations 'infer' sont uniquement autorisées dans la clause 'extends' d’un type conditionnel.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "« \\k » doit être suivi d’un nom de groupe de capture placé entre crochets angulaires.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ne peut pas être utilisé comme nom dans les déclarations 'let' ou 'const'.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'expression 'new', dont la cible ne dispose pas d'une signature de construction, possède implicitement un type 'any'.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "« [ « node_modules », « bower_components », « jspm_packages »] », plus la valeur de « outDir » si elle est spécifiée.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext` si `module` est `nodenext` ; `node16` si `module` est `node16` ou `node18` ; sinon, `bundler`.", - "one_of_Colon_6900": "L'un de :", - "one_or_more_Colon_6901": "un ou plusieurs :", - "options_6024": "options", - "or_JSX_element_expected_1145": "'{' ou élément JSX attendu.", - "or_expected_1144": "'{' ou ';' attendu.", - "package_json_does_not_have_a_0_field_6100": "'package.json' n'a aucun champ '{0}'.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' n'a aucune entrée 'typesVersions' qui correspond à la version '{0}'.", - "package_json_had_a_falsy_0_field_6220": "'package.json' a un champ '{0}' erroné.", - "package_json_has_0_field_1_that_references_2_6101": "'package.json' a un champ '{0}' '{1}' qui fait référence à '{2}'.", - "package_json_has_a_peerDependencies_field_6281": "« package.json » a un champ « peerDependencies ».", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' a une entrée 'typesVersions' '{0}' qui n'est pas une plage SemVer valide.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' a une entrée 'typesVersions' '{0}' qui correspond à la version de compilateur '{1}'. Recherche d'un modèle correspondant au nom de module '{2}'.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' a un champ 'typesVersions' avec des mappages de chemins spécifiques à la version.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "L’étendue package.json « {0} » mappe explicitement le spécificateur « {1} » sur la valeur null.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L’étendue package.json « {0} » a un type non valide pour la cible du spécificateur « {1} »", - "package_json_scope_0_has_no_imports_defined_6273": "L’étendue package.json « {0} » ne comporte aucune importation définie.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "L'option 'paths' est spécifiée. Recherche d'un modèle correspondant au nom de module '{0}'.", - "q_is_only_available_inside_character_class_1511": "« \\q » n’est disponible que dans la classe de caractères.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "« \\q » doit être suivi d’alternatives de chaîne entre accolades.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Le modificateur 'readonly' peut apparaître uniquement dans une déclaration de propriété ou une signature d'index.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Le modificateur de type 'readonly' est uniquement autorisé sur les types littéraux de tableau et de tuple.", - "require_call_may_be_converted_to_an_import_80005": "L'appel de 'require' peut être converti en import.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "« mode résolution » ne peut être défini que pour les importations de type uniquement.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "« mode résolution » est la seule clé valide pour les assertions d’importation de type.", - "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' doit être 'require' ou 'import'.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'option 'rootDirs' est définie. Utilisation de celle-ci pour la résolution du nom de module relatif '{0}'.", - "super_can_only_be_referenced_in_a_derived_class_2335": "'super' ne peut être référencé que dans une classe dérivée.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' ne peut être référencé que dans les membres des classes dérivées ou les expressions littérales d'objet.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Impossible de référencer 'super' dans un nom de propriété calculée.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "Impossible de référencer 'super' dans des arguments de constructeur.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' est uniquement autorisé dans les membres des expressions littérales d'objet quand l'option 'target' a la valeur 'ES2015' ou une valeur supérieure.", - "super_may_not_use_type_arguments_2754": "'super' ne peut pas utiliser d'arguments de type.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "'super' doit être appelé avant d'accéder à une propriété de 'super' dans le constructeur d'une classe dérivée.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "'super' doit être appelé avant d'accéder à 'this' dans le constructeur d'une classe dérivée.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' doit être suivi d'une liste d'arguments ou d'un accès au membre.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "L'accès aux propriétés 'super' est autorisé uniquement dans un constructeur, une fonction membre ou un accesseur membre d'une classe dérivée.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "Impossible de référencer 'this' dans un nom de propriété calculée.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Impossible de référencer 'this' dans le corps d'un module ou d'un espace de noms.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Impossible de référencer 'this' dans un initialiseur de propriété statique.", - "this_cannot_be_referenced_in_current_location_2332": "Impossible de référencer 'this' dans l'emplacement actuel.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' possède implicitement le type 'any', car il n'a pas d'annotation de type.", - "true_for_ES2022_and_above_including_ESNext_6930": "'true’ pour ES2022 et versions ultérieures, y compris ESNext.", - "true_if_composite_false_otherwise_6909": "« true » si « composite », « false » sinon", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "« true » quand « moduleResolution » a la valeur « node16 », « nodenext » ou « bundler » ; sinon « false ».", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc : compilateur TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "Le fichier tsconfig.json est présent mais ne sera pas chargé si des fichiers sont spécifiés en ligne de commande. Utilisez '--ignoreConfig' pour ignorer cette erreur.", - "type_Colon_6902": "type :", - "unique_symbol_types_are_not_allowed_here_1335": "Les types 'unique symbol' ne sont pas autorisés ici.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Les types 'unique symbol' sont uniquement autorisés sur les variables d'une déclaration de variable.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Les types 'unique symbol' ne peuvent pas être utilisés dans une déclaration de variable avec un nom de liaison.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "La directive 'use strict' ne peut pas être utilisée avec une liste de paramètres non simple.", - "use_strict_directive_used_here_1349": "directive 'use strict' utilisée ici.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Les déclarations « using » ne sont pas autorisées dans les contextes ambiants.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Les déclarations 'using' ne sont pas autorisées dans les clauses 'case' ou 'default' sauf si elles sont incluses dans un bloc.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "Les instructions 'with' ne sont pas autorisées dans un bloc de fonctions async.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Les instructions 'with' ne sont pas autorisées en mode strict.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "L'expression 'yield' génère implicitement un type 'any', car le générateur qui la contient n'a pas d'annotation de type de retour.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Impossible d'utiliser des expressions 'yield' dans un initialiseur de paramètre." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "TOUTES LES OPTIONS DU COMPILATEUR", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Impossible d'utiliser un modificateur '{0}' avec une déclaration d'importation.", + "A_0_parameter_must_be_the_first_parameter_2680": "Un paramètre '{0}' doit être le premier paramètre.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Une balise JSDoc « @template » ne peut pas suivre une balise « @typedef », « @callback » ou « @overload »", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commentaire JSDoc '@typedef' ne peut pas contenir plusieurs balises '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Un littéral « bigint » ne peut pas être utilisé comme nom de propriété.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Un littéral bigint ne peut pas utiliser la notation exponentielle.", + "A_bigint_literal_must_be_an_integer_1353": "Un littéral bigint doit être un entier.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un paramètre de modèle de liaison ne peut pas être facultatif dans une signature d'implémentation.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Une instruction 'break' peut être utilisée uniquement dans une itération englobante ou une instruction switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Une instruction 'break' peut accéder uniquement à une étiquette d'une instruction englobante.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Une classe de caractères ne doit pas contenir de ponctuation double réservée. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Une plage de classes de caractères ne doit pas être liée par une autre classe de caractères.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Une classe peut uniquement implémenter un identificateur/nom qualifié avec des arguments de type facultatifs.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Une classe peut implémenter uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Une classe ne peut pas étendre un type primitif comme « {0} ». Les classes peuvent uniquement étendre des valeurs pouvant être construites.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Une classe ne peut pas implémenter un type primitif tel que « {0} ». Elle ne peut implémenter que d’autres types d’objets nommés.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Une déclaration de classe sans modificateur 'default' doit porter un nom.", + "A_class_member_cannot_have_the_0_keyword_1248": "Un membre de classe ne peut pas avoir le mot clé '{0}'.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Une expression avec virgule n'est pas autorisée dans un nom de propriété calculée.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nom de propriété calculée ne peut pas référencer un paramètre de type à partir de son type conteneur.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nom de propriété calculée dans une déclaration de propriété de classe doit avoir un type littéral simple ou un type 'unique symbol'.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nom de propriété calculée dans une surcharge de méthode doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nom de propriété calculée dans un littéral de type doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nom de propriété calculée dans un contexte ambiant doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nom de propriété calculée dans une interface doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nom de propriété calculée doit être de type 'string', 'number', 'symbol' ou 'any'.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Une assertion « const » peut uniquement être appliquée aux références à des membres enum, des littéraux de chaînes, des littéraux de nombres, des littéraux de valeurs booléennes, des littéraux de tableaux ou des littéraux d'objets.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Un membre d'enum const n'est accessible qu'à l'aide d'un littéral de chaîne.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un initialiseur 'const' dans un contexte ambiant doit être un littéral de chaîne ou un littéral numérique, ou une référence à un enum littéral.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un constructeur ne peut pas contenir d'appel de 'super' quand sa classe étend 'null'.", + "A_constructor_cannot_have_a_this_parameter_2681": "Un constructeur ne peut pas avoir un paramètre 'this'.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Une instruction 'continue' peut uniquement être utilisée dans une instruction d'itération englobante.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Une instruction 'continue' peut accéder uniquement à une étiquette d'une instruction d'itération englobante.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nous ne pouvons pas importer un fichier de déclaration sans « import type ». Vouliez-vous importer un fichier d’implémentation « {0} » à la place ?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Impossible d'utiliser un modificateur 'declare' dans un contexte ambiant déjà défini.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un élément décoratif peut uniquement décorer une implémentation de méthode, pas une surcharge.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Une clause 'default' ne peut pas figurer plusieurs fois dans une instruction 'switch'.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Une exportation par défaut ne peut être utilisée que dans un module ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Une exportation par défaut doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Une assertion d'affectation définie ' !' n'est pas autorisée dans ce contexte.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Une déclaration de déstructuration doit avoir un initialiseur.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Un appel d’importation dynamique dans ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Un appel d'importation dynamique retourne 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "A_file_cannot_have_a_reference_to_itself_1006": "Un fichier ne peut pas contenir une référence à lui-même.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Une fonction qui retourne 'never' ne peut pas avoir de point de terminaison accessible.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Une fonction appelée avec le mot clé 'new' ne peut pas avoir un type 'this' dont la valeur est 'void'.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Une fonction dont le type déclaré n'est ni « undefined », « void » ni « any » doit renvoyer une valeur.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Un générateur ne peut pas avoir d'annotation de type 'void'.", + "A_get_accessor_cannot_have_parameters_1054": "Un accesseur 'get' ne peut pas avoir de paramètres.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un accesseur get doit être au moins aussi accessible que la méthode setter", + "A_get_accessor_must_return_a_value_2378": "Un accesseur 'get' doit retourner une valeur.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un élément de tuple étiqueté est déclaré facultatif avec un point d'interrogation après le nom et avant les deux points, plutôt qu'après le type.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un élément de tuple étiqueté est déclaré en tant que rest avec '...' avant le nom, plutôt qu'avant le type.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un type mappé ne peut pas déclarer de propriétés ou de méthodes.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un initialiseur de membre dans une déclaration d'enum ne peut pas référencer des membres déclarés après lui, notamment des membres définis dans d'autres enums.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Une classe mixin doit avoir un constructeur avec un paramètre rest unique de type 'any[]'.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Une classe mixin qui s'étend à partir d'une variable de type contenant une signature de construction abstraite doit également être déclarée 'abstract'.", + "A_module_cannot_have_multiple_default_exports_2528": "Un module ne peut pas avoir plusieurs exportations par défaut.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Une déclaration d'espace de noms ne peut pas se trouver dans un autre fichier que celui d'une classe ou d'une fonction avec laquelle elle est fusionnée.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Une déclaration d'espace de noms ne peut pas se trouver avant une classe ou une fonction avec laquelle elle est fusionnée.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Une déclaration d’espace de noms n’est autorisée qu’au niveau supérieur d’un espace de noms ou d’un module.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Une déclaration d’« espace de noms » ne doit pas être déclarée à l’aide du mot clé « module ». Utilisez plutôt le mot clé « espace de noms ».", + "A_non_dry_build_would_build_project_0_6357": "Une build non-dry va générer le projet '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Une build non-dry va supprimer les fichiers suivants : {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Une build non-dry va mettre à jour les horodatages de la sortie du projet '{0}'", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un initialiseur de paramètre est uniquement autorisé dans une implémentation de fonction ou de constructeur.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Impossible de déclarer une propriété de paramètre à l'aide d'un paramètre rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Une propriété de paramètre est uniquement autorisée dans une implémentation de constructeur.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Impossible de déclarer une propriété de paramètre à l'aide d'un modèle de liaison.", + "A_promise_must_have_a_then_method_1059": "Une promesse doit avoir une méthode 'then'.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Une propriété d'une classe dont le type est un type 'unique symbol' doit être à la fois 'static' et 'readonly'.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Une propriété d'une interface ou d'un littéral de type dont le type est un type 'unique symbol' doit être 'readonly'.", + "A_required_element_cannot_follow_an_optional_element_1257": "Un élément required ne peut pas suivre un élément optional.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un paramètre obligatoire ne peut pas suivre un paramètre optionnel.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un élément rest ne peut pas contenir de modèle de liaison.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Un élément rest ne peut pas suivre un autre élément rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Un élément rest ne peut pas avoir de nom de propriété.", + "A_rest_element_cannot_have_an_initializer_1186": "Un élément rest ne peut pas avoir d'initialiseur.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un élément rest doit être le dernier dans un modèle de déstructuration.", + "A_rest_element_type_must_be_an_array_type_2574": "Un type d'élément rest doit être un type tableau.", + "A_rest_parameter_cannot_be_optional_1047": "Un paramètre rest ne peut pas être facultatif.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Un paramètre rest ne peut pas avoir d'initialiseur.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un paramètre rest doit être le dernier dans une liste de paramètres.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Un paramètre rest doit être de type tableau.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Les modèles de liaison ou les paramètres rest ne doivent pas avoir de virgule de fin.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Une instruction 'return' peut être utilisée uniquement dans un corps de fonction.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Une instruction « return » ne peut pas être utilisée à l’intérieur d’un bloc statique de classe.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Série d'entrées qui remappent les importations aux emplacements de recherche en fonction de 'baseUrl'.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un accesseur 'set' ne peut pas avoir d'annotation de type de retour.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un accesseur 'set' ne peut pas avoir de paramètre optionnel.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Un accesseur 'set' ne peut pas avoir de paramètre rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Un accesseur 'set' doit avoir un seul paramètre.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un paramètre d'accesseur 'set' ne peut pas avoir d'initialiseur.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argument d’engraissement doit soit avoir un type de tuple, soit être passé à un paramètre REST.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Un appel « super » doit être une instruction de niveau racine dans un constructeur d’une classe dérivée qui contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Un appel 'super' doit être la première instruction du constructeur à faire référence à « super » ou « this » lorsqu’une classe dérivée contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Une protection de type basée sur 'this' n'est pas compatible avec une protection de type basée sur des paramètres.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un type 'this' est disponible uniquement dans un membre non statique d'une classe ou d'une interface.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Un modificateur « export » de niveau supérieur ne peut pas être utilisé sur des déclarations de valeur dans un module CommonJS quand « verbatimModuleSyntax » est activé.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un fichier 'tsconfig.json' est déjà défini à l'emplacement '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membre de tuple ne peut pas être à la fois facultatif et rest.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un type tuple ne peut pas être indexé avec une valeur négative.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Une expression d'assertion de type n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Une propriété de littéral de type ne peut pas avoir d'initialiseur.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Une importation de type uniquement peut spécifier une importation par défaut ou des liaisons nommées, mais pas les deux.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un prédicat de type ne peut pas référencer un paramètre rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un prédicat de type ne peut pas référencer un élément '{0}' dans un modèle de liaison.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Un prédicat de type est autorisé uniquement dans une position de type de retour pour les fonctions et les méthodes.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Le type d'un prédicat de type doit être assignable au type de son paramètre.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un type référencé dans une signature décorée doit être importé avec « import type » ou une importation d’espace de noms quand « isolatedModules » et « emitDecoratorMetadata » sont activés.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Une variable dont le type est un type 'unique symbol' doit être 'const'.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Une expression 'yield' est autorisée uniquement dans le corps d'un générateur.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "La méthode abstraite '{0}' de la classe '{1}' n'est pas accessible au moyen de l'expression super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Les méthodes abstraites peuvent uniquement apparaître dans une classe abstraite.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Les propriétés abstraites peuvent uniquement apparaître dans une classe abstraite.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "La propriété abstraite '{0}' de la classe '{1}' n'est pas accessible dans le constructeur.", + "Accessibility_modifier_already_seen_1028": "Modificateur d'accessibilité déjà rencontré.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Les accesseurs sont uniquement disponibles quand EcmaScript 5 ou version supérieure est ciblé.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Les accesseurs doivent être abstraits ou non abstraits.", + "Add_0_to_unresolved_variable_90008": "Ajouter '{0}.' à la variable non résolue", + "Add_a_return_statement_95111": "Ajouter une instruction return", + "Add_a_return_type_to_the_function_declaration_9031": "Ajoutez un type de retour à la déclaration de fonction.", + "Add_a_return_type_to_the_function_expression_9030": "Ajoutez un type de retour à l’expression de fonction.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Ajoutez un type de retour à la déclaration d’accesseur get.", + "Add_a_return_type_to_the_method_9034": "Ajouter un type de retour à la méthode", + "Add_a_type_annotation_to_the_parameter_0_9028": "Ajoutez une annotation de type au paramètre {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Ajoutez une annotation de type à la propriété {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Ajoutez une annotation de type à la variable {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ajoutez un type au paramètre de la déclaration d’accesseur set.", + "Add_all_missing_async_modifiers_95041": "Ajouter tous les modificateurs 'async' manquants", + "Add_all_missing_attributes_95168": "Ajouter tous les attributs manquants", + "Add_all_missing_call_parentheses_95068": "Ajouter toutes les parenthèses d'appel manquantes", + "Add_all_missing_function_declarations_95157": "Ajouter toutes les déclarations de fonction manquantes", + "Add_all_missing_imports_95064": "Ajouter toutes les importations manquantes", + "Add_all_missing_members_95022": "Ajouter tous les membres manquants", + "Add_all_missing_override_modifiers_95162": "Ajouter tous les modificateurs 'override' manquants", + "Add_all_missing_parameters_95190": "Ajouter tous les paramètres manquants", + "Add_all_missing_properties_95166": "Ajouter toutes les propriétés manquantes", + "Add_all_missing_return_statement_95114": "Ajouter toutes les instructions return manquantes", + "Add_all_missing_super_calls_95039": "Ajouter tous les appels super manquants", + "Add_all_missing_type_annotations_90067": "Ajouter toutes les annotations de type manquantes", + "Add_all_optional_parameters_95193": "Ajouter tous les paramètres optionnels", + "Add_annotation_of_type_0_90062": "Ajouter une annotation de type « {0} »", + "Add_async_modifier_to_containing_function_90029": "Ajouter le modificateur async dans la fonction conteneur", + "Add_await_95083": "Ajouter 'await'", + "Add_await_to_initializer_for_0_95084": "Ajouter 'await' à l'initialiseur pour '{0}'", + "Add_await_to_initializers_95089": "Ajouter 'await' aux initialiseurs", + "Add_braces_to_arrow_function_95059": "Ajouter des accolades à la fonction arrow", + "Add_const_to_all_unresolved_variables_95082": "Ajouter 'const' à toutes les variables non résolues", + "Add_const_to_unresolved_variable_95081": "Ajouter 'const' à la variable non résolue", + "Add_definite_assignment_assertion_to_property_0_95020": "Ajouter une assertion d'assignation définie à la propriété '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Ajouter des assertions d'affectation définie à toutes les propriétés non initialisées", + "Add_export_to_make_this_file_into_a_module_95097": "Ajouter 'export {}' pour faire de ce fichier un module", + "Add_extends_constraint_2211": "Ajoutez la contrainte « extends ».", + "Add_extends_constraint_to_all_type_parameters_2212": "Ajouter la contrainte « extends » à tous les paramètres de type", + "Add_import_from_0_90057": "Ajouter l'importation de \"{0}\"", + "Add_index_signature_for_property_0_90017": "Ajouter une signature d'index pour la propriété '{0}'", + "Add_initializer_to_property_0_95019": "Ajouter un initialiseur à la propriété '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "Ajouter des initialiseurs à toutes les propriétés non initialisées", + "Add_missing_attributes_95167": "Ajouter les attributs manquants", + "Add_missing_call_parentheses_95067": "Ajouter les parenthèses d'appel manquantes", + "Add_missing_comma_for_object_member_completion_0_95187": "Ajoutez une virgule manquante pour l’achèvement de membre d’objet « {0} ».", + "Add_missing_enum_member_0_95063": "Ajouter le membre enum manquant '{0}'", + "Add_missing_function_declaration_0_95156": "Ajouter la déclaration de fonction manquante '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "Ajouter l'opérateur 'new' manquant à tous les appels", + "Add_missing_new_operator_to_call_95071": "Ajouter l'opérateur 'new' manquant à l'appel", + "Add_missing_parameter_to_0_95188": "Ajouter le paramètre manquant dans « {0} »", + "Add_missing_parameters_to_0_95189": "Ajouter les paramètres manquants dans « {0} »", + "Add_missing_properties_95165": "Ajouter des propriétés manquantes", + "Add_missing_super_call_90001": "Ajouter l'appel manquant à 'super()'", + "Add_missing_typeof_95052": "Ajouter un 'typeof' manquant", + "Add_names_to_all_parameters_without_names_95073": "Ajouter des noms à tous les paramètres sans noms", + "Add_optional_parameter_to_0_95191": "Ajouter un paramètre optionnel à « {0} »", + "Add_optional_parameters_to_0_95192": "Ajouter des paramètres optionnels à '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "Ajouter ou supprimer les accolades dans une fonction arrow", + "Add_override_modifier_95160": "Ajouter un modificateur 'override'", + "Add_parameter_name_90034": "Ajouter un nom de paramètre", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Ajouter un qualificateur à toutes les variables non résolues correspondant à un nom de membre", + "Add_resolution_mode_import_attribute_95196": "Ajouter l'attribut d'importation « mode de résolution »", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Ajoutez l'attribut d'importation « mode de résolution » à toutes les importations de type uniquement qui en ont besoin", + "Add_return_type_0_90063": "Ajouter le type de retour « {0} »", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Ajoutez des satisfactions et une assertion de type à cette expression (satisfait T en tant que T) pour rendre le type explicite.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Ajouter des satisfactions et une assertion de type inlined avec « {0} »", + "Add_to_all_uncalled_decorators_95044": "Ajouter '()' à tous les décorateurs non appelés", + "Add_ts_ignore_to_all_error_messages_95042": "Ajouter '@ts-ignore' à tous les messages d'erreur", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Ajoutez « undefined » à un type lorsque vous y accédez à l’aide d’un index.", + "Add_undefined_to_optional_property_type_95169": "Ajouter « undefined » à un type de propriété facultatif", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Ajouter un type non défini à toutes les propriétés non initialisées", + "Add_undefined_type_to_property_0_95018": "Ajouter un type 'undefined' à la propriété '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Ajouter une conversion 'unknown' pour les types qui ne se chevauchent pas", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Ajouter 'unknown' à toutes les conversions de types qui ne se chevauchent pas", + "Add_void_to_Promise_resolved_without_a_value_95143": "Ajouter 'void' à un Promise résolu sans valeur", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Ajouter 'void' à toutes les promesses résolues sans valeur", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "L'ajout d'un fichier tsconfig.json permet d'organiser les projets qui contiennent des fichiers TypeScript et JavaScript. En savoir plus sur https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Toutes les déclarations de « {0} » doivent avoir des contraintes identiques.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Toutes les déclarations de '{0}' doivent avoir des modificateurs identiques.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Toutes les déclarations de '{0}' doivent avoir des paramètres de type identiques.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Toutes les déclarations d'une méthode abstraite doivent être consécutives.", + "All_destructured_elements_are_unused_6198": "Tous les éléments déstructurés sont inutilisés.", + "All_imports_in_import_declaration_are_unused_6192": "Les importations de la déclaration d'importation ne sont pas toutes utilisées.", + "All_type_parameters_are_unused_6205": "Tous les paramètres de type sont inutilisés.", + "All_variables_are_unused_6199": "Toutes les variables sont inutilisées.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Autorisez les fichiers JavaScript à faire partie de votre programme. Utilisez l’option « checkJS » pour obtenir des erreurs à partir de ces fichiers.", + "Allow_accessing_UMD_globals_from_modules_6602": "Autorisez l'accès aux variables globales UMD à partir des modules.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Autorisez les importations par défaut à partir des modules sans exportation par défaut. Cela n'affecte pas l'émission du code, juste le contrôle de type.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Autoriser « importation de x à partir de y » quand un module n’a pas d’exportation par défaut.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Autorisez l’importation de fonctions d’assistance à partir de tslib une fois par projet, au lieu de les inclure par fichier.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Autorisez les importations pour inclure des extensions de fichier TypeScript. Nécessite la définition de « --moduleResolution bundler » et de « --noEmit » ou « --emitDeclarationOnly ».", + "Allow_javascript_files_to_be_compiled_6102": "Autorisez la compilation des fichiers JavaScript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Autorisez plusieurs dossiers à être considérés comme un seul lors de la résolution des modules.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Le nom de fichier déjà inclus '{0}' diffère du nom de fichier '{1}' uniquement par la casse.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Une déclaration de module ambiant ne peut pas spécifier un nom de module relatif.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Impossible d'imbriquer des modules ambiants dans d'autres modules ou espaces de noms.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un module AMD ne peut pas avoir plusieurs affectations de nom.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Un accesseur abstrait ne peut pas avoir d'implémentation.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Un modificateur d'accessibilité ne peut pas être utilisé avec un identificateur privé.", + "An_accessor_cannot_have_type_parameters_1094": "Un accesseur ne peut pas avoir de paramètres de type.", + "An_accessor_property_cannot_be_declared_optional_1276": "Une propriété 'accessor' ne peut pas être déclarée comme facultative.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Une déclaration de module ambiant est uniquement autorisée au niveau supérieur dans un fichier.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Aucun argument pour '{0}' n'a été fourni.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Aucun argument correspondant à ce modèle de liaison n'a été fourni.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un opérande arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Une fonction arrow ne peut pas avoir un paramètre 'this'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Une fonction ou méthode asynchrone dan ES5 nécessite le constructeur « Promise ». Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Une fonction ou une méthode async doit retourner 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.", + "An_async_iterator_must_have_a_next_method_2519": "Un itérateur asynchrone doit comporter une méthode 'next()'.", + "An_element_access_expression_should_take_an_argument_1011": "Une expression d'accès à un élément doit accepter un argument.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Un membre enum ne peut pas être nommé avec un identificateur privé.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Un membre enum ne peut pas avoir un nom numérique.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Un nom de membre enum doit être suivi de ',', de '=' ou de '}'.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Version développée de ces informations, affichant toutes les options possibles du compilateur", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Impossible d'utiliser une assignation d'exportation dans un module comportant d'autres éléments exportés.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Une affectation d'exportation ne peut pas être utilisée dans un espace de noms.", + "An_export_assignment_cannot_have_modifiers_1120": "Une assignation d'exportation ne peut pas avoir de modificateurs.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Une affectation d’exportation doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un module.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Une déclaration d’exportation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", + "An_export_declaration_cannot_have_modifiers_1193": "Une déclaration d'exportation ne peut pas avoir de modificateurs.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Une déclaration « export = » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Une déclaration « export = » doit faire référence à une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Une « export default » doit faire référence à une valeur réelle quand « verbatimModuleSyntax » est activé, mais « {0} » se résout en déclaration de type uniquement.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Une « export default » doit référencer une valeur quand « verbatimModuleSyntax » est activé, mais « {0} » fait uniquement référence à un type.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Impossible de tester une expression de type 'void' pour déterminer si elle a la valeur true.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Une valeur d'échappement Unicode étendue doit être comprise entre 0x0 et 0x10FFFF inclus.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Un identificateur ou un mot clé ne peut pas suivre immédiatement un littéral numérique.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Impossible de déclarer une implémentation dans des contextes ambiants.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias d'importation ne peut pas référencer une déclaration exportée à l'aide de 'export type'.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias d'importation ne peut pas référencer une déclaration importée à l'aide de 'import type'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias d'importation ne peut pas être résolu en une déclaration de type ou de type uniquement lorsque « verbatimModuleSyntax » est activé.", + "An_import_alias_cannot_use_import_type_1392": "Un alias d'importation ne peut pas utiliser 'import type'", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un module.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Une déclaration d’importation ne peut être utilisée qu’au niveau supérieur d’un espace de noms ou d’un module.", + "An_import_declaration_cannot_have_modifiers_1191": "Une déclaration d'importation ne peut pas avoir de modificateurs.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un chemin d’importation ne peut se terminer que par une extension « {0} » lorsque « allowImportingTsExtensions » est activé.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Une signature d'index ne peut pas avoir de paramètre rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Une signature d'index ne peut pas avoir de virgule de fin.", + "An_index_signature_must_have_a_type_annotation_1021": "Une signature d'index doit avoir une annotation de type.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Une signature d'index doit avoir un seul paramètre.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un paramètre de signature d'index ne peut pas contenir de point d'interrogation.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un paramètre de signature d'index ne peut pas avoir de modificateur d'accessibilité.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un paramètre de signature d'index ne peut pas avoir d'initialiseur.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un paramètre de signature d'index doit avoir une annotation de type.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un type de paramètre de signature d’index ne peut pas être un type littéral ni générique. Envisagez plutôt d’utiliser un type d’objet mappé.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un type de paramètre de signature d’index doit être « string », « number », « symbol » ou un type littéral de modèle.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Une expression d’instanciation ne peut pas être suivie d’un accès à la propriété.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Une interface peut uniquement étendre un identificateur/nom qualifié avec des arguments de type facultatifs.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Une interface peut étendre uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Une interface ne peut pas étendre un type primitif comme « {0} ». Elle peut uniquement étendre d’autres types d’objets nommés.", + "An_interface_property_cannot_have_an_initializer_1246": "Une propriété d'interface ne peut pas avoir d'initialiseur.", + "An_iterator_must_have_a_next_method_2489": "Un itérateur doit comporter une méthode 'next()'.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Un pragma @jsxFrag est nécessaire quand un pragma @jsx est utilisé avec des fragments JSX.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un littéral d'objet ne peut pas avoir plusieurs accesseurs get/set portant le même nom.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un littéral d’objet ne peut pas avoir plusieurs propriétés portant le même nom.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un littéral d'objet ne peut pas avoir une propriété et un accesseur portant le même nom.", + "An_object_member_cannot_be_declared_optional_1162": "Impossible de déclarer un membre d'objet comme étant facultatif.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "La méthode « [Symbol.hasInstance] » d’un objet doit retourner une valeur booléenne pour qu’elle soit utilisée à droite d’une expression « instanceof ».", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Une chaîne facultative ne peut pas contenir d'identificateurs privés.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Un élément optional ne peut pas suivre un élément rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Une valeur externe de 'this' est mise en mémoire fantôme par ce conteneur.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Une signature de surcharge ne peut pas être déclarée en tant que générateur.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Une expression unaire avec l'opérateur '{0}' n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.", + "Annotate_everything_with_types_from_JSDoc_95043": "Annoter tout avec des types de JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annoter les types de fonction expando de propriétés dans un espace de noms", + "Annotate_with_type_from_JSDoc_95009": "Annoter avec le type de JSDoc", + "Another_export_default_is_here_2753": "Une autre valeur par défaut d'exportation se trouve ici.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Les propriétés Unicode susceptibles de correspondre à plus d’un caractère unique ne sont disponibles que lorsque l’indicateur Unicode Sets (v) est défini.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tout ce qui peut correspondre à plus d’un seul caractère n’est pas valide dans une classe de caractères négatif.", + "Are_you_missing_a_semicolon_2734": "Il vous manque un point-virgule ?", + "Argument_expression_expected_1135": "Expression d'argument attendue.", + "Argument_for_0_option_must_be_Colon_1_6046": "L'argument de l'option '{0}' doit être {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "L’argument de l’importation dynamique ne peut pas être un élément de propagation.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "L'argument de type '{0}' n'est pas attribuable au paramètre de type '{1}'.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argument de type '{0}' n'est pas assignable au paramètre de type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Les arguments du paramètre de reste '{0}' n'ont pas été fournis.", + "Array_element_destructuring_pattern_expected_1181": "Modèle de déstructuration d'élément de tableau attendu.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Les tableaux avec des éléments de diffusion ne peuvent pas être déduits avec --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Quand vous utilisez des assertions, chaque nom de la cible d'appel doit être déclaré à l'aide d'une annotation de type explicite.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Quand vous utilisez des assertions, la cible d'appel doit être un identificateur ou un nom qualifié.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L’affectation de propriétés à des fonctions sans les déclarer n’est pas prise en charge avec --isolatedDeclarations. Ajoutez une déclaration explicite pour les propriétés affectées à cette fonction.", + "Asterisk_Slash_expected_1010": "'.' attendu.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Au moins un accesseur doit avoir une annotation de type explicite avec --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Les augmentations de la portée globale ne peuvent être directement imbriquées que dans les modules externes ou les déclarations de modules ambiants.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Les augmentations de la portée globale doivent comporter un modificateur 'declare', sauf si elles apparaissent déjà dans un contexte ambiant.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La détection automatique des typages est activée dans le projet '{0}'. Exécution de la passe de résolution supplémentaire pour le module '{1}' à l'aide de l'emplacement du cache '{2}'.", + "BUILD_OPTIONS_6919": "OPTIONS DE BUILD", + "Backwards_Compatibility_6253": "Rétrocompatibilité", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Les expressions de classe de base ne peuvent pas référencer les paramètres de type de classe.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Le type de retour '{0}' du constructeur de base n'est pas un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Les constructeurs de base doivent tous avoir le même type de retour.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Répertoire de base pour la résolution des noms de modules non absolus.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Les littéraux BigInt ne sont pas disponibles quand la version ciblée est antérieure à ES2020.", + "Binary_digit_expected_1177": "Chiffre binaire attendu.", + "Binding_element_0_implicitly_has_an_1_type_7031": "L'élément de liaison '{0}' possède implicitement un type '{1}'.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable de portée de bloc '{0}' utilisée avant sa déclaration.", + "Build_a_composite_project_in_the_working_directory_6925": "Générer un projet composite dans le répertoire de travail.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Générer tous les projets, même ceux qui semblent être à jour.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Générer un ou plusieurs projets et leurs dépendances (s'ils sont obsolètes)", + "Build_option_0_requires_a_value_of_type_1_5073": "L'option de build '{0}' nécessite une valeur de type {1}.", + "Building_project_0_6358": "Génération du projet '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Les itérateurs intégrés sont instanciés avec un type « TReturn » « undefined » au lieu de « any ».", + "COMMAND_LINE_FLAGS_6921": "INDICATEURS DE LIGNE DE COMMANDE", + "COMMON_COMMANDS_6916": "COMMANDES COURANTES", + "COMMON_COMPILER_OPTIONS_6920": "OPTIONS COURANTES DU COMPILATEUR", + "Call_decorator_expression_90028": "Appeler l'expression de l'élément décoratif", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Les types de retour de signature d'appel '{0}' et '{1}' sont incompatibles.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signature d'appel, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Les signatures d'appel sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.", + "Call_target_does_not_contain_any_signatures_2346": "La cible de l'appel ne contient aucune signature.", + "Can_only_convert_logical_AND_access_chains_95142": "Conversion uniquement de chaînes logiques ET de chaînes d'accès", + "Can_only_convert_named_export_95164": "Peut uniquement convertir l’exportation nommée", + "Can_only_convert_property_with_modifier_95137": "La propriété peut uniquement être convertie avec un modificateur", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Peut uniquement convertir des concaténations de chaînes et des littéraux de chaîne", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Impossible d'accéder à '{0}.{1}', car '{0}' est un type, mais pas un espace de noms. Voulez-vous plutôt récupérer le type de la propriété '{1}' dans '{0}' avec '{0}[\"{1}\"]' ?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Désolé... Nous ne pouvons pas accéder à « {0} » à partir d’un autre fichier sans qualification lorsque « {1} » est activé. Utilisez « {2} » à la place.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Impossible d’accéder aux enums const ambiants quand '{0}' est activé.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Impossible d'assigner un type de constructeur '{0}' à un type de constructeur '{1}'.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Impossible d'attribuer un type de constructeur abstrait à un type de constructeur non abstrait.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une classe.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une constante.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une fonction.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un espace de noms.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une propriété en lecture seule.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un enum.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une importation.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Impossible d'effectuer une assignation à '{0}', car il ne s'agit pas d'une variable.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Impossible d'effectuer une assignation à la méthode privée '{0}'. Les méthodes privées ne sont pas accessibles en écriture.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Impossible d'augmenter le module '{0}', car il se résout en une entité non-module.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Impossible d'augmenter le module '{0}' avec des exportations de valeurs, car il se résout en une entité non-module.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Impossible de compiler des modules à l'aide de l'option '{0}' tant que l'indicateur '--module' n'a pas la valeur 'amd' ou 'system'.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Impossible de créer une instance d'une classe abstraite.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Impossible de déléguer l'itération à la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais le générateur conteneur envoie toujours '{0}'.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Impossible d'exporter '{0}'. Seules les déclarations locales peuvent être exportées à partir d'un module.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Impossible d'étendre une classe '{0}'. Le constructeur de classe est marqué comme étant privé.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Impossible d'étendre une interface '{0}'. Vouliez-vous dire 'implements' ?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Le fichier tsconfig.json est introuvable dans le répertoire actif : {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Le fichier tsconfig.json est introuvable dans le répertoire spécifié : '{0}'.", + "Cannot_find_global_type_0_2318": "Le type global '{0}' est introuvable.", + "Cannot_find_global_value_0_2468": "La valeur globale '{0}' est introuvable.", + "Cannot_find_lib_definition_for_0_2726": "Définition de bibliothèque introuvable pour '{0}'.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Définition de bibliothèque introuvable pour '{0}'. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Le module '{0}' est introuvable. Utilisez '--resolveJsonModule' pour importer le module avec l'extension '.json'.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Le module « {0} » est introuvable. Vouliez-vous définir l’option « moduleResolution » sur la valeur « node » ou ajouter des alias à l’option « paths » ?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Impossible de localiser le module '{0}' ou les déclarations de type correspondantes.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Impossible de trouver les déclarations de module ou de type pour l’importation à effet secondaire de « {0} ».", + "Cannot_find_name_0_2304": "Le nom '{0}' est introuvable.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Le nom '{0}' est introuvable. Est-ce qu'il ne s'agit pas plutôt de '{1}' ?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Le nom '{0}' est introuvable. Voulez-vous utiliser le membre d'instance 'this.{0}' ?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Le nom '{0}' est introuvable. Voulez-vous utiliser le membre statique '{1}.{0}' ?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Le nom « {0} » est introuvable. Voulez-vous écrire ceci dans une fonction asynchrone ?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{1}' ou une version ultérieure.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Le nom '{0}' est introuvable. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' pour inclure 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour Bun ? Essayez `npm i --save-dev @types/bun`, puis ajoutez « bun » au champ types de votre fichier tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour un exécuteur de tests ? Essayez 'npm i --save-dev @types/jest' ou 'npm i --save-dev @types/mocha', puis ajoutez 'jest' ou 'mocha' au champ types de votre fichier tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour jQuery ? Essayez 'npm i --save-dev @types/jquery'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour jQuery ? Essayez 'npm i --save-dev @types/jquery', puis ajoutez 'jquery' au champ types de votre fichier tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour node ? Essayez 'npm i --save-dev @types/node'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Le nom '{0}' est introuvable. Devez-vous installer des définitions de type pour node ? Essayez 'npm i --save-dev @types/node', puis ajoutez 'node' au champ types de votre fichier tsconfig.", + "Cannot_find_namespace_0_2503": "L'espace de noms '{0}' est introuvable.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Impossible de trouver l'espace de noms '{0}'. Vouliez-vous dire '{1}'?", + "Cannot_find_parameter_0_1225": "Paramètre '{0}' introuvable.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Impossible de trouver le chemin d'accès au sous-répertoire commun pour les fichiers d'entrée.", + "Cannot_find_type_definition_file_for_0_2688": "Le fichier de définition de type est introuvable pour '{0}'.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Impossible d'importer les fichiers de déclaration de type. Importez '{0}' à la place de '{1}'.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Impossible d'initialiser la variable de portée externe '{0}' dans la même portée que celle de la déclaration de portée de bloc '{1}'.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Impossible d'appeler un objet qui a éventuellement une valeur 'null'.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Impossible d'appeler un objet qui a éventuellement une valeur 'null' ou 'undefined'.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Impossible d'appeler un objet qui a éventuellement une valeur 'undefined'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la déstructuration de tableau envoie toujours '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la diffusion de tableau envoie toujours '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Impossible d'itérer la valeur, car la méthode 'next' de son itérateur attend le type '{1}', mais la boucle for-of envoie toujours '{0}'.", + "Cannot_move_statements_to_the_selected_file_95183": "Désolé... Nous ne pouvons pas déplacer les instructions vers le fichier sélectionné", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Désolé... Nous ne pouvons pas déplacer vers le fichier. Le fichier sélectionné n’est pas valide", + "Cannot_read_file_0_5083": "Impossible de lire le fichier '{0}'.", + "Cannot_read_file_0_Colon_1_5012": "Impossible de lire le fichier '{0}' : {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Impossible de redéclarer la variable de portée de bloc '{0}'.", + "Cannot_redeclare_exported_variable_0_2323": "Impossible de redéclarer la variable exportée '{0}'.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Impossible de redéclarer l'identificateur '{0}' dans la clause catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Impossible de démarrer un appel de fonction dans une annotation de type.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Impossible d'utiliser JSX, sauf si l'indicateur '--jsx' est fourni.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Désolé... Nous ne pouvons pas utiliser « export import » sur un type ou espace de noms de type uniquement lorsque l’indicateur « {0} » est activé.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Impossible d'utiliser des importations, des exportations ou des augmentations de module quand '--module' a la valeur 'none'.", + "Cannot_use_namespace_0_as_a_type_2709": "Impossible d'utiliser l'espace de noms '{0}' en tant que type.", + "Cannot_use_namespace_0_as_a_value_2708": "Impossible d'utiliser l'espace de noms '{0}' en tant que valeur.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Impossible d'utiliser « this » dans un initialiseur de propriété statique d'une classe décorée.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Impossible d'écrire le fichier '{0}', car il va remplacer le fichier '.tsbuildinfo' généré par le projet référencé '{1}'", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Impossible d'écrire le fichier '{0}', car il serait remplacé par plusieurs fichiers d'entrée.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Impossible d'écrire le fichier '{0}', car cela entraînerait le remplacement du fichier d'entrée.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Une variable de clause catch ne peut pas avoir d'initialiseur.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "L'annotation de type de variable de la clause catch doit être 'any' ou 'unknown' si elle est spécifiée.", + "Change_0_to_1_90014": "Changer '{0}' en '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "Remplacer toutes les interfaces étendues par 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Remplacer tous les types jsdoc-style par TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Remplacer tous les types jsdoc-type par TypeScript (et ajouter '| undefined' aux types nullable)", + "Change_extends_to_implements_90003": "Changer 'extends' en 'implements'", + "Change_spelling_to_0_90022": "Changer l'orthographe en '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Recherchez les propriétés de classe déclarées mais non définies dans le constructeur.", + "Check_side_effect_imports_6806": "Vérifiez les importations d’effet secondaire.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Vérifiez que les arguments des méthodes « bind », « call » et « apply » correspondent à la fonction d’origine.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Vérification en cours pour déterminer si '{0}' est le préfixe correspondant le plus long pour '{1}' - '{2}'.", + "Circular_definition_of_import_alias_0_2303": "Définition circulaire de l'alias d'importation '{0}'.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularité détectée durant la résolution de la configuration : {0}", + "Circularity_originates_in_type_at_this_location_2751": "La circularité est issue du type à cet emplacement.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La classe '{0}' définit l'accesseur de membre d'instance '{1}', mais la classe étendue '{2}' le définit comme fonction de membre d'instance.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La classe '{0}' définit la fonction de membre d'instance '{1}', mais la classe étendue '{2}' la définit comme accesseur de membre d'instance.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La classe '{0}' définit la propriété de membre d'instance '{1}', mais la classe étendue '{2}' le définit comme fonction de membre d'instance.", + "Class_0_incorrectly_extends_base_class_1_2415": "La classe '{0}' étend de manière incorrecte la classe de base '{1}'.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implémente de manière incorrecte la classe '{1}'. Voulez-vous vraiment étendre '{1}' et hériter de ses membres en tant que sous-classe ?", + "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implémente de manière incorrecte l'interface '{1}'.", + "Class_0_used_before_its_declaration_2449": "Classe '{0}' utilisée avant sa déclaration.", + "Class_constructor_may_not_be_a_generator_1368": "Le constructeur de classe ne peut pas être un générateur.", + "Class_constructor_may_not_be_an_accessor_1341": "Le constructeur de la classe ne peut pas être un accesseur.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "La déclaration de classe ne peut pas implémenter la liste de surcharge pour «{0}».", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Les déclarations de classes ne peuvent pas avoir plusieurs balises '@augments' ou '@extends'.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Impossible d'utiliser des éléments décoratifs de classe avec un identificateur privé static. Supprimez l'élément décoratif expérimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Le champ de classe « {0} » défini par la classe parente n’est pas accessible dans la classe enfant via super.", + "Class_name_cannot_be_0_2414": "Le nom de la classe ne peut pas être '{0}'.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Le nom de la classe ne peut pas être « Object » quand ES5 et ses versions ultérieures sont ciblées avec le module {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Le côté statique de la classe '{0}' étend de manière incorrecte le côté statique de la classe de base '{1}'.", + "Classes_can_only_extend_a_single_class_1174": "Les classes ne peuvent étendre qu'une seule classe.", + "Classes_may_not_have_a_field_named_constructor_18006": "Les classes n'ont peut-être pas de champ nommé 'constructor'.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Le code contenu dans une classe est évalué en mode strict JavaScript qui n’autorise pas l’utilisation de « {0} ». Pour plus d’informations, consultez https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Options de ligne de commande", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compilez le projet en fonction du chemin de son fichier config ou d'un dossier contenant 'tsconfig.json'.", + "Compiler_Diagnostics_6251": "Diagnostics du compilateur", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "L’option du compilateur « {0} » ne peut pas recevoir une chaîne vide.", + "Compiler_option_0_expects_an_argument_6044": "L'option de compilateur '{0}' attend an argument.", + "Compiler_option_0_may_not_be_used_with_build_5094": "L’option '--{0}' du compilateur ne peut pas être utilisée avec '--build'.", + "Compiler_option_0_may_only_be_used_with_build_5093": "Option du compilateur '--{0}' ne peut être utilisée qu’avec '--build'.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "L’option de compilateur « {0} » de la valeur «{1}» est instable. Utilisez TypeScript nocturne pour désactiver cette erreur. Essayez de mettre à jour avec « npm install -D typescript@next ».", + "Compiler_option_0_requires_a_value_of_type_1_5024": "L'option de compilateur '{0}' exige une valeur de type {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Le compilateur réserve le nom '{0}' quand il émet un identificateur privé pour une version antérieure.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compile le projet TypeScript situé au chemin d’accès spécifié.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compile le projet actif (tsconfig.json sur le répertoire de travail.)", + "Compiles_the_current_project_with_additional_settings_6929": "Compile le projet actif, avec des paramètres supplémentaires.", + "Completeness_6257": "Exhaustivité", + "Composite_projects_may_not_disable_declaration_emit_6304": "Les projets composites ne doivent pas désactiver l'émission de déclaration.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Les projets composites ne doivent pas désactiver la compilation incrémentielle.", + "Computed_from_the_list_of_input_files_6911": "Calculé à partir de la liste des fichiers d’entrée", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Les propriétés calculées doivent être des littéraux de chaîne ou de nombre, des variables ou des expressions en pointillé avec --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Les noms de propriétés calculées ne sont pas autorisés dans les enums.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Les noms de propriétés calculées sur des littéraux de classe ou d’objet ne peuvent pas être déduits avec --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Les valeurs calculées ne sont pas autorisées dans un enum avec des membres ayant une valeur de chaîne.", + "Concatenate_and_emit_output_to_single_file_6001": "Concaténer la sortie et l'émettre vers un seul fichier.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Conditions à définir en plus des valeurs par défaut spécifiques au résolveur lors de la résolution des importations.", + "Conflicts_are_in_this_file_6201": "Il existe des conflits dans ce fichier.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Envisagez d’ajouter un modificateur « declare » à cette classe.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Les types de retour de signature de construction '{0}' et '{1}' sont incompatibles.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signature de construction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Les signatures de construction sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.", + "Constructor_implementation_is_missing_2390": "L'implémentation de constructeur est manquante.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Le constructeur de la classe '{0}' est privé et uniquement accessible dans la déclaration de classe.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Le constructeur de la classe '{0}' est protégé et uniquement accessible dans la déclaration de classe.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notation de type d'un constructeur doit être placée entre parenthèses quand elle est utilisée dans un type union.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notation de type d'un constructeur doit être placée entre parenthèses quand elle est utilisée dans un type intersection.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Les constructeurs pour les classes dérivées doivent contenir un appel de 'super'.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Fichier conteneur non spécifié et répertoire racine impossible à déterminer. Recherche ignorée dans le dossier 'node_modules'.", + "Containing_function_is_not_an_arrow_function_95128": "La fonction conteneur n'est pas une fonction arrow", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Contrôlez la méthode utilisée pour détecter les fichiers JS au format module.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversion du type '{0}' en type '{1}' est peut-être une erreur, car aucun type ne chevauche suffisamment l'autre. Si cela est intentionnel, convertissez d'abord l'expression en 'unknown'.", + "Convert_0_to_1_in_0_95003": "Convertir '{0}' en '{1} dans {0}'", + "Convert_0_to_mapped_object_type_95055": "Convertir '{0}' en type d'objet mappé", + "Convert_all_const_to_let_95102": "Convertir tous les 'const' en 'let'", + "Convert_all_constructor_functions_to_classes_95045": "Convertir toutes les fonctions de constructeur en classes", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertir tous les caractères non valides en code d'entité HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertir tous les types réexportés en exportations de types uniquement", + "Convert_all_require_to_import_95048": "Convertir tous les 'require' en 'import'", + "Convert_all_to_async_functions_95066": "Tout convertir en fonctions asynchrones", + "Convert_all_to_bigint_numeric_literals_95092": "Tout convertir en littéraux numériques bigint", + "Convert_all_to_default_imports_95035": "Convertir tout en importations par défaut", + "Convert_all_type_literals_to_mapped_type_95021": "Convertir tous les littéraux de type en type mappé", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertissez tous les typedef en types TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Convertir une fonction arrow ou une expression de fonction", + "Convert_const_to_let_95093": "Convertir 'const' en 'let'", + "Convert_default_export_to_named_export_95061": "Convertir l'exportation par défaut en exportation nommée", + "Convert_function_declaration_0_to_arrow_function_95106": "Convertir la déclaration de fonction '{0}' en fonction arrow", + "Convert_function_expression_0_to_arrow_function_95105": "Convertir l'expression de fonction '{0}' en fonction arrow", + "Convert_function_to_an_ES2015_class_95001": "Convertir la fonction en classe ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Convertir un caractère non valide en son code d'entité html", + "Convert_named_export_to_default_export_95062": "Convertir l'exportation nommée en exportation par défaut", + "Convert_named_imports_to_default_import_95170": "Convertir les importations nommées en importation par défaut", + "Convert_named_imports_to_namespace_import_95057": "Convertir les importations nommées en importation d'espace de noms", + "Convert_namespace_import_to_named_imports_95056": "Convertir l'importation d'espace de noms en importations nommées", + "Convert_overload_list_to_single_signature_95118": "Convertir la liste de surcharge en une seule signature", + "Convert_parameters_to_destructured_object_95075": "Convertir les paramètres en objet déstructuré", + "Convert_require_to_import_95047": "Convertir 'require' en 'import'", + "Convert_to_ES_module_95017": "Convertir en module ES", + "Convert_to_a_bigint_numeric_literal_95091": "Convertir en littéral numérique bigint", + "Convert_to_anonymous_function_95123": "Convertir en fonction anonyme", + "Convert_to_arrow_function_95125": "Convertir en fonction arrow", + "Convert_to_async_function_95065": "Convertir en fonction asynchrone", + "Convert_to_default_import_95013": "Convertir en importation par défaut", + "Convert_to_named_function_95124": "Convertir en fonction nommée", + "Convert_to_optional_chain_expression_95139": "Convertir en expression de chaîne facultative", + "Convert_to_template_string_95096": "Convertir en chaîne de modèle", + "Convert_to_type_only_export_1364": "Convertir en exportation de type uniquement", + "Convert_typedef_to_TypeScript_type_95176": "Convertissez typedef en type TypeScript.", + "Corrupted_locale_file_0_6051": "Fichier de paramètres régionaux endommagé : {0}.", + "Could_not_convert_to_anonymous_function_95153": "Impossible de convertir en fonction anonyme", + "Could_not_convert_to_arrow_function_95151": "Impossible de convertir en fonction arrow", + "Could_not_convert_to_named_function_95152": "Impossible de convertir en fonction nommée", + "Could_not_determine_function_return_type_95150": "Impossible de déterminer le type de retour de la fonction", + "Could_not_find_a_containing_arrow_function_95127": "Fonction arrow conteneur introuvable", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Le fichier de déclaration du module '{0}' est introuvable. '{1}' a implicitement un type 'any'.", + "Could_not_find_convertible_access_expression_95140": "L'expression d'accès convertible est introuvable", + "Could_not_find_export_statement_95129": "Instruction export introuvable", + "Could_not_find_import_clause_95131": "Clause import introuvable", + "Could_not_find_matching_access_expressions_95141": "L'expression d'accès correspondante est introuvable", + "Could_not_find_name_0_Did_you_mean_1_2570": "Le nom «{0}» est introuvable. Voulez-vous dire «{1}» ?", + "Could_not_find_namespace_import_or_named_imports_95132": "Impossible de localiser l'importation d'espace de noms ou les importations nommées", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Impossible de localiser la propriété dont l'accesseur doit être généré", + "Could_not_find_variable_to_inline_95185": "Désolé... Nous n’avons pas pu trouver de variable à intégrer.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Impossible de résoudre le chemin '{0}' avec les extensions {1}.", + "Could_not_write_file_0_Colon_1_5033": "Impossible d'écrire le fichier '{0}' : {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Créez des fichiers de mappage source pour les fichiers JavaScript émis.", + "Create_sourcemaps_for_d_ts_files_6614": "Créez des mappage de source pour les fichiers d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crée un tsconfig.json avec les paramètres recommandés dans le répertoire de travail.", + "DIRECTORY_6038": "RÉPERTOIRE", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Les séquences d’échappement décimales et les références arrière ne sont pas autorisées dans une classe de caractères.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Les décimales avec des zéros de début ne sont pas autorisées.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Cette déclaration augmente la déclaration dans un autre fichier. Cette opération ne peut pas être sérialisée.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "L’émission de déclaration pour ce fichier nécessite la conservation de cette importation pour des augmentations. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}' à partir du module '{1}'. Une annotation de type explicite peut débloquer l'émission de déclaration.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "L’émission de déclaration pour ce paramètre nécessite l’ajout implicite de « non défini » à son type. Cette opération n’est pas pris en charge avec --isolatedDeclarations.", + "Declaration_expected_1146": "Déclaration attendue.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Le nom de la déclaration est en conflit avec l'identificateur global intégré '{0}'.", + "Declaration_or_statement_expected_1128": "Déclaration ou instruction attendue.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Une déclaration ou instruction est attendue. Ce '=' suit un bloc d’instructions. Si vous avez l’intention d'écrire une affectation de déstructuration, il est possible que vous deviez mettre l’ensemble de l’affectation entre parenthèses.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Les déclarations avec des assertions d'affectation définies doivent également avoir des annotations de type.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Les déclarations avec des initialiseurs ne peuvent pas avoir également des assertions d'affectation définies.", + "Declare_a_private_field_named_0_90053": "Déclarez un champ privé nommé '{0}'.", + "Declare_method_0_90023": "Déclarer la méthode '{0}'", + "Declare_private_method_0_90038": "Déclarer la méthode privée '{0}'", + "Declare_private_property_0_90035": "Déclarer la propriété privée '{0}'", + "Declare_property_0_90016": "Déclarer la propriété '{0}'", + "Declare_static_method_0_90024": "Déclarer la méthode statique '{0}'", + "Declare_static_property_0_90027": "Déclarer la propriété statique '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Le type de retour de la fonction de décorateur '{0}' n’est pas attribuable au type '{1}'.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Le type de retour de la fonction de décorateur est '{0}' mais doit être 'void' ou 'any'.", + "Decorator_used_before_export_here_1486": "Élément décoratif utilisé ci avant « export ».", + "Decorators_are_not_valid_here_1206": "Les éléments décoratifs ne sont pas valides ici.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Impossible d'appliquer des éléments décoratifs à plusieurs accesseurs get/set du même nom.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Les éléments décoratifs ne peuvent pas apparaître après « export » ou « export default » s’ils apparaissent également avant « export ».", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Les éléments décoratifs doivent précéder le nom et tous les mots clés des déclarations de propriété.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Les variables de clause catch par défaut sont « unknown » au lieu de « any ».", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'exportation par défaut du module a utilisé ou utilise le nom privé '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Les exportations par défaut ne peuvent peut pas être déduites avec --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Les importations par défaut ne sont pas autorisées dans une importation différée.", + "Default_library_1424": "Bibliothèque par défaut", + "Default_library_for_target_0_1425": "Bibliothèque par défaut pour la cible '{0}'", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Les importations différées ne sont prises en charge que lorsque l’indicateur « --module » est défini sur « esnext » ou « preserve ».", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Les définitions des identificateurs suivants sont en conflit avec celles d'un autre fichier : {0}", + "Delete_all_unused_declarations_95024": "Supprimer toutes les déclarations inutilisées", + "Delete_all_unused_imports_95147": "Supprimer toutes les importations inutilisées", + "Delete_all_unused_param_tags_95172": "Supprimer toutes les balises '@param' inutilisées", + "Delete_the_outputs_of_all_projects_6365": "Supprimer les sorties de tous les projets.", + "Delete_unused_param_tag_0_95171": "Supprimer la balise '@param' inutilisée '{0}'", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Déconseillé] Utilisez '--jsxFactory' à la place. Permet de spécifier l'objet appelé pour createElement durant le ciblage de 'react' pour l'émission JSX", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Déconseillé] Utilisez '--outFile' à la place. Permet de concaténer et d'émettre la sortie vers un seul fichier", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Déconseillé] Utilisez '--skipLibCheck' à la place. Permet d'ignorer le contrôle de type des fichiers de déclaration de la bibliothèque par défaut.", + "Deprecated_setting_Use_outFile_instead_6677": "Paramètre déconseillé. Utilisez « outFile » à la place.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Avez-vous oublié d'utiliser 'await' ?", + "Did_you_mean_0_1369": "Est-ce que vous avez voulu utiliser '{0}' ?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Est-ce que vous avez voulu que '{0}' soit contraint en tant que type 'new (...args: any[]) => {1}' ?", + "Did_you_mean_to_call_this_expression_6212": "Est-ce que vous avez voulu appeler cette expression ?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Est-ce que vous avez voulu marquer cette fonction comme étant 'async' ?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Voulez-vous vraiment utiliser le signe ':' ? Le signe '=' peut suivre uniquement un nom de propriété quand le littéral d'objet conteneur fait partie d'un modèle de déstructuration.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Est-ce que vous avez voulu utiliser 'new' avec cette expression ?", + "Digit_expected_1124": "Chiffre attendu", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Le répertoire '{0}' n'existe pas. Toutes les recherches associées sont ignorées.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Le répertoire « {0} » ne comporte pas d'étendue package.json comme contenant. Les importations ne seront pas résolues.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Désactivez l’ajout de directives « use strict » dans les fichiers JavaScript émis.", + "Disable_checking_for_this_file_90018": "Désactiver la vérification de ce fichier", + "Disable_emitting_comments_6688": "Désactivez les commentaires émettant.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Désactivez l’émission de déclarations qui ont « @internal » dans leurs commentaires JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Désactivez l’émission des fichiers à partir d’une compilation.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Désactivez l’émission de fichiers si des erreurs de vérification de type sont signalées.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Désactivez l’effacement des déclarations « const enum » dans le code généré.", + "Disable_error_reporting_for_unreachable_code_6603": "Désactivez le rapport d’erreurs pour le code inaccessible.", + "Disable_error_reporting_for_unused_labels_6604": "Désactivez le rapport d’erreurs pour les étiquettes inutilisées.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Désactivez la vérification complète des types (seules les erreurs critiques d’analyse et d’émission sont signalées).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Désactiver la création de fonctions d'assistance personnalisées comme «__extends» dans la sortie compilée.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Désactivez l’inclusion des fichiers de bibliothèque, y compris la valeur par défaut de lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Désactivez le chargement des projets référencés.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Désactiver la préférence des fichiers sources à la place des fichiers de déclaration lors du référencement des projets composites.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Désactivez le signalement d’erreurs de propriétés excessives lors de la création de littéraux d’objet.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Désactivez la résolution des liens symboliques vers leur chemin d’accès réel. Cela correspond au même indicateur dans le nœud.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Désactivez les limitations de taille sur les projets JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Désactivez la recherche de solutions pour ce projet.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Désactivez la vérification stricte des signatures génériques dans les types de fonction.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Désactiver l’acquisition de type pour les projets JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Désactivez les types tronqués dans les messages d’erreur.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Désactivez l'utilisation des fichiers sources à la place des fichiers de déclaration dans les projets référencés.", + "Disable_wiping_the_console_in_watch_mode_6684": "Désactiver la réinitialisation de la console en mode espion.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Désactive l’inférence pour l’acquisition de type en examinant des noms de fichiers dans un projet.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Interdire à « import », « require » ou « » d’étendre le nombre de fichiers que TypeScript doit ajouter à un projet.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Interdisez les références dont la casse est incohérente dans le même fichier.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "N'ajoutez pas de références avec trois barres obliques, ni de modules importés à la liste des fichiers compilés.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "N’autorisez pas les constructions d’exécution qui ne font pas partie d’ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Ne pas émettre de commentaires dans la sortie.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "N'émettez pas de déclarations pour du code ayant une annotation '@internal'.", + "Do_not_emit_outputs_6010": "N'émettez pas de sorties.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "N'émettez pas de sortie si des erreurs sont signalées.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "N'émettez pas de directives 'use strict' dans une sortie de module.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "N'effacez pas les déclarations d'enum const dans le code généré.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Ne générez pas de fonctions d'assistance personnalisées comme '__extends' dans la sortie compilée.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "N'incluez pas le fichier bibliothèque par défaut (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Ne signalez pas les erreurs pour le code inaccessible.", + "Do_not_report_errors_on_unused_labels_6074": "Ne signalez pas les erreurs pour les étiquettes inutilisées.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Ne pas résoudre le chemin réel des liens symboliques.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Ne transformez ou n’elidez pas les importations ou exportations non marquées en tant que type uniquement, en veillant à ce qu’elles soient écrites dans le format du fichier de sortie en fonction du paramètre « module ».", + "Do_not_truncate_error_messages_6165": "Ne tronquez pas les messages d'erreur.", + "Duplicate_function_implementation_2393": "Implémentation de fonction en double.", + "Duplicate_identifier_0_2300": "Identificateur '{0}' en double.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans l'étendue de plus haut niveau d'un module.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans la portée de plus haut niveau d'un module contenant des fonctions async.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificateur en double «{0}». Le compilateur réserve le nom «{1}» lors de l’émission de références « super » dans les initialiseurs statiques.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificateur '{0}' en double. Le compilateur utilise la déclaration '{1}' pour prendre en charge les fonctions async.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificateur '{0}' dupliqué. Les éléments statiques et les éléments d'instance ne peuvent pas partager le même nom privé.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificateur dupliqué 'arguments'. Le compilateur utilise 'arguments' pour initialiser les paramètres rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Dupliquez l'identificateur '_newTarget'. Le compilateur utilise la déclaration de variable '_newTarget' pour capturer la référence de méta-propriété 'new.target'.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificateur dupliqué '_this'. Le compilateur utilise la déclaration de variable '_this' pour capturer la référence 'this'.", + "Duplicate_index_signature_for_type_0_2374": "Doublon de signature d’index pour le type « {0} ».", + "Duplicate_label_0_1114": "Étiquette '{0}' en double.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Propriété dupliquée '{0}'.", + "Duplicate_regular_expression_flag_1500": "L’indicateur d’expression régulière est dupliqué.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Le spécificateur de l'importation dynamique doit être de type 'string', mais ici il est de type '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Les importations dynamiques sont prises en charge uniquement lorsque l’indicateur « --module » est défini sur « es2020 », « es2022 », « esnext », « commonjs », « amd », « system », « umd », « node16 », « node18 », « node20 » ou « nodenext ».", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Les importations dynamiques peuvent accepter uniquement un spécificateur de module et un ensemble facultatif d’attributs en tant qu’arguments", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Les importations dynamiques prennent uniquement en charge un deuxième argument lorsque l’option « --module » est définie sur « esnext », « node16 », « node18 », « node20 », « nodenext » ou « preserve ».", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Les importations et exportations ECMAScript ne peuvent pas être écrites dans un fichier CommonJS sous 'verbatimModuleSyntax'.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Les importations et exportations ECMAScript ne peuvent pas être écrites dans un fichier CommonJS sous 'verbatimModuleSyntax'. Ajustez le champ 'type' dans le 'package.json' le plus proche pour faire de ce fichier un module ECMAScript, ou ajustez vos paramètres 'verbatimModuleSyntax', 'module' et 'moduleResolution' dans TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "La syntaxe du module ECMAScript n’est pas autorisée dans un module CommonJS quand 'module' est défini sur 'preserve'.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Chaque déclaration de '{0}.{1}' diffère dans sa valeur, où '{2}' était attendu, mais '{3}' a été donné.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Chaque membre du type union '{0}' a des signatures de construction, mais aucune de ces signatures n'est compatible avec les autres.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Chaque membre du type union '{0}' a des signatures, mais aucune de ces signatures n'est compatible avec les autres.", + "Editor_Support_6249": "Prise en charge de l’Éditeur", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'élément a implicitement un type 'any', car l'expression de type '{0}' ne peut pas être utilisée pour indexer le type '{1}'.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'élément possède implicitement un type 'any', car l'expression d'index n'est pas de type 'number'.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index. Est-ce que vous avez voulu appeler '{1}' ?", + "Emit_6246": "Émet", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Émettez des champs de classe conformes à la norme ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Émettez une marque d'ordre d'octet (BOM) UTF-8 au début des fichiers de sortie.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Émettez un seul fichier avec des mappages de sources au lieu d'avoir un fichier distinct.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Émettez un profil processeur V8 de l’exécution du compilateur pour le débogage.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Émettez un code JavaScript supplémentaire pour simplifier la prise en charge de l’importation des modules CommonJS. Cela permet à « allowSyntheticDefaultImports » d’être compatible avec le type.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Émettez des champs de classe avec Define à la place de Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Émettez des métadonnées de type conception pour les déclarations décorées dans les fichiers sources.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Émettez des JavaScript plus conformes, mais plus détaillés et moins performants pour l’itération.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Émettez la source aux côtés des mappages de sources dans un fichier unique. Nécessite la définition de '--inlineSourceMap' ou '--sourceMap'.", + "Enable_all_strict_type_checking_options_6180": "Activez toutes les options de contrôle de type strict.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Activer la couleur et la mise en forme dans la sortie de TypeScript pour faciliter la lecture des erreurs du compilateur.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Activez les contraintes qui autorisent l’utilisation d’un projet TypeScript avec des références de projet.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Activez le rapport d’erreurs pour les chemins de code qui ne sont pas explicitement renvoyés dans une fonction.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Activez le rapport d’erreurs pour les expressions et les déclarations avec un type « any » implicite.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Activez le rapport d’erreurs pour les cas échoués dans les instructions switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Activez le rapport d’erreurs dans les fichiers JavaScript vérifiés par type.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Activez le rapport d’erreurs lorsque les variables locales ne sont pas lues.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Activez le rapport d’erreurs lorsque « this » reçoit le type « any ».", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Activez la prise en charge expérimentale des éléments décoratifs expérimentaux hérités.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Activez l’importation de fichiers avec n’importe quelle extension, à condition qu’un fichier de déclaration soit présent.", + "Enable_importing_json_files_6689": "Activer l’importation des fichiers .json.", + "Enable_lib_replacement_6808": "Activez le remplacement de la bibliothèque.", + "Enable_project_compilation_6302": "Activer la compilation du projet", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Activez des méthodes 'bind', 'call' et 'apply' strictes sur les fonctions.", + "Enable_strict_checking_of_function_types_6186": "Activez la vérification stricte des types de fonction.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Activez la vérification stricte de l'initialisation des propriétés dans les classes.", + "Enable_strict_null_checks_6113": "Activez strict null checks.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Activer l'option 'experimentalDecorators' dans votre fichier config", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Activer l'indicateur '--jsx' dans votre fichier config", + "Enable_tracing_of_the_name_resolution_process_6085": "Activez le traçage du processus de résolution de noms.", + "Enable_verbose_logging_6713": "Activer la journalisation détaillée.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Active l'interopérabilité entre les modules CommonJS et ES via la création d'objets d'espace de noms pour toutes les importations. Implique 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "Active la prise en charge expérimentale des éléments décoratifs ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Active la prise en charge expérimentale pour l'émission des métadonnées de type pour les éléments décoratifs.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Applique l’utilisation d’accesseurs indexés pour les clés déclarées à l’aide d’un type indexé.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Vérifiez que les membres de substitution dans les classes dérivées sont marqués avec un modificateur de remplacement.", + "Ensure_that_casing_is_correct_in_imports_6637": "Assurez-vous que la casse est correcte dans les importations.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Assurez-vous que chaque fichier peut être recompilé en toute sécurité sans s’appuyer sur d’autres importations.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Assurez-vous que « use strict » est toujours émis.", + "Entering_conditional_exports_6413": "Entrée dans des exportations conditionnelles.", + "Entry_point_for_implicit_type_library_0_1420": "Point d'entrée pour la bibliothèque de types implicites '{0}'", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Point d'entrée pour la bibliothèque de types implicites '{0}' ayant le packageId '{1}'", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions et ayant le packageId '{1}'", + "Enum_0_used_before_its_declaration_2450": "Enum '{0}' utilisé avant sa déclaration.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Les déclarations enum ne peuvent fusionner qu'avec des espaces de noms ou d'autres déclarations enum.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Les déclarations d'enum doivent toutes être const ou non const.", + "Enum_member_expected_1132": "Membre enum attendu.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Le membre Enum suivant un membre numérique non littéral doit avoir un initialiseur lorsque « isolatedModules » est activé.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Les initialiseurs de membre enum doivent être calculables sans référence à des symboles externes avec --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "Un membre enum doit posséder un initialiseur.", + "Enum_name_cannot_be_0_2431": "Le nom d'enum ne peut pas être '{0}'.", + "Environment_Settings_6285": "Paramètres d'environnement", + "Errors_Files_6041": "Fichiers d’erreurs", + "Escape_sequence_0_is_not_allowed_1488": "La séquence d’échappement « {0} » n’est pas autorisée.", + "Examples_Colon_0_6026": "Exemples : {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complexité excessive comparant les types « {0} » et « {1} ».", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profondeur excessive de la pile pour la comparaison des types '{0}' et '{1}'.", + "Exiting_conditional_exports_6416": "Sortie des exportations conditionnelles.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Arguments de type {0}-{1} attendus ; indiquez-les avec la balise '@extends'.", + "Expected_0_arguments_but_got_1_2554": "{0} arguments attendus, mais {1} reçus.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} arguments attendus, mais {1} reçus. Avez-vous oublié d'inclure 'void' dans votre argument de type pour 'Promise' ?", + "Expected_0_type_arguments_but_got_1_2558": "{0} arguments de type attendus, mais {1} reçus.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Arguments de type {0} attendus ; indiquez-les avec la balise '@extends'.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 argument attendu, mais 0 obtenu. 'new Promise()' a besoin d’un indicateur JSDoc pour produire un 'resolve' qui peut être appelé sans arguments.", + "Expected_a_Unicode_property_name_1523": "Le nom de propriété Unicode est attendu.", + "Expected_a_Unicode_property_name_or_value_1527": "Une valeur ou un nom de propriété Unicode est attendu.", + "Expected_a_Unicode_property_value_1525": "La valeur de propriété Unicode est attendue.", + "Expected_a_capturing_group_name_1514": "Le nom de groupe de capture est attendu.", + "Expected_a_class_set_operand_1520": "Une opérande de jeu de classes est attendue.", + "Expected_at_least_0_arguments_but_got_1_2555": "Au moins {0} arguments attendus, mais {1} reçus.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Balise de fermeture JSX correspondante attendue pour '{0}'.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Balise de fermeture correspondante attendue pour le fragment JSX.", + "Expected_for_property_initializer_1442": "« = » attendu pour l’initialiseur de propriété.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Le type attendu du champ '{0}' dans 'package.json' est censé être '{1}'. Obtention de '{2}'.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Spécification explicite du genre de résolution de module : '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Impossible d'effectuer l'élévation à une puissance sur des valeurs 'bigint' sauf si l'option 'target' a la valeur 'es2016' ou une valeur qui correspond à une version ultérieure.", + "Export_0_from_module_1_90059": "Exporter '{0}' à partir du module '{1}'", + "Export_all_referenced_locals_90060": "Exporter tous les variables locales référencées", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Vous ne pouvez pas utiliser l'assignation d'exportation pour cibler des modules ECMAScript. Utilisez 'export default' ou un autre format de module à la place.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "L'assignation d'exportation n'est pas prise en charge quand l'indicateur '--module' est 'system'.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La déclaration d'exportation est en conflit avec la déclaration exportée de '{0}'.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Les déclarations d'exportation ne sont pas autorisées dans un espace de noms.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Le spécificateur d’exportation « {0} » n’existe pas dans l’étendue package.json sur le chemin d’accès « {1} ».", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias de type exporté '{0}' possède ou utilise le nom privé '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias de type exporté '{0}' a ou utilise le nom privé '{1}' du module {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module privé '{2}'.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportée '{0}' possède ou utilise le nom privé '{1}'.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Les exportations et les assignations d'exportation ne sont pas autorisées dans les augmentations de module.", + "Expression_expected_1109": "Expression attendue.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L’expression doit être entre parenthèses pour être utilisée comme élément décoratif.", + "Expression_or_comma_expected_1137": "Expression ou virgule attendue.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'expression produit un type de tuple trop grand pour être représenté.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'expression produit un type union trop complexe à représenter.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Expression résolue en '_super' et utilisée par le compilateur pour capturer la référence de classe de base.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'expression génère une déclaration de variable '_newTarget' que le compilateur utilise pour capturer la référence de méta-propriété 'new.target'.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Expression résolue en déclaration de variable '_this' et utilisée par le compilateur pour capturer la référence 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Le type d'expression ne peut pas être déduit avec --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clause Extends ne peut pas contenir d’expression avec --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clause Extends pour le type déduit « {0} » a ou utilise le nom privé « {1} ».", + "Extract_base_class_to_variable_90064": "Extraire la classe de base dans la variable", + "Extract_binding_expressions_to_variable_90066": "Extraire des expressions de liaison dans une variable", + "Extract_constant_95006": "Extraire la constante", + "Extract_default_export_to_variable_90065": "Extraire l’exportation par défaut vers la variable", + "Extract_function_95005": "Extraire la fonction", + "Extract_to_0_in_1_95004": "Extraire vers {0} dans {1}", + "Extract_to_0_in_1_scope_95008": "Extraire vers {0} dans la portée {1}", + "Extract_to_0_in_enclosing_scope_95007": "Extraire vers {0} dans la portée englobante", + "Extract_to_interface_95090": "Extraire vers l'interface", + "Extract_to_type_alias_95078": "Extraire vers l'alias de type", + "Extract_to_typedef_95079": "Extraire vers typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extraire dans la variable et remplacer par '{0} en tant que typeof {0}'", + "Extract_type_95077": "Type d'extraction", + "FILE_6035": "FICHIER", + "FILE_OR_DIRECTORY_6040": "FICHIER OU RÉPERTOIRE", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Échec de la recherche de peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Échec de la résolution sous la condition «{0}».", + "Fallthrough_case_in_switch_7029": "Case avec fallthrough dans une instruction switch.", + "File_0_does_not_exist_6096": "Le fichier '{0}' n'existe pas.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Selon des recherches mises en cache antérieures, le fichier '{0}' n’existe pas.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Selon des recherches mises en cache antérieures, le fichier '{0}' existe.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Le fichier '{0}' existe - utilisez-le comme résultat de résolution de nom.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Le fichier '{0}' a une extension non prise en charge. Les seules extensions prises en charge sont {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Le fichier '{0}' est un fichier JavaScript. Est-ce que vous avez voulu activer l'option 'allowJs' ?", + "File_0_is_not_a_module_2306": "Le fichier '{0}' n'est pas un module.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Le fichier '{0}' ne figure pas dans la liste de fichiers du projet '{1}'. Les projets doivent lister tous les fichiers ou utiliser un modèle 'include'.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Le fichier '{0}' ne se trouve pas sous 'rootDir' '{1}'. 'rootDir' est supposé contenir tous les fichiers sources.", + "File_0_not_found_6053": "Fichier '{0}' introuvable.", + "File_Layout_6284": "Disposition de fichier", + "File_Management_6245": "Gestion de fichiers", + "File_appears_to_be_binary_1490": "Le fichier semble être binaire.", + "File_change_detected_Starting_incremental_compilation_6032": "Modification de fichier détectée. Démarrage de la compilation incrémentielle...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Le fichier est un module CommonJS, car « {0} » n’a pas de champ « type »", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Le fichier est un module CommonJS, car « {0} » a un champ « type » dont la valeur n’est pas « module »", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Le fichier est un module CommonJS, car « package.json » est introuvable", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Le fichier est un module ECMAScript, car « {0} » a un champ « type » avec la valeur « module »", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Le fichier est un module CommonJS ; il peut être converti en module ES.", + "File_is_default_library_for_target_specified_here_1426": "Le fichier représente la bibliothèque par défaut de la cible spécifiée ici.", + "File_is_entry_point_of_type_library_specified_here_1419": "Le fichier représente le point d'entrée de la bibliothèque de types spécifiée ici.", + "File_is_included_via_import_here_1399": "Le fichier est inclus via une importation ici.", + "File_is_included_via_library_reference_here_1406": "Le fichier est inclus via une référence à la bibliothèque ici.", + "File_is_included_via_reference_here_1401": "Le fichier est inclus via une référence ici.", + "File_is_included_via_type_library_reference_here_1404": "Le fichier est inclus via une référence à la bibliothèque de types ici.", + "File_is_library_specified_here_1423": "Le fichier représente la bibliothèque spécifiée ici.", + "File_is_matched_by_files_list_specified_here_1410": "Le fichier correspond à la liste 'files' spécifiée ici.", + "File_is_matched_by_include_pattern_specified_here_1408": "Le fichier correspond au modèle include spécifié ici.", + "File_is_output_from_referenced_project_specified_here_1413": "Le fichier représente la sortie du projet référencé spécifié ici.", + "File_is_output_of_project_reference_source_0_1428": "Le fichier représente la sortie de la source de référence de projet '{0}'", + "File_is_source_from_referenced_project_specified_here_1416": "Le fichier représente la source du projet référencé spécifié ici.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Le nom de fichier '{0}' diffère du nom de fichier '{1}' déjà inclus uniquement par la casse.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Le nom de fichier '{0}' a une extension '{1}' - recherche '{2}' à la place.", + "File_name_0_has_a_1_extension_stripping_it_6132": "Le nom de fichier '{0}' a une extension '{1}'. Suppression de l'extension.", + "File_redirects_to_file_0_1429": "Le fichier est redirigé vers le fichier '{0}'", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La spécification de fichier ne peut pas contenir un répertoire parent ('..') après un caractère générique de répertoire récursif ('**') : '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Une spécification de fichier ne peut pas se terminer par un caractère générique de répertoire récursif ('**') : '{0}'.", + "Filters_results_from_the_include_option_6627": "Filtre les résultats de l’option « inclure ».", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Corriger toutes les fautes d'orthographe détectées", + "Fix_all_expressions_possibly_missing_await_95085": "Corriger toutes les expressions où il manque éventuellement 'await'", + "Fix_all_implicit_this_errors_95107": "Corriger toutes les erreurs implicites liées à 'this'", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corriger tous les types de retour incorrects des fonctions asynchrone", + "Fix_all_with_type_only_imports_95182": "Corriger tout avec des importations de type uniquement", + "For_nodejs_Colon_6287": "Pour nodejs :", + "Found_0_errors_6217": "{0} erreurs trouvées.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} erreurs trouvées. Changements de fichier sous surveillance.", + "Found_0_errors_in_1_files_6261": "Erreurs {0} trouvées dans les fichiers {1} .", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Erreurs {0} trouvées dans le même fichier, à partir de : {1}", + "Found_1_error_6216": "1 erreur trouvée.", + "Found_1_error_Watching_for_file_changes_6193": "1 erreur trouvée. Changements de fichier sous surveillance.", + "Found_1_error_in_0_6259": "1 erreur trouvée dans {0}", + "Found_package_json_at_0_6099": "'package.json' trouvé sur '{0}'.", + "Found_peerDependency_0_with_1_version_6282": "PeerDependency '{0}' trouvé avec '{1}' version.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ».", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les définitions de classe sont automatiquement en mode strict.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Les déclarations de fonction ne sont pas autorisées à l’intérieur des blocs en mode strict lors du ciblage de « ES5 ». Les modules sont automatiquement en mode strict.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'expression de fonction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour '{0}'.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implémentation de fonction est manquante ou ne suit pas immédiatement la déclaration.", + "Function_implementation_name_must_be_0_2389": "Le nom de l'implémentation de fonction doit être '{0}'.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La fonction possède implicitement le type de retour 'any', car elle n'a pas d'annotation de type de retour, et est référencée directement ou indirectement dans l'une de ses expressions de retour.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "La fonction n'a pas d'instruction return de fin, et le type de retour n'inclut pas 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La fonction doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", + "Function_not_implemented_95159": "Fonction non implémentée.", + "Function_overload_must_be_static_2387": "La surcharge de fonction doit être statique.", + "Function_overload_must_not_be_static_2388": "La surcharge de fonction ne doit pas être statique.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type union.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type intersection.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Le type de fonction, qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{0}'.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La fonction avec des corps ne peut fusionner qu’avec des classes qui sont ambiantes.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Générez des fichiers .d.ts à partir de fichiers TypeScript et JavaScript dans votre projet.", + "Generate_get_and_set_accessors_95046": "Générer les accesseurs 'get' et 'set'", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Générer des accesseurs 'get' et 'set' pour toutes les propriétés de remplacement", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Génère un profil de processeur.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Génère un mappage de source pour chaque fichier '.d.ts' correspondant.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Génère une trace d'événement et une liste de types.", + "Generates_corresponding_d_ts_file_6002": "Génère le fichier '.d.ts' correspondant.", + "Generates_corresponding_map_file_6043": "Génère le fichier '.map' correspondant.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Le générateur a implicitement un type de rendement « {0} ». Envisagez de fournir une annotation de type de retour.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Les générateurs ne sont pas autorisés dans un contexte ambiant.", + "Generic_type_0_requires_1_type_argument_s_2314": "Le type générique '{0}' exige {1} argument(s) de type.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Le type générique '{0}' nécessite entre {1} et {2} arguments de type.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Les exportations de modules globaux ne peuvent apparaître qu'au niveau supérieur.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de déclaration.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de module.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Le type global '{0}' doit être un type de classe ou d'interface.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Le type global '{0}' doit avoir {1} paramètre(s) de type.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Les recompilations dans '--incremental' et '--watch' supposent que les changements apportés à un fichier affectent uniquement les fichiers qui dépendent directement de ce fichier.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Les recompilations dans les projets qui utilisent le mode « incrémentiel » et « espion » supposent que les modifications au sein d’un fichier affectent uniquement les fichiers directement en fonction de celui-ci.", + "Hexadecimal_digit_expected_1125": "Chiffre hexadécimal attendu.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Identificateur attendu. '{0}' est un mot réservé au niveau supérieur d'un module.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificateur attendu. '{0}' est un mot réservé en mode strict.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Identificateur attendu. '{0}' est un mot réservé en mode strict. Les définitions de classe sont automatiquement en mode strict.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Identificateur attendu. '{0}' est un mot réservé en mode strict. Les modules sont automatiquement en mode strict.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificateur attendu. '{0}' est un mot réservé qui ne peut pas être utilisé ici.", + "Identifier_expected_1003": "Identificateur attendu.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificateur attendu. '__esModule' est réservé en tant que marqueur exporté durant la transformation des modules ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Identificateur ou littéral de chaîne attendu", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificateur, littéral de chaîne ou littéral de nombre attendu.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si le package '{0}' expose réellement ce module, envoyez une demande de tirage (pull request) pour modifier 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Si le package' {0} 'expose effectivement ce module, essayez d’ajouter un nouveau fichier de déclaration (. d. TS) contenant’declare module' {1} '; '", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignorez le fichier tsconfig trouvé et compilez avec les options et fichiers spécifiés en ligne de commande.", + "Ignore_this_error_message_90019": "Ignorer ce message d'erreur", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignore tsconfig.json, compile les fichiers spécifiés avec les options du compilateur par défaut.", + "Implement_all_inherited_abstract_classes_95040": "Implémenter toutes les classes abstraites héritées", + "Implement_all_unimplemented_interfaces_95032": "Implémenter toutes les interfaces non implémentées", + "Implement_inherited_abstract_class_90007": "Implémenter la classe abstraite héritée", + "Implement_interface_0_90006": "Implémenter l'interface '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clause implements de la classe exportée '{0}' possède ou utilise le nom privé '{1}'.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversion implicite de 'symbol' en 'string' va échouer au moment de l'exécution. Incluez dans un wrapper cette expression en 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L’importation «{0}» est en conflit avec la valeur globale utilisée dans ce fichier. Elle doit donc être déclarée avec une importation de type uniquement lorsque ' isolatedModules ' est activé.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L’importation '{0}' est en conflit avec la valeur locale. Elle doit donc être déclarée avec une importation de type uniquement lorsque 'isolatedModules' est activé.", + "Import_0_from_1_90013": "Importez '{0}' à partir de \"{1}\".", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Les valeurs d’assertion d’importation doivent être des expressions littérales de chaîne.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Les assertions d’importation ne sont pas autorisées sur les instructions qui se compilent en appels CommonJS ' require'.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Les assertions d’importation sont prises en charge uniquement lorsque l’option « --module » est définie sur « esnext », « node18 », « node20 », « nodenext » ou « preserve ».", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Les assertions d’importation ne peuvent pas être utilisées avec les importations ou exportations de type uniquement.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Les assertions d’importation ont été remplacées par des attributs d’importation. Utilisez 'with' à la place de 'assert'.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Vous ne pouvez pas utiliser l'assignation d'importation pour cibler des modules ECMAScript. Utilisez plutôt 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' ou un autre format de module.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Les valeurs d’attribut d’importation doivent être des expressions littérales de chaîne.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Les attributs d’importation ne sont pas autorisés sur les instructions qui se compilent en appels CommonJS ' require'.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Les attributs d’importation sont pris en charge uniquement lorsque l’option « --module » a la valeur « esnext », « node18 », « node20 », « nodenext » ou « preserve ».", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Les attributs d’importation ne peuvent pas être utilisés avec des importations ou des exportations de type uniquement.", + "Import_declaration_0_is_using_private_name_1_4000": "La déclaration d'importation '{0}' utilise le nom privé '{1}'.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La déclaration d'importation est en conflit avec la déclaration locale de '{0}'.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Les déclarations d'importation dans un espace de noms ne peuvent pas référencer un module.", + "Import_emit_helpers_from_tslib_6139": "Importer l'assistance à l'émission à partir de 'tslib'.", + "Import_may_be_converted_to_a_default_import_80003": "L'importation peut être convertie en importation par défaut.", + "Import_name_cannot_be_0_2438": "Le nom d'importation ne peut pas être '{0}'.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Une déclaration d'importation ou d'exportation dans une déclaration de module ambiant ne peut référencer un module au moyen d'un nom de module relatif.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Le spécificateur d’importation « {0} » n’existe pas dans l’étendue package.json sur le chemin d’accès « {1} ».", + "Imported_via_0_from_file_1_1393": "Importé(e) via {0} à partir du fichier '{1}'", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importé(e) via {0} à partir du fichier '{1}' pour importer 'importHelpers' comme indiqué dans compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importé(e) via {0} à partir du fichier '{1}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer 'importHelpers' comme indiqué dans compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "L'importation d'un fichier JSON dans un module ECMAScript nécessite un attribut d'importation « type : « json » » lorsque « module » est défini sur « {0} ».", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Les importations ne sont pas autorisées dans les augmentations de module. Déplacez-les vers le module externe englobant.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Dans les déclarations d'enums ambiants, l'initialiseur de membre doit être une expression constante.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Dans un enum avec plusieurs déclarations, seule une déclaration peut omettre un initialiseur pour son premier élément d'enum.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluez une liste de fichiers. Cela ne prend pas en charge les modèles Glob, par opposition à « inclure ».", + "Include_modules_imported_with_json_extension_6197": "Inclure les modules importés avec l'extension '.json'", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluez le code source dans les images sources à l’intérieur du Code JavaScript émis.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluez les fichiers sourcemap à l’intérieur du Code JavaScript émis.", + "Includes_imports_of_types_referenced_by_0_90054": "Inclut les importations de types référencés par « {0} »", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "En incluant --watch, -w commence à regarder le projet actuel pour les modifications apportées au fichier. Une fois défini, vous pouvez configurer le mode espion avec :", + "Incomplete_quantifier_Digit_expected_1505": "Quantificateur incomplet. Chiffre attendu.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "La signature d’index pour le type « {0} » est manquante dans le type « {1} ».", + "Index_signature_in_type_0_only_permits_reading_2542": "La signature d'index du type '{0}' autorise uniquement la lecture.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Les déclarations individuelles de la déclaration fusionnée '{0}' doivent toutes être exportées ou locales.", + "Infer_all_types_from_usage_95023": "Déduire tous les types de l'utilisation", + "Infer_function_return_type_95148": "Déduire le type de retour de la fonction", + "Infer_parameter_types_from_usage_95012": "Déduire les types des paramètres à partir de l'utilisation", + "Infer_this_type_of_0_from_usage_95080": "Déduire le type 'this' de '{0}' à partir de l'utilisation", + "Infer_type_of_0_from_usage_95011": "Déduire le type de '{0}' à partir de l'utilisation", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L’inférence des expressions de classe n’est pas prise en charge avec --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Initialiser la propriété '{0}' dans le constructeur", + "Initialize_static_property_0_90021": "Initialiser la propriété statique '{0}'", + "Initializer_for_property_0_2811": "Initialiseur de la propriété '{0}'", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'initialiseur de la variable membre d'instance '{0}' ne peut pas référencer l'identificateur '{1}' déclaré dans le constructeur.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Les initialiseurs ne sont pas autorisés dans les contextes ambiants.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Initialise un projet TypeScript et crée un fichier tsconfig.json.", + "Inline_variable_95184": "Variable inline", + "Insert_command_line_options_and_files_from_a_file_6030": "Insérer les options de ligne de commande et les fichiers à partir d'un fichier texte.", + "Install_0_95014": "Installer '{0}'", + "Install_all_missing_types_packages_95033": "Installer tous les packages de types manquants", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interface '{0}' ne peut pas étendre simultanément les types '{1}' et '{2}'.", + "Interface_0_incorrectly_extends_interface_1_2430": "L'interface '{0}' étend de manière incorrecte l'interface '{1}'.", + "Interface_declaration_cannot_have_implements_clause_1176": "Une déclaration d'interface ne peut pas avoir de clause 'implements'.", + "Interface_must_be_given_a_name_1438": "Un nom doit être attribué à l’interface.", + "Interface_name_cannot_be_0_2427": "Le nom de l'interface ne peut pas être '{0}'.", + "Interop_Constraints_6252": "Contraintes d’interopérabilité", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpréter les types de propriétés facultatifs comme écrits, plutôt que d’ajouter « undefined ».", + "Invalid_character_1127": "Caractère non valide.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Le spécificateur d’importation non valide « {0} » n’a aucune résolution possible.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nom de module non valide dans l'augmentation. Le module '{0}' est résolu en module non typé à l'emplacement '{1}', ce qui empêche toute augmentation.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nom de module non valide dans l'augmentation. Le module '{0}' est introuvable.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Chaîne facultative non valide à partir de la nouvelle expression. Voulez-vous appeler '{0}()' ?", + "Invalid_reference_directive_syntax_1084": "Syntaxe de directive 'reference' non valide.", + "Invalid_syntax_in_decorator_1498": "Syntaxe non valide dans l’élément décoratif.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Utilisation non valide de « {0} ». Il ne peut pas être utilisé à l’intérieur d’un bloc statique de classe.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Utilisation non valide de '{0}'. Les modules sont automatiquement en mode strict.", + "Invalid_use_of_0_in_strict_mode_1100": "Utilisation non valide de '{0}' en mode strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valeur non valide pour '--ignoreDeprecations'.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valeur non valide pour 'jsxFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valeur non valide pour 'jsxFragmentFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valeur non valide pour '--reactNamespace'. '{0}' n'est pas un identificateur valide.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Il manque probablement une virgule pour séparer ces deux expressions de modèle. Elles forment une expression de modèle étiquetée qui ne peut pas être appelée.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Son type d'élément '{0}' n'est pas un élément JSX valide.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Son type d'instance '{0}' n'est pas un élément JSX valide.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Son type de retour '{0}' n'est pas un élément JSX valide.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Son type '{0}' n’est pas un type d’élément JSX valide.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "La balise JSDoc '@{0} {1}' ne correspond pas à la clause 'extends {2}'.", + "JSDoc_0_is_not_attached_to_a_class_8022": "La balise JSDoc '@{0}' n'est pas attachée à une classe.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' peut apparaître uniquement dans le dernier paramètre d'une signature.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "La balise JSDoc '@param' se nomme '{0}', mais il n'existe aucun paramètre portant ce nom. Elle doit correspondre à 'arguments', si elle est de type tableau.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Le typedef JSDoc peut être converti en type TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "La balise JSDoc '@typedef' doit avoir une annotation de type ou être suivie des balises '@property' ou '@member'.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Les typedefs JSDoc peuvent être convertis en types TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Les types JSDoc peuvent uniquement être utilisés dans les commentaires de la documentation.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Les types JSDoc peuvent être déplacés vers les types TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Les attributs JSX doivent uniquement être attribués à une 'expression' non vide.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "L'élément JSX '{0}' n'a pas de balise de fermeture correspondante.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La classe de l'élément JSX ne prend pas en charge les attributs, car elle n'a pas de propriété '{0}'.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "L'élément JSX a implicitement le type 'any', car il n'existe aucune interface 'JSX.{0}'.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "L'élément JSX a implicitement le type 'any', car le type global 'JSX.Element' n'existe pas.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Le type '{0}' de l'élément JSX n'a pas de signatures de construction ou d'appel.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Les éléments JSX ne peuvent pas avoir plusieurs attributs du même nom.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Les expressions JSX ne peuvent pas utiliser l'opérateur virgule. Est-ce que vous avez voulu écrire un tableau ?", + "JSX_expressions_must_have_one_parent_element_2657": "Les expressions JSX doivent avoir un élément parent.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Le fragment JSX n'a pas de balise de fermeture correspondante.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Les expressions d'accès aux propriétés JSX ne peuvent pas inclure de noms d'espaces de noms JSX", + "JSX_spread_child_must_be_an_array_type_2609": "L'enfant spread JSX doit être un type de tableau.", + "JavaScript_Support_6247": "Prise en charge de JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "La cible du saut ne peut pas traverser une limite de fonction.", + "KIND_6034": "GENRE", + "Keywords_cannot_contain_escape_characters_1260": "Les mots clés ne peuvent pas contenir de caractères d'échappement.", + "LOCATION_6037": "EMPLACEMENT", + "Language_and_Environment_6254": "Langage et Environnement", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Le côté gauche de l'opérateur virgule n'est pas utilisé, et n'a aucun effet secondaire.", + "Library_0_specified_in_compilerOptions_1422": "Bibliothèque '{0}' spécifiée dans compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Bibliothèque référencée via '{0}' à partir du fichier '{1}'", + "Line_break_not_permitted_here_1142": "Saut de ligne non autorisé ici.", + "Line_terminator_not_permitted_before_arrow_1200": "Marque de fin de ligne non autorisée devant une flèche.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Liste des suffixes de nom de fichier à rechercher lors de la résolution d’un module.", + "List_of_folders_to_include_type_definitions_from_6161": "Liste des dossiers à partir desquels inclure les définitions de type.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Liste des dossiers racines dont le contenu combiné représente la structure du projet au moment de l'exécution.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Chargement de '{0}' à partir du répertoire racine '{1}', emplacement candidat '{2}'.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Chargement du module «{0}» à partir du dossier « node_modules », types de fichiers cibles : {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Chargement du module en tant que fichier/dossier, emplacement du module candidat '{0}', types de fichiers cibles : {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Chemins d’accès de journal utilisés pendant le processus « moduleResolution ».", + "Longest_matching_prefix_for_0_is_1_6108": "Le préfixe correspondant le plus long pour '{0}' est '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Recherche dans le dossier 'node_modules', emplacement initial '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Faire de tous les appels 'super()' la première instruction dans leur constructeur", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Faites en sorte que keyof retourne uniquement des chaînes au lieu de chaînes, de nombres ou de symboles. Option héritée.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Faire de l'appel à 'super()' la première instruction du constructeur", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Le type d'objet mappé a implicitement un type de modèle 'any'.", + "Mark_array_literal_as_const_90070": "Marquer le littéral du tableau comme const", + "Matched_0_condition_1_6403": "Condition '{0}' correspondant à '{1}'.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Mise en correspondance par défaut du modèle include '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Correspond au modèle include '{0}' dans '{1}'", + "Member_0_implicitly_has_an_1_type_7008": "Le membre '{0}' possède implicitement un type '{1}'.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Le membre '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "Merge_conflict_marker_encountered_1185": "Marqueur de conflit de fusion rencontré.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La déclaration fusionnée '{0}' ne peut pas inclure de déclaration d'exportation par défaut. Ajoutez plutôt une déclaration 'export default {0}' distincte.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La méta-propriété '{0}' n'est autorisée que dans le corps d'une déclaration de fonction, d'une expression de fonction ou d'un constructeur.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "La méthode '{0}' ne peut pas avoir d'implémentation, car elle est marquée comme étant abstraite.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom privé '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "La méthode doit avoir une annotation de type de retour explicite avec --isolatedDeclarations.", + "Method_not_implemented_95158": "Méthode non implémentée.", + "Modifiers_cannot_appear_here_1184": "Les modificateurs ne peuvent pas apparaître ici.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Le module '{0}' peut uniquement être importé par défaut à l'aide de l'indicateur '{1}'", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Le module '{0}' ne peut pas être importé à l'aide de cette construction. Le spécificateur se résout uniquement en un module ES, qui ne peut pas être importé avec 'require'. Utilisez plutôt une importation ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Le module '{0}' déclare '{1}' localement, mais il est exporté en tant que '{2}'.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Le module '{0}' déclare '{1}' localement, mais il n'est pas exporté.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Le module '{0}' ne fait pas référence à un type, mais il est utilisé ici en tant que type. Est-ce que vous avez voulu utiliser 'typeof import('{0}')' ?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Le module '{0}' ne fait pas référence à une valeur, mais est utilisé en tant que valeur ici.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Le module {0} a déjà exporté un membre nommé '{1}'. Effectuez une réexportation explicite pour lever l'ambiguïté.", + "Module_0_has_no_default_export_1192": "Le module '{0}' n'a pas d'exportation par défaut.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Le module '{0}' n'a aucune exportation par défaut. Est-ce que vous avez voulu utiliser 'import { {1} } from {0}' à la place ?", + "Module_0_has_no_exported_member_1_2305": "Le module '{0}' n'a aucun membre exporté '{1}'.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Le module '{0}' n'a aucun membre exporté '{1}'. Est-ce que vous avez voulu utiliser 'import {1} from {0}' à la place ?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Le module '{0}' est masqué par une déclaration locale portant le même nom.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Le module '{0}' utilise 'export =' et ne peut pas être utilisé avec 'export *'.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Le module '{0}' a été résolu en tant que module ambiant déclaré localement dans le fichier '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Le module «{0}» a été résolu en «{1}», mais « --allowArbitraryExtensions » n’est pas défini.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Le module '{0}' a été résolu en '{1}' mais '--jsx' n'est pas défini.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Le module '{0}' a été résolu en '{1}' mais '--resolveJsonModule' n'est pas utilisé.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Les noms de déclaration de module ne peuvent utiliser que des chaînes entre guillemets.", + "Module_name_0_matched_pattern_1_6092": "Nom de module '{0}', modèle correspondant '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== Le nom de module '{0}' n'a pas été résolu. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Le nom de module '{0}' a été correctement résolu en '{1}'. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Le nom de module '{0}' a été correctement résolu en '{1}' avec l'ID de package '{2}'. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Le genre de résolution de module n'est pas spécifié. Utilisation de '{0}'.", + "Module_resolution_using_rootDirs_has_failed_6111": "Échec de la résolution de module à l'aide de 'rootDirs'.", + "Modules_6244": "Modules", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Déplacer les modificateurs d'élément de tuple étiqueté vers les étiquettes", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Déplacez l’expression dans l’exportation par défaut vers une variable et ajoutez-y une annotation de type.", + "Move_to_a_new_file_95049": "Déplacer vers un nouveau fichier", + "Move_to_file_95178": "Déplacer vers le fichier", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Les séparateurs numériques consécutifs multiples ne sont pas autorisés.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Les implémentations de plusieurs constructeurs ne sont pas autorisées.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NOUVELLE LIGNE", + "Name_is_not_valid_95136": "Le nom n'est pas valide", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Les groupes de capture nommés sont disponibles uniquement lorsque vous ciblez « ES2018 » ou une version ultérieure.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Les groupes de capture nommés portant le même nom doivent s’excluent mutuellement les uns des autres.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Les importations nommées ne sont pas autorisées dans une importation différée.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Les importations nommées d'un fichier JSON dans un module ECMAScript ne sont pas autorisées lorsque « module » est défini sur '{0}'.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propriété nommée '{0}' des types '{1}' et '{2}' n'est pas identique.", + "Namespace_0_has_no_exported_member_1_2694": "L'espace de noms '{0}' n'a aucun membre exporté '{1}'.", + "Namespace_must_be_given_a_name_1437": "Un nom doit être attribué à l’espace de noms.", + "Namespace_name_cannot_be_0_2819": "L’espace de noms ne peut pas être «{0}».", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Les espaces de noms ne sont pas autorisés dans les fichiers de script globaux lorsque «{0}» est activé. Si ce fichier n’est pas destiné à être un script global, définissez 'moduleDetection' sur 'force' ou ajoutez une instruction 'export {}' vide.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Ni les décorateurs ni les modificateurs ne peuvent être appliqués aux paramètres « this ».", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Aucun constructeur de base n'a le nombre spécifié d'arguments de type.", + "No_constituent_of_type_0_is_callable_2755": "Aucun constituant de type '{0}' ne peut être appelé.", + "No_constituent_of_type_0_is_constructable_2759": "Aucun constituant de type '{0}' ne peut être construit.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Aucune signature d'index avec un paramètre de type '{0}' n'a été localisée sur le type '{1}'.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Aucune entrée dans le fichier config '{0}'. Les chemins 'include' spécifiés étaient '{1}' et les chemins 'exclude' étaient '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Plus prise en charge. Dans les premières versions, définissez manuellement l’encodage de texte pour la lecture des fichiers.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Aucune surcharge n'attend {0} arguments, mais il existe des surcharges qui attendent {1} ou {2} arguments.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Aucune surcharge n'attend {0} arguments de type, mais il existe des surcharges qui attendent {1} ou {2} arguments de type.", + "No_overload_matches_this_call_2769": "Aucune surcharge ne correspond à cet appel.", + "No_type_could_be_extracted_from_this_type_node_95134": "Aucun type n'a pu être extrait de ce nœud de type", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Il n'existe aucune valeur dans l'étendue de la propriété raccourcie '{0}'. Vous devez en déclarez une, ou fournir un initialiseur.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non abstraite « {0} » n'implémente pas le membre abstrait « {1} » hérité de la classe « {2} ».", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Les implémentations de la classe non abstraite '{0}' sont manquantes pour les membres suivants de '{1}' : {2} et {3} plus encore.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'expression de classe non abstraite '{0}' n'implémente pas le membre abstrait hérité '{0}' de la classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Les implémentations de l’expression de classe non abstraite sont manquantes pour les membres suivants de '{0}' : {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Il manque des implémentations d’expression de classe non abstraite pour les membres suivants de '{0}' : {1} et {2} plus.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Les assertions non null peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Paramètre non simple déclaré ici.", + "Not_all_code_paths_return_a_value_7030": "Les chemins du code ne retournent pas tous une valeur.", + "Not_all_constituents_of_type_0_are_callable_2756": "Tous les constituants de type '{0}' ne peuvent pas être appelés.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Tous les constituants de type '{0}' ne peuvent pas être construits.", + "Numbers_out_of_order_in_quantifier_1506": "Nombres incommandants dans le quantificateur.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Les littéraux numériques ayant des valeurs absolues égales ou supérieures à 2^53 sont trop grands pour être représentés avec précision sous forme d'entiers.", + "Numeric_separators_are_not_allowed_here_6188": "Les séparateurs numériques ne sont pas autorisés ici.", + "Object_is_of_type_unknown_2571": "L'objet est de type 'unknown'.", + "Object_is_possibly_null_2531": "L'objet a peut-être la valeur 'null'.", + "Object_is_possibly_null_or_undefined_2533": "L'objet a peut-être la valeur 'null' ou 'undefined'.", + "Object_is_possibly_undefined_2532": "L'objet a peut-être la valeur 'undefined'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Un littéral d'objet peut uniquement spécifier des propriétés connues, et '{0}' n'existe pas dans le type '{1}'.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Un littéral d'objet peut uniquement spécifier des propriétés connues, mais '{0}' n'existe pas dans le type '{1}'. Est-ce que vous avez voulu écrire '{2}' ?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La propriété '{0}' du littéral d'objet possède implicitement un type '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Les objets qui contiennent des propriétés raccourcies ne peuvent pas être déduits avec --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Les objets qui contiennent des affectations de propagation ne peuvent pas être déduits avec --isolatedDeclarations.", + "Octal_digit_expected_1178": "Chiffre octal attendu.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Les séquences d’échappement octales et les références arrière ne sont pas autorisées dans une classe de caractères. S’il s’agissait d’une séquence d’échappement, utilisez la syntaxe '{0}' à la place.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Les séquences d’échappement octales ne sont pas autorisées. Utilisez la syntaxe '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Les littéraux octaux ne sont pas autorisés. Utilisez la syntaxe '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Une valeur de '{0}.{1}' est la chaîne '{2}', et l’autre est supposé être une valeur numérique inconnue.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "Une seule déclaration de variable est autorisée dans une instruction 'for...in'.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "Seule une déclaration de variable unique est autorisée dans une instruction 'for...of'.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Seule une fonction void peut être appelée avec le mot clé 'new'.", + "Only_ambient_modules_can_use_quoted_names_1035": "Seuls les modules ambiants peuvent utiliser des noms entre guillemets.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Seuls les modules 'amd' et 'system' sont pris en charge avec --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Seuls les tableaux const peuvent être déduits avec --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Émettez uniquement les fichiers de déclaration '.d.ts'.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Sortie uniquement des fichiers d.ts et non des fichiers JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Seules les méthodes publiques et protégées de la classe de base sont accessibles par le biais du mot clé 'super'.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Impossible d'appliquer l'opérateur '{0}' au type '{1}'.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Impossible d'appliquer l'opérateur '{0}' aux types '{1}' et '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Les opérateurs ne doivent pas être mixtes dans une classe de caractères. Encapsulez-le dans une classe imbriqué à la place.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Choisir un projet en dehors de la vérification des références multiprojets lors de l’édition.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L’option '{0}={1}' a été supprimée. Supprimez-le de votre configuration.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L’option '{0}={1}' est déconseillée et cessera de fonctionner dans TypeScript {2}. Spécifiez compilerOption « ignoreDeprecations » : «{3}« » pour désactiver cette erreur.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'false' ou 'null' sur la ligne de commande.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'null' sur la ligne de commande.", + "Option_0_can_only_be_specified_on_command_line_6266": "L’option '{0}' ne peut être spécifiée que sur la ligne de commande.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'option '{0}' peut être utilisée uniquement quand l'option '--inlineSourceMap' ou l'option '--sourceMap' est spécifiée.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L’option '{0}' ne peut être utilisée que lorsque 'moduleResolution' a la valeur 'node16', 'nodenext' ou 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "L’option « {0} » ne peut être utilisée que lorsque « module » a la valeur « preserve », « commonjs » ou « es2015 » ou une version ultérieure.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Impossible de spécifier l'option '{0}' quand l'option 'jsx' a la valeur '{1}'.", + "Option_0_cannot_be_specified_with_option_1_5053": "Impossible de spécifier l'option '{0}' avec l'option '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Impossible de spécifier l'option '{0}' sans spécifier l'option '{1}' ou l'option '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L’option «{0}» a été supprimée. Supprimez-le de votre configuration.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L’option '{0}' est déconseillée et cessera de fonctionner dans TypeScript {1}. Spécifiez compilerOption « ignoreDeprecations » : «{2}« » pour désactiver cette erreur.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L’option '{0}' est redondante et ne peut pas être spécifiée avec l’option '{1}'.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "L’option 'allowImportingTsExtensions' ne peut être utilisée que lorsque l’une des options 'noEmit', 'emitDeclarationOnly' ou 'rewriteRelativeImportExtensions' est définie.", + "Option_build_must_be_the_first_command_line_argument_6369": "L'option '--build' doit être le premier argument de ligne de commande.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'option 'isolatedModules' peut être utilisée seulement quand l'option '--module' est spécifiée, ou quand l'option 'target' a la valeur 'ES2015' ou une version supérieure.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L’option 'moduleResolution' doit avoir la valeur '{0}' (ou laisser non spécifiée) lorsque l’option 'module' a la valeur '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L’option 'module' doit être définie sur '{0}' quand l’option 'moduleResolution' a la valeur '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "L’option 'preserveConstEnums' ne peut pas être désactivée quand '{0}' est activé.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Impossible d'associer l'option 'project' à des fichiers sources sur une ligne de commande.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Impossible de spécifier l’option '--resolveJsonModule' quand 'moduleResolution' a la valeur 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Impossible de spécifier l’option '--resolveJsonModule' quand 'module' a la valeur 'none', 'system' ou 'umd'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "L’option 'verbatimModuleSyntax' ne peut pas être utilisée quand 'module' a la valeur 'UMD', 'AMD' ou 'System'.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Impossible de combiner les options '{0}' et '{1}'.", + "Options_Colon_6027": "Options :", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Autres sorties", + "Output_Formatting_6256": "Mise en forme de sortie", + "Output_compiler_performance_information_after_building_6615": "Informations de performances du compilateur de sortie après la génération.", + "Output_directory_for_generated_declaration_files_6166": "Répertoire de sortie pour les fichiers de déclaration générés.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Le fichier de sortie '{0}' n'a pas été créé à partir du fichier source '{1}'.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Sortie du projet référencé '{0}' incluse, car '{1}' est spécifié", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Sortie du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Affichez des informations plus détaillées sur les performances du compilateur après la génération.", + "Overload_0_of_1_2_gave_the_following_error_2772": "La surcharge {0} sur {1}, '{2}', a généré l'erreur suivante.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Les signatures de surcharge doivent toutes être abstraites ou non abstraites.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Les signatures de surcharge doivent toutes être ambiantes ou non ambiantes.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Les signatures de surcharge doivent toutes être exportées ou non exportées.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Les signatures de surcharge doivent toutes être facultatives ou requises.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Les signatures de surcharge doivent toutes être publiques, privées ou protégées.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Le paramètre '{0}' ne peut pas référencer l'identificateur '{1}' déclaré après lui.", + "Parameter_0_cannot_reference_itself_2372": "Le paramètre '{0}' ne peut pas se référencer lui-même.", + "Parameter_0_implicitly_has_an_1_type_7006": "Le paramètre '{0}' possède implicitement un type '{1}'.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Le paramètre '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Le paramètre '{0}' n'est pas à la même position que le paramètre '{1}'.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom '{1}' du module externe '{2}' mais ne peut pas être nommé.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Le paramètre '{0}' de l'accesseur comporte ou utilise le nom privé '{1}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Le paramètre '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Le paramètre '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Le paramètre '{0}' du constructeur de la classe exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Le paramètre '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Le paramètre '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Le paramètre '{0}' de la fonction exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Le paramètre '{0}' de la signature d'index de l'interface exportée a ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Le paramètre '{0}' de la signature d'index de l'interface exportée a ou utilise le nom privé '{1}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Le paramètre '{0}' de la méthode de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Le paramètre '{0}' de la méthode de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Le paramètre '{0}' de la méthode publique de la classe exportée possède ou utilise le nom privé '{1}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Le paramètre '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{1}'.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Un paramètre ne peut pas contenir de point d'interrogation et d'initialiseur.", + "Parameter_declaration_expected_1138": "Déclaration de paramètre attendue.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Le paramètre a un nom mais aucun type. Est-ce que vous avez voulu utiliser '{0} : {1}' ?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Les modificateurs de paramètres peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Le paramètre doit avoir une annotation de type explicite avec --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analyser en mode strict et émettre \"use strict\" pour chaque fichier source.", + "Part_of_files_list_in_tsconfig_json_1409": "Partie de la liste 'files' dans tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Le modèle '{0}' ne peut avoir qu'un seul caractère '*' au maximum.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Les minutages de performances pour '--diagnostics' ou '--extendedDiagnostics' ne sont pas disponibles dans cette session. Une implémentation native de l'API de performances web est introuvable.", + "Platform_specific_6912": "Spécifique à la plateforme", + "Prefix_0_with_an_underscore_90025": "Faire précéder '{0}' d'un trait de soulignement", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Faire commencer toutes les déclarations de propriété incorrectes par 'declare'", + "Prefix_all_unused_declarations_with_where_possible_95025": "Préfixer toutes les déclarations inutilisées avec '_' si possible", + "Prefix_with_declare_95094": "Faire commencer par 'declare'", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conservez les valeurs importées inutilisées dans la sortie JavaScript qui seraient normalement supprimées.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimez tous les fichiers lus pendant la compilation.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Fichiers d’impression lus pendant la compilation, notamment la raison de l’inclusion.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Affiche les noms des fichiers et la raison pour laquelle ils font partie de la compilation.", + "Print_names_of_files_part_of_the_compilation_6155": "Imprimez les noms des fichiers faisant partie de la compilation.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Affichez les noms des fichiers qui font partie de la compilation, puis arrêtez le traitement.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimez les noms des fichiers générés faisant partie de la compilation.", + "Print_the_compiler_s_version_6019": "Affichez la version du compilateur.", + "Print_the_final_configuration_instead_of_building_1350": "Affichez la configuration finale au lieu d'effectuer la génération.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimez les noms des fichiers émis après une compilation.", + "Print_this_message_6017": "Imprimez ce message.", + "Private_accessor_was_defined_without_a_getter_2806": "L'accesseur privé a été défini sans getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Le champ privé '{0}' doit être déclaré dans une classe englobante.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Les identificateurs privés ne sont pas autorisés dans les déclarations de variable.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Les identificateurs privés ne sont pas autorisés en dehors des corps de classe.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Les identificateurs privés ne sont autorisés que dans les corps de classe et ne peuvent être utilisés que dans le cadre d’une déclaration de membre de classe, d’accès à une propriété ou de la partie gauche d’une expression ’in'", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Les identificateurs privés sont disponibles uniquement durant le ciblage d'ECMAScript 2015 et version ultérieure.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Les identificateurs privés ne peuvent pas être utilisés en tant que paramètres.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Le membre privé ou protégé '{0}' n'est pas accessible sur un paramètre de type.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Impossible de générer le projet '{0}' car sa dépendance '{1}' comporte des erreurs", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Impossible de générer le projet '{0}', car sa dépendance '{1}' n'a pas été générée", + "Project_0_is_being_forcibly_rebuilt_6388": "Le projet « {0} » est en cours de régénération forcée", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le fichier «{2}» était un fichier racine de compilation, mais pas plus.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Le projet «{0}» est obsolète, car le fichier buildinfo «{1}» indique que le programme doit signaler des erreurs.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Le projet « {0} » est obsolète, car le fichier buildinfo « {1} » indique que certaines modifications n’ont pas été émises", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Le projet '{0}' est obsolète, car le fichier buildinfo '{1}' indique qu’il y a un changement dans compilerOptions", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Le projet '{0}' est obsolète car la sortie (« {1} ») est antérieure à l'entrée « {2} »", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Le projet '{0}' est obsolète car le fichier de sortie '{1}' n'existe pas", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Le projet '{0}' est obsolète, car sa sortie a été générée avec la version '{1}', qui diffère de la version actuelle '{2}'", + "Project_0_is_up_to_date_6361": "Le projet '{0}' est à jour", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Le projet « {0} » est à jour car l'entrée la plus récente (« {1} ») est antérieure à la sortie (« {2} »)", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Project « {0} » est à jour, mais doit mettre à jour les horodatages des fichiers de sortie plus anciens que les fichiers d’entrée", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Le projet '{0}' est à jour avec les fichiers .d.ts de ses dépendances", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Les références de projet ne peuvent pas former un graphe circulaire. Cycle détecté : {0}", + "Projects_6255": "Projets", + "Projects_in_this_build_Colon_0_6355": "Projets dans cette build : {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Les propriétés avec le modificateur 'accessor' ne sont disponibles que pour le ciblage d’ECMAScript 2015 et versions ultérieures.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propriété « {0} » ne peut pas avoir d’initialiseur, car elle est marquée comme abstraite.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propriété '{0}' est issue d'une signature d'index, elle doit donc faire l'objet d'un accès avec ['{0}'].", + "Property_0_does_not_exist_on_type_1_2339": "La propriété '{0}' n'existe pas sur le type '{1}'.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propriété '{0}' n'existe pas sur le type '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propriété '{0}' n'existe pas sur le type '{1}'. Ne vouliez-vous pas plutôt accéder au membre statique '{2}' ?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La propriété '{0}' n'existe pas sur le type '{1}'. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{2}' ou une version ultérieure.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propriété '{0}' n’existe pas sur le type '{1}'. Essayez de modifier l’option de compileur 'lib' pour inclure 'dom'.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propriété « {0} » n'a aucun initialiseur et n'est pas définitivement assignée dans un bloc statique de classe.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propriété '{0}' n'a aucun initialiseur et n'est pas définitivement assignée dans le constructeur.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propriété '{0}' a implicitement le type 'any', car son accesseur get ne dispose pas d'une annotation de type de retour.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propriété '{0}' a implicitement le type 'any', car son accesseur set ne dispose pas d'une annotation de type de paramètre.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La propriété '{0}' a implicitement le type 'any', mais il est possible de déduire un meilleur type pour son accesseur get à partir de l'utilisation.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La propriété '{0}' a implicitement le type 'any', mais il est possible de déduire un meilleur type pour son accesseur set à partir de l'utilisation.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Impossible d'assigner la propriété '{0}' du type '{1}' à la même propriété du type de base '{2}'.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La propriété '{0}' du type '{1}' ne peut pas être assignée au type '{2}'.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La propriété '{0}' du type '{1}' fait référence à un membre distinct, qui n'est pas accessible à partir du type '{2}'.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "La propriété '{0}' est déclarée mais sa valeur n'est jamais lue.", + "Property_0_is_incompatible_with_index_signature_2530": "La propriété '{0}' est incompatible avec la signature d'index.", + "Property_0_is_missing_in_type_1_2324": "La propriété '{0}' est manquante dans le type '{1}'.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La propriété '{0}' est absente du type '{1}' mais obligatoire dans le type '{2}'.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "La propriété '{0}' n'est pas accessible en dehors de la classe '{1}', car elle a un identificateur privé.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propriété '{0}' est facultative dans le type '{1}', mais obligatoire dans le type '{2}'.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propriété '{0}' est privée et uniquement accessible dans la classe '{1}'.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propriété '{0}' est privée dans le type '{1}', mais pas dans le type '{2}'.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propriété '{0}' est protégée et uniquement accessible via une instance de la classe '{1}'. Ceci est une instance de la classe '{2}'.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propriété '{0}' est protégée et uniquement accessible dans la classe '{1}' et ses sous-classes.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propriété '{0}' est protégée, mais le type '{1}' n'est pas une classe dérivée de '{2}'.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propriété '{0}' est protégée dans le type '{1}', mais publique dans le type '{2}'.", + "Property_0_is_used_before_being_assigned_2565": "La propriété '{0}' est utilisée avant d'être assignée.", + "Property_0_is_used_before_its_initialization_2729": "La propriété '{0}' est utilisée avant son initialisation.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propriété «{0}» n'existe pas sur le type «{1}». Est-ce qu'il ne s'agit pas plutôt de «{2}»?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Impossible d'assigner la propriété '{0}' de l'attribut spread JSX à la propriété cible.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La propriété '{0}' du type de classe anonyme exporté ne peut pas être privée ou protégée.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propriété '{0}' de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propriété '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propriété « {0} » de type « {1} » ne peut pas être attribuée au type d’index « {2} », « {3} ».", + "Property_0_was_also_declared_here_2733": "La propriété '{0}' a également été déclarée ici.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propriété '{0}' va remplacer la propriété de base dans '{1}'. Si cela est intentionnel, ajoutez un initialiseur. Sinon, ajoutez un modificateur 'declare', ou supprimez la déclaration redondante.", + "Property_assignment_expected_1136": "Assignation de propriété attendue.", + "Property_destructuring_pattern_expected_1180": "Modèle de déstructuration de propriété attendu.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La propriété doit avoir une annotation de type explicite avec --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Propriété ou signature attendue.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "La valeur de la propriété peut être uniquement un littéral de chaîne, un littéral numérique, 'true', 'false', 'null', un littéral d'objet ou un littéral de tableau.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fournissez une prise en charge complète des itérables dans 'for-of', la propagation et la destruction lors du ciblage de 'ES5'.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module externe {2} mais ne peut pas être nommée.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "La méthode publique '{0}' de la classe exportée comporte ou utilise le nom privé '{1}'.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La propriété publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La propriété publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La propriété publique '{0}' de la classe exportée possède ou utilise le type privé '{1}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module externe {2} mais ne peut pas être nommée.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom '{1}' du module privé '{2}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "La méthode statique publique '{0}' de la classe exportée comporte ou utilise le nom privé '{1}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le type privé '{1}'.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Le nom qualifié '{0}' n'est pas autorisé si '@param {object} {1}' n'est pas placé au début.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Déclencher une erreur quand un paramètre de fonction n’est pas lu.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Lever une erreur sur les expressions et les déclarations ayant un type 'any' implicite.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Déclenche une erreur sur les expressions 'this' avec un type 'any' implicite.", + "Range_out_of_order_in_character_class_1517": "Plage dans l’ordre dans la classe de caractères.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "La réexportation d’un type lorsque «{0}» est activé nécessite l’utilisation de « type d’exportation ».", + "React_components_cannot_include_JSX_namespace_names_2639": "Les composants React ne peuvent pas inclure de noms d’espace de noms JSX", + "Recommended_Options_6294": "Options recommandées", + "Redirect_output_structure_to_the_directory_6006": "Rediriger la structure de sortie vers le répertoire.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Réduisez le nombre de projets chargés automatiquement par TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "Le projet référencé '{0}' ne doit pas désactiver l'émission.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Le projet référencé '{0}' doit avoir le paramètre \"composite\" avec la valeur true.", + "Referenced_via_0_from_file_1_1400": "Référencé(e) via '{0}' à partir du fichier '{1}'", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Envisagez d’ajouter une extension au chemin d’importation.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Les chemins d’importation relatifs ont besoin d’extensions de fichier explicites dans les importations ECMAScript lorsque '--moduleResolution' est 'node16' ou 'nodenext'. Est-ce que vous avez voulu utiliser '{0}' ?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Supprimez une liste de répertoires du processus d’observation.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Supprimez une liste de fichiers du traitement du mode espion.", + "Remove_all_unnecessary_override_modifiers_95163": "Supprimer tous les modificateurs 'override' inutiles", + "Remove_all_unnecessary_uses_of_await_95087": "Supprimer toutes les utilisations non nécessaires de 'await'", + "Remove_all_unreachable_code_95051": "Supprimer tout le code inaccessible", + "Remove_all_unused_labels_95054": "Supprimer toutes les étiquettes inutilisées", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Supprimer les accolades de tous les corps de fonction arrow présentant des problèmes pertinents", + "Remove_braces_from_arrow_function_95060": "Supprimer les accolades de la fonction arrow", + "Remove_braces_from_arrow_function_body_95112": "Supprimer les accolades du corps de fonction arrow", + "Remove_import_from_0_90005": "Supprimer l'importation de '{0}'", + "Remove_override_modifier_95161": "Supprimer un modificateur 'override'", + "Remove_parentheses_95126": "Supprimer les parenthèses", + "Remove_template_tag_90011": "Supprimer la balise template", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Supprimez la limite de 20 Mo sur la taille totale du code source pour les fichiers JavaScript dans le serveur de langage TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Supprimer 'type' de la déclaration d’importation de « {0} »", + "Remove_type_from_import_of_0_from_1_90056": "Supprimer 'type' de l’importation de « {0} » de «{1}»", + "Remove_type_parameters_90012": "Supprimer les paramètres de type", + "Remove_unnecessary_await_95086": "Supprimer toute utilisation non nécessaire de 'await'", + "Remove_unreachable_code_95050": "Supprimer le code inaccessible", + "Remove_unused_declaration_for_Colon_0_90004": "Supprimer la déclaration inutilisée pour : '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "Supprimer les déclarations inutilisées pour '{0}'", + "Remove_unused_destructuring_declaration_90039": "Supprimer la déclaration de déstructuration inutilisée", + "Remove_unused_label_95053": "Supprimer l'étiquette inutilisée", + "Remove_variable_statement_90010": "Supprimer l'instruction de variable", + "Rename_param_tag_name_0_to_1_95173": "Renommez le nom de balise '@param' '{0}' en '{1}'", + "Replace_0_with_Promise_1_90036": "Remplacer '{0}' par 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "Remplacer tous les 'infer' inutilisés par 'unknown'", + "Replace_import_with_0_95015": "Remplacez l'importation par '{0}'.", + "Replace_infer_0_with_unknown_90030": "Remplacer 'infer {0}' par 'unknown'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Signalez une erreur quand les chemins du code de la fonction ne retournent pas tous une valeur.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Signalez les erreurs pour les case avec fallthrough dans une instruction switch.", + "Report_errors_in_js_files_8019": "Signalez les erreurs dans les fichiers .js.", + "Report_errors_on_unused_locals_6134": "Signaler les erreurs sur les variables locales inutilisées.", + "Report_errors_on_unused_parameters_6135": "Signaler les erreurs sur les paramètres inutilisés.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exiger une annotation suffisante sur les exportations afin que d’autres outils puissent générer de manière triviale des fichiers de déclaration.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Les propriétés non déclarées sont imposées à partir des signatures d'index pour permettre l'utilisation des accès aux éléments.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Les paramètres de type obligatoires ne peuvent pas être placés à la suite des paramètres de type optionnels.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La résolution du module '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La résolution de la directive de référence de type '{0}' a été trouvée dans le cache à l'emplacement '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Échec de la résolution du nom non relatif ; tentative avec les fonctionnalités de résolution de nœud modernes désactivées pour voir si la bibliothèque npm a besoin d’une mise à jour de configuration.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Échec de la résolution du nom non relatif ; en essayant avec '--moduleResolution bundler' pour voir si le projet peut avoir besoin d’une mise à jour de configuration.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Résoudre 'keyof' en noms de propriétés de valeur chaîne uniquement (aucun nombre ou symbole).", + "Resolved_under_condition_0_6414": "Résolu sous la condition '{0}'.", + "Resolving_in_0_mode_with_conditions_1_6402": "Résolution en mode {0} avec des conditions {1}.", + "Resolving_module_0_from_1_6086": "======== Résolution du module '{0}' à partir de '{1}'. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Résolution du nom de module '{0}' par rapport à l'URL de base '{1}' - '{2}'.", + "Resolving_real_path_for_0_result_1_6130": "Résolution du chemin réel pour '{0}', résultat '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine non défini. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine non défini. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Résolution de la directive de référence de type pour le programme qui spécifie des typesRoots personnalisés, en ignorant la recherche dans le dossier « node_modules ».", + "Resolving_with_primary_search_path_0_6121": "Résolution à l'aide du chemin de recherche primaire '{0}'.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Le paramètre rest '{0}' possède implicitement un type 'any[]'.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Le paramètre Rest '{0}' a implicitement un type 'any[]', mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "Rest_types_may_only_be_created_from_object_types_2700": "Vous ne pouvez créer des types Rest qu'à partir de types d'objet.", + "Return_type_annotation_circularly_references_itself_2577": "L'annotation de type de retour se référence de manière circulaire.", + "Return_type_must_be_inferred_from_a_function_95149": "Le type de retour doit être déduit d'une fonction", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Le type de retour de la signature de constructeur de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Le type de retour de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Le type de retour de la signature de constructeur doit pouvoir être assigné au type d'instance de la classe.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Le type de retour de la fonction exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Le type de retour de la fonction exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Le type de retour de la fonction exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Le type de retour de la signature d'index de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Le type de retour de la signature d'index de l'interface exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Le type de retour de la méthode de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Le type de retour de la méthode de l'interface exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Le type de retour de la méthode publique de la classe exportée possède ou utilise le nom privé '{0}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module externe {2}, mais il ne peut pas être nommé.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Le type de retour du getter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module privé '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{0}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} avec l’ID de package « {3} ».", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} » avec l’ID de package « {3} ».", + "Rewrite_all_as_indexed_access_types_95034": "Réécrire tout comme types d'accès indexés", + "Rewrite_as_the_indexed_access_type_0_90026": "Réécrire en tant que type d'accès indexé '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Réécrivez les extensions de fichier « .ts », « .tsx », « .mts » et « .cts » dans les chemins d'importation relatifs vers leur équivalent JavaScript dans les fichiers de sortie.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Opérande droit de ?? est inaccessible, car l’opérande de gauche n’est jamais nullish.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Impossible de déterminer le répertoire racine, chemins de recherche primaires ignorés.", + "Root_file_specified_for_compilation_1427": "Fichier racine spécifié pour la compilation", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATÉGIE", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Enregistrez les fichiers .tsbuildinfo pour permettre la compilation incrémentielle des projets.", + "Saw_non_matching_condition_0_6405": "Condition non correspondante '{0}' visible.", + "Scoped_package_detected_looking_in_0_6182": "Package de portée détecté. Recherche dans '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Recherche d’extensions de secours dans tous les répertoires node_modules ancêtres : {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Recherche d’extensions préférées dans tous les répertoires node_modules ancêtres : {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Voir aussi https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "La sélection ne correspond pas à une ou des instructions valides", + "Selection_is_not_a_valid_type_node_95133": "La sélection n'est pas un nœud de type valide", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Définissez la version du langage JavaScript pour JavaScript émis et incluez des déclarations de bibliothèque compatibles.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Définissez la langue de la messagerie à partir de TypeScript. Cela n’affecte pas l’émission.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Affecter à l'option 'module' de votre fichier config la valeur '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "Définissez le caractère de nouvelle ligne pour l’émission de fichiers.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Affecter à l'option 'target' de votre fichier config la valeur '{0}'", + "Setters_cannot_return_a_value_2408": "Les méthodes setter ne peuvent pas retourner de valeur.", + "Show_all_compiler_options_6169": "Affichez toutes les options du compilateur.", + "Show_diagnostic_information_6149": "Affichez les informations de diagnostic.", + "Show_verbose_diagnostic_information_6150": "Affichez les informations de diagnostic détaillées.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Montrer ce qui serait généré (ou supprimé si '--clean' est spécifié)", + "Signature_0_must_be_a_type_predicate_1224": "La signature '{0}' doit être un prédicat de type.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Les déclarations de signature peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorer la génération de projets en aval en cas d’erreur dans le projet en amont.", + "Skip_type_checking_all_d_ts_files_6693": "Ignorer la vérification de type dans tous les fichiers .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorer la vérification de type des fichiers .d.ts inclus dans TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Ignorer le contrôle de type des fichiers de déclaration.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorer la génération du projet '{0}' car sa dépendance '{1}' comporte des erreurs", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorer la build du projet '{0}', car sa dépendance '{1}' n'a pas été générée", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Le module '{0}' qui ressemble à un URI absolu, types de fichiers cibles : {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Source du projet référencé '{0}' incluse, car '{1}' est spécifié", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Source du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'", + "Source_has_0_element_s_but_target_allows_only_1_2619": "La source a {0} élément(s) mais la cible n'en autorise que {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "La source a {0} élément(s) mais la cible en nécessite {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "La source ne fournit aucune correspondance pour l'élément obligatoire situé à la position {0} dans la cible.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "La source ne fournit aucune correspondance pour l'élément variadique situé à la position {0} dans la cible.", + "Specify_ECMAScript_target_version_6015": "Spécifiez la version cible ECMAScript.", + "Specify_JSX_code_generation_6080": "Spécifiez la génération de code JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Spécifiez un fichier qui regroupe toutes les sorties dans un fichier JavaScript. Si « declaration » a la valeur true, désigne également un fichier qui regroupe toutes les sorties .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Spécifiez une liste de modèles glob qui correspondent aux fichiers à inclure dans la compilation.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Spécifiez une liste de plug-ins de service de langage à ajouter.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Spécifiez un ensemble de fichiers de déclaration de bibliothèque groupée qui décrivent l’environnement d’exécution cible.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Spécifiez un ensemble d’entrées qui re-mappent les importations à d’autres emplacements de recherche.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Spécifiez un tableau d’objets qui spécifient les chemins d’accès pour les projets. Utilisé dans les références de projet.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Spécifiez un dossier de sortie pour tous les fichiers émis.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Spécifier le comportement d'émission/de vérification des importations utilisées uniquement pour les types.", + "Specify_file_to_store_incremental_compilation_information_6380": "Spécifier le fichier de stockage des informations de compilation incrémentielle", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Spécifiez comment TypeScript recherche un fichier à partir d’un spécificateur de module donné.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Spécifiez la façon dont les répertoires sont surveillés sur les systèmes qui ne disposent pas de fonctionnalités récursives de surveillance des fichiers.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Spécifiez le fonctionnement du mode espion TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Spécifiez les fichiers bibliothèques à inclure dans la compilation.", + "Specify_module_code_generation_6016": "Spécifier la génération de code de module.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Spécifiez le spécificateur de module utilisé pour importer les fonctions de fabrique JSX lors de l’utilisation de « jsx: react-jsx* ».", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Spécifiez plusieurs dossiers qui agissent comme « ./node_modules/@types ».", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Spécifiez une ou plusieurs références de module de chemin d’accès ou de nœud aux fichiers de configuration de base dont les paramètres sont hérités.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Spécifiez les options d’acquisition automatique des fichiers de déclaration.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Spécifiez la stratégie en cas d'échec de la création d'une surveillance de l'interrogation à l'aide des événements liés au système de fichiers : 'FixedInterval' (par défaut), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Spécifiez la stratégie de surveillance des répertoires sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif : 'UseFsEvents' (par défaut), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Spécifiez la stratégie de surveillance des fichiers : 'FixedPollingInterval' (par défaut), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Spécifiez la référence de fragment JSX utilisée pour les fragments lors du ciblage de l’émission de réaction JSX par exemple « React.Fragment » ou « Fragment ».", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX 'react', par exemple 'React.createElement' ou 'h'.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX « react », par exemple « React.createElement » ou « h ».", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Spécifiez la fonction de fabrique de fragments JSX à utiliser durant le ciblage de l'émission JSX 'react' avec l'option de compilateur 'jsxFactory', par exemple 'Fragment'.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Spécifiez le répertoire de base pour résoudre les noms de modules non relatifs.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Spécifiez la séquence de fin de ligne à utiliser durant l'émission des fichiers : 'CRLF' (Dos) ou 'LF' (Unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers TypeScript au lieu des emplacements sources.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers de mappage au lieu des emplacements générés.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Spécifiez la profondeur maximale de dossier utilisée pour la vérification des fichiers JavaScript à partir de « node_modules ». Applicable uniquement à l’aide de « allowJs ».", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Spécifiez le spécificateur de module à utiliser pour importer les fonctions de fabrique 'jsx' et 'jsxs' à partir de react, par exemple", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Spécifiez l’objet appelé pour « createElement ». Ceci s’applique uniquement quand le ciblage de l’émission de JSX « react » est actif.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Spécifiez le répertoire de sortie pour les fichiers de déclaration générés.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Spécifiez le chemin d’accès au fichier de compilation incrémentielle .incrémentielle .", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Spécifiez le répertoire racine des fichiers d'entrée. Contrôlez la structure des répertoires de sortie avec --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Spécifiez le dossier racine dans vos fichiers sources.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Spécifiez le chemin d’accès racine des débogueurs pour trouver le code source de référence.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Spécifiez les noms de packages de types à inclure sans être référencés dans un fichier source.", + "Specify_what_JSX_code_is_generated_6646": "Spécifiez le code JSX généré.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Spécifiez l’approche que l’observateur doit utiliser si le système manque d’observateurs de fichiers natifs.", + "Specify_what_module_code_is_generated_6657": "Spécifiez le code de module généré.", + "Split_all_invalid_type_only_imports_1367": "Diviser toutes les importations de type uniquement non valides", + "Split_into_two_separate_import_declarations_1366": "Diviser en deux déclarations import distinctes", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'opérateur spread dans les expressions 'new' est disponible uniquement quand ECMAScript 5 ou version supérieure est ciblé.", + "Spread_types_may_only_be_created_from_object_types_2698": "Vous ne pouvez créer des types Spread qu'à partir de types d'objet.", + "Starting_compilation_in_watch_mode_6031": "Démarrage de la compilation en mode espion...", + "Statement_expected_1129": "Instruction attendue.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Les instructions ne sont pas autorisées dans les contextes ambiants.", + "Static_members_cannot_reference_class_type_parameters_2302": "Les membres statiques ne peuvent pas référencer des paramètres de type de classe.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propriété statique '{0}' est en conflit avec la propriété intégrée 'Function.{0}' de la fonction constructeur '{1}'.", + "Stricter_Typechecking_Options_6292": "Options de vérification de type plus strictes", + "String_literal_expected_1141": "Littéral de chaîne attendu.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Les noms d’importation et d’exportation de littéral de chaîne ne sont pas pris en charge lorsque l’indicateur « --module » a la valeur « es2015 » ou « es2020 ».", + "String_literal_with_double_quotes_expected_1327": "Littéral de chaîne avec guillemets doubles attendu.", + "Style_Options_6293": "Options de style", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylisez les erreurs et les messages avec de la couleur et du contexte (expérimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Les indicateurs de sous-modèle doivent être présents lorsqu’il existe un signe moins.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Les prochaines déclarations de propriétés doivent avoir le même type. La propriété '{0}' doit avoir le type '{1}', mais elle a ici le type '{2}'.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Les déclarations de variable ultérieures doivent avoir le même type. La variable '{0}' doit être de type '{1}', mais elle a ici le type '{2}'.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Le type de la substitution '{0}' du modèle '{1}' est incorrect. Attente de 'string'. Obtention de '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La substitution '{0}' dans le modèle '{1}' ne peut avoir qu'un seul caractère '*' au maximum.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Les substitutions du modèle '{0}' doivent correspondre à un tableau.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Les substitutions du modèle '{0}' ne doivent pas correspondre à un tableau vide.", + "Successfully_created_a_tsconfig_json_file_6071": "Un fichier tsconfig.json a été créé.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Les appels de 'super' ne sont pas autorisés hors des constructeurs ou dans des fonctions imbriquées dans des constructeurs.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Supprimez les vérifications des propriétés en trop pour les littéraux d'objet.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Supprimer les erreurs noImplicitAny pour les objets d'indexation auxquels il manque des signatures d'index.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Supprimez les erreurs « noImplicitAny » lors de l’indexation d’objets qui n’ont pas de signatures d’index.", + "Switch_each_misused_0_to_1_95138": "Remplacer chaque utilisation incorrecte de '{0}' par '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Appelez les rappels de façon synchrone, et mettez à jour l'état des observateurs de répertoire sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif.", + "Syntax_Colon_0_6023": "Syntaxe : {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La balise '{0}' attend au moins '{1}' arguments, mais la fabrique JSX '{2}' en fournit au maximum '{3}'.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Les expressions de modèle étiquetées ne sont pas autorisées dans une chaîne facultative.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La cible autorise uniquement {0} élément(s) mais la source peut en avoir plus.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La cible nécessite {0} élément(s) mais la source peut en avoir moins.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La signature cible offre trop peu d’arguments. {0} ou plus sont attendus, mais {1} ont été reçus.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Le modificateur '{0}' peut uniquement être utilisé dans les fichiers TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Impossible d'appliquer l'opérateur '{0}' au type 'symbol'.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'opérateur '{0}' n'est pas autorisé pour les types booléens. Utilisez '{1}' à la place.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La propriété '{0}' d'un itérateur asynchrone doit être une méthode.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "La propriété '{0}' d'un itérateur doit être une méthode.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Le type 'Object' peut être assigné à très peu d'autres types. Souhaitez-vous utiliser le type 'any' à la place ?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "L’indicateur Unicode (u) et l’indicateur Unicode Sets (v) ne peuvent pas être définis simultanément.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Désolé... Nous ne pouvons pas référencer l’objet « arguments » dans une fonction arrow d’ES5. Utilisez plutôt une expression de fonction standard.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "L’objet « arguments » ne peut pas être référencé dans une fonction ou méthode asynchrone dans ES5. Utilisez une fonction ou méthode standard.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Le corps d'une instruction 'if' ne peut pas être l'instruction vide.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "L'appel aurait pu réussir sur cette implémentation, mais les signatures de surcharges de l'implémentation ne sont pas visibles en externe.", + "The_character_set_of_the_input_files_6163": "Jeu de caractères des fichiers d'entrée.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La fonction arrow conteneur capture la valeur globale de 'this'.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Le corps de la fonction ou du module conteneur est trop grand pour l'analyse du flux de contrôle.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Le fichier actuel est un module CommonJS et ne peut pas utiliser 'await' au niveau supérieur.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Le fichier actuel est un module CommonJS dont les importations produiront des appels 'require' ; cependant, le fichier référencé est un module ECMAScript et ne peut pas être importé avec 'require'. Envisagez d'écrire un appel dynamique 'import(\"{0}\")' à la place.", + "The_current_host_does_not_support_the_0_option_5001": "L'hôte actuel ne prend pas en charge l'option '{0}'.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La déclaration de '{0}' que vous aviez probablement l'intention d'utiliser est définie ici", + "The_declaration_was_marked_as_deprecated_here_2798": "La déclaration a été marquée ici comme étant dépréciée.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Le type attendu provient de la propriété '{0}', qui est déclarée ici sur le type '{1}'", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Le type attendu provient du type de retour de cette signature.", + "The_expected_type_comes_from_this_index_signature_6501": "Le type attendu provient de cette signature d'index.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'expression d'une assignation d'exportation doit être un identificateur ou un nom qualifié dans un contexte ambiant.", + "The_file_is_in_the_program_because_Colon_1430": "Le fichier est dans le programme pour la ou les raisons suivantes :", + "The_files_list_in_config_file_0_is_empty_18002": "La liste 'files' du fichier config '{0}' est vide.", + "The_first_export_default_is_here_2752": "La première valeur par défaut d'exportation se trouve ici.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Le premier paramètre de la méthode 'then' d'une promesse doit être un rappel.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Le type global 'JSX.{0}' ne peut pas avoir plusieurs propriétés.", + "The_implementation_signature_is_declared_here_2750": "La signature d'implémentation est déclarée ici.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "La métapropriété « import.meta » n’est pas autorisée dans les fichiers qui seront intégrés dans la sortie CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La méta-propriété « import.meta » est autorisée uniquement lorsque l’option « --module » est « es2020 », « es2022 », « esnext », « system », « node16 », « node18 » ou « node20 » « nodenext ».", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Le type déduit de '{0}' ne peut pas être nommé sans référence à '{1}'. Cela n'est probablement pas portable. Une annotation de type est nécessaire.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Le type déduit de '{0}' référence un type avec une structure cyclique qui ne peut pas être sérialisée de manière triviale. Une annotation de type est nécessaire.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Le type déduit de '{0}' référence un type '{1}' inaccessible. Une annotation de type est nécessaire.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Le type déduit de ce nœud dépasse la longueur maximale que le compilateur va sérialiser. Une annotation de type explicite est nécessaire.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L’initialiseur d’une déclaration « using » doit être un objet avec une méthode « [Symbol.dispose]() », ou avoir la valeur « null » ou « undefined ».", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L’initialiseur d’une déclaration « await using » doit être un objet avec une méthode « [Symbol.asyncDispose]() » ou « [Symbol.dispose]() », ou avoir la valeur « null » ou « undefined ».", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' existe dans plusieurs constituants et est privée dans certains d'entre eux.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersection '{0}' a été réduite à 'never', car la propriété '{1}' a des types en conflit dans certains constituants.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Le mot clé 'intrinsic' peut uniquement être utilisé pour déclarer les types intrinsèques fournis par le compilateur.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "L'option de compilateur 'jsxFragmentFactory' doit être fournie pour permettre l'utilisation des fragments JSX avec l'option de compilateur 'jsxFactory'.", + "The_last_overload_gave_the_following_error_2770": "La dernière surcharge a généré l'erreur suivante.", + "The_last_overload_is_declared_here_2771": "La dernière surcharge est déclarée ici.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La partie gauche d'une instruction 'for...in' ne peut pas être un modèle de déstructuration.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « using ».", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La partie gauche d’une instruction « for...in » ne peut pas être une déclaration « await using ».", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "La partie gauche d'une instruction 'for...in' ne peut pas utiliser d'annotation de type.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La partie gauche d'une instruction 'for...in' ne doit pas être un accès à une propriété facultative.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La partie gauche d'une instruction 'for...in' doit être un accès à une variable ou une propriété.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La partie gauche d'une instruction 'for...in' doit être de type 'string' ou 'any'.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La partie gauche d'une instruction 'for...of' ne peut pas utiliser d'annotation de type.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La partie gauche d'une instruction 'for...of' ne doit pas être un accès à une propriété facultative.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Il est possible que le côté gauche d’une instruction « for...of » ne soit pas « async ».", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La partie gauche d'une instruction 'for...of' doit être un accès à une variable ou une propriété.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La partie gauche d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La partie gauche d'une expression d'assignation ne doit pas être un accès à une propriété facultative.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La partie gauche d'une expression d'assignation doit être un accès à une variable ou une propriété.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La partie gauche d’une expression « instanceof » doit pouvoir être assignée au premier argument de la méthode « [Symbol.hasInstance] » du côté droit.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La partie gauche d'une expression 'instanceof' doit être de type 'any', un type d'objet ou un paramètre de type.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Paramètres régionaux utilisés pour afficher les messages à l'utilisateur (exemple : 'fr-fr')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondeur de dépendance maximale pour la recherche sous node_modules et le chargement de fichiers JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "L'opérande d'un opérateur 'delete' ne peut pas être un identificateur privé.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "L'opérande d'un opérateur 'delete' ne peut pas être une propriété en lecture seule.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "L'opérande d'un opérateur 'delete' doit être une référence de propriété.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "L'opérande d'un opérateur 'delete' doit être facultatif.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "L'opérande d'un opérateur d'incrémentation ou de décrémentation ne doit pas être un accès à une propriété facultative.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "L'opérande d'un opérateur d'incrémentation ou de décrémentation doit être un accès à une variable ou une propriété.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "L'analyseur s'attendait à trouver '{1}' pour correspondre au jeton '{0}' ici.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’exportation '{0}' dans le fichier '{1}'. Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La racine du projet est ambiguë, mais elle est nécessaire pour résoudre l’entrée de carte d’importation «{0}» dans le fichier «{1}». Fournissez l’option de compilateur « rootDir » pour lever l’ambiguïté.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "La propriété '{0}' n'est pas accessible sur le type '{1}' dans cette classe, car elle est mise en mémoire fantôme par un autre identificateur privé ayant la même orthographe.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Le type de retour d'une fonction d'élément décoratif de paramètre doit être 'void' ou 'any'.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Le type de retour d'une fonction d'élément décoratif de propriété doit être 'void' ou 'any'.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Le type de retour d'une fonction asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Le type de retour d'une fonction ou d'une méthode async doit être le type Promise global.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Le type de retour d'une fonction ou d'une méthode asynchrone doit être le type global Promise. Vouliez-vous vraiment écrire 'Promise<{0}>' ?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La partie droite d'une instruction 'for...in' doit être de type 'any', un type d'objet ou un paramètre de type, mais elle a le type '{0}' ici.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La partie droite d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La partie droite d’une expression « instanceof » doit être de type « any », une classe, une fonction ou un autre type pouvant être affecté au type d’interface « Function », ou un type d’objet avec une méthode « Symbol.hasInstance ».", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La partie droite d’une expression « instanceof » ne doit pas être une expression d’instanciation.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "La valeur racine d'un fichier '{0}' doit être un objet.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Le runtime appellera l’élément décoratif avec des arguments {1}, mais l’élément décoratif attend au moins {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "La déclaration avec mise en mémoire fantôme de '{0}' est définie ici", + "The_signature_0_of_1_is_deprecated_6387": "La signature '{0}' de '{1}' est dépréciée.", + "The_specified_path_does_not_exist_Colon_0_5058": "Le chemin spécifié n'existe pas : '{0}'.", + "The_tag_was_first_specified_here_8034": "La balise a d'abord été spécifiée ici.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "La cible d'une assignation rest d'objet ne doit pas être un accès à une propriété facultative.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "La cible de l'assignation du reste d'un objet doit être un accès à une variable ou une propriété.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Le contexte 'this' de type '{0}' n'est pas assignable au contexte 'this' de type '{1}' de la méthode.", + "The_this_types_of_each_signature_are_incompatible_2685": "Les types 'this' de chaque signature sont incompatibles.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Le type '{0}' est 'readonly' et ne peut pas être assigné au type modifiable '{1}'.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’exportation est utilisé dans son instruction import.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Le ’type’ de modificateur ne peut pas être utilisé sur une importation nommée quand le ’type’ d’importation est utilisé dans son instruction import.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossible de sérialiser le type de ce nœud, car sa propriété «{0}» ne peut pas être sérialisée.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Le type retourné par la méthode '{0}()' d'un itérateur asynchrone doit être une promesse pour un type ayant une propriété 'value'.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Le type retourné par la méthode '{0}()' d'un itérateur doit avoir une propriété 'value'.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Les types de '{0}' sont incompatibles entre eux.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Les types retournés par '{0}' sont incompatibles entre eux.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "La valeur '{0}' ne peut pas être utilisée ici.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La déclaration de variable d'une instruction 'for...in' ne peut pas avoir d'initialiseur.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La déclaration de variable d'une instruction 'for...of' ne peut pas avoir d'initialiseur.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'instruction 'with' n'est pas prise en charge. Tous les symboles d'un bloc 'with' ont le type 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu sous votre paramètre « moduleResolution » actuel. Envisagez la mise à jour vers « node16 », « nodenext » ou « bundler ».", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Il existe des types sur « {0} », mais ce résultat n’a pas pu être résolu lors du respect des « exports » package.json. La bibliothèque « {1} » devra peut-être mettre à jour son package.json ou ses typages.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Il n’existe aucun groupe de capture nommé « {0} » dans cette expression régulière.", + "There_is_nothing_available_for_repetition_1507": "Aucun élément n’est disponible pour la répétition.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Cette balise JSX nécessite que « {0} » soit dans la portée, mais elle n'a pas pu être trouvée.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Cette balise JSX nécessite que le chemin du module '{0}' existe, mais aucun n'a pu être trouvé. Assurez-vous que les types pour le package approprié sont installés.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propriété '{0}' de cette balise JSX attend un seul enfant de type '{1}', mais plusieurs enfants ont été fournis.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propriété '{0}' de cette balise JSX attend le type '{1}', qui nécessite plusieurs enfants, mais un seul enfant a été fourni.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a aucun groupe de capture dans cette expression régulière.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Cette référence arrière fait référence à un groupe qui n’existe pas. Il n’y a que {0} groupes de capture dans cette expression régulière.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Cette expression binaire n’est jamais nulle. Avez-vous des parenthèses manquantes ?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Ce caractère ne peut pas être placé dans une séquence d’échappement d’expression régulière.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Cette comparaison semble involontaire, car les types '{0}' et '{1}' n’ont pas de chevauchement.", + "This_condition_will_always_return_0_2845": "Cette condition retourne toujours '{0}'.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Cette condition retourne toujours '{0}', car JavaScript compare les objets par référence, et non par valeur.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Cette condition retourne toujours true, car cette « {0} » est toujours définie.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Cette condition retourne toujours true, car cette fonction est toujours définie. Est-ce que vous avez voulu l'appeler à la place ?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Cette fonction constructeur peut être convertie en déclaration de classe.", + "This_expression_is_always_nullish_2871": "Cette expression est toujours nulle.", + "This_expression_is_never_nullish_2881": "Cette expression n’est jamais nulle.", + "This_expression_is_not_callable_2349": "Impossible d'appeler cette expression.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Impossible d'appeler cette expression, car il s'agit d'un accesseur 'get'. Voulez-vous vraiment l'utiliser sans '()' ?", + "This_expression_is_not_constructable_2351": "Impossible de construire cette expression.", + "This_file_already_has_a_default_export_95130": "Ce fichier a déjà une exportation par défaut", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Ce chemin d'importation n'est pas sûr à réécrire car il renvoie à un autre projet et le chemin relatif entre les fichiers de sortie des projets n'est pas le même que le chemin relatif entre ses fichiers d'entrée.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Cette importation utilise une extension '{0}' pour résoudre un fichier TypeScript d'entrée, mais ne sera pas réécrite pendant l'émission car il ne s'agit pas d'un chemin relatif.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Ceci est la déclaration augmentée. Pensez à déplacer la déclaration d'augmentation dans le même fichier.", + "This_kind_of_expression_is_always_falsy_2873": "Ce genre d’expression est toujours fausse.", + "This_kind_of_expression_is_always_truthy_2872": "Ce genre d’expression est toujours vrai.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Ceci peut être converti en fonction asynchrone.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise '@override' car il n'est pas déclaré dans la classe de base '{0}'.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise 'override' car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}' ?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise '@override' car sa classe conteneur '{0}' n'étend pas une autre classe.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ce membre ne peut pas avoir de commentaire JSDoc avec une balise « @override », car son nom est dynamique.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}'?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ce membre ne peut pas avoir de modificateur 'override', car sa classe conteneur '{0}' n'étend pas une autre classe.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Ce membre ne peut pas avoir de modificateur 'override', car son nom est dynamique.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Ce membre doit avoir un commentaire JSDoc avec une balise '@override' car il remplace un membre de la classe de base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ce membre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ce membre doit avoir un modificateur 'override', car il se substitue à une méthode abstraite déclarée dans la classe de base '{0}'.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Vous pouvez référencer ce module uniquement avec les importations/exportations ECMAScript en activant l'indicateur '{0}' et en référençant son exportation par défaut.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ce module est déclaré avec 'export =', et ne peut être utilisé qu’avec une importation par défaut lors de l’utilisation de l’indicateur '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Cette opération peut être simplifiée. Ce shift est identique à '{0} {1} {2}'.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Cette surcharge retourne implicitement le type « {0} », car elle n’a pas d’annotation de type de retour.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Cette signature de surcharge n'est pas compatible avec sa signature d'implémentation.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ce paramètre n'est pas autorisé avec la directive 'use strict'.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Cette propriété de paramètre doit avoir un commentaire JSDoc avec une balise '@override' car elle remplace un membre dans la classe de base '{0}'.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Cette propriété de paramètre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Cet indicateur d’expression régulière ne peut pas être activé/désactivé dans un sous-modèle.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Cet indicateur d’expression régulière n’est disponible que lors du ciblage de « {0} » ou d’une version ultérieure.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Ce chemin d'importation relatif n'est pas sûr à réécrire car il ressemble à un nom de fichier, mais se résout en réalité en « {0} ».", + "This_spread_always_overwrites_this_property_2785": "Cette diffusion écrase toujours cette propriété.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Cette syntaxe n’est pas autorisée quand 'erasableSyntaxOnly' est activé.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Veuillez ajouter une virgule de fin ou une contrainte explicite.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Cette syntaxe est réservée dans les fichiers avec l’extension .mts ou .cts. Utilisez une expression « as »à la place.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Cette syntaxe nécessite une application d'assistance importée, mais le module '{0}' est introuvable.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Cette syntaxe nécessite une assistance importée nommée '{1}' mais qui n'existe pas dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Cette syntaxe nécessite un composant d'assistance importé nommé '{1}' avec {2} paramètres, ce qui n'est pas compatible avec celui qui se trouve dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Ce paramètre de type nécessite peut-être une contrainte « extends {0}».", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Cette utilisation de « import » n’est pas valide. Les appels « import() » peuvent être écrits, mais ils doivent avoir des parenthèses et ne peuvent pas avoir d’arguments de type.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Pour convertir ce fichier en module ECMAScript, ajoutez le champ `\"type\" : \"module\"` à '{0}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}', ou ajoutez le champ `\"type\" : \"module\"` à '{1}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Pour convertir ce fichier en module ECMAScript, changez son extension de fichier en '{0}' ou créez un fichier package.json local avec `{ \"type\": \"module\" }`.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Pour convertir ce fichier en module ECMAScript, créez un fichier package.json local avec `{ \"type\": \"module\" }`.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Les expressions « await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » est définie sur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Les instructions « await using » de niveau supérieur sont autorisées uniquement lorsque l’option « module » a la valeur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Les déclarations de niveau supérieur dans les fichiers .d.ts doivent commencer par un modificateur 'declare' ou 'export'.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Les boucles « for await » de niveau supérieur sont autorisées uniquement lorsque l’option « module » a la valeur « es2022 », « esnext », « system », « node16 », « node18 », « node20 », « nodenext » ou « preserve », et que l’option « target » a la valeur « es2017 » ou une valeur supérieure.", + "Trailing_comma_not_allowed_1009": "Virgule de fin non autorisée.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilez chaque fichier sous forme de module distinct (semblable à 'ts.transpileModule').", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Essayez 'npm i --save-dev @types/{1}' s'il existe, ou ajoutez un nouveau fichier de déclaration (.d.ts) contenant 'declare module '{0}';'", + "Trying_other_entries_in_rootDirs_6110": "Essai avec d'autres entrées dans 'rootDirs'.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Essai avec la substitution '{0}', emplacement de module candidat : '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Le type tuple '{0}' de longueur '{1}' n'a aucun élément à l'index '{2}'.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Les arguments de type tuple se référencent de manière circulaire.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Le type '{0}' peut être itéré uniquement à l'aide de l'indicateur '--downlevelIteration' ou avec un '--target' dont la valeur est 'es2015' ou une version ultérieure.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Impossible d'utiliser le type '{0}' comme type d'index.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Le type '{0}' ne peut pas être utilisé pour indexer le type '{1}'.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Le type '{0}' ne satisfait pas la contrainte '{1}'.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Le type '{0}' ne satisfait pas le type attendu '{1}'.", + "Type_0_has_no_call_signatures_2757": "Le type '{0}' n'a aucune signature d'appel.", + "Type_0_has_no_construct_signatures_2761": "Le type '{0}' n'a aucune signature de construction.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Le type '{0}' n'a aucune signature d'index correspondant au type '{1}'.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Le type '{0}' n'a aucune propriété en commun avec le type '{1}'.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Le type '{0}' n’a aucune signature pour laquelle la liste d’arguments de type est applicable.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Le type « {0} » est générique et ne peut être indexé que pour la lecture.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Le type '{0}' n'a pas les propriétés suivantes du type '{1}': {2} et de {3} autres.", + "Type_0_is_not_a_constructor_function_type_2507": "Le type '{0}' n'est pas un type de fonction constructeur.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Le type « {0} » n’est pas un type de retour de fonction asynchrone valide dans ES5, car il ne fait pas référence à une valeur de constructeur compatible avec une promesse.", + "Type_0_is_not_an_array_type_2461": "Le type '{0}' n'est pas un type de tableau.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Le type '{0}' n'est pas un type de tableau ou un type de chaîne.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Le type '{0}' n'est pas un type tableau ou un type chaîne, ou n'a pas de méthode '[Symbol.iterator]()' qui retourne un itérateur.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Le type '{0}' n'est pas un type tableau ou n'a pas de méthode '[Symbol.iterator]()' qui retourne un itérateur.", + "Type_0_is_not_assignable_to_type_1_2322": "Impossible d'assigner le type '{0}' au type '{1}'.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Le type '{0}' ne peut pas être attribué au type '{1}'. Voulez-vous dire '{2}'?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Impossible d'assigner le type '{0}' au type '{1}'. Il existe deux types distincts portant ce nom, mais ils ne sont pas liés.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Le type «{0}» n’est pas assignable au type «{1}» comme implicite par l’annotation de variance.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Le type « {0} » n’est pas attribuable au type « {1} » comme requis pour les valeurs de membre enum calculées.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' aux types des propriétés de la cible.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Le type '{0}' n'est pas assignable au type '{1}' avec 'exactOptionalPropertyTypes : true'. Pensez à ajouter 'undefined' au type de la cible.", + "Type_0_is_not_comparable_to_type_1_2678": "Le type '{0}' n'est pas comparable au type '{1}'.", + "Type_0_is_not_generic_2315": "Le type '{0}' n'est pas générique.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Le type '{0}' peut représenter une valeur primitive, ce qui n’est pas autorisé en tant qu’opérande droit de l’opérateur 'in'.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Le type '{0}' doit avoir une méthode '[Symbol.asyncIterator]()' qui retourne un itérateur asynchrone.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Le type '{0}' doit avoir une méthode '[Symbol.iterator]()' qui retourne un itérateur.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Le type '{0}' ne fournit aucune correspondance pour la signature '{1}'.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Le type '{0}' fait référence à lui-même de manière récursive en tant que type de base.", + "Type_Checking_6248": "Vérification du type", + "Type_alias_0_circularly_references_itself_2456": "L'alias de type '{0}' fait référence à lui-même de manière circulaire.", + "Type_alias_must_be_given_a_name_1439": "Un nom doit être attribué à l’alias de type.", + "Type_alias_name_cannot_be_0_2457": "Le nom de l'alias de type ne peut pas être '{0}'.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Les alias de type peuvent uniquement être utilisés dans les fichiers TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Une annotation de type ne peut pas apparaître sur une déclaration de constructeur.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Les annotations de type peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Type_argument_expected_1140": "Argument de type attendu.", + "Type_argument_list_cannot_be_empty_1099": "La liste des arguments de type ne peut pas être vide.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Les arguments de type peuvent uniquement être utilisés dans les fichiers TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Les arguments de type pour '{0}' se référencent de manière circulaire.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Les expressions d'assertion de type peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Le type situé à la position {0} dans la source n'est pas compatible avec le type situé à la position {1} dans la cible.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Le type situé aux positions allant de {0} à {1} dans la source n'est pas compatible avec le type situé à la position {2} dans la cible.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Le type contenant le nom privé « {0} » ne peut pas être utilisé avec --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Fichiers de déclaration de type à inclure dans la compilation.", + "Type_expected_1110": "Type attendu.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Les assertions d’importation de type doivent avoir exactement une clé ( « mode résolution » ) avec la valeur « import » ou « require ».", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "L'importation de type d'un module ECMAScript à partir d'un module CommonJS doit avoir un attribut « resolution-mode ».", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "L'instanciation de type est trop profonde et éventuellement infinie.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Le type est directement ou indirectement référencé dans le rappel d'exécution de sa propre méthode 'then'.", + "Type_library_referenced_via_0_from_file_1_1402": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}'", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}' ayant le packageId '{2}'", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Le type d'un opérande 'await' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Le type de la valeur de la propriété calculée est '{0}'. Il ne peut pas être assigné au type '{1}'.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Le type de variable membre d’instance '{0}' ne peut pas référencer l’identificateur '{1}' déclaré dans le constructeur.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Le type des éléments itérés d'un opérande 'yield*' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Le type de la propriété '{0}' se référence de façon circulaire dans le type mappé '{1}'.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Le type d'un opérande 'yield' dans un générateur asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "L'importation de type uniquement d'un module ECMAScript à partir d'un module CommonJS doit avoir un attribut « mode de résolution ».", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Le type provient de cette importation. Impossible d'appeler ou de construire une importation de style d'espace de noms, ce qui va entraîner un échec au moment de l'exécution. À la place, utilisez ici une importation par défaut ou une importation avec require.", + "Type_parameter_0_has_a_circular_constraint_2313": "Le paramètre de type '{0}' possède une contrainte circulaire.", + "Type_parameter_0_has_a_circular_default_2716": "Le paramètre de type '{0}' a une valeur par défaut circulaire.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Le paramètre de type '{0}' de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Le paramètre de type '{0}' de la signature de constructeur de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Le paramètre de type '{0}' de la classe exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Le paramètre de type '{0}' de la fonction exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Le paramètre de type '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Le paramètre de type '{0}' du type d'objet mappé exporté utilise le nom privé '{1}'.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Le paramètre de type '{0}' de l'alias du type exporté contient ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Le paramètre de type '{0}' de la méthode de l'interface exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Le paramètre de type '{0}' de la méthode publique de la classe exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Le paramètre de type '{0}' de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{1}'.", + "Type_parameter_declaration_expected_1139": "Déclaration du paramètre de type attendue.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Les déclarations de paramètre de type peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Les valeurs par défaut des paramètres de type peuvent uniquement référencer des paramètres de type déclarés.", + "Type_parameter_list_cannot_be_empty_1098": "La liste des paramètres de type ne peut pas être vide.", + "Type_parameter_name_cannot_be_0_2368": "Le nom du paramètre de type ne peut pas être '{0}'.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Les paramètres de type ne peuvent pas apparaître sur une déclaration de constructeur.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Impossible d'assigner le prédicat de type '{0}' à '{1}'.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Le type produit un type de tuple trop grand pour être représenté.", + "Type_reference_directive_0_was_not_resolved_6120": "======== La directive de référence de type '{0}' n'a pas été résolue. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}', primaire : {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}' avec l'ID de package '{2}', primaire : {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Les expressions de satisfaction de type peuvent uniquement être utilisées dans les fichiers TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Les types ne peuvent pas apparaître dans les déclarations d’exportation dans les fichiers JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Les types ont des déclarations distinctes d'une propriété privée '{0}'.", + "Types_of_construct_signatures_are_incompatible_2419": "Les types de signature de construction sont incompatibles.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Les types des paramètres '{0}' et '{1}' sont incompatibles.", + "Types_of_property_0_are_incompatible_2326": "Les types de la propriété '{0}' sont incompatibles.", + "Unable_to_open_file_0_6050": "Impossible d'ouvrir le fichier '{0}'.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Impossible de résoudre la signature d'un élément décoratif de classe quand il est appelé en tant qu'expression.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Impossible de résoudre la signature d'un élément décoratif de méthode quand il est appelé en tant qu'expression.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Impossible de résoudre la signature d'un élément décoratif de paramètre quand il est appelé en tant qu'expression.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Impossible de résoudre la signature d'un élément décoratif de propriété quand il est appelé en tant qu'expression.", + "Undetermined_character_escape_1513": "L’échappement de caractère n’est pas déterminé.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "« {0} » est inattendu. Vouliez-vous procéder à son échappement avec une barre oblique inverse ?", + "Unexpected_end_of_text_1126": "Fin de texte inattendue.", + "Unexpected_keyword_or_identifier_1434": "Mot clé ou identificateur inattendu.", + "Unexpected_token_1012": "Jeton inattendu.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Jeton inattendu. Un constructeur, une méthode, un accesseur ou une propriété est attendu.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Jeton inattendu. Un nom de paramètre de type est attendu sans accolades.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'>'}' ou '>' ?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Jeton inattendu. Est-ce que vous avez voulu utiliser '{'}'}' ou '}' ?", + "Unexpected_token_expected_1179": "Jeton inattendu. '{' est attendu.", + "Unicode_escape_sequence_cannot_appear_here_17021": "La séquence d’échappement Unicode ne peut pas apparaître ici.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Les séquences d’échappement Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Les expressions de valeur de propriété Unicode ne sont disponibles que lorsque l’indicateur Unicode (u) ou l’indicateur Unicode Sets (v) est défini.", + "Unknown_Unicode_property_name_1524": "Le nom de propriété Unicode est inconnu.", + "Unknown_Unicode_property_name_or_value_1529": "Une valeur ou un nom de propriété Unicode est inconnu.", + "Unknown_Unicode_property_value_1526": "La valeur de propriété Unicode est inconnue.", + "Unknown_build_option_0_5072": "Option de build inconnue : '{0}'.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Option de build inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", + "Unknown_compiler_option_0_5023": "Option de compilateur '{0}' inconnue.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Option de compilateur inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Mot clé ou identificateur inconnu. Souhaitiez-vous utiliser «{0}» ?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Option 'excludes' inconnue. Voulez-vous utiliser 'exclude' ?", + "Unknown_regular_expression_flag_1499": "L’indicateur d’expression régulière est inconnu.", + "Unknown_type_acquisition_option_0_17010": "Option d'acquisition de type inconnue '{0}'.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Option d'acquisition de type inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", + "Unknown_watch_option_0_5078": "Option de surveillance inconnue : '{0}'.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Option de surveillance inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?", + "Unreachable_code_detected_7027": "Code inatteignable détecté.", + "Unterminated_Unicode_escape_sequence_1199": "Séquence d'échappement Unicode inachevée.", + "Unterminated_quoted_string_in_response_file_0_6045": "Chaîne entre guillemets inachevée dans le fichier réponse '{0}'.", + "Unterminated_regular_expression_literal_1161": "Littéral d'expression régulière inachevé.", + "Unterminated_string_literal_1002": "Littéral de chaîne inachevé.", + "Unterminated_template_literal_1160": "Littéral de modèle inachevé.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Les appels de fonctions non typées ne peuvent pas accepter d'arguments de type.", + "Unused_label_7028": "Étiquette inutilisée.", + "Unused_ts_expect_error_directive_2578": "Directive '@ts-expect-error' inutilisée.", + "Update_import_from_0_90058": "Mettre à jour l’importation à partir de \"{0}\"", + "Update_modifiers_of_0_90061": "Mettre à jour les modificateurs de « {0} »", + "Updating_output_timestamps_of_project_0_6359": "Mise à jour des horodatages de sortie du projet '{0}'...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Mise à jour des horodatages de sortie inchangés du projet '{0}'...", + "Use_0_95174": "Utilisez `{0}`.", + "Use_0_instead_5106": "Utilisez « {0} » à la place.", + "Use_Number_isNaN_in_all_conditions_95175": "Utilisez 'Number.isNaN' dans toutes les conditions.", + "Use_element_access_for_0_95145": "Utiliser l'accès à l'élément pour '{0}'", + "Use_element_access_for_all_undeclared_properties_95146": "L'accès à l'élément est utilisé pour toutes les propriétés non déclarées.", + "Use_import_type_95180": "Utiliser « import type »", + "Use_synthetic_default_member_95016": "Utilisez un membre 'default' synthétique.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Utilisez le champ « exports » package.json lors de la résolution des importations de package.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Utilisez le champ « imports » package.json lors de la résolution des importations.", + "Use_type_0_95181": "Utiliser « type {0} »", + "Using_0_subpath_1_with_target_2_6404": "Utilisation de '{0}' de sous-chemin '{1}' avec la cible '{2}'.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "L'utilisation de fragments JSX nécessite que la fabrique de fragments '{0}' soit dans la portée, mais elle n'a pas pu être trouvée.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'utilisation d'une chaîne dans une instruction 'for...of' est prise en charge uniquement dans ECMAScript 5 et version supérieure.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "L’utilisation de--build,-b fera en sorte que tsc se comporte plus comme une build orchestrateur qu’un compilateur. Utilisé pour déclencher la génération de projets composites sur lesquels vous pouvez obtenir des informations supplémentaires sur {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Utilisation des options de compilateur de la redirection de référence de projet : '{0}'.", + "VERSION_6036": "VERSION", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "La valeur de type '{0}' n'a aucune propriété en commun avec le type '{1}'. Voulez-vous vraiment l'appeler ?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "La valeur de type '{0}' ne peut pas être appelée. Voulez-vous inclure 'new' ?", + "Variable_0_implicitly_has_an_1_type_7005": "La variable '{0}' possède implicitement un type '{1}'.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variable '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variable '{0}' a implicitement le type '{1}' à certains emplacements, mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variable '{0}' a implicitement le type '{1}' dans certains emplacements où son type ne peut pas être déterminé.", + "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' est utilisée avant d'être assignée.", + "Variable_declaration_expected_1134": "Déclaration de variable attendue.", + "Variable_declaration_list_cannot_be_empty_1123": "La liste des déclarations de variable ne peut pas être vide.", + "Variable_declaration_not_allowed_at_this_location_1440": "Déclaration de variable non autorisée à cet emplacement.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variable doit avoir une annotation de type explicite avec --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Les variables avec plusieurs déclarations ne peuvent pas être inlined.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'élément variadique situé à la position {0} dans la source ne correspond pas à l'élément situé à la position {1} dans la cible.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Les annotations de variance sont uniquement prises en charge dans les alias de type pour les types objet, fonction, constructeur et mappé.", + "Version_0_6029": "Version {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visitez https://aka.ms/ts6 pour obtenir des informations sur la migration.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visitez https://aka.ms/tsconfig pour en savoir plus sur ce fichier", + "WATCH_OPTIONS_6918": "OPTIONS D’OBSERVATION", + "Watch_and_Build_Modes_6250": "Modes d’Observation et de Génération", + "Watch_input_files_6005": "Fichiers d'entrée d'espion.", + "Watch_option_0_requires_a_value_of_type_1_5080": "L'option de surveillance '{0}' nécessite une valeur de type {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Nous ne pouvons écrire un type pour « {0} » qu’en ajoutant un type pour l’ensemble du paramètre ici.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Lors de l’attribution de fonctions, vérifiez que les paramètres et les valeurs de retour sont compatibles avec le sous-type.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Lors de la vérification de type, prenez en compte « null » et « undefined ».", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Garder la sortie de console obsolète en mode espion au lieu d'effacer l'écran.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Inclure dans un wrapper tous les caractères non valides au sein d'un conteneur d'expressions", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Mettre toutes les expressions de décorateurs non valides entre parenthèses", + "Wrap_all_object_literal_with_parentheses_95116": "Placer tous les littéraux d'objet entre parenthèses", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Inclure dans un wrapper tous les JSX non apparentés au sein d'un fragment JSX", + "Wrap_in_JSX_fragment_95120": "Inclure dans un wrapper au sein d'un fragment JSX", + "Wrap_in_parentheses_95194": "Mettre entre parenthèses", + "Wrap_invalid_character_in_an_expression_container_95108": "Inclure dans un wrapper un caractère non valide au sein d'un conteneur d'expressions", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Placer le corps suivant entre parenthèses pour indiquer qu'il s'agit d'un littéral d'objet", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Vous pouvez en savoir plus sur toutes les options du compilateur sur {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Vous ne pouvez pas renommer un module via une importation globale.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Vous ne pouvez pas renommer les éléments définis dans un dossier « node_modules ».", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Vous ne pouvez pas renommer les éléments définis dans un autre dossier « node_modules ».", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Vous ne pouvez pas renommer des éléments définis dans la bibliothèque TypeScript standard.", + "You_cannot_rename_this_element_8000": "Vous ne pouvez pas renommer cet élément.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accepte trop peu d'arguments pour pouvoir être utilisé ici en tant qu'élément décoratif. Voulez-vous vraiment l'appeler d'abord et écrire '@{0}()' ?", + "_0_and_1_index_signatures_are_incompatible_2330": "Les signatures d'index « {0} » et « {1} » sont incompatibles.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Les opérations '{0}' et '{1}' ne peuvent pas être mélangées sans parenthèses.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' spécifié deux fois. L'attribut nommé '{0}' va être remplacé.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "« {0} » à la fin d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "« {0} » au début d’un type n’est pas une syntaxe TypeScript valide. Vouliez-vous écrire « {1} » ?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' peut uniquement être importé via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' peut uniquement être importé via l'utilisation d'une importation par défaut.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' peut uniquement être importé à l'aide d'un appel 'require' ou via l'utilisation d'une importation par défaut.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'utilisation d'une importation par défaut.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' peut uniquement être importé à l'aide de 'import {1} = require({2})' ou via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.", + "_0_cannot_be_used_as_a_JSX_component_2786": "Impossible d'utiliser '{0}' comme composant JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été exporté à l'aide de 'export type'.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' ne peut pas être utilisé en tant que valeur, car il a été importé à l'aide de 'import type'.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Les composants '{0}' n'acceptent pas du texte en tant qu'éléments enfants. Le texte dans JSX a le type 'string', mais le type attendu de '{1}' est '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' a pu être instancié avec un type arbitraire qui n'est peut-être pas lié à '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Les déclarations « {0} » ne peuvent être déclarées que dans un bloc.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Les déclarations '{0}' peuvent uniquement être utilisées dans les fichiers TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Les déclarations « {0} » ne peuvent pas avoir de modèles de liaison.", + "_0_declarations_must_be_initialized_1155": "Les déclarations « {0} » doivent être initialisées.", + "_0_expected_1005": "'{0}' attendu.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "« {0} » a un type de chaîne, mais doit avoir une syntaxe de chaîne syntaxiquement reconnaissable quand « isolatedModules » est activé.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' n'a aucun membre exporté nommé '{1}'. Est-ce que vous pensiez à '{2}' ?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' a implicitement un type de retour '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' possède implicitement le type de retour 'any', car il n'a pas d'annotation de type de retour, et est référencé directement ou indirectement dans l'une de ses expressions de retour.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' a implicitement le type 'any', car il n'a pas d'annotation de type et est référencé directement ou indirectement dans son propre initialiseur.", + "_0_index_signatures_are_incompatible_2634": "Les signatures d'index « {0} » sont incompatibles.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Le type d’index « {0} », « {1} », ne peut pas être attribué au type d’index « {2} », « {3} ».", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' est une primitive, mais '{1}' est un objet wrapper. Si possible, utilisez '{0}' de préférence.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' est un type qui ne peut pas être importé dans des fichiers JavaScript. Utilisez '{1}' dans une annotation de type JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "« {0} » est un type et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "« {0} » est un changement de nom inutilisé de « {1} ». Souhaitiez-vous l’utiliser comme annotation de type?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' peut être assigné à la contrainte de type '{1}', mais '{1}' a pu être instancié avec un autre sous-type de contrainte '{2}'.", + "_0_is_automatically_exported_here_18044": "'{0}' est automatiquement exporté ici.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' est déclaré mais sa valeur n'est jamais lue.", + "_0_is_declared_but_never_used_6196": "'{0}' est déclaré mais n'est jamais utilisé.", + "_0_is_declared_here_2728": "'{0}' est déclaré ici.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' est défini en tant que propriété dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant qu'accesseur.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' est défini en tant qu'accesseur dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant que propriété d'instance.", + "_0_is_deprecated_6385": "'{0}' est déprécié.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' n'est pas une métapropriété valide pour le mot clé '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' n'est pas autorisé comme nom de paramètre.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' n'est pas autorisé en tant que nom de déclaration de variable.", + "_0_is_of_type_unknown_18046": "'{0}' est de type 'unknown'.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' est peut-être 'null'.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' est peut-être 'null' ou 'undefined'.", + "_0_is_possibly_undefined_18048": "'{0}' est peut-être 'non défini'.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' est référencé directement ou indirectement dans sa propre expression de base.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' est référencé directement ou indirectement dans sa propre annotation de type.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' est spécifié plusieurs fois. Cette utilisation va donc être remplacée.", + "_0_list_cannot_be_empty_1097": "La liste '{0}' ne peut pas être vide.", + "_0_modifier_already_seen_1030": "Modificateur '{0}' déjà rencontré.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Le modificateur «{0}» ne peut apparaître que sur un paramètre de type d’une classe, d’une interface ou d’un alias de type", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Le modificateur « {0} » ne peut apparaître que sur un paramètre de type d’une fonction, d’une méthode ou d’une classe", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Le modificateur '{0}' ne peut pas apparaître sur une déclaration de constructeur.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Le modificateur '{0}' ne peut pas apparaître dans un élément de module ou d'espace de noms.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Le modificateur '{0}' ne peut pas apparaître dans un paramètre.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Le modificateur '{0}' ne peut pas apparaître dans un membre de type.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Le modificateur «{0}» ne peut pas apparaître sur un paramètre de type", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « using ».", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Le modificateur « {0} » ne peut pas apparaître dans une déclaration « await using ».", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Le modificateur '{0}' ne peut pas apparaître dans une signature d'index.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Le modificateur '{0}' ne peut pas apparaître sur les éléments de classe de ce genre.", + "_0_modifier_cannot_be_used_here_1042": "Impossible d'utiliser le modificateur '{0}' ici.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Impossible d'utiliser le modificateur '{0}' dans un contexte ambiant.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Impossible d'utiliser les modificateurs '{0}' et '{1}' ensemble.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Le modificateur '{0}' ne peut pas être utilisé avec un identificateur privé.", + "_0_modifier_must_precede_1_modifier_1029": "Le modificateur '{0}' doit précéder le modificateur '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "« \\{0} » doit être suivi d’une expression de valeur de propriété Unicode entre accolades.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' a besoin d'une annotation de type explicite.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' référence uniquement un type mais s'utilise en tant qu'espace de noms ici.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fait uniquement référence à un type mais s'utilise en tant que valeur ici.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' fait uniquement référence à un type, mais il est utilisé ici en tant que valeur. Voulez-vous vraiment utiliser '{1} dans {0}' ?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' fait uniquement référence à un type, mais il est utilisé ici en tant que valeur. Devez-vous changer votre bibliothèque cible ? Essayez de remplacer l'option de compilateur 'lib' par es2015 ou une version ultérieure.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fait référence à une variable globale UMD, mais le fichier actuel est un module. Ajoutez une importation à la place.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fait référence à une valeur, mais il est utilisé ici en tant que type. Est-ce que vous avez voulu utiliser 'typeof {0}' ?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "« {0} » se résout en type et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "« {0} » se résout en une déclaration de type uniquement et doit être importé en utilisant une importation de type uniquement quand « verbatimModuleSyntax » est activé.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « import type » où « {0} » est importé.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "« {0} » se résout en déclaration de type uniquement et doit être marquée en tant que type uniquement dans ce fichier avant la réexportation lorsque « {1} » est activé. Envisagez d’utiliser « export type {{0} as default } ».", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "« {0} » doit être résolu en déclaration de type unique et doit être réexporté en utilisant une réexportation de type unique lorsque l’option {1} est activée.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' doit être défini dans l'objet 'compilerOptions' du fichier de configuration json", + "_0_tag_already_specified_1223": "La balise '{0}' est déjà spécifiée.", + "_0_was_also_declared_here_6203": "'{0}' a également été déclaré ici.", + "_0_was_exported_here_1377": "'{0}' a été exporté ici.", + "_0_was_imported_here_1376": "'{0}' a été importé ici.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour '{1}'.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{1}'.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Le modificateur 'abstract' peut apparaître uniquement dans une déclaration de classe, de méthode ou de propriété.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Le modificateur 'accessor' ne peut apparaître que sur une déclaration de propriété.", + "and_here_6204": "et ici.", + "and_npm_install_D_types_Slashnode_6290": "et npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Les « arguments » ne peuvent pas être référencés dans les initialiseurs de propriétés ou les blocs d'initialisation statique de classe.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "« auto » : traitez les fichiers avec des importations, des exportations, import.meta, jsx (avec jsx: react-jsx) ou un format esm (avec module : node16+) en tant que modules.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "L’expression « await » à l’intérieur d’un bloc statique de classe.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Les expressions 'await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a pas d'importations ou d'exportations. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Les expressions 'await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Impossible d'utiliser des expressions 'await' dans un initialiseur de paramètre.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' n'a aucun effet sur le type de cette expression.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Les déclarations « await using » ne sont pas autorisées dans les contextes ambiants.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Les déclarations 'await using' ne sont pas autorisées dans les clauses 'case' ou 'default', sauf si elles sont contenues dans un bloc.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Les instructions « await using » sont uniquement autorisées au niveau supérieur d’un fichier quand celui-ci est un module, mais le fichier actuel n’a aucune importation ou exportation. Envisagez d’ajouter un « export {} » vide pour faire de ce fichier un module.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Les expressions « await using » sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Des instructions « await using » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'option 'baseUrl' a la valeur '{0}'. Utilisation de cette valeur pour la résolution du nom de module non relatif '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' doit être suivi d’une lettre ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' peut uniquement être utilisé au début d'un fichier.", + "case_or_default_expected_1130": "'case' ou 'default' attendu.", + "catch_or_finally_expected_1472": "« Catch » ou « finally » attendu.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'initialiseur de membre enum 'const' donne une valeur non finie.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'initialiseur de membre enum 'const' donne une valeur non autorisée 'NaN'.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Les initialiseurs de membre enum const doivent être des expressions constantes.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Les enums 'const' ne peuvent être utilisés que dans les expressions d'accès à une propriété ou un index, ou dans la partie droite d'une déclaration d'importation, d'une assignation d'exportation ou d'une requête de type.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' ne peut pas être utilisé en tant que nom de propriété de paramètre.", + "constructor_is_a_reserved_word_18012": "'#constructor' est un mot réservé.", + "default_Colon_6903": "Par défaut :", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' ne peut pas être appelé dans un identificateur en mode strict.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' ne réexporte pas d'exportations par défaut.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' peut uniquement être utilisé dans les fichiers TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Impossible d'appliquer le modificateur 'export' aux modules ambients et aux augmentations de module, car ils sont toujours visibles.", + "extends_clause_already_seen_1172": "Clause 'extends' déjà rencontrée.", + "extends_clause_must_precede_implements_clause_1173": "La clause 'extends' doit précéder la clause 'implements'.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clause 'extends' de la classe exportée '{0}' comporte ou utilise le nom privé '{1}'.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clause 'extends' de la classe exportée comporte ou utilise le nom privé '{0}'.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clause 'extends' de l'interface exportée '{0}' comporte ou utilise le nom privé '{1}'.", + "false_unless_checkJs_is_set_6932": "« false », sauf si « checkJs » est défini", + "false_unless_composite_is_set_6906": "« false », sauf si « composite » est défini", + "file_6025": "fichier", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Les boucles 'for await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a aucune importation ou exportation. Ajoutez un 'export {}' vide pour faire de ce fichier un module.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Les boucles 'for await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Les boucles « for await » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Les accesseurs 'get' et 'set' ne peuvent pas déclarer les paramètres 'this'.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "«[]» si « files » est spécifié, sinon « [\"**/*\"] »", + "implements_clause_already_seen_1175": "Clause 'implements' déjà rencontrée.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Les clauses 'implements' peuvent uniquement être utilisées dans les fichiers TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' peut uniquement être utilisé dans les fichiers TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Les déclarations 'infer' sont uniquement autorisées dans la clause 'extends' d’un type conditionnel.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "« \\k » doit être suivi d’un nom de groupe de capture placé entre crochets angulaires.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ne peut pas être utilisé comme nom dans les déclarations 'let' ou 'const'.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'expression 'new', dont la cible ne dispose pas d'une signature de construction, possède implicitement un type 'any'.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "« [ « node_modules », « bower_components », « jspm_packages »] », plus la valeur de « outDir » si elle est spécifiée.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext` si `module` est `nodenext` ; `node16` si `module` est `node16` ou `node18` ; sinon, `bundler`.", + "one_of_Colon_6900": "L'un de :", + "one_or_more_Colon_6901": "un ou plusieurs :", + "options_6024": "options", + "or_JSX_element_expected_1145": "'{' ou élément JSX attendu.", + "or_expected_1144": "'{' ou ';' attendu.", + "package_json_does_not_have_a_0_field_6100": "'package.json' n'a aucun champ '{0}'.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' n'a aucune entrée 'typesVersions' qui correspond à la version '{0}'.", + "package_json_had_a_falsy_0_field_6220": "'package.json' a un champ '{0}' erroné.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' a un champ '{0}' '{1}' qui fait référence à '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "« package.json » a un champ « peerDependencies ».", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' a une entrée 'typesVersions' '{0}' qui n'est pas une plage SemVer valide.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' a une entrée 'typesVersions' '{0}' qui correspond à la version de compilateur '{1}'. Recherche d'un modèle correspondant au nom de module '{2}'.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' a un champ 'typesVersions' avec des mappages de chemins spécifiques à la version.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "L’étendue package.json « {0} » mappe explicitement le spécificateur « {1} » sur la valeur null.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L’étendue package.json « {0} » a un type non valide pour la cible du spécificateur « {1} »", + "package_json_scope_0_has_no_imports_defined_6273": "L’étendue package.json « {0} » ne comporte aucune importation définie.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "L'option 'paths' est spécifiée. Recherche d'un modèle correspondant au nom de module '{0}'.", + "q_is_only_available_inside_character_class_1511": "« \\q » n’est disponible que dans la classe de caractères.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "« \\q » doit être suivi d’alternatives de chaîne entre accolades.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Le modificateur 'readonly' peut apparaître uniquement dans une déclaration de propriété ou une signature d'index.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Le modificateur de type 'readonly' est uniquement autorisé sur les types littéraux de tableau et de tuple.", + "require_call_may_be_converted_to_an_import_80005": "L'appel de 'require' peut être converti en import.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "« mode résolution » ne peut être défini que pour les importations de type uniquement.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "« mode résolution » est la seule clé valide pour les assertions d’importation de type.", + "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' doit être 'require' ou 'import'.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'option 'rootDirs' est définie. Utilisation de celle-ci pour la résolution du nom de module relatif '{0}'.", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' ne peut être référencé que dans une classe dérivée.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' ne peut être référencé que dans les membres des classes dérivées ou les expressions littérales d'objet.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Impossible de référencer 'super' dans un nom de propriété calculée.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Impossible de référencer 'super' dans des arguments de constructeur.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' est uniquement autorisé dans les membres des expressions littérales d'objet quand l'option 'target' a la valeur 'ES2015' ou une valeur supérieure.", + "super_may_not_use_type_arguments_2754": "'super' ne peut pas utiliser d'arguments de type.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "'super' doit être appelé avant d'accéder à une propriété de 'super' dans le constructeur d'une classe dérivée.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "'super' doit être appelé avant d'accéder à 'this' dans le constructeur d'une classe dérivée.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' doit être suivi d'une liste d'arguments ou d'un accès au membre.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "L'accès aux propriétés 'super' est autorisé uniquement dans un constructeur, une fonction membre ou un accesseur membre d'une classe dérivée.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Impossible de référencer 'this' dans un nom de propriété calculée.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Impossible de référencer 'this' dans le corps d'un module ou d'un espace de noms.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Impossible de référencer 'this' dans un initialiseur de propriété statique.", + "this_cannot_be_referenced_in_current_location_2332": "Impossible de référencer 'this' dans l'emplacement actuel.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' possède implicitement le type 'any', car il n'a pas d'annotation de type.", + "true_for_ES2022_and_above_including_ESNext_6930": "'true’ pour ES2022 et versions ultérieures, y compris ESNext.", + "true_if_composite_false_otherwise_6909": "« true » si « composite », « false » sinon", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "« true » quand « moduleResolution » a la valeur « node16 », « nodenext » ou « bundler » ; sinon « false ».", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc : compilateur TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "Le fichier tsconfig.json est présent mais ne sera pas chargé si des fichiers sont spécifiés en ligne de commande. Utilisez '--ignoreConfig' pour ignorer cette erreur.", + "type_Colon_6902": "type :", + "unique_symbol_types_are_not_allowed_here_1335": "Les types 'unique symbol' ne sont pas autorisés ici.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Les types 'unique symbol' sont uniquement autorisés sur les variables d'une déclaration de variable.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Les types 'unique symbol' ne peuvent pas être utilisés dans une déclaration de variable avec un nom de liaison.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "La directive 'use strict' ne peut pas être utilisée avec une liste de paramètres non simple.", + "use_strict_directive_used_here_1349": "directive 'use strict' utilisée ici.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Les déclarations « using » ne sont pas autorisées dans les contextes ambiants.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Les déclarations 'using' ne sont pas autorisées dans les clauses 'case' ou 'default' sauf si elles sont incluses dans un bloc.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Les instructions 'with' ne sont pas autorisées dans un bloc de fonctions async.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Les instructions 'with' ne sont pas autorisées en mode strict.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "L'expression 'yield' génère implicitement un type 'any', car le générateur qui la contient n'a pas d'annotation de type de retour.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Impossible d'utiliser des expressions 'yield' dans un initialiseur de paramètre." +} diff --git a/tsc/internal/diagnostics/loc/it-IT.generated.json b/tsc/internal/diagnostics/loc/it-IT.generated.json index 044ddfbd9d975..a9f87a1e5de23 100644 --- a/tsc/internal/diagnostics/loc/it-IT.generated.json +++ b/tsc/internal/diagnostics/loc/it-IT.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "TUTTE LE OPZIONI DEL COMPILATORE", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Non è possibile usare un modificatore '{0}' con una dichiarazione di importazione.", - "A_0_parameter_must_be_the_first_parameter_2680": "Il primo parametro deve essere '{0}'.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Un tag '@template' di JSDoc non può seguire un tag '@typedef', '@callback' o '@overload'", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commento '@typedef' di JSDoc non può contenere più tag '@type'.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Non è possibile usare un valore letterale 'bigint' come nome per la proprietà.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Un valore letterale bigint non può usare la notazione esponenziale.", - "A_bigint_literal_must_be_an_integer_1353": "Un valore letterale bigint deve essere un numero intero.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parametro del criterio di binding non può essere facoltativo in una firma di implementazione.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Un'istruzione 'break' può essere usata solo all'interno di un'iterazione di inclusione o di un'istruzione switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Un'istruzione 'break' può solo passare a un'etichetta di un'istruzione di inclusione.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una classe di caratteri non deve contenere un segno di punteggiatura doppio riservato. La barra rovesciata stava per un carattere escape?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un intervallo di classi di caratteri non deve essere delimitato da un'altra classe di caratteri.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una classe può implementare solo un identificatore/nome qualificato con argomenti tipo facoltativi.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una classe può implementare solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una classe non può estendere un elemento di tipo primitivo come '{0}'. Le classi possono estendere solo valori costruibili.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una classe non può implementare un tipo primitivo come '{0}'. Può implementare solo altri tipi di oggetto denominati.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "È necessario assegnare un nome a una dichiarazione di classe senza modificatore 'default'.", - "A_class_member_cannot_have_the_0_keyword_1248": "Un membro di classe non può contenere la parola chiave '{0}'.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Non sono consentite espressioni con virgole in un nome di proprietà calcolato.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nome di proprietà calcolato non può fare riferimento a un parametro di tipo dal tipo che lo contiene.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nome di proprietà calcolato in una dichiarazione di proprietà di classe deve avere un tipo di valore letterale semplice o un tipo 'unique symbol'.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nome di proprietà calcolato in un overload di metodo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nome di proprietà calcolato in un valore letterale di tipo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nome di proprietà calcolato in un contesto di ambiente deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nome di proprietà calcolato in un'interfaccia deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nome di proprietà calcolato deve essere di tipo 'string', 'number', 'symbol' o 'any'.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Un'asserzione 'const' può essere applicata solo a riferimenti a membri di enumerazione oppure a valori letterali stringa, numerici, booleani, di oggetto o matrice.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "È possibile accedere a un membro di enumerazione const solo tramite un valore letterale stringa.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un inizializzatore 'const' in un contesto di ambiente deve essere un valore letterale numerico o stringa oppure un riferimento a un'enumerazione di valori letterali.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un costruttore non può contenere una chiamata 'super' quando la relativa classe estende 'null'.", - "A_constructor_cannot_have_a_this_parameter_2681": "Un costruttore non può contenere un parametro 'this'.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Un'istruzione 'continue' può essere usata solo all'interno di un'istruzione di iterazione di inclusione.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Un'istruzione 'continue' può solo passare a un'etichetta di un'istruzione di iterazione di inclusione.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Non è possibile importare un file di dichiarazione senza 'import type'. Si intendeva importare un file di implementazione '{0}'?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Non è possibile usare un modificatore 'declare' in un contesto già di ambiente.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un elemento Decorator può solo decorare un'implementazione del metodo e non un overload.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una clausola 'default' non può essere specificata più volte in un'istruzione 'switch'.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "È possibile usare un'esportazione predefinita solo in un modulo di tipo ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Un'esportazione predefinita deve essere al livello principale di una dichiarazione di file o di modulo.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "In questo contesto non sono consentite asserzioni di assegnazione definite '!'.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Una dichiarazione di destrutturazione deve includere un inizializzatore.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Con una chiamata di importazione dinamica in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una chiamata di importazione dinamica restituisce un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", - "A_file_cannot_have_a_reference_to_itself_1006": "Un file non può contenere un riferimento a se stesso.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una funzione che restituisce 'never' non può includere un punto finale raggiungibile.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una funzione chiamata con la parola chiave 'new' non può contenere un tipo 'this' con valore 'void'.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una funzione il cui tipo dichiarato non è 'undefined', 'void' o 'any' deve restituire un valore.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Un generatore non può contenere un'annotazione di tipo 'void'.", - "A_get_accessor_cannot_have_parameters_1054": "Una funzione di accesso 'get' non può contenere parametri.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Una funzione di accesso get deve essere accessibile almeno come setter", - "A_get_accessor_must_return_a_value_2378": "Una funzione di accesso 'get' deve restituire un valore.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento tupla con etichetta è dichiarato come facoltativo con un punto interrogativo dopo il nome e prima dei due punti, anziché dopo il tipo.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento tupla con etichetta è dichiarato come inattivo con '...' prima del nome, anziché prima del tipo.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un tipo di cui è stato eseguito il mapping non può dichiarare proprietà o metodi.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inizializzatore di membro in una dichiarazione di enumerazione non può fare riferimento a membri dichiarati successivamente, inclusi quelli definiti in altre enumerazioni.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una classe mixin deve includere un costruttore con un unico parametro REST di tipo 'any[]'.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una classe mixin estesa da una variabile di tipo contenente una firma del costrutto astratta deve essere dichiarata anche come 'abstract'.", - "A_module_cannot_have_multiple_default_exports_2528": "Un modulo non può includere più esportazioni predefinite.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una dichiarazione di spazio dei nomi non può essere presente in un file diverso rispetto a una classe o funzione con cui è stato eseguito il merge.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una dichiarazione di spazio dei nomi non può essere specificata prima di una classe o funzione con cui è stato eseguito il merge.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una dichiarazione di spazio dei nomi è consentita solo al livello superiore di uno spazio dei nomi o di un modulo.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una dichiarazione 'namespace' non deve essere dichiarata usando la parola chiave 'module'. Usare invece la parola chiave 'namespace'.", - "A_non_dry_build_would_build_project_0_6357": "Se si esegue una compilazione senza flag -dry, verrà compilato il progetto '{0}'", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Se si esegue una compilazione senza flag -dry, i file seguenti verranno eliminati: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Se si esegue una compilazione non di prova, i timestamp dell'output del progetto '{0}' verranno aggiornati", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inizializzatore di parametro è consentito solo in un'implementazione di funzione o costruttore.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Non è possibile dichiarare una proprietà di parametro usando un parametro REST.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Una proprietà di parametro è consentita solo in un'implementazione di costruttore.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Non è possibile dichiarare una proprietà di parametro con un modello di associazione.", - "A_promise_must_have_a_then_method_1059": "Una promessa deve contenere un metodo 'then'.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Una proprietà di una classe il cui tipo è un tipo 'unique symbol' deve essere sia 'static' che 'readonly'.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Una proprietà di un'interfaccia o di un valore letterale di tipo il cui tipo è un tipo 'unique symbol' deve essere 'readonly'.", - "A_required_element_cannot_follow_an_optional_element_1257": "Non è possibile specificare un elemento obbligatorio dopo un elemento facoltativo.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parametro obbligatorio non può seguire un parametro facoltativo.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest non può contenere un criterio di binding.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Non è possibile specificare un elemento REST dopo un altro elemento REST.", - "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest non può contenere un nome proprietà.", - "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest non può includere un inizializzatore.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest deve essere l'ultimo di un criterio di destrutturazione.", - "A_rest_element_type_must_be_an_array_type_2574": "Un tipo di elemento rest deve essere un tipo di matrice.", - "A_rest_parameter_cannot_be_optional_1047": "Un parametro rest non può essere facoltativo.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Un parametro rest non può contenere un inizializzatore.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un parametro rest deve essere l'ultimo di un elenco di parametri.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Un parametro rest deve essere di un tipo di matrice.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un modello di associazione o un parametro REST non può contenere una virgola finale.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Un'istruzione 'return' può essere usata solo all'interno di un corpo di funzione.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Non è possibile usare un'istruzione 'return' all'interno di un blocco statico di classe.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie di voci che ripetono il mapping delle importazioni a percorsi di ricerca relativi al valore di 'baseUrl'.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Una funzione di accesso 'set' non può contenere un'annotazione di tipo restituito.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Una funzione di accesso 'set' non può contenere un parametro facoltativo.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Una funzione di accesso 'set' non può contenere il parametro rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Una funzione di accesso 'set' deve contenere un solo parametro.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parametro della funzione di accesso 'set' non può contenere un inizializzatore.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argomento spread deve avere un tipo di tupla o essere passato a un parametro rest.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Una chiamata 'super' deve essere un'istruzione a livello radice all'interno di un costruttore di una classe derivata che contiene proprietà inizializzate, proprietà dei parametri o identificatori privati.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una chiamata 'super' deve essere la prima istruzione del costruttore a fare riferimento a 'super' o 'this' quando una classe derivata contiene proprietà inizializzate, proprietà di parametri o identificatori privati.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Un guard di tipo basato su 'this' non è compatibile con uno basato su parametri.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un tipo 'this' è disponibile solo in un membro non statico di una classe o di interfaccia.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Non è possibile usare un modificatore 'export' di primo livello nelle dichiarazioni di valori in un modulo CommonJS quando è abilitato 'verbatimModuleSyntax'.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un file 'tsconfig.json' è già definito in: '{0}'.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membro di tupla non può essere sia facoltativo che inattivo.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo di tupla non può essere indicizzato con un valore negativo.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione di asserzione tipi. Provare a racchiudere l'espressione tra parentesi.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Una proprietà di valore letterale di tipo non può contenere un inizializzatore.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Un'importazione solo di tipi può specificare un'importazione predefinita o binding denominati, ma non entrambi.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un predicato di tipo non può fare riferimento a un parametro rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un predicato di tipo non può fare riferimento all'elemento '{0}' in un criterio di binding.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Un predicato di tipo è consentito solo nella posizione del tipo restituito per le funzioni e i metodi.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Il tipo di un predicato di tipo deve essere assegnabile al tipo del relativo parametro.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un tipo a cui viene fatto riferimento in una firma decorata deve essere importato con 'import type' o un'importazione dello spazio dei nomi quando sono abilitati 'isolatedModules' e 'emitDecoratorMetadata'.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Una variabile il cui tipo è un tipo 'unique symbol' deve essere 'const'.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Un'espressione 'yield' è consentita solo nel corpo di un generatore.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Non è possibile accedere al metodo astratto '{0}' nella classe '{1}' tramite l'espressione super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "I metodi astratti possono essere inclusi solo in una classe astratta.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Le proprietà astratte possono essere incluse solo in una classe astratta.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Non è possibile accedere alla proprietà astratta '{0}' nella classe '{1}' nel costruttore.", - "Accessibility_modifier_already_seen_1028": "Il modificatore di accessibilità è già presente.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Le funzioni di accesso sono disponibili solo se destinate a ECMAScript 5 e versioni successive.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Le funzioni di accesso devono essere tutte astratte o tutte non astratte.", - "Add_0_to_unresolved_variable_90008": "Aggiungere '{0}.' alla variabile non risolta", - "Add_a_return_statement_95111": "Aggiungere un'istruzione return", - "Add_a_return_type_to_the_function_declaration_9031": "Aggiungere un elemento di tipo restituito alla dichiarazione di funzione.", - "Add_a_return_type_to_the_function_expression_9030": "Aggiungere un elemento di tipo restituito all'espressione della funzione.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Aggiungere un tipo restituito alla dichiarazione della funzione di accesso get.", - "Add_a_return_type_to_the_method_9034": "Aggiungere un tipo restituito al metodo", - "Add_a_type_annotation_to_the_parameter_0_9028": "Aggiungere un'annotazione di tipo al parametro {0}.", - "Add_a_type_annotation_to_the_property_0_9029": "Aggiungere un'annotazione di tipo alla proprietà {0}.", - "Add_a_type_annotation_to_the_variable_0_9027": "Aggiungere un'annotazione di tipo alla variabile {0}.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Aggiunge un tipo al parametro della dichiarazione della funzione di accesso set.", - "Add_all_missing_async_modifiers_95041": "Aggiungere tutti i modificatori 'async' mancanti", - "Add_all_missing_attributes_95168": "Aggiungi tutti gli attributi mancanti", - "Add_all_missing_call_parentheses_95068": "Aggiungere tutte le parentesi mancanti nelle chiamate", - "Add_all_missing_function_declarations_95157": "Aggiungere tutte le dichiarazioni di funzione mancanti", - "Add_all_missing_imports_95064": "Aggiungere tutte le importazioni mancanti", - "Add_all_missing_members_95022": "Aggiungere tutti i membri mancanti", - "Add_all_missing_override_modifiers_95162": "Aggiungere tutti i modificatori 'override' mancanti", - "Add_all_missing_parameters_95190": "Aggiungere tutti i parametri mancanti", - "Add_all_missing_properties_95166": "Aggiunge tutte le proprietà mancanti", - "Add_all_missing_return_statement_95114": "Aggiungere tutte le istruzioni return mancanti", - "Add_all_missing_super_calls_95039": "Aggiungere tutte le chiamate a super mancanti", - "Add_all_missing_type_annotations_90067": "Aggiungere tutte le annotazioni di tipo mancante", - "Add_all_optional_parameters_95193": "Aggiungere tutti i parametri facoltativi", - "Add_annotation_of_type_0_90062": "Aggiungere annotazione di tipo '{0}'", - "Add_async_modifier_to_containing_function_90029": "Aggiungere il modificatore async alla funzione contenitore", - "Add_await_95083": "Aggiungere 'await'", - "Add_await_to_initializer_for_0_95084": "Aggiungere 'await' all'inizializzatore per '{0}'", - "Add_await_to_initializers_95089": "Aggiungere 'await' agli inizializzatori", - "Add_braces_to_arrow_function_95059": "Aggiungere le parentesi graffe alla funzione arrow", - "Add_const_to_all_unresolved_variables_95082": "Aggiungere 'const' a tutte le variabili non risolte", - "Add_const_to_unresolved_variable_95081": "Aggiungere 'const' alla variabile non risolta", - "Add_definite_assignment_assertion_to_property_0_95020": "Aggiungere l'asserzione di assegnazione definita alla proprietà '{0}'", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Aggiungere le asserzioni di assegnazione definite a tutte le proprietà non inizializzate", - "Add_export_to_make_this_file_into_a_module_95097": "Aggiungere 'export {}' per trasformare questo file in un modulo", - "Add_extends_constraint_2211": "Aggiungere il vincolo 'extends'.", - "Add_extends_constraint_to_all_type_parameters_2212": "Aggiungere il vincolo `extends` a tutti i parametri di tipo", - "Add_import_from_0_90057": "Aggiungere l'importazione da \"{0}\"", - "Add_index_signature_for_property_0_90017": "Aggiungere la firma dell'indice per la proprietà '{0}'", - "Add_initializer_to_property_0_95019": "Aggiungere l'inizializzatore alla proprietà '{0}'", - "Add_initializers_to_all_uninitialized_properties_95027": "Aggiungere gli inizializzatori a tutte le proprietà non inizializzate", - "Add_missing_attributes_95167": "Aggiungi attributi mancanti", - "Add_missing_call_parentheses_95067": "Aggiungere le parentesi mancanti nelle chiamate", - "Add_missing_comma_for_object_member_completion_0_95187": "Aggiungere la virgola mancante per il completamento dei membri dell'oggetto '{0}'.", - "Add_missing_enum_member_0_95063": "Aggiungere il membro di enumerazione mancante '{0}'", - "Add_missing_function_declaration_0_95156": "Aggiungere la dichiarazione di funzione mancante '{0}'", - "Add_missing_new_operator_to_all_calls_95072": "Aggiungere l'operatore mancante 'new' a tutte le chiamate", - "Add_missing_new_operator_to_call_95071": "Aggiungere l'operatore mancante 'new' alla chiamata", - "Add_missing_parameter_to_0_95188": "Aggiungere il parametro mancante a '{0}'", - "Add_missing_parameters_to_0_95189": "Aggiungere i parametri mancanti a '{0}'", - "Add_missing_properties_95165": "Aggiunge le proprietà mancanti", - "Add_missing_super_call_90001": "Aggiungere la chiamata mancante a 'super()'", - "Add_missing_typeof_95052": "Aggiungere l'elemento 'typeof' mancante", - "Add_names_to_all_parameters_without_names_95073": "Aggiungere i nomi a tutti i parametri senza nomi", - "Add_optional_parameter_to_0_95191": "Aggiungere i parametri facoltativi a '{0}'", - "Add_optional_parameters_to_0_95192": "Aggiungi i parametri facoltativi a '{0}'", - "Add_or_remove_braces_in_an_arrow_function_95058": "Aggiungere o rimuovere le parentesi graffe in una funzione arrow", - "Add_override_modifier_95160": "Aggiungere il modificatore 'override'", - "Add_parameter_name_90034": "Aggiungere il nome del parametro", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Aggiungere il qualificatore a tutte le variabili non risolte corrispondenti a un nome di membro", - "Add_resolution_mode_import_attribute_95196": "Aggiungi attributo di importazione 'resolution-mode'", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Aggiungi l'attributo di importazione 'resolution-mode' a tutte le importazioni solo tipo che lo richiedono", - "Add_return_type_0_90063": "Aggiungere '{0}' del tipo restituito", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Aggiungere soddisfa e un'asserzione di tipo a questa espressione (soddisfa T come T) per rendere il tipo esplicito.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Aggiungere soddisfa e un'asserzione di tipo inline con '{0}'", - "Add_to_all_uncalled_decorators_95044": "Aggiungere '()' a tutti gli elementi Decorator non chiamati", - "Add_ts_ignore_to_all_error_messages_95042": "Aggiungere '@ts-ignore' a tutti i messaggi di errore", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Aggiunge 'undefined' a un tipo quando l'accesso viene eseguito tramite un indice.", - "Add_undefined_to_optional_property_type_95169": "Aggiungi 'undefined' al tipo di proprietà facoltativo", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Aggiungere il tipo non definito a tutte le proprietà non inizializzate", - "Add_undefined_type_to_property_0_95018": "Aggiungere il tipo 'undefined' alla proprietà '{0}'", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Aggiungere la conversione 'unknown' per i tipi non sovrapposti", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Aggiungere 'unknown' a tutte le conversioni di tipi non sovrapposti", - "Add_void_to_Promise_resolved_without_a_value_95143": "Aggiungere 'void' all'elemento Promise risolto senza un valore", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Aggiungere 'void' a tutti gli elementi Promise risolti senza un valore", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Aggiungere un file tsconfig.json per organizzare più facilmente progetti che contengono sia file TypeScript che JavaScript. Per altre informazioni, vedere https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Tutte le dichiarazioni di '{0}' devono avere vincoli identici.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Tutte le dichiarazioni di '{0}' devono contenere modificatori identici.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tutte le dichiarazioni di '{0}' devono contenere parametri di tipo identici.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Tutte le dichiarazioni di un metodo astratto devono essere consecutive.", - "All_destructured_elements_are_unused_6198": "Tutti gli elementi destrutturati sono inutilizzati.", - "All_imports_in_import_declaration_are_unused_6192": "Tutte le importazioni nella dichiarazione di importazione sono inutilizzate.", - "All_type_parameters_are_unused_6205": "Tutti i parametri di tipo sono inutilizzati.", - "All_variables_are_unused_6199": "Tutte le variabili sono inutilizzate.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Acconsenti che i file JavaScript facciano parte del tuo programma. Usa l'opzione 'checkJs' per acquisire gli errori da questi file.", - "Allow_accessing_UMD_globals_from_modules_6602": "Consentire l'accesso alle istruzioni globali UMD dai moduli.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Consente di eseguire importazioni predefinite da moduli senza esportazione predefinita. Non influisce sulla creazione del codice ma solo sul controllo dei tipi.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Consente 'import x from y' quando un modulo non contiene un'esportazione predefinita.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Consente di eseguire una volta per progetto l'importazione di funzioni helper da tslib, invece di includerle per ogni file.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Consentire alle importazioni di includere le estensioni di file TypeScript. Richiede l'impostazione di '--moduleResolution bundler' e '--noEmit' o '--emitDeclarationOnly'.", - "Allow_javascript_files_to_be_compiled_6102": "Consente la compilazione di file JavaScript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Consente che più cartelle vengano considerate come una sola durante la risoluzione dei moduli.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Il nome file già incluso '{0}' differisce da quello '{1}' solo per l'uso di maiuscole/minuscole.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Non è possibile specificare il nome di modulo relativo nella dichiarazione di modulo di ambiente.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "I moduli di ambiente non possono essere annidati in altri moduli o spazi dei nomi.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un modulo AMD non può includere più assegnazioni di nome.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Una funzione di accesso astratta non può contenere un'implementazione.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Non è possibile usare un modificatore di accessibilità con un identificatore privato.", - "An_accessor_cannot_have_type_parameters_1094": "Una funzione di accesso non può contenere parametri di tipo.", - "An_accessor_property_cannot_be_declared_optional_1276": "Una proprietà 'accessor' non può essere dichiarata facoltativa.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una dichiarazione di modulo di ambiente è consentita solo al primo livello in un file.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Non è stato specificato alcun argomento per '{0}'.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Non è stato specificato alcun argomento corrispondente a questo modello di associazione.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmetico deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Una funzione arrow non può contenere un parametro 'this'.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Con una funzione o un metodo asincrono in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Un metodo o una funzione asincrona deve restituire un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", - "An_async_iterator_must_have_a_next_method_2519": "Un iteratore asincrono deve contenere un metodo 'next()'.", - "An_element_access_expression_should_take_an_argument_1011": "Un'espressione di accesso a elementi deve accettare un argomento.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Non è possibile assegnare un nome con un identificatore privato a un membro di enumerazione.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Il nome di un membro di enumerazione non può essere numerico.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Il nome di un membro di enumerazione deve essere seguito da ',', '=' o '}'.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Versione espansa di queste informazioni, che mostra tutte le opzioni possibili del compilatore", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Non è possibile usare un'assegnazione di esportazione in un modulo con altri elementi esportati.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Non è possibile usare un'assegnazione di esportazione in uno spazio dei nomi.", - "An_export_assignment_cannot_have_modifiers_1120": "Un'assegnazione di esportazione non può contenere modificatori.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Un'assegnazione di esportazione deve essere al primo livello di una dichiarazione di file o di modulo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una dichiarazione di esportazione può essere usata solo al livello superiore di un modulo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una dichiarazione di esportazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", - "An_export_declaration_cannot_have_modifiers_1193": "Una dichiarazione di esportazione non può contenere modificatori.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Non è possibile testare la veridicità di un'espressione di tipo 'void'.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valore di escape Unicode avanzato deve essere compreso tra 0x0 e 0x10FFFF inclusi.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Non è possibile specificare un identificatore o una parola chiave subito dopo un valore letterale numerico.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Non è possibile dichiarare un'implementazione in contesti di ambiente.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias di importazione non può fare riferimento a una dichiarazione esportata con 'export type'.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias di importazione non può fare riferimento a una dichiarazione importata con 'import type'.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias di importazione non può essere risolto in una dichiarazione type o type-only quando è abilitato 'verbatimModuleSyntax'.", - "An_import_alias_cannot_use_import_type_1392": "Un alias di importazione non può usare 'import type'", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una dichiarazione di importazione può essere usata solo al livello superiore di un modulo.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una dichiarazione di importazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", - "An_import_declaration_cannot_have_modifiers_1191": "Una dichiarazione di importazione non può contenere modificatori.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un percorso di importazione può terminare con un'estensione '{0}' solo quando 'allowImportingTsExtensions' è abilitato.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Una firma dell'indice non può contenere un parametro rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Una firma dell'indice non può contenere una virgola finale.", - "An_index_signature_must_have_a_type_annotation_1021": "Una firma dell'indice deve contenere un'annotazione di tipo.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Una firma dell'indice deve contenere un solo parametro.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un parametro della firma dell'indice non può contenere un punto interrogativo.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parametro della firma dell'indice non può contenere un modificatore di accessibilità.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parametro della firma dell'indice non può contenere un inizializzatore.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parametro della firma dell'indice deve contenere un'annotazione di tipo.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo di parametro della firma dell'indice non può essere un tipo di valore letterale o un tipo generico. Considerare l'utilizzo di un tipo di oggetto con mapping.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un tipo di parametro della firma dell'indice deve essere 'stringa', 'numero', 'simbolo' o un tipo di valore letterale del modello.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Un'espressione di creazione di un'istanza non può essere seguita da un accesso a proprietà.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Un'interfaccia può estendere solo un identificatore/nome qualificato con argomenti tipo facoltativi.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Un'interfaccia non può estendere un elemento di tipo primitivo come '{0}'. Può estendere solo altri tipi di oggetto denominati.", - "An_interface_property_cannot_have_an_initializer_1246": "Una proprietà di interfaccia non può contenere un inizializzatore.", - "An_iterator_must_have_a_next_method_2489": "Un iteratore deve contenere un metodo 'next()'.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Quando si usa un'istruzione @jsx con frammenti JSX, è necessaria un'istruzione pragma @jsxFrag.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un valore letterale di oggetto non può contenere più funzioni di accesso get/set con lo stesso nome.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un valore letterale di oggetto non può contenere più proprietà con lo stesso nome.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un valore letterale di oggetto non può contenere proprietà e funzioni di accesso con lo stesso nome.", - "An_object_member_cannot_be_declared_optional_1162": "Un membro di oggetto non può essere dichiarato come facoltativo.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Il metodo '[Symbol.hasInstance]' di un oggetto deve restituire un valore booleano da utilizzare a destra di un'espressione 'instanceof'.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Una catena facoltativa non può contenere identificatori privati.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Non è possibile specificare un elemento facoltativo dopo un elemento REST.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Un valore esterno di 'this' è nascosto da questo contenitore.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Non è possibile dichiarare come generatore una firma di overload.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione unaria con l'operatore '{0}'. Provare a racchiudere l'espressione tra parentesi.", - "Annotate_everything_with_types_from_JSDoc_95043": "Annotare tutto con tipi di JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annotare tipi di proprietà funzione expando in uno spazio dei nomi", - "Annotate_with_type_from_JSDoc_95009": "Annotare con tipo di JSDoc", - "Another_export_default_is_here_2753": "In questo punto è presente un'altra impostazione predefinita per l'esportazione.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualsiasi proprietà Unicode che potrebbe corrispondere a più di un singolo carattere è disponibile solo quando è impostato il flag Unicode Sets (v).", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualsiasi elemento che potrebbe corrispondere a più di un singolo carattere non è valido all'interno di una classe di caratteri negati.", - "Are_you_missing_a_semicolon_2734": "Manca un punto e virgola?", - "Argument_expression_expected_1135": "È prevista l'espressione di argomento.", - "Argument_for_0_option_must_be_Colon_1_6046": "L'argomento per l'opzione '{0}' deve essere {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "L'argomento dell'importazione dinamica non può essere l'elemento spread.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "L'argomento di tipo '{0}' non è assegnabile al parametro di tipo '{1}'.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argomento di tipo '{0}' non può essere assegnato al parametro di tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Gli argomenti per il parametro REST '{0}' non sono stati specificati.", - "Array_element_destructuring_pattern_expected_1181": "È previsto il criterio di destrutturazione dell'elemento della matrice.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Non è possibile dedurre matrici con elementi estesi con --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Con le asserzioni ogni nome nella destinazione di chiamata deve essere dichiarato con un'annotazione di tipo esplicita.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Con le asserzioni la destinazione di chiamata deve essere un identificatore o un nome completo.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L'assegnazione di proprietà a funzioni senza dichiararle non è supportata con --isolatedDeclarations. Aggiungere una dichiarazione esplicita per le proprietà assegnate a questa funzione.", - "Asterisk_Slash_expected_1010": "È previsto '*/'.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Almeno una funzione di accesso deve avere un'annotazione di tipo esplicita con --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Gli aumenti per l'ambito globale possono solo essere direttamente annidati in dichiarazioni di modulo di ambiente o moduli esterni.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Gli aumenti per l'ambito globale devono contenere il modificatore 'declare', a meno che non siano già presenti in un contesto di ambiente.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Il rilevamento automatico per le defizioni di tipi è abilitato nel progetto '{0}'. Verrà eseguito il passaggio di risoluzione aggiuntivo per il modulo '{1}' usando il percorso della cache '{2}'.", - "BUILD_OPTIONS_6919": "OPZIONI DI COMPILAZIONE", - "Backwards_Compatibility_6253": "Compatibilità con le versioni precedenti", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Le espressioni di classi di base non possono fare riferimento a parametri di tipo classe.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Il tipo restituito '{0}' del costruttore di base non è un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Il tipo restituito deve essere identico per tutti i costruttori di base.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Directory di base per risolvere i nomi di modulo non assoluti.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "I valori letterali bigint non sono disponibili quando la destinazione è precedente a ES2020.", - "Binary_digit_expected_1177": "È prevista una cifra binaria.", - "Binding_element_0_implicitly_has_an_1_type_7031": "L'elemento di binding '{0}' contiene implicitamente un tipo '{1}'.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "La variabile con ambito blocco '{0}' è stata usata prima di essere stata dichiarata.", - "Build_a_composite_project_in_the_working_directory_6925": "Compila un progetto composito nella directory di lavoro.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilare tutti i progetti, anche quelli che sembrano aggiornati.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilare uno o più progetti e le relative dipendenze, se non aggiornate", - "Build_option_0_requires_a_value_of_type_1_5073": "Con l'opzione di compilazione '{0}' è richiesto un valore di tipo {1}.", - "Building_project_0_6358": "Compilazione del progetto '{0}'...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Per gli enumeratori predefiniti viene creata un'istanza con un tipo 'TReturn' di tipo 'undefined' invece di 'any'.", - "COMMAND_LINE_FLAGS_6921": "FLAG DELLA RIGA DI COMANDO", - "COMMON_COMMANDS_6916": "COMANDI COMUNI", - "COMMON_COMPILER_OPTIONS_6920": "OPZIONI COMUNI DEL COMPILATORE", - "Call_decorator_expression_90028": "Chiamare l'espressione Decorator", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "I tipi restituiti delle firme di chiamata '{0}' e '{1}' sono incompatibili.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La firma di chiamata, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Le firme di chiamata senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "La destinazione della chiamata non contiene alcuna firma.", - "Can_only_convert_logical_AND_access_chains_95142": "È possibile convertire solo catene di accesso AND logiche", - "Can_only_convert_named_export_95164": "È possibile solo convertire l'esportazione denominata", - "Can_only_convert_property_with_modifier_95137": "È possibile convertire solo la proprietà con il modificatore", - "Can_only_convert_string_concatenations_and_string_literals_95154": "È possibile convertire solo concatenazioni di stringhe e valori letterali stringa", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Non è possibile accedere a '{0}.{1}' perché '{0}' è un tipo ma non uno spazio dei nomi. Si intendeva recuperare il tipo della proprietà '{1}' in '{0}' con '{0}[\"{1}\"]'?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Non è possibile accedere '{0}' da un altro file senza qualifica quando '{1}' è abilitato. In alternativa, usare '{2}'.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Non è possibile accedere alle enumerazioni const di Ambient quando '{0}' è abilitato.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Non è possibile assegnare un tipo di costruttore '{0}' a un tipo di costruttore '{1}'.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Non è possibile assegnare un tipo di costruttore astratto a un tipo di costruttore non astratto.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Non è possibile assegnare a '{0}' perché è una classe.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Non è possibile assegnare a '{0}' perché è una costante.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Non è possibile assegnare a '{0}' perché è una funzione.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Non è possibile assegnare a '{0}' perché è uno spazio dei nomi.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Non è possibile assegnare a '{0}' perché è una proprietà di sola lettura.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Non è possibile assegnare a '{0}' perché è un'enumerazione.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Non è possibile assegnare a '{0}' perché è una direttiva import.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Non è possibile assegnare a '{0}' perché non è una variabile.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Non è possibile assegnare al metodo privato '{0}'. I metodi privati non sono scrivibili.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Non è possibile aumentare il modulo '{0}' perché viene risolto in un'entità non modulo.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Non è possibile aumentare il modulo '{0}' con le esportazioni dei valori perché viene risolto in un'entità non modulo.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Non è possibile compilare moduli con l'opzione '{0}' a meno che il flag '--module' non sia impostato su 'amd' o 'system'.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Non è possibile creare un'istanza di una classe astratta.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Non è possibile delegare l'iterazione al valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma il generatore che la contiene invierà sempre '{0}'.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Non è possibile esportare '{0}'. Da un modulo è possibile esportare solo dichiarazioni locali.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Non è possibile estendere una classe '{0}'. Il costruttore di classe è contrassegnato come privato.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Non è possibile estendere un'interfaccia '{0}'. Si intendeva usare 'implements'?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Non è possibile trovare alcun file tsconfig.json nella directory corrente: {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Non è stato trovato alcun file tsconfig.json nella directory specificata '{0}'.", - "Cannot_find_global_type_0_2318": "Il tipo globale '{0}' non è stato trovato.", - "Cannot_find_global_value_0_2468": "Il valore globale '{0}' non è stato trovato.", - "Cannot_find_lib_definition_for_0_2726": "La definizione della libreria per '{0}' non è stata trovata.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "La definizione della libreria per '{0}' non è stata trovata. Si intendeva '{1}'?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Non è possibile trovare il modulo '{0}'. Provare a usare '--resolveJsonModule' per importare il modulo con estensione '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Non è possibile trovare il modulo '{0}'. Si intendeva impostare l'opzione 'moduleResolution' su 'nodenext' o aggiungere alias all'opzione 'paths'?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Non è possibile trovare il modulo '{0}' o le relative dichiarazioni di tipo corrispondenti.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Non è possibile trovare dichiarazioni di modulo o di tipo per l'importazione a effetto collaterale di '{0}'.", - "Cannot_find_name_0_2304": "Il nome '{0}' non è stato trovato.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Il nome '{0}' non è stato trovato. Si intendeva '{1}'?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Il nome '{0}' non è stato trovato. Si intendeva il membro di istanza 'this.{0}'?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Il nome '{0}' non è stato trovato. Si intendeva il membro statico '{1}.{0}'?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Impossibile trovare il nome '{0}'. Si intendeva scrivere questo elemento in una funzione asincrona?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{1}' o versioni successive.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a modificare l'opzione 'lib' del compilatore in modo che includa 'dom'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun` quindi aggiungere 'bun' al campo Tipi in tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha` e quindi aggiungere 'jest' o 'mocha' al campo types in tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery` e quindi aggiungere 'jquery' al campo types in tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node` e quindi aggiungere 'node' al campo types in tsconfig.", - "Cannot_find_namespace_0_2503": "Lo spazio dei nomi '{0}' non è stato trovato.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Il nome '{0}' non è stato trovato. Intendevi '{1}'?", - "Cannot_find_parameter_0_1225": "Il parametro '{0}' non è stato trovato.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Il percorso della sottodirectory comune per i file di input non è stato trovato.", - "Cannot_find_type_definition_file_for_0_2688": "Il file di definizione del tipo per '{0}' non è stato trovato.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Non è possibile importare file di dichiarazione di tipo. Provare a importare '{0}' invece di '{1}'.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Non è possibile inizializzare la variabile con ambito esterna '{0}' nello stesso ambito della dichiarazione con ambito del blocco '{1}'.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Non è possibile richiamare un oggetto che è probabilmente 'null'.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Non è possibile richiamare un oggetto che è probabilmente 'null' o 'undefined'.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Non è possibile richiamare un oggetto che è probabilmente 'undefined'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma la destrutturazione della matrice invierà sempre '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma l'estensione della matrice invierà sempre '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma for-of invierà sempre '{0}'.", - "Cannot_move_statements_to_the_selected_file_95183": "Non è possibile spostare istruzioni nel file selezionato", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Non è possibile passare al file. Il file selezionato non è valido", - "Cannot_read_file_0_5083": "Non è possibile leggere il file '{0}'.", - "Cannot_read_file_0_Colon_1_5012": "Non è possibile leggere il file '{0}': {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Non è possibile dichiarare di nuovo la variabile con ambito blocco '{0}'.", - "Cannot_redeclare_exported_variable_0_2323": "Non è possibile dichiarare di nuovo la variabile esportata '{0}'.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Non è possibile dichiarare di nuovo l'identificatore '{0}' nella clausola catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Non è possibile avviare una chiamata di funzione in un'annotazione di tipo.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Non è possibile usare JSX a meno che non sia specificato il flag '--jsx'.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Non è possibile usare 'export import' in uno spazio dei nomi type o type-only quando '{0}' è abilitato.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Non è possibile usare importazioni, esportazioni o aumenti del modulo quando il valore di '--module' è 'none'.", - "Cannot_use_namespace_0_as_a_type_2709": "Non è possibile usare lo spazio dei nomi '{0}' come tipo.", - "Cannot_use_namespace_0_as_a_value_2708": "Non è possibile usare lo spazio dei nomi '{0}' come valore.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Non è possibile usare 'this' in un inizializzatore di proprietà statica di una classe decorata.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Non è possibile scrivere il file '{0}' perché sovrascriverà il file '.tsbuildinfo' generato dal progetto di riferimento '{1}'", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Non è possibile scrivere il file '{0}' perché verrebbe sovrascritto da più file di input.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Non è possibile scrivere il file '{0}' perché sovrascriverebbe il file di input.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "La variabile della clausola catch non può contenere un inizializzatore.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Se specificata, l'annotazione del tipo di variabile della clausola catch deve essere 'any' o 'unknown'.", - "Change_0_to_1_90014": "Modificare '{0}' in '{1}'", - "Change_all_extended_interfaces_to_implements_95038": "Cambiare tutte le interfacce estese in 'implements'", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Cambiare tutti i tipi in stile jsdoc in TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiare tutti i tipi in stile jsdoc in TypeScript (e aggiungere '| undefined' ai tipi nullable)", - "Change_extends_to_implements_90003": "Cambiare 'extends' in 'implements'", - "Change_spelling_to_0_90022": "Modificare l'ortografia in '{0}'", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifica la presenza di proprietà di classe dichiarate ma non impostate nel costruttore.", - "Check_side_effect_imports_6806": "Controllare le importazioni di effetti collaterali.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verifica che gli argomenti per i metodi 'bind', 'call', and 'apply' corrispondano alla funzione originale.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verrà verificato se '{0}' è il prefisso di corrispondenza più lungo per '{1}' - '{2}'.", - "Circular_definition_of_import_alias_0_2303": "Definizione circolare dell'alias di importazione '{0}'.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "È stata rilevata una circolarità durante la risoluzione della configurazione: {0}", - "Circularity_originates_in_type_at_this_location_2751": "La circolarità ha origine nel tipo in questa posizione.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La classe '{0}' definisce '{1}' come funzione di accesso di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di membro di istanza.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La classe '{0}' definisce '{1}' come funzione di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di accesso di membro di istanza.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La classe '{0}' definisce '{1}' come proprietà di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di membro di istanza.", - "Class_0_incorrectly_extends_base_class_1_2415": "La classe '{0}' estende in modo errato la classe di base '{1}'.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implementa in modo errato la classe '{1}'. Si intendeva estendere '{1}' ed ereditarne i membri come sottoclasse?", - "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implementa in modo errato l'interfaccia '{1}'.", - "Class_0_used_before_its_declaration_2449": "La classe '{0}' è stata usata prima di essere stata dichiarata.", - "Class_constructor_may_not_be_a_generator_1368": "Il costruttore di classe non può essere un generatore.", - "Class_constructor_may_not_be_an_accessor_1341": "Il costruttore di classe non può essere una funzione di accesso.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "La dichiarazione classe non può implementare l'elenco di overload per '{0}'.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag '@augments' o '@extends'.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Non è possibile elementi Decorator di classe con l'identificatore privato statico. Provare a rimuovere l'elemento Decorator sperimentale.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Il campo della classe '{0}' definito dalla classe padre non è accessibile nella classe figlio tramite super.", - "Class_name_cannot_be_0_2414": "Il nome della classe non può essere '{0}'.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Il nome della classe non può essere 'Object' quando la destinazione è ES5 o superiore con il modulo {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Il lato statico '{0}' della classe estende in modo errato il lato statico '{1}' della classe di base.", - "Classes_can_only_extend_a_single_class_1174": "Le classi possono estendere solo un'unica classe.", - "Classes_may_not_have_a_field_named_constructor_18006": "Le classi non possono includere un campo denominato 'constructor'.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Il codice contenuto in una classe viene valutato in modalità strict JavaScript, che non consente l'uso di '{0}'. Per altre informazioni, vedere https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Opzioni della riga di comando", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila il progetto in base al percorso del file di configurazione o della cartella contenente un file 'tsconfig.json'.", - "Compiler_Diagnostics_6251": "Diagnostica compilatore", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Non è possibile specificare una stringa vuota per l'opzione del compilatore '{0}'.", - "Compiler_option_0_expects_an_argument_6044": "Con l'opzione '{0}' del compilatore è previsto un argomento.", - "Compiler_option_0_may_not_be_used_with_build_5094": "L'opzione del compilatore '--{0}' potrebbe non essere usata con '--build'.", - "Compiler_option_0_may_only_be_used_with_build_5093": "L'opzione del compilatore '--{0}' potrebbe essere usata solo con '--build'.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "L'opzione del compilatore '{0}' del valore '{1}' è instabile. Usare TypeScript notturno per disattivare l'errore. Provare ad eseguire l'aggiornamento con 'npm install -D typescript@next'.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "Con l'opzione '{0}' del compilatore è richiesto un valore di tipo {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Il compilatore riserva il nome '{0}' quando si crea l'identificatore privato per browser meno recenti.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila il progetto TypeScript presente nel percorso specificato.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila il progetto corrente (tsconfig.json nella directory di lavoro).", - "Compiles_the_current_project_with_additional_settings_6929": "Compila il progetto corrente con impostazioni aggiuntive.", - "Completeness_6257": "Completezza", - "Composite_projects_may_not_disable_declaration_emit_6304": "I progetti compositi non possono disabilitare la creazione di dichiarazioni.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "I progetti compositi non possono disabilitare la compilazione incrementale.", - "Computed_from_the_list_of_input_files_6911": "Calcolato dall'elenco dei file di input", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Le proprietà calcolate devono essere valori letterali numerici o stringa, variabili o espressioni con punti con --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "I nomi di proprietà calcolati non sono consentiti nelle enumerazioni.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Non è possibile dedurre i nomi di proprietà calcolati nei valori letterali di classe o oggetto con --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "In un'enumerazione con membri con valore stringa non sono consentiti valori calcolati.", - "Concatenate_and_emit_output_to_single_file_6001": "Concatena e crea l'output in un singolo file.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condizioni da impostare in aggiunta alle impostazioni predefinite specifiche del resolver durante la risoluzione delle importazioni.", - "Conflicts_are_in_this_file_6201": "I conflitti si trovano in questo file.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Provare ad aggiungere un modificatore \"declare\" a questa classe.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "I tipi restituiti delle firme del costrutto '{0}' e '{1}' sono incompatibili.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La firma del costrutto, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Le firme di costrutto senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.", - "Constructor_implementation_is_missing_2390": "Manca l'implementazione di costruttore.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Il costruttore della classe '{0}' è privato e accessibile solo all'interno della dichiarazione di classe.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Il costruttore della classe '{0}' è protetto e accessibile solo all'interno della dichiarazione di classe.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notazione del tipo di costruttore deve essere racchiusa tra parentesi quando viene usata in un tipo di unione.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notazione del tipo di costruttore deve essere racchiusa tra parentesi quando viene usata in un tipo di intersezione.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "I costruttori di classi derivate devono contenere una chiamata 'super'.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Il file contenitore non è specificato e non è possibile determinare la directory radice. La ricerca nella cartella 'node_modules' verrà ignorata.", - "Containing_function_is_not_an_arrow_function_95128": "La funzione contenitore non è una funzione arrow", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controllare il metodo usato per rilevare i file JS in formato modulo.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversione del tipo '{0}' nel tipo '{1}' può essere un errore perché nessuno dei due tipi si sovrappone sufficientemente all'altro. Se questa opzione è intenzionale, convertire prima l'espressione in 'unknown'.", - "Convert_0_to_1_in_0_95003": "Convertire '{0}' in '{1} in {0}'", - "Convert_0_to_mapped_object_type_95055": "Convertire '{0}' nel tipo di oggetto con mapping", - "Convert_all_const_to_let_95102": "Convertire ogni 'const' in 'let'", - "Convert_all_constructor_functions_to_classes_95045": "Convertire tutte le funzioni di costruttore in classi", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertire tutti i caratteri non validi nel codice entità HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertire tutti i tipi riesportati in esportazioni solo di tipi", - "Convert_all_require_to_import_95048": "Convertire tutte le occorrenze di 'require' in 'import'", - "Convert_all_to_async_functions_95066": "Convertire tutto in funzioni asincrone", - "Convert_all_to_bigint_numeric_literals_95092": "Convertire tutto in valori letterali numerici bigint", - "Convert_all_to_default_imports_95035": "Convertire tutte le impostazioni predefinite", - "Convert_all_type_literals_to_mapped_type_95021": "Convertire tutti i valori letterali di tipo nel tipo di cui è stato eseguito il mapping", - "Convert_all_typedef_to_TypeScript_types_95177": "Convertire tutti gli elementi typedef in tipi TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Convertire la funzione arrow o l'espressione di funzione", - "Convert_const_to_let_95093": "Convertire 'const' in 'let'", - "Convert_default_export_to_named_export_95061": "Convertire l'esportazione predefinita nell'esportazione denominata", - "Convert_function_declaration_0_to_arrow_function_95106": "Convertire la dichiarazione di funzione '{0}' nella funzione arrow", - "Convert_function_expression_0_to_arrow_function_95105": "Convertire l'espressione di funzione '{0}' nella funzione arrow", - "Convert_function_to_an_ES2015_class_95001": "Converti la funzione in una classe ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Convertire il carattere non valido nel relativo codice entità HTML", - "Convert_named_export_to_default_export_95062": "Convertire l'esportazione denominata nell'esportazione predefinita", - "Convert_named_imports_to_default_import_95170": "Converti importazioni denominate nell'importazione predefinita", - "Convert_named_imports_to_namespace_import_95057": "Convertire le importazioni denominate in importazione spazi dei nomi", - "Convert_namespace_import_to_named_imports_95056": "Convertire l'importazione spazi dei nomi in importazioni denominate", - "Convert_overload_list_to_single_signature_95118": "Convertire l'elenco di overload in una firma singola", - "Convert_parameters_to_destructured_object_95075": "Convertire i parametri nell'oggetto destrutturato", - "Convert_require_to_import_95047": "Convertire 'require' in 'import'", - "Convert_to_ES_module_95017": "Converti nel modulo ES6", - "Convert_to_a_bigint_numeric_literal_95091": "Convertire in un valore letterale numerico bigint", - "Convert_to_anonymous_function_95123": "Convertire nella funzione anonima", - "Convert_to_arrow_function_95125": "Convertire nella funzione arrow", - "Convert_to_async_function_95065": "Convertire nella funzione asincrona", - "Convert_to_default_import_95013": "Convertire nell'importazione predefinita", - "Convert_to_named_function_95124": "Convertire nella funzione denominata", - "Convert_to_optional_chain_expression_95139": "Convertire nell'espressione di catena facoltativa", - "Convert_to_template_string_95096": "Convertire nella stringa di modello", - "Convert_to_type_only_export_1364": "Convertire nell'esportazione solo di tipi", - "Convert_typedef_to_TypeScript_type_95176": "Convertire typedef in tipo TypeScript.", - "Corrupted_locale_file_0_6051": "Il file delle impostazioni locali {0} è danneggiato.", - "Could_not_convert_to_anonymous_function_95153": "Non è stato possibile convertire nella funzione anonima", - "Could_not_convert_to_arrow_function_95151": "Non è stato possibile convertire nella funzione arrow", - "Could_not_convert_to_named_function_95152": "Non è stato possibile convertire nella funzione denominata", - "Could_not_determine_function_return_type_95150": "Non è stato possibile determinare il tipo restituito dalla funzione", - "Could_not_find_a_containing_arrow_function_95127": "Non è stato possibile trovare una funzione arrow contenitore", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Non è stato trovato alcun file di dichiarazione per il modulo '{0}'. A '{1}' è assegnato implicitamente un tipo 'any'.", - "Could_not_find_convertible_access_expression_95140": "Non è stato possibile trovare l'espressione di accesso convertibile", - "Could_not_find_export_statement_95129": "Non è stato possibile trovare l'istruzione di esportazione", - "Could_not_find_import_clause_95131": "Non è stato possibile trovare la clausola di importazione", - "Could_not_find_matching_access_expressions_95141": "Non è stato possibile trovare espressioni di accesso corrispondenti", - "Could_not_find_name_0_Did_you_mean_1_2570": "Non è stato possibile trovare il nome '{0}'. Si intendeva '{1}'?", - "Could_not_find_namespace_import_or_named_imports_95132": "Non è stato possibile trovare l'importazione spazi dei nomi o importazioni denominate", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Non è stato possibile trovare la proprietà per cui generare la funzione di accesso", - "Could_not_find_variable_to_inline_95185": "Non è possibile trovare la variabile per inline.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Non è stato possibile risolvere il percorso '{0}' con le estensioni: {1}.", - "Could_not_write_file_0_Colon_1_5033": "Non è stato possibile scrivere il file '{0}': {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Crea file di mapping di origine per i file JavaScript creati.", - "Create_sourcemaps_for_d_ts_files_6614": "Crea mapping di origine per i file d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un file tsconfig.jscon le impostazioni consigliate nella directory di lavoro.", - "DIRECTORY_6038": "DIRECTORY", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Le sequenze di escape e i backreference decimali non sono consentiti in una classe di caratteri.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "I decimali con zeri iniziali non sono consentiti.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La dichiarazione causa un aumento di una dichiarazione in un altro file. Questa operazione non è serializzabile.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La creazione della dichiarazione per questo file richiede il mantenimento dell'importazione per gli aumenti. Funzionalità non supportata con --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}' dal modulo '{1}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "La creazione di dichiarazioni per questo parametro richiede l'aggiunta implicita di elementi non definiti al relativo tipo. Funzionalità non supportata con --isolatedDeclarations.", - "Declaration_expected_1146": "È prevista la dichiarazione.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Il nome della dichiarazione è in conflitto con l'identificatore globale predefinito '{0}'.", - "Declaration_or_statement_expected_1128": "È prevista la dichiarazione o l'istruzione.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Dichiarazione o istruzione prevista. Questo carattere '=' segue un blocco di istruzioni, di conseguenza se si intende scrivere un'assegnazione di destrutturazione, potrebbe essere necessario racchiudere l'intera assegnazione tra parentesi.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Le dichiarazioni con asserzioni di assegnazione definite devono includere anche annotazioni di tipo.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Le dichiarazioni con inizializzatori non possono includere anche asserzioni di assegnazione definite.", - "Declare_a_private_field_named_0_90053": "Dichiarare un campo privato denominato '{0}'.", - "Declare_method_0_90023": "Dichiarare il metodo '{0}'", - "Declare_private_method_0_90038": "Dichiarare il metodo privato '{0}'", - "Declare_private_property_0_90035": "Dichiarare la proprietà privata '{0}'", - "Declare_property_0_90016": "Dichiarare la proprietà '{0}'", - "Declare_static_method_0_90024": "Dichiarare il metodo statico '{0}'", - "Declare_static_property_0_90027": "Dichiarare la proprietà statica '{0}'", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Il tipo restituito della funzione Decorator '{0}' non è assegnabile al tipo '{1}'.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Il tipo restituito della funzione Decorator è '{0}' ma è previsto 'void' o 'any'.", - "Decorator_used_before_export_here_1486": "Elemento Decorator usato prima di 'export'.", - "Decorators_are_not_valid_here_1206": "In questo punto le espressioni Decorator non sono valide.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Non è possibile applicare le espressioni Decorator a più funzioni di accesso get/set con lo stesso nome.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Gli elementi Decorator non possono essere visualizzati dopo 'export' o 'export default' se vengono visualizzati anche prima di 'export'.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Gli elementi Decorator devono precedere il nome e tutte le parole chiave delle dichiarazioni di proprietà.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Le variabili della clausola catch predefinite sono 'unknown' anziché 'any'.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'esportazione predefinita del modulo contiene o usa il nome privato '{0}'.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Non è possibile dedurre le esportazioni predefinite con --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Le importazioni predefinite non sono consentite in un'importazione posticipata.", - "Default_library_1424": "Libreria predefinita", - "Default_library_for_target_0_1425": "Libreria predefinita per la destinazione '{0}'", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Le importazioni posticipate sono supportate solo quando il flag '--module' è impostato su 'esnext' o 'preserve'.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Le definizioni degli identificatori seguenti sono in conflitto con quelle di un altro file: {0}", - "Delete_all_unused_declarations_95024": "Eliminare tutte le dichiarazioni non usate", - "Delete_all_unused_imports_95147": "Eliminare tutte le direttive import non usate", - "Delete_all_unused_param_tags_95172": "Eliminare tutti i tag '@param' inutilizzati", - "Delete_the_outputs_of_all_projects_6365": "Eliminare gli output di tutti i progetti.", - "Delete_unused_param_tag_0_95171": "Eliminare il tag '@param' '{0}' inutilizzato", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Deprecata] In alternativa, usare '--jsxFactory'. Specifica l'oggetto richiamato per createElement quando la destinazione è la creazione JSX 'react'", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Deprecata] In alternativa, usare '--outFile'. Concatena e crea l'output in un singolo file", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Deprecata] In alternativa, usare '--skipLibCheck'. Ignora il controllo del tipo dei file di dichiarazione delle librerie predefinite.", - "Deprecated_setting_Use_outFile_instead_6677": "Impostazione deprecata. In alternativa, usare 'outFile'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Si è omesso di usare 'await'?", - "Did_you_mean_0_1369": "Si intendeva '{0}'?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Si intendeva che '{0}' fosse vincolato al tipo 'new (...args: any[]) => {1}'?", - "Did_you_mean_to_call_this_expression_6212": "Si intendeva chiamare questa espressione?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Si intendeva contrassegnare questa funzione come 'async'?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Si intendeva usare i due punti (':')? È possibile usare il carattere '=' dopo un nome di proprietà, solo quando il valore letterale di oggetto che lo contiene fa parte di un criterio di destrutturazione.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Si intende usare 'new' con questa espressione?", - "Digit_expected_1124": "È prevista la cifra.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "La directory '{0}' non esiste. Tutte le ricerche che la interessano verranno ignorate.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "La directory ' {0}' non contiene alcun ambito package.json. Non sarà possibile risolvere le importazioni.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Disabilita l'aggiunta di direttive `use strict` nei file JavaScript generati.", - "Disable_checking_for_this_file_90018": "Disabilitare la verifica per questo file", - "Disable_emitting_comments_6688": "Disabilita la creazione di commenti.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Disabilita la creazione di dichiarazioni che contengono '@internal' nei commenti JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Disabilita la creazione di file da una compilazione.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Disabilita la creazione di file se vengono restituiti errori di controllo del tipo.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Disabilita la cancellazione delle dichiarazioni 'const enum' nel codice generato.", - "Disable_error_reporting_for_unreachable_code_6603": "Disabilita la segnalazione errori per il codice non raggiungibile.", - "Disable_error_reporting_for_unused_labels_6604": "Disabilita la segnalazione errori per le etichette non usate.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Disabilitare il controllo completo dei tipi (verranno segnalati solo errori critici di creazione e analisi).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Disabilita la generazione di funzioni helper personalizzate come '__extends' nell'output compilato.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Disabilita l'inclusione di tutti i file di libreria, incluso il file lib.d.ts predefinito.", - "Disable_loading_referenced_projects_6235": "Disabilitare il caricamento dei progetti cui viene fatto riferimento.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Disabilita la preferenza per i file di origine invece dei file di dichiarazione quando si fa riferimento a progetti compositi.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Disabilita la segnalazione errori di proprietà in eccesso durante la creazione di valori letterali dell'oggetto.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Disabilita la risoluzione dei collegamenti simbolici nei relativi realpath. È correlato allo stesso flag presente nel nodo.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Disabilita le dimensioni relative alle dimensioni per i progetti JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Disabilitare la ricerca della soluzione per questo progetto.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Disabilitare il controllo tassativo delle firme generiche nei tipi funzione.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Disabilita l'acquisizione del tipo per i progetti JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Disabilita il troncamento dei tipi nei messaggi di errore.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Disabilitare l'uso di file di origine invece dei file di dichiarazione dai progetti a cui si fa riferimento.", - "Disable_wiping_the_console_in_watch_mode_6684": "Disabilita la cancellazione della console in modalità espressione di controllo.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Disabilita l'inferenza per l'acquisizione del tipo esaminando i nomi di file in un progetto.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Non consente a direttive 'import's, 'require's o '' di espandere il numero di file che TypeScript deve aggiungere a un progetto.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Non consente riferimenti allo stesso file in cui le maiuscole/minuscole vengono usate in modo incoerente.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Non aggiunge riferimenti con tripla barra (////) o moduli importati all'elenco di file compilati.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Non consentire costrutti di runtime che non fanno parte di ECMAScript.", - "Do_not_emit_comments_to_output_6009": "Non crea commenti nell'output.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Non crea dichiarazioni per codice che contiene un'annotazione '@internal'.", - "Do_not_emit_outputs_6010": "Non crea output.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Non crea output se sono stati restituiti errori.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Non crea direttive 'use strict' nell'output del modulo.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Non cancella le dichiarazioni di enumerazione const nel codice generato.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Non genera funzioni di supporto personalizzate, come '__extends', nell'output compilato.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Non include il file di libreria predefinito (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Non segnala gli errori in caso di codice non raggiungibile.", - "Do_not_report_errors_on_unused_labels_6074": "Non segnala gli errori in caso di etichette non usate.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Non risolvere il percorso reale di collegamenti simbolici.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Non trasformare o eliminare importazioni o esportazioni non contrassegnate come type-only, in modo che vengano scritte nel formato del file di output in base all'impostazione 'module'.", - "Do_not_truncate_error_messages_6165": "Non tronca i messaggi di errore.", - "Duplicate_function_implementation_2393": "Implementazione di funzione duplicata.", - "Duplicate_identifier_0_2300": "Identificatore '{0}' duplicato.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificatore '{0}' duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo che contiene funzioni asincrone.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' durante la creazione dei riferimenti 'super' negli inizializzatori statici.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificatore '{0}' duplicato. Il compilatore usa la dichiarazione '{1}' per supportare le funzioni asincrone.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "L'identificatore '{0}' è duplicato. Gli elementi statici e di istanza non possono condividere lo stesso nome privato.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificatore 'arguments' duplicato. Il compilatore usa 'arguments' per inizializzare i parametri rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificatore '_newTarget' duplicato. Il compilatore usa la dichiarazione di variabile '_newTarget' per acquisire il riferimento alla metaproprietà 'new.target'.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificatore '_this' duplicato. Il compilatore usa la dichiarazione di variabile '_this' per acquisire il riferimento 'this'.", - "Duplicate_index_signature_for_type_0_2374": "Firma dell'indice duplicata per il tipo '{0}'.", - "Duplicate_label_0_1114": "Etichetta '{0}' duplicata.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "La proprietà '{0}' è duplicata.", - "Duplicate_regular_expression_flag_1500": "Flag di espressione regolare duplicato.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "L'identificatore dell'importazione dinamica deve essere di tipo 'string', ma il tipo specificato qui è '{0}'.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Le importazioni dinamiche sono supportate solo quando il flag '--module' è impostato su 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20' o 'nodenext'.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Le importazioni dinamiche possono accettare come argomenti solo un identificatore di modulo e un set di attributi facoltativi", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Le importazioni dinamiche supportano un secondo argomento solo quando l'opzione '--module' è impostata su 'esnext', 'node16', 'node18', 'node20', 'nodenext' o 'preserve'.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Le importazioni e le esportazioni di ECMAScript non possono essere scritte in un file CommonJS in \"verbatimModuleSyntax\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Le importazioni e le esportazioni di ECMAScript non possono essere scritte in un file CommonJS in \"verbatimModuleSyntax\". Modificare il campo \"type\" nel \"package.json\" più vicino per rendere questo file un modulo ECMAScript oppure modificare le impostazioni \"verbatimModuleSyntax\", \"module\" e \"moduleResolution\" in TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "La sintassi del modulo ECMAScript non è consentita in un modulo CommonJS quando \"module\" è impostato su \"preserve\".", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Il valore di ogni dichiarazione di '{0}.{1}' è diverso, dove '{2}' è previsto mentre '{3}' è specificato.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Ogni membro del tipo di unione '{0}' contiene firme di costrutto, ma nessuna di tali firme è compatibile con le altre.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Ogni membro del tipo di unione '{0}' contiene firme, ma nessuna di tali firme è compatibile con le altre.", - "Editor_Support_6249": "Supporto Editor", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'elemento contiene implicitamente un tipo 'any' perché non è possibile usare l'espressione di tipo '{0}' per indicizzare il tipo '{1}'.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'elemento contiene implicitamente un tipo 'any' perché l'espressione di indice non è di tipo 'number'.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice. Si intendeva chiamare '{1}'?", - "Emit_6246": "Crea", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Crea campi di classe conformi allo standard ECMAScript.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Crea un BOM (Byte Order Mark) UTF-8 all'inizio dei file di output.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Crea un unico file con i mapping di origine invece di file separati.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Crea un profilo CPU v8 dell'esecuzione del compilatore per il debug.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Crea codice JavaScript aggiuntivo per semplificare il supporto per l'importazione di moduli CommonJS. Abilita 'allowSyntheticDefaultImports' per la compatibilità dei tipi.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Creare i campi della classe con Define invece di Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Crea metadati di tipo progettazione per le dichiarazioni decorate nei file di origine.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Crea codice JavaScript più conforme, ma dettagliato e meno efficiente per l'iterazione.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Crea l'origine unitamente ai mapping di origine all'interno di un unico file. Richiede l'impostazione di '--inlineSourceMap' o '--sourceMap'.", - "Enable_all_strict_type_checking_options_6180": "Abilita tutte le opzioni per i controlli del tipo strict.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Abilita il colore e la formattazione nell'output TypeScript per agevolare la lettura degli errori del compilatore.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Abilita i vincoli che consentono l'uso di un progetto TypeScript con riferimenti al progetto.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Abilita la segnalazione errori per i percorsi di codice che non vengono restituiti in modo esplicito in una funzione.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Abilita la segnalazione errori per espressioni e dichiarazioni con un tipo implicito 'any'.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Abilita la segnalazione errori per i casi di fallthrough nelle istruzioni switch.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Abilita la segnalazione errori nei file JavaScript con controllo del tipo.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Abilita la segnalazione errori quando variabili locali non vengono lette.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Abilita la segnalazione errori quando a 'this' viene assegnato il tipo 'any'.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Abilitare il supporto sperimentale per gli elementi Decorator sperimentali legacy.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Abilitare l'importazione di file con qualsiasi estensione, purché sia presente un file di dichiarazione.", - "Enable_importing_json_files_6689": "Abilita l'importazione di file .json.", - "Enable_lib_replacement_6808": "Abilita sostituzione librerie.", - "Enable_project_compilation_6302": "Abilitare la compilazione dei progetti", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Abilitare i metodi strict 'bind', 'call' e 'apply' nelle funzioni.", - "Enable_strict_checking_of_function_types_6186": "Abilita il controllo tassativo dei tipi funzione.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Abilitare il controllo tassativo dell'inizializzazione delle proprietà nelle classi.", - "Enable_strict_null_checks_6113": "Abilita i controlli strict Null.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Abilitare l'opzione 'experimentalDecorators' nel file di configurazione", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Abilitare il flag '--jsx' nel file di configurazione", - "Enable_tracing_of_the_name_resolution_process_6085": "Abilita la traccia del processo di risoluzione dei nomi.", - "Enable_verbose_logging_6713": "Abilitare la registrazione dettagliata.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Abilita l'interoperabilità di creazione tra moduli ES e CommonJS tramite la creazione di oggetti spazio dei nomi per tutte le importazioni. Implica 'allowSyntheticDefaultImports'.", - "Enables_experimental_support_for_ES7_decorators_6065": "Abilita il supporto sperimentale per le espressioni Decorator di ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Abilita il supporto sperimentale per la creazione dei metadati dei tipi per le espressioni Decorator.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Impone l'uso di funzioni di accesso indicizzate per le chiavi dichiarate con un tipo indicizzato.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Si assicura che i membri di override nelle classi derivate siano contrassegnati con un modificatore override.", - "Ensure_that_casing_is_correct_in_imports_6637": "Si assicura che l'uso di maiuscole e minuscole sia corretto nelle direttive import.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Si assicura che sia possibile eseguire il transpile di ogni file in modo sicuro senza basarsi su altre direttive import.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Si assicura che la direttiva 'use strict' venga sempre creata.", - "Entering_conditional_exports_6413": "Immissione di esportazioni condizionali.", - "Entry_point_for_implicit_type_library_0_1420": "Punto di ingresso per la libreria dei tipi impliciti '{0}'", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto di ingresso per la libreria dei tipi impliciti '{0}' con packageId '{1}'", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions con packageId '{1}'", - "Enum_0_used_before_its_declaration_2450": "L'enumerazione '{0}' è stata usata prima di essere stata dichiarata.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "È possibile unire dichiarazioni di enumerazione solo con lo spazio dei nomi o altre dichiarazioni di enumerazione.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Le dichiarazioni di enumerazione devono essere tutte const o tutte non const.", - "Enum_member_expected_1132": "È previsto il membro di enumerazione.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Il membro di enumerazione che segue un membro numerico non letterale deve avere un inizializzatore quando 'isolatedModules' è abilitato.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Gli inizializzatori di membri di enumerazione devono essere calcolabili senza riferimenti a simboli esterni con --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "Il membro di enumerazione deve contenere l'inizializzatore.", - "Enum_name_cannot_be_0_2431": "Il nome dell'enumerazione non può essere '{0}'.", - "Environment_Settings_6285": "Impostazioni ambiente", - "Errors_Files_6041": "File di errori", - "Escape_sequence_0_is_not_allowed_1488": "Sequenza di escape '{0}' non consentita.", - "Examples_Colon_0_6026": "Esempi: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Complessità eccessiva rispetto ai tipi '{0}' e '{1}'.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "La profondità dello stack per il confronto dei tipi '{0}' e '{1}' è eccessiva.", - "Exiting_conditional_exports_6416": "Chiusura di esportazioni condizionali.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Sono previsti argomento tipo {0}-{1}. Per specificarli, usare un tag '@extends'.", - "Expected_0_arguments_but_got_1_2554": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}. Si è dimenticato di includere 'void' nell'argomento di tipo per 'Promise'?", - "Expected_0_type_arguments_but_got_1_2558": "Sono previsti {0} argomenti tipo, ma ne sono stati ottenuti {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Sono previsti {0} argomenti tipo. Per specificarli, usare un tag '@extends'.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Previsto 1 argomento, ma ottenuto 0. 'new Promise()' richiede un hint JSDoc per produrre un elemento 'resolve' che possa essere chiamato senza argomenti.", - "Expected_a_Unicode_property_name_1523": "È previsto un nome per la proprietà Unicode.", - "Expected_a_Unicode_property_name_or_value_1527": "È previsto un nome o un valore per la proprietà Unicode.", - "Expected_a_Unicode_property_value_1525": "È previsto un valore per la proprietà Unicode.", - "Expected_a_capturing_group_name_1514": "È previsto un nome per il gruppo di acquisizione.", - "Expected_a_class_set_operand_1520": "È previsto un operando del set di classi.", - "Expected_at_least_0_arguments_but_got_1_2555": "Sono previsti almeno {0} argomenti, ma ne sono stati ottenuti {1}.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "È previsto il tag di chiusura JSX corrispondente per '{0}'.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "È previsto il tag di chiusura corrispondente per il frammento JSX.", - "Expected_for_property_initializer_1442": "È previsto '=' per l'inizializzatore di proprietà.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Il tipo previsto del campo '{0}' in 'package.json' è '{1}', ma è stato ottenuto '{2}'.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Il tipo di risoluzione del modulo '{0}' è stato specificato in modo esplicito.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Non è possibile usare l'elevamento a potenza su valori 'bigint' a meno che l'opzione 'target' non sia impostata su 'es2016' o versioni successive.", - "Export_0_from_module_1_90059": "Esporta '{0}' dal modulo '{1}'", - "Export_all_referenced_locals_90060": "Esporta tutte le variabili locali di riferimento", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Non è possibile usare l'assegnazione di esportazione se destinata a moduli ECMAScript. Provare a usare 'export default' o un altro formato di modulo.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "L'assegnazione dell'esportazione non è supportata quando il valore del flag '--module' è 'system'.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La dichiarazione di esportazione è in conflitto con la dichiarazione esportata di '{0}'.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Le dichiarazioni di esportazione non sono consentite in uno spazio dei nomi.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "L'identificatore di esportazione '{0}' non esiste nell'ambito package.json al percorso '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}' del modulo {2}.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variabile esportata '{0}' contiene o usa il nome privato '{1}'.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Le esportazioni e le assegnazioni di esportazioni non sono consentite negli aumenti del modulo.", - "Expression_expected_1109": "È prevista l'espressione.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L'espressione deve essere racchiusa tra parentesi per poter essere usata come elemento Decorator.", - "Expression_or_comma_expected_1137": "È prevista l'espressione o la virgola.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'espressione produce un tipo di tupla troppo grande da rappresentare.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'espressione produce un tipo di unione troppo complesso da rappresentare.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "L'espressione viene risolta in '_super', che è usato dal compilatore per acquisire il riferimento della classe di base.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'espressione viene risolta nella dichiarazione di variabile '_newTarget', che è usata dal compilatore per acquisire il riferimento alla metaproprietà 'new.target'.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "L'espressione viene risolta nella dichiarazione di variabile '_this', che è usata dal compilatore per acquisire il riferimento 'this'.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Non è possibile dedurre il tipo di espressione con --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clausola Extends non può contenere un'espressione con --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clausola Extends del tipo dedotto '{0}' contiene o usa il nome privato '{1}'.", - "Extract_base_class_to_variable_90064": "Estrarre la classe di base nella variabile", - "Extract_binding_expressions_to_variable_90066": "Estrarre le espressioni di associazione nella variabile", - "Extract_constant_95006": "Estrarre la costante", - "Extract_default_export_to_variable_90065": "Estrarre l'esportazione predefinita nella variabile", - "Extract_function_95005": "Estrarre la funzione", - "Extract_to_0_in_1_95004": "Estrarre in {0} in {1}", - "Extract_to_0_in_1_scope_95008": "Estrarre in {0} nell'ambito {1}", - "Extract_to_0_in_enclosing_scope_95007": "Estrarre in {0} nell'ambito che lo contiene", - "Extract_to_interface_95090": "Estrarre nell'interfaccia", - "Extract_to_type_alias_95078": "Estrarre nell'alias di tipo", - "Extract_to_typedef_95079": "Estrarre in typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Estrarre nella variabile e sostituire con '{0} come typeof {0}'", - "Extract_type_95077": "Estrarre il tipo", - "FILE_6035": "FILE", - "FILE_OR_DIRECTORY_6040": "FILE O DIRECTORY", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Impossibile trovare peerDependency '{0}'.", - "Failed_to_resolve_under_condition_0_6415": "Impossibile risolvere in base alla condizione '{0}'.", - "Fallthrough_case_in_switch_7029": "Caso di fallthrough in switch.", - "File_0_does_not_exist_6096": "Il file '{0}' non esiste.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Il file '{0}' non esiste in base alle ricerche precedenti memorizzate nella cache.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Il file '{0}' esiste già in base alle ricerche precedenti memorizzate nella cache.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Il file '{0}' esiste. Usarlo come risultato per la risoluzione dei nomi.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "L'estensione del file '{0}' non è supportata. Le uniche estensioni supportate sono {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Il file '{0}' è un file JavaScript. Si intendeva abilitare l'opzione 'allowJs'?", - "File_0_is_not_a_module_2306": "Il file '{0}' non è un modulo.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Il file '{0}' non è incluso nell'elenco file del progetto '{1}'. I progetti devono elencare tutti i file o usare un criterio 'include'.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Il file '{0}' non si trova in 'rootDir' '{1}'. 'rootDir' deve contenere tutti i file di origine.", - "File_0_not_found_6053": "Il file '{0}' non è stato trovato.", - "File_Layout_6284": "Layout file", - "File_Management_6245": "Gestione dei file", - "File_appears_to_be_binary_1490": "Il file sembra essere binario.", - "File_change_detected_Starting_incremental_compilation_6032": "È stata rilevata una modifica ai file. Verrà avviata la compilazione incrementale...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Il file è un modulo CommonJS perché '{0}' non contiene il campo \"type\"", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Il file è un modulo CommonJS perché '{0}' contiene il campo \"type\" il cui valore non è \"module\"", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Il file è un modulo CommonJS perché 'package.json' non è stato trovato", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Il file è un modulo ECMAScript perché '{0}' contiene il campo \"type\" con valore \"module\"", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Il file è un modulo CommonJS e può essere convertito in un modulo ES6.", - "File_is_default_library_for_target_specified_here_1426": "Il file è la libreria predefinita per la destinazione specificata in questo punto.", - "File_is_entry_point_of_type_library_specified_here_1419": "Il file è il punto di ingresso della libreria dei tipi specificata in questo punto.", - "File_is_included_via_import_here_1399": "Il file viene incluso tramite importazione in questo punto.", - "File_is_included_via_library_reference_here_1406": "Il file viene incluso tramite il riferimento alla libreria in questo punto.", - "File_is_included_via_reference_here_1401": "Il file viene incluso tramite riferimento in questo punto.", - "File_is_included_via_type_library_reference_here_1404": "Il file viene incluso tramite il riferimento alla libreria dei tipi in questo punto.", - "File_is_library_specified_here_1423": "Il file è la libreria specificata in questo punto.", - "File_is_matched_by_files_list_specified_here_1410": "Per la corrispondenza del file viene usato l'elenco 'files' specificato in questo punto.", - "File_is_matched_by_include_pattern_specified_here_1408": "Per la corrispondenza del file viene usato il criterio di inclusione specificato in questo punto.", - "File_is_output_from_referenced_project_specified_here_1413": "Il file corrisponde all'output del progetto di riferimento specificato in questo punto.", - "File_is_output_of_project_reference_source_0_1428": "Il file corrisponde all'origine '{0}' del riferimento al progetto", - "File_is_source_from_referenced_project_specified_here_1416": "Il file è l'origine del progetto di riferimento specificato in questo punto.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Il nome file '{0}' differisce da quello già incluso '{1}' solo per l'uso di maiuscole/minuscole.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Il nome file '{0}' ha un'estensione '{1}' - eseguire invece la ricerca di '{2}'.", - "File_name_0_has_a_1_extension_stripping_it_6132": "L'estensione del nome file '{0}' è '{1}' e verrà rimossa.", - "File_redirects_to_file_0_1429": "Il file viene reindirizzato al file '{0}'", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La specifica del file non può contenere una directory padre ('..') inserita dopo un carattere jolly ('**') di directory ricorsiva: '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La specifica del file non può terminare con caratteri jolly ('**') di directory ricorsiva: '{0}'.", - "Filters_results_from_the_include_option_6627": "Filtra i risultati dall'opzione `include`.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Correggere tutti gli errori di ortografia rilevati", - "Fix_all_expressions_possibly_missing_await_95085": "Correggere tutte le espressioni in cui potrebbe mancare 'await'", - "Fix_all_implicit_this_errors_95107": "Correggere tutti gli errori relativi a 'this' implicito", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Correggere tutti i tipi restituiti non corretti di una funzione asincrona", - "Fix_all_with_type_only_imports_95182": "Correggere tutto con importazioni type-only", - "For_nodejs_Colon_6287": "Per nodejs:", - "Found_0_errors_6217": "Sono stati trovati {0} errori.", - "Found_0_errors_Watching_for_file_changes_6194": "Sono stati trovati {0} errori. Verranno individuate le modifiche ai file.", - "Found_0_errors_in_1_files_6261": "Sono stati trovati {0} errori nei file {1}.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Sono stati trovati {0} errori nello stesso file, a partire da: {1}", - "Found_1_error_6216": "È stato trovato 1 errore.", - "Found_1_error_Watching_for_file_changes_6193": "È stato trovato 1 errore. Verranno individuate le modifiche ai file.", - "Found_1_error_in_0_6259": "È stato trovato 1 errore in {0}", - "Found_package_json_at_0_6099": "Il file 'package.json' è stato trovato in '{0}'.", - "Found_peerDependency_0_with_1_version_6282": "Trovato l'elemento peerDependency '{0}' con versione '{1}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. Le definizioni di classe sono impostate automaticamente nella modalità strict.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. I moduli sono impostati automaticamente nella modalità strict.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'espressione di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implementazione di funzione manca o non segue immediatamente la dichiarazione.", - "Function_implementation_name_must_be_0_2389": "Il nome dell'implementazione di funzione deve essere '{0}'.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La funzione contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usata come riferimento diretto o indiretto in una delle relative espressioni restituite.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Nella funzione manca l'istruzione return finale e il tipo restituito non include 'undefined'.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La funzione deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", - "Function_not_implemented_95159": "Funzione non implementata.", - "Function_overload_must_be_static_2387": "L'overload della funzione deve essere statico.", - "Function_overload_must_not_be_static_2388": "L'overload della funzione non deve essere statico.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di unione.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di intersezione.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Il tipo di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La funzione con corpi può essere unita solo a classi di tipo ambient.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genera file .d.ts da file TypeScript e JavaScript nel progetto.", - "Generate_get_and_set_accessors_95046": "Generare le funzioni di accesso 'get' e 'set'", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generare le funzioni di accesso 'get' e 'set' per tutte le proprietà di sostituzione", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Genera un profilo CPU.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Genera un mapping di origine per ogni file '.d.ts' corrispondente.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Genera una traccia eventi e un elenco di tipi.", - "Generates_corresponding_d_ts_file_6002": "Genera il file '.d.ts' corrispondente.", - "Generates_corresponding_map_file_6043": "Genera il file '.map' corrispondente.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Il generatore ha implicitamente il tipo yield \"{0}\". Provare a specificare un'annotazione di tipo restituito.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "I generatori non sono consentiti in un contesto di ambiente.", - "Generic_type_0_requires_1_type_argument_s_2314": "Il tipo generico '{0}' richiede {1} argomento/i di tipo.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Il tipo generico '{0}' richiede tra {1} e {2} argomenti tipo.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Le esportazioni di moduli globali possono essere usate solo al primo livello.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Le esportazioni di moduli globali possono essere usate solo in file di dichiarazione.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Le esportazioni di moduli globali possono essere usate solo in file di modulo.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Il tipo globale '{0}' deve un tipo di classe o di interfaccia.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Il tipo globale '{0}' deve contenere {1} parametro/i di tipo.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Impostare le ricompilazioni in '--incremental' e '--watch' in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Imposta le ricompilazioni in progetti che usano la modalità 'incremental' e 'watch' in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.", - "Hexadecimal_digit_expected_1125": "È prevista la cifra esadecimale.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "È previsto un identificatore. '{0}' è una parola riservata al livello principale di un modulo.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict. Le definizioni di classe sono automaticamente impostate sulla modalità strict.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict. I moduli vengono impostati automaticamente in modalità strict.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "È previsto un identificatore. '{0}' è una parola riservata che non può essere usata in questo punto.", - "Identifier_expected_1003": "È previsto l'identificatore.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "È previsto un identificatore. '__esModule' è riservato come marcatore esportato durante la trasformazione di moduli ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Previsto identificatore o valore letterale stringa.", - "Identifier_string_literal_or_number_literal_expected_1496": "Identificatore, valore letterale stringa o valore letterale numerico previsti.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se il pacchetto '{0}' espone effettivamente questo modulo, provare a inviare una richiesta pull per modificare 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se il pacchetto ' {0}' espone effettivamente il modulo, provare ad aggiungere un nuovo file di dichiarazione (.d.ts) contenente ' Dichiara modulo' {1}';'", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", - "Ignore_this_error_message_90019": "Ignorare questo messaggio di errore", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Il file tsconfig.json verrà ignorato. I file specificati verranno compilati con le opzioni predefinite del compilatore.", - "Implement_all_inherited_abstract_classes_95040": "Implementare tutte le classi astratte ereditate", - "Implement_all_unimplemented_interfaces_95032": "Implementare tutte le interfacce non implementate", - "Implement_inherited_abstract_class_90007": "Implementare la classe astratta ereditata", - "Implement_interface_0_90006": "Implementare l'interfaccia '{0}'", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clausola implements della classe esportata '{0}' contiene o usa il nome privato '{1}'.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversione implicita di un valore 'symbol' in 'string' non riuscirà in fase di esecuzione. Provare a eseguire il wrapping di questa espressione in 'String(...)'.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L'importazione '{0}' è in conflitto con il valore globale usato in questo file, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L'importazione '{0}' è in conflitto con il valore locale, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", - "Import_0_from_1_90013": "Importare '{0}' da \"{1}\".", - "Import_assertion_values_must_be_string_literal_expressions_2837": "I valori di asserzione di importazione devono essere espressioni letterali delle stringhe.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Le asserzioni di importazione non sono consentite nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Le asserzioni di importazione sono supportate solo quando l'opzione '--module' è impostata su 'esnext', 'node18', 'node20', 'nodenext' o 'preserve'.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Non è possibile usare asserzioni di importazione con importazioni o esportazioni di solo tipo.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Le asserzioni di importazione sono state sostituite dagli attributi di importazione. Usare 'with' invece di 'assert'.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Non è possibile usare l'assegnazione di importazione se destinata a moduli ECMAScript. Provare a usare 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' o un altro formato di modulo.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "I valori degli attributi di importazione devono essere espressioni letterali delle stringhe.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Gli attributi di importazione non sono consentiti nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Gli attributi di importazione sono supportati solo quando l'opzione '--module' è impostata su 'esnext', 'node18', 'node20', 'nodenext' o 'preserve'.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Non è possibile usare attributi di importazione con importazioni o esportazioni type-only.", - "Import_declaration_0_is_using_private_name_1_4000": "La dichiarazione di importazione '{0}' usa il nome privato '{1}'.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La dichiarazione di importazione è in conflitto con la dichiarazione locale di '{0}'.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Le dichiarazioni di importazione in uno spazio dei nomi non possono far riferimento a un modulo.", - "Import_emit_helpers_from_tslib_6139": "Importa gli helper di creazione da 'tslib'.", - "Import_may_be_converted_to_a_default_import_80003": "L'importazione può essere convertita in un'importazione predefinita.", - "Import_name_cannot_be_0_2438": "Il nome dell'importazione non può essere '{0}'.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La dichiarazione di importazione o esportazione in una dichiarazione di modulo di ambiente non può fare riferimento al modulo tramite il nome di modulo relativo.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "L'identificatore di importazione ' {0}' non esiste nell’ambito package.json al percorso ' {1}'.", - "Imported_via_0_from_file_1_1393": "Importato tramite {0} dal file '{1}'", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importato tramite {0} dal file '{1}' per importare 'importHelpers' come specificato in compilerOptions", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importato tramite {0} dal file '{1}' per importare le funzioni di factory 'jsx' e 'jsxs'", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Importato tramite {0} dal file '{1}' con packageId '{2}'", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare 'importHelpers' come specificato in compilerOptions", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare le funzioni di factory 'jsx' e 'jsxs'", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "L'importazione di un file JSON in un modulo ECMAScript richiede un attributo di importazione \"type: \"json\"\" quando \"module\" è impostato su \"{0}\".", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Le importazioni non sono consentite negli aumenti di modulo. Provare a spostarle nel modulo esterno di inclusione.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Nelle dichiarazioni di enumerazione dell'ambiente l'inizializzatore di membro deve essere un'espressione costante.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In un'enumerazione con più dichiarazioni solo una di queste può omettere un inizializzatore per il primo elemento dell'enumerazione.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Include un elenco di file. A differenza di `include`, i criteri GLOB non sono supportati.", - "Include_modules_imported_with_json_extension_6197": "Includere i moduli importati con estensione '.json'", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Include il codice sorgente nei mapping di origine all'interno del codice JavaScript creato.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Include i file dei mapping di origine all'interno del codice JavaScript creato.", - "Includes_imports_of_types_referenced_by_0_90054": "Include importazioni di tipi a cui fa riferimento '{0}'", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Se si include --watch, l'opzione -w consentirà di iniziare a controllare il progetto corrente per individuare modifiche ai file. Dopo l'impostazione, è possibile configurare la modalità espressione di controllo con:", - "Incomplete_quantifier_Digit_expected_1505": "Quantificatore incompleto. Numero previsto.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "La firma dell'indice per il tipo '{0}' manca nel tipo '{1}'.", - "Index_signature_in_type_0_only_permits_reading_2542": "La firma dell'indice nel tipo '{0}' consente solo la lettura.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Le singole dichiarazioni della dichiarazione sottoposta a merge '{0}' devono essere tutte esportate o tutte locali.", - "Infer_all_types_from_usage_95023": "Derivare tutti i tipi dall'utilizzo", - "Infer_function_return_type_95148": "Dedurre il tipo restituito della funzione", - "Infer_parameter_types_from_usage_95012": "Derivare i tipi di parametro dall'utilizzo", - "Infer_this_type_of_0_from_usage_95080": "Derivare il tipo 'this' di '{0}' dall'utilizzo", - "Infer_type_of_0_from_usage_95011": "Derivare il tipo di '{0}' dall'utilizzo", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L'inferenza dalle espressioni di classe non è supportata con --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Inizializzare la proprietà '{0}' nel costruttore", - "Initialize_static_property_0_90021": "Inizializzare la proprietà statica '{0}'", - "Initializer_for_property_0_2811": "Inizializzatore per la proprietà '{0}'", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'inizializzatore della variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Gli inizializzatori non sono consentiti in contesti di ambiente.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inizializza un progetto TypeScript e crea un file tsconfig.json.", - "Inline_variable_95184": "Variabile inline", - "Insert_command_line_options_and_files_from_a_file_6030": "Inserisce i file e le opzioni della riga di comando da un file.", - "Install_0_95014": "Installare '{0}'", - "Install_all_missing_types_packages_95033": "Installare tutti i pacchetti di tipi mancanti", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interfaccia '{0}' non può estendere simultaneamente i tipi '{1}' e '{2}'.", - "Interface_0_incorrectly_extends_interface_1_2430": "L'interfaccia '{0}' estende in modo errato l'interfaccia '{1}'.", - "Interface_declaration_cannot_have_implements_clause_1176": "La dichiarazione di interfaccia non può avere una clausola 'implements'.", - "Interface_must_be_given_a_name_1438": "È necessario assegnare un nome all'interfaccia.", - "Interface_name_cannot_be_0_2427": "Il nome dell'interfaccia non può essere '{0}'.", - "Interop_Constraints_6252": "Vincoli interoperabilità", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpreta i tipi di proprietà facoltativi scritti, invece di aggiungere 'undefined'.", - "Invalid_character_1127": "Carattere non valido.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "L'identificatore di importazione non è valido ' {0}' non contiene risoluzioni possibili.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' viene risolto in un modulo non tipizzato in '{1}', che non può essere aumentato.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' non è stato trovato.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Catena facoltativa non valida dalla nuova espressione. Si intendeva chiamare '{0}()'?", - "Invalid_reference_directive_syntax_1084": "La sintassi della direttiva 'reference' non è valida.", - "Invalid_syntax_in_decorator_1498": "Sintassi non valida nell'elemento Decorator.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso non valido di '{0}'. Non può essere usato all'interno di un blocco statico di classe.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso non valido di '{0}'. I moduli vengono impostati automaticamente in modalità strict.", - "Invalid_use_of_0_in_strict_mode_1100": "Uso non valido di '{0}' in modalità strict.", - "Invalid_value_for_ignoreDeprecations_5103": "Valore non valido per '--ignoreDeprecations'.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Il valore non è valido per 'jsxFactory'. '{0}' non è un identificatore o un nome qualificato valido.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Il valore non è valido per 'jsxFragmentFactory'. '{0}' non è un identificatore o un nome qualificato valido.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Il valore di '--reactNamespace' non è valido. '{0}' non è un identificatore valido", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "È probabile che manchi una virgola per separare queste due espressioni di modello. Costituiscono un'espressione di modello con tag che non può essere richiamata.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Il relativo tipo di elemento '{0}' non è un elemento JSX valido.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Il relativo tipo di istanza '{0}' non è un elemento JSX valido.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Il relativo tipo restituito '{0}' non è un elemento JSX valido.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Il relativo tipo '{0}' non è un tipo di elemento JSX valido.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Il tag '@{0} {1}' di JSDoc non corrisponde alla clausola 'extends {2}'.", - "JSDoc_0_is_not_attached_to_a_class_8022": "Il tag '@{0}' di JSDoc non è collegato a una classe.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' può essere presente solo nell'ultimo parametro di una firma.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome. Se contenesse un tipo matrice, corrisponderebbe ad 'arguments'.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Il typedef di JSDoc può essere convertito nel tipo TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Il tag '@typedef' di JSDoc deve contenere un'annotazione di tipo o essere seguito dal tag '@property' o '@member'.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "I typedef di JSDoc possono essere convertiti nel tipo TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "I tipi JSDoc possono essere usati solo nei commenti della documentazione.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "I tipi JSDoc possono essere convertiti in tipi TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Agli attributi JSX deve essere assegnato solo un elemento 'expression' non vuoto.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "Per l'elemento JSX '{0}' non esiste alcun tag di chiusura corrispondente.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La classe dell'elemento JSX non supporta gli attributi perché non contiene una proprietà '{0}'.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "L'elemento JSX contiene implicitamente il tipo 'any' perché non esiste alcuna interfaccia 'JSX.{0}'.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "L'elemento JSX contiene implicitamente il tipo 'any' perché il tipo globale 'JSX.Element' non esiste.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Il tipo '{0}' dell'elemento JSX non contiene firme di costrutto o chiamata.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Gli elementi JSX non possono contenere più attributi con lo stesso nome.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Nelle espressioni JSX non si può usare l'operatore virgola. Si intendeva scrivere una matrice?", - "JSX_expressions_must_have_one_parent_element_2657": "Le espressioni JSX devono contenere un solo elemento padre.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Per il frammento JSX non esiste alcun tag di chiusura corrispondente.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Le espressioni di accesso alla proprietà JSX non possono includere nomi dello spazio dei nomi JSX", - "JSX_spread_child_must_be_an_array_type_2609": "L'elemento figlio dell'attributo spread JSX deve essere un tipo di matrice.", - "JavaScript_Support_6247": "Supporto JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "La destinazione di collegamento non può oltrepassare il limite della funzione.", - "KIND_6034": "TIPOLOGIA", - "Keywords_cannot_contain_escape_characters_1260": "Le parole chiave non possono contenere caratteri di escape.", - "LOCATION_6037": "PERCORSO", - "Language_and_Environment_6254": "Linguaggio e ambiente", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Il lato sinistro dell'operatore virgola non è usato e non ha effetti collaterali.", - "Library_0_specified_in_compilerOptions_1422": "Libreria '{0}' specificata in compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Libreria a cui viene fatto riferimento tramite '{0}' dal file '{1}'", - "Line_break_not_permitted_here_1142": "L'interruzione di riga non è consentita in questo punto.", - "Line_terminator_not_permitted_before_arrow_1200": "Il terminatore di riga non è consentito prima di arrow.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Elenco dei suffissi dei nomi di file da cercare durante la risoluzione di un modulo.", - "List_of_folders_to_include_type_definitions_from_6161": "Elenco di cartelle da cui includere le definizioni di tipo.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Elenco delle cartelle radice il cui contenuto combinato rappresenta la struttura del progetto in fase di esecuzione.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Verrà eseguito il caricamento di '{0}' dalla directory radice '{1}'. Percorso candidato: '{2}'.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Verrà eseguito il caricamento del modulo '{0}' dalla cartella 'node_modules'. Tipi di file di destinazione: {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Verrà eseguito il caricamento del modulo come file/cartella. Percorso candidato del modulo: '{0}'. Tipi di file di destinazione: {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Registra i percorsi usati durante il processo 'moduleResolution'.", - "Longest_matching_prefix_for_0_is_1_6108": "Il prefisso di corrispondenza più lungo per '{0}' è '{1}'.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Verrà eseguita la ricerca nella cartella 'node_modules'. Percorso iniziale: '{0}'.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Impostare tutte le chiamate a 'super()' come prima istruzione nel costruttore", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Imposta keyof in modo che restituisca solo stringhe invece di stringhe, numeri o simboli. Opzione legacy.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Impostare la chiamata a 'super()' come prima istruzione nel costruttore", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Il tipo di oggetto con mapping contiene implicitamente un tipo di modello 'any'.", - "Mark_array_literal_as_const_90070": "Contrassegnare il valore letterale della matrice come const", - "Matched_0_condition_1_6403": "Corrispondenza tra '{0}' condizione '{1}'.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Corrispondente per impostazione predefinita al criterio di inclusione '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "Corrispondenza tramite criterio di inclusione '{0}' in '{1}'", - "Member_0_implicitly_has_an_1_type_7008": "Il membro '{0}' contiene implicitamente un tipo '{1}'.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Il membro '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", - "Merge_conflict_marker_encountered_1185": "È stato rilevato un indicatore di conflitti di merge.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La dichiarazione '{0}' sottoposta a merge non può includere una dichiarazione di esportazione predefinita. Provare ad aggiungere una dichiarazione 'export default {0}' distinta.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La metaproprietà '{0}' è consentita solo nel corpo di una dichiarazione di funzione, di un'espressione di funzione o di un costruttore.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Il metodo '{0}' non può includere un'implementazione perché è contrassegnato come astratto.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome '{1}' del modulo privato '{2}'.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome privato '{1}'.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Il metodo deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", - "Method_not_implemented_95158": "Metodo non implementato.", - "Modifiers_cannot_appear_here_1184": "In questo punto non è possibile usare modificatori.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Il modulo '{0}' può essere importato come predefinito solo con il flag '{1}'", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Non è possibile importare il modulo '{0}' utilizzando questo costrutto. L'identificatore può essere solo risolto in un modulo ES, che non può essere importato con 'require'. Usare invece un'importazione ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Il modulo '{0}' dichiara '{1}' in locale, ma viene esportato come '{2}'.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Il modulo '{0}' dichiara '{1}' in locale, ma non viene esportato.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Il modulo '{0}' non fa riferimento a un tipo, ma viene usato come tipo in questo punto. Si intendeva 'typeof import('{0}')'?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Il modulo '{0}' non fa riferimento a un valore, ma qui viene usato come valore.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Il modulo {0} ha già esportato un membro denominato '{1}'. Per risolvere l'ambiguità, provare a esportarlo di nuovo in modo esplicito.", - "Module_0_has_no_default_export_1192": "Per il modulo '{0}' non esistono esportazioni predefinite.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Non esiste alcuna esportazione predefinita per il modulo '{0}'. Si intendeva usare 'import { {1} } from {0}'?", - "Module_0_has_no_exported_member_1_2305": "Il modulo '{0}' non contiene un membro esportato '{1}'.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Non esiste alcun membro esportato '{1}' per il modulo '{0}'. Si intendeva usare 'import {1} from {0}'?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Il modulo '{0}' è nascosto da una dichiarazione locale con lo stesso nome.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Il modulo '{0}' usa 'export =' e non può essere usato con 'export *'.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Il modulo '{0}' è stato risolto come modulo di ambiente dichiarato in locale nel file '{1}'.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Il modulo '{0}' è stato risolto in '{1}', ma '--allowArbitraryExtensions' non è impostato.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Il modulo '{0}' è stato risolto in '{1}', ma '--jsx' non è impostato.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Il modulo '{0}' è stato risolto in '{1}', ma '--resolveJsonModule' non viene usato.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "I nomi delle dichiarazioni di modulo possono usare solo stringhe racchiuse tra virgolette.", - "Module_name_0_matched_pattern_1_6092": "Nome del modulo: '{0}'. Criterio corrispondente: '{1}'.", - "Module_name_0_was_not_resolved_6090": "======== Il nome del modulo '{0}' non è stato risolto. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Il nome del modulo '{0}' è stato risolto in '{1}'. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Il nome del modulo '{0}' è stato risolto in '{1}' con ID pacchetto '{2}'. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Il tipo di risoluzione del modulo non è specificato. Verrà usato '{0}'.", - "Module_resolution_using_rootDirs_has_failed_6111": "La risoluzione del modulo con 'rootDirs' non è riuscita.", - "Modules_6244": "Moduli", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Spostare i modificatori di elemento tupla con etichetta nelle etichette", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Spostare l'espressione nell'esportazione predefinita in una variabile e aggiungervi un'annotazione di tipo.", - "Move_to_a_new_file_95049": "Passare a un nuovo file", - "Move_to_file_95178": "Spostare nel file", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Non sono consentiti più separatori numerici consecutivi.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Non è possibile usare più implementazioni di costruttore.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NUOVA RIGA", - "Name_is_not_valid_95136": "Nome non valido.", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "I gruppi di acquisizione denominati sono disponibili solo se destinati a 'ES2018' o versioni successive.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "I gruppi di acquisizione denominati con lo stesso nome devono escludersi a vicenda.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Le importazioni denominate non sono consentite in un'importazione posticipata.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Le importazioni denominate da un file JSON in un modulo ECMAScript non sono consentite quando \"module\" è impostato su \"{0}\".", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Le proprietà denominate '{0}' dei tipi '{1}' e '{2}' non sono identiche.", - "Namespace_0_has_no_exported_member_1_2694": "Lo spazio dei nomi '{0}' non contiene un membro esportato '{1}'.", - "Namespace_must_be_given_a_name_1437": "È necessario assegnare un nome allo spazio dei nomi.", - "Namespace_name_cannot_be_0_2819": "Lo spazio dei nomi non può essere '{0}'.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Gli spazi dei nomi non sono consentiti nei file di script globali quando '{0}' è abilitato. Se questo file non deve essere uno script globale, impostare 'moduleDetection' su 'force' o aggiungere un'istruzione 'export {}' vuota.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Non è possibile applicare né elementi Decorator né modificatori ai parametri 'this'.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nessun costruttore di base contiene il numero specificato di argomenti tipo.", - "No_constituent_of_type_0_is_callable_2755": "Non è possibile chiamare nessun costituente di tipo '{0}'.", - "No_constituent_of_type_0_is_constructable_2759": "Non è possibile costruire nessun costituente di tipo '{0}'.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Non è stata trovata alcuna firma dell'indice con un parametro di tipo '{0}' nel tipo '{1}'.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Non sono stati trovati input nel file config '{0}'. Percorsi 'include' specificati: '{1}'. Percorsi 'exclude' specificati: '{2}'.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Non più supportato. Nelle versioni precedenti imposta manualmente la codifica del testo per la lettura dei file.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nessun overload prevede {0} argomenti, ma esistono overload che prevedono {1} o {2} argomenti.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nessun overload prevede {0} argomenti di tipo, ma esistono overload che prevedono {1} o {2} argomenti di tipo.", - "No_overload_matches_this_call_2769": "Nessun overload corrisponde a questa chiamata.", - "No_type_could_be_extracted_from_this_type_node_95134": "Non è stato possibile estrarre il tipo da questo nodo di tipo", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Non esiste alcun valore nell'ambito per la proprietà a sintassi abbreviata '{0}'. Dichiararne uno o specificare un inizializzatore.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non astratta '{0}' non implementa il membro astratto ereditato {1} della classe '{2}'.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2} e altri {3}.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'espressione di classe non astratta non implementa il membro astratto ereditato '{0}' dalla classe '{1}'.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1} e altri {2}.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Le asserzioni non Null possono essere usate solo in file TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "In questo punto è dichiarato un parametro non semplice.", - "Not_all_code_paths_return_a_value_7030": "Non tutti i percorsi del codice restituiscono un valore.", - "Not_all_constituents_of_type_0_are_callable_2756": "Non tutti i costituenti di tipo '{0}' possono essere chiamati.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Non tutti i costituenti di tipo '{0}' possono essere costruiti.", - "Numbers_out_of_order_in_quantifier_1506": "Numeri non in ordine nel quantificatore.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "I valori letterali numerici con valori assoluti uguali o maggiori di 2^53 sono troppo grandi per essere rappresentati in modo corretto come numeri interi.", - "Numeric_separators_are_not_allowed_here_6188": "I separatori numerici non sono consentiti in questa posizione.", - "Object_is_of_type_unknown_2571": "L'oggetto è di tipo 'unknown'.", - "Object_is_possibly_null_2531": "L'oggetto è probabilmente 'null'.", - "Object_is_possibly_null_or_undefined_2533": "L'oggetto è probabilmente 'null' o 'undefined'.", - "Object_is_possibly_undefined_2532": "L'oggetto è probabilmente 'undefined'.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Il valore letterale di oggetto può specificare solo proprietà note e '{0}' non esiste nel tipo '{1}'.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Il valore letterale dell'oggetto può specificare solo proprietà note, ma '{0}' non esiste nel tipo '{1}'. Si intendeva scrivere '{2}'?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La proprietà '{0}' del valore letterale di oggetto contiene implicitamente un tipo '{1}'.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Gli oggetti che contengono proprietà a sintassi abbreviata non possono essere dedotti con --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Gli oggetti che contengono assegnazioni di estensione non possono essere dedotti con --isolatedDeclarations.", - "Octal_digit_expected_1178": "È prevista la cifra ottale.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Le sequenze di escape e i backreference ottali non sono consentiti in una classe di caratteri. Se è stata utilizzata come sequenza di escape, usare la sintassi '{0}'.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Le sequenze di escape ottali non sono consentite. Usare la sintassi '{0}'.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "I valori letterali ottali non sono consentiti. Usare la sintassi '{0}'.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valore di '{0}.{1}' è la stringa '{2}' e si presuppone che l'altro sia un valore numerico sconosciuto.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In un'istruzione 'for...in' è consentita solo una singola dichiarazione di variabile.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In un'istruzione 'for...of' è consentita solo una singola dichiarazione di variabile.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Con la parola chiave 'new' può essere chiamata solo una funzione void.", - "Only_ambient_modules_can_use_quoted_names_1035": "I nomi delimitati si possono usare solo nei moduli di ambiente.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Unitamente a --{0} sono supportati solo i moduli 'amd' e 'system'.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "È possibile dedurre solo matrici const con --isolatedDeclarations.", - "Only_emit_d_ts_declaration_files_6014": "Creare solo i file di dichiarazione '.d.ts'.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Restituisce solo file d.ts e non file JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Con la parola chiave 'super' è possibile accedere solo ai metodi pubblico e protetto della classe di base.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Non è possibile applicare l'operatore '{0}' al tipo '{1}'.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Non è possibile applicare l'operatore '{0}' ai tipi '{1}' e '{2}'.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Gli operatori non devono essere misti all'interno di una classe di caratteri. Eseguire il wrapping in una classe annidata.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Esclude un progetto dal controllo dei riferimenti a più progetti durante la modifica.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L'opzione '{0}={1}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L'opzione '{0}={1}' è deprecata e non funzionerà più in TypeScript {2}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{3}\"'.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'false' o 'null' sulla riga di comando.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'null' sulla riga di comando.", - "Option_0_can_only_be_specified_on_command_line_6266": "L'opzione '{0}' può essere specificata solo nella riga di comando.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'opzione '{0}' può essere usata solo quando si specifica l'opzione '--inlineSourceMap' o '--sourceMap'.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L'opzione '{0}' può essere usata solo quando 'moduleResolution' è impostato su 'node16', 'nodenext' o 'bundler'.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "L'opzione '{0}' può essere usata solo quando 'module' è impostato su 'preserve' o 'es2015' o versione successiva.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Non è possibile specificare l'opzione '{0}' quando l'opzione 'jsx' è '{1}'.", - "Option_0_cannot_be_specified_with_option_1_5053": "Non è possibile specificare l'opzione '{0}' insieme all'opzione '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Non è possibile specificare l'opzione '{0}' senza l'opzione '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Non è possibile specificare l'opzione '{0}' senza l'opzione'{1}' o '{2}'.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L'opzione '{0}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L'opzione '{0}' è deprecata e non funzionerà più in TypeScript {1}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{2}\"'.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L'opzione '{0}' è ridondante e non può essere specificata con l'opzione'{1}'.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "L'opzione 'allowImportingTsExtensions' può essere usata solo quando è impostata una delle seguenti opzioni: 'noEmit', 'emitDeclarationOnly' o 'rewriteRelativeImportExtensions'.", - "Option_build_must_be_the_first_command_line_argument_6369": "L'opzione '--build' deve essere il primo argomento della riga di comando.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'opzione 'isolatedModules' può essere usata solo quando si specifica l'opzione '--module' oppure il valore dell'opzione 'target' è 'ES2015' o maggiore.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L'opzione 'moduleResolution' deve essere impostata su '{0}' (o rimanere non specificata) quando l'opzione 'module' è impostata su '{1}'.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L'opzione 'module' deve essere impostata su '{0}' quando l'opzione 'moduleResolution' è impostata su '{1}'.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Non è possibile disabilitare l'opzione 'preserveConstEnums' quando '{0}' è abilitato.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Non è possibile combinare l'opzione 'project' con file di origine in una riga di comando.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'moduleResolution' è impostato su 'classic'.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'module' è impostato su 'none', 'system' o 'umd'.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Non è possibile usare l'opzione 'verbatimModuleSyntax' quando 'module' è impostato su 'UMD', 'AMD' o 'System'.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Non è possibile combinare le opzioni '{0}' e '{1}'.", - "Options_Colon_6027": "Opzioni:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Altri output", - "Output_Formatting_6256": "Formattazione dell'output", - "Output_compiler_performance_information_after_building_6615": "Restituisce informazioni sulle prestazioni del compilatore dopo la compilazione.", - "Output_directory_for_generated_declaration_files_6166": "Directory di output per i file di dichiarazione generati.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Il file di output '{0}' non è stato compilato dal file di origine '{1}'.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "L'output del progetto di riferimento '{0}' è incluso perché è stato specificato '{1}'", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "L'output del progetto di riferimento '{0}' è incluso perché il valore specificato per '--module' è 'none'", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Restituisce informazioni più dettagliate sulle prestazioni del compilatore dopo la compilazione.", - "Overload_0_of_1_2_gave_the_following_error_2772": "L'overload {0} di {1},'{2}', ha restituito l'errore seguente.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Le firme di overload devono essere tutte astratte o tutte non astratte.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Le firme di overload devono essere tutte di ambiente o non di ambiente.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Le firme di overload devono essere tutte esportate o tutte non esportate.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Le firme di overload devono essere tutte facoltative o obbligatorie.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Le firme di overload devono essere tutte pubbliche, private o protette.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Il parametro '{0}' non può fare riferimento all'identificatore '{1}' dichiarato dopo di esso.", - "Parameter_0_cannot_reference_itself_2372": "Il parametro '{0}' non può fare riferimento a se stesso.", - "Parameter_0_implicitly_has_an_1_type_7006": "Il parametro '{0}' contiene implicitamente un tipo '{1}'.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Il parametro '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Il parametro '{0}' non si trova nella stessa posizione del parametro '{1}'.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Il parametro '{0}' della funzione di accesso contiene o usa il nome '{1}' del modulo esterno {2}, ma non può essere rinominato.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Il parametro '{0}' della funzione di accesso contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Il parametro '{0}' della funzione di accesso contiene o usa il nome privato '{1}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Il parametro '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Il parametro '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Il parametro '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Il parametro '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Il parametro '{0}' della funzione esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Il parametro '{0}' della funzione esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Il parametro '{0}' della funzione esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Il parametro '{0}' della firma dell'indice dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Il parametro '{0}' della firma dell'indice dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Il parametro '{0}' del metodo dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Il parametro '{0}' del metodo dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome privato '{1}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome privato '{1}'.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Il parametro non può contenere il punto interrogativo e l'inizializzatore.", - "Parameter_declaration_expected_1138": "È prevista la dichiarazione di parametro.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Il parametro include un nome ma non un tipo. Si intendeva '{0}: {1}'?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "I modificatori di parametro possono esere usati solo in file TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Il parametro deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Esegue l'analisi in modalità strict e crea la direttiva \"use strict\" per ogni file di origine.", - "Part_of_files_list_in_tsconfig_json_1409": "Parte dell'elenco 'files' in tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Il criterio '{0}' deve contenere al massimo un carattere '*'.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Gli intervalli delle prestazioni per '--Diagnostics' o '--extendedDiagnostics' non sono disponibili in questa sessione. Non è stato possibile trovare un'implementazione nativa dell'API Prestazioni Web.", - "Platform_specific_6912": "Specifico della piattaforma", - "Prefix_0_with_an_underscore_90025": "Anteporre un carattere di sottolineatura a '{0}'", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Aggiungere 'declare' come prefisso a tutte le dichiarazioni di proprietà non corrette", - "Prefix_all_unused_declarations_with_where_possible_95025": "Aggiungere a tutte le dichiarazioni non usate il prefisso '_', laddove possibile", - "Prefix_with_declare_95094": "Aggiungere il prefisso 'declare'", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conserva i valori importati non usati nell'output JavaScript che altrimenti verrebbe rimosso.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Stampa tutti i file letti durante la compilazione.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Stampa i file letti durante la compilazione e indica il motivo per cui sono stati inclusi.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Stampa i nomi dei file e il motivo per cui fanno parte della compilazione.", - "Print_names_of_files_part_of_the_compilation_6155": "Stampa i nomi dei file che fanno parte della compilazione.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Stampa i nomi dei file che fanno parte della compilazione, quindi arresta l'elaborazione.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Stampa i nomi dei file generati che fanno parte della compilazione.", - "Print_the_compiler_s_version_6019": "Stampa la versione del compilatore.", - "Print_the_final_configuration_instead_of_building_1350": "Stampa la configurazione finale invece di eseguire la compilazione.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Stampa i nomi dei file creati al termine di una compilazione.", - "Print_this_message_6017": "Stampa questo messaggio.", - "Private_accessor_was_defined_without_a_getter_2806": "La funzione di accesso privata è stata definita senza un getter.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Il campo privato '{0}' deve essere dichiarato in una classe di inclusione.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Gli identificatori privati non sono consentiti nelle dichiarazioni di variabili.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Gli identificatori privati non sono consentiti all'esterno del corpo della classe.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Gli identificatori privati sono consentiti solo nei corpi di classe e possono essere usati solo come parte di una dichiarazione di un membro della classe, dell'accesso alle proprietà o sulla parte sinistra di un'espressione 'in'.", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Gli identificatori privati sono disponibili solo se destinati a ECMAScript 2015 e versioni successive.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Non è possibile usare gli identificatori privati come parametri.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Non è possibile accedere al membro privato o protetto '{0}' in un parametro di tipo.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Non è possibile compilare il progetto '{0}' perché la dipendenza '{1}' contiene errori", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Non è possibile compilare il progetto '{0}' perché la relativa dipendenza '{1}' non è stata compilata", - "Project_0_is_being_forcibly_rebuilt_6388": "Il progetto '{0}' è stato ricompilato forzatamente", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il file '{2}' era un file radice di compilazione ma non più aggiornato.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il programma deve segnalare errori.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Il '{0}' del progetto non è aggiornato perché il file buildinfo '{1}' indica che alcune modifiche non sono state generate", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che è presente una modifica in compilerOptions", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Il progetto '{0}' non è aggiornato perché l'output '{1}' è meno recente dell'input '{2}'", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Il progetto '{0}' non è aggiornato perché il file di output '{1}' non esiste", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Il progetto '{0}' non è aggiornato perché l'output per il progetto è stato generato con la versione '{1}' che non corrisponde alla versione corrente '{2}'", - "Project_0_is_up_to_date_6361": "Il progetto '{0}' è aggiornato", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Il progetto '{0}' è aggiornato perché l'input più recente '{1}' è meno recente dell'output '{2}'", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Project '{0}' è aggiornato ma deve aggiornare i timestamp dei file di output precedenti ai file di input", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Il progetto '{0}' è aggiornato con i file con estensione d.ts delle relative dipendenze", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "I riferimenti al progetto non possono formare un grafico circolare. Ciclo rilevato: {0}", - "Projects_6255": "Progetti", - "Projects_in_this_build_Colon_0_6355": "Progetti in questa compilazione: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Le proprietà con il modificatore 'funzione di accesso' sono disponibili solo quando la destinazione è ECMAScript 2015 e versioni successive.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La proprietà '{0}' non può includere un inizializzatore perché è contrassegnata come astratta.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La proprietà '{0}' deriva da una firma dell'indice, quindi è necessario accedervi con ['{0}'].", - "Property_0_does_not_exist_on_type_1_2339": "La proprietà '{0}' non esiste nel tipo '{1}'.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva '{2}'?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva accedere al membro statico '{2}'?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La proprietà '{0}' non esiste nel tipo '{1}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{2}' o versioni successive.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La proprietà '{0}' non esiste nel tipo '{1}'. Provare a modificare l'opzione del compilatore 'lib' per includere 'dom'.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata in un blocco statico di classe.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata nel costruttore.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso get manca un'annotazione di tipo restituito.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso set manca un'annotazione di tipo di parametro.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La proprietà '{0}' contiene implicitamente il tipo 'any', ma è possibile dedurre un tipo migliore per la funzione di accesso get dall'utilizzo.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La proprietà '{0}' contiene implicitamente il tipo 'any', ma è possibile dedurre un tipo migliore per la funzione di accesso set dall'utilizzo.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "La proprietà '{0}' nel tipo '{1}' non è assegnabile alla stessa proprietà nel tipo di base '{2}'.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La proprietà '{0}' nel tipo '{1}' non è assegnabile al tipo '{2}'.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La proprietà '{0}' nel tipo '{1}' fa riferimento a un membro diverso a cui non è possibile accedere dall'interno del tipo '{2}'.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "La proprietà '{0}' è dichiarata, ma il suo valore non viene mai letto.", - "Property_0_is_incompatible_with_index_signature_2530": "La proprietà '{0}' non è compatibile con la firma dell'indice.", - "Property_0_is_missing_in_type_1_2324": "Nel tipo '{1}' manca la proprietà '{0}'.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La proprietà '{0}' manca nel tipo '{1}', ma è obbligatoria nel tipo '{2}'.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "La proprietà '{0}' non è accessibile all'esterno della classe '{1}' perché contiene un identificatore privato.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La proprietà '{0}' è facoltativa nel tipo '{1}', ma obbligatoria nel tipo '{2}'.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "La proprietà '{0}' è privata e accessibile solo all'interno della classe '{1}'.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La proprietà '{0}' è privata nel tipo '{1}', ma non nel tipo '{2}'.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La proprietà '{0}' è protetta e accessibile solo tramite un'istanza della classe '{1}'. Si tratta di un'istanza della classe '{2}'.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La proprietà '{0}' è protetta e accessibile solo all'interno della classe '{1}' e delle relative sottoclassi.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La proprietà '{0}' è protetta, ma il tipo '{1}' non è una classe derivata da '{2}'.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La proprietà '{0}' è protetta nel tipo '{1}', ma è pubblica non nel tipo '{2}'.", - "Property_0_is_used_before_being_assigned_2565": "La proprietà '{0}' viene usata prima dell'assegnazione.", - "Property_0_is_used_before_its_initialization_2729": "La proprietà '{0}' viene usata prima della relativa inizializzazione.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La proprietà '{0}' potrebbe non esistere nel tipo '{1}'. Si intendeva '{2}'?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La proprietà '{0}' dell'attributo spread JSX non è assegnabile alla proprietà di destinazione.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La proprietà '{0}' del tipo di classe anonima esportata potrebbe essere non privata o protetta.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La proprietà '{0}' del tipo '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", - "Property_0_was_also_declared_here_2733": "In questo punto è dichiarata anche la proprietà '{0}'.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La proprietà '{0}' sovrascriverà la proprietà di base in '{1}'. Se questo comportamento è intenzionale, aggiungere un inizializzatore; in caso contrario, aggiungere un modificatore 'declare' o rimuovere la dichiarazione ridondante.", - "Property_assignment_expected_1136": "È prevista l'assegnazione di proprietà.", - "Property_destructuring_pattern_expected_1180": "È previsto il criterio di destrutturazione della proprietà.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La proprietà deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", - "Property_or_signature_expected_1131": "È prevista la proprietà o la firma.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Il valore della proprietà può essere solo un valore letterale stringa, un valore letterale numerico, 'true', 'false', 'null', un valore letterale di oggetto o un valore letterale di matrice.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornisce supporto completo per elementi iterabili in 'for-of', estensione e destrutturazione quando la destinazione è 'ES5'.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo privato '{2}'.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome privato '{1}'.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Il metodo statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Il metodo statico pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo privato '{2}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Il metodo statico pubblico '{0}' della classe esportata ha o usa il nome privato '{1}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Il nome completo '{0}' non è consentito se non si specifica un parametro '@param {object} {1}' iniziale.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un errore quando un parametro di funzione non viene letto.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Genera un errore in caso di espressioni o dichiarazioni con tipo 'any' implicito.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Genera un errore in caso di espressioni 'this con un tipo 'any' implicito.", - "Range_out_of_order_in_character_class_1517": "Intervallo non in ordine nella classe di caratteri.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Riesportare un tipo quando '{0}' è abilitato richiede l'uso di 'export type'.", - "React_components_cannot_include_JSX_namespace_names_2639": "I componenti React non possono includere nomi di spazio dei nomi JSX", - "Recommended_Options_6294": "Opzioni consigliate", - "Redirect_output_structure_to_the_directory_6006": "Reindirizza la struttura di output alla directory.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Riduce il numero di progetti caricati automaticamente da TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "Il progetto di riferimento '{0}' non può disabilitare la creazione.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Il progetto di riferimento '{0}' deve includere l'impostazione \"composite\": true.", - "Referenced_via_0_from_file_1_1400": "Riferimento tramite '{0}' dal file '{1}'", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Provare ad aggiungere un'estensione al percorso di importazione.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Si intendeva '{0}'?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Rimuove un elenco di directory dal processo dell'espressione di controllo.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Rimuove un elenco di file dall'elaborazione della modalità espressione di controllo.", - "Remove_all_unnecessary_override_modifiers_95163": "Rimuovere tutti i modificatori 'override' non necessari", - "Remove_all_unnecessary_uses_of_await_95087": "Rimuovere tutti gli utilizzi non necessari di 'await'", - "Remove_all_unreachable_code_95051": "Rimuovere tutto il codice non eseguibile", - "Remove_all_unused_labels_95054": "Rimuovere tutte le etichette inutilizzate", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Rimuovere le parentesi graffe da tutti i corpi della funzione arrow con problemi specifici", - "Remove_braces_from_arrow_function_95060": "Rimuovere le parentesi graffe dalla funzione arrow", - "Remove_braces_from_arrow_function_body_95112": "Rimuovere le parentesi graffe dal corpo della funzione arrow", - "Remove_import_from_0_90005": "Rimuovere l'importazione da '{0}'", - "Remove_override_modifier_95161": "Rimuovere il modificatore 'override'", - "Remove_parentheses_95126": "Rimuovere le parentesi", - "Remove_template_tag_90011": "Rimuovere il tag template", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Rimuove il limite di 20 MB per le dimensioni totali del codice sorgente relativo ai file JavaScript nel server di linguaggio TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Rimuovi 'type' dalla dichiarazione di importazione da \"{0}\"", - "Remove_type_from_import_of_0_from_1_90056": "Rimuovi 'type' dall'importazione di '{0}' da \"{1}\"", - "Remove_type_parameters_90012": "Rimuovere i parametri di tipo", - "Remove_unnecessary_await_95086": "Rimuovere l'elemento 'await' non necessario", - "Remove_unreachable_code_95050": "Rimuovere il codice non eseguibile", - "Remove_unused_declaration_for_Colon_0_90004": "Rimuovere la dichiarazione inutilizzata per: '{0}'", - "Remove_unused_declarations_for_Colon_0_90041": "Rimuovere le dichiarazioni inutilizzate per: '{0}'", - "Remove_unused_destructuring_declaration_90039": "Rimuovere la dichiarazione di destrutturazione inutilizzata", - "Remove_unused_label_95053": "Rimuovere l'etichetta inutilizzata", - "Remove_variable_statement_90010": "Rimuovere l'istruzione di variabile", - "Rename_param_tag_name_0_to_1_95173": "Cambiane il nome '{0}' del tag '@param' in '{1}'", - "Replace_0_with_Promise_1_90036": "Sostituire '{0}' con 'Promise<{1}>'", - "Replace_all_unused_infer_with_unknown_90031": "Sostituire tutti gli elementi 'infer' inutilizzati con 'unknown'", - "Replace_import_with_0_95015": "Sostituire l'importazione con '{0}'.", - "Replace_infer_0_with_unknown_90030": "Sostituire 'infer {0}' con 'unknown'", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Segnala l'errore quando non tutti i percorsi del codice nella funzione restituiscono un valore.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Segnala errori per i casi di fallthrough nell'istruzione switch.", - "Report_errors_in_js_files_8019": "Segnala gli errori presenti nei file con estensione js.", - "Report_errors_on_unused_locals_6134": "Segnala errori relativi a variabili locali non usate.", - "Report_errors_on_unused_parameters_6135": "Segnala errori relativi a parametri non usati.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Richiede un'annotazione sufficiente sulle esportazioni in modo che altri strumenti possano generare in modo semplice i file di dichiarazione.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Richiedere alle proprietà non dichiarate da firme dell'indice di usare gli accessi agli elementi.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "I parametri di tipo obbligatori potrebbero non seguire i parametri di tipo facoltativi.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La risoluzione per il modulo '{0}' è stata trovata nella cache dal percorso '{1}'.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La risoluzione per la direttiva '{0}' del riferimento al tipo è stata trovata nella cache dal percorso '{1}'.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Risoluzione del nome non relativo non riuscita; il tentativo di utilizzare le funzionalità moderne di risoluzione dei nodi è disabilitato per verificare se è necessario aggiornare la configurazione della libreria npm.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Risoluzione del nome non relativo non riuscita; è in corso un tentativo con '--moduleResolution bundler' per verificare se il progetto potrebbe richiedere l'aggiornamento della configurazione.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Risolvere 'keyof' solo in nomi di proprietà con valori stringa (senza numeri o simboli).", - "Resolved_under_condition_0_6414": "Risolto nella condizione '{0}'.", - "Resolving_in_0_mode_with_conditions_1_6402": "Risoluzione in modalità {0} con condizioni {1}.", - "Resolving_module_0_from_1_6086": "======== Risoluzione del modulo '{0}' da '{1}'. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Verrà eseguita la risoluzione del nome del modulo '{0}' relativo all'URL di base '{1}' - '{2}'.", - "Resolving_real_path_for_0_result_1_6130": "Risoluzione del percorso reale per '{0}'. Risultato: '{1}'.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' con directory radice '{2}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' e directory radice non impostata. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice non impostata. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Risoluzione della direttiva di riferimento al tipo per il programma che specifica typeRoot personalizzati. La ricerca nella cartella 'node_modules' verrà ignorata.", - "Resolving_with_primary_search_path_0_6121": "La risoluzione verrà eseguita con il percorso di ricerca primaria '{0}'.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]'.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]', ma è possibile dedurre un tipo migliore dall'utilizzo.", - "Rest_types_may_only_be_created_from_object_types_2700": "È possibile creare tipi rest solo da tipi di oggetto.", - "Return_type_annotation_circularly_references_itself_2577": "L'annotazione di tipo restituito contiene un riferimento circolare a se stessa.", - "Return_type_must_be_inferred_from_a_function_95149": "Il tipo restituito deve essere dedotto da una funzione", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Il tipo restituito della firma del costruttore dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Il tipo restituito della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Il tipo restituito della firma del costruttore deve essere assegnabile al tipo di istanza della classe.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Il tipo restituito della funzione esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Il tipo restituito della funzione esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Il tipo restituito della funzione esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Il tipo restituito della firma dell'indice dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Il tipo restituito della firma dell'indice dell'interfaccia esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Il tipo restituito del metodo dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Il tipo restituito del metodo dell'interfaccia esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2}, ma non può essere rinominato.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome privato '{0}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Il tipo restituito del getter di proprietà pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno '{2}', ma non può essere rinominato.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Il tipo restituito del getter di proprietà pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Il tipo restituito del getter statico pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome privato '{0}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' è stato trovato nella cache dal percorso '{2}'. È stato risolto correttamente in '{3}' con ID pacchetto '{4}'.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente non è stato risolto.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}'.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}' con ID pacchetto '{4}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente non è stato risolto.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente è stato risolto correttamente in '{2}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.", - "Rewrite_all_as_indexed_access_types_95034": "Riscrivere tutti come tipi di accesso indicizzati", - "Rewrite_as_the_indexed_access_type_0_90026": "Riscrivere come tipo di accesso indicizzato '{0}'", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Riscrivere le estensioni di file \".ts\", \".tsx\", \".mts\" e \".cts\" nei percorsi di importazione relativi dell'equivalente JavaScript nei file di output.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "L'operando destro di ?? non è raggiungibile perché l'operando sinistro non è mai nullish.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Non è possibile determinare la directory radice. I percorsi di ricerca primaria verranno ignorati.", - "Root_file_specified_for_compilation_1427": "File radice specificato per la compilazione", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATEGIA", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salva i file .tsbuildinfo per consentire la compilazione incrementale dei progetti.", - "Saw_non_matching_condition_0_6405": "Visualizzata la condizione di corrispondenza '{0}'.", - "Scoped_package_detected_looking_in_0_6182": "Il pacchetto con ambito è stato rilevato. Verrà eseguita una ricerca in '{0}'", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Ricerca di estensioni di fallback in tutte le directory node_modules predecessori: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Ricerca di estensioni preferite in tutte le directory node_modules predecessori: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Vedi anche https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "La selezione non corrisponde a una o più istruzioni valide", - "Selection_is_not_a_valid_type_node_95133": "La selezione non corrisponde a un nodo di tipo valido", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Imposta la versione del linguaggio JavaScript per il codice JavaScript creato e include le dichiarazioni di libreria compatibili.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Imposta la lingua della messaggistica da TypeScript. Non influisce sulla creazione.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Impostare l'opzione 'module' nel file di configurazione su '{0}'", - "Set_the_newline_character_for_emitting_files_6659": "Imposta il carattere di nuova riga per la creazione di file.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Impostare l'opzione 'target' nel file di configurazione su '{0}'", - "Setters_cannot_return_a_value_2408": "I setter non possono restituire un valore.", - "Show_all_compiler_options_6169": "Mostra tutte le opzioni del compilatore.", - "Show_diagnostic_information_6149": "Mostra le informazioni di diagnostica.", - "Show_verbose_diagnostic_information_6150": "Mostra le informazioni di diagnostica dettagliate.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostra gli elementi che vengono compilati (o eliminati, se specificati con l'opzione '--clean')", - "Signature_0_must_be_a_type_predicate_1224": "La firma '{0}' deve essere un predicato di tipo.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Le dichiarazioni firma possono essere usate solo in file TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorare la compilazione di progetti downstream in base a un errore nel progetto upstream.", - "Skip_type_checking_all_d_ts_files_6693": "Ignora il controllo del tipo di tutti i file .d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignora il controllo dei tipi dei file .d.ts inclusi con TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Ignora il controllo del tipo dei file di dichiarazione.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' contiene errori", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' non è stata compilata", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Vine ignorato il modulo '{0}' che sembra un URI assoluto, tipi di file di destinazione: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "L'origine del progetto di riferimento '{0}' è inclusa perché è stato specificato '{1}'", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "L'origine del progetto di riferimento '{0}' è inclusa perché il valore specificato per '--module' è 'none'", - "Source_has_0_element_s_but_target_allows_only_1_2619": "L'origine contiene {0} elemento/i ma la destinazione ne consente solo {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "L'origine contiene {0} elemento/i ma la destinazione ne richiede {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "L'origine non fornisce alcuna corrispondenza per l'elemento obbligatorio alla posizione {0} nella destinazione.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "L'origine non fornisce alcuna corrispondenza per l'elemento variadic alla posizione {0} nella destinazione.", - "Specify_ECMAScript_target_version_6015": "Specifica la versione di destinazione di ECMAScript.", - "Specify_JSX_code_generation_6080": "Specifica la generazione del codice JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Consente di specificare un file che aggrega tutti gli output in un unico file JavaScript. Se 'declaration' è true, designa anche un file che aggrega tutto l'output dei file .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Consente di specificare un elenco di criteri GLOB che corrispondono ai file da includere nella compilazione.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Consente di specificare un elenco di plug-in da includere del servizio di linguaggio.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Consente di specificare un set di file di dichiarazione della libreria aggregati che descrivono l'ambiente di runtime di destinazione.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Consente di specificare un set di voci che eseguono di nuovo il mapping delle direttive import nei percorsi di ricerca aggiuntivi.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Consente di specificare un array di oggetti che indicano percorsi per i progetti. Usato nei riferimenti dei progetti.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Consente di specificare una cartella di output per tutti i file creati.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Specificare il comportamento di creazione/controllo per le importazioni usate solo per i tipi.", - "Specify_file_to_store_incremental_compilation_information_6380": "Specificare il file per l'archiviazione delle informazioni di compilazione incrementale", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Consente di specificare in che modo TypeScript cerca un file da un identificatore di modulo specifico.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Consente di specifica la modalità di controllo delle directory nei sistemi in cui non sono presenti funzionalità ricorsive di controllo dei file.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Consente di specificare il funzionamento della modalità espressione di controllo TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Specificare i file di libreria da includere nella compilazione.", - "Specify_module_code_generation_6016": "Specifica la generazione del codice del modulo.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Specifica l'identificatore di modulo usato per importare funzioni factory JSX quando si usa 'jsx: react-jsx*'.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Consente di specificare più cartelle che fungono da './node_modules/@types'.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Consente di specificare uno o più percorsi o riferimenti al modulo del nodo ai file di configurazione di base da cui vengono ereditate le impostazioni.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Consente di specificare le opzioni per l'acquisizione automatica dei file di dichiarazione.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Specifica la strategia per la creazione di un'espressione di controllo di polling quando non viene creata con eventi del file system: 'FixedInterval' (impostazione predefinita), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Specifica la strategia per il controllo della directory in piattaforme che non supportano il controllo ricorsivo in modo nativo: 'UseFsEvents' (impostazione predefinita), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Specifica la strategia per il controllo del file: 'FixedPollingInterval' (impostazione predefinita), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Consente di specificare il riferimento al fragmento JSX usato per i frammenti quando la destinazione è la creazione JSX React, ad esempio 'React.Fragment' o 'Fragment'.", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX 'react', ad esempio 'React.createElement' o 'h'.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX React, ad esempio 'React.createElement' o 'h'.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Specificare la funzione della factory di frammenti JSX da usare quando la destinazione è la creazione JSX 'react' quando è specificata l'opzione del compilatore 'jsxFactory', ad esempio 'Fragment'.", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Specificare la directory di base per risolvere i nomi di modulo non relativi.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Specifica la sequenza di fine riga da usare per la creazione dei file, ovvero 'CRLF' (in DOS) o 'LF' (in UNIX).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Specifica il percorso in cui il debugger deve trovare i file TypeScript invece dei percorsi di origine.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Specifica il percorso in cui il debugger deve trovare i file map invece dei percorsi generati.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Consente di specificare la profondità massima della cartella utilizzata per il controllo dei file JavaScript da 'node_modules'. Applicabile solo con 'allowJs'.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Specificare l'identificatore di modulo da usare da cui importare le funzioni di factory 'jsx' e 'jsxs', ad esempio react", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Consente di specificare l'oggetto richiamato per 'createElement'. Si applica quando la destinazione è la creazione JSX `react`.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Consente di specificare la directory di output per i file di dichiarazione generati.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Consente di specificare il percorso per il file di compilazione incrementale .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Specifica la directory radice dei file di input. Usare per controllare la struttura della directory di output con --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Consente di specificare la cartella radice nei file di origine.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Consente di specificare il percorso radice per consentire ai debugger di trovare il codice sorgente di riferimento.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Consente di specificare i tipi di nomi dei pacchetti da includere senza farvi riferimento in un file di origine.", - "Specify_what_JSX_code_is_generated_6646": "Consente di specificare il codice JSX generato.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Consente di specificare l'approccio che il watcher deve adottare se il sistema esaurisce i watcher di file nativi.", - "Specify_what_module_code_is_generated_6657": "Consente di specificare il codice del modulo generato.", - "Split_all_invalid_type_only_imports_1367": "Dividere tutte le importazioni solo di tipi non valide", - "Split_into_two_separate_import_declarations_1366": "Dividere in due dichiarazioni di importazione separate", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'operatore Spread in espressioni 'new' è disponibile solo se destinato a ECMAScript 5 e versioni successive.", - "Spread_types_may_only_be_created_from_object_types_2698": "È possibile creare tipi spread solo da tipi di oggetto.", - "Starting_compilation_in_watch_mode_6031": "Avvio della compilazione in modalità espressione di controllo...", - "Statement_expected_1129": "È prevista l'istruzione.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Le istruzioni non sono consentite in contesti di ambiente.", - "Static_members_cannot_reference_class_type_parameters_2302": "I membri statici non possono fare riferimento a parametri di tipo classe.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La proprietà statica '{0}' è in conflitto con la proprietà predefinita 'Function.{0}' della funzione del costruttore '{1}'.", - "Stricter_Typechecking_Options_6292": "Opzioni di controllo dei tipi più rigorose", - "String_literal_expected_1141": "È previsto un valore letterale stringa.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "I nomi di importazione ed esportazione di valori letterali stringa non sono supportati quando il flag '--module' è impostato su 'es2015' o 'es2020'.", - "String_literal_with_double_quotes_expected_1327": "È previsto un valore letterale stringa con virgolette doppie.", - "Style_Options_6293": "Opzioni di stile", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Applica stili a errori e messaggi usando colore e contesto (sperimentale).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Quando è presente un segno meno, devono essere presenti flag di criteri secondari.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Le dichiarazioni di proprietà successive devono essere dello stesso tipo. La proprietà '{0}' deve essere di tipo '{1}', ma qui è di tipo '{2}'.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Le dichiarazioni di variabili successive devono essere dello stesso tipo. La variabile '{0}' deve essere di tipo '{1}', mentre è di tipo '{2}'.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Il tipo della sostituzione '{0}' per il criterio '{1}' non è corretto. È previsto 'string', ma è stato ottenuto '{2}'.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La sostituzione '{0}' nel criterio '{1}' può contenere al massimo un carattere '*'.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Le sostituzioni per il criterio '{0}' devono essere una matrice.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Le sostituzioni per il criterio '{0}' non devono essere una matrice vuota.", - "Successfully_created_a_tsconfig_json_file_6071": "La creazione di un file tsconfig.json è riuscita.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Le chiamate super non sono consentite all'esterno di costruttori o nelle funzioni annidate all'interno di costruttori.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Elimina i controlli delle proprietà in eccesso per i valori letterali di oggetto.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Non visualizza gli errori noImplicitAny per gli oggetti di indicizzazione in cui mancano le firme dell'indice.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Disabilita gli errori 'noImplicitAny' durante l'indicizzazione di oggetti in cui mancano le firme dell'indice.", - "Switch_each_misused_0_to_1_95138": "Cambiare ogni '{0}' non usato correttamente in '{1}'", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chiama in modo sincrono i callback e aggiorna lo stato dei watcher di directory in piattaforme che non supportano il controllo ricorsivo in modo nativo.", - "Syntax_Colon_0_6023": "Sintassi: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Con il tag '{0}' sono previsti almeno '{1}' argomenti, ma la factory JSX '{2}' ne fornisce al massimo '{3}'.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Le espressioni di modello con tag non sono consentite in una catena facoltativa.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La destinazione consente solo {0} elemento/i ma l'origine potrebbe contenerne di più.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La destinazione richiede {0} elemento/i ma l'origine potrebbe contenerne di meno.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma di destinazione fornisce un numero insufficiente di argomenti. {0} o più elementi previsti, ma {1} effettivi.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Il modificatore '{0}' può essere usato solo in file TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Non è possibile applicare l'operatore '{0}' al tipo 'symbol'.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'operatore '{0}' non è consentito per i tipi booleani. Provare a usare '{1}'.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La proprietà '{0}' di un iteratore asincrono deve essere un metodo.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "La proprietà '{0}' di un iteratore deve essere un metodo.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Il tipo 'Object' può essere assegnato a un numero molto limitato di altri tipi. Si intendeva usare il tipo 'any'?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Non è possibile impostare contemporaneamente i flag Unicode (u) e Unicode Sets (v).", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Non è possibile fare riferimento all'oggetto 'arguments' in una funzione arrow in ES5. Provare a usare un'espressione di funzione standard.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Non è possibile fare riferimento all'oggetto 'arguments' in un metodo o una funzione asincrona in ES5. Provare a usare un metodo o una funzione standard.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Il corpo di un'istruzione 'if' non può essere l'istruzione vuota.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La chiamata sarebbe riuscita rispetto a questa implementazione, ma le firme di implementazione degli overload non sono visibili esternamente.", - "The_character_set_of_the_input_files_6163": "Set di caratteri dei file di input.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La funzione arrow contenitore acquisisce il valore globale di 'this'.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Il corpo del modulo o la funzione che contiene è troppo grande per l'analisi del flusso di controllo.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Il file corrente è un modulo CommonJS e non può usare 'await' al livello principale.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Il file corrente è un modulo CommonJS le cui importazioni genereranno chiamate 'require'. Tuttavia, il file a cui si fa riferimento è un modulo ECMAScript e non può essere importato con 'require'. Provare a scrivere una chiamata 'import(\"{0}\")' dinamica.", - "The_current_host_does_not_support_the_0_option_5001": "L'host corrente non supporta l'opzione '{0}'.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La dichiarazione di '{0}' che probabilmente si intende usare viene definita in questo punto", - "The_declaration_was_marked_as_deprecated_here_2798": "La dichiarazione è stata contrassegnata come deprecata in questo punto.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Il tipo previsto proviene dalla proprietà '{0}', dichiarata in questo punto nel tipo '{1}'", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Il tipo previsto proviene dal tipo restituito di questa firma.", - "The_expected_type_comes_from_this_index_signature_6501": "Il tipo previsto proviene da questa firma dell'indice.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'espressione di un'assegnazione di esportazione deve essere un identificatore o un nome completo in un contesto di ambiente.", - "The_file_is_in_the_program_because_Colon_1430": "Motivo per cui il file è presente nel programma:", - "The_files_list_in_config_file_0_is_empty_18002": "L'elenco 'files' nel file config '{0}' è vuoto.", - "The_first_export_default_is_here_2752": "In questo punto è presente il valore predefinito per la prima esportazione.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Il primo parametro del metodo 'then' di una promessa deve essere un callback.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Il tipo globale 'JSX.{0}' non può contenere più di una proprietà.", - "The_implementation_signature_is_declared_here_2750": "In questo punto viene dichiarata la firma di implementazione.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "La metaproprietà' Import. meta ' non è consentita per i file che vengono compilati nell'output di CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La metaproprietà 'import.meta' è consentita solo quando l'opzione '--module' è 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20' o 'nodenext'.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Non è possibile assegnare un nome al tipo derivato di '{0}' senza un riferimento a '{1}'. È probabile che non sia portabile. È necessaria un'annotazione di tipo.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Il tipo dedotto di '{0}' fa riferimento a un tipo con una struttura ciclica che non può essere facilmente serializzata. È necessaria un'annotazione di tipo.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Il tipo dedotto di '{0}' fa riferimento a un tipo '{1}' non accessibile. È necessaria un'annotazione di tipo.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Il tipo dedotto di questo nodo supera la lunghezza massima serializzata dal compilatore. È necessaria un'annotazione di tipo esplicita.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L'inizializzatore di una dichiarazione 'using' deve essere un oggetto con un metodo '[Symbol.dispose]()' oppure essere 'null' o 'undefined'.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L'inizializzatore di una dichiarazione 'await using' deve essere un oggetto con un metodo '[Symbol.asyncDispose]()' o '[Symbol.dispose]()' oppure essere 'null' o 'undefined'.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersezione '{0}' è stata ridotta a 'never' perché la proprietà '{1}' esiste in più costituenti ed è privata in alcuni.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersezione '{0}' è stata ridotta a 'never' perché in alcuni costituenti della proprietà '{1}' sono presenti tipi in conflitto.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La parola chiave 'intrinsic' può essere usata solo per dichiarare tipi intrinseci forniti dal compilatore.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Per usare frammenti JSX con l'opzione del compilatore 'jsxFactory', è necessario specificare l'opzione del compilatore 'jsxFragmentFactory'.", - "The_last_overload_gave_the_following_error_2770": "L'ultimo overload ha restituito l'errore seguente.", - "The_last_overload_is_declared_here_2771": "In questo punto viene dichiarato l'ultimo overload.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte sinistra di un'espressione 'for...in' non può essere un criterio di destrutturazione.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'using'.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'await using'.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Nella parte sinistra di un'espressione 'for...in' non è possibile usare un'annotazione di tipo.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte sinistra di un'istruzione 'for...in' non può essere un accesso a proprietà facoltativo.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte sinistra di un'istruzione 'for...in' deve essere una variabile o un accesso a proprietà.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte sinistra di un'espressione 'for...in' deve essere di tipo 'string' o 'any'.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Nella parte sinistra di un'espressione 'for...of' non è possibile usare un'annotazione di tipo.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte sinistra di un'istruzione 'for...of' non può essere un accesso a proprietà facoltativo.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "La parte sinistra di un'istruzione 'for...of' non può essere 'async'.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte sinistra di un'istruzione 'for...of' deve essere una variabile o un accesso a proprietà.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte sinistra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte sinistra di un'espressione di assegnazione non può essere un accesso a proprietà facoltativo.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte sinistra di un'espressione di assegnazione deve essere una variabile o un accesso a proprietà.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La parte sinistra di un'espressione 'instanceof' deve essere assegnabile al primo argomento del metodo '[Symbol.hasInstance]' della parte destra.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte sinistra di un'espressione 'instanceof' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Impostazioni locali usate per la visualizzazione di messaggi all'utente, ad esempio 'it-it'", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondità massima delle dipendenze per la ricerca in node_modules e il caricamento dei file JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "L'operando di un operatore 'delete' non può essere un identificatore privato.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "L'operando di un operatore 'delete' non può essere una proprietà di sola lettura.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "L'operando di un operatore 'delete' deve essere un riferimento a proprietà.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "L'operando di un operatore 'delete' deve essere facoltativo.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "L'operando di un operatore di incremento o decremento non può essere un accesso a proprietà facoltativo.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "L'operando di un operatore di incremento o decremento deve essere una variabile o un accesso a proprietà.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "In questo punto il parser dovrebbe trovare un simbolo '{1}' abbinato al token '{0}'.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di esportazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di importazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Non è possibile accedere alla proprietà '{0}' nel tipo '{1}' all'interno di questa classe perché è nascosta da un altro identificatore privato con la stessa ortografia.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Il tipo restituito di una funzione di espressione Decorator del parametro deve essere 'void' o 'any'.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Il tipo restituito di una funzione di espressione Decorator della proprietà deve essere 'void' o 'any'.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Il tipo restituito di una funzione asincrona deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise. Si intendeva scrivere 'Promise<{0}>'?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte destra di un'istruzione 'for...in' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo, ma in questo caso il tipo è '{0}'.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte destra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La parte destra di un'espressione 'instanceof' deve essere di tipo 'any', una classe, una funzione o un altro tipo assegnabile al tipo di interfaccia 'Function' oppure un tipo di oggetto con un metodo 'Symbol.hasInstance'.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La parte destra di un'espressione 'instanceof' non deve essere un'espressione di creazione di un'istanza.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "Il valore radice di un file '{0}' deve essere un oggetto.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede almeno {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "La dichiarazione di oscuramento di '{0}' viene definita in questo punto", - "The_signature_0_of_1_is_deprecated_6387": "La firma '{0}' di '{1}' è deprecata.", - "The_specified_path_does_not_exist_Colon_0_5058": "Il percorso specificato non esiste: '{0}'.", - "The_tag_was_first_specified_here_8034": "Il tag è stato specificato per la prima volta in questo punto.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "La destinazione di un'assegnazione rest di oggetto non può essere un accesso a proprietà facoltativo.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "La destinazione di un'assegnazione REST di oggetto deve essere una variabile o un accesso a proprietà.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Il contesto 'this' del tipo '{0}' non è assegnabile a quello 'this' di tipo '{1}' del metodo.", - "The_this_types_of_each_signature_are_incompatible_2685": "I tipi 'this' delle singole firme non sono compatibili.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Il tipo '{0}' è 'readonly' e non può essere assegnato al tipo modificabile '{1}'.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Impossibile utilizzare il modificatore 'tipo' in un'esportazione denominata quando 'tipo di esportazione' viene usato nell'istruzione di esportazione.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Impossibile utilizzare il modificatore 'tipo' in un'importazione denominata quando 'tipo di importazione' viene usato nella relativa istruzione di importazione.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossibile serializzare questo tipo di nodo perché la sua proprietà '{0}' non può essere serializzata.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Il tipo restituito dal metodo '{0}()' di un iteratore asincrono deve essere una promessa per un tipo con una proprietà 'value'.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Il tipo restituito dal metodo '{0}()' di un iteratore deve contenere una proprietà 'value'.", - "The_types_of_0_are_incompatible_between_these_types_2200": "I tipi di '{0}' sono incompatibili tra questi tipi.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "I tipi restituiti da '{0}' sono incompatibili tra questi tipi.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "Non è possibile usare qui il valore '{0}'.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La dichiarazione di variabile di un'istruzione 'for...in' non può contenere un inizializzatore.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La dichiarazione di variabile di un'istruzione 'for...of' non può contenere un inizializzatore.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'istruzione 'with' non è supportata. Il tipo di tutti i simboli in un blocco 'with' è 'any'.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Sono presenti tipi in '{0}', ma non è stato possibile risolvere questo risultato con l'impostazione 'moduleResolution' corrente. Provare a eseguire l'aggiornamento a 'node16', 'nodenext' o 'bundler'.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Esistono tipi in '{0}', ma non è stato possibile risolvere questo risultato quando si rispettano le \"esportazioni\" del file package.json. Potrebbe essere necessario aggiornare i file package.json o typings della libreria '{1}'.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Non è presente alcun gruppo di acquisizione denominato '{0}' in questa espressione regolare.", - "There_is_nothing_available_for_repetition_1507": "Nessun elemento disponibile per la ripetizione.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Questo tag JSX richiede che \"{0}\" sia incluso nell'ambito, ma non è stato trovato.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Questo tag JSX richiede che il percorso del modulo \"{0}\" esista, ma non è stato trovato alcun tag. Assicurarsi di avere i tipi per il pacchetto appropriato installati.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Con la proprietà '{0}' del tag JSX è previsto un singolo elemento figlio di tipo '{1}', ma sono stati specificati più elementi figlio.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Con la proprietà '{0}' del tag JSX è previsto il tipo '{1}' che richiede più elementi figlio, ma è stato specificato un singolo elemento figlio.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Questo backreference fa riferimento a un gruppo che non esiste. Non sono presenti gruppi di acquisizione in questa espressione regolare.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Questo backreference fa riferimento a un gruppo che non esiste. Sono presenti solo {0} gruppi di acquisizione in questa espressione regolare.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Questa espressione binaria non è mai nullish. Mancano le parentesi?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Il carattere non può essere preceduto da un carattere di escape in un'espressione regolare.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Questo confronto sembra non intenzionale perché i tipi '{0}' e '{1}' non presentano alcuna sovrapposizione.", - "This_condition_will_always_return_0_2845": "Questa condizione restituirà sempre '{0}'.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Questa condizione restituirà sempre '{0}' perché JavaScript confronta gli oggetti per riferimento, non per valore.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Questa condizione restituirà sempre true perché questo elemento '{0}' è sempre definito.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Questa condizione restituirà sempre true perché questa funzione è sempre definita. Si intendeva chiamarla?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Questa funzione del costruttore può essere convertita in una dichiarazione di classe.", - "This_expression_is_always_nullish_2871": "Questa espressione è sempre nullish.", - "This_expression_is_never_nullish_2881": "Questa espressione non è mai null.", - "This_expression_is_not_callable_2349": "Questa espressione non può essere chiamata.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Non è possibile chiamare questa espressione perché è una funzione di accesso 'get'. Si intendeva usarla senza '()'?", - "This_expression_is_not_constructable_2351": "Questa espressione non può essere costruita.", - "This_file_already_has_a_default_export_95130": "Per questo file esiste già un'esportazione predefinita", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Questo percorso di importazione non è sicuro da riscrivere, perché viene risolto in un altro progetto e il percorso relativo tra i file di output dei progetti non corrisponde al percorso relativo tra i file di input.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Questa importazione usa un'estensione \"{0}\" per la risoluzione in un file TypeScript di input, ma non verrà riscritta durante la creazione perché non è un percorso relativo.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Questa è la dichiarazione che verrà aumentata. Provare a spostare la dichiarazione che causa l'aumento nello stesso file.", - "This_kind_of_expression_is_always_falsy_2873": "Questo tipo di espressione è sempre falso.", - "This_kind_of_expression_is_always_truthy_2872": "Questo tipo di espressione è sempre veritiero.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Può essere convertita in una funzione asincrona.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Questo membro non può avere un commento JSDoc con un tag '@override' perché non è dichiarato nella classe di base '{0}'.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Questo membro non può avere un commento JSDoc con un tag 'override' perché non è dichiarato nella classe di base '{0}'. Intendevi '{1}'?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Questo membro non può avere un commento JSDoc con un tag '@override' perché la classe che lo contiene '{0}' non estende un'altra classe.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Questo membro non può avere un commento JSDoc con un tag '@override' perché il suo nome è dinamico.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'. Forse intendevi '{1}'?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Questo membro non può includere un modificatore 'override' perché la classe '{0}', che lo contiene, non estende un'altra classe.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Questo membro non può avere un modificatore 'override' perché il nome è dinamico.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Questo membro deve avere un commento JSDoc con un tag '@override' perché sostituisce un membro nella classe di base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Questo membro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Questo membro deve includere un modificatore 'override' perché esegue l'override di un metodo astratto dichiarato nella classe di base '{0}'.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "È possibile fare riferimento a questo modulo solo con importazioni/esportazioni ECMAScript attivando il flag '{0}' e facendo riferimento alla relativa esportazione predefinita.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Il modulo viene dichiarato con 'export =' e può essere usato solo con un'importazione predefinita quando si usa il flag '{0}'.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Questa operazione può essere semplificata. Questo turno è identico a '{0} {1} {2}'.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Questo overload restituisce implicitamente il tipo '{0}' perché manca un'annotazione di tipo restituito.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Questa firma di overload non è compatibile con la relativa firma di implementazione.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Questo parametro non è consentito con la direttiva 'use strict'.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Questa proprietà di parametro deve avere un commento JSDoc con un tag '@override' perché sostituisce un membro nella classe di base '{0}'.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Questa proprietà parametro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Non è possibile attivare/disattivare questo flag di espressione regolare all'interno di un criterio secondario.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Questo flag di espressione regolare è disponibile solo quando la destinazione è '{0}' o versioni successive.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Questo percorso di importazione relativo non è sicuro da riscrivere perché sembra un nome di file, ma in realtà si risolve in \"{0}\".", - "This_spread_always_overwrites_this_property_2785": "Questo spread sovrascrive sempre questa proprietà.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Questa sintassi non è consentita quando 'erasableSyntaxOnly' è abilitato.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Questa sintassi è riservata ai file con estensione MTS o CTS. Aggiungere una virgola finale o un vincolo esplicito.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Questa sintassi è riservata ai file con estensione mts o cts. Utilizzare un'espressione 'as'.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Con questa sintassi è richiesto un helper importato, ma il modulo '{0}' non è stato trovato.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Con questa sintassi è richiesto un helper importato denominato '{1}', che non esiste in '{0}'. Provare ad aggiornare la versione di '{0}'.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Con questa sintassi è richiesto un helper importato denominato '{1}' con {2} parametri, che non è compatibile con quello presente in '{0}'. Provare ad aggiornare la versione di '{0}'.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Questo parametro di tipo potrebbe richiedere un vincolo `extends {0}`.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Questo uso di 'import' non è valido. le chiamate 'import()' possono essere scritte, ma devono avere parentesi e non possono avere argomenti di tipo.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Per convertire questo file in un modulo ECMAScript, aggiungere il campo '\"type\": \"module\"' a '{0}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Per convertire il file in un modulo ECMAScript, modificarne l'estensione in '{0}' oppure aggiungere il campo '\"type\": \"module\"' a '{1}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Per convertire questo file in un modulo ECMAScript, modificarne l'estensione in '{0}' o creare un file package.json locale con '{ \"type\": \"module\" }'.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Per convertire questo file in un modulo ECMAScript, creare un file package.json locale con '{ \"type\": \"module\" }'.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Le espressioni 'await' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Le istruzioni 'await using' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Le dichiarazioni di primo livello nei file con estensione d.ts devono iniziare con un modificatore 'declare' o 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "I cicli 'for await' di primo livello sono consentiti solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", - "Trailing_comma_not_allowed_1009": "La virgola finale non è consentita.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Esegue il transpile di ogni file in un modulo separato (simile a 'ts.transpileModule').", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Provare con `npm i --save-dev @types/{1}` se esiste oppure aggiungere un nuovo file di dichiarazione con estensione d.ts contenente `declare module '{0}';`", - "Trying_other_entries_in_rootDirs_6110": "Verrà effettuato un tentativo con altre voci in 'rootDirs'.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Verrà effettuato un tentativo con la sostituzione '{0}'. Percorso candidato del modulo: '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Il tipo di tupla '{0}' con lunghezza '{1}' non contiene elementi alla posizione di indice '{2}'.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Gli argomenti tipo di tupla contengono un riferimento circolare a se stessi.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Il tipo '{0}' può essere iterato solo quando si usa il flag '--downlevelIteration' o quando '--target' è impostato su 'es2015' o un valore superiore.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Non è possibile usare il tipo '{0}' come tipo di indice.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Non è possibile usare il tipo '{0}' per indicizzare il tipo '{1}'.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Il tipo '{0}' non soddisfa il vincolo '{1}'.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Il tipo '{0}' non soddisfa il tipo previsto '{1}'.", - "Type_0_has_no_call_signatures_2757": "Il tipo '{0}' non contiene firme di chiamata.", - "Type_0_has_no_construct_signatures_2761": "Il tipo '{0}' non contiene firme del costrutto.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Nel tipo '{0}' non esiste alcuna firma dell'indice corrispondente per il tipo '{1}'.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "Il tipo '{0}' non ha proprietà in comune con il tipo '{1}'.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Il tipo '{0}' non ha firme per cui è applicabile l'elenco degli argomenti tipo.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Il tipo '{0}' è generico e può essere indicizzato solo per la lettura.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2} e altre {3}.", - "Type_0_is_not_a_constructor_function_type_2507": "Il tipo '{0}' non è un tipo di funzione del costruttore.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Il tipo '{0}' non è un tipo restituito di funzione asincrona valido in ES5 perché non fa riferimento a un valore di costruttore compatibile con Promise.", - "Type_0_is_not_an_array_type_2461": "Il tipo '{0}' non è un tipo matrice.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Il tipo '{0}' non è un tipo matrice o stringa.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Il tipo '{0}' non è un tipo matrice o stringa oppure non contiene un metodo '[Symbol.iterator]()' che restituisce un iteratore.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Il tipo '{0}' non è un tipo matrice oppure non contiene un metodo '[Symbol.iterator]()' che restituisce un iteratore.", - "Type_0_is_not_assignable_to_type_1_2322": "Il tipo '{0}' non è assegnabile al tipo '{1}'.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Si intendeva '{2}'?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Sono presenti due tipi diversi con questo nome, che però non sono correlati.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Il tipo '{0}' non può essere assegnato al tipo '{1}' come indicato dall'annotazione di varianza.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Il tipo '{0}' non è assegnabile al tipo '{1}' come richiesto per i valori dei membri di enumerazione calcolati.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' al tipo di destinazione.", - "Type_0_is_not_comparable_to_type_1_2678": "Il tipo '{0}' non è confrontabile con il tipo '{1}'.", - "Type_0_is_not_generic_2315": "Il tipo '{0}' non è generico.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Il tipo '{0}' può rappresentare un valore primitivo, che non è consentito come operando destro dell'operatore 'in'.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Il tipo '{0}' deve contenere un metodo '[Symbol.asyncIterator]()' che restituisce un iteratore asincrono.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Il tipo '{0}' deve contenere un metodo '[Symbol.iterator]()' che restituisce un iteratore.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Il tipo '{0}' non fornisce corrispondenze per la firma '{1}'.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Il tipo '{0}' fa riferimento a se stesso in modo ricorsivo come tipo di base.", - "Type_Checking_6248": "Controllo del tipo", - "Type_alias_0_circularly_references_itself_2456": "L'alias di tipo '{0}' contiene un riferimento circolare a se stesso.", - "Type_alias_must_be_given_a_name_1439": "È necessario assegnare un nome all'alias del tipo.", - "Type_alias_name_cannot_be_0_2457": "Il nome dell'alias di tipo non può essere '{0}'.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Gli alias di tipo possono esere usati solo in file TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "L'annotazione di tipo non può essere inclusa in una dichiarazione di costruttore.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Le annotazioni tipo possono essere usate solo in file TypeScript.", - "Type_argument_expected_1140": "È previsto l'argomento tipo.", - "Type_argument_list_cannot_be_empty_1099": "L'elenco degli argomenti tipo non può essere vuoto.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Gli argomenti tipo possono essere usati solo in file TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Gli argomenti tipo per '{0}' contengono un riferimento circolare a se stessi.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Le espressioni di asserzione di tipo possono essere usate solo in file TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Il tipo alla posizione {0} nell'origine non è compatibile con il tipo alla posizione {1} nella destinazione.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Il tipo alle posizioni dalla {0} alla {1} nell'origine non è compatibile con il tipo alla posizione {2} nella destinazione.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Non è possibile usare il tipo contenente il nome privato '{0}' con --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "File della dichiarazione di tipo da includere nella compilazione.", - "Type_expected_1110": "È previsto il tipo.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "L’importazione dei tipi di asserzione deve contenere esattamente una chiave, 'resolution-mode', con valore 'import' o 'require'.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "L'importazione del tipo di un modulo ECMAScript da un modulo CommonJS deve avere un attributo 'resolution-mode'.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creazione di un'istanza di tipo presenta troppi livelli ed è probabilmente infinita.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Il tipo viene usato come riferimento diretto o indiretto nel callback di fulfillment del relativo metodo 'then'.", - "Type_library_referenced_via_0_from_file_1_1402": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}'", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}' con packageId '{2}'", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Il tipo dell'operando 'await' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Il tipo del valore della proprietà calcolata è '{0}', che non è assegnabile al tipo '{1}'.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Il tipo di variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Il tipo di elementi iterati di un operando 'yield*' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Il tipo di proprietà '{0}' contiene un riferimento circolare a se stesso nel tipo con mapping '{1}'.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Il tipo dell'operando 'yield' in un generatore asincrono deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "L'importazione solo tipo di un modulo ECMAScript da un modulo CommonJS deve avere un attributo 'resolution-mode'.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Il tipo è originato in corrispondenza di questa importazione. Non è possibile chiamare o costruire un'importazione di tipo spazio dei nomi e verrà restituito un errore in fase di esecuzione. Provare a usare un'importazione predefinita o un'importazione di require in questo punto.", - "Type_parameter_0_has_a_circular_constraint_2313": "Il parametro di tipo '{0}' contiene un vincolo circolare.", - "Type_parameter_0_has_a_circular_default_2716": "Il parametro di tipo '{0}' contiene un'impostazione predefinita circolare.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Il parametro di tipo '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Il parametro di tipo '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Il parametro di tipo '{0}' della classe esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Il parametro di tipo '{0}' della funzione esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Il parametro di tipo '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Il parametro di tipo '{0}' del tipo di oggetto con mapping esportato usa il nome privato '{1}'.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Il parametro di tipo '{0}' dell'alias di tipo esportato contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Il parametro di tipo '{0}' del metodo dell'interfaccia esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Il parametro di tipo '{0}' del metodo pubblico della classe esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Il parametro di tipo '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome privato '{1}'.", - "Type_parameter_declaration_expected_1139": "È prevista la dichiarazione di parametro di tipo.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Le dichiarazioni di parametro di tipo possono essere usate solo in file TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Le impostazioni predefinite del parametro di tipo possono fare riferimento solo a parametri di tipo dichiarati in precedenza.", - "Type_parameter_list_cannot_be_empty_1098": "L'elenco dei parametri di tipo non può essere vuoto.", - "Type_parameter_name_cannot_be_0_2368": "Il nome del parametro di tipo non può essere '{0}'.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "I parametri di tipo non possono essere inclusi in una dichiarazione di costruttore.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Il predicato di tipo '{0}' non è assegnabile a '{1}'.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Il tipo produce un tipo di tupla troppo grande da rappresentare.", - "Type_reference_directive_0_was_not_resolved_6120": "======== La direttiva '{0}' del riferimento al tipo non è stata risolta. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}'. Primaria: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}' con ID pacchetto ID '{2}'. Primaria: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Le espressioni di soddisfazione del tipo possono essere usate solo nei file TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "I tipi non possono essere visualizzati nelle dichiarazioni di esportazione nei file JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "I tipi contengono dichiarazioni separate di una proprietà privata '{0}'.", - "Types_of_construct_signatures_are_incompatible_2419": "I tipi delle firme del costrutto sono incompatibili.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "I tipi dei parametri '{0}' e '{1}' sono incompatibili.", - "Types_of_property_0_are_incompatible_2326": "I tipi della proprietà '{0}' sono incompatibili.", - "Unable_to_open_file_0_6050": "Non è possibile aprire il file '{0}'.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Non è possibile risolvere la firma dell'espressione Decorator della classe quando è chiamata come espressione.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Non è possibile risolvere la firma dell'espressione Decorator del metodo quando è chiamata come espressione.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Non è possibile risolvere la firma dell'espressione Decorator del parametro quando è chiamata come espressione.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Non è possibile risolvere la firma dell'espressione Decorator della proprietà quando è chiamata come espressione.", - "Undetermined_character_escape_1513": "Carattere di escape indeterminato.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' imprevisto. La barra rovesciata stava per un carattere escape?", - "Unexpected_end_of_text_1126": "Fine del testo imprevista.", - "Unexpected_keyword_or_identifier_1434": "Parola chiave o identificatore imprevisti.", - "Unexpected_token_1012": "Token imprevisto.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token imprevisto. È previsto un costruttore, un metodo, una funzione di accesso o una proprietà.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token imprevisto. Sono previsti nomi di parametro senza parentesi graffe.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Token imprevisto. Si intendeva `{'>'}` o `>`?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token imprevisto. Si intendeva `{'}'}` o `}`?", - "Unexpected_token_expected_1179": "Token imprevisto. È previsto '{'.", - "Unicode_escape_sequence_cannot_appear_here_17021": "La sequenza di escape Unicode non può essere visualizzata qui.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Le sequenze di escape Unicode sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Le espressioni valore della proprietà sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", - "Unknown_Unicode_property_name_1524": "Nome della proprietà Unicode sconosciuto.", - "Unknown_Unicode_property_name_or_value_1529": "Nome o valore della proprietà Unicode sconosciuto.", - "Unknown_Unicode_property_value_1526": "Valore della proprietà Unicode sconosciuto.", - "Unknown_build_option_0_5072": "L'opzione di compilazione '{0}' è sconosciuta.", - "Unknown_build_option_0_Did_you_mean_1_5077": "L'opzione di compilazione '{0}' è sconosciuta. Si intendeva '{1}'?", - "Unknown_compiler_option_0_5023": "Opzione del compilatore sconosciuta: '{0}'.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "L'opzione '{0}' del compilatore è sconosciuta. Si intendeva '{1}'?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Parola chiave o identificatore sconosciuti. Intendevi '{0}'?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "L'opzione 'excludes' è sconosciuta. Si intendeva 'exclude'?", - "Unknown_regular_expression_flag_1499": "Flag di espressione regolare sconosciuto.", - "Unknown_type_acquisition_option_0_17010": "L'opzione '{0}' relativa all'acquisizione del tipo è sconosciuta.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "L'opzione di acquisizione del tipo '{0}' è sconosciuta. Si intendeva '{1}'?", - "Unknown_watch_option_0_5078": "L'opzione '{0}' dell'espressione di controllo è sconosciuta.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "L'opzione '{0}' dell'espressione di controllo è sconosciuta. Si intendeva '{1}'?", - "Unreachable_code_detected_7027": "È stato rilevato codice non raggiungibile.", - "Unterminated_Unicode_escape_sequence_1199": "Sequenza di escape Unicode senza terminazione.", - "Unterminated_quoted_string_in_response_file_0_6045": "Stringa tra virgolette senza terminazione nel file di risposta '{0}'.", - "Unterminated_regular_expression_literal_1161": "Valore letterale di espressione regolare senza terminazione.", - "Unterminated_string_literal_1002": "Valore letterale stringa senza terminazione.", - "Unterminated_template_literal_1160": "Valore letterale di modello senza terminazione.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Le chiamate di funzione non tipizzate potrebbero non accettare argomenti tipo.", - "Unused_label_7028": "Etichetta non usata.", - "Unused_ts_expect_error_directive_2578": "Direttiva '@ts-expect-error' non usata.", - "Update_import_from_0_90058": "Aggiornare l'importazione da \"{0}\"", - "Update_modifiers_of_0_90061": "Aggiornare i modificatori di '{0}'", - "Updating_output_timestamps_of_project_0_6359": "Aggiornamento dei timestamp di output del progetto '{0}'...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Aggiornamento dei timestamp di output non modificati del progetto '{0}'...", - "Use_0_95174": "Usa `{0}`.", - "Use_0_instead_5106": "Usare '{0}'.", - "Use_Number_isNaN_in_all_conditions_95175": "Usare 'Number.isNaN' in tutte le condizioni.", - "Use_element_access_for_0_95145": "Usare l'accesso agli elementi per '{0}'", - "Use_element_access_for_all_undeclared_properties_95146": "Usare l'accesso agli elementi per tutte le proprietà non dichiarate.", - "Use_import_type_95180": "Usare 'import type'", - "Use_synthetic_default_member_95016": "Usare il membro 'default' sintetico.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Usare il campo 'exports' del file package.json per risolvere le importazioni.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Usare il campo 'imports' del file package.json per risolvere le importazioni.", - "Use_type_0_95181": "Usare 'type {0}'", - "Using_0_subpath_1_with_target_2_6404": "Utilizzo di '{0}' sottotracciato '{1}' con destinazione '{2}'.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "L'uso di frammenti JSX richiede che la factory di frammenti \"{0}\" sia nell'ambito, ma non è stata trovata.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'uso di una stringa in un'istruzione 'for...of' è supportato solo in ECMAScript 5 e versioni successive.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Se si usa --build, l'opzione -b modificherà il comportamento di tsc in modo che sia più simile a un agente di orchestrazione di compilazione che a un compilatore. Viene usata per attivare la compilazione di progetti compositi. Per altre informazioni, vedere {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", - "VERSION_6036": "VERSIONE", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Il valore di tipo '{0}' non ha proprietà in comune con il tipo '{1}'. Si intendeva chiamarlo?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Il valore di tipo '{0}' non è chiamabile. Si intendeva includere 'new'?", - "Variable_0_implicitly_has_an_1_type_7005": "La variabile '{0}' contiene implicitamente un tipo '{1}'.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variabile '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variabile '{0}' include implicitamente il tipo '{1}' in alcuni punti, ma è possibile dedurre un tipo migliore dall'utilizzo.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variabile '{0}' contiene implicitamente il tipo '{1}' in alcune posizioni in cui non è possibile determinarne il tipo.", - "Variable_0_is_used_before_being_assigned_2454": "La variabile '{0}' viene usata prima dell'assegnazione.", - "Variable_declaration_expected_1134": "È prevista la dichiarazione di variabile.", - "Variable_declaration_list_cannot_be_empty_1123": "L'elenco delle dichiarazioni di variabile non può essere vuoto.", - "Variable_declaration_not_allowed_at_this_location_1440": "Dichiarazione di variabile non consentita in questa posizione.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variabile deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Le variabili con più dichiarazioni non possono essere impostate come inline.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'elemento variadic alla posizione {0} nell'origine non corrisponde all'elemento alla posizione {1} nella destinazione.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Le annotazioni di varianza sono supportate solo negli alias di tipo per oggetti, funzioni, costruttori e tipi mappati.", - "Version_0_6029": "Versione {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Per informazioni sulla migrazione, visitare https://aka.ms/ts6.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Per altre informazioni su questo file, visitare https://aka.ms/tsconfig", - "WATCH_OPTIONS_6918": "OPZIONI DELL'ESPRESSIONE DI CONTROLLO", - "Watch_and_Build_Modes_6250": "Modalità di espressione di controllo e compilazione", - "Watch_input_files_6005": "Controlla i file di input.", - "Watch_option_0_requires_a_value_of_type_1_5080": "Con l'opzione '{0}' dell'espressione di controllo è richiesto un valore di tipo {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "È possibile solo scrivere un tipo per '{0}' aggiungendo qui un tipo per l'intero parametro.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Durante l'assegnazione di funzioni verifica che i parametri e i valori restituiti siano compatibili con il sottotipo.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Durante il controllo del tipo prende in considerazione 'null' e 'undefined'.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Indica se mantenere l'output della console obsoleto in modalità espressione di controllo invece di pulire lo schermo.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Eseguire il wrapping di tutti i caratteri non validi in un contenitore di espressioni", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Eseguire il wrapping di tutte le espressioni Decorator non valide tra parentesi", - "Wrap_all_object_literal_with_parentheses_95116": "Racchiudere tra parentesi tutti i valori letterali di oggetto", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Esegue il wrapping di JSX senza parentesi nel frammento JSX", - "Wrap_in_JSX_fragment_95120": "Esegui il wrapping nel frammento JSX", - "Wrap_in_parentheses_95194": "Eseguire il wrapping tra parentesi", - "Wrap_invalid_character_in_an_expression_container_95108": "Eseguire il wrapping del carattere non valido in un contenitore di espressioni", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Racchiudere tra parentesi il corpo seguente che deve essere un valore letterale di oggetto", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Per informazioni su tutte le opzioni del compilatore, vedere {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Non è possibile rinominare un modulo tramite un'importazione globale.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Non è possibile rinominare gli elementi definiti in una cartella 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Non è possibile rinominare gli elementi definiti in un'altra cartella 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Non è possibile rinominare elementi definiti nella libreria TypeScript standard.", - "You_cannot_rename_this_element_8000": "Non è possibile rinominare questo elemento.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accetta un numero troppo ridotto di argomenti da usare come espressione Decorator in questo punto. Si intendeva chiamarlo prima e scrivere '@{0}()'?", - "_0_and_1_index_signatures_are_incompatible_2330": "Le firme dell'indice '{0}' e '{1}' non sono compatibili.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Non è possibile combinare le operazioni '{0}' e '{1}' senza parentesi.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Gli attributi '{0}' sono stati specificati due volte. L'attributo denominato '{0}' verrà sovrascritto.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' alla fine di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' all'inizio di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' può essere importato solo attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' può essere importato solo usando un'importazione predefinita.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' può essere importato solo usando una chiamata 'require' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' può essere importato solo usando una chiamata 'require' o usando un'importazione predefinita.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' può essere importato solo usando 'import {1} = require({2})' o un'importazione predefinita.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' può essere importato solo usando 'import {1} = require({2})' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", - "_0_cannot_be_used_as_a_JSX_component_2786": "Non è possibile usare '{0}' come componente JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Non è possibile usare '{0}' come valore perché è stato esportato con 'export type'.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Non è possibile usare '{0}' come valore perché è stato importato con 'import type'.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "I componenti di '{0}' non accettano testo come elementi figlio. Il tipo di testo in JSX è 'string ', ma il tipo previsto di '{1}' è '{2}'.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Non è stato possibile creare un'istanza di '{0}' con un tipo arbitrario che potrebbe non essere correlato a '{1}'.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Le dichiarazioni '{0}' possono essere dichiarate solo all'interno di un blocco.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Le dichiarazioni '{0}' possono essere usate solo in file TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' dichiarazioni non possono avere criteri di associazione.", - "_0_declarations_must_be_initialized_1155": "Le dichiarazioni '{0}' devono essere inizializzate.", - "_0_expected_1005": "È previsto '{0}'.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' ha un tipo stringa, ma deve avere una sintassi di stringa riconoscibile sintatticamente quando è abilitato 'isolatedModules'.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "In '{0}' non è presente alcun membro esportato denominato '{1}'. Si intendeva '{2}'?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' include implicitamente un tipo restituito '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usato come riferimento diretto o indiretto in una delle relative espressioni restituite.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' contiene implicitamente il tipo 'any', perché non contiene un'annotazione di tipo e viene usato come riferimento diretto o indiretto nel relativo inizializzatore.", - "_0_index_signatures_are_incompatible_2634": "Le firme dell'indice '{0}' non sono compatibili.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Il tipo di indice '{0}' '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' è una primitiva, ma '{1}' è un oggetto wrapper. Quando possibile, preferire '{0}'.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' è un tipo e non può essere importato nei file JavaScript. Usare '{1}' in un'annotazione di tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' è un tipo e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' è una ridenominazione inutilizzata di '{1}'. Si intendeva utilizzarla come annotazione di tipo?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' è assegnabile al vincolo di tipo '{1}', ma è possibile creare un'istanza di '{1}' con un sottotipo diverso del vincolo '{2}'.", - "_0_is_automatically_exported_here_18044": "'{0}' viene esportato automaticamente qui.", - "_0_is_declared_but_its_value_is_never_read_6133": "L'elemento '{0}' è dichiarato, ma il suo valore non viene mai letto.", - "_0_is_declared_but_never_used_6196": "La variabile '{0}' è dichiarata, ma non viene mai usata.", - "_0_is_declared_here_2728": "In questo punto viene dichiarato '{0}'.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' è definito come proprietà nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come funzione di accesso.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' è definito come funzione di accesso nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come proprietà di istanza.", - "_0_is_deprecated_6385": "'{0}' è deprecato.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' non è una metaproprietà valida per la parola chiave '{1}'. Si intendeva '{2}'?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' non è un nome di parametro consentito.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' non è consentito come nome di una dichiarazione di variabile.", - "_0_is_of_type_unknown_18046": "'{0}' è di tipo 'unknown'.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' è probabilmente 'null'.", - "_0_is_possibly_null_or_undefined_18049": "'{0}' è probabilmente 'null' o 'undefined'.", - "_0_is_possibly_undefined_18048": "'{0}' è probabilmente 'undefined'.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' viene usato come riferimento diretto o indiretto nella relativa espressione di base.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' viene usato come riferimento diretto o indiretto nella relativa annotazione di tipo.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' è specificato più di una volta, quindi il relativo utilizzo verrà sovrascritto.", - "_0_list_cannot_be_empty_1097": "L'elenco '{0}' non può essere vuoto.", - "_0_modifier_already_seen_1030": "Il modificatore '{0}' è già presente.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una classe, un'interfaccia o un alias di tipo", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una funzione, un metodo o una classe", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Il modificatore '{0}' non può essere incluso in una dichiarazione di costruttore.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Il modificatore '{0}' non può essere incluso in un elemento modulo o spazio dei nomi.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Il modificatore '{0}' non può essere incluso in un parametro.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Il modificatore '{0}' non può essere incluso in un membro di tipo.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Il modificatore '{0}' non può essere incluso in un parametro di tipo.", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'using'.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'await using'.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Il modificatore '{0}' non può essere incluso in una firma dell'indice.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Il modificatore '{0}' non può essere incluso in elementi di classe di questo tipo.", - "_0_modifier_cannot_be_used_here_1042": "Non è possibile usare il modificatore '{0}' in questo punto.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Non è possibile usare il modificatore '{0}' in un contesto di ambiente.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Non è possibile usare il modificatore '{0}' con il modificatore '{1}'.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Non è possibile usare il modificatore '{0}' con un identificatore privato.", - "_0_modifier_must_precede_1_modifier_1029": "Il modificatore '{0}' deve precedere il modificatore '{1}'.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve essere seguito da un'espressione del valore di proprietà Unicode racchiusa tra parentesi graffe.", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' richiede un'annotazione di tipo esplicita.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come spazio dei nomi.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore. Si intendeva usare '{1} in {0}'?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' si riferisce solo a un tipo, ma in questo punto viene usato come valore. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su es2015 o versioni successive.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fa riferimento a un istruzione globale UMD, ma il file corrente è un modulo. Provare ad aggiungere un'importazione.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fa riferimento a un valore, ma qui viene usato come tipo. Si intendeva 'typeof {0}'?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere riesportato usando una riesportazione solo di tipi quando '{1}' è abilitato.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "' {0}' deve essere impostato all'interno dell'oggetto 'compilerOptions' del file JSON di configurazione", - "_0_tag_already_specified_1223": "Il tag '{0}' è già specificato.", - "_0_was_also_declared_here_6203": "In questo punto viene dichiarato anche '{0}'.", - "_0_was_exported_here_1377": "In questo punto è stato esportato '{0}'.", - "_0_was_imported_here_1376": "In questo punto è stato importato '{0}'.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{1}'.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo yield '{1}'.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Il modificatore 'abstract' può essere incluso solo in una dichiarazione di classe, metodo o proprietà.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Il modificatore 'accessor' può essere visualizzato solo in una dichiarazione di proprietà.", - "and_here_6204": "e in questo punto.", - "and_npm_install_D_types_Slashnode_6290": "e npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Non è possibile fare riferimento ad 'arguments' negli inizializzatori di proprietà o nei blocchi di inizializzazione statica delle classi.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": considera i file con importazioni, esportazioni, import.meta, jsx (con jsx: react-jsx) o il formato esm (con modulo: node16+) come moduli.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Non è possibile usare l'espressione 'await' all'interno di un blocco statico di classe.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Le espressioni 'await' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Le espressioni 'await' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Non è possibile usare le espressioni 'await' in un inizializzatore di parametri.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' non ha alcun effetto sul tipo di questa espressione.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Le dichiarazioni 'await using' non sono consentite nei contesti ambientali.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Le istruzioni 'await using' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Le istruzioni 'await using' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Non è possibile usare le istruzioni 'await using' all'interno di un blocco statico di classe.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'opzione 'baseUrl' è impostata su '{0}'. Verrà usato questo valore per risolvere il nome del modulo non relativo '{1}'.", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve essere seguito da una lettera ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' può essere usato solo all'inizio di un file.", - "case_or_default_expected_1130": "È previsto 'case' o 'default'.", - "catch_or_finally_expected_1472": "È previsto 'catch' o 'finally'.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non finito.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non consentito 'NaN'.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "gli inizializzatori di membro di enumerazione const devono essere espressioni costanti.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Le enumerazioni 'const' possono essere usate solo in espressioni di accesso a proprietà o indice oppure nella parte destra di un'assegnazione di esportazione, di una dichiarazione di importazione o di una query su tipo.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Non è possibile usare 'constructor' come nome di proprietà di un parametro.", - "constructor_is_a_reserved_word_18012": "'#constructor' è una parola riservata.", - "default_Colon_6903": "impostazione predefinita:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Non è possibile chiamare 'delete' su un identificatore in modalità strict.", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' non consente di riesportare esportazioni predefinite.", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' può essere usato solo in file TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Non è possibile applicare il modificatore 'export' a moduli di ambiente e aumenti di modulo perché sono sempre visibili.", - "extends_clause_already_seen_1172": "La clausola 'extends' è già presente.", - "extends_clause_must_precede_implements_clause_1173": "La clausola 'extends' deve precedere la clausola 'implements'.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clausola 'extends' della classe esportata '{0}' contiene o usa il nome privato '{1}'.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clausola 'extends' della classe esportata contiene o usa il nome privato '{0}'.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clausola 'extends' dell'interfaccia esportata '{0}' contiene o usa il nome privato '{1}'.", - "false_unless_checkJs_is_set_6932": "''false'', a meno che non sia impostato ''checkJs''", - "false_unless_composite_is_set_6906": "`false`, a meno che non sia impostato `composite`", - "file_6025": "file", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "I cicli 'for await' sono consentiti solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "I cicli 'for await' sono consentiti solo all'interno di funzioni asincrone e al primo livello di moduli.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Non è possibile usare i cicli 'for await' all'interno di un blocco statico di classe.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Le funzioni di accesso 'get' e 'set' non possono dichiarare parametri 'this'.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se è specificato `files`; in caso contrario, `[\"**/*\"]`", - "implements_clause_already_seen_1175": "La clausola 'implements' è già presente.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Le clausole 'implements' possono essere usate solo in file TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' può essere usato solo in file TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Le dichiarazioni 'infer' sono consentite solo nella clausola 'extends' di un tipo condizionale.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve essere seguito da un nome di gruppo di acquisizione racchiuso tra parentesi acute.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Non è consentito usare 'let' come nome in dichiarazioni 'let' o 'const'.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'espressione 'new', nella cui destinazione manca una firma del costrutto, contiene implicitamente un tipo 'any'.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, nonché il valore di `outDir` se ne è specificato uno.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "''nodenext'' se ''module'' è ''nodenext''; ''node16'' se ''module'' è ''node16'' o ''node18''; in caso contrario, ''bundler''.", - "one_of_Colon_6900": "uno di:", - "one_or_more_Colon_6901": "uno o più:", - "options_6024": "opzioni", - "or_JSX_element_expected_1145": "Previsto elemento '{' o JSX.", - "or_expected_1144": "È previsto '{' o ';'.", - "package_json_does_not_have_a_0_field_6100": "Il file 'package.json' non contiene un campo '{0}'.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' non contiene alcuna voce di 'typesVersions' corrispondente alla versione '{0}'.", - "package_json_had_a_falsy_0_field_6220": "'package.json' contiene un campo '{0}' falso.", - "package_json_has_0_field_1_that_references_2_6101": "Il file 'package.json' contiene il campo '{1}' di '{0}' che fa riferimento a '{2}'.", - "package_json_has_a_peerDependencies_field_6281": "'package.json' contiene un campo 'peerDependencies'.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' contiene una voce '{0}' di 'typesVersions' che non corrisponde a un intervallo semver valido.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' contiene una voce '{0}' di 'typesVersions' che corrisponde alla versione '{1}' del compilatore. Verrà cercato un criterio per la corrispondenza con il nome di modulo '{2}'.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' contiene un campo 'typesVersions' con mapping tra percorsi specifici della versione.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "L’ambito package.json '{0}' esegue esplicitamente il mapping dell'identificatore ' {1}' su null.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L'ambito package.json '{0}' contiene un tipo non valido per la destinazione dell'identificatore '{1}'", - "package_json_scope_0_has_no_imports_defined_6273": "L'ambito package.json '{0}' non ha importazioni definite.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "È specificata l'opzione 'paths'. Verrà cercato un criterio per la corrispondenza con il nome del modulo '{0}'.", - "q_is_only_available_inside_character_class_1511": "'\\q' è disponibile solo all'interno della classe di caratteri.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve essere seguito da stringhe alternative racchiuse tra parentesi graffe.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Il modificatore 'readonly' può essere incluso solo in una dichiarazione di proprietà o una firma dell'indice.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Il modificatore di tipo 'readonly' è consentito solo in tipi di valore letterale matrice e tupla.", - "require_call_may_be_converted_to_an_import_80005": "La chiamata a 'require' può essere convertita in un'importazione.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode' può essere impostata solo per le importazioni di tipo.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' è l'unica chiave valida per l’importazione dei tipi di asserzioni.", - "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve essere 'require' o 'import'.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'opzione 'rootDirs' è impostata e verrà usata per risolvere il nome del modulo relativo '{0}'.", - "super_can_only_be_referenced_in_a_derived_class_2335": "È possibile fare riferimento a 'super' solo in una classe derivata.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "È possibile fare riferimento a 'super' solo in membri di classi derivate o espressioni letterali di oggetto.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Non è possibile fare riferimento a 'super' in un nome di proprietà calcolato.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "Non è possibile fare riferimento a 'super' in argomenti del costruttore.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' è consentito solo in membri di espressioni letterali di oggetto quando il valore dell'opzione 'target' è 'ES2015' o superiore.", - "super_may_not_use_type_arguments_2754": "'super' non può usare argomenti di tipo.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "È necessario chiamare 'super' prima di accedere a una proprietà di 'super' nel costruttore di una classe derivata.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "È necessario chiamare 'super' prima di accedere a 'this' nel costruttore di una classe derivata.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' deve essere seguito da un elenco di argomento o da un accesso membro.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "L'accesso alla proprietà 'super' è consentito solo in un costruttore, in una funzione membro o in una funzione di accesso di membro di una classe derivata.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "Non è possibile fare riferimento a 'this' in un nome di proprietà calcolato.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Non è possibile fare riferimento a 'this' nel corpo di un modulo o di uno spazio dei nomi.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Non è possibile fare riferimento a 'this' in un inizializzatore di proprietà statica.", - "this_cannot_be_referenced_in_current_location_2332": "Non è possibile fare riferimento a 'this' nella posizione corrente.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' contiene implicitamente il tipo 'any' perché non include un'annotazione di tipo.", - "true_for_ES2022_and_above_including_ESNext_6930": "'true' per ES2022 e versioni successive, incluso ESNext.", - "true_if_composite_false_otherwise_6909": "`true` se è `composite`; in caso contrario, `false`", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' è 'node16', 'nodenext' o 'bundler'; in caso contrario, 'false'.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: il compilatore TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", - "type_Colon_6902": "tipo:", - "unique_symbol_types_are_not_allowed_here_1335": "I tipi 'unique symbol' non sono consentiti in questo punto.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "I tipi 'unique symbol' sono consentiti solo nelle variabili in un'istruzione di variabile.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Non è possibile usare i tipi 'unique symbol' in una dichiarazione di variabile con nome di binding.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Non è possibile usare la direttiva 'use strict' con un elenco di parametri non semplice.", - "use_strict_directive_used_here_1349": "In questo punto è stata usata la direttiva 'use strict'.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Le dichiarazioni 'using' non sono consentite nei contesti ambientali.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "Le istruzioni 'with' non sono consentite in un blocco di funzione asincrona.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Le istruzioni 'with' non sono consentite in modalità strict.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Con l'espressione 'yield' viene restituito implicitamente un tipo 'any' perché per il generatore che lo contiene non è presente un'annotazione di tipo restituito.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Non è possibile usare le espressioni 'yield' in un inizializzatore di parametri." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "TUTTE LE OPZIONI DEL COMPILATORE", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Non è possibile usare un modificatore '{0}' con una dichiarazione di importazione.", + "A_0_parameter_must_be_the_first_parameter_2680": "Il primo parametro deve essere '{0}'.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Un tag '@template' di JSDoc non può seguire un tag '@typedef', '@callback' o '@overload'", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Un commento '@typedef' di JSDoc non può contenere più tag '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Non è possibile usare un valore letterale 'bigint' come nome per la proprietà.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Un valore letterale bigint non può usare la notazione esponenziale.", + "A_bigint_literal_must_be_an_integer_1353": "Un valore letterale bigint deve essere un numero intero.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Un parametro del criterio di binding non può essere facoltativo in una firma di implementazione.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Un'istruzione 'break' può essere usata solo all'interno di un'iterazione di inclusione o di un'istruzione switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Un'istruzione 'break' può solo passare a un'etichetta di un'istruzione di inclusione.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Una classe di caratteri non deve contenere un segno di punteggiatura doppio riservato. La barra rovesciata stava per un carattere escape?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Un intervallo di classi di caratteri non deve essere delimitato da un'altra classe di caratteri.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Una classe può implementare solo un identificatore/nome qualificato con argomenti tipo facoltativi.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Una classe può implementare solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Una classe non può estendere un elemento di tipo primitivo come '{0}'. Le classi possono estendere solo valori costruibili.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Una classe non può implementare un tipo primitivo come '{0}'. Può implementare solo altri tipi di oggetto denominati.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "È necessario assegnare un nome a una dichiarazione di classe senza modificatore 'default'.", + "A_class_member_cannot_have_the_0_keyword_1248": "Un membro di classe non può contenere la parola chiave '{0}'.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Non sono consentite espressioni con virgole in un nome di proprietà calcolato.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nome di proprietà calcolato non può fare riferimento a un parametro di tipo dal tipo che lo contiene.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nome di proprietà calcolato in una dichiarazione di proprietà di classe deve avere un tipo di valore letterale semplice o un tipo 'unique symbol'.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nome di proprietà calcolato in un overload di metodo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nome di proprietà calcolato in un valore letterale di tipo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nome di proprietà calcolato in un contesto di ambiente deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Un nome di proprietà calcolato in un'interfaccia deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Un nome di proprietà calcolato deve essere di tipo 'string', 'number', 'symbol' o 'any'.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Un'asserzione 'const' può essere applicata solo a riferimenti a membri di enumerazione oppure a valori letterali stringa, numerici, booleani, di oggetto o matrice.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "È possibile accedere a un membro di enumerazione const solo tramite un valore letterale stringa.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Un inizializzatore 'const' in un contesto di ambiente deve essere un valore letterale numerico o stringa oppure un riferimento a un'enumerazione di valori letterali.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Un costruttore non può contenere una chiamata 'super' quando la relativa classe estende 'null'.", + "A_constructor_cannot_have_a_this_parameter_2681": "Un costruttore non può contenere un parametro 'this'.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Un'istruzione 'continue' può essere usata solo all'interno di un'istruzione di iterazione di inclusione.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Un'istruzione 'continue' può solo passare a un'etichetta di un'istruzione di iterazione di inclusione.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Non è possibile importare un file di dichiarazione senza 'import type'. Si intendeva importare un file di implementazione '{0}'?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Non è possibile usare un modificatore 'declare' in un contesto già di ambiente.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un elemento Decorator può solo decorare un'implementazione del metodo e non un overload.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una clausola 'default' non può essere specificata più volte in un'istruzione 'switch'.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "È possibile usare un'esportazione predefinita solo in un modulo di tipo ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Un'esportazione predefinita deve essere al livello principale di una dichiarazione di file o di modulo.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "In questo contesto non sono consentite asserzioni di assegnazione definite '!'.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Una dichiarazione di destrutturazione deve includere un inizializzatore.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Con una chiamata di importazione dinamica in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una chiamata di importazione dinamica restituisce un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "A_file_cannot_have_a_reference_to_itself_1006": "Un file non può contenere un riferimento a se stesso.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una funzione che restituisce 'never' non può includere un punto finale raggiungibile.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una funzione chiamata con la parola chiave 'new' non può contenere un tipo 'this' con valore 'void'.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Una funzione il cui tipo dichiarato non è 'undefined', 'void' o 'any' deve restituire un valore.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Un generatore non può contenere un'annotazione di tipo 'void'.", + "A_get_accessor_cannot_have_parameters_1054": "Una funzione di accesso 'get' non può contenere parametri.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Una funzione di accesso get deve essere accessibile almeno come setter", + "A_get_accessor_must_return_a_value_2378": "Una funzione di accesso 'get' deve restituire un valore.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento tupla con etichetta è dichiarato come facoltativo con un punto interrogativo dopo il nome e prima dei due punti, anziché dopo il tipo.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento tupla con etichetta è dichiarato come inattivo con '...' prima del nome, anziché prima del tipo.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Un tipo di cui è stato eseguito il mapping non può dichiarare proprietà o metodi.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inizializzatore di membro in una dichiarazione di enumerazione non può fare riferimento a membri dichiarati successivamente, inclusi quelli definiti in altre enumerazioni.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una classe mixin deve includere un costruttore con un unico parametro REST di tipo 'any[]'.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una classe mixin estesa da una variabile di tipo contenente una firma del costrutto astratta deve essere dichiarata anche come 'abstract'.", + "A_module_cannot_have_multiple_default_exports_2528": "Un modulo non può includere più esportazioni predefinite.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una dichiarazione di spazio dei nomi non può essere presente in un file diverso rispetto a una classe o funzione con cui è stato eseguito il merge.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una dichiarazione di spazio dei nomi non può essere specificata prima di una classe o funzione con cui è stato eseguito il merge.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Una dichiarazione di spazio dei nomi è consentita solo al livello superiore di uno spazio dei nomi o di un modulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Una dichiarazione 'namespace' non deve essere dichiarata usando la parola chiave 'module'. Usare invece la parola chiave 'namespace'.", + "A_non_dry_build_would_build_project_0_6357": "Se si esegue una compilazione senza flag -dry, verrà compilato il progetto '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Se si esegue una compilazione senza flag -dry, i file seguenti verranno eliminati: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Se si esegue una compilazione non di prova, i timestamp dell'output del progetto '{0}' verranno aggiornati", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Un inizializzatore di parametro è consentito solo in un'implementazione di funzione o costruttore.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Non è possibile dichiarare una proprietà di parametro usando un parametro REST.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Una proprietà di parametro è consentita solo in un'implementazione di costruttore.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Non è possibile dichiarare una proprietà di parametro con un modello di associazione.", + "A_promise_must_have_a_then_method_1059": "Una promessa deve contenere un metodo 'then'.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Una proprietà di una classe il cui tipo è un tipo 'unique symbol' deve essere sia 'static' che 'readonly'.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Una proprietà di un'interfaccia o di un valore letterale di tipo il cui tipo è un tipo 'unique symbol' deve essere 'readonly'.", + "A_required_element_cannot_follow_an_optional_element_1257": "Non è possibile specificare un elemento obbligatorio dopo un elemento facoltativo.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parametro obbligatorio non può seguire un parametro facoltativo.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest non può contenere un criterio di binding.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Non è possibile specificare un elemento REST dopo un altro elemento REST.", + "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest non può contenere un nome proprietà.", + "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest non può includere un inizializzatore.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest deve essere l'ultimo di un criterio di destrutturazione.", + "A_rest_element_type_must_be_an_array_type_2574": "Un tipo di elemento rest deve essere un tipo di matrice.", + "A_rest_parameter_cannot_be_optional_1047": "Un parametro rest non può essere facoltativo.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Un parametro rest non può contenere un inizializzatore.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Un parametro rest deve essere l'ultimo di un elenco di parametri.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Un parametro rest deve essere di un tipo di matrice.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un modello di associazione o un parametro REST non può contenere una virgola finale.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Un'istruzione 'return' può essere usata solo all'interno di un corpo di funzione.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Non è possibile usare un'istruzione 'return' all'interno di un blocco statico di classe.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie di voci che ripetono il mapping delle importazioni a percorsi di ricerca relativi al valore di 'baseUrl'.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Una funzione di accesso 'set' non può contenere un'annotazione di tipo restituito.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Una funzione di accesso 'set' non può contenere un parametro facoltativo.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Una funzione di accesso 'set' non può contenere il parametro rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Una funzione di accesso 'set' deve contenere un solo parametro.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parametro della funzione di accesso 'set' non può contenere un inizializzatore.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argomento spread deve avere un tipo di tupla o essere passato a un parametro rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Una chiamata 'super' deve essere un'istruzione a livello radice all'interno di un costruttore di una classe derivata che contiene proprietà inizializzate, proprietà dei parametri o identificatori privati.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Una chiamata 'super' deve essere la prima istruzione del costruttore a fare riferimento a 'super' o 'this' quando una classe derivata contiene proprietà inizializzate, proprietà di parametri o identificatori privati.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Un guard di tipo basato su 'this' non è compatibile con uno basato su parametri.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un tipo 'this' è disponibile solo in un membro non statico di una classe o di interfaccia.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Non è possibile usare un modificatore 'export' di primo livello nelle dichiarazioni di valori in un modulo CommonJS quando è abilitato 'verbatimModuleSyntax'.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Un file 'tsconfig.json' è già definito in: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Un membro di tupla non può essere sia facoltativo che inattivo.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Un tipo di tupla non può essere indicizzato con un valore negativo.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione di asserzione tipi. Provare a racchiudere l'espressione tra parentesi.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Una proprietà di valore letterale di tipo non può contenere un inizializzatore.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Un'importazione solo di tipi può specificare un'importazione predefinita o binding denominati, ma non entrambi.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Un predicato di tipo non può fare riferimento a un parametro rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Un predicato di tipo non può fare riferimento all'elemento '{0}' in un criterio di binding.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Un predicato di tipo è consentito solo nella posizione del tipo restituito per le funzioni e i metodi.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Il tipo di un predicato di tipo deve essere assegnabile al tipo del relativo parametro.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Un tipo a cui viene fatto riferimento in una firma decorata deve essere importato con 'import type' o un'importazione dello spazio dei nomi quando sono abilitati 'isolatedModules' e 'emitDecoratorMetadata'.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Una variabile il cui tipo è un tipo 'unique symbol' deve essere 'const'.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Un'espressione 'yield' è consentita solo nel corpo di un generatore.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Non è possibile accedere al metodo astratto '{0}' nella classe '{1}' tramite l'espressione super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "I metodi astratti possono essere inclusi solo in una classe astratta.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Le proprietà astratte possono essere incluse solo in una classe astratta.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Non è possibile accedere alla proprietà astratta '{0}' nella classe '{1}' nel costruttore.", + "Accessibility_modifier_already_seen_1028": "Il modificatore di accessibilità è già presente.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Le funzioni di accesso sono disponibili solo se destinate a ECMAScript 5 e versioni successive.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Le funzioni di accesso devono essere tutte astratte o tutte non astratte.", + "Add_0_to_unresolved_variable_90008": "Aggiungere '{0}.' alla variabile non risolta", + "Add_a_return_statement_95111": "Aggiungere un'istruzione return", + "Add_a_return_type_to_the_function_declaration_9031": "Aggiungere un elemento di tipo restituito alla dichiarazione di funzione.", + "Add_a_return_type_to_the_function_expression_9030": "Aggiungere un elemento di tipo restituito all'espressione della funzione.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Aggiungere un tipo restituito alla dichiarazione della funzione di accesso get.", + "Add_a_return_type_to_the_method_9034": "Aggiungere un tipo restituito al metodo", + "Add_a_type_annotation_to_the_parameter_0_9028": "Aggiungere un'annotazione di tipo al parametro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Aggiungere un'annotazione di tipo alla proprietà {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Aggiungere un'annotazione di tipo alla variabile {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Aggiunge un tipo al parametro della dichiarazione della funzione di accesso set.", + "Add_all_missing_async_modifiers_95041": "Aggiungere tutti i modificatori 'async' mancanti", + "Add_all_missing_attributes_95168": "Aggiungi tutti gli attributi mancanti", + "Add_all_missing_call_parentheses_95068": "Aggiungere tutte le parentesi mancanti nelle chiamate", + "Add_all_missing_function_declarations_95157": "Aggiungere tutte le dichiarazioni di funzione mancanti", + "Add_all_missing_imports_95064": "Aggiungere tutte le importazioni mancanti", + "Add_all_missing_members_95022": "Aggiungere tutti i membri mancanti", + "Add_all_missing_override_modifiers_95162": "Aggiungere tutti i modificatori 'override' mancanti", + "Add_all_missing_parameters_95190": "Aggiungere tutti i parametri mancanti", + "Add_all_missing_properties_95166": "Aggiunge tutte le proprietà mancanti", + "Add_all_missing_return_statement_95114": "Aggiungere tutte le istruzioni return mancanti", + "Add_all_missing_super_calls_95039": "Aggiungere tutte le chiamate a super mancanti", + "Add_all_missing_type_annotations_90067": "Aggiungere tutte le annotazioni di tipo mancante", + "Add_all_optional_parameters_95193": "Aggiungere tutti i parametri facoltativi", + "Add_annotation_of_type_0_90062": "Aggiungere annotazione di tipo '{0}'", + "Add_async_modifier_to_containing_function_90029": "Aggiungere il modificatore async alla funzione contenitore", + "Add_await_95083": "Aggiungere 'await'", + "Add_await_to_initializer_for_0_95084": "Aggiungere 'await' all'inizializzatore per '{0}'", + "Add_await_to_initializers_95089": "Aggiungere 'await' agli inizializzatori", + "Add_braces_to_arrow_function_95059": "Aggiungere le parentesi graffe alla funzione arrow", + "Add_const_to_all_unresolved_variables_95082": "Aggiungere 'const' a tutte le variabili non risolte", + "Add_const_to_unresolved_variable_95081": "Aggiungere 'const' alla variabile non risolta", + "Add_definite_assignment_assertion_to_property_0_95020": "Aggiungere l'asserzione di assegnazione definita alla proprietà '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Aggiungere le asserzioni di assegnazione definite a tutte le proprietà non inizializzate", + "Add_export_to_make_this_file_into_a_module_95097": "Aggiungere 'export {}' per trasformare questo file in un modulo", + "Add_extends_constraint_2211": "Aggiungere il vincolo 'extends'.", + "Add_extends_constraint_to_all_type_parameters_2212": "Aggiungere il vincolo `extends` a tutti i parametri di tipo", + "Add_import_from_0_90057": "Aggiungere l'importazione da \"{0}\"", + "Add_index_signature_for_property_0_90017": "Aggiungere la firma dell'indice per la proprietà '{0}'", + "Add_initializer_to_property_0_95019": "Aggiungere l'inizializzatore alla proprietà '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "Aggiungere gli inizializzatori a tutte le proprietà non inizializzate", + "Add_missing_attributes_95167": "Aggiungi attributi mancanti", + "Add_missing_call_parentheses_95067": "Aggiungere le parentesi mancanti nelle chiamate", + "Add_missing_comma_for_object_member_completion_0_95187": "Aggiungere la virgola mancante per il completamento dei membri dell'oggetto '{0}'.", + "Add_missing_enum_member_0_95063": "Aggiungere il membro di enumerazione mancante '{0}'", + "Add_missing_function_declaration_0_95156": "Aggiungere la dichiarazione di funzione mancante '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "Aggiungere l'operatore mancante 'new' a tutte le chiamate", + "Add_missing_new_operator_to_call_95071": "Aggiungere l'operatore mancante 'new' alla chiamata", + "Add_missing_parameter_to_0_95188": "Aggiungere il parametro mancante a '{0}'", + "Add_missing_parameters_to_0_95189": "Aggiungere i parametri mancanti a '{0}'", + "Add_missing_properties_95165": "Aggiunge le proprietà mancanti", + "Add_missing_super_call_90001": "Aggiungere la chiamata mancante a 'super()'", + "Add_missing_typeof_95052": "Aggiungere l'elemento 'typeof' mancante", + "Add_names_to_all_parameters_without_names_95073": "Aggiungere i nomi a tutti i parametri senza nomi", + "Add_optional_parameter_to_0_95191": "Aggiungere i parametri facoltativi a '{0}'", + "Add_optional_parameters_to_0_95192": "Aggiungi i parametri facoltativi a '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "Aggiungere o rimuovere le parentesi graffe in una funzione arrow", + "Add_override_modifier_95160": "Aggiungere il modificatore 'override'", + "Add_parameter_name_90034": "Aggiungere il nome del parametro", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Aggiungere il qualificatore a tutte le variabili non risolte corrispondenti a un nome di membro", + "Add_resolution_mode_import_attribute_95196": "Aggiungi attributo di importazione 'resolution-mode'", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Aggiungi l'attributo di importazione 'resolution-mode' a tutte le importazioni solo tipo che lo richiedono", + "Add_return_type_0_90063": "Aggiungere '{0}' del tipo restituito", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Aggiungere soddisfa e un'asserzione di tipo a questa espressione (soddisfa T come T) per rendere il tipo esplicito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Aggiungere soddisfa e un'asserzione di tipo inline con '{0}'", + "Add_to_all_uncalled_decorators_95044": "Aggiungere '()' a tutti gli elementi Decorator non chiamati", + "Add_ts_ignore_to_all_error_messages_95042": "Aggiungere '@ts-ignore' a tutti i messaggi di errore", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Aggiunge 'undefined' a un tipo quando l'accesso viene eseguito tramite un indice.", + "Add_undefined_to_optional_property_type_95169": "Aggiungi 'undefined' al tipo di proprietà facoltativo", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Aggiungere il tipo non definito a tutte le proprietà non inizializzate", + "Add_undefined_type_to_property_0_95018": "Aggiungere il tipo 'undefined' alla proprietà '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Aggiungere la conversione 'unknown' per i tipi non sovrapposti", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Aggiungere 'unknown' a tutte le conversioni di tipi non sovrapposti", + "Add_void_to_Promise_resolved_without_a_value_95143": "Aggiungere 'void' all'elemento Promise risolto senza un valore", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Aggiungere 'void' a tutti gli elementi Promise risolti senza un valore", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Aggiungere un file tsconfig.json per organizzare più facilmente progetti che contengono sia file TypeScript che JavaScript. Per altre informazioni, vedere https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Tutte le dichiarazioni di '{0}' devono avere vincoli identici.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Tutte le dichiarazioni di '{0}' devono contenere modificatori identici.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tutte le dichiarazioni di '{0}' devono contenere parametri di tipo identici.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Tutte le dichiarazioni di un metodo astratto devono essere consecutive.", + "All_destructured_elements_are_unused_6198": "Tutti gli elementi destrutturati sono inutilizzati.", + "All_imports_in_import_declaration_are_unused_6192": "Tutte le importazioni nella dichiarazione di importazione sono inutilizzate.", + "All_type_parameters_are_unused_6205": "Tutti i parametri di tipo sono inutilizzati.", + "All_variables_are_unused_6199": "Tutte le variabili sono inutilizzate.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Acconsenti che i file JavaScript facciano parte del tuo programma. Usa l'opzione 'checkJs' per acquisire gli errori da questi file.", + "Allow_accessing_UMD_globals_from_modules_6602": "Consentire l'accesso alle istruzioni globali UMD dai moduli.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Consente di eseguire importazioni predefinite da moduli senza esportazione predefinita. Non influisce sulla creazione del codice ma solo sul controllo dei tipi.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Consente 'import x from y' quando un modulo non contiene un'esportazione predefinita.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Consente di eseguire una volta per progetto l'importazione di funzioni helper da tslib, invece di includerle per ogni file.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Consentire alle importazioni di includere le estensioni di file TypeScript. Richiede l'impostazione di '--moduleResolution bundler' e '--noEmit' o '--emitDeclarationOnly'.", + "Allow_javascript_files_to_be_compiled_6102": "Consente la compilazione di file JavaScript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Consente che più cartelle vengano considerate come una sola durante la risoluzione dei moduli.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Il nome file già incluso '{0}' differisce da quello '{1}' solo per l'uso di maiuscole/minuscole.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Non è possibile specificare il nome di modulo relativo nella dichiarazione di modulo di ambiente.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "I moduli di ambiente non possono essere annidati in altri moduli o spazi dei nomi.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un modulo AMD non può includere più assegnazioni di nome.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Una funzione di accesso astratta non può contenere un'implementazione.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Non è possibile usare un modificatore di accessibilità con un identificatore privato.", + "An_accessor_cannot_have_type_parameters_1094": "Una funzione di accesso non può contenere parametri di tipo.", + "An_accessor_property_cannot_be_declared_optional_1276": "Una proprietà 'accessor' non può essere dichiarata facoltativa.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una dichiarazione di modulo di ambiente è consentita solo al primo livello in un file.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Non è stato specificato alcun argomento per '{0}'.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Non è stato specificato alcun argomento corrispondente a questo modello di associazione.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmetico deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Una funzione arrow non può contenere un parametro 'this'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Con una funzione o un metodo asincrono in ES5 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Un metodo o una funzione asincrona deve restituire un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.", + "An_async_iterator_must_have_a_next_method_2519": "Un iteratore asincrono deve contenere un metodo 'next()'.", + "An_element_access_expression_should_take_an_argument_1011": "Un'espressione di accesso a elementi deve accettare un argomento.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Non è possibile assegnare un nome con un identificatore privato a un membro di enumerazione.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Il nome di un membro di enumerazione non può essere numerico.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Il nome di un membro di enumerazione deve essere seguito da ',', '=' o '}'.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Versione espansa di queste informazioni, che mostra tutte le opzioni possibili del compilatore", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Non è possibile usare un'assegnazione di esportazione in un modulo con altri elementi esportati.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Non è possibile usare un'assegnazione di esportazione in uno spazio dei nomi.", + "An_export_assignment_cannot_have_modifiers_1120": "Un'assegnazione di esportazione non può contenere modificatori.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Un'assegnazione di esportazione deve essere al primo livello di una dichiarazione di file o di modulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Una dichiarazione di esportazione può essere usata solo al livello superiore di un modulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Una dichiarazione di esportazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", + "An_export_declaration_cannot_have_modifiers_1193": "Una dichiarazione di esportazione non può contenere modificatori.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Quando 'verbatimModuleSyntax' è abilitato, la dichiarazione 'export =' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore reale, ma '{0}' viene risolto in una dichiarazione type-only.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Quando 'verbatimModuleSyntax' è abilitato, 'export default' deve fare riferimento a un valore, ma '{0}' fa riferimento solo a un tipo.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Non è possibile testare la veridicità di un'espressione di tipo 'void'.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Un valore di escape Unicode avanzato deve essere compreso tra 0x0 e 0x10FFFF inclusi.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Non è possibile specificare un identificatore o una parola chiave subito dopo un valore letterale numerico.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Non è possibile dichiarare un'implementazione in contesti di ambiente.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Un alias di importazione non può fare riferimento a una dichiarazione esportata con 'export type'.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Un alias di importazione non può fare riferimento a una dichiarazione importata con 'import type'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Un alias di importazione non può essere risolto in una dichiarazione type o type-only quando è abilitato 'verbatimModuleSyntax'.", + "An_import_alias_cannot_use_import_type_1392": "Un alias di importazione non può usare 'import type'", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Una dichiarazione di importazione può essere usata solo al livello superiore di un modulo.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Una dichiarazione di importazione può essere usata solo al livello superiore di uno spazio dei nomi o di un modulo.", + "An_import_declaration_cannot_have_modifiers_1191": "Una dichiarazione di importazione non può contenere modificatori.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Un percorso di importazione può terminare con un'estensione '{0}' solo quando 'allowImportingTsExtensions' è abilitato.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Una firma dell'indice non può contenere un parametro rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Una firma dell'indice non può contenere una virgola finale.", + "An_index_signature_must_have_a_type_annotation_1021": "Una firma dell'indice deve contenere un'annotazione di tipo.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Una firma dell'indice deve contenere un solo parametro.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Un parametro della firma dell'indice non può contenere un punto interrogativo.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parametro della firma dell'indice non può contenere un modificatore di accessibilità.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parametro della firma dell'indice non può contenere un inizializzatore.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parametro della firma dell'indice deve contenere un'annotazione di tipo.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo di parametro della firma dell'indice non può essere un tipo di valore letterale o un tipo generico. Considerare l'utilizzo di un tipo di oggetto con mapping.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un tipo di parametro della firma dell'indice deve essere 'stringa', 'numero', 'simbolo' o un tipo di valore letterale del modello.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Un'espressione di creazione di un'istanza non può essere seguita da un accesso a proprietà.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Un'interfaccia può estendere solo un identificatore/nome qualificato con argomenti tipo facoltativi.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Un'interfaccia non può estendere un elemento di tipo primitivo come '{0}'. Può estendere solo altri tipi di oggetto denominati.", + "An_interface_property_cannot_have_an_initializer_1246": "Una proprietà di interfaccia non può contenere un inizializzatore.", + "An_iterator_must_have_a_next_method_2489": "Un iteratore deve contenere un metodo 'next()'.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Quando si usa un'istruzione @jsx con frammenti JSX, è necessaria un'istruzione pragma @jsxFrag.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Un valore letterale di oggetto non può contenere più funzioni di accesso get/set con lo stesso nome.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Un valore letterale di oggetto non può contenere più proprietà con lo stesso nome.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un valore letterale di oggetto non può contenere proprietà e funzioni di accesso con lo stesso nome.", + "An_object_member_cannot_be_declared_optional_1162": "Un membro di oggetto non può essere dichiarato come facoltativo.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Il metodo '[Symbol.hasInstance]' di un oggetto deve restituire un valore booleano da utilizzare a destra di un'espressione 'instanceof'.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Una catena facoltativa non può contenere identificatori privati.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Non è possibile specificare un elemento facoltativo dopo un elemento REST.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Un valore esterno di 'this' è nascosto da questo contenitore.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Non è possibile dichiarare come generatore una firma di overload.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione unaria con l'operatore '{0}'. Provare a racchiudere l'espressione tra parentesi.", + "Annotate_everything_with_types_from_JSDoc_95043": "Annotare tutto con tipi di JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Annotare tipi di proprietà funzione expando in uno spazio dei nomi", + "Annotate_with_type_from_JSDoc_95009": "Annotare con tipo di JSDoc", + "Another_export_default_is_here_2753": "In questo punto è presente un'altra impostazione predefinita per l'esportazione.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualsiasi proprietà Unicode che potrebbe corrispondere a più di un singolo carattere è disponibile solo quando è impostato il flag Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualsiasi elemento che potrebbe corrispondere a più di un singolo carattere non è valido all'interno di una classe di caratteri negati.", + "Are_you_missing_a_semicolon_2734": "Manca un punto e virgola?", + "Argument_expression_expected_1135": "È prevista l'espressione di argomento.", + "Argument_for_0_option_must_be_Colon_1_6046": "L'argomento per l'opzione '{0}' deve essere {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "L'argomento dell'importazione dinamica non può essere l'elemento spread.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "L'argomento di tipo '{0}' non è assegnabile al parametro di tipo '{1}'.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "L'argomento di tipo '{0}' non può essere assegnato al parametro di tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Gli argomenti per il parametro REST '{0}' non sono stati specificati.", + "Array_element_destructuring_pattern_expected_1181": "È previsto il criterio di destrutturazione dell'elemento della matrice.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Non è possibile dedurre matrici con elementi estesi con --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Con le asserzioni ogni nome nella destinazione di chiamata deve essere dichiarato con un'annotazione di tipo esplicita.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Con le asserzioni la destinazione di chiamata deve essere un identificatore o un nome completo.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "L'assegnazione di proprietà a funzioni senza dichiararle non è supportata con --isolatedDeclarations. Aggiungere una dichiarazione esplicita per le proprietà assegnate a questa funzione.", + "Asterisk_Slash_expected_1010": "È previsto '*/'.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Almeno una funzione di accesso deve avere un'annotazione di tipo esplicita con --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Gli aumenti per l'ambito globale possono solo essere direttamente annidati in dichiarazioni di modulo di ambiente o moduli esterni.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Gli aumenti per l'ambito globale devono contenere il modificatore 'declare', a meno che non siano già presenti in un contesto di ambiente.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Il rilevamento automatico per le defizioni di tipi è abilitato nel progetto '{0}'. Verrà eseguito il passaggio di risoluzione aggiuntivo per il modulo '{1}' usando il percorso della cache '{2}'.", + "BUILD_OPTIONS_6919": "OPZIONI DI COMPILAZIONE", + "Backwards_Compatibility_6253": "Compatibilità con le versioni precedenti", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Le espressioni di classi di base non possono fare riferimento a parametri di tipo classe.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Il tipo restituito '{0}' del costruttore di base non è un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Il tipo restituito deve essere identico per tutti i costruttori di base.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Directory di base per risolvere i nomi di modulo non assoluti.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "I valori letterali bigint non sono disponibili quando la destinazione è precedente a ES2020.", + "Binary_digit_expected_1177": "È prevista una cifra binaria.", + "Binding_element_0_implicitly_has_an_1_type_7031": "L'elemento di binding '{0}' contiene implicitamente un tipo '{1}'.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "La variabile con ambito blocco '{0}' è stata usata prima di essere stata dichiarata.", + "Build_a_composite_project_in_the_working_directory_6925": "Compila un progetto composito nella directory di lavoro.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilare tutti i progetti, anche quelli che sembrano aggiornati.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilare uno o più progetti e le relative dipendenze, se non aggiornate", + "Build_option_0_requires_a_value_of_type_1_5073": "Con l'opzione di compilazione '{0}' è richiesto un valore di tipo {1}.", + "Building_project_0_6358": "Compilazione del progetto '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Per gli enumeratori predefiniti viene creata un'istanza con un tipo 'TReturn' di tipo 'undefined' invece di 'any'.", + "COMMAND_LINE_FLAGS_6921": "FLAG DELLA RIGA DI COMANDO", + "COMMON_COMMANDS_6916": "COMANDI COMUNI", + "COMMON_COMPILER_OPTIONS_6920": "OPZIONI COMUNI DEL COMPILATORE", + "Call_decorator_expression_90028": "Chiamare l'espressione Decorator", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "I tipi restituiti delle firme di chiamata '{0}' e '{1}' sono incompatibili.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La firma di chiamata, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Le firme di chiamata senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.", + "Call_target_does_not_contain_any_signatures_2346": "La destinazione della chiamata non contiene alcuna firma.", + "Can_only_convert_logical_AND_access_chains_95142": "È possibile convertire solo catene di accesso AND logiche", + "Can_only_convert_named_export_95164": "È possibile solo convertire l'esportazione denominata", + "Can_only_convert_property_with_modifier_95137": "È possibile convertire solo la proprietà con il modificatore", + "Can_only_convert_string_concatenations_and_string_literals_95154": "È possibile convertire solo concatenazioni di stringhe e valori letterali stringa", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Non è possibile accedere a '{0}.{1}' perché '{0}' è un tipo ma non uno spazio dei nomi. Si intendeva recuperare il tipo della proprietà '{1}' in '{0}' con '{0}[\"{1}\"]'?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Non è possibile accedere '{0}' da un altro file senza qualifica quando '{1}' è abilitato. In alternativa, usare '{2}'.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Non è possibile accedere alle enumerazioni const di Ambient quando '{0}' è abilitato.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Non è possibile assegnare un tipo di costruttore '{0}' a un tipo di costruttore '{1}'.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Non è possibile assegnare un tipo di costruttore astratto a un tipo di costruttore non astratto.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Non è possibile assegnare a '{0}' perché è una classe.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Non è possibile assegnare a '{0}' perché è una costante.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Non è possibile assegnare a '{0}' perché è una funzione.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Non è possibile assegnare a '{0}' perché è uno spazio dei nomi.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Non è possibile assegnare a '{0}' perché è una proprietà di sola lettura.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Non è possibile assegnare a '{0}' perché è un'enumerazione.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Non è possibile assegnare a '{0}' perché è una direttiva import.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Non è possibile assegnare a '{0}' perché non è una variabile.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Non è possibile assegnare al metodo privato '{0}'. I metodi privati non sono scrivibili.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Non è possibile aumentare il modulo '{0}' perché viene risolto in un'entità non modulo.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Non è possibile aumentare il modulo '{0}' con le esportazioni dei valori perché viene risolto in un'entità non modulo.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Non è possibile compilare moduli con l'opzione '{0}' a meno che il flag '--module' non sia impostato su 'amd' o 'system'.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Non è possibile creare un'istanza di una classe astratta.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Non è possibile delegare l'iterazione al valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma il generatore che la contiene invierà sempre '{0}'.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Non è possibile esportare '{0}'. Da un modulo è possibile esportare solo dichiarazioni locali.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Non è possibile estendere una classe '{0}'. Il costruttore di classe è contrassegnato come privato.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Non è possibile estendere un'interfaccia '{0}'. Si intendeva usare 'implements'?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Non è possibile trovare alcun file tsconfig.json nella directory corrente: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Non è stato trovato alcun file tsconfig.json nella directory specificata '{0}'.", + "Cannot_find_global_type_0_2318": "Il tipo globale '{0}' non è stato trovato.", + "Cannot_find_global_value_0_2468": "Il valore globale '{0}' non è stato trovato.", + "Cannot_find_lib_definition_for_0_2726": "La definizione della libreria per '{0}' non è stata trovata.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "La definizione della libreria per '{0}' non è stata trovata. Si intendeva '{1}'?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Non è possibile trovare il modulo '{0}'. Provare a usare '--resolveJsonModule' per importare il modulo con estensione '.json'.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Non è possibile trovare il modulo '{0}'. Si intendeva impostare l'opzione 'moduleResolution' su 'nodenext' o aggiungere alias all'opzione 'paths'?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Non è possibile trovare il modulo '{0}' o le relative dichiarazioni di tipo corrispondenti.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Non è possibile trovare dichiarazioni di modulo o di tipo per l'importazione a effetto collaterale di '{0}'.", + "Cannot_find_name_0_2304": "Il nome '{0}' non è stato trovato.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Il nome '{0}' non è stato trovato. Si intendeva '{1}'?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Il nome '{0}' non è stato trovato. Si intendeva il membro di istanza 'this.{0}'?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Il nome '{0}' non è stato trovato. Si intendeva il membro statico '{1}.{0}'?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Impossibile trovare il nome '{0}'. Si intendeva scrivere questo elemento in una funzione asincrona?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{1}' o versioni successive.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a modificare l'opzione 'lib' del compilatore in modo che includa 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Il nome '{0}' non è stato trovato. È necessario installare le definizioni per il tipo di installazione per l'elemento Bun? Provare con `npm i --save-dev @types/bun` quindi aggiungere 'bun' al campo Tipi in tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha` e quindi aggiungere 'jest' o 'mocha' al campo types in tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery` e quindi aggiungere 'jquery' al campo types in tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node` e quindi aggiungere 'node' al campo types in tsconfig.", + "Cannot_find_namespace_0_2503": "Lo spazio dei nomi '{0}' non è stato trovato.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Il nome '{0}' non è stato trovato. Intendevi '{1}'?", + "Cannot_find_parameter_0_1225": "Il parametro '{0}' non è stato trovato.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Il percorso della sottodirectory comune per i file di input non è stato trovato.", + "Cannot_find_type_definition_file_for_0_2688": "Il file di definizione del tipo per '{0}' non è stato trovato.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Non è possibile importare file di dichiarazione di tipo. Provare a importare '{0}' invece di '{1}'.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Non è possibile inizializzare la variabile con ambito esterna '{0}' nello stesso ambito della dichiarazione con ambito del blocco '{1}'.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Non è possibile richiamare un oggetto che è probabilmente 'null'.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Non è possibile richiamare un oggetto che è probabilmente 'null' o 'undefined'.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Non è possibile richiamare un oggetto che è probabilmente 'undefined'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma la destrutturazione della matrice invierà sempre '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma l'estensione della matrice invierà sempre '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Non è possibile eseguire l'iterazione del valore perché il metodo 'next' del relativo iteratore prevede il tipo '{1}', ma for-of invierà sempre '{0}'.", + "Cannot_move_statements_to_the_selected_file_95183": "Non è possibile spostare istruzioni nel file selezionato", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Non è possibile passare al file. Il file selezionato non è valido", + "Cannot_read_file_0_5083": "Non è possibile leggere il file '{0}'.", + "Cannot_read_file_0_Colon_1_5012": "Non è possibile leggere il file '{0}': {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Non è possibile dichiarare di nuovo la variabile con ambito blocco '{0}'.", + "Cannot_redeclare_exported_variable_0_2323": "Non è possibile dichiarare di nuovo la variabile esportata '{0}'.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Non è possibile dichiarare di nuovo l'identificatore '{0}' nella clausola catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Non è possibile avviare una chiamata di funzione in un'annotazione di tipo.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Non è possibile usare JSX a meno che non sia specificato il flag '--jsx'.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Non è possibile usare 'export import' in uno spazio dei nomi type o type-only quando '{0}' è abilitato.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Non è possibile usare importazioni, esportazioni o aumenti del modulo quando il valore di '--module' è 'none'.", + "Cannot_use_namespace_0_as_a_type_2709": "Non è possibile usare lo spazio dei nomi '{0}' come tipo.", + "Cannot_use_namespace_0_as_a_value_2708": "Non è possibile usare lo spazio dei nomi '{0}' come valore.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Non è possibile usare 'this' in un inizializzatore di proprietà statica di una classe decorata.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Non è possibile scrivere il file '{0}' perché sovrascriverà il file '.tsbuildinfo' generato dal progetto di riferimento '{1}'", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Non è possibile scrivere il file '{0}' perché verrebbe sovrascritto da più file di input.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Non è possibile scrivere il file '{0}' perché sovrascriverebbe il file di input.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "La variabile della clausola catch non può contenere un inizializzatore.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Se specificata, l'annotazione del tipo di variabile della clausola catch deve essere 'any' o 'unknown'.", + "Change_0_to_1_90014": "Modificare '{0}' in '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "Cambiare tutte le interfacce estese in 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Cambiare tutti i tipi in stile jsdoc in TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiare tutti i tipi in stile jsdoc in TypeScript (e aggiungere '| undefined' ai tipi nullable)", + "Change_extends_to_implements_90003": "Cambiare 'extends' in 'implements'", + "Change_spelling_to_0_90022": "Modificare l'ortografia in '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifica la presenza di proprietà di classe dichiarate ma non impostate nel costruttore.", + "Check_side_effect_imports_6806": "Controllare le importazioni di effetti collaterali.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verifica che gli argomenti per i metodi 'bind', 'call', and 'apply' corrispondano alla funzione originale.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verrà verificato se '{0}' è il prefisso di corrispondenza più lungo per '{1}' - '{2}'.", + "Circular_definition_of_import_alias_0_2303": "Definizione circolare dell'alias di importazione '{0}'.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "È stata rilevata una circolarità durante la risoluzione della configurazione: {0}", + "Circularity_originates_in_type_at_this_location_2751": "La circolarità ha origine nel tipo in questa posizione.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "La classe '{0}' definisce '{1}' come funzione di accesso di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di membro di istanza.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "La classe '{0}' definisce '{1}' come funzione di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di accesso di membro di istanza.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "La classe '{0}' definisce '{1}' come proprietà di membro di istanza, mentre la classe estesa '{2}' la definisce come funzione di membro di istanza.", + "Class_0_incorrectly_extends_base_class_1_2415": "La classe '{0}' estende in modo errato la classe di base '{1}'.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implementa in modo errato la classe '{1}'. Si intendeva estendere '{1}' ed ereditarne i membri come sottoclasse?", + "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implementa in modo errato l'interfaccia '{1}'.", + "Class_0_used_before_its_declaration_2449": "La classe '{0}' è stata usata prima di essere stata dichiarata.", + "Class_constructor_may_not_be_a_generator_1368": "Il costruttore di classe non può essere un generatore.", + "Class_constructor_may_not_be_an_accessor_1341": "Il costruttore di classe non può essere una funzione di accesso.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "La dichiarazione classe non può implementare l'elenco di overload per '{0}'.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag '@augments' o '@extends'.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Non è possibile elementi Decorator di classe con l'identificatore privato statico. Provare a rimuovere l'elemento Decorator sperimentale.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Il campo della classe '{0}' definito dalla classe padre non è accessibile nella classe figlio tramite super.", + "Class_name_cannot_be_0_2414": "Il nome della classe non può essere '{0}'.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Il nome della classe non può essere 'Object' quando la destinazione è ES5 o superiore con il modulo {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Il lato statico '{0}' della classe estende in modo errato il lato statico '{1}' della classe di base.", + "Classes_can_only_extend_a_single_class_1174": "Le classi possono estendere solo un'unica classe.", + "Classes_may_not_have_a_field_named_constructor_18006": "Le classi non possono includere un campo denominato 'constructor'.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Il codice contenuto in una classe viene valutato in modalità strict JavaScript, che non consente l'uso di '{0}'. Per altre informazioni, vedere https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opzioni della riga di comando", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila il progetto in base al percorso del file di configurazione o della cartella contenente un file 'tsconfig.json'.", + "Compiler_Diagnostics_6251": "Diagnostica compilatore", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Non è possibile specificare una stringa vuota per l'opzione del compilatore '{0}'.", + "Compiler_option_0_expects_an_argument_6044": "Con l'opzione '{0}' del compilatore è previsto un argomento.", + "Compiler_option_0_may_not_be_used_with_build_5094": "L'opzione del compilatore '--{0}' potrebbe non essere usata con '--build'.", + "Compiler_option_0_may_only_be_used_with_build_5093": "L'opzione del compilatore '--{0}' potrebbe essere usata solo con '--build'.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "L'opzione del compilatore '{0}' del valore '{1}' è instabile. Usare TypeScript notturno per disattivare l'errore. Provare ad eseguire l'aggiornamento con 'npm install -D typescript@next'.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Con l'opzione '{0}' del compilatore è richiesto un valore di tipo {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Il compilatore riserva il nome '{0}' quando si crea l'identificatore privato per browser meno recenti.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila il progetto TypeScript presente nel percorso specificato.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila il progetto corrente (tsconfig.json nella directory di lavoro).", + "Compiles_the_current_project_with_additional_settings_6929": "Compila il progetto corrente con impostazioni aggiuntive.", + "Completeness_6257": "Completezza", + "Composite_projects_may_not_disable_declaration_emit_6304": "I progetti compositi non possono disabilitare la creazione di dichiarazioni.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "I progetti compositi non possono disabilitare la compilazione incrementale.", + "Computed_from_the_list_of_input_files_6911": "Calcolato dall'elenco dei file di input", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Le proprietà calcolate devono essere valori letterali numerici o stringa, variabili o espressioni con punti con --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "I nomi di proprietà calcolati non sono consentiti nelle enumerazioni.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Non è possibile dedurre i nomi di proprietà calcolati nei valori letterali di classe o oggetto con --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "In un'enumerazione con membri con valore stringa non sono consentiti valori calcolati.", + "Concatenate_and_emit_output_to_single_file_6001": "Concatena e crea l'output in un singolo file.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condizioni da impostare in aggiunta alle impostazioni predefinite specifiche del resolver durante la risoluzione delle importazioni.", + "Conflicts_are_in_this_file_6201": "I conflitti si trovano in questo file.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Provare ad aggiungere un modificatore \"declare\" a questa classe.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "I tipi restituiti delle firme del costrutto '{0}' e '{1}' sono incompatibili.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La firma del costrutto, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Le firme di costrutto senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.", + "Constructor_implementation_is_missing_2390": "Manca l'implementazione di costruttore.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Il costruttore della classe '{0}' è privato e accessibile solo all'interno della dichiarazione di classe.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Il costruttore della classe '{0}' è protetto e accessibile solo all'interno della dichiarazione di classe.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "La notazione del tipo di costruttore deve essere racchiusa tra parentesi quando viene usata in un tipo di unione.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "La notazione del tipo di costruttore deve essere racchiusa tra parentesi quando viene usata in un tipo di intersezione.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "I costruttori di classi derivate devono contenere una chiamata 'super'.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Il file contenitore non è specificato e non è possibile determinare la directory radice. La ricerca nella cartella 'node_modules' verrà ignorata.", + "Containing_function_is_not_an_arrow_function_95128": "La funzione contenitore non è una funzione arrow", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controllare il metodo usato per rilevare i file JS in formato modulo.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "La conversione del tipo '{0}' nel tipo '{1}' può essere un errore perché nessuno dei due tipi si sovrappone sufficientemente all'altro. Se questa opzione è intenzionale, convertire prima l'espressione in 'unknown'.", + "Convert_0_to_1_in_0_95003": "Convertire '{0}' in '{1} in {0}'", + "Convert_0_to_mapped_object_type_95055": "Convertire '{0}' nel tipo di oggetto con mapping", + "Convert_all_const_to_let_95102": "Convertire ogni 'const' in 'let'", + "Convert_all_constructor_functions_to_classes_95045": "Convertire tutte le funzioni di costruttore in classi", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Convertire tutti i caratteri non validi nel codice entità HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Convertire tutti i tipi riesportati in esportazioni solo di tipi", + "Convert_all_require_to_import_95048": "Convertire tutte le occorrenze di 'require' in 'import'", + "Convert_all_to_async_functions_95066": "Convertire tutto in funzioni asincrone", + "Convert_all_to_bigint_numeric_literals_95092": "Convertire tutto in valori letterali numerici bigint", + "Convert_all_to_default_imports_95035": "Convertire tutte le impostazioni predefinite", + "Convert_all_type_literals_to_mapped_type_95021": "Convertire tutti i valori letterali di tipo nel tipo di cui è stato eseguito il mapping", + "Convert_all_typedef_to_TypeScript_types_95177": "Convertire tutti gli elementi typedef in tipi TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Convertire la funzione arrow o l'espressione di funzione", + "Convert_const_to_let_95093": "Convertire 'const' in 'let'", + "Convert_default_export_to_named_export_95061": "Convertire l'esportazione predefinita nell'esportazione denominata", + "Convert_function_declaration_0_to_arrow_function_95106": "Convertire la dichiarazione di funzione '{0}' nella funzione arrow", + "Convert_function_expression_0_to_arrow_function_95105": "Convertire l'espressione di funzione '{0}' nella funzione arrow", + "Convert_function_to_an_ES2015_class_95001": "Converti la funzione in una classe ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Convertire il carattere non valido nel relativo codice entità HTML", + "Convert_named_export_to_default_export_95062": "Convertire l'esportazione denominata nell'esportazione predefinita", + "Convert_named_imports_to_default_import_95170": "Converti importazioni denominate nell'importazione predefinita", + "Convert_named_imports_to_namespace_import_95057": "Convertire le importazioni denominate in importazione spazi dei nomi", + "Convert_namespace_import_to_named_imports_95056": "Convertire l'importazione spazi dei nomi in importazioni denominate", + "Convert_overload_list_to_single_signature_95118": "Convertire l'elenco di overload in una firma singola", + "Convert_parameters_to_destructured_object_95075": "Convertire i parametri nell'oggetto destrutturato", + "Convert_require_to_import_95047": "Convertire 'require' in 'import'", + "Convert_to_ES_module_95017": "Converti nel modulo ES6", + "Convert_to_a_bigint_numeric_literal_95091": "Convertire in un valore letterale numerico bigint", + "Convert_to_anonymous_function_95123": "Convertire nella funzione anonima", + "Convert_to_arrow_function_95125": "Convertire nella funzione arrow", + "Convert_to_async_function_95065": "Convertire nella funzione asincrona", + "Convert_to_default_import_95013": "Convertire nell'importazione predefinita", + "Convert_to_named_function_95124": "Convertire nella funzione denominata", + "Convert_to_optional_chain_expression_95139": "Convertire nell'espressione di catena facoltativa", + "Convert_to_template_string_95096": "Convertire nella stringa di modello", + "Convert_to_type_only_export_1364": "Convertire nell'esportazione solo di tipi", + "Convert_typedef_to_TypeScript_type_95176": "Convertire typedef in tipo TypeScript.", + "Corrupted_locale_file_0_6051": "Il file delle impostazioni locali {0} è danneggiato.", + "Could_not_convert_to_anonymous_function_95153": "Non è stato possibile convertire nella funzione anonima", + "Could_not_convert_to_arrow_function_95151": "Non è stato possibile convertire nella funzione arrow", + "Could_not_convert_to_named_function_95152": "Non è stato possibile convertire nella funzione denominata", + "Could_not_determine_function_return_type_95150": "Non è stato possibile determinare il tipo restituito dalla funzione", + "Could_not_find_a_containing_arrow_function_95127": "Non è stato possibile trovare una funzione arrow contenitore", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Non è stato trovato alcun file di dichiarazione per il modulo '{0}'. A '{1}' è assegnato implicitamente un tipo 'any'.", + "Could_not_find_convertible_access_expression_95140": "Non è stato possibile trovare l'espressione di accesso convertibile", + "Could_not_find_export_statement_95129": "Non è stato possibile trovare l'istruzione di esportazione", + "Could_not_find_import_clause_95131": "Non è stato possibile trovare la clausola di importazione", + "Could_not_find_matching_access_expressions_95141": "Non è stato possibile trovare espressioni di accesso corrispondenti", + "Could_not_find_name_0_Did_you_mean_1_2570": "Non è stato possibile trovare il nome '{0}'. Si intendeva '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "Non è stato possibile trovare l'importazione spazi dei nomi o importazioni denominate", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Non è stato possibile trovare la proprietà per cui generare la funzione di accesso", + "Could_not_find_variable_to_inline_95185": "Non è possibile trovare la variabile per inline.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Non è stato possibile risolvere il percorso '{0}' con le estensioni: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Non è stato possibile scrivere il file '{0}': {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Crea file di mapping di origine per i file JavaScript creati.", + "Create_sourcemaps_for_d_ts_files_6614": "Crea mapping di origine per i file d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un file tsconfig.jscon le impostazioni consigliate nella directory di lavoro.", + "DIRECTORY_6038": "DIRECTORY", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Le sequenze di escape e i backreference decimali non sono consentiti in una classe di caratteri.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "I decimali con zeri iniziali non sono consentiti.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La dichiarazione causa un aumento di una dichiarazione in un altro file. Questa operazione non è serializzabile.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "La creazione della dichiarazione per questo file richiede il mantenimento dell'importazione per gli aumenti. Funzionalità non supportata con --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}' dal modulo '{1}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "La creazione di dichiarazioni per questo parametro richiede l'aggiunta implicita di elementi non definiti al relativo tipo. Funzionalità non supportata con --isolatedDeclarations.", + "Declaration_expected_1146": "È prevista la dichiarazione.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Il nome della dichiarazione è in conflitto con l'identificatore globale predefinito '{0}'.", + "Declaration_or_statement_expected_1128": "È prevista la dichiarazione o l'istruzione.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Dichiarazione o istruzione prevista. Questo carattere '=' segue un blocco di istruzioni, di conseguenza se si intende scrivere un'assegnazione di destrutturazione, potrebbe essere necessario racchiudere l'intera assegnazione tra parentesi.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Le dichiarazioni con asserzioni di assegnazione definite devono includere anche annotazioni di tipo.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Le dichiarazioni con inizializzatori non possono includere anche asserzioni di assegnazione definite.", + "Declare_a_private_field_named_0_90053": "Dichiarare un campo privato denominato '{0}'.", + "Declare_method_0_90023": "Dichiarare il metodo '{0}'", + "Declare_private_method_0_90038": "Dichiarare il metodo privato '{0}'", + "Declare_private_property_0_90035": "Dichiarare la proprietà privata '{0}'", + "Declare_property_0_90016": "Dichiarare la proprietà '{0}'", + "Declare_static_method_0_90024": "Dichiarare il metodo statico '{0}'", + "Declare_static_property_0_90027": "Dichiarare la proprietà statica '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Il tipo restituito della funzione Decorator '{0}' non è assegnabile al tipo '{1}'.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Il tipo restituito della funzione Decorator è '{0}' ma è previsto 'void' o 'any'.", + "Decorator_used_before_export_here_1486": "Elemento Decorator usato prima di 'export'.", + "Decorators_are_not_valid_here_1206": "In questo punto le espressioni Decorator non sono valide.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Non è possibile applicare le espressioni Decorator a più funzioni di accesso get/set con lo stesso nome.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Gli elementi Decorator non possono essere visualizzati dopo 'export' o 'export default' se vengono visualizzati anche prima di 'export'.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Gli elementi Decorator devono precedere il nome e tutte le parole chiave delle dichiarazioni di proprietà.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Le variabili della clausola catch predefinite sono 'unknown' anziché 'any'.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'esportazione predefinita del modulo contiene o usa il nome privato '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Non è possibile dedurre le esportazioni predefinite con --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Le importazioni predefinite non sono consentite in un'importazione posticipata.", + "Default_library_1424": "Libreria predefinita", + "Default_library_for_target_0_1425": "Libreria predefinita per la destinazione '{0}'", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Le importazioni posticipate sono supportate solo quando il flag '--module' è impostato su 'esnext' o 'preserve'.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Le definizioni degli identificatori seguenti sono in conflitto con quelle di un altro file: {0}", + "Delete_all_unused_declarations_95024": "Eliminare tutte le dichiarazioni non usate", + "Delete_all_unused_imports_95147": "Eliminare tutte le direttive import non usate", + "Delete_all_unused_param_tags_95172": "Eliminare tutti i tag '@param' inutilizzati", + "Delete_the_outputs_of_all_projects_6365": "Eliminare gli output di tutti i progetti.", + "Delete_unused_param_tag_0_95171": "Eliminare il tag '@param' '{0}' inutilizzato", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Deprecata] In alternativa, usare '--jsxFactory'. Specifica l'oggetto richiamato per createElement quando la destinazione è la creazione JSX 'react'", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Deprecata] In alternativa, usare '--outFile'. Concatena e crea l'output in un singolo file", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Deprecata] In alternativa, usare '--skipLibCheck'. Ignora il controllo del tipo dei file di dichiarazione delle librerie predefinite.", + "Deprecated_setting_Use_outFile_instead_6677": "Impostazione deprecata. In alternativa, usare 'outFile'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Si è omesso di usare 'await'?", + "Did_you_mean_0_1369": "Si intendeva '{0}'?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Si intendeva che '{0}' fosse vincolato al tipo 'new (...args: any[]) => {1}'?", + "Did_you_mean_to_call_this_expression_6212": "Si intendeva chiamare questa espressione?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Si intendeva contrassegnare questa funzione come 'async'?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Si intendeva usare i due punti (':')? È possibile usare il carattere '=' dopo un nome di proprietà, solo quando il valore letterale di oggetto che lo contiene fa parte di un criterio di destrutturazione.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Si intende usare 'new' con questa espressione?", + "Digit_expected_1124": "È prevista la cifra.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "La directory '{0}' non esiste. Tutte le ricerche che la interessano verranno ignorate.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "La directory ' {0}' non contiene alcun ambito package.json. Non sarà possibile risolvere le importazioni.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Disabilita l'aggiunta di direttive `use strict` nei file JavaScript generati.", + "Disable_checking_for_this_file_90018": "Disabilitare la verifica per questo file", + "Disable_emitting_comments_6688": "Disabilita la creazione di commenti.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Disabilita la creazione di dichiarazioni che contengono '@internal' nei commenti JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Disabilita la creazione di file da una compilazione.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Disabilita la creazione di file se vengono restituiti errori di controllo del tipo.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Disabilita la cancellazione delle dichiarazioni 'const enum' nel codice generato.", + "Disable_error_reporting_for_unreachable_code_6603": "Disabilita la segnalazione errori per il codice non raggiungibile.", + "Disable_error_reporting_for_unused_labels_6604": "Disabilita la segnalazione errori per le etichette non usate.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Disabilitare il controllo completo dei tipi (verranno segnalati solo errori critici di creazione e analisi).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Disabilita la generazione di funzioni helper personalizzate come '__extends' nell'output compilato.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Disabilita l'inclusione di tutti i file di libreria, incluso il file lib.d.ts predefinito.", + "Disable_loading_referenced_projects_6235": "Disabilitare il caricamento dei progetti cui viene fatto riferimento.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Disabilita la preferenza per i file di origine invece dei file di dichiarazione quando si fa riferimento a progetti compositi.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Disabilita la segnalazione errori di proprietà in eccesso durante la creazione di valori letterali dell'oggetto.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Disabilita la risoluzione dei collegamenti simbolici nei relativi realpath. È correlato allo stesso flag presente nel nodo.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Disabilita le dimensioni relative alle dimensioni per i progetti JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Disabilitare la ricerca della soluzione per questo progetto.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Disabilitare il controllo tassativo delle firme generiche nei tipi funzione.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Disabilita l'acquisizione del tipo per i progetti JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Disabilita il troncamento dei tipi nei messaggi di errore.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Disabilitare l'uso di file di origine invece dei file di dichiarazione dai progetti a cui si fa riferimento.", + "Disable_wiping_the_console_in_watch_mode_6684": "Disabilita la cancellazione della console in modalità espressione di controllo.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Disabilita l'inferenza per l'acquisizione del tipo esaminando i nomi di file in un progetto.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Non consente a direttive 'import's, 'require's o '' di espandere il numero di file che TypeScript deve aggiungere a un progetto.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Non consente riferimenti allo stesso file in cui le maiuscole/minuscole vengono usate in modo incoerente.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Non aggiunge riferimenti con tripla barra (////) o moduli importati all'elenco di file compilati.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Non consentire costrutti di runtime che non fanno parte di ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Non crea commenti nell'output.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Non crea dichiarazioni per codice che contiene un'annotazione '@internal'.", + "Do_not_emit_outputs_6010": "Non crea output.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Non crea output se sono stati restituiti errori.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Non crea direttive 'use strict' nell'output del modulo.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Non cancella le dichiarazioni di enumerazione const nel codice generato.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Non genera funzioni di supporto personalizzate, come '__extends', nell'output compilato.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Non include il file di libreria predefinito (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Non segnala gli errori in caso di codice non raggiungibile.", + "Do_not_report_errors_on_unused_labels_6074": "Non segnala gli errori in caso di etichette non usate.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Non risolvere il percorso reale di collegamenti simbolici.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Non trasformare o eliminare importazioni o esportazioni non contrassegnate come type-only, in modo che vengano scritte nel formato del file di output in base all'impostazione 'module'.", + "Do_not_truncate_error_messages_6165": "Non tronca i messaggi di errore.", + "Duplicate_function_implementation_2393": "Implementazione di funzione duplicata.", + "Duplicate_identifier_0_2300": "Identificatore '{0}' duplicato.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificatore '{0}' duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo che contiene funzioni asincrone.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' durante la creazione dei riferimenti 'super' negli inizializzatori statici.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificatore '{0}' duplicato. Il compilatore usa la dichiarazione '{1}' per supportare le funzioni asincrone.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "L'identificatore '{0}' è duplicato. Gli elementi statici e di istanza non possono condividere lo stesso nome privato.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificatore 'arguments' duplicato. Il compilatore usa 'arguments' per inizializzare i parametri rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificatore '_newTarget' duplicato. Il compilatore usa la dichiarazione di variabile '_newTarget' per acquisire il riferimento alla metaproprietà 'new.target'.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificatore '_this' duplicato. Il compilatore usa la dichiarazione di variabile '_this' per acquisire il riferimento 'this'.", + "Duplicate_index_signature_for_type_0_2374": "Firma dell'indice duplicata per il tipo '{0}'.", + "Duplicate_label_0_1114": "Etichetta '{0}' duplicata.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "La proprietà '{0}' è duplicata.", + "Duplicate_regular_expression_flag_1500": "Flag di espressione regolare duplicato.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "L'identificatore dell'importazione dinamica deve essere di tipo 'string', ma il tipo specificato qui è '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Le importazioni dinamiche sono supportate solo quando il flag '--module' è impostato su 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20' o 'nodenext'.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Le importazioni dinamiche possono accettare come argomenti solo un identificatore di modulo e un set di attributi facoltativi", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Le importazioni dinamiche supportano un secondo argomento solo quando l'opzione '--module' è impostata su 'esnext', 'node16', 'node18', 'node20', 'nodenext' o 'preserve'.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Le importazioni e le esportazioni di ECMAScript non possono essere scritte in un file CommonJS in \"verbatimModuleSyntax\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Le importazioni e le esportazioni di ECMAScript non possono essere scritte in un file CommonJS in \"verbatimModuleSyntax\". Modificare il campo \"type\" nel \"package.json\" più vicino per rendere questo file un modulo ECMAScript oppure modificare le impostazioni \"verbatimModuleSyntax\", \"module\" e \"moduleResolution\" in TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "La sintassi del modulo ECMAScript non è consentita in un modulo CommonJS quando \"module\" è impostato su \"preserve\".", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Il valore di ogni dichiarazione di '{0}.{1}' è diverso, dove '{2}' è previsto mentre '{3}' è specificato.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Ogni membro del tipo di unione '{0}' contiene firme di costrutto, ma nessuna di tali firme è compatibile con le altre.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Ogni membro del tipo di unione '{0}' contiene firme, ma nessuna di tali firme è compatibile con le altre.", + "Editor_Support_6249": "Supporto Editor", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'elemento contiene implicitamente un tipo 'any' perché non è possibile usare l'espressione di tipo '{0}' per indicizzare il tipo '{1}'.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'elemento contiene implicitamente un tipo 'any' perché l'espressione di indice non è di tipo 'number'.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice. Si intendeva chiamare '{1}'?", + "Emit_6246": "Crea", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Crea campi di classe conformi allo standard ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Crea un BOM (Byte Order Mark) UTF-8 all'inizio dei file di output.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Crea un unico file con i mapping di origine invece di file separati.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Crea un profilo CPU v8 dell'esecuzione del compilatore per il debug.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Crea codice JavaScript aggiuntivo per semplificare il supporto per l'importazione di moduli CommonJS. Abilita 'allowSyntheticDefaultImports' per la compatibilità dei tipi.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Creare i campi della classe con Define invece di Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Crea metadati di tipo progettazione per le dichiarazioni decorate nei file di origine.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Crea codice JavaScript più conforme, ma dettagliato e meno efficiente per l'iterazione.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Crea l'origine unitamente ai mapping di origine all'interno di un unico file. Richiede l'impostazione di '--inlineSourceMap' o '--sourceMap'.", + "Enable_all_strict_type_checking_options_6180": "Abilita tutte le opzioni per i controlli del tipo strict.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Abilita il colore e la formattazione nell'output TypeScript per agevolare la lettura degli errori del compilatore.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Abilita i vincoli che consentono l'uso di un progetto TypeScript con riferimenti al progetto.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Abilita la segnalazione errori per i percorsi di codice che non vengono restituiti in modo esplicito in una funzione.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Abilita la segnalazione errori per espressioni e dichiarazioni con un tipo implicito 'any'.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Abilita la segnalazione errori per i casi di fallthrough nelle istruzioni switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Abilita la segnalazione errori nei file JavaScript con controllo del tipo.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Abilita la segnalazione errori quando variabili locali non vengono lette.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Abilita la segnalazione errori quando a 'this' viene assegnato il tipo 'any'.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Abilitare il supporto sperimentale per gli elementi Decorator sperimentali legacy.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Abilitare l'importazione di file con qualsiasi estensione, purché sia presente un file di dichiarazione.", + "Enable_importing_json_files_6689": "Abilita l'importazione di file .json.", + "Enable_lib_replacement_6808": "Abilita sostituzione librerie.", + "Enable_project_compilation_6302": "Abilitare la compilazione dei progetti", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Abilitare i metodi strict 'bind', 'call' e 'apply' nelle funzioni.", + "Enable_strict_checking_of_function_types_6186": "Abilita il controllo tassativo dei tipi funzione.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Abilitare il controllo tassativo dell'inizializzazione delle proprietà nelle classi.", + "Enable_strict_null_checks_6113": "Abilita i controlli strict Null.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Abilitare l'opzione 'experimentalDecorators' nel file di configurazione", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Abilitare il flag '--jsx' nel file di configurazione", + "Enable_tracing_of_the_name_resolution_process_6085": "Abilita la traccia del processo di risoluzione dei nomi.", + "Enable_verbose_logging_6713": "Abilitare la registrazione dettagliata.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Abilita l'interoperabilità di creazione tra moduli ES e CommonJS tramite la creazione di oggetti spazio dei nomi per tutte le importazioni. Implica 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "Abilita il supporto sperimentale per le espressioni Decorator di ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Abilita il supporto sperimentale per la creazione dei metadati dei tipi per le espressioni Decorator.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Impone l'uso di funzioni di accesso indicizzate per le chiavi dichiarate con un tipo indicizzato.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Si assicura che i membri di override nelle classi derivate siano contrassegnati con un modificatore override.", + "Ensure_that_casing_is_correct_in_imports_6637": "Si assicura che l'uso di maiuscole e minuscole sia corretto nelle direttive import.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Si assicura che sia possibile eseguire il transpile di ogni file in modo sicuro senza basarsi su altre direttive import.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Si assicura che la direttiva 'use strict' venga sempre creata.", + "Entering_conditional_exports_6413": "Immissione di esportazioni condizionali.", + "Entry_point_for_implicit_type_library_0_1420": "Punto di ingresso per la libreria dei tipi impliciti '{0}'", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto di ingresso per la libreria dei tipi impliciti '{0}' con packageId '{1}'", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions con packageId '{1}'", + "Enum_0_used_before_its_declaration_2450": "L'enumerazione '{0}' è stata usata prima di essere stata dichiarata.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "È possibile unire dichiarazioni di enumerazione solo con lo spazio dei nomi o altre dichiarazioni di enumerazione.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Le dichiarazioni di enumerazione devono essere tutte const o tutte non const.", + "Enum_member_expected_1132": "È previsto il membro di enumerazione.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Il membro di enumerazione che segue un membro numerico non letterale deve avere un inizializzatore quando 'isolatedModules' è abilitato.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Gli inizializzatori di membri di enumerazione devono essere calcolabili senza riferimenti a simboli esterni con --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "Il membro di enumerazione deve contenere l'inizializzatore.", + "Enum_name_cannot_be_0_2431": "Il nome dell'enumerazione non può essere '{0}'.", + "Environment_Settings_6285": "Impostazioni ambiente", + "Errors_Files_6041": "File di errori", + "Escape_sequence_0_is_not_allowed_1488": "Sequenza di escape '{0}' non consentita.", + "Examples_Colon_0_6026": "Esempi: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complessità eccessiva rispetto ai tipi '{0}' e '{1}'.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "La profondità dello stack per il confronto dei tipi '{0}' e '{1}' è eccessiva.", + "Exiting_conditional_exports_6416": "Chiusura di esportazioni condizionali.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Sono previsti argomento tipo {0}-{1}. Per specificarli, usare un tag '@extends'.", + "Expected_0_arguments_but_got_1_2554": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}. Si è dimenticato di includere 'void' nell'argomento di tipo per 'Promise'?", + "Expected_0_type_arguments_but_got_1_2558": "Sono previsti {0} argomenti tipo, ma ne sono stati ottenuti {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Sono previsti {0} argomenti tipo. Per specificarli, usare un tag '@extends'.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Previsto 1 argomento, ma ottenuto 0. 'new Promise()' richiede un hint JSDoc per produrre un elemento 'resolve' che possa essere chiamato senza argomenti.", + "Expected_a_Unicode_property_name_1523": "È previsto un nome per la proprietà Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "È previsto un nome o un valore per la proprietà Unicode.", + "Expected_a_Unicode_property_value_1525": "È previsto un valore per la proprietà Unicode.", + "Expected_a_capturing_group_name_1514": "È previsto un nome per il gruppo di acquisizione.", + "Expected_a_class_set_operand_1520": "È previsto un operando del set di classi.", + "Expected_at_least_0_arguments_but_got_1_2555": "Sono previsti almeno {0} argomenti, ma ne sono stati ottenuti {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "È previsto il tag di chiusura JSX corrispondente per '{0}'.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "È previsto il tag di chiusura corrispondente per il frammento JSX.", + "Expected_for_property_initializer_1442": "È previsto '=' per l'inizializzatore di proprietà.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Il tipo previsto del campo '{0}' in 'package.json' è '{1}', ma è stato ottenuto '{2}'.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Il tipo di risoluzione del modulo '{0}' è stato specificato in modo esplicito.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Non è possibile usare l'elevamento a potenza su valori 'bigint' a meno che l'opzione 'target' non sia impostata su 'es2016' o versioni successive.", + "Export_0_from_module_1_90059": "Esporta '{0}' dal modulo '{1}'", + "Export_all_referenced_locals_90060": "Esporta tutte le variabili locali di riferimento", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Non è possibile usare l'assegnazione di esportazione se destinata a moduli ECMAScript. Provare a usare 'export default' o un altro formato di modulo.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "L'assegnazione dell'esportazione non è supportata quando il valore del flag '--module' è 'system'.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "La dichiarazione di esportazione è in conflitto con la dichiarazione esportata di '{0}'.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Le dichiarazioni di esportazione non sono consentite in uno spazio dei nomi.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "L'identificatore di esportazione '{0}' non esiste nell'ambito package.json al percorso '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}' del modulo {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variabile esportata '{0}' contiene o usa il nome privato '{1}'.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Le esportazioni e le assegnazioni di esportazioni non sono consentite negli aumenti del modulo.", + "Expression_expected_1109": "È prevista l'espressione.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "L'espressione deve essere racchiusa tra parentesi per poter essere usata come elemento Decorator.", + "Expression_or_comma_expected_1137": "È prevista l'espressione o la virgola.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'espressione produce un tipo di tupla troppo grande da rappresentare.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'espressione produce un tipo di unione troppo complesso da rappresentare.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "L'espressione viene risolta in '_super', che è usato dal compilatore per acquisire il riferimento della classe di base.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "L'espressione viene risolta nella dichiarazione di variabile '_newTarget', che è usata dal compilatore per acquisire il riferimento alla metaproprietà 'new.target'.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "L'espressione viene risolta nella dichiarazione di variabile '_this', che è usata dal compilatore per acquisire il riferimento 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Non è possibile dedurre il tipo di espressione con --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "La clausola Extends non può contenere un'espressione con --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "La clausola Extends del tipo dedotto '{0}' contiene o usa il nome privato '{1}'.", + "Extract_base_class_to_variable_90064": "Estrarre la classe di base nella variabile", + "Extract_binding_expressions_to_variable_90066": "Estrarre le espressioni di associazione nella variabile", + "Extract_constant_95006": "Estrarre la costante", + "Extract_default_export_to_variable_90065": "Estrarre l'esportazione predefinita nella variabile", + "Extract_function_95005": "Estrarre la funzione", + "Extract_to_0_in_1_95004": "Estrarre in {0} in {1}", + "Extract_to_0_in_1_scope_95008": "Estrarre in {0} nell'ambito {1}", + "Extract_to_0_in_enclosing_scope_95007": "Estrarre in {0} nell'ambito che lo contiene", + "Extract_to_interface_95090": "Estrarre nell'interfaccia", + "Extract_to_type_alias_95078": "Estrarre nell'alias di tipo", + "Extract_to_typedef_95079": "Estrarre in typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Estrarre nella variabile e sostituire con '{0} come typeof {0}'", + "Extract_type_95077": "Estrarre il tipo", + "FILE_6035": "FILE", + "FILE_OR_DIRECTORY_6040": "FILE O DIRECTORY", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Impossibile trovare peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Impossibile risolvere in base alla condizione '{0}'.", + "Fallthrough_case_in_switch_7029": "Caso di fallthrough in switch.", + "File_0_does_not_exist_6096": "Il file '{0}' non esiste.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Il file '{0}' non esiste in base alle ricerche precedenti memorizzate nella cache.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Il file '{0}' esiste già in base alle ricerche precedenti memorizzate nella cache.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Il file '{0}' esiste. Usarlo come risultato per la risoluzione dei nomi.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "L'estensione del file '{0}' non è supportata. Le uniche estensioni supportate sono {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Il file '{0}' è un file JavaScript. Si intendeva abilitare l'opzione 'allowJs'?", + "File_0_is_not_a_module_2306": "Il file '{0}' non è un modulo.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Il file '{0}' non è incluso nell'elenco file del progetto '{1}'. I progetti devono elencare tutti i file o usare un criterio 'include'.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Il file '{0}' non si trova in 'rootDir' '{1}'. 'rootDir' deve contenere tutti i file di origine.", + "File_0_not_found_6053": "Il file '{0}' non è stato trovato.", + "File_Layout_6284": "Layout file", + "File_Management_6245": "Gestione dei file", + "File_appears_to_be_binary_1490": "Il file sembra essere binario.", + "File_change_detected_Starting_incremental_compilation_6032": "È stata rilevata una modifica ai file. Verrà avviata la compilazione incrementale...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Il file è un modulo CommonJS perché '{0}' non contiene il campo \"type\"", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Il file è un modulo CommonJS perché '{0}' contiene il campo \"type\" il cui valore non è \"module\"", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Il file è un modulo CommonJS perché 'package.json' non è stato trovato", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Il file è un modulo ECMAScript perché '{0}' contiene il campo \"type\" con valore \"module\"", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Il file è un modulo CommonJS e può essere convertito in un modulo ES6.", + "File_is_default_library_for_target_specified_here_1426": "Il file è la libreria predefinita per la destinazione specificata in questo punto.", + "File_is_entry_point_of_type_library_specified_here_1419": "Il file è il punto di ingresso della libreria dei tipi specificata in questo punto.", + "File_is_included_via_import_here_1399": "Il file viene incluso tramite importazione in questo punto.", + "File_is_included_via_library_reference_here_1406": "Il file viene incluso tramite il riferimento alla libreria in questo punto.", + "File_is_included_via_reference_here_1401": "Il file viene incluso tramite riferimento in questo punto.", + "File_is_included_via_type_library_reference_here_1404": "Il file viene incluso tramite il riferimento alla libreria dei tipi in questo punto.", + "File_is_library_specified_here_1423": "Il file è la libreria specificata in questo punto.", + "File_is_matched_by_files_list_specified_here_1410": "Per la corrispondenza del file viene usato l'elenco 'files' specificato in questo punto.", + "File_is_matched_by_include_pattern_specified_here_1408": "Per la corrispondenza del file viene usato il criterio di inclusione specificato in questo punto.", + "File_is_output_from_referenced_project_specified_here_1413": "Il file corrisponde all'output del progetto di riferimento specificato in questo punto.", + "File_is_output_of_project_reference_source_0_1428": "Il file corrisponde all'origine '{0}' del riferimento al progetto", + "File_is_source_from_referenced_project_specified_here_1416": "Il file è l'origine del progetto di riferimento specificato in questo punto.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Il nome file '{0}' differisce da quello già incluso '{1}' solo per l'uso di maiuscole/minuscole.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Il nome file '{0}' ha un'estensione '{1}' - eseguire invece la ricerca di '{2}'.", + "File_name_0_has_a_1_extension_stripping_it_6132": "L'estensione del nome file '{0}' è '{1}' e verrà rimossa.", + "File_redirects_to_file_0_1429": "Il file viene reindirizzato al file '{0}'", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La specifica del file non può contenere una directory padre ('..') inserita dopo un carattere jolly ('**') di directory ricorsiva: '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La specifica del file non può terminare con caratteri jolly ('**') di directory ricorsiva: '{0}'.", + "Filters_results_from_the_include_option_6627": "Filtra i risultati dall'opzione `include`.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Correggere tutti gli errori di ortografia rilevati", + "Fix_all_expressions_possibly_missing_await_95085": "Correggere tutte le espressioni in cui potrebbe mancare 'await'", + "Fix_all_implicit_this_errors_95107": "Correggere tutti gli errori relativi a 'this' implicito", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Correggere tutti i tipi restituiti non corretti di una funzione asincrona", + "Fix_all_with_type_only_imports_95182": "Correggere tutto con importazioni type-only", + "For_nodejs_Colon_6287": "Per nodejs:", + "Found_0_errors_6217": "Sono stati trovati {0} errori.", + "Found_0_errors_Watching_for_file_changes_6194": "Sono stati trovati {0} errori. Verranno individuate le modifiche ai file.", + "Found_0_errors_in_1_files_6261": "Sono stati trovati {0} errori nei file {1}.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Sono stati trovati {0} errori nello stesso file, a partire da: {1}", + "Found_1_error_6216": "È stato trovato 1 errore.", + "Found_1_error_Watching_for_file_changes_6193": "È stato trovato 1 errore. Verranno individuate le modifiche ai file.", + "Found_1_error_in_0_6259": "È stato trovato 1 errore in {0}", + "Found_package_json_at_0_6099": "Il file 'package.json' è stato trovato in '{0}'.", + "Found_peerDependency_0_with_1_version_6282": "Trovato l'elemento peerDependency '{0}' con versione '{1}'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. Le definizioni di classe sono impostate automaticamente nella modalità strict.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Le dichiarazioni di funzione non sono consentite all'interno di blocchi in modalità strict quando la destinazione è 'ES5'. I moduli sono impostati automaticamente nella modalità strict.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "L'espressione di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "L'implementazione di funzione manca o non segue immediatamente la dichiarazione.", + "Function_implementation_name_must_be_0_2389": "Il nome dell'implementazione di funzione deve essere '{0}'.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La funzione contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usata come riferimento diretto o indiretto in una delle relative espressioni restituite.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Nella funzione manca l'istruzione return finale e il tipo restituito non include 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "La funzione deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", + "Function_not_implemented_95159": "Funzione non implementata.", + "Function_overload_must_be_static_2387": "L'overload della funzione deve essere statico.", + "Function_overload_must_not_be_static_2388": "L'overload della funzione non deve essere statico.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di unione.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di intersezione.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Il tipo di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La funzione con corpi può essere unita solo a classi di tipo ambient.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genera file .d.ts da file TypeScript e JavaScript nel progetto.", + "Generate_get_and_set_accessors_95046": "Generare le funzioni di accesso 'get' e 'set'", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generare le funzioni di accesso 'get' e 'set' per tutte le proprietà di sostituzione", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Genera un profilo CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Genera un mapping di origine per ogni file '.d.ts' corrispondente.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Genera una traccia eventi e un elenco di tipi.", + "Generates_corresponding_d_ts_file_6002": "Genera il file '.d.ts' corrispondente.", + "Generates_corresponding_map_file_6043": "Genera il file '.map' corrispondente.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Il generatore ha implicitamente il tipo yield \"{0}\". Provare a specificare un'annotazione di tipo restituito.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "I generatori non sono consentiti in un contesto di ambiente.", + "Generic_type_0_requires_1_type_argument_s_2314": "Il tipo generico '{0}' richiede {1} argomento/i di tipo.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Il tipo generico '{0}' richiede tra {1} e {2} argomenti tipo.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Le esportazioni di moduli globali possono essere usate solo al primo livello.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Le esportazioni di moduli globali possono essere usate solo in file di dichiarazione.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Le esportazioni di moduli globali possono essere usate solo in file di modulo.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Il tipo globale '{0}' deve un tipo di classe o di interfaccia.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Il tipo globale '{0}' deve contenere {1} parametro/i di tipo.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Impostare le ricompilazioni in '--incremental' e '--watch' in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Imposta le ricompilazioni in progetti che usano la modalità 'incremental' e 'watch' in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.", + "Hexadecimal_digit_expected_1125": "È prevista la cifra esadecimale.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "È previsto un identificatore. '{0}' è una parola riservata al livello principale di un modulo.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict. Le definizioni di classe sono automaticamente impostate sulla modalità strict.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict. I moduli vengono impostati automaticamente in modalità strict.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "È previsto un identificatore. '{0}' è una parola riservata che non può essere usata in questo punto.", + "Identifier_expected_1003": "È previsto l'identificatore.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "È previsto un identificatore. '__esModule' è riservato come marcatore esportato durante la trasformazione di moduli ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Previsto identificatore o valore letterale stringa.", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificatore, valore letterale stringa o valore letterale numerico previsti.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se il pacchetto '{0}' espone effettivamente questo modulo, provare a inviare una richiesta pull per modificare 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se il pacchetto ' {0}' espone effettivamente il modulo, provare ad aggiungere un nuovo file di dichiarazione (.d.ts) contenente ' Dichiara modulo' {1}';'", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", + "Ignore_this_error_message_90019": "Ignorare questo messaggio di errore", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Il file tsconfig.json verrà ignorato. I file specificati verranno compilati con le opzioni predefinite del compilatore.", + "Implement_all_inherited_abstract_classes_95040": "Implementare tutte le classi astratte ereditate", + "Implement_all_unimplemented_interfaces_95032": "Implementare tutte le interfacce non implementate", + "Implement_inherited_abstract_class_90007": "Implementare la classe astratta ereditata", + "Implement_interface_0_90006": "Implementare l'interfaccia '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "La clausola implements della classe esportata '{0}' contiene o usa il nome privato '{1}'.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "La conversione implicita di un valore 'symbol' in 'string' non riuscirà in fase di esecuzione. Provare a eseguire il wrapping di questa espressione in 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "L'importazione '{0}' è in conflitto con il valore globale usato in questo file, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "L'importazione '{0}' è in conflitto con il valore locale, quindi deve essere dichiarata con un'importazione type-only quando 'isolatedModules' è abilitato.", + "Import_0_from_1_90013": "Importare '{0}' da \"{1}\".", + "Import_assertion_values_must_be_string_literal_expressions_2837": "I valori di asserzione di importazione devono essere espressioni letterali delle stringhe.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Le asserzioni di importazione non sono consentite nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Le asserzioni di importazione sono supportate solo quando l'opzione '--module' è impostata su 'esnext', 'node18', 'node20', 'nodenext' o 'preserve'.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Non è possibile usare asserzioni di importazione con importazioni o esportazioni di solo tipo.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Le asserzioni di importazione sono state sostituite dagli attributi di importazione. Usare 'with' invece di 'assert'.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Non è possibile usare l'assegnazione di importazione se destinata a moduli ECMAScript. Provare a usare 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' o un altro formato di modulo.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "I valori degli attributi di importazione devono essere espressioni letterali delle stringhe.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Gli attributi di importazione non sono consentiti nelle istruzioni che compilano nelle chiamate 'require' di CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Gli attributi di importazione sono supportati solo quando l'opzione '--module' è impostata su 'esnext', 'node18', 'node20', 'nodenext' o 'preserve'.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Non è possibile usare attributi di importazione con importazioni o esportazioni type-only.", + "Import_declaration_0_is_using_private_name_1_4000": "La dichiarazione di importazione '{0}' usa il nome privato '{1}'.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "La dichiarazione di importazione è in conflitto con la dichiarazione locale di '{0}'.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Le dichiarazioni di importazione in uno spazio dei nomi non possono far riferimento a un modulo.", + "Import_emit_helpers_from_tslib_6139": "Importa gli helper di creazione da 'tslib'.", + "Import_may_be_converted_to_a_default_import_80003": "L'importazione può essere convertita in un'importazione predefinita.", + "Import_name_cannot_be_0_2438": "Il nome dell'importazione non può essere '{0}'.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La dichiarazione di importazione o esportazione in una dichiarazione di modulo di ambiente non può fare riferimento al modulo tramite il nome di modulo relativo.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "L'identificatore di importazione ' {0}' non esiste nell’ambito package.json al percorso ' {1}'.", + "Imported_via_0_from_file_1_1393": "Importato tramite {0} dal file '{1}'", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importato tramite {0} dal file '{1}' per importare 'importHelpers' come specificato in compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importato tramite {0} dal file '{1}' per importare le funzioni di factory 'jsx' e 'jsxs'", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importato tramite {0} dal file '{1}' con packageId '{2}'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare 'importHelpers' come specificato in compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare le funzioni di factory 'jsx' e 'jsxs'", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "L'importazione di un file JSON in un modulo ECMAScript richiede un attributo di importazione \"type: \"json\"\" quando \"module\" è impostato su \"{0}\".", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Le importazioni non sono consentite negli aumenti di modulo. Provare a spostarle nel modulo esterno di inclusione.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Nelle dichiarazioni di enumerazione dell'ambiente l'inizializzatore di membro deve essere un'espressione costante.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In un'enumerazione con più dichiarazioni solo una di queste può omettere un inizializzatore per il primo elemento dell'enumerazione.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Include un elenco di file. A differenza di `include`, i criteri GLOB non sono supportati.", + "Include_modules_imported_with_json_extension_6197": "Includere i moduli importati con estensione '.json'", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Include il codice sorgente nei mapping di origine all'interno del codice JavaScript creato.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Include i file dei mapping di origine all'interno del codice JavaScript creato.", + "Includes_imports_of_types_referenced_by_0_90054": "Include importazioni di tipi a cui fa riferimento '{0}'", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Se si include --watch, l'opzione -w consentirà di iniziare a controllare il progetto corrente per individuare modifiche ai file. Dopo l'impostazione, è possibile configurare la modalità espressione di controllo con:", + "Incomplete_quantifier_Digit_expected_1505": "Quantificatore incompleto. Numero previsto.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "La firma dell'indice per il tipo '{0}' manca nel tipo '{1}'.", + "Index_signature_in_type_0_only_permits_reading_2542": "La firma dell'indice nel tipo '{0}' consente solo la lettura.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Le singole dichiarazioni della dichiarazione sottoposta a merge '{0}' devono essere tutte esportate o tutte locali.", + "Infer_all_types_from_usage_95023": "Derivare tutti i tipi dall'utilizzo", + "Infer_function_return_type_95148": "Dedurre il tipo restituito della funzione", + "Infer_parameter_types_from_usage_95012": "Derivare i tipi di parametro dall'utilizzo", + "Infer_this_type_of_0_from_usage_95080": "Derivare il tipo 'this' di '{0}' dall'utilizzo", + "Infer_type_of_0_from_usage_95011": "Derivare il tipo di '{0}' dall'utilizzo", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "L'inferenza dalle espressioni di classe non è supportata con --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Inizializzare la proprietà '{0}' nel costruttore", + "Initialize_static_property_0_90021": "Inizializzare la proprietà statica '{0}'", + "Initializer_for_property_0_2811": "Inizializzatore per la proprietà '{0}'", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'inizializzatore della variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Gli inizializzatori non sono consentiti in contesti di ambiente.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inizializza un progetto TypeScript e crea un file tsconfig.json.", + "Inline_variable_95184": "Variabile inline", + "Insert_command_line_options_and_files_from_a_file_6030": "Inserisce i file e le opzioni della riga di comando da un file.", + "Install_0_95014": "Installare '{0}'", + "Install_all_missing_types_packages_95033": "Installare tutti i pacchetti di tipi mancanti", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interfaccia '{0}' non può estendere simultaneamente i tipi '{1}' e '{2}'.", + "Interface_0_incorrectly_extends_interface_1_2430": "L'interfaccia '{0}' estende in modo errato l'interfaccia '{1}'.", + "Interface_declaration_cannot_have_implements_clause_1176": "La dichiarazione di interfaccia non può avere una clausola 'implements'.", + "Interface_must_be_given_a_name_1438": "È necessario assegnare un nome all'interfaccia.", + "Interface_name_cannot_be_0_2427": "Il nome dell'interfaccia non può essere '{0}'.", + "Interop_Constraints_6252": "Vincoli interoperabilità", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpreta i tipi di proprietà facoltativi scritti, invece di aggiungere 'undefined'.", + "Invalid_character_1127": "Carattere non valido.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "L'identificatore di importazione non è valido ' {0}' non contiene risoluzioni possibili.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' viene risolto in un modulo non tipizzato in '{1}', che non può essere aumentato.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' non è stato trovato.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Catena facoltativa non valida dalla nuova espressione. Si intendeva chiamare '{0}()'?", + "Invalid_reference_directive_syntax_1084": "La sintassi della direttiva 'reference' non è valida.", + "Invalid_syntax_in_decorator_1498": "Sintassi non valida nell'elemento Decorator.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso non valido di '{0}'. Non può essere usato all'interno di un blocco statico di classe.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso non valido di '{0}'. I moduli vengono impostati automaticamente in modalità strict.", + "Invalid_use_of_0_in_strict_mode_1100": "Uso non valido di '{0}' in modalità strict.", + "Invalid_value_for_ignoreDeprecations_5103": "Valore non valido per '--ignoreDeprecations'.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Il valore non è valido per 'jsxFactory'. '{0}' non è un identificatore o un nome qualificato valido.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Il valore non è valido per 'jsxFragmentFactory'. '{0}' non è un identificatore o un nome qualificato valido.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Il valore di '--reactNamespace' non è valido. '{0}' non è un identificatore valido", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "È probabile che manchi una virgola per separare queste due espressioni di modello. Costituiscono un'espressione di modello con tag che non può essere richiamata.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Il relativo tipo di elemento '{0}' non è un elemento JSX valido.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Il relativo tipo di istanza '{0}' non è un elemento JSX valido.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Il relativo tipo restituito '{0}' non è un elemento JSX valido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Il relativo tipo '{0}' non è un tipo di elemento JSX valido.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Il tag '@{0} {1}' di JSDoc non corrisponde alla clausola 'extends {2}'.", + "JSDoc_0_is_not_attached_to_a_class_8022": "Il tag '@{0}' di JSDoc non è collegato a una classe.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' può essere presente solo nell'ultimo parametro di una firma.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Il nome del tag '@param' di JSDoc è '{0}', ma non esiste alcun parametro con questo nome. Se contenesse un tipo matrice, corrisponderebbe ad 'arguments'.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Il typedef di JSDoc può essere convertito nel tipo TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Il tag '@typedef' di JSDoc deve contenere un'annotazione di tipo o essere seguito dal tag '@property' o '@member'.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "I typedef di JSDoc possono essere convertiti nel tipo TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "I tipi JSDoc possono essere usati solo nei commenti della documentazione.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "I tipi JSDoc possono essere convertiti in tipi TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Agli attributi JSX deve essere assegnato solo un elemento 'expression' non vuoto.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Per l'elemento JSX '{0}' non esiste alcun tag di chiusura corrispondente.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "La classe dell'elemento JSX non supporta gli attributi perché non contiene una proprietà '{0}'.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "L'elemento JSX contiene implicitamente il tipo 'any' perché non esiste alcuna interfaccia 'JSX.{0}'.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "L'elemento JSX contiene implicitamente il tipo 'any' perché il tipo globale 'JSX.Element' non esiste.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Il tipo '{0}' dell'elemento JSX non contiene firme di costrutto o chiamata.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Gli elementi JSX non possono contenere più attributi con lo stesso nome.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Nelle espressioni JSX non si può usare l'operatore virgola. Si intendeva scrivere una matrice?", + "JSX_expressions_must_have_one_parent_element_2657": "Le espressioni JSX devono contenere un solo elemento padre.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Per il frammento JSX non esiste alcun tag di chiusura corrispondente.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Le espressioni di accesso alla proprietà JSX non possono includere nomi dello spazio dei nomi JSX", + "JSX_spread_child_must_be_an_array_type_2609": "L'elemento figlio dell'attributo spread JSX deve essere un tipo di matrice.", + "JavaScript_Support_6247": "Supporto JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "La destinazione di collegamento non può oltrepassare il limite della funzione.", + "KIND_6034": "TIPOLOGIA", + "Keywords_cannot_contain_escape_characters_1260": "Le parole chiave non possono contenere caratteri di escape.", + "LOCATION_6037": "PERCORSO", + "Language_and_Environment_6254": "Linguaggio e ambiente", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Il lato sinistro dell'operatore virgola non è usato e non ha effetti collaterali.", + "Library_0_specified_in_compilerOptions_1422": "Libreria '{0}' specificata in compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Libreria a cui viene fatto riferimento tramite '{0}' dal file '{1}'", + "Line_break_not_permitted_here_1142": "L'interruzione di riga non è consentita in questo punto.", + "Line_terminator_not_permitted_before_arrow_1200": "Il terminatore di riga non è consentito prima di arrow.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Elenco dei suffissi dei nomi di file da cercare durante la risoluzione di un modulo.", + "List_of_folders_to_include_type_definitions_from_6161": "Elenco di cartelle da cui includere le definizioni di tipo.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Elenco delle cartelle radice il cui contenuto combinato rappresenta la struttura del progetto in fase di esecuzione.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Verrà eseguito il caricamento di '{0}' dalla directory radice '{1}'. Percorso candidato: '{2}'.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Verrà eseguito il caricamento del modulo '{0}' dalla cartella 'node_modules'. Tipi di file di destinazione: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Verrà eseguito il caricamento del modulo come file/cartella. Percorso candidato del modulo: '{0}'. Tipi di file di destinazione: {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Registra i percorsi usati durante il processo 'moduleResolution'.", + "Longest_matching_prefix_for_0_is_1_6108": "Il prefisso di corrispondenza più lungo per '{0}' è '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Verrà eseguita la ricerca nella cartella 'node_modules'. Percorso iniziale: '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Impostare tutte le chiamate a 'super()' come prima istruzione nel costruttore", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Imposta keyof in modo che restituisca solo stringhe invece di stringhe, numeri o simboli. Opzione legacy.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Impostare la chiamata a 'super()' come prima istruzione nel costruttore", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Il tipo di oggetto con mapping contiene implicitamente un tipo di modello 'any'.", + "Mark_array_literal_as_const_90070": "Contrassegnare il valore letterale della matrice come const", + "Matched_0_condition_1_6403": "Corrispondenza tra '{0}' condizione '{1}'.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Corrispondente per impostazione predefinita al criterio di inclusione '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Corrispondenza tramite criterio di inclusione '{0}' in '{1}'", + "Member_0_implicitly_has_an_1_type_7008": "Il membro '{0}' contiene implicitamente un tipo '{1}'.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Il membro '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", + "Merge_conflict_marker_encountered_1185": "È stato rilevato un indicatore di conflitti di merge.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "La dichiarazione '{0}' sottoposta a merge non può includere una dichiarazione di esportazione predefinita. Provare ad aggiungere una dichiarazione 'export default {0}' distinta.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "La metaproprietà '{0}' è consentita solo nel corpo di una dichiarazione di funzione, di un'espressione di funzione o di un costruttore.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Il metodo '{0}' non può includere un'implementazione perché è contrassegnato come astratto.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome '{1}' del modulo privato '{2}'.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome privato '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Il metodo deve avere un'annotazione di tipo restituito esplicita con --isolatedDeclarations.", + "Method_not_implemented_95158": "Metodo non implementato.", + "Modifiers_cannot_appear_here_1184": "In questo punto non è possibile usare modificatori.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Il modulo '{0}' può essere importato come predefinito solo con il flag '{1}'", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Non è possibile importare il modulo '{0}' utilizzando questo costrutto. L'identificatore può essere solo risolto in un modulo ES, che non può essere importato con 'require'. Usare invece un'importazione ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Il modulo '{0}' dichiara '{1}' in locale, ma viene esportato come '{2}'.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Il modulo '{0}' dichiara '{1}' in locale, ma non viene esportato.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Il modulo '{0}' non fa riferimento a un tipo, ma viene usato come tipo in questo punto. Si intendeva 'typeof import('{0}')'?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Il modulo '{0}' non fa riferimento a un valore, ma qui viene usato come valore.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Il modulo {0} ha già esportato un membro denominato '{1}'. Per risolvere l'ambiguità, provare a esportarlo di nuovo in modo esplicito.", + "Module_0_has_no_default_export_1192": "Per il modulo '{0}' non esistono esportazioni predefinite.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Non esiste alcuna esportazione predefinita per il modulo '{0}'. Si intendeva usare 'import { {1} } from {0}'?", + "Module_0_has_no_exported_member_1_2305": "Il modulo '{0}' non contiene un membro esportato '{1}'.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Non esiste alcun membro esportato '{1}' per il modulo '{0}'. Si intendeva usare 'import {1} from {0}'?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Il modulo '{0}' è nascosto da una dichiarazione locale con lo stesso nome.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Il modulo '{0}' usa 'export =' e non può essere usato con 'export *'.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Il modulo '{0}' è stato risolto come modulo di ambiente dichiarato in locale nel file '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Il modulo '{0}' è stato risolto in '{1}', ma '--allowArbitraryExtensions' non è impostato.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Il modulo '{0}' è stato risolto in '{1}', ma '--jsx' non è impostato.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Il modulo '{0}' è stato risolto in '{1}', ma '--resolveJsonModule' non viene usato.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "I nomi delle dichiarazioni di modulo possono usare solo stringhe racchiuse tra virgolette.", + "Module_name_0_matched_pattern_1_6092": "Nome del modulo: '{0}'. Criterio corrispondente: '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== Il nome del modulo '{0}' non è stato risolto. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Il nome del modulo '{0}' è stato risolto in '{1}'. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Il nome del modulo '{0}' è stato risolto in '{1}' con ID pacchetto '{2}'. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Il tipo di risoluzione del modulo non è specificato. Verrà usato '{0}'.", + "Module_resolution_using_rootDirs_has_failed_6111": "La risoluzione del modulo con 'rootDirs' non è riuscita.", + "Modules_6244": "Moduli", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Spostare i modificatori di elemento tupla con etichetta nelle etichette", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Spostare l'espressione nell'esportazione predefinita in una variabile e aggiungervi un'annotazione di tipo.", + "Move_to_a_new_file_95049": "Passare a un nuovo file", + "Move_to_file_95178": "Spostare nel file", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Non sono consentiti più separatori numerici consecutivi.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Non è possibile usare più implementazioni di costruttore.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NUOVA RIGA", + "Name_is_not_valid_95136": "Nome non valido.", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "I gruppi di acquisizione denominati sono disponibili solo se destinati a 'ES2018' o versioni successive.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "I gruppi di acquisizione denominati con lo stesso nome devono escludersi a vicenda.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Le importazioni denominate non sono consentite in un'importazione posticipata.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Le importazioni denominate da un file JSON in un modulo ECMAScript non sono consentite quando \"module\" è impostato su \"{0}\".", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Le proprietà denominate '{0}' dei tipi '{1}' e '{2}' non sono identiche.", + "Namespace_0_has_no_exported_member_1_2694": "Lo spazio dei nomi '{0}' non contiene un membro esportato '{1}'.", + "Namespace_must_be_given_a_name_1437": "È necessario assegnare un nome allo spazio dei nomi.", + "Namespace_name_cannot_be_0_2819": "Lo spazio dei nomi non può essere '{0}'.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Gli spazi dei nomi non sono consentiti nei file di script globali quando '{0}' è abilitato. Se questo file non deve essere uno script globale, impostare 'moduleDetection' su 'force' o aggiungere un'istruzione 'export {}' vuota.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Non è possibile applicare né elementi Decorator né modificatori ai parametri 'this'.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nessun costruttore di base contiene il numero specificato di argomenti tipo.", + "No_constituent_of_type_0_is_callable_2755": "Non è possibile chiamare nessun costituente di tipo '{0}'.", + "No_constituent_of_type_0_is_constructable_2759": "Non è possibile costruire nessun costituente di tipo '{0}'.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Non è stata trovata alcuna firma dell'indice con un parametro di tipo '{0}' nel tipo '{1}'.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Non sono stati trovati input nel file config '{0}'. Percorsi 'include' specificati: '{1}'. Percorsi 'exclude' specificati: '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Non più supportato. Nelle versioni precedenti imposta manualmente la codifica del testo per la lettura dei file.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nessun overload prevede {0} argomenti, ma esistono overload che prevedono {1} o {2} argomenti.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nessun overload prevede {0} argomenti di tipo, ma esistono overload che prevedono {1} o {2} argomenti di tipo.", + "No_overload_matches_this_call_2769": "Nessun overload corrisponde a questa chiamata.", + "No_type_could_be_extracted_from_this_type_node_95134": "Non è stato possibile estrarre il tipo da questo nodo di tipo", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Non esiste alcun valore nell'ambito per la proprietà a sintassi abbreviata '{0}'. Dichiararne uno o specificare un inizializzatore.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "La classe non astratta '{0}' non implementa il membro astratto ereditato {1} della classe '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Nella classe non astratta '{0}' mancano implementazioni per i seguenti membri di '{1}': {2} e altri {3}.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "L'espressione di classe non astratta non implementa il membro astratto ereditato '{0}' dalla classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Nell'espressione di classe non astratta mancano implementazioni per i seguenti membri di '{0}': {1} e altri {2}.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Le asserzioni non Null possono essere usate solo in file TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "In questo punto è dichiarato un parametro non semplice.", + "Not_all_code_paths_return_a_value_7030": "Non tutti i percorsi del codice restituiscono un valore.", + "Not_all_constituents_of_type_0_are_callable_2756": "Non tutti i costituenti di tipo '{0}' possono essere chiamati.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Non tutti i costituenti di tipo '{0}' possono essere costruiti.", + "Numbers_out_of_order_in_quantifier_1506": "Numeri non in ordine nel quantificatore.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "I valori letterali numerici con valori assoluti uguali o maggiori di 2^53 sono troppo grandi per essere rappresentati in modo corretto come numeri interi.", + "Numeric_separators_are_not_allowed_here_6188": "I separatori numerici non sono consentiti in questa posizione.", + "Object_is_of_type_unknown_2571": "L'oggetto è di tipo 'unknown'.", + "Object_is_possibly_null_2531": "L'oggetto è probabilmente 'null'.", + "Object_is_possibly_null_or_undefined_2533": "L'oggetto è probabilmente 'null' o 'undefined'.", + "Object_is_possibly_undefined_2532": "L'oggetto è probabilmente 'undefined'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Il valore letterale di oggetto può specificare solo proprietà note e '{0}' non esiste nel tipo '{1}'.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Il valore letterale dell'oggetto può specificare solo proprietà note, ma '{0}' non esiste nel tipo '{1}'. Si intendeva scrivere '{2}'?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "La proprietà '{0}' del valore letterale di oggetto contiene implicitamente un tipo '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Gli oggetti che contengono proprietà a sintassi abbreviata non possono essere dedotti con --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Gli oggetti che contengono assegnazioni di estensione non possono essere dedotti con --isolatedDeclarations.", + "Octal_digit_expected_1178": "È prevista la cifra ottale.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Le sequenze di escape e i backreference ottali non sono consentiti in una classe di caratteri. Se è stata utilizzata come sequenza di escape, usare la sintassi '{0}'.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Le sequenze di escape ottali non sono consentite. Usare la sintassi '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "I valori letterali ottali non sono consentiti. Usare la sintassi '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Un valore di '{0}.{1}' è la stringa '{2}' e si presuppone che l'altro sia un valore numerico sconosciuto.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "In un'istruzione 'for...in' è consentita solo una singola dichiarazione di variabile.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "In un'istruzione 'for...of' è consentita solo una singola dichiarazione di variabile.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Con la parola chiave 'new' può essere chiamata solo una funzione void.", + "Only_ambient_modules_can_use_quoted_names_1035": "I nomi delimitati si possono usare solo nei moduli di ambiente.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Unitamente a --{0} sono supportati solo i moduli 'amd' e 'system'.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "È possibile dedurre solo matrici const con --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Creare solo i file di dichiarazione '.d.ts'.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Restituisce solo file d.ts e non file JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Con la parola chiave 'super' è possibile accedere solo ai metodi pubblico e protetto della classe di base.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Non è possibile applicare l'operatore '{0}' al tipo '{1}'.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Non è possibile applicare l'operatore '{0}' ai tipi '{1}' e '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Gli operatori non devono essere misti all'interno di una classe di caratteri. Eseguire il wrapping in una classe annidata.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Esclude un progetto dal controllo dei riferimenti a più progetti durante la modifica.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "L'opzione '{0}={1}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "L'opzione '{0}={1}' è deprecata e non funzionerà più in TypeScript {2}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{3}\"'.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'false' o 'null' sulla riga di comando.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'null' sulla riga di comando.", + "Option_0_can_only_be_specified_on_command_line_6266": "L'opzione '{0}' può essere specificata solo nella riga di comando.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'opzione '{0}' può essere usata solo quando si specifica l'opzione '--inlineSourceMap' o '--sourceMap'.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "L'opzione '{0}' può essere usata solo quando 'moduleResolution' è impostato su 'node16', 'nodenext' o 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "L'opzione '{0}' può essere usata solo quando 'module' è impostato su 'preserve' o 'es2015' o versione successiva.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Non è possibile specificare l'opzione '{0}' quando l'opzione 'jsx' è '{1}'.", + "Option_0_cannot_be_specified_with_option_1_5053": "Non è possibile specificare l'opzione '{0}' insieme all'opzione '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Non è possibile specificare l'opzione '{0}' senza l'opzione '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Non è possibile specificare l'opzione '{0}' senza l'opzione'{1}' o '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "L'opzione '{0}' è stata rimossa. Rimuovere l'elemento dalla configurazione.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "L'opzione '{0}' è deprecata e non funzionerà più in TypeScript {1}. Per disattivare l'errore, specificare compilerOption '\"ignoreDeprecations\": \"{2}\"'.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "L'opzione '{0}' è ridondante e non può essere specificata con l'opzione'{1}'.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "L'opzione 'allowImportingTsExtensions' può essere usata solo quando è impostata una delle seguenti opzioni: 'noEmit', 'emitDeclarationOnly' o 'rewriteRelativeImportExtensions'.", + "Option_build_must_be_the_first_command_line_argument_6369": "L'opzione '--build' deve essere il primo argomento della riga di comando.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'opzione 'isolatedModules' può essere usata solo quando si specifica l'opzione '--module' oppure il valore dell'opzione 'target' è 'ES2015' o maggiore.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "L'opzione 'moduleResolution' deve essere impostata su '{0}' (o rimanere non specificata) quando l'opzione 'module' è impostata su '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "L'opzione 'module' deve essere impostata su '{0}' quando l'opzione 'moduleResolution' è impostata su '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Non è possibile disabilitare l'opzione 'preserveConstEnums' quando '{0}' è abilitato.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Non è possibile combinare l'opzione 'project' con file di origine in una riga di comando.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'moduleResolution' è impostato su 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Non è possibile specificare l'opzione '--resolveJsonModule' quando 'module' è impostato su 'none', 'system' o 'umd'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Non è possibile usare l'opzione 'verbatimModuleSyntax' quando 'module' è impostato su 'UMD', 'AMD' o 'System'.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Non è possibile combinare le opzioni '{0}' e '{1}'.", + "Options_Colon_6027": "Opzioni:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Altri output", + "Output_Formatting_6256": "Formattazione dell'output", + "Output_compiler_performance_information_after_building_6615": "Restituisce informazioni sulle prestazioni del compilatore dopo la compilazione.", + "Output_directory_for_generated_declaration_files_6166": "Directory di output per i file di dichiarazione generati.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Il file di output '{0}' non è stato compilato dal file di origine '{1}'.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "L'output del progetto di riferimento '{0}' è incluso perché è stato specificato '{1}'", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "L'output del progetto di riferimento '{0}' è incluso perché il valore specificato per '--module' è 'none'", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Restituisce informazioni più dettagliate sulle prestazioni del compilatore dopo la compilazione.", + "Overload_0_of_1_2_gave_the_following_error_2772": "L'overload {0} di {1},'{2}', ha restituito l'errore seguente.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Le firme di overload devono essere tutte astratte o tutte non astratte.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Le firme di overload devono essere tutte di ambiente o non di ambiente.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Le firme di overload devono essere tutte esportate o tutte non esportate.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Le firme di overload devono essere tutte facoltative o obbligatorie.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Le firme di overload devono essere tutte pubbliche, private o protette.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Il parametro '{0}' non può fare riferimento all'identificatore '{1}' dichiarato dopo di esso.", + "Parameter_0_cannot_reference_itself_2372": "Il parametro '{0}' non può fare riferimento a se stesso.", + "Parameter_0_implicitly_has_an_1_type_7006": "Il parametro '{0}' contiene implicitamente un tipo '{1}'.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Il parametro '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Il parametro '{0}' non si trova nella stessa posizione del parametro '{1}'.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Il parametro '{0}' della funzione di accesso contiene o usa il nome '{1}' del modulo esterno {2}, ma non può essere rinominato.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Il parametro '{0}' della funzione di accesso contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Il parametro '{0}' della funzione di accesso contiene o usa il nome privato '{1}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Il parametro '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Il parametro '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Il parametro '{0}' del costruttore della classe esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Il parametro '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Il parametro '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Il parametro '{0}' della funzione esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Il parametro '{0}' della funzione esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Il parametro '{0}' della funzione esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Il parametro '{0}' della firma dell'indice dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Il parametro '{0}' della firma dell'indice dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Il parametro '{0}' del metodo dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Il parametro '{0}' del metodo dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Il parametro '{0}' del metodo pubblico della classe esportata contiene o usa il nome privato '{1}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Il parametro '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome privato '{1}'.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Il parametro non può contenere il punto interrogativo e l'inizializzatore.", + "Parameter_declaration_expected_1138": "È prevista la dichiarazione di parametro.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Il parametro include un nome ma non un tipo. Si intendeva '{0}: {1}'?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "I modificatori di parametro possono esere usati solo in file TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Il parametro deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Il tipo di parametro del setter pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Esegue l'analisi in modalità strict e crea la direttiva \"use strict\" per ogni file di origine.", + "Part_of_files_list_in_tsconfig_json_1409": "Parte dell'elenco 'files' in tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Il criterio '{0}' deve contenere al massimo un carattere '*'.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Gli intervalli delle prestazioni per '--Diagnostics' o '--extendedDiagnostics' non sono disponibili in questa sessione. Non è stato possibile trovare un'implementazione nativa dell'API Prestazioni Web.", + "Platform_specific_6912": "Specifico della piattaforma", + "Prefix_0_with_an_underscore_90025": "Anteporre un carattere di sottolineatura a '{0}'", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Aggiungere 'declare' come prefisso a tutte le dichiarazioni di proprietà non corrette", + "Prefix_all_unused_declarations_with_where_possible_95025": "Aggiungere a tutte le dichiarazioni non usate il prefisso '_', laddove possibile", + "Prefix_with_declare_95094": "Aggiungere il prefisso 'declare'", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Conserva i valori importati non usati nell'output JavaScript che altrimenti verrebbe rimosso.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Stampa tutti i file letti durante la compilazione.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Stampa i file letti durante la compilazione e indica il motivo per cui sono stati inclusi.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Stampa i nomi dei file e il motivo per cui fanno parte della compilazione.", + "Print_names_of_files_part_of_the_compilation_6155": "Stampa i nomi dei file che fanno parte della compilazione.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Stampa i nomi dei file che fanno parte della compilazione, quindi arresta l'elaborazione.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Stampa i nomi dei file generati che fanno parte della compilazione.", + "Print_the_compiler_s_version_6019": "Stampa la versione del compilatore.", + "Print_the_final_configuration_instead_of_building_1350": "Stampa la configurazione finale invece di eseguire la compilazione.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Stampa i nomi dei file creati al termine di una compilazione.", + "Print_this_message_6017": "Stampa questo messaggio.", + "Private_accessor_was_defined_without_a_getter_2806": "La funzione di accesso privata è stata definita senza un getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Il campo privato '{0}' deve essere dichiarato in una classe di inclusione.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Gli identificatori privati non sono consentiti nelle dichiarazioni di variabili.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Gli identificatori privati non sono consentiti all'esterno del corpo della classe.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Gli identificatori privati sono consentiti solo nei corpi di classe e possono essere usati solo come parte di una dichiarazione di un membro della classe, dell'accesso alle proprietà o sulla parte sinistra di un'espressione 'in'.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Gli identificatori privati sono disponibili solo se destinati a ECMAScript 2015 e versioni successive.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Non è possibile usare gli identificatori privati come parametri.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Non è possibile accedere al membro privato o protetto '{0}' in un parametro di tipo.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Non è possibile compilare il progetto '{0}' perché la dipendenza '{1}' contiene errori", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Non è possibile compilare il progetto '{0}' perché la relativa dipendenza '{1}' non è stata compilata", + "Project_0_is_being_forcibly_rebuilt_6388": "Il progetto '{0}' è stato ricompilato forzatamente", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il file '{2}' era un file radice di compilazione ma non più aggiornato.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che il programma deve segnalare errori.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Il '{0}' del progetto non è aggiornato perché il file buildinfo '{1}' indica che alcune modifiche non sono state generate", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Il progetto '{0}' non è aggiornato perché il file buildinfo '{1}' indica che è presente una modifica in compilerOptions", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Il progetto '{0}' non è aggiornato perché l'output '{1}' è meno recente dell'input '{2}'", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Il progetto '{0}' non è aggiornato perché il file di output '{1}' non esiste", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Il progetto '{0}' non è aggiornato perché l'output per il progetto è stato generato con la versione '{1}' che non corrisponde alla versione corrente '{2}'", + "Project_0_is_up_to_date_6361": "Il progetto '{0}' è aggiornato", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Il progetto '{0}' è aggiornato perché l'input più recente '{1}' è meno recente dell'output '{2}'", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Project '{0}' è aggiornato ma deve aggiornare i timestamp dei file di output precedenti ai file di input", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Il progetto '{0}' è aggiornato con i file con estensione d.ts delle relative dipendenze", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "I riferimenti al progetto non possono formare un grafico circolare. Ciclo rilevato: {0}", + "Projects_6255": "Progetti", + "Projects_in_this_build_Colon_0_6355": "Progetti in questa compilazione: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Le proprietà con il modificatore 'funzione di accesso' sono disponibili solo quando la destinazione è ECMAScript 2015 e versioni successive.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La proprietà '{0}' non può includere un inizializzatore perché è contrassegnata come astratta.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La proprietà '{0}' deriva da una firma dell'indice, quindi è necessario accedervi con ['{0}'].", + "Property_0_does_not_exist_on_type_1_2339": "La proprietà '{0}' non esiste nel tipo '{1}'.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva '{2}'?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva accedere al membro statico '{2}'?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La proprietà '{0}' non esiste nel tipo '{1}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{2}' o versioni successive.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La proprietà '{0}' non esiste nel tipo '{1}'. Provare a modificare l'opzione del compilatore 'lib' per includere 'dom'.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata in un blocco statico di classe.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata nel costruttore.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso get manca un'annotazione di tipo restituito.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso set manca un'annotazione di tipo di parametro.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "La proprietà '{0}' contiene implicitamente il tipo 'any', ma è possibile dedurre un tipo migliore per la funzione di accesso get dall'utilizzo.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "La proprietà '{0}' contiene implicitamente il tipo 'any', ma è possibile dedurre un tipo migliore per la funzione di accesso set dall'utilizzo.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "La proprietà '{0}' nel tipo '{1}' non è assegnabile alla stessa proprietà nel tipo di base '{2}'.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "La proprietà '{0}' nel tipo '{1}' non è assegnabile al tipo '{2}'.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "La proprietà '{0}' nel tipo '{1}' fa riferimento a un membro diverso a cui non è possibile accedere dall'interno del tipo '{2}'.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "La proprietà '{0}' è dichiarata, ma il suo valore non viene mai letto.", + "Property_0_is_incompatible_with_index_signature_2530": "La proprietà '{0}' non è compatibile con la firma dell'indice.", + "Property_0_is_missing_in_type_1_2324": "Nel tipo '{1}' manca la proprietà '{0}'.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "La proprietà '{0}' manca nel tipo '{1}', ma è obbligatoria nel tipo '{2}'.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "La proprietà '{0}' non è accessibile all'esterno della classe '{1}' perché contiene un identificatore privato.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La proprietà '{0}' è facoltativa nel tipo '{1}', ma obbligatoria nel tipo '{2}'.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "La proprietà '{0}' è privata e accessibile solo all'interno della classe '{1}'.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La proprietà '{0}' è privata nel tipo '{1}', ma non nel tipo '{2}'.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La proprietà '{0}' è protetta e accessibile solo tramite un'istanza della classe '{1}'. Si tratta di un'istanza della classe '{2}'.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La proprietà '{0}' è protetta e accessibile solo all'interno della classe '{1}' e delle relative sottoclassi.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La proprietà '{0}' è protetta, ma il tipo '{1}' non è una classe derivata da '{2}'.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La proprietà '{0}' è protetta nel tipo '{1}', ma è pubblica non nel tipo '{2}'.", + "Property_0_is_used_before_being_assigned_2565": "La proprietà '{0}' viene usata prima dell'assegnazione.", + "Property_0_is_used_before_its_initialization_2729": "La proprietà '{0}' viene usata prima della relativa inizializzazione.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La proprietà '{0}' potrebbe non esistere nel tipo '{1}'. Si intendeva '{2}'?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La proprietà '{0}' dell'attributo spread JSX non è assegnabile alla proprietà di destinazione.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "La proprietà '{0}' del tipo di classe anonima esportata potrebbe essere non privata o protetta.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La proprietà '{0}' del tipo '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", + "Property_0_was_also_declared_here_2733": "In questo punto è dichiarata anche la proprietà '{0}'.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La proprietà '{0}' sovrascriverà la proprietà di base in '{1}'. Se questo comportamento è intenzionale, aggiungere un inizializzatore; in caso contrario, aggiungere un modificatore 'declare' o rimuovere la dichiarazione ridondante.", + "Property_assignment_expected_1136": "È prevista l'assegnazione di proprietà.", + "Property_destructuring_pattern_expected_1180": "È previsto il criterio di destrutturazione della proprietà.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "La proprietà deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", + "Property_or_signature_expected_1131": "È prevista la proprietà o la firma.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Il valore della proprietà può essere solo un valore letterale stringa, un valore letterale numerico, 'true', 'false', 'null', un valore letterale di oggetto o un valore letterale di matrice.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornisce supporto completo per elementi iterabili in 'for-of', estensione e destrutturazione quando la destinazione è 'ES5'.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo privato '{2}'.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Il metodo pubblico '{0}' della classe esportata ha o usa il nome privato '{1}'.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "La proprietà pubblica '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Il metodo statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominato.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Il metodo statico pubblico '{0}' della classe esportata ha o usa il nome '{1}' del modulo privato '{2}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Il metodo statico pubblico '{0}' della classe esportata ha o usa il nome privato '{1}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Il nome completo '{0}' non è consentito se non si specifica un parametro '@param {object} {1}' iniziale.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un errore quando un parametro di funzione non viene letto.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Genera un errore in caso di espressioni o dichiarazioni con tipo 'any' implicito.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Genera un errore in caso di espressioni 'this con un tipo 'any' implicito.", + "Range_out_of_order_in_character_class_1517": "Intervallo non in ordine nella classe di caratteri.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Riesportare un tipo quando '{0}' è abilitato richiede l'uso di 'export type'.", + "React_components_cannot_include_JSX_namespace_names_2639": "I componenti React non possono includere nomi di spazio dei nomi JSX", + "Recommended_Options_6294": "Opzioni consigliate", + "Redirect_output_structure_to_the_directory_6006": "Reindirizza la struttura di output alla directory.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Riduce il numero di progetti caricati automaticamente da TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "Il progetto di riferimento '{0}' non può disabilitare la creazione.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Il progetto di riferimento '{0}' deve includere l'impostazione \"composite\": true.", + "Referenced_via_0_from_file_1_1400": "Riferimento tramite '{0}' dal file '{1}'", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Provare ad aggiungere un'estensione al percorso di importazione.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "I percorsi di importazione relativi necessitano di estensioni di file esplicite nelle importazioni ECMAScript quando '--moduleResolution' è 'node16' o 'nodenext'. Si intendeva '{0}'?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Rimuove un elenco di directory dal processo dell'espressione di controllo.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Rimuove un elenco di file dall'elaborazione della modalità espressione di controllo.", + "Remove_all_unnecessary_override_modifiers_95163": "Rimuovere tutti i modificatori 'override' non necessari", + "Remove_all_unnecessary_uses_of_await_95087": "Rimuovere tutti gli utilizzi non necessari di 'await'", + "Remove_all_unreachable_code_95051": "Rimuovere tutto il codice non eseguibile", + "Remove_all_unused_labels_95054": "Rimuovere tutte le etichette inutilizzate", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Rimuovere le parentesi graffe da tutti i corpi della funzione arrow con problemi specifici", + "Remove_braces_from_arrow_function_95060": "Rimuovere le parentesi graffe dalla funzione arrow", + "Remove_braces_from_arrow_function_body_95112": "Rimuovere le parentesi graffe dal corpo della funzione arrow", + "Remove_import_from_0_90005": "Rimuovere l'importazione da '{0}'", + "Remove_override_modifier_95161": "Rimuovere il modificatore 'override'", + "Remove_parentheses_95126": "Rimuovere le parentesi", + "Remove_template_tag_90011": "Rimuovere il tag template", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Rimuove il limite di 20 MB per le dimensioni totali del codice sorgente relativo ai file JavaScript nel server di linguaggio TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Rimuovi 'type' dalla dichiarazione di importazione da \"{0}\"", + "Remove_type_from_import_of_0_from_1_90056": "Rimuovi 'type' dall'importazione di '{0}' da \"{1}\"", + "Remove_type_parameters_90012": "Rimuovere i parametri di tipo", + "Remove_unnecessary_await_95086": "Rimuovere l'elemento 'await' non necessario", + "Remove_unreachable_code_95050": "Rimuovere il codice non eseguibile", + "Remove_unused_declaration_for_Colon_0_90004": "Rimuovere la dichiarazione inutilizzata per: '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "Rimuovere le dichiarazioni inutilizzate per: '{0}'", + "Remove_unused_destructuring_declaration_90039": "Rimuovere la dichiarazione di destrutturazione inutilizzata", + "Remove_unused_label_95053": "Rimuovere l'etichetta inutilizzata", + "Remove_variable_statement_90010": "Rimuovere l'istruzione di variabile", + "Rename_param_tag_name_0_to_1_95173": "Cambiane il nome '{0}' del tag '@param' in '{1}'", + "Replace_0_with_Promise_1_90036": "Sostituire '{0}' con 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "Sostituire tutti gli elementi 'infer' inutilizzati con 'unknown'", + "Replace_import_with_0_95015": "Sostituire l'importazione con '{0}'.", + "Replace_infer_0_with_unknown_90030": "Sostituire 'infer {0}' con 'unknown'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Segnala l'errore quando non tutti i percorsi del codice nella funzione restituiscono un valore.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Segnala errori per i casi di fallthrough nell'istruzione switch.", + "Report_errors_in_js_files_8019": "Segnala gli errori presenti nei file con estensione js.", + "Report_errors_on_unused_locals_6134": "Segnala errori relativi a variabili locali non usate.", + "Report_errors_on_unused_parameters_6135": "Segnala errori relativi a parametri non usati.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Richiede un'annotazione sufficiente sulle esportazioni in modo che altri strumenti possano generare in modo semplice i file di dichiarazione.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Richiedere alle proprietà non dichiarate da firme dell'indice di usare gli accessi agli elementi.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "I parametri di tipo obbligatori potrebbero non seguire i parametri di tipo facoltativi.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La risoluzione per il modulo '{0}' è stata trovata nella cache dal percorso '{1}'.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La risoluzione per la direttiva '{0}' del riferimento al tipo è stata trovata nella cache dal percorso '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Risoluzione del nome non relativo non riuscita; il tentativo di utilizzare le funzionalità moderne di risoluzione dei nodi è disabilitato per verificare se è necessario aggiornare la configurazione della libreria npm.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Risoluzione del nome non relativo non riuscita; è in corso un tentativo con '--moduleResolution bundler' per verificare se il progetto potrebbe richiedere l'aggiornamento della configurazione.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Risolvere 'keyof' solo in nomi di proprietà con valori stringa (senza numeri o simboli).", + "Resolved_under_condition_0_6414": "Risolto nella condizione '{0}'.", + "Resolving_in_0_mode_with_conditions_1_6402": "Risoluzione in modalità {0} con condizioni {1}.", + "Resolving_module_0_from_1_6086": "======== Risoluzione del modulo '{0}' da '{1}'. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Verrà eseguita la risoluzione del nome del modulo '{0}' relativo all'URL di base '{1}' - '{2}'.", + "Resolving_real_path_for_0_result_1_6130": "Risoluzione del percorso reale per '{0}'. Risultato: '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' con directory radice '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' e directory radice non impostata. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice non impostata. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Risoluzione della direttiva di riferimento al tipo per il programma che specifica typeRoot personalizzati. La ricerca nella cartella 'node_modules' verrà ignorata.", + "Resolving_with_primary_search_path_0_6121": "La risoluzione verrà eseguita con il percorso di ricerca primaria '{0}'.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]'.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Il parametro rest '{0}' contiene implicitamente un tipo 'any[]', ma è possibile dedurre un tipo migliore dall'utilizzo.", + "Rest_types_may_only_be_created_from_object_types_2700": "È possibile creare tipi rest solo da tipi di oggetto.", + "Return_type_annotation_circularly_references_itself_2577": "L'annotazione di tipo restituito contiene un riferimento circolare a se stessa.", + "Return_type_must_be_inferred_from_a_function_95149": "Il tipo restituito deve essere dedotto da una funzione", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Il tipo restituito della firma del costruttore dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Il tipo restituito della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Il tipo restituito della firma del costruttore deve essere assegnabile al tipo di istanza della classe.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Il tipo restituito della funzione esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Il tipo restituito della funzione esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Il tipo restituito della funzione esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Il tipo restituito della firma dell'indice dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Il tipo restituito della firma dell'indice dell'interfaccia esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Il tipo restituito del metodo dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Il tipo restituito del metodo dell'interfaccia esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno {2}, ma non può essere rinominato.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Il tipo restituito del getter pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Il tipo restituito del metodo pubblico della classe esportata contiene o usa il nome privato '{0}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Il tipo restituito del getter di proprietà pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo esterno '{2}', ma non può essere rinominato.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Il tipo restituito del getter di proprietà pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Il tipo restituito del getter statico pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo privato '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome privato '{0}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' è stato trovato nella cache dal percorso '{2}'. È stato risolto correttamente in '{3}' con ID pacchetto '{4}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente non è stato risolto.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}' con ID pacchetto '{4}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente non è stato risolto.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente è stato risolto correttamente in '{2}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.", + "Rewrite_all_as_indexed_access_types_95034": "Riscrivere tutti come tipi di accesso indicizzati", + "Rewrite_as_the_indexed_access_type_0_90026": "Riscrivere come tipo di accesso indicizzato '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Riscrivere le estensioni di file \".ts\", \".tsx\", \".mts\" e \".cts\" nei percorsi di importazione relativi dell'equivalente JavaScript nei file di output.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "L'operando destro di ?? non è raggiungibile perché l'operando sinistro non è mai nullish.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Non è possibile determinare la directory radice. I percorsi di ricerca primaria verranno ignorati.", + "Root_file_specified_for_compilation_1427": "File radice specificato per la compilazione", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATEGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salva i file .tsbuildinfo per consentire la compilazione incrementale dei progetti.", + "Saw_non_matching_condition_0_6405": "Visualizzata la condizione di corrispondenza '{0}'.", + "Scoped_package_detected_looking_in_0_6182": "Il pacchetto con ambito è stato rilevato. Verrà eseguita una ricerca in '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Ricerca di estensioni di fallback in tutte le directory node_modules predecessori: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Ricerca di estensioni preferite in tutte le directory node_modules predecessori: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Vedi anche https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "La selezione non corrisponde a una o più istruzioni valide", + "Selection_is_not_a_valid_type_node_95133": "La selezione non corrisponde a un nodo di tipo valido", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Imposta la versione del linguaggio JavaScript per il codice JavaScript creato e include le dichiarazioni di libreria compatibili.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Imposta la lingua della messaggistica da TypeScript. Non influisce sulla creazione.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Impostare l'opzione 'module' nel file di configurazione su '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "Imposta il carattere di nuova riga per la creazione di file.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Impostare l'opzione 'target' nel file di configurazione su '{0}'", + "Setters_cannot_return_a_value_2408": "I setter non possono restituire un valore.", + "Show_all_compiler_options_6169": "Mostra tutte le opzioni del compilatore.", + "Show_diagnostic_information_6149": "Mostra le informazioni di diagnostica.", + "Show_verbose_diagnostic_information_6150": "Mostra le informazioni di diagnostica dettagliate.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostra gli elementi che vengono compilati (o eliminati, se specificati con l'opzione '--clean')", + "Signature_0_must_be_a_type_predicate_1224": "La firma '{0}' deve essere un predicato di tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Le dichiarazioni firma possono essere usate solo in file TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorare la compilazione di progetti downstream in base a un errore nel progetto upstream.", + "Skip_type_checking_all_d_ts_files_6693": "Ignora il controllo del tipo di tutti i file .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignora il controllo dei tipi dei file .d.ts inclusi con TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Ignora il controllo del tipo dei file di dichiarazione.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' contiene errori", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' non è stata compilata", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Vine ignorato il modulo '{0}' che sembra un URI assoluto, tipi di file di destinazione: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "L'origine del progetto di riferimento '{0}' è inclusa perché è stato specificato '{1}'", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "L'origine del progetto di riferimento '{0}' è inclusa perché il valore specificato per '--module' è 'none'", + "Source_has_0_element_s_but_target_allows_only_1_2619": "L'origine contiene {0} elemento/i ma la destinazione ne consente solo {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "L'origine contiene {0} elemento/i ma la destinazione ne richiede {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "L'origine non fornisce alcuna corrispondenza per l'elemento obbligatorio alla posizione {0} nella destinazione.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "L'origine non fornisce alcuna corrispondenza per l'elemento variadic alla posizione {0} nella destinazione.", + "Specify_ECMAScript_target_version_6015": "Specifica la versione di destinazione di ECMAScript.", + "Specify_JSX_code_generation_6080": "Specifica la generazione del codice JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Consente di specificare un file che aggrega tutti gli output in un unico file JavaScript. Se 'declaration' è true, designa anche un file che aggrega tutto l'output dei file .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Consente di specificare un elenco di criteri GLOB che corrispondono ai file da includere nella compilazione.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Consente di specificare un elenco di plug-in da includere del servizio di linguaggio.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Consente di specificare un set di file di dichiarazione della libreria aggregati che descrivono l'ambiente di runtime di destinazione.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Consente di specificare un set di voci che eseguono di nuovo il mapping delle direttive import nei percorsi di ricerca aggiuntivi.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Consente di specificare un array di oggetti che indicano percorsi per i progetti. Usato nei riferimenti dei progetti.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Consente di specificare una cartella di output per tutti i file creati.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Specificare il comportamento di creazione/controllo per le importazioni usate solo per i tipi.", + "Specify_file_to_store_incremental_compilation_information_6380": "Specificare il file per l'archiviazione delle informazioni di compilazione incrementale", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Consente di specificare in che modo TypeScript cerca un file da un identificatore di modulo specifico.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Consente di specifica la modalità di controllo delle directory nei sistemi in cui non sono presenti funzionalità ricorsive di controllo dei file.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Consente di specificare il funzionamento della modalità espressione di controllo TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Specificare i file di libreria da includere nella compilazione.", + "Specify_module_code_generation_6016": "Specifica la generazione del codice del modulo.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Specifica l'identificatore di modulo usato per importare funzioni factory JSX quando si usa 'jsx: react-jsx*'.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Consente di specificare più cartelle che fungono da './node_modules/@types'.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Consente di specificare uno o più percorsi o riferimenti al modulo del nodo ai file di configurazione di base da cui vengono ereditate le impostazioni.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Consente di specificare le opzioni per l'acquisizione automatica dei file di dichiarazione.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Specifica la strategia per la creazione di un'espressione di controllo di polling quando non viene creata con eventi del file system: 'FixedInterval' (impostazione predefinita), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Specifica la strategia per il controllo della directory in piattaforme che non supportano il controllo ricorsivo in modo nativo: 'UseFsEvents' (impostazione predefinita), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Specifica la strategia per il controllo del file: 'FixedPollingInterval' (impostazione predefinita), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Consente di specificare il riferimento al fragmento JSX usato per i frammenti quando la destinazione è la creazione JSX React, ad esempio 'React.Fragment' o 'Fragment'.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX 'react', ad esempio 'React.createElement' o 'h'.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX React, ad esempio 'React.createElement' o 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Specificare la funzione della factory di frammenti JSX da usare quando la destinazione è la creazione JSX 'react' quando è specificata l'opzione del compilatore 'jsxFactory', ad esempio 'Fragment'.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Specificare la directory di base per risolvere i nomi di modulo non relativi.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Specifica la sequenza di fine riga da usare per la creazione dei file, ovvero 'CRLF' (in DOS) o 'LF' (in UNIX).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Specifica il percorso in cui il debugger deve trovare i file TypeScript invece dei percorsi di origine.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Specifica il percorso in cui il debugger deve trovare i file map invece dei percorsi generati.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Consente di specificare la profondità massima della cartella utilizzata per il controllo dei file JavaScript da 'node_modules'. Applicabile solo con 'allowJs'.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Specificare l'identificatore di modulo da usare da cui importare le funzioni di factory 'jsx' e 'jsxs', ad esempio react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Consente di specificare l'oggetto richiamato per 'createElement'. Si applica quando la destinazione è la creazione JSX `react`.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Consente di specificare la directory di output per i file di dichiarazione generati.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Consente di specificare il percorso per il file di compilazione incrementale .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Specifica la directory radice dei file di input. Usare per controllare la struttura della directory di output con --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Consente di specificare la cartella radice nei file di origine.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Consente di specificare il percorso radice per consentire ai debugger di trovare il codice sorgente di riferimento.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Consente di specificare i tipi di nomi dei pacchetti da includere senza farvi riferimento in un file di origine.", + "Specify_what_JSX_code_is_generated_6646": "Consente di specificare il codice JSX generato.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Consente di specificare l'approccio che il watcher deve adottare se il sistema esaurisce i watcher di file nativi.", + "Specify_what_module_code_is_generated_6657": "Consente di specificare il codice del modulo generato.", + "Split_all_invalid_type_only_imports_1367": "Dividere tutte le importazioni solo di tipi non valide", + "Split_into_two_separate_import_declarations_1366": "Dividere in due dichiarazioni di importazione separate", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'operatore Spread in espressioni 'new' è disponibile solo se destinato a ECMAScript 5 e versioni successive.", + "Spread_types_may_only_be_created_from_object_types_2698": "È possibile creare tipi spread solo da tipi di oggetto.", + "Starting_compilation_in_watch_mode_6031": "Avvio della compilazione in modalità espressione di controllo...", + "Statement_expected_1129": "È prevista l'istruzione.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Le istruzioni non sono consentite in contesti di ambiente.", + "Static_members_cannot_reference_class_type_parameters_2302": "I membri statici non possono fare riferimento a parametri di tipo classe.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La proprietà statica '{0}' è in conflitto con la proprietà predefinita 'Function.{0}' della funzione del costruttore '{1}'.", + "Stricter_Typechecking_Options_6292": "Opzioni di controllo dei tipi più rigorose", + "String_literal_expected_1141": "È previsto un valore letterale stringa.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "I nomi di importazione ed esportazione di valori letterali stringa non sono supportati quando il flag '--module' è impostato su 'es2015' o 'es2020'.", + "String_literal_with_double_quotes_expected_1327": "È previsto un valore letterale stringa con virgolette doppie.", + "Style_Options_6293": "Opzioni di stile", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Applica stili a errori e messaggi usando colore e contesto (sperimentale).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Quando è presente un segno meno, devono essere presenti flag di criteri secondari.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Le dichiarazioni di proprietà successive devono essere dello stesso tipo. La proprietà '{0}' deve essere di tipo '{1}', ma qui è di tipo '{2}'.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Le dichiarazioni di variabili successive devono essere dello stesso tipo. La variabile '{0}' deve essere di tipo '{1}', mentre è di tipo '{2}'.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Il tipo della sostituzione '{0}' per il criterio '{1}' non è corretto. È previsto 'string', ma è stato ottenuto '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "La sostituzione '{0}' nel criterio '{1}' può contenere al massimo un carattere '*'.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Le sostituzioni per il criterio '{0}' devono essere una matrice.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Le sostituzioni per il criterio '{0}' non devono essere una matrice vuota.", + "Successfully_created_a_tsconfig_json_file_6071": "La creazione di un file tsconfig.json è riuscita.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Le chiamate super non sono consentite all'esterno di costruttori o nelle funzioni annidate all'interno di costruttori.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Elimina i controlli delle proprietà in eccesso per i valori letterali di oggetto.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Non visualizza gli errori noImplicitAny per gli oggetti di indicizzazione in cui mancano le firme dell'indice.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Disabilita gli errori 'noImplicitAny' durante l'indicizzazione di oggetti in cui mancano le firme dell'indice.", + "Switch_each_misused_0_to_1_95138": "Cambiare ogni '{0}' non usato correttamente in '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chiama in modo sincrono i callback e aggiorna lo stato dei watcher di directory in piattaforme che non supportano il controllo ricorsivo in modo nativo.", + "Syntax_Colon_0_6023": "Sintassi: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Con il tag '{0}' sono previsti almeno '{1}' argomenti, ma la factory JSX '{2}' ne fornisce al massimo '{3}'.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Le espressioni di modello con tag non sono consentite in una catena facoltativa.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "La destinazione consente solo {0} elemento/i ma l'origine potrebbe contenerne di più.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "La destinazione richiede {0} elemento/i ma l'origine potrebbe contenerne di meno.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "La firma di destinazione fornisce un numero insufficiente di argomenti. {0} o più elementi previsti, ma {1} effettivi.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Il modificatore '{0}' può essere usato solo in file TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Non è possibile applicare l'operatore '{0}' al tipo 'symbol'.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "L'operatore '{0}' non è consentito per i tipi booleani. Provare a usare '{1}'.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "La proprietà '{0}' di un iteratore asincrono deve essere un metodo.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "La proprietà '{0}' di un iteratore deve essere un metodo.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Il tipo 'Object' può essere assegnato a un numero molto limitato di altri tipi. Si intendeva usare il tipo 'any'?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Non è possibile impostare contemporaneamente i flag Unicode (u) e Unicode Sets (v).", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Non è possibile fare riferimento all'oggetto 'arguments' in una funzione arrow in ES5. Provare a usare un'espressione di funzione standard.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Non è possibile fare riferimento all'oggetto 'arguments' in un metodo o una funzione asincrona in ES5. Provare a usare un metodo o una funzione standard.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Il corpo di un'istruzione 'if' non può essere l'istruzione vuota.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La chiamata sarebbe riuscita rispetto a questa implementazione, ma le firme di implementazione degli overload non sono visibili esternamente.", + "The_character_set_of_the_input_files_6163": "Set di caratteri dei file di input.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La funzione arrow contenitore acquisisce il valore globale di 'this'.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Il corpo del modulo o la funzione che contiene è troppo grande per l'analisi del flusso di controllo.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Il file corrente è un modulo CommonJS e non può usare 'await' al livello principale.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Il file corrente è un modulo CommonJS le cui importazioni genereranno chiamate 'require'. Tuttavia, il file a cui si fa riferimento è un modulo ECMAScript e non può essere importato con 'require'. Provare a scrivere una chiamata 'import(\"{0}\")' dinamica.", + "The_current_host_does_not_support_the_0_option_5001": "L'host corrente non supporta l'opzione '{0}'.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La dichiarazione di '{0}' che probabilmente si intende usare viene definita in questo punto", + "The_declaration_was_marked_as_deprecated_here_2798": "La dichiarazione è stata contrassegnata come deprecata in questo punto.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Il tipo previsto proviene dalla proprietà '{0}', dichiarata in questo punto nel tipo '{1}'", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Il tipo previsto proviene dal tipo restituito di questa firma.", + "The_expected_type_comes_from_this_index_signature_6501": "Il tipo previsto proviene da questa firma dell'indice.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'espressione di un'assegnazione di esportazione deve essere un identificatore o un nome completo in un contesto di ambiente.", + "The_file_is_in_the_program_because_Colon_1430": "Motivo per cui il file è presente nel programma:", + "The_files_list_in_config_file_0_is_empty_18002": "L'elenco 'files' nel file config '{0}' è vuoto.", + "The_first_export_default_is_here_2752": "In questo punto è presente il valore predefinito per la prima esportazione.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Il primo parametro del metodo 'then' di una promessa deve essere un callback.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Il tipo globale 'JSX.{0}' non può contenere più di una proprietà.", + "The_implementation_signature_is_declared_here_2750": "In questo punto viene dichiarata la firma di implementazione.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "La metaproprietà' Import. meta ' non è consentita per i file che vengono compilati nell'output di CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "La metaproprietà 'import.meta' è consentita solo quando l'opzione '--module' è 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20' o 'nodenext'.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Non è possibile assegnare un nome al tipo derivato di '{0}' senza un riferimento a '{1}'. È probabile che non sia portabile. È necessaria un'annotazione di tipo.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Il tipo dedotto di '{0}' fa riferimento a un tipo con una struttura ciclica che non può essere facilmente serializzata. È necessaria un'annotazione di tipo.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Il tipo dedotto di '{0}' fa riferimento a un tipo '{1}' non accessibile. È necessaria un'annotazione di tipo.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Il tipo dedotto di questo nodo supera la lunghezza massima serializzata dal compilatore. È necessaria un'annotazione di tipo esplicita.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "L'inizializzatore di una dichiarazione 'using' deve essere un oggetto con un metodo '[Symbol.dispose]()' oppure essere 'null' o 'undefined'.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "L'inizializzatore di una dichiarazione 'await using' deve essere un oggetto con un metodo '[Symbol.asyncDispose]()' o '[Symbol.dispose]()' oppure essere 'null' o 'undefined'.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "L'intersezione '{0}' è stata ridotta a 'never' perché la proprietà '{1}' esiste in più costituenti ed è privata in alcuni.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "L'intersezione '{0}' è stata ridotta a 'never' perché in alcuni costituenti della proprietà '{1}' sono presenti tipi in conflitto.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "La parola chiave 'intrinsic' può essere usata solo per dichiarare tipi intrinseci forniti dal compilatore.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Per usare frammenti JSX con l'opzione del compilatore 'jsxFactory', è necessario specificare l'opzione del compilatore 'jsxFragmentFactory'.", + "The_last_overload_gave_the_following_error_2770": "L'ultimo overload ha restituito l'errore seguente.", + "The_last_overload_is_declared_here_2771": "In questo punto viene dichiarato l'ultimo overload.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "La parte sinistra di un'espressione 'for...in' non può essere un criterio di destrutturazione.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "La parte sinistra di un'istruzione 'for...in' non può essere una dichiarazione 'await using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Nella parte sinistra di un'espressione 'for...in' non è possibile usare un'annotazione di tipo.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "La parte sinistra di un'istruzione 'for...in' non può essere un accesso a proprietà facoltativo.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "La parte sinistra di un'istruzione 'for...in' deve essere una variabile o un accesso a proprietà.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte sinistra di un'espressione 'for...in' deve essere di tipo 'string' o 'any'.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Nella parte sinistra di un'espressione 'for...of' non è possibile usare un'annotazione di tipo.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte sinistra di un'istruzione 'for...of' non può essere un accesso a proprietà facoltativo.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "La parte sinistra di un'istruzione 'for...of' non può essere 'async'.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte sinistra di un'istruzione 'for...of' deve essere una variabile o un accesso a proprietà.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte sinistra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte sinistra di un'espressione di assegnazione non può essere un accesso a proprietà facoltativo.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "La parte sinistra di un'espressione di assegnazione deve essere una variabile o un accesso a proprietà.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "La parte sinistra di un'espressione 'instanceof' deve essere assegnabile al primo argomento del metodo '[Symbol.hasInstance]' della parte destra.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "La parte sinistra di un'espressione 'instanceof' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Impostazioni locali usate per la visualizzazione di messaggi all'utente, ad esempio 'it-it'", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Profondità massima delle dipendenze per la ricerca in node_modules e il caricamento dei file JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "L'operando di un operatore 'delete' non può essere un identificatore privato.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "L'operando di un operatore 'delete' non può essere una proprietà di sola lettura.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "L'operando di un operatore 'delete' deve essere un riferimento a proprietà.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "L'operando di un operatore 'delete' deve essere facoltativo.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "L'operando di un operatore di incremento o decremento non può essere un accesso a proprietà facoltativo.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "L'operando di un operatore di incremento o decremento deve essere una variabile o un accesso a proprietà.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "In questo punto il parser dovrebbe trovare un simbolo '{1}' abbinato al token '{0}'.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di esportazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "La radice del progetto è ambigua, ma è necessaria per risolvere i '{0}' delle voci della mappa di importazione nel file '{1}'. Specificare l'opzione del compilatore 'rootDir' per disambiguare.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Non è possibile accedere alla proprietà '{0}' nel tipo '{1}' all'interno di questa classe perché è nascosta da un altro identificatore privato con la stessa ortografia.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Il tipo restituito di una funzione di espressione Decorator del parametro deve essere 'void' o 'any'.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Il tipo restituito di una funzione di espressione Decorator della proprietà deve essere 'void' o 'any'.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Il tipo restituito di una funzione asincrona deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise. Si intendeva scrivere 'Promise<{0}>'?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte destra di un'istruzione 'for...in' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo, ma in questo caso il tipo è '{0}'.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte destra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "La parte destra di un'espressione 'instanceof' deve essere di tipo 'any', una classe, una funzione o un altro tipo assegnabile al tipo di interfaccia 'Function' oppure un tipo di oggetto con un metodo 'Symbol.hasInstance'.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "La parte destra di un'espressione 'instanceof' non deve essere un'espressione di creazione di un'istanza.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Il valore radice di un file '{0}' deve essere un oggetto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Il runtime richiamerà l'elemento Decorator con {1} argomenti, ma l'elemento Decorator ne prevede almeno {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "La dichiarazione di oscuramento di '{0}' viene definita in questo punto", + "The_signature_0_of_1_is_deprecated_6387": "La firma '{0}' di '{1}' è deprecata.", + "The_specified_path_does_not_exist_Colon_0_5058": "Il percorso specificato non esiste: '{0}'.", + "The_tag_was_first_specified_here_8034": "Il tag è stato specificato per la prima volta in questo punto.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "La destinazione di un'assegnazione rest di oggetto non può essere un accesso a proprietà facoltativo.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "La destinazione di un'assegnazione REST di oggetto deve essere una variabile o un accesso a proprietà.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Il contesto 'this' del tipo '{0}' non è assegnabile a quello 'this' di tipo '{1}' del metodo.", + "The_this_types_of_each_signature_are_incompatible_2685": "I tipi 'this' delle singole firme non sono compatibili.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Il tipo '{0}' è 'readonly' e non può essere assegnato al tipo modificabile '{1}'.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Impossibile utilizzare il modificatore 'tipo' in un'esportazione denominata quando 'tipo di esportazione' viene usato nell'istruzione di esportazione.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Impossibile utilizzare il modificatore 'tipo' in un'importazione denominata quando 'tipo di importazione' viene usato nella relativa istruzione di importazione.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossibile serializzare questo tipo di nodo perché la sua proprietà '{0}' non può essere serializzata.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Il tipo restituito dal metodo '{0}()' di un iteratore asincrono deve essere una promessa per un tipo con una proprietà 'value'.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Il tipo restituito dal metodo '{0}()' di un iteratore deve contenere una proprietà 'value'.", + "The_types_of_0_are_incompatible_between_these_types_2200": "I tipi di '{0}' sono incompatibili tra questi tipi.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "I tipi restituiti da '{0}' sono incompatibili tra questi tipi.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "Non è possibile usare qui il valore '{0}'.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "La dichiarazione di variabile di un'istruzione 'for...in' non può contenere un inizializzatore.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "La dichiarazione di variabile di un'istruzione 'for...of' non può contenere un inizializzatore.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "L'istruzione 'with' non è supportata. Il tipo di tutti i simboli in un blocco 'with' è 'any'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Sono presenti tipi in '{0}', ma non è stato possibile risolvere questo risultato con l'impostazione 'moduleResolution' corrente. Provare a eseguire l'aggiornamento a 'node16', 'nodenext' o 'bundler'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Esistono tipi in '{0}', ma non è stato possibile risolvere questo risultato quando si rispettano le \"esportazioni\" del file package.json. Potrebbe essere necessario aggiornare i file package.json o typings della libreria '{1}'.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Non è presente alcun gruppo di acquisizione denominato '{0}' in questa espressione regolare.", + "There_is_nothing_available_for_repetition_1507": "Nessun elemento disponibile per la ripetizione.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Questo tag JSX richiede che \"{0}\" sia incluso nell'ambito, ma non è stato trovato.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Questo tag JSX richiede che il percorso del modulo \"{0}\" esista, ma non è stato trovato alcun tag. Assicurarsi di avere i tipi per il pacchetto appropriato installati.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Con la proprietà '{0}' del tag JSX è previsto un singolo elemento figlio di tipo '{1}', ma sono stati specificati più elementi figlio.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Con la proprietà '{0}' del tag JSX è previsto il tipo '{1}' che richiede più elementi figlio, ma è stato specificato un singolo elemento figlio.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Questo backreference fa riferimento a un gruppo che non esiste. Non sono presenti gruppi di acquisizione in questa espressione regolare.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Questo backreference fa riferimento a un gruppo che non esiste. Sono presenti solo {0} gruppi di acquisizione in questa espressione regolare.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Questa espressione binaria non è mai nullish. Mancano le parentesi?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Il carattere non può essere preceduto da un carattere di escape in un'espressione regolare.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Questo confronto sembra non intenzionale perché i tipi '{0}' e '{1}' non presentano alcuna sovrapposizione.", + "This_condition_will_always_return_0_2845": "Questa condizione restituirà sempre '{0}'.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Questa condizione restituirà sempre '{0}' perché JavaScript confronta gli oggetti per riferimento, non per valore.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Questa condizione restituirà sempre true perché questo elemento '{0}' è sempre definito.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Questa condizione restituirà sempre true perché questa funzione è sempre definita. Si intendeva chiamarla?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Questa funzione del costruttore può essere convertita in una dichiarazione di classe.", + "This_expression_is_always_nullish_2871": "Questa espressione è sempre nullish.", + "This_expression_is_never_nullish_2881": "Questa espressione non è mai null.", + "This_expression_is_not_callable_2349": "Questa espressione non può essere chiamata.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Non è possibile chiamare questa espressione perché è una funzione di accesso 'get'. Si intendeva usarla senza '()'?", + "This_expression_is_not_constructable_2351": "Questa espressione non può essere costruita.", + "This_file_already_has_a_default_export_95130": "Per questo file esiste già un'esportazione predefinita", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Questo percorso di importazione non è sicuro da riscrivere, perché viene risolto in un altro progetto e il percorso relativo tra i file di output dei progetti non corrisponde al percorso relativo tra i file di input.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Questa importazione usa un'estensione \"{0}\" per la risoluzione in un file TypeScript di input, ma non verrà riscritta durante la creazione perché non è un percorso relativo.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Questa è la dichiarazione che verrà aumentata. Provare a spostare la dichiarazione che causa l'aumento nello stesso file.", + "This_kind_of_expression_is_always_falsy_2873": "Questo tipo di espressione è sempre falso.", + "This_kind_of_expression_is_always_truthy_2872": "Questo tipo di espressione è sempre veritiero.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Può essere convertita in una funzione asincrona.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Questo membro non può avere un commento JSDoc con un tag '@override' perché non è dichiarato nella classe di base '{0}'.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Questo membro non può avere un commento JSDoc con un tag 'override' perché non è dichiarato nella classe di base '{0}'. Intendevi '{1}'?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Questo membro non può avere un commento JSDoc con un tag '@override' perché la classe che lo contiene '{0}' non estende un'altra classe.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Questo membro non può avere un commento JSDoc con un tag '@override' perché il suo nome è dinamico.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'. Forse intendevi '{1}'?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Questo membro non può includere un modificatore 'override' perché la classe '{0}', che lo contiene, non estende un'altra classe.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Questo membro non può avere un modificatore 'override' perché il nome è dinamico.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Questo membro deve avere un commento JSDoc con un tag '@override' perché sostituisce un membro nella classe di base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Questo membro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Questo membro deve includere un modificatore 'override' perché esegue l'override di un metodo astratto dichiarato nella classe di base '{0}'.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "È possibile fare riferimento a questo modulo solo con importazioni/esportazioni ECMAScript attivando il flag '{0}' e facendo riferimento alla relativa esportazione predefinita.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Il modulo viene dichiarato con 'export =' e può essere usato solo con un'importazione predefinita quando si usa il flag '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Questa operazione può essere semplificata. Questo turno è identico a '{0} {1} {2}'.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Questo overload restituisce implicitamente il tipo '{0}' perché manca un'annotazione di tipo restituito.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Questa firma di overload non è compatibile con la relativa firma di implementazione.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Questo parametro non è consentito con la direttiva 'use strict'.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Questa proprietà di parametro deve avere un commento JSDoc con un tag '@override' perché sostituisce un membro nella classe di base '{0}'.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Questa proprietà parametro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Non è possibile attivare/disattivare questo flag di espressione regolare all'interno di un criterio secondario.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Questo flag di espressione regolare è disponibile solo quando la destinazione è '{0}' o versioni successive.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Questo percorso di importazione relativo non è sicuro da riscrivere perché sembra un nome di file, ma in realtà si risolve in \"{0}\".", + "This_spread_always_overwrites_this_property_2785": "Questo spread sovrascrive sempre questa proprietà.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Questa sintassi non è consentita quando 'erasableSyntaxOnly' è abilitato.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Questa sintassi è riservata ai file con estensione MTS o CTS. Aggiungere una virgola finale o un vincolo esplicito.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Questa sintassi è riservata ai file con estensione mts o cts. Utilizzare un'espressione 'as'.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Con questa sintassi è richiesto un helper importato, ma il modulo '{0}' non è stato trovato.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Con questa sintassi è richiesto un helper importato denominato '{1}', che non esiste in '{0}'. Provare ad aggiornare la versione di '{0}'.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Con questa sintassi è richiesto un helper importato denominato '{1}' con {2} parametri, che non è compatibile con quello presente in '{0}'. Provare ad aggiornare la versione di '{0}'.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Questo parametro di tipo potrebbe richiedere un vincolo `extends {0}`.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Questo uso di 'import' non è valido. le chiamate 'import()' possono essere scritte, ma devono avere parentesi e non possono avere argomenti di tipo.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Per convertire questo file in un modulo ECMAScript, aggiungere il campo '\"type\": \"module\"' a '{0}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Per convertire il file in un modulo ECMAScript, modificarne l'estensione in '{0}' oppure aggiungere il campo '\"type\": \"module\"' a '{1}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Per convertire questo file in un modulo ECMAScript, modificarne l'estensione in '{0}' o creare un file package.json locale con '{ \"type\": \"module\" }'.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Per convertire questo file in un modulo ECMAScript, creare un file package.json locale con '{ \"type\": \"module\" }'.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Le espressioni 'await' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Le istruzioni 'await using' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Le dichiarazioni di primo livello nei file con estensione d.ts devono iniziare con un modificatore 'declare' o 'export'.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "I cicli 'for await' di primo livello sono consentiti solo quando l'opzione 'module' è impostata su 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' o 'preserve' e l'opzione 'target' è impostata su 'es2017' o versione successiva.", + "Trailing_comma_not_allowed_1009": "La virgola finale non è consentita.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Esegue il transpile di ogni file in un modulo separato (simile a 'ts.transpileModule').", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Provare con `npm i --save-dev @types/{1}` se esiste oppure aggiungere un nuovo file di dichiarazione con estensione d.ts contenente `declare module '{0}';`", + "Trying_other_entries_in_rootDirs_6110": "Verrà effettuato un tentativo con altre voci in 'rootDirs'.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Verrà effettuato un tentativo con la sostituzione '{0}'. Percorso candidato del modulo: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Il tipo di tupla '{0}' con lunghezza '{1}' non contiene elementi alla posizione di indice '{2}'.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Gli argomenti tipo di tupla contengono un riferimento circolare a se stessi.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Il tipo '{0}' può essere iterato solo quando si usa il flag '--downlevelIteration' o quando '--target' è impostato su 'es2015' o un valore superiore.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Non è possibile usare il tipo '{0}' come tipo di indice.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Non è possibile usare il tipo '{0}' per indicizzare il tipo '{1}'.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Il tipo '{0}' non soddisfa il vincolo '{1}'.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Il tipo '{0}' non soddisfa il tipo previsto '{1}'.", + "Type_0_has_no_call_signatures_2757": "Il tipo '{0}' non contiene firme di chiamata.", + "Type_0_has_no_construct_signatures_2761": "Il tipo '{0}' non contiene firme del costrutto.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Nel tipo '{0}' non esiste alcuna firma dell'indice corrispondente per il tipo '{1}'.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Il tipo '{0}' non ha proprietà in comune con il tipo '{1}'.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Il tipo '{0}' non ha firme per cui è applicabile l'elenco degli argomenti tipo.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Il tipo '{0}' è generico e può essere indicizzato solo per la lettura.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "Nel tipo '{0}' mancano le proprietà seguenti del tipo '{1}': {2} e altre {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "Il tipo '{0}' non è un tipo di funzione del costruttore.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Il tipo '{0}' non è un tipo restituito di funzione asincrona valido in ES5 perché non fa riferimento a un valore di costruttore compatibile con Promise.", + "Type_0_is_not_an_array_type_2461": "Il tipo '{0}' non è un tipo matrice.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Il tipo '{0}' non è un tipo matrice o stringa.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Il tipo '{0}' non è un tipo matrice o stringa oppure non contiene un metodo '[Symbol.iterator]()' che restituisce un iteratore.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Il tipo '{0}' non è un tipo matrice oppure non contiene un metodo '[Symbol.iterator]()' che restituisce un iteratore.", + "Type_0_is_not_assignable_to_type_1_2322": "Il tipo '{0}' non è assegnabile al tipo '{1}'.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Si intendeva '{2}'?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Il tipo '{0}' non è assegnabile al tipo '{1}'. Sono presenti due tipi diversi con questo nome, che però non sono correlati.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Il tipo '{0}' non può essere assegnato al tipo '{1}' come indicato dall'annotazione di varianza.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Il tipo '{0}' non è assegnabile al tipo '{1}' come richiesto per i valori dei membri di enumerazione calcolati.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' ai tipi di proprietà di destinazione.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "L'argomento di tipo '{0}' non può essere assegnato al tipo '{1}' con 'exactOptionalPropertyTypes: true'. Provare ad aggiungere 'undefined' al tipo di destinazione.", + "Type_0_is_not_comparable_to_type_1_2678": "Il tipo '{0}' non è confrontabile con il tipo '{1}'.", + "Type_0_is_not_generic_2315": "Il tipo '{0}' non è generico.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Il tipo '{0}' può rappresentare un valore primitivo, che non è consentito come operando destro dell'operatore 'in'.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Il tipo '{0}' deve contenere un metodo '[Symbol.asyncIterator]()' che restituisce un iteratore asincrono.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Il tipo '{0}' deve contenere un metodo '[Symbol.iterator]()' che restituisce un iteratore.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Il tipo '{0}' non fornisce corrispondenze per la firma '{1}'.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Il tipo '{0}' fa riferimento a se stesso in modo ricorsivo come tipo di base.", + "Type_Checking_6248": "Controllo del tipo", + "Type_alias_0_circularly_references_itself_2456": "L'alias di tipo '{0}' contiene un riferimento circolare a se stesso.", + "Type_alias_must_be_given_a_name_1439": "È necessario assegnare un nome all'alias del tipo.", + "Type_alias_name_cannot_be_0_2457": "Il nome dell'alias di tipo non può essere '{0}'.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Gli alias di tipo possono esere usati solo in file TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "L'annotazione di tipo non può essere inclusa in una dichiarazione di costruttore.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Le annotazioni tipo possono essere usate solo in file TypeScript.", + "Type_argument_expected_1140": "È previsto l'argomento tipo.", + "Type_argument_list_cannot_be_empty_1099": "L'elenco degli argomenti tipo non può essere vuoto.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Gli argomenti tipo possono essere usati solo in file TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Gli argomenti tipo per '{0}' contengono un riferimento circolare a se stessi.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Le espressioni di asserzione di tipo possono essere usate solo in file TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Il tipo alla posizione {0} nell'origine non è compatibile con il tipo alla posizione {1} nella destinazione.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Il tipo alle posizioni dalla {0} alla {1} nell'origine non è compatibile con il tipo alla posizione {2} nella destinazione.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Non è possibile usare il tipo contenente il nome privato '{0}' con --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "File della dichiarazione di tipo da includere nella compilazione.", + "Type_expected_1110": "È previsto il tipo.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "L’importazione dei tipi di asserzione deve contenere esattamente una chiave, 'resolution-mode', con valore 'import' o 'require'.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "L'importazione del tipo di un modulo ECMAScript da un modulo CommonJS deve avere un attributo 'resolution-mode'.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creazione di un'istanza di tipo presenta troppi livelli ed è probabilmente infinita.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Il tipo viene usato come riferimento diretto o indiretto nel callback di fulfillment del relativo metodo 'then'.", + "Type_library_referenced_via_0_from_file_1_1402": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}'", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}' con packageId '{2}'", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Il tipo dell'operando 'await' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Il tipo del valore della proprietà calcolata è '{0}', che non è assegnabile al tipo '{1}'.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Il tipo di variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Il tipo di elementi iterati di un operando 'yield*' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Il tipo di proprietà '{0}' contiene un riferimento circolare a se stesso nel tipo con mapping '{1}'.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Il tipo dell'operando 'yield' in un generatore asincrono deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "L'importazione solo tipo di un modulo ECMAScript da un modulo CommonJS deve avere un attributo 'resolution-mode'.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Il tipo è originato in corrispondenza di questa importazione. Non è possibile chiamare o costruire un'importazione di tipo spazio dei nomi e verrà restituito un errore in fase di esecuzione. Provare a usare un'importazione predefinita o un'importazione di require in questo punto.", + "Type_parameter_0_has_a_circular_constraint_2313": "Il parametro di tipo '{0}' contiene un vincolo circolare.", + "Type_parameter_0_has_a_circular_default_2716": "Il parametro di tipo '{0}' contiene un'impostazione predefinita circolare.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Il parametro di tipo '{0}' della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Il parametro di tipo '{0}' della firma del costruttore dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Il parametro di tipo '{0}' della classe esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Il parametro di tipo '{0}' della funzione esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Il parametro di tipo '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Il parametro di tipo '{0}' del tipo di oggetto con mapping esportato usa il nome privato '{1}'.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Il parametro di tipo '{0}' dell'alias di tipo esportato contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Il parametro di tipo '{0}' del metodo dell'interfaccia esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Il parametro di tipo '{0}' del metodo pubblico della classe esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Il parametro di tipo '{0}' del metodo statico pubblico della classe esportata contiene o usa il nome privato '{1}'.", + "Type_parameter_declaration_expected_1139": "È prevista la dichiarazione di parametro di tipo.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Le dichiarazioni di parametro di tipo possono essere usate solo in file TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Le impostazioni predefinite del parametro di tipo possono fare riferimento solo a parametri di tipo dichiarati in precedenza.", + "Type_parameter_list_cannot_be_empty_1098": "L'elenco dei parametri di tipo non può essere vuoto.", + "Type_parameter_name_cannot_be_0_2368": "Il nome del parametro di tipo non può essere '{0}'.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "I parametri di tipo non possono essere inclusi in una dichiarazione di costruttore.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Il predicato di tipo '{0}' non è assegnabile a '{1}'.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Il tipo produce un tipo di tupla troppo grande da rappresentare.", + "Type_reference_directive_0_was_not_resolved_6120": "======== La direttiva '{0}' del riferimento al tipo non è stata risolta. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}'. Primaria: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}' con ID pacchetto ID '{2}'. Primaria: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Le espressioni di soddisfazione del tipo possono essere usate solo nei file TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "I tipi non possono essere visualizzati nelle dichiarazioni di esportazione nei file JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "I tipi contengono dichiarazioni separate di una proprietà privata '{0}'.", + "Types_of_construct_signatures_are_incompatible_2419": "I tipi delle firme del costrutto sono incompatibili.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "I tipi dei parametri '{0}' e '{1}' sono incompatibili.", + "Types_of_property_0_are_incompatible_2326": "I tipi della proprietà '{0}' sono incompatibili.", + "Unable_to_open_file_0_6050": "Non è possibile aprire il file '{0}'.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Non è possibile risolvere la firma dell'espressione Decorator della classe quando è chiamata come espressione.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Non è possibile risolvere la firma dell'espressione Decorator del metodo quando è chiamata come espressione.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Non è possibile risolvere la firma dell'espressione Decorator del parametro quando è chiamata come espressione.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Non è possibile risolvere la firma dell'espressione Decorator della proprietà quando è chiamata come espressione.", + "Undetermined_character_escape_1513": "Carattere di escape indeterminato.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' imprevisto. La barra rovesciata stava per un carattere escape?", + "Unexpected_end_of_text_1126": "Fine del testo imprevista.", + "Unexpected_keyword_or_identifier_1434": "Parola chiave o identificatore imprevisti.", + "Unexpected_token_1012": "Token imprevisto.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token imprevisto. È previsto un costruttore, un metodo, una funzione di accesso o una proprietà.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token imprevisto. Sono previsti nomi di parametro senza parentesi graffe.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Token imprevisto. Si intendeva `{'>'}` o `>`?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token imprevisto. Si intendeva `{'}'}` o `}`?", + "Unexpected_token_expected_1179": "Token imprevisto. È previsto '{'.", + "Unicode_escape_sequence_cannot_appear_here_17021": "La sequenza di escape Unicode non può essere visualizzata qui.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Le sequenze di escape Unicode sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Le espressioni valore della proprietà sono disponibili solo quando è impostato il flag Unicode (u) o Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nome della proprietà Unicode sconosciuto.", + "Unknown_Unicode_property_name_or_value_1529": "Nome o valore della proprietà Unicode sconosciuto.", + "Unknown_Unicode_property_value_1526": "Valore della proprietà Unicode sconosciuto.", + "Unknown_build_option_0_5072": "L'opzione di compilazione '{0}' è sconosciuta.", + "Unknown_build_option_0_Did_you_mean_1_5077": "L'opzione di compilazione '{0}' è sconosciuta. Si intendeva '{1}'?", + "Unknown_compiler_option_0_5023": "Opzione del compilatore sconosciuta: '{0}'.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "L'opzione '{0}' del compilatore è sconosciuta. Si intendeva '{1}'?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Parola chiave o identificatore sconosciuti. Intendevi '{0}'?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "L'opzione 'excludes' è sconosciuta. Si intendeva 'exclude'?", + "Unknown_regular_expression_flag_1499": "Flag di espressione regolare sconosciuto.", + "Unknown_type_acquisition_option_0_17010": "L'opzione '{0}' relativa all'acquisizione del tipo è sconosciuta.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "L'opzione di acquisizione del tipo '{0}' è sconosciuta. Si intendeva '{1}'?", + "Unknown_watch_option_0_5078": "L'opzione '{0}' dell'espressione di controllo è sconosciuta.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "L'opzione '{0}' dell'espressione di controllo è sconosciuta. Si intendeva '{1}'?", + "Unreachable_code_detected_7027": "È stato rilevato codice non raggiungibile.", + "Unterminated_Unicode_escape_sequence_1199": "Sequenza di escape Unicode senza terminazione.", + "Unterminated_quoted_string_in_response_file_0_6045": "Stringa tra virgolette senza terminazione nel file di risposta '{0}'.", + "Unterminated_regular_expression_literal_1161": "Valore letterale di espressione regolare senza terminazione.", + "Unterminated_string_literal_1002": "Valore letterale stringa senza terminazione.", + "Unterminated_template_literal_1160": "Valore letterale di modello senza terminazione.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Le chiamate di funzione non tipizzate potrebbero non accettare argomenti tipo.", + "Unused_label_7028": "Etichetta non usata.", + "Unused_ts_expect_error_directive_2578": "Direttiva '@ts-expect-error' non usata.", + "Update_import_from_0_90058": "Aggiornare l'importazione da \"{0}\"", + "Update_modifiers_of_0_90061": "Aggiornare i modificatori di '{0}'", + "Updating_output_timestamps_of_project_0_6359": "Aggiornamento dei timestamp di output del progetto '{0}'...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Aggiornamento dei timestamp di output non modificati del progetto '{0}'...", + "Use_0_95174": "Usa `{0}`.", + "Use_0_instead_5106": "Usare '{0}'.", + "Use_Number_isNaN_in_all_conditions_95175": "Usare 'Number.isNaN' in tutte le condizioni.", + "Use_element_access_for_0_95145": "Usare l'accesso agli elementi per '{0}'", + "Use_element_access_for_all_undeclared_properties_95146": "Usare l'accesso agli elementi per tutte le proprietà non dichiarate.", + "Use_import_type_95180": "Usare 'import type'", + "Use_synthetic_default_member_95016": "Usare il membro 'default' sintetico.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Usare il campo 'exports' del file package.json per risolvere le importazioni.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Usare il campo 'imports' del file package.json per risolvere le importazioni.", + "Use_type_0_95181": "Usare 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "Utilizzo di '{0}' sottotracciato '{1}' con destinazione '{2}'.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "L'uso di frammenti JSX richiede che la factory di frammenti \"{0}\" sia nell'ambito, ma non è stata trovata.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'uso di una stringa in un'istruzione 'for...of' è supportato solo in ECMAScript 5 e versioni successive.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Se si usa --build, l'opzione -b modificherà il comportamento di tsc in modo che sia più simile a un agente di orchestrazione di compilazione che a un compilatore. Viene usata per attivare la compilazione di progetti compositi. Per altre informazioni, vedere {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", + "VERSION_6036": "VERSIONE", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Il valore di tipo '{0}' non ha proprietà in comune con il tipo '{1}'. Si intendeva chiamarlo?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Il valore di tipo '{0}' non è chiamabile. Si intendeva includere 'new'?", + "Variable_0_implicitly_has_an_1_type_7005": "La variabile '{0}' contiene implicitamente un tipo '{1}'.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "La variabile '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "La variabile '{0}' include implicitamente il tipo '{1}' in alcuni punti, ma è possibile dedurre un tipo migliore dall'utilizzo.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "La variabile '{0}' contiene implicitamente il tipo '{1}' in alcune posizioni in cui non è possibile determinarne il tipo.", + "Variable_0_is_used_before_being_assigned_2454": "La variabile '{0}' viene usata prima dell'assegnazione.", + "Variable_declaration_expected_1134": "È prevista la dichiarazione di variabile.", + "Variable_declaration_list_cannot_be_empty_1123": "L'elenco delle dichiarazioni di variabile non può essere vuoto.", + "Variable_declaration_not_allowed_at_this_location_1440": "Dichiarazione di variabile non consentita in questa posizione.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "La variabile deve avere un'annotazione di tipo esplicito con --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Le variabili con più dichiarazioni non possono essere impostate come inline.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'elemento variadic alla posizione {0} nell'origine non corrisponde all'elemento alla posizione {1} nella destinazione.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Le annotazioni di varianza sono supportate solo negli alias di tipo per oggetti, funzioni, costruttori e tipi mappati.", + "Version_0_6029": "Versione {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Per informazioni sulla migrazione, visitare https://aka.ms/ts6.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Per altre informazioni su questo file, visitare https://aka.ms/tsconfig", + "WATCH_OPTIONS_6918": "OPZIONI DELL'ESPRESSIONE DI CONTROLLO", + "Watch_and_Build_Modes_6250": "Modalità di espressione di controllo e compilazione", + "Watch_input_files_6005": "Controlla i file di input.", + "Watch_option_0_requires_a_value_of_type_1_5080": "Con l'opzione '{0}' dell'espressione di controllo è richiesto un valore di tipo {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "È possibile solo scrivere un tipo per '{0}' aggiungendo qui un tipo per l'intero parametro.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Durante l'assegnazione di funzioni verifica che i parametri e i valori restituiti siano compatibili con il sottotipo.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Durante il controllo del tipo prende in considerazione 'null' e 'undefined'.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Indica se mantenere l'output della console obsoleto in modalità espressione di controllo invece di pulire lo schermo.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Eseguire il wrapping di tutti i caratteri non validi in un contenitore di espressioni", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Eseguire il wrapping di tutte le espressioni Decorator non valide tra parentesi", + "Wrap_all_object_literal_with_parentheses_95116": "Racchiudere tra parentesi tutti i valori letterali di oggetto", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Esegue il wrapping di JSX senza parentesi nel frammento JSX", + "Wrap_in_JSX_fragment_95120": "Esegui il wrapping nel frammento JSX", + "Wrap_in_parentheses_95194": "Eseguire il wrapping tra parentesi", + "Wrap_invalid_character_in_an_expression_container_95108": "Eseguire il wrapping del carattere non valido in un contenitore di espressioni", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Racchiudere tra parentesi il corpo seguente che deve essere un valore letterale di oggetto", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Per informazioni su tutte le opzioni del compilatore, vedere {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Non è possibile rinominare un modulo tramite un'importazione globale.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Non è possibile rinominare gli elementi definiti in una cartella 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Non è possibile rinominare gli elementi definiti in un'altra cartella 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Non è possibile rinominare elementi definiti nella libreria TypeScript standard.", + "You_cannot_rename_this_element_8000": "Non è possibile rinominare questo elemento.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accetta un numero troppo ridotto di argomenti da usare come espressione Decorator in questo punto. Si intendeva chiamarlo prima e scrivere '@{0}()'?", + "_0_and_1_index_signatures_are_incompatible_2330": "Le firme dell'indice '{0}' e '{1}' non sono compatibili.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Non è possibile combinare le operazioni '{0}' e '{1}' senza parentesi.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Gli attributi '{0}' sono stati specificati due volte. L'attributo denominato '{0}' verrà sovrascritto.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' alla fine di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' all'inizio di un tipo non è una sintassi TypeScript valida. Si intendeva scrivere '{1}'?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' può essere importato solo attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' può essere importato solo usando un'importazione predefinita.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' può essere importato solo usando una chiamata 'require' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' può essere importato solo usando una chiamata 'require' o usando un'importazione predefinita.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' può essere importato solo usando 'import {1} = require({2})' o un'importazione predefinita.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' può essere importato solo usando 'import {1} = require({2})' o attivando il flag 'esModuleInterop' e usando un'importazione predefinita.", + "_0_cannot_be_used_as_a_JSX_component_2786": "Non è possibile usare '{0}' come componente JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Non è possibile usare '{0}' come valore perché è stato esportato con 'export type'.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Non è possibile usare '{0}' come valore perché è stato importato con 'import type'.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "I componenti di '{0}' non accettano testo come elementi figlio. Il tipo di testo in JSX è 'string ', ma il tipo previsto di '{1}' è '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Non è stato possibile creare un'istanza di '{0}' con un tipo arbitrario che potrebbe non essere correlato a '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Le dichiarazioni '{0}' possono essere dichiarate solo all'interno di un blocco.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Le dichiarazioni '{0}' possono essere usate solo in file TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' dichiarazioni non possono avere criteri di associazione.", + "_0_declarations_must_be_initialized_1155": "Le dichiarazioni '{0}' devono essere inizializzate.", + "_0_expected_1005": "È previsto '{0}'.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' ha un tipo stringa, ma deve avere una sintassi di stringa riconoscibile sintatticamente quando è abilitato 'isolatedModules'.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "In '{0}' non è presente alcun membro esportato denominato '{1}'. Si intendeva '{2}'?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' include implicitamente un tipo restituito '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usato come riferimento diretto o indiretto in una delle relative espressioni restituite.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' contiene implicitamente il tipo 'any', perché non contiene un'annotazione di tipo e viene usato come riferimento diretto o indiretto nel relativo inizializzatore.", + "_0_index_signatures_are_incompatible_2634": "Le firme dell'indice '{0}' non sono compatibili.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Il tipo di indice '{0}' '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' è una primitiva, ma '{1}' è un oggetto wrapper. Quando possibile, preferire '{0}'.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' è un tipo e non può essere importato nei file JavaScript. Usare '{1}' in un'annotazione di tipo JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' è un tipo e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' è una ridenominazione inutilizzata di '{1}'. Si intendeva utilizzarla come annotazione di tipo?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' è assegnabile al vincolo di tipo '{1}', ma è possibile creare un'istanza di '{1}' con un sottotipo diverso del vincolo '{2}'.", + "_0_is_automatically_exported_here_18044": "'{0}' viene esportato automaticamente qui.", + "_0_is_declared_but_its_value_is_never_read_6133": "L'elemento '{0}' è dichiarato, ma il suo valore non viene mai letto.", + "_0_is_declared_but_never_used_6196": "La variabile '{0}' è dichiarata, ma non viene mai usata.", + "_0_is_declared_here_2728": "In questo punto viene dichiarato '{0}'.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' è definito come proprietà nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come funzione di accesso.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' è definito come funzione di accesso nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come proprietà di istanza.", + "_0_is_deprecated_6385": "'{0}' è deprecato.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' non è una metaproprietà valida per la parola chiave '{1}'. Si intendeva '{2}'?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' non è un nome di parametro consentito.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' non è consentito come nome di una dichiarazione di variabile.", + "_0_is_of_type_unknown_18046": "'{0}' è di tipo 'unknown'.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' è probabilmente 'null'.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' è probabilmente 'null' o 'undefined'.", + "_0_is_possibly_undefined_18048": "'{0}' è probabilmente 'undefined'.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' viene usato come riferimento diretto o indiretto nella relativa espressione di base.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' viene usato come riferimento diretto o indiretto nella relativa annotazione di tipo.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' è specificato più di una volta, quindi il relativo utilizzo verrà sovrascritto.", + "_0_list_cannot_be_empty_1097": "L'elenco '{0}' non può essere vuoto.", + "_0_modifier_already_seen_1030": "Il modificatore '{0}' è già presente.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una classe, un'interfaccia o un alias di tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Il modificatore '{0}' può essere presente solo in un parametro di tipo di una funzione, un metodo o una classe", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Il modificatore '{0}' non può essere incluso in una dichiarazione di costruttore.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Il modificatore '{0}' non può essere incluso in un elemento modulo o spazio dei nomi.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Il modificatore '{0}' non può essere incluso in un parametro.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Il modificatore '{0}' non può essere incluso in un membro di tipo.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Il modificatore '{0}' non può essere incluso in un parametro di tipo.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Il modificatore '{0}' non può essere incluso in una dichiarazione 'await using'.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Il modificatore '{0}' non può essere incluso in una firma dell'indice.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Il modificatore '{0}' non può essere incluso in elementi di classe di questo tipo.", + "_0_modifier_cannot_be_used_here_1042": "Non è possibile usare il modificatore '{0}' in questo punto.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Non è possibile usare il modificatore '{0}' in un contesto di ambiente.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Non è possibile usare il modificatore '{0}' con il modificatore '{1}'.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Non è possibile usare il modificatore '{0}' con un identificatore privato.", + "_0_modifier_must_precede_1_modifier_1029": "Il modificatore '{0}' deve precedere il modificatore '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve essere seguito da un'espressione del valore di proprietà Unicode racchiusa tra parentesi graffe.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' richiede un'annotazione di tipo esplicita.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come spazio dei nomi.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore. Si intendeva usare '{1} in {0}'?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' si riferisce solo a un tipo, ma in questo punto viene usato come valore. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su es2015 o versioni successive.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fa riferimento a un istruzione globale UMD, ma il file corrente è un modulo. Provare ad aggiungere un'importazione.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fa riferimento a un valore, ma qui viene usato come tipo. Si intendeva 'typeof {0}'?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' si risolve in un tipo e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere importato usando un'importazione solo di tipi quando 'verbatimModuleSyntax' è abilitato.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'import type' in cui viene importato '{0}'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere contrassegnato come solo di tipi in questo file prima di eseguire nuovamente l'esportazione quando '{1}' è abilitato. Provare a usare 'export type {{0} as default }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' si risolve in una dichiarazione solo di tipi e deve essere riesportato usando una riesportazione solo di tipi quando '{1}' è abilitato.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "' {0}' deve essere impostato all'interno dell'oggetto 'compilerOptions' del file JSON di configurazione", + "_0_tag_already_specified_1223": "Il tag '{0}' è già specificato.", + "_0_was_also_declared_here_6203": "In questo punto viene dichiarato anche '{0}'.", + "_0_was_exported_here_1377": "In questo punto è stato esportato '{0}'.", + "_0_was_imported_here_1376": "In questo punto è stato importato '{0}'.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{1}'.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo yield '{1}'.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Il modificatore 'abstract' può essere incluso solo in una dichiarazione di classe, metodo o proprietà.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Il modificatore 'accessor' può essere visualizzato solo in una dichiarazione di proprietà.", + "and_here_6204": "e in questo punto.", + "and_npm_install_D_types_Slashnode_6290": "e npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Non è possibile fare riferimento ad 'arguments' negli inizializzatori di proprietà o nei blocchi di inizializzazione statica delle classi.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": considera i file con importazioni, esportazioni, import.meta, jsx (con jsx: react-jsx) o il formato esm (con modulo: node16+) come moduli.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Non è possibile usare l'espressione 'await' all'interno di un blocco statico di classe.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Le espressioni 'await' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Le espressioni 'await' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Non è possibile usare le espressioni 'await' in un inizializzatore di parametri.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' non ha alcun effetto sul tipo di questa espressione.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Le dichiarazioni 'await using' non sono consentite nei contesti ambientali.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Le istruzioni 'await using' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Le istruzioni 'await using' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Non è possibile usare le istruzioni 'await using' all'interno di un blocco statico di classe.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "L'opzione 'baseUrl' è impostata su '{0}'. Verrà usato questo valore per risolvere il nome del modulo non relativo '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve essere seguito da una lettera ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' può essere usato solo all'inizio di un file.", + "case_or_default_expected_1130": "È previsto 'case' o 'default'.", + "catch_or_finally_expected_1472": "È previsto 'catch' o 'finally'.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non finito.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "L'inizializzatore del membro di enumerazione 'const' è stato valutato come valore non consentito 'NaN'.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "gli inizializzatori di membro di enumerazione const devono essere espressioni costanti.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Le enumerazioni 'const' possono essere usate solo in espressioni di accesso a proprietà o indice oppure nella parte destra di un'assegnazione di esportazione, di una dichiarazione di importazione o di una query su tipo.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Non è possibile usare 'constructor' come nome di proprietà di un parametro.", + "constructor_is_a_reserved_word_18012": "'#constructor' è una parola riservata.", + "default_Colon_6903": "impostazione predefinita:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Non è possibile chiamare 'delete' su un identificatore in modalità strict.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' non consente di riesportare esportazioni predefinite.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' può essere usato solo in file TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Non è possibile applicare il modificatore 'export' a moduli di ambiente e aumenti di modulo perché sono sempre visibili.", + "extends_clause_already_seen_1172": "La clausola 'extends' è già presente.", + "extends_clause_must_precede_implements_clause_1173": "La clausola 'extends' deve precedere la clausola 'implements'.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clausola 'extends' della classe esportata '{0}' contiene o usa il nome privato '{1}'.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clausola 'extends' della classe esportata contiene o usa il nome privato '{0}'.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clausola 'extends' dell'interfaccia esportata '{0}' contiene o usa il nome privato '{1}'.", + "false_unless_checkJs_is_set_6932": "''false'', a meno che non sia impostato ''checkJs''", + "false_unless_composite_is_set_6906": "`false`, a meno che non sia impostato `composite`", + "file_6025": "file", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "I cicli 'for await' sono consentiti solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "I cicli 'for await' sono consentiti solo all'interno di funzioni asincrone e al primo livello di moduli.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Non è possibile usare i cicli 'for await' all'interno di un blocco statico di classe.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Le funzioni di accesso 'get' e 'set' non possono dichiarare parametri 'this'.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se è specificato `files`; in caso contrario, `[\"**/*\"]`", + "implements_clause_already_seen_1175": "La clausola 'implements' è già presente.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Le clausole 'implements' possono essere usate solo in file TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' può essere usato solo in file TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Le dichiarazioni 'infer' sono consentite solo nella clausola 'extends' di un tipo condizionale.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve essere seguito da un nome di gruppo di acquisizione racchiuso tra parentesi acute.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Non è consentito usare 'let' come nome in dichiarazioni 'let' o 'const'.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'espressione 'new', nella cui destinazione manca una firma del costrutto, contiene implicitamente un tipo 'any'.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, nonché il valore di `outDir` se ne è specificato uno.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "''nodenext'' se ''module'' è ''nodenext''; ''node16'' se ''module'' è ''node16'' o ''node18''; in caso contrario, ''bundler''.", + "one_of_Colon_6900": "uno di:", + "one_or_more_Colon_6901": "uno o più:", + "options_6024": "opzioni", + "or_JSX_element_expected_1145": "Previsto elemento '{' o JSX.", + "or_expected_1144": "È previsto '{' o ';'.", + "package_json_does_not_have_a_0_field_6100": "Il file 'package.json' non contiene un campo '{0}'.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' non contiene alcuna voce di 'typesVersions' corrispondente alla versione '{0}'.", + "package_json_had_a_falsy_0_field_6220": "'package.json' contiene un campo '{0}' falso.", + "package_json_has_0_field_1_that_references_2_6101": "Il file 'package.json' contiene il campo '{1}' di '{0}' che fa riferimento a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "'package.json' contiene un campo 'peerDependencies'.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' contiene una voce '{0}' di 'typesVersions' che non corrisponde a un intervallo semver valido.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' contiene una voce '{0}' di 'typesVersions' che corrisponde alla versione '{1}' del compilatore. Verrà cercato un criterio per la corrispondenza con il nome di modulo '{2}'.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' contiene un campo 'typesVersions' con mapping tra percorsi specifici della versione.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "L’ambito package.json '{0}' esegue esplicitamente il mapping dell'identificatore ' {1}' su null.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "L'ambito package.json '{0}' contiene un tipo non valido per la destinazione dell'identificatore '{1}'", + "package_json_scope_0_has_no_imports_defined_6273": "L'ambito package.json '{0}' non ha importazioni definite.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "È specificata l'opzione 'paths'. Verrà cercato un criterio per la corrispondenza con il nome del modulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "'\\q' è disponibile solo all'interno della classe di caratteri.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve essere seguito da stringhe alternative racchiuse tra parentesi graffe.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Il modificatore 'readonly' può essere incluso solo in una dichiarazione di proprietà o una firma dell'indice.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Il modificatore di tipo 'readonly' è consentito solo in tipi di valore letterale matrice e tupla.", + "require_call_may_be_converted_to_an_import_80005": "La chiamata a 'require' può essere convertita in un'importazione.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode' può essere impostata solo per le importazioni di tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' è l'unica chiave valida per l’importazione dei tipi di asserzioni.", + "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve essere 'require' o 'import'.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "L'opzione 'rootDirs' è impostata e verrà usata per risolvere il nome del modulo relativo '{0}'.", + "super_can_only_be_referenced_in_a_derived_class_2335": "È possibile fare riferimento a 'super' solo in una classe derivata.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "È possibile fare riferimento a 'super' solo in membri di classi derivate o espressioni letterali di oggetto.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Non è possibile fare riferimento a 'super' in un nome di proprietà calcolato.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Non è possibile fare riferimento a 'super' in argomenti del costruttore.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' è consentito solo in membri di espressioni letterali di oggetto quando il valore dell'opzione 'target' è 'ES2015' o superiore.", + "super_may_not_use_type_arguments_2754": "'super' non può usare argomenti di tipo.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "È necessario chiamare 'super' prima di accedere a una proprietà di 'super' nel costruttore di una classe derivata.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "È necessario chiamare 'super' prima di accedere a 'this' nel costruttore di una classe derivata.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' deve essere seguito da un elenco di argomento o da un accesso membro.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "L'accesso alla proprietà 'super' è consentito solo in un costruttore, in una funzione membro o in una funzione di accesso di membro di una classe derivata.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Non è possibile fare riferimento a 'this' in un nome di proprietà calcolato.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Non è possibile fare riferimento a 'this' nel corpo di un modulo o di uno spazio dei nomi.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Non è possibile fare riferimento a 'this' in un inizializzatore di proprietà statica.", + "this_cannot_be_referenced_in_current_location_2332": "Non è possibile fare riferimento a 'this' nella posizione corrente.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' contiene implicitamente il tipo 'any' perché non include un'annotazione di tipo.", + "true_for_ES2022_and_above_including_ESNext_6930": "'true' per ES2022 e versioni successive, incluso ESNext.", + "true_if_composite_false_otherwise_6909": "`true` se è `composite`; in caso contrario, `false`", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' è 'node16', 'nodenext' o 'bundler'; in caso contrario, 'false'.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: il compilatore TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", + "type_Colon_6902": "tipo:", + "unique_symbol_types_are_not_allowed_here_1335": "I tipi 'unique symbol' non sono consentiti in questo punto.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "I tipi 'unique symbol' sono consentiti solo nelle variabili in un'istruzione di variabile.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Non è possibile usare i tipi 'unique symbol' in una dichiarazione di variabile con nome di binding.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Non è possibile usare la direttiva 'use strict' con un elenco di parametri non semplice.", + "use_strict_directive_used_here_1349": "In questo punto è stata usata la direttiva 'use strict'.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Le dichiarazioni 'using' non sono consentite nei contesti ambientali.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Le istruzioni 'with' non sono consentite in un blocco di funzione asincrona.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Le istruzioni 'with' non sono consentite in modalità strict.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Con l'espressione 'yield' viene restituito implicitamente un tipo 'any' perché per il generatore che lo contiene non è presente un'annotazione di tipo restituito.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Non è possibile usare le espressioni 'yield' in un inizializzatore di parametri." +} diff --git a/tsc/internal/diagnostics/loc/ja-JP.generated.json b/tsc/internal/diagnostics/loc/ja-JP.generated.json index 5c310cce905b1..f6a1c4bdb0554 100644 --- a/tsc/internal/diagnostics/loc/ja-JP.generated.json +++ b/tsc/internal/diagnostics/loc/ja-JP.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "すべてのコンパイラ オプション", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾子とインポート宣言は同時に使用できません。", - "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' パラメーターは最初のパラメーターである必要があります。", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' タグが '@typedef'、'@callback'、または '@overload' タグの後にない可能性があります", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' コメントに複数の '@type' タグを含めることはできません。", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' リテラルをプロパティ名として使用することはできません。", - "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint リテラルでは指数表記を使用できません。", - "A_bigint_literal_must_be_an_integer_1353": "bigint リテラルは整数である必要があります。", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "実装シグネチャでバインド パターン パラメーターを省略可能にすることはできません。", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' ステートメントは外側のイテレーションまたは switch ステートメント内でのみ使用できます。", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' ステートメントは、外側のステートメントのラベルにのみ移動できます。", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "予約された二重句読点を文字クラスに含めることはできません。バックスラッシュを使用してエスケープするつもりでしたか?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "文字クラスの範囲を別の文字クラスでバインドすることはできません。", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "クラスで実装できるのは、オプションの型引数を指定した識別子/完全修飾名のみです。", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "クラスで実装できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "クラスが '{0}' のようなプリミティブ型を拡張することはできません。クラスは、コンストラクト可能な値のみを拡張できます。", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "クラスが '{0}' のようなプリミティブ型を実装することはできません。実装できるのは、その他の名前付きオブジェクト型のみです。", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' の修飾子がないクラス宣言には名前が必要です。", - "A_class_member_cannot_have_the_0_keyword_1248": "クラス メンバーに '{0}' キーワードを指定することはできません。", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "コンマ式は計算されたプロパティ名では使用できません。", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算されたプロパティ名は、型パラメーターをそれを含む型から参照することはできません。", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "クラス プロパティ宣言内の計算されたプロパティ名には、単純なリテラル型または 'unique symbol' 型が必要です。", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "メソッド オーバーロード内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "型リテラル内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境コンテキスト内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "インターフェイス内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "計算されたプロパティ名は 'string' 型、'number' 型、'symbol' 型、または 'any' 型のいずれかでなければなりません。", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' アサーションは、列挙型メンバーへの参照、または文字列、数値、ブール値、配列、オブジェクト リテラルへの参照にのみ適用できます。", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const 列挙型メンバーは、文字列リテラルを使用してのみアクセスできます。", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "環境コンテキストの 'const' 初期化子は、文字列または数値リテラル、もしくはリテラル列挙型の参照である必要があります。", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "コンストラクターのクラスが 'null' を拡張する場合、そのコンストラクターに 'super' の呼び出しを含めることはできません。", - "A_constructor_cannot_have_a_this_parameter_2681": "コンストラクターに 'this' パラメーターを指定することはできません。", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' ステートメントは外側のイテレーション内でのみ使用できます。", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' ステートメントは、外側のイテレーション ステートメントのラベルにのみ移動できます。", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "宣言ファイルを 'import type' なしでインポートすることはできません。代わりに実装ファイルト '{0}' をインポートするつもりでしたか?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 修飾子は、環境コンテキストでは使用できません。", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "デコレーターが装飾できるのは、オーバーロードではなく、メソッドの実装のみです。", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 句を 'switch' ステートメントで複数回使用することはできません。", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "既定のエクスポートは、ECMAScript スタイルのモジュールでのみ使用できます。", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "既定のエクスポートは、ファイルまたはモジュールの宣言のトップレベルにある必要があります。", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "限定代入アサーション '!' は、このコンテキストで許可されていません。", - "A_destructuring_declaration_must_have_an_initializer_1182": "非構造化宣言には初期化子が必要です。", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動的インポート呼び出しは 'Promise' を返します。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることをご確認ください。", - "A_file_cannot_have_a_reference_to_itself_1006": "ファイルにそれ自体への参照を含めることはできません。", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' を返す関数には、到達可能なエンド ポイントがありません。", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' キーワードで呼び出される関数に、'void' である 'this' 型を使用することはできません。", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "宣言された型が 'undefined'、'void'、または 'any' でない関数は、値を返す必要があります。", - "A_generator_cannot_have_a_void_type_annotation_2505": "ジェネレーターに 'void' 型の注釈を指定することはできません。", - "A_get_accessor_cannot_have_parameters_1054": "'get' アクセサーにパラメーターを指定することはできません。", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get アクセサーは、少なくともセッターと同程度にアクセス可能である必要があります", - "A_get_accessor_must_return_a_value_2378": "'get' アクセサーは値を返す必要があります。", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "ラベル付きのタプル要素を optional として宣言するには、型の後ではなく名前の後とコロンの前に疑問符を付けます。", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "ラベル付きのタプル要素を rest として宣言するには、型の前ではなく名前の前に '...' を付けます。", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "マップされた型では、プロパティまたはメソッドを宣言しない場合があります。", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列挙型宣言のメンバー初期化子は、他の列挙型で定義されたメンバーを含め、その後で宣言されたメンバーを参照できません。", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin クラスには、型 'any[]' の単一の rest パラメーターを持つコンストラクターが必要です。", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "抽象コンストラクト シグネチャを含む型変数から拡張される mixin クラスも、'abstract' として宣言する必要があります。", - "A_module_cannot_have_multiple_default_exports_2528": "モジュールに複数の既定のエクスポートを含めることはできません。", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "名前空間宣言は、それとマージするクラスや関数と異なるファイルに配置できません。", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "名前空間宣言は、それとマージするクラスや関数より前に配置できません。", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "名前空間宣言は、名前空間またはモジュールの最上位レベルでのみ許可されます。", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'namespace' 宣言を 'module' キーワードを使用して宣言することはできません。代わりに 'namespace' キーワードを使用してください。", - "A_non_dry_build_would_build_project_0_6357": "非 -dry ビルドを実行した場合、プロジェクト '{0}' がビルドされます", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry ビルドを実行した場合、次のファイルが削除されます: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "non-dry build では、プロジェクト '{0}' の出力のタイムスタンプが更新されます", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "パラメーター初期化子は、関数またはコンストラクターの実装でのみ指定できます。", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "パラメーター プロパティは、rest パラメーターを使用して宣言することはできません。", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "パラメーター プロパティは、コンストラクターの実装でのみ指定できます。", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "パラメーター プロパティは、バインド パターンを使用して宣言することはできません。", - "A_promise_must_have_a_then_method_1059": "Promise には 'then' メソッドが必要です。", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "型が 'unique symbol' 型のクラスのプロパティは、'static' と 'readonly' の両方である必要があります。", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "型が 'unique symbol' 型のインターフェイスまたは型リテラルのプロパティは、'readonly' である必要があります。", - "A_required_element_cannot_follow_an_optional_element_1257": "必須要素を省略可能な要素の後に指定することはできません。", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必須パラメーターを省略可能なパラメーターの後に指定することはできません。", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 要素にバインド パターンを含めることはできません。", - "A_rest_element_cannot_follow_another_rest_element_1265": "rest 要素を別の rest 要素の後に指定することはできません。", - "A_rest_element_cannot_have_a_property_name_2566": "rest 要素にプロパティ名を指定することはできません。", - "A_rest_element_cannot_have_an_initializer_1186": "rest 要素に初期化子を指定することはできません。", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 要素は非構造化パターンの最後に指定する必要があります。", - "A_rest_element_type_must_be_an_array_type_2574": "rest 要素型は配列型である必要があります。", - "A_rest_parameter_cannot_be_optional_1047": "rest パラメーターを省略可能にすることはできません。", - "A_rest_parameter_cannot_have_an_initializer_1048": "rest パラメーターに初期化子を指定することはできません。", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest パラメーターはパラメーター リストの最後に指定する必要があります。", - "A_rest_parameter_must_be_of_an_array_type_2370": "rest パラメーターは配列型でなければなりません。", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest パラメーターまたはバインド パターンに末尾のコンマがない可能性があります。", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' ステートメントは、関数本体でのみ使用できます。", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' ステートメントの使用が無効です。クラスの静的ブロック内では使用できません。", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "'baseUrl' の相対的な場所を検索するためにインポートを再マップする一連のエントリ。", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' アクセサーに、戻り値の型の注釈を指定することはできません。", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' アクセサーに、省略可能パラメーターを指定することはできません。", - "A_set_accessor_cannot_have_rest_parameter_1053": "'set' アクセサーに rest パラメーターを指定することはできません。", - "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' アクセサーにはパラメーターを 1 つだけ指定しなければなりません。", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' アクセサーのパラメーターに初期化子を含めることはできません。", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "spread 引数には、組の種類を指定するか、rest パラメーターに渡す必要があります。", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子が派生クラスに含まれている場合は、コンストラクターのルートレベルのステートメントである必要があります。", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子が派生クラスに含まれている場合は、'super' や 'this' を参照するコンストラクターの最初のステートメントである必要があります。", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' ベース型のガードはパラメーター ベース型のガードとは互換性がありません。", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 型はクラスまたはインターフェイスの静的でないメンバーでのみ使用できます。", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' が有効である場合、CommonJS モジュール内の値宣言でトップレベルの 'export' 修飾子を使用することはできません。", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' ファイルは既に '{0}' で定義されています。", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "タプル メンバーを optional と rest の両方に指定することはできません。", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "タプル型に負の値のインデックスを指定することはできません。", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "累乗式の左辺で型アサーション式を使用することはできません。式を括弧で囲むことを検討してください。", - "A_type_literal_property_cannot_have_an_initializer_1247": "型リテラル プロパティに初期化子を使用することはできません。", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "型のみのインポートでは既定のインポートまたは名前付きバインドを指定できますが、両方を指定することはできません。", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "型の述語は rest パラメーターを参照できません。", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "型の述語は、バインド パターン内の要素 '{0}' を参照できません。", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "型の述語は、関数およびメソッドの戻り値の型の位置でのみ使用できます。", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "type 述語の型はそのパラメーターの型に割り当て可能である必要があります。", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "'isolatedModules' と 'emitDecoratorMetadata' が有効になっている場合は、装飾された署名で参照される型を 'import type' または名前空間インポートでインポートする必要があります。", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "型が 'unique symbol' 型の変数は、'const' である必要があります。", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 式は、ジェネレーター本文でのみ使用できます。", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "クラス '{1}' の抽象メソッド '{0}' には super 式を介してアクセスできません。", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象メソッドは抽象クラス内でのみ使用できます。", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象プロパティは抽象クラス内でのみ使用できます。", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "コンストラクター内でクラス '{1}' の抽象プロパティ '{0}' にアクセスできません。", - "Accessibility_modifier_already_seen_1028": "アクセシビリティ修飾子は既に存在します。", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "アクセサーは ECMAScript 5 以上をターゲットにする場合にのみ使用できます。", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "アクセサーはどちらも抽象または非抽象である必要があります。", - "Add_0_to_unresolved_variable_90008": "'{0}' を未解決の変数に追加します", - "Add_a_return_statement_95111": "return ステートメントを追加する", - "Add_a_return_type_to_the_function_declaration_9031": "関数宣言に戻り値の型を追加してください。", - "Add_a_return_type_to_the_function_expression_9030": "関数式に戻り値の型を追加してください。", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "get アクセサー宣言に戻り値の型を追加してください。", - "Add_a_return_type_to_the_method_9034": "メソッドに戻り値の型を追加してください", - "Add_a_type_annotation_to_the_parameter_0_9028": "パラメーター {0} に型注釈を追加してください。", - "Add_a_type_annotation_to_the_property_0_9029": "プロパティ {0} に型注釈を追加してください。", - "Add_a_type_annotation_to_the_variable_0_9027": "変数 {0} に型注釈を追加してください。", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set アクセサー宣言のパラメーターに型を追加してください。", - "Add_all_missing_async_modifiers_95041": "不足しているすべての 'async' 修飾子を追加します", - "Add_all_missing_attributes_95168": "不足しているすべての属性を追加する", - "Add_all_missing_call_parentheses_95068": "見つからない呼び出しのかっこをすべて追加します", - "Add_all_missing_function_declarations_95157": "不足しているすべての関数宣言を追加します", - "Add_all_missing_imports_95064": "不足しているすべてのインポートを追加する", - "Add_all_missing_members_95022": "不足しているすべてのメンバーを追加します", - "Add_all_missing_override_modifiers_95162": "不足しているすべての 'override' 修飾子を追加する", - "Add_all_missing_parameters_95190": "不足しているすべてのプロパティを追加してください", - "Add_all_missing_properties_95166": "不足しているすべてのプロパティを追加する", - "Add_all_missing_return_statement_95114": "不足しているすべての return ステートメントを追加する", - "Add_all_missing_super_calls_95039": "不足しているすべての super の呼び出しを追加します", - "Add_all_missing_type_annotations_90067": "不足しているすべての型注釈を追加してください", - "Add_all_optional_parameters_95193": "すべてのオプション パラメーターを追加してください", - "Add_annotation_of_type_0_90062": "型 '{0}' の注釈を追加してください", - "Add_async_modifier_to_containing_function_90029": "含まれている関数に async 修飾子を追加します", - "Add_await_95083": "'await' を追加する", - "Add_await_to_initializer_for_0_95084": "'{0}' の初期化子に 'await' を追加する", - "Add_await_to_initializers_95089": "初期化子に 'await' を追加する", - "Add_braces_to_arrow_function_95059": "アロー関数に中かっこを追加します", - "Add_const_to_all_unresolved_variables_95082": "すべての未解決の変数に 'const' を追加する", - "Add_const_to_unresolved_variable_95081": "未解決の変数に 'const' を追加する", - "Add_definite_assignment_assertion_to_property_0_95020": "プロパティ '{0}' に限定代入アサーションを追加します", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "初期化されていないすべてのプロパティに限定代入アサーションを追加します", - "Add_export_to_make_this_file_into_a_module_95097": "'export {}' を追加して、このファイルをモジュールにする", - "Add_extends_constraint_2211": "'extends' 制約を追加します。", - "Add_extends_constraint_to_all_type_parameters_2212": "すべての型パラメーターに 'extends' 制約を追加する", - "Add_import_from_0_90057": "\"{0}\" からのインポートの追加", - "Add_index_signature_for_property_0_90017": "プロパティ '{0}' のインデックス シグネチャを追加する", - "Add_initializer_to_property_0_95019": "プロパティ '{0}' に初期化子を追加します", - "Add_initializers_to_all_uninitialized_properties_95027": "初期化されていないすべてのプロパティに初期化子を追加します", - "Add_missing_attributes_95167": "不足している属性の追加", - "Add_missing_call_parentheses_95067": "見つからない呼び出しのかっこを追加します", - "Add_missing_comma_for_object_member_completion_0_95187": "オブジェクト メンバー補完 '{0}' に不足しているコンマを追加してください。", - "Add_missing_enum_member_0_95063": "不足している列挙型メンバー '{0}' を追加する", - "Add_missing_function_declaration_0_95156": "不足している関数宣言 '{0}' を追加します", - "Add_missing_new_operator_to_all_calls_95072": "不足している 'new' 演算子をすべての呼び出しに追加する", - "Add_missing_new_operator_to_call_95071": "不足している 'new' 演算子を呼び出しに追加する", - "Add_missing_parameter_to_0_95188": "'{0}' に不足しているパラメーターを追加してください", - "Add_missing_parameters_to_0_95189": "'{0}' に不足しているパラメーターを追加してください", - "Add_missing_properties_95165": "不足しているすべてのプロパティの追加", - "Add_missing_super_call_90001": "欠落している 'super()' 呼び出しを追加する", - "Add_missing_typeof_95052": "不足している 'typeof' を追加します", - "Add_names_to_all_parameters_without_names_95073": "名前のないすべてのパラメーターに名前を追加する", - "Add_optional_parameter_to_0_95191": "オプション パラメーターを '{0}' に追加してください", - "Add_optional_parameters_to_0_95192": "省略可能なパラメーターを '{0}' に追加する", - "Add_or_remove_braces_in_an_arrow_function_95058": "アロー関数内の中かっこを追加または削除します", - "Add_override_modifier_95160": "'override' 修飾子を追加する", - "Add_parameter_name_90034": "パラメーター名を追加する", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "メンバー名と一致するすべての未解決の変数に修飾子を追加します", - "Add_resolution_mode_import_attribute_95196": "'resolution-mode' インポート属性を追加する", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "'resolution-mode' インポート属性を、必要とするすべての型のみのインポートに追加する", - "Add_return_type_0_90063": "戻り値の型 '{0}' を追加してください", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "型を明示的にするには、この式に satisfies と型アサーションを追加してください (satisfies T as T)。", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}' を使用して satisfies とインライン型のアサーションを追加してください", - "Add_to_all_uncalled_decorators_95044": "呼び出されていないすべてのデコレーターに '()' を追加します", - "Add_ts_ignore_to_all_error_messages_95042": "すべてのエラー メッセージに '@ts-ignore' を追加します", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "インデックスを使用してアクセスした場合は、'undefined' を型に追加します。", - "Add_undefined_to_optional_property_type_95169": "省略可能なプロパティ型に 'undefined' を追加します", - "Add_undefined_type_to_all_uninitialized_properties_95029": "初期化されていないすべてのプロパティに未定義の型を追加します", - "Add_undefined_type_to_property_0_95018": "プロパティ '{0}' に '未定義' の型を追加します", - "Add_unknown_conversion_for_non_overlapping_types_95069": "重複していない型に対して 'unknown' 変換を追加する", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "重複していない型のすべての変換に 'unknown' を追加する", - "Add_void_to_Promise_resolved_without_a_value_95143": "値なしで解決された Promise に 'void' を追加します", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "値なしで解決されたすべての Promise に 'void' を追加します", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json ファイルを追加すると、TypeScript ファイルと JavaScript ファイルの両方を含むプロジェクトを整理できます。詳細については、https://aka.ms/tsconfig をご覧ください。", - "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}' のすべての宣言には、同一の制約が必要です。", - "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' のすべての宣言には、同一の修飾子が必要です。", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' のすべての宣言には、同一の型パラメーターがある必要があります。", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象メソッドの宣言はすべて連続している必要があります。", - "All_destructured_elements_are_unused_6198": "非構造化要素はいずれも使用されていません。", - "All_imports_in_import_declaration_are_unused_6192": "インポート宣言内のインポートはすべて未使用です。", - "All_type_parameters_are_unused_6205": "すべての型パラメーターが使用されていません。", - "All_variables_are_unused_6199": "すべての変数は未使用です。", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript ファイルをプログラムの一部として使用することを許可します。'checkJs' オプションを使用して、これらのファイルからエラーを取得してください。", - "Allow_accessing_UMD_globals_from_modules_6602": "モジュールから UMD グローバルへのアクセスを許可します。", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "既定のエクスポートがないモジュールからの既定のインポートを許可します。これは、型チェックのみのため、コード生成には影響を与えません。", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "モジュールに既定のエクスポートがない場合は、'import x from y' を許可します。", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib からヘルパー関数をファイルごとに含めるのではなく、プロジェクトごとに 1 回インポートすることを許可します。", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "TypeScript ファイル拡張子を含めるインポートを許可してください。'--moduleResolution bundler' と '--noEmit' または '--emitDeclarationOnly' のいずれかを設定する必要があります。", - "Allow_javascript_files_to_be_compiled_6102": "javascript ファイルのコンパイルを許可します。", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "モジュールを解決するときに複数のフォルダーを 1 つのフォルダーとして処理することを許可します。", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "既に含まれているファイル名 '{0}' は、ファイル名 '{1}' と大文字と小文字の指定だけが異なります。", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "アンビエント モジュール宣言では、相対モジュール名を指定できません。", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "アンビエント モジュールを、他のモジュールまたは名前空間内の入れ子にすることはできません。", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD モジュールに複数の名前を代入することはできません。", - "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象アクセサーに実装を含めることはできません。", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "アクセシビリティ修飾子を private 識別子と共に使用することはできません。", - "An_accessor_cannot_have_type_parameters_1094": "アクセサーに型パラメーターを指定することはできません。", - "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' プロパティはオプションとして宣言できません。", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "アンビエント モジュール宣言は、ファイルの最上位にのみ使用できます。", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "'{0}' の引数が指定されていません。", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "このバインド パターンに一致する引数が指定されていません。", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術オペランドは 'any' 型、'number' 型、’bigint' 型、列挙型のいずれかである必要があります。", - "An_arrow_function_cannot_have_a_this_parameter_2730": "アロー関数に 'this' パラメーターを指定することはできません。", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同期関数またはメソッドは 'Promise' を返す必要があります。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることを確認してください。", - "An_async_iterator_must_have_a_next_method_2519": "非同期反復子には 'next()' メソッドが必要です。", - "An_element_access_expression_should_take_an_argument_1011": "要素アクセス式では、引数を取る必要があります。", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "private 識別子を使用して列挙型メンバーに名前を付けることはできません。", - "An_enum_member_cannot_have_a_numeric_name_2452": "列挙型メンバーに数値名を含めることはできません。", - "An_enum_member_name_must_be_followed_by_a_or_1357": "列挙型メンバー名の後には、','、'='、'}' のいずれかを指定する必要があります。", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "使用可能なすべてのコンパイラ オプションを示す、この情報の拡張バージョン", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "エクスポートの代入は、エクスポートされた他の要素を含むモジュールでは使用できません。", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "エクスポートの代入は、名前空間では使用できません。", - "An_export_assignment_cannot_have_modifiers_1120": "エクスポートの代入に修飾子を指定することはできません。", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "エクスポートの割り当ては、ファイルまたはモジュールの宣言のトップレベルにある必要があります。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "エクスポート宣言は、モジュールの最上位レベルでのみ使用できます。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "エクスポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", - "An_export_declaration_cannot_have_modifiers_1193": "エクスポート宣言に修飾子を指定することはできません。", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax' が有効である場合、 'export =' 宣言は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax' が有効である場合、'export =' 宣言は値を参照する必要がありますが、'{0}' は型のみを参照しています。", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax' が有効である場合、'export default' は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax' が有効である場合、'export default' は値を参照する必要がありますが、'{0}' は型のみを参照しています。", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 型の式は、真実性をテストできません。", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "拡張された Unicode エスケープ値は 0x0 と 0x10FFFF の間 (両端を含む) でなければなりません。", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別子またはキーワードを数値リテラルのすぐ後に指定することはできません。", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "実装は環境コンテキストでは宣言できません。", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "インポート エイリアスは、'export type' を使用してエクスポートされた宣言を参照できません。", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "インポート エイリアスは、'import type' を使用してインポートされた宣言を参照できません。", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax' が有効である場合、インポート エイリアスを型または型のみの宣言に解決することはできません。", - "An_import_alias_cannot_use_import_type_1392": "インポート エイリアスで 'import type' を使用することはできません", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "インポート宣言は、モジュールの最上位レベルでのみ使用できます。", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "インポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", - "An_import_declaration_cannot_have_modifiers_1191": "インポート宣言に修飾子を指定することはできません。", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "'allowImportingTsExtensions' が有効である場合、インポート パスの末尾には '{0}' 拡張子のみを指定できます。", - "An_index_signature_cannot_have_a_rest_parameter_1017": "インデックス シグネチャに rest パラメーターを指定することはできません。", - "An_index_signature_cannot_have_a_trailing_comma_1025": "インデックス シグネチャの末尾にコンマを指定することはできません。", - "An_index_signature_must_have_a_type_annotation_1021": "インデックス シグネチャには型の注釈が必要です。", - "An_index_signature_must_have_exactly_one_parameter_1096": "インデックス シグネチャには、パラメーターを 1 つだけ指定しなければなりません。", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "インデックス シグネチャのパラメーターに疑問符を指定することはできません。", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "インデックス シグネチャのパラメーターにアクセシビリティ修飾子を指定することはできません。", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "インデックス シグネチャのパラメーターに初期化子を指定することはできません。", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "インデックス シグネチャのパラメーターには型の注釈が必要です。", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "インデックス シグネチャ パラメーターの型をリテラル型またはジェネリック型にすることはできません。代わりに、マップされたオブジェクト型の使用を検討してください。", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "インデックス シグネチャ パラメーター型は、'string'、'number'、'symbol'、またはテンプレート リテラルの型である必要があります。", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "インスタンス化式の後にプロパティ アクセスを続けることはできません。", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "インターフェイスが拡張するのは、オプションの型引数が指定された識別子/完全修飾名のみです。", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "インターフェイスが拡張できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "インターフェイスが '{0}' のようなプリミティブ型を拡張することはできません。拡張できるのは、その他の名前付きオブジェクト型のみです。", - "An_interface_property_cannot_have_an_initializer_1246": "インターフェイス プロパティに初期化子を使用することはできません。", - "An_iterator_must_have_a_next_method_2489": "反復子には 'next()' メソッドが必要です。", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma を JSX フラグメントで使用する場合は、@jsxFrag pragma が必要です。", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "オブジェクト リテラルに同じ名前の複数の get/set アクセサーを指定することはできません。", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "オブジェクト リテラルに同じ名前の複数のプロパティを指定することはできません。", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "オブジェクト リテラルには、同じ名前のプロパティおよびアクセサーを指定することはできません。", - "An_object_member_cannot_be_declared_optional_1162": "オブジェクト メンバーを省略可能として宣言することはできません。", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "オブジェクトの '[Symbol.hasInstance]' メソッドを 'instanceof' 式の右側で使用するには、このメソッドがブール値を返す必要があります。", - "An_optional_chain_cannot_contain_private_identifiers_18030": "省略可能なチェーンには、pirvate 識別子を含めることはできません。", - "An_optional_element_cannot_follow_a_rest_element_1266": "省略可能な要素を rest 要素の後に指定することはできません。", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' の外部値がこのコンテナーによってシャドウされています。", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "オーバーロード シグネチャをジェネレーターとして宣言することはできません。", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "累乗式の左辺で '{0}' 演算子を含む単項式を使用することはできません。式を括弧で囲むことを検討してください。", - "Annotate_everything_with_types_from_JSDoc_95043": "すべてに JSDoc の型で注釈を付けます", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "名前空間内のプロパティ expando 関数の型に注釈を付けてください", - "Annotate_with_type_from_JSDoc_95009": "JSDoc の型で注釈を付けます", - "Another_export_default_is_here_2753": "別のエクスポートの既定値がここにあります。", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "複数の文字と一致する可能性のある Unicode プロパティは、Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "複数の文字と一致する可能性のあるものはすべて、負数化された文字クラス内では無効です。", - "Are_you_missing_a_semicolon_2734": "セミコロンを忘れていませんか?", - "Argument_expression_expected_1135": "引数式が必要です。", - "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' オプションの引数は {1} である必要があります。", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "動的インポートの引数にスプレッド要素は指定できません。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "型 '{0}' の引数を型 '{1}' のパラメーターに割り当てることはできません。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "型 '{0}' の引数を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' のパラメーターに割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "rest パラメーター '{0}' の引数が指定されませんでした。", - "Array_element_destructuring_pattern_expected_1181": "配列要素の非構造化パターンが必要です。", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "spread 要素を含む配列を --isolatedDeclarations と共に推論することはできません。", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "アサーションでは、呼び出し先のすべての名前が明示的な型の注釈で宣言されている必要があります。", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "アサーションでは、呼び出し先が識別子または修飾名である必要があります。", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "宣言せずに関数にプロパティを割り当てることは、--isolatedDeclarations ではサポートされていません。この関数に割り当てられたプロパティに明示的な宣言を追加してください。", - "Asterisk_Slash_expected_1010": "'*/' が必要です。", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "少なくとも 1 つのアクセサーに、--isolatedDeclarations を含む明示的な型の注釈が必要です。", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "グローバル スコープの拡張を直接入れ子にできるのは、外部モジュールまたは環境モジュールの宣言内のみです。", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "グローバル スコープの拡張は、環境コンテキストに既にある場合を除いて、'declare' 修飾子を使用する必要があります。", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "プロジェクト '{0}' で型指定の自動検出が有効になっています。キャッシュの場所 '{2}' を使用して、モジュール '{1}' に対して追加の解決パスを実行しています。", - "BUILD_OPTIONS_6919": "ビルド オプション", - "Backwards_Compatibility_6253": "下位互換性", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底クラスの式ではクラスの型パラメーターを参照することはできません。", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底コンストラクターの戻り値の型 '{0}' が、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合ではありません。", - "Base_constructors_must_all_have_the_same_return_type_2510": "既定コンストラクターの戻り値の型は、すべて同じである必要があります。", - "Base_directory_to_resolve_non_absolute_module_names_6083": "相対モジュール名を解決するためのベース ディレクトリ。", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ターゲットが ES2020 未満の場合、bigint リテラルは使用できません。", - "Binary_digit_expected_1177": "2 進の数字が必要です。", - "Binding_element_0_implicitly_has_an_1_type_7031": "バインド要素 '{0}' には暗黙的に '{1}' 型が含まれます。", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "ブロック スコープの変数 '{0}' が、宣言の前に使用されています。", - "Build_a_composite_project_in_the_working_directory_6925": "作業ディレクトリに複合プロジェクトを作成します。", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "最新の状態であると思われるものを含むすべてのプロジェクトをビルドします。", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "最新でない場合は、1 つ以上のプロジェクトとその依存関係をビルドします", - "Build_option_0_requires_a_value_of_type_1_5073": "ビルド オプション '{0}' には型 {1} の値が必要です。", - "Building_project_0_6358": "プロジェクト \"{0}\" をビルドしています...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "組み込みの反復子は、'any' の代わりに 'undefined' の 'TReturn' 型を使用してインスタンス化されます。", - "COMMAND_LINE_FLAGS_6921": "コマンドライン フラグ", - "COMMON_COMMANDS_6916": "一般的なコマンド", - "COMMON_COMPILER_OPTIONS_6920": "一般的なコンパイラ オプション", - "Call_decorator_expression_90028": "デコレーター式を呼び出す", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼び出しシグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "戻り値の型の注釈がない呼び出しシグネチャの戻り値の型は、暗黙的に 'any' になります。", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "引数なしの呼び出しシグネチャに、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。", - "Call_target_does_not_contain_any_signatures_2346": "呼び出しターゲットにシグネチャが含まれていません。", - "Can_only_convert_logical_AND_access_chains_95142": "論理 AND のアクセス チェーンのみを変換できます", - "Can_only_convert_named_export_95164": "名前付きエクスポートのみを変換できます", - "Can_only_convert_property_with_modifier_95137": "修飾子を伴うプロパティの変換のみ可能です", - "Can_only_convert_string_concatenations_and_string_literals_95154": "文字列の連結と文字列リテラルのみを変換できます", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}.{1}' にアクセスできません。'{0}' は型で、名前空間ではありません。'{0}[\"{1}\"]' で '{0}' のプロパティ '{1}' の型を取得するつもりでしたか?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' が有効である場合、修飾しないで別のファイルから '{0}' にアクセスすることはできません。代わりに '{2}' を使用してください。", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' が有効である場合、アンビエント const 列挙型にアクセスすることはできません。", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' コンストラクター型を '{1}' コンストラクター型に割り当てることができません。", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "抽象コンストラクター型を非抽象コンストラクター型に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_a_class_2629": "クラスであるため、'{0}' に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "定数であるため、'{0}' に代入することはできません。", - "Cannot_assign_to_0_because_it_is_a_function_2630": "関数であるため、'{0}' に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "名前空間であるため、'{0}' に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "読み取り専用プロパティであるため、'{0}' に代入することはできません。", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "列挙型であるため、'{0}' に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_an_import_2632": "インポートであるため、'{0}' に割り当てることはできません。", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "変数ではないため、'{0}' に割り当てられません。", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "プライベート メソッド '{0}' に割り当てることはできません。プライベート メソッドは書き込み可能ではありません。", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "モジュール '{0}' は、モジュール以外のエンティティに解決するので拡張できません。", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "モジュール '{0}' は、モジュール以外のエンティティに解決するため、値のエクスポートで拡張できません。", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' フラグが 'amd' か 'system' でない限り、オプション '{0}' を使用してモジュールをコンパイルできません。", - "Cannot_create_an_instance_of_an_abstract_class_2511": "抽象クラスのインスタンスは作成できません。", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "反復子の 'next' メソッドには型 '{1}' が必要なため、値に反復をデリゲートすることはできませんが、含まれるジェネレーターは常に '{0}' を送信します。", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}' をエクスポートできません。モジュールからエクスポートできるのはローカル宣言のみです。", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "クラス '{0}' を拡張できません。Class コンストラクターがプライベートに設定されています。", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "インターフェイス '{0}' を拡張できません。'implements' ですか?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "現在のディレクトリに tsconfig.json ファイルが見つかりません: {0}。", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "指定されたディレクトリに tsconfig.json ファイルが見つかりません: '{0}'。", - "Cannot_find_global_type_0_2318": "グローバル型 '{0}' が見つかりません。", - "Cannot_find_global_value_0_2468": "グローバル値 '{0}' が見つかりません。", - "Cannot_find_lib_definition_for_0_2726": "'{0}' のライブラリ定義が見つかりません。", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' のライブラリ定義が見つかりません。'{1}' ですか?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "モジュール '{0}' が見つかりません。'--resolveJsonModule' を使用して '.json' 拡張子を持つモジュールをインポートすることをご検討ください。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "モジュール '{0}' が見つかりません。'moduleResolution' オプションを 'nodenext' に設定するか、'paths' オプションにエイリアスを追加するつもりでしたか?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "モジュール '{0}' またはそれに対応する型宣言が見つかりません。", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' の副作用インポートに対するモジュールまたは型宣言が見つかりません。", - "Cannot_find_name_0_2304": "名前 '{0}' が見つかりません。", - "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' という名前は見つかりません。'{1}' ですか?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "名前 '{0}' が見つかりません。インスタンス メンバー 'this.{0}' ですか?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "名前 '{0}' が見つかりません。静的メンバー '{1}.{0}' ですか?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "名前 '{0}' が見つかりません。これを非同期関数に書き込むということですか?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{1}' 以降に変更してみてください。", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションが 'dom' を含むように変更してみてください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' をお試しください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' を試してから、tsconfig 内の型フィールドに 'bun' を追加してください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` をお試しください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、tsconfig の型フィールドに 'jest' または 'mocha' を追加してください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` をお試しください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` を試してから、tsconfig の型フィールドに 'jquery' を追加してみてください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` をお試しください。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` を試してから、tsconfig の型フィールドに 'node' を追加してみてください。", - "Cannot_find_namespace_0_2503": "名前空間 '{0}' が見つかりません。", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "'{0}' という名前空間は見つかりません。'{1}' ですか?", - "Cannot_find_parameter_0_1225": "パラメーター '{0}' が見つかりません。", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "入力ファイルの共通サブディレクトリ パスが見つかりません。", - "Cannot_find_type_definition_file_for_0_2688": "'{0}' の型定義ファイルが見つかりません。", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "型宣言ファイルをインポートできません。'{1}' の代わりに '{0}' をインポートすることを検討してください。", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "ブロック スコープ宣言 '{1}' と同じスコープ内の外部スコープ変数 '{0}' を初期化できません。", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "'null' の可能性があるオブジェクトを呼び出すことはできません。", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "'null' または 'undefined' の可能性があるオブジェクトを呼び出すことはできません。", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "'undefined' の可能性があるオブジェクトを呼び出すことはできません。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列の非構造化は常に '{0}' を送信します。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列展開は常に '{0}' を送信します。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、for-of は常に '{0}' を送信します。", - "Cannot_move_statements_to_the_selected_file_95183": "選択したファイルにステートメントを移動できません", - "Cannot_move_to_file_selected_file_is_invalid_95179": "ファイルに移動できません。選択したファイルは無効です", - "Cannot_read_file_0_5083": "ファイル '{0}' を読み取れません。", - "Cannot_read_file_0_Colon_1_5012": "ファイル '{0}' を読み取れません: {1}。", - "Cannot_redeclare_block_scoped_variable_0_2451": "ブロック スコープの変数 '{0}' を再宣言することはできません。", - "Cannot_redeclare_exported_variable_0_2323": "エクスポートされた変数 '{0}' を再び宣言できません。", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 句で識別子 '{0}' を再宣言することはできません。", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "型の注釈で関数呼び出しを開始することはできません。", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' フラグが指定されていないと、JSX を使用できません。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' が有効である場合、型または型のみの名前空間で 'export import' を使用することはできません。", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' が 'none' である場合、インポート、エクスポート、モジュール拡張は使用できません。", - "Cannot_use_namespace_0_as_a_type_2709": "名前空間 '{0}' を型として使用することはできません。", - "Cannot_use_namespace_0_as_a_value_2708": "名前空間 '{0}' を値として使用することはできません。", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "デコレートされたクラスの静的プロパティ初期化子で 'this' を使用できません。", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "ファイル '{0}' は、参照先のプロジェクト '{1}' によって生成された '.tsbuildinfo' ファイルを上書きするため、書き込めません", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "複数の入力ファイルで上書きされることになるため、ファイル '{0}' を書き込めません。", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "入力ファイルを上書きすることになるため、ファイル '{0}' を書き込めません。", - "Catch_clause_variable_cannot_have_an_initializer_1197": "catch 句の変数に初期化子を指定することはできません。", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 句の変数型の注釈を指定する場合は、'any' または 'unknown' にする必要があります。", - "Change_0_to_1_90014": "'{0}' を '{1}' に変更する", - "Change_all_extended_interfaces_to_implements_95038": "拡張されたすべてのインターフェイスを 'implements' に変更します", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "jsdoc スタイルのすべての型を TypeScript に変更します", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "jsdoc スタイルのすべての型を TypeScript に変更します (さらに、'| undefined' を null 許容型に追加します)", - "Change_extends_to_implements_90003": "'extends' を 'implements' に変更する", - "Change_spelling_to_0_90022": "スペルを '{0}' に変更する", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "宣言されているものの、コンストラクターで設定されていないクラス プロパティを確認します。", - "Check_side_effect_imports_6806": "副作用のインポートを確認してください。", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind'、'call'、'apply' のメソッドの引数が元の関数と一致することを確認します。", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' が '{1}' - '{2}' の最長一致のプレフィックスであるかを確認しています。", - "Circular_definition_of_import_alias_0_2303": "インポート エイリアス '{0}' の循環定義です。", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "構成: {0} の解決中に循環が検出されました", - "Circularity_originates_in_type_at_this_location_2751": "この位置の型で循環が発生しています。", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "クラス '{0}' で定義されたインスタンス メンバー アクセサー '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー関数として定義されています。", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "クラス '{0}' で定義されたインスタンス メンバー関数 '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー アクセサーとして定義されています。", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "クラス '{0}' で定義されたインスタンス メンバー プロパティ '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー関数として定義されています。", - "Class_0_incorrectly_extends_base_class_1_2415": "クラス '{0}' は基底クラス '{1}' を正しく拡張していません。", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "クラス '{0}' はクラス '{1}' を正しく実装していません。'{1}' を拡張し、そのメンバーをサブクラスとして継承しますか?", - "Class_0_incorrectly_implements_interface_1_2420": "クラス '{0}' はインターフェイス '{1}' を正しく実装していません。", - "Class_0_used_before_its_declaration_2449": "クラス '{0}' は宣言の前に使用されました。", - "Class_constructor_may_not_be_a_generator_1368": "クラス コンストラクターをジェネレーターにすることはできません。", - "Class_constructor_may_not_be_an_accessor_1341": "クラス コンストラクターをアクセサーにすることはできません。", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "クラスの宣言では '{0}' のオーバーロード リストを実装できません。", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラスの宣言で複数の '@augments' または '@extends' タグを含めることはできません。", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "クラス デコレーターは、静的プライベート識別子と共に使用することはできません。試験段階のデコレーターを削除することをご検討ください。", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "親クラスによって定義されたクラス フィールド '{0}' は、super を介して子クラスでアクセスすることはできません。", - "Class_name_cannot_be_0_2414": "クラス名を '{0}' にすることはできません。", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "モジュール {0} で ES5 以降を対象とする場合、クラス名を 'Object' にすることはできません。", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "クラス側の静的な '{0}' が基底クラス側の静的な '{1}' を正しく拡張していません。", - "Classes_can_only_extend_a_single_class_1174": "クラスで拡張できるクラスは 1 つのみです。", - "Classes_may_not_have_a_field_named_constructor_18006": "クラスに 'constructor' という名前のフィールドを含めることはできません。", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "クラスに含まれるコードは JavaScript の厳格モードで評価されます。このモードでは、'{0}' の使用は許可されません。詳細については、「https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode」を参照してください。", - "Command_line_Options_6171": "コマンド ライン オプション", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "構成ファイルか、'tsconfig.json' を含むフォルダーにパスが指定されたプロジェクトをコンパイルします。", - "Compiler_Diagnostics_6251": "コンパイラの診断", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "コンパイラ オプション '{0}' に空の文字列を指定することはできません。", - "Compiler_option_0_expects_an_argument_6044": "コンパイラ オプション '{0}' には引数が必要です。", - "Compiler_option_0_may_not_be_used_with_build_5094": "コンパイラオプション '--{0} ' は '--build ' と共に使用できない場合があります。", - "Compiler_option_0_may_only_be_used_with_build_5093": "コンパイラ オプション '--{0} ' は '--build ' とのみ使用できる場合があります。", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "値 '{1}' のコンパイラ オプション '{0}' が不安定です。夜間 TypeScript を使用して、このエラーを無効にします。'npm install -D typescript@next' を使用して更新してみてください。", - "Compiler_option_0_requires_a_value_of_type_1_5024": "コンパイラ オプション '{0}' には {1} の型の値が必要です。", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "private 識別子を下位レベルに生成するときに、コンパイラは名前 '{0}' を予約します。", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "指定されたパスにある TypeScript プロジェクトをコンパイルします。", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "現在のプロジェクト (作業ディレクトリ内の tsconfig.json) のコンパイル", - "Compiles_the_current_project_with_additional_settings_6929": "追加の設定を使用して、現在のプロジェクトをコンパイルします。", - "Completeness_6257": "完全", - "Composite_projects_may_not_disable_declaration_emit_6304": "複合プロジェクトで宣言の生成を無効にすることはできません。", - "Composite_projects_may_not_disable_incremental_compilation_6379": "複合プロジェクトではインクリメンタル コンパイルを無効にできません。", - "Computed_from_the_list_of_input_files_6911": "入力ファイルのリストから計算されます。", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算されるプロパティは、数値または文字列リテラル、変数、または --isolatedDeclarations を含むドット付き式である必要があります。", - "Computed_property_names_are_not_allowed_in_enums_1164": "計算されたプロパティ名は列挙型では使用できません。", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "クラスまたはオブジェクト リテラル上の計算されたプロパティ名を --isolatedDeclarations と共に推論することはできません。", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "文字列値のメンバーを持つ列挙型では、計算値は許可されません。", - "Concatenate_and_emit_output_to_single_file_6001": "出力を連結して 1 つのファイルを生成します。", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "インポートを解決するときに、リゾルバー固有の既定値に加えて設定する条件です。", - "Conflicts_are_in_this_file_6201": "このファイル内に競合があります。", - "Consider_adding_a_declare_modifier_to_this_class_6506": "このクラスに 'declare' 修飾子を追加することを検討してください。", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "コンストラクト シグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "戻り値の型の注釈がないコンストラクト シグネチャの戻り値の型は、暗黙的に 'any' になります。", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "引数のないコンストラクト シグネチャには、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。", - "Constructor_implementation_is_missing_2390": "コンストラクターの実装がありません。", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "クラス '{0}' のコンストラクターはプライベートであり、クラス宣言内でのみアクセス可能です。", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "クラス '{0}' のコンストラクターは保護されており、クラス宣言内でのみアクセス可能です。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "共用体型で使用する場合、コンストラクターの型の表記はかっこで囲む必要があります。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "交差型で使用する場合、コンストラクターの型の表記はかっこで囲む必要があります。", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生クラスのコンストラクターには 'super' の呼び出しを含める必要があります。", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "包含するファイルが指定されていないため、ルート ディレクトリを決定できません。'node_modules' フォルダーのルックアップをスキップします。", - "Containing_function_is_not_an_arrow_function_95128": "含まれている関数はアロー関数ではありません", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "モジュール形式の JS ファイルを検出するために使用するメソッドを制御します。", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "型 '{0}' から型 '{1}' への変換は、互いに十分に重複できないため間違っている可能性があります。意図的にそうする場合は、まず式を 'unknown' に変換してください。", - "Convert_0_to_1_in_0_95003": "'{0}' を '{0} の {1}' に変換します", - "Convert_0_to_mapped_object_type_95055": "'{0}' をマップされたオブジェクト型に変換する", - "Convert_all_const_to_let_95102": "すべての 'const' を 'let' に変換する", - "Convert_all_constructor_functions_to_classes_95045": "すべてのコンストラクター関数をクラスに変換します", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "すべての無効な文字を HTML エンティティ コードに変換する", - "Convert_all_re_exported_types_to_type_only_exports_1365": "すべての再エクスポートされた型を、型のみのエクスポートに変換する", - "Convert_all_require_to_import_95048": "'require' をすべて 'import' に変換", - "Convert_all_to_async_functions_95066": "すべてを非同期関数に変換する", - "Convert_all_to_bigint_numeric_literals_95092": "すべてを bigint 数値リテラルに変換する", - "Convert_all_to_default_imports_95035": "すべてを既定のインポートに変換します", - "Convert_all_type_literals_to_mapped_type_95021": "すべての型リテラルをマップされた型に変換します", - "Convert_all_typedef_to_TypeScript_types_95177": "すべての typedef を TypeScript 型に変換してください。", - "Convert_arrow_function_or_function_expression_95122": "アロー関数または関数式を変換する", - "Convert_const_to_let_95093": "'const' を 'let' に変換する", - "Convert_default_export_to_named_export_95061": "既定のエクスポートを名前付きエクスポートに変換する", - "Convert_function_declaration_0_to_arrow_function_95106": "関数宣言 '{0}' をアロー関数に変換する", - "Convert_function_expression_0_to_arrow_function_95105": "関数の式 '{0}' をアロー関数に変換する", - "Convert_function_to_an_ES2015_class_95001": "関数を ES2015 クラスに変換します", - "Convert_invalid_character_to_its_html_entity_code_95100": "無効な文字をその html エンティティ コードに変換する", - "Convert_named_export_to_default_export_95062": "名前付きエクスポートを既定のエクスポートに変換する", - "Convert_named_imports_to_default_import_95170": "名前付きインポートを既定のインポートに変換する", - "Convert_named_imports_to_namespace_import_95057": "名前付きインポートを名前空間インポートに変換します", - "Convert_namespace_import_to_named_imports_95056": "名前空間インポートを名前付きインポートに変換します", - "Convert_overload_list_to_single_signature_95118": "オーバーロード リストを単一のシグネチャに変換する", - "Convert_parameters_to_destructured_object_95075": "パラメーターを非構造化オブジェクトに変換する", - "Convert_require_to_import_95047": "'require' を 'import' に変換", - "Convert_to_ES_module_95017": "ES モジュールに変換する", - "Convert_to_a_bigint_numeric_literal_95091": "bigint 数値リテラルに変換する", - "Convert_to_anonymous_function_95123": "匿名関数に変換する", - "Convert_to_arrow_function_95125": "アロー関数に変換する", - "Convert_to_async_function_95065": "非同期関数に変換する", - "Convert_to_default_import_95013": "既定のインポートに変換する", - "Convert_to_named_function_95124": "名前付き関数に変換する", - "Convert_to_optional_chain_expression_95139": "オプションのチェーン式に変換します", - "Convert_to_template_string_95096": "テンプレート文字列に変換する", - "Convert_to_type_only_export_1364": "型のみのエクスポートに変換する", - "Convert_typedef_to_TypeScript_type_95176": "typedef を TypeScript 型に変換してください。", - "Corrupted_locale_file_0_6051": "ロケール ファイル {0} は破損しています。", - "Could_not_convert_to_anonymous_function_95153": "匿名関数に変換できませんでした", - "Could_not_convert_to_arrow_function_95151": "アロー関数に変換できませんでした", - "Could_not_convert_to_named_function_95152": "名前付き関数に変換できませんでした", - "Could_not_determine_function_return_type_95150": "関数の戻り値の型を特定できませんでした", - "Could_not_find_a_containing_arrow_function_95127": "含まれているアロー関数が見つかりませんでした", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "モジュール '{0}' の宣言ファイルが見つかりませんでした。'{1}' は暗黙的に 'any' 型になります。", - "Could_not_find_convertible_access_expression_95140": "変換可能なアクセス式が見つかりませんでした", - "Could_not_find_export_statement_95129": "export ステートメントが見つかりませんでした", - "Could_not_find_import_clause_95131": "インポート句が見つかりませんでした", - "Could_not_find_matching_access_expressions_95141": "一致するアクセス式が見つかりませんでした", - "Could_not_find_name_0_Did_you_mean_1_2570": "名前 '{0}' が見つかりませんでした。'{1}' ですか?", - "Could_not_find_namespace_import_or_named_imports_95132": "名前空間のインポートまたは名前付きインポートが見つかりませんでした", - "Could_not_find_property_for_which_to_generate_accessor_95135": "アクセサーを生成するプロパティが見つかりませんでした", - "Could_not_find_variable_to_inline_95185": "インライン化する変数が見つかりませんでした。", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "次の拡張子を持つパス '{0}' を解決できませんでした: {1}。", - "Could_not_write_file_0_Colon_1_5033": "ファイル '{0}' を書き込めませんでした: '{1}'。", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "生成された JavaScript ファイルのソース マップ ファイルを作成します。", - "Create_sourcemaps_for_d_ts_files_6614": "d.ts ファイルのソースマップを作成します。", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "作業ディレクトリの推奨設定を使用して tsconfig.json を作成します。", - "DIRECTORY_6038": "ディレクトリ", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "文字クラスでは、10 進数のエスケープ シーケンスと前方参照を使用することはできません。", - "Decimals_with_leading_zeros_are_not_allowed_1489": "先頭が 0 の 10 進数を使用することはできません。", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "この宣言は別のファイル内の宣言を拡張します。この操作はシリアル化できません。", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "このファイルの宣言を生成するには、拡張のためにこのインポートを保持する必要があります。これは --isolatedDeclarations ではサポートされていません。", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "このファイルの宣言の生成では、プライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "このファイルの宣言の生成では、モジュール '{1}' からのプライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "このパラメーターの宣言を生成するには、その型に未定義の値を暗黙的に追加する必要があります。これは --isolatedDeclarations ではサポートされていません。", - "Declaration_expected_1146": "宣言が必要です。", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣言名が組み込みのグローバル識別子 '{0}' と競合しています。", - "Declaration_or_statement_expected_1128": "宣言またはステートメントが必要です。", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "宣言またはステートメントが必要です。この '=' はステートメントのブロックに続くため、非構造化割り当てを作成する場合は、割り当て全体をかっこで囲む必要があります。", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "明確な代入アサーションを使った宣言には、型の注釈も指定する必要があります。", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "初期化子を使った宣言に明確な代入アサーションを含めることはできません。", - "Declare_a_private_field_named_0_90053": "'{0}' という名前のプライベート フィールドを宣言します。", - "Declare_method_0_90023": "メソッド '{0}' を宣言する", - "Declare_private_method_0_90038": "プライベート メソッド '{0}' を宣言する", - "Declare_private_property_0_90035": "プライベート プロパティ '{0}' を宣言します", - "Declare_property_0_90016": "プロパティ '{0}' を宣言する", - "Declare_static_method_0_90024": "静的メソッド '{0}' を宣言する", - "Declare_static_property_0_90027": "静的プロパティ '{0}' を宣言する", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "デコレーター関数の戻り値の型 '{0}' は、型 '{1}' に割り当てられません。", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "デコレーター関数の戻り値の型は '{0}' ですが、\"void\" または \"any\" である必要があります。", - "Decorator_used_before_export_here_1486": "ここで 'export' の前にデコレーターが使用されています。", - "Decorators_are_not_valid_here_1206": "デコレーターはここでは無効です。", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "デコレーターを同じ名前の複数の get/set アクセサーに適用することはできません。", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "デコレーターが 'export' の前に使用されている場合は、'export' または 'export default' の後にデコレーターを使用することはできません。", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "デコレーターは、プロパティ宣言の名前とすべてのキーワードの前に置く必要があります。", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "既定の catch 句の変数は '任意' ではなく '不明' です。", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "モジュールの既定エクスポートがプライベート名 '{0}' を持っているか、使用しています。", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "既定のエクスポートを --isolatedDeclarations と共に推論することはできません。", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "遅延インポートでは、既定のインポートは許可されません。", - "Default_library_1424": "既定のライブラリ", - "Default_library_for_target_0_1425": "ターゲット '{0}' の既定のライブラリ", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "遅延インポートは、'--module' フラグが 'esnext' または 'preserve' に設定されている場合にのみサポートされます。", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "次の識別子の定義が、別のファイル内の定義と競合しています: {0}", - "Delete_all_unused_declarations_95024": "未使用の宣言をすべて削除します", - "Delete_all_unused_imports_95147": "未使用の import をすべて削除します", - "Delete_all_unused_param_tags_95172": "未使用の '@param' タグをすべて削除します", - "Delete_the_outputs_of_all_projects_6365": "すべてのプロジェクトの出力を削除します。", - "Delete_unused_param_tag_0_95171": "未使用の '@param' タグ '{0}' を削除します", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[非推奨] 代わりに '--jsxFactory' を使います。'react' JSX 発行を対象とするときに、createElement に対して呼び出されたオブジェクトを指定します", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[非推奨] 代わりに '--outFile' を使います。出力を連結して 1 つのファイルを生成します", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[非推奨] 代わりに '--skipLibCheck' を使います。既定のライブラリ宣言ファイルの型チェックをスキップします。", - "Deprecated_setting_Use_outFile_instead_6677": "非推奨の設定です。代わりに 'outFile' をお使いください。", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "'await' を使用することを忘れていませんか?", - "Did_you_mean_0_1369": "'{0}' を意図していましたか?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' が型 'new (...args: any[]) => {1}' に制約されることを意図していましたか?", - "Did_you_mean_to_call_this_expression_6212": "この式を呼び出すことを意図していましたか?", - "Did_you_mean_to_mark_this_function_as_async_1356": "この関数を 'async' とマークすることを意図していましたか?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':' を使用するつもりでしたか? 含まれるオブジェクト リテラルが非構造化パターンの一部である場合、'=' はプロパティ名の後にのみ使用することができます。", - "Did_you_mean_to_use_new_with_this_expression_6213": "この式で 'new' を使用することを意図していましたか?", - "Digit_expected_1124": "数値が必要です", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "ディレクトリ '{0}' は存在していません。ディレクトリ内のすべての参照をスキップしています。", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "ディレクトリ '{0}' には package.json のスコープが含まれません。インポートは解決されません。", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "生成された JavaScript ファイルでの 'use strict' ディレクティブの追加を無効にします。", - "Disable_checking_for_this_file_90018": "このファイルのチェックを無効にする", - "Disable_emitting_comments_6688": "コメントの生成を無効にします。", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc コメントに '@internal' を含む宣言の生成を無効にします。", - "Disable_emitting_files_from_a_compilation_6660": "コンパイルからのファイルの出力を無効にします。", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "型チェック エラーが報告された場合は、ファイルの生成を無効にします。", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "生成されたコード内で 'const 列挙型' 宣言の消去を無効にします。", - "Disable_error_reporting_for_unreachable_code_6603": "到達できないコードのエラー報告を無効にします。", - "Disable_error_reporting_for_unused_labels_6604": "未使用のラベルのエラー報告を無効にします。", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "完全な型チェックを無効にしてください (重大な解析エラーと生成エラーのみが報告されます)。", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "コンパイルされた出力での '__extends' などのカスタム ヘルパー関数の生成を無効にします。", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "既定の lib.d.ts を含むすべてのライブラリ ファイルを含めることを無効にします。", - "Disable_loading_referenced_projects_6235": "参照されているプロジェクトの読み込みを無効にします。", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "複合プロジェクトを参照するときに宣言ファイルではなくソース ファイルを優先することを無効にします。", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "オブジェクト リテラルの作成時に余分なプロパティ エラーの報告を無効にします。", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "symlink を realpath に解決できないようにします。これは、ノードの同じフラグに関連しています。", - "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript プロジェクトのサイズ制限を無効にします。", - "Disable_solution_searching_for_this_project_6224": "このプロジェクトのソリューション検索を無効にします。", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "関数型の汎用シグネチャに対する厳密なチェックを無効にします。", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript プロジェクトの型の取得を無効にする", - "Disable_truncating_types_in_error_messages_6663": "エラー メッセージ内の型の切り捨てを無効にします。", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "参照先のプロジェクトの宣言ファイルの代わりにソース ファイルを使用することを無効にします。", - "Disable_wiping_the_console_in_watch_mode_6684": "ウォッチ モードでのコンソールのワイプを無効にします。", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "プロジェクト内のファイル名の参照による型取得の推論を無効にします。", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import'、'require'、'' を使用して TypeScript がプロジェクトに追加するファイルの数を増やすことを無効にします。", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "同じファイルへの大文字小文字の異なる参照を許可しない。", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "トリプルスラッシュの参照やインポートしたモジュールをコンパイルされたファイルのリストに追加しないでください。", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript の一部ではないランタイム コンストラクトを許可しません。", - "Do_not_emit_comments_to_output_6009": "コメントを出力しないでください。", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' の注釈を含むコードの宣言を生成しないでください。", - "Do_not_emit_outputs_6010": "出力しないでください。", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "エラーが報告される場合は、出力しないでください。", - "Do_not_emit_use_strict_directives_in_module_output_6112": "モジュール出力で 'use strict' ディレクティブを生成しません。", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "生成されたコード内で const 列挙型宣言を消去しないでください。", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "コンパイルされた出力で '__extends' などのカスタム ヘルパー関数を生成しないでください。", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "既定のライブラリ ファイル (lib.d.ts) を含めないでください。", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "到達できないコードに関するエラーを報告しない。", - "Do_not_report_errors_on_unused_labels_6074": "未使用のラベルに関するエラーを報告しない。", - "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink の実際のパスを解決しません。", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "型のみとしてマークされていないインポートまたはエクスポートを変換または削除せずに、'module' 設定に基づいて出力ファイルの形式で書き込まれていることを確認してください。", - "Do_not_truncate_error_messages_6165": "エラー メッセージを切り捨てないでください。", - "Duplicate_function_implementation_2393": "関数の実装が重複しています。", - "Duplicate_identifier_0_2300": "識別子 '{0}' が重複しています。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別子 '{0}' が重複しています。コンパイラは、モジュールの最上位のスコープに名前 '{1}' を予約します。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別子 '{0}' が重複しています。コンパイラは非同期関数を含むモジュールの最上位のスコープに名前 '{1}' を予約します。", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別子 '{0}' が重複しています。静的初期化子で 'super' 参照を出力するときに、コンパイラは名前 '{1}' を予約します。", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別子 '{0}' が重複しています。コンパイラは宣言 '{1}' を使用して非同期関数をサポートします。", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "識別子 '{0}' が重複しています。静的要素とインスタンス要素は、同じプライベート名を共有できません。", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別子 'arguments' が重複しています。コンパイラは 'arguments' を使用して rest パラメーターを初期化します。", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別子 '_newTarget' が重複しています。コンパイラは変数宣言 '_newTarget' を使用して、'new.target' メタプロパティの参照をキャプチャします。", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別子 '_this' が重複しています。コンパイラは変数宣言 '_this' を使用して '_this' の参照をキャプチャします。", - "Duplicate_index_signature_for_type_0_2374": "型 '{0}' のインデックス シグネチャが重複しています。", - "Duplicate_label_0_1114": "ラベル '{0}' が重複しています。", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "プロパティ '{0}' が重複しています。", - "Duplicate_regular_expression_flag_1500": "正規表現フラグが重複しています。", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動的インポートの指定子の型は 'string' である必要がありますが、ここでは型 '{0}' が指定されています。", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "動的インポートは、'--module' フラグが 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'node18'、'node20'、または 'nodenext' に設定されている場合にのみサポートされます。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動的インポートでは、引数として、モジュール指定子とオプションの属性セットのみを受け取ることができます", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "動的インポートは、'--module' オプションが 'esnext'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されている場合にのみ、2 番目の引数をサポートします。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript のインポートとエクスポートは、CommonJS ファイルの 'verbatimModuleSyntax' の下に書き込むことができません。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript のインポートとエクスポートは、CommonJS ファイルの 'verbatimModuleSyntax' の下に書き込むことができません。最も近い 'package.json' の 'type' フィールドを調整してこのファイルを ECMAScript モジュールにするか、TypeScript で 'verbatimModuleSyntax'、'module'、'moduleResolution' の設定を調整します。", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module' が 'preserve' に設定されている場合、CommonJS モジュールでは ECMAScript モジュール構文を使用できません。", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' の各宣言の値が異なります。'{2}' が必要ですが、'{3}' が指定されました。", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "共用体型 '{0}' の各メンバーにはコンストラクト シグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "共用体型 '{0}' の各メンバーにはシグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", - "Editor_Support_6249": "エディター サポート", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "型 '{0}' の式を使用して型 '{1}' にインデックスを付けることはできないため、要素は暗黙的に 'any' 型になります。", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "インデックス式が型 'number' ではないため、要素に 'any' 型が暗黙的に指定されます。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。'{1}' を呼び出すことを意図していましたか?", - "Emit_6246": "生成", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 標準準拠クラス フィールドを生成します。", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "出力ファイルの最初に UTF-8 バイト順マーク(BOM) を生成します。", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "個々のファイルを持つ代わりに、複数のソース マップを含む単一ファイルを生成します。", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "デバッグのために実行するコンパイラの v8 CPU プロファイルを生成します。", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS モジュールのインポートをサポートしやすくするために追加の JavaScript を生成します。これにより、互換性のある型に対して 'allowSyntheticDefaultImports' を使用できるようになります。", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Set ではなく Define を使用して、クラスのフィールドを生成します。", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "ソース ファイル内の修飾された宣言に対してデザイン型メタデータを生成します。", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "イテレーションのために、準拠性が高いものの、冗長でパフォーマンスが低い JavaScript を生成します。", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "単一ファイル内でソースマップと共にソースを生成します。'--inlineSourceMap' または '--sourceMap' を設定する必要があります。", - "Enable_all_strict_type_checking_options_6180": "厳密な型チェックのオプションをすべて有効にします。", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "TypeScript の出力で色と書式設定を有効にして、コンパイラ エラーを読みやすくします。", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "プロジェクト参照での TypeScript プロジェクトの使用を許可する制約を有効にします。", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "関数で明示的に返されないコードパスのエラー報告を有効にします。", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "暗黙的な 'any' 型を含む式と宣言に関するエラー報告を有効にします。", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch ステートメントに case のフォールスルーがある場合のエラー報告を有効にします。", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "型チェックされた JavaScript ファイルでのエラー報告を有効にします。", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "ローカル変数が読み取られていない場合にエラー報告を有効にします。", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' に 'any' 型が指定されている場合は、エラー報告を有効にします。", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "従来の実験的なデコレーターの実験的なサポートを有効にしてください。", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "宣言ファイルが存在する場合、拡張子を持つファイルのインポートを有効にしてください。", - "Enable_importing_json_files_6689": ".json ファイルのインポートを有効にします。", - "Enable_lib_replacement_6808": "lib 置換を有効にします。", - "Enable_project_compilation_6302": "プロジェクトのコンパイルを有効にします", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "厳格な 'bind'、'call'、'apply' メソッドを関数で有効にします。", - "Enable_strict_checking_of_function_types_6186": "関数の型の厳密なチェックを有効にします。", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "クラス内のプロパティの初期化の厳密なチェックを有効にします。", - "Enable_strict_null_checks_6113": "厳格な null チェックを有効にします。", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "構成ファイルで 'experimentalDecorators' オプションを有効にする", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "構成ファイルで '--jsx' フラグを有効にする", - "Enable_tracing_of_the_name_resolution_process_6085": "名前解決の処理のトレースを有効にします。", - "Enable_verbose_logging_6713": "詳細ログを有効にします。", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "すべてのインポートの名前空間オブジェクトを作成して、CommonJS と ES モジュール間の生成の相互運用性を有効にします。'allowSyntheticDefaultImports' を暗黙のうちに表します。", - "Enables_experimental_support_for_ES7_decorators_6065": "ES7 デコレーター用の実験的なサポートを有効にします。", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "デコレーター用の型メタデータを発行するための実験的なサポートを有効にします。", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "インデックス付きの型を使用して宣言されたキーに対してインデックス付きアクセサーの使用を強制します。", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "派生クラスのオーバーライドするメンバーが override 修飾子でマークされていることを確認します。", - "Ensure_that_casing_is_correct_in_imports_6637": "インポートの大文字と小文字の指定が正しいことを確認します。", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "各ファイルが他のインポートに依存しないで安全にトランスパイルできることを確認します。", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "'use strict' が常に生成されることを確認します。", - "Entering_conditional_exports_6413": "条件付きエクスポートを入力しています。", - "Entry_point_for_implicit_type_library_0_1420": "暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId が '{1}' の暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions で指定されたタイプ ライブラリ '{0}' のエントリ ポイント", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "compilerOptions で指定された packageId が '{1}' のタイプ ライブラリ '{0}' のエントリ ポイント", - "Enum_0_used_before_its_declaration_2450": "列挙型 '{0}' は宣言の前に使用されました。", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列挙型の宣言は、名前空間または他の列挙型の宣言とのみマージできます。", - "Enum_declarations_must_all_be_const_or_non_const_2473": "列挙型宣言は、すべてが定数、またはすべてが非定数でなければなりません。", - "Enum_member_expected_1132": "列挙型メンバーが必要です。", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules' が有効である場合、非リテラル数値メンバーの後に続く列挙型メンバーには初期化子が必要です。", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列挙型メンバー初期化子は、--isolatedDeclarations を含む外部シンボルへの参照なしで計算可能である必要があります。", - "Enum_member_must_have_initializer_1061": "列挙型メンバーには初期化子が必要です。", - "Enum_name_cannot_be_0_2431": "列挙型の名前を '{0}' にすることはできません。", - "Environment_Settings_6285": "環境の設定", - "Errors_Files_6041": "エラーの発生したファイル", - "Escape_sequence_0_is_not_allowed_1488": "エスケープ シーケンス '{0}' は許可されていません。", - "Examples_Colon_0_6026": "例: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "型 '{0}' と '{1}' の比較が複雑すぎます。", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "型 '{0}' と '{1}' を比較するスタックが深すぎます。", - "Exiting_conditional_exports_6416": "条件付きエクスポートを終了しています。", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} 型の引数が必要です。'@extends' タグで指定してください。", - "Expected_0_arguments_but_got_1_2554": "{0} 個の引数が必要ですが、{1} 個指定されました。", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} 引数が必要ですが、{1} が指定されました。'Promise' の型引数に 'void' を含めましたか?", - "Expected_0_type_arguments_but_got_1_2558": "{0} 個の型引数が必要ですが、{1} 個が指定されました。", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} 型の引数が必要です。'@extends' タグで指定してください。", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 個の引数が必要ですが、0 個しかありませんでした。'new Promise()' では、引数なしで呼び出すことができる 'resolve' を生成するための JSDoc ヒントが必要です。", - "Expected_a_Unicode_property_name_1523": "Unicode プロパティ名が必要です。", - "Expected_a_Unicode_property_name_or_value_1527": "Unicode プロパティ名または値が必要です。", - "Expected_a_Unicode_property_value_1525": "Unicode プロパティ値が必要です。", - "Expected_a_capturing_group_name_1514": "キャプチャ グループ名が必要です。", - "Expected_a_class_set_operand_1520": "クラス セット オペランドが必要でした。", - "Expected_at_least_0_arguments_but_got_1_2555": "最低でも {0} 個の引数が必要ですが、{1} 個指定されました。", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' の対応する JSX 終了タグが必要です。", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX フラグメントの対応する終了タグが必要です。", - "Expected_for_property_initializer_1442": "プロパティ初期化子には '=' を期待しています。", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' の '{0}' フィールドの型は '{1}' であるべきですが、'{2}' を取得しました。", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明示的に指定されたモジュール解決の種類 '{0}'。", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' オプションが 'es2016' 以降に設定されている場合を除き、'bigint' 値に対して累乗を実行することはできません。", - "Export_0_from_module_1_90059": "'{0}' をモジュール '{1}' からエクスポートする", - "Export_all_referenced_locals_90060": "参照されているすべてのローカルをエクスポートする", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript モジュールを対象にする場合は、エクスポート代入を使用できません。代わりに 'export default' または別のモジュール書式の使用をご検討ください。", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "代入のエクスポートは、'--module' フラグが 'system' の場合にはサポートされません。", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "エクスポート宣言が、'{0}' のエクスポートされた宣言と競合しています。", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "エクスポート宣言は名前空間でサポートされません。", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "エクスポート指定子 '{0}' がパス '{1}' の package.json のスコープに存在しません。", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "エクスポートされた型のエイリアス '{0}' にプライベート名 '{1}' が付いているか、その名前を使用しています。", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "エクスポートされた型エイリアス '{0}' がモジュール {2} のプライベート名 '{1}' を持っているか、使用しています。", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "エクスポートされた変数 '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "エクスポートされた変数 '{0}' がプライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "エクスポートされた変数 '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "エクスポートとエクスポートの代入はモジュールの拡張では許可されていません。", - "Expression_expected_1109": "式が必要です。", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "式をデコレーターとして使用するには、かっこで囲む必要があります。", - "Expression_or_comma_expected_1137": "式またはコンマが必要です。", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "式では大きすぎて表すことができないタプル型を生成します。", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "式は、複雑すぎて表現できない共用体型を生成します。", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "式は、コンパイラが基底クラスの参照をキャプチャするために使用する '_super' に解決されます。", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "式は、コンパイラが 'new.target' メタプロパティの参照をキャプチャするために使用する変数宣言 '_newTarget' に解決されます。", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "式は、コンパイラが 'this' の参照をキャプチャするために使用する変数宣言 '_this' に解決されます。", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "式の型を --isolatedDeclarations と共に推論することはできません。", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "extends 句に --isolatedDeclarations を含む式を含めることはできません。", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推論された型 '{0}' の extends 句がプライベート名 '{1}' を持っているか、使用しています。", - "Extract_base_class_to_variable_90064": "基底クラスを変数に抽出する", - "Extract_binding_expressions_to_variable_90066": "バインド式を変数に抽出してください", - "Extract_constant_95006": "定数の抽出", - "Extract_default_export_to_variable_90065": "変数への既定のエクスポートを抽出する", - "Extract_function_95005": "関数の抽出", - "Extract_to_0_in_1_95004": "{1} 内の {0} に抽出する", - "Extract_to_0_in_1_scope_95008": "{1} スコープ内の {0} に抽出する", - "Extract_to_0_in_enclosing_scope_95007": "外側のスコープ内の {0} に抽出する", - "Extract_to_interface_95090": "インターフェイスに抽出する", - "Extract_to_type_alias_95078": "型のエイリアスに抽出する", - "Extract_to_typedef_95079": "typedef に抽出する", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "変数に抽出し、'{0} as typeof {0}' で置き換えます", - "Extract_type_95077": "Extract 型", - "FILE_6035": "ファイル", - "FILE_OR_DIRECTORY_6040": "ファイルまたはディレクトリ", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' が見つかりませんでした。", - "Failed_to_resolve_under_condition_0_6415": "条件 '{0}' で解決できませんでした。", - "Fallthrough_case_in_switch_7029": "switch に case のフォールスルーがあります。", - "File_0_does_not_exist_6096": "ファイル '{0}' が存在しません。", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "以前にキャッシュされた検索によるとファイル '{0}' は存在しません。", - "File_0_exists_according_to_earlier_cached_lookups_6239": "以前にキャッシュされた参照によるとファイル ' {0} ' は、存在します。", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "ファイル '{0}' が存在します。名前解決の結果として使用します。", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "ファイル '{0}' はサポートされていない拡張子を含んでいます。サポートされている拡張子は {1} のみです。", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "ファイル '{0}' は JavaScript ファイルです。'allowJs' オプションを有効にするつもりでしたか?", - "File_0_is_not_a_module_2306": "ファイル '{0}' はモジュールではありません。", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "ファイル '{0}' がプロジェクト '{1}' のファイル リストに含まれていません。プロジェクトではすべてのファイルをリストするか、'include' パターンを使用する必要があります。", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "ファイル '{0}' が 'rootDir' '{1}' の下にありません。'rootDir' にすべてにソース ファイルが含まれている必要があります。", - "File_0_not_found_6053": "ファイル '{0}' が見つかりません。", - "File_Layout_6284": "ファイル レイアウト", - "File_Management_6245": "ファイルの管理", - "File_appears_to_be_binary_1490": "ファイルはバイナリのようです。", - "File_change_detected_Starting_incremental_compilation_6032": "ファイルの変更が検出されました。インクリメンタル コンパイルを開始しています...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}' にはフィールド \"type\" がないため、ファイルは CommonJS モジュールです", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}' にフィールド \"type\" があり、値が \"module\" ではないため、ファイルは CommonJS モジュールです。", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "\"package.json\" が見つからなかったため、ファイルは CommonJS モジュールです", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}' には値 \"module\" のフィールド \"type\" があるため、ファイルは ECMAScript モジュールです。", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "ファイルは CommonJS モジュールです。ES モジュールに変換される可能性があります。", - "File_is_default_library_for_target_specified_here_1426": "ファイルはこちらで指定されたターゲットの既定のライブラリです。", - "File_is_entry_point_of_type_library_specified_here_1419": "ファイルはこちらで指定されたタイプ ライブラリのエントリ ポイントです。", - "File_is_included_via_import_here_1399": "ファイルはインポートによってこちらに追加されます。", - "File_is_included_via_library_reference_here_1406": "ファイルはライブラリ参照によってこちらにインクルードされます。", - "File_is_included_via_reference_here_1401": "ファイルは参照によってこちらにインクルードされます。", - "File_is_included_via_type_library_reference_here_1404": "ファイルはタイプ ライブラリ参照によってこちらにインクルードされます。", - "File_is_library_specified_here_1423": "ファイルはこちらで指定されたライブラリです。", - "File_is_matched_by_files_list_specified_here_1410": "ファイルはこちらで指定された 'files' リストに一致します。", - "File_is_matched_by_include_pattern_specified_here_1408": "ファイルはこちらで指定されたインクルード パターンに一致します。", - "File_is_output_from_referenced_project_specified_here_1413": "ファイルはこちらで指定された参照先プロジェクトからの出力です。", - "File_is_output_of_project_reference_source_0_1428": "ファイルはプロジェクト参照ソース '{0}' の出力です", - "File_is_source_from_referenced_project_specified_here_1416": "ファイルはこちらで指定された参照先プロジェクトのソースです。", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "ファイル名 '{0}' は、既に含まれているファイル名 '{1}' と大文字と小文字の指定だけが異なります。", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "ファイル名 '{0}' の拡張子は '{1}' です。代わりに '{2}' を検索しています。", - "File_name_0_has_a_1_extension_stripping_it_6132": "ファイル名 '{0}' に '{1}' 拡張子が使われています - 削除しています。", - "File_redirects_to_file_0_1429": "ファイルはファイル '{0}' にリダイレクトされます", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "ファイルの指定で再帰ディレクトリのワイルドカード ('**') の後に親ディレクトリ ('..') を指定することはできません: '{0}'。", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "ファイルの指定の末尾を再帰的なディレクトリのワイルドカード ('**') にすることはできません: '{0}'。", - "Filters_results_from_the_include_option_6627": "'include' オプションからの結果をフィルター処理します。", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "検出されたすべてのスペル ミスを修正します", - "Fix_all_expressions_possibly_missing_await_95085": "'await' が不足している可能性があるすべての式を修正する", - "Fix_all_implicit_this_errors_95107": "すべての暗黙的な 'this' エラーを修正する", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "非同期関数の無効な戻り値の型をすべて修正します", - "Fix_all_with_type_only_imports_95182": "型のみのインポートを使用してすべてを修正する", - "For_nodejs_Colon_6287": "Node.js の場合:", - "Found_0_errors_6217": "{0} 件のエラーが見つかりました。", - "Found_0_errors_Watching_for_file_changes_6194": "{0} 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", - "Found_0_errors_in_1_files_6261": "{1} ファイルに {0} 件のエラーが見つかりました。", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "同じファイル内に {0} 件のエラーが見つかりました。{1} から開始します", - "Found_1_error_6216": "1 件のエラーが見つかりました。", - "Found_1_error_Watching_for_file_changes_6193": "1 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", - "Found_1_error_in_0_6259": "{0} で 1 件のエラーが見つかりました", - "Found_package_json_at_0_6099": "'{0}' で 'package.json' が見つかりました。", - "Found_peerDependency_0_with_1_version_6282": "'{1}' バージョンの peerDependency '{0}' が見つかりました。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。クラス定義は自動的に厳格モードになります。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。モジュールは自動的に厳格モードになります。", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "戻り値の型の注釈がない関数式の戻り値の型は、暗黙的に '{0}' になります。", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "関数の実装がないか、宣言の直後に指定されていません。", - "Function_implementation_name_must_be_0_2389": "関数の実装名は '{0}' でなければなりません。", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "関数は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "関数に終了の return ステートメントがないため、戻り値の型には 'undefined' が含まれません。", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "関数には、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", - "Function_not_implemented_95159": "関数が実装されていません。", - "Function_overload_must_be_static_2387": "関数のオーバーロードは静的でなければなりません。", - "Function_overload_must_not_be_static_2388": "関数のオーバーロードは静的にはできせん。", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "共用体型で使用する場合、関数の型の表記はかっこで囲む必要があります。", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "交差型で使用する場合、関数の型の表記はかっこで囲む必要があります。", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "戻り値の型の注釈がない関数型の戻り値の型は、暗黙的に '{0}' になります。", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "本文を持つ関数は、アンビエントであるクラスとのみ結合できます。", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "プロジェクト内の TypeScript ファイルおよび JavaScript ファイルから、.d.ts ファイルを生成します。", - "Generate_get_and_set_accessors_95046": "'get' および 'set' アクセサーの生成", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "すべてのオーバーライドするプロパティに対して 'get' および 'set' アクセサーを生成します", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "CPU プロファイルを生成します。", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "対応する各 '.d.ts' ファイルにソースマップを生成します。", - "Generates_an_event_trace_and_a_list_of_types_6237": "イベント トレースと型のリストを生成します。", - "Generates_corresponding_d_ts_file_6002": "対応する '.d.ts' ファイルを生成します。", - "Generates_corresponding_map_file_6043": "対応する '.map' ファイルを生成します。", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "ジェネレーターは暗黙的に yield 型 '{0}' を持っています。戻り値の型の注釈を指定することを検討してください。", - "Generators_are_not_allowed_in_an_ambient_context_1221": "ジェネレーターは環境コンテキストでは使用できません。", - "Generic_type_0_requires_1_type_argument_s_2314": "ジェネリック型 '{0}' には {1} 個の型引数が必要です。", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "ジェネリック型 '{0}' には、{1} 個から {2} 個までの型引数が必要です。", - "Global_module_exports_may_only_appear_at_top_level_1316": "グローバル モジュールのエクスポートは最上位レベルにのみ出現可能です。", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "グローバル モジュールのエクスポートは宣言ファイルにのみ出現可能です。", - "Global_module_exports_may_only_appear_in_module_files_1314": "グローバル モジュールのエクスポートはモジュール ファイルにのみ出現可能です。", - "Global_type_0_must_be_a_class_or_interface_type_2316": "グローバル型 '{0}' はクラス型またはインターフェイス型でなければなりません。", - "Global_type_0_must_have_1_type_parameter_s_2317": "グローバル型 '{0}' には {1} 個の型パラメーターが必要です。", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' と '--watch' での再コンパイルは、ファイル内の変更がそのファイルに直接依存しているファイルにのみ影響することを想定しています。", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' と 'watch' モードを使用するプロジェクト内での再コンパイルは、ファイル内の変更がそれに直接依存しているファイルにのみ影響することを想定しています。", - "Hexadecimal_digit_expected_1125": "16 進の数字が必要です。", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "識別子が必要です。'{0}' は、モジュールの最上位レベルでの予約語です。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "識別子が必要です。'{0}' は厳格モードの予約語です。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "識別子が必要です。'{0}' は厳格モードの予約語です。クラス定義は自動的に厳格モードになります。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "識別子が必要です。'{0}' は、厳格モードの予約語です。モジュールは自動的に厳格モードになります。", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "識別子が予期されていました。'{0}' は、ここでは使用できない予約語です。", - "Identifier_expected_1003": "識別子が必要です。", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "識別子が必要です。'__esModule' は、ECMAScript モジュールを変換するときのエクスポート済みマーカーとして予約されています。", - "Identifier_or_string_literal_expected_1478": "識別子または文字列リテラルが必要です。", - "Identifier_string_literal_or_number_literal_expected_1496": "識別子、文字列リテラル、または数値リテラルが必要です。", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' パッケージが実際にこのモジュールを公開する場合は、pull request を送信して 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' を修正することを検討してください", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' パッケージが実際にこのモジュールを公開する場合は、'declare module '{1}';' を含む新しい宣言 (d.ts) ファイルを追加してみてください。", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "見つかった tsconfig を無視し、コマンドライン オプションとファイルを使用してビルドします。", - "Ignore_this_error_message_90019": "このエラー メッセージを無視する", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json を無視し、既定のコンパイラ オプションを使用して指定されたファイルをコンパイルします。", - "Implement_all_inherited_abstract_classes_95040": "継承されたすべての抽象クラスを実装します", - "Implement_all_unimplemented_interfaces_95032": "実装されていないすべてのインターフェイスを実装します", - "Implement_inherited_abstract_class_90007": "継承抽象クラスを実装する", - "Implement_interface_0_90006": "インターフェイス '{0}' を実装する", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "エクスポートされたクラス '{0}' の Implements 句がプライベート名 '{1}' を持っているか、使用しています。", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol ' から 'string' への暗黙の変換は、実行時に失敗します。この式を 'String(...)' でラップすることを検討してください。", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "インポート '{0}' は、このファイルで使用されているグローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "インポート '{0}' は、グローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", - "Import_0_from_1_90013": "\"{1}\" から `{0}` をインポートします。", - "Import_assertion_values_must_be_string_literal_expressions_2837": "インポート アサーションの値は、文字列リテラル式である必要があります。", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "インポート アサーションは、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "インポート アサーションは、'--module' オプションが 'esnext'、'node18'、'node20'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "インポート アサーションは、型のみのインポートまたはエクスポートでは使用できません。", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "インポート アサーションはインポート属性に置き換えられました。'assert' ではなく 'with' を使用してください。", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript モジュールを対象にする場合は、インポート代入を使用できません。代わりに 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' などのモジュール書式の使用をご検討ください。", - "Import_attribute_values_must_be_string_literal_expressions_2858": "インポート 属性の値は、文字列リテラル式である必要があります。", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "インポート属性は、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "インポート属性は、'--module' オプションが 'esnext'、'node18'、'node20'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "インポート属性は、型のみのインポートまたはエクスポートでは使用できません。", - "Import_declaration_0_is_using_private_name_1_4000": "インポート宣言 '{0}' がプライベート名 '{1}' を使用しています。", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "インポート宣言が、'{0}' のローカル宣言と競合しています。", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "名前空間内のインポート宣言は、モジュールを参照できません。", - "Import_emit_helpers_from_tslib_6139": "生成ヘルパーを 'tslib' からインポートします。", - "Import_may_be_converted_to_a_default_import_80003": "インポートは既定のインポートに変換される可能性があります。", - "Import_name_cannot_be_0_2438": "インポート名を '{0}' にすることはできません。", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "アンビエント モジュール宣言内のインポート宣言またはエクスポート宣言は、相対モジュール名を通してモジュールを参照することはできません。", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "インポート指定子 '{0}' がパス '{1}' の package.json のスコープに存在しません。", - "Imported_via_0_from_file_1_1393": "ファイル '{1}' から {0} を介してインポートされました", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions で指定された 'importHelpers' をインポートするため、ファイル '{1}' から {0} を介してインポートされました", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、ファイル '{1}' から {0} を介してインポートされました", - "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions で指定されているように 'importHelpers' をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "ECMAScript モジュールに JSON ファイルをインポートするには、'module' が '{0}' に設定されている場合、'type: \"json\"' インポート属性が必要です。", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "インポートはモジュールの拡張では許可されていません。外側の外部モジュールに移動することを検討してください。", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "アンビエント列挙型の宣言では、メンバー初期化子は定数式である必要があります。", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "複数の宣言がある列挙型で、最初の列挙要素の初期化子を省略できる宣言は 1 つのみです。", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "ファイルの一覧を含めます。これは、'include' ではなく、glob パターンをサポートしていません。", - "Include_modules_imported_with_json_extension_6197": "'.json' 拡張子付きのインポートされたモジュールを含める", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "生成された JavaScript 内のソースマップにソース コードを含めます。", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "出力された JavaScript 内にソースマップ ファイルを含めます。", - "Includes_imports_of_types_referenced_by_0_90054": "'{0}' によって参照される型のインポートを含む", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch を含めると、ファイルの変更について現在のプロジェクトの監視が開始されます。設定が完了すると、次の操作を使用してウォッチ モードを構成できます。", - "Incomplete_quantifier_Digit_expected_1505": "不完全な量指定子です。数値が必要です。", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "型 '{0}' is missing in type '{1}' のインデックス シグネチャがありません。", - "Index_signature_in_type_0_only_permits_reading_2542": "型 '{0}' のインデックス シグネチャは、読み取りのみを許可します。", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "マージされた宣言 '{0}' の個々の宣言はすべてエクスポートされるか、すべてローカルであるかのどちらかである必要があります。", - "Infer_all_types_from_usage_95023": "使用法からすべての型を推論します", - "Infer_function_return_type_95148": "関数の戻り値の型を推論します", - "Infer_parameter_types_from_usage_95012": "使用状況からパラメーターの型を推論する", - "Infer_this_type_of_0_from_usage_95080": "使い方から '{0}' の 'this' 型を推論する", - "Infer_type_of_0_from_usage_95011": "使用状況から '{0}' の型を推論する", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "クラス式からの推論は、--isolatedDeclarations ではサポートされていません。", - "Initialize_property_0_in_the_constructor_90020": "コンストラクターのプロパティ '{0}' を初期化する", - "Initialize_static_property_0_90021": "静的プロパティ '{0}' を初期化する", - "Initializer_for_property_0_2811": "プロパティ ' {0} ' の初期化子。", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "インスタンス メンバー変数 '{0}' の初期化子はコンストラクターで宣言された識別子 '{1}' を参照できません。", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "初期化子は環境コンテキストでは使用できません。", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript プロジェクトを初期化して、tsconfig.json ファイルを作成します。", - "Inline_variable_95184": "インライン変数", - "Insert_command_line_options_and_files_from_a_file_6030": "コマンド ライン オプションとファイルをファイルから挿入します。", - "Install_0_95014": "'{0}' のインストール", - "Install_all_missing_types_packages_95033": "不足しているすべての型のパッケージをインストールします", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "インターフェイス '{0}' で型 '{1}' と型 '{2}' を同時には拡張できません。", - "Interface_0_incorrectly_extends_interface_1_2430": "インターフェイス '{0}' はインターフェイス '{1}' を正しく拡張していません。", - "Interface_declaration_cannot_have_implements_clause_1176": "インターフェイス宣言に 'implements' 句を指定することはできません。", - "Interface_must_be_given_a_name_1438": "インターフェイスに名前を指定する必要があります。", - "Interface_name_cannot_be_0_2427": "インターフェイス名を '{0}' にすることはできません。", - "Interop_Constraints_6252": "制約の相互運用", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' を追加するのではなく、省略可能なプロパティ型を記述済みとして解釈します。", - "Invalid_character_1127": "無効な文字です。", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "無効なインポート指定子 '{0}' には解決策がありません。", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "拡張のモジュール名が無効です。モジュール '{0}' は '{1}' の型指定のないモジュールに解決されるため、拡張されません。", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "拡張のモジュール名が無効です。モジュール '{0}' が見つかりません。", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新しい式の省略可能なチェーンが無効です。'{0}()' の呼び出しを意図していましたか?", - "Invalid_reference_directive_syntax_1084": "無効な 'reference' ディレクティブ構文です。", - "Invalid_syntax_in_decorator_1498": "デコレーターの構文が無効です。", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' の使用が無効です。クラスの静的ブロック内では使用できません。", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' の使用方法が無効です。モジュールは自動的に厳格モードになります。", - "Invalid_use_of_0_in_strict_mode_1100": "厳格モードでは '{0}' の使用は無効です。", - "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' の値が無効です。", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' の値が無効です。'{0}' が有効な識別子または修飾名ではありません。", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' の値が無効です。'{0}' は有効な識別子でも修飾名でもありません。", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' の値が無効です。'{0}' は有効な識別子ではありません。", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "これら 2 つのテンプレート式を区切るコンマが不足している可能性があります。タグ付きテンプレート式を形成しており、呼び出すことができません。", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "その要素の型 '{0}' は有効な JSX 要素ではありません。", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "そのインスタンスの型 '{0}' は、有効な JSX 要素ではありません。", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "その戻り値の型 '{0}' は、有効な JSX 要素ではありません。", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "その型 '{0}' は有効な JSX 要素ではありません。", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' が 'extends {2}' 句と一致しません。", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' はクラスにアタッチされていません。", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' は、シグネチャの最後のパラメーターにのみ使用できます。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' タグの名前は '{0}' ですが、その名前のパラメーターはありません。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' タグに名前 '{0}' が指定されていますが、その名前のパラメーターはありません。配列型があった場合は、'arguments' と一致したはずです。", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef は TypeScript 型に変換できます。", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' タグには、型の注釈を指定するか、後に '@property' タグや '@member' タグを付ける必要があります。", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef は TypeScript 型に変換できます。", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc の種類は、ドキュメント コメント内でのみ使用できます。", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc の種類は TypeScript の種類に移行される可能性があります。", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 属性は、空ではない '式' にのみ割り当てる必要があります。", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 要素 '{0}' には対応する終了タグがありません。", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 要素クラスは '{0}' プロパティを含まないため、属性をサポートしません。", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "インターフェイス 'JSX.{0}' が存在しないため、暗黙的に JSX 要素の型は 'any' になります。", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "グローバル型 'JSX.Element' が存在しないため、JSX 要素は暗黙的に型 'any' になります。", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 要素型 '{0}' にはコンストラクトも呼び出しシグネチャも含まれていません。", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 要素に同じ名前の複数の属性を指定することはできません。", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 式では、コンマ演算子を使用できません。配列を作成するつもりでしたか?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX 式には 1 つの親要素が必要です。", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX フラグメントには対応する終了タグがありません。", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX プロパティ アクセス式に JSX 名前空間の名前を含めることはできません", - "JSX_spread_child_must_be_an_array_type_2609": "JSX スプレッドの子は、配列型でなければなりません。", - "JavaScript_Support_6247": "JavaScript サポート", - "Jump_target_cannot_cross_function_boundary_1107": "ジャンプ先は関数の境界を越えることはできません。", - "KIND_6034": "種類", - "Keywords_cannot_contain_escape_characters_1260": "キーワードにエスケープ文字を含めることはできません。", - "LOCATION_6037": "場所", - "Language_and_Environment_6254": "言語と環境", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "コンマ演算子の左側が使用されていないため、副作用はありません。", - "Library_0_specified_in_compilerOptions_1422": "compilerOptions でライブラリ '{0}' が指定されました", - "Library_referenced_via_0_from_file_1_1405": "ファイル '{1}' から '{0}' を介してライブラリが参照されました", - "Line_break_not_permitted_here_1142": "ここで改行することはできません。", - "Line_terminator_not_permitted_before_arrow_1200": "行の終端記号をアローの前で使用することはできません。", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "モジュールを解決するときに検索するファイル名サフィックスのリスト。", - "List_of_folders_to_include_type_definitions_from_6161": "含める型定義の元のフォルダーの一覧。", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "結合されたコンテンツがランタイムでのプロジェクトの構成を表すルート フォルダーの一覧。", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "ルート ディレクトリ '{1}' から '{0}' を読み込んでいます。候補の場所は '{2}' です。", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' フォルダーからモジュール '{0}' を読み込んでいます。対象のファイルの種類は {1} です。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "ファイル / フォルダーとしてモジュールを読み込んでいます。候補のモジュールの場所は '{0}'、対象のファイルの種類は {1} です。", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' の処理中に使用されたログ パス。", - "Longest_matching_prefix_for_0_is_1_6108": "'{0}' の一致する最長プレフィックスは '{1}' です。", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' フォルダーを検索しています。最初の場所は '{0}' です。", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "すべての 'super()' 呼び出しをそのコンストラクターの最初のステートメントにします", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof により、文字列、数字、記号の代わりに、文字列のみが返されるようにします。レガシ オプションです。", - "Make_super_call_the_first_statement_in_the_constructor_90002": "'super()' 呼び出しをコンストラクター内の最初のステートメントにする", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "マップされたオブジェクト型のテンプレートの型は暗黙的に 'any' になります。", - "Mark_array_literal_as_const_90070": "配列リテラルを const としてマークする", - "Matched_0_condition_1_6403": "'{0}' 条件 '{1}' と一致しました。", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "既定で一致するインクルード パターン '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "'{1}' のインクルード パターン '{0}' に一致しています", - "Member_0_implicitly_has_an_1_type_7008": "メンバー '{0}' の型は暗黙的に '{1}' になります。", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "メンバー '{0}' の型は暗黙的に '{1}' ですが、使い方からより良い型を推論する場合があります。", - "Merge_conflict_marker_encountered_1185": "マージ競合マーカーが検出されました。", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "マージされた宣言 '{0}' に既定のエクスポート宣言を含めることはできません。代わりに、'export default {0}' 宣言を別個に追加することを検討してください。", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "メタプロパティ '{0}' は、関数の宣言の本文、関数の式、またはコンストラクターでのみ許可されています。", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "メソッド '{0}' は abstract に指定されているため、実装を含めることができません。", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "エクスポートされたインターフェイスのメソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "エクスポートされたインターフェイスのメソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "メソッドには、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", - "Method_not_implemented_95158": "メソッドが実装されていません。", - "Modifiers_cannot_appear_here_1184": "ここで修飾子を使用することはできません。", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "モジュール '{0}' は、'{1}' フラグを使用して既定でのみインポートできます", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "モジュール '{0}' はこのコンストラクトではインポートできません。指定子は ES モジュールに解決されるだけであるため、'require' でインポートすることはできません。代わりに ECMAScript インポートを使用してください。", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "モジュール '{0}' は '{1}' をローカルで宣言していますが、これは '{2}' としてエクスポートされています。", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "モジュール '{0}' は '{1}' をローカルで宣言していますが、これはエクスポートされていません。", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "モジュール '{0}' は型を参照していませんが、ここでは型として使用されています。'typeof import('{0}')' を意図していましたか?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "モジュール '{0}' は値を参照していませんが、ここでは値として使用されています。", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "モジュール {0} は既に '{1}' という名前のメンバーをエクスポートしています。あいまいさを解決するため、明示的にもう一度エクスポートすることを検討してください。", - "Module_0_has_no_default_export_1192": "モジュール '{0}' に既定エクスポートがありません。", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "モジュール '{0}' には既定のエクスポートがありません。'import { {1} } from {0}' を使用するつもりでしたか?", - "Module_0_has_no_exported_member_1_2305": "モジュール '{0}' にエクスポートされたメンバー '{1}' がありません。", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "モジュール '{0}' にはエクスポートされたメンバー '{1}' がありません。'import {1} from {0}' を使用するつもりでしたか?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "モジュール '{0}' は同じ名前のローカル宣言によって非表示になっています。", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "モジュール '{0}' には 'export =' が使用されているため、'export *' は併用できません。", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "モジュール '{0}' は、ファイル '{1}' のローカルで宣言されたアンビエント モジュールとして解決されました。", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "モジュール '{0}' は '{1}' に解決されましたが、'--allowArbitraryExtensions' が設定されていません。", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "モジュール '{0}' は '{1}' に解決されましたが、'--jsx' が設定されていません。", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "モジュール '{0}' は '{1}' に解決されましたが、'--resolveJsonModule' が使用されていません。", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "モジュール宣言名で使用できるのは、' または \"引用符で囲まれた文字列のみです。", - "Module_name_0_matched_pattern_1_6092": "モジュール名 '{0}'、照合されたパターン '{1}'。", - "Module_name_0_was_not_resolved_6090": "======== モジュール名 '{0}' が解決されませんでした。========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== モジュール名 '{0}' が正常に '{1}' に解決されました。========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== モジュール名 '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}')。========", - "Module_resolution_kind_is_not_specified_using_0_6088": "モジュール解決の種類が '{0}' を使用して指定されていません。", - "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' を使用したモジュール解決が失敗しました。", - "Modules_6244": "モジュール", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "ラベル付きのタプル要素の修飾子をラベルに移動する", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "既定のエクスポートで式を変数に移動し、それに型注釈を追加します。", - "Move_to_a_new_file_95049": "新しいファイルへ移動します", - "Move_to_file_95178": "ファイルに移動", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "複数の連続した数値区切り記号を指定することはできません。", - "Multiple_constructor_implementations_are_not_allowed_2392": "コンストラクターを複数実装することはできません。", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "改行", - "Name_is_not_valid_95136": "名前が無効です", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "名前付きキャプチャ グループは、'ES2018' 以降をターゲットにする場合にのみ使用できます。", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "同じ名前の名前の名前付きキャプチャ グループは、相互に排他的である必要があります。", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "遅延インポートでは、名前付きインポートは許可されません。", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module' が '{0}' に設定されている場合、JSON ファイルから ECMAScript モジュールへの名前付きインポートは許可されません。", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' 型および '{2}' 型の名前付きプロパティ '{0}' が一致しません。", - "Namespace_0_has_no_exported_member_1_2694": "名前空間 '{0}' にエクスポートされたメンバー '{1}' がありません。", - "Namespace_must_be_given_a_name_1437": "名前空間に名前を指定する必要があります。", - "Namespace_name_cannot_be_0_2819": "名前空間名を '{0}' にすることはできません。", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' が有効になっている場合、グローバル スクリプト ファイルでは名前空間を使用できません。このファイルがグローバル スクリプトを意図していない場合は、'moduleDetection' を 'force' に設定するか、空の 'export {}' ステートメントを追加してください。", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "デコレーターも修飾子も 'this' パラメーターに適用できません。", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "指定した数の型引数を持つ基底コンストラクターは存在しません。", - "No_constituent_of_type_0_is_callable_2755": "型 '{0}' の構成要素は呼び出し可能ではありません。", - "No_constituent_of_type_0_is_constructable_2759": "型 '{0}' の構成要素はコンストラクト可能ではありません。", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "型 '{0}' のパラメーターを持つインデックス シグネチャが型 '{1}' に見つかりませんでした。", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "構成ファイル '{0}' で入力が見つかりませんでした。指定された 'include' パスは '{1}' で、'exclude' パスは '{2}' でした。", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "サポートされていません。初期のバージョンの場合は、ファイルを読み取るためにテキストのエンコードを手動で設定してください。", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} 引数を予期するオーバーロードはありませんが、{1} または {2} 引数のいずれかを予期するオーバーロードは存在します。", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} 型の引数を予期するオーバーロードはありませんが、{1} または {2} 型の引数のいずれかを予期するオーバーロードは存在します。", - "No_overload_matches_this_call_2769": "この呼び出しに一致するオーバーロードはありません。", - "No_type_could_be_extracted_from_this_type_node_95134": "この型ノードからは型を抽出できませんでした", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "短縮形のプロパティ '{0}' のスコープには値がありません。値を宣言するか、または初期化子を指定してください。", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象クラス '{0}' は、クラス '{2}' からの継承抽象メンバー '{1}' を実装しません。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2}。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2} およびその他 {3}。", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象クラスの式はクラス '{1}' からの継承抽象メンバー '{0}' を実装しません。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1}。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1} およびその他 {2}。", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "non-null アサーションは、TypeScript ファイルでのみ使用できます。", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "ここでは複雑なパラメーターが宣言されています。", - "Not_all_code_paths_return_a_value_7030": "一部のコード パスは値を返しません。", - "Not_all_constituents_of_type_0_are_callable_2756": "型 '{0}' のすべての構成要素が呼び出し可能なわけではありません。", - "Not_all_constituents_of_type_0_are_constructable_2760": "型 '{0}' のすべての構成要素がコンストラクト可能なわけではありません。", - "Numbers_out_of_order_in_quantifier_1506": "量指定子の数値が順不同です。", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絶対値が 2^53 以上の数値リテラルは大きすぎるため、整数として正確に表現できません。", - "Numeric_separators_are_not_allowed_here_6188": "数値の区切り記号は、ここでは使用できません。", - "Object_is_of_type_unknown_2571": "オブジェクト型は 'unknown' です。", - "Object_is_possibly_null_2531": "オブジェクトは 'null' である可能性があります。", - "Object_is_possibly_null_or_undefined_2533": "オブジェクトは 'null' か 'undefined' である可能性があります。", - "Object_is_possibly_undefined_2532": "オブジェクトは 'undefined' である可能性があります。", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "オブジェクト リテラルは既知のプロパティのみ指定できます。'{0}' は型 '{1}' に存在しません。", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "オブジェクト リテラルで指定できるのは既知のプロパティのみですが、'{0}' は型 '{1}' に存在しません。書こうとしたのは '{2}' ですか?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "オブジェクト リテラルのプロパティ '{0}' の型は暗黙的に '{1}' になります。", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "短縮形プロパティを含むオブジェクトは、--isolatedDeclarations では推論できません。", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "スプレッド割り当てを含むオブジェクトを --isolatedDeclarations と共に推論することはできません。", - "Octal_digit_expected_1178": "8 進の数字が必要です。", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "文字クラスでは、8 進数のエスケープ シーケンスと前方参照を使用することはできません。これがエスケープ シーケンスとして意図されていた場合は、代わりに構文 '{0}' を使用してください。", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8 進数のエスケープ シーケンスは使用できません。構文 '{0}' を使用してください。", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8 進数リテラルは使用できません。構文 '{0}' を使用してください。", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' の 1 つの値は文字列 '{2}' で、もう一方の値は不明な数値であると見なされます。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' ステートメントで使用できる変数宣言は 1 つのみです。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' ステートメントで使用できる変数宣言は 1 つのみです。", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' キーワードを指定して呼び出せるのは void 関数のみです。", - "Only_ambient_modules_can_use_quoted_names_1035": "引用符付きの名前を使用できるのはアンビエント モジュールのみです。", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} と共にサポートされるのは 'amd' モジュールと 'system' モジュールのみです。", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "--isolatedDeclarations を使用して推論できるのは const 配列のみです。", - "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 宣言ファイルのみを生成します。", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "出力の d.ts ファイルのみで、JavaScript ファイルは対象ではありません。", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' キーワードを使用してアクセスできるのは、基底クラスのパブリック メソッドと保護されたメソッドのみです。", - "Operator_0_cannot_be_applied_to_type_1_2736": "演算子 '{0}' は型 '{1}' に適用できません。", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "演算子 '{0}' を型 '{1}' および '{2}' に適用することはできません。", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "演算子は文字クラス内で混在してはなりません。入れ子になったクラスでラップしてください。", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "編集時に複数プロジェクト参照のチェックからプロジェクトをオプトアウトします。", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "オプション '{0}={1}' が削除されました。構成から削除してください。", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "オプション '{0}={1}' は非推奨であり、TypeScript {2} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{3}\"' を指定して、このエラーを無音にします。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'false' または 'null' に設定することしかできません。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'null' に設定することしかできません。", - "Option_0_can_only_be_specified_on_command_line_6266": "オプション '{0}' はコマンド ラインでのみ指定できます。", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "オプション '{0} を使用できるのは、オプション '--inlineSourceMap' またはオプション '--sourceMap' のいずれかを指定した場合のみです。", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "オプション '{0}' は、'moduleResolution' が 'node16'、'nodenext'、または 'bundler' に設定されている場合にのみ使用できます。", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "オプション '{0}' は、'module' が 'preserve'、'commonjs'、または 'es2015' 以降に設定されている場合にのみ使用できます。", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "オプション 'jsx' が '{1}' の場合、オプション '{0}' を指定することはできません。", - "Option_0_cannot_be_specified_with_option_1_5053": "オプション '{0}' をオプション '{1}' とともに指定することはできません。", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "オプション '{1}' を指定せずに、オプション '{0}' を指定することはできません。", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "オプション '{1}' またはオプション '{2}' を指定せずに、オプション '{0}' を指定することはできません。", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "オプション '{0}' が削除されました。構成から削除してください。", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "オプション '{0}' は非推奨であり、TypeScript {1} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{2}\"' を指定して、このエラーを無音にします。", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "オプション '{0}' は冗長であり、オプション '{1}' とともに指定することができません。", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "オプション 'allowImportingTsExtensions' は、'noEmit'、'emitDeclarationOnly'、または 'rewriteRelativeImportExtensions' のいずれかが設定されている場合にのみ使用できます。", - "Option_build_must_be_the_first_command_line_argument_6369": "オプション '--build' は最初のコマンド ライン引数である必要があります。", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "オプション 'isolatedModules' は、オプション '--module' が指定されているか、オプション 'target' が 'ES2015' 以上であるかのいずれかの場合でのみ使用できます。", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "オプション 'module' が '{1}' に設定されている場合は、オプション 'moduleResolution' を '{0}' (または未指定のままに) に設定する必要があります。", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "オプション 'moduleResolution' が '{1}' に設定されている場合は、オプション 'module' を '{0}' に設定する必要があります。", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' が有効になっている場合、オプション 'preserveConstEnums' を無効にすることはできません。", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "オプション 'project' をコマンド ライン上でソース ファイルと一緒に指定することはできません。", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' が 'classic' に設定されている場合、オプション '--resolveJsonModule' を指定できません。", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' が 'none'、'system'、または 'umd' に設定されている場合、オプション '--resolveJsonModule' を指定することはできません。", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' が 'UMD'、'AMD'、または 'System' に設定されている場合、オプション 'verbatimModuleSyntax' は使用できません。", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "オプション '{0}' と '{1}' を組み合わせることはできません。", - "Options_Colon_6027": "オプション:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "その他の出力", - "Output_Formatting_6256": "出力データ形式", - "Output_compiler_performance_information_after_building_6615": "ビルド後にコンパイラのパフォーマンス情報を出力します。", - "Output_directory_for_generated_declaration_files_6166": "生成された宣言ファイルの出力ディレクトリ。", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "出力ファイル '{0}' はソース ファイル '{1}' からビルドされていません。", - "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' が指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", - "Output_more_detailed_compiler_performance_information_after_building_6632": "ビルド後により詳しいコンパイラのパフォーマンス情報を出力します。", - "Overload_0_of_1_2_gave_the_following_error_2772": "{1} 中 {0} のオーバーロード, '{2}' により、次のエラーが発生しました。", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "オーバーロードのシグネチャはすべてが抽象または非抽象である必要があります。", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "オーバーロードのシグネチャは、すべてアンビエントであるか、すべてアンビエントでないかのどちらかである必要があります。", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "オーバーロードのシグネチャはすべてがエクスポート済みであるか、またはエクスポート済みでない必要があります。", - "Overload_signatures_must_all_be_optional_or_required_2386": "オーバーロードのシグネチャは、すべて省略可能であるか、すべて必須であるかのどちらかである必要があります。", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "オーバーロードのシグネチャはすべて、public、private、または protected でなければなりません。", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "パラメーター '{0}' はその後で宣言された識別子 '{1}' を参照できません。", - "Parameter_0_cannot_reference_itself_2372": "パラメーター '{0}' は、それ自体を参照できません。", - "Parameter_0_implicitly_has_an_1_type_7006": "パラメーター '{0}' の型は暗黙的に '{1}' になります。", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "パラメーター '{0}' の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "パラメーター '{0}' がパラメーター '{1}' と同じ位置にありません。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "アクセサーのパラメーター '{0}' が外部モジュール '{2}' からの名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "アクセサーのパラメーター '{0}' が、プライベート モジュール '{2}' からの名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "アクセサーのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "エクスポートされたインターフェイスの呼び出しシグネチャのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "エクスポートされたインターフェイスの呼び出しシグネチャのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "エクスポートされたインターフェイスのコンストラクター シグネチャのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "エクスポートされたインターフェイスのコンストラクター シグネチャのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "エクスポートされた関数のパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "エクスポートされた関数のパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "エクスポートされた関数のパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "エクスポートされたインターフェイスのインデックス シグネチャのパラメーター '{0}' で、プライベート モジュール '{2}' の名前 '{1}' が指定されているか使用されています。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "エクスポートされたインターフェイスのインデックス シグネチャのパラメーター '{0}' で、プライベート名 '{1}' が指定されているか使用されています。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "エクスポートされたインターフェイスのメソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "エクスポートされたインターフェイスのメソッドのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Parameter_cannot_have_question_mark_and_initializer_1015": "パラメーターに疑問符および初期化子を指定することはできません。", - "Parameter_declaration_expected_1138": "パラメーター宣言が必要です。", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "パラメーターに名前はありますが、型がありません。'{0}: {1}' を意図していましたか?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "パラメーター修飾子は TypeScript ファイルでのみ使用できます。", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "パラメーターには、--isolatedDeclarations を含む明示的な型注釈が必要です。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "厳格モードで解析してソース ファイルごとに \"use strict\" を生成します。", - "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json の 'files' リストの一部", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "パターン '{0}' に使用できる '*' 文字は最大で 1 つです。", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' または '--extendedDiagnostics' のパフォーマンスのタイミングは、このセッションでは使用できません。Web パフォーマンス API のネイティブ実装が見つかりませんでした。", - "Platform_specific_6912": "プラットフォーム固有", - "Prefix_0_with_an_underscore_90025": "アンダースコアを含むプレフィックス '{0}'", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "すべての正しくないプロパティ宣言の前に 'declare' を付ける", - "Prefix_all_unused_declarations_with_where_possible_95025": "可能な場合は、使用されていないすべての宣言にプレフィックスとして '_' を付けます", - "Prefix_with_declare_95094": "'declare' を前に付ける", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "さもなければ削除されてしまう JavaScript のアウトプット中の使われていないインポートされた値を保持します。", - "Print_all_of_the_files_read_during_the_compilation_6653": "コンパイル時に読み取られたすべてのファイルを出力します。", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "コンパイル時に読み取られたファイルを、それが含まれる理由と共に出力します。", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "ファイルの名前と、それらがコンパイルに含まれている理由を書き出します。", - "Print_names_of_files_part_of_the_compilation_6155": "コンパイルの一環としてファイルの名前を書き出します。", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "コンパイルの一部であるファイルの名前を出力してから、処理を停止します。", - "Print_names_of_generated_files_part_of_the_compilation_6154": "コンパイルの一環として生成されたファイル名を書き出します。", - "Print_the_compiler_s_version_6019": "コンパイラのバージョンを表示します。", - "Print_the_final_configuration_instead_of_building_1350": "ビルドを実行するのではなく、最終的な構成を出力します。", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "コンパイル後に生成されたファイルの名前を出力します。", - "Print_this_message_6017": "このメッセージを表示します。", - "Private_accessor_was_defined_without_a_getter_2806": "ゲッターなしでプライベート アクセサーが定義されました。", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "プライベート フィールド '{0}' は、エンクロージング クラスで宣言する必要があります。", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "変数宣言では、private 識別子は許可されていません。", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "private 識別子は、クラス本体の外では許可されていません。", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "プライベート識別子はクラス本体でのみ許可され、クラス メンバー宣言、プロパティ アクセス、または 'in' 式の左側でのみ使用できます", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "private 識別子は ECMAScript 2015 以上をターゲットにする場合にのみ使用できます。", - "Private_identifiers_cannot_be_used_as_parameters_18009": "private 識別子はパラメーターとして使用できません。", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "private または protected メンバー '{0}' には、型パラメーターではアクセスできません。", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "プロジェクト '{0}' はその依存関係 '{1}' にエラーがあるためビルドできません", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' はビルドできません", - "Project_0_is_being_forcibly_rebuilt_6388": "プロジェクト '{0}' が強制的にリビルドされています", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "buildinfo ファイル '{1}' は、ファイル '{2}' がコンパイルのルート ファイルでしたが、それ以上はないことを示しているため、プロジェクト '{0}' は最新ではありません。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "buildinfo ファイル '{1}' はプログラムがエラーを報告する必要があることを示しているため、プロジェクト '{0}' は最新ではありません。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo ファイルの '{1}' により、一部の変更が生成されなかったことが示されているため、プロジェクトの '{0}' は最新ではありません", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "buildinfo ファイル '{1}' は compilerOptions に変更があることを示しているため、プロジェクト '{0}' は最新ではありません", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "プロジェクト '{0}' は出力 '{1}' が入力 '{2}' より古いため最新の状態ではありません", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "プロジェクト '{0}' は出力ファイル '{1}' が存在しないため最新の状態ではありません", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "プロジェクト '{0}' の出力が現在のバージョン '{2}' と異なるバージョン '{1}' で生成されているため、このプロジェクトは最新の状態ではありません", - "Project_0_is_up_to_date_6361": "プロジェクト '{0}' は最新の状態です", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "プロジェクト '{0}' は最新の入力 '{1}' が出力 '{2}' より古いため最新の状態です", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "プロジェクト '{0}' は最新ですが、入力ファイルよりも古い出力ファイルのタイムスタンプを更新する必要があります", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "プロジェクト '{0}' はその依存関係からの .d.ts ファイルで最新の状態です", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "プロジェクト参照が円グラフを形成できません。循環が検出されました: {0}", - "Projects_6255": "プロジェクト", - "Projects_in_this_build_Colon_0_6355": "このビルドのプロジェクト: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' 修飾子を持つプロパティは、ECMAScript 2015 以降を対象とする場合にのみ使用できます。", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "メソッド '{0}' は abstract に指定されているため、初期化子を含めることができません。", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "プロパティ '{0}' はインデックス シグネチャに基づいているため、['{0}'] を使用してアクセスする必要があります。", - "Property_0_does_not_exist_on_type_1_2339": "プロパティ '{0}' は型 '{1}' に存在しません。", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "プロパティ '{0}' は型 '{1}' に存在していません。'{2}' ですか?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "プロパティ '{0}' は型 '{1}' には存在しません。代わりに静的メンバー '{2}' にアクセスしようとしていましたか?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "プロパティ '{0}' が型 '{1}' に存在しません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{2}' 以降に変更してみてください。", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "プロパティ ' {0} ' は型 ' {1} ' に存在しません。' lib ' コンパイラ オプションを ' dom ' を含むように変更してみてください。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "プロパティ '{0}' に初期化子がなく、クラスの静的ブロックで明確に割り当てられていません。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "プロパティ '{0}' に初期化子がなく、コンストラクターで明確に割り当てられていません。", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。get アクセサーには戻り値の型の注釈がないためです。", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。set アクセサーにはパラメーター型の注釈がないためです。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "プロパティ '{0}' の型は暗黙的に 'any' ですが、その get アクセサーのために、使い方からより良い型を推論する場合があります。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "プロパティ '{0}' の型は暗黙的に 'any' になっていますが、その set アクセサーのより良い型を使い方から推論できます。", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "型 '{1}' のプロパティ '{0}' を基本データ型 '{2}' の同じプロパティに割り当てることはできません。", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "型 '{1}' のプロパティ '{0}' を型 '{2}' に割り当てることはできません。", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "型 '{1}' のプロパティ '{0}' は、型 '{2}' 内からアクセスできない別のメンバーを参照しています。", - "Property_0_is_declared_but_its_value_is_never_read_6138": "プロパティ '{0}' が宣言されていますが、その値が読み取られることはありません。", - "Property_0_is_incompatible_with_index_signature_2530": "プロパティ '{0}' はインデックス シグネチャと互換性がありません。", - "Property_0_is_missing_in_type_1_2324": "型 '{1}' にプロパティ '{0}' がありません。", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "プロパティ '{0}' は型 '{1}' にありませんが、型 '{2}' では必須です。", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "プロパティ '{0}' には private 識別子が指定されているため、クラス '{1}' の外部ではアクセスできません。", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "プロパティ '{0}' は型 '{1}' では省略可能ですが、型 '{2}' では必須です。", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "プロパティ '{0}' はプライベートで、クラス '{1}' 内でのみアクセスできます。", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "プロパティ '{0}' は型 '{1}' ではプライベートですが、型 '{2}' ではプライベートではありません。", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "プロパティ '{0}' は保護されており、クラス '{1}' のインスタンスを通じてのみアクセスできます。これは、クラス '{2}' のインスタンスです。", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "プロパティ '{0}' は保護されているため、クラス '{1}' とそのサブクラス内でのみアクセスできます。", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "プロパティ '{0}' は保護されていますが、型 '{1}' は '{2}' から派生したクラスではありません。", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "プロパティ '{0}' は型 '{1}' では保護されていますが、型 '{2}' ではパブリックです。", - "Property_0_is_used_before_being_assigned_2565": "プロパティ '{0}' は割り当てられる前に使用されています。", - "Property_0_is_used_before_its_initialization_2729": "プロパティ '{0}' が初期化前に使用されています。", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "プロパティ '{0}' は型 '{1}' に存在していない可能性があります。'{2}' ですか?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX のスプレッド属性のプロパティ '{0}' をターゲット プロパティに割り当てることはできません。", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "エクスポートされた匿名クラス型のプロパティ '{0}' は、プライベートでないか保護されていない可能性があります。", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "型 '{1}' のプロパティ '{0}' は'{2}' インデックス型 '{3}' に割り当てることはできません。", - "Property_0_was_also_declared_here_2733": "ここではプロパティ '{0}' も宣言されています。", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "プロパティ '{0}' は、'{1}' の基底プロパティを上書きします。これが意図的である場合は初期化子を追加してください。そうでなければ、'declare' 修飾子を追加するか、冗長な宣言を削除してください。", - "Property_assignment_expected_1136": "プロパティの代入が必要です。", - "Property_destructuring_pattern_expected_1180": "プロパティの非構造化パターンが必要です。", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "プロパティには、--isolatedDeclarations を含む明示的な型注釈が必要です。", - "Property_or_signature_expected_1131": "プロパティまたはシグネチャが必要です。", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "プロパティ値には、文字列リテラル、数値リテラル、'true'、'false'、'null'、オブジェクト リテラルまたは配列リテラルのみ使用できます。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'for-of'、spread、destructuring で 'ES5' を対象とする場合は、iterables を完全にサポートします。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "エクスポートされたクラスのパブリック メソッド '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "エクスポートされたクラスのパブリック メソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "エクスポートされたクラスのパブリック メソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "エクスポートされたクラスのパブリック プロパティ '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "エクスポートされたクラスのパブリック プロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "エクスポートされたクラスのパブリック プロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "エクスポートされたクラスのパブリック静的メソッド '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "エクスポートされたクラスのパブリック静的メソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "エクスポートされたクラスのパブリック静的メソッド '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "先頭に '@param {object} {1}' がない場合、修飾名 '{0}' は許可されません。", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "関数パラメーターが読み取られていないときに、エラーを発生させます。", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "暗黙的な 'any' 型を含む式と宣言に関するエラーを発生させます。", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "暗黙的な 'any' 型を持つ 'this' 式でエラーが発生します。", - "Range_out_of_order_in_character_class_1517": "文字クラスの順序が正しくありません。", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' が有効な場合に型を再エクスポートするには、'export type' を使用する必要があります。", - "React_components_cannot_include_JSX_namespace_names_2639": "React コンポーネントに JSX 名前空間名を含めることはできません", - "Recommended_Options_6294": "推奨オプション", - "Redirect_output_structure_to_the_directory_6006": "ディレクトリへ出力構造をリダイレクトします。", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript によって自動的に読み込まれるプロジェクトの数を減らします。", - "Referenced_project_0_may_not_disable_emit_6310": "参照されたプロジェクト '{0}' は、生成を無効にできません。", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "参照されているプロジェクト '{0}' には、設定 \"composite\": true が必要です。", - "Referenced_via_0_from_file_1_1400": "ファイル '{1}' から '{0}' を介して参照されています", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。インポート パスに拡張機能を追加することを検討してください。", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。'{0}' を意図していましたか?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "ウォッチ プロセスからディレクトリの一覧を削除します。", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "ウォッチ モードの処理からファイルの一覧を削除します。", - "Remove_all_unnecessary_override_modifiers_95163": "不要な 'override' 修飾子をすべて削除", - "Remove_all_unnecessary_uses_of_await_95087": "不要な 'await' の使用をすべて削除する", - "Remove_all_unreachable_code_95051": "到達できないコードをすべて削除します", - "Remove_all_unused_labels_95054": "すべての未使用のラベルを削除します", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "関連する問題のあるすべてのアロー関数本体から中かっこを削除します", - "Remove_braces_from_arrow_function_95060": "アロー関数から中かっこを削除します", - "Remove_braces_from_arrow_function_body_95112": "アロー関数本体から中かっこを削除します", - "Remove_import_from_0_90005": "'{0}' からのインポートを削除", - "Remove_override_modifier_95161": "'override ' 修飾子の削除", - "Remove_parentheses_95126": "かっこの削除", - "Remove_template_tag_90011": "テンプレート タグを削除する", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 言語サーバーの JavaScript ファイルのソース コードの合計サイズについて 20 MB の上限を削除します。", - "Remove_type_from_import_declaration_from_0_90055": "\"{0}\" からインポート宣言から `type` を削除します", - "Remove_type_from_import_of_0_from_1_90056": "\"{1}\" から `{0}` のインポートから `type` を削除します", - "Remove_type_parameters_90012": "型パラメーターを削除する", - "Remove_unnecessary_await_95086": "不要な 'await' を削除する", - "Remove_unreachable_code_95050": "到達できないコードを削除します", - "Remove_unused_declaration_for_Colon_0_90004": "'{0}' に対する使用されていない宣言を削除する", - "Remove_unused_declarations_for_Colon_0_90041": "'{0}' に対する使用されていない宣言を削除してください", - "Remove_unused_destructuring_declaration_90039": "使用されていない非構造化宣言を削除してください", - "Remove_unused_label_95053": "未使用のラベルを削除します", - "Remove_variable_statement_90010": "変数のステートメントを削除します", - "Rename_param_tag_name_0_to_1_95173": "'@param' タグ名の名前を '{0}' から '{1}' に変更します", - "Replace_0_with_Promise_1_90036": "'{0}' を 'Promise<{1}>' に置き換える", - "Replace_all_unused_infer_with_unknown_90031": "未使用の 'infer' をすべて 'unknown' に置き換える", - "Replace_import_with_0_95015": "インポートを '{0}' に置換します。", - "Replace_infer_0_with_unknown_90030": "'infer {0}' を 'unknown' に置き換える", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "関数の一部のコード パスが値を返さない場合にエラーを報告します。", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch ステートメントに case のフォールスルーがある場合にエラーを報告します。", - "Report_errors_in_js_files_8019": ".js ファイルのエラーを報告します。", - "Report_errors_on_unused_locals_6134": "使用されていないローカルに関するエラーを報告します。", - "Report_errors_on_unused_parameters_6135": "使用されていないパラメーターに関するエラーを報告します。", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "他のツールが宣言ファイルを簡単に生成できるように、エクスポートに十分な注釈を必要とします。", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要素アクセスを使用するには、インデックス シグネチャからの宣言されていないプロパティが必要です。", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必須の型パラメーターの後に、オプションの型パラメーターを続けることはできません。", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "モジュール '{0}' の解決が場所 '{1}' のキャッシュに見つかりました。", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "種類参照指令 '{0}' の解決策は、場所 '{1}' のキャッシュには見つかりませんでした。", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "非相対名の解決に失敗しました。npm ライブラリで構成の更新が必要かどうかを確認するために、最新のノード解決機能を無効にしています。", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "非相対名の解決に失敗しました。'--moduleResolution bundler' を使用して、プロジェクトで構成の更新が必要かどうかを確認しています。", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'keyof' を文字列値のプロパティ名のみに解決します (数字または記号なし)。", - "Resolved_under_condition_0_6414": "条件 '{0}' で解決されました。", - "Resolving_in_0_mode_with_conditions_1_6402": "条件 {1} を使用して {0} モードで解決しています。", - "Resolving_module_0_from_1_6086": "======== '{1}' からモジュール '{0}' を解決しています。========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "ベース URL '{1}' - '{2}' に相対するモジュール名 '{0}' を解決しています。", - "Resolving_real_path_for_0_result_1_6130": "'{0}' の実際のパスを解決しています。結果は '{1}' です。", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== ファイル '{1}' のある種類参照指令 '{0}' の解決 ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリ '{2}'。========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリは未設定。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリ '{1}'。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリは未設定。========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "カスタム typeRoots を指定するプログラムの型参照ディレクティブを解決しています。'node_modules' フォルダーでの参照をスキップします。", - "Resolving_with_primary_search_path_0_6121": "プライマリ検索パス '{0}' で解決しています。", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest パラメーター '{0}' の型は暗黙的に 'any[]' になります。", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "rest パラメーター '{0}' の型は暗黙的に 'any[]' 型ですが、使い方からより良い型を推論する場合があります。", - "Rest_types_may_only_be_created_from_object_types_2700": "rest 型はオブジェクトの種類からのみ作成できます。", - "Return_type_annotation_circularly_references_itself_2577": "戻り値の型の注釈は、それ自身を循環参照します。", - "Return_type_must_be_inferred_from_a_function_95149": "戻り値の型は関数から推論される必要があります", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "エクスポートされたインターフェイスのコンストラクター シグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "エクスポートされたインターフェイスのコンストラクター シグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "コンストラクター シグネチャの戻り値の型は、クラスのインスタンス型に割り当て可能でなければなりません。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "エクスポートされた関数の戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "エクスポートされた関数の戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "エクスポートされた関数の戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "エクスポートされたインターフェイスのインデックス シグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "エクスポートされたインターフェイスのインデックス シグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "エクスポートされたインターフェイスのメソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "エクスポートされたインターフェイスのメソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が、プライベート名 '{1}' を持っているか、使用しています。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "エクスポートされたクラスのパブリック メソッドの戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "エクスポートされたクラスのパブリック メソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "エクスポートされたクラスのパブリック メソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が、プライベート名 '{1}' を持っているか、使用しています。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用しましたが、解決できませんでした。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "場所 '{2}' からキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用しようとしましたが、解決されませんでした。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。", - "Rewrite_all_as_indexed_access_types_95034": "すべてをインデックス付きアクセス型として書き換えます", - "Rewrite_as_the_indexed_access_type_0_90026": "インデックス付きのアクセスの種類 '{0}' として書き換える", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "相対インポート パスの '.ts'、'.tsx'、'.mts'、および '.cts' ファイル拡張子を、出力ファイルの JavaScript と同等の拡張子に書き換えます。", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? の右オペランド左オペランドが NULL 値になることがないため、到達できません。", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "ルート ディレクトリを決定できません。プライマリ検索パスをスキップします。", - "Root_file_specified_for_compilation_1427": "コンパイル用に指定されたルート ファイル", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "戦略", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "プロジェクトのインクリメンタル コンパイルを可能にするには、.tsbuildinfo ファイルを保存します。", - "Saw_non_matching_condition_0_6405": "一致しない条件 '{0}' がありました。", - "Scoped_package_detected_looking_in_0_6182": "'{0}' 内を検索して、スコープ パッケージが検出されました", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "すべての先祖 node_modules ディレクトリでフォールバック拡張子を検索しています: {0}。", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "すべての先祖 node_modules ディレクトリで優先する拡張子を検索しています: {0}。", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "https://aka.ms/tsconfig/module も参照", - "Selection_is_not_a_valid_statement_or_statements_95155": "選択内容は有効なステートメントではありません", - "Selection_is_not_a_valid_type_node_95133": "選択は有効な型ノードではありません", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "生成された JavaScript の JavaScript 言語バージョンを設定し、互換性のあるライブラリ宣言を含めます。", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript からのメッセージの言語を設定します。これは生成には影響を与えません。", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "構成ファイルの 'module' オプションを '{0}' に設定する", - "Set_the_newline_character_for_emitting_files_6659": "ファイルを生成するための改行文字を設定します。", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "構成ファイルの 'target' オプションを '{0}' に設定する", - "Setters_cannot_return_a_value_2408": "セッターは値を返せません。", - "Show_all_compiler_options_6169": "コンパイラ オプションをすべて表示します。", - "Show_diagnostic_information_6149": "診断情報を表示します。", - "Show_verbose_diagnostic_information_6150": "詳細な診断情報を表示します。", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "ビルドされる (または '--clean' で指定される場合は、削除される) 内容を表示する", - "Signature_0_must_be_a_type_predicate_1224": "シグネチャ '{0}' は型の述語である必要があります。", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "署名宣言は TypeScript ファイルでのみ使用できます。", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "アップストリーム プロジェクトのエラー時にダウンストリーム プロジェクトのビルドをスキップします。", - "Skip_type_checking_all_d_ts_files_6693": "すべての .d.ts ファイルについて型チェックをスキップします。", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript に含まれている .d.ts ファイルの型チェックをスキップします。", - "Skip_type_checking_of_declaration_files_6012": "宣言ファイルの型チェックをスキップします。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "プロジェクト '{0}' のビルドは、その依存関係 '{1}' にエラーがあるため、スキップしています", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' のビルドをスキップしています", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "絶対 URI のように見えるモジュール '{0}' をスキップしています。ターゲット ファイルの種類: {1}。", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' が指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", - "Source_has_0_element_s_but_target_allows_only_1_2619": "ソースには {0} 個の要素がありますが、ターゲットで使用できるのは {1} 個のみです。", - "Source_has_0_element_s_but_target_requires_1_2618": "ソースには {0} 個の要素が含まれていますが、ターゲットには {1} 個が必要です。", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "ソースには、ターゲットの位置 {0} にある必須要素と一致するものがありません。", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "ソースには、ターゲットの位置 {0} にある可変個引数要素と一致するものがありません。", - "Specify_ECMAScript_target_version_6015": "ECMAScript ターゲット バージョンを指定します。", - "Specify_JSX_code_generation_6080": "JSX コードの生成を指定します。", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "1 つの JavaScript ファイルにすべての出力をバンドルするファイルを指定します。'declaration' が true の場合は、すべての .d.ts 出力をバンドルするファイルも指定します。", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "コンパイルに含めるファイルに一致する glob パターンの一覧を指定します。", - "Specify_a_list_of_language_service_plugins_to_include_6681": "含める言語サービス プラグインの一覧を指定します。", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "ターゲットのランタイム環境を記述する、バンドルされたライブラリ宣言ファイルのセットを指定します。", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "追加の検索場所にインポートを再マップするエントリのセットを指定します。", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "プロジェクトのパスを指定するオブジェクトの配列を指定します。プロジェクトの参照で使用されます。", - "Specify_an_output_folder_for_all_emitted_files_6678": "すべての生成されたファイルに対して出力フォルダーを指定します。", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "型にのみ使用されるインポートの生成または確認動作を指定します。", - "Specify_file_to_store_incremental_compilation_information_6380": "増分コンパイル情報を格納するファイルを指定する", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript を使用して、指定されたモジュール指定子でファイルを検索する方法を指定します。", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "再帰的なファイル ウォッチ機能を持たないシステムでディレクトリをウォッチするための方法を指定します。", - "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript ウォッチ モードの動作方法を指定します。", - "Specify_library_files_to_be_included_in_the_compilation_6079": "コンパイルに含めるライブラリ ファイルを指定します。", - "Specify_module_code_generation_6016": "モジュール コードの生成を指定します。", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' を使用するときに JSX ファクトリ関数のインポートに使用するモジュール指定子を指定します。", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' のように動作する複数のフォルダーを指定します。", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "設定の継承元となる基本構成ファイルへのパスまたはノード モジュール参照を 1 つまたは複数指定します。", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "宣言ファイルの自動取得に関するオプションを指定します。", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "ファイル システムのイベントを使用して作成できなかった場合に、ポーリング監視を作成する方法を指定します: 'FixedInterval' (既定)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "再帰的な監視をネイティブでサポートしていないプラットフォーム上のディレクトリを監視する方法を指定します: 'UseFsEvents' (既定)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "ファイルの監視方法を指定します: 'FixedPollingInterval' (既定)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 発行を対象とするときにフラグメントに使用される JSX フラグメント参照を指定します ('React.Fragment' や 'Fragment' など)。", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 発行 ('React.createElement' や 'h') などを対象とするときに使用する JSX ファクトリ関数を指定します。", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 発行を対象とするときに使用される JSX ファクトリ関数を指定します ('React.createElement' や 'h' など)。", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' コンパイラ オプションを指定して 'react' JSX 生成をターゲットにするときに使用する JSX フラグメント ファクトリ関数を指定します (例: 'Fragment')。", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "非相対モジュール名を解決するための基本ディレクトリを指定します。", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "ファイルの生成時に使用する行シーケンスの末尾を指定します: 'CRLF' (dos) または 'LF' (unix)。", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "デバッガーがソースの場所の代わりに TypeScript ファイルを検索する必要のある場所を指定します。", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "デバッガーが、生成された場所の代わりにマップ ファイルを検索する必要のある場所を指定します。", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' で JavaScript ファイルを確認するために使用するフォルダーの深さの最大値を指定します。'allowJs' にのみ適用可能です。", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' と 'jsxs' のファクトリ関数をインポートするために使用されるモジュール指定子を指定します。例: react", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' に対して呼び出されたオブジェクトを指定します。これは、'react' JSX 発行を対象とする場合にのみ適用されます。", - "Specify_the_output_directory_for_generated_declaration_files_6613": "生成された宣言ファイルの出力ディレクトリを指定します。", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo 増分コンパイル ファイルへのパスを指定します。", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "入力ファイルのルート ディレクトリを指定します。--outDir とともに、出力ディレクトリ構造の制御に使用します。", - "Specify_the_root_folder_within_your_source_files_6690": "ソース ファイル内のルート フォルダーを指定します。", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "デバッガーのルート パスを指定して、参照ソース コードを検索します。", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "ソース ファイルに参照されずに含める型のパッケージ名を指定します。", - "Specify_what_JSX_code_is_generated_6646": "生成済みの JSX コードを指定します。", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "システムがネイティブ ファイル ウォッチャーを使い果たした場合に、ウォッチャーが使用するアプローチを指定します。", - "Specify_what_module_code_is_generated_6657": "生成済みのモジュール コードを指定します。", - "Split_all_invalid_type_only_imports_1367": "無効な型のみのインポートをすべて分割する", - "Split_into_two_separate_import_declarations_1366": "2 つの別個のインポート宣言に分割する", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 式のスプレッド演算子は ECMAScript 5 以上をターゲットにする場合にのみ使用できます。", - "Spread_types_may_only_be_created_from_object_types_2698": "spread 型はオブジェクトの種類からのみ作成できます。", - "Starting_compilation_in_watch_mode_6031": "ウォッチ モードでのコンパイルを開始しています...", - "Statement_expected_1129": "ステートメントが必要です。", - "Statements_are_not_allowed_in_ambient_contexts_1036": "ステートメントは環境コンテキストでは使用できません。", - "Static_members_cannot_reference_class_type_parameters_2302": "静的メンバーはクラスの型パラメーターを参照できません。", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静的プロパティ '{0}' がコンストラクター関数 '{1}' のビルトイン プロパティ 'Function.{0}' と競合しています。", - "Stricter_Typechecking_Options_6292": "より厳密な型チェック オプション", - "String_literal_expected_1141": "文字列リテラルが必要です。", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' フラグが 'es2015' または 'es2020' に設定されている場合、文字列リテラルのインポートおよびエクスポート名はサポートされません。", - "String_literal_with_double_quotes_expected_1327": "二重引用符を含む文字列リテラルが必要です。", - "Style_Options_6293": "スタイル オプション", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "色とコンテキストを使用してエラーとメッセージにスタイルを適用します (試験的)。", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "マイナス記号がある場合は、サブパターン フラグが存在する必要があります。", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後続のプロパティ宣言は同じ型でなければなりません。プロパティ '{0}' の型は '{1}' である必要がありますが、ここでは型が '{2}' になっています。", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後続の変数宣言は同じ型でなければなりません。変数 '{0}' の型は '{1}' である必要がありますが、'{2}' になっています。", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "パターン '{1}' の代入 '{0}' の型が正しくありません。必要な型は 'string' ですが、'{2}' を取得しました。", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "パターン '{1}' の置換 '{0}' に使用できる '*' 文字は 1 文字だけです。", - "Substitutions_for_pattern_0_should_be_an_array_5063": "パターン '{0}' への代入は配列でなければなりません。", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "パターン '{0}' への代入を空の配列にすることはできません。", - "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json ファイルが正常に作成されました。", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "super の呼び出しは、コンストラクターの外部、またはコンストラクター内の入れ子になった関数では使用できません。", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "オブジェクト リテラルの過剰なプロパティ確認を抑制します。", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "インデックス シグニチャのないオブジェクトにインデックスを作成するため、noImplicitAny エラーを抑制します。", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "インデックス シグネチャのないオブジェクトにインデックスを作成する際、'noImplicitAny' エラーを表示しません。", - "Switch_each_misused_0_to_1_95138": "誤用されている各 '{0}' を '{1}' に切り替えてください", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "再帰的なウォッチをネイティブでサポートしていないプラットフォーム上で、同期的にコールバックを呼び出してディレクトリ ウォッチャーの状態を更新します。", - "Syntax_Colon_0_6023": "構文: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "タグ '{0}' には少なくとも '{1}' 個の引数が必要ですが、JSX ファクトリ '{2}' で提供されるのは最大 '{3}' 個です。", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "タグ付きテンプレート式は、省略可能なチェーンでは許可されていません。", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "ターゲットには {0} 個の要素のみを使用できますが、ソースにはそれより多くを指定できます。", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "ターゲットには {0} 個の要素が必要ですが、ソースに指定する数はそれより少なくても構いません。", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "ターゲット署名の引数が少なすぎます。{0} 以上が必要ですが、{1} でした。", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾子は TypeScript ファイルでのみ使用できます。", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 演算子を 'symbol' 型に適用することはできません。", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 演算子はブール型には使用できません。代わりに '{1}' を使用してください。", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同期反復子の '{0}' プロパティはメソッドである必要があります。", - "The_0_property_of_an_iterator_must_be_a_method_2767": "反復子の '{0}' プロパティはメソッドである必要があります。", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 型を割り当てることができるその他の型はごく少数です。代わりの候補には 'any' 型があります。", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) フラグと Unicode Sets (v) フラグを同時に設定することはできません。", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' オブジェクトは、ES5 のアロー関数で参照することはできません。標準の関数式の使用を考慮してください。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' オブジェクトは、ES5 の非同期関数またはメソッドで参照することはできません。標準の関数またはメソッドを使用することを検討してください。", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' ステートメントの本文を空のステートメントにすることはできません。", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "呼び出しはこの実装に対して成功した可能性がありますが、オーバーロードの実装シグネチャは外部からは参照できません。", - "The_character_set_of_the_input_files_6163": "入力ファイルの文字セット。", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "含まれているアロー関数は、'this' のグローバル値をキャプチャします。", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "含まれている関数またはモジュールの本体は、制御フロー解析には大きすぎます。", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "現在のファイルは CommonJS モジュールであり、最上位レベルでは 'await' を使用できません。", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "現在のファイルは CommonJS モジュールであり、このインポートでは 'require' 呼び出しが生成されますが、参照ファイルは ECMAScript モジュールであるため、'require' ではインポートできません。代わりに動的な 'import(\"{0}\")' 呼び出しを記述することを検討してください。", - "The_current_host_does_not_support_the_0_option_5001": "現在のホストは '{0}' オプションをサポートしていません。", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "使用するつもりだったと思われる '{0}' の宣言はここで定義されています", - "The_declaration_was_marked_as_deprecated_here_2798": "この宣言はここで非推奨とマークされました。", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "予期された型は、型 '{1}' に対してここで宣言されたプロパティ '{0}' から取得されています", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "予期された型は、このシグネチャの戻り値の型に基づいています。", - "The_expected_type_comes_from_this_index_signature_6501": "予期された型は、このインデックス シグネチャに基づいています。", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "エクスポートの代入の式は、環境コンテキストの識別子または修飾名にする必要があります。", - "The_file_is_in_the_program_because_Colon_1430": "ファイルがプログラム内に存在します。理由:", - "The_files_list_in_config_file_0_is_empty_18002": "構成ファイル '{0}' の 'files' リストが空です。", - "The_first_export_default_is_here_2752": "最初のエクスポートの既定値はここにあります。", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise では、'then' メソッドの最初のパラメーターはコールバックでなければなりません。", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "グローバル型 'JSX.{0}' には複数のプロパティが含まれていない可能性があります。", - "The_implementation_signature_is_declared_here_2750": "実装シグネチャはここで宣言されています。", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "'import.meta' メタプロパティは、CommonJS 出力にビルドするファイルでは許可されていません。", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "'import.meta' メタプロパティは、'--module' オプションが 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、または 'nodenext' である場合にのみ許可されます。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' の推論された型には、'{1}' への参照なしで名前を付けることはできません。これは、移植性がない可能性があります。型の注釈が必要です。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' の推論された型は、循環構造を持つ型を参照しています。この型のシリアル化は自明ではありません。型の注釈が必要です。", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' の推定型はアクセス不可能な '{1}' 型を参照します。型の注釈が必要です。", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "このノードの推定型は、コンパイラがシリアル化する最大長を超えています。明示的な型の注釈が必要です。", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣言の初期化子は、'[Symbol.dispose]()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣言の初期化子は、'[Symbol.asyncDispose]()' または '[Symbol.dispose]()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "交差 '{0}' は 'なし' に縮小されました。プロパティ '{1}' が複数の構成要素に存在し、一部ではプライベートであるためです。", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "交差 '{0}' は 'なし' に縮小されました。一部の構成要素でプロパティ '{1}' の型が競合しているためです。", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'組み込み' キーワードは、コンパイラが提供する組み込み型を宣言する場合にのみ使用できます。", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "'jsxFactory' コンパイラ オプションで JSX フラグメントを使用するには、'jsxFragmentFactory' コンパイラ オプションを指定する必要があります。", - "The_last_overload_gave_the_following_error_2770": "前回のオーバーロードにより、次のエラーが発生しました。", - "The_last_overload_is_declared_here_2771": "前回のオーバーロードはここで宣言されています。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' ステートメントの左側を非構造化パターンにすることはできません。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ステートメントの左側を 'using' 宣言にすることはできません。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ステートメントの左側を 'await using' 宣言にすることはできません。", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' ステートメントの左側で型の注釈を使用することはできません。", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' ステートメントの左側の型は 'string' または 'any' でなければなりません。", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' ステートメントの左側で型の注釈を使用することはできません。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' ステートメントの左辺には、'async' を指定できません。", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術演算の左辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "代入式の左辺には、省略可能なプロパティ アクセスを指定できません。", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "代入式の左側は、変数またはプロパティ アクセスである必要があります。", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 式の左側は、右側の '[Symbol.hasInstance]' メソッドの最初の引数に割り当て可能である必要があります。", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 式の左辺には、'any' 型、オブジェクト型、または型パラメーターを指定してください。", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "ユーザーにメッセージを表示するときに使用するロケール (例: 'en-us')", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules の下を検索して JavaScript ファイルを読み込む依存関係の最大深度です。", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 演算子のオペランドには、private 識別子を指定できません。", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 演算子のオペランドには、読み取り専用のプロパティを指定できません。", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 演算子のオペランドはプロパティ参照である必要があります。", - "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 演算子のオペランドはオプションである必要があります。", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "インクリメント演算子またはデクリメント演算子のオペランドには、省略可能なプロパティ アクセスを指定することはできません。", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "インクリメントまたはデクリメント演算子のオペランドは、変数またはプロパティ アクセスである必要があります。", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "パーサーは、ここで '{0}' トークンに一致する '{1}' を予期していました。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "プロジェクト ルートはあいまいですが、ファイル '{1}' のエクスポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "プロジェクト ルートはあいまいですが、ファイル '{1}' のインポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "同じスペルの別の private 識別子によってシャドウされているため、このクラス内の型 '{1}' ではプロパティ '{0}' にアクセスできません。", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "パラメーター デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "プロパティ デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同期関数の戻り値の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。'Promise<{0}>' と書き込むつもりでしたか?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' ステートメントの右側には、'any' 型、オブジェクト型、型パラメーターを指定する必要がありますが、ここでは型 '{0}' が指定されています。", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術演算の右辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 式の右側には、型 'any'、クラス、関数、または 'Function' インターフェイス型に割り当て可能なその他の型、または 'Symbol.hasInstance' メソッドを持つオブジェクト型のいずれかを指定する必要があります。", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 式の右側をインスタンス化式にすることはできません。", - "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' ファイルのルート値はオブジェクトである必要があります。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには {0} が必要です。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには少なくとも {0} が必要です。", - "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' のシャドウ宣言はここで定義されています", - "The_signature_0_of_1_is_deprecated_6387": "'{1}' のシグネチャ '{0}' は非推奨です。", - "The_specified_path_does_not_exist_Colon_0_5058": "指定されたパスがありません: '{0}'。", - "The_tag_was_first_specified_here_8034": "このタグは最初にこちらで指定されました。", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "オブジェクト rest の代入先を、省略可能なプロパティ アクセスにすることはできません。", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "オブジェクトの残り部分の代入の対象は、変数またはプロパティ アクセスである必要があります。", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "型 '{0}' の 'this' コンテキストを型 '{1}' のメソッドの 'this' に割り当てることはできません。", - "The_this_types_of_each_signature_are_incompatible_2685": "各シグネチャの 'this' 型に互換性がありません。", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "型 '{0}' は 'readonly' であるため、変更可能な型 '{1}' に代入することはできません。", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "名前付きエクスポートで、export ステートメントに 'export type' が使用されている場合、'type' 修飾子は使用できません。", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "名前付きインポートで、import ステートメントに 'import type' が使用されている場合、'type' 修飾子は使用できません。", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "このノードの種類は、そのプロパティ '{0}' をシリアル化できないため、シリアル化できません。", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同期反復子の '{0}()' メソッドによって返される型は、'value' プロパティを持つ型に対する promise である必要があります。", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "反復子の '{0}()' メソッドによって返される型には 'value' プロパティが必要です。", - "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' の型は、これらの型同士で互換性がありません。", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' によって返された型は、これらの型同士で互換性がありません。", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "値 '{0}' はここでは使用できません。", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' ステートメントの変数宣言に初期化子を指定することはできません。", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' ステートメントの変数宣言に初期化子を指定することはできません。", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ステートメントはサポートされていません。'with' ブロック内のすべてのシンボルの型は 'any' になります。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' に型がありますが、現在の 'moduleResolution' 設定ではこの結果を解決できませんでした。'node16'、'nodenext'、または 'bundler' への更新を検討してください。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' に型がありますが、package.json \"exports\" を尊重しながらこの結果を解決できませんでした。'{1}' ライブラリの package.json または入力を更新する必要がある場合があります。", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "この正規表現には '{0}' という名前のキャプチャ グループはありません。", - "There_is_nothing_available_for_repetition_1507": "繰り返しに使用できるものがありません。", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "この JSX タグでは '{0}' がスコープ内に存在する必要がありますが、見つかりませんでした。", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "この JSX タグにはモジュール パス '{0}' が存在する必要がありますが、見つかりませんでした。適切なパッケージの種類がインストールされていることを確認してください。", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "この JSX タグの '{0}' prop は型 '{1}' の単一の子を予期しますが、複数の子が指定されました。", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "この JSX タグの '{0}' prop は複数の子を必要とする型 '{1}' を予期しますが、単一の子が指定されました。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "この前方参照は、存在しないグループを参照しています。この正規表現にはキャプチャ グループがありません。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "この前方参照は、存在しないグループを参照しています。この正規表現には {0} キャプチャ グループのみがあります。", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "このバイナリ式が NULL 値になることはありません。かっこを忘れていませんか?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "この文字を正規表現内でエスケープすることはできません。", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' 型と '{1}' 型が重複していないため、この比較は意図したとおりに表示されない可能性があります。", - "This_condition_will_always_return_0_2845": "この条件は常に '{0}' を返します。", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript が値ではなく参照でオブジェクトを比較するため、この条件は常に '{0}' を返します。", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "'{0}' が常に定義されているため、この条件は常に true を返します。", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "この関数は常に定義されているため、この条件は常に true を返します。代わりにこれを呼び出すことを意図していましたか?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "このコンストラクター関数はクラス宣言に変換される可能性があります。", - "This_expression_is_always_nullish_2871": "この式は常に null です。", - "This_expression_is_never_nullish_2881": "この式が NULL 値になることはありません。", - "This_expression_is_not_callable_2349": "この式は呼び出し可能ではありません。", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "この式は 'get' アクセサーであるため、呼び出すことができません。'()' なしで使用しますか?", - "This_expression_is_not_constructable_2351": "この式はコンストラクト可能ではありません。", - "This_file_already_has_a_default_export_95130": "このファイルには、既に既定のエクスポートがあります", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "このインポート パスは別のプロジェクトに解決され、プロジェクトの出力ファイル間の相対パスが入力ファイル間の相対パスと同じではないため、書き換えは安全ではありません。", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "このインポートでは、'{0}' 拡張子を使用して入力 TypeScript ファイルに解決されますが、生成中に書き換えられるのは相対パスではないためです。", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "これは拡張される宣言です。拡張する側の宣言を同じファイルに移動することを検討してください。", - "This_kind_of_expression_is_always_falsy_2873": "この種の式は常に false です。", - "This_kind_of_expression_is_always_truthy_2872": "この種の式は常に true です。", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "これは非同期関数に変換できます。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに '@override' タグを含む JSDoc コメントを指定することはできません。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに 'override' タグを含む JSDoc コメントを指定することはできません。'{1}' ということですか?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "このメンバーを含んでいるクラス '{0}' が別のクラスを拡張していないため、このメンバーに '@override' タグを含む JSDoc コメントを指定することはできません。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "このメンバーの名前は動的であるため、'@override' タグが含まれた JSDoc コメントを保持することはできません。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。'{1}' ということですか?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "このメンバーを含んでいるクラス '{0}' が別のクラスを拡張していないため、このメンバーに 'override' 修飾子を指定することはできません。", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "名前が動的であるため、このメンバーに 'override' 修飾子を指定することはできません。", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "このメンバーには、基底クラス '{0}' のメンバーをオーバーライドするため、'@override' タグを含む JSDoc コメントが必要です。", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、'override' 修飾子を指定する必要があります。", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "このメンバーは、基底クラス '{0}' で宣言された抽象メソッドをオーバーライドするため、'override' 修飾子を指定する必要があります。", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "このモジュールは、'{0}' フラグをオンにして既定のエクスポートを参照することにより、ECMAScript のインポートまたはエクスポートのみを使用して参照できます。", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "このモジュールは、'export =' を使用して宣言されており、'{0}' フラグを使用する場合は既定のインポートでのみ使用できます。", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "この操作は簡略化できます。このシフトは '{0} {1} {2}' と同じです。", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "このオーバーロードは、戻り値の型の注釈がないため、型 '{0}' を暗黙的に返します。", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "このオーバーロード シグネチャには、実装シグネチャとの互換性はありません。", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "このパラメーターは、'use strict' ディレクティブと共に使用することはできません。", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "このパラメーター プロパティには、基底クラス '{0}' のメンバーをオーバーライドするため、'@override' タグを含む JSDoc コメントが必要です。", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、パラメーター プロパティに 'override' 修飾子がある必要があります。", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "この正規表現フラグをサブパターン内で切り替えることはできません。", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "この正規表現フラグは、'{0}' 以降をターゲットにする場合にのみ使用できます。", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "この相対インポート パスは、ファイル名のようですが、実際には \"{0}\" に解決されるため、書き換えは安全ではありません。", - "This_spread_always_overwrites_this_property_2785": "このスプレッドは、常にこのプロパティを上書きします。", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly' が有効な場合、この構文は使用できません。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "この構文は、拡張子が .mts または .cts のファイルで予約されています。末尾のコンマまたは明示的な制約を追加します。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "この構文は、拡張子が .mts または .cts のファイルで予約されています。代わりに `as` 式を使用してください。", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "この構文にはインポートされたヘルパーが必要ですが、モジュール '{0}' が見つかりません。", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "この構文には、'{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' には存在しません。'{0}' のバージョンのアップグレードを検討してください。", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "この構文には、{2} パラメーターを持つ '{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' にあるものと互換性がありません。'{0}' のバージョンをアップグレードすることをご検討ください。", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "この型パラメーターには 'extends {0}' 制約が必要な場合があります。", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "この 'import' の使用は無効です。'import()' 呼び出しは書き込むことができますが、かっこが必要であり、型引数を指定することはできません。", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "このファイルを ECMAScript モジュールに変換するには、フィールド '\"type\": \"module\"' を '{0}' に追加します。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、フィールド '\"type\": \"module\"' を '{1}' に追加します。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "このファイルを ECMAScript モジュールに変換するには、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "トップレベルの 'await' 式は、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "トップレベルの 'await using' ステートメントは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts ファイルのトップレベルの宣言は、'declare' または 'export' 修飾子で始める必要があります。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "トップレベルの 'for await' ループは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", - "Trailing_comma_not_allowed_1009": "末尾にコンマは使用できません。", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "個々のモジュールとして各ファイルをトランスパイルします ('ts.transpileModule' に類似)。", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "存在する場合は `npm i --save-dev @types/{1}` を試すか、`declare module '{0}';` を含む新しい宣言 (.d.ts) ファイルを追加します", - "Trying_other_entries_in_rootDirs_6110": "'rootDirs' の他のエントリを試しています。", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "代入 '{0}' を試しています。候補のモジュールの場所: '{1}'。", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長さ '{1}' のタプル型 '{0}' にインデックス '{2}' の要素がありません。", - "Tuple_type_arguments_circularly_reference_themselves_4110": "タプル型の引数は、それ自体を循環参照します。", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' の種類は、'--downlevelIteration' フラグを使用している場合、または 'es2015' 以降の '--target' を使用している場合にのみ反復処理できます。", - "Type_0_cannot_be_used_as_an_index_type_2538": "型 '{0}' はインデックスの型として使用できません。", - "Type_0_cannot_be_used_to_index_type_1_2536": "型 '{0}' はインデックスの種類 '{1}' に使用できません。", - "Type_0_does_not_satisfy_the_constraint_1_2344": "型 '{0}' は制約 '{1}' を満たしていません。", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "型 '{0}' は想定された型 '{1}' を満たしていません。", - "Type_0_has_no_call_signatures_2757": "型 '{0}' には呼び出しシグネチャがありません。", - "Type_0_has_no_construct_signatures_2761": "型 '{0}' にはコンストラクト シグネチャがありません。", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "型 '{0}' には型 '{1}' と一致するインデックス シグネチャがありません。", - "Type_0_has_no_properties_in_common_with_type_1_2559": "型 '{0}' には型 '{1}' と共通のプロパティがありません。", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "型 '{0}' には、型引数リストを適用できるシグネチャがありません。", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "型 '{0}' は汎用であり、読み取り専用にしかインデックスを作成できません。", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}、{3} など。", - "Type_0_is_not_a_constructor_function_type_2507": "型 '{0}' はコンストラクター関数型ではありません。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "型 '{0}' は Promise と互換性のあるコンストラクター値を参照しないため、ES5 において有効な非同期関数の戻り値の型ではありません。", - "Type_0_is_not_an_array_type_2461": "型 '{0}' は配列型ではありません。", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "型 '{0}' は配列型でも文字列型でもありません。", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "型 '{0}' は、配列型でも文字列型でもないか、反復子を返す '[Symbol.iterator]()' メソッドを持っていません。", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "型 '{0}' は、配列型ではないか、反復子を返す '[Symbol.iterator]()' メソッドを持っていません。", - "Type_0_is_not_assignable_to_type_1_2322": "型 '{0}' を型 '{1}' に割り当てることはできません。", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "型 '{0}' を型 '{1}' に割り当てることはできません。'{2}' でよろしいですか?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "型 '{0}' は型 '{1}' に割り当てられません。同じ名前で 2 つの異なる型が存在しますが、これは関連していません。", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "型 '{0}' は、差異注釈によって暗黙的に示されているように、型 '{1}' に割り当てできません。", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "型 '{0}' は、計算された列挙型メンバーの要求どおりに型 '{1}' に割り当てることはできません。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットの型に 'undefined' を追加することを検討してください。", - "Type_0_is_not_comparable_to_type_1_2678": "型 '{0}' は型 '{1}' と比較できません。", - "Type_0_is_not_generic_2315": "型 '{0}' はジェネリックではありません。", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "型 '{0}' は、'in' 演算子の右オペランドとして許可されていないプリミティブ値を表す場合があります。", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "型 '{0}' には、非同期反復子を返す '[Symbol.asyncIterator]()' メソッドが必要です。", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "型 '{0}' には、反復子を返す '[Symbol.iterator]()' メソッドが必要です。", - "Type_0_provides_no_match_for_the_signature_1_2658": "型 '{0}' にはシグネチャ '{1}' に一致するものがありません。", - "Type_0_recursively_references_itself_as_a_base_type_2310": "型 '{0}' が、基本型としてそれ自体を再帰的に参照しています。", - "Type_Checking_6248": "種類を確認中", - "Type_alias_0_circularly_references_itself_2456": "型のエイリアス '{0}' が自身を循環参照しています。", - "Type_alias_must_be_given_a_name_1439": "型のエイリアスには名前を指定する必要があります。", - "Type_alias_name_cannot_be_0_2457": "型のエイリアス名を '{0}' にすることはできません。", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "型のエイリアスは、TypeScript ファイルでのみ使用できます。", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "型の注釈はコンストラクター宣言では使用できません。", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "型の注釈は、TypeScript ファイルでのみ使用できます。", - "Type_argument_expected_1140": "型引数が必要です。", - "Type_argument_list_cannot_be_empty_1099": "型引数リストを空にすることはできません。", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "型引数は TypeScript ファイルでのみ使用できます。", - "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' の型引数はそれ自体を循環参照します。", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "型アサーション式は TypeScript ファイルでのみ使用できます。", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "ソースの位置 {0} にある型は、ターゲットの位置 {1} にある型と互換性がありません。", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "ソースの位置 {0} から {1} にある型は、ターゲットの位置 {2} にある型と互換性がありません。", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "プライベート名 '{0}' を含む型は、--isolatedDeclarations と一緒には使用できません。", - "Type_declaration_files_to_be_included_in_compilation_6124": "コンパイルに含む型宣言ファイル。", - "Type_expected_1110": "型が必要です。", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "型インポート アサーションには、キー `resolution-mode` が 1 つだけ必要です。値は `import` または `require` です。", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "CommonJS モジュールからの ECMAScript モジュールの型のインポートには、'resolution-mode' 属性が必要です。", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "型のインスタンス化は非常に深く、無限である可能性があります。", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "型は、それ自身の 'then' メソッドのフルフィルメント コールバック内で直接または間接的に参照されます。", - "Type_library_referenced_via_0_from_file_1_1402": "ファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId が '{2}' のファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' オペランドの型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "計算されたプロパティの値の型は '{0}' です。これは、型 '{1}' に代入することはできません。", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "インスタンス メンバー変数 '{0}' の型は、コンストラクターで宣言された識別子 '{1}' を参照できません。", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' オペランドの反復要素の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "マップされた型 '{1}' で、プロパティ '{0}' の型によってそれ自体が循環参照されています。", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "非同期ジェネレーター内の 'yield' オペランドの型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "CommonJS モジュールからの ECMAScript モジュールの型のみのインポートには、'resolution-mode' 属性が必要です。", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "型はこのインポートで生成されます。名前空間スタイルのインポートは、呼び出すこともコンストラクトすることもできず、実行時にエラーが発生します。代わりに、ここで既定のインポートまたはインポートの require を使用することを検討してください。", - "Type_parameter_0_has_a_circular_constraint_2313": "型パラメーター '{0}' に循環制約があります。", - "Type_parameter_0_has_a_circular_default_2716": "型パラメーター '{0}' に循環既定値があります。", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "エクスポートされたインターフェイスの呼び出しシグネチャの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "エクスポートされたインターフェイスのコンストラクター シグネチャの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "エクスポートされたクラスの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "エクスポートされた関数の型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "エクスポートされたインターフェイスの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "エクスポートされたマップ済みのオブジェクト型の型パラメーター '{0}' が、プライベート名 '{1}' を使用しています。", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "エクスポートした型のエイリアスの型パラメーター '{0}' にプライベート名 '{1}' が指定されているか、これを使用しています。", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "エクスポートされたインターフェイスのメソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "エクスポートされたクラスのパブリック メソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "エクスポートされたクラスのパブリック静的メソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", - "Type_parameter_declaration_expected_1139": "型パラメーターの宣言が必要です。", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "型パラメーターの宣言は TypeScript ファイルでのみ使用できます。", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "型パラメーターの既定値は、以前に宣言された型パラメーターのみを参照できます。", - "Type_parameter_list_cannot_be_empty_1098": "型パラメーター リストを空にすることはできません。", - "Type_parameter_name_cannot_be_0_2368": "型パラメーター名を '{0}' にすることはできません。", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "型パラメーターはコンストラクター宣言では使用できません。", - "Type_predicate_0_is_not_assignable_to_1_1226": "型の述語 '{0}' を '{1}' に割り当てることはできません。", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "型では大きすぎて表すことができないタプル型を生成します。", - "Type_reference_directive_0_was_not_resolved_6120": "======== 型参照ディレクティブ '{0}' が解決されませんでした。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました。プライマリ: {2}。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}'、プライマリ: {3})。========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "型充足式は TypeScript ファイルでのみ使用できます。", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "JavaScript ファイルのエクスポート宣言に型を含めることはできません。", - "Types_have_separate_declarations_of_a_private_property_0_2442": "複数の型に、プライベート プロパティ '{0}' の異なる宣言が含まれています。", - "Types_of_construct_signatures_are_incompatible_2419": "コンストラクト シグネチャの型に互換性がありません。", - "Types_of_parameters_0_and_1_are_incompatible_2328": "パラメーター '{0}' および '{1}' は型に互換性がありません。", - "Types_of_property_0_are_incompatible_2326": "プロパティ '{0}' の型に互換性がありません。", - "Unable_to_open_file_0_6050": "ファイル '{0}' を開くことができません。", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "式として呼び出される場合、クラス デコレーターのシグネチャを解決できません。", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "式として呼び出される場合、メソッド デコレーターのシグネチャを解決できません。", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "式として呼び出される場合、パラメーター デコレーターのシグネチャを解決できません。", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "式として呼び出される場合、プロパティ デコレーターのシグネチャを解決できません。", - "Undetermined_character_escape_1513": "文字エスケープが不明です。", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "予期しない '{0}' です。バックスラッシュを使用してエスケープするつもりでしたか?", - "Unexpected_end_of_text_1126": "予期しないテキストの末尾です。", - "Unexpected_keyword_or_identifier_1434": "予期しないキーワードまたは識別子です。", - "Unexpected_token_1012": "予期しないトークンです。", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "予期しないトークンです。コンストラクター、メソッド、アクセサー、またはプロパティが必要です。", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "予期しないトークンです。型パラメーター名には、中かっこを含めることはできません。", - "Unexpected_token_Did_you_mean_or_gt_1382": "予期しないトークンです。`{'>'}` または `>` を意図していましたか?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "予期しないトークンです。`{'}'}` または `}` を意図していましたか?", - "Unexpected_token_expected_1179": "予期しないトークンです。'{' が必要です。", - "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode エスケープ シーケンスはここでは使用できません。", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode エスケープ シーケンスは、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode プロパティ値式は、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", - "Unknown_Unicode_property_name_1524": "Unicode プロパティ名が不明です。", - "Unknown_Unicode_property_name_or_value_1529": "Unicode プロパティ名または値が不明です。", - "Unknown_Unicode_property_value_1526": "Unicode プロパティ値が不明です。", - "Unknown_build_option_0_5072": "'{0}' は不明なビルド オプションです。", - "Unknown_build_option_0_Did_you_mean_1_5077": "'{0}' は不明なビルド オプションです。'{1}' を意図していましたか?", - "Unknown_compiler_option_0_5023": "コンパイラ オプション '{0}' が不明です。", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "'{0}' は不明なコンパイラ オプションです。'{1}' を意図していましたか?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "不明なキーワードまたは識別子。'{0}' を意味していましたか?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "不明なオプション 'excludes' です。'exclude' ですか?", - "Unknown_regular_expression_flag_1499": "正規表現フラグが不明です。", - "Unknown_type_acquisition_option_0_17010": "不明な型の取得オプション '{0}'。", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "'{0}' は不明な型の取得オプションです。'{1}' を意図していましたか?", - "Unknown_watch_option_0_5078": "'{0}' は不明な監視オプションです。", - "Unknown_watch_option_0_Did_you_mean_1_5079": "'{0}' は不明な監視オプションです。'{1}' を意図していましたか?", - "Unreachable_code_detected_7027": "到達できないコードが検出されました。", - "Unterminated_Unicode_escape_sequence_1199": "未終了の Unicode エスケープ シーケンスです。", - "Unterminated_quoted_string_in_response_file_0_6045": "応答ファイル '{0}' の文字列の終了引用符がありません。", - "Unterminated_regular_expression_literal_1161": "未終了の正規表現リテラルです。", - "Unterminated_string_literal_1002": "未終了の文字列リテラルです。", - "Unterminated_template_literal_1160": "未終了のテンプレート リテラルです。", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "型指定のない関数の呼び出しで型引数を使用することはできません。", - "Unused_label_7028": "未使用のラベル。", - "Unused_ts_expect_error_directive_2578": "'@ts-expect-error' ディレクティブが使用されていません。", - "Update_import_from_0_90058": "\"{0}\" からのインポートの更新", - "Update_modifiers_of_0_90061": "'{0}' の修飾子を更新してください", - "Updating_output_timestamps_of_project_0_6359": "プロジェクト '{0}' の出力タイムスタンプを更新しています...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "プロジェクト '{0}' の変更されていない出力タイムスタンプを更新しています...", - "Use_0_95174": "\"{0}\" を使用します。", - "Use_0_instead_5106": "代わりに '{0}' を使用してください。", - "Use_Number_isNaN_in_all_conditions_95175": "すべての条件で 'Number.isNaN' を使用します。", - "Use_element_access_for_0_95145": "'{0}' に要素アクセスを使用する", - "Use_element_access_for_all_undeclared_properties_95146": "宣言されていないすべてのプロパティに対して要素アクセスを使用します。", - "Use_import_type_95180": "'import type' を使用してください", - "Use_synthetic_default_member_95016": "合成 'default' メンバーを使用します。", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "パッケージのインポートを解決する場合、package.json の 'exports' フィールドを使用してください。", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "インポートを解決するときに、package.json の 'imports' フィールドを使用してください。", - "Use_type_0_95181": "'type {0}' を使用してください", - "Using_0_subpath_1_with_target_2_6404": "'{0}' サブパス '{1}' をターゲット '{2}' と共に使用しています。", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX フラグメントを使用するには、フラグメント ファクトリ '{0}' がスコープ内に存在する必要がありますが、見つかりませんでした。", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' ステートメントでの文字列の使用は ECMAScript 5 以上でのみサポートされています。", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build を使用すると、-b は tsc をコンパイラというよりビルド オーケストレーターのように動作させます。これは、複合プロジェクトのビルドをトリガーするために使用されます。詳細については、{0} を参照してください。", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", - "VERSION_6036": "バージョン", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "型 '{0}' の値には、型 '{1}' と共通のプロパティがありません。呼び出しますか?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "型 '{0}' の値は呼び出せません。'new' を含めますか?", - "Variable_0_implicitly_has_an_1_type_7005": "変数 '{0}' の型は暗黙的に '{1}' になります。", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "変数 '{0}' の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "場所によっては、変数 '{0}' の型に '{1}' が暗黙的に指定されていますが、使い方からより良い型を推論できます。", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "変数 '{0}' は、型を決定できない一部の場所では、暗黙のうちに '{1}' 型になります。", - "Variable_0_is_used_before_being_assigned_2454": "変数 '{0}' は割り当てられる前に使用されています。", - "Variable_declaration_expected_1134": "変数の宣言が必要です。", - "Variable_declaration_list_cannot_be_empty_1123": "変数宣言リストを空にすることはできません。", - "Variable_declaration_not_allowed_at_this_location_1440": "変数の宣言はこの場所では許可されていません。", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "変数には、--isolatedDeclarations を含む明示的な型注釈が必要です。", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "複数の宣言を含む変数をインライン化することはできません。", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "ソースの位置 {0} にある可変個引数要素は、ターゲットの位置 {1} にある要素と一致しません。", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "分散注釈は、オブジェクト、関数、コンストラクター、およびマップされた型の型エイリアスでのみサポートされています。", - "Version_0_6029": "バージョン {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "移行情報については、http://aka.ms/ts6 にアクセスしてください。", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "このファイルの詳細については、https://aka.ms/tsconfig をご覧ください", - "WATCH_OPTIONS_6918": "ウォッチ オプション", - "Watch_and_Build_Modes_6250": "ウォッチ モードとビルド モード", - "Watch_input_files_6005": "入力ファイルを監視します。", - "Watch_option_0_requires_a_value_of_type_1_5080": "監視オプション '{0}' には型 {1} の値が必要です。", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "ここにパラメーター全体の型を追加することによってのみ、'{0}' の型を書き込むことができます。", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "関数を割り当てる際、パラメーターと戻り値が互換性のあるサブタイプであることを確認します。", - "When_type_checking_take_into_account_null_and_undefined_6699": "型チェックを行うときは、'null' と 'undefined' が考慮されます。", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "画面をクリアする代わりに、古くなったコンソール出力をウォッチ モードで保持するかどうか。", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "式のコンテナー内のすべての無効な文字をラップする", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "無効なデコレーター式をすべてかっこで囲む", - "Wrap_all_object_literal_with_parentheses_95116": "すべてのオブジェクト リテラルをかっこで囲みます", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "親の設定が解除されたすべての JSX を JSX フラグメントでラップする", - "Wrap_in_JSX_fragment_95120": "JSX フラグメントでラップする", - "Wrap_in_parentheses_95194": "かっこで囲む", - "Wrap_invalid_character_in_an_expression_container_95108": "式のコンテナー内の無効な文字をラップする", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "次の本体をかっこで囲みます。これはオブジェクト リテラルです", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "コンパイラ オプションの詳細については、{0} をご覧ください。", - "You_cannot_rename_a_module_via_a_global_import_8031": "グローバル インポートを使用してモジュールの名前を変更することはできません。", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "'node_modules' フォルダーで定義されている要素の名前を変更することはできません。", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "別の 'node_modules' フォルダーで定義されている要素の名前を変更することはできません。", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "標準の TypeScript ライブラリで定義された要素の名前を変更することはできません。", - "You_cannot_rename_this_element_8000": "この要素の名前を変更することはできません。", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' は受け入れる引数が少なすぎるので、ここでデコレーターとして使用することができません。最初にこれを呼び出してから、'@{0}()' を書き込むつもりでしたか?", - "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' および '{1}' インデックス シグネチャに互換性がありません。", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' および '{1}' 演算をかっこなしで混在させることはできません。", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' は 2 回指定されています。'{0}' という名前の属性は上書きされます。", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型の末尾にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型の先頭にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' をインポートするには、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' をインポートするには、既定のインポートを使用する必要があります。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' をインポートするには、'require' 呼び出しを使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' をインポートするには、'require' 呼び出しを使用するか、既定のインポートを使用する必要があります。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' をインポートするには、'import {1} = require({2})' または既定のインポートを使用する必要があります。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' をインポートするには、'import {1} = require ({2})' を使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", - "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' を JSX コンポーネントとして使用することはできません。", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'export type' を使用してエクスポートされたため、'{0}' は値として使用できません。", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'import type' を使用してインポートされたため、'{0}' は値として使用できません。", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' コンポーネントには、テキストを子要素として指定できません。JSX のテキストには 'string' 型が含まれていますが、'{1}' の予期された型は '{2}' です。", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{1}' に関連しない可能性のある任意の型で '{0}' をインスタンス化できます。", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 宣言は、ブロック内でのみ宣言できます。", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣言は TypeScript ファイルでのみ使用できます。", - "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣言はバインド パターンを持っていない可能性があります。", - "_0_declarations_must_be_initialized_1155": "'{0}' 宣言は初期化する必要があります。", - "_0_expected_1005": "'{0}' が必要です。", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' には文字列型がありますが、'isolatedModules' が有効である場合、構文的に認識可能な文字列構文が必要です。", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{1}' という名前のエクスポートされたメンバーが '{0}' に含まれていません。候補: '{2}'", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' の戻り値の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' には型の注釈がなく、直接または間接的に初期化子で参照されているため、暗黙的に 'any' 型が含まれています。", - "_0_index_signatures_are_incompatible_2634": "'{0}' インデックス シグネチャに互換性がありません。", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}'インデックス型'{1}' を '{2}'インデックス型'{3}' に割り当てることはできません。", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' はプリミティブですが、'{1}' はラッパー オブジェクトです。できれば '{0}' をご使用ください。", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' は型であるため、JavaScript ファイルにインポートできません。JSDoc 型の注釈で '{1}' を使用します。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' は型であり、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' は、'{1}' の未使用の名前変更です。型の注釈として使用するつもりでしたか?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' は型 '{1}' の制約に代入できますが、'{1}' は制約 '{2}' の別のサブタイプでインスタンス化できることがあります。", - "_0_is_automatically_exported_here_18044": "`{0}` は自動的にここにエクスポートされます。", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' が宣言されていますが、その値が読み取られることはありません。", - "_0_is_declared_but_never_used_6196": "'{0}' は宣言されましたが使用されませんでした。", - "_0_is_declared_here_2728": "'{0}' はここで宣言されています。", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' はクラス '{1}' でプロパティとして定義されていますが、ここでは '{2}' でアクセサーとしてオーバーライドされています。", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' はクラス '{1}' でアクセサーとして定義されていますが、ここではインスタンス プロパティとして '{2}' でオーバーライドされています。", - "_0_is_deprecated_6385": "'{0}' は非推奨です。", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' はキーワード '{1}' に関するメタプロパティとして無効です。候補: '{2}'。", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' はパラメーター名として使用できません。", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' は変数宣言の名前として使用できません。", - "_0_is_of_type_unknown_18046": "'{0}''は 'unknown' 型です。", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' は 'null' の可能性があります。", - "_0_is_possibly_null_or_undefined_18049": "'{0}' は 'null' か 'undefined' の可能性があります。", - "_0_is_possibly_undefined_18048": "'{0}' は 'undefined' の可能性があります。", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' はそれ自身のベース式内で直接または間接的に参照されます。", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' はそれ自身の型の注釈内で直接または間接的に参照されます。", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' が複数回指定されているため、ここでの使用は上書きされます。", - "_0_list_cannot_be_empty_1097": "'{0}' のリストを空にすることはできません。", - "_0_modifier_already_seen_1030": "'{0}' 修飾子は既に存在します。", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾子は、クラス、インターフェイス、または型エイリアスの型パラメーターでのみ使用できます", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾子は、関数、メソッド、またはクラスの型パラメーターでのみ使用できます", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 修飾子はコンストラクター宣言では使用できません。", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 修飾子は、モジュールまたは名前空間の要素では使用できません。", - "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' 修飾子はパラメーターでは使用できません。", - "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 修飾子は型メンバーでは使用できません。", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 修飾子は型パラメーターでは表示できません。", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾子を 'using' 宣言で使用することはできません。", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾子を 'await using' 宣言で使用することはできません。", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 修飾子はインデックス シグネチャでは使用できません。", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' 修飾子はこの種類のクラス要素では使用できません。", - "_0_modifier_cannot_be_used_here_1042": "'{0}' 修飾子はここでは使用できません。", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' 修飾子は環境コンテキストでは使用できません。", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾子と '{1}' 修飾子は同時に使用できません。", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾子を private 識別子とともに使用することはできません。", - "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾子は '{1}' 修飾子の前に指定する必要があります。", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' の後には、中かっこで囲まれた Unicode プロパティ値式を指定する必要があります。", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' には、明示的な型の注釈が必要です。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' は型のみを参照しますが、ここで名前空間として使用されています。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' は型のみを参照しますが、ここで値として使用されています。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' は型を参照しているだけですが、こちらでは値として使用されています。'{0} 内の {1}' を使用しますか?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' は型のみを参照しますが、ここでは値として使用されています。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションを es2015 以降に変更してみてください。", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' は UMD グローバルを参照していますが、現在のファイルはモジュールです。代わりにインポートを追加することを考慮してください。", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' は値を参照していますが、ここでは型として使用されています。'typeof {0}' を意図していましたか?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' は型のみの宣言に解決されるため、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "\"{0}\" は型のみの宣言に解決されるため、'{1}' が有効であるときは、型のみの再エクスポートを使用して再エクスポートされる必要があります。", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "config json ファイル の 'compilerOptions' オブジェクト内に '{0}' を設定する必要があります。", - "_0_tag_already_specified_1223": "'{0}' タグは既に指定されています。", - "_0_was_also_declared_here_6203": "ここでは '{0}' も宣言されました。", - "_0_was_exported_here_1377": "ここでは '{0} ' がエクスポートされました。", - "_0_was_imported_here_1376": "ここでは '{0}' がインポートされました。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}' には戻り値の型の注釈がないため、戻り値の型は暗黙的に '{1}' になります。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}' には戻り値の型の注釈がないため、yield 型は暗黙的に '{1}' になります。", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾子は、クラス宣言、メソッド宣言、またはプロパティ宣言のみに使用できます。", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 修飾子は、プロパティ宣言でのみ使用できます。", - "and_here_6204": "およびここで。", - "and_npm_install_D_types_Slashnode_6290": "および npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments' は、プロパティ初期化子やクラスの静的初期化ブロック内では参照できません。", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": インポート、エクスポート、import.meta、jsx (jsx: react-jsx を使用)、または esm 形式 (モジュール: node16+) でファイルをモジュールとして扱います。", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 式はクラスの静的ブロック内では使用できません。", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "ファイルがモジュールの場合、'await' 式はそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 式は、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 式は、パラメーター初期化子では使用できません。", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' は、この式の型に対しては効果がありません。", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "'await using' 宣言はアンビエント コンテキストでは使用できません。", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' 宣言は、ブロック内に含まれていない限り、'case' または 'default' 句では使用できません。", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ステートメントは、ファイルがモジュールである場合、そのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ステートメントは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ステートメントをクラスの静的ブロック内で使用することはできません。", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' オプションは '{0}' に設定され、この値を使用して非相対モジュール名 '{1}' を解決します。", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' の後には ASCII 文字が続く必要があります。", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' は、ファイルの先頭でのみ使用できます。", - "case_or_default_expected_1130": "'case' または 'default' が必要です。", - "catch_or_finally_expected_1472": "'catch' または 'finally' が必要です。", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列挙型メンバーの初期化子が、無限値に評価されました。", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列挙型メンバーの初期化子が、許可されない値 'NaN' に評価されました。", - "const_enum_member_initializers_must_be_constant_expressions_2474": "const 列挙型メンバー初期化子は定数式である必要があります。", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列挙型は、プロパティまたはインデックスのアクセス式、インポート宣言またはエクスポートの代入の右辺、型のクエリにのみ使用できます。", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' をパラメーターのプロパティ名として使用することはできません。", - "constructor_is_a_reserved_word_18012": "'#constructor' は予約語です。", - "default_Colon_6903": "既定:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "厳格モードでは 'delete' を識別子で呼び出すことはできません。", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' では既定のものは再エクスポートされません。", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' は、TypeScript ファイルでのみ使用できます。", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "環境モジュールとモジュール拡張は常に表示されるので、これらに 'export' 修飾子を適用することはできません。", - "extends_clause_already_seen_1172": "'extends' 句は既に存在します。", - "extends_clause_must_precede_implements_clause_1173": "extends' 句は 'implements' 句の前に指定しなければなりません。", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "エクスポートされたクラス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "エクスポートされたクラスの 'extends' 句がプライベート名 '{0}' を持っているか、使用しています。", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "エクスポートされたインターフェイス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。", - "false_unless_checkJs_is_set_6932": "`false`、`checkJs` が設定されている場合を除く", - "false_unless_composite_is_set_6906": "'composite' が設定されていない場合は 'false'", - "file_6025": "ファイル", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "ファイルがモジュールの場合、'for await' ループはそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' ループは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' ループは、クラスの静的ブロック内では使用できません。", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' および 'set' アクセサーでは 'this' パラメーターを宣言できません。", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files' が指定されている場合は '[]'、それ以外の場合は '[\"**/*\"]'", - "implements_clause_already_seen_1175": "'implements' 句は既に存在します。", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 句は、TypeScript ファイルでのみ使用できます。", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' は、TypeScript ファイルでのみ使用できます。", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 宣言は、条件付き型の 'extends' 句でのみ許可されます。", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' の後には、山かっこで囲まれたキャプチャ グループ名を指定する必要があります。", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' は、'let' 宣言または 'const' 宣言で名前として使用することはできません。", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "ターゲットにコンストラクト シグネチャがない 'new' 式の型は、暗黙的に 'any' になります。", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`' と、指定されている場合は 'outDir' の値を加算します。", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module` が `nodenext` の場合は `nodenext`、`module` が `node16` または `node18` の場合は `node16`、それ以外の場合は `bundler`。", - "one_of_Colon_6900": "次のいずれか:", - "one_or_more_Colon_6901": "1 つ以上", - "options_6024": "オプション", - "or_JSX_element_expected_1145": "'{' または JSX 要素が必要です。", - "or_expected_1144": "'{' または ';' が必要です。", - "package_json_does_not_have_a_0_field_6100": "'package.json' に '{0}' フィールドがありません。", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' には、バージョン '{0}' と一致する 'typesVersions' エントリがありません。", - "package_json_had_a_falsy_0_field_6220": "'package.json' には、false に評価される '{0}' フィールドが含まれています。", - "package_json_has_0_field_1_that_references_2_6101": "'package.json' に '{2}' を参照する '{0}' フィールド '{1}' があります。", - "package_json_has_a_peerDependencies_field_6281": "'package.json' に 'peerDependencies' フィールドがあります。", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' には、有効な semver の範囲ではない 'typesVersions' エントリ '{0}' が含まれています。", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' には、コンパイラ バージョン '{1}' に一致する 'typesVersions' エントリ '{0}' が含まれていて、モジュール名 '{2}' に一致するパターンを探しています。", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' には、バージョン固有のパス マッピングを含む 'typesVersions' フィールドが含まれています。", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json のスコープ '{0}' は、指定子 '{1}' を明示的に null にマッピングします。", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json のスコープ '{0}' は、指定子 '{1}' のターゲットに無効な型です。", - "package_json_scope_0_has_no_imports_defined_6273": "package.json のスコープ '{0}' にはインポートが定義されていません。", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' オプションが指定され、モジュール名 '{0}' と一致するパターンを検索します。", - "q_is_only_available_inside_character_class_1511": "'\\q' は文字クラス内でのみ使用できます。", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' の後には、中かっこで囲まれた代替文字列を指定する必要があります。", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾子はプロパティ宣言またはインデックス シグネチャのみに使用できます。", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 型の修飾子は、配列およびタプル リテラル型でのみ使用できます。", - "require_call_may_be_converted_to_an_import_80005": "'require' の呼び出しはインポートに変換される可能性があります。", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` は、型のみのインポートに対してのみ設定できます。", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` は、型インポート アサーションの唯一の有効なキーです。", - "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" は \"require\" または \"import\" のいずれかにする必要があります。", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' オプションが設定され、このオプションを使用して相対モジュール名 '{0}' を解決します。", - "super_can_only_be_referenced_in_a_derived_class_2335": "'super' は、派生クラスでのみ参照できます。", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' は、派生クラスのメンバーまたはオブジェクトのリテラル式のメンバーでのみ参照されます。", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' は、計算されたプロパティ名では参照できません。", - "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' はコンストラクター引数では参照できません。", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "オプション 'target' が 'ES2015' 以降の場合、'super' はオブジェクトのリテラル式のメンバーでのみ使用できます。", - "super_may_not_use_type_arguments_2754": "'super' では型引数を使用できません。", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "派生クラスのコンストラクター内の 'super' のプロパティにアクセスする前に、'super' を呼び出す必要があります。", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "派生クラスのコンストラクター内の 'this' にアクセスする前に、'super' を呼び出す必要があります。", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' の後には、引数リストまたはメンバー アクセスが必要です。", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' プロパティ アクセスはコンストラクター、メンバー関数、または派生クラスのメンバー アクセサーでのみ許可されます。", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' は、計算されたプロパティ名では参照できません。", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' はモジュール本体内または名前空間本体内では参照できません。", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' は、静的プロパティ初期化子では参照できません。", - "this_cannot_be_referenced_in_current_location_2332": "'this' は現在の場所では参照できません。", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' は型として注釈を持たないため、暗黙的に型 'any' になります。", - "true_for_ES2022_and_above_including_ESNext_6930": "ESNext を含む ES2022 以降の場合は 'true' です。", - "true_if_composite_false_otherwise_6909": "'composite' の場合は 'true'、それ以外の場合は 'false'", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution' が 'node16'、'nodenext'、または 'bundler' である場合は 'true'、それ以外の場合は 'false' です。", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript コンパイラ", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json は存在しますが、コマンドラインでファイルが指定されている場合は読み込まれません。このエラーをスキップするには、'--ignoreConfig' を使用します。", - "type_Colon_6902": "種類:", - "unique_symbol_types_are_not_allowed_here_1335": "'unique symbol' 型はここでは許可されていません。", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 型は変数ステートメントの変数でのみ許可されています。", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型は、バインディング名を持つ変数の宣言では使用できません。", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' ディレクティブは、複雑なパラメーター リストでは使用できません。", - "use_strict_directive_used_here_1349": "'use strict' ディレクティブがここで使用されています。", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "'using' 宣言はアンビエント コンテキストでは使用できません。", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' 宣言は、ブロック内に含まれていない限り、'case' または 'default' 句では使用できません。", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 式は、非同期関数ブロックでは使用できません。", - "with_statements_are_not_allowed_in_strict_mode_1101": "厳格モードでは 'with' ステートメントは使用できません。", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 式は、それを含むジェネレーターに戻り値の型の注釈がないため、暗黙的に 'any' 型になります。", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 式は、パラメーター初期化子では使用できません。" -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "すべてのコンパイラ オプション", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾子とインポート宣言は同時に使用できません。", + "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' パラメーターは最初のパラメーターである必要があります。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' タグが '@typedef'、'@callback'、または '@overload' タグの後にない可能性があります", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' コメントに複数の '@type' タグを含めることはできません。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' リテラルをプロパティ名として使用することはできません。", + "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint リテラルでは指数表記を使用できません。", + "A_bigint_literal_must_be_an_integer_1353": "bigint リテラルは整数である必要があります。", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "実装シグネチャでバインド パターン パラメーターを省略可能にすることはできません。", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' ステートメントは外側のイテレーションまたは switch ステートメント内でのみ使用できます。", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' ステートメントは、外側のステートメントのラベルにのみ移動できます。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "予約された二重句読点を文字クラスに含めることはできません。バックスラッシュを使用してエスケープするつもりでしたか?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "文字クラスの範囲を別の文字クラスでバインドすることはできません。", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "クラスで実装できるのは、オプションの型引数を指定した識別子/完全修飾名のみです。", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "クラスで実装できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "クラスが '{0}' のようなプリミティブ型を拡張することはできません。クラスは、コンストラクト可能な値のみを拡張できます。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "クラスが '{0}' のようなプリミティブ型を実装することはできません。実装できるのは、その他の名前付きオブジェクト型のみです。", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' の修飾子がないクラス宣言には名前が必要です。", + "A_class_member_cannot_have_the_0_keyword_1248": "クラス メンバーに '{0}' キーワードを指定することはできません。", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "コンマ式は計算されたプロパティ名では使用できません。", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算されたプロパティ名は、型パラメーターをそれを含む型から参照することはできません。", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "クラス プロパティ宣言内の計算されたプロパティ名には、単純なリテラル型または 'unique symbol' 型が必要です。", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "メソッド オーバーロード内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "型リテラル内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境コンテキスト内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "インターフェイス内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "計算されたプロパティ名は 'string' 型、'number' 型、'symbol' 型、または 'any' 型のいずれかでなければなりません。", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' アサーションは、列挙型メンバーへの参照、または文字列、数値、ブール値、配列、オブジェクト リテラルへの参照にのみ適用できます。", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const 列挙型メンバーは、文字列リテラルを使用してのみアクセスできます。", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "環境コンテキストの 'const' 初期化子は、文字列または数値リテラル、もしくはリテラル列挙型の参照である必要があります。", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "コンストラクターのクラスが 'null' を拡張する場合、そのコンストラクターに 'super' の呼び出しを含めることはできません。", + "A_constructor_cannot_have_a_this_parameter_2681": "コンストラクターに 'this' パラメーターを指定することはできません。", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' ステートメントは外側のイテレーション内でのみ使用できます。", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' ステートメントは、外側のイテレーション ステートメントのラベルにのみ移動できます。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "宣言ファイルを 'import type' なしでインポートすることはできません。代わりに実装ファイルト '{0}' をインポートするつもりでしたか?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 修飾子は、環境コンテキストでは使用できません。", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "デコレーターが装飾できるのは、オーバーロードではなく、メソッドの実装のみです。", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 句を 'switch' ステートメントで複数回使用することはできません。", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "既定のエクスポートは、ECMAScript スタイルのモジュールでのみ使用できます。", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "既定のエクスポートは、ファイルまたはモジュールの宣言のトップレベルにある必要があります。", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "限定代入アサーション '!' は、このコンテキストで許可されていません。", + "A_destructuring_declaration_must_have_an_initializer_1182": "非構造化宣言には初期化子が必要です。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動的インポート呼び出しは 'Promise' を返します。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることをご確認ください。", + "A_file_cannot_have_a_reference_to_itself_1006": "ファイルにそれ自体への参照を含めることはできません。", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' を返す関数には、到達可能なエンド ポイントがありません。", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' キーワードで呼び出される関数に、'void' である 'this' 型を使用することはできません。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "宣言された型が 'undefined'、'void'、または 'any' でない関数は、値を返す必要があります。", + "A_generator_cannot_have_a_void_type_annotation_2505": "ジェネレーターに 'void' 型の注釈を指定することはできません。", + "A_get_accessor_cannot_have_parameters_1054": "'get' アクセサーにパラメーターを指定することはできません。", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get アクセサーは、少なくともセッターと同程度にアクセス可能である必要があります", + "A_get_accessor_must_return_a_value_2378": "'get' アクセサーは値を返す必要があります。", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "ラベル付きのタプル要素を optional として宣言するには、型の後ではなく名前の後とコロンの前に疑問符を付けます。", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "ラベル付きのタプル要素を rest として宣言するには、型の前ではなく名前の前に '...' を付けます。", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "マップされた型では、プロパティまたはメソッドを宣言しない場合があります。", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列挙型宣言のメンバー初期化子は、他の列挙型で定義されたメンバーを含め、その後で宣言されたメンバーを参照できません。", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin クラスには、型 'any[]' の単一の rest パラメーターを持つコンストラクターが必要です。", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "抽象コンストラクト シグネチャを含む型変数から拡張される mixin クラスも、'abstract' として宣言する必要があります。", + "A_module_cannot_have_multiple_default_exports_2528": "モジュールに複数の既定のエクスポートを含めることはできません。", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "名前空間宣言は、それとマージするクラスや関数と異なるファイルに配置できません。", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "名前空間宣言は、それとマージするクラスや関数より前に配置できません。", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "名前空間宣言は、名前空間またはモジュールの最上位レベルでのみ許可されます。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'namespace' 宣言を 'module' キーワードを使用して宣言することはできません。代わりに 'namespace' キーワードを使用してください。", + "A_non_dry_build_would_build_project_0_6357": "非 -dry ビルドを実行した場合、プロジェクト '{0}' がビルドされます", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry ビルドを実行した場合、次のファイルが削除されます: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "non-dry build では、プロジェクト '{0}' の出力のタイムスタンプが更新されます", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "パラメーター初期化子は、関数またはコンストラクターの実装でのみ指定できます。", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "パラメーター プロパティは、rest パラメーターを使用して宣言することはできません。", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "パラメーター プロパティは、コンストラクターの実装でのみ指定できます。", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "パラメーター プロパティは、バインド パターンを使用して宣言することはできません。", + "A_promise_must_have_a_then_method_1059": "Promise には 'then' メソッドが必要です。", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "型が 'unique symbol' 型のクラスのプロパティは、'static' と 'readonly' の両方である必要があります。", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "型が 'unique symbol' 型のインターフェイスまたは型リテラルのプロパティは、'readonly' である必要があります。", + "A_required_element_cannot_follow_an_optional_element_1257": "必須要素を省略可能な要素の後に指定することはできません。", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必須パラメーターを省略可能なパラメーターの後に指定することはできません。", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 要素にバインド パターンを含めることはできません。", + "A_rest_element_cannot_follow_another_rest_element_1265": "rest 要素を別の rest 要素の後に指定することはできません。", + "A_rest_element_cannot_have_a_property_name_2566": "rest 要素にプロパティ名を指定することはできません。", + "A_rest_element_cannot_have_an_initializer_1186": "rest 要素に初期化子を指定することはできません。", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 要素は非構造化パターンの最後に指定する必要があります。", + "A_rest_element_type_must_be_an_array_type_2574": "rest 要素型は配列型である必要があります。", + "A_rest_parameter_cannot_be_optional_1047": "rest パラメーターを省略可能にすることはできません。", + "A_rest_parameter_cannot_have_an_initializer_1048": "rest パラメーターに初期化子を指定することはできません。", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest パラメーターはパラメーター リストの最後に指定する必要があります。", + "A_rest_parameter_must_be_of_an_array_type_2370": "rest パラメーターは配列型でなければなりません。", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest パラメーターまたはバインド パターンに末尾のコンマがない可能性があります。", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' ステートメントは、関数本体でのみ使用できます。", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' ステートメントの使用が無効です。クラスの静的ブロック内では使用できません。", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "'baseUrl' の相対的な場所を検索するためにインポートを再マップする一連のエントリ。", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' アクセサーに、戻り値の型の注釈を指定することはできません。", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' アクセサーに、省略可能パラメーターを指定することはできません。", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' アクセサーに rest パラメーターを指定することはできません。", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' アクセサーにはパラメーターを 1 つだけ指定しなければなりません。", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' アクセサーのパラメーターに初期化子を含めることはできません。", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "spread 引数には、組の種類を指定するか、rest パラメーターに渡す必要があります。", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子が派生クラスに含まれている場合は、コンストラクターのルートレベルのステートメントである必要があります。", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子が派生クラスに含まれている場合は、'super' や 'this' を参照するコンストラクターの最初のステートメントである必要があります。", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' ベース型のガードはパラメーター ベース型のガードとは互換性がありません。", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 型はクラスまたはインターフェイスの静的でないメンバーでのみ使用できます。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' が有効である場合、CommonJS モジュール内の値宣言でトップレベルの 'export' 修飾子を使用することはできません。", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' ファイルは既に '{0}' で定義されています。", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "タプル メンバーを optional と rest の両方に指定することはできません。", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "タプル型に負の値のインデックスを指定することはできません。", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "累乗式の左辺で型アサーション式を使用することはできません。式を括弧で囲むことを検討してください。", + "A_type_literal_property_cannot_have_an_initializer_1247": "型リテラル プロパティに初期化子を使用することはできません。", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "型のみのインポートでは既定のインポートまたは名前付きバインドを指定できますが、両方を指定することはできません。", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "型の述語は rest パラメーターを参照できません。", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "型の述語は、バインド パターン内の要素 '{0}' を参照できません。", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "型の述語は、関数およびメソッドの戻り値の型の位置でのみ使用できます。", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "type 述語の型はそのパラメーターの型に割り当て可能である必要があります。", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "'isolatedModules' と 'emitDecoratorMetadata' が有効になっている場合は、装飾された署名で参照される型を 'import type' または名前空間インポートでインポートする必要があります。", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "型が 'unique symbol' 型の変数は、'const' である必要があります。", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 式は、ジェネレーター本文でのみ使用できます。", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "クラス '{1}' の抽象メソッド '{0}' には super 式を介してアクセスできません。", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象メソッドは抽象クラス内でのみ使用できます。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象プロパティは抽象クラス内でのみ使用できます。", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "コンストラクター内でクラス '{1}' の抽象プロパティ '{0}' にアクセスできません。", + "Accessibility_modifier_already_seen_1028": "アクセシビリティ修飾子は既に存在します。", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "アクセサーは ECMAScript 5 以上をターゲットにする場合にのみ使用できます。", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "アクセサーはどちらも抽象または非抽象である必要があります。", + "Add_0_to_unresolved_variable_90008": "'{0}' を未解決の変数に追加します", + "Add_a_return_statement_95111": "return ステートメントを追加する", + "Add_a_return_type_to_the_function_declaration_9031": "関数宣言に戻り値の型を追加してください。", + "Add_a_return_type_to_the_function_expression_9030": "関数式に戻り値の型を追加してください。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "get アクセサー宣言に戻り値の型を追加してください。", + "Add_a_return_type_to_the_method_9034": "メソッドに戻り値の型を追加してください", + "Add_a_type_annotation_to_the_parameter_0_9028": "パラメーター {0} に型注釈を追加してください。", + "Add_a_type_annotation_to_the_property_0_9029": "プロパティ {0} に型注釈を追加してください。", + "Add_a_type_annotation_to_the_variable_0_9027": "変数 {0} に型注釈を追加してください。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set アクセサー宣言のパラメーターに型を追加してください。", + "Add_all_missing_async_modifiers_95041": "不足しているすべての 'async' 修飾子を追加します", + "Add_all_missing_attributes_95168": "不足しているすべての属性を追加する", + "Add_all_missing_call_parentheses_95068": "見つからない呼び出しのかっこをすべて追加します", + "Add_all_missing_function_declarations_95157": "不足しているすべての関数宣言を追加します", + "Add_all_missing_imports_95064": "不足しているすべてのインポートを追加する", + "Add_all_missing_members_95022": "不足しているすべてのメンバーを追加します", + "Add_all_missing_override_modifiers_95162": "不足しているすべての 'override' 修飾子を追加する", + "Add_all_missing_parameters_95190": "不足しているすべてのプロパティを追加してください", + "Add_all_missing_properties_95166": "不足しているすべてのプロパティを追加する", + "Add_all_missing_return_statement_95114": "不足しているすべての return ステートメントを追加する", + "Add_all_missing_super_calls_95039": "不足しているすべての super の呼び出しを追加します", + "Add_all_missing_type_annotations_90067": "不足しているすべての型注釈を追加してください", + "Add_all_optional_parameters_95193": "すべてのオプション パラメーターを追加してください", + "Add_annotation_of_type_0_90062": "型 '{0}' の注釈を追加してください", + "Add_async_modifier_to_containing_function_90029": "含まれている関数に async 修飾子を追加します", + "Add_await_95083": "'await' を追加する", + "Add_await_to_initializer_for_0_95084": "'{0}' の初期化子に 'await' を追加する", + "Add_await_to_initializers_95089": "初期化子に 'await' を追加する", + "Add_braces_to_arrow_function_95059": "アロー関数に中かっこを追加します", + "Add_const_to_all_unresolved_variables_95082": "すべての未解決の変数に 'const' を追加する", + "Add_const_to_unresolved_variable_95081": "未解決の変数に 'const' を追加する", + "Add_definite_assignment_assertion_to_property_0_95020": "プロパティ '{0}' に限定代入アサーションを追加します", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "初期化されていないすべてのプロパティに限定代入アサーションを追加します", + "Add_export_to_make_this_file_into_a_module_95097": "'export {}' を追加して、このファイルをモジュールにする", + "Add_extends_constraint_2211": "'extends' 制約を追加します。", + "Add_extends_constraint_to_all_type_parameters_2212": "すべての型パラメーターに 'extends' 制約を追加する", + "Add_import_from_0_90057": "\"{0}\" からのインポートの追加", + "Add_index_signature_for_property_0_90017": "プロパティ '{0}' のインデックス シグネチャを追加する", + "Add_initializer_to_property_0_95019": "プロパティ '{0}' に初期化子を追加します", + "Add_initializers_to_all_uninitialized_properties_95027": "初期化されていないすべてのプロパティに初期化子を追加します", + "Add_missing_attributes_95167": "不足している属性の追加", + "Add_missing_call_parentheses_95067": "見つからない呼び出しのかっこを追加します", + "Add_missing_comma_for_object_member_completion_0_95187": "オブジェクト メンバー補完 '{0}' に不足しているコンマを追加してください。", + "Add_missing_enum_member_0_95063": "不足している列挙型メンバー '{0}' を追加する", + "Add_missing_function_declaration_0_95156": "不足している関数宣言 '{0}' を追加します", + "Add_missing_new_operator_to_all_calls_95072": "不足している 'new' 演算子をすべての呼び出しに追加する", + "Add_missing_new_operator_to_call_95071": "不足している 'new' 演算子を呼び出しに追加する", + "Add_missing_parameter_to_0_95188": "'{0}' に不足しているパラメーターを追加してください", + "Add_missing_parameters_to_0_95189": "'{0}' に不足しているパラメーターを追加してください", + "Add_missing_properties_95165": "不足しているすべてのプロパティの追加", + "Add_missing_super_call_90001": "欠落している 'super()' 呼び出しを追加する", + "Add_missing_typeof_95052": "不足している 'typeof' を追加します", + "Add_names_to_all_parameters_without_names_95073": "名前のないすべてのパラメーターに名前を追加する", + "Add_optional_parameter_to_0_95191": "オプション パラメーターを '{0}' に追加してください", + "Add_optional_parameters_to_0_95192": "省略可能なパラメーターを '{0}' に追加する", + "Add_or_remove_braces_in_an_arrow_function_95058": "アロー関数内の中かっこを追加または削除します", + "Add_override_modifier_95160": "'override' 修飾子を追加する", + "Add_parameter_name_90034": "パラメーター名を追加する", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "メンバー名と一致するすべての未解決の変数に修飾子を追加します", + "Add_resolution_mode_import_attribute_95196": "'resolution-mode' インポート属性を追加する", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "'resolution-mode' インポート属性を、必要とするすべての型のみのインポートに追加する", + "Add_return_type_0_90063": "戻り値の型 '{0}' を追加してください", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "型を明示的にするには、この式に satisfies と型アサーションを追加してください (satisfies T as T)。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}' を使用して satisfies とインライン型のアサーションを追加してください", + "Add_to_all_uncalled_decorators_95044": "呼び出されていないすべてのデコレーターに '()' を追加します", + "Add_ts_ignore_to_all_error_messages_95042": "すべてのエラー メッセージに '@ts-ignore' を追加します", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "インデックスを使用してアクセスした場合は、'undefined' を型に追加します。", + "Add_undefined_to_optional_property_type_95169": "省略可能なプロパティ型に 'undefined' を追加します", + "Add_undefined_type_to_all_uninitialized_properties_95029": "初期化されていないすべてのプロパティに未定義の型を追加します", + "Add_undefined_type_to_property_0_95018": "プロパティ '{0}' に '未定義' の型を追加します", + "Add_unknown_conversion_for_non_overlapping_types_95069": "重複していない型に対して 'unknown' 変換を追加する", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "重複していない型のすべての変換に 'unknown' を追加する", + "Add_void_to_Promise_resolved_without_a_value_95143": "値なしで解決された Promise に 'void' を追加します", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "値なしで解決されたすべての Promise に 'void' を追加します", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json ファイルを追加すると、TypeScript ファイルと JavaScript ファイルの両方を含むプロジェクトを整理できます。詳細については、https://aka.ms/tsconfig をご覧ください。", + "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}' のすべての宣言には、同一の制約が必要です。", + "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' のすべての宣言には、同一の修飾子が必要です。", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' のすべての宣言には、同一の型パラメーターがある必要があります。", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象メソッドの宣言はすべて連続している必要があります。", + "All_destructured_elements_are_unused_6198": "非構造化要素はいずれも使用されていません。", + "All_imports_in_import_declaration_are_unused_6192": "インポート宣言内のインポートはすべて未使用です。", + "All_type_parameters_are_unused_6205": "すべての型パラメーターが使用されていません。", + "All_variables_are_unused_6199": "すべての変数は未使用です。", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript ファイルをプログラムの一部として使用することを許可します。'checkJs' オプションを使用して、これらのファイルからエラーを取得してください。", + "Allow_accessing_UMD_globals_from_modules_6602": "モジュールから UMD グローバルへのアクセスを許可します。", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "既定のエクスポートがないモジュールからの既定のインポートを許可します。これは、型チェックのみのため、コード生成には影響を与えません。", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "モジュールに既定のエクスポートがない場合は、'import x from y' を許可します。", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib からヘルパー関数をファイルごとに含めるのではなく、プロジェクトごとに 1 回インポートすることを許可します。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "TypeScript ファイル拡張子を含めるインポートを許可してください。'--moduleResolution bundler' と '--noEmit' または '--emitDeclarationOnly' のいずれかを設定する必要があります。", + "Allow_javascript_files_to_be_compiled_6102": "javascript ファイルのコンパイルを許可します。", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "モジュールを解決するときに複数のフォルダーを 1 つのフォルダーとして処理することを許可します。", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "既に含まれているファイル名 '{0}' は、ファイル名 '{1}' と大文字と小文字の指定だけが異なります。", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "アンビエント モジュール宣言では、相対モジュール名を指定できません。", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "アンビエント モジュールを、他のモジュールまたは名前空間内の入れ子にすることはできません。", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD モジュールに複数の名前を代入することはできません。", + "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象アクセサーに実装を含めることはできません。", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "アクセシビリティ修飾子を private 識別子と共に使用することはできません。", + "An_accessor_cannot_have_type_parameters_1094": "アクセサーに型パラメーターを指定することはできません。", + "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' プロパティはオプションとして宣言できません。", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "アンビエント モジュール宣言は、ファイルの最上位にのみ使用できます。", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "'{0}' の引数が指定されていません。", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "このバインド パターンに一致する引数が指定されていません。", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術オペランドは 'any' 型、'number' 型、’bigint' 型、列挙型のいずれかである必要があります。", + "An_arrow_function_cannot_have_a_this_parameter_2730": "アロー関数に 'this' パラメーターを指定することはできません。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同期関数またはメソッドは 'Promise' を返す必要があります。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることを確認してください。", + "An_async_iterator_must_have_a_next_method_2519": "非同期反復子には 'next()' メソッドが必要です。", + "An_element_access_expression_should_take_an_argument_1011": "要素アクセス式では、引数を取る必要があります。", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "private 識別子を使用して列挙型メンバーに名前を付けることはできません。", + "An_enum_member_cannot_have_a_numeric_name_2452": "列挙型メンバーに数値名を含めることはできません。", + "An_enum_member_name_must_be_followed_by_a_or_1357": "列挙型メンバー名の後には、','、'='、'}' のいずれかを指定する必要があります。", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "使用可能なすべてのコンパイラ オプションを示す、この情報の拡張バージョン", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "エクスポートの代入は、エクスポートされた他の要素を含むモジュールでは使用できません。", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "エクスポートの代入は、名前空間では使用できません。", + "An_export_assignment_cannot_have_modifiers_1120": "エクスポートの代入に修飾子を指定することはできません。", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "エクスポートの割り当ては、ファイルまたはモジュールの宣言のトップレベルにある必要があります。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "エクスポート宣言は、モジュールの最上位レベルでのみ使用できます。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "エクスポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", + "An_export_declaration_cannot_have_modifiers_1193": "エクスポート宣言に修飾子を指定することはできません。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax' が有効である場合、 'export =' 宣言は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax' が有効である場合、'export =' 宣言は値を参照する必要がありますが、'{0}' は型のみを参照しています。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax' が有効である場合、'export default' は実際の値を参照する必要がありますが、'{0}' は型のみの宣言に解決されます。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax' が有効である場合、'export default' は値を参照する必要がありますが、'{0}' は型のみを参照しています。", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 型の式は、真実性をテストできません。", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "拡張された Unicode エスケープ値は 0x0 と 0x10FFFF の間 (両端を含む) でなければなりません。", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別子またはキーワードを数値リテラルのすぐ後に指定することはできません。", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "実装は環境コンテキストでは宣言できません。", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "インポート エイリアスは、'export type' を使用してエクスポートされた宣言を参照できません。", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "インポート エイリアスは、'import type' を使用してインポートされた宣言を参照できません。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax' が有効である場合、インポート エイリアスを型または型のみの宣言に解決することはできません。", + "An_import_alias_cannot_use_import_type_1392": "インポート エイリアスで 'import type' を使用することはできません", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "インポート宣言は、モジュールの最上位レベルでのみ使用できます。", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "インポート宣言は、名前空間またはモジュールの最上位レベルでのみ使用できます。", + "An_import_declaration_cannot_have_modifiers_1191": "インポート宣言に修飾子を指定することはできません。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "'allowImportingTsExtensions' が有効である場合、インポート パスの末尾には '{0}' 拡張子のみを指定できます。", + "An_index_signature_cannot_have_a_rest_parameter_1017": "インデックス シグネチャに rest パラメーターを指定することはできません。", + "An_index_signature_cannot_have_a_trailing_comma_1025": "インデックス シグネチャの末尾にコンマを指定することはできません。", + "An_index_signature_must_have_a_type_annotation_1021": "インデックス シグネチャには型の注釈が必要です。", + "An_index_signature_must_have_exactly_one_parameter_1096": "インデックス シグネチャには、パラメーターを 1 つだけ指定しなければなりません。", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "インデックス シグネチャのパラメーターに疑問符を指定することはできません。", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "インデックス シグネチャのパラメーターにアクセシビリティ修飾子を指定することはできません。", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "インデックス シグネチャのパラメーターに初期化子を指定することはできません。", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "インデックス シグネチャのパラメーターには型の注釈が必要です。", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "インデックス シグネチャ パラメーターの型をリテラル型またはジェネリック型にすることはできません。代わりに、マップされたオブジェクト型の使用を検討してください。", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "インデックス シグネチャ パラメーター型は、'string'、'number'、'symbol'、またはテンプレート リテラルの型である必要があります。", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "インスタンス化式の後にプロパティ アクセスを続けることはできません。", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "インターフェイスが拡張するのは、オプションの型引数が指定された識別子/完全修飾名のみです。", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "インターフェイスが拡張できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "インターフェイスが '{0}' のようなプリミティブ型を拡張することはできません。拡張できるのは、その他の名前付きオブジェクト型のみです。", + "An_interface_property_cannot_have_an_initializer_1246": "インターフェイス プロパティに初期化子を使用することはできません。", + "An_iterator_must_have_a_next_method_2489": "反復子には 'next()' メソッドが必要です。", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma を JSX フラグメントで使用する場合は、@jsxFrag pragma が必要です。", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "オブジェクト リテラルに同じ名前の複数の get/set アクセサーを指定することはできません。", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "オブジェクト リテラルに同じ名前の複数のプロパティを指定することはできません。", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "オブジェクト リテラルには、同じ名前のプロパティおよびアクセサーを指定することはできません。", + "An_object_member_cannot_be_declared_optional_1162": "オブジェクト メンバーを省略可能として宣言することはできません。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "オブジェクトの '[Symbol.hasInstance]' メソッドを 'instanceof' 式の右側で使用するには、このメソッドがブール値を返す必要があります。", + "An_optional_chain_cannot_contain_private_identifiers_18030": "省略可能なチェーンには、pirvate 識別子を含めることはできません。", + "An_optional_element_cannot_follow_a_rest_element_1266": "省略可能な要素を rest 要素の後に指定することはできません。", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' の外部値がこのコンテナーによってシャドウされています。", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "オーバーロード シグネチャをジェネレーターとして宣言することはできません。", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "累乗式の左辺で '{0}' 演算子を含む単項式を使用することはできません。式を括弧で囲むことを検討してください。", + "Annotate_everything_with_types_from_JSDoc_95043": "すべてに JSDoc の型で注釈を付けます", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "名前空間内のプロパティ expando 関数の型に注釈を付けてください", + "Annotate_with_type_from_JSDoc_95009": "JSDoc の型で注釈を付けます", + "Another_export_default_is_here_2753": "別のエクスポートの既定値がここにあります。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "複数の文字と一致する可能性のある Unicode プロパティは、Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "複数の文字と一致する可能性のあるものはすべて、負数化された文字クラス内では無効です。", + "Are_you_missing_a_semicolon_2734": "セミコロンを忘れていませんか?", + "Argument_expression_expected_1135": "引数式が必要です。", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' オプションの引数は {1} である必要があります。", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "動的インポートの引数にスプレッド要素は指定できません。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "型 '{0}' の引数を型 '{1}' のパラメーターに割り当てることはできません。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "型 '{0}' の引数を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' のパラメーターに割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "rest パラメーター '{0}' の引数が指定されませんでした。", + "Array_element_destructuring_pattern_expected_1181": "配列要素の非構造化パターンが必要です。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "spread 要素を含む配列を --isolatedDeclarations と共に推論することはできません。", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "アサーションでは、呼び出し先のすべての名前が明示的な型の注釈で宣言されている必要があります。", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "アサーションでは、呼び出し先が識別子または修飾名である必要があります。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "宣言せずに関数にプロパティを割り当てることは、--isolatedDeclarations ではサポートされていません。この関数に割り当てられたプロパティに明示的な宣言を追加してください。", + "Asterisk_Slash_expected_1010": "'*/' が必要です。", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "少なくとも 1 つのアクセサーに、--isolatedDeclarations を含む明示的な型の注釈が必要です。", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "グローバル スコープの拡張を直接入れ子にできるのは、外部モジュールまたは環境モジュールの宣言内のみです。", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "グローバル スコープの拡張は、環境コンテキストに既にある場合を除いて、'declare' 修飾子を使用する必要があります。", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "プロジェクト '{0}' で型指定の自動検出が有効になっています。キャッシュの場所 '{2}' を使用して、モジュール '{1}' に対して追加の解決パスを実行しています。", + "BUILD_OPTIONS_6919": "ビルド オプション", + "Backwards_Compatibility_6253": "下位互換性", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底クラスの式ではクラスの型パラメーターを参照することはできません。", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底コンストラクターの戻り値の型 '{0}' が、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合ではありません。", + "Base_constructors_must_all_have_the_same_return_type_2510": "既定コンストラクターの戻り値の型は、すべて同じである必要があります。", + "Base_directory_to_resolve_non_absolute_module_names_6083": "相対モジュール名を解決するためのベース ディレクトリ。", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ターゲットが ES2020 未満の場合、bigint リテラルは使用できません。", + "Binary_digit_expected_1177": "2 進の数字が必要です。", + "Binding_element_0_implicitly_has_an_1_type_7031": "バインド要素 '{0}' には暗黙的に '{1}' 型が含まれます。", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "ブロック スコープの変数 '{0}' が、宣言の前に使用されています。", + "Build_a_composite_project_in_the_working_directory_6925": "作業ディレクトリに複合プロジェクトを作成します。", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "最新の状態であると思われるものを含むすべてのプロジェクトをビルドします。", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "最新でない場合は、1 つ以上のプロジェクトとその依存関係をビルドします", + "Build_option_0_requires_a_value_of_type_1_5073": "ビルド オプション '{0}' には型 {1} の値が必要です。", + "Building_project_0_6358": "プロジェクト \"{0}\" をビルドしています...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "組み込みの反復子は、'any' の代わりに 'undefined' の 'TReturn' 型を使用してインスタンス化されます。", + "COMMAND_LINE_FLAGS_6921": "コマンドライン フラグ", + "COMMON_COMMANDS_6916": "一般的なコマンド", + "COMMON_COMPILER_OPTIONS_6920": "一般的なコンパイラ オプション", + "Call_decorator_expression_90028": "デコレーター式を呼び出す", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼び出しシグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "戻り値の型の注釈がない呼び出しシグネチャの戻り値の型は、暗黙的に 'any' になります。", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "引数なしの呼び出しシグネチャに、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。", + "Call_target_does_not_contain_any_signatures_2346": "呼び出しターゲットにシグネチャが含まれていません。", + "Can_only_convert_logical_AND_access_chains_95142": "論理 AND のアクセス チェーンのみを変換できます", + "Can_only_convert_named_export_95164": "名前付きエクスポートのみを変換できます", + "Can_only_convert_property_with_modifier_95137": "修飾子を伴うプロパティの変換のみ可能です", + "Can_only_convert_string_concatenations_and_string_literals_95154": "文字列の連結と文字列リテラルのみを変換できます", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}.{1}' にアクセスできません。'{0}' は型で、名前空間ではありません。'{0}[\"{1}\"]' で '{0}' のプロパティ '{1}' の型を取得するつもりでしたか?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' が有効である場合、修飾しないで別のファイルから '{0}' にアクセスすることはできません。代わりに '{2}' を使用してください。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' が有効である場合、アンビエント const 列挙型にアクセスすることはできません。", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' コンストラクター型を '{1}' コンストラクター型に割り当てることができません。", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "抽象コンストラクター型を非抽象コンストラクター型に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_a_class_2629": "クラスであるため、'{0}' に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "定数であるため、'{0}' に代入することはできません。", + "Cannot_assign_to_0_because_it_is_a_function_2630": "関数であるため、'{0}' に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "名前空間であるため、'{0}' に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "読み取り専用プロパティであるため、'{0}' に代入することはできません。", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "列挙型であるため、'{0}' に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_an_import_2632": "インポートであるため、'{0}' に割り当てることはできません。", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "変数ではないため、'{0}' に割り当てられません。", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "プライベート メソッド '{0}' に割り当てることはできません。プライベート メソッドは書き込み可能ではありません。", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "モジュール '{0}' は、モジュール以外のエンティティに解決するので拡張できません。", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "モジュール '{0}' は、モジュール以外のエンティティに解決するため、値のエクスポートで拡張できません。", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' フラグが 'amd' か 'system' でない限り、オプション '{0}' を使用してモジュールをコンパイルできません。", + "Cannot_create_an_instance_of_an_abstract_class_2511": "抽象クラスのインスタンスは作成できません。", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "反復子の 'next' メソッドには型 '{1}' が必要なため、値に反復をデリゲートすることはできませんが、含まれるジェネレーターは常に '{0}' を送信します。", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}' をエクスポートできません。モジュールからエクスポートできるのはローカル宣言のみです。", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "クラス '{0}' を拡張できません。Class コンストラクターがプライベートに設定されています。", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "インターフェイス '{0}' を拡張できません。'implements' ですか?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "現在のディレクトリに tsconfig.json ファイルが見つかりません: {0}。", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "指定されたディレクトリに tsconfig.json ファイルが見つかりません: '{0}'。", + "Cannot_find_global_type_0_2318": "グローバル型 '{0}' が見つかりません。", + "Cannot_find_global_value_0_2468": "グローバル値 '{0}' が見つかりません。", + "Cannot_find_lib_definition_for_0_2726": "'{0}' のライブラリ定義が見つかりません。", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' のライブラリ定義が見つかりません。'{1}' ですか?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "モジュール '{0}' が見つかりません。'--resolveJsonModule' を使用して '.json' 拡張子を持つモジュールをインポートすることをご検討ください。", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "モジュール '{0}' が見つかりません。'moduleResolution' オプションを 'nodenext' に設定するか、'paths' オプションにエイリアスを追加するつもりでしたか?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "モジュール '{0}' またはそれに対応する型宣言が見つかりません。", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' の副作用インポートに対するモジュールまたは型宣言が見つかりません。", + "Cannot_find_name_0_2304": "名前 '{0}' が見つかりません。", + "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' という名前は見つかりません。'{1}' ですか?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "名前 '{0}' が見つかりません。インスタンス メンバー 'this.{0}' ですか?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "名前 '{0}' が見つかりません。静的メンバー '{1}.{0}' ですか?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "名前 '{0}' が見つかりません。これを非同期関数に書き込むということですか?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{1}' 以降に変更してみてください。", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションが 'dom' を含むように変更してみてください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' をお試しください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "名前 '{0}' が見つかりません。Bun の型定義をインストールする必要がありますか?'npm i --save-dev @types/bun' を試してから、tsconfig 内の型フィールドに 'bun' を追加してください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` をお試しください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、tsconfig の型フィールドに 'jest' または 'mocha' を追加してください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` をお試しください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` を試してから、tsconfig の型フィールドに 'jquery' を追加してみてください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` をお試しください。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` を試してから、tsconfig の型フィールドに 'node' を追加してみてください。", + "Cannot_find_namespace_0_2503": "名前空間 '{0}' が見つかりません。", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "'{0}' という名前空間は見つかりません。'{1}' ですか?", + "Cannot_find_parameter_0_1225": "パラメーター '{0}' が見つかりません。", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "入力ファイルの共通サブディレクトリ パスが見つかりません。", + "Cannot_find_type_definition_file_for_0_2688": "'{0}' の型定義ファイルが見つかりません。", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "型宣言ファイルをインポートできません。'{1}' の代わりに '{0}' をインポートすることを検討してください。", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "ブロック スコープ宣言 '{1}' と同じスコープ内の外部スコープ変数 '{0}' を初期化できません。", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "'null' の可能性があるオブジェクトを呼び出すことはできません。", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "'null' または 'undefined' の可能性があるオブジェクトを呼び出すことはできません。", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "'undefined' の可能性があるオブジェクトを呼び出すことはできません。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列の非構造化は常に '{0}' を送信します。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、配列展開は常に '{0}' を送信します。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "反復子の 'next' メソッドは型 '{1}' を予期するため、値を反復処理できませんが、for-of は常に '{0}' を送信します。", + "Cannot_move_statements_to_the_selected_file_95183": "選択したファイルにステートメントを移動できません", + "Cannot_move_to_file_selected_file_is_invalid_95179": "ファイルに移動できません。選択したファイルは無効です", + "Cannot_read_file_0_5083": "ファイル '{0}' を読み取れません。", + "Cannot_read_file_0_Colon_1_5012": "ファイル '{0}' を読み取れません: {1}。", + "Cannot_redeclare_block_scoped_variable_0_2451": "ブロック スコープの変数 '{0}' を再宣言することはできません。", + "Cannot_redeclare_exported_variable_0_2323": "エクスポートされた変数 '{0}' を再び宣言できません。", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 句で識別子 '{0}' を再宣言することはできません。", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "型の注釈で関数呼び出しを開始することはできません。", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' フラグが指定されていないと、JSX を使用できません。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' が有効である場合、型または型のみの名前空間で 'export import' を使用することはできません。", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' が 'none' である場合、インポート、エクスポート、モジュール拡張は使用できません。", + "Cannot_use_namespace_0_as_a_type_2709": "名前空間 '{0}' を型として使用することはできません。", + "Cannot_use_namespace_0_as_a_value_2708": "名前空間 '{0}' を値として使用することはできません。", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "デコレートされたクラスの静的プロパティ初期化子で 'this' を使用できません。", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "ファイル '{0}' は、参照先のプロジェクト '{1}' によって生成された '.tsbuildinfo' ファイルを上書きするため、書き込めません", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "複数の入力ファイルで上書きされることになるため、ファイル '{0}' を書き込めません。", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "入力ファイルを上書きすることになるため、ファイル '{0}' を書き込めません。", + "Catch_clause_variable_cannot_have_an_initializer_1197": "catch 句の変数に初期化子を指定することはできません。", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 句の変数型の注釈を指定する場合は、'any' または 'unknown' にする必要があります。", + "Change_0_to_1_90014": "'{0}' を '{1}' に変更する", + "Change_all_extended_interfaces_to_implements_95038": "拡張されたすべてのインターフェイスを 'implements' に変更します", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "jsdoc スタイルのすべての型を TypeScript に変更します", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "jsdoc スタイルのすべての型を TypeScript に変更します (さらに、'| undefined' を null 許容型に追加します)", + "Change_extends_to_implements_90003": "'extends' を 'implements' に変更する", + "Change_spelling_to_0_90022": "スペルを '{0}' に変更する", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "宣言されているものの、コンストラクターで設定されていないクラス プロパティを確認します。", + "Check_side_effect_imports_6806": "副作用のインポートを確認してください。", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind'、'call'、'apply' のメソッドの引数が元の関数と一致することを確認します。", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' が '{1}' - '{2}' の最長一致のプレフィックスであるかを確認しています。", + "Circular_definition_of_import_alias_0_2303": "インポート エイリアス '{0}' の循環定義です。", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "構成: {0} の解決中に循環が検出されました", + "Circularity_originates_in_type_at_this_location_2751": "この位置の型で循環が発生しています。", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "クラス '{0}' で定義されたインスタンス メンバー アクセサー '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー関数として定義されています。", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "クラス '{0}' で定義されたインスタンス メンバー関数 '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー アクセサーとして定義されています。", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "クラス '{0}' で定義されたインスタンス メンバー プロパティ '{1}' が、拡張されたクラス '{2}' ではインスタンス メンバー関数として定義されています。", + "Class_0_incorrectly_extends_base_class_1_2415": "クラス '{0}' は基底クラス '{1}' を正しく拡張していません。", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "クラス '{0}' はクラス '{1}' を正しく実装していません。'{1}' を拡張し、そのメンバーをサブクラスとして継承しますか?", + "Class_0_incorrectly_implements_interface_1_2420": "クラス '{0}' はインターフェイス '{1}' を正しく実装していません。", + "Class_0_used_before_its_declaration_2449": "クラス '{0}' は宣言の前に使用されました。", + "Class_constructor_may_not_be_a_generator_1368": "クラス コンストラクターをジェネレーターにすることはできません。", + "Class_constructor_may_not_be_an_accessor_1341": "クラス コンストラクターをアクセサーにすることはできません。", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "クラスの宣言では '{0}' のオーバーロード リストを実装できません。", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラスの宣言で複数の '@augments' または '@extends' タグを含めることはできません。", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "クラス デコレーターは、静的プライベート識別子と共に使用することはできません。試験段階のデコレーターを削除することをご検討ください。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "親クラスによって定義されたクラス フィールド '{0}' は、super を介して子クラスでアクセスすることはできません。", + "Class_name_cannot_be_0_2414": "クラス名を '{0}' にすることはできません。", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "モジュール {0} で ES5 以降を対象とする場合、クラス名を 'Object' にすることはできません。", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "クラス側の静的な '{0}' が基底クラス側の静的な '{1}' を正しく拡張していません。", + "Classes_can_only_extend_a_single_class_1174": "クラスで拡張できるクラスは 1 つのみです。", + "Classes_may_not_have_a_field_named_constructor_18006": "クラスに 'constructor' という名前のフィールドを含めることはできません。", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "クラスに含まれるコードは JavaScript の厳格モードで評価されます。このモードでは、'{0}' の使用は許可されません。詳細については、「https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode」を参照してください。", + "Command_line_Options_6171": "コマンド ライン オプション", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "構成ファイルか、'tsconfig.json' を含むフォルダーにパスが指定されたプロジェクトをコンパイルします。", + "Compiler_Diagnostics_6251": "コンパイラの診断", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "コンパイラ オプション '{0}' に空の文字列を指定することはできません。", + "Compiler_option_0_expects_an_argument_6044": "コンパイラ オプション '{0}' には引数が必要です。", + "Compiler_option_0_may_not_be_used_with_build_5094": "コンパイラオプション '--{0} ' は '--build ' と共に使用できない場合があります。", + "Compiler_option_0_may_only_be_used_with_build_5093": "コンパイラ オプション '--{0} ' は '--build ' とのみ使用できる場合があります。", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "値 '{1}' のコンパイラ オプション '{0}' が不安定です。夜間 TypeScript を使用して、このエラーを無効にします。'npm install -D typescript@next' を使用して更新してみてください。", + "Compiler_option_0_requires_a_value_of_type_1_5024": "コンパイラ オプション '{0}' には {1} の型の値が必要です。", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "private 識別子を下位レベルに生成するときに、コンパイラは名前 '{0}' を予約します。", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "指定されたパスにある TypeScript プロジェクトをコンパイルします。", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "現在のプロジェクト (作業ディレクトリ内の tsconfig.json) のコンパイル", + "Compiles_the_current_project_with_additional_settings_6929": "追加の設定を使用して、現在のプロジェクトをコンパイルします。", + "Completeness_6257": "完全", + "Composite_projects_may_not_disable_declaration_emit_6304": "複合プロジェクトで宣言の生成を無効にすることはできません。", + "Composite_projects_may_not_disable_incremental_compilation_6379": "複合プロジェクトではインクリメンタル コンパイルを無効にできません。", + "Computed_from_the_list_of_input_files_6911": "入力ファイルのリストから計算されます。", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算されるプロパティは、数値または文字列リテラル、変数、または --isolatedDeclarations を含むドット付き式である必要があります。", + "Computed_property_names_are_not_allowed_in_enums_1164": "計算されたプロパティ名は列挙型では使用できません。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "クラスまたはオブジェクト リテラル上の計算されたプロパティ名を --isolatedDeclarations と共に推論することはできません。", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "文字列値のメンバーを持つ列挙型では、計算値は許可されません。", + "Concatenate_and_emit_output_to_single_file_6001": "出力を連結して 1 つのファイルを生成します。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "インポートを解決するときに、リゾルバー固有の既定値に加えて設定する条件です。", + "Conflicts_are_in_this_file_6201": "このファイル内に競合があります。", + "Consider_adding_a_declare_modifier_to_this_class_6506": "このクラスに 'declare' 修飾子を追加することを検討してください。", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "コンストラクト シグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "戻り値の型の注釈がないコンストラクト シグネチャの戻り値の型は、暗黙的に 'any' になります。", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "引数のないコンストラクト シグネチャには、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。", + "Constructor_implementation_is_missing_2390": "コンストラクターの実装がありません。", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "クラス '{0}' のコンストラクターはプライベートであり、クラス宣言内でのみアクセス可能です。", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "クラス '{0}' のコンストラクターは保護されており、クラス宣言内でのみアクセス可能です。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "共用体型で使用する場合、コンストラクターの型の表記はかっこで囲む必要があります。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "交差型で使用する場合、コンストラクターの型の表記はかっこで囲む必要があります。", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生クラスのコンストラクターには 'super' の呼び出しを含める必要があります。", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "包含するファイルが指定されていないため、ルート ディレクトリを決定できません。'node_modules' フォルダーのルックアップをスキップします。", + "Containing_function_is_not_an_arrow_function_95128": "含まれている関数はアロー関数ではありません", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "モジュール形式の JS ファイルを検出するために使用するメソッドを制御します。", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "型 '{0}' から型 '{1}' への変換は、互いに十分に重複できないため間違っている可能性があります。意図的にそうする場合は、まず式を 'unknown' に変換してください。", + "Convert_0_to_1_in_0_95003": "'{0}' を '{0} の {1}' に変換します", + "Convert_0_to_mapped_object_type_95055": "'{0}' をマップされたオブジェクト型に変換する", + "Convert_all_const_to_let_95102": "すべての 'const' を 'let' に変換する", + "Convert_all_constructor_functions_to_classes_95045": "すべてのコンストラクター関数をクラスに変換します", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "すべての無効な文字を HTML エンティティ コードに変換する", + "Convert_all_re_exported_types_to_type_only_exports_1365": "すべての再エクスポートされた型を、型のみのエクスポートに変換する", + "Convert_all_require_to_import_95048": "'require' をすべて 'import' に変換", + "Convert_all_to_async_functions_95066": "すべてを非同期関数に変換する", + "Convert_all_to_bigint_numeric_literals_95092": "すべてを bigint 数値リテラルに変換する", + "Convert_all_to_default_imports_95035": "すべてを既定のインポートに変換します", + "Convert_all_type_literals_to_mapped_type_95021": "すべての型リテラルをマップされた型に変換します", + "Convert_all_typedef_to_TypeScript_types_95177": "すべての typedef を TypeScript 型に変換してください。", + "Convert_arrow_function_or_function_expression_95122": "アロー関数または関数式を変換する", + "Convert_const_to_let_95093": "'const' を 'let' に変換する", + "Convert_default_export_to_named_export_95061": "既定のエクスポートを名前付きエクスポートに変換する", + "Convert_function_declaration_0_to_arrow_function_95106": "関数宣言 '{0}' をアロー関数に変換する", + "Convert_function_expression_0_to_arrow_function_95105": "関数の式 '{0}' をアロー関数に変換する", + "Convert_function_to_an_ES2015_class_95001": "関数を ES2015 クラスに変換します", + "Convert_invalid_character_to_its_html_entity_code_95100": "無効な文字をその html エンティティ コードに変換する", + "Convert_named_export_to_default_export_95062": "名前付きエクスポートを既定のエクスポートに変換する", + "Convert_named_imports_to_default_import_95170": "名前付きインポートを既定のインポートに変換する", + "Convert_named_imports_to_namespace_import_95057": "名前付きインポートを名前空間インポートに変換します", + "Convert_namespace_import_to_named_imports_95056": "名前空間インポートを名前付きインポートに変換します", + "Convert_overload_list_to_single_signature_95118": "オーバーロード リストを単一のシグネチャに変換する", + "Convert_parameters_to_destructured_object_95075": "パラメーターを非構造化オブジェクトに変換する", + "Convert_require_to_import_95047": "'require' を 'import' に変換", + "Convert_to_ES_module_95017": "ES モジュールに変換する", + "Convert_to_a_bigint_numeric_literal_95091": "bigint 数値リテラルに変換する", + "Convert_to_anonymous_function_95123": "匿名関数に変換する", + "Convert_to_arrow_function_95125": "アロー関数に変換する", + "Convert_to_async_function_95065": "非同期関数に変換する", + "Convert_to_default_import_95013": "既定のインポートに変換する", + "Convert_to_named_function_95124": "名前付き関数に変換する", + "Convert_to_optional_chain_expression_95139": "オプションのチェーン式に変換します", + "Convert_to_template_string_95096": "テンプレート文字列に変換する", + "Convert_to_type_only_export_1364": "型のみのエクスポートに変換する", + "Convert_typedef_to_TypeScript_type_95176": "typedef を TypeScript 型に変換してください。", + "Corrupted_locale_file_0_6051": "ロケール ファイル {0} は破損しています。", + "Could_not_convert_to_anonymous_function_95153": "匿名関数に変換できませんでした", + "Could_not_convert_to_arrow_function_95151": "アロー関数に変換できませんでした", + "Could_not_convert_to_named_function_95152": "名前付き関数に変換できませんでした", + "Could_not_determine_function_return_type_95150": "関数の戻り値の型を特定できませんでした", + "Could_not_find_a_containing_arrow_function_95127": "含まれているアロー関数が見つかりませんでした", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "モジュール '{0}' の宣言ファイルが見つかりませんでした。'{1}' は暗黙的に 'any' 型になります。", + "Could_not_find_convertible_access_expression_95140": "変換可能なアクセス式が見つかりませんでした", + "Could_not_find_export_statement_95129": "export ステートメントが見つかりませんでした", + "Could_not_find_import_clause_95131": "インポート句が見つかりませんでした", + "Could_not_find_matching_access_expressions_95141": "一致するアクセス式が見つかりませんでした", + "Could_not_find_name_0_Did_you_mean_1_2570": "名前 '{0}' が見つかりませんでした。'{1}' ですか?", + "Could_not_find_namespace_import_or_named_imports_95132": "名前空間のインポートまたは名前付きインポートが見つかりませんでした", + "Could_not_find_property_for_which_to_generate_accessor_95135": "アクセサーを生成するプロパティが見つかりませんでした", + "Could_not_find_variable_to_inline_95185": "インライン化する変数が見つかりませんでした。", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "次の拡張子を持つパス '{0}' を解決できませんでした: {1}。", + "Could_not_write_file_0_Colon_1_5033": "ファイル '{0}' を書き込めませんでした: '{1}'。", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "生成された JavaScript ファイルのソース マップ ファイルを作成します。", + "Create_sourcemaps_for_d_ts_files_6614": "d.ts ファイルのソースマップを作成します。", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "作業ディレクトリの推奨設定を使用して tsconfig.json を作成します。", + "DIRECTORY_6038": "ディレクトリ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "文字クラスでは、10 進数のエスケープ シーケンスと前方参照を使用することはできません。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "先頭が 0 の 10 進数を使用することはできません。", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "この宣言は別のファイル内の宣言を拡張します。この操作はシリアル化できません。", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "このファイルの宣言を生成するには、拡張のためにこのインポートを保持する必要があります。これは --isolatedDeclarations ではサポートされていません。", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "このファイルの宣言の生成では、プライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "このファイルの宣言の生成では、モジュール '{1}' からのプライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "このパラメーターの宣言を生成するには、その型に未定義の値を暗黙的に追加する必要があります。これは --isolatedDeclarations ではサポートされていません。", + "Declaration_expected_1146": "宣言が必要です。", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣言名が組み込みのグローバル識別子 '{0}' と競合しています。", + "Declaration_or_statement_expected_1128": "宣言またはステートメントが必要です。", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "宣言またはステートメントが必要です。この '=' はステートメントのブロックに続くため、非構造化割り当てを作成する場合は、割り当て全体をかっこで囲む必要があります。", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "明確な代入アサーションを使った宣言には、型の注釈も指定する必要があります。", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "初期化子を使った宣言に明確な代入アサーションを含めることはできません。", + "Declare_a_private_field_named_0_90053": "'{0}' という名前のプライベート フィールドを宣言します。", + "Declare_method_0_90023": "メソッド '{0}' を宣言する", + "Declare_private_method_0_90038": "プライベート メソッド '{0}' を宣言する", + "Declare_private_property_0_90035": "プライベート プロパティ '{0}' を宣言します", + "Declare_property_0_90016": "プロパティ '{0}' を宣言する", + "Declare_static_method_0_90024": "静的メソッド '{0}' を宣言する", + "Declare_static_property_0_90027": "静的プロパティ '{0}' を宣言する", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "デコレーター関数の戻り値の型 '{0}' は、型 '{1}' に割り当てられません。", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "デコレーター関数の戻り値の型は '{0}' ですが、\"void\" または \"any\" である必要があります。", + "Decorator_used_before_export_here_1486": "ここで 'export' の前にデコレーターが使用されています。", + "Decorators_are_not_valid_here_1206": "デコレーターはここでは無効です。", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "デコレーターを同じ名前の複数の get/set アクセサーに適用することはできません。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "デコレーターが 'export' の前に使用されている場合は、'export' または 'export default' の後にデコレーターを使用することはできません。", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "デコレーターは、プロパティ宣言の名前とすべてのキーワードの前に置く必要があります。", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "既定の catch 句の変数は '任意' ではなく '不明' です。", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "モジュールの既定エクスポートがプライベート名 '{0}' を持っているか、使用しています。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "既定のエクスポートを --isolatedDeclarations と共に推論することはできません。", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "遅延インポートでは、既定のインポートは許可されません。", + "Default_library_1424": "既定のライブラリ", + "Default_library_for_target_0_1425": "ターゲット '{0}' の既定のライブラリ", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "遅延インポートは、'--module' フラグが 'esnext' または 'preserve' に設定されている場合にのみサポートされます。", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "次の識別子の定義が、別のファイル内の定義と競合しています: {0}", + "Delete_all_unused_declarations_95024": "未使用の宣言をすべて削除します", + "Delete_all_unused_imports_95147": "未使用の import をすべて削除します", + "Delete_all_unused_param_tags_95172": "未使用の '@param' タグをすべて削除します", + "Delete_the_outputs_of_all_projects_6365": "すべてのプロジェクトの出力を削除します。", + "Delete_unused_param_tag_0_95171": "未使用の '@param' タグ '{0}' を削除します", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[非推奨] 代わりに '--jsxFactory' を使います。'react' JSX 発行を対象とするときに、createElement に対して呼び出されたオブジェクトを指定します", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[非推奨] 代わりに '--outFile' を使います。出力を連結して 1 つのファイルを生成します", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[非推奨] 代わりに '--skipLibCheck' を使います。既定のライブラリ宣言ファイルの型チェックをスキップします。", + "Deprecated_setting_Use_outFile_instead_6677": "非推奨の設定です。代わりに 'outFile' をお使いください。", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "'await' を使用することを忘れていませんか?", + "Did_you_mean_0_1369": "'{0}' を意図していましたか?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' が型 'new (...args: any[]) => {1}' に制約されることを意図していましたか?", + "Did_you_mean_to_call_this_expression_6212": "この式を呼び出すことを意図していましたか?", + "Did_you_mean_to_mark_this_function_as_async_1356": "この関数を 'async' とマークすることを意図していましたか?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':' を使用するつもりでしたか? 含まれるオブジェクト リテラルが非構造化パターンの一部である場合、'=' はプロパティ名の後にのみ使用することができます。", + "Did_you_mean_to_use_new_with_this_expression_6213": "この式で 'new' を使用することを意図していましたか?", + "Digit_expected_1124": "数値が必要です", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "ディレクトリ '{0}' は存在していません。ディレクトリ内のすべての参照をスキップしています。", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "ディレクトリ '{0}' には package.json のスコープが含まれません。インポートは解決されません。", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "生成された JavaScript ファイルでの 'use strict' ディレクティブの追加を無効にします。", + "Disable_checking_for_this_file_90018": "このファイルのチェックを無効にする", + "Disable_emitting_comments_6688": "コメントの生成を無効にします。", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc コメントに '@internal' を含む宣言の生成を無効にします。", + "Disable_emitting_files_from_a_compilation_6660": "コンパイルからのファイルの出力を無効にします。", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "型チェック エラーが報告された場合は、ファイルの生成を無効にします。", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "生成されたコード内で 'const 列挙型' 宣言の消去を無効にします。", + "Disable_error_reporting_for_unreachable_code_6603": "到達できないコードのエラー報告を無効にします。", + "Disable_error_reporting_for_unused_labels_6604": "未使用のラベルのエラー報告を無効にします。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "完全な型チェックを無効にしてください (重大な解析エラーと生成エラーのみが報告されます)。", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "コンパイルされた出力での '__extends' などのカスタム ヘルパー関数の生成を無効にします。", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "既定の lib.d.ts を含むすべてのライブラリ ファイルを含めることを無効にします。", + "Disable_loading_referenced_projects_6235": "参照されているプロジェクトの読み込みを無効にします。", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "複合プロジェクトを参照するときに宣言ファイルではなくソース ファイルを優先することを無効にします。", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "オブジェクト リテラルの作成時に余分なプロパティ エラーの報告を無効にします。", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "symlink を realpath に解決できないようにします。これは、ノードの同じフラグに関連しています。", + "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript プロジェクトのサイズ制限を無効にします。", + "Disable_solution_searching_for_this_project_6224": "このプロジェクトのソリューション検索を無効にします。", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "関数型の汎用シグネチャに対する厳密なチェックを無効にします。", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript プロジェクトの型の取得を無効にする", + "Disable_truncating_types_in_error_messages_6663": "エラー メッセージ内の型の切り捨てを無効にします。", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "参照先のプロジェクトの宣言ファイルの代わりにソース ファイルを使用することを無効にします。", + "Disable_wiping_the_console_in_watch_mode_6684": "ウォッチ モードでのコンソールのワイプを無効にします。", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "プロジェクト内のファイル名の参照による型取得の推論を無効にします。", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import'、'require'、'' を使用して TypeScript がプロジェクトに追加するファイルの数を増やすことを無効にします。", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "同じファイルへの大文字小文字の異なる参照を許可しない。", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "トリプルスラッシュの参照やインポートしたモジュールをコンパイルされたファイルのリストに追加しないでください。", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript の一部ではないランタイム コンストラクトを許可しません。", + "Do_not_emit_comments_to_output_6009": "コメントを出力しないでください。", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' の注釈を含むコードの宣言を生成しないでください。", + "Do_not_emit_outputs_6010": "出力しないでください。", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "エラーが報告される場合は、出力しないでください。", + "Do_not_emit_use_strict_directives_in_module_output_6112": "モジュール出力で 'use strict' ディレクティブを生成しません。", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "生成されたコード内で const 列挙型宣言を消去しないでください。", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "コンパイルされた出力で '__extends' などのカスタム ヘルパー関数を生成しないでください。", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "既定のライブラリ ファイル (lib.d.ts) を含めないでください。", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "到達できないコードに関するエラーを報告しない。", + "Do_not_report_errors_on_unused_labels_6074": "未使用のラベルに関するエラーを報告しない。", + "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink の実際のパスを解決しません。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "型のみとしてマークされていないインポートまたはエクスポートを変換または削除せずに、'module' 設定に基づいて出力ファイルの形式で書き込まれていることを確認してください。", + "Do_not_truncate_error_messages_6165": "エラー メッセージを切り捨てないでください。", + "Duplicate_function_implementation_2393": "関数の実装が重複しています。", + "Duplicate_identifier_0_2300": "識別子 '{0}' が重複しています。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別子 '{0}' が重複しています。コンパイラは、モジュールの最上位のスコープに名前 '{1}' を予約します。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別子 '{0}' が重複しています。コンパイラは非同期関数を含むモジュールの最上位のスコープに名前 '{1}' を予約します。", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別子 '{0}' が重複しています。静的初期化子で 'super' 参照を出力するときに、コンパイラは名前 '{1}' を予約します。", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別子 '{0}' が重複しています。コンパイラは宣言 '{1}' を使用して非同期関数をサポートします。", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "識別子 '{0}' が重複しています。静的要素とインスタンス要素は、同じプライベート名を共有できません。", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別子 'arguments' が重複しています。コンパイラは 'arguments' を使用して rest パラメーターを初期化します。", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別子 '_newTarget' が重複しています。コンパイラは変数宣言 '_newTarget' を使用して、'new.target' メタプロパティの参照をキャプチャします。", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別子 '_this' が重複しています。コンパイラは変数宣言 '_this' を使用して '_this' の参照をキャプチャします。", + "Duplicate_index_signature_for_type_0_2374": "型 '{0}' のインデックス シグネチャが重複しています。", + "Duplicate_label_0_1114": "ラベル '{0}' が重複しています。", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "プロパティ '{0}' が重複しています。", + "Duplicate_regular_expression_flag_1500": "正規表現フラグが重複しています。", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動的インポートの指定子の型は 'string' である必要がありますが、ここでは型 '{0}' が指定されています。", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "動的インポートは、'--module' フラグが 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'node18'、'node20'、または 'nodenext' に設定されている場合にのみサポートされます。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動的インポートでは、引数として、モジュール指定子とオプションの属性セットのみを受け取ることができます", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "動的インポートは、'--module' オプションが 'esnext'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されている場合にのみ、2 番目の引数をサポートします。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript のインポートとエクスポートは、CommonJS ファイルの 'verbatimModuleSyntax' の下に書き込むことができません。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript のインポートとエクスポートは、CommonJS ファイルの 'verbatimModuleSyntax' の下に書き込むことができません。最も近い 'package.json' の 'type' フィールドを調整してこのファイルを ECMAScript モジュールにするか、TypeScript で 'verbatimModuleSyntax'、'module'、'moduleResolution' の設定を調整します。", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module' が 'preserve' に設定されている場合、CommonJS モジュールでは ECMAScript モジュール構文を使用できません。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' の各宣言の値が異なります。'{2}' が必要ですが、'{3}' が指定されました。", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "共用体型 '{0}' の各メンバーにはコンストラクト シグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "共用体型 '{0}' の各メンバーにはシグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。", + "Editor_Support_6249": "エディター サポート", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "型 '{0}' の式を使用して型 '{1}' にインデックスを付けることはできないため、要素は暗黙的に 'any' 型になります。", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "インデックス式が型 'number' ではないため、要素に 'any' 型が暗黙的に指定されます。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。'{1}' を呼び出すことを意図していましたか?", + "Emit_6246": "生成", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 標準準拠クラス フィールドを生成します。", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "出力ファイルの最初に UTF-8 バイト順マーク(BOM) を生成します。", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "個々のファイルを持つ代わりに、複数のソース マップを含む単一ファイルを生成します。", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "デバッグのために実行するコンパイラの v8 CPU プロファイルを生成します。", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS モジュールのインポートをサポートしやすくするために追加の JavaScript を生成します。これにより、互換性のある型に対して 'allowSyntheticDefaultImports' を使用できるようになります。", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Set ではなく Define を使用して、クラスのフィールドを生成します。", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "ソース ファイル内の修飾された宣言に対してデザイン型メタデータを生成します。", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "イテレーションのために、準拠性が高いものの、冗長でパフォーマンスが低い JavaScript を生成します。", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "単一ファイル内でソースマップと共にソースを生成します。'--inlineSourceMap' または '--sourceMap' を設定する必要があります。", + "Enable_all_strict_type_checking_options_6180": "厳密な型チェックのオプションをすべて有効にします。", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "TypeScript の出力で色と書式設定を有効にして、コンパイラ エラーを読みやすくします。", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "プロジェクト参照での TypeScript プロジェクトの使用を許可する制約を有効にします。", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "関数で明示的に返されないコードパスのエラー報告を有効にします。", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "暗黙的な 'any' 型を含む式と宣言に関するエラー報告を有効にします。", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch ステートメントに case のフォールスルーがある場合のエラー報告を有効にします。", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "型チェックされた JavaScript ファイルでのエラー報告を有効にします。", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "ローカル変数が読み取られていない場合にエラー報告を有効にします。", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' に 'any' 型が指定されている場合は、エラー報告を有効にします。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "従来の実験的なデコレーターの実験的なサポートを有効にしてください。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "宣言ファイルが存在する場合、拡張子を持つファイルのインポートを有効にしてください。", + "Enable_importing_json_files_6689": ".json ファイルのインポートを有効にします。", + "Enable_lib_replacement_6808": "lib 置換を有効にします。", + "Enable_project_compilation_6302": "プロジェクトのコンパイルを有効にします", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "厳格な 'bind'、'call'、'apply' メソッドを関数で有効にします。", + "Enable_strict_checking_of_function_types_6186": "関数の型の厳密なチェックを有効にします。", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "クラス内のプロパティの初期化の厳密なチェックを有効にします。", + "Enable_strict_null_checks_6113": "厳格な null チェックを有効にします。", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "構成ファイルで 'experimentalDecorators' オプションを有効にする", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "構成ファイルで '--jsx' フラグを有効にする", + "Enable_tracing_of_the_name_resolution_process_6085": "名前解決の処理のトレースを有効にします。", + "Enable_verbose_logging_6713": "詳細ログを有効にします。", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "すべてのインポートの名前空間オブジェクトを作成して、CommonJS と ES モジュール間の生成の相互運用性を有効にします。'allowSyntheticDefaultImports' を暗黙のうちに表します。", + "Enables_experimental_support_for_ES7_decorators_6065": "ES7 デコレーター用の実験的なサポートを有効にします。", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "デコレーター用の型メタデータを発行するための実験的なサポートを有効にします。", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "インデックス付きの型を使用して宣言されたキーに対してインデックス付きアクセサーの使用を強制します。", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "派生クラスのオーバーライドするメンバーが override 修飾子でマークされていることを確認します。", + "Ensure_that_casing_is_correct_in_imports_6637": "インポートの大文字と小文字の指定が正しいことを確認します。", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "各ファイルが他のインポートに依存しないで安全にトランスパイルできることを確認します。", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "'use strict' が常に生成されることを確認します。", + "Entering_conditional_exports_6413": "条件付きエクスポートを入力しています。", + "Entry_point_for_implicit_type_library_0_1420": "暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId が '{1}' の暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions で指定されたタイプ ライブラリ '{0}' のエントリ ポイント", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "compilerOptions で指定された packageId が '{1}' のタイプ ライブラリ '{0}' のエントリ ポイント", + "Enum_0_used_before_its_declaration_2450": "列挙型 '{0}' は宣言の前に使用されました。", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列挙型の宣言は、名前空間または他の列挙型の宣言とのみマージできます。", + "Enum_declarations_must_all_be_const_or_non_const_2473": "列挙型宣言は、すべてが定数、またはすべてが非定数でなければなりません。", + "Enum_member_expected_1132": "列挙型メンバーが必要です。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules' が有効である場合、非リテラル数値メンバーの後に続く列挙型メンバーには初期化子が必要です。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列挙型メンバー初期化子は、--isolatedDeclarations を含む外部シンボルへの参照なしで計算可能である必要があります。", + "Enum_member_must_have_initializer_1061": "列挙型メンバーには初期化子が必要です。", + "Enum_name_cannot_be_0_2431": "列挙型の名前を '{0}' にすることはできません。", + "Environment_Settings_6285": "環境の設定", + "Errors_Files_6041": "エラーの発生したファイル", + "Escape_sequence_0_is_not_allowed_1488": "エスケープ シーケンス '{0}' は許可されていません。", + "Examples_Colon_0_6026": "例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "型 '{0}' と '{1}' の比較が複雑すぎます。", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "型 '{0}' と '{1}' を比較するスタックが深すぎます。", + "Exiting_conditional_exports_6416": "条件付きエクスポートを終了しています。", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} 型の引数が必要です。'@extends' タグで指定してください。", + "Expected_0_arguments_but_got_1_2554": "{0} 個の引数が必要ですが、{1} 個指定されました。", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} 引数が必要ですが、{1} が指定されました。'Promise' の型引数に 'void' を含めましたか?", + "Expected_0_type_arguments_but_got_1_2558": "{0} 個の型引数が必要ですが、{1} 個が指定されました。", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} 型の引数が必要です。'@extends' タグで指定してください。", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 個の引数が必要ですが、0 個しかありませんでした。'new Promise()' では、引数なしで呼び出すことができる 'resolve' を生成するための JSDoc ヒントが必要です。", + "Expected_a_Unicode_property_name_1523": "Unicode プロパティ名が必要です。", + "Expected_a_Unicode_property_name_or_value_1527": "Unicode プロパティ名または値が必要です。", + "Expected_a_Unicode_property_value_1525": "Unicode プロパティ値が必要です。", + "Expected_a_capturing_group_name_1514": "キャプチャ グループ名が必要です。", + "Expected_a_class_set_operand_1520": "クラス セット オペランドが必要でした。", + "Expected_at_least_0_arguments_but_got_1_2555": "最低でも {0} 個の引数が必要ですが、{1} 個指定されました。", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' の対応する JSX 終了タグが必要です。", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX フラグメントの対応する終了タグが必要です。", + "Expected_for_property_initializer_1442": "プロパティ初期化子には '=' を期待しています。", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' の '{0}' フィールドの型は '{1}' であるべきですが、'{2}' を取得しました。", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明示的に指定されたモジュール解決の種類 '{0}'。", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' オプションが 'es2016' 以降に設定されている場合を除き、'bigint' 値に対して累乗を実行することはできません。", + "Export_0_from_module_1_90059": "'{0}' をモジュール '{1}' からエクスポートする", + "Export_all_referenced_locals_90060": "参照されているすべてのローカルをエクスポートする", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript モジュールを対象にする場合は、エクスポート代入を使用できません。代わりに 'export default' または別のモジュール書式の使用をご検討ください。", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "代入のエクスポートは、'--module' フラグが 'system' の場合にはサポートされません。", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "エクスポート宣言が、'{0}' のエクスポートされた宣言と競合しています。", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "エクスポート宣言は名前空間でサポートされません。", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "エクスポート指定子 '{0}' がパス '{1}' の package.json のスコープに存在しません。", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "エクスポートされた型のエイリアス '{0}' にプライベート名 '{1}' が付いているか、その名前を使用しています。", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "エクスポートされた型エイリアス '{0}' がモジュール {2} のプライベート名 '{1}' を持っているか、使用しています。", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "エクスポートされた変数 '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "エクスポートされた変数 '{0}' がプライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "エクスポートされた変数 '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "エクスポートとエクスポートの代入はモジュールの拡張では許可されていません。", + "Expression_expected_1109": "式が必要です。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "式をデコレーターとして使用するには、かっこで囲む必要があります。", + "Expression_or_comma_expected_1137": "式またはコンマが必要です。", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "式では大きすぎて表すことができないタプル型を生成します。", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "式は、複雑すぎて表現できない共用体型を生成します。", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "式は、コンパイラが基底クラスの参照をキャプチャするために使用する '_super' に解決されます。", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "式は、コンパイラが 'new.target' メタプロパティの参照をキャプチャするために使用する変数宣言 '_newTarget' に解決されます。", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "式は、コンパイラが 'this' の参照をキャプチャするために使用する変数宣言 '_this' に解決されます。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "式の型を --isolatedDeclarations と共に推論することはできません。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "extends 句に --isolatedDeclarations を含む式を含めることはできません。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推論された型 '{0}' の extends 句がプライベート名 '{1}' を持っているか、使用しています。", + "Extract_base_class_to_variable_90064": "基底クラスを変数に抽出する", + "Extract_binding_expressions_to_variable_90066": "バインド式を変数に抽出してください", + "Extract_constant_95006": "定数の抽出", + "Extract_default_export_to_variable_90065": "変数への既定のエクスポートを抽出する", + "Extract_function_95005": "関数の抽出", + "Extract_to_0_in_1_95004": "{1} 内の {0} に抽出する", + "Extract_to_0_in_1_scope_95008": "{1} スコープ内の {0} に抽出する", + "Extract_to_0_in_enclosing_scope_95007": "外側のスコープ内の {0} に抽出する", + "Extract_to_interface_95090": "インターフェイスに抽出する", + "Extract_to_type_alias_95078": "型のエイリアスに抽出する", + "Extract_to_typedef_95079": "typedef に抽出する", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "変数に抽出し、'{0} as typeof {0}' で置き換えます", + "Extract_type_95077": "Extract 型", + "FILE_6035": "ファイル", + "FILE_OR_DIRECTORY_6040": "ファイルまたはディレクトリ", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' が見つかりませんでした。", + "Failed_to_resolve_under_condition_0_6415": "条件 '{0}' で解決できませんでした。", + "Fallthrough_case_in_switch_7029": "switch に case のフォールスルーがあります。", + "File_0_does_not_exist_6096": "ファイル '{0}' が存在しません。", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "以前にキャッシュされた検索によるとファイル '{0}' は存在しません。", + "File_0_exists_according_to_earlier_cached_lookups_6239": "以前にキャッシュされた参照によるとファイル ' {0} ' は、存在します。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "ファイル '{0}' が存在します。名前解決の結果として使用します。", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "ファイル '{0}' はサポートされていない拡張子を含んでいます。サポートされている拡張子は {1} のみです。", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "ファイル '{0}' は JavaScript ファイルです。'allowJs' オプションを有効にするつもりでしたか?", + "File_0_is_not_a_module_2306": "ファイル '{0}' はモジュールではありません。", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "ファイル '{0}' がプロジェクト '{1}' のファイル リストに含まれていません。プロジェクトではすべてのファイルをリストするか、'include' パターンを使用する必要があります。", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "ファイル '{0}' が 'rootDir' '{1}' の下にありません。'rootDir' にすべてにソース ファイルが含まれている必要があります。", + "File_0_not_found_6053": "ファイル '{0}' が見つかりません。", + "File_Layout_6284": "ファイル レイアウト", + "File_Management_6245": "ファイルの管理", + "File_appears_to_be_binary_1490": "ファイルはバイナリのようです。", + "File_change_detected_Starting_incremental_compilation_6032": "ファイルの変更が検出されました。インクリメンタル コンパイルを開始しています...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}' にはフィールド \"type\" がないため、ファイルは CommonJS モジュールです", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}' にフィールド \"type\" があり、値が \"module\" ではないため、ファイルは CommonJS モジュールです。", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "\"package.json\" が見つからなかったため、ファイルは CommonJS モジュールです", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}' には値 \"module\" のフィールド \"type\" があるため、ファイルは ECMAScript モジュールです。", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "ファイルは CommonJS モジュールです。ES モジュールに変換される可能性があります。", + "File_is_default_library_for_target_specified_here_1426": "ファイルはこちらで指定されたターゲットの既定のライブラリです。", + "File_is_entry_point_of_type_library_specified_here_1419": "ファイルはこちらで指定されたタイプ ライブラリのエントリ ポイントです。", + "File_is_included_via_import_here_1399": "ファイルはインポートによってこちらに追加されます。", + "File_is_included_via_library_reference_here_1406": "ファイルはライブラリ参照によってこちらにインクルードされます。", + "File_is_included_via_reference_here_1401": "ファイルは参照によってこちらにインクルードされます。", + "File_is_included_via_type_library_reference_here_1404": "ファイルはタイプ ライブラリ参照によってこちらにインクルードされます。", + "File_is_library_specified_here_1423": "ファイルはこちらで指定されたライブラリです。", + "File_is_matched_by_files_list_specified_here_1410": "ファイルはこちらで指定された 'files' リストに一致します。", + "File_is_matched_by_include_pattern_specified_here_1408": "ファイルはこちらで指定されたインクルード パターンに一致します。", + "File_is_output_from_referenced_project_specified_here_1413": "ファイルはこちらで指定された参照先プロジェクトからの出力です。", + "File_is_output_of_project_reference_source_0_1428": "ファイルはプロジェクト参照ソース '{0}' の出力です", + "File_is_source_from_referenced_project_specified_here_1416": "ファイルはこちらで指定された参照先プロジェクトのソースです。", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "ファイル名 '{0}' は、既に含まれているファイル名 '{1}' と大文字と小文字の指定だけが異なります。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "ファイル名 '{0}' の拡張子は '{1}' です。代わりに '{2}' を検索しています。", + "File_name_0_has_a_1_extension_stripping_it_6132": "ファイル名 '{0}' に '{1}' 拡張子が使われています - 削除しています。", + "File_redirects_to_file_0_1429": "ファイルはファイル '{0}' にリダイレクトされます", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "ファイルの指定で再帰ディレクトリのワイルドカード ('**') の後に親ディレクトリ ('..') を指定することはできません: '{0}'。", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "ファイルの指定の末尾を再帰的なディレクトリのワイルドカード ('**') にすることはできません: '{0}'。", + "Filters_results_from_the_include_option_6627": "'include' オプションからの結果をフィルター処理します。", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "検出されたすべてのスペル ミスを修正します", + "Fix_all_expressions_possibly_missing_await_95085": "'await' が不足している可能性があるすべての式を修正する", + "Fix_all_implicit_this_errors_95107": "すべての暗黙的な 'this' エラーを修正する", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "非同期関数の無効な戻り値の型をすべて修正します", + "Fix_all_with_type_only_imports_95182": "型のみのインポートを使用してすべてを修正する", + "For_nodejs_Colon_6287": "Node.js の場合:", + "Found_0_errors_6217": "{0} 件のエラーが見つかりました。", + "Found_0_errors_Watching_for_file_changes_6194": "{0} 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", + "Found_0_errors_in_1_files_6261": "{1} ファイルに {0} 件のエラーが見つかりました。", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "同じファイル内に {0} 件のエラーが見つかりました。{1} から開始します", + "Found_1_error_6216": "1 件のエラーが見つかりました。", + "Found_1_error_Watching_for_file_changes_6193": "1 件のエラーが見つかりました。ファイルの変更をモニタリングしています。", + "Found_1_error_in_0_6259": "{0} で 1 件のエラーが見つかりました", + "Found_package_json_at_0_6099": "'{0}' で 'package.json' が見つかりました。", + "Found_peerDependency_0_with_1_version_6282": "'{1}' バージョンの peerDependency '{0}' が見つかりました。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。クラス定義は自動的に厳格モードになります。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5' を対象としている場合、関数宣言は厳格モードのブロック内では許可されていません。モジュールは自動的に厳格モードになります。", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "戻り値の型の注釈がない関数式の戻り値の型は、暗黙的に '{0}' になります。", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "関数の実装がないか、宣言の直後に指定されていません。", + "Function_implementation_name_must_be_0_2389": "関数の実装名は '{0}' でなければなりません。", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "関数は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "関数に終了の return ステートメントがないため、戻り値の型には 'undefined' が含まれません。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "関数には、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", + "Function_not_implemented_95159": "関数が実装されていません。", + "Function_overload_must_be_static_2387": "関数のオーバーロードは静的でなければなりません。", + "Function_overload_must_not_be_static_2388": "関数のオーバーロードは静的にはできせん。", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "共用体型で使用する場合、関数の型の表記はかっこで囲む必要があります。", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "交差型で使用する場合、関数の型の表記はかっこで囲む必要があります。", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "戻り値の型の注釈がない関数型の戻り値の型は、暗黙的に '{0}' になります。", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "本文を持つ関数は、アンビエントであるクラスとのみ結合できます。", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "プロジェクト内の TypeScript ファイルおよび JavaScript ファイルから、.d.ts ファイルを生成します。", + "Generate_get_and_set_accessors_95046": "'get' および 'set' アクセサーの生成", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "すべてのオーバーライドするプロパティに対して 'get' および 'set' アクセサーを生成します", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "CPU プロファイルを生成します。", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "対応する各 '.d.ts' ファイルにソースマップを生成します。", + "Generates_an_event_trace_and_a_list_of_types_6237": "イベント トレースと型のリストを生成します。", + "Generates_corresponding_d_ts_file_6002": "対応する '.d.ts' ファイルを生成します。", + "Generates_corresponding_map_file_6043": "対応する '.map' ファイルを生成します。", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "ジェネレーターは暗黙的に yield 型 '{0}' を持っています。戻り値の型の注釈を指定することを検討してください。", + "Generators_are_not_allowed_in_an_ambient_context_1221": "ジェネレーターは環境コンテキストでは使用できません。", + "Generic_type_0_requires_1_type_argument_s_2314": "ジェネリック型 '{0}' には {1} 個の型引数が必要です。", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "ジェネリック型 '{0}' には、{1} 個から {2} 個までの型引数が必要です。", + "Global_module_exports_may_only_appear_at_top_level_1316": "グローバル モジュールのエクスポートは最上位レベルにのみ出現可能です。", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "グローバル モジュールのエクスポートは宣言ファイルにのみ出現可能です。", + "Global_module_exports_may_only_appear_in_module_files_1314": "グローバル モジュールのエクスポートはモジュール ファイルにのみ出現可能です。", + "Global_type_0_must_be_a_class_or_interface_type_2316": "グローバル型 '{0}' はクラス型またはインターフェイス型でなければなりません。", + "Global_type_0_must_have_1_type_parameter_s_2317": "グローバル型 '{0}' には {1} 個の型パラメーターが必要です。", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' と '--watch' での再コンパイルは、ファイル内の変更がそのファイルに直接依存しているファイルにのみ影響することを想定しています。", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' と 'watch' モードを使用するプロジェクト内での再コンパイルは、ファイル内の変更がそれに直接依存しているファイルにのみ影響することを想定しています。", + "Hexadecimal_digit_expected_1125": "16 進の数字が必要です。", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "識別子が必要です。'{0}' は、モジュールの最上位レベルでの予約語です。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "識別子が必要です。'{0}' は厳格モードの予約語です。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "識別子が必要です。'{0}' は厳格モードの予約語です。クラス定義は自動的に厳格モードになります。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "識別子が必要です。'{0}' は、厳格モードの予約語です。モジュールは自動的に厳格モードになります。", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "識別子が予期されていました。'{0}' は、ここでは使用できない予約語です。", + "Identifier_expected_1003": "識別子が必要です。", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "識別子が必要です。'__esModule' は、ECMAScript モジュールを変換するときのエクスポート済みマーカーとして予約されています。", + "Identifier_or_string_literal_expected_1478": "識別子または文字列リテラルが必要です。", + "Identifier_string_literal_or_number_literal_expected_1496": "識別子、文字列リテラル、または数値リテラルが必要です。", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' パッケージが実際にこのモジュールを公開する場合は、pull request を送信して 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' を修正することを検討してください", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' パッケージが実際にこのモジュールを公開する場合は、'declare module '{1}';' を含む新しい宣言 (d.ts) ファイルを追加してみてください。", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "見つかった tsconfig を無視し、コマンドライン オプションとファイルを使用してビルドします。", + "Ignore_this_error_message_90019": "このエラー メッセージを無視する", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json を無視し、既定のコンパイラ オプションを使用して指定されたファイルをコンパイルします。", + "Implement_all_inherited_abstract_classes_95040": "継承されたすべての抽象クラスを実装します", + "Implement_all_unimplemented_interfaces_95032": "実装されていないすべてのインターフェイスを実装します", + "Implement_inherited_abstract_class_90007": "継承抽象クラスを実装する", + "Implement_interface_0_90006": "インターフェイス '{0}' を実装する", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "エクスポートされたクラス '{0}' の Implements 句がプライベート名 '{1}' を持っているか、使用しています。", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol ' から 'string' への暗黙の変換は、実行時に失敗します。この式を 'String(...)' でラップすることを検討してください。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "インポート '{0}' は、このファイルで使用されているグローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "インポート '{0}' は、グローバル値と競合するため、'isolatedModules' が有効な場合は、型のみのインポートで宣言する必要があります。", + "Import_0_from_1_90013": "\"{1}\" から `{0}` をインポートします。", + "Import_assertion_values_must_be_string_literal_expressions_2837": "インポート アサーションの値は、文字列リテラル式である必要があります。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "インポート アサーションは、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "インポート アサーションは、'--module' オプションが 'esnext'、'node18'、'node20'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "インポート アサーションは、型のみのインポートまたはエクスポートでは使用できません。", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "インポート アサーションはインポート属性に置き換えられました。'assert' ではなく 'with' を使用してください。", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript モジュールを対象にする場合は、インポート代入を使用できません。代わりに 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' などのモジュール書式の使用をご検討ください。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "インポート 属性の値は、文字列リテラル式である必要があります。", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "インポート属性は、commonjs 'require' 呼び出しにコンパイルするステートメントでは許可されません。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "インポート属性は、'--module' オプションが 'esnext'、'node18'、'node20'、'nodenext' または 'preserve' に設定されている場合にのみサポートされます。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "インポート属性は、型のみのインポートまたはエクスポートでは使用できません。", + "Import_declaration_0_is_using_private_name_1_4000": "インポート宣言 '{0}' がプライベート名 '{1}' を使用しています。", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "インポート宣言が、'{0}' のローカル宣言と競合しています。", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "名前空間内のインポート宣言は、モジュールを参照できません。", + "Import_emit_helpers_from_tslib_6139": "生成ヘルパーを 'tslib' からインポートします。", + "Import_may_be_converted_to_a_default_import_80003": "インポートは既定のインポートに変換される可能性があります。", + "Import_name_cannot_be_0_2438": "インポート名を '{0}' にすることはできません。", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "アンビエント モジュール宣言内のインポート宣言またはエクスポート宣言は、相対モジュール名を通してモジュールを参照することはできません。", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "インポート指定子 '{0}' がパス '{1}' の package.json のスコープに存在しません。", + "Imported_via_0_from_file_1_1393": "ファイル '{1}' から {0} を介してインポートされました", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions で指定された 'importHelpers' をインポートするため、ファイル '{1}' から {0} を介してインポートされました", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、ファイル '{1}' から {0} を介してインポートされました", + "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions で指定されているように 'importHelpers' をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "ECMAScript モジュールに JSON ファイルをインポートするには、'module' が '{0}' に設定されている場合、'type: \"json\"' インポート属性が必要です。", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "インポートはモジュールの拡張では許可されていません。外側の外部モジュールに移動することを検討してください。", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "アンビエント列挙型の宣言では、メンバー初期化子は定数式である必要があります。", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "複数の宣言がある列挙型で、最初の列挙要素の初期化子を省略できる宣言は 1 つのみです。", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "ファイルの一覧を含めます。これは、'include' ではなく、glob パターンをサポートしていません。", + "Include_modules_imported_with_json_extension_6197": "'.json' 拡張子付きのインポートされたモジュールを含める", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "生成された JavaScript 内のソースマップにソース コードを含めます。", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "出力された JavaScript 内にソースマップ ファイルを含めます。", + "Includes_imports_of_types_referenced_by_0_90054": "'{0}' によって参照される型のインポートを含む", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch を含めると、ファイルの変更について現在のプロジェクトの監視が開始されます。設定が完了すると、次の操作を使用してウォッチ モードを構成できます。", + "Incomplete_quantifier_Digit_expected_1505": "不完全な量指定子です。数値が必要です。", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "型 '{0}' is missing in type '{1}' のインデックス シグネチャがありません。", + "Index_signature_in_type_0_only_permits_reading_2542": "型 '{0}' のインデックス シグネチャは、読み取りのみを許可します。", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "マージされた宣言 '{0}' の個々の宣言はすべてエクスポートされるか、すべてローカルであるかのどちらかである必要があります。", + "Infer_all_types_from_usage_95023": "使用法からすべての型を推論します", + "Infer_function_return_type_95148": "関数の戻り値の型を推論します", + "Infer_parameter_types_from_usage_95012": "使用状況からパラメーターの型を推論する", + "Infer_this_type_of_0_from_usage_95080": "使い方から '{0}' の 'this' 型を推論する", + "Infer_type_of_0_from_usage_95011": "使用状況から '{0}' の型を推論する", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "クラス式からの推論は、--isolatedDeclarations ではサポートされていません。", + "Initialize_property_0_in_the_constructor_90020": "コンストラクターのプロパティ '{0}' を初期化する", + "Initialize_static_property_0_90021": "静的プロパティ '{0}' を初期化する", + "Initializer_for_property_0_2811": "プロパティ ' {0} ' の初期化子。", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "インスタンス メンバー変数 '{0}' の初期化子はコンストラクターで宣言された識別子 '{1}' を参照できません。", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "初期化子は環境コンテキストでは使用できません。", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript プロジェクトを初期化して、tsconfig.json ファイルを作成します。", + "Inline_variable_95184": "インライン変数", + "Insert_command_line_options_and_files_from_a_file_6030": "コマンド ライン オプションとファイルをファイルから挿入します。", + "Install_0_95014": "'{0}' のインストール", + "Install_all_missing_types_packages_95033": "不足しているすべての型のパッケージをインストールします", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "インターフェイス '{0}' で型 '{1}' と型 '{2}' を同時には拡張できません。", + "Interface_0_incorrectly_extends_interface_1_2430": "インターフェイス '{0}' はインターフェイス '{1}' を正しく拡張していません。", + "Interface_declaration_cannot_have_implements_clause_1176": "インターフェイス宣言に 'implements' 句を指定することはできません。", + "Interface_must_be_given_a_name_1438": "インターフェイスに名前を指定する必要があります。", + "Interface_name_cannot_be_0_2427": "インターフェイス名を '{0}' にすることはできません。", + "Interop_Constraints_6252": "制約の相互運用", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' を追加するのではなく、省略可能なプロパティ型を記述済みとして解釈します。", + "Invalid_character_1127": "無効な文字です。", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "無効なインポート指定子 '{0}' には解決策がありません。", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "拡張のモジュール名が無効です。モジュール '{0}' は '{1}' の型指定のないモジュールに解決されるため、拡張されません。", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "拡張のモジュール名が無効です。モジュール '{0}' が見つかりません。", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新しい式の省略可能なチェーンが無効です。'{0}()' の呼び出しを意図していましたか?", + "Invalid_reference_directive_syntax_1084": "無効な 'reference' ディレクティブ構文です。", + "Invalid_syntax_in_decorator_1498": "デコレーターの構文が無効です。", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' の使用が無効です。クラスの静的ブロック内では使用できません。", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' の使用方法が無効です。モジュールは自動的に厳格モードになります。", + "Invalid_use_of_0_in_strict_mode_1100": "厳格モードでは '{0}' の使用は無効です。", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' の値が無効です。", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' の値が無効です。'{0}' が有効な識別子または修飾名ではありません。", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' の値が無効です。'{0}' は有効な識別子でも修飾名でもありません。", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' の値が無効です。'{0}' は有効な識別子ではありません。", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "これら 2 つのテンプレート式を区切るコンマが不足している可能性があります。タグ付きテンプレート式を形成しており、呼び出すことができません。", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "その要素の型 '{0}' は有効な JSX 要素ではありません。", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "そのインスタンスの型 '{0}' は、有効な JSX 要素ではありません。", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "その戻り値の型 '{0}' は、有効な JSX 要素ではありません。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "その型 '{0}' は有効な JSX 要素ではありません。", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' が 'extends {2}' 句と一致しません。", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' はクラスにアタッチされていません。", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' は、シグネチャの最後のパラメーターにのみ使用できます。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' タグの名前は '{0}' ですが、その名前のパラメーターはありません。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' タグに名前 '{0}' が指定されていますが、その名前のパラメーターはありません。配列型があった場合は、'arguments' と一致したはずです。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef は TypeScript 型に変換できます。", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' タグには、型の注釈を指定するか、後に '@property' タグや '@member' タグを付ける必要があります。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef は TypeScript 型に変換できます。", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc の種類は、ドキュメント コメント内でのみ使用できます。", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc の種類は TypeScript の種類に移行される可能性があります。", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 属性は、空ではない '式' にのみ割り当てる必要があります。", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 要素 '{0}' には対応する終了タグがありません。", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 要素クラスは '{0}' プロパティを含まないため、属性をサポートしません。", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "インターフェイス 'JSX.{0}' が存在しないため、暗黙的に JSX 要素の型は 'any' になります。", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "グローバル型 'JSX.Element' が存在しないため、JSX 要素は暗黙的に型 'any' になります。", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 要素型 '{0}' にはコンストラクトも呼び出しシグネチャも含まれていません。", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 要素に同じ名前の複数の属性を指定することはできません。", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 式では、コンマ演算子を使用できません。配列を作成するつもりでしたか?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX 式には 1 つの親要素が必要です。", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX フラグメントには対応する終了タグがありません。", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX プロパティ アクセス式に JSX 名前空間の名前を含めることはできません", + "JSX_spread_child_must_be_an_array_type_2609": "JSX スプレッドの子は、配列型でなければなりません。", + "JavaScript_Support_6247": "JavaScript サポート", + "Jump_target_cannot_cross_function_boundary_1107": "ジャンプ先は関数の境界を越えることはできません。", + "KIND_6034": "種類", + "Keywords_cannot_contain_escape_characters_1260": "キーワードにエスケープ文字を含めることはできません。", + "LOCATION_6037": "場所", + "Language_and_Environment_6254": "言語と環境", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "コンマ演算子の左側が使用されていないため、副作用はありません。", + "Library_0_specified_in_compilerOptions_1422": "compilerOptions でライブラリ '{0}' が指定されました", + "Library_referenced_via_0_from_file_1_1405": "ファイル '{1}' から '{0}' を介してライブラリが参照されました", + "Line_break_not_permitted_here_1142": "ここで改行することはできません。", + "Line_terminator_not_permitted_before_arrow_1200": "行の終端記号をアローの前で使用することはできません。", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "モジュールを解決するときに検索するファイル名サフィックスのリスト。", + "List_of_folders_to_include_type_definitions_from_6161": "含める型定義の元のフォルダーの一覧。", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "結合されたコンテンツがランタイムでのプロジェクトの構成を表すルート フォルダーの一覧。", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "ルート ディレクトリ '{1}' から '{0}' を読み込んでいます。候補の場所は '{2}' です。", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' フォルダーからモジュール '{0}' を読み込んでいます。対象のファイルの種類は {1} です。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "ファイル / フォルダーとしてモジュールを読み込んでいます。候補のモジュールの場所は '{0}'、対象のファイルの種類は {1} です。", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' の処理中に使用されたログ パス。", + "Longest_matching_prefix_for_0_is_1_6108": "'{0}' の一致する最長プレフィックスは '{1}' です。", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' フォルダーを検索しています。最初の場所は '{0}' です。", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "すべての 'super()' 呼び出しをそのコンストラクターの最初のステートメントにします", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof により、文字列、数字、記号の代わりに、文字列のみが返されるようにします。レガシ オプションです。", + "Make_super_call_the_first_statement_in_the_constructor_90002": "'super()' 呼び出しをコンストラクター内の最初のステートメントにする", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "マップされたオブジェクト型のテンプレートの型は暗黙的に 'any' になります。", + "Mark_array_literal_as_const_90070": "配列リテラルを const としてマークする", + "Matched_0_condition_1_6403": "'{0}' 条件 '{1}' と一致しました。", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "既定で一致するインクルード パターン '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "'{1}' のインクルード パターン '{0}' に一致しています", + "Member_0_implicitly_has_an_1_type_7008": "メンバー '{0}' の型は暗黙的に '{1}' になります。", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "メンバー '{0}' の型は暗黙的に '{1}' ですが、使い方からより良い型を推論する場合があります。", + "Merge_conflict_marker_encountered_1185": "マージ競合マーカーが検出されました。", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "マージされた宣言 '{0}' に既定のエクスポート宣言を含めることはできません。代わりに、'export default {0}' 宣言を別個に追加することを検討してください。", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "メタプロパティ '{0}' は、関数の宣言の本文、関数の式、またはコンストラクターでのみ許可されています。", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "メソッド '{0}' は abstract に指定されているため、実装を含めることができません。", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "エクスポートされたインターフェイスのメソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "エクスポートされたインターフェイスのメソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "メソッドには、--isolatedDeclarations を含む明示的な戻り値の型の注釈が必要です。", + "Method_not_implemented_95158": "メソッドが実装されていません。", + "Modifiers_cannot_appear_here_1184": "ここで修飾子を使用することはできません。", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "モジュール '{0}' は、'{1}' フラグを使用して既定でのみインポートできます", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "モジュール '{0}' はこのコンストラクトではインポートできません。指定子は ES モジュールに解決されるだけであるため、'require' でインポートすることはできません。代わりに ECMAScript インポートを使用してください。", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "モジュール '{0}' は '{1}' をローカルで宣言していますが、これは '{2}' としてエクスポートされています。", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "モジュール '{0}' は '{1}' をローカルで宣言していますが、これはエクスポートされていません。", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "モジュール '{0}' は型を参照していませんが、ここでは型として使用されています。'typeof import('{0}')' を意図していましたか?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "モジュール '{0}' は値を参照していませんが、ここでは値として使用されています。", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "モジュール {0} は既に '{1}' という名前のメンバーをエクスポートしています。あいまいさを解決するため、明示的にもう一度エクスポートすることを検討してください。", + "Module_0_has_no_default_export_1192": "モジュール '{0}' に既定エクスポートがありません。", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "モジュール '{0}' には既定のエクスポートがありません。'import { {1} } from {0}' を使用するつもりでしたか?", + "Module_0_has_no_exported_member_1_2305": "モジュール '{0}' にエクスポートされたメンバー '{1}' がありません。", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "モジュール '{0}' にはエクスポートされたメンバー '{1}' がありません。'import {1} from {0}' を使用するつもりでしたか?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "モジュール '{0}' は同じ名前のローカル宣言によって非表示になっています。", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "モジュール '{0}' には 'export =' が使用されているため、'export *' は併用できません。", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "モジュール '{0}' は、ファイル '{1}' のローカルで宣言されたアンビエント モジュールとして解決されました。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "モジュール '{0}' は '{1}' に解決されましたが、'--allowArbitraryExtensions' が設定されていません。", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "モジュール '{0}' は '{1}' に解決されましたが、'--jsx' が設定されていません。", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "モジュール '{0}' は '{1}' に解決されましたが、'--resolveJsonModule' が使用されていません。", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "モジュール宣言名で使用できるのは、' または \"引用符で囲まれた文字列のみです。", + "Module_name_0_matched_pattern_1_6092": "モジュール名 '{0}'、照合されたパターン '{1}'。", + "Module_name_0_was_not_resolved_6090": "======== モジュール名 '{0}' が解決されませんでした。========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== モジュール名 '{0}' が正常に '{1}' に解決されました。========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== モジュール名 '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}')。========", + "Module_resolution_kind_is_not_specified_using_0_6088": "モジュール解決の種類が '{0}' を使用して指定されていません。", + "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' を使用したモジュール解決が失敗しました。", + "Modules_6244": "モジュール", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "ラベル付きのタプル要素の修飾子をラベルに移動する", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "既定のエクスポートで式を変数に移動し、それに型注釈を追加します。", + "Move_to_a_new_file_95049": "新しいファイルへ移動します", + "Move_to_file_95178": "ファイルに移動", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "複数の連続した数値区切り記号を指定することはできません。", + "Multiple_constructor_implementations_are_not_allowed_2392": "コンストラクターを複数実装することはできません。", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "改行", + "Name_is_not_valid_95136": "名前が無効です", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "名前付きキャプチャ グループは、'ES2018' 以降をターゲットにする場合にのみ使用できます。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "同じ名前の名前の名前付きキャプチャ グループは、相互に排他的である必要があります。", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "遅延インポートでは、名前付きインポートは許可されません。", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module' が '{0}' に設定されている場合、JSON ファイルから ECMAScript モジュールへの名前付きインポートは許可されません。", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' 型および '{2}' 型の名前付きプロパティ '{0}' が一致しません。", + "Namespace_0_has_no_exported_member_1_2694": "名前空間 '{0}' にエクスポートされたメンバー '{1}' がありません。", + "Namespace_must_be_given_a_name_1437": "名前空間に名前を指定する必要があります。", + "Namespace_name_cannot_be_0_2819": "名前空間名を '{0}' にすることはできません。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' が有効になっている場合、グローバル スクリプト ファイルでは名前空間を使用できません。このファイルがグローバル スクリプトを意図していない場合は、'moduleDetection' を 'force' に設定するか、空の 'export {}' ステートメントを追加してください。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "デコレーターも修飾子も 'this' パラメーターに適用できません。", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "指定した数の型引数を持つ基底コンストラクターは存在しません。", + "No_constituent_of_type_0_is_callable_2755": "型 '{0}' の構成要素は呼び出し可能ではありません。", + "No_constituent_of_type_0_is_constructable_2759": "型 '{0}' の構成要素はコンストラクト可能ではありません。", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "型 '{0}' のパラメーターを持つインデックス シグネチャが型 '{1}' に見つかりませんでした。", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "構成ファイル '{0}' で入力が見つかりませんでした。指定された 'include' パスは '{1}' で、'exclude' パスは '{2}' でした。", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "サポートされていません。初期のバージョンの場合は、ファイルを読み取るためにテキストのエンコードを手動で設定してください。", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} 引数を予期するオーバーロードはありませんが、{1} または {2} 引数のいずれかを予期するオーバーロードは存在します。", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} 型の引数を予期するオーバーロードはありませんが、{1} または {2} 型の引数のいずれかを予期するオーバーロードは存在します。", + "No_overload_matches_this_call_2769": "この呼び出しに一致するオーバーロードはありません。", + "No_type_could_be_extracted_from_this_type_node_95134": "この型ノードからは型を抽出できませんでした", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "短縮形のプロパティ '{0}' のスコープには値がありません。値を宣言するか、または初期化子を指定してください。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象クラス '{0}' は、クラス '{2}' からの継承抽象メンバー '{1}' を実装しません。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象クラス '{0}' には、'{1}' の次のメンバーの実装がありません: {2} およびその他 {3}。", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象クラスの式はクラス '{1}' からの継承抽象メンバー '{0}' を実装しません。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象クラス式に、'{0}' の次のメンバーの実装がありません: {1} およびその他 {2}。", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "non-null アサーションは、TypeScript ファイルでのみ使用できます。", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "ここでは複雑なパラメーターが宣言されています。", + "Not_all_code_paths_return_a_value_7030": "一部のコード パスは値を返しません。", + "Not_all_constituents_of_type_0_are_callable_2756": "型 '{0}' のすべての構成要素が呼び出し可能なわけではありません。", + "Not_all_constituents_of_type_0_are_constructable_2760": "型 '{0}' のすべての構成要素がコンストラクト可能なわけではありません。", + "Numbers_out_of_order_in_quantifier_1506": "量指定子の数値が順不同です。", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絶対値が 2^53 以上の数値リテラルは大きすぎるため、整数として正確に表現できません。", + "Numeric_separators_are_not_allowed_here_6188": "数値の区切り記号は、ここでは使用できません。", + "Object_is_of_type_unknown_2571": "オブジェクト型は 'unknown' です。", + "Object_is_possibly_null_2531": "オブジェクトは 'null' である可能性があります。", + "Object_is_possibly_null_or_undefined_2533": "オブジェクトは 'null' か 'undefined' である可能性があります。", + "Object_is_possibly_undefined_2532": "オブジェクトは 'undefined' である可能性があります。", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "オブジェクト リテラルは既知のプロパティのみ指定できます。'{0}' は型 '{1}' に存在しません。", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "オブジェクト リテラルで指定できるのは既知のプロパティのみですが、'{0}' は型 '{1}' に存在しません。書こうとしたのは '{2}' ですか?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "オブジェクト リテラルのプロパティ '{0}' の型は暗黙的に '{1}' になります。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "短縮形プロパティを含むオブジェクトは、--isolatedDeclarations では推論できません。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "スプレッド割り当てを含むオブジェクトを --isolatedDeclarations と共に推論することはできません。", + "Octal_digit_expected_1178": "8 進の数字が必要です。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "文字クラスでは、8 進数のエスケープ シーケンスと前方参照を使用することはできません。これがエスケープ シーケンスとして意図されていた場合は、代わりに構文 '{0}' を使用してください。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8 進数のエスケープ シーケンスは使用できません。構文 '{0}' を使用してください。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8 進数リテラルは使用できません。構文 '{0}' を使用してください。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' の 1 つの値は文字列 '{2}' で、もう一方の値は不明な数値であると見なされます。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' ステートメントで使用できる変数宣言は 1 つのみです。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' ステートメントで使用できる変数宣言は 1 つのみです。", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' キーワードを指定して呼び出せるのは void 関数のみです。", + "Only_ambient_modules_can_use_quoted_names_1035": "引用符付きの名前を使用できるのはアンビエント モジュールのみです。", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} と共にサポートされるのは 'amd' モジュールと 'system' モジュールのみです。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "--isolatedDeclarations を使用して推論できるのは const 配列のみです。", + "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 宣言ファイルのみを生成します。", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "出力の d.ts ファイルのみで、JavaScript ファイルは対象ではありません。", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' キーワードを使用してアクセスできるのは、基底クラスのパブリック メソッドと保護されたメソッドのみです。", + "Operator_0_cannot_be_applied_to_type_1_2736": "演算子 '{0}' は型 '{1}' に適用できません。", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "演算子 '{0}' を型 '{1}' および '{2}' に適用することはできません。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "演算子は文字クラス内で混在してはなりません。入れ子になったクラスでラップしてください。", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "編集時に複数プロジェクト参照のチェックからプロジェクトをオプトアウトします。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "オプション '{0}={1}' が削除されました。構成から削除してください。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "オプション '{0}={1}' は非推奨であり、TypeScript {2} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{3}\"' を指定して、このエラーを無音にします。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'false' または 'null' に設定することしかできません。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'null' に設定することしかできません。", + "Option_0_can_only_be_specified_on_command_line_6266": "オプション '{0}' はコマンド ラインでのみ指定できます。", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "オプション '{0} を使用できるのは、オプション '--inlineSourceMap' またはオプション '--sourceMap' のいずれかを指定した場合のみです。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "オプション '{0}' は、'moduleResolution' が 'node16'、'nodenext'、または 'bundler' に設定されている場合にのみ使用できます。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "オプション '{0}' は、'module' が 'preserve'、'commonjs'、または 'es2015' 以降に設定されている場合にのみ使用できます。", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "オプション 'jsx' が '{1}' の場合、オプション '{0}' を指定することはできません。", + "Option_0_cannot_be_specified_with_option_1_5053": "オプション '{0}' をオプション '{1}' とともに指定することはできません。", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "オプション '{1}' を指定せずに、オプション '{0}' を指定することはできません。", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "オプション '{1}' またはオプション '{2}' を指定せずに、オプション '{0}' を指定することはできません。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "オプション '{0}' が削除されました。構成から削除してください。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "オプション '{0}' は非推奨であり、TypeScript {1} で機能しなくなります。compilerOption '\"ignoreDeprecations\": \"{2}\"' を指定して、このエラーを無音にします。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "オプション '{0}' は冗長であり、オプション '{1}' とともに指定することができません。", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "オプション 'allowImportingTsExtensions' は、'noEmit'、'emitDeclarationOnly'、または 'rewriteRelativeImportExtensions' のいずれかが設定されている場合にのみ使用できます。", + "Option_build_must_be_the_first_command_line_argument_6369": "オプション '--build' は最初のコマンド ライン引数である必要があります。", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "オプション 'isolatedModules' は、オプション '--module' が指定されているか、オプション 'target' が 'ES2015' 以上であるかのいずれかの場合でのみ使用できます。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "オプション 'module' が '{1}' に設定されている場合は、オプション 'moduleResolution' を '{0}' (または未指定のままに) に設定する必要があります。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "オプション 'moduleResolution' が '{1}' に設定されている場合は、オプション 'module' を '{0}' に設定する必要があります。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' が有効になっている場合、オプション 'preserveConstEnums' を無効にすることはできません。", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "オプション 'project' をコマンド ライン上でソース ファイルと一緒に指定することはできません。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' が 'classic' に設定されている場合、オプション '--resolveJsonModule' を指定できません。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' が 'none'、'system'、または 'umd' に設定されている場合、オプション '--resolveJsonModule' を指定することはできません。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' が 'UMD'、'AMD'、または 'System' に設定されている場合、オプション 'verbatimModuleSyntax' は使用できません。", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "オプション '{0}' と '{1}' を組み合わせることはできません。", + "Options_Colon_6027": "オプション:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "その他の出力", + "Output_Formatting_6256": "出力データ形式", + "Output_compiler_performance_information_after_building_6615": "ビルド後にコンパイラのパフォーマンス情報を出力します。", + "Output_directory_for_generated_declaration_files_6166": "生成された宣言ファイルの出力ディレクトリ。", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "出力ファイル '{0}' はソース ファイル '{1}' からビルドされていません。", + "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' が指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました", + "Output_more_detailed_compiler_performance_information_after_building_6632": "ビルド後により詳しいコンパイラのパフォーマンス情報を出力します。", + "Overload_0_of_1_2_gave_the_following_error_2772": "{1} 中 {0} のオーバーロード, '{2}' により、次のエラーが発生しました。", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "オーバーロードのシグネチャはすべてが抽象または非抽象である必要があります。", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "オーバーロードのシグネチャは、すべてアンビエントであるか、すべてアンビエントでないかのどちらかである必要があります。", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "オーバーロードのシグネチャはすべてがエクスポート済みであるか、またはエクスポート済みでない必要があります。", + "Overload_signatures_must_all_be_optional_or_required_2386": "オーバーロードのシグネチャは、すべて省略可能であるか、すべて必須であるかのどちらかである必要があります。", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "オーバーロードのシグネチャはすべて、public、private、または protected でなければなりません。", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "パラメーター '{0}' はその後で宣言された識別子 '{1}' を参照できません。", + "Parameter_0_cannot_reference_itself_2372": "パラメーター '{0}' は、それ自体を参照できません。", + "Parameter_0_implicitly_has_an_1_type_7006": "パラメーター '{0}' の型は暗黙的に '{1}' になります。", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "パラメーター '{0}' の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "パラメーター '{0}' がパラメーター '{1}' と同じ位置にありません。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "アクセサーのパラメーター '{0}' が外部モジュール '{2}' からの名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "アクセサーのパラメーター '{0}' が、プライベート モジュール '{2}' からの名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "アクセサーのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "エクスポートされたインターフェイスの呼び出しシグネチャのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "エクスポートされたインターフェイスの呼び出しシグネチャのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "エクスポートされたクラスのコンストラクターのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "エクスポートされたインターフェイスのコンストラクター シグネチャのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "エクスポートされたインターフェイスのコンストラクター シグネチャのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "エクスポートされた関数のパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "エクスポートされた関数のパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "エクスポートされた関数のパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "エクスポートされたインターフェイスのインデックス シグネチャのパラメーター '{0}' で、プライベート モジュール '{2}' の名前 '{1}' が指定されているか使用されています。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "エクスポートされたインターフェイスのインデックス シグネチャのパラメーター '{0}' で、プライベート名 '{1}' が指定されているか使用されています。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "エクスポートされたインターフェイスのメソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "エクスポートされたインターフェイスのメソッドのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "エクスポートされたクラスのパブリック メソッドのパラメーター '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "エクスポートされたクラスのパブリック静的メソッドのパラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Parameter_cannot_have_question_mark_and_initializer_1015": "パラメーターに疑問符および初期化子を指定することはできません。", + "Parameter_declaration_expected_1138": "パラメーター宣言が必要です。", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "パラメーターに名前はありますが、型がありません。'{0}: {1}' を意図していましたか?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "パラメーター修飾子は TypeScript ファイルでのみ使用できます。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "パラメーターには、--isolatedDeclarations を含む明示的な型注釈が必要です。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "エクスポートされたクラスのパブリック セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "厳格モードで解析してソース ファイルごとに \"use strict\" を生成します。", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json の 'files' リストの一部", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "パターン '{0}' に使用できる '*' 文字は最大で 1 つです。", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' または '--extendedDiagnostics' のパフォーマンスのタイミングは、このセッションでは使用できません。Web パフォーマンス API のネイティブ実装が見つかりませんでした。", + "Platform_specific_6912": "プラットフォーム固有", + "Prefix_0_with_an_underscore_90025": "アンダースコアを含むプレフィックス '{0}'", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "すべての正しくないプロパティ宣言の前に 'declare' を付ける", + "Prefix_all_unused_declarations_with_where_possible_95025": "可能な場合は、使用されていないすべての宣言にプレフィックスとして '_' を付けます", + "Prefix_with_declare_95094": "'declare' を前に付ける", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "さもなければ削除されてしまう JavaScript のアウトプット中の使われていないインポートされた値を保持します。", + "Print_all_of_the_files_read_during_the_compilation_6653": "コンパイル時に読み取られたすべてのファイルを出力します。", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "コンパイル時に読み取られたファイルを、それが含まれる理由と共に出力します。", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "ファイルの名前と、それらがコンパイルに含まれている理由を書き出します。", + "Print_names_of_files_part_of_the_compilation_6155": "コンパイルの一環としてファイルの名前を書き出します。", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "コンパイルの一部であるファイルの名前を出力してから、処理を停止します。", + "Print_names_of_generated_files_part_of_the_compilation_6154": "コンパイルの一環として生成されたファイル名を書き出します。", + "Print_the_compiler_s_version_6019": "コンパイラのバージョンを表示します。", + "Print_the_final_configuration_instead_of_building_1350": "ビルドを実行するのではなく、最終的な構成を出力します。", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "コンパイル後に生成されたファイルの名前を出力します。", + "Print_this_message_6017": "このメッセージを表示します。", + "Private_accessor_was_defined_without_a_getter_2806": "ゲッターなしでプライベート アクセサーが定義されました。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "プライベート フィールド '{0}' は、エンクロージング クラスで宣言する必要があります。", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "変数宣言では、private 識別子は許可されていません。", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "private 識別子は、クラス本体の外では許可されていません。", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "プライベート識別子はクラス本体でのみ許可され、クラス メンバー宣言、プロパティ アクセス、または 'in' 式の左側でのみ使用できます", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "private 識別子は ECMAScript 2015 以上をターゲットにする場合にのみ使用できます。", + "Private_identifiers_cannot_be_used_as_parameters_18009": "private 識別子はパラメーターとして使用できません。", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "private または protected メンバー '{0}' には、型パラメーターではアクセスできません。", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "プロジェクト '{0}' はその依存関係 '{1}' にエラーがあるためビルドできません", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' はビルドできません", + "Project_0_is_being_forcibly_rebuilt_6388": "プロジェクト '{0}' が強制的にリビルドされています", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "buildinfo ファイル '{1}' は、ファイル '{2}' がコンパイルのルート ファイルでしたが、それ以上はないことを示しているため、プロジェクト '{0}' は最新ではありません。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "buildinfo ファイル '{1}' はプログラムがエラーを報告する必要があることを示しているため、プロジェクト '{0}' は最新ではありません。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo ファイルの '{1}' により、一部の変更が生成されなかったことが示されているため、プロジェクトの '{0}' は最新ではありません", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "buildinfo ファイル '{1}' は compilerOptions に変更があることを示しているため、プロジェクト '{0}' は最新ではありません", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "プロジェクト '{0}' は出力 '{1}' が入力 '{2}' より古いため最新の状態ではありません", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "プロジェクト '{0}' は出力ファイル '{1}' が存在しないため最新の状態ではありません", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "プロジェクト '{0}' の出力が現在のバージョン '{2}' と異なるバージョン '{1}' で生成されているため、このプロジェクトは最新の状態ではありません", + "Project_0_is_up_to_date_6361": "プロジェクト '{0}' は最新の状態です", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "プロジェクト '{0}' は最新の入力 '{1}' が出力 '{2}' より古いため最新の状態です", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "プロジェクト '{0}' は最新ですが、入力ファイルよりも古い出力ファイルのタイムスタンプを更新する必要があります", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "プロジェクト '{0}' はその依存関係からの .d.ts ファイルで最新の状態です", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "プロジェクト参照が円グラフを形成できません。循環が検出されました: {0}", + "Projects_6255": "プロジェクト", + "Projects_in_this_build_Colon_0_6355": "このビルドのプロジェクト: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' 修飾子を持つプロパティは、ECMAScript 2015 以降を対象とする場合にのみ使用できます。", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "メソッド '{0}' は abstract に指定されているため、初期化子を含めることができません。", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "プロパティ '{0}' はインデックス シグネチャに基づいているため、['{0}'] を使用してアクセスする必要があります。", + "Property_0_does_not_exist_on_type_1_2339": "プロパティ '{0}' は型 '{1}' に存在しません。", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "プロパティ '{0}' は型 '{1}' に存在していません。'{2}' ですか?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "プロパティ '{0}' は型 '{1}' には存在しません。代わりに静的メンバー '{2}' にアクセスしようとしていましたか?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "プロパティ '{0}' が型 '{1}' に存在しません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{2}' 以降に変更してみてください。", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "プロパティ ' {0} ' は型 ' {1} ' に存在しません。' lib ' コンパイラ オプションを ' dom ' を含むように変更してみてください。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "プロパティ '{0}' に初期化子がなく、クラスの静的ブロックで明確に割り当てられていません。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "プロパティ '{0}' に初期化子がなく、コンストラクターで明確に割り当てられていません。", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。get アクセサーには戻り値の型の注釈がないためです。", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。set アクセサーにはパラメーター型の注釈がないためです。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "プロパティ '{0}' の型は暗黙的に 'any' ですが、その get アクセサーのために、使い方からより良い型を推論する場合があります。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "プロパティ '{0}' の型は暗黙的に 'any' になっていますが、その set アクセサーのより良い型を使い方から推論できます。", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "型 '{1}' のプロパティ '{0}' を基本データ型 '{2}' の同じプロパティに割り当てることはできません。", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "型 '{1}' のプロパティ '{0}' を型 '{2}' に割り当てることはできません。", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "型 '{1}' のプロパティ '{0}' は、型 '{2}' 内からアクセスできない別のメンバーを参照しています。", + "Property_0_is_declared_but_its_value_is_never_read_6138": "プロパティ '{0}' が宣言されていますが、その値が読み取られることはありません。", + "Property_0_is_incompatible_with_index_signature_2530": "プロパティ '{0}' はインデックス シグネチャと互換性がありません。", + "Property_0_is_missing_in_type_1_2324": "型 '{1}' にプロパティ '{0}' がありません。", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "プロパティ '{0}' は型 '{1}' にありませんが、型 '{2}' では必須です。", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "プロパティ '{0}' には private 識別子が指定されているため、クラス '{1}' の外部ではアクセスできません。", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "プロパティ '{0}' は型 '{1}' では省略可能ですが、型 '{2}' では必須です。", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "プロパティ '{0}' はプライベートで、クラス '{1}' 内でのみアクセスできます。", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "プロパティ '{0}' は型 '{1}' ではプライベートですが、型 '{2}' ではプライベートではありません。", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "プロパティ '{0}' は保護されており、クラス '{1}' のインスタンスを通じてのみアクセスできます。これは、クラス '{2}' のインスタンスです。", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "プロパティ '{0}' は保護されているため、クラス '{1}' とそのサブクラス内でのみアクセスできます。", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "プロパティ '{0}' は保護されていますが、型 '{1}' は '{2}' から派生したクラスではありません。", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "プロパティ '{0}' は型 '{1}' では保護されていますが、型 '{2}' ではパブリックです。", + "Property_0_is_used_before_being_assigned_2565": "プロパティ '{0}' は割り当てられる前に使用されています。", + "Property_0_is_used_before_its_initialization_2729": "プロパティ '{0}' が初期化前に使用されています。", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "プロパティ '{0}' は型 '{1}' に存在していない可能性があります。'{2}' ですか?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX のスプレッド属性のプロパティ '{0}' をターゲット プロパティに割り当てることはできません。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "エクスポートされた匿名クラス型のプロパティ '{0}' は、プライベートでないか保護されていない可能性があります。", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "型 '{1}' のプロパティ '{0}' は'{2}' インデックス型 '{3}' に割り当てることはできません。", + "Property_0_was_also_declared_here_2733": "ここではプロパティ '{0}' も宣言されています。", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "プロパティ '{0}' は、'{1}' の基底プロパティを上書きします。これが意図的である場合は初期化子を追加してください。そうでなければ、'declare' 修飾子を追加するか、冗長な宣言を削除してください。", + "Property_assignment_expected_1136": "プロパティの代入が必要です。", + "Property_destructuring_pattern_expected_1180": "プロパティの非構造化パターンが必要です。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "プロパティには、--isolatedDeclarations を含む明示的な型注釈が必要です。", + "Property_or_signature_expected_1131": "プロパティまたはシグネチャが必要です。", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "プロパティ値には、文字列リテラル、数値リテラル、'true'、'false'、'null'、オブジェクト リテラルまたは配列リテラルのみ使用できます。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'for-of'、spread、destructuring で 'ES5' を対象とする場合は、iterables を完全にサポートします。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "エクスポートされたクラスのパブリック メソッド '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "エクスポートされたクラスのパブリック メソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "エクスポートされたクラスのパブリック メソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "エクスポートされたクラスのパブリック プロパティ '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "エクスポートされたクラスのパブリック プロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "エクスポートされたクラスのパブリック プロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "エクスポートされたクラスのパブリック静的メソッド '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "エクスポートされたクラスのパブリック静的メソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "エクスポートされたクラスのパブリック静的メソッド '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "先頭に '@param {object} {1}' がない場合、修飾名 '{0}' は許可されません。", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "関数パラメーターが読み取られていないときに、エラーを発生させます。", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "暗黙的な 'any' 型を含む式と宣言に関するエラーを発生させます。", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "暗黙的な 'any' 型を持つ 'this' 式でエラーが発生します。", + "Range_out_of_order_in_character_class_1517": "文字クラスの順序が正しくありません。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' が有効な場合に型を再エクスポートするには、'export type' を使用する必要があります。", + "React_components_cannot_include_JSX_namespace_names_2639": "React コンポーネントに JSX 名前空間名を含めることはできません", + "Recommended_Options_6294": "推奨オプション", + "Redirect_output_structure_to_the_directory_6006": "ディレクトリへ出力構造をリダイレクトします。", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript によって自動的に読み込まれるプロジェクトの数を減らします。", + "Referenced_project_0_may_not_disable_emit_6310": "参照されたプロジェクト '{0}' は、生成を無効にできません。", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "参照されているプロジェクト '{0}' には、設定 \"composite\": true が必要です。", + "Referenced_via_0_from_file_1_1400": "ファイル '{1}' から '{0}' を介して参照されています", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。インポート パスに拡張機能を追加することを検討してください。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "相対インポート パスでは、'--moduleResolution' が 'node16' または 'nodenext' である場合、ECMAScript インポートに明示的なファイル拡張子が必要です。'{0}' を意図していましたか?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "ウォッチ プロセスからディレクトリの一覧を削除します。", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "ウォッチ モードの処理からファイルの一覧を削除します。", + "Remove_all_unnecessary_override_modifiers_95163": "不要な 'override' 修飾子をすべて削除", + "Remove_all_unnecessary_uses_of_await_95087": "不要な 'await' の使用をすべて削除する", + "Remove_all_unreachable_code_95051": "到達できないコードをすべて削除します", + "Remove_all_unused_labels_95054": "すべての未使用のラベルを削除します", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "関連する問題のあるすべてのアロー関数本体から中かっこを削除します", + "Remove_braces_from_arrow_function_95060": "アロー関数から中かっこを削除します", + "Remove_braces_from_arrow_function_body_95112": "アロー関数本体から中かっこを削除します", + "Remove_import_from_0_90005": "'{0}' からのインポートを削除", + "Remove_override_modifier_95161": "'override ' 修飾子の削除", + "Remove_parentheses_95126": "かっこの削除", + "Remove_template_tag_90011": "テンプレート タグを削除する", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 言語サーバーの JavaScript ファイルのソース コードの合計サイズについて 20 MB の上限を削除します。", + "Remove_type_from_import_declaration_from_0_90055": "\"{0}\" からインポート宣言から `type` を削除します", + "Remove_type_from_import_of_0_from_1_90056": "\"{1}\" から `{0}` のインポートから `type` を削除します", + "Remove_type_parameters_90012": "型パラメーターを削除する", + "Remove_unnecessary_await_95086": "不要な 'await' を削除する", + "Remove_unreachable_code_95050": "到達できないコードを削除します", + "Remove_unused_declaration_for_Colon_0_90004": "'{0}' に対する使用されていない宣言を削除する", + "Remove_unused_declarations_for_Colon_0_90041": "'{0}' に対する使用されていない宣言を削除してください", + "Remove_unused_destructuring_declaration_90039": "使用されていない非構造化宣言を削除してください", + "Remove_unused_label_95053": "未使用のラベルを削除します", + "Remove_variable_statement_90010": "変数のステートメントを削除します", + "Rename_param_tag_name_0_to_1_95173": "'@param' タグ名の名前を '{0}' から '{1}' に変更します", + "Replace_0_with_Promise_1_90036": "'{0}' を 'Promise<{1}>' に置き換える", + "Replace_all_unused_infer_with_unknown_90031": "未使用の 'infer' をすべて 'unknown' に置き換える", + "Replace_import_with_0_95015": "インポートを '{0}' に置換します。", + "Replace_infer_0_with_unknown_90030": "'infer {0}' を 'unknown' に置き換える", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "関数の一部のコード パスが値を返さない場合にエラーを報告します。", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch ステートメントに case のフォールスルーがある場合にエラーを報告します。", + "Report_errors_in_js_files_8019": ".js ファイルのエラーを報告します。", + "Report_errors_on_unused_locals_6134": "使用されていないローカルに関するエラーを報告します。", + "Report_errors_on_unused_parameters_6135": "使用されていないパラメーターに関するエラーを報告します。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "他のツールが宣言ファイルを簡単に生成できるように、エクスポートに十分な注釈を必要とします。", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要素アクセスを使用するには、インデックス シグネチャからの宣言されていないプロパティが必要です。", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必須の型パラメーターの後に、オプションの型パラメーターを続けることはできません。", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "モジュール '{0}' の解決が場所 '{1}' のキャッシュに見つかりました。", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "種類参照指令 '{0}' の解決策は、場所 '{1}' のキャッシュには見つかりませんでした。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "非相対名の解決に失敗しました。npm ライブラリで構成の更新が必要かどうかを確認するために、最新のノード解決機能を無効にしています。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "非相対名の解決に失敗しました。'--moduleResolution bundler' を使用して、プロジェクトで構成の更新が必要かどうかを確認しています。", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'keyof' を文字列値のプロパティ名のみに解決します (数字または記号なし)。", + "Resolved_under_condition_0_6414": "条件 '{0}' で解決されました。", + "Resolving_in_0_mode_with_conditions_1_6402": "条件 {1} を使用して {0} モードで解決しています。", + "Resolving_module_0_from_1_6086": "======== '{1}' からモジュール '{0}' を解決しています。========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "ベース URL '{1}' - '{2}' に相対するモジュール名 '{0}' を解決しています。", + "Resolving_real_path_for_0_result_1_6130": "'{0}' の実際のパスを解決しています。結果は '{1}' です。", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== ファイル '{1}' のある種類参照指令 '{0}' の解決 ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリ '{2}'。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリは未設定。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリ '{1}'。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリは未設定。========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "カスタム typeRoots を指定するプログラムの型参照ディレクティブを解決しています。'node_modules' フォルダーでの参照をスキップします。", + "Resolving_with_primary_search_path_0_6121": "プライマリ検索パス '{0}' で解決しています。", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest パラメーター '{0}' の型は暗黙的に 'any[]' になります。", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "rest パラメーター '{0}' の型は暗黙的に 'any[]' 型ですが、使い方からより良い型を推論する場合があります。", + "Rest_types_may_only_be_created_from_object_types_2700": "rest 型はオブジェクトの種類からのみ作成できます。", + "Return_type_annotation_circularly_references_itself_2577": "戻り値の型の注釈は、それ自身を循環参照します。", + "Return_type_must_be_inferred_from_a_function_95149": "戻り値の型は関数から推論される必要があります", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "エクスポートされたインターフェイスのコンストラクター シグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "エクスポートされたインターフェイスのコンストラクター シグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "コンストラクター シグネチャの戻り値の型は、クラスのインスタンス型に割り当て可能でなければなりません。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "エクスポートされた関数の戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "エクスポートされた関数の戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "エクスポートされた関数の戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "エクスポートされたインターフェイスのインデックス シグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "エクスポートされたインターフェイスのインデックス シグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "エクスポートされたインターフェイスのメソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "エクスポートされたインターフェイスのメソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "エクスポートされたクラスのパブリック ゲッター '{0}' の戻り値の型が、プライベート名 '{1}' を持っているか、使用しています。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "エクスポートされたクラスのパブリック メソッドの戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "エクスポートされたクラスのパブリック メソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "エクスポートされたクラスのパブリック メソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "エクスポートされたクラスのパブリック静的ゲッター '{0}' の戻り値の型が、プライベート名 '{1}' を持っているか、使用しています。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用しましたが、解決できませんでした。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "場所 '{2}' からキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用しようとしましたが、解決されませんでした。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。", + "Rewrite_all_as_indexed_access_types_95034": "すべてをインデックス付きアクセス型として書き換えます", + "Rewrite_as_the_indexed_access_type_0_90026": "インデックス付きのアクセスの種類 '{0}' として書き換える", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "相対インポート パスの '.ts'、'.tsx'、'.mts'、および '.cts' ファイル拡張子を、出力ファイルの JavaScript と同等の拡張子に書き換えます。", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? の右オペランド左オペランドが NULL 値になることがないため、到達できません。", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "ルート ディレクトリを決定できません。プライマリ検索パスをスキップします。", + "Root_file_specified_for_compilation_1427": "コンパイル用に指定されたルート ファイル", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "戦略", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "プロジェクトのインクリメンタル コンパイルを可能にするには、.tsbuildinfo ファイルを保存します。", + "Saw_non_matching_condition_0_6405": "一致しない条件 '{0}' がありました。", + "Scoped_package_detected_looking_in_0_6182": "'{0}' 内を検索して、スコープ パッケージが検出されました", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "すべての先祖 node_modules ディレクトリでフォールバック拡張子を検索しています: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "すべての先祖 node_modules ディレクトリで優先する拡張子を検索しています: {0}。", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "https://aka.ms/tsconfig/module も参照", + "Selection_is_not_a_valid_statement_or_statements_95155": "選択内容は有効なステートメントではありません", + "Selection_is_not_a_valid_type_node_95133": "選択は有効な型ノードではありません", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "生成された JavaScript の JavaScript 言語バージョンを設定し、互換性のあるライブラリ宣言を含めます。", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript からのメッセージの言語を設定します。これは生成には影響を与えません。", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "構成ファイルの 'module' オプションを '{0}' に設定する", + "Set_the_newline_character_for_emitting_files_6659": "ファイルを生成するための改行文字を設定します。", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "構成ファイルの 'target' オプションを '{0}' に設定する", + "Setters_cannot_return_a_value_2408": "セッターは値を返せません。", + "Show_all_compiler_options_6169": "コンパイラ オプションをすべて表示します。", + "Show_diagnostic_information_6149": "診断情報を表示します。", + "Show_verbose_diagnostic_information_6150": "詳細な診断情報を表示します。", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "ビルドされる (または '--clean' で指定される場合は、削除される) 内容を表示する", + "Signature_0_must_be_a_type_predicate_1224": "シグネチャ '{0}' は型の述語である必要があります。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "署名宣言は TypeScript ファイルでのみ使用できます。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "アップストリーム プロジェクトのエラー時にダウンストリーム プロジェクトのビルドをスキップします。", + "Skip_type_checking_all_d_ts_files_6693": "すべての .d.ts ファイルについて型チェックをスキップします。", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript に含まれている .d.ts ファイルの型チェックをスキップします。", + "Skip_type_checking_of_declaration_files_6012": "宣言ファイルの型チェックをスキップします。", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "プロジェクト '{0}' のビルドは、その依存関係 '{1}' にエラーがあるため、スキップしています", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' のビルドをスキップしています", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "絶対 URI のように見えるモジュール '{0}' をスキップしています。ターゲット ファイルの種類: {1}。", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' が指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました", + "Source_has_0_element_s_but_target_allows_only_1_2619": "ソースには {0} 個の要素がありますが、ターゲットで使用できるのは {1} 個のみです。", + "Source_has_0_element_s_but_target_requires_1_2618": "ソースには {0} 個の要素が含まれていますが、ターゲットには {1} 個が必要です。", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "ソースには、ターゲットの位置 {0} にある必須要素と一致するものがありません。", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "ソースには、ターゲットの位置 {0} にある可変個引数要素と一致するものがありません。", + "Specify_ECMAScript_target_version_6015": "ECMAScript ターゲット バージョンを指定します。", + "Specify_JSX_code_generation_6080": "JSX コードの生成を指定します。", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "1 つの JavaScript ファイルにすべての出力をバンドルするファイルを指定します。'declaration' が true の場合は、すべての .d.ts 出力をバンドルするファイルも指定します。", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "コンパイルに含めるファイルに一致する glob パターンの一覧を指定します。", + "Specify_a_list_of_language_service_plugins_to_include_6681": "含める言語サービス プラグインの一覧を指定します。", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "ターゲットのランタイム環境を記述する、バンドルされたライブラリ宣言ファイルのセットを指定します。", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "追加の検索場所にインポートを再マップするエントリのセットを指定します。", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "プロジェクトのパスを指定するオブジェクトの配列を指定します。プロジェクトの参照で使用されます。", + "Specify_an_output_folder_for_all_emitted_files_6678": "すべての生成されたファイルに対して出力フォルダーを指定します。", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "型にのみ使用されるインポートの生成または確認動作を指定します。", + "Specify_file_to_store_incremental_compilation_information_6380": "増分コンパイル情報を格納するファイルを指定する", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript を使用して、指定されたモジュール指定子でファイルを検索する方法を指定します。", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "再帰的なファイル ウォッチ機能を持たないシステムでディレクトリをウォッチするための方法を指定します。", + "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript ウォッチ モードの動作方法を指定します。", + "Specify_library_files_to_be_included_in_the_compilation_6079": "コンパイルに含めるライブラリ ファイルを指定します。", + "Specify_module_code_generation_6016": "モジュール コードの生成を指定します。", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' を使用するときに JSX ファクトリ関数のインポートに使用するモジュール指定子を指定します。", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' のように動作する複数のフォルダーを指定します。", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "設定の継承元となる基本構成ファイルへのパスまたはノード モジュール参照を 1 つまたは複数指定します。", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "宣言ファイルの自動取得に関するオプションを指定します。", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "ファイル システムのイベントを使用して作成できなかった場合に、ポーリング監視を作成する方法を指定します: 'FixedInterval' (既定)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "再帰的な監視をネイティブでサポートしていないプラットフォーム上のディレクトリを監視する方法を指定します: 'UseFsEvents' (既定)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "ファイルの監視方法を指定します: 'FixedPollingInterval' (既定)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 発行を対象とするときにフラグメントに使用される JSX フラグメント参照を指定します ('React.Fragment' や 'Fragment' など)。", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 発行 ('React.createElement' や 'h') などを対象とするときに使用する JSX ファクトリ関数を指定します。", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 発行を対象とするときに使用される JSX ファクトリ関数を指定します ('React.createElement' や 'h' など)。", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' コンパイラ オプションを指定して 'react' JSX 生成をターゲットにするときに使用する JSX フラグメント ファクトリ関数を指定します (例: 'Fragment')。", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "非相対モジュール名を解決するための基本ディレクトリを指定します。", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "ファイルの生成時に使用する行シーケンスの末尾を指定します: 'CRLF' (dos) または 'LF' (unix)。", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "デバッガーがソースの場所の代わりに TypeScript ファイルを検索する必要のある場所を指定します。", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "デバッガーが、生成された場所の代わりにマップ ファイルを検索する必要のある場所を指定します。", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' で JavaScript ファイルを確認するために使用するフォルダーの深さの最大値を指定します。'allowJs' にのみ適用可能です。", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' と 'jsxs' のファクトリ関数をインポートするために使用されるモジュール指定子を指定します。例: react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' に対して呼び出されたオブジェクトを指定します。これは、'react' JSX 発行を対象とする場合にのみ適用されます。", + "Specify_the_output_directory_for_generated_declaration_files_6613": "生成された宣言ファイルの出力ディレクトリを指定します。", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo 増分コンパイル ファイルへのパスを指定します。", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "入力ファイルのルート ディレクトリを指定します。--outDir とともに、出力ディレクトリ構造の制御に使用します。", + "Specify_the_root_folder_within_your_source_files_6690": "ソース ファイル内のルート フォルダーを指定します。", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "デバッガーのルート パスを指定して、参照ソース コードを検索します。", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "ソース ファイルに参照されずに含める型のパッケージ名を指定します。", + "Specify_what_JSX_code_is_generated_6646": "生成済みの JSX コードを指定します。", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "システムがネイティブ ファイル ウォッチャーを使い果たした場合に、ウォッチャーが使用するアプローチを指定します。", + "Specify_what_module_code_is_generated_6657": "生成済みのモジュール コードを指定します。", + "Split_all_invalid_type_only_imports_1367": "無効な型のみのインポートをすべて分割する", + "Split_into_two_separate_import_declarations_1366": "2 つの別個のインポート宣言に分割する", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 式のスプレッド演算子は ECMAScript 5 以上をターゲットにする場合にのみ使用できます。", + "Spread_types_may_only_be_created_from_object_types_2698": "spread 型はオブジェクトの種類からのみ作成できます。", + "Starting_compilation_in_watch_mode_6031": "ウォッチ モードでのコンパイルを開始しています...", + "Statement_expected_1129": "ステートメントが必要です。", + "Statements_are_not_allowed_in_ambient_contexts_1036": "ステートメントは環境コンテキストでは使用できません。", + "Static_members_cannot_reference_class_type_parameters_2302": "静的メンバーはクラスの型パラメーターを参照できません。", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静的プロパティ '{0}' がコンストラクター関数 '{1}' のビルトイン プロパティ 'Function.{0}' と競合しています。", + "Stricter_Typechecking_Options_6292": "より厳密な型チェック オプション", + "String_literal_expected_1141": "文字列リテラルが必要です。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' フラグが 'es2015' または 'es2020' に設定されている場合、文字列リテラルのインポートおよびエクスポート名はサポートされません。", + "String_literal_with_double_quotes_expected_1327": "二重引用符を含む文字列リテラルが必要です。", + "Style_Options_6293": "スタイル オプション", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "色とコンテキストを使用してエラーとメッセージにスタイルを適用します (試験的)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "マイナス記号がある場合は、サブパターン フラグが存在する必要があります。", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後続のプロパティ宣言は同じ型でなければなりません。プロパティ '{0}' の型は '{1}' である必要がありますが、ここでは型が '{2}' になっています。", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後続の変数宣言は同じ型でなければなりません。変数 '{0}' の型は '{1}' である必要がありますが、'{2}' になっています。", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "パターン '{1}' の代入 '{0}' の型が正しくありません。必要な型は 'string' ですが、'{2}' を取得しました。", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "パターン '{1}' の置換 '{0}' に使用できる '*' 文字は 1 文字だけです。", + "Substitutions_for_pattern_0_should_be_an_array_5063": "パターン '{0}' への代入は配列でなければなりません。", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "パターン '{0}' への代入を空の配列にすることはできません。", + "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json ファイルが正常に作成されました。", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "super の呼び出しは、コンストラクターの外部、またはコンストラクター内の入れ子になった関数では使用できません。", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "オブジェクト リテラルの過剰なプロパティ確認を抑制します。", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "インデックス シグニチャのないオブジェクトにインデックスを作成するため、noImplicitAny エラーを抑制します。", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "インデックス シグネチャのないオブジェクトにインデックスを作成する際、'noImplicitAny' エラーを表示しません。", + "Switch_each_misused_0_to_1_95138": "誤用されている各 '{0}' を '{1}' に切り替えてください", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "再帰的なウォッチをネイティブでサポートしていないプラットフォーム上で、同期的にコールバックを呼び出してディレクトリ ウォッチャーの状態を更新します。", + "Syntax_Colon_0_6023": "構文: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "タグ '{0}' には少なくとも '{1}' 個の引数が必要ですが、JSX ファクトリ '{2}' で提供されるのは最大 '{3}' 個です。", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "タグ付きテンプレート式は、省略可能なチェーンでは許可されていません。", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "ターゲットには {0} 個の要素のみを使用できますが、ソースにはそれより多くを指定できます。", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "ターゲットには {0} 個の要素が必要ですが、ソースに指定する数はそれより少なくても構いません。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "ターゲット署名の引数が少なすぎます。{0} 以上が必要ですが、{1} でした。", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾子は TypeScript ファイルでのみ使用できます。", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 演算子を 'symbol' 型に適用することはできません。", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 演算子はブール型には使用できません。代わりに '{1}' を使用してください。", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同期反復子の '{0}' プロパティはメソッドである必要があります。", + "The_0_property_of_an_iterator_must_be_a_method_2767": "反復子の '{0}' プロパティはメソッドである必要があります。", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 型を割り当てることができるその他の型はごく少数です。代わりの候補には 'any' 型があります。", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) フラグと Unicode Sets (v) フラグを同時に設定することはできません。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' オブジェクトは、ES5 のアロー関数で参照することはできません。標準の関数式の使用を考慮してください。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' オブジェクトは、ES5 の非同期関数またはメソッドで参照することはできません。標準の関数またはメソッドを使用することを検討してください。", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' ステートメントの本文を空のステートメントにすることはできません。", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "呼び出しはこの実装に対して成功した可能性がありますが、オーバーロードの実装シグネチャは外部からは参照できません。", + "The_character_set_of_the_input_files_6163": "入力ファイルの文字セット。", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "含まれているアロー関数は、'this' のグローバル値をキャプチャします。", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "含まれている関数またはモジュールの本体は、制御フロー解析には大きすぎます。", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "現在のファイルは CommonJS モジュールであり、最上位レベルでは 'await' を使用できません。", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "現在のファイルは CommonJS モジュールであり、このインポートでは 'require' 呼び出しが生成されますが、参照ファイルは ECMAScript モジュールであるため、'require' ではインポートできません。代わりに動的な 'import(\"{0}\")' 呼び出しを記述することを検討してください。", + "The_current_host_does_not_support_the_0_option_5001": "現在のホストは '{0}' オプションをサポートしていません。", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "使用するつもりだったと思われる '{0}' の宣言はここで定義されています", + "The_declaration_was_marked_as_deprecated_here_2798": "この宣言はここで非推奨とマークされました。", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "予期された型は、型 '{1}' に対してここで宣言されたプロパティ '{0}' から取得されています", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "予期された型は、このシグネチャの戻り値の型に基づいています。", + "The_expected_type_comes_from_this_index_signature_6501": "予期された型は、このインデックス シグネチャに基づいています。", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "エクスポートの代入の式は、環境コンテキストの識別子または修飾名にする必要があります。", + "The_file_is_in_the_program_because_Colon_1430": "ファイルがプログラム内に存在します。理由:", + "The_files_list_in_config_file_0_is_empty_18002": "構成ファイル '{0}' の 'files' リストが空です。", + "The_first_export_default_is_here_2752": "最初のエクスポートの既定値はここにあります。", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise では、'then' メソッドの最初のパラメーターはコールバックでなければなりません。", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "グローバル型 'JSX.{0}' には複数のプロパティが含まれていない可能性があります。", + "The_implementation_signature_is_declared_here_2750": "実装シグネチャはここで宣言されています。", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "'import.meta' メタプロパティは、CommonJS 出力にビルドするファイルでは許可されていません。", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "'import.meta' メタプロパティは、'--module' オプションが 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、または 'nodenext' である場合にのみ許可されます。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' の推論された型には、'{1}' への参照なしで名前を付けることはできません。これは、移植性がない可能性があります。型の注釈が必要です。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' の推論された型は、循環構造を持つ型を参照しています。この型のシリアル化は自明ではありません。型の注釈が必要です。", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' の推定型はアクセス不可能な '{1}' 型を参照します。型の注釈が必要です。", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "このノードの推定型は、コンパイラがシリアル化する最大長を超えています。明示的な型の注釈が必要です。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣言の初期化子は、'[Symbol.dispose]()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣言の初期化子は、'[Symbol.asyncDispose]()' または '[Symbol.dispose]()' メソッドを持つオブジェクトであるか、'null' または 'undefined' である必要があります。", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "交差 '{0}' は 'なし' に縮小されました。プロパティ '{1}' が複数の構成要素に存在し、一部ではプライベートであるためです。", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "交差 '{0}' は 'なし' に縮小されました。一部の構成要素でプロパティ '{1}' の型が競合しているためです。", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'組み込み' キーワードは、コンパイラが提供する組み込み型を宣言する場合にのみ使用できます。", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "'jsxFactory' コンパイラ オプションで JSX フラグメントを使用するには、'jsxFragmentFactory' コンパイラ オプションを指定する必要があります。", + "The_last_overload_gave_the_following_error_2770": "前回のオーバーロードにより、次のエラーが発生しました。", + "The_last_overload_is_declared_here_2771": "前回のオーバーロードはここで宣言されています。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' ステートメントの左側を非構造化パターンにすることはできません。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ステートメントの左側を 'using' 宣言にすることはできません。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ステートメントの左側を 'await using' 宣言にすることはできません。", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' ステートメントの左側で型の注釈を使用することはできません。", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' ステートメントの左側の型は 'string' または 'any' でなければなりません。", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' ステートメントの左側で型の注釈を使用することはできません。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' ステートメントの左辺には、'async' を指定できません。", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術演算の左辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "代入式の左辺には、省略可能なプロパティ アクセスを指定できません。", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "代入式の左側は、変数またはプロパティ アクセスである必要があります。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 式の左側は、右側の '[Symbol.hasInstance]' メソッドの最初の引数に割り当て可能である必要があります。", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 式の左辺には、'any' 型、オブジェクト型、または型パラメーターを指定してください。", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "ユーザーにメッセージを表示するときに使用するロケール (例: 'en-us')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules の下を検索して JavaScript ファイルを読み込む依存関係の最大深度です。", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 演算子のオペランドには、private 識別子を指定できません。", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 演算子のオペランドには、読み取り専用のプロパティを指定できません。", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 演算子のオペランドはプロパティ参照である必要があります。", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 演算子のオペランドはオプションである必要があります。", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "インクリメント演算子またはデクリメント演算子のオペランドには、省略可能なプロパティ アクセスを指定することはできません。", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "インクリメントまたはデクリメント演算子のオペランドは、変数またはプロパティ アクセスである必要があります。", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "パーサーは、ここで '{0}' トークンに一致する '{1}' を予期していました。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "プロジェクト ルートはあいまいですが、ファイル '{1}' のエクスポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "プロジェクト ルートはあいまいですが、ファイル '{1}' のインポート マップ エントリ '{0}' を解決するために必要です。あいまいさを解消するには、'rootDir' コンパイラ オプションを指定します。", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "同じスペルの別の private 識別子によってシャドウされているため、このクラス内の型 '{1}' ではプロパティ '{0}' にアクセスできません。", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "パラメーター デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "プロパティ デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同期関数の戻り値の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise 型である必要があります。'Promise<{0}>' と書き込むつもりでしたか?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' ステートメントの右側には、'any' 型、オブジェクト型、型パラメーターを指定する必要がありますが、ここでは型 '{0}' が指定されています。", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術演算の右辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 式の右側には、型 'any'、クラス、関数、または 'Function' インターフェイス型に割り当て可能なその他の型、または 'Symbol.hasInstance' メソッドを持つオブジェクト型のいずれかを指定する必要があります。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 式の右側をインスタンス化式にすることはできません。", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' ファイルのルート値はオブジェクトである必要があります。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには {0} が必要です。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "このランタイムは {1} 引数を指定してデコレーターを呼び出しますが、デコレーターには少なくとも {0} が必要です。", + "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' のシャドウ宣言はここで定義されています", + "The_signature_0_of_1_is_deprecated_6387": "'{1}' のシグネチャ '{0}' は非推奨です。", + "The_specified_path_does_not_exist_Colon_0_5058": "指定されたパスがありません: '{0}'。", + "The_tag_was_first_specified_here_8034": "このタグは最初にこちらで指定されました。", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "オブジェクト rest の代入先を、省略可能なプロパティ アクセスにすることはできません。", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "オブジェクトの残り部分の代入の対象は、変数またはプロパティ アクセスである必要があります。", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "型 '{0}' の 'this' コンテキストを型 '{1}' のメソッドの 'this' に割り当てることはできません。", + "The_this_types_of_each_signature_are_incompatible_2685": "各シグネチャの 'this' 型に互換性がありません。", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "型 '{0}' は 'readonly' であるため、変更可能な型 '{1}' に代入することはできません。", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "名前付きエクスポートで、export ステートメントに 'export type' が使用されている場合、'type' 修飾子は使用できません。", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "名前付きインポートで、import ステートメントに 'import type' が使用されている場合、'type' 修飾子は使用できません。", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "このノードの種類は、そのプロパティ '{0}' をシリアル化できないため、シリアル化できません。", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同期反復子の '{0}()' メソッドによって返される型は、'value' プロパティを持つ型に対する promise である必要があります。", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "反復子の '{0}()' メソッドによって返される型には 'value' プロパティが必要です。", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' の型は、これらの型同士で互換性がありません。", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' によって返された型は、これらの型同士で互換性がありません。", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "値 '{0}' はここでは使用できません。", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' ステートメントの変数宣言に初期化子を指定することはできません。", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' ステートメントの変数宣言に初期化子を指定することはできません。", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ステートメントはサポートされていません。'with' ブロック内のすべてのシンボルの型は 'any' になります。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' に型がありますが、現在の 'moduleResolution' 設定ではこの結果を解決できませんでした。'node16'、'nodenext'、または 'bundler' への更新を検討してください。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' に型がありますが、package.json \"exports\" を尊重しながらこの結果を解決できませんでした。'{1}' ライブラリの package.json または入力を更新する必要がある場合があります。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "この正規表現には '{0}' という名前のキャプチャ グループはありません。", + "There_is_nothing_available_for_repetition_1507": "繰り返しに使用できるものがありません。", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "この JSX タグでは '{0}' がスコープ内に存在する必要がありますが、見つかりませんでした。", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "この JSX タグにはモジュール パス '{0}' が存在する必要がありますが、見つかりませんでした。適切なパッケージの種類がインストールされていることを確認してください。", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "この JSX タグの '{0}' prop は型 '{1}' の単一の子を予期しますが、複数の子が指定されました。", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "この JSX タグの '{0}' prop は複数の子を必要とする型 '{1}' を予期しますが、単一の子が指定されました。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "この前方参照は、存在しないグループを参照しています。この正規表現にはキャプチャ グループがありません。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "この前方参照は、存在しないグループを参照しています。この正規表現には {0} キャプチャ グループのみがあります。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "このバイナリ式が NULL 値になることはありません。かっこを忘れていませんか?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "この文字を正規表現内でエスケープすることはできません。", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' 型と '{1}' 型が重複していないため、この比較は意図したとおりに表示されない可能性があります。", + "This_condition_will_always_return_0_2845": "この条件は常に '{0}' を返します。", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript が値ではなく参照でオブジェクトを比較するため、この条件は常に '{0}' を返します。", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "'{0}' が常に定義されているため、この条件は常に true を返します。", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "この関数は常に定義されているため、この条件は常に true を返します。代わりにこれを呼び出すことを意図していましたか?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "このコンストラクター関数はクラス宣言に変換される可能性があります。", + "This_expression_is_always_nullish_2871": "この式は常に null です。", + "This_expression_is_never_nullish_2881": "この式が NULL 値になることはありません。", + "This_expression_is_not_callable_2349": "この式は呼び出し可能ではありません。", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "この式は 'get' アクセサーであるため、呼び出すことができません。'()' なしで使用しますか?", + "This_expression_is_not_constructable_2351": "この式はコンストラクト可能ではありません。", + "This_file_already_has_a_default_export_95130": "このファイルには、既に既定のエクスポートがあります", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "このインポート パスは別のプロジェクトに解決され、プロジェクトの出力ファイル間の相対パスが入力ファイル間の相対パスと同じではないため、書き換えは安全ではありません。", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "このインポートでは、'{0}' 拡張子を使用して入力 TypeScript ファイルに解決されますが、生成中に書き換えられるのは相対パスではないためです。", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "これは拡張される宣言です。拡張する側の宣言を同じファイルに移動することを検討してください。", + "This_kind_of_expression_is_always_falsy_2873": "この種の式は常に false です。", + "This_kind_of_expression_is_always_truthy_2872": "この種の式は常に true です。", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "これは非同期関数に変換できます。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに '@override' タグを含む JSDoc コメントを指定することはできません。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "このメンバーは、基底クラス '{0}' で宣言されていないため、このメンバーに 'override' タグを含む JSDoc コメントを指定することはできません。'{1}' ということですか?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "このメンバーを含んでいるクラス '{0}' が別のクラスを拡張していないため、このメンバーに '@override' タグを含む JSDoc コメントを指定することはできません。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "このメンバーの名前は動的であるため、'@override' タグが含まれた JSDoc コメントを保持することはできません。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。'{1}' ということですか?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "このメンバーを含んでいるクラス '{0}' が別のクラスを拡張していないため、このメンバーに 'override' 修飾子を指定することはできません。", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "名前が動的であるため、このメンバーに 'override' 修飾子を指定することはできません。", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "このメンバーには、基底クラス '{0}' のメンバーをオーバーライドするため、'@override' タグを含む JSDoc コメントが必要です。", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、'override' 修飾子を指定する必要があります。", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "このメンバーは、基底クラス '{0}' で宣言された抽象メソッドをオーバーライドするため、'override' 修飾子を指定する必要があります。", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "このモジュールは、'{0}' フラグをオンにして既定のエクスポートを参照することにより、ECMAScript のインポートまたはエクスポートのみを使用して参照できます。", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "このモジュールは、'export =' を使用して宣言されており、'{0}' フラグを使用する場合は既定のインポートでのみ使用できます。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "この操作は簡略化できます。このシフトは '{0} {1} {2}' と同じです。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "このオーバーロードは、戻り値の型の注釈がないため、型 '{0}' を暗黙的に返します。", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "このオーバーロード シグネチャには、実装シグネチャとの互換性はありません。", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "このパラメーターは、'use strict' ディレクティブと共に使用することはできません。", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "このパラメーター プロパティには、基底クラス '{0}' のメンバーをオーバーライドするため、'@override' タグを含む JSDoc コメントが必要です。", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、パラメーター プロパティに 'override' 修飾子がある必要があります。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "この正規表現フラグをサブパターン内で切り替えることはできません。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "この正規表現フラグは、'{0}' 以降をターゲットにする場合にのみ使用できます。", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "この相対インポート パスは、ファイル名のようですが、実際には \"{0}\" に解決されるため、書き換えは安全ではありません。", + "This_spread_always_overwrites_this_property_2785": "このスプレッドは、常にこのプロパティを上書きします。", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly' が有効な場合、この構文は使用できません。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "この構文は、拡張子が .mts または .cts のファイルで予約されています。末尾のコンマまたは明示的な制約を追加します。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "この構文は、拡張子が .mts または .cts のファイルで予約されています。代わりに `as` 式を使用してください。", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "この構文にはインポートされたヘルパーが必要ですが、モジュール '{0}' が見つかりません。", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "この構文には、'{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' には存在しません。'{0}' のバージョンのアップグレードを検討してください。", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "この構文には、{2} パラメーターを持つ '{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' にあるものと互換性がありません。'{0}' のバージョンをアップグレードすることをご検討ください。", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "この型パラメーターには 'extends {0}' 制約が必要な場合があります。", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "この 'import' の使用は無効です。'import()' 呼び出しは書き込むことができますが、かっこが必要であり、型引数を指定することはできません。", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "このファイルを ECMAScript モジュールに変換するには、フィールド '\"type\": \"module\"' を '{0}' に追加します。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、フィールド '\"type\": \"module\"' を '{1}' に追加します。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "このファイルを ECMAScript モジュールに変換するには、ファイル拡張子を '{0}' に変更するか、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "このファイルを ECMAScript モジュールに変換するには、'{ \"type\": \"module\" }' を含むローカルの package.json ファイルを作成します。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "トップレベルの 'await' 式は、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "トップレベルの 'await using' ステートメントは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts ファイルのトップレベルの宣言は、'declare' または 'export' 修飾子で始める必要があります。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "トップレベルの 'for await' ループは、'module' オプションが 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext'、または 'preserve' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ許可されています。", + "Trailing_comma_not_allowed_1009": "末尾にコンマは使用できません。", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "個々のモジュールとして各ファイルをトランスパイルします ('ts.transpileModule' に類似)。", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "存在する場合は `npm i --save-dev @types/{1}` を試すか、`declare module '{0}';` を含む新しい宣言 (.d.ts) ファイルを追加します", + "Trying_other_entries_in_rootDirs_6110": "'rootDirs' の他のエントリを試しています。", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "代入 '{0}' を試しています。候補のモジュールの場所: '{1}'。", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長さ '{1}' のタプル型 '{0}' にインデックス '{2}' の要素がありません。", + "Tuple_type_arguments_circularly_reference_themselves_4110": "タプル型の引数は、それ自体を循環参照します。", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' の種類は、'--downlevelIteration' フラグを使用している場合、または 'es2015' 以降の '--target' を使用している場合にのみ反復処理できます。", + "Type_0_cannot_be_used_as_an_index_type_2538": "型 '{0}' はインデックスの型として使用できません。", + "Type_0_cannot_be_used_to_index_type_1_2536": "型 '{0}' はインデックスの種類 '{1}' に使用できません。", + "Type_0_does_not_satisfy_the_constraint_1_2344": "型 '{0}' は制約 '{1}' を満たしていません。", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "型 '{0}' は想定された型 '{1}' を満たしていません。", + "Type_0_has_no_call_signatures_2757": "型 '{0}' には呼び出しシグネチャがありません。", + "Type_0_has_no_construct_signatures_2761": "型 '{0}' にはコンストラクト シグネチャがありません。", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "型 '{0}' には型 '{1}' と一致するインデックス シグネチャがありません。", + "Type_0_has_no_properties_in_common_with_type_1_2559": "型 '{0}' には型 '{1}' と共通のプロパティがありません。", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "型 '{0}' には、型引数リストを適用できるシグネチャがありません。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "型 '{0}' は汎用であり、読み取り専用にしかインデックスを作成できません。", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "型 '{0}' には 型 '{1}' からの次のプロパティがありません: {2}、{3} など。", + "Type_0_is_not_a_constructor_function_type_2507": "型 '{0}' はコンストラクター関数型ではありません。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "型 '{0}' は Promise と互換性のあるコンストラクター値を参照しないため、ES5 において有効な非同期関数の戻り値の型ではありません。", + "Type_0_is_not_an_array_type_2461": "型 '{0}' は配列型ではありません。", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "型 '{0}' は配列型でも文字列型でもありません。", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "型 '{0}' は、配列型でも文字列型でもないか、反復子を返す '[Symbol.iterator]()' メソッドを持っていません。", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "型 '{0}' は、配列型ではないか、反復子を返す '[Symbol.iterator]()' メソッドを持っていません。", + "Type_0_is_not_assignable_to_type_1_2322": "型 '{0}' を型 '{1}' に割り当てることはできません。", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "型 '{0}' を型 '{1}' に割り当てることはできません。'{2}' でよろしいですか?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "型 '{0}' は型 '{1}' に割り当てられません。同じ名前で 2 つの異なる型が存在しますが、これは関連していません。", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "型 '{0}' は、差異注釈によって暗黙的に示されているように、型 '{1}' に割り当てできません。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "型 '{0}' は、計算された列挙型メンバーの要求どおりに型 '{1}' に割り当てることはできません。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットのプロパティの型に 'undefined' を追加することを検討してください。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "型 '{0}' を、'exactOptionalPropertyTypes: true' が指定されている型 '{1}' に割り当てることはできません。ターゲットの型に 'undefined' を追加することを検討してください。", + "Type_0_is_not_comparable_to_type_1_2678": "型 '{0}' は型 '{1}' と比較できません。", + "Type_0_is_not_generic_2315": "型 '{0}' はジェネリックではありません。", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "型 '{0}' は、'in' 演算子の右オペランドとして許可されていないプリミティブ値を表す場合があります。", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "型 '{0}' には、非同期反復子を返す '[Symbol.asyncIterator]()' メソッドが必要です。", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "型 '{0}' には、反復子を返す '[Symbol.iterator]()' メソッドが必要です。", + "Type_0_provides_no_match_for_the_signature_1_2658": "型 '{0}' にはシグネチャ '{1}' に一致するものがありません。", + "Type_0_recursively_references_itself_as_a_base_type_2310": "型 '{0}' が、基本型としてそれ自体を再帰的に参照しています。", + "Type_Checking_6248": "種類を確認中", + "Type_alias_0_circularly_references_itself_2456": "型のエイリアス '{0}' が自身を循環参照しています。", + "Type_alias_must_be_given_a_name_1439": "型のエイリアスには名前を指定する必要があります。", + "Type_alias_name_cannot_be_0_2457": "型のエイリアス名を '{0}' にすることはできません。", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "型のエイリアスは、TypeScript ファイルでのみ使用できます。", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "型の注釈はコンストラクター宣言では使用できません。", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "型の注釈は、TypeScript ファイルでのみ使用できます。", + "Type_argument_expected_1140": "型引数が必要です。", + "Type_argument_list_cannot_be_empty_1099": "型引数リストを空にすることはできません。", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "型引数は TypeScript ファイルでのみ使用できます。", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' の型引数はそれ自体を循環参照します。", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "型アサーション式は TypeScript ファイルでのみ使用できます。", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "ソースの位置 {0} にある型は、ターゲットの位置 {1} にある型と互換性がありません。", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "ソースの位置 {0} から {1} にある型は、ターゲットの位置 {2} にある型と互換性がありません。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "プライベート名 '{0}' を含む型は、--isolatedDeclarations と一緒には使用できません。", + "Type_declaration_files_to_be_included_in_compilation_6124": "コンパイルに含む型宣言ファイル。", + "Type_expected_1110": "型が必要です。", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "型インポート アサーションには、キー `resolution-mode` が 1 つだけ必要です。値は `import` または `require` です。", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "CommonJS モジュールからの ECMAScript モジュールの型のインポートには、'resolution-mode' 属性が必要です。", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "型のインスタンス化は非常に深く、無限である可能性があります。", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "型は、それ自身の 'then' メソッドのフルフィルメント コールバック内で直接または間接的に参照されます。", + "Type_library_referenced_via_0_from_file_1_1402": "ファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId が '{2}' のファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' オペランドの型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "計算されたプロパティの値の型は '{0}' です。これは、型 '{1}' に代入することはできません。", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "インスタンス メンバー変数 '{0}' の型は、コンストラクターで宣言された識別子 '{1}' を参照できません。", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' オペランドの反復要素の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "マップされた型 '{1}' で、プロパティ '{0}' の型によってそれ自体が循環参照されています。", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "非同期ジェネレーター内の 'yield' オペランドの型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "CommonJS モジュールからの ECMAScript モジュールの型のみのインポートには、'resolution-mode' 属性が必要です。", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "型はこのインポートで生成されます。名前空間スタイルのインポートは、呼び出すこともコンストラクトすることもできず、実行時にエラーが発生します。代わりに、ここで既定のインポートまたはインポートの require を使用することを検討してください。", + "Type_parameter_0_has_a_circular_constraint_2313": "型パラメーター '{0}' に循環制約があります。", + "Type_parameter_0_has_a_circular_default_2716": "型パラメーター '{0}' に循環既定値があります。", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "エクスポートされたインターフェイスの呼び出しシグネチャの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "エクスポートされたインターフェイスのコンストラクター シグネチャの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "エクスポートされたクラスの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "エクスポートされた関数の型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "エクスポートされたインターフェイスの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "エクスポートされたマップ済みのオブジェクト型の型パラメーター '{0}' が、プライベート名 '{1}' を使用しています。", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "エクスポートした型のエイリアスの型パラメーター '{0}' にプライベート名 '{1}' が指定されているか、これを使用しています。", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "エクスポートされたインターフェイスのメソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "エクスポートされたクラスのパブリック メソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "エクスポートされたクラスのパブリック静的メソッドの型パラメーター '{0}' が、プライベート名 '{1}' を持っているか、使用しています。", + "Type_parameter_declaration_expected_1139": "型パラメーターの宣言が必要です。", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "型パラメーターの宣言は TypeScript ファイルでのみ使用できます。", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "型パラメーターの既定値は、以前に宣言された型パラメーターのみを参照できます。", + "Type_parameter_list_cannot_be_empty_1098": "型パラメーター リストを空にすることはできません。", + "Type_parameter_name_cannot_be_0_2368": "型パラメーター名を '{0}' にすることはできません。", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "型パラメーターはコンストラクター宣言では使用できません。", + "Type_predicate_0_is_not_assignable_to_1_1226": "型の述語 '{0}' を '{1}' に割り当てることはできません。", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "型では大きすぎて表すことができないタプル型を生成します。", + "Type_reference_directive_0_was_not_resolved_6120": "======== 型参照ディレクティブ '{0}' が解決されませんでした。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました。プライマリ: {2}。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}'、プライマリ: {3})。========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "型充足式は TypeScript ファイルでのみ使用できます。", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "JavaScript ファイルのエクスポート宣言に型を含めることはできません。", + "Types_have_separate_declarations_of_a_private_property_0_2442": "複数の型に、プライベート プロパティ '{0}' の異なる宣言が含まれています。", + "Types_of_construct_signatures_are_incompatible_2419": "コンストラクト シグネチャの型に互換性がありません。", + "Types_of_parameters_0_and_1_are_incompatible_2328": "パラメーター '{0}' および '{1}' は型に互換性がありません。", + "Types_of_property_0_are_incompatible_2326": "プロパティ '{0}' の型に互換性がありません。", + "Unable_to_open_file_0_6050": "ファイル '{0}' を開くことができません。", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "式として呼び出される場合、クラス デコレーターのシグネチャを解決できません。", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "式として呼び出される場合、メソッド デコレーターのシグネチャを解決できません。", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "式として呼び出される場合、パラメーター デコレーターのシグネチャを解決できません。", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "式として呼び出される場合、プロパティ デコレーターのシグネチャを解決できません。", + "Undetermined_character_escape_1513": "文字エスケープが不明です。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "予期しない '{0}' です。バックスラッシュを使用してエスケープするつもりでしたか?", + "Unexpected_end_of_text_1126": "予期しないテキストの末尾です。", + "Unexpected_keyword_or_identifier_1434": "予期しないキーワードまたは識別子です。", + "Unexpected_token_1012": "予期しないトークンです。", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "予期しないトークンです。コンストラクター、メソッド、アクセサー、またはプロパティが必要です。", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "予期しないトークンです。型パラメーター名には、中かっこを含めることはできません。", + "Unexpected_token_Did_you_mean_or_gt_1382": "予期しないトークンです。`{'>'}` または `>` を意図していましたか?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "予期しないトークンです。`{'}'}` または `}` を意図していましたか?", + "Unexpected_token_expected_1179": "予期しないトークンです。'{' が必要です。", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode エスケープ シーケンスはここでは使用できません。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode エスケープ シーケンスは、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode プロパティ値式は、Unicode (u) フラグまたは Unicode Sets (v) フラグが設定されている場合にのみ使用できます。", + "Unknown_Unicode_property_name_1524": "Unicode プロパティ名が不明です。", + "Unknown_Unicode_property_name_or_value_1529": "Unicode プロパティ名または値が不明です。", + "Unknown_Unicode_property_value_1526": "Unicode プロパティ値が不明です。", + "Unknown_build_option_0_5072": "'{0}' は不明なビルド オプションです。", + "Unknown_build_option_0_Did_you_mean_1_5077": "'{0}' は不明なビルド オプションです。'{1}' を意図していましたか?", + "Unknown_compiler_option_0_5023": "コンパイラ オプション '{0}' が不明です。", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "'{0}' は不明なコンパイラ オプションです。'{1}' を意図していましたか?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "不明なキーワードまたは識別子。'{0}' を意味していましたか?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "不明なオプション 'excludes' です。'exclude' ですか?", + "Unknown_regular_expression_flag_1499": "正規表現フラグが不明です。", + "Unknown_type_acquisition_option_0_17010": "不明な型の取得オプション '{0}'。", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "'{0}' は不明な型の取得オプションです。'{1}' を意図していましたか?", + "Unknown_watch_option_0_5078": "'{0}' は不明な監視オプションです。", + "Unknown_watch_option_0_Did_you_mean_1_5079": "'{0}' は不明な監視オプションです。'{1}' を意図していましたか?", + "Unreachable_code_detected_7027": "到達できないコードが検出されました。", + "Unterminated_Unicode_escape_sequence_1199": "未終了の Unicode エスケープ シーケンスです。", + "Unterminated_quoted_string_in_response_file_0_6045": "応答ファイル '{0}' の文字列の終了引用符がありません。", + "Unterminated_regular_expression_literal_1161": "未終了の正規表現リテラルです。", + "Unterminated_string_literal_1002": "未終了の文字列リテラルです。", + "Unterminated_template_literal_1160": "未終了のテンプレート リテラルです。", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "型指定のない関数の呼び出しで型引数を使用することはできません。", + "Unused_label_7028": "未使用のラベル。", + "Unused_ts_expect_error_directive_2578": "'@ts-expect-error' ディレクティブが使用されていません。", + "Update_import_from_0_90058": "\"{0}\" からのインポートの更新", + "Update_modifiers_of_0_90061": "'{0}' の修飾子を更新してください", + "Updating_output_timestamps_of_project_0_6359": "プロジェクト '{0}' の出力タイムスタンプを更新しています...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "プロジェクト '{0}' の変更されていない出力タイムスタンプを更新しています...", + "Use_0_95174": "\"{0}\" を使用します。", + "Use_0_instead_5106": "代わりに '{0}' を使用してください。", + "Use_Number_isNaN_in_all_conditions_95175": "すべての条件で 'Number.isNaN' を使用します。", + "Use_element_access_for_0_95145": "'{0}' に要素アクセスを使用する", + "Use_element_access_for_all_undeclared_properties_95146": "宣言されていないすべてのプロパティに対して要素アクセスを使用します。", + "Use_import_type_95180": "'import type' を使用してください", + "Use_synthetic_default_member_95016": "合成 'default' メンバーを使用します。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "パッケージのインポートを解決する場合、package.json の 'exports' フィールドを使用してください。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "インポートを解決するときに、package.json の 'imports' フィールドを使用してください。", + "Use_type_0_95181": "'type {0}' を使用してください", + "Using_0_subpath_1_with_target_2_6404": "'{0}' サブパス '{1}' をターゲット '{2}' と共に使用しています。", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX フラグメントを使用するには、フラグメント ファクトリ '{0}' がスコープ内に存在する必要がありますが、見つかりませんでした。", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' ステートメントでの文字列の使用は ECMAScript 5 以上でのみサポートされています。", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build を使用すると、-b は tsc をコンパイラというよりビルド オーケストレーターのように動作させます。これは、複合プロジェクトのビルドをトリガーするために使用されます。詳細については、{0} を参照してください。", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", + "VERSION_6036": "バージョン", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "型 '{0}' の値には、型 '{1}' と共通のプロパティがありません。呼び出しますか?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "型 '{0}' の値は呼び出せません。'new' を含めますか?", + "Variable_0_implicitly_has_an_1_type_7005": "変数 '{0}' の型は暗黙的に '{1}' になります。", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "変数 '{0}' の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "場所によっては、変数 '{0}' の型に '{1}' が暗黙的に指定されていますが、使い方からより良い型を推論できます。", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "変数 '{0}' は、型を決定できない一部の場所では、暗黙のうちに '{1}' 型になります。", + "Variable_0_is_used_before_being_assigned_2454": "変数 '{0}' は割り当てられる前に使用されています。", + "Variable_declaration_expected_1134": "変数の宣言が必要です。", + "Variable_declaration_list_cannot_be_empty_1123": "変数宣言リストを空にすることはできません。", + "Variable_declaration_not_allowed_at_this_location_1440": "変数の宣言はこの場所では許可されていません。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "変数には、--isolatedDeclarations を含む明示的な型注釈が必要です。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "複数の宣言を含む変数をインライン化することはできません。", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "ソースの位置 {0} にある可変個引数要素は、ターゲットの位置 {1} にある要素と一致しません。", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "分散注釈は、オブジェクト、関数、コンストラクター、およびマップされた型の型エイリアスでのみサポートされています。", + "Version_0_6029": "バージョン {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "移行情報については、http://aka.ms/ts6 にアクセスしてください。", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "このファイルの詳細については、https://aka.ms/tsconfig をご覧ください", + "WATCH_OPTIONS_6918": "ウォッチ オプション", + "Watch_and_Build_Modes_6250": "ウォッチ モードとビルド モード", + "Watch_input_files_6005": "入力ファイルを監視します。", + "Watch_option_0_requires_a_value_of_type_1_5080": "監視オプション '{0}' には型 {1} の値が必要です。", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "ここにパラメーター全体の型を追加することによってのみ、'{0}' の型を書き込むことができます。", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "関数を割り当てる際、パラメーターと戻り値が互換性のあるサブタイプであることを確認します。", + "When_type_checking_take_into_account_null_and_undefined_6699": "型チェックを行うときは、'null' と 'undefined' が考慮されます。", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "画面をクリアする代わりに、古くなったコンソール出力をウォッチ モードで保持するかどうか。", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "式のコンテナー内のすべての無効な文字をラップする", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "無効なデコレーター式をすべてかっこで囲む", + "Wrap_all_object_literal_with_parentheses_95116": "すべてのオブジェクト リテラルをかっこで囲みます", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "親の設定が解除されたすべての JSX を JSX フラグメントでラップする", + "Wrap_in_JSX_fragment_95120": "JSX フラグメントでラップする", + "Wrap_in_parentheses_95194": "かっこで囲む", + "Wrap_invalid_character_in_an_expression_container_95108": "式のコンテナー内の無効な文字をラップする", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "次の本体をかっこで囲みます。これはオブジェクト リテラルです", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "コンパイラ オプションの詳細については、{0} をご覧ください。", + "You_cannot_rename_a_module_via_a_global_import_8031": "グローバル インポートを使用してモジュールの名前を変更することはできません。", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "'node_modules' フォルダーで定義されている要素の名前を変更することはできません。", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "別の 'node_modules' フォルダーで定義されている要素の名前を変更することはできません。", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "標準の TypeScript ライブラリで定義された要素の名前を変更することはできません。", + "You_cannot_rename_this_element_8000": "この要素の名前を変更することはできません。", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' は受け入れる引数が少なすぎるので、ここでデコレーターとして使用することができません。最初にこれを呼び出してから、'@{0}()' を書き込むつもりでしたか?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' および '{1}' インデックス シグネチャに互換性がありません。", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' および '{1}' 演算をかっこなしで混在させることはできません。", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' は 2 回指定されています。'{0}' という名前の属性は上書きされます。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型の末尾にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型の先頭にある '{0}' は、有効な TypeScript 構文ではありません。'{1}' を書き込むつもりでしたか?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' をインポートするには、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' をインポートするには、既定のインポートを使用する必要があります。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' をインポートするには、'require' 呼び出しを使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' をインポートするには、'require' 呼び出しを使用するか、既定のインポートを使用する必要があります。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' をインポートするには、'import {1} = require({2})' または既定のインポートを使用する必要があります。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' をインポートするには、'import {1} = require ({2})' を使用するか、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' を JSX コンポーネントとして使用することはできません。", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'export type' を使用してエクスポートされたため、'{0}' は値として使用できません。", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'import type' を使用してインポートされたため、'{0}' は値として使用できません。", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' コンポーネントには、テキストを子要素として指定できません。JSX のテキストには 'string' 型が含まれていますが、'{1}' の予期された型は '{2}' です。", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{1}' に関連しない可能性のある任意の型で '{0}' をインスタンス化できます。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 宣言は、ブロック内でのみ宣言できます。", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣言は TypeScript ファイルでのみ使用できます。", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣言はバインド パターンを持っていない可能性があります。", + "_0_declarations_must_be_initialized_1155": "'{0}' 宣言は初期化する必要があります。", + "_0_expected_1005": "'{0}' が必要です。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' には文字列型がありますが、'isolatedModules' が有効である場合、構文的に認識可能な文字列構文が必要です。", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{1}' という名前のエクスポートされたメンバーが '{0}' に含まれていません。候補: '{2}'", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' の戻り値の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' には型の注釈がなく、直接または間接的に初期化子で参照されているため、暗黙的に 'any' 型が含まれています。", + "_0_index_signatures_are_incompatible_2634": "'{0}' インデックス シグネチャに互換性がありません。", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}'インデックス型'{1}' を '{2}'インデックス型'{3}' に割り当てることはできません。", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' はプリミティブですが、'{1}' はラッパー オブジェクトです。できれば '{0}' をご使用ください。", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' は型であるため、JavaScript ファイルにインポートできません。JSDoc 型の注釈で '{1}' を使用します。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' は型であり、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' は、'{1}' の未使用の名前変更です。型の注釈として使用するつもりでしたか?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' は型 '{1}' の制約に代入できますが、'{1}' は制約 '{2}' の別のサブタイプでインスタンス化できることがあります。", + "_0_is_automatically_exported_here_18044": "`{0}` は自動的にここにエクスポートされます。", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' が宣言されていますが、その値が読み取られることはありません。", + "_0_is_declared_but_never_used_6196": "'{0}' は宣言されましたが使用されませんでした。", + "_0_is_declared_here_2728": "'{0}' はここで宣言されています。", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' はクラス '{1}' でプロパティとして定義されていますが、ここでは '{2}' でアクセサーとしてオーバーライドされています。", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' はクラス '{1}' でアクセサーとして定義されていますが、ここではインスタンス プロパティとして '{2}' でオーバーライドされています。", + "_0_is_deprecated_6385": "'{0}' は非推奨です。", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' はキーワード '{1}' に関するメタプロパティとして無効です。候補: '{2}'。", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' はパラメーター名として使用できません。", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' は変数宣言の名前として使用できません。", + "_0_is_of_type_unknown_18046": "'{0}''は 'unknown' 型です。", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' は 'null' の可能性があります。", + "_0_is_possibly_null_or_undefined_18049": "'{0}' は 'null' か 'undefined' の可能性があります。", + "_0_is_possibly_undefined_18048": "'{0}' は 'undefined' の可能性があります。", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' はそれ自身のベース式内で直接または間接的に参照されます。", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' はそれ自身の型の注釈内で直接または間接的に参照されます。", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' が複数回指定されているため、ここでの使用は上書きされます。", + "_0_list_cannot_be_empty_1097": "'{0}' のリストを空にすることはできません。", + "_0_modifier_already_seen_1030": "'{0}' 修飾子は既に存在します。", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾子は、クラス、インターフェイス、または型エイリアスの型パラメーターでのみ使用できます", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾子は、関数、メソッド、またはクラスの型パラメーターでのみ使用できます", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 修飾子はコンストラクター宣言では使用できません。", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 修飾子は、モジュールまたは名前空間の要素では使用できません。", + "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' 修飾子はパラメーターでは使用できません。", + "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 修飾子は型メンバーでは使用できません。", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 修飾子は型パラメーターでは表示できません。", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾子を 'using' 宣言で使用することはできません。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾子を 'await using' 宣言で使用することはできません。", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 修飾子はインデックス シグネチャでは使用できません。", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' 修飾子はこの種類のクラス要素では使用できません。", + "_0_modifier_cannot_be_used_here_1042": "'{0}' 修飾子はここでは使用できません。", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' 修飾子は環境コンテキストでは使用できません。", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾子と '{1}' 修飾子は同時に使用できません。", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾子を private 識別子とともに使用することはできません。", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾子は '{1}' 修飾子の前に指定する必要があります。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' の後には、中かっこで囲まれた Unicode プロパティ値式を指定する必要があります。", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' には、明示的な型の注釈が必要です。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' は型のみを参照しますが、ここで名前空間として使用されています。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' は型のみを参照しますが、ここで値として使用されています。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' は型を参照しているだけですが、こちらでは値として使用されています。'{0} 内の {1}' を使用しますか?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' は型のみを参照しますが、ここでは値として使用されています。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションを es2015 以降に変更してみてください。", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' は UMD グローバルを参照していますが、現在のファイルはモジュールです。代わりにインポートを追加することを考慮してください。", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' は値を参照していますが、ここでは型として使用されています。'typeof {0}' を意図していましたか?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' は型に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' は型のみの宣言に解決されるため、'verbatimModuleSyntax' が有効であるときは、型のみのインポートを使用してインポートされる必要があります。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'{0}' がインポートされる場所で 'import type' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' は型のみの宣言に解決され、'{1}' が有効であるときに再エクスポートする前に、このファイル内で型のみとしてマークする必要があります。'export type { {0} as default }' を使用することを検討してください。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "\"{0}\" は型のみの宣言に解決されるため、'{1}' が有効であるときは、型のみの再エクスポートを使用して再エクスポートされる必要があります。", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "config json ファイル の 'compilerOptions' オブジェクト内に '{0}' を設定する必要があります。", + "_0_tag_already_specified_1223": "'{0}' タグは既に指定されています。", + "_0_was_also_declared_here_6203": "ここでは '{0}' も宣言されました。", + "_0_was_exported_here_1377": "ここでは '{0} ' がエクスポートされました。", + "_0_was_imported_here_1376": "ここでは '{0}' がインポートされました。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}' には戻り値の型の注釈がないため、戻り値の型は暗黙的に '{1}' になります。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}' には戻り値の型の注釈がないため、yield 型は暗黙的に '{1}' になります。", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾子は、クラス宣言、メソッド宣言、またはプロパティ宣言のみに使用できます。", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 修飾子は、プロパティ宣言でのみ使用できます。", + "and_here_6204": "およびここで。", + "and_npm_install_D_types_Slashnode_6290": "および npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments' は、プロパティ初期化子やクラスの静的初期化ブロック内では参照できません。", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": インポート、エクスポート、import.meta、jsx (jsx: react-jsx を使用)、または esm 形式 (モジュール: node16+) でファイルをモジュールとして扱います。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 式はクラスの静的ブロック内では使用できません。", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "ファイルがモジュールの場合、'await' 式はそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 式は、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 式は、パラメーター初期化子では使用できません。", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' は、この式の型に対しては効果がありません。", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "'await using' 宣言はアンビエント コンテキストでは使用できません。", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' 宣言は、ブロック内に含まれていない限り、'case' または 'default' 句では使用できません。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ステートメントは、ファイルがモジュールである場合、そのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ステートメントは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ステートメントをクラスの静的ブロック内で使用することはできません。", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' オプションは '{0}' に設定され、この値を使用して非相対モジュール名 '{1}' を解決します。", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' の後には ASCII 文字が続く必要があります。", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' は、ファイルの先頭でのみ使用できます。", + "case_or_default_expected_1130": "'case' または 'default' が必要です。", + "catch_or_finally_expected_1472": "'catch' または 'finally' が必要です。", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列挙型メンバーの初期化子が、無限値に評価されました。", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列挙型メンバーの初期化子が、許可されない値 'NaN' に評価されました。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 列挙型メンバー初期化子は定数式である必要があります。", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列挙型は、プロパティまたはインデックスのアクセス式、インポート宣言またはエクスポートの代入の右辺、型のクエリにのみ使用できます。", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' をパラメーターのプロパティ名として使用することはできません。", + "constructor_is_a_reserved_word_18012": "'#constructor' は予約語です。", + "default_Colon_6903": "既定:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "厳格モードでは 'delete' を識別子で呼び出すことはできません。", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' では既定のものは再エクスポートされません。", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' は、TypeScript ファイルでのみ使用できます。", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "環境モジュールとモジュール拡張は常に表示されるので、これらに 'export' 修飾子を適用することはできません。", + "extends_clause_already_seen_1172": "'extends' 句は既に存在します。", + "extends_clause_must_precede_implements_clause_1173": "extends' 句は 'implements' 句の前に指定しなければなりません。", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "エクスポートされたクラス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "エクスポートされたクラスの 'extends' 句がプライベート名 '{0}' を持っているか、使用しています。", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "エクスポートされたインターフェイス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。", + "false_unless_checkJs_is_set_6932": "`false`、`checkJs` が設定されている場合を除く", + "false_unless_composite_is_set_6906": "'composite' が設定されていない場合は 'false'", + "file_6025": "ファイル", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "ファイルがモジュールの場合、'for await' ループはそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' ループは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' ループは、クラスの静的ブロック内では使用できません。", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' および 'set' アクセサーでは 'this' パラメーターを宣言できません。", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files' が指定されている場合は '[]'、それ以外の場合は '[\"**/*\"]'", + "implements_clause_already_seen_1175": "'implements' 句は既に存在します。", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 句は、TypeScript ファイルでのみ使用できます。", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' は、TypeScript ファイルでのみ使用できます。", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 宣言は、条件付き型の 'extends' 句でのみ許可されます。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' の後には、山かっこで囲まれたキャプチャ グループ名を指定する必要があります。", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' は、'let' 宣言または 'const' 宣言で名前として使用することはできません。", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "ターゲットにコンストラクト シグネチャがない 'new' 式の型は、暗黙的に 'any' になります。", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`' と、指定されている場合は 'outDir' の値を加算します。", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module` が `nodenext` の場合は `nodenext`、`module` が `node16` または `node18` の場合は `node16`、それ以外の場合は `bundler`。", + "one_of_Colon_6900": "次のいずれか:", + "one_or_more_Colon_6901": "1 つ以上", + "options_6024": "オプション", + "or_JSX_element_expected_1145": "'{' または JSX 要素が必要です。", + "or_expected_1144": "'{' または ';' が必要です。", + "package_json_does_not_have_a_0_field_6100": "'package.json' に '{0}' フィールドがありません。", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' には、バージョン '{0}' と一致する 'typesVersions' エントリがありません。", + "package_json_had_a_falsy_0_field_6220": "'package.json' には、false に評価される '{0}' フィールドが含まれています。", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' に '{2}' を参照する '{0}' フィールド '{1}' があります。", + "package_json_has_a_peerDependencies_field_6281": "'package.json' に 'peerDependencies' フィールドがあります。", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' には、有効な semver の範囲ではない 'typesVersions' エントリ '{0}' が含まれています。", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' には、コンパイラ バージョン '{1}' に一致する 'typesVersions' エントリ '{0}' が含まれていて、モジュール名 '{2}' に一致するパターンを探しています。", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' には、バージョン固有のパス マッピングを含む 'typesVersions' フィールドが含まれています。", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json のスコープ '{0}' は、指定子 '{1}' を明示的に null にマッピングします。", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json のスコープ '{0}' は、指定子 '{1}' のターゲットに無効な型です。", + "package_json_scope_0_has_no_imports_defined_6273": "package.json のスコープ '{0}' にはインポートが定義されていません。", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' オプションが指定され、モジュール名 '{0}' と一致するパターンを検索します。", + "q_is_only_available_inside_character_class_1511": "'\\q' は文字クラス内でのみ使用できます。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' の後には、中かっこで囲まれた代替文字列を指定する必要があります。", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾子はプロパティ宣言またはインデックス シグネチャのみに使用できます。", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 型の修飾子は、配列およびタプル リテラル型でのみ使用できます。", + "require_call_may_be_converted_to_an_import_80005": "'require' の呼び出しはインポートに変換される可能性があります。", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` は、型のみのインポートに対してのみ設定できます。", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` は、型インポート アサーションの唯一の有効なキーです。", + "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" は \"require\" または \"import\" のいずれかにする必要があります。", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' オプションが設定され、このオプションを使用して相対モジュール名 '{0}' を解決します。", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' は、派生クラスでのみ参照できます。", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' は、派生クラスのメンバーまたはオブジェクトのリテラル式のメンバーでのみ参照されます。", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' は、計算されたプロパティ名では参照できません。", + "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' はコンストラクター引数では参照できません。", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "オプション 'target' が 'ES2015' 以降の場合、'super' はオブジェクトのリテラル式のメンバーでのみ使用できます。", + "super_may_not_use_type_arguments_2754": "'super' では型引数を使用できません。", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "派生クラスのコンストラクター内の 'super' のプロパティにアクセスする前に、'super' を呼び出す必要があります。", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "派生クラスのコンストラクター内の 'this' にアクセスする前に、'super' を呼び出す必要があります。", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' の後には、引数リストまたはメンバー アクセスが必要です。", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' プロパティ アクセスはコンストラクター、メンバー関数、または派生クラスのメンバー アクセサーでのみ許可されます。", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' は、計算されたプロパティ名では参照できません。", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' はモジュール本体内または名前空間本体内では参照できません。", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' は、静的プロパティ初期化子では参照できません。", + "this_cannot_be_referenced_in_current_location_2332": "'this' は現在の場所では参照できません。", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' は型として注釈を持たないため、暗黙的に型 'any' になります。", + "true_for_ES2022_and_above_including_ESNext_6930": "ESNext を含む ES2022 以降の場合は 'true' です。", + "true_if_composite_false_otherwise_6909": "'composite' の場合は 'true'、それ以外の場合は 'false'", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution' が 'node16'、'nodenext'、または 'bundler' である場合は 'true'、それ以外の場合は 'false' です。", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript コンパイラ", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json は存在しますが、コマンドラインでファイルが指定されている場合は読み込まれません。このエラーをスキップするには、'--ignoreConfig' を使用します。", + "type_Colon_6902": "種類:", + "unique_symbol_types_are_not_allowed_here_1335": "'unique symbol' 型はここでは許可されていません。", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 型は変数ステートメントの変数でのみ許可されています。", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型は、バインディング名を持つ変数の宣言では使用できません。", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' ディレクティブは、複雑なパラメーター リストでは使用できません。", + "use_strict_directive_used_here_1349": "'use strict' ディレクティブがここで使用されています。", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "'using' 宣言はアンビエント コンテキストでは使用できません。", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' 宣言は、ブロック内に含まれていない限り、'case' または 'default' 句では使用できません。", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 式は、非同期関数ブロックでは使用できません。", + "with_statements_are_not_allowed_in_strict_mode_1101": "厳格モードでは 'with' ステートメントは使用できません。", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 式は、それを含むジェネレーターに戻り値の型の注釈がないため、暗黙的に 'any' 型になります。", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 式は、パラメーター初期化子では使用できません。" +} diff --git a/tsc/internal/diagnostics/loc/ko-KR.generated.json b/tsc/internal/diagnostics/loc/ko-KR.generated.json index 0f77385abb48e..5453ee3d88740 100644 --- a/tsc/internal/diagnostics/loc/ko-KR.generated.json +++ b/tsc/internal/diagnostics/loc/ko-KR.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "모든 컴파일러 옵션", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 한정자는 가져오기 선언에서 사용할 수 없습니다.", - "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 매개 변수는 첫 번째 매개 변수여야 합니다.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 태그는 '@typedef', '@callback' 또는 '@overload' 태그 다음에 올 수 없습니다.", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 주석에 여러 '@type' 태그를 포함하지 못할 수 있습니다.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' 리터럴은 속성 이름으로 사용할 수 없습니다.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint 리터럴에는 지수 표기법을 사용할 수 없습니다.", - "A_bigint_literal_must_be_an_integer_1353": "bigint 리터럴은 정수여야 합니다.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "바인딩 패턴 매개 변수는 구현 서명에서 선택 사항이 될 수 없습니다.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 문은 이 문을 둘러싼 반복문 또는 switch 문 내에서만 사용할 수 있습니다.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 문은 이 문을 둘러싼 문의 레이블로만 이동할 수 있습니다.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "문자 클래스는 예약된 이중 문장 부호를 포함해서는 안됩니다. 백슬래시로 이스케이프하려고 하셨나요?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "문자 클래스 범위는 다른 문자 클래스에 의해 바인딩되어서는 안 됩니다.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "클래스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 구현할 수 있습니다.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "클래스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 구현할 수 있습니다.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "클래스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 클래스는 생성 가능한 값만 확장할 수 있습니다.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "클래스는 '{0}' 같은 기본 형식을 구현할 수 없습니다. 다른 명명된 개체 형식만 구현할 수 있습니다.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' 한정자를 사용하지 않는 클래스 선언에는 이름이 있어야 합니다.", - "A_class_member_cannot_have_the_0_keyword_1248": "클래스 멤버에는 '{0}' 키워드를 사용할 수 없습니다.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "쉼표 식은 컴퓨팅된 속성 이름에 사용할 수 없습니다.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "계산된 속성 이름에서는 포함하는 형식의 형식 매개 변수를 참조할 수 없습니다.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "클래스 속성 선언의 계산된 속성 이름에는 간단한 리터럴 형식 또는 '고유 기호' 형식이 있어야 합니다.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "메서드 오버로드의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "리터럴 형식의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "앰비언트 컨텍스트의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "인터페이스의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "계산된 속성 이름은 'string', 'number', 'symbol' 또는 'any' 형식이어야 합니다.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' 어설션은 열거형 멤버나 문자열, 숫자, 부울, 배열 또는 객체 리터럴에 대한 참조에만 적용할 수 있습니다.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const 열거형 멤버는 문자열 리터럴을 통해서만 액세스할 수 있습니다.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "앰비언트 컨텍스트의 'const' 이니셜라이저는 문자열, 숫자 리터럴 또는 리터럴 열거형 참조여야 합니다.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "생성자는 해당 클래스가 'null'을 확장하는 경우 'super' 호출을 포함할 수 없습니다.", - "A_constructor_cannot_have_a_this_parameter_2681": "생성자에는 'this' 매개 변수를 사용할 수 없습니다.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 문은 이 문을 둘러싼 반복문 내에서만 사용할 수 있습니다.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 문은 이 문을 둘러싼 반복문의 레이블로만 이동할 수 있습니다.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "'import type'이 없으면 선언 파일을 가져올 수 없습니다. 대신 '{0}' 구현 파일을 가져오시겠습니까?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 한정자는 이미 존재하는 앰비언트 컨텍스트에서 사용할 수 없습니다.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "데코레이터는 오버로드가 아니라 메서드 구현만 데코레이팅할 수 있습니다.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 절은 'switch' 문에 두 번 이상 나올 수 없습니다.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "기본 내보내기는 ECMAScript 스타일 모듈에서만 사용할 수 있습니다.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "기본 내보내기 수준은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "이 컨텍스트에서는 한정된 할당 어설션 '!'가 허용되지 않습니다.", - "A_destructuring_declaration_must_have_an_initializer_1182": "구조 파괴 선언에 이니셜라이저가 있어야 합니다.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "동적 가져오기 호출은 'Promise'를 반환합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", - "A_file_cannot_have_a_reference_to_itself_1006": "파일은 자신에 대한 참조를 포함할 수 없습니다.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never'를 반환하는 함수에는 연결 가능한 끝점이 있을 수 없습니다.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' 키워드로 호출한 함수에는 'void'인 'this' 형식을 사용할 수 없습니다.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "선언된 형식이 'undefined', 'void' 또는 'any'가 아닌 함수는 값을 반환해야 합니다.", - "A_generator_cannot_have_a_void_type_annotation_2505": "생성기에는 'void' 형식 주석을 사용할 수 없습니다.", - "A_get_accessor_cannot_have_parameters_1054": "'get' 접근자에는 매개 변수를 사용할 수 없습니다.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 접근자는 최소한 setter의 액세스 가능 수준과 같아야 합니다.", - "A_get_accessor_must_return_a_value_2378": "'get' 접근자는 값을 반환해야 합니다.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "레이블이 지정된 튜플 요소는 형식 뒤가 아니라 이름 뒤이면서 콜론 앞에 물음표를 사용하여 optional로 선언됩니다.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "레이블이 지정된 튜플 요소는 형식 앞이 아니라 이름 앞에 '...'을 사용하여 rest로 선언됩니다.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "매핑된 형식은 속성 또는 메서드를 선언할 수 없습니다.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "열거형 선언의 멤버 이니셜라이저는 그 뒤에 선언된 멤버와 다른 열거형에 정의된 멤버를 참조할 수 없습니다.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 클래스에는 'any[]' 형식의 rest 매개 변수 하나를 사용하는 생성자가 있어야 합니다.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "추상 구문 시그니처를 포함하는 형식 변수에서 확장되는 mixin 클래스는 'abstract'로도 선언되어야 합니다.", - "A_module_cannot_have_multiple_default_exports_2528": "모듈에는 기본 내보내기가 여러 개 있을 수 없습니다.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수와 다른 파일에 있을 수 없습니다,", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수 앞에 있을 수 없습니다.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "네임스페이스 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 허용됩니다.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' 키워드를 사용하여 'namespace' 선언을 선언하면 안 됩니다. 대신 'namespace' 키워드를 사용하세요.", - "A_non_dry_build_would_build_project_0_6357": "-dry가 아닌 빌드는 프로젝트 '{0}'을(를) 빌드합니다.", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry가 아닌 빌드는 다음 파일을 삭제합니다. {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY가 아닌 빌드는 '{0}' 프로젝트의 출력 타임스탬프를 업데이트합니다.", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "매개 변수 이니셜라이저는 함수 또는 생성자 구현에서만 허용됩니다.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "rest 매개 변수를 사용하여 매개 변수 속성을 선언할 수 없습니다.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "매개 변수 속성은 생성자 구현에서만 허용됩니다.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "바인딩 패턴을 사용하여 매개 변수 속성을 선언할 수 없습니다.", - "A_promise_must_have_a_then_method_1059": "프라미스에는 'then' 메서드가 있어야 합니다.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "형식이 'unique symbol' 형식인 클래스의 속성은 'static'과 'readonly' 둘 다여야 합니다.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "형식이 'unique symbol' 형식인 인터페이스 또는 형식 리터럴의 속성은 'readonly'여야 합니다.", - "A_required_element_cannot_follow_an_optional_element_1257": "필수 요소는 선택적 요소 뒤에 올 수 없습니다.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "필수 매개 변수는 선택적 매개 변수 뒤에 올 수 없습니다.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 요소에는 바인딩 패턴이 포함될 수 없습니다.", - "A_rest_element_cannot_follow_another_rest_element_1265": "rest 요소는 다른 rest 요소 뒤에 올 수 없습니다.", - "A_rest_element_cannot_have_a_property_name_2566": "rest 요소에는 속성 이름을 사용할 수 없습니다.", - "A_rest_element_cannot_have_an_initializer_1186": "rest 요소에는 이니셜라이저를 사용할 수 없습니다.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 요소는 배열 구조 파괴 패턴의 마지막 요소여야 합니다.", - "A_rest_element_type_must_be_an_array_type_2574": "rest 요소 형식은 배열 형식이어야 합니다.", - "A_rest_parameter_cannot_be_optional_1047": "rest 매개 변수는 선택 사항이 될 수 없습니다.", - "A_rest_parameter_cannot_have_an_initializer_1048": "rest 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest 매개 변수는 매개 변수 목록 마지막에 있어야 합니다.", - "A_rest_parameter_must_be_of_an_array_type_2370": "rest 매개 변수는 배열 형식이어야 합니다.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest 매개 변수 또는 바인딩 패턴에 후행 쉼표가 없을 수 있습니다.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 문은 함수 본문 내에서만 사용할 수 있습니다.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "가져오기를 'baseUrl'에 상대적인 조회 위치로 다시 매핑하는 일련의 항목입니다.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 접근자에는 반환 형식 주석을 사용할 수 없습니다.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 접근자에는 선택적 매개 변수를 사용할 수 없습니다.", - "A_set_accessor_cannot_have_rest_parameter_1053": "'set' 접근자에는 rest 매개 변수를 사용할 수 없습니다.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 접근자에는 매개 변수를 하나만 사용해야 합니다.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 접근자 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "확산 인수는 튜플 유형을 가지거나 나머지 매개 변수로 전달되어야 합니다.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' 호출은 초기화된 속성, 매개 변수 속성 또는 개인 식별자를 포함하는 파생 클래스의 생성자 내에서 루트 수준 문이어야 합니다.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "파생 클래스에 초기화된 속성, 매개 변수 속성 또는 개인 식별자가 포함된 경우 'super' 호출은 '수퍼' 또는 'this'를 참조하는 생성자의 첫 번째 명령문이어야 합니다.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' 기반 형식 가드는 매개 변수 기반 형식 가드와 호환되지 않습니다.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 형식은 클래스 또는 인터페이스의 비정적 멤버에서만 사용할 수 있습니다.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 CommonJS 모듈의 값 선언에 최상위 'export' 한정자를 사용할 수 없습니다.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 파일이 이미 '{0}'에 정의되어 있습니다.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "튜플 멤버는 optional이면서 rest일 수 없습니다.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "튜플 형식은 음수 값으로 인덱싱할 수 없습니다.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "지수 식의 왼쪽에는 type assertion expression을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.", - "A_type_literal_property_cannot_have_an_initializer_1247": "형식 리터럴 속성에는 이니셜라이저를 사용할 수 없습니다.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "형식 전용 가져오기는 기본 가져오기 또는 명명된 바인딩을 지정할 수 있지만, 둘 다 지정할 수는 없습니다.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "형식 조건자는 rest 매개 변수를 참조할 수 없습니다.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "형식 조건자는 바인딩 패턴에서 '{0}' 요소를 참조할 수 없습니다.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "형식 조건자는 함수 및 메서드의 반환 형식 위치에서만 사용할 수 있습니다.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "형식 조건자의 형식을 해당 매개 변수의 형식에 할당할 수 있어야 합니다.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "데코레이팅된 서명에서 참조하는 유형은 'isolatedModules' 및 'emitDecoratorMetadata'가 활성화된 경우 '가져오기 유형' 또는 네임스페이스 가져오기를 사용하여 가져와야 합니다.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "형식이 'unique symbol' 형식인 변수는 'const'여야 합니다.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 식은 생성기 본문에서만 사용할 수 있습니다.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "super 식을 통해 '{1}' 클래스의 추상 메서드 '{0}'에 액세스할 수 없습니다.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "추상 메서드는 추상 클래스 내에서만 사용할 수 있습니다.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "추상 속성은 추상 클래스 내에만 나타날 수 있습니다.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "생성자에서 '{1}' 클래스의 추상 속성 '{0}'에 액세스할 수 없습니다.", - "Accessibility_modifier_already_seen_1028": "액세스 가능성 한정자가 이미 있습니다.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "접근자는 ECMAScript 5 이상을 대상으로 지정할 때만 사용할 수 있습니다.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "접근자는 모두 추상이거나 비추상이어야 합니다.", - "Add_0_to_unresolved_variable_90008": "확인되지 않은 변수에 '{0}.' 추가", - "Add_a_return_statement_95111": "return 문 추가", - "Add_a_return_type_to_the_function_declaration_9031": "함수 선언에 반환 형식을 추가합니다.", - "Add_a_return_type_to_the_function_expression_9030": "함수 식에 반환 형식을 추가합니다.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "get 접근자 선언에 반환 형식을 추가합니다.", - "Add_a_return_type_to_the_method_9034": "메서드에 반환 형식 추가", - "Add_a_type_annotation_to_the_parameter_0_9028": "{0} 매개 변수에 형식 주석을 추가합니다.", - "Add_a_type_annotation_to_the_property_0_9029": "{0} 속성에 형식 주석을 추가합니다.", - "Add_a_type_annotation_to_the_variable_0_9027": "{0} 변수에 형식 주석을 추가합니다.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set 접근자 선언의 매개 변수에 형식을 추가합니다.", - "Add_all_missing_async_modifiers_95041": "누락된 모든 'async' 한정자 추가", - "Add_all_missing_attributes_95168": "누락된 특성 모두 추가", - "Add_all_missing_call_parentheses_95068": "누락된 호출 괄호 모두 추가", - "Add_all_missing_function_declarations_95157": "누락된 함수 선언 모두 추가", - "Add_all_missing_imports_95064": "누락된 모든 가져오기 추가", - "Add_all_missing_members_95022": "누락된 모든 멤버 추가", - "Add_all_missing_override_modifiers_95162": "누락된 모든 'override' 한정자 추가", - "Add_all_missing_parameters_95190": "누락된 매개 변수 모두 추가", - "Add_all_missing_properties_95166": "누락된 모든 속성 추가", - "Add_all_missing_return_statement_95114": "누락된 모든 return 문 추가", - "Add_all_missing_super_calls_95039": "누락된 모든 super 호출 추가", - "Add_all_missing_type_annotations_90067": "누락된 모든 형식 주석 추가", - "Add_all_optional_parameters_95193": "모든 선택적 매개 변수 추가", - "Add_annotation_of_type_0_90062": "'{0}' 형식의 주석 추가", - "Add_async_modifier_to_containing_function_90029": "포함된 함수에 async 한정자 추가", - "Add_await_95083": "'await' 추가", - "Add_await_to_initializer_for_0_95084": "'{0}'의 이니셜라이저에 'await' 추가", - "Add_await_to_initializers_95089": "이니셜라이저에 'await' 추가", - "Add_braces_to_arrow_function_95059": "화살표 함수에 중괄호 추가", - "Add_const_to_all_unresolved_variables_95082": "확인되지 않은 모든 변수에 'const' 추가", - "Add_const_to_unresolved_variable_95081": "확인되지 않은 변수에 'const' 추가", - "Add_definite_assignment_assertion_to_property_0_95020": "'{0}' 속성에 한정된 할당 어설션 추가", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "초기화되지 않은 모든 속성에 한정된 할당 어설션 추가", - "Add_export_to_make_this_file_into_a_module_95097": "'export {}'를 추가하여 이 파일을 모듈로 만들기", - "Add_extends_constraint_2211": "`extends` 제약 조건을 추가합니다.", - "Add_extends_constraint_to_all_type_parameters_2212": "모든 형식 매개 변수에 `extends` 제약 조건 추가", - "Add_import_from_0_90057": "\"{0}\"에서 가져오기 추가", - "Add_index_signature_for_property_0_90017": "'{0}' 속성에 대해 인덱스 시그니처 추가", - "Add_initializer_to_property_0_95019": "'{0}' 속성에 이니셜라이저 추가", - "Add_initializers_to_all_uninitialized_properties_95027": "초기화되지 않은 모든 속성에 이니셜라이저 추가", - "Add_missing_attributes_95167": "누락된 특성 추가", - "Add_missing_call_parentheses_95067": "누락된 호출 괄호 추가", - "Add_missing_comma_for_object_member_completion_0_95187": "개체 멤버 완료 '{0}'에 대한 누락된 쉼표 추가", - "Add_missing_enum_member_0_95063": "누락된 열거형 멤버 '{0}' 추가", - "Add_missing_function_declaration_0_95156": "누락된 함수 선언 '{0}' 추가", - "Add_missing_new_operator_to_all_calls_95072": "모든 호출에 누락된 'new' 연산자 추가", - "Add_missing_new_operator_to_call_95071": "호출에 누락된 'new' 연산자 추가", - "Add_missing_parameter_to_0_95188": "'{0}'에 누락된 매개 변수 추가", - "Add_missing_parameters_to_0_95189": "'{0}'에 누락된 매개 변수 추가", - "Add_missing_properties_95165": "누락된 속성 추가", - "Add_missing_super_call_90001": "누락된 'super()' 호출 추가", - "Add_missing_typeof_95052": "누락된 'typeof' 추가", - "Add_names_to_all_parameters_without_names_95073": "이름이 없는 모든 매개 변수에 이름 추가", - "Add_optional_parameter_to_0_95191": "'{0}'에 선택적 매개 변수 추가", - "Add_optional_parameters_to_0_95192": "'{0}'에 선택적 매개 변수 추가", - "Add_or_remove_braces_in_an_arrow_function_95058": "화살표 함수에 중괄호 추가 또는 제거", - "Add_override_modifier_95160": "'override' 한정자 추가", - "Add_parameter_name_90034": "매개 변수 이름 추가", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "멤버 이름과 일치하는 모든 확인되지 않은 변수에 한정자 추가", - "Add_resolution_mode_import_attribute_95196": "'resolution-mode' 가져오기 특성 추가", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "필요한 모든 형식 전용 가져오기에 'resolution-mode' 가져오기 특성을 추가합니다.", - "Add_return_type_0_90063": "반환 형식 '{0}' 추가", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "이 식에 충족 및 형식 어설션을 추가하여(T를 T로 충족) 형식을 명시적으로 만듭니다.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}'을(를) 사용하여 충족 및 인라인 형식 어설션 추가", - "Add_to_all_uncalled_decorators_95044": "호출되지 않는 모든 데코레이터에 '()' 추가", - "Add_ts_ignore_to_all_error_messages_95042": "모든 오류 메시지에 '@ts-ignore' 추가", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "인덱스를 사용하여 액세스할 때 유형에 'undefined'를 추가합니다.", - "Add_undefined_to_optional_property_type_95169": "선택적 속성 유형에 'undefined' 추가", - "Add_undefined_type_to_all_uninitialized_properties_95029": "초기화되지 않은 모든 속성에 정의되지 않은 형식 추가", - "Add_undefined_type_to_property_0_95018": "'{0}' 속성에 '정의되지 않은' 형식 추가", - "Add_unknown_conversion_for_non_overlapping_types_95069": "겹치지 않는 형식에 대해 'unknown' 변환 추가", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "겹치지 않는 형식의 모든 변환에 'unknown' 추가", - "Add_void_to_Promise_resolved_without_a_value_95143": "값 없이 확인된 Promise에 'void' 추가", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "값 없이 확인된 모든 Promise에 'void' 추가", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json 파일을 추가하면 TypeScript 파일과 JavaScript 파일이 둘 다 포함된 프로젝트를 정리하는 데 도움이 됩니다. 자세한 내용은 https://aka.ms/tsconfig를 참조하세요.", - "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}'의 모든 선언에는 동일한 제약 조건이 있어야 합니다.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}'의 모든 선언에는 동일한 한정자가 있어야 합니다.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}'의 모든 선언에는 동일한 형식 매개 변수가 있어야 합니다.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "추상 메서드의 모든 선언은 연속적이어야 합니다.", - "All_destructured_elements_are_unused_6198": "구조 파괴된 요소가 모두 사용되지 않습니다.", - "All_imports_in_import_declaration_are_unused_6192": "가져오기 선언의 모든 가져오기가 사용되지 않습니다.", - "All_type_parameters_are_unused_6205": "모든 형식 매개 변수가 사용되지 않습니다.", - "All_variables_are_unused_6199": "모든 변수가 사용되지 않습니다.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript 파일이 프로그램의 일부가 되도록 허용합니다. 이러한 파일에서 오류를 가져오려면 'checkJs' 옵션을 사용하세요.", - "Allow_accessing_UMD_globals_from_modules_6602": "모듈에서 UMD 전역에 대한 액세스를 허용합니다.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 여기서는 코드 내보내기에는 영향을 주지 않고 형식 검사만 합니다.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "모듈에 기본 내보내기가 없을 때 'y에서 x 가져오기'를 허용합니다.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib에서 도우미 함수를 파일별로 포함하는 대신 프로젝트당 한 번씩 가져오도록 허용합니다.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "가져오기에서 TypeScript 파일 확장자를 포함하도록 허용합니다. '--moduleResolution bundler'와 '--noEmit' 또는 '--emitDeclarationOnly'를 설정해야 합니다.", - "Allow_javascript_files_to_be_compiled_6102": "Javascript 파일을 컴파일하도록 허용합니다.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "모듈을 확인할 때 여러 폴더가 하나로 처리되도록 허용합니다.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "이미 포함된 '{0}' 파일 이름은 '{1}' 파일 이름과 대/소문자만 다릅니다.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "앰비언트 모듈 선언은 상대적 모듈 이름을 지정할 수 없습니다.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "앰비언트 모듈은 다른 모듈 또는 네임스페이스에 중첩될 수 없습니다.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 모듈에는 여러 이름이 할당될 수 없습니다.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "추상 접근자는 구현이 있을 수 없습니다.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "접근성 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.", - "An_accessor_cannot_have_type_parameters_1094": "접근자에는 형식 매개 변수를 사용할 수 없습니다.", - "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' 속성은 선택 사항으로 선언할 수 없습니다.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "앰비언트 모듈 선언은 파일의 최상위에서만 사용할 수 있습니다.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "'{0}'의 인수가 제공되지 않았습니다.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "이 바인딩 패턴과 일치하는 인수가 제공되지 않았습니다.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "산술 피연산자는 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "화살표 함수에는 'this' 매개 변수를 사용할 수 없습니다.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "비동기 함수 또는 메서드는 'Promise'를 반환해야 합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", - "An_async_iterator_must_have_a_next_method_2519": "비동기 반복기에는 'next()' 메서드가 있어야 합니다.", - "An_element_access_expression_should_take_an_argument_1011": "요소 액세스 식은 인수를 사용해야 합니다.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "프라이빗 식별자를 사용하여 열거형 멤버 이름을 지정할 수 없습니다.", - "An_enum_member_cannot_have_a_numeric_name_2452": "열거형 멤버는 숫자 이름을 가질 수 없습니다.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "열거형 멤버 이름 뒤에는 ',', '=' 또는 '}'가 와야 합니다.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "가능한 모든 컴파일러 옵션을 보여 주는 이 정보의 확장된 버전", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "내보내기 할당은 다른 내보낸 요소가 있는 모듈에서 사용될 수 없습니다.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "내보내기 할당은 네임스페이스에서 사용될 수 없습니다.", - "An_export_assignment_cannot_have_modifiers_1120": "내보내기 할당에는 한정자를 사용할 수 없습니다.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "내보내기 할당은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "내보내기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "내보내기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "An_export_declaration_cannot_have_modifiers_1193": "내보내기 선언에는 한정자를 사용할 수 없습니다.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 실제 값을 참조해야 하지만 '{0}'은(는) 형식 전용 선언으로 확인됩니다.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax'가 사용하도록 설정되어 있지만 '{0}'이(가) 형식 전용 선언으로 확인되는 경우 'export default'는 실제 값을 참조해야 합니다.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax'가 사용하도록 설정된 경우 'export default'는 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 형식 식의 truthiness를 테스트할 수 없습니다.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "확장된 유니코드 이스케이프 값은 0x0과 0x10FFFF(포함) 사이여야 합니다.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "식별자 또는 키워드는 숫자 리터럴 바로 뒤에 올 수 없습니다.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "앰비언트 컨텍스트에서는 구현을 선언할 수 없습니다.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "가져오기 별칭은 '내보내기 형식'을 사용하여 내보낸 선언을 참조할 수 없습니다.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "가져오기 별칭은 '가져오기 형식'을 사용하여 가져온 선언을 참조할 수 없습니다.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 가져오기 별칭을 형식 또는 형식 전용 선언으로 확인할 수 없습니다.", - "An_import_alias_cannot_use_import_type_1392": "가져오기 별칭은 'import type'을 사용할 수 없습니다.", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "가져오기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "가져오기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "An_import_declaration_cannot_have_modifiers_1191": "가져오기 선언에는 한정자를 사용할 수 없습니다.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "가져오기 경로는 'allowImportingTsExtensions'가 사용하도록 설정된 경우에만 '{0}' 확장으로 끝날 수 있습니다.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "인덱스 시그니처에는 rest 매개 변수를 사용할 수 없습니다.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "인덱스 시그니처에는 후행 쉼표를 사용할 수 없습니다.", - "An_index_signature_must_have_a_type_annotation_1021": "인덱스 시그니처에는 형식 주석을 사용할 수 없습니다.", - "An_index_signature_must_have_exactly_one_parameter_1096": "인덱스 시그니처에는 한 개의 매개 변수만 사용할 수 있습니다.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "인덱스 시그니처 매개 변수에는 물음표를 사용할 수 없습니다.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "인덱스 시그니처 매개 변수에는 액세스 가능성 한정자를 사용할 수 없습니다.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "인덱스 시그니처 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "인덱스 시그니처 매개 변수에는 형식 주석을 사용할 수 없습니다.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "인덱스 시그니처 매개 변수 형식은 리터럴 유형이나 제네릭 형식일 수 없습니다. 대신 매핑된 개체 형식을 사용하세요.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "인덱스 시그니처 매개 변수 형식은 'string', 'number', 'symbol' 또는 템플릿 리터럴 형식이어야 합니다.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "인스턴스화 식 뒤에 속성 액세스가 있을 수 없습니다.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "인터페이스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 확장할 수 있습니다.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "인터페이스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 확장할 수 있습니다.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "인터페이스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 다른 명명된 개체 형식만 확장할 수 있습니다.", - "An_interface_property_cannot_have_an_initializer_1246": "인터페이스 속성에는 이니셜라이저를 사용할 수 없습니다.", - "An_iterator_must_have_a_next_method_2489": "반복기에는 'next()' 메서드가 있어야 합니다.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma를 JSX 조각과 함께 사용하는 경우에는 @jsxFrag pragma가 필요합니다.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "개체 리터럴에 이름이 같은 여러 개의 get/set 접근자를 사용할 수 없습니다.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "개체 리터럴은 이름이 같은 여러 속성을 가질 수 없습니다.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "개체 리터럴에 이름이 같은 속성과 접근자를 사용할 수 없습니다.", - "An_object_member_cannot_be_declared_optional_1162": "개체 멤버는 선택적으로 선언될 수 없습니다.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "개체의 '[Symbol.hasInstance]' 메서드는 'instanceof' 식의 오른쪽에서 사용할 부울 값을 반환해야 합니다.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "선택적 체인에는 프라이빗 식별자를 사용할 수 없습니다.", - "An_optional_element_cannot_follow_a_rest_element_1266": "선택적 요소는 rest 요소 뒤에 올 수 없습니다.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this'의 외부 값은 이 컨테이너에서 섀도 처리됩니다.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "오버로드 시그니처는 생성기로 선언할 수 없습니다.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "지수 식의 왼쪽에는 '{0}' 연산자가 있는 단항 식을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.", - "Annotate_everything_with_types_from_JSDoc_95043": "JSDoc의 형식을 사용하여 모든 항목에 주석 달기", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "네임스페이스의 속성 expando 함수 형식에 주석 달기", - "Annotate_with_type_from_JSDoc_95009": "JSDoc의 형식을 사용하여 주석 추가", - "Another_export_default_is_here_2753": "다른 내보내기 기본값은 여기에 있습니다.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "단일 문자 이상과 일치할 수 있는 유니코드 속성은 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "단일 문자보다 더 일치할 수 있는 모든 항목은 부정된 문자 클래스 내에서 유효하지 않습니다.", - "Are_you_missing_a_semicolon_2734": "세미콜론이 없습니까?", - "Argument_expression_expected_1135": "인수 식이 필요합니다.", - "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 옵션의 인수는 {1}이어야(여야) 합니다.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "동적 가져오기의 인수는 spread 요소일 수 없습니다.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "'{0}' 형식의 인수는 '{1}' 형식의 매개 변수에 할당될 수 없습니다.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' 유형의 인수는 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형의 매개 변수에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "REST 매개 변수 '{0}'에 대한 인수가 제공되지 않았습니다.", - "Array_element_destructuring_pattern_expected_1181": "배열 요소 구조 파괴 패턴이 필요합니다.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "분산 요소가 있는 배열은 --isolatedDeclarations로 유추할 수 없습니다.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "어설션에서 호출 대상의 모든 이름은 명시적 형식 주석을 사용하여 선언해야 합니다.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "어설션에서 호출 대상은 식별자 또는 정규화된 이름이어야 합니다.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "함수를 선언하지 않고 함수에 속성을 할당하는 것은 --isolatedDeclarations에서 지원되지 않습니다. 이 함수에 할당된 속성에 대한 명시적 선언을 추가합니다.", - "Asterisk_Slash_expected_1010": "'*/'가 필요합니다.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "하나 이상의 접근자에 --isolatedDeclarations를 사용하는 명시적 형식 주석이 있어야 합니다.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "전역 범위에 대한 확대는 외부 모듈 또는 앰비언트 모듈 선언에만 직접 중첩될 수 있습니다.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "전역 범위에 대한 확대는 이미 존재하는 앰비언트 컨텍스트에 표시되지 않는 한 'declare' 한정자를 포함해야 합니다.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "프로젝트 '{0}'에서 입력에 대한 자동 검색을 사용하도록 설정되었습니다. '{2}' 캐시 위치를 사용하여 모듈 '{1}'에 대해 추가 해결 패스를 실행합니다.", - "BUILD_OPTIONS_6919": "빌드 옵션", - "Backwards_Compatibility_6253": "이전 버전과의 호환성", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "기본 클래스 식에서 클래스 형식 매개 변수를 참조할 수 없습니다.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "기본 생성자 반환 형식 '{0}'은(는) 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합이 아닙니다.", - "Base_constructors_must_all_have_the_same_return_type_2510": "기본 생성자는 모두 반환 형식이 같아야 합니다.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "비추상 모듈 이름을 확인할 기본 디렉터리입니다.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020 미만을 대상으로 할 경우 bigint 리터럴을 사용할 수 없습니다.", - "Binary_digit_expected_1177": "이진수가 있어야 합니다.", - "Binding_element_0_implicitly_has_an_1_type_7031": "바인딩 요소 '{0}'에 암시적으로 '{1}' 형식이 있습니다.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "선언 전에 사용된 블록 범위 변수 '{0}'입니다.", - "Build_a_composite_project_in_the_working_directory_6925": "작업 디렉터리에서 복합 프로젝트를 빌드합니다.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "최신으로 보이는 프로젝트를 포함하여 모든 프로젝트를 빌드합니다.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "최신 상태가 아닌 경우, 하나 이상의 프로젝트 및 해당 종속성 빌드", - "Build_option_0_requires_a_value_of_type_1_5073": "빌드 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", - "Building_project_0_6358": "'{0}' 프로젝트를 빌드하는 중...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "기본 제공 반복기는 'any' 대신 'undefined'의 'TReturn' 형식으로 인스턴스화됩니다.", - "COMMAND_LINE_FLAGS_6921": "명령줄 플래그", - "COMMON_COMMANDS_6916": "일반 명령", - "COMMON_COMPILER_OPTIONS_6920": "일반 컴파일러 옵션", - "Call_decorator_expression_90028": "데코레이터 식 호출", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "호출 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "반환 형식 주석이 없는 호출 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "인수가 없는 호출 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", - "Call_target_does_not_contain_any_signatures_2346": "호출 대상에 시그니처가 포함되어 있지 않습니다.", - "Can_only_convert_logical_AND_access_chains_95142": "논리적 AND 액세스 체인만 변환할 수 있습니다.", - "Can_only_convert_named_export_95164": "명명된 내보내기만 변환할 수 있습니다.", - "Can_only_convert_property_with_modifier_95137": "한정자만 사용하여 속성을 변환할 수 있습니다.", - "Can_only_convert_string_concatenations_and_string_literals_95154": "문자열 연결 및 문자열 리터럴만 변환할 수 있습니다.", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}'이(가) 네임스페이스가 아니라 형식이므로 '{0}.{1}'에 액세스할 수 없습니다. '{0}'에서 '{0}[\"{1}\"]'과(와) 함께 '{1}' 속성의 형식을 검색하려고 했나요?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}'을(를) 사용하도록 설정한 경우 한정 없이 다른 파일에서 '{0}'에 액세스할 수 없습니다. 대신 '{2}'을(를) 사용하세요.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}'이(가) 사용하도록 설정된 경우 앰비언트 const 열거형에 액세스할 수 없습니다.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' 생성자 형식을 '{1}' 생성자 형식에 할당할 수 없습니다.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "추상 생성자 형식을 비추상 생성자 형식에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "클래스이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "상수이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "함수이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "네임스페이스이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "읽기 전용 속성이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "열거형이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "가져오기이므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "변수가 아니므로 '{0}'에 할당할 수 없습니다.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "프라이빗 메서드 '{0}'에 할당할 수 없습니다. 프라이빗 메서드에는 쓸 수 없습니다.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' 모듈은 모듈이 아닌 엔터티로 확인되므로 확대할 수 없습니다.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "모듈이 아닌 엔터티로 확인되기 때문에 값 내보내기로 모듈 '{0}'을(를) 확대할 수 없습니다.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' 플래그가 'amd' 또는 'system'이 아닌 경우 '{0}' 옵션을 사용하여 모듈을 컴파일할 수 없습니다.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "추상 클래스의 인스턴스를 만들 수 없습니다.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 포함 생성기는 항상 '{0}'을(를) 전송하므로 값에 반복을 위임할 수 없습니다.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}'을(를) 내보낼 수 없습니다. 지역 선언만 모듈에서 내보낼 수 있습니다.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "'{0}' 클래스를 확장할 수 없습니다. 클래스 생성자가 private로 표시되어 있습니다.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "인터페이스 '{0}'을(를) 확장할 수 없습니다. 'implements'를 확장하시겠습니까?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "현재 디렉터리에서 tsconfig.json 파일을 찾을 수 없습니다. {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "지정된 디렉터리에서 tsconfig.json 파일을 찾을 수 없습니다. '{0}'.", - "Cannot_find_global_type_0_2318": "전역 형식 '{0}'을(를) 찾을 수 없습니다.", - "Cannot_find_global_value_0_2468": "전역 값 '{0}'을(를) 찾을 수 없습니다.", - "Cannot_find_lib_definition_for_0_2726": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다. '{1}'이(가) 아닌지 확인하세요.", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' 모듈을 찾을 수 없습니다. '--resolveJsonModule'을 사용하여 '. json' 확장명이 포함된 모듈을 가져오는 것이 좋습니다.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' 모듈을 찾을 수 없습니다. 'moduleResolution' 옵션을 'nodenext'로 설정하거나 'paths' 옵션에 별칭을 추가하려고 하셨나요?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' 모듈 또는 해당 형식 선언을 찾을 수 없습니다.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' 부수 효과 가져오기에 대한 모듈 또는 형식 선언을 찾을 수 없습니다.", - "Cannot_find_name_0_2304": "'{0}' 이름을 찾을 수 없습니다.", - "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' 이름을 찾을 수 없습니다. 인스턴스 멤버 'this.{0}'을(를) 사용하시겠습니까?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' 이름을 찾을 수 없습니다. 정적 멤버 '{1}.{0}'을(를) 사용하시겠습니까?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "이름 '{0}' 찾을 수 없습니다. 비동기 함수에 쓰려고 했나요?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 '{1}' 이상으로 변경해 보세요.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'dom'을 포함하도록 'lib' 컴파일러 옵션을 변경해 보세요.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 사용해 보세요.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 시도한 다음 tsconfig의 형식 필드에 'bun'을 추가합니다.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도합니다.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도한 다음, tsconfig의 형식 필드에 'jest' 또는 'mocha'를 추가하세요.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도합니다.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도한 다음, tsconfig의 형식 필드에 'jquery'를 추가하세요.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도합니다.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도한 다음, tsconfig의 형식 필드에 'node'를 추가하세요.", - "Cannot_find_namespace_0_2503": "'{0}' 네임스페이스를 찾을 수 없습니다.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "네임스페이스 '{0}'을(를) 찾을 수 없습니다. '{1}'을(를) 의미했나요?", - "Cannot_find_parameter_0_1225": "'{0}' 매개 변수를 찾을 수 없습니다.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "입력 파일의 공용 하위 디렉터리 경로를 찾을 수 없습니다.", - "Cannot_find_type_definition_file_for_0_2688": "'{0}'에 대한 형식 정의 파일을 찾을 수 없습니다.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "형식 선언 파일을 가져올 수 없습니다. '{1}' 대신 '{0}'을(를) 가져오세요.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "블록 범위 선언 '{1}'과(와) 동일한 범위 내에서 외부 범위 변수 '{0}'을(를) 초기화할 수 없습니다.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "'null'일 수 있는 개체를 호출할 수 없습니다.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "'null'이거나 '정의되지 않음'일 수 있는 개체를 호출할 수 없습니다.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "'정의되지 않음'일 수 있는 개체를 호출할 수 없습니다.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 구조 파괴는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 spread는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 for-of는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", - "Cannot_move_statements_to_the_selected_file_95183": "문을 선택한 파일로 이동할 수 없습니다.", - "Cannot_move_to_file_selected_file_is_invalid_95179": "파일로 이동할 수 없습니다. 선택한 파일이 유효하지 않습니다.", - "Cannot_read_file_0_5083": "'{0}' 파일을 읽을 수 없습니다.", - "Cannot_read_file_0_Colon_1_5012": "파일 '{0}'을(를) 읽을 수 없습니다. {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "블록 범위 변수 '{0}'을(를) 다시 선언할 수 없습니다.", - "Cannot_redeclare_exported_variable_0_2323": "내보낸 변수 '{0}'을(를) 다시 선언할 수 없습니다.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 절에서 식별자 '{0}'을(를) 다시 선언할 수 없습니다.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "형식 주석에서 함수 호출을 시작할 수 없습니다.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' 플래그를 제공하지 않으면 JSX를 사용할 수 없습니다.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}'을(를) 사용하도록 설정한 경우 형식 또는 형식 전용 네임스페이스에서 'export import'를 사용할 수 없습니다.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module'이 'none'인 경우 가져오기, 내보내기 또는 모듈 확대를 사용할 수 없습니다.", - "Cannot_use_namespace_0_as_a_type_2709": "'{0}' 네임스페이스를 형식으로 사용할 수 없습니다.", - "Cannot_use_namespace_0_as_a_value_2708": "'{0}' 네임스페이스를 값으로 사용할 수 없습니다.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "데코레이팅된 클래스의 정적 속성 이니셜라이저에서는 'this'를 사용할 수 없습니다.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "참조된 프로젝트 '{1}'에서 생성된 '.tsbuildinfo' 파일을 덮어쓰므로 '{0}' 파일을 쓸 수 없습니다.", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "'{0}' 파일은 여러 입력 파일로 덮어쓰이므로 쓸 수 없습니다.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "'{0}' 파일은 입력 파일을 덮어쓰므로 쓸 수 없습니다.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 절 변수에 이니셜라이저를 사용할 수 없습니다.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "지정한 경우 catch 절 변수 형식 주석은 'any' 또는 'unknown'이어야 합니다.", - "Change_0_to_1_90014": "'{0}'을(를) '{1}'(으)로 변경", - "Change_all_extended_interfaces_to_implements_95038": "확장된 모든 인터페이스를 'implements'로 변경", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "모든 jsdoc-style 형식을 TypeScript로 변경", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "모든 jsdoc-style 형식을 TypeScript로 변경(그리고 nullable 형식에 '| undefined' 추가)", - "Change_extends_to_implements_90003": "'extends'를 'implements'로 변경", - "Change_spelling_to_0_90022": "맞춤법을 '{0}'(으)로 변경", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "선언되었지만 생성자에 설정되지 않은 클래스 속성을 확인합니다.", - "Check_side_effect_imports_6806": "부작용 가져오기를 확인합니다.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' 및 'apply' 메서드에 대한 인수가 원래 함수와 일치하는지 확인하세요.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}'이(가) '{1}' - '{2}'에 대해 일치하는 가장 긴 접두사인지 확인하는 중입니다.", - "Circular_definition_of_import_alias_0_2303": "가져오기 별칭 '{0}'의 순환 정의입니다.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "구성을 확인하는 동안 순환이 검색되었습니다. {0}", - "Circularity_originates_in_type_at_this_location_2751": "순환이 이 위치의 형식에서 시작됩니다.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "'{0}' 클래스는 인스턴스 멤버 접근자 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 접근자를 인스턴스 멤버 함수로 정의합니다.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "'{0}' 클래스가 인스턴스 멤버 함수 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 함수를 인스턴스 멤버 접근자로 정의합니다.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "'{0}' 클래스가 인스턴스 멤버 속성 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 속성을 인스턴스 멤버 함수로 정의합니다.", - "Class_0_incorrectly_extends_base_class_1_2415": "'{0}' 클래스가 기본 클래스 '{1}'을(를) 잘못 확장합니다.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' 클래스가 '{1}' 클래스를 잘못 구현합니다. '{1}'을(를) 확장하고 이 클래스의 멤버를 하위 클래스로 상속하시겠습니까?", - "Class_0_incorrectly_implements_interface_1_2420": "'{0}' 클래스가 '{1}' 인터페이스를 잘못 구현합니다.", - "Class_0_used_before_its_declaration_2449": "선언 전에 사용된 '{0}' 클래스입니다.", - "Class_constructor_may_not_be_a_generator_1368": "클래스 생성자는 생성기가 아닐 수 있습니다.", - "Class_constructor_may_not_be_an_accessor_1341": "클래스 생성자는 접근자가 아닐 수 있습니다.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "클래스 선언에서 '{0}'에 대한 오버로드 목록을 구현할 수 없습니다.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 '@extends' 태그를 둘 이상 가질 수 없습니다.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "클래스 데코레이터는 정적 프라이빗 식별자와 함께 사용할 수 없습니다. 실험적 데코레이터를 제거하는 것이 좋습니다.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "부모 클래스에서 정의한 '{0}' 클래스 필드는 super를 통해 자식 클래스에서 액세스할 수 없습니다.", - "Class_name_cannot_be_0_2414": "클래스 이름은 '{0}'일 수 없습니다.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "{0} 모듈을 사용하는 ES5를 대상으로 하는 경우 클래스 이름은 'Object'일 수 없습니다.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "클래스 정적 측면 '{0}'이(가) 기본 클래스 정적 측면 '{1}'을(를) 잘못 확장합니다.", - "Classes_can_only_extend_a_single_class_1174": "클래스는 단일 클래스만 확장할 수 있습니다.", - "Classes_may_not_have_a_field_named_constructor_18006": "클래스에는 'constructor' 필드를 사용할 수 없습니다.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "클래스에 포함된 코드는 '{0}'의 사용을 허용하지 않는 JavaScript의 strict 모드로 평가됩니다. 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode를 참조하세요.", - "Command_line_Options_6171": "명령줄 옵션", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "구성 파일에 대한 경로 또는 'tsconfig.json'이 포함된 폴더에 대한 경로를 고려하여 프로젝트를 컴파일합니다.", - "Compiler_Diagnostics_6251": "컴파일러 진단", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' 컴파일러 옵션에는 빈 문자열을 지정할 수 없습니다.", - "Compiler_option_0_expects_an_argument_6044": "컴파일러 옵션 '{0}'에는 인수가 필요합니다.", - "Compiler_option_0_may_not_be_used_with_build_5094": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서 사용되지 않을 수 있습니다.", - "Compiler_option_0_may_only_be_used_with_build_5093": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서만 사용할 수 있습니다.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "값 '{1}'의 컴파일러 옵션 '{0}'이(가) 불안정합니다. 야간 TypeScript를 사용하여 이 오류를 차단하세요. 'npm install -D typescript@next'로 업데이트해 보세요.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "컴파일러 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "컴파일러는 프라이빗 식별자 하위 수준을 내보낼 때 '{0}' 이름을 예약합니다.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "지정된 경로에 있는 TypeScript 프로젝트를 컴파일합니다.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "현재 프로젝트(작업 디렉터리의 tsconfig.json)를 컴파일합니다.", - "Compiles_the_current_project_with_additional_settings_6929": "추가 설정을 사용하여 현재 프로젝트를 컴파일합니다.", - "Completeness_6257": "완성도", - "Composite_projects_may_not_disable_declaration_emit_6304": "복합 프로젝트는 선언 내보내기를 비활성화할 수 없습니다.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "복합 프로젝트는 증분 컴파일을 비활성화할 수 없습니다.", - "Computed_from_the_list_of_input_files_6911": "입력 파일 목록에서 컴퓨팅됨", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "계산된 속성은 --isolatedDeclarations가 있는 숫자 또는 문자열 리터럴, 변수 또는 점선 식이어야 합니다.", - "Computed_property_names_are_not_allowed_in_enums_1164": "컴퓨팅된 속성 이름은 열거형에 사용할 수 없습니다.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "클래스 또는 개체 리터럴의 계산된 속성 이름은 --isolatedDeclarations로 유추할 수 없습니다.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "계산된 값은 문자열 값 멤버가 포함된 열거형에서 허용되지 않습니다.", - "Concatenate_and_emit_output_to_single_file_6001": "출력을 연결하고 단일 파일로 내보냅니다.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "가져오기를 확인할 때 확인자별 기본값 외에 설정할 조건입니다.", - "Conflicts_are_in_this_file_6201": "이 파일에 충돌이 있습니다.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "이 클래스에 'declare' 한정자를 추가하는 것이 좋습니다.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "구문 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "반환 형식 주석이 없는 구문 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "인수가 없는 구문 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", - "Constructor_implementation_is_missing_2390": "생성자 구현이 없습니다.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "'{0}' 클래스의 생성자는 private이며 클래스 선언 내에서만 액세스할 수 있습니다.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' 클래스의 생성자는 protected이며 클래스 선언 내에서만 액세스할 수 있습니다.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "공용 구조체 형식에 사용되는 경우 생성자 형식 표기법을 괄호로 묶어야 합니다.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "교집합 형식에 사용되는 경우 생성자 형식 표기법을 괄호로 묶어야 합니다.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "파생 클래스의 생성자는 'super' 호출을 포함해야 합니다.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "포함 파일이 지정되지 않았고 루트 디렉터리를 확인할 수 없어 'node_modules' 폴더 조회를 건너뜁니다.", - "Containing_function_is_not_an_arrow_function_95128": "포함 함수가 화살표 함수가 아닙니다.", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "모듈 형식의 JS 파일을 감지하는 데 사용되는 방법을 제어합니다.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "'{0}' 형식을 '{1}' 형식으로 변환한 작업은 실수일 수 있습니다. 두 형식이 서로 충분히 겹치지 않기 때문입니다. 의도적으로 변환한 경우에는 먼저 'unknown'으로 식을 변환합니다.", - "Convert_0_to_1_in_0_95003": "'{0}'을(를) '{0}의 {1}'(으)로 변환", - "Convert_0_to_mapped_object_type_95055": "'{0}'을(를) 매핑된 개체 형식으로 변환", - "Convert_all_const_to_let_95102": "모든 'const'를 'let'으로 변환", - "Convert_all_constructor_functions_to_classes_95045": "모든 생성자 함수를 클래스로 변환", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "모든 잘못된 문자를 HTML 엔터티 코드로 변환", - "Convert_all_re_exported_types_to_type_only_exports_1365": "다시 내보낸 모든 형식을 형식 전용 내보내기로 변환", - "Convert_all_require_to_import_95048": "모든 'require'를 'import'로 변환", - "Convert_all_to_async_functions_95066": "모두 비동기 함수로 변환", - "Convert_all_to_bigint_numeric_literals_95092": "모두 bigint 숫자 리터럴로 변환", - "Convert_all_to_default_imports_95035": "모든 항목을 기본 가져오기로 변환", - "Convert_all_type_literals_to_mapped_type_95021": "모든 형식 리터럴을 매핑된 형식으로 변환", - "Convert_all_typedef_to_TypeScript_types_95177": "모든 typedef를 TypeScript 형식으로 변환합니다.", - "Convert_arrow_function_or_function_expression_95122": "화살표 함수 또는 함수 식 변환", - "Convert_const_to_let_95093": "'const'를 'let'으로 변환", - "Convert_default_export_to_named_export_95061": "기본 내보내기를 명명된 내보내기로 변환", - "Convert_function_declaration_0_to_arrow_function_95106": "함수 선언 '{0}'을(를) 화살표 함수로 변환", - "Convert_function_expression_0_to_arrow_function_95105": "함수 식 '{0}'을(를) 화살표 함수로 변환", - "Convert_function_to_an_ES2015_class_95001": "함수를 ES2015 클래스로 변환", - "Convert_invalid_character_to_its_html_entity_code_95100": "잘못된 문자를 html 엔터티 코드로 변환", - "Convert_named_export_to_default_export_95062": "명명된 내보내기를 기본 내보내기로 변환", - "Convert_named_imports_to_default_import_95170": "명명된 가져오기를 기본 가져오기로 변환", - "Convert_named_imports_to_namespace_import_95057": "명명된 가져오기를 네임스페이스 가져오기로 변환", - "Convert_namespace_import_to_named_imports_95056": "네임스페이스 가져오기를 명명된 가져오기로 변환", - "Convert_overload_list_to_single_signature_95118": "오버로드 목록을 단일 시그니처로 변환", - "Convert_parameters_to_destructured_object_95075": "매개 변수를 구조 파괴 개체로 변환", - "Convert_require_to_import_95047": "'require'를 'import'로 변환", - "Convert_to_ES_module_95017": "ES 모듈로 변환", - "Convert_to_a_bigint_numeric_literal_95091": "bigint 숫자 리터럴로 변환", - "Convert_to_anonymous_function_95123": "익명 함수로 변환", - "Convert_to_arrow_function_95125": "화살표 함수로 변환", - "Convert_to_async_function_95065": "비동기 함수로 변환", - "Convert_to_default_import_95013": "기본 가져오기로 변환", - "Convert_to_named_function_95124": "명명된 함수로 변환", - "Convert_to_optional_chain_expression_95139": "선택적 체인 식으로 변환합니다.", - "Convert_to_template_string_95096": "템플릿 문자열로 변환", - "Convert_to_type_only_export_1364": "형식 전용 내보내기로 변환", - "Convert_typedef_to_TypeScript_type_95176": "typedef를 TypeScript 형식으로 변환합니다.", - "Corrupted_locale_file_0_6051": "로캘 파일 {0}이(가) 손상되었습니다.", - "Could_not_convert_to_anonymous_function_95153": "익명 함수로 변환할 수 없습니다.", - "Could_not_convert_to_arrow_function_95151": "화살표 함수로 변환할 수 없습니다.", - "Could_not_convert_to_named_function_95152": "명명된 함수로 변환할 수 없습니다.", - "Could_not_determine_function_return_type_95150": "함수 반환 형식을 확인할 수 없습니다.", - "Could_not_find_a_containing_arrow_function_95127": "포함하는 화살표 함수를 찾을 수 없습니다.", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "모듈 '{0}'에 대한 선언 파일을 찾을 수 없습니다. '{1}'에는 암시적으로 'any' 형식이 포함됩니다.", - "Could_not_find_convertible_access_expression_95140": "변환 가능한 액세스 식을 찾을 수 없습니다.", - "Could_not_find_export_statement_95129": "export 문을 찾을 수 없습니다.", - "Could_not_find_import_clause_95131": "import 절을 찾을 수 없습니다.", - "Could_not_find_matching_access_expressions_95141": "일치하는 액세스 식을 찾을 수 없습니다.", - "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", - "Could_not_find_namespace_import_or_named_imports_95132": "네임스페이스 가져오기 또는 명명된 가져오기를 찾을 수 없습니다.", - "Could_not_find_property_for_which_to_generate_accessor_95135": "접근자를 생성할 속성을 찾을 수 없습니다.", - "Could_not_find_variable_to_inline_95185": "인라인할 변수를 찾을 수 없습니다.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "{1} 확장이 포함된 '{0}' 경로를 확인할 수 없습니다.", - "Could_not_write_file_0_Colon_1_5033": "'{0}' 파일을 쓸 수 없습니다. '{1}'.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "내보낸 JavaScript 파일의 소스 맵 파일을 만듭니다.", - "Create_sourcemaps_for_d_ts_files_6614": "d.ts 파일의 sourcemap을 만듭니다.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "작업 디렉터리에 권장되는 설정을 사용하여 tsconfig.json을 만듭니다.", - "DIRECTORY_6038": "디렉터리", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "문자 클래스에서는 10진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "앞에 0이 있는 10진수는 허용되지 않습니다.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "선언이 다른 파일의 선언을 확대합니다. 이 작업은 직렬화할 수 없습니다.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "이 파일에 대한 선언 내보내기에서는 확대를 위해 이 가져오기를 유지해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "이 파일의 선언 내보내기에는 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "이 파일의 선언 내보내기에는 '{1}' 모듈의 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "이 매개 변수에 대한 선언 내보내기를 사용하려면 정의되지 않은 형식을 암시적으로 추가해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", - "Declaration_expected_1146": "선언이 필요합니다.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "선언 이름이 기본 제공 전역 ID '{0}'과(와) 충돌합니다.", - "Declaration_or_statement_expected_1128": "선언 또는 문이 필요합니다.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "선언 또는 문이 필요합니다. 이 '='은 문 블록을 따르므로 구조 파괴 할당을 작성하려는 경우 전체 할당을 괄호로 묶어야 할 수 있습니다.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "한정된 할당 어설션이 포함된 선언에는 형식 주석도 있어야 합니다.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "이니셜라이저가 포함된 선언에는 한정적 할당 어설션을 사용할 수 없습니다.", - "Declare_a_private_field_named_0_90053": "'{0}'(이)라는 프라이빗 필드를 선언합니다.", - "Declare_method_0_90023": "'{0}' 메서드 선언", - "Declare_private_method_0_90038": "프라이빗 메서드 '{0}' 선언", - "Declare_private_property_0_90035": "'{0}' 프라이빗 속성 선언", - "Declare_property_0_90016": "'{0}' 속성 선언", - "Declare_static_method_0_90024": "'{0}' 정적 메서드 선언", - "Declare_static_property_0_90027": "'{0}' 정적 속성 선언", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "데코레이터 함수 반환 유형 '{0}'은(는) '{1}' 유형에 할당할 수 없습니다.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "데코레이터 함수 반환 유형은 '{0}'이지만 'void' 또는 'any'여야 합니다.", - "Decorator_used_before_export_here_1486": "여기에서 'export' 앞에 데코레이터를 사용했습니다.", - "Decorators_are_not_valid_here_1206": "데코레이터는 여기에 사용할 수 없습니다.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "동일한 이름의 여러 get/set 접근자에 데코레이터를 적용할 수 없습니다.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "'export' 앞에도 데코레이터가 나타나면 'export' 또는 'export default' 뒤에 나타나지 않을 수 있습니다.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "데코레이터는 속성 선언의 이름 및 모든 키워드 앞에 와야 합니다.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "기본 catch 절 변수는 'any' 대신 'unknown'입니다.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "모듈의 기본 내보내기에서 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "기본 내보내기는 --isolatedDeclarations로 유추할 수 없습니다.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "지연된 가져오기에서는 기본 가져오기를 사용할 수 없습니다.", - "Default_library_1424": "기본 라이브러리", - "Default_library_for_target_0_1425": "대상 '{0}'의 기본 라이브러리", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "지연된 가져오기는 '--module' 플래그가 'esnext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "{0} 식별자의 정의가 다른 파일의 정의와 충돌합니다.", - "Delete_all_unused_declarations_95024": "사용하지 않는 선언 모두 삭제", - "Delete_all_unused_imports_95147": "사용하지 않는 가져오기 모두 삭제", - "Delete_all_unused_param_tags_95172": "사용하지 않은 '@param' 태그 모두 삭제", - "Delete_the_outputs_of_all_projects_6365": "모든 프로젝트의 출력을 삭제합니다.", - "Delete_unused_param_tag_0_95171": "사용하지 않는 '@param' 태그 '{0}' 삭제", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[사용되지 않음] 대신 '--jsxFactory'를 사용합니다. 'react' JSX 내보내기를 대상으로 할 경우 createElement에 대해 호출되는 개체를 지정합니다.", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[사용되지 않음] 대신 '--outFile'을 사용합니다. 출력을 연결하고 단일 파일로 내보냅니다.", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[사용되지 않음] 대신 '--skipLibCheck'를 사용합니다. 기본 라이브러리 선언 파일의 형식 검사를 건너뜁니다.", - "Deprecated_setting_Use_outFile_instead_6677": "더 이상 사용되지 않는 설정입니다. 대신 'outFile'을 사용하세요.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "'await' 사용을 잊으셨습니까?", - "Did_you_mean_0_1369": "'{0}'을(를) 사용하시겠습니까?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}'을(를) 'new (...args: any[]) => {1}' 형식으로 제한하시겠습니까?", - "Did_you_mean_to_call_this_expression_6212": "이 식을 호출하시겠습니까?", - "Did_you_mean_to_mark_this_function_as_async_1356": "이 함수를 'async'로 표시하시겠습니까?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':'을 사용하려고 하셨습니까? '='은 포함하는 개체 리터럴이 구조 파괴 패턴에 속하는 경우에만 속성 이름 뒤에 올 수 있습니다.", - "Did_you_mean_to_use_new_with_this_expression_6213": "이 식에서 'new'를 사용하시겠습니까?", - "Digit_expected_1124": "숫자가 필요합니다.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' 디렉터리가 없으므로 이 디렉터리에서 모든 조회를 건너뜁니다.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "디렉터리 '{0}'에는 포함하는 package.json 범위가 없습니다. 가져오기가 확인되지 않습니다.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "내보낸 JavaScript 파일에서 'use strict' 지시문을 추가하지 않도록 설정합니다.", - "Disable_checking_for_this_file_90018": "이 파일 확인을 사용하지 않도록 설정", - "Disable_emitting_comments_6688": "주석 내보내기 사용 안 함", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc 주석에 '@internal'이 있는 선언을 내보내는 것을 비활성화합니다.", - "Disable_emitting_files_from_a_compilation_6660": "컴파일에서 파일을 내보내지 않도록 설정합니다.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "형식 검사 오류가 보고되면 파일을 내보내지 않도록 설정합니다.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "생성된 코드에서 'const enum' 선언 지우기를 비활성화합니다.", - "Disable_error_reporting_for_unreachable_code_6603": "연결할 수 없는 코드에 대한 오류 보고를 사용하지 않습니다.", - "Disable_error_reporting_for_unused_labels_6604": "사용하지 않은 레이블에 대한 오류 보고를 사용하지 않습니다.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "전체 형식 검사를 사용하지 않도록 설정합니다(중요한 구문 분석 및 내보내기 오류만 보고됨).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "컴파일된 출력에서 ​​'__extents'와 같은 사용자 지정 도우미 함수 생성을 비활성화합니다.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "기본 lib.d.ts를 비롯하여 모든 라이브러리 파일을 포함하지 않도록 설정합니다.", - "Disable_loading_referenced_projects_6235": "참조된 프로젝트 로드를 사용하지 않습니다.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "복합 프로젝트를 참조할 때 선언 파일 대신 선호하는 소스 파일을 비활성화합니다.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "개체 리터럴을 만드는 동안에는 초과 속성 오류에 대한 보고를 사용하지 않습니다.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "실제 경로의 symlink를 확인하지 않도록 설정합니다. 이는 노드의 동일한 플래그와 상관 관계가 있습니다.", - "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript 프로젝트에 대한 크기 제한을 사용하지 않도록 설정합니다.", - "Disable_solution_searching_for_this_project_6224": "이 프로젝트를 검색하는 솔루션을 사용하지 않도록 설정합니다.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "함수 형식의 제네릭 시그니처에 대한 엄격한 검사를 사용하지 않도록 설정합니다.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript 프로젝트의 형식 인식을 사용하지 않습니다.", - "Disable_truncating_types_in_error_messages_6663": "오류 메시지에서 잘림 유형을 사용하지 않도록 설정합니다.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "참조된 프로젝트의 선언 파일 대신 소스 파일을 사용하지 않도록 설정합니다.", - "Disable_wiping_the_console_in_watch_mode_6684": "시계 모드에서 콘솔 초기화를 비활성화합니다.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "프로젝트에서 파일 이름을 확인하여 형식 인식에 대한 유추를 사용하지 않습니다.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "TypeScript가 프로젝트에 추가해야 하는 파일 수를 확장하는 '가져오기', '요구' 또는 ''를 허용하지 않습니다.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "동일한 파일에 대해 대/소문자를 일관되지 않게 사용한 참조를 허용하지 않습니다.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "컴파일된 파일 목록에 삼중 슬래시 참조 또는 가져온 모듈을 추가하지 않습니다.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript의 일부가 아닌 런타임 구문을 허용하지 않습니다.", - "Do_not_emit_comments_to_output_6009": "주석을 출력에 내보내지 마세요.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' 주석이 있는 코드에 대한 선언을 내보내지 마세요.", - "Do_not_emit_outputs_6010": "출력을 내보내지 않습니다.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "오류가 보고되면 출력을 내보내지 않습니다.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "'use strict' 지시문을 모듈 출력에 내보내지 마세요.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "생성된 코드에서 const 열거형 선언을 지우지 마세요.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "컴파일된 출력에서 '__extends'와 같은 사용자 지정 도우미 함수를 생성하지 않습니다.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "기본 라이브러리 파일(lib.d.ts)을 포함하지 않습니다.", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "접근할 수 없는 코드에 대한 오류를 보고하지 않습니다.", - "Do_not_report_errors_on_unused_labels_6074": "사용되지 않는 레이블에 대한 오류를 보고하지 않습니다.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink의 실제 경로를 확인하지 마세요.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' 설정에 따라 출력 파일의 형식으로 작성되도록 형식 전용으로 표시되지 않은 가져오기 또는 내보내기를 변환하거나 생략하지 마세요.", - "Do_not_truncate_error_messages_6165": "오류 메시지를 자르지 않습니다.", - "Duplicate_function_implementation_2393": "중복된 함수 구현입니다.", - "Duplicate_identifier_0_2300": "'{0}' 식별자가 중복되었습니다.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "'{0}' 식별자가 중복되었습니다. 컴파일러는 모듈의 최상위 범위에 이름 '{1}'을(를) 예약합니다.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' 식별자가 중복되었습니다. 컴파일러는 비동기 함수를 포함하는 모듈의 최상위 범위에 '{1}' 이름을 예약합니다.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "중복 식별자 '{0}'입니다. 컴파일러는 정적 이니셜라이저에서 'super' 참조를 내보낸 경우 '{1}' 이름을 예약합니다.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "중복 식별자 '{0}'입니다. 컴파일러는 '{1}' 선언을 사용하여 비동기 함수를 지원합니다.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "'{0}' 식별자가 중복되었습니다. 정적 요소와 인스턴스 요소는 같은 프라이빗 이름을 공유할 수 없습니다.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "중복 식별자 'arguments'입니다. 컴파일러는 'arguments'를 사용해서 rest 매개 변수를 초기화합니다.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "'_newTarget' 식별자가 중복되었습니다. 컴파일러는 변수 선언 '_newTarget'을 사용하여 'new.target' 메타 속성 참조를 캡처합니다.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "중복 식별자 '_this'입니다. 컴파일러는 변수 선언 '_this'를 사용해서 'this' 참조를 캡처합니다.", - "Duplicate_index_signature_for_type_0_2374": "'{0}' 형식에 대한 인덱스 시그니처가 중복되었습니다.", - "Duplicate_label_0_1114": "중복된 레이블 '{0}'입니다.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "중복 속성 '{0}'입니다.", - "Duplicate_regular_expression_flag_1500": "중복된 정규식 플래그입니다.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "동적 가져오기의 지정자는 'string' 형식이어야 하지만 여기에서 형식은 '{0}'입니다.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "동적 가져오기는 '--module' 플래그가 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20' 또는 'nodenext'로 설정된 경우에만 지원됩니다.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "동적 가져오기는 모듈 지정자와 선택적 특성 집합만 인수로 허용할 수 있습니다.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "동적 가져오기는 '--module' 옵션이 'esnext', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 두 번째 인수를 지원합니다.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript 가져오기 및 내보내기를 'verbatimModuleSyntax' 아래의 CommonJS 파일에 쓸 수 없습니다.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript 가져오기 및 내보내기를 'verbatimModuleSyntax' 아래의 CommonJS 파일에 쓸 수 없습니다. 가장 가까운 'package.json'에서 'type' 필드를 조정하여 이 파일을 ECMAScript 모듈로 만들거나 TypeScript에서 'verbatimModuleSyntax', 'module' 및 'moduleResolution' 설정을 조정합니다.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module'이 'preserve'로 설정된 경우 CommonJS 모듈에서는 ECMAScript 모듈 구문을 사용할 수 없습니다.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}'의 각 선언 값이 다릅니다. 여기서 '{2}'이(가) 필요한데 '{3}'이(가) 제공되었습니다.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "공용 구조체 형식 '{0}'의 각 멤버에 구문 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "공용 구조체 형식 '{0}'의 각 멤버에 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", - "Editor_Support_6249": "편집기 지원", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' 형식의 식을 '{1}' 인덱스 형식에 사용할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "인덱스 식이 'number' 형식이 아니므로 요소에 암시적으로 'any' 형식이 있습니다.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다. '{1}'을(를) 호출하시겠습니까?", - "Emit_6246": "방출", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 표준 규격 클래스 필드를 내보냅니다.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "출력 파일의 시작에서 UTF-8 BOM(바이트 순서 표시)을 내보냅니다.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "별도의 파일을 사용하는 대신 소스 맵과 함께 단일 파일을 내보냅니다.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "디버깅을 위해 실행된 컴파일러의 v8 CPU 프로필을 내보냅니다.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS 모듈 가져오기 지원을 쉽게 하기 위해 추가 JavaScript를 내보냅니다. 이것은 유형 호환성을 위해 'allowSyntheticDefaultImports'를 활성화합니다.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Set 대신 Define을 사용하여 클래스 필드를 내보냅니다.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "소스 파일에서 데코레이트된 선언의 디자인 형식 메타데이터를 내보냅니다.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "반복을 위해 규격에 더 맞지만 장황하고 성능이 떨어지는 JavaScript를 내보냅니다.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "단일 파일 내에서 소스 맵과 함께 소스를 내보냅니다. '--inlineSourceMap' 또는 '--sourceMap'을 설정해야 합니다.", - "Enable_all_strict_type_checking_options_6180": "엄격한 형식 검사 옵션을 모두 사용하도록 설정합니다.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "컴파일러 오류를 더 쉽게 읽을 수 있도록 TypeScript의 출력에서 ​​색상 및 서식을 활성화합니다.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "TypeScript 프로젝트를 프로젝트 참조와 함께 사용할 수 있는 제약 조건을 사용합니다.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "함수에서 명시적으로 반환되지 않은 코드 경로에 대한 오류 보고를 사용합니다.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "암시적 '모든' 유형의 표현식 및 선언에 대한 오류 보고를 활성화합니다.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch 문에서 폴스루 사례에 대한 오류 보고를 활성화합니다.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "형식이 확인된 JavaScript 파일에서 오류 보고를 사용하도록 설정합니다.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "지역 변수를 읽지 않을 때 오류 보고를 활성화합니다.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this'에 'any' 유형이 지정되면 오류 보고를 활성화합니다.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "레거시 실험적 데코레이터에 대해 실험적 지원을 사용하도록 설정합니다.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "선언 파일이 있는 경우 확장자가 있는 파일 가져오기를 사용하도록 설정합니다.", - "Enable_importing_json_files_6689": ".json 파일 가져오기를 활성화합니다.", - "Enable_lib_replacement_6808": "라이브러리 바꾸기를 사용하도록 설정합니다.", - "Enable_project_compilation_6302": "프로젝트 컴파일을 사용하도록 설정", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "함수에서 strict 'bind', 'call' 및 'apply' 메서드를 사용하도록 설정합니다.", - "Enable_strict_checking_of_function_types_6186": "함수 형식에 대한 엄격한 검사를 사용하도록 설정합니다.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "클래스의 속성 초기화에 대해 엄격한 검사를 사용하도록 설정합니다.", - "Enable_strict_null_checks_6113": "엄격한 null 검사를 사용하도록 설정하세요.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "구성 파일에서 'experimentalDecorators' 옵션을 사용하도록 설정합니다.", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "구성 파일에서 '--jsx' 플래그를 사용하도록 설정합니다.", - "Enable_tracing_of_the_name_resolution_process_6085": "이름 확인 프로세스 추적을 사용하도록 설정하세요.", - "Enable_verbose_logging_6713": "자세한 로깅을 활성화합니다.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "모든 가져오기에 대한 네임스페이스 개체를 만들어 CommonJS 및 ES 모듈 간의 내보내기 상호 운용성을 사용하도록 설정합니다. 'allowSyntheticDefaultImports'를 의미합니다.", - "Enables_experimental_support_for_ES7_decorators_6065": "ES7 데코레이터에 대해 실험적 지원을 사용합니다.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "데코레이터에 대한 형식 메타데이터를 내보내기 위해 실험적 지원을 사용합니다.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "인덱싱된 형식을 사용하여 선언된 키에 대해 인덱싱된 접근자를 사용합니다.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "파생 클래스의 멤버 재정의가 재정의 한정자로 표시되어 있는지 확인합니다.", - "Ensure_that_casing_is_correct_in_imports_6637": "가져오기에서 대/소문자가 올바른지 확인합니다.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "다른 가져오기를 사용하지 않고 각 파일을 안전하게 변환할 수 있는지 확인합니다.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "'use strict'를 항상 내보내고 있는지 확인합니다.", - "Entering_conditional_exports_6413": "조건부 내보내기가 시작됩니다.", - "Entry_point_for_implicit_type_library_0_1420": "암시적 형식 라이브러리 '{0}'의 진입점", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId가 '{1}'인 암시적 형식 라이브러리 '{0}'의 진입점", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "packageId가 '{1}'인 compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점", - "Enum_0_used_before_its_declaration_2450": "선언 전에 사용된 '{0}' 열거형입니다.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "열거형 선언은 네임스페이스 또는 다른 열거형 선언과만 병합할 수 있습니다.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "열거형 선언은 모두 const 또는 비const여야 합니다.", - "Enum_member_expected_1132": "열거형 멤버가 필요합니다.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules'를 사용하도록 설정한 경우 리터럴이 아닌 숫자 멤버 다음에 오는 열거형 멤버에는 이니셜라이저가 있어야 합니다.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "열거형 멤버 이니셜라이저는 --isolatedDeclarations를 사용하여 외부 기호에 대한 참조 없이 계산할 수 있어야 합니다.", - "Enum_member_must_have_initializer_1061": "열거형 멤버에는 이니셜라이저가 있어야 합니다.", - "Enum_name_cannot_be_0_2431": "열거형 이름은 '{0}'일 수 없습니다.", - "Environment_Settings_6285": "환경 설정", - "Errors_Files_6041": "오류 파일", - "Escape_sequence_0_is_not_allowed_1488": "이스케이프 시퀀스 '{0}'은(는) 허용되지 않습니다.", - "Examples_Colon_0_6026": "예: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' 및 '{1}' 형식을 비교하는 데 과도한 복잡성이 있습니다.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "'{0}' 및 '{1}' 형식을 비교하는 스택 깊이가 과도합니다.", - "Exiting_conditional_exports_6416": "조건부 내보내기가 종료됩니다.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "'@extends' 태그로 제공하는 예상되는 {0}-{1} 형식 인수입니다.", - "Expected_0_arguments_but_got_1_2554": "{0}개의 인수가 필요한데 {1}개를 가져왔습니다.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0}개 인수가 필요한데 {1}개를 가져왔습니다. 'void'를 'Promise'의 형식 인수에 포함하는 것을 잊으셨습니까?", - "Expected_0_type_arguments_but_got_1_2558": "{0}개의 형식 인수가 필요한데 {1}개를 가져왔습니다.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "'@extends' 태그로 제공하는 예상되는 {0} 형식 인수입니다.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1개의 인수가 필요하지만 0이 있습니다. 'new Promise()'는 인수 없이 호출할 수 있는 'resolve'를 생성하기 위해 JSDoc 힌트가 필요합니다.", - "Expected_a_Unicode_property_name_1523": "유니코드 속성 이름이 필요합니다.", - "Expected_a_Unicode_property_name_or_value_1527": "유니코드 속성 이름 또는 값이 필요합니다.", - "Expected_a_Unicode_property_value_1525": "유니코드 속성 값이 필요합니다.", - "Expected_a_capturing_group_name_1514": "캡처 그룹 이름이 필요합니다.", - "Expected_a_class_set_operand_1520": "클래스 집합 피연산자가 필요합니다.", - "Expected_at_least_0_arguments_but_got_1_2555": "최소 {0}개의 인수가 필요한데 {1}개를 가져왔습니다.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}'에 해당하는 JSX 닫는 태그가 필요합니다.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 조각에 닫는 태그가 필요합니다.", - "Expected_for_property_initializer_1442": "속성 이니셜라이저에는 '='가 필요합니다.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json'의 '{0}' 필드에 '{1}' 형식이 필요한데 '{2}'을(를) 얻었습니다.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "명시적으로 지정된 모듈 확인 종류 '{0}'입니다.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 옵션이 'es2016' 이상으로 설정되어 있지 않으면 'bigint' 값에 지수화를 수행할 수 없습니다.", - "Export_0_from_module_1_90059": "'{0}'을(를) '{1}' 모듈에서 내보냅니다.", - "Export_all_referenced_locals_90060": "참조된 모든 로컬 내보내기", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript 모듈을 대상으로 하는 경우 내보내기 할당을 사용할 수 없습니다. 대신 'export default'나 다른 모듈 형식의 사용을 고려하세요.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "'--module' 플래그가 'system'이면 내보내기 할당은 지원되지 않습니다.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "내보내기 선언이 '{0}'의 내보낸 선언과 충돌합니다.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "네임스페이스에서는 내보내기 선언이 허용되지 않습니다.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "내보내기 지정자 '{0}'이(가) '{1}' 경로의 package.json 범위에 없습니다.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "내보낸 형식 별칭 '{0}'은(는) '{1}' 프라이빗 이름을 포함하거나 사용 중입니다.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "내보낸 형식 별칭 '{0}'이(가) 모듈 {2}의 프라이빗 이름 '{1}'을(를) 포함하거나 사용하고 있습니다.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "내보낸 변수 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "내보낸 변수 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "내보낸 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "내보내기 및 내보내기 할당는 모듈 확대에서 허용되지 않습니다.", - "Expression_expected_1109": "식이 필요합니다.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "식을 데코레이터로 사용하려면 괄호로 묶어야 합니다.", - "Expression_or_comma_expected_1137": "식 또는 쉼표가 필요합니다.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "식에서는 너무 복잡해서 표시할 수 없는 공용 구조체 형식을 생성합니다.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "컴파일러가 기본 클래스 참조를 캡처하기 위해 사용하는 '_super'로 식이 확인됩니다.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "컴파일러가 'new.target' 메타 속성 참조를 캡처하기 위해 사용하는 변수 선언 '_newTarget'으로 식이 확인됩니다.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "컴파일러가 'this' 참조를 캡처하기 위해 사용하는 변수 선언 '_this'로 식이 확인됩니다.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "식 형식은 --isolatedDeclarations로 유추할 수 없습니다.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 절에는 --isolatedDeclarations가 있는 식을 포함할 수 없습니다.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "유추된 형식 '{0}'에 대한 extends 절이 '{1}' 비공개 이름을 가지고 있거나 사용 중입니다.", - "Extract_base_class_to_variable_90064": "변수에 기본 클래스 추출", - "Extract_binding_expressions_to_variable_90066": "변수에 바인딩 식 추출", - "Extract_constant_95006": "상수 추출", - "Extract_default_export_to_variable_90065": "변수로 기본 내보내기 추출", - "Extract_function_95005": "함수 추출", - "Extract_to_0_in_1_95004": "{1}의 {0}(으)로 추출", - "Extract_to_0_in_1_scope_95008": "{1} 범위의 {0}(으)로 추출", - "Extract_to_0_in_enclosing_scope_95007": "바깥쪽 범위의 {0}(으)로 추출", - "Extract_to_interface_95090": "인터페이스로 추출", - "Extract_to_type_alias_95078": "형식 별칭으로 추출", - "Extract_to_typedef_95079": "Typedef로 추출", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "변수로 추출하고 '{0} as typeof {0}'(으)로 바꾸기", - "Extract_type_95077": "형식 추출", - "FILE_6035": "파일", - "FILE_OR_DIRECTORY_6040": "파일 또는 디렉터리", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}'을(를) 찾지 못했습니다.", - "Failed_to_resolve_under_condition_0_6415": "조건 '{0}'에서 확인하지 못했습니다.", - "Fallthrough_case_in_switch_7029": "switch에 Fallthrough case가 있습니다.", - "File_0_does_not_exist_6096": "'{0}' 파일이 없습니다.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "이전 캐시된 검색에 따라 '{0}' 파일이 존재하지 않습니다.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "파일 '{0}'은(는) 이전 캐시된 검색에 따라 존재합니다.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' 파일이 있습니다. 이 파일을 이름 확인 결과로 사용하세요.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' 파일의 확장명이 지원되지 않습니다. 지원되는 확장명은 {1}뿐입니다.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' 파일은 JavaScript 파일입니다. 'allowJs' 옵션을 사용하도록 설정하시겠습니까?", - "File_0_is_not_a_module_2306": "'{0}' 파일은 모듈이 아닙니다.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' 파일이 '{1}' 프로젝트의 파일 목록에 나열되지 않습니다. 프로젝트는 모든 파일을 나열하거나 'include' 패턴을 사용해야 합니다.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' 파일이 'rootDir' '{1}' 아래에 있지 않습니다. 'rootDir'에는 모든 소스 파일이 포함되어 있어야 합니다.", - "File_0_not_found_6053": "파일 '{0}'을(를) 찾을 수 없습니다.", - "File_Layout_6284": "파일 레이아웃", - "File_Management_6245": "파일 관리", - "File_appears_to_be_binary_1490": "파일이 이진 파일인 것 같습니다.", - "File_change_detected_Starting_incremental_compilation_6032": "파일 변경이 검색되었습니다. 증분 컴파일을 시작하는 중...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}'에 \"type\" 필드가 없으므로 파일이 CommonJS 모듈입니다.", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}'에 값이 \"module\"이 아닌 \"type\" 필드가 있으므로 파일이 CommonJS 모듈입니다.", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "'package.json'을 찾을 수 없으므로 파일이 CommonJS 모듈입니다.", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}'에 값이 \"module\"인 \"type\" 필드가 있으므로 파일이 ECMAScript 모듈입니다.", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "파일이 CommonJS 모듈입니다. ES 모듈로 변환될 수 있습니다.", - "File_is_default_library_for_target_specified_here_1426": "파일은 여기에 지정된 대상의 기본 라이브러리입니다.", - "File_is_entry_point_of_type_library_specified_here_1419": "파일은 여기에 지정된 형식 라이브러리의 진입점입니다.", - "File_is_included_via_import_here_1399": "파일은 여기에 가져오기를 통해 포함됩니다.", - "File_is_included_via_library_reference_here_1406": "파일은 여기에 라이브러리 참조를 통해 포함됩니다.", - "File_is_included_via_reference_here_1401": "파일은 여기에 참조를 통해 포함됩니다.", - "File_is_included_via_type_library_reference_here_1404": "파일은 여기에 형식 라이브러리 참조를 통해 포함됩니다.", - "File_is_library_specified_here_1423": "파일은 여기에 지정된 라이브러리입니다.", - "File_is_matched_by_files_list_specified_here_1410": "파일은 여기에 지정된 'files' 목록으로 일치됩니다.", - "File_is_matched_by_include_pattern_specified_here_1408": "파일은 여기에 지정된 포함 패턴으로 일치됩니다.", - "File_is_output_from_referenced_project_specified_here_1413": "파일은 여기에 지정된 참조 프로젝트의 출력입니다.", - "File_is_output_of_project_reference_source_0_1428": "파일은 프로젝트 참조 소스 '{0}'의 출력입니다.", - "File_is_source_from_referenced_project_specified_here_1416": "파일은 여기에 지정된 참조된 프로젝트의 소스입니다.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' 파일 이름은 이미 포함된 '{1}' 파일 이름과 대/소문자만 다릅니다.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "파일 이름 '{0}'에는 '{1}' 확장명이 있습니다. 대신 '{2}'을(를) 조회합니다.", - "File_name_0_has_a_1_extension_stripping_it_6132": "파일 이름 '{0}'에 '{1}' 확장명이 있어 제거하는 중입니다.", - "File_redirects_to_file_0_1429": "파일은 '{0}' 파일로 리디렉션됩니다.", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "파일 사양은 재귀 디렉터리 와일드카드('**') 뒤에 나타나는 부모 디렉터리('..')를 포함할 수 없습니다. '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "파일 사양은 재귀 디렉터리 와일드카드('**')로 끝날 수 없습니다. '{0}'.", - "Filters_results_from_the_include_option_6627": "'include' 옵션의 결과를 필터링합니다.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "검색된 맞춤법 오류 모두 수정", - "Fix_all_expressions_possibly_missing_await_95085": "'await'가 누락되었을 수 있는 모든 식 수정", - "Fix_all_implicit_this_errors_95107": "모든 암시적 'this' 오류 수정", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "비동기 함수의 모든 잘못된 반환 형식 수정", - "Fix_all_with_type_only_imports_95182": "형식 전용 가져오기를 사용하여 모두 수정", - "For_nodejs_Colon_6287": "nodejs의 경우:", - "Found_0_errors_6217": "{0}개 오류가 발견되었습니다.", - "Found_0_errors_Watching_for_file_changes_6194": "{0}개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", - "Found_0_errors_in_1_files_6261": "{1} 파일에서 {0} 오류를 찾았습니다.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "{1}에서 시작하는 동일한 파일에서 {0}개의 오류를 찾았습니다.", - "Found_1_error_6216": "1개 오류가 발견되었습니다.", - "Found_1_error_Watching_for_file_changes_6193": "1개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", - "Found_1_error_in_0_6259": "{0}에서 1개의 오류를 찾았습니다.", - "Found_package_json_at_0_6099": "'{0}'에서 'package.json'을 찾았습니다.", - "Found_peerDependency_0_with_1_version_6282": "'{1}' 버전이 있는 peerDependency '{0}'을(를) 찾았습니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 모듈은 자동으로 strict 모드가 됩니다.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "반환 형식 주석이 없는 함수 식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "함수 구현이 없거나 선언 바로 다음에 나오지 않습니다.", - "Function_implementation_name_must_be_0_2389": "함수 구현 이름이 '{0}'이어야 합니다.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 함수에는 암시적으로 반환 형식 'any'가 포함됩니다.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "함수에 끝 return 문이 없으며 반환 형식에 'undefined'가 포함되지 않습니다.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "함수에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", - "Function_not_implemented_95159": "함수가 구현되지 않았습니다.", - "Function_overload_must_be_static_2387": "함수 오버로드는 정적이어야 합니다.", - "Function_overload_must_not_be_static_2388": "함수 오버로드는 정적이 아니어야 합니다.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "공용 구조체 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "교집합 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "반환 형식 주석이 없는 함수 형식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "본문이 있는 함수는 앰비언트 클래스하고만 병합할 수 있습니다.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "프로젝트의 TypeScript 및 JavaScript 파일에서 .d.ts 파일을 생성합니다.", - "Generate_get_and_set_accessors_95046": "'get' 및 'set' 접근자 생성", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "모든 재정의 속성에 대한 'get' 및 'set' 접근자를 생성합니다.", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "CPU 프로필을 생성합니다.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "해당하는 각 '.d.ts' 파일에 sourcemap을 생성합니다.", - "Generates_an_event_trace_and_a_list_of_types_6237": "이벤트 추적 및 형식 목록을 생성합니다.", - "Generates_corresponding_d_ts_file_6002": "해당 '.d.ts' 파일을 생성합니다.", - "Generates_corresponding_map_file_6043": "해당 '.map' 파일을 생성합니다.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "생성기에 암시적으로 '{0}' yield 형식이 있습니다. 반환 형식 주석을 제공하는 것이 좋습니다.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "생성기는 앰비언트 컨텍스트에서 사용할 수 없습니다.", - "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' 제네릭 형식에 {1} 형식 인수가 필요합니다.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "제네릭 형식 '{0}'에 {1} 및 {2} 사이의 형식 인수가 필요합니다.", - "Global_module_exports_may_only_appear_at_top_level_1316": "전역 모듈 내보내기는 최상위 수준에만 나올 수 있습니다.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "전역 모듈 내보내기는 선언 파일에만 나올 수 있습니다.", - "Global_module_exports_may_only_appear_in_module_files_1314": "전역 모듈 내보내기는 모듈 파일에만 나올 수 있습니다.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "전역 형식 '{0}'은 클래스 또는 인터페이스 형식이어야 합니다.", - "Global_type_0_must_have_1_type_parameter_s_2317": "전역 형식 '{0}'에는 {1} 형식 매개 변수를 사용해야 합니다.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' 및 '--watch'의 다시 컴파일에서 파일 내 변경 내용은 파일에 따라 직접 파일에만 영향을 준다고 가정하도록 합니다.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'증분' 및 '감시' 모드를 사용하는 프로젝트에서 재컴파일하면 파일 내의 변경 사항이 해당 파일에 직접적으로 영향을 미치는 파일에만 영향을 미친다고 가정합니다.", - "Hexadecimal_digit_expected_1125": "16진수가 필요합니다.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "식별자가 필요합니다. '{0}'은(는) 모듈의 최상위 수준에 있는 예약어입니다.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다. 모듈은 자동으로 strict 모드가 됩니다.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "식별자가 필요합니다. '{0}'은(는) 여기에서 사용할 수 없는 예약어입니다.", - "Identifier_expected_1003": "식별자가 필요합니다.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "식별자가 필요합니다. '__esModule'은 ECMAScript 모듈을 변환할 때 내보낸 표식으로 예약되어 있습니다.", - "Identifier_or_string_literal_expected_1478": "식별자 또는 문자열 리터럴이 필요합니다.", - "Identifier_string_literal_or_number_literal_expected_1496": "식별자, 문자열 리터럴 또는 숫자 리터럴이 필요합니다.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' 패키지가 이 모듈을 실제로 공개하는 경우 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' 수정을 위한 끌어오기 요청을 보내는 것이 좋습니다.", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' 패키지가 실제로 이 모듈을 노출하는 경우 'declare module {1}';'이(가) 포함된 새 선언(.d.ts) 파일을 추가해 보세요.", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "찾은 tsconfig를 무시하고 명령줄 옵션과 파일로 빌드합니다.", - "Ignore_this_error_message_90019": "이 오류 메시지 무시", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json을 무시하고 기본 컴파일러 옵션을 사용하여 지정된 파일을 컴파일합니다.", - "Implement_all_inherited_abstract_classes_95040": "상속된 추상 클래스 모두 구현", - "Implement_all_unimplemented_interfaces_95032": "구현되지 않은 인터페이스 모두 구현", - "Implement_inherited_abstract_class_90007": "상속된 추상 클래스 구현", - "Implement_interface_0_90006": "'{0}' 인터페이스 구현", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "내보낸 클래스 '{0}'의 Implements 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "런타임에는 'symbol'을 'string'으로 암시적으로 변환할 수 없습니다. 이 식을 'String(...)'으로 래핑하는 것이 좋습니다.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' 가져오기는 이 파일에 사용된 전역 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' 가져오기는 로컬 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", - "Import_0_from_1_90013": "\"{1}\"에서 '{0}'을(를) 가져옵니다.", - "Import_assertion_values_must_be_string_literal_expressions_2837": "가져오기 어설션 값은 문자열 리터럴 ㅁ이이어야 합니다.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 어설션을 사용할 수 없습니다.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "가져오기 어설션은 '--module' 옵션이 'esnext', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "가져오기 어설션은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "가져오기 어설션이 가져오기 특성으로 바뀌었습니다. 'assert' 대신 'with'를 사용합니다.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript 모듈을 대상으로 하는 경우 할당 가져오기를 사용할 수 없습니다. 대신 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' 또는 다른 모듈 형식 사용을 고려하세요.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "가져오기 특성 값은 문자열 리터럴 식이어야 합니다.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 특성을 사용할 수 없습니다.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "가져오기 특성은 '--module' 옵션이 'esnext', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "가져오기 특성은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", - "Import_declaration_0_is_using_private_name_1_4000": "가져오기 선언 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 사용하고 있습니다.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "가져오기 선언이 '{0}'의 로컬 선언과 충돌합니다.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "네임스페이스의 가져오기 선언은 모듈을 참조할 수 없습니다.", - "Import_emit_helpers_from_tslib_6139": "'tslib'에서 내보내기 도우미를 가져오세요.", - "Import_may_be_converted_to_a_default_import_80003": "가져오기가 기본 가져오기로 변환될 수 있습니다.", - "Import_name_cannot_be_0_2438": "가져오기 이름은 '{0}'일 수 없습니다.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "앰비언트 모듈 선언의 가져오기 또는 내보내기 선언은 상대적 모듈 이름을 통해 모듈을 참조할 수 없습니다.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "가져오기 지정자 '{0}'이(가) '{1}' 경로의 package.json 범위에 없습니다.", - "Imported_via_0_from_file_1_1393": "'{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "'module'이 '{0}'(으)로 설정된 경우 JSON 파일을 ECMAScript 모듈로 가져오려면 'type: \"json\"' 가져오기 특성이 필요합니다.", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "가져오기는 모듈 확대에서 허용되지 않습니다. 내보내기를 바깥쪽 외부 모듈로 이동하세요.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "앰비언트 열거형 선언에서 멤버 이니셜라이저는 상수 식이어야 합니다.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "다중 선언이 포함된 열거형에서는 하나의 선언만 첫 번째 열거형 요소에 대한 이니셜라이저를 생략할 수 있습니다.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "파일 목록을 포함합니다. 이는 'include'가 아닌 GLOB 패턴을 지원하지 않습니다.", - "Include_modules_imported_with_json_extension_6197": "'.json' 확장을 사용하여 가져온 모듈을 포함합니다.", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "내보낸 JavaScript 내 sourcemap에 소스 코드를 포함합니다.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "내보낸 JavaScript 내에 sourcemap 파일을 포함합니다.", - "Includes_imports_of_types_referenced_by_0_90054": "'{0}'에서 참조하는 유형의 가져오기를 포함합니다.", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch를 포함하면 -w는 파일 변경 내용에 대한 현재 프로젝트 감시를 시작합니다. 설정되면 다음을 사용하여 조사식 모드를 구성할 수 있습니다.", - "Incomplete_quantifier_Digit_expected_1505": "불완전한 수량자입니다. 숫자가 필요합니다.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{1}' 형식에 인덱스 시그니처 유형 '{0}'이(가) 없습니다.", - "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' 형식의 인덱스 시그니처는 읽기만 허용됩니다.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "병합된 선언 '{0}'의 개별 선언은 모두 내보내 졌거나 모두 로컬이어야 합니다.", - "Infer_all_types_from_usage_95023": "사용량에서 모든 형식 유추", - "Infer_function_return_type_95148": "함수 반환 형식 유추", - "Infer_parameter_types_from_usage_95012": "사용량에서 매개 변수 형식 유추", - "Infer_this_type_of_0_from_usage_95080": "사용량에서 '{0}'의 'this' 형식 유추", - "Infer_type_of_0_from_usage_95011": "사용량에서 '{0}'의 형식 유추", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations에서는 클래스 식의 유추가 지원되지 않습니다.", - "Initialize_property_0_in_the_constructor_90020": "생성자에서 속성 '{0}' 초기화", - "Initialize_static_property_0_90021": "정적 속성 '{0}' 초기화", - "Initializer_for_property_0_2811": "'{0}' 속성에 대한 이니셜라이저", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "인스턴스 멤버 변수 '{0}'의 이니셜라이저는 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "앰비언트 컨텍스트에서는 이니셜라이저가 허용되지 않습니다.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript 프로젝트를 초기화하고 tsconfig.json 파일을 만듭니다.", - "Inline_variable_95184": "인라인 변수", - "Insert_command_line_options_and_files_from_a_file_6030": "파일에서 명령줄 옵션 및 파일을 삽입합니다.", - "Install_0_95014": "'{0}' 설치", - "Install_all_missing_types_packages_95033": "누락된 형식 패키지 모두 설치", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' 인터페이스는 '{1}' 및 '{2}' 형식을 동시에 확장할 수 없습니다.", - "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' 인터페이스가 '{1}' 인터페이스를 잘못 확장합니다.", - "Interface_declaration_cannot_have_implements_clause_1176": "인터페이스 선언에는 'implements' 절을 사용할 수 없습니다.", - "Interface_must_be_given_a_name_1438": "인터페이스에 이름을 지정해야 합니다.", - "Interface_name_cannot_be_0_2427": "인터페이스 이름은 '{0}'일 수 없습니다.", - "Interop_Constraints_6252": "Interop 제약 조건", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined'를 추가하는 대신 선택적 속성 형식을 작성된 것으로 해석합니다.", - "Invalid_character_1127": "잘못된 문자입니다.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "잘못된 가져오기 지정자 '{0}'에는 가능한 해결 방법이 없습니다.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "확대의 모듈 이름이 잘못되었습니다. '{1}'에서 '{0}' 모듈이 형식화되지 않은 모듈로 확인되어 확대할 수 없습니다.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "확대의 모듈 이름이 잘못되었습니다. '{0}' 모듈을 찾을 수 없습니다.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "새 식의 선택적 체인이 잘못되었습니다. '{0}()'을 호출하시겠습니까?", - "Invalid_reference_directive_syntax_1084": "'reference' 지시문 구문이 잘못되었습니다.", - "Invalid_syntax_in_decorator_1498": "데코레이터의 구문이 잘못되었습니다.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}'을(를) 잘못 사용했습니다. 해당 항목은 클래스 정적 블록 내에서 사용할 수 없습니다.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}'을(를) 잘못 사용했습니다. 모듈은 자동으로 strict 모드가 됩니다.", - "Invalid_use_of_0_in_strict_mode_1100": "strict 모드에서 '{0}'을(를) 잘못 사용했습니다.", - "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations'의 값이 잘못되었습니다.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory'에 대한 값이 잘못되었습니다. '{0}'이(가) 올바른 식별자 또는 정규화된 이름이 아닙니다.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자 또는 정규화된 이름이 아닙니다.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자가 아닙니다.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "두 템플릿 식을 구분할 쉼표가 없는 것 같습니다. 이 두 템플릿 식은 태그가 지정된 호출 불가능한 하나의 템플릿 식을 구성합니다.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "해당 요소 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "해당 인스턴스 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "해당 반환 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "해당 '{0}' 형식은 올바른 JSX 요소 형식이 아닙니다.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}'이(가) 'extends {2}' 절과 일치하지 않습니다.", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}'이(가) 클래스에 연결되어 있지 않습니다.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...'은 시그니처의 마지막 매개 변수에만 나타날 수 있습니다.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 태그의 이름이 '{0}'인데 해당 이름의 매개 변수가 없습니다.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 태그에 '{0}' 이름이 있지만, 해당 이름의 매개 변수가 없습니다. 배열 형식이 있는 경우 '인수'를 일치시킵니다.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 태그는 형식 주석을 포함하거나, '@property' 또는 '@member' 태그 앞에 와야 합니다.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 유형은 문서 주석 내에서만 사용될 수 있습니다.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 형식이 TypeScript 형식으로 이동될 수 있습니다.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 특성에는 비어 있지 않은 '식'만 할당할 수 있습니다.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 요소 '{0}'에 닫는 태그가 없습니다.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 요소 클래스는 '{0}' 속성이 없으므로 특성을 지원하지 않습니다.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "'JSX.{0}' 인터페이스가 없으므로 JSX 요소는 암시적으로 'any' 형식입니다.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "전역 형식 'JSX.Element'가 없으므로 JSX 요소는 암시적으로 'any' 형식입니다.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 요소 형식 '{0}'에 구문 또는 호출 시그니처가 없습니다.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 요소에 이름이 같은 특성을 여러 개 사용할 수 없습니다.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 식은 쉼표 연산자를 사용할 수 없습니다. 배열을 작성하시겠습니까?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX 식에는 부모 요소가 하나 있어야 합니다.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 조각에 닫는 태그가 없습니다.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 속성 액세스 식은 JSX 네임스페이스 이름을 포함할 수 없습니다.", - "JSX_spread_child_must_be_an_array_type_2609": "JSX 분배 자식은 배열 형식이어야 합니다.", - "JavaScript_Support_6247": "JavaScript 지원", - "Jump_target_cannot_cross_function_boundary_1107": "점프 대상은 함수 경계를 벗어날 수 없습니다.", - "KIND_6034": "KIND", - "Keywords_cannot_contain_escape_characters_1260": "키워드에는 이스케이프 문자를 사용할 수 없습니다.", - "LOCATION_6037": "위치", - "Language_and_Environment_6254": "언어 및 환경", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "쉼표 연산자의 왼쪽은 사용되지 않으며 이로 인해 의도하지 않은 결과가 발생하지 않습니다.", - "Library_0_specified_in_compilerOptions_1422": "compilerOptions에 '{0}' 라이브러리가 지정되었습니다.", - "Library_referenced_via_0_from_file_1_1405": "'{1}' 파일에서 '{0}'을(를) 통해 라이브러리가 참조되었습니다.", - "Line_break_not_permitted_here_1142": "여기서는 줄 바꿈이 허용되지 않습니다.", - "Line_terminator_not_permitted_before_arrow_1200": "줄 마침 표시는 화살표 앞에 사용할 수 없습니다.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "모듈을 확인할 때 검색할 파일 이름 접미사 목록입니다.", - "List_of_folders_to_include_type_definitions_from_6161": "포함할 형식 정의가 있는 폴더의 목록입니다.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "런타임에 프로젝트의 구조를 나타내는 결합된 콘텐츠가 있는 루트 폴더의 목록입니다.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "루트 디렉터리 '{1}'에서 '{0}'을(를) 로드하고 있습니다. 후보 위치: '{2}'.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' 폴더에서 '{0}' 모듈을 로드하고 있습니다. 대상 파일 형식은 '{1}'입니다.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "모듈을 파일/폴더로 로드하고 있습니다. 후보 모듈 위치는 '{0}', 대상 파일 형식은 '{1}'입니다.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' 프로세스 동안 사용된 로그 경로입니다.", - "Longest_matching_prefix_for_0_is_1_6108": "'{0}'에 대해 일치하는 가장 긴 접두사는 '{1}'입니다.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' 폴더에서 찾고 있습니다. 초기 위치: '{0}'.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "모든 'super()' 호출을 생성자의 첫 번째 문으로 만들기", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof가 문자열, 숫자 또는 기호 대신 문자열만 반환하도록 합니다. 레거시 옵션입니다.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "생성자의 첫 번째 문을 'super()'로 호출", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "매핑된 개체 형식에는 'any' 템플릿 형식이 암시적으로 포함됩니다.", - "Mark_array_literal_as_const_90070": "배열 리터럴을 const로 표시", - "Matched_0_condition_1_6403": "'{0}' 조건 '{1}'과(와) 일치합니다.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "기본적으로 일치되는 포함 패턴 '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "'{1}'의 포함 패턴 '{0}'(으)로 일치되었습니다.", - "Member_0_implicitly_has_an_1_type_7008": "'{0}' 멤버에는 암시적으로 '{1}' 형식이 포함됩니다.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' 멤버는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "Merge_conflict_marker_encountered_1185": "병합 충돌 표식을 발견했습니다.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "병합된 선언 '{0}'에는 기본 내보내기 선언을 포함할 수 없습니다. 대신 별도의 'export default {0}' 선언을 추가하세요.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "메타 속성 '{0}'은(는) 함수 선언, 함수 식 또는 생성기의 본문에서만 사용할 수 있습니다.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' 메서드는 abstract로 표시되어 있으므로 구현이 있을 수 없습니다.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "메서드에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", - "Method_not_implemented_95158": "메서드가 구현되지 않았습니다.", - "Modifiers_cannot_appear_here_1184": "한정자를 여기에 표시할 수 없습니다.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' 모듈은 '{1}' 플래그를 사용하는 가져온 기본값이어야만 합니다.", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "이 구문을 사용하여 '{0}' 모듈을 가져올 수 없습니다. 지정자는 'require'로 가져올 수 없는 ES 모듈로만 확인됩니다. ECMAScript 가져오기를 대신 사용하세요.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' 모듈은 '{1}'을(를) 로컬로 선언하지만, 모듈을 '{2}'(으)로 내보냅니다.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "'{0}' 모듈은 '{1}'을(를) 로컬로 선언하지만, 모듈을 내보내지 않습니다.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "모듈 '{0}'은(는) 형식을 참조하지 않지만, 여기에서 형식으로 사용됩니다. 'typeof 가져오기('{0}')'를 사용하시겠습니까?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "모듈 '{0}'은(는) 값을 참조하지 않지만, 여기에서 값으로 사용됩니다.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "{0} 모듈에서 '{1}'(이)라는 멤버를 이미 내보냈습니다. 모호성을 해결하려면 명시적으로 다시 내보내는 것이 좋습니다.", - "Module_0_has_no_default_export_1192": "모듈 '{0}'에는 기본 내보내기가 없습니다.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "'{0}' 모듈에 기본 내보내기가 없습니다. 대신 '{0}에서 { {1} } 가져오기'를 사용하시겠습니까?", - "Module_0_has_no_exported_member_1_2305": "'{0}' 모듈에 내보낸 멤버 '{1}'이(가) 없습니다.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' 모듈에 내보낸 멤버 '{1}'이(가) 없습니다. 대신 '{0}에서 {1} 가져오기'를 사용하시겠습니까?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' 모듈은 이름이 같은 로컬 선언으로 숨겨집니다.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "모듈 '{0}'은(는) 'export ='을 사용하며 'export *'와 함께 사용할 수 없습니다.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' 모듈은 '{1}'에서 지역으로 선언된 앰비언트 모듈로 확인되었습니다.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--allowArbitraryExtensions'가 설정되지 않았습니다.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "모듈 '{0}'이(가) '{1}'(으)로 확인되었지만 '--jsx'가 설정되지 않았습니다.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--resolveJsonModule'이 사용되지 않았습니다.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "모듈 선언 이름에는 ' 또는 \" 인용 문자열만 사용할 수 있습니다.", - "Module_name_0_matched_pattern_1_6092": "모듈 이름: '{0}', 일치하는 패턴: '{1}'", - "Module_name_0_was_not_resolved_6090": "======== 모듈 이름 '{0}'이(가) 확인되지 않았습니다. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== 모듈 이름 '{0}'이(가) '{1}'(으)로 확인되었습니다. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 모듈 이름 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "모듈 확인 종류가 지정되지 않았습니다. '{0}'을(를) 사용합니다.", - "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs'를 사용한 모듈 확인에 실패했습니다.", - "Modules_6244": "모듈", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "레이블이 지정된 튜플 요소 한정자를 레이블로 이동", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "기본 내보내기에서 식을 변수로 이동하고 형식 주석을 추가합니다.", - "Move_to_a_new_file_95049": "새 파일로 이동", - "Move_to_file_95178": "파일로 이동", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "여러 개의 연속된 숫자 구분 기호는 허용되지 않습니다.", - "Multiple_constructor_implementations_are_not_allowed_2392": "여러 생성자 구현은 허용되지 않습니다.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "줄 바꿈", - "Name_is_not_valid_95136": "이름이 잘못되었습니다.", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "명명된 캡처 그룹은 'ES2018' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "이름이 같은 명명된 캡처 그룹은 상호 배타적이어야 합니다.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "지연된 가져오기에서는 명명된 가져오기를 사용할 수 없습니다.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module'이 '{0}'(으)로 설정된 경우 JSON 파일에서 ECMAScript 모듈로 명명된 가져오기를 사용할 수 없습니다.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "명명된 속성 '{0}'의 형식 '{1}' 및 '{2}'이(가) 동일하지 않습니다.", - "Namespace_0_has_no_exported_member_1_2694": "'{0}' 네임스페이스에 내보낸 멤버 '{1}'이(가) 없습니다.", - "Namespace_must_be_given_a_name_1437": "네임스페이스에 이름을 지정해야 합니다.", - "Namespace_name_cannot_be_0_2819": "네임스페이스 이름은 '{0}'일 수 없습니다.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}'이(가) 사용하도록 설정된 경우 전역 스크립트 파일에서는 네임스페이스를 사용할 수 없습니다. 이 파일이 전역 스크립트가 아닌 경우 'moduleDetection'을 'force'로 설정하거나 빈 'export {}' 문을 추가합니다.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "데코레이터와 한정자를 'this' 매개 변수에 적용할 수 없습니다.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "기본 생성자에 지정된 수의 형식 인수가 없습니다.", - "No_constituent_of_type_0_is_callable_2755": "'{0}' 형식의 구성원을 호출할 수 없습니다.", - "No_constituent_of_type_0_is_constructable_2759": "'{0}' 형식의 구성원을 생성할 수 없습니다.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' 형식에서 '{0}' 형식의 매개 변수가 포함된 인덱스 시그니처를 찾을 수 없습니다.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' 구성 파일에서 입력을 찾을 수 없습니다. 지정된 '포함' 경로는 '{1}'이고 '제외' 경로는 '{2}'이었습니다.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "더 이상 지원되지 않습니다. 초기 버전에서는 파일을 읽기 위한 텍스트 인코딩을 수동으로 설정합니다.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "오버로드에 {0} 인수가 필요하지 않지만, {1} 또는 {2} 인수가 필요한 오버로드가 있습니다.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "오버로드에 {0} 형식 인수가 필요하지 않지만, {1} 또는 {2} 형식 인수가 필요한 오버로드가 있습니다.", - "No_overload_matches_this_call_2769": "이 호출과 일치하는 오버로드가 없습니다.", - "No_type_could_be_extracted_from_this_type_node_95134": "이 형식 노드에서 형식을 추출할 수 없습니다.", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "줄임 속성 '{0}'의 범위에 값이 없습니다. 값을 선언하거나 이니셜라이저를 제공합니다.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "'{0}' 비추상 클래스는 '{2}' 클래스에서 상속된 추상 멤버 '{1}'을(를) 구현하지 않습니다.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2} 및 {3} 등.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "비추상 클래스 식은 '{1}' 클래스에서 상속된 추상 멤버 '{0}'을(를) 구현하지 않습니다.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1} 및 {2} 등.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "null이 아닌 어설션은 TypeScript 파일에서만 사용할 수 있습니다.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "여기서 단순하지 않은 매개 변수가 선언되었습니다.", - "Not_all_code_paths_return_a_value_7030": "일부 코드 경로가 값을 반환하지 않습니다.", - "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 형식의 일부 구성원을 호출할 수 없습니다.", - "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 형식의 일부 구성원을 생성할 수 없습니다.", - "Numbers_out_of_order_in_quantifier_1506": "수량자의 숫자가 순서를 벗어났습니다.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "절대값이 2^53보다 크거나 같은 숫자 리터럴은 너무 커서 정수로 정확하게 표시할 수 없습니다.", - "Numeric_separators_are_not_allowed_here_6188": "숫자 구분 기호는 여기에서 허용되지 않습니다.", - "Object_is_of_type_unknown_2571": "개체가 '알 수 없는' 형식입니다.", - "Object_is_possibly_null_2531": "개체가 'null'인 것 같습니다.", - "Object_is_possibly_null_or_undefined_2533": "개체가 'null' 또는 'undefined'인 것 같습니다.", - "Object_is_possibly_undefined_2532": "개체가 'undefined'인 것 같습니다.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "개체 리터럴은 알려진 속성만 지정할 수 있으며 '{1}' 형식에 '{0}'이(가) 없습니다.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "개체 리터럴은 알려진 속성만 지정할 수 있지만 '{1}' 형식에 '{0}'이(가) 없습니다. '{2}'을(를) 쓰려고 했습니까?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "개체 리터럴의 '{0}' 속성에는 암시적으로 '{1}' 형식이 포함됩니다.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "약식 속성이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "분산 할당이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", - "Octal_digit_expected_1178": "8진수가 있어야 합니다.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "문자 클래스에서는 8진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다. 이 시퀀스가 이스케이프 시퀀스로 의도된 경우 대신 '{0}' 구문을 사용합니다.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8진수 이스케이프 시퀀스는 허용되지 않습니다. '{0}' 구문을 사용합니다.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8진수 리터럴은 허용되지 않습니다. '{0}' 구문을 사용합니다.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}'의 한 값은 '{2}' 문자열이며, 다른 값은 알 수 없는 숫자 값으로 간주됩니다.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 문에는 단일 변수 선언만 허용됩니다.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 문에는 단일 변수 선언만 허용됩니다.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "void 함수만 'new' 키워드로 호출할 수 있습니다.", - "Only_ambient_modules_can_use_quoted_names_1035": "앰비언트 모듈만 따옴표가 붙은 이름을 사용할 수 있습니다.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "'amd' 및 'system' 모듈만 --{0}과(와) 함께 사용할 수 있습니다.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "const 배열만 --isolatedDeclarations를 사용하여 유추할 수 있습니다.", - "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 선언 파일만 내보냅니다.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript 파일은 출력하지 않고 d.ts 파일만 출력합니다.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "기본 클래스의 공용 및 보호된 메서드만 'super' 키워드를 통해 액세스할 수 있습니다.", - "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' 연산자는 '{1}' 형식에 적용할 수 없습니다.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' 연산자를 '{1}' 및 '{2}' 형식에 적용할 수 없습니다.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "연산자는 문자 클래스 내에서 혼합될 수 없습니다. 대신 중첩 클래스에서 래핑합니다.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "편집할 때 다중 프로젝트 참조 검사에서 프로젝트를 옵트아웃합니다.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' 옵션이 제거되었습니다. 구성에서 제거하세요.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' 옵션은 더 이상 사용되지 않으며 TypeScript {2}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{3}\"'을(를) 지정합니다.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'false' 또는 'null'로 설정할 수 있습니다.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'null'로 설정할 수 있습니다.", - "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' 옵션은 명령줄에서만 지정할 수 있습니다.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0}' 옵션은 '--inlineSourceMap' 옵션 또는 '--sourceMap' 옵션이 제공되는 경우에만 사용할 수 있습니다.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'로 설정된 경우에만 '{0}' 옵션을 사용할 수 있습니다.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "'{0}' 옵션은 'module'이 'preserve', 'commonjs', 또는 'es2015' 이상으로 설정된 경우에만 사용할 수 있습니다.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' 옵션이 '{1}'인 경우 '{0}' 옵션을 지정할 수 없습니다.", - "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' 옵션은 '{1}' 옵션과 함께 지정할 수 없습니다.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{1}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' 또는 '{2}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "‘{0}’ 옵션이 제거되었습니다. 구성에서 제거하세요.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}’ 옵션은 더 이상 사용되지 않으며 TypeScript {1}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{2}\"'을(를) 지정합니다.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' 옵션은 중복되므로 '{1}' 옵션으로 지정할 수 없습니다.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "'allowImportingTsExtensions' 옵션은 'noEmit', 'emitDeclarationOnly' 또는 'rewriteRelativeImportExtensions' 중 하나가 설정된 경우에만 사용할 수 있습니다.", - "Option_build_must_be_the_first_command_line_argument_6369": "'--build' 옵션은 첫 번째 명령줄 인수여야 합니다.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' 옵션은 '--module' 옵션을 지정하거나 'target' 옵션이 'ES2015' 이상인 경우에만 사용할 수 있습니다.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' 옵션이 ‘{1}'(으)로 설정된 경우 'moduleResolution' 옵션을 '{0}'(또는 지정되지 않은 상태로 두어야 함)(으)로 설정해야 합니다.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' 옵션이 '{1}'으(로) 설정된 경우 'module' 옵션을 '{0}'(으)로 설정해야 합니다.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}'이(가) 사용하도록 설정된 경우 'preserveConstEnums' 옵션을 사용하지 않도록 설정할 수 없습니다.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "명령줄에서 'project' 옵션을 원본 파일과 혼합하여 사용할 수 없습니다.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution'이 'classic'으로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module'이 'none', 'system' 또는 'umd'로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module'이 'UMD', 'AMD' 또는 'System'으로 설정된 경우 'verbatimModuleSyntax' 옵션을 사용할 수 없습니다.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "'{0}' 및 '{1}' 옵션은 조합할 수 없습니다.", - "Options_Colon_6027": "옵션:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "기타 출력", - "Output_Formatting_6256": "출력 서식 지정", - "Output_compiler_performance_information_after_building_6615": "빌드 후 컴파일러 성능 정보를 출력합니다.", - "Output_directory_for_generated_declaration_files_6166": "생성된 선언 파일의 출력 디렉터리입니다.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "출력 파일 '{0}'이(가) 소스 파일 '{1}'에서 빌드되지 않았습니다.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", - "Output_more_detailed_compiler_performance_information_after_building_6632": "빌드 후 더 자세한 컴파일러 성능 정보를 출력합니다.", - "Overload_0_of_1_2_gave_the_following_error_2772": "오버로드 {0}/{1}('{2}')에서 다음 오류가 발생했습니다.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "오버로드 시그니처는 모두 추상이거나 비추상이어야 합니다.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "오버로드 시그니처는 모두 앰비언트이거나 앰비언트가 아니어야 합니다.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "오버로드 시그니처는 모두 내보내거나 모두 내보내지 않아야 합니다.", - "Overload_signatures_must_all_be_optional_or_required_2386": "오버로드 시그니처는 모두 선택 사항이거나 필수 사항이어야 합니다.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "오버로드 시그니처는 모두 퍼블릭, 프라이빗 또는 보호된 상태여야 합니다.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "매개 변수 '{0}'은(는) 이 매개 변수 뒤에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", - "Parameter_0_cannot_reference_itself_2372": "매개 변수 '{0}'은(는) 자신을 참조할 수 없습니다.", - "Parameter_0_implicitly_has_an_1_type_7006": "'{0}' 매개 변수에는 암시적으로 '{1}' 형식이 포함됩니다.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "'{0}' 매개 변수는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "'{0}' 매개 변수는 '{1}' 매개 변수와 같은 위치에 있지 않습니다.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "접근자의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "접근자의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "접근자의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "내보낸 인터페이스에 있는 호출 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "내보낸 인터페이스에 있는 호출 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "내보낸 인터페이스에 있는 생성자 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "내보낸 인터페이스에 있는 생성자 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "내보낸 함수의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "내보낸 함수의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "내보낸 함수의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "내보낸 인터페이스에 있는 인덱스 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "내보낸 인터페이스에 있는 인덱스 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "내보낸 인터페이스에 있는 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "내보낸 인터페이스에 있는 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "매개 변수에 물음표와 이니셜라이저를 사용할 수 없습니다.", - "Parameter_declaration_expected_1138": "매개 변수 선언이 필요합니다.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "매개 변수에 이름이 있지만 형식이 없습니다. '{0}: {1}'을(를) 사용하시겠습니까?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "매개 변수 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "매개 변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "strict 모드에서 구문 분석하고 각 소스 파일에 대해 \"use strict\"를 내보냅니다.", - "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json의 'files' 목록의 일부", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' 패턴에는 '*' 문자를 최대 하나만 사용할 수 있습니다.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "이 세션에서는 '--diagnostics' 또는 '--extendedDiagnostics'에 대해 성능 타이밍을 사용할 수 없습니다. Web Performance API의 네이티브 구현을 찾을 수 없습니다.", - "Platform_specific_6912": "플랫폼별", - "Prefix_0_with_an_underscore_90025": "'{0}' 앞에 밑줄 추가", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "모든 잘못된 속성 선언에 'declare'를 접두사로 추가", - "Prefix_all_unused_declarations_with_where_possible_95025": "가능한 경우 사용하지 않는 모든 선언에 '_'을 접두사로 추가", - "Prefix_with_declare_95094": "'declare'를 접두사로 추가", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "JavaScript 출력에서 사용되지 않는 가져온 값을 유지합니다. 그렇지 않으면 제거됩니다.", - "Print_all_of_the_files_read_during_the_compilation_6653": "컴파일 중에 읽은 모든 파일을 출력합니다.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "컴파일 중에 읽은 파일을 포함 이유와 함께 출력합니다.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "파일의 이름과 해당 파일이 컴파일에 포함된 이유를 출력합니다.", - "Print_names_of_files_part_of_the_compilation_6155": "컴파일의 일부인 파일의 이름을 인쇄합니다.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "컴파일에 포함된 파일의 이름을 인쇄한 다음, 처리를 중지합니다.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "컴파일의 일부인 생성된 파일의 이름을 인쇄합니다.", - "Print_the_compiler_s_version_6019": "컴파일러 버전을 인쇄합니다.", - "Print_the_final_configuration_instead_of_building_1350": "빌드 대신 최종 구성을 인쇄합니다.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "컴파일 후 내보낸 파일의 이름을 출력합니다.", - "Print_this_message_6017": "이 메시지를 출력합니다.", - "Private_accessor_was_defined_without_a_getter_2806": "프라이빗 접근자가 getter 없이 정의되었습니다.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "'{0}' 프라이빗 필드는 외부 클래스에서 선언되어야 합니다.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "변수 선언에서 프라이빗 식별자를 사용할 수 없습니다.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "클래스 본문 외부에서 프라이빗 식별자를 사용할 수 없습니다.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "비공개 식별자는 클래스 본문에서만 허용되며 클래스 멤버 선언의 일부, 속성 액세스 또는 'in' 식의 왼쪽에서만 사용할 수 있습니다.", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "프라이빗 식별자는 ECMAScript 2015 이상을 대상으로 지정할 때만 사용할 수 있습니다.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "프라이빗 식별자는 매개 변수로 사용할 수 없습니다.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "형식 매개 변수에서 프라이빗 또는 보호된 멤버 '{0}'에 액세스할 수 없습니다.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' 프로젝트는 '{1}' 종속성에 오류가 있기 때문에 빌드할 수 없습니다.", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트를 빌드할 수 없습니다.", - "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' 프로젝트가 강제로 재구축되고 있습니다.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "'{1}' buildinfo 파일이 '{2}' 파일이 컴파일의 루트 파일이었지만 더 이상 아님을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "'{1}' buildinfo 파일은 프로그램에서 오류를 보고해야 함을 나타내기 때문에 '{0}' 프로젝트는 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo 파일 '{1}'이(가) 일부 변경 내용이 내보내지지 않았음을 나타내므로 프로젝트 '{0}'은(는) 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "'{1}' buildinfo 파일이 compilerOptions에 변경이 있음을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "출력 '{1}'이(가) 최신 입력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "'{1}' 출력 파일이 존재하지 않기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' 프로젝트의 출력이 현재 버전 '{2}'과(와) 다른 '{1}' 버전으로 생성되었기 때문에 이 프로젝트가 최신 상태가 아닙니다.", - "Project_0_is_up_to_date_6361": "'{0}' 프로젝트가 최신 상태입니다.", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "최신 입력 '{1}'이(가) 출력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태입니다.", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "프로젝트 '{0}'이(가) 최신 상태이지만 입력 파일보다 오래된 출력 파일의 타임스탬프를 업데이트해야 합니다.", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' 프로젝트는 종속성에 .d.ts 파일이 있는 최신 상태입니다.", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "프로젝트 참조는 순환 그래프를 형성할 수 없습니다. 순환이 발견되었습니다. {0}", - "Projects_6255": "프로젝트", - "Projects_in_this_build_Colon_0_6355": "이 빌드의 프로젝트: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' 한정자가 있는 속성은 ECMAScript 2015 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' 속성은 추상으로 표시되어 있으므로 이니셜라이저를 사용할 수 없습니다.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' 속성은 인덱스 시그니처에서 가져오는 것이므로 ['{0}']을(를) 사용하여 액세스해야 합니다.", - "Property_0_does_not_exist_on_type_1_2339": "'{1}' 형식에 '{0}' 속성이 없습니다.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' 속성이 '{1}' 형식에 없습니다. '{2}'을(를) 사용하시겠습니까?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' 속성이 '{1}' 형식에 없습니다. 대신 정적 멤버 '{2}'에 액세스하려고 하셨습니까?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' 속성이 '{1}' 형식에 없습니다. 대상 라이브러리를 변경해야 하는 경우 'lib' 컴파일러 옵션을 '{2}' 이상으로 변경해 보세요.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "속성 '{0}'(은)는 '{1}'에 없습니다. 'lib' 컴파일러 옵션을 변경하여 'dom'을 포함하세요.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' 속성에 이니셜라이저가 없으며 클래스 정적 블록에 확실히 할당되지 않았습니다.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "속성 '{0}'은(는) 이니셜라이저가 없고 생성자에 할당되어 있지 않습니다.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' 속성에는 해당 get 접근자에 반환 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' 속성에는 해당 set 접근자에 매개 변수 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "'{0}' 속성은 암시적으로 'any' 형식이지만, 사용량에서 get 접근자의 더 나은 형식을 유추할 수 있습니다.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "'{0}' 속성은 암시적으로 'any' 형식이지만, 사용량에서 set 접근자의 더 나은 형식을 유추할 수 있습니다.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "'{1}' 형식의 '{0}' 속성을 기본 형식 '{2}'의 동일한 속성에 할당할 수 없습니다.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "'{1}' 형식의 '{0}' 속성을 '{2}' 형식에 할당할 수 없습니다.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "'{1}' 형식의 '{0}' 속성이 '{2}' 형식 내에서 액세스할 수 없는 다른 멤버를 참조합니다.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "속성 '{0}'이(가) 선언은 되었지만 해당 값이 읽히지는 않았습니다.", - "Property_0_is_incompatible_with_index_signature_2530": "'{0}' 속성이 인덱스 시그니처와 호환되지 않습니다.", - "Property_0_is_missing_in_type_1_2324": "'{0}' 속성이 '{1}' 형식에 없습니다.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "'{0}' 속성이 '{1}' 형식에 없지만 '{2}' 형식에서 필수입니다.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "'{0}' 속성은 프라이빗 식별자를 포함하기 때문에 '{1}' 클래스 외부에서 액세스할 수 없습니다.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' 속성은 '{1}' 형식에서 선택적이지만 '{2}' 형식에서는 필수입니다.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 속성은 private이며 '{1}' 클래스 내에서만 액세스할 수 있습니다.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' 속성은 '{1}' 형식에서 private이지만 '{2}' 형식에서는 그렇지 않습니다.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' 속성은 보호되며 '{1}' 클래스의 인스턴스를 통해서만 액세스할 수 있습니다. 이는 '{2}' 클래스의 인스턴스입니다.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 속성은 보호된 속성이며 '{1}' 클래스 및 해당 하위 클래스 내에서만 액세스할 수 있습니다.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 속성은 보호된 속성이지만 '{1}' 형식은 '{2}'에서 파생된 클래스가 아닙니다.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' 속성은 '{1}' 형식에서는 보호된 속성이지만 '{2}' 형식에서는 공용입니다.", - "Property_0_is_used_before_being_assigned_2565": "'{0}' 속성이 할당되기 전에 사용되었습니다.", - "Property_0_is_used_before_its_initialization_2729": "초기화하기 전에 '{0}' 속성이 사용됩니다.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' 속성이 '{1}' 형식에 없을 수 있습니다. '{2}'을(를) 사용하시겠습니까?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 분배 특성의 '{0}' 속성을 대상 속성에 할당할 수 없습니다.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "내보낸 익명 클래스 형식의 '{0}' 속성은 비공개이거나 보호됨이 아닐 수 있습니다.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{0}' 형식의 '{1}' 속성을 '{2}' 인덱스 유형 '{3}'에 할당할 수 없습니다.", - "Property_0_was_also_declared_here_2733": "여기서도 '{0}' 속성이 선언되었습니다.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' 속성은 '{1}'의 기본 속성을 덮어씁니다. 의도적인 경우 이니셜라이저를 추가합니다. 그렇지 않으면 'declare' 한정자를 추가하거나 중복 선언을 제거합니다.", - "Property_assignment_expected_1136": "속성 할당이 필요합니다.", - "Property_destructuring_pattern_expected_1180": "속성 구조 파괴 패턴이 필요합니다.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "속성에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", - "Property_or_signature_expected_1131": "속성 또는 서명이 필요합니다.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "속성 값은 문자열 리터럴, 숫자 리터럴, 'true', 'false', 'null', 개체 리터럴 또는 배열 리터럴이어야 합니다.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5'를 대상으로 할 경우 'for-of', 분산 및 파괴의 반복 가능한 개체를 완벽히 지원합니다.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "내보낸 클래스의 공용 메서드 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "내보낸 클래스의 공용 메서드 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "내보낸 클래스의 공용 메서드의 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "내보낸 클래스의 공용 속성 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "내보낸 클래스의 공용 속성 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "내보낸 클래스의 공용 속성 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "내보낸 클래스의 공용 정적 메서드 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "내보낸 클래스에 있는 공용 정적 메서드 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "내보낸 클래스의 공용 정적 메서드 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "내보낸 클래스에 있는 공용 정적 속성 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "정규화된 이름 '{0}'은(는) 선행 '@param {object} {1}'과(와) 함께 사용해야 합니다.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "함수 매개 변수를 읽지 않으면 오류가 발생합니다.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "암시된 'any' 형식이 있는 식 및 선언에서 오류를 발생합니다.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "암시된 'any' 형식이 있는 'this' 식에서 오류를 발생합니다.", - "Range_out_of_order_in_character_class_1517": "문자 클래스의 범위가 순서를 벗어났습니다.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}'을 사용하도록 설정한 경우 형식을 다시 내보내려면 'export type'을 사용해야 합니다.", - "React_components_cannot_include_JSX_namespace_names_2639": "React 구성 요소에는 JSX 네임스페이스 이름을 포함할 수 없습니다.", - "Recommended_Options_6294": "권장 옵션", - "Redirect_output_structure_to_the_directory_6006": "출력 구조를 디렉터리로 리디렉션합니다.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript에서 자동으로 로드되는 프로젝트 수를 줄입니다.", - "Referenced_project_0_may_not_disable_emit_6310": "참조된 프로젝트 '{0}'은(는) 내보내기를 사용하지 않도록 설정할 수 없습니다.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "참조되는 프로젝트 '{0}'에는 \"composite\": true 설정이 있어야 합니다.", - "Referenced_via_0_from_file_1_1400": "'{1}' 파일에서 '{0}'을(를) 통해 참조되었습니다.", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. 가져오기 경로에 확장자를 추가하는 것을 고려하세요.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. '{0}'을(를) 사용하시겠습니까?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "감시 프로세스에서 디렉터리 목록을 제거합니다.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "감시 모드의 처리에서 파일 목록을 제거합니다.", - "Remove_all_unnecessary_override_modifiers_95163": "불필요한 'override' 한정자 모두 제거", - "Remove_all_unnecessary_uses_of_await_95087": "불필요한 'await' 사용 모두 제거", - "Remove_all_unreachable_code_95051": "접근할 수 없는 코드 모두 제거", - "Remove_all_unused_labels_95054": "사용되지 않는 레이블 모두 제거", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "관련 문제가 있는 모든 화살표 함수 본문에서 중괄호 제거", - "Remove_braces_from_arrow_function_95060": "화살표 함수에서 중괄호 제거", - "Remove_braces_from_arrow_function_body_95112": "화살표 함수 본문에서 중괄호 제거", - "Remove_import_from_0_90005": "'{0}'에서 가져오기 제거", - "Remove_override_modifier_95161": "'override' 한정자 제거", - "Remove_parentheses_95126": "괄호 제거", - "Remove_template_tag_90011": "템플릿 태그 제거", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 언어 서버에서 JavaScript 파일의 총 소스 코드 크기에 적용되는 20MB 제한을 제거합니다.", - "Remove_type_from_import_declaration_from_0_90055": "\"{0}\"의 가져오기 선언에서 '형식' 제거", - "Remove_type_from_import_of_0_from_1_90056": "\"{1}\"의 '{0}' 가져오기에서 '형식' 제거", - "Remove_type_parameters_90012": "형식 매개 변수 제거", - "Remove_unnecessary_await_95086": "불필요한 'await' 제거", - "Remove_unreachable_code_95050": "접근할 수 없는 코드 제거", - "Remove_unused_declaration_for_Colon_0_90004": "'{0}'의 사용되지 않는 선언 제거", - "Remove_unused_declarations_for_Colon_0_90041": "'{0}'의 사용되지 않는 선언 제거", - "Remove_unused_destructuring_declaration_90039": "사용되지 않는 구조 파괴 선언 제거", - "Remove_unused_label_95053": "사용되지 않는 레이블 제거", - "Remove_variable_statement_90010": "변수 문 제거", - "Rename_param_tag_name_0_to_1_95173": "'@param' 태그 이름 '{0}'의 이름을 '{1}'(으)로 바꿉니다.", - "Replace_0_with_Promise_1_90036": "'{0}'을(를) 'Promise<{1}>'(으)로 바꾸기", - "Replace_all_unused_infer_with_unknown_90031": "사용되지 않은 모든 'infer'를 'unknown'으로 바꾸기", - "Replace_import_with_0_95015": "가져오기를 '{0}'(으)로 바꿉니다.", - "Replace_infer_0_with_unknown_90030": "'infer {0}'을(를) 'unknown'으로 바꾸기", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "함수의 일부 코드 경로가 값을 반환하지 않는 경우 오류를 보고합니다.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch 문의 fallthrough case에 대한 오류를 보고합니다.", - "Report_errors_in_js_files_8019": ".js 파일의 오류를 보고합니다.", - "Report_errors_on_unused_locals_6134": "사용되지 않은 로컬 항목에 대한 오류를 보고합니다.", - "Report_errors_on_unused_parameters_6135": "사용되지 않은 매개 변수에 대한 오류를 보고합니다.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "다른 도구가 선언 파일을 간단하게 생성할 수 있도록 내보내기에서 충분한 주석이 필요합니다.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "요소 액세스를 사용하려면 인덱스 시그니처의 선언되지 않은 속성이 필요합니다.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "필수 형식 매개 변수는 선택적 형식 매개 변수 다음에 올 수 없습니다.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' 모듈에 대한 해결을 '{1}' 위치의 캐시에서 찾았습니다.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{1}' 위치의 캐시에서 형식 참조 지시어 '{0}'에 대한 해상도가 발견되었습니다.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "상대 이름이 아닌 이름을 확인하지 못했습니다. 최신 노드 확인 기능을 사용하지 않도록 설정하여 npm 라이브러리에 구성 업데이트가 필요한지 확인합니다.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "상대 이름이 아닌 이름을 확인하지 못했습니다. '--moduleResolution bundler'를 사용하여 프로젝트에 구성 업데이트가 필요한지 확인하려고 합니다.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "문자열 값 속성 이름에 대해서만 'keyof'를 확인합니다(숫자나 기호 아님).", - "Resolved_under_condition_0_6414": "조건 '{0}'에서 확인되었습니다.", - "Resolving_in_0_mode_with_conditions_1_6402": "조건이 {1}인 {0} 모드에서 확인하는 중입니다.", - "Resolving_module_0_from_1_6086": "======== '{1}'에서 '{0}' 모듈을 확인하는 중입니다. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "기본 URL '{1}' - '{2}'을(를) 기준으로 모듈 이름 '{0}'을(를) 확인하는 중입니다.", - "Resolving_real_path_for_0_result_1_6130": "'{0}'의 실제 경로를 확인하는 중입니다. 결과: '{1}'.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 파일 '{1}'을(를) 포함하는 형식 참조 지시어 '{0}'을(를) 확인하는 중입니다.' ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: '{2}' ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: 설정되지 않음 ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: '{1}' ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: 설정되지 않음 ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "사용자 지정 typeRoots를 지정하는 프로그램에 대한 형식 참조 지시문을 확인합니다. 'node_modules' 폴더에서 조회를 건너뜁니다.", - "Resolving_with_primary_search_path_0_6121": "기본 검색 경로 '{0}'을(를) 사용하여 확인하는 중입니다.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 매개 변수 '{0}'에는 암시적으로 'any[]' 형식이 포함됩니다.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 매개 변수 '{0}'은(는) 암시적으로 'any[]' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "Rest_types_may_only_be_created_from_object_types_2700": "rest 유형은 개체 형식에서만 만들 수 있습니다.", - "Return_type_annotation_circularly_references_itself_2577": "반환 형식 주석이 자신을 순환 참조합니다.", - "Return_type_must_be_inferred_from_a_function_95149": "반환 형식은 함수에서 유추되어야 합니다.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "내보낸 인터페이스에 있는 생성자 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "내보낸 인터페이스에 있는 생성자 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "생성자 시그니처의 반환 형식을 클래스의 인스턴스 형식에 할당할 수 있어야 합니다.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "내보낸 함수의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "내보낸 함수의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "내보낸 함수의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "내보낸 인터페이스에 있는 인덱스 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "내보낸 인터페이스에 있는 인덱스 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "내보낸 인터페이스에 있는 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "내보낸 인터페이스에 있는 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 외부 모듈 {2}의 이름 '{1}'을(를) 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 외부 모듈 {2}의 이름 '{1}'을(를) 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{1}'에서 '{0}' 모듈의 해결 방법을 '{2}위치 '의 캐시에 다시 사용하는 중이었으므로 해결되지 않았습니다.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중이었으므로 확인되지 않았습니다.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이므로 '{2}'(으)로 해결되었습니다.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중이며 해결되지 않았습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이므로 해결되지 않았습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 '{2}'(으)로 해결되었습니다.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.", - "Rewrite_all_as_indexed_access_types_95034": "인덱싱된 액세스 형식으로 모두 다시 작성", - "Rewrite_as_the_indexed_access_type_0_90026": "인덱싱된 액세스 형식 '{0}'(으)로 다시 작성", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "출력 파일의 해당 JavaScript에 해당하는 상대 가져오기 경로에서 '.ts', '.tsx', '.mts' 및 '.cts' 파일 확장자를 다시 작성합니다.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "??의 오른쪽 피연산자는 왼쪽 피연산자가 nullish가 되지 않으므로 연결할 수 없습니다.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "루트 디렉터리를 확인할 수 없어 기본 검색 경로를 건너뜁니다.", - "Root_file_specified_for_compilation_1427": "컴파일을 위해 지정된 루트 파일", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "전략", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "프로젝트의 증분 컴파일을 허용하도록 .tsbuildinfo 파일을 저장합니다.", - "Saw_non_matching_condition_0_6405": "비일치 조건 '{0}'을(를) 확인했습니다.", - "Scoped_package_detected_looking_in_0_6182": "범위가 지정된 패키지가 검색되었습니다. '{0}'에서 찾습니다.", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "대체 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "기본 설정 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "자세한 내용은 https://aka.ms/tsconfig/module을 참조하세요.", - "Selection_is_not_a_valid_statement_or_statements_95155": "선택 항목이 유효한 하나의 문 또는 여러 문이 아닙니다.", - "Selection_is_not_a_valid_type_node_95133": "선택 영역이 유효한 형식 노드가 아닙니다.", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "내보낸 JavaScript의 JavaScript 언어 버전을 설정하고 호환되는 라이브러리 선언을 포함합니다.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript에서 메시지 언어를 설정합니다. 이는 내보내기에 영향을 주지 않습니다.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "구성 파일의 'module' 옵션을 '{0}'(으)로 설정", - "Set_the_newline_character_for_emitting_files_6659": "파일을 내보내기 위한 줄 바꿈 문자를 설정합니다.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "구성 파일의 'target' 옵션을 '{0}'(으)로 설정", - "Setters_cannot_return_a_value_2408": "Setter가 값을 반환할 수 없습니다.", - "Show_all_compiler_options_6169": "모든 컴파일러 옵션을 표시합니다.", - "Show_diagnostic_information_6149": "진단 정보를 표시합니다.", - "Show_verbose_diagnostic_information_6150": "자세한 진단 정보를 표시합니다.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "빌드될 항목 표시(또는 '--clean'으로 지정된 경우 삭제될 항목 표시)", - "Signature_0_must_be_a_type_predicate_1224": "'{0}' 시그니처는 형식 조건자여야 합니다.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "서명 선언은 TypeScript 파일에서만 사용할 수 있습니다.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "업스트림 프로젝트에서 오류 발생 시 다운스트림 프로젝트 빌드를 건너뜁니다.", - "Skip_type_checking_all_d_ts_files_6693": "모든 .d.ts 파일의 형식 검사를 건너뜁니다.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript에 포함된 .d.ts 파일의 형식 검사를 건너뜁니다.", - "Skip_type_checking_of_declaration_files_6012": "선언 파일 형식 검사를 건너뜁니다.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' 프로젝트의 빌드는 '{1}' 종속성에 오류가 있기 때문에 건너뜁니다.", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트의 빌드를 건너뛰는 중", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "절대 URI처럼 보이는 '{0}' 모듈을 건너뛰는 중입니다. 대상 파일 형식은 {1}입니다.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", - "Source_has_0_element_s_but_target_allows_only_1_2619": "소스에 {0}개 요소가 있지만, 대상에서 {1}개만 허용합니다.", - "Source_has_0_element_s_but_target_requires_1_2618": "소스에 {0}개 요소가 있지만, 대상에 {1}개가 필요합니다.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "소스가 대상에 있는 {0} 위치의 필수 요소와 일치하는 항목을 제공하지 않습니다.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "소스가 대상에 있는 {0} 위치의 가변 인자 요소와 일치하는 항목을 제공하지 않습니다.", - "Specify_ECMAScript_target_version_6015": "ECMAScript 대상 버전을 지정합니다.", - "Specify_JSX_code_generation_6080": "JSX 코드 생성을 지정합니다.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "모든 출력을 하나의 JavaScript 파일로 묶는 파일을 지정하세요. 'declaration'이 true이면 모든 .d.ts 출력을 묶는 파일도 지정합니다.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "컴파일에 포함할 파일과 일치하는 GLOB 패턴 목록을 지정합니다.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "포함할 언어 서비스 플러그 인 목록을 지정합니다.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "대상 런타임 환경을 설명하는 번들 라이브러리 선언 파일 세트를 지정합니다.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "추가 검색 위치로 가져오기를 다시 매핑할 항목 집합을 지정합니다.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "프로젝트의 경로를 지정하는 개체 배열을 지정합니다. 프로젝트 참조에 사용됩니다.", - "Specify_an_output_folder_for_all_emitted_files_6678": "내보낸 모든 파일의 출력 폴더를 지정합니다.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "유형에만 사용되는 가져오기에 대한 방출/확인 동작을 지정합니다.", - "Specify_file_to_store_incremental_compilation_information_6380": "증분 컴파일 정보를 저장할 파일 지정", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript가 지정된 모듈 지정자에서 파일을 검색하는 방법을 지정합니다.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "재귀 파일 감시 기능이 없는 시스템에서 디렉터리를 감시하는 방법을 지정합니다.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript 감시 모드의 작동 방식을 지정합니다.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "컴파일에 포함할 라이브러리 파일을 지정합니다.", - "Specify_module_code_generation_6016": "모듈 코드 생성을 지정합니다.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*'를 사용할 때 JSX 팩토리 함수를 가져오기 위해 사용되는 모듈 지정자를 지정합니다.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types'와 같은 역할을 하는 여러 폴더를 지정합니다.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "설정이 상속되는 기본 구성 파일에 대한 하나 이상의 경로 또는 노드 모듈 참조를 지정합니다.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "선언 파일의 자동 인식 옵션을 지정합니다.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "파일 시스템 이벤트를 사용하여 만들지 못할 경우 폴링 조사식을 만들기 위한 전략 지정: 'FixedInterval'(기본값), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 디렉터리를 감시하기 위한 전략 지정: 'UseFsEvents'(기본값), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "파일을 감시하기 위한 전략 지정: 'FixedPollingInterval'(기본값), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 내보내기를 대상으로 할 때 조각에 사용되는 JSX 조각 참조를 지정합니다(예: 'React.Fragment' 또는 'Fragment').", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 내보내기를 대상으로 하는 경우 사용할 JSX 팩터리 함수를 지정합니다(예: 'React.createElement' 또는 'h').", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 방출을 대상으로 할 때 사용되는 JSX 팩토리 함수를 지정하세요. 'React.createElement' 또는 'h'.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'JsxFactory' 컴파일러 옵션이 지정된 상태로 'react' JSX 내보내기를 대상으로 설정할 때 사용할 JSX 조각 팩터리 함수를 지정합니다(예: 'Fragment').", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "상대적이지 않은 모듈 이름을 확인할 기본 디렉터리를 지정합니다.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "파일을 내보낼 때 사용할 줄 시퀀스의 끝 지정: 'CRLF'(dos) 또는 'LF'(unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "소스 위치 대신 디버거가 TypeScript 파일을 찾아야 하는 위치를 지정하세요.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "생성된 위치 대신 디버거가 맵 파일을 찾아야 하는 위치를 지정하세요.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules'에서 JavaScript 파일을 확인하는 데 사용되는 최대 폴더 깊이를 지정합니다. 'allowJs'에만 적용 가능합니다.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' 및 'jsxs' 팩터리 함수를 가져오는 데 사용할 모듈 지정자를 지정합니다(예: react).", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement'에 대해 호출된 개체를 지정합니다. '반응' JSX 방출을 대상으로 할 때만 적용됩니다.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "생성된 선언 파일의 출력 디렉터리를 지정합니다.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo 증분 컴파일 파일의 경로를 지정합니다.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "입력 파일의 루트 디렉터리를 지정하세요. --outDir이 포함된 출력 디렉터리 구조를 제어하는 데 사용됩니다.", - "Specify_the_root_folder_within_your_source_files_6690": "소스 파일 내에서 루트 폴더를 지정합니다.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "디버거의 루트 경로를 지정하여 참조 소스 코드를 찾습니다.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "소스 파일에서 참조하지 않고 포함할 형식 패키지 이름을 지정합니다.", - "Specify_what_JSX_code_is_generated_6646": "생성되는 JSX 코드를 지정합니다.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "시스템에 원시 파일 감시자가 부족한 경우 감시자가 사용해야 하는 접근 방법을 지정합니다.", - "Specify_what_module_code_is_generated_6657": "생성되는 모듈 코드를 지정합니다.", - "Split_all_invalid_type_only_imports_1367": "잘못된 형식 전용 가져오기 모두 분할", - "Split_into_two_separate_import_declarations_1366": "두 개의 개별 가져오기 선언으로 분할", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 식에서 Spread 연산자는 ECMAScript 5 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", - "Spread_types_may_only_be_created_from_object_types_2698": "spread 유형은 개체 형식에서만 만들 수 있습니다.", - "Starting_compilation_in_watch_mode_6031": "감시 모드에서 컴파일을 시작하는 중...", - "Statement_expected_1129": "문이 필요합니다.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "앰비언트 컨텍스트에서는 문이 허용되지 않습니다.", - "Static_members_cannot_reference_class_type_parameters_2302": "정적 멤버는 클래스 형식 매개 변수를 참조할 수 없습니다.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "정적 속성 '{0}'이(가) 생성자 함수 '{1}'의 기본 제공 속성 'Function.{0}'과(와) 충돌합니다.", - "Stricter_Typechecking_Options_6292": "더 엄격한 형식 검사 옵션", - "String_literal_expected_1141": "문자열 리터럴이 필요합니다.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' 플래그가 'es2015' 또는 'es2020'으로 설정된 경우 문자열 리터럴 가져오기 및 내보내기 이름은 지원되지 않습니다.", - "String_literal_with_double_quotes_expected_1327": "큰따옴표로 묶은 문자열 리터럴이 필요합니다.", - "Style_Options_6293": "스타일 옵션", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "색과 컨텍스트를 사용하여 오류 및 메시지를 스타일화합니다(실험적).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "en 대시가 있는 경우 하위 패턴 플래그가 있어야 합니다.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "후속 속성 선언에 같은 형식이 있어야 합니다. '{0}' 속성이 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "후속 변수 선언에 같은 형식이 있어야 합니다. '{0}' 변수가 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' 패턴에 대한 '{0}' 대체의 형식이 잘못되었습니다. 'string'이 필요한데 '{2}'을(를) 얻었습니다.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "'{1}' 패턴의 '{0}' 대체에는 '*' 문자를 최대 하나만 사용할 수 있습니다.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "'{0}' 패턴에 대한 대체는 배열이 되어야 합니다.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "패턴 '{0}'에 대한 대체에는 배열이 비어 있지 않아야 합니다.", - "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json 파일을 만들었습니다.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "생성자 밖이나 생성자 내부에 중첩된 함수에서는 Super 호출이 허용되지 않습니다.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "개체 리터럴에 대한 초과 속성 검사를 생략합니다.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "인덱스 시그니처가 없는 개체 인덱싱에 대한 noImplicitAny 오류를 표시하지 않습니다.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "인덱스 서명이 없는 개체를 인덱싱할 때 'noImplicitAny' 오류를 억제합니다.", - "Switch_each_misused_0_to_1_95138": "잘못 사용된 각 '{0}'을(를) '{1}'(으)로 전환", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 동기적으로 콜백을 호출하고 디렉터리 감시자의 상태를 업데이트합니다.", - "Syntax_Colon_0_6023": "구문: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' 태그는 '{1}'개 이상의 인수가 필요한데 JSX 팩터리 '{2}'이(가) 최대 '{3}'개를 제공합니다.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "태그가 지정된 템플릿 식은 선택적 체인에서 사용할 수 없습니다.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "대상에서 {0}개 요소만 허용하지만, 소스에 더 많이 있을 수 있습니다.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "대상에 {0}개 요소가 필요하지만, 소스에 더 적게 있을 수 있습니다.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "대상 서명이 너무 적은 인수를 제공합니다. {0} 이상이 필요하지만 {1}을(를) 받았습니다.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 연산자는 'symbol' 유형에 적용될 수 없습니다.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 연산자는 부울 형식에 사용할 수 없습니다. 대신 '{1}'을(를) 사용하세요.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "비동기 반복기의 '{0}' 속성은 메서드여야 합니다.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "반복기의 '{0}' 속성은 메서드여야 합니다.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 형식은 할당할 수 있는 다른 형식이 거의 없습니다. 대신 'any' 형식을 사용할까요?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "유니코드(u) 플래그와 유니코드 집합(v) 플래그를 동시에 설정할 수 없습니다.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' 개체는 ES5의 화살표 함수에서 참조할 수 없습니다. 표준 함수 식을 사용해 보세요.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' 개체는 ES5의 비동기 함수 또는 메서드에서 참조할 수 없습니다. 표준 함수 또는 메서드를 사용해 보세요.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 문의 본문이 빈 문이면 안 됩니다.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "이 구현에 대한 호출이 성공하겠지만, 오버로드의 구현 시그니처는 외부에 표시되지 않습니다.", - "The_character_set_of_the_input_files_6163": "입력 파일의 문자 집합입니다.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "포함하는 화살표 함수는 'this'의 전역 값을 캡처합니다.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "제어 흐름 분석에 대해 포함된 함수 또는 모듈 본문이 너무 큽니다.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "현재 파일은 CommonJS 모듈이며 최상위 수준에서 'await'를 사용할 수 없습니다.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "현재 파일은 가져오기에서 'require' 호출을 생성하는 CommonJS 모듈입니다. 그러나 참조된 파일은 ECMAScript 모듈이며 'require'로 가져올 수 없습니다. 대신 동적 'import(\"{0}\")' 호출을 작성하는 것이 좋습니다.", - "The_current_host_does_not_support_the_0_option_5001": "현재 호스트가 '{0}' 옵션을 지원하지 않습니다.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "사용하려는 '{0}'의 선언이 여기서 정의됩니다.", - "The_declaration_was_marked_as_deprecated_here_2798": "선언이 여기에 사용되지 않음으로 표시되었습니다.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "필요한 형식은 여기에서 '{1}' 형식에 선언된 '{0}' 속성에서 가져옵니다.", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "필요한 형식은 이 시그니처의 반환 형식에서 가져옵니다.", - "The_expected_type_comes_from_this_index_signature_6501": "필요한 형식은 이 인덱스 시그니처에서 가져옵니다.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "내보내기 할당의 식은 앰비언트 컨텍스트의 식별자 또는 정규화된 이름이어야 합니다.", - "The_file_is_in_the_program_because_Colon_1430": "파일은 다음과 같은 이유로 프로그램에 있습니다.", - "The_files_list_in_config_file_0_is_empty_18002": "'{0}' 구성 파일의 '파일' 목록이 비어 있습니다.", - "The_first_export_default_is_here_2752": "첫 번째 내보내기 기본값은 여기에 있습니다.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "프라미스에서 'then' 메서드의 첫 번째 매개 변수는 콜백이어야 합니다.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "전역 형식 'JSX.{0}'에 속성이 둘 이상 있을 수 없습니다.", - "The_implementation_signature_is_declared_here_2750": "여기에서는 구현 시그니처가 선언됩니다.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "'import.meta' 메타 속성은 CommonJS 출력으로 빌드될 파일에서 허용되지 않습니다.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "'import.meta' 메타 속성은 '--module' 옵션이 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20' 또는 'nodenext'인 경우에만 허용됩니다.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}'의 유추된 형식 이름을 지정하려면 '{1}'에 대한 참조가 있어야 합니다. 이식하지 못할 수 있습니다. 형식 주석이 필요합니다.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}'의 유추된 형식이 일반적으로 직렬화될 수 없는 순환 구조가 있는 형식을 참조합니다. 형식 주석이 필요합니다.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}'의 유추 형식이 액세스할 수 없는 '{1}' 형식을 참조합니다. 형식 주석이 필요합니다.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "이 노드의 유추된 형식이 컴파일러가 직렬화할 최대 길이를 초과합니다. 명시적 형식 주석이 필요합니다.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 선언의 이니셜라이저는 '[Symbol.dispose]()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 선언의 이니셜라이저는 '[Symbol.asyncDispose]()' 또는 '[Symbol.dispose]()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "속성 '{1}'이(가) 여러 구성원에 있고 일부 구성원에서는 프라이빗 상태이므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "일부 구성원에 속성 '{1}'에 충돌하는 형식이 있으므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'내장' 키워드는 컴파일러에서 제공하는 내장 형식을 선언하는 데에만 사용할 수 있습니다.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "'JsxFactory' 컴파일러 옵션과 함께 JSX 조각을 사용하려면 'jsxFragmentFactory' 컴파일러 옵션을 제공해야 합니다.", - "The_last_overload_gave_the_following_error_2770": "마지막 오버로드에서 다음 오류가 발생했습니다.", - "The_last_overload_is_declared_here_2771": "여기서 마지막 오버로드가 선언됩니다.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 문의 왼쪽에는 구조 파괴 패턴을 사용할 수 없습니다.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for... in' 문의 왼쪽은 'using' 선언일 수 없습니다.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for... in' 문의 왼쪽은 'await using' 선언일 수 없습니다.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 문의 왼쪽은 'string' 또는 'any' 형식이어야 합니다.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 문의 왼쪽은 'async'일 수 없습니다.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "산술 연산의 왼쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "할당 식의 왼쪽은 선택적 속성 액세스일 수 없습니다.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "할당 식의 왼쪽은 변수 또는 속성 액세스여야 합니다.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 식의 왼쪽은 오른쪽 '[Symbol.hasInstance]' 메서드의 첫 번째 인수에 할당할 수 있어야 합니다.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 식 왼쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 합니다.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "사용자에게 메시지를 표시할 때 사용되는 로캘입니다(예: 'en-us').", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules에서 검색하고 JavaScript 파일을 로드할 최대 종속성 깊이입니다.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 연산자의 피연산자는 프라이빗 식별자일 수 없습니다.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 연산자의 피연산자는 읽기 전용 속성일 수 없습니다.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 연산자의 피연산자는 속성 참조여야 합니다.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 연산자의 피연산자는 선택 사항이어야 합니다.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "증분 또는 감소 연산자의 피연산자는 선택적 속성 액세스일 수 없습니다.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "증가 또는 감소 연산자의 피연산자는 변수 또는 속성 액세스여야 합니다.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "여기서 파서는 '{0}' 토큰과 일치하는 '{1}'을(를) 찾아야 합니다.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 내보내기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 가져오기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "철자가 동일한 다른 프라이빗 식별자에서 섀도 처리되기 때문에 이 클래스 내의 '{1}' 형식에서 '{0}' 속성에 액세스할 수 없습니다.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "매개 변수 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "속성 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "비동기 함수의 반환 형식은 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다. 'Promise<{0}>'을(를) 쓰려고 했습니까?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 문 오른쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 하는데, 여기에 '{0}' 형식이 있습니다.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "산술 연산 오른쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 식의 오른쪽은 'any' 형식, 클래스, 함수 또는 'Function' 인터페이스 형식에 할당할 수 있는 다른 형식이거나 'Symbol.hasInstance' 메서드가 있는 개체 형식이어야 합니다.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 식의 오른쪽은 인스턴스화 식이 아니어야 합니다.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 파일의 루트 값은 개체여야 합니다.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0}이(가) 필요합니다.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0} 이상이 필요합니다.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "여기서는 '{0}'의 섀도 선언이 정의됩니다.", - "The_signature_0_of_1_is_deprecated_6387": "'{1}'의 시그니처 '{0}'은(는) 사용되지 않습니다.", - "The_specified_path_does_not_exist_Colon_0_5058": "지정된 경로가 없습니다. '{0}'.", - "The_tag_was_first_specified_here_8034": "태그가 처음에 여기에 지정되었습니다.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "개체 rest 할당의 대상은 선택적 속성 액세스일 수 없습니다.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "개체 rest 할당의 대상은 변수 또는 속성 액세스여야 합니다.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "'{0}' 형식의 'this' 컨텍스트를 메서드의 '{1}' 형식 'this'에 할당할 수 없습니다.", - "The_this_types_of_each_signature_are_incompatible_2685": "각 시그니처의 'this' 형식이 호환되지 않습니다.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' 형식은 'readonly'이며 변경 가능한 형식 '{1}'에 할당할 수 없습니다.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "export 문에 'export type'이 사용될 때 명명된 내보내기에서 'type' 한정자를 사용할 수 없습니다.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "import 문에 'import type'이 사용되는 경우 'type' 수정자는 명명된 가져오기에 사용할 수 없습니다.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "속성 '{0}'을(를) 직렬화할 수 없기 때문에 이 노드의 유형을 직렬화할 수 없습니다.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "비동기 반복기의 '{0}()' 메서드에서 반환하는 형식은 'value' 속성이 있는 형식에 대한 프라미스여야 합니다.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "반복기의 '{0}()' 메서드에 의해 반환되는 형식에는 'value' 속성이 있어야 합니다.", - "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}'의 형식은 해당 형식 간에 호환되지 않습니다.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}'에서 반환되는 형식은 해당 형식 간에 호환되지 않습니다.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "여기서는 '{0}' 값을 사용할 수 없습니다.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' 문은 지원되지 않습니다. 'with' 블록의 모든 기호가 'any' 형식이 됩니다.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}'에 형식이 있지만 현재 'moduleResolution' 설정에서 이 결과를 확인할 수 없습니다. 'node16', 'nodenext' 또는 'bundler'로 업데이트하는 것이 좋습니다.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}'에 형식이 있지만 package.json \"내보내기\"를 준수할 때 이 결과를 확인할 수 없습니다. '{1}' 라이브러리는 package.json 또는 입력을 업데이트해야 할 수 있습니다.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "이 정규식에는 이름이 '{0}'인 캡처 그룹이 없습니다.", - "There_is_nothing_available_for_repetition_1507": "반복에 사용할 수 있는 항목이 없습니다.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "이 JSX 태그를 사용하려면 '{0}'이(가) 범위에 있어야 하지만 찾을 수 없습니다.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "이 JSX 태그를 사용하려면 모듈 경로 '{0}'이(가) 있어야 하지만 찾을 수 없습니다. 적절한 패키지에 대해 형식이 설치되어 있는지 확인합니다.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "이 JSX 태그의 '{0}' 속성에는 '{1}' 형식의 자식 하나가 필요하지만, 여러 자식이 제공되었습니다.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "이 JSX 태그의 '{0}' 속성에는 여러 자식이 있어야 하는 '{1}' 형식이 필요하지만, 단일 자식만 제공되었습니다.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 캡처 그룹이 없습니다.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 {0} 캡처 그룹만 있습니다.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "이 이진 식은 nullish가 되지 않습니다. 괄호가 누락되었나요?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "이 문자는 정규식에서 이스케이프할 수 없습니다.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}'이(가) '{1}'과(와) 겹치지 않으므로 이 비교는 의도하지 않은 것 같습니다.", - "This_condition_will_always_return_0_2845": "이 조건은 항상 '{0}'을(를) 반환합니다.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript는 값이 아닌 참조로 개체를 비교하므로 이 조건은 항상 '{0}'을(를) 반환합니다.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "이 '{0}'(은)는 항상 정의되어 있으므로 이 조건은 항상 true를 반환합니다.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "함수가 항상 정의되므로 이 조건은 항상 true를 반환합니다. 대신 호출하시겠어요?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "이 생성자 함수는 클래스 선언으로 변환될 수 있습니다.", - "This_expression_is_always_nullish_2871": "이 식은 항상 nullish입니다.", - "This_expression_is_never_nullish_2881": "이 표현식은 nullish가 되지 않습니다.", - "This_expression_is_not_callable_2349": "이 식은 호출할 수 없습니다.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "이 식은 'get' 접근자이므로 호출할 수 없습니다. '()' 없이 사용하시겠습니까?", - "This_expression_is_not_constructable_2351": "이 식은 생성할 수 없습니다.", - "This_file_already_has_a_default_export_95130": "이 파일에 이미 기본 내보내기가 있습니다.", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "이 가져오기 경로는 다른 프로젝트로 확인되고 프로젝트의 출력 파일 간의 상대 경로가 입력 파일 간의 상대 경로와 동일하지 않으므로 다시 쓰기에는 안전하지 않습니다.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "이 가져오기는 '{0}' 확장을 사용하여 입력 TypeScript 파일로 확인하지만 상대 경로가 아니므로 내보내는 동안 다시 작성되지 않습니다.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "확대되는 선언입니다. 확대하는 선언을 같은 파일로 이동하는 것이 좋습니다.", - "This_kind_of_expression_is_always_falsy_2873": "이러한 종류의 식은 항상 거짓입니다.", - "This_kind_of_expression_is_always_truthy_2872": "이러한 종류의 식은 항상 사실입니다.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "비동기 함수로 변환될 수 있습니다.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다. ‘{1}’을(를) 의미했나요?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "이 멤버는 포함하는 클래스 '{0}'이(가) 다른 클래스를 확장하지 않기 때문에 '@override' 태그가 있는 JSDoc 주석을 가질 수 없습니다.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "이 멤버는 이름이 동적이기 때문에 '@override' 태그가 포함된 JSDoc 주석을 가질 수 없습니다.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다. '{1}'였습니까?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "이 멤버는 포함하는 클래스 '{0}'이(가) 다른 클래스를 확장하지 않으므로 'override' 한정자를 포함할 수 없습니다.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "이름이 동적이므로 이 멤버에는 'override' 한정자를 사용할 수 없습니다.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "이 멤버는 기본 클래스 '{0}'의 멤버를 재정의하므로 '@override' 태그가 있는 JSDoc 주석이 있어야 합니다.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "이 멤버는 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "이 멤버는 기본 클래스 '{0}'에 선언된 추상 메서드를 재정의하므로 'override' 한정자를 포함해야 합니다.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "이 모듈은 '{0}' 플래그를 켜고 기본 내보내기를 참조하여 ECMAScript 가져오기/내보내기를 통해서만 참조할 수 있습니다.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "이 모듈은 'export ='를 사용하여 선언되었으며 '{0}' 플래그를 사용하는 경우에만 기본 가져오기와 함께 사용할 수 있습니다.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "이 작업은 간소화할 수 있습니다. 이 교대 근무는 '{0} {1} {2}'(와)과 동일합니다.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "이 오버로드는 반환 형식 주석이 없으므로 '{0}' 형식을 암시적으로 반환합니다.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "이 오버로드 시그니처는 해당 구현 시그니처와 호환되지 않습니다.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "이 매개 변수는 'use strict' 지시문에서 사용할 수 없습니다.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "이 매개변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 '@override' 태그가 있는 JSDoc 주석이 있어야 합니다.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "이 매개 변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "이 정규식 플래그는 하위 패턴 내에서 토글할 수 없습니다.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "이 정규식 플래그는 '{0}' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "이 상대 가져오기 경로는 파일 이름처럼 보이지만 실제로는 \"{0}\"(으)로 확인되므로 다시 작성하는 것이 안전하지 않습니다.", - "This_spread_always_overwrites_this_property_2785": "이 스프레드는 항상 이 속성을 덮어씁니다.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly'를 사용하도록 설정한 경우에는 이 구문을 사용할 수 없습니다.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 후행 쉼표 또는 명시적 제약 조건을 추가합니다.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 대신 'as' 식을 사용하세요.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "이 구문에는 가져온 도우미가 필요하지만 '{0}' 모듈을 찾을 수 없습니다.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "이 구문에는 '{0}'에 없는 '{1}'(이)라는 가져온 도우미가 필요합니다. '{0}'의 버전을 업그레이드하는 것이 좋습니다.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "이 구문에는 {2} 매개 변수가 포함된 '{1}'(이)라는 가져온 도우미가 필요하지만, 이 도우미는 '{0}'에 있는 도우미와 호환되지 않습니다. '{0}' 버전을 업그레이드하는 것이 좋습니다.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "이 형식 매개 변수에는 `extends {0}` 제약 조건이 필요할 수 있습니다.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "이 '가져오기' 사용은 유효하지 않습니다. 'import()' 호출을 작성할 수 있지만 괄호가 있어야 하며 유형 인수를 가질 수 없습니다.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "이 파일을 ECMAScript 모듈로 변환하려면 `\"type\": \"module\"` 필드를 '{0}'에 추가하세요.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `\"type\": \"module\"` 필드를 '{1}'에 추가하세요.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "이 파일을 ECMAScript 모듈로 변환하려면 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "최상위 'await' 식은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "최상위 'await using' 문은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 파일의 최상위 수준 선언은 'declare' 또는 'export' 한정자로 시작해야 합니다.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "최상위 'for await' 루프는 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", - "Trailing_comma_not_allowed_1009": "후행 쉼표는 허용되지 않습니다.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "각 파일을 별도 모듈로 변환 컴파일합니다('ts.transpileModule'과 유사).", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "해당 항목이 있는 경우 'npm i --save-dev @types/{1}'을(를) 시도하거나, 'declare module '{0}';'을(를) 포함하는 새 선언(.d.ts) 파일 추가", - "Trying_other_entries_in_rootDirs_6110": "'rootDirs'의 다른 항목을 시도하는 중입니다.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' 대체를 시도하는 중입니다. 후보 모듈 위치: '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "길이가 '{1}'인 튜플 형식 '{0}'의 인덱스 '{2}'에 요소가 없습니다.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "튜플 형식 인수가 자신을 순환 참조합니다.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' 형식은 '--downlevelIteration' 플래그 또는 'es2015' 이상의 '--target'을 사용하는 경우에만 반복할 수 있습니다.", - "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' 형식을 인덱스 형식으로 사용할 수 없습니다.", - "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' 형식을 인덱스 형식 '{1}'에 사용할 수 없습니다.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' 형식이 '{1}' 제약 조건을 만족하지 않습니다.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "형식 '{0}'이(가) 필요한 형식 '{1}'을(를) 충족하지 않습니다.", - "Type_0_has_no_call_signatures_2757": "'{0}' 형식에 호출 시그니처가 없습니다.", - "Type_0_has_no_construct_signatures_2761": "'{0}' 형식에 구문 시그니처가 없습니다.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' 형식에 '{1}' 형식에 대한 일치하는 인덱스 시그니처가 없습니다.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' 유형에 '{1}' 유형과 공통적인 속성이 없습니다.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "유형 '{0}'에는 유형 인수 목록을 적용할 수 있는 서명이 없습니다.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "'{0}' 형식은 제네릭이며 읽기용으로만 인덱싱할 수 있습니다.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' 형식에 '{1}' 형식의 {2} 속성이 없습니다.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' 형식에 '{1}' 형식의 {2} 외 {3}개 속성이 없습니다.", - "Type_0_is_not_a_constructor_function_type_2507": "'{0}' 형식은 생성자 함수 형식이 아닙니다.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "'{0}' 형식은 Promise 호환 생성자 값을 참조하지 않으므로 ES5에서 유효한 비동기 함수 반환 형식이 아닙니다.", - "Type_0_is_not_an_array_type_2461": "'{0}' 형식은 배열 형식이 아닙니다.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아닙니다.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아니거나, 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 없습니다.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "'{0}' 형식은 배열 형식이 아니거나 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 없습니다.", - "Type_0_is_not_assignable_to_type_1_2322": "'{0}' 형식은 '{1}' 형식에 할당할 수 없습니다.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' 형식은 '{1}' 형식에 할당할 수 없습니다. '{2}'을(를) 의미했나요?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' 형식을 '{1}' 형식에 할당할 수 없습니다. 이름이 같은 2개의 서로 다른 형식이 있지만 서로 관련은 없습니다.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "'{0}' 형식은 가변성 주석에 암시된 대로 '{1}' 형식에 할당할 수 없습니다.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "'{0}' 형식은 계산 열거형 멤버 값에 필요하므로 '{1}' 형식에 할당할 수 없습니다.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 유형에 'undefined'를 추가하는 것을 고려하세요.", - "Type_0_is_not_comparable_to_type_1_2678": "'{0}' 형식을 '{1}' 형식과 비교할 수 없습니다.", - "Type_0_is_not_generic_2315": "'{0}' 형식이 제네릭이 아닙니다.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "형식 '{0}'은(는) 'in' 연산자의 오른쪽 피연산자로 허용되지 않는 기본 값을 나타낼 수 있습니다.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "'{0}' 형식에는 비동기 반복기를 반환하는 '[Symbol.asyncIterator]()' 메서드가 있어야 합니다.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' 형식에는 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 있어야 합니다.", - "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' 형식에서 '{1}' 시그니처에 대한 일치하는 항목을 제공하지 않습니다.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Type '{0}' 형식은 자기 자신을 기본 형식으로 재귀적으로 참조합니다.", - "Type_Checking_6248": "형식 검사", - "Type_alias_0_circularly_references_itself_2456": "'{0}' 형식 별칭은 순환적으로 자신을 참조합니다.", - "Type_alias_must_be_given_a_name_1439": "형식 별칭에 이름을 지정해야 합니다.", - "Type_alias_name_cannot_be_0_2457": "형식 별칭 이름은 '{0}'일 수 없습니다.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "형식 별칭은 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "형식 주석은 생성자 선언에 표시될 수 없습니다.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "형식 주석은 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_argument_expected_1140": "형식 인수가 필요합니다.", - "Type_argument_list_cannot_be_empty_1099": "형식 인수 목록은 비워 둘 수 없습니다.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "형식 인수는 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}'의 형식 인수가 자신을 순환 참조합니다.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "형식 어설션 식은 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "소스의 {0} 위치에 있는 형식이 대상의 {1} 위치에 있는 형식과 호환되지 않습니다.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "소스의 {0}~{1} 위치에 있는 형식이 대상의 {2} 위치에 있는 형식과 호환되지 않습니다.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' 프라이빗 이름이 포함된 형식은 --isolatedDeclarations와 함께 사용할 수 없습니다.", - "Type_declaration_files_to_be_included_in_compilation_6124": "컴파일에 포함할 선언 파일을 입력하세요.", - "Type_expected_1110": "형식이 필요합니다.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "유형 가져오기 어설션에는 값이 '가져오기' 또는 '요구'인 정확히 하나의 키('resolution-mode')가 있어야 합니다.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "CommonJS 모듈에서 ECMAScript 모듈의 형식 가져오기에는 'resolution-mode' 특성이 있어야 합니다.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "형식 인스턴스화는 깊이가 매우 깊으며 무한할 수도 있습니다.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "형식은 자체 'then' 메서드의 처리 콜백에서 직간접적으로 참조됩니다.", - "Type_library_referenced_via_0_from_file_1_1402": "'{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId가 '{2}'인 '{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "계산된 속성 값의 형식은 '{1}' 형식에 할당할 수 없는 '{0}'입니다.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "인스턴스 멤버 변수 '{0}'의 형식은 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*'의 반복되는 요소 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "'{0}' 속성의 형식은 매핑된 형식 '{1}'에서 순환적으로 자신을 참조합니다.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "비동기 생성기에 있는 'yield' 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "CommonJS 모듈에서 ECMAScript 모듈의 형식 전용 가져오기에는 'resolution-mode' 특성이 있어야 합니다.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "형식이 이 가져오기에서 시작됩니다. 네임스페이스 스타일 가져오기는 호출하거나 생성할 수 없으며, 런타임에 오류를 초래합니다. 여기서는 대신 기본 가져오기 또는 가져오기 require를 사용하는 것이 좋습니다.", - "Type_parameter_0_has_a_circular_constraint_2313": "형식 매개 변수 '{0}'에 순환 제약 조건이 있습니다.", - "Type_parameter_0_has_a_circular_default_2716": "형식 매개 변수 '{0}'에 순환 기본값이 있습니다.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "내보낸 인터페이스에 있는 호출 시그니처의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "내보낸 인터페이스에 있는 생성자 시그니처의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "내보낸 클래스의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "내보낸 함수의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "내보낸 인터페이스의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "내보낸 매핑된 개체 형식의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 사용 중입니다.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "내보낸 형식 별칭의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "내보낸 인터페이스에 있는 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "내보낸 클래스에 있는 공용 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "내보낸 클래스에 있는 공용 정적 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "Type_parameter_declaration_expected_1139": "형식 매개 변수 선언이 필요합니다.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "형식 매개 변수 선언은 TypeScript 파일에서만 사용할 수 있습니다.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "형식 매개 변수 기본값은 이전에 선언된 형식 매개 변수만 참조할 수 있습니다.", - "Type_parameter_list_cannot_be_empty_1098": "형식 매개 변수 목록은 비워 둘 수 없습니다.", - "Type_parameter_name_cannot_be_0_2368": "형식 매개 변수 이름은 '{0}'일 수 없습니다.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "형식 매개 변수는 생성자 선언에 표시될 수 없습니다.", - "Type_predicate_0_is_not_assignable_to_1_1226": "형식 조건자 '{0}'을(를) '{1}'에 할당할 수 없습니다.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "형식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.", - "Type_reference_directive_0_was_not_resolved_6120": "======== 형식 참조 지시문 '{0}'이(가) 확인되지 않았습니다. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 형식 참조 지시문 '{0}'이(가) '{1}'(으)로 확인되었습니다. 주: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 형식 참조 지시문 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. 주: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "형식 만족 식은 TypeScript 파일에서만 사용할 수 있습니다.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "유형은 JavaScript 파일의 내보내기 선언에 나타날 수 없습니다.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "형식에 별도의 프라이빗 속성 '{0}' 선언이 있습니다.", - "Types_of_construct_signatures_are_incompatible_2419": "구문 시그니처 형식이 호환되지 않습니다.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "'{0}' 및 '{1}' 매개 변수의 형식이 호환되지 않습니다.", - "Types_of_property_0_are_incompatible_2326": "'{0}' 속성의 형식이 호환되지 않습니다.", - "Unable_to_open_file_0_6050": "'{0}' 파일을 열 수 없습니다.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "식으로 호출된 경우 클래스 데코레이터의 서명을 확인할 수 없습니다.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "식으로 호출된 경우 메서드 데코레이터의 서명을 확인할 수 없습니다.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "식으로 호출된 경우 매개 변수 데코레이터의 서명을 확인할 수 없습니다.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "식으로 호출된 경우 속성 데코레이터의 서명을 확인할 수 없습니다.", - "Undetermined_character_escape_1513": "결정되지 않은 문자 이스케이프입니다.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "예기치 않은 '{0}'입니다. 백슬래시로 이스케이프하려고 하셨나요?", - "Unexpected_end_of_text_1126": "예기치 않은 텍스트 끝입니다.", - "Unexpected_keyword_or_identifier_1434": "예기치 않은 키워드 또는 식별자입니다.", - "Unexpected_token_1012": "예기치 않은 토큰입니다.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "예기치 않은 토큰입니다. 생성자, 메서드, 접근자 또는 속성이 필요합니다.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "예기치 않은 토큰입니다. 중괄호가 없는 형식 매개 변수 이름이 필요합니다.", - "Unexpected_token_Did_you_mean_or_gt_1382": "예기치 않은 토큰입니다. '{'>'}' 또는 '>'를 사용하시겠습니까?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "예기치 않은 토큰입니다. '{'}'}' 또는 '}'를 사용하시겠습니까?", - "Unexpected_token_expected_1179": "예기치 않은 토큰입니다. '{'가 있어야 합니다.", - "Unicode_escape_sequence_cannot_appear_here_17021": "유니코드 이스케이프 시퀀스는 여기에 나타날 수 없습니다.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "유니코드 이스케이프 시퀀스는 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "유니코드 속성 값 식은 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", - "Unknown_Unicode_property_name_1524": "알 수 없는 유니코드 속성 이름입니다.", - "Unknown_Unicode_property_name_or_value_1529": "알 수 없는 유니코드 속성 이름 또는 값입니다.", - "Unknown_Unicode_property_value_1526": "알 수 없는 유니코드 속성 값입니다.", - "Unknown_build_option_0_5072": "알 수 없는 빌드 옵션 '{0}'입니다.", - "Unknown_build_option_0_Did_you_mean_1_5077": "알 수 없는 빌드 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", - "Unknown_compiler_option_0_5023": "알 수 없는 컴파일러 옵션 '{0}'입니다.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "알 수 없는 컴파일러 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "알 수 없는 키워드 또는 식별자입니다. '{0}'을(를) 의미했나요?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "알 수 없는 옵션 'excludes'입니다. 'exclude'를 사용하시겠습니까?", - "Unknown_regular_expression_flag_1499": "알 수 없는 정규식 플래그입니다.", - "Unknown_type_acquisition_option_0_17010": "알 수 없는 형식 인식 옵션 '{0}'입니다.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "알 수 없는 형식 인식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", - "Unknown_watch_option_0_5078": "알 수 없는 조사식 옵션 '{0}'입니다.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "알 수 없는 조사식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", - "Unreachable_code_detected_7027": "접근할 수 없는 코드가 있습니다.", - "Unterminated_Unicode_escape_sequence_1199": "종결되지 않은 유니코드 이스케이프 시퀀스입니다.", - "Unterminated_quoted_string_in_response_file_0_6045": "응답 파일 '{0}'의 종결되지 않은 따옴표 붙은 문자열입니다.", - "Unterminated_regular_expression_literal_1161": "종결되지 않은 정규식 리터럴입니다.", - "Unterminated_string_literal_1002": "종결되지 않은 문자열 리터럴입니다.", - "Unterminated_template_literal_1160": "종결되지 않은 템플릿 리터럴입니다.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "형식화되지 않은 함수 호출에는 형식 인수를 사용할 수 없습니다.", - "Unused_label_7028": "사용되지 않는 레이블입니다.", - "Unused_ts_expect_error_directive_2578": "사용되지 않는 '@ts-expect-error' 지시문입니다.", - "Update_import_from_0_90058": "\"{0}\"에서 가져오기 업데이트", - "Update_modifiers_of_0_90061": "'{0}'의 한정자 업데이트", - "Updating_output_timestamps_of_project_0_6359": "'{0}' 프로젝트의 출력 타임스탬프를 업데이트하는 중...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' 프로젝트의 변경되지 않은 출력 타임스탬프를 업데이트하는 중...", - "Use_0_95174": "`{0}`을(를) 사용합니다.", - "Use_0_instead_5106": "대신 '{0}'을(를) 사용하세요.", - "Use_Number_isNaN_in_all_conditions_95175": "모든 조건에서 'Number.isNaN'을 사용합니다.", - "Use_element_access_for_0_95145": "'{0}'에 요소 액세스 사용", - "Use_element_access_for_all_undeclared_properties_95146": "선언되지 않은 모든 속성에 요소 액세스를 사용합니다.", - "Use_import_type_95180": "'import type' 사용", - "Use_synthetic_default_member_95016": "가상 '기본' 멤버를 사용합니다.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "패키지 가져오기를 확인할 때 package.json 'exports' 필드를 사용합니다.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "가져오기를 확인할 때 package.json 'imports' 필드를 사용합니다.", - "Use_type_0_95181": "'형식 {0}' 사용", - "Using_0_subpath_1_with_target_2_6404": "'{0}' 하위 경로 '{1}'과(와) 대상 '{2}'을(를) 사용하는 중입니다.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX 조각을 사용하려면 조각 팩터리 '{0}'이(가) 범위에 있어야 하지만 찾을 수 없습니다.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "ECMAScript 5 이상에서만 'for...of' 문에서 문자열을 사용할 수 있습니다.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build를 사용하면 -b가 tsc로 하여금 컴파일러보다 빌드 오케스트레이터처럼 작동하도록 합니다. 이 항목은 {0}에서 더 자세히 알아볼 수 있는 복합 프로젝트를 구축하는 데 사용됩니다.", - "Using_compiler_options_of_project_reference_redirect_0_6215": "프로젝트 참조 리디렉션 '{0}'의 컴파일러 옵션을 사용 중입니다.", - "VERSION_6036": "버전", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' 형식의 값에 '{1}' 형식과 공통된 속성이 없습니다. 속성을 호출하려고 했습니까?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "'{0}' 형식의 값은 호출할 수 없습니다. 'new'를 포함하려고 했습니까?", - "Variable_0_implicitly_has_an_1_type_7005": "'{0}' 변수에는 암시적으로 '{1}' 형식이 포함됩니다.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "'{0}' 변수는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "'{0}' 변수는 몇몇 위치에서 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "'{0}' 변수는 형식을 확인할 수 없는 경우 일부 위치에서 암시적으로 '{1}' 형식입니다.", - "Variable_0_is_used_before_being_assigned_2454": "'{0}' 변수가 할당되기 전에 사용되었습니다.", - "Variable_declaration_expected_1134": "변수 선언이 필요합니다.", - "Variable_declaration_list_cannot_be_empty_1123": "변수 선언 목록은 비워 둘 수 없습니다.", - "Variable_declaration_not_allowed_at_this_location_1440": "이 위치에서는 변수 선언을 사용할 수 없습니다.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "선언이 여러 개 있는 변수는 인라인 처리할 수 없습니다.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "소스의 {0} 위치에 있는 가변 인자 요소가 대상의 {1} 위치에 있는 요소와 일치하지 않습니다.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "차이 주석은 개체, 함수, 생성자 및 매핑된 형식의 형식 별칭에서만 지원됩니다.", - "Version_0_6029": "버전 {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "마이그레이션 정보를 보려면 https://aka.ms/ts6을 방문하세요.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "이 파일에 대해 자세히 알아보려면 https://aka.ms/tsconfig을 방문하세요.", - "WATCH_OPTIONS_6918": "조사식 옵션", - "Watch_and_Build_Modes_6250": "시청 및 빌드 모드", - "Watch_input_files_6005": "조사식 입력 파일입니다.", - "Watch_option_0_requires_a_value_of_type_1_5080": "조사식 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "여기에서 전체 매개 변수에 대한 형식을 추가하여 '{0}'에 대한 형식만 작성할 수 있습니다.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "함수를 할당할 때 매개 변수와 반환 값이 하위 형식과 호환되는지 확인합니다.", - "When_type_checking_take_into_account_null_and_undefined_6699": "유형 검사 시 'null' 및 'undefined'를 고려하세요.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "화면을 지우지 않고, 감시 모드의 오래된 콘솔 출력을 유지할지 여부입니다.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "식 컨테이너에서 모든 잘못된 문자 래핑", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "잘못된 데코레이터 식을 모두 괄호로 래핑합니다.", - "Wrap_all_object_literal_with_parentheses_95116": "괄호를 사용하여 모든 개체 리터럴 래핑", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX 조각에서 부모가 지정되지 않은 모든 JSX 래핑", - "Wrap_in_JSX_fragment_95120": "JSX 조각에서 래핑", - "Wrap_in_parentheses_95194": "괄호로 래핑", - "Wrap_invalid_character_in_an_expression_container_95108": "식 컨테이너에서 잘못된 문자 래핑", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "괄호를 사용하여 개체 리터럴이어야 하는 다음 본문 래핑", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "{0}에서 모든 컴파일러 옵션에 대해 알아볼 수 있습니다.", - "You_cannot_rename_a_module_via_a_global_import_8031": "전역 가져오기를 통해 모듈 이름을 바꿀 수 없습니다.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "'node_modules' 폴더에 정의된 요소의 이름은 변경할 수 없습니다.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "다른 'node_modules' 폴더에 정의된 요소의 이름은 변경할 수 없습니다.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "표준 TypeScript 라이브러리에 정의된 요소의 이름을 바꿀 수 없습니다.", - "You_cannot_rename_this_element_8000": "이 요소의 이름을 바꿀 수 없습니다.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}'이(가) 여기에서 decorator로 사용할 인수를 너무 적게 허용합니다. 먼저 이를 호출하고 '@{0}()'을(를) 작성하시겠습니까?", - "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 및 '{1}' 인덱스 시그니처가 호환되지 않습니다.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 및 '{1}' 작업은 괄호 없이 혼합해서 사용할 수 없습니다.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}'이(가) 두 번 지정되었습니다. 이름이 '{0}'인 특성을 덮어씁니다.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "형식의 끝에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "형식의 시작 부분에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}'은(는) 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}'은(는) 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}'은(는) 'require' 호출을 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}'은(는) 'require' 호출을 사용하거나 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}'은(는) 'import {1} = require({2})' 또는 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}'은(는) 'import {1} = require({2})'를 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", - "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}'은(는) JSX 구성 요소로 사용할 수 없습니다.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}'은(는) 'export type'을 사용하여 내보냈으므로 값으로 사용할 수 없습니다.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}'은(는) 'import type'을 사용하여 가져왔으므로 값으로 사용할 수 없습니다.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 구성 요소는 텍스트를 자식 요소로 수락하지 않습니다. JSX의 텍스트는 'string' 형식이지만, '{1}'의 필요한 형식은 '{2}'입니다.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}'은(는) '{1}'과(와) 관련되지 않은 임의의 형식으로 인스턴스화할 수 있습니다.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 선언은 블록 내에서만 선언할 수 있습니다.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 선언은 TypeScript 파일에서만 사용할 수 있습니다.", - "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 선언에는 바인딩 패턴이 없을 수 있습니다.", - "_0_declarations_must_be_initialized_1155": "'{0}' 선언을 초기화해야 합니다.", - "_0_expected_1005": "'{0}'이(가) 필요합니다.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}'에는 문자열 형식이 있지만 'isolatedModules'를 사용하도록 설정한 경우 구문으로 인식할 수 있는 문자열 구문이 있어야 합니다.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}'에 내보낸 멤버 '{1}'이(가) 없습니다. '{2}'이(가) 아닌지 확인하세요.", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}'은(는) 암시적으로 '{1}' 반환 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 '{0}'에는 암시적으로 'any' 반환 형식이 포함됩니다.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}'은(는) 형식 주석이 없고 자체 이니셜라이저에서 직간접적으로 참조되므로 암시적으로 'any' 형식입니다.", - "_0_index_signatures_are_incompatible_2634": "'{0}' 인덱스 시그니처가 호환되지 않습니다.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 인덱스 유형 '{1}'을(를) '{2}' 인텍스 유형 '{3}'에 할당할 수 없습니다.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0}'은(는) 기본 개체이지만 '{1}'은(는) 래퍼 개체입니다. 가능한 경우 '{0}'을(를) 사용하세요.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}'은(는) 유형이며 JavaScript 파일로 가져올 수 없습니다. JSDoc 유형 주석에서 '{1}'을(를) 사용하세요.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}'은(는) 형식이며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}'은(는) '{1}'의 사용되지 않는 이름 변경입니다. 형식 주석으로 사용하려고 했습니까?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}'은(는) '{1}' 형식의 제약 조건에 할당할 수 있지만, '{1}'은(는) '{2}' 제약 조건의 다른 하위 형식으로 인스턴스화할 수 있습니다.", - "_0_is_automatically_exported_here_18044": "'{0}'은(는) 여기에서 자동으로 내보내집니다.", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}'이(가) 선언은 되었지만 해당 값이 읽히지는 않았습니다.", - "_0_is_declared_but_never_used_6196": "'{0}'이(가) 선언되었지만 사용되지 않았습니다.", - "_0_is_declared_here_2728": "여기서는 '{0}'이(가) 선언됩니다.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}'은(는) '{1}' 클래스의 속성으로 정의되지만, '{2}'에서 접근자로 재정의됩니다.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}'은(는) '{1}' 클래스의 접근자로 정의되지만, '{2}'에서 인스턴스 속성으로 재정의됩니다.", - "_0_is_deprecated_6385": "'{0}'은(는) 사용되지 않습니다.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}'은(는) '{1}' 키워드에 대한 올바른 메타 속성이 아닙니다. '{2}'을(를) 사용하시겠습니까?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}'은(는) 매개 변수 이름으로 사용할 수 없습니다.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}'은(는) 변수 선언 이름으로 사용할 수 없습니다.", - "_0_is_of_type_unknown_18046": "'{0}'은(는) 'unknown' 형식입니다.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}'은(는) 'null'일 수 있습니다.", - "_0_is_possibly_null_or_undefined_18049": "'{0}'은(는) 'null' 또는 'undefined'일 수 있습니다.", - "_0_is_possibly_undefined_18048": "'{0}'은(는) 'undefined'일 수 있습니다.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}'은(는) 자체 기본 식에서 직간접적으로 참조됩니다.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}'은(는) 자체 형식 주석에서 직간접적으로 참조됩니다.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}'이(가) 두 번 이상 지정되어 이 사용량을 덮어씁니다.", - "_0_list_cannot_be_empty_1097": "'{0}' 목록은 비워 둘 수 없습니다.", - "_0_modifier_already_seen_1030": "'{0}' 한정자가 이미 있습니다.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 한정자는 클래스, 인터페이스 또는 형식 별칭의 형식 매개 변수에만 나타날 수 있습니다.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 한정자는 함수, 메서드 또는 클래스의 형식 매개 변수에만 나타날 수 있습니다.", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 한정자는 생성자 선언에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 한정자는 모듈 또는 네임스페이스 요소에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "{0}' 한정자는 매개 변수에 표시될 수 없습니다.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 한정자는 형식 멤버에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 한정자는 형식 매개 변수에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 한정자는 'using' 선언에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 한정자는 'await using' 선언에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 한정자는 인덱스 시니그처에 나타날 수 없습니다.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "이 종류의 클래스 요소에는 '{0}' 한정자를 표시할 수 없습니다.", - "_0_modifier_cannot_be_used_here_1042": "'{0}' 한정자는 여기에 사용할 수 없습니다.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' 한정자는 앰비언트 컨텍스트에서 사용할 수 없습니다.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 한정자는 '{1}' 한정자와 함께 사용할 수 없습니다.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.", - "_0_modifier_must_precede_1_modifier_1029": "'{0}' 한정자는 '{1}' 한정자 앞에 와야 합니다.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 뒤에는 중괄호로 묶인 유니코드 속성 값 식이 와야 합니다.", - "_0_needs_an_explicit_type_annotation_2782": "'{0}'에는 명시적 형식 주석이 필요합니다.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}'은(는) 형식만 참조하지만, 여기서는 네임스페이스로 사용되고 있습니다.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}'은(는) 형식만 참조하는데 여기에서 값으로 사용되고 있습니다. '{0}에서 {1}'을(를) 사용하려고 하셨습니까?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 es2015 이상으로 변경해 보세요.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}'은(는) UMD 전역을 참조하지만 현재 파일은 모듈입니다. 대신 가져오기를 추가해 보세요.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}'은(는) 값을 참조하지만, 여기서는 형식으로 사용되고 있습니다. 'typeof {0}'을(를) 사용하시겠습니까?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}'은(는) 형식 전용 선언으로 확인되며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}'은(는) 형식 전용 선언으로 확인되며, '{1}'을(를) 사용하도록 설정한 경우 형식 전용 다시 내보내기를 사용하여 다시 내보내야 합니다.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}'은(는) 구성 json 파일의 'compilerOptions' 개체 내에 설정해야 합니다.", - "_0_tag_already_specified_1223": "'{0}' 태그가 이미 지정되었습니다.", - "_0_was_also_declared_here_6203": "여기서도 '{0}'이(가) 선언되었습니다.", - "_0_was_exported_here_1377": "여기서는 '{0}'을(를) 내보냈습니다.", - "_0_was_imported_here_1376": "여기서는 '{0}'을(를) 가져왔습니다.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "반환 형식 주석이 없는 '{0}'에는 암시적으로 '{1}' 반환 형식이 포함됩니다.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "반환 형식 주석이 없는 '{0}'에는 암시적으로 '{1}' yield 형식이 포함됩니다.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 한정자는 클래스, 메서드 또는 속성 선언에만 나타날 수 있습니다.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 한정자는 속성 선언에만 나타날 수 있습니다.", - "and_here_6204": "및 여기.", - "and_npm_install_D_types_Slashnode_6290": "and npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments'는 속성 초기화기나 클래스 정적 초기화 블록에서 참조할 수 없습니다.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 가져오기, 내보내기, import.meta, jsx(jsx: react-jsx 포함) 또는 esm 형식(모듈: node16+ 포함)이 있는 파일을 모듈로 처리합니다.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 식은 클래스 정적 블록 내에서 사용할 수 없습니다.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' 식은 파일이 모듈일 경우 해당 파일의 최상위 수준에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 식은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await'는 이 식의 형식에 영향을 주지 않습니다.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "앰비언트 컨텍스트에서는 'await using' 선언을 사용할 수 없습니다.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' 선언은 블록 내에 포함되지 않는 한 'case' 또는 'default' 조항에서는 허용되지 않습니다.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' 문은 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 문은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 옵션이 '{0}'(으)로 설정되어 있습니다. 상대적이지 않은 모듈 이름 '{1}'을(를) 확인하려면 이 값을 사용합니다.", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 뒤에는 ASCII 문자가 와야 합니다.", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!'는 파일의 시작 부분에서만 사용할 수 있습니다.", - "case_or_default_expected_1130": "'case' 또는 'default'가 필요합니다.", - "catch_or_finally_expected_1472": "'catch' 또는 'finally'가 필요합니다.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 열거형 멤버 이니셜라이저가 무한 값에 대해 평가되었습니다.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 열거형 멤버 이니셜라이저가 허용되지 않은 'NaN' 값에 대해 평가되었습니다.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "const 열거형 멤버 이니셜라이저는 상수 식이어야 합니다.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 열거형은 속성이나 인덱스 액세스 식, 또는 내보내기 할당이나 가져오기 선언의 오른쪽, 또는 형식 쿼리에서만 사용할 수 있습니다.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor'는 매개 변수 속성 이름으로 사용할 수 없습니다.", - "constructor_is_a_reserved_word_18012": "'#constructor'는 예약어입니다.", - "default_Colon_6903": "기본값:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "strict 모드에서는 식별자에 대해 'delete'를 호출할 수 없습니다.", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *'는 기본값을 다시 내보내지 않습니다.", - "export_can_only_be_used_in_TypeScript_files_8003": "'export ='는 TypeScript 파일에서만 사용할 수 있습니다.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "앰비언트 모듈 및 모듈 확대는 항상 표시되므로 'export' 한정자를 적용할 수 없습니다.", - "extends_clause_already_seen_1172": "'extends' 절이 이미 있습니다.", - "extends_clause_must_precede_implements_clause_1173": "'extends' 절은 'implements' 절 앞에 와야 합니다.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "내보낸 클래스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "내보낸 클래스의 'extends' 절이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "내보낸 인터페이스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", - "false_unless_checkJs_is_set_6932": "'checkJs'가 설정되지 않은 한 'false'입니다.", - "false_unless_composite_is_set_6906": "'composite'가 설정되지 않은 한 'false'입니다.", - "file_6025": "파일", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' 루프는 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' 루프는 비동기 함수 내부 및 모듈의 최상위에서만 사용할 수 있습니다.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 루프는 클래스 정적 블록 내에서 사용할 수 없습니다.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 및 'set' 접근자는 'this' 매개 변수를 선언할 수 없습니다.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files'를 지정하면 '[]'이고, 그렇지 않으면 '[\"**/*\"]'", - "implements_clause_already_seen_1175": "'implements' 절이 이미 있습니다.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 절은 TypeScript 파일에서만 사용할 수 있습니다.", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 선언은 조건 형식의 'extends' 절에서만 사용할 수 있습니다.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 뒤에는 꺾쇠 괄호로 묶인 캡처 그룹 이름이 와야 합니다.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let'은 'let' 또는 'const' 선언에서 이름으로 사용할 수 없습니다.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "대상에 구문 시그니처가 없는 'new' 식에는 암시적으로 'any' 형식이 포함됩니다.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\", \"bower_components\", \"jspm_packages\"]', 지정한 경우 'outDir' 값이 추가됩니다.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module`이 `nodenext`이면 `nodenext`, `module`이 `node16` 또는 `node18`이면 `node16`, 그 외에는 `bundler`입니다.", - "one_of_Colon_6900": "다음 중 하나:", - "one_or_more_Colon_6901": "하나 이상:", - "options_6024": "옵션", - "or_JSX_element_expected_1145": "'{' 또는 JSX 요소가 필요합니다.", - "or_expected_1144": "'{' 또는 ';'이(가) 필요합니다.", - "package_json_does_not_have_a_0_field_6100": "'package.json'에는 '{0}' 필드가 없습니다.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json'에 '{0}' 버전과 일치하는 'typesVersions' 항목이 없습니다.", - "package_json_had_a_falsy_0_field_6220": "'package.json'에 false로 평가되는 '{0}' 필드가 있습니다.", - "package_json_has_0_field_1_that_references_2_6101": "'package.json'에 '{2}'을(를) 참조하는 '{0}' 필드 '{1}'이(가) 있습니다.", - "package_json_has_a_peerDependencies_field_6281": "'package.json'에 'peerDependencies' 필드가 있습니다.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json'에 유효한 semver 범위가 아닌 'typesVersions' 항목 '{0}'이(가) 있습니다.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "모듈 이름 '{2}'과(와) 일치하는 패턴을 검색하는 컴파일러 버전 '{1}'과(와) 일치하는 'typesVersions' 항목 '{0}'이(가) 'package.json'에 있습니다.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json'에 버전별 경로 매핑이 포함된 'typesVersions' 필드가 있습니다.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json 범위 '{0}'은(는) 명시적으로 '{1}' 지정자를 null에 매핑합니다.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 범위 '{0}'에 '{1}' 지정자의 대상 유형이 잘못되었습니다.", - "package_json_scope_0_has_no_imports_defined_6273": "package.json 범위 '{0}'에 정의된 가져오기가 없습니다.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 옵션이 지정되었습니다. 모듈 이름 '{0}'과(와) 일치하는 패턴을 찾는 중입니다.", - "q_is_only_available_inside_character_class_1511": "'\\q'는 문자 클래스 내에서만 사용할 수 있습니다.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 뒤에는 중괄호로 묶인 문자열 대체가 와야 합니다.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 한정자는 속성 선언 또는 인덱스 시그니처에만 나타날 수 있습니다.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 형식 한정자는 배열 및 튜플 리터럴 형식에서만 사용할 수 있습니다.", - "require_call_may_be_converted_to_an_import_80005": "'require' 호출이 가져오기로 변환될 수 있습니다.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode'는 유형 전용 가져오기에만 설정할 수 있습니다.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode'는 유형 가져오기 어설션에 유효한 유일한 키입니다.", - "resolution_mode_should_be_either_require_or_import_1453": "'해상도 모드'는 '요구' 또는 '가져오기'여야 합니다.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 옵션이 설정되어 있습니다. 상대 모듈 이름 '{0}'을(를) 확인하려면 이 옵션을 사용합니다.", - "super_can_only_be_referenced_in_a_derived_class_2335": "파생 클래스에서만 'super'를 참조할 수 있습니다.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "파생 클래스 또는 개체 리터럴 식의 멤버에서만 'super'를 참조할 수 있습니다.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super'는 계산된 속성 이름에서 참조할 수 없습니다.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "super'는 생성자 인수에서 참조할 수 없습니다.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "옵션 'target'이 'ES2015' 이상인 경우 개체 리터럴 식의 멤버에서만 'super'를 사용할 수 있습니다.", - "super_may_not_use_type_arguments_2754": "'super'는 형식 인수를 사용할 수 없습니다.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "파생 클래스의 생성자에서 'super'의 속성에 액세스하기 전에 'super'를 호출해야 합니다.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "파생 클래스의 생성자에서 'this'에 액세스하기 전에 'super'를 호출해야 합니다.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' 다음에는 인수 목록 또는 멤버 액세스가 와야 합니다.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' 속성 액세스는 생성자, 멤버 함수 또는 파생 클래스의 멤버 접근자에서만 허용됩니다.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this'는 계산된 속성 이름에서 참조할 수 없습니다.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this'는 모듈 또는 네임스페이스 본문에서 참조될 수 없습니다.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "정적 속성 이니셜라이저에서 'this'를 참조할 수 없습니다.", - "this_cannot_be_referenced_in_current_location_2332": "현재 위치에서 'this'를 참조할 수 없습니다.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this'에는 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", - "true_for_ES2022_and_above_including_ESNext_6930": "ESNext를 포함하여 ES2022 이상의 경우 'true'입니다.", - "true_if_composite_false_otherwise_6909": "'composite'이면 'true'이고, 그렇지 않으면 'false'입니다.", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'인 경우 'true'입니다. 그렇지 않으면 'false'입니다.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 컴파일러", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json이 있지만 명령줄에 파일을 지정한 경우 로드되지 않습니다. '--ignoreConfig'를 사용하여 이 오류를 건너뜁니다.", - "type_Colon_6902": "형식:", - "unique_symbol_types_are_not_allowed_here_1335": "여기에서 'unique symbol' 형식은 허용되지 않습니다.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 형식은 변수 문의 변수에만 허용됩니다.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 형식은 바인딩 이름과 함께 변수 선언에 사용할 수 없습니다.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' 지시문은 단순하지 않은 매개 변수 목록에서 사용할 수 없습니다.", - "use_strict_directive_used_here_1349": "여기서는 'use strict' 지시문이 사용됩니다.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "앰비언트 컨텍스트에서는 'using' 선언을 사용할 수 없습니다.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' 선언은 블록 내에 포함되지 않는 한 'case' 또는 'default' 조항에서는 허용되지 않습니다.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 문은 비동기 함수 블록에서 사용할 수 없습니다.", - "with_statements_are_not_allowed_in_strict_mode_1101": "'with' 문은 strict 모드에서 사용할 수 없습니다.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 식은 포함하는 생성기에 반환 형식 주석이 없으므로 암시적으로 'any' 형식으로 생성됩니다.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "모든 컴파일러 옵션", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 한정자는 가져오기 선언에서 사용할 수 없습니다.", + "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 매개 변수는 첫 번째 매개 변수여야 합니다.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 태그는 '@typedef', '@callback' 또는 '@overload' 태그 다음에 올 수 없습니다.", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 주석에 여러 '@type' 태그를 포함하지 못할 수 있습니다.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' 리터럴은 속성 이름으로 사용할 수 없습니다.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "bigint 리터럴에는 지수 표기법을 사용할 수 없습니다.", + "A_bigint_literal_must_be_an_integer_1353": "bigint 리터럴은 정수여야 합니다.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "바인딩 패턴 매개 변수는 구현 서명에서 선택 사항이 될 수 없습니다.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 문은 이 문을 둘러싼 반복문 또는 switch 문 내에서만 사용할 수 있습니다.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 문은 이 문을 둘러싼 문의 레이블로만 이동할 수 있습니다.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "문자 클래스는 예약된 이중 문장 부호를 포함해서는 안됩니다. 백슬래시로 이스케이프하려고 하셨나요?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "문자 클래스 범위는 다른 문자 클래스에 의해 바인딩되어서는 안 됩니다.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "클래스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 구현할 수 있습니다.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "클래스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 구현할 수 있습니다.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "클래스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 클래스는 생성 가능한 값만 확장할 수 있습니다.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "클래스는 '{0}' 같은 기본 형식을 구현할 수 없습니다. 다른 명명된 개체 형식만 구현할 수 있습니다.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' 한정자를 사용하지 않는 클래스 선언에는 이름이 있어야 합니다.", + "A_class_member_cannot_have_the_0_keyword_1248": "클래스 멤버에는 '{0}' 키워드를 사용할 수 없습니다.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "쉼표 식은 컴퓨팅된 속성 이름에 사용할 수 없습니다.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "계산된 속성 이름에서는 포함하는 형식의 형식 매개 변수를 참조할 수 없습니다.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "클래스 속성 선언의 계산된 속성 이름에는 간단한 리터럴 형식 또는 '고유 기호' 형식이 있어야 합니다.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "메서드 오버로드의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "리터럴 형식의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "앰비언트 컨텍스트의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "인터페이스의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "계산된 속성 이름은 'string', 'number', 'symbol' 또는 'any' 형식이어야 합니다.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' 어설션은 열거형 멤버나 문자열, 숫자, 부울, 배열 또는 객체 리터럴에 대한 참조에만 적용할 수 있습니다.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const 열거형 멤버는 문자열 리터럴을 통해서만 액세스할 수 있습니다.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "앰비언트 컨텍스트의 'const' 이니셜라이저는 문자열, 숫자 리터럴 또는 리터럴 열거형 참조여야 합니다.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "생성자는 해당 클래스가 'null'을 확장하는 경우 'super' 호출을 포함할 수 없습니다.", + "A_constructor_cannot_have_a_this_parameter_2681": "생성자에는 'this' 매개 변수를 사용할 수 없습니다.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 문은 이 문을 둘러싼 반복문 내에서만 사용할 수 있습니다.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 문은 이 문을 둘러싼 반복문의 레이블로만 이동할 수 있습니다.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "'import type'이 없으면 선언 파일을 가져올 수 없습니다. 대신 '{0}' 구현 파일을 가져오시겠습니까?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "'declare' 한정자는 이미 존재하는 앰비언트 컨텍스트에서 사용할 수 없습니다.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "데코레이터는 오버로드가 아니라 메서드 구현만 데코레이팅할 수 있습니다.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 절은 'switch' 문에 두 번 이상 나올 수 없습니다.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "기본 내보내기는 ECMAScript 스타일 모듈에서만 사용할 수 있습니다.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "기본 내보내기 수준은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "이 컨텍스트에서는 한정된 할당 어설션 '!'가 허용되지 않습니다.", + "A_destructuring_declaration_must_have_an_initializer_1182": "구조 파괴 선언에 이니셜라이저가 있어야 합니다.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "동적 가져오기 호출은 'Promise'를 반환합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "A_file_cannot_have_a_reference_to_itself_1006": "파일은 자신에 대한 참조를 포함할 수 없습니다.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never'를 반환하는 함수에는 연결 가능한 끝점이 있을 수 없습니다.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' 키워드로 호출한 함수에는 'void'인 'this' 형식을 사용할 수 없습니다.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "선언된 형식이 'undefined', 'void' 또는 'any'가 아닌 함수는 값을 반환해야 합니다.", + "A_generator_cannot_have_a_void_type_annotation_2505": "생성기에는 'void' 형식 주석을 사용할 수 없습니다.", + "A_get_accessor_cannot_have_parameters_1054": "'get' 접근자에는 매개 변수를 사용할 수 없습니다.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 접근자는 최소한 setter의 액세스 가능 수준과 같아야 합니다.", + "A_get_accessor_must_return_a_value_2378": "'get' 접근자는 값을 반환해야 합니다.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "레이블이 지정된 튜플 요소는 형식 뒤가 아니라 이름 뒤이면서 콜론 앞에 물음표를 사용하여 optional로 선언됩니다.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "레이블이 지정된 튜플 요소는 형식 앞이 아니라 이름 앞에 '...'을 사용하여 rest로 선언됩니다.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "매핑된 형식은 속성 또는 메서드를 선언할 수 없습니다.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "열거형 선언의 멤버 이니셜라이저는 그 뒤에 선언된 멤버와 다른 열거형에 정의된 멤버를 참조할 수 없습니다.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 클래스에는 'any[]' 형식의 rest 매개 변수 하나를 사용하는 생성자가 있어야 합니다.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "추상 구문 시그니처를 포함하는 형식 변수에서 확장되는 mixin 클래스는 'abstract'로도 선언되어야 합니다.", + "A_module_cannot_have_multiple_default_exports_2528": "모듈에는 기본 내보내기가 여러 개 있을 수 없습니다.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수와 다른 파일에 있을 수 없습니다,", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수 앞에 있을 수 없습니다.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "네임스페이스 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 허용됩니다.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' 키워드를 사용하여 'namespace' 선언을 선언하면 안 됩니다. 대신 'namespace' 키워드를 사용하세요.", + "A_non_dry_build_would_build_project_0_6357": "-dry가 아닌 빌드는 프로젝트 '{0}'을(를) 빌드합니다.", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry가 아닌 빌드는 다음 파일을 삭제합니다. {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY가 아닌 빌드는 '{0}' 프로젝트의 출력 타임스탬프를 업데이트합니다.", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "매개 변수 이니셜라이저는 함수 또는 생성자 구현에서만 허용됩니다.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "rest 매개 변수를 사용하여 매개 변수 속성을 선언할 수 없습니다.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "매개 변수 속성은 생성자 구현에서만 허용됩니다.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "바인딩 패턴을 사용하여 매개 변수 속성을 선언할 수 없습니다.", + "A_promise_must_have_a_then_method_1059": "프라미스에는 'then' 메서드가 있어야 합니다.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "형식이 'unique symbol' 형식인 클래스의 속성은 'static'과 'readonly' 둘 다여야 합니다.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "형식이 'unique symbol' 형식인 인터페이스 또는 형식 리터럴의 속성은 'readonly'여야 합니다.", + "A_required_element_cannot_follow_an_optional_element_1257": "필수 요소는 선택적 요소 뒤에 올 수 없습니다.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "필수 매개 변수는 선택적 매개 변수 뒤에 올 수 없습니다.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 요소에는 바인딩 패턴이 포함될 수 없습니다.", + "A_rest_element_cannot_follow_another_rest_element_1265": "rest 요소는 다른 rest 요소 뒤에 올 수 없습니다.", + "A_rest_element_cannot_have_a_property_name_2566": "rest 요소에는 속성 이름을 사용할 수 없습니다.", + "A_rest_element_cannot_have_an_initializer_1186": "rest 요소에는 이니셜라이저를 사용할 수 없습니다.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 요소는 배열 구조 파괴 패턴의 마지막 요소여야 합니다.", + "A_rest_element_type_must_be_an_array_type_2574": "rest 요소 형식은 배열 형식이어야 합니다.", + "A_rest_parameter_cannot_be_optional_1047": "rest 매개 변수는 선택 사항이 될 수 없습니다.", + "A_rest_parameter_cannot_have_an_initializer_1048": "rest 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest 매개 변수는 매개 변수 목록 마지막에 있어야 합니다.", + "A_rest_parameter_must_be_of_an_array_type_2370": "rest 매개 변수는 배열 형식이어야 합니다.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest 매개 변수 또는 바인딩 패턴에 후행 쉼표가 없을 수 있습니다.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 문은 함수 본문 내에서만 사용할 수 있습니다.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "가져오기를 'baseUrl'에 상대적인 조회 위치로 다시 매핑하는 일련의 항목입니다.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 접근자에는 반환 형식 주석을 사용할 수 없습니다.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 접근자에는 선택적 매개 변수를 사용할 수 없습니다.", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' 접근자에는 rest 매개 변수를 사용할 수 없습니다.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 접근자에는 매개 변수를 하나만 사용해야 합니다.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 접근자 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "확산 인수는 튜플 유형을 가지거나 나머지 매개 변수로 전달되어야 합니다.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' 호출은 초기화된 속성, 매개 변수 속성 또는 개인 식별자를 포함하는 파생 클래스의 생성자 내에서 루트 수준 문이어야 합니다.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "파생 클래스에 초기화된 속성, 매개 변수 속성 또는 개인 식별자가 포함된 경우 'super' 호출은 '수퍼' 또는 'this'를 참조하는 생성자의 첫 번째 명령문이어야 합니다.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' 기반 형식 가드는 매개 변수 기반 형식 가드와 호환되지 않습니다.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 형식은 클래스 또는 인터페이스의 비정적 멤버에서만 사용할 수 있습니다.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 CommonJS 모듈의 값 선언에 최상위 'export' 한정자를 사용할 수 없습니다.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 파일이 이미 '{0}'에 정의되어 있습니다.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "튜플 멤버는 optional이면서 rest일 수 없습니다.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "튜플 형식은 음수 값으로 인덱싱할 수 없습니다.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "지수 식의 왼쪽에는 type assertion expression을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.", + "A_type_literal_property_cannot_have_an_initializer_1247": "형식 리터럴 속성에는 이니셜라이저를 사용할 수 없습니다.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "형식 전용 가져오기는 기본 가져오기 또는 명명된 바인딩을 지정할 수 있지만, 둘 다 지정할 수는 없습니다.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "형식 조건자는 rest 매개 변수를 참조할 수 없습니다.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "형식 조건자는 바인딩 패턴에서 '{0}' 요소를 참조할 수 없습니다.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "형식 조건자는 함수 및 메서드의 반환 형식 위치에서만 사용할 수 있습니다.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "형식 조건자의 형식을 해당 매개 변수의 형식에 할당할 수 있어야 합니다.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "데코레이팅된 서명에서 참조하는 유형은 'isolatedModules' 및 'emitDecoratorMetadata'가 활성화된 경우 '가져오기 유형' 또는 네임스페이스 가져오기를 사용하여 가져와야 합니다.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "형식이 'unique symbol' 형식인 변수는 'const'여야 합니다.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "'yield' 식은 생성기 본문에서만 사용할 수 있습니다.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "super 식을 통해 '{1}' 클래스의 추상 메서드 '{0}'에 액세스할 수 없습니다.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "추상 메서드는 추상 클래스 내에서만 사용할 수 있습니다.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "추상 속성은 추상 클래스 내에만 나타날 수 있습니다.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "생성자에서 '{1}' 클래스의 추상 속성 '{0}'에 액세스할 수 없습니다.", + "Accessibility_modifier_already_seen_1028": "액세스 가능성 한정자가 이미 있습니다.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "접근자는 ECMAScript 5 이상을 대상으로 지정할 때만 사용할 수 있습니다.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "접근자는 모두 추상이거나 비추상이어야 합니다.", + "Add_0_to_unresolved_variable_90008": "확인되지 않은 변수에 '{0}.' 추가", + "Add_a_return_statement_95111": "return 문 추가", + "Add_a_return_type_to_the_function_declaration_9031": "함수 선언에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_function_expression_9030": "함수 식에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "get 접근자 선언에 반환 형식을 추가합니다.", + "Add_a_return_type_to_the_method_9034": "메서드에 반환 형식 추가", + "Add_a_type_annotation_to_the_parameter_0_9028": "{0} 매개 변수에 형식 주석을 추가합니다.", + "Add_a_type_annotation_to_the_property_0_9029": "{0} 속성에 형식 주석을 추가합니다.", + "Add_a_type_annotation_to_the_variable_0_9027": "{0} 변수에 형식 주석을 추가합니다.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "set 접근자 선언의 매개 변수에 형식을 추가합니다.", + "Add_all_missing_async_modifiers_95041": "누락된 모든 'async' 한정자 추가", + "Add_all_missing_attributes_95168": "누락된 특성 모두 추가", + "Add_all_missing_call_parentheses_95068": "누락된 호출 괄호 모두 추가", + "Add_all_missing_function_declarations_95157": "누락된 함수 선언 모두 추가", + "Add_all_missing_imports_95064": "누락된 모든 가져오기 추가", + "Add_all_missing_members_95022": "누락된 모든 멤버 추가", + "Add_all_missing_override_modifiers_95162": "누락된 모든 'override' 한정자 추가", + "Add_all_missing_parameters_95190": "누락된 매개 변수 모두 추가", + "Add_all_missing_properties_95166": "누락된 모든 속성 추가", + "Add_all_missing_return_statement_95114": "누락된 모든 return 문 추가", + "Add_all_missing_super_calls_95039": "누락된 모든 super 호출 추가", + "Add_all_missing_type_annotations_90067": "누락된 모든 형식 주석 추가", + "Add_all_optional_parameters_95193": "모든 선택적 매개 변수 추가", + "Add_annotation_of_type_0_90062": "'{0}' 형식의 주석 추가", + "Add_async_modifier_to_containing_function_90029": "포함된 함수에 async 한정자 추가", + "Add_await_95083": "'await' 추가", + "Add_await_to_initializer_for_0_95084": "'{0}'의 이니셜라이저에 'await' 추가", + "Add_await_to_initializers_95089": "이니셜라이저에 'await' 추가", + "Add_braces_to_arrow_function_95059": "화살표 함수에 중괄호 추가", + "Add_const_to_all_unresolved_variables_95082": "확인되지 않은 모든 변수에 'const' 추가", + "Add_const_to_unresolved_variable_95081": "확인되지 않은 변수에 'const' 추가", + "Add_definite_assignment_assertion_to_property_0_95020": "'{0}' 속성에 한정된 할당 어설션 추가", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "초기화되지 않은 모든 속성에 한정된 할당 어설션 추가", + "Add_export_to_make_this_file_into_a_module_95097": "'export {}'를 추가하여 이 파일을 모듈로 만들기", + "Add_extends_constraint_2211": "`extends` 제약 조건을 추가합니다.", + "Add_extends_constraint_to_all_type_parameters_2212": "모든 형식 매개 변수에 `extends` 제약 조건 추가", + "Add_import_from_0_90057": "\"{0}\"에서 가져오기 추가", + "Add_index_signature_for_property_0_90017": "'{0}' 속성에 대해 인덱스 시그니처 추가", + "Add_initializer_to_property_0_95019": "'{0}' 속성에 이니셜라이저 추가", + "Add_initializers_to_all_uninitialized_properties_95027": "초기화되지 않은 모든 속성에 이니셜라이저 추가", + "Add_missing_attributes_95167": "누락된 특성 추가", + "Add_missing_call_parentheses_95067": "누락된 호출 괄호 추가", + "Add_missing_comma_for_object_member_completion_0_95187": "개체 멤버 완료 '{0}'에 대한 누락된 쉼표 추가", + "Add_missing_enum_member_0_95063": "누락된 열거형 멤버 '{0}' 추가", + "Add_missing_function_declaration_0_95156": "누락된 함수 선언 '{0}' 추가", + "Add_missing_new_operator_to_all_calls_95072": "모든 호출에 누락된 'new' 연산자 추가", + "Add_missing_new_operator_to_call_95071": "호출에 누락된 'new' 연산자 추가", + "Add_missing_parameter_to_0_95188": "'{0}'에 누락된 매개 변수 추가", + "Add_missing_parameters_to_0_95189": "'{0}'에 누락된 매개 변수 추가", + "Add_missing_properties_95165": "누락된 속성 추가", + "Add_missing_super_call_90001": "누락된 'super()' 호출 추가", + "Add_missing_typeof_95052": "누락된 'typeof' 추가", + "Add_names_to_all_parameters_without_names_95073": "이름이 없는 모든 매개 변수에 이름 추가", + "Add_optional_parameter_to_0_95191": "'{0}'에 선택적 매개 변수 추가", + "Add_optional_parameters_to_0_95192": "'{0}'에 선택적 매개 변수 추가", + "Add_or_remove_braces_in_an_arrow_function_95058": "화살표 함수에 중괄호 추가 또는 제거", + "Add_override_modifier_95160": "'override' 한정자 추가", + "Add_parameter_name_90034": "매개 변수 이름 추가", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "멤버 이름과 일치하는 모든 확인되지 않은 변수에 한정자 추가", + "Add_resolution_mode_import_attribute_95196": "'resolution-mode' 가져오기 특성 추가", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "필요한 모든 형식 전용 가져오기에 'resolution-mode' 가져오기 특성을 추가합니다.", + "Add_return_type_0_90063": "반환 형식 '{0}' 추가", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "이 식에 충족 및 형식 어설션을 추가하여(T를 T로 충족) 형식을 명시적으로 만듭니다.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "'{0}'을(를) 사용하여 충족 및 인라인 형식 어설션 추가", + "Add_to_all_uncalled_decorators_95044": "호출되지 않는 모든 데코레이터에 '()' 추가", + "Add_ts_ignore_to_all_error_messages_95042": "모든 오류 메시지에 '@ts-ignore' 추가", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "인덱스를 사용하여 액세스할 때 유형에 'undefined'를 추가합니다.", + "Add_undefined_to_optional_property_type_95169": "선택적 속성 유형에 'undefined' 추가", + "Add_undefined_type_to_all_uninitialized_properties_95029": "초기화되지 않은 모든 속성에 정의되지 않은 형식 추가", + "Add_undefined_type_to_property_0_95018": "'{0}' 속성에 '정의되지 않은' 형식 추가", + "Add_unknown_conversion_for_non_overlapping_types_95069": "겹치지 않는 형식에 대해 'unknown' 변환 추가", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "겹치지 않는 형식의 모든 변환에 'unknown' 추가", + "Add_void_to_Promise_resolved_without_a_value_95143": "값 없이 확인된 Promise에 'void' 추가", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "값 없이 확인된 모든 Promise에 'void' 추가", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json 파일을 추가하면 TypeScript 파일과 JavaScript 파일이 둘 다 포함된 프로젝트를 정리하는 데 도움이 됩니다. 자세한 내용은 https://aka.ms/tsconfig를 참조하세요.", + "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}'의 모든 선언에는 동일한 제약 조건이 있어야 합니다.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}'의 모든 선언에는 동일한 한정자가 있어야 합니다.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}'의 모든 선언에는 동일한 형식 매개 변수가 있어야 합니다.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "추상 메서드의 모든 선언은 연속적이어야 합니다.", + "All_destructured_elements_are_unused_6198": "구조 파괴된 요소가 모두 사용되지 않습니다.", + "All_imports_in_import_declaration_are_unused_6192": "가져오기 선언의 모든 가져오기가 사용되지 않습니다.", + "All_type_parameters_are_unused_6205": "모든 형식 매개 변수가 사용되지 않습니다.", + "All_variables_are_unused_6199": "모든 변수가 사용되지 않습니다.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript 파일이 프로그램의 일부가 되도록 허용합니다. 이러한 파일에서 오류를 가져오려면 'checkJs' 옵션을 사용하세요.", + "Allow_accessing_UMD_globals_from_modules_6602": "모듈에서 UMD 전역에 대한 액세스를 허용합니다.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 여기서는 코드 내보내기에는 영향을 주지 않고 형식 검사만 합니다.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "모듈에 기본 내보내기가 없을 때 'y에서 x 가져오기'를 허용합니다.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib에서 도우미 함수를 파일별로 포함하는 대신 프로젝트당 한 번씩 가져오도록 허용합니다.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "가져오기에서 TypeScript 파일 확장자를 포함하도록 허용합니다. '--moduleResolution bundler'와 '--noEmit' 또는 '--emitDeclarationOnly'를 설정해야 합니다.", + "Allow_javascript_files_to_be_compiled_6102": "Javascript 파일을 컴파일하도록 허용합니다.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "모듈을 확인할 때 여러 폴더가 하나로 처리되도록 허용합니다.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "이미 포함된 '{0}' 파일 이름은 '{1}' 파일 이름과 대/소문자만 다릅니다.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "앰비언트 모듈 선언은 상대적 모듈 이름을 지정할 수 없습니다.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "앰비언트 모듈은 다른 모듈 또는 네임스페이스에 중첩될 수 없습니다.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 모듈에는 여러 이름이 할당될 수 없습니다.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "추상 접근자는 구현이 있을 수 없습니다.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "접근성 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.", + "An_accessor_cannot_have_type_parameters_1094": "접근자에는 형식 매개 변수를 사용할 수 없습니다.", + "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' 속성은 선택 사항으로 선언할 수 없습니다.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "앰비언트 모듈 선언은 파일의 최상위에서만 사용할 수 있습니다.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "'{0}'의 인수가 제공되지 않았습니다.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "이 바인딩 패턴과 일치하는 인수가 제공되지 않았습니다.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "산술 피연산자는 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "화살표 함수에는 'this' 매개 변수를 사용할 수 없습니다.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "비동기 함수 또는 메서드는 'Promise'를 반환해야 합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.", + "An_async_iterator_must_have_a_next_method_2519": "비동기 반복기에는 'next()' 메서드가 있어야 합니다.", + "An_element_access_expression_should_take_an_argument_1011": "요소 액세스 식은 인수를 사용해야 합니다.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "프라이빗 식별자를 사용하여 열거형 멤버 이름을 지정할 수 없습니다.", + "An_enum_member_cannot_have_a_numeric_name_2452": "열거형 멤버는 숫자 이름을 가질 수 없습니다.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "열거형 멤버 이름 뒤에는 ',', '=' 또는 '}'가 와야 합니다.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "가능한 모든 컴파일러 옵션을 보여 주는 이 정보의 확장된 버전", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "내보내기 할당은 다른 내보낸 요소가 있는 모듈에서 사용될 수 없습니다.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "내보내기 할당은 네임스페이스에서 사용될 수 없습니다.", + "An_export_assignment_cannot_have_modifiers_1120": "내보내기 할당에는 한정자를 사용할 수 없습니다.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "내보내기 할당은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "내보내기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "내보내기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "An_export_declaration_cannot_have_modifiers_1193": "내보내기 선언에는 한정자를 사용할 수 없습니다.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 실제 값을 참조해야 하지만 '{0}'은(는) 형식 전용 선언으로 확인됩니다.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'verbatimModuleSyntax'를 사용하는 경우 'export =' 선언은 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'verbatimModuleSyntax'가 사용하도록 설정되어 있지만 '{0}'이(가) 형식 전용 선언으로 확인되는 경우 'export default'는 실제 값을 참조해야 합니다.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'verbatimModuleSyntax'가 사용하도록 설정된 경우 'export default'는 값을 참조해야 하지만 '{0}'은(는) 형식만 참조합니다.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 형식 식의 truthiness를 테스트할 수 없습니다.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "확장된 유니코드 이스케이프 값은 0x0과 0x10FFFF(포함) 사이여야 합니다.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "식별자 또는 키워드는 숫자 리터럴 바로 뒤에 올 수 없습니다.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "앰비언트 컨텍스트에서는 구현을 선언할 수 없습니다.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "가져오기 별칭은 '내보내기 형식'을 사용하여 내보낸 선언을 참조할 수 없습니다.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "가져오기 별칭은 '가져오기 형식'을 사용하여 가져온 선언을 참조할 수 없습니다.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "'verbatimModuleSyntax'를 사용하도록 설정한 경우 가져오기 별칭을 형식 또는 형식 전용 선언으로 확인할 수 없습니다.", + "An_import_alias_cannot_use_import_type_1392": "가져오기 별칭은 'import type'을 사용할 수 없습니다.", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "가져오기 선언은 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "가져오기 선언은 네임스페이스 또는 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "An_import_declaration_cannot_have_modifiers_1191": "가져오기 선언에는 한정자를 사용할 수 없습니다.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "가져오기 경로는 'allowImportingTsExtensions'가 사용하도록 설정된 경우에만 '{0}' 확장으로 끝날 수 있습니다.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "인덱스 시그니처에는 rest 매개 변수를 사용할 수 없습니다.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "인덱스 시그니처에는 후행 쉼표를 사용할 수 없습니다.", + "An_index_signature_must_have_a_type_annotation_1021": "인덱스 시그니처에는 형식 주석을 사용할 수 없습니다.", + "An_index_signature_must_have_exactly_one_parameter_1096": "인덱스 시그니처에는 한 개의 매개 변수만 사용할 수 있습니다.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "인덱스 시그니처 매개 변수에는 물음표를 사용할 수 없습니다.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "인덱스 시그니처 매개 변수에는 액세스 가능성 한정자를 사용할 수 없습니다.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "인덱스 시그니처 매개 변수에는 이니셜라이저를 사용할 수 없습니다.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "인덱스 시그니처 매개 변수에는 형식 주석을 사용할 수 없습니다.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "인덱스 시그니처 매개 변수 형식은 리터럴 유형이나 제네릭 형식일 수 없습니다. 대신 매핑된 개체 형식을 사용하세요.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "인덱스 시그니처 매개 변수 형식은 'string', 'number', 'symbol' 또는 템플릿 리터럴 형식이어야 합니다.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "인스턴스화 식 뒤에 속성 액세스가 있을 수 없습니다.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "인터페이스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 확장할 수 있습니다.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "인터페이스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 확장할 수 있습니다.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "인터페이스는 '{0}' 같은 기본 형식을 확장할 수 없습니다. 다른 명명된 개체 형식만 확장할 수 있습니다.", + "An_interface_property_cannot_have_an_initializer_1246": "인터페이스 속성에는 이니셜라이저를 사용할 수 없습니다.", + "An_iterator_must_have_a_next_method_2489": "반복기에는 'next()' 메서드가 있어야 합니다.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "@jsx pragma를 JSX 조각과 함께 사용하는 경우에는 @jsxFrag pragma가 필요합니다.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "개체 리터럴에 이름이 같은 여러 개의 get/set 접근자를 사용할 수 없습니다.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "개체 리터럴은 이름이 같은 여러 속성을 가질 수 없습니다.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "개체 리터럴에 이름이 같은 속성과 접근자를 사용할 수 없습니다.", + "An_object_member_cannot_be_declared_optional_1162": "개체 멤버는 선택적으로 선언될 수 없습니다.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "개체의 '[Symbol.hasInstance]' 메서드는 'instanceof' 식의 오른쪽에서 사용할 부울 값을 반환해야 합니다.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "선택적 체인에는 프라이빗 식별자를 사용할 수 없습니다.", + "An_optional_element_cannot_follow_a_rest_element_1266": "선택적 요소는 rest 요소 뒤에 올 수 없습니다.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this'의 외부 값은 이 컨테이너에서 섀도 처리됩니다.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "오버로드 시그니처는 생성기로 선언할 수 없습니다.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "지수 식의 왼쪽에는 '{0}' 연산자가 있는 단항 식을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.", + "Annotate_everything_with_types_from_JSDoc_95043": "JSDoc의 형식을 사용하여 모든 항목에 주석 달기", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "네임스페이스의 속성 expando 함수 형식에 주석 달기", + "Annotate_with_type_from_JSDoc_95009": "JSDoc의 형식을 사용하여 주석 추가", + "Another_export_default_is_here_2753": "다른 내보내기 기본값은 여기에 있습니다.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "단일 문자 이상과 일치할 수 있는 유니코드 속성은 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "단일 문자보다 더 일치할 수 있는 모든 항목은 부정된 문자 클래스 내에서 유효하지 않습니다.", + "Are_you_missing_a_semicolon_2734": "세미콜론이 없습니까?", + "Argument_expression_expected_1135": "인수 식이 필요합니다.", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 옵션의 인수는 {1}이어야(여야) 합니다.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "동적 가져오기의 인수는 spread 요소일 수 없습니다.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "'{0}' 형식의 인수는 '{1}' 형식의 매개 변수에 할당될 수 없습니다.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' 유형의 인수는 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형의 매개 변수에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "REST 매개 변수 '{0}'에 대한 인수가 제공되지 않았습니다.", + "Array_element_destructuring_pattern_expected_1181": "배열 요소 구조 파괴 패턴이 필요합니다.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "분산 요소가 있는 배열은 --isolatedDeclarations로 유추할 수 없습니다.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "어설션에서 호출 대상의 모든 이름은 명시적 형식 주석을 사용하여 선언해야 합니다.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "어설션에서 호출 대상은 식별자 또는 정규화된 이름이어야 합니다.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "함수를 선언하지 않고 함수에 속성을 할당하는 것은 --isolatedDeclarations에서 지원되지 않습니다. 이 함수에 할당된 속성에 대한 명시적 선언을 추가합니다.", + "Asterisk_Slash_expected_1010": "'*/'가 필요합니다.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "하나 이상의 접근자에 --isolatedDeclarations를 사용하는 명시적 형식 주석이 있어야 합니다.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "전역 범위에 대한 확대는 외부 모듈 또는 앰비언트 모듈 선언에만 직접 중첩될 수 있습니다.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "전역 범위에 대한 확대는 이미 존재하는 앰비언트 컨텍스트에 표시되지 않는 한 'declare' 한정자를 포함해야 합니다.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "프로젝트 '{0}'에서 입력에 대한 자동 검색을 사용하도록 설정되었습니다. '{2}' 캐시 위치를 사용하여 모듈 '{1}'에 대해 추가 해결 패스를 실행합니다.", + "BUILD_OPTIONS_6919": "빌드 옵션", + "Backwards_Compatibility_6253": "이전 버전과의 호환성", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "기본 클래스 식에서 클래스 형식 매개 변수를 참조할 수 없습니다.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "기본 생성자 반환 형식 '{0}'은(는) 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합이 아닙니다.", + "Base_constructors_must_all_have_the_same_return_type_2510": "기본 생성자는 모두 반환 형식이 같아야 합니다.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "비추상 모듈 이름을 확인할 기본 디렉터리입니다.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020 미만을 대상으로 할 경우 bigint 리터럴을 사용할 수 없습니다.", + "Binary_digit_expected_1177": "이진수가 있어야 합니다.", + "Binding_element_0_implicitly_has_an_1_type_7031": "바인딩 요소 '{0}'에 암시적으로 '{1}' 형식이 있습니다.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "선언 전에 사용된 블록 범위 변수 '{0}'입니다.", + "Build_a_composite_project_in_the_working_directory_6925": "작업 디렉터리에서 복합 프로젝트를 빌드합니다.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "최신으로 보이는 프로젝트를 포함하여 모든 프로젝트를 빌드합니다.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "최신 상태가 아닌 경우, 하나 이상의 프로젝트 및 해당 종속성 빌드", + "Build_option_0_requires_a_value_of_type_1_5073": "빌드 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", + "Building_project_0_6358": "'{0}' 프로젝트를 빌드하는 중...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "기본 제공 반복기는 'any' 대신 'undefined'의 'TReturn' 형식으로 인스턴스화됩니다.", + "COMMAND_LINE_FLAGS_6921": "명령줄 플래그", + "COMMON_COMMANDS_6916": "일반 명령", + "COMMON_COMPILER_OPTIONS_6920": "일반 컴파일러 옵션", + "Call_decorator_expression_90028": "데코레이터 식 호출", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "호출 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "반환 형식 주석이 없는 호출 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "인수가 없는 호출 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", + "Call_target_does_not_contain_any_signatures_2346": "호출 대상에 시그니처가 포함되어 있지 않습니다.", + "Can_only_convert_logical_AND_access_chains_95142": "논리적 AND 액세스 체인만 변환할 수 있습니다.", + "Can_only_convert_named_export_95164": "명명된 내보내기만 변환할 수 있습니다.", + "Can_only_convert_property_with_modifier_95137": "한정자만 사용하여 속성을 변환할 수 있습니다.", + "Can_only_convert_string_concatenations_and_string_literals_95154": "문자열 연결 및 문자열 리터럴만 변환할 수 있습니다.", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}'이(가) 네임스페이스가 아니라 형식이므로 '{0}.{1}'에 액세스할 수 없습니다. '{0}'에서 '{0}[\"{1}\"]'과(와) 함께 '{1}' 속성의 형식을 검색하려고 했나요?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}'을(를) 사용하도록 설정한 경우 한정 없이 다른 파일에서 '{0}'에 액세스할 수 없습니다. 대신 '{2}'을(를) 사용하세요.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}'이(가) 사용하도록 설정된 경우 앰비언트 const 열거형에 액세스할 수 없습니다.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' 생성자 형식을 '{1}' 생성자 형식에 할당할 수 없습니다.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "추상 생성자 형식을 비추상 생성자 형식에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "클래스이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "상수이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "함수이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "네임스페이스이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "읽기 전용 속성이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "열거형이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "가져오기이므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "변수가 아니므로 '{0}'에 할당할 수 없습니다.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "프라이빗 메서드 '{0}'에 할당할 수 없습니다. 프라이빗 메서드에는 쓸 수 없습니다.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' 모듈은 모듈이 아닌 엔터티로 확인되므로 확대할 수 없습니다.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "모듈이 아닌 엔터티로 확인되기 때문에 값 내보내기로 모듈 '{0}'을(를) 확대할 수 없습니다.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' 플래그가 'amd' 또는 'system'이 아닌 경우 '{0}' 옵션을 사용하여 모듈을 컴파일할 수 없습니다.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "추상 클래스의 인스턴스를 만들 수 없습니다.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 포함 생성기는 항상 '{0}'을(를) 전송하므로 값에 반복을 위임할 수 없습니다.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}'을(를) 내보낼 수 없습니다. 지역 선언만 모듈에서 내보낼 수 있습니다.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "'{0}' 클래스를 확장할 수 없습니다. 클래스 생성자가 private로 표시되어 있습니다.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "인터페이스 '{0}'을(를) 확장할 수 없습니다. 'implements'를 확장하시겠습니까?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "현재 디렉터리에서 tsconfig.json 파일을 찾을 수 없습니다. {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "지정된 디렉터리에서 tsconfig.json 파일을 찾을 수 없습니다. '{0}'.", + "Cannot_find_global_type_0_2318": "전역 형식 '{0}'을(를) 찾을 수 없습니다.", + "Cannot_find_global_value_0_2468": "전역 값 '{0}'을(를) 찾을 수 없습니다.", + "Cannot_find_lib_definition_for_0_2726": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}'에 대한 라이브러리 정의를 찾을 수 없습니다. '{1}'이(가) 아닌지 확인하세요.", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' 모듈을 찾을 수 없습니다. '--resolveJsonModule'을 사용하여 '. json' 확장명이 포함된 모듈을 가져오는 것이 좋습니다.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' 모듈을 찾을 수 없습니다. 'moduleResolution' 옵션을 'nodenext'로 설정하거나 'paths' 옵션에 별칭을 추가하려고 하셨나요?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' 모듈 또는 해당 형식 선언을 찾을 수 없습니다.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' 부수 효과 가져오기에 대한 모듈 또는 형식 선언을 찾을 수 없습니다.", + "Cannot_find_name_0_2304": "'{0}' 이름을 찾을 수 없습니다.", + "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' 이름을 찾을 수 없습니다. 인스턴스 멤버 'this.{0}'을(를) 사용하시겠습니까?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' 이름을 찾을 수 없습니다. 정적 멤버 '{1}.{0}'을(를) 사용하시겠습니까?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "이름 '{0}' 찾을 수 없습니다. 비동기 함수에 쓰려고 했나요?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 '{1}' 이상으로 변경해 보세요.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'dom'을 포함하도록 'lib' 컴파일러 옵션을 변경해 보세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 사용해 보세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' 이름을 찾을 수 없습니다. Bun에 대한 형식 정의를 설치해야 하나요? 'npm i --save-dev @types/bun'을 시도한 다음 tsconfig의 형식 필드에 'bun'을 추가합니다.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도합니다.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도한 다음, tsconfig의 형식 필드에 'jest' 또는 'mocha'를 추가하세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도합니다.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도한 다음, tsconfig의 형식 필드에 'jquery'를 추가하세요.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도합니다.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도한 다음, tsconfig의 형식 필드에 'node'를 추가하세요.", + "Cannot_find_namespace_0_2503": "'{0}' 네임스페이스를 찾을 수 없습니다.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "네임스페이스 '{0}'을(를) 찾을 수 없습니다. '{1}'을(를) 의미했나요?", + "Cannot_find_parameter_0_1225": "'{0}' 매개 변수를 찾을 수 없습니다.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "입력 파일의 공용 하위 디렉터리 경로를 찾을 수 없습니다.", + "Cannot_find_type_definition_file_for_0_2688": "'{0}'에 대한 형식 정의 파일을 찾을 수 없습니다.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "형식 선언 파일을 가져올 수 없습니다. '{1}' 대신 '{0}'을(를) 가져오세요.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "블록 범위 선언 '{1}'과(와) 동일한 범위 내에서 외부 범위 변수 '{0}'을(를) 초기화할 수 없습니다.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "'null'일 수 있는 개체를 호출할 수 없습니다.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "'null'이거나 '정의되지 않음'일 수 있는 개체를 호출할 수 없습니다.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "'정의되지 않음'일 수 있는 개체를 호출할 수 없습니다.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 구조 파괴는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 배열 spread는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "반복기의 'next' 메서드에 '{1}' 형식이 필요하지만 for-of는 항상 '{0}'을(를) 전송하므로 값을 반복할 수 없습니다.", + "Cannot_move_statements_to_the_selected_file_95183": "문을 선택한 파일로 이동할 수 없습니다.", + "Cannot_move_to_file_selected_file_is_invalid_95179": "파일로 이동할 수 없습니다. 선택한 파일이 유효하지 않습니다.", + "Cannot_read_file_0_5083": "'{0}' 파일을 읽을 수 없습니다.", + "Cannot_read_file_0_Colon_1_5012": "파일 '{0}'을(를) 읽을 수 없습니다. {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "블록 범위 변수 '{0}'을(를) 다시 선언할 수 없습니다.", + "Cannot_redeclare_exported_variable_0_2323": "내보낸 변수 '{0}'을(를) 다시 선언할 수 없습니다.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 절에서 식별자 '{0}'을(를) 다시 선언할 수 없습니다.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "형식 주석에서 함수 호출을 시작할 수 없습니다.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' 플래그를 제공하지 않으면 JSX를 사용할 수 없습니다.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}'을(를) 사용하도록 설정한 경우 형식 또는 형식 전용 네임스페이스에서 'export import'를 사용할 수 없습니다.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module'이 'none'인 경우 가져오기, 내보내기 또는 모듈 확대를 사용할 수 없습니다.", + "Cannot_use_namespace_0_as_a_type_2709": "'{0}' 네임스페이스를 형식으로 사용할 수 없습니다.", + "Cannot_use_namespace_0_as_a_value_2708": "'{0}' 네임스페이스를 값으로 사용할 수 없습니다.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "데코레이팅된 클래스의 정적 속성 이니셜라이저에서는 'this'를 사용할 수 없습니다.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "참조된 프로젝트 '{1}'에서 생성된 '.tsbuildinfo' 파일을 덮어쓰므로 '{0}' 파일을 쓸 수 없습니다.", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "'{0}' 파일은 여러 입력 파일로 덮어쓰이므로 쓸 수 없습니다.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "'{0}' 파일은 입력 파일을 덮어쓰므로 쓸 수 없습니다.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 절 변수에 이니셜라이저를 사용할 수 없습니다.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "지정한 경우 catch 절 변수 형식 주석은 'any' 또는 'unknown'이어야 합니다.", + "Change_0_to_1_90014": "'{0}'을(를) '{1}'(으)로 변경", + "Change_all_extended_interfaces_to_implements_95038": "확장된 모든 인터페이스를 'implements'로 변경", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "모든 jsdoc-style 형식을 TypeScript로 변경", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "모든 jsdoc-style 형식을 TypeScript로 변경(그리고 nullable 형식에 '| undefined' 추가)", + "Change_extends_to_implements_90003": "'extends'를 'implements'로 변경", + "Change_spelling_to_0_90022": "맞춤법을 '{0}'(으)로 변경", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "선언되었지만 생성자에 설정되지 않은 클래스 속성을 확인합니다.", + "Check_side_effect_imports_6806": "부작용 가져오기를 확인합니다.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' 및 'apply' 메서드에 대한 인수가 원래 함수와 일치하는지 확인하세요.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}'이(가) '{1}' - '{2}'에 대해 일치하는 가장 긴 접두사인지 확인하는 중입니다.", + "Circular_definition_of_import_alias_0_2303": "가져오기 별칭 '{0}'의 순환 정의입니다.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "구성을 확인하는 동안 순환이 검색되었습니다. {0}", + "Circularity_originates_in_type_at_this_location_2751": "순환이 이 위치의 형식에서 시작됩니다.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "'{0}' 클래스는 인스턴스 멤버 접근자 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 접근자를 인스턴스 멤버 함수로 정의합니다.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "'{0}' 클래스가 인스턴스 멤버 함수 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 함수를 인스턴스 멤버 접근자로 정의합니다.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "'{0}' 클래스가 인스턴스 멤버 속성 '{1}'을(를) 정의하지만 확장 클래스 '{2}'은(는) 이 속성을 인스턴스 멤버 함수로 정의합니다.", + "Class_0_incorrectly_extends_base_class_1_2415": "'{0}' 클래스가 기본 클래스 '{1}'을(를) 잘못 확장합니다.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' 클래스가 '{1}' 클래스를 잘못 구현합니다. '{1}'을(를) 확장하고 이 클래스의 멤버를 하위 클래스로 상속하시겠습니까?", + "Class_0_incorrectly_implements_interface_1_2420": "'{0}' 클래스가 '{1}' 인터페이스를 잘못 구현합니다.", + "Class_0_used_before_its_declaration_2449": "선언 전에 사용된 '{0}' 클래스입니다.", + "Class_constructor_may_not_be_a_generator_1368": "클래스 생성자는 생성기가 아닐 수 있습니다.", + "Class_constructor_may_not_be_an_accessor_1341": "클래스 생성자는 접근자가 아닐 수 있습니다.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "클래스 선언에서 '{0}'에 대한 오버로드 목록을 구현할 수 없습니다.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 '@extends' 태그를 둘 이상 가질 수 없습니다.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "클래스 데코레이터는 정적 프라이빗 식별자와 함께 사용할 수 없습니다. 실험적 데코레이터를 제거하는 것이 좋습니다.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "부모 클래스에서 정의한 '{0}' 클래스 필드는 super를 통해 자식 클래스에서 액세스할 수 없습니다.", + "Class_name_cannot_be_0_2414": "클래스 이름은 '{0}'일 수 없습니다.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "{0} 모듈을 사용하는 ES5를 대상으로 하는 경우 클래스 이름은 'Object'일 수 없습니다.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "클래스 정적 측면 '{0}'이(가) 기본 클래스 정적 측면 '{1}'을(를) 잘못 확장합니다.", + "Classes_can_only_extend_a_single_class_1174": "클래스는 단일 클래스만 확장할 수 있습니다.", + "Classes_may_not_have_a_field_named_constructor_18006": "클래스에는 'constructor' 필드를 사용할 수 없습니다.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "클래스에 포함된 코드는 '{0}'의 사용을 허용하지 않는 JavaScript의 strict 모드로 평가됩니다. 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode를 참조하세요.", + "Command_line_Options_6171": "명령줄 옵션", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "구성 파일에 대한 경로 또는 'tsconfig.json'이 포함된 폴더에 대한 경로를 고려하여 프로젝트를 컴파일합니다.", + "Compiler_Diagnostics_6251": "컴파일러 진단", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' 컴파일러 옵션에는 빈 문자열을 지정할 수 없습니다.", + "Compiler_option_0_expects_an_argument_6044": "컴파일러 옵션 '{0}'에는 인수가 필요합니다.", + "Compiler_option_0_may_not_be_used_with_build_5094": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서 사용되지 않을 수 있습니다.", + "Compiler_option_0_may_only_be_used_with_build_5093": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서만 사용할 수 있습니다.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "값 '{1}'의 컴파일러 옵션 '{0}'이(가) 불안정합니다. 야간 TypeScript를 사용하여 이 오류를 차단하세요. 'npm install -D typescript@next'로 업데이트해 보세요.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "컴파일러 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "컴파일러는 프라이빗 식별자 하위 수준을 내보낼 때 '{0}' 이름을 예약합니다.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "지정된 경로에 있는 TypeScript 프로젝트를 컴파일합니다.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "현재 프로젝트(작업 디렉터리의 tsconfig.json)를 컴파일합니다.", + "Compiles_the_current_project_with_additional_settings_6929": "추가 설정을 사용하여 현재 프로젝트를 컴파일합니다.", + "Completeness_6257": "완성도", + "Composite_projects_may_not_disable_declaration_emit_6304": "복합 프로젝트는 선언 내보내기를 비활성화할 수 없습니다.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "복합 프로젝트는 증분 컴파일을 비활성화할 수 없습니다.", + "Computed_from_the_list_of_input_files_6911": "입력 파일 목록에서 컴퓨팅됨", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "계산된 속성은 --isolatedDeclarations가 있는 숫자 또는 문자열 리터럴, 변수 또는 점선 식이어야 합니다.", + "Computed_property_names_are_not_allowed_in_enums_1164": "컴퓨팅된 속성 이름은 열거형에 사용할 수 없습니다.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "클래스 또는 개체 리터럴의 계산된 속성 이름은 --isolatedDeclarations로 유추할 수 없습니다.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "계산된 값은 문자열 값 멤버가 포함된 열거형에서 허용되지 않습니다.", + "Concatenate_and_emit_output_to_single_file_6001": "출력을 연결하고 단일 파일로 내보냅니다.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "가져오기를 확인할 때 확인자별 기본값 외에 설정할 조건입니다.", + "Conflicts_are_in_this_file_6201": "이 파일에 충돌이 있습니다.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "이 클래스에 'declare' 한정자를 추가하는 것이 좋습니다.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "구문 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "반환 형식 주석이 없는 구문 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "인수가 없는 구문 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.", + "Constructor_implementation_is_missing_2390": "생성자 구현이 없습니다.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "'{0}' 클래스의 생성자는 private이며 클래스 선언 내에서만 액세스할 수 있습니다.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' 클래스의 생성자는 protected이며 클래스 선언 내에서만 액세스할 수 있습니다.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "공용 구조체 형식에 사용되는 경우 생성자 형식 표기법을 괄호로 묶어야 합니다.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "교집합 형식에 사용되는 경우 생성자 형식 표기법을 괄호로 묶어야 합니다.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "파생 클래스의 생성자는 'super' 호출을 포함해야 합니다.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "포함 파일이 지정되지 않았고 루트 디렉터리를 확인할 수 없어 'node_modules' 폴더 조회를 건너뜁니다.", + "Containing_function_is_not_an_arrow_function_95128": "포함 함수가 화살표 함수가 아닙니다.", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "모듈 형식의 JS 파일을 감지하는 데 사용되는 방법을 제어합니다.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "'{0}' 형식을 '{1}' 형식으로 변환한 작업은 실수일 수 있습니다. 두 형식이 서로 충분히 겹치지 않기 때문입니다. 의도적으로 변환한 경우에는 먼저 'unknown'으로 식을 변환합니다.", + "Convert_0_to_1_in_0_95003": "'{0}'을(를) '{0}의 {1}'(으)로 변환", + "Convert_0_to_mapped_object_type_95055": "'{0}'을(를) 매핑된 개체 형식으로 변환", + "Convert_all_const_to_let_95102": "모든 'const'를 'let'으로 변환", + "Convert_all_constructor_functions_to_classes_95045": "모든 생성자 함수를 클래스로 변환", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "모든 잘못된 문자를 HTML 엔터티 코드로 변환", + "Convert_all_re_exported_types_to_type_only_exports_1365": "다시 내보낸 모든 형식을 형식 전용 내보내기로 변환", + "Convert_all_require_to_import_95048": "모든 'require'를 'import'로 변환", + "Convert_all_to_async_functions_95066": "모두 비동기 함수로 변환", + "Convert_all_to_bigint_numeric_literals_95092": "모두 bigint 숫자 리터럴로 변환", + "Convert_all_to_default_imports_95035": "모든 항목을 기본 가져오기로 변환", + "Convert_all_type_literals_to_mapped_type_95021": "모든 형식 리터럴을 매핑된 형식으로 변환", + "Convert_all_typedef_to_TypeScript_types_95177": "모든 typedef를 TypeScript 형식으로 변환합니다.", + "Convert_arrow_function_or_function_expression_95122": "화살표 함수 또는 함수 식 변환", + "Convert_const_to_let_95093": "'const'를 'let'으로 변환", + "Convert_default_export_to_named_export_95061": "기본 내보내기를 명명된 내보내기로 변환", + "Convert_function_declaration_0_to_arrow_function_95106": "함수 선언 '{0}'을(를) 화살표 함수로 변환", + "Convert_function_expression_0_to_arrow_function_95105": "함수 식 '{0}'을(를) 화살표 함수로 변환", + "Convert_function_to_an_ES2015_class_95001": "함수를 ES2015 클래스로 변환", + "Convert_invalid_character_to_its_html_entity_code_95100": "잘못된 문자를 html 엔터티 코드로 변환", + "Convert_named_export_to_default_export_95062": "명명된 내보내기를 기본 내보내기로 변환", + "Convert_named_imports_to_default_import_95170": "명명된 가져오기를 기본 가져오기로 변환", + "Convert_named_imports_to_namespace_import_95057": "명명된 가져오기를 네임스페이스 가져오기로 변환", + "Convert_namespace_import_to_named_imports_95056": "네임스페이스 가져오기를 명명된 가져오기로 변환", + "Convert_overload_list_to_single_signature_95118": "오버로드 목록을 단일 시그니처로 변환", + "Convert_parameters_to_destructured_object_95075": "매개 변수를 구조 파괴 개체로 변환", + "Convert_require_to_import_95047": "'require'를 'import'로 변환", + "Convert_to_ES_module_95017": "ES 모듈로 변환", + "Convert_to_a_bigint_numeric_literal_95091": "bigint 숫자 리터럴로 변환", + "Convert_to_anonymous_function_95123": "익명 함수로 변환", + "Convert_to_arrow_function_95125": "화살표 함수로 변환", + "Convert_to_async_function_95065": "비동기 함수로 변환", + "Convert_to_default_import_95013": "기본 가져오기로 변환", + "Convert_to_named_function_95124": "명명된 함수로 변환", + "Convert_to_optional_chain_expression_95139": "선택적 체인 식으로 변환합니다.", + "Convert_to_template_string_95096": "템플릿 문자열로 변환", + "Convert_to_type_only_export_1364": "형식 전용 내보내기로 변환", + "Convert_typedef_to_TypeScript_type_95176": "typedef를 TypeScript 형식으로 변환합니다.", + "Corrupted_locale_file_0_6051": "로캘 파일 {0}이(가) 손상되었습니다.", + "Could_not_convert_to_anonymous_function_95153": "익명 함수로 변환할 수 없습니다.", + "Could_not_convert_to_arrow_function_95151": "화살표 함수로 변환할 수 없습니다.", + "Could_not_convert_to_named_function_95152": "명명된 함수로 변환할 수 없습니다.", + "Could_not_determine_function_return_type_95150": "함수 반환 형식을 확인할 수 없습니다.", + "Could_not_find_a_containing_arrow_function_95127": "포함하는 화살표 함수를 찾을 수 없습니다.", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "모듈 '{0}'에 대한 선언 파일을 찾을 수 없습니다. '{1}'에는 암시적으로 'any' 형식이 포함됩니다.", + "Could_not_find_convertible_access_expression_95140": "변환 가능한 액세스 식을 찾을 수 없습니다.", + "Could_not_find_export_statement_95129": "export 문을 찾을 수 없습니다.", + "Could_not_find_import_clause_95131": "import 절을 찾을 수 없습니다.", + "Could_not_find_matching_access_expressions_95141": "일치하는 액세스 식을 찾을 수 없습니다.", + "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?", + "Could_not_find_namespace_import_or_named_imports_95132": "네임스페이스 가져오기 또는 명명된 가져오기를 찾을 수 없습니다.", + "Could_not_find_property_for_which_to_generate_accessor_95135": "접근자를 생성할 속성을 찾을 수 없습니다.", + "Could_not_find_variable_to_inline_95185": "인라인할 변수를 찾을 수 없습니다.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "{1} 확장이 포함된 '{0}' 경로를 확인할 수 없습니다.", + "Could_not_write_file_0_Colon_1_5033": "'{0}' 파일을 쓸 수 없습니다. '{1}'.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "내보낸 JavaScript 파일의 소스 맵 파일을 만듭니다.", + "Create_sourcemaps_for_d_ts_files_6614": "d.ts 파일의 sourcemap을 만듭니다.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "작업 디렉터리에 권장되는 설정을 사용하여 tsconfig.json을 만듭니다.", + "DIRECTORY_6038": "디렉터리", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "문자 클래스에서는 10진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "앞에 0이 있는 10진수는 허용되지 않습니다.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "선언이 다른 파일의 선언을 확대합니다. 이 작업은 직렬화할 수 없습니다.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "이 파일에 대한 선언 내보내기에서는 확대를 위해 이 가져오기를 유지해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "이 파일의 선언 내보내기에는 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "이 파일의 선언 내보내기에는 '{1}' 모듈의 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "이 매개 변수에 대한 선언 내보내기를 사용하려면 정의되지 않은 형식을 암시적으로 추가해야 합니다. 이는 --isolatedDeclarations에서는 지원되지 않습니다.", + "Declaration_expected_1146": "선언이 필요합니다.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "선언 이름이 기본 제공 전역 ID '{0}'과(와) 충돌합니다.", + "Declaration_or_statement_expected_1128": "선언 또는 문이 필요합니다.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "선언 또는 문이 필요합니다. 이 '='은 문 블록을 따르므로 구조 파괴 할당을 작성하려는 경우 전체 할당을 괄호로 묶어야 할 수 있습니다.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "한정된 할당 어설션이 포함된 선언에는 형식 주석도 있어야 합니다.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "이니셜라이저가 포함된 선언에는 한정적 할당 어설션을 사용할 수 없습니다.", + "Declare_a_private_field_named_0_90053": "'{0}'(이)라는 프라이빗 필드를 선언합니다.", + "Declare_method_0_90023": "'{0}' 메서드 선언", + "Declare_private_method_0_90038": "프라이빗 메서드 '{0}' 선언", + "Declare_private_property_0_90035": "'{0}' 프라이빗 속성 선언", + "Declare_property_0_90016": "'{0}' 속성 선언", + "Declare_static_method_0_90024": "'{0}' 정적 메서드 선언", + "Declare_static_property_0_90027": "'{0}' 정적 속성 선언", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "데코레이터 함수 반환 유형 '{0}'은(는) '{1}' 유형에 할당할 수 없습니다.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "데코레이터 함수 반환 유형은 '{0}'이지만 'void' 또는 'any'여야 합니다.", + "Decorator_used_before_export_here_1486": "여기에서 'export' 앞에 데코레이터를 사용했습니다.", + "Decorators_are_not_valid_here_1206": "데코레이터는 여기에 사용할 수 없습니다.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "동일한 이름의 여러 get/set 접근자에 데코레이터를 적용할 수 없습니다.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "'export' 앞에도 데코레이터가 나타나면 'export' 또는 'export default' 뒤에 나타나지 않을 수 있습니다.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "데코레이터는 속성 선언의 이름 및 모든 키워드 앞에 와야 합니다.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "기본 catch 절 변수는 'any' 대신 'unknown'입니다.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "모듈의 기본 내보내기에서 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "기본 내보내기는 --isolatedDeclarations로 유추할 수 없습니다.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "지연된 가져오기에서는 기본 가져오기를 사용할 수 없습니다.", + "Default_library_1424": "기본 라이브러리", + "Default_library_for_target_0_1425": "대상 '{0}'의 기본 라이브러리", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "지연된 가져오기는 '--module' 플래그가 'esnext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "{0} 식별자의 정의가 다른 파일의 정의와 충돌합니다.", + "Delete_all_unused_declarations_95024": "사용하지 않는 선언 모두 삭제", + "Delete_all_unused_imports_95147": "사용하지 않는 가져오기 모두 삭제", + "Delete_all_unused_param_tags_95172": "사용하지 않은 '@param' 태그 모두 삭제", + "Delete_the_outputs_of_all_projects_6365": "모든 프로젝트의 출력을 삭제합니다.", + "Delete_unused_param_tag_0_95171": "사용하지 않는 '@param' 태그 '{0}' 삭제", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[사용되지 않음] 대신 '--jsxFactory'를 사용합니다. 'react' JSX 내보내기를 대상으로 할 경우 createElement에 대해 호출되는 개체를 지정합니다.", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[사용되지 않음] 대신 '--outFile'을 사용합니다. 출력을 연결하고 단일 파일로 내보냅니다.", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[사용되지 않음] 대신 '--skipLibCheck'를 사용합니다. 기본 라이브러리 선언 파일의 형식 검사를 건너뜁니다.", + "Deprecated_setting_Use_outFile_instead_6677": "더 이상 사용되지 않는 설정입니다. 대신 'outFile'을 사용하세요.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "'await' 사용을 잊으셨습니까?", + "Did_you_mean_0_1369": "'{0}'을(를) 사용하시겠습니까?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}'을(를) 'new (...args: any[]) => {1}' 형식으로 제한하시겠습니까?", + "Did_you_mean_to_call_this_expression_6212": "이 식을 호출하시겠습니까?", + "Did_you_mean_to_mark_this_function_as_async_1356": "이 함수를 'async'로 표시하시겠습니까?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':'을 사용하려고 하셨습니까? '='은 포함하는 개체 리터럴이 구조 파괴 패턴에 속하는 경우에만 속성 이름 뒤에 올 수 있습니다.", + "Did_you_mean_to_use_new_with_this_expression_6213": "이 식에서 'new'를 사용하시겠습니까?", + "Digit_expected_1124": "숫자가 필요합니다.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' 디렉터리가 없으므로 이 디렉터리에서 모든 조회를 건너뜁니다.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "디렉터리 '{0}'에는 포함하는 package.json 범위가 없습니다. 가져오기가 확인되지 않습니다.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "내보낸 JavaScript 파일에서 'use strict' 지시문을 추가하지 않도록 설정합니다.", + "Disable_checking_for_this_file_90018": "이 파일 확인을 사용하지 않도록 설정", + "Disable_emitting_comments_6688": "주석 내보내기 사용 안 함", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc 주석에 '@internal'이 있는 선언을 내보내는 것을 비활성화합니다.", + "Disable_emitting_files_from_a_compilation_6660": "컴파일에서 파일을 내보내지 않도록 설정합니다.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "형식 검사 오류가 보고되면 파일을 내보내지 않도록 설정합니다.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "생성된 코드에서 'const enum' 선언 지우기를 비활성화합니다.", + "Disable_error_reporting_for_unreachable_code_6603": "연결할 수 없는 코드에 대한 오류 보고를 사용하지 않습니다.", + "Disable_error_reporting_for_unused_labels_6604": "사용하지 않은 레이블에 대한 오류 보고를 사용하지 않습니다.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "전체 형식 검사를 사용하지 않도록 설정합니다(중요한 구문 분석 및 내보내기 오류만 보고됨).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "컴파일된 출력에서 ​​'__extents'와 같은 사용자 지정 도우미 함수 생성을 비활성화합니다.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "기본 lib.d.ts를 비롯하여 모든 라이브러리 파일을 포함하지 않도록 설정합니다.", + "Disable_loading_referenced_projects_6235": "참조된 프로젝트 로드를 사용하지 않습니다.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "복합 프로젝트를 참조할 때 선언 파일 대신 선호하는 소스 파일을 비활성화합니다.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "개체 리터럴을 만드는 동안에는 초과 속성 오류에 대한 보고를 사용하지 않습니다.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "실제 경로의 symlink를 확인하지 않도록 설정합니다. 이는 노드의 동일한 플래그와 상관 관계가 있습니다.", + "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript 프로젝트에 대한 크기 제한을 사용하지 않도록 설정합니다.", + "Disable_solution_searching_for_this_project_6224": "이 프로젝트를 검색하는 솔루션을 사용하지 않도록 설정합니다.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "함수 형식의 제네릭 시그니처에 대한 엄격한 검사를 사용하지 않도록 설정합니다.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript 프로젝트의 형식 인식을 사용하지 않습니다.", + "Disable_truncating_types_in_error_messages_6663": "오류 메시지에서 잘림 유형을 사용하지 않도록 설정합니다.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "참조된 프로젝트의 선언 파일 대신 소스 파일을 사용하지 않도록 설정합니다.", + "Disable_wiping_the_console_in_watch_mode_6684": "시계 모드에서 콘솔 초기화를 비활성화합니다.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "프로젝트에서 파일 이름을 확인하여 형식 인식에 대한 유추를 사용하지 않습니다.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "TypeScript가 프로젝트에 추가해야 하는 파일 수를 확장하는 '가져오기', '요구' 또는 ''를 허용하지 않습니다.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "동일한 파일에 대해 대/소문자를 일관되지 않게 사용한 참조를 허용하지 않습니다.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "컴파일된 파일 목록에 삼중 슬래시 참조 또는 가져온 모듈을 추가하지 않습니다.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript의 일부가 아닌 런타임 구문을 허용하지 않습니다.", + "Do_not_emit_comments_to_output_6009": "주석을 출력에 내보내지 마세요.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' 주석이 있는 코드에 대한 선언을 내보내지 마세요.", + "Do_not_emit_outputs_6010": "출력을 내보내지 않습니다.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "오류가 보고되면 출력을 내보내지 않습니다.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "'use strict' 지시문을 모듈 출력에 내보내지 마세요.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "생성된 코드에서 const 열거형 선언을 지우지 마세요.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "컴파일된 출력에서 '__extends'와 같은 사용자 지정 도우미 함수를 생성하지 않습니다.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "기본 라이브러리 파일(lib.d.ts)을 포함하지 않습니다.", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "접근할 수 없는 코드에 대한 오류를 보고하지 않습니다.", + "Do_not_report_errors_on_unused_labels_6074": "사용되지 않는 레이블에 대한 오류를 보고하지 않습니다.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "symlink의 실제 경로를 확인하지 마세요.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' 설정에 따라 출력 파일의 형식으로 작성되도록 형식 전용으로 표시되지 않은 가져오기 또는 내보내기를 변환하거나 생략하지 마세요.", + "Do_not_truncate_error_messages_6165": "오류 메시지를 자르지 않습니다.", + "Duplicate_function_implementation_2393": "중복된 함수 구현입니다.", + "Duplicate_identifier_0_2300": "'{0}' 식별자가 중복되었습니다.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "'{0}' 식별자가 중복되었습니다. 컴파일러는 모듈의 최상위 범위에 이름 '{1}'을(를) 예약합니다.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' 식별자가 중복되었습니다. 컴파일러는 비동기 함수를 포함하는 모듈의 최상위 범위에 '{1}' 이름을 예약합니다.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "중복 식별자 '{0}'입니다. 컴파일러는 정적 이니셜라이저에서 'super' 참조를 내보낸 경우 '{1}' 이름을 예약합니다.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "중복 식별자 '{0}'입니다. 컴파일러는 '{1}' 선언을 사용하여 비동기 함수를 지원합니다.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "'{0}' 식별자가 중복되었습니다. 정적 요소와 인스턴스 요소는 같은 프라이빗 이름을 공유할 수 없습니다.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "중복 식별자 'arguments'입니다. 컴파일러는 'arguments'를 사용해서 rest 매개 변수를 초기화합니다.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "'_newTarget' 식별자가 중복되었습니다. 컴파일러는 변수 선언 '_newTarget'을 사용하여 'new.target' 메타 속성 참조를 캡처합니다.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "중복 식별자 '_this'입니다. 컴파일러는 변수 선언 '_this'를 사용해서 'this' 참조를 캡처합니다.", + "Duplicate_index_signature_for_type_0_2374": "'{0}' 형식에 대한 인덱스 시그니처가 중복되었습니다.", + "Duplicate_label_0_1114": "중복된 레이블 '{0}'입니다.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "중복 속성 '{0}'입니다.", + "Duplicate_regular_expression_flag_1500": "중복된 정규식 플래그입니다.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "동적 가져오기의 지정자는 'string' 형식이어야 하지만 여기에서 형식은 '{0}'입니다.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "동적 가져오기는 '--module' 플래그가 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20' 또는 'nodenext'로 설정된 경우에만 지원됩니다.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "동적 가져오기는 모듈 지정자와 선택적 특성 집합만 인수로 허용할 수 있습니다.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "동적 가져오기는 '--module' 옵션이 'esnext', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 두 번째 인수를 지원합니다.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript 가져오기 및 내보내기를 'verbatimModuleSyntax' 아래의 CommonJS 파일에 쓸 수 없습니다.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript 가져오기 및 내보내기를 'verbatimModuleSyntax' 아래의 CommonJS 파일에 쓸 수 없습니다. 가장 가까운 'package.json'에서 'type' 필드를 조정하여 이 파일을 ECMAScript 모듈로 만들거나 TypeScript에서 'verbatimModuleSyntax', 'module' 및 'moduleResolution' 설정을 조정합니다.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'module'이 'preserve'로 설정된 경우 CommonJS 모듈에서는 ECMAScript 모듈 구문을 사용할 수 없습니다.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}'의 각 선언 값이 다릅니다. 여기서 '{2}'이(가) 필요한데 '{3}'이(가) 제공되었습니다.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "공용 구조체 형식 '{0}'의 각 멤버에 구문 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "공용 구조체 형식 '{0}'의 각 멤버에 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.", + "Editor_Support_6249": "편집기 지원", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' 형식의 식을 '{1}' 인덱스 형식에 사용할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "인덱스 식이 'number' 형식이 아니므로 요소에 암시적으로 'any' 형식이 있습니다.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다. '{1}'을(를) 호출하시겠습니까?", + "Emit_6246": "방출", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 표준 규격 클래스 필드를 내보냅니다.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "출력 파일의 시작에서 UTF-8 BOM(바이트 순서 표시)을 내보냅니다.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "별도의 파일을 사용하는 대신 소스 맵과 함께 단일 파일을 내보냅니다.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "디버깅을 위해 실행된 컴파일러의 v8 CPU 프로필을 내보냅니다.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS 모듈 가져오기 지원을 쉽게 하기 위해 추가 JavaScript를 내보냅니다. 이것은 유형 호환성을 위해 'allowSyntheticDefaultImports'를 활성화합니다.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Set 대신 Define을 사용하여 클래스 필드를 내보냅니다.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "소스 파일에서 데코레이트된 선언의 디자인 형식 메타데이터를 내보냅니다.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "반복을 위해 규격에 더 맞지만 장황하고 성능이 떨어지는 JavaScript를 내보냅니다.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "단일 파일 내에서 소스 맵과 함께 소스를 내보냅니다. '--inlineSourceMap' 또는 '--sourceMap'을 설정해야 합니다.", + "Enable_all_strict_type_checking_options_6180": "엄격한 형식 검사 옵션을 모두 사용하도록 설정합니다.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "컴파일러 오류를 더 쉽게 읽을 수 있도록 TypeScript의 출력에서 ​​색상 및 서식을 활성화합니다.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "TypeScript 프로젝트를 프로젝트 참조와 함께 사용할 수 있는 제약 조건을 사용합니다.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "함수에서 명시적으로 반환되지 않은 코드 경로에 대한 오류 보고를 사용합니다.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "암시적 '모든' 유형의 표현식 및 선언에 대한 오류 보고를 활성화합니다.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch 문에서 폴스루 사례에 대한 오류 보고를 활성화합니다.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "형식이 확인된 JavaScript 파일에서 오류 보고를 사용하도록 설정합니다.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "지역 변수를 읽지 않을 때 오류 보고를 활성화합니다.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this'에 'any' 유형이 지정되면 오류 보고를 활성화합니다.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "레거시 실험적 데코레이터에 대해 실험적 지원을 사용하도록 설정합니다.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "선언 파일이 있는 경우 확장자가 있는 파일 가져오기를 사용하도록 설정합니다.", + "Enable_importing_json_files_6689": ".json 파일 가져오기를 활성화합니다.", + "Enable_lib_replacement_6808": "라이브러리 바꾸기를 사용하도록 설정합니다.", + "Enable_project_compilation_6302": "프로젝트 컴파일을 사용하도록 설정", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "함수에서 strict 'bind', 'call' 및 'apply' 메서드를 사용하도록 설정합니다.", + "Enable_strict_checking_of_function_types_6186": "함수 형식에 대한 엄격한 검사를 사용하도록 설정합니다.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "클래스의 속성 초기화에 대해 엄격한 검사를 사용하도록 설정합니다.", + "Enable_strict_null_checks_6113": "엄격한 null 검사를 사용하도록 설정하세요.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "구성 파일에서 'experimentalDecorators' 옵션을 사용하도록 설정합니다.", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "구성 파일에서 '--jsx' 플래그를 사용하도록 설정합니다.", + "Enable_tracing_of_the_name_resolution_process_6085": "이름 확인 프로세스 추적을 사용하도록 설정하세요.", + "Enable_verbose_logging_6713": "자세한 로깅을 활성화합니다.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "모든 가져오기에 대한 네임스페이스 개체를 만들어 CommonJS 및 ES 모듈 간의 내보내기 상호 운용성을 사용하도록 설정합니다. 'allowSyntheticDefaultImports'를 의미합니다.", + "Enables_experimental_support_for_ES7_decorators_6065": "ES7 데코레이터에 대해 실험적 지원을 사용합니다.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "데코레이터에 대한 형식 메타데이터를 내보내기 위해 실험적 지원을 사용합니다.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "인덱싱된 형식을 사용하여 선언된 키에 대해 인덱싱된 접근자를 사용합니다.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "파생 클래스의 멤버 재정의가 재정의 한정자로 표시되어 있는지 확인합니다.", + "Ensure_that_casing_is_correct_in_imports_6637": "가져오기에서 대/소문자가 올바른지 확인합니다.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "다른 가져오기를 사용하지 않고 각 파일을 안전하게 변환할 수 있는지 확인합니다.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "'use strict'를 항상 내보내고 있는지 확인합니다.", + "Entering_conditional_exports_6413": "조건부 내보내기가 시작됩니다.", + "Entry_point_for_implicit_type_library_0_1420": "암시적 형식 라이브러리 '{0}'의 진입점", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId가 '{1}'인 암시적 형식 라이브러리 '{0}'의 진입점", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "packageId가 '{1}'인 compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점", + "Enum_0_used_before_its_declaration_2450": "선언 전에 사용된 '{0}' 열거형입니다.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "열거형 선언은 네임스페이스 또는 다른 열거형 선언과만 병합할 수 있습니다.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "열거형 선언은 모두 const 또는 비const여야 합니다.", + "Enum_member_expected_1132": "열거형 멤버가 필요합니다.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "'isolatedModules'를 사용하도록 설정한 경우 리터럴이 아닌 숫자 멤버 다음에 오는 열거형 멤버에는 이니셜라이저가 있어야 합니다.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "열거형 멤버 이니셜라이저는 --isolatedDeclarations를 사용하여 외부 기호에 대한 참조 없이 계산할 수 있어야 합니다.", + "Enum_member_must_have_initializer_1061": "열거형 멤버에는 이니셜라이저가 있어야 합니다.", + "Enum_name_cannot_be_0_2431": "열거형 이름은 '{0}'일 수 없습니다.", + "Environment_Settings_6285": "환경 설정", + "Errors_Files_6041": "오류 파일", + "Escape_sequence_0_is_not_allowed_1488": "이스케이프 시퀀스 '{0}'은(는) 허용되지 않습니다.", + "Examples_Colon_0_6026": "예: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' 및 '{1}' 형식을 비교하는 데 과도한 복잡성이 있습니다.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "'{0}' 및 '{1}' 형식을 비교하는 스택 깊이가 과도합니다.", + "Exiting_conditional_exports_6416": "조건부 내보내기가 종료됩니다.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "'@extends' 태그로 제공하는 예상되는 {0}-{1} 형식 인수입니다.", + "Expected_0_arguments_but_got_1_2554": "{0}개의 인수가 필요한데 {1}개를 가져왔습니다.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0}개 인수가 필요한데 {1}개를 가져왔습니다. 'void'를 'Promise'의 형식 인수에 포함하는 것을 잊으셨습니까?", + "Expected_0_type_arguments_but_got_1_2558": "{0}개의 형식 인수가 필요한데 {1}개를 가져왔습니다.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "'@extends' 태그로 제공하는 예상되는 {0} 형식 인수입니다.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1개의 인수가 필요하지만 0이 있습니다. 'new Promise()'는 인수 없이 호출할 수 있는 'resolve'를 생성하기 위해 JSDoc 힌트가 필요합니다.", + "Expected_a_Unicode_property_name_1523": "유니코드 속성 이름이 필요합니다.", + "Expected_a_Unicode_property_name_or_value_1527": "유니코드 속성 이름 또는 값이 필요합니다.", + "Expected_a_Unicode_property_value_1525": "유니코드 속성 값이 필요합니다.", + "Expected_a_capturing_group_name_1514": "캡처 그룹 이름이 필요합니다.", + "Expected_a_class_set_operand_1520": "클래스 집합 피연산자가 필요합니다.", + "Expected_at_least_0_arguments_but_got_1_2555": "최소 {0}개의 인수가 필요한데 {1}개를 가져왔습니다.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}'에 해당하는 JSX 닫는 태그가 필요합니다.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 조각에 닫는 태그가 필요합니다.", + "Expected_for_property_initializer_1442": "속성 이니셜라이저에는 '='가 필요합니다.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json'의 '{0}' 필드에 '{1}' 형식이 필요한데 '{2}'을(를) 얻었습니다.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "명시적으로 지정된 모듈 확인 종류 '{0}'입니다.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 옵션이 'es2016' 이상으로 설정되어 있지 않으면 'bigint' 값에 지수화를 수행할 수 없습니다.", + "Export_0_from_module_1_90059": "'{0}'을(를) '{1}' 모듈에서 내보냅니다.", + "Export_all_referenced_locals_90060": "참조된 모든 로컬 내보내기", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript 모듈을 대상으로 하는 경우 내보내기 할당을 사용할 수 없습니다. 대신 'export default'나 다른 모듈 형식의 사용을 고려하세요.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "'--module' 플래그가 'system'이면 내보내기 할당은 지원되지 않습니다.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "내보내기 선언이 '{0}'의 내보낸 선언과 충돌합니다.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "네임스페이스에서는 내보내기 선언이 허용되지 않습니다.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "내보내기 지정자 '{0}'이(가) '{1}' 경로의 package.json 범위에 없습니다.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "내보낸 형식 별칭 '{0}'은(는) '{1}' 프라이빗 이름을 포함하거나 사용 중입니다.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "내보낸 형식 별칭 '{0}'이(가) 모듈 {2}의 프라이빗 이름 '{1}'을(를) 포함하거나 사용하고 있습니다.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "내보낸 변수 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "내보낸 변수 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "내보낸 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "내보내기 및 내보내기 할당는 모듈 확대에서 허용되지 않습니다.", + "Expression_expected_1109": "식이 필요합니다.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "식을 데코레이터로 사용하려면 괄호로 묶어야 합니다.", + "Expression_or_comma_expected_1137": "식 또는 쉼표가 필요합니다.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "식에서는 너무 복잡해서 표시할 수 없는 공용 구조체 형식을 생성합니다.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "컴파일러가 기본 클래스 참조를 캡처하기 위해 사용하는 '_super'로 식이 확인됩니다.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "컴파일러가 'new.target' 메타 속성 참조를 캡처하기 위해 사용하는 변수 선언 '_newTarget'으로 식이 확인됩니다.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "컴파일러가 'this' 참조를 캡처하기 위해 사용하는 변수 선언 '_this'로 식이 확인됩니다.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "식 형식은 --isolatedDeclarations로 유추할 수 없습니다.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 절에는 --isolatedDeclarations가 있는 식을 포함할 수 없습니다.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "유추된 형식 '{0}'에 대한 extends 절이 '{1}' 비공개 이름을 가지고 있거나 사용 중입니다.", + "Extract_base_class_to_variable_90064": "변수에 기본 클래스 추출", + "Extract_binding_expressions_to_variable_90066": "변수에 바인딩 식 추출", + "Extract_constant_95006": "상수 추출", + "Extract_default_export_to_variable_90065": "변수로 기본 내보내기 추출", + "Extract_function_95005": "함수 추출", + "Extract_to_0_in_1_95004": "{1}의 {0}(으)로 추출", + "Extract_to_0_in_1_scope_95008": "{1} 범위의 {0}(으)로 추출", + "Extract_to_0_in_enclosing_scope_95007": "바깥쪽 범위의 {0}(으)로 추출", + "Extract_to_interface_95090": "인터페이스로 추출", + "Extract_to_type_alias_95078": "형식 별칭으로 추출", + "Extract_to_typedef_95079": "Typedef로 추출", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "변수로 추출하고 '{0} as typeof {0}'(으)로 바꾸기", + "Extract_type_95077": "형식 추출", + "FILE_6035": "파일", + "FILE_OR_DIRECTORY_6040": "파일 또는 디렉터리", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}'을(를) 찾지 못했습니다.", + "Failed_to_resolve_under_condition_0_6415": "조건 '{0}'에서 확인하지 못했습니다.", + "Fallthrough_case_in_switch_7029": "switch에 Fallthrough case가 있습니다.", + "File_0_does_not_exist_6096": "'{0}' 파일이 없습니다.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "이전 캐시된 검색에 따라 '{0}' 파일이 존재하지 않습니다.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "파일 '{0}'은(는) 이전 캐시된 검색에 따라 존재합니다.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' 파일이 있습니다. 이 파일을 이름 확인 결과로 사용하세요.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' 파일의 확장명이 지원되지 않습니다. 지원되는 확장명은 {1}뿐입니다.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' 파일은 JavaScript 파일입니다. 'allowJs' 옵션을 사용하도록 설정하시겠습니까?", + "File_0_is_not_a_module_2306": "'{0}' 파일은 모듈이 아닙니다.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' 파일이 '{1}' 프로젝트의 파일 목록에 나열되지 않습니다. 프로젝트는 모든 파일을 나열하거나 'include' 패턴을 사용해야 합니다.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' 파일이 'rootDir' '{1}' 아래에 있지 않습니다. 'rootDir'에는 모든 소스 파일이 포함되어 있어야 합니다.", + "File_0_not_found_6053": "파일 '{0}'을(를) 찾을 수 없습니다.", + "File_Layout_6284": "파일 레이아웃", + "File_Management_6245": "파일 관리", + "File_appears_to_be_binary_1490": "파일이 이진 파일인 것 같습니다.", + "File_change_detected_Starting_incremental_compilation_6032": "파일 변경이 검색되었습니다. 증분 컴파일을 시작하는 중...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}'에 \"type\" 필드가 없으므로 파일이 CommonJS 모듈입니다.", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}'에 값이 \"module\"이 아닌 \"type\" 필드가 있으므로 파일이 CommonJS 모듈입니다.", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "'package.json'을 찾을 수 없으므로 파일이 CommonJS 모듈입니다.", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}'에 값이 \"module\"인 \"type\" 필드가 있으므로 파일이 ECMAScript 모듈입니다.", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "파일이 CommonJS 모듈입니다. ES 모듈로 변환될 수 있습니다.", + "File_is_default_library_for_target_specified_here_1426": "파일은 여기에 지정된 대상의 기본 라이브러리입니다.", + "File_is_entry_point_of_type_library_specified_here_1419": "파일은 여기에 지정된 형식 라이브러리의 진입점입니다.", + "File_is_included_via_import_here_1399": "파일은 여기에 가져오기를 통해 포함됩니다.", + "File_is_included_via_library_reference_here_1406": "파일은 여기에 라이브러리 참조를 통해 포함됩니다.", + "File_is_included_via_reference_here_1401": "파일은 여기에 참조를 통해 포함됩니다.", + "File_is_included_via_type_library_reference_here_1404": "파일은 여기에 형식 라이브러리 참조를 통해 포함됩니다.", + "File_is_library_specified_here_1423": "파일은 여기에 지정된 라이브러리입니다.", + "File_is_matched_by_files_list_specified_here_1410": "파일은 여기에 지정된 'files' 목록으로 일치됩니다.", + "File_is_matched_by_include_pattern_specified_here_1408": "파일은 여기에 지정된 포함 패턴으로 일치됩니다.", + "File_is_output_from_referenced_project_specified_here_1413": "파일은 여기에 지정된 참조 프로젝트의 출력입니다.", + "File_is_output_of_project_reference_source_0_1428": "파일은 프로젝트 참조 소스 '{0}'의 출력입니다.", + "File_is_source_from_referenced_project_specified_here_1416": "파일은 여기에 지정된 참조된 프로젝트의 소스입니다.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' 파일 이름은 이미 포함된 '{1}' 파일 이름과 대/소문자만 다릅니다.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "파일 이름 '{0}'에는 '{1}' 확장명이 있습니다. 대신 '{2}'을(를) 조회합니다.", + "File_name_0_has_a_1_extension_stripping_it_6132": "파일 이름 '{0}'에 '{1}' 확장명이 있어 제거하는 중입니다.", + "File_redirects_to_file_0_1429": "파일은 '{0}' 파일로 리디렉션됩니다.", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "파일 사양은 재귀 디렉터리 와일드카드('**') 뒤에 나타나는 부모 디렉터리('..')를 포함할 수 없습니다. '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "파일 사양은 재귀 디렉터리 와일드카드('**')로 끝날 수 없습니다. '{0}'.", + "Filters_results_from_the_include_option_6627": "'include' 옵션의 결과를 필터링합니다.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "검색된 맞춤법 오류 모두 수정", + "Fix_all_expressions_possibly_missing_await_95085": "'await'가 누락되었을 수 있는 모든 식 수정", + "Fix_all_implicit_this_errors_95107": "모든 암시적 'this' 오류 수정", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "비동기 함수의 모든 잘못된 반환 형식 수정", + "Fix_all_with_type_only_imports_95182": "형식 전용 가져오기를 사용하여 모두 수정", + "For_nodejs_Colon_6287": "nodejs의 경우:", + "Found_0_errors_6217": "{0}개 오류가 발견되었습니다.", + "Found_0_errors_Watching_for_file_changes_6194": "{0}개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", + "Found_0_errors_in_1_files_6261": "{1} 파일에서 {0} 오류를 찾았습니다.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "{1}에서 시작하는 동일한 파일에서 {0}개의 오류를 찾았습니다.", + "Found_1_error_6216": "1개 오류가 발견되었습니다.", + "Found_1_error_Watching_for_file_changes_6193": "1개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.", + "Found_1_error_in_0_6259": "{0}에서 1개의 오류를 찾았습니다.", + "Found_package_json_at_0_6099": "'{0}'에서 'package.json'을 찾았습니다.", + "Found_peerDependency_0_with_1_version_6282": "'{1}' 버전이 있는 peerDependency '{0}'을(를) 찾았습니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "'ES5'를 대상으로 하는 경우 strict 모드의 블록 내에서 함수 선언을 사용할 수 없습니다. 모듈은 자동으로 strict 모드가 됩니다.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "반환 형식 주석이 없는 함수 식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "함수 구현이 없거나 선언 바로 다음에 나오지 않습니다.", + "Function_implementation_name_must_be_0_2389": "함수 구현 이름이 '{0}'이어야 합니다.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 함수에는 암시적으로 반환 형식 'any'가 포함됩니다.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "함수에 끝 return 문이 없으며 반환 형식에 'undefined'가 포함되지 않습니다.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "함수에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", + "Function_not_implemented_95159": "함수가 구현되지 않았습니다.", + "Function_overload_must_be_static_2387": "함수 오버로드는 정적이어야 합니다.", + "Function_overload_must_not_be_static_2388": "함수 오버로드는 정적이 아니어야 합니다.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "공용 구조체 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "교집합 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "반환 형식 주석이 없는 함수 형식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "본문이 있는 함수는 앰비언트 클래스하고만 병합할 수 있습니다.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "프로젝트의 TypeScript 및 JavaScript 파일에서 .d.ts 파일을 생성합니다.", + "Generate_get_and_set_accessors_95046": "'get' 및 'set' 접근자 생성", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "모든 재정의 속성에 대한 'get' 및 'set' 접근자를 생성합니다.", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "CPU 프로필을 생성합니다.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "해당하는 각 '.d.ts' 파일에 sourcemap을 생성합니다.", + "Generates_an_event_trace_and_a_list_of_types_6237": "이벤트 추적 및 형식 목록을 생성합니다.", + "Generates_corresponding_d_ts_file_6002": "해당 '.d.ts' 파일을 생성합니다.", + "Generates_corresponding_map_file_6043": "해당 '.map' 파일을 생성합니다.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "생성기에 암시적으로 '{0}' yield 형식이 있습니다. 반환 형식 주석을 제공하는 것이 좋습니다.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "생성기는 앰비언트 컨텍스트에서 사용할 수 없습니다.", + "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' 제네릭 형식에 {1} 형식 인수가 필요합니다.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "제네릭 형식 '{0}'에 {1} 및 {2} 사이의 형식 인수가 필요합니다.", + "Global_module_exports_may_only_appear_at_top_level_1316": "전역 모듈 내보내기는 최상위 수준에만 나올 수 있습니다.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "전역 모듈 내보내기는 선언 파일에만 나올 수 있습니다.", + "Global_module_exports_may_only_appear_in_module_files_1314": "전역 모듈 내보내기는 모듈 파일에만 나올 수 있습니다.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "전역 형식 '{0}'은 클래스 또는 인터페이스 형식이어야 합니다.", + "Global_type_0_must_have_1_type_parameter_s_2317": "전역 형식 '{0}'에는 {1} 형식 매개 변수를 사용해야 합니다.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' 및 '--watch'의 다시 컴파일에서 파일 내 변경 내용은 파일에 따라 직접 파일에만 영향을 준다고 가정하도록 합니다.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'증분' 및 '감시' 모드를 사용하는 프로젝트에서 재컴파일하면 파일 내의 변경 사항이 해당 파일에 직접적으로 영향을 미치는 파일에만 영향을 미친다고 가정합니다.", + "Hexadecimal_digit_expected_1125": "16진수가 필요합니다.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "식별자가 필요합니다. '{0}'은(는) 모듈의 최상위 수준에 있는 예약어입니다.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다. 클래스 정의는 자동으로 strict 모드가 됩니다.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다. 모듈은 자동으로 strict 모드가 됩니다.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "식별자가 필요합니다. '{0}'은(는) 여기에서 사용할 수 없는 예약어입니다.", + "Identifier_expected_1003": "식별자가 필요합니다.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "식별자가 필요합니다. '__esModule'은 ECMAScript 모듈을 변환할 때 내보낸 표식으로 예약되어 있습니다.", + "Identifier_or_string_literal_expected_1478": "식별자 또는 문자열 리터럴이 필요합니다.", + "Identifier_string_literal_or_number_literal_expected_1496": "식별자, 문자열 리터럴 또는 숫자 리터럴이 필요합니다.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' 패키지가 이 모듈을 실제로 공개하는 경우 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' 수정을 위한 끌어오기 요청을 보내는 것이 좋습니다.", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "'{0}' 패키지가 실제로 이 모듈을 노출하는 경우 'declare module {1}';'이(가) 포함된 새 선언(.d.ts) 파일을 추가해 보세요.", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "찾은 tsconfig를 무시하고 명령줄 옵션과 파일로 빌드합니다.", + "Ignore_this_error_message_90019": "이 오류 메시지 무시", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json을 무시하고 기본 컴파일러 옵션을 사용하여 지정된 파일을 컴파일합니다.", + "Implement_all_inherited_abstract_classes_95040": "상속된 추상 클래스 모두 구현", + "Implement_all_unimplemented_interfaces_95032": "구현되지 않은 인터페이스 모두 구현", + "Implement_inherited_abstract_class_90007": "상속된 추상 클래스 구현", + "Implement_interface_0_90006": "'{0}' 인터페이스 구현", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "내보낸 클래스 '{0}'의 Implements 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "런타임에는 'symbol'을 'string'으로 암시적으로 변환할 수 없습니다. 이 식을 'String(...)'으로 래핑하는 것이 좋습니다.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' 가져오기는 이 파일에 사용된 전역 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' 가져오기는 로컬 값과 충돌하므로 'isolatedModules'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 선언해야 합니다.", + "Import_0_from_1_90013": "\"{1}\"에서 '{0}'을(를) 가져옵니다.", + "Import_assertion_values_must_be_string_literal_expressions_2837": "가져오기 어설션 값은 문자열 리터럴 ㅁ이이어야 합니다.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 어설션을 사용할 수 없습니다.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "가져오기 어설션은 '--module' 옵션이 'esnext', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "가져오기 어설션은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "가져오기 어설션이 가져오기 특성으로 바뀌었습니다. 'assert' 대신 'with'를 사용합니다.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript 모듈을 대상으로 하는 경우 할당 가져오기를 사용할 수 없습니다. 대신 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' 또는 다른 모듈 형식 사용을 고려하세요.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "가져오기 특성 값은 문자열 리터럴 식이어야 합니다.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' 호출로 컴파일되는 문에서는 가져오기 특성을 사용할 수 없습니다.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "가져오기 특성은 '--module' 옵션이 'esnext', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정된 경우에만 지원됩니다.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "가져오기 특성은 형식 전용 가져오기 또는 내보내기에서 사용할 수 없습니다.", + "Import_declaration_0_is_using_private_name_1_4000": "가져오기 선언 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 사용하고 있습니다.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "가져오기 선언이 '{0}'의 로컬 선언과 충돌합니다.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "네임스페이스의 가져오기 선언은 모듈을 참조할 수 없습니다.", + "Import_emit_helpers_from_tslib_6139": "'tslib'에서 내보내기 도우미를 가져오세요.", + "Import_may_be_converted_to_a_default_import_80003": "가져오기가 기본 가져오기로 변환될 수 있습니다.", + "Import_name_cannot_be_0_2438": "가져오기 이름은 '{0}'일 수 없습니다.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "앰비언트 모듈 선언의 가져오기 또는 내보내기 선언은 상대적 모듈 이름을 통해 모듈을 참조할 수 없습니다.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "가져오기 지정자 '{0}'이(가) '{1}' 경로의 package.json 범위에 없습니다.", + "Imported_via_0_from_file_1_1393": "'{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "'module'이 '{0}'(으)로 설정된 경우 JSON 파일을 ECMAScript 모듈로 가져오려면 'type: \"json\"' 가져오기 특성이 필요합니다.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "가져오기는 모듈 확대에서 허용되지 않습니다. 내보내기를 바깥쪽 외부 모듈로 이동하세요.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "앰비언트 열거형 선언에서 멤버 이니셜라이저는 상수 식이어야 합니다.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "다중 선언이 포함된 열거형에서는 하나의 선언만 첫 번째 열거형 요소에 대한 이니셜라이저를 생략할 수 있습니다.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "파일 목록을 포함합니다. 이는 'include'가 아닌 GLOB 패턴을 지원하지 않습니다.", + "Include_modules_imported_with_json_extension_6197": "'.json' 확장을 사용하여 가져온 모듈을 포함합니다.", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "내보낸 JavaScript 내 sourcemap에 소스 코드를 포함합니다.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "내보낸 JavaScript 내에 sourcemap 파일을 포함합니다.", + "Includes_imports_of_types_referenced_by_0_90054": "'{0}'에서 참조하는 유형의 가져오기를 포함합니다.", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch를 포함하면 -w는 파일 변경 내용에 대한 현재 프로젝트 감시를 시작합니다. 설정되면 다음을 사용하여 조사식 모드를 구성할 수 있습니다.", + "Incomplete_quantifier_Digit_expected_1505": "불완전한 수량자입니다. 숫자가 필요합니다.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{1}' 형식에 인덱스 시그니처 유형 '{0}'이(가) 없습니다.", + "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' 형식의 인덱스 시그니처는 읽기만 허용됩니다.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "병합된 선언 '{0}'의 개별 선언은 모두 내보내 졌거나 모두 로컬이어야 합니다.", + "Infer_all_types_from_usage_95023": "사용량에서 모든 형식 유추", + "Infer_function_return_type_95148": "함수 반환 형식 유추", + "Infer_parameter_types_from_usage_95012": "사용량에서 매개 변수 형식 유추", + "Infer_this_type_of_0_from_usage_95080": "사용량에서 '{0}'의 'this' 형식 유추", + "Infer_type_of_0_from_usage_95011": "사용량에서 '{0}'의 형식 유추", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations에서는 클래스 식의 유추가 지원되지 않습니다.", + "Initialize_property_0_in_the_constructor_90020": "생성자에서 속성 '{0}' 초기화", + "Initialize_static_property_0_90021": "정적 속성 '{0}' 초기화", + "Initializer_for_property_0_2811": "'{0}' 속성에 대한 이니셜라이저", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "인스턴스 멤버 변수 '{0}'의 이니셜라이저는 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "앰비언트 컨텍스트에서는 이니셜라이저가 허용되지 않습니다.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "TypeScript 프로젝트를 초기화하고 tsconfig.json 파일을 만듭니다.", + "Inline_variable_95184": "인라인 변수", + "Insert_command_line_options_and_files_from_a_file_6030": "파일에서 명령줄 옵션 및 파일을 삽입합니다.", + "Install_0_95014": "'{0}' 설치", + "Install_all_missing_types_packages_95033": "누락된 형식 패키지 모두 설치", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' 인터페이스는 '{1}' 및 '{2}' 형식을 동시에 확장할 수 없습니다.", + "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' 인터페이스가 '{1}' 인터페이스를 잘못 확장합니다.", + "Interface_declaration_cannot_have_implements_clause_1176": "인터페이스 선언에는 'implements' 절을 사용할 수 없습니다.", + "Interface_must_be_given_a_name_1438": "인터페이스에 이름을 지정해야 합니다.", + "Interface_name_cannot_be_0_2427": "인터페이스 이름은 '{0}'일 수 없습니다.", + "Interop_Constraints_6252": "Interop 제약 조건", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined'를 추가하는 대신 선택적 속성 형식을 작성된 것으로 해석합니다.", + "Invalid_character_1127": "잘못된 문자입니다.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "잘못된 가져오기 지정자 '{0}'에는 가능한 해결 방법이 없습니다.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "확대의 모듈 이름이 잘못되었습니다. '{1}'에서 '{0}' 모듈이 형식화되지 않은 모듈로 확인되어 확대할 수 없습니다.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "확대의 모듈 이름이 잘못되었습니다. '{0}' 모듈을 찾을 수 없습니다.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "새 식의 선택적 체인이 잘못되었습니다. '{0}()'을 호출하시겠습니까?", + "Invalid_reference_directive_syntax_1084": "'reference' 지시문 구문이 잘못되었습니다.", + "Invalid_syntax_in_decorator_1498": "데코레이터의 구문이 잘못되었습니다.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}'을(를) 잘못 사용했습니다. 해당 항목은 클래스 정적 블록 내에서 사용할 수 없습니다.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}'을(를) 잘못 사용했습니다. 모듈은 자동으로 strict 모드가 됩니다.", + "Invalid_use_of_0_in_strict_mode_1100": "strict 모드에서 '{0}'을(를) 잘못 사용했습니다.", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations'의 값이 잘못되었습니다.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory'에 대한 값이 잘못되었습니다. '{0}'이(가) 올바른 식별자 또는 정규화된 이름이 아닙니다.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자 또는 정규화된 이름이 아닙니다.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace'의 값이 잘못되었습니다. '{0}'은(는) 올바른 식별자가 아닙니다.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "두 템플릿 식을 구분할 쉼표가 없는 것 같습니다. 이 두 템플릿 식은 태그가 지정된 호출 불가능한 하나의 템플릿 식을 구성합니다.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "해당 요소 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "해당 인스턴스 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "해당 반환 형식 '{0}'은(는) 유효한 JSX 요소가 아닙니다.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "해당 '{0}' 형식은 올바른 JSX 요소 형식이 아닙니다.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}'이(가) 'extends {2}' 절과 일치하지 않습니다.", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}'이(가) 클래스에 연결되어 있지 않습니다.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...'은 시그니처의 마지막 매개 변수에만 나타날 수 있습니다.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 태그의 이름이 '{0}'인데 해당 이름의 매개 변수가 없습니다.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 태그에 '{0}' 이름이 있지만, 해당 이름의 매개 변수가 없습니다. 배열 형식이 있는 경우 '인수'를 일치시킵니다.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 태그는 형식 주석을 포함하거나, '@property' 또는 '@member' 태그 앞에 와야 합니다.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef를 TypeScript 형식으로 변환할 수 있습니다.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 유형은 문서 주석 내에서만 사용될 수 있습니다.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 형식이 TypeScript 형식으로 이동될 수 있습니다.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX 특성에는 비어 있지 않은 '식'만 할당할 수 있습니다.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 요소 '{0}'에 닫는 태그가 없습니다.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 요소 클래스는 '{0}' 속성이 없으므로 특성을 지원하지 않습니다.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "'JSX.{0}' 인터페이스가 없으므로 JSX 요소는 암시적으로 'any' 형식입니다.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "전역 형식 'JSX.Element'가 없으므로 JSX 요소는 암시적으로 'any' 형식입니다.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 요소 형식 '{0}'에 구문 또는 호출 시그니처가 없습니다.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 요소에 이름이 같은 특성을 여러 개 사용할 수 없습니다.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 식은 쉼표 연산자를 사용할 수 없습니다. 배열을 작성하시겠습니까?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX 식에는 부모 요소가 하나 있어야 합니다.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 조각에 닫는 태그가 없습니다.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 속성 액세스 식은 JSX 네임스페이스 이름을 포함할 수 없습니다.", + "JSX_spread_child_must_be_an_array_type_2609": "JSX 분배 자식은 배열 형식이어야 합니다.", + "JavaScript_Support_6247": "JavaScript 지원", + "Jump_target_cannot_cross_function_boundary_1107": "점프 대상은 함수 경계를 벗어날 수 없습니다.", + "KIND_6034": "KIND", + "Keywords_cannot_contain_escape_characters_1260": "키워드에는 이스케이프 문자를 사용할 수 없습니다.", + "LOCATION_6037": "위치", + "Language_and_Environment_6254": "언어 및 환경", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "쉼표 연산자의 왼쪽은 사용되지 않으며 이로 인해 의도하지 않은 결과가 발생하지 않습니다.", + "Library_0_specified_in_compilerOptions_1422": "compilerOptions에 '{0}' 라이브러리가 지정되었습니다.", + "Library_referenced_via_0_from_file_1_1405": "'{1}' 파일에서 '{0}'을(를) 통해 라이브러리가 참조되었습니다.", + "Line_break_not_permitted_here_1142": "여기서는 줄 바꿈이 허용되지 않습니다.", + "Line_terminator_not_permitted_before_arrow_1200": "줄 마침 표시는 화살표 앞에 사용할 수 없습니다.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "모듈을 확인할 때 검색할 파일 이름 접미사 목록입니다.", + "List_of_folders_to_include_type_definitions_from_6161": "포함할 형식 정의가 있는 폴더의 목록입니다.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "런타임에 프로젝트의 구조를 나타내는 결합된 콘텐츠가 있는 루트 폴더의 목록입니다.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "루트 디렉터리 '{1}'에서 '{0}'을(를) 로드하고 있습니다. 후보 위치: '{2}'.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' 폴더에서 '{0}' 모듈을 로드하고 있습니다. 대상 파일 형식은 '{1}'입니다.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "모듈을 파일/폴더로 로드하고 있습니다. 후보 모듈 위치는 '{0}', 대상 파일 형식은 '{1}'입니다.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' 프로세스 동안 사용된 로그 경로입니다.", + "Longest_matching_prefix_for_0_is_1_6108": "'{0}'에 대해 일치하는 가장 긴 접두사는 '{1}'입니다.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' 폴더에서 찾고 있습니다. 초기 위치: '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "모든 'super()' 호출을 생성자의 첫 번째 문으로 만들기", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof가 문자열, 숫자 또는 기호 대신 문자열만 반환하도록 합니다. 레거시 옵션입니다.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "생성자의 첫 번째 문을 'super()'로 호출", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "매핑된 개체 형식에는 'any' 템플릿 형식이 암시적으로 포함됩니다.", + "Mark_array_literal_as_const_90070": "배열 리터럴을 const로 표시", + "Matched_0_condition_1_6403": "'{0}' 조건 '{1}'과(와) 일치합니다.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "기본적으로 일치되는 포함 패턴 '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "'{1}'의 포함 패턴 '{0}'(으)로 일치되었습니다.", + "Member_0_implicitly_has_an_1_type_7008": "'{0}' 멤버에는 암시적으로 '{1}' 형식이 포함됩니다.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' 멤버는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "Merge_conflict_marker_encountered_1185": "병합 충돌 표식을 발견했습니다.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "병합된 선언 '{0}'에는 기본 내보내기 선언을 포함할 수 없습니다. 대신 별도의 'export default {0}' 선언을 추가하세요.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "메타 속성 '{0}'은(는) 함수 선언, 함수 식 또는 생성기의 본문에서만 사용할 수 있습니다.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' 메서드는 abstract로 표시되어 있으므로 구현이 있을 수 없습니다.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "메서드에는 --isolatedDeclarations가 있는 명시적 반환 형식 주석이 있어야 합니다.", + "Method_not_implemented_95158": "메서드가 구현되지 않았습니다.", + "Modifiers_cannot_appear_here_1184": "한정자를 여기에 표시할 수 없습니다.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' 모듈은 '{1}' 플래그를 사용하는 가져온 기본값이어야만 합니다.", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "이 구문을 사용하여 '{0}' 모듈을 가져올 수 없습니다. 지정자는 'require'로 가져올 수 없는 ES 모듈로만 확인됩니다. ECMAScript 가져오기를 대신 사용하세요.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' 모듈은 '{1}'을(를) 로컬로 선언하지만, 모듈을 '{2}'(으)로 내보냅니다.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "'{0}' 모듈은 '{1}'을(를) 로컬로 선언하지만, 모듈을 내보내지 않습니다.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "모듈 '{0}'은(는) 형식을 참조하지 않지만, 여기에서 형식으로 사용됩니다. 'typeof 가져오기('{0}')'를 사용하시겠습니까?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "모듈 '{0}'은(는) 값을 참조하지 않지만, 여기에서 값으로 사용됩니다.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "{0} 모듈에서 '{1}'(이)라는 멤버를 이미 내보냈습니다. 모호성을 해결하려면 명시적으로 다시 내보내는 것이 좋습니다.", + "Module_0_has_no_default_export_1192": "모듈 '{0}'에는 기본 내보내기가 없습니다.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "'{0}' 모듈에 기본 내보내기가 없습니다. 대신 '{0}에서 { {1} } 가져오기'를 사용하시겠습니까?", + "Module_0_has_no_exported_member_1_2305": "'{0}' 모듈에 내보낸 멤버 '{1}'이(가) 없습니다.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' 모듈에 내보낸 멤버 '{1}'이(가) 없습니다. 대신 '{0}에서 {1} 가져오기'를 사용하시겠습니까?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' 모듈은 이름이 같은 로컬 선언으로 숨겨집니다.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "모듈 '{0}'은(는) 'export ='을 사용하며 'export *'와 함께 사용할 수 없습니다.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' 모듈은 '{1}'에서 지역으로 선언된 앰비언트 모듈로 확인되었습니다.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--allowArbitraryExtensions'가 설정되지 않았습니다.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "모듈 '{0}'이(가) '{1}'(으)로 확인되었지만 '--jsx'가 설정되지 않았습니다.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--resolveJsonModule'이 사용되지 않았습니다.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "모듈 선언 이름에는 ' 또는 \" 인용 문자열만 사용할 수 있습니다.", + "Module_name_0_matched_pattern_1_6092": "모듈 이름: '{0}', 일치하는 패턴: '{1}'", + "Module_name_0_was_not_resolved_6090": "======== 모듈 이름 '{0}'이(가) 확인되지 않았습니다. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== 모듈 이름 '{0}'이(가) '{1}'(으)로 확인되었습니다. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 모듈 이름 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "모듈 확인 종류가 지정되지 않았습니다. '{0}'을(를) 사용합니다.", + "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs'를 사용한 모듈 확인에 실패했습니다.", + "Modules_6244": "모듈", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "레이블이 지정된 튜플 요소 한정자를 레이블로 이동", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "기본 내보내기에서 식을 변수로 이동하고 형식 주석을 추가합니다.", + "Move_to_a_new_file_95049": "새 파일로 이동", + "Move_to_file_95178": "파일로 이동", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "여러 개의 연속된 숫자 구분 기호는 허용되지 않습니다.", + "Multiple_constructor_implementations_are_not_allowed_2392": "여러 생성자 구현은 허용되지 않습니다.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "줄 바꿈", + "Name_is_not_valid_95136": "이름이 잘못되었습니다.", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "명명된 캡처 그룹은 'ES2018' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "이름이 같은 명명된 캡처 그룹은 상호 배타적이어야 합니다.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "지연된 가져오기에서는 명명된 가져오기를 사용할 수 없습니다.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module'이 '{0}'(으)로 설정된 경우 JSON 파일에서 ECMAScript 모듈로 명명된 가져오기를 사용할 수 없습니다.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "명명된 속성 '{0}'의 형식 '{1}' 및 '{2}'이(가) 동일하지 않습니다.", + "Namespace_0_has_no_exported_member_1_2694": "'{0}' 네임스페이스에 내보낸 멤버 '{1}'이(가) 없습니다.", + "Namespace_must_be_given_a_name_1437": "네임스페이스에 이름을 지정해야 합니다.", + "Namespace_name_cannot_be_0_2819": "네임스페이스 이름은 '{0}'일 수 없습니다.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}'이(가) 사용하도록 설정된 경우 전역 스크립트 파일에서는 네임스페이스를 사용할 수 없습니다. 이 파일이 전역 스크립트가 아닌 경우 'moduleDetection'을 'force'로 설정하거나 빈 'export {}' 문을 추가합니다.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "데코레이터와 한정자를 'this' 매개 변수에 적용할 수 없습니다.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "기본 생성자에 지정된 수의 형식 인수가 없습니다.", + "No_constituent_of_type_0_is_callable_2755": "'{0}' 형식의 구성원을 호출할 수 없습니다.", + "No_constituent_of_type_0_is_constructable_2759": "'{0}' 형식의 구성원을 생성할 수 없습니다.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' 형식에서 '{0}' 형식의 매개 변수가 포함된 인덱스 시그니처를 찾을 수 없습니다.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' 구성 파일에서 입력을 찾을 수 없습니다. 지정된 '포함' 경로는 '{1}'이고 '제외' 경로는 '{2}'이었습니다.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "더 이상 지원되지 않습니다. 초기 버전에서는 파일을 읽기 위한 텍스트 인코딩을 수동으로 설정합니다.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "오버로드에 {0} 인수가 필요하지 않지만, {1} 또는 {2} 인수가 필요한 오버로드가 있습니다.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "오버로드에 {0} 형식 인수가 필요하지 않지만, {1} 또는 {2} 형식 인수가 필요한 오버로드가 있습니다.", + "No_overload_matches_this_call_2769": "이 호출과 일치하는 오버로드가 없습니다.", + "No_type_could_be_extracted_from_this_type_node_95134": "이 형식 노드에서 형식을 추출할 수 없습니다.", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "줄임 속성 '{0}'의 범위에 값이 없습니다. 값을 선언하거나 이니셜라이저를 제공합니다.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "'{0}' 비추상 클래스는 '{2}' 클래스에서 상속된 추상 멤버 '{1}'을(를) 구현하지 않습니다.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "비추상 클래스 '{0}'에 '{1}'의 다음 멤버에 대한 구현이 없습니다. {2} 및 {3} 등.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "비추상 클래스 식은 '{1}' 클래스에서 상속된 추상 멤버 '{0}'을(를) 구현하지 않습니다.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "비추상 클래스 식에 '{0}'의 다음 멤버에 대한 구현이 없습니다. {1} 및 {2} 등.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "null이 아닌 어설션은 TypeScript 파일에서만 사용할 수 있습니다.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "여기서 단순하지 않은 매개 변수가 선언되었습니다.", + "Not_all_code_paths_return_a_value_7030": "일부 코드 경로가 값을 반환하지 않습니다.", + "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 형식의 일부 구성원을 호출할 수 없습니다.", + "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 형식의 일부 구성원을 생성할 수 없습니다.", + "Numbers_out_of_order_in_quantifier_1506": "수량자의 숫자가 순서를 벗어났습니다.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "절대값이 2^53보다 크거나 같은 숫자 리터럴은 너무 커서 정수로 정확하게 표시할 수 없습니다.", + "Numeric_separators_are_not_allowed_here_6188": "숫자 구분 기호는 여기에서 허용되지 않습니다.", + "Object_is_of_type_unknown_2571": "개체가 '알 수 없는' 형식입니다.", + "Object_is_possibly_null_2531": "개체가 'null'인 것 같습니다.", + "Object_is_possibly_null_or_undefined_2533": "개체가 'null' 또는 'undefined'인 것 같습니다.", + "Object_is_possibly_undefined_2532": "개체가 'undefined'인 것 같습니다.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "개체 리터럴은 알려진 속성만 지정할 수 있으며 '{1}' 형식에 '{0}'이(가) 없습니다.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "개체 리터럴은 알려진 속성만 지정할 수 있지만 '{1}' 형식에 '{0}'이(가) 없습니다. '{2}'을(를) 쓰려고 했습니까?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "개체 리터럴의 '{0}' 속성에는 암시적으로 '{1}' 형식이 포함됩니다.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "약식 속성이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "분산 할당이 포함된 개체는 --isolatedDeclarations를 사용하여 유추할 수 없습니다.", + "Octal_digit_expected_1178": "8진수가 있어야 합니다.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "문자 클래스에서는 8진수 이스케이프 시퀀스 및 역참조를 사용할 수 없습니다. 이 시퀀스가 이스케이프 시퀀스로 의도된 경우 대신 '{0}' 구문을 사용합니다.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "8진수 이스케이프 시퀀스는 허용되지 않습니다. '{0}' 구문을 사용합니다.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "8진수 리터럴은 허용되지 않습니다. '{0}' 구문을 사용합니다.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}'의 한 값은 '{2}' 문자열이며, 다른 값은 알 수 없는 숫자 값으로 간주됩니다.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 문에는 단일 변수 선언만 허용됩니다.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 문에는 단일 변수 선언만 허용됩니다.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "void 함수만 'new' 키워드로 호출할 수 있습니다.", + "Only_ambient_modules_can_use_quoted_names_1035": "앰비언트 모듈만 따옴표가 붙은 이름을 사용할 수 있습니다.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "'amd' 및 'system' 모듈만 --{0}과(와) 함께 사용할 수 있습니다.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "const 배열만 --isolatedDeclarations를 사용하여 유추할 수 있습니다.", + "Only_emit_d_ts_declaration_files_6014": "'.d.ts' 선언 파일만 내보냅니다.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript 파일은 출력하지 않고 d.ts 파일만 출력합니다.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "기본 클래스의 공용 및 보호된 메서드만 'super' 키워드를 통해 액세스할 수 있습니다.", + "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' 연산자는 '{1}' 형식에 적용할 수 없습니다.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' 연산자를 '{1}' 및 '{2}' 형식에 적용할 수 없습니다.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "연산자는 문자 클래스 내에서 혼합될 수 없습니다. 대신 중첩 클래스에서 래핑합니다.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "편집할 때 다중 프로젝트 참조 검사에서 프로젝트를 옵트아웃합니다.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' 옵션이 제거되었습니다. 구성에서 제거하세요.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' 옵션은 더 이상 사용되지 않으며 TypeScript {2}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{3}\"'을(를) 지정합니다.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'false' 또는 'null'로 설정할 수 있습니다.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'null'로 설정할 수 있습니다.", + "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' 옵션은 명령줄에서만 지정할 수 있습니다.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0}' 옵션은 '--inlineSourceMap' 옵션 또는 '--sourceMap' 옵션이 제공되는 경우에만 사용할 수 있습니다.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'로 설정된 경우에만 '{0}' 옵션을 사용할 수 있습니다.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "'{0}' 옵션은 'module'이 'preserve', 'commonjs', 또는 'es2015' 이상으로 설정된 경우에만 사용할 수 있습니다.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' 옵션이 '{1}'인 경우 '{0}' 옵션을 지정할 수 없습니다.", + "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' 옵션은 '{1}' 옵션과 함께 지정할 수 없습니다.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{1}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' 또는 '{2}' 옵션을 지정하지 않고 '{0}' 옵션을 지정할 수 없습니다.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "‘{0}’ 옵션이 제거되었습니다. 구성에서 제거하세요.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}’ 옵션은 더 이상 사용되지 않으며 TypeScript {1}에서 작동하지 않습니다. 이 오류를 무시하려면 compilerOption '\"ignoreDeprecations\": \"{2}\"'을(를) 지정합니다.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' 옵션은 중복되므로 '{1}' 옵션으로 지정할 수 없습니다.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "'allowImportingTsExtensions' 옵션은 'noEmit', 'emitDeclarationOnly' 또는 'rewriteRelativeImportExtensions' 중 하나가 설정된 경우에만 사용할 수 있습니다.", + "Option_build_must_be_the_first_command_line_argument_6369": "'--build' 옵션은 첫 번째 명령줄 인수여야 합니다.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' 옵션은 '--module' 옵션을 지정하거나 'target' 옵션이 'ES2015' 이상인 경우에만 사용할 수 있습니다.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' 옵션이 ‘{1}'(으)로 설정된 경우 'moduleResolution' 옵션을 '{0}'(또는 지정되지 않은 상태로 두어야 함)(으)로 설정해야 합니다.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' 옵션이 '{1}'으(로) 설정된 경우 'module' 옵션을 '{0}'(으)로 설정해야 합니다.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}'이(가) 사용하도록 설정된 경우 'preserveConstEnums' 옵션을 사용하지 않도록 설정할 수 없습니다.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "명령줄에서 'project' 옵션을 원본 파일과 혼합하여 사용할 수 없습니다.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution'이 'classic'으로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module'이 'none', 'system' 또는 'umd'로 설정된 경우 '--resolveJsonModule' 옵션을 지정할 수 없습니다.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module'이 'UMD', 'AMD' 또는 'System'으로 설정된 경우 'verbatimModuleSyntax' 옵션을 사용할 수 없습니다.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "'{0}' 및 '{1}' 옵션은 조합할 수 없습니다.", + "Options_Colon_6027": "옵션:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "기타 출력", + "Output_Formatting_6256": "출력 서식 지정", + "Output_compiler_performance_information_after_building_6615": "빌드 후 컴파일러 성능 정보를 출력합니다.", + "Output_directory_for_generated_declaration_files_6166": "생성된 선언 파일의 출력 디렉터리입니다.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "출력 파일 '{0}'이(가) 소스 파일 '{1}'에서 빌드되지 않았습니다.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.", + "Output_more_detailed_compiler_performance_information_after_building_6632": "빌드 후 더 자세한 컴파일러 성능 정보를 출력합니다.", + "Overload_0_of_1_2_gave_the_following_error_2772": "오버로드 {0}/{1}('{2}')에서 다음 오류가 발생했습니다.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "오버로드 시그니처는 모두 추상이거나 비추상이어야 합니다.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "오버로드 시그니처는 모두 앰비언트이거나 앰비언트가 아니어야 합니다.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "오버로드 시그니처는 모두 내보내거나 모두 내보내지 않아야 합니다.", + "Overload_signatures_must_all_be_optional_or_required_2386": "오버로드 시그니처는 모두 선택 사항이거나 필수 사항이어야 합니다.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "오버로드 시그니처는 모두 퍼블릭, 프라이빗 또는 보호된 상태여야 합니다.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "매개 변수 '{0}'은(는) 이 매개 변수 뒤에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", + "Parameter_0_cannot_reference_itself_2372": "매개 변수 '{0}'은(는) 자신을 참조할 수 없습니다.", + "Parameter_0_implicitly_has_an_1_type_7006": "'{0}' 매개 변수에는 암시적으로 '{1}' 형식이 포함됩니다.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "'{0}' 매개 변수는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "'{0}' 매개 변수는 '{1}' 매개 변수와 같은 위치에 있지 않습니다.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "접근자의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "접근자의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "접근자의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "내보낸 인터페이스에 있는 호출 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "내보낸 인터페이스에 있는 호출 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "내보낸 클래스에 있는 생성자의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "내보낸 인터페이스에 있는 생성자 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "내보낸 인터페이스에 있는 생성자 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "내보낸 함수의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "내보낸 함수의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "내보낸 함수의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "내보낸 인터페이스에 있는 인덱스 시그니처의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "내보낸 인터페이스에 있는 인덱스 시그니처의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "내보낸 인터페이스에 있는 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "내보낸 인터페이스에 있는 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "내보낸 클래스에 있는 공용 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "내보낸 클래스에 있는 공용 정적 메서드의 '{0}' 매개 변수가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "매개 변수에 물음표와 이니셜라이저를 사용할 수 없습니다.", + "Parameter_declaration_expected_1138": "매개 변수 선언이 필요합니다.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "매개 변수에 이름이 있지만 형식이 없습니다. '{0}: {1}'을(를) 사용하시겠습니까?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "매개 변수 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "매개 변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "내보낸 클래스에 있는 공용 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "strict 모드에서 구문 분석하고 각 소스 파일에 대해 \"use strict\"를 내보냅니다.", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json의 'files' 목록의 일부", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' 패턴에는 '*' 문자를 최대 하나만 사용할 수 있습니다.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "이 세션에서는 '--diagnostics' 또는 '--extendedDiagnostics'에 대해 성능 타이밍을 사용할 수 없습니다. Web Performance API의 네이티브 구현을 찾을 수 없습니다.", + "Platform_specific_6912": "플랫폼별", + "Prefix_0_with_an_underscore_90025": "'{0}' 앞에 밑줄 추가", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "모든 잘못된 속성 선언에 'declare'를 접두사로 추가", + "Prefix_all_unused_declarations_with_where_possible_95025": "가능한 경우 사용하지 않는 모든 선언에 '_'을 접두사로 추가", + "Prefix_with_declare_95094": "'declare'를 접두사로 추가", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "JavaScript 출력에서 사용되지 않는 가져온 값을 유지합니다. 그렇지 않으면 제거됩니다.", + "Print_all_of_the_files_read_during_the_compilation_6653": "컴파일 중에 읽은 모든 파일을 출력합니다.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "컴파일 중에 읽은 파일을 포함 이유와 함께 출력합니다.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "파일의 이름과 해당 파일이 컴파일에 포함된 이유를 출력합니다.", + "Print_names_of_files_part_of_the_compilation_6155": "컴파일의 일부인 파일의 이름을 인쇄합니다.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "컴파일에 포함된 파일의 이름을 인쇄한 다음, 처리를 중지합니다.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "컴파일의 일부인 생성된 파일의 이름을 인쇄합니다.", + "Print_the_compiler_s_version_6019": "컴파일러 버전을 인쇄합니다.", + "Print_the_final_configuration_instead_of_building_1350": "빌드 대신 최종 구성을 인쇄합니다.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "컴파일 후 내보낸 파일의 이름을 출력합니다.", + "Print_this_message_6017": "이 메시지를 출력합니다.", + "Private_accessor_was_defined_without_a_getter_2806": "프라이빗 접근자가 getter 없이 정의되었습니다.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "'{0}' 프라이빗 필드는 외부 클래스에서 선언되어야 합니다.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "변수 선언에서 프라이빗 식별자를 사용할 수 없습니다.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "클래스 본문 외부에서 프라이빗 식별자를 사용할 수 없습니다.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "비공개 식별자는 클래스 본문에서만 허용되며 클래스 멤버 선언의 일부, 속성 액세스 또는 'in' 식의 왼쪽에서만 사용할 수 있습니다.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "프라이빗 식별자는 ECMAScript 2015 이상을 대상으로 지정할 때만 사용할 수 있습니다.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "프라이빗 식별자는 매개 변수로 사용할 수 없습니다.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "형식 매개 변수에서 프라이빗 또는 보호된 멤버 '{0}'에 액세스할 수 없습니다.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' 프로젝트는 '{1}' 종속성에 오류가 있기 때문에 빌드할 수 없습니다.", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트를 빌드할 수 없습니다.", + "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' 프로젝트가 강제로 재구축되고 있습니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "'{1}' buildinfo 파일이 '{2}' 파일이 컴파일의 루트 파일이었지만 더 이상 아님을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "'{1}' buildinfo 파일은 프로그램에서 오류를 보고해야 함을 나타내기 때문에 '{0}' 프로젝트는 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "buildinfo 파일 '{1}'이(가) 일부 변경 내용이 내보내지지 않았음을 나타내므로 프로젝트 '{0}'은(는) 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "'{1}' buildinfo 파일이 compilerOptions에 변경이 있음을 나타내므로 '{0}' 프로젝트는 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "출력 '{1}'이(가) 최신 입력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "'{1}' 출력 파일이 존재하지 않기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' 프로젝트의 출력이 현재 버전 '{2}'과(와) 다른 '{1}' 버전으로 생성되었기 때문에 이 프로젝트가 최신 상태가 아닙니다.", + "Project_0_is_up_to_date_6361": "'{0}' 프로젝트가 최신 상태입니다.", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "최신 입력 '{1}'이(가) 출력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태입니다.", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "프로젝트 '{0}'이(가) 최신 상태이지만 입력 파일보다 오래된 출력 파일의 타임스탬프를 업데이트해야 합니다.", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' 프로젝트는 종속성에 .d.ts 파일이 있는 최신 상태입니다.", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "프로젝트 참조는 순환 그래프를 형성할 수 없습니다. 순환이 발견되었습니다. {0}", + "Projects_6255": "프로젝트", + "Projects_in_this_build_Colon_0_6355": "이 빌드의 프로젝트: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' 한정자가 있는 속성은 ECMAScript 2015 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' 속성은 추상으로 표시되어 있으므로 이니셜라이저를 사용할 수 없습니다.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' 속성은 인덱스 시그니처에서 가져오는 것이므로 ['{0}']을(를) 사용하여 액세스해야 합니다.", + "Property_0_does_not_exist_on_type_1_2339": "'{1}' 형식에 '{0}' 속성이 없습니다.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' 속성이 '{1}' 형식에 없습니다. '{2}'을(를) 사용하시겠습니까?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' 속성이 '{1}' 형식에 없습니다. 대신 정적 멤버 '{2}'에 액세스하려고 하셨습니까?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' 속성이 '{1}' 형식에 없습니다. 대상 라이브러리를 변경해야 하는 경우 'lib' 컴파일러 옵션을 '{2}' 이상으로 변경해 보세요.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "속성 '{0}'(은)는 '{1}'에 없습니다. 'lib' 컴파일러 옵션을 변경하여 'dom'을 포함하세요.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' 속성에 이니셜라이저가 없으며 클래스 정적 블록에 확실히 할당되지 않았습니다.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "속성 '{0}'은(는) 이니셜라이저가 없고 생성자에 할당되어 있지 않습니다.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' 속성에는 해당 get 접근자에 반환 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' 속성에는 해당 set 접근자에 매개 변수 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "'{0}' 속성은 암시적으로 'any' 형식이지만, 사용량에서 get 접근자의 더 나은 형식을 유추할 수 있습니다.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "'{0}' 속성은 암시적으로 'any' 형식이지만, 사용량에서 set 접근자의 더 나은 형식을 유추할 수 있습니다.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "'{1}' 형식의 '{0}' 속성을 기본 형식 '{2}'의 동일한 속성에 할당할 수 없습니다.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "'{1}' 형식의 '{0}' 속성을 '{2}' 형식에 할당할 수 없습니다.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "'{1}' 형식의 '{0}' 속성이 '{2}' 형식 내에서 액세스할 수 없는 다른 멤버를 참조합니다.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "속성 '{0}'이(가) 선언은 되었지만 해당 값이 읽히지는 않았습니다.", + "Property_0_is_incompatible_with_index_signature_2530": "'{0}' 속성이 인덱스 시그니처와 호환되지 않습니다.", + "Property_0_is_missing_in_type_1_2324": "'{0}' 속성이 '{1}' 형식에 없습니다.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "'{0}' 속성이 '{1}' 형식에 없지만 '{2}' 형식에서 필수입니다.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "'{0}' 속성은 프라이빗 식별자를 포함하기 때문에 '{1}' 클래스 외부에서 액세스할 수 없습니다.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' 속성은 '{1}' 형식에서 선택적이지만 '{2}' 형식에서는 필수입니다.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 속성은 private이며 '{1}' 클래스 내에서만 액세스할 수 있습니다.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' 속성은 '{1}' 형식에서 private이지만 '{2}' 형식에서는 그렇지 않습니다.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' 속성은 보호되며 '{1}' 클래스의 인스턴스를 통해서만 액세스할 수 있습니다. 이는 '{2}' 클래스의 인스턴스입니다.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 속성은 보호된 속성이며 '{1}' 클래스 및 해당 하위 클래스 내에서만 액세스할 수 있습니다.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 속성은 보호된 속성이지만 '{1}' 형식은 '{2}'에서 파생된 클래스가 아닙니다.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' 속성은 '{1}' 형식에서는 보호된 속성이지만 '{2}' 형식에서는 공용입니다.", + "Property_0_is_used_before_being_assigned_2565": "'{0}' 속성이 할당되기 전에 사용되었습니다.", + "Property_0_is_used_before_its_initialization_2729": "초기화하기 전에 '{0}' 속성이 사용됩니다.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' 속성이 '{1}' 형식에 없을 수 있습니다. '{2}'을(를) 사용하시겠습니까?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 분배 특성의 '{0}' 속성을 대상 속성에 할당할 수 없습니다.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "내보낸 익명 클래스 형식의 '{0}' 속성은 비공개이거나 보호됨이 아닐 수 있습니다.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{0}' 형식의 '{1}' 속성을 '{2}' 인덱스 유형 '{3}'에 할당할 수 없습니다.", + "Property_0_was_also_declared_here_2733": "여기서도 '{0}' 속성이 선언되었습니다.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' 속성은 '{1}'의 기본 속성을 덮어씁니다. 의도적인 경우 이니셜라이저를 추가합니다. 그렇지 않으면 'declare' 한정자를 추가하거나 중복 선언을 제거합니다.", + "Property_assignment_expected_1136": "속성 할당이 필요합니다.", + "Property_destructuring_pattern_expected_1180": "속성 구조 파괴 패턴이 필요합니다.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "속성에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", + "Property_or_signature_expected_1131": "속성 또는 서명이 필요합니다.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "속성 값은 문자열 리터럴, 숫자 리터럴, 'true', 'false', 'null', 개체 리터럴 또는 배열 리터럴이어야 합니다.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5'를 대상으로 할 경우 'for-of', 분산 및 파괴의 반복 가능한 개체를 완벽히 지원합니다.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "내보낸 클래스의 공용 메서드 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "내보낸 클래스의 공용 메서드 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "내보낸 클래스의 공용 메서드의 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "내보낸 클래스의 공용 속성 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "내보낸 클래스의 공용 속성 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "내보낸 클래스의 공용 속성 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "내보낸 클래스의 공용 정적 메서드 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "내보낸 클래스에 있는 공용 정적 메서드 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "내보낸 클래스의 공용 정적 메서드 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "내보낸 클래스에 있는 공용 정적 속성 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "정규화된 이름 '{0}'은(는) 선행 '@param {object} {1}'과(와) 함께 사용해야 합니다.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "함수 매개 변수를 읽지 않으면 오류가 발생합니다.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "암시된 'any' 형식이 있는 식 및 선언에서 오류를 발생합니다.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "암시된 'any' 형식이 있는 'this' 식에서 오류를 발생합니다.", + "Range_out_of_order_in_character_class_1517": "문자 클래스의 범위가 순서를 벗어났습니다.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}'을 사용하도록 설정한 경우 형식을 다시 내보내려면 'export type'을 사용해야 합니다.", + "React_components_cannot_include_JSX_namespace_names_2639": "React 구성 요소에는 JSX 네임스페이스 이름을 포함할 수 없습니다.", + "Recommended_Options_6294": "권장 옵션", + "Redirect_output_structure_to_the_directory_6006": "출력 구조를 디렉터리로 리디렉션합니다.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript에서 자동으로 로드되는 프로젝트 수를 줄입니다.", + "Referenced_project_0_may_not_disable_emit_6310": "참조된 프로젝트 '{0}'은(는) 내보내기를 사용하지 않도록 설정할 수 없습니다.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "참조되는 프로젝트 '{0}'에는 \"composite\": true 설정이 있어야 합니다.", + "Referenced_via_0_from_file_1_1400": "'{1}' 파일에서 '{0}'을(를) 통해 참조되었습니다.", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. 가져오기 경로에 확장자를 추가하는 것을 고려하세요.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "'--moduleResolution'이 'node16' 또는 'nodenext'인 경우 상대 가져오기 경로에는 ECMAScript 가져오기의 명시적 파일 확장자가 필요합니다. '{0}'을(를) 사용하시겠습니까?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "감시 프로세스에서 디렉터리 목록을 제거합니다.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "감시 모드의 처리에서 파일 목록을 제거합니다.", + "Remove_all_unnecessary_override_modifiers_95163": "불필요한 'override' 한정자 모두 제거", + "Remove_all_unnecessary_uses_of_await_95087": "불필요한 'await' 사용 모두 제거", + "Remove_all_unreachable_code_95051": "접근할 수 없는 코드 모두 제거", + "Remove_all_unused_labels_95054": "사용되지 않는 레이블 모두 제거", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "관련 문제가 있는 모든 화살표 함수 본문에서 중괄호 제거", + "Remove_braces_from_arrow_function_95060": "화살표 함수에서 중괄호 제거", + "Remove_braces_from_arrow_function_body_95112": "화살표 함수 본문에서 중괄호 제거", + "Remove_import_from_0_90005": "'{0}'에서 가져오기 제거", + "Remove_override_modifier_95161": "'override' 한정자 제거", + "Remove_parentheses_95126": "괄호 제거", + "Remove_template_tag_90011": "템플릿 태그 제거", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 언어 서버에서 JavaScript 파일의 총 소스 코드 크기에 적용되는 20MB 제한을 제거합니다.", + "Remove_type_from_import_declaration_from_0_90055": "\"{0}\"의 가져오기 선언에서 '형식' 제거", + "Remove_type_from_import_of_0_from_1_90056": "\"{1}\"의 '{0}' 가져오기에서 '형식' 제거", + "Remove_type_parameters_90012": "형식 매개 변수 제거", + "Remove_unnecessary_await_95086": "불필요한 'await' 제거", + "Remove_unreachable_code_95050": "접근할 수 없는 코드 제거", + "Remove_unused_declaration_for_Colon_0_90004": "'{0}'의 사용되지 않는 선언 제거", + "Remove_unused_declarations_for_Colon_0_90041": "'{0}'의 사용되지 않는 선언 제거", + "Remove_unused_destructuring_declaration_90039": "사용되지 않는 구조 파괴 선언 제거", + "Remove_unused_label_95053": "사용되지 않는 레이블 제거", + "Remove_variable_statement_90010": "변수 문 제거", + "Rename_param_tag_name_0_to_1_95173": "'@param' 태그 이름 '{0}'의 이름을 '{1}'(으)로 바꿉니다.", + "Replace_0_with_Promise_1_90036": "'{0}'을(를) 'Promise<{1}>'(으)로 바꾸기", + "Replace_all_unused_infer_with_unknown_90031": "사용되지 않은 모든 'infer'를 'unknown'으로 바꾸기", + "Replace_import_with_0_95015": "가져오기를 '{0}'(으)로 바꿉니다.", + "Replace_infer_0_with_unknown_90030": "'infer {0}'을(를) 'unknown'으로 바꾸기", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "함수의 일부 코드 경로가 값을 반환하지 않는 경우 오류를 보고합니다.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch 문의 fallthrough case에 대한 오류를 보고합니다.", + "Report_errors_in_js_files_8019": ".js 파일의 오류를 보고합니다.", + "Report_errors_on_unused_locals_6134": "사용되지 않은 로컬 항목에 대한 오류를 보고합니다.", + "Report_errors_on_unused_parameters_6135": "사용되지 않은 매개 변수에 대한 오류를 보고합니다.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "다른 도구가 선언 파일을 간단하게 생성할 수 있도록 내보내기에서 충분한 주석이 필요합니다.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "요소 액세스를 사용하려면 인덱스 시그니처의 선언되지 않은 속성이 필요합니다.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "필수 형식 매개 변수는 선택적 형식 매개 변수 다음에 올 수 없습니다.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' 모듈에 대한 해결을 '{1}' 위치의 캐시에서 찾았습니다.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{1}' 위치의 캐시에서 형식 참조 지시어 '{0}'에 대한 해상도가 발견되었습니다.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "상대 이름이 아닌 이름을 확인하지 못했습니다. 최신 노드 확인 기능을 사용하지 않도록 설정하여 npm 라이브러리에 구성 업데이트가 필요한지 확인합니다.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "상대 이름이 아닌 이름을 확인하지 못했습니다. '--moduleResolution bundler'를 사용하여 프로젝트에 구성 업데이트가 필요한지 확인하려고 합니다.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "문자열 값 속성 이름에 대해서만 'keyof'를 확인합니다(숫자나 기호 아님).", + "Resolved_under_condition_0_6414": "조건 '{0}'에서 확인되었습니다.", + "Resolving_in_0_mode_with_conditions_1_6402": "조건이 {1}인 {0} 모드에서 확인하는 중입니다.", + "Resolving_module_0_from_1_6086": "======== '{1}'에서 '{0}' 모듈을 확인하는 중입니다. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "기본 URL '{1}' - '{2}'을(를) 기준으로 모듈 이름 '{0}'을(를) 확인하는 중입니다.", + "Resolving_real_path_for_0_result_1_6130": "'{0}'의 실제 경로를 확인하는 중입니다. 결과: '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 파일 '{1}'을(를) 포함하는 형식 참조 지시어 '{0}'을(를) 확인하는 중입니다.' ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: '{2}' ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: 설정되지 않음 ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: '{1}' ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: 설정되지 않음 ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "사용자 지정 typeRoots를 지정하는 프로그램에 대한 형식 참조 지시문을 확인합니다. 'node_modules' 폴더에서 조회를 건너뜁니다.", + "Resolving_with_primary_search_path_0_6121": "기본 검색 경로 '{0}'을(를) 사용하여 확인하는 중입니다.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 매개 변수 '{0}'에는 암시적으로 'any[]' 형식이 포함됩니다.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 매개 변수 '{0}'은(는) 암시적으로 'any[]' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "Rest_types_may_only_be_created_from_object_types_2700": "rest 유형은 개체 형식에서만 만들 수 있습니다.", + "Return_type_annotation_circularly_references_itself_2577": "반환 형식 주석이 자신을 순환 참조합니다.", + "Return_type_must_be_inferred_from_a_function_95149": "반환 형식은 함수에서 유추되어야 합니다.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "내보낸 인터페이스에 있는 생성자 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "내보낸 인터페이스에 있는 생성자 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "생성자 시그니처의 반환 형식을 클래스의 인스턴스 형식에 할당할 수 있어야 합니다.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "내보낸 함수의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "내보낸 함수의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "내보낸 함수의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "내보낸 인터페이스에 있는 인덱스 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "내보낸 인터페이스에 있는 인덱스 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "내보낸 인터페이스에 있는 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "내보낸 인터페이스에 있는 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 외부 모듈 {2}의 이름 '{1}'을(를) 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "내보낸 클래스에 있는 공용 getter '{0}'의 반환 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "내보낸 클래스에 있는 공용 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 외부 모듈 {2}의 이름 '{1}'을(를) 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "내보낸 클래스에 있는 공용 정적 getter '{0}'의 반환 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{1}'에서 '{0}' 모듈의 해결 방법을 '{2}위치 '의 캐시에 다시 사용하는 중이었으므로 해결되지 않았습니다.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중이었으므로 확인되지 않았습니다.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이므로 '{2}'(으)로 해결되었습니다.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중이며 해결되지 않았습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이므로 해결되지 않았습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 '{2}'(으)로 해결되었습니다.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.", + "Rewrite_all_as_indexed_access_types_95034": "인덱싱된 액세스 형식으로 모두 다시 작성", + "Rewrite_as_the_indexed_access_type_0_90026": "인덱싱된 액세스 형식 '{0}'(으)로 다시 작성", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "출력 파일의 해당 JavaScript에 해당하는 상대 가져오기 경로에서 '.ts', '.tsx', '.mts' 및 '.cts' 파일 확장자를 다시 작성합니다.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "??의 오른쪽 피연산자는 왼쪽 피연산자가 nullish가 되지 않으므로 연결할 수 없습니다.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "루트 디렉터리를 확인할 수 없어 기본 검색 경로를 건너뜁니다.", + "Root_file_specified_for_compilation_1427": "컴파일을 위해 지정된 루트 파일", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "전략", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "프로젝트의 증분 컴파일을 허용하도록 .tsbuildinfo 파일을 저장합니다.", + "Saw_non_matching_condition_0_6405": "비일치 조건 '{0}'을(를) 확인했습니다.", + "Scoped_package_detected_looking_in_0_6182": "범위가 지정된 패키지가 검색되었습니다. '{0}'에서 찾습니다.", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "대체 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "기본 설정 확장에 대한 모든 상위 node_modules 디렉터리 검색: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "자세한 내용은 https://aka.ms/tsconfig/module을 참조하세요.", + "Selection_is_not_a_valid_statement_or_statements_95155": "선택 항목이 유효한 하나의 문 또는 여러 문이 아닙니다.", + "Selection_is_not_a_valid_type_node_95133": "선택 영역이 유효한 형식 노드가 아닙니다.", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "내보낸 JavaScript의 JavaScript 언어 버전을 설정하고 호환되는 라이브러리 선언을 포함합니다.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript에서 메시지 언어를 설정합니다. 이는 내보내기에 영향을 주지 않습니다.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "구성 파일의 'module' 옵션을 '{0}'(으)로 설정", + "Set_the_newline_character_for_emitting_files_6659": "파일을 내보내기 위한 줄 바꿈 문자를 설정합니다.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "구성 파일의 'target' 옵션을 '{0}'(으)로 설정", + "Setters_cannot_return_a_value_2408": "Setter가 값을 반환할 수 없습니다.", + "Show_all_compiler_options_6169": "모든 컴파일러 옵션을 표시합니다.", + "Show_diagnostic_information_6149": "진단 정보를 표시합니다.", + "Show_verbose_diagnostic_information_6150": "자세한 진단 정보를 표시합니다.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "빌드될 항목 표시(또는 '--clean'으로 지정된 경우 삭제될 항목 표시)", + "Signature_0_must_be_a_type_predicate_1224": "'{0}' 시그니처는 형식 조건자여야 합니다.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "서명 선언은 TypeScript 파일에서만 사용할 수 있습니다.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "업스트림 프로젝트에서 오류 발생 시 다운스트림 프로젝트 빌드를 건너뜁니다.", + "Skip_type_checking_all_d_ts_files_6693": "모든 .d.ts 파일의 형식 검사를 건너뜁니다.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript에 포함된 .d.ts 파일의 형식 검사를 건너뜁니다.", + "Skip_type_checking_of_declaration_files_6012": "선언 파일 형식 검사를 건너뜁니다.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' 프로젝트의 빌드는 '{1}' 종속성에 오류가 있기 때문에 건너뜁니다.", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트의 빌드를 건너뛰는 중", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "절대 URI처럼 보이는 '{0}' 모듈을 건너뛰는 중입니다. 대상 파일 형식은 {1}입니다.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.", + "Source_has_0_element_s_but_target_allows_only_1_2619": "소스에 {0}개 요소가 있지만, 대상에서 {1}개만 허용합니다.", + "Source_has_0_element_s_but_target_requires_1_2618": "소스에 {0}개 요소가 있지만, 대상에 {1}개가 필요합니다.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "소스가 대상에 있는 {0} 위치의 필수 요소와 일치하는 항목을 제공하지 않습니다.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "소스가 대상에 있는 {0} 위치의 가변 인자 요소와 일치하는 항목을 제공하지 않습니다.", + "Specify_ECMAScript_target_version_6015": "ECMAScript 대상 버전을 지정합니다.", + "Specify_JSX_code_generation_6080": "JSX 코드 생성을 지정합니다.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "모든 출력을 하나의 JavaScript 파일로 묶는 파일을 지정하세요. 'declaration'이 true이면 모든 .d.ts 출력을 묶는 파일도 지정합니다.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "컴파일에 포함할 파일과 일치하는 GLOB 패턴 목록을 지정합니다.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "포함할 언어 서비스 플러그 인 목록을 지정합니다.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "대상 런타임 환경을 설명하는 번들 라이브러리 선언 파일 세트를 지정합니다.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "추가 검색 위치로 가져오기를 다시 매핑할 항목 집합을 지정합니다.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "프로젝트의 경로를 지정하는 개체 배열을 지정합니다. 프로젝트 참조에 사용됩니다.", + "Specify_an_output_folder_for_all_emitted_files_6678": "내보낸 모든 파일의 출력 폴더를 지정합니다.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "유형에만 사용되는 가져오기에 대한 방출/확인 동작을 지정합니다.", + "Specify_file_to_store_incremental_compilation_information_6380": "증분 컴파일 정보를 저장할 파일 지정", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript가 지정된 모듈 지정자에서 파일을 검색하는 방법을 지정합니다.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "재귀 파일 감시 기능이 없는 시스템에서 디렉터리를 감시하는 방법을 지정합니다.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript 감시 모드의 작동 방식을 지정합니다.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "컴파일에 포함할 라이브러리 파일을 지정합니다.", + "Specify_module_code_generation_6016": "모듈 코드 생성을 지정합니다.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*'를 사용할 때 JSX 팩토리 함수를 가져오기 위해 사용되는 모듈 지정자를 지정합니다.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types'와 같은 역할을 하는 여러 폴더를 지정합니다.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "설정이 상속되는 기본 구성 파일에 대한 하나 이상의 경로 또는 노드 모듈 참조를 지정합니다.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "선언 파일의 자동 인식 옵션을 지정합니다.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "파일 시스템 이벤트를 사용하여 만들지 못할 경우 폴링 조사식을 만들기 위한 전략 지정: 'FixedInterval'(기본값), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 디렉터리를 감시하기 위한 전략 지정: 'UseFsEvents'(기본값), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "파일을 감시하기 위한 전략 지정: 'FixedPollingInterval'(기본값), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 내보내기를 대상으로 할 때 조각에 사용되는 JSX 조각 참조를 지정합니다(예: 'React.Fragment' 또는 'Fragment').", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 내보내기를 대상으로 하는 경우 사용할 JSX 팩터리 함수를 지정합니다(예: 'React.createElement' 또는 'h').", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 방출을 대상으로 할 때 사용되는 JSX 팩토리 함수를 지정하세요. 'React.createElement' 또는 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'JsxFactory' 컴파일러 옵션이 지정된 상태로 'react' JSX 내보내기를 대상으로 설정할 때 사용할 JSX 조각 팩터리 함수를 지정합니다(예: 'Fragment').", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "상대적이지 않은 모듈 이름을 확인할 기본 디렉터리를 지정합니다.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "파일을 내보낼 때 사용할 줄 시퀀스의 끝 지정: 'CRLF'(dos) 또는 'LF'(unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "소스 위치 대신 디버거가 TypeScript 파일을 찾아야 하는 위치를 지정하세요.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "생성된 위치 대신 디버거가 맵 파일을 찾아야 하는 위치를 지정하세요.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules'에서 JavaScript 파일을 확인하는 데 사용되는 최대 폴더 깊이를 지정합니다. 'allowJs'에만 적용 가능합니다.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' 및 'jsxs' 팩터리 함수를 가져오는 데 사용할 모듈 지정자를 지정합니다(예: react).", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement'에 대해 호출된 개체를 지정합니다. '반응' JSX 방출을 대상으로 할 때만 적용됩니다.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "생성된 선언 파일의 출력 디렉터리를 지정합니다.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo 증분 컴파일 파일의 경로를 지정합니다.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "입력 파일의 루트 디렉터리를 지정하세요. --outDir이 포함된 출력 디렉터리 구조를 제어하는 데 사용됩니다.", + "Specify_the_root_folder_within_your_source_files_6690": "소스 파일 내에서 루트 폴더를 지정합니다.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "디버거의 루트 경로를 지정하여 참조 소스 코드를 찾습니다.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "소스 파일에서 참조하지 않고 포함할 형식 패키지 이름을 지정합니다.", + "Specify_what_JSX_code_is_generated_6646": "생성되는 JSX 코드를 지정합니다.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "시스템에 원시 파일 감시자가 부족한 경우 감시자가 사용해야 하는 접근 방법을 지정합니다.", + "Specify_what_module_code_is_generated_6657": "생성되는 모듈 코드를 지정합니다.", + "Split_all_invalid_type_only_imports_1367": "잘못된 형식 전용 가져오기 모두 분할", + "Split_into_two_separate_import_declarations_1366": "두 개의 개별 가져오기 선언으로 분할", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 식에서 Spread 연산자는 ECMAScript 5 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", + "Spread_types_may_only_be_created_from_object_types_2698": "spread 유형은 개체 형식에서만 만들 수 있습니다.", + "Starting_compilation_in_watch_mode_6031": "감시 모드에서 컴파일을 시작하는 중...", + "Statement_expected_1129": "문이 필요합니다.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "앰비언트 컨텍스트에서는 문이 허용되지 않습니다.", + "Static_members_cannot_reference_class_type_parameters_2302": "정적 멤버는 클래스 형식 매개 변수를 참조할 수 없습니다.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "정적 속성 '{0}'이(가) 생성자 함수 '{1}'의 기본 제공 속성 'Function.{0}'과(와) 충돌합니다.", + "Stricter_Typechecking_Options_6292": "더 엄격한 형식 검사 옵션", + "String_literal_expected_1141": "문자열 리터럴이 필요합니다.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' 플래그가 'es2015' 또는 'es2020'으로 설정된 경우 문자열 리터럴 가져오기 및 내보내기 이름은 지원되지 않습니다.", + "String_literal_with_double_quotes_expected_1327": "큰따옴표로 묶은 문자열 리터럴이 필요합니다.", + "Style_Options_6293": "스타일 옵션", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "색과 컨텍스트를 사용하여 오류 및 메시지를 스타일화합니다(실험적).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "en 대시가 있는 경우 하위 패턴 플래그가 있어야 합니다.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "후속 속성 선언에 같은 형식이 있어야 합니다. '{0}' 속성이 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "후속 변수 선언에 같은 형식이 있어야 합니다. '{0}' 변수가 '{1}' 형식이어야 하는데 여기에는 '{2}' 형식이 있습니다.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' 패턴에 대한 '{0}' 대체의 형식이 잘못되었습니다. 'string'이 필요한데 '{2}'을(를) 얻었습니다.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "'{1}' 패턴의 '{0}' 대체에는 '*' 문자를 최대 하나만 사용할 수 있습니다.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "'{0}' 패턴에 대한 대체는 배열이 되어야 합니다.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "패턴 '{0}'에 대한 대체에는 배열이 비어 있지 않아야 합니다.", + "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json 파일을 만들었습니다.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "생성자 밖이나 생성자 내부에 중첩된 함수에서는 Super 호출이 허용되지 않습니다.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "개체 리터럴에 대한 초과 속성 검사를 생략합니다.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "인덱스 시그니처가 없는 개체 인덱싱에 대한 noImplicitAny 오류를 표시하지 않습니다.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "인덱스 서명이 없는 개체를 인덱싱할 때 'noImplicitAny' 오류를 억제합니다.", + "Switch_each_misused_0_to_1_95138": "잘못 사용된 각 '{0}'을(를) '{1}'(으)로 전환", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 동기적으로 콜백을 호출하고 디렉터리 감시자의 상태를 업데이트합니다.", + "Syntax_Colon_0_6023": "구문: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' 태그는 '{1}'개 이상의 인수가 필요한데 JSX 팩터리 '{2}'이(가) 최대 '{3}'개를 제공합니다.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "태그가 지정된 템플릿 식은 선택적 체인에서 사용할 수 없습니다.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "대상에서 {0}개 요소만 허용하지만, 소스에 더 많이 있을 수 있습니다.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "대상에 {0}개 요소가 필요하지만, 소스에 더 적게 있을 수 있습니다.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "대상 서명이 너무 적은 인수를 제공합니다. {0} 이상이 필요하지만 {1}을(를) 받았습니다.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 한정자는 TypeScript 파일에서만 사용할 수 있습니다.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' 연산자는 'symbol' 유형에 적용될 수 없습니다.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' 연산자는 부울 형식에 사용할 수 없습니다. 대신 '{1}'을(를) 사용하세요.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "비동기 반복기의 '{0}' 속성은 메서드여야 합니다.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "반복기의 '{0}' 속성은 메서드여야 합니다.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 형식은 할당할 수 있는 다른 형식이 거의 없습니다. 대신 'any' 형식을 사용할까요?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "유니코드(u) 플래그와 유니코드 집합(v) 플래그를 동시에 설정할 수 없습니다.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "'arguments' 개체는 ES5의 화살표 함수에서 참조할 수 없습니다. 표준 함수 식을 사용해 보세요.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' 개체는 ES5의 비동기 함수 또는 메서드에서 참조할 수 없습니다. 표준 함수 또는 메서드를 사용해 보세요.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 문의 본문이 빈 문이면 안 됩니다.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "이 구현에 대한 호출이 성공하겠지만, 오버로드의 구현 시그니처는 외부에 표시되지 않습니다.", + "The_character_set_of_the_input_files_6163": "입력 파일의 문자 집합입니다.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "포함하는 화살표 함수는 'this'의 전역 값을 캡처합니다.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "제어 흐름 분석에 대해 포함된 함수 또는 모듈 본문이 너무 큽니다.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "현재 파일은 CommonJS 모듈이며 최상위 수준에서 'await'를 사용할 수 없습니다.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "현재 파일은 가져오기에서 'require' 호출을 생성하는 CommonJS 모듈입니다. 그러나 참조된 파일은 ECMAScript 모듈이며 'require'로 가져올 수 없습니다. 대신 동적 'import(\"{0}\")' 호출을 작성하는 것이 좋습니다.", + "The_current_host_does_not_support_the_0_option_5001": "현재 호스트가 '{0}' 옵션을 지원하지 않습니다.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "사용하려는 '{0}'의 선언이 여기서 정의됩니다.", + "The_declaration_was_marked_as_deprecated_here_2798": "선언이 여기에 사용되지 않음으로 표시되었습니다.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "필요한 형식은 여기에서 '{1}' 형식에 선언된 '{0}' 속성에서 가져옵니다.", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "필요한 형식은 이 시그니처의 반환 형식에서 가져옵니다.", + "The_expected_type_comes_from_this_index_signature_6501": "필요한 형식은 이 인덱스 시그니처에서 가져옵니다.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "내보내기 할당의 식은 앰비언트 컨텍스트의 식별자 또는 정규화된 이름이어야 합니다.", + "The_file_is_in_the_program_because_Colon_1430": "파일은 다음과 같은 이유로 프로그램에 있습니다.", + "The_files_list_in_config_file_0_is_empty_18002": "'{0}' 구성 파일의 '파일' 목록이 비어 있습니다.", + "The_first_export_default_is_here_2752": "첫 번째 내보내기 기본값은 여기에 있습니다.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "프라미스에서 'then' 메서드의 첫 번째 매개 변수는 콜백이어야 합니다.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "전역 형식 'JSX.{0}'에 속성이 둘 이상 있을 수 없습니다.", + "The_implementation_signature_is_declared_here_2750": "여기에서는 구현 시그니처가 선언됩니다.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "'import.meta' 메타 속성은 CommonJS 출력으로 빌드될 파일에서 허용되지 않습니다.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "'import.meta' 메타 속성은 '--module' 옵션이 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20' 또는 'nodenext'인 경우에만 허용됩니다.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}'의 유추된 형식 이름을 지정하려면 '{1}'에 대한 참조가 있어야 합니다. 이식하지 못할 수 있습니다. 형식 주석이 필요합니다.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}'의 유추된 형식이 일반적으로 직렬화될 수 없는 순환 구조가 있는 형식을 참조합니다. 형식 주석이 필요합니다.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}'의 유추 형식이 액세스할 수 없는 '{1}' 형식을 참조합니다. 형식 주석이 필요합니다.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "이 노드의 유추된 형식이 컴파일러가 직렬화할 최대 길이를 초과합니다. 명시적 형식 주석이 필요합니다.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 선언의 이니셜라이저는 '[Symbol.dispose]()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 선언의 이니셜라이저는 '[Symbol.asyncDispose]()' 또는 '[Symbol.dispose]()' 메서드가 있는 개체이거나 'null' 또는 'undefined'여야 합니다.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "속성 '{1}'이(가) 여러 구성원에 있고 일부 구성원에서는 프라이빗 상태이므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "일부 구성원에 속성 '{1}'에 충돌하는 형식이 있으므로 교집합 '{0}'이(가) 'never'로 감소했습니다.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'내장' 키워드는 컴파일러에서 제공하는 내장 형식을 선언하는 데에만 사용할 수 있습니다.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "'JsxFactory' 컴파일러 옵션과 함께 JSX 조각을 사용하려면 'jsxFragmentFactory' 컴파일러 옵션을 제공해야 합니다.", + "The_last_overload_gave_the_following_error_2770": "마지막 오버로드에서 다음 오류가 발생했습니다.", + "The_last_overload_is_declared_here_2771": "여기서 마지막 오버로드가 선언됩니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 문의 왼쪽에는 구조 파괴 패턴을 사용할 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for... in' 문의 왼쪽은 'using' 선언일 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for... in' 문의 왼쪽은 'await using' 선언일 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 문의 왼쪽은 'string' 또는 'any' 형식이어야 합니다.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 문의 왼쪽은 'async'일 수 없습니다.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "산술 연산의 왼쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "할당 식의 왼쪽은 선택적 속성 액세스일 수 없습니다.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "할당 식의 왼쪽은 변수 또는 속성 액세스여야 합니다.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 식의 왼쪽은 오른쪽 '[Symbol.hasInstance]' 메서드의 첫 번째 인수에 할당할 수 있어야 합니다.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 식 왼쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 합니다.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "사용자에게 메시지를 표시할 때 사용되는 로캘입니다(예: 'en-us').", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules에서 검색하고 JavaScript 파일을 로드할 최대 종속성 깊이입니다.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 연산자의 피연산자는 프라이빗 식별자일 수 없습니다.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 연산자의 피연산자는 읽기 전용 속성일 수 없습니다.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 연산자의 피연산자는 속성 참조여야 합니다.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 연산자의 피연산자는 선택 사항이어야 합니다.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "증분 또는 감소 연산자의 피연산자는 선택적 속성 액세스일 수 없습니다.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "증가 또는 감소 연산자의 피연산자는 변수 또는 속성 액세스여야 합니다.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "여기서 파서는 '{0}' 토큰과 일치하는 '{1}'을(를) 찾아야 합니다.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 내보내기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "프로젝트 루트가 모호하지만 '{1}' 파일에서 '{0}' 가져오기 맵 항목을 확인하는 데 필요합니다. 명확하게 하려면 `rootDir` 컴파일러 옵션을 제공하세요.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "철자가 동일한 다른 프라이빗 식별자에서 섀도 처리되기 때문에 이 클래스 내의 '{1}' 형식에서 '{0}' 속성에 액세스할 수 없습니다.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "매개 변수 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "속성 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "비동기 함수의 반환 형식은 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise 형식이어야 합니다. 'Promise<{0}>'을(를) 쓰려고 했습니까?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 문 오른쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 하는데, 여기에 '{0}' 형식이 있습니다.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "산술 연산 오른쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 식의 오른쪽은 'any' 형식, 클래스, 함수 또는 'Function' 인터페이스 형식에 할당할 수 있는 다른 형식이거나 'Symbol.hasInstance' 메서드가 있는 개체 형식이어야 합니다.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 식의 오른쪽은 인스턴스화 식이 아니어야 합니다.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 파일의 루트 값은 개체여야 합니다.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0}이(가) 필요합니다.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "런타임에서는 {1} 인수를 사용하여 데코레이터를 호출하지만 데코레이터에는 {0} 이상이 필요합니다.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "여기서는 '{0}'의 섀도 선언이 정의됩니다.", + "The_signature_0_of_1_is_deprecated_6387": "'{1}'의 시그니처 '{0}'은(는) 사용되지 않습니다.", + "The_specified_path_does_not_exist_Colon_0_5058": "지정된 경로가 없습니다. '{0}'.", + "The_tag_was_first_specified_here_8034": "태그가 처음에 여기에 지정되었습니다.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "개체 rest 할당의 대상은 선택적 속성 액세스일 수 없습니다.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "개체 rest 할당의 대상은 변수 또는 속성 액세스여야 합니다.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "'{0}' 형식의 'this' 컨텍스트를 메서드의 '{1}' 형식 'this'에 할당할 수 없습니다.", + "The_this_types_of_each_signature_are_incompatible_2685": "각 시그니처의 'this' 형식이 호환되지 않습니다.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' 형식은 'readonly'이며 변경 가능한 형식 '{1}'에 할당할 수 없습니다.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "export 문에 'export type'이 사용될 때 명명된 내보내기에서 'type' 한정자를 사용할 수 없습니다.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "import 문에 'import type'이 사용되는 경우 'type' 수정자는 명명된 가져오기에 사용할 수 없습니다.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "속성 '{0}'을(를) 직렬화할 수 없기 때문에 이 노드의 유형을 직렬화할 수 없습니다.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "비동기 반복기의 '{0}()' 메서드에서 반환하는 형식은 'value' 속성이 있는 형식에 대한 프라미스여야 합니다.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "반복기의 '{0}()' 메서드에 의해 반환되는 형식에는 'value' 속성이 있어야 합니다.", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}'의 형식은 해당 형식 간에 호환되지 않습니다.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}'에서 반환되는 형식은 해당 형식 간에 호환되지 않습니다.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "여기서는 '{0}' 값을 사용할 수 없습니다.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 문의 변수 선언에 이니셜라이저가 포함될 수 없습니다.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' 문은 지원되지 않습니다. 'with' 블록의 모든 기호가 'any' 형식이 됩니다.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}'에 형식이 있지만 현재 'moduleResolution' 설정에서 이 결과를 확인할 수 없습니다. 'node16', 'nodenext' 또는 'bundler'로 업데이트하는 것이 좋습니다.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}'에 형식이 있지만 package.json \"내보내기\"를 준수할 때 이 결과를 확인할 수 없습니다. '{1}' 라이브러리는 package.json 또는 입력을 업데이트해야 할 수 있습니다.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "이 정규식에는 이름이 '{0}'인 캡처 그룹이 없습니다.", + "There_is_nothing_available_for_repetition_1507": "반복에 사용할 수 있는 항목이 없습니다.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "이 JSX 태그를 사용하려면 '{0}'이(가) 범위에 있어야 하지만 찾을 수 없습니다.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "이 JSX 태그를 사용하려면 모듈 경로 '{0}'이(가) 있어야 하지만 찾을 수 없습니다. 적절한 패키지에 대해 형식이 설치되어 있는지 확인합니다.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "이 JSX 태그의 '{0}' 속성에는 '{1}' 형식의 자식 하나가 필요하지만, 여러 자식이 제공되었습니다.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "이 JSX 태그의 '{0}' 속성에는 여러 자식이 있어야 하는 '{1}' 형식이 필요하지만, 단일 자식만 제공되었습니다.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 캡처 그룹이 없습니다.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "이 역참조는 존재하지 않는 그룹을 참조합니다. 이 정규식에는 {0} 캡처 그룹만 있습니다.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "이 이진 식은 nullish가 되지 않습니다. 괄호가 누락되었나요?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "이 문자는 정규식에서 이스케이프할 수 없습니다.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}'이(가) '{1}'과(와) 겹치지 않으므로 이 비교는 의도하지 않은 것 같습니다.", + "This_condition_will_always_return_0_2845": "이 조건은 항상 '{0}'을(를) 반환합니다.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript는 값이 아닌 참조로 개체를 비교하므로 이 조건은 항상 '{0}'을(를) 반환합니다.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "이 '{0}'(은)는 항상 정의되어 있으므로 이 조건은 항상 true를 반환합니다.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "함수가 항상 정의되므로 이 조건은 항상 true를 반환합니다. 대신 호출하시겠어요?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "이 생성자 함수는 클래스 선언으로 변환될 수 있습니다.", + "This_expression_is_always_nullish_2871": "이 식은 항상 nullish입니다.", + "This_expression_is_never_nullish_2881": "이 표현식은 nullish가 되지 않습니다.", + "This_expression_is_not_callable_2349": "이 식은 호출할 수 없습니다.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "이 식은 'get' 접근자이므로 호출할 수 없습니다. '()' 없이 사용하시겠습니까?", + "This_expression_is_not_constructable_2351": "이 식은 생성할 수 없습니다.", + "This_file_already_has_a_default_export_95130": "이 파일에 이미 기본 내보내기가 있습니다.", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "이 가져오기 경로는 다른 프로젝트로 확인되고 프로젝트의 출력 파일 간의 상대 경로가 입력 파일 간의 상대 경로와 동일하지 않으므로 다시 쓰기에는 안전하지 않습니다.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "이 가져오기는 '{0}' 확장을 사용하여 입력 TypeScript 파일로 확인하지만 상대 경로가 아니므로 내보내는 동안 다시 작성되지 않습니다.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "확대되는 선언입니다. 확대하는 선언을 같은 파일로 이동하는 것이 좋습니다.", + "This_kind_of_expression_is_always_falsy_2873": "이러한 종류의 식은 항상 거짓입니다.", + "This_kind_of_expression_is_always_truthy_2872": "이러한 종류의 식은 항상 사실입니다.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "비동기 함수로 변환될 수 있습니다.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "이 멤버는 기본 클래스 '{0}'에서 선언되지 않았기 때문에 'override' 태그가 있는 JSDoc 주석을 가질 수 없습니다. ‘{1}’을(를) 의미했나요?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "이 멤버는 포함하는 클래스 '{0}'이(가) 다른 클래스를 확장하지 않기 때문에 '@override' 태그가 있는 JSDoc 주석을 가질 수 없습니다.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "이 멤버는 이름이 동적이기 때문에 '@override' 태그가 포함된 JSDoc 주석을 가질 수 없습니다.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다. '{1}'였습니까?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "이 멤버는 포함하는 클래스 '{0}'이(가) 다른 클래스를 확장하지 않으므로 'override' 한정자를 포함할 수 없습니다.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "이름이 동적이므로 이 멤버에는 'override' 한정자를 사용할 수 없습니다.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "이 멤버는 기본 클래스 '{0}'의 멤버를 재정의하므로 '@override' 태그가 있는 JSDoc 주석이 있어야 합니다.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "이 멤버는 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "이 멤버는 기본 클래스 '{0}'에 선언된 추상 메서드를 재정의하므로 'override' 한정자를 포함해야 합니다.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "이 모듈은 '{0}' 플래그를 켜고 기본 내보내기를 참조하여 ECMAScript 가져오기/내보내기를 통해서만 참조할 수 있습니다.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "이 모듈은 'export ='를 사용하여 선언되었으며 '{0}' 플래그를 사용하는 경우에만 기본 가져오기와 함께 사용할 수 있습니다.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "이 작업은 간소화할 수 있습니다. 이 교대 근무는 '{0} {1} {2}'(와)과 동일합니다.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "이 오버로드는 반환 형식 주석이 없으므로 '{0}' 형식을 암시적으로 반환합니다.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "이 오버로드 시그니처는 해당 구현 시그니처와 호환되지 않습니다.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "이 매개 변수는 'use strict' 지시문에서 사용할 수 없습니다.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "이 매개변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 '@override' 태그가 있는 JSDoc 주석이 있어야 합니다.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "이 매개 변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "이 정규식 플래그는 하위 패턴 내에서 토글할 수 없습니다.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "이 정규식 플래그는 '{0}' 이상을 대상으로 하는 경우에만 사용할 수 있습니다.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "이 상대 가져오기 경로는 파일 이름처럼 보이지만 실제로는 \"{0}\"(으)로 확인되므로 다시 작성하는 것이 안전하지 않습니다.", + "This_spread_always_overwrites_this_property_2785": "이 스프레드는 항상 이 속성을 덮어씁니다.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly'를 사용하도록 설정한 경우에는 이 구문을 사용할 수 없습니다.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 후행 쉼표 또는 명시적 제약 조건을 추가합니다.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "이 구문은 확장자가 .mts 또는 .cts인 파일에 예약되어 있습니다. 대신 'as' 식을 사용하세요.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "이 구문에는 가져온 도우미가 필요하지만 '{0}' 모듈을 찾을 수 없습니다.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "이 구문에는 '{0}'에 없는 '{1}'(이)라는 가져온 도우미가 필요합니다. '{0}'의 버전을 업그레이드하는 것이 좋습니다.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "이 구문에는 {2} 매개 변수가 포함된 '{1}'(이)라는 가져온 도우미가 필요하지만, 이 도우미는 '{0}'에 있는 도우미와 호환되지 않습니다. '{0}' 버전을 업그레이드하는 것이 좋습니다.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "이 형식 매개 변수에는 `extends {0}` 제약 조건이 필요할 수 있습니다.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "이 '가져오기' 사용은 유효하지 않습니다. 'import()' 호출을 작성할 수 있지만 괄호가 있어야 하며 유형 인수를 가질 수 없습니다.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "이 파일을 ECMAScript 모듈로 변환하려면 `\"type\": \"module\"` 필드를 '{0}'에 추가하세요.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `\"type\": \"module\"` 필드를 '{1}'에 추가하세요.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "이 파일을 ECMAScript 모듈로 변환하려면 파일 확장명을 '{0}'(으)로 변경하거나 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "이 파일을 ECMAScript 모듈로 변환하려면 `{ \"type\": \"module\" }`을 사용하여 로컬 package.json 파일을 만드세요.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "최상위 'await' 식은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "최상위 'await using' 문은 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 파일의 최상위 수준 선언은 'declare' 또는 'export' 한정자로 시작해야 합니다.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "최상위 'for await' 루프는 'module' 옵션이 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext' 또는 'preserve'로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 허용됩니다.", + "Trailing_comma_not_allowed_1009": "후행 쉼표는 허용되지 않습니다.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "각 파일을 별도 모듈로 변환 컴파일합니다('ts.transpileModule'과 유사).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "해당 항목이 있는 경우 'npm i --save-dev @types/{1}'을(를) 시도하거나, 'declare module '{0}';'을(를) 포함하는 새 선언(.d.ts) 파일 추가", + "Trying_other_entries_in_rootDirs_6110": "'rootDirs'의 다른 항목을 시도하는 중입니다.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' 대체를 시도하는 중입니다. 후보 모듈 위치: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "길이가 '{1}'인 튜플 형식 '{0}'의 인덱스 '{2}'에 요소가 없습니다.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "튜플 형식 인수가 자신을 순환 참조합니다.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' 형식은 '--downlevelIteration' 플래그 또는 'es2015' 이상의 '--target'을 사용하는 경우에만 반복할 수 있습니다.", + "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' 형식을 인덱스 형식으로 사용할 수 없습니다.", + "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' 형식을 인덱스 형식 '{1}'에 사용할 수 없습니다.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' 형식이 '{1}' 제약 조건을 만족하지 않습니다.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "형식 '{0}'이(가) 필요한 형식 '{1}'을(를) 충족하지 않습니다.", + "Type_0_has_no_call_signatures_2757": "'{0}' 형식에 호출 시그니처가 없습니다.", + "Type_0_has_no_construct_signatures_2761": "'{0}' 형식에 구문 시그니처가 없습니다.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' 형식에 '{1}' 형식에 대한 일치하는 인덱스 시그니처가 없습니다.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' 유형에 '{1}' 유형과 공통적인 속성이 없습니다.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "유형 '{0}'에는 유형 인수 목록을 적용할 수 있는 서명이 없습니다.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "'{0}' 형식은 제네릭이며 읽기용으로만 인덱싱할 수 있습니다.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' 형식에 '{1}' 형식의 {2} 속성이 없습니다.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' 형식에 '{1}' 형식의 {2} 외 {3}개 속성이 없습니다.", + "Type_0_is_not_a_constructor_function_type_2507": "'{0}' 형식은 생성자 함수 형식이 아닙니다.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "'{0}' 형식은 Promise 호환 생성자 값을 참조하지 않으므로 ES5에서 유효한 비동기 함수 반환 형식이 아닙니다.", + "Type_0_is_not_an_array_type_2461": "'{0}' 형식은 배열 형식이 아닙니다.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아닙니다.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' 형식은 배열 형식 또는 문자열 형식이 아니거나, 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 없습니다.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "'{0}' 형식은 배열 형식이 아니거나 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 없습니다.", + "Type_0_is_not_assignable_to_type_1_2322": "'{0}' 형식은 '{1}' 형식에 할당할 수 없습니다.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' 형식은 '{1}' 형식에 할당할 수 없습니다. '{2}'을(를) 의미했나요?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' 형식을 '{1}' 형식에 할당할 수 없습니다. 이름이 같은 2개의 서로 다른 형식이 있지만 서로 관련은 없습니다.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "'{0}' 형식은 가변성 주석에 암시된 대로 '{1}' 형식에 할당할 수 없습니다.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "'{0}' 형식은 계산 열거형 멤버 값에 필요하므로 '{1}' 형식에 할당할 수 없습니다.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 속성의 유형에 'undefined'를 추가하는 것을 고려하세요.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' 유형은 'exactOptionalPropertyTypes: true'가 있는 '{1}' 유형에 할당할 수 없습니다. 대상 유형에 'undefined'를 추가하는 것을 고려하세요.", + "Type_0_is_not_comparable_to_type_1_2678": "'{0}' 형식을 '{1}' 형식과 비교할 수 없습니다.", + "Type_0_is_not_generic_2315": "'{0}' 형식이 제네릭이 아닙니다.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "형식 '{0}'은(는) 'in' 연산자의 오른쪽 피연산자로 허용되지 않는 기본 값을 나타낼 수 있습니다.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "'{0}' 형식에는 비동기 반복기를 반환하는 '[Symbol.asyncIterator]()' 메서드가 있어야 합니다.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' 형식에는 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 있어야 합니다.", + "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' 형식에서 '{1}' 시그니처에 대한 일치하는 항목을 제공하지 않습니다.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Type '{0}' 형식은 자기 자신을 기본 형식으로 재귀적으로 참조합니다.", + "Type_Checking_6248": "형식 검사", + "Type_alias_0_circularly_references_itself_2456": "'{0}' 형식 별칭은 순환적으로 자신을 참조합니다.", + "Type_alias_must_be_given_a_name_1439": "형식 별칭에 이름을 지정해야 합니다.", + "Type_alias_name_cannot_be_0_2457": "형식 별칭 이름은 '{0}'일 수 없습니다.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "형식 별칭은 TypeScript 파일에서만 사용할 수 있습니다.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "형식 주석은 생성자 선언에 표시될 수 없습니다.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "형식 주석은 TypeScript 파일에서만 사용할 수 있습니다.", + "Type_argument_expected_1140": "형식 인수가 필요합니다.", + "Type_argument_list_cannot_be_empty_1099": "형식 인수 목록은 비워 둘 수 없습니다.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "형식 인수는 TypeScript 파일에서만 사용할 수 있습니다.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}'의 형식 인수가 자신을 순환 참조합니다.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "형식 어설션 식은 TypeScript 파일에서만 사용할 수 있습니다.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "소스의 {0} 위치에 있는 형식이 대상의 {1} 위치에 있는 형식과 호환되지 않습니다.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "소스의 {0}~{1} 위치에 있는 형식이 대상의 {2} 위치에 있는 형식과 호환되지 않습니다.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' 프라이빗 이름이 포함된 형식은 --isolatedDeclarations와 함께 사용할 수 없습니다.", + "Type_declaration_files_to_be_included_in_compilation_6124": "컴파일에 포함할 선언 파일을 입력하세요.", + "Type_expected_1110": "형식이 필요합니다.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "유형 가져오기 어설션에는 값이 '가져오기' 또는 '요구'인 정확히 하나의 키('resolution-mode')가 있어야 합니다.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "CommonJS 모듈에서 ECMAScript 모듈의 형식 가져오기에는 'resolution-mode' 특성이 있어야 합니다.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "형식 인스턴스화는 깊이가 매우 깊으며 무한할 수도 있습니다.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "형식은 자체 'then' 메서드의 처리 콜백에서 직간접적으로 참조됩니다.", + "Type_library_referenced_via_0_from_file_1_1402": "'{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId가 '{2}'인 '{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "계산된 속성 값의 형식은 '{1}' 형식에 할당할 수 없는 '{0}'입니다.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "인스턴스 멤버 변수 '{0}'의 형식은 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*'의 반복되는 요소 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "'{0}' 속성의 형식은 매핑된 형식 '{1}'에서 순환적으로 자신을 참조합니다.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "비동기 생성기에 있는 'yield' 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "CommonJS 모듈에서 ECMAScript 모듈의 형식 전용 가져오기에는 'resolution-mode' 특성이 있어야 합니다.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "형식이 이 가져오기에서 시작됩니다. 네임스페이스 스타일 가져오기는 호출하거나 생성할 수 없으며, 런타임에 오류를 초래합니다. 여기서는 대신 기본 가져오기 또는 가져오기 require를 사용하는 것이 좋습니다.", + "Type_parameter_0_has_a_circular_constraint_2313": "형식 매개 변수 '{0}'에 순환 제약 조건이 있습니다.", + "Type_parameter_0_has_a_circular_default_2716": "형식 매개 변수 '{0}'에 순환 기본값이 있습니다.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "내보낸 인터페이스에 있는 호출 시그니처의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "내보낸 인터페이스에 있는 생성자 시그니처의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "내보낸 클래스의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "내보낸 함수의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "내보낸 인터페이스의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "내보낸 매핑된 개체 형식의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 사용 중입니다.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "내보낸 형식 별칭의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "내보낸 인터페이스에 있는 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "내보낸 클래스에 있는 공용 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "내보낸 클래스에 있는 공용 정적 메서드의 형식 매개 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "Type_parameter_declaration_expected_1139": "형식 매개 변수 선언이 필요합니다.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "형식 매개 변수 선언은 TypeScript 파일에서만 사용할 수 있습니다.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "형식 매개 변수 기본값은 이전에 선언된 형식 매개 변수만 참조할 수 있습니다.", + "Type_parameter_list_cannot_be_empty_1098": "형식 매개 변수 목록은 비워 둘 수 없습니다.", + "Type_parameter_name_cannot_be_0_2368": "형식 매개 변수 이름은 '{0}'일 수 없습니다.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "형식 매개 변수는 생성자 선언에 표시될 수 없습니다.", + "Type_predicate_0_is_not_assignable_to_1_1226": "형식 조건자 '{0}'을(를) '{1}'에 할당할 수 없습니다.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "형식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.", + "Type_reference_directive_0_was_not_resolved_6120": "======== 형식 참조 지시문 '{0}'이(가) 확인되지 않았습니다. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 형식 참조 지시문 '{0}'이(가) '{1}'(으)로 확인되었습니다. 주: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 형식 참조 지시문 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. 주: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "형식 만족 식은 TypeScript 파일에서만 사용할 수 있습니다.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "유형은 JavaScript 파일의 내보내기 선언에 나타날 수 없습니다.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "형식에 별도의 프라이빗 속성 '{0}' 선언이 있습니다.", + "Types_of_construct_signatures_are_incompatible_2419": "구문 시그니처 형식이 호환되지 않습니다.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "'{0}' 및 '{1}' 매개 변수의 형식이 호환되지 않습니다.", + "Types_of_property_0_are_incompatible_2326": "'{0}' 속성의 형식이 호환되지 않습니다.", + "Unable_to_open_file_0_6050": "'{0}' 파일을 열 수 없습니다.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "식으로 호출된 경우 클래스 데코레이터의 서명을 확인할 수 없습니다.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "식으로 호출된 경우 메서드 데코레이터의 서명을 확인할 수 없습니다.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "식으로 호출된 경우 매개 변수 데코레이터의 서명을 확인할 수 없습니다.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "식으로 호출된 경우 속성 데코레이터의 서명을 확인할 수 없습니다.", + "Undetermined_character_escape_1513": "결정되지 않은 문자 이스케이프입니다.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "예기치 않은 '{0}'입니다. 백슬래시로 이스케이프하려고 하셨나요?", + "Unexpected_end_of_text_1126": "예기치 않은 텍스트 끝입니다.", + "Unexpected_keyword_or_identifier_1434": "예기치 않은 키워드 또는 식별자입니다.", + "Unexpected_token_1012": "예기치 않은 토큰입니다.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "예기치 않은 토큰입니다. 생성자, 메서드, 접근자 또는 속성이 필요합니다.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "예기치 않은 토큰입니다. 중괄호가 없는 형식 매개 변수 이름이 필요합니다.", + "Unexpected_token_Did_you_mean_or_gt_1382": "예기치 않은 토큰입니다. '{'>'}' 또는 '>'를 사용하시겠습니까?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "예기치 않은 토큰입니다. '{'}'}' 또는 '}'를 사용하시겠습니까?", + "Unexpected_token_expected_1179": "예기치 않은 토큰입니다. '{'가 있어야 합니다.", + "Unicode_escape_sequence_cannot_appear_here_17021": "유니코드 이스케이프 시퀀스는 여기에 나타날 수 없습니다.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "유니코드 이스케이프 시퀀스는 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "유니코드 속성 값 식은 유니코드(u) 플래그 또는 유니코드 집합(v) 플래그가 설정된 경우에만 사용할 수 있습니다.", + "Unknown_Unicode_property_name_1524": "알 수 없는 유니코드 속성 이름입니다.", + "Unknown_Unicode_property_name_or_value_1529": "알 수 없는 유니코드 속성 이름 또는 값입니다.", + "Unknown_Unicode_property_value_1526": "알 수 없는 유니코드 속성 값입니다.", + "Unknown_build_option_0_5072": "알 수 없는 빌드 옵션 '{0}'입니다.", + "Unknown_build_option_0_Did_you_mean_1_5077": "알 수 없는 빌드 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", + "Unknown_compiler_option_0_5023": "알 수 없는 컴파일러 옵션 '{0}'입니다.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "알 수 없는 컴파일러 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "알 수 없는 키워드 또는 식별자입니다. '{0}'을(를) 의미했나요?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "알 수 없는 옵션 'excludes'입니다. 'exclude'를 사용하시겠습니까?", + "Unknown_regular_expression_flag_1499": "알 수 없는 정규식 플래그입니다.", + "Unknown_type_acquisition_option_0_17010": "알 수 없는 형식 인식 옵션 '{0}'입니다.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "알 수 없는 형식 인식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", + "Unknown_watch_option_0_5078": "알 수 없는 조사식 옵션 '{0}'입니다.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "알 수 없는 조사식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?", + "Unreachable_code_detected_7027": "접근할 수 없는 코드가 있습니다.", + "Unterminated_Unicode_escape_sequence_1199": "종결되지 않은 유니코드 이스케이프 시퀀스입니다.", + "Unterminated_quoted_string_in_response_file_0_6045": "응답 파일 '{0}'의 종결되지 않은 따옴표 붙은 문자열입니다.", + "Unterminated_regular_expression_literal_1161": "종결되지 않은 정규식 리터럴입니다.", + "Unterminated_string_literal_1002": "종결되지 않은 문자열 리터럴입니다.", + "Unterminated_template_literal_1160": "종결되지 않은 템플릿 리터럴입니다.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "형식화되지 않은 함수 호출에는 형식 인수를 사용할 수 없습니다.", + "Unused_label_7028": "사용되지 않는 레이블입니다.", + "Unused_ts_expect_error_directive_2578": "사용되지 않는 '@ts-expect-error' 지시문입니다.", + "Update_import_from_0_90058": "\"{0}\"에서 가져오기 업데이트", + "Update_modifiers_of_0_90061": "'{0}'의 한정자 업데이트", + "Updating_output_timestamps_of_project_0_6359": "'{0}' 프로젝트의 출력 타임스탬프를 업데이트하는 중...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' 프로젝트의 변경되지 않은 출력 타임스탬프를 업데이트하는 중...", + "Use_0_95174": "`{0}`을(를) 사용합니다.", + "Use_0_instead_5106": "대신 '{0}'을(를) 사용하세요.", + "Use_Number_isNaN_in_all_conditions_95175": "모든 조건에서 'Number.isNaN'을 사용합니다.", + "Use_element_access_for_0_95145": "'{0}'에 요소 액세스 사용", + "Use_element_access_for_all_undeclared_properties_95146": "선언되지 않은 모든 속성에 요소 액세스를 사용합니다.", + "Use_import_type_95180": "'import type' 사용", + "Use_synthetic_default_member_95016": "가상 '기본' 멤버를 사용합니다.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "패키지 가져오기를 확인할 때 package.json 'exports' 필드를 사용합니다.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "가져오기를 확인할 때 package.json 'imports' 필드를 사용합니다.", + "Use_type_0_95181": "'형식 {0}' 사용", + "Using_0_subpath_1_with_target_2_6404": "'{0}' 하위 경로 '{1}'과(와) 대상 '{2}'을(를) 사용하는 중입니다.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX 조각을 사용하려면 조각 팩터리 '{0}'이(가) 범위에 있어야 하지만 찾을 수 없습니다.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "ECMAScript 5 이상에서만 'for...of' 문에서 문자열을 사용할 수 있습니다.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build를 사용하면 -b가 tsc로 하여금 컴파일러보다 빌드 오케스트레이터처럼 작동하도록 합니다. 이 항목은 {0}에서 더 자세히 알아볼 수 있는 복합 프로젝트를 구축하는 데 사용됩니다.", + "Using_compiler_options_of_project_reference_redirect_0_6215": "프로젝트 참조 리디렉션 '{0}'의 컴파일러 옵션을 사용 중입니다.", + "VERSION_6036": "버전", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' 형식의 값에 '{1}' 형식과 공통된 속성이 없습니다. 속성을 호출하려고 했습니까?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "'{0}' 형식의 값은 호출할 수 없습니다. 'new'를 포함하려고 했습니까?", + "Variable_0_implicitly_has_an_1_type_7005": "'{0}' 변수에는 암시적으로 '{1}' 형식이 포함됩니다.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "'{0}' 변수는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "'{0}' 변수는 몇몇 위치에서 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "'{0}' 변수는 형식을 확인할 수 없는 경우 일부 위치에서 암시적으로 '{1}' 형식입니다.", + "Variable_0_is_used_before_being_assigned_2454": "'{0}' 변수가 할당되기 전에 사용되었습니다.", + "Variable_declaration_expected_1134": "변수 선언이 필요합니다.", + "Variable_declaration_list_cannot_be_empty_1123": "변수 선언 목록은 비워 둘 수 없습니다.", + "Variable_declaration_not_allowed_at_this_location_1440": "이 위치에서는 변수 선언을 사용할 수 없습니다.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "변수에는 --isolatedDeclarations가 있는 명시적 형식 주석이 있어야 합니다.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "선언이 여러 개 있는 변수는 인라인 처리할 수 없습니다.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "소스의 {0} 위치에 있는 가변 인자 요소가 대상의 {1} 위치에 있는 요소와 일치하지 않습니다.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "차이 주석은 개체, 함수, 생성자 및 매핑된 형식의 형식 별칭에서만 지원됩니다.", + "Version_0_6029": "버전 {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "마이그레이션 정보를 보려면 https://aka.ms/ts6을 방문하세요.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "이 파일에 대해 자세히 알아보려면 https://aka.ms/tsconfig을 방문하세요.", + "WATCH_OPTIONS_6918": "조사식 옵션", + "Watch_and_Build_Modes_6250": "시청 및 빌드 모드", + "Watch_input_files_6005": "조사식 입력 파일입니다.", + "Watch_option_0_requires_a_value_of_type_1_5080": "조사식 옵션 '{0}'에 {1} 형식의 값이 필요합니다.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "여기에서 전체 매개 변수에 대한 형식을 추가하여 '{0}'에 대한 형식만 작성할 수 있습니다.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "함수를 할당할 때 매개 변수와 반환 값이 하위 형식과 호환되는지 확인합니다.", + "When_type_checking_take_into_account_null_and_undefined_6699": "유형 검사 시 'null' 및 'undefined'를 고려하세요.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "화면을 지우지 않고, 감시 모드의 오래된 콘솔 출력을 유지할지 여부입니다.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "식 컨테이너에서 모든 잘못된 문자 래핑", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "잘못된 데코레이터 식을 모두 괄호로 래핑합니다.", + "Wrap_all_object_literal_with_parentheses_95116": "괄호를 사용하여 모든 개체 리터럴 래핑", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX 조각에서 부모가 지정되지 않은 모든 JSX 래핑", + "Wrap_in_JSX_fragment_95120": "JSX 조각에서 래핑", + "Wrap_in_parentheses_95194": "괄호로 래핑", + "Wrap_invalid_character_in_an_expression_container_95108": "식 컨테이너에서 잘못된 문자 래핑", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "괄호를 사용하여 개체 리터럴이어야 하는 다음 본문 래핑", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "{0}에서 모든 컴파일러 옵션에 대해 알아볼 수 있습니다.", + "You_cannot_rename_a_module_via_a_global_import_8031": "전역 가져오기를 통해 모듈 이름을 바꿀 수 없습니다.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "'node_modules' 폴더에 정의된 요소의 이름은 변경할 수 없습니다.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "다른 'node_modules' 폴더에 정의된 요소의 이름은 변경할 수 없습니다.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "표준 TypeScript 라이브러리에 정의된 요소의 이름을 바꿀 수 없습니다.", + "You_cannot_rename_this_element_8000": "이 요소의 이름을 바꿀 수 없습니다.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}'이(가) 여기에서 decorator로 사용할 인수를 너무 적게 허용합니다. 먼저 이를 호출하고 '@{0}()'을(를) 작성하시겠습니까?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 및 '{1}' 인덱스 시그니처가 호환되지 않습니다.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 및 '{1}' 작업은 괄호 없이 혼합해서 사용할 수 없습니다.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}'이(가) 두 번 지정되었습니다. 이름이 '{0}'인 특성을 덮어씁니다.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "형식의 끝에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "형식의 시작 부분에 있는 '{0}'은(는) 올바른 TypeScript 구문이 아닙니다. '{1}'을(를) 쓰려고 하셨나요?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}'은(는) 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}'은(는) 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}'은(는) 'require' 호출을 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}'은(는) 'require' 호출을 사용하거나 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}'은(는) 'import {1} = require({2})' 또는 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}'은(는) 'import {1} = require({2})'를 사용하거나 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}'은(는) JSX 구성 요소로 사용할 수 없습니다.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}'은(는) 'export type'을 사용하여 내보냈으므로 값으로 사용할 수 없습니다.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}'은(는) 'import type'을 사용하여 가져왔으므로 값으로 사용할 수 없습니다.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 구성 요소는 텍스트를 자식 요소로 수락하지 않습니다. JSX의 텍스트는 'string' 형식이지만, '{1}'의 필요한 형식은 '{2}'입니다.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}'은(는) '{1}'과(와) 관련되지 않은 임의의 형식으로 인스턴스화할 수 있습니다.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' 선언은 블록 내에서만 선언할 수 있습니다.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 선언은 TypeScript 파일에서만 사용할 수 있습니다.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 선언에는 바인딩 패턴이 없을 수 있습니다.", + "_0_declarations_must_be_initialized_1155": "'{0}' 선언을 초기화해야 합니다.", + "_0_expected_1005": "'{0}'이(가) 필요합니다.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}'에는 문자열 형식이 있지만 'isolatedModules'를 사용하도록 설정한 경우 구문으로 인식할 수 있는 문자열 구문이 있어야 합니다.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}'에 내보낸 멤버 '{1}'이(가) 없습니다. '{2}'이(가) 아닌지 확인하세요.", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}'은(는) 암시적으로 '{1}' 반환 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 '{0}'에는 암시적으로 'any' 반환 형식이 포함됩니다.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}'은(는) 형식 주석이 없고 자체 이니셜라이저에서 직간접적으로 참조되므로 암시적으로 'any' 형식입니다.", + "_0_index_signatures_are_incompatible_2634": "'{0}' 인덱스 시그니처가 호환되지 않습니다.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 인덱스 유형 '{1}'을(를) '{2}' 인텍스 유형 '{3}'에 할당할 수 없습니다.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0}'은(는) 기본 개체이지만 '{1}'은(는) 래퍼 개체입니다. 가능한 경우 '{0}'을(를) 사용하세요.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}'은(는) 유형이며 JavaScript 파일로 가져올 수 없습니다. JSDoc 유형 주석에서 '{1}'을(를) 사용하세요.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}'은(는) 형식이며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}'은(는) '{1}'의 사용되지 않는 이름 변경입니다. 형식 주석으로 사용하려고 했습니까?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}'은(는) '{1}' 형식의 제약 조건에 할당할 수 있지만, '{1}'은(는) '{2}' 제약 조건의 다른 하위 형식으로 인스턴스화할 수 있습니다.", + "_0_is_automatically_exported_here_18044": "'{0}'은(는) 여기에서 자동으로 내보내집니다.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}'이(가) 선언은 되었지만 해당 값이 읽히지는 않았습니다.", + "_0_is_declared_but_never_used_6196": "'{0}'이(가) 선언되었지만 사용되지 않았습니다.", + "_0_is_declared_here_2728": "여기서는 '{0}'이(가) 선언됩니다.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}'은(는) '{1}' 클래스의 속성으로 정의되지만, '{2}'에서 접근자로 재정의됩니다.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}'은(는) '{1}' 클래스의 접근자로 정의되지만, '{2}'에서 인스턴스 속성으로 재정의됩니다.", + "_0_is_deprecated_6385": "'{0}'은(는) 사용되지 않습니다.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}'은(는) '{1}' 키워드에 대한 올바른 메타 속성이 아닙니다. '{2}'을(를) 사용하시겠습니까?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}'은(는) 매개 변수 이름으로 사용할 수 없습니다.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}'은(는) 변수 선언 이름으로 사용할 수 없습니다.", + "_0_is_of_type_unknown_18046": "'{0}'은(는) 'unknown' 형식입니다.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}'은(는) 'null'일 수 있습니다.", + "_0_is_possibly_null_or_undefined_18049": "'{0}'은(는) 'null' 또는 'undefined'일 수 있습니다.", + "_0_is_possibly_undefined_18048": "'{0}'은(는) 'undefined'일 수 있습니다.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}'은(는) 자체 기본 식에서 직간접적으로 참조됩니다.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}'은(는) 자체 형식 주석에서 직간접적으로 참조됩니다.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}'이(가) 두 번 이상 지정되어 이 사용량을 덮어씁니다.", + "_0_list_cannot_be_empty_1097": "'{0}' 목록은 비워 둘 수 없습니다.", + "_0_modifier_already_seen_1030": "'{0}' 한정자가 이미 있습니다.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 한정자는 클래스, 인터페이스 또는 형식 별칭의 형식 매개 변수에만 나타날 수 있습니다.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 한정자는 함수, 메서드 또는 클래스의 형식 매개 변수에만 나타날 수 있습니다.", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' 한정자는 생성자 선언에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' 한정자는 모듈 또는 네임스페이스 요소에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "{0}' 한정자는 매개 변수에 표시될 수 없습니다.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' 한정자는 형식 멤버에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' 한정자는 형식 매개 변수에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 한정자는 'using' 선언에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 한정자는 'await using' 선언에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' 한정자는 인덱스 시니그처에 나타날 수 없습니다.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "이 종류의 클래스 요소에는 '{0}' 한정자를 표시할 수 없습니다.", + "_0_modifier_cannot_be_used_here_1042": "'{0}' 한정자는 여기에 사용할 수 없습니다.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' 한정자는 앰비언트 컨텍스트에서 사용할 수 없습니다.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 한정자는 '{1}' 한정자와 함께 사용할 수 없습니다.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' 한정자는 '{1}' 한정자 앞에 와야 합니다.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 뒤에는 중괄호로 묶인 유니코드 속성 값 식이 와야 합니다.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}'에는 명시적 형식 주석이 필요합니다.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}'은(는) 형식만 참조하지만, 여기서는 네임스페이스로 사용되고 있습니다.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}'은(는) 형식만 참조하는데 여기에서 값으로 사용되고 있습니다. '{0}에서 {1}'을(를) 사용하려고 하셨습니까?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 es2015 이상으로 변경해 보세요.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}'은(는) UMD 전역을 참조하지만 현재 파일은 모듈입니다. 대신 가져오기를 추가해 보세요.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}'은(는) 값을 참조하지만, 여기서는 형식으로 사용되고 있습니다. 'typeof {0}'을(를) 사용하시겠습니까?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}'은(는) 형식으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}'은(는) 형식 전용 선언으로 확인되며 'verbatimModuleSyntax'를 사용하도록 설정한 경우 형식 전용 가져오기를 사용하여 가져와야 합니다.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. '{0}'을(를) 가져오는 'import type'을 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}'은(는) 형식 전용 선언으로 확인되며 '{1}'이(가) 사용하도록 설정된 경우 다시 내보내기 전에 이 파일에서 형식 전용으로 표시되어야 합니다. 'export type {기본값 {0}}'을(를) 사용해 보세요.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}'은(는) 형식 전용 선언으로 확인되며, '{1}'을(를) 사용하도록 설정한 경우 형식 전용 다시 내보내기를 사용하여 다시 내보내야 합니다.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}'은(는) 구성 json 파일의 'compilerOptions' 개체 내에 설정해야 합니다.", + "_0_tag_already_specified_1223": "'{0}' 태그가 이미 지정되었습니다.", + "_0_was_also_declared_here_6203": "여기서도 '{0}'이(가) 선언되었습니다.", + "_0_was_exported_here_1377": "여기서는 '{0}'을(를) 내보냈습니다.", + "_0_was_imported_here_1376": "여기서는 '{0}'을(를) 가져왔습니다.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "반환 형식 주석이 없는 '{0}'에는 암시적으로 '{1}' 반환 형식이 포함됩니다.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "반환 형식 주석이 없는 '{0}'에는 암시적으로 '{1}' yield 형식이 포함됩니다.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 한정자는 클래스, 메서드 또는 속성 선언에만 나타날 수 있습니다.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 한정자는 속성 선언에만 나타날 수 있습니다.", + "and_here_6204": "및 여기.", + "and_npm_install_D_types_Slashnode_6290": "and npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments'는 속성 초기화기나 클래스 정적 초기화 블록에서 참조할 수 없습니다.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 가져오기, 내보내기, import.meta, jsx(jsx: react-jsx 포함) 또는 esm 형식(모듈: node16+ 포함)이 있는 파일을 모듈로 처리합니다.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 식은 클래스 정적 블록 내에서 사용할 수 없습니다.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' 식은 파일이 모듈일 경우 해당 파일의 최상위 수준에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 식은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await'는 이 식의 형식에 영향을 주지 않습니다.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "앰비언트 컨텍스트에서는 'await using' 선언을 사용할 수 없습니다.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' 선언은 블록 내에 포함되지 않는 한 'case' 또는 'default' 조항에서는 허용되지 않습니다.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' 문은 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 문은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 옵션이 '{0}'(으)로 설정되어 있습니다. 상대적이지 않은 모듈 이름 '{1}'을(를) 확인하려면 이 값을 사용합니다.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 뒤에는 ASCII 문자가 와야 합니다.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!'는 파일의 시작 부분에서만 사용할 수 있습니다.", + "case_or_default_expected_1130": "'case' 또는 'default'가 필요합니다.", + "catch_or_finally_expected_1472": "'catch' 또는 'finally'가 필요합니다.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 열거형 멤버 이니셜라이저가 무한 값에 대해 평가되었습니다.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 열거형 멤버 이니셜라이저가 허용되지 않은 'NaN' 값에 대해 평가되었습니다.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 열거형 멤버 이니셜라이저는 상수 식이어야 합니다.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 열거형은 속성이나 인덱스 액세스 식, 또는 내보내기 할당이나 가져오기 선언의 오른쪽, 또는 형식 쿼리에서만 사용할 수 있습니다.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor'는 매개 변수 속성 이름으로 사용할 수 없습니다.", + "constructor_is_a_reserved_word_18012": "'#constructor'는 예약어입니다.", + "default_Colon_6903": "기본값:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "strict 모드에서는 식별자에 대해 'delete'를 호출할 수 없습니다.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *'는 기본값을 다시 내보내지 않습니다.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export ='는 TypeScript 파일에서만 사용할 수 있습니다.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "앰비언트 모듈 및 모듈 확대는 항상 표시되므로 'export' 한정자를 적용할 수 없습니다.", + "extends_clause_already_seen_1172": "'extends' 절이 이미 있습니다.", + "extends_clause_must_precede_implements_clause_1173": "'extends' 절은 'implements' 절 앞에 와야 합니다.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "내보낸 클래스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "내보낸 클래스의 'extends' 절이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "내보낸 인터페이스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.", + "false_unless_checkJs_is_set_6932": "'checkJs'가 설정되지 않은 한 'false'입니다.", + "false_unless_composite_is_set_6906": "'composite'가 설정되지 않은 한 'false'입니다.", + "file_6025": "파일", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' 루프는 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' 루프는 비동기 함수 내부 및 모듈의 최상위에서만 사용할 수 있습니다.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 루프는 클래스 정적 블록 내에서 사용할 수 없습니다.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 및 'set' 접근자는 'this' 매개 변수를 선언할 수 없습니다.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files'를 지정하면 '[]'이고, 그렇지 않으면 '[\"**/*\"]'", + "implements_clause_already_seen_1175": "'implements' 절이 이미 있습니다.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 절은 TypeScript 파일에서만 사용할 수 있습니다.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 선언은 조건 형식의 'extends' 절에서만 사용할 수 있습니다.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 뒤에는 꺾쇠 괄호로 묶인 캡처 그룹 이름이 와야 합니다.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let'은 'let' 또는 'const' 선언에서 이름으로 사용할 수 없습니다.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "대상에 구문 시그니처가 없는 'new' 식에는 암시적으로 'any' 형식이 포함됩니다.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\", \"bower_components\", \"jspm_packages\"]', 지정한 경우 'outDir' 값이 추가됩니다.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module`이 `nodenext`이면 `nodenext`, `module`이 `node16` 또는 `node18`이면 `node16`, 그 외에는 `bundler`입니다.", + "one_of_Colon_6900": "다음 중 하나:", + "one_or_more_Colon_6901": "하나 이상:", + "options_6024": "옵션", + "or_JSX_element_expected_1145": "'{' 또는 JSX 요소가 필요합니다.", + "or_expected_1144": "'{' 또는 ';'이(가) 필요합니다.", + "package_json_does_not_have_a_0_field_6100": "'package.json'에는 '{0}' 필드가 없습니다.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json'에 '{0}' 버전과 일치하는 'typesVersions' 항목이 없습니다.", + "package_json_had_a_falsy_0_field_6220": "'package.json'에 false로 평가되는 '{0}' 필드가 있습니다.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json'에 '{2}'을(를) 참조하는 '{0}' 필드 '{1}'이(가) 있습니다.", + "package_json_has_a_peerDependencies_field_6281": "'package.json'에 'peerDependencies' 필드가 있습니다.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json'에 유효한 semver 범위가 아닌 'typesVersions' 항목 '{0}'이(가) 있습니다.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "모듈 이름 '{2}'과(와) 일치하는 패턴을 검색하는 컴파일러 버전 '{1}'과(와) 일치하는 'typesVersions' 항목 '{0}'이(가) 'package.json'에 있습니다.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json'에 버전별 경로 매핑이 포함된 'typesVersions' 필드가 있습니다.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json 범위 '{0}'은(는) 명시적으로 '{1}' 지정자를 null에 매핑합니다.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 범위 '{0}'에 '{1}' 지정자의 대상 유형이 잘못되었습니다.", + "package_json_scope_0_has_no_imports_defined_6273": "package.json 범위 '{0}'에 정의된 가져오기가 없습니다.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 옵션이 지정되었습니다. 모듈 이름 '{0}'과(와) 일치하는 패턴을 찾는 중입니다.", + "q_is_only_available_inside_character_class_1511": "'\\q'는 문자 클래스 내에서만 사용할 수 있습니다.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 뒤에는 중괄호로 묶인 문자열 대체가 와야 합니다.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 한정자는 속성 선언 또는 인덱스 시그니처에만 나타날 수 있습니다.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 형식 한정자는 배열 및 튜플 리터럴 형식에서만 사용할 수 있습니다.", + "require_call_may_be_converted_to_an_import_80005": "'require' 호출이 가져오기로 변환될 수 있습니다.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "'resolution-mode'는 유형 전용 가져오기에만 설정할 수 있습니다.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode'는 유형 가져오기 어설션에 유효한 유일한 키입니다.", + "resolution_mode_should_be_either_require_or_import_1453": "'해상도 모드'는 '요구' 또는 '가져오기'여야 합니다.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 옵션이 설정되어 있습니다. 상대 모듈 이름 '{0}'을(를) 확인하려면 이 옵션을 사용합니다.", + "super_can_only_be_referenced_in_a_derived_class_2335": "파생 클래스에서만 'super'를 참조할 수 있습니다.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "파생 클래스 또는 개체 리터럴 식의 멤버에서만 'super'를 참조할 수 있습니다.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super'는 계산된 속성 이름에서 참조할 수 없습니다.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "super'는 생성자 인수에서 참조할 수 없습니다.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "옵션 'target'이 'ES2015' 이상인 경우 개체 리터럴 식의 멤버에서만 'super'를 사용할 수 있습니다.", + "super_may_not_use_type_arguments_2754": "'super'는 형식 인수를 사용할 수 없습니다.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "파생 클래스의 생성자에서 'super'의 속성에 액세스하기 전에 'super'를 호출해야 합니다.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "파생 클래스의 생성자에서 'this'에 액세스하기 전에 'super'를 호출해야 합니다.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' 다음에는 인수 목록 또는 멤버 액세스가 와야 합니다.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' 속성 액세스는 생성자, 멤버 함수 또는 파생 클래스의 멤버 접근자에서만 허용됩니다.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this'는 계산된 속성 이름에서 참조할 수 없습니다.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this'는 모듈 또는 네임스페이스 본문에서 참조될 수 없습니다.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "정적 속성 이니셜라이저에서 'this'를 참조할 수 없습니다.", + "this_cannot_be_referenced_in_current_location_2332": "현재 위치에서 'this'를 참조할 수 없습니다.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this'에는 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.", + "true_for_ES2022_and_above_including_ESNext_6930": "ESNext를 포함하여 ES2022 이상의 경우 'true'입니다.", + "true_if_composite_false_otherwise_6909": "'composite'이면 'true'이고, 그렇지 않으면 'false'입니다.", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'이 'node16', 'nodenext' 또는 'bundler'인 경우 'true'입니다. 그렇지 않으면 'false'입니다.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 컴파일러", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json이 있지만 명령줄에 파일을 지정한 경우 로드되지 않습니다. '--ignoreConfig'를 사용하여 이 오류를 건너뜁니다.", + "type_Colon_6902": "형식:", + "unique_symbol_types_are_not_allowed_here_1335": "여기에서 'unique symbol' 형식은 허용되지 않습니다.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 형식은 변수 문의 변수에만 허용됩니다.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 형식은 바인딩 이름과 함께 변수 선언에 사용할 수 없습니다.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' 지시문은 단순하지 않은 매개 변수 목록에서 사용할 수 없습니다.", + "use_strict_directive_used_here_1349": "여기서는 'use strict' 지시문이 사용됩니다.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "앰비언트 컨텍스트에서는 'using' 선언을 사용할 수 없습니다.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' 선언은 블록 내에 포함되지 않는 한 'case' 또는 'default' 조항에서는 허용되지 않습니다.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 문은 비동기 함수 블록에서 사용할 수 없습니다.", + "with_statements_are_not_allowed_in_strict_mode_1101": "'with' 문은 strict 모드에서 사용할 수 없습니다.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 식은 포함하는 생성기에 반환 형식 주석이 없으므로 암시적으로 'any' 형식으로 생성됩니다.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다." +} diff --git a/tsc/internal/diagnostics/loc/pl-PL.generated.json b/tsc/internal/diagnostics/loc/pl-PL.generated.json index 7eab6353c1c79..79e80e146143c 100644 --- a/tsc/internal/diagnostics/loc/pl-PL.generated.json +++ b/tsc/internal/diagnostics/loc/pl-PL.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "WSZYSTKIE OPCJE KOMPILATORA", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modyfikatora „{0}” nie można używać z deklaracją importu.", - "A_0_parameter_must_be_the_first_parameter_2680": "Parametr „{0}” musi być pierwszym parametrem.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Tag „@template” obiektu JSDoc nie może następować po tagu „@typedef”, „@callback” ani „@overload”", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentarz JSDoc „@typedef” nie może zawierać wielu tagów „@type”.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literał „bigint” nie może być używany jako nazwa właściwości.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Literał typu bigint nie może używać notacji wykładniczej.", - "A_bigint_literal_must_be_an_integer_1353": "Literał typu bigint musi być liczbą całkowitą.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr wzorca wiązania nie może być opcjonalny w sygnaturze implementacji.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Instrukcji „break” można użyć tylko w ramach otaczającej instrukcji iteracji lub switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Instrukcja „break” może wykonać skok tylko do etykiety otaczającej instrukcji.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Klasa znaków nie może zawierać zastrzeżonej podwójnej interpunkcji. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Zakres klasy znaków nie może być ograniczony przez inną klasę znaków.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Klasa może zawierać implementację tylko identyfikatora/nazwy kwalifikowanej z opcjonalnymi argumentami typu.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Klasa może implementować tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Klasa nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Klasy mogą rozszerzać tylko wartości konstruowalne.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Klasa nie może zaimplementować typu pierwotnego, takiego jak „{0}”. Może implementować tylko inne nazwane typy obiektów.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklaracja klasy bez modyfikatora „default” musi mieć nazwę.", - "A_class_member_cannot_have_the_0_keyword_1248": "Składowa klasy nie może zawierać słowa kluczowego „{0}”.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Wyrażenie przecinkowe nie jest dozwolone w obliczonej nazwie właściwości.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Obliczona nazwa właściwości nie może odwoływać się do parametru typu z zawierającego go typu.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Nazwa właściwości obliczanej w deklaracji właściwości klasy musi mieć typ prostego literału lub typ „unikatowy symbol”.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Nazwa właściwości obliczanej w przeciążeniu metody musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Nazwa właściwości obliczanej w typie literału musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Nazwa właściwości obliczanej w otaczającym kontekście musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Nazwa właściwości obliczanej w interfejsie musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Obliczona nazwa właściwości musi być typu „string”, „number”, „symbol” lub „any”.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Asercja „const” może być stosowana tylko do odwołań do elementów członkowskich wyliczenia lub ciągu, liczby, wartości logicznej, tablicy lub literałów obiektów.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Dostęp do składowej wyliczenia ze specyfikatorem const można uzyskać tylko za pomocą literału ciągu.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Inicjator „const” w otaczającym kontekście musi być ciągiem, literałem liczbowym albo odwołaniem do literału wyliczenia.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Konstruktor nie może zawierać wywołania „super”, gdy jego klasa rozszerza wartość „null”.", - "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nie może zawierać parametru „this”.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Instrukcji „continue” można użyć tylko w otaczającej instrukcji iteracji.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Instrukcja „continue” może wykonać skok tylko do etykiety otaczającej instrukcji iteracji.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nie można zaimportować pliku deklaracji bez elementu „import type”. Czy zamiast tego chcesz zaimportować plik implementacji „{0}”?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Nie można użyć modyfikatora „declare” w otaczającym kontekście.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorator może dekorować jedynie implementację metody, a nie przeciążenie.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzula „default” nie może występować więcej niż raz w instrukcji „switch”.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Eksport domyślny może być używany tylko w module w stylu języka ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Eksport domyślny musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Asercja określonego przypisania „!” nie jest dozwolona w tym kontekście.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Deklaracja usuwająca strukturę musi mieć inicjator.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Wywołanie dynamicznego importowania w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", - "A_file_cannot_have_a_reference_to_itself_1006": "Plik nie może przywoływać samego siebie.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkcja zwracająca wartość „never” nie może mieć osiągalnego punktu końcowego.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkcja wywoływana ze słowem kluczowym „new” nie może mieć typu „this” o wartości „void”.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkcja, której zadeklarowany typ nie ma wartości „undefined”, „void” ani „any”, musi zwracać wartości.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Generator nie może mieć adnotacji typu „void”.", - "A_get_accessor_cannot_have_parameters_1054": "Metoda dostępu „get” nie może mieć parametrów.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Metoda dostępu get musi być co najmniej tak samo dostępna, jak metoda ustawiająca", - "A_get_accessor_must_return_a_value_2378": "Metoda dostępu „get” musi zwracać wartość.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element krotki z etykietą jest deklarowany jako opcjonalny za pomocą znaku zapytania po nazwie i przed dwukropkiem, a nie po typie.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Oznaczony etykietą element krotki jest deklarowany jako reszta z \"...\" przed nazwą, a nie przed typem.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Zmapowany typ nie może deklarować właściwości ani metod.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicjator składowej w deklaracji wyliczenia nie może przywoływać składowych zadeklarowanych po nim, w tym składowych zdefiniowanych w innych wyliczeniach.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Klasa mixin musi mieć konstruktor z pojedynczym parametrem rest o typie „any[]”.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Klasa domieszki, która rozciąga się od zmiennej typu zawierającej sygnaturę konstrukcji abstrakcyjnej, musi być również zadeklarowana jako „abstract”.", - "A_module_cannot_have_multiple_default_exports_2528": "Moduł nie może mieć wielu eksportów domyślnych.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklaracja przestrzeni nazw nie może znajdować się w innym pliku niż klasa lub funkcja, z którą ją scalono.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklaracja przestrzeni nazw nie może występować przed klasą lub funkcją, z którą ją scalono.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklaracja przestrzeni nazw jest dozwolona tylko na najwyższym poziomie przestrzeni nazw lub modułu.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklaracja „namespace” nie powinna być deklarowana przy użyciu słowa kluczowego „module”. Zamiast tego należy użyć słowa kluczowego „namespace”.", - "A_non_dry_build_would_build_project_0_6357": "Kompilacja inna niż -dry spowodowałaby skompilowanie projektu „{0}”", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Kompilacja inna niż -dry spowodowałaby usunięcie następujących plików: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Kompilacja bez opcji dry spowoduje zaktualizowanie sygnatur czasowych dla danych wyjściowych projektu „{0}”", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicjator parametru jest dozwolony tylko w implementacji funkcji lub konstruktora.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Właściwości parametru nie można zadeklarować za pomocą parametru rest.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Właściwość parametru jest dozwolona tylko w implementacji konstruktora.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Właściwości parametru nie można zadeklarować za pomocą wzorca wiązania.", - "A_promise_must_have_a_then_method_1059": "Obietnica musi mieć metodę „then”.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Właściwość klasy, której typem jest „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Właściwość klasy, której typem jest literał lub „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", - "A_required_element_cannot_follow_an_optional_element_1257": "Wymagany element nie może występować po elemencie opcjonalnym.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Wymagany parametr nie może występować po opcjonalnym parametrze.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nie może zawierać wzorca wiązania.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nie może następować po innym elemencie rest.", - "A_rest_element_cannot_have_a_property_name_2566": "Element rest nie może mieć nazwy właściwości.", - "A_rest_element_cannot_have_an_initializer_1186": "Element rest nie może mieć inicjatora.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musi być ostatni we wzorcu usuwającym strukturę.", - "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musi być typem tablicowym.", - "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nie może być opcjonalny.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nie może mieć inicjatora.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Parametr rest musi występować na końcu listy parametrów.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musi być typu tablicowego.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest ani wzorzec wiązania nie może mieć końcowego przecinka.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Instrukcji „return” można użyć tylko w treści funkcji.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Instrukcji „return” nie można użyć wewnątrz bloku statycznego klasy.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Seria wpisów, które ponownie mapują importowane dane na lokalizacje wyszukiwania względne wobec adresu „baseUrl”.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Metoda dostępu „set” nie może mieć adnotacji zwracanego typu.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Metoda dostępu „set” nie może mieć parametru opcjonalnego.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Metoda dostępu „set” nie może mieć parametru rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Metoda dostępu „set” musi mieć dokładnie jeden parametr.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr metody dostępu „set” nie może mieć inicjatora.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument nadlewki musi mieć typ krotki lub być przekazywany do parametru Rest.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Wywołanie „super” musi być instrukcją na poziomie głównym w konstruktorze klasy pochodnej, która zawiera zainicjowane właściwości, właściwości parametrów lub identyfikatory prywatne.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Wywołanie „super” musi być pierwszą instrukcją w konstruktorze, aby odwoływać się do „super” lub „this”, gdy klasa pochodna zawiera zainicjalizowane właściwości, właściwości parametrów lub prywatne identyfikatory.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrona typu oparta na elemencie „this” nie jest zgodna z ochroną typu opartą na parametrze.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ „this” jest dostępny tylko w niestatycznej składowej klasy lub interfejsu.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modyfikatora „export” najwyższego poziomu nie można używać w deklaracjach wartości w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Plik „tsconfig.json” jest już zdefiniowany w: „{0}”.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Składowa krotki nie może być jednocześnie opcjonalna i typu rest.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Nie można indeksować typu krotki z wartością ujemną.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Wyrażenie asercji typu jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Właściwość literału typu nie może mieć inicjatora.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Import dotyczący tylko typu może określać import domyślny lub powiązania nazwane, ale nie jedno i drugie jednocześnie.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Predykat typów nie może zawierać odwołania do parametru rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Predykat typów nie może zawierać odwołania do elementu „{0}” we wzorcu wiązania.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Predykat typów jest dozwolony tylko w położeniu zwracanego typu dla funkcji i metod.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Musi być możliwe przypisanie typu predykatu typów do typu jego parametru.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Typ przywoływany w sygnaturze dekorowanej musi zostać zaimportowany za pomocą elementu „import type” lub importu przestrzeni nazw, gdy są włączone elementy „isolatedModules” i „emitDecoratorMetadata”.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Zmienna, której typem „unique symbol”, musi być określona jako „const”.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Wyrażenie „yield” jest dozwolone tylko w treści generatora.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Nie można uzyskać dostępu do metody abstrakcyjnej „{0}” w klasie „{1}” za pomocą wyrażenia super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Metody abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Właściwości abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Właściwość abstrakcyjna „{0}” w klasie „{1}” jest niedostępna w konstruktorze.", - "Accessibility_modifier_already_seen_1028": "Napotkano już modyfikator dostępności.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Metody dostępu są dostępne tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Obie metody dostępu muszą być abstrakcyjne lub nieabstrakcyjne.", - "Add_0_to_unresolved_variable_90008": "Dodaj „{0}.” do nierozpoznanej zmiennej", - "Add_a_return_statement_95111": "Dodaj instrukcję return", - "Add_a_return_type_to_the_function_declaration_9031": "Dodaj zwracany typ do deklaracji funkcji.", - "Add_a_return_type_to_the_function_expression_9030": "Dodaj zwracany typ do wyrażenia funkcji.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Dodaj zwracany typ do deklaracji metody dostępu get.", - "Add_a_return_type_to_the_method_9034": "Dodawanie typu zwracanego do metody", - "Add_a_type_annotation_to_the_parameter_0_9028": "Dodaj adnotację typu do parametru {0}.", - "Add_a_type_annotation_to_the_property_0_9029": "Dodaj adnotację typu do właściwości {0}.", - "Add_a_type_annotation_to_the_variable_0_9027": "Dodaj adnotację typu do zmiennej {0}.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Dodaj typ do parametru deklaracji metody dostępu zestawu.", - "Add_all_missing_async_modifiers_95041": "Dodaj wszystkie brakujące modyfikatory „async”", - "Add_all_missing_attributes_95168": "Dodawanie wszystkich brakujących atrybutów", - "Add_all_missing_call_parentheses_95068": "Dodaj wszystkie brakujące nawiasy wywołań", - "Add_all_missing_function_declarations_95157": "Dodaj wszystkie brakujące deklaracje funkcji", - "Add_all_missing_imports_95064": "Dodaj wszystkie brakujące importy", - "Add_all_missing_members_95022": "Dodaj wszystkie brakujące elementy członkowskie", - "Add_all_missing_override_modifiers_95162": "Dodaj wszystkie brakujące modyfikatory „override”", - "Add_all_missing_parameters_95190": "Dodaj wszystkie brakujące parametry", - "Add_all_missing_properties_95166": "Dodaj wszystkie brakujące właściwości", - "Add_all_missing_return_statement_95114": "Dodaj wszystkie brakujące instrukcje return", - "Add_all_missing_super_calls_95039": "Dodaj wszystkie brakujące wywołania typu super", - "Add_all_missing_type_annotations_90067": "Dodaj wszystkie brakujące adnotacje typu", - "Add_all_optional_parameters_95193": "Dodaj wszystkie parametry opcjonalne", - "Add_annotation_of_type_0_90062": "Dodaj adnotację typu „{0}”", - "Add_async_modifier_to_containing_function_90029": "Dodaj modyfikator asynchroniczny do funkcji zawierającej", - "Add_await_95083": "Dodaj operator „await”", - "Add_await_to_initializer_for_0_95084": "Dodaj operator „await” do inicjatora dla elementu „{0}”", - "Add_await_to_initializers_95089": "Dodaj operator „await” do inicjatorów", - "Add_braces_to_arrow_function_95059": "Dodaj nawiasy klamrowe do funkcji strzałki", - "Add_const_to_all_unresolved_variables_95082": "Dodaj element „const” do wszystkich nierozpoznanych zmiennych", - "Add_const_to_unresolved_variable_95081": "Dodaj element „const” do nierozpoznanej zmiennej", - "Add_definite_assignment_assertion_to_property_0_95020": "Dodaj asercję określonego przypisania do właściwości „{0}”", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Dodaj asercję określonego przypisania do wszystkich niezainicjowanych właściwości", - "Add_export_to_make_this_file_into_a_module_95097": "Dodaj element „export {}”, aby przekształcić ten plik w moduł", - "Add_extends_constraint_2211": "Dodaj ograniczenie „rozszerzeń”.", - "Add_extends_constraint_to_all_type_parameters_2212": "Dodaj ograniczenie „rozszerzeń” do wszystkich parametrów typu", - "Add_import_from_0_90057": "Dodaj import z „{0}”", - "Add_index_signature_for_property_0_90017": "Dodaj sygnaturę indeksu dla właściwości „{0}”", - "Add_initializer_to_property_0_95019": "Dodaj inicjator do właściwości „{0}”", - "Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości", - "Add_missing_attributes_95167": "Dodawanie brakujących atrybutów", - "Add_missing_call_parentheses_95067": "Dodaj brakujące nawiasy wywołań", - "Add_missing_comma_for_object_member_completion_0_95187": "Dodaj brakujący przecinek dla ukończenia składowych obiektu „{0}”.", - "Add_missing_enum_member_0_95063": "Dodaj brakujący element członkowski wyliczenia „{0}”", - "Add_missing_function_declaration_0_95156": "Dodaj brakującą deklarację funkcji „{0}”", - "Add_missing_new_operator_to_all_calls_95072": "Dodaj brakujący operator „new” do wszystkich wywołań", - "Add_missing_new_operator_to_call_95071": "Dodaj brakujący operator „new” do wywołania", - "Add_missing_parameter_to_0_95188": "Dodaj brakujący parametr do elementu „{0}”", - "Add_missing_parameters_to_0_95189": "Dodaj brakujące parametry do elementu „{0}”", - "Add_missing_properties_95165": "Dodaj brakujące właściwości", - "Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”", - "Add_missing_typeof_95052": "Dodaj brakujący element „typeof”", - "Add_names_to_all_parameters_without_names_95073": "Dodaj nazwy do wszystkich parametrów bez nazw", - "Add_optional_parameter_to_0_95191": "Dodaj opcjonalny parametr do elementu „{0}\"", - "Add_optional_parameters_to_0_95192": "Dodaj opcjonalne parametry do elementu „{0}”", - "Add_or_remove_braces_in_an_arrow_function_95058": "Dodaj lub usuń nawiasy klamrowe w funkcji strzałki", - "Add_override_modifier_95160": "Dodaj modyfikator „override”", - "Add_parameter_name_90034": "Dodaj nazwę parametru", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej", - "Add_resolution_mode_import_attribute_95196": "Dodaj atrybut importu „resolution-mode”", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Dodaj atrybut importu „resolution-mode” do wszystkich importów tylko typu, które go potrzebują", - "Add_return_type_0_90063": "Dodaj zwracany typ „{0}”", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Dodaj elementy satisfies i asercję typu do tego wyrażenia (satisfies T jako T), aby jawnie utworzyć typ.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Dodaj elementy satisfies i asercję typu wbudowanego za pomocą elementu „{0}”", - "Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów", - "Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Dodaj element „niezdefiniowany” do typu podczas uzyskiwania dostępu przy użyciu indeksu.", - "Add_undefined_to_optional_property_type_95169": "Dodaj element \"undefined\" do opcjonalnego typu właściwości", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Dodaj typ nieokreślony do wszystkich niezainicjowanych właściwości", - "Add_undefined_type_to_property_0_95018": "Dodaj typ „undefined” do właściwości „{0}”", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Dodaj konwersję „unknown” dla nienakładających się typów", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Dodaj element „unknown” do wszystkich konwersji nienakładających się typów", - "Add_void_to_Promise_resolved_without_a_value_95143": "Dodaj argument „void” do obiektu Promise rozwiązanego bez wartości", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Dodaj argument „void” do wszystkich obiektów Promise rozwiązanych bez wartości", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Dodanie pliku tsconfig.json pomoże w organizowaniu projektów, które zawierają pliki TypeScript i JavaScript. Dowiedz się więcej: https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne ograniczenia.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne modyfikatory.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Wszystkie deklaracje „{0}” muszą mieć identyczne parametry typu.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Wszystkie deklaracje metody abstrakcyjnej muszą występować obok siebie.", - "All_destructured_elements_are_unused_6198": "Wszystkie elementy, których strukturę usunięto, są nieużywane.", - "All_imports_in_import_declaration_are_unused_6192": "Wszystkie importy w deklaracji importu są nieużywane.", - "All_type_parameters_are_unused_6205": "Wszystkie parametry typu są nieużywane.", - "All_variables_are_unused_6199": "Wszystkie zmienne są nieużywane.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Zezwalaj plikom JavaScript na udział w programie. Użyj opcji „checkJS”, aby uzyskać błędy z tych plików.", - "Allow_accessing_UMD_globals_from_modules_6602": "Zezwalaj na dostęp do zmiennych globalnych UMD z modułów.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Zezwalaj na elementy „import x from y”, gdy moduł nie ma domyślnej operacji eksportu.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Zezwalaj na jednorazowe importowanie funkcji pomocniczych z biblioteki tslib w projekcie zamiast dołączania ich dla poszczególnych plików.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Zezwalaj na importowanie w celu uwzględnienia rozszerzeń plików TypeScript. Wymaga ustawienia elementu „--moduleResolution bundler” i „--noEmit” lub „--emitDeclarationOnly”.", - "Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Zezwalaj na traktowanie wielu folderów jako jednego podczas rozpoznawania modułów.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Już dołączona nazwa pliku „{0}” różni się od nazwy pliku „{1}” tylko wielkością liter", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklaracja otaczającego modułu nie może określać względnej nazwy modułu.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Moduły otoczenia nie mogą być zagnieżdżone w innych modułach ani przestrzeniach nazw.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Moduł AMD nie może mieć wielu przypisań nazw.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstrakcyjna metoda dostępu nie może mieć implementacji.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modyfikator dostępności nie może być używany z identyfikatorem prywatnym.", - "An_accessor_cannot_have_type_parameters_1094": "Metoda dostępu nie może mieć parametrów typu.", - "An_accessor_property_cannot_be_declared_optional_1276": "Właściwość „accessor” nie może być zadeklarowana jako opcjonalna.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklaracja otaczającego modułu jest dozwolona tylko na najwyższym poziomie pliku.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Nie podano argumentu dla elementu „{0}”.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Argument pasujący do tego wzorca powiązania nie został podany.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Arytmetyczny operand musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkcja strzałki nie może mieć parametru „this”.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchroniczna funkcja lub metoda w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchroniczna funkcja lub metoda musi zwrócić element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", - "An_async_iterator_must_have_a_next_method_2519": "Iterator asynchroniczny musi mieć metodę „next()”.", - "An_element_access_expression_should_take_an_argument_1011": "Wyrażenie dostępu do elementu powinno przyjmować argument.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Elementu członkowskiego wyliczenia nie można nazwać za pomocą identyfikatora prywatnego.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Składowa wyliczenia nie może mieć nazwy liczbowej.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Po nazwie elementu członkowskiego wyliczenia musi następować znak „,”, „=” lub „}”.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozszerzona wersja tych informacji, przedstawiająca wszystkie możliwe opcje kompilatora", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Nie można użyć przypisania eksportu w module z innymi eksportowanymi elementami.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Nie można użyć przypisania eksportu w przestrzeni nazw.", - "An_export_assignment_cannot_have_modifiers_1120": "Przypisanie eksportu nie może mieć modyfikatorów.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Przypisanie eksportu musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklaracji eksportu można używać tylko na najwyższym poziomie modułu.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklaracji eksportu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", - "An_export_declaration_cannot_have_modifiers_1193": "Deklaracja eksportu nie może mieć modyfikatorów.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Deklaracja „export =” musi odwoływać się do rzeczywistej wartości, gdy właściwość „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklaracja „export =” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Element „export default” musi odwoływać się do rzeczywistej wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Element „export default” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Wyrażenie typu „void” nie może być testowane pod kątem prawdziwości.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozszerzona wartość znaku ucieczki Unicode musi należeć do zakresu od 0x0 do 0x10FFFF (włącznie).", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identyfikatora lub słowa kluczowego nie można użyć bezpośrednio po literale liczbowym.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementacja nie może być zadeklarowana w otaczających kontekstach.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu nie może odwoływać się do deklaracji, która została wyeksportowana przy użyciu elementu „export type”.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu nie może odwoływać się do deklaracji, która została zaimportowana przy użyciu elementu „import type”.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Alias importu nie może zostać rozpoznany jako deklaracja typu lub deklaracja tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", - "An_import_alias_cannot_use_import_type_1392": "Alias importu nie może używać właściwości „import type”", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklaracji importu można używać tylko na najwyższym poziomie modułu.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklaracji importu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", - "An_import_declaration_cannot_have_modifiers_1191": "Deklaracja importu nie może mieć modyfikatorów.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ścieżka importu może tylko kończyć się rozszerzeniem „{0}”, gdy jest włączona opcja „allowImportingTsExtensions”.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Sygnatura indeksu nie może mieć parametru rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Sygnatura indeksu nie może być zakończona przecinkiem.", - "An_index_signature_must_have_a_type_annotation_1021": "Sygnatura indeksu musi mieć adnotację typu.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Sygnatura indeksu musi mieć dokładnie jeden parametr.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Parametr sygnatury indeksu nie może zawierać znaku zapytania.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Parametr sygnatury indeksu nie może mieć modyfikatora dostępności.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Parametr sygnatury indeksu nie może mieć inicjatora.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Parametr sygnatury indeksu musi mieć adnotację typu.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru sygnatury indeksu nie może być typem literału ani typem ogólnym. Rozważ użycie zamiast tego mapowanego typu obiektu.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Parametr sygnatury indeksu musi mieć typ „string”, „number” lub „symbol” albo typ literału szablonu.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po wyrażeniu tworzenia wystąpienia nie może następować dostęp do właściwości.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Interfejs może rozszerzać tylko identyfikator/nazwę kwalifikowaną z opcjonalnymi argumentami typu.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Interfejs może rozszerzać tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Interfejs nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Może rozszerzać tylko inne nazwane typy obiektów.", - "An_interface_property_cannot_have_an_initializer_1246": "Właściwość interfejsu nie może mieć inicjatora.", - "An_iterator_must_have_a_next_method_2489": "Iterator musi zawierać metodę „next()”.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "W przypadku używania dyrektywy pragma @jsx z fragmentami JSX jest wymagana dyrektywa pragma @jsxFrag.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Literał obiektu nie może mieć wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literał obiektu nie może mieć wielu właściwości o tej samej nazwie.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literał obiektu nie może mieć właściwości i metody dostępu o takiej samej nazwie.", - "An_object_member_cannot_be_declared_optional_1162": "Składowa obiektu nie może być zadeklarowana jako opcjonalna.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]” obiektu musi zwracać wartość logiczną, aby mogła być używana po prawej stronie wyrażenia „instanceof”.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Opcjonalny łańcuch nie może zawierać identyfikatorów prywatnych.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Element opcjonalny nie może następować po elemencie rest.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Zewnętrzna wartość parametru „this” jest zasłaniana przez ten kontener.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Sygnatura przeciążenia nie może być zadeklarowana jako generator.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Wyrażenie jednoargumentowe z operatorem „{0}” jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", - "Annotate_everything_with_types_from_JSDoc_95043": "Adnotuj wszystko przy użyciu typów JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Adnotuj typy funkcji expando właściwości w przestrzeni nazw", - "Annotate_with_type_from_JSDoc_95009": "Dodaj adnotację z typem z danych JSDoc", - "Another_export_default_is_here_2753": "W tym miejscu jest kolejny element export default.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Każda właściwość standardu Unicode, która może być zgodna z więcej niż jednym znakiem, jest dostępna tylko wtedy, gdy ustawiono flagę Unicode Sets (v).", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Wszystko, co może być zgodne z więcej niż pojedynczym znakiem, jest nieprawidłowe wewnątrz klasy znaków negowanych.", - "Are_you_missing_a_semicolon_2734": "Czy brakuje średnika?", - "Argument_expression_expected_1135": "Oczekiwano wyrażenia argumentu.", - "Argument_for_0_option_must_be_Colon_1_6046": "Argumentem opcji „{0}” musi być: {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Argument importu dynamicznego nie może być elementem spread.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Nie można przypisać argumentu typu „{0}” do parametru typu „{1}”.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argumentu typu \"{0}\" nie można przypisać do parametru typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nie podano argumentów dla parametru REST „{0}”.", - "Array_element_destructuring_pattern_expected_1181": "Oczekiwano wzorca usuwającego strukturę elementu tablicy.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Tablic z elementami rozproszonymi nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Asercje wymagają, aby każda nazwa w celu wywołania była zadeklarowana z jawną adnotacją typu.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Asercje wymagają, aby cel wywołania był identyfikatorem lub nazwą kwalifikowaną.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Przypisywanie właściwości do funkcji bez deklarowania ich nie jest obsługiwane w przypadku opcji --isolatedDeclarations. Dodaj jawną deklarację właściwości przypisanych do tej funkcji.", - "Asterisk_Slash_expected_1010": "Oczekiwano znaków „*/”.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Co najmniej jeden akcesor musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozszerzenia zakresu globalnego mogą być zagnieżdżane bezpośrednio jedynie w modułach zewnętrznych lub deklaracjach modułów otoczenia.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozszerzenia zakresu globalnego muszą mieć modyfikator „declare”, chyba że znajdują się w już otaczającym kontekście.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatyczne odnajdowanie operacji wpisywania zostało włączone w projekcie „{0}”. Trwa uruchamianie dodatkowego przejścia rozwiązania dla modułu „{1}” przy użyciu lokalizacji pamięci podręcznej „{2}”.", - "BUILD_OPTIONS_6919": "OPCJE KOMPILACJI", - "Backwards_Compatibility_6253": "Zgodność z poprzednimi wersjami", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Wyrażenia klasy bazowej nie mogą odwoływać się do parametrów typu klasy.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Zwracany typ konstruktora bazowego „{0}” nie jest typem obiektu ani częścią wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Wszystkie konstruktory podstawowe muszą mieć ten sam zwracany typ.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Katalog podstawowy do rozpoznawania innych niż bezwzględne nazw modułów.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Literały typu BigInt są niedostępne, gdy wersja docelowa jest wcześniejsza niż ES2020.", - "Binary_digit_expected_1177": "Oczekiwano bitu.", - "Binding_element_0_implicitly_has_an_1_type_7031": "Dla elementu powiązania „{0}” niejawnie określono typ „{1}”.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Zmienna „{0}” o zakresie bloku została użyta przed jej deklaracją.", - "Build_a_composite_project_in_the_working_directory_6925": "Skompiluj projekt złożony w katalogu roboczym.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Kompiluj co najmniej jeden projekt i jego zależności, jeśli są nieaktualne", - "Build_option_0_requires_a_value_of_type_1_5073": "Opcja kompilacji „{0}” wymaga wartości typu {1}.", - "Building_project_0_6358": "Trwa kompilowanie projektu „{0}”...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Wbudowane iteratory są tworzone przy użyciu typu „TReturn” o wartości „undefined” zamiast „any”.", - "COMMAND_LINE_FLAGS_6921": "FLAGI WIERSZA POLECENIA", - "COMMON_COMMANDS_6916": "TYPOWE POLECENIA", - "COMMON_COMPILER_OPTIONS_6920": "TYPOWE OPCJE KOMPILATORA", - "Call_decorator_expression_90028": "Wywołaj wyrażenie dekoratora", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Zwracane typy sygnatur wywołania „{0}” i „{1}” są niezgodne.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dla sygnatury wywołania bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Sygnatury wywołania bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", - "Call_target_does_not_contain_any_signatures_2346": "Cel wywołania nie zawiera żadnych podpisów.", - "Can_only_convert_logical_AND_access_chains_95142": "Można konwertować tylko łańcuchy logiczne ORAZ łańcuchy dostępu", - "Can_only_convert_named_export_95164": "Można przekonwertować tylko nazwany eksport", - "Can_only_convert_property_with_modifier_95137": "Właściwość można skonwertować tylko za pomocą modyfikatora", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Można konwertować tylko połączenia ciągów i literały ciągów", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Nie można uzyskać dostępu do elementu „{0}.{1}”, ponieważ element „{0}” jest typem, ale nie przestrzenią nazw. Czy chcesz pobrać typ właściwości „{1}” w lokalizacji „{0}” za pomocą elementu „{0}[„{1}”]”?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Nie można uzyskać dostępu do „{0}” z innego pliku bez kwalifikacji, gdy opcja „{1}” jest włączona. Zamiast tego użyj „{2}”.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Nie można uzyskać dostępu do wyliczenia stałej otoczenia, gdy element „{0}” jest włączony.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Nie można przypisać typu konstruktora „{0}” do typu konstruktora „{1}”.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Nie można przypisać abstrakcyjnego typu konstruktora do nieabstrakcyjnego typu konstruktora.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Nie można przypisać do elementu „{0}”, ponieważ jest to klasa.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nie można przypisać do elementu „{0}”, ponieważ jest to stała.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Nie można przypisać do elementu „{0}”, ponieważ jest to funkcja.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Nie można przypisać do elementu „{0}”, ponieważ jest to przestrzeń nazw.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nie można przypisać do elementu „{0}”, ponieważ jest to właściwość tylko do odczytu.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Nie można przypisać do elementu „{0}”, ponieważ jest to wyliczenie.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Nie można przypisać do elementu „{0}”, ponieważ jest to import.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nie można przydzielić do elementu „{0}”, ponieważ nie jest to zmienna.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Nie można przypisać do metody prywatnej „{0}”. Metody prywatne nie są zapisywalne.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Nie można rozszerzyć modułu „{0}”, ponieważ rozpoznawany jest obiekt inny niż moduł.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Nie można rozszerzyć modułu „{0}” za pośrednictwem operacji eksportu wartości, ponieważ jest on rozpoznawany jako jednostka inna niż moduł.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Nie można skompilować modułów za pomocą opcji „{0}”, chyba że flaga „--module” ma wartość „amd” lub „system”.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Nie można utworzyć wystąpienia klasy abstrakcyjnej.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Nie można delegować iteracji do wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale zawierający generator będzie zawsze wysyłał „{0}”.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Nie można wyeksportować elementu „{0}”. Z modułu można eksportować jedynie lokalne deklaracje.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Nie można rozszerzyć klasy „{0}”. Konstruktor klasy jest oznaczony jako prywatny.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Nie można rozszerzyć interfejsu „{0}”. Czy chodziło Ci o „implements”?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Nie można odnaleźć pliku tsconfig.json w bieżącym katalogu: {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Nie można znaleźć pliku tsconfig.json w określonym katalogu: „{0}”.", - "Cannot_find_global_type_0_2318": "Nie można odnaleźć typu globalnego „{0}”.", - "Cannot_find_global_value_0_2468": "Nie można odnaleźć wartości globalnej „{0}”.", - "Cannot_find_lib_definition_for_0_2726": "Nie można znaleźć definicji biblioteki dla elementu „{0}”.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nie można znaleźć definicji biblioteki dla elementu „{0}”. Czy chodziło Ci o element „{1}”?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nie można znaleźć modułu „{0}”. Rozważ użycie opcji „--resolveJsonModule” do importowania modułu z rozszerzeniem „.json”.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nie można odnaleźć modułu „{0}”. Czy chcesz ustawić opcję „moduleResolution” na wartość „nodenext”, czy dodać aliasy do opcji „paths”?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nie można odnaleźć modułu „{0}” lub odpowiadających mu deklaracji typów.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Nie można odnaleźć deklaracji modułu lub typu dla importu efektu ubocznego elementu „{0}”.", - "Cannot_find_name_0_2304": "Nie można odnaleźć nazwy „{0}”.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Nie można znaleźć nazwy „{0}”. Czy chodziło Ci o „{1}”?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Nie można znaleźć nazwy „{0}”. Czy chodziło o składową wystąpienia „this.{0}”?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Nie można znaleźć nazwy „{0}”. Czy chodziło o statyczną składową „{1}.{0}”?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nie można odnaleźć nazwy \"{0}\". Czy chodziło Ci o napisanie tego w funkcji asynchronicznej?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na wersję \"{1}\" lub nowszą.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić element \"dom\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”, a następnie dodaj ciąg „bun” do pola typów w pliku tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia \"npm i --save-dev @types/jest\" lub \"npm i --save-dev @types/mocha\", a następnie dodaj element \"jest\" lub \"mocha\" do pola types w pliku tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia \"npm i --save-dev @types/jquery\", a następnie dodaj element \"jquery\" do pola types w pliku tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla środowiska Node? Spróbuj użyć polecenia „npm i --save-dev @types/node”.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla węzła? Spróbuj użyć polecenia \"npm i --save-dev @types/node\", a następnie dodaj element \"node\" do pola types w pliku tsconfig.", - "Cannot_find_namespace_0_2503": "Nie można odnaleźć przestrzeni nazw „{0}”.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Nie można odnaleźć przestrzeni nazw „{0}”. Czy chodziło Ci o „{1}”?", - "Cannot_find_parameter_0_1225": "Nie można odnaleźć parametru „{0}”.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nie można odnaleźć wspólnej ścieżki podkatalogu dla plików wejściowych.", - "Cannot_find_type_definition_file_for_0_2688": "Nie można znaleźć pliku definicji typu dla elementu „{0}”.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Nie można zaimportować plików deklaracji typu. Rozważ zaimportowanie „{0}” zamiast „{1}”.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Nie można zainicjować zmiennej „{0}” z zakresu zewnętrznego w tym samym zakresie co deklaracja „{1}” należąca do zakresu bloku.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null”.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null” lub „undefined”.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „undefined”.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale destrukturyzacja tablicy będzie zawsze wysyłała „{0}”.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale rozkładanie tablicy będzie zawsze wysyłało „{0}”.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale pętla for-of będzie zawsze wysyłała „{0}”.", - "Cannot_move_statements_to_the_selected_file_95183": "Nie można przenieść instrukcji do wybranego pliku", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Nie można przenieść do pliku, wybrany plik jest nieprawidłowy", - "Cannot_read_file_0_5083": "Nie można odczytać pliku „{0}”.", - "Cannot_read_file_0_Colon_1_5012": "Nie można odczytać pliku „{0}”: {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Nie można ponownie zadeklarować zmiennej „{0}” o zakresie bloku.", - "Cannot_redeclare_exported_variable_0_2323": "Nie można zadeklarować ponownie wyeksportowanej zmiennej „{0}”.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nie można ponownie zadeklarować identyfikatora „{0}” w klauzuli catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nie można uruchomić wywołania funkcji w adnotacji typu.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Nie można użyć kodu JSX, jeśli nie podano flagi „--jsx”.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Nie można użyć polecenia „export import” w przestrzeni nazw typu lub tylko typu, gdy opcja „{0}” jest włączona.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nie można używać importów, eksportów lub rozszerzeń modułów, jeśli flaga „--module” ma wartość „none”.", - "Cannot_use_namespace_0_as_a_type_2709": "Nie można używać przestrzeni nazw „{0}” jako typu.", - "Cannot_use_namespace_0_as_a_value_2708": "Nie można używać przestrzeni nazw „{0}” jako wartości.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Nie można użyć elementu \"this\" w statycznym inicjatorze właściwości dekorowanej klasy.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Nie można zapisać pliku „{0}”, ponieważ spowoduje to zastąpienie pliku „.tsbuildinfo” generowanego przez przywoływany projekt „{1}”", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Nie można zapisać pliku „{0}”, ponieważ zostałby nadpisany przez wiele plików wejściowych.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Nie można zapisać pliku „{0}”, ponieważ nadpisałby plik wejściowy.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Zmienna klauzuli catch nie może mieć inicjatora.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Adnotacja typu zmiennej w klauzuli catch musi mieć wartość „any” lub „unknown”, jeśli jest określona.", - "Change_0_to_1_90014": "Zmień element „{0}” na „{1}”", - "Change_all_extended_interfaces_to_implements_95038": "Zmień wszystkie rozszerzone interfejsy na elementy „implements”", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Zmień wszystkie typy w stylu JSDoc na TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Zmień wszystkie typy w stylu JSDoc na TypeScript (i dodaj element „| undefined” do typów dopuszczających wartość null)", - "Change_extends_to_implements_90003": "Zmień atrybut „extends” na „implements”", - "Change_spelling_to_0_90022": "Zmień pisownię na „{0}”", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Sprawdź, czy istnieją zadeklarowane właściwości klas, które nie zostały ustawione w konstruktorze.", - "Check_side_effect_imports_6806": "Sprawdź importy efektów ubocznych.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Sprawdź, czy argumenty dla metod „bind”, „call” i „apply” są zgodne z oryginalną funkcją.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Sprawdzanie, czy „{0}” to najdłuższy zgodny prefiks dla „{1}” — „{2}”.", - "Circular_definition_of_import_alias_0_2303": "Definicja cykliczna aliasu importu „{0}”.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Wykryto cykliczność podczas rozpoznawania konfiguracji: {0}", - "Circularity_originates_in_type_at_this_location_2751": "Cykliczność pochodzi z typu w tym miejscu.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Klasa „{0}” definiuje metodę dostępu do składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Klasa „{0}” definiuje funkcję składową wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako metodę dostępu do składowej wystąpienia.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Klasa „{0}” definiuje właściwość składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", - "Class_0_incorrectly_extends_base_class_1_2415": "Klasa „{0}” niepoprawnie rozszerza klasę bazową „{1}”.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Klasa „{0}” niepoprawnie implementuje klasę „{1}”. Czy chodziło o rozszerzenie „{1}” i odziedziczenie jego elementów członkowskich jako podklasy?", - "Class_0_incorrectly_implements_interface_1_2420": "Klasa „{0}” zawiera niepoprawną implementację interfejsu „{1}”.", - "Class_0_used_before_its_declaration_2449": "Klasa „{0}” została użyta przed zadeklarowaniem.", - "Class_constructor_may_not_be_a_generator_1368": "Konstruktor klas nie może być generatorem.", - "Class_constructor_may_not_be_an_accessor_1341": "Konstruktor klas nie może być metodą dostępu.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklaracja klasy nie może implementować listy przeciążeń dla elementu \"{0}\".", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag \"@augments\" lub \"@extends\".", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekoratorów klas nie można używać ze statycznym identyfikatorem prywatnym. Rozważ usunięcie eksperymentalnego dekoratora.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole klasy „{0}” zdefiniowane przez klasę nadrzędną nie jest dostępne w klasie podrzędnej za pośrednictwem super.", - "Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Nazwa klasy nie może być identyczna z „Object” w przypadku modułu ES5 i nowszych {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.", - "Classes_can_only_extend_a_single_class_1174": "Klasy mogą rozszerzać tylko pojedynczą klasę.", - "Classes_may_not_have_a_field_named_constructor_18006": "Klasy nie mogą mieć pola o nazwie „constructor”.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Kod zawarty w klasie jest obliczany w trybie z ograniczeniami języka JavaScript, który nie zezwala na użycie elementu \"{0}\". Aby uzyskać więcej informacji, zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Opcje wiersza polecenia", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Skompiluj projekt z uwzględnieniem ścieżki jego pliku konfiguracji lub folderu z plikiem „tsconfig.json”.", - "Compiler_Diagnostics_6251": "Diagnostyka kompilatora", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Opcja kompilatora „{0}” nie może mieć pustego ciągu.", - "Compiler_option_0_expects_an_argument_6044": "Opcja kompilatora „{0}” oczekuje argumentu.", - "Compiler_option_0_may_not_be_used_with_build_5094": "Opcja kompilatora \"--{0}\" nie może być używana z parametrem \"--build\".", - "Compiler_option_0_may_only_be_used_with_build_5093": "Opcję kompilatora \"--{0}\" można używać tylko z parametrem \"--build\".", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Opcja kompilatora \"{0}\" wartości '{1}' jest niestabilna. Użyj nocnego TypeScript, aby wyciszyć ten błąd. Spróbuj zaktualizować za pomocą polecenia „npm install -D typescript@next”.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "Opcja kompilatora „{0}” wymaga wartości typu {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilator rezerwuje nazwę „{0}” podczas emitowania identyfikatora prywatnego na niższy poziom.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiluje projekt języka TypeScript znajdujący się w określonej ścieżce.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiluje bieżący projekt (plik tsconfig.json w katalogu roboczym).", - "Compiles_the_current_project_with_additional_settings_6929": "Kompiluje bieżący projekt z dodatkowymi ustawieniami.", - "Completeness_6257": "Kompletność", - "Composite_projects_may_not_disable_declaration_emit_6304": "Projekty kompozytowe nie mogą wyłączyć emitowania deklaracji.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Projekty złożone nie mogą wyłączać kompilacji przyrostowej.", - "Computed_from_the_list_of_input_files_6911": "Obliczono na podstawie listy plików wejściowych", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Obliczone właściwości muszą być literałami liczb lub ciągów, zmiennymi lub wyrażeniami kropkowanymi z wyrażeniem --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Obliczone nazwy właściwości nie są dozwolone w wyliczeniach.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nie można wywnioskować obliczonych nazw właściwości w literałach klas lub obiektów za pomocą wyrażenia --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Obliczone wartości nie są dozwolone w wyliczeniu ze składowymi o wartości ciągu.", - "Concatenate_and_emit_output_to_single_file_6001": "Połącz i wyemituj dane wyjściowe do pojedynczego pliku.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Warunki, które należy ustawić oprócz ustawień domyślnych specyficznych dla programu rozpoznawania nazw podczas rozpoznawania importów.", - "Conflicts_are_in_this_file_6201": "Konflikty znajdują się w tym pliku.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Rozważ dodanie modyfikatora \"declare\" do tej klasy.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Zwracane typy „{0}” i „{1}” sygnatur konstrukcji są niezgodne.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dla sygnatury konstrukcji bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Sygnatury konstrukcji bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", - "Constructor_implementation_is_missing_2390": "Brak implementacji konstruktora.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Konstruktor klasy „{0}” jest prywatny i dostępny tylko w ramach deklaracji klasy.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor klasy „{0}” jest chroniony i dostępny tylko w ramach deklaracji klasy.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie unii.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory klas pochodnych muszą zawierać wywołanie „super”.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Nie podano pliku zawierającego i nie można określić katalogu głównego. Pomijanie wyszukiwania w folderze „node_modules”.", - "Containing_function_is_not_an_arrow_function_95128": "Funkcja zawierająca nie jest funkcją strzałki", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Określ, jaka metoda jest używana do wykrywania plików JS w formacie modułu.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Konwersja typu „{0}” na typ „{1}” może być błędem, ponieważ żaden z tych typów nie pokrywa się w wystarczającym stopniu z drugim. Jeśli było to zamierzone, najpierw przekonwertuj wyrażenie na typ „unknown”.", - "Convert_0_to_1_in_0_95003": "Konwertuj element „{0}” na element „{1} w {0}”.", - "Convert_0_to_mapped_object_type_95055": "Konwertuj element „{0}” na zamapowany typ obiektu", - "Convert_all_const_to_let_95102": "Konwertuj wszystkie elementy „const” na „let”", - "Convert_all_constructor_functions_to_classes_95045": "Przekonwertuj wszystkie funkcje konstruktora na klasy", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Konwertuj wszystkie nieprawidłowe znaki na kod jednostki HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Konwertuj wszystkie ponownie wyeksportowane typy na eksporty dotyczące tylko typu", - "Convert_all_require_to_import_95048": "Konwertuj wszystkie wywołania „require” na wywołania „import”", - "Convert_all_to_async_functions_95066": "Konwertuj wszystko na funkcje asynchroniczne", - "Convert_all_to_bigint_numeric_literals_95092": "Konwertuj wszystko na literały liczbowe typu bigint", - "Convert_all_to_default_imports_95035": "Przekonwertuj wszystko na domyślne importowanie", - "Convert_all_type_literals_to_mapped_type_95021": "Konwertuj wszystkie literały typu na typ zamapowany", - "Convert_all_typedef_to_TypeScript_types_95177": "Konwertuj wszystkie elementy typedef na typy TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Konwertuj funkcję strzałki lub wyrażenie funkcji", - "Convert_const_to_let_95093": "Konwertuj zmienne „const” na „let”", - "Convert_default_export_to_named_export_95061": "Konwertuj eksport domyślny na nazwany eksport", - "Convert_function_declaration_0_to_arrow_function_95106": "Konwertuj deklarację funkcji „{0}” na funkcję strzałki", - "Convert_function_expression_0_to_arrow_function_95105": "Konwertuj wyrażenie funkcji „{0}” na funkcję strzałki", - "Convert_function_to_an_ES2015_class_95001": "Konwertuj funkcję na klasę ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Konwertuj nieprawidłowy znak na jego kod jednostki html", - "Convert_named_export_to_default_export_95062": "Konwertuj nazwany eksport na eksport domyślny", - "Convert_named_imports_to_default_import_95170": "Konwertuj nazwane importy na import domyślny", - "Convert_named_imports_to_namespace_import_95057": "Konwertuj importy nazwane na import przestrzeni nazw", - "Convert_namespace_import_to_named_imports_95056": "Konwertuj import przestrzeni nazw na importy nazwane", - "Convert_overload_list_to_single_signature_95118": "Konwertuj listę przeciążeń na pojedynczą sygnaturę", - "Convert_parameters_to_destructured_object_95075": "Konwertuj parametry na obiekt destrukturyzowany", - "Convert_require_to_import_95047": "Konwertuj wywołanie „require” na wywołanie „import”", - "Convert_to_ES_module_95017": "Konwertuj na moduł ES", - "Convert_to_a_bigint_numeric_literal_95091": "Konwertuj na literał liczbowy typu bigint", - "Convert_to_anonymous_function_95123": "Konwertuj na funkcję anonimową", - "Convert_to_arrow_function_95125": "Konwertuj na funkcję strzałki", - "Convert_to_async_function_95065": "Konwertuj na funkcję asynchroniczną", - "Convert_to_default_import_95013": "Konwertuj na import domyślny", - "Convert_to_named_function_95124": "Konwertuj na funkcję nazwaną", - "Convert_to_optional_chain_expression_95139": "Konwertuj na opcjonalne wyrażenie łańcucha", - "Convert_to_template_string_95096": "Konwertuj na ciąg szablonu", - "Convert_to_type_only_export_1364": "Konwertuj na eksport dotyczący tylko typu", - "Convert_typedef_to_TypeScript_type_95176": "Konwertuj element typedef na typ TypeScript.", - "Corrupted_locale_file_0_6051": "Uszkodzony plik ustawień regionalnych {0}.", - "Could_not_convert_to_anonymous_function_95153": "Nie można przekonwertować na funkcję anonimową", - "Could_not_convert_to_arrow_function_95151": "Nie można przekonwertować na funkcję strzałki", - "Could_not_convert_to_named_function_95152": "Nie można przekonwertować na nazwaną funkcję", - "Could_not_determine_function_return_type_95150": "Nie można określić zwracanego typu funkcji", - "Could_not_find_a_containing_arrow_function_95127": "Nie można było znaleźć zawierającej funkcji strzałki", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nie można znaleźć pliku deklaracji dla modułu „{0}”. Element „{1}” ma niejawnie typ „any”.", - "Could_not_find_convertible_access_expression_95140": "Nie można odnaleźć konwertowalnego wyrażenia dostępu", - "Could_not_find_export_statement_95129": "Nie można było znaleźć instrukcji export", - "Could_not_find_import_clause_95131": "Nie można było znaleźć klauzuli import", - "Could_not_find_matching_access_expressions_95141": "Nie można odnaleźć zgodnych wyrażeń dostępu", - "Could_not_find_name_0_Did_you_mean_1_2570": "Nie można znaleźć nazwy „{0}”. Czy chodziło o „{1}”?", - "Could_not_find_namespace_import_or_named_imports_95132": "Nie można było znaleźć importu przestrzeni nazw lub nazwanych importów", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Nie można było znaleźć właściwości, dla której ma zostać wygenerowana metoda dostępu", - "Could_not_find_variable_to_inline_95185": "Nie można odnaleźć zmiennej w tekście.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nie można rozpoznać ścieżki „{0}” z rozszerzeniami: {1}.", - "Could_not_write_file_0_Colon_1_5033": "Nie można zapisać pliku „{0}”: {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Twórz pliki mapy źródła dla emitowanych plików JavaScript.", - "Create_sourcemaps_for_d_ts_files_6614": "Twórz mapy źródła dla plików d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Tworzy plik tsconfig.json z zalecanymi ustawieniami w katalogu roboczym.", - "DIRECTORY_6038": "KATALOG", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sekwencje ucieczki i odwołania wsteczne dziesiętne nie są dozwolone w klasie znaków.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Wartości dziesiętne z zerami wiodącymi są niedozwolone.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklaracja rozszerza deklarację w innym pliku. Nie można przeprowadzić serializacji.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Emisja deklaracji dla tego pliku wymaga zachowania tego importu dla rozszerzeń. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}” z modułu „{1}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Emisja deklaracji dla tego parametru wymaga niejawnego dodania parametru undefined do jego typu. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", - "Declaration_expected_1146": "Oczekiwano deklaracji.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Nazwa deklaracji powoduje konflikt z wbudowanym identyfikatorem globalnym „{0}”.", - "Declaration_or_statement_expected_1128": "Oczekiwano deklaracji lub instrukcji.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Oczekiwano deklaracji lub instrukcji. Ten znak „=” jest za blokiem instrukcji, dlatego jeśli chodziło Ci o napisanie przypisania usuwającego, może być konieczne zamknięcie całego przypisania w nawiasach.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklaracje z asercjami określonego przypisania muszą również mieć adnotacje typu.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklaracje z inicjatorami nie mogą mieć również asercji określonego przypisania.", - "Declare_a_private_field_named_0_90053": "Zadeklaruj pole prywatne o nazwie „{0}”.", - "Declare_method_0_90023": "Zadeklaruj metodę „{0}”", - "Declare_private_method_0_90038": "Zadeklaruj metodę prywatną „{0}”", - "Declare_private_property_0_90035": "Zadeklaruj właściwość prywatną „{0}”", - "Declare_property_0_90016": "Zadeklaruj właściwość „{0}”", - "Declare_static_method_0_90024": "Zadeklaruj metodę statyczną „{0}”", - "Declare_static_property_0_90027": "Zadeklaruj właściwość statyczną „{0}”", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Zwracany typ funkcji dekoratora „{0}” nie jest możliwy do przypisania do typu „{1}”.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Zwracany typ funkcji dekoratora to „{0}”, natomiast powinien być to typ „void” lub „any”.", - "Decorator_used_before_export_here_1486": "Dekorator używany przed elementem „export” w tym miejscu.", - "Decorators_are_not_valid_here_1206": "Elementy Decorator nie są tutaj prawidłowe.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Nie można stosować elementów Decorator do wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratory nie mogą występować po instrukcji „export” lub „export default”, jeśli występują również przed instrukcją „export”.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratory muszą poprzedzać nazwę i wszystkie słowa kluczowe deklaracji właściwości.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Wpisz zmienne klauzuli catch jako „unknown” zamiast „any”.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Domyślny eksport modułu ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Eksportów domyślnych nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Importy domyślne są niedozwolone w odroczonym imporcie.", - "Default_library_1424": "Domyślna biblioteka", - "Default_library_for_target_0_1425": "Domyślna biblioteka dla elementu docelowego „{0}”", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Odroczone importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „esnext” lub „preserve”.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definicje następujących identyfikatorów powodują konflikt z tymi w innym pliku: {0}", - "Delete_all_unused_declarations_95024": "Usuń wszystkie nieużywane deklaracje", - "Delete_all_unused_imports_95147": "Usuń wszystkie nieużywane importy", - "Delete_all_unused_param_tags_95172": "Usuń wszystkie nieużywane tagi „@param”", - "Delete_the_outputs_of_all_projects_6365": "Usuń dane wyjściowe wszystkich projektów.", - "Delete_unused_param_tag_0_95171": "Usuń nieużywany tag „@param” „{0}”", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Przestarzałe] Użyj w zastępstwie opcji „--jsxFactory”. Określ obiekt wywoływany dla elementu createElement przy określaniu jako celu emisji JSX „react”", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Przestarzałe] Użyj w zastępstwie opcji „--outFile”. Połącz dane wyjściowe i wyemituj jako jeden plik", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Przestarzałe] Użyj w zastępstwie opcji „--skipLibCheck”. Pomiń sprawdzanie typów domyślnych plików deklaracji biblioteki.", - "Deprecated_setting_Use_outFile_instead_6677": "Przestarzałe ustawienie. Zamiast tego użyj elementu „outFile”.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Czy zapomniano użyć operatora „await”?", - "Did_you_mean_0_1369": "Czy chodziło Ci o „{0}”?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Czy chodziło Ci o ograniczenie elementu „{0}” do typu „new (...args: any[]) => {1}”?", - "Did_you_mean_to_call_this_expression_6212": "Czy chodziło Ci o wywołanie tego wyrażenia?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Czy chodziło Ci o oznaczenie tej funkcji jako „async”?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Czy chodziło o użycie znaku „:”? Znak „=” może występować po nazwie właściwości tylko wtedy, gdy zawierający literał obiektu jest częścią wzorca usuwającego strukturę.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Czy chodziło Ci o użycie operatora „new” z tym wyrażeniem?", - "Digit_expected_1124": "Oczekiwano cyfry.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Katalog „{0}” nie istnieje. Operacje wyszukiwania w nim zostaną pominięte.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Katalog „{0}” nie zawiera zakresu package.json. Importy nie zostaną rozpoznane.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Wyłącz dodawanie dyrektyw „use strict” w emitowanych plikach JavaScript.", - "Disable_checking_for_this_file_90018": "Wyłącz sprawdzanie dla tego pliku", - "Disable_emitting_comments_6688": "Wyłącz emitowanie komentarzy.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Wyłącz emitowanie deklaracji mających element „@internal” w komentarzach JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Wyłącz emitowanie plików z kompilacji.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Wyłącz emitowanie plików, jeśli zostaną zgłoszone jakiekolwiek błędy sprawdzania typów.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Wyłącz wymazywanie deklaracji „const enum” w wygenerowanym kodzie.", - "Disable_error_reporting_for_unreachable_code_6603": "Wyłącz raportowanie błędów dla nieosiągalnego kodu.", - "Disable_error_reporting_for_unused_labels_6604": "Wyłącz raportowanie błędów dla nieużywanych etykiet.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Wyłącz sprawdzanie pełnego typu (będą zgłaszane tylko krytyczne analizy i błędy emisji).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Wyłącz generowanie niestandardowych funkcji pomocniczych, takich jak „__extends” w skompilowanych danych wyjściowych.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Wyłącz dołączanie plików bibliotek, w tym domyślnego pliku lib.d.ts.", - "Disable_loading_referenced_projects_6235": "Wyłącz ładowanie przywoływanych projektów.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Wyłącz preferowanie plików źródłowych zamiast plików deklaracji podczas odwoływania się do projektów złożonych.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Wyłącz raportowanie błędów dotyczących nadmiarowych właściwości podczas tworzenia literałów obiektów.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Wyłącz rozpoznawanie linków symbolicznych jako ścieżek rzeczywistych. Odpowiada to takiej samej fladze na platformie Node.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Wyłącz ograniczenia rozmiarów dla projektów JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Wyłącz wyszukiwanie rozwiązania dla tego projektu.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Wyłącz dokładne sprawdzanie sygnatur ogólnych w typach funkcji.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Wyłącz pozyskiwanie typów dla projektów JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Wyłącz obcinanie typów w komunikatach o błędach.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Wyłącz używanie plików źródłowych zamiast plików deklaracji z przywoływanych projektów.", - "Disable_wiping_the_console_in_watch_mode_6684": "Wyłącz czyszczenie konsoli w trybie obserwacji.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Wyłącz wnioskowanie dla pozyskiwania typów przez sprawdzanie nazw plików w projekcie.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Nie zezwalaj elementom „import”, „require” i „” na zwiększanie liczby plików, które powinny zostać dodane do projektu przez język TypeScript.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Nie zezwalaj na przywoływanie tego samego pliku za pomocą nazw różniących się wielkością liter.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nie dodawaj odwołań z trzema ukośnikami ani zaimportowanych modułów do listy skompilowanych plików.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Nie zezwalaj na konstrukcje środowiska uruchomieniowego, które nie są częścią języka ECMAScript.", - "Do_not_emit_comments_to_output_6009": "Nie emituj komentarzy do danych wyjściowych.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Nie emituj deklaracji dla kodu z adnotacją „@internal”.", - "Do_not_emit_outputs_6010": "Nie emituj danych wyjściowych.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Nie emituj danych wyjściowych w przypadku zgłoszenia błędów.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Nie emituj dyrektyw „use strict” w danych wyjściowych modułu.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Nie wymazuj deklaracji wyliczeń ze specyfikacją const w wygenerowanym kodzie.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Nie generuj w skompilowanych danych wyjściowych niestandardowych funkcji pomocy, takich jak „__extends”.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Nie uwzględniaj domyślnego pliku biblioteki (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Nie zgłaszaj błędów dla nieosiągalnego kodu.", - "Do_not_report_errors_on_unused_labels_6074": "Nie zgłaszaj błędów dla nieużywanych etykiet.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Nie rozpoznawaj rzeczywistej ścieżki linków symbolicznych.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Nie przekształcaj ani nie usuwaj żadnych importów ani eksportów, które nie są oznaczone jako tylko typy, dzięki czemu są zapisywane w formacie pliku wyjściowego na podstawie ustawienia „module”.", - "Do_not_truncate_error_messages_6165": "Nie obcinaj komunikatów o błędach.", - "Duplicate_function_implementation_2393": "Zduplikowana implementacja funkcji.", - "Duplicate_identifier_0_2300": "Zduplikowany identyfikator „{0}”.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu zawierającego funkcje asynchroniczne.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Zduplikowany identyfikator \"{0}\". Kompilator rezerwuje nazwę \"{1}\" podczas emisji odwołań \"super\" w inicjatorach statycznych.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Zduplikowany identyfikator „{0}”. Kompilator używa deklaracji „{1}” do obsługi funkcji asynchronicznych.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Zduplikowany identyfikator „{0}”. Elementy statyczne i elementy wystąpienia nie mogą mieć tej samej nazwy prywatnej.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Zduplikowany identyfikator „arguments”. Kompilator używa ciągu „arguments” do zainicjowania parametrów rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Powielony identyfikator „_newTarget”. Kompilator używa deklaracji zmiennej „_newTarget” do przechwytywania odwołania do metawłaściwości „new.target”.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Zduplikowany identyfikator „_this”. Kompilator używa deklaracji zmiennej „_this” do przechwycenia odwołania do elementu „this”.", - "Duplicate_index_signature_for_type_0_2374": "Zduplikowana sygnatura indeksu dla typu „{0}”.", - "Duplicate_label_0_1114": "Zduplikowana etykieta „{0}”.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Zduplikowana właściwość „{0}”.", - "Duplicate_regular_expression_flag_1500": "Zduplikowana flaga wyrażenia regularnego.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specyfikator dynamicznego importowania musi być typu „string”, ale określono typ „{0}”.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamiczne importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „es2020”, „es2022”, „esnext”, „commonjs”, „amd”, „system”, „umd”, „node16”, „node18”, „node20” lub „nodenext”.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Importy dynamiczne mogą akceptować tylko specyfikator modułu i opcjonalny zestaw atrybutów jako argumenty", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Importy dynamiczne obsługują drugi argument tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importów i eksportów ECMAScript nie można zapisać w pliku CommonJS w obszarze „verbatimModuleSyntax”.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importów i eksportów ECMAScript nie można zapisać w pliku CommonJS w obszarze „verbatimModuleSyntax”. Dostosuj pole „type” w najbliższej lokalizacji „package.json”, aby ustawić ten plik jako moduł ECMAScript, lub dostosuj ustawienia „verbatimModuleSyntax”, „module” i „moduleResolution” w języku TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Składnia modułu ECMAScript jest niedozwolona w module CommonJS, gdy element „module” jest ustawiony na wartość „preserve”.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Każda deklaracja znaku „{0}.{1}” różni się wartością, gdzie oczekiwano elementu „{2}”, ale podano „{3}”.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Każdy element członkowski typu unii „{0}” ma sygnatury konstrukcji, ale żadne z tych sygnatur nie są ze sobą zgodne.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Każdy element członkowski typu unii „{0}” ma sygnatury, ale żadne z tych sygnatur nie są ze sobą zgodne.", - "Editor_Support_6249": "Pomoc techniczna edytora", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element ma niejawnie typ „any”, ponieważ wyrażenie typu „{0}” nie może być używane do indeksowania typu „{1}”.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element niejawnie przyjmuje typ „any”, ponieważ wyrażenie indeksu ma typ inny niż „number”.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu. Czy chodziło o wywołanie „{1}”?", - "Emit_6246": "Emituj", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emituj pola klasy zgodne ze standardem ECMAScript.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emituj znacznik kolejności bajtów UTF-8 na początku plików wyjściowych.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emituj pojedynczy plik z mapami źródeł zamiast oddzielnego pliku.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emituj profil procesora CPU v8 dla uruchomienia kompilatora na potrzeby debugowania.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emituj dodatkowy kod JavaScript, aby ułatwić obsługę importowania modułów CommonJS. Włącza to opcję „allowSyntheticDefaultImports” na potrzeby zgodności typów.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Emituj pola klasy przy użyciu metody Define zamiast Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emituj metadane typu „design” dla dekorowanych deklaracji w plikach źródłowych.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emituj bardziej zgodny, ale dosłowny i mniej wydajny JavaScript dla iteracji.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emituj źródło razem z mapami źródeł w pojedynczym pliku; wymaga ustawienia opcji „--inlineSourceMap” lub „--sourceMap”.", - "Enable_all_strict_type_checking_options_6180": "Włącz wszystkie opcje ścisłego sprawdzania typów.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Włącz kolor i formatowanie w danych wyjściowych języka TypeScript, aby ułatwić odczytywanie błędów kompilatora.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Włącz ograniczenia zezwalające na używanie projektu języka TypeScript z odwołaniami do projektów.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Włącz raportowanie błędów dla ścieżek kodu, które nie zwracają jawnie funkcji.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Włącz raportowanie błędów dla wyrażeń i deklaracji z dorozumianym typem „any”.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Włącz raportowanie błędów dla przypadków rezerwowych w instrukcjach switch.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Włącz raportowanie błędów w plikach JavaScript z zaznaczonym typem.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Włącz raportowanie błędów, gdy zmienne lokalne nie są odczytywane.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Włącz raportowanie błędów, gdy element „this” ma typ „any”.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Włącz eksperymentalną obsługę starszych dekoratorów eksperymentalnych.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Włącz importowanie plików z dowolnym rozszerzeniem, pod warunkiem, że istnieje plik deklaracji.", - "Enable_importing_json_files_6689": "Włącz importowanie plików json.", - "Enable_lib_replacement_6808": "Włącz zastępowanie biblioteki.", - "Enable_project_compilation_6302": "Włącz kompilację projektu", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Włącz ścisłe metody „bind”, „call” i „apply” dla funkcji.", - "Enable_strict_checking_of_function_types_6186": "Włącz dokładne sprawdzanie typów funkcji.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Włącz dokładne sprawdzanie inicjowania właściwości w klasach.", - "Enable_strict_null_checks_6113": "Włącz dokładne sprawdzanie wartości null.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Włącz opcję „experimentalDecorators” w pliku konfiguracji", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Włącz flagę „--jsx” w pliku konfiguracji", - "Enable_tracing_of_the_name_resolution_process_6085": "Włącz śledzenie procesu rozpoznawania nazw.", - "Enable_verbose_logging_6713": "Włącz pełne rejestrowanie.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Umożliwia współdziałanie emitowania między modułami CommonJS i ES przez tworzenie obiektów przestrzeni nazw dla wszystkich importów. Implikuje użycie ustawienia „allowSyntheticDefaultImports”.", - "Enables_experimental_support_for_ES7_decorators_6065": "Umożliwia obsługę eksperymentalną elementów Decorator języka ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Umożliwia obsługę eksperymentalną emitowania metadanych typów elementów Decorator.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Wymuszaj używanie indeksowanych metod dostępu dla kluczy deklarowanych przy użyciu typu indeksowanego.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Upewnij się, że przesłaniające elementy członkowskie w klasach pochodnych są oznaczone modyfikatorem „override”.", - "Ensure_that_casing_is_correct_in_imports_6637": "Upewnij się, że wielkość liter jest poprawna w importach.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Upewnij się, że każdy plik może być bezpiecznie transponowany bez polegania na innych importach.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Upewnij się, że element „use strict” jest zawsze emitowany.", - "Entering_conditional_exports_6413": "Wprowadzanie eksportów warunkowych.", - "Entry_point_for_implicit_type_library_0_1420": "Punkt wejścia dla biblioteki niejawnych typów „{0}”", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punkt wejścia dla biblioteki niejawnych typów „{0}” o identyfikatorze packageId „{1}”", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions o identyfikatorze packageId „{1}”", - "Enum_0_used_before_its_declaration_2450": "Wyliczenie „{0}” zostało użyte przed zadeklarowaniem.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklaracje wyliczeń można scalać tylko z przestrzeniami nazw lub innymi deklaracjami wyliczeń.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Wszystkie deklaracje wyliczeń muszą być elementami const lub żadna nie może być elementem const.", - "Enum_member_expected_1132": "Oczekiwano składowych wyliczenia.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Składowa wyliczenia następująca po składowej liczbowej niebędącej literałem musi mieć inicjator, gdy jest włączona opcja „isolatedModules”.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicjatory składowych wyliczenia muszą być możliwe do obliczenia bez odwołań do symboli zewnętrznych z wyrażeniem --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "Składowa wyliczenia musi mieć inicjator.", - "Enum_name_cannot_be_0_2431": "Wyliczenie nie może mieć nazwy „{0}”.", - "Environment_Settings_6285": "Ustawienia środowiska", - "Errors_Files_6041": "Pliki z błędami", - "Escape_sequence_0_is_not_allowed_1488": "Sekwencja ucieczki „{0}” jest niedozwolona.", - "Examples_Colon_0_6026": "Przykłady: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Nadmierna złożoność podczas porównywania typów „{0}” i „{1}”.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadmierna głębokość stosu podczas porównywania typów „{0}” i „{1}”.", - "Exiting_conditional_exports_6416": "Wyjście z eksportu warunkowego.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Oczekiwano argumentów typu {0}-{1}; podaj je z tagiem „@extends”.", - "Expected_0_arguments_but_got_1_2554": "Oczekiwane argumenty: {0}, uzyskano: {1}.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Oczekiwano {0} argumentów, ale otrzymano {1}. Czy zapomniano dołączyć wartość „void” w argumencie typu obiektu „Promise”?", - "Expected_0_type_arguments_but_got_1_2558": "Oczekiwane argumenty typu: {0}, uzyskano: {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Oczekiwano argumentów typu {0}; podaj je z tagiem „@extends”.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Oczekiwano 1 argumentu, ale otrzymano 0. Element „new Promise()” wymaga wskazówki JSDoc, aby utworzyć element „resolve”, który można wywołać bez argumentów.", - "Expected_a_Unicode_property_name_1523": "Oczekiwano nazwy właściwości standardu Unicode.", - "Expected_a_Unicode_property_name_or_value_1527": "Oczekiwano nazwy lub wartości właściwości standardu Unicode.", - "Expected_a_Unicode_property_value_1525": "Oczekiwano wartości właściwości standardu Unicode.", - "Expected_a_capturing_group_name_1514": "Oczekiwano nazwy grupy przechwytywania.", - "Expected_a_class_set_operand_1520": "Oczekiwano operandu zestawu klas.", - "Expected_at_least_0_arguments_but_got_1_2555": "Oczekiwane argumenty: co najmniej {0}, uzyskano: {1}.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Oczekiwano odpowiadającego tagu zamykającego kodu JSX dla elementu „{0}”.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Oczekiwano odpowiedniego tagu zamykającego dla fragmentu kodu JSX.", - "Expected_for_property_initializer_1442": "Oczekiwano znaku „=” dla inicjatora właściwości.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Oczekiwany typ pola „{0}” w pliku „package.json” to „{1}”, a uzyskano typ „{2}”.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Jawnie określony rodzaj rozpoznawania modułów: „{0}”.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Nie można wykonać potęgowania wartości typu „bigint”, chyba że opcja „target” ma wartość „es2016” lub nowszą.", - "Export_0_from_module_1_90059": "Eksportuj „{0}” z modułu „{1}”", - "Export_all_referenced_locals_90060": "Eksportuj wszystkie przywoływane zmienne lokalne", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Nie można użyć przypisania eksportu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „export default” lub innego formatu modułu.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Przypisanie eksportu nie jest obsługiwane, gdy flaga „--module” ma postać „system”.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Deklaracja eksportu powoduje konflikt z wyeksportowaną deklaracją „{0}”.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Deklaracje eksportu są niedozwolone w przestrzeni nazw.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Specyfikator eksportu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias „{0}” wyeksportowanego typu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Wyeksportowany alias typu „{0}” ma nazwę prywatną „{1}” z modułu „{2}” lub używa tej nazwy.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "Wyeksportowana zmienna „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Eksporty i przypisania eksportów nie są dozwolone w rozszerzeniach modułów.", - "Expression_expected_1109": "Oczekiwano wyrażenia.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Wyrażenie musi być ujęte w nawiasy, aby było używane jako dekorator.", - "Expression_or_comma_expected_1137": "Oczekiwano wyrażenia lub przecinka.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Wyrażenie tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Wyrażenie tworzy typ unii, który jest zbyt złożony, aby go reprezentować.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Wynikiem rozpoznania wyrażenia jest element „_super” używany przez kompilator do przechwycenia odwołania do klasy bazowej.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_newTarget” używana przez kompilator do przechwytywania odwołania do metawłaściwości „new.target”.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_this” używana przez kompilator do przechwycenia odwołania do elementu „this”.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Nie można wywnioskować typu wyrażenia za pomocą wyrażenia --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzula Extends nie może zawierać wyrażenia z parametrem --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzula Extends dla wnioskowanego typu „{0}” ma nazwę prywatną „{1}” lub używa jej.", - "Extract_base_class_to_variable_90064": "Wyodrębnij klasę bazową do zmiennej", - "Extract_binding_expressions_to_variable_90066": "Wyodrębnianie wyrażeń powiązania do zmiennej", - "Extract_constant_95006": "Wyodrębnij stałą", - "Extract_default_export_to_variable_90065": "Wyodrębnij domyślny eksport do zmiennej", - "Extract_function_95005": "Wyodrębnij funkcję", - "Extract_to_0_in_1_95004": "Wyodrębnij do {0} w {1}", - "Extract_to_0_in_1_scope_95008": "Wyodrębnij do {0} w zakresie {1}", - "Extract_to_0_in_enclosing_scope_95007": "Wyodrębnij do {0} w zakresie otaczającym", - "Extract_to_interface_95090": "Wyodrębnianie do interfejsu", - "Extract_to_type_alias_95078": "Wyodrębnianie do aliasu typu", - "Extract_to_typedef_95079": "Wyodrębnianie do elementu typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Wyodrębnij do zmiennej i zamień na „{0} as typeof {0}”", - "Extract_type_95077": "Typ wyodrębniania", - "FILE_6035": "PLIK", - "FILE_OR_DIRECTORY_6040": "PLIK LUB KATALOG", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Nie można odnaleźć elementu peerDependency „{0}”.", - "Failed_to_resolve_under_condition_0_6415": "Nie można rozpoznać pod warunkiem „{0}”.", - "Fallthrough_case_in_switch_7029": "Przepuszczająca klauzula case w instrukcji switch.", - "File_0_does_not_exist_6096": "Plik „{0}” nie istnieje.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” nie istnieje.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” istnieje.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Plik „{0}” ma nieobsługiwane rozszerzenie. Obsługiwane są tylko rozszerzenia {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Plik „{0}” jest plikiem JavaScript. Czy chodziło Ci o włączenie opcji „allowJs”?", - "File_0_is_not_a_module_2306": "Plik „{0}” nie jest modułem.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Plik „{0}” nie znajduje się na liście plików projektu „{1}”. Projekty muszą zawierać listę wszystkich plików lub używać wzorca „include”.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Plik „{0}” nie znajduje się w katalogu „rootDir” „{1}”. Katalog „rootDir” powinien zawierać wszystkie pliki źródłowe.", - "File_0_not_found_6053": "Nie można odnaleźć pliku '{0}'.", - "File_Layout_6284": "Układ pliku", - "File_Management_6245": "Zarządzanie plikami", - "File_appears_to_be_binary_1490": "Plik jest prawdopodobnie binarny.", - "File_change_detected_Starting_incremental_compilation_6032": "Wykryto zmianę pliku. Trwa rozpoczynanie kompilacji przyrostowej...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Plik jest modułem CommonJS, ponieważ element „{0}” nie ma pola „type”", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Plik jest modułem CommonJS, ponieważ element „{0}” ma pole „type”, którego wartość nie jest „module”", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Plik jest modułem CommonJS, ponieważ nie znaleziono pliku „package.json”", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Plik jest modułem ECMAScript, ponieważ element „{0}” ma pole „type” z wartością „module”", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Plik jest modułem CommonJS; może zostać przekonwertowany na moduł ES.", - "File_is_default_library_for_target_specified_here_1426": "Plik to domyślna biblioteka dla elementu docelowego określonego w tym miejscu.", - "File_is_entry_point_of_type_library_specified_here_1419": "Plik to punkt wejścia biblioteki typów określonej w tym miejscu.", - "File_is_included_via_import_here_1399": "Plik jest dołączony w tym miejscu za pomocą importu.", - "File_is_included_via_library_reference_here_1406": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki.", - "File_is_included_via_reference_here_1401": "Plik jest dołączony w tym miejscu za pomocą odwołania.", - "File_is_included_via_type_library_reference_here_1404": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki typów.", - "File_is_library_specified_here_1423": "Plik to biblioteka określona w tym miejscu.", - "File_is_matched_by_files_list_specified_here_1410": "Plik jest zgodny z listą „files” określoną w tym miejscu.", - "File_is_matched_by_include_pattern_specified_here_1408": "Plik jest zgodny z wzorcem dołączania określonym w tym miejscu.", - "File_is_output_from_referenced_project_specified_here_1413": "Plik to dane wyjściowe z przywoływanego projektu określonego w tym miejscu.", - "File_is_output_of_project_reference_source_0_1428": "Plik to dane wyjściowe ze źródła odwołania do projektu „{0}”", - "File_is_source_from_referenced_project_specified_here_1416": "Plik to źródło z przywoływanego projektu określonego w tym miejscu.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Nazwa pliku „{0}” różni się od już dołączonej nazwy pliku „{1}” tylko wielkością liter.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zamiast tego wyszukaj „{2}”.", - "File_name_0_has_a_1_extension_stripping_it_6132": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zostanie ono usunięte.", - "File_redirects_to_file_0_1429": "Plik przekierowuje do pliku „{0}”", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specyfikacja pliku nie może zawierać katalogu nadrzędnego („..”) wyświetlanego po symbolu wieloznacznym katalogu rekursywnego („**”): „{0}”.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specyfikacja pliku nie może kończyć się cyklicznym symbolem wieloznacznym katalogu („**”): „{0}”.", - "Filters_results_from_the_include_option_6627": "Filtruj wyniki z opcji „include”.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Napraw wszystkie wykryte błędy pisowni", - "Fix_all_expressions_possibly_missing_await_95085": "Napraw wszystkie wyrażenia, w których prawdopodobnie brakuje operatora „await”", - "Fix_all_implicit_this_errors_95107": "Usuń wszystkie niejawne błędy „this”", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Napraw wszystkie niepoprawne zwracane typy funkcji asynchronicznych", - "Fix_all_with_type_only_imports_95182": "Napraw wszystko za pomocą importów tylko typów", - "For_nodejs_Colon_6287": "W przypadku środowiska nodejs:", - "Found_0_errors_6217": "Znaleziono błędy: {0}.", - "Found_0_errors_Watching_for_file_changes_6194": "Znalezione błędy: {0}. Obserwowanie zmian plików.", - "Found_0_errors_in_1_files_6261": "Znaleziono błędy {0} w plikach {1}.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Znaleziono błędy {0} w tym samym pliku, zaczynając od: {1}", - "Found_1_error_6216": "Znaleziono 1 błąd.", - "Found_1_error_Watching_for_file_changes_6193": "Znaleziono 1 błąd. Obserwowanie zmian plików.", - "Found_1_error_in_0_6259": "Znaleziono 1 błąd w {0}", - "Found_package_json_at_0_6099": "Znaleziono plik „package.json” w lokalizacji „{0}”.", - "Found_peerDependency_0_with_1_version_6282": "Znaleziono element peerDependency „{0}” z wersją „{1}”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Definicje klas automatycznie używają trybu z ograniczeniami.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Moduły automatycznie używają trybu z ograniczeniami.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dla wyrażenia funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Brak implementacji funkcji lub nie występuje ona bezpośrednio po deklaracji.", - "Function_implementation_name_must_be_0_2389": "Implementacja funkcji musi mieć nazwę „{0}”.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dla funkcji niejawnie określono zwracany typ „any”, ponieważ nie zawiera ona adnotacji zwracanego typu i jest przywoływana bezpośrednio lub pośrednio w jednym z jej zwracanych wyrażeń.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Funkcja nie zawiera końcowej instrukcji return, a zwracany typ nie obejmuje wartości „undefined”.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkcja musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", - "Function_not_implemented_95159": "Funkcja nie jest zaimplementowana.", - "Function_overload_must_be_static_2387": "Przeciążenie funkcji musi być statyczne.", - "Function_overload_must_not_be_static_2388": "Przeciążenie funkcji nie może być statyczne.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie unii.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dla typu funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkcja z treścią może tylko scalać z klasami, które są otaczające.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generuj pliki d.ts z plików TypeScript i JavaScript w projekcie.", - "Generate_get_and_set_accessors_95046": "Generuj metody dostępu „get” i „set”.", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generuj metody dostępu „get” i „set” dla wszystkich właściwości przesłaniających", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Generuje profil procesora CPU.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Generuje mapę źródła dla poszczególnych plików „.d.ts”.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Generuje śledzenie zdarzeń i listę typów.", - "Generates_corresponding_d_ts_file_6002": "Generuje odpowiadający plik „d.ts”.", - "Generates_corresponding_map_file_6043": "Generuje odpowiadający plik „map”.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Generator niejawnie ma typ wstrzymania „{0}”. Rozważ podanie adnotacji zwracanego typu.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Generatory nie są dozwolone w otaczającym kontekście.", - "Generic_type_0_requires_1_type_argument_s_2314": "Typ ogólny „{0}” wymaga następującej liczby argumentów typu: {1}.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Typ ogólny „{0}” wymaga od {1} do {2} argumentów typu.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Globalne eksporty modułu mogą występować tylko na najwyższym poziomie.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globalne eksporty modułu mogą występować tylko w plikach deklaracji.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Globalne eksporty modułu mogą występować tylko w plikach modułów.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Typ globalny „{0}” musi być typem klasy lub interfejsu.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Typ globalny „{0}” musi mieć następującą liczbę parametrów typu: {1}.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "W przypadku ponownego kompilowania w parametrach „--incremental” i „--watch” przyjmuje się, że zmiany w pliku będą miały wpływ tylko na pliki bezpośrednio od niego zależne.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Określ, że zmiany w pliku będą wpływać tylko na pliki bezpośrednio od niego zależne podczas ponownego kompilowania w projektach używających trybów „przyrostowo” i „obserwacja”.", - "Hexadecimal_digit_expected_1125": "Oczekiwano cyfry szesnastkowej.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym na najwyższym poziomie modułu.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Definicje klas są określane automatycznie w trybie z ograniczeniami.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Oczekiwano identyfikatora. Element „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Moduły są określane automatycznie w trybie z ograniczeniami.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym, którego nie można użyć w tym miejscu.", - "Identifier_expected_1003": "Oczekiwano identyfikatora.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Oczekiwano identyfikatora. Ciąg „__esModule” jest zastrzeżony jako eksportowany znacznik podczas transformowania modułów ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Oczekiwano identyfikatora lub literału ciągu.", - "Identifier_string_literal_or_number_literal_expected_1496": "Oczekiwano identyfikatora, literału ciągu lub literału liczbowego.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet \"{0}\" faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Jeśli pakiet „{0}” rzeczywiście uwidacznia ten moduł, spróbuj dodać nowy plik deklaracji (.d.ts) zawierający „declare module”{1}';`", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Zignoruj znaleziony plik tsconfig i skompiluj za pomocą opcji wiersza polecenia i plików.", - "Ignore_this_error_message_90019": "Ignoruj ten komunikat o błędzie", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorując plik tsconfig.json, kompiluje określone pliki z domyślnymi opcjami kompilatora.", - "Implement_all_inherited_abstract_classes_95040": "Zaimplementuj wszystkie dziedziczone klasy abstrakcyjne", - "Implement_all_unimplemented_interfaces_95032": "Zaimplementuj wszystkie niezaimplementowane interfejsy", - "Implement_inherited_abstract_class_90007": "Wdróż odziedziczoną klasę abstrakcyjną", - "Implement_interface_0_90006": "Implementuj interfejs „{0}”", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzula implements wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Niejawna konwersja typu „symbol” na „string” zakończy się niepowodzeniem w czasie wykonywania. Rozważ opakowywanie tego wyrażenia w elemencie „String(...)”.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}\" powoduje konflikt z wartością globalną używaną w tym pliku, dlatego musi być zadeklarowany z importem tylko typu, gdy jest włączona opcja „isolatedModules”.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}” powoduje konflikt z wartością lokalną, dlatego musi być zadeklarowany za pomocą importu tylko typu, gdy jest włączona opcja „isolatedModules”.", - "Import_0_from_1_90013": "Importuj element „{0}” z lokalizacji „{1}”", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Wartości atrybutu importu muszą być wyrażeniami literału ciągu.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Asercje importu są niedozwolone w instrukcjach, które kompilują do wywołań „require” CommonJS.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Asercje importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Asercji importu nie można używać z importami ani eksportami ograniczonymi do tylko danego typu.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Asercje importu zostały zastąpione atrybutami importu. Użyj instrukcji \"with\" zamiast \"assert\".", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Nie można użyć przypisania importu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „import * as ns from \"mod\"”, „import {a} from \"mod\"” lub „import d from \"mod\"” albo innego formatu modułu.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Wartości atrybutów importu muszą być wyrażeniami literału ciągu.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atrybuty importu są niedozwolone w instrukcjach kompilowanych do wywołań „require” CommonJS.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Atrybuty importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atrybutów importu nie można używać z importami ani eksportami tylko typów.", - "Import_declaration_0_is_using_private_name_1_4000": "Deklaracja importu „{0}” używa nazwy prywatnej „{1}”.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklaracja importu powoduje konflikt z deklaracją lokalną „{0}”.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklaracje importu w przestrzeni nazw nie mogą odwoływać się do modułu.", - "Import_emit_helpers_from_tslib_6139": "Importuj pomocników emitowania z elementu „tslib”.", - "Import_may_be_converted_to_a_default_import_80003": "Import może zostać przekonwertowany na import domyślny.", - "Import_name_cannot_be_0_2438": "Import nie może mieć nazwy „{0}”.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklaracja importu lub eksportu w deklaracji otaczającego modułu nie może przywoływać modułu za pomocą jego nazwy względnej.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Specyfikator importu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", - "Imported_via_0_from_file_1_1393": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}”", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}”", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Importowanie pliku JSON do modułu ECMAScript wymaga atrybutu importu „type: „json””, gdy parametr „module” ma wartość „{0}”.", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nie są dozwolone w rozszerzeniach modułów. Rozważ przeniesienie ich do obejmującego modułu zewnętrznego.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "W deklaracjach wyliczenia otoczenia inicjator składowej musi być wyrażeniem stałym.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "W przypadku wyliczenia z wieloma deklaracjami tylko jedna deklaracja może pominąć inicjator dla pierwszego elementu wyliczenia.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dołącz listę plików. Nie obsługuje to wzorców globalnych, w przeciwieństwie do elementu „include”.", - "Include_modules_imported_with_json_extension_6197": "Uwzględnij moduły zaimportowane z rozszerzeniem „json”", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Uwzględnij kod źródłowy w mapach źródła wewnątrz emitowanego kodu JavaScript.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Uwzględnij pliki mapy źródła w emitowanym kodzie JavaScript.", - "Includes_imports_of_types_referenced_by_0_90054": "Obejmuje importy typów przywoływanych przez element \"{0}\"", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Zawarcie elementu --watch spowoduje, że -w rozpocznie obserwowanie bieżącego projektu w kierunku zmian w plikach. Po skonfigurowaniu ustawienia możesz określić tryb obserwacji za pomocą:", - "Incomplete_quantifier_Digit_expected_1505": "Niekompletny kwantyfikator. Oczekiwano cyfry.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "Brak sygnatury indeksu dla typu „{0}” w typie „{1}”.", - "Index_signature_in_type_0_only_permits_reading_2542": "Sygnatura indeksu w typie „{0}” zezwala tylko na odczytywanie.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Wszystkie poszczególne deklaracje w scalonej deklaracji „{0}” muszą być wyeksportowane lub lokalne.", - "Infer_all_types_from_usage_95023": "Wywnioskuj wszystkie typy na podstawie użycia", - "Infer_function_return_type_95148": "Wnioskuj zwracany typ funkcji", - "Infer_parameter_types_from_usage_95012": "Wnioskuj typy parametrów na podstawie użycia", - "Infer_this_type_of_0_from_usage_95080": "Wnioskuj typ „this” elementu „{0}” na podstawie użycia", - "Infer_type_of_0_from_usage_95011": "Wnioskuj typ elementu „{0}” na podstawie użycia", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Wnioskowanie z wyrażeń klasy nie jest obsługiwane w przypadku wyrażenia --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Zainicjuj właściwość „{0}” w konstruktorze", - "Initialize_static_property_0_90021": "Zainicjuj właściwość statyczną „{0}”", - "Initializer_for_property_0_2811": "Inicjator właściwości \"{0}\"", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicjator zmiennej składowej wystąpienia „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego w konstruktorze.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicjatory są niedozwolone w otaczających kontekstach.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicjuje projekt TypeScript i tworzy plik tsconfig.json.", - "Inline_variable_95184": "Zmienna wbudowana", - "Insert_command_line_options_and_files_from_a_file_6030": "Wstaw opcje wiersza polecenia i pliki z pliku.", - "Install_0_95014": "Zainstaluj składnik „{0}”", - "Install_all_missing_types_packages_95033": "Zainstaluj wszystkie brakujące pakiety typów", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Interfejs „{0}” nie może jednocześnie rozszerzać typów „{1}” i „{2}”.", - "Interface_0_incorrectly_extends_interface_1_2430": "Interfejs „{0}” niepoprawnie rozszerza interfejs „{1}”.", - "Interface_declaration_cannot_have_implements_clause_1176": "Deklaracja interfejsu nie może mieć klauzuli „implements”.", - "Interface_must_be_given_a_name_1438": "Interfejs musi mieć nazwę.", - "Interface_name_cannot_be_0_2427": "Interfejs nie może mieć nazwy „{0}”.", - "Interop_Constraints_6252": "Ograniczenia międzyoperacyjności", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretuj opcjonalne typy właściwości jako zapisane, zamiast dodawać element \"undefined\".", - "Invalid_character_1127": "Nieprawidłowy znak.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Nieprawidłowy specyfikator importu „{0}” nie ma możliwych rozwiązań.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nieprawidłowa nazwa modułu w rozszerzeniu. Moduł „{0}” jest rozpoznawany jako moduł bez typu na poziomie „{1}”, którego nie można rozszerzyć.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nieprawidłowa nazwa modułu w rozszerzeniu. Nie można znaleźć modułu „{0}”.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Nieprawidłowy opcjonalny łańcuch z nowego wyrażenia. Czy chodziło Ci o wywołanie „{0}()”?", - "Invalid_reference_directive_syntax_1084": "Nieprawidłowa składnia dyrektywy „reference”.", - "Invalid_syntax_in_decorator_1498": "Nieprawidłowa składnia w dekoratorze.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Nieprawidłowe użycie elementu \"{0}\". Nie można go użyć wewnątrz bloku statycznego klasy.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Nieprawidłowe użycie elementu „{0}”. Moduły są określane automatycznie w trybie z ograniczeniami.", - "Invalid_use_of_0_in_strict_mode_1100": "Nieprawidłowe użycie elementu „{0}” w trybie z ograniczeniami.", - "Invalid_value_for_ignoreDeprecations_5103": "Nieprawidłowa wartość parametru „--ignoreDeprecations”.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Nieprawidłowa wartość elementu „jsxFactory”. „{0}” to nie jest prawidłowy identyfikator ani kwalifikowana nazwa.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Nieprawidłowa wartość elementu „jsxFragmentFactory”. „{0}” nie jest prawidłowym identyfikatorem ani kwalifikowaną nazwą.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Nieprawidłowa wartość opcji „--reactNamespace”. Element „{0}” nie jest prawidłowym identyfikatorem.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Prawdopodobnie brakuje przecinka, aby oddzielić te dwa wyrażenia szablonu. Tworzą one wyrażenie szablonu z tagami, którego nie można wywołać.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Jego typ elementu „{0}” nie jest prawidłowym elementem JSX.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Jego typ wystąpienia „{0}” nie jest prawidłowym elementem JSX.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Jego zwracany typ „{0}” nie jest prawidłowym elementem JSX.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Jego typ „{0}” nie jest prawidłowym typem rozszerzenia JSX.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Element JSDoc „@{0} {1}” nie pasuje do klauzuli „extends {2}”.", - "JSDoc_0_is_not_attached_to_a_class_8022": "Element JSDoc „@{0}” nie został dołączony do klasy.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Element „...” JSDoc może występować tylko w ostatnim parametrze sygnatury.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Tag JSDoc „@param” tag ma nazwę „{0}”, ale nie ma parametru o tej nazwie.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Tag JSDoc „@param” ma nazwę „{0}”, ale nie istnieje parametr o tej nazwie. Byłby on zgodny z elementem „arguments”, gdyby miał typ tablicy.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Element JSDoc typedef można przekonwertować na typ TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Tag „@typedef” JSDoc powinien mieć adnotację typu lub powinien po nim następować tag „@property” lub „@member”.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Element JSDoc typedefs można przekonwertować na typy TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc mogą być używane wyłącznie w komentarzach dokumentacji.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc mogą być przenoszone do typów TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atrybuty JSX muszą mieć przypisane wyrażenie, które nie jest puste.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "Element JSX „{0}” nie ma odpowiedniego tagu zamykającego.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Klasa elementów JSX nie obsługuje atrybutów, ponieważ nie ma właściwości „{0}”.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Dla elementu JSX niejawnie określono typ „any”, ponieważ interfejs „JSX.{0}” nie istnieje.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Dla elementu JSX niejawnie określono typ „any”, ponieważ typ globalny „JSX.Element” nie istnieje.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Typ elementu JSX „{0}” nie ma sygnatury konstrukcji ani wywołania.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementy JSX nie mogą mieć wielu atrybutów o tej samej nazwie.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Wyrażenia JSX nie mogą używać operatora przecinka. Czy chodziło Ci o zapisanie tablicy?", - "JSX_expressions_must_have_one_parent_element_2657": "Wyrażenia JSX muszą mieć jeden element nadrzędny.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment kodu JSX nie ma odpowiedniego tagu zamykającego.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Wyrażenia dostępu do właściwości JSX nie mogą zawierać nazw przestrzeni nazw JSX", - "JSX_spread_child_must_be_an_array_type_2609": "Element podrzędny rozkładu JSX musi być typem tablicy.", - "JavaScript_Support_6247": "Pomoc techniczna języka JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "Cel skoku nie może przekraczać granicy funkcji.", - "KIND_6034": "RODZAJ", - "Keywords_cannot_contain_escape_characters_1260": "Słowa kluczowe nie mogą zawierać znaków ucieczki.", - "LOCATION_6037": "LOKALIZACJA", - "Language_and_Environment_6254": "Język i środowisko", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Lewa strona operatora „przecinek” jest nieużywana i nie ma żadnych efektów ubocznych.", - "Library_0_specified_in_compilerOptions_1422": "Biblioteka „{0}” została określona w opcjach compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Biblioteka jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", - "Line_break_not_permitted_here_1142": "Podział wiersza nie jest tutaj dozwolony.", - "Line_terminator_not_permitted_before_arrow_1200": "Terminator wiersza nie jest dozwolony przed strzałką.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista sufiksów nazw plików do przeszukania podczas rozpoznawania modułu.", - "List_of_folders_to_include_type_definitions_from_6161": "Lista folderów, z których mają być uwzględnione definicje typów.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista folderów głównych, których połączona zawartość reprezentuje strukturę projektu w czasie wykonywania.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Ładowanie elementu „{0}” z katalogu głównego „{1}”, lokalizacja kandydata: „{2}”.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Rejestruj ścieżki używane podczas procesu „moduleResolution”.", - "Longest_matching_prefix_for_0_is_1_6108": "Najdłuższy zgodny prefiks dla „{0}” to „{1}”.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Wyszukiwanie w folderze „node_modules”, początkowa lokalizacja: „{0}”.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Wszystkie wywołania „super()” powinny być pierwszą instrukcją w konstruktorze", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Określ, że element keyof ma zwracać tylko ciągi zamiast ciągów, liczb i symboli. Starsza opcja.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Ustaw wywołanie „super()” jako pierwszą instrukcję w konstruktorze", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Zmapowany typ obiektu niejawnie ma typ szablonu „any”.", - "Mark_array_literal_as_const_90070": "Oznaczanie literału tablicy jako stałego", - "Matched_0_condition_1_6403": "Dopasowano „{0}” warunku „{1}”.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Dopasowywane domyślnie do wzorca dołączania „**/*”", - "Matched_by_include_pattern_0_in_1_1407": "Zgodne z wzorcem dołączania „{0}” w elemencie „{1}”", - "Member_0_implicitly_has_an_1_type_7008": "Dla składowej „{0}” niejawnie określono typ „{1}”.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Element członkowski „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", - "Merge_conflict_marker_encountered_1185": "Napotkano znacznik konfliktu scalania.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Scalona deklaracja „{0}” nie może zawierać domyślnej deklaracji eksportu. Rozważ dodanie oddzielnej deklaracji „export default {0}” zamiast niej.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Metawłaściwość „{0}” jest dozwolona tylko w treści deklaracji funkcji, wyrażeniu funkcji lub konstruktorze.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda „{0}” nie może mieć implementacji, ponieważ jest oznaczona jako abstrakcyjna.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", - "Method_not_implemented_95158": "Metoda nie jest zaimplementowana.", - "Modifiers_cannot_appear_here_1184": "Modyfikatory nie mogą występować w tym miejscu.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Moduł „{0}” może być importowany domyślnie tylko przy użyciu flagi „{1}”", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Nie można zaimportować modułu „{0}” przy użyciu tej konstrukcji. Specyfikator jest rozpoznawany tylko jako moduł ES, którego nie można zaimportować za pomocą wywołania „require”. Zamiast tego użyj importu ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale jest on eksportowany jako „{2}”.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale nie jest on eksportowany.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Moduł „{0}” nie odwołuje się do typu, ale jest tutaj używany jako typ. Czy chodziło Ci o „typeof import(„{0}”)”?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Moduł „{0}” nie odwołuje się do wartości, ale jest tutaj używany jako wartość.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Moduł {0} już wyeksportował składową o nazwie „{1}”. Zastanów się nad jawnym ponownym eksportem, aby rozstrzygnąć niejednoznaczność.", - "Module_0_has_no_default_export_1192": "Moduł „{0}” nie ma eksportu domyślnego.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Moduł „{0}” nie ma eksportu domyślnego. Czy zamiast tego miał zostać użyty element „import { {1} } from {0}”?", - "Module_0_has_no_exported_member_1_2305": "Moduł „{0}” nie ma wyeksportowanej składowej „{1}”.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Moduł „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy zamiast tego miał zostać użyty element „import {1} from {0}”?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Moduł „{0}” został ukryty przez deklarację lokalną o takiej samej nazwie.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Moduł „{0}” używa elementu „export =” i nie może być używany z elementem „export *”.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany lokalnie w pliku „{1}”.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie ustawiono parametru „--allowArbitraryExtensions”.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie jest ustawiona opcja „--jsx”.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Moduł „{0}” został rozpoznany jako „{1}”, ale opcja „--resolveJsonModule” nie jest używana.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "W nazwach deklaracji modułu można używać tylko ciągi ujęte w cudzysłów \" lub „”.", - "Module_name_0_matched_pattern_1_6092": "Nazwa modułu: „{0}”, dopasowany wzorzec: „{1}”.", - "Module_name_0_was_not_resolved_6090": "======== Nazwa modułu „{0}” nie została rozpoznana. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}”. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Rodzaj rozpoznawania modułów nie został podany. Zostanie użyty rodzaj „{0}”.", - "Module_resolution_using_rootDirs_has_failed_6111": "Nie można rozpoznać modułów przy użyciu opcji „rootDirs”.", - "Modules_6244": "Moduły", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Przenieś modyfikatory elementów krotki z etykietami do etykiet", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Przenieś wyrażenie w eksporcie domyślnym do zmiennej i dodaj do niej adnotację typu.", - "Move_to_a_new_file_95049": "Przenieś do nowego pliku", - "Move_to_file_95178": "Przenieś do pliku", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Kolejne następujące po sobie separatory liczbowe nie są dozwolone.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Konstruktor nie może mieć wielu implementacji.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NOWY WIERSZ", - "Name_is_not_valid_95136": "Nazwa nie jest prawidłowa", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Nazwane grupy przechwytywania są dostępne tylko w przypadku wartości docelowej „ES2018” lub nowszej.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Nazwane grupy przechwytywania o tej samej nazwie muszą się wzajemnie wykluczać.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Nazwane importy są niedozwolone w odroczonym imporcie.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Nazwane importy z pliku JSON do modułu ECMAScript są niedozwolone, gdy parametr „module” ma wartość „{0}”.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Nazwane właściwości „{0}” typów „{1}” i „{2}” nie są identyczne.", - "Namespace_0_has_no_exported_member_1_2694": "Przestrzeń nazw „{0}” nie ma wyeksportowanej składowej „{1}”.", - "Namespace_must_be_given_a_name_1437": "Przestrzeń nazw musi mieć nazwę.", - "Namespace_name_cannot_be_0_2819": "Przestrzeń nazw nie może mieć nazwy „{0}”.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Przestrzenie nazw są niedozwolone w globalnych plikach skryptów, gdy włączona jest opcja „{0}”. Jeśli ten plik nie jest przeznaczony do bycia skryptem globalnym, ustaw parametr „moduleDetection” na wartość „force” lub dodaj pustą instrukcję „export {}”.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Do parametrów „this” nie można stosować dekoratorów ani modyfikatorów.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Żaden z konstruktorów podstawowych nie ma określonej liczby argumentów typu.", - "No_constituent_of_type_0_is_callable_2755": "Żadna składowa typu „{0}” nie jest wywoływalna.", - "No_constituent_of_type_0_is_constructable_2759": "Żadnej składowej typu „{0}” nie można skonstruować.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nie znaleziono żadnej sygnatury indeksu z parametrem typu „{0}” w typie „{1}”.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nie można znaleźć danych wejściowych w pliku konfiguracji „{0}”. Określone ścieżki „include” to „{1}”, a „exclude” to „{2}”.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Nie jest już obsługiwane. W starszych wersjach umożliwia ręczne konfigurowanie kodowania tekstu dla odczytywania plików.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Żadne przeciążenie nie oczekuje {0} argumentów, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Żadne przeciążenie nie oczekuje {0} argumentów typu, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów typu.", - "No_overload_matches_this_call_2769": "Żadne przeciążenie nie jest zgodne z tym wywołaniem.", - "No_type_could_be_extracted_from_this_type_node_95134": "Nie można było wyodrębnić żadnego typu z tego węzła typu", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Nie istnieje żadna wartość w zakresie dla właściwości skrótowej „{0}”. Zadeklaruj ją lub udostępnij inicjatora.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Klasa nieabstrakcyjna „{0}” nie implementuje odziedziczonej abstrakcyjnej składowej „{1}” z klasy „{2}”.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2} i {3} więcej.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Wyrażenie klasy nieabstrakcyjnej nie implementuje odziedziczonej abstrakcyjnej składowej „{0}” z klasy „{1}”.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Brak implementacji nieabstrakcyjnych wyrażeń klasy dla następujących składowych elementu „{0}”: {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "W nieabstrakcyjnym wyrażeniu klasy brakuje implementacji dla następujących składowych elementu „{0}”: {1} i {2} więcej.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Asercji o wartości innej niż null można używać tylko w plikach TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "W tym miejscu zadeklarowano parametr inny niż prosty.", - "Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki w kodzie zwracają wartość.", - "Not_all_constituents_of_type_0_are_callable_2756": "Nie wszystkie składowe typu „{0}” są wywoływalne.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Nie wszystkie składowe typu „{0}” można skonstruować.", - "Numbers_out_of_order_in_quantifier_1506": "Liczby poza kolejnością w kwantyfikatorze.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Literały liczbowe z wartościami bezwzględnymi równymi 2^53 lub większymi są zbyt duże, aby mogły być dokładnie reprezentowane jako liczby całkowite.", - "Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.", - "Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.", - "Object_is_possibly_null_2531": "Obiekt ma prawdopodobnie wartość „null”.", - "Object_is_possibly_null_or_undefined_2533": "Obiekt ma prawdopodobnie wartość „null” lub „undefined”.", - "Object_is_possibly_undefined_2532": "Obiekt ma prawdopodobnie wartość „undefined”.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Dla literału obiektu można określić tylko znane właściwości, a właściwość „{0}” nie istnieje w typie „{1}”.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literał obiektu może określać wyłącznie znane właściwości, ale element „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Dla właściwości „{0}” literału obiektu niejawnie określono typ „{1}”.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Obiektów zawierających właściwości skrótowe nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Obiektów zawierających przypisania rozproszone nie można wywnioskować za pomocą parametru --isolatedDeclarations.", - "Octal_digit_expected_1178": "Oczekiwano cyfry ósemkowej.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Ósemkowe sekwencje ucieczki i odwołania wsteczne nie są dozwolone w klasie znaków. Jeśli było to zamierzone jako sekwencja ucieczki, użyj składni „{0}”.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Ósemkowe sekwencje ucieczki są niedozwolone. Użyj składni „{0}”.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literały ósemkowe są niedozwolone. Użyj składni „{0}”.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedną z wartości „{0}.{1}” jest ciąg „{2}”, a druga przyjmuje się, że jest nieznaną wartością liczbową.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "W instrukcji „for...in” jest dozwolona tylko pojedyncza deklaracja zmiennej.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "W instrukcji „for...of” jest dozwolona tylko pojedyncza deklaracja zmiennej.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Tylko funkcja typu void może być wywoływana za pomocą słowa kluczowego „new”.", - "Only_ambient_modules_can_use_quoted_names_1035": "Tylko otaczające moduły mogą używać nazw w cudzysłowie.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Tylko moduły „amd” i „system” są obsługiwane razem z parametrem --{0}.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Tylko tablice const można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", - "Only_emit_d_ts_declaration_files_6014": "Emituj tylko pliki deklaracji „d.ts”.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Generuj tylko pliki d.ts, a nie pliki JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Tylko publiczne i chronione metody klasy bazowej są dostępne przy użyciu słowa kluczowego „super”.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Nie można zastosować operatora „{0}” do typu „{1}”.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Nie można zastosować operatora „{0}” do typów „{1}” i „{2}”.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatory nie mogą być mieszane w klasie znaków. Zamiast tego zawijaj go w zagnieżdżonej klasie.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Rezygnacja ze sprawdzania odwołań do wielu projektów podczas edytowania projektu.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Opcja „{0}={1}” została usunięta. Usuń go z konfiguracji.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Opcja „{0}={1}” jest przestarzała i przestanie działać w języku TypeScript {2}. Określ parametr compilerOption „ignoreDeprecations”: „{3}”, aby wyciszyć ten błąd.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „false” lub „null” w wierszu polecenia.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „null” w wierszu polecenia.", - "Option_0_can_only_be_specified_on_command_line_6266": "Opcję „{0}” można określić tylko w wierszu polecenia.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Opcja „{0}” może być używana tylko w przypadku podania opcji „--inlineSourceMap” lub „--sourceMap”.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Opcji „{0}” można używać tylko wtedy, gdy parametr „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Opcji „{0}” można używać tylko wtedy, gdy element „module” ma wartość „preserve”, „commonjs” lub „es2015” lub nowszą.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Nie można określić opcji „{0}”, jeśli opcja „jsx” ma wartość „{1}”.", - "Option_0_cannot_be_specified_with_option_1_5053": "Opcji „{0}” nie można określić razem z opcją „{1}”.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Opcji „{0}” nie można określić bez opcji „{1}”.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Opcji „{0}” nie można określić bez opcji „{1}” lub opcji „{2}”.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Opcja „{0}” została usunięta. Usuń go z konfiguracji.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Opcja „{0}” jest przestarzała i przestanie działać w języku TypeScript {1}. Określ parametr compilerOption „ignoreDeprecations”: „{2}”, aby wyciszyć ten błąd.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Opcja „{0}\" jest nadmiarowa i nie można jej określić za pomocą opcji „{1}”.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Opcja „allowImportingTsExtensions” może być używana tylko wtedy, gdy jest ustawiona wartość „noEmit”, „emitDeclarationOnly” lub „rewriteRelativeImportExtensions”.", - "Option_build_must_be_the_first_command_line_argument_6369": "Opcja „--build” musi być pierwszym argumentem wiersza polecenia.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Opcji „isolatedModules” można użyć tylko wtedy, gdy podano opcję „--module” lub opcja „target” określa cel „ES2015” lub wyższy.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Opcja „moduleResolution” musi być ustawiona na wartość „{0}” (lub pozostać nieokreślona), gdy opcja „module” jest ustawiona na „{1}”.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Opcja „module” musi mieć wartość „{0}”, gdy opcja „moduleResolution” ma wartość „{1}”.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Opcja „preserveConstEnums” nie może być wyłączona, gdy opcja „{0}” jest włączona.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Nie można mieszać opcji „project” z plikami źródłowymi w wierszu polecenia.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „moduleResolution” ma wartość „classic”.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „module” ma wartość „none”, „system” lub „umd”.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Nie można użyć opcji „verbatimModuleSyntax”, gdy parametr „module” ma wartość „UMD”, „AMD” lub „System”.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Nie można połączyć opcji „{0}” i „{1}”.", - "Options_Colon_6027": "Opcje:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Inne dane wyjściowe", - "Output_Formatting_6256": "Formatowanie danych wyjściowych", - "Output_compiler_performance_information_after_building_6615": "Informacje o wydajności kompilatora danych wyjściowych po skompilowaniu.", - "Output_directory_for_generated_declaration_files_6166": "Katalog wyjściowy dla wygenerowanych plików deklaracji.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Plik wyjściowy „{0}” nie został utworzony na podstawie pliku źródłowego „{1}”.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono element „{1}”", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono wartość „none” dla opcji „--module”", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Podaj bardziej szczegółowe informacje o wydajności kompilatora po zakończeniu kompilacji.", - "Overload_0_of_1_2_gave_the_following_error_2772": "Przeciążenie {0} z {1}, „{2}”, zwróciło następujący błąd.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Wszystkie sygnatury przeciążeń muszą być abstrakcyjne lub nieabstrakcyjne.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Wszystkie sygnatury przeciążeń muszą być otaczającymi sygnaturami lub żadna nie może być otaczającą sygnaturą.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Wszystkie sygnatury przeciążeń muszą być wyeksportowane lub żadna nie może być wyeksportowana.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Wszystkie sygnatury przeciążeń muszą być opcjonalne lub wymagane.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Wszystkie sygnatury przeciążeń muszą być publiczne, prywatne lub chronione.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Parametr „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego po nim.", - "Parameter_0_cannot_reference_itself_2372": "Parametr „{0}” nie może odwoływać się do siebie samego.", - "Parameter_0_implicitly_has_an_1_type_7006": "Dla parametru „{0}” niejawnie określono typ „{1}”.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Parametr „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Parametr „{0}” nie znajduje się w tym samym położeniu co parametr „{1}”.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu zewnętrznego „{2}” lub używa tej nazwy, ale nie można go nazwać.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Parametr „{0}” metody dostępu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Parametr „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametr nie może mieć znaku zapytania i inicjatora.", - "Parameter_declaration_expected_1138": "Oczekiwano deklaracji parametru.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr ma nazwę, ale nie ma typu. Czy chodziło Ci o „{0}: {1}”?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modyfikatorów parametrów można używać tylko w plikach TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musi mieć jawną adnotację typu z wyrażeniem --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analizuj w trybie z ograniczeniami i emituj ciąg „use strict” dla każdego pliku źródłowego.", - "Part_of_files_list_in_tsconfig_json_1409": "Część listy „files” w pliku tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Wzorzec „{0}” może zawierać maksymalnie jeden znak „*”.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Chronometraż wydajności dla opcji „--diagnostics” lub „--extendedDiagnostics” nie jest dostępny w tej sesji. Nie można było znaleźć natywnej implementacji interfejsu Web Performance API.", - "Platform_specific_6912": "Przeznaczone dla platformy", - "Prefix_0_with_an_underscore_90025": "Poprzedzaj elementy „{0}” znakiem podkreślenia", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Dodaj prefiks „declare” do wszystkich niepoprawnych deklaracji właściwości", - "Prefix_all_unused_declarations_with_where_possible_95025": "Jeśli to możliwe, poprzedź wszystkie nieużywane deklaracje znakiem „_”", - "Prefix_with_declare_95094": "Dodaj prefiks „declare”", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Zachowaj nieużywane zaimportowane wartości w wyjściu JavaScript, które w przeciwnym razie mogłyby zostać usunięte.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Wyświetlaj wszystkie pliki odczytywane podczas kompilacji.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Wyświetlaj pliki odczytywane podczas kompilacji, włącznie z przyczyną dołączenia.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Wyświetl nazwy plików i przyczyny, dla których są częścią kompilacji.", - "Print_names_of_files_part_of_the_compilation_6155": "Drukuj nazwy plików będących częścią kompilacji.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Drukuj nazwy plików będących częścią kompilacji, a następnie zatrzymaj przetwarzanie.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Drukuj nazwy wygenerowanych plików będących częścią kompilacji.", - "Print_the_compiler_s_version_6019": "Wypisz wersję kompilatora.", - "Print_the_final_configuration_instead_of_building_1350": "Wydrukuj końcową konfigurację zamiast kompilowania.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Wyświetlaj nazwy wyemitowanych plików po kompilacji.", - "Print_this_message_6017": "Wypisz ten komunikat.", - "Private_accessor_was_defined_without_a_getter_2806": "Prywatna metoda dostępu została zdefiniowana bez metody pobierającej.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Pole prywatne „{0}” musi być zadeklarowane w otaczającej klasie.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identyfikatory prywatne są niedozwolone w deklaracjach zmiennych.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identyfikatory prywatne są niedozwolone poza treściami klasy.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identyfikatory prywatne są dozwolone tylko w treściach klasy i mogą być używane tylko jako część deklaracji członka klasy, dostępu do właściwości lub po lewej stronie wyrażenia „in”", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identyfikatory prywatne są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Identyfikatory prywatne nie mogą być używane jako parametry.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Nie można uzyskać dostępu do prywatnego lub chronionego elementu składowego „{0}” w parametrze typu.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowania", - "Project_0_is_being_forcibly_rebuilt_6388": "Trwa wymuszone odbudowanie projektu „{0}”", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że plik „{2}” był plikiem głównym kompilacji, ale już nie jest.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że program musi zgłaszać błędy.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że niektóre zmiany nie zostały wyemitowane", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że nastąpiła zmiana w parametrze compilerOptions", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt „{0}” jest nieaktualny, ponieważ dane wyjściowe „{1}” są starsze niż dane wejściowe „{2}”", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt „{0}” jest nieaktualny, ponieważ plik wyjściowy „{1}” nie istnieje", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt „{0}” jest nieaktualny, ponieważ jego dane wyjściowe zostały wygenerowane w wersji „{1}”, która różni się od bieżącej wersji „{2}”", - "Project_0_is_up_to_date_6361": "Projekt „{0}” jest aktualny", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt „{0}” jest aktualny, ponieważ najnowsze dane wejściowe „{1}” są starsze niż dane wyjściowe „{2}”", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Projekt „{0}” jest aktualny, ale musi zaktualizować sygnatury czasowe plików wyjściowych, które są starsze niż pliki wejściowe", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt „{0}” jest aktualny z plikami .d.ts z jego zależności", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odwołania do projektu nie mogą tworzyć grafu kołowego. Wykryto cykl: {0}", - "Projects_6255": "Projekty", - "Projects_in_this_build_Colon_0_6355": "Projekty w tej kompilacji: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Właściwości z modyfikatorem „accessor” są dostępne tylko w przypadku określania wartości docelowej ECMAScript 2015 lub nowszej.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Właściwości \"{0}\" nie może mieć inicjatora, ponieważ jest oznaczona jako abstrakcyjna.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Właściwość „{0}” pochodzi z sygnatury indeksu, dlatego należy uzyskiwać do niej dostęp za pomocą elementu [„{0}”].", - "Property_0_does_not_exist_on_type_1_2339": "Właściwość „{0}” nie istnieje w typie „{1}”.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło o uzyskanie dostępu do statycznego elementu członkowskiego „{2}”?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na \"{2}\" lub nowszą.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić parametr \"dom\".", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Właściwość \"{0}\" nie ma inicjatora i nie jest zdecydowanie przypisana w bloku statycznym klasy.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Właściwość „{0}” nie ma inicjatora i nie jest na pewno przypisana w konstruktorze.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „get” nie ma adnotacji zwracanego typu.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „set” nie ma adnotacji typu parametru.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu get można wywnioskować na podstawie użycia.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu set można wywnioskować na podstawie użycia.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Właściwości „{0}” w typie „{1}” nie można przypisać do tej samej właściwości w typie podstawowym „{2}”.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Właściwości „{0}” w typie „{1}” nie można przypisać do typu „{2}”.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Właściwość „{0}” w typie „{1}” odwołuje się do innego elementu członkowskiego, do którego nie można uzyskać dostępu z typu „{2}”.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "Właściwość „{0}” jest zadeklarowana, ale jej wartość nie jest nigdy odczytywana.", - "Property_0_is_incompatible_with_index_signature_2530": "Właściwość „{0}” jest niezgodna z sygnaturą indeksu.", - "Property_0_is_missing_in_type_1_2324": "W typie „{1}” brakuje właściwości „{0}”.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Właściwości „{0}” brakuje w typie „{1}”, ale jest wymagana w typie „{2}”.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Właściwość „{0}” nie jest dostępna poza klasą „{1}”, ponieważ ma identyfikator prywatny.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Właściwość „{0}” jest opcjonalna w typie „{1}”, ale jest wymagana w typie „{2}”.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "Właściwość „{0}” jest prywatna i dostępna tylko w klasie „{1}”.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Właściwość „{0}” jest prywatna w typie „{1}”, ale nie w typie „{2}”.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Właściwość „{0}” jest chroniona i dostępna tylko za pośrednictwem wystąpienia klasy „{1}”. To jest wystąpienie klasy „{2}”.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Właściwość „{0}” jest chroniona i dostępna tylko w klasie „{1}” oraz w jej podklasach.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Właściwość „{0}” jest chroniona, ale typ „{1}” nie jest klasą pochodną elementu „{2}”.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Właściwość „{0}” jest chroniona w typie „{1}”, ale jest publiczna w typie „{2}”.", - "Property_0_is_used_before_being_assigned_2565": "Właściwość „{0}” jest używana przed przypisaniem.", - "Property_0_is_used_before_its_initialization_2729": "Właściwość „{0}” jest używana przez jej zainicjowaniem.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Właściwości „{0}” atrybutu rozkładu JSX nie można przypisać do właściwości docelowej.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego typu klasy anonimowej nie może być prywatna ani chroniona.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Właściwości „{0}” typu „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", - "Property_0_was_also_declared_here_2733": "Właściwość „{0}” została również zadeklarowana w tym miejscu.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Właściwość „{0}” zastąpi właściwość bazową w elemencie „{1}”. Jeśli jest to zamierzone, dodaj inicjator. W przeciwnym razie dodaj modyfikator „declare” lub usuń nadmiarową deklarację.", - "Property_assignment_expected_1136": "Oczekiwano przypisania właściwości.", - "Property_destructuring_pattern_expected_1180": "Oczekiwano wzorca usuwającego strukturę właściwości.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Właściwość musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", - "Property_or_signature_expected_1131": "Oczekiwano właściwości lub sygnatury.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Wartością właściwości może być jedynie literał ciągu, literał numeryczny, wartości „true”, „false” i „null”, literał obiektu i literał tablicy.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Udostępnij pełne wsparcie dla elementów iterowanych w elementach „for-of”, rozpiętości i usuwania, gdy elementem docelowym jest „ES5”.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Nazwa kwalifikowana „{0}” nie jest dozwolona bez wiodącego elementu „@param {object} {1}”.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Zgłoś błąd, gdy parametr funkcji nie zostanie odczytany.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Zgłaszaj błąd w przypadku wyrażeń i deklaracji z implikowanym typem „any”.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Zgłaszaj błąd w przypadku wyrażeń „this” z niejawnym typem „any”.", - "Range_out_of_order_in_character_class_1517": "Zakres poza kolejnością w klasie znaków.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy element „{0}” jest włączony, wymaga użycia elementu „export type”.", - "React_components_cannot_include_JSX_namespace_names_2639": "Składniki platformy React nie mogą zawierać nazw przestrzeni rozszerzenia JSX", - "Recommended_Options_6294": "Proponowane opcje", - "Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Zmniejsz liczbę projektów ładowanych automatycznie przez język TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "Przywoływany projekt „{0}” nie może wyłączać emisji.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.", - "Referenced_via_0_from_file_1_1400": "Przywoływane za pośrednictwem elementu „{0}” z pliku „{1}”", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Zastanów się nad dodaniem rozszerzenia do ścieżki importu.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Czy chodziło Ci o „{0}”?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Usuń listę katalogów z procesu obserwacji.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Usuń listę plików z przetwarzania w trybie obserwacji.", - "Remove_all_unnecessary_override_modifiers_95163": "Usuń wszystkie niepotrzebne modyfikatory „overrides”", - "Remove_all_unnecessary_uses_of_await_95087": "Usuń wszystkie niepotrzebne użycia operatora „await”", - "Remove_all_unreachable_code_95051": "Usuń cały nieosiągalny kod", - "Remove_all_unused_labels_95054": "Usuń wszystkie nieużywane etykiety", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Usuń nawiasy klamrowe ze wszystkich treści funkcji strzałkowej z odpowiednimi problemami", - "Remove_braces_from_arrow_function_95060": "Usuń nawiasy klamrowe z funkcji strzałki", - "Remove_braces_from_arrow_function_body_95112": "Usuń nawiasy klamrowe z treści funkcji strzałkowej", - "Remove_import_from_0_90005": "Usuń import z „{0}”", - "Remove_override_modifier_95161": "Usuń modyfikator „override”", - "Remove_parentheses_95126": "Usuń nawiasy", - "Remove_template_tag_90011": "Usuń znacznik szablonu", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Usuń ograniczenie 20 MB dotyczące łącznego rozmiaru kodu źródłowego dla plików JavaScript na serwerze języka TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Usuń element „type” z deklaracji importu z elementu „ {0}”", - "Remove_type_from_import_of_0_from_1_90056": "Usuń element „type” z importu elementu „{0}” z „{1}”", - "Remove_type_parameters_90012": "Usuń parametry typu", - "Remove_unnecessary_await_95086": "Usuń niepotrzebny operator „await”", - "Remove_unreachable_code_95050": "Usuń nieosiągalny kod", - "Remove_unused_declaration_for_Colon_0_90004": "Usuń nieużywaną deklarację dla: „{0}”", - "Remove_unused_declarations_for_Colon_0_90041": "Usuń nieużywane deklaracje dla: „{0}”", - "Remove_unused_destructuring_declaration_90039": "Usuń nieużywaną deklarację usuwania struktury", - "Remove_unused_label_95053": "Usuń nieużywaną etykietę", - "Remove_variable_statement_90010": "Usuń instrukcję zmiennej", - "Rename_param_tag_name_0_to_1_95173": "Zmień nazwę „{0}” tagu „@param” na „{1}”", - "Replace_0_with_Promise_1_90036": "Zamień element „{0}” na element „Promise<{1}>”", - "Replace_all_unused_infer_with_unknown_90031": "Zamień wszystkie nieużywane elementy „infer” na „unknown”", - "Replace_import_with_0_95015": "Zamień import na element „{0}”.", - "Replace_infer_0_with_unknown_90030": "Zamień element „infer {0}” na „unknown”", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Zgłoś błąd, gdy nie wszystkie ścieżki w kodzie zwracają wartość.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Zgłoś błędy dla przepuszczających klauzul case w instrukcji switch.", - "Report_errors_in_js_files_8019": "Zgłaszaj błędy w plikach js.", - "Report_errors_on_unused_locals_6134": "Raportuj błędy dla nieużywanych elementów lokalnych.", - "Report_errors_on_unused_parameters_6135": "Raportuj błędy dla nieużywanych parametrów.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Wymagaj wystarczającej adnotacji w eksportach, aby inne narzędzia mogły w prosty sposób generować pliki deklaracji.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Wymagane parametry typu mogą nie być zgodne z opcjonalnymi parametrami typu.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Znaleziono rozwiązanie dla modułu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Znaleziono rozwiązanie dla dyrektywy odwołania do typu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba wyłączenia nowoczesnych funkcji rozpoznawania węzłów w celu sprawdzenia, czy biblioteka npm wymaga aktualizacji konfiguracji.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba użycia wyrażenia „--moduleResolution”, aby sprawdzić, czy projekt może wymagać aktualizacji konfiguracji.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Rozwiązuj elementy „keyof” tylko do nazw właściwości mających jako wartość ciągi (nie liczby czy symbole).", - "Resolved_under_condition_0_6414": "Rozwiązano pod warunkiem „{0}”.", - "Resolving_in_0_mode_with_conditions_1_6402": "Rozpoznawanie w trybie {0} z warunkami {1}.", - "Resolving_module_0_from_1_6086": "======== Rozpoznawanie modułu „{0}” na podstawie „{1}”. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Rozpoznawanie nazwy modułu „{0}” względem podstawowego adresu URL „{1}” — „{2}”.", - "Resolving_real_path_for_0_result_1_6130": "Rozpoznawanie rzeczywistej ścieżki elementu ƒ„{0}”, wynik: „{1}”.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Rozwiązywanie dyrektywy odwołania do typu „{0}”, zawierającego plik: „{1}”. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny: „{2}”. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny nie został ustawiony. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny: „{1}”. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny nie został ustawiony. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Rozpoznawanie dyrektywy odwołania do typu dla programu, który określa niestandardowe typeRoots, pomijanie wyszukiwania w folderze „node_modules”.", - "Resolving_with_primary_search_path_0_6121": "Rozpoznawanie przy użyciu ścieżki wyszukiwania podstawowego „{0}”.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Dla parametru rest „{0}” niejawnie określono typ „any[]”.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest „{0}” niejawnie ma typ „any[]”, ale lepszy typ można wywnioskować na podstawie użycia.", - "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest można tworzyć tylko na podstawie typów obiektu.", - "Return_type_annotation_circularly_references_itself_2577": "Adnotacja zwracanego typu cyklicznie odwołuje się do samej siebie.", - "Return_type_must_be_inferred_from_a_function_95149": "Zwracany typ musi zostać wywnioskowany na podstawie funkcji", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Musi istnieć możliwość przypisania zwracanego typu sygnatury konstruktora do typu wystąpienia klasy.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Zwracany typ wyeksportowanej funkcji ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu nie zostało rozpoznane.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}”.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}” z identyfikatorem pakietu „{3}”.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Ponowne użycie rozwiązania dyrektywy odwołania typu „{0}” z „{1}” starego programu nie zostało rozpoznane.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}”.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}” o identyfikatorze pakietu „{3}”.", - "Rewrite_all_as_indexed_access_types_95034": "Zmień wszystko na indeksowane typy dostępu", - "Rewrite_as_the_indexed_access_type_0_90026": "Napisz ponownie jako indeksowany typ dostępu „{0}”", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Ponownie zapisz rozszerzenia plików „.ts”, „.tsx”, „.mts” i „.cts” we względnych ścieżkach importu do ich odpowiedników języka JavaScript w plikach wyjściowych.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Prawy operand elementu ?? jest nieosiągalny, ponieważ lewy operand nigdy nie dopuszcza wartości null.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nie można określić katalogu głównego. Pomijanie ścieżek wyszukiwania podstawowego.", - "Root_file_specified_for_compilation_1427": "Plik główny określony na potrzeby kompilacji", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATEGIA", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Zapisuj pliki tsbuildinfo, aby umożliwić przyrostową kompilację projektów.", - "Saw_non_matching_condition_0_6405": "Wyświetlono niezgodny warunek „{0}”.", - "Scoped_package_detected_looking_in_0_6182": "Wykryto pakiet w zakresie, wyszukiwanie w „{0}”", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Przeszukiwanie wszystkich katalogów nadrzędnych node_modules w poszukiwaniu rozszerzeń rezerwowych: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Wyszukiwanie preferowanych rozszerzeń we wszystkich katalogach nadrzędnych node_modules: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Zobacz też https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "Wybór nie jest prawidłową instrukcją ani instrukcjami", - "Selection_is_not_a_valid_type_node_95133": "Wybór nie jest prawidłowym węzłem typu", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Określ wersję języka JavaScript dla emitowanego kodu JavaScript i dołącz zgodne deklaracje bibliotek.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Określ język komunikatów z języka TypeScript. Nie wpływa to na emisję.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Ustaw opcję „module” w pliku konfiguracji na wartość „{0}”", - "Set_the_newline_character_for_emitting_files_6659": "Określ znak nowego wiersza dla emisji plików.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Ustaw opcję „target” w pliku konfiguracji na wartość „{0}”", - "Setters_cannot_return_a_value_2408": "Metody ustawiające nie mogą zwracać wartości.", - "Show_all_compiler_options_6169": "Pokaż wszystkie opcje kompilatora.", - "Show_diagnostic_information_6149": "Pokaż informacje diagnostyczne.", - "Show_verbose_diagnostic_information_6150": "Pokaż pełne informacje diagnostyczne.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Pokaż, co zostanie skompilowane (lub usunięte, jeśli określono opcję „--clean”)", - "Signature_0_must_be_a_type_predicate_1224": "Sygnatura „{0}” musi być predykatem typów.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklaracji podpisu można używać tylko w plikach TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Pomiń kompilowanie projektów podrzędnych w przypadku błędu w projekcie nadrzędnym.", - "Skip_type_checking_all_d_ts_files_6693": "Pomiń sprawdzanie typów dla wszystkich plików d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Pomiń sprawdzanie typów w plikach d.ts dołączanych w kodzie TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Pomiń sprawdzanie typu plików deklaracji.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowana", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Pomijanie modułu „{0}”, który wygląda jak bezwzględny identyfikator URI, docelowe typy plików: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono element „{1}”", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono wartość „none” dla opcji „--module”", - "Source_has_0_element_s_but_target_allows_only_1_2619": "Liczba elementów w źródle to {0}, ale element docelowy zezwala tylko na {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "Liczba elementów w źródle to {0}, ale element docelowy wymaga {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Źródło nie udostępnia dopasowania dla wymaganego elementu na pozycji {0} w lokalizacji docelowej.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Źródło nie udostępnia dopasowania dla elementu ze zmienną argumentów na pozycji {0} w lokalizacji docelowej.", - "Specify_ECMAScript_target_version_6015": "Określ wersję docelową ECMAScript.", - "Specify_JSX_code_generation_6080": "Określ generowanie kodu JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Określ plik łączący wszystkie dane wyjściowe w jeden plik JavaScript. Jeśli element „declaration” ma wartość true, wyznaczany jest też plik łączący wszystkie dane wyjściowe d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Określ listę wzorców globalnych pasujących do plików, które należy uwzględnić w kompilacji.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Określ listę wtyczek usług języka do uwzględnienia.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Określ zestaw połączonych plików deklaracji bibliotek, które opisują docelowe środowisko uruchomieniowe.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Określ zestaw wpisów, które ponownie mapują operacje importu na dodatkowe lokalizacje wyszukiwania.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Określ tablicę obiektów określających ścieżki dla projektów. Używane w odwołaniach do projektów.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Określ folder wyjściowy dla wszystkich emitowanych plików.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Określ zachowanie emisji/sprawdzania dla importów, które są używane tylko dla typów.", - "Specify_file_to_store_incremental_compilation_information_6380": "Określ plik do przechowywania informacji o kompilacji przyrostowej", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Określ, jak język TypeScript ma wyszukiwać plik z podanego specyfikatora modułu.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Określ sposób obserwacji katalogów w systemach, które nie mają funkcji rekursywnej obserwacji plików.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Określ sposób działania trybu zegarka TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Określ pliki biblioteki do uwzględnienia w kompilacji.", - "Specify_module_code_generation_6016": "Określ generowanie kodu modułu.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Określ specyfikator modułów używany do importowania funkcji fabryki JSX w przypadku używania elementów „jsx: react-jsx*”.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Określ wiele folderów działających jak element „./node_modules/@types”.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Określ co najmniej jedną ścieżkę lub odwołanie do modułu platformy Node dotyczące podstawowych plików konfiguracji, z których są dziedziczone ustawienia.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Określ opcje automatycznego pozyskiwania plików deklaracji.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Określ strategię obserwowania z sondowaniem, gdy nie powiedzie się utworzenie przy użyciu zdarzeń systemu plików: „FixedInterval” (domyślna), „PriorityInterval”, „DynamicPriority”, „FixedChunkSize”.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Określ strategię obserwowania katalogu na platformach, które nie obsługują natywnego obserwowania rekursywnego: „UseFsEvents” (domyślna), „FixedPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Określ strategię obserwowania pliku: „FixedPollingInterval” (domyślna), „PriorityPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”, „UseFsEvents”, „UseFsEventsOnParentDirectory”.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Określ odwołanie do fragmentów JSX używane dla fragmentów w przypadku docelowej emisji kodu React JSX, np. „React.Fragment” lub „Fragment”.", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Określ funkcję fabryki JSX do użycia, gdy elementem docelowym jest emisja elementu JSX „react”, np. „React.createElement” lub „h”.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Określ funkcję fabryki JSX używaną w przypadku docelowej emisji kodu React JSX, na przykład „React.createElement” lub „h”", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Określ funkcję fabryki fragmentów JSX, która ma być używana po ukierunkowaniu na emisję JSX „react” za pomocą opcji kompilatora „jsxFactory”, na przykład „Fragment”.", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Określ katalog podstawowy, aby rozpoznać nie względne nazwy modułów.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Określ sekwencję końca wiersza, która ma być używana podczas emitowania plików: „CRLF” (dos) lub „LF” (unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Określ lokalizację, w której debuger ma szukać plików TypeScript zamiast szukania w lokalizacjach źródłowych.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Określ lokalizację, w której debuger ma szukać plików map zamiast szukania w wygenerowanych lokalizacjach.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Określ maksymalną głębokość folderów używaną do sprawdzania plików JavaScript z poziomu elementu „node_modules”. Ma to zastosowanie tylko w przypadku użycia opcji „allowJs”.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Określ specyfikator modułu, który ma być używany do importowania z funkcji fabryki \"jsx\" i \"jsxs\", na przykład z platformy React", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Określ obiekt wywoływany dla elementu „createElement”. Ma to zastosowanie tylko w przypadku docelowej emisji kodu JSX „react”.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Określ katalog wyjściowy dla generowanych plików deklaracji.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Określ ścieżkę do pliku kompilacji przyrostowej .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Określ katalog główny plików wejściowych. Strukturą katalogów wyjściowych można sterować przy użyciu opcji --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Określ folder główny w plikach źródłowych.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Określ ścieżkę katalogu głównego, w którym debugery będą mogły znaleźć referencyjny kod źródłowy.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Określ nazwy pakietów typów do uwzględnienia bez odwoływania się do nich w pliku źródłowym.", - "Specify_what_JSX_code_is_generated_6646": "Określ, jaki kod JSX jest generowany.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Określ, jakie podejście ma stosować obserwator, jeśli w systemie zabraknie natywnych obserwatorów plików.", - "Specify_what_module_code_is_generated_6657": "Określ, jaki kod modułów jest generowany.", - "Split_all_invalid_type_only_imports_1367": "Podziel wszystkie nieprawidłowe importy dotyczące tylko typu", - "Split_into_two_separate_import_declarations_1366": "Podziel na dwie osobne deklaracje importu", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operator rozpiętości w wyrażeniach „new” jest dostępny tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", - "Spread_types_may_only_be_created_from_object_types_2698": "Typy spread można tworzyć tylko z typów obiektu.", - "Starting_compilation_in_watch_mode_6031": "Trwa uruchamianie kompilacji w trybie śledzenia...", - "Statement_expected_1129": "Oczekiwano instrukcji.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Instrukcje są niedozwolone w otaczających kontekstach.", - "Static_members_cannot_reference_class_type_parameters_2302": "Statyczne składowe nie mogą przywoływać parametrów typu klasy.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Właściwość statyczna „{0}” jest w konflikcie z właściwością wbudowaną „Function.{0}” funkcji konstruktora „{1}”.", - "Stricter_Typechecking_Options_6292": "Bardziej rygorystyczne opcje sprawdzania typów", - "String_literal_expected_1141": "Oczekiwano literału ciągu.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Nazwy importu i eksportu literału ciągu nie są obsługiwane, gdy flaga „--module” ma wartość „es2015” lub „es2020”.", - "String_literal_with_double_quotes_expected_1327": "Oczekiwano literału ciągu z podwójnymi cudzysłowami.", - "Style_Options_6293": "Opcje stylów", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stosuj styl dla błędów i komunikatów za pomocą koloru i kontekstu. (eksperymentalne).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Flagi wzorca podrzędnego muszą być obecne, gdy istnieje półpauza.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Kolejne deklaracje właściwości muszą być tego samego typu. Właściwość „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Kolejne deklaracje zmiennej muszą być tego samego typu. Zmienna „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Podstawienie „{0}” dla wzorca „{1}” ma nieprawidłowy typ. Oczekiwano typu „string”, a uzyskano typ „{2}”.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Podstawienie „{0}” we wzorcu „{1}” może zawierać maksymalnie jeden znak „*”", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Podstawieniami wzorca „{0}” powinna być tablica.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Podstawienia dla wzorca „{0}” nie powinny być pustą tablicą.", - "Successfully_created_a_tsconfig_json_file_6071": "Pomyślnie utworzono plik tsconfig.json.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Wywołania super są niedozwolone poza konstruktorami i zagnieżdżonymi funkcjami wewnątrz konstruktorów.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Pomiń nadmiarowe sprawdzenia właściwości dla literałów obiektu.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Pomiń błędy noImplicitAny dotyczące obiektów indeksowania bez sygnatur indeksów.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Pomijaj błędy „noImplicitAny” podczas indeksowania obiektów, które nie mają sygnatur indeksu.", - "Switch_each_misused_0_to_1_95138": "Zmień każdy niepoprawnie użyty element „{0}” na „{1}”", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronicznie wywołuj wywołania zwrotne i aktualizuj stan obserwatorów katalogów na platformach, które nie obsługują natywnie obserwacji rekursywnej.", - "Syntax_Colon_0_6023": "Składnia: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Tag „{0}” oczekuje co najmniej „{1}” argumentów, ale fabryka JSX „{2}” dostarcza maksymalnie „{3}”.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Oznakowane wyrażenia szablonu nie są dozwolone w opcjonalnym łańcuchu.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Liczba elementów dozwolonych przez element docelowy to {0}, ale źródło może mieć ich więcej.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Liczba elementów wymaganych przez element docelowy to {0}, ale źródło może mieć ich mniej.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Podpis docelowy zawiera zbyt mało argumentów. Oczekiwano {0} lub więcej, ale otrzymano {1}.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modyfikatora „{0}” można używać tylko w plikach TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Nie można zastosować operatora „{0}” do typu „symbol”.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operator „{0}” nie jest dozwolony w przypadku typów logicznych. Zamiast tego rozważ użycie operatora „{1}”.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Właściwość „{0}” iteratora asynchronicznego musi być metodą.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "Właściwość „{0}” iteratora musi być metodą.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ „Object” można przypisać do niewielu innych typów. Czy zamiast tego typu miał zostać użyty typ „any”?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Nie można jednocześnie ustawić flagi Unicode (u) i flagi Unicode Sets (v).", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w języku ES5. Rozważ użycie standardowego wyrażenia funkcji.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES5. Rozważ użycie standardowej funkcji lub metody.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Treść instrukcji „if” nie może być pustą instrukcją.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Wywołanie powiodłoby się dla tej implementacji, ale sygnatury implementacji przeciążeń nie są widoczne na zewnątrz.", - "The_character_set_of_the_input_files_6163": "Zestaw znaków plików wejściowych.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Zawierająca funkcja strzałki przechwytuje wartość globalną parametru „this”.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Treść zawierającej funkcji lub modułu jest za duża do analizy przepływu sterowania.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Bieżący plik jest modułem CommonJS i nie może używać elementu „await” na najwyższym poziomie.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Bieżący plik jest modułem CommonJS, którego importy będą generować wywołania „require”; jednak przywoływany plik jest modułem ECMAScript i nie można go zaimportować za pomocą wywołania „require”. Zamiast tego rozważ zapisanie dynamicznego wywołania „import(\"{0}\")”.", - "The_current_host_does_not_support_the_0_option_5001": "Bieżący host nie obsługuje opcji „{0}”.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "W tym miejscu zdefiniowano deklarację elementu „{0}”, której prawdopodobnie zamierzano użyć", - "The_declaration_was_marked_as_deprecated_here_2798": "Deklaracja została oznaczona jako przestarzała w tym miejscu.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Oczekiwany typ pochodzi z właściwości „{0}”, która jest zadeklarowana tutaj w typie „{1}”", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Oczekiwany typ pochodzi ze zwracanego typu tej sygnatury.", - "The_expected_type_comes_from_this_index_signature_6501": "Oczekiwany typ pochodzi z tej sygnatury indeksu.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Wyrażenie przypisania eksportu musi być identyfikatorem lub kwalifikowaną nazwą w otaczającym kontekście.", - "The_file_is_in_the_program_because_Colon_1430": "Plik jest w programie, ponieważ:", - "The_files_list_in_config_file_0_is_empty_18002": "Lista „files” w pliku konfiguracji „{0}” jest pusta.", - "The_first_export_default_is_here_2752": "Pierwszy element export default jest tutaj.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Pierwszym parametrem metody „then” obietnicy musi być wywołanie zwrotne.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Dla typu globalnego „JSX.{0}” nie można określić więcej niż jednej właściwości.", - "The_implementation_signature_is_declared_here_2750": "Sygnatura implementacji jest zadeklarowana tutaj.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Metawłaściwość „import.meta” jest niedozwolona w plikach, które będą kompilowane w danych wyjściowych CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Meta-właściwość „import.meta” jest dozwolona tylko wtedy, gdy opcja „--module” ma wartość „es2020”, „es2022”, „esnext”, „system”, „node16”, „node18”, „node20” lub „nodenext”.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Wywnioskowany typ „{0}” nie może być nazwany bez odwołania do elementu „{1}”. Prawdopodobnie nie jest to przenośne. Konieczna jest adnotacja typu.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Wywnioskowany typ elementu „{0}” odwołuje się do typu ze strukturą cykliczną, którego nie można serializować w prosty sposób. Wymagana jest adnotacja typu.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Wnioskowany typ „{0}” przywołuje niedostępny typ „{1}”. Adnotacja typu jest konieczna.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Wywnioskowany typ tego węzła przekracza maksymalną długość, którą kompilator może serializować. Wymagana jest jawna adnotacja typu.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicjator deklaracji „using” musi być obiektem z metodą „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicjator deklaracji „await using” musi być obiektem z metodą „[Symbol.asyncDispose]()” lub „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” istnieje w wielu elementach składowych i w części z nich jest prywatna.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” zawiera typy powodujące konflikt w niektórych elementach składowych.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Słowa kluczowego „intrinsic” można używać tylko do deklarowania typów wewnętrznych udostępnianych przez kompilator.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Należy podać opcję kompilatora „jsxFragmentFactory”, aby używać fragmentów JSX z opcją kompilatora „jsxFactory”.", - "The_last_overload_gave_the_following_error_2770": "Ostatnie przeciążenie dało następujący błąd.", - "The_last_overload_is_declared_here_2771": "Ostatnie przeciążenie jest zadeklarowane tutaj.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Lewa strona instrukcji „for...in” nie może być wzorcem usuwającym strukturę.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Lewa strona instrukcji „for...in” nie może być deklaracją „using”.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Lewa strona instrukcji „for...in” nie może być deklaracją „await using”.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Lewa strona instrukcji „for...in” nie może używać adnotacji typu.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Lewa strona instrukcji „for...in” nie może być opcjonalnym dostępem do właściwości.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Lewa strona instrukcji „for...in” musi być zmienną lub dostępem do właściwości.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Lewa strona instrukcji „for...in” musi być typu „string” lub „any”.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Lewa strona instrukcji „for...of” nie może używać adnotacji typu.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Lewa strona instrukcji „for...of” nie może być opcjonalnym dostępem do właściwości.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Lewa strona instrukcji „for...of” nie może być „asynchroniczna”.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Lewa strona instrukcji „for...of” musi być zmienną lub dostępem do właściwości.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Lewa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Lewa strona wyrażenia przypisania nie może być opcjonalnym dostępem do właściwości.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Lewa strona wyrażenia przypisania musi być zmienną lub dostępem do właściwości.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Lewa strona wyrażenia „instanceof” musi być przypisana do pierwszego argumentu po prawej stronie metody „[Symbol.hasInstance]”.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Lewa strona wyrażenia „instanceof” musi być typu „any”, typu obiektu lub parametrem typu.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Ustawienia regionalne używane przy wyświetlaniu komunikatów użytkownikowi (np. „pl-pl”)", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maksymalna głębokość zależności na potrzeby wyszukiwania w elemencie node_modules i ładownia plików JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Operand operatora „delete” nie może być identyfikatorem prywatnym.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Operand operatora „delete” nie może być właściwością tylko do odczytu.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Operand operatora „delete” musi być odwołaniem do właściwości.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "Operand operatora „delete” musi być opcjonalny.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Operand operatora inkrementacji lub dekrementacji nie może być opcjonalnym dostępem do właściwości.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Operand operatora inkrementacji lub dekrementacji musi być zmienną lub dostępem do właściwości.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Analizator oczekiwał znalezienia elementu „{1}” w celu dopasowania do tokenu „{0}” w tym miejscu.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy eksportu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy importu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Nie można uzyskać dostępu do właściwości „{0}” w typie „{1}” w tej klasie, ponieważ jest ona zasłaniana przez inny identyfikator prywatny o takiej samej pisowni.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Zwracany typ funkcji dekoratora parametrów musi mieć postać „void” lub „any”.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Zwracany typ funkcji dekoratora właściwości musi mieć postać „void” lub „any”.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zwracany typ funkcji asynchronicznej musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zwracany typ metody lub funkcji asynchronicznej musi być globalnym typem Promise.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Zwracany typ funkcji lub metody asynchronicznej musi być globalnym typem Promise. Czy chodziło Ci o typ „Promise<{0}>”?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Prawa strona instrukcji „for...in” musi zawierać typ „any”, typ obiektu lub parametr typu, a tutaj ma typ „{0}”.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Prawa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Prawa strona wyrażenia „instanceof” musi być typem „any”, klasą, funkcją lub innym typem, który można przypisać do typu interfejsu „Function”, albo typem obiektu z metodą „Symbol.hasInstance”.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Prawa strona wyrażenia „instanceof” nie może być wyrażeniem tworzenia wystąpienia.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "Wartość katalogu głównego pliku „{0}” musi być obiektem.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje co najmniej {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "Deklaracja przesłaniania „{0}” jest zdefiniowana tutaj", - "The_signature_0_of_1_is_deprecated_6387": "Sygnatura „{0}” elementu „{1}” jest przestarzała.", - "The_specified_path_does_not_exist_Colon_0_5058": "Wybrana ścieżka nie istnieje: „{0}”.", - "The_tag_was_first_specified_here_8034": "Tag został najpierw określony w tym miejscu.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Obiekt docelowy przypisania rest obiektu nie może być opcjonalnym dostępem do właściwości.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Cel przypisania rest obiektu musi stanowić dostęp do zmiennej lub właściwości.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Kontekstu „this” typu „{0}” nie można przypisać do elementu „this” metody typu „{1}”.", - "The_this_types_of_each_signature_are_incompatible_2685": "Typy „this” sygnatur nie są zgodne.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ „{0}” jest „readonly” i nie można go przypisać do typu modyfikowalnego „{1}”.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Modyfikatora „type” nie można użyć w nazwanym eksporcie, gdy w instrukcji eksportowania jest używany element „export type”.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Modyfikatora „type” nie można użyć w nazwanym imporcie, gdy w instrukcji importowania jest używany element „import type”.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Typ tego węzła nie może być serializowany, ponieważ jego właściwość „{0}” nie może być serializowana.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ zwracany przez metodę „{0}()” iteratora asynchronicznego musi być obietnicą dla typu z właściwością „value”.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ zwracany przez metodę „{0}()” iteratora musi mieć właściwość „value”.", - "The_types_of_0_are_incompatible_between_these_types_2200": "Typy elementu „{0}” są niezgodne między tymi typami.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Typy zwrócone przez element „{0}” są niezgodne między tymi typami.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "W tym miejscu nie można użyć wartości „{0}”.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklaracja zmiennej instrukcji „for...in” nie może mieć inicjatora.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklaracja zmiennej instrukcji „for...of” nie może mieć inicjatora.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Instrukcja „with” nie jest obsługiwana. Wszystkie symbole w bloku „with” będą mieć typ „any”.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku w bieżącym ustawieniu „moduleResolution”. Rozważ zaktualizowanie do wartości „node16”, „nodenext” lub „bundler”.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku podczas uwzględniania pliku package.json „exports”. Biblioteka „{1}” może wymagać zaktualizowania pliku package.json lub wpisywania tekstu.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "W tym wyrażeniu regularnym nie ma żadnej grupy przechwytywania o nazwie „{0}”.", - "There_is_nothing_available_for_repetition_1507": "Brak dostępnych elementów do powtórzenia.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Ten tag rozszerzenia JSX wymaga, aby element „{0}” był w zakresie, ale nie można go znaleźć.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Ten tag rozszerzenia JSX wymaga, aby ścieżka modułu „{0}” istniała, ale nie można jej znaleźć. Upewnij się, że masz zainstalowane typy dla odpowiedniego pakietu.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Element prop „{0}” tego tagu JSX oczekuje pojedynczego elementu podrzędnego typu „{1}”, ale podano wiele elementów podrzędnych.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Element prop „{0}” tego tagu JSX oczekuje typu „{1}”, który wymaga wielu elementów podrzędnych, ale podano tylko jeden element podrzędny.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym nie ma żadnych grup przechwytywania.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym jest tylko następująca liczba grup przechwytywania: {0}.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "To wyrażenie binarne nigdy nie dopuszcza wartości null. Czy brakuje nawiasów?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tego znaku nie można poprzedzić znakiem ucieczki w wyrażeniu regularnym.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "To porównanie wydaje się niezamierzone, ponieważ typy „{0}” i „{1}” nie nakładają się na siebie.", - "This_condition_will_always_return_0_2845": "Ten warunek będzie zawsze zwracać wartość „{0}”.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Ten warunek zawsze będzie zwracać wartość „{0}”, ponieważ język JavaScript porównuje obiekty według odwołania, a nie wartości.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Ten warunek będzie zawsze zwracać wartość true, ponieważ wartość '{0}' jest zawsze prawdziwa.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją zamiast tego?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Ta funkcja konstruktora może zostać przekonwertowana na deklarację klasy.", - "This_expression_is_always_nullish_2871": "To wyrażenie ma zawsze wartość null.", - "This_expression_is_never_nullish_2881": "To wyrażenie nigdy nie ma wartości null.", - "This_expression_is_not_callable_2349": "To wyrażenie nie jest wywoływalne.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tego wyrażenia nie można wywoływać, ponieważ jest to metoda dostępu „get”. Czy chodziło Ci o użycie go bez znaków „()”?", - "This_expression_is_not_constructable_2351": "Tego wyrażenia nie można skonstruować.", - "This_file_already_has_a_default_export_95130": "Ten plik ma już domyślny eksport", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Ponowne zapisanie tej ścieżki importu jest niebezpieczne, ponieważ jest rozpoznawana jako inny projekt, a ścieżka względna między plikami wyjściowymi projektów nie jest taka sama jak ścieżka względna między plikami wejściowymi.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Ten import używa rozszerzenia „{0}” do rozpoznania jako wejściowego pliku TypeScript, ale nie zostanie ponownie zapisany podczas emitowania, ponieważ nie jest ścieżką względną.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "To jest rozszerzana deklaracja. Rozważ przeniesienie deklaracji rozszerzenia do tego samego pliku.", - "This_kind_of_expression_is_always_falsy_2873": "Tego rodzaju wyrażenie jest zawsze błędne.", - "This_kind_of_expression_is_always_truthy_2872": "Tego rodzaju wyrażenie jest zawsze prawdziwe.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "To można przekonwertować na funkcję asynchroniczną.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ta składowa nie może mieć komentarza JSDoc z tagiem „override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”. Czy chodziło Ci o „{1}”?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ten element członkowski nie może mieć komentarza JSDoc z tagiem „@zastąp”, ponieważ jego nazwa jest dynamiczna.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ nie jest zadeklarowany w klasie podstawowej „{0}”.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ nie jest on zadeklarowany w klasie bazowej \"{0}\". Czy chodzi Ci o \"{1}\"?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ jego nazwa jest dynamiczna.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Ta składowa musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ten element członkowski musi mieć modyfikator „override”, ponieważ przesłania on element członkowski w klasie podstawowej „{0}”.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ten element członkowski musi mieć modyfikator „override”, ponieważ zastępuje metodę abstrakcyjną zadeklarowaną w klasie podstawowej „{0}”.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Do tego modułu można odwoływać się tylko za pomocą importów/eksportów języka ECMAScript, włączając flagę „{0}” i odwołując się do jego eksportu domyślnego.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ten moduł jest zadeklarowany przy użyciu składni „export =” i może być używany tylko z importem domyślnym, gdy jest używana flaga „{0}”.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tę operację można uprościć. Ta zmiana jest identyczna z „{0} {1} {2}”.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "To przeciążenie niejawnie zwraca typ „{0}”, ponieważ nie ma adnotacji zwracanego typu.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Ta sygnatura przeciążenia nie jest zgodna z jej sygnaturą implementacji.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ten parametr nie jest dozwolony w dyrektywie „use strict”.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Ta właściwość parametru musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Ta właściwość parametru musi mieć modyfikator \"override\", ponieważ zastępuje on członka w klasie bazowej \"{0}\".", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tej flagi wyrażenia regularnego nie można przełączać w obrębie wzorca podrzędnego.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Ta flaga wyrażenia regularnego jest dostępna tylko w przypadku określania wartości docelowej „{0}” lub nowszej.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Ta względna ścieżka importu jest niebezpieczna do ponownego zapisania, ponieważ wygląda jak nazwa pliku, ale w rzeczywistości jest rozpoznawana jako „{0}”.", - "This_spread_always_overwrites_this_property_2785": "To rozmieszczenie zawsze powoduje zastąpienie tej właściwości.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Ta składnia jest niedozwolona, gdy jest włączona opcja \"erasableSyntaxOnly\".", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem .MTS lub CTS. Dodaj końcowy przecinek lub jawne ograniczenie.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem. MTS lub. CTS. Użyj zamiast tego wyrażenia „as”.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Ta składnia wymaga zaimportowanego pomocnika, ale nie można znaleźć modułu „{0}”.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}”, który nie istnieje w elemencie „{0}”. Rozważ uaktualnienie wersji „{0}”.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}” z parametrami {2}, który nie jest zgodny z tym w elemencie „{0}”. Rozważ uaktualnienie wersji elementu „{0}”.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Ten parametr typu może wymagać ograniczenia „rozszerzeń{0}”.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "To użycie elementu „import” jest nieprawidłowe. Wywołania „import()” mogą być zapisywane, ale muszą mieć nawiasy i nie mogą mieć argumentów typu.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Aby przekonwertować ten plik na moduł ECMAScript, dodaj pole „\"type\": \"module\"” do „{0}”.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub dodaj pole „\"type\": \"module\"” do „{1}”.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Aby przekonwertować ten plik na moduł ECMAScript, utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Wyrażenia „await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Instrukcje „await using” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklaracje najwyższego poziomu w plikach .d.ts muszą rozpoczynać się od modyfikatora „declare” lub „export”.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Pętle „for await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", - "Trailing_comma_not_allowed_1009": "Końcowy przecinek jest niedozwolony.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluj każdy plik jako oddzielny moduł (podobne do „ts.transpileModule”).", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Spróbuj użyć polecenia „npm i --save-dev @types/{1}”, jeśli istnieje, lub dodać nowy plik deklaracji (.d.ts) zawierający ciąg „declare module '{0}';”", - "Trying_other_entries_in_rootDirs_6110": "Wykonywanie prób przy użyciu innych pozycji opcji „rootDirs”.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Wykonywanie próby przeprowadzenia podstawienia „{0}”, lokalizacja modułu kandydata: „{1}”.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ krotki „{0}” o długości „{1}” nie ma żadnego elementu w indeksie „{2}”.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typu krotki cyklicznie odwołują się do samych siebie.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Po typie „{0}” można iterować tylko wtedy, gdy jest używana flaga „--downlevelIteration” lub parametr „--target” ma wartość „es2015” lub wyższą.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Typu „{0}” nie można używać jako typu indeksu.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Typu „{0}” nie można użyć do indeksowania typu „{1}”.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ „{0}” nie spełnia warunków ograniczenia „{1}”.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Typ „{0}” nie spełnia oczekiwanego typu „{1}”.", - "Type_0_has_no_call_signatures_2757": "Typ „{0}” nie ma sygnatur wywołania.", - "Type_0_has_no_construct_signatures_2761": "Typ „{0}” nie ma sygnatur konstrukcji.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ „{0}” nie ma pasującej sygnatury indeksu dla typu „{1}”.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "Typy „{0}” i „{1}” nie mają żadnych wspólnych właściwości.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Typ „{0}” nie ma podpisów, dla których ma zastosowanie lista argumentów typu ogólnego.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}” jest typem ogólnym i może być indeksowany tylko do odczytu.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2} i jeszcze {3}.", - "Type_0_is_not_a_constructor_function_type_2507": "Typ „{0}” nie jest typem funkcji konstruktora.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}” nie jest prawidłowym zwracanym typem funkcji asynchronicznej w języku ES5, ponieważ nie odwołuje się do wartości konstruktora zgodnej z elementem Promise.", - "Type_0_is_not_an_array_type_2461": "Typ „{0}” nie jest typem tablicowym.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ „{0}” nie jest typem tablicowym ani typem ciągu.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ „{0}” nie jest typem tablicy ani ciągu lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ „{0}” nie jest typem tablicy lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", - "Type_0_is_not_assignable_to_type_1_2322": "Typu „{0}” nie można przypisać do typu „{1}”.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Nie można przypisać typu „{0}” do typu „{1}”. Czy chodziło Ci o „{2}”?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typu „{0}” nie można przypisać do typu „{1}”. Istnieją dwa różne typy o tej nazwie, lecz są ze sobą niezwiązane.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Nie można przypisać typu „{0}” do typu „{1}”, jak sugeruje adnotacja wariancji.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Nie można przypisać typu „{0}” do typu „{1}” zgodnie z wymaganiami dla obliczonych wartości składowych wyliczenia.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typu elementu docelowego.", - "Type_0_is_not_comparable_to_type_1_2678": "Typu „{0}” nie można porównać z typem „{1}”.", - "Type_0_is_not_generic_2315": "Typ „{0}” nie jest ogólny.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ „{0}” może reprezentować wartość pierwotną, co nie jest dozwolone jako prawy operand operatora „in”.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Typ „{0}” musi zawierać metodę „[Symbol.asyncIterator]()” zwracającą iterator asynchroniczny.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ „{0}” musi zawierać metodę „[Symbol.iterator]()” zwracającą iterator.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Typ „{0}” nie udostępnia dopasowania dla sygnatury „{1}”.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ „{0}” rekursywnie przywołuje sam siebie jako typ podstawowy.", - "Type_Checking_6248": "Sprawdzanie typu", - "Type_alias_0_circularly_references_itself_2456": "Alias typu „{0}” cyklicznie przywołuje sam siebie.", - "Type_alias_must_be_given_a_name_1439": "Alias typu musi mieć nazwę.", - "Type_alias_name_cannot_be_0_2457": "Alias typu nie może mieć nazwy „{0}”.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasów typów można używać tylko w plikach TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Adnotacja typu nie może występować w deklaracji konstruktora.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Adnotacji typu można używać tylko w plikach TypeScript.", - "Type_argument_expected_1140": "Oczekiwano argumentu typu.", - "Type_argument_list_cannot_be_empty_1099": "Lista argumentów typu nie może być pusta.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typu mogą być używane tylko w plikach TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typu dla elementu „{0}” cyklicznie odwołują się do samych siebie.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozycji {0} w źródle nie jest zgodny z typem na pozycji {1} w lokalizacji docelowej.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozycjach od {0} do {1} w źródle nie jest zgodny z typem w pozycji {2} w lokalizacji docelowej.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ zawierający nazwę prywatną „{0}” nie może być używany z elementem --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Pliki deklaracji typu do uwzględnienia w kompilacji.", - "Type_expected_1110": "Oczekiwano typu.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Twierdzenie importu typu powinno mieć dokładnie jeden klucz – „resolution-mode“ – z wartością „importuj“ lub „wymagaj“.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Import typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tworzenie wystąpienia typu jest nadmiernie szczegółowe i prawdopodobnie nieskończone.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ jest przywoływany bezpośrednio lub pośrednio w wywołaniu zwrotnym realizacji jego własnej metody „then”.", - "Type_library_referenced_via_0_from_file_1_1402": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}” o identyfikatorze packageId „{2}”", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu „await” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ wartości właściwości obliczanej to „{0}”, którego nie można przypisać do typu „{1}”.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Typ zmiennej składowej wystąpienia „{0}” nie może odwoływać się do identyfikatora „{1}” zadeklarowanego w konstruktorze.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterowanych elementów operandu „yield*” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Typ właściwości „{0}” cyklicznie odwołuje się do siebie w zamapowanym typie „{1}”.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Typ operandu „yield” w generatorze asynchronicznym musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Import tylko typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Typ pochodzi z tego importu. Nie można wywołać ani skonstruować importu w stylu przestrzeni nazw, co spowoduje wystąpienie błędu w czasie wykonywania. Zamiast tego rozważ użycie importu domyślnego lub funkcji require importu.", - "Type_parameter_0_has_a_circular_constraint_2313": "Parametr typu „{0}” zawiera ograniczenie cykliczne.", - "Type_parameter_0_has_a_circular_default_2716": "Parametr typu „{0}” ma cykliczną wartość domyślną.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Parametr typu „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Parametr typu „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Parametr typu „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Parametr typu „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Parametr typu „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Parametr typu „{0}” wyeksportowanego mapowanego typu obiektu używa nazwy prywatnej „{1}”.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Parametr typu „{0}” wyeksportowanego aliasu typu ma nazwę prywatną „{1}” lub jej używa.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Parametr typu „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Parametr typu „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Parametr typu „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", - "Type_parameter_declaration_expected_1139": "Oczekiwano deklaracji parametru typu.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Deklaracje parametrów typu mogą być używane tylko w plikach TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Wartości domyślne parametrów typu mogą się odwoływać tylko do wcześniej zadeklarowanych parametrów typu.", - "Type_parameter_list_cannot_be_empty_1098": "Lista parametrów typu nie może być pusta.", - "Type_parameter_name_cannot_be_0_2368": "Parametr typu nie może mieć nazwy „{0}”.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu nie mogą występować w deklaracji konstruktora.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Predykatu typów „{0}” nie można przypisać do elementu „{1}”.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", - "Type_reference_directive_0_was_not_resolved_6120": "======== Dyrektywa odwołania do typu „{0}” nie została rozpoznana. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}”, podstawowe: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”, podstawowe: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typy nie mogą występować w deklaracjach eksportu w plikach JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Typy mają osobne deklaracje właściwości prywatnej „{0}”.", - "Types_of_construct_signatures_are_incompatible_2419": "Typy sygnatur konstrukcji są niezgodne.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Typy parametrów „{0}” i „{1}” są niezgodne.", - "Types_of_property_0_are_incompatible_2326": "Typy właściwości „{0}” są niezgodne.", - "Unable_to_open_file_0_6050": "Nie można otworzyć pliku „{0}”.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Nie można rozpoznać sygnatury dekoratora klasy wywołanego jako wyrażenie.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Nie można rozpoznać sygnatury dekoratora metody wywołanego jako wyrażenie.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Nie można rozpoznać sygnatury dekoratora parametru wywołanego jako wyrażenie.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Nie można rozpoznać sygnatury dekoratora właściwości wywołanego jako wyrażenie.", - "Undetermined_character_escape_1513": "Nieokreślony znak ucieczki.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Nieoczekiwane „{0}”. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", - "Unexpected_end_of_text_1126": "Nieoczekiwany koniec tekstu.", - "Unexpected_keyword_or_identifier_1434": "Nieoczekiwane słowo kluczowe lub identyfikator.", - "Unexpected_token_1012": "Nieoczekiwany token.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Nieoczekiwany token. Oczekiwano konstruktora, metody, metody dostępu lub właściwości.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Nieoczekiwany token. Oczekiwano nazwy parametru typu bez nawiasów klamrowych.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Nieoczekiwany token. Czy chodziło o „{'>'}” lub „>”?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Nieoczekiwany token. Czy chodziło o „{'}'}” lub „}”?", - "Unexpected_token_expected_1179": "Nieoczekiwany token. Oczekiwano znaku „{”.", - "Unicode_escape_sequence_cannot_appear_here_17021": "W tym miejscu nie można wyświetlić sekwencji ucieczki standardu Unicode.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Sekwencje ucieczki standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Wyrażenia wartości właściwości standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", - "Unknown_Unicode_property_name_1524": "Nieznana nazwa właściwości standardu Unicode.", - "Unknown_Unicode_property_name_or_value_1529": "Nieznana nazwa lub wartość właściwości standardu Unicode.", - "Unknown_Unicode_property_value_1526": "Nieznana wartość właściwości standardu Unicode.", - "Unknown_build_option_0_5072": "Nieznana opcja kompilacji „{0}”.", - "Unknown_build_option_0_Did_you_mean_1_5077": "Nieznana opcja kompilacji „{0}”. Czy chodziło o „{1}”?", - "Unknown_compiler_option_0_5023": "Nieznana opcja kompilatora „{0}”.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Nieznana opcja kompilatora „{0}”. Czy chodziło o „{1}”?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Nieznane słowo kluczowe lub identyfikator. Czy chodziło Ci o „{0}”?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Nieznana opcja „excludes”. Czy chodziło o „exclude”?", - "Unknown_regular_expression_flag_1499": "Nieznana flaga wyrażenia regularnego.", - "Unknown_type_acquisition_option_0_17010": "Opcja pozyskania nieznanego typu „{0}”.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Nieznana opcja pozyskania typu „{0}”. Czy chodziło o „{1}”?", - "Unknown_watch_option_0_5078": "Nieznana opcja obserwowania „{0}”.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Nieznana opcja obserwowania: „{0}”. Czy chodziło Ci o „{1}”?", - "Unreachable_code_detected_7027": "Wykryto nieosiągalny kod.", - "Unterminated_Unicode_escape_sequence_1199": "Niezakończona sekwencja ucieczki kodu Unicode.", - "Unterminated_quoted_string_in_response_file_0_6045": "Niezakończony ciąg ujęty w cudzysłów w pliku odpowiedzi „{0}”.", - "Unterminated_regular_expression_literal_1161": "Niezakończony literał wyrażenia regularnego.", - "Unterminated_string_literal_1002": "Niezakończony literał ciągu znaków.", - "Unterminated_template_literal_1160": "Niezakończony literał szablonu.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Wywołania funkcji bez typu nie mogą przyjmować argumentów typu.", - "Unused_label_7028": "Nieużywana etykieta.", - "Unused_ts_expect_error_directive_2578": "Nieużywana dyrektywa „@ts-expect-error”.", - "Update_import_from_0_90058": "Aktualizuj import z „{0}”", - "Update_modifiers_of_0_90061": "Modyfikatory aktualizacji elementu „{0}”", - "Updating_output_timestamps_of_project_0_6359": "Trwa aktualizowanie sygnatury czasowej danych wyjściowych projektu „{0}”...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Trwa aktualizowanie niezmienionych sygnatur czasowych danych wyjściowych projektu „{0}”...", - "Use_0_95174": "Użyj „{0}”.", - "Use_0_instead_5106": "Zamiast tego użyj „{0}”.", - "Use_Number_isNaN_in_all_conditions_95175": "Użyj wartości „Number.isNaN” we wszystkich warunkach.", - "Use_element_access_for_0_95145": "Użyj dostępu do elementu w przypadku elementu „{0}”", - "Use_element_access_for_all_undeclared_properties_95146": "Użyj dostępu do elementu w przypadku wszystkich niezadeklarowanych właściwości.", - "Use_import_type_95180": "Użyj opcji „import type”", - "Use_synthetic_default_member_95016": "Użyj syntetycznej składowej „default”.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Podczas rozpoznawania importów pakietów użyj pola „exports” pliku package.json.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Podczas rozpoznawania importów użyj pola „imports” pliku package.json.", - "Use_type_0_95181": "Użyj „typu {0}”", - "Using_0_subpath_1_with_target_2_6404": "Używanie „{0}” ścieżki podrzędnej „{1}” z elementem docelowym „{2}”.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Użycie fragmentów rozszerzenia JSX wymaga, aby fabryka fragmentów „{0}” była w zakresie, ale nie można jej znaleźć.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Używanie ciągu w instrukcji „for...of” jest obsługiwane tylko w języku ECMAScript 5 lub nowszym.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Użycie elementu --build, -b sprawi, że narzędzie tsc będzie zachowywało się bardziej jak orkiestrator kompilacji niż kompilator. Ta opcja jest wykorzystywana do wyzwalania kompilacji projektów złożonych, o których dowiesz się więcej na stronie {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", - "VERSION_6036": "WERSJA", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Wartość typu „{0}” nie ma żadnych wspólnych właściwości z typem „{1}”. Czy jej wywołanie było zamierzone?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Nie można wywołać wartości typu „{0}”. Czy miał zostać użyty operator „new”?", - "Variable_0_implicitly_has_an_1_type_7005": "Dla zmiennej „{0}” niejawnie określono typ „{1}”.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Zmienna „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Zmienna „{0}” niejawnie ma typ „{1}” w niektórych lokalizacjach, ale lepszy typ można wywnioskować na podstawie użycia.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Zmienna „{0}” ma niejawnie typ „{1}” w niektórych lokalizacjach, w których nie można określić jej typu.", - "Variable_0_is_used_before_being_assigned_2454": "Zmienna „{0}” jest używana przed przypisaniem.", - "Variable_declaration_expected_1134": "Oczekiwano deklaracji zmiennej.", - "Variable_declaration_list_cannot_be_empty_1123": "Lista deklaracji zmiennych nie może być pusta.", - "Variable_declaration_not_allowed_at_this_location_1440": "Deklaracja zmiennej jest niedozwolona w tej lokalizacji.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Zmienna musi mieć jawną adnotację typu z właściwością --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Zmienne z wieloma deklaracjami nie mogą być śródwierszowe.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element ze zmienną liczbą argumentów na pozycji {0} w źródle nie jest zgodny z elementem na pozycji {1} w lokalizacji docelowej.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Adnotacje wariancji są obsługiwane tylko w aliasach typów obiektów, funkcji, konstruktorów i mapowanych typów.", - "Version_0_6029": "Wersja {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Odwiedź https://aka.ms/ts6, aby uzyskać informacje o migracji.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Odwiedź https://aka.ms/tsconfig, aby dowiedzieć się więcej o tym pliku", - "WATCH_OPTIONS_6918": "OPCJE OBSERWACJI", - "Watch_and_Build_Modes_6250": "Tryb wyrażeń kontrolnych i kompilowania", - "Watch_input_files_6005": "Obserwuj pliki wejściowe.", - "Watch_option_0_requires_a_value_of_type_1_5080": "Opcja obserwowania „{0}” wymaga wartości typu {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Możemy napisać typ tylko dla elementu „{0}”, dodając typ dla całego parametru w tym miejscu.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Podczas przypisywania funkcji upewnij się, że parametry i zwracane wartości są zgodne pod względem podtypów.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Podczas sprawdzania typów uwzględniaj wartości „null” i „undefined”.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Określa, czy zachować nieaktualne dane wyjściowe konsoli w trybie śledzenia zamiast wyczyścić ekran.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Opakuj wszystkie nieprawidłowe znaki w kontenerze wyrażenia", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Zawijaj wszystkie nieprawidłowe wyrażenia dekoratora w nawiasy", - "Wrap_all_object_literal_with_parentheses_95116": "Zawijaj wszystkie literały obiektu z nawiasami", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Opakuj wszystkie elementy JSX bez elementu nadrzędnego we fragment JSX", - "Wrap_in_JSX_fragment_95120": "Opakuj we fragment JSX", - "Wrap_in_parentheses_95194": "Zawijaj w nawiasy", - "Wrap_invalid_character_in_an_expression_container_95108": "Opakuj nieprawidłowy znak w kontenerze wyrażenia", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Zawijaj następującą treść z nawiasami, która powinna być literałem obiektu", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "O wszystkich opcjach kompilatora przeczytasz na stronie {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Nie można zmienić nazwy modułu za pomocą importu globalnego.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Nie można zmieniać nazw elementów zdefiniowanych w folderze „node_modules”.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Nie można zmieniać nazw elementów zdefiniowanych w innym folderze „node_modules”.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nie można zmienić nazw elementów zdefiniowanych w standardowej bibliotece TypeScript.", - "You_cannot_rename_this_element_8000": "Nie można zmienić nazwy tego elementu.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Element „{0}” akceptuje za mało argumentów, aby można go było użyć w tym miejscu jako dekorator. Czy chcesz najpierw go wywołać i zapisać tag „@{0}()”?", - "_0_and_1_index_signatures_are_incompatible_2330": "Sygnatury indeksów „{0}” i „{1}” są niezgodne.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operacji „{0}” i „{1}” nie można mieszać bez nawiasów.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Element „{0}” został określony dwa razy. Atrybut o nazwie „{0}” zostanie przesłonięty.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "Element „{0}” na końcu typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "Element „{0}” na początku typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Element „{0}” można zaimportować tylko przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "Element „{0}” można zaimportować tylko przy użyciu importu domyślnego.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Element „{0}” można zaimportować za pomocą wywołania „require” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Element „{0}” można zaimportować tylko za pomocą wywołania „require” lub przy użyciu importu domyślnego.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub importu domyślnego.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", - "_0_cannot_be_used_as_a_JSX_component_2786": "Elementu „{0}” nie można użyć jako składnika JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Element „{0}” nie może być używany jako wartość, ponieważ został wyeksportowany przy użyciu aliasu „export type”.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Element „{0}” nie może być używany jako wartość, ponieważ został zaimportowany przy użyciu aliasu „import type”.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Składniki „{0}” nie akceptują tekstu jako elementów podrzędnych. Tekst w JSX ma typ „string”, ale oczekiwany typ elementu „{1}” to „{2}”.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Nie można utworzyć wystąpienia elementu „{0}” z dowolnym typem, który może być niezwiązany z elementem „{1}”.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklaracje „{0}” mogą być deklarowane tylko w bloku.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklaracje „{0}” mogą być używane tylko w plikach TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "Deklaracje „{0}” mogą nie mieć wzorców powiązań.", - "_0_declarations_must_be_initialized_1155": "Deklaracje „{0}” muszą być zainicjowane.", - "_0_expected_1005": "Oczekiwano elementu „{0}”.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "Element „{0}” ma typ ciągu, ale po włączeniu opcji „isolatedModules” musi mieć składnię ciągu rozpoznawalną składniowo.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "Element „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy chodziło o „{2}”?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "Element „{0}” niejawnie ma zwracany typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dla elementu „{0}” niejawnie określono zwracany typ „any”, ponieważ nie zawiera on adnotacji zwracanego typu i jest przywoływany bezpośrednio lub pośrednio w jednym z jego zwracanych wyrażeń.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Dla elementu „{0}” niejawnie określono typ „any”, ponieważ nie zawiera on adnotacji typu i jest przywoływany bezpośrednio lub pośrednio w jego własnym inicjatorze.", - "_0_index_signatures_are_incompatible_2634": "Sygnatury indeksów „{0}” są niezgodne.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Typu indeksu „{0}” „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "Element „{0}” jest elementem podstawowym, ale element „{1}” jest obiektem otoki. Preferuje się użycie elementu „{0}”, jeśli jest to możliwe.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "„{0}” jest typem i nie można go zaimportować w plikach JavaScript. Użyj elementu „{1}” w adnotacji typu JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "Element „{0}” jest typem i należy go zaimportować przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}” to nieużywana zmiana nazwy elementu „{1}”. Czy zamierzano używać go jako adnotacji typu?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "Element „{0}” można przypisać do ograniczenia typu „{1}”, ale wystąpienie typu „{1}” można utworzyć z innym podtypem ograniczenia „{2}”.", - "_0_is_automatically_exported_here_18044": "W tym miejscu jest automatycznie eksportowany element „{0}”.", - "_0_is_declared_but_its_value_is_never_read_6133": "Element „{0}” jest zadeklarowany, ale jego wartość nie jest nigdy odczytywana.", - "_0_is_declared_but_never_used_6196": "Element „{0}” jest zadeklarowany, ale nie jest nigdy używany.", - "_0_is_declared_here_2728": "Element „{0}” jest zadeklarowany tutaj.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "Element „{0}” jest zdefiniowany jako właściwość w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako metoda dostępu.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "Element „{0}” jest zdefiniowany jako metoda dostępu w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako właściwość wystąpienia.", - "_0_is_deprecated_6385": "Element „{0}” jest przestarzały.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "„{0}” nie jest prawidłową metawłaściwością słowa kluczowego „{1}”. Czy miał to być element „{2}”?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "„{0}” jest niedozwolone jako nazwa parametru.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Element „{0}” nie jest dozwolony jako nazwa deklaracji zmiennej.", - "_0_is_of_type_unknown_18046": "Element „{0}” jest typu „nieznany”.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "Element „{0}” prawdopodobnie ma wartość „null”.", - "_0_is_possibly_null_or_undefined_18049": "Element „{0}” prawdopodobnie ma wartość „null” lub jest „niezdefiniowany”.", - "_0_is_possibly_undefined_18048": "Element „{0}” jest prawdopodobnie „niezdefiniowany”.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnym wyrażeniu podstawowym.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnej adnotacji typu.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "Element „{0}” został określony więcej niż raz, dlatego to użycie zostanie przesłonięte.", - "_0_list_cannot_be_empty_1097": "Lista „{0}” nie może być pusta.", - "_0_modifier_already_seen_1030": "Napotkano już modyfikator „{0}”.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modyfikator „{0}” może występować tylko w parametrze typu klasy, interfejsu lub aliasu typu", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modyfikator „{0}” może występować tylko w parametrze typu funkcji, metody lub klasy", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modyfikator „{0}” nie może występować w deklaracji konstruktora.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modyfikator „{0}” nie może być stosowany w przypadku elementu przestrzeni nazw lub modułu.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Modyfikator „{0}” nie może występować w parametrze.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Modyfikator „{0}” nie może być stosowany w przypadku składowej typu.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modyfikator „{0}” nie może występować w parametrze typu", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modyfikator „{0}” nie może występować w deklaracji „using”.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modyfikator „{0}” nie może występować w deklaracji „await using”.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modyfikator „{0}” nie może być stosowany w przypadku sygnatury indeksu.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modyfikator „{0}” nie może występować w elementach klasy tego rodzaju.", - "_0_modifier_cannot_be_used_here_1042": "Modyfikatora „{0}” nie można użyć w tym miejscu.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Modyfikatora „{0}” nie można użyć w otaczającym kontekście.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modyfikatora „{0}” nie można używać z modyfikatorem „{1}”.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modyfikatora „{0}” nie można używać z identyfikatorem prywatnym.", - "_0_modifier_must_precede_1_modifier_1029": "Modyfikator „{0}” musi występować przed modyfikatorem „{1}”.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po wyrażeniu „\\{0}” musi następować wyrażenie wartości właściwości standardu Unicode ujęte w nawiasy klamrowe.", - "_0_needs_an_explicit_type_annotation_2782": "Element „{0}” wymaga jawnej adnotacji typu.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako przestrzeń nazw.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "Element „{0}” odwołuje się jedynie do typu, ale jest używany w tym miejscu jako wartość.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "Element „{0}” odwołuje się do typu, ale jest używany tutaj jako wartość. Czy chodziło o użycie wyrażenia „{1} in {0}”?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element \"{0}\" odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na es2015 lub nowszą.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "„{0}” odnosi się do globalnego formatu UMD, ale bieżący plik jest modułem. Rozważ zamiast tego dodanie importu.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "Element „{0}” odwołuje się do wartości, ale jest używany tutaj jako typ. Czy chodziło o „typeof {0}”?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać zaimportowany przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać ponownie wyeksportowany przy użyciu ponownego eksportowania tylko typu, gdy włączono opcję „{1}”.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Element \"{0}\" powinien być ustawiony wewnątrz obiektu \"compilerOptions\" pliku json konfiguracji", - "_0_tag_already_specified_1223": "Tag „{0}” jest już określony.", - "_0_was_also_declared_here_6203": "Element „{0}” został również zadeklarowany w tym miejscu.", - "_0_was_exported_here_1377": "Element „{0}” został wyeksportowany tutaj.", - "_0_was_imported_here_1376": "Element „{0}” został zaimportowany tutaj.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modyfikator „abstract” może być stosowany jedynie w przypadku deklaracji klasy, metody lub właściwości.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Modyfikator „accessor” może występować tylko w deklaracji właściwości.", - "and_here_6204": "i tutaj.", - "and_npm_install_D_types_Slashnode_6290": "i npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Argumentów nie można odwoływać w inicjalizatorach właściwości ani w blokach inicjalizacji statycznej klasy.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto”: Traktuj pliki za pomocą importów, eksportów, import.meta, jsx (z jsx: react-jsx) lub formatu esm (z modułem: node16+) jako moduły.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia „await” wewnątrz bloku statycznego klasy.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Wyrażenia „await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Wyrażenia „await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Wyrażeń „await” nie można używać w inicjatorze parametru.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "Operator „await” nie ma wpływu na typ tego wyrażenia.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Deklaracje „await using” są niedozwolone w kontekstach otoczenia.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Deklaracje „await using” nie są dozwolone w klauzulach „case” lub „default”, chyba że znajdują się w bloku.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Instrukcje „await using” są dozwolone tylko na najwyższym poziomie pliku, gdy ten plik jest modułem, ale ten plik nie ma importów ani eksportów. Rozważ dodanie pustego wyrażenia „export {}”, aby uczynić ten plik modułem.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instrukcje „await using” są dozwolone tylko w ramach funkcji asynchronicznych i na najwyższych poziomach modułów.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instrukcji „await using” nie można używać wewnątrz bloku statycznego klasy.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Opcja „baseUrl” ma ustawioną wartość „{0}”. Ta wartość zostanie użyta do rozpoznania innej niż względna nazwy modułu „{1}”.", - "c_must_be_followed_by_an_ASCII_letter_1512": "Po wyrażeniu „\\c” musi następować litera ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "Elementu „#!” można użyć tylko na początku pliku.", - "case_or_default_expected_1130": "Oczekiwano elementu „case” lub „default”.", - "catch_or_finally_expected_1472": "Oczekiwano instrukcji „catch” lub „finally”.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest wartość nieskończona.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest niedozwolona wartość „NaN”.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "inicjatory składowych wyliczenia const muszą być wyrażeniami stałymi.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Wyliczenia ze specyfikatorem „const” mogą być używane tylko w wyrażeniach dostępu do indeksu lub właściwości albo po prawej stronie deklaracji importu, przypisania eksportu lub typu zapytania.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Nie można użyć ciągu „constructor” jako nazwy właściwości parametru.", - "constructor_is_a_reserved_word_18012": "„#constructor” jest słowem zastrzeżonym.", - "default_Colon_6903": "wartość domyślna:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Nie można wywołać elementu „delete” dla identyfikatora w trybie z ograniczeniami.", - "export_Asterisk_does_not_re_export_a_default_1195": "Wyrażenie „export *” nie eksportuje ponownie eksportów domyślnych.", - "export_can_only_be_used_in_TypeScript_files_8003": "Składnia „export =” może być używana tylko w plikach TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Modyfikator „export” nie może być stosowany do modułów otoczenia ani rozszerzeń modułów, ponieważ są one zawsze widoczne.", - "extends_clause_already_seen_1172": "Napotkano już klauzulę „extends”.", - "extends_clause_must_precede_implements_clause_1173": "Klauzula „extends” musi poprzedzać klauzulę „implements”.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzula „extends” wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzula „extends” wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzula „extends” wyeksportowanego interfejsu „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", - "false_unless_checkJs_is_set_6932": "`false`, chyba że ustawiono `checkJs`", - "false_unless_composite_is_set_6906": "\"false\", chyba że ustawiono element \"composite\"", - "file_6025": "plik", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Pętle „for await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Pętle „for await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli „for await” nie można używać wewnątrz bloku statycznego klasy.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Metody dostępu „get” i „set” nie mogą deklarować parametrów „this”.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\" jeśli określono \"files\", w przeciwnym razie \"[\"**/*\"]\"", - "implements_clause_already_seen_1175": "Napotkano już klauzulę „implements”.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule „implements” mogą być używane tylko w plikach TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "Ciąg „import ... =” może być używany tylko w plikach TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklaracje „infer” są dozwolone tylko w klauzuli „extends” typu warunkowego.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po wyrażeniu „\\k” musi następować nazwa grupy przechwytywania ujęta w nawiasy ostre.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Element „let” nie może być używany jako nazwa w deklaracjach „let” ani „const”.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Wyrażenie „new”, którego element docelowy nie ma sygnatury konstrukcji, jest niejawnie typu „any”.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", plus wartość elementu \"outDir\", jeśli jest określona.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext`, jeśli `module` ma wartość `nodenext`; `node16`, jeśli `module` ma wartość `node16` lub `node18`; w przeciwnym razie `bundler`.", - "one_of_Colon_6900": "jeden z:", - "one_or_more_Colon_6901": "co najmniej jeden:", - "options_6024": "opcje", - "or_JSX_element_expected_1145": "Oczekiwano elementu „{” lub JSX.", - "or_expected_1144": "Oczekiwano znaku „{” lub „;”.", - "package_json_does_not_have_a_0_field_6100": "Plik „package.json” nie zawiera pola „{0}”.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "Plik „package.json” nie zawiera wpisu „typesVersions” odpowiadającego wersji „{0}”.", - "package_json_had_a_falsy_0_field_6220": "Plik „package.json” miał błędne pole „{0}”.", - "package_json_has_0_field_1_that_references_2_6101": "Plik „package.json” zawiera pole „{0}” „{1}” odwołujące się do elementu „{2}”.", - "package_json_has_a_peerDependencies_field_6281": "Plik „package.json” ma pole „peerDependencies”.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który nie jest prawidłowym zakresem semver.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który dopasowuje wersję kompilatora „{1}”, szukając wzorca odpowiadającego nazwie modułu „{2}”.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Plik „package.json” zawiera pole „typesVersions” z mapowaniami ścieżek specyficznymi dla wersji.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Zakres package.json „{0}” jawnie mapuje specyfikator „{1}” na wartość null.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Zakres package.json „{0}” ma nieprawidłowy typ elementu docelowego specyfikatora „{1}”", - "package_json_scope_0_has_no_imports_defined_6273": "Zakres package.json „{0}” nie ma zdefiniowanych importów.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Opcja „paths” została określona. Wyszukiwanie wzorca zgodnego z nazwą modułu „{0}”.", - "q_is_only_available_inside_character_class_1511": "Wyrażenie „\\q” jest dostępne tylko wewnątrz klasy znaków.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po wyrażeniu „\\q” muszą następować alternatywy ciągów ujęte w nawiasy klamrowe.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modyfikator „readonly” może występować jedynie w deklaracji właściwości lub sygnaturze indeksu.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modyfikator typu „readonly” jest dozwolony tylko w typach literału tablicy i krotki.", - "require_call_may_be_converted_to_an_import_80005": "Wywołanie „require” może zostać przekonwertowane na wywołanie import.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "Element „resolution-mode“ można ustawić wyłącznie dla importów tylko typów.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "Element „resolution-mode“ jest jedynym prawidłowym kluczem dla twierdzenia importu typu.", - "resolution_mode_should_be_either_require_or_import_1453": "Element „resolution-mode” powinien mieć wartość „require” lub „import”.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Opcja „rootDirs” została ustawiona. Zostanie ona użyta do rozpoznania względnej nazwy modułu „{0}”.", - "super_can_only_be_referenced_in_a_derived_class_2335": "Element „super” może być przywoływany tylko w klasie pochodnej.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Element „super” może być przywoływany jedynie w składowych klas pochodnych lub wyrażeń literałów obiektów.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Nie można przywołać elementu „super” w obliczonej nazwie właściwości.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "Nie można przywoływać elementu „super” w argumentach konstruktora.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Element „super” jest dozwolony w składowych wyrażeń literałów obiektów tylko wtedy, gdy opcja „target” ma wartość „ES2015” lub wyższą.", - "super_may_not_use_type_arguments_2754": "Element „super” nie może używać argumentów typu.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Element „super” należy wywołać przed uzyskaniem dostępu do właściwości elementu „super” w konstruktorze klasy pochodnej.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Element „super” musi być wywoływany przed uzyskaniem dostępu do elementu „this” w konstruktorze klasy pochodnej.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Po elemencie „super” musi występować lista argumentów lub metoda dostępu do składowej.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Dostęp do właściwości „super” jest dozwolony tylko w konstruktorze, funkcji składowej lub metodzie dostępu składowej klasy pochodnej.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "Nie można przywołać elementu „this” w obliczonej nazwie właściwości.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Nie można przywołać elementu „this” w treści modułu ani przestrzeni nazw.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Nie można przywołać elementu „this” w inicjatorze właściwości statycznej.", - "this_cannot_be_referenced_in_current_location_2332": "Nie można przywołać elementu „this” w bieżącej lokalizacji.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Element „this” niejawnie przyjmuje typ „any”, ponieważ nie ma adnotacji typu.", - "true_for_ES2022_and_above_including_ESNext_6930": "wartość \"true\" dla ES2022 i powyżej, uwzględniając ESNext.", - "true_if_composite_false_otherwise_6909": "\"true\", jeśli \"composite\", w przeciwnym razie \"false\"", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true”, gdy element „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”; w przeciwnym razie „false”.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: kompilator TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "Plik tsconfig.json jest obecny, ale nie zostanie załadowany, jeśli w wierszu polecenia podano pliki. Aby pominąć ten błąd, użyj opcji „--ignoreConfig”.", - "type_Colon_6902": "typ:", - "unique_symbol_types_are_not_allowed_here_1335": "Typy „unique symbol” nie są dozwolone w tym miejscu.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy „unique symbol” są dozwolone tylko w zmiennych w instrukcji zmiennej.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typów „unique symbol” nie można używać w deklaracji zmiennej z nazwą powiązania.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Dyrektywy „use strict” nie można używać z listą parametrów, które nie są parametrami prostymi.", - "use_strict_directive_used_here_1349": "Dyrektywa „use strict” użyta w tym miejscu.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Deklaracje „using” nie są dozwolone w kontekstach otoczenia.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Deklaracje „using” nie są dozwolone w klauzulach „case” lub „default”, chyba że znajdują się w bloku.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "Instrukcje „with” są niedozwolone w bloku funkcji asynchronicznej.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Instrukcje „with” są niedozwolone w trybie z ograniczeniami.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Wyrażenie „yield” niejawnie zwraca wynik w postaci typu „any”, ponieważ w zawierającym generatorze brakuje adnotacji zwracanego typu.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Wyrażeń „yield” nie można używać w inicjatorze parametru." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "WSZYSTKIE OPCJE KOMPILATORA", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modyfikatora „{0}” nie można używać z deklaracją importu.", + "A_0_parameter_must_be_the_first_parameter_2680": "Parametr „{0}” musi być pierwszym parametrem.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Tag „@template” obiektu JSDoc nie może następować po tagu „@typedef”, „@callback” ani „@overload”", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentarz JSDoc „@typedef” nie może zawierać wielu tagów „@type”.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literał „bigint” nie może być używany jako nazwa właściwości.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Literał typu bigint nie może używać notacji wykładniczej.", + "A_bigint_literal_must_be_an_integer_1353": "Literał typu bigint musi być liczbą całkowitą.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr wzorca wiązania nie może być opcjonalny w sygnaturze implementacji.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Instrukcji „break” można użyć tylko w ramach otaczającej instrukcji iteracji lub switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Instrukcja „break” może wykonać skok tylko do etykiety otaczającej instrukcji.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Klasa znaków nie może zawierać zastrzeżonej podwójnej interpunkcji. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Zakres klasy znaków nie może być ograniczony przez inną klasę znaków.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Klasa może zawierać implementację tylko identyfikatora/nazwy kwalifikowanej z opcjonalnymi argumentami typu.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Klasa może implementować tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Klasa nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Klasy mogą rozszerzać tylko wartości konstruowalne.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Klasa nie może zaimplementować typu pierwotnego, takiego jak „{0}”. Może implementować tylko inne nazwane typy obiektów.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklaracja klasy bez modyfikatora „default” musi mieć nazwę.", + "A_class_member_cannot_have_the_0_keyword_1248": "Składowa klasy nie może zawierać słowa kluczowego „{0}”.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Wyrażenie przecinkowe nie jest dozwolone w obliczonej nazwie właściwości.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Obliczona nazwa właściwości nie może odwoływać się do parametru typu z zawierającego go typu.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Nazwa właściwości obliczanej w deklaracji właściwości klasy musi mieć typ prostego literału lub typ „unikatowy symbol”.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Nazwa właściwości obliczanej w przeciążeniu metody musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Nazwa właściwości obliczanej w typie literału musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Nazwa właściwości obliczanej w otaczającym kontekście musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Nazwa właściwości obliczanej w interfejsie musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Obliczona nazwa właściwości musi być typu „string”, „number”, „symbol” lub „any”.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Asercja „const” może być stosowana tylko do odwołań do elementów członkowskich wyliczenia lub ciągu, liczby, wartości logicznej, tablicy lub literałów obiektów.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Dostęp do składowej wyliczenia ze specyfikatorem const można uzyskać tylko za pomocą literału ciągu.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Inicjator „const” w otaczającym kontekście musi być ciągiem, literałem liczbowym albo odwołaniem do literału wyliczenia.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Konstruktor nie może zawierać wywołania „super”, gdy jego klasa rozszerza wartość „null”.", + "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nie może zawierać parametru „this”.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Instrukcji „continue” można użyć tylko w otaczającej instrukcji iteracji.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Instrukcja „continue” może wykonać skok tylko do etykiety otaczającej instrukcji iteracji.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nie można zaimportować pliku deklaracji bez elementu „import type”. Czy zamiast tego chcesz zaimportować plik implementacji „{0}”?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Nie można użyć modyfikatora „declare” w otaczającym kontekście.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorator może dekorować jedynie implementację metody, a nie przeciążenie.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzula „default” nie może występować więcej niż raz w instrukcji „switch”.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Eksport domyślny może być używany tylko w module w stylu języka ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Eksport domyślny musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Asercja określonego przypisania „!” nie jest dozwolona w tym kontekście.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Deklaracja usuwająca strukturę musi mieć inicjator.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Wywołanie dynamicznego importowania w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "A_file_cannot_have_a_reference_to_itself_1006": "Plik nie może przywoływać samego siebie.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkcja zwracająca wartość „never” nie może mieć osiągalnego punktu końcowego.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkcja wywoływana ze słowem kluczowym „new” nie może mieć typu „this” o wartości „void”.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkcja, której zadeklarowany typ nie ma wartości „undefined”, „void” ani „any”, musi zwracać wartości.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Generator nie może mieć adnotacji typu „void”.", + "A_get_accessor_cannot_have_parameters_1054": "Metoda dostępu „get” nie może mieć parametrów.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Metoda dostępu get musi być co najmniej tak samo dostępna, jak metoda ustawiająca", + "A_get_accessor_must_return_a_value_2378": "Metoda dostępu „get” musi zwracać wartość.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element krotki z etykietą jest deklarowany jako opcjonalny za pomocą znaku zapytania po nazwie i przed dwukropkiem, a nie po typie.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Oznaczony etykietą element krotki jest deklarowany jako reszta z \"...\" przed nazwą, a nie przed typem.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Zmapowany typ nie może deklarować właściwości ani metod.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicjator składowej w deklaracji wyliczenia nie może przywoływać składowych zadeklarowanych po nim, w tym składowych zdefiniowanych w innych wyliczeniach.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Klasa mixin musi mieć konstruktor z pojedynczym parametrem rest o typie „any[]”.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Klasa domieszki, która rozciąga się od zmiennej typu zawierającej sygnaturę konstrukcji abstrakcyjnej, musi być również zadeklarowana jako „abstract”.", + "A_module_cannot_have_multiple_default_exports_2528": "Moduł nie może mieć wielu eksportów domyślnych.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklaracja przestrzeni nazw nie może znajdować się w innym pliku niż klasa lub funkcja, z którą ją scalono.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklaracja przestrzeni nazw nie może występować przed klasą lub funkcją, z którą ją scalono.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklaracja przestrzeni nazw jest dozwolona tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklaracja „namespace” nie powinna być deklarowana przy użyciu słowa kluczowego „module”. Zamiast tego należy użyć słowa kluczowego „namespace”.", + "A_non_dry_build_would_build_project_0_6357": "Kompilacja inna niż -dry spowodowałaby skompilowanie projektu „{0}”", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Kompilacja inna niż -dry spowodowałaby usunięcie następujących plików: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Kompilacja bez opcji dry spowoduje zaktualizowanie sygnatur czasowych dla danych wyjściowych projektu „{0}”", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicjator parametru jest dozwolony tylko w implementacji funkcji lub konstruktora.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Właściwości parametru nie można zadeklarować za pomocą parametru rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Właściwość parametru jest dozwolona tylko w implementacji konstruktora.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Właściwości parametru nie można zadeklarować za pomocą wzorca wiązania.", + "A_promise_must_have_a_then_method_1059": "Obietnica musi mieć metodę „then”.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Właściwość klasy, której typem jest „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Właściwość klasy, której typem jest literał lub „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", + "A_required_element_cannot_follow_an_optional_element_1257": "Wymagany element nie może występować po elemencie opcjonalnym.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Wymagany parametr nie może występować po opcjonalnym parametrze.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nie może zawierać wzorca wiązania.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nie może następować po innym elemencie rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Element rest nie może mieć nazwy właściwości.", + "A_rest_element_cannot_have_an_initializer_1186": "Element rest nie może mieć inicjatora.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musi być ostatni we wzorcu usuwającym strukturę.", + "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musi być typem tablicowym.", + "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nie może być opcjonalny.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nie może mieć inicjatora.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Parametr rest musi występować na końcu listy parametrów.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musi być typu tablicowego.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest ani wzorzec wiązania nie może mieć końcowego przecinka.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Instrukcji „return” można użyć tylko w treści funkcji.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Instrukcji „return” nie można użyć wewnątrz bloku statycznego klasy.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Seria wpisów, które ponownie mapują importowane dane na lokalizacje wyszukiwania względne wobec adresu „baseUrl”.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Metoda dostępu „set” nie może mieć adnotacji zwracanego typu.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Metoda dostępu „set” nie może mieć parametru opcjonalnego.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Metoda dostępu „set” nie może mieć parametru rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Metoda dostępu „set” musi mieć dokładnie jeden parametr.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr metody dostępu „set” nie może mieć inicjatora.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument nadlewki musi mieć typ krotki lub być przekazywany do parametru Rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Wywołanie „super” musi być instrukcją na poziomie głównym w konstruktorze klasy pochodnej, która zawiera zainicjowane właściwości, właściwości parametrów lub identyfikatory prywatne.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Wywołanie „super” musi być pierwszą instrukcją w konstruktorze, aby odwoływać się do „super” lub „this”, gdy klasa pochodna zawiera zainicjalizowane właściwości, właściwości parametrów lub prywatne identyfikatory.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrona typu oparta na elemencie „this” nie jest zgodna z ochroną typu opartą na parametrze.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ „this” jest dostępny tylko w niestatycznej składowej klasy lub interfejsu.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modyfikatora „export” najwyższego poziomu nie można używać w deklaracjach wartości w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Plik „tsconfig.json” jest już zdefiniowany w: „{0}”.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Składowa krotki nie może być jednocześnie opcjonalna i typu rest.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Nie można indeksować typu krotki z wartością ujemną.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Wyrażenie asercji typu jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Właściwość literału typu nie może mieć inicjatora.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Import dotyczący tylko typu może określać import domyślny lub powiązania nazwane, ale nie jedno i drugie jednocześnie.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Predykat typów nie może zawierać odwołania do parametru rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Predykat typów nie może zawierać odwołania do elementu „{0}” we wzorcu wiązania.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Predykat typów jest dozwolony tylko w położeniu zwracanego typu dla funkcji i metod.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Musi być możliwe przypisanie typu predykatu typów do typu jego parametru.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Typ przywoływany w sygnaturze dekorowanej musi zostać zaimportowany za pomocą elementu „import type” lub importu przestrzeni nazw, gdy są włączone elementy „isolatedModules” i „emitDecoratorMetadata”.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Zmienna, której typem „unique symbol”, musi być określona jako „const”.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Wyrażenie „yield” jest dozwolone tylko w treści generatora.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Nie można uzyskać dostępu do metody abstrakcyjnej „{0}” w klasie „{1}” za pomocą wyrażenia super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Metody abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Właściwości abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Właściwość abstrakcyjna „{0}” w klasie „{1}” jest niedostępna w konstruktorze.", + "Accessibility_modifier_already_seen_1028": "Napotkano już modyfikator dostępności.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Metody dostępu są dostępne tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Obie metody dostępu muszą być abstrakcyjne lub nieabstrakcyjne.", + "Add_0_to_unresolved_variable_90008": "Dodaj „{0}.” do nierozpoznanej zmiennej", + "Add_a_return_statement_95111": "Dodaj instrukcję return", + "Add_a_return_type_to_the_function_declaration_9031": "Dodaj zwracany typ do deklaracji funkcji.", + "Add_a_return_type_to_the_function_expression_9030": "Dodaj zwracany typ do wyrażenia funkcji.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Dodaj zwracany typ do deklaracji metody dostępu get.", + "Add_a_return_type_to_the_method_9034": "Dodawanie typu zwracanego do metody", + "Add_a_type_annotation_to_the_parameter_0_9028": "Dodaj adnotację typu do parametru {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Dodaj adnotację typu do właściwości {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Dodaj adnotację typu do zmiennej {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Dodaj typ do parametru deklaracji metody dostępu zestawu.", + "Add_all_missing_async_modifiers_95041": "Dodaj wszystkie brakujące modyfikatory „async”", + "Add_all_missing_attributes_95168": "Dodawanie wszystkich brakujących atrybutów", + "Add_all_missing_call_parentheses_95068": "Dodaj wszystkie brakujące nawiasy wywołań", + "Add_all_missing_function_declarations_95157": "Dodaj wszystkie brakujące deklaracje funkcji", + "Add_all_missing_imports_95064": "Dodaj wszystkie brakujące importy", + "Add_all_missing_members_95022": "Dodaj wszystkie brakujące elementy członkowskie", + "Add_all_missing_override_modifiers_95162": "Dodaj wszystkie brakujące modyfikatory „override”", + "Add_all_missing_parameters_95190": "Dodaj wszystkie brakujące parametry", + "Add_all_missing_properties_95166": "Dodaj wszystkie brakujące właściwości", + "Add_all_missing_return_statement_95114": "Dodaj wszystkie brakujące instrukcje return", + "Add_all_missing_super_calls_95039": "Dodaj wszystkie brakujące wywołania typu super", + "Add_all_missing_type_annotations_90067": "Dodaj wszystkie brakujące adnotacje typu", + "Add_all_optional_parameters_95193": "Dodaj wszystkie parametry opcjonalne", + "Add_annotation_of_type_0_90062": "Dodaj adnotację typu „{0}”", + "Add_async_modifier_to_containing_function_90029": "Dodaj modyfikator asynchroniczny do funkcji zawierającej", + "Add_await_95083": "Dodaj operator „await”", + "Add_await_to_initializer_for_0_95084": "Dodaj operator „await” do inicjatora dla elementu „{0}”", + "Add_await_to_initializers_95089": "Dodaj operator „await” do inicjatorów", + "Add_braces_to_arrow_function_95059": "Dodaj nawiasy klamrowe do funkcji strzałki", + "Add_const_to_all_unresolved_variables_95082": "Dodaj element „const” do wszystkich nierozpoznanych zmiennych", + "Add_const_to_unresolved_variable_95081": "Dodaj element „const” do nierozpoznanej zmiennej", + "Add_definite_assignment_assertion_to_property_0_95020": "Dodaj asercję określonego przypisania do właściwości „{0}”", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Dodaj asercję określonego przypisania do wszystkich niezainicjowanych właściwości", + "Add_export_to_make_this_file_into_a_module_95097": "Dodaj element „export {}”, aby przekształcić ten plik w moduł", + "Add_extends_constraint_2211": "Dodaj ograniczenie „rozszerzeń”.", + "Add_extends_constraint_to_all_type_parameters_2212": "Dodaj ograniczenie „rozszerzeń” do wszystkich parametrów typu", + "Add_import_from_0_90057": "Dodaj import z „{0}”", + "Add_index_signature_for_property_0_90017": "Dodaj sygnaturę indeksu dla właściwości „{0}”", + "Add_initializer_to_property_0_95019": "Dodaj inicjator do właściwości „{0}”", + "Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości", + "Add_missing_attributes_95167": "Dodawanie brakujących atrybutów", + "Add_missing_call_parentheses_95067": "Dodaj brakujące nawiasy wywołań", + "Add_missing_comma_for_object_member_completion_0_95187": "Dodaj brakujący przecinek dla ukończenia składowych obiektu „{0}”.", + "Add_missing_enum_member_0_95063": "Dodaj brakujący element członkowski wyliczenia „{0}”", + "Add_missing_function_declaration_0_95156": "Dodaj brakującą deklarację funkcji „{0}”", + "Add_missing_new_operator_to_all_calls_95072": "Dodaj brakujący operator „new” do wszystkich wywołań", + "Add_missing_new_operator_to_call_95071": "Dodaj brakujący operator „new” do wywołania", + "Add_missing_parameter_to_0_95188": "Dodaj brakujący parametr do elementu „{0}”", + "Add_missing_parameters_to_0_95189": "Dodaj brakujące parametry do elementu „{0}”", + "Add_missing_properties_95165": "Dodaj brakujące właściwości", + "Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”", + "Add_missing_typeof_95052": "Dodaj brakujący element „typeof”", + "Add_names_to_all_parameters_without_names_95073": "Dodaj nazwy do wszystkich parametrów bez nazw", + "Add_optional_parameter_to_0_95191": "Dodaj opcjonalny parametr do elementu „{0}\"", + "Add_optional_parameters_to_0_95192": "Dodaj opcjonalne parametry do elementu „{0}”", + "Add_or_remove_braces_in_an_arrow_function_95058": "Dodaj lub usuń nawiasy klamrowe w funkcji strzałki", + "Add_override_modifier_95160": "Dodaj modyfikator „override”", + "Add_parameter_name_90034": "Dodaj nazwę parametru", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej", + "Add_resolution_mode_import_attribute_95196": "Dodaj atrybut importu „resolution-mode”", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Dodaj atrybut importu „resolution-mode” do wszystkich importów tylko typu, które go potrzebują", + "Add_return_type_0_90063": "Dodaj zwracany typ „{0}”", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Dodaj elementy satisfies i asercję typu do tego wyrażenia (satisfies T jako T), aby jawnie utworzyć typ.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Dodaj elementy satisfies i asercję typu wbudowanego za pomocą elementu „{0}”", + "Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów", + "Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Dodaj element „niezdefiniowany” do typu podczas uzyskiwania dostępu przy użyciu indeksu.", + "Add_undefined_to_optional_property_type_95169": "Dodaj element \"undefined\" do opcjonalnego typu właściwości", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Dodaj typ nieokreślony do wszystkich niezainicjowanych właściwości", + "Add_undefined_type_to_property_0_95018": "Dodaj typ „undefined” do właściwości „{0}”", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Dodaj konwersję „unknown” dla nienakładających się typów", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Dodaj element „unknown” do wszystkich konwersji nienakładających się typów", + "Add_void_to_Promise_resolved_without_a_value_95143": "Dodaj argument „void” do obiektu Promise rozwiązanego bez wartości", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Dodaj argument „void” do wszystkich obiektów Promise rozwiązanych bez wartości", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Dodanie pliku tsconfig.json pomoże w organizowaniu projektów, które zawierają pliki TypeScript i JavaScript. Dowiedz się więcej: https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne ograniczenia.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne modyfikatory.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Wszystkie deklaracje „{0}” muszą mieć identyczne parametry typu.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Wszystkie deklaracje metody abstrakcyjnej muszą występować obok siebie.", + "All_destructured_elements_are_unused_6198": "Wszystkie elementy, których strukturę usunięto, są nieużywane.", + "All_imports_in_import_declaration_are_unused_6192": "Wszystkie importy w deklaracji importu są nieużywane.", + "All_type_parameters_are_unused_6205": "Wszystkie parametry typu są nieużywane.", + "All_variables_are_unused_6199": "Wszystkie zmienne są nieużywane.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Zezwalaj plikom JavaScript na udział w programie. Użyj opcji „checkJS”, aby uzyskać błędy z tych plików.", + "Allow_accessing_UMD_globals_from_modules_6602": "Zezwalaj na dostęp do zmiennych globalnych UMD z modułów.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Zezwalaj na elementy „import x from y”, gdy moduł nie ma domyślnej operacji eksportu.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Zezwalaj na jednorazowe importowanie funkcji pomocniczych z biblioteki tslib w projekcie zamiast dołączania ich dla poszczególnych plików.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Zezwalaj na importowanie w celu uwzględnienia rozszerzeń plików TypeScript. Wymaga ustawienia elementu „--moduleResolution bundler” i „--noEmit” lub „--emitDeclarationOnly”.", + "Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Zezwalaj na traktowanie wielu folderów jako jednego podczas rozpoznawania modułów.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Już dołączona nazwa pliku „{0}” różni się od nazwy pliku „{1}” tylko wielkością liter", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklaracja otaczającego modułu nie może określać względnej nazwy modułu.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Moduły otoczenia nie mogą być zagnieżdżone w innych modułach ani przestrzeniach nazw.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Moduł AMD nie może mieć wielu przypisań nazw.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstrakcyjna metoda dostępu nie może mieć implementacji.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modyfikator dostępności nie może być używany z identyfikatorem prywatnym.", + "An_accessor_cannot_have_type_parameters_1094": "Metoda dostępu nie może mieć parametrów typu.", + "An_accessor_property_cannot_be_declared_optional_1276": "Właściwość „accessor” nie może być zadeklarowana jako opcjonalna.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklaracja otaczającego modułu jest dozwolona tylko na najwyższym poziomie pliku.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Nie podano argumentu dla elementu „{0}”.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Argument pasujący do tego wzorca powiązania nie został podany.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Arytmetyczny operand musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkcja strzałki nie może mieć parametru „this”.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchroniczna funkcja lub metoda w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchroniczna funkcja lub metoda musi zwrócić element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "An_async_iterator_must_have_a_next_method_2519": "Iterator asynchroniczny musi mieć metodę „next()”.", + "An_element_access_expression_should_take_an_argument_1011": "Wyrażenie dostępu do elementu powinno przyjmować argument.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Elementu członkowskiego wyliczenia nie można nazwać za pomocą identyfikatora prywatnego.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Składowa wyliczenia nie może mieć nazwy liczbowej.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Po nazwie elementu członkowskiego wyliczenia musi następować znak „,”, „=” lub „}”.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozszerzona wersja tych informacji, przedstawiająca wszystkie możliwe opcje kompilatora", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Nie można użyć przypisania eksportu w module z innymi eksportowanymi elementami.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Nie można użyć przypisania eksportu w przestrzeni nazw.", + "An_export_assignment_cannot_have_modifiers_1120": "Przypisanie eksportu nie może mieć modyfikatorów.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Przypisanie eksportu musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklaracji eksportu można używać tylko na najwyższym poziomie modułu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklaracji eksportu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "An_export_declaration_cannot_have_modifiers_1193": "Deklaracja eksportu nie może mieć modyfikatorów.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Deklaracja „export =” musi odwoływać się do rzeczywistej wartości, gdy właściwość „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklaracja „export =” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Element „export default” musi odwoływać się do rzeczywistej wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Element „export default” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Wyrażenie typu „void” nie może być testowane pod kątem prawdziwości.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozszerzona wartość znaku ucieczki Unicode musi należeć do zakresu od 0x0 do 0x10FFFF (włącznie).", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identyfikatora lub słowa kluczowego nie można użyć bezpośrednio po literale liczbowym.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementacja nie może być zadeklarowana w otaczających kontekstach.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu nie może odwoływać się do deklaracji, która została wyeksportowana przy użyciu elementu „export type”.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu nie może odwoływać się do deklaracji, która została zaimportowana przy użyciu elementu „import type”.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Alias importu nie może zostać rozpoznany jako deklaracja typu lub deklaracja tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "An_import_alias_cannot_use_import_type_1392": "Alias importu nie może używać właściwości „import type”", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklaracji importu można używać tylko na najwyższym poziomie modułu.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklaracji importu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "An_import_declaration_cannot_have_modifiers_1191": "Deklaracja importu nie może mieć modyfikatorów.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ścieżka importu może tylko kończyć się rozszerzeniem „{0}”, gdy jest włączona opcja „allowImportingTsExtensions”.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Sygnatura indeksu nie może mieć parametru rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Sygnatura indeksu nie może być zakończona przecinkiem.", + "An_index_signature_must_have_a_type_annotation_1021": "Sygnatura indeksu musi mieć adnotację typu.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Sygnatura indeksu musi mieć dokładnie jeden parametr.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Parametr sygnatury indeksu nie może zawierać znaku zapytania.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Parametr sygnatury indeksu nie może mieć modyfikatora dostępności.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Parametr sygnatury indeksu nie może mieć inicjatora.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Parametr sygnatury indeksu musi mieć adnotację typu.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru sygnatury indeksu nie może być typem literału ani typem ogólnym. Rozważ użycie zamiast tego mapowanego typu obiektu.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Parametr sygnatury indeksu musi mieć typ „string”, „number” lub „symbol” albo typ literału szablonu.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po wyrażeniu tworzenia wystąpienia nie może następować dostęp do właściwości.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Interfejs może rozszerzać tylko identyfikator/nazwę kwalifikowaną z opcjonalnymi argumentami typu.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Interfejs może rozszerzać tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Interfejs nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Może rozszerzać tylko inne nazwane typy obiektów.", + "An_interface_property_cannot_have_an_initializer_1246": "Właściwość interfejsu nie może mieć inicjatora.", + "An_iterator_must_have_a_next_method_2489": "Iterator musi zawierać metodę „next()”.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "W przypadku używania dyrektywy pragma @jsx z fragmentami JSX jest wymagana dyrektywa pragma @jsxFrag.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Literał obiektu nie może mieć wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literał obiektu nie może mieć wielu właściwości o tej samej nazwie.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literał obiektu nie może mieć właściwości i metody dostępu o takiej samej nazwie.", + "An_object_member_cannot_be_declared_optional_1162": "Składowa obiektu nie może być zadeklarowana jako opcjonalna.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]” obiektu musi zwracać wartość logiczną, aby mogła być używana po prawej stronie wyrażenia „instanceof”.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Opcjonalny łańcuch nie może zawierać identyfikatorów prywatnych.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Element opcjonalny nie może następować po elemencie rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Zewnętrzna wartość parametru „this” jest zasłaniana przez ten kontener.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Sygnatura przeciążenia nie może być zadeklarowana jako generator.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Wyrażenie jednoargumentowe z operatorem „{0}” jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", + "Annotate_everything_with_types_from_JSDoc_95043": "Adnotuj wszystko przy użyciu typów JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Adnotuj typy funkcji expando właściwości w przestrzeni nazw", + "Annotate_with_type_from_JSDoc_95009": "Dodaj adnotację z typem z danych JSDoc", + "Another_export_default_is_here_2753": "W tym miejscu jest kolejny element export default.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Każda właściwość standardu Unicode, która może być zgodna z więcej niż jednym znakiem, jest dostępna tylko wtedy, gdy ustawiono flagę Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Wszystko, co może być zgodne z więcej niż pojedynczym znakiem, jest nieprawidłowe wewnątrz klasy znaków negowanych.", + "Are_you_missing_a_semicolon_2734": "Czy brakuje średnika?", + "Argument_expression_expected_1135": "Oczekiwano wyrażenia argumentu.", + "Argument_for_0_option_must_be_Colon_1_6046": "Argumentem opcji „{0}” musi być: {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Argument importu dynamicznego nie może być elementem spread.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Nie można przypisać argumentu typu „{0}” do parametru typu „{1}”.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argumentu typu \"{0}\" nie można przypisać do parametru typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nie podano argumentów dla parametru REST „{0}”.", + "Array_element_destructuring_pattern_expected_1181": "Oczekiwano wzorca usuwającego strukturę elementu tablicy.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Tablic z elementami rozproszonymi nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Asercje wymagają, aby każda nazwa w celu wywołania była zadeklarowana z jawną adnotacją typu.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Asercje wymagają, aby cel wywołania był identyfikatorem lub nazwą kwalifikowaną.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Przypisywanie właściwości do funkcji bez deklarowania ich nie jest obsługiwane w przypadku opcji --isolatedDeclarations. Dodaj jawną deklarację właściwości przypisanych do tej funkcji.", + "Asterisk_Slash_expected_1010": "Oczekiwano znaków „*/”.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Co najmniej jeden akcesor musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozszerzenia zakresu globalnego mogą być zagnieżdżane bezpośrednio jedynie w modułach zewnętrznych lub deklaracjach modułów otoczenia.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozszerzenia zakresu globalnego muszą mieć modyfikator „declare”, chyba że znajdują się w już otaczającym kontekście.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatyczne odnajdowanie operacji wpisywania zostało włączone w projekcie „{0}”. Trwa uruchamianie dodatkowego przejścia rozwiązania dla modułu „{1}” przy użyciu lokalizacji pamięci podręcznej „{2}”.", + "BUILD_OPTIONS_6919": "OPCJE KOMPILACJI", + "Backwards_Compatibility_6253": "Zgodność z poprzednimi wersjami", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Wyrażenia klasy bazowej nie mogą odwoływać się do parametrów typu klasy.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Zwracany typ konstruktora bazowego „{0}” nie jest typem obiektu ani częścią wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Wszystkie konstruktory podstawowe muszą mieć ten sam zwracany typ.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Katalog podstawowy do rozpoznawania innych niż bezwzględne nazw modułów.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Literały typu BigInt są niedostępne, gdy wersja docelowa jest wcześniejsza niż ES2020.", + "Binary_digit_expected_1177": "Oczekiwano bitu.", + "Binding_element_0_implicitly_has_an_1_type_7031": "Dla elementu powiązania „{0}” niejawnie określono typ „{1}”.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Zmienna „{0}” o zakresie bloku została użyta przed jej deklaracją.", + "Build_a_composite_project_in_the_working_directory_6925": "Skompiluj projekt złożony w katalogu roboczym.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Kompiluj co najmniej jeden projekt i jego zależności, jeśli są nieaktualne", + "Build_option_0_requires_a_value_of_type_1_5073": "Opcja kompilacji „{0}” wymaga wartości typu {1}.", + "Building_project_0_6358": "Trwa kompilowanie projektu „{0}”...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Wbudowane iteratory są tworzone przy użyciu typu „TReturn” o wartości „undefined” zamiast „any”.", + "COMMAND_LINE_FLAGS_6921": "FLAGI WIERSZA POLECENIA", + "COMMON_COMMANDS_6916": "TYPOWE POLECENIA", + "COMMON_COMPILER_OPTIONS_6920": "TYPOWE OPCJE KOMPILATORA", + "Call_decorator_expression_90028": "Wywołaj wyrażenie dekoratora", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Zwracane typy sygnatur wywołania „{0}” i „{1}” są niezgodne.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dla sygnatury wywołania bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Sygnatury wywołania bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", + "Call_target_does_not_contain_any_signatures_2346": "Cel wywołania nie zawiera żadnych podpisów.", + "Can_only_convert_logical_AND_access_chains_95142": "Można konwertować tylko łańcuchy logiczne ORAZ łańcuchy dostępu", + "Can_only_convert_named_export_95164": "Można przekonwertować tylko nazwany eksport", + "Can_only_convert_property_with_modifier_95137": "Właściwość można skonwertować tylko za pomocą modyfikatora", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Można konwertować tylko połączenia ciągów i literały ciągów", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Nie można uzyskać dostępu do elementu „{0}.{1}”, ponieważ element „{0}” jest typem, ale nie przestrzenią nazw. Czy chcesz pobrać typ właściwości „{1}” w lokalizacji „{0}” za pomocą elementu „{0}[„{1}”]”?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Nie można uzyskać dostępu do „{0}” z innego pliku bez kwalifikacji, gdy opcja „{1}” jest włączona. Zamiast tego użyj „{2}”.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Nie można uzyskać dostępu do wyliczenia stałej otoczenia, gdy element „{0}” jest włączony.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Nie można przypisać typu konstruktora „{0}” do typu konstruktora „{1}”.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Nie można przypisać abstrakcyjnego typu konstruktora do nieabstrakcyjnego typu konstruktora.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Nie można przypisać do elementu „{0}”, ponieważ jest to klasa.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nie można przypisać do elementu „{0}”, ponieważ jest to stała.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Nie można przypisać do elementu „{0}”, ponieważ jest to funkcja.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Nie można przypisać do elementu „{0}”, ponieważ jest to przestrzeń nazw.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nie można przypisać do elementu „{0}”, ponieważ jest to właściwość tylko do odczytu.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Nie można przypisać do elementu „{0}”, ponieważ jest to wyliczenie.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Nie można przypisać do elementu „{0}”, ponieważ jest to import.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nie można przydzielić do elementu „{0}”, ponieważ nie jest to zmienna.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Nie można przypisać do metody prywatnej „{0}”. Metody prywatne nie są zapisywalne.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Nie można rozszerzyć modułu „{0}”, ponieważ rozpoznawany jest obiekt inny niż moduł.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Nie można rozszerzyć modułu „{0}” za pośrednictwem operacji eksportu wartości, ponieważ jest on rozpoznawany jako jednostka inna niż moduł.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Nie można skompilować modułów za pomocą opcji „{0}”, chyba że flaga „--module” ma wartość „amd” lub „system”.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Nie można utworzyć wystąpienia klasy abstrakcyjnej.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Nie można delegować iteracji do wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale zawierający generator będzie zawsze wysyłał „{0}”.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Nie można wyeksportować elementu „{0}”. Z modułu można eksportować jedynie lokalne deklaracje.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Nie można rozszerzyć klasy „{0}”. Konstruktor klasy jest oznaczony jako prywatny.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Nie można rozszerzyć interfejsu „{0}”. Czy chodziło Ci o „implements”?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Nie można odnaleźć pliku tsconfig.json w bieżącym katalogu: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Nie można znaleźć pliku tsconfig.json w określonym katalogu: „{0}”.", + "Cannot_find_global_type_0_2318": "Nie można odnaleźć typu globalnego „{0}”.", + "Cannot_find_global_value_0_2468": "Nie można odnaleźć wartości globalnej „{0}”.", + "Cannot_find_lib_definition_for_0_2726": "Nie można znaleźć definicji biblioteki dla elementu „{0}”.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nie można znaleźć definicji biblioteki dla elementu „{0}”. Czy chodziło Ci o element „{1}”?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nie można znaleźć modułu „{0}”. Rozważ użycie opcji „--resolveJsonModule” do importowania modułu z rozszerzeniem „.json”.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nie można odnaleźć modułu „{0}”. Czy chcesz ustawić opcję „moduleResolution” na wartość „nodenext”, czy dodać aliasy do opcji „paths”?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nie można odnaleźć modułu „{0}” lub odpowiadających mu deklaracji typów.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Nie można odnaleźć deklaracji modułu lub typu dla importu efektu ubocznego elementu „{0}”.", + "Cannot_find_name_0_2304": "Nie można odnaleźć nazwy „{0}”.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Nie można znaleźć nazwy „{0}”. Czy chodziło Ci o „{1}”?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Nie można znaleźć nazwy „{0}”. Czy chodziło o składową wystąpienia „this.{0}”?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Nie można znaleźć nazwy „{0}”. Czy chodziło o statyczną składową „{1}.{0}”?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nie można odnaleźć nazwy \"{0}\". Czy chodziło Ci o napisanie tego w funkcji asynchronicznej?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na wersję \"{1}\" lub nowszą.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić element \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”, a następnie dodaj ciąg „bun” do pola typów w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia \"npm i --save-dev @types/jest\" lub \"npm i --save-dev @types/mocha\", a następnie dodaj element \"jest\" lub \"mocha\" do pola types w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia \"npm i --save-dev @types/jquery\", a następnie dodaj element \"jquery\" do pola types w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla środowiska Node? Spróbuj użyć polecenia „npm i --save-dev @types/node”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla węzła? Spróbuj użyć polecenia \"npm i --save-dev @types/node\", a następnie dodaj element \"node\" do pola types w pliku tsconfig.", + "Cannot_find_namespace_0_2503": "Nie można odnaleźć przestrzeni nazw „{0}”.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Nie można odnaleźć przestrzeni nazw „{0}”. Czy chodziło Ci o „{1}”?", + "Cannot_find_parameter_0_1225": "Nie można odnaleźć parametru „{0}”.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nie można odnaleźć wspólnej ścieżki podkatalogu dla plików wejściowych.", + "Cannot_find_type_definition_file_for_0_2688": "Nie można znaleźć pliku definicji typu dla elementu „{0}”.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Nie można zaimportować plików deklaracji typu. Rozważ zaimportowanie „{0}” zamiast „{1}”.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Nie można zainicjować zmiennej „{0}” z zakresu zewnętrznego w tym samym zakresie co deklaracja „{1}” należąca do zakresu bloku.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null”.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null” lub „undefined”.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „undefined”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale destrukturyzacja tablicy będzie zawsze wysyłała „{0}”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale rozkładanie tablicy będzie zawsze wysyłało „{0}”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale pętla for-of będzie zawsze wysyłała „{0}”.", + "Cannot_move_statements_to_the_selected_file_95183": "Nie można przenieść instrukcji do wybranego pliku", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Nie można przenieść do pliku, wybrany plik jest nieprawidłowy", + "Cannot_read_file_0_5083": "Nie można odczytać pliku „{0}”.", + "Cannot_read_file_0_Colon_1_5012": "Nie można odczytać pliku „{0}”: {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Nie można ponownie zadeklarować zmiennej „{0}” o zakresie bloku.", + "Cannot_redeclare_exported_variable_0_2323": "Nie można zadeklarować ponownie wyeksportowanej zmiennej „{0}”.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nie można ponownie zadeklarować identyfikatora „{0}” w klauzuli catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nie można uruchomić wywołania funkcji w adnotacji typu.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Nie można użyć kodu JSX, jeśli nie podano flagi „--jsx”.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Nie można użyć polecenia „export import” w przestrzeni nazw typu lub tylko typu, gdy opcja „{0}” jest włączona.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nie można używać importów, eksportów lub rozszerzeń modułów, jeśli flaga „--module” ma wartość „none”.", + "Cannot_use_namespace_0_as_a_type_2709": "Nie można używać przestrzeni nazw „{0}” jako typu.", + "Cannot_use_namespace_0_as_a_value_2708": "Nie można używać przestrzeni nazw „{0}” jako wartości.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Nie można użyć elementu \"this\" w statycznym inicjatorze właściwości dekorowanej klasy.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Nie można zapisać pliku „{0}”, ponieważ spowoduje to zastąpienie pliku „.tsbuildinfo” generowanego przez przywoływany projekt „{1}”", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Nie można zapisać pliku „{0}”, ponieważ zostałby nadpisany przez wiele plików wejściowych.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Nie można zapisać pliku „{0}”, ponieważ nadpisałby plik wejściowy.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Zmienna klauzuli catch nie może mieć inicjatora.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Adnotacja typu zmiennej w klauzuli catch musi mieć wartość „any” lub „unknown”, jeśli jest określona.", + "Change_0_to_1_90014": "Zmień element „{0}” na „{1}”", + "Change_all_extended_interfaces_to_implements_95038": "Zmień wszystkie rozszerzone interfejsy na elementy „implements”", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Zmień wszystkie typy w stylu JSDoc na TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Zmień wszystkie typy w stylu JSDoc na TypeScript (i dodaj element „| undefined” do typów dopuszczających wartość null)", + "Change_extends_to_implements_90003": "Zmień atrybut „extends” na „implements”", + "Change_spelling_to_0_90022": "Zmień pisownię na „{0}”", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Sprawdź, czy istnieją zadeklarowane właściwości klas, które nie zostały ustawione w konstruktorze.", + "Check_side_effect_imports_6806": "Sprawdź importy efektów ubocznych.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Sprawdź, czy argumenty dla metod „bind”, „call” i „apply” są zgodne z oryginalną funkcją.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Sprawdzanie, czy „{0}” to najdłuższy zgodny prefiks dla „{1}” — „{2}”.", + "Circular_definition_of_import_alias_0_2303": "Definicja cykliczna aliasu importu „{0}”.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Wykryto cykliczność podczas rozpoznawania konfiguracji: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Cykliczność pochodzi z typu w tym miejscu.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Klasa „{0}” definiuje metodę dostępu do składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Klasa „{0}” definiuje funkcję składową wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako metodę dostępu do składowej wystąpienia.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Klasa „{0}” definiuje właściwość składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", + "Class_0_incorrectly_extends_base_class_1_2415": "Klasa „{0}” niepoprawnie rozszerza klasę bazową „{1}”.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Klasa „{0}” niepoprawnie implementuje klasę „{1}”. Czy chodziło o rozszerzenie „{1}” i odziedziczenie jego elementów członkowskich jako podklasy?", + "Class_0_incorrectly_implements_interface_1_2420": "Klasa „{0}” zawiera niepoprawną implementację interfejsu „{1}”.", + "Class_0_used_before_its_declaration_2449": "Klasa „{0}” została użyta przed zadeklarowaniem.", + "Class_constructor_may_not_be_a_generator_1368": "Konstruktor klas nie może być generatorem.", + "Class_constructor_may_not_be_an_accessor_1341": "Konstruktor klas nie może być metodą dostępu.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklaracja klasy nie może implementować listy przeciążeń dla elementu \"{0}\".", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag \"@augments\" lub \"@extends\".", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekoratorów klas nie można używać ze statycznym identyfikatorem prywatnym. Rozważ usunięcie eksperymentalnego dekoratora.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole klasy „{0}” zdefiniowane przez klasę nadrzędną nie jest dostępne w klasie podrzędnej za pośrednictwem super.", + "Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Nazwa klasy nie może być identyczna z „Object” w przypadku modułu ES5 i nowszych {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.", + "Classes_can_only_extend_a_single_class_1174": "Klasy mogą rozszerzać tylko pojedynczą klasę.", + "Classes_may_not_have_a_field_named_constructor_18006": "Klasy nie mogą mieć pola o nazwie „constructor”.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Kod zawarty w klasie jest obliczany w trybie z ograniczeniami języka JavaScript, który nie zezwala na użycie elementu \"{0}\". Aby uzyskać więcej informacji, zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opcje wiersza polecenia", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Skompiluj projekt z uwzględnieniem ścieżki jego pliku konfiguracji lub folderu z plikiem „tsconfig.json”.", + "Compiler_Diagnostics_6251": "Diagnostyka kompilatora", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Opcja kompilatora „{0}” nie może mieć pustego ciągu.", + "Compiler_option_0_expects_an_argument_6044": "Opcja kompilatora „{0}” oczekuje argumentu.", + "Compiler_option_0_may_not_be_used_with_build_5094": "Opcja kompilatora \"--{0}\" nie może być używana z parametrem \"--build\".", + "Compiler_option_0_may_only_be_used_with_build_5093": "Opcję kompilatora \"--{0}\" można używać tylko z parametrem \"--build\".", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Opcja kompilatora \"{0}\" wartości '{1}' jest niestabilna. Użyj nocnego TypeScript, aby wyciszyć ten błąd. Spróbuj zaktualizować za pomocą polecenia „npm install -D typescript@next”.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Opcja kompilatora „{0}” wymaga wartości typu {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilator rezerwuje nazwę „{0}” podczas emitowania identyfikatora prywatnego na niższy poziom.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiluje projekt języka TypeScript znajdujący się w określonej ścieżce.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiluje bieżący projekt (plik tsconfig.json w katalogu roboczym).", + "Compiles_the_current_project_with_additional_settings_6929": "Kompiluje bieżący projekt z dodatkowymi ustawieniami.", + "Completeness_6257": "Kompletność", + "Composite_projects_may_not_disable_declaration_emit_6304": "Projekty kompozytowe nie mogą wyłączyć emitowania deklaracji.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Projekty złożone nie mogą wyłączać kompilacji przyrostowej.", + "Computed_from_the_list_of_input_files_6911": "Obliczono na podstawie listy plików wejściowych", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Obliczone właściwości muszą być literałami liczb lub ciągów, zmiennymi lub wyrażeniami kropkowanymi z wyrażeniem --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Obliczone nazwy właściwości nie są dozwolone w wyliczeniach.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nie można wywnioskować obliczonych nazw właściwości w literałach klas lub obiektów za pomocą wyrażenia --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Obliczone wartości nie są dozwolone w wyliczeniu ze składowymi o wartości ciągu.", + "Concatenate_and_emit_output_to_single_file_6001": "Połącz i wyemituj dane wyjściowe do pojedynczego pliku.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Warunki, które należy ustawić oprócz ustawień domyślnych specyficznych dla programu rozpoznawania nazw podczas rozpoznawania importów.", + "Conflicts_are_in_this_file_6201": "Konflikty znajdują się w tym pliku.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Rozważ dodanie modyfikatora \"declare\" do tej klasy.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Zwracane typy „{0}” i „{1}” sygnatur konstrukcji są niezgodne.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dla sygnatury konstrukcji bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Sygnatury konstrukcji bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", + "Constructor_implementation_is_missing_2390": "Brak implementacji konstruktora.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Konstruktor klasy „{0}” jest prywatny i dostępny tylko w ramach deklaracji klasy.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor klasy „{0}” jest chroniony i dostępny tylko w ramach deklaracji klasy.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie unii.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory klas pochodnych muszą zawierać wywołanie „super”.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Nie podano pliku zawierającego i nie można określić katalogu głównego. Pomijanie wyszukiwania w folderze „node_modules”.", + "Containing_function_is_not_an_arrow_function_95128": "Funkcja zawierająca nie jest funkcją strzałki", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Określ, jaka metoda jest używana do wykrywania plików JS w formacie modułu.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Konwersja typu „{0}” na typ „{1}” może być błędem, ponieważ żaden z tych typów nie pokrywa się w wystarczającym stopniu z drugim. Jeśli było to zamierzone, najpierw przekonwertuj wyrażenie na typ „unknown”.", + "Convert_0_to_1_in_0_95003": "Konwertuj element „{0}” na element „{1} w {0}”.", + "Convert_0_to_mapped_object_type_95055": "Konwertuj element „{0}” na zamapowany typ obiektu", + "Convert_all_const_to_let_95102": "Konwertuj wszystkie elementy „const” na „let”", + "Convert_all_constructor_functions_to_classes_95045": "Przekonwertuj wszystkie funkcje konstruktora na klasy", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Konwertuj wszystkie nieprawidłowe znaki na kod jednostki HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Konwertuj wszystkie ponownie wyeksportowane typy na eksporty dotyczące tylko typu", + "Convert_all_require_to_import_95048": "Konwertuj wszystkie wywołania „require” na wywołania „import”", + "Convert_all_to_async_functions_95066": "Konwertuj wszystko na funkcje asynchroniczne", + "Convert_all_to_bigint_numeric_literals_95092": "Konwertuj wszystko na literały liczbowe typu bigint", + "Convert_all_to_default_imports_95035": "Przekonwertuj wszystko na domyślne importowanie", + "Convert_all_type_literals_to_mapped_type_95021": "Konwertuj wszystkie literały typu na typ zamapowany", + "Convert_all_typedef_to_TypeScript_types_95177": "Konwertuj wszystkie elementy typedef na typy TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Konwertuj funkcję strzałki lub wyrażenie funkcji", + "Convert_const_to_let_95093": "Konwertuj zmienne „const” na „let”", + "Convert_default_export_to_named_export_95061": "Konwertuj eksport domyślny na nazwany eksport", + "Convert_function_declaration_0_to_arrow_function_95106": "Konwertuj deklarację funkcji „{0}” na funkcję strzałki", + "Convert_function_expression_0_to_arrow_function_95105": "Konwertuj wyrażenie funkcji „{0}” na funkcję strzałki", + "Convert_function_to_an_ES2015_class_95001": "Konwertuj funkcję na klasę ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Konwertuj nieprawidłowy znak na jego kod jednostki html", + "Convert_named_export_to_default_export_95062": "Konwertuj nazwany eksport na eksport domyślny", + "Convert_named_imports_to_default_import_95170": "Konwertuj nazwane importy na import domyślny", + "Convert_named_imports_to_namespace_import_95057": "Konwertuj importy nazwane na import przestrzeni nazw", + "Convert_namespace_import_to_named_imports_95056": "Konwertuj import przestrzeni nazw na importy nazwane", + "Convert_overload_list_to_single_signature_95118": "Konwertuj listę przeciążeń na pojedynczą sygnaturę", + "Convert_parameters_to_destructured_object_95075": "Konwertuj parametry na obiekt destrukturyzowany", + "Convert_require_to_import_95047": "Konwertuj wywołanie „require” na wywołanie „import”", + "Convert_to_ES_module_95017": "Konwertuj na moduł ES", + "Convert_to_a_bigint_numeric_literal_95091": "Konwertuj na literał liczbowy typu bigint", + "Convert_to_anonymous_function_95123": "Konwertuj na funkcję anonimową", + "Convert_to_arrow_function_95125": "Konwertuj na funkcję strzałki", + "Convert_to_async_function_95065": "Konwertuj na funkcję asynchroniczną", + "Convert_to_default_import_95013": "Konwertuj na import domyślny", + "Convert_to_named_function_95124": "Konwertuj na funkcję nazwaną", + "Convert_to_optional_chain_expression_95139": "Konwertuj na opcjonalne wyrażenie łańcucha", + "Convert_to_template_string_95096": "Konwertuj na ciąg szablonu", + "Convert_to_type_only_export_1364": "Konwertuj na eksport dotyczący tylko typu", + "Convert_typedef_to_TypeScript_type_95176": "Konwertuj element typedef na typ TypeScript.", + "Corrupted_locale_file_0_6051": "Uszkodzony plik ustawień regionalnych {0}.", + "Could_not_convert_to_anonymous_function_95153": "Nie można przekonwertować na funkcję anonimową", + "Could_not_convert_to_arrow_function_95151": "Nie można przekonwertować na funkcję strzałki", + "Could_not_convert_to_named_function_95152": "Nie można przekonwertować na nazwaną funkcję", + "Could_not_determine_function_return_type_95150": "Nie można określić zwracanego typu funkcji", + "Could_not_find_a_containing_arrow_function_95127": "Nie można było znaleźć zawierającej funkcji strzałki", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nie można znaleźć pliku deklaracji dla modułu „{0}”. Element „{1}” ma niejawnie typ „any”.", + "Could_not_find_convertible_access_expression_95140": "Nie można odnaleźć konwertowalnego wyrażenia dostępu", + "Could_not_find_export_statement_95129": "Nie można było znaleźć instrukcji export", + "Could_not_find_import_clause_95131": "Nie można było znaleźć klauzuli import", + "Could_not_find_matching_access_expressions_95141": "Nie można odnaleźć zgodnych wyrażeń dostępu", + "Could_not_find_name_0_Did_you_mean_1_2570": "Nie można znaleźć nazwy „{0}”. Czy chodziło o „{1}”?", + "Could_not_find_namespace_import_or_named_imports_95132": "Nie można było znaleźć importu przestrzeni nazw lub nazwanych importów", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Nie można było znaleźć właściwości, dla której ma zostać wygenerowana metoda dostępu", + "Could_not_find_variable_to_inline_95185": "Nie można odnaleźć zmiennej w tekście.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nie można rozpoznać ścieżki „{0}” z rozszerzeniami: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Nie można zapisać pliku „{0}”: {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Twórz pliki mapy źródła dla emitowanych plików JavaScript.", + "Create_sourcemaps_for_d_ts_files_6614": "Twórz mapy źródła dla plików d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Tworzy plik tsconfig.json z zalecanymi ustawieniami w katalogu roboczym.", + "DIRECTORY_6038": "KATALOG", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sekwencje ucieczki i odwołania wsteczne dziesiętne nie są dozwolone w klasie znaków.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Wartości dziesiętne z zerami wiodącymi są niedozwolone.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklaracja rozszerza deklarację w innym pliku. Nie można przeprowadzić serializacji.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Emisja deklaracji dla tego pliku wymaga zachowania tego importu dla rozszerzeń. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}” z modułu „{1}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Emisja deklaracji dla tego parametru wymaga niejawnego dodania parametru undefined do jego typu. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", + "Declaration_expected_1146": "Oczekiwano deklaracji.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Nazwa deklaracji powoduje konflikt z wbudowanym identyfikatorem globalnym „{0}”.", + "Declaration_or_statement_expected_1128": "Oczekiwano deklaracji lub instrukcji.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Oczekiwano deklaracji lub instrukcji. Ten znak „=” jest za blokiem instrukcji, dlatego jeśli chodziło Ci o napisanie przypisania usuwającego, może być konieczne zamknięcie całego przypisania w nawiasach.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklaracje z asercjami określonego przypisania muszą również mieć adnotacje typu.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklaracje z inicjatorami nie mogą mieć również asercji określonego przypisania.", + "Declare_a_private_field_named_0_90053": "Zadeklaruj pole prywatne o nazwie „{0}”.", + "Declare_method_0_90023": "Zadeklaruj metodę „{0}”", + "Declare_private_method_0_90038": "Zadeklaruj metodę prywatną „{0}”", + "Declare_private_property_0_90035": "Zadeklaruj właściwość prywatną „{0}”", + "Declare_property_0_90016": "Zadeklaruj właściwość „{0}”", + "Declare_static_method_0_90024": "Zadeklaruj metodę statyczną „{0}”", + "Declare_static_property_0_90027": "Zadeklaruj właściwość statyczną „{0}”", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Zwracany typ funkcji dekoratora „{0}” nie jest możliwy do przypisania do typu „{1}”.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Zwracany typ funkcji dekoratora to „{0}”, natomiast powinien być to typ „void” lub „any”.", + "Decorator_used_before_export_here_1486": "Dekorator używany przed elementem „export” w tym miejscu.", + "Decorators_are_not_valid_here_1206": "Elementy Decorator nie są tutaj prawidłowe.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Nie można stosować elementów Decorator do wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratory nie mogą występować po instrukcji „export” lub „export default”, jeśli występują również przed instrukcją „export”.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratory muszą poprzedzać nazwę i wszystkie słowa kluczowe deklaracji właściwości.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Wpisz zmienne klauzuli catch jako „unknown” zamiast „any”.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Domyślny eksport modułu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Eksportów domyślnych nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Importy domyślne są niedozwolone w odroczonym imporcie.", + "Default_library_1424": "Domyślna biblioteka", + "Default_library_for_target_0_1425": "Domyślna biblioteka dla elementu docelowego „{0}”", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Odroczone importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „esnext” lub „preserve”.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definicje następujących identyfikatorów powodują konflikt z tymi w innym pliku: {0}", + "Delete_all_unused_declarations_95024": "Usuń wszystkie nieużywane deklaracje", + "Delete_all_unused_imports_95147": "Usuń wszystkie nieużywane importy", + "Delete_all_unused_param_tags_95172": "Usuń wszystkie nieużywane tagi „@param”", + "Delete_the_outputs_of_all_projects_6365": "Usuń dane wyjściowe wszystkich projektów.", + "Delete_unused_param_tag_0_95171": "Usuń nieużywany tag „@param” „{0}”", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Przestarzałe] Użyj w zastępstwie opcji „--jsxFactory”. Określ obiekt wywoływany dla elementu createElement przy określaniu jako celu emisji JSX „react”", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Przestarzałe] Użyj w zastępstwie opcji „--outFile”. Połącz dane wyjściowe i wyemituj jako jeden plik", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Przestarzałe] Użyj w zastępstwie opcji „--skipLibCheck”. Pomiń sprawdzanie typów domyślnych plików deklaracji biblioteki.", + "Deprecated_setting_Use_outFile_instead_6677": "Przestarzałe ustawienie. Zamiast tego użyj elementu „outFile”.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Czy zapomniano użyć operatora „await”?", + "Did_you_mean_0_1369": "Czy chodziło Ci o „{0}”?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Czy chodziło Ci o ograniczenie elementu „{0}” do typu „new (...args: any[]) => {1}”?", + "Did_you_mean_to_call_this_expression_6212": "Czy chodziło Ci o wywołanie tego wyrażenia?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Czy chodziło Ci o oznaczenie tej funkcji jako „async”?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Czy chodziło o użycie znaku „:”? Znak „=” może występować po nazwie właściwości tylko wtedy, gdy zawierający literał obiektu jest częścią wzorca usuwającego strukturę.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Czy chodziło Ci o użycie operatora „new” z tym wyrażeniem?", + "Digit_expected_1124": "Oczekiwano cyfry.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Katalog „{0}” nie istnieje. Operacje wyszukiwania w nim zostaną pominięte.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Katalog „{0}” nie zawiera zakresu package.json. Importy nie zostaną rozpoznane.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Wyłącz dodawanie dyrektyw „use strict” w emitowanych plikach JavaScript.", + "Disable_checking_for_this_file_90018": "Wyłącz sprawdzanie dla tego pliku", + "Disable_emitting_comments_6688": "Wyłącz emitowanie komentarzy.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Wyłącz emitowanie deklaracji mających element „@internal” w komentarzach JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Wyłącz emitowanie plików z kompilacji.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Wyłącz emitowanie plików, jeśli zostaną zgłoszone jakiekolwiek błędy sprawdzania typów.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Wyłącz wymazywanie deklaracji „const enum” w wygenerowanym kodzie.", + "Disable_error_reporting_for_unreachable_code_6603": "Wyłącz raportowanie błędów dla nieosiągalnego kodu.", + "Disable_error_reporting_for_unused_labels_6604": "Wyłącz raportowanie błędów dla nieużywanych etykiet.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Wyłącz sprawdzanie pełnego typu (będą zgłaszane tylko krytyczne analizy i błędy emisji).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Wyłącz generowanie niestandardowych funkcji pomocniczych, takich jak „__extends” w skompilowanych danych wyjściowych.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Wyłącz dołączanie plików bibliotek, w tym domyślnego pliku lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Wyłącz ładowanie przywoływanych projektów.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Wyłącz preferowanie plików źródłowych zamiast plików deklaracji podczas odwoływania się do projektów złożonych.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Wyłącz raportowanie błędów dotyczących nadmiarowych właściwości podczas tworzenia literałów obiektów.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Wyłącz rozpoznawanie linków symbolicznych jako ścieżek rzeczywistych. Odpowiada to takiej samej fladze na platformie Node.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Wyłącz ograniczenia rozmiarów dla projektów JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Wyłącz wyszukiwanie rozwiązania dla tego projektu.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Wyłącz dokładne sprawdzanie sygnatur ogólnych w typach funkcji.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Wyłącz pozyskiwanie typów dla projektów JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Wyłącz obcinanie typów w komunikatach o błędach.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Wyłącz używanie plików źródłowych zamiast plików deklaracji z przywoływanych projektów.", + "Disable_wiping_the_console_in_watch_mode_6684": "Wyłącz czyszczenie konsoli w trybie obserwacji.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Wyłącz wnioskowanie dla pozyskiwania typów przez sprawdzanie nazw plików w projekcie.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Nie zezwalaj elementom „import”, „require” i „” na zwiększanie liczby plików, które powinny zostać dodane do projektu przez język TypeScript.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Nie zezwalaj na przywoływanie tego samego pliku za pomocą nazw różniących się wielkością liter.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nie dodawaj odwołań z trzema ukośnikami ani zaimportowanych modułów do listy skompilowanych plików.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Nie zezwalaj na konstrukcje środowiska uruchomieniowego, które nie są częścią języka ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Nie emituj komentarzy do danych wyjściowych.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Nie emituj deklaracji dla kodu z adnotacją „@internal”.", + "Do_not_emit_outputs_6010": "Nie emituj danych wyjściowych.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Nie emituj danych wyjściowych w przypadku zgłoszenia błędów.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Nie emituj dyrektyw „use strict” w danych wyjściowych modułu.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Nie wymazuj deklaracji wyliczeń ze specyfikacją const w wygenerowanym kodzie.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Nie generuj w skompilowanych danych wyjściowych niestandardowych funkcji pomocy, takich jak „__extends”.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Nie uwzględniaj domyślnego pliku biblioteki (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Nie zgłaszaj błędów dla nieosiągalnego kodu.", + "Do_not_report_errors_on_unused_labels_6074": "Nie zgłaszaj błędów dla nieużywanych etykiet.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Nie rozpoznawaj rzeczywistej ścieżki linków symbolicznych.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Nie przekształcaj ani nie usuwaj żadnych importów ani eksportów, które nie są oznaczone jako tylko typy, dzięki czemu są zapisywane w formacie pliku wyjściowego na podstawie ustawienia „module”.", + "Do_not_truncate_error_messages_6165": "Nie obcinaj komunikatów o błędach.", + "Duplicate_function_implementation_2393": "Zduplikowana implementacja funkcji.", + "Duplicate_identifier_0_2300": "Zduplikowany identyfikator „{0}”.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu zawierającego funkcje asynchroniczne.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Zduplikowany identyfikator \"{0}\". Kompilator rezerwuje nazwę \"{1}\" podczas emisji odwołań \"super\" w inicjatorach statycznych.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Zduplikowany identyfikator „{0}”. Kompilator używa deklaracji „{1}” do obsługi funkcji asynchronicznych.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Zduplikowany identyfikator „{0}”. Elementy statyczne i elementy wystąpienia nie mogą mieć tej samej nazwy prywatnej.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Zduplikowany identyfikator „arguments”. Kompilator używa ciągu „arguments” do zainicjowania parametrów rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Powielony identyfikator „_newTarget”. Kompilator używa deklaracji zmiennej „_newTarget” do przechwytywania odwołania do metawłaściwości „new.target”.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Zduplikowany identyfikator „_this”. Kompilator używa deklaracji zmiennej „_this” do przechwycenia odwołania do elementu „this”.", + "Duplicate_index_signature_for_type_0_2374": "Zduplikowana sygnatura indeksu dla typu „{0}”.", + "Duplicate_label_0_1114": "Zduplikowana etykieta „{0}”.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Zduplikowana właściwość „{0}”.", + "Duplicate_regular_expression_flag_1500": "Zduplikowana flaga wyrażenia regularnego.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specyfikator dynamicznego importowania musi być typu „string”, ale określono typ „{0}”.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamiczne importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „es2020”, „es2022”, „esnext”, „commonjs”, „amd”, „system”, „umd”, „node16”, „node18”, „node20” lub „nodenext”.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Importy dynamiczne mogą akceptować tylko specyfikator modułu i opcjonalny zestaw atrybutów jako argumenty", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Importy dynamiczne obsługują drugi argument tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importów i eksportów ECMAScript nie można zapisać w pliku CommonJS w obszarze „verbatimModuleSyntax”.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importów i eksportów ECMAScript nie można zapisać w pliku CommonJS w obszarze „verbatimModuleSyntax”. Dostosuj pole „type” w najbliższej lokalizacji „package.json”, aby ustawić ten plik jako moduł ECMAScript, lub dostosuj ustawienia „verbatimModuleSyntax”, „module” i „moduleResolution” w języku TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Składnia modułu ECMAScript jest niedozwolona w module CommonJS, gdy element „module” jest ustawiony na wartość „preserve”.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Każda deklaracja znaku „{0}.{1}” różni się wartością, gdzie oczekiwano elementu „{2}”, ale podano „{3}”.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Każdy element członkowski typu unii „{0}” ma sygnatury konstrukcji, ale żadne z tych sygnatur nie są ze sobą zgodne.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Każdy element członkowski typu unii „{0}” ma sygnatury, ale żadne z tych sygnatur nie są ze sobą zgodne.", + "Editor_Support_6249": "Pomoc techniczna edytora", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element ma niejawnie typ „any”, ponieważ wyrażenie typu „{0}” nie może być używane do indeksowania typu „{1}”.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element niejawnie przyjmuje typ „any”, ponieważ wyrażenie indeksu ma typ inny niż „number”.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu. Czy chodziło o wywołanie „{1}”?", + "Emit_6246": "Emituj", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emituj pola klasy zgodne ze standardem ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emituj znacznik kolejności bajtów UTF-8 na początku plików wyjściowych.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emituj pojedynczy plik z mapami źródeł zamiast oddzielnego pliku.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emituj profil procesora CPU v8 dla uruchomienia kompilatora na potrzeby debugowania.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emituj dodatkowy kod JavaScript, aby ułatwić obsługę importowania modułów CommonJS. Włącza to opcję „allowSyntheticDefaultImports” na potrzeby zgodności typów.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Emituj pola klasy przy użyciu metody Define zamiast Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emituj metadane typu „design” dla dekorowanych deklaracji w plikach źródłowych.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emituj bardziej zgodny, ale dosłowny i mniej wydajny JavaScript dla iteracji.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emituj źródło razem z mapami źródeł w pojedynczym pliku; wymaga ustawienia opcji „--inlineSourceMap” lub „--sourceMap”.", + "Enable_all_strict_type_checking_options_6180": "Włącz wszystkie opcje ścisłego sprawdzania typów.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Włącz kolor i formatowanie w danych wyjściowych języka TypeScript, aby ułatwić odczytywanie błędów kompilatora.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Włącz ograniczenia zezwalające na używanie projektu języka TypeScript z odwołaniami do projektów.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Włącz raportowanie błędów dla ścieżek kodu, które nie zwracają jawnie funkcji.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Włącz raportowanie błędów dla wyrażeń i deklaracji z dorozumianym typem „any”.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Włącz raportowanie błędów dla przypadków rezerwowych w instrukcjach switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Włącz raportowanie błędów w plikach JavaScript z zaznaczonym typem.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Włącz raportowanie błędów, gdy zmienne lokalne nie są odczytywane.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Włącz raportowanie błędów, gdy element „this” ma typ „any”.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Włącz eksperymentalną obsługę starszych dekoratorów eksperymentalnych.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Włącz importowanie plików z dowolnym rozszerzeniem, pod warunkiem, że istnieje plik deklaracji.", + "Enable_importing_json_files_6689": "Włącz importowanie plików json.", + "Enable_lib_replacement_6808": "Włącz zastępowanie biblioteki.", + "Enable_project_compilation_6302": "Włącz kompilację projektu", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Włącz ścisłe metody „bind”, „call” i „apply” dla funkcji.", + "Enable_strict_checking_of_function_types_6186": "Włącz dokładne sprawdzanie typów funkcji.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Włącz dokładne sprawdzanie inicjowania właściwości w klasach.", + "Enable_strict_null_checks_6113": "Włącz dokładne sprawdzanie wartości null.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Włącz opcję „experimentalDecorators” w pliku konfiguracji", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Włącz flagę „--jsx” w pliku konfiguracji", + "Enable_tracing_of_the_name_resolution_process_6085": "Włącz śledzenie procesu rozpoznawania nazw.", + "Enable_verbose_logging_6713": "Włącz pełne rejestrowanie.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Umożliwia współdziałanie emitowania między modułami CommonJS i ES przez tworzenie obiektów przestrzeni nazw dla wszystkich importów. Implikuje użycie ustawienia „allowSyntheticDefaultImports”.", + "Enables_experimental_support_for_ES7_decorators_6065": "Umożliwia obsługę eksperymentalną elementów Decorator języka ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Umożliwia obsługę eksperymentalną emitowania metadanych typów elementów Decorator.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Wymuszaj używanie indeksowanych metod dostępu dla kluczy deklarowanych przy użyciu typu indeksowanego.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Upewnij się, że przesłaniające elementy członkowskie w klasach pochodnych są oznaczone modyfikatorem „override”.", + "Ensure_that_casing_is_correct_in_imports_6637": "Upewnij się, że wielkość liter jest poprawna w importach.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Upewnij się, że każdy plik może być bezpiecznie transponowany bez polegania na innych importach.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Upewnij się, że element „use strict” jest zawsze emitowany.", + "Entering_conditional_exports_6413": "Wprowadzanie eksportów warunkowych.", + "Entry_point_for_implicit_type_library_0_1420": "Punkt wejścia dla biblioteki niejawnych typów „{0}”", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punkt wejścia dla biblioteki niejawnych typów „{0}” o identyfikatorze packageId „{1}”", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions o identyfikatorze packageId „{1}”", + "Enum_0_used_before_its_declaration_2450": "Wyliczenie „{0}” zostało użyte przed zadeklarowaniem.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklaracje wyliczeń można scalać tylko z przestrzeniami nazw lub innymi deklaracjami wyliczeń.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Wszystkie deklaracje wyliczeń muszą być elementami const lub żadna nie może być elementem const.", + "Enum_member_expected_1132": "Oczekiwano składowych wyliczenia.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Składowa wyliczenia następująca po składowej liczbowej niebędącej literałem musi mieć inicjator, gdy jest włączona opcja „isolatedModules”.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicjatory składowych wyliczenia muszą być możliwe do obliczenia bez odwołań do symboli zewnętrznych z wyrażeniem --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "Składowa wyliczenia musi mieć inicjator.", + "Enum_name_cannot_be_0_2431": "Wyliczenie nie może mieć nazwy „{0}”.", + "Environment_Settings_6285": "Ustawienia środowiska", + "Errors_Files_6041": "Pliki z błędami", + "Escape_sequence_0_is_not_allowed_1488": "Sekwencja ucieczki „{0}” jest niedozwolona.", + "Examples_Colon_0_6026": "Przykłady: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Nadmierna złożoność podczas porównywania typów „{0}” i „{1}”.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadmierna głębokość stosu podczas porównywania typów „{0}” i „{1}”.", + "Exiting_conditional_exports_6416": "Wyjście z eksportu warunkowego.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Oczekiwano argumentów typu {0}-{1}; podaj je z tagiem „@extends”.", + "Expected_0_arguments_but_got_1_2554": "Oczekiwane argumenty: {0}, uzyskano: {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Oczekiwano {0} argumentów, ale otrzymano {1}. Czy zapomniano dołączyć wartość „void” w argumencie typu obiektu „Promise”?", + "Expected_0_type_arguments_but_got_1_2558": "Oczekiwane argumenty typu: {0}, uzyskano: {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Oczekiwano argumentów typu {0}; podaj je z tagiem „@extends”.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Oczekiwano 1 argumentu, ale otrzymano 0. Element „new Promise()” wymaga wskazówki JSDoc, aby utworzyć element „resolve”, który można wywołać bez argumentów.", + "Expected_a_Unicode_property_name_1523": "Oczekiwano nazwy właściwości standardu Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Oczekiwano nazwy lub wartości właściwości standardu Unicode.", + "Expected_a_Unicode_property_value_1525": "Oczekiwano wartości właściwości standardu Unicode.", + "Expected_a_capturing_group_name_1514": "Oczekiwano nazwy grupy przechwytywania.", + "Expected_a_class_set_operand_1520": "Oczekiwano operandu zestawu klas.", + "Expected_at_least_0_arguments_but_got_1_2555": "Oczekiwane argumenty: co najmniej {0}, uzyskano: {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Oczekiwano odpowiadającego tagu zamykającego kodu JSX dla elementu „{0}”.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Oczekiwano odpowiedniego tagu zamykającego dla fragmentu kodu JSX.", + "Expected_for_property_initializer_1442": "Oczekiwano znaku „=” dla inicjatora właściwości.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Oczekiwany typ pola „{0}” w pliku „package.json” to „{1}”, a uzyskano typ „{2}”.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Jawnie określony rodzaj rozpoznawania modułów: „{0}”.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Nie można wykonać potęgowania wartości typu „bigint”, chyba że opcja „target” ma wartość „es2016” lub nowszą.", + "Export_0_from_module_1_90059": "Eksportuj „{0}” z modułu „{1}”", + "Export_all_referenced_locals_90060": "Eksportuj wszystkie przywoływane zmienne lokalne", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Nie można użyć przypisania eksportu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „export default” lub innego formatu modułu.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Przypisanie eksportu nie jest obsługiwane, gdy flaga „--module” ma postać „system”.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Deklaracja eksportu powoduje konflikt z wyeksportowaną deklaracją „{0}”.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Deklaracje eksportu są niedozwolone w przestrzeni nazw.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Specyfikator eksportu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias „{0}” wyeksportowanego typu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Wyeksportowany alias typu „{0}” ma nazwę prywatną „{1}” z modułu „{2}” lub używa tej nazwy.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Wyeksportowana zmienna „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Eksporty i przypisania eksportów nie są dozwolone w rozszerzeniach modułów.", + "Expression_expected_1109": "Oczekiwano wyrażenia.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Wyrażenie musi być ujęte w nawiasy, aby było używane jako dekorator.", + "Expression_or_comma_expected_1137": "Oczekiwano wyrażenia lub przecinka.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Wyrażenie tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Wyrażenie tworzy typ unii, który jest zbyt złożony, aby go reprezentować.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Wynikiem rozpoznania wyrażenia jest element „_super” używany przez kompilator do przechwycenia odwołania do klasy bazowej.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_newTarget” używana przez kompilator do przechwytywania odwołania do metawłaściwości „new.target”.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_this” używana przez kompilator do przechwycenia odwołania do elementu „this”.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Nie można wywnioskować typu wyrażenia za pomocą wyrażenia --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzula Extends nie może zawierać wyrażenia z parametrem --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzula Extends dla wnioskowanego typu „{0}” ma nazwę prywatną „{1}” lub używa jej.", + "Extract_base_class_to_variable_90064": "Wyodrębnij klasę bazową do zmiennej", + "Extract_binding_expressions_to_variable_90066": "Wyodrębnianie wyrażeń powiązania do zmiennej", + "Extract_constant_95006": "Wyodrębnij stałą", + "Extract_default_export_to_variable_90065": "Wyodrębnij domyślny eksport do zmiennej", + "Extract_function_95005": "Wyodrębnij funkcję", + "Extract_to_0_in_1_95004": "Wyodrębnij do {0} w {1}", + "Extract_to_0_in_1_scope_95008": "Wyodrębnij do {0} w zakresie {1}", + "Extract_to_0_in_enclosing_scope_95007": "Wyodrębnij do {0} w zakresie otaczającym", + "Extract_to_interface_95090": "Wyodrębnianie do interfejsu", + "Extract_to_type_alias_95078": "Wyodrębnianie do aliasu typu", + "Extract_to_typedef_95079": "Wyodrębnianie do elementu typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Wyodrębnij do zmiennej i zamień na „{0} as typeof {0}”", + "Extract_type_95077": "Typ wyodrębniania", + "FILE_6035": "PLIK", + "FILE_OR_DIRECTORY_6040": "PLIK LUB KATALOG", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Nie można odnaleźć elementu peerDependency „{0}”.", + "Failed_to_resolve_under_condition_0_6415": "Nie można rozpoznać pod warunkiem „{0}”.", + "Fallthrough_case_in_switch_7029": "Przepuszczająca klauzula case w instrukcji switch.", + "File_0_does_not_exist_6096": "Plik „{0}” nie istnieje.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” nie istnieje.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” istnieje.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Plik „{0}” ma nieobsługiwane rozszerzenie. Obsługiwane są tylko rozszerzenia {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Plik „{0}” jest plikiem JavaScript. Czy chodziło Ci o włączenie opcji „allowJs”?", + "File_0_is_not_a_module_2306": "Plik „{0}” nie jest modułem.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Plik „{0}” nie znajduje się na liście plików projektu „{1}”. Projekty muszą zawierać listę wszystkich plików lub używać wzorca „include”.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Plik „{0}” nie znajduje się w katalogu „rootDir” „{1}”. Katalog „rootDir” powinien zawierać wszystkie pliki źródłowe.", + "File_0_not_found_6053": "Nie można odnaleźć pliku '{0}'.", + "File_Layout_6284": "Układ pliku", + "File_Management_6245": "Zarządzanie plikami", + "File_appears_to_be_binary_1490": "Plik jest prawdopodobnie binarny.", + "File_change_detected_Starting_incremental_compilation_6032": "Wykryto zmianę pliku. Trwa rozpoczynanie kompilacji przyrostowej...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Plik jest modułem CommonJS, ponieważ element „{0}” nie ma pola „type”", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Plik jest modułem CommonJS, ponieważ element „{0}” ma pole „type”, którego wartość nie jest „module”", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Plik jest modułem CommonJS, ponieważ nie znaleziono pliku „package.json”", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Plik jest modułem ECMAScript, ponieważ element „{0}” ma pole „type” z wartością „module”", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Plik jest modułem CommonJS; może zostać przekonwertowany na moduł ES.", + "File_is_default_library_for_target_specified_here_1426": "Plik to domyślna biblioteka dla elementu docelowego określonego w tym miejscu.", + "File_is_entry_point_of_type_library_specified_here_1419": "Plik to punkt wejścia biblioteki typów określonej w tym miejscu.", + "File_is_included_via_import_here_1399": "Plik jest dołączony w tym miejscu za pomocą importu.", + "File_is_included_via_library_reference_here_1406": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki.", + "File_is_included_via_reference_here_1401": "Plik jest dołączony w tym miejscu za pomocą odwołania.", + "File_is_included_via_type_library_reference_here_1404": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki typów.", + "File_is_library_specified_here_1423": "Plik to biblioteka określona w tym miejscu.", + "File_is_matched_by_files_list_specified_here_1410": "Plik jest zgodny z listą „files” określoną w tym miejscu.", + "File_is_matched_by_include_pattern_specified_here_1408": "Plik jest zgodny z wzorcem dołączania określonym w tym miejscu.", + "File_is_output_from_referenced_project_specified_here_1413": "Plik to dane wyjściowe z przywoływanego projektu określonego w tym miejscu.", + "File_is_output_of_project_reference_source_0_1428": "Plik to dane wyjściowe ze źródła odwołania do projektu „{0}”", + "File_is_source_from_referenced_project_specified_here_1416": "Plik to źródło z przywoływanego projektu określonego w tym miejscu.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Nazwa pliku „{0}” różni się od już dołączonej nazwy pliku „{1}” tylko wielkością liter.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zamiast tego wyszukaj „{2}”.", + "File_name_0_has_a_1_extension_stripping_it_6132": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zostanie ono usunięte.", + "File_redirects_to_file_0_1429": "Plik przekierowuje do pliku „{0}”", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specyfikacja pliku nie może zawierać katalogu nadrzędnego („..”) wyświetlanego po symbolu wieloznacznym katalogu rekursywnego („**”): „{0}”.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specyfikacja pliku nie może kończyć się cyklicznym symbolem wieloznacznym katalogu („**”): „{0}”.", + "Filters_results_from_the_include_option_6627": "Filtruj wyniki z opcji „include”.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Napraw wszystkie wykryte błędy pisowni", + "Fix_all_expressions_possibly_missing_await_95085": "Napraw wszystkie wyrażenia, w których prawdopodobnie brakuje operatora „await”", + "Fix_all_implicit_this_errors_95107": "Usuń wszystkie niejawne błędy „this”", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Napraw wszystkie niepoprawne zwracane typy funkcji asynchronicznych", + "Fix_all_with_type_only_imports_95182": "Napraw wszystko za pomocą importów tylko typów", + "For_nodejs_Colon_6287": "W przypadku środowiska nodejs:", + "Found_0_errors_6217": "Znaleziono błędy: {0}.", + "Found_0_errors_Watching_for_file_changes_6194": "Znalezione błędy: {0}. Obserwowanie zmian plików.", + "Found_0_errors_in_1_files_6261": "Znaleziono błędy {0} w plikach {1}.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Znaleziono błędy {0} w tym samym pliku, zaczynając od: {1}", + "Found_1_error_6216": "Znaleziono 1 błąd.", + "Found_1_error_Watching_for_file_changes_6193": "Znaleziono 1 błąd. Obserwowanie zmian plików.", + "Found_1_error_in_0_6259": "Znaleziono 1 błąd w {0}", + "Found_package_json_at_0_6099": "Znaleziono plik „package.json” w lokalizacji „{0}”.", + "Found_peerDependency_0_with_1_version_6282": "Znaleziono element peerDependency „{0}” z wersją „{1}”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Definicje klas automatycznie używają trybu z ograniczeniami.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Moduły automatycznie używają trybu z ograniczeniami.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dla wyrażenia funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Brak implementacji funkcji lub nie występuje ona bezpośrednio po deklaracji.", + "Function_implementation_name_must_be_0_2389": "Implementacja funkcji musi mieć nazwę „{0}”.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dla funkcji niejawnie określono zwracany typ „any”, ponieważ nie zawiera ona adnotacji zwracanego typu i jest przywoływana bezpośrednio lub pośrednio w jednym z jej zwracanych wyrażeń.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Funkcja nie zawiera końcowej instrukcji return, a zwracany typ nie obejmuje wartości „undefined”.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkcja musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", + "Function_not_implemented_95159": "Funkcja nie jest zaimplementowana.", + "Function_overload_must_be_static_2387": "Przeciążenie funkcji musi być statyczne.", + "Function_overload_must_not_be_static_2388": "Przeciążenie funkcji nie może być statyczne.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie unii.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dla typu funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkcja z treścią może tylko scalać z klasami, które są otaczające.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generuj pliki d.ts z plików TypeScript i JavaScript w projekcie.", + "Generate_get_and_set_accessors_95046": "Generuj metody dostępu „get” i „set”.", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generuj metody dostępu „get” i „set” dla wszystkich właściwości przesłaniających", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Generuje profil procesora CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Generuje mapę źródła dla poszczególnych plików „.d.ts”.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Generuje śledzenie zdarzeń i listę typów.", + "Generates_corresponding_d_ts_file_6002": "Generuje odpowiadający plik „d.ts”.", + "Generates_corresponding_map_file_6043": "Generuje odpowiadający plik „map”.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Generator niejawnie ma typ wstrzymania „{0}”. Rozważ podanie adnotacji zwracanego typu.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Generatory nie są dozwolone w otaczającym kontekście.", + "Generic_type_0_requires_1_type_argument_s_2314": "Typ ogólny „{0}” wymaga następującej liczby argumentów typu: {1}.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Typ ogólny „{0}” wymaga od {1} do {2} argumentów typu.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Globalne eksporty modułu mogą występować tylko na najwyższym poziomie.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globalne eksporty modułu mogą występować tylko w plikach deklaracji.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Globalne eksporty modułu mogą występować tylko w plikach modułów.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Typ globalny „{0}” musi być typem klasy lub interfejsu.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Typ globalny „{0}” musi mieć następującą liczbę parametrów typu: {1}.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "W przypadku ponownego kompilowania w parametrach „--incremental” i „--watch” przyjmuje się, że zmiany w pliku będą miały wpływ tylko na pliki bezpośrednio od niego zależne.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Określ, że zmiany w pliku będą wpływać tylko na pliki bezpośrednio od niego zależne podczas ponownego kompilowania w projektach używających trybów „przyrostowo” i „obserwacja”.", + "Hexadecimal_digit_expected_1125": "Oczekiwano cyfry szesnastkowej.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym na najwyższym poziomie modułu.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Definicje klas są określane automatycznie w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Oczekiwano identyfikatora. Element „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Moduły są określane automatycznie w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym, którego nie można użyć w tym miejscu.", + "Identifier_expected_1003": "Oczekiwano identyfikatora.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Oczekiwano identyfikatora. Ciąg „__esModule” jest zastrzeżony jako eksportowany znacznik podczas transformowania modułów ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Oczekiwano identyfikatora lub literału ciągu.", + "Identifier_string_literal_or_number_literal_expected_1496": "Oczekiwano identyfikatora, literału ciągu lub literału liczbowego.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet \"{0}\" faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Jeśli pakiet „{0}” rzeczywiście uwidacznia ten moduł, spróbuj dodać nowy plik deklaracji (.d.ts) zawierający „declare module”{1}';`", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Zignoruj znaleziony plik tsconfig i skompiluj za pomocą opcji wiersza polecenia i plików.", + "Ignore_this_error_message_90019": "Ignoruj ten komunikat o błędzie", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorując plik tsconfig.json, kompiluje określone pliki z domyślnymi opcjami kompilatora.", + "Implement_all_inherited_abstract_classes_95040": "Zaimplementuj wszystkie dziedziczone klasy abstrakcyjne", + "Implement_all_unimplemented_interfaces_95032": "Zaimplementuj wszystkie niezaimplementowane interfejsy", + "Implement_inherited_abstract_class_90007": "Wdróż odziedziczoną klasę abstrakcyjną", + "Implement_interface_0_90006": "Implementuj interfejs „{0}”", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzula implements wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Niejawna konwersja typu „symbol” na „string” zakończy się niepowodzeniem w czasie wykonywania. Rozważ opakowywanie tego wyrażenia w elemencie „String(...)”.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}\" powoduje konflikt z wartością globalną używaną w tym pliku, dlatego musi być zadeklarowany z importem tylko typu, gdy jest włączona opcja „isolatedModules”.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}” powoduje konflikt z wartością lokalną, dlatego musi być zadeklarowany za pomocą importu tylko typu, gdy jest włączona opcja „isolatedModules”.", + "Import_0_from_1_90013": "Importuj element „{0}” z lokalizacji „{1}”", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Wartości atrybutu importu muszą być wyrażeniami literału ciągu.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Asercje importu są niedozwolone w instrukcjach, które kompilują do wywołań „require” CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Asercje importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Asercji importu nie można używać z importami ani eksportami ograniczonymi do tylko danego typu.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Asercje importu zostały zastąpione atrybutami importu. Użyj instrukcji \"with\" zamiast \"assert\".", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Nie można użyć przypisania importu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „import * as ns from \"mod\"”, „import {a} from \"mod\"” lub „import d from \"mod\"” albo innego formatu modułu.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Wartości atrybutów importu muszą być wyrażeniami literału ciągu.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atrybuty importu są niedozwolone w instrukcjach kompilowanych do wywołań „require” CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Atrybuty importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atrybutów importu nie można używać z importami ani eksportami tylko typów.", + "Import_declaration_0_is_using_private_name_1_4000": "Deklaracja importu „{0}” używa nazwy prywatnej „{1}”.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklaracja importu powoduje konflikt z deklaracją lokalną „{0}”.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklaracje importu w przestrzeni nazw nie mogą odwoływać się do modułu.", + "Import_emit_helpers_from_tslib_6139": "Importuj pomocników emitowania z elementu „tslib”.", + "Import_may_be_converted_to_a_default_import_80003": "Import może zostać przekonwertowany na import domyślny.", + "Import_name_cannot_be_0_2438": "Import nie może mieć nazwy „{0}”.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklaracja importu lub eksportu w deklaracji otaczającego modułu nie może przywoływać modułu za pomocą jego nazwy względnej.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Specyfikator importu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", + "Imported_via_0_from_file_1_1393": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}”", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}”", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Importowanie pliku JSON do modułu ECMAScript wymaga atrybutu importu „type: „json””, gdy parametr „module” ma wartość „{0}”.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nie są dozwolone w rozszerzeniach modułów. Rozważ przeniesienie ich do obejmującego modułu zewnętrznego.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "W deklaracjach wyliczenia otoczenia inicjator składowej musi być wyrażeniem stałym.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "W przypadku wyliczenia z wieloma deklaracjami tylko jedna deklaracja może pominąć inicjator dla pierwszego elementu wyliczenia.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dołącz listę plików. Nie obsługuje to wzorców globalnych, w przeciwieństwie do elementu „include”.", + "Include_modules_imported_with_json_extension_6197": "Uwzględnij moduły zaimportowane z rozszerzeniem „json”", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Uwzględnij kod źródłowy w mapach źródła wewnątrz emitowanego kodu JavaScript.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Uwzględnij pliki mapy źródła w emitowanym kodzie JavaScript.", + "Includes_imports_of_types_referenced_by_0_90054": "Obejmuje importy typów przywoływanych przez element \"{0}\"", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Zawarcie elementu --watch spowoduje, że -w rozpocznie obserwowanie bieżącego projektu w kierunku zmian w plikach. Po skonfigurowaniu ustawienia możesz określić tryb obserwacji za pomocą:", + "Incomplete_quantifier_Digit_expected_1505": "Niekompletny kwantyfikator. Oczekiwano cyfry.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "Brak sygnatury indeksu dla typu „{0}” w typie „{1}”.", + "Index_signature_in_type_0_only_permits_reading_2542": "Sygnatura indeksu w typie „{0}” zezwala tylko na odczytywanie.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Wszystkie poszczególne deklaracje w scalonej deklaracji „{0}” muszą być wyeksportowane lub lokalne.", + "Infer_all_types_from_usage_95023": "Wywnioskuj wszystkie typy na podstawie użycia", + "Infer_function_return_type_95148": "Wnioskuj zwracany typ funkcji", + "Infer_parameter_types_from_usage_95012": "Wnioskuj typy parametrów na podstawie użycia", + "Infer_this_type_of_0_from_usage_95080": "Wnioskuj typ „this” elementu „{0}” na podstawie użycia", + "Infer_type_of_0_from_usage_95011": "Wnioskuj typ elementu „{0}” na podstawie użycia", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Wnioskowanie z wyrażeń klasy nie jest obsługiwane w przypadku wyrażenia --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Zainicjuj właściwość „{0}” w konstruktorze", + "Initialize_static_property_0_90021": "Zainicjuj właściwość statyczną „{0}”", + "Initializer_for_property_0_2811": "Inicjator właściwości \"{0}\"", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicjator zmiennej składowej wystąpienia „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego w konstruktorze.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicjatory są niedozwolone w otaczających kontekstach.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicjuje projekt TypeScript i tworzy plik tsconfig.json.", + "Inline_variable_95184": "Zmienna wbudowana", + "Insert_command_line_options_and_files_from_a_file_6030": "Wstaw opcje wiersza polecenia i pliki z pliku.", + "Install_0_95014": "Zainstaluj składnik „{0}”", + "Install_all_missing_types_packages_95033": "Zainstaluj wszystkie brakujące pakiety typów", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Interfejs „{0}” nie może jednocześnie rozszerzać typów „{1}” i „{2}”.", + "Interface_0_incorrectly_extends_interface_1_2430": "Interfejs „{0}” niepoprawnie rozszerza interfejs „{1}”.", + "Interface_declaration_cannot_have_implements_clause_1176": "Deklaracja interfejsu nie może mieć klauzuli „implements”.", + "Interface_must_be_given_a_name_1438": "Interfejs musi mieć nazwę.", + "Interface_name_cannot_be_0_2427": "Interfejs nie może mieć nazwy „{0}”.", + "Interop_Constraints_6252": "Ograniczenia międzyoperacyjności", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretuj opcjonalne typy właściwości jako zapisane, zamiast dodawać element \"undefined\".", + "Invalid_character_1127": "Nieprawidłowy znak.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Nieprawidłowy specyfikator importu „{0}” nie ma możliwych rozwiązań.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nieprawidłowa nazwa modułu w rozszerzeniu. Moduł „{0}” jest rozpoznawany jako moduł bez typu na poziomie „{1}”, którego nie można rozszerzyć.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nieprawidłowa nazwa modułu w rozszerzeniu. Nie można znaleźć modułu „{0}”.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Nieprawidłowy opcjonalny łańcuch z nowego wyrażenia. Czy chodziło Ci o wywołanie „{0}()”?", + "Invalid_reference_directive_syntax_1084": "Nieprawidłowa składnia dyrektywy „reference”.", + "Invalid_syntax_in_decorator_1498": "Nieprawidłowa składnia w dekoratorze.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Nieprawidłowe użycie elementu \"{0}\". Nie można go użyć wewnątrz bloku statycznego klasy.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Nieprawidłowe użycie elementu „{0}”. Moduły są określane automatycznie w trybie z ograniczeniami.", + "Invalid_use_of_0_in_strict_mode_1100": "Nieprawidłowe użycie elementu „{0}” w trybie z ograniczeniami.", + "Invalid_value_for_ignoreDeprecations_5103": "Nieprawidłowa wartość parametru „--ignoreDeprecations”.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Nieprawidłowa wartość elementu „jsxFactory”. „{0}” to nie jest prawidłowy identyfikator ani kwalifikowana nazwa.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Nieprawidłowa wartość elementu „jsxFragmentFactory”. „{0}” nie jest prawidłowym identyfikatorem ani kwalifikowaną nazwą.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Nieprawidłowa wartość opcji „--reactNamespace”. Element „{0}” nie jest prawidłowym identyfikatorem.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Prawdopodobnie brakuje przecinka, aby oddzielić te dwa wyrażenia szablonu. Tworzą one wyrażenie szablonu z tagami, którego nie można wywołać.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Jego typ elementu „{0}” nie jest prawidłowym elementem JSX.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Jego typ wystąpienia „{0}” nie jest prawidłowym elementem JSX.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Jego zwracany typ „{0}” nie jest prawidłowym elementem JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Jego typ „{0}” nie jest prawidłowym typem rozszerzenia JSX.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Element JSDoc „@{0} {1}” nie pasuje do klauzuli „extends {2}”.", + "JSDoc_0_is_not_attached_to_a_class_8022": "Element JSDoc „@{0}” nie został dołączony do klasy.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Element „...” JSDoc może występować tylko w ostatnim parametrze sygnatury.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Tag JSDoc „@param” tag ma nazwę „{0}”, ale nie ma parametru o tej nazwie.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Tag JSDoc „@param” ma nazwę „{0}”, ale nie istnieje parametr o tej nazwie. Byłby on zgodny z elementem „arguments”, gdyby miał typ tablicy.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Element JSDoc typedef można przekonwertować na typ TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Tag „@typedef” JSDoc powinien mieć adnotację typu lub powinien po nim następować tag „@property” lub „@member”.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Element JSDoc typedefs można przekonwertować na typy TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc mogą być używane wyłącznie w komentarzach dokumentacji.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc mogą być przenoszone do typów TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atrybuty JSX muszą mieć przypisane wyrażenie, które nie jest puste.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Element JSX „{0}” nie ma odpowiedniego tagu zamykającego.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Klasa elementów JSX nie obsługuje atrybutów, ponieważ nie ma właściwości „{0}”.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Dla elementu JSX niejawnie określono typ „any”, ponieważ interfejs „JSX.{0}” nie istnieje.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Dla elementu JSX niejawnie określono typ „any”, ponieważ typ globalny „JSX.Element” nie istnieje.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Typ elementu JSX „{0}” nie ma sygnatury konstrukcji ani wywołania.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementy JSX nie mogą mieć wielu atrybutów o tej samej nazwie.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Wyrażenia JSX nie mogą używać operatora przecinka. Czy chodziło Ci o zapisanie tablicy?", + "JSX_expressions_must_have_one_parent_element_2657": "Wyrażenia JSX muszą mieć jeden element nadrzędny.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment kodu JSX nie ma odpowiedniego tagu zamykającego.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Wyrażenia dostępu do właściwości JSX nie mogą zawierać nazw przestrzeni nazw JSX", + "JSX_spread_child_must_be_an_array_type_2609": "Element podrzędny rozkładu JSX musi być typem tablicy.", + "JavaScript_Support_6247": "Pomoc techniczna języka JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "Cel skoku nie może przekraczać granicy funkcji.", + "KIND_6034": "RODZAJ", + "Keywords_cannot_contain_escape_characters_1260": "Słowa kluczowe nie mogą zawierać znaków ucieczki.", + "LOCATION_6037": "LOKALIZACJA", + "Language_and_Environment_6254": "Język i środowisko", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Lewa strona operatora „przecinek” jest nieużywana i nie ma żadnych efektów ubocznych.", + "Library_0_specified_in_compilerOptions_1422": "Biblioteka „{0}” została określona w opcjach compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Biblioteka jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", + "Line_break_not_permitted_here_1142": "Podział wiersza nie jest tutaj dozwolony.", + "Line_terminator_not_permitted_before_arrow_1200": "Terminator wiersza nie jest dozwolony przed strzałką.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista sufiksów nazw plików do przeszukania podczas rozpoznawania modułu.", + "List_of_folders_to_include_type_definitions_from_6161": "Lista folderów, z których mają być uwzględnione definicje typów.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista folderów głównych, których połączona zawartość reprezentuje strukturę projektu w czasie wykonywania.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Ładowanie elementu „{0}” z katalogu głównego „{1}”, lokalizacja kandydata: „{2}”.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Rejestruj ścieżki używane podczas procesu „moduleResolution”.", + "Longest_matching_prefix_for_0_is_1_6108": "Najdłuższy zgodny prefiks dla „{0}” to „{1}”.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Wyszukiwanie w folderze „node_modules”, początkowa lokalizacja: „{0}”.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Wszystkie wywołania „super()” powinny być pierwszą instrukcją w konstruktorze", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Określ, że element keyof ma zwracać tylko ciągi zamiast ciągów, liczb i symboli. Starsza opcja.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Ustaw wywołanie „super()” jako pierwszą instrukcję w konstruktorze", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Zmapowany typ obiektu niejawnie ma typ szablonu „any”.", + "Mark_array_literal_as_const_90070": "Oznaczanie literału tablicy jako stałego", + "Matched_0_condition_1_6403": "Dopasowano „{0}” warunku „{1}”.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Dopasowywane domyślnie do wzorca dołączania „**/*”", + "Matched_by_include_pattern_0_in_1_1407": "Zgodne z wzorcem dołączania „{0}” w elemencie „{1}”", + "Member_0_implicitly_has_an_1_type_7008": "Dla składowej „{0}” niejawnie określono typ „{1}”.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Element członkowski „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Merge_conflict_marker_encountered_1185": "Napotkano znacznik konfliktu scalania.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Scalona deklaracja „{0}” nie może zawierać domyślnej deklaracji eksportu. Rozważ dodanie oddzielnej deklaracji „export default {0}” zamiast niej.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Metawłaściwość „{0}” jest dozwolona tylko w treści deklaracji funkcji, wyrażeniu funkcji lub konstruktorze.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda „{0}” nie może mieć implementacji, ponieważ jest oznaczona jako abstrakcyjna.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", + "Method_not_implemented_95158": "Metoda nie jest zaimplementowana.", + "Modifiers_cannot_appear_here_1184": "Modyfikatory nie mogą występować w tym miejscu.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Moduł „{0}” może być importowany domyślnie tylko przy użyciu flagi „{1}”", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Nie można zaimportować modułu „{0}” przy użyciu tej konstrukcji. Specyfikator jest rozpoznawany tylko jako moduł ES, którego nie można zaimportować za pomocą wywołania „require”. Zamiast tego użyj importu ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale jest on eksportowany jako „{2}”.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale nie jest on eksportowany.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Moduł „{0}” nie odwołuje się do typu, ale jest tutaj używany jako typ. Czy chodziło Ci o „typeof import(„{0}”)”?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Moduł „{0}” nie odwołuje się do wartości, ale jest tutaj używany jako wartość.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Moduł {0} już wyeksportował składową o nazwie „{1}”. Zastanów się nad jawnym ponownym eksportem, aby rozstrzygnąć niejednoznaczność.", + "Module_0_has_no_default_export_1192": "Moduł „{0}” nie ma eksportu domyślnego.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Moduł „{0}” nie ma eksportu domyślnego. Czy zamiast tego miał zostać użyty element „import { {1} } from {0}”?", + "Module_0_has_no_exported_member_1_2305": "Moduł „{0}” nie ma wyeksportowanej składowej „{1}”.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Moduł „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy zamiast tego miał zostać użyty element „import {1} from {0}”?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Moduł „{0}” został ukryty przez deklarację lokalną o takiej samej nazwie.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Moduł „{0}” używa elementu „export =” i nie może być używany z elementem „export *”.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany lokalnie w pliku „{1}”.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie ustawiono parametru „--allowArbitraryExtensions”.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie jest ustawiona opcja „--jsx”.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Moduł „{0}” został rozpoznany jako „{1}”, ale opcja „--resolveJsonModule” nie jest używana.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "W nazwach deklaracji modułu można używać tylko ciągi ujęte w cudzysłów \" lub „”.", + "Module_name_0_matched_pattern_1_6092": "Nazwa modułu: „{0}”, dopasowany wzorzec: „{1}”.", + "Module_name_0_was_not_resolved_6090": "======== Nazwa modułu „{0}” nie została rozpoznana. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}”. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Rodzaj rozpoznawania modułów nie został podany. Zostanie użyty rodzaj „{0}”.", + "Module_resolution_using_rootDirs_has_failed_6111": "Nie można rozpoznać modułów przy użyciu opcji „rootDirs”.", + "Modules_6244": "Moduły", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Przenieś modyfikatory elementów krotki z etykietami do etykiet", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Przenieś wyrażenie w eksporcie domyślnym do zmiennej i dodaj do niej adnotację typu.", + "Move_to_a_new_file_95049": "Przenieś do nowego pliku", + "Move_to_file_95178": "Przenieś do pliku", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Kolejne następujące po sobie separatory liczbowe nie są dozwolone.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Konstruktor nie może mieć wielu implementacji.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NOWY WIERSZ", + "Name_is_not_valid_95136": "Nazwa nie jest prawidłowa", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Nazwane grupy przechwytywania są dostępne tylko w przypadku wartości docelowej „ES2018” lub nowszej.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Nazwane grupy przechwytywania o tej samej nazwie muszą się wzajemnie wykluczać.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Nazwane importy są niedozwolone w odroczonym imporcie.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Nazwane importy z pliku JSON do modułu ECMAScript są niedozwolone, gdy parametr „module” ma wartość „{0}”.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Nazwane właściwości „{0}” typów „{1}” i „{2}” nie są identyczne.", + "Namespace_0_has_no_exported_member_1_2694": "Przestrzeń nazw „{0}” nie ma wyeksportowanej składowej „{1}”.", + "Namespace_must_be_given_a_name_1437": "Przestrzeń nazw musi mieć nazwę.", + "Namespace_name_cannot_be_0_2819": "Przestrzeń nazw nie może mieć nazwy „{0}”.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Przestrzenie nazw są niedozwolone w globalnych plikach skryptów, gdy włączona jest opcja „{0}”. Jeśli ten plik nie jest przeznaczony do bycia skryptem globalnym, ustaw parametr „moduleDetection” na wartość „force” lub dodaj pustą instrukcję „export {}”.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Do parametrów „this” nie można stosować dekoratorów ani modyfikatorów.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Żaden z konstruktorów podstawowych nie ma określonej liczby argumentów typu.", + "No_constituent_of_type_0_is_callable_2755": "Żadna składowa typu „{0}” nie jest wywoływalna.", + "No_constituent_of_type_0_is_constructable_2759": "Żadnej składowej typu „{0}” nie można skonstruować.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nie znaleziono żadnej sygnatury indeksu z parametrem typu „{0}” w typie „{1}”.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nie można znaleźć danych wejściowych w pliku konfiguracji „{0}”. Określone ścieżki „include” to „{1}”, a „exclude” to „{2}”.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Nie jest już obsługiwane. W starszych wersjach umożliwia ręczne konfigurowanie kodowania tekstu dla odczytywania plików.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Żadne przeciążenie nie oczekuje {0} argumentów, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Żadne przeciążenie nie oczekuje {0} argumentów typu, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów typu.", + "No_overload_matches_this_call_2769": "Żadne przeciążenie nie jest zgodne z tym wywołaniem.", + "No_type_could_be_extracted_from_this_type_node_95134": "Nie można było wyodrębnić żadnego typu z tego węzła typu", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Nie istnieje żadna wartość w zakresie dla właściwości skrótowej „{0}”. Zadeklaruj ją lub udostępnij inicjatora.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Klasa nieabstrakcyjna „{0}” nie implementuje odziedziczonej abstrakcyjnej składowej „{1}” z klasy „{2}”.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2} i {3} więcej.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Wyrażenie klasy nieabstrakcyjnej nie implementuje odziedziczonej abstrakcyjnej składowej „{0}” z klasy „{1}”.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Brak implementacji nieabstrakcyjnych wyrażeń klasy dla następujących składowych elementu „{0}”: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "W nieabstrakcyjnym wyrażeniu klasy brakuje implementacji dla następujących składowych elementu „{0}”: {1} i {2} więcej.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Asercji o wartości innej niż null można używać tylko w plikach TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "W tym miejscu zadeklarowano parametr inny niż prosty.", + "Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki w kodzie zwracają wartość.", + "Not_all_constituents_of_type_0_are_callable_2756": "Nie wszystkie składowe typu „{0}” są wywoływalne.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Nie wszystkie składowe typu „{0}” można skonstruować.", + "Numbers_out_of_order_in_quantifier_1506": "Liczby poza kolejnością w kwantyfikatorze.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Literały liczbowe z wartościami bezwzględnymi równymi 2^53 lub większymi są zbyt duże, aby mogły być dokładnie reprezentowane jako liczby całkowite.", + "Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.", + "Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.", + "Object_is_possibly_null_2531": "Obiekt ma prawdopodobnie wartość „null”.", + "Object_is_possibly_null_or_undefined_2533": "Obiekt ma prawdopodobnie wartość „null” lub „undefined”.", + "Object_is_possibly_undefined_2532": "Obiekt ma prawdopodobnie wartość „undefined”.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Dla literału obiektu można określić tylko znane właściwości, a właściwość „{0}” nie istnieje w typie „{1}”.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literał obiektu może określać wyłącznie znane właściwości, ale element „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Dla właściwości „{0}” literału obiektu niejawnie określono typ „{1}”.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Obiektów zawierających właściwości skrótowe nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Obiektów zawierających przypisania rozproszone nie można wywnioskować za pomocą parametru --isolatedDeclarations.", + "Octal_digit_expected_1178": "Oczekiwano cyfry ósemkowej.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Ósemkowe sekwencje ucieczki i odwołania wsteczne nie są dozwolone w klasie znaków. Jeśli było to zamierzone jako sekwencja ucieczki, użyj składni „{0}”.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Ósemkowe sekwencje ucieczki są niedozwolone. Użyj składni „{0}”.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literały ósemkowe są niedozwolone. Użyj składni „{0}”.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedną z wartości „{0}.{1}” jest ciąg „{2}”, a druga przyjmuje się, że jest nieznaną wartością liczbową.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "W instrukcji „for...in” jest dozwolona tylko pojedyncza deklaracja zmiennej.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "W instrukcji „for...of” jest dozwolona tylko pojedyncza deklaracja zmiennej.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Tylko funkcja typu void może być wywoływana za pomocą słowa kluczowego „new”.", + "Only_ambient_modules_can_use_quoted_names_1035": "Tylko otaczające moduły mogą używać nazw w cudzysłowie.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Tylko moduły „amd” i „system” są obsługiwane razem z parametrem --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Tylko tablice const można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Emituj tylko pliki deklaracji „d.ts”.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Generuj tylko pliki d.ts, a nie pliki JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Tylko publiczne i chronione metody klasy bazowej są dostępne przy użyciu słowa kluczowego „super”.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Nie można zastosować operatora „{0}” do typu „{1}”.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Nie można zastosować operatora „{0}” do typów „{1}” i „{2}”.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatory nie mogą być mieszane w klasie znaków. Zamiast tego zawijaj go w zagnieżdżonej klasie.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Rezygnacja ze sprawdzania odwołań do wielu projektów podczas edytowania projektu.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Opcja „{0}={1}” została usunięta. Usuń go z konfiguracji.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Opcja „{0}={1}” jest przestarzała i przestanie działać w języku TypeScript {2}. Określ parametr compilerOption „ignoreDeprecations”: „{3}”, aby wyciszyć ten błąd.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „false” lub „null” w wierszu polecenia.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „null” w wierszu polecenia.", + "Option_0_can_only_be_specified_on_command_line_6266": "Opcję „{0}” można określić tylko w wierszu polecenia.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Opcja „{0}” może być używana tylko w przypadku podania opcji „--inlineSourceMap” lub „--sourceMap”.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Opcji „{0}” można używać tylko wtedy, gdy parametr „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Opcji „{0}” można używać tylko wtedy, gdy element „module” ma wartość „preserve”, „commonjs” lub „es2015” lub nowszą.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Nie można określić opcji „{0}”, jeśli opcja „jsx” ma wartość „{1}”.", + "Option_0_cannot_be_specified_with_option_1_5053": "Opcji „{0}” nie można określić razem z opcją „{1}”.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Opcji „{0}” nie można określić bez opcji „{1}”.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Opcji „{0}” nie można określić bez opcji „{1}” lub opcji „{2}”.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Opcja „{0}” została usunięta. Usuń go z konfiguracji.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Opcja „{0}” jest przestarzała i przestanie działać w języku TypeScript {1}. Określ parametr compilerOption „ignoreDeprecations”: „{2}”, aby wyciszyć ten błąd.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Opcja „{0}\" jest nadmiarowa i nie można jej określić za pomocą opcji „{1}”.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Opcja „allowImportingTsExtensions” może być używana tylko wtedy, gdy jest ustawiona wartość „noEmit”, „emitDeclarationOnly” lub „rewriteRelativeImportExtensions”.", + "Option_build_must_be_the_first_command_line_argument_6369": "Opcja „--build” musi być pierwszym argumentem wiersza polecenia.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Opcji „isolatedModules” można użyć tylko wtedy, gdy podano opcję „--module” lub opcja „target” określa cel „ES2015” lub wyższy.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Opcja „moduleResolution” musi być ustawiona na wartość „{0}” (lub pozostać nieokreślona), gdy opcja „module” jest ustawiona na „{1}”.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Opcja „module” musi mieć wartość „{0}”, gdy opcja „moduleResolution” ma wartość „{1}”.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Opcja „preserveConstEnums” nie może być wyłączona, gdy opcja „{0}” jest włączona.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Nie można mieszać opcji „project” z plikami źródłowymi w wierszu polecenia.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „moduleResolution” ma wartość „classic”.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „module” ma wartość „none”, „system” lub „umd”.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Nie można użyć opcji „verbatimModuleSyntax”, gdy parametr „module” ma wartość „UMD”, „AMD” lub „System”.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Nie można połączyć opcji „{0}” i „{1}”.", + "Options_Colon_6027": "Opcje:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Inne dane wyjściowe", + "Output_Formatting_6256": "Formatowanie danych wyjściowych", + "Output_compiler_performance_information_after_building_6615": "Informacje o wydajności kompilatora danych wyjściowych po skompilowaniu.", + "Output_directory_for_generated_declaration_files_6166": "Katalog wyjściowy dla wygenerowanych plików deklaracji.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Plik wyjściowy „{0}” nie został utworzony na podstawie pliku źródłowego „{1}”.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono element „{1}”", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono wartość „none” dla opcji „--module”", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Podaj bardziej szczegółowe informacje o wydajności kompilatora po zakończeniu kompilacji.", + "Overload_0_of_1_2_gave_the_following_error_2772": "Przeciążenie {0} z {1}, „{2}”, zwróciło następujący błąd.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Wszystkie sygnatury przeciążeń muszą być abstrakcyjne lub nieabstrakcyjne.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Wszystkie sygnatury przeciążeń muszą być otaczającymi sygnaturami lub żadna nie może być otaczającą sygnaturą.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Wszystkie sygnatury przeciążeń muszą być wyeksportowane lub żadna nie może być wyeksportowana.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Wszystkie sygnatury przeciążeń muszą być opcjonalne lub wymagane.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Wszystkie sygnatury przeciążeń muszą być publiczne, prywatne lub chronione.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Parametr „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego po nim.", + "Parameter_0_cannot_reference_itself_2372": "Parametr „{0}” nie może odwoływać się do siebie samego.", + "Parameter_0_implicitly_has_an_1_type_7006": "Dla parametru „{0}” niejawnie określono typ „{1}”.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Parametr „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Parametr „{0}” nie znajduje się w tym samym położeniu co parametr „{1}”.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu zewnętrznego „{2}” lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Parametr „{0}” metody dostępu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Parametr „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametr nie może mieć znaku zapytania i inicjatora.", + "Parameter_declaration_expected_1138": "Oczekiwano deklaracji parametru.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr ma nazwę, ale nie ma typu. Czy chodziło Ci o „{0}: {1}”?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modyfikatorów parametrów można używać tylko w plikach TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musi mieć jawną adnotację typu z wyrażeniem --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analizuj w trybie z ograniczeniami i emituj ciąg „use strict” dla każdego pliku źródłowego.", + "Part_of_files_list_in_tsconfig_json_1409": "Część listy „files” w pliku tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Wzorzec „{0}” może zawierać maksymalnie jeden znak „*”.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Chronometraż wydajności dla opcji „--diagnostics” lub „--extendedDiagnostics” nie jest dostępny w tej sesji. Nie można było znaleźć natywnej implementacji interfejsu Web Performance API.", + "Platform_specific_6912": "Przeznaczone dla platformy", + "Prefix_0_with_an_underscore_90025": "Poprzedzaj elementy „{0}” znakiem podkreślenia", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Dodaj prefiks „declare” do wszystkich niepoprawnych deklaracji właściwości", + "Prefix_all_unused_declarations_with_where_possible_95025": "Jeśli to możliwe, poprzedź wszystkie nieużywane deklaracje znakiem „_”", + "Prefix_with_declare_95094": "Dodaj prefiks „declare”", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Zachowaj nieużywane zaimportowane wartości w wyjściu JavaScript, które w przeciwnym razie mogłyby zostać usunięte.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Wyświetlaj wszystkie pliki odczytywane podczas kompilacji.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Wyświetlaj pliki odczytywane podczas kompilacji, włącznie z przyczyną dołączenia.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Wyświetl nazwy plików i przyczyny, dla których są częścią kompilacji.", + "Print_names_of_files_part_of_the_compilation_6155": "Drukuj nazwy plików będących częścią kompilacji.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Drukuj nazwy plików będących częścią kompilacji, a następnie zatrzymaj przetwarzanie.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Drukuj nazwy wygenerowanych plików będących częścią kompilacji.", + "Print_the_compiler_s_version_6019": "Wypisz wersję kompilatora.", + "Print_the_final_configuration_instead_of_building_1350": "Wydrukuj końcową konfigurację zamiast kompilowania.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Wyświetlaj nazwy wyemitowanych plików po kompilacji.", + "Print_this_message_6017": "Wypisz ten komunikat.", + "Private_accessor_was_defined_without_a_getter_2806": "Prywatna metoda dostępu została zdefiniowana bez metody pobierającej.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Pole prywatne „{0}” musi być zadeklarowane w otaczającej klasie.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identyfikatory prywatne są niedozwolone w deklaracjach zmiennych.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identyfikatory prywatne są niedozwolone poza treściami klasy.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identyfikatory prywatne są dozwolone tylko w treściach klasy i mogą być używane tylko jako część deklaracji członka klasy, dostępu do właściwości lub po lewej stronie wyrażenia „in”", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identyfikatory prywatne są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Identyfikatory prywatne nie mogą być używane jako parametry.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Nie można uzyskać dostępu do prywatnego lub chronionego elementu składowego „{0}” w parametrze typu.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowania", + "Project_0_is_being_forcibly_rebuilt_6388": "Trwa wymuszone odbudowanie projektu „{0}”", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że plik „{2}” był plikiem głównym kompilacji, ale już nie jest.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że program musi zgłaszać błędy.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że niektóre zmiany nie zostały wyemitowane", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że nastąpiła zmiana w parametrze compilerOptions", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt „{0}” jest nieaktualny, ponieważ dane wyjściowe „{1}” są starsze niż dane wejściowe „{2}”", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt „{0}” jest nieaktualny, ponieważ plik wyjściowy „{1}” nie istnieje", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt „{0}” jest nieaktualny, ponieważ jego dane wyjściowe zostały wygenerowane w wersji „{1}”, która różni się od bieżącej wersji „{2}”", + "Project_0_is_up_to_date_6361": "Projekt „{0}” jest aktualny", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt „{0}” jest aktualny, ponieważ najnowsze dane wejściowe „{1}” są starsze niż dane wyjściowe „{2}”", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Projekt „{0}” jest aktualny, ale musi zaktualizować sygnatury czasowe plików wyjściowych, które są starsze niż pliki wejściowe", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt „{0}” jest aktualny z plikami .d.ts z jego zależności", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odwołania do projektu nie mogą tworzyć grafu kołowego. Wykryto cykl: {0}", + "Projects_6255": "Projekty", + "Projects_in_this_build_Colon_0_6355": "Projekty w tej kompilacji: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Właściwości z modyfikatorem „accessor” są dostępne tylko w przypadku określania wartości docelowej ECMAScript 2015 lub nowszej.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Właściwości \"{0}\" nie może mieć inicjatora, ponieważ jest oznaczona jako abstrakcyjna.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Właściwość „{0}” pochodzi z sygnatury indeksu, dlatego należy uzyskiwać do niej dostęp za pomocą elementu [„{0}”].", + "Property_0_does_not_exist_on_type_1_2339": "Właściwość „{0}” nie istnieje w typie „{1}”.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło o uzyskanie dostępu do statycznego elementu członkowskiego „{2}”?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na \"{2}\" lub nowszą.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić parametr \"dom\".", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Właściwość \"{0}\" nie ma inicjatora i nie jest zdecydowanie przypisana w bloku statycznym klasy.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Właściwość „{0}” nie ma inicjatora i nie jest na pewno przypisana w konstruktorze.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „get” nie ma adnotacji zwracanego typu.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „set” nie ma adnotacji typu parametru.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu get można wywnioskować na podstawie użycia.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu set można wywnioskować na podstawie użycia.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Właściwości „{0}” w typie „{1}” nie można przypisać do tej samej właściwości w typie podstawowym „{2}”.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Właściwości „{0}” w typie „{1}” nie można przypisać do typu „{2}”.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Właściwość „{0}” w typie „{1}” odwołuje się do innego elementu członkowskiego, do którego nie można uzyskać dostępu z typu „{2}”.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "Właściwość „{0}” jest zadeklarowana, ale jej wartość nie jest nigdy odczytywana.", + "Property_0_is_incompatible_with_index_signature_2530": "Właściwość „{0}” jest niezgodna z sygnaturą indeksu.", + "Property_0_is_missing_in_type_1_2324": "W typie „{1}” brakuje właściwości „{0}”.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Właściwości „{0}” brakuje w typie „{1}”, ale jest wymagana w typie „{2}”.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Właściwość „{0}” nie jest dostępna poza klasą „{1}”, ponieważ ma identyfikator prywatny.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Właściwość „{0}” jest opcjonalna w typie „{1}”, ale jest wymagana w typie „{2}”.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "Właściwość „{0}” jest prywatna i dostępna tylko w klasie „{1}”.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Właściwość „{0}” jest prywatna w typie „{1}”, ale nie w typie „{2}”.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Właściwość „{0}” jest chroniona i dostępna tylko za pośrednictwem wystąpienia klasy „{1}”. To jest wystąpienie klasy „{2}”.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Właściwość „{0}” jest chroniona i dostępna tylko w klasie „{1}” oraz w jej podklasach.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Właściwość „{0}” jest chroniona, ale typ „{1}” nie jest klasą pochodną elementu „{2}”.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Właściwość „{0}” jest chroniona w typie „{1}”, ale jest publiczna w typie „{2}”.", + "Property_0_is_used_before_being_assigned_2565": "Właściwość „{0}” jest używana przed przypisaniem.", + "Property_0_is_used_before_its_initialization_2729": "Właściwość „{0}” jest używana przez jej zainicjowaniem.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Właściwości „{0}” atrybutu rozkładu JSX nie można przypisać do właściwości docelowej.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego typu klasy anonimowej nie może być prywatna ani chroniona.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Właściwości „{0}” typu „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", + "Property_0_was_also_declared_here_2733": "Właściwość „{0}” została również zadeklarowana w tym miejscu.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Właściwość „{0}” zastąpi właściwość bazową w elemencie „{1}”. Jeśli jest to zamierzone, dodaj inicjator. W przeciwnym razie dodaj modyfikator „declare” lub usuń nadmiarową deklarację.", + "Property_assignment_expected_1136": "Oczekiwano przypisania właściwości.", + "Property_destructuring_pattern_expected_1180": "Oczekiwano wzorca usuwającego strukturę właściwości.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Właściwość musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Oczekiwano właściwości lub sygnatury.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Wartością właściwości może być jedynie literał ciągu, literał numeryczny, wartości „true”, „false” i „null”, literał obiektu i literał tablicy.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Udostępnij pełne wsparcie dla elementów iterowanych w elementach „for-of”, rozpiętości i usuwania, gdy elementem docelowym jest „ES5”.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Nazwa kwalifikowana „{0}” nie jest dozwolona bez wiodącego elementu „@param {object} {1}”.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Zgłoś błąd, gdy parametr funkcji nie zostanie odczytany.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Zgłaszaj błąd w przypadku wyrażeń i deklaracji z implikowanym typem „any”.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Zgłaszaj błąd w przypadku wyrażeń „this” z niejawnym typem „any”.", + "Range_out_of_order_in_character_class_1517": "Zakres poza kolejnością w klasie znaków.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy element „{0}” jest włączony, wymaga użycia elementu „export type”.", + "React_components_cannot_include_JSX_namespace_names_2639": "Składniki platformy React nie mogą zawierać nazw przestrzeni rozszerzenia JSX", + "Recommended_Options_6294": "Proponowane opcje", + "Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Zmniejsz liczbę projektów ładowanych automatycznie przez język TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "Przywoływany projekt „{0}” nie może wyłączać emisji.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.", + "Referenced_via_0_from_file_1_1400": "Przywoływane za pośrednictwem elementu „{0}” z pliku „{1}”", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Zastanów się nad dodaniem rozszerzenia do ścieżki importu.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Czy chodziło Ci o „{0}”?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Usuń listę katalogów z procesu obserwacji.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Usuń listę plików z przetwarzania w trybie obserwacji.", + "Remove_all_unnecessary_override_modifiers_95163": "Usuń wszystkie niepotrzebne modyfikatory „overrides”", + "Remove_all_unnecessary_uses_of_await_95087": "Usuń wszystkie niepotrzebne użycia operatora „await”", + "Remove_all_unreachable_code_95051": "Usuń cały nieosiągalny kod", + "Remove_all_unused_labels_95054": "Usuń wszystkie nieużywane etykiety", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Usuń nawiasy klamrowe ze wszystkich treści funkcji strzałkowej z odpowiednimi problemami", + "Remove_braces_from_arrow_function_95060": "Usuń nawiasy klamrowe z funkcji strzałki", + "Remove_braces_from_arrow_function_body_95112": "Usuń nawiasy klamrowe z treści funkcji strzałkowej", + "Remove_import_from_0_90005": "Usuń import z „{0}”", + "Remove_override_modifier_95161": "Usuń modyfikator „override”", + "Remove_parentheses_95126": "Usuń nawiasy", + "Remove_template_tag_90011": "Usuń znacznik szablonu", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Usuń ograniczenie 20 MB dotyczące łącznego rozmiaru kodu źródłowego dla plików JavaScript na serwerze języka TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Usuń element „type” z deklaracji importu z elementu „ {0}”", + "Remove_type_from_import_of_0_from_1_90056": "Usuń element „type” z importu elementu „{0}” z „{1}”", + "Remove_type_parameters_90012": "Usuń parametry typu", + "Remove_unnecessary_await_95086": "Usuń niepotrzebny operator „await”", + "Remove_unreachable_code_95050": "Usuń nieosiągalny kod", + "Remove_unused_declaration_for_Colon_0_90004": "Usuń nieużywaną deklarację dla: „{0}”", + "Remove_unused_declarations_for_Colon_0_90041": "Usuń nieużywane deklaracje dla: „{0}”", + "Remove_unused_destructuring_declaration_90039": "Usuń nieużywaną deklarację usuwania struktury", + "Remove_unused_label_95053": "Usuń nieużywaną etykietę", + "Remove_variable_statement_90010": "Usuń instrukcję zmiennej", + "Rename_param_tag_name_0_to_1_95173": "Zmień nazwę „{0}” tagu „@param” na „{1}”", + "Replace_0_with_Promise_1_90036": "Zamień element „{0}” na element „Promise<{1}>”", + "Replace_all_unused_infer_with_unknown_90031": "Zamień wszystkie nieużywane elementy „infer” na „unknown”", + "Replace_import_with_0_95015": "Zamień import na element „{0}”.", + "Replace_infer_0_with_unknown_90030": "Zamień element „infer {0}” na „unknown”", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Zgłoś błąd, gdy nie wszystkie ścieżki w kodzie zwracają wartość.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Zgłoś błędy dla przepuszczających klauzul case w instrukcji switch.", + "Report_errors_in_js_files_8019": "Zgłaszaj błędy w plikach js.", + "Report_errors_on_unused_locals_6134": "Raportuj błędy dla nieużywanych elementów lokalnych.", + "Report_errors_on_unused_parameters_6135": "Raportuj błędy dla nieużywanych parametrów.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Wymagaj wystarczającej adnotacji w eksportach, aby inne narzędzia mogły w prosty sposób generować pliki deklaracji.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Wymagane parametry typu mogą nie być zgodne z opcjonalnymi parametrami typu.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Znaleziono rozwiązanie dla modułu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Znaleziono rozwiązanie dla dyrektywy odwołania do typu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba wyłączenia nowoczesnych funkcji rozpoznawania węzłów w celu sprawdzenia, czy biblioteka npm wymaga aktualizacji konfiguracji.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba użycia wyrażenia „--moduleResolution”, aby sprawdzić, czy projekt może wymagać aktualizacji konfiguracji.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Rozwiązuj elementy „keyof” tylko do nazw właściwości mających jako wartość ciągi (nie liczby czy symbole).", + "Resolved_under_condition_0_6414": "Rozwiązano pod warunkiem „{0}”.", + "Resolving_in_0_mode_with_conditions_1_6402": "Rozpoznawanie w trybie {0} z warunkami {1}.", + "Resolving_module_0_from_1_6086": "======== Rozpoznawanie modułu „{0}” na podstawie „{1}”. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Rozpoznawanie nazwy modułu „{0}” względem podstawowego adresu URL „{1}” — „{2}”.", + "Resolving_real_path_for_0_result_1_6130": "Rozpoznawanie rzeczywistej ścieżki elementu ƒ„{0}”, wynik: „{1}”.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Rozwiązywanie dyrektywy odwołania do typu „{0}”, zawierającego plik: „{1}”. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny: „{2}”. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny nie został ustawiony. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny: „{1}”. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny nie został ustawiony. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Rozpoznawanie dyrektywy odwołania do typu dla programu, który określa niestandardowe typeRoots, pomijanie wyszukiwania w folderze „node_modules”.", + "Resolving_with_primary_search_path_0_6121": "Rozpoznawanie przy użyciu ścieżki wyszukiwania podstawowego „{0}”.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Dla parametru rest „{0}” niejawnie określono typ „any[]”.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest „{0}” niejawnie ma typ „any[]”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest można tworzyć tylko na podstawie typów obiektu.", + "Return_type_annotation_circularly_references_itself_2577": "Adnotacja zwracanego typu cyklicznie odwołuje się do samej siebie.", + "Return_type_must_be_inferred_from_a_function_95149": "Zwracany typ musi zostać wywnioskowany na podstawie funkcji", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Musi istnieć możliwość przypisania zwracanego typu sygnatury konstruktora do typu wystąpienia klasy.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Zwracany typ wyeksportowanej funkcji ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu nie zostało rozpoznane.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}”.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}” z identyfikatorem pakietu „{3}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Ponowne użycie rozwiązania dyrektywy odwołania typu „{0}” z „{1}” starego programu nie zostało rozpoznane.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}” o identyfikatorze pakietu „{3}”.", + "Rewrite_all_as_indexed_access_types_95034": "Zmień wszystko na indeksowane typy dostępu", + "Rewrite_as_the_indexed_access_type_0_90026": "Napisz ponownie jako indeksowany typ dostępu „{0}”", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Ponownie zapisz rozszerzenia plików „.ts”, „.tsx”, „.mts” i „.cts” we względnych ścieżkach importu do ich odpowiedników języka JavaScript w plikach wyjściowych.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Prawy operand elementu ?? jest nieosiągalny, ponieważ lewy operand nigdy nie dopuszcza wartości null.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nie można określić katalogu głównego. Pomijanie ścieżek wyszukiwania podstawowego.", + "Root_file_specified_for_compilation_1427": "Plik główny określony na potrzeby kompilacji", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATEGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Zapisuj pliki tsbuildinfo, aby umożliwić przyrostową kompilację projektów.", + "Saw_non_matching_condition_0_6405": "Wyświetlono niezgodny warunek „{0}”.", + "Scoped_package_detected_looking_in_0_6182": "Wykryto pakiet w zakresie, wyszukiwanie w „{0}”", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Przeszukiwanie wszystkich katalogów nadrzędnych node_modules w poszukiwaniu rozszerzeń rezerwowych: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Wyszukiwanie preferowanych rozszerzeń we wszystkich katalogach nadrzędnych node_modules: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Zobacz też https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Wybór nie jest prawidłową instrukcją ani instrukcjami", + "Selection_is_not_a_valid_type_node_95133": "Wybór nie jest prawidłowym węzłem typu", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Określ wersję języka JavaScript dla emitowanego kodu JavaScript i dołącz zgodne deklaracje bibliotek.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Określ język komunikatów z języka TypeScript. Nie wpływa to na emisję.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Ustaw opcję „module” w pliku konfiguracji na wartość „{0}”", + "Set_the_newline_character_for_emitting_files_6659": "Określ znak nowego wiersza dla emisji plików.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Ustaw opcję „target” w pliku konfiguracji na wartość „{0}”", + "Setters_cannot_return_a_value_2408": "Metody ustawiające nie mogą zwracać wartości.", + "Show_all_compiler_options_6169": "Pokaż wszystkie opcje kompilatora.", + "Show_diagnostic_information_6149": "Pokaż informacje diagnostyczne.", + "Show_verbose_diagnostic_information_6150": "Pokaż pełne informacje diagnostyczne.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Pokaż, co zostanie skompilowane (lub usunięte, jeśli określono opcję „--clean”)", + "Signature_0_must_be_a_type_predicate_1224": "Sygnatura „{0}” musi być predykatem typów.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklaracji podpisu można używać tylko w plikach TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Pomiń kompilowanie projektów podrzędnych w przypadku błędu w projekcie nadrzędnym.", + "Skip_type_checking_all_d_ts_files_6693": "Pomiń sprawdzanie typów dla wszystkich plików d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Pomiń sprawdzanie typów w plikach d.ts dołączanych w kodzie TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Pomiń sprawdzanie typu plików deklaracji.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowana", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Pomijanie modułu „{0}”, który wygląda jak bezwzględny identyfikator URI, docelowe typy plików: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono element „{1}”", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono wartość „none” dla opcji „--module”", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Liczba elementów w źródle to {0}, ale element docelowy zezwala tylko na {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "Liczba elementów w źródle to {0}, ale element docelowy wymaga {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Źródło nie udostępnia dopasowania dla wymaganego elementu na pozycji {0} w lokalizacji docelowej.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Źródło nie udostępnia dopasowania dla elementu ze zmienną argumentów na pozycji {0} w lokalizacji docelowej.", + "Specify_ECMAScript_target_version_6015": "Określ wersję docelową ECMAScript.", + "Specify_JSX_code_generation_6080": "Określ generowanie kodu JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Określ plik łączący wszystkie dane wyjściowe w jeden plik JavaScript. Jeśli element „declaration” ma wartość true, wyznaczany jest też plik łączący wszystkie dane wyjściowe d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Określ listę wzorców globalnych pasujących do plików, które należy uwzględnić w kompilacji.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Określ listę wtyczek usług języka do uwzględnienia.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Określ zestaw połączonych plików deklaracji bibliotek, które opisują docelowe środowisko uruchomieniowe.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Określ zestaw wpisów, które ponownie mapują operacje importu na dodatkowe lokalizacje wyszukiwania.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Określ tablicę obiektów określających ścieżki dla projektów. Używane w odwołaniach do projektów.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Określ folder wyjściowy dla wszystkich emitowanych plików.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Określ zachowanie emisji/sprawdzania dla importów, które są używane tylko dla typów.", + "Specify_file_to_store_incremental_compilation_information_6380": "Określ plik do przechowywania informacji o kompilacji przyrostowej", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Określ, jak język TypeScript ma wyszukiwać plik z podanego specyfikatora modułu.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Określ sposób obserwacji katalogów w systemach, które nie mają funkcji rekursywnej obserwacji plików.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Określ sposób działania trybu zegarka TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Określ pliki biblioteki do uwzględnienia w kompilacji.", + "Specify_module_code_generation_6016": "Określ generowanie kodu modułu.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Określ specyfikator modułów używany do importowania funkcji fabryki JSX w przypadku używania elementów „jsx: react-jsx*”.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Określ wiele folderów działających jak element „./node_modules/@types”.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Określ co najmniej jedną ścieżkę lub odwołanie do modułu platformy Node dotyczące podstawowych plików konfiguracji, z których są dziedziczone ustawienia.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Określ opcje automatycznego pozyskiwania plików deklaracji.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Określ strategię obserwowania z sondowaniem, gdy nie powiedzie się utworzenie przy użyciu zdarzeń systemu plików: „FixedInterval” (domyślna), „PriorityInterval”, „DynamicPriority”, „FixedChunkSize”.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Określ strategię obserwowania katalogu na platformach, które nie obsługują natywnego obserwowania rekursywnego: „UseFsEvents” (domyślna), „FixedPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Określ strategię obserwowania pliku: „FixedPollingInterval” (domyślna), „PriorityPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”, „UseFsEvents”, „UseFsEventsOnParentDirectory”.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Określ odwołanie do fragmentów JSX używane dla fragmentów w przypadku docelowej emisji kodu React JSX, np. „React.Fragment” lub „Fragment”.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Określ funkcję fabryki JSX do użycia, gdy elementem docelowym jest emisja elementu JSX „react”, np. „React.createElement” lub „h”.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Określ funkcję fabryki JSX używaną w przypadku docelowej emisji kodu React JSX, na przykład „React.createElement” lub „h”", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Określ funkcję fabryki fragmentów JSX, która ma być używana po ukierunkowaniu na emisję JSX „react” za pomocą opcji kompilatora „jsxFactory”, na przykład „Fragment”.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Określ katalog podstawowy, aby rozpoznać nie względne nazwy modułów.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Określ sekwencję końca wiersza, która ma być używana podczas emitowania plików: „CRLF” (dos) lub „LF” (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Określ lokalizację, w której debuger ma szukać plików TypeScript zamiast szukania w lokalizacjach źródłowych.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Określ lokalizację, w której debuger ma szukać plików map zamiast szukania w wygenerowanych lokalizacjach.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Określ maksymalną głębokość folderów używaną do sprawdzania plików JavaScript z poziomu elementu „node_modules”. Ma to zastosowanie tylko w przypadku użycia opcji „allowJs”.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Określ specyfikator modułu, który ma być używany do importowania z funkcji fabryki \"jsx\" i \"jsxs\", na przykład z platformy React", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Określ obiekt wywoływany dla elementu „createElement”. Ma to zastosowanie tylko w przypadku docelowej emisji kodu JSX „react”.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Określ katalog wyjściowy dla generowanych plików deklaracji.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Określ ścieżkę do pliku kompilacji przyrostowej .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Określ katalog główny plików wejściowych. Strukturą katalogów wyjściowych można sterować przy użyciu opcji --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Określ folder główny w plikach źródłowych.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Określ ścieżkę katalogu głównego, w którym debugery będą mogły znaleźć referencyjny kod źródłowy.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Określ nazwy pakietów typów do uwzględnienia bez odwoływania się do nich w pliku źródłowym.", + "Specify_what_JSX_code_is_generated_6646": "Określ, jaki kod JSX jest generowany.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Określ, jakie podejście ma stosować obserwator, jeśli w systemie zabraknie natywnych obserwatorów plików.", + "Specify_what_module_code_is_generated_6657": "Określ, jaki kod modułów jest generowany.", + "Split_all_invalid_type_only_imports_1367": "Podziel wszystkie nieprawidłowe importy dotyczące tylko typu", + "Split_into_two_separate_import_declarations_1366": "Podziel na dwie osobne deklaracje importu", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operator rozpiętości w wyrażeniach „new” jest dostępny tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", + "Spread_types_may_only_be_created_from_object_types_2698": "Typy spread można tworzyć tylko z typów obiektu.", + "Starting_compilation_in_watch_mode_6031": "Trwa uruchamianie kompilacji w trybie śledzenia...", + "Statement_expected_1129": "Oczekiwano instrukcji.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Instrukcje są niedozwolone w otaczających kontekstach.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statyczne składowe nie mogą przywoływać parametrów typu klasy.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Właściwość statyczna „{0}” jest w konflikcie z właściwością wbudowaną „Function.{0}” funkcji konstruktora „{1}”.", + "Stricter_Typechecking_Options_6292": "Bardziej rygorystyczne opcje sprawdzania typów", + "String_literal_expected_1141": "Oczekiwano literału ciągu.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Nazwy importu i eksportu literału ciągu nie są obsługiwane, gdy flaga „--module” ma wartość „es2015” lub „es2020”.", + "String_literal_with_double_quotes_expected_1327": "Oczekiwano literału ciągu z podwójnymi cudzysłowami.", + "Style_Options_6293": "Opcje stylów", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stosuj styl dla błędów i komunikatów za pomocą koloru i kontekstu. (eksperymentalne).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Flagi wzorca podrzędnego muszą być obecne, gdy istnieje półpauza.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Kolejne deklaracje właściwości muszą być tego samego typu. Właściwość „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Kolejne deklaracje zmiennej muszą być tego samego typu. Zmienna „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Podstawienie „{0}” dla wzorca „{1}” ma nieprawidłowy typ. Oczekiwano typu „string”, a uzyskano typ „{2}”.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Podstawienie „{0}” we wzorcu „{1}” może zawierać maksymalnie jeden znak „*”", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Podstawieniami wzorca „{0}” powinna być tablica.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Podstawienia dla wzorca „{0}” nie powinny być pustą tablicą.", + "Successfully_created_a_tsconfig_json_file_6071": "Pomyślnie utworzono plik tsconfig.json.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Wywołania super są niedozwolone poza konstruktorami i zagnieżdżonymi funkcjami wewnątrz konstruktorów.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Pomiń nadmiarowe sprawdzenia właściwości dla literałów obiektu.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Pomiń błędy noImplicitAny dotyczące obiektów indeksowania bez sygnatur indeksów.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Pomijaj błędy „noImplicitAny” podczas indeksowania obiektów, które nie mają sygnatur indeksu.", + "Switch_each_misused_0_to_1_95138": "Zmień każdy niepoprawnie użyty element „{0}” na „{1}”", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronicznie wywołuj wywołania zwrotne i aktualizuj stan obserwatorów katalogów na platformach, które nie obsługują natywnie obserwacji rekursywnej.", + "Syntax_Colon_0_6023": "Składnia: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Tag „{0}” oczekuje co najmniej „{1}” argumentów, ale fabryka JSX „{2}” dostarcza maksymalnie „{3}”.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Oznakowane wyrażenia szablonu nie są dozwolone w opcjonalnym łańcuchu.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Liczba elementów dozwolonych przez element docelowy to {0}, ale źródło może mieć ich więcej.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Liczba elementów wymaganych przez element docelowy to {0}, ale źródło może mieć ich mniej.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Podpis docelowy zawiera zbyt mało argumentów. Oczekiwano {0} lub więcej, ale otrzymano {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modyfikatora „{0}” można używać tylko w plikach TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Nie można zastosować operatora „{0}” do typu „symbol”.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operator „{0}” nie jest dozwolony w przypadku typów logicznych. Zamiast tego rozważ użycie operatora „{1}”.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Właściwość „{0}” iteratora asynchronicznego musi być metodą.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Właściwość „{0}” iteratora musi być metodą.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ „Object” można przypisać do niewielu innych typów. Czy zamiast tego typu miał zostać użyty typ „any”?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Nie można jednocześnie ustawić flagi Unicode (u) i flagi Unicode Sets (v).", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w języku ES5. Rozważ użycie standardowego wyrażenia funkcji.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES5. Rozważ użycie standardowej funkcji lub metody.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Treść instrukcji „if” nie może być pustą instrukcją.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Wywołanie powiodłoby się dla tej implementacji, ale sygnatury implementacji przeciążeń nie są widoczne na zewnątrz.", + "The_character_set_of_the_input_files_6163": "Zestaw znaków plików wejściowych.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Zawierająca funkcja strzałki przechwytuje wartość globalną parametru „this”.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Treść zawierającej funkcji lub modułu jest za duża do analizy przepływu sterowania.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Bieżący plik jest modułem CommonJS i nie może używać elementu „await” na najwyższym poziomie.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Bieżący plik jest modułem CommonJS, którego importy będą generować wywołania „require”; jednak przywoływany plik jest modułem ECMAScript i nie można go zaimportować za pomocą wywołania „require”. Zamiast tego rozważ zapisanie dynamicznego wywołania „import(\"{0}\")”.", + "The_current_host_does_not_support_the_0_option_5001": "Bieżący host nie obsługuje opcji „{0}”.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "W tym miejscu zdefiniowano deklarację elementu „{0}”, której prawdopodobnie zamierzano użyć", + "The_declaration_was_marked_as_deprecated_here_2798": "Deklaracja została oznaczona jako przestarzała w tym miejscu.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Oczekiwany typ pochodzi z właściwości „{0}”, która jest zadeklarowana tutaj w typie „{1}”", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Oczekiwany typ pochodzi ze zwracanego typu tej sygnatury.", + "The_expected_type_comes_from_this_index_signature_6501": "Oczekiwany typ pochodzi z tej sygnatury indeksu.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Wyrażenie przypisania eksportu musi być identyfikatorem lub kwalifikowaną nazwą w otaczającym kontekście.", + "The_file_is_in_the_program_because_Colon_1430": "Plik jest w programie, ponieważ:", + "The_files_list_in_config_file_0_is_empty_18002": "Lista „files” w pliku konfiguracji „{0}” jest pusta.", + "The_first_export_default_is_here_2752": "Pierwszy element export default jest tutaj.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Pierwszym parametrem metody „then” obietnicy musi być wywołanie zwrotne.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Dla typu globalnego „JSX.{0}” nie można określić więcej niż jednej właściwości.", + "The_implementation_signature_is_declared_here_2750": "Sygnatura implementacji jest zadeklarowana tutaj.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Metawłaściwość „import.meta” jest niedozwolona w plikach, które będą kompilowane w danych wyjściowych CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Meta-właściwość „import.meta” jest dozwolona tylko wtedy, gdy opcja „--module” ma wartość „es2020”, „es2022”, „esnext”, „system”, „node16”, „node18”, „node20” lub „nodenext”.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Wywnioskowany typ „{0}” nie może być nazwany bez odwołania do elementu „{1}”. Prawdopodobnie nie jest to przenośne. Konieczna jest adnotacja typu.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Wywnioskowany typ elementu „{0}” odwołuje się do typu ze strukturą cykliczną, którego nie można serializować w prosty sposób. Wymagana jest adnotacja typu.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Wnioskowany typ „{0}” przywołuje niedostępny typ „{1}”. Adnotacja typu jest konieczna.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Wywnioskowany typ tego węzła przekracza maksymalną długość, którą kompilator może serializować. Wymagana jest jawna adnotacja typu.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicjator deklaracji „using” musi być obiektem z metodą „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicjator deklaracji „await using” musi być obiektem z metodą „[Symbol.asyncDispose]()” lub „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” istnieje w wielu elementach składowych i w części z nich jest prywatna.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” zawiera typy powodujące konflikt w niektórych elementach składowych.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Słowa kluczowego „intrinsic” można używać tylko do deklarowania typów wewnętrznych udostępnianych przez kompilator.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Należy podać opcję kompilatora „jsxFragmentFactory”, aby używać fragmentów JSX z opcją kompilatora „jsxFactory”.", + "The_last_overload_gave_the_following_error_2770": "Ostatnie przeciążenie dało następujący błąd.", + "The_last_overload_is_declared_here_2771": "Ostatnie przeciążenie jest zadeklarowane tutaj.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Lewa strona instrukcji „for...in” nie może być wzorcem usuwającym strukturę.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Lewa strona instrukcji „for...in” nie może być deklaracją „using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Lewa strona instrukcji „for...in” nie może być deklaracją „await using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Lewa strona instrukcji „for...in” nie może używać adnotacji typu.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Lewa strona instrukcji „for...in” nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Lewa strona instrukcji „for...in” musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Lewa strona instrukcji „for...in” musi być typu „string” lub „any”.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Lewa strona instrukcji „for...of” nie może używać adnotacji typu.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Lewa strona instrukcji „for...of” nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Lewa strona instrukcji „for...of” nie może być „asynchroniczna”.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Lewa strona instrukcji „for...of” musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Lewa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Lewa strona wyrażenia przypisania nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Lewa strona wyrażenia przypisania musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Lewa strona wyrażenia „instanceof” musi być przypisana do pierwszego argumentu po prawej stronie metody „[Symbol.hasInstance]”.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Lewa strona wyrażenia „instanceof” musi być typu „any”, typu obiektu lub parametrem typu.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Ustawienia regionalne używane przy wyświetlaniu komunikatów użytkownikowi (np. „pl-pl”)", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maksymalna głębokość zależności na potrzeby wyszukiwania w elemencie node_modules i ładownia plików JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Operand operatora „delete” nie może być identyfikatorem prywatnym.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Operand operatora „delete” nie może być właściwością tylko do odczytu.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Operand operatora „delete” musi być odwołaniem do właściwości.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "Operand operatora „delete” musi być opcjonalny.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Operand operatora inkrementacji lub dekrementacji nie może być opcjonalnym dostępem do właściwości.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Operand operatora inkrementacji lub dekrementacji musi być zmienną lub dostępem do właściwości.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Analizator oczekiwał znalezienia elementu „{1}” w celu dopasowania do tokenu „{0}” w tym miejscu.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy eksportu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy importu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Nie można uzyskać dostępu do właściwości „{0}” w typie „{1}” w tej klasie, ponieważ jest ona zasłaniana przez inny identyfikator prywatny o takiej samej pisowni.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Zwracany typ funkcji dekoratora parametrów musi mieć postać „void” lub „any”.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Zwracany typ funkcji dekoratora właściwości musi mieć postać „void” lub „any”.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zwracany typ funkcji asynchronicznej musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zwracany typ metody lub funkcji asynchronicznej musi być globalnym typem Promise.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Zwracany typ funkcji lub metody asynchronicznej musi być globalnym typem Promise. Czy chodziło Ci o typ „Promise<{0}>”?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Prawa strona instrukcji „for...in” musi zawierać typ „any”, typ obiektu lub parametr typu, a tutaj ma typ „{0}”.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Prawa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Prawa strona wyrażenia „instanceof” musi być typem „any”, klasą, funkcją lub innym typem, który można przypisać do typu interfejsu „Function”, albo typem obiektu z metodą „Symbol.hasInstance”.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Prawa strona wyrażenia „instanceof” nie może być wyrażeniem tworzenia wystąpienia.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Wartość katalogu głównego pliku „{0}” musi być obiektem.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje co najmniej {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "Deklaracja przesłaniania „{0}” jest zdefiniowana tutaj", + "The_signature_0_of_1_is_deprecated_6387": "Sygnatura „{0}” elementu „{1}” jest przestarzała.", + "The_specified_path_does_not_exist_Colon_0_5058": "Wybrana ścieżka nie istnieje: „{0}”.", + "The_tag_was_first_specified_here_8034": "Tag został najpierw określony w tym miejscu.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Obiekt docelowy przypisania rest obiektu nie może być opcjonalnym dostępem do właściwości.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Cel przypisania rest obiektu musi stanowić dostęp do zmiennej lub właściwości.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Kontekstu „this” typu „{0}” nie można przypisać do elementu „this” metody typu „{1}”.", + "The_this_types_of_each_signature_are_incompatible_2685": "Typy „this” sygnatur nie są zgodne.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ „{0}” jest „readonly” i nie można go przypisać do typu modyfikowalnego „{1}”.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Modyfikatora „type” nie można użyć w nazwanym eksporcie, gdy w instrukcji eksportowania jest używany element „export type”.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Modyfikatora „type” nie można użyć w nazwanym imporcie, gdy w instrukcji importowania jest używany element „import type”.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Typ tego węzła nie może być serializowany, ponieważ jego właściwość „{0}” nie może być serializowana.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ zwracany przez metodę „{0}()” iteratora asynchronicznego musi być obietnicą dla typu z właściwością „value”.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ zwracany przez metodę „{0}()” iteratora musi mieć właściwość „value”.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Typy elementu „{0}” są niezgodne między tymi typami.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Typy zwrócone przez element „{0}” są niezgodne między tymi typami.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "W tym miejscu nie można użyć wartości „{0}”.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklaracja zmiennej instrukcji „for...in” nie może mieć inicjatora.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklaracja zmiennej instrukcji „for...of” nie może mieć inicjatora.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Instrukcja „with” nie jest obsługiwana. Wszystkie symbole w bloku „with” będą mieć typ „any”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku w bieżącym ustawieniu „moduleResolution”. Rozważ zaktualizowanie do wartości „node16”, „nodenext” lub „bundler”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku podczas uwzględniania pliku package.json „exports”. Biblioteka „{1}” może wymagać zaktualizowania pliku package.json lub wpisywania tekstu.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "W tym wyrażeniu regularnym nie ma żadnej grupy przechwytywania o nazwie „{0}”.", + "There_is_nothing_available_for_repetition_1507": "Brak dostępnych elementów do powtórzenia.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Ten tag rozszerzenia JSX wymaga, aby element „{0}” był w zakresie, ale nie można go znaleźć.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Ten tag rozszerzenia JSX wymaga, aby ścieżka modułu „{0}” istniała, ale nie można jej znaleźć. Upewnij się, że masz zainstalowane typy dla odpowiedniego pakietu.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Element prop „{0}” tego tagu JSX oczekuje pojedynczego elementu podrzędnego typu „{1}”, ale podano wiele elementów podrzędnych.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Element prop „{0}” tego tagu JSX oczekuje typu „{1}”, który wymaga wielu elementów podrzędnych, ale podano tylko jeden element podrzędny.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym nie ma żadnych grup przechwytywania.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym jest tylko następująca liczba grup przechwytywania: {0}.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "To wyrażenie binarne nigdy nie dopuszcza wartości null. Czy brakuje nawiasów?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tego znaku nie można poprzedzić znakiem ucieczki w wyrażeniu regularnym.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "To porównanie wydaje się niezamierzone, ponieważ typy „{0}” i „{1}” nie nakładają się na siebie.", + "This_condition_will_always_return_0_2845": "Ten warunek będzie zawsze zwracać wartość „{0}”.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Ten warunek zawsze będzie zwracać wartość „{0}”, ponieważ język JavaScript porównuje obiekty według odwołania, a nie wartości.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Ten warunek będzie zawsze zwracać wartość true, ponieważ wartość '{0}' jest zawsze prawdziwa.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją zamiast tego?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Ta funkcja konstruktora może zostać przekonwertowana na deklarację klasy.", + "This_expression_is_always_nullish_2871": "To wyrażenie ma zawsze wartość null.", + "This_expression_is_never_nullish_2881": "To wyrażenie nigdy nie ma wartości null.", + "This_expression_is_not_callable_2349": "To wyrażenie nie jest wywoływalne.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tego wyrażenia nie można wywoływać, ponieważ jest to metoda dostępu „get”. Czy chodziło Ci o użycie go bez znaków „()”?", + "This_expression_is_not_constructable_2351": "Tego wyrażenia nie można skonstruować.", + "This_file_already_has_a_default_export_95130": "Ten plik ma już domyślny eksport", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Ponowne zapisanie tej ścieżki importu jest niebezpieczne, ponieważ jest rozpoznawana jako inny projekt, a ścieżka względna między plikami wyjściowymi projektów nie jest taka sama jak ścieżka względna między plikami wejściowymi.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Ten import używa rozszerzenia „{0}” do rozpoznania jako wejściowego pliku TypeScript, ale nie zostanie ponownie zapisany podczas emitowania, ponieważ nie jest ścieżką względną.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "To jest rozszerzana deklaracja. Rozważ przeniesienie deklaracji rozszerzenia do tego samego pliku.", + "This_kind_of_expression_is_always_falsy_2873": "Tego rodzaju wyrażenie jest zawsze błędne.", + "This_kind_of_expression_is_always_truthy_2872": "Tego rodzaju wyrażenie jest zawsze prawdziwe.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "To można przekonwertować na funkcję asynchroniczną.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ta składowa nie może mieć komentarza JSDoc z tagiem „override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”. Czy chodziło Ci o „{1}”?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ten element członkowski nie może mieć komentarza JSDoc z tagiem „@zastąp”, ponieważ jego nazwa jest dynamiczna.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ nie jest zadeklarowany w klasie podstawowej „{0}”.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ nie jest on zadeklarowany w klasie bazowej \"{0}\". Czy chodzi Ci o \"{1}\"?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ jego nazwa jest dynamiczna.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Ta składowa musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ten element członkowski musi mieć modyfikator „override”, ponieważ przesłania on element członkowski w klasie podstawowej „{0}”.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ten element członkowski musi mieć modyfikator „override”, ponieważ zastępuje metodę abstrakcyjną zadeklarowaną w klasie podstawowej „{0}”.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Do tego modułu można odwoływać się tylko za pomocą importów/eksportów języka ECMAScript, włączając flagę „{0}” i odwołując się do jego eksportu domyślnego.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ten moduł jest zadeklarowany przy użyciu składni „export =” i może być używany tylko z importem domyślnym, gdy jest używana flaga „{0}”.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tę operację można uprościć. Ta zmiana jest identyczna z „{0} {1} {2}”.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "To przeciążenie niejawnie zwraca typ „{0}”, ponieważ nie ma adnotacji zwracanego typu.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Ta sygnatura przeciążenia nie jest zgodna z jej sygnaturą implementacji.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ten parametr nie jest dozwolony w dyrektywie „use strict”.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Ta właściwość parametru musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Ta właściwość parametru musi mieć modyfikator \"override\", ponieważ zastępuje on członka w klasie bazowej \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tej flagi wyrażenia regularnego nie można przełączać w obrębie wzorca podrzędnego.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Ta flaga wyrażenia regularnego jest dostępna tylko w przypadku określania wartości docelowej „{0}” lub nowszej.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Ta względna ścieżka importu jest niebezpieczna do ponownego zapisania, ponieważ wygląda jak nazwa pliku, ale w rzeczywistości jest rozpoznawana jako „{0}”.", + "This_spread_always_overwrites_this_property_2785": "To rozmieszczenie zawsze powoduje zastąpienie tej właściwości.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Ta składnia jest niedozwolona, gdy jest włączona opcja \"erasableSyntaxOnly\".", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem .MTS lub CTS. Dodaj końcowy przecinek lub jawne ograniczenie.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem. MTS lub. CTS. Użyj zamiast tego wyrażenia „as”.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Ta składnia wymaga zaimportowanego pomocnika, ale nie można znaleźć modułu „{0}”.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}”, który nie istnieje w elemencie „{0}”. Rozważ uaktualnienie wersji „{0}”.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}” z parametrami {2}, który nie jest zgodny z tym w elemencie „{0}”. Rozważ uaktualnienie wersji elementu „{0}”.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Ten parametr typu może wymagać ograniczenia „rozszerzeń{0}”.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "To użycie elementu „import” jest nieprawidłowe. Wywołania „import()” mogą być zapisywane, ale muszą mieć nawiasy i nie mogą mieć argumentów typu.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Aby przekonwertować ten plik na moduł ECMAScript, dodaj pole „\"type\": \"module\"” do „{0}”.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub dodaj pole „\"type\": \"module\"” do „{1}”.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Aby przekonwertować ten plik na moduł ECMAScript, utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Wyrażenia „await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Instrukcje „await using” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklaracje najwyższego poziomu w plikach .d.ts muszą rozpoczynać się od modyfikatora „declare” lub „export”.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Pętle „for await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Trailing_comma_not_allowed_1009": "Końcowy przecinek jest niedozwolony.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluj każdy plik jako oddzielny moduł (podobne do „ts.transpileModule”).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Spróbuj użyć polecenia „npm i --save-dev @types/{1}”, jeśli istnieje, lub dodać nowy plik deklaracji (.d.ts) zawierający ciąg „declare module '{0}';”", + "Trying_other_entries_in_rootDirs_6110": "Wykonywanie prób przy użyciu innych pozycji opcji „rootDirs”.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Wykonywanie próby przeprowadzenia podstawienia „{0}”, lokalizacja modułu kandydata: „{1}”.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ krotki „{0}” o długości „{1}” nie ma żadnego elementu w indeksie „{2}”.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typu krotki cyklicznie odwołują się do samych siebie.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Po typie „{0}” można iterować tylko wtedy, gdy jest używana flaga „--downlevelIteration” lub parametr „--target” ma wartość „es2015” lub wyższą.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Typu „{0}” nie można używać jako typu indeksu.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Typu „{0}” nie można użyć do indeksowania typu „{1}”.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ „{0}” nie spełnia warunków ograniczenia „{1}”.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Typ „{0}” nie spełnia oczekiwanego typu „{1}”.", + "Type_0_has_no_call_signatures_2757": "Typ „{0}” nie ma sygnatur wywołania.", + "Type_0_has_no_construct_signatures_2761": "Typ „{0}” nie ma sygnatur konstrukcji.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ „{0}” nie ma pasującej sygnatury indeksu dla typu „{1}”.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Typy „{0}” i „{1}” nie mają żadnych wspólnych właściwości.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Typ „{0}” nie ma podpisów, dla których ma zastosowanie lista argumentów typu ogólnego.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}” jest typem ogólnym i może być indeksowany tylko do odczytu.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2} i jeszcze {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "Typ „{0}” nie jest typem funkcji konstruktora.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}” nie jest prawidłowym zwracanym typem funkcji asynchronicznej w języku ES5, ponieważ nie odwołuje się do wartości konstruktora zgodnej z elementem Promise.", + "Type_0_is_not_an_array_type_2461": "Typ „{0}” nie jest typem tablicowym.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ „{0}” nie jest typem tablicowym ani typem ciągu.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ „{0}” nie jest typem tablicy ani ciągu lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ „{0}” nie jest typem tablicy lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", + "Type_0_is_not_assignable_to_type_1_2322": "Typu „{0}” nie można przypisać do typu „{1}”.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Nie można przypisać typu „{0}” do typu „{1}”. Czy chodziło Ci o „{2}”?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typu „{0}” nie można przypisać do typu „{1}”. Istnieją dwa różne typy o tej nazwie, lecz są ze sobą niezwiązane.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Nie można przypisać typu „{0}” do typu „{1}”, jak sugeruje adnotacja wariancji.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Nie można przypisać typu „{0}” do typu „{1}” zgodnie z wymaganiami dla obliczonych wartości składowych wyliczenia.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typu elementu docelowego.", + "Type_0_is_not_comparable_to_type_1_2678": "Typu „{0}” nie można porównać z typem „{1}”.", + "Type_0_is_not_generic_2315": "Typ „{0}” nie jest ogólny.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ „{0}” może reprezentować wartość pierwotną, co nie jest dozwolone jako prawy operand operatora „in”.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Typ „{0}” musi zawierać metodę „[Symbol.asyncIterator]()” zwracającą iterator asynchroniczny.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ „{0}” musi zawierać metodę „[Symbol.iterator]()” zwracającą iterator.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Typ „{0}” nie udostępnia dopasowania dla sygnatury „{1}”.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ „{0}” rekursywnie przywołuje sam siebie jako typ podstawowy.", + "Type_Checking_6248": "Sprawdzanie typu", + "Type_alias_0_circularly_references_itself_2456": "Alias typu „{0}” cyklicznie przywołuje sam siebie.", + "Type_alias_must_be_given_a_name_1439": "Alias typu musi mieć nazwę.", + "Type_alias_name_cannot_be_0_2457": "Alias typu nie może mieć nazwy „{0}”.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasów typów można używać tylko w plikach TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Adnotacja typu nie może występować w deklaracji konstruktora.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Adnotacji typu można używać tylko w plikach TypeScript.", + "Type_argument_expected_1140": "Oczekiwano argumentu typu.", + "Type_argument_list_cannot_be_empty_1099": "Lista argumentów typu nie może być pusta.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typu mogą być używane tylko w plikach TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typu dla elementu „{0}” cyklicznie odwołują się do samych siebie.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozycji {0} w źródle nie jest zgodny z typem na pozycji {1} w lokalizacji docelowej.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozycjach od {0} do {1} w źródle nie jest zgodny z typem w pozycji {2} w lokalizacji docelowej.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ zawierający nazwę prywatną „{0}” nie może być używany z elementem --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Pliki deklaracji typu do uwzględnienia w kompilacji.", + "Type_expected_1110": "Oczekiwano typu.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Twierdzenie importu typu powinno mieć dokładnie jeden klucz – „resolution-mode“ – z wartością „importuj“ lub „wymagaj“.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Import typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tworzenie wystąpienia typu jest nadmiernie szczegółowe i prawdopodobnie nieskończone.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ jest przywoływany bezpośrednio lub pośrednio w wywołaniu zwrotnym realizacji jego własnej metody „then”.", + "Type_library_referenced_via_0_from_file_1_1402": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}” o identyfikatorze packageId „{2}”", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu „await” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ wartości właściwości obliczanej to „{0}”, którego nie można przypisać do typu „{1}”.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Typ zmiennej składowej wystąpienia „{0}” nie może odwoływać się do identyfikatora „{1}” zadeklarowanego w konstruktorze.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterowanych elementów operandu „yield*” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Typ właściwości „{0}” cyklicznie odwołuje się do siebie w zamapowanym typie „{1}”.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Typ operandu „yield” w generatorze asynchronicznym musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Import tylko typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Typ pochodzi z tego importu. Nie można wywołać ani skonstruować importu w stylu przestrzeni nazw, co spowoduje wystąpienie błędu w czasie wykonywania. Zamiast tego rozważ użycie importu domyślnego lub funkcji require importu.", + "Type_parameter_0_has_a_circular_constraint_2313": "Parametr typu „{0}” zawiera ograniczenie cykliczne.", + "Type_parameter_0_has_a_circular_default_2716": "Parametr typu „{0}” ma cykliczną wartość domyślną.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Parametr typu „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Parametr typu „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Parametr typu „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Parametr typu „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Parametr typu „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Parametr typu „{0}” wyeksportowanego mapowanego typu obiektu używa nazwy prywatnej „{1}”.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Parametr typu „{0}” wyeksportowanego aliasu typu ma nazwę prywatną „{1}” lub jej używa.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Parametr typu „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Parametr typu „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Parametr typu „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_declaration_expected_1139": "Oczekiwano deklaracji parametru typu.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Deklaracje parametrów typu mogą być używane tylko w plikach TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Wartości domyślne parametrów typu mogą się odwoływać tylko do wcześniej zadeklarowanych parametrów typu.", + "Type_parameter_list_cannot_be_empty_1098": "Lista parametrów typu nie może być pusta.", + "Type_parameter_name_cannot_be_0_2368": "Parametr typu nie może mieć nazwy „{0}”.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu nie mogą występować w deklaracji konstruktora.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Predykatu typów „{0}” nie można przypisać do elementu „{1}”.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", + "Type_reference_directive_0_was_not_resolved_6120": "======== Dyrektywa odwołania do typu „{0}” nie została rozpoznana. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}”, podstawowe: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”, podstawowe: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typy nie mogą występować w deklaracjach eksportu w plikach JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Typy mają osobne deklaracje właściwości prywatnej „{0}”.", + "Types_of_construct_signatures_are_incompatible_2419": "Typy sygnatur konstrukcji są niezgodne.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Typy parametrów „{0}” i „{1}” są niezgodne.", + "Types_of_property_0_are_incompatible_2326": "Typy właściwości „{0}” są niezgodne.", + "Unable_to_open_file_0_6050": "Nie można otworzyć pliku „{0}”.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Nie można rozpoznać sygnatury dekoratora klasy wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Nie można rozpoznać sygnatury dekoratora metody wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Nie można rozpoznać sygnatury dekoratora parametru wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Nie można rozpoznać sygnatury dekoratora właściwości wywołanego jako wyrażenie.", + "Undetermined_character_escape_1513": "Nieokreślony znak ucieczki.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Nieoczekiwane „{0}”. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", + "Unexpected_end_of_text_1126": "Nieoczekiwany koniec tekstu.", + "Unexpected_keyword_or_identifier_1434": "Nieoczekiwane słowo kluczowe lub identyfikator.", + "Unexpected_token_1012": "Nieoczekiwany token.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Nieoczekiwany token. Oczekiwano konstruktora, metody, metody dostępu lub właściwości.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Nieoczekiwany token. Oczekiwano nazwy parametru typu bez nawiasów klamrowych.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Nieoczekiwany token. Czy chodziło o „{'>'}” lub „>”?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Nieoczekiwany token. Czy chodziło o „{'}'}” lub „}”?", + "Unexpected_token_expected_1179": "Nieoczekiwany token. Oczekiwano znaku „{”.", + "Unicode_escape_sequence_cannot_appear_here_17021": "W tym miejscu nie można wyświetlić sekwencji ucieczki standardu Unicode.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Sekwencje ucieczki standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Wyrażenia wartości właściwości standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nieznana nazwa właściwości standardu Unicode.", + "Unknown_Unicode_property_name_or_value_1529": "Nieznana nazwa lub wartość właściwości standardu Unicode.", + "Unknown_Unicode_property_value_1526": "Nieznana wartość właściwości standardu Unicode.", + "Unknown_build_option_0_5072": "Nieznana opcja kompilacji „{0}”.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Nieznana opcja kompilacji „{0}”. Czy chodziło o „{1}”?", + "Unknown_compiler_option_0_5023": "Nieznana opcja kompilatora „{0}”.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Nieznana opcja kompilatora „{0}”. Czy chodziło o „{1}”?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Nieznane słowo kluczowe lub identyfikator. Czy chodziło Ci o „{0}”?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Nieznana opcja „excludes”. Czy chodziło o „exclude”?", + "Unknown_regular_expression_flag_1499": "Nieznana flaga wyrażenia regularnego.", + "Unknown_type_acquisition_option_0_17010": "Opcja pozyskania nieznanego typu „{0}”.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Nieznana opcja pozyskania typu „{0}”. Czy chodziło o „{1}”?", + "Unknown_watch_option_0_5078": "Nieznana opcja obserwowania „{0}”.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Nieznana opcja obserwowania: „{0}”. Czy chodziło Ci o „{1}”?", + "Unreachable_code_detected_7027": "Wykryto nieosiągalny kod.", + "Unterminated_Unicode_escape_sequence_1199": "Niezakończona sekwencja ucieczki kodu Unicode.", + "Unterminated_quoted_string_in_response_file_0_6045": "Niezakończony ciąg ujęty w cudzysłów w pliku odpowiedzi „{0}”.", + "Unterminated_regular_expression_literal_1161": "Niezakończony literał wyrażenia regularnego.", + "Unterminated_string_literal_1002": "Niezakończony literał ciągu znaków.", + "Unterminated_template_literal_1160": "Niezakończony literał szablonu.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Wywołania funkcji bez typu nie mogą przyjmować argumentów typu.", + "Unused_label_7028": "Nieużywana etykieta.", + "Unused_ts_expect_error_directive_2578": "Nieużywana dyrektywa „@ts-expect-error”.", + "Update_import_from_0_90058": "Aktualizuj import z „{0}”", + "Update_modifiers_of_0_90061": "Modyfikatory aktualizacji elementu „{0}”", + "Updating_output_timestamps_of_project_0_6359": "Trwa aktualizowanie sygnatury czasowej danych wyjściowych projektu „{0}”...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Trwa aktualizowanie niezmienionych sygnatur czasowych danych wyjściowych projektu „{0}”...", + "Use_0_95174": "Użyj „{0}”.", + "Use_0_instead_5106": "Zamiast tego użyj „{0}”.", + "Use_Number_isNaN_in_all_conditions_95175": "Użyj wartości „Number.isNaN” we wszystkich warunkach.", + "Use_element_access_for_0_95145": "Użyj dostępu do elementu w przypadku elementu „{0}”", + "Use_element_access_for_all_undeclared_properties_95146": "Użyj dostępu do elementu w przypadku wszystkich niezadeklarowanych właściwości.", + "Use_import_type_95180": "Użyj opcji „import type”", + "Use_synthetic_default_member_95016": "Użyj syntetycznej składowej „default”.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Podczas rozpoznawania importów pakietów użyj pola „exports” pliku package.json.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Podczas rozpoznawania importów użyj pola „imports” pliku package.json.", + "Use_type_0_95181": "Użyj „typu {0}”", + "Using_0_subpath_1_with_target_2_6404": "Używanie „{0}” ścieżki podrzędnej „{1}” z elementem docelowym „{2}”.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Użycie fragmentów rozszerzenia JSX wymaga, aby fabryka fragmentów „{0}” była w zakresie, ale nie można jej znaleźć.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Używanie ciągu w instrukcji „for...of” jest obsługiwane tylko w języku ECMAScript 5 lub nowszym.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Użycie elementu --build, -b sprawi, że narzędzie tsc będzie zachowywało się bardziej jak orkiestrator kompilacji niż kompilator. Ta opcja jest wykorzystywana do wyzwalania kompilacji projektów złożonych, o których dowiesz się więcej na stronie {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", + "VERSION_6036": "WERSJA", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Wartość typu „{0}” nie ma żadnych wspólnych właściwości z typem „{1}”. Czy jej wywołanie było zamierzone?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Nie można wywołać wartości typu „{0}”. Czy miał zostać użyty operator „new”?", + "Variable_0_implicitly_has_an_1_type_7005": "Dla zmiennej „{0}” niejawnie określono typ „{1}”.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Zmienna „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Zmienna „{0}” niejawnie ma typ „{1}” w niektórych lokalizacjach, ale lepszy typ można wywnioskować na podstawie użycia.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Zmienna „{0}” ma niejawnie typ „{1}” w niektórych lokalizacjach, w których nie można określić jej typu.", + "Variable_0_is_used_before_being_assigned_2454": "Zmienna „{0}” jest używana przed przypisaniem.", + "Variable_declaration_expected_1134": "Oczekiwano deklaracji zmiennej.", + "Variable_declaration_list_cannot_be_empty_1123": "Lista deklaracji zmiennych nie może być pusta.", + "Variable_declaration_not_allowed_at_this_location_1440": "Deklaracja zmiennej jest niedozwolona w tej lokalizacji.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Zmienna musi mieć jawną adnotację typu z właściwością --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Zmienne z wieloma deklaracjami nie mogą być śródwierszowe.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element ze zmienną liczbą argumentów na pozycji {0} w źródle nie jest zgodny z elementem na pozycji {1} w lokalizacji docelowej.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Adnotacje wariancji są obsługiwane tylko w aliasach typów obiektów, funkcji, konstruktorów i mapowanych typów.", + "Version_0_6029": "Wersja {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Odwiedź https://aka.ms/ts6, aby uzyskać informacje o migracji.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Odwiedź https://aka.ms/tsconfig, aby dowiedzieć się więcej o tym pliku", + "WATCH_OPTIONS_6918": "OPCJE OBSERWACJI", + "Watch_and_Build_Modes_6250": "Tryb wyrażeń kontrolnych i kompilowania", + "Watch_input_files_6005": "Obserwuj pliki wejściowe.", + "Watch_option_0_requires_a_value_of_type_1_5080": "Opcja obserwowania „{0}” wymaga wartości typu {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Możemy napisać typ tylko dla elementu „{0}”, dodając typ dla całego parametru w tym miejscu.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Podczas przypisywania funkcji upewnij się, że parametry i zwracane wartości są zgodne pod względem podtypów.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Podczas sprawdzania typów uwzględniaj wartości „null” i „undefined”.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Określa, czy zachować nieaktualne dane wyjściowe konsoli w trybie śledzenia zamiast wyczyścić ekran.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Opakuj wszystkie nieprawidłowe znaki w kontenerze wyrażenia", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Zawijaj wszystkie nieprawidłowe wyrażenia dekoratora w nawiasy", + "Wrap_all_object_literal_with_parentheses_95116": "Zawijaj wszystkie literały obiektu z nawiasami", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Opakuj wszystkie elementy JSX bez elementu nadrzędnego we fragment JSX", + "Wrap_in_JSX_fragment_95120": "Opakuj we fragment JSX", + "Wrap_in_parentheses_95194": "Zawijaj w nawiasy", + "Wrap_invalid_character_in_an_expression_container_95108": "Opakuj nieprawidłowy znak w kontenerze wyrażenia", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Zawijaj następującą treść z nawiasami, która powinna być literałem obiektu", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "O wszystkich opcjach kompilatora przeczytasz na stronie {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Nie można zmienić nazwy modułu za pomocą importu globalnego.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Nie można zmieniać nazw elementów zdefiniowanych w folderze „node_modules”.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Nie można zmieniać nazw elementów zdefiniowanych w innym folderze „node_modules”.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nie można zmienić nazw elementów zdefiniowanych w standardowej bibliotece TypeScript.", + "You_cannot_rename_this_element_8000": "Nie można zmienić nazwy tego elementu.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Element „{0}” akceptuje za mało argumentów, aby można go było użyć w tym miejscu jako dekorator. Czy chcesz najpierw go wywołać i zapisać tag „@{0}()”?", + "_0_and_1_index_signatures_are_incompatible_2330": "Sygnatury indeksów „{0}” i „{1}” są niezgodne.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operacji „{0}” i „{1}” nie można mieszać bez nawiasów.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Element „{0}” został określony dwa razy. Atrybut o nazwie „{0}” zostanie przesłonięty.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "Element „{0}” na końcu typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "Element „{0}” na początku typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Element „{0}” można zaimportować tylko przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "Element „{0}” można zaimportować tylko przy użyciu importu domyślnego.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Element „{0}” można zaimportować za pomocą wywołania „require” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Element „{0}” można zaimportować tylko za pomocą wywołania „require” lub przy użyciu importu domyślnego.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub importu domyślnego.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_cannot_be_used_as_a_JSX_component_2786": "Elementu „{0}” nie można użyć jako składnika JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Element „{0}” nie może być używany jako wartość, ponieważ został wyeksportowany przy użyciu aliasu „export type”.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Element „{0}” nie może być używany jako wartość, ponieważ został zaimportowany przy użyciu aliasu „import type”.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Składniki „{0}” nie akceptują tekstu jako elementów podrzędnych. Tekst w JSX ma typ „string”, ale oczekiwany typ elementu „{1}” to „{2}”.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Nie można utworzyć wystąpienia elementu „{0}” z dowolnym typem, który może być niezwiązany z elementem „{1}”.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklaracje „{0}” mogą być deklarowane tylko w bloku.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklaracje „{0}” mogą być używane tylko w plikach TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Deklaracje „{0}” mogą nie mieć wzorców powiązań.", + "_0_declarations_must_be_initialized_1155": "Deklaracje „{0}” muszą być zainicjowane.", + "_0_expected_1005": "Oczekiwano elementu „{0}”.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "Element „{0}” ma typ ciągu, ale po włączeniu opcji „isolatedModules” musi mieć składnię ciągu rozpoznawalną składniowo.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "Element „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy chodziło o „{2}”?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "Element „{0}” niejawnie ma zwracany typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dla elementu „{0}” niejawnie określono zwracany typ „any”, ponieważ nie zawiera on adnotacji zwracanego typu i jest przywoływany bezpośrednio lub pośrednio w jednym z jego zwracanych wyrażeń.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Dla elementu „{0}” niejawnie określono typ „any”, ponieważ nie zawiera on adnotacji typu i jest przywoływany bezpośrednio lub pośrednio w jego własnym inicjatorze.", + "_0_index_signatures_are_incompatible_2634": "Sygnatury indeksów „{0}” są niezgodne.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Typu indeksu „{0}” „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "Element „{0}” jest elementem podstawowym, ale element „{1}” jest obiektem otoki. Preferuje się użycie elementu „{0}”, jeśli jest to możliwe.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "„{0}” jest typem i nie można go zaimportować w plikach JavaScript. Użyj elementu „{1}” w adnotacji typu JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "Element „{0}” jest typem i należy go zaimportować przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}” to nieużywana zmiana nazwy elementu „{1}”. Czy zamierzano używać go jako adnotacji typu?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "Element „{0}” można przypisać do ograniczenia typu „{1}”, ale wystąpienie typu „{1}” można utworzyć z innym podtypem ograniczenia „{2}”.", + "_0_is_automatically_exported_here_18044": "W tym miejscu jest automatycznie eksportowany element „{0}”.", + "_0_is_declared_but_its_value_is_never_read_6133": "Element „{0}” jest zadeklarowany, ale jego wartość nie jest nigdy odczytywana.", + "_0_is_declared_but_never_used_6196": "Element „{0}” jest zadeklarowany, ale nie jest nigdy używany.", + "_0_is_declared_here_2728": "Element „{0}” jest zadeklarowany tutaj.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "Element „{0}” jest zdefiniowany jako właściwość w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako metoda dostępu.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "Element „{0}” jest zdefiniowany jako metoda dostępu w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako właściwość wystąpienia.", + "_0_is_deprecated_6385": "Element „{0}” jest przestarzały.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "„{0}” nie jest prawidłową metawłaściwością słowa kluczowego „{1}”. Czy miał to być element „{2}”?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "„{0}” jest niedozwolone jako nazwa parametru.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Element „{0}” nie jest dozwolony jako nazwa deklaracji zmiennej.", + "_0_is_of_type_unknown_18046": "Element „{0}” jest typu „nieznany”.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "Element „{0}” prawdopodobnie ma wartość „null”.", + "_0_is_possibly_null_or_undefined_18049": "Element „{0}” prawdopodobnie ma wartość „null” lub jest „niezdefiniowany”.", + "_0_is_possibly_undefined_18048": "Element „{0}” jest prawdopodobnie „niezdefiniowany”.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnym wyrażeniu podstawowym.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnej adnotacji typu.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "Element „{0}” został określony więcej niż raz, dlatego to użycie zostanie przesłonięte.", + "_0_list_cannot_be_empty_1097": "Lista „{0}” nie może być pusta.", + "_0_modifier_already_seen_1030": "Napotkano już modyfikator „{0}”.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modyfikator „{0}” może występować tylko w parametrze typu klasy, interfejsu lub aliasu typu", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modyfikator „{0}” może występować tylko w parametrze typu funkcji, metody lub klasy", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modyfikator „{0}” nie może występować w deklaracji konstruktora.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modyfikator „{0}” nie może być stosowany w przypadku elementu przestrzeni nazw lub modułu.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Modyfikator „{0}” nie może występować w parametrze.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Modyfikator „{0}” nie może być stosowany w przypadku składowej typu.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modyfikator „{0}” nie może występować w parametrze typu", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modyfikator „{0}” nie może występować w deklaracji „using”.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modyfikator „{0}” nie może występować w deklaracji „await using”.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modyfikator „{0}” nie może być stosowany w przypadku sygnatury indeksu.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modyfikator „{0}” nie może występować w elementach klasy tego rodzaju.", + "_0_modifier_cannot_be_used_here_1042": "Modyfikatora „{0}” nie można użyć w tym miejscu.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Modyfikatora „{0}” nie można użyć w otaczającym kontekście.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modyfikatora „{0}” nie można używać z modyfikatorem „{1}”.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modyfikatora „{0}” nie można używać z identyfikatorem prywatnym.", + "_0_modifier_must_precede_1_modifier_1029": "Modyfikator „{0}” musi występować przed modyfikatorem „{1}”.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po wyrażeniu „\\{0}” musi następować wyrażenie wartości właściwości standardu Unicode ujęte w nawiasy klamrowe.", + "_0_needs_an_explicit_type_annotation_2782": "Element „{0}” wymaga jawnej adnotacji typu.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako przestrzeń nazw.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "Element „{0}” odwołuje się jedynie do typu, ale jest używany w tym miejscu jako wartość.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "Element „{0}” odwołuje się do typu, ale jest używany tutaj jako wartość. Czy chodziło o użycie wyrażenia „{1} in {0}”?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element \"{0}\" odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na es2015 lub nowszą.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "„{0}” odnosi się do globalnego formatu UMD, ale bieżący plik jest modułem. Rozważ zamiast tego dodanie importu.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "Element „{0}” odwołuje się do wartości, ale jest używany tutaj jako typ. Czy chodziło o „typeof {0}”?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać zaimportowany przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać ponownie wyeksportowany przy użyciu ponownego eksportowania tylko typu, gdy włączono opcję „{1}”.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Element \"{0}\" powinien być ustawiony wewnątrz obiektu \"compilerOptions\" pliku json konfiguracji", + "_0_tag_already_specified_1223": "Tag „{0}” jest już określony.", + "_0_was_also_declared_here_6203": "Element „{0}” został również zadeklarowany w tym miejscu.", + "_0_was_exported_here_1377": "Element „{0}” został wyeksportowany tutaj.", + "_0_was_imported_here_1376": "Element „{0}” został zaimportowany tutaj.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modyfikator „abstract” może być stosowany jedynie w przypadku deklaracji klasy, metody lub właściwości.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Modyfikator „accessor” może występować tylko w deklaracji właściwości.", + "and_here_6204": "i tutaj.", + "and_npm_install_D_types_Slashnode_6290": "i npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Argumentów nie można odwoływać w inicjalizatorach właściwości ani w blokach inicjalizacji statycznej klasy.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto”: Traktuj pliki za pomocą importów, eksportów, import.meta, jsx (z jsx: react-jsx) lub formatu esm (z modułem: node16+) jako moduły.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia „await” wewnątrz bloku statycznego klasy.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Wyrażenia „await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Wyrażenia „await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Wyrażeń „await” nie można używać w inicjatorze parametru.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "Operator „await” nie ma wpływu na typ tego wyrażenia.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Deklaracje „await using” są niedozwolone w kontekstach otoczenia.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Deklaracje „await using” nie są dozwolone w klauzulach „case” lub „default”, chyba że znajdują się w bloku.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Instrukcje „await using” są dozwolone tylko na najwyższym poziomie pliku, gdy ten plik jest modułem, ale ten plik nie ma importów ani eksportów. Rozważ dodanie pustego wyrażenia „export {}”, aby uczynić ten plik modułem.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instrukcje „await using” są dozwolone tylko w ramach funkcji asynchronicznych i na najwyższych poziomach modułów.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instrukcji „await using” nie można używać wewnątrz bloku statycznego klasy.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Opcja „baseUrl” ma ustawioną wartość „{0}”. Ta wartość zostanie użyta do rozpoznania innej niż względna nazwy modułu „{1}”.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Po wyrażeniu „\\c” musi następować litera ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "Elementu „#!” można użyć tylko na początku pliku.", + "case_or_default_expected_1130": "Oczekiwano elementu „case” lub „default”.", + "catch_or_finally_expected_1472": "Oczekiwano instrukcji „catch” lub „finally”.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest wartość nieskończona.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest niedozwolona wartość „NaN”.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "inicjatory składowych wyliczenia const muszą być wyrażeniami stałymi.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Wyliczenia ze specyfikatorem „const” mogą być używane tylko w wyrażeniach dostępu do indeksu lub właściwości albo po prawej stronie deklaracji importu, przypisania eksportu lub typu zapytania.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Nie można użyć ciągu „constructor” jako nazwy właściwości parametru.", + "constructor_is_a_reserved_word_18012": "„#constructor” jest słowem zastrzeżonym.", + "default_Colon_6903": "wartość domyślna:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Nie można wywołać elementu „delete” dla identyfikatora w trybie z ograniczeniami.", + "export_Asterisk_does_not_re_export_a_default_1195": "Wyrażenie „export *” nie eksportuje ponownie eksportów domyślnych.", + "export_can_only_be_used_in_TypeScript_files_8003": "Składnia „export =” może być używana tylko w plikach TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Modyfikator „export” nie może być stosowany do modułów otoczenia ani rozszerzeń modułów, ponieważ są one zawsze widoczne.", + "extends_clause_already_seen_1172": "Napotkano już klauzulę „extends”.", + "extends_clause_must_precede_implements_clause_1173": "Klauzula „extends” musi poprzedzać klauzulę „implements”.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzula „extends” wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzula „extends” wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzula „extends” wyeksportowanego interfejsu „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "false_unless_checkJs_is_set_6932": "`false`, chyba że ustawiono `checkJs`", + "false_unless_composite_is_set_6906": "\"false\", chyba że ustawiono element \"composite\"", + "file_6025": "plik", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Pętle „for await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Pętle „for await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli „for await” nie można używać wewnątrz bloku statycznego klasy.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Metody dostępu „get” i „set” nie mogą deklarować parametrów „this”.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\" jeśli określono \"files\", w przeciwnym razie \"[\"**/*\"]\"", + "implements_clause_already_seen_1175": "Napotkano już klauzulę „implements”.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule „implements” mogą być używane tylko w plikach TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "Ciąg „import ... =” może być używany tylko w plikach TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklaracje „infer” są dozwolone tylko w klauzuli „extends” typu warunkowego.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po wyrażeniu „\\k” musi następować nazwa grupy przechwytywania ujęta w nawiasy ostre.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Element „let” nie może być używany jako nazwa w deklaracjach „let” ani „const”.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Wyrażenie „new”, którego element docelowy nie ma sygnatury konstrukcji, jest niejawnie typu „any”.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", plus wartość elementu \"outDir\", jeśli jest określona.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`nodenext`, jeśli `module` ma wartość `nodenext`; `node16`, jeśli `module` ma wartość `node16` lub `node18`; w przeciwnym razie `bundler`.", + "one_of_Colon_6900": "jeden z:", + "one_or_more_Colon_6901": "co najmniej jeden:", + "options_6024": "opcje", + "or_JSX_element_expected_1145": "Oczekiwano elementu „{” lub JSX.", + "or_expected_1144": "Oczekiwano znaku „{” lub „;”.", + "package_json_does_not_have_a_0_field_6100": "Plik „package.json” nie zawiera pola „{0}”.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "Plik „package.json” nie zawiera wpisu „typesVersions” odpowiadającego wersji „{0}”.", + "package_json_had_a_falsy_0_field_6220": "Plik „package.json” miał błędne pole „{0}”.", + "package_json_has_0_field_1_that_references_2_6101": "Plik „package.json” zawiera pole „{0}” „{1}” odwołujące się do elementu „{2}”.", + "package_json_has_a_peerDependencies_field_6281": "Plik „package.json” ma pole „peerDependencies”.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który nie jest prawidłowym zakresem semver.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który dopasowuje wersję kompilatora „{1}”, szukając wzorca odpowiadającego nazwie modułu „{2}”.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Plik „package.json” zawiera pole „typesVersions” z mapowaniami ścieżek specyficznymi dla wersji.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Zakres package.json „{0}” jawnie mapuje specyfikator „{1}” na wartość null.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Zakres package.json „{0}” ma nieprawidłowy typ elementu docelowego specyfikatora „{1}”", + "package_json_scope_0_has_no_imports_defined_6273": "Zakres package.json „{0}” nie ma zdefiniowanych importów.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Opcja „paths” została określona. Wyszukiwanie wzorca zgodnego z nazwą modułu „{0}”.", + "q_is_only_available_inside_character_class_1511": "Wyrażenie „\\q” jest dostępne tylko wewnątrz klasy znaków.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po wyrażeniu „\\q” muszą następować alternatywy ciągów ujęte w nawiasy klamrowe.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modyfikator „readonly” może występować jedynie w deklaracji właściwości lub sygnaturze indeksu.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modyfikator typu „readonly” jest dozwolony tylko w typach literału tablicy i krotki.", + "require_call_may_be_converted_to_an_import_80005": "Wywołanie „require” może zostać przekonwertowane na wywołanie import.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "Element „resolution-mode“ można ustawić wyłącznie dla importów tylko typów.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "Element „resolution-mode“ jest jedynym prawidłowym kluczem dla twierdzenia importu typu.", + "resolution_mode_should_be_either_require_or_import_1453": "Element „resolution-mode” powinien mieć wartość „require” lub „import”.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Opcja „rootDirs” została ustawiona. Zostanie ona użyta do rozpoznania względnej nazwy modułu „{0}”.", + "super_can_only_be_referenced_in_a_derived_class_2335": "Element „super” może być przywoływany tylko w klasie pochodnej.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Element „super” może być przywoływany jedynie w składowych klas pochodnych lub wyrażeń literałów obiektów.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Nie można przywołać elementu „super” w obliczonej nazwie właściwości.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Nie można przywoływać elementu „super” w argumentach konstruktora.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Element „super” jest dozwolony w składowych wyrażeń literałów obiektów tylko wtedy, gdy opcja „target” ma wartość „ES2015” lub wyższą.", + "super_may_not_use_type_arguments_2754": "Element „super” nie może używać argumentów typu.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Element „super” należy wywołać przed uzyskaniem dostępu do właściwości elementu „super” w konstruktorze klasy pochodnej.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Element „super” musi być wywoływany przed uzyskaniem dostępu do elementu „this” w konstruktorze klasy pochodnej.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Po elemencie „super” musi występować lista argumentów lub metoda dostępu do składowej.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Dostęp do właściwości „super” jest dozwolony tylko w konstruktorze, funkcji składowej lub metodzie dostępu składowej klasy pochodnej.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Nie można przywołać elementu „this” w obliczonej nazwie właściwości.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Nie można przywołać elementu „this” w treści modułu ani przestrzeni nazw.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Nie można przywołać elementu „this” w inicjatorze właściwości statycznej.", + "this_cannot_be_referenced_in_current_location_2332": "Nie można przywołać elementu „this” w bieżącej lokalizacji.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Element „this” niejawnie przyjmuje typ „any”, ponieważ nie ma adnotacji typu.", + "true_for_ES2022_and_above_including_ESNext_6930": "wartość \"true\" dla ES2022 i powyżej, uwzględniając ESNext.", + "true_if_composite_false_otherwise_6909": "\"true\", jeśli \"composite\", w przeciwnym razie \"false\"", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true”, gdy element „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”; w przeciwnym razie „false”.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: kompilator TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "Plik tsconfig.json jest obecny, ale nie zostanie załadowany, jeśli w wierszu polecenia podano pliki. Aby pominąć ten błąd, użyj opcji „--ignoreConfig”.", + "type_Colon_6902": "typ:", + "unique_symbol_types_are_not_allowed_here_1335": "Typy „unique symbol” nie są dozwolone w tym miejscu.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy „unique symbol” są dozwolone tylko w zmiennych w instrukcji zmiennej.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typów „unique symbol” nie można używać w deklaracji zmiennej z nazwą powiązania.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Dyrektywy „use strict” nie można używać z listą parametrów, które nie są parametrami prostymi.", + "use_strict_directive_used_here_1349": "Dyrektywa „use strict” użyta w tym miejscu.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Deklaracje „using” nie są dozwolone w kontekstach otoczenia.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Deklaracje „using” nie są dozwolone w klauzulach „case” lub „default”, chyba że znajdują się w bloku.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Instrukcje „with” są niedozwolone w bloku funkcji asynchronicznej.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Instrukcje „with” są niedozwolone w trybie z ograniczeniami.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Wyrażenie „yield” niejawnie zwraca wynik w postaci typu „any”, ponieważ w zawierającym generatorze brakuje adnotacji zwracanego typu.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Wyrażeń „yield” nie można używać w inicjatorze parametru." +} diff --git a/tsc/internal/diagnostics/loc/pt-BR.generated.json b/tsc/internal/diagnostics/loc/pt-BR.generated.json index bf3b872225d54..cb9cf8c7236f9 100644 --- a/tsc/internal/diagnostics/loc/pt-BR.generated.json +++ b/tsc/internal/diagnostics/loc/pt-BR.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "TODAS AS OPÇÕES DO COMPILADOR", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Um modificador '{0}' não pode ser usado com uma declaração de importação.", - "A_0_parameter_must_be_the_first_parameter_2680": "Um parâmetro '{0}' deve ser o primeiro parâmetro.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Uma marca JSDoc '@template' pode não seguir uma marca '@typedef', '@callback' ou '@overload'", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Um comentário de JSDoc '@typedef' não pode conter várias marcas '@type'.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Um literal 'bigint' não pode ser usado como um nome de propriedade.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Um literal de bigint não pode usar notação exponencial.", - "A_bigint_literal_must_be_an_integer_1353": "Um literal de bigint deve ser um inteiro.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Um parâmetro de padrão de associação não pode ser opcional em uma assinatura de implementação.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Uma instrução 'break' só pode ser usada em uma iteração de circunscrição ou instrução switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Uma instrução 'break' só pode saltar para um rótulo de uma instrução de circunscrição.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Uma classe de caracteres não deve conter um pontuador duplo reservado. Você quis escapar com uma barra invertida?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "O intervalo de uma classe de caracteres não deve ser limitado por outra classe de caracteres.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Uma classe pode implementar apenas um identificador/nome qualificado com argumentos de tipo opcionais.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Uma classe pode implementar somente um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Uma classe não pode estender um tipo primitivo como '{0}'. As classes só podem estender valores construtíveis.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Uma classe não pode implementar um tipo primitivo como '{0}'. Ela só pode implementar outros tipos de objetos nomeados.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Uma declaração de classe sem o modificador 'default' deve ter um nome.", - "A_class_member_cannot_have_the_0_keyword_1248": "Um membro de classe não pode ter a palavra-chave '{0}'.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Uma expressão de vírgula não é permitida em um nome de propriedade calculado.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Um nome de propriedade calculado não pode fazer referência a um parâmetro de tipo no seu tipo recipiente.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Um nome de propriedade computado em uma declaração de propriedade de classe precisa ter um tipo literal simples ou um tipo 'símbolo exclusivo'.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Um nome de propriedade computado em uma sobrecarga do método deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Um nome de propriedade computado em um tipo literal deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Um nome de propriedade computado em um contexto de ambiente deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Um nome de propriedade computado em uma interface deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Um nome de propriedade calculado deve ser do tipo 'string', 'number', 'symbol' ou 'any'.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Uma declaração ''const'' só pode ser aplicada a referências a membros de enumeração ou literais de cadeia de caracteres, número, booliano, matriz ou objeto.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Um membro const enum só pode ser acessado usando um literal de cadeia de caracteres.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Um inicializador 'const' em um contexto de ambiente deve ser uma cadeia de caracteres ou um literal numérico ou uma referência de enumeração literal.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Um construtor não pode conter uma chamada 'super' quando sua classe estende 'null'.", - "A_constructor_cannot_have_a_this_parameter_2681": "Um construtor não pode ter um parâmetro 'this'.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Uma instrução 'continue' só pode ser usada em uma instrução de iteração de circunscrição.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Uma instrução 'continue' só pode saltar para um rótulo de uma instrução de iteração de circunscrição.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Um arquivo de declaração não pode ser importado sem 'import type'. Você quis importar um arquivo de implementação '{0}'?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Um modificador 'declare' não pode ser usado em um contexto de ambiente.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Um decorador pode decorar somente uma implementação de método, não uma sobrecarga.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Uma cláusula 'default' não pode aparecer mais de uma vez em uma instrução 'switch'.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Uma exportação padrão só pode ser usada em um módulo do estilo ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Uma exportação padrão deve estar no nível superior de uma declaração de arquivo ou módulo.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Uma declaração de atribuição definitiva '!' não é permitida neste contexto.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Uma declaração de desestruturação deve ter um inicializador.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Uma chamada de importação dinâmica no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", - "A_file_cannot_have_a_reference_to_itself_1006": "Um arquivo não pode fazer referência a si mesmo.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Uma função que retorna 'never' não pode ter um ponto de extremidade acessível.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Uma função chamada com a palavra-chave 'new' não pode ter um tipo 'this' que seja 'void'.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Uma função cujo tipo declarado não seja 'undefined', 'void' nem 'any' deve retornar um valor.", - "A_generator_cannot_have_a_void_type_annotation_2505": "O gerador não pode ter uma anotação de tipo 'void'.", - "A_get_accessor_cannot_have_parameters_1054": "Um acessador 'get' não pode ter parâmetros.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Um acessador get precisa ser pelo menos tão acessível quanto o setter", - "A_get_accessor_must_return_a_value_2378": "Um acessador 'get' deve retornar um valor.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Um elemento de tupla rotulado é declarado como opcional com um ponto de interrogação depois do nome e antes de dois-pontos, em vez de depois do tipo.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Um elemento de tupla rotulado foi declarado como Rest com um '...' antes do nome, em vez de antes do tipo.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Um tipo mapeado não pode declarar propriedades ou métodos.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "O inicializador de um membro em uma declaração de enumeração não pode referenciar membros declarados depois dele, inclusive membros definidos em outras enumerações.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Uma classe mixin deve ter um construtor um único parâmetro rest do tipo 'any[]'.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Uma classe mixin que se estende de uma variável de tipo contendo uma assinatura de constructo abstrata também precisa ser declarada como 'abstract'.", - "A_module_cannot_have_multiple_default_exports_2528": "Um módulo não pode ter várias exportações padrão.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Uma declaração de namespace não pode estar em um arquivo diferente de uma classe ou função com a qual ela é mesclada.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Uma declaração de namespace não pode estar localizada antes de uma classe ou função com a qual ela é mesclada.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Uma declaração de namespace só é permitida no nível superior de um namespace ou módulo.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Uma declaração \"namespace\" não deve ser declarada usando a palavra-chave \"module\". Use a palavra-chave \"namespace\".", - "A_non_dry_build_would_build_project_0_6357": "Um build não -dry criaria o projeto '{0}'", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Um build não -dry excluiria os seguintes arquivos: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Um build não -dry atualizaria carimbos de data/hora para a saída do projeto '{0}'", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Um inicializador de parâmetro só é permitido em uma implementação de função ou de construtor.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Uma propriedade de parâmetro não pode ser declarada usando um parâmetro rest.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Uma propriedade de parâmetro somente é permitida em uma implementação de construtor.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Uma propriedade de parâmetro pode não ser declarada usando um padrão de associação.", - "A_promise_must_have_a_then_method_1059": "Uma promessa deve ter um método 'then'.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Uma propriedade de uma classe cujo tipo é um tipo de 'unique symbol' deve ser 'static' e 'readonly'.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Uma propriedade de uma interface ou tipo literal cujo tipo é um tipo de 'unique symbol' deve ser 'readonly'.", - "A_required_element_cannot_follow_an_optional_element_1257": "Um elemento obrigatório não pode seguir um elemento opcional.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Um parâmetro obrigatório não pode seguir um parâmetro opcional.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Um elemento rest não pode conter um padrão de associação.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Um elemento REST não pode seguir outro elemento REST.", - "A_rest_element_cannot_have_a_property_name_2566": "Um elemento rest não pode ter um nome de propriedade.", - "A_rest_element_cannot_have_an_initializer_1186": "Um elemento rest não pode ter um inicializador.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Um elemento rest deve ser o último em um padrão de desestruturação.", - "A_rest_element_type_must_be_an_array_type_2574": "Um elemento rest deve ser um tipo de matriz.", - "A_rest_parameter_cannot_be_optional_1047": "Um parâmetro rest não pode ser opcional.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Um parâmetro rest não pode ter um inicializador.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Um parâmetro rest deve ser o último em uma lista de parâmetros.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Um parâmetro rest deve ser de um tipo de matriz.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Um padrão de associação ou o parâmetro rest não pode ter uma vírgula à direita.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Uma instrução 'return' só pode ser usada dentro de um corpo de função.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Não é possível usar uma instrução “return” dentro de um bloco estático de classe.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Uma série de entradas que o remapeamento importa para pesquisar locais relativos a 'baseUrl'.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Um acessador 'set' não pode ter uma anotação de tipo de retorno.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Um acessador 'set' não pode ter um parâmetro opcional.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Um acessador 'set' não pode ter um parâmetro rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "Um acessador 'set' deve ter exatamente um parâmetro.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Um parâmetro de acessador 'set' não pode ter um inicializador.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Um argumento de espalhamento deve ter um tipo de tupla ou ser passado para um parâmetro Rest.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Uma chamada 'super' deve ser uma instrução de nível raiz dentro de um construtor de uma classe derivada que contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Uma chamada 'super' deve ser a primeira instrução no construtor a se referir a 'super' ou 'this' quando uma classe derivada contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Uma proteção de tipo baseado em 'this não é compatível com uma proteção de tipo baseado em parâmetro.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Um tipo 'this' está disponível somente em um membro não estático de uma classe ou interface.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Um modificador 'export' de nível superior não pode ser usado em declarações de valor em um módulo CommonJS quando 'verbatimModuleSyntax' estiver habilitado.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Um arquivo 'tsconfig.json' já está definido em: '{0}'.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Um membro de tupla não pode ser opcional e rest.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Um tipo de tupla não pode ser indexado com um valor negativo.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Uma expressão de asserção de tipo não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Uma propriedade literal de tipo não pode ter um inicializador.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Uma importação somente de tipo pode especificar uma importação padrão ou associações nomeadas, mas não ambos.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "O predicado de tipo não pode fazer referência a um parâmetro rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "O predicado de tipo não pode fazer referência ao elemento '{0}' em um padrão de associação.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "O predicado de tipo só é permitido na posição de tipo de retorno para funções e métodos.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "O tipo de um predicado de tipo deve ser atribuível para o tipo de seu parâmetro.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Um tipo referenciado em uma assinatura decorada deve ser importado com 'tipo de importação' ou uma importação de namespace quando 'isolatedModules' e 'emitDecoratorMetadata' estão habilitados.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Uma variável cujo tipo é um tipo de 'unique symbol' deve ser 'const'.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "A expressão 'yield' só é permitida em um corpo gerador.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "O método abstrato '{0}' na classe '{1}' não pode ser acessado por meio da expressão super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Os métodos abstratos só podem aparecer dentro de uma classe abstrata.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "As propriedades abstratas só podem aparecer em uma classe abstrata.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "A propriedade abstrata '{0}' na classe '{1}' não pode ser acessada no construtor.", - "Accessibility_modifier_already_seen_1028": "O modificador de acessibilidade já foi visto.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Os acessadores somente estão disponíveis no direcionamento para ECMAScript 5 e superior.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Acessadores devem ser abstratos ou não abstratos.", - "Add_0_to_unresolved_variable_90008": "Adicionar '{0}.' à variável não resolvida", - "Add_a_return_statement_95111": "Adicionar uma instrução return", - "Add_a_return_type_to_the_function_declaration_9031": "Adicione um tipo de retorno à declaração da função.", - "Add_a_return_type_to_the_function_expression_9030": "Adicionar um tipo de retorno à expressão da função.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Adicione um tipo de retorno à declaração do acessório Get.", - "Add_a_return_type_to_the_method_9034": "Adicione um tipo de retorno ao método", - "Add_a_type_annotation_to_the_parameter_0_9028": "Adicione uma anotação de tipo ao parâmetro {0}.", - "Add_a_type_annotation_to_the_property_0_9029": "Adicione uma anotação de tipo à propriedade {0}.", - "Add_a_type_annotation_to_the_variable_0_9027": "Adicione uma anotação de tipo à variável {0}.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Adicionar um tipo ao parâmetro da declaração do acessório set.", - "Add_all_missing_async_modifiers_95041": "Adicionar todos os modificadores 'async' ausentes", - "Add_all_missing_attributes_95168": "Adicionar todos os atributos ausentes", - "Add_all_missing_call_parentheses_95068": "Adicionar todos os parênteses de chamada ausentes", - "Add_all_missing_function_declarations_95157": "Adicionar todas as declarações de função ausentes", - "Add_all_missing_imports_95064": "Adicionar todas as importações ausentes", - "Add_all_missing_members_95022": "Adicionar todos os membros ausentes", - "Add_all_missing_override_modifiers_95162": "Adicionar todos os modificadores 'override' ausentes", - "Add_all_missing_parameters_95190": "Adicionar todos os parâmetros ausentes", - "Add_all_missing_properties_95166": "Adicionar todas as propriedades ausentes", - "Add_all_missing_return_statement_95114": "Adicionar todas as instruções return ausentes", - "Add_all_missing_super_calls_95039": "Adicionar todas as chamadas super ausentes", - "Add_all_missing_type_annotations_90067": "Adicione todas as anotações de tipo ausentes", - "Add_all_optional_parameters_95193": "Adicione todos os parâmetros opcionais", - "Add_annotation_of_type_0_90062": "Adicionar anotação do tipo '{0}'", - "Add_async_modifier_to_containing_function_90029": "Adicione o modificador assíncrono que contém a função", - "Add_await_95083": "Adicionar 'await'", - "Add_await_to_initializer_for_0_95084": "Adicionar 'await' ao inicializador para '{0}'", - "Add_await_to_initializers_95089": "Adicionar 'await' aos inicializadores", - "Add_braces_to_arrow_function_95059": "Adicionar chaves para a função de seta", - "Add_const_to_all_unresolved_variables_95082": "Adicionar 'const' a todas as variáveis não resolvidas", - "Add_const_to_unresolved_variable_95081": "Adicionar 'const' à variável não resolvida", - "Add_definite_assignment_assertion_to_property_0_95020": "Adicionar a asserção de atribuição definitiva à propriedade '{0}'", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Adicionar declarações de atribuição definidas a todas as propriedades não inicializadas", - "Add_export_to_make_this_file_into_a_module_95097": "Adicionar 'export {}' para transformar este arquivo em um módulo", - "Add_extends_constraint_2211": "Adicione a restrição `extends`.", - "Add_extends_constraint_to_all_type_parameters_2212": "Adicionar a restrição `extends` a todos os parâmetros de tipo", - "Add_import_from_0_90057": "Adicionar importação de \"{0}\"", - "Add_index_signature_for_property_0_90017": "Adicionar assinatura de índice para a propriedade '{0}'", - "Add_initializer_to_property_0_95019": "Adicionar inicializador à propriedade '{0}'", - "Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas", - "Add_missing_attributes_95167": "Adicionar atributos ausentes", - "Add_missing_call_parentheses_95067": "Adicionar os parênteses de chamada ausentes", - "Add_missing_comma_for_object_member_completion_0_95187": "Adicionar vírgula ausente para conclusão de membro de objeto '{0}'.", - "Add_missing_enum_member_0_95063": "Adicionar membro de enumeração ausente '{0}'", - "Add_missing_function_declaration_0_95156": "Adicionar a declaração de função ausente '{0}'", - "Add_missing_new_operator_to_all_calls_95072": "Adicionar operador 'new' ausente a todas as chamadas", - "Add_missing_new_operator_to_call_95071": "Adicionar operador 'new' ausente à chamada", - "Add_missing_parameter_to_0_95188": "Adicionar parâmetro ausente a '{0}'", - "Add_missing_parameters_to_0_95189": "Adicionar parâmetros ausentes a '{0}'", - "Add_missing_properties_95165": "Adicionar propriedades ausentes", - "Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente", - "Add_missing_typeof_95052": "Adicionar 'typeof' ausente", - "Add_names_to_all_parameters_without_names_95073": "Adicionar nomes a todos os parâmetros sem nomes", - "Add_optional_parameter_to_0_95191": "Adicionar parâmetro opcional a '{0}'", - "Add_optional_parameters_to_0_95192": "Adicionar parâmetros opcionais ao '{0}'", - "Add_or_remove_braces_in_an_arrow_function_95058": "Adicionar ou remover chaves em uma função de seta", - "Add_override_modifier_95160": "Adicionar modificador \"override\"", - "Add_parameter_name_90034": "Adicionar nome de parâmetro", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro", - "Add_resolution_mode_import_attribute_95196": "Adicionar o atributo de importação 'resolution-mode'", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Adicionar o atributo de importação 'resolution-mode' a todas as importações somente de tipo que precisem dele", - "Add_return_type_0_90063": "Adicionar tipo de retorno '{0}'", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Adicione satisfies e uma asserção de tipo a esta expressão (satisfies T as T) para tornar o tipo explícito.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Adicionar satisfies e uma asserção de tipo embutido com '{0}'", - "Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados", - "Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Adicione 'indefinido' a um tipo quando acessado usando um índice.", - "Add_undefined_to_optional_property_type_95169": "Adicionar 'undefined' ao tipo de propriedade opcional", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Adicionar tipo indefinido a todas as propriedades não inicializadas", - "Add_undefined_type_to_property_0_95018": "Adicionar tipo 'indefinido' à propriedade '{0}'", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Adicionar conversão 'unknown' para tipos sem sobreposição", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Adicionar 'unknown' a todas as conversões de tipos sem sobreposição", - "Add_void_to_Promise_resolved_without_a_value_95143": "Adicionar 'void' ao Promise resolvido sem um valor", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Adicionar 'void' a todos os Promises resolvidos sem um valor", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Adicionar um arquivo tsconfig.json ajudará a organizar projetos que contêm arquivos TypeScript e JavaScript. Saiba mais em https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Todas as declarações de '{0}' devem ter restrições idênticas.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas as declarações de '{0}' devem ter modificadores idênticos.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas as declarações de '{0}' devem ter parâmetros de tipo idênticos.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas as declarações de um método abstrato devem ser consecutivas.", - "All_destructured_elements_are_unused_6198": "Todos os elementos desestruturados são inutilizados.", - "All_imports_in_import_declaration_are_unused_6192": "Nenhuma das importações na declaração de importação está sendo utilizada.", - "All_type_parameters_are_unused_6205": "Todos os parâmetros de tipo são inutilizados.", - "All_variables_are_unused_6199": "Nenhuma das variáveis está sendo utilizada.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Permitir que arquivos JavaScript façam parte do seu programa. Use a opção \"checkJs\" para obter erros desses arquivos.", - "Allow_accessing_UMD_globals_from_modules_6602": "Permitir o acesso a UMD globais de módulos.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permitir 'importar x de y' quando um módulo não tiver uma exportação padrão.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permitir a importação de funções auxiliares do tslib uma vez por projeto, em vez de incluí-las por arquivo.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que as importações incluam extensões de arquivo TypeScript. Requer a definição de '--moduleResolution bundler' e '--noEmit' ou '--emitDeclarationOnly'.", - "Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permitir que várias pastas sejam tratadas como uma ao resolver módulos.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "O nome do arquivo '{0}' já incluído difere do nome de arquivo '{1}' somente em maiúsculas e minúsculas.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "A declaração de módulo de ambiente não pode especificar o nome do módulo relativo.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Módulos de ambiente não podem ser aninhados em outros módulos ou namespaces.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Um módulo AMD não pode ter várias atribuições de nome.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Um acessador abstrato não pode ter uma implementação.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Não é possível usar um modificador de acessibilidade com um identificador privado.", - "An_accessor_cannot_have_type_parameters_1094": "Um acessador não pode ter parâmetros de tipo.", - "An_accessor_property_cannot_be_declared_optional_1276": "Uma propriedade 'acessador' não pode ser declarada opcional.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Uma declaração de módulo de ambiente só é permitida no nível superior em um arquivo.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Não foi fornecido um argumento para '{0}'.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Não foi fornecido um argumento correspondente a esse padrão de associação.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Um operando aritmético deve ser do tipo 'any', 'number', 'bignit' ou um tipo enumerado.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Uma função de seta não pode ter um parâmetro 'this'.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Uma função ou método assíncrono no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Uma função ou método assíncrono deve retornar um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", - "An_async_iterator_must_have_a_next_method_2519": "O iterador assíncrono deve ter um método 'next()'.", - "An_element_access_expression_should_take_an_argument_1011": "Uma expressão de acesso do elemento deveria receber um argumento.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Um membro de enumeração não pode ser nomeado com um identificador privado.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Um membro de enumeração não pode ter um nome numérico.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Um nome de membro de enumeração deve ser seguido por ',', '=' ou '}'.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Uma versão expandida dessas informações, mostrando todas as opções do compilador possíveis", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Uma atribuição de exportação não pode ser usada em um módulo com outros elementos exportados.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Uma atribuição de exportação não pode ser usada em um namespace.", - "An_export_assignment_cannot_have_modifiers_1120": "Uma atribuição de exportação não pode ter modificadores.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Uma atribuição de exportação deve estar no nível superior de uma declaração de arquivo ou módulo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Uma declaração de exportação só pode ser usada no nível superior de um módulo.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Uma declaração de exportação só pode ser usada no nível superior de um namespace ou módulo.", - "An_export_declaration_cannot_have_modifiers_1193": "Uma declaração de exportação não pode ter modificadores.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Uma declaração 'export =' deve fazer referência a um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Uma declaração 'export =' deve fazer referência a um valor quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' refere-se apenas a um tipo.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' se refere somente a um tipo.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Uma expressão do tipo 'nula' não pode ser testada quanto à veracidade.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Um valor de escape Unicode estendido deve estar entre 0x0 e 0x10FFFF, inclusive.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Um identificador ou palavra-chave não pode imediatamente seguir um literal numérico.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uma implementação não pode ser declarada em contextos de ambiente.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Um alias de importação não pode fazer referência a uma declaração que foi exportada usando 'tipo de exportação'.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Um alias de importação não pode fazer referência a uma declaração que foi importada usando 'tipo de importação'.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Um alias de importação não pode resolver uma declaração de tipo ou somente tipo quando \"verbatimModuleSyntax\" estiver habilitado.", - "An_import_alias_cannot_use_import_type_1392": "Um alias de importação não pode usar um 'tipo de importação'", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Uma declaração de importação só pode ser usada no nível superior de um módulo.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Uma declaração de importação só pode ser usada no nível superior de um namespace ou módulo.", - "An_import_declaration_cannot_have_modifiers_1191": "Uma declaração de importação não pode ter modificadores.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Um caminho de importação só pode terminar com uma extensão '{0}' quando 'allowImportingTsExtensions' estiver habilitado.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Uma assinatura de índice não pode ter um parâmetro rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Uma assinatura de índice não pode ter uma vírgula à direita.", - "An_index_signature_must_have_a_type_annotation_1021": "Uma assinatura de índice deve ter uma anotação de tipo.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Uma assinatura de índice deve ter exatamente um parâmetro.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Um parâmetro de assinatura de índice não pode ter um ponto de interrogação.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Um parâmetro de assinatura de índice não pode ter um modificador de acessibilidade.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Um parâmetro de assinatura de índice não pode ter um inicializador.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Um parâmetro de assinatura de índice deve ter uma anotação de tipo.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Um tipo de parâmetro de assinatura de índice não pode ser um tipo literal ou genérico. Considere usar um tipo de objeto mapeado.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Um tipo de parâmetro de assinatura de índice deve ser 'cadeia de caracteres', 'número', 'símbolo' ou um tipo literal de modelo.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Uma expressão de instanciação não pode ser seguida por um acesso de propriedade.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Uma interface só pode estender um identificador/nome qualificado com argumentos de tipo opcionais.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Uma interface não pode estender um tipo primitivo como '{0}'. Ela só pode estender outros tipos de objetos nomeados.", - "An_interface_property_cannot_have_an_initializer_1246": "Uma propriedade de interface não pode ter um inicializador.", - "An_iterator_must_have_a_next_method_2489": "Um iterador deve ter um método 'next()'.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Um pragma @jsxFrag é necessário ao usar um pragma @jsx com fragmentos JSX.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Um literal de objeto não pode ter vários acessadores get/set com o mesmo nome.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Um literal de objeto não pode ter várias propriedades com o mesmo nome.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Um literal de objeto não pode ter propriedade e acessador com o mesmo nome.", - "An_object_member_cannot_be_declared_optional_1162": "Um membro de objeto não pode ser declarado como opcional.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "O método '[Symbol.hasInstance]' de um objeto deve retornar um valor booliano para que ele seja usado no lado direito de uma expressão 'instanceof'.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Uma cadeia opcional não pode conter identificadores privados.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Um elemento opcional não pode seguir um elemento REST.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Um valor externo de 'this' é sombreado por este contêiner.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "A assinatura de sobrecarga não pode ser declarada como geradora.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Uma expressão unária com o operador '{0}' não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", - "Annotate_everything_with_types_from_JSDoc_95043": "Anotar tudo com tipos do JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propriedades da função expando em um namespace", - "Annotate_with_type_from_JSDoc_95009": "Anotar com o tipo do JSDoc", - "Another_export_default_is_here_2753": "Outro padrão de exportação está aqui.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualquer propriedade Unicode que possa corresponder a mais de um único caractere só estará disponível quando o sinalizador Conjuntos Unicode (v) estiver definido.", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualquer coisa que possa corresponder a mais de um único caractere é inválida dentro de uma classe de caractere negada.", - "Are_you_missing_a_semicolon_2734": "Você está esquecendo de um ponto e vírgula?", - "Argument_expression_expected_1135": "Expressão de argumento esperada.", - "Argument_for_0_option_must_be_Colon_1_6046": "O argumento para a opção '{0}' deve ser: {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "O argumento da importação dinâmica não pode ser um elemento de espalhamento.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "O argumento do tipo '{0}' não é atribuível ao parâmetro do tipo '{1}'.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "O argumento do tipo '{0}' não pode ser atribuído ao parâmetro do tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Não foram fornecidos argumentos para o parâmetro REST '{0}'.", - "Array_element_destructuring_pattern_expected_1181": "Padrão de desestruturação de elemento da matriz esperado.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Matrizes com elementos espalhados não podem ser inferidas com --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "As declarações exigem que todos os nomes no destino de chamada sejam declarados com uma anotação de tipo explícito.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "As declarações exigem que o destino da chamada seja um identificador ou um nome qualificado.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Não há suporte para a atribuição de propriedades a funções sem declará-las com --isolatedDeclarations. Adicione uma declaração explícita para as propriedades atribuídas a essa função.", - "Asterisk_Slash_expected_1010": "'*/' esperado.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Pelo menos um acessor deve ter uma anotação de tipo explícita com `--isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Acréscimos de escopo global somente podem ser diretamente aninhados em módulos externos ou declarações de módulo de ambiente.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Acréscimos de escopo global devem ter o modificador 'declare' a menos que apareçam em contexto já ambiente.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "A descoberta automática para digitações está habilitada no projeto '{0}'. Executando o passe de resolução extra para o módulo '{1}' usando o local do cache '{2}'.", - "BUILD_OPTIONS_6919": "OPÇÕES DE BUILD", - "Backwards_Compatibility_6253": "Compatibilidade com Versões Anteriores", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "As expressões de classe base não podem referenciar parâmetros de tipo de classe.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "O tipo de retorno do construtor base '{0}' não é um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Todos os construtores base devem ter o mesmo tipo de retorno.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Diretório base para resolver nomes de módulo não absolutos.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Os literais de BigInt não estão disponíveis ao direcionar para menos de ES2020.", - "Binary_digit_expected_1177": "Dígito binário esperado.", - "Binding_element_0_implicitly_has_an_1_type_7031": "O elemento de associação '{0}' tem implicitamente um tipo '{1}'.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Variável de escopo de bloco '{0}' usada antes da sua declaração.", - "Build_a_composite_project_in_the_working_directory_6925": "Crie um projeto composto no diretório de trabalho.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilar um ou mais projetos e suas dependências, se estiverem desatualizados", - "Build_option_0_requires_a_value_of_type_1_5073": "A opção de build '{0}' requer um valor do tipo {1}.", - "Building_project_0_6358": "Compilando o projeto '{0}'...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Iteradores internos são instanciados com um tipo 'TReturn' de 'undefined' em vez de 'any'.", - "COMMAND_LINE_FLAGS_6921": "SINALIZADORES DE LINHA DE COMANDO", - "COMMON_COMMANDS_6916": "COMANDOS COMUNS", - "COMMON_COMPILER_OPTIONS_6920": "OPÇÕES COMUNS DO COMPILADOR", - "Call_decorator_expression_90028": "Chamar expressão do decorador", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Os tipos de retorno da assinatura de chamada '{0}' e '{1}' são incompatíveis.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Assinatura de chamada, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Assinaturas de chamada sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", - "Call_target_does_not_contain_any_signatures_2346": "O destino da chamada não contém nenhuma assinatura.", - "Can_only_convert_logical_AND_access_chains_95142": "Só é possível converter cadeias de acesso E lógicas", - "Can_only_convert_named_export_95164": "Só pode converter exportação nomeada", - "Can_only_convert_property_with_modifier_95137": "Só é possível converter a propriedade com o modificador", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Só é possível converter concatenações de cadeia de caracteres e literais de cadeia de caracteres", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Não foi possível acessar '{0}.{1}' porque '{0}' é um tipo, mas não um namespace. Você quis dizer recuperar o tipo da propriedade '{1}' em '{0}' com '{0}[\"{1}\"]'?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Não é possível acessar '{0}' de outro arquivo sem qualificação quando '{1}' estiver habilitado. Use '{2}' em vez disso.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Não é possível acessar enumerações const de ambiente quando '{0}' estiver habilitado.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Não é possível atribuir um tipo de construtor '{0}' para um tipo de construtor '{1}'.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Não é possível atribuir um tipo de construtor abstrato a um tipo de construtor não abstrato.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Não é possível fazer a atribuição a '{0}' porque ela é uma classe.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Não é possível atribuir a '{0}' porque é uma constante.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Não é possível fazer a atribuição a '{0}' porque ela é uma função.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Não é possível fazer a atribuição a '{0}' porque ele é um namespace.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Não é possível atribuir a '{0}' porque é uma propriedade de somente leitura.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Não é possível fazer a atribuição a '{0}' porque ela é uma enumeração.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Não é possível fazer a atribuição a '{0}' porque ela é uma importação.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Não é possível atribuir a '{0}' porque não é uma variável.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Não é possível fazer a atribuição ao método privado '{0}'. Os métodos privados não são graváveis.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Não é possível aumentar o módulo '{0}' porque ele resolve para uma entidade não módulo.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Não é possível aumentar o módulo '{0}' com as exportações do valor, porque ele resolve para uma entidade sem módulo.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Não é possível compilar módulos usando a opção '{0}', a menos que o sinalizador '--module' seja 'amd' ou 'system'.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Não é possível criar uma instância de uma classe abstrata.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Não é possível delegar iteração para valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o gerador que a contém sempre enviará '{0}'.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Não é possível exportar '{0}'. Somente declarações locais podem ser exportadas de um módulo.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Não é possível estender uma classe '{0}'. O construtor de classe está marcado como privado.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Não é possível estender uma interface '{0}'. Você quis dizer 'implements'?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Não é possível localizar um arquivo tsconfig.json no diretório atual: {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Não é possível encontrar um arquivo tsconfig.json no diretório especificado: '{0}'.", - "Cannot_find_global_type_0_2318": "Não é possível encontrar o tipo global '{0}'.", - "Cannot_find_global_value_0_2468": "Não é possível encontrar o valor global '{0}'.", - "Cannot_find_lib_definition_for_0_2726": "Não é possível encontrar a definição de biblioteca para '{0}'.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Não é possível encontrar a definição de biblioteca para '{0}'. Você quis dizer '{1}'?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Não é possível localizar o módulo '{0}'. Considere usar '--resolveJsonModule' para importar o módulo com a extensão '.json'.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Não é possível localizar o módulo '{0}'. Você quis definir a opção 'moduleResolution' como 'nodenext' ou adicionar aliases à opção 'paths'?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Não é possível localizar o módulo '{0}' ou suas declarações de tipo correspondentes.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Não é possível encontrar as declarações de módulo ou tipo para a importação com efeito colateral de ''{0}''.", - "Cannot_find_name_0_2304": "Não é possível encontrar o nome '{0}'.", - "Cannot_find_name_0_Did_you_mean_1_2552": "Não é possível localizar o nome '{0}'. Você quis dizer '{1}'?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Não foi possível localizar o nome '{0}'. Você quis dizer o membro de instância 'this.{0}'?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Não foi possível encontrar o nome '{0}'. Você quis dizer o membro estático '{1}.{0}'?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Não foi possível encontrar o nome '{0}'. Você quis escrever isto em uma função assíncrona?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{1}' ou posterior.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para incluir 'dom'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun'.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun' e adicione 'bun' ao campo de tipos em seu tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e depois adicione 'jest' ou 'mocha' ao campo tipos em seu tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Não é possível localizar o nome '{0}'. Você precisa instalar as definições de tipo para jQuery? Tente `npm i --save-dev @types/jquery` e, em seguida, adicione 'jquery' para o campo tipos em seu tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o nó? Tente `npm i --save-dev @types/node`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para o nó? Tente `npm i --save-dev @types/node` e, em seguida, adicione 'node' ao campo tipos em seu tsconfig.", - "Cannot_find_namespace_0_2503": "Não é possível encontrar o namespace '{0}'.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Não é possível localizar o namespace '{0}'. Você quis dizer '{1}'?", - "Cannot_find_parameter_0_1225": "Não é possível encontrar o parâmetro '{0}'.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Não é possível encontrar o caminho do subdiretório comum para os arquivos de entrada.", - "Cannot_find_type_definition_file_for_0_2688": "Não é possível encontrar o arquivo de definição de tipo para '{0}'.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Não é possível importar arquivos de declaração de tipo. Considere a possibilidade de importar '{0}' em vez de '{1}'.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Não é possível inicializar a variável com escopo externo '{0}' no mesmo escopo que a declaração de escopo de bloco '{1}'.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Não é possível invocar um objeto que é possivelmente 'nulo'.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Não é possível invocar um objeto que é possivelmente 'nulo' ou 'indefinido'.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Não é possível invocar um objeto que é possivelmente 'indefinido'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a desestruturação da matriz sempre enviará '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o array spread sempre enviará '{0}'.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a instrução for-of sempre enviará '{0}'.", - "Cannot_move_statements_to_the_selected_file_95183": "Não é possível mover instruções para o arquivo selecionado", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Não é possível mover para o arquivo, o arquivo selecionado é inválido", - "Cannot_read_file_0_5083": "Não é possível ler o arquivo '{0}'.", - "Cannot_read_file_0_Colon_1_5012": "Não é possível ler o arquivo '{0}': {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Não é possível declarar novamente a variável de escopo de bloco '{0}'.", - "Cannot_redeclare_exported_variable_0_2323": "Não é possível redeclarar a variável exportada '{0}'.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Não é possível declarar novamente o identificador '{0}' na cláusula catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Não é possível iniciar uma chamada de função em uma anotação de tipo.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Não é possível usar JSX, a menos que o sinalizador '--jsx' seja fornecido.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Não é possível usar 'export import' em um tipo ou namespace somente de tipo quando '{0}' estiver habilitado.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Não será possível usar importações, exportações ou acréscimos de módulo quando '--module' for 'none'.", - "Cannot_use_namespace_0_as_a_type_2709": "Não é possível usar o namespace '{0}' como um tipo.", - "Cannot_use_namespace_0_as_a_value_2708": "Não é possível usar o namespace '{0}' como um valor.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Não é possível usar \"this\" em um inicializador de propriedade estática de uma classe decorada.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Não é possível gravar o arquivo '{0}' porque ele substituirá o arquivo '.tsbuildinfo' gerado pelo projeto referenciado '{1}'", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Não é possível gravar o arquivo '{0}' porque ele seria substituído por diversos arquivos de entrada.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Não é possível gravar o arquivo '{0}' porque ele substituiria o arquivo de entrada.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "A variável de cláusula catch não pode ter um inicializador.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "A anotação de tipo de variável da cláusula catch precisa ser 'any' ou 'unknown' quando especificada.", - "Change_0_to_1_90014": "Alterar '{0}' para '{1}'", - "Change_all_extended_interfaces_to_implements_95038": "Alterar todas as interfaces estendidas para 'implements'", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Alterar todos os tipos de estilo jsdoc para TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alterar todos os tipos de estilo jsdoc para TypeScript (e adicionar '| undefined' a tipos que permitem valor nulo)", - "Change_extends_to_implements_90003": "Alterar 'extends' para 'implements'", - "Change_spelling_to_0_90022": "Alterar ortografia para '{0}'", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifique as propriedades de classe declaradas, mas não definidas no construtor.", - "Check_side_effect_imports_6806": "Verifique as importações de efeitos colaterais.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verificar se os argumentos para os métodos 'associar', 'chamar' e 'aplicar' correspondem à função original.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verificando se '{0}' é o maior prefixo correspondente para '{1}' - '{2}'.", - "Circular_definition_of_import_alias_0_2303": "Definição circular do alias de importação '{0}'.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularidade detectada ao resolver a configuração: {0}", - "Circularity_originates_in_type_at_this_location_2751": "A circularidade é originada no tipo neste local.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "A classe '{0}' define o acessador de membro de instância '{1}', mas a classe estendida '{2}' o define como uma função de membro de instância.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "A classe '{0}' define a função de membro de instância '{1}', mas a classe estendida '{2}' a define como um acessador de membro de instância.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "A classe '{0}' define a propriedade de membro de instância '{1}', mas a classe estendida '{2}' a define como uma função de membro de instância.", - "Class_0_incorrectly_extends_base_class_1_2415": "A classe '{0}' estende incorretamente a classe base '{1}'.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "A classe '{0}' implementa incorretamente a classe '{1}'. Você pretendia estender '{1}' e herdar seus membros como uma subclasse?", - "Class_0_incorrectly_implements_interface_1_2420": "A classe '{0}' implementa incorretamente a interface '{1}'.", - "Class_0_used_before_its_declaration_2449": "Classe '{0}' usada antes de sua declaração.", - "Class_constructor_may_not_be_a_generator_1368": "O construtor de classe não pode ser um gerador.", - "Class_constructor_may_not_be_an_accessor_1341": "O construtor de classe não pode ser um acessador.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "A declaração da classe não pode implementar a lista de sobrecarga para '{0}'.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "As declarações de classe não podem ter mais de uma marca '@augments' ou '@extends'.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Os decoradores de classe não podem ser usados com um identificador privado estático. Considere remover o decorador experimental.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "O campo de classe '{0}' definido pela classe pai não está acessível na classe filho via super.", - "Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar para ES5 e superior com o módulo {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.", - "Classes_can_only_extend_a_single_class_1174": "Classes só podem estender uma única classe.", - "Classes_may_not_have_a_field_named_constructor_18006": "Classes não podem ter um campo denominado 'constructor'.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "O código contido em uma classe é avaliado no modo estrito do JavaScript que não permite o uso de '{0}'. Para obter mais informações, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Opções da Linha de Comando", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compile o projeto dando o caminho para seu arquivo de configuração ou para uma pasta com um 'tsconfig.json'.", - "Compiler_Diagnostics_6251": "Diagnóstico do Compilador", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "A opção do compilador '{0}' não pode receber uma cadeia de caracteres vazia.", - "Compiler_option_0_expects_an_argument_6044": "A opção do compilador '{0}' espera um argumento.", - "Compiler_option_0_may_not_be_used_with_build_5094": "A opção de compilador '--{0}' não pode ser usada com '--build'.", - "Compiler_option_0_may_only_be_used_with_build_5093": "A opção de compilador '--{0}' pode ser usada somente com '--build'.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "A opção do compilador '{0}' de valor '{1}' é instável. Use o TypeScript noturno para silenciar esse erro. Tente atualizar com 'npm install -D typescript@next'.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "A opção do compilador '{0}' requer um valor do tipo {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "O compilador reserva o nome '{0}' ao emitir um identificador privado para versões anteriores.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila o projeto TypeScript localizado no caminho especificado.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila o projeto atual (tsconfig.json no diretório de trabalho).", - "Compiles_the_current_project_with_additional_settings_6929": "Compila o projeto atual, com configurações adicionais.", - "Completeness_6257": "Integridade", - "Composite_projects_may_not_disable_declaration_emit_6304": "Projetos compostos não podem desabilitar a emissão de declaração.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Projetos compostos podem não desabilitar a compilação incremental.", - "Computed_from_the_list_of_input_files_6911": "Calculado a partir da lista de arquivos de entrada", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "As propriedades computadas devem ser literais de números ou cadeia de caracteres, variáveis ou expressões pontilhadas com --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Nomes de propriedade calculados não são permitidos em enums.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nomes de propriedades computadas em literais de classe ou objeto não podem ser inferidos com --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Os valores computados não são permitidos em uma enumeração com membros de valor de cadeia de caracteres.", - "Concatenate_and_emit_output_to_single_file_6001": "Concatenar e emitir saída para um arquivo único.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condições a serem definidas além dos padrões específicos do resolvedor ao resolver importações.", - "Conflicts_are_in_this_file_6201": "Há conflitos neste arquivo.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere adicionar um modificador 'declare' para esta classe.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Os tipos de retorno de assinatura de constructo '{0}' e '{1}' são incompatíveis.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Assinatura de constructo, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Assinaturas de constructo sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", - "Constructor_implementation_is_missing_2390": "Implementação do construtor ausente.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "O construtor de classe '{0}' é privado e somente acessível na declaração de classe.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "O construtor de classe '{0}' é protegido e somente acessível na declaração de classe.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de união.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de interseção.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Construtores para classes derivadas devem conter uma chamada 'super'.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "O arquivo contido não foi especificado e o diretório raiz não pode ser determinado, ignorando a pesquisa na pasta 'node_modules'.", - "Containing_function_is_not_an_arrow_function_95128": "A função contentora não é uma função de seta", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controlar qual método é usado para detectar arquivos JS no formato de módulo.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "A conversão do tipo '{0}' para o tipo '{1}' pode ser um erro porque nenhum tipo está suficientemente sobreposto ao outro. Se isso era intencional, converta a expressão para 'unknown' primeiro.", - "Convert_0_to_1_in_0_95003": "Converter '{0}' em '{1} em {0}'", - "Convert_0_to_mapped_object_type_95055": "Converter '{0}' para o tipo de objeto mapeado", - "Convert_all_const_to_let_95102": "Converta todos os 'const' para 'let'", - "Convert_all_constructor_functions_to_classes_95045": "Converter todas as funções de construtor em classes", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Converter todos os caracteres inválidos em código de entidade HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Converter todos os tipos re-exportados para exportações somente de tipo", - "Convert_all_require_to_import_95048": "Converter todos os 'require' em 'import'", - "Convert_all_to_async_functions_95066": "Converter todos para funções assíncronas", - "Convert_all_to_bigint_numeric_literals_95092": "Converter todos para literais numéricos bigint", - "Convert_all_to_default_imports_95035": "Converter tudo para importações padrão", - "Convert_all_type_literals_to_mapped_type_95021": "Converter todos os literais de tipo em tipo mapeado", - "Convert_all_typedef_to_TypeScript_types_95177": "Converta todos os typedef em tipos TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Converter a função de seta ou a expressão de função", - "Convert_const_to_let_95093": "Converter 'const' para 'let'", - "Convert_default_export_to_named_export_95061": "Converter exportação padrão para exportação nomeada", - "Convert_function_declaration_0_to_arrow_function_95106": "Converter a declaração de função '{0}' em função de seta", - "Convert_function_expression_0_to_arrow_function_95105": "Converter a expressão de função '{0}' em função de seta", - "Convert_function_to_an_ES2015_class_95001": "Converter função em uma classe ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Converter o caractere inválido para seu código de entidade HTML", - "Convert_named_export_to_default_export_95062": "Converter a exportação nomeada para a exportação padrão", - "Convert_named_imports_to_default_import_95170": "Converter importações nomeadas em importação padrão", - "Convert_named_imports_to_namespace_import_95057": "Converter importações nomeadas em importação de namespace", - "Convert_namespace_import_to_named_imports_95056": "Converter importação de namespace em importações nomeadas", - "Convert_overload_list_to_single_signature_95118": "Converter a lista de sobrecarga em assinatura única", - "Convert_parameters_to_destructured_object_95075": "Converter parâmetros para objeto não estruturado", - "Convert_require_to_import_95047": "Converter 'require' em 'import'", - "Convert_to_ES_module_95017": "Converter em módulo ES", - "Convert_to_a_bigint_numeric_literal_95091": "Converter para um literal numérico bigint", - "Convert_to_anonymous_function_95123": "Converter em uma função anônima", - "Convert_to_arrow_function_95125": "Converter em uma função de seta", - "Convert_to_async_function_95065": "Converter para uma função assíncrona", - "Convert_to_default_import_95013": "Converter para importação padrão", - "Convert_to_named_function_95124": "Converter em uma função nomeada", - "Convert_to_optional_chain_expression_95139": "Converter em expressão de cadeia opcional", - "Convert_to_template_string_95096": "Converter para cadeia de caracteres de modelo", - "Convert_to_type_only_export_1364": "Converter para exportação somente de tipo", - "Convert_typedef_to_TypeScript_type_95176": "Converta o typedef em um tipo TypeScript.", - "Corrupted_locale_file_0_6051": "Arquivo de localidade {0} corrompido.", - "Could_not_convert_to_anonymous_function_95153": "Não foi possível fazer a conversão para a função anônima", - "Could_not_convert_to_arrow_function_95151": "Não foi possível fazer a conversão para a função de seta", - "Could_not_convert_to_named_function_95152": "Não foi possível fazer a conversão para a função nomeada", - "Could_not_determine_function_return_type_95150": "Não foi possível determinar o tipo de retorno da função", - "Could_not_find_a_containing_arrow_function_95127": "Não foi possível localizar uma função de seta contentora", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Não foi possível localizar o arquivo de declaração para o módulo '{0}'. '{1}' tem implicitamente um tipo 'any'.", - "Could_not_find_convertible_access_expression_95140": "Não foi possível localizar a expressão de acesso conversível", - "Could_not_find_export_statement_95129": "Não foi possível localizar a instrução de exportação", - "Could_not_find_import_clause_95131": "Não foi possível localizar a cláusula de importação", - "Could_not_find_matching_access_expressions_95141": "Não foi possível localizar expressões de acesso correspondentes", - "Could_not_find_name_0_Did_you_mean_1_2570": "Não foi possível encontrar o nome '{0}'. Você quis dizer '{1}'?", - "Could_not_find_namespace_import_or_named_imports_95132": "Não foi possível localizar a importação de namespace nem as importações nomeadas", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Não foi possível localizar a propriedade para a qual o acessador deve ser gerado", - "Could_not_find_variable_to_inline_95185": "Não foi possível localizar a variável para embutida.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Não foi possível resolver o caminho '{0}' com as extensões: {1}.", - "Could_not_write_file_0_Colon_1_5033": "Não foi possível gravar o arquivo '{0}': {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Criar arquivos source map para arquivos JavaScript emitidos.", - "Create_sourcemaps_for_d_ts_files_6614": "Criar sourcemaps para arquivos .d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Cria um tsconfig.json com as configurações recomendadas no diretório de trabalho.", - "DIRECTORY_6038": "DIRETÓRIO", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sequências de escape decimais e referências inversas não são permitidas em uma classe de caracteres.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Decimais com zeros à esquerda não são permitidos.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "A declaração aumenta a declaração em outro arquivo. Isso não pode ser serializado.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "A emissão de declaração para este arquivo requer a preservação desta importação para aumentos. Não há suporte para isso com --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}' do módulo '{1}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "A declaração emit para esse parâmetro requer a adição implícita de indefinido ao seu tipo. Não há suporte para isso com --isolatedDeclarations.", - "Declaration_expected_1146": "Declaração esperada.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "O nome de declaração entra em conflito com o identificador global integrado '{0}'.", - "Declaration_or_statement_expected_1128": "Declaração ou instrução esperada.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Declaração ou instrução esperada. Esse \"=\" segue um bloco de instruções, portanto, se você pretendia escrever uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "As declarações com asserções de atribuição definitiva também precisam ter anotações de tipo.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "As declarações com inicializadores também não podem ter asserções de atribuição definitiva.", - "Declare_a_private_field_named_0_90053": "Declare um campo privado chamado '{0}'.", - "Declare_method_0_90023": "Declarar método '{0}'", - "Declare_private_method_0_90038": "Declarar método privado '{0}'", - "Declare_private_property_0_90035": "Declarar a propriedade privada '{0}'", - "Declare_property_0_90016": "Declarar propriedade '{0}'", - "Declare_static_method_0_90024": "Declarar método estático '{0}'", - "Declare_static_property_0_90027": "Declarar propriedade estática '{0}'", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "O tipo de retorno da função decorador '{0}' não é atribuível ao tipo '{1}'.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "O tipo de retorno da função decorador é '{0}' mas deve ser 'void' ou 'any'.", - "Decorator_used_before_export_here_1486": "Decorador usado antes de 'export' aqui.", - "Decorators_are_not_valid_here_1206": "Os decoradores não são válidos aqui.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Os decoradores não podem ser aplicados a vários acessadores get/set de mesmo nome.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Os decoradores podem não aparecer após 'export' ou 'export default' se também aparecerem antes de 'export'.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Os decoradores devem preceder o nome e todas as palavras-chave das declarações de propriedade.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Padronize as variáveis da cláusula catch como 'desconhecido' em vez de 'qualquer'.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "A exportação padrão do módulo tem ou está usando o nome particular '{0}'.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "As exportações padrão não podem ser inferidas com --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "As importações padrão não são permitidas em uma importação adiada.", - "Default_library_1424": "Biblioteca padrão", - "Default_library_for_target_0_1425": "Biblioteca padrão para o destino '{0}'", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Só há suporte para importações adiadas quando o sinalizador \"--module\" está definido como \"esnext\" ou \"preserve\".", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "As definições dos seguintes identificadores estão em conflito com as de outro arquivo: {0}", - "Delete_all_unused_declarations_95024": "Excluir todas as declarações não usadas", - "Delete_all_unused_imports_95147": "Excluir todas as importações não usadas", - "Delete_all_unused_param_tags_95172": "Excluir todas as marcas '@param' não usadas", - "Delete_the_outputs_of_all_projects_6365": "Excluir as saídas de todos os projetos.", - "Delete_unused_param_tag_0_95171": "Excluir a marca '@param' não usada '{0}'", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Preterido] Use '--jsxFactory' no lugar. Especifique o objeto invocado para createElement ao direcionar uma emissão de JSX 'react'", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Preterido] Use '--outFile' no lugar. Concatene e emita uma saída para um arquivo único", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Preterido] Use '--skipLibCheck' no lugar. Ignore a verificação de tipo dos arquivos de declaração de biblioteca padrão.", - "Deprecated_setting_Use_outFile_instead_6677": "Configuração preterida. Use 'outFile' em vez disso.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Você esqueceu de usar 'await'?", - "Did_you_mean_0_1369": "Você quis dizer '{0}'?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Você quis dizer que '{0}' deve ser restrito ao tipo 'new (...args: any[]) => {1}'?", - "Did_you_mean_to_call_this_expression_6212": "Você quis chamar esta expressão?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Você quis marcar esta função como 'async'?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Você quis usar ':'? '=' só pode estar após um nome de propriedade quando o literal de objeto contentor faz parte de um padrão de desestruturação.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Você quis usar 'new' com essa expressão?", - "Digit_expected_1124": "Dígito esperado.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "O diretório '{0}' não existe; ignorando todas as pesquisas nele.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "O diretório '{0}' não contém o escopo package.json. As importações não resolverão.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Desabilitar a adição de diretivas 'use strict' em arquivos JavaScript emitidos.", - "Disable_checking_for_this_file_90018": "Desabilitar a verificação para esse arquivo", - "Disable_emitting_comments_6688": "Desabilitar comentários de emissão.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Desabilite as declarações de emissão que têm '@internal' em seus comentários JSDoc.", - "Disable_emitting_files_from_a_compilation_6660": "Desabilitar a emissão de arquivos de uma compilação.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Desabilitar a emissão de arquivos se forem reportados erros de verificação de tipo.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Desabilitar a exclusão de declarações 'enum const' no código gerado.", - "Disable_error_reporting_for_unreachable_code_6603": "Desabilitar o relatório de erros para código inacessível.", - "Disable_error_reporting_for_unused_labels_6604": "Desabilitar o relatório de erros para rótulos não utilizados.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Desative a verificação completa do tipo (somente erros críticos de análise e emissão serão relatados).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Desabilitar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Desabilitar a inclusão de qualquer arquivo de biblioteca, incluindo o padrão lib.d.ts.", - "Disable_loading_referenced_projects_6235": "Desabilite o carregamento de projetos referenciados.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Desabilitar arquivos de origem de referência em vez de arquivos de declaração ao referenciar projetos compostos.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Desabilitar relatório de excesso de erros de propriedade durante a criação de literais de objeto.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Desabilitar a resolução de symlinks para seus realpath. Isso se correlaciona com o mesmo sinalizador no nó.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Desabilitar as limitações de tamanho nos projetos JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Desabilite a pesquisa de solução deste projeto.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Desabilitar verificação estrita de assinaturas genéricas em tipos de função.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Desabilitar a aquisição de tipo para projetos JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Desabilitar truncamento de tipos em mensagens de erro.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Desabilite o uso de arquivos de origem em vez de arquivos de declaração de projetos referenciados.", - "Disable_wiping_the_console_in_watch_mode_6684": "Desabilitar a limpeza do console no modo de inspeção.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Desabilita a inferência para a aquisição de tipo examinando filenames em um projeto.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Não permitir 'importar', 'necessário ou' de expandir o número de arquivos que TypeScript deve adicionar a um projeto.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Não permitir referências com maiúsculas de minúsculas inconsistentes no mesmo arquivo.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Não adicionar as referências de barra tripla nem os módulos importados à lista de arquivos compilados.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Não permitir construções de tempo de execução que não fazem parte de ECMAScript.", - "Do_not_emit_comments_to_output_6009": "Não emita comentários para a saída.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Não emita declarações de código que contenham uma anotação '@internal'.", - "Do_not_emit_outputs_6010": "Não emita saídas.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Não emita saídas se erros forem reportados.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Não emita diretivas 'use strict' na saída de módulo.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Não apague declarações const enum no código gerado.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Não gerar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Não incluir o arquivo de biblioteca padrão (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Não relate erros sobre código inacessível.", - "Do_not_report_errors_on_unused_labels_6074": "Não relate erros sobre rótulos não utilizados.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Não resolver o real caminho de symlinks.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Não transforme ou elimine quaisquer importações ou exportações não marcadas como somente tipo, garantindo que sejam gravadas no formato do arquivo de saída com base na configuração 'module'.", - "Do_not_truncate_error_messages_6165": "Não truncar as mensagens de erro.", - "Duplicate_function_implementation_2393": "Implementação de função duplicada.", - "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' no escopo de nível superior de um módulo.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicar o identificador '{0}'. O compilador reserva o nome '{1}' em escopo de alto nível de um módulo que contém funções assíncronas.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' ao emitir 'super' referências em inicializadores estáticos.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. O compilador usa a declaração '{1}' para dar suporte a funções assíncronas.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificador duplicado '{0}'. Os elementos estáticos e de instância não podem compartilhar o mesmo nome privado.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador 'arguments' duplicado. O compilador usa 'arguments' para inicializar os parâmetros rest.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado '_newTarget'. O compilador usa a declaração de variável '_newTarget' para capturar a referência de metapropriedade 'new.target'.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador '_this' duplicado. O compilador usa a declaração de variável '_this' para capturar a referência 'this'.", - "Duplicate_index_signature_for_type_0_2374": "Assinatura de índice duplicada para o tipo '{0}'.", - "Duplicate_label_0_1114": "Rótulo '{0}' duplicado.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Propriedade '{0}' duplicada.", - "Duplicate_regular_expression_flag_1500": "Duplicar o sinalizador de expressão regular.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "O especificador da importação dinâmica deve ser do tipo 'string', mas aqui tem o tipo '{0}'.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Só há suporte para as importações dinâmicas quando o sinalizador “--module” estiver definido como “es2020”, “es2022”, “esnext”, “commonjs”, “amd”, “system”, “umd”, “node16”, “node18”, “node20” ou “nodenext”.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "As importações dinâmicas só podem aceitar um especificador de módulo e um conjunto opcional de atributos como argumentos", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "As importações dinâmicas só dão suporte a um segundo argumento quando a opção “--module” estiver definida como “esnext”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importações e exportações ECMAScript não podem ser gravadas em um arquivo CommonJS em \"texttimModuleSyntax\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importações e exportações ECMAScript não podem ser gravadas em um arquivo CommonJS em \"texttimModuleSyntax\". Ajuste o campo \"type\" no \"package.json\" mais próximo para tornar esse arquivo um módulo ECMAScript ou ajuste as configurações \"texttimModuleSyntax\", \"module\" e \"moduleResolution\" no TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "A sintaxe do módulo ECMAScript não é permitida em um módulo CommonJS quando \"module\" está definido como \"preserve\".", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaração de '{0}.{1}' difere em seu valor, onde '{2}' era esperado, mas '{3}' foi fornecido.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada membro do tipo de união '{0}' tem assinaturas de constructo, mas nenhuma dessas assinaturas é compatível entre si.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada membro do tipo de união '{0}' tem assinaturas, mas nenhuma dessas assinaturas é compatível entre si.", - "Editor_Support_6249": "Suporte do Editor", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "O elemento implicitamente tem um tipo 'any' porque a expressão do tipo '{0}' não pode ser usada para o tipo de índice '{1}'.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "O elemento implicitamente tem um tipo 'any' porque a expressão de índice não é do tipo 'number'.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "O elemento tem, implicitamente, 'qualquer' tipo, pois o tipo '{0}' não tem assinatura de índice.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "O elemento implicitamente tem um tipo 'any' porque o tipo '{0}' não tem assinatura de índice. Você quis dizer chamada de '{1}'?", - "Emit_6246": "Emitir", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emitir os campos de classe ECMAScript-standard-compliant.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir uma Marca de Ordem de Byte (BOM) UTF-8 no início dos arquivos de saída.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir um arquivo único com os mapas de origem em vez de arquivos separados.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emitir um perfil de CPU V8 da execução do compilador para depuração.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emitir JavaScript adicional para facilitar o suporte à importação de módulos CommonJS. Isso habilita 'allowSyntheticDefaultImports' para compatibilidade de tipo.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de classe com Definir em vez de Configurar.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emitir metadados de tipo design para declarações decoradas nos arquivos de origem.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emitir um JavaScript mais compatível, mas detalhado e menos eficaz para iteração.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir a origem ao lado dos sourcemaps em um arquivo único; a definição requer '--inlineSourceMap' ou '--sourceMap'.", - "Enable_all_strict_type_checking_options_6180": "Habilitar todas as opções estritas de verificação de tipo.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Habilitar a cor e a formatação na saída do TypeScript para tornar os erros do compilador mais fáceis de ler.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilitar restrições que permitem que um projeto TypeScript seja usado com referências do projeto.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilitar o relatório de erros para codepaths que não retornam explicitamente uma função.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilitar o relatório de erros para expressões e declarações com um tipo 'any' implícito.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilitar o relatório de erros para casos fallthrough no parâmetro relatório.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilitar o relatório de erros em arquivos JavaScript verificados por tipo.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilitar relatório de erros quando as variáveis locais não forem lidas.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilitar relatório de erros quando 'this' for fornecido o tipo 'any'.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite o suporte experimental para decoradores experimentais herdados.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Permite a importação de arquivos com qualquer extensão, desde que um arquivo de declaração esteja presente.", - "Enable_importing_json_files_6689": "Habilitar importação de arquivos .json.", - "Enable_lib_replacement_6808": "Habilitar substituição de biblioteca.", - "Enable_project_compilation_6302": "Habilitar a compilação do projeto", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite os métodos estritos 'bind', 'call' e 'apply' em funções.", - "Enable_strict_checking_of_function_types_6186": "Habilitar verificação estrita de tipos de função.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Habilite a verificação estrita de inicialização de propriedade nas classes.", - "Enable_strict_null_checks_6113": "Habilite verificações nulas estritas.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilitar a opção 'experimentalDecorators' no arquivo de configuração", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilitar o sinalizador '--jsx' no arquivo de configuração", - "Enable_tracing_of_the_name_resolution_process_6085": "Habilite o rastreio do processo de resolução de nome.", - "Enable_verbose_logging_6713": "Habilite o registro em log detalhado.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emissão de interoperabilidade entre CommonJS e Módulos ES através da criação de objetos de namespace para todas as importações. Implica em 'allowSyntheticDefaultImports'.", - "Enables_experimental_support_for_ES7_decorators_6065": "Habilita o suporte experimental para decoradores ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita o suporte experimental para a emissão de tipo de metadados para decoradores.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Aplicar o uso de acessadores indexados para chaves declaradas usando um tipo indexado.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Verifique se os membros de substituição em classes derivadas estão marcados com um modificador de ignorar.", - "Ensure_that_casing_is_correct_in_imports_6637": "Certifique-se de que a capitalização esteja correta nas importações.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Certifique-se que cada arquivo pode ser convertido em segurança sem depender de outras importações.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Certifique-se de que 'use strict' seja sempre emitido.", - "Entering_conditional_exports_6413": "Inserção de exportações condicionais.", - "Entry_point_for_implicit_type_library_0_1420": "Ponto de entrada para a biblioteca de tipos implícita '{0}'", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Ponto de entrada para a biblioteca de tipos implícita '{0}' com packageId '{1}'", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions com packageId '{1}'", - "Enum_0_used_before_its_declaration_2450": "A enumeração '{0}' usada antes de sua declaração.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "As declarações enum só podem ser mescladas com namespaces ou com outras declarações enum.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Declarações de enumeração devem ser const ou não const.", - "Enum_member_expected_1132": "Membro de enumeração esperado.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "O membro Enumeração que segue um membro numérico não literal deve ter um inicializador quando 'isolatedModules' estiver habilitado.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Os inicializadores de membros de Enumeração devem ser computáveis sem referências a símbolos externos com --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "O membro de enumeração deve ter um inicializador.", - "Enum_name_cannot_be_0_2431": "O nome de enumeração não pode ser '{0}'.", - "Environment_Settings_6285": "Configurações de Ambiente", - "Errors_Files_6041": "Arquivos de Erros", - "Escape_sequence_0_is_not_allowed_1488": "A sequência de escape '{0}' não é permitida.", - "Examples_Colon_0_6026": "Exemplos: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Complexidade excessiva ao comparar os tipos '{0}' e '{1}'.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidade da pilha excessiva ao comparar tipos '{0}' e '{1}'.", - "Exiting_conditional_exports_6416": "Saída das exportações condicionais.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Espera-se {0}-{1} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", - "Expected_0_arguments_but_got_1_2554": "{0} argumentos eram esperados, mas {1} foram obtidos.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} argumentos eram esperados, mas foram obtidos {1}. Você esqueceu de incluir 'void' no argumento de tipo para 'Promise'?", - "Expected_0_type_arguments_but_got_1_2558": "{0} argumentos de tipo eram esperados, mas {1} foram obtidos.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Espera-se {0} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Esperava 1 argumento, mas obteve 0. 'new Promise()' precisa de uma dica JSDoc para produzir um 'resolver' que pode ser chamado sem argumentos.", - "Expected_a_Unicode_property_name_1523": "Esperado um nome de propriedade Unicode.", - "Expected_a_Unicode_property_name_or_value_1527": "Espera-se um nome ou valor de propriedade Unicode.", - "Expected_a_Unicode_property_value_1525": "Espera-se um valor da propriedade Unicode.", - "Expected_a_capturing_group_name_1514": "Esperado um nome de grupo de captura.", - "Expected_a_class_set_operand_1520": "Espera-se um operando de conjunto de classes.", - "Expected_at_least_0_arguments_but_got_1_2555": "Pelo menos {0} argumentos eram esperados, mas {1} foram obtidos.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Marca de fechamento de JSX correspondente esperada para '{0}'.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Marca de fechamento correspondente esperada para fragmento JSX.", - "Expected_for_property_initializer_1442": "Esperado '=' para inicializador de propriedade.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "O tipo esperado do campo '{0}' em 'package.json' como '{1}' obteve '{2}'.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolução de módulo especificado explicitamente: '{0}'.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "A exponenciação não pode ser executada nos valores 'bigint', a menos que a opção 'target' esteja definida como 'es2016' ou posterior.", - "Export_0_from_module_1_90059": "Exportar '{0}' do módulo '{1}'", - "Export_all_referenced_locals_90060": "Exportar todos os locais referenciados", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Não é possível usar a atribuição de exportação durante o direcionamento para módulos de ECMAScript. Use a 'exportação padrão' ou outro formato de módulo em vez disso.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "A atribuição de exportação não tem suporte quando o sinalizador '--module' é 'system'.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Exportar conflitos de declaração com declaração exportada de '{0}'.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "As declarações de exportação não são permitidas em um namespace.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "O especificador de exportação '{0}' não existe no escopo package.json no caminho '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "O alias de tipo exportado '{0}' tem ou está usando o nome particular '{1}'.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "O alias do tipo exportado '{0}' tem ou está usando o nome privado '{1}' do módulo {2}.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "A variável exportada '{0}' tem ou está usando o nome particular '{1}'.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exportações e designações de exportações não são permitidas em acréscimos de módulo.", - "Expression_expected_1109": "Expressão esperada.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "A expressão deve ser colocada entre parênteses para ser usada como um decorador.", - "Expression_or_comma_expected_1137": "Expressão ou vírgula esperada.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "A expressão produz um tipo de tupla grande demais para ser representada.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "A expressão produz um tipo de união muito complexo para representar.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "A expressão é resolvida como '_super', que o compilador utiliza para capturar a referência da classe base.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "A expressão é resolvida para a declaração de variável '_newTarget' que o compilador usa para capturar a referência de metapropriedade 'new.target'.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "A expressão é resolvida como a declaração de variável '_this' que o compilador utiliza para capturar a referência 'this'.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "O tipo de expressão não pode ser inferido com --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "A cláusula Extends não pode conter uma expressão com --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "A cláusula extends para o tipo inferido '{0}' tem ou está usando o nome particular '{1}'.", - "Extract_base_class_to_variable_90064": "Extrair classe base para variável", - "Extract_binding_expressions_to_variable_90066": "Extrair expressões de associação para variável", - "Extract_constant_95006": "Extrair constante", - "Extract_default_export_to_variable_90065": "Extrair exportação padrão para variável", - "Extract_function_95005": "Extrair função", - "Extract_to_0_in_1_95004": "Extrair para {0} em {1}", - "Extract_to_0_in_1_scope_95008": "Extrair para {0} no escopo {1}", - "Extract_to_0_in_enclosing_scope_95007": "Extrair para {0} no escopo de delimitação", - "Extract_to_interface_95090": "Extrair para interface", - "Extract_to_type_alias_95078": "Extrair para alias de tipo", - "Extract_to_typedef_95079": "Extrair para typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrair para variável e substituir por '{0} as typeof {0}'", - "Extract_type_95077": "Tipo de extração", - "FILE_6035": "ARQUIVO", - "FILE_OR_DIRECTORY_6040": "ARQUIVO OU DIRETÓRIO", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Falha ao localizar peerDependency '{0}'.", - "Failed_to_resolve_under_condition_0_6415": "Falha ao resolver na condição '{0}'.", - "Fallthrough_case_in_switch_7029": "Caso de fallthrough no comutador.", - "File_0_does_not_exist_6096": "O arquivo '{0}' não existe.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "O arquivo '{0}' não existe de acordo com as pesquisas anteriores em cache.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "O arquivo '{0}' existe de acordo com as pesquisas anteriores em cache.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "O arquivo '{0}' tem uma extensão sem suporte. As únicas extensões com suporte são {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "O arquivo '{0}' é um arquivo JavaScript. Você quis habilitar a opção 'allowJs'?", - "File_0_is_not_a_module_2306": "O arquivo '{0}' não é um módulo.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "O arquivo '{0}' não está na lista de arquivos de projeto '{1}'. Os projetos devem listar todos os arquivos ou usar um padrão 'include'.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "O arquivo '{0}' não está em 'rootDir' '{1}'. Espera-se que 'rootDir' contenha todos os arquivos de origem.", - "File_0_not_found_6053": "Arquivo '{0}' não encontrado.", - "File_Layout_6284": "Layout do Arquivo", - "File_Management_6245": "Gerenciamento de Arquivos", - "File_appears_to_be_binary_1490": "O arquivo parece ser binário.", - "File_change_detected_Starting_incremental_compilation_6032": "Alteração do arquivo detectada. Iniciando compilação incremental...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "O arquivo é um módulo CommonJS porque '{0}' não tem o campo \"type\"", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "O arquivo é o módulo CommonJS porque '{0}' tem o campo \"type\" cujo valor não é \"module\"", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "O arquivo é um módulo CommonJS porque 'package.json' não foi encontrado", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "O arquivo é o módulo ECMAScript porque '{0}' tem o campo \"type\" com o valor \"module\"", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "O arquivo é um módulo CommonJS; ele pode ser convertido em um módulo ES.", - "File_is_default_library_for_target_specified_here_1426": "O arquivo é a biblioteca padrão para o destino especificado aqui.", - "File_is_entry_point_of_type_library_specified_here_1419": "O arquivo é o ponto de entrada da biblioteca de tipos especificada aqui.", - "File_is_included_via_import_here_1399": "O arquivo é incluído via importação aqui.", - "File_is_included_via_library_reference_here_1406": "O arquivo é incluído via referência de biblioteca aqui.", - "File_is_included_via_reference_here_1401": "O arquivo é incluído via referência aqui.", - "File_is_included_via_type_library_reference_here_1404": "O arquivo é incluído via referência de biblioteca de tipos.", - "File_is_library_specified_here_1423": "O arquivo é a biblioteca especificada aqui.", - "File_is_matched_by_files_list_specified_here_1410": "O arquivo corresponde à lista 'files' especificada aqui.", - "File_is_matched_by_include_pattern_specified_here_1408": "O arquivo corresponde ao padrão de inclusão especificado aqui.", - "File_is_output_from_referenced_project_specified_here_1413": "O arquivo é a saída do projeto referenciado especificado aqui.", - "File_is_output_of_project_reference_source_0_1428": "O arquivo é a saída da origem de referência do projeto '{0}'", - "File_is_source_from_referenced_project_specified_here_1416": "O arquivo é a origem do projeto referenciado especificado aqui.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "O nome do arquivo '{0}' difere do nome de arquivo '{1}' já incluído somente em maiúsculas e minúsculas.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "O nome de arquivo '{0}' tem uma extensão '{1}' – procurando '{2}' em vez disso.", - "File_name_0_has_a_1_extension_stripping_it_6132": "O nome do arquivo '{0}' tem uma extensão '{1}' – remoção.", - "File_redirects_to_file_0_1429": "O arquivo redireciona para o arquivo '{0}'", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "A especificação de arquivo não pode conter um diretório pai ('..') que aparece após um curinga de diretório recursivo ('**'): '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "A especificação de arquivo não pode terminar em um curinga do diretório recursivo ('**'): '{0}'.", - "Filters_results_from_the_include_option_6627": "Filtra os resultados da opção 'include'.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Corrigir todos os erros de ortografia detectados", - "Fix_all_expressions_possibly_missing_await_95085": "Corrigir todas as expressões possivelmente com 'await' ausente", - "Fix_all_implicit_this_errors_95107": "Corrigir todos os erros de 'this' implícitos", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corrigir todo tipo de retorno incorreto de uma função assíncrona", - "Fix_all_with_type_only_imports_95182": "Corrigir tudo com importações somente de tipo", - "For_nodejs_Colon_6287": "Para nodejs:", - "Found_0_errors_6217": "Encontrados {0} erros.", - "Found_0_errors_Watching_for_file_changes_6194": "{0} erros encontrados. Monitorando alterações de arquivo.", - "Found_0_errors_in_1_files_6261": "Foram encontrados {0} erros em {1} arquivos.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Foram encontrados {0} erros no mesmo arquivo, começando em: {1}", - "Found_1_error_6216": "Encontrado 1 erro.", - "Found_1_error_Watching_for_file_changes_6193": "Um erro encontrado. Monitorando alterações de arquivo.", - "Found_1_error_in_0_6259": "Encontrado 1 erro em {0}", - "Found_package_json_at_0_6099": "'package.json' encontrado em '{0}'.", - "Found_peerDependency_0_with_1_version_6282": "Foi encontrada peerDependency '{0}' com a versão '{1}'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Definições de classe estão automaticamente em modo estrito.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Módulos estão automaticamente em modo estrito.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "A expressão de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "A implementação da função está ausente ou não está imediatamente depois da declaração.", - "Function_implementation_name_must_be_0_2389": "O nome da implementação de função deve ser '{0}'.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "A função tem o tipo de retorno 'any', de forma implícita, porque ela não tem uma anotação de tipo de retorno e é referenciada direta ou indiretamente em uma das suas expressões de retorno.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "A função não tem a instrução return final e o tipo de retorno não inclui 'undefined'.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "A função deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", - "Function_not_implemented_95159": "Função não implementada.", - "Function_overload_must_be_static_2387": "A sobrecarga de função deve ser estática.", - "Function_overload_must_not_be_static_2388": "A sobrecarga de função não deve ser estática.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de união.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de interseção.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "O tipo de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "A função com corpos só podem ser mescladas com classes que são ambientes.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Gerar arquivos d.ts de arquivos TypeScript e JavaScript em seu projeto.", - "Generate_get_and_set_accessors_95046": "Gerar acessadores 'get' e 'set'", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Gerar os acessadores 'get' e 'set' para todas as propriedades de substituição", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Gera um perfil de CPU.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Gera um sourcemap para cada arquivo '.d.ts' correspondente.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Gera um rastreamento de eventos e uma lista de tipos.", - "Generates_corresponding_d_ts_file_6002": "Gera o arquivo '.d.ts' correspondente.", - "Generates_corresponding_map_file_6043": "Gera o arquivo '.map' correspondente.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "O gerador tem implicitamente o tipo de rendimento \"{0}\". Considere fornecer uma anotação de tipo de retorno.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Os geradores não são permitidos em um contexto de ambiente.", - "Generic_type_0_requires_1_type_argument_s_2314": "O tipo genérico '{0}' exige {1} argumento(s) de tipo.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "O tipo genérico '{0}' exige argumentos de tipo entre {1} e {2}.", - "Global_module_exports_may_only_appear_at_top_level_1316": "As exportações de módulo global podem somente aparecer no nível superior.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "As exportações de módulo global podem somente aparecer em arquivos de declaração.", - "Global_module_exports_may_only_appear_in_module_files_1314": "As exportações de módulo global podem somente aparecer em arquivos de módulo.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "O tipo global '{0}' deve ser um tipo de classe ou interface.", - "Global_type_0_must_have_1_type_parameter_s_2317": "O tipo global '{0}' deve ter {1} parâmetro(s) de tipo.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Faça com que as recompilações em '--incremental' e '--watch' presumam que as alterações dentro de um arquivo só afetarão os arquivos que dependem diretamente dele.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Ter recompilações em projetos que usam os modos 'incremental' e 'inspeção' pressupõem que as alterações em um arquivo afetarão apenas os arquivos diretamente dependendo dele.", - "Hexadecimal_digit_expected_1125": "Dígito hexadecimal esperado.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Um identificador é esperado. '{0}' é uma palavra reservada no nível superior de um módulo.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito. Definições de classe estão automaticamente no modo estrito.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Identificador esperado. '{0}' é uma palavra reservada em modo estrito. Os módulos ficam automaticamente em modo estrito.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificador esperado. '{0}' é uma palavra reservada que não pode ser usada aqui.", - "Identifier_expected_1003": "Identificador esperado.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. '__esModule' é reservado como um marcador exportado ao transformar os módulos ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Identificador ou literal de cadeia de caracteres esperado.", - "Identifier_string_literal_or_number_literal_expected_1496": "Identificador, literal de cadeia de caracteres ou literal de número esperado.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação de pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se o pacote '{0}' realmente expõe este módulo, tente adicionar um novo arquivo de declaração (.d.ts) contendo o módulo `declare '{1}';`", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore o tsconfig encontrado e crie com as opções de linha de comando e arquivos.", - "Ignore_this_error_message_90019": "Ignorar essa mensagem de erro", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorar o tsconfig.json, compila os arquivos especificados com as opções do compilador padrão.", - "Implement_all_inherited_abstract_classes_95040": "Implementar todas as classes abstratas herdadas", - "Implement_all_unimplemented_interfaces_95032": "Implementar todas as interfaces não implementadas", - "Implement_inherited_abstract_class_90007": "Implementar classe abstrata herdada", - "Implement_interface_0_90006": "Implementar a interface '{0}'", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "A cláusula implements da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "A conversão implícita de um 'symbol' em ' string' falhará em runtime. Considere o encapsulamento desta expressão em 'String(...)'.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "A importação '{0}' está em conflito com o valor global usado neste arquivo, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "A importação '{0}' está em conflito com o valor local, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", - "Import_0_from_1_90013": "Importar '{0}' de \"{1}\"", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Os valores de asserção de importação devem ser expressões literais de cadeias de caracteres.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "As declarações de importação não são permitidas em declarações que compilam para chamadas 'require' do commonjs.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "As declarações de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "As afirmações de importação não podem ser usadas com importações ou exportações somente de tipo.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "As asserções de importação foram substituídas por atributos de importação. Use 'with' em vez de 'assert'.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Não é possível usar a atribuição de importação durante o direcionamento para módulos de ECMAScript. Use 'importar * como ns de \"mod\"', 'importar {a} de \"mod\"', 'importar d de \"mod\"' ou outro formato de módulo em vez disso.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Os valores do atributo de importação devem ser expressões literais de cadeias de caracteres.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atributos de importação não são permitidos em instruções que são compiladas para chamadas 'require' do CommonJS.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Os atributos de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Os atributos de importação não podem ser usadas com importações ou exportações somente de tipo.", - "Import_declaration_0_is_using_private_name_1_4000": "A declaração da importação '{0}' está usando o nome particular '{1}'.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "A declaração da importação está em conflito com a declaração local '{0}'.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "As declarações de importação em um namespace não podem fazer referência a um módulo.", - "Import_emit_helpers_from_tslib_6139": "Importar auxiliares de emissão de 'tslib'.", - "Import_may_be_converted_to_a_default_import_80003": "A importação pode ser convertida em uma importação padrão.", - "Import_name_cannot_be_0_2438": "O nome da importação não pode ser '{0}'.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "A declaração de importação e exportação em uma declaração de módulo de ambiente não pode fazer referência ao módulo por meio do nome do módulo relativo.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "O especificador de importação '{0}' não existe no escopo package.json no caminho '{1}'.", - "Imported_via_0_from_file_1_1393": "Importado via {0} do arquivo '{1}'", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importado via {0} do arquivo '{1}' para importar 'importHelpers' conforme especificado em compilerOptions", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importado via {0} do arquivo '{1}' para importar as funções de fábrica 'jsx' e 'jsxs'", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Importado via {0} do arquivo '{1}' com packageId '{2}'", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar 'importHelpers' conforme especificado em compilerOptions", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar as funções de fábrica 'jsx' e 'jsxs'", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "A importação de um arquivo JSON para um módulo ECMAScript requer um 'type: \"json\"' quando o atributo de importação \"module\" estiver definido como \"{0}\".", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importações não são permitidas em acréscimos de módulo. Considere movê-las para o módulo externo delimitador.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Em declarações de enumeração de ambiente, o inicializador de membro deve ser uma expressão de constante.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Em uma enumeração com várias declarações, somente uma declaração pode omitir um inicializador para o primeiro elemento de enumeração.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluir uma lista de arquivos. Isso não oferece suporte a padrões glob, ao contrário de 'include'.", - "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados com a extensão '.json'", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluir o código-fonte no sourcemaps dentro do JavaScript emitido.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir arquivos sourcemap dentro do JavaScript emitido.", - "Includes_imports_of_types_referenced_by_0_90054": "Inclui importações de tipos referenciados por '{0}'", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Incluir --watch, -w começará a observar o projeto atual para as alterações do arquivo. Uma vez definido, você pode configurar o modo de inspeção com:", - "Incomplete_quantifier_Digit_expected_1505": "Quantificador incompleto. Dígito esperado.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "A assinatura do índice para o tipo '{0}' está ausente no tipo '{1}'.", - "Index_signature_in_type_0_only_permits_reading_2542": "Assinatura de índice no tipo '{0}' permite somente leitura.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Todas as declarações individuais na declaração mesclada '{0}' devem ser exportadas ou ficar no local.", - "Infer_all_types_from_usage_95023": "Inferir todos os tipos de uso", - "Infer_function_return_type_95148": "Inferir o tipo de retorno da função", - "Infer_parameter_types_from_usage_95012": "Inferir tipos de parâmetro pelo uso", - "Infer_this_type_of_0_from_usage_95080": "Inferir tipo 'this' de '{0}' do uso", - "Infer_type_of_0_from_usage_95011": "Inferir tipo de '{0}' pelo uso", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Não há suporte para inferência de expressões de classe com --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Inicializar a propriedade '{0}' no construtor", - "Initialize_static_property_0_90021": "Inicializar a propriedade estática '{0}'", - "Initializer_for_property_0_2811": "Inicializador para a propriedade '{0}'", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "O inicializador da variável de membro de instância '{0}' não pode referenciar o identificador '{1}' declarado no construtor.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializadores não são permitidos em contextos de ambiente.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa um projeto TypeScript e cria um arquivo tsconfig.json.", - "Inline_variable_95184": "Variável embutida", - "Insert_command_line_options_and_files_from_a_file_6030": "Inserir opções e arquivos de linha de comando de um arquivo.", - "Install_0_95014": "Instalar '{0}'", - "Install_all_missing_types_packages_95033": "Instalar todos os pacotes de tipos ausentes", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "A interface '{0}' não pode estender os tipos '{1}' e '{2}' simultaneamente.", - "Interface_0_incorrectly_extends_interface_1_2430": "A interface '{0}' estende incorretamente a interface '{1}'.", - "Interface_declaration_cannot_have_implements_clause_1176": "A declaração de interface não pode ter a cláusula 'implements'.", - "Interface_must_be_given_a_name_1438": "A interface deve receber um nome.", - "Interface_name_cannot_be_0_2427": "O nome da interface não pode ser '{0}'.", - "Interop_Constraints_6252": "Restrições Interop", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete os tipos de propriedade opcionais conforme escritos, em vez de adicionar 'indefinido'.", - "Invalid_character_1127": "Caractere inválido.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "O especificador de importação inválido '{0}' não tem resoluções possíveis.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nome de módulo inválido no aumento. O módulo '{0}' resolve para um módulo não tipado em '{1}', que não pode ser aumentado.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nome de módulo inválido em acréscimo, o módulo '{0}' não pôde ser encontrado.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadeia opcional inválida da nova expressão. Você quis dizer chamar '{0}()'?", - "Invalid_reference_directive_syntax_1084": "Sintaxe de diretiva 'reference' inválida.", - "Invalid_syntax_in_decorator_1498": "Sintaxe inválida no decorador.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso inválido de “{0}”. Ele não pode ser usado dentro de um bloco estático de classe.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso inválido de '{0}'. Os módulos ficam automaticamente em modo estrito.", - "Invalid_use_of_0_in_strict_mode_1100": "Uso inválido de '{0}' no modo estrito.", - "Invalid_value_for_ignoreDeprecations_5103": "Valor inválido para '--ignoreDeprecations'.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor inválido para 'jsxFactory'. '{0}' não é um identificador válido ou nome qualificado.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor inválido para 'jsxFragmentFactory'. '{0}' não é um identificador válido ou nome qualificado.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor inválido para '--reactNamespace'. '{0}' não é um identificador válido.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "É provável que não haja uma vírgula para separar essas duas expressões de modelo. Elas formam uma expressão de modelo marcada que não pode ser invocada.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Seu tipo de elemento '{0}' não é um elemento JSX válido.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Seu tipo de instância '{0}' não é um elemento JSX válido.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Seu tipo de retorno '{0}' não é um elemento JSX válido.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Seu tipo '{0}' não é um elemento JSX válido.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "O '@{0} {1}' do JSDoc não corresponde à cláusula 'extends {2}'.", - "JSDoc_0_is_not_attached_to_a_class_8022": "O '@{0}' do JSDoc não está anexado a uma classe.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' só pode aparecer no último parâmetro de uma assinatura.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "A marcação do JSDoc \"@param\" tem o nome \"{0}\", mas não há nenhum parâmetro com esse nome.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "A marca '@param' do JSDoc tem o nome '{0}', mas não há nenhum parâmetro com esse nome. Ela corresponderia a 'argumentos' se tivesse um tipo de matriz.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc pode ser convertido em tipo TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "A marca JSDoc \"@typedef\" deve ter uma anotação de tipo ou ser seguida pelas marcas \"@property\" or \"@member\".", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Typedefs JSDoc podem ser convertidos em tipos TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Os tipos de JSDoc podem ser usados somente dentro dos comentários de documentação.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Tipos JSDoc podem ser movidos para tipos TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Os atributos JSX só devem ser atribuídos a 'expressões' que não estejam vazias.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "O elemento JSX '{0}' não tem uma marcação de fechamento correspondente.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "A classe do elemento JSX não dá suporte a atributos porque não tem uma propriedade '{0}'.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "O elemento JSX implicitamente tem o tipo 'any' porque não há uma interface de 'JSX.{0}'.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "O elemento JSX implicitamente tem tipo 'any' porque o tipo global \"JSX.Element\" não existe.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "O tipo de elemento JSX '{0}' não tem nenhum constructo nem assinaturas de chamadas.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementos JSX não podem ter vários atributos com o mesmo nome.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Expressões JSX não podem usar o operador vírgula. Você quis escrever uma matriz?", - "JSX_expressions_must_have_one_parent_element_2657": "As expressões JSX devem ter um elemento pai.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "O fragmento JSX não tem uma marcação de fechamento correspondente.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "As expressões de acesso da propriedade JSX não podem incluir nomes do namespace JSX", - "JSX_spread_child_must_be_an_array_type_2609": "O filho do espalhamento JSX deve ser um tipo de matriz.", - "JavaScript_Support_6247": "Suporte do JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "O destino do salto não pode ultrapassar o limite de função.", - "KIND_6034": "TIPO", - "Keywords_cannot_contain_escape_characters_1260": "As palavras-chave não podem conter caracteres de escape.", - "LOCATION_6037": "LOCAL", - "Language_and_Environment_6254": "Idioma e Ambiente", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "O operador antes da vírgula não é usado e não tem efeitos colaterais.", - "Library_0_specified_in_compilerOptions_1422": "Biblioteca '{0}' especificada em compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Biblioteca referenciada via '{0}' do arquivo '{1}'", - "Line_break_not_permitted_here_1142": "Quebra de linha não permitida aqui.", - "Line_terminator_not_permitted_before_arrow_1200": "Terminador de linha não permitido antes de seta.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista de sufixos de nome de arquivo a serem pesquisadas ao resolver um módulo.", - "List_of_folders_to_include_type_definitions_from_6161": "Lista de pastas das quais são incluídas as definições de tipo.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Listas das pastas raiz cujo conteúdo combinado representa a estrutura do projeto no tempo de execução.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Carregando '{0}' do diretório raiz '{1}', local candidato '{2}'.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Caminhos de log usados durante o processo 'moduleResolution'.", - "Longest_matching_prefix_for_0_is_1_6108": "O maior prefixo correspondente para '{0}' é '{1}'.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Pesquisando na pasta 'node_modules', local inicial '{0}'.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tornar todas as chamadas 'super()' a primeira instrução nos respectivos construtores", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Fazer com que o keyof retorne apenas cadeias de caracteres, números ou símbolos. Opção herdada.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Tornar a chamada 'super()' a primeira instrução no construtor", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "O tipo de objeto mapeado implicitamente tem um tipo de modelo 'any'.", - "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", - "Matched_0_condition_1_6403": "'{0}' correspondente à condição '{1}'.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Correspondido por padrão de inclusão padrão '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "Correspondência pelo padrão de inclusão '{0}' em '{1}'", - "Member_0_implicitly_has_an_1_type_7008": "O membro '{0}' implicitamente tem um tipo '{1}'.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "O membro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", - "Merge_conflict_marker_encountered_1185": "Marcador de conflito de mesclagem encontrado.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "A declaração mesclada '{0}' não pode conter uma declaração de exportação padrão. Considere adicionar uma declaração 'export default {0}' independente.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "A metapropriedade '{0}' só é permitida no corpo de uma declaração de função, expressão de função ou construtor.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "O método '{0}' não pode ter uma implementação, pois está marcado como abstrato.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "O método '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "O método '{0}' da interface exportada tem ou está usando o nome privado '{1}'.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "O método deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", - "Method_not_implemented_95158": "Método não implementado.", - "Modifiers_cannot_appear_here_1184": "Modificadores não podem aparecer aqui.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "O módulo '{0}' só pode ser importado por padrão usando o sinalizador '{1}'", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "O módulo '{0}' não pode ser importado usando esta construção. O especificador resolve apenas para um módulo ES, que não pode ser importado com 'require'. Em vez disso, use uma importação ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "O módulo '{0}' declara '{1}' localmente, mas é exportado como '{2}'.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "O módulo '{0}' declara '{1}' localmente, mas não é exportado.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "O módulo '{0}' não faz referência a um tipo, mas é usado como um tipo aqui. Você quis dizer 'typeof import('{0}')'?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "O módulo '{0}' não faz referência a um valor, mas é usado como um valor aqui.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "O módulo {0} já exportou um membro denominado '{1}'. Considere reexportar explicitamente para resolver a ambiguidade.", - "Module_0_has_no_default_export_1192": "O módulo '{0}' não tem padrão de exportação.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "O módulo '{0}' não tem exportação padrão. Você quis dizer 'importar { {1} } de {0}' em vez disso?", - "Module_0_has_no_exported_member_1_2305": "O módulo '{0}' não tem nenhum membro exportado '{1}'.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "O módulo '{0}' não tem membro exportado '{1}'. Você quis dizer 'importar {1} de {0}' em vez disso?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "O módulo '{0}' está oculto por uma declaração de local com o mesmo nome.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "O módulo '{0}' usa 'export =' e não pode ser usado com 'export *'.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "O módulo '{0}' foi resolvido como módulo de ambiente declarado localmente no arquivo '{1}'.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "O módulo '{0}' foi resolvido para '{1}', mas '--allowArbitraryExtensions' não está definido.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "O módulo '{0}' foi resolvido para '{1}', mas '--jsx' não está configurado.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "O módulo '{0}' foi resolvido para '{1}', mas '--resolveJsonModule' não é usado.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Os nomes de declaração de módulo só podem usar ' ou “ cadeias de caracteres entre aspas.", - "Module_name_0_matched_pattern_1_6092": "Nome do módulo '{0}', padrão correspondido '{1}'.", - "Module_name_0_was_not_resolved_6090": "======== Nome do módulo '{0}' não foi resolvido. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nome do módulo '{0}' foi resolvido com sucesso '{1}'. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== O nome do módulo '{0}' foi resolvido com sucesso para '{1}' com a ID do Pacote '{2}'. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Resolução de tipo não foi especificado, usando '{0}'.", - "Module_resolution_using_rootDirs_has_failed_6111": "Falha na resolução de módulo usando 'rootDirs'.", - "Modules_6244": "Módulos", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover os modificadores de elemento de tupla rotulados para rótulos", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mova a expressão na exportação padrão para uma variável e adicione uma anotação de tipo a ela.", - "Move_to_a_new_file_95049": "Mover para um novo arquivo", - "Move_to_file_95178": "Mover para Arquivo", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Não são permitidos vários separadores numéricos consecutivos.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Não são permitidas várias implementações de construtor.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "NEWLINE", - "Name_is_not_valid_95136": "Nome inválido", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Grupos de captura nomeados só estão disponíveis ao direcionar para 'ES2018' ou posterior.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Grupos de captura nomeados com o mesmo nome devem ser mutuamente exclusivos entre si.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Importações nomeadas não são permitidas em uma importação adiada.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "As importações nomeadas de um arquivo JSON para um módulo ECMAScript não são permitidas quando \"module\" é definido como \"{0}\".", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "As propriedades com nome '{0}' dos tipos '{1}' e '{2}' não são idênticas.", - "Namespace_0_has_no_exported_member_1_2694": "O namespace '{0}' não tem o membro exportado '{1}'.", - "Namespace_must_be_given_a_name_1437": "O Namespace deve receber um nome.", - "Namespace_name_cannot_be_0_2819": "O nome do Namespace não pode ser '{0}'.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces não são permitidos em arquivos de script global quando '{0}' está habilitado. Se esse arquivo não se destina a ser um script global, defina 'moduleDetection' como 'force' ou adicione uma instrução 'export {}' vazia.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Nem decoradores nem modificadores podem ser aplicados a parâmetros 'this'.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nenhum construtor base tem o número especificado de argumentos de tipo.", - "No_constituent_of_type_0_is_callable_2755": "Nenhum membro do tipo '{0}' pode ser chamado.", - "No_constituent_of_type_0_is_constructable_2759": "Nenhum membro do tipo '{0}' é construído.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nenhuma assinatura de índice com um parâmetro do tipo '{0}' foi localizada no tipo '{1}'.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nenhuma entrada foi localizada no arquivo de configuração '{0}'. Os caminhos especificados foram 'incluir' '{1}' e 'excluir' '{2}'.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Não há mais suporte. Em versões iniciais, defina manualmente a codificação de texto para a leitura de arquivos.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nenhuma sobrecarga espera argumentos {0}, mas existem sobrecargas que esperam argumentos {1} ou {2}.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nenhuma sobrecarga espera argumentos do tipo {0}, mas existem sobrecargas que esperam argumentos do tipo {1} ou {2}.", - "No_overload_matches_this_call_2769": "Nenhuma sobrecarga corresponde a esta chamada.", - "No_type_could_be_extracted_from_this_type_node_95134": "Não foi possível extrair nenhum tipo deste nó de tipo", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Não existe valor no escopo para a propriedade abreviada '{0}'. Declare um ou forneça um inicializador.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "A classe não abstrata '{0}' não implementa o membro abstrato herdado {1} da classe '{2}'.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2} e mais {3}.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "A expressão da classe não abstrata não implementa o membro abstrato herdado '{0}' da classe '{1}'.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1} e mais {2}.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "As declarações não nulas só podem ser usadas em arquivos TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Parâmetro não simples declarado aqui.", - "Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.", - "Not_all_constituents_of_type_0_are_callable_2756": "Nem todos os membros do tipo '{0}' podem ser chamados.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Nem todos os membros do tipo '{0}' são construídos.", - "Numbers_out_of_order_in_quantifier_1506": "Números fora de ordem no quantificador.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Os literais numéricos com valores absolutos iguais a 2^53 ou mais são muito grandes para serem representados precisamente como inteiros.", - "Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.", - "Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.", - "Object_is_possibly_null_2531": "Possivelmente, o objeto é 'nulo'.", - "Object_is_possibly_null_or_undefined_2533": "Possivelmente, o objeto é 'nulo' ou 'indefinido'.", - "Object_is_possibly_undefined_2532": "Possivelmente, o objeto é 'nulo'.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "O literal de objeto pode especificar apenas propriedades conhecidas e '{0}' não existe no tipo '{1}'.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "O literal de objeto pode especificar somente propriedades conhecidas, mas o '{0}' não existe no tipo '{1}'. Você queria ter escrito '{2}'?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "A propriedade '{0}' do literal de objeto implicitamente tem um tipo '{1}'.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objetos que contêm propriedades abreviadas não podem ser inferidos com --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Os objetos que contêm atribuições de espalhamento não podem ser inferidos com --isolatedDeclarations.", - "Octal_digit_expected_1178": "Dígito octal esperado.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Sequências de escape octais e referências inversas não são permitidas em uma classe de caracteres. Se isso foi destinado a uma sequência de escape, use a sintaxe '{0}' em vez disso.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sequências de escape octais não são permitidas. Use a sintaxe '{0}'.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literais octais não são permitidos. Use a sintaxe '{0}'.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Um valor de '{0}.{1}' é a cadeia de caracteres '{2}', e o outro é considerado um valor numérico desconhecido.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "É permitida apenas uma única declaração de variável em uma instrução 'for...in'.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "É permitida apenas uma única declaração de variável em uma instrução 'for...of'.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Apenas uma função void pode ser chamada com a palavra-chave 'new'.", - "Only_ambient_modules_can_use_quoted_names_1035": "Somente os módulos de ambiente podem usar nomes entre aspas.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Há suporte somente aos módulos 'amd' e 'system' ao lado de --{0}.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Somente matrizes const podem ser inferidas com --isolatedDeclarations.", - "Only_emit_d_ts_declaration_files_6014": "Emita somente arquivos de declaração '.d.ts'.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Gerar somente arquivos .d.ts e não arquivos JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Somente métodos protegidos e públicos da classe base são acessíveis pela palavra-chave 'super'.", - "Operator_0_cannot_be_applied_to_type_1_2736": "O operador '{0}' não pode ser aplicado ao tipo '{1}'.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "O operador '{0}' não pode ser aplicado aos tipos '{1}' e '{2}'.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Os operadores não devem ser mistos em uma classe de caracteres. Encapsule-o em uma classe aninhada.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Recusar um projeto de verificação de referência de multiprojeto ao editar.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "A opção '{0}={1}' foi removida. Remova-a da configuração.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "A opção '{0}={1}' foi preterida e deixará de funcionar no TypeScript {2}. Especifique compilerOption '\"ignoreDeprecations\": \"{3}\"' para silenciar esse erro.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'false' ou 'null' na linha de comando.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'null' na linha de comando.", - "Option_0_can_only_be_specified_on_command_line_6266": "A opção '{0}' só pode ser especificada na linha de comando.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "A opção '{0} só pode ser usada quando qualquer uma das opções '--inlineSourceMap' ou '--sourceMap' é fornecida.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "A opção '{0}' só pode ser usada quando 'moduleResolution' está definido como 'node16', 'nodenext' ou 'bundler'.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "A opção \"{0}\" só pode ser usada quando \"module\" estiver definido como \"preserve\", \"commonjs\" ou \"es2015\" ou posterior.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "A opção '{0}' não pode ser especificada quando a opção 'jsx' é '{1}'.", - "Option_0_cannot_be_specified_with_option_1_5053": "A opção '{0}' não pode ser especificada com a opção '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "A opção '{0}' não pode ser especificada sem especificar a opção '{1}'.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "A opção '{0}' não pode ser especificada sem a especificação da opção '{1}' ou '{2}'.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "A opção '{0}' foi removida. Remova-a da configuração.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "A opção '{0}' foi preterida e deixará de funcionar no TypeScript {1}. Especifique compilerOption '\"ignoreDeprecations\": \"{2}\"' para silenciar esse erro.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "A opção '{0}' é redundante e não pode ser especificada com a opção '{1}'.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "A opção “allowImportingTsExtensions” só pode ser usada quando um de “noEmit”, “emitDeclarationOnly” ou “rewriteRelativeImportExtensions” está definido.", - "Option_build_must_be_the_first_command_line_argument_6369": "A opção '--build' precisa ser o primeiro argumento da linha de comando.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "A opção 'isolatedModules' só pode ser usada quando nenhuma opção de '--module' for fornecida ou a opção 'target' for 'ES2015' ou superior.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "A opção 'moduleResolution' deve ser definida como '{0}' (ou deixada não especificada) quando a opção 'module' está definida como '{1}'.", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "A opção 'module' deve ser definida como '{0}' quando a opção 'moduleResolution' está definida como '{1}'.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando '{0}' está habilitada.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "A opção 'project' não pode ser mesclada com arquivos de origem em uma linha de comando.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "A opção '--resolveJsonModule' não pode ser especificada quando 'moduleResolution' está definido como 'classic'.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "A opção '--resolveJsonModule' não pode ser especificada quando 'module' está definido como 'none', 'system' ou 'umd'.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "A opção 'texttimModuleSyntax' não pode ser usada quando 'module' está definido como 'UMD', 'AMD' ou 'System'.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "As opções '{0}' e '{1}' não podem ser combinadas.", - "Options_Colon_6027": "Opções:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Outras Saídas", - "Output_Formatting_6256": "Formatação da Saída", - "Output_compiler_performance_information_after_building_6615": "Gerar informações de desempenho do compilador após a criação.", - "Output_directory_for_generated_declaration_files_6166": "Diretório de saída para os arquivos de declaração gerados.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "O arquivo de saída '{0}' não foi compilado do arquivo de origem '{1}'.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Saída do projeto referenciado '{0}' incluída porque '{1}' está especificado", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Saída do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Gerar informações de desempenho do compilador mais detalhadas após a criação.", - "Overload_0_of_1_2_gave_the_following_error_2772": "A sobrecarga {0} de {1}, '{2}', gerou o seguinte erro.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Assinaturas de sobrecarga devem todas ser abstratas ou não abstratas.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Todas as assinaturas de sobrecarga devem ser ambiente ou não ambiente.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Assinaturas de sobrecarga devem todas ser exportadas ou não exportadas.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Todas as assinaturas de sobrecarga devem ser opcionais ou obrigatórias.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Todas as assinaturas de sobrecarga devem ser protegidas, privadas ou públicas.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "O parâmetro '{0}' não pode referenciar o identificador '{1}' declarado depois dele.", - "Parameter_0_cannot_reference_itself_2372": "O parâmetro '{0}' não pode referenciar a si mesmo.", - "Parameter_0_implicitly_has_an_1_type_7006": "O parâmetro '{0}' implicitamente tem um tipo '{1}'.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "O parâmetro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "O parâmetro '{0}' não está na mesma posição que o parâmetro '{1}'.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "O parâmetro '{0}' do acessador tem ou está usando o nome privado '{1}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "O parâmetro '{0}' da função exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "O parâmetro '{0}' da assinatura de índice da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "O parâmetro '{0}' da assinatura de índice da interface exportadas tem ou está usando o nome privado '{1}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "O parâmetro não pode ter inicializador e ponto de interrogação.", - "Parameter_declaration_expected_1138": "Declaração de parâmetro esperada.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "O parâmetro tem um nome, mas não um tipo. Você quis dizer '{0}: {1}'?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modificadores de parâmetro só podem ser usados em arquivos TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "O parâmetro deve ter uma anotação de tipo explícito com --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analisar em modo estrito e emitir \"usar estrito\" para cada arquivo de origem.", - "Part_of_files_list_in_tsconfig_json_1409": "Parte da lista 'files' no tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "O padrão '{0}' pode ter no máximo um caractere '*'.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Os tempos de desempenho de '--diagnostics' ou '--extendedDiagnostics' não estão disponíveis nesta sessão. Não foi possível encontrar uma implementação nativa da API de Desempenho Web.", - "Platform_specific_6912": "Específico da plataforma", - "Prefix_0_with_an_underscore_90025": "Prefixo '{0}' com um sublinhado", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Prefixar todas as declarações de propriedade incorretas com 'declare'", - "Prefix_all_unused_declarations_with_where_possible_95025": "Prefixar com '_' todas as declarações não usadas quando possível", - "Prefix_with_declare_95094": "Prefixar com 'declare'", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Preserve os valores importados não usados na saída JavaScript que, de outra forma, seriam removidos.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimir todos os arquivos lidos durante a compilação.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Arquivos de impressão lidos durante a compilação, incluindo o motivo de sua inclusão.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima nomes de arquivos e o motivo pelo qual eles fazem parte da compilação.", - "Print_names_of_files_part_of_the_compilation_6155": "Nomes de impressão das partes dos arquivos da compilação.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima nomes de arquivos que fazem parte da compilação e, em seguida, interrompa o processamento.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Nomes de impressão das partes dos arquivos gerados da compilação.", - "Print_the_compiler_s_version_6019": "Imprima a versão do compilador.", - "Print_the_final_configuration_instead_of_building_1350": "Imprima a configuração final em vez de compilar.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimir os nomes dos arquivos emitidos após uma compilação.", - "Print_this_message_6017": "Imprima esta mensagem.", - "Private_accessor_was_defined_without_a_getter_2806": "O acessador privado foi definido sem um getter.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "O campo particular '{0}' deve ser declarado em uma classe delimitadora.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identificadores privados não são permitidos em declarações de variáveis.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identificadores privados não são permitidos fora dos corpos de classe.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identificadores privados são permitidos apenas em corpos de classe e só podem ser usados como parte de uma declaração de membro de classe, acesso de propriedade ou no lado esquerdo de uma expressão 'em'", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identificadores privados só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Não é possível usar identificadores privados como parâmetros.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "O membro privado ou protegido '{0}' não pode ser acessado em um parâmetro de tipo.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "O projeto '{0}' não pode ser compilado porque sua dependência '{1}' tem erros", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "O projeto '{0}' não pode ser criado porque sua dependência '{1}' não foi criada", - "Project_0_is_being_forcibly_rebuilt_6388": "O projeto '{0}' está sendo reconstruído forçadamente", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "O projeto '{0}' está desatualizada porque o arquivo buildinfo '{1}' indica que o arquivo '{2}' era o arquivo raiz da compilação, mas não é mais.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que o programa precisa relatar erros.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que algumas das alterações não foram emitidas", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que há alteração em compilerOptions", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "O projeto '{0}' está desatualizado porque a saída '{1}' é mais antiga que a entrada '{2}'", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "O projeto '{0}' está desatualizado porque o arquivo de saída '{1}' não existe", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "O projeto '{0}' está desatualizado porque a saída foi gerada com a versão '{1}' que difere da versão atual '{2}'", - "Project_0_is_up_to_date_6361": "O projeto '{0}' está atualizado", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "O projeto '{0}' está atualizado porque a entrada mais recente '{1}' é mais antiga que a saída '{2}'", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "O projeto '{0}' está atualizado, mas precisa atualizar os registros de data e hora dos arquivos de saída mais antigos que os arquivos de entrada", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "O projeto '{0}' está atualizado com os arquivos .d.ts de suas dependências", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Referências de projeto não podem formar um gráfico circular. Ciclo detectado: {0}", - "Projects_6255": "Projetos", - "Projects_in_this_build_Colon_0_6355": "Projetos neste build: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Propriedades com o modificador 'acessador' estão disponíveis somente quando o alvo é ECMAScript 2015 e superior.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "A propriedade '{0}' não pode ter um inicializador, pois está marcado como abstrato.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "A propriedade '{0}' vem de uma assinatura de índice, portanto, ela precisa ser acessada com ['{0}'].", - "Property_0_does_not_exist_on_type_1_2339": "A propriedade '{0}' não existe no tipo '{1}'.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "A propriedade '{0}' não existe no tipo '{1}'. Você quis dizer '{2}'?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "A propriedade '{0}' não existe no tipo '{1}'. Você queria acessar o membro estático '{2}'?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "A propriedade '{0}' não existe no tipo '{1}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{2}' ou posterior.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "A propriedade '{0}' não existe no tipo '{1}'. Tente alterar a opção de compilador 'lib' para incluir 'dom'.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "A propriedade “{0}” não tem nenhum inicializador e não está definitivamente atribuída no bloco estático de classe.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "A propriedade '{0}' não tem nenhum inicializador e não está definitivamente atribuída no construtor.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador get não tem uma anotação de tipo de retorno.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador set não tem uma anotação de tipo de parâmetro.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador get pode ser inferido do uso.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador set pode ser inferido do uso.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída à mesma propriedade no tipo base '{2}'.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída ao tipo '{2}'.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "A propriedade '{0}' no tipo '{1}' se refere a um membro diferente que não pode ser acessado por meio do tipo '{2}'.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "A propriedade '{0}' é declarada, mas seu valor nunca é lido.", - "Property_0_is_incompatible_with_index_signature_2530": "A propriedade '{0}' é incompatível com a assinatura de índice.", - "Property_0_is_missing_in_type_1_2324": "A propriedade '{0}' está ausente no tipo '{1}'.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "A propriedade '{0}' está ausente no tipo '{1}', mas é obrigatória no tipo '{2}'.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "A propriedade '{0}' não é acessível fora da classe '{1}' porque tem um identificador privado.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "A propriedade '{0}' é opcional no tipo '{1}', mas obrigatória no tipo '{2}'.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "A propriedade '{0}' é particular e somente é acessível na classe '{1}'.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "A propriedade '{0}' é particular no tipo '{1}', mas não no tipo '{2}'.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "A propriedade '{0}' está protegida e só pode ser acessada por meio de uma instância da classe '{1}'. Esta é uma instância da classe '{2}'.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "A propriedade '{0}' é protegida e somente é acessível na classe '{1}' e em suas subclasses.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "A propriedade '{0}' é protegida, mas o tipo '{1}' não é uma classe derivada de '{2}'.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "A propriedade '{0}' é protegida no tipo '{1}', mas pública no tipo '{2}'.", - "Property_0_is_used_before_being_assigned_2565": "A propriedade '{0}' é usada antes de ser atribuída.", - "Property_0_is_used_before_its_initialization_2729": "A propriedade '{0}' é usada antes da inicialização.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "A propriedade pode não existir '{0}' no tipo '{1}'. Você quis dizer '{2}'?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "A propriedade \"{0}\" do atributo de espalhamento JSX não pode ser atribuída à propriedade de destino.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "A propriedade '{0}' do tipo de classe anônima exportada pode não ser privada ou protegida.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "A propriedade '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "A propriedade '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "A propriedade '{0}' do tipo '{1}' não pode ser atribuída ao '{2}' tipo de índice '{3}'.", - "Property_0_was_also_declared_here_2733": "A propriedade '{0}' também foi declarada aqui.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "A propriedade '{0}' substituirá a propriedade base em '{1}'. Se isso for intencional, adicione um inicializador. Caso contrário, adicione um modificador 'declare' ou remova a declaração redundante.", - "Property_assignment_expected_1136": "Atribuição de propriedade esperada.", - "Property_destructuring_pattern_expected_1180": "Padrão de desestruturação de propriedade esperado.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "A propriedade deve ter uma anotação de tipo explícita com --isolatedDeclarations.", - "Property_or_signature_expected_1131": "Propriedade ou assinatura esperada.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "O valor da propriedade pode ser somente um literal de cadeia, um literal numérico, 'true', 'false', 'null', literal de objeto ou literal de matriz.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornecer suporte completo para os iteráveis em 'for-of', espalhamento e desestruturação ao direcionar 'ES5'.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "O método público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "O método estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "O nome qualificado '{0}' não é permitido sem um '@param {object} {1}' à esquerda.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Gerar um erro quando um parâmetro de função não for lido.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Gerar erro em expressões e declarações com um tipo 'any' implícito.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Gerar erro em expressões 'this' com um tipo 'any' implícito.", - "Range_out_of_order_in_character_class_1517": "Intervalo fora de ordem na classe de caracteres.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Exportar novamente um tipo quando '{0}' está habilitado requer o uso de 'tipo de exportação'.", - "React_components_cannot_include_JSX_namespace_names_2639": "Os componentes react não podem incluir nomes de namespace JSX", - "Recommended_Options_6294": "Opções Recomendadas", - "Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzir o número de projetos carregados automaticamente pelo TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "O projeto referenciado '{0}' pode não desabilitar a emissão.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.", - "Referenced_via_0_from_file_1_1400": "Referenciado via '{0}' do arquivo '{1}'", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Considere adicionar uma extensão ao caminho de importação.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Você quis dizer '{0}'?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Remova uma lista de diretórios do processo de inspeção.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Remover uma lista de arquivos do processamento do modo de inspeção.", - "Remove_all_unnecessary_override_modifiers_95163": "Remover todos os modificadores 'override' desnecessários", - "Remove_all_unnecessary_uses_of_await_95087": "Remover todos os usos desnecessários de 'await'", - "Remove_all_unreachable_code_95051": "Remover todo o código inacessível", - "Remove_all_unused_labels_95054": "Remover todos os rótulos não utilizados", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Remover as chaves de todos os corpos de função de seta com problemas relevantes", - "Remove_braces_from_arrow_function_95060": "Remover chaves da função de seta", - "Remove_braces_from_arrow_function_body_95112": "Remover as chaves do corpo de função de seta", - "Remove_import_from_0_90005": "Remover importação de '{0}'", - "Remove_override_modifier_95161": "Remover o modificador 'override'", - "Remove_parentheses_95126": "Remover os parênteses", - "Remove_template_tag_90011": "Remover marca de modelo", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Remover o limite de 20MB no tamanho total do código-fonte para arquivos JavaScript no servidor de linguagem TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Remover 'type' da declaração de importação \"{0}\"", - "Remove_type_from_import_of_0_from_1_90056": "Remover 'type' da importação de '{0}' de \"{1}\"", - "Remove_type_parameters_90012": "Remover parâmetros de tipo", - "Remove_unnecessary_await_95086": "Remover 'await' desnecessário", - "Remove_unreachable_code_95050": "Remover código inacessível", - "Remove_unused_declaration_for_Colon_0_90004": "Remover declaração não usada para: '{0}'", - "Remove_unused_declarations_for_Colon_0_90041": "Remova as declarações não usadas de: '{0}'", - "Remove_unused_destructuring_declaration_90039": "Remova a declaração de desestruturação não usada", - "Remove_unused_label_95053": "Remover rótulo não utilizado", - "Remove_variable_statement_90010": "Remover instrução de variável", - "Rename_param_tag_name_0_to_1_95173": "Renomear o nome da marca '@param' '{0}' como '{1}'", - "Replace_0_with_Promise_1_90036": "Substituir '{0}' por 'Promise<{1}>'", - "Replace_all_unused_infer_with_unknown_90031": "Substituir todos os 'infer' não usados por 'unknown'", - "Replace_import_with_0_95015": "Substitua a importação com '{0}'.", - "Replace_infer_0_with_unknown_90030": "Substituir 'infer {0}' por 'unknown'", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Relate erro quando nem todos os caminhos de código na função retornarem um valor.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Relate erros para casos de fallthrough na instrução switch.", - "Report_errors_in_js_files_8019": "Relatar erros em arquivos .js.", - "Report_errors_on_unused_locals_6134": "Relatar erros nos locais não utilizados.", - "Report_errors_on_unused_parameters_6135": "Relatar erros nos parâmetros não utilizados.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exigir anotação suficiente em exportações para que outras ferramentas possam gerar arquivos de declaração trivialmente.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Os parâmetros de tipo necessários podem não seguir os parâmetros de tipo opcionais.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "A resolução para o módulo '{0}' foi encontrada no cache do local '{1}'.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "A resolução para a diretiva de referência de tipo '{0}' foi encontrada no cache a partir do local '{1}'.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Falha na resolução de nome não relativo; tentando com recursos modernos de resolução de Nó desabilitados para ver se a biblioteca npm precisa de atualização de configuração.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Falha na resolução de nome não relativo; tentando com '--moduleResolution bundler' para ver se o projeto pode precisar de atualização de configuração.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolva 'keyof' somente para nomes de propriedades com valores de cadeia de caracteres (sem números nem símbolos).", - "Resolved_under_condition_0_6414": "Resolvido sob a condição '{0}'.", - "Resolving_in_0_mode_with_conditions_1_6402": "Resolvendo no modo {0} com condições {1}.", - "Resolving_module_0_from_1_6086": "======== Resolvendo módulo '{0}' de '{1}'. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolvendo nome de módulo '{0}' relativo à URL base '{1}' - '{2}'.", - "Resolving_real_path_for_0_result_1_6130": "Resolvendo o caminho real de '{0}', resultado '{1}'.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolvendo a diretiva de tipo de referência '{0}', contendo o arquivo '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz '{2}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz não configurado. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz não configurado. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolvendo diretiva de referência de tipo para o programa que especifica typeRoots personalizado, ignorando a pesquisa na pasta 'node_modules'.", - "Resolving_with_primary_search_path_0_6121": "Resolvendo com caminho de pesquisa primário '{0}'.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "O parâmetro rest '{0}' implicitamente tem um tipo 'any[]'.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "O parâmetro REST '{0}' implicitamente tem um tipo 'any[]', mas um tipo melhor pode ser inferido do uso.", - "Rest_types_may_only_be_created_from_object_types_2700": "Os tipos de rest podem ser criado somente de tipos de objeto.", - "Return_type_annotation_circularly_references_itself_2577": "A anotação de tipo de retorno faz referência circular a si mesma.", - "Return_type_must_be_inferred_from_a_function_95149": "O tipo de retorno precisa ser inferido de uma função", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "O tipo de retorno da assinatura de construtor deve ser atribuível ao tipo de instância da classe.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "O tipo de retorno da função exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "O tipo de retorno do método da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "O tipo de retorno do método da interface exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "O tipo de retorno do método público da classe exportada tem ou está usando o nome particular '{0}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome particular '{0}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', não foi resolvido.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', foi resolvido com sucesso para '{3}' com ID do Pacote '{4}'.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, não foi resolvido.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com a ID do pacote '{3}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', não foi resolvido.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso '{3}' com ID do Pacote '{4}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, não foi resolvido.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Reutilizando a resolução do tipo diretriz de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com ID do Pacote '{3}'.", - "Rewrite_all_as_indexed_access_types_95034": "Reescrever tudo como tipos de acesso indexados", - "Rewrite_as_the_indexed_access_type_0_90026": "Reescrever como o tipo de acesso indexado '{0}'", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Reescreva as extensões de arquivo \".ts\", \".tsx\", \".mts\" e \".cts\" em caminhos de importação relativos para seu equivalente em JavaScript nos arquivos de saída.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Operando direito de ?? está inacessível porque o operando esquerdo nunca é nulo.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Diretório raiz não pode ser determinado, ignorando caminhos de pesquisa primários.", - "Root_file_specified_for_compilation_1427": "Arquivo raiz especificado para compilação", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "ESTRATÉGIA", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salvar arquivos .tsbuildinfo para permitir a compilação incremental de projetos.", - "Saw_non_matching_condition_0_6405": "Viu condição de não correspondência '{0}'.", - "Scoped_package_detected_looking_in_0_6182": "Pacote com escopo detectado, procurando no '{0}'", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões de fallback: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões preferenciais: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Confira também https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "A seleção não é uma instrução ou instruções válidas", - "Selection_is_not_a_valid_type_node_95133": "A seleção não é um nó de tipo válido", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Definir a versão do idioma do JavaScript para o JavaScript emitido e incluir as declarações de biblioteca compatíveis.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Definir o idioma das mensagens do TypeScript. Isso não afeta a emissão.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Defina a opção 'module' no arquivo de configuração para '{0}'", - "Set_the_newline_character_for_emitting_files_6659": "Definir o caractere de nova linha para a emissão de arquivos.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Defina a opção 'target' no arquivo de configuração para '{0}'", - "Setters_cannot_return_a_value_2408": "Setters não podem retornar um valor.", - "Show_all_compiler_options_6169": "Mostrar todas as opções do compilador.", - "Show_diagnostic_information_6149": "Mostras as informações de diagnóstico.", - "Show_verbose_diagnostic_information_6150": "Mostras as informações detalhadas de diagnóstico.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar o que seria compilado (ou excluído, se especificado com '--clean')", - "Signature_0_must_be_a_type_predicate_1224": "A assinatura '{0}' deve ser um predicado de tipo.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "As declarações de assinatura só podem ser usadas em arquivos TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorar a criação de projetos downstream em caso de erro no projeto upstream.", - "Skip_type_checking_all_d_ts_files_6693": "Ignorar verificação de tipo de todos os arquivos .d.ts.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorar verificação de tipo de arquivos .d.ts que estão incluídos com TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Ignorar a verificação de tipo dos arquivos de declaração.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorando o build do projeto '{0}' porque a dependência '{1}' tem erros", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorando o build do projeto '{0}' porque a dependência '{1}' não foi criada", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Ignorando o módulo '{0}' que se parece com um URI absoluto, tipos de arquivo de destino: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Origem do projeto referenciado '{0}' incluída porque '{1}' está especificado", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Origem do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", - "Source_has_0_element_s_but_target_allows_only_1_2619": "A origem tem {0} elementos, mas o destino permite somente {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "A origem tem {0} elementos, mas o destino exige {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "A fonte não fornece nenhuma correspondência para o elemento necessário na posição {0} no destino.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "A fonte não fornece nenhuma correspondência para o elemento variádico na posição {0} no destino.", - "Specify_ECMAScript_target_version_6015": "Especifique a versão de destino do ECMAScript.", - "Specify_JSX_code_generation_6080": "Especifique a geração do código JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especificar um arquivo que agrupa todas as saídas em um arquivo JavaScript. Se 'declaração' for true, também designará um arquivo que incluirá todas as saídas .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especificar uma lista de padrões glob que correspondam aos arquivos a serem incluídos na compilação.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Especificar uma lista de plug-ins de serviço de linguagem a incluir.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especificar um conjunto de arquivos de declaração de biblioteca empacotados que descreva o ambiente de tempo de runtime de destino.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especificar um conjunto de entradas que remapeiem importações para locais de pesquisa adicionais.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique uma matriz de objetos que especificam caminhos para projetos. Usado em referências de projeto.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Especificar uma pasta de saída para todos os arquivos emitidos.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar o comportamento de emissão/verificação para importações que são usadas somente para tipos.", - "Specify_file_to_store_incremental_compilation_information_6380": "Especificar arquivo para armazenar informações de compilação incremental", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique como o TypeScript procura um arquivo de um determinado especificador de módulo.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especificar como os diretórios são observados nos sistemas que não têm a funcionalidade recursiva de inspeção de arquivo.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique como funciona o modo de inspeção TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique os arquivos de biblioteca a serem incluídos na compilação.", - "Specify_module_code_generation_6016": "Especifique a geração do código do módulo.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especificar o especificador de módulo usado para importar as funções de fábrica JSX ao usar 'jsx: react-jsx*'.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especificar várias pastas que agem como './node_modules/@types '.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especificar uma ou mais referências de módulo ou nó para os arquivos de configuração base dos quais as configurações são herdadas.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique opções para aquisição automática de arquivos de declaração.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique a estratégia para criar uma inspeção de sondagem quando não conseguir criar usando eventos do sistema de arquivos: 'FixedInterval' (padrão), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique a estratégia para observar ao diretório em plataformas que não têm suporte à observação recursiva nativamente: 'UseFsEvents' (padrão), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique a estratégia para observar ao arquivo: 'FixedPollingInterval' (padrão), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique a referência do fragmento JSX usada para fragmentos ao direcionar o React JSX emit, por exemplo, 'React.Fragment' ou 'Fragment'.", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique a função de fábrica JSX a ser usada ao direcionar a emissão 'react' do JSX, por ex., 'React.createElement' ou 'h'.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique a função de fábrica JSX usada ao direcionar o React JSX emit, por exemplo, 'React.createElement' ou 'h'.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique a função de alocador do fragmento JSX a ser usada no direcionamento de uma emissão de JSX 'react' com a opção do compilador 'jsxFactory' especificada, por exemplo, 'Fragment'.", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especificar o diretório base para resolver nomes de módulos não relativos.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique o fim da sequência de linha a ser usado ao emitir arquivos: 'CRLF' (dos) ou 'LF' (unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique o local onde o depurador deve localizar arquivos TypeScript em vez de locais de origem.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique o local onde o depurador deve localizar arquivos de mapa em vez de locais gerados.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique a profundidade máxima da pasta usada para verificar os arquivos JavaScript de 'node_modules'. Aplicável apenas com 'allowJs'.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique o especificador do módulo a ser utilizado para importar as funções 'jsx' e 'jsxs' de fábrica, por exemplo, react", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique o objeto invocado para 'createElement'. Isso se aplica apenas ao direcionar a emissão JSX 'react'.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique o diretório de saída para os arquivos de declaração gerados.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Especifique o caminho para o arquivo de compilação incremental .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique o diretório raiz de arquivos de entrada. Use para controlar a estrutura do diretório de saída com --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Especifique a pasta raiz em seus arquivos de origem.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique o caminho raiz para que os depuradores localizem o código-fonte de referência.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique os nomes dos pacotes de tipo a serem incluídos sem serem referenciados em um arquivo de origem.", - "Specify_what_JSX_code_is_generated_6646": "Especifique qual código JSX é gerado.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especificar qual abordagem a inspeção deverá usar se o sistema ficar sem os observadores de arquivo nativos.", - "Specify_what_module_code_is_generated_6657": "Especifique qual código do módulo é gerado.", - "Split_all_invalid_type_only_imports_1367": "Dividir todas as importações somente de tipo inválidas", - "Split_into_two_separate_import_declarations_1366": "Dividir em duas declarações de importação separadas", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "O operador de espalhamento só está disponível em expressões 'new' no direcionamento a ECMAScript 5 e superior.", - "Spread_types_may_only_be_created_from_object_types_2698": "Os tipos de espalhamento podem ser criados apenas de tipos de objeto.", - "Starting_compilation_in_watch_mode_6031": "Iniciando compilação no modo de inspeção...", - "Statement_expected_1129": "Instrução esperada.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Instruções não são permitidas em contextos de ambiente.", - "Static_members_cannot_reference_class_type_parameters_2302": "Membros estáticos não podem fazer referência a parâmetros de tipo de classe.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Conflitos de propriedade estática '{0}' com propriedade interna 'Function.{0}' da função de construtor '{1}'.", - "Stricter_Typechecking_Options_6292": "Opções de Verificação de Tipo Mais Estritas", - "String_literal_expected_1141": "Literal de cadeia de caracteres esperado.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Não há suporte para nomes de importação e exportação de literal de cadeia de caracteres quando o sinalizador '--module' está definido como 'es2015' ou 'es2020'.", - "String_literal_with_double_quotes_expected_1327": "Literal de cadeia com aspas duplas é esperado.", - "Style_Options_6293": "Opções de Estilo", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Estilizar erros e mensagens usando cor e contexto (experimental).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Sinalizadores de subpadrão devem estar presentes quando há um sinal de subtração.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Declarações de propriedade subsequentes devem ter o mesmo tipo. A propriedade '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Declarações de variável subsequentes devem ter o mesmo tipo. A variável '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "A substituição '{0}' para o padrão '{1}' tem um tipo incorreto, 'string' esperada, obteve '{2}'.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "A substituição '{0}' no padrão '{1}' pode ter no máximo um caractere '*'.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "As substituições para o padrão '{0}' devem ser uma matriz.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Substituições para o padrão '{0}' não devem ser uma matriz vazia.", - "Successfully_created_a_tsconfig_json_file_6071": "Arquivo tsconfig.json criado com êxito.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "As chamadas super não são permitidas fora dos construtores ou em funções aninhadas dentro dos construtores.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Verificações de propriedade de excesso de compactação para literais de objeto.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Suprimir erros de noImplicitAny para objetos de indexação sem assinaturas de índice.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprimir erros 'noImplicitAny' ao indexar objetos que não têm assinaturas de índice.", - "Switch_each_misused_0_to_1_95138": "Mude cada '{0}' usado incorretamente para '{1}'", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chame sincronicamente retornos de chamadas e atualize o estado de observadores de diretório em plataformas que não têm suporte à observação recursiva nativamente.", - "Syntax_Colon_0_6023": "Sintaxe: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "A tag '{0}' espera no mínimo '{1}' argumentos, mas o alocador JSX '{2}' fornece no máximo '{3}'.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Expressões de modelo marcado não são permitidas em uma cadeia opcional.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "O destino permite apenas {0} elementos, mas a origem pode ter mais.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "O destino exige {0} elementos, mas a origem pode ter menos.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "A assinatura de destino fornece poucos argumentos. Esperava {0} ou mais, mas obteve {1}.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "O modificador '{0}' só pode ser usado em arquivos TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "O operador '{0}' não pode ser aplicado ao tipo 'symbol'.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "O operador '{0}' não é permitido para tipos boolianos. Considere usar '{1}'.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "A propriedade '{0}' de um iterador assíncrono deve ser um método.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "A propriedade '{0}' de um iterador deve ser um método.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "O tipo 'Objeto' pode ser atribuído para muito poucos outros tipos. Você desejava usar o tipo 'qualquer' ao invés disso?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "O sinalizador Unicode (u) e o sinalizador Conjuntos Unicode (v) não podem ser definidos simultaneamente.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES5. Considere usar uma expressão de função padrão.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES5. Considere usar uma função ou um método padrão.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "O corpo de uma instrução 'if' não pode ser uma instrução vazia.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "A chamada teria sido bem-sucedida nesta implementação, mas as assinaturas de implementação de sobrecargas não estão visíveis externamente.", - "The_character_set_of_the_input_files_6163": "O conjunto de caracteres dos arquivos de entrada.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "A função de seta contida captura o valor global de 'this'.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "O corpo da função ou do módulo contido é muito grande para a análise de fluxo de controle.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "O arquivo atual é um módulo CommonJS e não pode usar 'await' no nível superior.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "O arquivo atual é um módulo CommonJS cujas importações produzirão chamadas 'require'; no entanto, o arquivo referenciado é um módulo ECMAScript e não pode ser importado com 'require'. Considere escrever uma chamada 'import(\"{0}\")' dinâmica em vez disso.", - "The_current_host_does_not_support_the_0_option_5001": "O host atual não dá suporte à opção '{0}'.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "A declaração de '{0}' que você provavelmente pretende usar é definida aqui", - "The_declaration_was_marked_as_deprecated_here_2798": "A declaração foi marcada como preterida aqui.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "O tipo esperado vem da propriedade '{0}', que é declarada aqui no tipo '{1}'", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "O tipo esperado vem do tipo de retorno dessa assinatura.", - "The_expected_type_comes_from_this_index_signature_6501": "O tipo esperado vem dessa assinatura de índice.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "A expressão de uma atribuição de exportação deve ser um identificador ou nome qualificado em um contexto de ambiente.", - "The_file_is_in_the_program_because_Colon_1430": "O arquivo está no programa porque:", - "The_files_list_in_config_file_0_is_empty_18002": "A lista de 'arquivos' no arquivo de configuração '{0}' está vazia.", - "The_first_export_default_is_here_2752": "O primeiro padrão de exportação está aqui.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "O primeiro parâmetro do método 'then' de uma promessa deve ser um retorno de chamada.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "O tipo global 'JSX.{0}' não pode ter mais de uma propriedade.", - "The_implementation_signature_is_declared_here_2750": "A assinatura de implementação é declarada aqui.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "A meta da propriedade 'import.meta' não é permitida em arquivos que serão compilados na saída do CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "A meta-propriedade “import.meta” só é permitida quando a opção “--module” for “es2020”, “es2022”, “esnext”, “system”, “node16”, “node18”, “node20” ou “nodenext”.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "O tipo inferido de '{0}' não pode ser nomeado sem uma referência a '{1}'. Isso provavelmente não é portátil. Uma anotação de tipo é necessária.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "O tipo inferido '{0}' faz referência a um tipo com uma estrutura cíclica que não pode ser serializada trivialmente. Uma anotação de tipo é necessária.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "O tipo inferido de '{0}' faz referência a um tipo '{1}' inacessível. Uma anotação de tipo é necessária.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "O tipo inferido deste nó excede o tamanho máximo que o compilador serializará. Uma anotação de tipo explícita é necessária.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "O inicializador de uma declaração 'using' deve ser um objeto com um método '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "O inicializador de uma declaração 'await using' deve ser um objeto com um método '[Symbol.asyncDispose]()' ou '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' existe em vários constituintes e é privada em alguns.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' tem tipos conflitantes em alguns constituintes.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "A palavra-chave 'intrinsic' só pode ser usada para declarar tipos intrínsecos fornecidos pelo compilador.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "A opção do compilador 'jsxFragmentFactory' precisa ser fornecida para que se possa usar fragmentos JSX com a opção do compilador 'jsxFactory'.", - "The_last_overload_gave_the_following_error_2770": "A última sobrecarga gerou o seguinte erro.", - "The_last_overload_is_declared_here_2771": "A última sobrecarga é declarada aqui.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "O lado esquerdo de uma instrução 'for...in' não pode ser um padrão de desestruturação.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'using'.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'await using'.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "O lado esquerdo de uma instrução 'for...in' não pode usar uma anotação de tipo.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "O lado esquerdo de uma instrução 'for...in' pode não ser um acesso opcional de propriedade.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "O lado esquerdo de uma instrução 'for...in' deve ser uma variável ou um acesso à propriedade.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "O lado esquerdo de uma instrução de 'for...in' deve ser do tipo 'string' ou 'any'.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "O lado esquerdo de uma instrução 'for...of' não pode usar uma anotação de tipo.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "O lado esquerdo de uma instrução 'for...of' pode não ser um acesso opcional de propriedade.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "O lado esquerdo de uma instrução 'for...of' não pode ser 'assíncrono'.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "O lado esquerdo de uma instrução 'for...of' deve ser uma variável ou um acesso à propriedade.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "O lado esquerdo de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "O lado esquerdo de uma expressão de atribuição pode não ser um acesso opcional de propriedade.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "O lado esquerdo de uma expressão de atribuição deve ser uma variável ou um acesso à propriedade.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "O lado esquerdo de uma expressão 'instanceof' deve ser atribuível ao primeiro argumento do método '[Symbol.hasInstance]' do lado direito.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "O lado esquerdo de uma expressão 'instanceof' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "O local usado ao exibir mensagens ao usuário (por exemplo, 'en-us')", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "A profundidade máxima de dependência a ser pesquisada em arquivos node_modules e de carregamento de JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "O operando de um operador 'delete' pode não ser um identificador privado.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "O operando de um operador 'delete' não pode ser uma propriedade somente leitura.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "O operando de um operador 'delete' deve ser uma referência de propriedade.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "O operando de um operador 'delete' precisa ser opcional.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "O operando de um operador de incremento ou decremento pode não ser um acesso opcional de propriedade.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "O operando de um operador de incremento ou decremento deve ser uma variável ou um acesso à propriedade.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "O analisador esperava localizar um '{1}' para corresponder ao token '{0}' aqui.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada de mapa de exportação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada do mapa de importação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "A propriedade '{0}' não pode ser acessada no tipo '{1}' dentro dessa classe porque ela é sombreada por outro identificador privado com a mesma grafia.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "O tipo de retorno de uma função de decorador de parâmetro deve ser 'void' ou 'any'.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "O tipo de retorno de uma função de decorador de propriedade deve ser 'void' ou 'any'.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "O tipo de retorno de uma função assíncrona deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "O tipo de retorno de uma função assíncrona ou método deve ser o tipo Promessa global.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "O tipo de retorno de uma função assíncrona ou método precisa ser o tipo Promise global. Você quis escrever 'Promise<{0}>'?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "O lado direito de uma instrução 'for...in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo, mas aqui ele tem o tipo '{0}'.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "O lado direito de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any', uma classe, uma função ou outro tipo atribuível ao tipo de interface 'Function' ou um tipo de objeto com um método 'Symbol.hasInstance'.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "O lado direito de uma expressão 'instanceof' não deve ser uma expressão de instanciação.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "O valor raiz de um arquivo '{0}' precisa ser um objeto.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera {0}.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera pelo menos {0}.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "A declaração de sombreamento de '{0}' é definida aqui", - "The_signature_0_of_1_is_deprecated_6387": "A assinatura '{0}' de '{1}' foi preterida.", - "The_specified_path_does_not_exist_Colon_0_5058": "O caminho especificado não existe: '{0}'.", - "The_tag_was_first_specified_here_8034": "A marca foi especificada primeiro aqui.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "O destino de uma atribuição REST de objeto pode não ser um acesso opcional de propriedade.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "O destino de uma atribuição rest de objeto deve ser uma variável ou um acesso de propriedade.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "O contexto 'this' de tipo '{0}' não é atribuível para o 'this' do método de tipo '{1}'.", - "The_this_types_of_each_signature_are_incompatible_2685": "Os tipos 'this' de cada assinatura são incompatíveis.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "O tipo '{0}' é 'readonly' e não pode ser atribuído ao tipo mutável '{1}'.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "O modificador “type” não pode ser usado em uma exportação nomeada quando “export type” for usado em sua instrução de exportar.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "O modificador “type” não pode ser usado em uma importação nomeada quando “import type” for usado em sua instrução de importar.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "O tipo deste nó não pode ser serializado porque sua propriedade '{0}' não pode ser serializada.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "O tipo retornado pelo método '{0}()' de um iterador assíncrono deve ser uma promessa para um tipo com a propriedade 'value'.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "O tipo retornado pelo método '{0}()' de um iterador deve ter uma propriedade 'value'.", - "The_types_of_0_are_incompatible_between_these_types_2200": "Os tipos de '{0}' são incompatíveis entre esses tipos.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Os tipos retornados por '{0}' são incompatíveis entre esses tipos.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "O valor '{0}' não pode ser usado aqui.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "A declaração de variável de uma instrução 'for...in' não pode ter um inicializador.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "A declaração de variável de uma instrução 'for...of' não pode ter um inicializador.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "A instrução \"with\" não tem suporte. Todos os símbolos em um bloco \"with\" terão o tipo \"any\".", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido na configuração 'moduleResolution' atual. Considere atualizar para 'node16', 'nodenext' ou 'bundler'.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido ao respeitar as \"exportações\" do package.json. A biblioteca '{1}' pode precisar atualizar o package.json ou as digitações.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Não há nenhum grupo de captura chamado '{0}' nesta expressão regular.", - "There_is_nothing_available_for_repetition_1507": "Não há nada disponível para repetição.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Essa marca JSX requer que \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Essa marca JSX requer a existência do caminho do módulo \"{0}\", mas não foi possível encontrar nenhum. Verifique se você tem os tipos do pacote apropriado instalados.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "A propriedade '{0}' da marca desse JSX espera um único filho do tipo '{1}', mas vários filhos foram fornecidos.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "A propriedade '{0}' da marca desse JSX espera o tipo '{1}' que requer vários filhos, mas somente um único filho foi fornecido.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Essa referência inversa refere-se a um grupo que não existe. Não há grupos de captura nessa expressão regular.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Essa referência inversa refere-se a um grupo que não existe. Há apenas {0} grupos de captura nesta expressão regular.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Essa expressão binária nunca é nula. Está faltando parênteses?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este caractere não pode ser escapado em uma expressão regular.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparação parece não ser intencional porque os tipos '{0}' e '{1}' não têm sobreposição.", - "This_condition_will_always_return_0_2845": "Esta condição sempre retornará '{0}'.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Essa condição sempre retornará '{0}', pois o JavaScript compara objetos por referência, não por valor.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condição sempre retornará verdadeiro, já que este '{0}' está sempre definido.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condição sempre retornará verdadeira, uma vez que esta função foi sempre definida. Você pretendia chamá-la em vez disso?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta função de construtor pode ser convertida em uma declaração de classe.", - "This_expression_is_always_nullish_2871": "Essa expressão sempre é nula.", - "This_expression_is_never_nullish_2881": "Esta expressão nunca é nula.", - "This_expression_is_not_callable_2349": "Essa expressão não pode ser chamada.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Esta expressão não pode ser chamada porque é um acessador 'get'. Você quis usá-la sem '()'?", - "This_expression_is_not_constructable_2351": "Essa expressão não pode ser construída.", - "This_file_already_has_a_default_export_95130": "Este arquivo já tem uma exportação padrão", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Não é seguro reescrever esse caminho de importação porque ele é resolvido em outro projeto, e o caminho relativo entre os arquivos de saída dos projetos não é o mesmo que o caminho relativo entre seus arquivos de entrada.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Essa importação usa uma extensão \"{0}\" para resolver um arquivo TypeScript de entrada, mas não será reescrita durante a emissão porque não é um caminho relativo.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta é a declaração que está sendo aumentada. Considere mover a declaração em aumento para o mesmo arquivo.", - "This_kind_of_expression_is_always_falsy_2873": "Esse tipo de expressão é sempre inválido.", - "This_kind_of_expression_is_always_truthy_2872": "Esse tipo de expressão é sempre verdadeiro.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Isso pode ser convertido em uma função assíncrona.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque ele não está declarado na classe base '{0}'.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Esse membro não pode ter um comentário JSDoc com uma marca 'override' porque ele não está declarado na classe base '{0}'. Você quis dizer '{1}'?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque sua classe que contém '{0}' não estende outra classe.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Esse membro não pode ter um comentário JSDoc com uma marcação '@override' porque seu nome é dinâmico.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este membro não pode ter um modificador 'override' porque não está declarado na classe base '{0}'.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Esse membro não pode ter um modificador de 'substituição' porque ele não é declarado na classe base '{0}'. Você quis dizer '{1}'?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este membro não pode ter um modificador 'override' porque a classe que o contém, '{0}', não se estende para outra classe.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Este membro não pode ter um modificador 'override' porque seu nome é dinâmico.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Essa membro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este membro precisa ter um modificador 'override' porque substitui um membro na classe base '{0}'.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este membro precisa ter um modificador 'override' porque substitui um método abstrato que é declarado na classe base '{0}'.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Esse módulo só pode ser referenciado com importações/exportações de ECMAScript ligando o sinalizador '{0}' e referenciando sua exportação padrão.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo é declarado com 'export =', e só pode ser usado com uma importação padrão ao usar o sinalizador '{0}'.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Essa operação pode ser simplificada. Essa mudança é idêntica a `{0} {1} {2}`.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Essa sobrecarga retorna implicitamente o tipo '{0}' porque não tem uma anotação de tipo de retorno.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta assinatura de sobrecarga não é compatível com sua assinatura de implementação.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parâmetro não é permitido com a diretiva 'use strict'.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Essa propriedade de parâmetro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propriedade de parâmetro deve ter uma modificação de 'substituição' porque substitui um membro na classe base '{0}'.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esse sinalizador de expressão regular não pode ser alternado em um subpadrão.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esse sinalizador de expressão regular só está disponível ao direcionar para '{0}' ou posterior.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Não é seguro reescrever esse caminho de importação relativo porque ele se parece com um nome de arquivo, mas, na verdade, é resolvido como \"{0}\".", - "This_spread_always_overwrites_this_property_2785": "Essa difusão sempre substitui essa propriedade.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Esta sintaxe não é permitida quando 'erasableSyntaxOnly' está habilitado.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Adicione uma vírgula final ou restrição explícita.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Em vez disso, use uma expressão `as`.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Essa sintaxe requer um auxiliar importado, mas o módulo '{0}' não pode ser encontrado.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxe requer um auxiliar importado chamado '{1}' que não existe em '{0}'. Considere atualizar sua versão do '{0}'.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxe exige um auxiliar importado nomeado como '{1}' com parâmetros {2}, o que não é compatível com o que está em '{0}'. Considere atualizar sua versão do '{0}'.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Este parâmetro de tipo pode precisar de uma restrição `extends {0}`.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Este uso de 'importar' é inválido. Chamadas 'import()' podem ser escritas, mas devem ter parênteses e não podem ter argumentos de tipo.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Para converter este arquivo em um módulo ECMAScript, adicione o campo `\"type\": \"module\"` a '{0}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou adicione o campo `\"type\": \"module\"` para '{1}'.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou crie um arquivo package.json local com `{ \"type\": \"module\" }`.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para converter este arquivo em um módulo ECMAScript, crie um arquivo package.json local com `{ \"type\": \"module\" }`.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "As expressões “await” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "As instruções “await using” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "As declarações de nível superior em arquivos .d.ts devem começar com um modificador 'declare' ou 'export'.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Os loops “for await” de nível superior só são permitidos quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", - "Trailing_comma_not_allowed_1009": "Vírgula à direita não permitida.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transcompilar cada arquivo como um módulo separado (do mesmo modo que 'ts.transpileModule').", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Tente `npm i --save-dev @types/{1}` caso exista ou adicione um novo arquivo de declaração (.d.ts) contendo `declare module '{0}';`", - "Trying_other_entries_in_rootDirs_6110": "Tentando outras entradas em 'rootDirs'.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Tentando substituição '{0}', local de módulo candidato: '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "O tipo de tupla '{0}' de comprimento '{1}' não tem nenhum elemento no índice '{2}'.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Os argumentos de tipo de tupla se referenciam circularmente.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "O tipo '{0}' só pode ser iterado usando o sinalizador '--downlevelIteration' ou um '--target' igual a 'es2015' ou superior.", - "Type_0_cannot_be_used_as_an_index_type_2538": "O tipo '{0}' não pode ser usado como um tipo de índice.", - "Type_0_cannot_be_used_to_index_type_1_2536": "O tipo '{0}' não pode ser usado para indexar o tipo '{1}'.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "O tipo '{0}' não satisfaz a restrição '{1}'.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "O tipo '{0}' não atende ao tipo esperado '{1}'.", - "Type_0_has_no_call_signatures_2757": "O tipo '{0}' não tem assinaturas de chamada.", - "Type_0_has_no_construct_signatures_2761": "O tipo '{0}' não tem assinaturas de constructo.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "O tipo '{0}' não tem assinatura de índice correspondente para o tipo '{1}'.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "O tipo '{0}' não tem propriedades em comum com o tipo '{1}'.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "O tipo “{0}” não tem assinaturas para as quais a lista de argumentos de tipo é aplicável.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "O tipo '{0}' é genérico e só pode ser indexado para leitura.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2} e mais {3}.", - "Type_0_is_not_a_constructor_function_type_2507": "O tipo '{0}' não é um tipo de função de construtor.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "O tipo '{0}' não é um tipo de retorno de função assíncrona válido no ES5, pois não se refere ao valor construtor compatível com a Promessa.", - "Type_0_is_not_an_array_type_2461": "O tipo '{0}' não é um tipo de matriz.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "O tipo '{0}' não é um tipo de matriz ou de cadeia de caracteres.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "O tipo '{0}' não é um tipo de matriz de um tipo de cadeia ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "O tipo '{0}' não é um tipo de matriz ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", - "Type_0_is_not_assignable_to_type_1_2322": "O tipo '{0}' não pode ser atribuído ao tipo '{1}'.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "O tipo '' não pode ser atribuído ao tipo {0} '{1}'. Você quis dizer '{2}'?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "O tipo '{0}' não é atribuível ao tipo '{1}'. Dois tipos diferentes com esse nome existem, mas eles não estão relacionados.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Tipo '{0}' não é atribuível ao tipo '{1}' como implícito pela anotação de variância.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "O tipo '{0}' não é atribuível ao tipo '{1}', conforme necessário para valores de membro de enumeração computados.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' ao tipo do destino.", - "Type_0_is_not_comparable_to_type_1_2678": "O tipo '{0}' não pode ser comparável ao tipo '{1}'.", - "Type_0_is_not_generic_2315": "O tipo '{0}' não é genérico.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "O tipo '{0}' pode representar um valor primitivo, que não é permitido como operando direito do operador 'in'.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "O tipo '{0}' deve ter um método '[Symbol.asyncIterator]()' que retorna um iterador assíncrono.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "O tipo '{0}' deve ter um método '[Symbol.iterator]()' que retorna um iterador.", - "Type_0_provides_no_match_for_the_signature_1_2658": "O tipo '{0}' fornece nenhuma correspondência para a assinatura '{1}'.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "O tipo '{0}' referencia recursivamente a si próprio como um tipo base.", - "Type_Checking_6248": "Verificação de Tipo", - "Type_alias_0_circularly_references_itself_2456": "O alias de tipo '{0}' referencia circulamente a si próprio.", - "Type_alias_must_be_given_a_name_1439": "O alias de tipo deve receber um nome.", - "Type_alias_name_cannot_be_0_2457": "O nome do alias de tipo não pode ser '{0}'.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Os aliases de tipo só podem ser usados em arquivos TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Uma anotação de tipo não pode aparecer em uma declaração de construtor.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "As anotações de tipo só podem ser usadas em arquivos TypeScript.", - "Type_argument_expected_1140": "Argumento de tipo esperado.", - "Type_argument_list_cannot_be_empty_1099": "A lista de argumentos de tipo não pode estar vazia.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Os argumentos de tipo só podem ser usados em arquivos TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Os argumentos de tipo '{0}' se referenciam circularmente.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "As expressões de declaração de tipo só podem ser usadas em arquivos TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "O tipo na posição {0} na fonte não é compatível com o tipo na posição {1} no destino.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "O tipo nas posições {0} até {1} na fonte não é compatível com o tipo na posição {2} no destino.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "O tipo que contém o nome particular '{0}' não pode ser usado com --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Arquivos de declaração de tipo a serem incluídos em compilação.", - "Type_expected_1110": "Tipo esperado.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "As asserções de importação de tipo devem ter exatamente uma chave - `resolution-mode` - com valor `import` ou` require`.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "A importação de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "A instanciação de tipo é muito profunda e possivelmente infinita.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "O tipo é referenciado diretamente ou indiretamente em um retorno de chamada de preenchimento do seu próprio método 'then'.", - "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}'", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}' com packageId '{2}'", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "O tipo de operando \"await\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "O tipo de valor da propriedade computada é '{0}', que não pode ser atribuído ao tipo '{1}'.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "O tipo de variável '{0}' de membro de instância não pode referenciar o identificador '{1}' declarado no construtor.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "O tipo de elementos iterados de um operando \"yield*\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "O tipo de propriedade '{0}' faz referência circular a si mesmo no tipo mapeado '{1}'.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "O tipo do operando \"yield\" em um gerador assíncrono deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "A importação somente de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "O tipo se origina nessa importação. Uma importação de estilo de namespace não pode ser chamada nem construída e causará uma falha no runtime. Considere usar uma importação padrão ou importe require aqui.", - "Type_parameter_0_has_a_circular_constraint_2313": "O parâmetro de tipo '{0}' tem uma restrição circular.", - "Type_parameter_0_has_a_circular_default_2716": "O parâmetro de tipo '{0}' tem um padrão circular.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "O parâmetro de tipo '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "O parâmetro de tipo '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "O parâmetro de tipo '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "O parâmetro de tipo '{0}' da função exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "O parâmetro de tipo '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "O parâmetro de tipo '{0}' do tipo de objeto mapeado exportado tem ou está usando o nome privado '{1}'.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "O parâmetro de tipo '{0}' do alias de tipo exportado tem ou está usando o nome privado '{1}'.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "O parâmetro de tipo '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "O parâmetro de tipo '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "O parâmetro de tipo '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", - "Type_parameter_declaration_expected_1139": "Declaração de parâmetro de tipo esperada.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "As declarações de parâmetro de tipo só podem ser usadas em arquivos TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Os padrões de parâmetro de tipo só podem referenciar parâmetros de tipo declarados anteriormente.", - "Type_parameter_list_cannot_be_empty_1098": "A lista de parâmetros de tipo não pode estar vazia.", - "Type_parameter_name_cannot_be_0_2368": "O nome do parâmetro de tipo não pode ser '{0}'.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Os parâmetros de tipo não podem aparecer em uma declaração de construtor.", - "Type_predicate_0_is_not_assignable_to_1_1226": "O predicado de tipo '{0}' não pode ser atribuído a '{1}'.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "O tipo produz um tipo de tupla grande demais para ser representado.", - "Type_reference_directive_0_was_not_resolved_6120": "======== A diretiva de referência de tipo '{0}' não foi resolvida. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}', primário: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}' com a ID do Pacote '{2}', primário: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "As expressões de satisfação de tipo só podem ser usadas em arquivos TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Os tipos não podem aparecer em declarações de exportação em arquivos JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Tipos têm declarações separadas de uma propriedade privada '{0}'.", - "Types_of_construct_signatures_are_incompatible_2419": "Os tipos de assinaturas de constructo são incompatíveis.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Os tipos de parâmetros '{0}' e '{1}' são incompatíveis.", - "Types_of_property_0_are_incompatible_2326": "Tipos de propriedade '{0}' são incompatíveis.", - "Unable_to_open_file_0_6050": "Não é possível abrir o arquivo '{0}'.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Não é possível resolver a assinatura do decorador de classe quando ele é chamado como uma expressão.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Não é possível resolver a assinatura do decorador de método quando ele é chamado como uma expressão.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Não é possível resolver a assinatura do decorador de parâmetro quando ele é chamado como uma expressão.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Não é possível resolver a assinatura do decorador de propriedade quando ele é chamado como uma expressão.", - "Undetermined_character_escape_1513": "Escape de caractere indeterminado.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' inesperado. Você quer escapar com barra invertida?", - "Unexpected_end_of_text_1126": "Fim inesperado do texto.", - "Unexpected_keyword_or_identifier_1434": "Palavra-chave ou identificador inesperado.", - "Unexpected_token_1012": "Token inesperado.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Um construtor, método, acessador ou propriedade era esperado.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Era esperado um nome de parâmetro de tipo sem chaves.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. Você quis dizer '{'>'}' ou '>'?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. Você quis dizer '{'}'}' ou '}'?", - "Unexpected_token_expected_1179": "Token inesperado. '{' esperado.", - "Unicode_escape_sequence_cannot_appear_here_17021": "A sequência de escape Unicode não pode aparecer aqui.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "As sequências de escape Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "As expressões de valor da propriedade Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", - "Unknown_Unicode_property_name_1524": "Nome da propriedade Unicode desconhecido.", - "Unknown_Unicode_property_name_or_value_1529": "Nome ou valor da propriedade Unicode desconhecido.", - "Unknown_Unicode_property_value_1526": "Valor da propriedade Unicode desconhecido.", - "Unknown_build_option_0_5072": "Opção de build '{0}' desconhecida.", - "Unknown_build_option_0_Did_you_mean_1_5077": "Opção de build '{0}' desconhecida. Você quis dizer '{1}'?", - "Unknown_compiler_option_0_5023": "Opção do compilador '{0}' desconhecida.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opção de compilador '{0}' desconhecida. Você quis dizer '{1}'?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Palavra-chave ou identificador desconhecido. Você quis dizer '{0}'?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opção desconhecida 'excludes'. Você quis dizer 'exclude'?", - "Unknown_regular_expression_flag_1499": "Sinalizador de expressão regular desconhecido.", - "Unknown_type_acquisition_option_0_17010": "Opção de aquisição de tipo desconhecido '{0}'.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opção de aquisição de tipo '{0}' desconhecida. Você quis dizer '{1}'?", - "Unknown_watch_option_0_5078": "Opção de observador '{0}' desconhecida.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Opção de observador '{0}' desconhecida. Você quis dizer '{1}'?", - "Unreachable_code_detected_7027": "Código inacessível detectado.", - "Unterminated_Unicode_escape_sequence_1199": "Sequência de escape Unicode não finalizada.", - "Unterminated_quoted_string_in_response_file_0_6045": "Cadeia de caracteres entre aspas não finalizada no arquivo de resposta '{0}'.", - "Unterminated_regular_expression_literal_1161": "Literal de expressão regular não finalizado.", - "Unterminated_string_literal_1002": "Literal de cadeia de caracteres não finalizado.", - "Unterminated_template_literal_1160": "Literal de modelo não finalizado.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Chamadas de função não tipadas não podem aceitar argumentos de tipo.", - "Unused_label_7028": "Rótulo não utilizado.", - "Unused_ts_expect_error_directive_2578": "Diretiva '@ts-expect-error' não usada.", - "Update_import_from_0_90058": "Atualizar importação de \"{0}\"", - "Update_modifiers_of_0_90061": "Atualizar modificadores de '{0}'", - "Updating_output_timestamps_of_project_0_6359": "Atualizando os carimbos de data/hora de saída do projeto '{0}'...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Atualizando os carimbos de data/hora de saída inalterados do projeto '{0}'...", - "Use_0_95174": "Use `{0}`.", - "Use_0_instead_5106": "Use '{0}' em vez disso.", - "Use_Number_isNaN_in_all_conditions_95175": "Use `Number.isNaN` em todas as condições.", - "Use_element_access_for_0_95145": "Usar o acesso de elemento para '{0}'", - "Use_element_access_for_all_undeclared_properties_95146": "Usar o acesso de elemento para todas as propriedades não declaradas.", - "Use_import_type_95180": "Usar 'tipo de importação'", - "Use_synthetic_default_member_95016": "Use o membro sintético 'padrão'.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use o campo 'exports' do package.json ao resolver importações de pacote.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use o campo 'imports' no package.json ao resolver importações.", - "Use_type_0_95181": "Usar 'type {0}'", - "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subcaminho '{1}' com destino '{2}'.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "O uso de fragmentos JSX requer que a fábrica de fragmentos \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Há suporte para o uso de uma cadeia de caracteres em uma instrução 'for...of' somente no ECMAScript 5 e superior.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Usar --build, -b fará com que o tsc se comporte mais como um orquestrador de build do que como um compilador. Isso é usado para acionar a construção de projetos compostos sobre os quais você pode aprender mais em {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Usando as opções do compilador de redirecionamento de referência do projeto '{0}'.", - "VERSION_6036": "VERSÃO", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "O valor do tipo '{0}' não tem propriedades em comum com o tipo '{1}'. Você queria chamá-lo?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "O valor do tipo '{0}' não pode ser chamado. Você pretendia incluir 'new'?", - "Variable_0_implicitly_has_an_1_type_7005": "A variável '{0}' implicitamente tem um tipo '{1}'.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "A variável '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "A variável '{0}' implicitamente tem o tipo '{1}' em algumas localizações, mas um tipo melhor pode ser inferido do uso.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "A variável '{0}' tem implicitamente o tipo '{1}' em alguns locais onde o tipo não pode ser determinado.", - "Variable_0_is_used_before_being_assigned_2454": "A variável '{0}' é usada antes de ser atribuída.", - "Variable_declaration_expected_1134": "Declaração de variável esperada.", - "Variable_declaration_list_cannot_be_empty_1123": "A lista de declaração de variável não pode estar vazia.", - "Variable_declaration_not_allowed_at_this_location_1440": "A declaração de variável não é permitida neste local.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "A variável deve ter uma anotação de tipo explícita com --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variáveis com várias declarações não podem ser embutidas.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "O elemento variádico na posição {0} na fonte não corresponde ao elemento na posição {1} no destino.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Só há suporte para anotações de variação em aliases do tipo para objetos, funções, construtores e tipos mapeados.", - "Version_0_6029": "Versão {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visite https://aka.ms/ts6 para obter informações de migração.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig para ler mais sobre este arquivo", - "WATCH_OPTIONS_6918": "OPÇÕES DE INSPEÇÃO", - "Watch_and_Build_Modes_6250": "Modos Inspeção e Compilação", - "Watch_input_files_6005": "Observe os arquivos de entrada.", - "Watch_option_0_requires_a_value_of_type_1_5080": "A opção do observador '{0}' requer um valor do tipo {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Só podemos gravar um tipo de '{0}' adicionando um tipo para o parâmetro inteiro aqui.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Ao atribuir funções, certifique-se que os parâmetros e os valores de retorno sejam compatíveis com subtipo.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Quando a fizer a verificação de tipo, considere 'null' e 'undefined'.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Se é necessário manter a saída de console desatualizada no modo de inspeção, em vez de limpar a tela.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos os caracteres inválidos em um contêiner de expressão", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Encapsular todas as expressões de decorador inválidas entre parênteses", - "Wrap_all_object_literal_with_parentheses_95116": "Colocar todo o literal de objeto entre parênteses", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Empacotar todos os JSXs sem pai no fragmento de JSX", - "Wrap_in_JSX_fragment_95120": "Encapsular o fragmento de JSX", - "Wrap_in_parentheses_95194": "Encapsular entre parênteses", - "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular caractere inválido em um contêiner de expressão", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Colocar entre parênteses o corpo a seguir, que deve ser um literal de objeto", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Você pode aprender sobre todas as opções do compilador em {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Não é possível renomear um módulo por meio de uma importação global.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Não é possível renomear elementos definidos em uma pasta 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Não é possível renomear elementos definidos em outra pasta 'node_modules'.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Não é possível renomear elementos que são definidos na biblioteca TypeScript padrão.", - "You_cannot_rename_this_element_8000": "Você não pode renomear este elemento.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' aceita muito poucos argumentos para serem usados como um decorador aqui. Você quis dizer para chamá-lo primeiro e gravar '@{0}()'?", - "_0_and_1_index_signatures_are_incompatible_2330": "As assinaturas de índice '{0}' e '{1}' são incompatíveis.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "As operações '{0}' e '{1}' não podem ser combinadas sem parênteses.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' são especificados duas vezes. O atributo chamado '{0}' será substituído.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' no final de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' no início de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' só pode ser importado ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' só pode ser importado usando uma importação padrão.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' só pode ser importado usando uma chamada 'require' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' só pode ser importado usando uma chamada 'require' ou usando uma importação padrão.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou uma importação padrão.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", - "_0_cannot_be_used_as_a_JSX_component_2786": "O módulo '{0}' não pode ser usado como um componente JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' não pode ser usado como um valor porque foi exportado usando 'tipo de exportação'.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' não pode ser usado como um valor porque foi importado usando 'tipo de importação'.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Os componentes '{0}' não aceitam texto como elementos filho. O texto em JSX tem o tipo 'cadeia de caracteres', mas o tipo esperado de '{1}' é '{2}'.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Uma instância de '{0}' poderia ser criada com um tipo arbitrário que poderia não estar relacionado a '{1}'.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "Declarações '{0}' só podem ser declaradas dentro de um bloco.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "As declarações '{0}' só podem ser usadas em arquivos TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "Declarações '{0}' podem não ter padrões de associação.", - "_0_declarations_must_be_initialized_1155": "Declarações '{0}' devem ser inicializadas.", - "_0_expected_1005": "'{0}' esperado.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' tem um tipo de cadeia de caracteres, mas deve ter sintaxe de cadeia de caracteres reconhecível sintaticamente quando 'isolatedModules' está habilitado.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' não tem nenhum membro exportado chamado '{1}'. Você quis dizer '{2}'?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' tem implicitamente um tipo de retorno '{1}', mas um tipo melhor pode ser inferido do uso.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Implicitamente, '{0}' tem um retorno tipo 'any' porque ele não tem uma anotação de tipo de retorno e é referenciado direta ou indiretamente em uma das suas expressões de retorno.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Implicitamente, '{0}' tem o tipo 'any' porque não tem uma anotação de tipo e é referenciado direta ou indiretamente em seu próprio inicializador.", - "_0_index_signatures_are_incompatible_2634": "'{0}' assinaturas de índice são incompatíveis.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' tipo de índice '{1}' não pode ser atribuído a '{2}' tipo de índice '{3}'.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' é um primitivo, mas '{1}' é um objeto de wrapper. Prefira usar '{0}' quando possível.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' é um tipo e não pode ser importado em arquivos JavaScript. Use '{1}' em uma anotação de tipo JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' é um tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' é uma renomeação não usada de '{1}'. Você pretendia usá-lo como uma anotação de tipo?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' é atribuível à restrição do tipo '{1}', mas é possível criar uma instância de '{1}' com um subtipo diferente de restrição '{2}'.", - "_0_is_automatically_exported_here_18044": "'{0}' é exportado automaticamente aqui.", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' é declarado, mas seu valor nunca é lido.", - "_0_is_declared_but_never_used_6196": "'{0}' está declarado, mas nunca foi usado.", - "_0_is_declared_here_2728": "'{0}' é declarado aqui.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' está definido como uma propriedade na classe '{1}', mas é substituído aqui em '{2}' como um acessador.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' está definido como um acessador na classe '{1}', mas é substituído aqui em '{2}' como uma propriedade de instância.", - "_0_is_deprecated_6385": "'{0}' foi preterido.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' não é uma metapropriedade para a palavra-chave '{1}'. Você quis dizer '{2}'?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' não é permitido como um nome de parâmetro.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' não é permitido como um nome de declaração de variável.", - "_0_is_of_type_unknown_18046": "'{0}' é do tipo 'desconhecido'.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' é possivelmente 'null'.", - "_0_is_possibly_null_or_undefined_18049": "'{0}' é possivelmente 'null' ou 'undefined'.", - "_0_is_possibly_undefined_18048": "'{0}' é possivelmente 'indefinido'.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' é referenciado direta ou indiretamente em sua própria expressão base.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' é referenciado direta ou indiretamente em sua própria anotação de tipo.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' foi especificado mais de uma vez, portanto esse uso será substituído.", - "_0_list_cannot_be_empty_1097": "A lista '{0}' não pode estar vazia.", - "_0_modifier_already_seen_1030": "O modificador '{0}' já foi visto.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "O modificador '{0}' pode aparecer apenas em um parâmetro de tipo de uma classe, interface ou alias de tipo", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "O modificador '{0}' só pode aparecer em um parâmetro de tipo de uma função, método ou classe", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "O modificador '{0}' não pode aparecer em uma declaração de construtor.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "O modificador '{0}' não pode aparecer em um módulo ou elemento de namespace.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "O modificador '{0}' não pode aparecer em um parâmetro.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "O modificador '{0}' não pode aparecer em um membro de tipo.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "O modificador '{0}' não pode aparecer em um parâmetro de tipo", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "O modificador '{0}' não pode aparecer em uma declaração 'using'.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "O modificador '{0}' não pode aparecer em uma declaração 'await using'.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "O modificador '{0}' não pode aparecer em uma assinatura de índice.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "O modificador '{0}' não pode aparecer em elementos de classe deste tipo.", - "_0_modifier_cannot_be_used_here_1042": "O modificador '{0}' não pode ser usado aqui.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "O modificador '{0}' não pode ser usado em um contexto de ambiente.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "O modificador '{0}' não pode ser usado com um modificador '{1}'.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "O modificador '{0}' não pode ser usado com um identificador privado.", - "_0_modifier_must_precede_1_modifier_1029": "O modificador '{0}' deve preceder o modificador '{1}'.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve ser seguido por uma expressão de valor de propriedade Unicode entre chaves.", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' precisa de uma anotação de tipo explícita.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um namespace aqui.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' só faz referência a um tipo, mas está sendo usado como valor no momento.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' faz referência somente a um tipo, mas está sendo usado como um valor aqui. Você quis usar '{1} em {0}'?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para es2015 ou posterior.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' refere-se a uma UMD global, mas o arquivo atual é um módulo. Considere adicionar uma importação.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' refere-se a um valor, mas está sendo usado como um tipo aqui. Você quis dizer 'typeof {0}'?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' resolve para uma declaração somente de tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' resolve para uma declaração apenas de tipo e deve ser reexportada usando uma reexportação apenas de tipo quando '{1}' está habilitado.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' deve ser colocado dentro do objeto 'compilerOptions' do arquivo config json", - "_0_tag_already_specified_1223": "A marca '{0}' já foi especificada.", - "_0_was_also_declared_here_6203": "'{0}' também foi declarado aqui.", - "_0_was_exported_here_1377": "'{0}' foi exportado aqui.", - "_0_was_imported_here_1376": "'{0}' foi importado aqui.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{1}'.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de rendimento '{1}'.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "O modificador 'abstract' pode aparecer somente em uma declaração de classe, método ou propriedade.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "o modificador 'acessador' só pode aparecer em uma declaração de propriedade.", - "and_here_6204": "e aqui.", - "and_npm_install_D_types_Slashnode_6290": "e npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "\"arguments\" não podem ser referenciados em inicializadores de propriedade ou blocos de inicialização estática de classe.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trata os arquivos com import, export, import.meta, jsx (com jsx: react-jsx) ou formato esm (com module: node16+) como módulos.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão 'await' não pode ser usada dentro de um bloco estático de classe.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "As expressões 'await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas não tem importações ou exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "As expressões 'await' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "As expressões 'await' não podem ser usadas em inicializadores de parâmetros.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' não tem efeito sobre o tipo desta expressão.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Declarações \"await using\" não são permitidas em contextos de ambiente.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Declarações \"await using\" não são permitidas em cláusulas \"case\" ou \"default\", a menos que estejam contidas em um bloco.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "As instruções 'for await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instruções 'await using' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instruções 'await using' não podem ser usadas dentro de um bloco estático de classe.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "A opção 'baseUrl' é configurada para '{0}', usando este valor para resolver o nome de módulo não relativo '{1}'.", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve ser seguido por uma letra ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' só pode ser usado no início de um arquivo.", - "case_or_default_expected_1130": "'case' ou 'default' esperado.", - "catch_or_finally_expected_1472": "é esperado 'catch' ou 'finally'.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "O inicializador de membro de enumeração 'const' foi avaliado como um valor não finito.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "O inicializador de membro de enumeração 'const' foi avaliado como o valor não permitido 'NaN'.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Os inicializadores de membro de enumeração const devem ser expressões constantes.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Enumerações 'const' só podem ser usadas em expressões de acesso de índice ou propriedade, ou então do lado direito de uma consulta de tipo, declaração de importação ou atribuição de exportação.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Não é possível usar 'constructor' como nome de uma propriedade de parâmetro.", - "constructor_is_a_reserved_word_18012": "'#constructor' é uma palavra reservada.", - "default_Colon_6903": "padrão:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' não pode ser chamado em um identificador no modo estrito.", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' não exporta novamente um padrão.", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' só pode ser usado em arquivos TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "O modificador 'export' não pode ser aplicado a módulos de ambiente e acréscimos de módulo, pois eles estão sempre visíveis.", - "extends_clause_already_seen_1172": "A cláusula 'extends' já foi vista.", - "extends_clause_must_precede_implements_clause_1173": "A cláusula 'extends' deve preceder a cláusula 'implements'.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "A cláusula 'extends' da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "A cláusula 'extends' da classe exportada tem ou está usando o nome particular '{0}'.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "A cláusula 'extends' da interface exportada '{0}' tem ou está usando o nome particular '{1}'.", - "false_unless_checkJs_is_set_6932": "“false”, a menos que “checkJs” esteja definido", - "false_unless_composite_is_set_6906": "`false`, a menos que `composite` esteja definido", - "file_6025": "arquivo", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Os loops 'for await' só são permitidos no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Os loops 'for await' só são permitidos em funções assíncronas e nos níveis superiores dos módulos.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops 'for await' não podem ser usados dentro de um bloco estático de classe.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "os acessadores 'get' e 'set' não podem declarar os parâmetros 'this'.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se `files` for especificado, caso contrário `[\"**/*\"]`", - "implements_clause_already_seen_1175": "A cláusula 'implements' já foi vista.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Cláusulas 'implements' só podem ser usadas em arquivos TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' só pode ser usado em arquivos TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "As declarações 'infer' só são permitidas na cláusula 'extends' de um tipo condicional.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve ser seguido por um nome de grupo de captura entre colchetes angulares.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "O uso de 'let' não é permitido como um nome em declarações 'let' ou 'const'.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "A expressão 'new', cujo destino não tem uma assinatura de constructo, implicitamente tem um tipo 'any'.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\" node_modules \",\" bower_components \",\" jspm_packages \"]`, mais o valor de `outDir`, caso seja especificado.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "“nodenext” se “module” for “nodenext”; “node16” se “module” for “node16” ou “node18”; caso contrário, “bundler”.", - "one_of_Colon_6900": "um dos:", - "one_or_more_Colon_6901": "um ou mais:", - "options_6024": "opções", - "or_JSX_element_expected_1145": "'{' ou elemento JSX esperado.", - "or_expected_1144": "'{' ou ';' esperado.", - "package_json_does_not_have_a_0_field_6100": "'package.json' não tem um campo '{0}'.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' não tem uma entrada 'typesVersions' que corresponda à versão '{0}'.", - "package_json_had_a_falsy_0_field_6220": "'package.json' teve um campo '{0}' false.", - "package_json_has_0_field_1_that_references_2_6101": "'package.json' tem '{0}' campo '{1}' que faz referência a '{2}'.", - "package_json_has_a_peerDependencies_field_6281": "'package.json' tem um campo 'peerDependencies'.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' tem uma entrada 'typesVersions' '{0}' que não é um intervalo semver válido.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' tem uma entrada 'typesVersions' '{0}' que corresponde à versão do compilador '{1}', procurando por um padrão que corresponda ao nome do módulo '{2}'.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' tem um campo 'typesVersions' com mapeamentos de caminho específicos à versão.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "O escopo package.json '{0}' mapeia explicitamente o especificador '{1}' para nulo.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "O escopo package.json '{0}' tem um tipo inválido para o destino do especificador '{1}'", - "package_json_scope_0_has_no_imports_defined_6273": "O escopo package.json '{0}' não tem importações definidas.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "A opção 'paths' é especificada, procurando por um padrão para corresponder ao nome do módulo '{0}'.", - "q_is_only_available_inside_character_class_1511": "'\\q' só está disponível dentro da classe de caracteres.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve ser seguido por alternativas de cadeia de caracteres entre chaves.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "O modificador 'readonly' pode aparecer somente em uma declaração de propriedade ou assinatura de índice.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "O modificador de tipo 'readonly' só é permitido em tipos literais de matriz e tupla.", - "require_call_may_be_converted_to_an_import_80005": "A chamada 'require' pode ser convertida em uma importação.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` pode ser definido apenas para importações somente de tipo.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` é a única chave válida para as asserções de importação de tipo.", - "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve ser 'require' ou 'import'.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "A opção 'rootDirs' está configurada, usando-a para resolver o nome de módulo relativo '{0}'.", - "super_can_only_be_referenced_in_a_derived_class_2335": "'super' só pode ser referenciado em uma classe derivada.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' pode ser referido somente em membros de classes derivadas ou expressões literais de objeto.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' não pode ser referenciado em um nome de propriedade calculado.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' não pode ser referenciado nos argumentos do construtor.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' é permitido somente em membros de expressões literais de objeto quando a opção 'target' é 'ES2015' ou maior.", - "super_may_not_use_type_arguments_2754": "'super' não pode usar argumentos de tipo.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "'super' deve ser chamado antes de acessar uma propriedade de 'super' no construtor de uma classe derivada.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "'super' deve ser chamado antes de acessar 'this' no construtor de uma classe derivada.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' deve ser seguido por um acesso de membro ou lista de argumentos.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "O acesso à propriedade 'super' só é permitido em um construtor, em funções de membros ou acessadores de membros de uma classe derivada.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' não pode ser referenciado em um nome de propriedade calculado.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' não pode ser referenciado em um corpo de módulo ou de namespace.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' não pode ser referenciado em um inicializador de propriedade estática.", - "this_cannot_be_referenced_in_current_location_2332": "'this' não pode ser referenciado no local atual.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.", - "true_for_ES2022_and_above_including_ESNext_6930": "'True' para ES2022 e acima, incluindo ESNext.", - "true_if_composite_false_otherwise_6909": "`true` se` composite`, `false` caso contrário", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' é 'node16', 'nodenext' ou 'bundler'; caso contrário, \"false\".", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: o Compilador TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "O tsconfig.json está presente, mas não será carregado se os arquivos forem especificados na linha de comando. Use '--ignoreConfig' para ignorar esse erro.", - "type_Colon_6902": "tipo:", - "unique_symbol_types_are_not_allowed_here_1335": "Tipos de 'unique symbol' não são permitidos aqui.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Tipos de 'unique symbol' são permitidos apenas em variáveis em uma declaração de variável.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Tipos de 'unique symbol' não podem ser usados em uma declaração de variável com um nome associado.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "A diretiva 'use strict' não pode ser usada com uma lista de parâmetros não simples.", - "use_strict_directive_used_here_1349": "A diretiva 'use strict' usada aqui.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Declarações \"using\" não são permitidas em contextos de ambiente.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Declarações \"using\" não são permitidas em cláusulas \"case\" ou \"default\", a menos que estejam contidas em um bloco.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "As declarações 'with' não são permitidas em blocos de funções assíncronas.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Instruções 'with' não são permitidas no modo estrito.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Expressão 'yield' resulta implicitamente em um tipo 'any' porque seu gerador contido não tem uma anotação de tipo de retorno.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "As expressões 'yield' não podem ser usadas em inicializadores de parâmetros." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "TODAS AS OPÇÕES DO COMPILADOR", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Um modificador '{0}' não pode ser usado com uma declaração de importação.", + "A_0_parameter_must_be_the_first_parameter_2680": "Um parâmetro '{0}' deve ser o primeiro parâmetro.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Uma marca JSDoc '@template' pode não seguir uma marca '@typedef', '@callback' ou '@overload'", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Um comentário de JSDoc '@typedef' não pode conter várias marcas '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Um literal 'bigint' não pode ser usado como um nome de propriedade.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Um literal de bigint não pode usar notação exponencial.", + "A_bigint_literal_must_be_an_integer_1353": "Um literal de bigint deve ser um inteiro.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Um parâmetro de padrão de associação não pode ser opcional em uma assinatura de implementação.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Uma instrução 'break' só pode ser usada em uma iteração de circunscrição ou instrução switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Uma instrução 'break' só pode saltar para um rótulo de uma instrução de circunscrição.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Uma classe de caracteres não deve conter um pontuador duplo reservado. Você quis escapar com uma barra invertida?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "O intervalo de uma classe de caracteres não deve ser limitado por outra classe de caracteres.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Uma classe pode implementar apenas um identificador/nome qualificado com argumentos de tipo opcionais.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Uma classe pode implementar somente um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Uma classe não pode estender um tipo primitivo como '{0}'. As classes só podem estender valores construtíveis.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Uma classe não pode implementar um tipo primitivo como '{0}'. Ela só pode implementar outros tipos de objetos nomeados.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Uma declaração de classe sem o modificador 'default' deve ter um nome.", + "A_class_member_cannot_have_the_0_keyword_1248": "Um membro de classe não pode ter a palavra-chave '{0}'.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Uma expressão de vírgula não é permitida em um nome de propriedade calculado.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Um nome de propriedade calculado não pode fazer referência a um parâmetro de tipo no seu tipo recipiente.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Um nome de propriedade computado em uma declaração de propriedade de classe precisa ter um tipo literal simples ou um tipo 'símbolo exclusivo'.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Um nome de propriedade computado em uma sobrecarga do método deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Um nome de propriedade computado em um tipo literal deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Um nome de propriedade computado em um contexto de ambiente deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Um nome de propriedade computado em uma interface deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Um nome de propriedade calculado deve ser do tipo 'string', 'number', 'symbol' ou 'any'.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Uma declaração ''const'' só pode ser aplicada a referências a membros de enumeração ou literais de cadeia de caracteres, número, booliano, matriz ou objeto.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Um membro const enum só pode ser acessado usando um literal de cadeia de caracteres.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Um inicializador 'const' em um contexto de ambiente deve ser uma cadeia de caracteres ou um literal numérico ou uma referência de enumeração literal.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Um construtor não pode conter uma chamada 'super' quando sua classe estende 'null'.", + "A_constructor_cannot_have_a_this_parameter_2681": "Um construtor não pode ter um parâmetro 'this'.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Uma instrução 'continue' só pode ser usada em uma instrução de iteração de circunscrição.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Uma instrução 'continue' só pode saltar para um rótulo de uma instrução de iteração de circunscrição.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Um arquivo de declaração não pode ser importado sem 'import type'. Você quis importar um arquivo de implementação '{0}'?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Um modificador 'declare' não pode ser usado em um contexto de ambiente.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Um decorador pode decorar somente uma implementação de método, não uma sobrecarga.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Uma cláusula 'default' não pode aparecer mais de uma vez em uma instrução 'switch'.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Uma exportação padrão só pode ser usada em um módulo do estilo ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Uma exportação padrão deve estar no nível superior de uma declaração de arquivo ou módulo.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Uma declaração de atribuição definitiva '!' não é permitida neste contexto.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Uma declaração de desestruturação deve ter um inicializador.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Uma chamada de importação dinâmica no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "A_file_cannot_have_a_reference_to_itself_1006": "Um arquivo não pode fazer referência a si mesmo.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Uma função que retorna 'never' não pode ter um ponto de extremidade acessível.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Uma função chamada com a palavra-chave 'new' não pode ter um tipo 'this' que seja 'void'.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Uma função cujo tipo declarado não seja 'undefined', 'void' nem 'any' deve retornar um valor.", + "A_generator_cannot_have_a_void_type_annotation_2505": "O gerador não pode ter uma anotação de tipo 'void'.", + "A_get_accessor_cannot_have_parameters_1054": "Um acessador 'get' não pode ter parâmetros.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Um acessador get precisa ser pelo menos tão acessível quanto o setter", + "A_get_accessor_must_return_a_value_2378": "Um acessador 'get' deve retornar um valor.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Um elemento de tupla rotulado é declarado como opcional com um ponto de interrogação depois do nome e antes de dois-pontos, em vez de depois do tipo.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Um elemento de tupla rotulado foi declarado como Rest com um '...' antes do nome, em vez de antes do tipo.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Um tipo mapeado não pode declarar propriedades ou métodos.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "O inicializador de um membro em uma declaração de enumeração não pode referenciar membros declarados depois dele, inclusive membros definidos em outras enumerações.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Uma classe mixin deve ter um construtor um único parâmetro rest do tipo 'any[]'.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Uma classe mixin que se estende de uma variável de tipo contendo uma assinatura de constructo abstrata também precisa ser declarada como 'abstract'.", + "A_module_cannot_have_multiple_default_exports_2528": "Um módulo não pode ter várias exportações padrão.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Uma declaração de namespace não pode estar em um arquivo diferente de uma classe ou função com a qual ela é mesclada.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Uma declaração de namespace não pode estar localizada antes de uma classe ou função com a qual ela é mesclada.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Uma declaração de namespace só é permitida no nível superior de um namespace ou módulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Uma declaração \"namespace\" não deve ser declarada usando a palavra-chave \"module\". Use a palavra-chave \"namespace\".", + "A_non_dry_build_would_build_project_0_6357": "Um build não -dry criaria o projeto '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Um build não -dry excluiria os seguintes arquivos: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Um build não -dry atualizaria carimbos de data/hora para a saída do projeto '{0}'", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Um inicializador de parâmetro só é permitido em uma implementação de função ou de construtor.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Uma propriedade de parâmetro não pode ser declarada usando um parâmetro rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Uma propriedade de parâmetro somente é permitida em uma implementação de construtor.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Uma propriedade de parâmetro pode não ser declarada usando um padrão de associação.", + "A_promise_must_have_a_then_method_1059": "Uma promessa deve ter um método 'then'.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Uma propriedade de uma classe cujo tipo é um tipo de 'unique symbol' deve ser 'static' e 'readonly'.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Uma propriedade de uma interface ou tipo literal cujo tipo é um tipo de 'unique symbol' deve ser 'readonly'.", + "A_required_element_cannot_follow_an_optional_element_1257": "Um elemento obrigatório não pode seguir um elemento opcional.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Um parâmetro obrigatório não pode seguir um parâmetro opcional.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Um elemento rest não pode conter um padrão de associação.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Um elemento REST não pode seguir outro elemento REST.", + "A_rest_element_cannot_have_a_property_name_2566": "Um elemento rest não pode ter um nome de propriedade.", + "A_rest_element_cannot_have_an_initializer_1186": "Um elemento rest não pode ter um inicializador.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Um elemento rest deve ser o último em um padrão de desestruturação.", + "A_rest_element_type_must_be_an_array_type_2574": "Um elemento rest deve ser um tipo de matriz.", + "A_rest_parameter_cannot_be_optional_1047": "Um parâmetro rest não pode ser opcional.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Um parâmetro rest não pode ter um inicializador.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Um parâmetro rest deve ser o último em uma lista de parâmetros.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Um parâmetro rest deve ser de um tipo de matriz.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Um padrão de associação ou o parâmetro rest não pode ter uma vírgula à direita.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Uma instrução 'return' só pode ser usada dentro de um corpo de função.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Não é possível usar uma instrução “return” dentro de um bloco estático de classe.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Uma série de entradas que o remapeamento importa para pesquisar locais relativos a 'baseUrl'.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Um acessador 'set' não pode ter uma anotação de tipo de retorno.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Um acessador 'set' não pode ter um parâmetro opcional.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Um acessador 'set' não pode ter um parâmetro rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Um acessador 'set' deve ter exatamente um parâmetro.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Um parâmetro de acessador 'set' não pode ter um inicializador.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Um argumento de espalhamento deve ter um tipo de tupla ou ser passado para um parâmetro Rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Uma chamada 'super' deve ser uma instrução de nível raiz dentro de um construtor de uma classe derivada que contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Uma chamada 'super' deve ser a primeira instrução no construtor a se referir a 'super' ou 'this' quando uma classe derivada contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Uma proteção de tipo baseado em 'this não é compatível com uma proteção de tipo baseado em parâmetro.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Um tipo 'this' está disponível somente em um membro não estático de uma classe ou interface.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Um modificador 'export' de nível superior não pode ser usado em declarações de valor em um módulo CommonJS quando 'verbatimModuleSyntax' estiver habilitado.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Um arquivo 'tsconfig.json' já está definido em: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Um membro de tupla não pode ser opcional e rest.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Um tipo de tupla não pode ser indexado com um valor negativo.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Uma expressão de asserção de tipo não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Uma propriedade literal de tipo não pode ter um inicializador.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Uma importação somente de tipo pode especificar uma importação padrão ou associações nomeadas, mas não ambos.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "O predicado de tipo não pode fazer referência a um parâmetro rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "O predicado de tipo não pode fazer referência ao elemento '{0}' em um padrão de associação.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "O predicado de tipo só é permitido na posição de tipo de retorno para funções e métodos.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "O tipo de um predicado de tipo deve ser atribuível para o tipo de seu parâmetro.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Um tipo referenciado em uma assinatura decorada deve ser importado com 'tipo de importação' ou uma importação de namespace quando 'isolatedModules' e 'emitDecoratorMetadata' estão habilitados.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Uma variável cujo tipo é um tipo de 'unique symbol' deve ser 'const'.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "A expressão 'yield' só é permitida em um corpo gerador.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "O método abstrato '{0}' na classe '{1}' não pode ser acessado por meio da expressão super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Os métodos abstratos só podem aparecer dentro de uma classe abstrata.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "As propriedades abstratas só podem aparecer em uma classe abstrata.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "A propriedade abstrata '{0}' na classe '{1}' não pode ser acessada no construtor.", + "Accessibility_modifier_already_seen_1028": "O modificador de acessibilidade já foi visto.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Os acessadores somente estão disponíveis no direcionamento para ECMAScript 5 e superior.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Acessadores devem ser abstratos ou não abstratos.", + "Add_0_to_unresolved_variable_90008": "Adicionar '{0}.' à variável não resolvida", + "Add_a_return_statement_95111": "Adicionar uma instrução return", + "Add_a_return_type_to_the_function_declaration_9031": "Adicione um tipo de retorno à declaração da função.", + "Add_a_return_type_to_the_function_expression_9030": "Adicionar um tipo de retorno à expressão da função.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Adicione um tipo de retorno à declaração do acessório Get.", + "Add_a_return_type_to_the_method_9034": "Adicione um tipo de retorno ao método", + "Add_a_type_annotation_to_the_parameter_0_9028": "Adicione uma anotação de tipo ao parâmetro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Adicione uma anotação de tipo à propriedade {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Adicione uma anotação de tipo à variável {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Adicionar um tipo ao parâmetro da declaração do acessório set.", + "Add_all_missing_async_modifiers_95041": "Adicionar todos os modificadores 'async' ausentes", + "Add_all_missing_attributes_95168": "Adicionar todos os atributos ausentes", + "Add_all_missing_call_parentheses_95068": "Adicionar todos os parênteses de chamada ausentes", + "Add_all_missing_function_declarations_95157": "Adicionar todas as declarações de função ausentes", + "Add_all_missing_imports_95064": "Adicionar todas as importações ausentes", + "Add_all_missing_members_95022": "Adicionar todos os membros ausentes", + "Add_all_missing_override_modifiers_95162": "Adicionar todos os modificadores 'override' ausentes", + "Add_all_missing_parameters_95190": "Adicionar todos os parâmetros ausentes", + "Add_all_missing_properties_95166": "Adicionar todas as propriedades ausentes", + "Add_all_missing_return_statement_95114": "Adicionar todas as instruções return ausentes", + "Add_all_missing_super_calls_95039": "Adicionar todas as chamadas super ausentes", + "Add_all_missing_type_annotations_90067": "Adicione todas as anotações de tipo ausentes", + "Add_all_optional_parameters_95193": "Adicione todos os parâmetros opcionais", + "Add_annotation_of_type_0_90062": "Adicionar anotação do tipo '{0}'", + "Add_async_modifier_to_containing_function_90029": "Adicione o modificador assíncrono que contém a função", + "Add_await_95083": "Adicionar 'await'", + "Add_await_to_initializer_for_0_95084": "Adicionar 'await' ao inicializador para '{0}'", + "Add_await_to_initializers_95089": "Adicionar 'await' aos inicializadores", + "Add_braces_to_arrow_function_95059": "Adicionar chaves para a função de seta", + "Add_const_to_all_unresolved_variables_95082": "Adicionar 'const' a todas as variáveis não resolvidas", + "Add_const_to_unresolved_variable_95081": "Adicionar 'const' à variável não resolvida", + "Add_definite_assignment_assertion_to_property_0_95020": "Adicionar a asserção de atribuição definitiva à propriedade '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Adicionar declarações de atribuição definidas a todas as propriedades não inicializadas", + "Add_export_to_make_this_file_into_a_module_95097": "Adicionar 'export {}' para transformar este arquivo em um módulo", + "Add_extends_constraint_2211": "Adicione a restrição `extends`.", + "Add_extends_constraint_to_all_type_parameters_2212": "Adicionar a restrição `extends` a todos os parâmetros de tipo", + "Add_import_from_0_90057": "Adicionar importação de \"{0}\"", + "Add_index_signature_for_property_0_90017": "Adicionar assinatura de índice para a propriedade '{0}'", + "Add_initializer_to_property_0_95019": "Adicionar inicializador à propriedade '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas", + "Add_missing_attributes_95167": "Adicionar atributos ausentes", + "Add_missing_call_parentheses_95067": "Adicionar os parênteses de chamada ausentes", + "Add_missing_comma_for_object_member_completion_0_95187": "Adicionar vírgula ausente para conclusão de membro de objeto '{0}'.", + "Add_missing_enum_member_0_95063": "Adicionar membro de enumeração ausente '{0}'", + "Add_missing_function_declaration_0_95156": "Adicionar a declaração de função ausente '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "Adicionar operador 'new' ausente a todas as chamadas", + "Add_missing_new_operator_to_call_95071": "Adicionar operador 'new' ausente à chamada", + "Add_missing_parameter_to_0_95188": "Adicionar parâmetro ausente a '{0}'", + "Add_missing_parameters_to_0_95189": "Adicionar parâmetros ausentes a '{0}'", + "Add_missing_properties_95165": "Adicionar propriedades ausentes", + "Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente", + "Add_missing_typeof_95052": "Adicionar 'typeof' ausente", + "Add_names_to_all_parameters_without_names_95073": "Adicionar nomes a todos os parâmetros sem nomes", + "Add_optional_parameter_to_0_95191": "Adicionar parâmetro opcional a '{0}'", + "Add_optional_parameters_to_0_95192": "Adicionar parâmetros opcionais ao '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "Adicionar ou remover chaves em uma função de seta", + "Add_override_modifier_95160": "Adicionar modificador \"override\"", + "Add_parameter_name_90034": "Adicionar nome de parâmetro", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro", + "Add_resolution_mode_import_attribute_95196": "Adicionar o atributo de importação 'resolution-mode'", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Adicionar o atributo de importação 'resolution-mode' a todas as importações somente de tipo que precisem dele", + "Add_return_type_0_90063": "Adicionar tipo de retorno '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Adicione satisfies e uma asserção de tipo a esta expressão (satisfies T as T) para tornar o tipo explícito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Adicionar satisfies e uma asserção de tipo embutido com '{0}'", + "Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados", + "Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Adicione 'indefinido' a um tipo quando acessado usando um índice.", + "Add_undefined_to_optional_property_type_95169": "Adicionar 'undefined' ao tipo de propriedade opcional", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Adicionar tipo indefinido a todas as propriedades não inicializadas", + "Add_undefined_type_to_property_0_95018": "Adicionar tipo 'indefinido' à propriedade '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Adicionar conversão 'unknown' para tipos sem sobreposição", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Adicionar 'unknown' a todas as conversões de tipos sem sobreposição", + "Add_void_to_Promise_resolved_without_a_value_95143": "Adicionar 'void' ao Promise resolvido sem um valor", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Adicionar 'void' a todos os Promises resolvidos sem um valor", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Adicionar um arquivo tsconfig.json ajudará a organizar projetos que contêm arquivos TypeScript e JavaScript. Saiba mais em https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Todas as declarações de '{0}' devem ter restrições idênticas.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas as declarações de '{0}' devem ter modificadores idênticos.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas as declarações de '{0}' devem ter parâmetros de tipo idênticos.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas as declarações de um método abstrato devem ser consecutivas.", + "All_destructured_elements_are_unused_6198": "Todos os elementos desestruturados são inutilizados.", + "All_imports_in_import_declaration_are_unused_6192": "Nenhuma das importações na declaração de importação está sendo utilizada.", + "All_type_parameters_are_unused_6205": "Todos os parâmetros de tipo são inutilizados.", + "All_variables_are_unused_6199": "Nenhuma das variáveis está sendo utilizada.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Permitir que arquivos JavaScript façam parte do seu programa. Use a opção \"checkJs\" para obter erros desses arquivos.", + "Allow_accessing_UMD_globals_from_modules_6602": "Permitir o acesso a UMD globais de módulos.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permitir 'importar x de y' quando um módulo não tiver uma exportação padrão.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permitir a importação de funções auxiliares do tslib uma vez por projeto, em vez de incluí-las por arquivo.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que as importações incluam extensões de arquivo TypeScript. Requer a definição de '--moduleResolution bundler' e '--noEmit' ou '--emitDeclarationOnly'.", + "Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permitir que várias pastas sejam tratadas como uma ao resolver módulos.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "O nome do arquivo '{0}' já incluído difere do nome de arquivo '{1}' somente em maiúsculas e minúsculas.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "A declaração de módulo de ambiente não pode especificar o nome do módulo relativo.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Módulos de ambiente não podem ser aninhados em outros módulos ou namespaces.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Um módulo AMD não pode ter várias atribuições de nome.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Um acessador abstrato não pode ter uma implementação.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Não é possível usar um modificador de acessibilidade com um identificador privado.", + "An_accessor_cannot_have_type_parameters_1094": "Um acessador não pode ter parâmetros de tipo.", + "An_accessor_property_cannot_be_declared_optional_1276": "Uma propriedade 'acessador' não pode ser declarada opcional.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Uma declaração de módulo de ambiente só é permitida no nível superior em um arquivo.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Não foi fornecido um argumento para '{0}'.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Não foi fornecido um argumento correspondente a esse padrão de associação.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Um operando aritmético deve ser do tipo 'any', 'number', 'bignit' ou um tipo enumerado.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Uma função de seta não pode ter um parâmetro 'this'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Uma função ou método assíncrono no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Uma função ou método assíncrono deve retornar um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "An_async_iterator_must_have_a_next_method_2519": "O iterador assíncrono deve ter um método 'next()'.", + "An_element_access_expression_should_take_an_argument_1011": "Uma expressão de acesso do elemento deveria receber um argumento.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Um membro de enumeração não pode ser nomeado com um identificador privado.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Um membro de enumeração não pode ter um nome numérico.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Um nome de membro de enumeração deve ser seguido por ',', '=' ou '}'.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Uma versão expandida dessas informações, mostrando todas as opções do compilador possíveis", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Uma atribuição de exportação não pode ser usada em um módulo com outros elementos exportados.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Uma atribuição de exportação não pode ser usada em um namespace.", + "An_export_assignment_cannot_have_modifiers_1120": "Uma atribuição de exportação não pode ter modificadores.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Uma atribuição de exportação deve estar no nível superior de uma declaração de arquivo ou módulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Uma declaração de exportação só pode ser usada no nível superior de um módulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Uma declaração de exportação só pode ser usada no nível superior de um namespace ou módulo.", + "An_export_declaration_cannot_have_modifiers_1193": "Uma declaração de exportação não pode ter modificadores.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Uma declaração 'export =' deve fazer referência a um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Uma declaração 'export =' deve fazer referência a um valor quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' refere-se apenas a um tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' se refere somente a um tipo.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Uma expressão do tipo 'nula' não pode ser testada quanto à veracidade.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Um valor de escape Unicode estendido deve estar entre 0x0 e 0x10FFFF, inclusive.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Um identificador ou palavra-chave não pode imediatamente seguir um literal numérico.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uma implementação não pode ser declarada em contextos de ambiente.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Um alias de importação não pode fazer referência a uma declaração que foi exportada usando 'tipo de exportação'.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Um alias de importação não pode fazer referência a uma declaração que foi importada usando 'tipo de importação'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Um alias de importação não pode resolver uma declaração de tipo ou somente tipo quando \"verbatimModuleSyntax\" estiver habilitado.", + "An_import_alias_cannot_use_import_type_1392": "Um alias de importação não pode usar um 'tipo de importação'", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Uma declaração de importação só pode ser usada no nível superior de um módulo.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Uma declaração de importação só pode ser usada no nível superior de um namespace ou módulo.", + "An_import_declaration_cannot_have_modifiers_1191": "Uma declaração de importação não pode ter modificadores.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Um caminho de importação só pode terminar com uma extensão '{0}' quando 'allowImportingTsExtensions' estiver habilitado.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Uma assinatura de índice não pode ter um parâmetro rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Uma assinatura de índice não pode ter uma vírgula à direita.", + "An_index_signature_must_have_a_type_annotation_1021": "Uma assinatura de índice deve ter uma anotação de tipo.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Uma assinatura de índice deve ter exatamente um parâmetro.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Um parâmetro de assinatura de índice não pode ter um ponto de interrogação.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Um parâmetro de assinatura de índice não pode ter um modificador de acessibilidade.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Um parâmetro de assinatura de índice não pode ter um inicializador.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Um parâmetro de assinatura de índice deve ter uma anotação de tipo.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Um tipo de parâmetro de assinatura de índice não pode ser um tipo literal ou genérico. Considere usar um tipo de objeto mapeado.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Um tipo de parâmetro de assinatura de índice deve ser 'cadeia de caracteres', 'número', 'símbolo' ou um tipo literal de modelo.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Uma expressão de instanciação não pode ser seguida por um acesso de propriedade.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Uma interface só pode estender um identificador/nome qualificado com argumentos de tipo opcionais.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Uma interface não pode estender um tipo primitivo como '{0}'. Ela só pode estender outros tipos de objetos nomeados.", + "An_interface_property_cannot_have_an_initializer_1246": "Uma propriedade de interface não pode ter um inicializador.", + "An_iterator_must_have_a_next_method_2489": "Um iterador deve ter um método 'next()'.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Um pragma @jsxFrag é necessário ao usar um pragma @jsx com fragmentos JSX.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Um literal de objeto não pode ter vários acessadores get/set com o mesmo nome.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Um literal de objeto não pode ter várias propriedades com o mesmo nome.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Um literal de objeto não pode ter propriedade e acessador com o mesmo nome.", + "An_object_member_cannot_be_declared_optional_1162": "Um membro de objeto não pode ser declarado como opcional.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "O método '[Symbol.hasInstance]' de um objeto deve retornar um valor booliano para que ele seja usado no lado direito de uma expressão 'instanceof'.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Uma cadeia opcional não pode conter identificadores privados.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Um elemento opcional não pode seguir um elemento REST.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Um valor externo de 'this' é sombreado por este contêiner.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "A assinatura de sobrecarga não pode ser declarada como geradora.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Uma expressão unária com o operador '{0}' não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", + "Annotate_everything_with_types_from_JSDoc_95043": "Anotar tudo com tipos do JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propriedades da função expando em um namespace", + "Annotate_with_type_from_JSDoc_95009": "Anotar com o tipo do JSDoc", + "Another_export_default_is_here_2753": "Outro padrão de exportação está aqui.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualquer propriedade Unicode que possa corresponder a mais de um único caractere só estará disponível quando o sinalizador Conjuntos Unicode (v) estiver definido.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualquer coisa que possa corresponder a mais de um único caractere é inválida dentro de uma classe de caractere negada.", + "Are_you_missing_a_semicolon_2734": "Você está esquecendo de um ponto e vírgula?", + "Argument_expression_expected_1135": "Expressão de argumento esperada.", + "Argument_for_0_option_must_be_Colon_1_6046": "O argumento para a opção '{0}' deve ser: {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "O argumento da importação dinâmica não pode ser um elemento de espalhamento.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "O argumento do tipo '{0}' não é atribuível ao parâmetro do tipo '{1}'.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "O argumento do tipo '{0}' não pode ser atribuído ao parâmetro do tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Não foram fornecidos argumentos para o parâmetro REST '{0}'.", + "Array_element_destructuring_pattern_expected_1181": "Padrão de desestruturação de elemento da matriz esperado.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Matrizes com elementos espalhados não podem ser inferidas com --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "As declarações exigem que todos os nomes no destino de chamada sejam declarados com uma anotação de tipo explícito.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "As declarações exigem que o destino da chamada seja um identificador ou um nome qualificado.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Não há suporte para a atribuição de propriedades a funções sem declará-las com --isolatedDeclarations. Adicione uma declaração explícita para as propriedades atribuídas a essa função.", + "Asterisk_Slash_expected_1010": "'*/' esperado.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Pelo menos um acessor deve ter uma anotação de tipo explícita com `--isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Acréscimos de escopo global somente podem ser diretamente aninhados em módulos externos ou declarações de módulo de ambiente.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Acréscimos de escopo global devem ter o modificador 'declare' a menos que apareçam em contexto já ambiente.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "A descoberta automática para digitações está habilitada no projeto '{0}'. Executando o passe de resolução extra para o módulo '{1}' usando o local do cache '{2}'.", + "BUILD_OPTIONS_6919": "OPÇÕES DE BUILD", + "Backwards_Compatibility_6253": "Compatibilidade com Versões Anteriores", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "As expressões de classe base não podem referenciar parâmetros de tipo de classe.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "O tipo de retorno do construtor base '{0}' não é um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Todos os construtores base devem ter o mesmo tipo de retorno.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Diretório base para resolver nomes de módulo não absolutos.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Os literais de BigInt não estão disponíveis ao direcionar para menos de ES2020.", + "Binary_digit_expected_1177": "Dígito binário esperado.", + "Binding_element_0_implicitly_has_an_1_type_7031": "O elemento de associação '{0}' tem implicitamente um tipo '{1}'.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Variável de escopo de bloco '{0}' usada antes da sua declaração.", + "Build_a_composite_project_in_the_working_directory_6925": "Crie um projeto composto no diretório de trabalho.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilar um ou mais projetos e suas dependências, se estiverem desatualizados", + "Build_option_0_requires_a_value_of_type_1_5073": "A opção de build '{0}' requer um valor do tipo {1}.", + "Building_project_0_6358": "Compilando o projeto '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Iteradores internos são instanciados com um tipo 'TReturn' de 'undefined' em vez de 'any'.", + "COMMAND_LINE_FLAGS_6921": "SINALIZADORES DE LINHA DE COMANDO", + "COMMON_COMMANDS_6916": "COMANDOS COMUNS", + "COMMON_COMPILER_OPTIONS_6920": "OPÇÕES COMUNS DO COMPILADOR", + "Call_decorator_expression_90028": "Chamar expressão do decorador", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Os tipos de retorno da assinatura de chamada '{0}' e '{1}' são incompatíveis.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Assinatura de chamada, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Assinaturas de chamada sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", + "Call_target_does_not_contain_any_signatures_2346": "O destino da chamada não contém nenhuma assinatura.", + "Can_only_convert_logical_AND_access_chains_95142": "Só é possível converter cadeias de acesso E lógicas", + "Can_only_convert_named_export_95164": "Só pode converter exportação nomeada", + "Can_only_convert_property_with_modifier_95137": "Só é possível converter a propriedade com o modificador", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Só é possível converter concatenações de cadeia de caracteres e literais de cadeia de caracteres", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Não foi possível acessar '{0}.{1}' porque '{0}' é um tipo, mas não um namespace. Você quis dizer recuperar o tipo da propriedade '{1}' em '{0}' com '{0}[\"{1}\"]'?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Não é possível acessar '{0}' de outro arquivo sem qualificação quando '{1}' estiver habilitado. Use '{2}' em vez disso.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Não é possível acessar enumerações const de ambiente quando '{0}' estiver habilitado.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Não é possível atribuir um tipo de construtor '{0}' para um tipo de construtor '{1}'.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Não é possível atribuir um tipo de construtor abstrato a um tipo de construtor não abstrato.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Não é possível fazer a atribuição a '{0}' porque ela é uma classe.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Não é possível atribuir a '{0}' porque é uma constante.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Não é possível fazer a atribuição a '{0}' porque ela é uma função.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Não é possível fazer a atribuição a '{0}' porque ele é um namespace.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Não é possível atribuir a '{0}' porque é uma propriedade de somente leitura.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Não é possível fazer a atribuição a '{0}' porque ela é uma enumeração.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Não é possível fazer a atribuição a '{0}' porque ela é uma importação.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Não é possível atribuir a '{0}' porque não é uma variável.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Não é possível fazer a atribuição ao método privado '{0}'. Os métodos privados não são graváveis.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Não é possível aumentar o módulo '{0}' porque ele resolve para uma entidade não módulo.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Não é possível aumentar o módulo '{0}' com as exportações do valor, porque ele resolve para uma entidade sem módulo.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Não é possível compilar módulos usando a opção '{0}', a menos que o sinalizador '--module' seja 'amd' ou 'system'.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Não é possível criar uma instância de uma classe abstrata.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Não é possível delegar iteração para valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o gerador que a contém sempre enviará '{0}'.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Não é possível exportar '{0}'. Somente declarações locais podem ser exportadas de um módulo.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Não é possível estender uma classe '{0}'. O construtor de classe está marcado como privado.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Não é possível estender uma interface '{0}'. Você quis dizer 'implements'?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Não é possível localizar um arquivo tsconfig.json no diretório atual: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Não é possível encontrar um arquivo tsconfig.json no diretório especificado: '{0}'.", + "Cannot_find_global_type_0_2318": "Não é possível encontrar o tipo global '{0}'.", + "Cannot_find_global_value_0_2468": "Não é possível encontrar o valor global '{0}'.", + "Cannot_find_lib_definition_for_0_2726": "Não é possível encontrar a definição de biblioteca para '{0}'.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Não é possível encontrar a definição de biblioteca para '{0}'. Você quis dizer '{1}'?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Não é possível localizar o módulo '{0}'. Considere usar '--resolveJsonModule' para importar o módulo com a extensão '.json'.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Não é possível localizar o módulo '{0}'. Você quis definir a opção 'moduleResolution' como 'nodenext' ou adicionar aliases à opção 'paths'?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Não é possível localizar o módulo '{0}' ou suas declarações de tipo correspondentes.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Não é possível encontrar as declarações de módulo ou tipo para a importação com efeito colateral de ''{0}''.", + "Cannot_find_name_0_2304": "Não é possível encontrar o nome '{0}'.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Não é possível localizar o nome '{0}'. Você quis dizer '{1}'?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Não foi possível localizar o nome '{0}'. Você quis dizer o membro de instância 'this.{0}'?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Não foi possível encontrar o nome '{0}'. Você quis dizer o membro estático '{1}.{0}'?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Não foi possível encontrar o nome '{0}'. Você quis escrever isto em uma função assíncrona?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{1}' ou posterior.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para incluir 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun' e adicione 'bun' ao campo de tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e depois adicione 'jest' ou 'mocha' ao campo tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Não é possível localizar o nome '{0}'. Você precisa instalar as definições de tipo para jQuery? Tente `npm i --save-dev @types/jquery` e, em seguida, adicione 'jquery' para o campo tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o nó? Tente `npm i --save-dev @types/node`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para o nó? Tente `npm i --save-dev @types/node` e, em seguida, adicione 'node' ao campo tipos em seu tsconfig.", + "Cannot_find_namespace_0_2503": "Não é possível encontrar o namespace '{0}'.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Não é possível localizar o namespace '{0}'. Você quis dizer '{1}'?", + "Cannot_find_parameter_0_1225": "Não é possível encontrar o parâmetro '{0}'.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Não é possível encontrar o caminho do subdiretório comum para os arquivos de entrada.", + "Cannot_find_type_definition_file_for_0_2688": "Não é possível encontrar o arquivo de definição de tipo para '{0}'.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Não é possível importar arquivos de declaração de tipo. Considere a possibilidade de importar '{0}' em vez de '{1}'.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Não é possível inicializar a variável com escopo externo '{0}' no mesmo escopo que a declaração de escopo de bloco '{1}'.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Não é possível invocar um objeto que é possivelmente 'nulo'.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Não é possível invocar um objeto que é possivelmente 'nulo' ou 'indefinido'.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Não é possível invocar um objeto que é possivelmente 'indefinido'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a desestruturação da matriz sempre enviará '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o array spread sempre enviará '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a instrução for-of sempre enviará '{0}'.", + "Cannot_move_statements_to_the_selected_file_95183": "Não é possível mover instruções para o arquivo selecionado", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Não é possível mover para o arquivo, o arquivo selecionado é inválido", + "Cannot_read_file_0_5083": "Não é possível ler o arquivo '{0}'.", + "Cannot_read_file_0_Colon_1_5012": "Não é possível ler o arquivo '{0}': {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Não é possível declarar novamente a variável de escopo de bloco '{0}'.", + "Cannot_redeclare_exported_variable_0_2323": "Não é possível redeclarar a variável exportada '{0}'.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Não é possível declarar novamente o identificador '{0}' na cláusula catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Não é possível iniciar uma chamada de função em uma anotação de tipo.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Não é possível usar JSX, a menos que o sinalizador '--jsx' seja fornecido.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Não é possível usar 'export import' em um tipo ou namespace somente de tipo quando '{0}' estiver habilitado.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Não será possível usar importações, exportações ou acréscimos de módulo quando '--module' for 'none'.", + "Cannot_use_namespace_0_as_a_type_2709": "Não é possível usar o namespace '{0}' como um tipo.", + "Cannot_use_namespace_0_as_a_value_2708": "Não é possível usar o namespace '{0}' como um valor.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Não é possível usar \"this\" em um inicializador de propriedade estática de uma classe decorada.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Não é possível gravar o arquivo '{0}' porque ele substituirá o arquivo '.tsbuildinfo' gerado pelo projeto referenciado '{1}'", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Não é possível gravar o arquivo '{0}' porque ele seria substituído por diversos arquivos de entrada.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Não é possível gravar o arquivo '{0}' porque ele substituiria o arquivo de entrada.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "A variável de cláusula catch não pode ter um inicializador.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "A anotação de tipo de variável da cláusula catch precisa ser 'any' ou 'unknown' quando especificada.", + "Change_0_to_1_90014": "Alterar '{0}' para '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "Alterar todas as interfaces estendidas para 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Alterar todos os tipos de estilo jsdoc para TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alterar todos os tipos de estilo jsdoc para TypeScript (e adicionar '| undefined' a tipos que permitem valor nulo)", + "Change_extends_to_implements_90003": "Alterar 'extends' para 'implements'", + "Change_spelling_to_0_90022": "Alterar ortografia para '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifique as propriedades de classe declaradas, mas não definidas no construtor.", + "Check_side_effect_imports_6806": "Verifique as importações de efeitos colaterais.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verificar se os argumentos para os métodos 'associar', 'chamar' e 'aplicar' correspondem à função original.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verificando se '{0}' é o maior prefixo correspondente para '{1}' - '{2}'.", + "Circular_definition_of_import_alias_0_2303": "Definição circular do alias de importação '{0}'.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularidade detectada ao resolver a configuração: {0}", + "Circularity_originates_in_type_at_this_location_2751": "A circularidade é originada no tipo neste local.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "A classe '{0}' define o acessador de membro de instância '{1}', mas a classe estendida '{2}' o define como uma função de membro de instância.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "A classe '{0}' define a função de membro de instância '{1}', mas a classe estendida '{2}' a define como um acessador de membro de instância.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "A classe '{0}' define a propriedade de membro de instância '{1}', mas a classe estendida '{2}' a define como uma função de membro de instância.", + "Class_0_incorrectly_extends_base_class_1_2415": "A classe '{0}' estende incorretamente a classe base '{1}'.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "A classe '{0}' implementa incorretamente a classe '{1}'. Você pretendia estender '{1}' e herdar seus membros como uma subclasse?", + "Class_0_incorrectly_implements_interface_1_2420": "A classe '{0}' implementa incorretamente a interface '{1}'.", + "Class_0_used_before_its_declaration_2449": "Classe '{0}' usada antes de sua declaração.", + "Class_constructor_may_not_be_a_generator_1368": "O construtor de classe não pode ser um gerador.", + "Class_constructor_may_not_be_an_accessor_1341": "O construtor de classe não pode ser um acessador.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "A declaração da classe não pode implementar a lista de sobrecarga para '{0}'.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "As declarações de classe não podem ter mais de uma marca '@augments' ou '@extends'.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Os decoradores de classe não podem ser usados com um identificador privado estático. Considere remover o decorador experimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "O campo de classe '{0}' definido pela classe pai não está acessível na classe filho via super.", + "Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar para ES5 e superior com o módulo {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.", + "Classes_can_only_extend_a_single_class_1174": "Classes só podem estender uma única classe.", + "Classes_may_not_have_a_field_named_constructor_18006": "Classes não podem ter um campo denominado 'constructor'.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "O código contido em uma classe é avaliado no modo estrito do JavaScript que não permite o uso de '{0}'. Para obter mais informações, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opções da Linha de Comando", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compile o projeto dando o caminho para seu arquivo de configuração ou para uma pasta com um 'tsconfig.json'.", + "Compiler_Diagnostics_6251": "Diagnóstico do Compilador", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "A opção do compilador '{0}' não pode receber uma cadeia de caracteres vazia.", + "Compiler_option_0_expects_an_argument_6044": "A opção do compilador '{0}' espera um argumento.", + "Compiler_option_0_may_not_be_used_with_build_5094": "A opção de compilador '--{0}' não pode ser usada com '--build'.", + "Compiler_option_0_may_only_be_used_with_build_5093": "A opção de compilador '--{0}' pode ser usada somente com '--build'.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "A opção do compilador '{0}' de valor '{1}' é instável. Use o TypeScript noturno para silenciar esse erro. Tente atualizar com 'npm install -D typescript@next'.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "A opção do compilador '{0}' requer um valor do tipo {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "O compilador reserva o nome '{0}' ao emitir um identificador privado para versões anteriores.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila o projeto TypeScript localizado no caminho especificado.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila o projeto atual (tsconfig.json no diretório de trabalho).", + "Compiles_the_current_project_with_additional_settings_6929": "Compila o projeto atual, com configurações adicionais.", + "Completeness_6257": "Integridade", + "Composite_projects_may_not_disable_declaration_emit_6304": "Projetos compostos não podem desabilitar a emissão de declaração.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Projetos compostos podem não desabilitar a compilação incremental.", + "Computed_from_the_list_of_input_files_6911": "Calculado a partir da lista de arquivos de entrada", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "As propriedades computadas devem ser literais de números ou cadeia de caracteres, variáveis ou expressões pontilhadas com --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Nomes de propriedade calculados não são permitidos em enums.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nomes de propriedades computadas em literais de classe ou objeto não podem ser inferidos com --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Os valores computados não são permitidos em uma enumeração com membros de valor de cadeia de caracteres.", + "Concatenate_and_emit_output_to_single_file_6001": "Concatenar e emitir saída para um arquivo único.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condições a serem definidas além dos padrões específicos do resolvedor ao resolver importações.", + "Conflicts_are_in_this_file_6201": "Há conflitos neste arquivo.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere adicionar um modificador 'declare' para esta classe.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Os tipos de retorno de assinatura de constructo '{0}' e '{1}' são incompatíveis.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Assinatura de constructo, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Assinaturas de constructo sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", + "Constructor_implementation_is_missing_2390": "Implementação do construtor ausente.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "O construtor de classe '{0}' é privado e somente acessível na declaração de classe.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "O construtor de classe '{0}' é protegido e somente acessível na declaração de classe.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de união.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de interseção.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Construtores para classes derivadas devem conter uma chamada 'super'.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "O arquivo contido não foi especificado e o diretório raiz não pode ser determinado, ignorando a pesquisa na pasta 'node_modules'.", + "Containing_function_is_not_an_arrow_function_95128": "A função contentora não é uma função de seta", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controlar qual método é usado para detectar arquivos JS no formato de módulo.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "A conversão do tipo '{0}' para o tipo '{1}' pode ser um erro porque nenhum tipo está suficientemente sobreposto ao outro. Se isso era intencional, converta a expressão para 'unknown' primeiro.", + "Convert_0_to_1_in_0_95003": "Converter '{0}' em '{1} em {0}'", + "Convert_0_to_mapped_object_type_95055": "Converter '{0}' para o tipo de objeto mapeado", + "Convert_all_const_to_let_95102": "Converta todos os 'const' para 'let'", + "Convert_all_constructor_functions_to_classes_95045": "Converter todas as funções de construtor em classes", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Converter todos os caracteres inválidos em código de entidade HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Converter todos os tipos re-exportados para exportações somente de tipo", + "Convert_all_require_to_import_95048": "Converter todos os 'require' em 'import'", + "Convert_all_to_async_functions_95066": "Converter todos para funções assíncronas", + "Convert_all_to_bigint_numeric_literals_95092": "Converter todos para literais numéricos bigint", + "Convert_all_to_default_imports_95035": "Converter tudo para importações padrão", + "Convert_all_type_literals_to_mapped_type_95021": "Converter todos os literais de tipo em tipo mapeado", + "Convert_all_typedef_to_TypeScript_types_95177": "Converta todos os typedef em tipos TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Converter a função de seta ou a expressão de função", + "Convert_const_to_let_95093": "Converter 'const' para 'let'", + "Convert_default_export_to_named_export_95061": "Converter exportação padrão para exportação nomeada", + "Convert_function_declaration_0_to_arrow_function_95106": "Converter a declaração de função '{0}' em função de seta", + "Convert_function_expression_0_to_arrow_function_95105": "Converter a expressão de função '{0}' em função de seta", + "Convert_function_to_an_ES2015_class_95001": "Converter função em uma classe ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Converter o caractere inválido para seu código de entidade HTML", + "Convert_named_export_to_default_export_95062": "Converter a exportação nomeada para a exportação padrão", + "Convert_named_imports_to_default_import_95170": "Converter importações nomeadas em importação padrão", + "Convert_named_imports_to_namespace_import_95057": "Converter importações nomeadas em importação de namespace", + "Convert_namespace_import_to_named_imports_95056": "Converter importação de namespace em importações nomeadas", + "Convert_overload_list_to_single_signature_95118": "Converter a lista de sobrecarga em assinatura única", + "Convert_parameters_to_destructured_object_95075": "Converter parâmetros para objeto não estruturado", + "Convert_require_to_import_95047": "Converter 'require' em 'import'", + "Convert_to_ES_module_95017": "Converter em módulo ES", + "Convert_to_a_bigint_numeric_literal_95091": "Converter para um literal numérico bigint", + "Convert_to_anonymous_function_95123": "Converter em uma função anônima", + "Convert_to_arrow_function_95125": "Converter em uma função de seta", + "Convert_to_async_function_95065": "Converter para uma função assíncrona", + "Convert_to_default_import_95013": "Converter para importação padrão", + "Convert_to_named_function_95124": "Converter em uma função nomeada", + "Convert_to_optional_chain_expression_95139": "Converter em expressão de cadeia opcional", + "Convert_to_template_string_95096": "Converter para cadeia de caracteres de modelo", + "Convert_to_type_only_export_1364": "Converter para exportação somente de tipo", + "Convert_typedef_to_TypeScript_type_95176": "Converta o typedef em um tipo TypeScript.", + "Corrupted_locale_file_0_6051": "Arquivo de localidade {0} corrompido.", + "Could_not_convert_to_anonymous_function_95153": "Não foi possível fazer a conversão para a função anônima", + "Could_not_convert_to_arrow_function_95151": "Não foi possível fazer a conversão para a função de seta", + "Could_not_convert_to_named_function_95152": "Não foi possível fazer a conversão para a função nomeada", + "Could_not_determine_function_return_type_95150": "Não foi possível determinar o tipo de retorno da função", + "Could_not_find_a_containing_arrow_function_95127": "Não foi possível localizar uma função de seta contentora", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Não foi possível localizar o arquivo de declaração para o módulo '{0}'. '{1}' tem implicitamente um tipo 'any'.", + "Could_not_find_convertible_access_expression_95140": "Não foi possível localizar a expressão de acesso conversível", + "Could_not_find_export_statement_95129": "Não foi possível localizar a instrução de exportação", + "Could_not_find_import_clause_95131": "Não foi possível localizar a cláusula de importação", + "Could_not_find_matching_access_expressions_95141": "Não foi possível localizar expressões de acesso correspondentes", + "Could_not_find_name_0_Did_you_mean_1_2570": "Não foi possível encontrar o nome '{0}'. Você quis dizer '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "Não foi possível localizar a importação de namespace nem as importações nomeadas", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Não foi possível localizar a propriedade para a qual o acessador deve ser gerado", + "Could_not_find_variable_to_inline_95185": "Não foi possível localizar a variável para embutida.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Não foi possível resolver o caminho '{0}' com as extensões: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Não foi possível gravar o arquivo '{0}': {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Criar arquivos source map para arquivos JavaScript emitidos.", + "Create_sourcemaps_for_d_ts_files_6614": "Criar sourcemaps para arquivos .d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Cria um tsconfig.json com as configurações recomendadas no diretório de trabalho.", + "DIRECTORY_6038": "DIRETÓRIO", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sequências de escape decimais e referências inversas não são permitidas em uma classe de caracteres.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Decimais com zeros à esquerda não são permitidos.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "A declaração aumenta a declaração em outro arquivo. Isso não pode ser serializado.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "A emissão de declaração para este arquivo requer a preservação desta importação para aumentos. Não há suporte para isso com --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}' do módulo '{1}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "A declaração emit para esse parâmetro requer a adição implícita de indefinido ao seu tipo. Não há suporte para isso com --isolatedDeclarations.", + "Declaration_expected_1146": "Declaração esperada.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "O nome de declaração entra em conflito com o identificador global integrado '{0}'.", + "Declaration_or_statement_expected_1128": "Declaração ou instrução esperada.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Declaração ou instrução esperada. Esse \"=\" segue um bloco de instruções, portanto, se você pretendia escrever uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "As declarações com asserções de atribuição definitiva também precisam ter anotações de tipo.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "As declarações com inicializadores também não podem ter asserções de atribuição definitiva.", + "Declare_a_private_field_named_0_90053": "Declare um campo privado chamado '{0}'.", + "Declare_method_0_90023": "Declarar método '{0}'", + "Declare_private_method_0_90038": "Declarar método privado '{0}'", + "Declare_private_property_0_90035": "Declarar a propriedade privada '{0}'", + "Declare_property_0_90016": "Declarar propriedade '{0}'", + "Declare_static_method_0_90024": "Declarar método estático '{0}'", + "Declare_static_property_0_90027": "Declarar propriedade estática '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "O tipo de retorno da função decorador '{0}' não é atribuível ao tipo '{1}'.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "O tipo de retorno da função decorador é '{0}' mas deve ser 'void' ou 'any'.", + "Decorator_used_before_export_here_1486": "Decorador usado antes de 'export' aqui.", + "Decorators_are_not_valid_here_1206": "Os decoradores não são válidos aqui.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Os decoradores não podem ser aplicados a vários acessadores get/set de mesmo nome.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Os decoradores podem não aparecer após 'export' ou 'export default' se também aparecerem antes de 'export'.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Os decoradores devem preceder o nome e todas as palavras-chave das declarações de propriedade.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Padronize as variáveis da cláusula catch como 'desconhecido' em vez de 'qualquer'.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "A exportação padrão do módulo tem ou está usando o nome particular '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "As exportações padrão não podem ser inferidas com --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "As importações padrão não são permitidas em uma importação adiada.", + "Default_library_1424": "Biblioteca padrão", + "Default_library_for_target_0_1425": "Biblioteca padrão para o destino '{0}'", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Só há suporte para importações adiadas quando o sinalizador \"--module\" está definido como \"esnext\" ou \"preserve\".", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "As definições dos seguintes identificadores estão em conflito com as de outro arquivo: {0}", + "Delete_all_unused_declarations_95024": "Excluir todas as declarações não usadas", + "Delete_all_unused_imports_95147": "Excluir todas as importações não usadas", + "Delete_all_unused_param_tags_95172": "Excluir todas as marcas '@param' não usadas", + "Delete_the_outputs_of_all_projects_6365": "Excluir as saídas de todos os projetos.", + "Delete_unused_param_tag_0_95171": "Excluir a marca '@param' não usada '{0}'", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Preterido] Use '--jsxFactory' no lugar. Especifique o objeto invocado para createElement ao direcionar uma emissão de JSX 'react'", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Preterido] Use '--outFile' no lugar. Concatene e emita uma saída para um arquivo único", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Preterido] Use '--skipLibCheck' no lugar. Ignore a verificação de tipo dos arquivos de declaração de biblioteca padrão.", + "Deprecated_setting_Use_outFile_instead_6677": "Configuração preterida. Use 'outFile' em vez disso.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Você esqueceu de usar 'await'?", + "Did_you_mean_0_1369": "Você quis dizer '{0}'?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Você quis dizer que '{0}' deve ser restrito ao tipo 'new (...args: any[]) => {1}'?", + "Did_you_mean_to_call_this_expression_6212": "Você quis chamar esta expressão?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Você quis marcar esta função como 'async'?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Você quis usar ':'? '=' só pode estar após um nome de propriedade quando o literal de objeto contentor faz parte de um padrão de desestruturação.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Você quis usar 'new' com essa expressão?", + "Digit_expected_1124": "Dígito esperado.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "O diretório '{0}' não existe; ignorando todas as pesquisas nele.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "O diretório '{0}' não contém o escopo package.json. As importações não resolverão.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Desabilitar a adição de diretivas 'use strict' em arquivos JavaScript emitidos.", + "Disable_checking_for_this_file_90018": "Desabilitar a verificação para esse arquivo", + "Disable_emitting_comments_6688": "Desabilitar comentários de emissão.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Desabilite as declarações de emissão que têm '@internal' em seus comentários JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Desabilitar a emissão de arquivos de uma compilação.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Desabilitar a emissão de arquivos se forem reportados erros de verificação de tipo.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Desabilitar a exclusão de declarações 'enum const' no código gerado.", + "Disable_error_reporting_for_unreachable_code_6603": "Desabilitar o relatório de erros para código inacessível.", + "Disable_error_reporting_for_unused_labels_6604": "Desabilitar o relatório de erros para rótulos não utilizados.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Desative a verificação completa do tipo (somente erros críticos de análise e emissão serão relatados).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Desabilitar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Desabilitar a inclusão de qualquer arquivo de biblioteca, incluindo o padrão lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Desabilite o carregamento de projetos referenciados.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Desabilitar arquivos de origem de referência em vez de arquivos de declaração ao referenciar projetos compostos.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Desabilitar relatório de excesso de erros de propriedade durante a criação de literais de objeto.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Desabilitar a resolução de symlinks para seus realpath. Isso se correlaciona com o mesmo sinalizador no nó.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Desabilitar as limitações de tamanho nos projetos JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Desabilite a pesquisa de solução deste projeto.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Desabilitar verificação estrita de assinaturas genéricas em tipos de função.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Desabilitar a aquisição de tipo para projetos JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Desabilitar truncamento de tipos em mensagens de erro.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Desabilite o uso de arquivos de origem em vez de arquivos de declaração de projetos referenciados.", + "Disable_wiping_the_console_in_watch_mode_6684": "Desabilitar a limpeza do console no modo de inspeção.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Desabilita a inferência para a aquisição de tipo examinando filenames em um projeto.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Não permitir 'importar', 'necessário ou' de expandir o número de arquivos que TypeScript deve adicionar a um projeto.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Não permitir referências com maiúsculas de minúsculas inconsistentes no mesmo arquivo.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Não adicionar as referências de barra tripla nem os módulos importados à lista de arquivos compilados.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Não permitir construções de tempo de execução que não fazem parte de ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Não emita comentários para a saída.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Não emita declarações de código que contenham uma anotação '@internal'.", + "Do_not_emit_outputs_6010": "Não emita saídas.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Não emita saídas se erros forem reportados.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Não emita diretivas 'use strict' na saída de módulo.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Não apague declarações const enum no código gerado.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Não gerar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Não incluir o arquivo de biblioteca padrão (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Não relate erros sobre código inacessível.", + "Do_not_report_errors_on_unused_labels_6074": "Não relate erros sobre rótulos não utilizados.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Não resolver o real caminho de symlinks.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Não transforme ou elimine quaisquer importações ou exportações não marcadas como somente tipo, garantindo que sejam gravadas no formato do arquivo de saída com base na configuração 'module'.", + "Do_not_truncate_error_messages_6165": "Não truncar as mensagens de erro.", + "Duplicate_function_implementation_2393": "Implementação de função duplicada.", + "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' no escopo de nível superior de um módulo.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicar o identificador '{0}'. O compilador reserva o nome '{1}' em escopo de alto nível de um módulo que contém funções assíncronas.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' ao emitir 'super' referências em inicializadores estáticos.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. O compilador usa a declaração '{1}' para dar suporte a funções assíncronas.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificador duplicado '{0}'. Os elementos estáticos e de instância não podem compartilhar o mesmo nome privado.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador 'arguments' duplicado. O compilador usa 'arguments' para inicializar os parâmetros rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado '_newTarget'. O compilador usa a declaração de variável '_newTarget' para capturar a referência de metapropriedade 'new.target'.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador '_this' duplicado. O compilador usa a declaração de variável '_this' para capturar a referência 'this'.", + "Duplicate_index_signature_for_type_0_2374": "Assinatura de índice duplicada para o tipo '{0}'.", + "Duplicate_label_0_1114": "Rótulo '{0}' duplicado.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Propriedade '{0}' duplicada.", + "Duplicate_regular_expression_flag_1500": "Duplicar o sinalizador de expressão regular.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "O especificador da importação dinâmica deve ser do tipo 'string', mas aqui tem o tipo '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Só há suporte para as importações dinâmicas quando o sinalizador “--module” estiver definido como “es2020”, “es2022”, “esnext”, “commonjs”, “amd”, “system”, “umd”, “node16”, “node18”, “node20” ou “nodenext”.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "As importações dinâmicas só podem aceitar um especificador de módulo e um conjunto opcional de atributos como argumentos", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "As importações dinâmicas só dão suporte a um segundo argumento quando a opção “--module” estiver definida como “esnext”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Importações e exportações ECMAScript não podem ser gravadas em um arquivo CommonJS em \"texttimModuleSyntax\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Importações e exportações ECMAScript não podem ser gravadas em um arquivo CommonJS em \"texttimModuleSyntax\". Ajuste o campo \"type\" no \"package.json\" mais próximo para tornar esse arquivo um módulo ECMAScript ou ajuste as configurações \"texttimModuleSyntax\", \"module\" e \"moduleResolution\" no TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "A sintaxe do módulo ECMAScript não é permitida em um módulo CommonJS quando \"module\" está definido como \"preserve\".", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaração de '{0}.{1}' difere em seu valor, onde '{2}' era esperado, mas '{3}' foi fornecido.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada membro do tipo de união '{0}' tem assinaturas de constructo, mas nenhuma dessas assinaturas é compatível entre si.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada membro do tipo de união '{0}' tem assinaturas, mas nenhuma dessas assinaturas é compatível entre si.", + "Editor_Support_6249": "Suporte do Editor", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "O elemento implicitamente tem um tipo 'any' porque a expressão do tipo '{0}' não pode ser usada para o tipo de índice '{1}'.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "O elemento implicitamente tem um tipo 'any' porque a expressão de índice não é do tipo 'number'.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "O elemento tem, implicitamente, 'qualquer' tipo, pois o tipo '{0}' não tem assinatura de índice.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "O elemento implicitamente tem um tipo 'any' porque o tipo '{0}' não tem assinatura de índice. Você quis dizer chamada de '{1}'?", + "Emit_6246": "Emitir", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emitir os campos de classe ECMAScript-standard-compliant.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir uma Marca de Ordem de Byte (BOM) UTF-8 no início dos arquivos de saída.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir um arquivo único com os mapas de origem em vez de arquivos separados.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emitir um perfil de CPU V8 da execução do compilador para depuração.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emitir JavaScript adicional para facilitar o suporte à importação de módulos CommonJS. Isso habilita 'allowSyntheticDefaultImports' para compatibilidade de tipo.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de classe com Definir em vez de Configurar.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emitir metadados de tipo design para declarações decoradas nos arquivos de origem.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emitir um JavaScript mais compatível, mas detalhado e menos eficaz para iteração.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir a origem ao lado dos sourcemaps em um arquivo único; a definição requer '--inlineSourceMap' ou '--sourceMap'.", + "Enable_all_strict_type_checking_options_6180": "Habilitar todas as opções estritas de verificação de tipo.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Habilitar a cor e a formatação na saída do TypeScript para tornar os erros do compilador mais fáceis de ler.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilitar restrições que permitem que um projeto TypeScript seja usado com referências do projeto.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilitar o relatório de erros para codepaths que não retornam explicitamente uma função.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilitar o relatório de erros para expressões e declarações com um tipo 'any' implícito.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilitar o relatório de erros para casos fallthrough no parâmetro relatório.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilitar o relatório de erros em arquivos JavaScript verificados por tipo.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilitar relatório de erros quando as variáveis locais não forem lidas.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilitar relatório de erros quando 'this' for fornecido o tipo 'any'.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite o suporte experimental para decoradores experimentais herdados.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Permite a importação de arquivos com qualquer extensão, desde que um arquivo de declaração esteja presente.", + "Enable_importing_json_files_6689": "Habilitar importação de arquivos .json.", + "Enable_lib_replacement_6808": "Habilitar substituição de biblioteca.", + "Enable_project_compilation_6302": "Habilitar a compilação do projeto", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite os métodos estritos 'bind', 'call' e 'apply' em funções.", + "Enable_strict_checking_of_function_types_6186": "Habilitar verificação estrita de tipos de função.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Habilite a verificação estrita de inicialização de propriedade nas classes.", + "Enable_strict_null_checks_6113": "Habilite verificações nulas estritas.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilitar a opção 'experimentalDecorators' no arquivo de configuração", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilitar o sinalizador '--jsx' no arquivo de configuração", + "Enable_tracing_of_the_name_resolution_process_6085": "Habilite o rastreio do processo de resolução de nome.", + "Enable_verbose_logging_6713": "Habilite o registro em log detalhado.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emissão de interoperabilidade entre CommonJS e Módulos ES através da criação de objetos de namespace para todas as importações. Implica em 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "Habilita o suporte experimental para decoradores ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita o suporte experimental para a emissão de tipo de metadados para decoradores.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Aplicar o uso de acessadores indexados para chaves declaradas usando um tipo indexado.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Verifique se os membros de substituição em classes derivadas estão marcados com um modificador de ignorar.", + "Ensure_that_casing_is_correct_in_imports_6637": "Certifique-se de que a capitalização esteja correta nas importações.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Certifique-se que cada arquivo pode ser convertido em segurança sem depender de outras importações.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Certifique-se de que 'use strict' seja sempre emitido.", + "Entering_conditional_exports_6413": "Inserção de exportações condicionais.", + "Entry_point_for_implicit_type_library_0_1420": "Ponto de entrada para a biblioteca de tipos implícita '{0}'", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Ponto de entrada para a biblioteca de tipos implícita '{0}' com packageId '{1}'", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions com packageId '{1}'", + "Enum_0_used_before_its_declaration_2450": "A enumeração '{0}' usada antes de sua declaração.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "As declarações enum só podem ser mescladas com namespaces ou com outras declarações enum.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Declarações de enumeração devem ser const ou não const.", + "Enum_member_expected_1132": "Membro de enumeração esperado.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "O membro Enumeração que segue um membro numérico não literal deve ter um inicializador quando 'isolatedModules' estiver habilitado.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Os inicializadores de membros de Enumeração devem ser computáveis sem referências a símbolos externos com --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "O membro de enumeração deve ter um inicializador.", + "Enum_name_cannot_be_0_2431": "O nome de enumeração não pode ser '{0}'.", + "Environment_Settings_6285": "Configurações de Ambiente", + "Errors_Files_6041": "Arquivos de Erros", + "Escape_sequence_0_is_not_allowed_1488": "A sequência de escape '{0}' não é permitida.", + "Examples_Colon_0_6026": "Exemplos: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complexidade excessiva ao comparar os tipos '{0}' e '{1}'.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidade da pilha excessiva ao comparar tipos '{0}' e '{1}'.", + "Exiting_conditional_exports_6416": "Saída das exportações condicionais.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Espera-se {0}-{1} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", + "Expected_0_arguments_but_got_1_2554": "{0} argumentos eram esperados, mas {1} foram obtidos.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} argumentos eram esperados, mas foram obtidos {1}. Você esqueceu de incluir 'void' no argumento de tipo para 'Promise'?", + "Expected_0_type_arguments_but_got_1_2558": "{0} argumentos de tipo eram esperados, mas {1} foram obtidos.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Espera-se {0} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Esperava 1 argumento, mas obteve 0. 'new Promise()' precisa de uma dica JSDoc para produzir um 'resolver' que pode ser chamado sem argumentos.", + "Expected_a_Unicode_property_name_1523": "Esperado um nome de propriedade Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Espera-se um nome ou valor de propriedade Unicode.", + "Expected_a_Unicode_property_value_1525": "Espera-se um valor da propriedade Unicode.", + "Expected_a_capturing_group_name_1514": "Esperado um nome de grupo de captura.", + "Expected_a_class_set_operand_1520": "Espera-se um operando de conjunto de classes.", + "Expected_at_least_0_arguments_but_got_1_2555": "Pelo menos {0} argumentos eram esperados, mas {1} foram obtidos.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Marca de fechamento de JSX correspondente esperada para '{0}'.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Marca de fechamento correspondente esperada para fragmento JSX.", + "Expected_for_property_initializer_1442": "Esperado '=' para inicializador de propriedade.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "O tipo esperado do campo '{0}' em 'package.json' como '{1}' obteve '{2}'.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolução de módulo especificado explicitamente: '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "A exponenciação não pode ser executada nos valores 'bigint', a menos que a opção 'target' esteja definida como 'es2016' ou posterior.", + "Export_0_from_module_1_90059": "Exportar '{0}' do módulo '{1}'", + "Export_all_referenced_locals_90060": "Exportar todos os locais referenciados", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Não é possível usar a atribuição de exportação durante o direcionamento para módulos de ECMAScript. Use a 'exportação padrão' ou outro formato de módulo em vez disso.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "A atribuição de exportação não tem suporte quando o sinalizador '--module' é 'system'.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Exportar conflitos de declaração com declaração exportada de '{0}'.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "As declarações de exportação não são permitidas em um namespace.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "O especificador de exportação '{0}' não existe no escopo package.json no caminho '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "O alias de tipo exportado '{0}' tem ou está usando o nome particular '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "O alias do tipo exportado '{0}' tem ou está usando o nome privado '{1}' do módulo {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "A variável exportada '{0}' tem ou está usando o nome particular '{1}'.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exportações e designações de exportações não são permitidas em acréscimos de módulo.", + "Expression_expected_1109": "Expressão esperada.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "A expressão deve ser colocada entre parênteses para ser usada como um decorador.", + "Expression_or_comma_expected_1137": "Expressão ou vírgula esperada.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "A expressão produz um tipo de tupla grande demais para ser representada.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "A expressão produz um tipo de união muito complexo para representar.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "A expressão é resolvida como '_super', que o compilador utiliza para capturar a referência da classe base.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "A expressão é resolvida para a declaração de variável '_newTarget' que o compilador usa para capturar a referência de metapropriedade 'new.target'.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "A expressão é resolvida como a declaração de variável '_this' que o compilador utiliza para capturar a referência 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "O tipo de expressão não pode ser inferido com --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "A cláusula Extends não pode conter uma expressão com --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "A cláusula extends para o tipo inferido '{0}' tem ou está usando o nome particular '{1}'.", + "Extract_base_class_to_variable_90064": "Extrair classe base para variável", + "Extract_binding_expressions_to_variable_90066": "Extrair expressões de associação para variável", + "Extract_constant_95006": "Extrair constante", + "Extract_default_export_to_variable_90065": "Extrair exportação padrão para variável", + "Extract_function_95005": "Extrair função", + "Extract_to_0_in_1_95004": "Extrair para {0} em {1}", + "Extract_to_0_in_1_scope_95008": "Extrair para {0} no escopo {1}", + "Extract_to_0_in_enclosing_scope_95007": "Extrair para {0} no escopo de delimitação", + "Extract_to_interface_95090": "Extrair para interface", + "Extract_to_type_alias_95078": "Extrair para alias de tipo", + "Extract_to_typedef_95079": "Extrair para typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrair para variável e substituir por '{0} as typeof {0}'", + "Extract_type_95077": "Tipo de extração", + "FILE_6035": "ARQUIVO", + "FILE_OR_DIRECTORY_6040": "ARQUIVO OU DIRETÓRIO", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Falha ao localizar peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Falha ao resolver na condição '{0}'.", + "Fallthrough_case_in_switch_7029": "Caso de fallthrough no comutador.", + "File_0_does_not_exist_6096": "O arquivo '{0}' não existe.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "O arquivo '{0}' não existe de acordo com as pesquisas anteriores em cache.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "O arquivo '{0}' existe de acordo com as pesquisas anteriores em cache.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "O arquivo '{0}' tem uma extensão sem suporte. As únicas extensões com suporte são {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "O arquivo '{0}' é um arquivo JavaScript. Você quis habilitar a opção 'allowJs'?", + "File_0_is_not_a_module_2306": "O arquivo '{0}' não é um módulo.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "O arquivo '{0}' não está na lista de arquivos de projeto '{1}'. Os projetos devem listar todos os arquivos ou usar um padrão 'include'.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "O arquivo '{0}' não está em 'rootDir' '{1}'. Espera-se que 'rootDir' contenha todos os arquivos de origem.", + "File_0_not_found_6053": "Arquivo '{0}' não encontrado.", + "File_Layout_6284": "Layout do Arquivo", + "File_Management_6245": "Gerenciamento de Arquivos", + "File_appears_to_be_binary_1490": "O arquivo parece ser binário.", + "File_change_detected_Starting_incremental_compilation_6032": "Alteração do arquivo detectada. Iniciando compilação incremental...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "O arquivo é um módulo CommonJS porque '{0}' não tem o campo \"type\"", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "O arquivo é o módulo CommonJS porque '{0}' tem o campo \"type\" cujo valor não é \"module\"", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "O arquivo é um módulo CommonJS porque 'package.json' não foi encontrado", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "O arquivo é o módulo ECMAScript porque '{0}' tem o campo \"type\" com o valor \"module\"", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "O arquivo é um módulo CommonJS; ele pode ser convertido em um módulo ES.", + "File_is_default_library_for_target_specified_here_1426": "O arquivo é a biblioteca padrão para o destino especificado aqui.", + "File_is_entry_point_of_type_library_specified_here_1419": "O arquivo é o ponto de entrada da biblioteca de tipos especificada aqui.", + "File_is_included_via_import_here_1399": "O arquivo é incluído via importação aqui.", + "File_is_included_via_library_reference_here_1406": "O arquivo é incluído via referência de biblioteca aqui.", + "File_is_included_via_reference_here_1401": "O arquivo é incluído via referência aqui.", + "File_is_included_via_type_library_reference_here_1404": "O arquivo é incluído via referência de biblioteca de tipos.", + "File_is_library_specified_here_1423": "O arquivo é a biblioteca especificada aqui.", + "File_is_matched_by_files_list_specified_here_1410": "O arquivo corresponde à lista 'files' especificada aqui.", + "File_is_matched_by_include_pattern_specified_here_1408": "O arquivo corresponde ao padrão de inclusão especificado aqui.", + "File_is_output_from_referenced_project_specified_here_1413": "O arquivo é a saída do projeto referenciado especificado aqui.", + "File_is_output_of_project_reference_source_0_1428": "O arquivo é a saída da origem de referência do projeto '{0}'", + "File_is_source_from_referenced_project_specified_here_1416": "O arquivo é a origem do projeto referenciado especificado aqui.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "O nome do arquivo '{0}' difere do nome de arquivo '{1}' já incluído somente em maiúsculas e minúsculas.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "O nome de arquivo '{0}' tem uma extensão '{1}' – procurando '{2}' em vez disso.", + "File_name_0_has_a_1_extension_stripping_it_6132": "O nome do arquivo '{0}' tem uma extensão '{1}' – remoção.", + "File_redirects_to_file_0_1429": "O arquivo redireciona para o arquivo '{0}'", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "A especificação de arquivo não pode conter um diretório pai ('..') que aparece após um curinga de diretório recursivo ('**'): '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "A especificação de arquivo não pode terminar em um curinga do diretório recursivo ('**'): '{0}'.", + "Filters_results_from_the_include_option_6627": "Filtra os resultados da opção 'include'.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Corrigir todos os erros de ortografia detectados", + "Fix_all_expressions_possibly_missing_await_95085": "Corrigir todas as expressões possivelmente com 'await' ausente", + "Fix_all_implicit_this_errors_95107": "Corrigir todos os erros de 'this' implícitos", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corrigir todo tipo de retorno incorreto de uma função assíncrona", + "Fix_all_with_type_only_imports_95182": "Corrigir tudo com importações somente de tipo", + "For_nodejs_Colon_6287": "Para nodejs:", + "Found_0_errors_6217": "Encontrados {0} erros.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} erros encontrados. Monitorando alterações de arquivo.", + "Found_0_errors_in_1_files_6261": "Foram encontrados {0} erros em {1} arquivos.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Foram encontrados {0} erros no mesmo arquivo, começando em: {1}", + "Found_1_error_6216": "Encontrado 1 erro.", + "Found_1_error_Watching_for_file_changes_6193": "Um erro encontrado. Monitorando alterações de arquivo.", + "Found_1_error_in_0_6259": "Encontrado 1 erro em {0}", + "Found_package_json_at_0_6099": "'package.json' encontrado em '{0}'.", + "Found_peerDependency_0_with_1_version_6282": "Foi encontrada peerDependency '{0}' com a versão '{1}'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Definições de classe estão automaticamente em modo estrito.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Módulos estão automaticamente em modo estrito.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "A expressão de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "A implementação da função está ausente ou não está imediatamente depois da declaração.", + "Function_implementation_name_must_be_0_2389": "O nome da implementação de função deve ser '{0}'.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "A função tem o tipo de retorno 'any', de forma implícita, porque ela não tem uma anotação de tipo de retorno e é referenciada direta ou indiretamente em uma das suas expressões de retorno.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "A função não tem a instrução return final e o tipo de retorno não inclui 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "A função deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", + "Function_not_implemented_95159": "Função não implementada.", + "Function_overload_must_be_static_2387": "A sobrecarga de função deve ser estática.", + "Function_overload_must_not_be_static_2388": "A sobrecarga de função não deve ser estática.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de união.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de interseção.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "O tipo de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "A função com corpos só podem ser mescladas com classes que são ambientes.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Gerar arquivos d.ts de arquivos TypeScript e JavaScript em seu projeto.", + "Generate_get_and_set_accessors_95046": "Gerar acessadores 'get' e 'set'", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Gerar os acessadores 'get' e 'set' para todas as propriedades de substituição", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Gera um perfil de CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Gera um sourcemap para cada arquivo '.d.ts' correspondente.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Gera um rastreamento de eventos e uma lista de tipos.", + "Generates_corresponding_d_ts_file_6002": "Gera o arquivo '.d.ts' correspondente.", + "Generates_corresponding_map_file_6043": "Gera o arquivo '.map' correspondente.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "O gerador tem implicitamente o tipo de rendimento \"{0}\". Considere fornecer uma anotação de tipo de retorno.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Os geradores não são permitidos em um contexto de ambiente.", + "Generic_type_0_requires_1_type_argument_s_2314": "O tipo genérico '{0}' exige {1} argumento(s) de tipo.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "O tipo genérico '{0}' exige argumentos de tipo entre {1} e {2}.", + "Global_module_exports_may_only_appear_at_top_level_1316": "As exportações de módulo global podem somente aparecer no nível superior.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "As exportações de módulo global podem somente aparecer em arquivos de declaração.", + "Global_module_exports_may_only_appear_in_module_files_1314": "As exportações de módulo global podem somente aparecer em arquivos de módulo.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "O tipo global '{0}' deve ser um tipo de classe ou interface.", + "Global_type_0_must_have_1_type_parameter_s_2317": "O tipo global '{0}' deve ter {1} parâmetro(s) de tipo.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Faça com que as recompilações em '--incremental' e '--watch' presumam que as alterações dentro de um arquivo só afetarão os arquivos que dependem diretamente dele.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Ter recompilações em projetos que usam os modos 'incremental' e 'inspeção' pressupõem que as alterações em um arquivo afetarão apenas os arquivos diretamente dependendo dele.", + "Hexadecimal_digit_expected_1125": "Dígito hexadecimal esperado.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Um identificador é esperado. '{0}' é uma palavra reservada no nível superior de um módulo.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito. Definições de classe estão automaticamente no modo estrito.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Identificador esperado. '{0}' é uma palavra reservada em modo estrito. Os módulos ficam automaticamente em modo estrito.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificador esperado. '{0}' é uma palavra reservada que não pode ser usada aqui.", + "Identifier_expected_1003": "Identificador esperado.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. '__esModule' é reservado como um marcador exportado ao transformar os módulos ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Identificador ou literal de cadeia de caracteres esperado.", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificador, literal de cadeia de caracteres ou literal de número esperado.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação de pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se o pacote '{0}' realmente expõe este módulo, tente adicionar um novo arquivo de declaração (.d.ts) contendo o módulo `declare '{1}';`", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore o tsconfig encontrado e crie com as opções de linha de comando e arquivos.", + "Ignore_this_error_message_90019": "Ignorar essa mensagem de erro", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorar o tsconfig.json, compila os arquivos especificados com as opções do compilador padrão.", + "Implement_all_inherited_abstract_classes_95040": "Implementar todas as classes abstratas herdadas", + "Implement_all_unimplemented_interfaces_95032": "Implementar todas as interfaces não implementadas", + "Implement_inherited_abstract_class_90007": "Implementar classe abstrata herdada", + "Implement_interface_0_90006": "Implementar a interface '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "A cláusula implements da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "A conversão implícita de um 'symbol' em ' string' falhará em runtime. Considere o encapsulamento desta expressão em 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "A importação '{0}' está em conflito com o valor global usado neste arquivo, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "A importação '{0}' está em conflito com o valor local, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", + "Import_0_from_1_90013": "Importar '{0}' de \"{1}\"", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Os valores de asserção de importação devem ser expressões literais de cadeias de caracteres.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "As declarações de importação não são permitidas em declarações que compilam para chamadas 'require' do commonjs.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "As declarações de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "As afirmações de importação não podem ser usadas com importações ou exportações somente de tipo.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "As asserções de importação foram substituídas por atributos de importação. Use 'with' em vez de 'assert'.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Não é possível usar a atribuição de importação durante o direcionamento para módulos de ECMAScript. Use 'importar * como ns de \"mod\"', 'importar {a} de \"mod\"', 'importar d de \"mod\"' ou outro formato de módulo em vez disso.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Os valores do atributo de importação devem ser expressões literais de cadeias de caracteres.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atributos de importação não são permitidos em instruções que são compiladas para chamadas 'require' do CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Os atributos de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Os atributos de importação não podem ser usadas com importações ou exportações somente de tipo.", + "Import_declaration_0_is_using_private_name_1_4000": "A declaração da importação '{0}' está usando o nome particular '{1}'.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "A declaração da importação está em conflito com a declaração local '{0}'.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "As declarações de importação em um namespace não podem fazer referência a um módulo.", + "Import_emit_helpers_from_tslib_6139": "Importar auxiliares de emissão de 'tslib'.", + "Import_may_be_converted_to_a_default_import_80003": "A importação pode ser convertida em uma importação padrão.", + "Import_name_cannot_be_0_2438": "O nome da importação não pode ser '{0}'.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "A declaração de importação e exportação em uma declaração de módulo de ambiente não pode fazer referência ao módulo por meio do nome do módulo relativo.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "O especificador de importação '{0}' não existe no escopo package.json no caminho '{1}'.", + "Imported_via_0_from_file_1_1393": "Importado via {0} do arquivo '{1}'", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importado via {0} do arquivo '{1}' para importar 'importHelpers' conforme especificado em compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importado via {0} do arquivo '{1}' para importar as funções de fábrica 'jsx' e 'jsxs'", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importado via {0} do arquivo '{1}' com packageId '{2}'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar 'importHelpers' conforme especificado em compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar as funções de fábrica 'jsx' e 'jsxs'", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "A importação de um arquivo JSON para um módulo ECMAScript requer um 'type: \"json\"' quando o atributo de importação \"module\" estiver definido como \"{0}\".", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importações não são permitidas em acréscimos de módulo. Considere movê-las para o módulo externo delimitador.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Em declarações de enumeração de ambiente, o inicializador de membro deve ser uma expressão de constante.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Em uma enumeração com várias declarações, somente uma declaração pode omitir um inicializador para o primeiro elemento de enumeração.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluir uma lista de arquivos. Isso não oferece suporte a padrões glob, ao contrário de 'include'.", + "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados com a extensão '.json'", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluir o código-fonte no sourcemaps dentro do JavaScript emitido.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir arquivos sourcemap dentro do JavaScript emitido.", + "Includes_imports_of_types_referenced_by_0_90054": "Inclui importações de tipos referenciados por '{0}'", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Incluir --watch, -w começará a observar o projeto atual para as alterações do arquivo. Uma vez definido, você pode configurar o modo de inspeção com:", + "Incomplete_quantifier_Digit_expected_1505": "Quantificador incompleto. Dígito esperado.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "A assinatura do índice para o tipo '{0}' está ausente no tipo '{1}'.", + "Index_signature_in_type_0_only_permits_reading_2542": "Assinatura de índice no tipo '{0}' permite somente leitura.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Todas as declarações individuais na declaração mesclada '{0}' devem ser exportadas ou ficar no local.", + "Infer_all_types_from_usage_95023": "Inferir todos os tipos de uso", + "Infer_function_return_type_95148": "Inferir o tipo de retorno da função", + "Infer_parameter_types_from_usage_95012": "Inferir tipos de parâmetro pelo uso", + "Infer_this_type_of_0_from_usage_95080": "Inferir tipo 'this' de '{0}' do uso", + "Infer_type_of_0_from_usage_95011": "Inferir tipo de '{0}' pelo uso", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Não há suporte para inferência de expressões de classe com --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Inicializar a propriedade '{0}' no construtor", + "Initialize_static_property_0_90021": "Inicializar a propriedade estática '{0}'", + "Initializer_for_property_0_2811": "Inicializador para a propriedade '{0}'", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "O inicializador da variável de membro de instância '{0}' não pode referenciar o identificador '{1}' declarado no construtor.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializadores não são permitidos em contextos de ambiente.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa um projeto TypeScript e cria um arquivo tsconfig.json.", + "Inline_variable_95184": "Variável embutida", + "Insert_command_line_options_and_files_from_a_file_6030": "Inserir opções e arquivos de linha de comando de um arquivo.", + "Install_0_95014": "Instalar '{0}'", + "Install_all_missing_types_packages_95033": "Instalar todos os pacotes de tipos ausentes", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "A interface '{0}' não pode estender os tipos '{1}' e '{2}' simultaneamente.", + "Interface_0_incorrectly_extends_interface_1_2430": "A interface '{0}' estende incorretamente a interface '{1}'.", + "Interface_declaration_cannot_have_implements_clause_1176": "A declaração de interface não pode ter a cláusula 'implements'.", + "Interface_must_be_given_a_name_1438": "A interface deve receber um nome.", + "Interface_name_cannot_be_0_2427": "O nome da interface não pode ser '{0}'.", + "Interop_Constraints_6252": "Restrições Interop", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete os tipos de propriedade opcionais conforme escritos, em vez de adicionar 'indefinido'.", + "Invalid_character_1127": "Caractere inválido.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "O especificador de importação inválido '{0}' não tem resoluções possíveis.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nome de módulo inválido no aumento. O módulo '{0}' resolve para um módulo não tipado em '{1}', que não pode ser aumentado.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nome de módulo inválido em acréscimo, o módulo '{0}' não pôde ser encontrado.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadeia opcional inválida da nova expressão. Você quis dizer chamar '{0}()'?", + "Invalid_reference_directive_syntax_1084": "Sintaxe de diretiva 'reference' inválida.", + "Invalid_syntax_in_decorator_1498": "Sintaxe inválida no decorador.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso inválido de “{0}”. Ele não pode ser usado dentro de um bloco estático de classe.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso inválido de '{0}'. Os módulos ficam automaticamente em modo estrito.", + "Invalid_use_of_0_in_strict_mode_1100": "Uso inválido de '{0}' no modo estrito.", + "Invalid_value_for_ignoreDeprecations_5103": "Valor inválido para '--ignoreDeprecations'.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor inválido para 'jsxFactory'. '{0}' não é um identificador válido ou nome qualificado.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor inválido para 'jsxFragmentFactory'. '{0}' não é um identificador válido ou nome qualificado.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor inválido para '--reactNamespace'. '{0}' não é um identificador válido.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "É provável que não haja uma vírgula para separar essas duas expressões de modelo. Elas formam uma expressão de modelo marcada que não pode ser invocada.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Seu tipo de elemento '{0}' não é um elemento JSX válido.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Seu tipo de instância '{0}' não é um elemento JSX válido.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Seu tipo de retorno '{0}' não é um elemento JSX válido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Seu tipo '{0}' não é um elemento JSX válido.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "O '@{0} {1}' do JSDoc não corresponde à cláusula 'extends {2}'.", + "JSDoc_0_is_not_attached_to_a_class_8022": "O '@{0}' do JSDoc não está anexado a uma classe.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' só pode aparecer no último parâmetro de uma assinatura.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "A marcação do JSDoc \"@param\" tem o nome \"{0}\", mas não há nenhum parâmetro com esse nome.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "A marca '@param' do JSDoc tem o nome '{0}', mas não há nenhum parâmetro com esse nome. Ela corresponderia a 'argumentos' se tivesse um tipo de matriz.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc pode ser convertido em tipo TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "A marca JSDoc \"@typedef\" deve ter uma anotação de tipo ou ser seguida pelas marcas \"@property\" or \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Typedefs JSDoc podem ser convertidos em tipos TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Os tipos de JSDoc podem ser usados somente dentro dos comentários de documentação.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Tipos JSDoc podem ser movidos para tipos TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Os atributos JSX só devem ser atribuídos a 'expressões' que não estejam vazias.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "O elemento JSX '{0}' não tem uma marcação de fechamento correspondente.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "A classe do elemento JSX não dá suporte a atributos porque não tem uma propriedade '{0}'.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "O elemento JSX implicitamente tem o tipo 'any' porque não há uma interface de 'JSX.{0}'.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "O elemento JSX implicitamente tem tipo 'any' porque o tipo global \"JSX.Element\" não existe.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "O tipo de elemento JSX '{0}' não tem nenhum constructo nem assinaturas de chamadas.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementos JSX não podem ter vários atributos com o mesmo nome.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Expressões JSX não podem usar o operador vírgula. Você quis escrever uma matriz?", + "JSX_expressions_must_have_one_parent_element_2657": "As expressões JSX devem ter um elemento pai.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "O fragmento JSX não tem uma marcação de fechamento correspondente.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "As expressões de acesso da propriedade JSX não podem incluir nomes do namespace JSX", + "JSX_spread_child_must_be_an_array_type_2609": "O filho do espalhamento JSX deve ser um tipo de matriz.", + "JavaScript_Support_6247": "Suporte do JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "O destino do salto não pode ultrapassar o limite de função.", + "KIND_6034": "TIPO", + "Keywords_cannot_contain_escape_characters_1260": "As palavras-chave não podem conter caracteres de escape.", + "LOCATION_6037": "LOCAL", + "Language_and_Environment_6254": "Idioma e Ambiente", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "O operador antes da vírgula não é usado e não tem efeitos colaterais.", + "Library_0_specified_in_compilerOptions_1422": "Biblioteca '{0}' especificada em compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Biblioteca referenciada via '{0}' do arquivo '{1}'", + "Line_break_not_permitted_here_1142": "Quebra de linha não permitida aqui.", + "Line_terminator_not_permitted_before_arrow_1200": "Terminador de linha não permitido antes de seta.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista de sufixos de nome de arquivo a serem pesquisadas ao resolver um módulo.", + "List_of_folders_to_include_type_definitions_from_6161": "Lista de pastas das quais são incluídas as definições de tipo.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Listas das pastas raiz cujo conteúdo combinado representa a estrutura do projeto no tempo de execução.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Carregando '{0}' do diretório raiz '{1}', local candidato '{2}'.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Caminhos de log usados durante o processo 'moduleResolution'.", + "Longest_matching_prefix_for_0_is_1_6108": "O maior prefixo correspondente para '{0}' é '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Pesquisando na pasta 'node_modules', local inicial '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tornar todas as chamadas 'super()' a primeira instrução nos respectivos construtores", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Fazer com que o keyof retorne apenas cadeias de caracteres, números ou símbolos. Opção herdada.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Tornar a chamada 'super()' a primeira instrução no construtor", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "O tipo de objeto mapeado implicitamente tem um tipo de modelo 'any'.", + "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", + "Matched_0_condition_1_6403": "'{0}' correspondente à condição '{1}'.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Correspondido por padrão de inclusão padrão '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Correspondência pelo padrão de inclusão '{0}' em '{1}'", + "Member_0_implicitly_has_an_1_type_7008": "O membro '{0}' implicitamente tem um tipo '{1}'.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "O membro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Merge_conflict_marker_encountered_1185": "Marcador de conflito de mesclagem encontrado.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "A declaração mesclada '{0}' não pode conter uma declaração de exportação padrão. Considere adicionar uma declaração 'export default {0}' independente.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "A metapropriedade '{0}' só é permitida no corpo de uma declaração de função, expressão de função ou construtor.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "O método '{0}' não pode ter uma implementação, pois está marcado como abstrato.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "O método '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "O método '{0}' da interface exportada tem ou está usando o nome privado '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "O método deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", + "Method_not_implemented_95158": "Método não implementado.", + "Modifiers_cannot_appear_here_1184": "Modificadores não podem aparecer aqui.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "O módulo '{0}' só pode ser importado por padrão usando o sinalizador '{1}'", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "O módulo '{0}' não pode ser importado usando esta construção. O especificador resolve apenas para um módulo ES, que não pode ser importado com 'require'. Em vez disso, use uma importação ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "O módulo '{0}' declara '{1}' localmente, mas é exportado como '{2}'.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "O módulo '{0}' declara '{1}' localmente, mas não é exportado.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "O módulo '{0}' não faz referência a um tipo, mas é usado como um tipo aqui. Você quis dizer 'typeof import('{0}')'?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "O módulo '{0}' não faz referência a um valor, mas é usado como um valor aqui.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "O módulo {0} já exportou um membro denominado '{1}'. Considere reexportar explicitamente para resolver a ambiguidade.", + "Module_0_has_no_default_export_1192": "O módulo '{0}' não tem padrão de exportação.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "O módulo '{0}' não tem exportação padrão. Você quis dizer 'importar { {1} } de {0}' em vez disso?", + "Module_0_has_no_exported_member_1_2305": "O módulo '{0}' não tem nenhum membro exportado '{1}'.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "O módulo '{0}' não tem membro exportado '{1}'. Você quis dizer 'importar {1} de {0}' em vez disso?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "O módulo '{0}' está oculto por uma declaração de local com o mesmo nome.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "O módulo '{0}' usa 'export =' e não pode ser usado com 'export *'.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "O módulo '{0}' foi resolvido como módulo de ambiente declarado localmente no arquivo '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "O módulo '{0}' foi resolvido para '{1}', mas '--allowArbitraryExtensions' não está definido.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "O módulo '{0}' foi resolvido para '{1}', mas '--jsx' não está configurado.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "O módulo '{0}' foi resolvido para '{1}', mas '--resolveJsonModule' não é usado.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Os nomes de declaração de módulo só podem usar ' ou “ cadeias de caracteres entre aspas.", + "Module_name_0_matched_pattern_1_6092": "Nome do módulo '{0}', padrão correspondido '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== Nome do módulo '{0}' não foi resolvido. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nome do módulo '{0}' foi resolvido com sucesso '{1}'. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== O nome do módulo '{0}' foi resolvido com sucesso para '{1}' com a ID do Pacote '{2}'. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Resolução de tipo não foi especificado, usando '{0}'.", + "Module_resolution_using_rootDirs_has_failed_6111": "Falha na resolução de módulo usando 'rootDirs'.", + "Modules_6244": "Módulos", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover os modificadores de elemento de tupla rotulados para rótulos", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mova a expressão na exportação padrão para uma variável e adicione uma anotação de tipo a ela.", + "Move_to_a_new_file_95049": "Mover para um novo arquivo", + "Move_to_file_95178": "Mover para Arquivo", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Não são permitidos vários separadores numéricos consecutivos.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Não são permitidas várias implementações de construtor.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "NEWLINE", + "Name_is_not_valid_95136": "Nome inválido", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Grupos de captura nomeados só estão disponíveis ao direcionar para 'ES2018' ou posterior.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Grupos de captura nomeados com o mesmo nome devem ser mutuamente exclusivos entre si.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Importações nomeadas não são permitidas em uma importação adiada.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "As importações nomeadas de um arquivo JSON para um módulo ECMAScript não são permitidas quando \"module\" é definido como \"{0}\".", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "As propriedades com nome '{0}' dos tipos '{1}' e '{2}' não são idênticas.", + "Namespace_0_has_no_exported_member_1_2694": "O namespace '{0}' não tem o membro exportado '{1}'.", + "Namespace_must_be_given_a_name_1437": "O Namespace deve receber um nome.", + "Namespace_name_cannot_be_0_2819": "O nome do Namespace não pode ser '{0}'.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces não são permitidos em arquivos de script global quando '{0}' está habilitado. Se esse arquivo não se destina a ser um script global, defina 'moduleDetection' como 'force' ou adicione uma instrução 'export {}' vazia.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Nem decoradores nem modificadores podem ser aplicados a parâmetros 'this'.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nenhum construtor base tem o número especificado de argumentos de tipo.", + "No_constituent_of_type_0_is_callable_2755": "Nenhum membro do tipo '{0}' pode ser chamado.", + "No_constituent_of_type_0_is_constructable_2759": "Nenhum membro do tipo '{0}' é construído.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nenhuma assinatura de índice com um parâmetro do tipo '{0}' foi localizada no tipo '{1}'.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nenhuma entrada foi localizada no arquivo de configuração '{0}'. Os caminhos especificados foram 'incluir' '{1}' e 'excluir' '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Não há mais suporte. Em versões iniciais, defina manualmente a codificação de texto para a leitura de arquivos.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nenhuma sobrecarga espera argumentos {0}, mas existem sobrecargas que esperam argumentos {1} ou {2}.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nenhuma sobrecarga espera argumentos do tipo {0}, mas existem sobrecargas que esperam argumentos do tipo {1} ou {2}.", + "No_overload_matches_this_call_2769": "Nenhuma sobrecarga corresponde a esta chamada.", + "No_type_could_be_extracted_from_this_type_node_95134": "Não foi possível extrair nenhum tipo deste nó de tipo", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Não existe valor no escopo para a propriedade abreviada '{0}'. Declare um ou forneça um inicializador.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "A classe não abstrata '{0}' não implementa o membro abstrato herdado {1} da classe '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2} e mais {3}.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "A expressão da classe não abstrata não implementa o membro abstrato herdado '{0}' da classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1} e mais {2}.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "As declarações não nulas só podem ser usadas em arquivos TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Parâmetro não simples declarado aqui.", + "Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.", + "Not_all_constituents_of_type_0_are_callable_2756": "Nem todos os membros do tipo '{0}' podem ser chamados.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Nem todos os membros do tipo '{0}' são construídos.", + "Numbers_out_of_order_in_quantifier_1506": "Números fora de ordem no quantificador.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Os literais numéricos com valores absolutos iguais a 2^53 ou mais são muito grandes para serem representados precisamente como inteiros.", + "Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.", + "Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.", + "Object_is_possibly_null_2531": "Possivelmente, o objeto é 'nulo'.", + "Object_is_possibly_null_or_undefined_2533": "Possivelmente, o objeto é 'nulo' ou 'indefinido'.", + "Object_is_possibly_undefined_2532": "Possivelmente, o objeto é 'nulo'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "O literal de objeto pode especificar apenas propriedades conhecidas e '{0}' não existe no tipo '{1}'.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "O literal de objeto pode especificar somente propriedades conhecidas, mas o '{0}' não existe no tipo '{1}'. Você queria ter escrito '{2}'?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "A propriedade '{0}' do literal de objeto implicitamente tem um tipo '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objetos que contêm propriedades abreviadas não podem ser inferidos com --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Os objetos que contêm atribuições de espalhamento não podem ser inferidos com --isolatedDeclarations.", + "Octal_digit_expected_1178": "Dígito octal esperado.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Sequências de escape octais e referências inversas não são permitidas em uma classe de caracteres. Se isso foi destinado a uma sequência de escape, use a sintaxe '{0}' em vez disso.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sequências de escape octais não são permitidas. Use a sintaxe '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literais octais não são permitidos. Use a sintaxe '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Um valor de '{0}.{1}' é a cadeia de caracteres '{2}', e o outro é considerado um valor numérico desconhecido.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "É permitida apenas uma única declaração de variável em uma instrução 'for...in'.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "É permitida apenas uma única declaração de variável em uma instrução 'for...of'.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Apenas uma função void pode ser chamada com a palavra-chave 'new'.", + "Only_ambient_modules_can_use_quoted_names_1035": "Somente os módulos de ambiente podem usar nomes entre aspas.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Há suporte somente aos módulos 'amd' e 'system' ao lado de --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Somente matrizes const podem ser inferidas com --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Emita somente arquivos de declaração '.d.ts'.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Gerar somente arquivos .d.ts e não arquivos JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Somente métodos protegidos e públicos da classe base são acessíveis pela palavra-chave 'super'.", + "Operator_0_cannot_be_applied_to_type_1_2736": "O operador '{0}' não pode ser aplicado ao tipo '{1}'.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "O operador '{0}' não pode ser aplicado aos tipos '{1}' e '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Os operadores não devem ser mistos em uma classe de caracteres. Encapsule-o em uma classe aninhada.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Recusar um projeto de verificação de referência de multiprojeto ao editar.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "A opção '{0}={1}' foi removida. Remova-a da configuração.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "A opção '{0}={1}' foi preterida e deixará de funcionar no TypeScript {2}. Especifique compilerOption '\"ignoreDeprecations\": \"{3}\"' para silenciar esse erro.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'false' ou 'null' na linha de comando.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'null' na linha de comando.", + "Option_0_can_only_be_specified_on_command_line_6266": "A opção '{0}' só pode ser especificada na linha de comando.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "A opção '{0} só pode ser usada quando qualquer uma das opções '--inlineSourceMap' ou '--sourceMap' é fornecida.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "A opção '{0}' só pode ser usada quando 'moduleResolution' está definido como 'node16', 'nodenext' ou 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "A opção \"{0}\" só pode ser usada quando \"module\" estiver definido como \"preserve\", \"commonjs\" ou \"es2015\" ou posterior.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "A opção '{0}' não pode ser especificada quando a opção 'jsx' é '{1}'.", + "Option_0_cannot_be_specified_with_option_1_5053": "A opção '{0}' não pode ser especificada com a opção '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "A opção '{0}' não pode ser especificada sem especificar a opção '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "A opção '{0}' não pode ser especificada sem a especificação da opção '{1}' ou '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "A opção '{0}' foi removida. Remova-a da configuração.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "A opção '{0}' foi preterida e deixará de funcionar no TypeScript {1}. Especifique compilerOption '\"ignoreDeprecations\": \"{2}\"' para silenciar esse erro.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "A opção '{0}' é redundante e não pode ser especificada com a opção '{1}'.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "A opção “allowImportingTsExtensions” só pode ser usada quando um de “noEmit”, “emitDeclarationOnly” ou “rewriteRelativeImportExtensions” está definido.", + "Option_build_must_be_the_first_command_line_argument_6369": "A opção '--build' precisa ser o primeiro argumento da linha de comando.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "A opção 'isolatedModules' só pode ser usada quando nenhuma opção de '--module' for fornecida ou a opção 'target' for 'ES2015' ou superior.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "A opção 'moduleResolution' deve ser definida como '{0}' (ou deixada não especificada) quando a opção 'module' está definida como '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "A opção 'module' deve ser definida como '{0}' quando a opção 'moduleResolution' está definida como '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando '{0}' está habilitada.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "A opção 'project' não pode ser mesclada com arquivos de origem em uma linha de comando.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "A opção '--resolveJsonModule' não pode ser especificada quando 'moduleResolution' está definido como 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "A opção '--resolveJsonModule' não pode ser especificada quando 'module' está definido como 'none', 'system' ou 'umd'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "A opção 'texttimModuleSyntax' não pode ser usada quando 'module' está definido como 'UMD', 'AMD' ou 'System'.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "As opções '{0}' e '{1}' não podem ser combinadas.", + "Options_Colon_6027": "Opções:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Outras Saídas", + "Output_Formatting_6256": "Formatação da Saída", + "Output_compiler_performance_information_after_building_6615": "Gerar informações de desempenho do compilador após a criação.", + "Output_directory_for_generated_declaration_files_6166": "Diretório de saída para os arquivos de declaração gerados.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "O arquivo de saída '{0}' não foi compilado do arquivo de origem '{1}'.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Saída do projeto referenciado '{0}' incluída porque '{1}' está especificado", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Saída do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Gerar informações de desempenho do compilador mais detalhadas após a criação.", + "Overload_0_of_1_2_gave_the_following_error_2772": "A sobrecarga {0} de {1}, '{2}', gerou o seguinte erro.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Assinaturas de sobrecarga devem todas ser abstratas ou não abstratas.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Todas as assinaturas de sobrecarga devem ser ambiente ou não ambiente.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Assinaturas de sobrecarga devem todas ser exportadas ou não exportadas.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Todas as assinaturas de sobrecarga devem ser opcionais ou obrigatórias.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Todas as assinaturas de sobrecarga devem ser protegidas, privadas ou públicas.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "O parâmetro '{0}' não pode referenciar o identificador '{1}' declarado depois dele.", + "Parameter_0_cannot_reference_itself_2372": "O parâmetro '{0}' não pode referenciar a si mesmo.", + "Parameter_0_implicitly_has_an_1_type_7006": "O parâmetro '{0}' implicitamente tem um tipo '{1}'.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "O parâmetro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "O parâmetro '{0}' não está na mesma posição que o parâmetro '{1}'.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "O parâmetro '{0}' do acessador tem ou está usando o nome privado '{1}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "O parâmetro '{0}' da função exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "O parâmetro '{0}' da assinatura de índice da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "O parâmetro '{0}' da assinatura de índice da interface exportadas tem ou está usando o nome privado '{1}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "O parâmetro não pode ter inicializador e ponto de interrogação.", + "Parameter_declaration_expected_1138": "Declaração de parâmetro esperada.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "O parâmetro tem um nome, mas não um tipo. Você quis dizer '{0}: {1}'?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modificadores de parâmetro só podem ser usados em arquivos TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "O parâmetro deve ter uma anotação de tipo explícito com --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analisar em modo estrito e emitir \"usar estrito\" para cada arquivo de origem.", + "Part_of_files_list_in_tsconfig_json_1409": "Parte da lista 'files' no tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "O padrão '{0}' pode ter no máximo um caractere '*'.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Os tempos de desempenho de '--diagnostics' ou '--extendedDiagnostics' não estão disponíveis nesta sessão. Não foi possível encontrar uma implementação nativa da API de Desempenho Web.", + "Platform_specific_6912": "Específico da plataforma", + "Prefix_0_with_an_underscore_90025": "Prefixo '{0}' com um sublinhado", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Prefixar todas as declarações de propriedade incorretas com 'declare'", + "Prefix_all_unused_declarations_with_where_possible_95025": "Prefixar com '_' todas as declarações não usadas quando possível", + "Prefix_with_declare_95094": "Prefixar com 'declare'", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Preserve os valores importados não usados na saída JavaScript que, de outra forma, seriam removidos.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimir todos os arquivos lidos durante a compilação.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Arquivos de impressão lidos durante a compilação, incluindo o motivo de sua inclusão.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima nomes de arquivos e o motivo pelo qual eles fazem parte da compilação.", + "Print_names_of_files_part_of_the_compilation_6155": "Nomes de impressão das partes dos arquivos da compilação.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima nomes de arquivos que fazem parte da compilação e, em seguida, interrompa o processamento.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Nomes de impressão das partes dos arquivos gerados da compilação.", + "Print_the_compiler_s_version_6019": "Imprima a versão do compilador.", + "Print_the_final_configuration_instead_of_building_1350": "Imprima a configuração final em vez de compilar.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimir os nomes dos arquivos emitidos após uma compilação.", + "Print_this_message_6017": "Imprima esta mensagem.", + "Private_accessor_was_defined_without_a_getter_2806": "O acessador privado foi definido sem um getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "O campo particular '{0}' deve ser declarado em uma classe delimitadora.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identificadores privados não são permitidos em declarações de variáveis.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identificadores privados não são permitidos fora dos corpos de classe.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identificadores privados são permitidos apenas em corpos de classe e só podem ser usados como parte de uma declaração de membro de classe, acesso de propriedade ou no lado esquerdo de uma expressão 'em'", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identificadores privados só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Não é possível usar identificadores privados como parâmetros.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "O membro privado ou protegido '{0}' não pode ser acessado em um parâmetro de tipo.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "O projeto '{0}' não pode ser compilado porque sua dependência '{1}' tem erros", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "O projeto '{0}' não pode ser criado porque sua dependência '{1}' não foi criada", + "Project_0_is_being_forcibly_rebuilt_6388": "O projeto '{0}' está sendo reconstruído forçadamente", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "O projeto '{0}' está desatualizada porque o arquivo buildinfo '{1}' indica que o arquivo '{2}' era o arquivo raiz da compilação, mas não é mais.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que o programa precisa relatar erros.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que algumas das alterações não foram emitidas", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que há alteração em compilerOptions", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "O projeto '{0}' está desatualizado porque a saída '{1}' é mais antiga que a entrada '{2}'", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "O projeto '{0}' está desatualizado porque o arquivo de saída '{1}' não existe", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "O projeto '{0}' está desatualizado porque a saída foi gerada com a versão '{1}' que difere da versão atual '{2}'", + "Project_0_is_up_to_date_6361": "O projeto '{0}' está atualizado", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "O projeto '{0}' está atualizado porque a entrada mais recente '{1}' é mais antiga que a saída '{2}'", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "O projeto '{0}' está atualizado, mas precisa atualizar os registros de data e hora dos arquivos de saída mais antigos que os arquivos de entrada", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "O projeto '{0}' está atualizado com os arquivos .d.ts de suas dependências", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Referências de projeto não podem formar um gráfico circular. Ciclo detectado: {0}", + "Projects_6255": "Projetos", + "Projects_in_this_build_Colon_0_6355": "Projetos neste build: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Propriedades com o modificador 'acessador' estão disponíveis somente quando o alvo é ECMAScript 2015 e superior.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "A propriedade '{0}' não pode ter um inicializador, pois está marcado como abstrato.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "A propriedade '{0}' vem de uma assinatura de índice, portanto, ela precisa ser acessada com ['{0}'].", + "Property_0_does_not_exist_on_type_1_2339": "A propriedade '{0}' não existe no tipo '{1}'.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "A propriedade '{0}' não existe no tipo '{1}'. Você quis dizer '{2}'?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "A propriedade '{0}' não existe no tipo '{1}'. Você queria acessar o membro estático '{2}'?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "A propriedade '{0}' não existe no tipo '{1}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{2}' ou posterior.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "A propriedade '{0}' não existe no tipo '{1}'. Tente alterar a opção de compilador 'lib' para incluir 'dom'.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "A propriedade “{0}” não tem nenhum inicializador e não está definitivamente atribuída no bloco estático de classe.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "A propriedade '{0}' não tem nenhum inicializador e não está definitivamente atribuída no construtor.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador get não tem uma anotação de tipo de retorno.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador set não tem uma anotação de tipo de parâmetro.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador get pode ser inferido do uso.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador set pode ser inferido do uso.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída à mesma propriedade no tipo base '{2}'.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída ao tipo '{2}'.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "A propriedade '{0}' no tipo '{1}' se refere a um membro diferente que não pode ser acessado por meio do tipo '{2}'.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "A propriedade '{0}' é declarada, mas seu valor nunca é lido.", + "Property_0_is_incompatible_with_index_signature_2530": "A propriedade '{0}' é incompatível com a assinatura de índice.", + "Property_0_is_missing_in_type_1_2324": "A propriedade '{0}' está ausente no tipo '{1}'.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "A propriedade '{0}' está ausente no tipo '{1}', mas é obrigatória no tipo '{2}'.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "A propriedade '{0}' não é acessível fora da classe '{1}' porque tem um identificador privado.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "A propriedade '{0}' é opcional no tipo '{1}', mas obrigatória no tipo '{2}'.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "A propriedade '{0}' é particular e somente é acessível na classe '{1}'.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "A propriedade '{0}' é particular no tipo '{1}', mas não no tipo '{2}'.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "A propriedade '{0}' está protegida e só pode ser acessada por meio de uma instância da classe '{1}'. Esta é uma instância da classe '{2}'.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "A propriedade '{0}' é protegida e somente é acessível na classe '{1}' e em suas subclasses.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "A propriedade '{0}' é protegida, mas o tipo '{1}' não é uma classe derivada de '{2}'.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "A propriedade '{0}' é protegida no tipo '{1}', mas pública no tipo '{2}'.", + "Property_0_is_used_before_being_assigned_2565": "A propriedade '{0}' é usada antes de ser atribuída.", + "Property_0_is_used_before_its_initialization_2729": "A propriedade '{0}' é usada antes da inicialização.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "A propriedade pode não existir '{0}' no tipo '{1}'. Você quis dizer '{2}'?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "A propriedade \"{0}\" do atributo de espalhamento JSX não pode ser atribuída à propriedade de destino.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "A propriedade '{0}' do tipo de classe anônima exportada pode não ser privada ou protegida.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "A propriedade '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "A propriedade '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "A propriedade '{0}' do tipo '{1}' não pode ser atribuída ao '{2}' tipo de índice '{3}'.", + "Property_0_was_also_declared_here_2733": "A propriedade '{0}' também foi declarada aqui.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "A propriedade '{0}' substituirá a propriedade base em '{1}'. Se isso for intencional, adicione um inicializador. Caso contrário, adicione um modificador 'declare' ou remova a declaração redundante.", + "Property_assignment_expected_1136": "Atribuição de propriedade esperada.", + "Property_destructuring_pattern_expected_1180": "Padrão de desestruturação de propriedade esperado.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "A propriedade deve ter uma anotação de tipo explícita com --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Propriedade ou assinatura esperada.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "O valor da propriedade pode ser somente um literal de cadeia, um literal numérico, 'true', 'false', 'null', literal de objeto ou literal de matriz.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornecer suporte completo para os iteráveis em 'for-of', espalhamento e desestruturação ao direcionar 'ES5'.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "O método público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "O método estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "O nome qualificado '{0}' não é permitido sem um '@param {object} {1}' à esquerda.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Gerar um erro quando um parâmetro de função não for lido.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Gerar erro em expressões e declarações com um tipo 'any' implícito.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Gerar erro em expressões 'this' com um tipo 'any' implícito.", + "Range_out_of_order_in_character_class_1517": "Intervalo fora de ordem na classe de caracteres.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Exportar novamente um tipo quando '{0}' está habilitado requer o uso de 'tipo de exportação'.", + "React_components_cannot_include_JSX_namespace_names_2639": "Os componentes react não podem incluir nomes de namespace JSX", + "Recommended_Options_6294": "Opções Recomendadas", + "Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzir o número de projetos carregados automaticamente pelo TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "O projeto referenciado '{0}' pode não desabilitar a emissão.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.", + "Referenced_via_0_from_file_1_1400": "Referenciado via '{0}' do arquivo '{1}'", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Considere adicionar uma extensão ao caminho de importação.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Você quis dizer '{0}'?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Remova uma lista de diretórios do processo de inspeção.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Remover uma lista de arquivos do processamento do modo de inspeção.", + "Remove_all_unnecessary_override_modifiers_95163": "Remover todos os modificadores 'override' desnecessários", + "Remove_all_unnecessary_uses_of_await_95087": "Remover todos os usos desnecessários de 'await'", + "Remove_all_unreachable_code_95051": "Remover todo o código inacessível", + "Remove_all_unused_labels_95054": "Remover todos os rótulos não utilizados", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Remover as chaves de todos os corpos de função de seta com problemas relevantes", + "Remove_braces_from_arrow_function_95060": "Remover chaves da função de seta", + "Remove_braces_from_arrow_function_body_95112": "Remover as chaves do corpo de função de seta", + "Remove_import_from_0_90005": "Remover importação de '{0}'", + "Remove_override_modifier_95161": "Remover o modificador 'override'", + "Remove_parentheses_95126": "Remover os parênteses", + "Remove_template_tag_90011": "Remover marca de modelo", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Remover o limite de 20MB no tamanho total do código-fonte para arquivos JavaScript no servidor de linguagem TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Remover 'type' da declaração de importação \"{0}\"", + "Remove_type_from_import_of_0_from_1_90056": "Remover 'type' da importação de '{0}' de \"{1}\"", + "Remove_type_parameters_90012": "Remover parâmetros de tipo", + "Remove_unnecessary_await_95086": "Remover 'await' desnecessário", + "Remove_unreachable_code_95050": "Remover código inacessível", + "Remove_unused_declaration_for_Colon_0_90004": "Remover declaração não usada para: '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "Remova as declarações não usadas de: '{0}'", + "Remove_unused_destructuring_declaration_90039": "Remova a declaração de desestruturação não usada", + "Remove_unused_label_95053": "Remover rótulo não utilizado", + "Remove_variable_statement_90010": "Remover instrução de variável", + "Rename_param_tag_name_0_to_1_95173": "Renomear o nome da marca '@param' '{0}' como '{1}'", + "Replace_0_with_Promise_1_90036": "Substituir '{0}' por 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "Substituir todos os 'infer' não usados por 'unknown'", + "Replace_import_with_0_95015": "Substitua a importação com '{0}'.", + "Replace_infer_0_with_unknown_90030": "Substituir 'infer {0}' por 'unknown'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Relate erro quando nem todos os caminhos de código na função retornarem um valor.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Relate erros para casos de fallthrough na instrução switch.", + "Report_errors_in_js_files_8019": "Relatar erros em arquivos .js.", + "Report_errors_on_unused_locals_6134": "Relatar erros nos locais não utilizados.", + "Report_errors_on_unused_parameters_6135": "Relatar erros nos parâmetros não utilizados.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exigir anotação suficiente em exportações para que outras ferramentas possam gerar arquivos de declaração trivialmente.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Os parâmetros de tipo necessários podem não seguir os parâmetros de tipo opcionais.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "A resolução para o módulo '{0}' foi encontrada no cache do local '{1}'.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "A resolução para a diretiva de referência de tipo '{0}' foi encontrada no cache a partir do local '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Falha na resolução de nome não relativo; tentando com recursos modernos de resolução de Nó desabilitados para ver se a biblioteca npm precisa de atualização de configuração.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Falha na resolução de nome não relativo; tentando com '--moduleResolution bundler' para ver se o projeto pode precisar de atualização de configuração.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolva 'keyof' somente para nomes de propriedades com valores de cadeia de caracteres (sem números nem símbolos).", + "Resolved_under_condition_0_6414": "Resolvido sob a condição '{0}'.", + "Resolving_in_0_mode_with_conditions_1_6402": "Resolvendo no modo {0} com condições {1}.", + "Resolving_module_0_from_1_6086": "======== Resolvendo módulo '{0}' de '{1}'. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolvendo nome de módulo '{0}' relativo à URL base '{1}' - '{2}'.", + "Resolving_real_path_for_0_result_1_6130": "Resolvendo o caminho real de '{0}', resultado '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolvendo a diretiva de tipo de referência '{0}', contendo o arquivo '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz não configurado. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz não configurado. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolvendo diretiva de referência de tipo para o programa que especifica typeRoots personalizado, ignorando a pesquisa na pasta 'node_modules'.", + "Resolving_with_primary_search_path_0_6121": "Resolvendo com caminho de pesquisa primário '{0}'.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "O parâmetro rest '{0}' implicitamente tem um tipo 'any[]'.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "O parâmetro REST '{0}' implicitamente tem um tipo 'any[]', mas um tipo melhor pode ser inferido do uso.", + "Rest_types_may_only_be_created_from_object_types_2700": "Os tipos de rest podem ser criado somente de tipos de objeto.", + "Return_type_annotation_circularly_references_itself_2577": "A anotação de tipo de retorno faz referência circular a si mesma.", + "Return_type_must_be_inferred_from_a_function_95149": "O tipo de retorno precisa ser inferido de uma função", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "O tipo de retorno da assinatura de construtor deve ser atribuível ao tipo de instância da classe.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "O tipo de retorno da função exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "O tipo de retorno do método da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "O tipo de retorno do método da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "O tipo de retorno do método público da classe exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome particular '{0}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', não foi resolvido.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', foi resolvido com sucesso para '{3}' com ID do Pacote '{4}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, não foi resolvido.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com a ID do pacote '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', não foi resolvido.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso '{3}' com ID do Pacote '{4}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, não foi resolvido.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Reutilizando a resolução do tipo diretriz de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com ID do Pacote '{3}'.", + "Rewrite_all_as_indexed_access_types_95034": "Reescrever tudo como tipos de acesso indexados", + "Rewrite_as_the_indexed_access_type_0_90026": "Reescrever como o tipo de acesso indexado '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Reescreva as extensões de arquivo \".ts\", \".tsx\", \".mts\" e \".cts\" em caminhos de importação relativos para seu equivalente em JavaScript nos arquivos de saída.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Operando direito de ?? está inacessível porque o operando esquerdo nunca é nulo.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Diretório raiz não pode ser determinado, ignorando caminhos de pesquisa primários.", + "Root_file_specified_for_compilation_1427": "Arquivo raiz especificado para compilação", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "ESTRATÉGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salvar arquivos .tsbuildinfo para permitir a compilação incremental de projetos.", + "Saw_non_matching_condition_0_6405": "Viu condição de não correspondência '{0}'.", + "Scoped_package_detected_looking_in_0_6182": "Pacote com escopo detectado, procurando no '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões de fallback: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões preferenciais: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Confira também https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "A seleção não é uma instrução ou instruções válidas", + "Selection_is_not_a_valid_type_node_95133": "A seleção não é um nó de tipo válido", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Definir a versão do idioma do JavaScript para o JavaScript emitido e incluir as declarações de biblioteca compatíveis.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Definir o idioma das mensagens do TypeScript. Isso não afeta a emissão.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Defina a opção 'module' no arquivo de configuração para '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "Definir o caractere de nova linha para a emissão de arquivos.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Defina a opção 'target' no arquivo de configuração para '{0}'", + "Setters_cannot_return_a_value_2408": "Setters não podem retornar um valor.", + "Show_all_compiler_options_6169": "Mostrar todas as opções do compilador.", + "Show_diagnostic_information_6149": "Mostras as informações de diagnóstico.", + "Show_verbose_diagnostic_information_6150": "Mostras as informações detalhadas de diagnóstico.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar o que seria compilado (ou excluído, se especificado com '--clean')", + "Signature_0_must_be_a_type_predicate_1224": "A assinatura '{0}' deve ser um predicado de tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "As declarações de assinatura só podem ser usadas em arquivos TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorar a criação de projetos downstream em caso de erro no projeto upstream.", + "Skip_type_checking_all_d_ts_files_6693": "Ignorar verificação de tipo de todos os arquivos .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorar verificação de tipo de arquivos .d.ts que estão incluídos com TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Ignorar a verificação de tipo dos arquivos de declaração.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorando o build do projeto '{0}' porque a dependência '{1}' tem erros", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorando o build do projeto '{0}' porque a dependência '{1}' não foi criada", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Ignorando o módulo '{0}' que se parece com um URI absoluto, tipos de arquivo de destino: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Origem do projeto referenciado '{0}' incluída porque '{1}' está especificado", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Origem do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", + "Source_has_0_element_s_but_target_allows_only_1_2619": "A origem tem {0} elementos, mas o destino permite somente {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "A origem tem {0} elementos, mas o destino exige {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "A fonte não fornece nenhuma correspondência para o elemento necessário na posição {0} no destino.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "A fonte não fornece nenhuma correspondência para o elemento variádico na posição {0} no destino.", + "Specify_ECMAScript_target_version_6015": "Especifique a versão de destino do ECMAScript.", + "Specify_JSX_code_generation_6080": "Especifique a geração do código JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especificar um arquivo que agrupa todas as saídas em um arquivo JavaScript. Se 'declaração' for true, também designará um arquivo que incluirá todas as saídas .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especificar uma lista de padrões glob que correspondam aos arquivos a serem incluídos na compilação.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Especificar uma lista de plug-ins de serviço de linguagem a incluir.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especificar um conjunto de arquivos de declaração de biblioteca empacotados que descreva o ambiente de tempo de runtime de destino.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especificar um conjunto de entradas que remapeiem importações para locais de pesquisa adicionais.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique uma matriz de objetos que especificam caminhos para projetos. Usado em referências de projeto.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Especificar uma pasta de saída para todos os arquivos emitidos.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar o comportamento de emissão/verificação para importações que são usadas somente para tipos.", + "Specify_file_to_store_incremental_compilation_information_6380": "Especificar arquivo para armazenar informações de compilação incremental", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique como o TypeScript procura um arquivo de um determinado especificador de módulo.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especificar como os diretórios são observados nos sistemas que não têm a funcionalidade recursiva de inspeção de arquivo.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique como funciona o modo de inspeção TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique os arquivos de biblioteca a serem incluídos na compilação.", + "Specify_module_code_generation_6016": "Especifique a geração do código do módulo.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especificar o especificador de módulo usado para importar as funções de fábrica JSX ao usar 'jsx: react-jsx*'.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especificar várias pastas que agem como './node_modules/@types '.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especificar uma ou mais referências de módulo ou nó para os arquivos de configuração base dos quais as configurações são herdadas.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique opções para aquisição automática de arquivos de declaração.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique a estratégia para criar uma inspeção de sondagem quando não conseguir criar usando eventos do sistema de arquivos: 'FixedInterval' (padrão), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique a estratégia para observar ao diretório em plataformas que não têm suporte à observação recursiva nativamente: 'UseFsEvents' (padrão), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique a estratégia para observar ao arquivo: 'FixedPollingInterval' (padrão), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique a referência do fragmento JSX usada para fragmentos ao direcionar o React JSX emit, por exemplo, 'React.Fragment' ou 'Fragment'.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique a função de fábrica JSX a ser usada ao direcionar a emissão 'react' do JSX, por ex., 'React.createElement' ou 'h'.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique a função de fábrica JSX usada ao direcionar o React JSX emit, por exemplo, 'React.createElement' ou 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique a função de alocador do fragmento JSX a ser usada no direcionamento de uma emissão de JSX 'react' com a opção do compilador 'jsxFactory' especificada, por exemplo, 'Fragment'.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especificar o diretório base para resolver nomes de módulos não relativos.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique o fim da sequência de linha a ser usado ao emitir arquivos: 'CRLF' (dos) ou 'LF' (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique o local onde o depurador deve localizar arquivos TypeScript em vez de locais de origem.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique o local onde o depurador deve localizar arquivos de mapa em vez de locais gerados.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique a profundidade máxima da pasta usada para verificar os arquivos JavaScript de 'node_modules'. Aplicável apenas com 'allowJs'.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique o especificador do módulo a ser utilizado para importar as funções 'jsx' e 'jsxs' de fábrica, por exemplo, react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique o objeto invocado para 'createElement'. Isso se aplica apenas ao direcionar a emissão JSX 'react'.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique o diretório de saída para os arquivos de declaração gerados.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Especifique o caminho para o arquivo de compilação incremental .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique o diretório raiz de arquivos de entrada. Use para controlar a estrutura do diretório de saída com --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Especifique a pasta raiz em seus arquivos de origem.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique o caminho raiz para que os depuradores localizem o código-fonte de referência.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique os nomes dos pacotes de tipo a serem incluídos sem serem referenciados em um arquivo de origem.", + "Specify_what_JSX_code_is_generated_6646": "Especifique qual código JSX é gerado.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especificar qual abordagem a inspeção deverá usar se o sistema ficar sem os observadores de arquivo nativos.", + "Specify_what_module_code_is_generated_6657": "Especifique qual código do módulo é gerado.", + "Split_all_invalid_type_only_imports_1367": "Dividir todas as importações somente de tipo inválidas", + "Split_into_two_separate_import_declarations_1366": "Dividir em duas declarações de importação separadas", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "O operador de espalhamento só está disponível em expressões 'new' no direcionamento a ECMAScript 5 e superior.", + "Spread_types_may_only_be_created_from_object_types_2698": "Os tipos de espalhamento podem ser criados apenas de tipos de objeto.", + "Starting_compilation_in_watch_mode_6031": "Iniciando compilação no modo de inspeção...", + "Statement_expected_1129": "Instrução esperada.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Instruções não são permitidas em contextos de ambiente.", + "Static_members_cannot_reference_class_type_parameters_2302": "Membros estáticos não podem fazer referência a parâmetros de tipo de classe.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Conflitos de propriedade estática '{0}' com propriedade interna 'Function.{0}' da função de construtor '{1}'.", + "Stricter_Typechecking_Options_6292": "Opções de Verificação de Tipo Mais Estritas", + "String_literal_expected_1141": "Literal de cadeia de caracteres esperado.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Não há suporte para nomes de importação e exportação de literal de cadeia de caracteres quando o sinalizador '--module' está definido como 'es2015' ou 'es2020'.", + "String_literal_with_double_quotes_expected_1327": "Literal de cadeia com aspas duplas é esperado.", + "Style_Options_6293": "Opções de Estilo", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Estilizar erros e mensagens usando cor e contexto (experimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Sinalizadores de subpadrão devem estar presentes quando há um sinal de subtração.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Declarações de propriedade subsequentes devem ter o mesmo tipo. A propriedade '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Declarações de variável subsequentes devem ter o mesmo tipo. A variável '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "A substituição '{0}' para o padrão '{1}' tem um tipo incorreto, 'string' esperada, obteve '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "A substituição '{0}' no padrão '{1}' pode ter no máximo um caractere '*'.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "As substituições para o padrão '{0}' devem ser uma matriz.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Substituições para o padrão '{0}' não devem ser uma matriz vazia.", + "Successfully_created_a_tsconfig_json_file_6071": "Arquivo tsconfig.json criado com êxito.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "As chamadas super não são permitidas fora dos construtores ou em funções aninhadas dentro dos construtores.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Verificações de propriedade de excesso de compactação para literais de objeto.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Suprimir erros de noImplicitAny para objetos de indexação sem assinaturas de índice.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprimir erros 'noImplicitAny' ao indexar objetos que não têm assinaturas de índice.", + "Switch_each_misused_0_to_1_95138": "Mude cada '{0}' usado incorretamente para '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chame sincronicamente retornos de chamadas e atualize o estado de observadores de diretório em plataformas que não têm suporte à observação recursiva nativamente.", + "Syntax_Colon_0_6023": "Sintaxe: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "A tag '{0}' espera no mínimo '{1}' argumentos, mas o alocador JSX '{2}' fornece no máximo '{3}'.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Expressões de modelo marcado não são permitidas em uma cadeia opcional.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "O destino permite apenas {0} elementos, mas a origem pode ter mais.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "O destino exige {0} elementos, mas a origem pode ter menos.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "A assinatura de destino fornece poucos argumentos. Esperava {0} ou mais, mas obteve {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "O modificador '{0}' só pode ser usado em arquivos TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "O operador '{0}' não pode ser aplicado ao tipo 'symbol'.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "O operador '{0}' não é permitido para tipos boolianos. Considere usar '{1}'.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "A propriedade '{0}' de um iterador assíncrono deve ser um método.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "A propriedade '{0}' de um iterador deve ser um método.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "O tipo 'Objeto' pode ser atribuído para muito poucos outros tipos. Você desejava usar o tipo 'qualquer' ao invés disso?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "O sinalizador Unicode (u) e o sinalizador Conjuntos Unicode (v) não podem ser definidos simultaneamente.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES5. Considere usar uma expressão de função padrão.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES5. Considere usar uma função ou um método padrão.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "O corpo de uma instrução 'if' não pode ser uma instrução vazia.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "A chamada teria sido bem-sucedida nesta implementação, mas as assinaturas de implementação de sobrecargas não estão visíveis externamente.", + "The_character_set_of_the_input_files_6163": "O conjunto de caracteres dos arquivos de entrada.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "A função de seta contida captura o valor global de 'this'.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "O corpo da função ou do módulo contido é muito grande para a análise de fluxo de controle.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "O arquivo atual é um módulo CommonJS e não pode usar 'await' no nível superior.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "O arquivo atual é um módulo CommonJS cujas importações produzirão chamadas 'require'; no entanto, o arquivo referenciado é um módulo ECMAScript e não pode ser importado com 'require'. Considere escrever uma chamada 'import(\"{0}\")' dinâmica em vez disso.", + "The_current_host_does_not_support_the_0_option_5001": "O host atual não dá suporte à opção '{0}'.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "A declaração de '{0}' que você provavelmente pretende usar é definida aqui", + "The_declaration_was_marked_as_deprecated_here_2798": "A declaração foi marcada como preterida aqui.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "O tipo esperado vem da propriedade '{0}', que é declarada aqui no tipo '{1}'", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "O tipo esperado vem do tipo de retorno dessa assinatura.", + "The_expected_type_comes_from_this_index_signature_6501": "O tipo esperado vem dessa assinatura de índice.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "A expressão de uma atribuição de exportação deve ser um identificador ou nome qualificado em um contexto de ambiente.", + "The_file_is_in_the_program_because_Colon_1430": "O arquivo está no programa porque:", + "The_files_list_in_config_file_0_is_empty_18002": "A lista de 'arquivos' no arquivo de configuração '{0}' está vazia.", + "The_first_export_default_is_here_2752": "O primeiro padrão de exportação está aqui.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "O primeiro parâmetro do método 'then' de uma promessa deve ser um retorno de chamada.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "O tipo global 'JSX.{0}' não pode ter mais de uma propriedade.", + "The_implementation_signature_is_declared_here_2750": "A assinatura de implementação é declarada aqui.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "A meta da propriedade 'import.meta' não é permitida em arquivos que serão compilados na saída do CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "A meta-propriedade “import.meta” só é permitida quando a opção “--module” for “es2020”, “es2022”, “esnext”, “system”, “node16”, “node18”, “node20” ou “nodenext”.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "O tipo inferido de '{0}' não pode ser nomeado sem uma referência a '{1}'. Isso provavelmente não é portátil. Uma anotação de tipo é necessária.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "O tipo inferido '{0}' faz referência a um tipo com uma estrutura cíclica que não pode ser serializada trivialmente. Uma anotação de tipo é necessária.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "O tipo inferido de '{0}' faz referência a um tipo '{1}' inacessível. Uma anotação de tipo é necessária.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "O tipo inferido deste nó excede o tamanho máximo que o compilador serializará. Uma anotação de tipo explícita é necessária.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "O inicializador de uma declaração 'using' deve ser um objeto com um método '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "O inicializador de uma declaração 'await using' deve ser um objeto com um método '[Symbol.asyncDispose]()' ou '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' existe em vários constituintes e é privada em alguns.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' tem tipos conflitantes em alguns constituintes.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "A palavra-chave 'intrinsic' só pode ser usada para declarar tipos intrínsecos fornecidos pelo compilador.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "A opção do compilador 'jsxFragmentFactory' precisa ser fornecida para que se possa usar fragmentos JSX com a opção do compilador 'jsxFactory'.", + "The_last_overload_gave_the_following_error_2770": "A última sobrecarga gerou o seguinte erro.", + "The_last_overload_is_declared_here_2771": "A última sobrecarga é declarada aqui.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "O lado esquerdo de uma instrução 'for...in' não pode ser um padrão de desestruturação.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'await using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "O lado esquerdo de uma instrução 'for...in' não pode usar uma anotação de tipo.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "O lado esquerdo de uma instrução 'for...in' pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "O lado esquerdo de uma instrução 'for...in' deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "O lado esquerdo de uma instrução de 'for...in' deve ser do tipo 'string' ou 'any'.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "O lado esquerdo de uma instrução 'for...of' não pode usar uma anotação de tipo.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "O lado esquerdo de uma instrução 'for...of' pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "O lado esquerdo de uma instrução 'for...of' não pode ser 'assíncrono'.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "O lado esquerdo de uma instrução 'for...of' deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "O lado esquerdo de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "O lado esquerdo de uma expressão de atribuição pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "O lado esquerdo de uma expressão de atribuição deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "O lado esquerdo de uma expressão 'instanceof' deve ser atribuível ao primeiro argumento do método '[Symbol.hasInstance]' do lado direito.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "O lado esquerdo de uma expressão 'instanceof' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "O local usado ao exibir mensagens ao usuário (por exemplo, 'en-us')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "A profundidade máxima de dependência a ser pesquisada em arquivos node_modules e de carregamento de JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "O operando de um operador 'delete' pode não ser um identificador privado.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "O operando de um operador 'delete' não pode ser uma propriedade somente leitura.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "O operando de um operador 'delete' deve ser uma referência de propriedade.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "O operando de um operador 'delete' precisa ser opcional.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "O operando de um operador de incremento ou decremento pode não ser um acesso opcional de propriedade.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "O operando de um operador de incremento ou decremento deve ser uma variável ou um acesso à propriedade.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "O analisador esperava localizar um '{1}' para corresponder ao token '{0}' aqui.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada de mapa de exportação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada do mapa de importação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "A propriedade '{0}' não pode ser acessada no tipo '{1}' dentro dessa classe porque ela é sombreada por outro identificador privado com a mesma grafia.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "O tipo de retorno de uma função de decorador de parâmetro deve ser 'void' ou 'any'.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "O tipo de retorno de uma função de decorador de propriedade deve ser 'void' ou 'any'.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "O tipo de retorno de uma função assíncrona deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "O tipo de retorno de uma função assíncrona ou método deve ser o tipo Promessa global.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "O tipo de retorno de uma função assíncrona ou método precisa ser o tipo Promise global. Você quis escrever 'Promise<{0}>'?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "O lado direito de uma instrução 'for...in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo, mas aqui ele tem o tipo '{0}'.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "O lado direito de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any', uma classe, uma função ou outro tipo atribuível ao tipo de interface 'Function' ou um tipo de objeto com um método 'Symbol.hasInstance'.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "O lado direito de uma expressão 'instanceof' não deve ser uma expressão de instanciação.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "O valor raiz de um arquivo '{0}' precisa ser um objeto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera pelo menos {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "A declaração de sombreamento de '{0}' é definida aqui", + "The_signature_0_of_1_is_deprecated_6387": "A assinatura '{0}' de '{1}' foi preterida.", + "The_specified_path_does_not_exist_Colon_0_5058": "O caminho especificado não existe: '{0}'.", + "The_tag_was_first_specified_here_8034": "A marca foi especificada primeiro aqui.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "O destino de uma atribuição REST de objeto pode não ser um acesso opcional de propriedade.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "O destino de uma atribuição rest de objeto deve ser uma variável ou um acesso de propriedade.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "O contexto 'this' de tipo '{0}' não é atribuível para o 'this' do método de tipo '{1}'.", + "The_this_types_of_each_signature_are_incompatible_2685": "Os tipos 'this' de cada assinatura são incompatíveis.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "O tipo '{0}' é 'readonly' e não pode ser atribuído ao tipo mutável '{1}'.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "O modificador “type” não pode ser usado em uma exportação nomeada quando “export type” for usado em sua instrução de exportar.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "O modificador “type” não pode ser usado em uma importação nomeada quando “import type” for usado em sua instrução de importar.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "O tipo deste nó não pode ser serializado porque sua propriedade '{0}' não pode ser serializada.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "O tipo retornado pelo método '{0}()' de um iterador assíncrono deve ser uma promessa para um tipo com a propriedade 'value'.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "O tipo retornado pelo método '{0}()' de um iterador deve ter uma propriedade 'value'.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Os tipos de '{0}' são incompatíveis entre esses tipos.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Os tipos retornados por '{0}' são incompatíveis entre esses tipos.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "O valor '{0}' não pode ser usado aqui.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "A declaração de variável de uma instrução 'for...in' não pode ter um inicializador.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "A declaração de variável de uma instrução 'for...of' não pode ter um inicializador.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "A instrução \"with\" não tem suporte. Todos os símbolos em um bloco \"with\" terão o tipo \"any\".", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido na configuração 'moduleResolution' atual. Considere atualizar para 'node16', 'nodenext' ou 'bundler'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido ao respeitar as \"exportações\" do package.json. A biblioteca '{1}' pode precisar atualizar o package.json ou as digitações.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Não há nenhum grupo de captura chamado '{0}' nesta expressão regular.", + "There_is_nothing_available_for_repetition_1507": "Não há nada disponível para repetição.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Essa marca JSX requer que \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Essa marca JSX requer a existência do caminho do módulo \"{0}\", mas não foi possível encontrar nenhum. Verifique se você tem os tipos do pacote apropriado instalados.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "A propriedade '{0}' da marca desse JSX espera um único filho do tipo '{1}', mas vários filhos foram fornecidos.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "A propriedade '{0}' da marca desse JSX espera o tipo '{1}' que requer vários filhos, mas somente um único filho foi fornecido.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Essa referência inversa refere-se a um grupo que não existe. Não há grupos de captura nessa expressão regular.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Essa referência inversa refere-se a um grupo que não existe. Há apenas {0} grupos de captura nesta expressão regular.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Essa expressão binária nunca é nula. Está faltando parênteses?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este caractere não pode ser escapado em uma expressão regular.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparação parece não ser intencional porque os tipos '{0}' e '{1}' não têm sobreposição.", + "This_condition_will_always_return_0_2845": "Esta condição sempre retornará '{0}'.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Essa condição sempre retornará '{0}', pois o JavaScript compara objetos por referência, não por valor.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condição sempre retornará verdadeiro, já que este '{0}' está sempre definido.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condição sempre retornará verdadeira, uma vez que esta função foi sempre definida. Você pretendia chamá-la em vez disso?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta função de construtor pode ser convertida em uma declaração de classe.", + "This_expression_is_always_nullish_2871": "Essa expressão sempre é nula.", + "This_expression_is_never_nullish_2881": "Esta expressão nunca é nula.", + "This_expression_is_not_callable_2349": "Essa expressão não pode ser chamada.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Esta expressão não pode ser chamada porque é um acessador 'get'. Você quis usá-la sem '()'?", + "This_expression_is_not_constructable_2351": "Essa expressão não pode ser construída.", + "This_file_already_has_a_default_export_95130": "Este arquivo já tem uma exportação padrão", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Não é seguro reescrever esse caminho de importação porque ele é resolvido em outro projeto, e o caminho relativo entre os arquivos de saída dos projetos não é o mesmo que o caminho relativo entre seus arquivos de entrada.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Essa importação usa uma extensão \"{0}\" para resolver um arquivo TypeScript de entrada, mas não será reescrita durante a emissão porque não é um caminho relativo.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta é a declaração que está sendo aumentada. Considere mover a declaração em aumento para o mesmo arquivo.", + "This_kind_of_expression_is_always_falsy_2873": "Esse tipo de expressão é sempre inválido.", + "This_kind_of_expression_is_always_truthy_2872": "Esse tipo de expressão é sempre verdadeiro.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Isso pode ser convertido em uma função assíncrona.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque ele não está declarado na classe base '{0}'.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Esse membro não pode ter um comentário JSDoc com uma marca 'override' porque ele não está declarado na classe base '{0}'. Você quis dizer '{1}'?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque sua classe que contém '{0}' não estende outra classe.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Esse membro não pode ter um comentário JSDoc com uma marcação '@override' porque seu nome é dinâmico.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este membro não pode ter um modificador 'override' porque não está declarado na classe base '{0}'.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Esse membro não pode ter um modificador de 'substituição' porque ele não é declarado na classe base '{0}'. Você quis dizer '{1}'?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este membro não pode ter um modificador 'override' porque a classe que o contém, '{0}', não se estende para outra classe.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Este membro não pode ter um modificador 'override' porque seu nome é dinâmico.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Essa membro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este membro precisa ter um modificador 'override' porque substitui um membro na classe base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este membro precisa ter um modificador 'override' porque substitui um método abstrato que é declarado na classe base '{0}'.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Esse módulo só pode ser referenciado com importações/exportações de ECMAScript ligando o sinalizador '{0}' e referenciando sua exportação padrão.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo é declarado com 'export =', e só pode ser usado com uma importação padrão ao usar o sinalizador '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Essa operação pode ser simplificada. Essa mudança é idêntica a `{0} {1} {2}`.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Essa sobrecarga retorna implicitamente o tipo '{0}' porque não tem uma anotação de tipo de retorno.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta assinatura de sobrecarga não é compatível com sua assinatura de implementação.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parâmetro não é permitido com a diretiva 'use strict'.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Essa propriedade de parâmetro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propriedade de parâmetro deve ter uma modificação de 'substituição' porque substitui um membro na classe base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esse sinalizador de expressão regular não pode ser alternado em um subpadrão.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esse sinalizador de expressão regular só está disponível ao direcionar para '{0}' ou posterior.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Não é seguro reescrever esse caminho de importação relativo porque ele se parece com um nome de arquivo, mas, na verdade, é resolvido como \"{0}\".", + "This_spread_always_overwrites_this_property_2785": "Essa difusão sempre substitui essa propriedade.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Esta sintaxe não é permitida quando 'erasableSyntaxOnly' está habilitado.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Adicione uma vírgula final ou restrição explícita.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Em vez disso, use uma expressão `as`.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Essa sintaxe requer um auxiliar importado, mas o módulo '{0}' não pode ser encontrado.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxe requer um auxiliar importado chamado '{1}' que não existe em '{0}'. Considere atualizar sua versão do '{0}'.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxe exige um auxiliar importado nomeado como '{1}' com parâmetros {2}, o que não é compatível com o que está em '{0}'. Considere atualizar sua versão do '{0}'.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Este parâmetro de tipo pode precisar de uma restrição `extends {0}`.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Este uso de 'importar' é inválido. Chamadas 'import()' podem ser escritas, mas devem ter parênteses e não podem ter argumentos de tipo.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Para converter este arquivo em um módulo ECMAScript, adicione o campo `\"type\": \"module\"` a '{0}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou adicione o campo `\"type\": \"module\"` para '{1}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou crie um arquivo package.json local com `{ \"type\": \"module\" }`.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para converter este arquivo em um módulo ECMAScript, crie um arquivo package.json local com `{ \"type\": \"module\" }`.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "As expressões “await” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "As instruções “await using” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "As declarações de nível superior em arquivos .d.ts devem começar com um modificador 'declare' ou 'export'.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Os loops “for await” de nível superior só são permitidos quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Trailing_comma_not_allowed_1009": "Vírgula à direita não permitida.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transcompilar cada arquivo como um módulo separado (do mesmo modo que 'ts.transpileModule').", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Tente `npm i --save-dev @types/{1}` caso exista ou adicione um novo arquivo de declaração (.d.ts) contendo `declare module '{0}';`", + "Trying_other_entries_in_rootDirs_6110": "Tentando outras entradas em 'rootDirs'.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Tentando substituição '{0}', local de módulo candidato: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "O tipo de tupla '{0}' de comprimento '{1}' não tem nenhum elemento no índice '{2}'.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Os argumentos de tipo de tupla se referenciam circularmente.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "O tipo '{0}' só pode ser iterado usando o sinalizador '--downlevelIteration' ou um '--target' igual a 'es2015' ou superior.", + "Type_0_cannot_be_used_as_an_index_type_2538": "O tipo '{0}' não pode ser usado como um tipo de índice.", + "Type_0_cannot_be_used_to_index_type_1_2536": "O tipo '{0}' não pode ser usado para indexar o tipo '{1}'.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "O tipo '{0}' não satisfaz a restrição '{1}'.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "O tipo '{0}' não atende ao tipo esperado '{1}'.", + "Type_0_has_no_call_signatures_2757": "O tipo '{0}' não tem assinaturas de chamada.", + "Type_0_has_no_construct_signatures_2761": "O tipo '{0}' não tem assinaturas de constructo.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "O tipo '{0}' não tem assinatura de índice correspondente para o tipo '{1}'.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "O tipo '{0}' não tem propriedades em comum com o tipo '{1}'.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "O tipo “{0}” não tem assinaturas para as quais a lista de argumentos de tipo é aplicável.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "O tipo '{0}' é genérico e só pode ser indexado para leitura.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2} e mais {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "O tipo '{0}' não é um tipo de função de construtor.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "O tipo '{0}' não é um tipo de retorno de função assíncrona válido no ES5, pois não se refere ao valor construtor compatível com a Promessa.", + "Type_0_is_not_an_array_type_2461": "O tipo '{0}' não é um tipo de matriz.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "O tipo '{0}' não é um tipo de matriz ou de cadeia de caracteres.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "O tipo '{0}' não é um tipo de matriz de um tipo de cadeia ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "O tipo '{0}' não é um tipo de matriz ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_is_not_assignable_to_type_1_2322": "O tipo '{0}' não pode ser atribuído ao tipo '{1}'.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "O tipo '' não pode ser atribuído ao tipo {0} '{1}'. Você quis dizer '{2}'?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "O tipo '{0}' não é atribuível ao tipo '{1}'. Dois tipos diferentes com esse nome existem, mas eles não estão relacionados.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Tipo '{0}' não é atribuível ao tipo '{1}' como implícito pela anotação de variância.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "O tipo '{0}' não é atribuível ao tipo '{1}', conforme necessário para valores de membro de enumeração computados.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' ao tipo do destino.", + "Type_0_is_not_comparable_to_type_1_2678": "O tipo '{0}' não pode ser comparável ao tipo '{1}'.", + "Type_0_is_not_generic_2315": "O tipo '{0}' não é genérico.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "O tipo '{0}' pode representar um valor primitivo, que não é permitido como operando direito do operador 'in'.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "O tipo '{0}' deve ter um método '[Symbol.asyncIterator]()' que retorna um iterador assíncrono.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "O tipo '{0}' deve ter um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_provides_no_match_for_the_signature_1_2658": "O tipo '{0}' fornece nenhuma correspondência para a assinatura '{1}'.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "O tipo '{0}' referencia recursivamente a si próprio como um tipo base.", + "Type_Checking_6248": "Verificação de Tipo", + "Type_alias_0_circularly_references_itself_2456": "O alias de tipo '{0}' referencia circulamente a si próprio.", + "Type_alias_must_be_given_a_name_1439": "O alias de tipo deve receber um nome.", + "Type_alias_name_cannot_be_0_2457": "O nome do alias de tipo não pode ser '{0}'.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Os aliases de tipo só podem ser usados em arquivos TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Uma anotação de tipo não pode aparecer em uma declaração de construtor.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "As anotações de tipo só podem ser usadas em arquivos TypeScript.", + "Type_argument_expected_1140": "Argumento de tipo esperado.", + "Type_argument_list_cannot_be_empty_1099": "A lista de argumentos de tipo não pode estar vazia.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Os argumentos de tipo só podem ser usados em arquivos TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Os argumentos de tipo '{0}' se referenciam circularmente.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "As expressões de declaração de tipo só podem ser usadas em arquivos TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "O tipo na posição {0} na fonte não é compatível com o tipo na posição {1} no destino.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "O tipo nas posições {0} até {1} na fonte não é compatível com o tipo na posição {2} no destino.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "O tipo que contém o nome particular '{0}' não pode ser usado com --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Arquivos de declaração de tipo a serem incluídos em compilação.", + "Type_expected_1110": "Tipo esperado.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "As asserções de importação de tipo devem ter exatamente uma chave - `resolution-mode` - com valor `import` ou` require`.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "A importação de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "A instanciação de tipo é muito profunda e possivelmente infinita.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "O tipo é referenciado diretamente ou indiretamente em um retorno de chamada de preenchimento do seu próprio método 'then'.", + "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}'", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}' com packageId '{2}'", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "O tipo de operando \"await\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "O tipo de valor da propriedade computada é '{0}', que não pode ser atribuído ao tipo '{1}'.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "O tipo de variável '{0}' de membro de instância não pode referenciar o identificador '{1}' declarado no construtor.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "O tipo de elementos iterados de um operando \"yield*\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "O tipo de propriedade '{0}' faz referência circular a si mesmo no tipo mapeado '{1}'.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "O tipo do operando \"yield\" em um gerador assíncrono deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "A importação somente de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "O tipo se origina nessa importação. Uma importação de estilo de namespace não pode ser chamada nem construída e causará uma falha no runtime. Considere usar uma importação padrão ou importe require aqui.", + "Type_parameter_0_has_a_circular_constraint_2313": "O parâmetro de tipo '{0}' tem uma restrição circular.", + "Type_parameter_0_has_a_circular_default_2716": "O parâmetro de tipo '{0}' tem um padrão circular.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "O parâmetro de tipo '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "O parâmetro de tipo '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "O parâmetro de tipo '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "O parâmetro de tipo '{0}' da função exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "O parâmetro de tipo '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "O parâmetro de tipo '{0}' do tipo de objeto mapeado exportado tem ou está usando o nome privado '{1}'.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "O parâmetro de tipo '{0}' do alias de tipo exportado tem ou está usando o nome privado '{1}'.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "O parâmetro de tipo '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "O parâmetro de tipo '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "O parâmetro de tipo '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_declaration_expected_1139": "Declaração de parâmetro de tipo esperada.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "As declarações de parâmetro de tipo só podem ser usadas em arquivos TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Os padrões de parâmetro de tipo só podem referenciar parâmetros de tipo declarados anteriormente.", + "Type_parameter_list_cannot_be_empty_1098": "A lista de parâmetros de tipo não pode estar vazia.", + "Type_parameter_name_cannot_be_0_2368": "O nome do parâmetro de tipo não pode ser '{0}'.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Os parâmetros de tipo não podem aparecer em uma declaração de construtor.", + "Type_predicate_0_is_not_assignable_to_1_1226": "O predicado de tipo '{0}' não pode ser atribuído a '{1}'.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "O tipo produz um tipo de tupla grande demais para ser representado.", + "Type_reference_directive_0_was_not_resolved_6120": "======== A diretiva de referência de tipo '{0}' não foi resolvida. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}', primário: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}' com a ID do Pacote '{2}', primário: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "As expressões de satisfação de tipo só podem ser usadas em arquivos TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Os tipos não podem aparecer em declarações de exportação em arquivos JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Tipos têm declarações separadas de uma propriedade privada '{0}'.", + "Types_of_construct_signatures_are_incompatible_2419": "Os tipos de assinaturas de constructo são incompatíveis.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Os tipos de parâmetros '{0}' e '{1}' são incompatíveis.", + "Types_of_property_0_are_incompatible_2326": "Tipos de propriedade '{0}' são incompatíveis.", + "Unable_to_open_file_0_6050": "Não é possível abrir o arquivo '{0}'.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Não é possível resolver a assinatura do decorador de classe quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Não é possível resolver a assinatura do decorador de método quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Não é possível resolver a assinatura do decorador de parâmetro quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Não é possível resolver a assinatura do decorador de propriedade quando ele é chamado como uma expressão.", + "Undetermined_character_escape_1513": "Escape de caractere indeterminado.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' inesperado. Você quer escapar com barra invertida?", + "Unexpected_end_of_text_1126": "Fim inesperado do texto.", + "Unexpected_keyword_or_identifier_1434": "Palavra-chave ou identificador inesperado.", + "Unexpected_token_1012": "Token inesperado.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Um construtor, método, acessador ou propriedade era esperado.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Era esperado um nome de parâmetro de tipo sem chaves.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. Você quis dizer '{'>'}' ou '>'?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. Você quis dizer '{'}'}' ou '}'?", + "Unexpected_token_expected_1179": "Token inesperado. '{' esperado.", + "Unicode_escape_sequence_cannot_appear_here_17021": "A sequência de escape Unicode não pode aparecer aqui.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "As sequências de escape Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "As expressões de valor da propriedade Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unknown_Unicode_property_name_1524": "Nome da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_name_or_value_1529": "Nome ou valor da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_value_1526": "Valor da propriedade Unicode desconhecido.", + "Unknown_build_option_0_5072": "Opção de build '{0}' desconhecida.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Opção de build '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_compiler_option_0_5023": "Opção do compilador '{0}' desconhecida.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opção de compilador '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Palavra-chave ou identificador desconhecido. Você quis dizer '{0}'?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opção desconhecida 'excludes'. Você quis dizer 'exclude'?", + "Unknown_regular_expression_flag_1499": "Sinalizador de expressão regular desconhecido.", + "Unknown_type_acquisition_option_0_17010": "Opção de aquisição de tipo desconhecido '{0}'.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opção de aquisição de tipo '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_watch_option_0_5078": "Opção de observador '{0}' desconhecida.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Opção de observador '{0}' desconhecida. Você quis dizer '{1}'?", + "Unreachable_code_detected_7027": "Código inacessível detectado.", + "Unterminated_Unicode_escape_sequence_1199": "Sequência de escape Unicode não finalizada.", + "Unterminated_quoted_string_in_response_file_0_6045": "Cadeia de caracteres entre aspas não finalizada no arquivo de resposta '{0}'.", + "Unterminated_regular_expression_literal_1161": "Literal de expressão regular não finalizado.", + "Unterminated_string_literal_1002": "Literal de cadeia de caracteres não finalizado.", + "Unterminated_template_literal_1160": "Literal de modelo não finalizado.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Chamadas de função não tipadas não podem aceitar argumentos de tipo.", + "Unused_label_7028": "Rótulo não utilizado.", + "Unused_ts_expect_error_directive_2578": "Diretiva '@ts-expect-error' não usada.", + "Update_import_from_0_90058": "Atualizar importação de \"{0}\"", + "Update_modifiers_of_0_90061": "Atualizar modificadores de '{0}'", + "Updating_output_timestamps_of_project_0_6359": "Atualizando os carimbos de data/hora de saída do projeto '{0}'...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Atualizando os carimbos de data/hora de saída inalterados do projeto '{0}'...", + "Use_0_95174": "Use `{0}`.", + "Use_0_instead_5106": "Use '{0}' em vez disso.", + "Use_Number_isNaN_in_all_conditions_95175": "Use `Number.isNaN` em todas as condições.", + "Use_element_access_for_0_95145": "Usar o acesso de elemento para '{0}'", + "Use_element_access_for_all_undeclared_properties_95146": "Usar o acesso de elemento para todas as propriedades não declaradas.", + "Use_import_type_95180": "Usar 'tipo de importação'", + "Use_synthetic_default_member_95016": "Use o membro sintético 'padrão'.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use o campo 'exports' do package.json ao resolver importações de pacote.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use o campo 'imports' no package.json ao resolver importações.", + "Use_type_0_95181": "Usar 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subcaminho '{1}' com destino '{2}'.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "O uso de fragmentos JSX requer que a fábrica de fragmentos \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Há suporte para o uso de uma cadeia de caracteres em uma instrução 'for...of' somente no ECMAScript 5 e superior.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Usar --build, -b fará com que o tsc se comporte mais como um orquestrador de build do que como um compilador. Isso é usado para acionar a construção de projetos compostos sobre os quais você pode aprender mais em {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Usando as opções do compilador de redirecionamento de referência do projeto '{0}'.", + "VERSION_6036": "VERSÃO", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "O valor do tipo '{0}' não tem propriedades em comum com o tipo '{1}'. Você queria chamá-lo?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "O valor do tipo '{0}' não pode ser chamado. Você pretendia incluir 'new'?", + "Variable_0_implicitly_has_an_1_type_7005": "A variável '{0}' implicitamente tem um tipo '{1}'.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "A variável '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "A variável '{0}' implicitamente tem o tipo '{1}' em algumas localizações, mas um tipo melhor pode ser inferido do uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "A variável '{0}' tem implicitamente o tipo '{1}' em alguns locais onde o tipo não pode ser determinado.", + "Variable_0_is_used_before_being_assigned_2454": "A variável '{0}' é usada antes de ser atribuída.", + "Variable_declaration_expected_1134": "Declaração de variável esperada.", + "Variable_declaration_list_cannot_be_empty_1123": "A lista de declaração de variável não pode estar vazia.", + "Variable_declaration_not_allowed_at_this_location_1440": "A declaração de variável não é permitida neste local.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "A variável deve ter uma anotação de tipo explícita com --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variáveis com várias declarações não podem ser embutidas.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "O elemento variádico na posição {0} na fonte não corresponde ao elemento na posição {1} no destino.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Só há suporte para anotações de variação em aliases do tipo para objetos, funções, construtores e tipos mapeados.", + "Version_0_6029": "Versão {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Visite https://aka.ms/ts6 para obter informações de migração.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig para ler mais sobre este arquivo", + "WATCH_OPTIONS_6918": "OPÇÕES DE INSPEÇÃO", + "Watch_and_Build_Modes_6250": "Modos Inspeção e Compilação", + "Watch_input_files_6005": "Observe os arquivos de entrada.", + "Watch_option_0_requires_a_value_of_type_1_5080": "A opção do observador '{0}' requer um valor do tipo {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Só podemos gravar um tipo de '{0}' adicionando um tipo para o parâmetro inteiro aqui.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Ao atribuir funções, certifique-se que os parâmetros e os valores de retorno sejam compatíveis com subtipo.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Quando a fizer a verificação de tipo, considere 'null' e 'undefined'.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Se é necessário manter a saída de console desatualizada no modo de inspeção, em vez de limpar a tela.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos os caracteres inválidos em um contêiner de expressão", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Encapsular todas as expressões de decorador inválidas entre parênteses", + "Wrap_all_object_literal_with_parentheses_95116": "Colocar todo o literal de objeto entre parênteses", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Empacotar todos os JSXs sem pai no fragmento de JSX", + "Wrap_in_JSX_fragment_95120": "Encapsular o fragmento de JSX", + "Wrap_in_parentheses_95194": "Encapsular entre parênteses", + "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular caractere inválido em um contêiner de expressão", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Colocar entre parênteses o corpo a seguir, que deve ser um literal de objeto", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Você pode aprender sobre todas as opções do compilador em {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Não é possível renomear um módulo por meio de uma importação global.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Não é possível renomear elementos definidos em uma pasta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Não é possível renomear elementos definidos em outra pasta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Não é possível renomear elementos que são definidos na biblioteca TypeScript padrão.", + "You_cannot_rename_this_element_8000": "Você não pode renomear este elemento.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' aceita muito poucos argumentos para serem usados como um decorador aqui. Você quis dizer para chamá-lo primeiro e gravar '@{0}()'?", + "_0_and_1_index_signatures_are_incompatible_2330": "As assinaturas de índice '{0}' e '{1}' são incompatíveis.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "As operações '{0}' e '{1}' não podem ser combinadas sem parênteses.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' são especificados duas vezes. O atributo chamado '{0}' será substituído.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' no final de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' no início de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' só pode ser importado ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' só pode ser importado usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' só pode ser importado usando uma chamada 'require' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' só pode ser importado usando uma chamada 'require' ou usando uma importação padrão.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou uma importação padrão.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_cannot_be_used_as_a_JSX_component_2786": "O módulo '{0}' não pode ser usado como um componente JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' não pode ser usado como um valor porque foi exportado usando 'tipo de exportação'.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' não pode ser usado como um valor porque foi importado usando 'tipo de importação'.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Os componentes '{0}' não aceitam texto como elementos filho. O texto em JSX tem o tipo 'cadeia de caracteres', mas o tipo esperado de '{1}' é '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Uma instância de '{0}' poderia ser criada com um tipo arbitrário que poderia não estar relacionado a '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Declarações '{0}' só podem ser declaradas dentro de um bloco.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "As declarações '{0}' só podem ser usadas em arquivos TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Declarações '{0}' podem não ter padrões de associação.", + "_0_declarations_must_be_initialized_1155": "Declarações '{0}' devem ser inicializadas.", + "_0_expected_1005": "'{0}' esperado.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' tem um tipo de cadeia de caracteres, mas deve ter sintaxe de cadeia de caracteres reconhecível sintaticamente quando 'isolatedModules' está habilitado.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' não tem nenhum membro exportado chamado '{1}'. Você quis dizer '{2}'?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' tem implicitamente um tipo de retorno '{1}', mas um tipo melhor pode ser inferido do uso.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Implicitamente, '{0}' tem um retorno tipo 'any' porque ele não tem uma anotação de tipo de retorno e é referenciado direta ou indiretamente em uma das suas expressões de retorno.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Implicitamente, '{0}' tem o tipo 'any' porque não tem uma anotação de tipo e é referenciado direta ou indiretamente em seu próprio inicializador.", + "_0_index_signatures_are_incompatible_2634": "'{0}' assinaturas de índice são incompatíveis.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' tipo de índice '{1}' não pode ser atribuído a '{2}' tipo de índice '{3}'.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' é um primitivo, mas '{1}' é um objeto de wrapper. Prefira usar '{0}' quando possível.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' é um tipo e não pode ser importado em arquivos JavaScript. Use '{1}' em uma anotação de tipo JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' é um tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' é uma renomeação não usada de '{1}'. Você pretendia usá-lo como uma anotação de tipo?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' é atribuível à restrição do tipo '{1}', mas é possível criar uma instância de '{1}' com um subtipo diferente de restrição '{2}'.", + "_0_is_automatically_exported_here_18044": "'{0}' é exportado automaticamente aqui.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' é declarado, mas seu valor nunca é lido.", + "_0_is_declared_but_never_used_6196": "'{0}' está declarado, mas nunca foi usado.", + "_0_is_declared_here_2728": "'{0}' é declarado aqui.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' está definido como uma propriedade na classe '{1}', mas é substituído aqui em '{2}' como um acessador.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' está definido como um acessador na classe '{1}', mas é substituído aqui em '{2}' como uma propriedade de instância.", + "_0_is_deprecated_6385": "'{0}' foi preterido.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' não é uma metapropriedade para a palavra-chave '{1}'. Você quis dizer '{2}'?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' não é permitido como um nome de parâmetro.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' não é permitido como um nome de declaração de variável.", + "_0_is_of_type_unknown_18046": "'{0}' é do tipo 'desconhecido'.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' é possivelmente 'null'.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' é possivelmente 'null' ou 'undefined'.", + "_0_is_possibly_undefined_18048": "'{0}' é possivelmente 'indefinido'.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' é referenciado direta ou indiretamente em sua própria expressão base.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' é referenciado direta ou indiretamente em sua própria anotação de tipo.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' foi especificado mais de uma vez, portanto esse uso será substituído.", + "_0_list_cannot_be_empty_1097": "A lista '{0}' não pode estar vazia.", + "_0_modifier_already_seen_1030": "O modificador '{0}' já foi visto.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "O modificador '{0}' pode aparecer apenas em um parâmetro de tipo de uma classe, interface ou alias de tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "O modificador '{0}' só pode aparecer em um parâmetro de tipo de uma função, método ou classe", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "O modificador '{0}' não pode aparecer em uma declaração de construtor.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "O modificador '{0}' não pode aparecer em um módulo ou elemento de namespace.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "O modificador '{0}' não pode aparecer em um parâmetro.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "O modificador '{0}' não pode aparecer em um membro de tipo.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "O modificador '{0}' não pode aparecer em um parâmetro de tipo", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "O modificador '{0}' não pode aparecer em uma declaração 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "O modificador '{0}' não pode aparecer em uma declaração 'await using'.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "O modificador '{0}' não pode aparecer em uma assinatura de índice.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "O modificador '{0}' não pode aparecer em elementos de classe deste tipo.", + "_0_modifier_cannot_be_used_here_1042": "O modificador '{0}' não pode ser usado aqui.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "O modificador '{0}' não pode ser usado em um contexto de ambiente.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "O modificador '{0}' não pode ser usado com um modificador '{1}'.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "O modificador '{0}' não pode ser usado com um identificador privado.", + "_0_modifier_must_precede_1_modifier_1029": "O modificador '{0}' deve preceder o modificador '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve ser seguido por uma expressão de valor de propriedade Unicode entre chaves.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' precisa de uma anotação de tipo explícita.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um namespace aqui.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' só faz referência a um tipo, mas está sendo usado como valor no momento.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' faz referência somente a um tipo, mas está sendo usado como um valor aqui. Você quis usar '{1} em {0}'?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para es2015 ou posterior.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' refere-se a uma UMD global, mas o arquivo atual é um módulo. Considere adicionar uma importação.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' refere-se a um valor, mas está sendo usado como um tipo aqui. Você quis dizer 'typeof {0}'?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' resolve para uma declaração somente de tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' resolve para uma declaração apenas de tipo e deve ser reexportada usando uma reexportação apenas de tipo quando '{1}' está habilitado.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' deve ser colocado dentro do objeto 'compilerOptions' do arquivo config json", + "_0_tag_already_specified_1223": "A marca '{0}' já foi especificada.", + "_0_was_also_declared_here_6203": "'{0}' também foi declarado aqui.", + "_0_was_exported_here_1377": "'{0}' foi exportado aqui.", + "_0_was_imported_here_1376": "'{0}' foi importado aqui.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{1}'.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de rendimento '{1}'.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "O modificador 'abstract' pode aparecer somente em uma declaração de classe, método ou propriedade.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "o modificador 'acessador' só pode aparecer em uma declaração de propriedade.", + "and_here_6204": "e aqui.", + "and_npm_install_D_types_Slashnode_6290": "e npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "\"arguments\" não podem ser referenciados em inicializadores de propriedade ou blocos de inicialização estática de classe.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trata os arquivos com import, export, import.meta, jsx (com jsx: react-jsx) ou formato esm (com module: node16+) como módulos.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão 'await' não pode ser usada dentro de um bloco estático de classe.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "As expressões 'await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas não tem importações ou exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "As expressões 'await' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "As expressões 'await' não podem ser usadas em inicializadores de parâmetros.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' não tem efeito sobre o tipo desta expressão.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Declarações \"await using\" não são permitidas em contextos de ambiente.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "Declarações \"await using\" não são permitidas em cláusulas \"case\" ou \"default\", a menos que estejam contidas em um bloco.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "As instruções 'for await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instruções 'await using' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instruções 'await using' não podem ser usadas dentro de um bloco estático de classe.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "A opção 'baseUrl' é configurada para '{0}', usando este valor para resolver o nome de módulo não relativo '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve ser seguido por uma letra ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' só pode ser usado no início de um arquivo.", + "case_or_default_expected_1130": "'case' ou 'default' esperado.", + "catch_or_finally_expected_1472": "é esperado 'catch' ou 'finally'.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "O inicializador de membro de enumeração 'const' foi avaliado como um valor não finito.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "O inicializador de membro de enumeração 'const' foi avaliado como o valor não permitido 'NaN'.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Os inicializadores de membro de enumeração const devem ser expressões constantes.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Enumerações 'const' só podem ser usadas em expressões de acesso de índice ou propriedade, ou então do lado direito de uma consulta de tipo, declaração de importação ou atribuição de exportação.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Não é possível usar 'constructor' como nome de uma propriedade de parâmetro.", + "constructor_is_a_reserved_word_18012": "'#constructor' é uma palavra reservada.", + "default_Colon_6903": "padrão:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' não pode ser chamado em um identificador no modo estrito.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' não exporta novamente um padrão.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' só pode ser usado em arquivos TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "O modificador 'export' não pode ser aplicado a módulos de ambiente e acréscimos de módulo, pois eles estão sempre visíveis.", + "extends_clause_already_seen_1172": "A cláusula 'extends' já foi vista.", + "extends_clause_must_precede_implements_clause_1173": "A cláusula 'extends' deve preceder a cláusula 'implements'.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "A cláusula 'extends' da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "A cláusula 'extends' da classe exportada tem ou está usando o nome particular '{0}'.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "A cláusula 'extends' da interface exportada '{0}' tem ou está usando o nome particular '{1}'.", + "false_unless_checkJs_is_set_6932": "“false”, a menos que “checkJs” esteja definido", + "false_unless_composite_is_set_6906": "`false`, a menos que `composite` esteja definido", + "file_6025": "arquivo", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Os loops 'for await' só são permitidos no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Os loops 'for await' só são permitidos em funções assíncronas e nos níveis superiores dos módulos.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops 'for await' não podem ser usados dentro de um bloco estático de classe.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "os acessadores 'get' e 'set' não podem declarar os parâmetros 'this'.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se `files` for especificado, caso contrário `[\"**/*\"]`", + "implements_clause_already_seen_1175": "A cláusula 'implements' já foi vista.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Cláusulas 'implements' só podem ser usadas em arquivos TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' só pode ser usado em arquivos TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "As declarações 'infer' só são permitidas na cláusula 'extends' de um tipo condicional.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve ser seguido por um nome de grupo de captura entre colchetes angulares.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "O uso de 'let' não é permitido como um nome em declarações 'let' ou 'const'.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "A expressão 'new', cujo destino não tem uma assinatura de constructo, implicitamente tem um tipo 'any'.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\" node_modules \",\" bower_components \",\" jspm_packages \"]`, mais o valor de `outDir`, caso seja especificado.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "“nodenext” se “module” for “nodenext”; “node16” se “module” for “node16” ou “node18”; caso contrário, “bundler”.", + "one_of_Colon_6900": "um dos:", + "one_or_more_Colon_6901": "um ou mais:", + "options_6024": "opções", + "or_JSX_element_expected_1145": "'{' ou elemento JSX esperado.", + "or_expected_1144": "'{' ou ';' esperado.", + "package_json_does_not_have_a_0_field_6100": "'package.json' não tem um campo '{0}'.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' não tem uma entrada 'typesVersions' que corresponda à versão '{0}'.", + "package_json_had_a_falsy_0_field_6220": "'package.json' teve um campo '{0}' false.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' tem '{0}' campo '{1}' que faz referência a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "'package.json' tem um campo 'peerDependencies'.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' tem uma entrada 'typesVersions' '{0}' que não é um intervalo semver válido.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' tem uma entrada 'typesVersions' '{0}' que corresponde à versão do compilador '{1}', procurando por um padrão que corresponda ao nome do módulo '{2}'.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' tem um campo 'typesVersions' com mapeamentos de caminho específicos à versão.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "O escopo package.json '{0}' mapeia explicitamente o especificador '{1}' para nulo.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "O escopo package.json '{0}' tem um tipo inválido para o destino do especificador '{1}'", + "package_json_scope_0_has_no_imports_defined_6273": "O escopo package.json '{0}' não tem importações definidas.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "A opção 'paths' é especificada, procurando por um padrão para corresponder ao nome do módulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "'\\q' só está disponível dentro da classe de caracteres.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve ser seguido por alternativas de cadeia de caracteres entre chaves.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "O modificador 'readonly' pode aparecer somente em uma declaração de propriedade ou assinatura de índice.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "O modificador de tipo 'readonly' só é permitido em tipos literais de matriz e tupla.", + "require_call_may_be_converted_to_an_import_80005": "A chamada 'require' pode ser convertida em uma importação.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` pode ser definido apenas para importações somente de tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` é a única chave válida para as asserções de importação de tipo.", + "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve ser 'require' ou 'import'.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "A opção 'rootDirs' está configurada, usando-a para resolver o nome de módulo relativo '{0}'.", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' só pode ser referenciado em uma classe derivada.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' pode ser referido somente em membros de classes derivadas ou expressões literais de objeto.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' não pode ser referenciado em um nome de propriedade calculado.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' não pode ser referenciado nos argumentos do construtor.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' é permitido somente em membros de expressões literais de objeto quando a opção 'target' é 'ES2015' ou maior.", + "super_may_not_use_type_arguments_2754": "'super' não pode usar argumentos de tipo.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "'super' deve ser chamado antes de acessar uma propriedade de 'super' no construtor de uma classe derivada.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "'super' deve ser chamado antes de acessar 'this' no construtor de uma classe derivada.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' deve ser seguido por um acesso de membro ou lista de argumentos.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "O acesso à propriedade 'super' só é permitido em um construtor, em funções de membros ou acessadores de membros de uma classe derivada.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' não pode ser referenciado em um nome de propriedade calculado.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' não pode ser referenciado em um corpo de módulo ou de namespace.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' não pode ser referenciado em um inicializador de propriedade estática.", + "this_cannot_be_referenced_in_current_location_2332": "'this' não pode ser referenciado no local atual.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.", + "true_for_ES2022_and_above_including_ESNext_6930": "'True' para ES2022 e acima, incluindo ESNext.", + "true_if_composite_false_otherwise_6909": "`true` se` composite`, `false` caso contrário", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' é 'node16', 'nodenext' ou 'bundler'; caso contrário, \"false\".", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: o Compilador TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "O tsconfig.json está presente, mas não será carregado se os arquivos forem especificados na linha de comando. Use '--ignoreConfig' para ignorar esse erro.", + "type_Colon_6902": "tipo:", + "unique_symbol_types_are_not_allowed_here_1335": "Tipos de 'unique symbol' não são permitidos aqui.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Tipos de 'unique symbol' são permitidos apenas em variáveis em uma declaração de variável.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Tipos de 'unique symbol' não podem ser usados em uma declaração de variável com um nome associado.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "A diretiva 'use strict' não pode ser usada com uma lista de parâmetros não simples.", + "use_strict_directive_used_here_1349": "A diretiva 'use strict' usada aqui.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Declarações \"using\" não são permitidas em contextos de ambiente.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "Declarações \"using\" não são permitidas em cláusulas \"case\" ou \"default\", a menos que estejam contidas em um bloco.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "As declarações 'with' não são permitidas em blocos de funções assíncronas.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Instruções 'with' não são permitidas no modo estrito.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Expressão 'yield' resulta implicitamente em um tipo 'any' porque seu gerador contido não tem uma anotação de tipo de retorno.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "As expressões 'yield' não podem ser usadas em inicializadores de parâmetros." +} diff --git a/tsc/internal/diagnostics/loc/ru-RU.generated.json b/tsc/internal/diagnostics/loc/ru-RU.generated.json index e3966a7e7c51c..4abb540be3826 100644 --- a/tsc/internal/diagnostics/loc/ru-RU.generated.json +++ b/tsc/internal/diagnostics/loc/ru-RU.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "ВСЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Модификатор \"{0}\" не может быть использован с объявлением импорта.", - "A_0_parameter_must_be_the_first_parameter_2680": "В качестве первого параметра необходимо указать \"{0}\".", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Тег JSDoc @template не может следовать за тегом @typedef, @callback или @overload.", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Комментарий \"@typedef\" JSDoc не может содержать несколько тегов \"@type\".", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Литерал 'bigint' не может использоваться в качестве имени свойства.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Литерал типа bigint не может использовать экспоненциальное представление.", - "A_bigint_literal_must_be_an_integer_1353": "Литерал типа bigint должен быть целым числом.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Параметр шаблона привязки не может быть необязательным в сигнатуре реализации.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Оператор break можно использовать только во включающей итерации или операторе switch.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Оператор break может переходить только к метке внешнего оператора.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Класс символов не должен содержать зарезервированный двойной знак пунктуации. Вы хотели избежать этого с помощью обратной косой черты?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Диапазон классов символов не должен быть ограничен другим классом символов.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Класс может реализовать только идентификатор или полное имя с дополнительными аргументами типа.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Класс может реализовать только тип объекта или пересечение типов объектов со статическими известными членами.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Класс не может расширять примитивный тип, такой как ' {0} '. Классы могут расширять только конструируемые значения.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Класс не может реализовать примитивный тип, такой как '{0}'. Он может реализовывать только другие именованные типы объектов.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Объявление класса без модификатора \"default\" должно иметь имя.", - "A_class_member_cannot_have_the_0_keyword_1248": "Элемент класса не может иметь ключевое слово \"{0}\".", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Выражение с запятой запрещено в имени вычисляемого свойства.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Имя вычисляемого свойства не может ссылаться на параметр типа из содержащего его типа.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Имя вычисляемого свойства в объявлении свойства класса должно иметь тип простого литерала или тип \"уникальный символ\".", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Имя вычисляемого свойства в перегрузке метода должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Имя вычисляемого свойства в литерале должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Имя вычисляемого свойства в окружающем контексте должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Имя вычисляемого свойства в интерфейсе должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Имя вычисляемого свойства должно иметь тип string, number, symbol или any.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Утверждение \"const\" может применяться только к ссылкам на элементы перечисления либо к строковым, числовым, логическим литералам, литералам массивов или объектов.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Доступ к элементу перечисления констант может осуществляться только с использованием строкового литерала.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Инициализатор \"const\" во внешнем контексте должен быть строкой или числовым литералом либо ссылкой на литеральное перечисление.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Конструктор не может содержать вызов \"super\", если его класс расширяет \"null\".", - "A_constructor_cannot_have_a_this_parameter_2681": "Конструктор не может иметь параметр this.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Оператор continue можно использовать только в операторе включающей итерации.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Оператор continue может переходить только к метке оператора включающей итерации.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Файл декларации невозможно импортировать без \"типа импорта\". Вы хотели вместо этого импортировать файл реализации ' {0} '?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Модификатор declare нельзя использовать в уже окружающем контексте.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Декоратор может только декорировать реализацию метода, а не перегрузку.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Предложение default не может повторяться в операторе switch.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Экспорт по умолчанию можно использовать только в модуле в стиле ECMAScript.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Экспорт по умолчанию должен находиться на верхнем уровне объявления файла или модуля.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Утверждение определенного назначения \"!\" запрещено в этом контексте.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Объявление деструктурирования должно включать инициализатор.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Для вызова динамического импорта в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Вызов динамического импорта возвращает \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", - "A_file_cannot_have_a_reference_to_itself_1006": "Файл не может содержать ссылку на самого себя.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Функция, возвращающая \"never\", не может иметь доступную конечную точку.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Функция, которая вызывается с ключевым словом new, не может иметь тип this со значением void.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Функция, объявленный тип которой не является ни \"неопределенным\", ни \"недействительным\", ни \"любым\", должна возвращать значение.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Генератор не может иметь аннотацию типа void.", - "A_get_accessor_cannot_have_parameters_1054": "Метод доступа get не может иметь параметров.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Метод доступа get должен быть доступным как минимум в той же мере, что и метод задания.", - "A_get_accessor_must_return_a_value_2378": "Метод доступа get должен возвращать значение.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Элемент маркированного кортежа объявлен как необязательный с вопросительным знаком между именем и двоеточием, а не после типа.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Маркированный элемент кортежа объявлен как rest с многоточием перед именем, а не перед типом.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Сопоставленный тип не может объявлять свойства и методы.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Инициализатор элемента в объявлении перечисления не может ссылаться на элементы, объявленные после него, включая элементы, определенные в других перечислениях.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Класс примеси должен иметь конструктор с одиночным параметром REST типа any[].", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Класс примеси, который наследуется от переменной типа, содержащей сигнатуру абстрактной конструкции, должен быть также объявлен как \"abstract\".", - "A_module_cannot_have_multiple_default_exports_2528": "Модуль не может иметь несколько импортов по умолчанию.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Объявление пространства имен и класс или функция, с которыми оно объединено, не могут находится в разных файлах.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Объявление пространства имен не может располагаться раньше класса или функции, с которыми оно объединено.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Объявление пространства имен разрешено только на верхнем уровне пространства имен или модуля.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Объявление \"namespace\" с использованием ключевого слова \"module\" недопустимо. Вместо него используйте ключевое слово \"namespace\".", - "A_non_dry_build_would_build_project_0_6357": "При сборке без флага -dry будет собран проект \"{0}\"", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "При сборке без флага -dry будут удалены следующие файлы: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Сборка без флага -dry обновит метки времени для выходных данных проекта \"{0}\"", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Инициализатор параметра разрешено использовать только в реализации функции или конструктора.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Свойство параметра невозможно объявить с помощью параметра REST.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Свойство параметра допускается только в реализации конструктора.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Свойство параметра невозможно объявить с помощью шаблона привязки.", - "A_promise_must_have_a_then_method_1059": "Класс promise должен содержать метод then.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Свойство класса, тип которого — \"unique symbol\", должно быть задано как \"static\" и \"readonly\".", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Свойство интерфейса или литерала, тип которого — \"unique symbol\", должно быть задано как \"readonly\".", - "A_required_element_cannot_follow_an_optional_element_1257": "Обязательный элемент не должен следовать за необязательным.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Обязательный параметр не должен следовать за необязательным.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "Элемент rest не может содержать шаблон привязки.", - "A_rest_element_cannot_follow_another_rest_element_1265": "Элемент rest не может следовать за другим элементом rest.", - "A_rest_element_cannot_have_a_property_name_2566": "Элемент rest не может иметь имя свойства.", - "A_rest_element_cannot_have_an_initializer_1186": "Элемент rest не может содержать инициализатор.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Элемент REST должен быть последним в шаблоне деструктуризации.", - "A_rest_element_type_must_be_an_array_type_2574": "Элемент rest должен иметь тип массива.", - "A_rest_parameter_cannot_be_optional_1047": "Параметр rest не может быть необязательным.", - "A_rest_parameter_cannot_have_an_initializer_1048": "Параметр rest не может иметь инициализатор.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Параметр rest должен стоять на последнем месте в списке параметров.", - "A_rest_parameter_must_be_of_an_array_type_2370": "Параметр rest должен иметь тип массива.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "После параметра rest или шаблона привязки не может стоять запятая.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "Оператор return можно использовать только в теле функции.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Оператор return нельзя использовать внутри статического блока класса.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Серия записей, которая повторно сопоставляет импорты с расположениями поиска, заданными относительно baseUrl.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Метод доступа set не может иметь заметку с типом возвращаемого значения.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "Метод доступа set не может иметь необязательный параметр.", - "A_set_accessor_cannot_have_rest_parameter_1053": "Метод доступа set не может иметь параметр rest.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "У метода доступа set должен быть ровно один параметр.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Параметр метода доступа set не может иметь инициализатор.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Аргумент расширения должен иметь тип кортежа либо передаваться в параметр rest.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Вызов \"super\" должен быть инструкцией на корневом уровне в конструкторе производного класса с инициализированными свойствами, свойствами параметров или частными идентификаторами.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Вызов \"super\" должен быть первой инструкцией в конструкторе, ссылающейся на \"super\" или \"this\", если производный класс содержит инициализированные свойства, свойства параметров или частные идентификаторы.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Условие типа this несовместимо с условием типа на основе параметров.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Тип this доступен только в нестатическом элементе класса или интерфейса.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Модификатор \"export\" верхнего уровня нельзя использовать в объявлениях значений в модуле CommonJS, если включен \"verbatimModuleSyntax\".", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Файл tsconfig.json уже определен в \"{0}\".", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Элемент кортежа не может быть одновременно элементом rest и необязательным элементом.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Тип кортежа нельзя индексировать с отрицательным значением.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Выражение утверждения типа не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Свойство литерала типа не может иметь инициализатор.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Импорт, затрагивающий только тип, может указывать либо только импорт по умолчанию, либо только именованные привязки.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Предикат типов не может ссылаться на параметр rest.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Предикат типов не может ссылаться на элемент \"{0}\" в шаблоне привязки.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Предикат типов разрешено использовать только в позиции типа возвращаемого значения для функций и методов.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Тип предиката типа должен быть доступным для назначения этому типу параметра.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Тип, указанный в декорированной сигнатуре, должен импортироваться с \"import type\" или импортом пространства имен, если включены параметры \"isolatedModules\" и \"emitDecoratorMetadata\".", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Переменная, тип которой — \"unique symbol\", должна быть задана как \"const\".", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Выражение yield разрешено использовать только в теле генератора.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Невозможно получить доступ к абстрактному методу \"{0}\" класса \"{1}\" с помощью выражения super.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Абстрактные методы могут использоваться только в абстрактных классах.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Абстрактные свойства могут появляться только внутри абстрактного класса.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Абстрактное свойство \"{0}\" в классе \"{1}\" недоступно в конструкторе.", - "Accessibility_modifier_already_seen_1028": "Модификатор специальных возможностей уже встречался.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Методы доступа доступны только при разработке для ECMAScript 5 и более поздних версий.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "Методы доступа должны быть абстрактными или неабстрактными.", - "Add_0_to_unresolved_variable_90008": "Добавить \"{0}.\" к неразрешенной переменной", - "Add_a_return_statement_95111": "Добавить оператор return", - "Add_a_return_type_to_the_function_declaration_9031": "Добавьте тип возвращаемого значения в объявление функции.", - "Add_a_return_type_to_the_function_expression_9030": "Добавьте тип возвращаемого значения в выражение функции.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Добавьте тип возвращаемого значения в объявление метода доступа get.", - "Add_a_return_type_to_the_method_9034": "Добавьте тип возвращаемого значения в метод", - "Add_a_type_annotation_to_the_parameter_0_9028": "Добавьте аннотацию типа к параметру {0} .", - "Add_a_type_annotation_to_the_property_0_9029": "Добавьте аннотацию типа к свойству {0} .", - "Add_a_type_annotation_to_the_variable_0_9027": "Добавьте аннотацию типа к переменной {0} .", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Добавьте тип в параметр объявления метода доступа set.", - "Add_all_missing_async_modifiers_95041": "Добавить все отсутствующие модификаторы \"async\"", - "Add_all_missing_attributes_95168": "Добавить все отсутствующие атрибуты", - "Add_all_missing_call_parentheses_95068": "Добавить все недостающие скобки вызова", - "Add_all_missing_function_declarations_95157": "Добавить все недостающие объявления функций", - "Add_all_missing_imports_95064": "Добавить все отсутствующие импорты", - "Add_all_missing_members_95022": "Добавить все отсутствующие элементы", - "Add_all_missing_override_modifiers_95162": "Добавьте все отсутствующие модификаторы \"override\".", - "Add_all_missing_parameters_95190": "Добавьте все недостающие параметры", - "Add_all_missing_properties_95166": "Добавить все отсутствующие свойства", - "Add_all_missing_return_statement_95114": "Добавить все отсутствующие операторы return", - "Add_all_missing_super_calls_95039": "Добавить все отсутствующие вызовы super", - "Add_all_missing_type_annotations_90067": "Добавьте все недостающие аннотации типов", - "Add_all_optional_parameters_95193": "Добавить все необязательные параметры", - "Add_annotation_of_type_0_90062": "Добавьте аннотацию типа ' {0} '", - "Add_async_modifier_to_containing_function_90029": "Добавьте модификатор async в содержащую функцию", - "Add_await_95083": "Добавить \"await\"", - "Add_await_to_initializer_for_0_95084": "Добавить \"await\" к инициализатору для \"{0}\"", - "Add_await_to_initializers_95089": "Добавить \"await\" к инициализаторам", - "Add_braces_to_arrow_function_95059": "Добавить скобки в стрелочную функцию", - "Add_const_to_all_unresolved_variables_95082": "Добавить \"const\" ко всем неразрешенным переменным", - "Add_const_to_unresolved_variable_95081": "Добавить \"const\" к неразрешенной переменной", - "Add_definite_assignment_assertion_to_property_0_95020": "Добавить утверждение определенного назначения к свойству \"{0}\"", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Добавить утверждения определенного назначения ко всем неинициализированным свойствам", - "Add_export_to_make_this_file_into_a_module_95097": "Добавить \"export {}\", чтобы превратить этот файл в модуль", - "Add_extends_constraint_2211": "Добавить ограничение \"extends\".", - "Add_extends_constraint_to_all_type_parameters_2212": "Добавить ограничение \"extends\" ко всем параметрам типа", - "Add_import_from_0_90057": "Добавить импортировать из \"{0}\"", - "Add_index_signature_for_property_0_90017": "Добавьте сигнатуру индекса для свойства \"{0}\"", - "Add_initializer_to_property_0_95019": "Добавить инициализатор к свойству \"{0}\"", - "Add_initializers_to_all_uninitialized_properties_95027": "Добавить инициализаторы ко всем неинициализированным свойствам", - "Add_missing_attributes_95167": "Добавить отсутствующие атрибуты", - "Add_missing_call_parentheses_95067": "Добавить недостающие скобки вызова", - "Add_missing_comma_for_object_member_completion_0_95187": "Добавьте недостающую запятую для завершения члена объекта ' {0} '.", - "Add_missing_enum_member_0_95063": "Добавить отсутствующий член перечисления \"{0}\"", - "Add_missing_function_declaration_0_95156": "Добавить недостающее объявление функции \"{0}\"", - "Add_missing_new_operator_to_all_calls_95072": "Добавить отсутствующий оператор \"new\" во все вызовы", - "Add_missing_new_operator_to_call_95071": "Добавить отсутствующий оператор \"new\" в вызов", - "Add_missing_parameter_to_0_95188": "Добавить недостающий параметр в ' {0} '", - "Add_missing_parameters_to_0_95189": "Добавьте недостающие параметры в ' {0} '", - "Add_missing_properties_95165": "Добавить отсутствующие свойства", - "Add_missing_super_call_90001": "Добавьте отсутствующий вызов \"super()\"", - "Add_missing_typeof_95052": "Добавить отсутствующий \"typeof\"", - "Add_names_to_all_parameters_without_names_95073": "Добавить имена ко всем параметрам без имен", - "Add_optional_parameter_to_0_95191": "Добавьте необязательный параметр в ' {0} '", - "Add_optional_parameters_to_0_95192": "Добавить дополнительные параметры в \"{0}\"", - "Add_or_remove_braces_in_an_arrow_function_95058": "Добавить скобки в стрелочную функцию или удалить скобки из нее", - "Add_override_modifier_95160": "Добавьте модификатор \"override\".", - "Add_parameter_name_90034": "Добавить имя параметра", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Добавить квалификатор ко всем неразрешенным переменным, соответствующим имени члена", - "Add_resolution_mode_import_attribute_95196": "Добавьте атрибут импорта \"resolution-mode\"", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Добавьте атрибут импорта \"resolution-mode\" ко всем командам импорта, затрагивающим только тип, для которых это необходимо", - "Add_return_type_0_90063": "Добавить тип возвращаемого значения ' {0} '", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Добавьте к этому выражению satisfies и утверждение типа (удовлетворяет T как T), чтобы сделать тип явным.", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Добавьте удовлетворение и утверждение встроенного типа с помощью ' {0} '", - "Add_to_all_uncalled_decorators_95044": "Добавить \"()\" ко всем невызванным декораторам", - "Add_ts_ignore_to_all_error_messages_95042": "Добавить \"@ts-ignore\" ко всем сообщениям об ошибках", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Добавьте \"undefined\" к типу при доступе с использованием индекса.", - "Add_undefined_to_optional_property_type_95169": "Добавить \"undefined\" к необязательному типу свойства", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Добавить неопределенный тип ко всем неинициализированным свойствам", - "Add_undefined_type_to_property_0_95018": "Добавить тип \"undefined\" к свойству \"{0}\"", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Добавить преобразование \"unknown\" для неперекрывающихся типов", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Добавить \"unknown\" для всех преобразований неперекрывающихся типов", - "Add_void_to_Promise_resolved_without_a_value_95143": "Добавить \"void\" в Promise (обещание), разрешенное без значения", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Добавить \"void\" во все Promise (обещания), разрешенные без значения", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Добавление файла tsconfig.json поможет организовать проекты, содержащие файлы TypeScript и JavaScript. Дополнительные сведения: https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Все объявления \"{0}\" должны иметь одинаковые ограничения.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Все объявления \"{0}\" должны иметь одинаковые модификаторы.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Все объявления \"{0}\" должны иметь одинаковые параметры типа.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Все объявления абстрактных методов должны быть последовательными.", - "All_destructured_elements_are_unused_6198": "Все деструктурированные элементы не используются.", - "All_imports_in_import_declaration_are_unused_6192": "Ни один из импортов в объявлении импорта не используется.", - "All_type_parameters_are_unused_6205": "Ни один из параметров типа не используется.", - "All_variables_are_unused_6199": "Ни одна переменная не используется.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Разрешите файлам JavaScript быть частью программы. Используйте параметр \"checkJs\" для получения ошибок из этих файлов.", - "Allow_accessing_UMD_globals_from_modules_6602": "Разрешение обращения к глобальным значениям UMD из модулей.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не повлияет на выведение кода — только на проверку типов.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Разрешить \"импортировать x из y\", если модуль не имеет экспорта по умолчанию.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Разрешить импортировать вспомогательныхе функции из tslib один раз для каждого проекта, а не включать их для каждого файла.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Разрешить импортировать расширения файлов TypeScript. Требуется установить --moduleResolution packager и --noEmit или --emitDeclarationOnly.", - "Allow_javascript_files_to_be_compiled_6102": "Разрешить компиляцию файлов javascript.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Разрешить обрабатывать несколько папок как одну при разрешении модулей.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Уже включенное имя файла \"{0}\" отличается от имени файла \"{1}\" только регистром.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Объявление окружающего модуля не может содержать относительное имя модуля.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Внешний модуль не может быть вложен в другие модули или пространства имен.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Модуль AMD не может иметь несколько назначений имен.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "У абстрактного метода доступа не может быть реализации.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Модификатор специальных возможностей запрещено использовать с закрытым идентификатором.", - "An_accessor_cannot_have_type_parameters_1094": "Метод доступа не может иметь параметры типа.", - "An_accessor_property_cannot_be_declared_optional_1276": "Невозможно объявить свойство \"accessor\" как необязательное.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Объявление окружающего модуля разрешено использовать только в рамках верхнего уровня файла.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "Не указан аргумент для \"{0}\".", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Не указан аргумент, соответствующий этому шаблону привязки.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Арифметический операнд должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Стрелочная функция не может иметь параметр \"this\".", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Для асинхронной функции или метода в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Асинхронная функция или метод должны вернуть \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", - "An_async_iterator_must_have_a_next_method_2519": "В асинхронном итераторе должен быть метод next().", - "An_element_access_expression_should_take_an_argument_1011": "Выражение доступа к элементу должно принимать аргумент.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Член перечисления не может иметь имя с закрытым идентификатором.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Имя элемента перечисления не может быть числовым.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "После имени члена перечисления должен стоять знак \",\", \"=\" или \"}\".", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Расширенная версия этих сведений, в которой показаны все возможные параметры компиляторов", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Назначение экспорта нельзя использовать в модуле с другими экспортированными элементами.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Назначение экспорта нельзя использовать в пространстве имен.", - "An_export_assignment_cannot_have_modifiers_1120": "Назначение экспорта не может иметь модификаторы.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Назначение экспорта должно находиться на верхнем уровне объявления файла или модуля.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Объявление экспорта может использоваться только на верхнем уровне модуля.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Объявление экспорта может использоваться только на верхнем уровне пространства имен или модуля.", - "An_export_declaration_cannot_have_modifiers_1193": "Объявление экспорта не может иметь модификаторы.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Объявление 'export =' должно ссылаться на реальное значение, если включен 'verbatimModuleSyntax', но ' {0} ' разрешается в объявление только для типа.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Объявление 'export =' должно ссылаться на значение, если включен 'verbatimModuleSyntax', но ' {0} ' относится только к типу.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"Экспорт по умолчанию\" должен ссылаться на реальное значение, когда \"verbatimModuleSyntax\" включен, но \" {0} \" разрешается в объявление только типа.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "\"Экспорт по умолчанию\" должен ссылаться на значение, если включен \"verbatimModuleSyntax\", но \" {0} \" относится только к типу.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Выражение типа \"void\" не может быть проверено на истинность.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Расширенное escape-значение в Юникоде должно быть в пределах от 0x0 до 0x10FFFF включительно.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Идентификатор или ключевое слово не может следовать непосредственно за числовым литералом.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Реализацию невозможно объявить в окружающих контекстах.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Псевдоним импорта не может ссылаться на объявление, экспортированное с помощью \"export type\".", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Псевдоним импорта не может ссылаться на объявление, импортированное с помощью \"import type\".", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Псевдоним импорта не может быть преобразован в объявление типа или только типа, если включен \"verbatimModuleSyntax\".", - "An_import_alias_cannot_use_import_type_1392": "Псевдоним импорта не может использовать \"import type\".", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Объявление импорта может использоваться только на верхнем уровне модуля.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Объявление импорта может использоваться только на верхнем уровне пространства имен или модуля.", - "An_import_declaration_cannot_have_modifiers_1191": "Объявление импорта не может иметь модификаторы.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Путь импорта может заканчиваться расширением \" {0} \" только в том случае, если включен параметр \"allowImportingTsExtensions\".", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Сигнатура индекса не может иметь параметр rest.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Сигнатура индекса не может заканчиваться запятой.", - "An_index_signature_must_have_a_type_annotation_1021": "У сигнатуры индекса должна быть аннотация типа.", - "An_index_signature_must_have_exactly_one_parameter_1096": "У сигнатуры индекса должен быть ровно один параметр.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Параметр сигнатуры индекса не может содержать вопросительный знак.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Параметра сигнатуры индекса не может содержать модификатор специальных возможностей.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Параметр сигнатуры индекса не может содержать инициализатор.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "У параметра сигнатуры индекса должна быть аннотация типа.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Тип параметра сигнатуры индекса не может быть типом литерала или универсальным типом. Рекомендуется использовать тип сопоставляемого объекта.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Тип параметра сигнатуры индекса должен быть строкой, числом, символом или типом литерала шаблона.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "За выражением создания экземпляра не может следовать доступ к свойству.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Интерфейс может расширить только идентификатор или полное имя с дополнительными аргументами типа.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Интерфейс может расширять только тип объекта или пересечение типов объектов со статическими известными членами.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Интерфейс не может расширять примитивный тип, такой как ' {0} '. Он может расширять только другие именованные типы объектов.", - "An_interface_property_cannot_have_an_initializer_1246": "Свойство интерфейса не может иметь инициализатор.", - "An_iterator_must_have_a_next_method_2489": "Итератор должен иметь метод \"next()\".", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "При использовании директивы pragma @jsx с фрагментами JSX требуется директива pragma @jsxFrag.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Объектный литерал не может иметь несколько методов доступа get/set с одинаковым именем.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "У объектного литерала не может быть несколько свойств с одинаковым именем.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Объектный литерал не может иметь свойство и метод доступа с одинаковым именем.", - "An_object_member_cannot_be_declared_optional_1162": "Элемент объекта не может быть объявлен необязательным.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Метод объекта \"[Symbol.hasInstance]\" должен возвращать логическое значение, чтобы его можно было использовать в правой части выражения \"instanceof\".", - "An_optional_chain_cannot_contain_private_identifiers_18030": "Необязательная цепочка не может содержать закрытые идентификаторы.", - "An_optional_element_cannot_follow_a_rest_element_1266": "Необязательный элемент не может следовать за элементом rest.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Этот контейнер затемняет внешнее значение \"this\".", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Сигнатура перегрузки не может быть объявлена в качестве генератора.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Унарное выражение с оператором \"{0}\" не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.", - "Annotate_everything_with_types_from_JSDoc_95043": "Добавить заметки ко всем элементам с типами JSDoc", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Аннотирование типов свойств расширяет функцию в пространстве имен", - "Annotate_with_type_from_JSDoc_95009": "Заметка с типом из JSDoc", - "Another_export_default_is_here_2753": "Здесь находится другой экспорт данных по умолчанию.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Любое свойство Unicode, которое может соответствовать более чем одному символу, доступно только в том случае, если установлен флаг Unicode Sets (v).", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Все, что может соответствовать более чем одному символу, недопустимо внутри отрицаемого класса символов.", - "Are_you_missing_a_semicolon_2734": "У вас отсутствует точка с запятой?", - "Argument_expression_expected_1135": "Ожидалось выражение аргумента.", - "Argument_for_0_option_must_be_Colon_1_6046": "Аргумент для параметра \"{0}\" должен быть {1}.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Аргумент динамического импорта не может быть элементом расширения.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Аргумент типа \"{0}\" нельзя назначить параметру типа \"{1}\".", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Невозможно назначить аргумент типа \"{0}\" параметру типа \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Не указаны аргументы для параметра REST \"{0}\".", - "Array_element_destructuring_pattern_expected_1181": "Ожидался шаблон деструктурирования элемента массива.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Массивы с расширенными элементами не могут быть выведены с помощью --isolatedDeclarations.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Утверждения требуют, чтобы каждое имя в целевом объекте вызова было объявлено с явной заметкой с типом.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Утверждения требуют, чтобы целевой объект вызова был идентификатором или полным именем.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Назначение свойств функциям без их объявления не поддерживается с помощью --isolatedDeclarations. Добавьте явное объявление свойств, назначенных этой функции.", - "Asterisk_Slash_expected_1010": "Ожидалось \"*/\".", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "По крайней мере один метод доступа должен иметь явную аннотацию типа с параметром --isolatedDeclarations.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Улучшения для глобальной области могут быть вложены во внешние модули или неоднозначные объявления модулей только напрямую.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Улучшения для глобальной области не должны иметь модификатор declare, если они отображаются в окружающем контексте.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Автообнаружение для вводимых данных включено в проекте \"{0}\". Идет запуск дополнительного этапа разрешения для модуля \"{1}\" с использованием расположения кэша \"{2}\".", - "BUILD_OPTIONS_6919": "ПАРАМЕТРЫ СБОРКИ", - "Backwards_Compatibility_6253": "Обратная совместимость", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Выражения базового класса не могут ссылаться на параметры типа класса.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Тип возвращаемого значения базового конструктора \"{0}\" не является ни типом объекта, ни пересечением типов объектов со статическими известными членами.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Конструкторы базового класса должны иметь одинаковые типы возвращаемых значений.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Базовый каталог для разрешения неабсолютных имен модуля.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Литералы типа bigint недоступны при нацеливании на версию ниже ES2020.", - "Binary_digit_expected_1177": "Ожидался бит.", - "Binding_element_0_implicitly_has_an_1_type_7031": "Элемент привязки \"{0}\" имеет неявный тип \"{1}\".", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Переменная \"{0}\" с областью видимости, ограниченной блоком, использована перед своим объявлением.", - "Build_a_composite_project_in_the_working_directory_6925": "Создание составного проекта в рабочей папке.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Собирайте все проекты, включая не требующие обновления.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Собрать один проект или несколько и их зависимости, если они не обновлены", - "Build_option_0_requires_a_value_of_type_1_5073": "Параметр сборки \"{0}\" требует значение типа {1}.", - "Building_project_0_6358": "Сборка проекта \"{0}\"...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Встроенные итераторы создаются с типом TReturn \"неопределенным\" вместо \"любого\".", - "COMMAND_LINE_FLAGS_6921": "ФЛАГИ КОМАНДНОЙ СТРОКИ", - "COMMON_COMMANDS_6916": "ОБЩИЕ КОМАНДЫ", - "COMMON_COMPILER_OPTIONS_6920": "ОБЩИЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", - "Call_decorator_expression_90028": "Вызовите выражение декоратора", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "Типы возвращаемых значений сигнатур вызовов \"{0}\" и \"{1}\" несовместимы.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Сигнатура вызова, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Сигнатуры вызова без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".", - "Call_target_does_not_contain_any_signatures_2346": "Объект вызова не содержит сигнатуры.", - "Can_only_convert_logical_AND_access_chains_95142": "Можно преобразовывать только цепочки доступа с логическим И.", - "Can_only_convert_named_export_95164": "Можно преобразовать только именованный экспорт.", - "Can_only_convert_property_with_modifier_95137": "Можно только преобразовать свойство с модификатором", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Можно преобразовывать только конкатенации строк и строковые литералы.", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Не удается получить доступ к {0}.{1}, так как {0} является типом, но не является пространством имен. Вы хотели получить тип свойства {1} в {0} с использованием {0}[\"{1}\"]?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Невозможно получить доступ к ' {0} ' из другого файла без уточнения, если включен ' {1} '. Вместо него используйте '{2}'.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Невозможно получить доступ к перечислениям окружения const, если включено ' {0} '.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Не удается назначить тип конструктора \"{0}\" для типа конструктора \"{1}\".", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Не удается назначить тип конструктора абстрактного класса для типа конструктора класса, не являющегося абстрактным.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Не удается задать значение для \"{0}\", так как это класс.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Не удается задать значение для \"{0}\", так как это константа.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "Не удается задать значение для \"{0}\", так как это функция.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Не удается задать значение для \"{0}\", так как это пространство имен.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Не удается задать значение для \"{0}\", так как это свойство, доступное только для чтения.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Не удается задать значение для \"{0}\", так как это перечисление.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "Не удается задать значение для \"{0}\", так как это импорт.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Не удается задать значение для \"{0}\", так как это не переменная.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Не удается присвоить значение частному методу \"{0}\". Частные методы недоступны для записи.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Не удается улучшить модуль \"{0}\", так как он разрешается в немодульную сущность.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Невозможно добавить экспорт значений в модуль \"{0}\", так как он разрешается в немодульную сущность.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Невозможно скомпилировать модули с использованием параметра \"{0}\", если флаг \"--module\" не имеет значения \"amd\" или \"system\".", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Невозможно создать экземпляр абстрактного класса.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Не удается делегировать итерацию значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но содержащий генератор всегда будет отправлять \"{0}\".", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Не удается экспортировать \"{0}\". Только локальные объявления можно экспортировать из модуля.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Не удается расширить класс \"{0}\". Конструктор класса помечен как частный.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Не удается расширить интерфейс \"{0}\". Вы имели в виду \"реализует\"?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Не удается найти файл tsconfig.json в текущем каталоге: {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Не удается найти файл tsconfig.json в указанном каталоге: \"{0}\".", - "Cannot_find_global_type_0_2318": "Не удается найти глобальный тип \"{0}\".", - "Cannot_find_global_value_0_2468": "Не удается найти глобальное значение \"{0}\".", - "Cannot_find_lib_definition_for_0_2726": "Не удается найти определение lib для \"{0}\".", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Не удается найти определение lib для \"{0}\". Вы имели в виду \"{1}\"?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Не удается найти модуль \"{0}\". Рекомендуется использовать параметр \"--resolveJsonModule\" для импорта модуля с расширением \".json\".", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Не найден модуль \"{0}\". Вы имели в виду установить для параметра \"moduleResolution\" значение \"nodenext\" или добавить псевдонимы к параметру \"paths\"?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Не удается найти модуль \"{0}\" или связанные с ним объявления типов.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Не удается найти объявления модуля или типа для импорта с побочным эффектом \"{0}\".", - "Cannot_find_name_0_2304": "Не удается найти имя \"{0}\".", - "Cannot_find_name_0_Did_you_mean_1_2552": "Не удается найти имя \"{0}\". Вы имели в виду \"{1}\"?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Не удается найти имя \"{0}\". Возможно, вы имели в виду элемент экземпляра \"this.{0}\"?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Не удается найти имя \"{0}\". Возможно, вы имели в виду статический элемент \"{1}.{0}\"?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Не удается найти имя \"{0}\". Вы собирались использовать его в асинхронной функции?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{1}\" или более поздней версии.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`, а затем добавьте 'bun' в поле типов в вашем tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства запуска тестов? Попробуйте использовать команды \"npm i --save-dev @types/jest\" или \"npm i --save-dev @types/mocha\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства выполнения тестов? Попробуйте использовать `npm i --save-dev @types/jest` или `npm i --save-dev @types/mocha`, а затем добавьте \"jest\" или \"mocha\" в поле типов в файле tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать команду \"npm i --save-dev @types/jquery\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать `npm i --save-dev @types/jquery`, а затем добавить \"jquery\" в поле типов в файле tsconfig.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать команду \"npm i --save-dev @types/node\".", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать `npm i --save-dev @types/node`, а затем добавьте \"node\" в поле типов в файле tsconfig.", - "Cannot_find_namespace_0_2503": "Не удается найти пространство имен \"{0}\".", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Невозможно найти пространство имен \"{0}\". Вы имели в виду \"{1}\"?", - "Cannot_find_parameter_0_1225": "Не удается найти параметр \"{0}\".", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Не удается найти общий путь к подкаталогу для входных файлов.", - "Cannot_find_type_definition_file_for_0_2688": "Не удается найти файл определения типа для \"{0}\".", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Невозможно импортировать файлы объявления типа. Рекомендуется импортировать \"{0}\" вместо \"{1}\".", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Невозможно инициализировать переменную \"{0}\" с внешней областью видимости в той же области видимости, что и объявление \"{1}\" с областью видимости \"Блок\".", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Не удается вызвать объект, который может иметь значение \"NULL\".", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Не удается вызвать объект, который может иметь значение \"NULL\" или \"undefined\".", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Не удается вызвать объект, который может иметь значение \"undefined\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но деструктурирование массива всегда будет отправлять \"{0}\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но расширение массива всегда будет отправлять \"{0}\".", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но \"for-of\" всегда будет отправлять \"{0}\".", - "Cannot_move_statements_to_the_selected_file_95183": "Невозможно переместить выписки в выбранный файл", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Невозможно перейти к файлу, выбранный файл недействителен.", - "Cannot_read_file_0_5083": "Невозможно прочитать файл \"{0}\".", - "Cannot_read_file_0_Colon_1_5012": "Не удается считать файл \"{0}\": {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Невозможно повторно объявить переменную \"{0}\" с областью видимости \"Блок\".", - "Cannot_redeclare_exported_variable_0_2323": "Не удается повторно объявить экспортированную переменную \"{0}\".", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Невозможно повторно объявить идентификатор \"{0}\" в операторе catch.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Не удается запустить вызов функции в заметке типа.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Невозможно использовать JSX, если не задан флаг \"--jsx\".", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Невозможно использовать \"экспорт-импорт\" в пространстве имен типа или только для типов, если включен '{0}'.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Невозможно использовать директивы import, export или приращения модуля, если флаг \"--module\" имеет значение \"none\".", - "Cannot_use_namespace_0_as_a_type_2709": "Невозможно использовать пространство имен \"{0}\" как тип.", - "Cannot_use_namespace_0_as_a_value_2708": "Невозможно использовать пространство имен \"{0}\" как значение.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Нельзя использовать \"this\" в инициализаторе статического свойства для класса, использующего декоратор.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Не удается записать файл \"{0}\", так как это перезапишет файл \"TSBUILDINFO\", созданный проектом \"{1}\", на который указывает ссылка.", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Не удается записать файл \"{0}\", так как он будет перезаписан несколькими входными файлами.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Не удается записать файл \"{0}\", так как это привело бы к перезаписи входного файла.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Переменная оператора catch не может иметь инициализатор.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Если аннотация для типа переменной предложения clutch указана, это должна быть аннотация \"any\" или \"unknown\".", - "Change_0_to_1_90014": "Измените \"{0}\" на \"{1}\"", - "Change_all_extended_interfaces_to_implements_95038": "Изменить все расширенные интерфейсы на \"implements\"", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Изменить все типы JSDoc на TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Изменить все типы JSDoc на TypeScript (и добавить \"| undefined\" к типам, допускающим значение NULL)", - "Change_extends_to_implements_90003": "Измените \"extends\" на \"implements\"", - "Change_spelling_to_0_90022": "Измените написание на \"{0}\"", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Проверьте свойства класса, которые объявлены, но не заданы в конструкторе.", - "Check_side_effect_imports_6806": "Проверьте импорт побочных эффектов.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Убедитесь, что аргументы для методов \"bind\", \"call\" и \"apply\" соответствуют исходной функции.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Идет проверка того, является ли \"{0}\" самым длинным соответствующим префиксом для \"{1}\" — \"{2}\".", - "Circular_definition_of_import_alias_0_2303": "Циклическое определение псевдонима импорта \"{0}\".", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Обнаружена цикличность при разрешении конфигурации: {0}", - "Circularity_originates_in_type_at_this_location_2751": "Цикличность происходит из типа в этом расположении.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Класс \"{0}\" определяет метод доступа — элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет его как функцию — элемент экземпляра.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Класс \"{0}\" определяет функцию — элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет ее как метод доступа — элемент экземпляра.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Класс \"{0}\" определяет свойство-элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет его как функцию-элемент экземпляра.", - "Class_0_incorrectly_extends_base_class_1_2415": "Класс \"{0}\" неправильно расширяет базовый класс \"{1}\".", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Класс \"{0}\" неправильно реализует класс \"{1}\". Вы хотели расширить \"{1}\" и унаследовать его члены в виде подкласса?", - "Class_0_incorrectly_implements_interface_1_2420": "Класс \"{0}\" неправильно реализует интерфейс \"{1}\".", - "Class_0_used_before_its_declaration_2449": "Класс \"{0}\" использован прежде, чем объявлен.", - "Class_constructor_may_not_be_a_generator_1368": "Конструктор класса не может быть генератором.", - "Class_constructor_may_not_be_an_accessor_1341": "Конструктор класса не может быть методом доступа.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "Объявление класса не может реализовать список перегрузок для \"{0}\".", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "В объявлении класса не может использоваться более одного тега \"@augments\" или \"@extends\".", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Декораторы классов не могут использоваться со статическим частным идентификатором. Попробуйте удалить экспериментальный декоратор.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Поле класса \" {0} \", определенное родительским классом, недоступно в дочернем классе через super.", - "Class_name_cannot_be_0_2414": "Имя класса не может иметь значение \"{0}\".", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Класс не может иметь имя Object при выборе в качестве цели версии ES5 и более поздней с модулем {0}.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Статическая сторона класса \"{0}\" неправильно расширяет статическую сторону базового класса \"{1}\".", - "Classes_can_only_extend_a_single_class_1174": "Классы могут расширить только один класс.", - "Classes_may_not_have_a_field_named_constructor_18006": "Классы не могут иметь поле с именем \"constructor\".", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Код, содержащийся в классе, вычисляется в строгом режиме JavaScript, который не позволяет использовать \"{0}\". Дополнительные сведения см. в https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Параметры командной строки", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Компиляция проекта по заданному пути к файлу конфигурации или папке с файлом tsconfig.json.", - "Compiler_Diagnostics_6251": "Диагностика компилятора", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Опции компилятора \" {0} \" не может быть присвоена пустая строка.", - "Compiler_option_0_expects_an_argument_6044": "Параметр компилятора \"{0}\" ожидает аргумент.", - "Compiler_option_0_may_not_be_used_with_build_5094": "Параметр компилятора \"--{0}\" не может использоваться с \"--build\".", - "Compiler_option_0_may_only_be_used_with_build_5093": "Параметр компилятора \"--{0}\" может использоваться только с \"--build\".", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Параметр компилятора \"{0}\" со значением \"{1}\" нестабилен. Используйте ночную сборку TypeScript, чтобы скрыть эту ошибку. Для обновления попробуйте использовать команду \"npm install -D typescript@next\".", - "Compiler_option_0_requires_a_value_of_type_1_5024": "Параметр \"{0}\" компилятора требует значение типа {1}.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Компилятор резервирует имя \"{0}\" при выдаче закрытого идентификатора на нижний уровень.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Компилирует проект TypeScript, расположенный по указанному пути", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Компилирует текущий проект (tsconfig.js в рабочей папке.)", - "Compiles_the_current_project_with_additional_settings_6929": "Компилирует текущий проект с дополнительными параметрами", - "Completeness_6257": "Полнота", - "Composite_projects_may_not_disable_declaration_emit_6304": "Составные проекты не могут отключать выпуск объявления.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Составные проекты не могут отключить добавочную компиляцию.", - "Computed_from_the_list_of_input_files_6911": "Вычислено из списка входных файлов", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Вычисляемые свойства должны быть числовыми или строковыми литералами, переменными или выражениями, разделенными точками, с параметром --isolatedDeclarations.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Имена вычисляемых свойств запрещены в перечислениях.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Вычисленные имена свойств в литералах классов или объектов не могут быть выведены с помощью --isolatedDeclarations.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Вычисленные значения запрещены в перечислении с членами, имеющими строковые значения.", - "Concatenate_and_emit_output_to_single_file_6001": "Связать и вывести результаты в один файл.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Условия, которые необходимо установить в дополнение к настройкам по умолчанию, специфичным для преобразователя, при разрешении импорта.", - "Conflicts_are_in_this_file_6201": "В этом файле присутствуют конфликты.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Попробуйте добавить к этому классу модификатор \"declare\".", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Типы возвращаемых значений сигнатур конструкции \"{0}\" и \"{1}\" несовместимы.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Сигнатура конструктора, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Сигнатуры конструкции без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".", - "Constructor_implementation_is_missing_2390": "Отсутствует реализация конструктора.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Конструктор класса \"{0}\" является частным и доступным только в объявлении класса.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Конструктор класса \"{0}\" защищен и доступен только в объявлении класса.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "При использовании в типе объединения нотация типа конструктора должна быть заключена в круглые скобки.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "При использовании в типе пересечения нотация типа конструктора должна быть заключена в круглые скобки.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Конструкторы производных классов должны содержать вызов super.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Содержащий файл не указан, корневой каталог невозможно определить. Выполняется пропуск поиска в папке node_modules.", - "Containing_function_is_not_an_arrow_function_95128": "Содержащая функция не является стрелочной", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Выбирайте метод, который нужно использовать для обнаружения JS-файлов в формате модуля.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Преобразование типа \"{0}\" в тип \"{1}\" может привести к ошибке, так как ни один из типов не перекрывается с другим в достаточной степени. Если это сделано намеренно, сначала преобразуйте выражение в \"unknown\".", - "Convert_0_to_1_in_0_95003": "Преобразовать \"{0}\" в \"{1} в {0}\"", - "Convert_0_to_mapped_object_type_95055": "Преобразовать \"{0}\" в тип сопоставленного объекта", - "Convert_all_const_to_let_95102": "Преобразовать все \"const\" в \"let\"", - "Convert_all_constructor_functions_to_classes_95045": "Преобразовать все функции конструктора в классы", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Преобразовать все недопустимые символы в код сущности HTML", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Преобразовать все повторно экспортированные типы в экспорты, затрагивающие только тип", - "Convert_all_require_to_import_95048": "Преобразовать все \"require\" в \"import\"", - "Convert_all_to_async_functions_95066": "Преобразовать все в асинхронные функции", - "Convert_all_to_bigint_numeric_literals_95092": "Преобразовать все в числовые литералы типа bigint", - "Convert_all_to_default_imports_95035": "Преобразовать все в импорт по умолчанию", - "Convert_all_type_literals_to_mapped_type_95021": "Преобразовать все литералы типов в сопоставленный тип", - "Convert_all_typedef_to_TypeScript_types_95177": "Преобразуйте все typedef в типы TypeScript.", - "Convert_arrow_function_or_function_expression_95122": "Преобразовать стрелочную функцию или выражение функции", - "Convert_const_to_let_95093": "Преобразовать \"const\" в \"let\"", - "Convert_default_export_to_named_export_95061": "Преобразовать экспорт по умолчанию в именованный экспорт", - "Convert_function_declaration_0_to_arrow_function_95106": "Преобразовать объявление функции \"{0}\" в стрелочную функцию", - "Convert_function_expression_0_to_arrow_function_95105": "Преобразовать выражение функции \"{0}\" в стрелочную функцию", - "Convert_function_to_an_ES2015_class_95001": "Преобразование функции в класс ES2015", - "Convert_invalid_character_to_its_html_entity_code_95100": "Преобразовать недопустимый знак в его код сущности HTML", - "Convert_named_export_to_default_export_95062": "Преобразовать именованный экспорт в экспорт по умолчанию", - "Convert_named_imports_to_default_import_95170": "Преобразовать именованные операции импорта в стандартный импорт", - "Convert_named_imports_to_namespace_import_95057": "Преобразовать операции импорта имен в импорт пространства имен", - "Convert_namespace_import_to_named_imports_95056": "Преобразовать импорт пространства имен в операции импорта имен", - "Convert_overload_list_to_single_signature_95118": "Преобразовать список перегрузок в одиночную сигнатуру", - "Convert_parameters_to_destructured_object_95075": "Преобразовать параметры в деструктурированный объект", - "Convert_require_to_import_95047": "Преобразовать \"require\" в \"import\"", - "Convert_to_ES_module_95017": "Преобразовать в модуль ES", - "Convert_to_a_bigint_numeric_literal_95091": "Преобразовать в числовой литерал типа bigint", - "Convert_to_anonymous_function_95123": "Преобразовать в анонимную функцию", - "Convert_to_arrow_function_95125": "Преобразовать в стрелочную функцию", - "Convert_to_async_function_95065": "Преобразовать в асинхронную функцию", - "Convert_to_default_import_95013": "Преобразовать в импорт по умолчанию", - "Convert_to_named_function_95124": "Преобразовать в именованную функцию", - "Convert_to_optional_chain_expression_95139": "Преобразовать в необязательное выражение цепочки", - "Convert_to_template_string_95096": "Преобразовать в строку шаблона", - "Convert_to_type_only_export_1364": "Преобразовать в экспорт, распространяющийся только на тип", - "Convert_typedef_to_TypeScript_type_95176": "Преобразование typedef в тип TypeScript.", - "Corrupted_locale_file_0_6051": "Поврежденный файл языкового стандарта \"{0}\".", - "Could_not_convert_to_anonymous_function_95153": "Не удалось преобразовать в анонимную функцию.", - "Could_not_convert_to_arrow_function_95151": "Не удалось преобразовать в стрелочную функцию.", - "Could_not_convert_to_named_function_95152": "Не удалось преобразовать в именованную функцию.", - "Could_not_determine_function_return_type_95150": "Не удалось определить тип возвращаемого значения функции.", - "Could_not_find_a_containing_arrow_function_95127": "Не удалось найти содержащую стрелочную функцию", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Не удалось найти файл объявления модуля \"{0}\". \"{1}\" имеет неявный тип \"any\".", - "Could_not_find_convertible_access_expression_95140": "Не удалось найти преобразуемое выражение доступа.", - "Could_not_find_export_statement_95129": "Не удалось найти инструкцию экспорта.", - "Could_not_find_import_clause_95131": "Не удалось найти предложение импорта.", - "Could_not_find_matching_access_expressions_95141": "Не удалось найти соответствующие выражения доступа.", - "Could_not_find_name_0_Did_you_mean_1_2570": "Не удалось найти имя \"{0}\". Вы имели в виду \"{1}\"?", - "Could_not_find_namespace_import_or_named_imports_95132": "Не удалось найти импорт пространства имен или именованные импорты.", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Не удалось найти свойство, для которого создается метод доступа.", - "Could_not_find_variable_to_inline_95185": "Не удалось найти переменную для встраивания.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Не удалось разрешить путь \"{0}\" с расширениями: {1}.", - "Could_not_write_file_0_Colon_1_5033": "Не удалось записать файл \"{0}\": \"{1}\".", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Создать файлы сопоставителя с исходным кодом для выпущенных файлов JavaScript.", - "Create_sourcemaps_for_d_ts_files_6614": "Создание сопоставителя с исходным кодом для файлов d.ts.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Создает tsconfig.jsс рекомендуемыми параметрами в рабочей папке.", - "DIRECTORY_6038": "КАТАЛОГ", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Десятичные escape-последовательности и обратные ссылки не допускаются в классе символов.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Десятичные дроби с ведущими нулями не допускаются.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Объявление дополняет объявление в другом файле. Сериализация невозможна.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Выдача декларации для этого файла требует сохранения этого импорта для дополнений. Это не поддерживается с помощью --isolatedDeclarations.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\". Явная заметка с типом может разблокировать порождение объявления.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\" из модуля \"{1}\". Явная заметка с типом может разблокировать порождение объявления.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Выдача объявления для этого параметра требует неявного добавления неопределенного значения к его типу. Это не поддерживается с помощью --isolatedDeclarations.", - "Declaration_expected_1146": "Ожидалось объявление.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Имя объявления конфликтует со встроенным глобальным идентификатором \"{0}\".", - "Declaration_or_statement_expected_1128": "Ожидалось объявление или оператор.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Ожидалось объявление или инструкция. Этот '=' следует за блоком операторов, поэтому, если вы намереваетесь написать деструктурирующее присваивание, вам может потребоваться заключить все присваивание в круглые скобки.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Объявления с определенными утверждениями присваивания также должны иметь заметки типов.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Объявления с инициализаторами не могут также иметь определенные утверждения присваивания.", - "Declare_a_private_field_named_0_90053": "Объявите закрытое поле с именем \"{0}\".", - "Declare_method_0_90023": "Объявите метод \"{0}\"", - "Declare_private_method_0_90038": "Объявление закрытого метода \"{0}\"", - "Declare_private_property_0_90035": "Объявление закрытого свойства \"{0}\"", - "Declare_property_0_90016": "Объявите свойство \"{0}\"", - "Declare_static_method_0_90024": "Объявите статический метод \"{0}\"", - "Declare_static_property_0_90027": "Объявите статическое свойство \"{0}\"", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Тип возвращаемого значения функции декоратора \"{0}\" нельзя назначить типу \"{1}\".", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Тип возвращаемого значения функции декоратора — \"{0}\", но ожидается \"void\" или \"any\".", - "Decorator_used_before_export_here_1486": "Здесь декоратор используется перед \"экспортом\".", - "Decorators_are_not_valid_here_1206": "Декораторы здесь недопустимы.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Декораторы нельзя применять к множественным методам доступа get или set с совпадающим именем.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Декораторы могут не отображаться после \"экспорта\" или \"экспорта по умолчанию\", если они также появляются перед \"экспортом\".", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Перед именем и всеми ключевыми словами объявлений свойств должны предшествовать декораторы.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "По умолчанию применяйте для переменных предложения catch значение \"unknown\" вместо \"any\".", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Экспорт модуля по умолчанию использует или имеет закрытое имя \"{0}\".", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Экспорт по умолчанию не может быть выведен с помощью --isolatedDeclarations.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Импорты по умолчанию не разрешены в отложенном импорте.", - "Default_library_1424": "Библиотека по умолчанию", - "Default_library_for_target_0_1425": "Библиотека по умолчанию для целевого объекта \"{0}\"", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Отложенные импорты поддерживаются только в том случае, если для флага \"--module\" установлено значение \"esnext\" или \"preserve\".", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Определения следующих идентификаторов конфликтуют с определениями в другом файле: {0}", - "Delete_all_unused_declarations_95024": "Удалить все неиспользуемые объявления", - "Delete_all_unused_imports_95147": "Удаление всех неиспользуемых импортов", - "Delete_all_unused_param_tags_95172": "Удалить все неиспользуемые теги \"@param\"", - "Delete_the_outputs_of_all_projects_6365": "Удалите выходные данные всех проектов.", - "Delete_unused_param_tag_0_95171": "Удалить неиспользуемый тег \"@param\" \"{0}\"", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Устарело.] Используйте --jsxFactory. Укажите объект, вызываемый для createElement при целевом порождении JSX react", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Устарело.] Используйте --outFile. Сцепление и порождение выходных данных в одном файле", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Устарело.] Используйте --skipLibCheck. Пропуск проверки типов для файлов объявления библиотеки по умолчанию.", - "Deprecated_setting_Use_outFile_instead_6677": "Устаревший параметр. Используйте вместо этого \"outFile\".", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "Возможно, пропущено \"await\"?", - "Did_you_mean_0_1369": "Вы хотели использовать \"{0}\"?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Вы хотели, чтобы \"{0}\" был ограничен типом \"new (...args: any[]) => {1}\"?", - "Did_you_mean_to_call_this_expression_6212": "Вы хотели вызвать это выражение?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Вы хотели пометить эту функцию как \"async\"?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Вы хотели использовать \":\"? Знак равенства \"=\" после имени свойства может указываться только в том случае, если внутренний объектный литерал является частью шаблона деструктурирования.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Вы хотели использовать \"new\" с этим выражением?", - "Digit_expected_1124": "Ожидалась цифра.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Каталога \"{0}\" не существует. Поиск в нем будет пропускаться.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Каталог \"{0}\" не имеет содержащей области package.json. Импорт не удастся разрешить.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Отключить добавление директив \"use strict\" в создаваемых файлах JavaScript.", - "Disable_checking_for_this_file_90018": "Отключите проверку для этого файла", - "Disable_emitting_comments_6688": "Отключить создаваемые комментарии.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Отключите отправку объявлений, в комментариях JSDoc которых есть \"@internal\".", - "Disable_emitting_files_from_a_compilation_6660": "Отключите создание файлов при компиляции.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Отключить создаваемый файл, если сообщается об ошибках проверки типов.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Отключите стирание объявлений \"const enum\" в сгенерированном коде.", - "Disable_error_reporting_for_unreachable_code_6603": "Отключить отчеты об ошибках для недостижимого кода.", - "Disable_error_reporting_for_unused_labels_6604": "Отключить отчеты об ошибках для неиспользуемых меток.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Отключите полную проверку типов (будут сообщаться только о критических ошибках синтаксического анализа и генерации).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Отключите создание пользовательских вспомогательных функций, таких как \"__extends\", в скомпилированных выходных данных.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Отключить включение любых файлов библиотеки, включая lib.d.ts по умолчанию.", - "Disable_loading_referenced_projects_6235": "Отключите загрузку проектов, на которые имеются ссылки.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Отключите предпочтение исходных файлов вместо файлов объявлений при обращении к составным проектам.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Отключить отправку отчетов об избыточных ошибках свойств во время создания объектных литералов.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Отключить разрешение символических ссылок на их реальный путь. Это соответствует тому же флажку в узле.", - "Disable_size_limitations_on_JavaScript_projects_6162": "Отключение ограничений на размеры в проектах JavaScript.", - "Disable_solution_searching_for_this_project_6224": "Отключите поиск решений для этого проекта.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Отключить строгую проверку универсальных сигнатур в типах функций.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Отключить получение типа для проектов JavaScript", - "Disable_truncating_types_in_error_messages_6663": "Отключить усечение типов в сообщениях об ошибках.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Отключите использование исходных файлов вместо файлов объявлений из проектов, указанных в ссылках.", - "Disable_wiping_the_console_in_watch_mode_6684": "Отключите очистку консоли в режиме просмотра.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Отключает вывод для получения типа при просмотре имен файлов в проекте.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Запретите \"import\", \"require\" или \"\" увеличивать количество файлов, которые TypeScript должен добавить в проект.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Запретить ссылки с разным регистром, указывающие на один файл.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Не добавлять ссылки с тройной косой чертой или импортированные модули в список скомпилированных файлов.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Не разрешать конструкции среды выполнения, которые не являются частью ECMAScript.", - "Do_not_emit_comments_to_output_6009": "Не создавать комментарии в выходных данных.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Не создавать объявления для кода, имеющего аннотацию \"@internal\".", - "Do_not_emit_outputs_6010": "Не создавать выходные данные.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Не выводить выходные элементы, если есть ошибки.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Не порождать директивы use strict в выходных данных модуля.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Не удалять объявления перечислений констант из сгенерированного кода.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Не создавать вспомогательные пользовательские функции, такие как __extends, в скомпилированных выходных данных.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Не включать файл библиотеки по умолчанию (lib.d.ts).", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Не сообщать об ошибках в недостижимом коде.", - "Do_not_report_errors_on_unused_labels_6074": "Не сообщать об ошибках в неиспользуемых метках.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Не разрешать реальный путь symlink.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Не преобразовывайте и не удаляйте любые операции импорта или экспорта, не помеченные как только текстовые, гарантируя, что они записаны в формате выходного файла на основе настройки \"модуль\".", - "Do_not_truncate_error_messages_6165": "Не усекать сообщения об ошибках.", - "Duplicate_function_implementation_2393": "Повторяющаяся реализация функции.", - "Duplicate_identifier_0_2300": "Повторяющийся идентификатор \"{0}\".", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня модуля.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня для асинхронных функций в модуле.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Дублированный идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" при выпуске ссылок \"super\" в статических инициализаторах.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Повторяющийся идентификатор \"{0}\". Компилятор использует объявление \"{1}\" для поддержки асинхронных функций.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Повторяющийся идентификатор \"{0}\". Статические элементы и элементы экземпляров не могут совместно использовать одно и то же частное имя.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Повторяющийся идентификатор arguments. Компилятор использует arguments для инициализации параметров \"rest\".", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Дублирующийся идентификатор \"_newTarget\". Компилятор использует объявление переменной \"_newTarget\" для получения ссылки на метасвойство \"new.target\".", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Повторяющийся идентификатор \"_this\". Компилятор использует объявление переменной \"_this\" для получения ссылки this.", - "Duplicate_index_signature_for_type_0_2374": "Повторяющаяся сигнатура индекса для типа \"{0}\".", - "Duplicate_label_0_1114": "Повторяющаяся метка \"{0}\".", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "Повторяющееся свойство \"{0}\".", - "Duplicate_regular_expression_flag_1500": "Дублирующийся флаг регулярного выражения.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Описатель динамического импорта должен иметь тип \"string\", но имеет тип \"{0}\".", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Динамический импорт поддерживается только в том случае, если для флага \"--module\" настроено значение \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" или \"nodenext\".", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Динамический импорт может принимать в качестве аргументов только спецификатор модуля и необязательный набор атрибутов.", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Динамический импорт поддерживает второй аргумент только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Импорты и экспорты ECMAScript невозможно записать в файл CommonJS в разделе \"verbatimModuleSyntax\".", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Импорты и экспорты ECMAScript невозможно записать в файл CommonJS в разделе \"verbatimModuleSyntax\". Измените поле \"type\" в ближайшем файле \"package.json\", чтобы сделать этот файл модулем ECMAScript, или настройте параметры \"verbatimModuleSyntax\", \"module\" и \"moduleResolution\" в TypeScript.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Синтаксис модуля ECMAScript не разрешен в модуле CommonJS, если для параметра \"module\" установлено значение \"preserve\".", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Каждое объявление '{0}.{1}' отличается по своему значению: ожидалось ' {2} ', но было задано ' {3} '.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Каждый член типа объединения \"{0}\" имеет сигнатуры конструкций, но ни одна из их не совместима с другими.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Каждый член типа объединения \"{0}\" имеет сигнатуры, но ни одна из их не совместима с другими.", - "Editor_Support_6249": "Поддержка редактора", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Элемент неявно имеет тип \"any\", так как выражение типа \"{0}\" не может использоваться для индексации типа \"{1}\".", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Элемент неявно содержит тип any, так как выражение индекса не имеет тип number.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Элемент неявно имеет тип any, так как тип \"{0}\" не содержит сигнатуру индекса.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Элемент неявно имеет тип \"any\", так как тип \"{0}\" не содержит сигнатуру индекса. Возможно, вы хотели вызвать \"{1}\"?", - "Emit_6246": "Вывести", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "Создавать поля класса, соответствующие стандарту ECMAScript.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Порождать метку порядка байтов UTF-8 в начале выходных файлов.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Порождать один файл с сопоставлениями источников, а не создавать отдельный файл.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Вывести профиль ЦП v8 для запуска компилятора для отладки.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Создайте дополнительный файл JavaScript, чтобы упростить поддержку импорта модулей CommonJS. Это включает \"allowSyntheticDefaultImports\" для совместимости типов.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Выведите поля классов с Define вместо Set.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Выдавать метаданные типа \"Конструктор\" для декорированных объявлений в исходных файлах.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Создать более совместимый, но подробный и менее производительный файл JavaScript для итерации.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Порождать источник вместе с сопоставителями с исходным кодом в одном файле (нужно задать параметр --inlineSourceMap или --sourceMap).", - "Enable_all_strict_type_checking_options_6180": "Включить все параметры строгой проверки типов.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Включите цвет и форматирование в выводе TypeScript, чтобы ошибки компилятора легче читались.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Включить ограничения, позволяющие использовать проект TypeScript со ссылками проекта.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Включить отчеты об ошибках для кодовых путей, которые не возвращаются в функции явным образом.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Включите отчеты об ошибках в выражениях и объявлениях с подразумеваемым типом \"any\".", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Включить отчет об ошибках для случаев сбоя в операторах switch.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Включить отчеты об ошибках в файлах JavaScript с проверкой типа.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Включите отчеты об ошибках, если локальные переменные не считываются.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Включите отчеты об ошибках, если параметр \"this\" имеет тип \"any\".", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Включите экспериментальную поддержку устаревших экспериментальных декораторов.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Разрешить импорт файлов с любым расширением при наличии файла декларации.", - "Enable_importing_json_files_6689": "Включите импорт файлов JSON.", - "Enable_lib_replacement_6808": "Включить замену библиотеки.", - "Enable_project_compilation_6302": "Включить компиляцию проекта", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Включите строгие методы \"bind\", \"call\" и \"apply\" для функций.", - "Enable_strict_checking_of_function_types_6186": "Включение строгой проверки типов функций.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Включение строгой проверки инициализации свойств в классах.", - "Enable_strict_null_checks_6113": "Включить строгие проверки NULL.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Включите параметр \"experimentalDecorators\" в файле конфигурации", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Включите флаг \"--jsx\" в файле конфигурации", - "Enable_tracing_of_the_name_resolution_process_6085": "Включить трассировку процесса разрешения имен.", - "Enable_verbose_logging_6713": "Включите подробное ведение журнала.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Позволяет обеспечивать взаимодействие между модулями CommonJS и ES посредством создания объектов пространства имен для всех импортов. Подразумевает \"allowSyntheticDefaultImports\".", - "Enables_experimental_support_for_ES7_decorators_6065": "Включает экспериментальную поддержку для декораторов ES7.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Включает экспериментальную поддержку для создания метаданных типа для декораторов.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Принудительно использует индексированные методы доступа для ключей, объявленных с помощью индексированного типа.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Убедитесь, что переопределяемые элементы в производных классах помечены модификатором переопределения.", - "Ensure_that_casing_is_correct_in_imports_6637": "Убедитесь, что при импорте используется правильный регистр.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Убедитесь, что каждый файл можно безопасно перенести, не полагаясь на другой импорт.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "Убедитесь, что всегда используется \"use strict\".", - "Entering_conditional_exports_6413": "Ввод условного экспорта.", - "Entry_point_for_implicit_type_library_0_1420": "Точка входа для библиотеки неявных типов \"{0}\"", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Точка входа для библиотеки неявных типов \"{0}\" с идентификатором пакета \"{1}\"", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Точка входа для библиотеки типов \"{0}\", указанная в compilerOptions", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Точка входа для библиотеки типов \"{0}\" с идентификатором пакета \"{1}\", указанная в compilerOptions", - "Enum_0_used_before_its_declaration_2450": "Перечисление \"{0}\" использовано прежде, чем объявлено.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Объявления перечислений можно объединять только с пространствами имен или другими объявлениями перечислений.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Все объявления перечислений должны иметь значение const или отличное от const.", - "Enum_member_expected_1132": "Ожидался элемент перечисления.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Член перечисления, следующий за небуквенным числовым элементом, должен иметь инициализатор, если включена опция \"isolatedModules\".", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Инициализаторы членов перечисления должны быть вычислимыми без ссылок на внешние символы с помощью --isolatedDeclarations.", - "Enum_member_must_have_initializer_1061": "У элемента перечисления должен быть инициализатор.", - "Enum_name_cannot_be_0_2431": "Имя перечисления не может иметь значение \"{0}\".", - "Environment_Settings_6285": "Параметры среды", - "Errors_Files_6041": "Файлы ошибок", - "Escape_sequence_0_is_not_allowed_1488": "Escape-последовательность ' {0} ' не разрешена.", - "Examples_Colon_0_6026": "Примеры: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "Чрезмерная сложность сравнения типов ' {0} ' и ' {1} '.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Чрезмерная глубина стека при сравнении типов \"{0}\" и \"{1}\".", - "Exiting_conditional_exports_6416": "Выход из условного экспорта.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Ожидается аргументов типа: {0}–{1}. Укажите их с тегом \"@extends\".", - "Expected_0_arguments_but_got_1_2554": "Ожидалось аргументов: {0}, получено: {1}.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Ожидаемое число аргументов — {0}, фактическое — {1}. Возможно, вы забыли указать void в аргументе типа в Promise?", - "Expected_0_type_arguments_but_got_1_2558": "Ожидались аргументы типа {0}, получены: {1}.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Ожидается аргументов типа: {0}. Укажите их с тегом \"@extends\".", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Ожидался 1 аргумент, получено 0. Для \"new Promise()\" требуется указание JSDoc, чтобы создать \"resolve\" с возможностью вызова без аргументов.", - "Expected_a_Unicode_property_name_1523": "Ожидается имя свойства в Юникоде.", - "Expected_a_Unicode_property_name_or_value_1527": "Ожидается имя или значение свойства в Юникоде.", - "Expected_a_Unicode_property_value_1525": "Ожидается значение свойства Unicode.", - "Expected_a_capturing_group_name_1514": "Ожидается имя группы захвата.", - "Expected_a_class_set_operand_1520": "Ожидается операнд набора классов.", - "Expected_at_least_0_arguments_but_got_1_2555": "Ожидалось аргументов не меньше: {0}, получено: {1}.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "Ожидался соответствующий закрывающий тег JSX для \"{0}\".", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Ожидался соответствующий закрывающий тег фрагмента JSX.", - "Expected_for_property_initializer_1442": "Требуется \"=\" для инициализатора свойства.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Ожидаемый тип поля \"{0}\" в \"package.json\" должен быть \"{1}\", получен \"{2}\".", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Явно указанный тип разрешения модуля: \"{0}\".", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Невозможно выполнить возведение в степень для значений \"bigint\", если для параметра \"target\" не задана версия \"es2016\" или более поздняя версия.", - "Export_0_from_module_1_90059": "Экспорт \"{0}\" из модуля \"{1}\"", - "Export_all_referenced_locals_90060": "Экспортировать все локальные объекты, на которые указывают ссылки", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Назначение экспорта невозможно использовать при разработке для модулей ECMAScript. Попробуйте использовать \"export default\" или другой формат модуля.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Назначение экспорта не поддерживается, если флаг \"--module\" имеет значение \"system\".", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Объявление экспорта конфликтует с экспортированным объявлением \"{0}\".", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Объявления экспорта не разрешены в пространстве имен.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Описатель экспорта \"{0}\" не существует в области package.json по пути \"{1}\".", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Экспортированный псевдоним типа \"{0}\" имеет или использует закрытое имя \"{1}\".", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Экспортированный псевдоним типа \"{0}\" имеет или использует частное имя \"{1}\" из модуля \"{2}\".", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именована.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "Экспортированная переменная \"{0}\" имеет или использует закрытое имя \"{1}\".", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Экспорт и назначения экспорта не разрешены в улучшениях модуля.", - "Expression_expected_1109": "Ожидалось выражение.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Выражение должно быть заключено в круглые скобки, чтобы его можно было использовать в качестве декоратора.", - "Expression_or_comma_expected_1137": "Ожидалось выражение или запятая.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Выражение создает тип кортежа, который слишком большой для представления.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Выражение создает тип объединения, который слишком сложен для представления.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Разрешение выражения дает идентификатор \"_super\", который используется компилятором для получения ссылки на базовый класс.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Выражение разрешается в объявление переменной \"_newTarget\", которое компилятор использует для получения ссылки на метасвойство \"new.target\".", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Разрешение выражения дает объявление переменной \"_this\", которое используется компилятором для получения ссылки this.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Тип выражения не может быть выведен с помощью --isolatedDeclarations.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Предложение Extends не может содержать выражение с --isolatedDeclarations.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Предложение extends для выведенного типа \" {0} \" имеет или использует частное имя \" {1} \".", - "Extract_base_class_to_variable_90064": "Извлечь базовый класс в переменную", - "Extract_binding_expressions_to_variable_90066": "Извлечь выражения привязки в переменную", - "Extract_constant_95006": "Извлечь константу", - "Extract_default_export_to_variable_90065": "Извлечение экспорта по умолчанию в переменную", - "Extract_function_95005": "Извлечь функцию", - "Extract_to_0_in_1_95004": "Извлечь в {0} в {1}", - "Extract_to_0_in_1_scope_95008": "Извлечь в {0} в области {1}", - "Extract_to_0_in_enclosing_scope_95007": "Извлечь в {0} во включающей области", - "Extract_to_interface_95090": "Извлечь в интерфейс", - "Extract_to_type_alias_95078": "Извлечь в псевдоним типа", - "Extract_to_typedef_95079": "Извлечь в typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Извлечь в переменную и заменить на \"{0} как typeof {0}\"", - "Extract_type_95077": "Тип Extract", - "FILE_6035": "ФАЙЛ", - "FILE_OR_DIRECTORY_6040": "Файл или каталог", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "Не удалось найти peerDependency \"{0}\".", - "Failed_to_resolve_under_condition_0_6415": "Не удалось разрешить при условии \"{0}\".", - "Fallthrough_case_in_switch_7029": "Случай передачи управления в операторе switch.", - "File_0_does_not_exist_6096": "Файл \"{0}\" не существует.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Согласно ранее кэшированным поискам, файл \"{0}\" не существует.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "Согласно ранее кэшированным поискам, файл \"{0}\" существует.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "Файл \"{0}\" существует — используйте его как результат разрешения имени.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Файл \"{0}\" имеет неподдерживаемое расширение. Поддерживаются только следующие расширения: {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" является файлом JavaScript. Вы хотели включить параметр \"allowJs\"?", - "File_0_is_not_a_module_2306": "Файл \"{0}\" не является модулем.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Файл \"{0}\" отсутствует в списке файлов проекта \"{1}\". Проекты должны перечислять все файлы или использовать шаблон включения.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Файл \"{0}\" отсутствует в \"rootDir\" \"{1}\". Все исходные файлы должны находиться в каталоге \"rootDir\".", - "File_0_not_found_6053": "Файл \"{0}\" не найден.", - "File_Layout_6284": "Макет файла", - "File_Management_6245": "Управление файлами", - "File_appears_to_be_binary_1490": "Файл выглядит двоичным.", - "File_change_detected_Starting_incremental_compilation_6032": "Обнаружено изменение в файле. Запускается инкрементная компиляция...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Файл является модулем CommonJS, так как \"{0}\" не содержит поле \"type\"", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Файл является модулем CommonJS, так как \"{0}\" содержит поле \"type\", значение которого отличается от \"module\"", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Файл является модулем CommonJS, так как \"package.json\" не найден", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Файл является модулем ECMAScript, так как \"{0}\" содержит поле \"type\" со значением \"module\"", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Файл является модулем CommonJS. Его можно преобразовать в модуль ES.", - "File_is_default_library_for_target_specified_here_1426": "Файл является библиотекой по умолчанию для указанного здесь целевого объекта.", - "File_is_entry_point_of_type_library_specified_here_1419": "Файл является точкой входа для указанной здесь библиотеки типов.", - "File_is_included_via_import_here_1399": "Файл включается с помощью импорта.", - "File_is_included_via_library_reference_here_1406": "Файл включается с помощью ссылки на библиотеку.", - "File_is_included_via_reference_here_1401": "Файл включается с помощью ссылки.", - "File_is_included_via_type_library_reference_here_1404": "Файл включается с помощью ссылки на библиотеку типов.", - "File_is_library_specified_here_1423": "Файл представляет собой указанную здесь библиотеку.", - "File_is_matched_by_files_list_specified_here_1410": "Файл соответствует указанному здесь списку \"files\".", - "File_is_matched_by_include_pattern_specified_here_1408": "Файл соответствует указанному здесь шаблону включения.", - "File_is_output_from_referenced_project_specified_here_1413": "Файл представляет собой выходные данные для указанного здесь проекта, на который указывает ссылка.", - "File_is_output_of_project_reference_source_0_1428": "Файл представляет собой выходные данные для источника ссылки на проект \"{0}\"", - "File_is_source_from_referenced_project_specified_here_1416": "Файл представляет собой источник для указанного здесь проекта, на который указывает ссылка.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Файл с именем \"{0}\" отличается от уже включенного файла с именем \"{1}\" только регистром.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Имя файла \"{0}\" имеет расширение \"{1}\" — поиск \"{2}\".", - "File_name_0_has_a_1_extension_stripping_it_6132": "У имени файла \"{0}\" есть расширение \"{1}\"; расширение удаляется.", - "File_redirects_to_file_0_1429": "Файл перенаправляется в файл \"{0}\"", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Спецификация файла не может содержать родительский каталог (\"..\"), который указывается после рекурсивного подстановочного знака каталога (\"**\"): \"{0}\".", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Спецификация файла не может заканчиваться рекурсивным подстановочным знаком каталога (\"**\"): \"{0}\".", - "Filters_results_from_the_include_option_6627": "Фильтрует результаты в параметре \"включить\".", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Исправить все обнаруженные синтаксические ошибки", - "Fix_all_expressions_possibly_missing_await_95085": "Исправить все выражения, где может отсутствовать \"await\"", - "Fix_all_implicit_this_errors_95107": "Исправить все ошибки неявного this", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Исправьте все неправильные возвращаемые типы асинхронных функций.", - "Fix_all_with_type_only_imports_95182": "Исправить все с помощью импорта только по типу", - "For_nodejs_Colon_6287": "Для nodejs:", - "Found_0_errors_6217": "Найдено ошибок: {0}.", - "Found_0_errors_Watching_for_file_changes_6194": "Найдено ошибок: {0}. Отслеживаются изменения в файлах.", - "Found_0_errors_in_1_files_6261": "Обнаружены ошибки ({0}) в файлах ({1}).", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Обнаружены {0} ошибки в этом же файле, начиная с: {1}", - "Found_1_error_6216": "Найдено ошибок: 1.", - "Found_1_error_Watching_for_file_changes_6193": "Найдена одна ошибка. Отслеживаются изменения в файлах.", - "Found_1_error_in_0_6259": "Обнаружена 1 ошибка в {0}", - "Found_package_json_at_0_6099": "Обнаружен package.json в \"{0}\".", - "Found_peerDependency_0_with_1_version_6282": "Обнаружена peerDependency \"{0}\" с версией \"{1}\".", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\".", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Определения класса автоматически появляются в строгом режиме.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Модули автоматически появляются в строгом режиме.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Выражение функции, у которого нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Реализация функции отсутствует либо не идет сразу после объявления.", - "Function_implementation_name_must_be_0_2389": "Имя реализации функции должно иметь значение \"{0}\".", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Функция неявно имеет тип возвращаемого значения any, так как у нее нет заметки с типом возвращаемого значения, а также на нее прямо или косвенно указывает ссылка в одном из ее выражений \"return\".", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "В функции отсутствует завершающий оператор return, а тип возвращаемого значения не включает \"undefined\".", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Функция должна иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", - "Function_not_implemented_95159": "Функция не реализована.", - "Function_overload_must_be_static_2387": "Перегрузка функции должна быть статической.", - "Function_overload_must_not_be_static_2388": "Перегрузка функции не должна быть статической.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "При использовании в типе объединения нотация типа функции должна быть заключена в круглые скобки.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "При использовании в типе пересечения нотация типа функции должна быть заключена в круглые скобки.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Тип функции, у которого нет заметки с типом возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Функция с телом может объединяться только с классами, которые являются внешними.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Создание D.ts-файлов из файлов TypeScript и JavaScript в проекте.", - "Generate_get_and_set_accessors_95046": "Создать методы доступа get и set", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Создать методы доступа get и set для всех переопределяемых свойств", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Создает профиль ЦП.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Создает сопоставитель с исходным кодом для каждого соответствующего файла \".d.ts\".", - "Generates_an_event_trace_and_a_list_of_types_6237": "Создает трассировку событий и список типов.", - "Generates_corresponding_d_ts_file_6002": "Создает соответствующий D.TS-файл.", - "Generates_corresponding_map_file_6043": "Создает соответствующий файл с расширением \".map\".", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Генератор неявно имеет тип ресурса \"{0}\". Рекомендуется предоставить аннотацию возвращаемого типа.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Генераторы не разрешается использовать в окружающем контексте.", - "Generic_type_0_requires_1_type_argument_s_2314": "Универсальный тип \"{0}\" требует следующее число аргументов типа: {1}.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Универсальный тип \"{0}\" требует аргументы типа от {1} до {2}.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Глобальные операции экспорта модуля могут появиться только на верхнем уровне.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Глобальные операции экспорта модуля могут появиться только в файлах объявления.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Глобальные операции экспорта модуля могут появиться только в файлах модуля.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "Глобальный тип \"{0}\" должен быть классом или интерфейсом.", - "Global_type_0_must_have_1_type_parameter_s_2317": "Глобальный тип \"{0}\" должен иметь следующее число параметров типа: {1}.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Сделайте так, чтобы повторные компиляции в \"--incremental\" и \"--watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Сделайте так, чтобы повторные компиляции в проектах, в которых используются режимы \"incremental\" и \"watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.", - "Hexadecimal_digit_expected_1125": "Ожидалась шестнадцатеричная цифра.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Требуется идентификатор. \"{0}\" является зарезервированным словом на верхнем уровне модуля.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме. Определения классов автоматически находятся в строгом режиме.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме. Модули автоматически находятся в строгом режиме.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Ожидается идентификатор. \"{0}\" — это зарезервированное слово, которое не может быть использовано здесь.", - "Identifier_expected_1003": "Ожидался идентификатор.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Ожидался идентификатор. Значение \"__esModule\" зарезервировано как экспортируемый маркер при преобразовании модулей ECMAScript.", - "Identifier_or_string_literal_expected_1478": "Ожидался идентификатор или строковый литерал.", - "Identifier_string_literal_or_number_literal_expected_1496": "Ожидается идентификатор, строковый или числовой литерал.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Если пакет \"{0}\" фактически предоставляет этот модуль, рекомендуется отправить запрос на вытягивание, чтобы изменить \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Если пакет \"{0}\" действительно предоставляет этот модуль, попробуйте добавить новый файл объявления (. d. TS), содержащий \"declare module\" \"{1}\";`", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", - "Ignore_this_error_message_90019": "Пропустите это сообщение об ошибке", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Пропускает tsconfig.json, компилирует указанные файлы с параметрами компилятора по умолчанию", - "Implement_all_inherited_abstract_classes_95040": "Реализовать все унаследованные абстрактные классы", - "Implement_all_unimplemented_interfaces_95032": "Реализовать все нереализованные интерфейсы", - "Implement_inherited_abstract_class_90007": "Реализуйте наследуемый абстрактный класс", - "Implement_interface_0_90006": "Реализуйте интерфейс \"{0}\"", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Предложение Implements экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Неявное преобразование \"symbol\" в \"string\" приведет к сбою во время выполнения. Рекомендуется заключить это выражение в \"String(...)\".", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Импорт \"{0}\" конфликтует с глобальным значением, используемым в этом файле, поэтому его необходимо объявить с импортом только по типу, когда включен \"isolatedModules\".", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Импорт \"{0}\" конфликтует с локальным значением, поэтому его необходимо объявить с импортом только по типу, если включен \"isolatedModules\".", - "Import_0_from_1_90013": "Импорт \"{0}\" из \"{1}\"", - "Import_assertion_values_must_be_string_literal_expressions_2837": "Значения утверждения импорта должны быть выражениями строковых литералов.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Утверждения импорта не допускаются для операторов, которые компилируются в вызовы \"require\" CommonJS.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Утверждения импорта поддерживаются только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Утверждения импорта не могут использоваться с импортом или экспортом, затрагивающими только тип.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Утверждения импорта заменены атрибутами импорта. Используйте \"with\" вместо \"assert\".", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Назначение импорта невозможно использовать при разработке для модулей ECMAScript. Попробуйте использовать \"import * as ns from \"mod\", \"import {a} from \"mod\", \"import d from \"mod\" или другой формат модуля.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "Значения атрибутов импорта должны быть строковыми литеральными выражениями.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Атрибуты импорта не разрешены в операторах, которые компилируются в вызовы \"require\" CommonJS.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Атрибуты импорта поддерживаются только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Атрибуты импорта нельзя использовать с импортом или экспортом только по типу.", - "Import_declaration_0_is_using_private_name_1_4000": "Объявление импорта \"{0}\" использует закрытое имя \"{1}\".", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Объявление импорта конфликтует с локальным объявлением \"{0}\".", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Объявления импорта в пространстве имен не могут иметь ссылки на модуль.", - "Import_emit_helpers_from_tslib_6139": "Импорт вспомогательных объектов, участвующих в порождении, из \"tslib\".", - "Import_may_be_converted_to_a_default_import_80003": "Импорт можно преобразовать в импорт по умолчанию.", - "Import_name_cannot_be_0_2438": "Имя импорта не может иметь значение \"{0}\".", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Объявление импорта или экспорта во объявлении окружающего модуля не может иметь ссылки на модуль через относительное имя модуля.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Описатель импорта \"{0}\" не существует в области package.json по пути \"{1}\".", - "Imported_via_0_from_file_1_1393": "Импортировано с помощью {0} из файла \"{1}\".", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Импортировано с помощью {0} из файла \"{1}\" для импорта \"importHelpers\", как указано в compilerOptions.", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Импортировано с помощью {0} из файла \"{1}\" для импорта функций фабрики \"jsx\" и \"jsxs\".", - "Imported_via_0_from_file_1_with_packageId_2_1394": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\".", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта \"importHelpers\", как указано в compilerOptions.", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта функций фабрики \"jsx\" и \"jsxs\".", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Для импорта JSON-файла в модуль ECMAScript требуется атрибут импорта \"type: json\", если для \"module\" задано значение \"{0}\".", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Операции импорта запрещены в улучшениях модуля. Попробуйте переместить их в содержащий внешний модуль.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Во внешних объявлениях перечислений инициализатор элемента должен быть константным выражением.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "В перечислении с несколькими объявлениями только одно объявление может опустить инициализатор для своего первого элемента перечисления.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Включить список файлов. Не поддерживает шаблоны стандартной маски, в отличие от \"include\".", - "Include_modules_imported_with_json_extension_6197": "Включать модули, импортированные с расширением .json", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Включить исходный код в исходные карты в создаваемом файле JavaScript.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Включить файлы исходных карт в создаваемый код JavaScript.", - "Includes_imports_of_types_referenced_by_0_90054": "Включает импорт типов, на которые ссылается \"{0}\"", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "При включении --watch, -w начнет отслеживание изменений файла в текущем проекте. После установки можно настроить режим просмотра с помощью:", - "Incomplete_quantifier_Digit_expected_1505": "Неполный квантификатор. Ожидалась цифра.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "В типе \"{1}\" отсутствует сигнатура индекса для типа \"{0}\".", - "Index_signature_in_type_0_only_permits_reading_2542": "Сигнатура индекса в типе \"{0}\" разрешает только чтение.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Все отдельные объявления в объединенном объявлении \"{0}\" должны быть экспортированными или локальными.", - "Infer_all_types_from_usage_95023": "Вывести все типы исходя из использования", - "Infer_function_return_type_95148": "Вывод типа возвращаемого значения функции", - "Infer_parameter_types_from_usage_95012": "Выведите типы параметров на основании их использования", - "Infer_this_type_of_0_from_usage_95080": "Определить тип \"this\" для \"{0}\" из использования", - "Infer_type_of_0_from_usage_95011": "Выведите тип \"{0}\" на основании его использования", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Вывод из выражений класса не поддерживается с использованием --isolatedDeclarations.", - "Initialize_property_0_in_the_constructor_90020": "Инициализируйте свойство \"{0}\" в конструкторе", - "Initialize_static_property_0_90021": "Инициализируйте статическое свойство \"{0}\"", - "Initializer_for_property_0_2811": "Инициализатор для свойства \"{0}\"", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Инициализаторы не разрешены в окружающих контекстах.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Инициализирует проект TypeScript и создает файл \"tsconfig.json\".", - "Inline_variable_95184": "Встроенная переменная", - "Insert_command_line_options_and_files_from_a_file_6030": "Вставка параметров командной строки и файлов из файла.", - "Install_0_95014": "Установить \"{0}\"", - "Install_all_missing_types_packages_95033": "Установить все отсутствующие пакеты типов", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Интерфейс \"{0}\" не может одновременно расширить типы \"{1}\" и \"{2}\".", - "Interface_0_incorrectly_extends_interface_1_2430": "Интерфейс \"{0}\" неправильно расширяет интерфейс \"{1}\".", - "Interface_declaration_cannot_have_implements_clause_1176": "Объявление интерфейса не может иметь предложение implements.", - "Interface_must_be_given_a_name_1438": "Интерфейсу должно быть присвоено имя.", - "Interface_name_cannot_be_0_2427": "Имя интерфейса не может иметь значение \"{0}\".", - "Interop_Constraints_6252": "Ограничения взаимодействия", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Интерпретируйте необязательные типы свойств так, как они написаны, а не добавляйте неопределенное значение.", - "Invalid_character_1127": "Недопустимый символ.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Недопустимый описатель импорта \"{0}\" не имеет возможных разрешений.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Недопустимое имя модуля в приращении. Модуль \"{0}\" разрешается в модуль без типа в \"{1}\", который невозможно дополнить.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Недопустимое имя модуля в улучшении, не удается найти модуль \"{0}\".", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Недопустимая необязательная цепочка из нового выражения. Вы хотели вызвать ''{0}()''?", - "Invalid_reference_directive_syntax_1084": "Недопустимый синтаксис директивы reference.", - "Invalid_syntax_in_decorator_1498": "Недопустимый синтаксис в декораторе.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Недопустимое использование \"{0}\". Его нельзя использовать внутри статического блока класса.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Недопустимое использование \"{0}\". Модули автоматически находятся в строгом режиме.", - "Invalid_use_of_0_in_strict_mode_1100": "Недопустимое использование \"{0}\" в строгом режиме.", - "Invalid_value_for_ignoreDeprecations_5103": "Недопустимое значение для \"--ignoreDeprecations\".", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Недопустимое значение для jsxFactory. \"{0}\" не является допустимым идентификатором или полным именем.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Недопустимое значение \"jsxFragmentFactory\". \"{0}\" не является допустимым идентификатором или полным именем.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Недопустимое значение для \"--reactNamespace\". \"{0}\" не является допустимым идентификатором.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Вероятно, не хватает запятой, разделяющей эти два выражения шаблона. Они формируют выражение шаблона с тегами, которое не может быть вызвано.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Тип элемента \"{0}\" не является допустимым элементом JSX.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Тип экземпляра \"{0}\" не является допустимым элементом JSX.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Тип возвращаемого значения \"{0}\" не является допустимым элементом JSX.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Его тип \"{0}\" не является допустимым типом элемента JSX.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Параметр \"@{0} {1}\" JSDoc не соответствует предложению \"extends {2}\".", - "JSDoc_0_is_not_attached_to_a_class_8022": "Параметр \"@{0}\" JSDoc не связан с классом.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" может использоваться только в последнем параметре сигнатуры.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "У тега \"@param\" JSDoc есть имя \"{0}\", но параметр с таким именем отсутствует.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Тег \"@param\" JSDoc имеет имя \"{0}\", но параметра с таким именем не существует. Он совпадал бы с \"arguments\", если бы у него был указан тип массива.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc можно преобразовать в тип TypeScript.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "У тега \"@typedef\" JSDoc должна быть аннотация типа, или после него должны стоять теги \"@property\" или \"@member\".", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Определения типов JSDoc можно преобразовать в типы TypeScript.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Типы JSDoc можно использовать только в комментариях в документации.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Типы JSDoc могут быть преобразованы в типы TypeScript.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Атрибутам JSX должно назначаться только непустое \"expression\".", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "Элемент JSX \"{0}\" не содержит соответствующий закрывающий тег.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Класс элементов JSX не поддерживает атрибуты, так как не имеет свойства \"{0}\".", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Элемент JSX неявно имеет тип \"any\", так как интерфейс \"JSX.{0}\" не существует.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Элемент JSX неявно имеет тип any, так как глобальный тип \"JSX.Element\" не существует.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Тип элемента JSX \"{0}\" не имеет конструкций или сигнатур вызова.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Элементы JSX не могут иметь несколько атрибутов с одним именем.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Выражения JSX не могут использовать оператор \"запятая\". Возможно, вы хотели выполнить запись в массив?", - "JSX_expressions_must_have_one_parent_element_2657": "Выражения JSX должны иметь один родительский элемент.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "Фрагмент JSX не имеет соответствующего закрывающего тега.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Выражения доступа к свойствам JSX не могут содержать имена пространств имен JSX", - "JSX_spread_child_must_be_an_array_type_2609": "Дочерний объект расширения JSX должен иметь тип массива.", - "JavaScript_Support_6247": "Поддержка JavaScript", - "Jump_target_cannot_cross_function_boundary_1107": "Целевой объект перехода не может находиться за границей функции.", - "KIND_6034": "ВИД", - "Keywords_cannot_contain_escape_characters_1260": "Ключевые слова не могут содержать escape-символы.", - "LOCATION_6037": "РАСПОЛОЖЕНИЕ", - "Language_and_Environment_6254": "Язык и среда", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Сторона оператора слева от запятой не используется и не имеет побочных эффектов.", - "Library_0_specified_in_compilerOptions_1422": "Библиотека \"{0}\", указанная в compilerOptions", - "Library_referenced_via_0_from_file_1_1405": "Библиотека, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"", - "Line_break_not_permitted_here_1142": "Здесь запрещено использовать разрыв строки.", - "Line_terminator_not_permitted_before_arrow_1200": "Перед стрелкой запрещен символ завершения строки.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Список суффиксов имен файлов для поиска при разрешении модуля.", - "List_of_folders_to_include_type_definitions_from_6161": "Список папок, определения типов из которых будут включены.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Список корневых папок, объединенное содержимое которых представляет структуру проекта во время выполнения.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Загружается \"{0}\" из корневого каталога \"{1}\"; расположение кандидата: \"{2}\".", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Загрузка модуля \"{0}\" из папки \"node_modules\", типы целевых файлов: {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Загрузка модуля как файла или папки, расположение модуля-кандидата \"{0}\", целевые типы файлов: {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "Пути к журналу, используемые в процессе \"moduleResolution\".", - "Longest_matching_prefix_for_0_is_1_6108": "Самый длинный соответствующий префикс для \"{0}\": \"{1}\".", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "Поиск в папке node_modules; первоначальное расположение: \"{0}\".", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Сделать все вызовы \"super()\" первой инструкцией в конструкторе", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Сделать так, чтобы keyof возвращал только строки, а не строки, числа или символы. Устаревший вариант.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Сделайте вызов \"super()\" первой инструкцией в конструкторе", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Сопоставленный объект неявно имеет тип шаблона \"любой\".", - "Mark_array_literal_as_const_90070": "Пометить литерал массива как константу", - "Matched_0_condition_1_6403": "Соответствие: \"{0}\", условие: \"{1}\".", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Сопоставление по умолчанию включает шаблон '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "Соответствует шаблону включения \"{0}\" в \"{1}\".", - "Member_0_implicitly_has_an_1_type_7008": "Элемент \"{0}\" неявно имеет тип \"{1}\".", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Член \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", - "Merge_conflict_marker_encountered_1185": "Встретилась отметка о конфликте слияния.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Объединенное объявление \"{0}\" не может включать объявление экспорта по умолчанию. Рекомендуется добавить вместо него отдельное объявление \"export default {0}\".", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Метасвойство \"{0}\" разрешено только в тексте объявления функции, выражения функции или конструктора.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Метод \"{0}\" не может иметь реализацию, так как он отмечен в качестве абстрактного.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Метод \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Метод \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Метод должен иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", - "Method_not_implemented_95158": "Метод не реализован.", - "Modifiers_cannot_appear_here_1184": "Здесь невозможно использовать модификаторы.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Модуль \"{0}\" можно только импортировать по умолчанию с помощью флага \"{1}\"", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Не удается импортировать модуль \"{0}\" с помощью этой конструкции. Описатель разрешается только в модуль ES, который нельзя импортировать с помощью \"require\". Вместо этого используйте импорт ECMAScript.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Модуль \"{0}\" объявляет \"{1}\" локально, но он экспортируется как \"{2}\".", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Модуль \"{0}\" объявляет \"{1}\" локально, но он не экспортируется.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Модуль \"{0}\" не ссылается на тип, но используется здесь как тип. Возможно, вы хотели использовать \"typeof import('{0}')\"?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Модуль \"{0}\" не ссылается на значение, но используется здесь как значение.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Модуль {0} уже экспортировал элемент с именем \"{1}\". Попробуйте явно повторно экспортировать его, чтобы устранить неоднозначность.", - "Module_0_has_no_default_export_1192": "У модуля \"{0}\" нет экспорта по умолчанию.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "В модуле \"{0}\" нет экспорта по умолчанию. Возможно, вы хотели вместо этого использовать \"import { {1} } from {0}\"?", - "Module_0_has_no_exported_member_1_2305": "Модуль \"{0}\" не имеет экспортированного элемента \"{1}\".", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "В модуле \"{0}\" нет экспортированного члена \"{1}\". Возможно, вы хотели вместо этого использовать \"import {1} from {0}\"?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Модуль \"{0}\" скрыт локальным объявлением с таким же именем.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Модуль \"{0}\" использует параметр \"export =\" и не может использоваться с параметром \"export *\".", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Модуль \"{0}\" был разрешен как локально объявленный окружающий модуль в файле \"{1}\".", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Модуль \"{0}\" разрешен в \"{1}\", но \"--allowArbitraryExtensions\" не установлен.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--jsx\" не задан.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--resolveJsonModule\" не используется.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Имена объявлений модулей могут использовать только строки в кавычках «» или \"\".", - "Module_name_0_matched_pattern_1_6092": "Имя модуля \"{0}\", соответствующий шаблон \"{1}\".", - "Module_name_0_was_not_resolved_6090": "======== Имя модуля \"{0}\" не было разрешено. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\". ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\" с идентификатором пакета \"{2}\". ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Тип разрешения модуля не указан, используется \"{0}\".", - "Module_resolution_using_rootDirs_has_failed_6111": "Произошел сбой при разрешении модуля с помощью \"rootDirs\".", - "Modules_6244": "Модули", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Переместить модификаторы элементов маркированного кортежа в метки", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Переместите выражение из экспорта по умолчанию в переменную и добавьте к нему аннотацию типа.", - "Move_to_a_new_file_95049": "Переместить в новый файл", - "Move_to_file_95178": "Переместить в файл", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Использовать несколько последовательных числовых разделителей запрещено.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Не разрешается использование нескольких реализаций конструкторов.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "НОВАЯ СТРОКА", - "Name_is_not_valid_95136": "Недопустимое имя", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Именованные группы захвата доступны только при настройке \"ES2018\" или более поздней версии.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Именованные группы захвата с одинаковым именем должны быть взаимоисключающими.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Именованные импорты не разрешены в отложенном импорте.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Именованный импорт из файла JSON в модуль ECMAScript не допускается, если для параметра \"module\" установлено значение \"{0}\".", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Именованное свойство \"{0}\" содержит типы \"{1}\" и \"{2}\", которые не являются идентичными.", - "Namespace_0_has_no_exported_member_1_2694": "Пространство имен \"{0}\" не содержит экспортированный элемент \"{1}\".", - "Namespace_must_be_given_a_name_1437": "Пространству имен должно быть задано имя.", - "Namespace_name_cannot_be_0_2819": "Имя пространства имен не может быть \"{0}\".", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Пространства имен не допускаются в глобальных файлах сценариев, если включено \"{0}\". Если этот файл не предназначен для использования в качестве глобального сценария, установите для параметра \"moduleDetection\" значение \"force\" или добавьте пустой оператор \"export {}\".", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "К параметрам \"this\" нельзя применять декораторы и модификаторы.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Ни один конструктор базового класса не имеет указанного числа аргументов типа.", - "No_constituent_of_type_0_is_callable_2755": "Нет составляющей типа \"{0}\", которую можно вызвать.", - "No_constituent_of_type_0_is_constructable_2759": "Нет составляющей типа \"{0}\", которую можно создать.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "В типе \"{1}\" не обнаружена сигнатура индекса с параметром типа \"{0}\".", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Не удалось найти входные данные в файле конфигурации \"{0}\". Указанные пути \"include\": \"{1}\", пути \"exclude\": \"{2}\".", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Больше не поддерживается. В ранних версиях кодирование текста устанавливалось вручную для чтения файлов.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ни одна перегрузка не ожидает аргументы {0}, но существуют перегрузки, которые ожидают аргументы {1} или {2}.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ни одна перегрузка не ожидает аргументы типа {0}, но существуют перегрузки, которые ожидают аргументы типа {1} или {2}.", - "No_overload_matches_this_call_2769": "Ни одна перегрузка не соответствует этому вызову.", - "No_type_could_be_extracted_from_this_type_node_95134": "Не удалось извлечь тип из этого узла типа.", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Не существует значение в области для собирательного свойства \"{0}\". Либо объявите его, либо укажите инициализатор.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Неабстрактный класс ' {0} ' не реализует унаследованный абстрактный член {1} из класса ' {2} '.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2} и {3} других.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Выражение неабстрактного класса не реализует унаследованный абстрактный элемент \"{0}\" класса \"{1}\".", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1} и {2} других.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Утверждения, отличные от NULL, можно использовать только в файлах TypeScript.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Здесь объявлен не простой параметр.", - "Not_all_code_paths_return_a_value_7030": "Не все пути к коду возвращают значение.", - "Not_all_constituents_of_type_0_are_callable_2756": "Не все составляющие типа \"{0}\" можно вызвать.", - "Not_all_constituents_of_type_0_are_constructable_2760": "Не все составляющие типа \"{0}\" можно создать.", - "Numbers_out_of_order_in_quantifier_1506": "Неупорядоченные числа в квантификаторе.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Числовые литералы с абсолютными значениями, равными 2^53 или более, слишком велики для точного представления в виде целых чисел.", - "Numeric_separators_are_not_allowed_here_6188": "Числовые разделители здесь запрещены.", - "Object_is_of_type_unknown_2571": "Объект имеет тип \"Неизвестный\".", - "Object_is_possibly_null_2531": "Возможно, объект равен null.", - "Object_is_possibly_null_or_undefined_2533": "Возможно, объект равен null или undefined.", - "Object_is_possibly_undefined_2532": "Возможно, объект равен undefined.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Объектный литерал может использовать только известные свойства. \"{0}\" не существует в типе \"{1}\".", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Объектный литерал может указывать только известные свойства, но \"{0}\" не существует в типе \"{1}\". Вы хотели записать \"{2}\"?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Свойство объектного литерала \"{0}\" неявно имеет тип \"{1}\".", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Объекты, содержащие сокращенные свойства, не могут быть выведены с помощью --isolatedDeclarations.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Объекты, содержащие назначения распространения, не могут быть выведены с помощью --isolatedDeclarations.", - "Octal_digit_expected_1178": "Ожидалась восьмеричная цифра.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Восьмеричные escape-последовательности и обратные ссылки не допускаются в классе символов. Если это должна быть escape-последовательность, используйте синтаксис \"{0}\".", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Восьмеричные escape-последовательности не допускаются. Используйте синтаксис \"{0}\".", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Восьмеричные литералы не допускаются. Используйте синтаксис \"{0}\".", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Одно значение \"{0}.{1}\" - это строка \"{2}\", а второе предполагается как неизвестное числовое значение.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "В операторе for...in разрешено только одно объявление переменной.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "В операторе for...of разрешено только одно объявление переменной.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "С помощью ключевого слова new можно вызвать только функцию void.", - "Only_ambient_modules_can_use_quoted_names_1035": "Имена в кавычках могут использоваться только во внешних модулях.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Только модули amd и system поддерживаются вместе с --{0}.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "С помощью --isolatedDeclarations можно указать только const-массивы.", - "Only_emit_d_ts_declaration_files_6014": "Порождаются только файлы объявлений \".d.ts\".", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Вывод только файлов d.ts, но не файлов JavaScript.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Через ключевое слово super доступны только общие и защищенные методы базового класса.", - "Operator_0_cannot_be_applied_to_type_1_2736": "Не удается применить операнд \"{0}\" к типу \"{1}\".", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Оператор \"{0}\" невозможно применить к типам \"{1}\" и \"{2}\".", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Операторы не должны быть смешанными внутри класса символов. Вместо этого перенесите его во вложенный класс.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Отключить проект от проверки ссылок на несколько проектов при редактировании.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Параметр \"{0}={1}\" удален. Удалите его из конфигурации.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Параметр \"{0}={1}\" является нерекомендуемым и перестанет работать в TypeScript {2}. Укажите compilerOption \"\"ignoreDeprecations\": \"{3}\"\", чтобы отключить эту ошибку.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"false\" или \"null\" для этого параметра в командной строке.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"null\" для этого параметра в командной строке.", - "Option_0_can_only_be_specified_on_command_line_6266": "Параметр \"{0}\" может быть указан только в командной строке.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Параметр \"{0}\" можно использовать только при указании \"--inlineSourceMap\" или \"--sourceMap\".", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Опцию \"{0}\" можно использовать, только если для параметра \"moduleResolution\" установлено значение \"node16\", \"nodenext\" или \"bundler\".", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Опцию \"{0}\" можно использовать только в том случае, если для параметра \"module\" установлено значение \"preserve\", \"commonjs\", \"es2015\" или более поздней версии.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Параметр \"{0}\" не может быть указан, если параметр jsx имеет значение \"{1}\".", - "Option_0_cannot_be_specified_with_option_1_5053": "Параметр \"{0}\" невозможно указать с помощью параметра \"{1}\".", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Параметр \"{0}\" невозможно указать без указания параметра \"{1}\".", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Параметр \"{0}\" нельзя указывать без указания параметра \"{1}\" или \"{2}\".", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Параметр \"{0}\" удален. Удалите его из конфигурации.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Параметр \"{0}\" является нерекомендуемым и перестанет работать в TypeScript {1}. Укажите compilerOption \"\"ignoreDeprecations\": \"{2}\"\", чтобы отключить эту ошибку.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Параметр \"{0}\" является избыточным и не может быть указан с параметром \"{1}\".", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Параметр allowImportingTsExtensions можно использовать только при настройке одного из вариантов: noEmit, emitDeclarationOnly или rewriteRelativeImportExtensions.", - "Option_build_must_be_the_first_command_line_argument_6369": "Параметр \"--build\" должен быть первым аргументом командной строки.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Параметр isolatedModules можно использовать, только если указан параметр --module или если параметр target — ES2015 или выше.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Для параметра \"moduleResolution\" должно быть установлено (или оставлено неопределенным) значение \"{0}\", если для параметра \"module\" установлено значение \"{1}\".", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Для параметра \"module\" должно быть установлено значение \"{0}\", если для параметра \"moduleResolution\" установлено значение \"{1}\".", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Параметр \"preserveConstEnums\" нельзя отключить, если включен параметр \"{0}\".", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Параметр project не может быть указан вместе с исходными файлами в командной строке.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Параметр \"--resolveJsonModule\" нельзя указать, если для параметра \"moduleResolution\" установлено значение \"classic\".", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Параметр \"--resolveJsonModule\" не может быть указан, если для параметра \"module\" установлено значение \"none\", \"system\" или \"umd\".", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Параметр \"verbatimModuleSyntax\" нельзя использовать, если для параметра \"module\" установлено значение \"UMD\", \"AMD\" или \"System\".", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "Параметры \"{0}\" и \"{1}\" не могут использоваться одновременно.", - "Options_Colon_6027": "Параметры:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Прочие выходные данные", - "Output_Formatting_6256": "Форматирование выходных данных", - "Output_compiler_performance_information_after_building_6615": "Вывод сведений о производительности компиляторов после сборки.", - "Output_directory_for_generated_declaration_files_6166": "Выходной каталог для создаваемых файлов объявления.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Выходной файл \"{0}\" не создан из исходного файла \"{1}\".", - "Output_from_referenced_project_0_included_because_1_specified_1411": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как указан \"{1}\".", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как для параметра \"--module\" указано значение \"none\".", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Вывод более подробных сведений о производительности компиляторов после сборки.", - "Overload_0_of_1_2_gave_the_following_error_2772": "Перегрузка {0} из {1}, \"{2}\", возвратила следующую ошибку.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Сигнатуры перегрузки должны быть абстрактными или неабстрактными.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Все сигнатуры перегрузки должны быть либо внешними, либо не внешними.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Сигнатуры перегрузки должны быть экспортированы и не экспортированы.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Все сигнатуры перегрузки должны быть либо необязательными, либо обязательными.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Все сигнатуры перегрузки должны быть либо общими, либо закрытыми, либо защищенными.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Параметр \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный после него.", - "Parameter_0_cannot_reference_itself_2372": "Параметр \"{0}\" не может ссылаться сам на себя.", - "Parameter_0_implicitly_has_an_1_type_7006": "Параметр \"{0}\" неявно имеет тип \"{1}\".", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Параметр \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Параметр \"{0}\" находится в позиции, отличной от позиции параметра \"{1}\".", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Параметр \"{0}\" метода доступа имеет или использует имя \"{1}\" из внешнего модуля \"{2}\", но не может быть именован.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Параметр \"{0}\" метода доступа имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Параметр \"{0}\" метода доступа имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Параметр \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Параметр \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Параметр \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Параметр \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Параметр \"{0}\" экспортированной функции имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Параметр \"{0}\" экспортированной функции имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Параметр \"{0}\" экспортированной функции имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Параметр \"{0}\" сигнатуры индекса из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Параметр \"{0}\" сигнатуры индекса из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Параметр \"{0}\" метода из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Параметр \"{0}\" метода из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Параметр не может содержать вопросительный знак и инициализатор.", - "Parameter_declaration_expected_1138": "Ожидалось объявление параметра.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Параметр имеет имя, но не тип. Возможно, вы хотели использовать \"{0}: {1}\"?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Модификаторы параметров можно использовать только в файлах TypeScript.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Параметр должен иметь явную аннотацию типа с --isolatedDeclarations.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Анализ в строгом режиме и создание директивы \"use strict\" для каждого исходного файла.", - "Part_of_files_list_in_tsconfig_json_1409": "Часть списка \"files\" в tsconfig.json", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Шаблон \"{0}\" может содержать не больше одного символа \"*\".", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Временные показатели производительности для параметров \"--diagnostics\" и \"--extendedDiagnostics\" недоступны в этом сеансе. Не удалось найти стандартную реализацию API веб-производительности.", - "Platform_specific_6912": "Для конкретной платформы", - "Prefix_0_with_an_underscore_90025": "Добавьте к \"{0}\" префикс — символ подчеркивания", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Добавить ко всем неправильным объявлениям свойств префикс \"declare\"", - "Prefix_all_unused_declarations_with_where_possible_95025": "Добавить префикс \"_\" ко всем неиспользуемым объявлениям, где это возможно", - "Prefix_with_declare_95094": "Добавить префикс \"declare\"", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Сохранить неиспользуемые импортированные значения в выходных данных JavaScript, которые в противном случае были бы удалены.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Печать всех файлов, считанных во время компиляции.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Печать файлов, считываемых во время компиляции, включая то, почему он был включен.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Печать имен файлов и причины, по которой они включены в компиляцию.", - "Print_names_of_files_part_of_the_compilation_6155": "Печатать имена файлов, входящих в компиляцию.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Печать имен файлов, которые являются частью компиляции, а затем остановка обработки.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Печатать имена создаваемых файлов, входящих в компиляцию.", - "Print_the_compiler_s_version_6019": "Печать версии компилятора.", - "Print_the_final_configuration_instead_of_building_1350": "Печать окончательной конфигурации вместо создания.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Печать имен созданных файлов после компиляции.", - "Print_this_message_6017": "Напечатайте это сообщение.", - "Private_accessor_was_defined_without_a_getter_2806": "Частный метод доступа был определен без метода получения.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Частное поле \"{0}\" должно быть объявлено во включающем классе.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Закрытые идентификаторы запрещено использовать в объявлениях переменных.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Закрытые идентификаторы запрещено использовать вне тела классов.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Закрытые идентификаторы разрешены только в теле класса и могут использоваться только как часть объявления члена класса, доступа к свойствам или левой стороны выражения \"in\"", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Закрытые идентификаторы доступны только при разработке для ECMAScript 2015 или более поздних версий.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Закрытые идентификаторы не могут использоваться в качестве параметров.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Не удается обратиться к закрытому или защищенному члену \"{0}\" в параметре типа.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" содержит ошибки", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" не была собрана", - "Project_0_is_being_forcibly_rebuilt_6388": "Проект \"{0}\" принудительно перестраивается", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что файл \"{2}\" был корневым файлом компиляции, но больше им не является.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что программе необходимо сообщать об ошибках.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Проект \"{0}\" устарел, так как файл buildinfo \"{1}показывает, что некоторые изменения не переданы.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает на изменения в параметрах компилятора.", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Проект \"{0}\" устарел, так как выходные данные \"{1}\" старше входных данных \"{2}\".", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Проект \"{0}\" требует обновления, так как выходного файла \"{1}\" не существует", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Проект \"{0}\" устарел, так как выходные данные для него были созданы с помощью версии \"{1}\", которая отличается от текущей версии \"{2}\"", - "Project_0_is_up_to_date_6361": "Проект \"{0}\" не требует обновления", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Проект \"{0}\" актуален, так как новейшие входные данные \"{1}\" старше выходных данных \"{2}\".", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Проект \"{0}\" актуален, но требуется обновить метки времени файлов вывода, которые старше файлов ввода.", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Проект \"{0}\" не требует обновления с файлами .d.ts, взятыми из зависимостей проекта", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Ссылки на проект не могут формировать циклический граф. Обнаружен цикл: {0}", - "Projects_6255": "Проекты", - "Projects_in_this_build_Colon_0_6355": "Проекты в этой сборке: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Свойства с модификатором \"accessor\" доступны только при обращении к ECMAScript 2015 и более поздним версиям.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Свойство \"{0}\" не может содержать инициализатор, так как оно помечено как абстрактное.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Свойство \"{0}\" поступает из сигнатуры индекса, поэтому доступ к нему должен осуществляться с помощью [\"{0}\"].", - "Property_0_does_not_exist_on_type_1_2339": "Свойство \"{0}\" не существует в типе \"{1}\".", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Свойство \"{0}\" не существует в типе \"{1}\". Вы имели в виду \"{2}\"?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Свойство \"{0}\" отсутствует в типе \"{1}\". Вы хотели обратиться к статическому элементу \"{2}\"?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Свойство \"{0}\" не существует в типе \"{1}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{2}\" или более поздней версии.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Свойство \"{0}\" не существует в типе \"{1}\". Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в статическом блоке класса.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в конструкторе.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа get не задана заметка с типом возвращаемого значения.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа set не задана заметка с типом параметра.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Свойство \"{0}\" неявно имеет тип \"any\", но из использования можно определить более подходящий тип для его метода доступа get.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Свойство \"{0}\" неявно имеет тип \"any\", но из использования можно определить более подходящий тип для его метода доступа set.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Свойство \"{0}\" в типе \"{1}\" невозможно присвоить тому же свойству в базовом типе \"{2}\".", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Свойство \"{0}\" в типе \"{1}\" не может быть присвоено типу \"{2}\".", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Свойство \"{0}\" в типе \"{1}\" ссылается на другой член, к которому невозможно обратиться из типа \"{2}\".", - "Property_0_is_declared_but_its_value_is_never_read_6138": "Свойство \"{0}\" объявлено, но его значение не было прочитано.", - "Property_0_is_incompatible_with_index_signature_2530": "Свойство \"{0}\" несовместимо с сигнатурой индекса.", - "Property_0_is_missing_in_type_1_2324": "Свойство \"{0}\" отсутствует в типе \"{1}\".", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Свойство \"{0}\" отсутствует в типе \"{1}\" и является обязательным в типе \"{2}\".", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Свойство \"{0}\" недоступно вне класса \"{1}\", так как оно имеет закрытый идентификатор.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Свойство \"{0}\" является необязательным в типе \"{1}\" и обязательным в типе \"{2}\".", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "Свойство \"{0}\" является закрытым и доступно только в классе \"{1}\".", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Свойство \"{0}\" является закрытым в типе \"{1}\" и не является таковым в типе \"{2}\".", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Свойство \"{0}\" защищено и доступно только через экземпляр класса \"{1}\". Это экземпляр класса \"{2}\".", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Свойство \"{0}\" является защищенным и доступно только в классе \"{1}\" и его подклассах.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Свойство \"{0}\" является защищенным, однако тип \"{1}\" не является классом, производным от \"{2}\".", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Свойство \"{0}\" является защищенным в типе \"{1}\" и общим в типе \"{2}\".", - "Property_0_is_used_before_being_assigned_2565": "Свойство \"{0}\" используется перед присваиванием значения.", - "Property_0_is_used_before_its_initialization_2729": "Свойство \"{0}\" используется перед его инициализацией.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Свойство \"{0}\" может не существовать в типе \"{1}\". Вы имели в виду \"{2}\"?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Свойство \"{0}\" атрибута расширения JSX не может быть назначено для целевого свойства.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Свойство \"{0}\" экспортированного типа анонимного класса не может быть частным или защищенным.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Свойство \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Свойство \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Свойство \"{0}\" типа \"{1}\" не может быть назначено типу индекса \"{2}\" \"{3}\".", - "Property_0_was_also_declared_here_2733": "Здесь также было объявлено свойство \"{0}\".", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Свойство \"{0}\" перезапишет базовое свойство в \"{1}\". Если это сделано намеренно, добавьте инициализатор. В противном случае добавьте модификатор \"declare\" или удалите избыточное объявление.", - "Property_assignment_expected_1136": "Ожидалось назначение свойства.", - "Property_destructuring_pattern_expected_1180": "Ожидался шаблон деструктурирования свойства.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Свойство должно иметь явную аннотацию типа с --isolatedDeclarations.", - "Property_or_signature_expected_1131": "Ожидалось свойство или сигнатура.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Значение свойства может быть только строковым или числовым литералом, True, False, Null, объектным литералом либо литералом массива.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Предоставление полой поддержки итераций в \"for-of\", распространении и деструктуризации при настройке \"ES5\".", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Открытый метод \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Общее свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именовано.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Общее свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Общее свойство \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именовано.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Полное имя \"{0}\" запрещено использовать, если перед ним не стоит \"@param {object} {1}\".", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Возникновение ошибки, если параметр функции не читается.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Вызывать ошибку в выражениях и объявлениях с подразумеваемым типом any.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Вызвать ошибку в выражениях this с неявным типом any.", - "Range_out_of_order_in_character_class_1517": "Диапазон не по порядку в классе символов.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Для повторного экспорта типа при включенном \"{0}\", необходимо использовать \"export type\".", - "React_components_cannot_include_JSX_namespace_names_2639": "Компоненты React не могут включать имена пространств имен JSX.", - "Recommended_Options_6294": "Рекомендуемые параметры", - "Redirect_output_structure_to_the_directory_6006": "Перенаправить структуру вывода в каталог.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Уменьшить количество проектов, автоматически загружаемых с помощью TypeScript.", - "Referenced_project_0_may_not_disable_emit_6310": "Проект \"{0}\", на который указывает ссылка, не может отключить порождение.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Указанный в ссылке проект \"{0}\" должен иметь следующее значение параметра composite: true.", - "Referenced_via_0_from_file_1_1400": "Ссылка с помощью \"{0}\" из файла \"{1}\"", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если '--moduleResolution' имеет значение 'node16' или 'nodenext'. Рассмотрите возможность добавления расширения к пути импорта.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если \"--moduleResolution\" имеет значение \"node16\" или \"nodenext\". Вы хотели использовать \"{0}\"?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "Удалить список каталогов из процесса просмотра.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Удалить список файлов из обработки в режиме просмотра.", - "Remove_all_unnecessary_override_modifiers_95163": "Удалите все ненужные модификаторы \"override\".", - "Remove_all_unnecessary_uses_of_await_95087": "Удаление всех ненужных случаев использования \"await\"", - "Remove_all_unreachable_code_95051": "Удалить весь недостижимый код", - "Remove_all_unused_labels_95054": "Удалить все неиспользуемые метки", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Удалить скобки из всех тел стрелочных функций с соответствующими проблемами", - "Remove_braces_from_arrow_function_95060": "Удалить скобки из стрелочной функции", - "Remove_braces_from_arrow_function_body_95112": "Удалить скобки из тела стрелочной функции", - "Remove_import_from_0_90005": "Удалить импорт из \"{0}\"", - "Remove_override_modifier_95161": "Удалите модификатор \"override\".", - "Remove_parentheses_95126": "Удалите круглые скобки", - "Remove_template_tag_90011": "Удаление тега шаблона", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Снимите ограничение в 20 МБ на общий размер исходного кода для файлов JavaScript на языковом сервере TypeScript.", - "Remove_type_from_import_declaration_from_0_90055": "Удаление \"type\" из объявления импорта из \"{0}\"", - "Remove_type_from_import_of_0_from_1_90056": "Удаление \"type\" из импорта \"{0}\" из \"{1}\"", - "Remove_type_parameters_90012": "Удаление параметров типа", - "Remove_unnecessary_await_95086": "Удалить ненужный оператор \"await\"", - "Remove_unreachable_code_95050": "Удалить недостижимый код", - "Remove_unused_declaration_for_Colon_0_90004": "Удаление неиспользуемого объявления для: \"{0}\"", - "Remove_unused_declarations_for_Colon_0_90041": "Удалить неиспользуемые объявления для: \"{0}\"", - "Remove_unused_destructuring_declaration_90039": "Удалить неиспользуемое объявление деструктурирования", - "Remove_unused_label_95053": "Удалить неиспользуемую метку", - "Remove_variable_statement_90010": "Удалить оператор с переменной", - "Rename_param_tag_name_0_to_1_95173": "Переименовать тег \"@param\" с \"{0}\" на \"{1}\"", - "Replace_0_with_Promise_1_90036": "Замените \"{0}\" на \"Promise<{1}>\"", - "Replace_all_unused_infer_with_unknown_90031": "Замена всех неиспользуемых \"infer\" на \"unknown\"", - "Replace_import_with_0_95015": "Замена импорта на \"{0}\".", - "Replace_infer_0_with_unknown_90030": "Замена \"infer {0}\" на \"unknown\"", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Сообщать об ошибке, если не все пути к коду в функции возвращают значение.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Сообщать об ошибках для случаев передачи управления в операторе switch.", - "Report_errors_in_js_files_8019": "Сообщать об ошибках в JS-файлах.", - "Report_errors_on_unused_locals_6134": "Сообщать об ошибках в неиспользованных локальных переменных.", - "Report_errors_on_unused_parameters_6135": "Сообщать об ошибках в неиспользованных параметрах.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Требовать достаточных аннотаций при экспорте, чтобы другие инструменты могли легко создавать файлы объявлений.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Требовать необъявленные свойства из сигнатур индекса для использования доступа к элементам.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Обязательные параметры типа не могут следовать за необязательными параметрами типа.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Разрешение для модуля \"{0}\" найдено в кэше из расположения \"{1}\".", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Разрешение для директивы ссылки на тип \"{0}\" обнаружено в кэше из расположения \"{1}\".", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Разрешение неродственного имени не удалось; пытаюсь отключить современные функции разрешения узлов, чтобы узнать, нуждается ли библиотека npm в обновлении конфигурации.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Не удалось выполнить разрешение относительного имени; выполняется попытка с помощью \"--moduleResolution bundler\", чтобы узнать, требуется ли для проекта обновление конфигурации.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Разрешать \"keyof\" только в имена свойств со строковым значением (не числа и не символы).", - "Resolved_under_condition_0_6414": "Разрешено в условии \"{0}\".", - "Resolving_in_0_mode_with_conditions_1_6402": "Разрешение в режиме {0} с условиями {1}.", - "Resolving_module_0_from_1_6086": "======== Идет разрешение модуля \"{0}\" из \"{1}\". ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Идет разрешение имени модуля \"{0}\" относительного к базовому URL-адресу \"{1}\" — \"{2}\".", - "Resolving_real_path_for_0_result_1_6130": "Разрешается реальный путь для \"{0}\"; результат: \"{1}\".", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Разрешение директивы ссылки на тип \"{0}\", содержащее файл \"{1}\". ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог \"{2}\". ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог не задан. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог \"{1}\". ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог не задан. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Разрешение директивы ссылки на тип для программы, которая указывает собственный типRoots, пропуская поиск в папке \"node_modules\".", - "Resolving_with_primary_search_path_0_6121": "Разрешается с помощью первичного пути поиска \"{0}\".", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Параметр rest \"{0}\" неявно имеет тип any[].", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Параметр rest \"{0}\" неявно имеет тип \"any[]\", но из использования можно определить более подходящий тип.", - "Rest_types_may_only_be_created_from_object_types_2700": "Типы REST можно создавать только из типов объектов.", - "Return_type_annotation_circularly_references_itself_2577": "Заметка с типом возвращаемого значения циклически ссылается на саму себя.", - "Return_type_must_be_inferred_from_a_function_95149": "Тип возвращаемого значения должен быть определен из функции.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Тип возвращаемого значения сигнатуры конструктора из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Тип возвращаемого значения сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Тип возвращаемого значения сигнатуры конструктора должен поддерживать присваивание типу экземпляра класса.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Тип возвращаемого значения экспортированной функции имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Тип возвращаемого значения экспортированной функции имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Тип возвращаемого значения экспортированной функции имеет или использует закрытое имя \"{0}\".", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Тип возвращаемого значения сигнатуры индекса из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Тип возвращаемого значения сигнатуры индекса из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Тип возвращаемого значения метода из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Тип возвращаемого значения метода из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует закрытое имя \"{0}\".", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует закрытое имя \"{0}\".", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Повторное использование модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Не разрешено.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\".", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Не разрешено.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Повторное использование модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Не разрешено.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Не разрешено.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".", - "Rewrite_all_as_indexed_access_types_95034": "Перезаписать все как типы с индексным доступом", - "Rewrite_as_the_indexed_access_type_0_90026": "Перезапишите как тип с индексным доступом \"{0}\"", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Перепишите расширения файлов \".ts\", \".tsx\", \".mts\" и \".cts\" в относительных путях импорта на их эквиваленты JavaScript в выходных файлах.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Правый операнд ?? недоступен, поскольку левый операнд никогда не имеет значения NULL.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Корневой каталог невозможно определить, идет пропуск первичных путей поиска.", - "Root_file_specified_for_compilation_1427": "Корневой файл, указанный для компиляции", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "СТРАТЕГИЯ", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Сохраните файлы .tsbuildinfo, чтобы обеспечить возможность добавочной компиляции проектов.", - "Saw_non_matching_condition_0_6405": "Обнаружено несоответствующее условие \"{0}\".", - "Scoped_package_detected_looking_in_0_6182": "Обнаружен пакет, относящийся к области; поиск в \"{0}\"", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Поиск во всех родительских каталогах node_modules резервных расширений: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Поиск предпочтительных расширений во всех родительских каталогах node_modules: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "См. также https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "Выделенный фрагмент не является допустимым оператором или операторами.", - "Selection_is_not_a_valid_type_node_95133": "Выбранный элемент не является допустимым узлом типа.", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Задать версию языка файла JavaScript для создаваемого файла JavaScript и включения объявлений совместимых библиотек.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Установить язык сообщений из файла TypeScript. Это не влияет на выпуск.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Задание для параметра \"module\" в файле конфигурации значения \"{0}\"", - "Set_the_newline_character_for_emitting_files_6659": "Установка символа новой строки для созданных файлов.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Задание для параметра \"target\" в файле конфигурации значения \"{0}\"", - "Setters_cannot_return_a_value_2408": "Методы доступа set не могут возвращать значения.", - "Show_all_compiler_options_6169": "Отображение всех параметров компилятора.", - "Show_diagnostic_information_6149": "Отображение сведений диагностики.", - "Show_verbose_diagnostic_information_6150": "Отображение подробных сведений диагностики.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Показать компоненты, которые будут собраны (или удалены, если дополнительно указан параметр \"--clean\")", - "Signature_0_must_be_a_type_predicate_1224": "Сигнатура \"{0}\" должна быть предикатом типа.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Объявления подписей можно использовать только в файлах TypeScript.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Пропустить создание нижестоящих проектов при ошибке в вышестоящем проекте.", - "Skip_type_checking_all_d_ts_files_6693": "Пропустить проверку типа всех файлов .d.ts", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Пропуск проверки типа файлов D.ts, включенных в файл TypeScript.", - "Skip_type_checking_of_declaration_files_6012": "Пропустить проверку типа файлов объявления.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" содержит ошибки", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" не была собрана", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Пропуск модуля \"{0}\", который выглядит как абсолютный URI, целевые типы файлов: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как указан \"{1}\".", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как для параметра \"--module\" указано значение \"none\".", - "Source_has_0_element_s_but_target_allows_only_1_2619": "Число элементов в источнике — {0}, но целевой объект разрешает только {1}.", - "Source_has_0_element_s_but_target_requires_1_2618": "Число элементов в источнике — {0}, но целевой объект требует {1}.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Источник не предоставляет соответствия для обязательного элемента в позиции {0} в целевом объекте.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Источник не предоставляет соответствия для элемента с переменным числом аргументов в позиции {0} в целевом объекте.", - "Specify_ECMAScript_target_version_6015": "Укажите целевую версию ECMAScript.", - "Specify_JSX_code_generation_6080": "Укажите способ создания кода JSX.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Укажите файл, который объединяет все выходные данные в один файл JavaScript. Если параметр \"declaration\" имеет значение true, также обозначает файл, который объединяет весь вывод .d.ts.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Укажите список шаблонов стандартной маски, соответствующих файлам, которые будут включены в компиляцию.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Укажите список включаемых подключаемых модулей языковой службы.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Укажите набор файлов объявлений связанных библиотек, которые описывают целевую среду выполнения.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Укажите набор записей, которые повторно сопоставляют импорт с дополнительными расположениями поиска.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Укажите массив объектов, которые указывают пути для проектов. Используется в ссылках проекта.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Укажите выходную папку для всех выпущенных файлов.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Укажите поведения вывода/проверки для импортов, которые используются только для типов.", - "Specify_file_to_store_incremental_compilation_information_6380": "Указание файла для хранения сведений о добавочной компиляции", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Укажите, как TypeScript ищет файл в заданном описателе модуля.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Укажите способ наблюдения за каталогами в системах, в которых отсутствует рекурсивный просмотр файлов.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "Укажите, как работает режим отслеживания TypeScript.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Укажите файлы библиотек для включения в компиляцию.", - "Specify_module_code_generation_6016": "Укажите способ создания кода модуля.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Укажите спецификатор модуля, используемый для импорта функций множителя JSX при использовании \"jsx: react-jsx*\".", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Укажите несколько папок, которые действуют как \"./node_modules/@types\".", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Укажите один или несколько путей или ссылок на модуль узла для файлов базовой конфигурации, от которых наследуются параметры.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Укажите параметры для автоматического получения файлов объявлений.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Укажите стратегию для создания контрольного значения опроса, когда его не удается создать с использованием событий файловой системы: \"FixedInterval\" (по умолчанию), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Укажите стратегию для наблюдения за каталогом на платформах, не имеющих собственной поддержки рекурсивного наблюдения: \"UseFsEvents\" (по умолчанию), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Укажите стратегию для наблюдения за файлом: \"FixedPollingInterval\" (по умолчанию), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Укажите ссылку на фрагмент JSX, используемую для фрагментов при нацеливании на вывод React JSX, например \"React.Fragment\" или \"Fragment\".", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод JSX \"react\", например \"React.createElement\" или \"h\".", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод React JSX, например \"React.createElement\" или \"h\".", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Укажите функцию фабрики фрагмента JSX, которая будет использоваться при нацеливании порождения JSX \"react\", если указан параметр компилятора \"jsxFactory\", например \"Fragment\".", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Укажите базовый каталог для разрешения не относительных имен модулей.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Укажите окончание последовательности строки для использования при порождении файлов: CRLF (DOS) или LF (UNIX).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Укажите расположение, в котором отладчик должен найти файлы TypeScript вместо исходных расположений.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Укажите расположение, в котором отладчик должен найти файлы карты, вместо созданных расположений.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Укажите максимальную глубину папки, используемую для проверки файлов JavaScript в \"node_modules\". Применимо только в сочетании с \"allowJs\".", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Укажите описатель модуля, который будет использоваться для импорта функций фабрики \"jsx\" и \"jsxs\", например react", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Укажите объект, вызванный для \"createElement\". Это применимо только при нацеливании на вывод JSX в \"react\".", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Укажите выходной каталог для создаваемых файлов объявления.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Укажите путь к файлу добавочной компиляции .tsbuildinfo.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Укажите корневой каталог входных файлов. Используйте его для управления структурой выходных каталогов с --outDir.", - "Specify_the_root_folder_within_your_source_files_6690": "Укажите корневую папку в исходных файлах.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Укажите корневой путь для отладчиков для поиска исходного кода ссылки.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Укажите имена типов пакетов, которые будут включены без ссылки в исходном файле.", - "Specify_what_JSX_code_is_generated_6646": "Укажите, какой код JSX создается.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Укажите, какой подход должен использовать наблюдатель, если наблюдатель за основными файлами вышел из системы.", - "Specify_what_module_code_is_generated_6657": "Укажите создаваемый код модуля.", - "Split_all_invalid_type_only_imports_1367": "Разделение всех недопустимых импортов, затрагивающих только тип", - "Split_into_two_separate_import_declarations_1366": "Разделение на два отдельных объявления импорта", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Оператор расширения в выражениях new доступен только при разработке для ECMAScript 5 и более поздних версий.", - "Spread_types_may_only_be_created_from_object_types_2698": "Типы расширения можно создавать только из типов объектов.", - "Starting_compilation_in_watch_mode_6031": "Запуск компиляции в режиме наблюдения...", - "Statement_expected_1129": "Ожидался оператор.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Операторы не разрешены в окружающих контекстах.", - "Static_members_cannot_reference_class_type_parameters_2302": "Статические элементы не могут ссылаться на параметры типов класса.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Статическое свойство \"{0}\" конфликтует со встроенным свойством \"Function.{0}\" функции-конструктора \"{1}\".", - "Stricter_Typechecking_Options_6292": "Более строгие параметры проверки типов", - "String_literal_expected_1141": "Ожидался строковый литерал.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Имена импорта и экспорта строковых литералов не поддерживаются, если для флага \"--module\" установлено значение \"es2015\" или \"es2020\".", - "String_literal_with_double_quotes_expected_1327": "Ожидается строковый литерал с двойными кавычками.", - "Style_Options_6293": "Параметры стиля", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Стилизовать ошибки и сообщения с помощью цвета и контекста (экспериментальная функция).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Флаги подшаблонов должны присутствовать при наличии знака минус.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Последовательные объявления свойств должны иметь один и тот же тип. Свойство \"{0}\" должно иметь тип \"{1}\", но имеет здесь тип \"{2}\".", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Последующие объявления переменных должны иметь тот же тип. Переменная \"{0}\" должна иметь тип \"{1}\", однако имеет тип \"{2}\".", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Подстановка \"{0}\" для шаблона \"{1}\" содержит неправильный тип, ожидается string, получен \"{2}\".", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Подстановка \"{0}\" в шаблоне \"{1}\" может содержать не больше одного символа \"*\".", - "Substitutions_for_pattern_0_should_be_an_array_5063": "Подстановки для шаблона \"{0}\" должны быть массивом.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Замены для шаблона \"{0}\" не должны быть пустым массивом.", - "Successfully_created_a_tsconfig_json_file_6071": "Файл tsconfig.json успешно создан.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Вызовы super не разрешены вне конструкторов или во вложенных функциях внутри конструкторов.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Подавлять избыточные проверки свойств для объектных литералов.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Подавлять ошибки noImplicitAny для объектов индексирования, у которых отсутствуют сигнатуры индекса.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Подавляйте ошибки \"noImplicitAny\" при индексации объектов без сигнатуры индекса.", - "Switch_each_misused_0_to_1_95138": "Изменить все неверно используемые \"{0}\" на \"{1}\"", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Синхронно вызывайте обратные вызовы и обновляйте состояние наблюдателей каталогов на платформах, не имеющих собственной поддержки рекурсивного наблюдения.", - "Syntax_Colon_0_6023": "Синтаксис: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Минимальное ожидаемое число аргументов для тега \"{0}\" — \"{1}\", но фабрика JSX \"{2}\" предоставляет максимум \"{3}\".", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Выражения шаблона с тегами запрещено использовать в необязательной цепочке.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Целевой объект разрешает только следующее число элементов — {0}, но источник может иметь больше.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Целевой объект требует следующего числа элементов — {0}, но источник может иметь меньше.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Целевая подпись предоставляет слишком мало аргументов. Ожидал {0} или больше, но получил {1} .", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Модификатор \"{0}\" можно использовать только в файлах TypeScript.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Оператор \"{0}\" невозможно применить к типу Symbol.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Оператор \"{0}\" не разрешен для логических типов. Попробуйте использовать \"{1}\" вместо него.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Свойство \"{0}\" асинхронного итератора должно быть методом.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "Свойство \"{0}\" итератора должно быть методом.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Тип Object можно назначить малому количеству других типов. Возможно, вы хотели использовать тип any?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Флаг Unicode (u) и флаг наборов Unicode (v) не могут быть установлены одновременно.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "На объект 'arguments' нельзя ссылаться в стрелочной функции в ES5. Используйте стандартное выражение функции.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "На объект 'arguments' нельзя ссылаться в асинхронной функции или методе в ES5. Попробуйте использовать стандартную функцию или метод.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Текст оператора if не может быть пустым.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Вызов для этой реализации был выполнен успешно, но сигнатуры реализации перегрузок не видны извне.", - "The_character_set_of_the_input_files_6163": "Кодировка входных файлов.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Содержащая стрелочная функция фиксирует глобальное значение \"this\".", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Содержащая функция или текст модуля слишком велики для анализа потока управления.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Текущий файл является модулем CommonJS и не может использовать \"await\" на верхнем уровне.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Текущий файл является модулем CommonJS, импорт которого приведет к вызовам \"require\"; однако файл, на который указывает ссылка, является модулем ECMAScript и не может быть импортирован с помощью \"require\". Вместо этого попробуйте написать динамический вызов \"import(\"{0}\")\".", - "The_current_host_does_not_support_the_0_option_5001": "Текущий узел не поддерживает параметр \"{0}\".", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Здесь определяется объявление объекта \"{0}\", который вы, вероятно, намеревались использовать", - "The_declaration_was_marked_as_deprecated_here_2798": "Объявление было отмечено как устаревшее.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Ожидаемый тип поступает из свойства \"{0}\", объявленного здесь в типе \"{1}\"", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Ожидаемый тип определяется типом возвращаемого значения этой сигнатуры.", - "The_expected_type_comes_from_this_index_signature_6501": "Ожидаемый тип определяется этой сигнатурой индекса.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Выражение назначения экспорта должно представлять собой идентификатор или полное имя в окружающем контексте.", - "The_file_is_in_the_program_because_Colon_1430": "Файл включен в программу по следующей причине:", - "The_files_list_in_config_file_0_is_empty_18002": "Список \"files\" в файле конфигурации \"{0}\" пуст.", - "The_first_export_default_is_here_2752": "Здесь находится первый экспорт данных по умолчанию.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Первым параметром метода then класса promise должен быть обратный вызов.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Глобальный тип \"JSX.{0}\" не может иметь больше одного свойства.", - "The_implementation_signature_is_declared_here_2750": "Здесь объявлена сигнатура реализации.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Метасвойство \"import.meta\" не разрешено в файлах, которые будут построены в выходных данных CommonJS.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Метасвойство \"import.meta\" разрешено только в том случае, если параметр \"--module\" имеет значение \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\" или \"nodenext\".", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Выводимому типу \"{0}\" невозможно присвоить имя без ссылки на \"{1}\". Вероятно, оно не является переносимым. Требуется заметка с типом.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Выводимый тип \"{0}\" ссылается на тип с циклической структурой, которая не может быть элементарно сериализована. Требуется заметка с типом.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Выведенный тип \"{0}\" ссылается на недоступный тип \"{1}\". Требуется аннотация типа.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Выведенный тип этого узла превышает максимальную длину, которую будет сериализовывать компилятор. Требуется указать заметку явного типа.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Инициализатор объявления \"using\" должен быть либо объектом с методом \"[Symbol.dispose]()\", либо иметь значение \"null\" или \"undef\".", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Инициализатор объявления \"await using\" должен быть либо объектом с методом \"[Symbol.asyncDispose]()\" или \"[Symbol.dispose]()\", либо быть \"нулевым\" или \"неопределенным\".", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" существует в нескольких составляющих и является частным в некоторых из них.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" имеет конфликтующие типы в некоторых составляющих.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Ключевое слово intrinsic можно использовать только для объявления внутренних типов, предоставляемых компилятором.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Чтобы использовать фрагменты JSX с параметром компилятора \"jsxFactory\", необходимо указать параметр компилятора \"jsxFragmentFactory\".", - "The_last_overload_gave_the_following_error_2770": "Последняя перегрузка возвратила следующую ошибку.", - "The_last_overload_is_declared_here_2771": "Здесь объявлена последняя перегрузка.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Левый операнд оператора for...in не может быть шаблоном деструктурирования.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Левая часть оператора 'for...in' не может быть объявлением 'using'.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Левая часть оператора \"for...in\" не может быть объявлением \"await using\".", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Левый операнд оператора for...in не может использовать аннотацию типа.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Левая часть оператора \"for...in\" не может быть обращением к необязательному свойству.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "В левой части оператора \"for...in\" должна быть переменная или доступ к свойству.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Левый операнд оператора for...in должен иметь тип string или any.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Левый операнд оператора for...of не может использовать аннотацию типа.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Левая часть оператора \"for...of\" не может быть обращением к необязательному свойству.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Левая часть оператора \"for...of\" не может быть \"async\".", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "В левой части оператора \"for...of\" должна быть переменная или доступ к свойству.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Левый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Левая часть выражения присваивания не может быть обращением к необязательному свойству.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "В левой части выражения назначения должна быть переменная или доступ к свойству.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Левая часть выражения \"instanceof\" должна быть назначена первому аргументу метода \"[Symbol.hasInstance]\" правой части.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Левый операнд выражения instanceof должен иметь тип any, тип объекта или параметр типа.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Языковой стандарт, который используется при отображении сообщений пользователю (например, en-us)", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Максимальная глубина зависимостей для поиска в папке node_modules и загрузки файлов JavaScript.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Операнд оператора \"delete\" не может быть закрытым идентификатором.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Операнд оператора \"delete\" не может быть свойством только для чтения.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Операнд оператора \"delete\" должен быть ссылкой на свойство.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "Операнд оператора \"delete\" должен быть необязательным.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Операнд оператора инкремента или декремента не может быть обращением к необязательному свойству.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Операнд оператора инкремента или декремента должен быть переменной или доступом к свойству.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Анализатор ожидал найти \"{1}\" для соответствия указанному здесь токену \"{0}\".", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Корень проекта неоднозначен, но требуется для разрешения записи карты экспорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Корень проекта неоднозначен, но требуется для разрешения записи карты импорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Невозможно обратиться к свойству \"{0}\" в типе \"{1}\" внутри этого класса, так как он затемнен другим закрытым идентификатором с таким же написанием.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Тип возвращаемого значения функции декоратора параметра должен быть либо void, либо any.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Тип возвращаемого значения функции декоратора свойства должен быть либо void, либо any.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Тип возвращаемого значения асинхронной функции должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Тип возвращаемого значения асинхронной функции или метода должен быть глобальным типом Promise.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Возвращаемое значение асинхронной функции или метода должно иметь глобальный тип Promise. Вы имели в виду \"Promise<{0}>\"?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Правая часть оператора \"for…in\" должна иметь тип \"any\", тип объекта или быть параметром типа, однако указан тип \"{0}\".", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Правый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Правая часть выражения \"instanceof\" должна иметь тип \"любой\", класс, функцию или другой тип, назначаемый типу интерфейса \"Функция\", или тип объекта с методом \"Symbol.hasInstance\".", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Правая часть выражения \"instanceof\" не должна быть выражением экземпляра.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "Корневое значение файла \"{0}\" должно быть объектом.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает {0} .", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает как минимум {0} .", - "The_shadowing_declaration_of_0_is_defined_here_18017": "Здесь определено объявление затемнения \"{0}\"", - "The_signature_0_of_1_is_deprecated_6387": "Сигнатура \"{0}\" \"{1}\" устарела.", - "The_specified_path_does_not_exist_Colon_0_5058": "Указанный путь не существует: \"{0}\".", - "The_tag_was_first_specified_here_8034": "Этот тег был впервые указан здесь.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Цель выражения присваивания элемента rest объекта не может быть обращением к необязательному свойству.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Цель остального назначения объектов должна быть обращением к переменной или свойству.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Контекст this типа \"{0}\" не может быть назначен методу this типа \"{1}\".", - "The_this_types_of_each_signature_are_incompatible_2685": "Типы this каждой подписи несовместимы.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Тип \"{0}\" является \"readonly\" и не может быть назначен изменяемому типу \"{1}\".", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Невозможно использовать модификатор \"type\" в именованном экпорте, когда в инструкции экспорта используется \"export type\".", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Невозможно использовать модификатор \"type\" в именованном импорте, когда в инструкции импорта используется \"import type\".", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Невозможно сериализовать тип этого узла, поскольку его свойство \"{0}\" не может быть сериализовано.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Возвращаемый тип метода \"{0}()\" асинхронного итератора должен быть обещанием для типа со свойством \"value\".", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Тип, возвращаемый методом \"{0}()\" итератора, должен содержать свойство \"value\".", - "The_types_of_0_are_incompatible_between_these_types_2200": "Типы \"{0}\" несовместимы между этими типами.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Типы, возвращаемые \"{0}\", несовместимы между этими типами.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "Здесь нельзя использовать значение \"{0}\".", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Объявление переменной оператора for...in не может содержать инициализатор.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Объявление переменной оператора for...of не может содержать инициализатор.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Оператор with не поддерживается. Все символы в блоке with получат тип any.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Существуют типы в ' {0} ', но этот результат не удалось разрешить с помощью текущей настройки 'moduleResolution'. Рассмотрите возможность обновления до \"node16\", \"nodenext\" или \"bundler\".", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Существуют типы в ' {0} ', но этот результат не удалось разрешить при соблюдении \"экспорта\" package.json. ' {1} ' может потребоваться обновить свой package.json или типизацию.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "В этом регулярном выражении нет группы захвата с именем \" {0} \".", - "There_is_nothing_available_for_repetition_1507": "Нет ничего, что можно было бы повторить.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Для этого тега JSX требуется, чтобы \"{0}\" был в области видимости, но его не удалось найти.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Для этого тега JSX требуется наличие пути модуля \"{0}\", но его не удалось найти. Убедитесь, что у вас установлены типы для соответствующего пакета.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Свойство \"{0}\" этого тега JSX ожидает один дочерний объект типа \"{1}\", однако было предоставлено несколько дочерних объектов.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Свойство \"{0}\" этого тега JSX ожидает тип \"{1}\", требующий несколько дочерних объектов, однако был предоставлен только один дочерний объект.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении нет групп захвата.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении есть только {0} групп захвата.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Это двоичное выражение никогда не имеет нулевого значения. Вам не хватает скобок?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Этот символ нельзя экранировать в регулярном выражении.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Это сравнение кажется непреднамеренным, поскольку типы \"{0}\" и \"{1}\" не перекрываются.", - "This_condition_will_always_return_0_2845": "Это условие всегда возвращает \"{0}\".", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Это условие всегда будет возвращать ''{0}'', так как JavaScript сравнивает объекты по ссылке, а не по значению.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Это условие всегда будет возвращать значение true, поскольку функция \"{0}\" всегда определена.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Это условие будет всегда возвращать значение true, поскольку функция всегда определена. Возможно, вы хотите вызвать ее?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Эту функцию конструктора можно преобразовать в объявление класса.", - "This_expression_is_always_nullish_2871": "Это выражение всегда равно нулю.", - "This_expression_is_never_nullish_2881": "Это выражение никогда не принимает значение null.", - "This_expression_is_not_callable_2349": "Это выражение не является вызываемым.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Это выражение не может быть вызвано, так как оно является методом доступа get. Вы хотели использовать его без \"()\"?", - "This_expression_is_not_constructable_2351": "Это выражение не может быть построено.", - "This_file_already_has_a_default_export_95130": "Этот файл уже имеет экспорт по умолчанию.", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Этот путь импорта небезопасен для перезаписи, поскольку он разрешается в другой проект, а относительный путь между выходными файлами проекта не совпадает с относительным путем между входными файлами.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Этот импорт использует расширение \"{0}\" для разрешения во входной файл TypeScript, но не будет перезаписан во время выпуска, поскольку это не является относительным путем.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Это объявление дополняется другим объявлением. Попробуйте переместить дополняющее объявление в тот же файл.", - "This_kind_of_expression_is_always_falsy_2873": "Подобные выражения всегда ложны.", - "This_kind_of_expression_is_always_truthy_2872": "Такое выражение всегда правдиво.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Это можно преобразовать в асинхронную функцию.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Этот элемент не может иметь комментарий JSDoc с тегом \"@override\", так как он не объявлен в базовом классе \"{0}\".", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Этот элемент не может иметь комментарий JSDoc с тегом \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Этот элемент не может иметь комментарий JSDoc с тегом модификатор \"@override'\", поскольку содержащий его класс \"{0}\" не расширяет другой класс.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Этот элемент не может содержать комментарий JSDoc с тегом \"@override\", так как его имя является динамическим.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\".", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Этот элемент не может иметь модификатор \"override\", поскольку содержащий его класс \"{0}\" не расширяет другой класс.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Этот элемент не может иметь модификатор \"override\", так как его имя является динамическим.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Этот элемент должен иметь комментарий JSDoc с тегом \"@override\", так как он переопределяет элемент в базовом классе \"{0}\".", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет элемент в базовом классе \"{0}\".", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет абстрактный метод, объявленный в базовом классе \"{0}\".", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "На этот модуль можно ссылаться только с помощью импортов/экспортов ECMAScript, включив флаг \"{0}\" и сославшись на его экспорт по умолчанию.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Этот модуль объявлен с помощью оператора \"export =\" и может использоваться только с импортом по умолчанию при использовании флажка \"{0}\".", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Эту операцию можно упростить. Эта смена идентична «{0} {1} {2}».", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Эта перегрузка неявно возвращает тип ' {0} ', поскольку в ней отсутствует аннотация типа возвращаемого значения.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Сигнатура перегрузки несовместима с ее сигнатурой реализации.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Этот параметр запрещено использовать с директивой \"use strict\".", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Это свойство параметра должно иметь комментарий JSDoc с тегом \"@override\", так как он переопределяет элемент в базовом классе \"{0}\".", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Это свойство параметра должно иметь модификатор \"override\", так как он переопределяет элемент базового класса \"{0}\".", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Этот флаг регулярного выражения нельзя переключить внутри подшаблона.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Этот флаг регулярного выражения доступен только при таргетинге \" {0} \" или более поздней версии.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Этот относительный путь импорта небезопасен для перезаписи, потому что он выглядит как имя файла, но на самом деле разрешается как \"{0}\".", - "This_spread_always_overwrites_this_property_2785": "Это распространение всегда перезаписывает данное свойство.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Этот синтаксис недопустим, если включен параметр \"erasableSyntaxOnly\".", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Добавьте конечную запятую или явное ограничение.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Вместо этого используйте выражение \"AS\".", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Для этого синтаксиса требуется импортированный вспомогательный объект, но найти модуль \"{0}\" не удается.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\", который не существует в \"{0}\". Рекомендуется обновить версию \"{0}\".", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\" и параметрами ({2}), который не совместим с объектом в \"{0}\". Попробуйте обновить версию \"{0}\".", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Для этого параметра типа может потребоваться ограничение \"extends {0}\".", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Недопустимое использование \"import\". Можно записывать вызовы \"import()\", но у них должны быть скобки и не должно быть аргументов типа.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Чтобы преобразовать этот файл в модуль ECMAScript, добавьте поле \"type\": \"module\" в \"{0}\".", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или добавьте поле \"type\": \"module\" в \"{1}\".", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Чтобы преобразовать этот файл в модуль ECMAScript, создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Выражения \"await\" верхнего уровня разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Операторы верхнего уровня \"await using\" разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Объявления верхнего уровня в файлах .d.ts должны начинаться с модификатора \"declare\" или \"export\".", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Циклы верхнего уровня \"for await\" разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", - "Trailing_comma_not_allowed_1009": "Завершающая запятая запрещена.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Транскомпиляция каждого файла как отдельного модуля (аналогично ts.transpileModule).", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Попробуйте использовать команду \"npm i --save-dev @types/{1}\", если он существует, или добавьте новый файл объявления (.d.ts), содержащий \"declare module '{0}';\".", - "Trying_other_entries_in_rootDirs_6110": "Попытка использовать другие записи в \"rootDirs\".", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Выполняется попытка замены \"{0}\", расположение модуля кандидата: \"{1}\".", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Тип кортежа \"{0}\" длиной \"{1}\" не имеет элемент с индексом \"{2}\".", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Аргументы типа кортежа циклически ссылаются сами на себя.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Итерация типа \"{0}\" может осуществляться только с использованием флага \"--downlevelIteration\" или с параметром \"--target\" \"es2015\" или выше.", - "Type_0_cannot_be_used_as_an_index_type_2538": "Тип \"{0}\" невозможно использовать как тип индекса.", - "Type_0_cannot_be_used_to_index_type_1_2536": "Тип \"{0}\" не может использоваться для индексации типа \"{1}\".", - "Type_0_does_not_satisfy_the_constraint_1_2344": "Тип \"{0}\" не удовлетворяет ограничению \"{1}\".", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "Тип \"{0}\" не соответствует ожидаемому типу \"{1}\".", - "Type_0_has_no_call_signatures_2757": "Тип \"{0}\" не содержит сигнатуры вызова.", - "Type_0_has_no_construct_signatures_2761": "Тип \"{0}\" не содержит сигнатуры конструкции.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "Тип \"{0}\" не содержит соответствующую сигнатуру индекса для типа \"{1}\".", - "Type_0_has_no_properties_in_common_with_type_1_2559": "У типа \"{0}\" нет общих свойств с типом \"{1}\".", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Тип \"{0}\" не содержит подписей, к которым применим список аргументов типа.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Тип ' {0} ' является универсальным и может индексироваться только для чтения.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2} и еще {3}.", - "Type_0_is_not_a_constructor_function_type_2507": "Тип \"{0}\" не является типом функции конструктора.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Тип ' {0} ' не является допустимым типом возвращаемого значения асинхронной функции в ES5, поскольку он не ссылается на значение конструктора, совместимого с Promise.", - "Type_0_is_not_an_array_type_2461": "Тип \"{0}\" не является типом массива.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "Тип \"{0}\" не является типом массива или типом строки.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "{0} не является типом массива или строки или в нем нет метода [Symbol.iterator](), который возвращает итератор.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "{0} не является типом массива или в нем нет метода [Symbol.iterator](), который возвращает итератор.", - "Type_0_is_not_assignable_to_type_1_2322": "Тип \"{0}\" не может быть назначен для типа \"{1}\".", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Вы имели в виду \"{2}\"?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Существует два разных типа с таким именем, но они не связаны.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Тип \"{0}\" не может назначаться типу \"{1}\", как подразумевается заметкой о вариантности.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Тип ' {0} ' не может быть назначен типу ' {1} ', как это требуется для вычисленных значений элементов перечисления.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типу цели.", - "Type_0_is_not_comparable_to_type_1_2678": "Тип \"{0}\" невозможно сравнить с типом \"{1}\".", - "Type_0_is_not_generic_2315": "Тип \"{0}\" не является универсальным.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Тип \"{0}\" может представлять примитивное значение, не разрешенное в качестве правого операнда оператора \"in\".", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Тип \"{0}\" должен иметь метод \"[Symbol.asyncIterator]()\", который возвращает асинхронный итератор.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Тип \"{0}\" должен иметь метод \"[Symbol.iterator]()\", который возвращает итератор.", - "Type_0_provides_no_match_for_the_signature_1_2658": "Тип \"{0}\" не предоставляет соответствия для сигнатуры \"{1}\".", - "Type_0_recursively_references_itself_as_a_base_type_2310": "Тип \"{0}\" рекурсивно ссылается сам на себя как на базовый тип.", - "Type_Checking_6248": "Проверка типа", - "Type_alias_0_circularly_references_itself_2456": "Псевдоним типа \"{0}\" циклически ссылается на себя.", - "Type_alias_must_be_given_a_name_1439": "Псевдониму типа необходимо присвоить имя.", - "Type_alias_name_cannot_be_0_2457": "Псевдоним типа не может иметь имя \"{0}\".", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Псевдонимы типов можно использовать только в файлах TypeScript.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Аннотация типа не может содержаться в объявлении конструктора.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Заметки с типом можно использовать только в файлах TypeScript.", - "Type_argument_expected_1140": "Ожидался аргумент типа.", - "Type_argument_list_cannot_be_empty_1099": "Список аргументов типа не может быть пустым.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Аргументы типа можно использовать только в файлах TypeScript.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "Аргументы типа для \"{0}\" циклически ссылаются сами на себя.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Выражения утверждения типа можно использовать только в файлах TypeScript.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Тип в позиции {0} в источнике не совместим с типом в позиции {1} в целевом объекте.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Типы в позициях {0}–{1} в источнике не совместимы с типом в позиции {2} в целевом объекте.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Тип, содержащий частное имя \" {0} \", нельзя использовать с --isolatedDeclarations.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Файлы объявления типа, включаемые в компиляцию.", - "Type_expected_1110": "Ожидался тип.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Утверждения импорта типа должны иметь ровно один ключ \"resolution-mode\" со значением \"import\" или \"require\".", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Импорт типа модуля ECMAScript из модуля CommonJS должен иметь атрибут \"resolution-mode\".", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Создание экземпляра типа является слишком глубоким и, возможно, бесконечным.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "На тип есть прямые или непрямые ссылки в обратном вызове выполнения собственного метода then.", - "Type_library_referenced_via_0_from_file_1_1402": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\" с идентификатором пакета \"{2}\"", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Тип операнда \"await\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Типом значения вычисляемого свойства является \"{0}\", который не может быть назначен типу \"{1}\".", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Тип элементов итерации для операнда \"yield*\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Тип свойства \"{0}\" циклически ссылается на самого себя в сопоставленном типе \"{1}\".", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Тип операнда \"yield\" в асинхронном генераторе должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Импорт модуля ECMAScript, затрагивающий только тип, из модуля CommonJS должен иметь атрибут \"resolution-mode\".", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Тип происходит от этого импорта. Импорт стиля пространства имен не может быть вызван или создан и приведет к сбою во время выполнения. Вместо этого рекомендуется использовать импорт по умолчанию или импортировать сюда \"require\".", - "Type_parameter_0_has_a_circular_constraint_2313": "Параметр типа \"{0}\" содержит циклическое ограничение.", - "Type_parameter_0_has_a_circular_default_2716": "Параметр типа \"{0}\" по умолчанию является циклическим.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Параметр типа \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Параметр типа \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Параметр типа \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Параметр типа \"{0}\" экспортированной функции имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Параметр типа \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Параметр типа \"{0}\" для экспортированного типа сопоставленного объекта имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Параметр типа \"{0}\" экспортированного псевдонима типа имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Параметр типа \"{0}\" метода из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Параметр типа \"{0}\" общего метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Параметр типа \"{0}\" общего статического метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", - "Type_parameter_declaration_expected_1139": "Ожидалось объявление параметра типа.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Объявления параметров типа можно использовать только в файлах TypeScript.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Значения по умолчанию для параметров типа могут ссылаться только на ранее объявленные параметры типа.", - "Type_parameter_list_cannot_be_empty_1098": "Список параметров типа не может быть пустым.", - "Type_parameter_name_cannot_be_0_2368": "Параметр типа не может иметь имя \"{0}\".", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Параметры типов не могут содержаться в объявлении конструктора.", - "Type_predicate_0_is_not_assignable_to_1_1226": "Предикат типов \"{0}\" не может быть назначен для \"{1}\".", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Тип создает тип кортежа, который слишком большой для представления.", - "Type_reference_directive_0_was_not_resolved_6120": "======== Директива ссылки на тип \"{0}\" не разрешена. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\", первичный объект: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\" с идентификатором пакета \"{2}\", первичный объект: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Выражения соответствия типа можно использовать только в файлах TypeScript.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Типы не могут отображаться в объявлениях экспорта в файлах JavaScript.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Типы имеют раздельные объявления закрытого свойства \"{0}\".", - "Types_of_construct_signatures_are_incompatible_2419": "Типы сигнатур конструкций несовместимы.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "Типы параметров \"{0}\" и \"{1}\" несовместимы.", - "Types_of_property_0_are_incompatible_2326": "Типы свойства \"{0}\" несовместимы.", - "Unable_to_open_file_0_6050": "Не удается открыть файл \"{0}\".", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Не удается разрешить сигнатуру декоратора класса при вызове в качестве выражения.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Не удается разрешить сигнатуру декоратора метода при вызове в качестве выражения.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Не удается разрешить сигнатуру декоратора параметра при вызове в качестве выражения.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Не удается разрешить сигнатуру декоратора свойства при вызове в качестве выражения.", - "Undetermined_character_escape_1513": "Неопределенная escape-последовательность.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Неожиданный ' {0} '. Вы хотели избежать этого с помощью обратной косой черты?", - "Unexpected_end_of_text_1126": "Неожиданный конец текста.", - "Unexpected_keyword_or_identifier_1434": "Непредвиденное ключевое слово или идентификатор.", - "Unexpected_token_1012": "Неожиданный токен.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Неожиданный токен. Ожидался конструктор, метод, метод доступа или свойство.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Непредвиденная лексема. Ожидалось имя параметра типа без фигурных скобок.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Непредвиденный токен. Возможно, вы хотели использовать \"{'>'}\" или \">\"?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Непредвиденный токен. Возможно, вы хотели использовать \"{'}'}\" или \"}\"?", - "Unexpected_token_expected_1179": "Неожиданный токен. Ожидался символ \"{\".", - "Unicode_escape_sequence_cannot_appear_here_17021": "Escape-последовательность Юникода здесь не может присутствовать.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Escape-последовательности Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Выражения значений свойств Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", - "Unknown_Unicode_property_name_1524": "Неизвестное имя свойства Юникода.", - "Unknown_Unicode_property_name_or_value_1529": "Неизвестное имя или значение свойства Юникода.", - "Unknown_Unicode_property_value_1526": "Неизвестное значение свойства Юникода.", - "Unknown_build_option_0_5072": "Неизвестный параметр сборки \"{0}\".", - "Unknown_build_option_0_Did_you_mean_1_5077": "Неизвестный параметр сборки \"{0}\". Возможно, вы хотели использовать \"{1}\"?", - "Unknown_compiler_option_0_5023": "Неизвестный параметр компилятора \"{0}\".", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Неизвестный параметр компилятора \"{0}\". Возможно, вы хотели использовать \"{1}\"?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Неизвестное ключевое слово или идентификатор. Вы имели в виду \"{0}\"?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "Неизвестный параметр excludes. Возможно, вы имели в виду exclude?", - "Unknown_regular_expression_flag_1499": "Неизвестный флаг регулярного выражения.", - "Unknown_type_acquisition_option_0_17010": "Неизвестный параметр получения типа, \"{0}\".", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Неизвестный параметр получения типа \"{0}\". Возможно, вы хотели использовать \"{1}\"?", - "Unknown_watch_option_0_5078": "Неизвестный параметр контрольного значения \"{0}\".", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Неизвестный параметр контрольного значения \"{0}\". Возможно, вы хотели использовать \"{1}\"?", - "Unreachable_code_detected_7027": "Обнаружен недостижимый код.", - "Unterminated_Unicode_escape_sequence_1199": "Незавершенная escape-последовательность Юникода.", - "Unterminated_quoted_string_in_response_file_0_6045": "Незавершенная строка в кавычках в файле ответов \"{0}\".", - "Unterminated_regular_expression_literal_1161": "Незавершенный литерал регулярного выражения.", - "Unterminated_string_literal_1002": "Строковый литерал без признака конца.", - "Unterminated_template_literal_1160": "Незавершенный литерал шаблона.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Вызовы функций без типов не могут принимать аргументы типов.", - "Unused_label_7028": "Неиспользуемая метка.", - "Unused_ts_expect_error_directive_2578": "Неиспользуемая директива \"@ts-expect-error\".", - "Update_import_from_0_90058": "Обновить импорт из \"{0}\"", - "Update_modifiers_of_0_90061": "Обновить модификаторы ' {0} '", - "Updating_output_timestamps_of_project_0_6359": "Обновление меток времени в выходных данных проекта \"{0}\"...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "Обновление меток времени в неизменившихся выходных данных проекта \"{0}\"...", - "Use_0_95174": "Использовать \"{0}\".", - "Use_0_instead_5106": "Вместо него используйте '{0}'.", - "Use_Number_isNaN_in_all_conditions_95175": "Использовать \"Number.isNaN\" во всех условиях.", - "Use_element_access_for_0_95145": "Использовать доступ к элементам для \"{0}\".", - "Use_element_access_for_all_undeclared_properties_95146": "Использовать доступ к элементам для всех необъявленных свойств.", - "Use_import_type_95180": "Используйте \"тип импорта\"", - "Use_synthetic_default_member_95016": "Используйте искусственный элемент \"default\".", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Используйте поле \"экспорт\" package.json при разрешении импорта пакетов.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "Используйте поле \"импорт\" package.json при разрешении импорта.", - "Use_type_0_95181": "Используйте 'type {0}'", - "Using_0_subpath_1_with_target_2_6404": "Использование \"{0}\", вложенный путь: \"{1}\", целевой объект: \"{2}\".", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Использование фрагментов JSX требует, чтобы фабрика фрагментов \"{0}\" была в области видимости, но ее не удалось найти.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Использование строки для оператора for...of поддерживается только в ECMAScript 5 и более поздних версиях.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Использование --build,-b заставит TSC вести себя больше как оркестратор сборки, чем как компилятор. Это используется для запуска создания составных проектов, о которых можно узнать больше на {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "Использование параметров компилятора для перенаправления ссылки на проект \"{0}\".", - "VERSION_6036": "ВЕРСИЯ", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Значение типа \"{0}\" не имеет общих свойств со значением типа \"{1}\". Вы хотели вызвать его?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Значение типа \"{0}\" не может вызываться. Вы хотели использовать new?", - "Variable_0_implicitly_has_an_1_type_7005": "Переменная \"{0}\" неявно имеет тип \"{1}\".", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Переменная \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Переменная \"{0}\" неявно имеет тип \"{1}\" в некоторых расположениях, но из использования можно определить более подходящий тип.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Переменная \"{0}\" неявным образом получает тип \"{1}\" в некоторых местах, где ее тип невозможно определить.", - "Variable_0_is_used_before_being_assigned_2454": "Переменная \"{0}\" используется перед назначением.", - "Variable_declaration_expected_1134": "Ожидалось объявление переменной.", - "Variable_declaration_list_cannot_be_empty_1123": "Список объявлений переменной не может быть пустым.", - "Variable_declaration_not_allowed_at_this_location_1440": "Объявление переменной в этом расположении запрещено.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Переменная должна иметь явную аннотацию типа с --isolatedDeclarations.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Переменные с несколькими объявлениями не могут быть встроены.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Элемент с переменным числом аргументов в позиции {0} в источнике не соответствует элементу в позиции {1} в целевом объекте.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Заметки вариантности поддерживаются только в псевдонимах типов для объектов, функций, конструкторов и сопоставленных типов.", - "Version_0_6029": "Версия {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Посетите https://aka.ms/ts6 для получения сведений о миграции.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Дополнительные сведения об этом файле: https://aka.ms/tsconfig.", - "WATCH_OPTIONS_6918": "ПАРАМЕТРЫ ПРОСМОТРА", - "Watch_and_Build_Modes_6250": "Режимы отслеживания и сборки", - "Watch_input_files_6005": "Просмотр входных файлов.", - "Watch_option_0_requires_a_value_of_type_1_5080": "Параметр \"{0}\" контрольного значения требует значение типа {1}.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Записать тип для \"{0}\" можно, только добавив здесь тип для всего параметра.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "При назначении функций убедитесь, что параметры и возвращаемые значения совместимы с подтипом.", - "When_type_checking_take_into_account_null_and_undefined_6699": "При проверке типа учитывайте параметры \"null\" и \"undefined\".", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Сохранять ли устаревшие выходные данные консоли в режиме просмотра вместо очистки экрана.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Заключение всех недопустимых символов в контейнер выражений", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Заключите все недопустимые выражения декоратора в круглые скобки.", - "Wrap_all_object_literal_with_parentheses_95116": "Заключить все литералы объектов в круглые скобки", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Перенос всех элементов JSX без родительских элементов во фрагмент JSX", - "Wrap_in_JSX_fragment_95120": "Перенос во фрагмент JSX", - "Wrap_in_parentheses_95194": "Заключить в круглые скобки", - "Wrap_invalid_character_in_an_expression_container_95108": "Заключение недопустимого знака в контейнер выражений", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Заключить следующий текст в круглые скобки, которые должны быть литералом объекта", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Вы можете узнать обо всех параметрах компилятора на {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Вы не можете переименовать модуль с помощью глобального импорта.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Невозможно переименовать элементы, определенные в папке \"node_modules\".", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Невозможно переименовать элементы, определенные в другой папке \"node_modules\".", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Невозможно переименовать элементы, определенные в стандартной библиотеке TypeScript.", - "You_cannot_rename_this_element_8000": "Этот элемент переименовать нельзя.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" принимает слишком мало аргументов для использования в качестве декоратора. Вы хотели сначала вызвать его и записать \"@{0}()\"?", - "_0_and_1_index_signatures_are_incompatible_2330": "Сигнатуры индекса \"{0}\" и \"{1}\" несовместимы.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Операции \"{0}\" и \"{1}\" невозможно использовать одновременно без скобок.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" указаны дважды. Атрибут \"{0}\" будет перезаписан.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "' {0} ' в конце типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "' {0} ' в начале типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Для импорта \"{0}\" необходимо установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "Для импорта \"{0}\" необходимо использовать импорт по умолчанию.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или импорт по умолчанию.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или импорт по умолчанию.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", - "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" невозможно использовать как компонент JSX.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" невозможно использовать как значение, так как он был экспортирован с помощью \"export type\".", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" невозможно использовать как значение, так как он был импортирован с помощью \"import type\".", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Компоненты \"{0}\" не принимают текст в виде дочерних элементов. Текст в JSX-файле имеет тип \"string\", однако для \"{1}\" ожидается тип \"{2}\".", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Возможно создание экземпляра \"{0}\" с произвольным типом, который может быть не связан с \"{1}\".", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "' {0} ' могут быть объявлены только внутри блока.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Объявления \"{0}\" можно использовать только в файлах TypeScript.", - "_0_declarations_may_not_have_binding_patterns_1492": "' {0} ' могут не иметь шаблонов привязки.", - "_0_declarations_must_be_initialized_1155": "' {0} ' должны быть инициализированы.", - "_0_expected_1005": "Ожидалось \"{0}\".", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "' {0} ' имеет строковый тип, но должен иметь синтаксически распознаваемый строковый синтаксис, если включен 'isolatedModules'.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "В \"{0}\" нет экспортированного элемента \"{1}\". Вы имели в виду \"{2}\"?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" неявно имеет тип возвращаемого значения \"{1}\", но из использования можно определить более подходящий тип.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" неявно имеет тип возвращаемого значения any, так как у него нет заметки с типом возвращаемого значения, а также на него прямо или косвенно указана ссылка в одном из его выражений return.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" неявно имеет тип any, так как отсутствует аннотация типа и на \"{0}\" есть прямые или непрямые ссылки в его собственном инициализаторе.", - "_0_index_signatures_are_incompatible_2634": "Сигнатуры индекса \"{0}\" несовместимы.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Тип индекса \"{0}\" \"{1}\" не может быть назначен типу индекса \"{2}\" \"{3}\".", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" является примитивом, но \"{1}\" — объект оболочки. Предпочтительно использовать \"{0}\" по мере возможности.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" является типом и не может импортироваться в файлы JavaScript. Используйте \"{1}\" в заметке типа JSDoc.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "' {0} ' является типом и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "\"{0}\" является неиспользуемым переименованием \"{1}\". Возможно, это должна была быть заметка для типа?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" может быть назначен ограничению типа \"{1}\", но можно создать экземпляр \"{1}\" с другим подтипом ограничения \"{2}\".", - "_0_is_automatically_exported_here_18044": "\"{0}\" экспортирован автоматически.", - "_0_is_declared_but_its_value_is_never_read_6133": "Свойство \"{0}\" объявлено, но его значение не было прочитано.", - "_0_is_declared_but_never_used_6196": "\"{0}\" объявлен, но никогда не использовался.", - "_0_is_declared_here_2728": "Здесь объявлен \"{0}\".", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" определен как свойство в классе \"{1}\", но переопределяется здесь в \"{2}\" как метод доступа.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" определен как метод доступа в классе \"{1}\", но переопределяется здесь в \"{2}\" как свойство экземпляра.", - "_0_is_deprecated_6385": "\"{0}\" устарело.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" не является допустимым метасвойством для ключевого слова \"{1}\". Вы имели в виду \"{2}\"?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "\"{0}\" не является допустимым именем параметра.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Использование \"{0}\" в качестве имени объявления переменной не допускается.", - "_0_is_of_type_unknown_18046": "\"{0}\" относится к типу unknown.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "Возможно, \"{0}\" имеет значение null.", - "_0_is_possibly_null_or_undefined_18049": "Возможно, \"{0}\" имеет значение null или undefined.", - "_0_is_possibly_undefined_18048": "Возможно, \"{0}\" имеет значение undefined.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "На \"{0}\" есть прямые или непрямые ссылки в его собственном базовом выражении.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "На \"{0}\" есть прямые или непрямые ссылки в его собственной аннотации типа.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" указан несколько раз, поэтому такое использование будет перезаписано.", - "_0_list_cannot_be_empty_1097": "Список \"{0}\" не может быть пустым.", - "_0_modifier_already_seen_1030": "Модификатор \"{0}\" уже встречался.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Модификатор \"{0}\" может присутствовать только в параметре типа у класса, интерфейса или псевдонима типа.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "' {0} ' может появляться только в параметре типа функции, метода или класса.", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Модификатор \"{0}\" не может содержаться в объявлении конструктора.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Модификатор \"{0}\" не может отображаться в модуле или элементе пространства имен.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "Модификатор \"{0}\" не может содержаться в параметре.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "Модификатор \"{0}\" не может отображаться в элементе типа.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Модификатор \"{0}\" не может присутствовать в параметре типа.", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "' {0} ' не может присутствовать в объявлении 'using'.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "' {0} ' не может присутствовать в объявлении 'await using' .", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "Модификатор \"{0}\" не может отображаться в сигнатуре индекса.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Модификатор \"{0}\" не может использоваться для элементов класса этого типа.", - "_0_modifier_cannot_be_used_here_1042": "Модификатор \"{0}\" не может использоваться здесь.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Модификатор \"{0}\" не может использоваться в окружающем контексте.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "Модификатор \"{0}\" не может использоваться с модификатором \"{1}\".", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Модификатор \"{0}\" не может использоваться с закрытым идентификатором.", - "_0_modifier_must_precede_1_modifier_1029": "Модификатор \"{0}\" должен предшествовать модификатору \"{1}\".", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "За '\\ {0} ' должно следовать выражение значения свойства Unicode, заключенное в фигурные скобки.", - "_0_needs_an_explicit_type_annotation_2782": "Для \"{0}\" требуется явная заметка с типом.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" относится только к типу, а здесь используется как пространство имен.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" относится только к типу, но используется здесь как значение.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" относится только к типу, но используется здесь как значение. Вы хотели использовать \"{1} в {0}\"?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" относится только к типу, но здесь используется как значение. Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на ES2015 или более поздней версии.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" ссылается на глобальную переменную UMD, но текущий файл является модулем. Рекомендуется добавить импорт.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" относится к значению, но здесь используется как тип. Возможно, вы имели в виду \"typeof {0}\"?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "' {0} ' разрешается в объявление только типа и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "' {0} ' разрешается в объявление только типа и должен быть реэкспортирован с использованием реэкспорта только типа, если включено ' {1} '.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Значение \"{0}\" должно быть задано внутри объекта \"compilerOptions\" файла конфигурации JSON", - "_0_tag_already_specified_1223": "Тег \"{0}\" уже указан.", - "_0_was_also_declared_here_6203": "Здесь также был объявлен \"{0}\".", - "_0_was_exported_here_1377": "Здесь был экспортирован \"{0}\".", - "_0_was_imported_here_1376": "Здесь был импортирован \"{0}\".", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "\"{0}\", у которого нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения \"{1}\".", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\", у которого нет заметки с типом возвращаемого значения, неявно имеет тип yield \"{1}\".", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Модификатор abstract может отображаться только в объявлении класса, метода или свойства.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Модификатор \"accessor\" может быть только в объявлении свойства.", - "and_here_6204": "и здесь.", - "and_npm_install_D_types_Slashnode_6290": "и npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Нельзя ссылаться на \"arguments\" в инициализаторах свойств и в статических блоках инициализации классов.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": обрабатывать файлы с импортом, экспортом, import.meta, jsx (с jsx: react-jsx) или форматом esm (с модулем: node16+) как файлы с модулями.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Выражение \"await\" нельзя использовать внутри статического блока класса.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Выражения \"await\" допускаются только на верхнем уровне файла, если он является модулем, но не имеет импортов и экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Выражения \"await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Выражения await не могут быть использованы в инициализаторе параметра.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" не влияет на тип этого выражения.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Объявления \"await using\" не допускаются в окружающих контекстах.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Операторы 'await using' разрешены только на верхнем уровне файла, если этот файл является модулем, но этот файл не имеет импорта или экспорта. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Операторы 'await using' разрешены только в асинхронных функциях и на верхних уровнях модулей.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Операторы 'await using' нельзя использовать внутри статического блока класса.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Параметр \"baseUrl\" имеет значение \"{0}\", это значение используется для разрешения безотносительного имени модуля \"{1}\".", - "c_must_be_followed_by_an_ASCII_letter_1512": "За '\\c' должна следовать буква ASCII.", - "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" можно использовать только в начале файла.", - "case_or_default_expected_1130": "Ожидалось case или default.", - "catch_or_finally_expected_1472": "Ожидается \"catch\" или \"finally\".", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Инициализатор элементов перечисления const был вычислен в неконечное значение.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Инициализатор элементов перечисления const был вычислен в запрещенное значение NaN.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "Инициализаторы членов перечисления const должны быть константными выражениями.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Перечисления const можно использовать только в выражениях доступа к свойству или индексу, а также в правой части объявления импорта, назначения экспорта или запроса типа.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Недопустимо использовать constructor как имя свойства параметра.", - "constructor_is_a_reserved_word_18012": "\"#constructor\" является зарезервированным словом.", - "default_Colon_6903": "по умолчанию:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Невозможно вызвать оператор delete с идентификатором в строгом режиме.", - "export_Asterisk_does_not_re_export_a_default_1195": "При использовании \"export *\" повторный экспорт по умолчанию не выполняется.", - "export_can_only_be_used_in_TypeScript_files_8003": "Элемент \"export =\" можно использовать только в файлах TypeScript.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Модификатор export невозможно применить к неоднозначным модулям и улучшениям модулей, так как они всегда видимые.", - "extends_clause_already_seen_1172": "Предложение extends уже существует.", - "extends_clause_must_precede_implements_clause_1173": "Предложение extends должно предшествовать предложению implements.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Предложение extends экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Предложение extends экспортированного класса имеет или использует закрытое имя \"{0}\".", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Предложение extends экспортированного интерфейса \"{0}\" имеет или использует закрытое имя \"{1}\".", - "false_unless_checkJs_is_set_6932": "\"false\", если не задано значение \"checkJs\"", - "false_unless_composite_is_set_6906": "\"false\", если не задано значение \"composite\"", - "file_6025": "файл", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Циклы \"for await\" допускаются только на верхнем уровне файла, если он является модулем, но этот файл не содержит импортов или экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Циклы \"for await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Циклы 'for await' нельзя использовать внутри статического блока класса.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "Методы доступа \"get\" и \"set\" не могут объявлять параметры \"this\".", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", если указаны \"files\", в противном случае \"[\"**/*\"]\"", - "implements_clause_already_seen_1175": "Предложение implements уже существует.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Предложения \"implements\" можно использовать только в файлах TypeScript.", - "import_can_only_be_used_in_TypeScript_files_8002": "Элемент \"import ... =\" можно использовать только в файлах TypeScript.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Объявления \"infer\" допустимы только в предложении \"extends\" условного типа.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "За '\\k' должно следовать имя группы захвата, заключенное в угловые скобки.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Не допускается использование let в качестве имени в объявлениях let или const.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Выражение new, у цели которого нет сигнатуры конструктора, неявно имеет тип any.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\" и значение \"outDir\", если оно указано.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "\"nodenext\", если \"module\" — \"nodenext\"; \"node16\", если \"module\" — \"node16\" или \"node18\"; в противном случае — \"bundler\".", - "one_of_Colon_6900": "один из:", - "one_or_more_Colon_6901": "один или более:", - "options_6024": "параметры", - "or_JSX_element_expected_1145": "Ожидался элемент JSX или \"{\".", - "or_expected_1144": "Ожидалось \"{\" или \";\".", - "package_json_does_not_have_a_0_field_6100": "В package.json нет поля \"{0}\".", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "В файле \"package.json\" отсутствует запись \"typesVersions\", соответствующая версии \"{0}\".", - "package_json_had_a_falsy_0_field_6220": "Файл \"package.json\" содержит поле \"{0}\" со значением false.", - "package_json_has_0_field_1_that_references_2_6101": "package.json содержит поле \"{0}\" \"{1}\", которое ссылается на \"{2}\".", - "package_json_has_a_peerDependencies_field_6281": "\"package.json\" имеет поле \"peerDependities\".", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая не является допустимым диапазоном semver.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая соответствует версии компилятора \"{1}\", выполняется поиск шаблона для сопоставления имени модуля \"{2}\".", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Файл \"package.json\" содержит поле \"typesVersions\" с сопоставлениями путей, зависящих от версии.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Область package.json \"{0}\" явно сопоставляет описатель \"{1}\" со значением NULL.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Область package.json \"{0}\" имеет недопустимый тип для целевого объекта описателя \"{1}\"", - "package_json_scope_0_has_no_imports_defined_6273": "Для области package.json \"{0}\" не определены операции импорта.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Параметр paths указан, идет поиск шаблона, соответствующего имени модуля \"{0}\".", - "q_is_only_available_inside_character_class_1511": "'\\q' доступен только внутри класса символов.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "За '\\q' должны следовать строковые альтернативы, заключенные в фигурные скобки.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Модификатор readonly может отображаться только в объявлении свойства или сигнатуре индекса.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Модификатор типа \"readonly\" допускается только для типов литерала массива и кортежа.", - "require_call_may_be_converted_to_an_import_80005": "Вызов \"require\" можно преобразовать в \"import\".", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" можно задать лишь для импорта, распространяющегося только на тип.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" является единственным допустимым ключом для утверждений импорта типа.", - "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" должен иметь значение \"require\" или \"import\".", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Параметр \"rootDirs\" задан; он используется для разрешения относительного имени модуля \"{0}\".", - "super_can_only_be_referenced_in_a_derived_class_2335": "Ссылка на super может указываться только в производном классе.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "На super можно ссылаться только в элементах производных классов или литеральных выражениях объекта.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "Не допускается ссылка на super в имени вычисляемого свойства.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "На super невозможно ссылаться в аргументах конструктора.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "super допускается только в элементах литеральных выражений объекта, если параметр target — ES2015 или выше.", - "super_may_not_use_type_arguments_2754": "\"super\" не может использовать аргументы типа.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Перед тем, как получить доступ к свойству \"super\" в конструкторе производного класса, необходимо вызвать \"super\".", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "super следует вызывать перед получением доступа к this в конструкторе производного класса.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "После super должен идти список аргументов или доступ к элементу.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Доступ к свойству super разрешен только в конструкторе, функции-элементе или методе доступа к элементам производного класса.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "На this не может указывать ссылка в имени вычисляемого свойства.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "На this не могут указывать ссылки в теле модуля или пространства имен.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "На this не могут указывать ссылки в инициализаторе статического свойства.", - "this_cannot_be_referenced_in_current_location_2332": "На this не могут указывать ссылки в текущем расположении.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "this неявно содержит тип any, так как он не имеет аннотации типа.", - "true_for_ES2022_and_above_including_ESNext_6930": "true для ES2022 и выше, включая ESNext.", - "true_if_composite_false_otherwise_6909": "\"true\", если \"composite\", \"false\" в противном случае", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "`true`, когда moduleResolution — это node16, nodenext или Bundler; в противном случае `false`.", - "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: компилятор TypeScript", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", - "type_Colon_6902": "тип:", - "unique_symbol_types_are_not_allowed_here_1335": "Типы \"unique symbol\" здесь запрещены.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Типы \"unique symbol\" разрешены только у переменных в операторах с переменными.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Типы \"unique symbol\" невозможно использовать в объявлении переменной с именем привязки.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Директиву \"use strict\" запрещено использовать со списком параметров, которые не являются простыми.", - "use_strict_directive_used_here_1349": "Здесь используется директива \"use strict\".", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Объявления \"using\" не допускаются в окружающих контекстах.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "Операторы with не разрешено использовать в блоке асинхронной функции.", - "with_statements_are_not_allowed_in_strict_mode_1101": "Операторы with не разрешено использовать в строгом режиме.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Выражение \"yield\" неявно формирует результат типа \"any\", поскольку содержащий его генератор не имеет заметки типа возвращаемого значения.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Выражения yield не могут быть использованы в инициализаторе параметра." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "ВСЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Модификатор \"{0}\" не может быть использован с объявлением импорта.", + "A_0_parameter_must_be_the_first_parameter_2680": "В качестве первого параметра необходимо указать \"{0}\".", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Тег JSDoc @template не может следовать за тегом @typedef, @callback или @overload.", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Комментарий \"@typedef\" JSDoc не может содержать несколько тегов \"@type\".", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Литерал 'bigint' не может использоваться в качестве имени свойства.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Литерал типа bigint не может использовать экспоненциальное представление.", + "A_bigint_literal_must_be_an_integer_1353": "Литерал типа bigint должен быть целым числом.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Параметр шаблона привязки не может быть необязательным в сигнатуре реализации.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Оператор break можно использовать только во включающей итерации или операторе switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Оператор break может переходить только к метке внешнего оператора.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Класс символов не должен содержать зарезервированный двойной знак пунктуации. Вы хотели избежать этого с помощью обратной косой черты?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Диапазон классов символов не должен быть ограничен другим классом символов.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Класс может реализовать только идентификатор или полное имя с дополнительными аргументами типа.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Класс может реализовать только тип объекта или пересечение типов объектов со статическими известными членами.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Класс не может расширять примитивный тип, такой как ' {0} '. Классы могут расширять только конструируемые значения.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Класс не может реализовать примитивный тип, такой как '{0}'. Он может реализовывать только другие именованные типы объектов.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Объявление класса без модификатора \"default\" должно иметь имя.", + "A_class_member_cannot_have_the_0_keyword_1248": "Элемент класса не может иметь ключевое слово \"{0}\".", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Выражение с запятой запрещено в имени вычисляемого свойства.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Имя вычисляемого свойства не может ссылаться на параметр типа из содержащего его типа.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Имя вычисляемого свойства в объявлении свойства класса должно иметь тип простого литерала или тип \"уникальный символ\".", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Имя вычисляемого свойства в перегрузке метода должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Имя вычисляемого свойства в литерале должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Имя вычисляемого свойства в окружающем контексте должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Имя вычисляемого свойства в интерфейсе должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Имя вычисляемого свойства должно иметь тип string, number, symbol или any.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "Утверждение \"const\" может применяться только к ссылкам на элементы перечисления либо к строковым, числовым, логическим литералам, литералам массивов или объектов.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Доступ к элементу перечисления констант может осуществляться только с использованием строкового литерала.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Инициализатор \"const\" во внешнем контексте должен быть строкой или числовым литералом либо ссылкой на литеральное перечисление.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Конструктор не может содержать вызов \"super\", если его класс расширяет \"null\".", + "A_constructor_cannot_have_a_this_parameter_2681": "Конструктор не может иметь параметр this.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Оператор continue можно использовать только в операторе включающей итерации.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Оператор continue может переходить только к метке оператора включающей итерации.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Файл декларации невозможно импортировать без \"типа импорта\". Вы хотели вместо этого импортировать файл реализации ' {0} '?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Модификатор declare нельзя использовать в уже окружающем контексте.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Декоратор может только декорировать реализацию метода, а не перегрузку.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Предложение default не может повторяться в операторе switch.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Экспорт по умолчанию можно использовать только в модуле в стиле ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Экспорт по умолчанию должен находиться на верхнем уровне объявления файла или модуля.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Утверждение определенного назначения \"!\" запрещено в этом контексте.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Объявление деструктурирования должно включать инициализатор.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Для вызова динамического импорта в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Вызов динамического импорта возвращает \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "A_file_cannot_have_a_reference_to_itself_1006": "Файл не может содержать ссылку на самого себя.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Функция, возвращающая \"never\", не может иметь доступную конечную точку.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Функция, которая вызывается с ключевым словом new, не может иметь тип this со значением void.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Функция, объявленный тип которой не является ни \"неопределенным\", ни \"недействительным\", ни \"любым\", должна возвращать значение.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Генератор не может иметь аннотацию типа void.", + "A_get_accessor_cannot_have_parameters_1054": "Метод доступа get не может иметь параметров.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Метод доступа get должен быть доступным как минимум в той же мере, что и метод задания.", + "A_get_accessor_must_return_a_value_2378": "Метод доступа get должен возвращать значение.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Элемент маркированного кортежа объявлен как необязательный с вопросительным знаком между именем и двоеточием, а не после типа.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Маркированный элемент кортежа объявлен как rest с многоточием перед именем, а не перед типом.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Сопоставленный тип не может объявлять свойства и методы.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Инициализатор элемента в объявлении перечисления не может ссылаться на элементы, объявленные после него, включая элементы, определенные в других перечислениях.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Класс примеси должен иметь конструктор с одиночным параметром REST типа any[].", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Класс примеси, который наследуется от переменной типа, содержащей сигнатуру абстрактной конструкции, должен быть также объявлен как \"abstract\".", + "A_module_cannot_have_multiple_default_exports_2528": "Модуль не может иметь несколько импортов по умолчанию.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Объявление пространства имен и класс или функция, с которыми оно объединено, не могут находится в разных файлах.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Объявление пространства имен не может располагаться раньше класса или функции, с которыми оно объединено.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Объявление пространства имен разрешено только на верхнем уровне пространства имен или модуля.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Объявление \"namespace\" с использованием ключевого слова \"module\" недопустимо. Вместо него используйте ключевое слово \"namespace\".", + "A_non_dry_build_would_build_project_0_6357": "При сборке без флага -dry будет собран проект \"{0}\"", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "При сборке без флага -dry будут удалены следующие файлы: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Сборка без флага -dry обновит метки времени для выходных данных проекта \"{0}\"", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Инициализатор параметра разрешено использовать только в реализации функции или конструктора.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Свойство параметра невозможно объявить с помощью параметра REST.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Свойство параметра допускается только в реализации конструктора.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Свойство параметра невозможно объявить с помощью шаблона привязки.", + "A_promise_must_have_a_then_method_1059": "Класс promise должен содержать метод then.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Свойство класса, тип которого — \"unique symbol\", должно быть задано как \"static\" и \"readonly\".", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Свойство интерфейса или литерала, тип которого — \"unique symbol\", должно быть задано как \"readonly\".", + "A_required_element_cannot_follow_an_optional_element_1257": "Обязательный элемент не должен следовать за необязательным.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Обязательный параметр не должен следовать за необязательным.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Элемент rest не может содержать шаблон привязки.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Элемент rest не может следовать за другим элементом rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Элемент rest не может иметь имя свойства.", + "A_rest_element_cannot_have_an_initializer_1186": "Элемент rest не может содержать инициализатор.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Элемент REST должен быть последним в шаблоне деструктуризации.", + "A_rest_element_type_must_be_an_array_type_2574": "Элемент rest должен иметь тип массива.", + "A_rest_parameter_cannot_be_optional_1047": "Параметр rest не может быть необязательным.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Параметр rest не может иметь инициализатор.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Параметр rest должен стоять на последнем месте в списке параметров.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Параметр rest должен иметь тип массива.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "После параметра rest или шаблона привязки не может стоять запятая.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Оператор return можно использовать только в теле функции.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Оператор return нельзя использовать внутри статического блока класса.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Серия записей, которая повторно сопоставляет импорты с расположениями поиска, заданными относительно baseUrl.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Метод доступа set не может иметь заметку с типом возвращаемого значения.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Метод доступа set не может иметь необязательный параметр.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Метод доступа set не может иметь параметр rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "У метода доступа set должен быть ровно один параметр.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Параметр метода доступа set не может иметь инициализатор.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Аргумент расширения должен иметь тип кортежа либо передаваться в параметр rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Вызов \"super\" должен быть инструкцией на корневом уровне в конструкторе производного класса с инициализированными свойствами, свойствами параметров или частными идентификаторами.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Вызов \"super\" должен быть первой инструкцией в конструкторе, ссылающейся на \"super\" или \"this\", если производный класс содержит инициализированные свойства, свойства параметров или частные идентификаторы.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Условие типа this несовместимо с условием типа на основе параметров.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Тип this доступен только в нестатическом элементе класса или интерфейса.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Модификатор \"export\" верхнего уровня нельзя использовать в объявлениях значений в модуле CommonJS, если включен \"verbatimModuleSyntax\".", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Файл tsconfig.json уже определен в \"{0}\".", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Элемент кортежа не может быть одновременно элементом rest и необязательным элементом.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Тип кортежа нельзя индексировать с отрицательным значением.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Выражение утверждения типа не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Свойство литерала типа не может иметь инициализатор.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Импорт, затрагивающий только тип, может указывать либо только импорт по умолчанию, либо только именованные привязки.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Предикат типов не может ссылаться на параметр rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Предикат типов не может ссылаться на элемент \"{0}\" в шаблоне привязки.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Предикат типов разрешено использовать только в позиции типа возвращаемого значения для функций и методов.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Тип предиката типа должен быть доступным для назначения этому типу параметра.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Тип, указанный в декорированной сигнатуре, должен импортироваться с \"import type\" или импортом пространства имен, если включены параметры \"isolatedModules\" и \"emitDecoratorMetadata\".", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Переменная, тип которой — \"unique symbol\", должна быть задана как \"const\".", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Выражение yield разрешено использовать только в теле генератора.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Невозможно получить доступ к абстрактному методу \"{0}\" класса \"{1}\" с помощью выражения super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Абстрактные методы могут использоваться только в абстрактных классах.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Абстрактные свойства могут появляться только внутри абстрактного класса.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Абстрактное свойство \"{0}\" в классе \"{1}\" недоступно в конструкторе.", + "Accessibility_modifier_already_seen_1028": "Модификатор специальных возможностей уже встречался.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Методы доступа доступны только при разработке для ECMAScript 5 и более поздних версий.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Методы доступа должны быть абстрактными или неабстрактными.", + "Add_0_to_unresolved_variable_90008": "Добавить \"{0}.\" к неразрешенной переменной", + "Add_a_return_statement_95111": "Добавить оператор return", + "Add_a_return_type_to_the_function_declaration_9031": "Добавьте тип возвращаемого значения в объявление функции.", + "Add_a_return_type_to_the_function_expression_9030": "Добавьте тип возвращаемого значения в выражение функции.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Добавьте тип возвращаемого значения в объявление метода доступа get.", + "Add_a_return_type_to_the_method_9034": "Добавьте тип возвращаемого значения в метод", + "Add_a_type_annotation_to_the_parameter_0_9028": "Добавьте аннотацию типа к параметру {0} .", + "Add_a_type_annotation_to_the_property_0_9029": "Добавьте аннотацию типа к свойству {0} .", + "Add_a_type_annotation_to_the_variable_0_9027": "Добавьте аннотацию типа к переменной {0} .", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Добавьте тип в параметр объявления метода доступа set.", + "Add_all_missing_async_modifiers_95041": "Добавить все отсутствующие модификаторы \"async\"", + "Add_all_missing_attributes_95168": "Добавить все отсутствующие атрибуты", + "Add_all_missing_call_parentheses_95068": "Добавить все недостающие скобки вызова", + "Add_all_missing_function_declarations_95157": "Добавить все недостающие объявления функций", + "Add_all_missing_imports_95064": "Добавить все отсутствующие импорты", + "Add_all_missing_members_95022": "Добавить все отсутствующие элементы", + "Add_all_missing_override_modifiers_95162": "Добавьте все отсутствующие модификаторы \"override\".", + "Add_all_missing_parameters_95190": "Добавьте все недостающие параметры", + "Add_all_missing_properties_95166": "Добавить все отсутствующие свойства", + "Add_all_missing_return_statement_95114": "Добавить все отсутствующие операторы return", + "Add_all_missing_super_calls_95039": "Добавить все отсутствующие вызовы super", + "Add_all_missing_type_annotations_90067": "Добавьте все недостающие аннотации типов", + "Add_all_optional_parameters_95193": "Добавить все необязательные параметры", + "Add_annotation_of_type_0_90062": "Добавьте аннотацию типа ' {0} '", + "Add_async_modifier_to_containing_function_90029": "Добавьте модификатор async в содержащую функцию", + "Add_await_95083": "Добавить \"await\"", + "Add_await_to_initializer_for_0_95084": "Добавить \"await\" к инициализатору для \"{0}\"", + "Add_await_to_initializers_95089": "Добавить \"await\" к инициализаторам", + "Add_braces_to_arrow_function_95059": "Добавить скобки в стрелочную функцию", + "Add_const_to_all_unresolved_variables_95082": "Добавить \"const\" ко всем неразрешенным переменным", + "Add_const_to_unresolved_variable_95081": "Добавить \"const\" к неразрешенной переменной", + "Add_definite_assignment_assertion_to_property_0_95020": "Добавить утверждение определенного назначения к свойству \"{0}\"", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Добавить утверждения определенного назначения ко всем неинициализированным свойствам", + "Add_export_to_make_this_file_into_a_module_95097": "Добавить \"export {}\", чтобы превратить этот файл в модуль", + "Add_extends_constraint_2211": "Добавить ограничение \"extends\".", + "Add_extends_constraint_to_all_type_parameters_2212": "Добавить ограничение \"extends\" ко всем параметрам типа", + "Add_import_from_0_90057": "Добавить импортировать из \"{0}\"", + "Add_index_signature_for_property_0_90017": "Добавьте сигнатуру индекса для свойства \"{0}\"", + "Add_initializer_to_property_0_95019": "Добавить инициализатор к свойству \"{0}\"", + "Add_initializers_to_all_uninitialized_properties_95027": "Добавить инициализаторы ко всем неинициализированным свойствам", + "Add_missing_attributes_95167": "Добавить отсутствующие атрибуты", + "Add_missing_call_parentheses_95067": "Добавить недостающие скобки вызова", + "Add_missing_comma_for_object_member_completion_0_95187": "Добавьте недостающую запятую для завершения члена объекта ' {0} '.", + "Add_missing_enum_member_0_95063": "Добавить отсутствующий член перечисления \"{0}\"", + "Add_missing_function_declaration_0_95156": "Добавить недостающее объявление функции \"{0}\"", + "Add_missing_new_operator_to_all_calls_95072": "Добавить отсутствующий оператор \"new\" во все вызовы", + "Add_missing_new_operator_to_call_95071": "Добавить отсутствующий оператор \"new\" в вызов", + "Add_missing_parameter_to_0_95188": "Добавить недостающий параметр в ' {0} '", + "Add_missing_parameters_to_0_95189": "Добавьте недостающие параметры в ' {0} '", + "Add_missing_properties_95165": "Добавить отсутствующие свойства", + "Add_missing_super_call_90001": "Добавьте отсутствующий вызов \"super()\"", + "Add_missing_typeof_95052": "Добавить отсутствующий \"typeof\"", + "Add_names_to_all_parameters_without_names_95073": "Добавить имена ко всем параметрам без имен", + "Add_optional_parameter_to_0_95191": "Добавьте необязательный параметр в ' {0} '", + "Add_optional_parameters_to_0_95192": "Добавить дополнительные параметры в \"{0}\"", + "Add_or_remove_braces_in_an_arrow_function_95058": "Добавить скобки в стрелочную функцию или удалить скобки из нее", + "Add_override_modifier_95160": "Добавьте модификатор \"override\".", + "Add_parameter_name_90034": "Добавить имя параметра", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Добавить квалификатор ко всем неразрешенным переменным, соответствующим имени члена", + "Add_resolution_mode_import_attribute_95196": "Добавьте атрибут импорта \"resolution-mode\"", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Добавьте атрибут импорта \"resolution-mode\" ко всем командам импорта, затрагивающим только тип, для которых это необходимо", + "Add_return_type_0_90063": "Добавить тип возвращаемого значения ' {0} '", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Добавьте к этому выражению satisfies и утверждение типа (удовлетворяет T как T), чтобы сделать тип явным.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Добавьте удовлетворение и утверждение встроенного типа с помощью ' {0} '", + "Add_to_all_uncalled_decorators_95044": "Добавить \"()\" ко всем невызванным декораторам", + "Add_ts_ignore_to_all_error_messages_95042": "Добавить \"@ts-ignore\" ко всем сообщениям об ошибках", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Добавьте \"undefined\" к типу при доступе с использованием индекса.", + "Add_undefined_to_optional_property_type_95169": "Добавить \"undefined\" к необязательному типу свойства", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Добавить неопределенный тип ко всем неинициализированным свойствам", + "Add_undefined_type_to_property_0_95018": "Добавить тип \"undefined\" к свойству \"{0}\"", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Добавить преобразование \"unknown\" для неперекрывающихся типов", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Добавить \"unknown\" для всех преобразований неперекрывающихся типов", + "Add_void_to_Promise_resolved_without_a_value_95143": "Добавить \"void\" в Promise (обещание), разрешенное без значения", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Добавить \"void\" во все Promise (обещания), разрешенные без значения", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Добавление файла tsconfig.json поможет организовать проекты, содержащие файлы TypeScript и JavaScript. Дополнительные сведения: https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Все объявления \"{0}\" должны иметь одинаковые ограничения.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Все объявления \"{0}\" должны иметь одинаковые модификаторы.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Все объявления \"{0}\" должны иметь одинаковые параметры типа.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Все объявления абстрактных методов должны быть последовательными.", + "All_destructured_elements_are_unused_6198": "Все деструктурированные элементы не используются.", + "All_imports_in_import_declaration_are_unused_6192": "Ни один из импортов в объявлении импорта не используется.", + "All_type_parameters_are_unused_6205": "Ни один из параметров типа не используется.", + "All_variables_are_unused_6199": "Ни одна переменная не используется.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Разрешите файлам JavaScript быть частью программы. Используйте параметр \"checkJs\" для получения ошибок из этих файлов.", + "Allow_accessing_UMD_globals_from_modules_6602": "Разрешение обращения к глобальным значениям UMD из модулей.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не повлияет на выведение кода — только на проверку типов.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Разрешить \"импортировать x из y\", если модуль не имеет экспорта по умолчанию.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Разрешить импортировать вспомогательныхе функции из tslib один раз для каждого проекта, а не включать их для каждого файла.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Разрешить импортировать расширения файлов TypeScript. Требуется установить --moduleResolution packager и --noEmit или --emitDeclarationOnly.", + "Allow_javascript_files_to_be_compiled_6102": "Разрешить компиляцию файлов javascript.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Разрешить обрабатывать несколько папок как одну при разрешении модулей.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Уже включенное имя файла \"{0}\" отличается от имени файла \"{1}\" только регистром.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Объявление окружающего модуля не может содержать относительное имя модуля.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Внешний модуль не может быть вложен в другие модули или пространства имен.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Модуль AMD не может иметь несколько назначений имен.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "У абстрактного метода доступа не может быть реализации.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Модификатор специальных возможностей запрещено использовать с закрытым идентификатором.", + "An_accessor_cannot_have_type_parameters_1094": "Метод доступа не может иметь параметры типа.", + "An_accessor_property_cannot_be_declared_optional_1276": "Невозможно объявить свойство \"accessor\" как необязательное.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Объявление окружающего модуля разрешено использовать только в рамках верхнего уровня файла.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "Не указан аргумент для \"{0}\".", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Не указан аргумент, соответствующий этому шаблону привязки.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Арифметический операнд должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Стрелочная функция не может иметь параметр \"this\".", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Для асинхронной функции или метода в ES5 требуется конструктор Promise. Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Асинхронная функция или метод должны вернуть \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".", + "An_async_iterator_must_have_a_next_method_2519": "В асинхронном итераторе должен быть метод next().", + "An_element_access_expression_should_take_an_argument_1011": "Выражение доступа к элементу должно принимать аргумент.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Член перечисления не может иметь имя с закрытым идентификатором.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Имя элемента перечисления не может быть числовым.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "После имени члена перечисления должен стоять знак \",\", \"=\" или \"}\".", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Расширенная версия этих сведений, в которой показаны все возможные параметры компиляторов", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Назначение экспорта нельзя использовать в модуле с другими экспортированными элементами.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Назначение экспорта нельзя использовать в пространстве имен.", + "An_export_assignment_cannot_have_modifiers_1120": "Назначение экспорта не может иметь модификаторы.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Назначение экспорта должно находиться на верхнем уровне объявления файла или модуля.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Объявление экспорта может использоваться только на верхнем уровне модуля.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Объявление экспорта может использоваться только на верхнем уровне пространства имен или модуля.", + "An_export_declaration_cannot_have_modifiers_1193": "Объявление экспорта не может иметь модификаторы.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Объявление 'export =' должно ссылаться на реальное значение, если включен 'verbatimModuleSyntax', но ' {0} ' разрешается в объявление только для типа.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Объявление 'export =' должно ссылаться на значение, если включен 'verbatimModuleSyntax', но ' {0} ' относится только к типу.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "\"Экспорт по умолчанию\" должен ссылаться на реальное значение, когда \"verbatimModuleSyntax\" включен, но \" {0} \" разрешается в объявление только типа.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "\"Экспорт по умолчанию\" должен ссылаться на значение, если включен \"verbatimModuleSyntax\", но \" {0} \" относится только к типу.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Выражение типа \"void\" не может быть проверено на истинность.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Расширенное escape-значение в Юникоде должно быть в пределах от 0x0 до 0x10FFFF включительно.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Идентификатор или ключевое слово не может следовать непосредственно за числовым литералом.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Реализацию невозможно объявить в окружающих контекстах.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Псевдоним импорта не может ссылаться на объявление, экспортированное с помощью \"export type\".", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Псевдоним импорта не может ссылаться на объявление, импортированное с помощью \"import type\".", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Псевдоним импорта не может быть преобразован в объявление типа или только типа, если включен \"verbatimModuleSyntax\".", + "An_import_alias_cannot_use_import_type_1392": "Псевдоним импорта не может использовать \"import type\".", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Объявление импорта может использоваться только на верхнем уровне модуля.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Объявление импорта может использоваться только на верхнем уровне пространства имен или модуля.", + "An_import_declaration_cannot_have_modifiers_1191": "Объявление импорта не может иметь модификаторы.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Путь импорта может заканчиваться расширением \" {0} \" только в том случае, если включен параметр \"allowImportingTsExtensions\".", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Сигнатура индекса не может иметь параметр rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Сигнатура индекса не может заканчиваться запятой.", + "An_index_signature_must_have_a_type_annotation_1021": "У сигнатуры индекса должна быть аннотация типа.", + "An_index_signature_must_have_exactly_one_parameter_1096": "У сигнатуры индекса должен быть ровно один параметр.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Параметр сигнатуры индекса не может содержать вопросительный знак.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Параметра сигнатуры индекса не может содержать модификатор специальных возможностей.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Параметр сигнатуры индекса не может содержать инициализатор.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "У параметра сигнатуры индекса должна быть аннотация типа.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Тип параметра сигнатуры индекса не может быть типом литерала или универсальным типом. Рекомендуется использовать тип сопоставляемого объекта.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Тип параметра сигнатуры индекса должен быть строкой, числом, символом или типом литерала шаблона.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "За выражением создания экземпляра не может следовать доступ к свойству.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Интерфейс может расширить только идентификатор или полное имя с дополнительными аргументами типа.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Интерфейс может расширять только тип объекта или пересечение типов объектов со статическими известными членами.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Интерфейс не может расширять примитивный тип, такой как ' {0} '. Он может расширять только другие именованные типы объектов.", + "An_interface_property_cannot_have_an_initializer_1246": "Свойство интерфейса не может иметь инициализатор.", + "An_iterator_must_have_a_next_method_2489": "Итератор должен иметь метод \"next()\".", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "При использовании директивы pragma @jsx с фрагментами JSX требуется директива pragma @jsxFrag.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Объектный литерал не может иметь несколько методов доступа get/set с одинаковым именем.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "У объектного литерала не может быть несколько свойств с одинаковым именем.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Объектный литерал не может иметь свойство и метод доступа с одинаковым именем.", + "An_object_member_cannot_be_declared_optional_1162": "Элемент объекта не может быть объявлен необязательным.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Метод объекта \"[Symbol.hasInstance]\" должен возвращать логическое значение, чтобы его можно было использовать в правой части выражения \"instanceof\".", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Необязательная цепочка не может содержать закрытые идентификаторы.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Необязательный элемент не может следовать за элементом rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Этот контейнер затемняет внешнее значение \"this\".", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Сигнатура перегрузки не может быть объявлена в качестве генератора.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Унарное выражение с оператором \"{0}\" не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.", + "Annotate_everything_with_types_from_JSDoc_95043": "Добавить заметки ко всем элементам с типами JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Аннотирование типов свойств расширяет функцию в пространстве имен", + "Annotate_with_type_from_JSDoc_95009": "Заметка с типом из JSDoc", + "Another_export_default_is_here_2753": "Здесь находится другой экспорт данных по умолчанию.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Любое свойство Unicode, которое может соответствовать более чем одному символу, доступно только в том случае, если установлен флаг Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Все, что может соответствовать более чем одному символу, недопустимо внутри отрицаемого класса символов.", + "Are_you_missing_a_semicolon_2734": "У вас отсутствует точка с запятой?", + "Argument_expression_expected_1135": "Ожидалось выражение аргумента.", + "Argument_for_0_option_must_be_Colon_1_6046": "Аргумент для параметра \"{0}\" должен быть {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Аргумент динамического импорта не может быть элементом расширения.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Аргумент типа \"{0}\" нельзя назначить параметру типа \"{1}\".", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Невозможно назначить аргумент типа \"{0}\" параметру типа \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Не указаны аргументы для параметра REST \"{0}\".", + "Array_element_destructuring_pattern_expected_1181": "Ожидался шаблон деструктурирования элемента массива.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Массивы с расширенными элементами не могут быть выведены с помощью --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Утверждения требуют, чтобы каждое имя в целевом объекте вызова было объявлено с явной заметкой с типом.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Утверждения требуют, чтобы целевой объект вызова был идентификатором или полным именем.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Назначение свойств функциям без их объявления не поддерживается с помощью --isolatedDeclarations. Добавьте явное объявление свойств, назначенных этой функции.", + "Asterisk_Slash_expected_1010": "Ожидалось \"*/\".", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "По крайней мере один метод доступа должен иметь явную аннотацию типа с параметром --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Улучшения для глобальной области могут быть вложены во внешние модули или неоднозначные объявления модулей только напрямую.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Улучшения для глобальной области не должны иметь модификатор declare, если они отображаются в окружающем контексте.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Автообнаружение для вводимых данных включено в проекте \"{0}\". Идет запуск дополнительного этапа разрешения для модуля \"{1}\" с использованием расположения кэша \"{2}\".", + "BUILD_OPTIONS_6919": "ПАРАМЕТРЫ СБОРКИ", + "Backwards_Compatibility_6253": "Обратная совместимость", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Выражения базового класса не могут ссылаться на параметры типа класса.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Тип возвращаемого значения базового конструктора \"{0}\" не является ни типом объекта, ни пересечением типов объектов со статическими известными членами.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Конструкторы базового класса должны иметь одинаковые типы возвращаемых значений.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Базовый каталог для разрешения неабсолютных имен модуля.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Литералы типа bigint недоступны при нацеливании на версию ниже ES2020.", + "Binary_digit_expected_1177": "Ожидался бит.", + "Binding_element_0_implicitly_has_an_1_type_7031": "Элемент привязки \"{0}\" имеет неявный тип \"{1}\".", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Переменная \"{0}\" с областью видимости, ограниченной блоком, использована перед своим объявлением.", + "Build_a_composite_project_in_the_working_directory_6925": "Создание составного проекта в рабочей папке.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Собирайте все проекты, включая не требующие обновления.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Собрать один проект или несколько и их зависимости, если они не обновлены", + "Build_option_0_requires_a_value_of_type_1_5073": "Параметр сборки \"{0}\" требует значение типа {1}.", + "Building_project_0_6358": "Сборка проекта \"{0}\"...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Встроенные итераторы создаются с типом TReturn \"неопределенным\" вместо \"любого\".", + "COMMAND_LINE_FLAGS_6921": "ФЛАГИ КОМАНДНОЙ СТРОКИ", + "COMMON_COMMANDS_6916": "ОБЩИЕ КОМАНДЫ", + "COMMON_COMPILER_OPTIONS_6920": "ОБЩИЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ", + "Call_decorator_expression_90028": "Вызовите выражение декоратора", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Типы возвращаемых значений сигнатур вызовов \"{0}\" и \"{1}\" несовместимы.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Сигнатура вызова, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Сигнатуры вызова без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".", + "Call_target_does_not_contain_any_signatures_2346": "Объект вызова не содержит сигнатуры.", + "Can_only_convert_logical_AND_access_chains_95142": "Можно преобразовывать только цепочки доступа с логическим И.", + "Can_only_convert_named_export_95164": "Можно преобразовать только именованный экспорт.", + "Can_only_convert_property_with_modifier_95137": "Можно только преобразовать свойство с модификатором", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Можно преобразовывать только конкатенации строк и строковые литералы.", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Не удается получить доступ к {0}.{1}, так как {0} является типом, но не является пространством имен. Вы хотели получить тип свойства {1} в {0} с использованием {0}[\"{1}\"]?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Невозможно получить доступ к ' {0} ' из другого файла без уточнения, если включен ' {1} '. Вместо него используйте '{2}'.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Невозможно получить доступ к перечислениям окружения const, если включено ' {0} '.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Не удается назначить тип конструктора \"{0}\" для типа конструктора \"{1}\".", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Не удается назначить тип конструктора абстрактного класса для типа конструктора класса, не являющегося абстрактным.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Не удается задать значение для \"{0}\", так как это класс.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Не удается задать значение для \"{0}\", так как это константа.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Не удается задать значение для \"{0}\", так как это функция.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Не удается задать значение для \"{0}\", так как это пространство имен.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Не удается задать значение для \"{0}\", так как это свойство, доступное только для чтения.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Не удается задать значение для \"{0}\", так как это перечисление.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Не удается задать значение для \"{0}\", так как это импорт.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Не удается задать значение для \"{0}\", так как это не переменная.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Не удается присвоить значение частному методу \"{0}\". Частные методы недоступны для записи.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Не удается улучшить модуль \"{0}\", так как он разрешается в немодульную сущность.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Невозможно добавить экспорт значений в модуль \"{0}\", так как он разрешается в немодульную сущность.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Невозможно скомпилировать модули с использованием параметра \"{0}\", если флаг \"--module\" не имеет значения \"amd\" или \"system\".", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Невозможно создать экземпляр абстрактного класса.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Не удается делегировать итерацию значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но содержащий генератор всегда будет отправлять \"{0}\".", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Не удается экспортировать \"{0}\". Только локальные объявления можно экспортировать из модуля.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Не удается расширить класс \"{0}\". Конструктор класса помечен как частный.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Не удается расширить интерфейс \"{0}\". Вы имели в виду \"реализует\"?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Не удается найти файл tsconfig.json в текущем каталоге: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Не удается найти файл tsconfig.json в указанном каталоге: \"{0}\".", + "Cannot_find_global_type_0_2318": "Не удается найти глобальный тип \"{0}\".", + "Cannot_find_global_value_0_2468": "Не удается найти глобальное значение \"{0}\".", + "Cannot_find_lib_definition_for_0_2726": "Не удается найти определение lib для \"{0}\".", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Не удается найти определение lib для \"{0}\". Вы имели в виду \"{1}\"?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Не удается найти модуль \"{0}\". Рекомендуется использовать параметр \"--resolveJsonModule\" для импорта модуля с расширением \".json\".", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Не найден модуль \"{0}\". Вы имели в виду установить для параметра \"moduleResolution\" значение \"nodenext\" или добавить псевдонимы к параметру \"paths\"?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Не удается найти модуль \"{0}\" или связанные с ним объявления типов.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "Не удается найти объявления модуля или типа для импорта с побочным эффектом \"{0}\".", + "Cannot_find_name_0_2304": "Не удается найти имя \"{0}\".", + "Cannot_find_name_0_Did_you_mean_1_2552": "Не удается найти имя \"{0}\". Вы имели в виду \"{1}\"?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Не удается найти имя \"{0}\". Возможно, вы имели в виду элемент экземпляра \"this.{0}\"?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Не удается найти имя \"{0}\". Возможно, вы имели в виду статический элемент \"{1}.{0}\"?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Не удается найти имя \"{0}\". Вы собирались использовать его в асинхронной функции?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{1}\" или более поздней версии.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Не удается найти имя \"{0}\". Вам нужно установить определения типов для Bun? Попробуйте `npm i --save-dev @types/bun`, а затем добавьте 'bun' в поле типов в вашем tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства запуска тестов? Попробуйте использовать команды \"npm i --save-dev @types/jest\" или \"npm i --save-dev @types/mocha\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства выполнения тестов? Попробуйте использовать `npm i --save-dev @types/jest` или `npm i --save-dev @types/mocha`, а затем добавьте \"jest\" или \"mocha\" в поле типов в файле tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать команду \"npm i --save-dev @types/jquery\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать `npm i --save-dev @types/jquery`, а затем добавить \"jquery\" в поле типов в файле tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать команду \"npm i --save-dev @types/node\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать `npm i --save-dev @types/node`, а затем добавьте \"node\" в поле типов в файле tsconfig.", + "Cannot_find_namespace_0_2503": "Не удается найти пространство имен \"{0}\".", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Невозможно найти пространство имен \"{0}\". Вы имели в виду \"{1}\"?", + "Cannot_find_parameter_0_1225": "Не удается найти параметр \"{0}\".", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Не удается найти общий путь к подкаталогу для входных файлов.", + "Cannot_find_type_definition_file_for_0_2688": "Не удается найти файл определения типа для \"{0}\".", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Невозможно импортировать файлы объявления типа. Рекомендуется импортировать \"{0}\" вместо \"{1}\".", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Невозможно инициализировать переменную \"{0}\" с внешней областью видимости в той же области видимости, что и объявление \"{1}\" с областью видимости \"Блок\".", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Не удается вызвать объект, который может иметь значение \"NULL\".", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Не удается вызвать объект, который может иметь значение \"NULL\" или \"undefined\".", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Не удается вызвать объект, который может иметь значение \"undefined\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но деструктурирование массива всегда будет отправлять \"{0}\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но расширение массива всегда будет отправлять \"{0}\".", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Не удается выполнить итерацию по значению, так как метод \"next\" его итератора ожидает тип \"{1}\", но \"for-of\" всегда будет отправлять \"{0}\".", + "Cannot_move_statements_to_the_selected_file_95183": "Невозможно переместить выписки в выбранный файл", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Невозможно перейти к файлу, выбранный файл недействителен.", + "Cannot_read_file_0_5083": "Невозможно прочитать файл \"{0}\".", + "Cannot_read_file_0_Colon_1_5012": "Не удается считать файл \"{0}\": {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Невозможно повторно объявить переменную \"{0}\" с областью видимости \"Блок\".", + "Cannot_redeclare_exported_variable_0_2323": "Не удается повторно объявить экспортированную переменную \"{0}\".", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Невозможно повторно объявить идентификатор \"{0}\" в операторе catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Не удается запустить вызов функции в заметке типа.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Невозможно использовать JSX, если не задан флаг \"--jsx\".", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Невозможно использовать \"экспорт-импорт\" в пространстве имен типа или только для типов, если включен '{0}'.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Невозможно использовать директивы import, export или приращения модуля, если флаг \"--module\" имеет значение \"none\".", + "Cannot_use_namespace_0_as_a_type_2709": "Невозможно использовать пространство имен \"{0}\" как тип.", + "Cannot_use_namespace_0_as_a_value_2708": "Невозможно использовать пространство имен \"{0}\" как значение.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Нельзя использовать \"this\" в инициализаторе статического свойства для класса, использующего декоратор.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Не удается записать файл \"{0}\", так как это перезапишет файл \"TSBUILDINFO\", созданный проектом \"{1}\", на который указывает ссылка.", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Не удается записать файл \"{0}\", так как он будет перезаписан несколькими входными файлами.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Не удается записать файл \"{0}\", так как это привело бы к перезаписи входного файла.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Переменная оператора catch не может иметь инициализатор.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Если аннотация для типа переменной предложения clutch указана, это должна быть аннотация \"any\" или \"unknown\".", + "Change_0_to_1_90014": "Измените \"{0}\" на \"{1}\"", + "Change_all_extended_interfaces_to_implements_95038": "Изменить все расширенные интерфейсы на \"implements\"", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Изменить все типы JSDoc на TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Изменить все типы JSDoc на TypeScript (и добавить \"| undefined\" к типам, допускающим значение NULL)", + "Change_extends_to_implements_90003": "Измените \"extends\" на \"implements\"", + "Change_spelling_to_0_90022": "Измените написание на \"{0}\"", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Проверьте свойства класса, которые объявлены, но не заданы в конструкторе.", + "Check_side_effect_imports_6806": "Проверьте импорт побочных эффектов.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Убедитесь, что аргументы для методов \"bind\", \"call\" и \"apply\" соответствуют исходной функции.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Идет проверка того, является ли \"{0}\" самым длинным соответствующим префиксом для \"{1}\" — \"{2}\".", + "Circular_definition_of_import_alias_0_2303": "Циклическое определение псевдонима импорта \"{0}\".", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Обнаружена цикличность при разрешении конфигурации: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Цикличность происходит из типа в этом расположении.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Класс \"{0}\" определяет метод доступа — элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет его как функцию — элемент экземпляра.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Класс \"{0}\" определяет функцию — элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет ее как метод доступа — элемент экземпляра.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Класс \"{0}\" определяет свойство-элемент экземпляра \"{1}\", а расширенный класс \"{2}\" определяет его как функцию-элемент экземпляра.", + "Class_0_incorrectly_extends_base_class_1_2415": "Класс \"{0}\" неправильно расширяет базовый класс \"{1}\".", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Класс \"{0}\" неправильно реализует класс \"{1}\". Вы хотели расширить \"{1}\" и унаследовать его члены в виде подкласса?", + "Class_0_incorrectly_implements_interface_1_2420": "Класс \"{0}\" неправильно реализует интерфейс \"{1}\".", + "Class_0_used_before_its_declaration_2449": "Класс \"{0}\" использован прежде, чем объявлен.", + "Class_constructor_may_not_be_a_generator_1368": "Конструктор класса не может быть генератором.", + "Class_constructor_may_not_be_an_accessor_1341": "Конструктор класса не может быть методом доступа.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Объявление класса не может реализовать список перегрузок для \"{0}\".", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "В объявлении класса не может использоваться более одного тега \"@augments\" или \"@extends\".", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Декораторы классов не могут использоваться со статическим частным идентификатором. Попробуйте удалить экспериментальный декоратор.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Поле класса \" {0} \", определенное родительским классом, недоступно в дочернем классе через super.", + "Class_name_cannot_be_0_2414": "Имя класса не может иметь значение \"{0}\".", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Класс не может иметь имя Object при выборе в качестве цели версии ES5 и более поздней с модулем {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Статическая сторона класса \"{0}\" неправильно расширяет статическую сторону базового класса \"{1}\".", + "Classes_can_only_extend_a_single_class_1174": "Классы могут расширить только один класс.", + "Classes_may_not_have_a_field_named_constructor_18006": "Классы не могут иметь поле с именем \"constructor\".", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Код, содержащийся в классе, вычисляется в строгом режиме JavaScript, который не позволяет использовать \"{0}\". Дополнительные сведения см. в https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Параметры командной строки", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Компиляция проекта по заданному пути к файлу конфигурации или папке с файлом tsconfig.json.", + "Compiler_Diagnostics_6251": "Диагностика компилятора", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Опции компилятора \" {0} \" не может быть присвоена пустая строка.", + "Compiler_option_0_expects_an_argument_6044": "Параметр компилятора \"{0}\" ожидает аргумент.", + "Compiler_option_0_may_not_be_used_with_build_5094": "Параметр компилятора \"--{0}\" не может использоваться с \"--build\".", + "Compiler_option_0_may_only_be_used_with_build_5093": "Параметр компилятора \"--{0}\" может использоваться только с \"--build\".", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Параметр компилятора \"{0}\" со значением \"{1}\" нестабилен. Используйте ночную сборку TypeScript, чтобы скрыть эту ошибку. Для обновления попробуйте использовать команду \"npm install -D typescript@next\".", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Параметр \"{0}\" компилятора требует значение типа {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Компилятор резервирует имя \"{0}\" при выдаче закрытого идентификатора на нижний уровень.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Компилирует проект TypeScript, расположенный по указанному пути", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Компилирует текущий проект (tsconfig.js в рабочей папке.)", + "Compiles_the_current_project_with_additional_settings_6929": "Компилирует текущий проект с дополнительными параметрами", + "Completeness_6257": "Полнота", + "Composite_projects_may_not_disable_declaration_emit_6304": "Составные проекты не могут отключать выпуск объявления.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Составные проекты не могут отключить добавочную компиляцию.", + "Computed_from_the_list_of_input_files_6911": "Вычислено из списка входных файлов", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Вычисляемые свойства должны быть числовыми или строковыми литералами, переменными или выражениями, разделенными точками, с параметром --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Имена вычисляемых свойств запрещены в перечислениях.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Вычисленные имена свойств в литералах классов или объектов не могут быть выведены с помощью --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Вычисленные значения запрещены в перечислении с членами, имеющими строковые значения.", + "Concatenate_and_emit_output_to_single_file_6001": "Связать и вывести результаты в один файл.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Условия, которые необходимо установить в дополнение к настройкам по умолчанию, специфичным для преобразователя, при разрешении импорта.", + "Conflicts_are_in_this_file_6201": "В этом файле присутствуют конфликты.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Попробуйте добавить к этому классу модификатор \"declare\".", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Типы возвращаемых значений сигнатур конструкции \"{0}\" и \"{1}\" несовместимы.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Сигнатура конструктора, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Сигнатуры конструкции без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".", + "Constructor_implementation_is_missing_2390": "Отсутствует реализация конструктора.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Конструктор класса \"{0}\" является частным и доступным только в объявлении класса.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Конструктор класса \"{0}\" защищен и доступен только в объявлении класса.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "При использовании в типе объединения нотация типа конструктора должна быть заключена в круглые скобки.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "При использовании в типе пересечения нотация типа конструктора должна быть заключена в круглые скобки.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Конструкторы производных классов должны содержать вызов super.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Содержащий файл не указан, корневой каталог невозможно определить. Выполняется пропуск поиска в папке node_modules.", + "Containing_function_is_not_an_arrow_function_95128": "Содержащая функция не является стрелочной", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Выбирайте метод, который нужно использовать для обнаружения JS-файлов в формате модуля.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Преобразование типа \"{0}\" в тип \"{1}\" может привести к ошибке, так как ни один из типов не перекрывается с другим в достаточной степени. Если это сделано намеренно, сначала преобразуйте выражение в \"unknown\".", + "Convert_0_to_1_in_0_95003": "Преобразовать \"{0}\" в \"{1} в {0}\"", + "Convert_0_to_mapped_object_type_95055": "Преобразовать \"{0}\" в тип сопоставленного объекта", + "Convert_all_const_to_let_95102": "Преобразовать все \"const\" в \"let\"", + "Convert_all_constructor_functions_to_classes_95045": "Преобразовать все функции конструктора в классы", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Преобразовать все недопустимые символы в код сущности HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Преобразовать все повторно экспортированные типы в экспорты, затрагивающие только тип", + "Convert_all_require_to_import_95048": "Преобразовать все \"require\" в \"import\"", + "Convert_all_to_async_functions_95066": "Преобразовать все в асинхронные функции", + "Convert_all_to_bigint_numeric_literals_95092": "Преобразовать все в числовые литералы типа bigint", + "Convert_all_to_default_imports_95035": "Преобразовать все в импорт по умолчанию", + "Convert_all_type_literals_to_mapped_type_95021": "Преобразовать все литералы типов в сопоставленный тип", + "Convert_all_typedef_to_TypeScript_types_95177": "Преобразуйте все typedef в типы TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Преобразовать стрелочную функцию или выражение функции", + "Convert_const_to_let_95093": "Преобразовать \"const\" в \"let\"", + "Convert_default_export_to_named_export_95061": "Преобразовать экспорт по умолчанию в именованный экспорт", + "Convert_function_declaration_0_to_arrow_function_95106": "Преобразовать объявление функции \"{0}\" в стрелочную функцию", + "Convert_function_expression_0_to_arrow_function_95105": "Преобразовать выражение функции \"{0}\" в стрелочную функцию", + "Convert_function_to_an_ES2015_class_95001": "Преобразование функции в класс ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Преобразовать недопустимый знак в его код сущности HTML", + "Convert_named_export_to_default_export_95062": "Преобразовать именованный экспорт в экспорт по умолчанию", + "Convert_named_imports_to_default_import_95170": "Преобразовать именованные операции импорта в стандартный импорт", + "Convert_named_imports_to_namespace_import_95057": "Преобразовать операции импорта имен в импорт пространства имен", + "Convert_namespace_import_to_named_imports_95056": "Преобразовать импорт пространства имен в операции импорта имен", + "Convert_overload_list_to_single_signature_95118": "Преобразовать список перегрузок в одиночную сигнатуру", + "Convert_parameters_to_destructured_object_95075": "Преобразовать параметры в деструктурированный объект", + "Convert_require_to_import_95047": "Преобразовать \"require\" в \"import\"", + "Convert_to_ES_module_95017": "Преобразовать в модуль ES", + "Convert_to_a_bigint_numeric_literal_95091": "Преобразовать в числовой литерал типа bigint", + "Convert_to_anonymous_function_95123": "Преобразовать в анонимную функцию", + "Convert_to_arrow_function_95125": "Преобразовать в стрелочную функцию", + "Convert_to_async_function_95065": "Преобразовать в асинхронную функцию", + "Convert_to_default_import_95013": "Преобразовать в импорт по умолчанию", + "Convert_to_named_function_95124": "Преобразовать в именованную функцию", + "Convert_to_optional_chain_expression_95139": "Преобразовать в необязательное выражение цепочки", + "Convert_to_template_string_95096": "Преобразовать в строку шаблона", + "Convert_to_type_only_export_1364": "Преобразовать в экспорт, распространяющийся только на тип", + "Convert_typedef_to_TypeScript_type_95176": "Преобразование typedef в тип TypeScript.", + "Corrupted_locale_file_0_6051": "Поврежденный файл языкового стандарта \"{0}\".", + "Could_not_convert_to_anonymous_function_95153": "Не удалось преобразовать в анонимную функцию.", + "Could_not_convert_to_arrow_function_95151": "Не удалось преобразовать в стрелочную функцию.", + "Could_not_convert_to_named_function_95152": "Не удалось преобразовать в именованную функцию.", + "Could_not_determine_function_return_type_95150": "Не удалось определить тип возвращаемого значения функции.", + "Could_not_find_a_containing_arrow_function_95127": "Не удалось найти содержащую стрелочную функцию", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Не удалось найти файл объявления модуля \"{0}\". \"{1}\" имеет неявный тип \"any\".", + "Could_not_find_convertible_access_expression_95140": "Не удалось найти преобразуемое выражение доступа.", + "Could_not_find_export_statement_95129": "Не удалось найти инструкцию экспорта.", + "Could_not_find_import_clause_95131": "Не удалось найти предложение импорта.", + "Could_not_find_matching_access_expressions_95141": "Не удалось найти соответствующие выражения доступа.", + "Could_not_find_name_0_Did_you_mean_1_2570": "Не удалось найти имя \"{0}\". Вы имели в виду \"{1}\"?", + "Could_not_find_namespace_import_or_named_imports_95132": "Не удалось найти импорт пространства имен или именованные импорты.", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Не удалось найти свойство, для которого создается метод доступа.", + "Could_not_find_variable_to_inline_95185": "Не удалось найти переменную для встраивания.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Не удалось разрешить путь \"{0}\" с расширениями: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Не удалось записать файл \"{0}\": \"{1}\".", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Создать файлы сопоставителя с исходным кодом для выпущенных файлов JavaScript.", + "Create_sourcemaps_for_d_ts_files_6614": "Создание сопоставителя с исходным кодом для файлов d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Создает tsconfig.jsс рекомендуемыми параметрами в рабочей папке.", + "DIRECTORY_6038": "КАТАЛОГ", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Десятичные escape-последовательности и обратные ссылки не допускаются в классе символов.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Десятичные дроби с ведущими нулями не допускаются.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Объявление дополняет объявление в другом файле. Сериализация невозможна.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Выдача декларации для этого файла требует сохранения этого импорта для дополнений. Это не поддерживается с помощью --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\". Явная заметка с типом может разблокировать порождение объявления.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\" из модуля \"{1}\". Явная заметка с типом может разблокировать порождение объявления.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Выдача объявления для этого параметра требует неявного добавления неопределенного значения к его типу. Это не поддерживается с помощью --isolatedDeclarations.", + "Declaration_expected_1146": "Ожидалось объявление.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Имя объявления конфликтует со встроенным глобальным идентификатором \"{0}\".", + "Declaration_or_statement_expected_1128": "Ожидалось объявление или оператор.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Ожидалось объявление или инструкция. Этот '=' следует за блоком операторов, поэтому, если вы намереваетесь написать деструктурирующее присваивание, вам может потребоваться заключить все присваивание в круглые скобки.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Объявления с определенными утверждениями присваивания также должны иметь заметки типов.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Объявления с инициализаторами не могут также иметь определенные утверждения присваивания.", + "Declare_a_private_field_named_0_90053": "Объявите закрытое поле с именем \"{0}\".", + "Declare_method_0_90023": "Объявите метод \"{0}\"", + "Declare_private_method_0_90038": "Объявление закрытого метода \"{0}\"", + "Declare_private_property_0_90035": "Объявление закрытого свойства \"{0}\"", + "Declare_property_0_90016": "Объявите свойство \"{0}\"", + "Declare_static_method_0_90024": "Объявите статический метод \"{0}\"", + "Declare_static_property_0_90027": "Объявите статическое свойство \"{0}\"", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Тип возвращаемого значения функции декоратора \"{0}\" нельзя назначить типу \"{1}\".", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Тип возвращаемого значения функции декоратора — \"{0}\", но ожидается \"void\" или \"any\".", + "Decorator_used_before_export_here_1486": "Здесь декоратор используется перед \"экспортом\".", + "Decorators_are_not_valid_here_1206": "Декораторы здесь недопустимы.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Декораторы нельзя применять к множественным методам доступа get или set с совпадающим именем.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Декораторы могут не отображаться после \"экспорта\" или \"экспорта по умолчанию\", если они также появляются перед \"экспортом\".", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Перед именем и всеми ключевыми словами объявлений свойств должны предшествовать декораторы.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "По умолчанию применяйте для переменных предложения catch значение \"unknown\" вместо \"any\".", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Экспорт модуля по умолчанию использует или имеет закрытое имя \"{0}\".", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Экспорт по умолчанию не может быть выведен с помощью --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Импорты по умолчанию не разрешены в отложенном импорте.", + "Default_library_1424": "Библиотека по умолчанию", + "Default_library_for_target_0_1425": "Библиотека по умолчанию для целевого объекта \"{0}\"", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Отложенные импорты поддерживаются только в том случае, если для флага \"--module\" установлено значение \"esnext\" или \"preserve\".", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Определения следующих идентификаторов конфликтуют с определениями в другом файле: {0}", + "Delete_all_unused_declarations_95024": "Удалить все неиспользуемые объявления", + "Delete_all_unused_imports_95147": "Удаление всех неиспользуемых импортов", + "Delete_all_unused_param_tags_95172": "Удалить все неиспользуемые теги \"@param\"", + "Delete_the_outputs_of_all_projects_6365": "Удалите выходные данные всех проектов.", + "Delete_unused_param_tag_0_95171": "Удалить неиспользуемый тег \"@param\" \"{0}\"", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Устарело.] Используйте --jsxFactory. Укажите объект, вызываемый для createElement при целевом порождении JSX react", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Устарело.] Используйте --outFile. Сцепление и порождение выходных данных в одном файле", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Устарело.] Используйте --skipLibCheck. Пропуск проверки типов для файлов объявления библиотеки по умолчанию.", + "Deprecated_setting_Use_outFile_instead_6677": "Устаревший параметр. Используйте вместо этого \"outFile\".", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "Возможно, пропущено \"await\"?", + "Did_you_mean_0_1369": "Вы хотели использовать \"{0}\"?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Вы хотели, чтобы \"{0}\" был ограничен типом \"new (...args: any[]) => {1}\"?", + "Did_you_mean_to_call_this_expression_6212": "Вы хотели вызвать это выражение?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Вы хотели пометить эту функцию как \"async\"?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Вы хотели использовать \":\"? Знак равенства \"=\" после имени свойства может указываться только в том случае, если внутренний объектный литерал является частью шаблона деструктурирования.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Вы хотели использовать \"new\" с этим выражением?", + "Digit_expected_1124": "Ожидалась цифра.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Каталога \"{0}\" не существует. Поиск в нем будет пропускаться.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Каталог \"{0}\" не имеет содержащей области package.json. Импорт не удастся разрешить.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Отключить добавление директив \"use strict\" в создаваемых файлах JavaScript.", + "Disable_checking_for_this_file_90018": "Отключите проверку для этого файла", + "Disable_emitting_comments_6688": "Отключить создаваемые комментарии.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Отключите отправку объявлений, в комментариях JSDoc которых есть \"@internal\".", + "Disable_emitting_files_from_a_compilation_6660": "Отключите создание файлов при компиляции.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Отключить создаваемый файл, если сообщается об ошибках проверки типов.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Отключите стирание объявлений \"const enum\" в сгенерированном коде.", + "Disable_error_reporting_for_unreachable_code_6603": "Отключить отчеты об ошибках для недостижимого кода.", + "Disable_error_reporting_for_unused_labels_6604": "Отключить отчеты об ошибках для неиспользуемых меток.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Отключите полную проверку типов (будут сообщаться только о критических ошибках синтаксического анализа и генерации).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Отключите создание пользовательских вспомогательных функций, таких как \"__extends\", в скомпилированных выходных данных.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Отключить включение любых файлов библиотеки, включая lib.d.ts по умолчанию.", + "Disable_loading_referenced_projects_6235": "Отключите загрузку проектов, на которые имеются ссылки.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Отключите предпочтение исходных файлов вместо файлов объявлений при обращении к составным проектам.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Отключить отправку отчетов об избыточных ошибках свойств во время создания объектных литералов.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Отключить разрешение символических ссылок на их реальный путь. Это соответствует тому же флажку в узле.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Отключение ограничений на размеры в проектах JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Отключите поиск решений для этого проекта.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Отключить строгую проверку универсальных сигнатур в типах функций.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Отключить получение типа для проектов JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Отключить усечение типов в сообщениях об ошибках.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Отключите использование исходных файлов вместо файлов объявлений из проектов, указанных в ссылках.", + "Disable_wiping_the_console_in_watch_mode_6684": "Отключите очистку консоли в режиме просмотра.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Отключает вывод для получения типа при просмотре имен файлов в проекте.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Запретите \"import\", \"require\" или \"\" увеличивать количество файлов, которые TypeScript должен добавить в проект.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Запретить ссылки с разным регистром, указывающие на один файл.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Не добавлять ссылки с тройной косой чертой или импортированные модули в список скомпилированных файлов.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Не разрешать конструкции среды выполнения, которые не являются частью ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Не создавать комментарии в выходных данных.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Не создавать объявления для кода, имеющего аннотацию \"@internal\".", + "Do_not_emit_outputs_6010": "Не создавать выходные данные.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Не выводить выходные элементы, если есть ошибки.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Не порождать директивы use strict в выходных данных модуля.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Не удалять объявления перечислений констант из сгенерированного кода.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Не создавать вспомогательные пользовательские функции, такие как __extends, в скомпилированных выходных данных.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Не включать файл библиотеки по умолчанию (lib.d.ts).", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Не сообщать об ошибках в недостижимом коде.", + "Do_not_report_errors_on_unused_labels_6074": "Не сообщать об ошибках в неиспользуемых метках.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Не разрешать реальный путь symlink.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Не преобразовывайте и не удаляйте любые операции импорта или экспорта, не помеченные как только текстовые, гарантируя, что они записаны в формате выходного файла на основе настройки \"модуль\".", + "Do_not_truncate_error_messages_6165": "Не усекать сообщения об ошибках.", + "Duplicate_function_implementation_2393": "Повторяющаяся реализация функции.", + "Duplicate_identifier_0_2300": "Повторяющийся идентификатор \"{0}\".", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня модуля.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня для асинхронных функций в модуле.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Дублированный идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" при выпуске ссылок \"super\" в статических инициализаторах.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Повторяющийся идентификатор \"{0}\". Компилятор использует объявление \"{1}\" для поддержки асинхронных функций.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Повторяющийся идентификатор \"{0}\". Статические элементы и элементы экземпляров не могут совместно использовать одно и то же частное имя.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Повторяющийся идентификатор arguments. Компилятор использует arguments для инициализации параметров \"rest\".", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Дублирующийся идентификатор \"_newTarget\". Компилятор использует объявление переменной \"_newTarget\" для получения ссылки на метасвойство \"new.target\".", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Повторяющийся идентификатор \"_this\". Компилятор использует объявление переменной \"_this\" для получения ссылки this.", + "Duplicate_index_signature_for_type_0_2374": "Повторяющаяся сигнатура индекса для типа \"{0}\".", + "Duplicate_label_0_1114": "Повторяющаяся метка \"{0}\".", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "Повторяющееся свойство \"{0}\".", + "Duplicate_regular_expression_flag_1500": "Дублирующийся флаг регулярного выражения.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Описатель динамического импорта должен иметь тип \"string\", но имеет тип \"{0}\".", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Динамический импорт поддерживается только в том случае, если для флага \"--module\" настроено значение \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" или \"nodenext\".", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Динамический импорт может принимать в качестве аргументов только спецификатор модуля и необязательный набор атрибутов.", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Динамический импорт поддерживает второй аргумент только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "Импорты и экспорты ECMAScript невозможно записать в файл CommonJS в разделе \"verbatimModuleSyntax\".", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "Импорты и экспорты ECMAScript невозможно записать в файл CommonJS в разделе \"verbatimModuleSyntax\". Измените поле \"type\" в ближайшем файле \"package.json\", чтобы сделать этот файл модулем ECMAScript, или настройте параметры \"verbatimModuleSyntax\", \"module\" и \"moduleResolution\" в TypeScript.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Синтаксис модуля ECMAScript не разрешен в модуле CommonJS, если для параметра \"module\" установлено значение \"preserve\".", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Каждое объявление '{0}.{1}' отличается по своему значению: ожидалось ' {2} ', но было задано ' {3} '.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Каждый член типа объединения \"{0}\" имеет сигнатуры конструкций, но ни одна из их не совместима с другими.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Каждый член типа объединения \"{0}\" имеет сигнатуры, но ни одна из их не совместима с другими.", + "Editor_Support_6249": "Поддержка редактора", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Элемент неявно имеет тип \"any\", так как выражение типа \"{0}\" не может использоваться для индексации типа \"{1}\".", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Элемент неявно содержит тип any, так как выражение индекса не имеет тип number.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Элемент неявно имеет тип any, так как тип \"{0}\" не содержит сигнатуру индекса.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Элемент неявно имеет тип \"any\", так как тип \"{0}\" не содержит сигнатуру индекса. Возможно, вы хотели вызвать \"{1}\"?", + "Emit_6246": "Вывести", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Создавать поля класса, соответствующие стандарту ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Порождать метку порядка байтов UTF-8 в начале выходных файлов.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Порождать один файл с сопоставлениями источников, а не создавать отдельный файл.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Вывести профиль ЦП v8 для запуска компилятора для отладки.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Создайте дополнительный файл JavaScript, чтобы упростить поддержку импорта модулей CommonJS. Это включает \"allowSyntheticDefaultImports\" для совместимости типов.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Выведите поля классов с Define вместо Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Выдавать метаданные типа \"Конструктор\" для декорированных объявлений в исходных файлах.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Создать более совместимый, но подробный и менее производительный файл JavaScript для итерации.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Порождать источник вместе с сопоставителями с исходным кодом в одном файле (нужно задать параметр --inlineSourceMap или --sourceMap).", + "Enable_all_strict_type_checking_options_6180": "Включить все параметры строгой проверки типов.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Включите цвет и форматирование в выводе TypeScript, чтобы ошибки компилятора легче читались.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Включить ограничения, позволяющие использовать проект TypeScript со ссылками проекта.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Включить отчеты об ошибках для кодовых путей, которые не возвращаются в функции явным образом.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Включите отчеты об ошибках в выражениях и объявлениях с подразумеваемым типом \"any\".", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Включить отчет об ошибках для случаев сбоя в операторах switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Включить отчеты об ошибках в файлах JavaScript с проверкой типа.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Включите отчеты об ошибках, если локальные переменные не считываются.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Включите отчеты об ошибках, если параметр \"this\" имеет тип \"any\".", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Включите экспериментальную поддержку устаревших экспериментальных декораторов.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Разрешить импорт файлов с любым расширением при наличии файла декларации.", + "Enable_importing_json_files_6689": "Включите импорт файлов JSON.", + "Enable_lib_replacement_6808": "Включить замену библиотеки.", + "Enable_project_compilation_6302": "Включить компиляцию проекта", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Включите строгие методы \"bind\", \"call\" и \"apply\" для функций.", + "Enable_strict_checking_of_function_types_6186": "Включение строгой проверки типов функций.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Включение строгой проверки инициализации свойств в классах.", + "Enable_strict_null_checks_6113": "Включить строгие проверки NULL.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Включите параметр \"experimentalDecorators\" в файле конфигурации", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Включите флаг \"--jsx\" в файле конфигурации", + "Enable_tracing_of_the_name_resolution_process_6085": "Включить трассировку процесса разрешения имен.", + "Enable_verbose_logging_6713": "Включите подробное ведение журнала.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Позволяет обеспечивать взаимодействие между модулями CommonJS и ES посредством создания объектов пространства имен для всех импортов. Подразумевает \"allowSyntheticDefaultImports\".", + "Enables_experimental_support_for_ES7_decorators_6065": "Включает экспериментальную поддержку для декораторов ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Включает экспериментальную поддержку для создания метаданных типа для декораторов.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Принудительно использует индексированные методы доступа для ключей, объявленных с помощью индексированного типа.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Убедитесь, что переопределяемые элементы в производных классах помечены модификатором переопределения.", + "Ensure_that_casing_is_correct_in_imports_6637": "Убедитесь, что при импорте используется правильный регистр.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Убедитесь, что каждый файл можно безопасно перенести, не полагаясь на другой импорт.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "Убедитесь, что всегда используется \"use strict\".", + "Entering_conditional_exports_6413": "Ввод условного экспорта.", + "Entry_point_for_implicit_type_library_0_1420": "Точка входа для библиотеки неявных типов \"{0}\"", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Точка входа для библиотеки неявных типов \"{0}\" с идентификатором пакета \"{1}\"", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Точка входа для библиотеки типов \"{0}\", указанная в compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Точка входа для библиотеки типов \"{0}\" с идентификатором пакета \"{1}\", указанная в compilerOptions", + "Enum_0_used_before_its_declaration_2450": "Перечисление \"{0}\" использовано прежде, чем объявлено.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Объявления перечислений можно объединять только с пространствами имен или другими объявлениями перечислений.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Все объявления перечислений должны иметь значение const или отличное от const.", + "Enum_member_expected_1132": "Ожидался элемент перечисления.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Член перечисления, следующий за небуквенным числовым элементом, должен иметь инициализатор, если включена опция \"isolatedModules\".", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Инициализаторы членов перечисления должны быть вычислимыми без ссылок на внешние символы с помощью --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "У элемента перечисления должен быть инициализатор.", + "Enum_name_cannot_be_0_2431": "Имя перечисления не может иметь значение \"{0}\".", + "Environment_Settings_6285": "Параметры среды", + "Errors_Files_6041": "Файлы ошибок", + "Escape_sequence_0_is_not_allowed_1488": "Escape-последовательность ' {0} ' не разрешена.", + "Examples_Colon_0_6026": "Примеры: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Чрезмерная сложность сравнения типов ' {0} ' и ' {1} '.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Чрезмерная глубина стека при сравнении типов \"{0}\" и \"{1}\".", + "Exiting_conditional_exports_6416": "Выход из условного экспорта.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Ожидается аргументов типа: {0}–{1}. Укажите их с тегом \"@extends\".", + "Expected_0_arguments_but_got_1_2554": "Ожидалось аргументов: {0}, получено: {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Ожидаемое число аргументов — {0}, фактическое — {1}. Возможно, вы забыли указать void в аргументе типа в Promise?", + "Expected_0_type_arguments_but_got_1_2558": "Ожидались аргументы типа {0}, получены: {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Ожидается аргументов типа: {0}. Укажите их с тегом \"@extends\".", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Ожидался 1 аргумент, получено 0. Для \"new Promise()\" требуется указание JSDoc, чтобы создать \"resolve\" с возможностью вызова без аргументов.", + "Expected_a_Unicode_property_name_1523": "Ожидается имя свойства в Юникоде.", + "Expected_a_Unicode_property_name_or_value_1527": "Ожидается имя или значение свойства в Юникоде.", + "Expected_a_Unicode_property_value_1525": "Ожидается значение свойства Unicode.", + "Expected_a_capturing_group_name_1514": "Ожидается имя группы захвата.", + "Expected_a_class_set_operand_1520": "Ожидается операнд набора классов.", + "Expected_at_least_0_arguments_but_got_1_2555": "Ожидалось аргументов не меньше: {0}, получено: {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Ожидался соответствующий закрывающий тег JSX для \"{0}\".", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Ожидался соответствующий закрывающий тег фрагмента JSX.", + "Expected_for_property_initializer_1442": "Требуется \"=\" для инициализатора свойства.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Ожидаемый тип поля \"{0}\" в \"package.json\" должен быть \"{1}\", получен \"{2}\".", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Явно указанный тип разрешения модуля: \"{0}\".", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Невозможно выполнить возведение в степень для значений \"bigint\", если для параметра \"target\" не задана версия \"es2016\" или более поздняя версия.", + "Export_0_from_module_1_90059": "Экспорт \"{0}\" из модуля \"{1}\"", + "Export_all_referenced_locals_90060": "Экспортировать все локальные объекты, на которые указывают ссылки", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Назначение экспорта невозможно использовать при разработке для модулей ECMAScript. Попробуйте использовать \"export default\" или другой формат модуля.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Назначение экспорта не поддерживается, если флаг \"--module\" имеет значение \"system\".", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Объявление экспорта конфликтует с экспортированным объявлением \"{0}\".", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Объявления экспорта не разрешены в пространстве имен.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Описатель экспорта \"{0}\" не существует в области package.json по пути \"{1}\".", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Экспортированный псевдоним типа \"{0}\" имеет или использует закрытое имя \"{1}\".", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Экспортированный псевдоним типа \"{0}\" имеет или использует частное имя \"{1}\" из модуля \"{2}\".", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именована.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Экспортированная переменная \"{0}\" имеет или использует закрытое имя \"{1}\".", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Экспорт и назначения экспорта не разрешены в улучшениях модуля.", + "Expression_expected_1109": "Ожидалось выражение.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Выражение должно быть заключено в круглые скобки, чтобы его можно было использовать в качестве декоратора.", + "Expression_or_comma_expected_1137": "Ожидалось выражение или запятая.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Выражение создает тип кортежа, который слишком большой для представления.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Выражение создает тип объединения, который слишком сложен для представления.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Разрешение выражения дает идентификатор \"_super\", который используется компилятором для получения ссылки на базовый класс.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Выражение разрешается в объявление переменной \"_newTarget\", которое компилятор использует для получения ссылки на метасвойство \"new.target\".", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Разрешение выражения дает объявление переменной \"_this\", которое используется компилятором для получения ссылки this.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Тип выражения не может быть выведен с помощью --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Предложение Extends не может содержать выражение с --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Предложение extends для выведенного типа \" {0} \" имеет или использует частное имя \" {1} \".", + "Extract_base_class_to_variable_90064": "Извлечь базовый класс в переменную", + "Extract_binding_expressions_to_variable_90066": "Извлечь выражения привязки в переменную", + "Extract_constant_95006": "Извлечь константу", + "Extract_default_export_to_variable_90065": "Извлечение экспорта по умолчанию в переменную", + "Extract_function_95005": "Извлечь функцию", + "Extract_to_0_in_1_95004": "Извлечь в {0} в {1}", + "Extract_to_0_in_1_scope_95008": "Извлечь в {0} в области {1}", + "Extract_to_0_in_enclosing_scope_95007": "Извлечь в {0} во включающей области", + "Extract_to_interface_95090": "Извлечь в интерфейс", + "Extract_to_type_alias_95078": "Извлечь в псевдоним типа", + "Extract_to_typedef_95079": "Извлечь в typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Извлечь в переменную и заменить на \"{0} как typeof {0}\"", + "Extract_type_95077": "Тип Extract", + "FILE_6035": "ФАЙЛ", + "FILE_OR_DIRECTORY_6040": "Файл или каталог", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "Не удалось найти peerDependency \"{0}\".", + "Failed_to_resolve_under_condition_0_6415": "Не удалось разрешить при условии \"{0}\".", + "Fallthrough_case_in_switch_7029": "Случай передачи управления в операторе switch.", + "File_0_does_not_exist_6096": "Файл \"{0}\" не существует.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Согласно ранее кэшированным поискам, файл \"{0}\" не существует.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Согласно ранее кэшированным поискам, файл \"{0}\" существует.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Файл \"{0}\" существует — используйте его как результат разрешения имени.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Файл \"{0}\" имеет неподдерживаемое расширение. Поддерживаются только следующие расширения: {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" является файлом JavaScript. Вы хотели включить параметр \"allowJs\"?", + "File_0_is_not_a_module_2306": "Файл \"{0}\" не является модулем.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Файл \"{0}\" отсутствует в списке файлов проекта \"{1}\". Проекты должны перечислять все файлы или использовать шаблон включения.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Файл \"{0}\" отсутствует в \"rootDir\" \"{1}\". Все исходные файлы должны находиться в каталоге \"rootDir\".", + "File_0_not_found_6053": "Файл \"{0}\" не найден.", + "File_Layout_6284": "Макет файла", + "File_Management_6245": "Управление файлами", + "File_appears_to_be_binary_1490": "Файл выглядит двоичным.", + "File_change_detected_Starting_incremental_compilation_6032": "Обнаружено изменение в файле. Запускается инкрементная компиляция...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Файл является модулем CommonJS, так как \"{0}\" не содержит поле \"type\"", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Файл является модулем CommonJS, так как \"{0}\" содержит поле \"type\", значение которого отличается от \"module\"", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Файл является модулем CommonJS, так как \"package.json\" не найден", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Файл является модулем ECMAScript, так как \"{0}\" содержит поле \"type\" со значением \"module\"", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Файл является модулем CommonJS. Его можно преобразовать в модуль ES.", + "File_is_default_library_for_target_specified_here_1426": "Файл является библиотекой по умолчанию для указанного здесь целевого объекта.", + "File_is_entry_point_of_type_library_specified_here_1419": "Файл является точкой входа для указанной здесь библиотеки типов.", + "File_is_included_via_import_here_1399": "Файл включается с помощью импорта.", + "File_is_included_via_library_reference_here_1406": "Файл включается с помощью ссылки на библиотеку.", + "File_is_included_via_reference_here_1401": "Файл включается с помощью ссылки.", + "File_is_included_via_type_library_reference_here_1404": "Файл включается с помощью ссылки на библиотеку типов.", + "File_is_library_specified_here_1423": "Файл представляет собой указанную здесь библиотеку.", + "File_is_matched_by_files_list_specified_here_1410": "Файл соответствует указанному здесь списку \"files\".", + "File_is_matched_by_include_pattern_specified_here_1408": "Файл соответствует указанному здесь шаблону включения.", + "File_is_output_from_referenced_project_specified_here_1413": "Файл представляет собой выходные данные для указанного здесь проекта, на который указывает ссылка.", + "File_is_output_of_project_reference_source_0_1428": "Файл представляет собой выходные данные для источника ссылки на проект \"{0}\"", + "File_is_source_from_referenced_project_specified_here_1416": "Файл представляет собой источник для указанного здесь проекта, на который указывает ссылка.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Файл с именем \"{0}\" отличается от уже включенного файла с именем \"{1}\" только регистром.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Имя файла \"{0}\" имеет расширение \"{1}\" — поиск \"{2}\".", + "File_name_0_has_a_1_extension_stripping_it_6132": "У имени файла \"{0}\" есть расширение \"{1}\"; расширение удаляется.", + "File_redirects_to_file_0_1429": "Файл перенаправляется в файл \"{0}\"", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Спецификация файла не может содержать родительский каталог (\"..\"), который указывается после рекурсивного подстановочного знака каталога (\"**\"): \"{0}\".", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Спецификация файла не может заканчиваться рекурсивным подстановочным знаком каталога (\"**\"): \"{0}\".", + "Filters_results_from_the_include_option_6627": "Фильтрует результаты в параметре \"включить\".", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Исправить все обнаруженные синтаксические ошибки", + "Fix_all_expressions_possibly_missing_await_95085": "Исправить все выражения, где может отсутствовать \"await\"", + "Fix_all_implicit_this_errors_95107": "Исправить все ошибки неявного this", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Исправьте все неправильные возвращаемые типы асинхронных функций.", + "Fix_all_with_type_only_imports_95182": "Исправить все с помощью импорта только по типу", + "For_nodejs_Colon_6287": "Для nodejs:", + "Found_0_errors_6217": "Найдено ошибок: {0}.", + "Found_0_errors_Watching_for_file_changes_6194": "Найдено ошибок: {0}. Отслеживаются изменения в файлах.", + "Found_0_errors_in_1_files_6261": "Обнаружены ошибки ({0}) в файлах ({1}).", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Обнаружены {0} ошибки в этом же файле, начиная с: {1}", + "Found_1_error_6216": "Найдено ошибок: 1.", + "Found_1_error_Watching_for_file_changes_6193": "Найдена одна ошибка. Отслеживаются изменения в файлах.", + "Found_1_error_in_0_6259": "Обнаружена 1 ошибка в {0}", + "Found_package_json_at_0_6099": "Обнаружен package.json в \"{0}\".", + "Found_peerDependency_0_with_1_version_6282": "Обнаружена peerDependency \"{0}\" с версией \"{1}\".", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\".", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Определения класса автоматически появляются в строгом режиме.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Объявления функций не допускаются внутри блоков в строгом режиме при настройке \"ES5\". Модули автоматически появляются в строгом режиме.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Выражение функции, у которого нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Реализация функции отсутствует либо не идет сразу после объявления.", + "Function_implementation_name_must_be_0_2389": "Имя реализации функции должно иметь значение \"{0}\".", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Функция неявно имеет тип возвращаемого значения any, так как у нее нет заметки с типом возвращаемого значения, а также на нее прямо или косвенно указывает ссылка в одном из ее выражений \"return\".", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "В функции отсутствует завершающий оператор return, а тип возвращаемого значения не включает \"undefined\".", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Функция должна иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", + "Function_not_implemented_95159": "Функция не реализована.", + "Function_overload_must_be_static_2387": "Перегрузка функции должна быть статической.", + "Function_overload_must_not_be_static_2388": "Перегрузка функции не должна быть статической.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "При использовании в типе объединения нотация типа функции должна быть заключена в круглые скобки.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "При использовании в типе пересечения нотация типа функции должна быть заключена в круглые скобки.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Тип функции, у которого нет заметки с типом возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Функция с телом может объединяться только с классами, которые являются внешними.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Создание D.ts-файлов из файлов TypeScript и JavaScript в проекте.", + "Generate_get_and_set_accessors_95046": "Создать методы доступа get и set", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Создать методы доступа get и set для всех переопределяемых свойств", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Создает профиль ЦП.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Создает сопоставитель с исходным кодом для каждого соответствующего файла \".d.ts\".", + "Generates_an_event_trace_and_a_list_of_types_6237": "Создает трассировку событий и список типов.", + "Generates_corresponding_d_ts_file_6002": "Создает соответствующий D.TS-файл.", + "Generates_corresponding_map_file_6043": "Создает соответствующий файл с расширением \".map\".", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Генератор неявно имеет тип ресурса \"{0}\". Рекомендуется предоставить аннотацию возвращаемого типа.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Генераторы не разрешается использовать в окружающем контексте.", + "Generic_type_0_requires_1_type_argument_s_2314": "Универсальный тип \"{0}\" требует следующее число аргументов типа: {1}.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Универсальный тип \"{0}\" требует аргументы типа от {1} до {2}.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Глобальные операции экспорта модуля могут появиться только на верхнем уровне.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Глобальные операции экспорта модуля могут появиться только в файлах объявления.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Глобальные операции экспорта модуля могут появиться только в файлах модуля.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Глобальный тип \"{0}\" должен быть классом или интерфейсом.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Глобальный тип \"{0}\" должен иметь следующее число параметров типа: {1}.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Сделайте так, чтобы повторные компиляции в \"--incremental\" и \"--watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Сделайте так, чтобы повторные компиляции в проектах, в которых используются режимы \"incremental\" и \"watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.", + "Hexadecimal_digit_expected_1125": "Ожидалась шестнадцатеричная цифра.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Требуется идентификатор. \"{0}\" является зарезервированным словом на верхнем уровне модуля.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме. Определения классов автоматически находятся в строгом режиме.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме. Модули автоматически находятся в строгом режиме.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Ожидается идентификатор. \"{0}\" — это зарезервированное слово, которое не может быть использовано здесь.", + "Identifier_expected_1003": "Ожидался идентификатор.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Ожидался идентификатор. Значение \"__esModule\" зарезервировано как экспортируемый маркер при преобразовании модулей ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Ожидался идентификатор или строковый литерал.", + "Identifier_string_literal_or_number_literal_expected_1496": "Ожидается идентификатор, строковый или числовой литерал.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Если пакет \"{0}\" фактически предоставляет этот модуль, рекомендуется отправить запрос на вытягивание, чтобы изменить \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Если пакет \"{0}\" действительно предоставляет этот модуль, попробуйте добавить новый файл объявления (. d. TS), содержащий \"declare module\" \"{1}\";`", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", + "Ignore_this_error_message_90019": "Пропустите это сообщение об ошибке", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Пропускает tsconfig.json, компилирует указанные файлы с параметрами компилятора по умолчанию", + "Implement_all_inherited_abstract_classes_95040": "Реализовать все унаследованные абстрактные классы", + "Implement_all_unimplemented_interfaces_95032": "Реализовать все нереализованные интерфейсы", + "Implement_inherited_abstract_class_90007": "Реализуйте наследуемый абстрактный класс", + "Implement_interface_0_90006": "Реализуйте интерфейс \"{0}\"", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Предложение Implements экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Неявное преобразование \"symbol\" в \"string\" приведет к сбою во время выполнения. Рекомендуется заключить это выражение в \"String(...)\".", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Импорт \"{0}\" конфликтует с глобальным значением, используемым в этом файле, поэтому его необходимо объявить с импортом только по типу, когда включен \"isolatedModules\".", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Импорт \"{0}\" конфликтует с локальным значением, поэтому его необходимо объявить с импортом только по типу, если включен \"isolatedModules\".", + "Import_0_from_1_90013": "Импорт \"{0}\" из \"{1}\"", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Значения утверждения импорта должны быть выражениями строковых литералов.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Утверждения импорта не допускаются для операторов, которые компилируются в вызовы \"require\" CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Утверждения импорта поддерживаются только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Утверждения импорта не могут использоваться с импортом или экспортом, затрагивающими только тип.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Утверждения импорта заменены атрибутами импорта. Используйте \"with\" вместо \"assert\".", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Назначение импорта невозможно использовать при разработке для модулей ECMAScript. Попробуйте использовать \"import * as ns from \"mod\", \"import {a} from \"mod\", \"import d from \"mod\" или другой формат модуля.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Значения атрибутов импорта должны быть строковыми литеральными выражениями.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Атрибуты импорта не разрешены в операторах, которые компилируются в вызовы \"require\" CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Атрибуты импорта поддерживаются только в том случае, если для параметра \"--module\" задано значение \"esnext\", \"node18\", \"node20\", \"nodenext\" или \"preserve\".", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Атрибуты импорта нельзя использовать с импортом или экспортом только по типу.", + "Import_declaration_0_is_using_private_name_1_4000": "Объявление импорта \"{0}\" использует закрытое имя \"{1}\".", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Объявление импорта конфликтует с локальным объявлением \"{0}\".", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Объявления импорта в пространстве имен не могут иметь ссылки на модуль.", + "Import_emit_helpers_from_tslib_6139": "Импорт вспомогательных объектов, участвующих в порождении, из \"tslib\".", + "Import_may_be_converted_to_a_default_import_80003": "Импорт можно преобразовать в импорт по умолчанию.", + "Import_name_cannot_be_0_2438": "Имя импорта не может иметь значение \"{0}\".", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Объявление импорта или экспорта во объявлении окружающего модуля не может иметь ссылки на модуль через относительное имя модуля.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Описатель импорта \"{0}\" не существует в области package.json по пути \"{1}\".", + "Imported_via_0_from_file_1_1393": "Импортировано с помощью {0} из файла \"{1}\".", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Импортировано с помощью {0} из файла \"{1}\" для импорта \"importHelpers\", как указано в compilerOptions.", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Импортировано с помощью {0} из файла \"{1}\" для импорта функций фабрики \"jsx\" и \"jsxs\".", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\".", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта \"importHelpers\", как указано в compilerOptions.", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта функций фабрики \"jsx\" и \"jsxs\".", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Для импорта JSON-файла в модуль ECMAScript требуется атрибут импорта \"type: json\", если для \"module\" задано значение \"{0}\".", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Операции импорта запрещены в улучшениях модуля. Попробуйте переместить их в содержащий внешний модуль.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Во внешних объявлениях перечислений инициализатор элемента должен быть константным выражением.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "В перечислении с несколькими объявлениями только одно объявление может опустить инициализатор для своего первого элемента перечисления.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Включить список файлов. Не поддерживает шаблоны стандартной маски, в отличие от \"include\".", + "Include_modules_imported_with_json_extension_6197": "Включать модули, импортированные с расширением .json", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Включить исходный код в исходные карты в создаваемом файле JavaScript.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Включить файлы исходных карт в создаваемый код JavaScript.", + "Includes_imports_of_types_referenced_by_0_90054": "Включает импорт типов, на которые ссылается \"{0}\"", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "При включении --watch, -w начнет отслеживание изменений файла в текущем проекте. После установки можно настроить режим просмотра с помощью:", + "Incomplete_quantifier_Digit_expected_1505": "Неполный квантификатор. Ожидалась цифра.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "В типе \"{1}\" отсутствует сигнатура индекса для типа \"{0}\".", + "Index_signature_in_type_0_only_permits_reading_2542": "Сигнатура индекса в типе \"{0}\" разрешает только чтение.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Все отдельные объявления в объединенном объявлении \"{0}\" должны быть экспортированными или локальными.", + "Infer_all_types_from_usage_95023": "Вывести все типы исходя из использования", + "Infer_function_return_type_95148": "Вывод типа возвращаемого значения функции", + "Infer_parameter_types_from_usage_95012": "Выведите типы параметров на основании их использования", + "Infer_this_type_of_0_from_usage_95080": "Определить тип \"this\" для \"{0}\" из использования", + "Infer_type_of_0_from_usage_95011": "Выведите тип \"{0}\" на основании его использования", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Вывод из выражений класса не поддерживается с использованием --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Инициализируйте свойство \"{0}\" в конструкторе", + "Initialize_static_property_0_90021": "Инициализируйте статическое свойство \"{0}\"", + "Initializer_for_property_0_2811": "Инициализатор для свойства \"{0}\"", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Инициализаторы не разрешены в окружающих контекстах.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Инициализирует проект TypeScript и создает файл \"tsconfig.json\".", + "Inline_variable_95184": "Встроенная переменная", + "Insert_command_line_options_and_files_from_a_file_6030": "Вставка параметров командной строки и файлов из файла.", + "Install_0_95014": "Установить \"{0}\"", + "Install_all_missing_types_packages_95033": "Установить все отсутствующие пакеты типов", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Интерфейс \"{0}\" не может одновременно расширить типы \"{1}\" и \"{2}\".", + "Interface_0_incorrectly_extends_interface_1_2430": "Интерфейс \"{0}\" неправильно расширяет интерфейс \"{1}\".", + "Interface_declaration_cannot_have_implements_clause_1176": "Объявление интерфейса не может иметь предложение implements.", + "Interface_must_be_given_a_name_1438": "Интерфейсу должно быть присвоено имя.", + "Interface_name_cannot_be_0_2427": "Имя интерфейса не может иметь значение \"{0}\".", + "Interop_Constraints_6252": "Ограничения взаимодействия", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Интерпретируйте необязательные типы свойств так, как они написаны, а не добавляйте неопределенное значение.", + "Invalid_character_1127": "Недопустимый символ.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Недопустимый описатель импорта \"{0}\" не имеет возможных разрешений.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Недопустимое имя модуля в приращении. Модуль \"{0}\" разрешается в модуль без типа в \"{1}\", который невозможно дополнить.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Недопустимое имя модуля в улучшении, не удается найти модуль \"{0}\".", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Недопустимая необязательная цепочка из нового выражения. Вы хотели вызвать ''{0}()''?", + "Invalid_reference_directive_syntax_1084": "Недопустимый синтаксис директивы reference.", + "Invalid_syntax_in_decorator_1498": "Недопустимый синтаксис в декораторе.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Недопустимое использование \"{0}\". Его нельзя использовать внутри статического блока класса.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Недопустимое использование \"{0}\". Модули автоматически находятся в строгом режиме.", + "Invalid_use_of_0_in_strict_mode_1100": "Недопустимое использование \"{0}\" в строгом режиме.", + "Invalid_value_for_ignoreDeprecations_5103": "Недопустимое значение для \"--ignoreDeprecations\".", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Недопустимое значение для jsxFactory. \"{0}\" не является допустимым идентификатором или полным именем.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Недопустимое значение \"jsxFragmentFactory\". \"{0}\" не является допустимым идентификатором или полным именем.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Недопустимое значение для \"--reactNamespace\". \"{0}\" не является допустимым идентификатором.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Вероятно, не хватает запятой, разделяющей эти два выражения шаблона. Они формируют выражение шаблона с тегами, которое не может быть вызвано.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Тип элемента \"{0}\" не является допустимым элементом JSX.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Тип экземпляра \"{0}\" не является допустимым элементом JSX.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Тип возвращаемого значения \"{0}\" не является допустимым элементом JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Его тип \"{0}\" не является допустимым типом элемента JSX.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Параметр \"@{0} {1}\" JSDoc не соответствует предложению \"extends {2}\".", + "JSDoc_0_is_not_attached_to_a_class_8022": "Параметр \"@{0}\" JSDoc не связан с классом.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" может использоваться только в последнем параметре сигнатуры.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "У тега \"@param\" JSDoc есть имя \"{0}\", но параметр с таким именем отсутствует.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Тег \"@param\" JSDoc имеет имя \"{0}\", но параметра с таким именем не существует. Он совпадал бы с \"arguments\", если бы у него был указан тип массива.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc можно преобразовать в тип TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "У тега \"@typedef\" JSDoc должна быть аннотация типа, или после него должны стоять теги \"@property\" или \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Определения типов JSDoc можно преобразовать в типы TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Типы JSDoc можно использовать только в комментариях в документации.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Типы JSDoc могут быть преобразованы в типы TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Атрибутам JSX должно назначаться только непустое \"expression\".", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Элемент JSX \"{0}\" не содержит соответствующий закрывающий тег.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Класс элементов JSX не поддерживает атрибуты, так как не имеет свойства \"{0}\".", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Элемент JSX неявно имеет тип \"any\", так как интерфейс \"JSX.{0}\" не существует.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Элемент JSX неявно имеет тип any, так как глобальный тип \"JSX.Element\" не существует.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Тип элемента JSX \"{0}\" не имеет конструкций или сигнатур вызова.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Элементы JSX не могут иметь несколько атрибутов с одним именем.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Выражения JSX не могут использовать оператор \"запятая\". Возможно, вы хотели выполнить запись в массив?", + "JSX_expressions_must_have_one_parent_element_2657": "Выражения JSX должны иметь один родительский элемент.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Фрагмент JSX не имеет соответствующего закрывающего тега.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Выражения доступа к свойствам JSX не могут содержать имена пространств имен JSX", + "JSX_spread_child_must_be_an_array_type_2609": "Дочерний объект расширения JSX должен иметь тип массива.", + "JavaScript_Support_6247": "Поддержка JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "Целевой объект перехода не может находиться за границей функции.", + "KIND_6034": "ВИД", + "Keywords_cannot_contain_escape_characters_1260": "Ключевые слова не могут содержать escape-символы.", + "LOCATION_6037": "РАСПОЛОЖЕНИЕ", + "Language_and_Environment_6254": "Язык и среда", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Сторона оператора слева от запятой не используется и не имеет побочных эффектов.", + "Library_0_specified_in_compilerOptions_1422": "Библиотека \"{0}\", указанная в compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Библиотека, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"", + "Line_break_not_permitted_here_1142": "Здесь запрещено использовать разрыв строки.", + "Line_terminator_not_permitted_before_arrow_1200": "Перед стрелкой запрещен символ завершения строки.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Список суффиксов имен файлов для поиска при разрешении модуля.", + "List_of_folders_to_include_type_definitions_from_6161": "Список папок, определения типов из которых будут включены.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Список корневых папок, объединенное содержимое которых представляет структуру проекта во время выполнения.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Загружается \"{0}\" из корневого каталога \"{1}\"; расположение кандидата: \"{2}\".", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Загрузка модуля \"{0}\" из папки \"node_modules\", типы целевых файлов: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Загрузка модуля как файла или папки, расположение модуля-кандидата \"{0}\", целевые типы файлов: {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Пути к журналу, используемые в процессе \"moduleResolution\".", + "Longest_matching_prefix_for_0_is_1_6108": "Самый длинный соответствующий префикс для \"{0}\": \"{1}\".", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Поиск в папке node_modules; первоначальное расположение: \"{0}\".", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Сделать все вызовы \"super()\" первой инструкцией в конструкторе", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Сделать так, чтобы keyof возвращал только строки, а не строки, числа или символы. Устаревший вариант.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Сделайте вызов \"super()\" первой инструкцией в конструкторе", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Сопоставленный объект неявно имеет тип шаблона \"любой\".", + "Mark_array_literal_as_const_90070": "Пометить литерал массива как константу", + "Matched_0_condition_1_6403": "Соответствие: \"{0}\", условие: \"{1}\".", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Сопоставление по умолчанию включает шаблон '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Соответствует шаблону включения \"{0}\" в \"{1}\".", + "Member_0_implicitly_has_an_1_type_7008": "Элемент \"{0}\" неявно имеет тип \"{1}\".", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Член \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", + "Merge_conflict_marker_encountered_1185": "Встретилась отметка о конфликте слияния.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Объединенное объявление \"{0}\" не может включать объявление экспорта по умолчанию. Рекомендуется добавить вместо него отдельное объявление \"export default {0}\".", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Метасвойство \"{0}\" разрешено только в тексте объявления функции, выражения функции или конструктора.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Метод \"{0}\" не может иметь реализацию, так как он отмечен в качестве абстрактного.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Метод \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Метод \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Метод должен иметь явную аннотацию типа возвращаемого значения с --isolatedDeclarations.", + "Method_not_implemented_95158": "Метод не реализован.", + "Modifiers_cannot_appear_here_1184": "Здесь невозможно использовать модификаторы.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Модуль \"{0}\" можно только импортировать по умолчанию с помощью флага \"{1}\"", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Не удается импортировать модуль \"{0}\" с помощью этой конструкции. Описатель разрешается только в модуль ES, который нельзя импортировать с помощью \"require\". Вместо этого используйте импорт ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Модуль \"{0}\" объявляет \"{1}\" локально, но он экспортируется как \"{2}\".", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Модуль \"{0}\" объявляет \"{1}\" локально, но он не экспортируется.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Модуль \"{0}\" не ссылается на тип, но используется здесь как тип. Возможно, вы хотели использовать \"typeof import('{0}')\"?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Модуль \"{0}\" не ссылается на значение, но используется здесь как значение.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Модуль {0} уже экспортировал элемент с именем \"{1}\". Попробуйте явно повторно экспортировать его, чтобы устранить неоднозначность.", + "Module_0_has_no_default_export_1192": "У модуля \"{0}\" нет экспорта по умолчанию.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "В модуле \"{0}\" нет экспорта по умолчанию. Возможно, вы хотели вместо этого использовать \"import { {1} } from {0}\"?", + "Module_0_has_no_exported_member_1_2305": "Модуль \"{0}\" не имеет экспортированного элемента \"{1}\".", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "В модуле \"{0}\" нет экспортированного члена \"{1}\". Возможно, вы хотели вместо этого использовать \"import {1} from {0}\"?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Модуль \"{0}\" скрыт локальным объявлением с таким же именем.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Модуль \"{0}\" использует параметр \"export =\" и не может использоваться с параметром \"export *\".", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Модуль \"{0}\" был разрешен как локально объявленный окружающий модуль в файле \"{1}\".", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Модуль \"{0}\" разрешен в \"{1}\", но \"--allowArbitraryExtensions\" не установлен.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--jsx\" не задан.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--resolveJsonModule\" не используется.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Имена объявлений модулей могут использовать только строки в кавычках «» или \"\".", + "Module_name_0_matched_pattern_1_6092": "Имя модуля \"{0}\", соответствующий шаблон \"{1}\".", + "Module_name_0_was_not_resolved_6090": "======== Имя модуля \"{0}\" не было разрешено. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\". ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\" с идентификатором пакета \"{2}\". ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Тип разрешения модуля не указан, используется \"{0}\".", + "Module_resolution_using_rootDirs_has_failed_6111": "Произошел сбой при разрешении модуля с помощью \"rootDirs\".", + "Modules_6244": "Модули", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Переместить модификаторы элементов маркированного кортежа в метки", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Переместите выражение из экспорта по умолчанию в переменную и добавьте к нему аннотацию типа.", + "Move_to_a_new_file_95049": "Переместить в новый файл", + "Move_to_file_95178": "Переместить в файл", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Использовать несколько последовательных числовых разделителей запрещено.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Не разрешается использование нескольких реализаций конструкторов.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "НОВАЯ СТРОКА", + "Name_is_not_valid_95136": "Недопустимое имя", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Именованные группы захвата доступны только при настройке \"ES2018\" или более поздней версии.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Именованные группы захвата с одинаковым именем должны быть взаимоисключающими.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Именованные импорты не разрешены в отложенном импорте.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Именованный импорт из файла JSON в модуль ECMAScript не допускается, если для параметра \"module\" установлено значение \"{0}\".", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Именованное свойство \"{0}\" содержит типы \"{1}\" и \"{2}\", которые не являются идентичными.", + "Namespace_0_has_no_exported_member_1_2694": "Пространство имен \"{0}\" не содержит экспортированный элемент \"{1}\".", + "Namespace_must_be_given_a_name_1437": "Пространству имен должно быть задано имя.", + "Namespace_name_cannot_be_0_2819": "Имя пространства имен не может быть \"{0}\".", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Пространства имен не допускаются в глобальных файлах сценариев, если включено \"{0}\". Если этот файл не предназначен для использования в качестве глобального сценария, установите для параметра \"moduleDetection\" значение \"force\" или добавьте пустой оператор \"export {}\".", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "К параметрам \"this\" нельзя применять декораторы и модификаторы.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Ни один конструктор базового класса не имеет указанного числа аргументов типа.", + "No_constituent_of_type_0_is_callable_2755": "Нет составляющей типа \"{0}\", которую можно вызвать.", + "No_constituent_of_type_0_is_constructable_2759": "Нет составляющей типа \"{0}\", которую можно создать.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "В типе \"{1}\" не обнаружена сигнатура индекса с параметром типа \"{0}\".", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Не удалось найти входные данные в файле конфигурации \"{0}\". Указанные пути \"include\": \"{1}\", пути \"exclude\": \"{2}\".", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Больше не поддерживается. В ранних версиях кодирование текста устанавливалось вручную для чтения файлов.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ни одна перегрузка не ожидает аргументы {0}, но существуют перегрузки, которые ожидают аргументы {1} или {2}.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ни одна перегрузка не ожидает аргументы типа {0}, но существуют перегрузки, которые ожидают аргументы типа {1} или {2}.", + "No_overload_matches_this_call_2769": "Ни одна перегрузка не соответствует этому вызову.", + "No_type_could_be_extracted_from_this_type_node_95134": "Не удалось извлечь тип из этого узла типа.", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Не существует значение в области для собирательного свойства \"{0}\". Либо объявите его, либо укажите инициализатор.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Неабстрактный класс ' {0} ' не реализует унаследованный абстрактный член {1} из класса ' {2} '.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "В неабстрактном классе \"{0}\" отсутствуют реализации следующих элементов \"{1}\": {2} и {3} других.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Выражение неабстрактного класса не реализует унаследованный абстрактный элемент \"{0}\" класса \"{1}\".", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "В выражении неабстрактного класса отсутствуют реализации для следующих элементов \"{0}\": {1} и {2} других.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Утверждения, отличные от NULL, можно использовать только в файлах TypeScript.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Здесь объявлен не простой параметр.", + "Not_all_code_paths_return_a_value_7030": "Не все пути к коду возвращают значение.", + "Not_all_constituents_of_type_0_are_callable_2756": "Не все составляющие типа \"{0}\" можно вызвать.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Не все составляющие типа \"{0}\" можно создать.", + "Numbers_out_of_order_in_quantifier_1506": "Неупорядоченные числа в квантификаторе.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Числовые литералы с абсолютными значениями, равными 2^53 или более, слишком велики для точного представления в виде целых чисел.", + "Numeric_separators_are_not_allowed_here_6188": "Числовые разделители здесь запрещены.", + "Object_is_of_type_unknown_2571": "Объект имеет тип \"Неизвестный\".", + "Object_is_possibly_null_2531": "Возможно, объект равен null.", + "Object_is_possibly_null_or_undefined_2533": "Возможно, объект равен null или undefined.", + "Object_is_possibly_undefined_2532": "Возможно, объект равен undefined.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Объектный литерал может использовать только известные свойства. \"{0}\" не существует в типе \"{1}\".", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Объектный литерал может указывать только известные свойства, но \"{0}\" не существует в типе \"{1}\". Вы хотели записать \"{2}\"?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Свойство объектного литерала \"{0}\" неявно имеет тип \"{1}\".", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Объекты, содержащие сокращенные свойства, не могут быть выведены с помощью --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Объекты, содержащие назначения распространения, не могут быть выведены с помощью --isolatedDeclarations.", + "Octal_digit_expected_1178": "Ожидалась восьмеричная цифра.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Восьмеричные escape-последовательности и обратные ссылки не допускаются в классе символов. Если это должна быть escape-последовательность, используйте синтаксис \"{0}\".", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Восьмеричные escape-последовательности не допускаются. Используйте синтаксис \"{0}\".", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Восьмеричные литералы не допускаются. Используйте синтаксис \"{0}\".", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Одно значение \"{0}.{1}\" - это строка \"{2}\", а второе предполагается как неизвестное числовое значение.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "В операторе for...in разрешено только одно объявление переменной.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "В операторе for...of разрешено только одно объявление переменной.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "С помощью ключевого слова new можно вызвать только функцию void.", + "Only_ambient_modules_can_use_quoted_names_1035": "Имена в кавычках могут использоваться только во внешних модулях.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Только модули amd и system поддерживаются вместе с --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "С помощью --isolatedDeclarations можно указать только const-массивы.", + "Only_emit_d_ts_declaration_files_6014": "Порождаются только файлы объявлений \".d.ts\".", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Вывод только файлов d.ts, но не файлов JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Через ключевое слово super доступны только общие и защищенные методы базового класса.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Не удается применить операнд \"{0}\" к типу \"{1}\".", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Оператор \"{0}\" невозможно применить к типам \"{1}\" и \"{2}\".", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Операторы не должны быть смешанными внутри класса символов. Вместо этого перенесите его во вложенный класс.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Отключить проект от проверки ссылок на несколько проектов при редактировании.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Параметр \"{0}={1}\" удален. Удалите его из конфигурации.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Параметр \"{0}={1}\" является нерекомендуемым и перестанет работать в TypeScript {2}. Укажите compilerOption \"\"ignoreDeprecations\": \"{3}\"\", чтобы отключить эту ошибку.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"false\" или \"null\" для этого параметра в командной строке.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"null\" для этого параметра в командной строке.", + "Option_0_can_only_be_specified_on_command_line_6266": "Параметр \"{0}\" может быть указан только в командной строке.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Параметр \"{0}\" можно использовать только при указании \"--inlineSourceMap\" или \"--sourceMap\".", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Опцию \"{0}\" можно использовать, только если для параметра \"moduleResolution\" установлено значение \"node16\", \"nodenext\" или \"bundler\".", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "Опцию \"{0}\" можно использовать только в том случае, если для параметра \"module\" установлено значение \"preserve\", \"commonjs\", \"es2015\" или более поздней версии.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Параметр \"{0}\" не может быть указан, если параметр jsx имеет значение \"{1}\".", + "Option_0_cannot_be_specified_with_option_1_5053": "Параметр \"{0}\" невозможно указать с помощью параметра \"{1}\".", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Параметр \"{0}\" невозможно указать без указания параметра \"{1}\".", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Параметр \"{0}\" нельзя указывать без указания параметра \"{1}\" или \"{2}\".", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Параметр \"{0}\" удален. Удалите его из конфигурации.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Параметр \"{0}\" является нерекомендуемым и перестанет работать в TypeScript {1}. Укажите compilerOption \"\"ignoreDeprecations\": \"{2}\"\", чтобы отключить эту ошибку.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Параметр \"{0}\" является избыточным и не может быть указан с параметром \"{1}\".", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "Параметр allowImportingTsExtensions можно использовать только при настройке одного из вариантов: noEmit, emitDeclarationOnly или rewriteRelativeImportExtensions.", + "Option_build_must_be_the_first_command_line_argument_6369": "Параметр \"--build\" должен быть первым аргументом командной строки.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Параметр isolatedModules можно использовать, только если указан параметр --module или если параметр target — ES2015 или выше.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Для параметра \"moduleResolution\" должно быть установлено (или оставлено неопределенным) значение \"{0}\", если для параметра \"module\" установлено значение \"{1}\".", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Для параметра \"module\" должно быть установлено значение \"{0}\", если для параметра \"moduleResolution\" установлено значение \"{1}\".", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Параметр \"preserveConstEnums\" нельзя отключить, если включен параметр \"{0}\".", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Параметр project не может быть указан вместе с исходными файлами в командной строке.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Параметр \"--resolveJsonModule\" нельзя указать, если для параметра \"moduleResolution\" установлено значение \"classic\".", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Параметр \"--resolveJsonModule\" не может быть указан, если для параметра \"module\" установлено значение \"none\", \"system\" или \"umd\".", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Параметр \"verbatimModuleSyntax\" нельзя использовать, если для параметра \"module\" установлено значение \"UMD\", \"AMD\" или \"System\".", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "Параметры \"{0}\" и \"{1}\" не могут использоваться одновременно.", + "Options_Colon_6027": "Параметры:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Прочие выходные данные", + "Output_Formatting_6256": "Форматирование выходных данных", + "Output_compiler_performance_information_after_building_6615": "Вывод сведений о производительности компиляторов после сборки.", + "Output_directory_for_generated_declaration_files_6166": "Выходной каталог для создаваемых файлов объявления.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Выходной файл \"{0}\" не создан из исходного файла \"{1}\".", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как указан \"{1}\".", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как для параметра \"--module\" указано значение \"none\".", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Вывод более подробных сведений о производительности компиляторов после сборки.", + "Overload_0_of_1_2_gave_the_following_error_2772": "Перегрузка {0} из {1}, \"{2}\", возвратила следующую ошибку.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Сигнатуры перегрузки должны быть абстрактными или неабстрактными.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Все сигнатуры перегрузки должны быть либо внешними, либо не внешними.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Сигнатуры перегрузки должны быть экспортированы и не экспортированы.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Все сигнатуры перегрузки должны быть либо необязательными, либо обязательными.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Все сигнатуры перегрузки должны быть либо общими, либо закрытыми, либо защищенными.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Параметр \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный после него.", + "Parameter_0_cannot_reference_itself_2372": "Параметр \"{0}\" не может ссылаться сам на себя.", + "Parameter_0_implicitly_has_an_1_type_7006": "Параметр \"{0}\" неявно имеет тип \"{1}\".", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Параметр \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Параметр \"{0}\" находится в позиции, отличной от позиции параметра \"{1}\".", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Параметр \"{0}\" метода доступа имеет или использует имя \"{1}\" из внешнего модуля \"{2}\", но не может быть именован.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Параметр \"{0}\" метода доступа имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Параметр \"{0}\" метода доступа имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Параметр \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Параметр \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Параметр \"{0}\" конструктора из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Параметр \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Параметр \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Параметр \"{0}\" экспортированной функции имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Параметр \"{0}\" экспортированной функции имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Параметр \"{0}\" экспортированной функции имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Параметр \"{0}\" сигнатуры индекса из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Параметр \"{0}\" сигнатуры индекса из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Параметр \"{0}\" метода из экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Параметр \"{0}\" метода из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Параметр \"{0}\" общего метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Параметр \"{0}\" общего статического метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Параметр не может содержать вопросительный знак и инициализатор.", + "Parameter_declaration_expected_1138": "Ожидалось объявление параметра.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Параметр имеет имя, но не тип. Возможно, вы хотели использовать \"{0}: {1}\"?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Модификаторы параметров можно использовать только в файлах TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Параметр должен иметь явную аннотацию типа с --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Тип параметра открытого метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Анализ в строгом режиме и создание директивы \"use strict\" для каждого исходного файла.", + "Part_of_files_list_in_tsconfig_json_1409": "Часть списка \"files\" в tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Шаблон \"{0}\" может содержать не больше одного символа \"*\".", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Временные показатели производительности для параметров \"--diagnostics\" и \"--extendedDiagnostics\" недоступны в этом сеансе. Не удалось найти стандартную реализацию API веб-производительности.", + "Platform_specific_6912": "Для конкретной платформы", + "Prefix_0_with_an_underscore_90025": "Добавьте к \"{0}\" префикс — символ подчеркивания", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Добавить ко всем неправильным объявлениям свойств префикс \"declare\"", + "Prefix_all_unused_declarations_with_where_possible_95025": "Добавить префикс \"_\" ко всем неиспользуемым объявлениям, где это возможно", + "Prefix_with_declare_95094": "Добавить префикс \"declare\"", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Сохранить неиспользуемые импортированные значения в выходных данных JavaScript, которые в противном случае были бы удалены.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Печать всех файлов, считанных во время компиляции.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Печать файлов, считываемых во время компиляции, включая то, почему он был включен.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Печать имен файлов и причины, по которой они включены в компиляцию.", + "Print_names_of_files_part_of_the_compilation_6155": "Печатать имена файлов, входящих в компиляцию.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Печать имен файлов, которые являются частью компиляции, а затем остановка обработки.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Печатать имена создаваемых файлов, входящих в компиляцию.", + "Print_the_compiler_s_version_6019": "Печать версии компилятора.", + "Print_the_final_configuration_instead_of_building_1350": "Печать окончательной конфигурации вместо создания.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Печать имен созданных файлов после компиляции.", + "Print_this_message_6017": "Напечатайте это сообщение.", + "Private_accessor_was_defined_without_a_getter_2806": "Частный метод доступа был определен без метода получения.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Частное поле \"{0}\" должно быть объявлено во включающем классе.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Закрытые идентификаторы запрещено использовать в объявлениях переменных.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Закрытые идентификаторы запрещено использовать вне тела классов.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Закрытые идентификаторы разрешены только в теле класса и могут использоваться только как часть объявления члена класса, доступа к свойствам или левой стороны выражения \"in\"", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Закрытые идентификаторы доступны только при разработке для ECMAScript 2015 или более поздних версий.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Закрытые идентификаторы не могут использоваться в качестве параметров.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Не удается обратиться к закрытому или защищенному члену \"{0}\" в параметре типа.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" содержит ошибки", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" не была собрана", + "Project_0_is_being_forcibly_rebuilt_6388": "Проект \"{0}\" принудительно перестраивается", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что файл \"{2}\" был корневым файлом компиляции, но больше им не является.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает, что программе необходимо сообщать об ошибках.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Проект \"{0}\" устарел, так как файл buildinfo \"{1}показывает, что некоторые изменения не переданы.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Проект \"{0}\" устарел, поскольку файл buildinfo \"{1}\" указывает на изменения в параметрах компилятора.", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Проект \"{0}\" устарел, так как выходные данные \"{1}\" старше входных данных \"{2}\".", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Проект \"{0}\" требует обновления, так как выходного файла \"{1}\" не существует", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Проект \"{0}\" устарел, так как выходные данные для него были созданы с помощью версии \"{1}\", которая отличается от текущей версии \"{2}\"", + "Project_0_is_up_to_date_6361": "Проект \"{0}\" не требует обновления", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Проект \"{0}\" актуален, так как новейшие входные данные \"{1}\" старше выходных данных \"{2}\".", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Проект \"{0}\" актуален, но требуется обновить метки времени файлов вывода, которые старше файлов ввода.", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Проект \"{0}\" не требует обновления с файлами .d.ts, взятыми из зависимостей проекта", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Ссылки на проект не могут формировать циклический граф. Обнаружен цикл: {0}", + "Projects_6255": "Проекты", + "Projects_in_this_build_Colon_0_6355": "Проекты в этой сборке: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Свойства с модификатором \"accessor\" доступны только при обращении к ECMAScript 2015 и более поздним версиям.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Свойство \"{0}\" не может содержать инициализатор, так как оно помечено как абстрактное.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Свойство \"{0}\" поступает из сигнатуры индекса, поэтому доступ к нему должен осуществляться с помощью [\"{0}\"].", + "Property_0_does_not_exist_on_type_1_2339": "Свойство \"{0}\" не существует в типе \"{1}\".", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Свойство \"{0}\" не существует в типе \"{1}\". Вы имели в виду \"{2}\"?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Свойство \"{0}\" отсутствует в типе \"{1}\". Вы хотели обратиться к статическому элементу \"{2}\"?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Свойство \"{0}\" не существует в типе \"{1}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{2}\" или более поздней версии.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Свойство \"{0}\" не существует в типе \"{1}\". Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в статическом блоке класса.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в конструкторе.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа get не задана заметка с типом возвращаемого значения.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа set не задана заметка с типом параметра.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Свойство \"{0}\" неявно имеет тип \"any\", но из использования можно определить более подходящий тип для его метода доступа get.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Свойство \"{0}\" неявно имеет тип \"any\", но из использования можно определить более подходящий тип для его метода доступа set.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Свойство \"{0}\" в типе \"{1}\" невозможно присвоить тому же свойству в базовом типе \"{2}\".", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Свойство \"{0}\" в типе \"{1}\" не может быть присвоено типу \"{2}\".", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Свойство \"{0}\" в типе \"{1}\" ссылается на другой член, к которому невозможно обратиться из типа \"{2}\".", + "Property_0_is_declared_but_its_value_is_never_read_6138": "Свойство \"{0}\" объявлено, но его значение не было прочитано.", + "Property_0_is_incompatible_with_index_signature_2530": "Свойство \"{0}\" несовместимо с сигнатурой индекса.", + "Property_0_is_missing_in_type_1_2324": "Свойство \"{0}\" отсутствует в типе \"{1}\".", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Свойство \"{0}\" отсутствует в типе \"{1}\" и является обязательным в типе \"{2}\".", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Свойство \"{0}\" недоступно вне класса \"{1}\", так как оно имеет закрытый идентификатор.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Свойство \"{0}\" является необязательным в типе \"{1}\" и обязательным в типе \"{2}\".", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "Свойство \"{0}\" является закрытым и доступно только в классе \"{1}\".", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Свойство \"{0}\" является закрытым в типе \"{1}\" и не является таковым в типе \"{2}\".", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Свойство \"{0}\" защищено и доступно только через экземпляр класса \"{1}\". Это экземпляр класса \"{2}\".", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Свойство \"{0}\" является защищенным и доступно только в классе \"{1}\" и его подклассах.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Свойство \"{0}\" является защищенным, однако тип \"{1}\" не является классом, производным от \"{2}\".", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Свойство \"{0}\" является защищенным в типе \"{1}\" и общим в типе \"{2}\".", + "Property_0_is_used_before_being_assigned_2565": "Свойство \"{0}\" используется перед присваиванием значения.", + "Property_0_is_used_before_its_initialization_2729": "Свойство \"{0}\" используется перед его инициализацией.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Свойство \"{0}\" может не существовать в типе \"{1}\". Вы имели в виду \"{2}\"?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Свойство \"{0}\" атрибута расширения JSX не может быть назначено для целевого свойства.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Свойство \"{0}\" экспортированного типа анонимного класса не может быть частным или защищенным.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Свойство \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Свойство \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Свойство \"{0}\" типа \"{1}\" не может быть назначено типу индекса \"{2}\" \"{3}\".", + "Property_0_was_also_declared_here_2733": "Здесь также было объявлено свойство \"{0}\".", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Свойство \"{0}\" перезапишет базовое свойство в \"{1}\". Если это сделано намеренно, добавьте инициализатор. В противном случае добавьте модификатор \"declare\" или удалите избыточное объявление.", + "Property_assignment_expected_1136": "Ожидалось назначение свойства.", + "Property_destructuring_pattern_expected_1180": "Ожидался шаблон деструктурирования свойства.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Свойство должно иметь явную аннотацию типа с --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Ожидалось свойство или сигнатура.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Значение свойства может быть только строковым или числовым литералом, True, False, Null, объектным литералом либо литералом массива.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Предоставление полой поддержки итераций в \"for-of\", распространении и деструктуризации при настройке \"ES5\".", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Открытый метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Открытый метод \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Общее свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именовано.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Общее свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Общее свойство \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Открытый статический метод \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именовано.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Полное имя \"{0}\" запрещено использовать, если перед ним не стоит \"@param {object} {1}\".", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Возникновение ошибки, если параметр функции не читается.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Вызывать ошибку в выражениях и объявлениях с подразумеваемым типом any.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Вызвать ошибку в выражениях this с неявным типом any.", + "Range_out_of_order_in_character_class_1517": "Диапазон не по порядку в классе символов.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Для повторного экспорта типа при включенном \"{0}\", необходимо использовать \"export type\".", + "React_components_cannot_include_JSX_namespace_names_2639": "Компоненты React не могут включать имена пространств имен JSX.", + "Recommended_Options_6294": "Рекомендуемые параметры", + "Redirect_output_structure_to_the_directory_6006": "Перенаправить структуру вывода в каталог.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Уменьшить количество проектов, автоматически загружаемых с помощью TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "Проект \"{0}\", на который указывает ссылка, не может отключить порождение.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Указанный в ссылке проект \"{0}\" должен иметь следующее значение параметра composite: true.", + "Referenced_via_0_from_file_1_1400": "Ссылка с помощью \"{0}\" из файла \"{1}\"", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если '--moduleResolution' имеет значение 'node16' или 'nodenext'. Рассмотрите возможность добавления расширения к пути импорта.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Относительные пути импорта требуют явных расширений файлов при импорте ECMAScript, если \"--moduleResolution\" имеет значение \"node16\" или \"nodenext\". Вы хотели использовать \"{0}\"?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Удалить список каталогов из процесса просмотра.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Удалить список файлов из обработки в режиме просмотра.", + "Remove_all_unnecessary_override_modifiers_95163": "Удалите все ненужные модификаторы \"override\".", + "Remove_all_unnecessary_uses_of_await_95087": "Удаление всех ненужных случаев использования \"await\"", + "Remove_all_unreachable_code_95051": "Удалить весь недостижимый код", + "Remove_all_unused_labels_95054": "Удалить все неиспользуемые метки", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Удалить скобки из всех тел стрелочных функций с соответствующими проблемами", + "Remove_braces_from_arrow_function_95060": "Удалить скобки из стрелочной функции", + "Remove_braces_from_arrow_function_body_95112": "Удалить скобки из тела стрелочной функции", + "Remove_import_from_0_90005": "Удалить импорт из \"{0}\"", + "Remove_override_modifier_95161": "Удалите модификатор \"override\".", + "Remove_parentheses_95126": "Удалите круглые скобки", + "Remove_template_tag_90011": "Удаление тега шаблона", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Снимите ограничение в 20 МБ на общий размер исходного кода для файлов JavaScript на языковом сервере TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Удаление \"type\" из объявления импорта из \"{0}\"", + "Remove_type_from_import_of_0_from_1_90056": "Удаление \"type\" из импорта \"{0}\" из \"{1}\"", + "Remove_type_parameters_90012": "Удаление параметров типа", + "Remove_unnecessary_await_95086": "Удалить ненужный оператор \"await\"", + "Remove_unreachable_code_95050": "Удалить недостижимый код", + "Remove_unused_declaration_for_Colon_0_90004": "Удаление неиспользуемого объявления для: \"{0}\"", + "Remove_unused_declarations_for_Colon_0_90041": "Удалить неиспользуемые объявления для: \"{0}\"", + "Remove_unused_destructuring_declaration_90039": "Удалить неиспользуемое объявление деструктурирования", + "Remove_unused_label_95053": "Удалить неиспользуемую метку", + "Remove_variable_statement_90010": "Удалить оператор с переменной", + "Rename_param_tag_name_0_to_1_95173": "Переименовать тег \"@param\" с \"{0}\" на \"{1}\"", + "Replace_0_with_Promise_1_90036": "Замените \"{0}\" на \"Promise<{1}>\"", + "Replace_all_unused_infer_with_unknown_90031": "Замена всех неиспользуемых \"infer\" на \"unknown\"", + "Replace_import_with_0_95015": "Замена импорта на \"{0}\".", + "Replace_infer_0_with_unknown_90030": "Замена \"infer {0}\" на \"unknown\"", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Сообщать об ошибке, если не все пути к коду в функции возвращают значение.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Сообщать об ошибках для случаев передачи управления в операторе switch.", + "Report_errors_in_js_files_8019": "Сообщать об ошибках в JS-файлах.", + "Report_errors_on_unused_locals_6134": "Сообщать об ошибках в неиспользованных локальных переменных.", + "Report_errors_on_unused_parameters_6135": "Сообщать об ошибках в неиспользованных параметрах.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Требовать достаточных аннотаций при экспорте, чтобы другие инструменты могли легко создавать файлы объявлений.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Требовать необъявленные свойства из сигнатур индекса для использования доступа к элементам.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Обязательные параметры типа не могут следовать за необязательными параметрами типа.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Разрешение для модуля \"{0}\" найдено в кэше из расположения \"{1}\".", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Разрешение для директивы ссылки на тип \"{0}\" обнаружено в кэше из расположения \"{1}\".", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Разрешение неродственного имени не удалось; пытаюсь отключить современные функции разрешения узлов, чтобы узнать, нуждается ли библиотека npm в обновлении конфигурации.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Не удалось выполнить разрешение относительного имени; выполняется попытка с помощью \"--moduleResolution bundler\", чтобы узнать, требуется ли для проекта обновление конфигурации.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Разрешать \"keyof\" только в имена свойств со строковым значением (не числа и не символы).", + "Resolved_under_condition_0_6414": "Разрешено в условии \"{0}\".", + "Resolving_in_0_mode_with_conditions_1_6402": "Разрешение в режиме {0} с условиями {1}.", + "Resolving_module_0_from_1_6086": "======== Идет разрешение модуля \"{0}\" из \"{1}\". ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Идет разрешение имени модуля \"{0}\" относительного к базовому URL-адресу \"{1}\" — \"{2}\".", + "Resolving_real_path_for_0_result_1_6130": "Разрешается реальный путь для \"{0}\"; результат: \"{1}\".", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Разрешение директивы ссылки на тип \"{0}\", содержащее файл \"{1}\". ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог \"{2}\". ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог не задан. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог \"{1}\". ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог не задан. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Разрешение директивы ссылки на тип для программы, которая указывает собственный типRoots, пропуская поиск в папке \"node_modules\".", + "Resolving_with_primary_search_path_0_6121": "Разрешается с помощью первичного пути поиска \"{0}\".", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Параметр rest \"{0}\" неявно имеет тип any[].", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Параметр rest \"{0}\" неявно имеет тип \"any[]\", но из использования можно определить более подходящий тип.", + "Rest_types_may_only_be_created_from_object_types_2700": "Типы REST можно создавать только из типов объектов.", + "Return_type_annotation_circularly_references_itself_2577": "Заметка с типом возвращаемого значения циклически ссылается на саму себя.", + "Return_type_must_be_inferred_from_a_function_95149": "Тип возвращаемого значения должен быть определен из функции.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Тип возвращаемого значения сигнатуры конструктора из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Тип возвращаемого значения сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Тип возвращаемого значения сигнатуры конструктора должен поддерживать присваивание типу экземпляра класса.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Тип возвращаемого значения экспортированной функции имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Тип возвращаемого значения экспортированной функции имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Тип возвращаемого значения экспортированной функции имеет или использует закрытое имя \"{0}\".", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Тип возвращаемого значения сигнатуры индекса из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Тип возвращаемого значения сигнатуры индекса из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Тип возвращаемого значения метода из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Тип возвращаемого значения метода из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Тип возвращаемого значения открытого метода получения \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Тип возвращаемого значения общего метода из экспортированного класса имеет или использует закрытое имя \"{0}\".", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именован.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Тип возвращаемого значения открытого статического метода получения \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует закрытое имя \"{0}\".", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Повторное использование модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Не разрешено.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\".", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Не разрешено.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Повторное использование модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Не разрешено.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Не разрешено.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".", + "Rewrite_all_as_indexed_access_types_95034": "Перезаписать все как типы с индексным доступом", + "Rewrite_as_the_indexed_access_type_0_90026": "Перезапишите как тип с индексным доступом \"{0}\"", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Перепишите расширения файлов \".ts\", \".tsx\", \".mts\" и \".cts\" в относительных путях импорта на их эквиваленты JavaScript в выходных файлах.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Правый операнд ?? недоступен, поскольку левый операнд никогда не имеет значения NULL.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Корневой каталог невозможно определить, идет пропуск первичных путей поиска.", + "Root_file_specified_for_compilation_1427": "Корневой файл, указанный для компиляции", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "СТРАТЕГИЯ", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Сохраните файлы .tsbuildinfo, чтобы обеспечить возможность добавочной компиляции проектов.", + "Saw_non_matching_condition_0_6405": "Обнаружено несоответствующее условие \"{0}\".", + "Scoped_package_detected_looking_in_0_6182": "Обнаружен пакет, относящийся к области; поиск в \"{0}\"", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Поиск во всех родительских каталогах node_modules резервных расширений: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Поиск предпочтительных расширений во всех родительских каталогах node_modules: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "См. также https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Выделенный фрагмент не является допустимым оператором или операторами.", + "Selection_is_not_a_valid_type_node_95133": "Выбранный элемент не является допустимым узлом типа.", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Задать версию языка файла JavaScript для создаваемого файла JavaScript и включения объявлений совместимых библиотек.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Установить язык сообщений из файла TypeScript. Это не влияет на выпуск.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Задание для параметра \"module\" в файле конфигурации значения \"{0}\"", + "Set_the_newline_character_for_emitting_files_6659": "Установка символа новой строки для созданных файлов.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Задание для параметра \"target\" в файле конфигурации значения \"{0}\"", + "Setters_cannot_return_a_value_2408": "Методы доступа set не могут возвращать значения.", + "Show_all_compiler_options_6169": "Отображение всех параметров компилятора.", + "Show_diagnostic_information_6149": "Отображение сведений диагностики.", + "Show_verbose_diagnostic_information_6150": "Отображение подробных сведений диагностики.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Показать компоненты, которые будут собраны (или удалены, если дополнительно указан параметр \"--clean\")", + "Signature_0_must_be_a_type_predicate_1224": "Сигнатура \"{0}\" должна быть предикатом типа.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Объявления подписей можно использовать только в файлах TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Пропустить создание нижестоящих проектов при ошибке в вышестоящем проекте.", + "Skip_type_checking_all_d_ts_files_6693": "Пропустить проверку типа всех файлов .d.ts", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Пропуск проверки типа файлов D.ts, включенных в файл TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Пропустить проверку типа файлов объявления.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" содержит ошибки", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" не была собрана", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Пропуск модуля \"{0}\", который выглядит как абсолютный URI, целевые типы файлов: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как указан \"{1}\".", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как для параметра \"--module\" указано значение \"none\".", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Число элементов в источнике — {0}, но целевой объект разрешает только {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "Число элементов в источнике — {0}, но целевой объект требует {1}.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Источник не предоставляет соответствия для обязательного элемента в позиции {0} в целевом объекте.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Источник не предоставляет соответствия для элемента с переменным числом аргументов в позиции {0} в целевом объекте.", + "Specify_ECMAScript_target_version_6015": "Укажите целевую версию ECMAScript.", + "Specify_JSX_code_generation_6080": "Укажите способ создания кода JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Укажите файл, который объединяет все выходные данные в один файл JavaScript. Если параметр \"declaration\" имеет значение true, также обозначает файл, который объединяет весь вывод .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Укажите список шаблонов стандартной маски, соответствующих файлам, которые будут включены в компиляцию.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Укажите список включаемых подключаемых модулей языковой службы.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Укажите набор файлов объявлений связанных библиотек, которые описывают целевую среду выполнения.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Укажите набор записей, которые повторно сопоставляют импорт с дополнительными расположениями поиска.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Укажите массив объектов, которые указывают пути для проектов. Используется в ссылках проекта.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Укажите выходную папку для всех выпущенных файлов.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Укажите поведения вывода/проверки для импортов, которые используются только для типов.", + "Specify_file_to_store_incremental_compilation_information_6380": "Указание файла для хранения сведений о добавочной компиляции", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Укажите, как TypeScript ищет файл в заданном описателе модуля.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Укажите способ наблюдения за каталогами в системах, в которых отсутствует рекурсивный просмотр файлов.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Укажите, как работает режим отслеживания TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Укажите файлы библиотек для включения в компиляцию.", + "Specify_module_code_generation_6016": "Укажите способ создания кода модуля.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Укажите спецификатор модуля, используемый для импорта функций множителя JSX при использовании \"jsx: react-jsx*\".", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Укажите несколько папок, которые действуют как \"./node_modules/@types\".", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Укажите один или несколько путей или ссылок на модуль узла для файлов базовой конфигурации, от которых наследуются параметры.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Укажите параметры для автоматического получения файлов объявлений.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Укажите стратегию для создания контрольного значения опроса, когда его не удается создать с использованием событий файловой системы: \"FixedInterval\" (по умолчанию), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Укажите стратегию для наблюдения за каталогом на платформах, не имеющих собственной поддержки рекурсивного наблюдения: \"UseFsEvents\" (по умолчанию), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Укажите стратегию для наблюдения за файлом: \"FixedPollingInterval\" (по умолчанию), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Укажите ссылку на фрагмент JSX, используемую для фрагментов при нацеливании на вывод React JSX, например \"React.Fragment\" или \"Fragment\".", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод JSX \"react\", например \"React.createElement\" или \"h\".", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод React JSX, например \"React.createElement\" или \"h\".", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Укажите функцию фабрики фрагмента JSX, которая будет использоваться при нацеливании порождения JSX \"react\", если указан параметр компилятора \"jsxFactory\", например \"Fragment\".", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Укажите базовый каталог для разрешения не относительных имен модулей.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Укажите окончание последовательности строки для использования при порождении файлов: CRLF (DOS) или LF (UNIX).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Укажите расположение, в котором отладчик должен найти файлы TypeScript вместо исходных расположений.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Укажите расположение, в котором отладчик должен найти файлы карты, вместо созданных расположений.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Укажите максимальную глубину папки, используемую для проверки файлов JavaScript в \"node_modules\". Применимо только в сочетании с \"allowJs\".", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Укажите описатель модуля, который будет использоваться для импорта функций фабрики \"jsx\" и \"jsxs\", например react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Укажите объект, вызванный для \"createElement\". Это применимо только при нацеливании на вывод JSX в \"react\".", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Укажите выходной каталог для создаваемых файлов объявления.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Укажите путь к файлу добавочной компиляции .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Укажите корневой каталог входных файлов. Используйте его для управления структурой выходных каталогов с --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Укажите корневую папку в исходных файлах.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Укажите корневой путь для отладчиков для поиска исходного кода ссылки.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Укажите имена типов пакетов, которые будут включены без ссылки в исходном файле.", + "Specify_what_JSX_code_is_generated_6646": "Укажите, какой код JSX создается.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Укажите, какой подход должен использовать наблюдатель, если наблюдатель за основными файлами вышел из системы.", + "Specify_what_module_code_is_generated_6657": "Укажите создаваемый код модуля.", + "Split_all_invalid_type_only_imports_1367": "Разделение всех недопустимых импортов, затрагивающих только тип", + "Split_into_two_separate_import_declarations_1366": "Разделение на два отдельных объявления импорта", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Оператор расширения в выражениях new доступен только при разработке для ECMAScript 5 и более поздних версий.", + "Spread_types_may_only_be_created_from_object_types_2698": "Типы расширения можно создавать только из типов объектов.", + "Starting_compilation_in_watch_mode_6031": "Запуск компиляции в режиме наблюдения...", + "Statement_expected_1129": "Ожидался оператор.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Операторы не разрешены в окружающих контекстах.", + "Static_members_cannot_reference_class_type_parameters_2302": "Статические элементы не могут ссылаться на параметры типов класса.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Статическое свойство \"{0}\" конфликтует со встроенным свойством \"Function.{0}\" функции-конструктора \"{1}\".", + "Stricter_Typechecking_Options_6292": "Более строгие параметры проверки типов", + "String_literal_expected_1141": "Ожидался строковый литерал.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Имена импорта и экспорта строковых литералов не поддерживаются, если для флага \"--module\" установлено значение \"es2015\" или \"es2020\".", + "String_literal_with_double_quotes_expected_1327": "Ожидается строковый литерал с двойными кавычками.", + "Style_Options_6293": "Параметры стиля", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Стилизовать ошибки и сообщения с помощью цвета и контекста (экспериментальная функция).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Флаги подшаблонов должны присутствовать при наличии знака минус.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Последовательные объявления свойств должны иметь один и тот же тип. Свойство \"{0}\" должно иметь тип \"{1}\", но имеет здесь тип \"{2}\".", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Последующие объявления переменных должны иметь тот же тип. Переменная \"{0}\" должна иметь тип \"{1}\", однако имеет тип \"{2}\".", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Подстановка \"{0}\" для шаблона \"{1}\" содержит неправильный тип, ожидается string, получен \"{2}\".", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Подстановка \"{0}\" в шаблоне \"{1}\" может содержать не больше одного символа \"*\".", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Подстановки для шаблона \"{0}\" должны быть массивом.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Замены для шаблона \"{0}\" не должны быть пустым массивом.", + "Successfully_created_a_tsconfig_json_file_6071": "Файл tsconfig.json успешно создан.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Вызовы super не разрешены вне конструкторов или во вложенных функциях внутри конструкторов.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Подавлять избыточные проверки свойств для объектных литералов.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Подавлять ошибки noImplicitAny для объектов индексирования, у которых отсутствуют сигнатуры индекса.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Подавляйте ошибки \"noImplicitAny\" при индексации объектов без сигнатуры индекса.", + "Switch_each_misused_0_to_1_95138": "Изменить все неверно используемые \"{0}\" на \"{1}\"", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Синхронно вызывайте обратные вызовы и обновляйте состояние наблюдателей каталогов на платформах, не имеющих собственной поддержки рекурсивного наблюдения.", + "Syntax_Colon_0_6023": "Синтаксис: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Минимальное ожидаемое число аргументов для тега \"{0}\" — \"{1}\", но фабрика JSX \"{2}\" предоставляет максимум \"{3}\".", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Выражения шаблона с тегами запрещено использовать в необязательной цепочке.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Целевой объект разрешает только следующее число элементов — {0}, но источник может иметь больше.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Целевой объект требует следующего числа элементов — {0}, но источник может иметь меньше.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Целевая подпись предоставляет слишком мало аргументов. Ожидал {0} или больше, но получил {1} .", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Модификатор \"{0}\" можно использовать только в файлах TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Оператор \"{0}\" невозможно применить к типу Symbol.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Оператор \"{0}\" не разрешен для логических типов. Попробуйте использовать \"{1}\" вместо него.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Свойство \"{0}\" асинхронного итератора должно быть методом.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Свойство \"{0}\" итератора должно быть методом.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Тип Object можно назначить малому количеству других типов. Возможно, вы хотели использовать тип any?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Флаг Unicode (u) и флаг наборов Unicode (v) не могут быть установлены одновременно.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "На объект 'arguments' нельзя ссылаться в стрелочной функции в ES5. Используйте стандартное выражение функции.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "На объект 'arguments' нельзя ссылаться в асинхронной функции или методе в ES5. Попробуйте использовать стандартную функцию или метод.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Текст оператора if не может быть пустым.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Вызов для этой реализации был выполнен успешно, но сигнатуры реализации перегрузок не видны извне.", + "The_character_set_of_the_input_files_6163": "Кодировка входных файлов.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Содержащая стрелочная функция фиксирует глобальное значение \"this\".", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Содержащая функция или текст модуля слишком велики для анализа потока управления.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Текущий файл является модулем CommonJS и не может использовать \"await\" на верхнем уровне.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Текущий файл является модулем CommonJS, импорт которого приведет к вызовам \"require\"; однако файл, на который указывает ссылка, является модулем ECMAScript и не может быть импортирован с помощью \"require\". Вместо этого попробуйте написать динамический вызов \"import(\"{0}\")\".", + "The_current_host_does_not_support_the_0_option_5001": "Текущий узел не поддерживает параметр \"{0}\".", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Здесь определяется объявление объекта \"{0}\", который вы, вероятно, намеревались использовать", + "The_declaration_was_marked_as_deprecated_here_2798": "Объявление было отмечено как устаревшее.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Ожидаемый тип поступает из свойства \"{0}\", объявленного здесь в типе \"{1}\"", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Ожидаемый тип определяется типом возвращаемого значения этой сигнатуры.", + "The_expected_type_comes_from_this_index_signature_6501": "Ожидаемый тип определяется этой сигнатурой индекса.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Выражение назначения экспорта должно представлять собой идентификатор или полное имя в окружающем контексте.", + "The_file_is_in_the_program_because_Colon_1430": "Файл включен в программу по следующей причине:", + "The_files_list_in_config_file_0_is_empty_18002": "Список \"files\" в файле конфигурации \"{0}\" пуст.", + "The_first_export_default_is_here_2752": "Здесь находится первый экспорт данных по умолчанию.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Первым параметром метода then класса promise должен быть обратный вызов.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Глобальный тип \"JSX.{0}\" не может иметь больше одного свойства.", + "The_implementation_signature_is_declared_here_2750": "Здесь объявлена сигнатура реализации.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Метасвойство \"import.meta\" не разрешено в файлах, которые будут построены в выходных данных CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Метасвойство \"import.meta\" разрешено только в том случае, если параметр \"--module\" имеет значение \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\" или \"nodenext\".", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Выводимому типу \"{0}\" невозможно присвоить имя без ссылки на \"{1}\". Вероятно, оно не является переносимым. Требуется заметка с типом.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Выводимый тип \"{0}\" ссылается на тип с циклической структурой, которая не может быть элементарно сериализована. Требуется заметка с типом.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Выведенный тип \"{0}\" ссылается на недоступный тип \"{1}\". Требуется аннотация типа.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Выведенный тип этого узла превышает максимальную длину, которую будет сериализовывать компилятор. Требуется указать заметку явного типа.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Инициализатор объявления \"using\" должен быть либо объектом с методом \"[Symbol.dispose]()\", либо иметь значение \"null\" или \"undef\".", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Инициализатор объявления \"await using\" должен быть либо объектом с методом \"[Symbol.asyncDispose]()\" или \"[Symbol.dispose]()\", либо быть \"нулевым\" или \"неопределенным\".", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" существует в нескольких составляющих и является частным в некоторых из них.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Пересечение \"{0}\" было сокращено до \"never\", так как свойство \"{1}\" имеет конфликтующие типы в некоторых составляющих.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Ключевое слово intrinsic можно использовать только для объявления внутренних типов, предоставляемых компилятором.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Чтобы использовать фрагменты JSX с параметром компилятора \"jsxFactory\", необходимо указать параметр компилятора \"jsxFragmentFactory\".", + "The_last_overload_gave_the_following_error_2770": "Последняя перегрузка возвратила следующую ошибку.", + "The_last_overload_is_declared_here_2771": "Здесь объявлена последняя перегрузка.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Левый операнд оператора for...in не может быть шаблоном деструктурирования.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Левая часть оператора 'for...in' не может быть объявлением 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Левая часть оператора \"for...in\" не может быть объявлением \"await using\".", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Левый операнд оператора for...in не может использовать аннотацию типа.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Левая часть оператора \"for...in\" не может быть обращением к необязательному свойству.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "В левой части оператора \"for...in\" должна быть переменная или доступ к свойству.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Левый операнд оператора for...in должен иметь тип string или any.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Левый операнд оператора for...of не может использовать аннотацию типа.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Левая часть оператора \"for...of\" не может быть обращением к необязательному свойству.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Левая часть оператора \"for...of\" не может быть \"async\".", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "В левой части оператора \"for...of\" должна быть переменная или доступ к свойству.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Левый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Левая часть выражения присваивания не может быть обращением к необязательному свойству.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "В левой части выражения назначения должна быть переменная или доступ к свойству.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Левая часть выражения \"instanceof\" должна быть назначена первому аргументу метода \"[Symbol.hasInstance]\" правой части.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Левый операнд выражения instanceof должен иметь тип any, тип объекта или параметр типа.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Языковой стандарт, который используется при отображении сообщений пользователю (например, en-us)", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Максимальная глубина зависимостей для поиска в папке node_modules и загрузки файлов JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Операнд оператора \"delete\" не может быть закрытым идентификатором.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Операнд оператора \"delete\" не может быть свойством только для чтения.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Операнд оператора \"delete\" должен быть ссылкой на свойство.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "Операнд оператора \"delete\" должен быть необязательным.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Операнд оператора инкремента или декремента не может быть обращением к необязательному свойству.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Операнд оператора инкремента или декремента должен быть переменной или доступом к свойству.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Анализатор ожидал найти \"{1}\" для соответствия указанному здесь токену \"{0}\".", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Корень проекта неоднозначен, но требуется для разрешения записи карты экспорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Корень проекта неоднозначен, но требуется для разрешения записи карты импорта ''{0}'' в файле ''{1}''. Укажите параметр компилятора ''rootDir'' для устранения неоднозначности.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Невозможно обратиться к свойству \"{0}\" в типе \"{1}\" внутри этого класса, так как он затемнен другим закрытым идентификатором с таким же написанием.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Тип возвращаемого значения функции декоратора параметра должен быть либо void, либо any.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Тип возвращаемого значения функции декоратора свойства должен быть либо void, либо any.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Тип возвращаемого значения асинхронной функции должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Тип возвращаемого значения асинхронной функции или метода должен быть глобальным типом Promise.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Возвращаемое значение асинхронной функции или метода должно иметь глобальный тип Promise. Вы имели в виду \"Promise<{0}>\"?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Правая часть оператора \"for…in\" должна иметь тип \"any\", тип объекта или быть параметром типа, однако указан тип \"{0}\".", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Правый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Правая часть выражения \"instanceof\" должна иметь тип \"любой\", класс, функцию или другой тип, назначаемый типу интерфейса \"Функция\", или тип объекта с методом \"Symbol.hasInstance\".", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Правая часть выражения \"instanceof\" не должна быть выражением экземпляра.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Корневое значение файла \"{0}\" должно быть объектом.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает {0} .", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Среда выполнения вызовет декоратор с аргументами {1} , но декоратор ожидает как минимум {0} .", + "The_shadowing_declaration_of_0_is_defined_here_18017": "Здесь определено объявление затемнения \"{0}\"", + "The_signature_0_of_1_is_deprecated_6387": "Сигнатура \"{0}\" \"{1}\" устарела.", + "The_specified_path_does_not_exist_Colon_0_5058": "Указанный путь не существует: \"{0}\".", + "The_tag_was_first_specified_here_8034": "Этот тег был впервые указан здесь.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Цель выражения присваивания элемента rest объекта не может быть обращением к необязательному свойству.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Цель остального назначения объектов должна быть обращением к переменной или свойству.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Контекст this типа \"{0}\" не может быть назначен методу this типа \"{1}\".", + "The_this_types_of_each_signature_are_incompatible_2685": "Типы this каждой подписи несовместимы.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Тип \"{0}\" является \"readonly\" и не может быть назначен изменяемому типу \"{1}\".", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Невозможно использовать модификатор \"type\" в именованном экпорте, когда в инструкции экспорта используется \"export type\".", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Невозможно использовать модификатор \"type\" в именованном импорте, когда в инструкции импорта используется \"import type\".", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Невозможно сериализовать тип этого узла, поскольку его свойство \"{0}\" не может быть сериализовано.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Возвращаемый тип метода \"{0}()\" асинхронного итератора должен быть обещанием для типа со свойством \"value\".", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Тип, возвращаемый методом \"{0}()\" итератора, должен содержать свойство \"value\".", + "The_types_of_0_are_incompatible_between_these_types_2200": "Типы \"{0}\" несовместимы между этими типами.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Типы, возвращаемые \"{0}\", несовместимы между этими типами.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "Здесь нельзя использовать значение \"{0}\".", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Объявление переменной оператора for...in не может содержать инициализатор.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Объявление переменной оператора for...of не может содержать инициализатор.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Оператор with не поддерживается. Все символы в блоке with получат тип any.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Существуют типы в ' {0} ', но этот результат не удалось разрешить с помощью текущей настройки 'moduleResolution'. Рассмотрите возможность обновления до \"node16\", \"nodenext\" или \"bundler\".", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Существуют типы в ' {0} ', но этот результат не удалось разрешить при соблюдении \"экспорта\" package.json. ' {1} ' может потребоваться обновить свой package.json или типизацию.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "В этом регулярном выражении нет группы захвата с именем \" {0} \".", + "There_is_nothing_available_for_repetition_1507": "Нет ничего, что можно было бы повторить.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Для этого тега JSX требуется, чтобы \"{0}\" был в области видимости, но его не удалось найти.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Для этого тега JSX требуется наличие пути модуля \"{0}\", но его не удалось найти. Убедитесь, что у вас установлены типы для соответствующего пакета.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Свойство \"{0}\" этого тега JSX ожидает один дочерний объект типа \"{1}\", однако было предоставлено несколько дочерних объектов.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Свойство \"{0}\" этого тега JSX ожидает тип \"{1}\", требующий несколько дочерних объектов, однако был предоставлен только один дочерний объект.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении нет групп захвата.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Эта обратная ссылка относится к несуществующей группе. В этом регулярном выражении есть только {0} групп захвата.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Это двоичное выражение никогда не имеет нулевого значения. Вам не хватает скобок?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Этот символ нельзя экранировать в регулярном выражении.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Это сравнение кажется непреднамеренным, поскольку типы \"{0}\" и \"{1}\" не перекрываются.", + "This_condition_will_always_return_0_2845": "Это условие всегда возвращает \"{0}\".", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Это условие всегда будет возвращать ''{0}'', так как JavaScript сравнивает объекты по ссылке, а не по значению.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Это условие всегда будет возвращать значение true, поскольку функция \"{0}\" всегда определена.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Это условие будет всегда возвращать значение true, поскольку функция всегда определена. Возможно, вы хотите вызвать ее?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Эту функцию конструктора можно преобразовать в объявление класса.", + "This_expression_is_always_nullish_2871": "Это выражение всегда равно нулю.", + "This_expression_is_never_nullish_2881": "Это выражение никогда не принимает значение null.", + "This_expression_is_not_callable_2349": "Это выражение не является вызываемым.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Это выражение не может быть вызвано, так как оно является методом доступа get. Вы хотели использовать его без \"()\"?", + "This_expression_is_not_constructable_2351": "Это выражение не может быть построено.", + "This_file_already_has_a_default_export_95130": "Этот файл уже имеет экспорт по умолчанию.", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Этот путь импорта небезопасен для перезаписи, поскольку он разрешается в другой проект, а относительный путь между выходными файлами проекта не совпадает с относительным путем между входными файлами.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Этот импорт использует расширение \"{0}\" для разрешения во входной файл TypeScript, но не будет перезаписан во время выпуска, поскольку это не является относительным путем.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Это объявление дополняется другим объявлением. Попробуйте переместить дополняющее объявление в тот же файл.", + "This_kind_of_expression_is_always_falsy_2873": "Подобные выражения всегда ложны.", + "This_kind_of_expression_is_always_truthy_2872": "Такое выражение всегда правдиво.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Это можно преобразовать в асинхронную функцию.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Этот элемент не может иметь комментарий JSDoc с тегом \"@override\", так как он не объявлен в базовом классе \"{0}\".", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Этот элемент не может иметь комментарий JSDoc с тегом \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Этот элемент не может иметь комментарий JSDoc с тегом модификатор \"@override'\", поскольку содержащий его класс \"{0}\" не расширяет другой класс.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Этот элемент не может содержать комментарий JSDoc с тегом \"@override\", так как его имя является динамическим.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\".", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Этот элемент не может иметь модификатор \"override\", поскольку содержащий его класс \"{0}\" не расширяет другой класс.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Этот элемент не может иметь модификатор \"override\", так как его имя является динамическим.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Этот элемент должен иметь комментарий JSDoc с тегом \"@override\", так как он переопределяет элемент в базовом классе \"{0}\".", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет элемент в базовом классе \"{0}\".", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет абстрактный метод, объявленный в базовом классе \"{0}\".", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "На этот модуль можно ссылаться только с помощью импортов/экспортов ECMAScript, включив флаг \"{0}\" и сославшись на его экспорт по умолчанию.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Этот модуль объявлен с помощью оператора \"export =\" и может использоваться только с импортом по умолчанию при использовании флажка \"{0}\".", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Эту операцию можно упростить. Эта смена идентична «{0} {1} {2}».", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Эта перегрузка неявно возвращает тип ' {0} ', поскольку в ней отсутствует аннотация типа возвращаемого значения.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Сигнатура перегрузки несовместима с ее сигнатурой реализации.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Этот параметр запрещено использовать с директивой \"use strict\".", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Это свойство параметра должно иметь комментарий JSDoc с тегом \"@override\", так как он переопределяет элемент в базовом классе \"{0}\".", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Это свойство параметра должно иметь модификатор \"override\", так как он переопределяет элемент базового класса \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Этот флаг регулярного выражения нельзя переключить внутри подшаблона.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Этот флаг регулярного выражения доступен только при таргетинге \" {0} \" или более поздней версии.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Этот относительный путь импорта небезопасен для перезаписи, потому что он выглядит как имя файла, но на самом деле разрешается как \"{0}\".", + "This_spread_always_overwrites_this_property_2785": "Это распространение всегда перезаписывает данное свойство.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Этот синтаксис недопустим, если включен параметр \"erasableSyntaxOnly\".", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Добавьте конечную запятую или явное ограничение.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Этот синтаксис зарезервирован в файлах с расширениями MTS или CTS. Вместо этого используйте выражение \"AS\".", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Для этого синтаксиса требуется импортированный вспомогательный объект, но найти модуль \"{0}\" не удается.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\", который не существует в \"{0}\". Рекомендуется обновить версию \"{0}\".", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\" и параметрами ({2}), который не совместим с объектом в \"{0}\". Попробуйте обновить версию \"{0}\".", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Для этого параметра типа может потребоваться ограничение \"extends {0}\".", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Недопустимое использование \"import\". Можно записывать вызовы \"import()\", но у них должны быть скобки и не должно быть аргументов типа.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Чтобы преобразовать этот файл в модуль ECMAScript, добавьте поле \"type\": \"module\" в \"{0}\".", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или добавьте поле \"type\": \"module\" в \"{1}\".", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Чтобы преобразовать этот файл в модуль ECMAScript, измените его расширение на \"{0}\" или создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Чтобы преобразовать этот файл в модуль ECMAScript, создайте локальный файл package.json с \"{ \"type\": \"module\" }\".", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Выражения \"await\" верхнего уровня разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Операторы верхнего уровня \"await using\" разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Объявления верхнего уровня в файлах .d.ts должны начинаться с модификатора \"declare\" или \"export\".", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Циклы верхнего уровня \"for await\" разрешены только в том случае, если для параметра \"module\" задано значение \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" или \"preserve\", а для параметра \"target\" задано значение \"es2017\" или выше.", + "Trailing_comma_not_allowed_1009": "Завершающая запятая запрещена.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Транскомпиляция каждого файла как отдельного модуля (аналогично ts.transpileModule).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Попробуйте использовать команду \"npm i --save-dev @types/{1}\", если он существует, или добавьте новый файл объявления (.d.ts), содержащий \"declare module '{0}';\".", + "Trying_other_entries_in_rootDirs_6110": "Попытка использовать другие записи в \"rootDirs\".", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Выполняется попытка замены \"{0}\", расположение модуля кандидата: \"{1}\".", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Тип кортежа \"{0}\" длиной \"{1}\" не имеет элемент с индексом \"{2}\".", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Аргументы типа кортежа циклически ссылаются сами на себя.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Итерация типа \"{0}\" может осуществляться только с использованием флага \"--downlevelIteration\" или с параметром \"--target\" \"es2015\" или выше.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Тип \"{0}\" невозможно использовать как тип индекса.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Тип \"{0}\" не может использоваться для индексации типа \"{1}\".", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Тип \"{0}\" не удовлетворяет ограничению \"{1}\".", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Тип \"{0}\" не соответствует ожидаемому типу \"{1}\".", + "Type_0_has_no_call_signatures_2757": "Тип \"{0}\" не содержит сигнатуры вызова.", + "Type_0_has_no_construct_signatures_2761": "Тип \"{0}\" не содержит сигнатуры конструкции.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Тип \"{0}\" не содержит соответствующую сигнатуру индекса для типа \"{1}\".", + "Type_0_has_no_properties_in_common_with_type_1_2559": "У типа \"{0}\" нет общих свойств с типом \"{1}\".", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Тип \"{0}\" не содержит подписей, к которым применим список аргументов типа.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Тип ' {0} ' является универсальным и может индексироваться только для чтения.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "В типе \"{0}\" отсутствуют следующие свойства из типа \"{1}\": {2} и еще {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "Тип \"{0}\" не является типом функции конструктора.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Тип ' {0} ' не является допустимым типом возвращаемого значения асинхронной функции в ES5, поскольку он не ссылается на значение конструктора, совместимого с Promise.", + "Type_0_is_not_an_array_type_2461": "Тип \"{0}\" не является типом массива.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Тип \"{0}\" не является типом массива или типом строки.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "{0} не является типом массива или строки или в нем нет метода [Symbol.iterator](), который возвращает итератор.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "{0} не является типом массива или в нем нет метода [Symbol.iterator](), который возвращает итератор.", + "Type_0_is_not_assignable_to_type_1_2322": "Тип \"{0}\" не может быть назначен для типа \"{1}\".", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Вы имели в виду \"{2}\"?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Тип \"{0}\" невозможно присвоить типу \"{1}\". Существует два разных типа с таким именем, но они не связаны.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Тип \"{0}\" не может назначаться типу \"{1}\", как подразумевается заметкой о вариантности.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Тип ' {0} ' не может быть назначен типу ' {1} ', как это требуется для вычисленных значений элементов перечисления.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типам свойств цели.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Невозможно назначить тип \"{0}\" типу \"{1}\", когда свойство \"exactOptionalPropertyTypes\" имеет значение \"true\". Рассмотрите возможность добавления типа \"undefined\" к типу цели.", + "Type_0_is_not_comparable_to_type_1_2678": "Тип \"{0}\" невозможно сравнить с типом \"{1}\".", + "Type_0_is_not_generic_2315": "Тип \"{0}\" не является универсальным.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Тип \"{0}\" может представлять примитивное значение, не разрешенное в качестве правого операнда оператора \"in\".", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Тип \"{0}\" должен иметь метод \"[Symbol.asyncIterator]()\", который возвращает асинхронный итератор.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Тип \"{0}\" должен иметь метод \"[Symbol.iterator]()\", который возвращает итератор.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Тип \"{0}\" не предоставляет соответствия для сигнатуры \"{1}\".", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Тип \"{0}\" рекурсивно ссылается сам на себя как на базовый тип.", + "Type_Checking_6248": "Проверка типа", + "Type_alias_0_circularly_references_itself_2456": "Псевдоним типа \"{0}\" циклически ссылается на себя.", + "Type_alias_must_be_given_a_name_1439": "Псевдониму типа необходимо присвоить имя.", + "Type_alias_name_cannot_be_0_2457": "Псевдоним типа не может иметь имя \"{0}\".", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Псевдонимы типов можно использовать только в файлах TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Аннотация типа не может содержаться в объявлении конструктора.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Заметки с типом можно использовать только в файлах TypeScript.", + "Type_argument_expected_1140": "Ожидался аргумент типа.", + "Type_argument_list_cannot_be_empty_1099": "Список аргументов типа не может быть пустым.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Аргументы типа можно использовать только в файлах TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Аргументы типа для \"{0}\" циклически ссылаются сами на себя.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Выражения утверждения типа можно использовать только в файлах TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Тип в позиции {0} в источнике не совместим с типом в позиции {1} в целевом объекте.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Типы в позициях {0}–{1} в источнике не совместимы с типом в позиции {2} в целевом объекте.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Тип, содержащий частное имя \" {0} \", нельзя использовать с --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Файлы объявления типа, включаемые в компиляцию.", + "Type_expected_1110": "Ожидался тип.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Утверждения импорта типа должны иметь ровно один ключ \"resolution-mode\" со значением \"import\" или \"require\".", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Импорт типа модуля ECMAScript из модуля CommonJS должен иметь атрибут \"resolution-mode\".", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Создание экземпляра типа является слишком глубоким и, возможно, бесконечным.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "На тип есть прямые или непрямые ссылки в обратном вызове выполнения собственного метода then.", + "Type_library_referenced_via_0_from_file_1_1402": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\" с идентификатором пакета \"{2}\"", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Тип операнда \"await\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Типом значения вычисляемого свойства является \"{0}\", который не может быть назначен типу \"{1}\".", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Тип элементов итерации для операнда \"yield*\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Тип свойства \"{0}\" циклически ссылается на самого себя в сопоставленном типе \"{1}\".", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Тип операнда \"yield\" в асинхронном генераторе должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Импорт модуля ECMAScript, затрагивающий только тип, из модуля CommonJS должен иметь атрибут \"resolution-mode\".", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Тип происходит от этого импорта. Импорт стиля пространства имен не может быть вызван или создан и приведет к сбою во время выполнения. Вместо этого рекомендуется использовать импорт по умолчанию или импортировать сюда \"require\".", + "Type_parameter_0_has_a_circular_constraint_2313": "Параметр типа \"{0}\" содержит циклическое ограничение.", + "Type_parameter_0_has_a_circular_default_2716": "Параметр типа \"{0}\" по умолчанию является циклическим.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Параметр типа \"{0}\" сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Параметр типа \"{0}\" сигнатуры конструктора из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Параметр типа \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Параметр типа \"{0}\" экспортированной функции имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Параметр типа \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Параметр типа \"{0}\" для экспортированного типа сопоставленного объекта имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Параметр типа \"{0}\" экспортированного псевдонима типа имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Параметр типа \"{0}\" метода из экспортированного интерфейса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Параметр типа \"{0}\" общего метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Параметр типа \"{0}\" общего статического метода из экспортированного класса имеет или использует закрытое имя \"{1}\".", + "Type_parameter_declaration_expected_1139": "Ожидалось объявление параметра типа.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Объявления параметров типа можно использовать только в файлах TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Значения по умолчанию для параметров типа могут ссылаться только на ранее объявленные параметры типа.", + "Type_parameter_list_cannot_be_empty_1098": "Список параметров типа не может быть пустым.", + "Type_parameter_name_cannot_be_0_2368": "Параметр типа не может иметь имя \"{0}\".", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Параметры типов не могут содержаться в объявлении конструктора.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Предикат типов \"{0}\" не может быть назначен для \"{1}\".", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Тип создает тип кортежа, который слишком большой для представления.", + "Type_reference_directive_0_was_not_resolved_6120": "======== Директива ссылки на тип \"{0}\" не разрешена. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\", первичный объект: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\" с идентификатором пакета \"{2}\", первичный объект: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Выражения соответствия типа можно использовать только в файлах TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Типы не могут отображаться в объявлениях экспорта в файлах JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Типы имеют раздельные объявления закрытого свойства \"{0}\".", + "Types_of_construct_signatures_are_incompatible_2419": "Типы сигнатур конструкций несовместимы.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Типы параметров \"{0}\" и \"{1}\" несовместимы.", + "Types_of_property_0_are_incompatible_2326": "Типы свойства \"{0}\" несовместимы.", + "Unable_to_open_file_0_6050": "Не удается открыть файл \"{0}\".", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Не удается разрешить сигнатуру декоратора класса при вызове в качестве выражения.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Не удается разрешить сигнатуру декоратора метода при вызове в качестве выражения.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Не удается разрешить сигнатуру декоратора параметра при вызове в качестве выражения.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Не удается разрешить сигнатуру декоратора свойства при вызове в качестве выражения.", + "Undetermined_character_escape_1513": "Неопределенная escape-последовательность.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Неожиданный ' {0} '. Вы хотели избежать этого с помощью обратной косой черты?", + "Unexpected_end_of_text_1126": "Неожиданный конец текста.", + "Unexpected_keyword_or_identifier_1434": "Непредвиденное ключевое слово или идентификатор.", + "Unexpected_token_1012": "Неожиданный токен.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Неожиданный токен. Ожидался конструктор, метод, метод доступа или свойство.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Непредвиденная лексема. Ожидалось имя параметра типа без фигурных скобок.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Непредвиденный токен. Возможно, вы хотели использовать \"{'>'}\" или \">\"?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Непредвиденный токен. Возможно, вы хотели использовать \"{'}'}\" или \"}\"?", + "Unexpected_token_expected_1179": "Неожиданный токен. Ожидался символ \"{\".", + "Unicode_escape_sequence_cannot_appear_here_17021": "Escape-последовательность Юникода здесь не может присутствовать.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Escape-последовательности Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Выражения значений свойств Unicode доступны только в том случае, если установлен флаг Unicode (u) или флаг Sets Unicode (v).", + "Unknown_Unicode_property_name_1524": "Неизвестное имя свойства Юникода.", + "Unknown_Unicode_property_name_or_value_1529": "Неизвестное имя или значение свойства Юникода.", + "Unknown_Unicode_property_value_1526": "Неизвестное значение свойства Юникода.", + "Unknown_build_option_0_5072": "Неизвестный параметр сборки \"{0}\".", + "Unknown_build_option_0_Did_you_mean_1_5077": "Неизвестный параметр сборки \"{0}\". Возможно, вы хотели использовать \"{1}\"?", + "Unknown_compiler_option_0_5023": "Неизвестный параметр компилятора \"{0}\".", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Неизвестный параметр компилятора \"{0}\". Возможно, вы хотели использовать \"{1}\"?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Неизвестное ключевое слово или идентификатор. Вы имели в виду \"{0}\"?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Неизвестный параметр excludes. Возможно, вы имели в виду exclude?", + "Unknown_regular_expression_flag_1499": "Неизвестный флаг регулярного выражения.", + "Unknown_type_acquisition_option_0_17010": "Неизвестный параметр получения типа, \"{0}\".", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Неизвестный параметр получения типа \"{0}\". Возможно, вы хотели использовать \"{1}\"?", + "Unknown_watch_option_0_5078": "Неизвестный параметр контрольного значения \"{0}\".", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Неизвестный параметр контрольного значения \"{0}\". Возможно, вы хотели использовать \"{1}\"?", + "Unreachable_code_detected_7027": "Обнаружен недостижимый код.", + "Unterminated_Unicode_escape_sequence_1199": "Незавершенная escape-последовательность Юникода.", + "Unterminated_quoted_string_in_response_file_0_6045": "Незавершенная строка в кавычках в файле ответов \"{0}\".", + "Unterminated_regular_expression_literal_1161": "Незавершенный литерал регулярного выражения.", + "Unterminated_string_literal_1002": "Строковый литерал без признака конца.", + "Unterminated_template_literal_1160": "Незавершенный литерал шаблона.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Вызовы функций без типов не могут принимать аргументы типов.", + "Unused_label_7028": "Неиспользуемая метка.", + "Unused_ts_expect_error_directive_2578": "Неиспользуемая директива \"@ts-expect-error\".", + "Update_import_from_0_90058": "Обновить импорт из \"{0}\"", + "Update_modifiers_of_0_90061": "Обновить модификаторы ' {0} '", + "Updating_output_timestamps_of_project_0_6359": "Обновление меток времени в выходных данных проекта \"{0}\"...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Обновление меток времени в неизменившихся выходных данных проекта \"{0}\"...", + "Use_0_95174": "Использовать \"{0}\".", + "Use_0_instead_5106": "Вместо него используйте '{0}'.", + "Use_Number_isNaN_in_all_conditions_95175": "Использовать \"Number.isNaN\" во всех условиях.", + "Use_element_access_for_0_95145": "Использовать доступ к элементам для \"{0}\".", + "Use_element_access_for_all_undeclared_properties_95146": "Использовать доступ к элементам для всех необъявленных свойств.", + "Use_import_type_95180": "Используйте \"тип импорта\"", + "Use_synthetic_default_member_95016": "Используйте искусственный элемент \"default\".", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Используйте поле \"экспорт\" package.json при разрешении импорта пакетов.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Используйте поле \"импорт\" package.json при разрешении импорта.", + "Use_type_0_95181": "Используйте 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "Использование \"{0}\", вложенный путь: \"{1}\", целевой объект: \"{2}\".", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Использование фрагментов JSX требует, чтобы фабрика фрагментов \"{0}\" была в области видимости, но ее не удалось найти.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Использование строки для оператора for...of поддерживается только в ECMAScript 5 и более поздних версиях.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Использование --build,-b заставит TSC вести себя больше как оркестратор сборки, чем как компилятор. Это используется для запуска создания составных проектов, о которых можно узнать больше на {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Использование параметров компилятора для перенаправления ссылки на проект \"{0}\".", + "VERSION_6036": "ВЕРСИЯ", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Значение типа \"{0}\" не имеет общих свойств со значением типа \"{1}\". Вы хотели вызвать его?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Значение типа \"{0}\" не может вызываться. Вы хотели использовать new?", + "Variable_0_implicitly_has_an_1_type_7005": "Переменная \"{0}\" неявно имеет тип \"{1}\".", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Переменная \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Переменная \"{0}\" неявно имеет тип \"{1}\" в некоторых расположениях, но из использования можно определить более подходящий тип.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Переменная \"{0}\" неявным образом получает тип \"{1}\" в некоторых местах, где ее тип невозможно определить.", + "Variable_0_is_used_before_being_assigned_2454": "Переменная \"{0}\" используется перед назначением.", + "Variable_declaration_expected_1134": "Ожидалось объявление переменной.", + "Variable_declaration_list_cannot_be_empty_1123": "Список объявлений переменной не может быть пустым.", + "Variable_declaration_not_allowed_at_this_location_1440": "Объявление переменной в этом расположении запрещено.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Переменная должна иметь явную аннотацию типа с --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Переменные с несколькими объявлениями не могут быть встроены.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Элемент с переменным числом аргументов в позиции {0} в источнике не соответствует элементу в позиции {1} в целевом объекте.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Заметки вариантности поддерживаются только в псевдонимах типов для объектов, функций, конструкторов и сопоставленных типов.", + "Version_0_6029": "Версия {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Посетите https://aka.ms/ts6 для получения сведений о миграции.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Дополнительные сведения об этом файле: https://aka.ms/tsconfig.", + "WATCH_OPTIONS_6918": "ПАРАМЕТРЫ ПРОСМОТРА", + "Watch_and_Build_Modes_6250": "Режимы отслеживания и сборки", + "Watch_input_files_6005": "Просмотр входных файлов.", + "Watch_option_0_requires_a_value_of_type_1_5080": "Параметр \"{0}\" контрольного значения требует значение типа {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Записать тип для \"{0}\" можно, только добавив здесь тип для всего параметра.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "При назначении функций убедитесь, что параметры и возвращаемые значения совместимы с подтипом.", + "When_type_checking_take_into_account_null_and_undefined_6699": "При проверке типа учитывайте параметры \"null\" и \"undefined\".", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Сохранять ли устаревшие выходные данные консоли в режиме просмотра вместо очистки экрана.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Заключение всех недопустимых символов в контейнер выражений", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Заключите все недопустимые выражения декоратора в круглые скобки.", + "Wrap_all_object_literal_with_parentheses_95116": "Заключить все литералы объектов в круглые скобки", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Перенос всех элементов JSX без родительских элементов во фрагмент JSX", + "Wrap_in_JSX_fragment_95120": "Перенос во фрагмент JSX", + "Wrap_in_parentheses_95194": "Заключить в круглые скобки", + "Wrap_invalid_character_in_an_expression_container_95108": "Заключение недопустимого знака в контейнер выражений", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Заключить следующий текст в круглые скобки, которые должны быть литералом объекта", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Вы можете узнать обо всех параметрах компилятора на {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Вы не можете переименовать модуль с помощью глобального импорта.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Невозможно переименовать элементы, определенные в папке \"node_modules\".", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Невозможно переименовать элементы, определенные в другой папке \"node_modules\".", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Невозможно переименовать элементы, определенные в стандартной библиотеке TypeScript.", + "You_cannot_rename_this_element_8000": "Этот элемент переименовать нельзя.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" принимает слишком мало аргументов для использования в качестве декоратора. Вы хотели сначала вызвать его и записать \"@{0}()\"?", + "_0_and_1_index_signatures_are_incompatible_2330": "Сигнатуры индекса \"{0}\" и \"{1}\" несовместимы.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Операции \"{0}\" и \"{1}\" невозможно использовать одновременно без скобок.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" указаны дважды. Атрибут \"{0}\" будет перезаписан.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "' {0} ' в конце типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "' {0} ' в начале типа не является допустимым синтаксисом TypeScript. Вы хотели написать ' {1} '?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Для импорта \"{0}\" необходимо установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "Для импорта \"{0}\" необходимо использовать импорт по умолчанию.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Для импорта \"{0}\" необходимо использовать вызов \"require\" или импорт по умолчанию.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или импорт по умолчанию.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Для импорта \"{0}\" необходимо использовать \"import {1} = require({2})\" или установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.", + "_0_cannot_be_used_as_a_JSX_component_2786": "\"{0}\" невозможно использовать как компонент JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" невозможно использовать как значение, так как он был экспортирован с помощью \"export type\".", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" невозможно использовать как значение, так как он был импортирован с помощью \"import type\".", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Компоненты \"{0}\" не принимают текст в виде дочерних элементов. Текст в JSX-файле имеет тип \"string\", однако для \"{1}\" ожидается тип \"{2}\".", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Возможно создание экземпляра \"{0}\" с произвольным типом, который может быть не связан с \"{1}\".", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "' {0} ' могут быть объявлены только внутри блока.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Объявления \"{0}\" можно использовать только в файлах TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "' {0} ' могут не иметь шаблонов привязки.", + "_0_declarations_must_be_initialized_1155": "' {0} ' должны быть инициализированы.", + "_0_expected_1005": "Ожидалось \"{0}\".", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "' {0} ' имеет строковый тип, но должен иметь синтаксически распознаваемый строковый синтаксис, если включен 'isolatedModules'.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "В \"{0}\" нет экспортированного элемента \"{1}\". Вы имели в виду \"{2}\"?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" неявно имеет тип возвращаемого значения \"{1}\", но из использования можно определить более подходящий тип.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" неявно имеет тип возвращаемого значения any, так как у него нет заметки с типом возвращаемого значения, а также на него прямо или косвенно указана ссылка в одном из его выражений return.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" неявно имеет тип any, так как отсутствует аннотация типа и на \"{0}\" есть прямые или непрямые ссылки в его собственном инициализаторе.", + "_0_index_signatures_are_incompatible_2634": "Сигнатуры индекса \"{0}\" несовместимы.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Тип индекса \"{0}\" \"{1}\" не может быть назначен типу индекса \"{2}\" \"{3}\".", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" является примитивом, но \"{1}\" — объект оболочки. Предпочтительно использовать \"{0}\" по мере возможности.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "\"{0}\" является типом и не может импортироваться в файлы JavaScript. Используйте \"{1}\" в заметке типа JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "' {0} ' является типом и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "\"{0}\" является неиспользуемым переименованием \"{1}\". Возможно, это должна была быть заметка для типа?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" может быть назначен ограничению типа \"{1}\", но можно создать экземпляр \"{1}\" с другим подтипом ограничения \"{2}\".", + "_0_is_automatically_exported_here_18044": "\"{0}\" экспортирован автоматически.", + "_0_is_declared_but_its_value_is_never_read_6133": "Свойство \"{0}\" объявлено, но его значение не было прочитано.", + "_0_is_declared_but_never_used_6196": "\"{0}\" объявлен, но никогда не использовался.", + "_0_is_declared_here_2728": "Здесь объявлен \"{0}\".", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" определен как свойство в классе \"{1}\", но переопределяется здесь в \"{2}\" как метод доступа.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" определен как метод доступа в классе \"{1}\", но переопределяется здесь в \"{2}\" как свойство экземпляра.", + "_0_is_deprecated_6385": "\"{0}\" устарело.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" не является допустимым метасвойством для ключевого слова \"{1}\". Вы имели в виду \"{2}\"?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "\"{0}\" не является допустимым именем параметра.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Использование \"{0}\" в качестве имени объявления переменной не допускается.", + "_0_is_of_type_unknown_18046": "\"{0}\" относится к типу unknown.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "Возможно, \"{0}\" имеет значение null.", + "_0_is_possibly_null_or_undefined_18049": "Возможно, \"{0}\" имеет значение null или undefined.", + "_0_is_possibly_undefined_18048": "Возможно, \"{0}\" имеет значение undefined.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "На \"{0}\" есть прямые или непрямые ссылки в его собственном базовом выражении.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "На \"{0}\" есть прямые или непрямые ссылки в его собственной аннотации типа.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "\"{0}\" указан несколько раз, поэтому такое использование будет перезаписано.", + "_0_list_cannot_be_empty_1097": "Список \"{0}\" не может быть пустым.", + "_0_modifier_already_seen_1030": "Модификатор \"{0}\" уже встречался.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Модификатор \"{0}\" может присутствовать только в параметре типа у класса, интерфейса или псевдонима типа.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "' {0} ' может появляться только в параметре типа функции, метода или класса.", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Модификатор \"{0}\" не может содержаться в объявлении конструктора.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Модификатор \"{0}\" не может отображаться в модуле или элементе пространства имен.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Модификатор \"{0}\" не может содержаться в параметре.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Модификатор \"{0}\" не может отображаться в элементе типа.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Модификатор \"{0}\" не может присутствовать в параметре типа.", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "' {0} ' не может присутствовать в объявлении 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "' {0} ' не может присутствовать в объявлении 'await using' .", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Модификатор \"{0}\" не может отображаться в сигнатуре индекса.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Модификатор \"{0}\" не может использоваться для элементов класса этого типа.", + "_0_modifier_cannot_be_used_here_1042": "Модификатор \"{0}\" не может использоваться здесь.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Модификатор \"{0}\" не может использоваться в окружающем контексте.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Модификатор \"{0}\" не может использоваться с модификатором \"{1}\".", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Модификатор \"{0}\" не может использоваться с закрытым идентификатором.", + "_0_modifier_must_precede_1_modifier_1029": "Модификатор \"{0}\" должен предшествовать модификатору \"{1}\".", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "За '\\ {0} ' должно следовать выражение значения свойства Unicode, заключенное в фигурные скобки.", + "_0_needs_an_explicit_type_annotation_2782": "Для \"{0}\" требуется явная заметка с типом.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" относится только к типу, а здесь используется как пространство имен.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" относится только к типу, но используется здесь как значение.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" относится только к типу, но используется здесь как значение. Вы хотели использовать \"{1} в {0}\"?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" относится только к типу, но здесь используется как значение. Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на ES2015 или более поздней версии.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" ссылается на глобальную переменную UMD, но текущий файл является модулем. Рекомендуется добавить импорт.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" относится к значению, но здесь используется как тип. Возможно, вы имели в виду \"typeof {0}\"?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "' {0} ' преобразуется в тип и должен быть помечен в этом файле как \"только тип\" перед повторным экспортом, если \" {1} \" включен. Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "' {0} ' разрешается в объявление только типа и должен быть импортирован с использованием импорта только типа, если включен 'verbatimModuleSyntax'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа импорта\", где импортируется \" {0} \".", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "' {0} ' разрешается в объявление только типа и должен быть помечен как \"только тип\" в этом файле перед повторным экспортом, если включено \" {1} \". Рассмотрите возможность использования \"типа экспорта { {0} по умолчанию }\".", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "' {0} ' разрешается в объявление только типа и должен быть реэкспортирован с использованием реэкспорта только типа, если включено ' {1} '.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Значение \"{0}\" должно быть задано внутри объекта \"compilerOptions\" файла конфигурации JSON", + "_0_tag_already_specified_1223": "Тег \"{0}\" уже указан.", + "_0_was_also_declared_here_6203": "Здесь также был объявлен \"{0}\".", + "_0_was_exported_here_1377": "Здесь был экспортирован \"{0}\".", + "_0_was_imported_here_1376": "Здесь был импортирован \"{0}\".", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "\"{0}\", у которого нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения \"{1}\".", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\", у которого нет заметки с типом возвращаемого значения, неявно имеет тип yield \"{1}\".", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Модификатор abstract может отображаться только в объявлении класса, метода или свойства.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Модификатор \"accessor\" может быть только в объявлении свойства.", + "and_here_6204": "и здесь.", + "and_npm_install_D_types_Slashnode_6290": "и npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Нельзя ссылаться на \"arguments\" в инициализаторах свойств и в статических блоках инициализации классов.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": обрабатывать файлы с импортом, экспортом, import.meta, jsx (с jsx: react-jsx) или форматом esm (с модулем: node16+) как файлы с модулями.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Выражение \"await\" нельзя использовать внутри статического блока класса.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Выражения \"await\" допускаются только на верхнем уровне файла, если он является модулем, но не имеет импортов и экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Выражения \"await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Выражения await не могут быть использованы в инициализаторе параметра.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" не влияет на тип этого выражения.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Объявления \"await using\" не допускаются в окружающих контекстах.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Операторы 'await using' разрешены только на верхнем уровне файла, если этот файл является модулем, но этот файл не имеет импорта или экспорта. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Операторы 'await using' разрешены только в асинхронных функциях и на верхних уровнях модулей.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Операторы 'await using' нельзя использовать внутри статического блока класса.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Параметр \"baseUrl\" имеет значение \"{0}\", это значение используется для разрешения безотносительного имени модуля \"{1}\".", + "c_must_be_followed_by_an_ASCII_letter_1512": "За '\\c' должна следовать буква ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" можно использовать только в начале файла.", + "case_or_default_expected_1130": "Ожидалось case или default.", + "catch_or_finally_expected_1472": "Ожидается \"catch\" или \"finally\".", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Инициализатор элементов перечисления const был вычислен в неконечное значение.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Инициализатор элементов перечисления const был вычислен в запрещенное значение NaN.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Инициализаторы членов перечисления const должны быть константными выражениями.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Перечисления const можно использовать только в выражениях доступа к свойству или индексу, а также в правой части объявления импорта, назначения экспорта или запроса типа.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Недопустимо использовать constructor как имя свойства параметра.", + "constructor_is_a_reserved_word_18012": "\"#constructor\" является зарезервированным словом.", + "default_Colon_6903": "по умолчанию:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Невозможно вызвать оператор delete с идентификатором в строгом режиме.", + "export_Asterisk_does_not_re_export_a_default_1195": "При использовании \"export *\" повторный экспорт по умолчанию не выполняется.", + "export_can_only_be_used_in_TypeScript_files_8003": "Элемент \"export =\" можно использовать только в файлах TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Модификатор export невозможно применить к неоднозначным модулям и улучшениям модулей, так как они всегда видимые.", + "extends_clause_already_seen_1172": "Предложение extends уже существует.", + "extends_clause_must_precede_implements_clause_1173": "Предложение extends должно предшествовать предложению implements.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Предложение extends экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Предложение extends экспортированного класса имеет или использует закрытое имя \"{0}\".", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Предложение extends экспортированного интерфейса \"{0}\" имеет или использует закрытое имя \"{1}\".", + "false_unless_checkJs_is_set_6932": "\"false\", если не задано значение \"checkJs\"", + "false_unless_composite_is_set_6906": "\"false\", если не задано значение \"composite\"", + "file_6025": "файл", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Циклы \"for await\" допускаются только на верхнем уровне файла, если он является модулем, но этот файл не содержит импортов или экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Циклы \"for await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Циклы 'for await' нельзя использовать внутри статического блока класса.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Методы доступа \"get\" и \"set\" не могут объявлять параметры \"this\".", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", если указаны \"files\", в противном случае \"[\"**/*\"]\"", + "implements_clause_already_seen_1175": "Предложение implements уже существует.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Предложения \"implements\" можно использовать только в файлах TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "Элемент \"import ... =\" можно использовать только в файлах TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Объявления \"infer\" допустимы только в предложении \"extends\" условного типа.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "За '\\k' должно следовать имя группы захвата, заключенное в угловые скобки.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Не допускается использование let в качестве имени в объявлениях let или const.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Выражение new, у цели которого нет сигнатуры конструктора, неявно имеет тип any.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\" и значение \"outDir\", если оно указано.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "\"nodenext\", если \"module\" — \"nodenext\"; \"node16\", если \"module\" — \"node16\" или \"node18\"; в противном случае — \"bundler\".", + "one_of_Colon_6900": "один из:", + "one_or_more_Colon_6901": "один или более:", + "options_6024": "параметры", + "or_JSX_element_expected_1145": "Ожидался элемент JSX или \"{\".", + "or_expected_1144": "Ожидалось \"{\" или \";\".", + "package_json_does_not_have_a_0_field_6100": "В package.json нет поля \"{0}\".", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "В файле \"package.json\" отсутствует запись \"typesVersions\", соответствующая версии \"{0}\".", + "package_json_had_a_falsy_0_field_6220": "Файл \"package.json\" содержит поле \"{0}\" со значением false.", + "package_json_has_0_field_1_that_references_2_6101": "package.json содержит поле \"{0}\" \"{1}\", которое ссылается на \"{2}\".", + "package_json_has_a_peerDependencies_field_6281": "\"package.json\" имеет поле \"peerDependities\".", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая не является допустимым диапазоном semver.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Файл \"package.json\" содержит запись \"typesVersions\" \"{0}\", которая соответствует версии компилятора \"{1}\", выполняется поиск шаблона для сопоставления имени модуля \"{2}\".", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Файл \"package.json\" содержит поле \"typesVersions\" с сопоставлениями путей, зависящих от версии.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Область package.json \"{0}\" явно сопоставляет описатель \"{1}\" со значением NULL.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Область package.json \"{0}\" имеет недопустимый тип для целевого объекта описателя \"{1}\"", + "package_json_scope_0_has_no_imports_defined_6273": "Для области package.json \"{0}\" не определены операции импорта.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Параметр paths указан, идет поиск шаблона, соответствующего имени модуля \"{0}\".", + "q_is_only_available_inside_character_class_1511": "'\\q' доступен только внутри класса символов.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "За '\\q' должны следовать строковые альтернативы, заключенные в фигурные скобки.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Модификатор readonly может отображаться только в объявлении свойства или сигнатуре индекса.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Модификатор типа \"readonly\" допускается только для типов литерала массива и кортежа.", + "require_call_may_be_converted_to_an_import_80005": "Вызов \"require\" можно преобразовать в \"import\".", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "\"resolution-mode\" можно задать лишь для импорта, распространяющегося только на тип.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" является единственным допустимым ключом для утверждений импорта типа.", + "resolution_mode_should_be_either_require_or_import_1453": "\"resolution-mode\" должен иметь значение \"require\" или \"import\".", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Параметр \"rootDirs\" задан; он используется для разрешения относительного имени модуля \"{0}\".", + "super_can_only_be_referenced_in_a_derived_class_2335": "Ссылка на super может указываться только в производном классе.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "На super можно ссылаться только в элементах производных классов или литеральных выражениях объекта.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Не допускается ссылка на super в имени вычисляемого свойства.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "На super невозможно ссылаться в аргументах конструктора.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "super допускается только в элементах литеральных выражений объекта, если параметр target — ES2015 или выше.", + "super_may_not_use_type_arguments_2754": "\"super\" не может использовать аргументы типа.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Перед тем, как получить доступ к свойству \"super\" в конструкторе производного класса, необходимо вызвать \"super\".", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "super следует вызывать перед получением доступа к this в конструкторе производного класса.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "После super должен идти список аргументов или доступ к элементу.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Доступ к свойству super разрешен только в конструкторе, функции-элементе или методе доступа к элементам производного класса.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "На this не может указывать ссылка в имени вычисляемого свойства.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "На this не могут указывать ссылки в теле модуля или пространства имен.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "На this не могут указывать ссылки в инициализаторе статического свойства.", + "this_cannot_be_referenced_in_current_location_2332": "На this не могут указывать ссылки в текущем расположении.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "this неявно содержит тип any, так как он не имеет аннотации типа.", + "true_for_ES2022_and_above_including_ESNext_6930": "true для ES2022 и выше, включая ESNext.", + "true_if_composite_false_otherwise_6909": "\"true\", если \"composite\", \"false\" в противном случае", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "`true`, когда moduleResolution — это node16, nodenext или Bundler; в противном случае `false`.", + "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: компилятор TypeScript", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", + "type_Colon_6902": "тип:", + "unique_symbol_types_are_not_allowed_here_1335": "Типы \"unique symbol\" здесь запрещены.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Типы \"unique symbol\" разрешены только у переменных в операторах с переменными.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Типы \"unique symbol\" невозможно использовать в объявлении переменной с именем привязки.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Директиву \"use strict\" запрещено использовать со списком параметров, которые не являются простыми.", + "use_strict_directive_used_here_1349": "Здесь используется директива \"use strict\".", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Объявления \"using\" не допускаются в окружающих контекстах.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Операторы with не разрешено использовать в блоке асинхронной функции.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Операторы with не разрешено использовать в строгом режиме.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Выражение \"yield\" неявно формирует результат типа \"any\", поскольку содержащий его генератор не имеет заметки типа возвращаемого значения.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Выражения yield не могут быть использованы в инициализаторе параметра." +} diff --git a/tsc/internal/diagnostics/loc/tr-TR.generated.json b/tsc/internal/diagnostics/loc/tr-TR.generated.json index 0a5fe8aecf182..e262f9cfbedb3 100644 --- a/tsc/internal/diagnostics/loc/tr-TR.generated.json +++ b/tsc/internal/diagnostics/loc/tr-TR.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "TÜM DERLEYİCİ SEÇENEKLERİ", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Bir '{0}' değiştiricisi, içeri aktarma bildirimiyle birlikte kullanılamaz.", - "A_0_parameter_must_be_the_first_parameter_2680": "Bir '{0}' parametresi ilk parametre olmalıdır.", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' etiketi, '@typedef', '@callback' veya '@overload' etiketini takip edemez", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' açıklaması, birden çok '@type' etiketi içeremez.", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' sabit değeri, özellik adı olarak kullanılamaz.", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Bir büyük tamsayı sabit değerinde üstel gösterim kullanılamaz.", - "A_bigint_literal_must_be_an_integer_1353": "Büyük tamsayı sabit değeri bir tamsayı olmalıdır.", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Uygulama imzasındaki bir bağlama deseni parametresi isteğe bağlı olamaz.", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' deyimi yalnızca bir kapsayan yineleme veya switch deyimi içinde kullanılabilir.", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' deyimi, yalnızca kapsayan deyimin etiketine atlayabilir.", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Karakter sınıfı ayrılmış bir çift noktalayıcı içermemelidir. Ters eğik çizgiyle bundan kaçmak mı istediniz?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Bir karakter sınıfı aralığı başka bir karakter sınıfı tarafından sınırlanmamalıdır.", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Bir sınıf, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı uygulayabilir.", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Bir sınıf, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini uygulayabilir.", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Bir sınıf '{0}' gibi ilkel bir türü genişletemez. Sınıflar yalnızca oluşturulabilen değerleri genişletebilir.", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Bir sınıf '{0}' gibi ilkel bir türü uygulayamaz. Yalnızca diğer adlandırılmış nesne türlerini uygulayabilir.", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' değiştiricisi olmayan bir sınıf bildiriminin adı olmalıdır.", - "A_class_member_cannot_have_the_0_keyword_1248": "Bir sınıf üyesi '{0}' anahtar kelimesini içeremez.", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Hesaplanan özellik adında virgül ifadesine izin verilmez.", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Hesaplanan özellik adı, kapsayan türündeki bir tür parametresine başvuramaz.", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Sınıf özelliği bildirimindeki hesaplanan özellik adı, basit bir sabit değer türüne veya 'benzersiz sembol' türüne sahip olmalıdır.", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Bir metot aşırı yüklemesindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Bir tür sabit değerindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Bir çevresel bağlamdaki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Bir arabirimdeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Hesaplanan özellik adı 'string', 'number', 'symbol' veya 'any' türünde olmalıdır.", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' onaylamasu yalnızca sabit listesi üyelerine veya dize, sayı, Boolean, dizi ya da nesne sabit değerlerine yönelik başvurulara uygulanabilir.", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const numaralandırma üyesine yalnızca dize sabit değeri kullanılarak erişilebilir.", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Çevresel bağlamdaki 'const' başlatıcısı bir dize veya sayısal sabit değer ya da sabit değer sabit listesi başvurusu olmalıdır.", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Sınıfı 'null' değerini aşan bir oluşturucu 'super' çağrısını içeremez.", - "A_constructor_cannot_have_a_this_parameter_2681": "Bir oluşturucu 'this' parametresini içeremez.", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' deyimi yalnızca bir kapsayan yineleme deyimi içinde kullanılabilir.", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' deyimi, yalnızca kapsayan yineleme deyiminin etiketine atlayabilir.", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Bir beyan dosyası 'import type' olmadan içe aktarılamaz. Bunun yerine '{0}' uygulama dosyasını mı içe aktarmak istediniz?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Çevresel bağlamda 'declare' değiştiricisi kullanılamaz.", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekoratörler yalnızca metot uygulaması dekore edebilir; aşırı yüklemeleri dekore edemez.", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' yan tümcesi, 'switch' deyiminde birden fazla kez bulunamaz.", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Varsayılan dışarı aktarma, yalnızca ECMAScript stili bir modülde kullanılabilir.", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Varsayılan dışarı aktarma, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Bu bağlamda '!' belirli atama onayına izin verilmez.", - "A_destructuring_declaration_must_have_an_initializer_1182": "Yok etme bildiriminin bir başlatıcısı olmalıdır.", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5'teki dinamik içe aktarma çağrısı 'Promise' oluşturucusu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", - "A_file_cannot_have_a_reference_to_itself_1006": "Bir dosya kendine başvuramaz.", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' döndüren bir işlev, erişilebilir bir uç noktaya sahip olamaz.", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'New' anahtar kelimesiyle çağrılan bir işlev, 'void' olan bir 'this' türüne sahip olamaz.", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'undefined', 'void' veya 'any' olmayan bir işlev bir değer döndürmelidir.", - "A_generator_cannot_have_a_void_type_annotation_2505": "Bir oluşturucu 'void' türündeki bir ek açıklamaya sahip olamaz.", - "A_get_accessor_cannot_have_parameters_1054": "Bir 'get' erişimcisi parametrelere sahip olamaz.", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get erişimcisi en az ayarlayıcı kadar erişilebilir olmalıdır", - "A_get_accessor_must_return_a_value_2378": "'get' erişimcisinin bir değer döndürmesi gerekir.", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Etiketli demet öğesi türden sonra değil, addan sonra ve iki nokta işaretinden önce bir soru işareti ile isteğe bağlı olarak bildirilir.", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Etiketlenmiş bir demet öğesi, tür yerine addan önce '...' ile bekleyen olarak bildirilir.", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "Eşlenmiş bir tür özellik veya metot bildiremez.", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Sabit listesi bildirimindeki bir üye başlatıcısı, diğer sabit listelerinde tanımlanan üyeler dahil olmak üzere kendinden sonra bildirilen üyelere başvuramaz.", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Mixin sınıfının 'any[]' türünde tek bir rest parametresi içeren bir oluşturucusu olmalıdır.", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Soyut yapı imzası içeren bir tür değişkeninden genişleyen mixin sınıfı da 'soyut' olarak bildirilmelidir.", - "A_module_cannot_have_multiple_default_exports_2528": "Modül, birden fazla varsayılan dışarı aktarmaya sahip olamaz.", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden farklı bir dosyada olamaz.", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden önce gelemez.", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Ad alanı bildirimine yalnızca bir ad alanının veya modülün en üst düzeyinde izin verilir.", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' anahtar sözcüğü kullanılarak 'namespace' bildirimi bildirilmez. Lütfen bunun yerine 'namespace' anahtar sözcüğünü kullanın.", - "A_non_dry_build_would_build_project_0_6357": "-dry bayrağı kullanılmayan bir derleme '{0}' projesini derler", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry bayrağı kullanılmayan bir derleme şu dosyaları siler: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY dışı bir derleme, '{0}' projesinin çıkışı için zaman damgalarını güncelleştirir", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Parametre başlatıcısına yalnızca bir işlevde veya oluşturucu uygulamasında izin verilir.", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Parametre özelliği, rest parametresi kullanılarak bildirilemez.", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Parametre özelliğine yalnızca bir oluşturucu uygulamasında izin verilir.", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Parametre özelliği, bağlama deseni kullanılarak bildirilemez.", - "A_promise_must_have_a_then_method_1059": "Promise'in bir 'then' metodu olmalıdır.", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Bir 'unique symbol' türündeki sınıfın özelliği hem 'static' hem de 'readonly' olmalıdır.", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Bir 'unique symbol' türündeki arabirimin veya tür sabit değerinin özelliği 'readonly' olmalıdır.", - "A_required_element_cannot_follow_an_optional_element_1257": "Gerekli öğe, isteğe bağlı öğeden sonra gelemez.", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Gerekli parametre, isteğe bağlı parametreden sonra gelemez.", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest öğesi bir bağlama deseni içeremez.", - "A_rest_element_cannot_follow_another_rest_element_1265": "REST öğesi başka bir REST öğesini izleyemez.", - "A_rest_element_cannot_have_a_property_name_2566": "Rest öğesinin özellik adı olamaz.", - "A_rest_element_cannot_have_an_initializer_1186": "rest öğesi bir başlatıcıya sahip olamaz.", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest öğesi, yok etme desenindeki son öğe olmalıdır.", - "A_rest_element_type_must_be_an_array_type_2574": "REST öğesi dizi türünde olmalıdır.", - "A_rest_parameter_cannot_be_optional_1047": "rest parametresi isteğe bağlı olamaz.", - "A_rest_parameter_cannot_have_an_initializer_1048": "rest parametresi bir başlatıcıya sahip olamaz.", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest parametresi, parametre listesinin sonunda bulunmalıdır.", - "A_rest_parameter_must_be_of_an_array_type_2370": "rest parametresi dizi türünde olmalıdır.", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Bir rest parametresi veya bağlama deseninin sonunda virgül olamaz.", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' deyimi, yalnızca bir işlev gövdesinde kullanılabilir.", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'Return' deyimi bir sınıf statik bloğu içinde kullanılamaz.", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "İçeri aktarmaları, 'baseUrl' ile ilgili arama konumlarına yeniden eşleyen bir girdi dizisi.", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' erişimcisi, dönüş türü ek açıklamasına sahip olamaz.", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' erişimcisi isteğe bağlı bir parametreye sahip olamaz.", - "A_set_accessor_cannot_have_rest_parameter_1053": "'set' erişimcisi rest parametresine sahip olamaz.", - "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' erişimcisi tam olarak bir parametreye sahip olmalıdır.", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' erişimci parametresinin bir başlatıcısı olamaz.", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Yayılma bağımsız değişkeni, bir demet türüne sahip olmalı ya da bir rest parametresine geçirilmelidir.", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' çağrısı, başlatılmış özellikleri, parametre özelliklerini veya özel tanımlayıcıları içeren türetilmiş bir sınıfın oluşturucusu içinde kök düzeyinde bir deyim olmalıdır.", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Bir türetilmiş sınıf başlatılmış özellikler, parametre özellikleri veya özel tanımlayıcılar içerdiğinde 'super' çağrısı, 'super' veya 'this' öğesine başvurmak için oluşturucudaki ilk deyim olmalıdır.", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'This' tabanlı tür koruması, parametre tabanlı tür koruması ile uyumlu değildir.", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' türü, yalnızca bir sınıfın veya arabirimin statik olmayan bir üyesinde kullanılabilir.", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' etkinleştirildiğinde, CommonJS modülündeki değer bildirimlerinde üst düzey bir 'export' değiştiricisi kullanılamaz.", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' dosyası şu konumda zaten tanımlanmış: '{0}'.", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Demet üyesi hem isteğe bağlı hem de diğerleri olamaz.", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Bir demet türünün negatif bir değerle dizini oluşturulamaz.", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Üs ifadesinin sol tarafında tür onaylama ifadesine izin verilmez. İfadeyi parantez içine yazmayı düşünün.", - "A_type_literal_property_cannot_have_an_initializer_1247": "Tür sabit değeri özelliği bir başlatıcıya sahip olamaz.", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Yalnızca tür içeri aktarma işlemleri varsayılan bir içeri aktarmayı veya adlandırılan bağlamaları belirtebilir ancak ikisini birden belirtemez.", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Bir tür koşulu, rest parametresine başvuru yapamaz.", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Bir tür koşulu, bağlama desenindeki '{0}' öğesine başvuru yapamaz.", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Bir tür koşuluna yalnızca işlevlere ve metotlara ait dönüş türü konumunda izin verilir.", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Bir tür koşulunun türü, parametresinin türüne atanabilir olmalıdır.", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "'isolatedModules' ve 'emitDecoratorMetadata' etkinleştirildiğinde, dekore edilmiş bir imzada başvurulan bir tür 'import type' veya bir namespace import ile içeri aktarılmalıdır.", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Bir 'unique symbol' türündeki değişken 'const' olmalıdır.", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Bir 'yield' ifadesine yalnızca oluşturucu gövdesinde izin verilir.", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "'{1}' sınıfındaki '{0}' soyut metoduna super ifadesi ile erişilemez.", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "'{1}' sınıfındaki '{0}' soyut özelliğine oluşturucuda erişilemiyor.", - "Accessibility_modifier_already_seen_1028": "Erişilebilirlik değiştiricisi zaten görüldü.", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Erişimciler yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "İki erişimci de soyut veya soyut olmayan olmalıdır.", - "Add_0_to_unresolved_variable_90008": "Çözümlenmemiş değişkene '{0}.' ekle", - "Add_a_return_statement_95111": "Return deyimi ekleyin", - "Add_a_return_type_to_the_function_declaration_9031": "İşlev bildirimine bir dönüş türü ekleyin.", - "Add_a_return_type_to_the_function_expression_9030": "İşlev ifadesine bir dönüş türü ekleyin.", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "Get erişimcisi bildirimine bir dönüş türü ekleyin.", - "Add_a_return_type_to_the_method_9034": "Yönteme bir dönüş türü ekleyin", - "Add_a_type_annotation_to_the_parameter_0_9028": "{0} parametresine bir tür ek açıklaması ekleyin.", - "Add_a_type_annotation_to_the_property_0_9029": "{0} özelliğine bir tür ek açıklaması ekleyin.", - "Add_a_type_annotation_to_the_variable_0_9027": "{0} değişkenine bir tür ek açıklaması ekleyin.", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ayarlanmış erişimci bildiriminin parametresine bir tür ekleyin.", - "Add_all_missing_async_modifiers_95041": "Tüm eksik 'async' değiştiricileri ekle", - "Add_all_missing_attributes_95168": "Tüm eksik öznitelikleri ekleyin", - "Add_all_missing_call_parentheses_95068": "Eksik tüm çağrı parantezlerini ekle", - "Add_all_missing_function_declarations_95157": "Eksik işlev bildirimlerinin tümünü ekle", - "Add_all_missing_imports_95064": "Tüm eksik içeri aktarmaları ekleyin", - "Add_all_missing_members_95022": "Tüm eksik üyeleri ekle", - "Add_all_missing_override_modifiers_95162": "Tüm eksik 'override' değiştiricilerini ekle", - "Add_all_missing_parameters_95190": "Tüm eksik parametreleri ekleyin", - "Add_all_missing_properties_95166": "Tüm eksik özellikleri ekleyin", - "Add_all_missing_return_statement_95114": "Tüm eksik return deyimlerini ekleyin", - "Add_all_missing_super_calls_95039": "Tüm eksik süper çağrıları ekle", - "Add_all_missing_type_annotations_90067": "Eksik olan tüm tür ek açıklamalarını ekleyin", - "Add_all_optional_parameters_95193": "Tüm isteğe bağlı parametreleri ekleyin", - "Add_annotation_of_type_0_90062": "'{0}' türünde ek açıklama ekleyin", - "Add_async_modifier_to_containing_function_90029": "İçeren işleve zaman uyumsuz değiştirici ekle", - "Add_await_95083": "'await' ekleyin", - "Add_await_to_initializer_for_0_95084": "'{0}' için başlatıcıya 'await' ekleyin", - "Add_await_to_initializers_95089": "Başlatıcılara 'await' ekleyin", - "Add_braces_to_arrow_function_95059": "Ok işlevine küme ayracı ekleyin", - "Add_const_to_all_unresolved_variables_95082": "Çözümlenmemiş tüm değişkenlere 'const' ekleyin", - "Add_const_to_unresolved_variable_95081": "Çözümlenmemiş değişkene 'const' ekleyin", - "Add_definite_assignment_assertion_to_property_0_95020": "'{0}' özelliğine belirli atama onayı ekle", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Tüm başlatılmamış özelliklere kesin atama onayları ekle", - "Add_export_to_make_this_file_into_a_module_95097": "Bu dosyayı bir modüle dönüştürmek için 'export {}' ekleyin", - "Add_extends_constraint_2211": "`extends` kısıtlaması ekleyin.", - "Add_extends_constraint_to_all_type_parameters_2212": "Tüm tür parametrelerine `extends` kısıtlaması ekleyin", - "Add_import_from_0_90057": "\"{0}\" kaynağından içeri aktarma ekle", - "Add_index_signature_for_property_0_90017": "'{0}' özelliği için dizin imzası ekle", - "Add_initializer_to_property_0_95019": "'{0}' özelliğine başlatıcı ekle", - "Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle", - "Add_missing_attributes_95167": "Eksik öznitelikleri ekleyin", - "Add_missing_call_parentheses_95067": "Eksik çağrı parantezlerini ekle", - "Add_missing_comma_for_object_member_completion_0_95187": "'{0}' nesne üyesinin tamamlanması için eksik virgülü ekleyin.", - "Add_missing_enum_member_0_95063": "Eksik '{0}' sabit listesi üyesini ekleyin", - "Add_missing_function_declaration_0_95156": "Eksik '{0}' işlev bildirimini ekle", - "Add_missing_new_operator_to_all_calls_95072": "Tüm çağrılara eksik 'new' işlecini ekleyin", - "Add_missing_new_operator_to_call_95071": "Çağrıya eksik 'new' işlecini ekleyin", - "Add_missing_parameter_to_0_95188": "'{0}' öğesine eksik parametreyi ekleyin", - "Add_missing_parameters_to_0_95189": "'{0}' öğesine eksik parametreleri ekleyin", - "Add_missing_properties_95165": "Eksik özellikleri ekleyin", - "Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle", - "Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle", - "Add_names_to_all_parameters_without_names_95073": "Adları olmayan tüm parametrelere ad ekleyin", - "Add_optional_parameter_to_0_95191": "'{0}' öğesine isteğe bağlı parametre ekleme", - "Add_optional_parameters_to_0_95192": "'{0}' öğesine isteğe bağlı parametreler ekle", - "Add_or_remove_braces_in_an_arrow_function_95058": "Ok işlevine küme ayracı ekle veya kaldır", - "Add_override_modifier_95160": "'override' değiştiricisi ekle", - "Add_parameter_name_90034": "Parametre adı ekleyin", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle", - "Add_resolution_mode_import_attribute_95196": "'resolution-mode' içeri aktarma özniteliği ekle", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "'resolution-mode' içeri aktarma özniteliğini, bunun gerekliği olduğu tüm yalnızca tür içeri aktarma işlemlerine ekle", - "Add_return_type_0_90063": "'{0}' dönüş tipi ekleyin", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Türü açık hale getirmek için bu ifadeye satisfies operatörü ve bir tür iddiası ekleyin (satisfies T as T).", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Satisfies operatörü ve '{0}' içeren satır içi tip iddiası ekleyin", - "Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle", - "Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "İndis kullanılarak erişildiğinde türe 'undefined' ekle.", - "Add_undefined_to_optional_property_type_95169": "İsteğe bağlı özellik türüne 'undefined' ekleyin", - "Add_undefined_type_to_all_uninitialized_properties_95029": "Tüm başlatılmamış özelliklere tanımsız tür ekle", - "Add_undefined_type_to_property_0_95018": "'{0}' özelliğine 'undefined' türünü ekle", - "Add_unknown_conversion_for_non_overlapping_types_95069": "Çakışmayan türler için 'unknown' dönüştürmesi ekleyin", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Çakışmayan türlerin tüm dönüştürmelerine 'unknown' ekleyin", - "Add_void_to_Promise_resolved_without_a_value_95143": "Değer olmadan çözümlenen Promise'e 'void' ekle", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "Değer olmadan çözümlenen tüm Promise'lere 'void' ekle", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Bir tsconfig.json dosyası eklemek, hem TypeScript hem de JavaScript dosyaları içeren projeleri düzenlemenize yardımcı olur. Daha fazla bilgi edinmek için bkz. https://aka.ms/tsconfig.", - "All_declarations_of_0_must_have_identical_constraints_2838": "Tüm '{0}' bildirimleri, aynı kısıtlamalara sahip olmalıdır.", - "All_declarations_of_0_must_have_identical_modifiers_2687": "Tüm '{0}' bildirimleri aynı değiştiricilere sahip olmalıdır.", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tüm '{0}' bildirimleri özdeş tür parametrelerine sahip olmalıdır.", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Soyut metoda ait tüm bildirimler ardışık olmalıdır.", - "All_destructured_elements_are_unused_6198": "Yapısı bozulan öğelerin hiçbiri kullanılmıyor.", - "All_imports_in_import_declaration_are_unused_6192": "İçeri aktarma bildirimindeki hiçbir içeri aktarma kullanılmadı.", - "All_type_parameters_are_unused_6205": "Tüm tür parametreleri kullanılmıyor.", - "All_variables_are_unused_6199": "Hiçbir değişken kullanılmıyor.", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript dosyalarının programınızın bir parçası olmasına izin verin. Bu dosyalardan hata almak için 'checkJs' seçeneğini kullanın.", - "Allow_accessing_UMD_globals_from_modules_6602": "Modüllerden UMD genel değişkenlerine erişmeye izin verin.", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Bir modülün varsayılan dışarı aktarması olmadığında 'import x from y' öğesine izin verin.", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib’den yardımcı işlevlerin her dosya başına eklenmesi yerine proje başına bir kez içeri aktarılmasına izin verin.", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "İçe aktarma işlemlerinin TypeScript dosya uzantılarını içermesine izin verin. '--moduleResolution bundler' ve '--noEmit' veya '--emitDeclarationOnly' ayarını gerektirir.", - "Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Modüller çözümlenirken birden çok klasörün tek bir klasör olarak işlenmesine izin verin.", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Zaten eklenmiş olan '{0}' dosya adı, '{1}' dosya adından yalnızca büyük/küçük harf yönünden farklıdır.", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Çevresel modül bildirimi göreli modül adını belirtemez.", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Çevresel modüller, diğer modüllerde veya ad alanlarında iç içe bulunamaz.", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD modülü birden fazla ad atamasında sahip olamaz.", - "An_abstract_accessor_cannot_have_an_implementation_1318": "Soyut erişimcinin uygulaması olamaz.", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Erişilebilirlik değiştiricisi özel bir tanımlayıcıyla kullanılamıyor.", - "An_accessor_cannot_have_type_parameters_1094": "Erişimci, tür parametrelerine sahip olamaz.", - "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' özelliği isteğe bağlı olarak bildirilemez.", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Çevresel modül bildirimine yalnızca bir dosyadaki en üst düzeyde izin verilir.", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "'{0}' için bağımsız değişken sağlanmadı.", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Bu bağlama deseniyle eşleşen bağımsız değişken sağlanmadı.", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetik işlenen 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", - "An_arrow_function_cannot_have_a_this_parameter_2730": "Ok işlevi 'this' parametresine sahip olamaz.", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5'teki eşzamansız bir işlev veya yöntem, 'Promise' yapıcısını gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", - "An_async_iterator_must_have_a_next_method_2519": "Zaman uyumsuz yineleyicinin bir 'next()' metodu olmalıdır.", - "An_element_access_expression_should_take_an_argument_1011": "Bir öğe erişimi ifadesi bir bağımsız değişken almalıdır.", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Sabit listesi üyesi özel bir tanımlayıcıyla adlandırılamaz.", - "An_enum_member_cannot_have_a_numeric_name_2452": "Sabit listesi üyesi, sayısal bir ada sahip olamaz.", - "An_enum_member_name_must_be_followed_by_a_or_1357": "Sabit listesi üyesinin adından sonra bir ',', '=' veya '}' gelmelidir.", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Bu bilgilerin genişletilmiş bir versiyonu, kullanılabilir tüm derleyici seçeneklerini görüntüler", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Dışarı aktarma ataması, dışarı aktarılmış diğer öğelere sahip bir modülde kullanılamaz.", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Ad alanında dışarı aktarma ataması kullanılamaz.", - "An_export_assignment_cannot_have_modifiers_1120": "Dışarı aktarma ataması, değiştiricilere sahip olamaz.", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Dışarı aktarma ataması, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Dışarı aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Dışarı aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", - "An_export_declaration_cannot_have_modifiers_1193": "Dışarı aktarma bildirimi, değiştiricilere sahip olamaz.", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export default' gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'VerbatimModuleSyntax' etkinleştirildiğinde 'dışa aktarma varsayılanı' bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' türünde bir ifade doğruluk bakımından test edilemiyor.", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Genişletilmiş Unicode kaçış değeri, 0x0 ve 0x10FFFF dahil olmak üzere bu değerler arasında olmalıdır.", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Tanımlayıcı veya anahtar sözcük, sayısal bir sabit değerden hemen sonra gelemez.", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uygulama, çevresel bağlamda bildirilemez.", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "İçeri aktarma diğer adı, 'export type' kullanılarak dışarı aktarılan bir bildirime başvuramaz.", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "İçeri aktarma diğer adı, 'import type' kullanılarak içeri aktarılan bir bildirime başvuramaz.", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Bir içe aktarma takma adı, 'verbatimModuleSyntax' etkinleştirildiğinde bir türe veya yalnızca tür bildirimine çözümlenemez.", - "An_import_alias_cannot_use_import_type_1392": "İçeri aktarma diğer adı, 'import type' kullanamaz", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "İçeri aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "İçeri aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", - "An_import_declaration_cannot_have_modifiers_1191": "İçeri aktarma bildirimi, değiştiricilere sahip olamaz.", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Bir içe aktarma yolu yalnızca 'allowImportingTsExtensions' etkinleştirildiğinde '{0}' uzantısıyla bitebilir.", - "An_index_signature_cannot_have_a_rest_parameter_1017": "Dizin imzası bir rest parametresine sahip olamaz.", - "An_index_signature_cannot_have_a_trailing_comma_1025": "Dizin imzasının sonunda virgül olamaz.", - "An_index_signature_must_have_a_type_annotation_1021": "Dizin imzası bir tür açıklamasına sahip olmalıdır.", - "An_index_signature_must_have_exactly_one_parameter_1096": "Dizin imzası tam olarak bir parametreye sahip olmalıdır.", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Dizin imzası parametresi, bir soru işareti içeremez.", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Dizin imzası parametresi, bir erişilebilirlik değiştiricisine sahip olamaz.", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "Dizin imzası parametresi, bir başlatıcıya sahip olamaz.", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "Dizin imzası parametresi, bir tür ek açıklamasına sahip olmalıdır.", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Dizin imzası parametre türü sabit değer veya genel tür olamaz. Bunun yerine eşlenen nesne türü kullanabilirsiniz.", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Dizin imzası parametre türü 'dize', 'sayı', 'sembol' veya şablon sabit değeri olmalıdır.", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Bir örnek oluşturma ifadesinin ardından özellik erişimi gelemez.", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Bir arabirim, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı genişletebilir.", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Arabirim, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini genişletebilir.", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Bir arayüz '{0}' gibi ilkel bir türü genişletemez. Yalnızca diğer adlandırılmış nesne türlerini genişletebilir.", - "An_interface_property_cannot_have_an_initializer_1246": "Arabirim özelliği bir başlatıcıya sahip olamaz.", - "An_iterator_must_have_a_next_method_2489": "Bir yineleyici 'next()' metoduna sahip olmalıdır.", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "JSX parçalarıyla @jsx pragması kullanılırken bir @jsxFrag pragması gerekir.", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Nesne sabit değeri aynı ada sahip birden fazla get/set erişimcisine sahip olamaz.", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Nesne sabit değerinin aynı ada sahip birden fazla özelliği olamaz.", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Nesne sabit değeri, aynı ada sahip bir özellik ve erişimciye sahip olamaz.", - "An_object_member_cannot_be_declared_optional_1162": "Nesne üyesi, isteğe bağlı olarak bildirilemez.", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Bir nesnenin '[Symbol.hasInstance]' yönteminin, bir 'instanceof' ifadesinin sağ tarafında kullanılabilmesi için bir boole değeri döndürmesi gereklidir.", - "An_optional_chain_cannot_contain_private_identifiers_18030": "İsteğe bağlı bir zincir, özel tanımlayıcı içeremez.", - "An_optional_element_cannot_follow_a_rest_element_1266": "İsteğe bağlı bir öğe, REST öğesini izleyemez.", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' öğesinin dış değeri bu kapsayıcı tarafından gölgelenir.", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Aşırı yükleme imzası, bir oluşturucu olarak bildirilemez.", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Üs ifadesinin sol tarafında '{0}' işlecine sahip bir tek terimli ifadeye izin verilmez. İfadeyi parantez içine yazmayı düşünün.", - "Annotate_everything_with_types_from_JSDoc_95043": "Her şeye JSDoc'tan türler ile not ekle", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Ad alanındaki expando fonksiyonunun özellik türlerine not ekleyin", - "Annotate_with_type_from_JSDoc_95009": "JSDoc türü ile not ekle", - "Another_export_default_is_here_2753": "Başka bir dışarı aktarma varsayılanını burada bulabilirsiniz.", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Tek bir karakterden daha fazlasıyla eşleşebilecek herhangi bir Unicode özelliği, yalnızca Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tek bir karakterden fazlasıyla eşleşmesi muhtemel olan herhangi bir şey, negatif karakter sınıfı içinde geçersizdir.", - "Are_you_missing_a_semicolon_2734": "Noktalı virgülünüz eksik mi?", - "Argument_expression_expected_1135": "Bağımsız değişken ifadesi bekleniyor.", - "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' seçeneğinin bağımsız değişkeni {1} olmalıdır.", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Dinamik içeri aktarmanın bağımsız değişkeni yayılma öğesi olamaz.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "'{0}' türündeki bağımsız değişken '{1}' türündeki parametreye atanamaz.", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' türü bağımsız değişkeni 'exactOptionalPropertyTypes: true' ile '{1}' türündeki parametreye atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "'{0}' rest parametresinin bağımsız değişkenleri sağlanmadı.", - "Array_element_destructuring_pattern_expected_1181": "Dizi öğesi yok etme deseni bekleniyor.", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Yayılma öğelerine sahip diziler --isolatedDeclarations ile çıkarsanamaz.", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Onaylamalar, çağrı hedefindeki her adın açık bir tür ek açıklaması ile bildirilmesini gerektirir.", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Onaylamalar, çağrı hedefinin bir tanımlayıcı veya tam ad olmasını gerektirir.", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Özelliklerin işlevlere bildirilmeden atanması --isolatedDeclarations ile desteklenmez. Bu işleve atanan özellikler için açık bir bildirim ekleyin.", - "Asterisk_Slash_expected_1010": "'*/' bekleniyor.", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "En az bir erişimcinin --isolatedDeclarations ile açık bir tür ek açıklamasına sahip olması gereklidir.", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Genel kapsam genişletmeleri yalnızca dış modüllerde ya da çevresel modül bildirimlerinde doğrudan yuvalanabilir.", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Genel kapsam genişletmeleri, zaten çevresel olan bir bağlamda göründükleri durumlar dışında 'declare' değiştiricisine sahip olmalıdır.", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "'{0}' projesinde otomatik tür bulma etkinleştirildi. '{2}' önbellek konumu kullanılarak '{1}' modülü için ek çözümleme geçişi çalıştırılıyor.", - "BUILD_OPTIONS_6919": "DERLEME SEÇENEKLERİ", - "Backwards_Compatibility_6253": "Geriye Doğru Uyumluluk", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Temel sınıf ifadelerinde sınıf türü parametrelerine başvuruda bulunulamaz.", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "'{0}' temel oluşturucu dönüş türü, statik olarak bilinen üyelere sahip bir nesne türü veya nesne türlerinin bir kesişimi değil.", - "Base_constructors_must_all_have_the_same_return_type_2510": "Tüm temel oluşturucuların aynı dönüş türüne sahip olması gerekir.", - "Base_directory_to_resolve_non_absolute_module_names_6083": "Mutlak olmayan modül adlarını çözümlemek için kullanılan temel dizin.", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020'den düşük değerler hedeflendiğinde büyük tamsayı sabit değerleri kullanılamıyor.", - "Binary_digit_expected_1177": "İkili sayı bekleniyor.", - "Binding_element_0_implicitly_has_an_1_type_7031": "'{0}' bağlama öğesi, örtük olarak '{1}' türü içeriyor.", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "Blok kapsamlı değişken '{0}', bildirilmeden önce kullanıldı.", - "Build_a_composite_project_in_the_working_directory_6925": "Çalışma dizininde kompozit proje oluşturun.", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin.", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Eskiyse, bir veya daha fazla projeyi ve bağımlılıklarını derleyin", - "Build_option_0_requires_a_value_of_type_1_5073": "'{0}' derleme seçeneği, {1} türünde bir değer gerektiriyor.", - "Building_project_0_6358": "'{0}' projesi derleniyor...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Yerleşik yineleyiciler, 'any' yerine 'undefined' 'TReturn' türü ile örnekleniyor.", - "COMMAND_LINE_FLAGS_6921": "KOMUT SATIRI BAYRAKLARI", - "COMMON_COMMANDS_6916": "ORTAK KOMUTLAR", - "COMMON_COMPILER_OPTIONS_6920": "ORTAK DERLEYİCİ SEÇENEKLERI", - "Call_decorator_expression_90028": "Dekoratör ifadesini çağır", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "'{0}' ve '{1}' çağrı imzası dönüş türleri uyumsuz.", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dönüş türü ek açıklaması bulunmayan çağrı imzası, örtük olarak 'any' dönüş türüne sahip.", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Bağımsız değişken içermeyen çağrı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", - "Call_target_does_not_contain_any_signatures_2346": "Çağrı hedefi imza içermiyor.", - "Can_only_convert_logical_AND_access_chains_95142": "Yalnızca mantıksal zincirler VE erişim zincirleri dönüştürülebilir", - "Can_only_convert_named_export_95164": "Yalnızca adı belirtilen dışarı aktarma dönüştürülebilir", - "Can_only_convert_property_with_modifier_95137": "Yalnızca değiştirici içeren özellik dönüştürülebilir", - "Can_only_convert_string_concatenations_and_string_literals_95154": "Yalnızca dize birleştirmelerini ve dize değişmezlerini dönüştürebilir", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}' bir ad alanı değil tür olduğundan '{0}.{1}' erişimi sağlanamıyor. '{0}[\"{1}\"]' değerini belirterek '{0}' içindeki '{1}' özelliğinin türünü almak mı istediniz?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' etkinleştirildiğinde başka bir dosyadan '{0}' öğesine niteleme olmadan erişilemez. Bunun yerine '{2}' kullanın.", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' etkinleştirildiğinde ortam sabit listelerine erişilemiyor.", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' oluşturucu türüne '{1}' oluşturucu türü atanamaz.", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Bir soyut oluşturucu türü, soyut olmayan bir oluşturucu türüne atanamaz.", - "Cannot_assign_to_0_because_it_is_a_class_2629": "Sınıf olduğundan '{0}' özelliğine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "Sabit olduğundan '{0}' özelliğine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_a_function_2630": "İşlev olduğundan '{0}' özelliğine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Ad alanı olduğundan '{0}' özelliğine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Salt okunur bir özellik olduğundan '{0}' özelliğine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "Sabit listesi olduğundan '{0}' öğesine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_an_import_2632": "İçeri aktarma olduğundan '{0}' öğesine atama yapılamıyor.", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Değişken olmadığından '{0}' öğesine atama yapılamıyor.", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "'{0}' özel metoduna atanamıyor. Özel metotlar yazılamaz.", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' modülü, modül olmayan bir varlığa çözümlendiğinden genişletilemiyor.", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modül olmayan bir varlığa çözümlendiğinden '{0}' modülü, değer dışarı aktarmalarıyla genişletilemiyor.", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' bayrağı 'amd' veya 'system' olmadığı sürece '{0}' seçeneği kullanılarak modül derlenemez.", - "Cannot_create_an_instance_of_an_abstract_class_2511": "Bir soyut sınıfın örneği oluşturulamaz.", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen kapsayan oluşturucu her zaman '{0}' gönderdiğinden yineleme temsili, değere atanamıyor.", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}' dışarı aktarılamıyor. Bir modülden yalnızca yerel bildirimler dışarı aktarılabilir.", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "'{0}' sınıfı genişletilemez. Sınıf oluşturucusu, özel olarak işaretlenmiş.", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "'{0}' arabirimi genişletilemiyor. Bunun yerine 'implements' kullanmayı deneyin.", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Geçerli dizinde tsconfig.json dosyası bulunamıyor: {0}.", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Belirtilen dizinde tsconfig.json dosyası bulunamıyor: '{0}'.", - "Cannot_find_global_type_0_2318": "'{0}' genel türü bulunamıyor.", - "Cannot_find_global_value_0_2468": "'{0}' genel değeri bulunamıyor.", - "Cannot_find_lib_definition_for_0_2726": "'{0}' için kitaplık tanımı bulunamıyor.", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' için kitaplık tanımı bulunamıyor. Şunu mu demek istediniz: '{1}'?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' modülü bulunamıyor. Modülü '.json' uzantısıyla içeri aktarmak için '--resolveJsonModule' kullanmayı deneyin.", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' modülü bulunamıyor. 'moduleResolution' seçeneğini 'nodenext' olarak ayarlamak veya 'paths' seçeneğine diğer adlar eklemek mi istediniz?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' modülü veya karşılık gelen tür bildirimleri bulunamıyor.", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' yan etkili içe aktarma için modül veya tür bildirimleri bulunamadı.", - "Cannot_find_name_0_2304": "'{0}' adı bulunamıyor.", - "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' adı bulunamıyor. Bunu mu demek istediniz: '{1}'?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' adı bulunamıyor. 'this.{0}' örnek üyesini mi aradınız?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' adı bulunamıyor. '{1}.{0}' statik üyesini mi aradınız?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "'{0}' adı bulunamadı. Bunu zaman uyumsuz bir işleve mi yazmak istediniz?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? `npm i --save-dev @types/bun` deneyin.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? 'npm i --save-dev @types/bun' komutunu deneyin ve ardından tsconfig dosyanızdaki type alanına 'bun' ekleyin.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki türler alanına 'jest' veya 'mocha' ekleyin.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz gerekiyor mu? Şunu deneyin: `npm i --save-dev @types/jquery`. Ardından tsconfig dosyanızdaki türler alanına 'jquery' öğesini ekleyin.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`.", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`. Ardından tsconfig dosyanızdaki türler alanına 'node' ekleyin.", - "Cannot_find_namespace_0_2503": "'{0}' ad alanı bulunamıyor.", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "Ad alanı '{0}' bulunamıyor. Bunu mu demek istediniz: '{1}'?", - "Cannot_find_parameter_0_1225": "'{0}' parametresi bulunamıyor.", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Giriş dosyalarına ait ortak alt dizin yolu bulunamıyor.", - "Cannot_find_type_definition_file_for_0_2688": "'{0}' için tür tanımı dosyası bulunamıyor.", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Tür bildirim dosyaları içeri aktarılamıyor. '{1}' yerine '{0}' dosyasını içeri aktarmanız önerilir.", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Dış kapsamdaki '{0}' değişkeni, blok kapsamındaki '{1}' bildirimiyle aynı kapsamda başlatılamaz.", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "Muhtemelen 'null' olan bir nesne çağrılamıyor.", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Muhtemelen 'null' veya 'undefined' olan bir nesne çağrılamıyor.", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Muhtemelen 'undefined' olan bir nesne çağrılamıyor.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi bozma her zaman '{0}' gönderdiğinden değer yinelenemiyor.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi yayılması her zaman '{0}' gönderdiğinden değer yinelenemiyor.", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen for-of her zaman '{0}' gönderdiğinden değer yinelenemiyor.", - "Cannot_move_statements_to_the_selected_file_95183": "İfadeler seçilen dosyaya taşınamıyor", - "Cannot_move_to_file_selected_file_is_invalid_95179": "Dosyaya taşınamıyor, seçili dosya geçersiz", - "Cannot_read_file_0_5083": "'{0}' dosyası okunamıyor.", - "Cannot_read_file_0_Colon_1_5012": "'{0}' dosyası okunamıyor: {1}.", - "Cannot_redeclare_block_scoped_variable_0_2451": "Blok kapsamlı değişken '{0}', yeniden bildirilemiyor.", - "Cannot_redeclare_exported_variable_0_2323": "Dışarı aktarılan '{0}' değişkeni yeniden bildirilemiyor.", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Catch yan tümcesindeki '{0}' tanımlayıcısı yeniden bildirilemiyor.", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "Bir tür ek açıklamasında bir işlev çağrısı başlatılamıyor.", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' bayrağı sağlanmazsa JSX kullanılamaz.", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' etkinleştirildiğinde, yalnızca tür veya tür ad alanında 'export import' kullanılamaz.", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' değeri 'none' olduğunda içeri aktarma, dışarı aktarma veya modül genişletme kullanılamaz.", - "Cannot_use_namespace_0_as_a_type_2709": "'{0}' ad alanı, tür olarak kullanılamaz.", - "Cannot_use_namespace_0_as_a_value_2708": "'{0}' ad alanı, değer olarak kullanılamaz.", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "'This' ifadesi bir donatılmış sınıfın statik özellik başlatıcısında kullanılamaz.", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "'{0}' dosyası, başvurulan '{1}' projesi tarafından oluşturulan '.tsbuildinfo' dosyasının üzerine yazacağından bu dosya yazılamıyor", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Birden fazla giriş dosyası tarafından üzerine yazılacağı için '{0}' dosyası yazılamıyor.", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Giriş dosyasının üzerine yazacağı için '{0}' dosyası yazılamıyor.", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch yan tümcesi değişkeni bir başlatıcıya sahip olamaz.", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Belirtilmişse catch yan tümcesi değişken türü ek açıklaması 'any ' veya 'unknown' olmalıdır.", - "Change_0_to_1_90014": "'{0}' değerini '{1}' olarak değiştir", - "Change_all_extended_interfaces_to_implements_95038": "Tüm genişletilmiş arabirimleri 'implements' olarak değiştir", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "Tüm jsdoc-style türlerini TypeScript olarak değiştir", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Tüm jsdoc-style türlerini TypeScript olarak değiştir (ve null yapılabilir türlere '| undefined' ekle)", - "Change_extends_to_implements_90003": "'extends' ifadesini 'implements' olarak değiştirin", - "Change_spelling_to_0_90022": "Yazımı '{0}' olarak değiştir", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Bildirilen ancak oluşturucuda ayarlanmamış sınıf özelliklerini denetleyin.", - "Check_side_effect_imports_6806": "Yan etki içeri aktarmalarını denetleyin.", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' ve 'apply' yöntemlerinin bağımsız değişkenlerinin özgün işlevle eşleşip eşleşmediğini denetle.", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' ön ekinin '{1}' - '{2}' için eşleşen en uzun ön ek olup olmadığı denetleniyor.", - "Circular_definition_of_import_alias_0_2303": "'{0}' içeri aktarma diğer adının döngüsel tanımı.", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Yapılandırma çözümlenirken döngüsellik algılandı: {0}", - "Circularity_originates_in_type_at_this_location_2751": "Döngüsellik bu konumdaki türden kaynaklanıyor.", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "'{0}' sınıfı, '{1}' örnek üyesi erişimcisini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "'{0}' sınıfı, '{1}' örnek üyesi işlevini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi erişimcisi olarak tanımlar.", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "'{0}' sınıfı, '{1}' örnek üyesi özelliğini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", - "Class_0_incorrectly_extends_base_class_1_2415": "'{0}' sınıfı, '{1}' temel sınıfını yanlış genişletiyor.", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' sınıfı hatalı olarak '{1}' sınıfını uyguluyor. '{1}' sınıfını genişletip üyelerini bir alt sınıf olarak devralmak mı istiyordunuz?", - "Class_0_incorrectly_implements_interface_1_2420": "'{0}' sınıfı, '{1}' arabirimini yanlış uyguluyor.", - "Class_0_used_before_its_declaration_2449": "'{0}' sınıfı, bildiriminden önce kullanıldı.", - "Class_constructor_may_not_be_a_generator_1368": "Sınıf oluşturucu, program yönergeleri üreten bir oluşturucu olamaz.", - "Class_constructor_may_not_be_an_accessor_1341": "Sınıf oluşturucu, bir erişimci olamaz.", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "Sınıf bildirimi, '{0}' için aşırı yükleme listesi uygulayamaz.", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla '@augments' veya '@extends' etiketi olamaz.", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Sınıf dekoratörleri statik özel tanımlayıcıyla kullanılamaz. Deneysel dekoratörü kaldırmayı düşünün.", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Ana sınıf tarafından tanımlanan '{0}' sınıf alanına, alt sınıftan super aracılığıyla erişilemez.", - "Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "{0} modülüyle ES5 ve üzeri hedeflendiğinde sınıf adı 'Object' olamaz.", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.", - "Classes_can_only_extend_a_single_class_1174": "Sınıflar yalnızca bir sınıfı genişletebilir.", - "Classes_may_not_have_a_field_named_constructor_18006": "Sınıflarda 'constructor' adlı bir alan olmayabilir.", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Sınıfta bulunan kod, bu '{0}' kullanımına izin vermeyen JavaScript'in katı modunda değerlendirilir. Daha fazla bilgi için bkz. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", - "Command_line_Options_6171": "Komut Satırı Seçenekleri", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Yapılandırma dosyasının yolu veya 'tsconfig.json' dosyasını içeren klasörün yolu belirtilen projeyi derleyin.", - "Compiler_Diagnostics_6251": "Derleyici Tanılaması", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' derleyici seçeneğine boş bir dize verilemez.", - "Compiler_option_0_expects_an_argument_6044": "'{0}' derleyici seçeneği, bağımsız değişken bekliyor.", - "Compiler_option_0_may_not_be_used_with_build_5094": "'--{0}' derleyici seçeneği, '--build' ile kullanılamaz.", - "Compiler_option_0_may_only_be_used_with_build_5093": "'--{0}' derleyici seçeneği, yalnızca '--build' ile kullanılabilir.", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Derleyici seçeneği '{0}' değeri '{1}' kararsız. Bu hatayı sessize almak için gecelik TypeScript kullanın. 'npm install -D typescript@next' ile güncelleştirmeyi deneyin.", - "Compiler_option_0_requires_a_value_of_type_1_5024": "'{0}' derleyici seçeneği, {1} türünde bir değer gerektiriyor.", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Özel tanımlayıcı alt düzeyi gösterilirken derleyici '{0}' adını ayırır.", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Belirtilen yolda bulunan TypeScript projesini derler.", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Geçerli projeyi derler (çalışma dizinindeki tsconfig.js).", - "Compiles_the_current_project_with_additional_settings_6929": "Geçerli projeyi ek ayarlarla derler.", - "Completeness_6257": "Tamlık", - "Composite_projects_may_not_disable_declaration_emit_6304": "Bileşik projeler, bildirim gösterimini devre dışı bırakamaz.", - "Composite_projects_may_not_disable_incremental_compilation_6379": "Bileşik projeler artımlı derlemeyi devre dışı bırakamayabilir.", - "Computed_from_the_list_of_input_files_6911": "Giriş dosyaları listesinden hesaplanır", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Hesaplanan özellikler sayı veya dize değişmezleri, değişkenler veya --isolatedDeclarations içeren noktalı ifadeler olmalıdır.", - "Computed_property_names_are_not_allowed_in_enums_1164": "Sabit listelerinde hesaplanan özellik adına izin verilmiyor.", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Sınıf veya nesne değişmezlerindeki hesaplanan özellik adları --isolatedDeclarations ile çıkarsanamaz.", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Dize değeri içeren üyelerin bulunduğu bir sabit listesinde hesaplanan değerlere izin verilmez.", - "Concatenate_and_emit_output_to_single_file_6001": "Çıktıyı tek dosyaya birleştirin ve yayın.", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "İçe aktarmaları çözümlerken çözümleyiciye özgü varsayılanlara ek olarak ayarlanacak koşullar.", - "Conflicts_are_in_this_file_6201": "Çakışmalar bu dosyada bulunuyor.", - "Consider_adding_a_declare_modifier_to_this_class_6506": "Bu sınıfa 'declare' değiştiricisi eklemeyi düşünün.", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "'{0}' ve '{1}' yapı imzası dönüş türleri uyumlu değil.", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dönüş türü ek açıklaması bulunmayan yapı imzası, örtük olarak 'any' dönüş türüne sahip.", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Bağımsız değişken içermeyen yapı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", - "Constructor_implementation_is_missing_2390": "Oluşturucu uygulaması yok.", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "'{0}' sınıfının oluşturucusu özel olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' sınıfının oluşturucusu korumalı olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Oluşturucu türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Oluşturucu türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Türetilmiş sınıflara ilişkin oluşturucular bir 'super' çağrısı içermelidir.", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Kapsayıcı dosya belirtilmedi ve kök dizini belirlenemiyor; 'node_modules' klasöründe arama atlanıyor.", - "Containing_function_is_not_an_arrow_function_95128": "İçeren işlev bir ok işlevi değil", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Modül biçimli JS dosyalarını algılamak için kullanılan yöntemi denetle.", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Türler birbiriyle yeterince örtüşmediğinden '{0}' türünün '{1}' türüne dönüştürülmesi bir hata olabilir. Bu bilerek yapıldıysa, ifadeyi önce 'unknown' değerine dönüştürün.", - "Convert_0_to_1_in_0_95003": "'{0}' öğesini '{0} içinde {1}' öğesine dönüştür", - "Convert_0_to_mapped_object_type_95055": "'{0}' öğesini eşlenen nesne türüne dönüştür", - "Convert_all_const_to_let_95102": "Tüm 'const' ifadelerini 'let' ifadesine dönüştürün", - "Convert_all_constructor_functions_to_classes_95045": "Tüm oluşturucu işlevleri sınıflara dönüştür", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Tüm geçersiz karakterleri HTML varlık koduna dönüştür", - "Convert_all_re_exported_types_to_type_only_exports_1365": "Yeniden dışarı aktarılan tüm türleri yalnızca tür dışarı aktarmalarına dönüştürün", - "Convert_all_require_to_import_95048": "Tüm 'require' öğelerini 'import' olarak dönüştür", - "Convert_all_to_async_functions_95066": "Tümünü asenkron işlevlere dönüştürün", - "Convert_all_to_bigint_numeric_literals_95092": "Tümünü büyük tamsayı sayısal sabit değerlerine dönüştürün", - "Convert_all_to_default_imports_95035": "Tümünü varsayılan içeri aktarmalara dönüştür", - "Convert_all_type_literals_to_mapped_type_95021": "Tüm tür sabit değerlerini eşlenmiş türe dönüştür", - "Convert_all_typedef_to_TypeScript_types_95177": "Tüm typedef'leri TypeScript türüne dönüştür.", - "Convert_arrow_function_or_function_expression_95122": "Ok işlevini veya işlev ifadesini dönüştür", - "Convert_const_to_let_95093": "'const' ifadesini 'let' ifadesine dönüştürün", - "Convert_default_export_to_named_export_95061": "Varsayılan dışarı aktarmayı adlandırılmış dışarı aktarmaya dönüştürün", - "Convert_function_declaration_0_to_arrow_function_95106": "'{0}' işlev bildirimini ok işlevine dönüştür", - "Convert_function_expression_0_to_arrow_function_95105": "'{0}' işlev ifadesini ok işlevine dönüştür", - "Convert_function_to_an_ES2015_class_95001": "İşlevi bir ES2015 sınıfına dönüştür", - "Convert_invalid_character_to_its_html_entity_code_95100": "Geçersiz karakteri, karakterin HTML varlık koduna dönüştürün", - "Convert_named_export_to_default_export_95062": "Adlandırılmış dışarı aktarmayı varsayılan dışarı aktarmaya dönüştürün", - "Convert_named_imports_to_default_import_95170": "Adlandırılmış içeri aktarmaları varsayılan içeri aktarmaya dönüştür", - "Convert_named_imports_to_namespace_import_95057": "Adlandırılmış içeri aktarmaları ad alanı içeri aktarmasına dönüştür", - "Convert_namespace_import_to_named_imports_95056": "Ad alanı içeri aktarmasını adlandırılmış içeri aktarmalara dönüştür", - "Convert_overload_list_to_single_signature_95118": "Aşırı yükleme listesini tek imzaya dönüştür", - "Convert_parameters_to_destructured_object_95075": "Parametreleri, bozulan nesneye dönüştürün", - "Convert_require_to_import_95047": "'require' öğesini 'import' olarak dönüştür", - "Convert_to_ES_module_95017": "ES modülüne dönüştür", - "Convert_to_a_bigint_numeric_literal_95091": "Büyük tamsayı sayısal sabit değerine dönüştürün", - "Convert_to_anonymous_function_95123": "Anonim işleve dönüştür", - "Convert_to_arrow_function_95125": "Ok işlevine dönüştür", - "Convert_to_async_function_95065": "Asenkron işleve dönüştürün", - "Convert_to_default_import_95013": "Varsayılan içeri aktarmaya dönüştür", - "Convert_to_named_function_95124": "Adlandırılmış işleve dönüştür", - "Convert_to_optional_chain_expression_95139": "İsteğe bağlı zincir ifadesine dönüştür", - "Convert_to_template_string_95096": "Şablon dizesine dönüştürün", - "Convert_to_type_only_export_1364": "Yalnızca tür dışarı aktarmaya dönüştürün", - "Convert_typedef_to_TypeScript_type_95176": "typedef'i TypeScript türüne dönüştürün.", - "Corrupted_locale_file_0_6051": "{0} yerel ayar dosyası bozuk.", - "Could_not_convert_to_anonymous_function_95153": "Anonim işleve dönüştürülemedi", - "Could_not_convert_to_arrow_function_95151": "Arrow işlevine dönüştürülemedi", - "Could_not_convert_to_named_function_95152": "Adlandırılmış işleve dönüştürülemedi", - "Could_not_determine_function_return_type_95150": "İşlev dönüş türü belirlenemedi", - "Could_not_find_a_containing_arrow_function_95127": "İçeren bir ok işlevi bulunamadı", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "'{0}' modülü için bildirim dosyası bulunamadı. '{1}' örtülü olarak 'any' türüne sahip.", - "Could_not_find_convertible_access_expression_95140": "Dönüştürülebilir erişim ifadesi bulunamadı", - "Could_not_find_export_statement_95129": "Dışarı aktarma ifadesi bulunamadı", - "Could_not_find_import_clause_95131": "İçeri aktarma yan tümcesi bulunamadı", - "Could_not_find_matching_access_expressions_95141": "Eşleşen erişim ifadeleri bulunamadı", - "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' adı bulunamıyor. Şunu mu demek istediniz: '{1}'?", - "Could_not_find_namespace_import_or_named_imports_95132": "Ad alanı içeri aktarması veya adlandırılmış içeri aktarmalar bulunamadı", - "Could_not_find_property_for_which_to_generate_accessor_95135": "Erişimcinin oluşturulacağı özellik bulunamadı", - "Could_not_find_variable_to_inline_95185": "Satır içi değişken bulunamadı.", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Uzantılara sahip '{0}' yolu çözümlenemedi: {1}.", - "Could_not_write_file_0_Colon_1_5033": "'{0}' dosyası yazılamadı: {1}.", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "Yayılan JavaScript dosyaları için kaynak eşleme dosyaları oluşturun.", - "Create_sourcemaps_for_d_ts_files_6614": "d.ts dosyaları için kaynak eşlemeleri oluşturun.", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Çalışma dizininde önerilen ayarlarla ilgili bir tsconfig.js oluşturur.", - "DIRECTORY_6038": "DİZİN", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Bir karakter sınıfında ondalık kaçış dizilerine ve geri referanslara izin verilmez.", - "Decimals_with_leading_zeros_are_not_allowed_1489": "Başında sıfır bulunan ondalık sayılara izin verilmez.", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Bildirim başka bir dosyadaki bildirimi genişlettiğinden serileştirilemez.", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Bu dosyaya ilişkin bildirim, bu içe aktarmanın genişletmeler için korunmasını gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Bu dosya için bildirim gösterme, '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Bu dosya için bildirim gösterme, '{1}' modülündeki '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Bu parametre için bildirim gösterme, türüne örtülü olarak tanımsız eklenmesini gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", - "Declaration_expected_1146": "Bildirim bekleniyor.", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Bildirim adı, yerleşik genel tanımlayıcı '{0}' ile çakışıyor.", - "Declaration_or_statement_expected_1128": "Bildirim veya deyim bekleniyor.", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir ifade bloğunun ardından geldiğinden yapı çözümlü bir atama yazmayı düşünüyorsanız, tüm atamayı parantez içine almanız gerekebilir.", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Kesin atama onaylamaları olan bildirimlerde tür ek açıklamaları da olmalıdır.", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Başlatıcılara sahip bildirimlerde kesin atama onaylamaları olamaz.", - "Declare_a_private_field_named_0_90053": "'{0}' adlı bir özel alan bildirin.", - "Declare_method_0_90023": "'{0}' metodunu bildir", - "Declare_private_method_0_90038": "'{0}' özel metodunu bildirin.", - "Declare_private_property_0_90035": "Özel '{0}' özelliğini bildir", - "Declare_property_0_90016": "'{0}' özelliğini bildir", - "Declare_static_method_0_90024": "'{0}' statik metodunu bildir", - "Declare_static_property_0_90027": "'{0}' statik özelliğini bildir", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "'{0}' dekoratör işlevi dönüş türü, '{1}' türüne atanamıyor.", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Dekoratör işlevi dönüş türü '{0}', ancak 'void' veya 'any' olması bekleniyor.", - "Decorator_used_before_export_here_1486": "Dekoratör burada 'export' öğesinden önce kullanıldı.", - "Decorators_are_not_valid_here_1206": "Buradaki dekoratörler geçerli değil.", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekoratörler aynı ada sahip birden fazla get/set erişimcisine uygulanamaz.", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratörler 'export' öncesinde de görünüyorlarsa, 'export' veya 'default export' sonrasında görünmeyebilirler.", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratörler, özellik bildirimlerinin adından ve tüm anahtar sözcüklerinden önce gelmelidir.", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Catch yan tümcesi değişkenlerini varsayılan olarak 'any' yerine 'unknown' olarak kabul et.", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Modülün varsayılan dışarı aktarımı '{0}' özel adına sahip veya bu adı kullanıyor.", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Varsayılan dışa aktarımlar --isolatedDeclarations ile çıkarsanamaz.", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Ertelenmiş içeri aktarmalarda varsayılan içeri aktarmalara izin verilmez.", - "Default_library_1424": "Varsayılan kitaplık", - "Default_library_for_target_0_1425": "'{0}' hedefi için varsayılan kitaplık", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Ertelenmiş içeri aktarmalar yalnızca '--module' bayrağı 'esnext' veya 'preserve' olarak ayarlandığında desteklenir.", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Şu tanımlayıcıların tanımları başka bir dosyadaki tanımlarla çakışıyor: {0}", - "Delete_all_unused_declarations_95024": "Kullanılmayan tüm bildirimleri sil", - "Delete_all_unused_imports_95147": "Kullanılmayan tüm içeri aktarmaları sil", - "Delete_all_unused_param_tags_95172": "Kullanılmayan tüm “@param” etiketlerini silin", - "Delete_the_outputs_of_all_projects_6365": "Tüm projelerin çıktılarını sil.", - "Delete_unused_param_tag_0_95171": "Kullanılmayan “{0}” “@param” etiket adını silin", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Kullanım Dışı] Bunun yerine '--jsxFactory' kullanın. 'react' JSX gösterimi hedefleniyorsa, createElement için çağrılan nesneyi belirtin", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Kullanım Dışı] Bunun yerine '--outFile' kullanın. Çıkışı tek bir dosya olarak birleştirin ve gösterin", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Kullanım Dışı] Bunun yerine '--skipLibCheck' kullanın. Varsayılan kitaplık bildirim dosyalarının tür denetimini atlayın.", - "Deprecated_setting_Use_outFile_instead_6677": "Ayar kullanım dışı bırakıldı. Bunun yerine 'outFile' kullanın.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "'await' kullanmayı mı unuttunuz?", - "Did_you_mean_0_1369": "Şunu mu demek istediniz: '{0}'?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' değerinin 'new (...args: any[]) => {1}' türüne kısıtlanmasını mı istediniz?", - "Did_you_mean_to_call_this_expression_6212": "Bu ifadeyi mi çağırmak istediniz?", - "Did_you_mean_to_mark_this_function_as_async_1356": "Bu işlevi 'async' olarak işaretlemek mi istediniz?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':' kullanmak mı istediniz? İçeren nesne sabit değeri, yok etme deseninin parçası olduğunda özellik adının ardından yalnızca '=' gelebilir.", - "Did_you_mean_to_use_new_with_this_expression_6213": "Bu ifadeyle 'new' kullanmak mı istediniz?", - "Digit_expected_1124": "Rakam bekleniyor.", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' dizini yok, içindeki tüm aramalar atlanıyor.", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "'{0}' dizini bir package.json kapsamı içermiyor. İçeri aktarmalar çözümlenmeyecek.", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Yayılan JavaScript dosyalarında ‘use strict’ yönergelerini eklemeyi devre dışı bırakın.", - "Disable_checking_for_this_file_90018": "Bu dosya için denetimi devre dışı bırak", - "Disable_emitting_comments_6688": "Yorumların yayılmasını devre dışı bırakın.", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc açıklamalarında '@internal' olan üretme bildirimlerini devre dışı bırak.", - "Disable_emitting_files_from_a_compilation_6660": "Derlemeden dosya yayımlamayı devre dışı bırakın.", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Herhangi bir tür denetimi hatası bildirildiyse, dosya yaymayı devre dışı bırakın.", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Oluşturulan kodda 'const enum' bildirimlerinin silinmesini devre dışı bırak.", - "Disable_error_reporting_for_unreachable_code_6603": "Ulaşılamaz kod için hata raporlamayı devre dışı bırakın.", - "Disable_error_reporting_for_unused_labels_6604": "Kullanılmayan etiketler için hata raporlamayı devre dışı bırakın.", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Tam tür denetimini devre dışı bırakın (yalnızca kritik ayrıştırma ve yayma hataları rapor edilecektir).", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Derlenen çıktıda '__extends' gibi özel yardımcı işlevler oluşturmayı devre dışı bırak.", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Varsayılan lib.d.ts dahil olmak üzere kitaplık dosyalarının dahil edilmesini devre dışı bırakın.", - "Disable_loading_referenced_projects_6235": "Başvurulan projelerin yüklenmesini devre dışı bırakın.", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Bileşik projelere başvurulurken bildirim dosyaları yerine kaynak dosyaların tercih edilmesini devre dışı bırak.", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Nesne sabit değerleri oluşturulurken fazlalık özellik hatalarının raporlanmasını devre dışı bırakın.", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Simgesel bağlantıları gerçek yollarına çözümlemeyi devre dışı bırakın. Bu, düğümdeki aynı bayrakla bağıntılıdır.", - "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript projelerinde boyut sınırlamalarını devre dışı bırakın.", - "Disable_solution_searching_for_this_project_6224": "Bu proje için çözüm aramayı devre dışı bırakın.", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "İşlev türlerinde genel imzalar için katı denetimi devre dışı bırakın.", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript projeleri için tür alımını devre dışı bırak", - "Disable_truncating_types_in_error_messages_6663": "Hata iletilerinde türlerin kesilmesini devre dışı bırakın.", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Başvurulan projelerdeki bildirim dosyaları yerine kaynak dosyalarının kullanımını devre dışı bırakın.", - "Disable_wiping_the_console_in_watch_mode_6684": "İzleme modunda konsolu temizlemeyi devre dışı bırak.", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Bir projedeki dosya adlarına bakarak tür alımı çıkarımı devre dışı bırakır.", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import', 'require' veya '' ifadelerinin TypeScript'in projeye eklemesi gereken dosya sayısını artırmasına izin verme.", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Aynı dosyaya yönelik tutarsız büyük/küçük harflere sahip başvurulara izin verme.", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Derlenen dosya listesine üç eğik çizgi başvuruları veya içeri aktarılan modüller eklemeyin.", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript'in parçası olmayan çalışma zamanı yapılarına izin verme.", - "Do_not_emit_comments_to_output_6009": "Çıktıya ait açıklamaları gösterme.", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' ek açıklamasına sahip kod için bildirimleri gösterme.", - "Do_not_emit_outputs_6010": "Çıktıları gösterme.", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Herhangi bir hata bildirildiyse çıkışları gösterme.", - "Do_not_emit_use_strict_directives_in_module_output_6112": "Modül çıkışında 'use strict' yönergeleri gösterme.", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Oluşturulan kodda const sabit listesi bildirimlerini silme.", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Derlenen çıkışta '__extends' gibi özel yardımcı işlevler oluşturmayın.", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "Varsayılan kitaplık dosyasını (lib.d.ts) eklemeyin.", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "Erişilemeyen kod ile ilgili hataları bildirme.", - "Do_not_report_errors_on_unused_labels_6074": "Kullanılmayan etiketler ile ilgili hataları bildirme.", - "Do_not_resolve_the_real_path_of_symlinks_6013": "Simgesel bağlantıların gerçek yolunu çözümlemeyin.", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' ayarına göre çıktı dosyasının formatında yazılmalarını sağlayarak, yalnızca tür olarak işaretlenmemiş hiçbir bir içe aktarma veya dışa aktarma işlemini dönüştürmeyin veya silmeyin.", - "Do_not_truncate_error_messages_6165": "Hata iletilerini kesmeyin.", - "Duplicate_function_implementation_2393": "Yinelenen işlev uygulaması.", - "Duplicate_identifier_0_2300": "Yinelenen tanımlayıcı: '{0}'.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Yinelenen tanımlayıcı: '{0}'. Derleyici, bir modülün üst düzey kapsamındaki '{1}' adını ayırır.", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' tanımlayıcısı yineleniyor. Derleyici, zaman uyumsuz işlevler içeren bir modülün en üst düzey kapsamında '{1}' adını ayırıyor.", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "'{0}' tanımlayıcısı yineleniyor. Derleyici, statik başlatıcılarda 'super' başvurularını yayımlarken '{1}' adını ayırır.", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Yinelenen tanımlayıcı: '{0}'. Derleyici, zaman uyumsuz işlevleri desteklemek için '{1}' bildirimini kullanır.", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Yinelenen tanımlayıcı: '{0}'. Statik öğeler ve örnek öğeleri aynı özel adı paylaşamaz.", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Yinelenen tanımlayıcı: 'arguments'. Derleyici, rest parametrelerini başlatmak için 'arguments' tanımlayıcısını kullanır.", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Yinelenen '_newTarget' tanımlayıcısı. Derleyicide, '_newTarget' değişken bildirimi 'new.target' meta-özellik başvurusu yakalamak için kullanılıyor.", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Yinelenen tanımlayıcı: '_this'. Derleyici, 'this' başvurusunu yakalamak için '_this' değişken bildirimini kullanır.", - "Duplicate_index_signature_for_type_0_2374": "'{0}' türü için yinelenen dizin imzası var.", - "Duplicate_label_0_1114": "'{0}' etiketi yineleniyor.", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "'{0}' özelliğini yineleyin.", - "Duplicate_regular_expression_flag_1500": "Yinelenen normal ifade bayrağı.", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Dinamik içeri aktarmanın tanımlayıcısı 'string' türünde olmalıdır, ancak buradaki tür: '{0}'.", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dinamik içeri aktarma yalnızca \"--module\" bayrağı \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" veya \"nodenext\" olarak ayarlandığında desteklenir.", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dinamik içe aktarmalar yalnızca bir modül belirticiyi ve isteğe bağlı bir dizi özniteliği bağımsız değişken olarak kabul edebilir", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dinamik içeri aktarmalar yalnızca \"--module\" seçeneği; \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ikinci bir bağımsız değişkeni destekler.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript içeri ve dışarı aktarma işlemleri, 'verbatimModuleSyntax' altında bir CommonJS dosyasına yazılamaz.", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript içeri ve dışarı aktarma işlemleri, 'verbatimModuleSyntax' altında bir CommonJS dosyasına yazılamaz. Bu dosyayı ECMAScript modülü yapmak için en yakın 'package.json' dosyasındaki 'type' alanını düzenleyin veya TypeScript'teki 'verbatimModuleSyntax', 'module' ve 'moduleResolution' ayarlarınızı düzenleyin.", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'Module', 'preserve' olarak ayarlandığında CommonJS modülünde ECMAScript modülü sözdizimine izin verilmez.", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' için yapılan her bildirim, değerinde farklılık gösteriyor, '{2}' beklenirken '{3}' verildi.", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "'{0}' birleşim türünün her bir üyesi yapı imzalarına sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "'{0}' birleşim türünün her bir üyesi imzalara sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", - "Editor_Support_6249": "Düzenleyici Desteği", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' türündeki ifade '{1}' türünün dizinini oluşturmak için kullanılamadığından öğe, örtük olarak 'any' türüne sahip.", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Dizin ifadesi 'number' türünde olmadığından, öğe örtük olarak 'any' türü içeriyor.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' türünün dizin imzası olmadığından öğe dolaylı olarak 'any' türüne sahip.", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' türünün dizin imzası olmadığından öğe, örtük olarak 'any' türüne sahip. '{1}' türünü mü çağırmak istediniz?", - "Emit_6246": "Yayımla", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript-standard-compliant sınıf alanlarını yayın.", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Çıkış dosyalarının başında bir UTF-8 Bayt Sırası İşareti (BOM) gösterin.", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Ayrı bir dosya oluşturmak yerine, kaynak eşlemeleri içeren tek bir dosya gösterin.", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Hata ayıklama için derleyici çalıştırmasının bir v8 CPU profilini yayın.", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS modüllerini içeri aktarma desteğini kolaylaştırmak için ek JavaScript üret. Bu, tür uyumluluğu için 'allowSyntheticDefaultImports' özelliğini etkinleştirir.", - "Emit_class_fields_with_Define_instead_of_Set_6222": "Sınıf alanlarını Set yerine Define ile gösterin.", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Kaynak dosyalarındaki donatılmış bildirimler için design-type meta verilerini yayın.", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Yineleme için daha uyumlu, ancak ayrıntılı ve daha düşük performanslı JavaScript yayın.", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Kaynağı, kaynak eşlemeleri ile birlikte tek bir dosya içinde gösterin; '--inlineSourceMap' veya '--sourceMap' öğesinin ayarlanmasını gerektirir.", - "Enable_all_strict_type_checking_options_6180": "Tüm katı tür denetleme seçeneklerini etkinleştirin.", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Derleyici hatalarının okunmasını kolaylaştırmak için TypeScript çıktısında renk ve biçimlendirmeyi etkinleştirin.", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Bir TypeScript projesinin proje başvurularıyla birlikte kullanılmasına olanak sağlayan kısıtlamaları etkinleştirin.", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Açıkça bir işlev döndürmeyen kod yolları için hata raporlamayı etkinleştirin.", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Örtük olarak 'any' türüne sahip ifade ve bildirimlerde hata raporlamayı etkinleştir.", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Switch deyimlerinde sonraki ifadelere geçiş ile ilgili hataların raporlanmasını etkinleştirin.", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Tür denetimli JavaScript dosyalarında hata raporlamayı etkinleştirin.", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Yerel değişkenler okunmadığında hata raporlamayı etkinleştir.", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' için 'any' türü verildiğinde hata raporlamayı etkinleştir.", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Eski deneysel dekoratörler için deneysel desteği etkinleştirin.", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Bir bildirim dosyasının mevcut olması koşuluyla, herhangi bir uzantıya sahip dosyaların içe aktarılmasını etkinleştirin.", - "Enable_importing_json_files_6689": ".json dosyalarını içeri aktarmayı etkinleştirin.", - "Enable_lib_replacement_6808": "Kitaplık değişimini etkinleştir.", - "Enable_project_compilation_6302": "Proje derlemeyi etkinleştir", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "İşlevlerde katı 'bind', 'call' ve 'apply' metotlarını etkinleştirin.", - "Enable_strict_checking_of_function_types_6186": "İşlev türleri üzerinde katı denetimi etkinleştirin.", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "Sınıflarda sıkı özellik başlatma denetimini etkinleştirin.", - "Enable_strict_null_checks_6113": "Katı null denetimlerini etkinleştir.", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Yapılandırma dosyanızda 'experimentalDecorators' seçeneğini etkinleştirin", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "Yapılandırma dosyanızda '--jsx' bayrağını etkinleştirin", - "Enable_tracing_of_the_name_resolution_process_6085": "Ad çözümleme işlemini izlemeyi etkinleştir.", - "Enable_verbose_logging_6713": "Ayrıntılı günlüğe yazmayı etkinleştir.", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Tüm içeri aktarma işlemleri için ad alanı nesnelerinin oluşturulması aracılığıyla CommonJS ile ES Modülleri arasında yayımlama birlikte çalışabilirliğine imkan tanır. Şu anlama gelir: 'allowSyntheticDefaultImports'.", - "Enables_experimental_support_for_ES7_decorators_6065": "ES7 dekoratörleri için deneysel desteği etkinleştirir.", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Dekoratörlere tür meta verisi gönderme için deneysel desteği etkinleştirir.", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Dizini oluşturulmuş bir tür kullanılarak bildirilen anahtarlar için dizini oluşturulmuş erişimciler kullanılmasını zorunlu kılar.", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Türetilmiş sınıflarda geçersiz kılan üyelerin bir geçersiz kılma değiştiricisiyle işaretlendiğinden emin olun.", - "Ensure_that_casing_is_correct_in_imports_6637": "İçeri aktarmalarda büyük harfe çevirmenin doğru olduğundan emin olun.", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Her dosyanın diğer içeri aktarmalara bağlı olmadan güvenli bir şekilde kaynaktan kaynağa derlenebildiğinden emin olun.", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "'use strict' öğesinin her zaman yayıldığından emin olun.", - "Entering_conditional_exports_6413": "Koşullu dışarı aktarmalara giriliyor.", - "Entry_point_for_implicit_type_library_0_1420": "'{0}' örtük tür kitaplığı için giriş noktası", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "'{1}' paket kimliğine sahip '{0}' örtük tür kitaplığı için giriş noktası", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "'{1}' paket kimliğine sahip compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", - "Enum_0_used_before_its_declaration_2450": "'{0}' sabit listesi, bildiriminden önce kullanıldı.", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Sabit listesi bildirimleri yalnızca ad alanı veya diğer sabit listesi bildirimleri ile birleştirilebilir.", - "Enum_declarations_must_all_be_const_or_non_const_2473": "Sabit listesi bildirimlerinin tümü const veya const olmayan değerler olmalıdır.", - "Enum_member_expected_1132": "Sabit listesi üyesi bekleniyor.", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Değişmez sayısal bir üyeyi takip eden numaralandırma üyesi, 'isolatedModules' etkinleştirildiğinde bir başlatıcıya sahip olmalıdır.", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Sabit listesi üyesi başlatıcıları, --isolatedDeclarations ile dış simgelere başvurular olmadan hesaplanabilir olmalıdır.", - "Enum_member_must_have_initializer_1061": "Sabit listesi üyesi bir başlatıcıya sahip olmalıdır.", - "Enum_name_cannot_be_0_2431": "Sabit listesi adı '{0}' olamaz.", - "Environment_Settings_6285": "Ortam Ayarları", - "Errors_Files_6041": "Hata Dosyaları", - "Escape_sequence_0_is_not_allowed_1488": "'{0}' kaçış dizisine izin verilmiyor.", - "Examples_Colon_0_6026": "Örnekler: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' ve '{1}' türlerini karşılaştırırken aşırı karmaşıklık.", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "Aşırı yığın derinliği, '{0}' ve '{1}' türlerini karşılaştırıyor.", - "Exiting_conditional_exports_6416": "Koşullu dışarı aktarmalardan çıkılıyor.", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", - "Expected_0_arguments_but_got_1_2554": "{0} bağımsız değişken bekleniyordu ancak {1} alındı.", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} bağımsız değişken bekleniyordu ancak {1} bağımsız değişken alındı. Tür bağımsız değişkeninizdeki 'void' operatörünü 'Promise'e eklemeyi mi unuttunuz?", - "Expected_0_type_arguments_but_got_1_2558": "{0} tür bağımsız değişkeni bekleniyordu ancak {1} alındı.", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 bağımsız değişken bekleniyordu ancak 0 bağımsız değişken var. Bağımsız değişkenler olmadan çağrılabilen bir 'resolve' oluşturmak için 'new Promise()' çağrısında bir JSDoc ipucu bulunması gerekir.", - "Expected_a_Unicode_property_name_1523": "Unicode özellik adı bekleniyordu.", - "Expected_a_Unicode_property_name_or_value_1527": "Unicode özellik adı veya değeri bekleniyordu.", - "Expected_a_Unicode_property_value_1525": "Bir Unicode özellik değeri bekleniyordu.", - "Expected_a_capturing_group_name_1514": "Yakalama grubu adı bekleniyordu.", - "Expected_a_class_set_operand_1520": "Bir sınıf kümesi işleneni bekleniyordu.", - "Expected_at_least_0_arguments_but_got_1_2555": "En az {0} bağımsız değişken bekleniyordu ancak {1} alındı.", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' için ilgili JSX kapanış etiketi bekleniyor.", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX parçasına karşılık gelen kapanış etiketi bekleniyordu.", - "Expected_for_property_initializer_1442": "Özellik başlatıcısı için '=' bekleniyor.", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' dosyasındaki '{0}' alanının '{1}' türünde olması bekleniyordu ancak '{2}' alındı.", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Açık olarak belirtilen modül çözümleme türü: '{0}'.", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' seçeneği 'es2016' veya üzeri olarak belirlenmedikçe 'bigint' değerlerinde üs olarak gösterme yapılamaz.", - "Export_0_from_module_1_90059": "'{1}' modülünden '{0}' öğesini dışarı aktar", - "Export_all_referenced_locals_90060": "Başvurulan tüm yerel ayarları dışarı aktar", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript modülleri hedeflenirken dışarı aktarma ataması kullanılamaz. Bunun yerine 'export default' veya başka bir modül biçimi kullanmayı deneyin.", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "'--module' bayrağı 'system' ise dışarı aktarma ataması desteklenmez.", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Dışarı aktarma bildirimi, dışarı aktarılan '{0}' bildirimiyle çakışıyor.", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "Ad alanında dışarı aktarma bildirimlerine izin verilmez.", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "'{0}' dışarı aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Dışarı aktarılan '{0}' tür diğer adı, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Dışarı aktarılan türün diğer adı olan '{0}' ifadesi, {2} modülündeki '{1}' özel adına sahip veya bu özel adı kullanıyor.", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Dışarı aktarılan '{0}' değişkeni, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Dışarı aktarılan '{0}' değişkeni, '{2}' özel modüldeki '{1}' adına sahip veya bu adı kullanıyor.", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "Dışarı aktarılan '{0}' değişkeni, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Modül genişletmelerinde dışarı aktarmalara ve dışarı aktarma atamalarına izin verilmez.", - "Expression_expected_1109": "İfade bekleniyor.", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "İfadenin dekoratör olarak kullanılabilmesi için parantez içine alınması gereklidir.", - "Expression_or_comma_expected_1137": "İfade veya virgül bekleniyor.", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "İfade, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "İfade, temsili çok karmaşık olan bir birleşim türü oluşturuyor.", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "İfade, derleyicinin temel sınıf başvurusunu yakalamak için kullandığı '_super' öğesi olarak çözümleniyor.", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "İfade, derleyicinin 'new.target' meta-özellik başvurusu yakalamak için kullandığı '_newTarget' değişken bildirimi olarak çözümleniyor.", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "İfade, derleyicinin 'this' başvurusunu yakalamak için kullandığı '_this' değişken bildirimi olarak çözümleniyor.", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "İfade türü --isolatedDeclarations ile çıkarsanamaz.", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends yan tümcesi --isolatedDeclarations içeren bir ifade içeremez.", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Çıkarsanan '{0}' türü için Extends yan tümcesi '{1}' özel adı içeriyor veya kullanıyor.", - "Extract_base_class_to_variable_90064": "Temel sınıfı değişken olarak ayıkla", - "Extract_binding_expressions_to_variable_90066": "Bağlayıcı ifadeleri değişkene ayıkla", - "Extract_constant_95006": "Sabiti ayıkla", - "Extract_default_export_to_variable_90065": "Varsayılan dışarı aktarmayı değişken olarak ayıkla", - "Extract_function_95005": "İşlevi ayıkla", - "Extract_to_0_in_1_95004": "{1} içindeki {0} konumuna ayıkla", - "Extract_to_0_in_1_scope_95008": "{1} kapsamındaki {0} konumuna ayıkla", - "Extract_to_0_in_enclosing_scope_95007": "Çevreleyen kapsamdaki {0} konumuna ayıkla", - "Extract_to_interface_95090": "Arabirime ayıkla", - "Extract_to_type_alias_95078": "Tür diğer adına ayıkla", - "Extract_to_typedef_95079": "typedef'e ayıkla", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Değişken olarak ayıkla ve 'typeof {0} olarak {0}' ile değiştir", - "Extract_type_95077": "Türü ayıkla", - "FILE_6035": "DOSYA", - "FILE_OR_DIRECTORY_6040": "DOSYA VEYA DİZİN", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' bulunamadı.", - "Failed_to_resolve_under_condition_0_6415": "'{0}' koşulu altında çözümlenemedi.", - "Fallthrough_case_in_switch_7029": "switch deyiminde sonraki ifadeye geçiş.", - "File_0_does_not_exist_6096": "'{0}' adlı dosya yok.", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut değil.", - "File_0_exists_according_to_earlier_cached_lookups_6239": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut.", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya var; bunu bir çözümleme sonucu olarak kullanın.", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' dosyası desteklenmeyen uzantıya sahip. Yalnızca şu uzantılar desteklenir: {1}.", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' dosyası bir JavaScript dosyasıdır. 'allowJs' seçeneğini mi etkinleştirmek istediniz?", - "File_0_is_not_a_module_2306": "'{0}' dosyası bir modül değil.", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' dosyası, '{1}' projesinin dosya listesinde değil. Projelerin tüm dosyaları listelemesi veya bir 'include' deseni kullanması gerekir.", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' dosyası, 'rootDir' '{1}' dizininde değil. 'rootDir' dizininin tüm kaynak dosyalarını içermesi bekleniyor.", - "File_0_not_found_6053": "'{0}' dosyası bulunamadı.", - "File_Layout_6284": "Dosya Düzeni", - "File_Management_6245": "Dosya Yönetimi", - "File_appears_to_be_binary_1490": "Dosya ikili gibi görünüyor.", - "File_change_detected_Starting_incremental_compilation_6032": "Dosya değişikliği algılandı. Artımlı derleme başlatılıyor...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}', \"type\" alanına sahip olmadığından dosya CommonJS modülüdür", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}', değeri \"module\" olmayan \"type\" alanına sahip olduğundan dosya CommonJS modülüdür", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "'package.json' bulunamadığından dosya CommonJS modülüdür", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}', değeri \"module\" olan \"type\" alanına sahip olduğundan dosya ECMAScript modülüdür", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Bir CommonJS modülü olan dosya bir ES modülüne dönüştürülebilir.", - "File_is_default_library_for_target_specified_here_1426": "Burada dosya, belirtilen hedef için varsayılan kitaplıktır.", - "File_is_entry_point_of_type_library_specified_here_1419": "Burada dosya, belirtilen tür kitaplığının giriş noktasıdır.", - "File_is_included_via_import_here_1399": "Burada dosya, içeri aktarma aracılığıyla eklenmiştir.", - "File_is_included_via_library_reference_here_1406": "Burada dosya, kitaplık başvurusu aracılığıyla eklenmiştir.", - "File_is_included_via_reference_here_1401": "Burada dosya, başvuru aracılığıyla eklenmiştir.", - "File_is_included_via_type_library_reference_here_1404": "Burada dosya, tür kitaplığı başvurusu aracılığıyla eklenmiştir.", - "File_is_library_specified_here_1423": "Burada dosya, belirtilen kitaplıktır.", - "File_is_matched_by_files_list_specified_here_1410": "Burada dosya, belirtilen 'dosyalar' listesine göre eşleştirilir.", - "File_is_matched_by_include_pattern_specified_here_1408": "Burada dosya, belirtilen ekleme desenine göre eşleştirilir.", - "File_is_output_from_referenced_project_specified_here_1413": "Burada dosya, belirtilmiş başvurulan projenin çıkışıdır.", - "File_is_output_of_project_reference_source_0_1428": "Dosya, '{0}' proje başvuru kaynağının çıkışıdır", - "File_is_source_from_referenced_project_specified_here_1416": "Burada dosya, belirtilmiş başvurulan projenin kaynağıdır.", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' dosya adının, zaten eklenmiş olan '{1}' dosya adından tek farkı, büyük/küçük harf kullanımı.", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Dosya adı '{0}', '{1}' uzantısına sahip - bunun yerine '{2}' aranıyor.", - "File_name_0_has_a_1_extension_stripping_it_6132": "'{0}' dosya adında '{1}' uzantısı var; uzantı ayrılıyor.", - "File_redirects_to_file_0_1429": "Dosya, '{0}' dosyasına yeniden yönlendiriyor", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Dosya belirtimi, özyinelemeli dizin joker karakterinden ('**') sonra görünen bir üst dizin ('..') içeremez: '{0}'.", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Dosya belirtimi, özyinelemeli dizin joker karakter ('**') ile bitemez: '{0}'.", - "Filters_results_from_the_include_option_6627": "`include` seçeneğinden sonuçları filtreler.", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "Algılanan tüm yazım hatalarını düzelt", - "Fix_all_expressions_possibly_missing_await_95085": "'await' deyiminin eksik olabileceği tüm ifadeleri düzeltin", - "Fix_all_implicit_this_errors_95107": "Tüm örtük 'this' hatalarını onar", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Asenkron işlevlerin tüm hatalı dönüş türlerini onar", - "Fix_all_with_type_only_imports_95182": "Tümünü yalnızca tür içeri aktarmaları ile düzelt", - "For_nodejs_Colon_6287": "nodejs için:", - "Found_0_errors_6217": "{0} hata bulundu.", - "Found_0_errors_Watching_for_file_changes_6194": "{0} hata bulundu. Dosya değişiklikleri izleniyor.", - "Found_0_errors_in_1_files_6261": "{1} dosyada {0} hata bulundu.", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Aynı dosyada {0} hata bulundu, başlangıç: {1}", - "Found_1_error_6216": "1 hata bulundu.", - "Found_1_error_Watching_for_file_changes_6193": "1 hata bulundu. Dosya değişiklikleri izleniyor.", - "Found_1_error_in_0_6259": "Şurada 1 hata bulundu: {0}", - "Found_package_json_at_0_6099": "'{0}' içinde 'package.json' bulundu.", - "Found_peerDependency_0_with_1_version_6282": "'{1}' sürümüne sahip peerDependency '{0}' bulundu.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Sınıf tanımları otomatik olarak katı moddadır.", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Modüller otomatik olarak katı moddadır.", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dönüş türü ek açıklaması bulunmayan işlev ifadesi, örtük olarak '{0}' dönüş türüne sahip.", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "İşlev uygulaması yok veya bildirimden hemen sonra gelmiyor.", - "Function_implementation_name_must_be_0_2389": "İşlev uygulamasının adı '{0}' olmalıdır.", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan işlev, örtük olarak 'any' türüne sahiptir.", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "İşlevin sonunda return deyimi eksik ve dönüş türü 'undefined' içermiyor.", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "İşlevin --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", - "Function_not_implemented_95159": "İşlev uygulanmadı.", - "Function_overload_must_be_static_2387": "İşlev aşırı yüklemesi statik olmalıdır.", - "Function_overload_must_not_be_static_2388": "İşlev aşırı yüklemesi statik olmamalıdır.", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "İşlev türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "İşlev türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dönüş türü ek açıklaması bulunmayan işlev türü, örtük olarak '{0}' dönüş türüne sahip.", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Gövdelere sahip işlev yalnızca çevresel sınıflarla birleştirebilir.", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Projenizdeki TypeScript ve JavaScript dosyalarından .d.ts dosyaları oluşturun.", - "Generate_get_and_set_accessors_95046": "'get' ve 'set' erişimcilerini oluşturun", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Tüm geçersiz kılma özellikleri için 'get' ve 'set' erişimcileri oluşturun", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "Bir CPU profili oluşturur.", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Karşılık gelen her '.d.ts' dosyası için bir kaynak eşlemesi oluşturur.", - "Generates_an_event_trace_and_a_list_of_types_6237": "Olay izleme ve tür listesi oluşturur.", - "Generates_corresponding_d_ts_file_6002": "İlgili '.d.ts' dosyasını oluşturur.", - "Generates_corresponding_map_file_6043": "İlgili '.map' dosyasını oluşturur.", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Oluşturucu örtük olarak '{0}' bekletme türüne sahip. Bir dönüş türü ek açıklaması sağlamayı deneyin.", - "Generators_are_not_allowed_in_an_ambient_context_1221": "Çevresel bağlamda oluşturuculara izin verilmez.", - "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' genel türü, {1} tür bağımsız değişkenini gerektiriyor.", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "'{0}' genel türü {1} ile {2} arasında bağımsız değişken gerektirir.", - "Global_module_exports_may_only_appear_at_top_level_1316": "Genel modül dışarı aktarmaları yalnızca en üst düzeyde görünebilir.", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "Genel modül dışarı aktarmaları yalnızca bildirim dosyalarında görünebilir.", - "Global_module_exports_may_only_appear_in_module_files_1314": "Genel modül dışarı aktarmaları yalnızca modül dosyalarında görünebilir.", - "Global_type_0_must_be_a_class_or_interface_type_2316": "'{0}' genel türü, bir sınıf veya arabirim türü olmalıdır.", - "Global_type_0_must_have_1_type_parameter_s_2317": "'{0}' genel türü, {1} türünde parametre içermelidir.", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' ve '--watch' içinde yeniden derlemelerin olması, bir dosya içindeki değişikliklerin yalnızca doğrudan buna bağımlı olan dosyaları etkileyeceğini varsayar.", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' ve 'watch' modu kullanan projelerdeki yeniden derlemelerde, bir dosyada yapılan değişikliklerin yalnızca bu dosyaya bağımlı olan dosyaları etkileyeceğinin varsayılmasını sağla.", - "Hexadecimal_digit_expected_1125": "Onaltılık basamak bekleniyor.", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Tanımlayıcı bekleniyor. '{0}' modülün en üst düzeyinde ayrılmış bir sözcüktür.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Sınıf tanımları otomatik olarak katı moddadır.", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Modüller otomatik olarak katı moddadır.", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Tanımlayıcı bekleniyor. '{0}', burada kullanılamayan ayrılmış bir sözcüktür.", - "Identifier_expected_1003": "Tanımlayıcı bekleniyor.", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Tanımlayıcı bekleniyor. '__esModule', ECMAScript modülleri dönüştürülürken, dışarı aktarılan bir işaretçi olarak ayrılmış.", - "Identifier_or_string_literal_expected_1478": "Tanımlayıcı veya sabit değerli dize bekleniyor.", - "Identifier_string_literal_or_number_literal_expected_1496": "Tanımlayıcı, sabit değerli dize veya sabit değerli sayı bekleniyor.", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' öğesini düzeltmek için bir çekme isteği göndermeyi deneyin", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "‘{0}’ paketi bu modülü fiili olarak kullanıma sunuyorsa `'{1}' modülünü bildir;` ifadesini içeren yeni bir bildirim (.d.ts) dosyası eklemeyi deneyin", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Bulunan tsconfig dosyasını yoksayıp komut satırı seçenekleri ve dosyalarla oluşturun.", - "Ignore_this_error_message_90019": "Bu hata iletisini yoksay", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json yok sayılıyor, belirtilen dosyaları varsayılan derleyici seçenekleriyle derler.", - "Implement_all_inherited_abstract_classes_95040": "Devralınan tüm soyut sınıfları uygula", - "Implement_all_unimplemented_interfaces_95032": "Uygulanmayan tüm arabirimleri uygula", - "Implement_inherited_abstract_class_90007": "Devralınan soyut sınıfı uygula", - "Implement_interface_0_90006": "'{0}' arabirimini uygula", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "'{1}' özel adına sahip veya bu adı kullanan '{0}' dışarı aktarılan sınıfının yan tümcesini uygular.", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol' öğesinin örtük olarak 'string' türüne dönüştürülmesi işlemi çalışma zamanında başarısız olur. Bu ifadeyi 'String(...)' içinde sarmalamayı düşünün.", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' içeri aktarması bu dosyada kullanılan genel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' içeri aktarması yerel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", - "Import_0_from_1_90013": "'{0}' öğesini \"{1}\" kaynağından içeri aktar", - "Import_assertion_values_must_be_string_literal_expressions_2837": "İçeri aktarma onaylama değerleri, dize sabit ifadeleri olmalıdır.", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' çağrılarına derlenen deyimler için içeri aktarma onaylamalarına izin verilmiyor.", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "İçeri aktarma onayları, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "İçeri aktarma onayları, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "İçeri aktarma onaylamaları içeri aktarma öznitelikleriyle değiştirildi. 'assert' yerine 'with' kullanın.", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript modülleri hedeflenirken içeri aktarma ataması kullanılamaz. Bunun yerine 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' veya başka bir modül biçimi kullanmayı deneyin.", - "Import_attribute_values_must_be_string_literal_expressions_2858": "İçeri aktarma öznitelik değerleri, sabit değerli dize ifadeleri olmalıdır.", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' çağrılarına derlenen deyimler üzerinde içeri aktarma özniteliklerine izin verilmiyor.", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "İçeri aktarma öznitelikleri, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "İçeri aktarma öznitelikleri, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", - "Import_declaration_0_is_using_private_name_1_4000": "'{0}' içeri aktarma bildirimi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "İçeri aktarma bildirimi, yerel '{0}' bildirimiyle çakışıyor.", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Ad alanındaki içeri aktarma bildirimleri bir modüle başvuramaz.", - "Import_emit_helpers_from_tslib_6139": "'Tslib'den yayma yardımcılarını içeri aktar.", - "Import_may_be_converted_to_a_default_import_80003": "İçeri aktarma varsayılan bir içeri aktarmaya dönüştürülebilir.", - "Import_name_cannot_be_0_2438": "İçeri aktarma adı '{0}' olamaz.", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Çevresel modül bildirimindeki içeri veya dışarı aktarma bildirimi, göreli modül adı aracılığıyla modüle başvuramaz.", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "'{0}' içeri aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", - "Imported_via_0_from_file_1_1393": "'{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Imported_via_0_from_file_1_with_packageId_2_1394": "'{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Bir JSON dosyasının ECMAScript modülüne aktarılması, 'module' değeri '{0}' olarak ayarlandığında 'type: \"json\"' içeri aktarma özniteliği gerektirir.", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Modül genişletmelerinde içeri aktarmalara izin verilmez. Bunları, kapsayan dış modüle taşımanız önerilir.", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Çevresel sabit listesi bildirimlerinde, üye başlatıcısı sabit ifade olmalıdır.", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Birden fazla bildirime sahip sabit listesinde yalnızca bir bildirim ilk sabit listesi öğesine ait başlatıcıyı atlayabilir.", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dosyaların listesini ekleyin. Bu, `include` seçeneğinden farklı olarak glob desenlerini desteklemez.", - "Include_modules_imported_with_json_extension_6197": "'.json' uzantısıyla içeri aktarılan modülleri dahil et", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Yayılan JavaScript içindeki kaynak eşlemelerine kaynak kodunu ekleyin.", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Yayılan JavaScript içine kaynak eşleme dosyalarını ekleyin.", - "Includes_imports_of_types_referenced_by_0_90054": "'{0}' tarafından başvurulan türlerin içeri aktarmalarını içerir", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch dahil olmak üzere -w, dosya değişiklikleri için geçerli projeyi izlemeye başlayacak. Bir kez ayarlandıktan sonra, izleme modunu şununla yapılandırabilirsiniz:", - "Incomplete_quantifier_Digit_expected_1505": "Eksik niceleyici. Sayı bekleniyordu.", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{0}' türündeki dizin imzası '{1}' türünde yok.", - "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' türündeki dizin imzası yalnızca okumaya izin veriyor.", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "'{0}' birleştirilmiş bildirimindeki bildirimlerin tümü dışarı aktarılmış veya yerel olmalıdır.", - "Infer_all_types_from_usage_95023": "Tüm türleri kullanımdan çıkar", - "Infer_function_return_type_95148": "İşlev dönüş türünü çıkarsa", - "Infer_parameter_types_from_usage_95012": "Parametre türleri için kullanımdan çıkarım yap", - "Infer_this_type_of_0_from_usage_95080": "Kullanımdan '{0}' öğesinin 'this' türünü çıkarsa", - "Infer_type_of_0_from_usage_95011": "'{0}' türü için kullanımdan çıkarım yap", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Sınıf ifadelerinden çıkarım, --isolatedDeclarations ile desteklenmiyor.", - "Initialize_property_0_in_the_constructor_90020": "Oluşturucu içinde '{0}' özelliğini başlat", - "Initialize_static_property_0_90021": "'{0}' statik özelliğini başlat", - "Initializer_for_property_0_2811": "'{0}' özelliği için başlatıcı", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "'{0}' örnek üyesi değişkeninin başlatıcısı, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "Çevresel bağlamlarda başlatıcılara izin verilmez.", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Bir TypeScript projesi başlatır ve bir tsconfig.json dosyası oluşturur.", - "Inline_variable_95184": "Satır içi değişken", - "Insert_command_line_options_and_files_from_a_file_6030": "Dosyadaki komut satırı seçeneklerini ve dosyaları ekleyin.", - "Install_0_95014": "'{0}' yükle", - "Install_all_missing_types_packages_95033": "Tüm eksik tür paketlerini yükle", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' arabirimi, aynı anda '{1}' ve '{2}' türlerini genişletemez.", - "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' arabirimi, '{1}' arabirimini yanlış genişletiyor.", - "Interface_declaration_cannot_have_implements_clause_1176": "Arabirim bildirimi, 'implements' yan tümcesine sahip olamaz.", - "Interface_must_be_given_a_name_1438": "Arabirime bir ad verilmesi gerekir.", - "Interface_name_cannot_be_0_2427": "Arabirim adı '{0}' olamaz.", - "Interop_Constraints_6252": "Birlikte Çalışma Kısıtlamaları", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' eklemek yerine isteğe bağlı özellik türlerini yazıldıkları gibi yorumlayın.", - "Invalid_character_1127": "Geçersiz karakter.", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Geçersiz '{0}' içeri aktarma tanımlayıcısında olası çözünürlük yok.", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Genişletmedeki modül adı geçersiz. '{0}' modülü, '{1}' konumundaki türü belirsiz ve genişletilemeyen bir modüle çözümleniyor.", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Genişletmedeki modül adı geçersiz; '{0}' adlı modül bulunamıyor.", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Yeni ifadeden geçersiz isteğe bağlı zincir. '{0}()' çağrısı mı yapmak istediniz?", - "Invalid_reference_directive_syntax_1084": "Geçersiz 'reference' yönergesi söz dizimi.", - "Invalid_syntax_in_decorator_1498": "Dekoratörde geçersiz söz dizimi.", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Geçersiz '{0}' kullanımı. Bu ifade bir sınıf statik bloğu içinde kullanılamaz.", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Geçersiz '{0}' kullanımı. Modüller otomatik olarak katı moddadır.", - "Invalid_use_of_0_in_strict_mode_1100": "Katı modda geçersiz '{0}' kullanımı.", - "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' için geçersiz değer.", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' için geçersiz değer. '{0}' geçerli bir tanımlayıcı değil.", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Bu iki şablon ifadesini ayırmak için virgül koymamış olabilirsiniz. Bu ifadeler, çağrılamayacak etiketli bir şablon ifadesi oluşturur.", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "'{0}' öğe türü geçerli bir JSX öğesi değil.", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "'{0}' örnek türü geçerli bir JSX öğesi değil.", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "'{0}' dönüş türü geçerli bir JSX öğesi değil.", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "'{0}' türü geçerli bir JSX öğe türü değil.", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}', 'extends {2}' yan tümcesiyle eşleşmiyor.", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' bir sınıfa eklenmemiş.", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' yalnızca bir imzanın son parametresi içinde görünebilir.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' etiketinin adı '{0}' ancak bu ada sahip bir parametre yok.", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' etiketi '{0}' adına sahip ancak bu ada sahip bir parametre yok. Bir dizi türü olsaydı 'arguments' ile eşleşirdi.", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef, TypeScript türüne dönüştürülmüş olabilir.", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' etiketi bir tür ek açıklamasına sahip olmalıdır veya sonrasında '@property' ya da '@member' etiketlerinden biri gelmelidir.", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef’leri, TypeScript türlerine dönüştürülmüş olabilir.", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc türleri yalnızca belge açıklamalarının içinde kullanılabilir.", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc türleri TypeScript türlerine taşınabilir.", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX özniteliklerine yalnızca boş olmayan 'expression' ifadesi atanabilir.", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "'{0}' adlı JSX öğesine karşılık gelen bir kapatma etiketi yok.", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX öğe sınıfı, '{0}' özelliğine sahip olmadığı için öznitelikleri desteklemiyor.", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Herhangi bir arabirim 'JSX.{0}' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Genel türdeki 'JSX.Element' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX öğesi türü '{0}', oluşturma veya çağrı imzasına sahip değil.", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX öğeleri aynı ada sahip birden fazla özniteliğe sahip olamaz.", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX ifadeleri virgül işlecini kullanamaz. Bir dizi mi yazmak istediniz?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX ifadelerinin bir üst öğesi olmalıdır.", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX parçasına karşılık gelen bir kapatma etiketi yok.", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX özellik erişimi ifadeleri JSX ad alanı adlarını içeremez", - "JSX_spread_child_must_be_an_array_type_2609": "JSX yayılma alt öğesi, bir dizi türü olmalıdır.", - "JavaScript_Support_6247": "JavaScript Desteği", - "Jump_target_cannot_cross_function_boundary_1107": "Atlama hedefi işlev sınırını geçemez.", - "KIND_6034": "TÜR", - "Keywords_cannot_contain_escape_characters_1260": "Anahtar sözcükler kaçış karakterleri içeremez.", - "LOCATION_6037": "KONUM", - "Language_and_Environment_6254": "Dil ve Ortam", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Virgül işlecinin sol tarafı kullanılmıyor ve herhangi bir yan etkisi yok.", - "Library_0_specified_in_compilerOptions_1422": "compilerOptions içinde belirtilen '{0}' kitaplığı", - "Library_referenced_via_0_from_file_1_1405": "'{1}' dosyasından '{0}' aracılığıyla başvurulan kitaplık", - "Line_break_not_permitted_here_1142": "Burada satır sonuna izin verilmez.", - "Line_terminator_not_permitted_before_arrow_1200": "Oktan önce satır sonlandırıcısına izin verilmez.", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Bir modül çözümlenirken aranacak dosya adı son eklerinin listesi.", - "List_of_folders_to_include_type_definitions_from_6161": "Eklenecek tür tanımlarının alınacağı klasörlerin listesi.", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Birleştirilmiş içerikleri, çalışma zamanında proje yapısını temsil eden kök klasörlerin listesi.", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "'{1}' kök dizininden '{0}' yükleniyor; aday konumu: '{2}'.", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türleri: {1}.", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türleri: {1}.", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' işlemi sırasında kullanılan yolları günlüğe kaydet.", - "Longest_matching_prefix_for_0_is_1_6108": "'{0}' için eşleşen en uzun ön ek: '{1}'.", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' klasöründe aranıyor; ilk konum: '{0}'.", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tüm 'super()' çağrılarını kendi oluşturucularının ilk deyimi yap", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Dize, sayı veya simge yerine yalnızca dönüş dizelerinin anahtarını oluşturun. Eski seçenek.", - "Make_super_call_the_first_statement_in_the_constructor_90002": "Oluşturucudaki ilk deyime 'super()' tarafından çağrı yapılmasını sağla", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Eşleştirilmiş nesne türü örtük olarak 'any' şablon türüne sahip.", - "Mark_array_literal_as_const_90070": "Sabit değerli dizileri const olarak işaretle", - "Matched_0_condition_1_6403": "'{0}' koşulu '{1}' eşleşti.", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Varsayılan '**/*' ekleme deseniyle eşleşti", - "Matched_by_include_pattern_0_in_1_1407": "'{1}' içindeki '{0}' ekleme desenine göre eşleştirildi", - "Member_0_implicitly_has_an_1_type_7008": "'{0}' üyesi örtük olarak '{1}' türüne sahip.", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' üyesi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "Merge_conflict_marker_encountered_1185": "Birleştirme çakışması işaretçisiyle karşılaşıldı.", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "'{0}' birleştirilen bildirimi, varsayılan bir dışarı aktarma bildirimini içeremez. Bunun yerine ayrı bir 'export default {0}' bildirimi eklemeyi göz önünde bulundurun.", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "'{0}' meta-özelliğine yalnızca bir işlev bildiriminin, işlev ifadesinin veya oluşturucunun gövdesinde izin verilir.", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' metodu abstract olarak işaretlendiğinden bir uygulamaya sahip olamaz.", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Dışarı aktarılan arabirimin '{0}' metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Dışarı aktarılan arabirimin '{0}' metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metodun --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", - "Method_not_implemented_95158": "Metot uygulanmadı.", - "Modifiers_cannot_appear_here_1184": "Değiştiriciler burada görüntülenemez.", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' modülü yalnızca varsayılan olarak '{1}' bayrağı kullanılarak içeri aktarılabilir", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "'{0}' modülü bu yapı kullanılarak içe aktarılamaz. Belirtici yalnızca 'require' ile içe aktarılamayan bir ES modülüne çözümlenir. Bunun yerine bir ECMAScript içe aktarma kullanın.", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak '{2}' olarak dışarı aktarıldı.", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak dışarı aktarılmadı.", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "'{0}' modülü bir türe başvurmuyor ancak burada bir tür olarak kullanılmış. Şunu mu demek istediniz?: 'typeof import('{0}')'", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "'{0}' modülü bir değere başvurmuyor ancak burada bir değer olarak kullanılmış.", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "{0} modülü, '{1}' adlı bir üyeyi zaten dışarı aktardı. Belirsizliği çözmek için açık olarak yeniden dışarı aktarmayı göz önünde bulundurun.", - "Module_0_has_no_default_export_1192": "'{0}' modülü için varsayılan dışarı aktarma yok.", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "'{0}' modülünün varsayılan dışarı aktarması yok. Bunun yerine 'import { {1} } from {0}' kullanmak mı istediniz?", - "Module_0_has_no_exported_member_1_2305": "'{0}' modülü, dışarı aktarılan '{1}' üyesine sahip değil.", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' modülünün dışarı aktarılmış '{1}' üyesi yok. Bunun yerine 'import {1} from {0}' kullanmak mı istediniz?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' modülü, aynı ada sahip bir yerel bildirim tarafından gizleniyor.", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "'{0}' modülü 'export =' kullanıyor ve 'export *' ile birlikte kullanılamaz.", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' modülü, '{1}' dosyasında yerel olarak bildirilmiş çevresel modül olarak çözümlendi.", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' modülü '{1}' olarak çözümlendi, ancak '--allowArbitraryExtensions' ayarlanmadı.", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "'{0}' modülü '{1}' olarak çözüldü ancak '--jsx' ayarlanmadı.", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' modülü '{1}' olarak çözümlendi ancak '--resolveJsonModule' kullanılmadı.", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Modül bildirim adları yalnızca ' veya \" tırnak içine alınmış dizeleri kullanabilir.", - "Module_name_0_matched_pattern_1_6092": "Modül adı: '{0}', eşleşen desen: '{1}'.", - "Module_name_0_was_not_resolved_6090": "======== '{0}' modül adı çözümlenemedi. ========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== '{0}' modül adı '{1}' öğesine başarıyla çözümlendi. ========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== '{0}' modül adı '{2}' Paket Kimliğiyle '{1}' olarak başarıyla çözümlendi. ========", - "Module_resolution_kind_is_not_specified_using_0_6088": "Modül çözümleme türü belirtilmedi, '{0}' kullanılıyor.", - "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' kullanarak modül çözümleme başarısız oldu.", - "Modules_6244": "Modüller", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "Etiketlenmiş demet öğesi değiştiricilerini etiketlere taşı", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Varsayılan dışarı aktarmadaki ifadeyi bir değişkene taşıyın ve bir tür ek açıklaması ekleyin.", - "Move_to_a_new_file_95049": "Yeni bir dosyaya taşı", - "Move_to_file_95178": "Dosyaya taşı", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Birbirini izleyen birden çok sayısal ayırıcıya izin verilmez.", - "Multiple_constructor_implementations_are_not_allowed_2392": "Birden çok oluşturucu uygulamasına izin verilmez.", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "YENİ SATIR", - "Name_is_not_valid_95136": "Ad geçerli değil", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Adlandırılmış yakalama grupları yalnızca 'ES2018' veya üzeri hedeflenirken kullanılabilir.", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Aynı ada sahip adlandırılmış yakalama grupları birbirini dışlamalıdır.", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Ertelenmiş içeri aktarmalarda adlandırılmış içeri aktarmalara izin verilmez.", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module', '{0}' olarak ayarlandığında JSON dosyasından ECMAScript modülüne adlandırılmış içeri aktarmalara izin verilmez.", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' ve '{2}' türündeki '{0}' adlı özellikler aynı değil.", - "Namespace_0_has_no_exported_member_1_2694": "'{0}' ad alanında dışarı aktarılan '{1}' üyesi yok.", - "Namespace_must_be_given_a_name_1437": "Ad alanına bir ad verilmesi gerekir.", - "Namespace_name_cannot_be_0_2819": "Ad alanı “{0}” olamaz.", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' etkinken genel betik dosyalarında ad alanlarına izin verilmiyor. Bu dosyanın genel bir betik olması amaçlanmamışsa, 'moduleDetection'i 'force' olarak ayarlayın veya boş bir 'export {}' deyimi ekleyin.", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "'this' parametrelerine ne dekoratörler ne de değiştiriciler uygulanamaz.", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Hiçbir temel oluşturucu, belirtilen tür bağımsız değişkeni sayısına sahip değil.", - "No_constituent_of_type_0_is_callable_2755": "'{0}' türünde çağrılabilir bileşen yok.", - "No_constituent_of_type_0_is_constructable_2759": "'{0}' türünde oluşturulabilir bileşen yok.", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' türü üzerinde '{0}' türünde parametreye sahip dizin imzası bulunamadı.", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' yapılandırma dosyasında giriş bulunamadı. Belirtilen 'include' yolları: '{1}', 'exclude' yolları: '{2}'.", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Artık desteklenmiyor. Önceki sürümlerde, dosyaları okumak için metin kodlamasını el ile ayarlayın.", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} bağımsız değişken bekleyen aşırı yükleme yok ancak {1} veya {2} bağımsız değişken bekleyen aşırı yüklemeler var.", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} tür bağımsız değişkeni bekleyen aşırı yükleme yok ancak {1} veya {2} tür bağımsız değişkeni bekleyen aşırı yüklemeler var.", - "No_overload_matches_this_call_2769": "Bu çağrıyla eşleşen aşırı yükleme yok.", - "No_type_could_be_extracted_from_this_type_node_95134": "Bu tür düğümünden tür ayıklanamadı", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "'{0}' toplu özelliği için kapsamda değer yok. Bir değer tanımlayın ya da bir başlatıcı sağlayın.", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Soyut olmayan '{0}' sınıfı, '{2}' sınıfından devralınan {1} soyut üyesini uygulamaz.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2}.", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2} ve {3} tane daha.", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Soyut olmayan sınıf ifadesi, '{1}' sınıfından devralınan '{0}' soyut üyesini uygulamıyor.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinin uygulamaları eksik: {1}.", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinde uygulamalar eksik: {1} ve {2} tane daha.", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Null olmayan onaylamalar yalnızca TypeScript dosyalarında kullanılabilir.", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "Basit olmayan parametre burada bildirildi.", - "Not_all_code_paths_return_a_value_7030": "Tüm kod yolları bir değer döndürmez.", - "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' türündeki tüm bileşenler çağrılabilir değil.", - "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' türündeki tüm bileşenler oluşturulabilir değil.", - "Numbers_out_of_order_in_quantifier_1506": "Sayılar niceleyicide sıranın dışında.", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "2^53 veya üzeri mutlak değerlere sahip sayısal sabit değerler, tamsayı olarak doğru bir şekilde temsil edilemeyecek kadar büyüktür.", - "Numeric_separators_are_not_allowed_here_6188": "Burada sayısal ayırıcılara izin verilmez.", - "Object_is_of_type_unknown_2571": "Nesne 'unknown' türünde.", - "Object_is_possibly_null_2531": "Nesne büyük olasılıkla 'null'.", - "Object_is_possibly_null_or_undefined_2533": "Nesne büyük olasılıkla 'null' veya 'undefined'.", - "Object_is_possibly_undefined_2532": "Nesne büyük olasılıkla 'undefined'.", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Nesne sabit değeri yalnızca bilinen özellikleri belirtebilir ve '{0}', '{1}' türünde değil.", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Nesne sabit değerinde yalnızca bilinen özellikler belirtilebilir, ancak '{0}', '{1}' türünde yok. '{2}' yazmak mı istediniz?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "'{0}' nesne sabit değeri özelliği, örtük olarak '{1}' türüne sahip.", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Toplu özellikler içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Yayma atamaları içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", - "Octal_digit_expected_1178": "Sekizli basamak bekleniyor.", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Karakter sınıfında sekizli kaçış dizilerine ve geri başvurulara izin verilmiyor. Bu bir kaçış dizisi olarak amaçlandıysa, yerine '{0}' kullanın.", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sekizli kaçış dizilerine izin verilmiyor. '{0}' söz dizimini kullanın.", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Sabit değerli sekizliklere izin verilmiyor. '{0}' söz dizimini kullanın.", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' değerlerinden biri '{2}' dizesidir ve diğer değerin bilinmeyen bir sayısal değer olduğu varsayılır.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' anahtar sözcüğüyle yalnızca void işlevi çağrılabilir.", - "Only_ambient_modules_can_use_quoted_names_1035": "Yalnızca çevresel modüller tırnak içinde ad kullanabilir.", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} ile birlikte yalnızca 'amd' ve 'system' modülleri desteklenir.", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Yalnızca const dizileri --isolatedDeclarations ile çıkarsanabilir.", - "Only_emit_d_ts_declaration_files_6014": "Yalnızca '.d.ts' bildirim dosyalarını yayımla.", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript dosyalarının değil yalnızca d.ts dosyalarının çıkışını alın.", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' anahtar sözcüğüyle yalnızca temel sınıfa ait ortak ve korunan metotlara erişilebilir.", - "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' işleci '{1}' türüne uygulanamıyor.", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' işleci, '{1}' ve '{2}' türüne uygulanamaz.", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "İşleçler bir karakter sınıfı içinde karıştırılmamalıdır. Bunun yerine iç içe bir sınıfta sarmalayın.", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Düzenleme sırasında bir projeyi çok projeli başvuru denetiminin dışında tutun.", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' seçeneği kullanım dışı bırakıldı ve TypeScript {2} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{3}\"' olarak belirtin.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'false' veya 'null' olarak ayarlanabilir.", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'null' olarak ayarlanabilir.", - "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' seçeneği yalnızca komut satırında belirtilebilir.", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0} seçeneği yalnızca '--inlineSourceMap' veya '--sourceMap' seçeneği sağlandığında kullanılabilir.", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Seçenek '{0}' yalnızca 'moduleResolution' değeri 'node16', 'nodenext' veya 'bundler' olarak ayarlandığında kullanılabilir.", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "'{0}' seçeneği yalnızca 'module' 'preserve', 'commonjs' veya 'es2015' ya da daha yeni bir değere ayarlandığında kullanılabilir.", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' seçeneği '{1}' olduğunda '{0}' seçeneği belirtilemez.", - "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' seçeneği, '{1}' seçeneği ile belirtilemez.", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{0}' seçeneği, '{1}' seçeneği belirtilmeden belirtilemez.", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' seçeneği veya '{2}' seçeneği belirtilmeden '{0}' seçeneği belirtilemez.", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "'{0}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}' seçeneği kullanım dışı bırakıldı ve TypeScript {1} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{2}\"' olarak belirtin.", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' seçeneği gereksiz ve '{1}' seçeneği ile belirtilemez.", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "'allowImportingTsExtensions' seçeneği, yalnızca 'noEmit', 'emitDeclarationOnly' veya 'rewriteRelativeImportExtensions' ayarlandığında kullanılabilir.", - "Option_build_must_be_the_first_command_line_argument_6369": "'--build' seçeneği ilk komut satırı bağımsız değişkeni olmalıdır.", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' seçeneği, yalnızca '--module' sağlandığında veya 'target' seçeneği 'ES2015' veya daha yüksek bir sürüm değerine sahip olduğunda kullanılabilir.", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' seçeneği '{1}' olarak ayarlandığında 'moduleResolution' seçeneği '{0}' olarak ayarlanmalıdır (veya belirtilmemiş olarak bırakılmalıdır).", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' seçeneği '{1}' olarak ayarlandığında 'module' seçeneği '{0}' olarak ayarlanmalıdır.", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "'project' seçeneği, komut satırındaki kaynak dosyalarıyla karıştırılamaz.", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' 'classic' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' 'none', 'classic' veya 'umd' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' değeri 'UMD', 'AMD' veya 'System' olarak ayarlandığında 'verbatimModuleSyntax' seçeneği kullanılamaz.", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "'{0}' ve '{1}' seçenekleri birleştirilemez.", - "Options_Colon_6027": "Seçenekler:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "Diğer Çıkışlar", - "Output_Formatting_6256": "Çıkış Biçimlendirmesi", - "Output_compiler_performance_information_after_building_6615": "Derleme sonrasında derleyici performans bilgilerinin çıkışını alın.", - "Output_directory_for_generated_declaration_files_6166": "Oluşturulan bildirim dosyaları için çıkış dizini.", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "Çıkış dosyası '{0}' '{1}' kaynak dosyasından oluşturulmamış.", - "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", - "Output_more_detailed_compiler_performance_information_after_building_6632": "Derleme sonrasında derleyici performans bilgilerinin daha ayrıntılı çıkışını alın.", - "Overload_0_of_1_2_gave_the_following_error_2772": "{0}/{1} aşırı yükleme '{2}' imzası, aşağıdaki hatayı verdi.", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Aşırı yükleme imzalarının hepsi soyut veya soyut olmayan olmalıdır.", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Aşırı yükleme imzalarının tümü çevresel veya çevresel olmayan türde olmalıdır.", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Aşırı yükleme imzalarının hepsi dışarı aktarılmış veya dışarı aktarılmamış olmalıdır.", - "Overload_signatures_must_all_be_optional_or_required_2386": "Aşırı yükleme imzalarının tümü isteğe bağlı veya gerekli olmalıdır.", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "Aşırı yükleme imzalarının tümü ortak, özel veya korumalı olmalıdır.", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "'{0}' parametresi, kendisinden sonra bildirilen '{1}' tanımlayıcısına başvuramaz.", - "Parameter_0_cannot_reference_itself_2372": "'{0}' parametresi kendisine başvuramaz.", - "Parameter_0_implicitly_has_an_1_type_7006": "'{0}' parametresi örtük olarak '{1}' türüne sahip.", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "'{0}' parametresi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "'{0}' parametresi, '{1}' parametresi ile aynı konumda değil.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Erişimcinin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Erişimcinin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Erişimcinin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Dışarı aktarılan işlevin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Dışarı aktarılan işlevin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Dışarı aktarılan işlevin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{2}' adlı özel modüldeki '{1}' adına sahip ya da bu adı kullanıyor.", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{1}' adına sahip ya da bu adı kullanıyor.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametre soru işareti ve başlatıcı içeremez.", - "Parameter_declaration_expected_1138": "Parametre bildirimi bekleniyor.", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametrenin adı var ancak türü yok. Şunu mu demek istediniz: '{0}: {1}'?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametre değiştiricileri yalnızca TypeScript dosyalarında kullanılabilir.", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametrenin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Katı modda ayrıştırın ve her kaynak dosya için \"use strict\" kullanın.", - "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json içindeki 'files' listesinin parçası", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' deseni en fazla bir adet '*' karakteri içerebilir.", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' veya '--extendedDiagnostics' için performans zamanlamaları bu oturumda kullanılamaz. Web performans API'sinin yerel bir uygulaması bulunamadı.", - "Platform_specific_6912": "Platforma özel", - "Prefix_0_with_an_underscore_90025": "'{0}' için ön ek olarak alt çizgi kullan", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "Hatalı tüm özellik bildirimlerinin başına 'declare' ekleyin", - "Prefix_all_unused_declarations_with_where_possible_95025": "Mümkün olduğunda tüm kullanılmayan bildirimlerin başına '_' ekle", - "Prefix_with_declare_95094": "Başına 'declare' ekleyin", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "JavaScript çıktısında, içeri aktarılmazsa kaldırılacak olan kullanılmayan içe aktarılan değerleri koruyun.", - "Print_all_of_the_files_read_during_the_compilation_6653": "Derleme sırasında okunan tüm dosyaları yazdırın.", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Derleme sırasında, neden dahil edildiğini de içerecek şekilde okunan dosyaları yazdırın.", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Dosya adlarını ve bunların derlemenin bir parçası olmalarının nedenini yazdır.", - "Print_names_of_files_part_of_the_compilation_6155": "Derlemenin parçası olan dosyaların adlarını yazdırın.", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Derlemenin parçası olan dosyaların adlarını yazdırın ve sonra işlemeyi durdurun.", - "Print_names_of_generated_files_part_of_the_compilation_6154": "Oluşturulan dosyalardan, derlemenin parçası olanların adlarını yazdırın.", - "Print_the_compiler_s_version_6019": "Derleyici sürümünü yazdır.", - "Print_the_final_configuration_instead_of_building_1350": "Derlemek yerine son yapılandırmayı yazdırın.", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "Derleme sonrasında yayılan dosyaların adlarını yazdırın.", - "Print_this_message_6017": "Bu iletiyi yazdır.", - "Private_accessor_was_defined_without_a_getter_2806": "Özel erişimci bir alıcı olmadan tanımlandı.", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Özel alan '{0}' kapsayan sınıfta bildirilmelidir.", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Değişken bildirimlerinde özel tanımlayıcılara izin verilmiyor.", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Sınıf gövdelerinin dışında özel tanımlayıcılara izin verilmiyor.", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Özel tanımlayıcılara yalnızca sınıf gövdelerinde izin verilir ve yalnızca bir sınıf üyesi bildiriminin parçası olarak, özellik erişimi olarak veya ‘in’ ifadesinin sol tarafında kullanılabilirler.", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Özel tanımlayıcılar yalnızca ECMAScript 2015 veya üzeri hedeflenirken kullanılabilir.", - "Private_identifiers_cannot_be_used_as_parameters_18009": "Özel tanımlayıcılar parametre olarak kullanılamaz.", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Özel veya korumalı '{0}' üyesine bir tür parametresinde erişilemiyor.", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan proje derlenemiyor", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden proje derlenemiyor", - "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' projesi zorla yeniden oluşturuluyor", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Buildinfo dosyası '{1}', '{2}' dosyasının derlemenin kök dosyası iken artık öyle olmadığını belirttiğinden '{0}' projesi güncel değil.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Buildinfo dosyası '{1}' programın hataları bildirmesi gerektiğini belirttiğinden '{0}' projesi güncel değil.", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "'{1}' buildinfo dosyası bazı değişikliklerin gösterilmediğini belirttiğinden '{0}' projesi güncel değil", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Buildinfo dosyası '{1}' compilerOptions içinde değişiklik olduğunu belirttiğinden '{0}' proje adı güncel değil", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "'{1}' çıkışı '{2}' girişinden daha eski olduğundan '{0}' projesi güncel değil", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Çıkış dosyası '{1}' mevcut olmadığından '{0}' projesi güncel değil", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' projesinin çıkışı geçerli '{2}' sürümünden farklı olan '{1}' sürümü ile oluşturulduğundan proje güncel değil", - "Project_0_is_up_to_date_6361": "'{0}' projesi güncel", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "En yeni '{1}' girişi '{2}' çıkışından daha eski olduğundan '{0}' projesi güncel", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "'{0}' projesi güncel ancak giriş dosyalarından daha eski olan çıkış dosyalarına ait zaman damgalarının güncelleştirilmesi gerekiyor", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' projesi bağımlılıklarından d.ts dosyaları ile güncel", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Proje başvuruları döngüsel bir grafik formu oluşturamaz. Döngü tespit edildi: {0}", - "Projects_6255": "Projeler", - "Projects_in_this_build_Colon_0_6355": "Bu derlemedeki projeler: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' değiştiricisine sahip özellikler yalnızca ECMAScript 2015 ve üzeri hedeflendiğinde kullanılabilir.", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' özelliği abstract olarak işaretlendiğinden bir başlatıcıya sahip olamaz.", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' özelliği bir dizin imzasından geldiğinden ['{0}'] ile erişilmelidir.", - "Property_0_does_not_exist_on_type_1_2339": "'{0}' özelliği, '{1}' türünde değil.", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' özelliği '{1}' türünde yok. Bunu mu demek istediniz: '{2}'?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' özelliği '{1}' türünde yok. Bunun yerine '{2}' statik üyesine erişmek mi istediniz?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' özelliği '{1}' türünde yok. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{2}' veya üzeri olarak değiştirmeyi deneyin.", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "'{0}' özelliği '{1}' türünde yok. 'Lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' özelliği başlatıcı içermiyor ve kesinlikle bir sınıf statik bloğuna atanmamış.", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "'{0}' özelliği başlatıcı içermiyor ve oluşturucuda kesin olarak atanmamış.", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' özelliği, get erişimcisinin dönüş türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' özelliği, set erişimcisinin parametre türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin get erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin set erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "'{1}' türündeki '{0}' özelliği, '{2}' temel türündeki aynı özelliğe atanamaz.", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "'{1}' türündeki '{0}' özelliği, '{2}' türüne atanamaz.", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "'{1}' türündeki '{0}' özelliği, '{2}' türünün içinden erişilemeyen farklı bir üyeye başvuruyor.", - "Property_0_is_declared_but_its_value_is_never_read_6138": "'{0}' özelliği bildirildi ancak değeri hiç okunmadı.", - "Property_0_is_incompatible_with_index_signature_2530": "'{0}' özelliği, dizin imzasıyla uyumsuz.", - "Property_0_is_missing_in_type_1_2324": "'{0}' özelliği '{1}' türünde değil.", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "'{0}' özelliği, '{1}' türünde eksik ancak '{2}' türünde gereklidir.", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "'{0}' özelliğinin özel tanımlayıcısı olduğundan özelliğe '{1}' sınıfı dışında erişilemiyor.", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' özelliği, '{1}' türünde isteğe bağlıdır, ancak '{2}' türünde gereklidir.", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' özelliği özeldir ve yalnızca '{1}' sınıfı içinden erişilebilir.", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' özelliği, '{1}' türünde özel, '{2}' türünde özel değildir.", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' özelliği korunuyor ve yalnızca '{1}' sınıfının bir örneği üzerinden erişilebilir. Bu, '{2}' sınıfının bir örneğidir.", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' özelliği korumalıdır ve yalnızca '{1}' sınıfı içinden ve alt sınıflarından erişilebilir.", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' özelliği korumalıdır; ancak '{1}' türü, '{2}' öğesinden türetilmiş bir sınıf değildir.", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' özelliği '{1}' türünde korumalı, '{2}' türünde ise ortaktır.", - "Property_0_is_used_before_being_assigned_2565": "'{0}' özelliği atanmadan önce kullanıldı.", - "Property_0_is_used_before_its_initialization_2729": "'{0}' özelliği başlatılmadan önce kullanılıyor.", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' özelliği '{1}' türü üzerinde olamaz. Şunu mu demek istediniz: '{2}'?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX yayılma özniteliğine ait '{0}' özelliği, hedef özelliğe atanamaz.", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Dışarı aktarılan anonim sınıf türünün '{0}' özelliği, özel veya korumalı olmayabilir.", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Dışarı aktarılan arabirimin '{0}' özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Dışarı aktarılan arabirimin '{0}' özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{1}' türündeki '{0}' özelliği '{2}' dizin türüne '{3}' atanamaz.", - "Property_0_was_also_declared_here_2733": "'{0}' özelliği de burada bildirildi.", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' özelliği '{1}' içindeki temel özelliğin üzerine yazacak. Bu bilerek yapılıyorsa bir başlatıcı ekleyin. Aksi takdirde, bir 'declare' değiştiricisi ekleyin veya gereksiz bildirimi kaldırın.", - "Property_assignment_expected_1136": "Özellik ataması bekleniyor.", - "Property_destructuring_pattern_expected_1180": "Özellik yok etme deseni bekleniyor.", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Özelliğin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", - "Property_or_signature_expected_1131": "Özellik veya imza bekleniyor.", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Özellik değeri yalnızca, dize sabit değeri, sayısal sabit değer, 'true', 'false', 'null', nesne sabit değeri veya dizi sabit değeri olabilir.", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5' hedeflenirken, 'for-of' içindeki yinelenebilir öğeler için yayılma ve yok etmeye yönelik tam destek sağlayın.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Dışarı aktarılan sınıfın '{0}' genel metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "'{0}' tam adının başında '@param {object} {1}' olmadan bu ada izin verilmiyor.", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "İşlev parametresi okunmadığında hata oluştur.", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Belirtilen 'any' türüne sahip ifade ve bildirimlerde hata oluştur.", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Örtük olarak 'any' türü içeren 'this' ifadelerinde hata tetikle.", - "Range_out_of_order_in_character_class_1517": "Aralık karakter sınıfında sıranın dışında.", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' etkinken bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.", - "React_components_cannot_include_JSX_namespace_names_2639": "React bileşenleri JSX ad alanı adlarını içeremez", - "Recommended_Options_6294": "Önerilen Seçenekler", - "Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript tarafından otomatik olarak yüklenen projelerin sayısını azaltın.", - "Referenced_project_0_may_not_disable_emit_6310": "Başvurulan '{0}' projesi, yayma özelliğini devre dışı bırakamaz.", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.", - "Referenced_via_0_from_file_1_1400": "'{1}' dosyasından '{0}' aracılığıyla başvuruldu", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution' 'node16' veya 'nodenext' olduğunda, bağıl içe aktarma yollarının ECMAScript içe aktarmalarında açık dosya uzantılarına ihtiyacı vardır. İçe aktarma yoluna bir uzantı eklemeyi düşünün.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda ECMAScript içeri aktarmalarında açık dosya uzantılarına ihtiyaç duyar. Şunu mu demek istediniz: '{0}'?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "İzleme işleminden dizinlerin listesini kaldırın.", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "İzleme modu işlemesinden bir dosya listesini kaldırın.", - "Remove_all_unnecessary_override_modifiers_95163": "Tüm gereksiz 'override' değiştiricilerini kaldır", - "Remove_all_unnecessary_uses_of_await_95087": "Tüm gereksiz 'await' kullanımlarını kaldırın", - "Remove_all_unreachable_code_95051": "Tüm erişilemeyen kodları kaldır", - "Remove_all_unused_labels_95054": "Kullanılmayan tüm etiketleri kaldır", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "İlgili sorunları olan tüm ok işlev gövdelerinden ayraçları kaldır", - "Remove_braces_from_arrow_function_95060": "Ok işlevinden küme ayraçlarını kaldır", - "Remove_braces_from_arrow_function_body_95112": "Ok işlevi gövdesinden küme ayraçlarını kaldır", - "Remove_import_from_0_90005": "'{0}' öğesinden içeri aktarmayı kaldır", - "Remove_override_modifier_95161": "'override' değiştiricisini kaldır", - "Remove_parentheses_95126": "Parantezleri kaldır", - "Remove_template_tag_90011": "Şablon etiketini kaldırın", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript dil sunucusundaki JavaScript dosyaları için toplam kaynak kodu boyutuna yönelik 20 MB sınırını kaldırın.", - "Remove_type_from_import_declaration_from_0_90055": "\"{0}\" içindeki içeri aktarma bildiriminden “type”ı kaldırın", - "Remove_type_from_import_of_0_from_1_90056": "\"{1}\" içindeki “{0}” içe aktarımından “type”ı kaldırın", - "Remove_type_parameters_90012": "Tür parametrelerini kaldırın", - "Remove_unnecessary_await_95086": "Gereksiz 'await' öğesini kaldırın", - "Remove_unreachable_code_95050": "Erişilemeyen kodları kaldır", - "Remove_unused_declaration_for_Colon_0_90004": "Kullanılmayan '{0}' bildirimini kaldırın.", - "Remove_unused_declarations_for_Colon_0_90041": "'{0}' için kullanılmayan bildirimleri kaldırın", - "Remove_unused_destructuring_declaration_90039": "Yapıyı bozan kullanılmayan bildirimi kaldır", - "Remove_unused_label_95053": "Kullanılmayan etiketi kaldır", - "Remove_variable_statement_90010": "Değişken deyimini kaldır", - "Rename_param_tag_name_0_to_1_95173": "“{0}” “@param” etiket adını “{1}” olarak yeniden adlandırın", - "Replace_0_with_Promise_1_90036": "'{0}' öğesini 'Promise<{1}>' ile değiştirin", - "Replace_all_unused_infer_with_unknown_90031": "Kullanılmayan tüm 'infer' öğelerini 'unknown' ile değiştirin", - "Replace_import_with_0_95015": "İçeri aktarma işlemini '{0}' ile değiştirin.", - "Replace_infer_0_with_unknown_90030": "'infer {0}' öğesini 'unknown' ile değiştirin", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "İşlevdeki tüm kod yolları bir değer döndürmediğinde hata bildir.", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch deyiminde sonraki ifadelere geçiş ile ilgili hataları bildir.", - "Report_errors_in_js_files_8019": ".js dosyalarındaki hataları bildirin.", - "Report_errors_on_unused_locals_6134": "Kullanılmayan yerel öğelerdeki hataları bildirin.", - "Report_errors_on_unused_parameters_6135": "Kullanılmayan parametrelerdeki hataları bildirin.", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Diğer araçların geçici olarak bildirim dosyaları oluşturabilmesi için dışarı aktarmalarda yeterli ek açıklama gerektir.", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Gerekli tür parametreleri, isteğe bağlı tür parametrelerini takip edemez.", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' modülünün çözümü '{1}' konumundaki önbellekte bulundu.", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{0}' tür başvurusu yönergesinin çözümlemesi '{1}' konumundaki önbellekte bulundu.", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Göreli olmayan ad çözümlenemedi; npm kitaplığı için yapılandırma güncelleştirmesi gerektirip gerekmediğini görmek için modern Düğüm çözümleme özellikleri ile deneniyor.", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Göreli olmayan ad çözümlenemedi; projenin yapılandırma güncelleştirmesi gerektirip gerektirmediğini görmek için '--moduleResolution bundler' ile deneniyor.", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'Keyof' değerini yalnızca dize değerli özellik adlarına (sayılar veya simgeler olmadan) çözümleyin.", - "Resolved_under_condition_0_6414": "'{0}' koşulu altında çözümlendi.", - "Resolving_in_0_mode_with_conditions_1_6402": "{0} modunda {1} koşullarıyla çözümleniyor.", - "Resolving_module_0_from_1_6086": "======== '{0}' modülü '{1}' öğesinden çözümleniyor. ========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "'{0}' modül adı, '{1}' - '{2}' temel url'sine göre çözümleniyor.", - "Resolving_real_path_for_0_result_1_6130": "'{0}' için gerçek yol çözümleniyor, sonuç: '{1}'.", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}', kök dizini: '{2}'. ========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== '{0}' tür başvuru yönergesi çözümleniyor, içeren dosya '{1}', kök dizin ayarlanmadı. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin: '{1}'. ========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin ayarlanmadı. ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Özel typeRoots belirten program için tür başvurusu yönergesi çözümleniyor, 'node_modules' klasöründe arama atlanıyor.", - "Resolving_with_primary_search_path_0_6121": "Birincil arama yolu '{0}' kullanılarak çözümleniyor.", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "'{0}' rest parametresi, örtük olarak 'any[]' türüne sahip.", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "'{0}' REST parametresi örtük olarak 'any[]' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "Rest_types_may_only_be_created_from_object_types_2700": "Rest türleri yalnızca nesne türlerinden oluşturulabilir.", - "Return_type_annotation_circularly_references_itself_2577": "Dönüş türü ek açıklaması döngüsel olarak kendine başvuruyor.", - "Return_type_must_be_inferred_from_a_function_95149": "Dönüş türü bir işlevden çıkarsanmalıdır", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Oluşturucu imzasının dönüş türü, sınıfın örnek türüne atanabilir olmalıdır.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Dışarı aktarılan işlevin dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Dışarı aktarılan işlevin dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Dışarı aktarılan işlevin dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", - "Rewrite_all_as_indexed_access_types_95034": "Tümünü dizinlenmiş erişim türleri olarak yeniden yaz", - "Rewrite_as_the_indexed_access_type_0_90026": "Dizine eklenmiş erişim türü '{0}' olarak yeniden yaz", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "'.ts', '.tsx', '.mts' ve '.cts' dosya uzantılarını, çıkış dosyalarındaki JavaScript eşdeğerlerine göreli içeri aktarma yollarında yeniden yazın.", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Sol işlenen hiçbir zaman null olmadığından ?? sağ işlenenine ulaşılamıyor.", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Kök dizin belirlenemiyor, birincil arama yolları atlanıyor.", - "Root_file_specified_for_compilation_1427": "Derleme için belirtilen kök dosyası", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "STRATEJİ", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Projelerin artımlı derlenmesini sağlamak için .tsbuildinfo dosyalarını kaydedin.", - "Saw_non_matching_condition_0_6405": "Eşleşmeyen koşul '{0}' görüldü.", - "Scoped_package_detected_looking_in_0_6182": "Kapsamlı paket algılandı, '{0}' içinde aranıyor", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Geri dönüş uzantıları için tüm üst node_modules dizinleri aranıyor: {0}.", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Tercih edilen uzantılar için tüm üst node_modules dizinleri aranıyor: {0}.", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Ayrıca bkz. https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "Seçim geçerli bir veya daha fazla deyim değil", - "Selection_is_not_a_valid_type_node_95133": "Seçim geçerli bir tür düğümü değil", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Yayılan JavaScript için JavaScript dil sürümünü ayarlayın ve uyumlu kitaplık bildirimlerini ekleyin.", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript’ten ileti dilini ayarlayın. Bu, yaymayı etkilemez.", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "Yapılandırma dosyanızdaki 'module' seçeneğini '{0}' olarak ayarlayın", - "Set_the_newline_character_for_emitting_files_6659": "Dosyaları yaymak için yeni satır karakterini ayarlayın.", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "Yapılandırma dosyanızdaki 'target' seçeneğini '{0}' olarak ayarlayın", - "Setters_cannot_return_a_value_2408": "Ayarlayıcılar bir değer döndüremez.", - "Show_all_compiler_options_6169": "Tüm derleyici seçeneklerini gösterin.", - "Show_diagnostic_information_6149": "Tanılama bilgilerini gösterin.", - "Show_verbose_diagnostic_information_6150": "Ayrıntılı tanılama bilgilerini gösterin.", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Nelerin derleneceğini (veya '--clean' ile belirtilmişse silineceğini) göster", - "Signature_0_must_be_a_type_predicate_1224": "'{0}' imzası bir tür koşulu olmalıdır.", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "İmza bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Yukarı akış projesinde hata nedeniyle aşağı akış projelerini derlemeyi atla.", - "Skip_type_checking_all_d_ts_files_6693": "Tüm .d.ts dosyalarında tür denetimini atlayın.", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript ile birlikte gelen .d.ts dosyaları için tür denetimini atlayın.", - "Skip_type_checking_of_declaration_files_6012": "Bildirim dosyalarının tür denetimini atla.", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan projenin derlenmesi atlanıyor", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden projenin derlenmesi atlanıyor", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Mutlak bir URI gibi görünen '{0}' modül türü atlanıyor, hedef dosya türleri: {1}.", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", - "Source_has_0_element_s_but_target_allows_only_1_2619": "Kaynakta {0} öğe var ancak hedef yalnızca {1} öğeye izin veriyor.", - "Source_has_0_element_s_but_target_requires_1_2618": "Kaynakta {0} öğe var ancak hedef {1} öğe gerektiriyor.", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Kaynak, hedefteki {0} konumunda bulunan gerekli öğe için eşleşme sağlamıyor.", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Kaynak, hedefteki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe için eşleşme sağlamıyor.", - "Specify_ECMAScript_target_version_6015": "ECMAScript hedef sürümünü belirtin.", - "Specify_JSX_code_generation_6080": "JSX kodu oluşturmayı belirtin.", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Tüm çıktıları tek bir JavaScript dosyasında paketleyen bir dosya belirt. 'declaration' değeri true ise, tüm .d.ts çıktısını paketleyen bir dosya da belirtir.", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Derlemeye dahil edilecek dosyalarla eşleşen glob desenlerinin bir listesini belirtin.", - "Specify_a_list_of_language_service_plugins_to_include_6681": "Dahil edilecek dil hizmeti eklentilerinin listesini belirtin.", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Hedef çalışma zamanı ortamını açıklayan bir paket kitaplık bildirim dosyası kümesi belirtin.", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "İçeri aktarmaları ek arama konumlarına yeniden eşleyen bir girdi kümesi belirtin.", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Projeler için yolları belirten nesnelerin bir dizisini belirtin. Proje başvurularında kullanılır.", - "Specify_an_output_folder_for_all_emitted_files_6678": "Tüm yayılan dosyalar için bir çıkış klasörü belirtin.", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Yalnızca türler için kullanılan içeri aktarmalar için üretme/denetleme davranışını belirt.", - "Specify_file_to_store_incremental_compilation_information_6380": "Artımlı derleme bilgilerinin depolanacağı dosyayı belirtin", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript’in belirli bir modül belirticisinden bir dosyayı nasıl arayacağını belirtin.", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Özyinelemeli dosya izleme işlevselliği olmayan sistemlerde dizinlerin nasıl izleneceğini belirtin.", - "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript izleme modunun nasıl çalıştığını belirtin.", - "Specify_library_files_to_be_included_in_the_compilation_6079": "Derlemeye dahil edilecek kitaplık dosyalarını belirtin.", - "Specify_module_code_generation_6016": "Modül kodu oluşturmayı belirtin.", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' kullanırken JSX fabrika işlevlerini içeri aktarmak için kullanılan modül belirticisini belirt.", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' gibi davranan birden çok klasör belirt.", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Ayarlarının devralındığı temel yapılandırma dosyalarına yönelik bir veya daha fazla yol ya da düğüm modülü başvurusu belirtin.", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Bildirim dosyalarının otomatik olarak alınması için seçenekleri belirtin.", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Dosya sistemi olayları kullanılarak oluşturulamadığında yoklama izlemesi oluşturma stratejisini belirtin: 'FixedInterval' (varsayılan), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Özyinelemeli izlemeyi yerel olarak desteklemeyen platformlarda dizini izleme stratejisini belirtin: 'UseFsEvents' (varsayılan), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Dosya izleme stratejisini belirtin: 'FixedPollingInterval' (varsayılan), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX yayma hedeflenirken parçalar için kullanılacak JSX Parça başvurusunu belirtin, örneğin 'React.Fragment' veya 'Fragment'.", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'React.createElement' veya 'h' gibi 'react' JSX emit hedeflerken kullanılacak JSX fabrika işlevini belirtin.", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX üretme hedeflenirken kullanılacak JSX fabrika işlevini belirtin; örneğin 'React.createElement' veya 'h'.", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' derleme seçeneği belirtilmiş olarak 'react' JSX yaymasını hedeflerken kullanılacak JSX parçası fabrika işlevini belirtin (ör. 'Fragment').", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Göreli olmayan modül adlarını çözümlemek için temel dizini belirtin.", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Dosyalar gösterilirken kullanılacak satır sonu dizisini belirtin: 'CRLF' (dos) veya 'LF' (unix).", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Hata ayıklayıcının TypeScript dosyalarını kaynak konumlar yerine nerede bulması gerektiğini belirtin.", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Hata ayıklayıcının, eşlem dosyalarını üretilen konumlar yerine nerede bulması gerektiğini belirtin.", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' öğesinden JavaScript dosyaları teslim almak için kullanılan maksimum klasör derinliğini belirtin. Yalnızca 'allowJs' ile geçerlidir.", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için kullanılacak modül tanımlayıcısını (ör. react) belirtin.", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' için çağrılan nesneyi belirtin. Bu, yalnızca 'react' JSX üretme hedeflenirken geçerlidir.", - "Specify_the_output_directory_for_generated_declaration_files_6613": "Oluşturulan bildirim dosyaları için çıkış dizinini belirtin.", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo artımlı derleme dosyasının yolunu belirtin.", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Giriş dosyalarının kök dizinini belirtin. Çıkış dizininin yapısını --outDir ile denetlemek için kullanın.", - "Specify_the_root_folder_within_your_source_files_6690": "Kaynak dosyalarınızda kök klasörü belirtin.", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Başvuru kaynak kodunu bulmak için hata ayıklayıcıların kök yolunu belirtin.", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Bir kaynak dosyada başvurulmadan eklenecek tür paketi adlarını belirtin.", - "Specify_what_JSX_code_is_generated_6646": "Oluşturulacak JSX kodunu belirtin.", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Sistemde yerel dosya izleyicileri tükenirse izleyicinin kullanması gereken yaklaşımı belirtin.", - "Specify_what_module_code_is_generated_6657": "Oluşturulan modül kodunu belirtin.", - "Split_all_invalid_type_only_imports_1367": "Geçersiz tüm yalnızca tür içeri aktarmalarını bölün", - "Split_into_two_separate_import_declarations_1366": "İki ayrı içeri aktarma bildirimine bölün", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' ifadelerindeki yayılma işleci yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", - "Spread_types_may_only_be_created_from_object_types_2698": "Yayılma türleri yalnızca nesne türlerinden oluşturulabilir.", - "Starting_compilation_in_watch_mode_6031": "Derleme, izleme modunda başlatılıyor...", - "Statement_expected_1129": "Deyim bekleniyor.", - "Statements_are_not_allowed_in_ambient_contexts_1036": "Çevresel bağlamlarda deyimlere izin verilmez.", - "Static_members_cannot_reference_class_type_parameters_2302": "Statik üyeler sınıf türündeki parametrelere başvuramaz.", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "'{0}' statik özelliği, '{1}' oluşturucu işlevinin yerleşik özelliği olan 'Function.{0}' ile çakışıyor.", - "Stricter_Typechecking_Options_6292": "Daha Katı Tür Denetimi Seçenekleri", - "String_literal_expected_1141": "Dize sabit değeri bekleniyor.", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' bayrağı 'es2015' veya 'es2020' olarak ayarlandığında, sabit değerli dize içeri ve dışarı aktarma adları desteklenmez.", - "String_literal_with_double_quotes_expected_1327": "Çift tırnak içine alınmış bir dize sabit değeri bekleniyor.", - "Style_Options_6293": "Stil Seçenekleri", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Renk ve bağlam kullanarak hataların ve iletilerin stilini belirleyin (deneysel).", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Eksi işareti varken alt sayfa bayrakları bulunmalıdır.", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Ardışık özellik bildirimleri aynı türe sahip olmalıdır. '{0}' özelliği '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Ardışık değişken bildirimleri aynı türe sahip olmalıdır. '{0}' değişkeni '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' deseni için '{0}' alternatifinin türü hatalı; beklenen: 'string' alınan: '{2}'.", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "'{1}' desenindeki '{0}' alternatifi en fazla bir '*' karakteri içerebilir.", - "Substitutions_for_pattern_0_should_be_an_array_5063": "'{0}' deseni için değişimler bir dizi olmalıdır.", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "'{0}' deseni için değiştirme değeri boş bir dizi olamaz.", - "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json dosyası başarıyla oluşturuldu.", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Super çağrılarına oluşturucu dışında veya oluşturucu içindeki iç içe işlevlerde izin verilmez.", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "Nesne sabit değerlerine ait fazla özellik denetimlerini gösterme.", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Dizin imzaları olmayan nesneler için dizin oluştururken noImplicitAny hatalarını gösterme.", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Dizin imzası olmayan nesnelerin dizinini oluştururken 'noImplicitAny' hatalarını gizle.", - "Switch_each_misused_0_to_1_95138": "Yanlış kullanılan tüm '{0}' öğelerini '{1}' olarak değiştir", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Geri çağırmaları eşzamanlı olarak çağırın ve özyinelemeli izlemeyi yerel olarak desteklemeyen platformlardaki dizin izleyicilerinin durumunu güncelleştirin.", - "Syntax_Colon_0_6023": "Söz dizimi: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' etiketi en az '{1}' bağımsız değişken bekliyor, ancak '{2}' JSX fabrikası en fazla '{3}' tane sağlıyor.", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "İsteğe bağlı bir zincirde etiketli şablon ifadelerine izin verilmiyor.", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Hedef yalnızca {0} öğeye izin veriyor ancak kaynakta daha fazlası olabilir.", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Hedef {0} öğe gerektiriyor ancak kaynakta daha az sayıda öğe olabilir.", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Hedef imza çok az bağımsız değişken sağlıyor. {0} veya daha fazla bekleniyordu ancak {1} alındı.", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' değiştiricisi yalnızca TypeScript dosyalarında kullanılabilir.", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' işleci, 'symbol' türüne uygulanamaz.", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' işlecine boole türü için izin verilmez. Bunun yerine '{1}' kullanmayı göz önünde bulundurun.", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Asenkron bir yineleyicinin '{0}' özelliği bir metot olmalıdır.", - "The_0_property_of_an_iterator_must_be_a_method_2767": "Yineleyicinin '{0}' özelliği bir metot olmalıdır.", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' türü başka çok az sayıda türe atanabilir. Bunun yerine 'any' türünü mü kullanmak istemiştiniz?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) bayrağı ve Unicode Kümeleri (v) bayrağı aynı anda ayarlanamaz.", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvurulamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' nesnesine ES5'teki asenkron bir işlev veya metotta başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' deyiminin gövdesi boş deyim olamaz.", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Çağrı, bu uygulamada başarılı olabilirdi, ancak aşırı yüklemelerin uygulama imzaları dışarıdan görünmüyor.", - "The_character_set_of_the_input_files_6163": "Giriş dosyalarının karakter kümesi.", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Kapsayıcı ok işlevi, 'this' öğesinin genel değerini yakalar.", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "İçeren işlev veya modül gövdesi, denetim akışı analizi için çok büyük.", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Geçerli dosya bir CommonJS modülüdür ve en üst düzeyde 'await'i kullanamaz.", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Geçerli dosya, içe aktarma işlemlerinin 'require' çağrıları üreteceği bir CommonJS modülüdür; ancak başvurulan dosya bir ECMAScript modülüdür ve 'require' ile içe aktarılamaz. Bunun yerine dinamik bir 'import(\"{0}\")' çağrısı yazmayı deneyin.", - "The_current_host_does_not_support_the_0_option_5001": "Mevcut ana bilgisayar '{0}' seçeneğini desteklemiyor.", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Büyük olasılıkla kullanmayı amaçladığınız '{0}' bildirimi burada tanımlanır", - "The_declaration_was_marked_as_deprecated_here_2798": "Bildirim burada kullanım dışı olarak işaretlendi.", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Beklenen tür, burada '{1}' türünde bildirilen '{0}' özelliğinden geliyor", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Beklenen tür bu imzanın dönüş türünden geliyor.", - "The_expected_type_comes_from_this_index_signature_6501": "Beklenen tür bu dizin imzasından geliyor.", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Bir dışarı aktarma ataması ifadesi, çevresel bağlamda bir tanımlayıcı veya tam ad olmalıdır.", - "The_file_is_in_the_program_because_Colon_1430": "Dosya, şu nedenle programın içinde:", - "The_files_list_in_config_file_0_is_empty_18002": "'{0}' yapılandırma dosyasındaki 'dosyalar' listesi boş.", - "The_first_export_default_is_here_2752": "İlk dışarı aktarma varsayılanı buradadır.", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise'in 'then' metodunun ilk parametresi, bir geri arama parametresi olmalıdır.", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "'JSX.{0}' genel türü birden fazla özelliğe sahip olamaz.", - "The_implementation_signature_is_declared_here_2750": "Uygulama imzası burada bildirilir.", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "CommonJS çıkışında oluşturulacak dosyalarda 'import.meta' meta özelliğine izin verilmiyor.", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "\"import.meta\" meta özelliğine yalnızca \"--module\" seçeneği \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", 'node20' veya \"nodenext\" olduğunda izin verilir.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' öğesinin çıkarsanan türü, '{1}' başvurusu olmadan adlandırılamaz. Bu büyük olasılıkla taşınabilir değildir. Tür ek açıklaması gereklidir.", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Çıkarsanan '{0}' türü, önemsiz olarak seri hale getirilemeyen döngüsel yapıya sahip bir türe başvurur. Tür ek açıklaması gerekir.", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Çıkarsanan '{0}' türü, erişilemeyen bir '{1}' türüne başvuruyor. Tür ek açıklaması gereklidir.", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Bu düğümün çıkarsanan türü, derleyicinin seri hale getireceği maksimum uzunluğu aşıyor. Açık tür ek açıklaması gerekiyor.", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' bildiriminin başlatıcısı ya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' bildiriminin başlatıcısı ya '[Symbol.asyncDispose]()' veya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "'{1}' özelliği birden çok destekçide bulunduğundan ve bazılarında özel olduğundan, '{0}' kesişimi 'never' değerine düşürüldü.", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "'{1}' özelliği bazı bileşenlerde çakışan türlere sahip olduğundan '{0}' kesişimi 'never' değerine düşürüldü.", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' anahtar sözcüğü, yalnızca derleyicinin sağladığı iç türleri bildirmek için kullanılabilir.", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "JSX parçalarının 'jsxFactory' derleyici seçeneği ile kullanılabilmesi için 'jsxFragmentFactory' derleme seçeneği belirtilmelidir.", - "The_last_overload_gave_the_following_error_2770": "Son aşırı yükleme aşağıdaki hatayı verdi.", - "The_last_overload_is_declared_here_2771": "Son aşırı yükleme burada bildirilir.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' deyiminin sol tarafı yok etme deseni olamaz.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ifadesinin sol tarafı 'using' bildirimi olamaz.", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ifadesinin sol tarafı 'await using' bildirimi olamaz.", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' deyiminin sol tarafı 'string' veya 'any' türünde olmalıdır.", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' deyiminin sol tarafı, asenkron olamaz.", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Aritmetik işlemin sol tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Atama ifadesinin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Atama ifadesinin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Bir 'instanceof' ifadesinin sol tarafı, sağ tarafın '[Symbol.hasInstance]' metodunun ilk bağımsız değişkenine atanabilir olmalıdır.", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' ifadesinin sol tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır.", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Kullanıcıya ileti görüntülenirken kullanılacak yerel ayar (örn. 'tr-tr')", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules altında arama yapmak ve JavaScript dosyalarını yüklemek için en yüksek bağımlılık derinliği.", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' operatörünün işleneni özel bir tanımlayıcı olamaz.", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' operatörünün işleneni, salt okunur bir özellik olamaz.", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' operatörünün işleneni, bir özellik başvurusu olmalıdır.", - "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' operatörünün işleneni isteğe bağlı olmalıdır.", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Artırma veya eksiltme operatörünün işleneni, isteğe bağlı bir özellik erişimi olamaz.", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Artırma veya eksiltme operatörünün işleneni, bir değişken veya özellik erişimi olmalıdır.", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Ayrıştırıcı, buradaki '{0}' belirteciyle eşleştirmek için bir '{1}' bulmayı bekliyordu.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' dışa aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleyici seçeneğini sağlayın.", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' içe aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleme seçeneğini sağlayın.", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "'{0}' özelliği aynı yazımı içeren başka bir özel tanımlayıcı tarafından gölgelendiğinden bu sınıf içindeki '{1}' türü üzerinde bu özelliğe erişilemiyor.", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Parametre dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Özellik dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zaman uyumsuz bir işlevin dönüş türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zaman uyumsuz bir işlevin ya da metodun döndürme türü, genel Promise türü olmalıdır.", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Asenkron bir işlevin ya da metodun dönüş türü, genel Promise türü olmalıdır. 'Promise<{0}>' yazmak mı istediniz?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' deyiminin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır ancak burada '{0}' türüne sahip.", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Aritmetik işlemin sağ tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' ifadesinin sağ tarafı ya 'any' türünde, bir sınıf, işlev veya 'Function' arayüz türüne atanabilir başka bir tür ya da 'Symbol.hasInstance' metoduna sahip bir nesne türü olmalıdır.", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' ifadesinin sağ tarafı bir örnek oluşturma ifadesi olmamalıdır.", - "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' dosyasının kök değeri bir nesne olmalıdır.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör {0} bekliyor.", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör en azından {0} bekliyor.", - "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' için gölgeleme bildirimi burada tanımlanır", - "The_signature_0_of_1_is_deprecated_6387": "'{1}' öğesinin '{0}' imzası kullanım dışı bırakıldı.", - "The_specified_path_does_not_exist_Colon_0_5058": "Belirtilen yol yok: '{0}'.", - "The_tag_was_first_specified_here_8034": "Etiket ilk olarak burada belirtildi.", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Nesne REST atamasının hedefi, isteğe bağlı bir özellik erişimi olamaz.", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Nesne geri kalan özellik atamasının hedefi, bir değişken veya özellik erişimi olmalıdır.", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "'{0}' türünün 'this' bağlamı, metodun '{1}' türündeki 'this' değerine atanamaz.", - "The_this_types_of_each_signature_are_incompatible_2685": "İmzaların 'this' türleri uyumsuz.", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' türü 'readonly' olduğundan değiştirilebilir '{1}' türüne atanamıyor.", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Dışarı aktarma deyimindeki 'dışarı aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir dışarı aktarma üzerinde kullanılamaz.", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "İçeri aktarma deyimindeki 'içeri aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir içeri aktarma üzerinde kullanılamaz.", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "'{0}' özelliği seri hale getirilemediğinden bu düğüm türü seri hale getirilemiyor.", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Asenkron yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip bir tür için promise olmalıdır.", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Bir yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip olmalıdır.", - "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' türleri bu türler arasında uyumsuz.", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' tarafından döndürülen türler, bu türler arasında uyumsuz.", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "'{0}' değeri burada kullanılamaz.", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ifadesi desteklenmiyor. 'with' bloklarındaki tüm simgeler 'any' türüne sahip olacaktır.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' konumunda türler var, ancak bu sonuç geçerli 'moduleResolution' ayarınız altında çözümlenemiyor. 'node16', 'nodenext' veya 'bundler' öğesine güncelleştirmeyi düşünün.", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' konumunda türler var ancak package.json \"exports\" dikkate alındığında bu sonuç çözümlenemedi. '{1}' kitaplığının package.json dosyasını veya türlerini güncelleştirmesi gerekiyor olabilir.", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Bu normal ifadede '{0}' adlı yakalama grubu yok.", - "There_is_nothing_available_for_repetition_1507": "Yineleme için kullanılabilecek bir şey yok.", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Bu JSX etiketi '{0}' öğesinin kapsamda olmasını gerektiriyor, ancak bulunamadı.", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Bu JSX etiketi, '{0}' modül yolunun mevcut olmasını gerektiriyor, ancak hiçbiri bulunamadı. Uygun paket için türlerin yüklü olduğundan emin olun.", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Bu JSX etiketinin '{0}' özelliği, '{1}' türünde tek bir alt öğe bekliyor ancak birden çok alt öğe sağlandı.", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Bu JSX etiketinin '{0}' özelliği, birden çok alt öğe gerektiren '{1}' türünü bekliyor ancak yalnızca tek bir alt öğe sağlandı.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca yakalama grupları yok.", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca {0} yakalama grubu var.", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Bu ikili ifade hiçbir zaman boş değerli değildir. Parantezler mi eksik?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Bu karakter düzenli bir ifadede kaçış işareti ile kullanılamaz.", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' ve '{1}' türlerinde çakışma olmadığından bu karşılaştırma yanlışlıkla yapılmış gibi görünüyor.", - "This_condition_will_always_return_0_2845": "Bu koşul her zaman '{0}' döndürür.", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript nesneleri değer göre değil başvuruya göre karşılaştırdığından bu koşul her zaman '{0}' değerini döndürür.", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Bu '{0}' her zaman tanımlandığı için bu koşul her zaman doğru olacaktır.", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Bu oluşturucu işlevi bir sınıf bildirimine dönüştürülebilir.", - "This_expression_is_always_nullish_2871": "Bu ifade her zaman boş değerlidir.", - "This_expression_is_never_nullish_2881": "Bu ifade hiçbir zaman boş gibi değildir.", - "This_expression_is_not_callable_2349": "Bu ifade çağrılabilir değil.", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Bu ifade 'get' erişimcisi olduğundan çağrılamaz. Bunu '()' olmadan mı kullanmak istiyorsunuz?", - "This_expression_is_not_constructable_2351": "Bu ifade oluşturulabilir değil.", - "This_file_already_has_a_default_export_95130": "Bu dosyanın zaten varsayılan bir dışarı aktarması var", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Başka bir projeye çözümlendiğinden ve projelerin çıkış dosyaları arasındaki göreli yol, giriş dosyaları arasındaki göreli yol ile aynı olmadığından, bu içeri aktarma yolunun yeniden yazılması güvenli değildir.", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Bu içeri aktarma, giriş TypeScript dosyasına çözümlemek için bir '{0}' uzantısı kullanıyor, ancak göreli bir yol olmadığından yayın sırasında yeniden yazılmayacak.", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Bu, genişletilmekte olan bildirimdir. Genişleten bildirimi aynı dosyaya taşımayı düşünün.", - "This_kind_of_expression_is_always_falsy_2873": "Bu ifade türü her zaman yanlıştır.", - "This_kind_of_expression_is_always_truthy_2872": "Bu ifade türü her zaman doğrudur.", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "Bu, asenkron bir işleve dönüştürülebilir.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Bu üye, '{0}' temel sınıfında bildirilmediğinden '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' etiketi olan bir JSDoc yorumuna sahip olamaz. '{1}' öğesini mi kastettiniz?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Kapsayan sınıfı '{0}' başka bir sınıfı genişletmediğinden, bu üye '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ad dinamik olduğundan bu üye '@override' etiketi içeren bir JSDoc yorumuna sahip olamaz.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Bu üye '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz.", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz. '{1}' öğesini mi kastettiniz?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Kapsayan '{0}' sınıfı başka bir sınıfı genişletmediğinden bu üye 'override' değiştiricisine sahip olamaz.", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Adı dinamik olduğundan bu üyenin 'override' değiştiricisi olamaz.", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu üyenin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Bu üye, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Bu üye, '{0}' temel sınıfında bildirilen soyut bir metodu geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Bu modüle yalnızca '{0}' bayrağını açıp modülün varsayılan dışarı aktarma işlemine başvurarak ECMAScript içeri/dışarı aktarma işlemleri ile başvurulabilir.", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Bu modül, 'export =' ile bildirildi ve yalnızca '{0}' bayrağı kullanılırken varsayılan bir içeri aktarmayla kullanılabilir.", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Bu işlem basitleştirilebilir. Bu vardiya `{0} {1} {2}` ile aynı.", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Bu aşırı yükleme, dönüş türü ek açıklaması içermediğinden '{0}' türünü örtük olarak döndürür.", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Bu aşırı yükleme imzası, uygulama imzasıyla uyumlu değil.", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Bu parametreye 'use strict' yönergesi ile izin verilmiyor.", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu parametre özelliğinin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Bu parametre özelliği, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından bir 'override' değiştiricisi içermelidir.", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Bu normal ifade bayrağı bir alt örüntü içinde değiştirilemez.", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Bu normal ifade bayrağı, yalnızca '{0}' veya üzeri hedeflenirken kullanılabilir.", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Bu göreli içeri aktarma yolu bir dosya adı gibi görünse de aslında \"{0}\" olarak çözümlendiğinden yolun yeniden yazılması güvenli değildir.", - "This_spread_always_overwrites_this_property_2785": "Bu yayılma her zaman bu özelliğin üzerine yazar.", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly' etkinleştirildiğinde bu söz dizimi kullanılamaz.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Sonuna virgül veya açık kısıtlama ekleyin.", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Bunun yerine `as` ifadesi kullanın.", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Bu söz dizimi, içeri aktarılan bir yardımcı gerektiriyor ancak '{0}' modülü bulunamıyor.", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Bu söz dizimi, '{0}' içinde bulunmayan '{1}' adlı içeri aktarılmış bir yardımcı gerektirir. '{0}' sürümünüzü yükseltmeyi deneyin.", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Bu söz dizimi, '{0}' içindeki yardımcı ile uyumlu olmayan, {2} parametreye sahip '{1}' adlı içeri aktarılan yardımcıyı gerektiriyor. '{0}' sürümünüzü yükseltmeyi düşünün.", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "Bu tür parametresinin bir `extends {0}` kısıtlamasına ihtiyacı olabilir.", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "'import' çağrısının bu kullanımı geçersiz. 'import()' çağrıları yazılabilir ancak ayraç içermeleri gerekir ve tür bağımsız değişkenleri içeremezler.", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, '{0}' dizinine `\"type\": \"module\"` alanı ekleyin.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya '{1}' dizinine ''type': 'module'' alanı ekleyin.", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Üst düzey \"await\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Üst düzey \"await using\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts dosyalarındaki üst düzey bildirimler bir 'declare' veya 'export' değiştiricisi ile başlamalıdır.", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Üst düzey \"for await\" döngülerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", - "Trailing_comma_not_allowed_1009": "Sona eklenen virgüle izin verilmez.", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Her dosyayı ayrı bir modül olarak derleyin ('ts.transpileModule' gibi).", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Varsa `npm i --save-dev @types/{1}` deneyin veya `declare module '{0}';` deyimini içeren yeni bir bildirim (.d.ts) dosyası ekleyin", - "Trying_other_entries_in_rootDirs_6110": "'rootDirs' içindeki diğer girişler deneniyor.", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' alternatifi deneniyor, aday modül konumu: '{1}'.", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "'{1}' uzunluğundaki '{0}' demet türü, '{2}' dizininde öğe içermiyor.", - "Tuple_type_arguments_circularly_reference_themselves_4110": "Demet türü bağımsız değişkenleri döngüsel olarak kendisine başvuruyor.", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' türü yalnızca '--downlevelIteration' bayrağı kullanılarak veya '--target' için 'es2015' ya da üzeri kullanıldığında yinelenebilir.", - "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' türü, dizin türü olarak kullanılamaz.", - "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' türü, '{1}' türünü dizinlemek için kullanılamaz.", - "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' türü, '{1}' kısıtlamasını karşılamıyor.", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "'{0}' türü, beklenen '{1}' türünü karşılamıyor.", - "Type_0_has_no_call_signatures_2757": "'{0}' türünün çağrı imzası yok.", - "Type_0_has_no_construct_signatures_2761": "'{0}' türünün oluşturma imzası yok.", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' türü, '{1}' türüyle eşleşen dizin imzasına sahip değil.", - "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' türünün '{1}' türüyle ortak özelliği yok.", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "'{0}' türü, tür bağımsız değişkeni listesi için geçerli imzalar içermiyor.", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Tür '{0}' geneldir ve yalnızca okuma için dizini oluşturulabilir.", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2} ve diğer {3} özellik.", - "Type_0_is_not_a_constructor_function_type_2507": "'{0}' türü bir oluşturucu işlevi türü değil.", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "ES5 içindeki '{0}' türü, Promise ile uyumlu bir oluşturucu değerine başvurmadığından geçerli bir zaman uyumsuz işlev dönüş türü değil.", - "Type_0_is_not_an_array_type_2461": "'{0}' türü bir dizi türü değil.", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' türü, bir dizi türü veya dize türü değil.", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' türü, bir dizi türü veya dize türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "'{0}' türü, bir dizi türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", - "Type_0_is_not_assignable_to_type_1_2322": "'{0}' türü, '{1}' türüne atanamaz.", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' türü '{1}' türüne atanamaz. '{2}' mi demek istediniz?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' türü '{1}' türüne atanamaz. Bu ada sahip iki farklı tür mevcut, ancak bu türler birbiriyle ilişkisiz.", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Varyans ek açıklaması tarafından belirtildiği gibi '{0}' türü '{1}' türüne atanamaz.", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Hesaplanan sabit listesi üye değerleri gereğince, '{0}' türü '{1}' türüne atanamaz.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef türüne 'undefined' eklemeyi deneyin.", - "Type_0_is_not_comparable_to_type_1_2678": "'{0}' türü '{1}' türüyle karşılaştırılamaz.", - "Type_0_is_not_generic_2315": "'{0}' türü genel değil.", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "'{0}' tipi, 'in' operatörünün doğru işleneni olarak izin verilmeyen temel bir değeri temsil edebilir.", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "'{0}' türünün, zaman uyumsuz bir yineleyici döndüren bir '[Symbol.asyncIterator]()' metoduna sahip olması gerekir.", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' türünün, bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip olması gerekir.", - "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' türü, '{1}' imzası için eşleşme sağlamıyor.", - "Type_0_recursively_references_itself_as_a_base_type_2310": "'{0}' türü, öz yinelemeli şekilde kendine temel tür olarak başvuruyor.", - "Type_Checking_6248": "Tür Denetlemesi", - "Type_alias_0_circularly_references_itself_2456": "'{0}' tür diğer adı, döngüsel olarak kendine başvuruyor.", - "Type_alias_must_be_given_a_name_1439": "Tür takma adına bir ad verilmesi gerekir.", - "Type_alias_name_cannot_be_0_2457": "Tür diğer adı '{0}' olamaz.", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Tür diğer adları, yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Tür ek açıklaması, oluşturucu bildiriminde görüntülenemez.", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Tür ek açıklamaları yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_argument_expected_1140": "Tür bağımsız değişkeni bekleniyor.", - "Type_argument_list_cannot_be_empty_1099": "Tür bağımsız değişkeni listesi boş olamaz.", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Tür bağımsız değişkenleri yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' için tür bağımsız değişkenleri, döngüsel olarak kendisine başvuruyor.", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Tür onaylama ifadeleri, yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Kaynaktaki {0} konumunda bulunan tür, hedefteki {1} konumunda bulunan türle uyumlu değil.", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Kaynaktaki {0} ile {1} arasındaki konumlarda bulunan tür, hedefteki {2} konumunda bulunan türle uyumlu değil.", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' özel adını içeren tür, --isolatedDeclarations ile kullanılamaz.", - "Type_declaration_files_to_be_included_in_compilation_6124": "Derlemeye eklenecek tür bildirim dosyaları.", - "Type_expected_1110": "Tür bekleniyor.", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Tür içe aktarma iddiaları, `import` veya `require`. değerine sahip tam olarak bir anahtara - `resolution-mode`’na sahip olmalıdır.", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Bir ECMAScript modülünün CommonJS modülünden tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tür örneği oluşturma işlemi, fazla ayrıntılı ve büyük olasılıkla sınırsız.", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Türe, kendi 'then' metodunun tamamlama geri aramasında doğrudan veya dolaylı olarak başvuruluyor.", - "Type_library_referenced_via_0_from_file_1_1402": "'{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "'{2}' paket kimliğine sahip '{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Hesaplanan özellik değerinin '{0}' türü, '{1}' türüne atanamıyor.", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "'{0}' örnek üyesi değişkeninin türü, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Bir 'yield*' işleneninin yinelenen öğelerinin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "'{0}' özelliğinin türü, '{1}' eşlenmiş türünde döngüsel olarak kendine başvuruyor.", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Zaman uyumsuz bir oluşturucudaki 'yield' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Bir ECMAScript modülünün bir CommonJS modülünden yalnızca tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Tür bu içeri aktarmadan kaynaklanıyor. Ad alanı stili içeri aktarma işlemi çağrılamaz ya da oluşturulamaz ve çalışma zamanında hataya neden olur. Bunun yerine varsayılan içeri aktarmayı kullanabilir veya burada içeri aktarma gerektirebilirsiniz.", - "Type_parameter_0_has_a_circular_constraint_2313": "'{0}' tür parametresi döngüsel bir kısıtlamaya sahip.", - "Type_parameter_0_has_a_circular_default_2716": "'{0}' tür parametresi döngüsel bir varsayılana sahip.", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Dışarı aktarılan sınıfın '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Dışarı aktarılan işlevin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Dışarı aktarılan arabirimin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Dışarı aktarılmış eşlenen nesne türüne ait '{0}' tür parametresi, '{1}' özel adını kullanıyor.", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Dışarı aktarılan tür diğer adına ait '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Dışarı aktarılan arabirimdeki metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Dışarı aktarılan sınıftaki ortak metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Dışarı aktarılan sınıftaki ortak statik metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "Type_parameter_declaration_expected_1139": "Tür parametresi bildirimi bekleniyor.", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Tür parametresi bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Tür parametresi varsayılanları yalnızca önceden bildirilen tür parametrelerine başvurabilir.", - "Type_parameter_list_cannot_be_empty_1098": "Tür parametresi listesi boş olamaz.", - "Type_parameter_name_cannot_be_0_2368": "Tür parametresi adı '{0}' olamaz.", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Tür parametreleri, oluşturucu bildiriminde görüntülenemez.", - "Type_predicate_0_is_not_assignable_to_1_1226": "'{0}' tür koşulu, '{1}' öğesine atanamaz.", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Tür, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", - "Type_reference_directive_0_was_not_resolved_6120": "======== '{0}' tür başvuru yönergesi çözümlenmedi. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== '{0}' tür başvuru yönergesi '{1}' olarak başarıyla çözümlendi, birincil: {2}. ========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== '{0}' tür başvuru yönergesi '{2}' Paket Kimliğine sahip '{1}' olarak başarıyla çözümlendi, birincil: {3}. ========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Tür karşılama ifadeleri yalnızca TypeScript dosyalarında kullanılabilir.", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Türler, JavaScript dosyalarında dışarı aktarma bildirimlerinde görünemez.", - "Types_have_separate_declarations_of_a_private_property_0_2442": "Türler, '{0}' özel özelliğinin ayrı bildirimlerine sahip.", - "Types_of_construct_signatures_are_incompatible_2419": "Yapı imzalarının türleri uyumsuz.", - "Types_of_parameters_0_and_1_are_incompatible_2328": "'{0}' ve '{1}' parametre türleri uyumsuz.", - "Types_of_property_0_are_incompatible_2326": "'{0}' özellik türleri uyumsuz.", - "Unable_to_open_file_0_6050": "'{0}' dosyası açılamıyor.", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Bir ifade olarak çağrıldığında sınıf dekoratörünün imzası çözümlenemez.", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Bir ifade olarak çağrıldığında metot dekoratörünün imzası çözümlenemez.", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Bir ifade olarak çağrıldığında parametre dekoratörünün imzası çözümlenemez.", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Bir ifade olarak çağrıldığında özellik dekoratörünün imzası çözümlenemez.", - "Undetermined_character_escape_1513": "Belirlenmemiş karakter kaçışı.", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Beklenmeyen '{0}'. Ters eğik çizgiyle bundan kaçmak mı istediniz?", - "Unexpected_end_of_text_1126": "Beklenmeyen metin sonu.", - "Unexpected_keyword_or_identifier_1434": "Beklenmeyen anahtar kelime veya tanımlayıcı.", - "Unexpected_token_1012": "Beklenmeyen belirteç.", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Beklenmeyen belirteç. Bir oluşturucu, metot, erişimci veya özellik bekleniyordu.", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Beklenmeyen belirteç. Küme ayracı olmadan bir tür parametresi adı bekleniyordu.", - "Unexpected_token_Did_you_mean_or_gt_1382": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'>'}` veya `>`?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'}'}` veya `}`?", - "Unexpected_token_expected_1179": "Beklenmeyen belirteç. '{' bekleniyordu.", - "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode kaçış dizisi burada görünemez.", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode kaçış dizileri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode özellik değeri ifadeleri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", - "Unknown_Unicode_property_name_1524": "Bilinmeyen Unicode özelliği adı.", - "Unknown_Unicode_property_name_or_value_1529": "Bilinmeyen Unicode özelliği adı veya değeri.", - "Unknown_Unicode_property_value_1526": "Bilinmeyen Unicode özelliği değeri.", - "Unknown_build_option_0_5072": "Bilinmeyen '{0}' derleme seçeneği.", - "Unknown_build_option_0_Did_you_mean_1_5077": "Bilinmeyen '{0}' derleme seçeneği. Şunu mu demek istediniz: '{1}'?", - "Unknown_compiler_option_0_5023": "Bilinmeyen '{0}' derleyici seçeneği.", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "Bilinmeyen '{0}' derleyici seçeneği. Şunu mu demek istediniz: '{1}'?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Bilinmeyen anahtar sözcük veya tanımlayıcı. “{0}” mi demek istediniz?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "'Excludes' seçeneği bilinmiyor. 'Exclude' seçeneğini mi belirtmek istediniz?", - "Unknown_regular_expression_flag_1499": "Bilinmeyen normal ifade bayrağı.", - "Unknown_type_acquisition_option_0_17010": "Bilinmeyen '{0}' tür alımı seçeneği.", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Bilinmeyen '{0}' tür alma seçeneği. Şunu mu demek istediniz: '{1}'?", - "Unknown_watch_option_0_5078": "Bilinmeyen '{0}' izleme seçeneği.", - "Unknown_watch_option_0_Did_you_mean_1_5079": "Bilinmeyen '{0}' izleme seçeneği. Şunu mu demek istediniz: '{1}'?", - "Unreachable_code_detected_7027": "Erişilemeyen kod algılandı.", - "Unterminated_Unicode_escape_sequence_1199": "Sonlandırılmamış Unicode kaçış dizisi.", - "Unterminated_quoted_string_in_response_file_0_6045": "'{0}' yanıt dosyasında sonlandırılmamış alıntılanmış dize.", - "Unterminated_regular_expression_literal_1161": "Sonlandırılmamış normal ifade sabit değeri.", - "Unterminated_string_literal_1002": "Sonlandırılmamış dize sabit değeri.", - "Unterminated_template_literal_1160": "Sonlandırılmamış şablon sabit değeri.", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "Türü belirtilmemiş işlev çağrıları tür bağımsız değişkenlerini kabul etmeyebilir.", - "Unused_label_7028": "Kullanılmayan etiket.", - "Unused_ts_expect_error_directive_2578": "Kullanılmayan '@ts-expect-error' yönergesi.", - "Update_import_from_0_90058": "\"{0}\" kaynağından içeri aktarmayı güncelleştir", - "Update_modifiers_of_0_90061": "'{0}' değiştiricilerini güncelleştirin", - "Updating_output_timestamps_of_project_0_6359": "'{0}' projesinin çıkış zaman damgaları güncelleştiriliyor...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' projesinin değiştirilmemiş çıkış zaman damgaları güncelleştiriliyor...", - "Use_0_95174": "`{0}` kullanın.", - "Use_0_instead_5106": "Bunun yerine '{0}' kullanın.", - "Use_Number_isNaN_in_all_conditions_95175": "Tüm koşullarda `Number.isNaN` kullanın.", - "Use_element_access_for_0_95145": "'{0}' için öğe erişimi kullan", - "Use_element_access_for_all_undeclared_properties_95146": "Tüm bildirilmemiş özellikler için öğe erişimi kullanın.", - "Use_import_type_95180": "'İçeri aktarma türü' kullanın", - "Use_synthetic_default_member_95016": "Yapay 'default' üyesini kullanın.", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Paket içe aktarmalarını çözümlerken package.json 'exports' alanını kullanın.", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "İçeri aktarmaları çözümlerken package.json dosyasındaki 'imports' alanını kullanın.", - "Use_type_0_95181": "'type {0}' kullanın", - "Using_0_subpath_1_with_target_2_6404": "Hedef '{2}' ile '{0}' alt yol '{1}' kullanılıyor.", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX parçalarının kullanımı '{0}' parça fabrikasının kapsamda olmasını gerektiriyor, ancak bulunamadı.", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' deyiminde dize kullanma yalnızca ECMAScript 5 veya üzerinde desteklenir.", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build kullanarak -b, tsc’nin derleyici yerine derleme düzenleyici gibi davranmasına yol açar. Bu, kompozit projeler oluşturmayı tetiklemek için kullanılır. Daha fazla bilgi edinmek için bkz. {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "'{0}' proje başvurusu yeniden yönlendirmesinin derleyici seçenekleri kullanılıyor.", - "VERSION_6036": "SÜRÜM", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' türünün değeri ile '{1}' türü arasında hiç ortak özellik yok. Bunun yerine çağrı yapmak mı istediniz?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "'{0}' türündeki değeri çağrılabilir değil. 'new' öğesini mi eklemek istemiştiniz?", - "Variable_0_implicitly_has_an_1_type_7005": "'{0}' değişkeni örtük olarak '{1}' türüne sahip.", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "'{0}' değişkeni örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "'{0}' değişkeni bazı konumlarda örtük olarak '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "'{0}' değişkeni, türünün belirlenemeyeceği bazı konumlarda örtülü olarak '{1}' türünü içeriyor.", - "Variable_0_is_used_before_being_assigned_2454": "'{0}' değişkeni atanmadan önce kullanılır.", - "Variable_declaration_expected_1134": "Değişken bildirimi bekleniyor.", - "Variable_declaration_list_cannot_be_empty_1123": "Değişken bildirim listesi boş olamaz.", - "Variable_declaration_not_allowed_at_this_location_1440": "Bu konumda değişken bildirimine izin verilmiyor.", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Değişkende --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Birden çok bildirimi olan değişkenler satır içine alınamaz.", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Kaynaktaki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe, hedefteki {1} konumunda bulunan öğeyle eşleşmiyor.", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Varyans ek açıklamaları yalnızca nesne, işlev, oluşturucu ve eşlenen türler için tür diğer adlarında desteklenir.", - "Version_0_6029": "Sürüm {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Geçiş bilgileri için https://aka.ms/ts6 adresini ziyaret edin.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Bu dosya hakkında daha fazla bilgi için https://aka.ms/tsconfig sayfasını ziyaret edin", - "WATCH_OPTIONS_6918": "İZLEME SEÇENEKLERİ", - "Watch_and_Build_Modes_6250": "İzleme ve Derleme Modları", - "Watch_input_files_6005": "Giriş dosyalarını izleyin.", - "Watch_option_0_requires_a_value_of_type_1_5080": "'{0}' izleme seçeneği, {1} türünde bir değer gerektiriyor.", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "'{0}' için bir türü yalnızca tüm parametre için buraya bir tür ekleyerek yazabiliriz.", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "İşlevler atanırken, parametrelerin ve dönüş değerlerinin alt tür ile uyumlu olduğundan emin olun.", - "When_type_checking_take_into_account_null_and_undefined_6699": "Tür denetimi sırasında 'null' ve 'undefined' öğelerini hesaba kat.", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Eski konsol çıktısının ekrandan kaldırılmak yerine izleme modunda tutulup tutulmayacağı.", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "Geçersiz tüm karakterleri bir ifade kapsayıcısında sarmalayın", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Tüm geçersiz dekoratör ifadelerini parantez içine alın", - "Wrap_all_object_literal_with_parentheses_95116": "Tüm nesne sabit değerini parantez içine alın", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX parçasındaki tüm ana öğesiz JSX'leri sarmala", - "Wrap_in_JSX_fragment_95120": "JSX parçasında sarmala", - "Wrap_in_parentheses_95194": "Parantez içine alın", - "Wrap_invalid_character_in_an_expression_container_95108": "Geçersiz karakteri bir ifade kapsayıcısında sarmalayın", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Nesne sabit değeri olması gereken aşağıdaki gövdeyi parantez içine alın", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Tüm derleyici seçenekleri hakkında bilgi edinmek için bkz. {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "Genel içeri aktarma aracılığıyla bir modülü yeniden adlandıramazsınız.", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Başka bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Standart TypeScript kitaplığında tanımlanmış öğeleri yeniden adlandıramazsınız.", - "You_cannot_rename_this_element_8000": "Bu öğeyi yeniden adlandıramazsınız.", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' burada dekoratör olarak kullanılmak için çok az bağımsız değişken kabul ediyor. Önce çağırıp '@{0}()' yazmak mı istediniz?", - "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' ve '{1}' dizin imzaları uyumsuz.", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' ve '{1}' işlemleri ayraç olmadan karıştırılamaz.", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' iki kez belirtildi. '{0}' özniteliğinin üzerine yazılacak.", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' bir türün sonunda geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' bir türün başlangıcında geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' yalnızca 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' yalnızca varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' yalnızca 'require' çağrısı kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' yalnızca 'require' çağrısı veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' yalnızca 'import {1} = require({2})' veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' yalnızca 'import {1} = require({2})' kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", - "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}', JSX bileşeni olarak kullanılamaz.", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}', 'export type' kullanılarak dışarı aktarıldığından değer olarak kullanılamaz.", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}', 'import type' kullanılarak içeri aktarıldığından değer olarak kullanılamaz.", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' bileşenleri, alt öğe olarak metin kabul etmez. JSX'teki metin 'string' türünde ancak beklenen '{1}' türü: '{2}'.", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' örneği, '{1}' ile ilişkili olmayan rastgele bir türle oluşturulabilir.", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' bildirimleri yalnızca bir bloğun içinde bildirilebilir.", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", - "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' bildirimlerinde bağlama desenleri olamaz.", - "_0_declarations_must_be_initialized_1155": "'{0}' bildirimleri başlatılmalıdır.", - "_0_expected_1005": "'{0}' bekleniyor.", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' bir dize türüne sahip ancak 'isolatedModules' etkinleştirildiğinde sözdizimsel olarak tanınabilir dize sözdizimi olmalıdır.", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' öğesinin dışarı aktarılan '{1}' adlı bir üyesi yok. '{2}' demek mi istediniz?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' örtük olarak bir '{1}' dönüş türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Bir tür ek açıklamasına sahip olmadığından ve kendi başlatıcısında doğrudan veya dolaylı olarak başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", - "_0_index_signatures_are_incompatible_2634": "'{0}' dizin imzaları uyumsuz.", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' dizin türü '{1}' ' {2}' dizin türüne '{3}' atanamaz.", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' temel elemandır ancak '{1}' sarmalayıcı nesnedir. Mümkün olduğunda '{0}' kullanmayı tercih edin.", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' bir tür ve JavaScript dosyalarında içeri aktarılamaz. Bir JSDoc türü ek açıklamasında '{1}' kullanın.", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' bir türdür ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}', '{1}' türünün kullanılmayan bir yeniden adlandırması. Tür ek açıklaması olarak mı kullanmak istediniz?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}', '{1}' türündeki kısıtlamaya atanabilir ancak '{1}' örneği, '{2}' kısıtlamasının farklı bir alt türüyle oluşturulabilir.", - "_0_is_automatically_exported_here_18044": "'{0}' burada otomatik olarak dışarı aktarılır.", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' bildirildi ancak değeri hiç okunmadı.", - "_0_is_declared_but_never_used_6196": "'{0}' bildirildi ancak hiç kullanılmadı.", - "_0_is_declared_here_2728": "'{0}' burada bildirilir.", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}', '{1}' sınıfında bir özellik olarak tanımlandı ancak burada, '{2}' içinde bir erişimci olarak geçersiz kılındı.", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}', '{1}' sınıfında bir erişimci olarak tanımlandı ancak burada, '{2}' içinde örnek özelliği olarak geçersiz kılındı.", - "_0_is_deprecated_6385": "'{0}' kullanım dışı bırakıldı.", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}', '{1}' anahtar sözcüğü için geçerli bir meta özellik değil. Bunu mu demek istediniz: '{2}'?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' öğesine parametre adı olarak izin verilmiyor.", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' öğesinin değişken bildirim adı olarak kullanılmasına izin verilmiyor.", - "_0_is_of_type_unknown_18046": "'{0}' 'unknown' türünde.", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' değerinin 'null' olması olasıdır.", - "_0_is_possibly_null_or_undefined_18049": "'{0}' değerinin 'null' veya 'undefined' olması olasıdır.", - "_0_is_possibly_undefined_18048": "'{0}' değerinin 'undefined' olması olasıdır.", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' öğesine kendi temel ifadesinde doğrudan veya dolaylı olarak başvuruluyor.", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' öğesine kendi tür ek açıklamasında doğrudan veya dolaylı olarak başvuruluyor.", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' birden çok kez belirtildiğinden bu kullanımın üzerine yazılacak.", - "_0_list_cannot_be_empty_1097": "'{0}' listesi boş olamaz.", - "_0_modifier_already_seen_1030": "'{0}' değiştiricisi zaten görüldü.", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' değiştiricisi yalnızca bir sınıfın, arabirimin veya tür diğer adının tür parametresinde görünebilir", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' değiştiricisi yalnızca bir işlevin, metodun veya sınıfın tür parametresinde görünebilir", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' değiştiricisi bir oluşturucu bildiriminde görüntülenemez.", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' değiştiricisi, bir modülde veya ad alanı öğesinde görünemez.", - "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' değiştiricisi bir parametrede görüntülenemez.", - "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' değiştiricisi, bir tür üyesinde görünemez.", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' değiştiricisi, bir tür parametresinde görünemez", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' değiştiricisi bir 'using' bildiriminde görünemez.", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' değiştiricisi bir 'await using' bildiriminde görünemez.", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' değiştiricisi, bir dizin imzasında görünemez.", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' değiştiricisi bu tip sınıf öğelerinde görünemez.", - "_0_modifier_cannot_be_used_here_1042": "'{0}' değiştiricisi burada kullanılamaz.", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' değiştiricisi bir çevresel bağlamda kullanılamaz.", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' değiştiricisi, '{1}' değiştiricisi ile birlikte kullanılamaz.", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' değiştiricisi özel bir tanımlayıcıyla birlikte kullanılamaz.", - "_0_modifier_must_precede_1_modifier_1029": "'{0}' değiştiricisi, '{1}' değiştiricisinden önce gelmelidir.", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' ifadesinden sonra küme ayraçları içine alınmış bir Unicode özellik değeri ifadesi gelmelidir.", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' açık bir tür ek açıklamasına ihtiyaç duyuyor.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir ad alanı olarak kullanılıyor.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor.", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor. '{0}' içinde '{1}' kullanmak mı istediniz?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' bir UMD genel öğesine başvuruyor, ancak geçerli dosya bir modül. Bunun yerine bir içeri aktarma eklemeyi deneyin.", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' bir değere başvuruyor ancak burada tür olarak kullanılıyor. 'typeof {0}' kullanmak mı istediniz?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkin olduğunda yalnızca türü yeniden dışarı aktarma kullanılarak yeniden dışarı aktarılmalıdır.", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}', config.json dosyasının 'compilerOptions' nesnesi içinden ayarlanmalıdır", - "_0_tag_already_specified_1223": "'{0}' etiketi zaten belirtildi.", - "_0_was_also_declared_here_6203": "'{0}' öğesi de burada bildirildi.", - "_0_was_exported_here_1377": "'{0}' burada dışarı aktarıldı.", - "_0_was_imported_here_1376": "'{0}' burada içeri aktarıldı.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' dönüş türüne sahip.", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' yield türüne sahip.", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' değiştiricisi yalnızca sınıf, metot veya özellik bildiriminde görünebilir.", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' değiştiricisi yalnızca özellik bildiriminde görünebilir.", - "and_here_6204": "ve buraya.", - "and_npm_install_D_types_Slashnode_6290": "ve npm install -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments' özellik başlatıcılarında veya sınıf statik başlatma bloklarında kullanılamaz.", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": İçe aktarma, dışa aktarma, import.meta, jsx (jsx: react-jsx ile) veya esm biçimi (modül: node16+ ile) içeren dosyaları modül olarak ele alın.", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' ifadeleri bir parametre başlatıcısında kullanılamaz.", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' öğesinin bu ifadenin türü üzerinde etkisi yoktur.", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Çevresel bağlamlarda 'await using' bildirimlerine izin verilmez.", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' bildirimlerine, bir blok içinde olmadıkça 'case' veya 'default' yan tümcelerinde izin verilmez.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ifadeleri bir sınıf statik bloğu içinde kullanılamaz.", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' seçeneği '{0}' olarak ayarlandı; göreli olmayan '{1}' modül adını çözümlemek için bu değer kullanılıyor.", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' ardından bir ASCII harfi gelmelidir.", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' yalnızca dosyanın başlangıcında kullanılabilir.", - "case_or_default_expected_1130": "'case' veya 'default' ifadeleri bekleniyor.", - "catch_or_finally_expected_1472": "'catch' veya 'finally' bekleniyor.", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' sabit listesi üyesi başlatıcısı, sonlu olmayan bir değer olarak hesaplandı.", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' sabit listesi üyesi başlatıcısı, izin verilmeyen 'NaN' değeri olarak hesaplandı.", - "const_enum_member_initializers_must_be_constant_expressions_2474": "const sabit listesi üye başlatıcıları sabit ifadeler olmalıdır.", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' sabit listeleri yalnızca bir özellikte, dizin erişim ifadelerinde, içeri aktarma bildiriminin veya dışarı aktarma atamasının sağ tarafında ya da tür sorgusunda kullanılabilir.", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor', parametre özellik adı olarak kullanılamaz.", - "constructor_is_a_reserved_word_18012": "'#constructor' ayrılmış bir sözcüktür.", - "default_Colon_6903": "varsayılan:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete', katı moddaki bir tanımlayıcıda çağrılamaz.", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' varsayılanı yeniden dışarı aktarmaz.", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' yalnızca TypeScript dosyalarında kullanılabilir.", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' değiştiricisi, her zaman görünür olduğu için çevresel modüllere ve modül genişletmelerine uygulanamaz.", - "extends_clause_already_seen_1172": "'extends' yan tümcesi zaten görüldü.", - "extends_clause_must_precede_implements_clause_1173": "'extends' yan tümcesi, 'implements' yan tümcesinden önce gelmelidir.", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Dışarı aktarılan '{0}' sınıfının 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Dışarı aktarılan sınıfın 'extends' yan tümcesi, '{0}' özel adına sahip veya bu adı kullanıyor.", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Dışarı aktarılan '{0}' arabiriminin 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", - "false_unless_checkJs_is_set_6932": "`checkJs` ayarlanmadıkça `false`", - "false_unless_composite_is_set_6906": "'Kompozit' ayarlanmamışsa 'false'", - "file_6025": "dosya", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' döngülerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' döngülerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' ve 'set' erişimcileri 'this' parametreleri bildiremez.", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'Files' ayarlanmışsa ‘[]', aksi takdirde `[\"**/*\"]`", - "implements_clause_already_seen_1175": "'implements' yan tümcesi zaten görüldü.", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' yan tümceleri yalnızca TypeScript dosyalarında kullanılabilir.", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' yalnızca TypeScript dosyalarında kullanılabilir.", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' bildirimlerine yalnızca bir koşullu türün 'extends' yan tümcesinde izin verilir.", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' ifadesinden sonra açılı ayraçlar içine alınmış bir yakalama grubu adı gelmelidir.", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ifadesi, 'let' veya 'const' bildirimlerinde ad olarak kullanılamaz.", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Yapı imzası bulunmayan 'new' ifadesi örtük olarak 'any' türüne sahip.", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]` ve belirtilmişse ek olarak `outDir`.", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module` değeri `nodenext` ise `nodenext`; `module` değeri `node16` veya `node18` ise `node16`; aksi takdirde `bundler`.", - "one_of_Colon_6900": "şunlardan biri:", - "one_or_more_Colon_6901": "bir veya daha fazla:", - "options_6024": "seçenekler", - "or_JSX_element_expected_1145": "'{' veya JSX öğesi bekleniyor.", - "or_expected_1144": "'{' veya ';' bekleniyor.", - "package_json_does_not_have_a_0_field_6100": "'package.json' geçerli bir '{0}' alanına sahip değil.", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json', '{0}' sürümüyle eşleşen bir 'typesVersions' girdisine sahip değil.", - "package_json_had_a_falsy_0_field_6220": "'package.json' hatalı bir '{0}' alanı içeriyordu.", - "package_json_has_0_field_1_that_references_2_6101": "'package.json', '{2}' öğesine başvuruda bulunan '{1}' adlı '{0}' alanını içeriyor.", - "package_json_has_a_peerDependencies_field_6281": "'package.json', 'peerDependencies' alanı içeriyor.", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json', geçerli bir semver aralığı olmayan '{0}' 'typesVersions' girdisine sahip.", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json', '{2}' modül adıyla eşleşen bir desen arayan '{1}' derleyici sürümüyle eşleşen '{0}' 'typesVersions' girdisine sahip.", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json', sürüme özgü yol eşlemeleri olan bir 'typesVersions' alanına sahip.", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "'{0}' package.json kapsamı '{1}' tanımlayıcısını açıkça null değerine eşliyor.", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "'{0}' package.json kapsamı, '{1}' tanımlayıcısının hedefi için geçersiz türe sahip", - "package_json_scope_0_has_no_imports_defined_6273": "'{0}' package.json kapsamında içeri aktarma tanımlanmadı.", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' seçeneği belirtildi, '{0}' modül adıyla eşleşen bir desen aranıyor.", - "q_is_only_available_inside_character_class_1511": "'\\q' yalnızca karakter sınıfının içinde kullanılabilir.", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' ardından küme ayraçları içine alınmış dize alternatifleri gelmelidir.", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' değiştiricisi yalnızca özellik bildiriminde ya da dizin imzasında görünebilir.", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' tür değiştiricisine yalnızca dizide ve demet sabit değeri türlerinde izin verilir.", - "require_call_may_be_converted_to_an_import_80005": "'require' çağrısı bir import olarak dönüştürülebilir.", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` yalnızca tür içeri aktarmaları için ayarlanabilir.", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode`, tür içe aktarma iddiaları için tek geçerli anahtardır.", - "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode`, `require` ya da `import` olmalıdır.", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' seçeneği ayarlandı, '{0}' göreli modül adını çözümlemek için bu değer kullanılıyor.", - "super_can_only_be_referenced_in_a_derived_class_2335": "'super' öğesine yalnızca bir türetilmiş sınıfta başvurulabilir.", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' değerine yalnızca türetilen sınıfların üyelerinde ya da nesne değişmez ifadelerinde başvurulabilir.", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' öğesine hesaplanan bir özellik adında başvurulamaz.", - "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' öğesine oluşturucu bağımsız değişkenlerinde başvurulamaz.", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Nesne değişmez ifadelerinde 'super' değerine yalnızca 'target' seçeneği 'ES2015' veya üzeri olarak ayarlandığında izin verilir.", - "super_may_not_use_type_arguments_2754": "'super', tür bağımsız değişkenlerini kullanamaz.", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Türetilmiş bir sınıfın oluşturucusunda 'super' özelliğine erişmeden önce 'super' çağrılmalıdır.", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Türetilen bir sınıfın oluşturucusundaki 'this' değerine erişilmeden önce 'super' çağrılmalıdır.", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' öğesinden sonra bir bağımsız değişken listesi veya üye erişimi gelmelidir.", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' özellik erişimine yalnızca bir oluşturucuda, üye işlevinde veya bir türetilmiş sınıfa ait üye erişimcisinde izin verilir.", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' öğesine hesaplanan bir özellik adında başvurulamaz.", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' öğesine bir modülde veya ad alanı gövdesinde başvurulamaz.", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' öğesine statik özellik başlatıcısında başvurulamaz.", - "this_cannot_be_referenced_in_current_location_2332": "'this' öğesine geçerli konumda başvurulamaz.", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this', tür ek açıklamasına sahip olmadığından örtük olarak 'any' türü içeriyor", - "true_for_ES2022_and_above_including_ESNext_6930": "ESNext dahil olmak üzere ES2022 ve üzeri için `true` olarak ayarlanır.", - "true_if_composite_false_otherwise_6909": "'Kompozit' ayarlanmışsa 'true', değilse 'false'", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'; 'node16', 'nodenext' veya 'bundler' olduğunda `true`, aksi halde `false`.", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: The TypeScript Derleyicisi", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json dosyası mevcut ancak komut satırında dosyalar belirtilmişse yüklenmeyecek. Bu hatayı atlamak için '--ignoreConfig' seçeneğini kullanın.", - "type_Colon_6902": "tür:", - "unique_symbol_types_are_not_allowed_here_1335": "Burada 'unique symbol' türlerine izin verilmez.", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' türlerine yalnızca bir değişken deyimindeki değişkenlerde izin verilir.", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' türleri, bağlama adına sahip bir değişken bildiriminde kullanılamaz.", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' yönergesi, basit olmayan parametre listesiyle birlikte kullanılamıyor.", - "use_strict_directive_used_here_1349": "'use strict' yönergesi burada kullanıldı.", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Çevresel bağlamlarda 'using' bildirimlerine izin verilmez.", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' bildirimlerine, bir blok içinde olmadıkça 'case' veya 'default' yan tümcelerinde izin verilmez.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' deyimlerine zaman uyumsuz bir işlev bloğunda izin verilmez.", - "with_statements_are_not_allowed_in_strict_mode_1101": "'with' deyimlerine katı modda izin verilmez.", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Kapsayan oluşturucusunda dönüş türü ek açıklaması olmadığından 'yield' ifadesi örtük olarak 'any' türü ile sonuçlanır.", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' ifadeleri bir parametre başlatıcısında kullanılamaz." -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "TÜM DERLEYİCİ SEÇENEKLERİ", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Bir '{0}' değiştiricisi, içeri aktarma bildirimiyle birlikte kullanılamaz.", + "A_0_parameter_must_be_the_first_parameter_2680": "Bir '{0}' parametresi ilk parametre olmalıdır.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' etiketi, '@typedef', '@callback' veya '@overload' etiketini takip edemez", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' açıklaması, birden çok '@type' etiketi içeremez.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' sabit değeri, özellik adı olarak kullanılamaz.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Bir büyük tamsayı sabit değerinde üstel gösterim kullanılamaz.", + "A_bigint_literal_must_be_an_integer_1353": "Büyük tamsayı sabit değeri bir tamsayı olmalıdır.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Uygulama imzasındaki bir bağlama deseni parametresi isteğe bağlı olamaz.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' deyimi yalnızca bir kapsayan yineleme veya switch deyimi içinde kullanılabilir.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' deyimi, yalnızca kapsayan deyimin etiketine atlayabilir.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Karakter sınıfı ayrılmış bir çift noktalayıcı içermemelidir. Ters eğik çizgiyle bundan kaçmak mı istediniz?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Bir karakter sınıfı aralığı başka bir karakter sınıfı tarafından sınırlanmamalıdır.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Bir sınıf, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı uygulayabilir.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Bir sınıf, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini uygulayabilir.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Bir sınıf '{0}' gibi ilkel bir türü genişletemez. Sınıflar yalnızca oluşturulabilen değerleri genişletebilir.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Bir sınıf '{0}' gibi ilkel bir türü uygulayamaz. Yalnızca diğer adlandırılmış nesne türlerini uygulayabilir.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' değiştiricisi olmayan bir sınıf bildiriminin adı olmalıdır.", + "A_class_member_cannot_have_the_0_keyword_1248": "Bir sınıf üyesi '{0}' anahtar kelimesini içeremez.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Hesaplanan özellik adında virgül ifadesine izin verilmez.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Hesaplanan özellik adı, kapsayan türündeki bir tür parametresine başvuramaz.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Sınıf özelliği bildirimindeki hesaplanan özellik adı, basit bir sabit değer türüne veya 'benzersiz sembol' türüne sahip olmalıdır.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Bir metot aşırı yüklemesindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Bir tür sabit değerindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Bir çevresel bağlamdaki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Bir arabirimdeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Hesaplanan özellik adı 'string', 'number', 'symbol' veya 'any' türünde olmalıdır.", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' onaylamasu yalnızca sabit listesi üyelerine veya dize, sayı, Boolean, dizi ya da nesne sabit değerlerine yönelik başvurulara uygulanabilir.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const numaralandırma üyesine yalnızca dize sabit değeri kullanılarak erişilebilir.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Çevresel bağlamdaki 'const' başlatıcısı bir dize veya sayısal sabit değer ya da sabit değer sabit listesi başvurusu olmalıdır.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Sınıfı 'null' değerini aşan bir oluşturucu 'super' çağrısını içeremez.", + "A_constructor_cannot_have_a_this_parameter_2681": "Bir oluşturucu 'this' parametresini içeremez.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' deyimi yalnızca bir kapsayan yineleme deyimi içinde kullanılabilir.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' deyimi, yalnızca kapsayan yineleme deyiminin etiketine atlayabilir.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Bir beyan dosyası 'import type' olmadan içe aktarılamaz. Bunun yerine '{0}' uygulama dosyasını mı içe aktarmak istediniz?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Çevresel bağlamda 'declare' değiştiricisi kullanılamaz.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekoratörler yalnızca metot uygulaması dekore edebilir; aşırı yüklemeleri dekore edemez.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' yan tümcesi, 'switch' deyiminde birden fazla kez bulunamaz.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Varsayılan dışarı aktarma, yalnızca ECMAScript stili bir modülde kullanılabilir.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Varsayılan dışarı aktarma, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Bu bağlamda '!' belirli atama onayına izin verilmez.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Yok etme bildiriminin bir başlatıcısı olmalıdır.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5'teki dinamik içe aktarma çağrısı 'Promise' oluşturucusu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "A_file_cannot_have_a_reference_to_itself_1006": "Bir dosya kendine başvuramaz.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' döndüren bir işlev, erişilebilir bir uç noktaya sahip olamaz.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'New' anahtar kelimesiyle çağrılan bir işlev, 'void' olan bir 'this' türüne sahip olamaz.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'undefined', 'void' veya 'any' olmayan bir işlev bir değer döndürmelidir.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Bir oluşturucu 'void' türündeki bir ek açıklamaya sahip olamaz.", + "A_get_accessor_cannot_have_parameters_1054": "Bir 'get' erişimcisi parametrelere sahip olamaz.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get erişimcisi en az ayarlayıcı kadar erişilebilir olmalıdır", + "A_get_accessor_must_return_a_value_2378": "'get' erişimcisinin bir değer döndürmesi gerekir.", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Etiketli demet öğesi türden sonra değil, addan sonra ve iki nokta işaretinden önce bir soru işareti ile isteğe bağlı olarak bildirilir.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Etiketlenmiş bir demet öğesi, tür yerine addan önce '...' ile bekleyen olarak bildirilir.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Eşlenmiş bir tür özellik veya metot bildiremez.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Sabit listesi bildirimindeki bir üye başlatıcısı, diğer sabit listelerinde tanımlanan üyeler dahil olmak üzere kendinden sonra bildirilen üyelere başvuramaz.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Mixin sınıfının 'any[]' türünde tek bir rest parametresi içeren bir oluşturucusu olmalıdır.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Soyut yapı imzası içeren bir tür değişkeninden genişleyen mixin sınıfı da 'soyut' olarak bildirilmelidir.", + "A_module_cannot_have_multiple_default_exports_2528": "Modül, birden fazla varsayılan dışarı aktarmaya sahip olamaz.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden farklı bir dosyada olamaz.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden önce gelemez.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Ad alanı bildirimine yalnızca bir ad alanının veya modülün en üst düzeyinde izin verilir.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' anahtar sözcüğü kullanılarak 'namespace' bildirimi bildirilmez. Lütfen bunun yerine 'namespace' anahtar sözcüğünü kullanın.", + "A_non_dry_build_would_build_project_0_6357": "-dry bayrağı kullanılmayan bir derleme '{0}' projesini derler", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry bayrağı kullanılmayan bir derleme şu dosyaları siler: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY dışı bir derleme, '{0}' projesinin çıkışı için zaman damgalarını güncelleştirir", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Parametre başlatıcısına yalnızca bir işlevde veya oluşturucu uygulamasında izin verilir.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Parametre özelliği, rest parametresi kullanılarak bildirilemez.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Parametre özelliğine yalnızca bir oluşturucu uygulamasında izin verilir.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Parametre özelliği, bağlama deseni kullanılarak bildirilemez.", + "A_promise_must_have_a_then_method_1059": "Promise'in bir 'then' metodu olmalıdır.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Bir 'unique symbol' türündeki sınıfın özelliği hem 'static' hem de 'readonly' olmalıdır.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Bir 'unique symbol' türündeki arabirimin veya tür sabit değerinin özelliği 'readonly' olmalıdır.", + "A_required_element_cannot_follow_an_optional_element_1257": "Gerekli öğe, isteğe bağlı öğeden sonra gelemez.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Gerekli parametre, isteğe bağlı parametreden sonra gelemez.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest öğesi bir bağlama deseni içeremez.", + "A_rest_element_cannot_follow_another_rest_element_1265": "REST öğesi başka bir REST öğesini izleyemez.", + "A_rest_element_cannot_have_a_property_name_2566": "Rest öğesinin özellik adı olamaz.", + "A_rest_element_cannot_have_an_initializer_1186": "rest öğesi bir başlatıcıya sahip olamaz.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest öğesi, yok etme desenindeki son öğe olmalıdır.", + "A_rest_element_type_must_be_an_array_type_2574": "REST öğesi dizi türünde olmalıdır.", + "A_rest_parameter_cannot_be_optional_1047": "rest parametresi isteğe bağlı olamaz.", + "A_rest_parameter_cannot_have_an_initializer_1048": "rest parametresi bir başlatıcıya sahip olamaz.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest parametresi, parametre listesinin sonunda bulunmalıdır.", + "A_rest_parameter_must_be_of_an_array_type_2370": "rest parametresi dizi türünde olmalıdır.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Bir rest parametresi veya bağlama deseninin sonunda virgül olamaz.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' deyimi, yalnızca bir işlev gövdesinde kullanılabilir.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'Return' deyimi bir sınıf statik bloğu içinde kullanılamaz.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "İçeri aktarmaları, 'baseUrl' ile ilgili arama konumlarına yeniden eşleyen bir girdi dizisi.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' erişimcisi, dönüş türü ek açıklamasına sahip olamaz.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' erişimcisi isteğe bağlı bir parametreye sahip olamaz.", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' erişimcisi rest parametresine sahip olamaz.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' erişimcisi tam olarak bir parametreye sahip olmalıdır.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' erişimci parametresinin bir başlatıcısı olamaz.", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Yayılma bağımsız değişkeni, bir demet türüne sahip olmalı ya da bir rest parametresine geçirilmelidir.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' çağrısı, başlatılmış özellikleri, parametre özelliklerini veya özel tanımlayıcıları içeren türetilmiş bir sınıfın oluşturucusu içinde kök düzeyinde bir deyim olmalıdır.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Bir türetilmiş sınıf başlatılmış özellikler, parametre özellikleri veya özel tanımlayıcılar içerdiğinde 'super' çağrısı, 'super' veya 'this' öğesine başvurmak için oluşturucudaki ilk deyim olmalıdır.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'This' tabanlı tür koruması, parametre tabanlı tür koruması ile uyumlu değildir.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' türü, yalnızca bir sınıfın veya arabirimin statik olmayan bir üyesinde kullanılabilir.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' etkinleştirildiğinde, CommonJS modülündeki değer bildirimlerinde üst düzey bir 'export' değiştiricisi kullanılamaz.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' dosyası şu konumda zaten tanımlanmış: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Demet üyesi hem isteğe bağlı hem de diğerleri olamaz.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Bir demet türünün negatif bir değerle dizini oluşturulamaz.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Üs ifadesinin sol tarafında tür onaylama ifadesine izin verilmez. İfadeyi parantez içine yazmayı düşünün.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Tür sabit değeri özelliği bir başlatıcıya sahip olamaz.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Yalnızca tür içeri aktarma işlemleri varsayılan bir içeri aktarmayı veya adlandırılan bağlamaları belirtebilir ancak ikisini birden belirtemez.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Bir tür koşulu, rest parametresine başvuru yapamaz.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Bir tür koşulu, bağlama desenindeki '{0}' öğesine başvuru yapamaz.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Bir tür koşuluna yalnızca işlevlere ve metotlara ait dönüş türü konumunda izin verilir.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Bir tür koşulunun türü, parametresinin türüne atanabilir olmalıdır.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "'isolatedModules' ve 'emitDecoratorMetadata' etkinleştirildiğinde, dekore edilmiş bir imzada başvurulan bir tür 'import type' veya bir namespace import ile içeri aktarılmalıdır.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Bir 'unique symbol' türündeki değişken 'const' olmalıdır.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Bir 'yield' ifadesine yalnızca oluşturucu gövdesinde izin verilir.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "'{1}' sınıfındaki '{0}' soyut metoduna super ifadesi ile erişilemez.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "'{1}' sınıfındaki '{0}' soyut özelliğine oluşturucuda erişilemiyor.", + "Accessibility_modifier_already_seen_1028": "Erişilebilirlik değiştiricisi zaten görüldü.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Erişimciler yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "İki erişimci de soyut veya soyut olmayan olmalıdır.", + "Add_0_to_unresolved_variable_90008": "Çözümlenmemiş değişkene '{0}.' ekle", + "Add_a_return_statement_95111": "Return deyimi ekleyin", + "Add_a_return_type_to_the_function_declaration_9031": "İşlev bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_function_expression_9030": "İşlev ifadesine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Get erişimcisi bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_method_9034": "Yönteme bir dönüş türü ekleyin", + "Add_a_type_annotation_to_the_parameter_0_9028": "{0} parametresine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_property_0_9029": "{0} özelliğine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_variable_0_9027": "{0} değişkenine bir tür ek açıklaması ekleyin.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ayarlanmış erişimci bildiriminin parametresine bir tür ekleyin.", + "Add_all_missing_async_modifiers_95041": "Tüm eksik 'async' değiştiricileri ekle", + "Add_all_missing_attributes_95168": "Tüm eksik öznitelikleri ekleyin", + "Add_all_missing_call_parentheses_95068": "Eksik tüm çağrı parantezlerini ekle", + "Add_all_missing_function_declarations_95157": "Eksik işlev bildirimlerinin tümünü ekle", + "Add_all_missing_imports_95064": "Tüm eksik içeri aktarmaları ekleyin", + "Add_all_missing_members_95022": "Tüm eksik üyeleri ekle", + "Add_all_missing_override_modifiers_95162": "Tüm eksik 'override' değiştiricilerini ekle", + "Add_all_missing_parameters_95190": "Tüm eksik parametreleri ekleyin", + "Add_all_missing_properties_95166": "Tüm eksik özellikleri ekleyin", + "Add_all_missing_return_statement_95114": "Tüm eksik return deyimlerini ekleyin", + "Add_all_missing_super_calls_95039": "Tüm eksik süper çağrıları ekle", + "Add_all_missing_type_annotations_90067": "Eksik olan tüm tür ek açıklamalarını ekleyin", + "Add_all_optional_parameters_95193": "Tüm isteğe bağlı parametreleri ekleyin", + "Add_annotation_of_type_0_90062": "'{0}' türünde ek açıklama ekleyin", + "Add_async_modifier_to_containing_function_90029": "İçeren işleve zaman uyumsuz değiştirici ekle", + "Add_await_95083": "'await' ekleyin", + "Add_await_to_initializer_for_0_95084": "'{0}' için başlatıcıya 'await' ekleyin", + "Add_await_to_initializers_95089": "Başlatıcılara 'await' ekleyin", + "Add_braces_to_arrow_function_95059": "Ok işlevine küme ayracı ekleyin", + "Add_const_to_all_unresolved_variables_95082": "Çözümlenmemiş tüm değişkenlere 'const' ekleyin", + "Add_const_to_unresolved_variable_95081": "Çözümlenmemiş değişkene 'const' ekleyin", + "Add_definite_assignment_assertion_to_property_0_95020": "'{0}' özelliğine belirli atama onayı ekle", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Tüm başlatılmamış özelliklere kesin atama onayları ekle", + "Add_export_to_make_this_file_into_a_module_95097": "Bu dosyayı bir modüle dönüştürmek için 'export {}' ekleyin", + "Add_extends_constraint_2211": "`extends` kısıtlaması ekleyin.", + "Add_extends_constraint_to_all_type_parameters_2212": "Tüm tür parametrelerine `extends` kısıtlaması ekleyin", + "Add_import_from_0_90057": "\"{0}\" kaynağından içeri aktarma ekle", + "Add_index_signature_for_property_0_90017": "'{0}' özelliği için dizin imzası ekle", + "Add_initializer_to_property_0_95019": "'{0}' özelliğine başlatıcı ekle", + "Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle", + "Add_missing_attributes_95167": "Eksik öznitelikleri ekleyin", + "Add_missing_call_parentheses_95067": "Eksik çağrı parantezlerini ekle", + "Add_missing_comma_for_object_member_completion_0_95187": "'{0}' nesne üyesinin tamamlanması için eksik virgülü ekleyin.", + "Add_missing_enum_member_0_95063": "Eksik '{0}' sabit listesi üyesini ekleyin", + "Add_missing_function_declaration_0_95156": "Eksik '{0}' işlev bildirimini ekle", + "Add_missing_new_operator_to_all_calls_95072": "Tüm çağrılara eksik 'new' işlecini ekleyin", + "Add_missing_new_operator_to_call_95071": "Çağrıya eksik 'new' işlecini ekleyin", + "Add_missing_parameter_to_0_95188": "'{0}' öğesine eksik parametreyi ekleyin", + "Add_missing_parameters_to_0_95189": "'{0}' öğesine eksik parametreleri ekleyin", + "Add_missing_properties_95165": "Eksik özellikleri ekleyin", + "Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle", + "Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle", + "Add_names_to_all_parameters_without_names_95073": "Adları olmayan tüm parametrelere ad ekleyin", + "Add_optional_parameter_to_0_95191": "'{0}' öğesine isteğe bağlı parametre ekleme", + "Add_optional_parameters_to_0_95192": "'{0}' öğesine isteğe bağlı parametreler ekle", + "Add_or_remove_braces_in_an_arrow_function_95058": "Ok işlevine küme ayracı ekle veya kaldır", + "Add_override_modifier_95160": "'override' değiştiricisi ekle", + "Add_parameter_name_90034": "Parametre adı ekleyin", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle", + "Add_resolution_mode_import_attribute_95196": "'resolution-mode' içeri aktarma özniteliği ekle", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "'resolution-mode' içeri aktarma özniteliğini, bunun gerekliği olduğu tüm yalnızca tür içeri aktarma işlemlerine ekle", + "Add_return_type_0_90063": "'{0}' dönüş tipi ekleyin", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Türü açık hale getirmek için bu ifadeye satisfies operatörü ve bir tür iddiası ekleyin (satisfies T as T).", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Satisfies operatörü ve '{0}' içeren satır içi tip iddiası ekleyin", + "Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle", + "Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "İndis kullanılarak erişildiğinde türe 'undefined' ekle.", + "Add_undefined_to_optional_property_type_95169": "İsteğe bağlı özellik türüne 'undefined' ekleyin", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Tüm başlatılmamış özelliklere tanımsız tür ekle", + "Add_undefined_type_to_property_0_95018": "'{0}' özelliğine 'undefined' türünü ekle", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Çakışmayan türler için 'unknown' dönüştürmesi ekleyin", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Çakışmayan türlerin tüm dönüştürmelerine 'unknown' ekleyin", + "Add_void_to_Promise_resolved_without_a_value_95143": "Değer olmadan çözümlenen Promise'e 'void' ekle", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Değer olmadan çözümlenen tüm Promise'lere 'void' ekle", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Bir tsconfig.json dosyası eklemek, hem TypeScript hem de JavaScript dosyaları içeren projeleri düzenlemenize yardımcı olur. Daha fazla bilgi edinmek için bkz. https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Tüm '{0}' bildirimleri, aynı kısıtlamalara sahip olmalıdır.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Tüm '{0}' bildirimleri aynı değiştiricilere sahip olmalıdır.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tüm '{0}' bildirimleri özdeş tür parametrelerine sahip olmalıdır.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Soyut metoda ait tüm bildirimler ardışık olmalıdır.", + "All_destructured_elements_are_unused_6198": "Yapısı bozulan öğelerin hiçbiri kullanılmıyor.", + "All_imports_in_import_declaration_are_unused_6192": "İçeri aktarma bildirimindeki hiçbir içeri aktarma kullanılmadı.", + "All_type_parameters_are_unused_6205": "Tüm tür parametreleri kullanılmıyor.", + "All_variables_are_unused_6199": "Hiçbir değişken kullanılmıyor.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript dosyalarının programınızın bir parçası olmasına izin verin. Bu dosyalardan hata almak için 'checkJs' seçeneğini kullanın.", + "Allow_accessing_UMD_globals_from_modules_6602": "Modüllerden UMD genel değişkenlerine erişmeye izin verin.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Bir modülün varsayılan dışarı aktarması olmadığında 'import x from y' öğesine izin verin.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib’den yardımcı işlevlerin her dosya başına eklenmesi yerine proje başına bir kez içeri aktarılmasına izin verin.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "İçe aktarma işlemlerinin TypeScript dosya uzantılarını içermesine izin verin. '--moduleResolution bundler' ve '--noEmit' veya '--emitDeclarationOnly' ayarını gerektirir.", + "Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Modüller çözümlenirken birden çok klasörün tek bir klasör olarak işlenmesine izin verin.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Zaten eklenmiş olan '{0}' dosya adı, '{1}' dosya adından yalnızca büyük/küçük harf yönünden farklıdır.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Çevresel modül bildirimi göreli modül adını belirtemez.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Çevresel modüller, diğer modüllerde veya ad alanlarında iç içe bulunamaz.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD modülü birden fazla ad atamasında sahip olamaz.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Soyut erişimcinin uygulaması olamaz.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Erişilebilirlik değiştiricisi özel bir tanımlayıcıyla kullanılamıyor.", + "An_accessor_cannot_have_type_parameters_1094": "Erişimci, tür parametrelerine sahip olamaz.", + "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' özelliği isteğe bağlı olarak bildirilemez.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Çevresel modül bildirimine yalnızca bir dosyadaki en üst düzeyde izin verilir.", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "'{0}' için bağımsız değişken sağlanmadı.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Bu bağlama deseniyle eşleşen bağımsız değişken sağlanmadı.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetik işlenen 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Ok işlevi 'this' parametresine sahip olamaz.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5'teki eşzamansız bir işlev veya yöntem, 'Promise' yapıcısını gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "An_async_iterator_must_have_a_next_method_2519": "Zaman uyumsuz yineleyicinin bir 'next()' metodu olmalıdır.", + "An_element_access_expression_should_take_an_argument_1011": "Bir öğe erişimi ifadesi bir bağımsız değişken almalıdır.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Sabit listesi üyesi özel bir tanımlayıcıyla adlandırılamaz.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Sabit listesi üyesi, sayısal bir ada sahip olamaz.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Sabit listesi üyesinin adından sonra bir ',', '=' veya '}' gelmelidir.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Bu bilgilerin genişletilmiş bir versiyonu, kullanılabilir tüm derleyici seçeneklerini görüntüler", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Dışarı aktarma ataması, dışarı aktarılmış diğer öğelere sahip bir modülde kullanılamaz.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Ad alanında dışarı aktarma ataması kullanılamaz.", + "An_export_assignment_cannot_have_modifiers_1120": "Dışarı aktarma ataması, değiştiricilere sahip olamaz.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Dışarı aktarma ataması, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Dışarı aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Dışarı aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", + "An_export_declaration_cannot_have_modifiers_1193": "Dışarı aktarma bildirimi, değiştiricilere sahip olamaz.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export default' gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'VerbatimModuleSyntax' etkinleştirildiğinde 'dışa aktarma varsayılanı' bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' türünde bir ifade doğruluk bakımından test edilemiyor.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Genişletilmiş Unicode kaçış değeri, 0x0 ve 0x10FFFF dahil olmak üzere bu değerler arasında olmalıdır.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Tanımlayıcı veya anahtar sözcük, sayısal bir sabit değerden hemen sonra gelemez.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uygulama, çevresel bağlamda bildirilemez.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "İçeri aktarma diğer adı, 'export type' kullanılarak dışarı aktarılan bir bildirime başvuramaz.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "İçeri aktarma diğer adı, 'import type' kullanılarak içeri aktarılan bir bildirime başvuramaz.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Bir içe aktarma takma adı, 'verbatimModuleSyntax' etkinleştirildiğinde bir türe veya yalnızca tür bildirimine çözümlenemez.", + "An_import_alias_cannot_use_import_type_1392": "İçeri aktarma diğer adı, 'import type' kullanamaz", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "İçeri aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "İçeri aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", + "An_import_declaration_cannot_have_modifiers_1191": "İçeri aktarma bildirimi, değiştiricilere sahip olamaz.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Bir içe aktarma yolu yalnızca 'allowImportingTsExtensions' etkinleştirildiğinde '{0}' uzantısıyla bitebilir.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Dizin imzası bir rest parametresine sahip olamaz.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Dizin imzasının sonunda virgül olamaz.", + "An_index_signature_must_have_a_type_annotation_1021": "Dizin imzası bir tür açıklamasına sahip olmalıdır.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Dizin imzası tam olarak bir parametreye sahip olmalıdır.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Dizin imzası parametresi, bir soru işareti içeremez.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Dizin imzası parametresi, bir erişilebilirlik değiştiricisine sahip olamaz.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Dizin imzası parametresi, bir başlatıcıya sahip olamaz.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Dizin imzası parametresi, bir tür ek açıklamasına sahip olmalıdır.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Dizin imzası parametre türü sabit değer veya genel tür olamaz. Bunun yerine eşlenen nesne türü kullanabilirsiniz.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Dizin imzası parametre türü 'dize', 'sayı', 'sembol' veya şablon sabit değeri olmalıdır.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Bir örnek oluşturma ifadesinin ardından özellik erişimi gelemez.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Bir arabirim, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı genişletebilir.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Arabirim, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini genişletebilir.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Bir arayüz '{0}' gibi ilkel bir türü genişletemez. Yalnızca diğer adlandırılmış nesne türlerini genişletebilir.", + "An_interface_property_cannot_have_an_initializer_1246": "Arabirim özelliği bir başlatıcıya sahip olamaz.", + "An_iterator_must_have_a_next_method_2489": "Bir yineleyici 'next()' metoduna sahip olmalıdır.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "JSX parçalarıyla @jsx pragması kullanılırken bir @jsxFrag pragması gerekir.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Nesne sabit değeri aynı ada sahip birden fazla get/set erişimcisine sahip olamaz.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Nesne sabit değerinin aynı ada sahip birden fazla özelliği olamaz.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Nesne sabit değeri, aynı ada sahip bir özellik ve erişimciye sahip olamaz.", + "An_object_member_cannot_be_declared_optional_1162": "Nesne üyesi, isteğe bağlı olarak bildirilemez.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Bir nesnenin '[Symbol.hasInstance]' yönteminin, bir 'instanceof' ifadesinin sağ tarafında kullanılabilmesi için bir boole değeri döndürmesi gereklidir.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "İsteğe bağlı bir zincir, özel tanımlayıcı içeremez.", + "An_optional_element_cannot_follow_a_rest_element_1266": "İsteğe bağlı bir öğe, REST öğesini izleyemez.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' öğesinin dış değeri bu kapsayıcı tarafından gölgelenir.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Aşırı yükleme imzası, bir oluşturucu olarak bildirilemez.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Üs ifadesinin sol tarafında '{0}' işlecine sahip bir tek terimli ifadeye izin verilmez. İfadeyi parantez içine yazmayı düşünün.", + "Annotate_everything_with_types_from_JSDoc_95043": "Her şeye JSDoc'tan türler ile not ekle", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Ad alanındaki expando fonksiyonunun özellik türlerine not ekleyin", + "Annotate_with_type_from_JSDoc_95009": "JSDoc türü ile not ekle", + "Another_export_default_is_here_2753": "Başka bir dışarı aktarma varsayılanını burada bulabilirsiniz.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Tek bir karakterden daha fazlasıyla eşleşebilecek herhangi bir Unicode özelliği, yalnızca Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tek bir karakterden fazlasıyla eşleşmesi muhtemel olan herhangi bir şey, negatif karakter sınıfı içinde geçersizdir.", + "Are_you_missing_a_semicolon_2734": "Noktalı virgülünüz eksik mi?", + "Argument_expression_expected_1135": "Bağımsız değişken ifadesi bekleniyor.", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' seçeneğinin bağımsız değişkeni {1} olmalıdır.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Dinamik içeri aktarmanın bağımsız değişkeni yayılma öğesi olamaz.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "'{0}' türündeki bağımsız değişken '{1}' türündeki parametreye atanamaz.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' türü bağımsız değişkeni 'exactOptionalPropertyTypes: true' ile '{1}' türündeki parametreye atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "'{0}' rest parametresinin bağımsız değişkenleri sağlanmadı.", + "Array_element_destructuring_pattern_expected_1181": "Dizi öğesi yok etme deseni bekleniyor.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Yayılma öğelerine sahip diziler --isolatedDeclarations ile çıkarsanamaz.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Onaylamalar, çağrı hedefindeki her adın açık bir tür ek açıklaması ile bildirilmesini gerektirir.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Onaylamalar, çağrı hedefinin bir tanımlayıcı veya tam ad olmasını gerektirir.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Özelliklerin işlevlere bildirilmeden atanması --isolatedDeclarations ile desteklenmez. Bu işleve atanan özellikler için açık bir bildirim ekleyin.", + "Asterisk_Slash_expected_1010": "'*/' bekleniyor.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "En az bir erişimcinin --isolatedDeclarations ile açık bir tür ek açıklamasına sahip olması gereklidir.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Genel kapsam genişletmeleri yalnızca dış modüllerde ya da çevresel modül bildirimlerinde doğrudan yuvalanabilir.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Genel kapsam genişletmeleri, zaten çevresel olan bir bağlamda göründükleri durumlar dışında 'declare' değiştiricisine sahip olmalıdır.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "'{0}' projesinde otomatik tür bulma etkinleştirildi. '{2}' önbellek konumu kullanılarak '{1}' modülü için ek çözümleme geçişi çalıştırılıyor.", + "BUILD_OPTIONS_6919": "DERLEME SEÇENEKLERİ", + "Backwards_Compatibility_6253": "Geriye Doğru Uyumluluk", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Temel sınıf ifadelerinde sınıf türü parametrelerine başvuruda bulunulamaz.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "'{0}' temel oluşturucu dönüş türü, statik olarak bilinen üyelere sahip bir nesne türü veya nesne türlerinin bir kesişimi değil.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Tüm temel oluşturucuların aynı dönüş türüne sahip olması gerekir.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Mutlak olmayan modül adlarını çözümlemek için kullanılan temel dizin.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020'den düşük değerler hedeflendiğinde büyük tamsayı sabit değerleri kullanılamıyor.", + "Binary_digit_expected_1177": "İkili sayı bekleniyor.", + "Binding_element_0_implicitly_has_an_1_type_7031": "'{0}' bağlama öğesi, örtük olarak '{1}' türü içeriyor.", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Blok kapsamlı değişken '{0}', bildirilmeden önce kullanıldı.", + "Build_a_composite_project_in_the_working_directory_6925": "Çalışma dizininde kompozit proje oluşturun.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Eskiyse, bir veya daha fazla projeyi ve bağımlılıklarını derleyin", + "Build_option_0_requires_a_value_of_type_1_5073": "'{0}' derleme seçeneği, {1} türünde bir değer gerektiriyor.", + "Building_project_0_6358": "'{0}' projesi derleniyor...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Yerleşik yineleyiciler, 'any' yerine 'undefined' 'TReturn' türü ile örnekleniyor.", + "COMMAND_LINE_FLAGS_6921": "KOMUT SATIRI BAYRAKLARI", + "COMMON_COMMANDS_6916": "ORTAK KOMUTLAR", + "COMMON_COMPILER_OPTIONS_6920": "ORTAK DERLEYİCİ SEÇENEKLERI", + "Call_decorator_expression_90028": "Dekoratör ifadesini çağır", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "'{0}' ve '{1}' çağrı imzası dönüş türleri uyumsuz.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dönüş türü ek açıklaması bulunmayan çağrı imzası, örtük olarak 'any' dönüş türüne sahip.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Bağımsız değişken içermeyen çağrı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", + "Call_target_does_not_contain_any_signatures_2346": "Çağrı hedefi imza içermiyor.", + "Can_only_convert_logical_AND_access_chains_95142": "Yalnızca mantıksal zincirler VE erişim zincirleri dönüştürülebilir", + "Can_only_convert_named_export_95164": "Yalnızca adı belirtilen dışarı aktarma dönüştürülebilir", + "Can_only_convert_property_with_modifier_95137": "Yalnızca değiştirici içeren özellik dönüştürülebilir", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Yalnızca dize birleştirmelerini ve dize değişmezlerini dönüştürebilir", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}' bir ad alanı değil tür olduğundan '{0}.{1}' erişimi sağlanamıyor. '{0}[\"{1}\"]' değerini belirterek '{0}' içindeki '{1}' özelliğinin türünü almak mı istediniz?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' etkinleştirildiğinde başka bir dosyadan '{0}' öğesine niteleme olmadan erişilemez. Bunun yerine '{2}' kullanın.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' etkinleştirildiğinde ortam sabit listelerine erişilemiyor.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' oluşturucu türüne '{1}' oluşturucu türü atanamaz.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Bir soyut oluşturucu türü, soyut olmayan bir oluşturucu türüne atanamaz.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Sınıf olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Sabit olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "İşlev olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Ad alanı olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Salt okunur bir özellik olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Sabit listesi olduğundan '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "İçeri aktarma olduğundan '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Değişken olmadığından '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "'{0}' özel metoduna atanamıyor. Özel metotlar yazılamaz.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' modülü, modül olmayan bir varlığa çözümlendiğinden genişletilemiyor.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modül olmayan bir varlığa çözümlendiğinden '{0}' modülü, değer dışarı aktarmalarıyla genişletilemiyor.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' bayrağı 'amd' veya 'system' olmadığı sürece '{0}' seçeneği kullanılarak modül derlenemez.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Bir soyut sınıfın örneği oluşturulamaz.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen kapsayan oluşturucu her zaman '{0}' gönderdiğinden yineleme temsili, değere atanamıyor.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}' dışarı aktarılamıyor. Bir modülden yalnızca yerel bildirimler dışarı aktarılabilir.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "'{0}' sınıfı genişletilemez. Sınıf oluşturucusu, özel olarak işaretlenmiş.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "'{0}' arabirimi genişletilemiyor. Bunun yerine 'implements' kullanmayı deneyin.", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Geçerli dizinde tsconfig.json dosyası bulunamıyor: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Belirtilen dizinde tsconfig.json dosyası bulunamıyor: '{0}'.", + "Cannot_find_global_type_0_2318": "'{0}' genel türü bulunamıyor.", + "Cannot_find_global_value_0_2468": "'{0}' genel değeri bulunamıyor.", + "Cannot_find_lib_definition_for_0_2726": "'{0}' için kitaplık tanımı bulunamıyor.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' için kitaplık tanımı bulunamıyor. Şunu mu demek istediniz: '{1}'?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' modülü bulunamıyor. Modülü '.json' uzantısıyla içeri aktarmak için '--resolveJsonModule' kullanmayı deneyin.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' modülü bulunamıyor. 'moduleResolution' seçeneğini 'nodenext' olarak ayarlamak veya 'paths' seçeneğine diğer adlar eklemek mi istediniz?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' modülü veya karşılık gelen tür bildirimleri bulunamıyor.", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "'{0}' yan etkili içe aktarma için modül veya tür bildirimleri bulunamadı.", + "Cannot_find_name_0_2304": "'{0}' adı bulunamıyor.", + "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' adı bulunamıyor. Bunu mu demek istediniz: '{1}'?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' adı bulunamıyor. 'this.{0}' örnek üyesini mi aradınız?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' adı bulunamıyor. '{1}.{0}' statik üyesini mi aradınız?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "'{0}' adı bulunamadı. Bunu zaman uyumsuz bir işleve mi yazmak istediniz?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? `npm i --save-dev @types/bun` deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? 'npm i --save-dev @types/bun' komutunu deneyin ve ardından tsconfig dosyanızdaki type alanına 'bun' ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki türler alanına 'jest' veya 'mocha' ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz gerekiyor mu? Şunu deneyin: `npm i --save-dev @types/jquery`. Ardından tsconfig dosyanızdaki türler alanına 'jquery' öğesini ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`. Ardından tsconfig dosyanızdaki türler alanına 'node' ekleyin.", + "Cannot_find_namespace_0_2503": "'{0}' ad alanı bulunamıyor.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Ad alanı '{0}' bulunamıyor. Bunu mu demek istediniz: '{1}'?", + "Cannot_find_parameter_0_1225": "'{0}' parametresi bulunamıyor.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Giriş dosyalarına ait ortak alt dizin yolu bulunamıyor.", + "Cannot_find_type_definition_file_for_0_2688": "'{0}' için tür tanımı dosyası bulunamıyor.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Tür bildirim dosyaları içeri aktarılamıyor. '{1}' yerine '{0}' dosyasını içeri aktarmanız önerilir.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Dış kapsamdaki '{0}' değişkeni, blok kapsamındaki '{1}' bildirimiyle aynı kapsamda başlatılamaz.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Muhtemelen 'null' olan bir nesne çağrılamıyor.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Muhtemelen 'null' veya 'undefined' olan bir nesne çağrılamıyor.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Muhtemelen 'undefined' olan bir nesne çağrılamıyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi bozma her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi yayılması her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen for-of her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_move_statements_to_the_selected_file_95183": "İfadeler seçilen dosyaya taşınamıyor", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Dosyaya taşınamıyor, seçili dosya geçersiz", + "Cannot_read_file_0_5083": "'{0}' dosyası okunamıyor.", + "Cannot_read_file_0_Colon_1_5012": "'{0}' dosyası okunamıyor: {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Blok kapsamlı değişken '{0}', yeniden bildirilemiyor.", + "Cannot_redeclare_exported_variable_0_2323": "Dışarı aktarılan '{0}' değişkeni yeniden bildirilemiyor.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Catch yan tümcesindeki '{0}' tanımlayıcısı yeniden bildirilemiyor.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Bir tür ek açıklamasında bir işlev çağrısı başlatılamıyor.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' bayrağı sağlanmazsa JSX kullanılamaz.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' etkinleştirildiğinde, yalnızca tür veya tür ad alanında 'export import' kullanılamaz.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' değeri 'none' olduğunda içeri aktarma, dışarı aktarma veya modül genişletme kullanılamaz.", + "Cannot_use_namespace_0_as_a_type_2709": "'{0}' ad alanı, tür olarak kullanılamaz.", + "Cannot_use_namespace_0_as_a_value_2708": "'{0}' ad alanı, değer olarak kullanılamaz.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "'This' ifadesi bir donatılmış sınıfın statik özellik başlatıcısında kullanılamaz.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "'{0}' dosyası, başvurulan '{1}' projesi tarafından oluşturulan '.tsbuildinfo' dosyasının üzerine yazacağından bu dosya yazılamıyor", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Birden fazla giriş dosyası tarafından üzerine yazılacağı için '{0}' dosyası yazılamıyor.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Giriş dosyasının üzerine yazacağı için '{0}' dosyası yazılamıyor.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch yan tümcesi değişkeni bir başlatıcıya sahip olamaz.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Belirtilmişse catch yan tümcesi değişken türü ek açıklaması 'any ' veya 'unknown' olmalıdır.", + "Change_0_to_1_90014": "'{0}' değerini '{1}' olarak değiştir", + "Change_all_extended_interfaces_to_implements_95038": "Tüm genişletilmiş arabirimleri 'implements' olarak değiştir", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Tüm jsdoc-style türlerini TypeScript olarak değiştir", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Tüm jsdoc-style türlerini TypeScript olarak değiştir (ve null yapılabilir türlere '| undefined' ekle)", + "Change_extends_to_implements_90003": "'extends' ifadesini 'implements' olarak değiştirin", + "Change_spelling_to_0_90022": "Yazımı '{0}' olarak değiştir", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Bildirilen ancak oluşturucuda ayarlanmamış sınıf özelliklerini denetleyin.", + "Check_side_effect_imports_6806": "Yan etki içeri aktarmalarını denetleyin.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' ve 'apply' yöntemlerinin bağımsız değişkenlerinin özgün işlevle eşleşip eşleşmediğini denetle.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' ön ekinin '{1}' - '{2}' için eşleşen en uzun ön ek olup olmadığı denetleniyor.", + "Circular_definition_of_import_alias_0_2303": "'{0}' içeri aktarma diğer adının döngüsel tanımı.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Yapılandırma çözümlenirken döngüsellik algılandı: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Döngüsellik bu konumdaki türden kaynaklanıyor.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "'{0}' sınıfı, '{1}' örnek üyesi erişimcisini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "'{0}' sınıfı, '{1}' örnek üyesi işlevini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi erişimcisi olarak tanımlar.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "'{0}' sınıfı, '{1}' örnek üyesi özelliğini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", + "Class_0_incorrectly_extends_base_class_1_2415": "'{0}' sınıfı, '{1}' temel sınıfını yanlış genişletiyor.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' sınıfı hatalı olarak '{1}' sınıfını uyguluyor. '{1}' sınıfını genişletip üyelerini bir alt sınıf olarak devralmak mı istiyordunuz?", + "Class_0_incorrectly_implements_interface_1_2420": "'{0}' sınıfı, '{1}' arabirimini yanlış uyguluyor.", + "Class_0_used_before_its_declaration_2449": "'{0}' sınıfı, bildiriminden önce kullanıldı.", + "Class_constructor_may_not_be_a_generator_1368": "Sınıf oluşturucu, program yönergeleri üreten bir oluşturucu olamaz.", + "Class_constructor_may_not_be_an_accessor_1341": "Sınıf oluşturucu, bir erişimci olamaz.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Sınıf bildirimi, '{0}' için aşırı yükleme listesi uygulayamaz.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla '@augments' veya '@extends' etiketi olamaz.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Sınıf dekoratörleri statik özel tanımlayıcıyla kullanılamaz. Deneysel dekoratörü kaldırmayı düşünün.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Ana sınıf tarafından tanımlanan '{0}' sınıf alanına, alt sınıftan super aracılığıyla erişilemez.", + "Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "{0} modülüyle ES5 ve üzeri hedeflendiğinde sınıf adı 'Object' olamaz.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.", + "Classes_can_only_extend_a_single_class_1174": "Sınıflar yalnızca bir sınıfı genişletebilir.", + "Classes_may_not_have_a_field_named_constructor_18006": "Sınıflarda 'constructor' adlı bir alan olmayabilir.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Sınıfta bulunan kod, bu '{0}' kullanımına izin vermeyen JavaScript'in katı modunda değerlendirilir. Daha fazla bilgi için bkz. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Komut Satırı Seçenekleri", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Yapılandırma dosyasının yolu veya 'tsconfig.json' dosyasını içeren klasörün yolu belirtilen projeyi derleyin.", + "Compiler_Diagnostics_6251": "Derleyici Tanılaması", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' derleyici seçeneğine boş bir dize verilemez.", + "Compiler_option_0_expects_an_argument_6044": "'{0}' derleyici seçeneği, bağımsız değişken bekliyor.", + "Compiler_option_0_may_not_be_used_with_build_5094": "'--{0}' derleyici seçeneği, '--build' ile kullanılamaz.", + "Compiler_option_0_may_only_be_used_with_build_5093": "'--{0}' derleyici seçeneği, yalnızca '--build' ile kullanılabilir.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Derleyici seçeneği '{0}' değeri '{1}' kararsız. Bu hatayı sessize almak için gecelik TypeScript kullanın. 'npm install -D typescript@next' ile güncelleştirmeyi deneyin.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "'{0}' derleyici seçeneği, {1} türünde bir değer gerektiriyor.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Özel tanımlayıcı alt düzeyi gösterilirken derleyici '{0}' adını ayırır.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Belirtilen yolda bulunan TypeScript projesini derler.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Geçerli projeyi derler (çalışma dizinindeki tsconfig.js).", + "Compiles_the_current_project_with_additional_settings_6929": "Geçerli projeyi ek ayarlarla derler.", + "Completeness_6257": "Tamlık", + "Composite_projects_may_not_disable_declaration_emit_6304": "Bileşik projeler, bildirim gösterimini devre dışı bırakamaz.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Bileşik projeler artımlı derlemeyi devre dışı bırakamayabilir.", + "Computed_from_the_list_of_input_files_6911": "Giriş dosyaları listesinden hesaplanır", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Hesaplanan özellikler sayı veya dize değişmezleri, değişkenler veya --isolatedDeclarations içeren noktalı ifadeler olmalıdır.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Sabit listelerinde hesaplanan özellik adına izin verilmiyor.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Sınıf veya nesne değişmezlerindeki hesaplanan özellik adları --isolatedDeclarations ile çıkarsanamaz.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Dize değeri içeren üyelerin bulunduğu bir sabit listesinde hesaplanan değerlere izin verilmez.", + "Concatenate_and_emit_output_to_single_file_6001": "Çıktıyı tek dosyaya birleştirin ve yayın.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "İçe aktarmaları çözümlerken çözümleyiciye özgü varsayılanlara ek olarak ayarlanacak koşullar.", + "Conflicts_are_in_this_file_6201": "Çakışmalar bu dosyada bulunuyor.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Bu sınıfa 'declare' değiştiricisi eklemeyi düşünün.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "'{0}' ve '{1}' yapı imzası dönüş türleri uyumlu değil.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dönüş türü ek açıklaması bulunmayan yapı imzası, örtük olarak 'any' dönüş türüne sahip.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Bağımsız değişken içermeyen yapı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", + "Constructor_implementation_is_missing_2390": "Oluşturucu uygulaması yok.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "'{0}' sınıfının oluşturucusu özel olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' sınıfının oluşturucusu korumalı olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Oluşturucu türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Oluşturucu türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Türetilmiş sınıflara ilişkin oluşturucular bir 'super' çağrısı içermelidir.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Kapsayıcı dosya belirtilmedi ve kök dizini belirlenemiyor; 'node_modules' klasöründe arama atlanıyor.", + "Containing_function_is_not_an_arrow_function_95128": "İçeren işlev bir ok işlevi değil", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Modül biçimli JS dosyalarını algılamak için kullanılan yöntemi denetle.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Türler birbiriyle yeterince örtüşmediğinden '{0}' türünün '{1}' türüne dönüştürülmesi bir hata olabilir. Bu bilerek yapıldıysa, ifadeyi önce 'unknown' değerine dönüştürün.", + "Convert_0_to_1_in_0_95003": "'{0}' öğesini '{0} içinde {1}' öğesine dönüştür", + "Convert_0_to_mapped_object_type_95055": "'{0}' öğesini eşlenen nesne türüne dönüştür", + "Convert_all_const_to_let_95102": "Tüm 'const' ifadelerini 'let' ifadesine dönüştürün", + "Convert_all_constructor_functions_to_classes_95045": "Tüm oluşturucu işlevleri sınıflara dönüştür", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Tüm geçersiz karakterleri HTML varlık koduna dönüştür", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Yeniden dışarı aktarılan tüm türleri yalnızca tür dışarı aktarmalarına dönüştürün", + "Convert_all_require_to_import_95048": "Tüm 'require' öğelerini 'import' olarak dönüştür", + "Convert_all_to_async_functions_95066": "Tümünü asenkron işlevlere dönüştürün", + "Convert_all_to_bigint_numeric_literals_95092": "Tümünü büyük tamsayı sayısal sabit değerlerine dönüştürün", + "Convert_all_to_default_imports_95035": "Tümünü varsayılan içeri aktarmalara dönüştür", + "Convert_all_type_literals_to_mapped_type_95021": "Tüm tür sabit değerlerini eşlenmiş türe dönüştür", + "Convert_all_typedef_to_TypeScript_types_95177": "Tüm typedef'leri TypeScript türüne dönüştür.", + "Convert_arrow_function_or_function_expression_95122": "Ok işlevini veya işlev ifadesini dönüştür", + "Convert_const_to_let_95093": "'const' ifadesini 'let' ifadesine dönüştürün", + "Convert_default_export_to_named_export_95061": "Varsayılan dışarı aktarmayı adlandırılmış dışarı aktarmaya dönüştürün", + "Convert_function_declaration_0_to_arrow_function_95106": "'{0}' işlev bildirimini ok işlevine dönüştür", + "Convert_function_expression_0_to_arrow_function_95105": "'{0}' işlev ifadesini ok işlevine dönüştür", + "Convert_function_to_an_ES2015_class_95001": "İşlevi bir ES2015 sınıfına dönüştür", + "Convert_invalid_character_to_its_html_entity_code_95100": "Geçersiz karakteri, karakterin HTML varlık koduna dönüştürün", + "Convert_named_export_to_default_export_95062": "Adlandırılmış dışarı aktarmayı varsayılan dışarı aktarmaya dönüştürün", + "Convert_named_imports_to_default_import_95170": "Adlandırılmış içeri aktarmaları varsayılan içeri aktarmaya dönüştür", + "Convert_named_imports_to_namespace_import_95057": "Adlandırılmış içeri aktarmaları ad alanı içeri aktarmasına dönüştür", + "Convert_namespace_import_to_named_imports_95056": "Ad alanı içeri aktarmasını adlandırılmış içeri aktarmalara dönüştür", + "Convert_overload_list_to_single_signature_95118": "Aşırı yükleme listesini tek imzaya dönüştür", + "Convert_parameters_to_destructured_object_95075": "Parametreleri, bozulan nesneye dönüştürün", + "Convert_require_to_import_95047": "'require' öğesini 'import' olarak dönüştür", + "Convert_to_ES_module_95017": "ES modülüne dönüştür", + "Convert_to_a_bigint_numeric_literal_95091": "Büyük tamsayı sayısal sabit değerine dönüştürün", + "Convert_to_anonymous_function_95123": "Anonim işleve dönüştür", + "Convert_to_arrow_function_95125": "Ok işlevine dönüştür", + "Convert_to_async_function_95065": "Asenkron işleve dönüştürün", + "Convert_to_default_import_95013": "Varsayılan içeri aktarmaya dönüştür", + "Convert_to_named_function_95124": "Adlandırılmış işleve dönüştür", + "Convert_to_optional_chain_expression_95139": "İsteğe bağlı zincir ifadesine dönüştür", + "Convert_to_template_string_95096": "Şablon dizesine dönüştürün", + "Convert_to_type_only_export_1364": "Yalnızca tür dışarı aktarmaya dönüştürün", + "Convert_typedef_to_TypeScript_type_95176": "typedef'i TypeScript türüne dönüştürün.", + "Corrupted_locale_file_0_6051": "{0} yerel ayar dosyası bozuk.", + "Could_not_convert_to_anonymous_function_95153": "Anonim işleve dönüştürülemedi", + "Could_not_convert_to_arrow_function_95151": "Arrow işlevine dönüştürülemedi", + "Could_not_convert_to_named_function_95152": "Adlandırılmış işleve dönüştürülemedi", + "Could_not_determine_function_return_type_95150": "İşlev dönüş türü belirlenemedi", + "Could_not_find_a_containing_arrow_function_95127": "İçeren bir ok işlevi bulunamadı", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "'{0}' modülü için bildirim dosyası bulunamadı. '{1}' örtülü olarak 'any' türüne sahip.", + "Could_not_find_convertible_access_expression_95140": "Dönüştürülebilir erişim ifadesi bulunamadı", + "Could_not_find_export_statement_95129": "Dışarı aktarma ifadesi bulunamadı", + "Could_not_find_import_clause_95131": "İçeri aktarma yan tümcesi bulunamadı", + "Could_not_find_matching_access_expressions_95141": "Eşleşen erişim ifadeleri bulunamadı", + "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' adı bulunamıyor. Şunu mu demek istediniz: '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "Ad alanı içeri aktarması veya adlandırılmış içeri aktarmalar bulunamadı", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Erişimcinin oluşturulacağı özellik bulunamadı", + "Could_not_find_variable_to_inline_95185": "Satır içi değişken bulunamadı.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Uzantılara sahip '{0}' yolu çözümlenemedi: {1}.", + "Could_not_write_file_0_Colon_1_5033": "'{0}' dosyası yazılamadı: {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Yayılan JavaScript dosyaları için kaynak eşleme dosyaları oluşturun.", + "Create_sourcemaps_for_d_ts_files_6614": "d.ts dosyaları için kaynak eşlemeleri oluşturun.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Çalışma dizininde önerilen ayarlarla ilgili bir tsconfig.js oluşturur.", + "DIRECTORY_6038": "DİZİN", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Bir karakter sınıfında ondalık kaçış dizilerine ve geri referanslara izin verilmez.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Başında sıfır bulunan ondalık sayılara izin verilmez.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Bildirim başka bir dosyadaki bildirimi genişlettiğinden serileştirilemez.", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Bu dosyaya ilişkin bildirim, bu içe aktarmanın genişletmeler için korunmasını gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Bu dosya için bildirim gösterme, '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Bu dosya için bildirim gösterme, '{1}' modülündeki '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Bu parametre için bildirim gösterme, türüne örtülü olarak tanımsız eklenmesini gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", + "Declaration_expected_1146": "Bildirim bekleniyor.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Bildirim adı, yerleşik genel tanımlayıcı '{0}' ile çakışıyor.", + "Declaration_or_statement_expected_1128": "Bildirim veya deyim bekleniyor.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir ifade bloğunun ardından geldiğinden yapı çözümlü bir atama yazmayı düşünüyorsanız, tüm atamayı parantez içine almanız gerekebilir.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Kesin atama onaylamaları olan bildirimlerde tür ek açıklamaları da olmalıdır.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Başlatıcılara sahip bildirimlerde kesin atama onaylamaları olamaz.", + "Declare_a_private_field_named_0_90053": "'{0}' adlı bir özel alan bildirin.", + "Declare_method_0_90023": "'{0}' metodunu bildir", + "Declare_private_method_0_90038": "'{0}' özel metodunu bildirin.", + "Declare_private_property_0_90035": "Özel '{0}' özelliğini bildir", + "Declare_property_0_90016": "'{0}' özelliğini bildir", + "Declare_static_method_0_90024": "'{0}' statik metodunu bildir", + "Declare_static_property_0_90027": "'{0}' statik özelliğini bildir", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "'{0}' dekoratör işlevi dönüş türü, '{1}' türüne atanamıyor.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Dekoratör işlevi dönüş türü '{0}', ancak 'void' veya 'any' olması bekleniyor.", + "Decorator_used_before_export_here_1486": "Dekoratör burada 'export' öğesinden önce kullanıldı.", + "Decorators_are_not_valid_here_1206": "Buradaki dekoratörler geçerli değil.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekoratörler aynı ada sahip birden fazla get/set erişimcisine uygulanamaz.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratörler 'export' öncesinde de görünüyorlarsa, 'export' veya 'default export' sonrasında görünmeyebilirler.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratörler, özellik bildirimlerinin adından ve tüm anahtar sözcüklerinden önce gelmelidir.", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Catch yan tümcesi değişkenlerini varsayılan olarak 'any' yerine 'unknown' olarak kabul et.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Modülün varsayılan dışarı aktarımı '{0}' özel adına sahip veya bu adı kullanıyor.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Varsayılan dışa aktarımlar --isolatedDeclarations ile çıkarsanamaz.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Ertelenmiş içeri aktarmalarda varsayılan içeri aktarmalara izin verilmez.", + "Default_library_1424": "Varsayılan kitaplık", + "Default_library_for_target_0_1425": "'{0}' hedefi için varsayılan kitaplık", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Ertelenmiş içeri aktarmalar yalnızca '--module' bayrağı 'esnext' veya 'preserve' olarak ayarlandığında desteklenir.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Şu tanımlayıcıların tanımları başka bir dosyadaki tanımlarla çakışıyor: {0}", + "Delete_all_unused_declarations_95024": "Kullanılmayan tüm bildirimleri sil", + "Delete_all_unused_imports_95147": "Kullanılmayan tüm içeri aktarmaları sil", + "Delete_all_unused_param_tags_95172": "Kullanılmayan tüm “@param” etiketlerini silin", + "Delete_the_outputs_of_all_projects_6365": "Tüm projelerin çıktılarını sil.", + "Delete_unused_param_tag_0_95171": "Kullanılmayan “{0}” “@param” etiket adını silin", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Kullanım Dışı] Bunun yerine '--jsxFactory' kullanın. 'react' JSX gösterimi hedefleniyorsa, createElement için çağrılan nesneyi belirtin", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Kullanım Dışı] Bunun yerine '--outFile' kullanın. Çıkışı tek bir dosya olarak birleştirin ve gösterin", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Kullanım Dışı] Bunun yerine '--skipLibCheck' kullanın. Varsayılan kitaplık bildirim dosyalarının tür denetimini atlayın.", + "Deprecated_setting_Use_outFile_instead_6677": "Ayar kullanım dışı bırakıldı. Bunun yerine 'outFile' kullanın.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "'await' kullanmayı mı unuttunuz?", + "Did_you_mean_0_1369": "Şunu mu demek istediniz: '{0}'?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' değerinin 'new (...args: any[]) => {1}' türüne kısıtlanmasını mı istediniz?", + "Did_you_mean_to_call_this_expression_6212": "Bu ifadeyi mi çağırmak istediniz?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Bu işlevi 'async' olarak işaretlemek mi istediniz?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':' kullanmak mı istediniz? İçeren nesne sabit değeri, yok etme deseninin parçası olduğunda özellik adının ardından yalnızca '=' gelebilir.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Bu ifadeyle 'new' kullanmak mı istediniz?", + "Digit_expected_1124": "Rakam bekleniyor.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' dizini yok, içindeki tüm aramalar atlanıyor.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "'{0}' dizini bir package.json kapsamı içermiyor. İçeri aktarmalar çözümlenmeyecek.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Yayılan JavaScript dosyalarında ‘use strict’ yönergelerini eklemeyi devre dışı bırakın.", + "Disable_checking_for_this_file_90018": "Bu dosya için denetimi devre dışı bırak", + "Disable_emitting_comments_6688": "Yorumların yayılmasını devre dışı bırakın.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc açıklamalarında '@internal' olan üretme bildirimlerini devre dışı bırak.", + "Disable_emitting_files_from_a_compilation_6660": "Derlemeden dosya yayımlamayı devre dışı bırakın.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Herhangi bir tür denetimi hatası bildirildiyse, dosya yaymayı devre dışı bırakın.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Oluşturulan kodda 'const enum' bildirimlerinin silinmesini devre dışı bırak.", + "Disable_error_reporting_for_unreachable_code_6603": "Ulaşılamaz kod için hata raporlamayı devre dışı bırakın.", + "Disable_error_reporting_for_unused_labels_6604": "Kullanılmayan etiketler için hata raporlamayı devre dışı bırakın.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Tam tür denetimini devre dışı bırakın (yalnızca kritik ayrıştırma ve yayma hataları rapor edilecektir).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Derlenen çıktıda '__extends' gibi özel yardımcı işlevler oluşturmayı devre dışı bırak.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Varsayılan lib.d.ts dahil olmak üzere kitaplık dosyalarının dahil edilmesini devre dışı bırakın.", + "Disable_loading_referenced_projects_6235": "Başvurulan projelerin yüklenmesini devre dışı bırakın.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Bileşik projelere başvurulurken bildirim dosyaları yerine kaynak dosyaların tercih edilmesini devre dışı bırak.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Nesne sabit değerleri oluşturulurken fazlalık özellik hatalarının raporlanmasını devre dışı bırakın.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Simgesel bağlantıları gerçek yollarına çözümlemeyi devre dışı bırakın. Bu, düğümdeki aynı bayrakla bağıntılıdır.", + "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript projelerinde boyut sınırlamalarını devre dışı bırakın.", + "Disable_solution_searching_for_this_project_6224": "Bu proje için çözüm aramayı devre dışı bırakın.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "İşlev türlerinde genel imzalar için katı denetimi devre dışı bırakın.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript projeleri için tür alımını devre dışı bırak", + "Disable_truncating_types_in_error_messages_6663": "Hata iletilerinde türlerin kesilmesini devre dışı bırakın.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Başvurulan projelerdeki bildirim dosyaları yerine kaynak dosyalarının kullanımını devre dışı bırakın.", + "Disable_wiping_the_console_in_watch_mode_6684": "İzleme modunda konsolu temizlemeyi devre dışı bırak.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Bir projedeki dosya adlarına bakarak tür alımı çıkarımı devre dışı bırakır.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import', 'require' veya '' ifadelerinin TypeScript'in projeye eklemesi gereken dosya sayısını artırmasına izin verme.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Aynı dosyaya yönelik tutarsız büyük/küçük harflere sahip başvurulara izin verme.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Derlenen dosya listesine üç eğik çizgi başvuruları veya içeri aktarılan modüller eklemeyin.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript'in parçası olmayan çalışma zamanı yapılarına izin verme.", + "Do_not_emit_comments_to_output_6009": "Çıktıya ait açıklamaları gösterme.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' ek açıklamasına sahip kod için bildirimleri gösterme.", + "Do_not_emit_outputs_6010": "Çıktıları gösterme.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Herhangi bir hata bildirildiyse çıkışları gösterme.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Modül çıkışında 'use strict' yönergeleri gösterme.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Oluşturulan kodda const sabit listesi bildirimlerini silme.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Derlenen çıkışta '__extends' gibi özel yardımcı işlevler oluşturmayın.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Varsayılan kitaplık dosyasını (lib.d.ts) eklemeyin.", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "Erişilemeyen kod ile ilgili hataları bildirme.", + "Do_not_report_errors_on_unused_labels_6074": "Kullanılmayan etiketler ile ilgili hataları bildirme.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Simgesel bağlantıların gerçek yolunu çözümlemeyin.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' ayarına göre çıktı dosyasının formatında yazılmalarını sağlayarak, yalnızca tür olarak işaretlenmemiş hiçbir bir içe aktarma veya dışa aktarma işlemini dönüştürmeyin veya silmeyin.", + "Do_not_truncate_error_messages_6165": "Hata iletilerini kesmeyin.", + "Duplicate_function_implementation_2393": "Yinelenen işlev uygulaması.", + "Duplicate_identifier_0_2300": "Yinelenen tanımlayıcı: '{0}'.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Yinelenen tanımlayıcı: '{0}'. Derleyici, bir modülün üst düzey kapsamındaki '{1}' adını ayırır.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' tanımlayıcısı yineleniyor. Derleyici, zaman uyumsuz işlevler içeren bir modülün en üst düzey kapsamında '{1}' adını ayırıyor.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "'{0}' tanımlayıcısı yineleniyor. Derleyici, statik başlatıcılarda 'super' başvurularını yayımlarken '{1}' adını ayırır.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Yinelenen tanımlayıcı: '{0}'. Derleyici, zaman uyumsuz işlevleri desteklemek için '{1}' bildirimini kullanır.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Yinelenen tanımlayıcı: '{0}'. Statik öğeler ve örnek öğeleri aynı özel adı paylaşamaz.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Yinelenen tanımlayıcı: 'arguments'. Derleyici, rest parametrelerini başlatmak için 'arguments' tanımlayıcısını kullanır.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Yinelenen '_newTarget' tanımlayıcısı. Derleyicide, '_newTarget' değişken bildirimi 'new.target' meta-özellik başvurusu yakalamak için kullanılıyor.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Yinelenen tanımlayıcı: '_this'. Derleyici, 'this' başvurusunu yakalamak için '_this' değişken bildirimini kullanır.", + "Duplicate_index_signature_for_type_0_2374": "'{0}' türü için yinelenen dizin imzası var.", + "Duplicate_label_0_1114": "'{0}' etiketi yineleniyor.", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "'{0}' özelliğini yineleyin.", + "Duplicate_regular_expression_flag_1500": "Yinelenen normal ifade bayrağı.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Dinamik içeri aktarmanın tanımlayıcısı 'string' türünde olmalıdır, ancak buradaki tür: '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dinamik içeri aktarma yalnızca \"--module\" bayrağı \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" veya \"nodenext\" olarak ayarlandığında desteklenir.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dinamik içe aktarmalar yalnızca bir modül belirticiyi ve isteğe bağlı bir dizi özniteliği bağımsız değişken olarak kabul edebilir", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dinamik içeri aktarmalar yalnızca \"--module\" seçeneği; \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ikinci bir bağımsız değişkeni destekler.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript içeri ve dışarı aktarma işlemleri, 'verbatimModuleSyntax' altında bir CommonJS dosyasına yazılamaz.", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript içeri ve dışarı aktarma işlemleri, 'verbatimModuleSyntax' altında bir CommonJS dosyasına yazılamaz. Bu dosyayı ECMAScript modülü yapmak için en yakın 'package.json' dosyasındaki 'type' alanını düzenleyin veya TypeScript'teki 'verbatimModuleSyntax', 'module' ve 'moduleResolution' ayarlarınızı düzenleyin.", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'Module', 'preserve' olarak ayarlandığında CommonJS modülünde ECMAScript modülü sözdizimine izin verilmez.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' için yapılan her bildirim, değerinde farklılık gösteriyor, '{2}' beklenirken '{3}' verildi.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "'{0}' birleşim türünün her bir üyesi yapı imzalarına sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "'{0}' birleşim türünün her bir üyesi imzalara sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", + "Editor_Support_6249": "Düzenleyici Desteği", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' türündeki ifade '{1}' türünün dizinini oluşturmak için kullanılamadığından öğe, örtük olarak 'any' türüne sahip.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Dizin ifadesi 'number' türünde olmadığından, öğe örtük olarak 'any' türü içeriyor.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' türünün dizin imzası olmadığından öğe dolaylı olarak 'any' türüne sahip.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' türünün dizin imzası olmadığından öğe, örtük olarak 'any' türüne sahip. '{1}' türünü mü çağırmak istediniz?", + "Emit_6246": "Yayımla", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript-standard-compliant sınıf alanlarını yayın.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Çıkış dosyalarının başında bir UTF-8 Bayt Sırası İşareti (BOM) gösterin.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Ayrı bir dosya oluşturmak yerine, kaynak eşlemeleri içeren tek bir dosya gösterin.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Hata ayıklama için derleyici çalıştırmasının bir v8 CPU profilini yayın.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS modüllerini içeri aktarma desteğini kolaylaştırmak için ek JavaScript üret. Bu, tür uyumluluğu için 'allowSyntheticDefaultImports' özelliğini etkinleştirir.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Sınıf alanlarını Set yerine Define ile gösterin.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Kaynak dosyalarındaki donatılmış bildirimler için design-type meta verilerini yayın.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Yineleme için daha uyumlu, ancak ayrıntılı ve daha düşük performanslı JavaScript yayın.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Kaynağı, kaynak eşlemeleri ile birlikte tek bir dosya içinde gösterin; '--inlineSourceMap' veya '--sourceMap' öğesinin ayarlanmasını gerektirir.", + "Enable_all_strict_type_checking_options_6180": "Tüm katı tür denetleme seçeneklerini etkinleştirin.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Derleyici hatalarının okunmasını kolaylaştırmak için TypeScript çıktısında renk ve biçimlendirmeyi etkinleştirin.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Bir TypeScript projesinin proje başvurularıyla birlikte kullanılmasına olanak sağlayan kısıtlamaları etkinleştirin.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Açıkça bir işlev döndürmeyen kod yolları için hata raporlamayı etkinleştirin.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Örtük olarak 'any' türüne sahip ifade ve bildirimlerde hata raporlamayı etkinleştir.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Switch deyimlerinde sonraki ifadelere geçiş ile ilgili hataların raporlanmasını etkinleştirin.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Tür denetimli JavaScript dosyalarında hata raporlamayı etkinleştirin.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Yerel değişkenler okunmadığında hata raporlamayı etkinleştir.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' için 'any' türü verildiğinde hata raporlamayı etkinleştir.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Eski deneysel dekoratörler için deneysel desteği etkinleştirin.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Bir bildirim dosyasının mevcut olması koşuluyla, herhangi bir uzantıya sahip dosyaların içe aktarılmasını etkinleştirin.", + "Enable_importing_json_files_6689": ".json dosyalarını içeri aktarmayı etkinleştirin.", + "Enable_lib_replacement_6808": "Kitaplık değişimini etkinleştir.", + "Enable_project_compilation_6302": "Proje derlemeyi etkinleştir", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "İşlevlerde katı 'bind', 'call' ve 'apply' metotlarını etkinleştirin.", + "Enable_strict_checking_of_function_types_6186": "İşlev türleri üzerinde katı denetimi etkinleştirin.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Sınıflarda sıkı özellik başlatma denetimini etkinleştirin.", + "Enable_strict_null_checks_6113": "Katı null denetimlerini etkinleştir.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Yapılandırma dosyanızda 'experimentalDecorators' seçeneğini etkinleştirin", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Yapılandırma dosyanızda '--jsx' bayrağını etkinleştirin", + "Enable_tracing_of_the_name_resolution_process_6085": "Ad çözümleme işlemini izlemeyi etkinleştir.", + "Enable_verbose_logging_6713": "Ayrıntılı günlüğe yazmayı etkinleştir.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Tüm içeri aktarma işlemleri için ad alanı nesnelerinin oluşturulması aracılığıyla CommonJS ile ES Modülleri arasında yayımlama birlikte çalışabilirliğine imkan tanır. Şu anlama gelir: 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "ES7 dekoratörleri için deneysel desteği etkinleştirir.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Dekoratörlere tür meta verisi gönderme için deneysel desteği etkinleştirir.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Dizini oluşturulmuş bir tür kullanılarak bildirilen anahtarlar için dizini oluşturulmuş erişimciler kullanılmasını zorunlu kılar.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Türetilmiş sınıflarda geçersiz kılan üyelerin bir geçersiz kılma değiştiricisiyle işaretlendiğinden emin olun.", + "Ensure_that_casing_is_correct_in_imports_6637": "İçeri aktarmalarda büyük harfe çevirmenin doğru olduğundan emin olun.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Her dosyanın diğer içeri aktarmalara bağlı olmadan güvenli bir şekilde kaynaktan kaynağa derlenebildiğinden emin olun.", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "'use strict' öğesinin her zaman yayıldığından emin olun.", + "Entering_conditional_exports_6413": "Koşullu dışarı aktarmalara giriliyor.", + "Entry_point_for_implicit_type_library_0_1420": "'{0}' örtük tür kitaplığı için giriş noktası", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "'{1}' paket kimliğine sahip '{0}' örtük tür kitaplığı için giriş noktası", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "'{1}' paket kimliğine sahip compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", + "Enum_0_used_before_its_declaration_2450": "'{0}' sabit listesi, bildiriminden önce kullanıldı.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Sabit listesi bildirimleri yalnızca ad alanı veya diğer sabit listesi bildirimleri ile birleştirilebilir.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Sabit listesi bildirimlerinin tümü const veya const olmayan değerler olmalıdır.", + "Enum_member_expected_1132": "Sabit listesi üyesi bekleniyor.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Değişmez sayısal bir üyeyi takip eden numaralandırma üyesi, 'isolatedModules' etkinleştirildiğinde bir başlatıcıya sahip olmalıdır.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Sabit listesi üyesi başlatıcıları, --isolatedDeclarations ile dış simgelere başvurular olmadan hesaplanabilir olmalıdır.", + "Enum_member_must_have_initializer_1061": "Sabit listesi üyesi bir başlatıcıya sahip olmalıdır.", + "Enum_name_cannot_be_0_2431": "Sabit listesi adı '{0}' olamaz.", + "Environment_Settings_6285": "Ortam Ayarları", + "Errors_Files_6041": "Hata Dosyaları", + "Escape_sequence_0_is_not_allowed_1488": "'{0}' kaçış dizisine izin verilmiyor.", + "Examples_Colon_0_6026": "Örnekler: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' ve '{1}' türlerini karşılaştırırken aşırı karmaşıklık.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Aşırı yığın derinliği, '{0}' ve '{1}' türlerini karşılaştırıyor.", + "Exiting_conditional_exports_6416": "Koşullu dışarı aktarmalardan çıkılıyor.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", + "Expected_0_arguments_but_got_1_2554": "{0} bağımsız değişken bekleniyordu ancak {1} alındı.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} bağımsız değişken bekleniyordu ancak {1} bağımsız değişken alındı. Tür bağımsız değişkeninizdeki 'void' operatörünü 'Promise'e eklemeyi mi unuttunuz?", + "Expected_0_type_arguments_but_got_1_2558": "{0} tür bağımsız değişkeni bekleniyordu ancak {1} alındı.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 bağımsız değişken bekleniyordu ancak 0 bağımsız değişken var. Bağımsız değişkenler olmadan çağrılabilen bir 'resolve' oluşturmak için 'new Promise()' çağrısında bir JSDoc ipucu bulunması gerekir.", + "Expected_a_Unicode_property_name_1523": "Unicode özellik adı bekleniyordu.", + "Expected_a_Unicode_property_name_or_value_1527": "Unicode özellik adı veya değeri bekleniyordu.", + "Expected_a_Unicode_property_value_1525": "Bir Unicode özellik değeri bekleniyordu.", + "Expected_a_capturing_group_name_1514": "Yakalama grubu adı bekleniyordu.", + "Expected_a_class_set_operand_1520": "Bir sınıf kümesi işleneni bekleniyordu.", + "Expected_at_least_0_arguments_but_got_1_2555": "En az {0} bağımsız değişken bekleniyordu ancak {1} alındı.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' için ilgili JSX kapanış etiketi bekleniyor.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX parçasına karşılık gelen kapanış etiketi bekleniyordu.", + "Expected_for_property_initializer_1442": "Özellik başlatıcısı için '=' bekleniyor.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' dosyasındaki '{0}' alanının '{1}' türünde olması bekleniyordu ancak '{2}' alındı.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Açık olarak belirtilen modül çözümleme türü: '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' seçeneği 'es2016' veya üzeri olarak belirlenmedikçe 'bigint' değerlerinde üs olarak gösterme yapılamaz.", + "Export_0_from_module_1_90059": "'{1}' modülünden '{0}' öğesini dışarı aktar", + "Export_all_referenced_locals_90060": "Başvurulan tüm yerel ayarları dışarı aktar", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript modülleri hedeflenirken dışarı aktarma ataması kullanılamaz. Bunun yerine 'export default' veya başka bir modül biçimi kullanmayı deneyin.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "'--module' bayrağı 'system' ise dışarı aktarma ataması desteklenmez.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Dışarı aktarma bildirimi, dışarı aktarılan '{0}' bildirimiyle çakışıyor.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Ad alanında dışarı aktarma bildirimlerine izin verilmez.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "'{0}' dışarı aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Dışarı aktarılan '{0}' tür diğer adı, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Dışarı aktarılan türün diğer adı olan '{0}' ifadesi, {2} modülündeki '{1}' özel adına sahip veya bu özel adı kullanıyor.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Dışarı aktarılan '{0}' değişkeni, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Dışarı aktarılan '{0}' değişkeni, '{2}' özel modüldeki '{1}' adına sahip veya bu adı kullanıyor.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Dışarı aktarılan '{0}' değişkeni, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Modül genişletmelerinde dışarı aktarmalara ve dışarı aktarma atamalarına izin verilmez.", + "Expression_expected_1109": "İfade bekleniyor.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "İfadenin dekoratör olarak kullanılabilmesi için parantez içine alınması gereklidir.", + "Expression_or_comma_expected_1137": "İfade veya virgül bekleniyor.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "İfade, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "İfade, temsili çok karmaşık olan bir birleşim türü oluşturuyor.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "İfade, derleyicinin temel sınıf başvurusunu yakalamak için kullandığı '_super' öğesi olarak çözümleniyor.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "İfade, derleyicinin 'new.target' meta-özellik başvurusu yakalamak için kullandığı '_newTarget' değişken bildirimi olarak çözümleniyor.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "İfade, derleyicinin 'this' başvurusunu yakalamak için kullandığı '_this' değişken bildirimi olarak çözümleniyor.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "İfade türü --isolatedDeclarations ile çıkarsanamaz.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends yan tümcesi --isolatedDeclarations içeren bir ifade içeremez.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Çıkarsanan '{0}' türü için Extends yan tümcesi '{1}' özel adı içeriyor veya kullanıyor.", + "Extract_base_class_to_variable_90064": "Temel sınıfı değişken olarak ayıkla", + "Extract_binding_expressions_to_variable_90066": "Bağlayıcı ifadeleri değişkene ayıkla", + "Extract_constant_95006": "Sabiti ayıkla", + "Extract_default_export_to_variable_90065": "Varsayılan dışarı aktarmayı değişken olarak ayıkla", + "Extract_function_95005": "İşlevi ayıkla", + "Extract_to_0_in_1_95004": "{1} içindeki {0} konumuna ayıkla", + "Extract_to_0_in_1_scope_95008": "{1} kapsamındaki {0} konumuna ayıkla", + "Extract_to_0_in_enclosing_scope_95007": "Çevreleyen kapsamdaki {0} konumuna ayıkla", + "Extract_to_interface_95090": "Arabirime ayıkla", + "Extract_to_type_alias_95078": "Tür diğer adına ayıkla", + "Extract_to_typedef_95079": "typedef'e ayıkla", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Değişken olarak ayıkla ve 'typeof {0} olarak {0}' ile değiştir", + "Extract_type_95077": "Türü ayıkla", + "FILE_6035": "DOSYA", + "FILE_OR_DIRECTORY_6040": "DOSYA VEYA DİZİN", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' bulunamadı.", + "Failed_to_resolve_under_condition_0_6415": "'{0}' koşulu altında çözümlenemedi.", + "Fallthrough_case_in_switch_7029": "switch deyiminde sonraki ifadeye geçiş.", + "File_0_does_not_exist_6096": "'{0}' adlı dosya yok.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut değil.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya var; bunu bir çözümleme sonucu olarak kullanın.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' dosyası desteklenmeyen uzantıya sahip. Yalnızca şu uzantılar desteklenir: {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' dosyası bir JavaScript dosyasıdır. 'allowJs' seçeneğini mi etkinleştirmek istediniz?", + "File_0_is_not_a_module_2306": "'{0}' dosyası bir modül değil.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' dosyası, '{1}' projesinin dosya listesinde değil. Projelerin tüm dosyaları listelemesi veya bir 'include' deseni kullanması gerekir.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' dosyası, 'rootDir' '{1}' dizininde değil. 'rootDir' dizininin tüm kaynak dosyalarını içermesi bekleniyor.", + "File_0_not_found_6053": "'{0}' dosyası bulunamadı.", + "File_Layout_6284": "Dosya Düzeni", + "File_Management_6245": "Dosya Yönetimi", + "File_appears_to_be_binary_1490": "Dosya ikili gibi görünüyor.", + "File_change_detected_Starting_incremental_compilation_6032": "Dosya değişikliği algılandı. Artımlı derleme başlatılıyor...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}', \"type\" alanına sahip olmadığından dosya CommonJS modülüdür", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}', değeri \"module\" olmayan \"type\" alanına sahip olduğundan dosya CommonJS modülüdür", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "'package.json' bulunamadığından dosya CommonJS modülüdür", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}', değeri \"module\" olan \"type\" alanına sahip olduğundan dosya ECMAScript modülüdür", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Bir CommonJS modülü olan dosya bir ES modülüne dönüştürülebilir.", + "File_is_default_library_for_target_specified_here_1426": "Burada dosya, belirtilen hedef için varsayılan kitaplıktır.", + "File_is_entry_point_of_type_library_specified_here_1419": "Burada dosya, belirtilen tür kitaplığının giriş noktasıdır.", + "File_is_included_via_import_here_1399": "Burada dosya, içeri aktarma aracılığıyla eklenmiştir.", + "File_is_included_via_library_reference_here_1406": "Burada dosya, kitaplık başvurusu aracılığıyla eklenmiştir.", + "File_is_included_via_reference_here_1401": "Burada dosya, başvuru aracılığıyla eklenmiştir.", + "File_is_included_via_type_library_reference_here_1404": "Burada dosya, tür kitaplığı başvurusu aracılığıyla eklenmiştir.", + "File_is_library_specified_here_1423": "Burada dosya, belirtilen kitaplıktır.", + "File_is_matched_by_files_list_specified_here_1410": "Burada dosya, belirtilen 'dosyalar' listesine göre eşleştirilir.", + "File_is_matched_by_include_pattern_specified_here_1408": "Burada dosya, belirtilen ekleme desenine göre eşleştirilir.", + "File_is_output_from_referenced_project_specified_here_1413": "Burada dosya, belirtilmiş başvurulan projenin çıkışıdır.", + "File_is_output_of_project_reference_source_0_1428": "Dosya, '{0}' proje başvuru kaynağının çıkışıdır", + "File_is_source_from_referenced_project_specified_here_1416": "Burada dosya, belirtilmiş başvurulan projenin kaynağıdır.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' dosya adının, zaten eklenmiş olan '{1}' dosya adından tek farkı, büyük/küçük harf kullanımı.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Dosya adı '{0}', '{1}' uzantısına sahip - bunun yerine '{2}' aranıyor.", + "File_name_0_has_a_1_extension_stripping_it_6132": "'{0}' dosya adında '{1}' uzantısı var; uzantı ayrılıyor.", + "File_redirects_to_file_0_1429": "Dosya, '{0}' dosyasına yeniden yönlendiriyor", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Dosya belirtimi, özyinelemeli dizin joker karakterinden ('**') sonra görünen bir üst dizin ('..') içeremez: '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Dosya belirtimi, özyinelemeli dizin joker karakter ('**') ile bitemez: '{0}'.", + "Filters_results_from_the_include_option_6627": "`include` seçeneğinden sonuçları filtreler.", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "Algılanan tüm yazım hatalarını düzelt", + "Fix_all_expressions_possibly_missing_await_95085": "'await' deyiminin eksik olabileceği tüm ifadeleri düzeltin", + "Fix_all_implicit_this_errors_95107": "Tüm örtük 'this' hatalarını onar", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Asenkron işlevlerin tüm hatalı dönüş türlerini onar", + "Fix_all_with_type_only_imports_95182": "Tümünü yalnızca tür içeri aktarmaları ile düzelt", + "For_nodejs_Colon_6287": "nodejs için:", + "Found_0_errors_6217": "{0} hata bulundu.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} hata bulundu. Dosya değişiklikleri izleniyor.", + "Found_0_errors_in_1_files_6261": "{1} dosyada {0} hata bulundu.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Aynı dosyada {0} hata bulundu, başlangıç: {1}", + "Found_1_error_6216": "1 hata bulundu.", + "Found_1_error_Watching_for_file_changes_6193": "1 hata bulundu. Dosya değişiklikleri izleniyor.", + "Found_1_error_in_0_6259": "Şurada 1 hata bulundu: {0}", + "Found_package_json_at_0_6099": "'{0}' içinde 'package.json' bulundu.", + "Found_peerDependency_0_with_1_version_6282": "'{1}' sürümüne sahip peerDependency '{0}' bulundu.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Sınıf tanımları otomatik olarak katı moddadır.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Modüller otomatik olarak katı moddadır.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dönüş türü ek açıklaması bulunmayan işlev ifadesi, örtük olarak '{0}' dönüş türüne sahip.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "İşlev uygulaması yok veya bildirimden hemen sonra gelmiyor.", + "Function_implementation_name_must_be_0_2389": "İşlev uygulamasının adı '{0}' olmalıdır.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan işlev, örtük olarak 'any' türüne sahiptir.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "İşlevin sonunda return deyimi eksik ve dönüş türü 'undefined' içermiyor.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "İşlevin --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", + "Function_not_implemented_95159": "İşlev uygulanmadı.", + "Function_overload_must_be_static_2387": "İşlev aşırı yüklemesi statik olmalıdır.", + "Function_overload_must_not_be_static_2388": "İşlev aşırı yüklemesi statik olmamalıdır.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "İşlev türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "İşlev türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dönüş türü ek açıklaması bulunmayan işlev türü, örtük olarak '{0}' dönüş türüne sahip.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Gövdelere sahip işlev yalnızca çevresel sınıflarla birleştirebilir.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Projenizdeki TypeScript ve JavaScript dosyalarından .d.ts dosyaları oluşturun.", + "Generate_get_and_set_accessors_95046": "'get' ve 'set' erişimcilerini oluşturun", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Tüm geçersiz kılma özellikleri için 'get' ve 'set' erişimcileri oluşturun", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "Bir CPU profili oluşturur.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Karşılık gelen her '.d.ts' dosyası için bir kaynak eşlemesi oluşturur.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Olay izleme ve tür listesi oluşturur.", + "Generates_corresponding_d_ts_file_6002": "İlgili '.d.ts' dosyasını oluşturur.", + "Generates_corresponding_map_file_6043": "İlgili '.map' dosyasını oluşturur.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Oluşturucu örtük olarak '{0}' bekletme türüne sahip. Bir dönüş türü ek açıklaması sağlamayı deneyin.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Çevresel bağlamda oluşturuculara izin verilmez.", + "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' genel türü, {1} tür bağımsız değişkenini gerektiriyor.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "'{0}' genel türü {1} ile {2} arasında bağımsız değişken gerektirir.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Genel modül dışarı aktarmaları yalnızca en üst düzeyde görünebilir.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Genel modül dışarı aktarmaları yalnızca bildirim dosyalarında görünebilir.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Genel modül dışarı aktarmaları yalnızca modül dosyalarında görünebilir.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "'{0}' genel türü, bir sınıf veya arabirim türü olmalıdır.", + "Global_type_0_must_have_1_type_parameter_s_2317": "'{0}' genel türü, {1} türünde parametre içermelidir.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' ve '--watch' içinde yeniden derlemelerin olması, bir dosya içindeki değişikliklerin yalnızca doğrudan buna bağımlı olan dosyaları etkileyeceğini varsayar.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' ve 'watch' modu kullanan projelerdeki yeniden derlemelerde, bir dosyada yapılan değişikliklerin yalnızca bu dosyaya bağımlı olan dosyaları etkileyeceğinin varsayılmasını sağla.", + "Hexadecimal_digit_expected_1125": "Onaltılık basamak bekleniyor.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Tanımlayıcı bekleniyor. '{0}' modülün en üst düzeyinde ayrılmış bir sözcüktür.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Sınıf tanımları otomatik olarak katı moddadır.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Modüller otomatik olarak katı moddadır.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Tanımlayıcı bekleniyor. '{0}', burada kullanılamayan ayrılmış bir sözcüktür.", + "Identifier_expected_1003": "Tanımlayıcı bekleniyor.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Tanımlayıcı bekleniyor. '__esModule', ECMAScript modülleri dönüştürülürken, dışarı aktarılan bir işaretçi olarak ayrılmış.", + "Identifier_or_string_literal_expected_1478": "Tanımlayıcı veya sabit değerli dize bekleniyor.", + "Identifier_string_literal_or_number_literal_expected_1496": "Tanımlayıcı, sabit değerli dize veya sabit değerli sayı bekleniyor.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' öğesini düzeltmek için bir çekme isteği göndermeyi deneyin", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "‘{0}’ paketi bu modülü fiili olarak kullanıma sunuyorsa `'{1}' modülünü bildir;` ifadesini içeren yeni bir bildirim (.d.ts) dosyası eklemeyi deneyin", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Bulunan tsconfig dosyasını yoksayıp komut satırı seçenekleri ve dosyalarla oluşturun.", + "Ignore_this_error_message_90019": "Bu hata iletisini yoksay", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json yok sayılıyor, belirtilen dosyaları varsayılan derleyici seçenekleriyle derler.", + "Implement_all_inherited_abstract_classes_95040": "Devralınan tüm soyut sınıfları uygula", + "Implement_all_unimplemented_interfaces_95032": "Uygulanmayan tüm arabirimleri uygula", + "Implement_inherited_abstract_class_90007": "Devralınan soyut sınıfı uygula", + "Implement_interface_0_90006": "'{0}' arabirimini uygula", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "'{1}' özel adına sahip veya bu adı kullanan '{0}' dışarı aktarılan sınıfının yan tümcesini uygular.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol' öğesinin örtük olarak 'string' türüne dönüştürülmesi işlemi çalışma zamanında başarısız olur. Bu ifadeyi 'String(...)' içinde sarmalamayı düşünün.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' içeri aktarması bu dosyada kullanılan genel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' içeri aktarması yerel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", + "Import_0_from_1_90013": "'{0}' öğesini \"{1}\" kaynağından içeri aktar", + "Import_assertion_values_must_be_string_literal_expressions_2837": "İçeri aktarma onaylama değerleri, dize sabit ifadeleri olmalıdır.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' çağrılarına derlenen deyimler için içeri aktarma onaylamalarına izin verilmiyor.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "İçeri aktarma onayları, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "İçeri aktarma onayları, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "İçeri aktarma onaylamaları içeri aktarma öznitelikleriyle değiştirildi. 'assert' yerine 'with' kullanın.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript modülleri hedeflenirken içeri aktarma ataması kullanılamaz. Bunun yerine 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' veya başka bir modül biçimi kullanmayı deneyin.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "İçeri aktarma öznitelik değerleri, sabit değerli dize ifadeleri olmalıdır.", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' çağrılarına derlenen deyimler üzerinde içeri aktarma özniteliklerine izin verilmiyor.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "İçeri aktarma öznitelikleri, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "İçeri aktarma öznitelikleri, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", + "Import_declaration_0_is_using_private_name_1_4000": "'{0}' içeri aktarma bildirimi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "İçeri aktarma bildirimi, yerel '{0}' bildirimiyle çakışıyor.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Ad alanındaki içeri aktarma bildirimleri bir modüle başvuramaz.", + "Import_emit_helpers_from_tslib_6139": "'Tslib'den yayma yardımcılarını içeri aktar.", + "Import_may_be_converted_to_a_default_import_80003": "İçeri aktarma varsayılan bir içeri aktarmaya dönüştürülebilir.", + "Import_name_cannot_be_0_2438": "İçeri aktarma adı '{0}' olamaz.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Çevresel modül bildirimindeki içeri veya dışarı aktarma bildirimi, göreli modül adı aracılığıyla modüle başvuramaz.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "'{0}' içeri aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", + "Imported_via_0_from_file_1_1393": "'{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_1394": "'{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Bir JSON dosyasının ECMAScript modülüne aktarılması, 'module' değeri '{0}' olarak ayarlandığında 'type: \"json\"' içeri aktarma özniteliği gerektirir.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Modül genişletmelerinde içeri aktarmalara izin verilmez. Bunları, kapsayan dış modüle taşımanız önerilir.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Çevresel sabit listesi bildirimlerinde, üye başlatıcısı sabit ifade olmalıdır.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Birden fazla bildirime sahip sabit listesinde yalnızca bir bildirim ilk sabit listesi öğesine ait başlatıcıyı atlayabilir.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dosyaların listesini ekleyin. Bu, `include` seçeneğinden farklı olarak glob desenlerini desteklemez.", + "Include_modules_imported_with_json_extension_6197": "'.json' uzantısıyla içeri aktarılan modülleri dahil et", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Yayılan JavaScript içindeki kaynak eşlemelerine kaynak kodunu ekleyin.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Yayılan JavaScript içine kaynak eşleme dosyalarını ekleyin.", + "Includes_imports_of_types_referenced_by_0_90054": "'{0}' tarafından başvurulan türlerin içeri aktarmalarını içerir", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch dahil olmak üzere -w, dosya değişiklikleri için geçerli projeyi izlemeye başlayacak. Bir kez ayarlandıktan sonra, izleme modunu şununla yapılandırabilirsiniz:", + "Incomplete_quantifier_Digit_expected_1505": "Eksik niceleyici. Sayı bekleniyordu.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{0}' türündeki dizin imzası '{1}' türünde yok.", + "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' türündeki dizin imzası yalnızca okumaya izin veriyor.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "'{0}' birleştirilmiş bildirimindeki bildirimlerin tümü dışarı aktarılmış veya yerel olmalıdır.", + "Infer_all_types_from_usage_95023": "Tüm türleri kullanımdan çıkar", + "Infer_function_return_type_95148": "İşlev dönüş türünü çıkarsa", + "Infer_parameter_types_from_usage_95012": "Parametre türleri için kullanımdan çıkarım yap", + "Infer_this_type_of_0_from_usage_95080": "Kullanımdan '{0}' öğesinin 'this' türünü çıkarsa", + "Infer_type_of_0_from_usage_95011": "'{0}' türü için kullanımdan çıkarım yap", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Sınıf ifadelerinden çıkarım, --isolatedDeclarations ile desteklenmiyor.", + "Initialize_property_0_in_the_constructor_90020": "Oluşturucu içinde '{0}' özelliğini başlat", + "Initialize_static_property_0_90021": "'{0}' statik özelliğini başlat", + "Initializer_for_property_0_2811": "'{0}' özelliği için başlatıcı", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "'{0}' örnek üyesi değişkeninin başlatıcısı, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Çevresel bağlamlarda başlatıcılara izin verilmez.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Bir TypeScript projesi başlatır ve bir tsconfig.json dosyası oluşturur.", + "Inline_variable_95184": "Satır içi değişken", + "Insert_command_line_options_and_files_from_a_file_6030": "Dosyadaki komut satırı seçeneklerini ve dosyaları ekleyin.", + "Install_0_95014": "'{0}' yükle", + "Install_all_missing_types_packages_95033": "Tüm eksik tür paketlerini yükle", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' arabirimi, aynı anda '{1}' ve '{2}' türlerini genişletemez.", + "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' arabirimi, '{1}' arabirimini yanlış genişletiyor.", + "Interface_declaration_cannot_have_implements_clause_1176": "Arabirim bildirimi, 'implements' yan tümcesine sahip olamaz.", + "Interface_must_be_given_a_name_1438": "Arabirime bir ad verilmesi gerekir.", + "Interface_name_cannot_be_0_2427": "Arabirim adı '{0}' olamaz.", + "Interop_Constraints_6252": "Birlikte Çalışma Kısıtlamaları", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' eklemek yerine isteğe bağlı özellik türlerini yazıldıkları gibi yorumlayın.", + "Invalid_character_1127": "Geçersiz karakter.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Geçersiz '{0}' içeri aktarma tanımlayıcısında olası çözünürlük yok.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Genişletmedeki modül adı geçersiz. '{0}' modülü, '{1}' konumundaki türü belirsiz ve genişletilemeyen bir modüle çözümleniyor.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Genişletmedeki modül adı geçersiz; '{0}' adlı modül bulunamıyor.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Yeni ifadeden geçersiz isteğe bağlı zincir. '{0}()' çağrısı mı yapmak istediniz?", + "Invalid_reference_directive_syntax_1084": "Geçersiz 'reference' yönergesi söz dizimi.", + "Invalid_syntax_in_decorator_1498": "Dekoratörde geçersiz söz dizimi.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Geçersiz '{0}' kullanımı. Bu ifade bir sınıf statik bloğu içinde kullanılamaz.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Geçersiz '{0}' kullanımı. Modüller otomatik olarak katı moddadır.", + "Invalid_use_of_0_in_strict_mode_1100": "Katı modda geçersiz '{0}' kullanımı.", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' için geçersiz değer.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' için geçersiz değer. '{0}' geçerli bir tanımlayıcı değil.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Bu iki şablon ifadesini ayırmak için virgül koymamış olabilirsiniz. Bu ifadeler, çağrılamayacak etiketli bir şablon ifadesi oluşturur.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "'{0}' öğe türü geçerli bir JSX öğesi değil.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "'{0}' örnek türü geçerli bir JSX öğesi değil.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "'{0}' dönüş türü geçerli bir JSX öğesi değil.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "'{0}' türü geçerli bir JSX öğe türü değil.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}', 'extends {2}' yan tümcesiyle eşleşmiyor.", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' bir sınıfa eklenmemiş.", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' yalnızca bir imzanın son parametresi içinde görünebilir.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' etiketinin adı '{0}' ancak bu ada sahip bir parametre yok.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' etiketi '{0}' adına sahip ancak bu ada sahip bir parametre yok. Bir dizi türü olsaydı 'arguments' ile eşleşirdi.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef, TypeScript türüne dönüştürülmüş olabilir.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' etiketi bir tür ek açıklamasına sahip olmalıdır veya sonrasında '@property' ya da '@member' etiketlerinden biri gelmelidir.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef’leri, TypeScript türlerine dönüştürülmüş olabilir.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc türleri yalnızca belge açıklamalarının içinde kullanılabilir.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc türleri TypeScript türlerine taşınabilir.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX özniteliklerine yalnızca boş olmayan 'expression' ifadesi atanabilir.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "'{0}' adlı JSX öğesine karşılık gelen bir kapatma etiketi yok.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX öğe sınıfı, '{0}' özelliğine sahip olmadığı için öznitelikleri desteklemiyor.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Herhangi bir arabirim 'JSX.{0}' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Genel türdeki 'JSX.Element' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX öğesi türü '{0}', oluşturma veya çağrı imzasına sahip değil.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX öğeleri aynı ada sahip birden fazla özniteliğe sahip olamaz.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX ifadeleri virgül işlecini kullanamaz. Bir dizi mi yazmak istediniz?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX ifadelerinin bir üst öğesi olmalıdır.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX parçasına karşılık gelen bir kapatma etiketi yok.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX özellik erişimi ifadeleri JSX ad alanı adlarını içeremez", + "JSX_spread_child_must_be_an_array_type_2609": "JSX yayılma alt öğesi, bir dizi türü olmalıdır.", + "JavaScript_Support_6247": "JavaScript Desteği", + "Jump_target_cannot_cross_function_boundary_1107": "Atlama hedefi işlev sınırını geçemez.", + "KIND_6034": "TÜR", + "Keywords_cannot_contain_escape_characters_1260": "Anahtar sözcükler kaçış karakterleri içeremez.", + "LOCATION_6037": "KONUM", + "Language_and_Environment_6254": "Dil ve Ortam", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Virgül işlecinin sol tarafı kullanılmıyor ve herhangi bir yan etkisi yok.", + "Library_0_specified_in_compilerOptions_1422": "compilerOptions içinde belirtilen '{0}' kitaplığı", + "Library_referenced_via_0_from_file_1_1405": "'{1}' dosyasından '{0}' aracılığıyla başvurulan kitaplık", + "Line_break_not_permitted_here_1142": "Burada satır sonuna izin verilmez.", + "Line_terminator_not_permitted_before_arrow_1200": "Oktan önce satır sonlandırıcısına izin verilmez.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Bir modül çözümlenirken aranacak dosya adı son eklerinin listesi.", + "List_of_folders_to_include_type_definitions_from_6161": "Eklenecek tür tanımlarının alınacağı klasörlerin listesi.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Birleştirilmiş içerikleri, çalışma zamanında proje yapısını temsil eden kök klasörlerin listesi.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "'{1}' kök dizininden '{0}' yükleniyor; aday konumu: '{2}'.", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türleri: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türleri: {1}.", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' işlemi sırasında kullanılan yolları günlüğe kaydet.", + "Longest_matching_prefix_for_0_is_1_6108": "'{0}' için eşleşen en uzun ön ek: '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' klasöründe aranıyor; ilk konum: '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tüm 'super()' çağrılarını kendi oluşturucularının ilk deyimi yap", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Dize, sayı veya simge yerine yalnızca dönüş dizelerinin anahtarını oluşturun. Eski seçenek.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Oluşturucudaki ilk deyime 'super()' tarafından çağrı yapılmasını sağla", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Eşleştirilmiş nesne türü örtük olarak 'any' şablon türüne sahip.", + "Mark_array_literal_as_const_90070": "Sabit değerli dizileri const olarak işaretle", + "Matched_0_condition_1_6403": "'{0}' koşulu '{1}' eşleşti.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Varsayılan '**/*' ekleme deseniyle eşleşti", + "Matched_by_include_pattern_0_in_1_1407": "'{1}' içindeki '{0}' ekleme desenine göre eşleştirildi", + "Member_0_implicitly_has_an_1_type_7008": "'{0}' üyesi örtük olarak '{1}' türüne sahip.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' üyesi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Merge_conflict_marker_encountered_1185": "Birleştirme çakışması işaretçisiyle karşılaşıldı.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "'{0}' birleştirilen bildirimi, varsayılan bir dışarı aktarma bildirimini içeremez. Bunun yerine ayrı bir 'export default {0}' bildirimi eklemeyi göz önünde bulundurun.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "'{0}' meta-özelliğine yalnızca bir işlev bildiriminin, işlev ifadesinin veya oluşturucunun gövdesinde izin verilir.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' metodu abstract olarak işaretlendiğinden bir uygulamaya sahip olamaz.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Dışarı aktarılan arabirimin '{0}' metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Dışarı aktarılan arabirimin '{0}' metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metodun --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", + "Method_not_implemented_95158": "Metot uygulanmadı.", + "Modifiers_cannot_appear_here_1184": "Değiştiriciler burada görüntülenemez.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' modülü yalnızca varsayılan olarak '{1}' bayrağı kullanılarak içeri aktarılabilir", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "'{0}' modülü bu yapı kullanılarak içe aktarılamaz. Belirtici yalnızca 'require' ile içe aktarılamayan bir ES modülüne çözümlenir. Bunun yerine bir ECMAScript içe aktarma kullanın.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak '{2}' olarak dışarı aktarıldı.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak dışarı aktarılmadı.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "'{0}' modülü bir türe başvurmuyor ancak burada bir tür olarak kullanılmış. Şunu mu demek istediniz?: 'typeof import('{0}')'", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "'{0}' modülü bir değere başvurmuyor ancak burada bir değer olarak kullanılmış.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "{0} modülü, '{1}' adlı bir üyeyi zaten dışarı aktardı. Belirsizliği çözmek için açık olarak yeniden dışarı aktarmayı göz önünde bulundurun.", + "Module_0_has_no_default_export_1192": "'{0}' modülü için varsayılan dışarı aktarma yok.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "'{0}' modülünün varsayılan dışarı aktarması yok. Bunun yerine 'import { {1} } from {0}' kullanmak mı istediniz?", + "Module_0_has_no_exported_member_1_2305": "'{0}' modülü, dışarı aktarılan '{1}' üyesine sahip değil.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' modülünün dışarı aktarılmış '{1}' üyesi yok. Bunun yerine 'import {1} from {0}' kullanmak mı istediniz?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' modülü, aynı ada sahip bir yerel bildirim tarafından gizleniyor.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "'{0}' modülü 'export =' kullanıyor ve 'export *' ile birlikte kullanılamaz.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' modülü, '{1}' dosyasında yerel olarak bildirilmiş çevresel modül olarak çözümlendi.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' modülü '{1}' olarak çözümlendi, ancak '--allowArbitraryExtensions' ayarlanmadı.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "'{0}' modülü '{1}' olarak çözüldü ancak '--jsx' ayarlanmadı.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' modülü '{1}' olarak çözümlendi ancak '--resolveJsonModule' kullanılmadı.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Modül bildirim adları yalnızca ' veya \" tırnak içine alınmış dizeleri kullanabilir.", + "Module_name_0_matched_pattern_1_6092": "Modül adı: '{0}', eşleşen desen: '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== '{0}' modül adı çözümlenemedi. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== '{0}' modül adı '{1}' öğesine başarıyla çözümlendi. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== '{0}' modül adı '{2}' Paket Kimliğiyle '{1}' olarak başarıyla çözümlendi. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Modül çözümleme türü belirtilmedi, '{0}' kullanılıyor.", + "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' kullanarak modül çözümleme başarısız oldu.", + "Modules_6244": "Modüller", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Etiketlenmiş demet öğesi değiştiricilerini etiketlere taşı", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Varsayılan dışarı aktarmadaki ifadeyi bir değişkene taşıyın ve bir tür ek açıklaması ekleyin.", + "Move_to_a_new_file_95049": "Yeni bir dosyaya taşı", + "Move_to_file_95178": "Dosyaya taşı", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Birbirini izleyen birden çok sayısal ayırıcıya izin verilmez.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Birden çok oluşturucu uygulamasına izin verilmez.", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "YENİ SATIR", + "Name_is_not_valid_95136": "Ad geçerli değil", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Adlandırılmış yakalama grupları yalnızca 'ES2018' veya üzeri hedeflenirken kullanılabilir.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Aynı ada sahip adlandırılmış yakalama grupları birbirini dışlamalıdır.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Ertelenmiş içeri aktarmalarda adlandırılmış içeri aktarmalara izin verilmez.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module', '{0}' olarak ayarlandığında JSON dosyasından ECMAScript modülüne adlandırılmış içeri aktarmalara izin verilmez.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' ve '{2}' türündeki '{0}' adlı özellikler aynı değil.", + "Namespace_0_has_no_exported_member_1_2694": "'{0}' ad alanında dışarı aktarılan '{1}' üyesi yok.", + "Namespace_must_be_given_a_name_1437": "Ad alanına bir ad verilmesi gerekir.", + "Namespace_name_cannot_be_0_2819": "Ad alanı “{0}” olamaz.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' etkinken genel betik dosyalarında ad alanlarına izin verilmiyor. Bu dosyanın genel bir betik olması amaçlanmamışsa, 'moduleDetection'i 'force' olarak ayarlayın veya boş bir 'export {}' deyimi ekleyin.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "'this' parametrelerine ne dekoratörler ne de değiştiriciler uygulanamaz.", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Hiçbir temel oluşturucu, belirtilen tür bağımsız değişkeni sayısına sahip değil.", + "No_constituent_of_type_0_is_callable_2755": "'{0}' türünde çağrılabilir bileşen yok.", + "No_constituent_of_type_0_is_constructable_2759": "'{0}' türünde oluşturulabilir bileşen yok.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' türü üzerinde '{0}' türünde parametreye sahip dizin imzası bulunamadı.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' yapılandırma dosyasında giriş bulunamadı. Belirtilen 'include' yolları: '{1}', 'exclude' yolları: '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Artık desteklenmiyor. Önceki sürümlerde, dosyaları okumak için metin kodlamasını el ile ayarlayın.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} bağımsız değişken bekleyen aşırı yükleme yok ancak {1} veya {2} bağımsız değişken bekleyen aşırı yüklemeler var.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} tür bağımsız değişkeni bekleyen aşırı yükleme yok ancak {1} veya {2} tür bağımsız değişkeni bekleyen aşırı yüklemeler var.", + "No_overload_matches_this_call_2769": "Bu çağrıyla eşleşen aşırı yükleme yok.", + "No_type_could_be_extracted_from_this_type_node_95134": "Bu tür düğümünden tür ayıklanamadı", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "'{0}' toplu özelliği için kapsamda değer yok. Bir değer tanımlayın ya da bir başlatıcı sağlayın.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Soyut olmayan '{0}' sınıfı, '{2}' sınıfından devralınan {1} soyut üyesini uygulamaz.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2} ve {3} tane daha.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Soyut olmayan sınıf ifadesi, '{1}' sınıfından devralınan '{0}' soyut üyesini uygulamıyor.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinin uygulamaları eksik: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinde uygulamalar eksik: {1} ve {2} tane daha.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Null olmayan onaylamalar yalnızca TypeScript dosyalarında kullanılabilir.", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "Basit olmayan parametre burada bildirildi.", + "Not_all_code_paths_return_a_value_7030": "Tüm kod yolları bir değer döndürmez.", + "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' türündeki tüm bileşenler çağrılabilir değil.", + "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' türündeki tüm bileşenler oluşturulabilir değil.", + "Numbers_out_of_order_in_quantifier_1506": "Sayılar niceleyicide sıranın dışında.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "2^53 veya üzeri mutlak değerlere sahip sayısal sabit değerler, tamsayı olarak doğru bir şekilde temsil edilemeyecek kadar büyüktür.", + "Numeric_separators_are_not_allowed_here_6188": "Burada sayısal ayırıcılara izin verilmez.", + "Object_is_of_type_unknown_2571": "Nesne 'unknown' türünde.", + "Object_is_possibly_null_2531": "Nesne büyük olasılıkla 'null'.", + "Object_is_possibly_null_or_undefined_2533": "Nesne büyük olasılıkla 'null' veya 'undefined'.", + "Object_is_possibly_undefined_2532": "Nesne büyük olasılıkla 'undefined'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Nesne sabit değeri yalnızca bilinen özellikleri belirtebilir ve '{0}', '{1}' türünde değil.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Nesne sabit değerinde yalnızca bilinen özellikler belirtilebilir, ancak '{0}', '{1}' türünde yok. '{2}' yazmak mı istediniz?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "'{0}' nesne sabit değeri özelliği, örtük olarak '{1}' türüne sahip.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Toplu özellikler içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Yayma atamaları içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", + "Octal_digit_expected_1178": "Sekizli basamak bekleniyor.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Karakter sınıfında sekizli kaçış dizilerine ve geri başvurulara izin verilmiyor. Bu bir kaçış dizisi olarak amaçlandıysa, yerine '{0}' kullanın.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sekizli kaçış dizilerine izin verilmiyor. '{0}' söz dizimini kullanın.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Sabit değerli sekizliklere izin verilmiyor. '{0}' söz dizimini kullanın.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' değerlerinden biri '{2}' dizesidir ve diğer değerin bilinmeyen bir sayısal değer olduğu varsayılır.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' anahtar sözcüğüyle yalnızca void işlevi çağrılabilir.", + "Only_ambient_modules_can_use_quoted_names_1035": "Yalnızca çevresel modüller tırnak içinde ad kullanabilir.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} ile birlikte yalnızca 'amd' ve 'system' modülleri desteklenir.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Yalnızca const dizileri --isolatedDeclarations ile çıkarsanabilir.", + "Only_emit_d_ts_declaration_files_6014": "Yalnızca '.d.ts' bildirim dosyalarını yayımla.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript dosyalarının değil yalnızca d.ts dosyalarının çıkışını alın.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' anahtar sözcüğüyle yalnızca temel sınıfa ait ortak ve korunan metotlara erişilebilir.", + "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' işleci '{1}' türüne uygulanamıyor.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' işleci, '{1}' ve '{2}' türüne uygulanamaz.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "İşleçler bir karakter sınıfı içinde karıştırılmamalıdır. Bunun yerine iç içe bir sınıfta sarmalayın.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Düzenleme sırasında bir projeyi çok projeli başvuru denetiminin dışında tutun.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' seçeneği kullanım dışı bırakıldı ve TypeScript {2} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{3}\"' olarak belirtin.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'false' veya 'null' olarak ayarlanabilir.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'null' olarak ayarlanabilir.", + "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' seçeneği yalnızca komut satırında belirtilebilir.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0} seçeneği yalnızca '--inlineSourceMap' veya '--sourceMap' seçeneği sağlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Seçenek '{0}' yalnızca 'moduleResolution' değeri 'node16', 'nodenext' veya 'bundler' olarak ayarlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "'{0}' seçeneği yalnızca 'module' 'preserve', 'commonjs' veya 'es2015' ya da daha yeni bir değere ayarlandığında kullanılabilir.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' seçeneği '{1}' olduğunda '{0}' seçeneği belirtilemez.", + "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' seçeneği, '{1}' seçeneği ile belirtilemez.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{0}' seçeneği, '{1}' seçeneği belirtilmeden belirtilemez.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' seçeneği veya '{2}' seçeneği belirtilmeden '{0}' seçeneği belirtilemez.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "'{0}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}' seçeneği kullanım dışı bırakıldı ve TypeScript {1} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{2}\"' olarak belirtin.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' seçeneği gereksiz ve '{1}' seçeneği ile belirtilemez.", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "'allowImportingTsExtensions' seçeneği, yalnızca 'noEmit', 'emitDeclarationOnly' veya 'rewriteRelativeImportExtensions' ayarlandığında kullanılabilir.", + "Option_build_must_be_the_first_command_line_argument_6369": "'--build' seçeneği ilk komut satırı bağımsız değişkeni olmalıdır.", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' seçeneği, yalnızca '--module' sağlandığında veya 'target' seçeneği 'ES2015' veya daha yüksek bir sürüm değerine sahip olduğunda kullanılabilir.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' seçeneği '{1}' olarak ayarlandığında 'moduleResolution' seçeneği '{0}' olarak ayarlanmalıdır (veya belirtilmemiş olarak bırakılmalıdır).", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' seçeneği '{1}' olarak ayarlandığında 'module' seçeneği '{0}' olarak ayarlanmalıdır.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "'project' seçeneği, komut satırındaki kaynak dosyalarıyla karıştırılamaz.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' 'classic' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' 'none', 'classic' veya 'umd' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' değeri 'UMD', 'AMD' veya 'System' olarak ayarlandığında 'verbatimModuleSyntax' seçeneği kullanılamaz.", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "'{0}' ve '{1}' seçenekleri birleştirilemez.", + "Options_Colon_6027": "Seçenekler:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "Diğer Çıkışlar", + "Output_Formatting_6256": "Çıkış Biçimlendirmesi", + "Output_compiler_performance_information_after_building_6615": "Derleme sonrasında derleyici performans bilgilerinin çıkışını alın.", + "Output_directory_for_generated_declaration_files_6166": "Oluşturulan bildirim dosyaları için çıkış dizini.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Çıkış dosyası '{0}' '{1}' kaynak dosyasından oluşturulmamış.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Derleme sonrasında derleyici performans bilgilerinin daha ayrıntılı çıkışını alın.", + "Overload_0_of_1_2_gave_the_following_error_2772": "{0}/{1} aşırı yükleme '{2}' imzası, aşağıdaki hatayı verdi.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Aşırı yükleme imzalarının hepsi soyut veya soyut olmayan olmalıdır.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Aşırı yükleme imzalarının tümü çevresel veya çevresel olmayan türde olmalıdır.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Aşırı yükleme imzalarının hepsi dışarı aktarılmış veya dışarı aktarılmamış olmalıdır.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Aşırı yükleme imzalarının tümü isteğe bağlı veya gerekli olmalıdır.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Aşırı yükleme imzalarının tümü ortak, özel veya korumalı olmalıdır.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "'{0}' parametresi, kendisinden sonra bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Parameter_0_cannot_reference_itself_2372": "'{0}' parametresi kendisine başvuramaz.", + "Parameter_0_implicitly_has_an_1_type_7006": "'{0}' parametresi örtük olarak '{1}' türüne sahip.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "'{0}' parametresi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "'{0}' parametresi, '{1}' parametresi ile aynı konumda değil.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Erişimcinin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Erişimcinin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Erişimcinin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Dışarı aktarılan işlevin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Dışarı aktarılan işlevin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Dışarı aktarılan işlevin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{2}' adlı özel modüldeki '{1}' adına sahip ya da bu adı kullanıyor.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{1}' adına sahip ya da bu adı kullanıyor.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametre soru işareti ve başlatıcı içeremez.", + "Parameter_declaration_expected_1138": "Parametre bildirimi bekleniyor.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametrenin adı var ancak türü yok. Şunu mu demek istediniz: '{0}: {1}'?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametre değiştiricileri yalnızca TypeScript dosyalarında kullanılabilir.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametrenin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Katı modda ayrıştırın ve her kaynak dosya için \"use strict\" kullanın.", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json içindeki 'files' listesinin parçası", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' deseni en fazla bir adet '*' karakteri içerebilir.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' veya '--extendedDiagnostics' için performans zamanlamaları bu oturumda kullanılamaz. Web performans API'sinin yerel bir uygulaması bulunamadı.", + "Platform_specific_6912": "Platforma özel", + "Prefix_0_with_an_underscore_90025": "'{0}' için ön ek olarak alt çizgi kullan", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Hatalı tüm özellik bildirimlerinin başına 'declare' ekleyin", + "Prefix_all_unused_declarations_with_where_possible_95025": "Mümkün olduğunda tüm kullanılmayan bildirimlerin başına '_' ekle", + "Prefix_with_declare_95094": "Başına 'declare' ekleyin", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "JavaScript çıktısında, içeri aktarılmazsa kaldırılacak olan kullanılmayan içe aktarılan değerleri koruyun.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Derleme sırasında okunan tüm dosyaları yazdırın.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Derleme sırasında, neden dahil edildiğini de içerecek şekilde okunan dosyaları yazdırın.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Dosya adlarını ve bunların derlemenin bir parçası olmalarının nedenini yazdır.", + "Print_names_of_files_part_of_the_compilation_6155": "Derlemenin parçası olan dosyaların adlarını yazdırın.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Derlemenin parçası olan dosyaların adlarını yazdırın ve sonra işlemeyi durdurun.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Oluşturulan dosyalardan, derlemenin parçası olanların adlarını yazdırın.", + "Print_the_compiler_s_version_6019": "Derleyici sürümünü yazdır.", + "Print_the_final_configuration_instead_of_building_1350": "Derlemek yerine son yapılandırmayı yazdırın.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Derleme sonrasında yayılan dosyaların adlarını yazdırın.", + "Print_this_message_6017": "Bu iletiyi yazdır.", + "Private_accessor_was_defined_without_a_getter_2806": "Özel erişimci bir alıcı olmadan tanımlandı.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Özel alan '{0}' kapsayan sınıfta bildirilmelidir.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Değişken bildirimlerinde özel tanımlayıcılara izin verilmiyor.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Sınıf gövdelerinin dışında özel tanımlayıcılara izin verilmiyor.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Özel tanımlayıcılara yalnızca sınıf gövdelerinde izin verilir ve yalnızca bir sınıf üyesi bildiriminin parçası olarak, özellik erişimi olarak veya ‘in’ ifadesinin sol tarafında kullanılabilirler.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Özel tanımlayıcılar yalnızca ECMAScript 2015 veya üzeri hedeflenirken kullanılabilir.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Özel tanımlayıcılar parametre olarak kullanılamaz.", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Özel veya korumalı '{0}' üyesine bir tür parametresinde erişilemiyor.", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan proje derlenemiyor", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden proje derlenemiyor", + "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' projesi zorla yeniden oluşturuluyor", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Buildinfo dosyası '{1}', '{2}' dosyasının derlemenin kök dosyası iken artık öyle olmadığını belirttiğinden '{0}' projesi güncel değil.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Buildinfo dosyası '{1}' programın hataları bildirmesi gerektiğini belirttiğinden '{0}' projesi güncel değil.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "'{1}' buildinfo dosyası bazı değişikliklerin gösterilmediğini belirttiğinden '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Buildinfo dosyası '{1}' compilerOptions içinde değişiklik olduğunu belirttiğinden '{0}' proje adı güncel değil", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "'{1}' çıkışı '{2}' girişinden daha eski olduğundan '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Çıkış dosyası '{1}' mevcut olmadığından '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' projesinin çıkışı geçerli '{2}' sürümünden farklı olan '{1}' sürümü ile oluşturulduğundan proje güncel değil", + "Project_0_is_up_to_date_6361": "'{0}' projesi güncel", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "En yeni '{1}' girişi '{2}' çıkışından daha eski olduğundan '{0}' projesi güncel", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "'{0}' projesi güncel ancak giriş dosyalarından daha eski olan çıkış dosyalarına ait zaman damgalarının güncelleştirilmesi gerekiyor", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' projesi bağımlılıklarından d.ts dosyaları ile güncel", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Proje başvuruları döngüsel bir grafik formu oluşturamaz. Döngü tespit edildi: {0}", + "Projects_6255": "Projeler", + "Projects_in_this_build_Colon_0_6355": "Bu derlemedeki projeler: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' değiştiricisine sahip özellikler yalnızca ECMAScript 2015 ve üzeri hedeflendiğinde kullanılabilir.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' özelliği abstract olarak işaretlendiğinden bir başlatıcıya sahip olamaz.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' özelliği bir dizin imzasından geldiğinden ['{0}'] ile erişilmelidir.", + "Property_0_does_not_exist_on_type_1_2339": "'{0}' özelliği, '{1}' türünde değil.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' özelliği '{1}' türünde yok. Bunu mu demek istediniz: '{2}'?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' özelliği '{1}' türünde yok. Bunun yerine '{2}' statik üyesine erişmek mi istediniz?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' özelliği '{1}' türünde yok. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{2}' veya üzeri olarak değiştirmeyi deneyin.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "'{0}' özelliği '{1}' türünde yok. 'Lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' özelliği başlatıcı içermiyor ve kesinlikle bir sınıf statik bloğuna atanmamış.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "'{0}' özelliği başlatıcı içermiyor ve oluşturucuda kesin olarak atanmamış.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' özelliği, get erişimcisinin dönüş türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' özelliği, set erişimcisinin parametre türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin get erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin set erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "'{1}' türündeki '{0}' özelliği, '{2}' temel türündeki aynı özelliğe atanamaz.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "'{1}' türündeki '{0}' özelliği, '{2}' türüne atanamaz.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "'{1}' türündeki '{0}' özelliği, '{2}' türünün içinden erişilemeyen farklı bir üyeye başvuruyor.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "'{0}' özelliği bildirildi ancak değeri hiç okunmadı.", + "Property_0_is_incompatible_with_index_signature_2530": "'{0}' özelliği, dizin imzasıyla uyumsuz.", + "Property_0_is_missing_in_type_1_2324": "'{0}' özelliği '{1}' türünde değil.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "'{0}' özelliği, '{1}' türünde eksik ancak '{2}' türünde gereklidir.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "'{0}' özelliğinin özel tanımlayıcısı olduğundan özelliğe '{1}' sınıfı dışında erişilemiyor.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' özelliği, '{1}' türünde isteğe bağlıdır, ancak '{2}' türünde gereklidir.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' özelliği özeldir ve yalnızca '{1}' sınıfı içinden erişilebilir.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' özelliği, '{1}' türünde özel, '{2}' türünde özel değildir.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' özelliği korunuyor ve yalnızca '{1}' sınıfının bir örneği üzerinden erişilebilir. Bu, '{2}' sınıfının bir örneğidir.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' özelliği korumalıdır ve yalnızca '{1}' sınıfı içinden ve alt sınıflarından erişilebilir.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' özelliği korumalıdır; ancak '{1}' türü, '{2}' öğesinden türetilmiş bir sınıf değildir.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' özelliği '{1}' türünde korumalı, '{2}' türünde ise ortaktır.", + "Property_0_is_used_before_being_assigned_2565": "'{0}' özelliği atanmadan önce kullanıldı.", + "Property_0_is_used_before_its_initialization_2729": "'{0}' özelliği başlatılmadan önce kullanılıyor.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' özelliği '{1}' türü üzerinde olamaz. Şunu mu demek istediniz: '{2}'?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX yayılma özniteliğine ait '{0}' özelliği, hedef özelliğe atanamaz.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Dışarı aktarılan anonim sınıf türünün '{0}' özelliği, özel veya korumalı olmayabilir.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Dışarı aktarılan arabirimin '{0}' özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Dışarı aktarılan arabirimin '{0}' özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{1}' türündeki '{0}' özelliği '{2}' dizin türüne '{3}' atanamaz.", + "Property_0_was_also_declared_here_2733": "'{0}' özelliği de burada bildirildi.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' özelliği '{1}' içindeki temel özelliğin üzerine yazacak. Bu bilerek yapılıyorsa bir başlatıcı ekleyin. Aksi takdirde, bir 'declare' değiştiricisi ekleyin veya gereksiz bildirimi kaldırın.", + "Property_assignment_expected_1136": "Özellik ataması bekleniyor.", + "Property_destructuring_pattern_expected_1180": "Özellik yok etme deseni bekleniyor.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Özelliğin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Property_or_signature_expected_1131": "Özellik veya imza bekleniyor.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Özellik değeri yalnızca, dize sabit değeri, sayısal sabit değer, 'true', 'false', 'null', nesne sabit değeri veya dizi sabit değeri olabilir.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5' hedeflenirken, 'for-of' içindeki yinelenebilir öğeler için yayılma ve yok etmeye yönelik tam destek sağlayın.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Dışarı aktarılan sınıfın '{0}' genel metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "'{0}' tam adının başında '@param {object} {1}' olmadan bu ada izin verilmiyor.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "İşlev parametresi okunmadığında hata oluştur.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Belirtilen 'any' türüne sahip ifade ve bildirimlerde hata oluştur.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Örtük olarak 'any' türü içeren 'this' ifadelerinde hata tetikle.", + "Range_out_of_order_in_character_class_1517": "Aralık karakter sınıfında sıranın dışında.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' etkinken bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.", + "React_components_cannot_include_JSX_namespace_names_2639": "React bileşenleri JSX ad alanı adlarını içeremez", + "Recommended_Options_6294": "Önerilen Seçenekler", + "Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript tarafından otomatik olarak yüklenen projelerin sayısını azaltın.", + "Referenced_project_0_may_not_disable_emit_6310": "Başvurulan '{0}' projesi, yayma özelliğini devre dışı bırakamaz.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.", + "Referenced_via_0_from_file_1_1400": "'{1}' dosyasından '{0}' aracılığıyla başvuruldu", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution' 'node16' veya 'nodenext' olduğunda, bağıl içe aktarma yollarının ECMAScript içe aktarmalarında açık dosya uzantılarına ihtiyacı vardır. İçe aktarma yoluna bir uzantı eklemeyi düşünün.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda ECMAScript içeri aktarmalarında açık dosya uzantılarına ihtiyaç duyar. Şunu mu demek istediniz: '{0}'?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "İzleme işleminden dizinlerin listesini kaldırın.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "İzleme modu işlemesinden bir dosya listesini kaldırın.", + "Remove_all_unnecessary_override_modifiers_95163": "Tüm gereksiz 'override' değiştiricilerini kaldır", + "Remove_all_unnecessary_uses_of_await_95087": "Tüm gereksiz 'await' kullanımlarını kaldırın", + "Remove_all_unreachable_code_95051": "Tüm erişilemeyen kodları kaldır", + "Remove_all_unused_labels_95054": "Kullanılmayan tüm etiketleri kaldır", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "İlgili sorunları olan tüm ok işlev gövdelerinden ayraçları kaldır", + "Remove_braces_from_arrow_function_95060": "Ok işlevinden küme ayraçlarını kaldır", + "Remove_braces_from_arrow_function_body_95112": "Ok işlevi gövdesinden küme ayraçlarını kaldır", + "Remove_import_from_0_90005": "'{0}' öğesinden içeri aktarmayı kaldır", + "Remove_override_modifier_95161": "'override' değiştiricisini kaldır", + "Remove_parentheses_95126": "Parantezleri kaldır", + "Remove_template_tag_90011": "Şablon etiketini kaldırın", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript dil sunucusundaki JavaScript dosyaları için toplam kaynak kodu boyutuna yönelik 20 MB sınırını kaldırın.", + "Remove_type_from_import_declaration_from_0_90055": "\"{0}\" içindeki içeri aktarma bildiriminden “type”ı kaldırın", + "Remove_type_from_import_of_0_from_1_90056": "\"{1}\" içindeki “{0}” içe aktarımından “type”ı kaldırın", + "Remove_type_parameters_90012": "Tür parametrelerini kaldırın", + "Remove_unnecessary_await_95086": "Gereksiz 'await' öğesini kaldırın", + "Remove_unreachable_code_95050": "Erişilemeyen kodları kaldır", + "Remove_unused_declaration_for_Colon_0_90004": "Kullanılmayan '{0}' bildirimini kaldırın.", + "Remove_unused_declarations_for_Colon_0_90041": "'{0}' için kullanılmayan bildirimleri kaldırın", + "Remove_unused_destructuring_declaration_90039": "Yapıyı bozan kullanılmayan bildirimi kaldır", + "Remove_unused_label_95053": "Kullanılmayan etiketi kaldır", + "Remove_variable_statement_90010": "Değişken deyimini kaldır", + "Rename_param_tag_name_0_to_1_95173": "“{0}” “@param” etiket adını “{1}” olarak yeniden adlandırın", + "Replace_0_with_Promise_1_90036": "'{0}' öğesini 'Promise<{1}>' ile değiştirin", + "Replace_all_unused_infer_with_unknown_90031": "Kullanılmayan tüm 'infer' öğelerini 'unknown' ile değiştirin", + "Replace_import_with_0_95015": "İçeri aktarma işlemini '{0}' ile değiştirin.", + "Replace_infer_0_with_unknown_90030": "'infer {0}' öğesini 'unknown' ile değiştirin", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "İşlevdeki tüm kod yolları bir değer döndürmediğinde hata bildir.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch deyiminde sonraki ifadelere geçiş ile ilgili hataları bildir.", + "Report_errors_in_js_files_8019": ".js dosyalarındaki hataları bildirin.", + "Report_errors_on_unused_locals_6134": "Kullanılmayan yerel öğelerdeki hataları bildirin.", + "Report_errors_on_unused_parameters_6135": "Kullanılmayan parametrelerdeki hataları bildirin.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Diğer araçların geçici olarak bildirim dosyaları oluşturabilmesi için dışarı aktarmalarda yeterli ek açıklama gerektir.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Gerekli tür parametreleri, isteğe bağlı tür parametrelerini takip edemez.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' modülünün çözümü '{1}' konumundaki önbellekte bulundu.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{0}' tür başvurusu yönergesinin çözümlemesi '{1}' konumundaki önbellekte bulundu.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Göreli olmayan ad çözümlenemedi; npm kitaplığı için yapılandırma güncelleştirmesi gerektirip gerekmediğini görmek için modern Düğüm çözümleme özellikleri ile deneniyor.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Göreli olmayan ad çözümlenemedi; projenin yapılandırma güncelleştirmesi gerektirip gerektirmediğini görmek için '--moduleResolution bundler' ile deneniyor.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'Keyof' değerini yalnızca dize değerli özellik adlarına (sayılar veya simgeler olmadan) çözümleyin.", + "Resolved_under_condition_0_6414": "'{0}' koşulu altında çözümlendi.", + "Resolving_in_0_mode_with_conditions_1_6402": "{0} modunda {1} koşullarıyla çözümleniyor.", + "Resolving_module_0_from_1_6086": "======== '{0}' modülü '{1}' öğesinden çözümleniyor. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "'{0}' modül adı, '{1}' - '{2}' temel url'sine göre çözümleniyor.", + "Resolving_real_path_for_0_result_1_6130": "'{0}' için gerçek yol çözümleniyor, sonuç: '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}', kök dizini: '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== '{0}' tür başvuru yönergesi çözümleniyor, içeren dosya '{1}', kök dizin ayarlanmadı. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin: '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin ayarlanmadı. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Özel typeRoots belirten program için tür başvurusu yönergesi çözümleniyor, 'node_modules' klasöründe arama atlanıyor.", + "Resolving_with_primary_search_path_0_6121": "Birincil arama yolu '{0}' kullanılarak çözümleniyor.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "'{0}' rest parametresi, örtük olarak 'any[]' türüne sahip.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "'{0}' REST parametresi örtük olarak 'any[]' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Rest_types_may_only_be_created_from_object_types_2700": "Rest türleri yalnızca nesne türlerinden oluşturulabilir.", + "Return_type_annotation_circularly_references_itself_2577": "Dönüş türü ek açıklaması döngüsel olarak kendine başvuruyor.", + "Return_type_must_be_inferred_from_a_function_95149": "Dönüş türü bir işlevden çıkarsanmalıdır", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Oluşturucu imzasının dönüş türü, sınıfın örnek türüne atanabilir olmalıdır.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Dışarı aktarılan işlevin dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Dışarı aktarılan işlevin dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Dışarı aktarılan işlevin dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", + "Rewrite_all_as_indexed_access_types_95034": "Tümünü dizinlenmiş erişim türleri olarak yeniden yaz", + "Rewrite_as_the_indexed_access_type_0_90026": "Dizine eklenmiş erişim türü '{0}' olarak yeniden yaz", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "'.ts', '.tsx', '.mts' ve '.cts' dosya uzantılarını, çıkış dosyalarındaki JavaScript eşdeğerlerine göreli içeri aktarma yollarında yeniden yazın.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Sol işlenen hiçbir zaman null olmadığından ?? sağ işlenenine ulaşılamıyor.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Kök dizin belirlenemiyor, birincil arama yolları atlanıyor.", + "Root_file_specified_for_compilation_1427": "Derleme için belirtilen kök dosyası", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "STRATEJİ", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Projelerin artımlı derlenmesini sağlamak için .tsbuildinfo dosyalarını kaydedin.", + "Saw_non_matching_condition_0_6405": "Eşleşmeyen koşul '{0}' görüldü.", + "Scoped_package_detected_looking_in_0_6182": "Kapsamlı paket algılandı, '{0}' içinde aranıyor", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Geri dönüş uzantıları için tüm üst node_modules dizinleri aranıyor: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Tercih edilen uzantılar için tüm üst node_modules dizinleri aranıyor: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Ayrıca bkz. https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Seçim geçerli bir veya daha fazla deyim değil", + "Selection_is_not_a_valid_type_node_95133": "Seçim geçerli bir tür düğümü değil", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Yayılan JavaScript için JavaScript dil sürümünü ayarlayın ve uyumlu kitaplık bildirimlerini ekleyin.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript’ten ileti dilini ayarlayın. Bu, yaymayı etkilemez.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Yapılandırma dosyanızdaki 'module' seçeneğini '{0}' olarak ayarlayın", + "Set_the_newline_character_for_emitting_files_6659": "Dosyaları yaymak için yeni satır karakterini ayarlayın.", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Yapılandırma dosyanızdaki 'target' seçeneğini '{0}' olarak ayarlayın", + "Setters_cannot_return_a_value_2408": "Ayarlayıcılar bir değer döndüremez.", + "Show_all_compiler_options_6169": "Tüm derleyici seçeneklerini gösterin.", + "Show_diagnostic_information_6149": "Tanılama bilgilerini gösterin.", + "Show_verbose_diagnostic_information_6150": "Ayrıntılı tanılama bilgilerini gösterin.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Nelerin derleneceğini (veya '--clean' ile belirtilmişse silineceğini) göster", + "Signature_0_must_be_a_type_predicate_1224": "'{0}' imzası bir tür koşulu olmalıdır.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "İmza bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Yukarı akış projesinde hata nedeniyle aşağı akış projelerini derlemeyi atla.", + "Skip_type_checking_all_d_ts_files_6693": "Tüm .d.ts dosyalarında tür denetimini atlayın.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript ile birlikte gelen .d.ts dosyaları için tür denetimini atlayın.", + "Skip_type_checking_of_declaration_files_6012": "Bildirim dosyalarının tür denetimini atla.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan projenin derlenmesi atlanıyor", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden projenin derlenmesi atlanıyor", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Mutlak bir URI gibi görünen '{0}' modül türü atlanıyor, hedef dosya türleri: {1}.", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Kaynakta {0} öğe var ancak hedef yalnızca {1} öğeye izin veriyor.", + "Source_has_0_element_s_but_target_requires_1_2618": "Kaynakta {0} öğe var ancak hedef {1} öğe gerektiriyor.", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Kaynak, hedefteki {0} konumunda bulunan gerekli öğe için eşleşme sağlamıyor.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Kaynak, hedefteki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe için eşleşme sağlamıyor.", + "Specify_ECMAScript_target_version_6015": "ECMAScript hedef sürümünü belirtin.", + "Specify_JSX_code_generation_6080": "JSX kodu oluşturmayı belirtin.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Tüm çıktıları tek bir JavaScript dosyasında paketleyen bir dosya belirt. 'declaration' değeri true ise, tüm .d.ts çıktısını paketleyen bir dosya da belirtir.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Derlemeye dahil edilecek dosyalarla eşleşen glob desenlerinin bir listesini belirtin.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Dahil edilecek dil hizmeti eklentilerinin listesini belirtin.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Hedef çalışma zamanı ortamını açıklayan bir paket kitaplık bildirim dosyası kümesi belirtin.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "İçeri aktarmaları ek arama konumlarına yeniden eşleyen bir girdi kümesi belirtin.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Projeler için yolları belirten nesnelerin bir dizisini belirtin. Proje başvurularında kullanılır.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Tüm yayılan dosyalar için bir çıkış klasörü belirtin.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Yalnızca türler için kullanılan içeri aktarmalar için üretme/denetleme davranışını belirt.", + "Specify_file_to_store_incremental_compilation_information_6380": "Artımlı derleme bilgilerinin depolanacağı dosyayı belirtin", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript’in belirli bir modül belirticisinden bir dosyayı nasıl arayacağını belirtin.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Özyinelemeli dosya izleme işlevselliği olmayan sistemlerde dizinlerin nasıl izleneceğini belirtin.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript izleme modunun nasıl çalıştığını belirtin.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Derlemeye dahil edilecek kitaplık dosyalarını belirtin.", + "Specify_module_code_generation_6016": "Modül kodu oluşturmayı belirtin.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' kullanırken JSX fabrika işlevlerini içeri aktarmak için kullanılan modül belirticisini belirt.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' gibi davranan birden çok klasör belirt.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Ayarlarının devralındığı temel yapılandırma dosyalarına yönelik bir veya daha fazla yol ya da düğüm modülü başvurusu belirtin.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Bildirim dosyalarının otomatik olarak alınması için seçenekleri belirtin.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Dosya sistemi olayları kullanılarak oluşturulamadığında yoklama izlemesi oluşturma stratejisini belirtin: 'FixedInterval' (varsayılan), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Özyinelemeli izlemeyi yerel olarak desteklemeyen platformlarda dizini izleme stratejisini belirtin: 'UseFsEvents' (varsayılan), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Dosya izleme stratejisini belirtin: 'FixedPollingInterval' (varsayılan), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX yayma hedeflenirken parçalar için kullanılacak JSX Parça başvurusunu belirtin, örneğin 'React.Fragment' veya 'Fragment'.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'React.createElement' veya 'h' gibi 'react' JSX emit hedeflerken kullanılacak JSX fabrika işlevini belirtin.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX üretme hedeflenirken kullanılacak JSX fabrika işlevini belirtin; örneğin 'React.createElement' veya 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' derleme seçeneği belirtilmiş olarak 'react' JSX yaymasını hedeflerken kullanılacak JSX parçası fabrika işlevini belirtin (ör. 'Fragment').", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Göreli olmayan modül adlarını çözümlemek için temel dizini belirtin.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Dosyalar gösterilirken kullanılacak satır sonu dizisini belirtin: 'CRLF' (dos) veya 'LF' (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Hata ayıklayıcının TypeScript dosyalarını kaynak konumlar yerine nerede bulması gerektiğini belirtin.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Hata ayıklayıcının, eşlem dosyalarını üretilen konumlar yerine nerede bulması gerektiğini belirtin.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' öğesinden JavaScript dosyaları teslim almak için kullanılan maksimum klasör derinliğini belirtin. Yalnızca 'allowJs' ile geçerlidir.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için kullanılacak modül tanımlayıcısını (ör. react) belirtin.", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' için çağrılan nesneyi belirtin. Bu, yalnızca 'react' JSX üretme hedeflenirken geçerlidir.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Oluşturulan bildirim dosyaları için çıkış dizinini belirtin.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo artımlı derleme dosyasının yolunu belirtin.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Giriş dosyalarının kök dizinini belirtin. Çıkış dizininin yapısını --outDir ile denetlemek için kullanın.", + "Specify_the_root_folder_within_your_source_files_6690": "Kaynak dosyalarınızda kök klasörü belirtin.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Başvuru kaynak kodunu bulmak için hata ayıklayıcıların kök yolunu belirtin.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Bir kaynak dosyada başvurulmadan eklenecek tür paketi adlarını belirtin.", + "Specify_what_JSX_code_is_generated_6646": "Oluşturulacak JSX kodunu belirtin.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Sistemde yerel dosya izleyicileri tükenirse izleyicinin kullanması gereken yaklaşımı belirtin.", + "Specify_what_module_code_is_generated_6657": "Oluşturulan modül kodunu belirtin.", + "Split_all_invalid_type_only_imports_1367": "Geçersiz tüm yalnızca tür içeri aktarmalarını bölün", + "Split_into_two_separate_import_declarations_1366": "İki ayrı içeri aktarma bildirimine bölün", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' ifadelerindeki yayılma işleci yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", + "Spread_types_may_only_be_created_from_object_types_2698": "Yayılma türleri yalnızca nesne türlerinden oluşturulabilir.", + "Starting_compilation_in_watch_mode_6031": "Derleme, izleme modunda başlatılıyor...", + "Statement_expected_1129": "Deyim bekleniyor.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Çevresel bağlamlarda deyimlere izin verilmez.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statik üyeler sınıf türündeki parametrelere başvuramaz.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "'{0}' statik özelliği, '{1}' oluşturucu işlevinin yerleşik özelliği olan 'Function.{0}' ile çakışıyor.", + "Stricter_Typechecking_Options_6292": "Daha Katı Tür Denetimi Seçenekleri", + "String_literal_expected_1141": "Dize sabit değeri bekleniyor.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' bayrağı 'es2015' veya 'es2020' olarak ayarlandığında, sabit değerli dize içeri ve dışarı aktarma adları desteklenmez.", + "String_literal_with_double_quotes_expected_1327": "Çift tırnak içine alınmış bir dize sabit değeri bekleniyor.", + "Style_Options_6293": "Stil Seçenekleri", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Renk ve bağlam kullanarak hataların ve iletilerin stilini belirleyin (deneysel).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Eksi işareti varken alt sayfa bayrakları bulunmalıdır.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Ardışık özellik bildirimleri aynı türe sahip olmalıdır. '{0}' özelliği '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Ardışık değişken bildirimleri aynı türe sahip olmalıdır. '{0}' değişkeni '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' deseni için '{0}' alternatifinin türü hatalı; beklenen: 'string' alınan: '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "'{1}' desenindeki '{0}' alternatifi en fazla bir '*' karakteri içerebilir.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "'{0}' deseni için değişimler bir dizi olmalıdır.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "'{0}' deseni için değiştirme değeri boş bir dizi olamaz.", + "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json dosyası başarıyla oluşturuldu.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Super çağrılarına oluşturucu dışında veya oluşturucu içindeki iç içe işlevlerde izin verilmez.", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "Nesne sabit değerlerine ait fazla özellik denetimlerini gösterme.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Dizin imzaları olmayan nesneler için dizin oluştururken noImplicitAny hatalarını gösterme.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Dizin imzası olmayan nesnelerin dizinini oluştururken 'noImplicitAny' hatalarını gizle.", + "Switch_each_misused_0_to_1_95138": "Yanlış kullanılan tüm '{0}' öğelerini '{1}' olarak değiştir", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Geri çağırmaları eşzamanlı olarak çağırın ve özyinelemeli izlemeyi yerel olarak desteklemeyen platformlardaki dizin izleyicilerinin durumunu güncelleştirin.", + "Syntax_Colon_0_6023": "Söz dizimi: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' etiketi en az '{1}' bağımsız değişken bekliyor, ancak '{2}' JSX fabrikası en fazla '{3}' tane sağlıyor.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "İsteğe bağlı bir zincirde etiketli şablon ifadelerine izin verilmiyor.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Hedef yalnızca {0} öğeye izin veriyor ancak kaynakta daha fazlası olabilir.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Hedef {0} öğe gerektiriyor ancak kaynakta daha az sayıda öğe olabilir.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Hedef imza çok az bağımsız değişken sağlıyor. {0} veya daha fazla bekleniyordu ancak {1} alındı.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' değiştiricisi yalnızca TypeScript dosyalarında kullanılabilir.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' işleci, 'symbol' türüne uygulanamaz.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' işlecine boole türü için izin verilmez. Bunun yerine '{1}' kullanmayı göz önünde bulundurun.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Asenkron bir yineleyicinin '{0}' özelliği bir metot olmalıdır.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Yineleyicinin '{0}' özelliği bir metot olmalıdır.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' türü başka çok az sayıda türe atanabilir. Bunun yerine 'any' türünü mü kullanmak istemiştiniz?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) bayrağı ve Unicode Kümeleri (v) bayrağı aynı anda ayarlanamaz.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvurulamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' nesnesine ES5'teki asenkron bir işlev veya metotta başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' deyiminin gövdesi boş deyim olamaz.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Çağrı, bu uygulamada başarılı olabilirdi, ancak aşırı yüklemelerin uygulama imzaları dışarıdan görünmüyor.", + "The_character_set_of_the_input_files_6163": "Giriş dosyalarının karakter kümesi.", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Kapsayıcı ok işlevi, 'this' öğesinin genel değerini yakalar.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "İçeren işlev veya modül gövdesi, denetim akışı analizi için çok büyük.", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Geçerli dosya bir CommonJS modülüdür ve en üst düzeyde 'await'i kullanamaz.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Geçerli dosya, içe aktarma işlemlerinin 'require' çağrıları üreteceği bir CommonJS modülüdür; ancak başvurulan dosya bir ECMAScript modülüdür ve 'require' ile içe aktarılamaz. Bunun yerine dinamik bir 'import(\"{0}\")' çağrısı yazmayı deneyin.", + "The_current_host_does_not_support_the_0_option_5001": "Mevcut ana bilgisayar '{0}' seçeneğini desteklemiyor.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Büyük olasılıkla kullanmayı amaçladığınız '{0}' bildirimi burada tanımlanır", + "The_declaration_was_marked_as_deprecated_here_2798": "Bildirim burada kullanım dışı olarak işaretlendi.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Beklenen tür, burada '{1}' türünde bildirilen '{0}' özelliğinden geliyor", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Beklenen tür bu imzanın dönüş türünden geliyor.", + "The_expected_type_comes_from_this_index_signature_6501": "Beklenen tür bu dizin imzasından geliyor.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Bir dışarı aktarma ataması ifadesi, çevresel bağlamda bir tanımlayıcı veya tam ad olmalıdır.", + "The_file_is_in_the_program_because_Colon_1430": "Dosya, şu nedenle programın içinde:", + "The_files_list_in_config_file_0_is_empty_18002": "'{0}' yapılandırma dosyasındaki 'dosyalar' listesi boş.", + "The_first_export_default_is_here_2752": "İlk dışarı aktarma varsayılanı buradadır.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise'in 'then' metodunun ilk parametresi, bir geri arama parametresi olmalıdır.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "'JSX.{0}' genel türü birden fazla özelliğe sahip olamaz.", + "The_implementation_signature_is_declared_here_2750": "Uygulama imzası burada bildirilir.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "CommonJS çıkışında oluşturulacak dosyalarda 'import.meta' meta özelliğine izin verilmiyor.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "\"import.meta\" meta özelliğine yalnızca \"--module\" seçeneği \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", 'node20' veya \"nodenext\" olduğunda izin verilir.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' öğesinin çıkarsanan türü, '{1}' başvurusu olmadan adlandırılamaz. Bu büyük olasılıkla taşınabilir değildir. Tür ek açıklaması gereklidir.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Çıkarsanan '{0}' türü, önemsiz olarak seri hale getirilemeyen döngüsel yapıya sahip bir türe başvurur. Tür ek açıklaması gerekir.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Çıkarsanan '{0}' türü, erişilemeyen bir '{1}' türüne başvuruyor. Tür ek açıklaması gereklidir.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Bu düğümün çıkarsanan türü, derleyicinin seri hale getireceği maksimum uzunluğu aşıyor. Açık tür ek açıklaması gerekiyor.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' bildiriminin başlatıcısı ya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' bildiriminin başlatıcısı ya '[Symbol.asyncDispose]()' veya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "'{1}' özelliği birden çok destekçide bulunduğundan ve bazılarında özel olduğundan, '{0}' kesişimi 'never' değerine düşürüldü.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "'{1}' özelliği bazı bileşenlerde çakışan türlere sahip olduğundan '{0}' kesişimi 'never' değerine düşürüldü.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' anahtar sözcüğü, yalnızca derleyicinin sağladığı iç türleri bildirmek için kullanılabilir.", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "JSX parçalarının 'jsxFactory' derleyici seçeneği ile kullanılabilmesi için 'jsxFragmentFactory' derleme seçeneği belirtilmelidir.", + "The_last_overload_gave_the_following_error_2770": "Son aşırı yükleme aşağıdaki hatayı verdi.", + "The_last_overload_is_declared_here_2771": "Son aşırı yükleme burada bildirilir.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' deyiminin sol tarafı yok etme deseni olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ifadesinin sol tarafı 'using' bildirimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ifadesinin sol tarafı 'await using' bildirimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' deyiminin sol tarafı 'string' veya 'any' türünde olmalıdır.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' deyiminin sol tarafı, asenkron olamaz.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Aritmetik işlemin sol tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Atama ifadesinin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Atama ifadesinin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Bir 'instanceof' ifadesinin sol tarafı, sağ tarafın '[Symbol.hasInstance]' metodunun ilk bağımsız değişkenine atanabilir olmalıdır.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' ifadesinin sol tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Kullanıcıya ileti görüntülenirken kullanılacak yerel ayar (örn. 'tr-tr')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules altında arama yapmak ve JavaScript dosyalarını yüklemek için en yüksek bağımlılık derinliği.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' operatörünün işleneni özel bir tanımlayıcı olamaz.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' operatörünün işleneni, salt okunur bir özellik olamaz.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' operatörünün işleneni, bir özellik başvurusu olmalıdır.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' operatörünün işleneni isteğe bağlı olmalıdır.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Artırma veya eksiltme operatörünün işleneni, isteğe bağlı bir özellik erişimi olamaz.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Artırma veya eksiltme operatörünün işleneni, bir değişken veya özellik erişimi olmalıdır.", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Ayrıştırıcı, buradaki '{0}' belirteciyle eşleştirmek için bir '{1}' bulmayı bekliyordu.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' dışa aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleyici seçeneğini sağlayın.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' içe aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleme seçeneğini sağlayın.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "'{0}' özelliği aynı yazımı içeren başka bir özel tanımlayıcı tarafından gölgelendiğinden bu sınıf içindeki '{1}' türü üzerinde bu özelliğe erişilemiyor.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Parametre dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Özellik dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zaman uyumsuz bir işlevin dönüş türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zaman uyumsuz bir işlevin ya da metodun döndürme türü, genel Promise türü olmalıdır.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Asenkron bir işlevin ya da metodun dönüş türü, genel Promise türü olmalıdır. 'Promise<{0}>' yazmak mı istediniz?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' deyiminin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır ancak burada '{0}' türüne sahip.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Aritmetik işlemin sağ tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' ifadesinin sağ tarafı ya 'any' türünde, bir sınıf, işlev veya 'Function' arayüz türüne atanabilir başka bir tür ya da 'Symbol.hasInstance' metoduna sahip bir nesne türü olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' ifadesinin sağ tarafı bir örnek oluşturma ifadesi olmamalıdır.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' dosyasının kök değeri bir nesne olmalıdır.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör {0} bekliyor.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör en azından {0} bekliyor.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' için gölgeleme bildirimi burada tanımlanır", + "The_signature_0_of_1_is_deprecated_6387": "'{1}' öğesinin '{0}' imzası kullanım dışı bırakıldı.", + "The_specified_path_does_not_exist_Colon_0_5058": "Belirtilen yol yok: '{0}'.", + "The_tag_was_first_specified_here_8034": "Etiket ilk olarak burada belirtildi.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Nesne REST atamasının hedefi, isteğe bağlı bir özellik erişimi olamaz.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Nesne geri kalan özellik atamasının hedefi, bir değişken veya özellik erişimi olmalıdır.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "'{0}' türünün 'this' bağlamı, metodun '{1}' türündeki 'this' değerine atanamaz.", + "The_this_types_of_each_signature_are_incompatible_2685": "İmzaların 'this' türleri uyumsuz.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' türü 'readonly' olduğundan değiştirilebilir '{1}' türüne atanamıyor.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Dışarı aktarma deyimindeki 'dışarı aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir dışarı aktarma üzerinde kullanılamaz.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "İçeri aktarma deyimindeki 'içeri aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir içeri aktarma üzerinde kullanılamaz.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "'{0}' özelliği seri hale getirilemediğinden bu düğüm türü seri hale getirilemiyor.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Asenkron yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip bir tür için promise olmalıdır.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Bir yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip olmalıdır.", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' türleri bu türler arasında uyumsuz.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' tarafından döndürülen türler, bu türler arasında uyumsuz.", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "'{0}' değeri burada kullanılamaz.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ifadesi desteklenmiyor. 'with' bloklarındaki tüm simgeler 'any' türüne sahip olacaktır.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' konumunda türler var, ancak bu sonuç geçerli 'moduleResolution' ayarınız altında çözümlenemiyor. 'node16', 'nodenext' veya 'bundler' öğesine güncelleştirmeyi düşünün.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' konumunda türler var ancak package.json \"exports\" dikkate alındığında bu sonuç çözümlenemedi. '{1}' kitaplığının package.json dosyasını veya türlerini güncelleştirmesi gerekiyor olabilir.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Bu normal ifadede '{0}' adlı yakalama grubu yok.", + "There_is_nothing_available_for_repetition_1507": "Yineleme için kullanılabilecek bir şey yok.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Bu JSX etiketi '{0}' öğesinin kapsamda olmasını gerektiriyor, ancak bulunamadı.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Bu JSX etiketi, '{0}' modül yolunun mevcut olmasını gerektiriyor, ancak hiçbiri bulunamadı. Uygun paket için türlerin yüklü olduğundan emin olun.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Bu JSX etiketinin '{0}' özelliği, '{1}' türünde tek bir alt öğe bekliyor ancak birden çok alt öğe sağlandı.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Bu JSX etiketinin '{0}' özelliği, birden çok alt öğe gerektiren '{1}' türünü bekliyor ancak yalnızca tek bir alt öğe sağlandı.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca yakalama grupları yok.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca {0} yakalama grubu var.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Bu ikili ifade hiçbir zaman boş değerli değildir. Parantezler mi eksik?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Bu karakter düzenli bir ifadede kaçış işareti ile kullanılamaz.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' ve '{1}' türlerinde çakışma olmadığından bu karşılaştırma yanlışlıkla yapılmış gibi görünüyor.", + "This_condition_will_always_return_0_2845": "Bu koşul her zaman '{0}' döndürür.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript nesneleri değer göre değil başvuruya göre karşılaştırdığından bu koşul her zaman '{0}' değerini döndürür.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Bu '{0}' her zaman tanımlandığı için bu koşul her zaman doğru olacaktır.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Bu oluşturucu işlevi bir sınıf bildirimine dönüştürülebilir.", + "This_expression_is_always_nullish_2871": "Bu ifade her zaman boş değerlidir.", + "This_expression_is_never_nullish_2881": "Bu ifade hiçbir zaman boş gibi değildir.", + "This_expression_is_not_callable_2349": "Bu ifade çağrılabilir değil.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Bu ifade 'get' erişimcisi olduğundan çağrılamaz. Bunu '()' olmadan mı kullanmak istiyorsunuz?", + "This_expression_is_not_constructable_2351": "Bu ifade oluşturulabilir değil.", + "This_file_already_has_a_default_export_95130": "Bu dosyanın zaten varsayılan bir dışarı aktarması var", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Başka bir projeye çözümlendiğinden ve projelerin çıkış dosyaları arasındaki göreli yol, giriş dosyaları arasındaki göreli yol ile aynı olmadığından, bu içeri aktarma yolunun yeniden yazılması güvenli değildir.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Bu içeri aktarma, giriş TypeScript dosyasına çözümlemek için bir '{0}' uzantısı kullanıyor, ancak göreli bir yol olmadığından yayın sırasında yeniden yazılmayacak.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Bu, genişletilmekte olan bildirimdir. Genişleten bildirimi aynı dosyaya taşımayı düşünün.", + "This_kind_of_expression_is_always_falsy_2873": "Bu ifade türü her zaman yanlıştır.", + "This_kind_of_expression_is_always_truthy_2872": "Bu ifade türü her zaman doğrudur.", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "Bu, asenkron bir işleve dönüştürülebilir.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Bu üye, '{0}' temel sınıfında bildirilmediğinden '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' etiketi olan bir JSDoc yorumuna sahip olamaz. '{1}' öğesini mi kastettiniz?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Kapsayan sınıfı '{0}' başka bir sınıfı genişletmediğinden, bu üye '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ad dinamik olduğundan bu üye '@override' etiketi içeren bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Bu üye '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz. '{1}' öğesini mi kastettiniz?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Kapsayan '{0}' sınıfı başka bir sınıfı genişletmediğinden bu üye 'override' değiştiricisine sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Adı dinamik olduğundan bu üyenin 'override' değiştiricisi olamaz.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu üyenin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Bu üye, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Bu üye, '{0}' temel sınıfında bildirilen soyut bir metodu geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Bu modüle yalnızca '{0}' bayrağını açıp modülün varsayılan dışarı aktarma işlemine başvurarak ECMAScript içeri/dışarı aktarma işlemleri ile başvurulabilir.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Bu modül, 'export =' ile bildirildi ve yalnızca '{0}' bayrağı kullanılırken varsayılan bir içeri aktarmayla kullanılabilir.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Bu işlem basitleştirilebilir. Bu vardiya `{0} {1} {2}` ile aynı.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Bu aşırı yükleme, dönüş türü ek açıklaması içermediğinden '{0}' türünü örtük olarak döndürür.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Bu aşırı yükleme imzası, uygulama imzasıyla uyumlu değil.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Bu parametreye 'use strict' yönergesi ile izin verilmiyor.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu parametre özelliğinin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Bu parametre özelliği, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından bir 'override' değiştiricisi içermelidir.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Bu normal ifade bayrağı bir alt örüntü içinde değiştirilemez.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Bu normal ifade bayrağı, yalnızca '{0}' veya üzeri hedeflenirken kullanılabilir.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Bu göreli içeri aktarma yolu bir dosya adı gibi görünse de aslında \"{0}\" olarak çözümlendiğinden yolun yeniden yazılması güvenli değildir.", + "This_spread_always_overwrites_this_property_2785": "Bu yayılma her zaman bu özelliğin üzerine yazar.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly' etkinleştirildiğinde bu söz dizimi kullanılamaz.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Sonuna virgül veya açık kısıtlama ekleyin.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Bunun yerine `as` ifadesi kullanın.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Bu söz dizimi, içeri aktarılan bir yardımcı gerektiriyor ancak '{0}' modülü bulunamıyor.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Bu söz dizimi, '{0}' içinde bulunmayan '{1}' adlı içeri aktarılmış bir yardımcı gerektirir. '{0}' sürümünüzü yükseltmeyi deneyin.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Bu söz dizimi, '{0}' içindeki yardımcı ile uyumlu olmayan, {2} parametreye sahip '{1}' adlı içeri aktarılan yardımcıyı gerektiriyor. '{0}' sürümünüzü yükseltmeyi düşünün.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Bu tür parametresinin bir `extends {0}` kısıtlamasına ihtiyacı olabilir.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "'import' çağrısının bu kullanımı geçersiz. 'import()' çağrıları yazılabilir ancak ayraç içermeleri gerekir ve tür bağımsız değişkenleri içeremezler.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, '{0}' dizinine `\"type\": \"module\"` alanı ekleyin.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya '{1}' dizinine ''type': 'module'' alanı ekleyin.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Üst düzey \"await\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Üst düzey \"await using\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts dosyalarındaki üst düzey bildirimler bir 'declare' veya 'export' değiştiricisi ile başlamalıdır.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Üst düzey \"for await\" döngülerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Trailing_comma_not_allowed_1009": "Sona eklenen virgüle izin verilmez.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Her dosyayı ayrı bir modül olarak derleyin ('ts.transpileModule' gibi).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Varsa `npm i --save-dev @types/{1}` deneyin veya `declare module '{0}';` deyimini içeren yeni bir bildirim (.d.ts) dosyası ekleyin", + "Trying_other_entries_in_rootDirs_6110": "'rootDirs' içindeki diğer girişler deneniyor.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' alternatifi deneniyor, aday modül konumu: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "'{1}' uzunluğundaki '{0}' demet türü, '{2}' dizininde öğe içermiyor.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Demet türü bağımsız değişkenleri döngüsel olarak kendisine başvuruyor.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' türü yalnızca '--downlevelIteration' bayrağı kullanılarak veya '--target' için 'es2015' ya da üzeri kullanıldığında yinelenebilir.", + "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' türü, dizin türü olarak kullanılamaz.", + "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' türü, '{1}' türünü dizinlemek için kullanılamaz.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' türü, '{1}' kısıtlamasını karşılamıyor.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "'{0}' türü, beklenen '{1}' türünü karşılamıyor.", + "Type_0_has_no_call_signatures_2757": "'{0}' türünün çağrı imzası yok.", + "Type_0_has_no_construct_signatures_2761": "'{0}' türünün oluşturma imzası yok.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' türü, '{1}' türüyle eşleşen dizin imzasına sahip değil.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' türünün '{1}' türüyle ortak özelliği yok.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "'{0}' türü, tür bağımsız değişkeni listesi için geçerli imzalar içermiyor.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Tür '{0}' geneldir ve yalnızca okuma için dizini oluşturulabilir.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2} ve diğer {3} özellik.", + "Type_0_is_not_a_constructor_function_type_2507": "'{0}' türü bir oluşturucu işlevi türü değil.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "ES5 içindeki '{0}' türü, Promise ile uyumlu bir oluşturucu değerine başvurmadığından geçerli bir zaman uyumsuz işlev dönüş türü değil.", + "Type_0_is_not_an_array_type_2461": "'{0}' türü bir dizi türü değil.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' türü, bir dizi türü veya dize türü değil.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' türü, bir dizi türü veya dize türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "'{0}' türü, bir dizi türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", + "Type_0_is_not_assignable_to_type_1_2322": "'{0}' türü, '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' türü '{1}' türüne atanamaz. '{2}' mi demek istediniz?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' türü '{1}' türüne atanamaz. Bu ada sahip iki farklı tür mevcut, ancak bu türler birbiriyle ilişkisiz.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Varyans ek açıklaması tarafından belirtildiği gibi '{0}' türü '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Hesaplanan sabit listesi üye değerleri gereğince, '{0}' türü '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef türüne 'undefined' eklemeyi deneyin.", + "Type_0_is_not_comparable_to_type_1_2678": "'{0}' türü '{1}' türüyle karşılaştırılamaz.", + "Type_0_is_not_generic_2315": "'{0}' türü genel değil.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "'{0}' tipi, 'in' operatörünün doğru işleneni olarak izin verilmeyen temel bir değeri temsil edebilir.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "'{0}' türünün, zaman uyumsuz bir yineleyici döndüren bir '[Symbol.asyncIterator]()' metoduna sahip olması gerekir.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' türünün, bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip olması gerekir.", + "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' türü, '{1}' imzası için eşleşme sağlamıyor.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "'{0}' türü, öz yinelemeli şekilde kendine temel tür olarak başvuruyor.", + "Type_Checking_6248": "Tür Denetlemesi", + "Type_alias_0_circularly_references_itself_2456": "'{0}' tür diğer adı, döngüsel olarak kendine başvuruyor.", + "Type_alias_must_be_given_a_name_1439": "Tür takma adına bir ad verilmesi gerekir.", + "Type_alias_name_cannot_be_0_2457": "Tür diğer adı '{0}' olamaz.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Tür diğer adları, yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Tür ek açıklaması, oluşturucu bildiriminde görüntülenemez.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Tür ek açıklamaları yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_argument_expected_1140": "Tür bağımsız değişkeni bekleniyor.", + "Type_argument_list_cannot_be_empty_1099": "Tür bağımsız değişkeni listesi boş olamaz.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Tür bağımsız değişkenleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' için tür bağımsız değişkenleri, döngüsel olarak kendisine başvuruyor.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Tür onaylama ifadeleri, yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Kaynaktaki {0} konumunda bulunan tür, hedefteki {1} konumunda bulunan türle uyumlu değil.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Kaynaktaki {0} ile {1} arasındaki konumlarda bulunan tür, hedefteki {2} konumunda bulunan türle uyumlu değil.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' özel adını içeren tür, --isolatedDeclarations ile kullanılamaz.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Derlemeye eklenecek tür bildirim dosyaları.", + "Type_expected_1110": "Tür bekleniyor.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Tür içe aktarma iddiaları, `import` veya `require`. değerine sahip tam olarak bir anahtara - `resolution-mode`’na sahip olmalıdır.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Bir ECMAScript modülünün CommonJS modülünden tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tür örneği oluşturma işlemi, fazla ayrıntılı ve büyük olasılıkla sınırsız.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Türe, kendi 'then' metodunun tamamlama geri aramasında doğrudan veya dolaylı olarak başvuruluyor.", + "Type_library_referenced_via_0_from_file_1_1402": "'{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "'{2}' paket kimliğine sahip '{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Hesaplanan özellik değerinin '{0}' türü, '{1}' türüne atanamıyor.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "'{0}' örnek üyesi değişkeninin türü, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Bir 'yield*' işleneninin yinelenen öğelerinin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "'{0}' özelliğinin türü, '{1}' eşlenmiş türünde döngüsel olarak kendine başvuruyor.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Zaman uyumsuz bir oluşturucudaki 'yield' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Bir ECMAScript modülünün bir CommonJS modülünden yalnızca tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Tür bu içeri aktarmadan kaynaklanıyor. Ad alanı stili içeri aktarma işlemi çağrılamaz ya da oluşturulamaz ve çalışma zamanında hataya neden olur. Bunun yerine varsayılan içeri aktarmayı kullanabilir veya burada içeri aktarma gerektirebilirsiniz.", + "Type_parameter_0_has_a_circular_constraint_2313": "'{0}' tür parametresi döngüsel bir kısıtlamaya sahip.", + "Type_parameter_0_has_a_circular_default_2716": "'{0}' tür parametresi döngüsel bir varsayılana sahip.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Dışarı aktarılan sınıfın '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Dışarı aktarılan işlevin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Dışarı aktarılan arabirimin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Dışarı aktarılmış eşlenen nesne türüne ait '{0}' tür parametresi, '{1}' özel adını kullanıyor.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Dışarı aktarılan tür diğer adına ait '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Dışarı aktarılan arabirimdeki metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Dışarı aktarılan sınıftaki ortak metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Dışarı aktarılan sınıftaki ortak statik metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_declaration_expected_1139": "Tür parametresi bildirimi bekleniyor.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Tür parametresi bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Tür parametresi varsayılanları yalnızca önceden bildirilen tür parametrelerine başvurabilir.", + "Type_parameter_list_cannot_be_empty_1098": "Tür parametresi listesi boş olamaz.", + "Type_parameter_name_cannot_be_0_2368": "Tür parametresi adı '{0}' olamaz.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Tür parametreleri, oluşturucu bildiriminde görüntülenemez.", + "Type_predicate_0_is_not_assignable_to_1_1226": "'{0}' tür koşulu, '{1}' öğesine atanamaz.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Tür, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", + "Type_reference_directive_0_was_not_resolved_6120": "======== '{0}' tür başvuru yönergesi çözümlenmedi. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== '{0}' tür başvuru yönergesi '{1}' olarak başarıyla çözümlendi, birincil: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== '{0}' tür başvuru yönergesi '{2}' Paket Kimliğine sahip '{1}' olarak başarıyla çözümlendi, birincil: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Tür karşılama ifadeleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Türler, JavaScript dosyalarında dışarı aktarma bildirimlerinde görünemez.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Türler, '{0}' özel özelliğinin ayrı bildirimlerine sahip.", + "Types_of_construct_signatures_are_incompatible_2419": "Yapı imzalarının türleri uyumsuz.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "'{0}' ve '{1}' parametre türleri uyumsuz.", + "Types_of_property_0_are_incompatible_2326": "'{0}' özellik türleri uyumsuz.", + "Unable_to_open_file_0_6050": "'{0}' dosyası açılamıyor.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Bir ifade olarak çağrıldığında sınıf dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Bir ifade olarak çağrıldığında metot dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Bir ifade olarak çağrıldığında parametre dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Bir ifade olarak çağrıldığında özellik dekoratörünün imzası çözümlenemez.", + "Undetermined_character_escape_1513": "Belirlenmemiş karakter kaçışı.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Beklenmeyen '{0}'. Ters eğik çizgiyle bundan kaçmak mı istediniz?", + "Unexpected_end_of_text_1126": "Beklenmeyen metin sonu.", + "Unexpected_keyword_or_identifier_1434": "Beklenmeyen anahtar kelime veya tanımlayıcı.", + "Unexpected_token_1012": "Beklenmeyen belirteç.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Beklenmeyen belirteç. Bir oluşturucu, metot, erişimci veya özellik bekleniyordu.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Beklenmeyen belirteç. Küme ayracı olmadan bir tür parametresi adı bekleniyordu.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'>'}` veya `>`?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'}'}` veya `}`?", + "Unexpected_token_expected_1179": "Beklenmeyen belirteç. '{' bekleniyordu.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode kaçış dizisi burada görünemez.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode kaçış dizileri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode özellik değeri ifadeleri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unknown_Unicode_property_name_1524": "Bilinmeyen Unicode özelliği adı.", + "Unknown_Unicode_property_name_or_value_1529": "Bilinmeyen Unicode özelliği adı veya değeri.", + "Unknown_Unicode_property_value_1526": "Bilinmeyen Unicode özelliği değeri.", + "Unknown_build_option_0_5072": "Bilinmeyen '{0}' derleme seçeneği.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Bilinmeyen '{0}' derleme seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_compiler_option_0_5023": "Bilinmeyen '{0}' derleyici seçeneği.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Bilinmeyen '{0}' derleyici seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Bilinmeyen anahtar sözcük veya tanımlayıcı. “{0}” mi demek istediniz?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "'Excludes' seçeneği bilinmiyor. 'Exclude' seçeneğini mi belirtmek istediniz?", + "Unknown_regular_expression_flag_1499": "Bilinmeyen normal ifade bayrağı.", + "Unknown_type_acquisition_option_0_17010": "Bilinmeyen '{0}' tür alımı seçeneği.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Bilinmeyen '{0}' tür alma seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_watch_option_0_5078": "Bilinmeyen '{0}' izleme seçeneği.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Bilinmeyen '{0}' izleme seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unreachable_code_detected_7027": "Erişilemeyen kod algılandı.", + "Unterminated_Unicode_escape_sequence_1199": "Sonlandırılmamış Unicode kaçış dizisi.", + "Unterminated_quoted_string_in_response_file_0_6045": "'{0}' yanıt dosyasında sonlandırılmamış alıntılanmış dize.", + "Unterminated_regular_expression_literal_1161": "Sonlandırılmamış normal ifade sabit değeri.", + "Unterminated_string_literal_1002": "Sonlandırılmamış dize sabit değeri.", + "Unterminated_template_literal_1160": "Sonlandırılmamış şablon sabit değeri.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Türü belirtilmemiş işlev çağrıları tür bağımsız değişkenlerini kabul etmeyebilir.", + "Unused_label_7028": "Kullanılmayan etiket.", + "Unused_ts_expect_error_directive_2578": "Kullanılmayan '@ts-expect-error' yönergesi.", + "Update_import_from_0_90058": "\"{0}\" kaynağından içeri aktarmayı güncelleştir", + "Update_modifiers_of_0_90061": "'{0}' değiştiricilerini güncelleştirin", + "Updating_output_timestamps_of_project_0_6359": "'{0}' projesinin çıkış zaman damgaları güncelleştiriliyor...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' projesinin değiştirilmemiş çıkış zaman damgaları güncelleştiriliyor...", + "Use_0_95174": "`{0}` kullanın.", + "Use_0_instead_5106": "Bunun yerine '{0}' kullanın.", + "Use_Number_isNaN_in_all_conditions_95175": "Tüm koşullarda `Number.isNaN` kullanın.", + "Use_element_access_for_0_95145": "'{0}' için öğe erişimi kullan", + "Use_element_access_for_all_undeclared_properties_95146": "Tüm bildirilmemiş özellikler için öğe erişimi kullanın.", + "Use_import_type_95180": "'İçeri aktarma türü' kullanın", + "Use_synthetic_default_member_95016": "Yapay 'default' üyesini kullanın.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Paket içe aktarmalarını çözümlerken package.json 'exports' alanını kullanın.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "İçeri aktarmaları çözümlerken package.json dosyasındaki 'imports' alanını kullanın.", + "Use_type_0_95181": "'type {0}' kullanın", + "Using_0_subpath_1_with_target_2_6404": "Hedef '{2}' ile '{0}' alt yol '{1}' kullanılıyor.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX parçalarının kullanımı '{0}' parça fabrikasının kapsamda olmasını gerektiriyor, ancak bulunamadı.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' deyiminde dize kullanma yalnızca ECMAScript 5 veya üzerinde desteklenir.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build kullanarak -b, tsc’nin derleyici yerine derleme düzenleyici gibi davranmasına yol açar. Bu, kompozit projeler oluşturmayı tetiklemek için kullanılır. Daha fazla bilgi edinmek için bkz. {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "'{0}' proje başvurusu yeniden yönlendirmesinin derleyici seçenekleri kullanılıyor.", + "VERSION_6036": "SÜRÜM", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' türünün değeri ile '{1}' türü arasında hiç ortak özellik yok. Bunun yerine çağrı yapmak mı istediniz?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "'{0}' türündeki değeri çağrılabilir değil. 'new' öğesini mi eklemek istemiştiniz?", + "Variable_0_implicitly_has_an_1_type_7005": "'{0}' değişkeni örtük olarak '{1}' türüne sahip.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "'{0}' değişkeni örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "'{0}' değişkeni bazı konumlarda örtük olarak '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "'{0}' değişkeni, türünün belirlenemeyeceği bazı konumlarda örtülü olarak '{1}' türünü içeriyor.", + "Variable_0_is_used_before_being_assigned_2454": "'{0}' değişkeni atanmadan önce kullanılır.", + "Variable_declaration_expected_1134": "Değişken bildirimi bekleniyor.", + "Variable_declaration_list_cannot_be_empty_1123": "Değişken bildirim listesi boş olamaz.", + "Variable_declaration_not_allowed_at_this_location_1440": "Bu konumda değişken bildirimine izin verilmiyor.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Değişkende --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Birden çok bildirimi olan değişkenler satır içine alınamaz.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Kaynaktaki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe, hedefteki {1} konumunda bulunan öğeyle eşleşmiyor.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Varyans ek açıklamaları yalnızca nesne, işlev, oluşturucu ve eşlenen türler için tür diğer adlarında desteklenir.", + "Version_0_6029": "Sürüm {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "Geçiş bilgileri için https://aka.ms/ts6 adresini ziyaret edin.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Bu dosya hakkında daha fazla bilgi için https://aka.ms/tsconfig sayfasını ziyaret edin", + "WATCH_OPTIONS_6918": "İZLEME SEÇENEKLERİ", + "Watch_and_Build_Modes_6250": "İzleme ve Derleme Modları", + "Watch_input_files_6005": "Giriş dosyalarını izleyin.", + "Watch_option_0_requires_a_value_of_type_1_5080": "'{0}' izleme seçeneği, {1} türünde bir değer gerektiriyor.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "'{0}' için bir türü yalnızca tüm parametre için buraya bir tür ekleyerek yazabiliriz.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "İşlevler atanırken, parametrelerin ve dönüş değerlerinin alt tür ile uyumlu olduğundan emin olun.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Tür denetimi sırasında 'null' ve 'undefined' öğelerini hesaba kat.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Eski konsol çıktısının ekrandan kaldırılmak yerine izleme modunda tutulup tutulmayacağı.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Geçersiz tüm karakterleri bir ifade kapsayıcısında sarmalayın", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Tüm geçersiz dekoratör ifadelerini parantez içine alın", + "Wrap_all_object_literal_with_parentheses_95116": "Tüm nesne sabit değerini parantez içine alın", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX parçasındaki tüm ana öğesiz JSX'leri sarmala", + "Wrap_in_JSX_fragment_95120": "JSX parçasında sarmala", + "Wrap_in_parentheses_95194": "Parantez içine alın", + "Wrap_invalid_character_in_an_expression_container_95108": "Geçersiz karakteri bir ifade kapsayıcısında sarmalayın", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Nesne sabit değeri olması gereken aşağıdaki gövdeyi parantez içine alın", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Tüm derleyici seçenekleri hakkında bilgi edinmek için bkz. {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Genel içeri aktarma aracılığıyla bir modülü yeniden adlandıramazsınız.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Başka bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Standart TypeScript kitaplığında tanımlanmış öğeleri yeniden adlandıramazsınız.", + "You_cannot_rename_this_element_8000": "Bu öğeyi yeniden adlandıramazsınız.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' burada dekoratör olarak kullanılmak için çok az bağımsız değişken kabul ediyor. Önce çağırıp '@{0}()' yazmak mı istediniz?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' ve '{1}' dizin imzaları uyumsuz.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' ve '{1}' işlemleri ayraç olmadan karıştırılamaz.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' iki kez belirtildi. '{0}' özniteliğinin üzerine yazılacak.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' bir türün sonunda geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' bir türün başlangıcında geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' yalnızca 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' yalnızca varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' yalnızca 'require' çağrısı kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' yalnızca 'require' çağrısı veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' yalnızca 'import {1} = require({2})' veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' yalnızca 'import {1} = require({2})' kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}', JSX bileşeni olarak kullanılamaz.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}', 'export type' kullanılarak dışarı aktarıldığından değer olarak kullanılamaz.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}', 'import type' kullanılarak içeri aktarıldığından değer olarak kullanılamaz.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' bileşenleri, alt öğe olarak metin kabul etmez. JSX'teki metin 'string' türünde ancak beklenen '{1}' türü: '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' örneği, '{1}' ile ilişkili olmayan rastgele bir türle oluşturulabilir.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' bildirimleri yalnızca bir bloğun içinde bildirilebilir.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' bildirimlerinde bağlama desenleri olamaz.", + "_0_declarations_must_be_initialized_1155": "'{0}' bildirimleri başlatılmalıdır.", + "_0_expected_1005": "'{0}' bekleniyor.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' bir dize türüne sahip ancak 'isolatedModules' etkinleştirildiğinde sözdizimsel olarak tanınabilir dize sözdizimi olmalıdır.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' öğesinin dışarı aktarılan '{1}' adlı bir üyesi yok. '{2}' demek mi istediniz?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' örtük olarak bir '{1}' dönüş türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Bir tür ek açıklamasına sahip olmadığından ve kendi başlatıcısında doğrudan veya dolaylı olarak başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", + "_0_index_signatures_are_incompatible_2634": "'{0}' dizin imzaları uyumsuz.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' dizin türü '{1}' ' {2}' dizin türüne '{3}' atanamaz.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' temel elemandır ancak '{1}' sarmalayıcı nesnedir. Mümkün olduğunda '{0}' kullanmayı tercih edin.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' bir tür ve JavaScript dosyalarında içeri aktarılamaz. Bir JSDoc türü ek açıklamasında '{1}' kullanın.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' bir türdür ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}', '{1}' türünün kullanılmayan bir yeniden adlandırması. Tür ek açıklaması olarak mı kullanmak istediniz?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}', '{1}' türündeki kısıtlamaya atanabilir ancak '{1}' örneği, '{2}' kısıtlamasının farklı bir alt türüyle oluşturulabilir.", + "_0_is_automatically_exported_here_18044": "'{0}' burada otomatik olarak dışarı aktarılır.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' bildirildi ancak değeri hiç okunmadı.", + "_0_is_declared_but_never_used_6196": "'{0}' bildirildi ancak hiç kullanılmadı.", + "_0_is_declared_here_2728": "'{0}' burada bildirilir.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}', '{1}' sınıfında bir özellik olarak tanımlandı ancak burada, '{2}' içinde bir erişimci olarak geçersiz kılındı.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}', '{1}' sınıfında bir erişimci olarak tanımlandı ancak burada, '{2}' içinde örnek özelliği olarak geçersiz kılındı.", + "_0_is_deprecated_6385": "'{0}' kullanım dışı bırakıldı.", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}', '{1}' anahtar sözcüğü için geçerli bir meta özellik değil. Bunu mu demek istediniz: '{2}'?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' öğesine parametre adı olarak izin verilmiyor.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' öğesinin değişken bildirim adı olarak kullanılmasına izin verilmiyor.", + "_0_is_of_type_unknown_18046": "'{0}' 'unknown' türünde.", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' değerinin 'null' olması olasıdır.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' değerinin 'null' veya 'undefined' olması olasıdır.", + "_0_is_possibly_undefined_18048": "'{0}' değerinin 'undefined' olması olasıdır.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' öğesine kendi temel ifadesinde doğrudan veya dolaylı olarak başvuruluyor.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' öğesine kendi tür ek açıklamasında doğrudan veya dolaylı olarak başvuruluyor.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' birden çok kez belirtildiğinden bu kullanımın üzerine yazılacak.", + "_0_list_cannot_be_empty_1097": "'{0}' listesi boş olamaz.", + "_0_modifier_already_seen_1030": "'{0}' değiştiricisi zaten görüldü.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' değiştiricisi yalnızca bir sınıfın, arabirimin veya tür diğer adının tür parametresinde görünebilir", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' değiştiricisi yalnızca bir işlevin, metodun veya sınıfın tür parametresinde görünebilir", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' değiştiricisi bir oluşturucu bildiriminde görüntülenemez.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' değiştiricisi, bir modülde veya ad alanı öğesinde görünemez.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' değiştiricisi bir parametrede görüntülenemez.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' değiştiricisi, bir tür üyesinde görünemez.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' değiştiricisi, bir tür parametresinde görünemez", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' değiştiricisi bir 'using' bildiriminde görünemez.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' değiştiricisi bir 'await using' bildiriminde görünemez.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' değiştiricisi, bir dizin imzasında görünemez.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' değiştiricisi bu tip sınıf öğelerinde görünemez.", + "_0_modifier_cannot_be_used_here_1042": "'{0}' değiştiricisi burada kullanılamaz.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' değiştiricisi bir çevresel bağlamda kullanılamaz.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' değiştiricisi, '{1}' değiştiricisi ile birlikte kullanılamaz.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' değiştiricisi özel bir tanımlayıcıyla birlikte kullanılamaz.", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' değiştiricisi, '{1}' değiştiricisinden önce gelmelidir.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' ifadesinden sonra küme ayraçları içine alınmış bir Unicode özellik değeri ifadesi gelmelidir.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' açık bir tür ek açıklamasına ihtiyaç duyuyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir ad alanı olarak kullanılıyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor. '{0}' içinde '{1}' kullanmak mı istediniz?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' bir UMD genel öğesine başvuruyor, ancak geçerli dosya bir modül. Bunun yerine bir içeri aktarma eklemeyi deneyin.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' bir değere başvuruyor ancak burada tür olarak kullanılıyor. 'typeof {0}' kullanmak mı istediniz?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkin olduğunda yalnızca türü yeniden dışarı aktarma kullanılarak yeniden dışarı aktarılmalıdır.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}', config.json dosyasının 'compilerOptions' nesnesi içinden ayarlanmalıdır", + "_0_tag_already_specified_1223": "'{0}' etiketi zaten belirtildi.", + "_0_was_also_declared_here_6203": "'{0}' öğesi de burada bildirildi.", + "_0_was_exported_here_1377": "'{0}' burada dışarı aktarıldı.", + "_0_was_imported_here_1376": "'{0}' burada içeri aktarıldı.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' dönüş türüne sahip.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' yield türüne sahip.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' değiştiricisi yalnızca sınıf, metot veya özellik bildiriminde görünebilir.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' değiştiricisi yalnızca özellik bildiriminde görünebilir.", + "and_here_6204": "ve buraya.", + "and_npm_install_D_types_Slashnode_6290": "ve npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments' özellik başlatıcılarında veya sınıf statik başlatma bloklarında kullanılamaz.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": İçe aktarma, dışa aktarma, import.meta, jsx (jsx: react-jsx ile) veya esm biçimi (modül: node16+ ile) içeren dosyaları modül olarak ele alın.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' ifadeleri bir parametre başlatıcısında kullanılamaz.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' öğesinin bu ifadenin türü üzerinde etkisi yoktur.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Çevresel bağlamlarda 'await using' bildirimlerine izin verilmez.", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' bildirimlerine, bir blok içinde olmadıkça 'case' veya 'default' yan tümcelerinde izin verilmez.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ifadeleri bir sınıf statik bloğu içinde kullanılamaz.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' seçeneği '{0}' olarak ayarlandı; göreli olmayan '{1}' modül adını çözümlemek için bu değer kullanılıyor.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' ardından bir ASCII harfi gelmelidir.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' yalnızca dosyanın başlangıcında kullanılabilir.", + "case_or_default_expected_1130": "'case' veya 'default' ifadeleri bekleniyor.", + "catch_or_finally_expected_1472": "'catch' veya 'finally' bekleniyor.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' sabit listesi üyesi başlatıcısı, sonlu olmayan bir değer olarak hesaplandı.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' sabit listesi üyesi başlatıcısı, izin verilmeyen 'NaN' değeri olarak hesaplandı.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const sabit listesi üye başlatıcıları sabit ifadeler olmalıdır.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' sabit listeleri yalnızca bir özellikte, dizin erişim ifadelerinde, içeri aktarma bildiriminin veya dışarı aktarma atamasının sağ tarafında ya da tür sorgusunda kullanılabilir.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor', parametre özellik adı olarak kullanılamaz.", + "constructor_is_a_reserved_word_18012": "'#constructor' ayrılmış bir sözcüktür.", + "default_Colon_6903": "varsayılan:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete', katı moddaki bir tanımlayıcıda çağrılamaz.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' varsayılanı yeniden dışarı aktarmaz.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' yalnızca TypeScript dosyalarında kullanılabilir.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' değiştiricisi, her zaman görünür olduğu için çevresel modüllere ve modül genişletmelerine uygulanamaz.", + "extends_clause_already_seen_1172": "'extends' yan tümcesi zaten görüldü.", + "extends_clause_must_precede_implements_clause_1173": "'extends' yan tümcesi, 'implements' yan tümcesinden önce gelmelidir.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Dışarı aktarılan '{0}' sınıfının 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Dışarı aktarılan sınıfın 'extends' yan tümcesi, '{0}' özel adına sahip veya bu adı kullanıyor.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Dışarı aktarılan '{0}' arabiriminin 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "false_unless_checkJs_is_set_6932": "`checkJs` ayarlanmadıkça `false`", + "false_unless_composite_is_set_6906": "'Kompozit' ayarlanmamışsa 'false'", + "file_6025": "dosya", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' döngülerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' döngülerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' ve 'set' erişimcileri 'this' parametreleri bildiremez.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'Files' ayarlanmışsa ‘[]', aksi takdirde `[\"**/*\"]`", + "implements_clause_already_seen_1175": "'implements' yan tümcesi zaten görüldü.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' yan tümceleri yalnızca TypeScript dosyalarında kullanılabilir.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' yalnızca TypeScript dosyalarında kullanılabilir.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' bildirimlerine yalnızca bir koşullu türün 'extends' yan tümcesinde izin verilir.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' ifadesinden sonra açılı ayraçlar içine alınmış bir yakalama grubu adı gelmelidir.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ifadesi, 'let' veya 'const' bildirimlerinde ad olarak kullanılamaz.", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Yapı imzası bulunmayan 'new' ifadesi örtük olarak 'any' türüne sahip.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]` ve belirtilmişse ek olarak `outDir`.", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "`module` değeri `nodenext` ise `nodenext`; `module` değeri `node16` veya `node18` ise `node16`; aksi takdirde `bundler`.", + "one_of_Colon_6900": "şunlardan biri:", + "one_or_more_Colon_6901": "bir veya daha fazla:", + "options_6024": "seçenekler", + "or_JSX_element_expected_1145": "'{' veya JSX öğesi bekleniyor.", + "or_expected_1144": "'{' veya ';' bekleniyor.", + "package_json_does_not_have_a_0_field_6100": "'package.json' geçerli bir '{0}' alanına sahip değil.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json', '{0}' sürümüyle eşleşen bir 'typesVersions' girdisine sahip değil.", + "package_json_had_a_falsy_0_field_6220": "'package.json' hatalı bir '{0}' alanı içeriyordu.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json', '{2}' öğesine başvuruda bulunan '{1}' adlı '{0}' alanını içeriyor.", + "package_json_has_a_peerDependencies_field_6281": "'package.json', 'peerDependencies' alanı içeriyor.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json', geçerli bir semver aralığı olmayan '{0}' 'typesVersions' girdisine sahip.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json', '{2}' modül adıyla eşleşen bir desen arayan '{1}' derleyici sürümüyle eşleşen '{0}' 'typesVersions' girdisine sahip.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json', sürüme özgü yol eşlemeleri olan bir 'typesVersions' alanına sahip.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "'{0}' package.json kapsamı '{1}' tanımlayıcısını açıkça null değerine eşliyor.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "'{0}' package.json kapsamı, '{1}' tanımlayıcısının hedefi için geçersiz türe sahip", + "package_json_scope_0_has_no_imports_defined_6273": "'{0}' package.json kapsamında içeri aktarma tanımlanmadı.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' seçeneği belirtildi, '{0}' modül adıyla eşleşen bir desen aranıyor.", + "q_is_only_available_inside_character_class_1511": "'\\q' yalnızca karakter sınıfının içinde kullanılabilir.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' ardından küme ayraçları içine alınmış dize alternatifleri gelmelidir.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' değiştiricisi yalnızca özellik bildiriminde ya da dizin imzasında görünebilir.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' tür değiştiricisine yalnızca dizide ve demet sabit değeri türlerinde izin verilir.", + "require_call_may_be_converted_to_an_import_80005": "'require' çağrısı bir import olarak dönüştürülebilir.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` yalnızca tür içeri aktarmaları için ayarlanabilir.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode`, tür içe aktarma iddiaları için tek geçerli anahtardır.", + "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode`, `require` ya da `import` olmalıdır.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' seçeneği ayarlandı, '{0}' göreli modül adını çözümlemek için bu değer kullanılıyor.", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' öğesine yalnızca bir türetilmiş sınıfta başvurulabilir.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' değerine yalnızca türetilen sınıfların üyelerinde ya da nesne değişmez ifadelerinde başvurulabilir.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' öğesine hesaplanan bir özellik adında başvurulamaz.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' öğesine oluşturucu bağımsız değişkenlerinde başvurulamaz.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Nesne değişmez ifadelerinde 'super' değerine yalnızca 'target' seçeneği 'ES2015' veya üzeri olarak ayarlandığında izin verilir.", + "super_may_not_use_type_arguments_2754": "'super', tür bağımsız değişkenlerini kullanamaz.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Türetilmiş bir sınıfın oluşturucusunda 'super' özelliğine erişmeden önce 'super' çağrılmalıdır.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Türetilen bir sınıfın oluşturucusundaki 'this' değerine erişilmeden önce 'super' çağrılmalıdır.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' öğesinden sonra bir bağımsız değişken listesi veya üye erişimi gelmelidir.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' özellik erişimine yalnızca bir oluşturucuda, üye işlevinde veya bir türetilmiş sınıfa ait üye erişimcisinde izin verilir.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' öğesine hesaplanan bir özellik adında başvurulamaz.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' öğesine bir modülde veya ad alanı gövdesinde başvurulamaz.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' öğesine statik özellik başlatıcısında başvurulamaz.", + "this_cannot_be_referenced_in_current_location_2332": "'this' öğesine geçerli konumda başvurulamaz.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this', tür ek açıklamasına sahip olmadığından örtük olarak 'any' türü içeriyor", + "true_for_ES2022_and_above_including_ESNext_6930": "ESNext dahil olmak üzere ES2022 ve üzeri için `true` olarak ayarlanır.", + "true_if_composite_false_otherwise_6909": "'Kompozit' ayarlanmışsa 'true', değilse 'false'", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'; 'node16', 'nodenext' veya 'bundler' olduğunda `true`, aksi halde `false`.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: The TypeScript Derleyicisi", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json dosyası mevcut ancak komut satırında dosyalar belirtilmişse yüklenmeyecek. Bu hatayı atlamak için '--ignoreConfig' seçeneğini kullanın.", + "type_Colon_6902": "tür:", + "unique_symbol_types_are_not_allowed_here_1335": "Burada 'unique symbol' türlerine izin verilmez.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' türlerine yalnızca bir değişken deyimindeki değişkenlerde izin verilir.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' türleri, bağlama adına sahip bir değişken bildiriminde kullanılamaz.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' yönergesi, basit olmayan parametre listesiyle birlikte kullanılamıyor.", + "use_strict_directive_used_here_1349": "'use strict' yönergesi burada kullanıldı.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Çevresel bağlamlarda 'using' bildirimlerine izin verilmez.", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' bildirimlerine, bir blok içinde olmadıkça 'case' veya 'default' yan tümcelerinde izin verilmez.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' deyimlerine zaman uyumsuz bir işlev bloğunda izin verilmez.", + "with_statements_are_not_allowed_in_strict_mode_1101": "'with' deyimlerine katı modda izin verilmez.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Kapsayan oluşturucusunda dönüş türü ek açıklaması olmadığından 'yield' ifadesi örtük olarak 'any' türü ile sonuçlanır.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' ifadeleri bir parametre başlatıcısında kullanılamaz." +} diff --git a/tsc/internal/diagnostics/loc/zh-CN.generated.json b/tsc/internal/diagnostics/loc/zh-CN.generated.json index 651a48116609c..cacaad6d1e888 100644 --- a/tsc/internal/diagnostics/loc/zh-CN.generated.json +++ b/tsc/internal/diagnostics/loc/zh-CN.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "所有编译器选项", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "“{0}”修饰符不能与导入声明一起使用。", - "A_0_parameter_must_be_the_first_parameter_2680": "“{0}”参数必须是第一个参数。", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc“@template”标记不能跟在“@typedef”、“@callback”或“@overload”标记后面", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc \"@typedef\" 注释不能包含多个 \"@type\" 标记。", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "“bigint”文本不能用作属性名称。", - "A_bigint_literal_cannot_use_exponential_notation_1352": "BigInt 字面量中不能使用指数符号。", - "A_bigint_literal_must_be_an_integer_1353": "BigInt 字面量必须是整数。", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "绑定模式参数在实现签名中不能为可选参数。", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "\"break\" 语句只能在封闭迭代或 switch 语句内使用。", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "\"break\" 语句只能跳转到封闭语句的标签。", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字符类不得包含保留的双标点符号。你是否想要使用反斜杠对其进行转义?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字符类范围不能由另一个字符类绑定。", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "类只能实现具有可选类型参数的标识符/限定名称。", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "类只能实现具有静态已知成员的对象类型或对象类型的交集。", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "类无法扩展“{0}”这样的基元类型。类只能扩展可构造值。", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "类无法实现类似于“{0}”的基元类型。它只能实现其他命名对象类型。", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不带 \"default\" 修饰符的类声明必须具有名称。", - "A_class_member_cannot_have_the_0_keyword_1248": "类成员不可具有“{0}”关键字。", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "计算属性名中不允许逗号表达式。", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "计算属性名无法从其包含的类型引用类型参数。", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "类属性声明中的计算属性名称必须具有简单文本类型或“唯一符号”类型。", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法重载中的计算属性名称必须引用文本类型或 \"unique symbol\" 类型的表达式。", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "类型文本中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "环境上下文中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "接口中的计算属性名称必须引用必须引用类型为文本类型或 \"unique symbol\" 的表达式。", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "计算属性名的类型必须为 \"string\"、\"number\"、\"symbol\" 或 \"any\"。", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "\"const\" 断言只能作用于枚举成员、字符串、数字、布尔值、数组或对象字面量。", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "只有使用字符串文本才能访问常数枚举成员。", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "环境上下文中的 \"const\" 初始化表达式必须为字符串、数字文本或文本枚举引用。", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "当构造函数的类扩展 \"null\" 时,它不能包含 \"super\" 调用。", - "A_constructor_cannot_have_a_this_parameter_2681": "构造函数不可具有 \"this\" 参数。", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "\"continue\" 语句只能在封闭迭代语句内使用。", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "\"continue\" 语句只能跳转到封闭迭代语句的标签。", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "如果没有“导入类型”,则无法导入声明文件。是否要改为导入实现文件“{0}”?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不能在已有的环境上下文中使用 \"declare\" 修饰符。", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "修饰器仅可修饰方法实现,而不可修饰重载。", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "\"default\" 子句在 \"switch\" 语句中只能出现一次。", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "默认导出只能在 ECMAScript-style 模块中使用。", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "默认导出必须位于文件或模块声明的顶层。", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此上下文中不允许明确的赋值断言 \"!\"。", - "A_destructuring_declaration_must_have_an_initializer_1182": "析构声明必须具有初始化表达式。", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的动态导入调用需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "动态导入调用返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", - "A_file_cannot_have_a_reference_to_itself_1006": "文件不能引用自身。", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "返回“从不”的函数不能具有可访问的终结点。", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "使用 'new' 关键字调用的函数的 'this' 类型不能为 'void'。", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "其声明类型不为 \"undefined\"、\"void\" 或 \"any\" 的函数必须返回值。", - "A_generator_cannot_have_a_void_type_annotation_2505": "生成器不能具有 \"void\" 类型批注。", - "A_get_accessor_cannot_have_parameters_1054": "\"get\" 访问器不能具有参数。", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get 访问器必须至少具有与 Setter 相同的可访问性", - "A_get_accessor_must_return_a_value_2378": "\"get\" 访问器必须返回值。", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "标记的元组元素被声明为可选,并且问号位于名称之后、冒号之前,而不是位于类型之后。", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "标记的元组元素通过在名称之前(而不是类型之前)的 “...” 声明为 rest。", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "映射的类型可能不声明属性或方法。", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "枚举声明中的成员初始化表达式不能引用在其后声明的成员(包括在其他枚举中定义的成员)。", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 类必须具有单个 rest 参数为类型 \"any[]\" 的构造函数。", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "从包含抽象构造签名的类型变量扩展的 mixin 类也必须声明为 \"abstract\"。", - "A_module_cannot_have_multiple_default_exports_2528": "一个模块不能具有多个默认导出。", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空间声明必须位于与之合并的类或函数所在的相同文件内。", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空间声明不能位于与之合并的类或函数前", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空间声明只允许位于命名空间或模块的顶层。", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不应使用 \"module\" 关键字声明 \"namespace\" 声明。请改用 \"namespace\" 关键字。", - "A_non_dry_build_would_build_project_0_6357": "非 -dry 生成将生成项目“{0}”", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 生成将删除以下文件: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 dry 生成将更新项目 '{0}' 的输出的时间戳", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只允许在函数或构造函数实现中使用参数初始化表达式。", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "不能使用 rest 参数声明参数属性。", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "只允许在构造函数实现中使用参数属性。", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "不能使用绑定模式声明参数属性。", - "A_promise_must_have_a_then_method_1059": "'Promise' 必须具有 'then' 方法。", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "类型为 \"unique symbol\" 的类的属性必须同时为 \"static\" 和 \"readonly\"。", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "类型为 \"unique symbol\" 的接口或类型文本的属性必须为 \"readonly\"。", - "A_required_element_cannot_follow_an_optional_element_1257": "必选元素不能位于可选元素后。", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必选参数不能位于可选参数后。", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 元素不能包含绑定模式。", - "A_rest_element_cannot_follow_another_rest_element_1265": "rest 元素不能跟在另一个 rest 元素之后。", - "A_rest_element_cannot_have_a_property_name_2566": "其余元素不能具有属性名。", - "A_rest_element_cannot_have_an_initializer_1186": "rest 元素不能具有初始化表达式。", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 元素必须在析构模式中位于最末。", - "A_rest_element_type_must_be_an_array_type_2574": "rest 元素类型必须是数组类型。", - "A_rest_parameter_cannot_be_optional_1047": "rest 参数不能为可选参数。", - "A_rest_parameter_cannot_have_an_initializer_1048": "rest 参数不能具有初始化表达式。", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest 参数必须是参数列表中的最后一个参数。", - "A_rest_parameter_must_be_of_an_array_type_2370": "rest 参数必须是数组类型。", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Rest 参数或绑定模式不可带尾随逗号。", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "\"return\" 语句只能在函数体中使用。", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "不能在类静态块内使用 “return” 语句。", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列条目,这些条目将重新映射导入内容,以查找与 \"baseUrl\" 有关的位置。", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "\"set\" 访问器不能具有返回类型批注。", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "\"set\" 访问器不能具有可选参数。", - "A_set_accessor_cannot_have_rest_parameter_1053": "\"set\" 访问器不能具有 rest 参数。", - "A_set_accessor_must_have_exactly_one_parameter_1049": "\"set\" 访问器必须正好具有一个参数。", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "\"set\" 访问器参数不能包含初始化表达式。", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "扩张参数必须具有元组类型或传递给 rest 参数。", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "“super” 调用必须是包含初始化属性、参数属性或专用标识符的派生类的构造函数中的根级语句。", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "当派生类包含初始化属性、参数属性或专用标识符时,“super” 调用必须是构造函数中用来引用 “super” 或 “this” 的第一个语句。", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "基于 \"this\" 的类型防护与基于参数的类型防护不兼容。", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "\"this\" 类型仅在类或接口的非静态成员中可用。", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "启用“verbatimModuleSyntax”时,不能对 CommonJS 模块中的值声明使用顶级“export”修饰符。", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "已在“{0}”中定义了 \"tsconfig.json\" 文件。", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元组成员不能既是可选的又是 rest。", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "不能使用负值为元组类型编制索引。", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "乘方表达式的左侧不允许出现类型断言表达式。请考虑用括号将表达式括起。", - "A_type_literal_property_cannot_have_an_initializer_1247": "类型文字数据不可具有初始化表达式。", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "仅类型导入可以指定默认导入或命名绑定,但不能同时指定这两者。", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "类型谓词无法引用 rest 参数。", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "类型谓词无法在绑定模式中引用元素“{0}”。", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "只允许在函数和方法的返回类型位置使用类型谓词。", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "类型谓词的类型不可赋给其参数的类型。", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "启用 “isolatedModules” 和 “emitDecoratorMetadata” 时,必须使用 “import type” 或命名空间导入来导入修饰签名中引用的类型。", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "类型为 \"unique symbol\" 的变量必须为 \"const\"。", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只允许在生成器正文中使用 \"yield\" 表达式。", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "无法通过 super 表达式访问“{1}”类中的“{0}”抽象方法。", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只能出现在抽象类中。", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象属性只能出现在抽象类中。", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "不能在构造函数中访问类“{1}”中的抽象属性“{0}”。", - "Accessibility_modifier_already_seen_1028": "已看到可访问性修饰符。", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "访问器仅在面向 ECMAScript 5 和更高版本时可用。", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "两个取值函数必须都是抽象的或都是非抽象的。", - "Add_0_to_unresolved_variable_90008": "将“{0}.”添加到未解析的变量", - "Add_a_return_statement_95111": "添加 return 语句", - "Add_a_return_type_to_the_function_declaration_9031": "将返回类型添加到函数声明。", - "Add_a_return_type_to_the_function_expression_9030": "将返回类型添加到函数表达式。", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "将返回类型添加到 get 访问器声明。", - "Add_a_return_type_to_the_method_9034": "向方法添加返回类型", - "Add_a_type_annotation_to_the_parameter_0_9028": "向参数 {0} 添加类型注释。", - "Add_a_type_annotation_to_the_property_0_9029": "向属性 {0} 添加类型注释。", - "Add_a_type_annotation_to_the_variable_0_9027": "向变量 {0} 添加类型注释。", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "将类型添加到 set 访问器声明的参数。", - "Add_all_missing_async_modifiers_95041": "添加所有缺失的 \"async\" 修饰符", - "Add_all_missing_attributes_95168": "添加所有缺少的属性", - "Add_all_missing_call_parentheses_95068": "添加所有缺失的调用括号", - "Add_all_missing_function_declarations_95157": "添加所有缺少的函数声明", - "Add_all_missing_imports_95064": "添加所有缺少的导入", - "Add_all_missing_members_95022": "添加所有缺少的成员", - "Add_all_missing_override_modifiers_95162": "添加所有缺失的 \"override\" 修饰符", - "Add_all_missing_parameters_95190": "添加所有缺少的参数", - "Add_all_missing_properties_95166": "添加所有缺少的属性", - "Add_all_missing_return_statement_95114": "添加所有缺少的 return 语句", - "Add_all_missing_super_calls_95039": "添加所有缺失的 super() 调用", - "Add_all_missing_type_annotations_90067": "添加所有缺少的类型注释", - "Add_all_optional_parameters_95193": "添加所有可选参数", - "Add_annotation_of_type_0_90062": "添加类型为“{0}”的注释", - "Add_async_modifier_to_containing_function_90029": "将异步修饰符添加到包含函数", - "Add_await_95083": "添加 \"await\"", - "Add_await_to_initializer_for_0_95084": "将 \"await\" 添加到 \"{0}\" 的初始值设定项", - "Add_await_to_initializers_95089": "将 \"await\" 添加到初始值设定项", - "Add_braces_to_arrow_function_95059": "向箭头函数添加大括号", - "Add_const_to_all_unresolved_variables_95082": "将 \"const\" 添加到所有未解析变量", - "Add_const_to_unresolved_variable_95081": "将 \"const\" 添加到未解析的变量", - "Add_definite_assignment_assertion_to_property_0_95020": "向属性“{0}”添加明确的赋值断言", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "将明确赋值断言添加到未初始化的所有属性", - "Add_export_to_make_this_file_into_a_module_95097": "添加 \"export {}\",将此文件变为模块", - "Add_extends_constraint_2211": "添加 `extends` 约束。", - "Add_extends_constraint_to_all_type_parameters_2212": "将 `extends` 约束添加到所有类型参数", - "Add_import_from_0_90057": "从“{0}”添加导入", - "Add_index_signature_for_property_0_90017": "为属性“{0}”添加索引签名", - "Add_initializer_to_property_0_95019": "向属性“{0}”添加初始值设定项", - "Add_initializers_to_all_uninitialized_properties_95027": "将初始化表达式添加到未初始化的所有属性", - "Add_missing_attributes_95167": "添加缺少的属性", - "Add_missing_call_parentheses_95067": "添加缺失的调用括号", - "Add_missing_comma_for_object_member_completion_0_95187": "为对象成员完成“{0}”添加缺少的逗号。", - "Add_missing_enum_member_0_95063": "添加缺少的枚举成员 \"{0}\"", - "Add_missing_function_declaration_0_95156": "添加缺少的函数声明 \"{0}\"", - "Add_missing_new_operator_to_all_calls_95072": "将缺少的 \"new\" 运算符添加到所有调用", - "Add_missing_new_operator_to_call_95071": "将缺少的 \"new\" 运算符添加到调用", - "Add_missing_parameter_to_0_95188": "将缺少的参数添加到“{0}”", - "Add_missing_parameters_to_0_95189": "将缺少的参数添加到“{0}”", - "Add_missing_properties_95165": "添加缺少的属性", - "Add_missing_super_call_90001": "添加缺失的 \"super()\" 调用", - "Add_missing_typeof_95052": "添加缺少的 \"typeof\"", - "Add_names_to_all_parameters_without_names_95073": "为没有名称的所有参数添加名称", - "Add_optional_parameter_to_0_95191": "将可选参数添加到“{0}”", - "Add_optional_parameters_to_0_95192": "将可选参数添加到“{0}”", - "Add_or_remove_braces_in_an_arrow_function_95058": "添加或删除箭头函数中的大括号", - "Add_override_modifier_95160": "添加 \"override\" 修饰符", - "Add_parameter_name_90034": "添加参数名称", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "将限定符添加到匹配成员名称的所有未解析变量", - "Add_resolution_mode_import_attribute_95196": "添加 \"resolution-mode\" 导入属性", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "向所有需要 \"resolution-mode\" 导入属性的仅类型导入添加该属性", - "Add_return_type_0_90063": "添加返回类型“{0}”", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "将 satisfies 和类型断言添加到此表达式 (satisfies T as T) 以使类型显式。", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "使用“{0}”添加 satisfies 和内联类型断言", - "Add_to_all_uncalled_decorators_95044": "将 \"()\" 添加到所有未调用的修饰器", - "Add_ts_ignore_to_all_error_messages_95042": "将 \"@ts-ignore\" 添加到所有错误消息", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引访问时,将 “undefined” 添加到类型。", - "Add_undefined_to_optional_property_type_95169": "将 “undefined” 添加到可选属性类型", - "Add_undefined_type_to_all_uninitialized_properties_95029": "将未定义的类型添加到未初始化的所有属性", - "Add_undefined_type_to_property_0_95018": "向属性“{0}”添加 \"undefined\" 类型", - "Add_unknown_conversion_for_non_overlapping_types_95069": "为非重叠类型添加 \"unknown\" 转换", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "将 \"unknown\" 添加到非重叠类型的所有转换", - "Add_void_to_Promise_resolved_without_a_value_95143": "将 \"void\" 添加到已解析但没有值的 Promise", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "将 \"void\" 添加到所有已解析但没有值的 Promise", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "添加 tsconfig.json 文件有助于组织包含 TypeScript 和 JavaScript 文件的项目。有关详细信息,请访问 https://aka.ms/tsconfig。", - "All_declarations_of_0_must_have_identical_constraints_2838": "\"{0}\" 的所有声明必须具有相同的限制。", - "All_declarations_of_0_must_have_identical_modifiers_2687": "“{0}”的所有声明必须具有相同的修饰符。", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "“{0}”的所有声明都必须具有相同的类型参数。", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有声明必须是连续的。", - "All_destructured_elements_are_unused_6198": "所有解构出的成员都未使用。", - "All_imports_in_import_declaration_are_unused_6192": "导入声明中的所有导入都未使用。", - "All_type_parameters_are_unused_6205": "未使用任何类型参数。", - "All_variables_are_unused_6199": "所有变量均未使用。", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "允许 JavaScript 文件成为程序的一部分。使用 ''checkJs'' 选项来获取这些文件中的错误。", - "Allow_accessing_UMD_globals_from_modules_6602": "允许从模块访问 UMD 变量全局。", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允许从不带默认输出的模块中默认输入。这不会影响代码发出,只是类型检查。", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "当模块没有默认导出时,允许“从 y 导入 x”。", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允许每个项目从 tslib 导入帮助程序函数一次,而不是将它们包含在每个文件中。", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允许导入包含 TypeScript 文件扩展名。需要设置“--moduleResolution bundler”以及“--noEmit”或“--emitDeclarationOnly”。", - "Allow_javascript_files_to_be_compiled_6102": "允许编译 JavaScript 文件。", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "允许在解析模块时将多个文件夹视为一个文件夹。", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的文件名 \"{0}\" 仅大小写与文件名 \"{1}\" 不同。", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "环境模块声明无法指定相对模块名。", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "环境模块不能嵌套在其他模块或命名空间中。", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模块无法拥有多个名称分配。", - "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象访问器不能有实现。", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "可访问性修饰符不能与专用标识符一起使用。", - "An_accessor_cannot_have_type_parameters_1094": "访问器不能具有类型参数。", - "An_accessor_property_cannot_be_declared_optional_1276": "\"accessor\" 属性不能声明为可选。", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "只允许在文件的顶层中使用环境模块声明。", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "未提供 \"{0}\" 的自变量。", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供与此绑定模式匹配的自变量。", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算术操作数必须为类型 \"any\"、\"number\"、\"bigint\" 或枚举类型。", - "An_arrow_function_cannot_have_a_this_parameter_2730": "箭头函数不能包含 \"this\" 参数。", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的异步函数或方法需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "异步函数或方法必须返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", - "An_async_iterator_must_have_a_next_method_2519": "异步迭代器必须具有 \"next()\" 方法。", - "An_element_access_expression_should_take_an_argument_1011": "元素访问表达式应采用参数。", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "不能用专用标识符命名枚举成员。", - "An_enum_member_cannot_have_a_numeric_name_2452": "枚举成员不能具有数值名。", - "An_enum_member_name_must_be_followed_by_a_or_1357": "枚举成员名称的后面必须跟有 \",\"、\"=\" 或 \"}\"。", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此信息的扩展版本,显示所有可能的编译器选项", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "不能在具有其他导出元素的模块中使用导出分配。", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "不能在命名空间中使用导出分配。", - "An_export_assignment_cannot_have_modifiers_1120": "导出分配不能具有修饰符。", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "导出分配必须位于文件或模块声明的顶层。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "导出声明只能在模块的顶层使用。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "导出声明只能在命名空间或模块的顶层使用。", - "An_export_declaration_cannot_have_modifiers_1193": "导出声明不能有修饰符。", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export =”声明必须引用实际值。", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "启用“verbatimModuleSyntax”时,“export =”声明必须引用值,但“{0}”仅引用类型。", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export default”必须引用实际值。", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "启用“verbatimModuleSyntax”时,“export default”必须引用一个值,但“{0}”只引用了一个类型。", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "无法测试 \"void\" 类型的表达式的真实性。", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "扩展的 Unicode 转义值必须介于(含) 0x0 和 0x10FFFF 之间。", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "标识符或关键字不能紧跟在数字字面量之后。", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不能在环境上下文中声明实现。", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "导入别名不能引用使用 \"export type\" 导出的声明。", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "导入别名不能引用使用 \"import type\" 导入的声明。", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "启用“verbatimModuleSyntax”时,导入别名无法解析为类型或仅类型声明。", - "An_import_alias_cannot_use_import_type_1392": "导入别名不能使用“导入类型”", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "导入声明只能在模块的顶层使用。", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "导入声明只能在命名空间或模块的顶层使用。", - "An_import_declaration_cannot_have_modifiers_1191": "导入声明不能有修饰符。", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "启用“allowImportingTsExtensions”时,导入路径只能以“{0}”扩展名结尾。", - "An_index_signature_cannot_have_a_rest_parameter_1017": "索引签名不能包含 rest 参数。", - "An_index_signature_cannot_have_a_trailing_comma_1025": "索引签名不能包含尾随逗号。", - "An_index_signature_must_have_a_type_annotation_1021": "索引签名必须具有类型批注。", - "An_index_signature_must_have_exactly_one_parameter_1096": "索引签名必须正好具有一个参数。", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "索引签名参数不能包含问号。", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引签名参数不能具有可访问性修饰符。", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引签名参数不能具有初始化表达式。", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引签名参数必须具有类型批注。", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引签名参数类型不能为文本类型或泛型类型。请考虑改用映射的对象类型。", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引签名参数类型必须是 “string”、“number”、“symbol”或模板文本类型。", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "实例化表达式不能后跟属性访问。", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "接口只能扩展具有可选类型参数的标识符/限定名称。", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "接口只能扩展使用静态已知成员的对象类型或对象类型的交集。", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "接口无法扩展“{0}”这样的基元类型。它只能扩展其他命名对象类型。", - "An_interface_property_cannot_have_an_initializer_1246": "接口函数不能具有初始化表达式。", - "An_iterator_must_have_a_next_method_2489": "迭代器必须具有 \"next()\" 方法。", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "将 @jsx 杂注与 JSX 片段一起使用时,需要使用 @jsxFrag 杂注。", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "对象文字不能具有多个具有相同名称的 get/set 访问器。", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "对象文本不能具有多个名称相同的属性。", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "对象文字不能包含具有相同名称的属性和访问器。", - "An_object_member_cannot_be_declared_optional_1162": "对象成员无法声明为可选。", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "对象的“[Symbol.hasInstance]”方法必须返回布尔值,这样它才能在“instanceof”表达式的右侧使用。", - "An_optional_chain_cannot_contain_private_identifiers_18030": "可选链不能包含专用标识符。", - "An_optional_element_cannot_follow_a_rest_element_1266": "可选元素不能跟在 rest 元素之后。", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器隐藏了 \"this\" 的外部值。", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "重载签名无法声明为生成器。", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘方表达式的左侧不允许存在具有“{0}”运算符的一元表达式。请考虑用括号将表达式括起。", - "Annotate_everything_with_types_from_JSDoc_95043": "使用 JSDoc 中的类型批注所有内容", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "注释命名空间中属性 expando 函数的类型", - "Annotate_with_type_from_JSDoc_95009": "通过 JSDoc 类型批注", - "Another_export_default_is_here_2753": "这里是其他导出默认值。", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "任何可能匹配多个字符的 Unicode 属性仅在设置 Unicode Sets (v) 标志时可用。", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "可能匹配多个字符的任何内容在被否定的字符类中无效。", - "Are_you_missing_a_semicolon_2734": "是否缺少分号?", - "Argument_expression_expected_1135": "应为参数表达式。", - "Argument_for_0_option_must_be_Colon_1_6046": "“{0}”选项的参数必须为 {1}。", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "动态导入的参数不能是扩展元素。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "类型“{0}”的参数不能赋给类型“{1}”的参数。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "类型为“{0}”的参数不能分配给类型为“{1}”且 “exactOptionalPropertyTypes: true” 的参数。请考虑将 “undefined” 添加到目标属性的类型。", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供 rest 形参“{0}”的实参。", - "Array_element_destructuring_pattern_expected_1181": "应为数组元素析构模式。", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "无法使用 --isolatedDeclarations 推断具有分布元素的数组。", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "断言要求使用显式类型注释声明调用目标中的每个名称。", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "断言要求调用目标为标识符或限定名。", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "--isolatedDeclarations 不支持将属性分配给不声明它们的函数。为分配给此函数的属性添加显式声明。", - "Asterisk_Slash_expected_1010": "应为 \"*/\"。", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "至少一个访问器必须具有带有 --isolatedDeclarations 的显式类型注释。", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全局范围的扩大仅可直接嵌套在外部模块中或环境模块声明中。", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "全局范围的扩大应具有 \"declare\" 修饰符,除非它们显示在已有的环境上下文中。", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "项目“{0}”中启用了键入内容的自动发现。使用缓存位置“{2}”运行模块“{1}”的额外解决传递。", - "BUILD_OPTIONS_6919": "生成选项", - "Backwards_Compatibility_6253": "向后兼容性", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基类表达式无法引用类类型参数。", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基构造函数返回类型 \"{0}\" 不是具有静态已知成员的对象类型或对象类型的交集。", - "Base_constructors_must_all_have_the_same_return_type_2510": "所有的基构造函数必须具有相同的返回类型。", - "Base_directory_to_resolve_non_absolute_module_names_6083": "用于解析非绝对模块名的基目录。", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "目标低于 ES2020 时,BigInt 字面量不可用。", - "Binary_digit_expected_1177": "需要二进制数字。", - "Binding_element_0_implicitly_has_an_1_type_7031": "绑定元素“{0}”隐式具有“{1}”类型。", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "声明之前已使用的块范围变量“{0}”。", - "Build_a_composite_project_in_the_working_directory_6925": "在工作目录中生成复合项目。", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "生成所有项目,包括那些似乎是最新的项目。", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "生成一个或多个项目及其依赖项(如果已过期)", - "Build_option_0_requires_a_value_of_type_1_5073": "生成选项 \"{0}\" 需要类型 {1} 的值。", - "Building_project_0_6358": "正在生成项目“{0}”...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "内置迭代器实例化时,“TReturn”类型为“undefined”而不是“any”。", - "COMMAND_LINE_FLAGS_6921": "命令行标记", - "COMMON_COMMANDS_6916": "常见命令", - "COMMON_COMPILER_OPTIONS_6920": "常见编译器选项", - "Call_decorator_expression_90028": "调用修饰器表达式", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "调用签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少返回类型批注的调用签名隐式具有返回类型 \"any\"。", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "没有参数的调用签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。", - "Call_target_does_not_contain_any_signatures_2346": "调用目标不包含任何签名。", - "Can_only_convert_logical_AND_access_chains_95142": "仅可转换逻辑 AND 访问链", - "Can_only_convert_named_export_95164": "只能转换已命名的导出", - "Can_only_convert_property_with_modifier_95137": "只能转换带修饰符的属性", - "Can_only_convert_string_concatenations_and_string_literals_95154": "只能转换字符串串联和字符串文本", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "无法访问“{0}.{1}”,因为“{0}”是类型,不是命名空间。是否要使用“{0}[\"{1}\"]”检索“{0}”中“{1}”属性的类型?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "启用“{1}”时,无法从没有限定的其他文件访问“{0}”。请改用“{2}”。", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "启用“{0}”时,无法访问环境常量枚举。", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "不可将“{0}”构造函数类型分配给“{1}”构造函数类型。", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "无法将抽象构造函数类型分配给非抽象构造函数类型。", - "Cannot_assign_to_0_because_it_is_a_class_2629": "无法为“{0}”赋值,因为它是类。", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "无法分配到 \"{0}\" ,因为它是常数。", - "Cannot_assign_to_0_because_it_is_a_function_2630": "无法为“{0}”赋值,因为它是函数。", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "无法为“{0}”赋值,因为它是命名空间。", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "无法为“{0}”赋值,因为它是只读属性。", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "无法为“{0}”赋值,因为它是枚举。", - "Cannot_assign_to_0_because_it_is_an_import_2632": "无法为“{0}”赋值,因为它是导入。", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "无法为“{0}”赋值,因为它不是变量。", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "无法赋值给私有方法“{0}”。私有方法不可写。", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "无法扩大模块“{0}”,因为它解析为非模块实体。", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "无法扩充具有值导出的模块“{0}”,因为它解析为一个非模块的实体。", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "无法使用选项“{0}”来编译模块,除非 \"--module\" 标记为 \"amd\" 或 \"system\"。", - "Cannot_create_an_instance_of_an_abstract_class_2511": "无法创建抽象类的实例。", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "无法将迭代委托到值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但包含它的生成器将始终发送 \"{0}\"。", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "无法导出“{0}”。仅可从模块中导出本地声明。", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "无法扩展类“{0}”。类构造函数标记为私有。", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "无法扩展接口“{0}”。您是否想使用 \"implements\"?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "无法在当前目录找到 tsconfig.json 文件: {0}。", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "无法在指定目录找到 tsconfig.json 文件:“{0}”。", - "Cannot_find_global_type_0_2318": "找不到全局类型“{0}”。", - "Cannot_find_global_value_0_2468": "找不到全局值“{0}”。", - "Cannot_find_lib_definition_for_0_2726": "找不到“{0}”的库定义。", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到“{0}”的库定义。你是指“{1}”?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模块“{0}”。请考虑使用 \"--resolveJsonModule\" 导入带 \".json\" 扩展的模块。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模块“{0}”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模块“{0}”或其相应的类型声明。", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "找不到“{0}”的副作用导入的模块或类型声明。", - "Cannot_find_name_0_2304": "找不到名称“{0}”。", - "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名称“{0}”。你是否指的是“{1}”?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名称“{0}”。你的意思是实例成员“this.{0}”?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名称“{0}”。你的意思是静态成员“{1}.{0}”?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名称“{0}”。你是否要在异步函数中写入此内容?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名称“{0}”。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{1}”或更高版本。", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名称“{0}”。是否需要更改目标库? 请尝试更改 “lib” 编译器选项以包括 “dom”。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`,然后将 \"bun\" 添加到 tsconfig 的 types 字段。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名称 \"{0}\"。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名称“{0}”。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然后将 “jest” 或 “mocha” 添加到 tsconfig 中的类型字段。。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名称 \"{0}\"。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名称“{0}”。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`,然后将 “jquery” 添加到 teconfig 中的类型字段。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名称“{0}”。是否需要安装 Node.js 的类型定义? 请尝试运行 `npm i --save-dev @types/node`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名称“{0}”。是否需要安装 Node.js 的类型定义? 请尝试运行 `npm i --save-dev @types/node`,然后将 \"node\" 添加到 tsconfig 的 types 字段。", - "Cannot_find_namespace_0_2503": "找不到命名空间“{0}”。", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "找不到命名空间“{0}”。你是否指的是“{1}”?", - "Cannot_find_parameter_0_1225": "找不到参数“{0}”。", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到输入文件的公共子目录路径。", - "Cannot_find_type_definition_file_for_0_2688": "找不到“{0}”的类型定义文件。", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "无法导入类型声明文件。请考虑导入“{0}”,而不是“{1}”。", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "无法在块范围声明“{1}”所在的范围内初始化外部范围变量“{0}”。", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "不能调用可能是 \"null\" 的对象。", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "不能调用可能是 \"null\" 或“未定义”的对象。", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "不能调用可能是“未定义”的对象。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组析构将始终发送 \"{0}\"。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组扩张将始终发送 \"{0}\"。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但 for-of 将始终发送 \"{0}\"。", - "Cannot_move_statements_to_the_selected_file_95183": "无法将语句移动到所选文件", - "Cannot_move_to_file_selected_file_is_invalid_95179": "无法移动到文件,所选文件无效", - "Cannot_read_file_0_5083": "无法读取文件“{0}”。", - "Cannot_read_file_0_Colon_1_5012": "无法读取文件“{0}”: {1}。", - "Cannot_redeclare_block_scoped_variable_0_2451": "无法重新声明块范围变量“{0}”。", - "Cannot_redeclare_exported_variable_0_2323": "无法重新声明导出的变量“{0}”。", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "无法在 catch 子句中重新声明标识符“{0}”。", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "无法在类型注释中启动函数调用。", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "无法使用 JSX,除非提供了 \"--jsx\" 标志。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "启用“{0}”时,不能对类型或仅类型命名空间使用“export import”。", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "当 \"--module\" 为 \"none\" 时无法使用导入、导出或模块扩大。", - "Cannot_use_namespace_0_as_a_type_2709": "不能将命名空间“{0}”用作类型。", - "Cannot_use_namespace_0_as_a_value_2708": "不能将命名空间“{0}”用作值。", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "无法在修饰类静态属性初始化表达式中使用 “this”。", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "无法写入文件 \"{0}\",因为它将覆盖由引用的项目 \"{1}\" 生成的 \".tsbuildinfo\" 文件", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "无法写入文件“{0}”,因为它会被多个输入文件覆盖。", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "无法写入文件“{0}”,因为它会覆盖输入文件。", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 子句变量不能有初始化表达式。", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 子句变量类型注释必须为 \"any\" 或 \"unknown\" (若已指定)。", - "Change_0_to_1_90014": "将“{0}”更改为“{1}”", - "Change_all_extended_interfaces_to_implements_95038": "将所有扩展接口都更改为 \"implements\"", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "将所有 JSDoc 样式类型都更改为 TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "将所有 JSDoc 样式类型都更改为 TypeScript (并将 \"| undefined\" 添加到可以为 null 的类型)", - "Change_extends_to_implements_90003": "将 \"extends\" 改为 \"implements\"", - "Change_spelling_to_0_90022": "将拼写更改为“{0}”", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "检查是否有已声明但未在构造函数中设置的类属性。", - "Check_side_effect_imports_6806": "检查副作用导入。", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "检查 “bind”、“call” 和 “apply” 方法的参数是否与原始函数匹配。", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "检查“{0}”是否是“{1}”-“{2}”的最长匹配前缀。", - "Circular_definition_of_import_alias_0_2303": "导入别名“{0}”的循环定义。", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析配置时检测到循环: {0}", - "Circularity_originates_in_type_at_this_location_2751": "循环源自此位置的类型。", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "类“{0}”将“{1}”定义为实例成员访问器,但扩展类“{2}”将其定义为实例成员函数。", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "类“{0}”将“{1}”定义为实例成员函数,但扩展类“{2}”将其定义为实例成员访问器。", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "类“{0}”将“{1}”定义为实例成员属性,但扩展类“{2}”将其定义为实例成员函数。", - "Class_0_incorrectly_extends_base_class_1_2415": "类“{0}”错误扩展基类“{1}”。", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "类“{0}”错误实现类“{1}”。你是想扩展“{1}”并将其成员作为子类继承吗?", - "Class_0_incorrectly_implements_interface_1_2420": "类“{0}”错误实现接口“{1}”。", - "Class_0_used_before_its_declaration_2449": "类“{0}”用于其声明前。", - "Class_constructor_may_not_be_a_generator_1368": "类构造函数可能不是生成器。", - "Class_constructor_may_not_be_an_accessor_1341": "类构造函数可能不是访问器。", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "类声明无法实现“{0}”的重载列表。", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 “@augments” 或 “@extends” 标记。", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "类修饰器不能与静态专用标识符一起使用。请考虑删除实验性修饰器。", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父类定义的类字段“{0}”无法通过 super 在子类中访问。", - "Class_name_cannot_be_0_2414": "类名不能为“{0}”。", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "使用模块 {0} 将目标设置为 ES5 及更高版本时,类名不能为 \"Object\"。", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "类静态侧“{0}”错误扩展基类静态侧“{1}”。", - "Classes_can_only_extend_a_single_class_1174": "类只能扩展一个类。", - "Classes_may_not_have_a_field_named_constructor_18006": "类不能具有名为 \"constructor\" 的字段。", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "类中包含的代码在 JavaScript 的严格模式下进行计算,该模式不允许以此方式使用“{0}”。有关详细信息,请参阅 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode。", - "Command_line_Options_6171": "命令行选项", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "编译给定了其配置文件路径或带 \"tsconfig.json\" 的文件夹路径的项目。", - "Compiler_Diagnostics_6251": "编译器诊断", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "无法为编译器选项“{0}”提供空字符串。", - "Compiler_option_0_expects_an_argument_6044": "编译器选项“{0}”需要参数。", - "Compiler_option_0_may_not_be_used_with_build_5094": "编译器选项“--{0}”不能与 “--build” 一起使用。", - "Compiler_option_0_may_only_be_used_with_build_5093": "编译器选项“--{0}”只能与 “--build” 一起使用。", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "值“{1}”的编译器选项“{0}”不稳定。使用夜间 TypeScript 消除此错误。请尝试使用 “npm install -D typescript@next” 进行更新。", - "Compiler_option_0_requires_a_value_of_type_1_5024": "编译器选项“{0}”需要类型 {1} 的值。", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "当发出专用标识符下层时,编译器会预留名称“{0}”。", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "编译位于指定路径的 TypeScript 项目。", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "编译当前项目(工作目录中的 tsconfig.json。)", - "Compiles_the_current_project_with_additional_settings_6929": "使用其他设置编译当前项目。", - "Completeness_6257": "完成度", - "Composite_projects_may_not_disable_declaration_emit_6304": "复合项目可能不会禁用声明发出。", - "Composite_projects_may_not_disable_incremental_compilation_6379": "复合项目不能禁用增量编译。", - "Computed_from_the_list_of_input_files_6911": "从输入文件列表计算", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "计算属性必须是数字或字符串文本、变量或带 --isolatedDeclarations 的虚线表达式。", - "Computed_property_names_are_not_allowed_in_enums_1164": "枚举中不允许计算属性名。", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "不能使用 --isolatedDeclarations 推断类或对象文本上的计算属性名称。", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "含字符串值成员的枚举中不允许使用计算值。", - "Concatenate_and_emit_output_to_single_file_6001": "连接输出并将其发出到单个文件。", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析导入时除特定于解析程序的默认值外要设置的条件。", - "Conflicts_are_in_this_file_6201": "此文件中存在冲突。", - "Consider_adding_a_declare_modifier_to_this_class_6506": "请考虑向此类添加 “declare” 修饰符。", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "构造签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少返回类型批注的构造签名隐式具有返回类型 \"any\"。", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "不带参数的构造签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。", - "Constructor_implementation_is_missing_2390": "缺少构造函数实现。", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "类“{0}”的构造函数是私有的,仅可在类声明中访问。", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "类“{0}”的构造函数是受保护的,仅可在类声明中访问。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "在联合类型中使用时,构造函数类型标记必须用括号括起来。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "在相交类型中使用时,构造函数类型标记必须用括号括起来。", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生类的构造函数必须包含 \"super\" 调用。", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含文件,并且无法确定根目录,正在跳过在 \"node_modules\" 文件夹中查找。", - "Containing_function_is_not_an_arrow_function_95128": "包含函数不是箭头函数", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "控制用于检测模块格式 JS 文件的方法。", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "类型 \"{0}\" 到类型 \"{1}\" 的转换可能是错误的,因为两种类型不能充分重叠。如果这是有意的,请先将表达式转换为 \"unknown\"。", - "Convert_0_to_1_in_0_95003": "将“{0}”转换为 {0} 中的 {1}", - "Convert_0_to_mapped_object_type_95055": "将“{0}”转换为映射对象类型", - "Convert_all_const_to_let_95102": "将所有 'const' 转换为 'let'", - "Convert_all_constructor_functions_to_classes_95045": "将所有构造函数都转换为类", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "将所有无效字符转换为 HTML 实体代码", - "Convert_all_re_exported_types_to_type_only_exports_1365": "将所有重新导出的类型转换为仅类型导出", - "Convert_all_require_to_import_95048": "将所有 \"require\" 转换为 \"import\"", - "Convert_all_to_async_functions_95066": "全部转换为异步函数", - "Convert_all_to_bigint_numeric_literals_95092": "全部转换为 BigInt 数字字面量", - "Convert_all_to_default_imports_95035": "全部转换为默认导入", - "Convert_all_type_literals_to_mapped_type_95021": "将所有类型文本转换为映射类型", - "Convert_all_typedef_to_TypeScript_types_95177": "将所有 typedef 转换为 TypeScript 类型。", - "Convert_arrow_function_or_function_expression_95122": "转换箭头函数或函数表达式", - "Convert_const_to_let_95093": "将 \"const\" 转换为 \"let\"", - "Convert_default_export_to_named_export_95061": "将默认导出转换为命名导出", - "Convert_function_declaration_0_to_arrow_function_95106": "将函数声明“{0}”转换为箭头函数", - "Convert_function_expression_0_to_arrow_function_95105": "将函数表达式 \"{0}\" 转换为箭头函数", - "Convert_function_to_an_ES2015_class_95001": "将函数转换为 ES2015 类", - "Convert_invalid_character_to_its_html_entity_code_95100": "将无效字符转换为其 HTML 实体代码", - "Convert_named_export_to_default_export_95062": "将命名导出转换为默认导出", - "Convert_named_imports_to_default_import_95170": "将命名导入转换为默认导入", - "Convert_named_imports_to_namespace_import_95057": "将命名导入转换为命名空间导入", - "Convert_namespace_import_to_named_imports_95056": "将命名空间导入转换为命名导入", - "Convert_overload_list_to_single_signature_95118": "将重载列表转换为单一签名", - "Convert_parameters_to_destructured_object_95075": "将参数转换为析构对象", - "Convert_require_to_import_95047": "将 \"require\" 转换为 \"import\"", - "Convert_to_ES_module_95017": "转换为 ES 模块", - "Convert_to_a_bigint_numeric_literal_95091": "转换为 BigInt 数字字面量", - "Convert_to_anonymous_function_95123": "转换为异步函数", - "Convert_to_arrow_function_95125": "转换为箭头函数", - "Convert_to_async_function_95065": "转换为异步函数", - "Convert_to_default_import_95013": "转换为默认导入", - "Convert_to_named_function_95124": "转换为指定函数", - "Convert_to_optional_chain_expression_95139": "转换为可选链表达式", - "Convert_to_template_string_95096": "转换为模板字符串", - "Convert_to_type_only_export_1364": "转换为仅类型导出", - "Convert_typedef_to_TypeScript_type_95176": "将 typedef 转换为 TypeScript 类型。", - "Corrupted_locale_file_0_6051": "区域设置文件 {0} 已损坏。", - "Could_not_convert_to_anonymous_function_95153": "无法转换为匿名函数", - "Could_not_convert_to_arrow_function_95151": "无法转换为箭头函数", - "Could_not_convert_to_named_function_95152": "无法转换为命名函数", - "Could_not_determine_function_return_type_95150": "无法确定函数返回类型", - "Could_not_find_a_containing_arrow_function_95127": "找不到包含箭头函数", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "无法找到模块“{0}”的声明文件。“{1}”隐式拥有 \"any\" 类型。", - "Could_not_find_convertible_access_expression_95140": "找不到可转换的访问表达式", - "Could_not_find_export_statement_95129": "找不到 export 语句", - "Could_not_find_import_clause_95131": "找不到 import 子句", - "Could_not_find_matching_access_expressions_95141": "找不到匹配的访问表达式", - "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名称“{0}”。你是否是指“{1}”?", - "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空间导入或已命名的导入", - "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要为其生成访问器的属性", - "Could_not_find_variable_to_inline_95185": "找不到要内联的变量。", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "无法解析具有表达式的路径“{0}”: {1}。", - "Could_not_write_file_0_Colon_1_5033": "无法写入文件“{0}”: {1}。", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "为发出的 JavaScript 文件创建源映射文件。", - "Create_sourcemaps_for_d_ts_files_6614": "为 d.ts 文件创建源映射。", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用工作目录中的建议设置创建 tsconfig.json。", - "DIRECTORY_6038": "目录", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字符类中不允许使用十进制转义序列和反向引用。", - "Decimals_with_leading_zeros_are_not_allowed_1489": "不允许使用带前导零的小数。", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "该声明扩充了另一文件中的声明。这无法被序列化。", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "为此文件发出的声明需要保留此导入以进行扩充。--isolatedDeclarations 不支持此功能。", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此文件的声明发出要求使用专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此文件的声明发出要求使用模块 \"{1}\" 中的专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "为此参数发出的声明要求将未定义隐式添加到其类型。--isolatedDeclarations 不支持此功能。", - "Declaration_expected_1146": "应为声明。", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "声明名称与内置全局标识符“{0}”冲突。", - "Declaration_or_statement_expected_1128": "应为声明或语句。", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "应为声明或语句。此 \"=\" 遵循语句块,因此如果打算编写重构赋值,则可能需要用括号将整个赋值括起来。", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "具有明确赋值断言的声明也必须具有类型批注。", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "具有初始值设定项的声明不能同时具有明确赋值断言。", - "Declare_a_private_field_named_0_90053": "声明名为 \"{0}\" 的专用字段。", - "Declare_method_0_90023": "声明方法“{0}”", - "Declare_private_method_0_90038": "声明私有方法 \"{0}\"", - "Declare_private_property_0_90035": "声明专用属性“{0}”", - "Declare_property_0_90016": "声明属性“{0}”", - "Declare_static_method_0_90024": "声明静态方法“{0}”", - "Declare_static_property_0_90027": "声明静态属性“{0}”", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "装饰器函数返回类型“{0}”不可分配到类型“{1}”。", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "装饰器函数返回类型为“{0}”,但预期为“void”或“any”。", - "Decorator_used_before_export_here_1486": "此处“导出”之前使用的修饰器。", - "Decorators_are_not_valid_here_1206": "修饰器在此处无效。", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "不能向多个同名的 get/set 访问器应用修饰器。", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果修饰器也出现在“导出”之前,则它们可能不会出现在“export”或“export default”之后。", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "修饰器必须位于属性声明的名称和所有关键字之前。", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "将 catch 子句变量默认为 “unknown” 而不是 “any”。", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模块的默认导出具有或正在使用专用名称“{0}”。", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "无法使用 --isolatedDeclarations 推断默认导出。", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "延迟导入中不允许使用默认导入。", - "Default_library_1424": "默认库", - "Default_library_for_target_0_1425": "目标 \"{0}\" 的默认库", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "仅当 ‘--module’ 标志设置为 ‘esnext’ 或 ‘preserve’ 时,才支持延迟导入。", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "以下标识符的定义与另一个文件中的定义冲突: {0}", - "Delete_all_unused_declarations_95024": "删除未使用的所有声明", - "Delete_all_unused_imports_95147": "删除所有未使用的导入", - "Delete_all_unused_param_tags_95172": "删除所有未使用的 “@param” 标记", - "Delete_the_outputs_of_all_projects_6365": "删除所有项目的输出。", - "Delete_unused_param_tag_0_95171": "删除未使用的 “@param” 标记“{0}”", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[已弃用] 请改用 \"--jsxFactory\"。已 \"react\" JSX 发出设为目标时,请指定要为 createElement 调用的对象", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[已弃用] 请改用 \"--outFile\"。连接并发出到单个文件的输出", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[已弃用] 请改用 \"--skipLibCheck\"。请跳过默认库声明文件的类型检查。", - "Deprecated_setting_Use_outFile_instead_6677": "弃用的设置。请改用 “outFile”。", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "是否忘记使用 \"await\"?", - "Did_you_mean_0_1369": "你是想使用 \"{0}\" 吗?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "你是想将 \"{0}\" 限制为类型 \"new (...args: any[]) => {1}\" 吗?", - "Did_you_mean_to_call_this_expression_6212": "你是想调用此表达式吗?", - "Did_you_mean_to_mark_this_function_as_async_1356": "你是想将此函数标记为 \"async\" 吗?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "你的意思是使用 \":\" 吗? 当包含对象文字属于解构模式时,\"=\" 只能跟在属性名称的后面。", - "Did_you_mean_to_use_new_with_this_expression_6213": "你是想将 \"new\" 用于此表达式吗?", - "Digit_expected_1124": "应为数字。", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目录“{0}”不存在,正在跳过该目录中的所有查找。", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "目录 '{0}' 不包含 package.json 作用域。导入将无法解析。", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "禁止在发出的 JavaScript 文件中添加 “use strict” 指令。", - "Disable_checking_for_this_file_90018": "禁用检查此文件", - "Disable_emitting_comments_6688": "禁用发出注释。", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "禁用在其 JSDoc 注释中包含 “@internal” 的发出声明。", - "Disable_emitting_files_from_a_compilation_6660": "禁用从编译发出文件。", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "禁用在报告了任何类型检查错误时发出文件。", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "在生成的代码中禁用擦除 “const enum” 声明。", - "Disable_error_reporting_for_unreachable_code_6603": "对无法访问的代码禁用错误报告。", - "Disable_error_reporting_for_unused_labels_6604": "对未使用的标签禁用错误报告。", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "禁用完整类型检查(仅报告关键分析和发出错误)。", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "在已编译输出中禁用生成自定义帮助程序函数(如 “__extends”)。", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "禁用包括任何库文件(包括默认的 lib.d.ts)。", - "Disable_loading_referenced_projects_6235": "禁止加载引用的项目。", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "在引用复合项目时禁用首选源文件而不是声明文件。", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "禁用在创建对象文字期间报告多余属性错误。", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "禁用将符号链接解析为其实际路径。这会关联到节点中的同一标志。", - "Disable_size_limitations_on_JavaScript_projects_6162": "禁用对 JavaScript 项目的大小限制。", - "Disable_solution_searching_for_this_project_6224": "对此项目禁用解决方案搜索。", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "禁止严格检查函数类型中的通用签名。", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "禁用针对 JavaScript 项目的类型获取", - "Disable_truncating_types_in_error_messages_6663": "在错误消息中禁用截断类型。", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "禁止使用源文件而不是引用项目中的声明文件。", - "Disable_wiping_the_console_in_watch_mode_6684": "禁用在监视模式下擦除控制台。", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "禁用通过查看项目中的文件名进行类型获取推理。", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "禁止 “import”、“require” 或 “” 扩展 TypeScript 应添加到项目的文件数。", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允许对同一文件采用大小不一致的引用。", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "请勿将三斜杠引用或导入的模块添加到已编译文件列表中。", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "不允许不属于 ECMAScript 的运行时构造。", - "Do_not_emit_comments_to_output_6009": "请勿将注释发出到输出。", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "请勿对具有 \"@internal\" 注释的代码发出声明。", - "Do_not_emit_outputs_6010": "请勿发出输出。", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "如果报告了任何错误,请不要发出输出。", - "Do_not_emit_use_strict_directives_in_module_output_6112": "不要在模块输出中发出 \"use strict\" 指令。", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "请勿清除生成代码中的常数枚举声明。", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "请勿在已编译输出中生成自定义帮助程序函数,例如 \"__extends\"。", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "请勿包括默认库文件(lib.d.ts)。", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "不报告有关不可访问的代码的错误。", - "Do_not_report_errors_on_unused_labels_6074": "不报告有关未使用的标签的错误。", - "Do_not_resolve_the_real_path_of_symlinks_6013": "不要解析 symlink 的真实路径。", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "不要转换或省略任何未标记为仅类型的导入或导出,确保它们是根据“模块”设置以输出文件格式编写的。", - "Do_not_truncate_error_messages_6165": "请勿删除错误消息。", - "Duplicate_function_implementation_2393": "函数实现重复。", - "Duplicate_identifier_0_2300": "标识符“{0}”重复。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "标识符“{0}”重复。编译器在模块的顶层范围中保留名称“{1}”。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "标识符“{0}”重复。编译器在包含异步函数的模块的顶层范围中保留名称“{1}”。", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "标识符“{0}”重复。在静态初始化表达式中中发出 “super” 引用时,编译器保留名称“{1}”。", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "标识符“{0}”重复。编译器使用“{1}”声明来支持异步函数。", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "标识符 \"{0}\" 重复。静态元素和实例元素不能共享相同的专用名称。", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "标识符 \"arguments\" 重复。编译器使用 \"arguments\" 初始化 rest 参数。", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "标识符 \"_newTarget\" 重复。编译器使用变量声明 \"_newTarget\" 来捕获 \"new.target\" 元属性引用。", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "标识符 \"_this\" 重复。编译器使用变量声明 \"_this\" 来捕获 \"this\" 引用。", - "Duplicate_index_signature_for_type_0_2374": "类型“{0}”的索引签名重复。", - "Duplicate_label_0_1114": "标签“{0}”重复。", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "重复的属性 \"{0}\"。", - "Duplicate_regular_expression_flag_1500": "正则表达式标志重复。", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "动态导入的说明符类型必须是 \"string\",但此处类型是 \"{0}\"。", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "仅当将 ‘--module’ 标记设置为 ‘es2020’、‘es2022’、‘esnext’、‘commonjs’、‘amd’、‘system’、‘umd’、‘node16’、‘node18’、'node20' 或 ‘nodenext’ 时,才支持动态导入。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "动态导入只能接受模块说明符和可选的特性集作为参数", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,动态导入才支持第二个参数。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript 导入和导出不能写入 \"verbatimModuleSyntax\" 下的 CommonJS 文件中。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript 导入和导出不能写入 \"verbatimModuleSyntax\" 下的 CommonJS 文件中。调整最近的 \"package.json\" 中的 \"type\" 字段,将此文件设置为 ECMAScript 模块,或调整 TypeScript 中的 \"verbatimModuleSyntax\"、\"module\" 和 \"moduleResolution\" 设置。", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "当 \"module\" 设置为 \"preserve\" 时,CommonJS 模块中不允许使用 ECMAScript 模块语法。", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "“{0}.{1}”的每个声明的值不同,其中应为“{2}”,但给出的是“{3}”。", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "联合类型 \"{0}\" 的每个成员都有构造签名,但这些签名都不能互相兼容。", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "联合类型 \"{0}\" 的每个成员都有签名,但这些签名都不能互相兼容。", - "Editor_Support_6249": "编辑器支持", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "元素隐式具有 \"any\" 类型,因为类型为 \"{0}\" 的表达式不能用于索引类型 \"{1}\"。", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "元素隐式具有 \"any\" 类型,因为索引表达式的类型不为 \"number\"。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隐式具有 \"any\" 类型,因为类型“{0}”没有索引签名。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "元素隐式具有 \"any\" 类型,因为类型 \"{0}\" 没有索引签名。你是想调用 \"{1}\" 吗?", - "Emit_6246": "发出", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "发出符合 ECMAScript 标准的类字段。", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在输出文件的开头发出一个 UTF-8 字节顺序标记(BOM)。", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "发出包含源映射而非包含单独文件的单个文件。", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "发出用于调试的编译器运行的 v8 CPU 配置文件。", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "发出其他 JavaScript 以轻松支持导入 CommonJS 模块。这将启用 “allowSyntheticDefaultImports” 以实现类型兼容性。", - "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而不是 Set 发出类字段。", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "为源文件中的修饰声明发出设计类型元数据。", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "发出更合规但更详细且性能较低的 JavaScript 进行迭代。", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "在单个文件内发出源以及源映射;需要设置 \"--inlineSourceMap\" 或 \"--sourceMap\"。", - "Enable_all_strict_type_checking_options_6180": "启用所有严格类型检查选项。", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "在 TypeScript 输出中启用颜色和格式设置,以使编译器错误更易于阅读。", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "启用允许将 TypeScript 项目与项目引用一起使用的约束。", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "为未在函数中显式返回的代码路径启用错误报告。", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "对具有隐式 “any” 类型的表达式和声明启用错误报告。", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "为 switch 语句中的故障案例启用错误报告。", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已检查类型的 JavaScript 文件中启用错误报告。", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "在未读取局部变量时启用错误报告。", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "在 “this” 的类型为 “any” 时启用错误报告。", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "启用对旧实验性修饰器的实验性支持。", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "启用导入具有任何扩展名的文件,前提是存在声明文件。", - "Enable_importing_json_files_6689": "启用导入 .json 文件。", - "Enable_lib_replacement_6808": "启用 lib 替换。", - "Enable_project_compilation_6302": "启用项目编译", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "对函数启用严格的 \"bind\"、\"call\" 和 \"apply\" 方法。", - "Enable_strict_checking_of_function_types_6186": "对函数类型启用严格检查。", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "启用类中属性初始化的严格检查。", - "Enable_strict_null_checks_6113": "启用严格的 NULL 检查。", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在配置文件中启用 \"experimentalDecorators\" 选项", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "在配置文件中启用 \"--jsx\" 标志", - "Enable_tracing_of_the_name_resolution_process_6085": "启用名称解析过程的跟踪。", - "Enable_verbose_logging_6713": "启用详细日志记录。", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "通过为所有导入创建命名空间对象来启用 CommonJS 和 ES 模块之间的发出互操作性。表示 \"allowSyntheticDefaultImports\"。", - "Enables_experimental_support_for_ES7_decorators_6065": "对 ES7 修饰器启用实验支持。", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "对发出修饰器的类型元数据启用实验支持。", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "对使用索引类型声明的键强制使用索引访问器。", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "确保使用替代修饰符标记派生类中的替代成员。", - "Ensure_that_casing_is_correct_in_imports_6637": "确保导入中的大小写正确。", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "确保可以安全地转译每个文件,而无需依赖其他导入。", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "请确保始终发出 “se strict”。", - "Entering_conditional_exports_6413": "正在输入条件导出。", - "Entry_point_for_implicit_type_library_0_1420": "隐式类型库 \"{0}\" 的入口点", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "隐式类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"", - "Enum_0_used_before_its_declaration_2450": "枚举“{0}”用于其声明前。", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "枚举声明只能与命名空间或其他枚举声明合并。", - "Enum_declarations_must_all_be_const_or_non_const_2473": "枚举声明必须全为常数或非常数。", - "Enum_member_expected_1132": "应为枚举成员。", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "启用“isolatedModules”时,非文本数值成员之后的枚举成员必须具有初始值设定项。", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "枚举成员初始值设定项必须可计算,而不引用具有 --isolatedDeclarations 的外部符号。", - "Enum_member_must_have_initializer_1061": "枚举成员必须具有初始化表达式。", - "Enum_name_cannot_be_0_2431": "枚举名不能为“{0}”。", - "Environment_Settings_6285": "环境设置", - "Errors_Files_6041": "错误文件", - "Escape_sequence_0_is_not_allowed_1488": "不允许转义序列“{0}”。", - "Examples_Colon_0_6026": "示例: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "比较类型“{0}”和“{1}”的复杂性过高。", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "与类型“{0}”和“{1}”相比,堆栈深度过高。", - "Exiting_conditional_exports_6416": "正在退出条件导出。", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "应为 {0}-{1} 类型参数;请为这些参数添加 \"@extends\" 标记。", - "Expected_0_arguments_but_got_1_2554": "应有 {0} 个参数,但获得 {1} 个。", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "应为 {0} 个参数,但得到的却是 {1} 个。你是否忘了将类型参数中的 \"void\" 包含到 \"Promise\"?", - "Expected_0_type_arguments_but_got_1_2558": "应有 {0} 个类型参数,但获得 {1} 个。", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "应为 {0} 类型参数;请为这些参数添加 \"@extends\" 标记。", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "应为 1 个参数,但得到 0。“new Promise()” 需要 JSDoc 提示才能生成可在没有参数的情况下调用的 “resolve”。", - "Expected_a_Unicode_property_name_1523": "应为 Unicode 属性名称。", - "Expected_a_Unicode_property_name_or_value_1527": "应为 Unicode 属性名称或值。", - "Expected_a_Unicode_property_value_1525": "应为 Unicode 属性值。", - "Expected_a_capturing_group_name_1514": "应为捕获组名称。", - "Expected_a_class_set_operand_1520": "应为类集操作数。", - "Expected_at_least_0_arguments_but_got_1_2555": "应有至少 {0} 个参数,但获得 {1} 个。", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "“{0}”预期的相应 JSX 结束标记。", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "预期的 JSX 片段的相应结束标记。", - "Expected_for_property_initializer_1442": "属性初始化表达式应有 \"=\"。", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "\"package.json\" 中 \"{0}\" 字段的类型应为 \"{1}\",但实际为 \"{2}\" 。", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "显示指定了模块解析类型:“{0}”。", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "除非 \"target\" 选项设置为 \"es2016\" 或更高版本,否则不能对 \"bigint\" 值执行求幂运算。", - "Export_0_from_module_1_90059": "从模块“{1}”导出“{0}”", - "Export_all_referenced_locals_90060": "导出所有引用的局部变量", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "面向 ECMAScript 模块时,不能使用导出分配。请考虑改用 \"export default\" 或另一种模块格式。", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "当 \"--module\" 标志是 \"system\" 时不支持导出分配。", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "导出声明与“{0}”的导出声明冲突。", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "命名空间中不允许有导出声明。", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "路径 '{1}' 处的 package.json 作用域中不存在导出说明符 '{0}'。", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "导出的类型别名“{0}”已经或正在使用专用名称“{1}”。", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "导出的类型别名“{0}”具有或正在使用模块“{2}”中的专用名称“{1}”。", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "导出的变量“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "导出的变量“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "导出的变量“{0}”具有或正在使用专用名称“{1}”。", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模块扩大中不允许导出和导出分配。", - "Expression_expected_1109": "应为表达式。", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表达式必须括在括号中才能用作修饰器。", - "Expression_or_comma_expected_1137": "应为表达式或逗号。", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "表达式生成的元组类型太大,无法表示。", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "表达式生成的联合类型过于复杂,无法表示。", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "表达式解析为 \"_super\",编译器使用 \"_super\" 获取基类引用。", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "表达式解析为编辑器用于捕获 \"new.target\" 元属性引用的变量声明 \"_newTarget\"。", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "表达式解析为编译器用于捕获 \"this\" 引用的变量声明 \"_this\"。", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "无法使用 --isolatedDeclarations 推断表达式类型。", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 子句不能包含具有 --isolatedDeclarations 的表达式。", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推断类型“{0}”的 Extends 子句具有或正在使用专用名称“{1}”。", - "Extract_base_class_to_variable_90064": "将基类提取到变量", - "Extract_binding_expressions_to_variable_90066": "将绑定表达式提取到变量", - "Extract_constant_95006": "提取常数", - "Extract_default_export_to_variable_90065": "将默认导出提取到变量", - "Extract_function_95005": "提取函数", - "Extract_to_0_in_1_95004": "提取到 {1} 中的 {0}", - "Extract_to_0_in_1_scope_95008": "提取到 {1} 范围中的 {0}", - "Extract_to_0_in_enclosing_scope_95007": "提取到封闭范围中的 {0}", - "Extract_to_interface_95090": "提取到接口", - "Extract_to_type_alias_95078": "提取到类型别名", - "Extract_to_typedef_95079": "提取到类型引用", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "提取到变量并替换为“{0} 为 typeof {0}”", - "Extract_type_95077": "提取类型", - "FILE_6035": "文件", - "FILE_OR_DIRECTORY_6040": "文件或目录", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency“{0}”。", - "Failed_to_resolve_under_condition_0_6415": "无法在条件“{0}”下解析。", - "Fallthrough_case_in_switch_7029": "switch 语句中的 Fallthrough 情况。", - "File_0_does_not_exist_6096": "文件“{0}”不存在。", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根据前面缓存的查找,文件“{0}”不存在。", - "File_0_exists_according_to_earlier_cached_lookups_6239": "根据前面缓存的查找,文件“{0}”存在。", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "文件“{0}”存在 - 将其用作名称解析结果。", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "文件“{0}”具有不受支持的扩展名。仅支持 {1} 扩展名。", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "文件 \"{0}\" 是 JavaScript 文件。你是想启用 \"allowJs\" 选项吗?", - "File_0_is_not_a_module_2306": "文件“{0}”不是模块。", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "文件 \"{0}\" 不在项目 \"{1}\" 的文件列表中。项目必须列出所有文件,或使用 \"include\" 模式。", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "文件“{0}”不在 \"rootDir\"“{1}”下。\"rootDir\" 应包含所有源文件。", - "File_0_not_found_6053": "找不到文件“{0}”。", - "File_Layout_6284": "文件布局", - "File_Management_6245": "文件管理", - "File_appears_to_be_binary_1490": "文件似乎是二进制文件。", - "File_change_detected_Starting_incremental_compilation_6032": "检测到文件更改。正在启动增量编译...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "文件是 CommonJS 模块,因为“{0}”没有字段 “type”", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "文件是 CommonJS 模块,因为“{0}”具有值不是 “module” 的字段 “type”", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "文件是 CommonJS 模块,因为找不到 “package.json”", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "文件是 ECMAScript 模块,因为“{0}”具有值为 “module” 的字段 “type”", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "文件是 CommonJS 模块; 它可能会转换为 ES 模块。", - "File_is_default_library_for_target_specified_here_1426": "文件是此处指定的目标的默认库。", - "File_is_entry_point_of_type_library_specified_here_1419": "文件是此处指定的类型库的入口点。", - "File_is_included_via_import_here_1399": "在此处通过导入包含了文件。", - "File_is_included_via_library_reference_here_1406": "在此处通过库引用包含了文件。", - "File_is_included_via_reference_here_1401": "在此处通过引用包含了文件。", - "File_is_included_via_type_library_reference_here_1404": "在此处通过类型库引用包含了文件。", - "File_is_library_specified_here_1423": "文件是此处指定的库。", - "File_is_matched_by_files_list_specified_here_1410": "通过此处指定的“文件”列表匹配了文件。", - "File_is_matched_by_include_pattern_specified_here_1408": "通过在此处指定包含模式匹配了文件。", - "File_is_output_from_referenced_project_specified_here_1413": "从此处指定的引用项目输出文件。", - "File_is_output_of_project_reference_source_0_1428": "文件是项目引用源 \"{0}\" 的输出", - "File_is_source_from_referenced_project_specified_here_1416": "文件源自此处指定的引用项目。", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "文件名“{0}”仅在大小写方面与包含的文件名“{1}”不同。", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "文件名“{0}”具有“{1}”扩展 - 改为查找“{2}”。", - "File_name_0_has_a_1_extension_stripping_it_6132": "文件名“{0}”的扩展名为“{1}”,请去除它。", - "File_redirects_to_file_0_1429": "文件重定向到文件 \"{0}\"", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "文件规范不能包含出现在递归目录通配符(\"*\"): “{0}”后的父目录(\"..\")。", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "文件规范不能以递归目录通配符结尾(\"**\"):“{0}”。", - "Filters_results_from_the_include_option_6627": "从 “include” 选项筛选结果。", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "修复检测到的所有拼写错误", - "Fix_all_expressions_possibly_missing_await_95085": "修复可能缺少 \"await\" 的所有表达式", - "Fix_all_implicit_this_errors_95107": "修复所有 implicit-'this' 错误", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修复所有错误的异步函数返回类型", - "Fix_all_with_type_only_imports_95182": "使用仅类型导入修复所有问题", - "For_nodejs_Colon_6287": "对于 nodejs:", - "Found_0_errors_6217": "找到 {0} 个错误。", - "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 个错误。注意文件更改。", - "Found_0_errors_in_1_files_6261": "在 {1} 个文件中找到 {0} 个错误。", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一文件中找到 {0} 个错误,起始位置为: {1}", - "Found_1_error_6216": "找到 1 个错误。", - "Found_1_error_Watching_for_file_changes_6193": "找到 1 个错误。注意文件更改。", - "Found_1_error_in_0_6259": "在 {0} 中找到 1 个错误", - "Found_package_json_at_0_6099": "在“{0}”处找到了 \"package.json\"。", - "Found_peerDependency_0_with_1_version_6282": "找到具有“{1}”版本的 peerDependency“{0}”。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "面向“ES5”时,在严格模式下,块内不允许函数声明。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "面向“ES5”时,在严格模式下,块内不允许函数声明。类定义自动处于严格模式。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "面向“ES5”时,在严格模式下,块内不允许函数声明。模块自动处于严格模式。", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少返回类型批注的函数表达式隐式具有“{0}”返回类型。", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "函数实现缺失或未立即出现在声明之后。", - "Function_implementation_name_must_be_0_2389": "函数实现名称必须为“{0}”。", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "由于函数不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函数缺少结束 return 语句,返回类型不包括 \"undefined\"。", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函数必须具有带有 --isolatedDeclarations 的显式返回类型注释。", - "Function_not_implemented_95159": "未实现函数。", - "Function_overload_must_be_static_2387": "函数重载必须为静态。", - "Function_overload_must_not_be_static_2388": "函数重载不能为静态。", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在联合类型中使用时,函数类型标记必须用括号括起来。", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在相交类型中使用时,函数类型标记必须用括号括起来。", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少返回类型注释的函数类型隐式具有 \"{0}\" 返回类型。", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "具有正文的函数只能与环境类合并。", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "从项目的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。", - "Generate_get_and_set_accessors_95046": "生成 \"get\" 和 \"set\" 访问器", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "为所有重写属性生成 \"get\" 和 \"set\" 访问器", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "生成 CPU 配置文件。", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "为每个相应的 \".d.ts\" 文件生成源映射。", - "Generates_an_event_trace_and_a_list_of_types_6237": "生成事件跟踪和类型列表。", - "Generates_corresponding_d_ts_file_6002": "生成相应的 \".d.ts\" 文件。", - "Generates_corresponding_map_file_6043": "生成相应的 \".map\" 文件。", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "生成器隐式具有 yield 类型 ‘{0}’。请考虑提供一个返回类型注释。", - "Generators_are_not_allowed_in_an_ambient_context_1221": "不允许在环境上下文中使用生成器。", - "Generic_type_0_requires_1_type_argument_s_2314": "泛型类型“{0}”需要 {1} 个类型参数。", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型类型“{0}”需要介于 {1} 和 {2} 类型参数之间。", - "Global_module_exports_may_only_appear_at_top_level_1316": "全局模块导出仅可出现在顶层级别中。", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "全局模块导出仅可出现声明文件中。", - "Global_module_exports_may_only_appear_in_module_files_1314": "全局模块导出仅可出现模块文件中。", - "Global_type_0_must_be_a_class_or_interface_type_2316": "全局类型“{0}”必须为类或接口类型。", - "Global_type_0_must_have_1_type_parameter_s_2317": "全局类型“{0}”必须具有 {1} 个类型参数。", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "在 \"--incremental\" 和 \"--watch\" 中有重新编译,假定文件中的更改只会影响直接依赖它的文件。", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 “incremental” 和 “watch” 模式的项目中具有重新编译会假定文件中的更改将仅直接影响依赖于它的文件。", - "Hexadecimal_digit_expected_1125": "应为十六进制数字。", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "应为标识符。“{0}”是模块顶层的预留字。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "应为标识符。“{0}”在严格模式下是保留字。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "应为标识符。“{0}”在严格模式下是保留字。类定义自动处于严格模式。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "应为标识符。“{0}”是严格模式下的保留字。模块自动处于严格模式。", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "应为标识符。\"{0}\" 是保留字,不能在此处使用。", - "Identifier_expected_1003": "应为标识符。", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "应为标识符。转换 ECMAScript 模块时,\"__esModule\" 保留为导出标记。", - "Identifier_or_string_literal_expected_1478": "应为标识符或字符串字面量。", - "Identifier_string_literal_or_number_literal_expected_1496": "应为标识符、字符串文本或数字文本。", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果“{0}”包实际上公开此模块,请考虑发送拉取请求以修正“https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}”", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果“{0}”包实际公开了此模块,请尝试添加包含 `declare module‘{1}';` 的新声明(.d.ts)文件", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "忽略找到的 tsconfig,使用命令行选项和文件进行构建。", - "Ignore_this_error_message_90019": "忽略此错误信息", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用默认编译器选项编译指定文件。", - "Implement_all_inherited_abstract_classes_95040": "实现继承的所有抽象类", - "Implement_all_unimplemented_interfaces_95032": "实现未实现的所有接口", - "Implement_inherited_abstract_class_90007": "实现已继承的抽象类", - "Implement_interface_0_90006": "实现接口“{0}”", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "导出的类“{0}”的 Implements 子句具有或正在使用专用名称“{1}”。", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "\"symbol\" 到 \"string\" 的隐式转换将在运行时失败。请考虑在 \"String(...)\" 中包装此表达式。", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "导入“{0}”与此文件中使用的全局值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "导入“{0}”与本地值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", - "Import_0_from_1_90013": "从“{1}”导入“{0}”", - "Import_assertion_values_must_be_string_literal_expressions_2837": "导入断言值必须为字符串字面量表达式。", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "不允许在编译到 commonJS“require”调用的语句导入断言。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,才支持导入断言。", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "导入断言不能用于仅类型导入或导出。", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "导入断言已被导入属性替换。使用 “with” 而不是 “assert”。", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "面向 ECMAScript 模块时,不能使用导入分配。请考虑改用 \"import * as ns from \"mod\"\"、\"import {a} from \"mod\"\"、\"import d from \"mod\"\" 或另一种模块格式。", - "Import_attribute_values_must_be_string_literal_expressions_2858": "导入属性值必须为字符串字面量表达式。", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "不允许在编译到 commonJS“require” 调用的语句导入属性。", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,才支持导入属性。", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "导入属性不能用于仅类型导入或导出。", - "Import_declaration_0_is_using_private_name_1_4000": "导入声明“{0}”使用的是专用名称“{1}”。", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "导入声明与“{0}”的局部声明冲突。", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空间中的导入声明不能引用模块。", - "Import_emit_helpers_from_tslib_6139": "从 \"tslib\" 导入发出帮助程序。", - "Import_may_be_converted_to_a_default_import_80003": "导入可能会转换为默认导入。", - "Import_name_cannot_be_0_2438": "导入名称不能为“{0}”。", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "环境模块声明中的导入或导出声明不能通过相对模块名引用模块。", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "路径 '{1}' 处的 package.json 作用域中不存在导入说明符 '{0}'。", - "Imported_via_0_from_file_1_1393": "通过 {0} 从文件 \"{1}\" 导入", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "通过 {0} 从文件 \"{1}\" 导入,以按照 compilerOptions 中指定的配置导入 \"importHelpers\"", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "通过 {0} 从文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数", - "Imported_via_0_from_file_1_with_packageId_2_1394": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以按照 compilerOptions 中指定的方式导入 \"importHelpers\"", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "当 ‘module’ 设置为 ‘{0}’ 时,将 JSON 文件导入 ECMAScript 模块需要 ‘type: “json”’ 导入属性。", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模块扩大中不允许导入。请考虑将它们移动到封闭的外部模块。", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在环境枚举声明中,成员初始化表达式必须是常数表达式。", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在包含多个声明的枚举中,只有一个声明可以省略其第一个枚举元素的初始化表达式。", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含文件列表。这不支持 glob 模式,与 “include” 不同。", - "Include_modules_imported_with_json_extension_6197": "包括通过 \".json\" 扩展导入的模块", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在发出的 JavaScript 内的源映射中包含源代码。", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在发出的 JavaScript 中包括源映射文件。", - "Includes_imports_of_types_referenced_by_0_90054": "包含由“{0}”引用的类型的导入", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch,-w 将开始监视当前项目的文件更改。设置后,可以使用以下内容配置监视模式:", - "Incomplete_quantifier_Digit_expected_1505": "限定符不完整。应为数字。", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "类型“{1}”中缺少类型“{0}”的索引签名。", - "Index_signature_in_type_0_only_permits_reading_2542": "类型“{0}”中的索引签名仅允许读取。", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合并声明“{0}”中的单独声明必须全为导出或全为局部声明。", - "Infer_all_types_from_usage_95023": "从使用情况推导所有类型", - "Infer_function_return_type_95148": "推断函数返回类型", - "Infer_parameter_types_from_usage_95012": "根据使用情况推断参数类型", - "Infer_this_type_of_0_from_usage_95080": "从用法中推断出 \"{0}\" 的 \"this\" 类型", - "Infer_type_of_0_from_usage_95011": "根据使用情况推断“{0}”的类型", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支持从类表达式推理。", - "Initialize_property_0_in_the_constructor_90020": "初始化构造函数中的属性“{0}”", - "Initialize_static_property_0_90021": "初始化静态属性“{0}”", - "Initializer_for_property_0_2811": "属性“{0}”的初始化表达式", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "实例成员变量“{0}”的初始化表达式不能引用构造函数中声明的标识符“{1}”。", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "不允许在环境上下文中使用初始化表达式。", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 项目并创建 tsconfig.json 文件。", - "Inline_variable_95184": "内联变量", - "Insert_command_line_options_and_files_from_a_file_6030": "从文件插入命令行选项和文件。", - "Install_0_95014": "安装“{0}”", - "Install_all_missing_types_packages_95033": "安装缺少的所有类型包", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "接口“{0}”不能同时扩展类型“{1}”和“{2}”。", - "Interface_0_incorrectly_extends_interface_1_2430": "接口“{0}”错误扩展接口“{1}”。", - "Interface_declaration_cannot_have_implements_clause_1176": "接口声明不能有 \"implements\" 子句。", - "Interface_must_be_given_a_name_1438": "必须为接口指定名称。", - "Interface_name_cannot_be_0_2427": "接口名称不能为“{0}”。", - "Interop_Constraints_6252": "互操作约束", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "将可选属性类型解释为已写,而不是添加 \"undefined\"。", - "Invalid_character_1127": "无效的字符。", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "无效的导入说明符 '{0}' 没有可行的解决方法。", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "扩大中的模块名称无效。模块“{0}”解析到位于“{1}”处的非类型化模块,其无法扩大。", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "扩大中的模块名无效,找不到模块“{0}”。", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新表达式中的可选链无效。是否要调用“{0}()”?", - "Invalid_reference_directive_syntax_1084": "\"reference\" 指令语法无效。", - "Invalid_syntax_in_decorator_1498": "修饰器中的语法无效。", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "“{0}”的使用无效。它不能在类静态块内使用。", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "“{0}”的使用无效。模块自动处于严格模式。", - "Invalid_use_of_0_in_strict_mode_1100": "严格模式下“{0}”的使用无效。", - "Invalid_value_for_ignoreDeprecations_5103": "“--ignoreDeprecations”的值无效。", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "\"jsxFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "\"jsxFragmentFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "\"--reactNamespace\" 的值无效。“{0}”不是有效的标识符。", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "很可能缺少了分隔这两个模板表达式的逗号。它们构成了无法调用的带标记的模板表达式。", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素类型 \"{0}\" 不是有效的 JSX 元素。", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其实例类型 \"{0}\" 不是有效的 JSX 元素。", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其返回类型 \"{0}\" 不是有效的 JSX 元素。", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其类型“{0}”不是有效的 JSX 元素类型。", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" 不匹配 \"extends {2}\" 子句。", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" 未附加到类。", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" 可能仅出现在签名的最后一个参数中。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc \"@param\" 标记具有名称 \"{0}\",但不存在具有该名称的参数。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc \"@param\" 标记的名称为“{0}”,但该名称没有参数。如果它为数组类型,将匹配 \"arguments\"。", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以转换为 TypeScript 类型。", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc \"@typedef\" 标记应具有类型注释,或其后跟有 \"@property\" 或 \"@member\" 标记。", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef 可以转换为 TypeScript 类型。", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 类型只能在文档注释内部使用。", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 类型可能会移到 TypeScript 类型。", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能为 JSX 属性分配非空“表达式”。", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 元素“{0}”没有相应的结束标记。", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 元素类不支持特性,因为它不具有“{0}”属性。", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "JSX 元素隐式具有类型 \"any\",因为不存在接口 \"JSX.{0}\"。", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "JSX 元素隐式具有类型 \"any\",因为不存在全局类型 \"JSX.Element\"。", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 元素类型“{0}”不具有任何构造签名或调用签名。", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 元素不能具有多个名称相同的特性。", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 表达式不能使用逗号运算符。你是想写入数组吗?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX 表达式必须具有一个父元素。", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段没有相应的结束标记。", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 属性访问表达式不能包含 JSX 命名空间名称", - "JSX_spread_child_must_be_an_array_type_2609": "JSX 扩展子属性必须为数组类型。", - "JavaScript_Support_6247": "JavaScript 支持", - "Jump_target_cannot_cross_function_boundary_1107": "跳转目标不能跨越函数边界。", - "KIND_6034": "种类", - "Keywords_cannot_contain_escape_characters_1260": "关键字不能包含转义字符。", - "LOCATION_6037": "位置", - "Language_and_Environment_6254": "语言和环境", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗号运算符的左侧未使用,没有任何副作用。", - "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定了库 \"{0}\"", - "Library_referenced_via_0_from_file_1_1405": "通过 \"{0}\" 从文件 \"{1}\" 引用了库", - "Line_break_not_permitted_here_1142": "不允许在此处换行。", - "Line_terminator_not_permitted_before_arrow_1200": "箭头前不允许有行终止符。", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "解析模块时要搜索的文件名后缀列表。", - "List_of_folders_to_include_type_definitions_from_6161": "包含类型定义来源的文件夹列表。", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "根文件夹列表,其组合内容表示在运行时的项目结构。", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在从根目录“{1}”加载“{0}”,候选位置“{2}”。", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在从 \"node_modules\" 文件夹加载模块“{0}”,目标文件类型: {1}。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在将模块作为文件/文件夹进行加载,候选模块位置“{0}”,目标文件类型: {1}。", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "在 “moduleResolution” 进程期间使用的日志路径。", - "Longest_matching_prefix_for_0_is_1_6108": "“{0}”的最长匹配前缀为“{1}”。", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "正在 \"node_modules\" 文件夹中查找,初始位置为“{0}”。", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "让所有 \"super()\" 调用成为构造函数中的第一个语句", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "使 keyof 仅返回字符串,而不是字符串、数字或符号。旧版选项。", - "Make_super_call_the_first_statement_in_the_constructor_90002": "在构造函数中,使 \"super()\" 调用第一个语句", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "映射的对象类型隐式地含有 \"any\" 模板类型。", - "Mark_array_literal_as_const_90070": "将数组文字标记为常量", - "Matched_0_condition_1_6403": "匹配的“{0}”条件“{1}”。", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "默认情况下匹配包括模式 “**/*”", - "Matched_by_include_pattern_0_in_1_1407": "通过在 \"{1}\" 中的包含模式 \"{0}\" 匹配", - "Member_0_implicitly_has_an_1_type_7008": "成员“{0}”隐式包含类型“{1}”。", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成员 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", - "Merge_conflict_marker_encountered_1185": "遇到合并冲突标记。", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "合并声明“{0}”不能包含默认导出声明。请考虑改为添加一个独立的“导出默认 {0}”声明。", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "元属性“{0}”只能在函数声明、函数表达式或构造函数的主体中使用。", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "方法“{0}”不能具有实现,因为它标记为抽象。", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "导出接口的方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "导出接口的方法“{0}”具有或正在使用专用名称“{1}”。", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必须具有带有 --isolatedDeclarations 的显式返回类型注释。", - "Method_not_implemented_95158": "方法未实现。", - "Modifiers_cannot_appear_here_1184": "修饰符不能出现在此处。", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模块 \"{0}\" 只能在使用 \"{1}\" 标志时进行默认导入", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "无法使用此构造导入模块“{0}”。说明符仅解析为 ES 模块,后者不能使用“require”进行导入。请改用 ECMAScript 导入。", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模块 \"{0}\" 在本地声明 \"{1}\",但它被导出为 \"{2}\"。", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "模块 \"{0}\" 在本地声明 \"{1}\",但未导出它。", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "模块 \"{0}\" 不引用类型,但在此处用作类型。你是想使用 \"typeof import('{0}')\" 吗?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "模块“{0}”不引用值,但在此处用作值。", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "模块 {0} 已导出一个名为“{1}”的成员。请考虑重新显式导出以解决歧义。", - "Module_0_has_no_default_export_1192": "模块“{0}”没有默认导出。", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "模块 \"{0}\" 没有默认导出。你是想改为使用 \"import { {1} } from {0}\" 吗?", - "Module_0_has_no_exported_member_1_2305": "模块“{0}”没有导出的成员“{1}”。", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模块 \"{0}\" 没有导出的成员 \"{1}\"。你是想改用 \"import {1} from {0}\" 吗?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "模块“{0}”被具有相同名称的局部声明隐藏。", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模块“{0}”使用 \"export =\" 且无法与 \"export *\" 一起使用。", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模块“{0}”解析为文件“{1}”中本地声明的环境模块。", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模块“{0}”已解析为“{1}”,但未设置“--allowArbitraryExtensions”。", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模块“{0}”已解析为“{1}”,但尚未设置 \"--jsx\"。", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模块 \"{0}\" 已解析为 \"{1}\",但未使用 \"--resolveJsonModule\"。", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模块声明名称只能使用 ' 或 \" 引用字符串。", - "Module_name_0_matched_pattern_1_6092": "模块名“{0}”,匹配的模式“{1}”。", - "Module_name_0_was_not_resolved_6090": "======== 未解析模块名“{0}”。========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模块名“{0}”已成功解析为“{1}”。========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模块名 \"{0}\" 已成功解析为 \"{1}\",包 ID 为 \"{2}\"。========", - "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模块解析类型,正在使用“{0}”。", - "Module_resolution_using_rootDirs_has_failed_6111": "使用 \"rootDirs\" 的模块解析失败。", - "Modules_6244": "模块", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "将已标记的元组元素修饰符移至标签", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "将默认导出中的表达式移动到变量,并向其添加类型注释。", - "Move_to_a_new_file_95049": "移动到新的文件", - "Move_to_file_95178": "移动到文件", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允许使用多个连续的数字分隔符。", - "Multiple_constructor_implementations_are_not_allowed_2392": "不允许存在多个构造函数实现。", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "换行符", - "Name_is_not_valid_95136": "名称无效", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "命名捕获组仅在面向“ES2018”或更高版本时可用。", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "名称相同的命名捕获组必须彼此排斥。", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "延迟导入中不允许使用命名导入。", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "当 ‘module’ 设置为 ‘{0}’ 时,不允许从 JSON 文件到 ECMAScript 模块中的命名导入。", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "“{1}”和“{2}”类型的命名属性“{0}”不完全相同。", - "Namespace_0_has_no_exported_member_1_2694": "命名空间“{0}”没有已导出的成员“{1}”。", - "Namespace_must_be_given_a_name_1437": "必须为命名空间指定名称。", - "Namespace_name_cannot_be_0_2819": "命名空间名称不能为“{0}”。", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "启用“{0}”时,全局脚本文件中不允许使用命名空间。如果此文件不是全局脚本,请将“moduleDetection”设置为“force”或添加空的“export {}”语句。", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "修饰器和修饰符都不能应用于“this”参数。", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "没有任何基构造函数具有指定数量的类型参数。", - "No_constituent_of_type_0_is_callable_2755": "不可调用 \"{0}\" 类型的任何组成部分。", - "No_constituent_of_type_0_is_constructable_2759": "不可构造 \"{0}\" 类型的任何组成部分。", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在类型 \"{1}\" 上找不到具有类型为 \"{0}\" 的参数的索引签名。", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在配置文件“{0}”中找不到任何输入。指定的 \"include\" 路径为“{1}”,\"exclude\" 路径为“{2}”。", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再受支持。在早期版本中,手动设置用于读取文件的文本编码。", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "没有需要 {0} 参数的重载,但存在需要 {1} 或 {2} 参数的重载。", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "没有需要 {0} 类型参数的重载,但存在需要 {1} 或 {2} 类型参数的重载。", - "No_overload_matches_this_call_2769": "没有与此调用匹配的重载。", - "No_type_could_be_extracted_from_this_type_node_95134": "无法从该类型节点中提取任何类型", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速记属性 \"{0}\" 的范围内不存在任何值。请声明一个值或提供一个初始值设定项。", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象类“{0}”不会实现继承自“{2}”类的抽象成员 {1}。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2}。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2} 和 {3} 等。", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象类表达式不会实现继承自“{1}”类的抽象成员“{0}”。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象类表达式缺少“{0}”的以下成员的实现: {1}。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象类表达式缺少“{0}”的以下成员的实现: {1} 和 {2} 等。", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 null 断言只能在 TypeScript 文件中使用。", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "此处声明了非简单参数。", - "Not_all_code_paths_return_a_value_7030": "并非所有代码路径都返回值。", - "Not_all_constituents_of_type_0_are_callable_2756": "\"{0}\" 类型的部分要素不可调用。", - "Not_all_constituents_of_type_0_are_constructable_2760": "\"{0}\" 类型的部分要素不可构造。", - "Numbers_out_of_order_in_quantifier_1506": "数字在限定符中顺序不对。", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "绝对值大于或等于 2^53 的数值文本过大,无法用整数准确表示。", - "Numeric_separators_are_not_allowed_here_6188": "此处不允许使用数字分隔符。", - "Object_is_of_type_unknown_2571": "对象的类型为 \"unknown\"。", - "Object_is_possibly_null_2531": "对象可能为 \"null\"。", - "Object_is_possibly_null_or_undefined_2533": "对象可能为 \"null\" 或“未定义”。", - "Object_is_possibly_undefined_2532": "对象可能为“未定义”。", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "对象字面量只能指定已知属性,并且“{0}”不在类型“{1}”中。", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "对象字面量只能指定已知的属性,但“{0}”中不存在类型“{1}”。是否要写入 {2}?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "对象字面量的属性“{0}”隐式含有“{1}”类型。", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "无法使用 --isolatedDeclarations 推断包含速记属性的对象。", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "无法使用 --isolatedDeclarations 推断包含传播赋值的对象。", - "Octal_digit_expected_1178": "需要八进制数字。", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字符类中不允许使用八进制转义序列和反向引用。如果这是转义序列,请改用语法“{0}”。", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允许使用八进制转义序列。请使用语法“{0}”。", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允许使用八进制文字。请使用语法“{0}”。", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "“{0}.{1}”的一个值是字符串“{2}”,另一个值被假定为未知数值。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "\"for...in\" 语句中只允许单个变量声明。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "\"for...of\" 语句中只允许单个变量声明。", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "使用 \"new\" 关键字只能调用 void 函数。", - "Only_ambient_modules_can_use_quoted_names_1035": "仅环境模块可使用带引号的名称。", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} 旁仅支持 \"amd\" 和 \"system\" 模块。", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "只能使用 --isolatedDeclarations 推断常量数组。", - "Only_emit_d_ts_declaration_files_6014": "仅发出 \".d.ts\" 声明文件。 ", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "仅输出 d.ts 文件,而不输出 JavaScript 文件。", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "通过 \"super\" 关键字只能访问基类的公共方法和受保护方法。", - "Operator_0_cannot_be_applied_to_type_1_2736": "运算符 \"{0}\" 不能应用于类型 \"{1}\"。", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "运算符“{0}”不能应用于类型“{1}”和“{2}”。", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "运算符不得混合在字符类中。改为将其包装在嵌套类中。", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在编辑时选择项目退出多项目引用检查。", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "选项“{0}={1}”已删除。请从配置中删除它。", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "选项“{0}={1}”已弃用,并将停止在 TypeScript {2} 中运行。指定 compilerOption“ignoreDeprecations”:“{3}”以使此错误静音。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定,或者在命令行上设置为 \"false\" 或 \"null\"。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定或在命令行上设置为 \"null\"。", - "Option_0_can_only_be_specified_on_command_line_6266": "选项“{0}”只能在命令行上指定。", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "仅当提供了选项 \"--inlineSourceMap\" 或选项 \"--sourceMap\" 时,才能使用选项“{0}”。", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有在“moduleResolution”设置为“node16”、“nodenext”或“bundler”时,才能使用选项“{0}”。", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "只有在 \"module\" 设置为 \"preserve\"、\"commonjs\"、\"es2015\" 或更高版本时,才能使用选项“{0}”。", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "选项 \"jsx\" 为“{1}”时,不能指定选项“{0}”。", - "Option_0_cannot_be_specified_with_option_1_5053": "选项“{0}”不能与选项“{1}”同时指定。", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "无法在不指定选项“{1}”的情况下指定选项“{0}”。", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "无法在不指定选项 {1} 或选项 {2} 的情况下指定选项 {0}。", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "选项“{0}”已删除。请从配置中删除它。", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "选项“{0}”已弃用,并将停止在 TypeScript {1} 中运行。指定 compilerOption“ignoreDeprecations”:“{2}”以使此错误静音。", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "选项“{0}”是冗余选项,不能与选项“{1}”同时指定。", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "仅当设置了 'noEmit'、'emitDeclarationOnly' 或 'rewriteRelativeImportExtensions' 其中之一时,才能使用选项 'allowImportingTsExtensions'。", - "Option_build_must_be_the_first_command_line_argument_6369": "选项 '--build' 必须是第一个命令行参数。", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "选项 \"isolatedModules\" 只可在提供了选项 \"--module\" 或者选项 \"target\" 是 \"ES2015\" 或更高版本时使用。", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "当选项“module”设置为“{1}”时,选项“moduleResolution”必须设置为“{0}”(或保留为未指定)。", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "当选项“moduleResolution”设置为“{1}”时,选项“module”必须设置为“{0}”。", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "启用“{0}”时,无法禁用选项“preserveConstEnums”。", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "选项 \"project\" 在命令行上不能与源文件混合使用。", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "当“moduleResolution”设置为“classic”时,无法指定选项“--resolveJsonModule”。", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "当“module”设置为“none”、“system”或“umd”时,无法指定选项“--resolveJsonModule”。", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "当“module”设置为“UMD”、“AMD”或“System”时,不能使用选项“verbatimModuleSyntax”。", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "选项“{0}”与“{1}”不能组合在一起。", - "Options_Colon_6027": "选项:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "其他输出", - "Output_Formatting_6256": "输出格式设置", - "Output_compiler_performance_information_after_building_6615": "生成后输出编译器性能信息。", - "Output_directory_for_generated_declaration_files_6166": "已生成声明文件的输出目录。", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "未从源文件“{1}”生成输出文件“{0}”。", - "Output_from_referenced_project_0_included_because_1_specified_1411": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的输出", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的输出", - "Output_more_detailed_compiler_performance_information_after_building_6632": "生成后输出更详细的编译器性能信息。", - "Overload_0_of_1_2_gave_the_following_error_2772": "第 {0} 个重载(共 {1} 个),“{2}”,出现以下错误。", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "重载签名必须都是抽象的或都是非抽象的。", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "重载签名必须全部为环境签名或非环境签名。", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "重载签名必须均导出或均不导出。", - "Overload_signatures_must_all_be_optional_or_required_2386": "重载签名必须全部为可选签名或必需签名。", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "重载签名必须全部是公共签名、私有签名或受保护签名。", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "参数“{0}”不能引用在它之后声明的标识符“{1}”。", - "Parameter_0_cannot_reference_itself_2372": "参数“{0}”不能引用它自身。", - "Parameter_0_implicitly_has_an_1_type_7006": "参数“{0}”隐式具有“{1}”类型。", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "参数 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "参数“{0}”和参数“{1}”的位置不一样。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "访问器的参数 \"{0}\" 具有或正在使用外部模块 \"{2}\" 中的名称 \"{1}\" ,但不能为其命名。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "访问器的参数 \"{0}\" 具有或正在使用专用模块 \"{2}\" 中的名称 \"{1}\" 。", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "访问器的参数 \"{0}\" 具有或正在使用专用名称 \"{1}\"。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "导出接口中的调用签名的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "导出接口中的调用签名的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "导出类中的构造函数的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "导出类中的构造函数的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "导出类中的构造函数的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "导出接口中的构造函数签名的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "导出接口中的构造函数签名的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "导出函数的参数“{0}”具有或正在使用外部模块 {2} 中的名称“{1}”,但不能为其命名。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "导出函数的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "导出函数的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "来自导出接口的索引签名的参数“{0}”具有或正在使用来自私有模块“{2}”的名称“{1}”。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "来自导出接口的索引签名的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "导出接口中的方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "导出接口中的方法的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "导出类中的公共方法的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "导出类中的公共方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "导出类中的公共方法的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "导出类中的公共静态方法的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "导出类中的公共静态方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "导出类中的公共静态方法的参数“{0}”具有或正在使用专用名称“{1}”。", - "Parameter_cannot_have_question_mark_and_initializer_1015": "参数不能包含问号和初始化表达式。", - "Parameter_declaration_expected_1138": "应为参数声明。", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "参数具有名称,但不具有类型。你是想使用 \"{0}: {1}\" 吗?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "参数修饰符只能在 TypeScript 文件中使用。", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "参数必须具有带有 --isolatedDeclarations 的显式类型注释。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "导出类中的公共 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "导出类中的公共 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "以严格模式进行分析,并为每个源文件发出 \"use strict\" 指令。", - "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.js 中 \"files\" 列表的一部分", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式“{0}”最多只可具有一个 \"*\" 字符。", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "\"--diagnostics\" 或 \"--extendedDiagnostics\" 的性能计时在此会话中不可用。未能找到 Web 性能 API 的本机实现。", - "Platform_specific_6912": "平台特定", - "Prefix_0_with_an_underscore_90025": "带下划线的前缀“{0}”", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "使用 \"declare\" 作为所有错误的属性声明的前缀", - "Prefix_all_unused_declarations_with_where_possible_95025": "尽可能在所有未使用的声明前添加前缀 \"_\"", - "Prefix_with_declare_95094": "使用 \"declare\" 前缀", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "保留 JavaScript 输出中未使用的导入值,否则将删除这些值。", - "Print_all_of_the_files_read_during_the_compilation_6653": "打印在编译过程中读取的所有文件。", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "打印在编译过程中读取的文件,包括包含它的原因。", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "打印文件的名称及编译包含这些文件的原因。", - "Print_names_of_files_part_of_the_compilation_6155": "属于编译一部分的文件的打印名称。", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "打印编译包含的文件的名称,然后停止处理。", - "Print_names_of_generated_files_part_of_the_compilation_6154": "属于编译一部分的已生成文件的打印名称。", - "Print_the_compiler_s_version_6019": "打印编译器的版本。", - "Print_the_final_configuration_instead_of_building_1350": "打印最终配置而不是生成。", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "编译后打印已发出文件的名称。", - "Print_this_message_6017": "打印此消息。", - "Private_accessor_was_defined_without_a_getter_2806": "定义了专用访问器,但没有 Getter。", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "必须在封闭类中声明私有字段“{0}”。", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "不允许在变量声明中使用专用标识符。", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允许在类主体之外使用专用标识符。", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "专用标识符仅允许在类主体中使用,并且只能用作类成员声明的一部分、属性访问或用在 \"in\" 表达式的左侧", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "专用标识符仅在面向 ECMAScript 2015 和更高版本时可用。", - "Private_identifiers_cannot_be_used_as_parameters_18009": "不能将专用标识符用作参数。", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "不能在类型参数上访问专用或受保护的成员 \"{0}\"。", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "无法生成项目“{0}”,因为其依赖项“{1}”有错误", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "无法生成项目 \"{0}\" ,因为未生成其依赖项 \"{1}\"", - "Project_0_is_being_forcibly_rebuilt_6388": "正在强制重新生成项目“{0}”", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "由于 buildinfo 文件“{1}”指示文件“{2}”曾是编译的根文件,但不再是了,因此项目“{0}”已过期。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "由于 buildinfo 文件“{1}”指示程序需要报告错误,因此项目“{0}”已过期。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "项目“{0}”已过期,因为 buildinfo 文件“{1}”指示某些更改未发出", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "由于 buildinfo 文件“{1}”指示 compilerOptions 中存在更改,因此项目“{0}”已过期", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "项目“{0}”已过期,因为输出“{1}”早于输入“{2}”", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "项目“{0}”已过期,因为输出文件“{1}”不存在", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "项目 \"{0}\" 已过期,因为其输出是使用与当前版本 \"{2}\" 不同的版本 \"{1}\" 生成的", - "Project_0_is_up_to_date_6361": "“{0}”项目已是最新", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "项目“{0}”是最新的,因为最新的输入“{1}”早于输出“{2}”", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "项目“{0}”是最新的,但需要更新早于输入文件的输出文件的时间戳", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "项目“{0}”已是最新,拥有来自其依赖项的 .d.ts 文件", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "项目引用不能形成环形图。检测到循环: {0}", - "Projects_6255": "项目", - "Projects_in_this_build_Colon_0_6355": "此生成中的项目: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "只有在面向 ECMAScript 2015 及更高版本时,才可使用带有 \"accessor\" 修饰符的属性。", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "属性“{0}”不能具有初始化表达式,因为它标记为摘要。", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "属性“{0}”来自索引签名,因此必须使用[“{0}”]访问它。", - "Property_0_does_not_exist_on_type_1_2339": "类型“{1}”上不存在属性“{0}”。", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "属性“{0}”在类型“{1}”上不存在。你是否指的是“{2}”?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "属性“{0}”在类型“{1}”上不存在。你的意思是改为访问静态成员“{2}”吗?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "属性“{0}”在类型“{1}”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{2}”或更高版本。", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "属性“{0}”在类型 “{1}” 上不存在。请尝试将 “lib” 编译器选项更改为包含 “dom”。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "属性“{0}”没有初始化表达式,并且未在类静态块中明确分配。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "属性“{0}”没有初始化表达式,且未在构造函数中明确赋值。", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "属性“{0}”隐式具有类型 \"any\",因为其 get 访问器缺少返回类型批注。", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "属性“{0}”隐式具有类型 \"any\",因为其 set 访问器缺少参数类型批注。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "属性 \"{0}\" 隐式具有类型 \"any\",但可从用法为其 get 访问器推断出更好类型。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "属性 \"{0}\" 隐式具有类型 \"any\",但可从用法为其 set 访问器推断出更好的类型。", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "类型“{1}”中的属性“{0}”不可分配给基类型“{2}”中的同一属性。", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "类型“{1}”中的属性“{0}”不可分配给类型“{2}”。", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "类型 \"{1}\" 中的属性 \"{0}\" 引用了不能从类型 \"{2}\" 内访问的其他成员。", - "Property_0_is_declared_but_its_value_is_never_read_6138": "已声明属性“{0}”,但从未读取其值。", - "Property_0_is_incompatible_with_index_signature_2530": "属性“{0}”与索引签名不兼容。", - "Property_0_is_missing_in_type_1_2324": "类型“{1}”中缺少属性“{0}”。", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "类型 \"{1}\" 中缺少属性 \"{0}\",但类型 \"{2}\" 中需要该属性。", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "属性 \"{0}\" 在类 \"{1}\" 外部不可访问,因为它具有专用标识符。", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "属性“{0}”在类型“{1}”中为可选,但在类型“{2}”中为必选。", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "属性“{0}”为私有属性,只能在类“{1}”中访问。", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "属性“{0}”在类型“{1}”中是私有属性,但在类型“{2}”中不是。", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "属性“{0}”受保护,只能通过类“{1}”的实例进行访问。这是类“{2}”的实例。", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "属性“{0}”受保护,只能在类“{1}”及其子类中访问。", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "属性“{0}”受保护,但类型“{1}”并不是从“{2}”派生的类。", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "属性“{0}”在类型“{1}”中受保护,但在类型“{2}”中为公共属性。", - "Property_0_is_used_before_being_assigned_2565": "在赋值前使用了属性“{0}”。", - "Property_0_is_used_before_its_initialization_2729": "属性 \"{0}\" 在其初始化前已被使用。", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "类型“{1}”上不存在属性“{0}”。你是否是指“{2}”?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 展开特性的“{0}”属性不能分配给目标属性。", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "导出匿名类类型的属性“{0}”可能不是私有或受保护的属性。", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "导出接口的属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "导出接口的属性“{0}”具有或正在使用专用名称“{1}”。", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "类型“{1}”的属性“{0}”不能赋给“{2}”索引类型“{3}”。", - "Property_0_was_also_declared_here_2733": "属性 \"{0}\" 也在此处声明。", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "属性 \"{0}\" 将覆盖 \"{1}\" 中的基属性。如果是有意的,请添加初始值设定项。否则,请添加 \"declare\" 修饰符或删除多余的声明。", - "Property_assignment_expected_1136": "应为属性分配。", - "Property_destructuring_pattern_expected_1180": "应为属性析构模式。", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "属性必须具有带有 --isolatedDeclarations 的显式类型注释。", - "Property_or_signature_expected_1131": "应为属性或签名。", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "属性值只能是字符串、数字、\"true\"、\"false\"、\"null\"、对象或数组等类型的字面量。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "以“ES5”设为目标时,对“for-of”、传播和析构中的可迭代项提供完全支持。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "导出类的公共方法“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "导出类的公共方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "导出类的公共方法“{0}”具有或正在使用专用名称“{1}”。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "导出类的公共属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "导出类的公共属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "导出类的公共属性“{0}”具有或正在使用专用名称“{1}”。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "导出类的公共静态方法“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "导出类的公共静态方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "导出类的公共静态方法“{0}”具有或正在使用专用名称“{1}”。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "导出类的公共静态属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "导出类的公共静态属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”。", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "导出类的公共静态属性“{0}”具有或正在使用专用名称“{1}”。", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "不允许使用限定名 \"{0}\",因为没有前导 \"@param {object} {1}\"。", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "在未读取函数参数时引发错误。", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "对具有隐式 \"any\" 类型的表达式和声明引发错误。", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "在带隐式“any\" 类型的 \"this\" 表达式上引发错误。", - "Range_out_of_order_in_character_class_1517": "字符类中的范围顺序不对。", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "启用“{0}”时重新导出类型需要使用“导出类型”。", - "React_components_cannot_include_JSX_namespace_names_2639": "React 组件不能包含 JSX 命名空间名称", - "Recommended_Options_6294": "建议的选项", - "Redirect_output_structure_to_the_directory_6006": "将输出结构重定向到目录。", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "减少 TypeScript 自动加载的项目数。", - "Referenced_project_0_may_not_disable_emit_6310": "引用的项目“{0}”可能不会禁用发出。", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "引用的项目“{0}”必须拥有设置 \"composite\": true。", - "Referenced_via_0_from_file_1_1400": "通过 \"{0}\" 从文件 \"{1}\" 引用", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "当 \"--moduleResolution\" 为 \"node16\" 或 \"nodenext\" 时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。请考虑将扩展名添加到导入路径中。", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "当“--moduleResolution”为“node16” 或“nodenext”时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。你是想使用 \"{0}\" 吗?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "从监视进程中删除目录列表。", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "从监视模式的处理中删除文件列表。", - "Remove_all_unnecessary_override_modifiers_95163": "删除所有不必要的 \"override\" 修饰符", - "Remove_all_unnecessary_uses_of_await_95087": "删除 \"await\" 的所有不必要的使用", - "Remove_all_unreachable_code_95051": "删除所有无法访问的代码", - "Remove_all_unused_labels_95054": "删除所有未使用的标签", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "从所有带有相关问题的箭头函数主体中删除大括号", - "Remove_braces_from_arrow_function_95060": "从箭头函数中删除大括号", - "Remove_braces_from_arrow_function_body_95112": "从箭头函数主体中删除大括号", - "Remove_import_from_0_90005": "从“{0}”删除导入", - "Remove_override_modifier_95161": "删除 \"override\" 修饰符", - "Remove_parentheses_95126": "删除括号", - "Remove_template_tag_90011": "删除模板标记", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "删除 TypeScript 语言服务器中 JavaScript 文件总源代码大小 20mb 的上限。", - "Remove_type_from_import_declaration_from_0_90055": "从“{0}”中删除导入声明中的“type”", - "Remove_type_from_import_of_0_from_1_90056": "从“{1}”中删除“{0}”导入中的“type”", - "Remove_type_parameters_90012": "删除类型参数", - "Remove_unnecessary_await_95086": "删除不必要的 \"await\"", - "Remove_unreachable_code_95050": "删除无法访问的代码", - "Remove_unused_declaration_for_Colon_0_90004": "为 \"{0}\" 删除未使用的声明", - "Remove_unused_declarations_for_Colon_0_90041": "为“{0}”删除未使用的声明", - "Remove_unused_destructuring_declaration_90039": "删除未使用的解构声明", - "Remove_unused_label_95053": "删除未使用的标签", - "Remove_variable_statement_90010": "删除变量语句", - "Rename_param_tag_name_0_to_1_95173": "将 “@param” 标记名称“{0}”重命名为“{1}”", - "Replace_0_with_Promise_1_90036": "将 \"{0}\" 替换为 \"Promise<{1}>\"", - "Replace_all_unused_infer_with_unknown_90031": "将所有未使用的 \"infer\" 替换为 \"unknown\"", - "Replace_import_with_0_95015": "用“{0}”替换导入。", - "Replace_infer_0_with_unknown_90030": "将 \"infer {0}\" 替换为 \"unknown\"", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "在函数中的所有代码路径并非都返回值时报告错误。", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "报告 switch 语句中遇到 fallthrough 情况的错误。", - "Report_errors_in_js_files_8019": ".js 文件中的报表出错。", - "Report_errors_on_unused_locals_6134": "报告未使用的局部变量上的错误。", - "Report_errors_on_unused_parameters_6135": "报告未使用的参数上的错误。", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "导出时需要足够的注释,以便其他工具可以轻松生成声明文件。", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要求索引签名中有未声明的属性以使用元素访问。", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "所需的类型参数可能不遵循可选类型参数。", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "在位置“{1}”的缓存中找到模块“{0}”的解析。", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "在位置“{1}”的缓存中找到类型引用指令“{0}”的解析。", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相对名称失败;正在尝试禁用新式节点解析功能,以查看 npm 库是否需要配置更新。", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相对名称失败;正在尝试“--moduleResolution 捆绑程序”,以查看项目是否可能需要配置更新。", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只将 \"keyof\" 解析为字符串值的属性名称(不含数字或符号)。", - "Resolved_under_condition_0_6414": "已在条件“{0}”下解析。", - "Resolving_in_0_mode_with_conditions_1_6402": "正在 {0} 模式下解析,条件为 {1}。", - "Resolving_module_0_from_1_6086": "======== 正在从“{1}”解析模块“{0}”。========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在相对于基 URL“{1}”-“{2}”解析模块名“{0}”。", - "Resolving_real_path_for_0_result_1_6130": "正在解析“{0}”的真实路径,结果为“{1}”。", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”。========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,根目录“{2}”。========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,未设置根目录。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析类型引用指令“{0}”,未设置包含文件,根目录“{1}”。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析类型引用指令“{0}”,未设置包含文件,未设置根目录。========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自定义 typeRoots 的程序的类型引用指令,跳过在“node_modules”文件夹中查找。", - "Resolving_with_primary_search_path_0_6121": "正在使用主搜索路径“{0}”解析。", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 参数“{0}”隐式具有 \"any[]\" 类型。", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 参数 \"{0}\" 隐式具有 \"any[]\" 类型,但可从用法中推断出更好的类型。", - "Rest_types_may_only_be_created_from_object_types_2700": "rest 类型只能从对象类型创建。", - "Return_type_annotation_circularly_references_itself_2577": "返回类型注释循环引用自身。", - "Return_type_must_be_inferred_from_a_function_95149": "必须从函数中推断返回类型", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "导出接口中的调用签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "导出接口中的调用签名的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "导出接口中的构造函数签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "导出接口中的构造函数签名的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "构造函数签名的返回类型必须可赋给类的实例类型。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "导出函数的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "导出函数的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "导出函数的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "导出接口中的索引签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "导出接口中的索引签名的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "导出接口中的方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "导出接口中的方法的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "导出类中的公共 getter“{0}”的返回类型具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "导出类中的公共 getter“{0}”的返回类型具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "导出类中的公共 getter“{0}”的返回类型具有或正在使用专用名称“{1}”。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "导出类中的公共方法的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "导出类中的公共方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "导出类中的公共方法的返回类型具有或正在使用专用名称“{0}”。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用私有模块“{2}”中的名称“{1}”。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用专用名称“{1}”。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "导出类中的公共静态方法的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "导出类中的公共静态方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "导出类中的公共静态方法的返回类型具有或正在使用专用名称“{0}”。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,但其未解析。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为“{3}”。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "正在重用旧程序“{1}”中模块“{0}”的解析,但其未解析。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为“{2}”。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,但其未解析。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{3}”。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,但其未解析。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{2}”。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。", - "Rewrite_all_as_indexed_access_types_95034": "全部重写为索引访问类型", - "Rewrite_as_the_indexed_access_type_0_90026": "重写为索引访问类型“{0}”", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "将相对导入路径中的 ‘.ts’、‘.tsx’、‘.mts’ 和 ‘.cts’ 文件扩展名改写为其在输出文件中的 JavaScript 等效项。", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "由于左操作数永远不会为空,因此 ?? 的右操作数无法访问。", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "无法确定根目录,正在跳过主搜索路径。", - "Root_file_specified_for_compilation_1427": "为编译指定的根文件", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "策略", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "保存 .tsbuildinfo 文件以允许项目增量编译。", - "Saw_non_matching_condition_0_6405": "看到了不匹配的条件“{0}”。", - "Scoped_package_detected_looking_in_0_6182": "检测到范围包,请在“{0}”中查看", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜索所有上级 node_modules 目录以查找回退扩展: {0}。", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜索所有上级 node_modules 目录以查找首选扩展: {0}。", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "另请参阅 https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "所选内容不是有效的语句", - "Selection_is_not_a_valid_type_node_95133": "所选内容不是有效的类型节点", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "为发出的 JavaScript 设置 JavaScript 语言版本并包含兼容的库声明。", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "设置来自 TypeScript 的消息传递的语言。这不会影响发出。", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "将配置文件中的 \"module\" 选项设置为 \"{0}\"", - "Set_the_newline_character_for_emitting_files_6659": "设置发出文件的换行符。", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "将配置文件中的 \"target\" 选项设置为 \"{0}\"", - "Setters_cannot_return_a_value_2408": "Setter 不能返回值。", - "Show_all_compiler_options_6169": "显示所有编译器选项。", - "Show_diagnostic_information_6149": "显示诊断信息。", - "Show_verbose_diagnostic_information_6150": "显示详细的诊断信息。", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "显示将生成(如果指定有 '--clean',则删除)什么", - "Signature_0_must_be_a_type_predicate_1224": "签名“{0}”必须为类型谓词。", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "签名声明只能在 TypeScript 文件中使用。", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "跳过在上游项目出错时生成下游项目。", - "Skip_type_checking_all_d_ts_files_6693": "跳过对所有 .d.ts 文件的类型检查。", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "跳过 TypeScript 附带的类型检查 .d.ts 文件。", - "Skip_type_checking_of_declaration_files_6012": "跳过声明文件的类型检查。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "正在跳过项目“{0}”的生成,因为其依赖项“{1}”有错误", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "即将跳过项目 \"{0}\" 的生成,因为未生成其依赖项 \"{1}\"", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳过看起来像绝对 URI、目标文件类型的模块“{0}”: {1}。", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的源", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的源", - "Source_has_0_element_s_but_target_allows_only_1_2619": "源具有 {0} 个元素,但目标仅允许 {1} 个。", - "Source_has_0_element_s_but_target_requires_1_2618": "源具有 {0} 个元素,但目标需要 {1} 个。", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "源不提供目标中位置 {0} 处所需元素的匹配项。", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "源不提供目标中位置 {0} 处可变元素的匹配项。", - "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目标版本。", - "Specify_JSX_code_generation_6080": "指定 JSX 代码生成。", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定将所有输出捆绑到一个 JavaScript 文件中的文件。如果 “declaration” 为 true,还要指定一个捆绑所有 .d.ts 输出的文件。", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定与要包含在编译中的文件匹配的 glob 模式列表。", - "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包括的语言服务插件列表。", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一组描述目标运行时环境的捆绑库声明文件。", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一组将导入重新映射到其他查找位置的条目。", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定为项目指定路径的对象数组。在项目引用中使用。", - "Specify_an_output_folder_for_all_emitted_files_6678": "为所有已发出的文件指定输出文件夹。", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定仅用于类型的导入的发出/检查行为。", - "Specify_file_to_store_incremental_compilation_information_6380": "指定用于存储增量编译信息的文件", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 如何从给定的模块说明符查找文件。", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少递归文件监视功能的系统上监视目录的方式。", - "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 监视模式的工作方式。", - "Specify_library_files_to_be_included_in_the_compilation_6079": "指定要在编译中包括的库文件。", - "Specify_module_code_generation_6016": "指定模块代码生成。", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 “jsx: react-jsx*” 时用于导入 JSX 中心函数的模块说明符。", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多个行为类似于 “./node_modules/@types” 的文件夹。", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定对从中继承设置的基本配置文件的一个或多个路径或节点模块引用。", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用于自动获取声明文件的选项。", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定在使用文件系统事件创建轮询监视失败时创建轮询监视的策略: \"FixedInterval\" (默认)、\"PriorityInterval\"、\"DynamicPriority\"、\"FixedChunkSize\"。", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在不支持本机递归监视的平台上监视目录的策略: \"UseFsEvents\" (默认)、\"FixedPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"。", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定监视文件的策略: \"FixedPollingInterval\" (默认)、\"PriorityPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"、\"UseFsEvents\"、\"UseFsEventsOnParentDirectory\"。", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定在将 React JSX 发出设定为目标时用于片段的 JSX 片段引用,例如 “React.Fragment” 或 “Fragment”。", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "指定在设定 \"react\" JSX 发出目标时要使用的 JSX 工厂函数,例如 \"react.createElement\" 或 \"h\"。", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "指定在将 React JSX 发出设定为目标时要使用的 JSX 中心函数,例如 “react.createElement” 或 “h”。", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "当指定使用 \"jsxFactory\" 编译器选项面向 \"react\" JSX 发出时,指定要使用的 JSX 片段工厂函数,例如 \"Fragment\"。", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基目录以解析非相关模块名称。", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定发出文件时要使用的行序列结尾: \"CRLF\" (dos)或 \"LF\" (unix)。", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定调试调试程序应将 TypeScript 文件放置到的位置而不是源位置。", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定调试程序应将映射文件放置到的位置而不是生成的位置。", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用于从 “node_modules” 检查 JavaScript 文件的最大文件夹深度。仅适用于 “allowJs”。", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定要用于从 eg,react 中导入 “jsx” 和 “jsxs” 工厂函数的模块说明符", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定为 “createElement” 调用的对象。这仅适用于将 “react” JSX 发出设定为目标的情况。", - "Specify_the_output_directory_for_generated_declaration_files_6613": "指定已生成声明文件的输出目录。", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "指定 .tsbuildinfo 增量编译文件的路径。", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定输入文件的根目录。与 --outDir 一起用于控制输出目录结构。", - "Specify_the_root_folder_within_your_source_files_6690": "指定源文件中的根文件夹。", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定调试程序的根路径以查找引用源代码。", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的类型包名称,而无需在源文件中引用。", - "Specify_what_JSX_code_is_generated_6646": "指定生成的 JSX 代码。", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定当系统耗尽本机文件观察程序时,观察程序应使用的方法。", - "Specify_what_module_code_is_generated_6657": "指定生成的模块代码。", - "Split_all_invalid_type_only_imports_1367": "拆分所有无效的仅类型导入", - "Split_into_two_separate_import_declarations_1366": "拆分为两个单独的导入声明", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "仅当面向 ECMAScript 5 和更高版本时,\"new\" 表达式中的展开运算符才可用。", - "Spread_types_may_only_be_created_from_object_types_2698": "spread 类型只能从对象类型创建。", - "Starting_compilation_in_watch_mode_6031": "在监视模式下开始编译...", - "Statement_expected_1129": "应为语句。", - "Statements_are_not_allowed_in_ambient_contexts_1036": "不允许在环境上下文中使用语句。", - "Static_members_cannot_reference_class_type_parameters_2302": "静态成员不能引用类类型参数。", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静态属性“{0}”与构造函数“{1}”的内置属性函数“{0}”冲突。", - "Stricter_Typechecking_Options_6292": "更严格的类型检查选项", - "String_literal_expected_1141": "应为字符串字面量。", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "当“--module”标志设置为“es2015”或“es2020”时,不支持字符串文本导入和导出名称。", - "String_literal_with_double_quotes_expected_1327": "应为带双引号的字符串字面量。", - "Style_Options_6293": "样式选项", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用颜色和上下文风格化错误和消息(实验)。", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "当有减号时,子空间标志必须存在。", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "后续属性声明必须属于同一类型。属性“{0}”的类型必须为“{1}”,但此处却为类型“{2}”。", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "后续变量声明必须属于同一类型。变量“{0}”必须属于类型“{1}”,但此处却为类型“{2}”。", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式“{1}”的替换“{0}”类型不正确,应为 \"string\",实际为“{2}”。", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "模式 \"{1}\" 中的替代项 \"{0}\" 最多只能有一个 \"*\" 字符", - "Substitutions_for_pattern_0_should_be_an_array_5063": "模式“{0}”的替代应为数组。", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "模式“{0}”的替换模式不应为空数组。", - "Successfully_created_a_tsconfig_json_file_6071": "已成功创建 tsconfig.json 文件。", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "不允许在构造函数外部或在构造函数内的嵌套函数中进行 Super 调用。", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "取消对对象字面量的多余属性检查。", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "抑制缺少索引签名的索引对象的 noImplicitAny 错误。", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "在对缺少索引签名的对象编制索引时,抑制 “noImplicitAny” 错误。", - "Switch_each_misused_0_to_1_95138": "将每个误用的“{0}”切换到“{1}”", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支持本机递归监视的平台上同步调用回调并更新目录观察程序的状态。", - "Syntax_Colon_0_6023": "语法: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "标记“{0}”至少需要“{1}”个参数,但 JSX 工厂“{2}”最多可提供“{3}”个。", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "可选链中不允许使用带有标记的模板表达式。", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目标仅允许 {0} 个元素,但源中的元素可能更多。", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目标仅允许 {0} 个元素,但源中的元素可能不够。", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目标签名提供的自变量太少。预期为 {0} 个或更多,但实际为 {1} 个。", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "\"{0}\" 修饰符只能在 TypeScript 文件中使用。", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "“{0}”运算符不能应用于类型 \"symbol\"。", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "“{0}”运算符不允许用于布尔类型。请考虑改用“{1}”。", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "异步迭代器的 \"{0}\" 属性必须是方法。", - "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 \"{0}\" 属性必须是方法。", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "\"Object\" 类型可分配给极少数其他类型。是否想要改用“任意”类型?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "不能同时设置 Unicode (u) 标志和 Unicode Sets (v) 标志。", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "无法在 ES5 中的箭头函数中引用 \"arguments\" 对象。请考虑使用标准函数表达式。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "无法在 ES5 中的异步函数或方法中引用 \"arguments\" 对象。请考虑使用标准函数或方法。", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "\"if\" 语句的正文不能为空语句。", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "针对此实现的调用已成功,但重载的实现签名在外部不可见。", - "The_character_set_of_the_input_files_6163": "输入文件的字符集。", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含箭头函数捕获 \"this\" 的全局值。", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "包含函数或模块体对于控制流分析而言太大。", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "当前文件是 CommonJS 模块,因此不能在顶级使用 “await”。", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "当前文件是 CommonJS 模块,其导入将生成“require”调用;但是,引用的文件是 ECMAScript 模块,它不能使用“require”进行导入。请考虑改为编写动态“import(\"{0}\")”调用。", - "The_current_host_does_not_support_the_0_option_5001": "当前主机不支持“{0}”选项。", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "你可能打算使用的 \"{0}\" 的声明在此处定义", - "The_declaration_was_marked_as_deprecated_here_2798": "该声明曾在此处标记为已弃用。", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需类型来自属性 \"{0}\",在此处的 \"{1}\" 类型上声明该属性", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需类型来自此签名的返回类型。", - "The_expected_type_comes_from_this_index_signature_6501": "所需类型来自此索引签名。", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "导出分配的表达式必须是环境上下文中的标识符或限定的名称。", - "The_file_is_in_the_program_because_Colon_1430": "程序包含该文件是因为:", - "The_files_list_in_config_file_0_is_empty_18002": "配置文件“{0}”中的 \"files\" 列表为空。", - "The_first_export_default_is_here_2752": "在此处显示第一个导出默认值。", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "承诺的 \"then\" 方法的第一个参数必须是回调。", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "全局类型 \"JSX.{0}\" 不可具有多个属性。", - "The_implementation_signature_is_declared_here_2750": "在此处声明实现签名。", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "将生成到 CommonJS 输出的文件中不允许 'import.meta' 元属性。", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "仅当 '--module' 选项为 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 时,才允许使用 'import.meta' 元属性。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "如果没有引用 \"{1}\",则无法命名 \"{0}\" 的推断类型。这很可能不可移植。需要类型注释。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "推断类型“{0}”引用的类型具有无法简单序列化的循环结构。必须具有类型注释。", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "“{0}”的推断类型引用不可访问的“{1}”类型。需要类型批注。", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此节点的推断类型超出编译器将序列化的最大长度。需要显式类型注释。", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "\"using\" 声明的初始值设定项必须是具有 \"[Symbol.dispose]()\" 方法的对象,或为 \"null\" 或 \"undefined\"。", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "\"await using\" 声明的初始值设定项必须是具有 \"[Symbol.asyncDispose]()\" 或 \"[Symbol.dispose]()\" 方法的对象,或者是 \"null\" 或 \"undefined\"。", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "由于属性“{1}”存在于多个要素中,但在某些要素中是专用属性,因此已将交集“{0}”缩减为“绝不”。", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "由于属性“{1}”在某些要素中具有存在冲突的类型,因此已将交集“{0}”缩减为“绝不”。", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "\"intrinsic\" 关键字只能用于声明编译器提供的内部类型。", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "必须提供 \"jsxFragmentFactory\" 编译器选项才能将 JSX 片段与 \"jsxFactory\" 编译器选项一起使用。", - "The_last_overload_gave_the_following_error_2770": "最后一个重载给出了以下错误。", - "The_last_overload_is_declared_here_2771": "在此处声明最后一个重载。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "\"for...in\" 语句的左侧不能为析构模式。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "\"for...in\" 语句的左侧不能是 \"using\" 声明。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "\"for...in\" 语句的左侧不能是 \"await using\" 声明。", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "\"for...in\" 语句的左侧不能使用类型批注。", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "\"for…in\" 语句的左侧不能是可选属性访问。", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "\"for...in\" 语句的左侧必须是变量或属性访问。", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "\"for...in\" 语句的左侧必须是 \"string\" 或 \"any\" 类型。", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "\"for...of\" 语句的左侧不能使用类型批注。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "\"for…of\" 语句的左侧不能是可选属性访问。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "“for...of” 语句的左侧可能不是 “async”。", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "\"for...of\" 语句的左侧必须是变量或属性访问。", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算术运算左侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "赋值表达式的左侧不能是可选属性访问。", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "赋值表达式的左侧必须是变量或属性访问。", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "\"instanceof\" 表达式的左侧必须可分配给右侧 \"[Symbol.hasInstance]\" 方法的第一个自变量。", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "\"instanceof\" 表达式左侧必须是 \"any\" 类型、对象类型或类型参数。", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "向用户显示消息时所用的区域设置(例如,\"en-us\")", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "用于搜索 node_modules 和加载 JavaScript 文件的最大依赖项深度。", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "\"delete\" 运算符的操作数不能是专用标识符。", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "\"delete\" 运算符的操作数不能是只读属性。", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "\"delete\" 运算符的操作数必须是属性引用。", - "The_operand_of_a_delete_operator_must_be_optional_2790": "\"delete\" 运算符的操作数必须是可选的。", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "增量或减量运算符的操作数不能是可选属性访问。", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "递增或递减运算符的操作数必须是变量或属性访问。", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "分析器预期在此处找到与“{0}”标记匹配的“{1}”。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "项目根不明确,但需要解析文件“{1}”中的导出映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "项目根不明确,但仍需要解析文件“{1}”中的导入映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "无法在此类中的类型 \"{1}\" 上访问属性 \"{0}\",因为具有相同拼写的另一个专用标识符隐藏了它。", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "参数修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "属性修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "异步函数的返回类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。 ", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "异步函数或方法的返回类型必须为全局 Promise 类型。", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "异步函数或方法的返回类型必须为全局 Promise 类型。你是否是指写入 \"Promise<{0}>\"?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "\"for...in\" 语句右侧必须是 \"any\" 类型、对象类型或类型参数,但此处的类型为“{0}”。", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算术运算右侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "\"instanceof\" 表达式的右侧必须是类型 \"any\"、类、函数或其他可分配给 \"Function\" 接口类型的类型,或者是具有 \"Symbol.hasInstance\" 方法的对象类型。", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "\"instanceof\" 表达式的右侧不能是实例化表达式。", - "The_root_value_of_a_0_file_must_be_an_object_5092": "“{0}”文件的根值必须是一个对象。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "运行时将使用 {1} 个自变量调用修饰器,但修饰器需要 {0} 个。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "运行时将使用 {1} 个自变量调用修饰器,但修饰器至少需要 {0} 个。", - "The_shadowing_declaration_of_0_is_defined_here_18017": "在此处定义了“{0}”的阴影声明", - "The_signature_0_of_1_is_deprecated_6387": "“{1}”的签名“{0}”已弃用。", - "The_specified_path_does_not_exist_Colon_0_5058": "指定的路径不存在:“{0}”。", - "The_tag_was_first_specified_here_8034": "第一次在此处指定了标记。", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "对象 rest 分配的目标不能是可选属性访问。", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "对象 rest 分配的目标必须是变量或属性访问。", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "类型为“{0}”的 \"this\" 上下文不能分配给类型为“{1}”的方法的 \"this\"。", - "The_this_types_of_each_signature_are_incompatible_2685": "每个签名的 \"this\" 类型不兼容。", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "类型 \"{0}\" 为 \"readonly\",不能分配给可变类型 \"{1}\"。", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "在将 “export type” 用在其导出语句上时,不能在已命名导出上使用 “type” 修饰符。", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "在将 “import type” 用在其导入语句上时,不能在已命名导入上使用 “type” 修饰符。。", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "无法序列化此节点的类型,因为无法序列化其属性“{0}”。", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "异步迭代器的 \"{0}()\" 方法返回的类型必须是具有 \"value\" 属性的类型的承诺。", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器的 \"{0}()\" 方法返回的类型必须具有 \"value\" 属性。", - "The_types_of_0_are_incompatible_between_these_types_2200": "在这些类型中,\"{0}\" 的类型不兼容。", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "在这些类型中,\"{0}\" 返回的类型不兼容。", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "此处不能使用值“{0}”。", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "\"for...in\" 语句的变量声明不能有初始化表达式。", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "\"for...of\" 语句的变量声明不能有初始化表达式。", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支持 \"with\" 语句。\"with\" 程序块中的所有符号都将具有类型 \"any\"。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "“{0}”处有类型,但无法在当前 \"moduleResolution\" 设置下解析此结果。请考虑更新到 \"node16\"、\"nodenext\" 或 \"bundler\"。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "“{0}”处有类型,但在遵守 package.json \"exports\" 时无法解析此结果。“{1}”库可能需要更新其 package.json 或键入。", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此正则表达式中没有名为“{0}”的捕获组。", - "There_is_nothing_available_for_repetition_1507": "没有可重复的内容。", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "此 JSX 标记要求 ‘{0}’ 在范围内,但找不到它。", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "此 JSX 标记要求模块路径 ‘{0}’ 存在,但找不到任何路径。请确保已安装相应包的类型。", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 标记的 \"{0}\" 属性需要 \"{1}\" 类型的子级,但提供了多个子级。", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 标记的 \"{0}\" 属性需要类型 \"{1}\",该类型需要多个子级,但仅提供了一个子级。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此向后引用指的是一个不存在的组。此正则表达式中没有捕获组。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此向后引用指的是一个不存在的组。此正则表达式中只有 {0} 个捕获组。", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二进制表达式永远不会为 null。是否缺少括号?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "不能在正则表达式中转义此字符。", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比较似乎是无意的,因为类型“{0}”和“{1}”没有重叠。", - "This_condition_will_always_return_0_2845": "此条件将始终返回“{0}”。", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此条件将始终返回“{0}”,因为 JavaScript 按引用而不是值比较对象。", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "此条件将始终返回 true,因为此“{0}”已始终定义。", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "此条件将始终返回 true,因为始终定义了函数。你是想改为调用它吗?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此构造函数可能会转换为类声明。", - "This_expression_is_always_nullish_2871": "此表达式始终为 null。", - "This_expression_is_never_nullish_2881": "此表达式从不为 null。", - "This_expression_is_not_callable_2349": "此表达式不可调用。", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "此表达式是 \"get\" 访问器,因此不可调用。你想在不使用 \"()\" 的情况下使用它吗?", - "This_expression_is_not_constructable_2351": "此表达式不可构造。", - "This_file_already_has_a_default_export_95130": "此文件已具有默认导出", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "重写此导入路径并不安全,因为它会解析为另一个项目,并且项目的输出文件之间的相对路径与其输入文件之间的相对路径不同。", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "此导入使用 ‘{0}’ 扩展解析为输入 TypeScript 文件,但不会在发出期间重写,因为它不是相对路径。", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "这是正在扩充的声明。请考虑将扩充声明移到同一个文件中。", - "This_kind_of_expression_is_always_falsy_2873": "这种表达式的结果始终为 false。", - "This_kind_of_expression_is_always_truthy_2872": "这种表达式的结果始终为 true。", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "可将此转换为异步函数。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成员不能具有带 “@override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成员不能具有带 “override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。你是否指的是“{1}”?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "此成员不能具有带 “@override” 标记的 JSDoc 注释,因为所包含的类“{0}”不会扩展其他类。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "此成员不能拥有带有 ‘@overrid’ 标记的 JSDoc 注释,因为其名称是动态的。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "此成员不能有 \"override\" 修饰符,因为它未在基类 \"{0}\" 中声明。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成员不能有 “override” 修饰符,因为它未在基类“{0}”中声明。你是否指的是“{1}”?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "此成员不能有 \"override\" 修饰符,因为它的包含类 \"{0}\" 不扩展其他类。", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "此成员不能具有 “override” 修饰符,因为其名称是动态的。", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "此成员必须具有带 “@override” 标记的 JSDoc 注释,因为它会替代基类“{0}”中的成员。", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中的一个成员。", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中声明的一个抽象方法。", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能通过启用 \"{0}\" 标志并引用其默认导出,使用 ECMAScript 导入/导出来引用此模块。", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模块是使用 “export =” 声明的,只能在使用“{0}”标志时用于默认导入。", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "可以简化此操作。此班次与 `{0} {1} {2}` 相同。", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "此重载隐式返回类型“{0}”,因为它缺少返回类型批注。", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此重载签名与其实现签名不兼容。", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "此参数不允许与 \"use strict\" 指令一起使用。", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此参数属性必须具有带 “@override” 标记的 JSDoc 注释,因为它将替代基类“{0}”中的成员。", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "此参数属性必须具有 “override” 修饰符,因为它会替代基类“{0}”中的成员。", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "此正则表达式标志不能在子模式内切换。", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "此正则表达式标志仅在面向“{0}”或更高版本时可用。", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "重写此相对导入路径并不安全,因为它看起来像文件名,但实际上解析为 ‘{0}’。", - "This_spread_always_overwrites_this_property_2785": "此扩张将始终覆盖此属性。", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "启用 “erasableSyntaxOnly” 时,不允许使用此语法。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请添加尾随逗号或显式约束。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请改用 `as` 表达式。", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此语法需要一个导入的帮助程序,但找不到模块“{0}”。", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此语法需要名为 \"{1}\" 的导入帮助器,\"{0}\" 中不存在该帮助器。请考虑升级 \"{0}\" 的版本。", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此语法需要一个名为 \"{1}\" 且包含 {2} 参数的导入帮助程序,该帮助程序与 \"{0}\" 中的相应帮助程序不兼容。请考虑升级 \"{0}\" 的版本。", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "此类型参数可能需要 `extends {0}` 约束。", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "“import” 的这种用法无效。可以写入 “import()” 调用,但它们必须具有括号,并且不能带有类型参数。", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "若要将此文件转换为 ECMAScript 模块,请将字段“\"type\": \"module\"”添加到“{0}”。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或将字段“\"type\": \"module\"”添加到“{1}”。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或者使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要将此文件转换为 ECMAScript 模块,请使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’,且 ‘target’ 选项设置为 ‘es2017’ 或更高版本时,才允许使用顶级 ‘await’ 表达式。", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 且 ‘target’ 选项设置为 ‘es2017’ 或更高时,才允许使用顶级 ‘await using’ 语句。", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 文件中的顶级声明必须以 \"declare\" 或 \"export\" 修饰符开头。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’,且 ‘target’ 选项设置为 ‘es2017’ 或更高版本时,才允许使用顶级 ‘for await’ 循环。", - "Trailing_comma_not_allowed_1009": "不允许使用尾随逗号。", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "将每个文件转换为单独的模块(类似 \"ts.transpileModule\")。", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "尝试使用 `npm i --save-dev @types/{1}` (如果存在),或者添加一个包含 `declare module '{0}';` 的新声明(.d.ts)文件", - "Trying_other_entries_in_rootDirs_6110": "正在尝试 \"rootDirs\" 中的其他条目。", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在尝试替换“{0}”,候选模块位置:“{1}”。", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "长度为 \"{1}\" 的元组类型 \"{0}\" 在索引 \"{2}\" 处没有元素。", - "Tuple_type_arguments_circularly_reference_themselves_4110": "元组类型参数循环引用自身。", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有在使用 \"--downlevelIteration\" 标志或 \"--target\" 为 \"es2015\" 或更高版本时,才能循环访问类型“{0}”。", - "Type_0_cannot_be_used_as_an_index_type_2538": "类型“{0}”不能作为索引类型使用。", - "Type_0_cannot_be_used_to_index_type_1_2536": "类型“{0}”无法用于索引类型“{1}”。", - "Type_0_does_not_satisfy_the_constraint_1_2344": "类型“{0}”不满足约束“{1}”。", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "类型“{0}”不满足预期类型“{1}”。", - "Type_0_has_no_call_signatures_2757": "类型 \"{0}\" 没有调用签名。", - "Type_0_has_no_construct_signatures_2761": "类型 \"{0}\" 没有构造签名。", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "类型“{0}”没有匹配的类型“{1}”的索引签名。", - "Type_0_has_no_properties_in_common_with_type_1_2559": "类型“{0}”与类型“{1}”不具有相同的属性。", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "类型“{0}”没有类型参数列表适用的签名。", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "类型“{0}”是泛型的,只能编制索引以供读取。", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "类型“{0}”缺少类型“{1}”中的以下属性: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "类型“{0}”缺少类型“{1}”的以下属性: {2} 及其他 {3} 项。", - "Type_0_is_not_a_constructor_function_type_2507": "类型“{0}”不是构造函数类型。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "类型“{0}”不是 ES5 中有效的异步函数返回类型,因为它不引用与 Promise 兼容的构造函数值。", - "Type_0_is_not_an_array_type_2461": "类型“{0}”不是数组类型。", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "类型“{0}”不是数组类型或字符串类型。", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "类型“{0}”不是数组类型或字符串类型,或者没有返回迭代器的 \"[Symbol.iterator]()\" 方法。", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "类型“{0}”不是数组类型,或者没有返回迭代器的 \"[Symbol.iterator]()\" 方法。", - "Type_0_is_not_assignable_to_type_1_2322": "不能将类型“{0}”分配给类型“{1}”。", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "类型“{0}”不可分配给类型“{1}”。你的意思是“{2}”?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "类型“{0}”无法分配给类型“{1}”。存在具有此名称的两种不同类型,但它们是不相关的。", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "类型“{0}”不能分配给类型“{1}”,如方差批注所示。", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "根据计算枚举成员值的要求,类型“{0}”不能分配给类型“{1}”。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标属性的类型。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标类型。。", - "Type_0_is_not_comparable_to_type_1_2678": "类型“{0}”不可与类型“{1}”进行比较。", - "Type_0_is_not_generic_2315": "类型“{0}”不是泛型类型。", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "类型 \"{0}\" 可以表示基元值,该值不允许作为“in”运算符的右操作数。", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "类型“{0}”必须具有返回异步迭代器的 \"[Symbol.asyncIterator]()\" 方法。", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "类型“{0}”必须具有返回迭代器的 \"[Symbol.iterator]()\" 方法。", - "Type_0_provides_no_match_for_the_signature_1_2658": "类型“{0}”提供的内容与签名“{1}”不匹配。", - "Type_0_recursively_references_itself_as_a_base_type_2310": "类型“{0}”以递归方式将自身引用为基类。", - "Type_Checking_6248": "类型检查", - "Type_alias_0_circularly_references_itself_2456": "类型别名“{0}”循环引用自身。", - "Type_alias_must_be_given_a_name_1439": "必须为类型别名指定名称。", - "Type_alias_name_cannot_be_0_2457": "类型别名不能为“{0}”。", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "类型别名只能在 TypeScript 文件中使用。", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "类型批注不能出现在构造函数声明中。", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "类型注释只能在 TypeScript 文件中使用。", - "Type_argument_expected_1140": "应为类型参数。", - "Type_argument_list_cannot_be_empty_1099": "类型参数列表不能为空。", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "类型参数只能在 TypeScript 文件中使用。", - "Type_arguments_for_0_circularly_reference_themselves_4109": "\"{0}\" 的类型参数循环引用自身。", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "类型断言表达式只能在 TypeScript 文件中使用。", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "源中位置 {0} 的类型与目标中位置 {1} 的类型不兼容。", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "源中位置 {0} 到 {1} 的类型与目标中位置 {2} 的类型不兼容。", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "包含专用名称“{0}”的类型不能与 --isolatedDeclarations 一起使用。", - "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在编译中类型声明文件。", - "Type_expected_1110": "应为类型。", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "类型导入断言应恰好有一个键 - \"resolution-mode\" - 值为 \"import\" 或 \"require\"。", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "从 CommonJS 模块导入 ECMAScript 模块的类型导入必须具有 \"resolution-mode\" 属性。", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "类型实例化过深,且可能无限。", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "类型在其自身的 \"then\" 方法的 fulfillment 回调中被直接或间接引用。", - "Type_library_referenced_via_0_from_file_1_1402": "通过 \"{0}\" 从文件 \"{1}\" 引用了库类型", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "通过 \"{0}\" 从具有 packageId \"{2}\" 的文件 \"{1}\" 引用了库类型", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "\"await\" 操作数的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "计算属性类型的值为 \"{0}\",该值不能赋给 \"{1}\" 类型。", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "实例成员变量“{0}”的类型不能引用构造函数中声明的标识符“{1}”。", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "\"yield*\" 操作数的迭代元素的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "属性“{0}”的类型在已映射的类型“{1}”中循环引用其自身。", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "异步生成器中 \"yield\" 操作数的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "从 CommonJS 模块导入 ECMAScript 模块的仅类型导入必须具有 \"resolution-mode\" 属性。", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "此导入产生的类型。无法调用或构造命名空间样式的导入,这类导入将在运行时导致失败。请考虑改为使用默认导入或此处需要的导入。", - "Type_parameter_0_has_a_circular_constraint_2313": "类型参数“{0}”具有循环约束。", - "Type_parameter_0_has_a_circular_default_2716": "类型参数“{0}”具有循环默认值。", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "导出接口中的调用签名的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "导出接口中的构造函数签名的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "导出类的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "导出函数的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "导出接口的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "已导出映射对象类型的类型参数 \"{0}\" 使用专用名称 \"{1}\" 。", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "已导出类型别名的类型参数“{0}”具有或正使用专用名称“{1}”。", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "导出接口中的方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "导出类中的公共方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "导出类中的公共静态方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", - "Type_parameter_declaration_expected_1139": "应为类型参数声明。", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "类型参数声明只能在 TypeScript 文件中使用。", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "类型参数默认值只能引用以前声明的类型参数。", - "Type_parameter_list_cannot_be_empty_1098": "类型参数列表不能为空。", - "Type_parameter_name_cannot_be_0_2368": "类型参数名称不能为“{0}”。", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "类型参数不能出现在构造函数声明中。", - "Type_predicate_0_is_not_assignable_to_1_1226": "类型谓词“{0}”不可分配给“{1}”。", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "类型生成的元组类型太大,无法表示。", - "Type_reference_directive_0_was_not_resolved_6120": "======== 未解析类型引用指令“{0}”。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 类型引用指令“{0}”已成功解析为“{1}”,主要: {2}。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 类型引用指令 \"{0}\" 已成功解析为 \"{1}\" ,包 ID 为 \"{2}\",主要: {3}。========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "类型满意度表达式只能在 TypeScript 文件中使用。", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "类型不能出现在 JavaScript 文件的导出声明中。", - "Types_have_separate_declarations_of_a_private_property_0_2442": "类型具有私有属性“{0}”的单独声明。", - "Types_of_construct_signatures_are_incompatible_2419": "构造签名的类型不兼容。", - "Types_of_parameters_0_and_1_are_incompatible_2328": "参数“{0}”和“{1}” 的类型不兼容。", - "Types_of_property_0_are_incompatible_2326": "属性“{0}”的类型不兼容。", - "Unable_to_open_file_0_6050": "无法打开文件“{0}”。", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "作为表达式调用时,无法解析类修饰器的签名。", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "作为表达式调用时,无法解析方法修饰器的签名。", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "作为表达式调用时,无法解析参数修饰器的签名。", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "作为表达式调用时,无法解析属性修饰器的签名。", - "Undetermined_character_escape_1513": "不确定的字符转义。", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "意外的“{0}”。你是否想要使用反斜杠对其进行转义?", - "Unexpected_end_of_text_1126": "文本意外结束。", - "Unexpected_keyword_or_identifier_1434": "意外的关键字或标识符。", - "Unexpected_token_1012": "意外的标记。", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "意外的标记。应为构造函数、方法、访问器或属性。", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "意外的标记。类型参数名不应包含大括号。", - "Unexpected_token_Did_you_mean_or_gt_1382": "意外的标记。你是想使用 `{'>'}` 还是 `>`?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "意外的标记。你是想使用 `{'}'}` 还是 `}`?", - "Unexpected_token_expected_1179": "意外标记。应为 \"{\"。", - "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode 转义序列不能显示在此处。", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 转义序列才可用。", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 属性值表达式才可用。", - "Unknown_Unicode_property_name_1524": "未知的 Unicode 属性名称。", - "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 属性名称或值。", - "Unknown_Unicode_property_value_1526": "未知的 Unicode 属性值。", - "Unknown_build_option_0_5072": "未知的生成选项 \"{0}\"。", - "Unknown_build_option_0_Did_you_mean_1_5077": "未知的生成选项 \"{0}\"。你是想使用 \"{1}\" 吗?", - "Unknown_compiler_option_0_5023": "未知的编译器选项“{0}”。", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的编译器选项 \"{0}\"。你是想使用 \"{1}\" 吗?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的关键字或标识符。你是不是指“{0}”?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "未知的 \"excludes\" 选项。你的意思是 \"exclude\"?", - "Unknown_regular_expression_flag_1499": "未知的正则表达式标志。", - "Unknown_type_acquisition_option_0_17010": "未知类型获取选项“{0}”。", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的类型获取选项 \"{0}\"。你是想使用 \"{1}\" 吗?", - "Unknown_watch_option_0_5078": "未知观察选项 \"{0}\"。", - "Unknown_watch_option_0_Did_you_mean_1_5079": "未知的监视选项 \"{0}\"。你是想使用 \"{1}\" 吗?", - "Unreachable_code_detected_7027": "检测到无法访问的代码。", - "Unterminated_Unicode_escape_sequence_1199": "未终止的 Unicode 转义序列。", - "Unterminated_quoted_string_in_response_file_0_6045": "响应文件“{0}”中引号不配对。", - "Unterminated_regular_expression_literal_1161": "未终止的正则表达式字面量。", - "Unterminated_string_literal_1002": "未终止的字符串字面量。", - "Unterminated_template_literal_1160": "未终止的模板字面量。", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "非类型化函数调用不能接受类型参数。", - "Unused_label_7028": "未使用的标签。", - "Unused_ts_expect_error_directive_2578": "未使用的 \"@ts-expect-error\" 指令。", - "Update_import_from_0_90058": "从“{0}”更新导入", - "Update_modifiers_of_0_90061": "更新“{0}”的修饰符", - "Updating_output_timestamps_of_project_0_6359": "正在更新项目“{0}”的输出时间戳...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新项目 \"{0}\" 未更改的输出时间戳…", - "Use_0_95174": "使用 `{0}`", - "Use_0_instead_5106": "请改用“{0}”。", - "Use_Number_isNaN_in_all_conditions_95175": "在所有条件下使用 `Number.isNaN`。", - "Use_element_access_for_0_95145": "对“{0}”使用元素访问", - "Use_element_access_for_all_undeclared_properties_95146": "对所有未声明的属性使用元素访问。", - "Use_import_type_95180": "使用 \"import type\"", - "Use_synthetic_default_member_95016": "使用综合的“默认”成员。", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析包导入时,请使用 package.json \"exports\" 字段。", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析导入时,请使用 package.json \"import\" 字段。", - "Use_type_0_95181": "使用 \"type {0}\"", - "Using_0_subpath_1_with_target_2_6404": "将“{0}”子路径“{1}”与目标“{2}”一起使用", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "使用 JSX 片段需要片段工厂 ‘{0}’ 在范围内,但找不到它。", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "仅 ECMAScript 5 和更高版本支持在 \"for...of\" 语句中使用字符串。", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build,-b 将使 tsc 的行为更像生成业务流程协调程序,而非编译器。这可用于触发生成复合项目,你可以在 {0} 详细了解这些项目", - "Using_compiler_options_of_project_reference_redirect_0_6215": "使用项目引用重定向“{0}”的编译器选项。", - "VERSION_6036": "版本", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "类型“{0}”的值没有与类型“{1}”相同的属性。你是想调用它吗?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "类型“{0}”的值不可调用。是否希望包括 \"new\"?", - "Variable_0_implicitly_has_an_1_type_7005": "变量“{0}”隐式具有“{1}”类型。", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "变量 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "变量 \"{0}\" 在某些位置隐式具有类型 \"{1}\",但可以从使用情况推断出更好的类型。", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "变量“{0}”在某些无法确定其类型的位置处隐式具有类型“{1}”。", - "Variable_0_is_used_before_being_assigned_2454": "在赋值前使用了变量“{0}”。", - "Variable_declaration_expected_1134": "应为变量声明。", - "Variable_declaration_list_cannot_be_empty_1123": "变量声明列表不能为空。", - "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允许使用变量声明。", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "变量必须具有带有 --isolatedDeclarations 的显式类型注释。", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "具有多个声明的变量不能内联。", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "源中位置 {0} 的可变元素与目标中位置 {1} 的元素不匹配。", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "仅对象、函数、构造函数、映射类型的类型别名支持方差注释。", - "Version_0_6029": "版本 {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "请访问 https://aka.ms/ts6 以获取迁移信息。", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "请访问 https://aka.ms/tsconfig,了解有关此文件的详细信息", - "WATCH_OPTIONS_6918": "监视选项", - "Watch_and_Build_Modes_6250": "观看和生成模式", - "Watch_input_files_6005": "监视输入文件。", - "Watch_option_0_requires_a_value_of_type_1_5080": "观察选项 \"{0}\" 需要 {1} 类型的值。", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "我们只能通过在此处为整个参数添加类型来写入“{0}”的类型。", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "分配函数时,请检查以确保参数和返回值与子类型兼容。", - "When_type_checking_take_into_account_null_and_undefined_6699": "进行类型检查时,请考虑 “null” 和 “undefined”。", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否在监视模式下保留过时的控制台输出,而不是清除屏幕。", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "包装表达式容器中的所有无效字符", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "将所有无效的修饰器表达式括在括号中", - "Wrap_all_object_literal_with_parentheses_95116": "用括号括起所有对象字面量", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "将所有没有父级的 JSX 包装在 JSX 片段中", - "Wrap_in_JSX_fragment_95120": "包装在 JSX 片段中", - "Wrap_in_parentheses_95194": "用括号括起来", - "Wrap_invalid_character_in_an_expression_container_95108": "包装表达式容器中的无效字符", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "用括号括起以下应为对象字面量的内容", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "你可以在 {0} 了解编译器选项的所有内容", - "You_cannot_rename_a_module_via_a_global_import_8031": "不能通过全局导入对模块进行重命名。", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "不能重命名已在 “node_modules” 文件夹中定义的元素。", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "不能重命名已在另一个 “node_modules” 文件夹中定义的元素。", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "不能重命名标准 TypeScript 库中定义的元素。", - "You_cannot_rename_this_element_8000": "无法重命名此元素。", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "“{0}”收到的参数过少,无法在此处充当修饰器。你是要先调用它,然后再写入 \"@{0}()\" 吗?", - "_0_and_1_index_signatures_are_incompatible_2330": "“{0}”和“{1}”索引签名不兼容。", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "不能在不使用括号的情况下混用 \"{0}\" 和 \"{1}\" 操作。", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "“{0}”被指定了两次。将覆盖名为“{0}”的特性。", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "类型末尾的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "类型开头的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", - "_0_can_only_be_imported_by_using_a_default_import_2595": "仅可使用默认导入来导入“{0}”。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能通过使用 \"require\" 调用或启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 \"require\" 调用或使用默认导入来导入“{0}”。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "仅可使用 \"import {1} = require({2})\" 或默认导入来导入“{0}”。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "仅可使用 \"import {1} = require({2})\" 或通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", - "_0_cannot_be_used_as_a_JSX_component_2786": "“{0}”不能用作 JSX 组件。", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" 是使用 \"export type\" 导出的,因此不能用作值。", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" 是使用 \"import type\" 导入的,因此不能用作值。", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "\"{0}\" 组件不接受文本作为子元素。JSX 中的文本类型为 \"string\",但 \"{1}\" 的预期类型为 \"{2}\"。", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "“{0}”可以使用与“{1}”无关的任意类型进行实例化。", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "“{0}”声明只能在块的内部声明。", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "\"{0}\" 声明只能在 TypeScript 文件中使用。", - "_0_declarations_may_not_have_binding_patterns_1492": "“{0}”声明可能没有绑定模式。", - "_0_declarations_must_be_initialized_1155": "必须初始化“{0}”声明。", - "_0_expected_1005": "应为“{0}”。", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}”具有字符串类型,但在启用 \"isolatedModules\" 时必须具有语法上可识别的字符串语法。", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "“{0}”没有导出的成员“{1}”。你是否指的是“{2}”?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" 隐式具有 \"{1}\" 返回类型,但可以从用法中推断出更好的类型。", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "由于“{0}'”不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "“{0}”隐式具有类型 \"any\",因为它不具有类型批注,且在其自身的初始化表达式中得到直接或间接引用。", - "_0_index_signatures_are_incompatible_2634": "“{0}”索引签名不兼容。", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "“{0}”索引类型“{1}”不能分配给“{2}”索引类型“{3}”。", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "“{0}”是基元,但“{1}”是包装器对象。如可能首选使用“{0}”。", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "“{0}”是一种类型,无法在 JavaScript 文件中导入。请在 JSDoc 类型批注中使用“{1}”。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}”是一种类型,必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "“{0}”是“{1}”的未使用重命名。是否打算将其用作类型批注?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" 可赋给 \"{1}\" 类型的约束,但可以使用约束 \"{2}\" 的其他子类型实例化 \"{1}\"。", - "_0_is_automatically_exported_here_18044": "“{0}”自动导出到此处。", - "_0_is_declared_but_its_value_is_never_read_6133": "已声明“{0}”,但从未读取其值。", - "_0_is_declared_but_never_used_6196": "“{0}”已声明,但从未使用过。", - "_0_is_declared_here_2728": "在此处声明了 \"{0}\"。", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" 在类 \"{1}\" 中定义为属性,但这里在 \"{2}\" 中重写为访问器。", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" 在类 \"{1}\" 中定义为访问器,但这里在 \"{2}\" 中重写为实例属性。", - "_0_is_deprecated_6385": "“{0}”已弃用。", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "“{0}”不是关键字“{1}”的有效元属性。是否是指“{2}”?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "不允许将 '{0}' 作为参数名。", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "“{0}”不得用作变量声明名称。", - "_0_is_of_type_unknown_18046": "“{0}”的类型为“未知”。", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "“{0}”可能为 “null”。", - "_0_is_possibly_null_or_undefined_18049": "{0}可能为 “null” 或“未定义”。", - "_0_is_possibly_undefined_18048": "“{0}”可能为“未定义”。", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "“{0}”在其自身的基表达式中得到直接或间接引用。", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "“{0}”在其自身的类型批注中得到直接或间接引用。", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "多次指定了 \"{0}\",因此将重写此用法。", - "_0_list_cannot_be_empty_1097": "“{0}”列表不能为空。", - "_0_modifier_already_seen_1030": "已看到“{0}”修饰符。", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "“{0}”修饰符只能出现在类、接口或类型别名的类型参数上", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "“{0}”修饰符只能出现在函数、方法或类的类型参数上", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "“{0}”修饰符不能出现在构造函数声明中。", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "“{0}”修饰符不可出现在模块或命名空间元素上。", - "_0_modifier_cannot_appear_on_a_parameter_1090": "“{0}”修饰符不能出现在参数中。", - "_0_modifier_cannot_appear_on_a_type_member_1070": "“{0}”修饰符不可出现在类型成员上。", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "“{0}”修饰符不能出现在类型参数上", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "“{0}”修饰符不能出现在 \"using\" 声明中。", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "“{0}”修饰符不能出现在 \"await using\" 声明中。", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "“{0}”修饰符不可出现在索引签名上。", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "“{0}”修饰符不能出现在此类型的类元素上。", - "_0_modifier_cannot_be_used_here_1042": "“{0}”修饰符不能在此处使用。", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "“{0}”修饰符不能在环境上下文中使用。", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "“{0}”修饰符不能与“{1}”修饰符一起使用。", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "“{0}”修饰符不能与专用标识符一起使用。", - "_0_modifier_must_precede_1_modifier_1029": "“{0}”修饰符必须位于“{1}”修饰符之前。", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}”后面必须是括在大括号中的 Unicode 属性值表达式。", - "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" 需要显式类型注释。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "“{0}”仅指类型,但在此用作命名空间。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "“{0}”仅表示类型,但在此处却作为值使用。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "“{0}”仅引用一个类型,但在此处用作一个值。你是否想要使用“{0} 中的 {1}”?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "“{0}” 仅指类型,但在此处用作值。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为 es2015 或更高版本。", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "“{0}”指 UMD 全局,但当前文件是模块。请考虑改为添加导入。", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "“{0}”表示值,但在此处用作类型。是否指“类型 {0}”?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}”解析为仅类型声明,并且必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}”解析为仅类型声明,并且在启用“{1}”时必须使用仅类型重新导出进行重新导出。", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "应在 config json 文件的 “compilerOptions” 对象中设置 “{0}”", - "_0_tag_already_specified_1223": "已指定“{0}”标记。", - "_0_was_also_declared_here_6203": "此处也声明了 \"{0}\"。", - "_0_was_exported_here_1377": "在此处导出了 \"{0}\"。", - "_0_was_imported_here_1376": "此处导入了 \"{0}\"。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "缺少返回类型批注的“{0}”隐式具有“{1}”返回类型。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少返回类型批注的 \"{0}\" 隐式具有 \"{1}\" 产出类型。", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "\"abstract\" 修饰符仅可出现在类、方法或属性声明中。", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "\"accessor\" 修饰符只能出现在属性声明中。", - "and_here_6204": "并在这里。", - "and_npm_install_D_types_Slashnode_6290": "和 npm 安装 -D @types/节点", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "无法在属性初始值设定项或类静态初始化块中引用 'arguments'。", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "“auto”: 将带有导入、导出、import.meta、jsx (带有 jsx: react-jsx)或 esm 格式(带模块: node16+)的文件视为模块。", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "\"await\" 表达式不能在类静态块内使用。", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "仅当文件是模块时,才允许在该文件的顶层使用 \"await\" 表达式,但此文件没有导入或导出。请考虑添加空的 \"export {}\" 以将此文件变为模块。", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "仅允许在异步函数和模块顶级使用 \"await\" 表达式。", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "不能在参数初始化表达式中使用 \"await\" 表达式。", - "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" 对此表达式的类型没有影响。", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "环境上下文中不允许使用 ‘await using’ 声明。", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "除非包含在块中,否则不允许在 \"case\" 或 \"default\" 子句中使用 \"await using\" 声明。", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "只有当文件是模块时,才允许在该文件的顶层使用 \"await using\" 语句,但此文件没有导入或导出。可考虑添加空的 \"export {}\" 将此文件变为模块。", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "\"await using\" 语句仅允许在异步函数和顶级模块中使用。", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "\"await using\" 语句不能在类静态块内使用。", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "\"baseUrl\" 选项设置为“{0}”,可使用此值解析非相关模块名称“{1}”。", - "c_must_be_followed_by_an_ASCII_letter_1512": "\"\\c\" 后面必须有一个 ASCII 字母。", - "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" 只能用在文件的开头。", - "case_or_default_expected_1130": "应为 \"case\" 或 \"default\"。", - "catch_or_finally_expected_1472": "应为 “catch” 或 “finally”。", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "\"const\" 枚举成员初始化表达式的求值结果为非有限值。", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "\"const\" 枚举成员初始化表达式的求值结果为不允许使用的值 \"NaN\"。", - "const_enum_member_initializers_must_be_constant_expressions_2474": "const 枚举成员初始值设定项必须是常量表达式。", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "\"const\" 枚举仅可在属性、索引访问表达式、导入声明的右侧、导出分配或类型查询中使用。", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "“构造函数”不能用作参数属性名称。", - "constructor_is_a_reserved_word_18012": "\"#constructor\" 是保留字。", - "default_Colon_6903": "默认值:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "在严格模式下,无法对标识符调用 \"delete\"。", - "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" 不会重新导出默认值。", - "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" 只能在 TypeScript 文件中使用。", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "\"export\" 修饰符不可用于环境模块和模块扩大,因为它们始终可见。", - "extends_clause_already_seen_1172": "已看到 \"extends\" 子句。", - "extends_clause_must_precede_implements_clause_1173": "\"extends\" 子句必须位于 \"implements\" 子句之前。", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "导出的类“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "导出的类的 \"extends\" 子句具有或正在使用专用名称“{0}”。", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "导出接口“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。", - "false_unless_checkJs_is_set_6932": "为 `false`,除非设置了 `checkJs`", - "false_unless_composite_is_set_6906": "\"false\",除非设置了 \"composite\"", - "file_6025": "文件", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "仅当文件是模块且没有导入或导出项时,才允许在该文件的顶层使用“for await”循环。可考虑添加空的“export {}”将此文件变为模块。", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "仅允许在异步函数和模块顶层使用“for await”循环。", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "\"for await\" 循环不能在类静态块内使用。", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "\"get\" 和 \"set\" 访问器无法声明 \"this\" 参数。", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定了 \"files\",则为 \"[]\",否则为\"[\"**/*\"]\"", - "implements_clause_already_seen_1175": "已看到 \"implements\" 子句。", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "\"implements\" 子句只能在 TypeScript 文件中使用。", - "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" 只能在 TypeScript 文件中使用。", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "仅条件类型的 \"extends\" 子句中才允许 \"infer\" 声明。", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "\"\\k\" 后面必须有一个括在尖括号中的捕获组名称。", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" 不能用作 \"let\" 或 \"const\" 声明中的名称。", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "其目标缺少构造签名的 \"new\" 表达式隐式具有 \"any\" 类型。", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\"、\"bower_components\"、\"jspm_packages\"]`,以及 \"outDir\" 的值(如果指定)。", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "如果 `module` 是 `nodenext`,则为 `nodenext`;如果 `module` 是 `node16` 或 `node18`,则为 `node16`;否则为 `bundler`。", - "one_of_Colon_6900": "以下其中一个:", - "one_or_more_Colon_6901": "一个或更多:", - "options_6024": "选项", - "or_JSX_element_expected_1145": "应为 “{” 或 JSX 元素。", - "or_expected_1144": "应为 \"{\" 或 \";\"。", - "package_json_does_not_have_a_0_field_6100": "\"package.json\" 没有“{0}”字段。", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package. json\" 没有与版本 \"{0}\" 匹配的 \"typesVersions\" 项。", - "package_json_had_a_falsy_0_field_6220": "\"package. json\" 具有错误的 \"{0}\" 字段。", - "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" 具有引用“{2}”的“{0}”字段“{1}”。", - "package_json_has_a_peerDependencies_field_6281": "\"package.json\" 具有 \"peerDependencies\" 字段。", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package. json\" 具有 \"typesVersions\" 项 \"{0}\",它不是有效的 semver 范围。", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package. json\" 具有与编译器版本 \"{1}\" 匹配的 \"typesVersions\" 项 \"{0}\",它需要与模块名称 \"{2}\" 匹配的模式。", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package. json\" 具有 \"typesVersions\" 字段,它具有特定于版本的路径映射。", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json 作用域 '{0}' 将说明符 '{1}' 显式映射到 NULL。", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 作用域 '{0}' 的说明符 '{1}' 的目标类型无效", - "package_json_scope_0_has_no_imports_defined_6273": "package.json 作用域 '{0}' 未定义导入。", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "指定了 \"paths“ 选项,正在查找模式以匹配模块名“{0}”。", - "q_is_only_available_inside_character_class_1511": "\"\\q\" 仅在字符类内可用。", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "\"\\q\" 后面必须是括在大括号中的字符串替代项。", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "\"readonly\" 修饰符仅可出现在属性声明或索引签名中。", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "仅允许对数组和元组字面量类型使用 \"readonly\" 类型修饰符。", - "require_call_may_be_converted_to_an_import_80005": "可将 \"require\" 调用转换为 import 语句。", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能为仅类型导入设置 \"resolution-mode\"。", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" 是类型导入断言的唯一有效密钥。", - "resolution_mode_should_be_either_require_or_import_1453": "“resolution-mode”应为“require”或“import”。", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "设置了 \"rootDirs\" 选项,可将其用于解析相对模块名称“{0}”。", - "super_can_only_be_referenced_in_a_derived_class_2335": "只能在派生类中引用 \"super\"。", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "仅可在派生类或对象字面量表达式的成员中引用 \"super\"。", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "不能在计算属性名中引用 \"super\"。", - "super_cannot_be_referenced_in_constructor_arguments_2336": "不能在构造函数参数中引用 \"super\"。", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "\"target\" 选项为 \"ES2015\" 或更高版本时,仅对象字面量表达式的成员中允许 \"super\"。", - "super_may_not_use_type_arguments_2754": "\"super\" 不能使用类型参数。", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "访问派生类构造函数中的 \"super\" 属性前,必须调用 \"super\"。", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "访问派生类的构造函数中的 \"this\" 前,必须调用 \"super\"。", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "\"super\" 的后面必须是参数列表或成员访问。", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "只有构造函数、成员函数或派生类的成员访问器中才允许 \"super\" 属性访问。", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "不能在计算属性名中引用 \"this\"。", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "不能在模块或命名空间体中引用 \"this\"。", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "不能在静态属性初始化表达式中引用 \"this\"。", - "this_cannot_be_referenced_in_current_location_2332": "不能在当前位置引用 \"this\"。", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" 隐式具有类型 \"any\",因为它没有类型注释。", - "true_for_ES2022_and_above_including_ESNext_6930": "对于 ES2022 及更高版本为 `true`,包括 ESNext。", - "true_if_composite_false_otherwise_6909": "如果为 \"composite\",则为 \"true\",否则为 \"false\"", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "当 \"moduleResolution\" 为 \"node16\"、\"nodenext \"或 \"bundler\" 时为 `true`;否则为 `false`。", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 编译器", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "存在 tsconfig.json,但如果命令行指定了文件,则不会加载该文件。使用 \"--ignoreConfig\" 跳过此错误。", - "type_Colon_6902": "类型:", - "unique_symbol_types_are_not_allowed_here_1335": "此处不允许使用 \"unique symbol\" 类型。", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\" 类型仅可用于变量语句中的变量。", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "不可在具有绑定名称的变量声明中使用 \"unique symbol\" 类型。", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "\"use strict\" 指令不能与非简单参数列表一起使用。", - "use_strict_directive_used_here_1349": "此处使用了 \"use strict\" 指令。", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "环境上下文中不允许使用 ‘using’ 声明。", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "除非包含在块中,否则不允许在 \"case\" 或 \"default\" 子句中使用 \"using\" 声明。", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "不允许在异步函数块中使用 \"with\" 语句。", - "with_statements_are_not_allowed_in_strict_mode_1101": "严格模式下不允许使用 \"with\" 语句。", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "\"yield\" 表达式隐式导致 \"any\" 类型,因为它的包含生成器缺少返回类型批注。", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "不能在参数初始化表达式中使用 \"yield\" 表达式。" -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "所有编译器选项", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "“{0}”修饰符不能与导入声明一起使用。", + "A_0_parameter_must_be_the_first_parameter_2680": "“{0}”参数必须是第一个参数。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc“@template”标记不能跟在“@typedef”、“@callback”或“@overload”标记后面", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc \"@typedef\" 注释不能包含多个 \"@type\" 标记。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "“bigint”文本不能用作属性名称。", + "A_bigint_literal_cannot_use_exponential_notation_1352": "BigInt 字面量中不能使用指数符号。", + "A_bigint_literal_must_be_an_integer_1353": "BigInt 字面量必须是整数。", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "绑定模式参数在实现签名中不能为可选参数。", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "\"break\" 语句只能在封闭迭代或 switch 语句内使用。", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "\"break\" 语句只能跳转到封闭语句的标签。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字符类不得包含保留的双标点符号。你是否想要使用反斜杠对其进行转义?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字符类范围不能由另一个字符类绑定。", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "类只能实现具有可选类型参数的标识符/限定名称。", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "类只能实现具有静态已知成员的对象类型或对象类型的交集。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "类无法扩展“{0}”这样的基元类型。类只能扩展可构造值。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "类无法实现类似于“{0}”的基元类型。它只能实现其他命名对象类型。", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不带 \"default\" 修饰符的类声明必须具有名称。", + "A_class_member_cannot_have_the_0_keyword_1248": "类成员不可具有“{0}”关键字。", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "计算属性名中不允许逗号表达式。", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "计算属性名无法从其包含的类型引用类型参数。", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "类属性声明中的计算属性名称必须具有简单文本类型或“唯一符号”类型。", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法重载中的计算属性名称必须引用文本类型或 \"unique symbol\" 类型的表达式。", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "类型文本中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "环境上下文中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "接口中的计算属性名称必须引用必须引用类型为文本类型或 \"unique symbol\" 的表达式。", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "计算属性名的类型必须为 \"string\"、\"number\"、\"symbol\" 或 \"any\"。", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "\"const\" 断言只能作用于枚举成员、字符串、数字、布尔值、数组或对象字面量。", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "只有使用字符串文本才能访问常数枚举成员。", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "环境上下文中的 \"const\" 初始化表达式必须为字符串、数字文本或文本枚举引用。", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "当构造函数的类扩展 \"null\" 时,它不能包含 \"super\" 调用。", + "A_constructor_cannot_have_a_this_parameter_2681": "构造函数不可具有 \"this\" 参数。", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "\"continue\" 语句只能在封闭迭代语句内使用。", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "\"continue\" 语句只能跳转到封闭迭代语句的标签。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "如果没有“导入类型”,则无法导入声明文件。是否要改为导入实现文件“{0}”?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不能在已有的环境上下文中使用 \"declare\" 修饰符。", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "修饰器仅可修饰方法实现,而不可修饰重载。", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "\"default\" 子句在 \"switch\" 语句中只能出现一次。", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "默认导出只能在 ECMAScript-style 模块中使用。", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "默认导出必须位于文件或模块声明的顶层。", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此上下文中不允许明确的赋值断言 \"!\"。", + "A_destructuring_declaration_must_have_an_initializer_1182": "析构声明必须具有初始化表达式。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的动态导入调用需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "动态导入调用返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", + "A_file_cannot_have_a_reference_to_itself_1006": "文件不能引用自身。", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "返回“从不”的函数不能具有可访问的终结点。", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "使用 'new' 关键字调用的函数的 'this' 类型不能为 'void'。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "其声明类型不为 \"undefined\"、\"void\" 或 \"any\" 的函数必须返回值。", + "A_generator_cannot_have_a_void_type_annotation_2505": "生成器不能具有 \"void\" 类型批注。", + "A_get_accessor_cannot_have_parameters_1054": "\"get\" 访问器不能具有参数。", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get 访问器必须至少具有与 Setter 相同的可访问性", + "A_get_accessor_must_return_a_value_2378": "\"get\" 访问器必须返回值。", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "标记的元组元素被声明为可选,并且问号位于名称之后、冒号之前,而不是位于类型之后。", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "标记的元组元素通过在名称之前(而不是类型之前)的 “...” 声明为 rest。", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "映射的类型可能不声明属性或方法。", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "枚举声明中的成员初始化表达式不能引用在其后声明的成员(包括在其他枚举中定义的成员)。", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 类必须具有单个 rest 参数为类型 \"any[]\" 的构造函数。", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "从包含抽象构造签名的类型变量扩展的 mixin 类也必须声明为 \"abstract\"。", + "A_module_cannot_have_multiple_default_exports_2528": "一个模块不能具有多个默认导出。", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空间声明必须位于与之合并的类或函数所在的相同文件内。", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空间声明不能位于与之合并的类或函数前", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空间声明只允许位于命名空间或模块的顶层。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不应使用 \"module\" 关键字声明 \"namespace\" 声明。请改用 \"namespace\" 关键字。", + "A_non_dry_build_would_build_project_0_6357": "非 -dry 生成将生成项目“{0}”", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 生成将删除以下文件: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 dry 生成将更新项目 '{0}' 的输出的时间戳", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只允许在函数或构造函数实现中使用参数初始化表达式。", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "不能使用 rest 参数声明参数属性。", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "只允许在构造函数实现中使用参数属性。", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "不能使用绑定模式声明参数属性。", + "A_promise_must_have_a_then_method_1059": "'Promise' 必须具有 'then' 方法。", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "类型为 \"unique symbol\" 的类的属性必须同时为 \"static\" 和 \"readonly\"。", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "类型为 \"unique symbol\" 的接口或类型文本的属性必须为 \"readonly\"。", + "A_required_element_cannot_follow_an_optional_element_1257": "必选元素不能位于可选元素后。", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必选参数不能位于可选参数后。", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 元素不能包含绑定模式。", + "A_rest_element_cannot_follow_another_rest_element_1265": "rest 元素不能跟在另一个 rest 元素之后。", + "A_rest_element_cannot_have_a_property_name_2566": "其余元素不能具有属性名。", + "A_rest_element_cannot_have_an_initializer_1186": "rest 元素不能具有初始化表达式。", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 元素必须在析构模式中位于最末。", + "A_rest_element_type_must_be_an_array_type_2574": "rest 元素类型必须是数组类型。", + "A_rest_parameter_cannot_be_optional_1047": "rest 参数不能为可选参数。", + "A_rest_parameter_cannot_have_an_initializer_1048": "rest 参数不能具有初始化表达式。", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest 参数必须是参数列表中的最后一个参数。", + "A_rest_parameter_must_be_of_an_array_type_2370": "rest 参数必须是数组类型。", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Rest 参数或绑定模式不可带尾随逗号。", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "\"return\" 语句只能在函数体中使用。", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "不能在类静态块内使用 “return” 语句。", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列条目,这些条目将重新映射导入内容,以查找与 \"baseUrl\" 有关的位置。", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "\"set\" 访问器不能具有返回类型批注。", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "\"set\" 访问器不能具有可选参数。", + "A_set_accessor_cannot_have_rest_parameter_1053": "\"set\" 访问器不能具有 rest 参数。", + "A_set_accessor_must_have_exactly_one_parameter_1049": "\"set\" 访问器必须正好具有一个参数。", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "\"set\" 访问器参数不能包含初始化表达式。", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "扩张参数必须具有元组类型或传递给 rest 参数。", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "“super” 调用必须是包含初始化属性、参数属性或专用标识符的派生类的构造函数中的根级语句。", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "当派生类包含初始化属性、参数属性或专用标识符时,“super” 调用必须是构造函数中用来引用 “super” 或 “this” 的第一个语句。", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "基于 \"this\" 的类型防护与基于参数的类型防护不兼容。", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "\"this\" 类型仅在类或接口的非静态成员中可用。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "启用“verbatimModuleSyntax”时,不能对 CommonJS 模块中的值声明使用顶级“export”修饰符。", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "已在“{0}”中定义了 \"tsconfig.json\" 文件。", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元组成员不能既是可选的又是 rest。", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "不能使用负值为元组类型编制索引。", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "乘方表达式的左侧不允许出现类型断言表达式。请考虑用括号将表达式括起。", + "A_type_literal_property_cannot_have_an_initializer_1247": "类型文字数据不可具有初始化表达式。", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "仅类型导入可以指定默认导入或命名绑定,但不能同时指定这两者。", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "类型谓词无法引用 rest 参数。", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "类型谓词无法在绑定模式中引用元素“{0}”。", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "只允许在函数和方法的返回类型位置使用类型谓词。", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "类型谓词的类型不可赋给其参数的类型。", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "启用 “isolatedModules” 和 “emitDecoratorMetadata” 时,必须使用 “import type” 或命名空间导入来导入修饰签名中引用的类型。", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "类型为 \"unique symbol\" 的变量必须为 \"const\"。", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只允许在生成器正文中使用 \"yield\" 表达式。", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "无法通过 super 表达式访问“{1}”类中的“{0}”抽象方法。", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只能出现在抽象类中。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象属性只能出现在抽象类中。", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "不能在构造函数中访问类“{1}”中的抽象属性“{0}”。", + "Accessibility_modifier_already_seen_1028": "已看到可访问性修饰符。", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "访问器仅在面向 ECMAScript 5 和更高版本时可用。", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "两个取值函数必须都是抽象的或都是非抽象的。", + "Add_0_to_unresolved_variable_90008": "将“{0}.”添加到未解析的变量", + "Add_a_return_statement_95111": "添加 return 语句", + "Add_a_return_type_to_the_function_declaration_9031": "将返回类型添加到函数声明。", + "Add_a_return_type_to_the_function_expression_9030": "将返回类型添加到函数表达式。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "将返回类型添加到 get 访问器声明。", + "Add_a_return_type_to_the_method_9034": "向方法添加返回类型", + "Add_a_type_annotation_to_the_parameter_0_9028": "向参数 {0} 添加类型注释。", + "Add_a_type_annotation_to_the_property_0_9029": "向属性 {0} 添加类型注释。", + "Add_a_type_annotation_to_the_variable_0_9027": "向变量 {0} 添加类型注释。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "将类型添加到 set 访问器声明的参数。", + "Add_all_missing_async_modifiers_95041": "添加所有缺失的 \"async\" 修饰符", + "Add_all_missing_attributes_95168": "添加所有缺少的属性", + "Add_all_missing_call_parentheses_95068": "添加所有缺失的调用括号", + "Add_all_missing_function_declarations_95157": "添加所有缺少的函数声明", + "Add_all_missing_imports_95064": "添加所有缺少的导入", + "Add_all_missing_members_95022": "添加所有缺少的成员", + "Add_all_missing_override_modifiers_95162": "添加所有缺失的 \"override\" 修饰符", + "Add_all_missing_parameters_95190": "添加所有缺少的参数", + "Add_all_missing_properties_95166": "添加所有缺少的属性", + "Add_all_missing_return_statement_95114": "添加所有缺少的 return 语句", + "Add_all_missing_super_calls_95039": "添加所有缺失的 super() 调用", + "Add_all_missing_type_annotations_90067": "添加所有缺少的类型注释", + "Add_all_optional_parameters_95193": "添加所有可选参数", + "Add_annotation_of_type_0_90062": "添加类型为“{0}”的注释", + "Add_async_modifier_to_containing_function_90029": "将异步修饰符添加到包含函数", + "Add_await_95083": "添加 \"await\"", + "Add_await_to_initializer_for_0_95084": "将 \"await\" 添加到 \"{0}\" 的初始值设定项", + "Add_await_to_initializers_95089": "将 \"await\" 添加到初始值设定项", + "Add_braces_to_arrow_function_95059": "向箭头函数添加大括号", + "Add_const_to_all_unresolved_variables_95082": "将 \"const\" 添加到所有未解析变量", + "Add_const_to_unresolved_variable_95081": "将 \"const\" 添加到未解析的变量", + "Add_definite_assignment_assertion_to_property_0_95020": "向属性“{0}”添加明确的赋值断言", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "将明确赋值断言添加到未初始化的所有属性", + "Add_export_to_make_this_file_into_a_module_95097": "添加 \"export {}\",将此文件变为模块", + "Add_extends_constraint_2211": "添加 `extends` 约束。", + "Add_extends_constraint_to_all_type_parameters_2212": "将 `extends` 约束添加到所有类型参数", + "Add_import_from_0_90057": "从“{0}”添加导入", + "Add_index_signature_for_property_0_90017": "为属性“{0}”添加索引签名", + "Add_initializer_to_property_0_95019": "向属性“{0}”添加初始值设定项", + "Add_initializers_to_all_uninitialized_properties_95027": "将初始化表达式添加到未初始化的所有属性", + "Add_missing_attributes_95167": "添加缺少的属性", + "Add_missing_call_parentheses_95067": "添加缺失的调用括号", + "Add_missing_comma_for_object_member_completion_0_95187": "为对象成员完成“{0}”添加缺少的逗号。", + "Add_missing_enum_member_0_95063": "添加缺少的枚举成员 \"{0}\"", + "Add_missing_function_declaration_0_95156": "添加缺少的函数声明 \"{0}\"", + "Add_missing_new_operator_to_all_calls_95072": "将缺少的 \"new\" 运算符添加到所有调用", + "Add_missing_new_operator_to_call_95071": "将缺少的 \"new\" 运算符添加到调用", + "Add_missing_parameter_to_0_95188": "将缺少的参数添加到“{0}”", + "Add_missing_parameters_to_0_95189": "将缺少的参数添加到“{0}”", + "Add_missing_properties_95165": "添加缺少的属性", + "Add_missing_super_call_90001": "添加缺失的 \"super()\" 调用", + "Add_missing_typeof_95052": "添加缺少的 \"typeof\"", + "Add_names_to_all_parameters_without_names_95073": "为没有名称的所有参数添加名称", + "Add_optional_parameter_to_0_95191": "将可选参数添加到“{0}”", + "Add_optional_parameters_to_0_95192": "将可选参数添加到“{0}”", + "Add_or_remove_braces_in_an_arrow_function_95058": "添加或删除箭头函数中的大括号", + "Add_override_modifier_95160": "添加 \"override\" 修饰符", + "Add_parameter_name_90034": "添加参数名称", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "将限定符添加到匹配成员名称的所有未解析变量", + "Add_resolution_mode_import_attribute_95196": "添加 \"resolution-mode\" 导入属性", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "向所有需要 \"resolution-mode\" 导入属性的仅类型导入添加该属性", + "Add_return_type_0_90063": "添加返回类型“{0}”", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "将 satisfies 和类型断言添加到此表达式 (satisfies T as T) 以使类型显式。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "使用“{0}”添加 satisfies 和内联类型断言", + "Add_to_all_uncalled_decorators_95044": "将 \"()\" 添加到所有未调用的修饰器", + "Add_ts_ignore_to_all_error_messages_95042": "将 \"@ts-ignore\" 添加到所有错误消息", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引访问时,将 “undefined” 添加到类型。", + "Add_undefined_to_optional_property_type_95169": "将 “undefined” 添加到可选属性类型", + "Add_undefined_type_to_all_uninitialized_properties_95029": "将未定义的类型添加到未初始化的所有属性", + "Add_undefined_type_to_property_0_95018": "向属性“{0}”添加 \"undefined\" 类型", + "Add_unknown_conversion_for_non_overlapping_types_95069": "为非重叠类型添加 \"unknown\" 转换", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "将 \"unknown\" 添加到非重叠类型的所有转换", + "Add_void_to_Promise_resolved_without_a_value_95143": "将 \"void\" 添加到已解析但没有值的 Promise", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "将 \"void\" 添加到所有已解析但没有值的 Promise", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "添加 tsconfig.json 文件有助于组织包含 TypeScript 和 JavaScript 文件的项目。有关详细信息,请访问 https://aka.ms/tsconfig。", + "All_declarations_of_0_must_have_identical_constraints_2838": "\"{0}\" 的所有声明必须具有相同的限制。", + "All_declarations_of_0_must_have_identical_modifiers_2687": "“{0}”的所有声明必须具有相同的修饰符。", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "“{0}”的所有声明都必须具有相同的类型参数。", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有声明必须是连续的。", + "All_destructured_elements_are_unused_6198": "所有解构出的成员都未使用。", + "All_imports_in_import_declaration_are_unused_6192": "导入声明中的所有导入都未使用。", + "All_type_parameters_are_unused_6205": "未使用任何类型参数。", + "All_variables_are_unused_6199": "所有变量均未使用。", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "允许 JavaScript 文件成为程序的一部分。使用 ''checkJs'' 选项来获取这些文件中的错误。", + "Allow_accessing_UMD_globals_from_modules_6602": "允许从模块访问 UMD 变量全局。", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允许从不带默认输出的模块中默认输入。这不会影响代码发出,只是类型检查。", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "当模块没有默认导出时,允许“从 y 导入 x”。", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允许每个项目从 tslib 导入帮助程序函数一次,而不是将它们包含在每个文件中。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允许导入包含 TypeScript 文件扩展名。需要设置“--moduleResolution bundler”以及“--noEmit”或“--emitDeclarationOnly”。", + "Allow_javascript_files_to_be_compiled_6102": "允许编译 JavaScript 文件。", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "允许在解析模块时将多个文件夹视为一个文件夹。", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的文件名 \"{0}\" 仅大小写与文件名 \"{1}\" 不同。", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "环境模块声明无法指定相对模块名。", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "环境模块不能嵌套在其他模块或命名空间中。", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模块无法拥有多个名称分配。", + "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象访问器不能有实现。", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "可访问性修饰符不能与专用标识符一起使用。", + "An_accessor_cannot_have_type_parameters_1094": "访问器不能具有类型参数。", + "An_accessor_property_cannot_be_declared_optional_1276": "\"accessor\" 属性不能声明为可选。", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "只允许在文件的顶层中使用环境模块声明。", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "未提供 \"{0}\" 的自变量。", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供与此绑定模式匹配的自变量。", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算术操作数必须为类型 \"any\"、\"number\"、\"bigint\" 或枚举类型。", + "An_arrow_function_cannot_have_a_this_parameter_2730": "箭头函数不能包含 \"this\" 参数。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的异步函数或方法需要“Promise”构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "异步函数或方法必须返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。", + "An_async_iterator_must_have_a_next_method_2519": "异步迭代器必须具有 \"next()\" 方法。", + "An_element_access_expression_should_take_an_argument_1011": "元素访问表达式应采用参数。", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "不能用专用标识符命名枚举成员。", + "An_enum_member_cannot_have_a_numeric_name_2452": "枚举成员不能具有数值名。", + "An_enum_member_name_must_be_followed_by_a_or_1357": "枚举成员名称的后面必须跟有 \",\"、\"=\" 或 \"}\"。", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此信息的扩展版本,显示所有可能的编译器选项", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "不能在具有其他导出元素的模块中使用导出分配。", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "不能在命名空间中使用导出分配。", + "An_export_assignment_cannot_have_modifiers_1120": "导出分配不能具有修饰符。", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "导出分配必须位于文件或模块声明的顶层。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "导出声明只能在模块的顶层使用。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "导出声明只能在命名空间或模块的顶层使用。", + "An_export_declaration_cannot_have_modifiers_1193": "导出声明不能有修饰符。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export =”声明必须引用实际值。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "启用“verbatimModuleSyntax”时,“export =”声明必须引用值,但“{0}”仅引用类型。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "启用“verbatimModuleSyntax”,但“{0}”解析为仅类型声明时,“export default”必须引用实际值。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "启用“verbatimModuleSyntax”时,“export default”必须引用一个值,但“{0}”只引用了一个类型。", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "无法测试 \"void\" 类型的表达式的真实性。", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "扩展的 Unicode 转义值必须介于(含) 0x0 和 0x10FFFF 之间。", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "标识符或关键字不能紧跟在数字字面量之后。", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不能在环境上下文中声明实现。", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "导入别名不能引用使用 \"export type\" 导出的声明。", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "导入别名不能引用使用 \"import type\" 导入的声明。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "启用“verbatimModuleSyntax”时,导入别名无法解析为类型或仅类型声明。", + "An_import_alias_cannot_use_import_type_1392": "导入别名不能使用“导入类型”", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "导入声明只能在模块的顶层使用。", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "导入声明只能在命名空间或模块的顶层使用。", + "An_import_declaration_cannot_have_modifiers_1191": "导入声明不能有修饰符。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "启用“allowImportingTsExtensions”时,导入路径只能以“{0}”扩展名结尾。", + "An_index_signature_cannot_have_a_rest_parameter_1017": "索引签名不能包含 rest 参数。", + "An_index_signature_cannot_have_a_trailing_comma_1025": "索引签名不能包含尾随逗号。", + "An_index_signature_must_have_a_type_annotation_1021": "索引签名必须具有类型批注。", + "An_index_signature_must_have_exactly_one_parameter_1096": "索引签名必须正好具有一个参数。", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "索引签名参数不能包含问号。", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引签名参数不能具有可访问性修饰符。", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引签名参数不能具有初始化表达式。", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引签名参数必须具有类型批注。", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引签名参数类型不能为文本类型或泛型类型。请考虑改用映射的对象类型。", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引签名参数类型必须是 “string”、“number”、“symbol”或模板文本类型。", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "实例化表达式不能后跟属性访问。", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "接口只能扩展具有可选类型参数的标识符/限定名称。", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "接口只能扩展使用静态已知成员的对象类型或对象类型的交集。", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "接口无法扩展“{0}”这样的基元类型。它只能扩展其他命名对象类型。", + "An_interface_property_cannot_have_an_initializer_1246": "接口函数不能具有初始化表达式。", + "An_iterator_must_have_a_next_method_2489": "迭代器必须具有 \"next()\" 方法。", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "将 @jsx 杂注与 JSX 片段一起使用时,需要使用 @jsxFrag 杂注。", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "对象文字不能具有多个具有相同名称的 get/set 访问器。", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "对象文本不能具有多个名称相同的属性。", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "对象文字不能包含具有相同名称的属性和访问器。", + "An_object_member_cannot_be_declared_optional_1162": "对象成员无法声明为可选。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "对象的“[Symbol.hasInstance]”方法必须返回布尔值,这样它才能在“instanceof”表达式的右侧使用。", + "An_optional_chain_cannot_contain_private_identifiers_18030": "可选链不能包含专用标识符。", + "An_optional_element_cannot_follow_a_rest_element_1266": "可选元素不能跟在 rest 元素之后。", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器隐藏了 \"this\" 的外部值。", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "重载签名无法声明为生成器。", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘方表达式的左侧不允许存在具有“{0}”运算符的一元表达式。请考虑用括号将表达式括起。", + "Annotate_everything_with_types_from_JSDoc_95043": "使用 JSDoc 中的类型批注所有内容", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "注释命名空间中属性 expando 函数的类型", + "Annotate_with_type_from_JSDoc_95009": "通过 JSDoc 类型批注", + "Another_export_default_is_here_2753": "这里是其他导出默认值。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "任何可能匹配多个字符的 Unicode 属性仅在设置 Unicode Sets (v) 标志时可用。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "可能匹配多个字符的任何内容在被否定的字符类中无效。", + "Are_you_missing_a_semicolon_2734": "是否缺少分号?", + "Argument_expression_expected_1135": "应为参数表达式。", + "Argument_for_0_option_must_be_Colon_1_6046": "“{0}”选项的参数必须为 {1}。", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "动态导入的参数不能是扩展元素。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "类型“{0}”的参数不能赋给类型“{1}”的参数。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "类型为“{0}”的参数不能分配给类型为“{1}”且 “exactOptionalPropertyTypes: true” 的参数。请考虑将 “undefined” 添加到目标属性的类型。", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供 rest 形参“{0}”的实参。", + "Array_element_destructuring_pattern_expected_1181": "应为数组元素析构模式。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "无法使用 --isolatedDeclarations 推断具有分布元素的数组。", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "断言要求使用显式类型注释声明调用目标中的每个名称。", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "断言要求调用目标为标识符或限定名。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "--isolatedDeclarations 不支持将属性分配给不声明它们的函数。为分配给此函数的属性添加显式声明。", + "Asterisk_Slash_expected_1010": "应为 \"*/\"。", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "至少一个访问器必须具有带有 --isolatedDeclarations 的显式类型注释。", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全局范围的扩大仅可直接嵌套在外部模块中或环境模块声明中。", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "全局范围的扩大应具有 \"declare\" 修饰符,除非它们显示在已有的环境上下文中。", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "项目“{0}”中启用了键入内容的自动发现。使用缓存位置“{2}”运行模块“{1}”的额外解决传递。", + "BUILD_OPTIONS_6919": "生成选项", + "Backwards_Compatibility_6253": "向后兼容性", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基类表达式无法引用类类型参数。", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基构造函数返回类型 \"{0}\" 不是具有静态已知成员的对象类型或对象类型的交集。", + "Base_constructors_must_all_have_the_same_return_type_2510": "所有的基构造函数必须具有相同的返回类型。", + "Base_directory_to_resolve_non_absolute_module_names_6083": "用于解析非绝对模块名的基目录。", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "目标低于 ES2020 时,BigInt 字面量不可用。", + "Binary_digit_expected_1177": "需要二进制数字。", + "Binding_element_0_implicitly_has_an_1_type_7031": "绑定元素“{0}”隐式具有“{1}”类型。", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "声明之前已使用的块范围变量“{0}”。", + "Build_a_composite_project_in_the_working_directory_6925": "在工作目录中生成复合项目。", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "生成所有项目,包括那些似乎是最新的项目。", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "生成一个或多个项目及其依赖项(如果已过期)", + "Build_option_0_requires_a_value_of_type_1_5073": "生成选项 \"{0}\" 需要类型 {1} 的值。", + "Building_project_0_6358": "正在生成项目“{0}”...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "内置迭代器实例化时,“TReturn”类型为“undefined”而不是“any”。", + "COMMAND_LINE_FLAGS_6921": "命令行标记", + "COMMON_COMMANDS_6916": "常见命令", + "COMMON_COMPILER_OPTIONS_6920": "常见编译器选项", + "Call_decorator_expression_90028": "调用修饰器表达式", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "调用签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少返回类型批注的调用签名隐式具有返回类型 \"any\"。", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "没有参数的调用签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。", + "Call_target_does_not_contain_any_signatures_2346": "调用目标不包含任何签名。", + "Can_only_convert_logical_AND_access_chains_95142": "仅可转换逻辑 AND 访问链", + "Can_only_convert_named_export_95164": "只能转换已命名的导出", + "Can_only_convert_property_with_modifier_95137": "只能转换带修饰符的属性", + "Can_only_convert_string_concatenations_and_string_literals_95154": "只能转换字符串串联和字符串文本", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "无法访问“{0}.{1}”,因为“{0}”是类型,不是命名空间。是否要使用“{0}[\"{1}\"]”检索“{0}”中“{1}”属性的类型?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "启用“{1}”时,无法从没有限定的其他文件访问“{0}”。请改用“{2}”。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "启用“{0}”时,无法访问环境常量枚举。", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "不可将“{0}”构造函数类型分配给“{1}”构造函数类型。", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "无法将抽象构造函数类型分配给非抽象构造函数类型。", + "Cannot_assign_to_0_because_it_is_a_class_2629": "无法为“{0}”赋值,因为它是类。", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "无法分配到 \"{0}\" ,因为它是常数。", + "Cannot_assign_to_0_because_it_is_a_function_2630": "无法为“{0}”赋值,因为它是函数。", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "无法为“{0}”赋值,因为它是命名空间。", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "无法为“{0}”赋值,因为它是只读属性。", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "无法为“{0}”赋值,因为它是枚举。", + "Cannot_assign_to_0_because_it_is_an_import_2632": "无法为“{0}”赋值,因为它是导入。", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "无法为“{0}”赋值,因为它不是变量。", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "无法赋值给私有方法“{0}”。私有方法不可写。", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "无法扩大模块“{0}”,因为它解析为非模块实体。", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "无法扩充具有值导出的模块“{0}”,因为它解析为一个非模块的实体。", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "无法使用选项“{0}”来编译模块,除非 \"--module\" 标记为 \"amd\" 或 \"system\"。", + "Cannot_create_an_instance_of_an_abstract_class_2511": "无法创建抽象类的实例。", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "无法将迭代委托到值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但包含它的生成器将始终发送 \"{0}\"。", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "无法导出“{0}”。仅可从模块中导出本地声明。", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "无法扩展类“{0}”。类构造函数标记为私有。", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "无法扩展接口“{0}”。您是否想使用 \"implements\"?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "无法在当前目录找到 tsconfig.json 文件: {0}。", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "无法在指定目录找到 tsconfig.json 文件:“{0}”。", + "Cannot_find_global_type_0_2318": "找不到全局类型“{0}”。", + "Cannot_find_global_value_0_2468": "找不到全局值“{0}”。", + "Cannot_find_lib_definition_for_0_2726": "找不到“{0}”的库定义。", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到“{0}”的库定义。你是指“{1}”?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模块“{0}”。请考虑使用 \"--resolveJsonModule\" 导入带 \".json\" 扩展的模块。", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模块“{0}”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模块“{0}”或其相应的类型声明。", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "找不到“{0}”的副作用导入的模块或类型声明。", + "Cannot_find_name_0_2304": "找不到名称“{0}”。", + "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名称“{0}”。你是否指的是“{1}”?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名称“{0}”。你的意思是实例成员“this.{0}”?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名称“{0}”。你的意思是静态成员“{1}.{0}”?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名称“{0}”。你是否要在异步函数中写入此内容?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名称“{0}”。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{1}”或更高版本。", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名称“{0}”。是否需要更改目标库? 请尝试更改 “lib” 编译器选项以包括 “dom”。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名称“{0}”。你是否需要安装 Bun 的类型定义?请尝试运行 `npm i --save-dev @types/bun`,然后将 \"bun\" 添加到 tsconfig 的 types 字段。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名称 \"{0}\"。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名称“{0}”。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然后将 “jest” 或 “mocha” 添加到 tsconfig 中的类型字段。。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名称 \"{0}\"。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名称“{0}”。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`,然后将 “jquery” 添加到 teconfig 中的类型字段。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名称“{0}”。是否需要安装 Node.js 的类型定义? 请尝试运行 `npm i --save-dev @types/node`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名称“{0}”。是否需要安装 Node.js 的类型定义? 请尝试运行 `npm i --save-dev @types/node`,然后将 \"node\" 添加到 tsconfig 的 types 字段。", + "Cannot_find_namespace_0_2503": "找不到命名空间“{0}”。", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "找不到命名空间“{0}”。你是否指的是“{1}”?", + "Cannot_find_parameter_0_1225": "找不到参数“{0}”。", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到输入文件的公共子目录路径。", + "Cannot_find_type_definition_file_for_0_2688": "找不到“{0}”的类型定义文件。", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "无法导入类型声明文件。请考虑导入“{0}”,而不是“{1}”。", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "无法在块范围声明“{1}”所在的范围内初始化外部范围变量“{0}”。", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "不能调用可能是 \"null\" 的对象。", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "不能调用可能是 \"null\" 或“未定义”的对象。", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "不能调用可能是“未定义”的对象。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组析构将始终发送 \"{0}\"。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但数组扩张将始终发送 \"{0}\"。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "无法迭代值,因为其迭代器的 \"next\" 方法需要类型 \"{1}\",但 for-of 将始终发送 \"{0}\"。", + "Cannot_move_statements_to_the_selected_file_95183": "无法将语句移动到所选文件", + "Cannot_move_to_file_selected_file_is_invalid_95179": "无法移动到文件,所选文件无效", + "Cannot_read_file_0_5083": "无法读取文件“{0}”。", + "Cannot_read_file_0_Colon_1_5012": "无法读取文件“{0}”: {1}。", + "Cannot_redeclare_block_scoped_variable_0_2451": "无法重新声明块范围变量“{0}”。", + "Cannot_redeclare_exported_variable_0_2323": "无法重新声明导出的变量“{0}”。", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "无法在 catch 子句中重新声明标识符“{0}”。", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "无法在类型注释中启动函数调用。", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "无法使用 JSX,除非提供了 \"--jsx\" 标志。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "启用“{0}”时,不能对类型或仅类型命名空间使用“export import”。", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "当 \"--module\" 为 \"none\" 时无法使用导入、导出或模块扩大。", + "Cannot_use_namespace_0_as_a_type_2709": "不能将命名空间“{0}”用作类型。", + "Cannot_use_namespace_0_as_a_value_2708": "不能将命名空间“{0}”用作值。", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "无法在修饰类静态属性初始化表达式中使用 “this”。", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "无法写入文件 \"{0}\",因为它将覆盖由引用的项目 \"{1}\" 生成的 \".tsbuildinfo\" 文件", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "无法写入文件“{0}”,因为它会被多个输入文件覆盖。", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "无法写入文件“{0}”,因为它会覆盖输入文件。", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 子句变量不能有初始化表达式。", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 子句变量类型注释必须为 \"any\" 或 \"unknown\" (若已指定)。", + "Change_0_to_1_90014": "将“{0}”更改为“{1}”", + "Change_all_extended_interfaces_to_implements_95038": "将所有扩展接口都更改为 \"implements\"", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "将所有 JSDoc 样式类型都更改为 TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "将所有 JSDoc 样式类型都更改为 TypeScript (并将 \"| undefined\" 添加到可以为 null 的类型)", + "Change_extends_to_implements_90003": "将 \"extends\" 改为 \"implements\"", + "Change_spelling_to_0_90022": "将拼写更改为“{0}”", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "检查是否有已声明但未在构造函数中设置的类属性。", + "Check_side_effect_imports_6806": "检查副作用导入。", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "检查 “bind”、“call” 和 “apply” 方法的参数是否与原始函数匹配。", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "检查“{0}”是否是“{1}”-“{2}”的最长匹配前缀。", + "Circular_definition_of_import_alias_0_2303": "导入别名“{0}”的循环定义。", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析配置时检测到循环: {0}", + "Circularity_originates_in_type_at_this_location_2751": "循环源自此位置的类型。", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "类“{0}”将“{1}”定义为实例成员访问器,但扩展类“{2}”将其定义为实例成员函数。", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "类“{0}”将“{1}”定义为实例成员函数,但扩展类“{2}”将其定义为实例成员访问器。", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "类“{0}”将“{1}”定义为实例成员属性,但扩展类“{2}”将其定义为实例成员函数。", + "Class_0_incorrectly_extends_base_class_1_2415": "类“{0}”错误扩展基类“{1}”。", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "类“{0}”错误实现类“{1}”。你是想扩展“{1}”并将其成员作为子类继承吗?", + "Class_0_incorrectly_implements_interface_1_2420": "类“{0}”错误实现接口“{1}”。", + "Class_0_used_before_its_declaration_2449": "类“{0}”用于其声明前。", + "Class_constructor_may_not_be_a_generator_1368": "类构造函数可能不是生成器。", + "Class_constructor_may_not_be_an_accessor_1341": "类构造函数可能不是访问器。", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "类声明无法实现“{0}”的重载列表。", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 “@augments” 或 “@extends” 标记。", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "类修饰器不能与静态专用标识符一起使用。请考虑删除实验性修饰器。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父类定义的类字段“{0}”无法通过 super 在子类中访问。", + "Class_name_cannot_be_0_2414": "类名不能为“{0}”。", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "使用模块 {0} 将目标设置为 ES5 及更高版本时,类名不能为 \"Object\"。", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "类静态侧“{0}”错误扩展基类静态侧“{1}”。", + "Classes_can_only_extend_a_single_class_1174": "类只能扩展一个类。", + "Classes_may_not_have_a_field_named_constructor_18006": "类不能具有名为 \"constructor\" 的字段。", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "类中包含的代码在 JavaScript 的严格模式下进行计算,该模式不允许以此方式使用“{0}”。有关详细信息,请参阅 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode。", + "Command_line_Options_6171": "命令行选项", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "编译给定了其配置文件路径或带 \"tsconfig.json\" 的文件夹路径的项目。", + "Compiler_Diagnostics_6251": "编译器诊断", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "无法为编译器选项“{0}”提供空字符串。", + "Compiler_option_0_expects_an_argument_6044": "编译器选项“{0}”需要参数。", + "Compiler_option_0_may_not_be_used_with_build_5094": "编译器选项“--{0}”不能与 “--build” 一起使用。", + "Compiler_option_0_may_only_be_used_with_build_5093": "编译器选项“--{0}”只能与 “--build” 一起使用。", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "值“{1}”的编译器选项“{0}”不稳定。使用夜间 TypeScript 消除此错误。请尝试使用 “npm install -D typescript@next” 进行更新。", + "Compiler_option_0_requires_a_value_of_type_1_5024": "编译器选项“{0}”需要类型 {1} 的值。", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "当发出专用标识符下层时,编译器会预留名称“{0}”。", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "编译位于指定路径的 TypeScript 项目。", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "编译当前项目(工作目录中的 tsconfig.json。)", + "Compiles_the_current_project_with_additional_settings_6929": "使用其他设置编译当前项目。", + "Completeness_6257": "完成度", + "Composite_projects_may_not_disable_declaration_emit_6304": "复合项目可能不会禁用声明发出。", + "Composite_projects_may_not_disable_incremental_compilation_6379": "复合项目不能禁用增量编译。", + "Computed_from_the_list_of_input_files_6911": "从输入文件列表计算", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "计算属性必须是数字或字符串文本、变量或带 --isolatedDeclarations 的虚线表达式。", + "Computed_property_names_are_not_allowed_in_enums_1164": "枚举中不允许计算属性名。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "不能使用 --isolatedDeclarations 推断类或对象文本上的计算属性名称。", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "含字符串值成员的枚举中不允许使用计算值。", + "Concatenate_and_emit_output_to_single_file_6001": "连接输出并将其发出到单个文件。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析导入时除特定于解析程序的默认值外要设置的条件。", + "Conflicts_are_in_this_file_6201": "此文件中存在冲突。", + "Consider_adding_a_declare_modifier_to_this_class_6506": "请考虑向此类添加 “declare” 修饰符。", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "构造签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少返回类型批注的构造签名隐式具有返回类型 \"any\"。", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "不带参数的构造签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。", + "Constructor_implementation_is_missing_2390": "缺少构造函数实现。", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "类“{0}”的构造函数是私有的,仅可在类声明中访问。", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "类“{0}”的构造函数是受保护的,仅可在类声明中访问。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "在联合类型中使用时,构造函数类型标记必须用括号括起来。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "在相交类型中使用时,构造函数类型标记必须用括号括起来。", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "派生类的构造函数必须包含 \"super\" 调用。", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含文件,并且无法确定根目录,正在跳过在 \"node_modules\" 文件夹中查找。", + "Containing_function_is_not_an_arrow_function_95128": "包含函数不是箭头函数", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "控制用于检测模块格式 JS 文件的方法。", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "类型 \"{0}\" 到类型 \"{1}\" 的转换可能是错误的,因为两种类型不能充分重叠。如果这是有意的,请先将表达式转换为 \"unknown\"。", + "Convert_0_to_1_in_0_95003": "将“{0}”转换为 {0} 中的 {1}", + "Convert_0_to_mapped_object_type_95055": "将“{0}”转换为映射对象类型", + "Convert_all_const_to_let_95102": "将所有 'const' 转换为 'let'", + "Convert_all_constructor_functions_to_classes_95045": "将所有构造函数都转换为类", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "将所有无效字符转换为 HTML 实体代码", + "Convert_all_re_exported_types_to_type_only_exports_1365": "将所有重新导出的类型转换为仅类型导出", + "Convert_all_require_to_import_95048": "将所有 \"require\" 转换为 \"import\"", + "Convert_all_to_async_functions_95066": "全部转换为异步函数", + "Convert_all_to_bigint_numeric_literals_95092": "全部转换为 BigInt 数字字面量", + "Convert_all_to_default_imports_95035": "全部转换为默认导入", + "Convert_all_type_literals_to_mapped_type_95021": "将所有类型文本转换为映射类型", + "Convert_all_typedef_to_TypeScript_types_95177": "将所有 typedef 转换为 TypeScript 类型。", + "Convert_arrow_function_or_function_expression_95122": "转换箭头函数或函数表达式", + "Convert_const_to_let_95093": "将 \"const\" 转换为 \"let\"", + "Convert_default_export_to_named_export_95061": "将默认导出转换为命名导出", + "Convert_function_declaration_0_to_arrow_function_95106": "将函数声明“{0}”转换为箭头函数", + "Convert_function_expression_0_to_arrow_function_95105": "将函数表达式 \"{0}\" 转换为箭头函数", + "Convert_function_to_an_ES2015_class_95001": "将函数转换为 ES2015 类", + "Convert_invalid_character_to_its_html_entity_code_95100": "将无效字符转换为其 HTML 实体代码", + "Convert_named_export_to_default_export_95062": "将命名导出转换为默认导出", + "Convert_named_imports_to_default_import_95170": "将命名导入转换为默认导入", + "Convert_named_imports_to_namespace_import_95057": "将命名导入转换为命名空间导入", + "Convert_namespace_import_to_named_imports_95056": "将命名空间导入转换为命名导入", + "Convert_overload_list_to_single_signature_95118": "将重载列表转换为单一签名", + "Convert_parameters_to_destructured_object_95075": "将参数转换为析构对象", + "Convert_require_to_import_95047": "将 \"require\" 转换为 \"import\"", + "Convert_to_ES_module_95017": "转换为 ES 模块", + "Convert_to_a_bigint_numeric_literal_95091": "转换为 BigInt 数字字面量", + "Convert_to_anonymous_function_95123": "转换为异步函数", + "Convert_to_arrow_function_95125": "转换为箭头函数", + "Convert_to_async_function_95065": "转换为异步函数", + "Convert_to_default_import_95013": "转换为默认导入", + "Convert_to_named_function_95124": "转换为指定函数", + "Convert_to_optional_chain_expression_95139": "转换为可选链表达式", + "Convert_to_template_string_95096": "转换为模板字符串", + "Convert_to_type_only_export_1364": "转换为仅类型导出", + "Convert_typedef_to_TypeScript_type_95176": "将 typedef 转换为 TypeScript 类型。", + "Corrupted_locale_file_0_6051": "区域设置文件 {0} 已损坏。", + "Could_not_convert_to_anonymous_function_95153": "无法转换为匿名函数", + "Could_not_convert_to_arrow_function_95151": "无法转换为箭头函数", + "Could_not_convert_to_named_function_95152": "无法转换为命名函数", + "Could_not_determine_function_return_type_95150": "无法确定函数返回类型", + "Could_not_find_a_containing_arrow_function_95127": "找不到包含箭头函数", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "无法找到模块“{0}”的声明文件。“{1}”隐式拥有 \"any\" 类型。", + "Could_not_find_convertible_access_expression_95140": "找不到可转换的访问表达式", + "Could_not_find_export_statement_95129": "找不到 export 语句", + "Could_not_find_import_clause_95131": "找不到 import 子句", + "Could_not_find_matching_access_expressions_95141": "找不到匹配的访问表达式", + "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名称“{0}”。你是否是指“{1}”?", + "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空间导入或已命名的导入", + "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要为其生成访问器的属性", + "Could_not_find_variable_to_inline_95185": "找不到要内联的变量。", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "无法解析具有表达式的路径“{0}”: {1}。", + "Could_not_write_file_0_Colon_1_5033": "无法写入文件“{0}”: {1}。", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "为发出的 JavaScript 文件创建源映射文件。", + "Create_sourcemaps_for_d_ts_files_6614": "为 d.ts 文件创建源映射。", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用工作目录中的建议设置创建 tsconfig.json。", + "DIRECTORY_6038": "目录", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字符类中不允许使用十进制转义序列和反向引用。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "不允许使用带前导零的小数。", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "该声明扩充了另一文件中的声明。这无法被序列化。", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "为此文件发出的声明需要保留此导入以进行扩充。--isolatedDeclarations 不支持此功能。", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此文件的声明发出要求使用专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此文件的声明发出要求使用模块 \"{1}\" 中的专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "为此参数发出的声明要求将未定义隐式添加到其类型。--isolatedDeclarations 不支持此功能。", + "Declaration_expected_1146": "应为声明。", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "声明名称与内置全局标识符“{0}”冲突。", + "Declaration_or_statement_expected_1128": "应为声明或语句。", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "应为声明或语句。此 \"=\" 遵循语句块,因此如果打算编写重构赋值,则可能需要用括号将整个赋值括起来。", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "具有明确赋值断言的声明也必须具有类型批注。", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "具有初始值设定项的声明不能同时具有明确赋值断言。", + "Declare_a_private_field_named_0_90053": "声明名为 \"{0}\" 的专用字段。", + "Declare_method_0_90023": "声明方法“{0}”", + "Declare_private_method_0_90038": "声明私有方法 \"{0}\"", + "Declare_private_property_0_90035": "声明专用属性“{0}”", + "Declare_property_0_90016": "声明属性“{0}”", + "Declare_static_method_0_90024": "声明静态方法“{0}”", + "Declare_static_property_0_90027": "声明静态属性“{0}”", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "装饰器函数返回类型“{0}”不可分配到类型“{1}”。", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "装饰器函数返回类型为“{0}”,但预期为“void”或“any”。", + "Decorator_used_before_export_here_1486": "此处“导出”之前使用的修饰器。", + "Decorators_are_not_valid_here_1206": "修饰器在此处无效。", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "不能向多个同名的 get/set 访问器应用修饰器。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果修饰器也出现在“导出”之前,则它们可能不会出现在“export”或“export default”之后。", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "修饰器必须位于属性声明的名称和所有关键字之前。", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "将 catch 子句变量默认为 “unknown” 而不是 “any”。", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模块的默认导出具有或正在使用专用名称“{0}”。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "无法使用 --isolatedDeclarations 推断默认导出。", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "延迟导入中不允许使用默认导入。", + "Default_library_1424": "默认库", + "Default_library_for_target_0_1425": "目标 \"{0}\" 的默认库", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "仅当 ‘--module’ 标志设置为 ‘esnext’ 或 ‘preserve’ 时,才支持延迟导入。", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "以下标识符的定义与另一个文件中的定义冲突: {0}", + "Delete_all_unused_declarations_95024": "删除未使用的所有声明", + "Delete_all_unused_imports_95147": "删除所有未使用的导入", + "Delete_all_unused_param_tags_95172": "删除所有未使用的 “@param” 标记", + "Delete_the_outputs_of_all_projects_6365": "删除所有项目的输出。", + "Delete_unused_param_tag_0_95171": "删除未使用的 “@param” 标记“{0}”", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[已弃用] 请改用 \"--jsxFactory\"。已 \"react\" JSX 发出设为目标时,请指定要为 createElement 调用的对象", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[已弃用] 请改用 \"--outFile\"。连接并发出到单个文件的输出", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[已弃用] 请改用 \"--skipLibCheck\"。请跳过默认库声明文件的类型检查。", + "Deprecated_setting_Use_outFile_instead_6677": "弃用的设置。请改用 “outFile”。", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "是否忘记使用 \"await\"?", + "Did_you_mean_0_1369": "你是想使用 \"{0}\" 吗?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "你是想将 \"{0}\" 限制为类型 \"new (...args: any[]) => {1}\" 吗?", + "Did_you_mean_to_call_this_expression_6212": "你是想调用此表达式吗?", + "Did_you_mean_to_mark_this_function_as_async_1356": "你是想将此函数标记为 \"async\" 吗?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "你的意思是使用 \":\" 吗? 当包含对象文字属于解构模式时,\"=\" 只能跟在属性名称的后面。", + "Did_you_mean_to_use_new_with_this_expression_6213": "你是想将 \"new\" 用于此表达式吗?", + "Digit_expected_1124": "应为数字。", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目录“{0}”不存在,正在跳过该目录中的所有查找。", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "目录 '{0}' 不包含 package.json 作用域。导入将无法解析。", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "禁止在发出的 JavaScript 文件中添加 “use strict” 指令。", + "Disable_checking_for_this_file_90018": "禁用检查此文件", + "Disable_emitting_comments_6688": "禁用发出注释。", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "禁用在其 JSDoc 注释中包含 “@internal” 的发出声明。", + "Disable_emitting_files_from_a_compilation_6660": "禁用从编译发出文件。", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "禁用在报告了任何类型检查错误时发出文件。", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "在生成的代码中禁用擦除 “const enum” 声明。", + "Disable_error_reporting_for_unreachable_code_6603": "对无法访问的代码禁用错误报告。", + "Disable_error_reporting_for_unused_labels_6604": "对未使用的标签禁用错误报告。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "禁用完整类型检查(仅报告关键分析和发出错误)。", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "在已编译输出中禁用生成自定义帮助程序函数(如 “__extends”)。", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "禁用包括任何库文件(包括默认的 lib.d.ts)。", + "Disable_loading_referenced_projects_6235": "禁止加载引用的项目。", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "在引用复合项目时禁用首选源文件而不是声明文件。", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "禁用在创建对象文字期间报告多余属性错误。", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "禁用将符号链接解析为其实际路径。这会关联到节点中的同一标志。", + "Disable_size_limitations_on_JavaScript_projects_6162": "禁用对 JavaScript 项目的大小限制。", + "Disable_solution_searching_for_this_project_6224": "对此项目禁用解决方案搜索。", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "禁止严格检查函数类型中的通用签名。", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "禁用针对 JavaScript 项目的类型获取", + "Disable_truncating_types_in_error_messages_6663": "在错误消息中禁用截断类型。", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "禁止使用源文件而不是引用项目中的声明文件。", + "Disable_wiping_the_console_in_watch_mode_6684": "禁用在监视模式下擦除控制台。", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "禁用通过查看项目中的文件名进行类型获取推理。", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "禁止 “import”、“require” 或 “” 扩展 TypeScript 应添加到项目的文件数。", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允许对同一文件采用大小不一致的引用。", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "请勿将三斜杠引用或导入的模块添加到已编译文件列表中。", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "不允许不属于 ECMAScript 的运行时构造。", + "Do_not_emit_comments_to_output_6009": "请勿将注释发出到输出。", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "请勿对具有 \"@internal\" 注释的代码发出声明。", + "Do_not_emit_outputs_6010": "请勿发出输出。", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "如果报告了任何错误,请不要发出输出。", + "Do_not_emit_use_strict_directives_in_module_output_6112": "不要在模块输出中发出 \"use strict\" 指令。", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "请勿清除生成代码中的常数枚举声明。", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "请勿在已编译输出中生成自定义帮助程序函数,例如 \"__extends\"。", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "请勿包括默认库文件(lib.d.ts)。", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "不报告有关不可访问的代码的错误。", + "Do_not_report_errors_on_unused_labels_6074": "不报告有关未使用的标签的错误。", + "Do_not_resolve_the_real_path_of_symlinks_6013": "不要解析 symlink 的真实路径。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "不要转换或省略任何未标记为仅类型的导入或导出,确保它们是根据“模块”设置以输出文件格式编写的。", + "Do_not_truncate_error_messages_6165": "请勿删除错误消息。", + "Duplicate_function_implementation_2393": "函数实现重复。", + "Duplicate_identifier_0_2300": "标识符“{0}”重复。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "标识符“{0}”重复。编译器在模块的顶层范围中保留名称“{1}”。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "标识符“{0}”重复。编译器在包含异步函数的模块的顶层范围中保留名称“{1}”。", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "标识符“{0}”重复。在静态初始化表达式中中发出 “super” 引用时,编译器保留名称“{1}”。", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "标识符“{0}”重复。编译器使用“{1}”声明来支持异步函数。", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "标识符 \"{0}\" 重复。静态元素和实例元素不能共享相同的专用名称。", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "标识符 \"arguments\" 重复。编译器使用 \"arguments\" 初始化 rest 参数。", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "标识符 \"_newTarget\" 重复。编译器使用变量声明 \"_newTarget\" 来捕获 \"new.target\" 元属性引用。", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "标识符 \"_this\" 重复。编译器使用变量声明 \"_this\" 来捕获 \"this\" 引用。", + "Duplicate_index_signature_for_type_0_2374": "类型“{0}”的索引签名重复。", + "Duplicate_label_0_1114": "标签“{0}”重复。", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "重复的属性 \"{0}\"。", + "Duplicate_regular_expression_flag_1500": "正则表达式标志重复。", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "动态导入的说明符类型必须是 \"string\",但此处类型是 \"{0}\"。", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "仅当将 ‘--module’ 标记设置为 ‘es2020’、‘es2022’、‘esnext’、‘commonjs’、‘amd’、‘system’、‘umd’、‘node16’、‘node18’、'node20' 或 ‘nodenext’ 时,才支持动态导入。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "动态导入只能接受模块说明符和可选的特性集作为参数", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,动态导入才支持第二个参数。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "ECMAScript 导入和导出不能写入 \"verbatimModuleSyntax\" 下的 CommonJS 文件中。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "ECMAScript 导入和导出不能写入 \"verbatimModuleSyntax\" 下的 CommonJS 文件中。调整最近的 \"package.json\" 中的 \"type\" 字段,将此文件设置为 ECMAScript 模块,或调整 TypeScript 中的 \"verbatimModuleSyntax\"、\"module\" 和 \"moduleResolution\" 设置。", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "当 \"module\" 设置为 \"preserve\" 时,CommonJS 模块中不允许使用 ECMAScript 模块语法。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "“{0}.{1}”的每个声明的值不同,其中应为“{2}”,但给出的是“{3}”。", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "联合类型 \"{0}\" 的每个成员都有构造签名,但这些签名都不能互相兼容。", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "联合类型 \"{0}\" 的每个成员都有签名,但这些签名都不能互相兼容。", + "Editor_Support_6249": "编辑器支持", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "元素隐式具有 \"any\" 类型,因为类型为 \"{0}\" 的表达式不能用于索引类型 \"{1}\"。", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "元素隐式具有 \"any\" 类型,因为索引表达式的类型不为 \"number\"。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隐式具有 \"any\" 类型,因为类型“{0}”没有索引签名。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "元素隐式具有 \"any\" 类型,因为类型 \"{0}\" 没有索引签名。你是想调用 \"{1}\" 吗?", + "Emit_6246": "发出", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "发出符合 ECMAScript 标准的类字段。", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在输出文件的开头发出一个 UTF-8 字节顺序标记(BOM)。", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "发出包含源映射而非包含单独文件的单个文件。", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "发出用于调试的编译器运行的 v8 CPU 配置文件。", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "发出其他 JavaScript 以轻松支持导入 CommonJS 模块。这将启用 “allowSyntheticDefaultImports” 以实现类型兼容性。", + "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而不是 Set 发出类字段。", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "为源文件中的修饰声明发出设计类型元数据。", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "发出更合规但更详细且性能较低的 JavaScript 进行迭代。", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "在单个文件内发出源以及源映射;需要设置 \"--inlineSourceMap\" 或 \"--sourceMap\"。", + "Enable_all_strict_type_checking_options_6180": "启用所有严格类型检查选项。", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "在 TypeScript 输出中启用颜色和格式设置,以使编译器错误更易于阅读。", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "启用允许将 TypeScript 项目与项目引用一起使用的约束。", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "为未在函数中显式返回的代码路径启用错误报告。", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "对具有隐式 “any” 类型的表达式和声明启用错误报告。", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "为 switch 语句中的故障案例启用错误报告。", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已检查类型的 JavaScript 文件中启用错误报告。", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "在未读取局部变量时启用错误报告。", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "在 “this” 的类型为 “any” 时启用错误报告。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "启用对旧实验性修饰器的实验性支持。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "启用导入具有任何扩展名的文件,前提是存在声明文件。", + "Enable_importing_json_files_6689": "启用导入 .json 文件。", + "Enable_lib_replacement_6808": "启用 lib 替换。", + "Enable_project_compilation_6302": "启用项目编译", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "对函数启用严格的 \"bind\"、\"call\" 和 \"apply\" 方法。", + "Enable_strict_checking_of_function_types_6186": "对函数类型启用严格检查。", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "启用类中属性初始化的严格检查。", + "Enable_strict_null_checks_6113": "启用严格的 NULL 检查。", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在配置文件中启用 \"experimentalDecorators\" 选项", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "在配置文件中启用 \"--jsx\" 标志", + "Enable_tracing_of_the_name_resolution_process_6085": "启用名称解析过程的跟踪。", + "Enable_verbose_logging_6713": "启用详细日志记录。", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "通过为所有导入创建命名空间对象来启用 CommonJS 和 ES 模块之间的发出互操作性。表示 \"allowSyntheticDefaultImports\"。", + "Enables_experimental_support_for_ES7_decorators_6065": "对 ES7 修饰器启用实验支持。", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "对发出修饰器的类型元数据启用实验支持。", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "对使用索引类型声明的键强制使用索引访问器。", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "确保使用替代修饰符标记派生类中的替代成员。", + "Ensure_that_casing_is_correct_in_imports_6637": "确保导入中的大小写正确。", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "确保可以安全地转译每个文件,而无需依赖其他导入。", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "请确保始终发出 “se strict”。", + "Entering_conditional_exports_6413": "正在输入条件导出。", + "Entry_point_for_implicit_type_library_0_1420": "隐式类型库 \"{0}\" 的入口点", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "隐式类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"", + "Enum_0_used_before_its_declaration_2450": "枚举“{0}”用于其声明前。", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "枚举声明只能与命名空间或其他枚举声明合并。", + "Enum_declarations_must_all_be_const_or_non_const_2473": "枚举声明必须全为常数或非常数。", + "Enum_member_expected_1132": "应为枚举成员。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "启用“isolatedModules”时,非文本数值成员之后的枚举成员必须具有初始值设定项。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "枚举成员初始值设定项必须可计算,而不引用具有 --isolatedDeclarations 的外部符号。", + "Enum_member_must_have_initializer_1061": "枚举成员必须具有初始化表达式。", + "Enum_name_cannot_be_0_2431": "枚举名不能为“{0}”。", + "Environment_Settings_6285": "环境设置", + "Errors_Files_6041": "错误文件", + "Escape_sequence_0_is_not_allowed_1488": "不允许转义序列“{0}”。", + "Examples_Colon_0_6026": "示例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "比较类型“{0}”和“{1}”的复杂性过高。", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "与类型“{0}”和“{1}”相比,堆栈深度过高。", + "Exiting_conditional_exports_6416": "正在退出条件导出。", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "应为 {0}-{1} 类型参数;请为这些参数添加 \"@extends\" 标记。", + "Expected_0_arguments_but_got_1_2554": "应有 {0} 个参数,但获得 {1} 个。", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "应为 {0} 个参数,但得到的却是 {1} 个。你是否忘了将类型参数中的 \"void\" 包含到 \"Promise\"?", + "Expected_0_type_arguments_but_got_1_2558": "应有 {0} 个类型参数,但获得 {1} 个。", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "应为 {0} 类型参数;请为这些参数添加 \"@extends\" 标记。", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "应为 1 个参数,但得到 0。“new Promise()” 需要 JSDoc 提示才能生成可在没有参数的情况下调用的 “resolve”。", + "Expected_a_Unicode_property_name_1523": "应为 Unicode 属性名称。", + "Expected_a_Unicode_property_name_or_value_1527": "应为 Unicode 属性名称或值。", + "Expected_a_Unicode_property_value_1525": "应为 Unicode 属性值。", + "Expected_a_capturing_group_name_1514": "应为捕获组名称。", + "Expected_a_class_set_operand_1520": "应为类集操作数。", + "Expected_at_least_0_arguments_but_got_1_2555": "应有至少 {0} 个参数,但获得 {1} 个。", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "“{0}”预期的相应 JSX 结束标记。", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "预期的 JSX 片段的相应结束标记。", + "Expected_for_property_initializer_1442": "属性初始化表达式应有 \"=\"。", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "\"package.json\" 中 \"{0}\" 字段的类型应为 \"{1}\",但实际为 \"{2}\" 。", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "显示指定了模块解析类型:“{0}”。", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "除非 \"target\" 选项设置为 \"es2016\" 或更高版本,否则不能对 \"bigint\" 值执行求幂运算。", + "Export_0_from_module_1_90059": "从模块“{1}”导出“{0}”", + "Export_all_referenced_locals_90060": "导出所有引用的局部变量", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "面向 ECMAScript 模块时,不能使用导出分配。请考虑改用 \"export default\" 或另一种模块格式。", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "当 \"--module\" 标志是 \"system\" 时不支持导出分配。", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "导出声明与“{0}”的导出声明冲突。", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "命名空间中不允许有导出声明。", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "路径 '{1}' 处的 package.json 作用域中不存在导出说明符 '{0}'。", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "导出的类型别名“{0}”已经或正在使用专用名称“{1}”。", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "导出的类型别名“{0}”具有或正在使用模块“{2}”中的专用名称“{1}”。", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "导出的变量“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "导出的变量“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "导出的变量“{0}”具有或正在使用专用名称“{1}”。", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模块扩大中不允许导出和导出分配。", + "Expression_expected_1109": "应为表达式。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表达式必须括在括号中才能用作修饰器。", + "Expression_or_comma_expected_1137": "应为表达式或逗号。", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "表达式生成的元组类型太大,无法表示。", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "表达式生成的联合类型过于复杂,无法表示。", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "表达式解析为 \"_super\",编译器使用 \"_super\" 获取基类引用。", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "表达式解析为编辑器用于捕获 \"new.target\" 元属性引用的变量声明 \"_newTarget\"。", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "表达式解析为编译器用于捕获 \"this\" 引用的变量声明 \"_this\"。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "无法使用 --isolatedDeclarations 推断表达式类型。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends 子句不能包含具有 --isolatedDeclarations 的表达式。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推断类型“{0}”的 Extends 子句具有或正在使用专用名称“{1}”。", + "Extract_base_class_to_variable_90064": "将基类提取到变量", + "Extract_binding_expressions_to_variable_90066": "将绑定表达式提取到变量", + "Extract_constant_95006": "提取常数", + "Extract_default_export_to_variable_90065": "将默认导出提取到变量", + "Extract_function_95005": "提取函数", + "Extract_to_0_in_1_95004": "提取到 {1} 中的 {0}", + "Extract_to_0_in_1_scope_95008": "提取到 {1} 范围中的 {0}", + "Extract_to_0_in_enclosing_scope_95007": "提取到封闭范围中的 {0}", + "Extract_to_interface_95090": "提取到接口", + "Extract_to_type_alias_95078": "提取到类型别名", + "Extract_to_typedef_95079": "提取到类型引用", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "提取到变量并替换为“{0} 为 typeof {0}”", + "Extract_type_95077": "提取类型", + "FILE_6035": "文件", + "FILE_OR_DIRECTORY_6040": "文件或目录", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency“{0}”。", + "Failed_to_resolve_under_condition_0_6415": "无法在条件“{0}”下解析。", + "Fallthrough_case_in_switch_7029": "switch 语句中的 Fallthrough 情况。", + "File_0_does_not_exist_6096": "文件“{0}”不存在。", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根据前面缓存的查找,文件“{0}”不存在。", + "File_0_exists_according_to_earlier_cached_lookups_6239": "根据前面缓存的查找,文件“{0}”存在。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "文件“{0}”存在 - 将其用作名称解析结果。", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "文件“{0}”具有不受支持的扩展名。仅支持 {1} 扩展名。", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "文件 \"{0}\" 是 JavaScript 文件。你是想启用 \"allowJs\" 选项吗?", + "File_0_is_not_a_module_2306": "文件“{0}”不是模块。", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "文件 \"{0}\" 不在项目 \"{1}\" 的文件列表中。项目必须列出所有文件,或使用 \"include\" 模式。", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "文件“{0}”不在 \"rootDir\"“{1}”下。\"rootDir\" 应包含所有源文件。", + "File_0_not_found_6053": "找不到文件“{0}”。", + "File_Layout_6284": "文件布局", + "File_Management_6245": "文件管理", + "File_appears_to_be_binary_1490": "文件似乎是二进制文件。", + "File_change_detected_Starting_incremental_compilation_6032": "检测到文件更改。正在启动增量编译...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "文件是 CommonJS 模块,因为“{0}”没有字段 “type”", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "文件是 CommonJS 模块,因为“{0}”具有值不是 “module” 的字段 “type”", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "文件是 CommonJS 模块,因为找不到 “package.json”", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "文件是 ECMAScript 模块,因为“{0}”具有值为 “module” 的字段 “type”", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "文件是 CommonJS 模块; 它可能会转换为 ES 模块。", + "File_is_default_library_for_target_specified_here_1426": "文件是此处指定的目标的默认库。", + "File_is_entry_point_of_type_library_specified_here_1419": "文件是此处指定的类型库的入口点。", + "File_is_included_via_import_here_1399": "在此处通过导入包含了文件。", + "File_is_included_via_library_reference_here_1406": "在此处通过库引用包含了文件。", + "File_is_included_via_reference_here_1401": "在此处通过引用包含了文件。", + "File_is_included_via_type_library_reference_here_1404": "在此处通过类型库引用包含了文件。", + "File_is_library_specified_here_1423": "文件是此处指定的库。", + "File_is_matched_by_files_list_specified_here_1410": "通过此处指定的“文件”列表匹配了文件。", + "File_is_matched_by_include_pattern_specified_here_1408": "通过在此处指定包含模式匹配了文件。", + "File_is_output_from_referenced_project_specified_here_1413": "从此处指定的引用项目输出文件。", + "File_is_output_of_project_reference_source_0_1428": "文件是项目引用源 \"{0}\" 的输出", + "File_is_source_from_referenced_project_specified_here_1416": "文件源自此处指定的引用项目。", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "文件名“{0}”仅在大小写方面与包含的文件名“{1}”不同。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "文件名“{0}”具有“{1}”扩展 - 改为查找“{2}”。", + "File_name_0_has_a_1_extension_stripping_it_6132": "文件名“{0}”的扩展名为“{1}”,请去除它。", + "File_redirects_to_file_0_1429": "文件重定向到文件 \"{0}\"", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "文件规范不能包含出现在递归目录通配符(\"*\"): “{0}”后的父目录(\"..\")。", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "文件规范不能以递归目录通配符结尾(\"**\"):“{0}”。", + "Filters_results_from_the_include_option_6627": "从 “include” 选项筛选结果。", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "修复检测到的所有拼写错误", + "Fix_all_expressions_possibly_missing_await_95085": "修复可能缺少 \"await\" 的所有表达式", + "Fix_all_implicit_this_errors_95107": "修复所有 implicit-'this' 错误", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修复所有错误的异步函数返回类型", + "Fix_all_with_type_only_imports_95182": "使用仅类型导入修复所有问题", + "For_nodejs_Colon_6287": "对于 nodejs:", + "Found_0_errors_6217": "找到 {0} 个错误。", + "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 个错误。注意文件更改。", + "Found_0_errors_in_1_files_6261": "在 {1} 个文件中找到 {0} 个错误。", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一文件中找到 {0} 个错误,起始位置为: {1}", + "Found_1_error_6216": "找到 1 个错误。", + "Found_1_error_Watching_for_file_changes_6193": "找到 1 个错误。注意文件更改。", + "Found_1_error_in_0_6259": "在 {0} 中找到 1 个错误", + "Found_package_json_at_0_6099": "在“{0}”处找到了 \"package.json\"。", + "Found_peerDependency_0_with_1_version_6282": "找到具有“{1}”版本的 peerDependency“{0}”。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "面向“ES5”时,在严格模式下,块内不允许函数声明。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "面向“ES5”时,在严格模式下,块内不允许函数声明。类定义自动处于严格模式。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "面向“ES5”时,在严格模式下,块内不允许函数声明。模块自动处于严格模式。", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少返回类型批注的函数表达式隐式具有“{0}”返回类型。", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "函数实现缺失或未立即出现在声明之后。", + "Function_implementation_name_must_be_0_2389": "函数实现名称必须为“{0}”。", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "由于函数不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函数缺少结束 return 语句,返回类型不包括 \"undefined\"。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函数必须具有带有 --isolatedDeclarations 的显式返回类型注释。", + "Function_not_implemented_95159": "未实现函数。", + "Function_overload_must_be_static_2387": "函数重载必须为静态。", + "Function_overload_must_not_be_static_2388": "函数重载不能为静态。", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在联合类型中使用时,函数类型标记必须用括号括起来。", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在相交类型中使用时,函数类型标记必须用括号括起来。", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少返回类型注释的函数类型隐式具有 \"{0}\" 返回类型。", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "具有正文的函数只能与环境类合并。", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "从项目的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。", + "Generate_get_and_set_accessors_95046": "生成 \"get\" 和 \"set\" 访问器", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "为所有重写属性生成 \"get\" 和 \"set\" 访问器", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "生成 CPU 配置文件。", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "为每个相应的 \".d.ts\" 文件生成源映射。", + "Generates_an_event_trace_and_a_list_of_types_6237": "生成事件跟踪和类型列表。", + "Generates_corresponding_d_ts_file_6002": "生成相应的 \".d.ts\" 文件。", + "Generates_corresponding_map_file_6043": "生成相应的 \".map\" 文件。", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "生成器隐式具有 yield 类型 ‘{0}’。请考虑提供一个返回类型注释。", + "Generators_are_not_allowed_in_an_ambient_context_1221": "不允许在环境上下文中使用生成器。", + "Generic_type_0_requires_1_type_argument_s_2314": "泛型类型“{0}”需要 {1} 个类型参数。", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型类型“{0}”需要介于 {1} 和 {2} 类型参数之间。", + "Global_module_exports_may_only_appear_at_top_level_1316": "全局模块导出仅可出现在顶层级别中。", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "全局模块导出仅可出现声明文件中。", + "Global_module_exports_may_only_appear_in_module_files_1314": "全局模块导出仅可出现模块文件中。", + "Global_type_0_must_be_a_class_or_interface_type_2316": "全局类型“{0}”必须为类或接口类型。", + "Global_type_0_must_have_1_type_parameter_s_2317": "全局类型“{0}”必须具有 {1} 个类型参数。", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "在 \"--incremental\" 和 \"--watch\" 中有重新编译,假定文件中的更改只会影响直接依赖它的文件。", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 “incremental” 和 “watch” 模式的项目中具有重新编译会假定文件中的更改将仅直接影响依赖于它的文件。", + "Hexadecimal_digit_expected_1125": "应为十六进制数字。", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "应为标识符。“{0}”是模块顶层的预留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "应为标识符。“{0}”在严格模式下是保留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "应为标识符。“{0}”在严格模式下是保留字。类定义自动处于严格模式。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "应为标识符。“{0}”是严格模式下的保留字。模块自动处于严格模式。", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "应为标识符。\"{0}\" 是保留字,不能在此处使用。", + "Identifier_expected_1003": "应为标识符。", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "应为标识符。转换 ECMAScript 模块时,\"__esModule\" 保留为导出标记。", + "Identifier_or_string_literal_expected_1478": "应为标识符或字符串字面量。", + "Identifier_string_literal_or_number_literal_expected_1496": "应为标识符、字符串文本或数字文本。", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果“{0}”包实际上公开此模块,请考虑发送拉取请求以修正“https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}”", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果“{0}”包实际公开了此模块,请尝试添加包含 `declare module‘{1}';` 的新声明(.d.ts)文件", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "忽略找到的 tsconfig,使用命令行选项和文件进行构建。", + "Ignore_this_error_message_90019": "忽略此错误信息", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用默认编译器选项编译指定文件。", + "Implement_all_inherited_abstract_classes_95040": "实现继承的所有抽象类", + "Implement_all_unimplemented_interfaces_95032": "实现未实现的所有接口", + "Implement_inherited_abstract_class_90007": "实现已继承的抽象类", + "Implement_interface_0_90006": "实现接口“{0}”", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "导出的类“{0}”的 Implements 子句具有或正在使用专用名称“{1}”。", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "\"symbol\" 到 \"string\" 的隐式转换将在运行时失败。请考虑在 \"String(...)\" 中包装此表达式。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "导入“{0}”与此文件中使用的全局值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "导入“{0}”与本地值冲突,因此在启用“isolatedModules”时必须使用仅类型导入进行声明。", + "Import_0_from_1_90013": "从“{1}”导入“{0}”", + "Import_assertion_values_must_be_string_literal_expressions_2837": "导入断言值必须为字符串字面量表达式。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "不允许在编译到 commonJS“require”调用的语句导入断言。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,才支持导入断言。", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "导入断言不能用于仅类型导入或导出。", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "导入断言已被导入属性替换。使用 “with” 而不是 “assert”。", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "面向 ECMAScript 模块时,不能使用导入分配。请考虑改用 \"import * as ns from \"mod\"\"、\"import {a} from \"mod\"\"、\"import d from \"mod\"\" 或另一种模块格式。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "导入属性值必须为字符串字面量表达式。", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "不允许在编译到 commonJS“require” 调用的语句导入属性。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "仅当 ‘--module’ 选项设置为 ‘esnext’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 时,才支持导入属性。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "导入属性不能用于仅类型导入或导出。", + "Import_declaration_0_is_using_private_name_1_4000": "导入声明“{0}”使用的是专用名称“{1}”。", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "导入声明与“{0}”的局部声明冲突。", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空间中的导入声明不能引用模块。", + "Import_emit_helpers_from_tslib_6139": "从 \"tslib\" 导入发出帮助程序。", + "Import_may_be_converted_to_a_default_import_80003": "导入可能会转换为默认导入。", + "Import_name_cannot_be_0_2438": "导入名称不能为“{0}”。", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "环境模块声明中的导入或导出声明不能通过相对模块名引用模块。", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "路径 '{1}' 处的 package.json 作用域中不存在导入说明符 '{0}'。", + "Imported_via_0_from_file_1_1393": "通过 {0} 从文件 \"{1}\" 导入", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "通过 {0} 从文件 \"{1}\" 导入,以按照 compilerOptions 中指定的配置导入 \"importHelpers\"", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "通过 {0} 从文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数", + "Imported_via_0_from_file_1_with_packageId_2_1394": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以按照 compilerOptions 中指定的方式导入 \"importHelpers\"", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "当 ‘module’ 设置为 ‘{0}’ 时,将 JSON 文件导入 ECMAScript 模块需要 ‘type: “json”’ 导入属性。", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模块扩大中不允许导入。请考虑将它们移动到封闭的外部模块。", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在环境枚举声明中,成员初始化表达式必须是常数表达式。", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在包含多个声明的枚举中,只有一个声明可以省略其第一个枚举元素的初始化表达式。", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含文件列表。这不支持 glob 模式,与 “include” 不同。", + "Include_modules_imported_with_json_extension_6197": "包括通过 \".json\" 扩展导入的模块", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在发出的 JavaScript 内的源映射中包含源代码。", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在发出的 JavaScript 中包括源映射文件。", + "Includes_imports_of_types_referenced_by_0_90054": "包含由“{0}”引用的类型的导入", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch,-w 将开始监视当前项目的文件更改。设置后,可以使用以下内容配置监视模式:", + "Incomplete_quantifier_Digit_expected_1505": "限定符不完整。应为数字。", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "类型“{1}”中缺少类型“{0}”的索引签名。", + "Index_signature_in_type_0_only_permits_reading_2542": "类型“{0}”中的索引签名仅允许读取。", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合并声明“{0}”中的单独声明必须全为导出或全为局部声明。", + "Infer_all_types_from_usage_95023": "从使用情况推导所有类型", + "Infer_function_return_type_95148": "推断函数返回类型", + "Infer_parameter_types_from_usage_95012": "根据使用情况推断参数类型", + "Infer_this_type_of_0_from_usage_95080": "从用法中推断出 \"{0}\" 的 \"this\" 类型", + "Infer_type_of_0_from_usage_95011": "根据使用情况推断“{0}”的类型", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支持从类表达式推理。", + "Initialize_property_0_in_the_constructor_90020": "初始化构造函数中的属性“{0}”", + "Initialize_static_property_0_90021": "初始化静态属性“{0}”", + "Initializer_for_property_0_2811": "属性“{0}”的初始化表达式", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "实例成员变量“{0}”的初始化表达式不能引用构造函数中声明的标识符“{1}”。", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "不允许在环境上下文中使用初始化表达式。", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 项目并创建 tsconfig.json 文件。", + "Inline_variable_95184": "内联变量", + "Insert_command_line_options_and_files_from_a_file_6030": "从文件插入命令行选项和文件。", + "Install_0_95014": "安装“{0}”", + "Install_all_missing_types_packages_95033": "安装缺少的所有类型包", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "接口“{0}”不能同时扩展类型“{1}”和“{2}”。", + "Interface_0_incorrectly_extends_interface_1_2430": "接口“{0}”错误扩展接口“{1}”。", + "Interface_declaration_cannot_have_implements_clause_1176": "接口声明不能有 \"implements\" 子句。", + "Interface_must_be_given_a_name_1438": "必须为接口指定名称。", + "Interface_name_cannot_be_0_2427": "接口名称不能为“{0}”。", + "Interop_Constraints_6252": "互操作约束", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "将可选属性类型解释为已写,而不是添加 \"undefined\"。", + "Invalid_character_1127": "无效的字符。", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "无效的导入说明符 '{0}' 没有可行的解决方法。", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "扩大中的模块名称无效。模块“{0}”解析到位于“{1}”处的非类型化模块,其无法扩大。", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "扩大中的模块名无效,找不到模块“{0}”。", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新表达式中的可选链无效。是否要调用“{0}()”?", + "Invalid_reference_directive_syntax_1084": "\"reference\" 指令语法无效。", + "Invalid_syntax_in_decorator_1498": "修饰器中的语法无效。", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "“{0}”的使用无效。它不能在类静态块内使用。", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "“{0}”的使用无效。模块自动处于严格模式。", + "Invalid_use_of_0_in_strict_mode_1100": "严格模式下“{0}”的使用无效。", + "Invalid_value_for_ignoreDeprecations_5103": "“--ignoreDeprecations”的值无效。", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "\"jsxFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "\"jsxFragmentFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "\"--reactNamespace\" 的值无效。“{0}”不是有效的标识符。", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "很可能缺少了分隔这两个模板表达式的逗号。它们构成了无法调用的带标记的模板表达式。", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素类型 \"{0}\" 不是有效的 JSX 元素。", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其实例类型 \"{0}\" 不是有效的 JSX 元素。", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其返回类型 \"{0}\" 不是有效的 JSX 元素。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其类型“{0}”不是有效的 JSX 元素类型。", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc \"@{0} {1}\" 不匹配 \"extends {2}\" 子句。", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc \"@{0}\" 未附加到类。", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc \"...\" 可能仅出现在签名的最后一个参数中。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc \"@param\" 标记具有名称 \"{0}\",但不存在具有该名称的参数。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc \"@param\" 标记的名称为“{0}”,但该名称没有参数。如果它为数组类型,将匹配 \"arguments\"。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以转换为 TypeScript 类型。", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc \"@typedef\" 标记应具有类型注释,或其后跟有 \"@property\" 或 \"@member\" 标记。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef 可以转换为 TypeScript 类型。", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 类型只能在文档注释内部使用。", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 类型可能会移到 TypeScript 类型。", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能为 JSX 属性分配非空“表达式”。", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 元素“{0}”没有相应的结束标记。", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX 元素类不支持特性,因为它不具有“{0}”属性。", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "JSX 元素隐式具有类型 \"any\",因为不存在接口 \"JSX.{0}\"。", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "JSX 元素隐式具有类型 \"any\",因为不存在全局类型 \"JSX.Element\"。", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 元素类型“{0}”不具有任何构造签名或调用签名。", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 元素不能具有多个名称相同的特性。", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 表达式不能使用逗号运算符。你是想写入数组吗?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX 表达式必须具有一个父元素。", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段没有相应的结束标记。", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 属性访问表达式不能包含 JSX 命名空间名称", + "JSX_spread_child_must_be_an_array_type_2609": "JSX 扩展子属性必须为数组类型。", + "JavaScript_Support_6247": "JavaScript 支持", + "Jump_target_cannot_cross_function_boundary_1107": "跳转目标不能跨越函数边界。", + "KIND_6034": "种类", + "Keywords_cannot_contain_escape_characters_1260": "关键字不能包含转义字符。", + "LOCATION_6037": "位置", + "Language_and_Environment_6254": "语言和环境", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗号运算符的左侧未使用,没有任何副作用。", + "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定了库 \"{0}\"", + "Library_referenced_via_0_from_file_1_1405": "通过 \"{0}\" 从文件 \"{1}\" 引用了库", + "Line_break_not_permitted_here_1142": "不允许在此处换行。", + "Line_terminator_not_permitted_before_arrow_1200": "箭头前不允许有行终止符。", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "解析模块时要搜索的文件名后缀列表。", + "List_of_folders_to_include_type_definitions_from_6161": "包含类型定义来源的文件夹列表。", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "根文件夹列表,其组合内容表示在运行时的项目结构。", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在从根目录“{1}”加载“{0}”,候选位置“{2}”。", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在从 \"node_modules\" 文件夹加载模块“{0}”,目标文件类型: {1}。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在将模块作为文件/文件夹进行加载,候选模块位置“{0}”,目标文件类型: {1}。", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "在 “moduleResolution” 进程期间使用的日志路径。", + "Longest_matching_prefix_for_0_is_1_6108": "“{0}”的最长匹配前缀为“{1}”。", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "正在 \"node_modules\" 文件夹中查找,初始位置为“{0}”。", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "让所有 \"super()\" 调用成为构造函数中的第一个语句", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "使 keyof 仅返回字符串,而不是字符串、数字或符号。旧版选项。", + "Make_super_call_the_first_statement_in_the_constructor_90002": "在构造函数中,使 \"super()\" 调用第一个语句", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "映射的对象类型隐式地含有 \"any\" 模板类型。", + "Mark_array_literal_as_const_90070": "将数组文字标记为常量", + "Matched_0_condition_1_6403": "匹配的“{0}”条件“{1}”。", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "默认情况下匹配包括模式 “**/*”", + "Matched_by_include_pattern_0_in_1_1407": "通过在 \"{1}\" 中的包含模式 \"{0}\" 匹配", + "Member_0_implicitly_has_an_1_type_7008": "成员“{0}”隐式包含类型“{1}”。", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成员 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", + "Merge_conflict_marker_encountered_1185": "遇到合并冲突标记。", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "合并声明“{0}”不能包含默认导出声明。请考虑改为添加一个独立的“导出默认 {0}”声明。", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "元属性“{0}”只能在函数声明、函数表达式或构造函数的主体中使用。", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "方法“{0}”不能具有实现,因为它标记为抽象。", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "导出接口的方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "导出接口的方法“{0}”具有或正在使用专用名称“{1}”。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必须具有带有 --isolatedDeclarations 的显式返回类型注释。", + "Method_not_implemented_95158": "方法未实现。", + "Modifiers_cannot_appear_here_1184": "修饰符不能出现在此处。", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模块 \"{0}\" 只能在使用 \"{1}\" 标志时进行默认导入", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "无法使用此构造导入模块“{0}”。说明符仅解析为 ES 模块,后者不能使用“require”进行导入。请改用 ECMAScript 导入。", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模块 \"{0}\" 在本地声明 \"{1}\",但它被导出为 \"{2}\"。", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "模块 \"{0}\" 在本地声明 \"{1}\",但未导出它。", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "模块 \"{0}\" 不引用类型,但在此处用作类型。你是想使用 \"typeof import('{0}')\" 吗?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "模块“{0}”不引用值,但在此处用作值。", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "模块 {0} 已导出一个名为“{1}”的成员。请考虑重新显式导出以解决歧义。", + "Module_0_has_no_default_export_1192": "模块“{0}”没有默认导出。", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "模块 \"{0}\" 没有默认导出。你是想改为使用 \"import { {1} } from {0}\" 吗?", + "Module_0_has_no_exported_member_1_2305": "模块“{0}”没有导出的成员“{1}”。", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模块 \"{0}\" 没有导出的成员 \"{1}\"。你是想改用 \"import {1} from {0}\" 吗?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "模块“{0}”被具有相同名称的局部声明隐藏。", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模块“{0}”使用 \"export =\" 且无法与 \"export *\" 一起使用。", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模块“{0}”解析为文件“{1}”中本地声明的环境模块。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模块“{0}”已解析为“{1}”,但未设置“--allowArbitraryExtensions”。", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模块“{0}”已解析为“{1}”,但尚未设置 \"--jsx\"。", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模块 \"{0}\" 已解析为 \"{1}\",但未使用 \"--resolveJsonModule\"。", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模块声明名称只能使用 ' 或 \" 引用字符串。", + "Module_name_0_matched_pattern_1_6092": "模块名“{0}”,匹配的模式“{1}”。", + "Module_name_0_was_not_resolved_6090": "======== 未解析模块名“{0}”。========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模块名“{0}”已成功解析为“{1}”。========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模块名 \"{0}\" 已成功解析为 \"{1}\",包 ID 为 \"{2}\"。========", + "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模块解析类型,正在使用“{0}”。", + "Module_resolution_using_rootDirs_has_failed_6111": "使用 \"rootDirs\" 的模块解析失败。", + "Modules_6244": "模块", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "将已标记的元组元素修饰符移至标签", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "将默认导出中的表达式移动到变量,并向其添加类型注释。", + "Move_to_a_new_file_95049": "移动到新的文件", + "Move_to_file_95178": "移动到文件", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允许使用多个连续的数字分隔符。", + "Multiple_constructor_implementations_are_not_allowed_2392": "不允许存在多个构造函数实现。", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "换行符", + "Name_is_not_valid_95136": "名称无效", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "命名捕获组仅在面向“ES2018”或更高版本时可用。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "名称相同的命名捕获组必须彼此排斥。", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "延迟导入中不允许使用命名导入。", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "当 ‘module’ 设置为 ‘{0}’ 时,不允许从 JSON 文件到 ECMAScript 模块中的命名导入。", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "“{1}”和“{2}”类型的命名属性“{0}”不完全相同。", + "Namespace_0_has_no_exported_member_1_2694": "命名空间“{0}”没有已导出的成员“{1}”。", + "Namespace_must_be_given_a_name_1437": "必须为命名空间指定名称。", + "Namespace_name_cannot_be_0_2819": "命名空间名称不能为“{0}”。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "启用“{0}”时,全局脚本文件中不允许使用命名空间。如果此文件不是全局脚本,请将“moduleDetection”设置为“force”或添加空的“export {}”语句。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "修饰器和修饰符都不能应用于“this”参数。", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "没有任何基构造函数具有指定数量的类型参数。", + "No_constituent_of_type_0_is_callable_2755": "不可调用 \"{0}\" 类型的任何组成部分。", + "No_constituent_of_type_0_is_constructable_2759": "不可构造 \"{0}\" 类型的任何组成部分。", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在类型 \"{1}\" 上找不到具有类型为 \"{0}\" 的参数的索引签名。", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在配置文件“{0}”中找不到任何输入。指定的 \"include\" 路径为“{1}”,\"exclude\" 路径为“{2}”。", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再受支持。在早期版本中,手动设置用于读取文件的文本编码。", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "没有需要 {0} 参数的重载,但存在需要 {1} 或 {2} 参数的重载。", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "没有需要 {0} 类型参数的重载,但存在需要 {1} 或 {2} 类型参数的重载。", + "No_overload_matches_this_call_2769": "没有与此调用匹配的重载。", + "No_type_could_be_extracted_from_this_type_node_95134": "无法从该类型节点中提取任何类型", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速记属性 \"{0}\" 的范围内不存在任何值。请声明一个值或提供一个初始值设定项。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象类“{0}”不会实现继承自“{2}”类的抽象成员 {1}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "非抽象类“{0}”缺少“{1}”的以下成员的实现: {2} 和 {3} 等。", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象类表达式不会实现继承自“{1}”类的抽象成员“{0}”。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "非抽象类表达式缺少“{0}”的以下成员的实现: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "非抽象类表达式缺少“{0}”的以下成员的实现: {1} 和 {2} 等。", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 null 断言只能在 TypeScript 文件中使用。", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "此处声明了非简单参数。", + "Not_all_code_paths_return_a_value_7030": "并非所有代码路径都返回值。", + "Not_all_constituents_of_type_0_are_callable_2756": "\"{0}\" 类型的部分要素不可调用。", + "Not_all_constituents_of_type_0_are_constructable_2760": "\"{0}\" 类型的部分要素不可构造。", + "Numbers_out_of_order_in_quantifier_1506": "数字在限定符中顺序不对。", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "绝对值大于或等于 2^53 的数值文本过大,无法用整数准确表示。", + "Numeric_separators_are_not_allowed_here_6188": "此处不允许使用数字分隔符。", + "Object_is_of_type_unknown_2571": "对象的类型为 \"unknown\"。", + "Object_is_possibly_null_2531": "对象可能为 \"null\"。", + "Object_is_possibly_null_or_undefined_2533": "对象可能为 \"null\" 或“未定义”。", + "Object_is_possibly_undefined_2532": "对象可能为“未定义”。", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "对象字面量只能指定已知属性,并且“{0}”不在类型“{1}”中。", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "对象字面量只能指定已知的属性,但“{0}”中不存在类型“{1}”。是否要写入 {2}?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "对象字面量的属性“{0}”隐式含有“{1}”类型。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "无法使用 --isolatedDeclarations 推断包含速记属性的对象。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "无法使用 --isolatedDeclarations 推断包含传播赋值的对象。", + "Octal_digit_expected_1178": "需要八进制数字。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字符类中不允许使用八进制转义序列和反向引用。如果这是转义序列,请改用语法“{0}”。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允许使用八进制转义序列。请使用语法“{0}”。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允许使用八进制文字。请使用语法“{0}”。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "“{0}.{1}”的一个值是字符串“{2}”,另一个值被假定为未知数值。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "\"for...in\" 语句中只允许单个变量声明。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "\"for...of\" 语句中只允许单个变量声明。", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "使用 \"new\" 关键字只能调用 void 函数。", + "Only_ambient_modules_can_use_quoted_names_1035": "仅环境模块可使用带引号的名称。", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} 旁仅支持 \"amd\" 和 \"system\" 模块。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "只能使用 --isolatedDeclarations 推断常量数组。", + "Only_emit_d_ts_declaration_files_6014": "仅发出 \".d.ts\" 声明文件。 ", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "仅输出 d.ts 文件,而不输出 JavaScript 文件。", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "通过 \"super\" 关键字只能访问基类的公共方法和受保护方法。", + "Operator_0_cannot_be_applied_to_type_1_2736": "运算符 \"{0}\" 不能应用于类型 \"{1}\"。", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "运算符“{0}”不能应用于类型“{1}”和“{2}”。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "运算符不得混合在字符类中。改为将其包装在嵌套类中。", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在编辑时选择项目退出多项目引用检查。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "选项“{0}={1}”已删除。请从配置中删除它。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "选项“{0}={1}”已弃用,并将停止在 TypeScript {2} 中运行。指定 compilerOption“ignoreDeprecations”:“{3}”以使此错误静音。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定,或者在命令行上设置为 \"false\" 或 \"null\"。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定或在命令行上设置为 \"null\"。", + "Option_0_can_only_be_specified_on_command_line_6266": "选项“{0}”只能在命令行上指定。", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "仅当提供了选项 \"--inlineSourceMap\" 或选项 \"--sourceMap\" 时,才能使用选项“{0}”。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有在“moduleResolution”设置为“node16”、“nodenext”或“bundler”时,才能使用选项“{0}”。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "只有在 \"module\" 设置为 \"preserve\"、\"commonjs\"、\"es2015\" 或更高版本时,才能使用选项“{0}”。", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "选项 \"jsx\" 为“{1}”时,不能指定选项“{0}”。", + "Option_0_cannot_be_specified_with_option_1_5053": "选项“{0}”不能与选项“{1}”同时指定。", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "无法在不指定选项“{1}”的情况下指定选项“{0}”。", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "无法在不指定选项 {1} 或选项 {2} 的情况下指定选项 {0}。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "选项“{0}”已删除。请从配置中删除它。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "选项“{0}”已弃用,并将停止在 TypeScript {1} 中运行。指定 compilerOption“ignoreDeprecations”:“{2}”以使此错误静音。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "选项“{0}”是冗余选项,不能与选项“{1}”同时指定。", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "仅当设置了 'noEmit'、'emitDeclarationOnly' 或 'rewriteRelativeImportExtensions' 其中之一时,才能使用选项 'allowImportingTsExtensions'。", + "Option_build_must_be_the_first_command_line_argument_6369": "选项 '--build' 必须是第一个命令行参数。", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "选项 \"isolatedModules\" 只可在提供了选项 \"--module\" 或者选项 \"target\" 是 \"ES2015\" 或更高版本时使用。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "当选项“module”设置为“{1}”时,选项“moduleResolution”必须设置为“{0}”(或保留为未指定)。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "当选项“moduleResolution”设置为“{1}”时,选项“module”必须设置为“{0}”。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "启用“{0}”时,无法禁用选项“preserveConstEnums”。", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "选项 \"project\" 在命令行上不能与源文件混合使用。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "当“moduleResolution”设置为“classic”时,无法指定选项“--resolveJsonModule”。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "当“module”设置为“none”、“system”或“umd”时,无法指定选项“--resolveJsonModule”。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "当“module”设置为“UMD”、“AMD”或“System”时,不能使用选项“verbatimModuleSyntax”。", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "选项“{0}”与“{1}”不能组合在一起。", + "Options_Colon_6027": "选项:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "其他输出", + "Output_Formatting_6256": "输出格式设置", + "Output_compiler_performance_information_after_building_6615": "生成后输出编译器性能信息。", + "Output_directory_for_generated_declaration_files_6166": "已生成声明文件的输出目录。", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "未从源文件“{1}”生成输出文件“{0}”。", + "Output_from_referenced_project_0_included_because_1_specified_1411": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的输出", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的输出", + "Output_more_detailed_compiler_performance_information_after_building_6632": "生成后输出更详细的编译器性能信息。", + "Overload_0_of_1_2_gave_the_following_error_2772": "第 {0} 个重载(共 {1} 个),“{2}”,出现以下错误。", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "重载签名必须都是抽象的或都是非抽象的。", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "重载签名必须全部为环境签名或非环境签名。", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "重载签名必须均导出或均不导出。", + "Overload_signatures_must_all_be_optional_or_required_2386": "重载签名必须全部为可选签名或必需签名。", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "重载签名必须全部是公共签名、私有签名或受保护签名。", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "参数“{0}”不能引用在它之后声明的标识符“{1}”。", + "Parameter_0_cannot_reference_itself_2372": "参数“{0}”不能引用它自身。", + "Parameter_0_implicitly_has_an_1_type_7006": "参数“{0}”隐式具有“{1}”类型。", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "参数 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "参数“{0}”和参数“{1}”的位置不一样。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "访问器的参数 \"{0}\" 具有或正在使用外部模块 \"{2}\" 中的名称 \"{1}\" ,但不能为其命名。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "访问器的参数 \"{0}\" 具有或正在使用专用模块 \"{2}\" 中的名称 \"{1}\" 。", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "访问器的参数 \"{0}\" 具有或正在使用专用名称 \"{1}\"。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "导出接口中的调用签名的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "导出接口中的调用签名的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "导出类中的构造函数的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "导出类中的构造函数的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "导出类中的构造函数的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "导出接口中的构造函数签名的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "导出接口中的构造函数签名的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "导出函数的参数“{0}”具有或正在使用外部模块 {2} 中的名称“{1}”,但不能为其命名。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "导出函数的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "导出函数的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "来自导出接口的索引签名的参数“{0}”具有或正在使用来自私有模块“{2}”的名称“{1}”。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "来自导出接口的索引签名的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "导出接口中的方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "导出接口中的方法的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "导出类中的公共方法的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "导出类中的公共方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "导出类中的公共方法的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "导出类中的公共静态方法的参数“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "导出类中的公共静态方法的参数“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "导出类中的公共静态方法的参数“{0}”具有或正在使用专用名称“{1}”。", + "Parameter_cannot_have_question_mark_and_initializer_1015": "参数不能包含问号和初始化表达式。", + "Parameter_declaration_expected_1138": "应为参数声明。", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "参数具有名称,但不具有类型。你是想使用 \"{0}: {1}\" 吗?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "参数修饰符只能在 TypeScript 文件中使用。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "参数必须具有带有 --isolatedDeclarations 的显式类型注释。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "导出类中的公共 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "导出类中的公共 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "以严格模式进行分析,并为每个源文件发出 \"use strict\" 指令。", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.js 中 \"files\" 列表的一部分", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式“{0}”最多只可具有一个 \"*\" 字符。", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "\"--diagnostics\" 或 \"--extendedDiagnostics\" 的性能计时在此会话中不可用。未能找到 Web 性能 API 的本机实现。", + "Platform_specific_6912": "平台特定", + "Prefix_0_with_an_underscore_90025": "带下划线的前缀“{0}”", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "使用 \"declare\" 作为所有错误的属性声明的前缀", + "Prefix_all_unused_declarations_with_where_possible_95025": "尽可能在所有未使用的声明前添加前缀 \"_\"", + "Prefix_with_declare_95094": "使用 \"declare\" 前缀", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "保留 JavaScript 输出中未使用的导入值,否则将删除这些值。", + "Print_all_of_the_files_read_during_the_compilation_6653": "打印在编译过程中读取的所有文件。", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "打印在编译过程中读取的文件,包括包含它的原因。", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "打印文件的名称及编译包含这些文件的原因。", + "Print_names_of_files_part_of_the_compilation_6155": "属于编译一部分的文件的打印名称。", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "打印编译包含的文件的名称,然后停止处理。", + "Print_names_of_generated_files_part_of_the_compilation_6154": "属于编译一部分的已生成文件的打印名称。", + "Print_the_compiler_s_version_6019": "打印编译器的版本。", + "Print_the_final_configuration_instead_of_building_1350": "打印最终配置而不是生成。", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "编译后打印已发出文件的名称。", + "Print_this_message_6017": "打印此消息。", + "Private_accessor_was_defined_without_a_getter_2806": "定义了专用访问器,但没有 Getter。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "必须在封闭类中声明私有字段“{0}”。", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "不允许在变量声明中使用专用标识符。", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允许在类主体之外使用专用标识符。", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "专用标识符仅允许在类主体中使用,并且只能用作类成员声明的一部分、属性访问或用在 \"in\" 表达式的左侧", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "专用标识符仅在面向 ECMAScript 2015 和更高版本时可用。", + "Private_identifiers_cannot_be_used_as_parameters_18009": "不能将专用标识符用作参数。", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "不能在类型参数上访问专用或受保护的成员 \"{0}\"。", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "无法生成项目“{0}”,因为其依赖项“{1}”有错误", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "无法生成项目 \"{0}\" ,因为未生成其依赖项 \"{1}\"", + "Project_0_is_being_forcibly_rebuilt_6388": "正在强制重新生成项目“{0}”", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "由于 buildinfo 文件“{1}”指示文件“{2}”曾是编译的根文件,但不再是了,因此项目“{0}”已过期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "由于 buildinfo 文件“{1}”指示程序需要报告错误,因此项目“{0}”已过期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "项目“{0}”已过期,因为 buildinfo 文件“{1}”指示某些更改未发出", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "由于 buildinfo 文件“{1}”指示 compilerOptions 中存在更改,因此项目“{0}”已过期", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "项目“{0}”已过期,因为输出“{1}”早于输入“{2}”", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "项目“{0}”已过期,因为输出文件“{1}”不存在", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "项目 \"{0}\" 已过期,因为其输出是使用与当前版本 \"{2}\" 不同的版本 \"{1}\" 生成的", + "Project_0_is_up_to_date_6361": "“{0}”项目已是最新", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "项目“{0}”是最新的,因为最新的输入“{1}”早于输出“{2}”", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "项目“{0}”是最新的,但需要更新早于输入文件的输出文件的时间戳", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "项目“{0}”已是最新,拥有来自其依赖项的 .d.ts 文件", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "项目引用不能形成环形图。检测到循环: {0}", + "Projects_6255": "项目", + "Projects_in_this_build_Colon_0_6355": "此生成中的项目: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "只有在面向 ECMAScript 2015 及更高版本时,才可使用带有 \"accessor\" 修饰符的属性。", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "属性“{0}”不能具有初始化表达式,因为它标记为摘要。", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "属性“{0}”来自索引签名,因此必须使用[“{0}”]访问它。", + "Property_0_does_not_exist_on_type_1_2339": "类型“{1}”上不存在属性“{0}”。", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "属性“{0}”在类型“{1}”上不存在。你是否指的是“{2}”?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "属性“{0}”在类型“{1}”上不存在。你的意思是改为访问静态成员“{2}”吗?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "属性“{0}”在类型“{1}”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{2}”或更高版本。", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "属性“{0}”在类型 “{1}” 上不存在。请尝试将 “lib” 编译器选项更改为包含 “dom”。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "属性“{0}”没有初始化表达式,并且未在类静态块中明确分配。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "属性“{0}”没有初始化表达式,且未在构造函数中明确赋值。", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "属性“{0}”隐式具有类型 \"any\",因为其 get 访问器缺少返回类型批注。", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "属性“{0}”隐式具有类型 \"any\",因为其 set 访问器缺少参数类型批注。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "属性 \"{0}\" 隐式具有类型 \"any\",但可从用法为其 get 访问器推断出更好类型。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "属性 \"{0}\" 隐式具有类型 \"any\",但可从用法为其 set 访问器推断出更好的类型。", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "类型“{1}”中的属性“{0}”不可分配给基类型“{2}”中的同一属性。", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "类型“{1}”中的属性“{0}”不可分配给类型“{2}”。", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "类型 \"{1}\" 中的属性 \"{0}\" 引用了不能从类型 \"{2}\" 内访问的其他成员。", + "Property_0_is_declared_but_its_value_is_never_read_6138": "已声明属性“{0}”,但从未读取其值。", + "Property_0_is_incompatible_with_index_signature_2530": "属性“{0}”与索引签名不兼容。", + "Property_0_is_missing_in_type_1_2324": "类型“{1}”中缺少属性“{0}”。", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "类型 \"{1}\" 中缺少属性 \"{0}\",但类型 \"{2}\" 中需要该属性。", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "属性 \"{0}\" 在类 \"{1}\" 外部不可访问,因为它具有专用标识符。", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "属性“{0}”在类型“{1}”中为可选,但在类型“{2}”中为必选。", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "属性“{0}”为私有属性,只能在类“{1}”中访问。", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "属性“{0}”在类型“{1}”中是私有属性,但在类型“{2}”中不是。", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "属性“{0}”受保护,只能通过类“{1}”的实例进行访问。这是类“{2}”的实例。", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "属性“{0}”受保护,只能在类“{1}”及其子类中访问。", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "属性“{0}”受保护,但类型“{1}”并不是从“{2}”派生的类。", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "属性“{0}”在类型“{1}”中受保护,但在类型“{2}”中为公共属性。", + "Property_0_is_used_before_being_assigned_2565": "在赋值前使用了属性“{0}”。", + "Property_0_is_used_before_its_initialization_2729": "属性 \"{0}\" 在其初始化前已被使用。", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "类型“{1}”上不存在属性“{0}”。你是否是指“{2}”?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 展开特性的“{0}”属性不能分配给目标属性。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "导出匿名类类型的属性“{0}”可能不是私有或受保护的属性。", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "导出接口的属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "导出接口的属性“{0}”具有或正在使用专用名称“{1}”。", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "类型“{1}”的属性“{0}”不能赋给“{2}”索引类型“{3}”。", + "Property_0_was_also_declared_here_2733": "属性 \"{0}\" 也在此处声明。", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "属性 \"{0}\" 将覆盖 \"{1}\" 中的基属性。如果是有意的,请添加初始值设定项。否则,请添加 \"declare\" 修饰符或删除多余的声明。", + "Property_assignment_expected_1136": "应为属性分配。", + "Property_destructuring_pattern_expected_1180": "应为属性析构模式。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "属性必须具有带有 --isolatedDeclarations 的显式类型注释。", + "Property_or_signature_expected_1131": "应为属性或签名。", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "属性值只能是字符串、数字、\"true\"、\"false\"、\"null\"、对象或数组等类型的字面量。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "以“ES5”设为目标时,对“for-of”、传播和析构中的可迭代项提供完全支持。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "导出类的公共方法“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "导出类的公共方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "导出类的公共方法“{0}”具有或正在使用专用名称“{1}”。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "导出类的公共属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "导出类的公共属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "导出类的公共属性“{0}”具有或正在使用专用名称“{1}”。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "导出类的公共静态方法“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "导出类的公共静态方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "导出类的公共静态方法“{0}”具有或正在使用专用名称“{1}”。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "导出类的公共静态属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "导出类的公共静态属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”。", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "导出类的公共静态属性“{0}”具有或正在使用专用名称“{1}”。", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "不允许使用限定名 \"{0}\",因为没有前导 \"@param {object} {1}\"。", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "在未读取函数参数时引发错误。", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "对具有隐式 \"any\" 类型的表达式和声明引发错误。", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "在带隐式“any\" 类型的 \"this\" 表达式上引发错误。", + "Range_out_of_order_in_character_class_1517": "字符类中的范围顺序不对。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "启用“{0}”时重新导出类型需要使用“导出类型”。", + "React_components_cannot_include_JSX_namespace_names_2639": "React 组件不能包含 JSX 命名空间名称", + "Recommended_Options_6294": "建议的选项", + "Redirect_output_structure_to_the_directory_6006": "将输出结构重定向到目录。", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "减少 TypeScript 自动加载的项目数。", + "Referenced_project_0_may_not_disable_emit_6310": "引用的项目“{0}”可能不会禁用发出。", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "引用的项目“{0}”必须拥有设置 \"composite\": true。", + "Referenced_via_0_from_file_1_1400": "通过 \"{0}\" 从文件 \"{1}\" 引用", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "当 \"--moduleResolution\" 为 \"node16\" 或 \"nodenext\" 时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。请考虑将扩展名添加到导入路径中。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "当“--moduleResolution”为“node16” 或“nodenext”时,相对导入路径需要 ECMAScript 导入中的显式文件扩展名。你是想使用 \"{0}\" 吗?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "从监视进程中删除目录列表。", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "从监视模式的处理中删除文件列表。", + "Remove_all_unnecessary_override_modifiers_95163": "删除所有不必要的 \"override\" 修饰符", + "Remove_all_unnecessary_uses_of_await_95087": "删除 \"await\" 的所有不必要的使用", + "Remove_all_unreachable_code_95051": "删除所有无法访问的代码", + "Remove_all_unused_labels_95054": "删除所有未使用的标签", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "从所有带有相关问题的箭头函数主体中删除大括号", + "Remove_braces_from_arrow_function_95060": "从箭头函数中删除大括号", + "Remove_braces_from_arrow_function_body_95112": "从箭头函数主体中删除大括号", + "Remove_import_from_0_90005": "从“{0}”删除导入", + "Remove_override_modifier_95161": "删除 \"override\" 修饰符", + "Remove_parentheses_95126": "删除括号", + "Remove_template_tag_90011": "删除模板标记", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "删除 TypeScript 语言服务器中 JavaScript 文件总源代码大小 20mb 的上限。", + "Remove_type_from_import_declaration_from_0_90055": "从“{0}”中删除导入声明中的“type”", + "Remove_type_from_import_of_0_from_1_90056": "从“{1}”中删除“{0}”导入中的“type”", + "Remove_type_parameters_90012": "删除类型参数", + "Remove_unnecessary_await_95086": "删除不必要的 \"await\"", + "Remove_unreachable_code_95050": "删除无法访问的代码", + "Remove_unused_declaration_for_Colon_0_90004": "为 \"{0}\" 删除未使用的声明", + "Remove_unused_declarations_for_Colon_0_90041": "为“{0}”删除未使用的声明", + "Remove_unused_destructuring_declaration_90039": "删除未使用的解构声明", + "Remove_unused_label_95053": "删除未使用的标签", + "Remove_variable_statement_90010": "删除变量语句", + "Rename_param_tag_name_0_to_1_95173": "将 “@param” 标记名称“{0}”重命名为“{1}”", + "Replace_0_with_Promise_1_90036": "将 \"{0}\" 替换为 \"Promise<{1}>\"", + "Replace_all_unused_infer_with_unknown_90031": "将所有未使用的 \"infer\" 替换为 \"unknown\"", + "Replace_import_with_0_95015": "用“{0}”替换导入。", + "Replace_infer_0_with_unknown_90030": "将 \"infer {0}\" 替换为 \"unknown\"", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "在函数中的所有代码路径并非都返回值时报告错误。", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "报告 switch 语句中遇到 fallthrough 情况的错误。", + "Report_errors_in_js_files_8019": ".js 文件中的报表出错。", + "Report_errors_on_unused_locals_6134": "报告未使用的局部变量上的错误。", + "Report_errors_on_unused_parameters_6135": "报告未使用的参数上的错误。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "导出时需要足够的注释,以便其他工具可以轻松生成声明文件。", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要求索引签名中有未声明的属性以使用元素访问。", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "所需的类型参数可能不遵循可选类型参数。", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "在位置“{1}”的缓存中找到模块“{0}”的解析。", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "在位置“{1}”的缓存中找到类型引用指令“{0}”的解析。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相对名称失败;正在尝试禁用新式节点解析功能,以查看 npm 库是否需要配置更新。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相对名称失败;正在尝试“--moduleResolution 捆绑程序”,以查看项目是否可能需要配置更新。", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只将 \"keyof\" 解析为字符串值的属性名称(不含数字或符号)。", + "Resolved_under_condition_0_6414": "已在条件“{0}”下解析。", + "Resolving_in_0_mode_with_conditions_1_6402": "正在 {0} 模式下解析,条件为 {1}。", + "Resolving_module_0_from_1_6086": "======== 正在从“{1}”解析模块“{0}”。========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在相对于基 URL“{1}”-“{2}”解析模块名“{0}”。", + "Resolving_real_path_for_0_result_1_6130": "正在解析“{0}”的真实路径,结果为“{1}”。", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,根目录“{2}”。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,未设置根目录。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析类型引用指令“{0}”,未设置包含文件,根目录“{1}”。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析类型引用指令“{0}”,未设置包含文件,未设置根目录。========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自定义 typeRoots 的程序的类型引用指令,跳过在“node_modules”文件夹中查找。", + "Resolving_with_primary_search_path_0_6121": "正在使用主搜索路径“{0}”解析。", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Rest 参数“{0}”隐式具有 \"any[]\" 类型。", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Rest 参数 \"{0}\" 隐式具有 \"any[]\" 类型,但可从用法中推断出更好的类型。", + "Rest_types_may_only_be_created_from_object_types_2700": "rest 类型只能从对象类型创建。", + "Return_type_annotation_circularly_references_itself_2577": "返回类型注释循环引用自身。", + "Return_type_must_be_inferred_from_a_function_95149": "必须从函数中推断返回类型", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "导出接口中的调用签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "导出接口中的调用签名的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "导出接口中的构造函数签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "导出接口中的构造函数签名的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "构造函数签名的返回类型必须可赋给类的实例类型。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "导出函数的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "导出函数的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "导出函数的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "导出接口中的索引签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "导出接口中的索引签名的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "导出接口中的方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "导出接口中的方法的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "导出类中的公共 getter“{0}”的返回类型具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "导出类中的公共 getter“{0}”的返回类型具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "导出类中的公共 getter“{0}”的返回类型具有或正在使用专用名称“{1}”。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "导出类中的公共方法的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "导出类中的公共方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "导出类中的公共方法的返回类型具有或正在使用专用名称“{0}”。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用私有模块“{2}”中的名称“{1}”。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "导出类中的公共静态 getter“{0}”的返回类型具有或正在使用专用名称“{1}”。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "导出类中的公共静态方法的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "导出类中的公共静态方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "导出类中的公共静态方法的返回类型具有或正在使用专用名称“{0}”。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,但其未解析。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为“{3}”。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "正在重用旧程序“{1}”中模块“{0}”的解析,但其未解析。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为“{2}”。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,但其未解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{3}”。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,但其未解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{2}”。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。", + "Rewrite_all_as_indexed_access_types_95034": "全部重写为索引访问类型", + "Rewrite_as_the_indexed_access_type_0_90026": "重写为索引访问类型“{0}”", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "将相对导入路径中的 ‘.ts’、‘.tsx’、‘.mts’ 和 ‘.cts’ 文件扩展名改写为其在输出文件中的 JavaScript 等效项。", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "由于左操作数永远不会为空,因此 ?? 的右操作数无法访问。", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "无法确定根目录,正在跳过主搜索路径。", + "Root_file_specified_for_compilation_1427": "为编译指定的根文件", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "策略", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "保存 .tsbuildinfo 文件以允许项目增量编译。", + "Saw_non_matching_condition_0_6405": "看到了不匹配的条件“{0}”。", + "Scoped_package_detected_looking_in_0_6182": "检测到范围包,请在“{0}”中查看", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜索所有上级 node_modules 目录以查找回退扩展: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜索所有上级 node_modules 目录以查找首选扩展: {0}。", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "另请参阅 https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "所选内容不是有效的语句", + "Selection_is_not_a_valid_type_node_95133": "所选内容不是有效的类型节点", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "为发出的 JavaScript 设置 JavaScript 语言版本并包含兼容的库声明。", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "设置来自 TypeScript 的消息传递的语言。这不会影响发出。", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "将配置文件中的 \"module\" 选项设置为 \"{0}\"", + "Set_the_newline_character_for_emitting_files_6659": "设置发出文件的换行符。", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "将配置文件中的 \"target\" 选项设置为 \"{0}\"", + "Setters_cannot_return_a_value_2408": "Setter 不能返回值。", + "Show_all_compiler_options_6169": "显示所有编译器选项。", + "Show_diagnostic_information_6149": "显示诊断信息。", + "Show_verbose_diagnostic_information_6150": "显示详细的诊断信息。", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "显示将生成(如果指定有 '--clean',则删除)什么", + "Signature_0_must_be_a_type_predicate_1224": "签名“{0}”必须为类型谓词。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "签名声明只能在 TypeScript 文件中使用。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "跳过在上游项目出错时生成下游项目。", + "Skip_type_checking_all_d_ts_files_6693": "跳过对所有 .d.ts 文件的类型检查。", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "跳过 TypeScript 附带的类型检查 .d.ts 文件。", + "Skip_type_checking_of_declaration_files_6012": "跳过声明文件的类型检查。", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "正在跳过项目“{0}”的生成,因为其依赖项“{1}”有错误", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "即将跳过项目 \"{0}\" 的生成,因为未生成其依赖项 \"{1}\"", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳过看起来像绝对 URI、目标文件类型的模块“{0}”: {1}。", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的源", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的源", + "Source_has_0_element_s_but_target_allows_only_1_2619": "源具有 {0} 个元素,但目标仅允许 {1} 个。", + "Source_has_0_element_s_but_target_requires_1_2618": "源具有 {0} 个元素,但目标需要 {1} 个。", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "源不提供目标中位置 {0} 处所需元素的匹配项。", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "源不提供目标中位置 {0} 处可变元素的匹配项。", + "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目标版本。", + "Specify_JSX_code_generation_6080": "指定 JSX 代码生成。", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定将所有输出捆绑到一个 JavaScript 文件中的文件。如果 “declaration” 为 true,还要指定一个捆绑所有 .d.ts 输出的文件。", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定与要包含在编译中的文件匹配的 glob 模式列表。", + "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包括的语言服务插件列表。", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一组描述目标运行时环境的捆绑库声明文件。", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一组将导入重新映射到其他查找位置的条目。", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定为项目指定路径的对象数组。在项目引用中使用。", + "Specify_an_output_folder_for_all_emitted_files_6678": "为所有已发出的文件指定输出文件夹。", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定仅用于类型的导入的发出/检查行为。", + "Specify_file_to_store_incremental_compilation_information_6380": "指定用于存储增量编译信息的文件", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 如何从给定的模块说明符查找文件。", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少递归文件监视功能的系统上监视目录的方式。", + "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 监视模式的工作方式。", + "Specify_library_files_to_be_included_in_the_compilation_6079": "指定要在编译中包括的库文件。", + "Specify_module_code_generation_6016": "指定模块代码生成。", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 “jsx: react-jsx*” 时用于导入 JSX 中心函数的模块说明符。", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多个行为类似于 “./node_modules/@types” 的文件夹。", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定对从中继承设置的基本配置文件的一个或多个路径或节点模块引用。", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用于自动获取声明文件的选项。", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定在使用文件系统事件创建轮询监视失败时创建轮询监视的策略: \"FixedInterval\" (默认)、\"PriorityInterval\"、\"DynamicPriority\"、\"FixedChunkSize\"。", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在不支持本机递归监视的平台上监视目录的策略: \"UseFsEvents\" (默认)、\"FixedPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"。", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定监视文件的策略: \"FixedPollingInterval\" (默认)、\"PriorityPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"、\"UseFsEvents\"、\"UseFsEventsOnParentDirectory\"。", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定在将 React JSX 发出设定为目标时用于片段的 JSX 片段引用,例如 “React.Fragment” 或 “Fragment”。", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "指定在设定 \"react\" JSX 发出目标时要使用的 JSX 工厂函数,例如 \"react.createElement\" 或 \"h\"。", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "指定在将 React JSX 发出设定为目标时要使用的 JSX 中心函数,例如 “react.createElement” 或 “h”。", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "当指定使用 \"jsxFactory\" 编译器选项面向 \"react\" JSX 发出时,指定要使用的 JSX 片段工厂函数,例如 \"Fragment\"。", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基目录以解析非相关模块名称。", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定发出文件时要使用的行序列结尾: \"CRLF\" (dos)或 \"LF\" (unix)。", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定调试调试程序应将 TypeScript 文件放置到的位置而不是源位置。", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定调试程序应将映射文件放置到的位置而不是生成的位置。", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用于从 “node_modules” 检查 JavaScript 文件的最大文件夹深度。仅适用于 “allowJs”。", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定要用于从 eg,react 中导入 “jsx” 和 “jsxs” 工厂函数的模块说明符", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定为 “createElement” 调用的对象。这仅适用于将 “react” JSX 发出设定为目标的情况。", + "Specify_the_output_directory_for_generated_declaration_files_6613": "指定已生成声明文件的输出目录。", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "指定 .tsbuildinfo 增量编译文件的路径。", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定输入文件的根目录。与 --outDir 一起用于控制输出目录结构。", + "Specify_the_root_folder_within_your_source_files_6690": "指定源文件中的根文件夹。", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定调试程序的根路径以查找引用源代码。", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的类型包名称,而无需在源文件中引用。", + "Specify_what_JSX_code_is_generated_6646": "指定生成的 JSX 代码。", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定当系统耗尽本机文件观察程序时,观察程序应使用的方法。", + "Specify_what_module_code_is_generated_6657": "指定生成的模块代码。", + "Split_all_invalid_type_only_imports_1367": "拆分所有无效的仅类型导入", + "Split_into_two_separate_import_declarations_1366": "拆分为两个单独的导入声明", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "仅当面向 ECMAScript 5 和更高版本时,\"new\" 表达式中的展开运算符才可用。", + "Spread_types_may_only_be_created_from_object_types_2698": "spread 类型只能从对象类型创建。", + "Starting_compilation_in_watch_mode_6031": "在监视模式下开始编译...", + "Statement_expected_1129": "应为语句。", + "Statements_are_not_allowed_in_ambient_contexts_1036": "不允许在环境上下文中使用语句。", + "Static_members_cannot_reference_class_type_parameters_2302": "静态成员不能引用类类型参数。", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静态属性“{0}”与构造函数“{1}”的内置属性函数“{0}”冲突。", + "Stricter_Typechecking_Options_6292": "更严格的类型检查选项", + "String_literal_expected_1141": "应为字符串字面量。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "当“--module”标志设置为“es2015”或“es2020”时,不支持字符串文本导入和导出名称。", + "String_literal_with_double_quotes_expected_1327": "应为带双引号的字符串字面量。", + "Style_Options_6293": "样式选项", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用颜色和上下文风格化错误和消息(实验)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "当有减号时,子空间标志必须存在。", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "后续属性声明必须属于同一类型。属性“{0}”的类型必须为“{1}”,但此处却为类型“{2}”。", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "后续变量声明必须属于同一类型。变量“{0}”必须属于类型“{1}”,但此处却为类型“{2}”。", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式“{1}”的替换“{0}”类型不正确,应为 \"string\",实际为“{2}”。", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "模式 \"{1}\" 中的替代项 \"{0}\" 最多只能有一个 \"*\" 字符", + "Substitutions_for_pattern_0_should_be_an_array_5063": "模式“{0}”的替代应为数组。", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "模式“{0}”的替换模式不应为空数组。", + "Successfully_created_a_tsconfig_json_file_6071": "已成功创建 tsconfig.json 文件。", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "不允许在构造函数外部或在构造函数内的嵌套函数中进行 Super 调用。", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "取消对对象字面量的多余属性检查。", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "抑制缺少索引签名的索引对象的 noImplicitAny 错误。", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "在对缺少索引签名的对象编制索引时,抑制 “noImplicitAny” 错误。", + "Switch_each_misused_0_to_1_95138": "将每个误用的“{0}”切换到“{1}”", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支持本机递归监视的平台上同步调用回调并更新目录观察程序的状态。", + "Syntax_Colon_0_6023": "语法: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "标记“{0}”至少需要“{1}”个参数,但 JSX 工厂“{2}”最多可提供“{3}”个。", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "可选链中不允许使用带有标记的模板表达式。", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目标仅允许 {0} 个元素,但源中的元素可能更多。", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目标仅允许 {0} 个元素,但源中的元素可能不够。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目标签名提供的自变量太少。预期为 {0} 个或更多,但实际为 {1} 个。", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "\"{0}\" 修饰符只能在 TypeScript 文件中使用。", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "“{0}”运算符不能应用于类型 \"symbol\"。", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "“{0}”运算符不允许用于布尔类型。请考虑改用“{1}”。", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "异步迭代器的 \"{0}\" 属性必须是方法。", + "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 \"{0}\" 属性必须是方法。", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "\"Object\" 类型可分配给极少数其他类型。是否想要改用“任意”类型?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "不能同时设置 Unicode (u) 标志和 Unicode Sets (v) 标志。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "无法在 ES5 中的箭头函数中引用 \"arguments\" 对象。请考虑使用标准函数表达式。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "无法在 ES5 中的异步函数或方法中引用 \"arguments\" 对象。请考虑使用标准函数或方法。", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "\"if\" 语句的正文不能为空语句。", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "针对此实现的调用已成功,但重载的实现签名在外部不可见。", + "The_character_set_of_the_input_files_6163": "输入文件的字符集。", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含箭头函数捕获 \"this\" 的全局值。", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "包含函数或模块体对于控制流分析而言太大。", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "当前文件是 CommonJS 模块,因此不能在顶级使用 “await”。", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "当前文件是 CommonJS 模块,其导入将生成“require”调用;但是,引用的文件是 ECMAScript 模块,它不能使用“require”进行导入。请考虑改为编写动态“import(\"{0}\")”调用。", + "The_current_host_does_not_support_the_0_option_5001": "当前主机不支持“{0}”选项。", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "你可能打算使用的 \"{0}\" 的声明在此处定义", + "The_declaration_was_marked_as_deprecated_here_2798": "该声明曾在此处标记为已弃用。", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需类型来自属性 \"{0}\",在此处的 \"{1}\" 类型上声明该属性", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需类型来自此签名的返回类型。", + "The_expected_type_comes_from_this_index_signature_6501": "所需类型来自此索引签名。", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "导出分配的表达式必须是环境上下文中的标识符或限定的名称。", + "The_file_is_in_the_program_because_Colon_1430": "程序包含该文件是因为:", + "The_files_list_in_config_file_0_is_empty_18002": "配置文件“{0}”中的 \"files\" 列表为空。", + "The_first_export_default_is_here_2752": "在此处显示第一个导出默认值。", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "承诺的 \"then\" 方法的第一个参数必须是回调。", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "全局类型 \"JSX.{0}\" 不可具有多个属性。", + "The_implementation_signature_is_declared_here_2750": "在此处声明实现签名。", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "将生成到 CommonJS 输出的文件中不允许 'import.meta' 元属性。", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "仅当 '--module' 选项为 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 时,才允许使用 'import.meta' 元属性。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "如果没有引用 \"{1}\",则无法命名 \"{0}\" 的推断类型。这很可能不可移植。需要类型注释。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "推断类型“{0}”引用的类型具有无法简单序列化的循环结构。必须具有类型注释。", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "“{0}”的推断类型引用不可访问的“{1}”类型。需要类型批注。", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此节点的推断类型超出编译器将序列化的最大长度。需要显式类型注释。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "\"using\" 声明的初始值设定项必须是具有 \"[Symbol.dispose]()\" 方法的对象,或为 \"null\" 或 \"undefined\"。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "\"await using\" 声明的初始值设定项必须是具有 \"[Symbol.asyncDispose]()\" 或 \"[Symbol.dispose]()\" 方法的对象,或者是 \"null\" 或 \"undefined\"。", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "由于属性“{1}”存在于多个要素中,但在某些要素中是专用属性,因此已将交集“{0}”缩减为“绝不”。", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "由于属性“{1}”在某些要素中具有存在冲突的类型,因此已将交集“{0}”缩减为“绝不”。", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "\"intrinsic\" 关键字只能用于声明编译器提供的内部类型。", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "必须提供 \"jsxFragmentFactory\" 编译器选项才能将 JSX 片段与 \"jsxFactory\" 编译器选项一起使用。", + "The_last_overload_gave_the_following_error_2770": "最后一个重载给出了以下错误。", + "The_last_overload_is_declared_here_2771": "在此处声明最后一个重载。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "\"for...in\" 语句的左侧不能为析构模式。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "\"for...in\" 语句的左侧不能是 \"using\" 声明。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "\"for...in\" 语句的左侧不能是 \"await using\" 声明。", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "\"for...in\" 语句的左侧不能使用类型批注。", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "\"for…in\" 语句的左侧不能是可选属性访问。", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "\"for...in\" 语句的左侧必须是变量或属性访问。", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "\"for...in\" 语句的左侧必须是 \"string\" 或 \"any\" 类型。", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "\"for...of\" 语句的左侧不能使用类型批注。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "\"for…of\" 语句的左侧不能是可选属性访问。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "“for...of” 语句的左侧可能不是 “async”。", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "\"for...of\" 语句的左侧必须是变量或属性访问。", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算术运算左侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "赋值表达式的左侧不能是可选属性访问。", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "赋值表达式的左侧必须是变量或属性访问。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "\"instanceof\" 表达式的左侧必须可分配给右侧 \"[Symbol.hasInstance]\" 方法的第一个自变量。", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "\"instanceof\" 表达式左侧必须是 \"any\" 类型、对象类型或类型参数。", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "向用户显示消息时所用的区域设置(例如,\"en-us\")", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "用于搜索 node_modules 和加载 JavaScript 文件的最大依赖项深度。", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "\"delete\" 运算符的操作数不能是专用标识符。", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "\"delete\" 运算符的操作数不能是只读属性。", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "\"delete\" 运算符的操作数必须是属性引用。", + "The_operand_of_a_delete_operator_must_be_optional_2790": "\"delete\" 运算符的操作数必须是可选的。", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "增量或减量运算符的操作数不能是可选属性访问。", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "递增或递减运算符的操作数必须是变量或属性访问。", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "分析器预期在此处找到与“{0}”标记匹配的“{1}”。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "项目根不明确,但需要解析文件“{1}”中的导出映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "项目根不明确,但仍需要解析文件“{1}”中的导入映射项“{0}”。提供 `rootDir` 编译器选项以消除歧义。", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "无法在此类中的类型 \"{1}\" 上访问属性 \"{0}\",因为具有相同拼写的另一个专用标识符隐藏了它。", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "参数修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "属性修饰器函数的返回类型必须为 \"void\" 或 \"any\"。", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "异步函数的返回类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。 ", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "异步函数或方法的返回类型必须为全局 Promise 类型。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "异步函数或方法的返回类型必须为全局 Promise 类型。你是否是指写入 \"Promise<{0}>\"?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "\"for...in\" 语句右侧必须是 \"any\" 类型、对象类型或类型参数,但此处的类型为“{0}”。", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算术运算右侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "\"instanceof\" 表达式的右侧必须是类型 \"any\"、类、函数或其他可分配给 \"Function\" 接口类型的类型,或者是具有 \"Symbol.hasInstance\" 方法的对象类型。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "\"instanceof\" 表达式的右侧不能是实例化表达式。", + "The_root_value_of_a_0_file_must_be_an_object_5092": "“{0}”文件的根值必须是一个对象。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "运行时将使用 {1} 个自变量调用修饰器,但修饰器需要 {0} 个。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "运行时将使用 {1} 个自变量调用修饰器,但修饰器至少需要 {0} 个。", + "The_shadowing_declaration_of_0_is_defined_here_18017": "在此处定义了“{0}”的阴影声明", + "The_signature_0_of_1_is_deprecated_6387": "“{1}”的签名“{0}”已弃用。", + "The_specified_path_does_not_exist_Colon_0_5058": "指定的路径不存在:“{0}”。", + "The_tag_was_first_specified_here_8034": "第一次在此处指定了标记。", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "对象 rest 分配的目标不能是可选属性访问。", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "对象 rest 分配的目标必须是变量或属性访问。", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "类型为“{0}”的 \"this\" 上下文不能分配给类型为“{1}”的方法的 \"this\"。", + "The_this_types_of_each_signature_are_incompatible_2685": "每个签名的 \"this\" 类型不兼容。", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "类型 \"{0}\" 为 \"readonly\",不能分配给可变类型 \"{1}\"。", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "在将 “export type” 用在其导出语句上时,不能在已命名导出上使用 “type” 修饰符。", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "在将 “import type” 用在其导入语句上时,不能在已命名导入上使用 “type” 修饰符。。", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "无法序列化此节点的类型,因为无法序列化其属性“{0}”。", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "异步迭代器的 \"{0}()\" 方法返回的类型必须是具有 \"value\" 属性的类型的承诺。", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器的 \"{0}()\" 方法返回的类型必须具有 \"value\" 属性。", + "The_types_of_0_are_incompatible_between_these_types_2200": "在这些类型中,\"{0}\" 的类型不兼容。", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "在这些类型中,\"{0}\" 返回的类型不兼容。", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "此处不能使用值“{0}”。", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "\"for...in\" 语句的变量声明不能有初始化表达式。", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "\"for...of\" 语句的变量声明不能有初始化表达式。", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支持 \"with\" 语句。\"with\" 程序块中的所有符号都将具有类型 \"any\"。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "“{0}”处有类型,但无法在当前 \"moduleResolution\" 设置下解析此结果。请考虑更新到 \"node16\"、\"nodenext\" 或 \"bundler\"。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "“{0}”处有类型,但在遵守 package.json \"exports\" 时无法解析此结果。“{1}”库可能需要更新其 package.json 或键入。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此正则表达式中没有名为“{0}”的捕获组。", + "There_is_nothing_available_for_repetition_1507": "没有可重复的内容。", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "此 JSX 标记要求 ‘{0}’ 在范围内,但找不到它。", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "此 JSX 标记要求模块路径 ‘{0}’ 存在,但找不到任何路径。请确保已安装相应包的类型。", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 标记的 \"{0}\" 属性需要 \"{1}\" 类型的子级,但提供了多个子级。", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 标记的 \"{0}\" 属性需要类型 \"{1}\",该类型需要多个子级,但仅提供了一个子级。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此向后引用指的是一个不存在的组。此正则表达式中没有捕获组。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此向后引用指的是一个不存在的组。此正则表达式中只有 {0} 个捕获组。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二进制表达式永远不会为 null。是否缺少括号?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "不能在正则表达式中转义此字符。", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比较似乎是无意的,因为类型“{0}”和“{1}”没有重叠。", + "This_condition_will_always_return_0_2845": "此条件将始终返回“{0}”。", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此条件将始终返回“{0}”,因为 JavaScript 按引用而不是值比较对象。", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "此条件将始终返回 true,因为此“{0}”已始终定义。", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "此条件将始终返回 true,因为始终定义了函数。你是想改为调用它吗?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此构造函数可能会转换为类声明。", + "This_expression_is_always_nullish_2871": "此表达式始终为 null。", + "This_expression_is_never_nullish_2881": "此表达式从不为 null。", + "This_expression_is_not_callable_2349": "此表达式不可调用。", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "此表达式是 \"get\" 访问器,因此不可调用。你想在不使用 \"()\" 的情况下使用它吗?", + "This_expression_is_not_constructable_2351": "此表达式不可构造。", + "This_file_already_has_a_default_export_95130": "此文件已具有默认导出", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "重写此导入路径并不安全,因为它会解析为另一个项目,并且项目的输出文件之间的相对路径与其输入文件之间的相对路径不同。", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "此导入使用 ‘{0}’ 扩展解析为输入 TypeScript 文件,但不会在发出期间重写,因为它不是相对路径。", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "这是正在扩充的声明。请考虑将扩充声明移到同一个文件中。", + "This_kind_of_expression_is_always_falsy_2873": "这种表达式的结果始终为 false。", + "This_kind_of_expression_is_always_truthy_2872": "这种表达式的结果始终为 true。", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "可将此转换为异步函数。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成员不能具有带 “@override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成员不能具有带 “override” 标记的 JSDoc 注释,因为未在基类“{0}”中对其进行声明。你是否指的是“{1}”?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "此成员不能具有带 “@override” 标记的 JSDoc 注释,因为所包含的类“{0}”不会扩展其他类。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "此成员不能拥有带有 ‘@overrid’ 标记的 JSDoc 注释,因为其名称是动态的。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "此成员不能有 \"override\" 修饰符,因为它未在基类 \"{0}\" 中声明。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成员不能有 “override” 修饰符,因为它未在基类“{0}”中声明。你是否指的是“{1}”?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "此成员不能有 \"override\" 修饰符,因为它的包含类 \"{0}\" 不扩展其他类。", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "此成员不能具有 “override” 修饰符,因为其名称是动态的。", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "此成员必须具有带 “@override” 标记的 JSDoc 注释,因为它会替代基类“{0}”中的成员。", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中的一个成员。", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中声明的一个抽象方法。", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能通过启用 \"{0}\" 标志并引用其默认导出,使用 ECMAScript 导入/导出来引用此模块。", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模块是使用 “export =” 声明的,只能在使用“{0}”标志时用于默认导入。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "可以简化此操作。此班次与 `{0} {1} {2}` 相同。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "此重载隐式返回类型“{0}”,因为它缺少返回类型批注。", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此重载签名与其实现签名不兼容。", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "此参数不允许与 \"use strict\" 指令一起使用。", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此参数属性必须具有带 “@override” 标记的 JSDoc 注释,因为它将替代基类“{0}”中的成员。", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "此参数属性必须具有 “override” 修饰符,因为它会替代基类“{0}”中的成员。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "此正则表达式标志不能在子模式内切换。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "此正则表达式标志仅在面向“{0}”或更高版本时可用。", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "重写此相对导入路径并不安全,因为它看起来像文件名,但实际上解析为 ‘{0}’。", + "This_spread_always_overwrites_this_property_2785": "此扩张将始终覆盖此属性。", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "启用 “erasableSyntaxOnly” 时,不允许使用此语法。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请添加尾随逗号或显式约束。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此语法保留在扩展名为 .mts 或 .cts 的文件中。请改用 `as` 表达式。", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此语法需要一个导入的帮助程序,但找不到模块“{0}”。", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此语法需要名为 \"{1}\" 的导入帮助器,\"{0}\" 中不存在该帮助器。请考虑升级 \"{0}\" 的版本。", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此语法需要一个名为 \"{1}\" 且包含 {2} 参数的导入帮助程序,该帮助程序与 \"{0}\" 中的相应帮助程序不兼容。请考虑升级 \"{0}\" 的版本。", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "此类型参数可能需要 `extends {0}` 约束。", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "“import” 的这种用法无效。可以写入 “import()” 调用,但它们必须具有括号,并且不能带有类型参数。", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "若要将此文件转换为 ECMAScript 模块,请将字段“\"type\": \"module\"”添加到“{0}”。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或将字段“\"type\": \"module\"”添加到“{1}”。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要将此文件转换为 ECMAScript 模块,请将其文件扩展名更改为“{0}”,或者使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要将此文件转换为 ECMAScript 模块,请使用“{ \"type\": \"module\" }”创建本地 package.json 文件。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’,且 ‘target’ 选项设置为 ‘es2017’ 或更高版本时,才允许使用顶级 ‘await’ 表达式。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’ 且 ‘target’ 选项设置为 ‘es2017’ 或更高时,才允许使用顶级 ‘await using’ 语句。", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 文件中的顶级声明必须以 \"declare\" 或 \"export\" 修饰符开头。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "仅当 ‘module’ 选项设置为 ‘es2022’、‘esnext’、‘system’、‘node16’、‘node18’、‘node20’、‘nodenext’ 或 ‘preserve’,且 ‘target’ 选项设置为 ‘es2017’ 或更高版本时,才允许使用顶级 ‘for await’ 循环。", + "Trailing_comma_not_allowed_1009": "不允许使用尾随逗号。", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "将每个文件转换为单独的模块(类似 \"ts.transpileModule\")。", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "尝试使用 `npm i --save-dev @types/{1}` (如果存在),或者添加一个包含 `declare module '{0}';` 的新声明(.d.ts)文件", + "Trying_other_entries_in_rootDirs_6110": "正在尝试 \"rootDirs\" 中的其他条目。", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在尝试替换“{0}”,候选模块位置:“{1}”。", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "长度为 \"{1}\" 的元组类型 \"{0}\" 在索引 \"{2}\" 处没有元素。", + "Tuple_type_arguments_circularly_reference_themselves_4110": "元组类型参数循环引用自身。", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有在使用 \"--downlevelIteration\" 标志或 \"--target\" 为 \"es2015\" 或更高版本时,才能循环访问类型“{0}”。", + "Type_0_cannot_be_used_as_an_index_type_2538": "类型“{0}”不能作为索引类型使用。", + "Type_0_cannot_be_used_to_index_type_1_2536": "类型“{0}”无法用于索引类型“{1}”。", + "Type_0_does_not_satisfy_the_constraint_1_2344": "类型“{0}”不满足约束“{1}”。", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "类型“{0}”不满足预期类型“{1}”。", + "Type_0_has_no_call_signatures_2757": "类型 \"{0}\" 没有调用签名。", + "Type_0_has_no_construct_signatures_2761": "类型 \"{0}\" 没有构造签名。", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "类型“{0}”没有匹配的类型“{1}”的索引签名。", + "Type_0_has_no_properties_in_common_with_type_1_2559": "类型“{0}”与类型“{1}”不具有相同的属性。", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "类型“{0}”没有类型参数列表适用的签名。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "类型“{0}”是泛型的,只能编制索引以供读取。", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "类型“{0}”缺少类型“{1}”中的以下属性: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "类型“{0}”缺少类型“{1}”的以下属性: {2} 及其他 {3} 项。", + "Type_0_is_not_a_constructor_function_type_2507": "类型“{0}”不是构造函数类型。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "类型“{0}”不是 ES5 中有效的异步函数返回类型,因为它不引用与 Promise 兼容的构造函数值。", + "Type_0_is_not_an_array_type_2461": "类型“{0}”不是数组类型。", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "类型“{0}”不是数组类型或字符串类型。", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "类型“{0}”不是数组类型或字符串类型,或者没有返回迭代器的 \"[Symbol.iterator]()\" 方法。", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "类型“{0}”不是数组类型,或者没有返回迭代器的 \"[Symbol.iterator]()\" 方法。", + "Type_0_is_not_assignable_to_type_1_2322": "不能将类型“{0}”分配给类型“{1}”。", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "类型“{0}”不可分配给类型“{1}”。你的意思是“{2}”?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "类型“{0}”无法分配给类型“{1}”。存在具有此名称的两种不同类型,但它们是不相关的。", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "类型“{0}”不能分配给类型“{1}”,如方差批注所示。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "根据计算枚举成员值的要求,类型“{0}”不能分配给类型“{1}”。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标属性的类型。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "类型 “{0}” 不能分配给“exactOptionalPropertyTypes: true”的类型 “{1}”。请考虑将 “undefined” 添加到目标类型。。", + "Type_0_is_not_comparable_to_type_1_2678": "类型“{0}”不可与类型“{1}”进行比较。", + "Type_0_is_not_generic_2315": "类型“{0}”不是泛型类型。", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "类型 \"{0}\" 可以表示基元值,该值不允许作为“in”运算符的右操作数。", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "类型“{0}”必须具有返回异步迭代器的 \"[Symbol.asyncIterator]()\" 方法。", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "类型“{0}”必须具有返回迭代器的 \"[Symbol.iterator]()\" 方法。", + "Type_0_provides_no_match_for_the_signature_1_2658": "类型“{0}”提供的内容与签名“{1}”不匹配。", + "Type_0_recursively_references_itself_as_a_base_type_2310": "类型“{0}”以递归方式将自身引用为基类。", + "Type_Checking_6248": "类型检查", + "Type_alias_0_circularly_references_itself_2456": "类型别名“{0}”循环引用自身。", + "Type_alias_must_be_given_a_name_1439": "必须为类型别名指定名称。", + "Type_alias_name_cannot_be_0_2457": "类型别名不能为“{0}”。", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "类型别名只能在 TypeScript 文件中使用。", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "类型批注不能出现在构造函数声明中。", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "类型注释只能在 TypeScript 文件中使用。", + "Type_argument_expected_1140": "应为类型参数。", + "Type_argument_list_cannot_be_empty_1099": "类型参数列表不能为空。", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "类型参数只能在 TypeScript 文件中使用。", + "Type_arguments_for_0_circularly_reference_themselves_4109": "\"{0}\" 的类型参数循环引用自身。", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "类型断言表达式只能在 TypeScript 文件中使用。", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "源中位置 {0} 的类型与目标中位置 {1} 的类型不兼容。", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "源中位置 {0} 到 {1} 的类型与目标中位置 {2} 的类型不兼容。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "包含专用名称“{0}”的类型不能与 --isolatedDeclarations 一起使用。", + "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在编译中类型声明文件。", + "Type_expected_1110": "应为类型。", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "类型导入断言应恰好有一个键 - \"resolution-mode\" - 值为 \"import\" 或 \"require\"。", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "从 CommonJS 模块导入 ECMAScript 模块的类型导入必须具有 \"resolution-mode\" 属性。", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "类型实例化过深,且可能无限。", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "类型在其自身的 \"then\" 方法的 fulfillment 回调中被直接或间接引用。", + "Type_library_referenced_via_0_from_file_1_1402": "通过 \"{0}\" 从文件 \"{1}\" 引用了库类型", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "通过 \"{0}\" 从具有 packageId \"{2}\" 的文件 \"{1}\" 引用了库类型", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "\"await\" 操作数的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "计算属性类型的值为 \"{0}\",该值不能赋给 \"{1}\" 类型。", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "实例成员变量“{0}”的类型不能引用构造函数中声明的标识符“{1}”。", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "\"yield*\" 操作数的迭代元素的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "属性“{0}”的类型在已映射的类型“{1}”中循环引用其自身。", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "异步生成器中 \"yield\" 操作数的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "从 CommonJS 模块导入 ECMAScript 模块的仅类型导入必须具有 \"resolution-mode\" 属性。", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "此导入产生的类型。无法调用或构造命名空间样式的导入,这类导入将在运行时导致失败。请考虑改为使用默认导入或此处需要的导入。", + "Type_parameter_0_has_a_circular_constraint_2313": "类型参数“{0}”具有循环约束。", + "Type_parameter_0_has_a_circular_default_2716": "类型参数“{0}”具有循环默认值。", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "导出接口中的调用签名的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "导出接口中的构造函数签名的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "导出类的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "导出函数的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "导出接口的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "已导出映射对象类型的类型参数 \"{0}\" 使用专用名称 \"{1}\" 。", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "已导出类型别名的类型参数“{0}”具有或正使用专用名称“{1}”。", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "导出接口中的方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "导出类中的公共方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "导出类中的公共静态方法的类型参数“{0}”具有或正在使用专用名称“{1}”。", + "Type_parameter_declaration_expected_1139": "应为类型参数声明。", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "类型参数声明只能在 TypeScript 文件中使用。", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "类型参数默认值只能引用以前声明的类型参数。", + "Type_parameter_list_cannot_be_empty_1098": "类型参数列表不能为空。", + "Type_parameter_name_cannot_be_0_2368": "类型参数名称不能为“{0}”。", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "类型参数不能出现在构造函数声明中。", + "Type_predicate_0_is_not_assignable_to_1_1226": "类型谓词“{0}”不可分配给“{1}”。", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "类型生成的元组类型太大,无法表示。", + "Type_reference_directive_0_was_not_resolved_6120": "======== 未解析类型引用指令“{0}”。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 类型引用指令“{0}”已成功解析为“{1}”,主要: {2}。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 类型引用指令 \"{0}\" 已成功解析为 \"{1}\" ,包 ID 为 \"{2}\",主要: {3}。========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "类型满意度表达式只能在 TypeScript 文件中使用。", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "类型不能出现在 JavaScript 文件的导出声明中。", + "Types_have_separate_declarations_of_a_private_property_0_2442": "类型具有私有属性“{0}”的单独声明。", + "Types_of_construct_signatures_are_incompatible_2419": "构造签名的类型不兼容。", + "Types_of_parameters_0_and_1_are_incompatible_2328": "参数“{0}”和“{1}” 的类型不兼容。", + "Types_of_property_0_are_incompatible_2326": "属性“{0}”的类型不兼容。", + "Unable_to_open_file_0_6050": "无法打开文件“{0}”。", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "作为表达式调用时,无法解析类修饰器的签名。", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "作为表达式调用时,无法解析方法修饰器的签名。", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "作为表达式调用时,无法解析参数修饰器的签名。", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "作为表达式调用时,无法解析属性修饰器的签名。", + "Undetermined_character_escape_1513": "不确定的字符转义。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "意外的“{0}”。你是否想要使用反斜杠对其进行转义?", + "Unexpected_end_of_text_1126": "文本意外结束。", + "Unexpected_keyword_or_identifier_1434": "意外的关键字或标识符。", + "Unexpected_token_1012": "意外的标记。", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "意外的标记。应为构造函数、方法、访问器或属性。", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "意外的标记。类型参数名不应包含大括号。", + "Unexpected_token_Did_you_mean_or_gt_1382": "意外的标记。你是想使用 `{'>'}` 还是 `>`?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "意外的标记。你是想使用 `{'}'}` 还是 `}`?", + "Unexpected_token_expected_1179": "意外标记。应为 \"{\"。", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode 转义序列不能显示在此处。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 转义序列才可用。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "仅当设置了 Unicode (u) 标志或 Unicode Sets (v) 标志时,Unicode 属性值表达式才可用。", + "Unknown_Unicode_property_name_1524": "未知的 Unicode 属性名称。", + "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 属性名称或值。", + "Unknown_Unicode_property_value_1526": "未知的 Unicode 属性值。", + "Unknown_build_option_0_5072": "未知的生成选项 \"{0}\"。", + "Unknown_build_option_0_Did_you_mean_1_5077": "未知的生成选项 \"{0}\"。你是想使用 \"{1}\" 吗?", + "Unknown_compiler_option_0_5023": "未知的编译器选项“{0}”。", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的编译器选项 \"{0}\"。你是想使用 \"{1}\" 吗?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的关键字或标识符。你是不是指“{0}”?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "未知的 \"excludes\" 选项。你的意思是 \"exclude\"?", + "Unknown_regular_expression_flag_1499": "未知的正则表达式标志。", + "Unknown_type_acquisition_option_0_17010": "未知类型获取选项“{0}”。", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的类型获取选项 \"{0}\"。你是想使用 \"{1}\" 吗?", + "Unknown_watch_option_0_5078": "未知观察选项 \"{0}\"。", + "Unknown_watch_option_0_Did_you_mean_1_5079": "未知的监视选项 \"{0}\"。你是想使用 \"{1}\" 吗?", + "Unreachable_code_detected_7027": "检测到无法访问的代码。", + "Unterminated_Unicode_escape_sequence_1199": "未终止的 Unicode 转义序列。", + "Unterminated_quoted_string_in_response_file_0_6045": "响应文件“{0}”中引号不配对。", + "Unterminated_regular_expression_literal_1161": "未终止的正则表达式字面量。", + "Unterminated_string_literal_1002": "未终止的字符串字面量。", + "Unterminated_template_literal_1160": "未终止的模板字面量。", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "非类型化函数调用不能接受类型参数。", + "Unused_label_7028": "未使用的标签。", + "Unused_ts_expect_error_directive_2578": "未使用的 \"@ts-expect-error\" 指令。", + "Update_import_from_0_90058": "从“{0}”更新导入", + "Update_modifiers_of_0_90061": "更新“{0}”的修饰符", + "Updating_output_timestamps_of_project_0_6359": "正在更新项目“{0}”的输出时间戳...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新项目 \"{0}\" 未更改的输出时间戳…", + "Use_0_95174": "使用 `{0}`", + "Use_0_instead_5106": "请改用“{0}”。", + "Use_Number_isNaN_in_all_conditions_95175": "在所有条件下使用 `Number.isNaN`。", + "Use_element_access_for_0_95145": "对“{0}”使用元素访问", + "Use_element_access_for_all_undeclared_properties_95146": "对所有未声明的属性使用元素访问。", + "Use_import_type_95180": "使用 \"import type\"", + "Use_synthetic_default_member_95016": "使用综合的“默认”成员。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析包导入时,请使用 package.json \"exports\" 字段。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析导入时,请使用 package.json \"import\" 字段。", + "Use_type_0_95181": "使用 \"type {0}\"", + "Using_0_subpath_1_with_target_2_6404": "将“{0}”子路径“{1}”与目标“{2}”一起使用", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "使用 JSX 片段需要片段工厂 ‘{0}’ 在范围内,但找不到它。", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "仅 ECMAScript 5 和更高版本支持在 \"for...of\" 语句中使用字符串。", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build,-b 将使 tsc 的行为更像生成业务流程协调程序,而非编译器。这可用于触发生成复合项目,你可以在 {0} 详细了解这些项目", + "Using_compiler_options_of_project_reference_redirect_0_6215": "使用项目引用重定向“{0}”的编译器选项。", + "VERSION_6036": "版本", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "类型“{0}”的值没有与类型“{1}”相同的属性。你是想调用它吗?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "类型“{0}”的值不可调用。是否希望包括 \"new\"?", + "Variable_0_implicitly_has_an_1_type_7005": "变量“{0}”隐式具有“{1}”类型。", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "变量 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "变量 \"{0}\" 在某些位置隐式具有类型 \"{1}\",但可以从使用情况推断出更好的类型。", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "变量“{0}”在某些无法确定其类型的位置处隐式具有类型“{1}”。", + "Variable_0_is_used_before_being_assigned_2454": "在赋值前使用了变量“{0}”。", + "Variable_declaration_expected_1134": "应为变量声明。", + "Variable_declaration_list_cannot_be_empty_1123": "变量声明列表不能为空。", + "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允许使用变量声明。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "变量必须具有带有 --isolatedDeclarations 的显式类型注释。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "具有多个声明的变量不能内联。", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "源中位置 {0} 的可变元素与目标中位置 {1} 的元素不匹配。", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "仅对象、函数、构造函数、映射类型的类型别名支持方差注释。", + "Version_0_6029": "版本 {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "请访问 https://aka.ms/ts6 以获取迁移信息。", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "请访问 https://aka.ms/tsconfig,了解有关此文件的详细信息", + "WATCH_OPTIONS_6918": "监视选项", + "Watch_and_Build_Modes_6250": "观看和生成模式", + "Watch_input_files_6005": "监视输入文件。", + "Watch_option_0_requires_a_value_of_type_1_5080": "观察选项 \"{0}\" 需要 {1} 类型的值。", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "我们只能通过在此处为整个参数添加类型来写入“{0}”的类型。", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "分配函数时,请检查以确保参数和返回值与子类型兼容。", + "When_type_checking_take_into_account_null_and_undefined_6699": "进行类型检查时,请考虑 “null” 和 “undefined”。", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否在监视模式下保留过时的控制台输出,而不是清除屏幕。", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "包装表达式容器中的所有无效字符", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "将所有无效的修饰器表达式括在括号中", + "Wrap_all_object_literal_with_parentheses_95116": "用括号括起所有对象字面量", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "将所有没有父级的 JSX 包装在 JSX 片段中", + "Wrap_in_JSX_fragment_95120": "包装在 JSX 片段中", + "Wrap_in_parentheses_95194": "用括号括起来", + "Wrap_invalid_character_in_an_expression_container_95108": "包装表达式容器中的无效字符", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "用括号括起以下应为对象字面量的内容", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "你可以在 {0} 了解编译器选项的所有内容", + "You_cannot_rename_a_module_via_a_global_import_8031": "不能通过全局导入对模块进行重命名。", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "不能重命名已在 “node_modules” 文件夹中定义的元素。", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "不能重命名已在另一个 “node_modules” 文件夹中定义的元素。", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "不能重命名标准 TypeScript 库中定义的元素。", + "You_cannot_rename_this_element_8000": "无法重命名此元素。", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "“{0}”收到的参数过少,无法在此处充当修饰器。你是要先调用它,然后再写入 \"@{0}()\" 吗?", + "_0_and_1_index_signatures_are_incompatible_2330": "“{0}”和“{1}”索引签名不兼容。", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "不能在不使用括号的情况下混用 \"{0}\" 和 \"{1}\" 操作。", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "“{0}”被指定了两次。将覆盖名为“{0}”的特性。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "类型末尾的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "类型开头的“{0}”不是有效的 TypeScript 语法。是否要写入“{1}”?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", + "_0_can_only_be_imported_by_using_a_default_import_2595": "仅可使用默认导入来导入“{0}”。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能通过使用 \"require\" 调用或启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 \"require\" 调用或使用默认导入来导入“{0}”。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "仅可使用 \"import {1} = require({2})\" 或默认导入来导入“{0}”。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "仅可使用 \"import {1} = require({2})\" 或通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。", + "_0_cannot_be_used_as_a_JSX_component_2786": "“{0}”不能用作 JSX 组件。", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "\"{0}\" 是使用 \"export type\" 导出的,因此不能用作值。", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "\"{0}\" 是使用 \"import type\" 导入的,因此不能用作值。", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "\"{0}\" 组件不接受文本作为子元素。JSX 中的文本类型为 \"string\",但 \"{1}\" 的预期类型为 \"{2}\"。", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "“{0}”可以使用与“{1}”无关的任意类型进行实例化。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "“{0}”声明只能在块的内部声明。", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "\"{0}\" 声明只能在 TypeScript 文件中使用。", + "_0_declarations_may_not_have_binding_patterns_1492": "“{0}”声明可能没有绑定模式。", + "_0_declarations_must_be_initialized_1155": "必须初始化“{0}”声明。", + "_0_expected_1005": "应为“{0}”。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "“{0}”具有字符串类型,但在启用 \"isolatedModules\" 时必须具有语法上可识别的字符串语法。", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "“{0}”没有导出的成员“{1}”。你是否指的是“{2}”?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" 隐式具有 \"{1}\" 返回类型,但可以从用法中推断出更好的类型。", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "由于“{0}'”不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "“{0}”隐式具有类型 \"any\",因为它不具有类型批注,且在其自身的初始化表达式中得到直接或间接引用。", + "_0_index_signatures_are_incompatible_2634": "“{0}”索引签名不兼容。", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "“{0}”索引类型“{1}”不能分配给“{2}”索引类型“{3}”。", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "“{0}”是基元,但“{1}”是包装器对象。如可能首选使用“{0}”。", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "“{0}”是一种类型,无法在 JavaScript 文件中导入。请在 JSDoc 类型批注中使用“{1}”。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "“{0}”是一种类型,必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "“{0}”是“{1}”的未使用重命名。是否打算将其用作类型批注?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" 可赋给 \"{1}\" 类型的约束,但可以使用约束 \"{2}\" 的其他子类型实例化 \"{1}\"。", + "_0_is_automatically_exported_here_18044": "“{0}”自动导出到此处。", + "_0_is_declared_but_its_value_is_never_read_6133": "已声明“{0}”,但从未读取其值。", + "_0_is_declared_but_never_used_6196": "“{0}”已声明,但从未使用过。", + "_0_is_declared_here_2728": "在此处声明了 \"{0}\"。", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" 在类 \"{1}\" 中定义为属性,但这里在 \"{2}\" 中重写为访问器。", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" 在类 \"{1}\" 中定义为访问器,但这里在 \"{2}\" 中重写为实例属性。", + "_0_is_deprecated_6385": "“{0}”已弃用。", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "“{0}”不是关键字“{1}”的有效元属性。是否是指“{2}”?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "不允许将 '{0}' 作为参数名。", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "“{0}”不得用作变量声明名称。", + "_0_is_of_type_unknown_18046": "“{0}”的类型为“未知”。", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "“{0}”可能为 “null”。", + "_0_is_possibly_null_or_undefined_18049": "{0}可能为 “null” 或“未定义”。", + "_0_is_possibly_undefined_18048": "“{0}”可能为“未定义”。", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "“{0}”在其自身的基表达式中得到直接或间接引用。", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "“{0}”在其自身的类型批注中得到直接或间接引用。", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "多次指定了 \"{0}\",因此将重写此用法。", + "_0_list_cannot_be_empty_1097": "“{0}”列表不能为空。", + "_0_modifier_already_seen_1030": "已看到“{0}”修饰符。", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "“{0}”修饰符只能出现在类、接口或类型别名的类型参数上", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "“{0}”修饰符只能出现在函数、方法或类的类型参数上", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "“{0}”修饰符不能出现在构造函数声明中。", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "“{0}”修饰符不可出现在模块或命名空间元素上。", + "_0_modifier_cannot_appear_on_a_parameter_1090": "“{0}”修饰符不能出现在参数中。", + "_0_modifier_cannot_appear_on_a_type_member_1070": "“{0}”修饰符不可出现在类型成员上。", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "“{0}”修饰符不能出现在类型参数上", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "“{0}”修饰符不能出现在 \"using\" 声明中。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "“{0}”修饰符不能出现在 \"await using\" 声明中。", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "“{0}”修饰符不可出现在索引签名上。", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "“{0}”修饰符不能出现在此类型的类元素上。", + "_0_modifier_cannot_be_used_here_1042": "“{0}”修饰符不能在此处使用。", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "“{0}”修饰符不能在环境上下文中使用。", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "“{0}”修饰符不能与“{1}”修饰符一起使用。", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "“{0}”修饰符不能与专用标识符一起使用。", + "_0_modifier_must_precede_1_modifier_1029": "“{0}”修饰符必须位于“{1}”修饰符之前。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "“\\{0}”后面必须是括在大括号中的 Unicode 属性值表达式。", + "_0_needs_an_explicit_type_annotation_2782": "\"{0}\" 需要显式类型注释。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "“{0}”仅指类型,但在此用作命名空间。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "“{0}”仅表示类型,但在此处却作为值使用。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "“{0}”仅引用一个类型,但在此处用作一个值。你是否想要使用“{0} 中的 {1}”?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "“{0}” 仅指类型,但在此处用作值。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为 es2015 或更高版本。", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "“{0}”指 UMD 全局,但当前文件是模块。请考虑改为添加导入。", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "“{0}”表示值,但在此处用作类型。是否指“类型 {0}”?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "“{0}”解析为一个类型,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "“{0}”解析为仅类型声明,并且必须在启用 \"verbatimModuleSyntax\" 时使用仅类型导入进行导入。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用导入“{0}”的 \"import type\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "“{0}”解析为仅类型声明,并且在启用“{1}”后重新导出之前,必须在此文件中标记为仅类型。请考虑使用 \"export type { {0} as default }\"。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "“{0}”解析为仅类型声明,并且在启用“{1}”时必须使用仅类型重新导出进行重新导出。", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "应在 config json 文件的 “compilerOptions” 对象中设置 “{0}”", + "_0_tag_already_specified_1223": "已指定“{0}”标记。", + "_0_was_also_declared_here_6203": "此处也声明了 \"{0}\"。", + "_0_was_exported_here_1377": "在此处导出了 \"{0}\"。", + "_0_was_imported_here_1376": "此处导入了 \"{0}\"。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "缺少返回类型批注的“{0}”隐式具有“{1}”返回类型。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少返回类型批注的 \"{0}\" 隐式具有 \"{1}\" 产出类型。", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "\"abstract\" 修饰符仅可出现在类、方法或属性声明中。", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "\"accessor\" 修饰符只能出现在属性声明中。", + "and_here_6204": "并在这里。", + "and_npm_install_D_types_Slashnode_6290": "和 npm 安装 -D @types/节点", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "无法在属性初始值设定项或类静态初始化块中引用 'arguments'。", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "“auto”: 将带有导入、导出、import.meta、jsx (带有 jsx: react-jsx)或 esm 格式(带模块: node16+)的文件视为模块。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "\"await\" 表达式不能在类静态块内使用。", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "仅当文件是模块时,才允许在该文件的顶层使用 \"await\" 表达式,但此文件没有导入或导出。请考虑添加空的 \"export {}\" 以将此文件变为模块。", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "仅允许在异步函数和模块顶级使用 \"await\" 表达式。", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "不能在参数初始化表达式中使用 \"await\" 表达式。", + "await_has_no_effect_on_the_type_of_this_expression_80007": "\"await\" 对此表达式的类型没有影响。", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "环境上下文中不允许使用 ‘await using’ 声明。", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "除非包含在块中,否则不允许在 \"case\" 或 \"default\" 子句中使用 \"await using\" 声明。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "只有当文件是模块时,才允许在该文件的顶层使用 \"await using\" 语句,但此文件没有导入或导出。可考虑添加空的 \"export {}\" 将此文件变为模块。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "\"await using\" 语句仅允许在异步函数和顶级模块中使用。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "\"await using\" 语句不能在类静态块内使用。", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "\"baseUrl\" 选项设置为“{0}”,可使用此值解析非相关模块名称“{1}”。", + "c_must_be_followed_by_an_ASCII_letter_1512": "\"\\c\" 后面必须有一个 ASCII 字母。", + "can_only_be_used_at_the_start_of_a_file_18026": "\"#!\" 只能用在文件的开头。", + "case_or_default_expected_1130": "应为 \"case\" 或 \"default\"。", + "catch_or_finally_expected_1472": "应为 “catch” 或 “finally”。", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "\"const\" 枚举成员初始化表达式的求值结果为非有限值。", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "\"const\" 枚举成员初始化表达式的求值结果为不允许使用的值 \"NaN\"。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const 枚举成员初始值设定项必须是常量表达式。", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "\"const\" 枚举仅可在属性、索引访问表达式、导入声明的右侧、导出分配或类型查询中使用。", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "“构造函数”不能用作参数属性名称。", + "constructor_is_a_reserved_word_18012": "\"#constructor\" 是保留字。", + "default_Colon_6903": "默认值:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "在严格模式下,无法对标识符调用 \"delete\"。", + "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" 不会重新导出默认值。", + "export_can_only_be_used_in_TypeScript_files_8003": "\"export =\" 只能在 TypeScript 文件中使用。", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "\"export\" 修饰符不可用于环境模块和模块扩大,因为它们始终可见。", + "extends_clause_already_seen_1172": "已看到 \"extends\" 子句。", + "extends_clause_must_precede_implements_clause_1173": "\"extends\" 子句必须位于 \"implements\" 子句之前。", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "导出的类“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "导出的类的 \"extends\" 子句具有或正在使用专用名称“{0}”。", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "导出接口“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。", + "false_unless_checkJs_is_set_6932": "为 `false`,除非设置了 `checkJs`", + "false_unless_composite_is_set_6906": "\"false\",除非设置了 \"composite\"", + "file_6025": "文件", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "仅当文件是模块且没有导入或导出项时,才允许在该文件的顶层使用“for await”循环。可考虑添加空的“export {}”将此文件变为模块。", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "仅允许在异步函数和模块顶层使用“for await”循环。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "\"for await\" 循环不能在类静态块内使用。", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "\"get\" 和 \"set\" 访问器无法声明 \"this\" 参数。", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定了 \"files\",则为 \"[]\",否则为\"[\"**/*\"]\"", + "implements_clause_already_seen_1175": "已看到 \"implements\" 子句。", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "\"implements\" 子句只能在 TypeScript 文件中使用。", + "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" 只能在 TypeScript 文件中使用。", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "仅条件类型的 \"extends\" 子句中才允许 \"infer\" 声明。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "\"\\k\" 后面必须有一个括在尖括号中的捕获组名称。", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" 不能用作 \"let\" 或 \"const\" 声明中的名称。", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "其目标缺少构造签名的 \"new\" 表达式隐式具有 \"any\" 类型。", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\"、\"bower_components\"、\"jspm_packages\"]`,以及 \"outDir\" 的值(如果指定)。", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "如果 `module` 是 `nodenext`,则为 `nodenext`;如果 `module` 是 `node16` 或 `node18`,则为 `node16`;否则为 `bundler`。", + "one_of_Colon_6900": "以下其中一个:", + "one_or_more_Colon_6901": "一个或更多:", + "options_6024": "选项", + "or_JSX_element_expected_1145": "应为 “{” 或 JSX 元素。", + "or_expected_1144": "应为 \"{\" 或 \";\"。", + "package_json_does_not_have_a_0_field_6100": "\"package.json\" 没有“{0}”字段。", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "\"package. json\" 没有与版本 \"{0}\" 匹配的 \"typesVersions\" 项。", + "package_json_had_a_falsy_0_field_6220": "\"package. json\" 具有错误的 \"{0}\" 字段。", + "package_json_has_0_field_1_that_references_2_6101": "\"package.json\" 具有引用“{2}”的“{0}”字段“{1}”。", + "package_json_has_a_peerDependencies_field_6281": "\"package.json\" 具有 \"peerDependencies\" 字段。", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "\"package. json\" 具有 \"typesVersions\" 项 \"{0}\",它不是有效的 semver 范围。", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "\"package. json\" 具有与编译器版本 \"{1}\" 匹配的 \"typesVersions\" 项 \"{0}\",它需要与模块名称 \"{2}\" 匹配的模式。", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "\"package. json\" 具有 \"typesVersions\" 字段,它具有特定于版本的路径映射。", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.json 作用域 '{0}' 将说明符 '{1}' 显式映射到 NULL。", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.json 作用域 '{0}' 的说明符 '{1}' 的目标类型无效", + "package_json_scope_0_has_no_imports_defined_6273": "package.json 作用域 '{0}' 未定义导入。", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "指定了 \"paths“ 选项,正在查找模式以匹配模块名“{0}”。", + "q_is_only_available_inside_character_class_1511": "\"\\q\" 仅在字符类内可用。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "\"\\q\" 后面必须是括在大括号中的字符串替代项。", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "\"readonly\" 修饰符仅可出现在属性声明或索引签名中。", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "仅允许对数组和元组字面量类型使用 \"readonly\" 类型修饰符。", + "require_call_may_be_converted_to_an_import_80005": "可将 \"require\" 调用转换为 import 语句。", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能为仅类型导入设置 \"resolution-mode\"。", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "\"resolution-mode\" 是类型导入断言的唯一有效密钥。", + "resolution_mode_should_be_either_require_or_import_1453": "“resolution-mode”应为“require”或“import”。", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "设置了 \"rootDirs\" 选项,可将其用于解析相对模块名称“{0}”。", + "super_can_only_be_referenced_in_a_derived_class_2335": "只能在派生类中引用 \"super\"。", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "仅可在派生类或对象字面量表达式的成员中引用 \"super\"。", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "不能在计算属性名中引用 \"super\"。", + "super_cannot_be_referenced_in_constructor_arguments_2336": "不能在构造函数参数中引用 \"super\"。", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "\"target\" 选项为 \"ES2015\" 或更高版本时,仅对象字面量表达式的成员中允许 \"super\"。", + "super_may_not_use_type_arguments_2754": "\"super\" 不能使用类型参数。", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "访问派生类构造函数中的 \"super\" 属性前,必须调用 \"super\"。", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "访问派生类的构造函数中的 \"this\" 前,必须调用 \"super\"。", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "\"super\" 的后面必须是参数列表或成员访问。", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "只有构造函数、成员函数或派生类的成员访问器中才允许 \"super\" 属性访问。", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "不能在计算属性名中引用 \"this\"。", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "不能在模块或命名空间体中引用 \"this\"。", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "不能在静态属性初始化表达式中引用 \"this\"。", + "this_cannot_be_referenced_in_current_location_2332": "不能在当前位置引用 \"this\"。", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" 隐式具有类型 \"any\",因为它没有类型注释。", + "true_for_ES2022_and_above_including_ESNext_6930": "对于 ES2022 及更高版本为 `true`,包括 ESNext。", + "true_if_composite_false_otherwise_6909": "如果为 \"composite\",则为 \"true\",否则为 \"false\"", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "当 \"moduleResolution\" 为 \"node16\"、\"nodenext \"或 \"bundler\" 时为 `true`;否则为 `false`。", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 编译器", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "存在 tsconfig.json,但如果命令行指定了文件,则不会加载该文件。使用 \"--ignoreConfig\" 跳过此错误。", + "type_Colon_6902": "类型:", + "unique_symbol_types_are_not_allowed_here_1335": "此处不允许使用 \"unique symbol\" 类型。", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\" 类型仅可用于变量语句中的变量。", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "不可在具有绑定名称的变量声明中使用 \"unique symbol\" 类型。", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "\"use strict\" 指令不能与非简单参数列表一起使用。", + "use_strict_directive_used_here_1349": "此处使用了 \"use strict\" 指令。", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "环境上下文中不允许使用 ‘using’ 声明。", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "除非包含在块中,否则不允许在 \"case\" 或 \"default\" 子句中使用 \"using\" 声明。", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "不允许在异步函数块中使用 \"with\" 语句。", + "with_statements_are_not_allowed_in_strict_mode_1101": "严格模式下不允许使用 \"with\" 语句。", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "\"yield\" 表达式隐式导致 \"any\" 类型,因为它的包含生成器缺少返回类型批注。", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "不能在参数初始化表达式中使用 \"yield\" 表达式。" +} diff --git a/tsc/internal/diagnostics/loc/zh-TW.generated.json b/tsc/internal/diagnostics/loc/zh-TW.generated.json index 869889847dd52..f002fb2826817 100644 --- a/tsc/internal/diagnostics/loc/zh-TW.generated.json +++ b/tsc/internal/diagnostics/loc/zh-TW.generated.json @@ -1,2222 +1,2222 @@ -{ - "1_implementation_95201": "1 implementation", - "1_reference_95199": "1 reference", - "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", - "ALL_COMPILER_OPTIONS_6917": "所有編譯器選項", - "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾元無法與匯入宣告並用。", - "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 參數必須為第一個參數。", - "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 標籤不能接在 '@typedef'、'@callback' 或 '@overload' 標籤後面", - "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", - "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 註解不能包含多個 '@type' 標籤。", - "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "無法使用 'bigint' 常值做為屬性名稱。", - "A_bigint_literal_cannot_use_exponential_notation_1352": "Bigint 常值不可使用指數標記法。", - "A_bigint_literal_must_be_an_integer_1353": "Bigint 常值必須為整數。", - "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "實作簽章中不得省略繫結模式參數。", - "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 陳述式只可在封入的反覆項目或 switch 陳述式內使用。", - "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 陳述式只可跳至封入之陳述式的標籤。", - "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字元類別不得包含保留的雙標點符號。您是要使用反斜線將其逸出嗎?", - "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字元類別範圍不得被另一個字元類別限制。", - "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "類別只能實作具有選擇性型別引數的識別碼/限定名稱。", - "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "類別只能使用靜態已知成員來實作物件類型或物件類型的交集。", - "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "無法延伸基本類型的類別,例如 '{0}'。類別只能延伸可建構值。", - "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "無法實作基本類型的類別,例如 '{0}'。該類別只能實作其他具名物件類型。", - "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不具 'default' 修飾元的類別宣告必須要有名稱。", - "A_class_member_cannot_have_the_0_keyword_1248": "類別成員不能含有 '{0}' 關鍵字。", - "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "計算的屬性名稱中不可有逗點運算式。", - "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算的屬性名稱不得參考其包含類型中的型別參數。", - "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "類別屬性宣告中的已計算屬性名稱必須具有簡單常值型別或 'unique symbol' 型別。", - "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法多載中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", - "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "常值型別中的計算屬性名稱,必須參考類型為常值型別或 'unique symbol' 類型的運算式。", - "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境內容中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", - "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "介面中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", - "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "計算的屬性名稱必須是 'string'、'number'、'symbol' 或 'any' 類型。", - "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' 判斷提示只可套用至列舉成員、字串、數字、布林值、陣列或物件常值的參考。", - "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "若要存取常數列舉成員,必須透過字串常值。", - "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "環境內容中的 'const' 初始設定式必須為字串、數字常值或常值列舉參考。", - "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "當建構函式的類別擴充為 'null' 時,不得包含 'super' 呼叫。", - "A_constructor_cannot_have_a_this_parameter_2681": "建構函式不能含有 'this' 參數。", - "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 陳述式只可在封入的反覆項目陳述式內使用。", - "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 陳述式只可跳至封入之反覆項目陳述式的標籤。", - "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "沒有 'import type' 就無法匯入宣告檔案。您是否想要改為匯入實作檔案 '{0}'?", - "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不得在現有環境內容中使用 'declare' 修飾元。", - "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "一個裝飾項目只能裝飾一項方法實作,而不能多載。", - "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 子句在 'switch' 陳述式中不得出現一次以上。", - "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "預設匯出只能在 ECMAScript 樣式的模組中使用。", - "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "預設匯出必須位於檔案或模組宣告的最上層。", - "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此內容不允許明確的指派判斷提示 '!'。", - "A_destructuring_declaration_must_have_an_initializer_1182": "解構宣告中必須包含初始設定式。", - "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", - "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 '--lib' 選項中包括 'ES2015'。", - "A_file_cannot_have_a_reference_to_itself_1006": "檔案不得參考自己。", - "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "會傳回 'never' 的功能不得具有可聯繫的端點。", - "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "透過 'new' 關鍵字呼叫的函式不能含有為 'viod' 的 'this' 類型。", - "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'undefined'、'void' 也不是 'any',則必須傳回值。", - "A_generator_cannot_have_a_void_type_annotation_2505": "產生器不得有 'void' 類型註釋。", - "A_get_accessor_cannot_have_parameters_1054": "'get' 存取子不得有參數。", - "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 存取子必須至少要跟 setter 一樣可供存取", - "A_get_accessor_must_return_a_value_2378": "'get' 存取子必須傳回值。", - "A_label_is_not_allowed_here_1344": "A label is not allowed here.", - "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "標記的元組元素已宣告為選用,並在名稱之後、冒號之前加上問號,而非加在類型之後。", - "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "標記的元組元素已宣告為待用,並在名稱之前加上「...」,而非加在類型之前。", - "A_mapped_type_may_not_declare_properties_or_methods_7061": "對應型別不能宣告屬性或方法。", - "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列舉宣告中的成員初始設定式,不得參考在它之後宣告的成員,包括在其他列舉中所定義的成員。", - "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 類別必須具備建構函式,且該建構函式必須指定一個類型為 'any[]' 的 rest 參數。", - "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "從包含抽象建構簽章之類型變數所延伸的 mixin 類別也必須宣告為 'abstract'。", - "A_module_cannot_have_multiple_default_exports_2528": "一個模組不得有多個預設匯出。", - "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空間宣告的所在檔案位置,不得與其要合併的類別或函式不同。", - "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空間宣告的位置不得先於其要合併的類別或函式。", - "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空間宣告只允許在命名空間或模組的頂層。", - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不應該使用 'module' 關鍵字宣告 'namespace' 宣告。請改為使用 'namespace' 關鍵字。", - "A_non_dry_build_would_build_project_0_6357": "非 -dry 組建會建置專案 '{0}'", - "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 組建會刪除下列檔案: {0}", - "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 DRY 組建將會更新專案 '{0}' 輸出的時間戳記", - "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只有函式或建構函式實作才可使用參數初始設定式。", - "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "無法使用剩餘參數宣告參數屬性。", - "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "建構函式實作中只可有一個參數屬性。", - "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "無法使用繫結模式宣告參數屬性。", - "A_promise_must_have_a_then_method_1059": "Promise 必須有 'then' 方法。", - "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "類型為 'unique symbol' 類型的類別屬性,必須為 'static' 和 'readonly'。", - "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "類型為 'unique symbol' 類型之介面或常值型別的屬性,必須是 'readonly'。", - "A_required_element_cannot_follow_an_optional_element_1257": "必要項目不可接在選擇性項目後面。", - "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必要參數不得接在選擇性參數之後。", - "A_rest_element_cannot_contain_a_binding_pattern_2501": "剩餘項目不得包含繫結模式。", - "A_rest_element_cannot_follow_another_rest_element_1265": "REST 元素不能跟在另一個 REST 元素之後。", - "A_rest_element_cannot_have_a_property_name_2566": "REST 元素不得有屬性名稱。", - "A_rest_element_cannot_have_an_initializer_1186": "剩餘項目不得有初始設定式。", - "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest 項目必須保持在解構模式。", - "A_rest_element_type_must_be_an_array_type_2574": "其餘項目類型必須為陣列類型。", - "A_rest_parameter_cannot_be_optional_1047": "剩餘參數不得為選擇性參數。", - "A_rest_parameter_cannot_have_an_initializer_1048": "剩餘參數不得有初始設定式。", - "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "剩餘參數必須是參數清單中的最後一個參數。", - "A_rest_parameter_must_be_of_an_array_type_2370": "剩餘參數必須為陣列類型。", - "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "REST 參數或繫結模式的結尾不得為逗點。", - "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 陳述式只可在函式主體內使用。", - "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 陳述式無法在類別靜態區塊內使用。", - "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列由重新對應匯入到 'baseUrl' 之相對查詢位置的項目。", - "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 存取子不得有傳回型別註解。", - "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 存取子不得有選擇性參數。", - "A_set_accessor_cannot_have_rest_parameter_1053": "'set' 存取子不得有剩餘參數。", - "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 存取子只可有一個參數。", - "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 存取子參數不得有初始設定式。", - "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", - "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "擴張引數必須具有元組類型或傳遞給 REST 參數。", - "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' 呼叫必須是衍生類別 (包含初始化屬性、參數屬性或私人識別碼) 建構函式內的根等級陳述式。", - "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "當衍生類別包含已初始化的屬性、參數屬性或私人識別碼時,'super' 呼叫必須為建構函式中第一個參照 'super' 或 'this' 的陳述式。", - "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "以 'this' 為基礎的類型成立條件,和以參數為基礎的類型成立條件不相容。", - "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 類型只適用於類別或介面的非靜態成員。", - "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中的值宣告不得使用最上層 'export' 修飾元。", - "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 檔案已定義於: '{0}'。", - "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元組成員不能同時為選用及待用。", - "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "元組類型無法以負值編製索引。", - "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "乘冪運算式左邊不允許類型宣告運算式。請考慮以括弧括住運算式。", - "A_type_literal_property_cannot_have_an_initializer_1247": "類型常值屬性不得有初始設定式。", - "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "僅限類型的匯入可以指定預設匯入或具名繫結,但不能同時指定兩者。", - "A_type_predicate_cannot_reference_a_rest_parameter_1229": "型別述詞不得參考剩餘參數。", - "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "型別述詞不得參考繫結模式的項目 '{0}'。", - "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "只有函式及方法的傳回型別位置才允許型別述詞。", - "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "類型述詞的類型必須可指派給其參數的類型。", - "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "啟用 'isolatedModules' 和 'emitDecoratorMetadata' 時,修飾簽章中參考的類型必須以 'import type' 或命名空間匯入來匯入。", - "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "型別為 'unique symbol' 型別的變數必須是 'const'。", - "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只有產生器主體才允許 'yield' 運算式。", - "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "無法透過 super 運算式存取類別 '{1}' 中的抽象方法 '{0}'。", - "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只可出現在抽象類別中。", - "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象方法只可出現在抽象屬性中。", - "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "無法從建構函式存取類別 '{1}' 中的抽象屬性 '{0}'。", - "Accessibility_modifier_already_seen_1028": "已有存取範圍修飾元。", - "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "只有當目標為 ECMAScript 5 及更高版本時,才可使用存取子。", - "Accessors_must_both_be_abstract_or_non_abstract_2676": "存取子必須兩者均為抽象或非抽象。", - "Add_0_to_unresolved_variable_90008": "對未解析的變數新增 '{0}.'", - "Add_a_return_statement_95111": "新增 return 陳述式", - "Add_a_return_type_to_the_function_declaration_9031": "新增傳回類型到函數宣告。", - "Add_a_return_type_to_the_function_expression_9030": "新增傳回類型到函數運算式。", - "Add_a_return_type_to_the_get_accessor_declaration_9032": "新增傳回類型至 get 存取子宣告。", - "Add_a_return_type_to_the_method_9034": "新增傳回類型至方法", - "Add_a_type_annotation_to_the_parameter_0_9028": "新增類型註釋至參數 {0}。", - "Add_a_type_annotation_to_the_property_0_9029": "新增類型註釋至屬性 {0}。", - "Add_a_type_annotation_to_the_variable_0_9027": "新增類型註釋至變數 {0}。", - "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "將類型新增至集合存取子宣告的參數。", - "Add_all_missing_async_modifiers_95041": "新增缺少的所有 'async' 修飾元", - "Add_all_missing_attributes_95168": "新增所有遺失的屬性", - "Add_all_missing_call_parentheses_95068": "新增所有缺少的呼叫括號", - "Add_all_missing_function_declarations_95157": "新增所有缺少的函式宣告", - "Add_all_missing_imports_95064": "新增所有缺少的匯入", - "Add_all_missing_members_95022": "新增遺漏的所有成員", - "Add_all_missing_override_modifiers_95162": "新增所有缺少的 'override' 修飾元", - "Add_all_missing_parameters_95190": "新增所有遺失的參數", - "Add_all_missing_properties_95166": "新增所有遺失的屬性", - "Add_all_missing_return_statement_95114": "新增所有遺漏的 return 陳述式", - "Add_all_missing_super_calls_95039": "新增缺少的所有 super 呼叫", - "Add_all_missing_type_annotations_90067": "新增所有遺失的類型註釋", - "Add_all_optional_parameters_95193": "新增所有選用參數", - "Add_annotation_of_type_0_90062": "新增類型 '{0}' 的註釋", - "Add_async_modifier_to_containing_function_90029": "將 async 修飾元新增至包含的函式", - "Add_await_95083": "新增 'await'", - "Add_await_to_initializer_for_0_95084": "將 'await' 新增至 '{0}' 的初始設定式", - "Add_await_to_initializers_95089": "將 'await' 新增至初始設定式", - "Add_braces_to_arrow_function_95059": "將大括號新增至箭號函式", - "Add_const_to_all_unresolved_variables_95082": "將 'const' 新增至所有未解析的變數", - "Add_const_to_unresolved_variable_95081": "將 'const' 新增至未解析的變數", - "Add_definite_assignment_assertion_to_property_0_95020": "將明確指派判斷提示新增至屬性 '{0}'", - "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "為所有未初始化的屬性新增明確的指派判斷提示", - "Add_export_to_make_this_file_into_a_module_95097": "新增 'export {}' 以將此檔案轉為模組", - "Add_extends_constraint_2211": "新增 'extends' 限制式。", - "Add_extends_constraint_to_all_type_parameters_2212": "將 'extends' 限制式新增至所有類型參數", - "Add_import_from_0_90057": "從 \"{0}\" 新增匯入", - "Add_index_signature_for_property_0_90017": "為屬性 '{0}' 新增索引簽章", - "Add_initializer_to_property_0_95019": "將初始設定式新增至屬性 '{0}'", - "Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式", - "Add_missing_attributes_95167": "新增遺失的屬性", - "Add_missing_call_parentheses_95067": "新增缺少的呼叫括號", - "Add_missing_comma_for_object_member_completion_0_95187": "為物件成員完成 '{0}' 新增遺漏的逗號。", - "Add_missing_enum_member_0_95063": "新增缺少的列舉成員 '{0}'", - "Add_missing_function_declaration_0_95156": "新增缺少的函式宣告 '{0}'", - "Add_missing_new_operator_to_all_calls_95072": "將缺少的 'new' 運算子新增至所有呼叫", - "Add_missing_new_operator_to_call_95071": "缺少的 'new' 運算子新增至呼叫", - "Add_missing_parameter_to_0_95188": "新增遺失的參數至 '{0}'", - "Add_missing_parameters_to_0_95189": "新增遺失的參數至 '{0}'", - "Add_missing_properties_95165": "新增遺失的屬性", - "Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫", - "Add_missing_typeof_95052": "新增遺漏的 'typeof'", - "Add_names_to_all_parameters_without_names_95073": "將名稱新增至所有沒有名稱的參數", - "Add_optional_parameter_to_0_95191": "新增選用參數至 '{0}'", - "Add_optional_parameters_to_0_95192": "將選用參數新增至 '{0}'", - "Add_or_remove_braces_in_an_arrow_function_95058": "在箭號函式中新增或移除大括號", - "Add_override_modifier_95160": "新增 'override' 修飾元", - "Add_parameter_name_90034": "新增參數名稱", - "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞", - "Add_resolution_mode_import_attribute_95196": "新增 'resolution-mode' 匯入屬性", - "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "將 'resolution-mode' 匯入屬性新增至所有需要該屬性的僅限類型匯入", - "Add_return_type_0_90063": "新增傳回類型 '{0}'", - "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "在此運算式中新增 satisfies 和類型判斷提示 (將 T 視為 T),使類型明確顯示。", - "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "新增 satisfies 和具有 '{0}' 的內嵌類型判斷提示", - "Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'", - "Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'", - "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引進行存取時,將 'undefined' 新增至類型。", - "Add_undefined_to_optional_property_type_95169": "將 'undefined' 新增至選擇性屬性類型", - "Add_undefined_type_to_all_uninitialized_properties_95029": "為所有未初始化的屬性新增未定義的類型", - "Add_undefined_type_to_property_0_95018": "將 'undefined' 類型新增至屬性 '{0}'", - "Add_unknown_conversion_for_non_overlapping_types_95069": "新增非重疊類型的 'unknown' 轉換", - "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "將 'unknown' 新增至非重疊類型的所有轉換", - "Add_void_to_Promise_resolved_without_a_value_95143": "為已經解析但不具值的 Promise 新增 'void'", - "Add_void_to_all_Promises_resolved_without_a_value_95144": "為已經解析但不具值的所有 Promise 新增 'void'", - "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "新增 tsconfig.json 檔案有助於組織同時包含 TypeScript 及 JavaScript 檔案的專案。若要深入了解,請前往 https://aka.ms/tsconfig。", - "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}' 的所有宣告都必須有相同的限制式。", - "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' 的所有宣告都必須有相同修飾元。", - "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' 的所有宣告都必須具有相同的類型參數。", - "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有宣告必須連續。", - "All_destructured_elements_are_unused_6198": "不會使用所有未經結構化的項目。", - "All_imports_in_import_declaration_are_unused_6192": "匯入宣告中的所有匯入皆未使用。", - "All_type_parameters_are_unused_6205": "未使用任何型別參數。", - "All_variables_are_unused_6199": "所有變數都未使用。", - "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "允許 JavaScript 檔案成為您程式的一部分。使用 'checkJs' 選項可從這些檔案取得錯誤。", - "Allow_accessing_UMD_globals_from_modules_6602": "允許從模組存取 UMD 全域。", - "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。", - "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "當模組沒有預設匯出時,允許 'import x from y'。", - "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允許每個專案只從 tslib 匯入協助程式函式,而不是每個檔案都包含這些函式。", - "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允許匯入包含 TypeScript 延伸模組。需要設定 '--moduleResolution bundler' 和 '--noEmit' 或 '--emitDeclarationOnly'。", - "Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。", - "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", - "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "在解析模組時,允許將多個資料夾視為一個資料夾。", - "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的檔案名稱 '{0}' 與檔案名稱 '{1}' 僅大小寫不同。", - "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "環境模組宣告不可指定相對模組名稱。", - "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "環境模組不得以巢狀方式置於其他模組或命名空間中。", - "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模組不能有多個名稱指派。", - "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象存取子無法實作。", - "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "協助工具修飾元不可搭配私人識別碼使用。", - "An_accessor_cannot_have_type_parameters_1094": "存取子不得有類型參數。", - "An_accessor_property_cannot_be_declared_optional_1276": "無法將 'accessor' 屬性宣告為選擇性。", - "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "環境模組宣告只可出現在檔案的最上層。", - "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", - "An_argument_for_0_was_not_provided_6210": "未提供 '{0}' 的引數。", - "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供符合此繫結模式的引數。", - "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術運算元必須屬於 'any'、'number'、'bigint' 或列舉類型。", - "An_arrow_function_cannot_have_a_this_parameter_2730": "箭號函式不可具有 'this' 參數。", - "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", - "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或在 '--lib' 選項中包括 'ES2015'。", - "An_async_iterator_must_have_a_next_method_2519": "非同步迭代器必須有 'next()' 方法。", - "An_element_access_expression_should_take_an_argument_1011": "項目存取運算式應接受一個引數。", - "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "列舉成員不能以私人識別碼命名。", - "An_enum_member_cannot_have_a_numeric_name_2452": "列舉成員不得有數值名稱。", - "An_enum_member_name_must_be_followed_by_a_or_1357": "列舉成員名稱必須尾隨 ','、'=' 或 '}'。", - "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此資訊展開的版本,顯示所有可能的編譯器選項", - "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "匯出指派不得用於具有其他匯出項目的模組中。", - "An_export_assignment_cannot_be_used_in_a_namespace_1063": "命名空間中不可使用匯出指派。", - "An_export_assignment_cannot_have_modifiers_1120": "匯出指派不得有修飾元。", - "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "匯出指派必須位於檔案或模組宣告的最上層。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "匯出宣告只能在模組的頂層使用。", - "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "匯出宣告只能在命名空間或模組的頂層使用。", - "An_export_declaration_cannot_have_modifiers_1193": "匯出宣告不得有修飾元。", - "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", - "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考值,但 '{0}' 僅參考類型。", - "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "啟用 'verbatimModuleSyntax' 時,'export default' 必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", - "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "啟用 'verbatimModuleSyntax' 時,'export default' 宣告必須參考值,但 '{0}' 僅參考類型。", - "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "無法對 'void' 類型的運算式測試真實性。", - "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "擴充的 Unicode 逸出值必須介於 0x0 與 0x10FFFF (不含) 之間。", - "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別碼或關鍵字不可直接接在數字常值後面。", - "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不得在環境內容中宣告實作。", - "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "匯入別名不能參考使用 'export type' 匯出的宣告。", - "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "匯入別名不能參考使用 'import type' 匯入的宣告。", - "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "啟用 'verbatimModuleSyntax' 時,無法解析匯入別名為類型或僅類型的宣告。", - "An_import_alias_cannot_use_import_type_1392": "匯入別名不能使用 'import type'", - "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", - "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", - "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", - "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", - "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", - "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "匯入宣告只能在模組的頂層使用。", - "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "匯入宣告只能在命名空間或模組的頂層使用。", - "An_import_declaration_cannot_have_modifiers_1191": "匯入宣告不得有修飾元。", - "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "當 'allowImportingTsExtensions' 啟用時,匯入路徑只能以 '{0}' 延伸模組結尾。", - "An_index_signature_cannot_have_a_rest_parameter_1017": "索引簽章不得有剩餘參數。", - "An_index_signature_cannot_have_a_trailing_comma_1025": "索引簽章結尾不可有逗號。", - "An_index_signature_must_have_a_type_annotation_1021": "索引簽章必須有類型註釋。", - "An_index_signature_must_have_exactly_one_parameter_1096": "索引簽章只可有一個參數。", - "An_index_signature_parameter_cannot_have_a_question_mark_1019": "索引簽章參數不得有問號。", - "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引簽章參數不得有存取範圍修飾元。", - "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引簽章參數不得有初始設定式。", - "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引簽章參數必須有類型註釋。", - "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引簽章參數類型不能是常值型別或泛型型別。請考慮改用對應的物件類型。", - "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引簽章參數類型必須是 'string'、'number'、'symbol' 或範本文字類型。", - "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "具現化運算式後面不能接著屬性存取。", - "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "介面只能擴充具有選擇性型別引數的識別碼/限定名稱。", - "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "介面只能延伸物件類型或具有靜態已知成員的物件類型交集。", - "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "無法延伸基本類型的介面,例如 '{0}'。其只能延伸其他具名物件類型。", - "An_interface_property_cannot_have_an_initializer_1246": "介面屬性不得有初始設定式。", - "An_iterator_must_have_a_next_method_2489": "迭代器必須要有 'next()' 方法。", - "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "在 JSX 片段使用 @jsx pragma 時,必須有 @jsxFrag pragma。", - "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "物件常值不得有多個同名的 get/set 存取子。", - "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "物件常值不能有多個相同名稱的屬性。", - "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "物件常值不得有同名的屬性與存取子。", - "An_object_member_cannot_be_declared_optional_1162": "不得將物件成員宣告為選擇性。", - "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "物件的 '[Symbol.hasInstance]' 方法必須傳回布林值,才能用於 『instanceof』 運算式的右側。", - "An_optional_chain_cannot_contain_private_identifiers_18030": "選擇性鏈結不能包含私人識別碼。", - "An_optional_element_cannot_follow_a_rest_element_1266": "選擇性元素不能跟在 REST 元素之後。", - "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器已陰影 'this' 的外部值。", - "An_overload_signature_cannot_be_declared_as_a_generator_1222": "不可將多載簽章宣告為產生器。", - "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘冪運算式左邊不允許具 '{0}' 運算子的一元運算式。請考慮以括弧括住運算式。", - "Annotate_everything_with_types_from_JSDoc_95043": "標註具備 JSDoc 之類型的所有項目 ", - "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "為命名空間中的屬性 expando 函式類型加上標註", - "Annotate_with_type_from_JSDoc_95009": "為來自 JSDoc 的類型標註", - "Another_export_default_is_here_2753": "其他匯出預設位於此處。", - "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "只有在設定 Unicode 設定 (v) 旗標時,才能使用任何可能比對超過一個字元的 Unicode 屬性。", - "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "在否定字元類別中,任何可能比對超過一個字元的專案都無效。", - "Are_you_missing_a_semicolon_2734": "缺少分號嗎?", - "Argument_expression_expected_1135": "必須是引數運算式。", - "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 選項的引數必須是: {1}。", - "Argument_of_dynamic_import_cannot_be_spread_element_1325": "動態匯入的引數不能是擴張元素。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "類型 '{0}' 的引數不可指派給類型 '{1}' 的參數。", - "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "類型 '{0}' 的引數無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}' 的參數。請考慮將 'undefined' 新增到目標屬性的類型。", - "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供其餘參數 '{0}' 的引數。", - "Array_element_destructuring_pattern_expected_1181": "必須是陣列項目解構模式。", - "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "具有擴張元素的陣列無法使用 --isolatedDeclarations 推斷。", - "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "判斷提示要求必須以明確的型別註解宣告呼叫目標中的每個名稱。", - "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "判斷提示要求呼叫目標必須為識別碼或限定名稱。", - "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "在未宣告的情況下,--isolatedDeclarations 不支援指派屬性給函式。新增指派給此函式之屬性的明確宣告。", - "Asterisk_Slash_expected_1010": "必須是 '*/'。", - "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "至少一個存取子必須有具備 --isolatedDeclarations 的明確型別註釋。", - "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全域範圍的增強指定只能在外部模組宣告或環境模組宣告直接巢狀。", - "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "除非全域範圍的增強指定已顯示在環境內容中,否則應含有 'declare' 修飾元。", - "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "專案 '{0}' 中已啟用鍵入的自動探索。正在使用快取位置 '{2}' 執行模組 '{1}' 的額外解析傳遞。", - "BUILD_OPTIONS_6919": "建置選項", - "Backwards_Compatibility_6253": "回溯相容性", - "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底類別運算式無法參考類別型別參數。", - "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底建構函式傳回型別 '{0}' 不是物件類型或具有靜態已知成員的物件類型交集。", - "Base_constructors_must_all_have_the_same_return_type_2510": "基底建構函式的傳回型別必須全部相同。", - "Base_directory_to_resolve_non_absolute_module_names_6083": "要解析非絕對模組名稱的基底目錄。", - "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "當目標低於 ES2020 時,無法使用 BigInt 常值。", - "Binary_digit_expected_1177": "必須是二進位數字。", - "Binding_element_0_implicitly_has_an_1_type_7031": "繫結元素 '{0}' 隱含擁有 '{1}' 類型。", - "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", - "Block_scoped_variable_0_used_before_its_declaration_2448": "已在其宣告之前使用區塊範圍變數 '{0}'。", - "Build_a_composite_project_in_the_working_directory_6925": "在工作目錄中建置複合專案。", - "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "建置包括似乎已是最新狀態的所有專案。", - "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "若已過期,則建置一或多個專案及其相依性", - "Build_option_0_requires_a_value_of_type_1_5073": "組建選項 '{0}' 需要 {1} 類型的值。", - "Building_project_0_6358": "正在建置專案 '{0}'...", - "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "內建 iterators 會以 'undefined' 而非 'any' 的 'TReturn' 類型具現化。", - "COMMAND_LINE_FLAGS_6921": "命令列旗標", - "COMMON_COMMANDS_6916": "一般命令", - "COMMON_COMPILER_OPTIONS_6920": "一般編譯器選項", - "Call_decorator_expression_90028": "呼叫裝飾項目運算式", - "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼叫簽章傳回型別 '{0}' 與 '{1}' 不相容。", - "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少傳回型別註解的呼叫簽章隱含了 'any' 傳回型別。", - "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "無引數呼叫簽章的傳回型別 '{0}' 與 '{1}' 不相容。", - "Call_target_does_not_contain_any_signatures_2346": "呼叫目標未包含任何特徵標記。", - "Can_only_convert_logical_AND_access_chains_95142": "只可轉換邏輯 AND 存取鏈結", - "Can_only_convert_named_export_95164": "只能轉換具名匯出", - "Can_only_convert_property_with_modifier_95137": "只能轉換具有修飾元的屬性", - "Can_only_convert_string_concatenations_and_string_literals_95154": "只能轉換字串串連和字串常值", - "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "因為 '{0}' 是類型而非命名空間,所以無法存取 '{0}.{1}'。您要在 '{0}' 中使用 '{0}[\"{1}\"]' 擷取屬性 '{1}' 的類型嗎?", - "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "啟用 '{1}' 時,無法從另一個不具備資格的檔案存取 '{0}'。請改用 '{2}'。", - "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "啟用 '{0}' 時,無法存取環境連續列舉。", - "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "無法將 '{0}' 建構函式類型指派至 '{1}' 建構函式類型。", - "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "無法將抽象建構函式類型指派給非抽象建構函式類型。", - "Cannot_assign_to_0_because_it_is_a_class_2629": "無法指派至 '{0}',因為其為類別。", - "Cannot_assign_to_0_because_it_is_a_constant_2588": "因為 '{0}' 為常數,所以無法指派至 '{0}'。", - "Cannot_assign_to_0_because_it_is_a_function_2630": "無法指派至 '{0}',因為其為函式。", - "Cannot_assign_to_0_because_it_is_a_namespace_2631": "無法指派至 '{0}',因為其為命名空間。", - "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "因為 '{0}' 為唯讀屬性,所以無法指派至 '{0}'。", - "Cannot_assign_to_0_because_it_is_an_enum_2628": "無法指派至 '{0}',因為其為列舉。", - "Cannot_assign_to_0_because_it_is_an_import_2632": "無法指派至 '{0}',因為其為匯入。", - "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "無法指派至 '{0}',因為它不是變數。", - "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "無法指派給私人方法 '{0}'。私人方法無法寫入。", - "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "因為模組 '{0}' 會解析為非模組實體,所以無法加以增強。", - "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "無法使用值匯出擴充模組 '{0}',因為其會解析為非模組實體。", - "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "除非 '--module' 旗標為 'amd' 或 'system',否則無法使用選項 '{0}' 編譯模組。", - "Cannot_create_an_instance_of_an_abstract_class_2511": "無法建立抽象類別的執行個體。", - "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "因為值的迭代器 'next' 方法需要類型 '{1}',但所包含的產生器永遠會傳送 '{0}',所以無法將反覆項目委派給值。", - "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "無法匯出 '{0}'。只有區域宣告可以從模組匯出。", - "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "無法延伸類別 '{0}'。類別建構函式已標記為私用。", - "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "無法擴充介面 '{0}',您意指「實作」嗎?", - "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "在目前的目錄中找不到 tsconfig.json 檔案: {0}。", - "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "在指定的目錄 '{0}' 中找不到 tsconfig.json 檔案。", - "Cannot_find_global_type_0_2318": "找不到全域類型 '{0}'。", - "Cannot_find_global_value_0_2468": "找不到全域值 '{0}'。", - "Cannot_find_lib_definition_for_0_2726": "找不到 '{0}' 的程式庫定義。", - "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到 '{0}' 的程式庫定義。您是指 '{1}' 嗎?", - "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模組 '{0}'。建議使用 '--resolveJsonModule',匯入副檔名為 '.json' 的模組。", - "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模組 '{0}'。您是要將 'moduleResolution' 選項設為 'nodenext',或是要將別名新增至 'paths' 選項?", - "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模組 '{0}' 或其對應的型別宣告。", - "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "找不到 '{0}' 副作用匯入的模組或類型宣告。", - "Cannot_find_name_0_2304": "找不到名稱 '{0}'。", - "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名稱 '{0}'。您指的是 '{1}' 嗎?", - "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名稱 '{0}'。您要找的是此執行個體成員 'this.{0}' 嗎?", - "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名稱 '{0}'。您要找的是此靜態成員 '{1}.{0}' 嗎?", - "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名稱 '{0}'。您是否想要在非同步函數中寫入此專案?", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為「{1}」或更新版本。", - "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為包含 'dom'。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`,然後將 'bun' 新增至 tsconfig 中的類型欄位。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱「{0}」。需要為測試執行器安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的類型欄位。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名稱「{0}」。需要為 jQuery 安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jquery`,然後將 `jquery` 新增至 tsconfig 中的類型欄位。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名稱 '{0}'。需要安裝節點的型別定義嗎? 請嘗試 `npm i --save-dev @types/node`。", - "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名稱「{0}」。需要為節點安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/node`,然後將 `node` 新增至 tsconfig 中的類型欄位。", - "Cannot_find_namespace_0_2503": "找不到命名空間 '{0}'。", - "Cannot_find_namespace_0_Did_you_mean_1_2833": "找不到命名空間 '{0}'。您是不是指 '{1}'?", - "Cannot_find_parameter_0_1225": "找不到參數 '{0}'。", - "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到輸入檔的一般子目錄路徑。", - "Cannot_find_type_definition_file_for_0_2688": "找不到 '{0}' 的類型定義檔案。", - "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "無法匯入型別宣告檔案。請考慮匯入 '{0}' 而不是 '{1}'。", - "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "無法初始化區塊範圍宣告 '{1}' 之同一範圍中的外部範圍變數 '{0}'。", - "Cannot_invoke_an_object_which_is_possibly_null_2721": "無法叫用可能為 'null' 的物件。", - "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "無法叫用可能為 'null' 或 'undefined' 的物件。", - "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "無法叫用可能為 'undefined' 的物件。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列解構永遠會傳送 '{0}',所以無法逐一查看值。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列擴張永遠會傳送 '{0}',所以無法逐一查看值。", - "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "因為值的迭代器 'next' 方法需要類型 '{1}',但 for-of 永遠會傳送 '{0}',所以無法逐一查看值。", - "Cannot_move_statements_to_the_selected_file_95183": "無法將陳述式移動至選取的檔案", - "Cannot_move_to_file_selected_file_is_invalid_95179": "無法移動至檔案,選取的檔案無效", - "Cannot_read_file_0_5083": "無法讀取檔案 '{0}'。", - "Cannot_read_file_0_Colon_1_5012": "無法讀取檔案 '{0}': {1}。", - "Cannot_redeclare_block_scoped_variable_0_2451": "無法重新宣告區塊範圍變數 '{0}'。", - "Cannot_redeclare_exported_variable_0_2323": "無法重新宣告匯出的變數 '{0}'。", - "Cannot_redeclare_identifier_0_in_catch_clause_2492": "無法在 Catch 子句中重新宣告識別碼 '{0}'。", - "Cannot_start_a_function_call_in_a_type_annotation_1441": "無法在類型註釋中啟動函式呼叫。", - "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "除非有提供 '--jsx' 旗標,否則無法使用 JSX。", - "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "啟用 '{0}' 時,無法在類型或僅類型命名空間上使用 'export import'。", - "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "當 '--module' 為 'none' 時,無法使用匯入、匯出或模組增強指定。", - "Cannot_use_namespace_0_as_a_type_2709": "不得使用命名空間 '{0}' 作為類型。", - "Cannot_use_namespace_0_as_a_value_2708": "不得使用命名空間 '{0}' 作為值。", - "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "在修飾類別的靜態屬性初始化運算式中,不能使用 'this'。", - "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "因為檔案 '{0}' 會覆寫所參考專案 '{1}' 產生的 '.tsbuildinfo' 檔案,所以無法寫入該檔案", - "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "無法寫入檔案 '{0}',原因是其會由多個輸入檔覆寫。", - "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "無法寫入檔案 '{0}',原因是其會覆寫輸入檔。", - "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 子句變數不得有初始設定式。", - "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 子句變數型別註解必須為 'any' 或 'unknown' (如有指定)。", - "Change_0_to_1_90014": "將 '{0}' 變更為 '{1}'", - "Change_all_extended_interfaces_to_implements_95038": "將所有延伸介面變更為 'implements'", - "Change_all_jsdoc_style_types_to_TypeScript_95030": "將所有 jsdoc 樣式的類型變更為 TypeScript", - "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "將所有 jsdoc 樣式的類型變更為 TypeScript (並為 null 類型新增 '| undefined')", - "Change_extends_to_implements_90003": "將 [延伸] 變更至 [實作]", - "Change_spelling_to_0_90022": "將拼字變更為 '{0}'", - "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "檢查是否已宣告但未在建構函式中設定的類別屬性。", - "Check_side_effect_imports_6806": "檢查副作用匯入。", - "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "檢查 'bind'、'call' 和 'apply' 方法的引數是否與原始函式相符。", - "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "檢查 '{0}' 是否為 '{1}' - '{2}' 的最長相符前置詞。", - "Circular_definition_of_import_alias_0_2303": "匯入別名 '{0}' 的循環定義。", - "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析組態時偵測到循環性: {0}", - "Circularity_originates_in_type_at_this_location_2751": "循環源於此位置的類型。", - "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "類別 '{0}' 已定義執行個體成員存取子 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", - "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "類別 '{0}' 已定義執行個體成員函式 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員存取子。", - "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "類別 '{0}' 已定義執行個體成員屬性 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", - "Class_0_incorrectly_extends_base_class_1_2415": "類別 '{0}' 不正確地擴充基底類別 '{1}'。", - "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "類別 '{0}' 不當實作類別 '{1}'。您是否要擴充 '{1}',並繼承其成員以成為子類別?", - "Class_0_incorrectly_implements_interface_1_2420": "類別 '{0}' 不正確地實作介面 '{1}'。", - "Class_0_used_before_its_declaration_2449": "類別 '{0}' 的位置在其宣告之前。", - "Class_constructor_may_not_be_a_generator_1368": "類別建構函式可能不是產生器。", - "Class_constructor_may_not_be_an_accessor_1341": "類別建構函式可能不是存取子。", - "Class_declaration_cannot_implement_overload_list_for_0_2813": "類別宣告無法為 '{0}' 實作多載清單。", - "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告不能有一個以上的 `@augments` 或 `@extends` 標籤。", - "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "類別裝飾項目無法與靜態私人識別碼一起使用。請考慮移除實驗性裝飾項目。", - "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父類別所定義的類別欄位 '{0}' 無法透過超級在子類別中存取。", - "Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。", - "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 和更新版本時,類別名稱不可為 'Object'。", - "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。", - "Classes_can_only_extend_a_single_class_1174": "類別只能擴充一個類別。", - "Classes_may_not_have_a_field_named_constructor_18006": "類別不能具有名為 'constructor' 的欄位。", - "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "會使用 JavaScript 的嚴格模式,評估包含在類別中的程式碼,其中不允許使用 '{0}'。如需詳細資訊,請參閱 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Strict_mode。", - "Command_line_Options_6171": "命令列選項", - "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "當路徑為專案組態檔或為 'tsconfig.json' 所在的資料夾時編譯專案。", - "Compiler_Diagnostics_6251": "編譯器診斷", - "Compiler_option_0_cannot_be_given_an_empty_string_18051": "編譯器選項 '{0}' 無法指定空字串。", - "Compiler_option_0_expects_an_argument_6044": "編譯器選項 '{0}' 必須要有一個引數。", - "Compiler_option_0_may_not_be_used_with_build_5094": "編譯器選項 '--{0}' 不能與 '--build' 一起使用。", - "Compiler_option_0_may_only_be_used_with_build_5093": "編譯器選項 '--{0}' 只能與 '--build' 一起使用。", - "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "'{1}' 值的編譯器選項 '{0}'不穩定。使用夜間 TypeScript 將此錯誤設為靜音。請嘗試使用 'npm install -D typescript@next' 更新。", - "Compiler_option_0_requires_a_value_of_type_1_5024": "編譯器選項 '{0}' 需要類型 {1} 的值。", - "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "降級發出私人識別碼時,編譯器會保留名稱 '{0}'。", - "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "編譯位於指定路徑的 TypeScript 專案。", - "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "編譯目前的專案 (工作目錄中的 tsconfig.json)。", - "Compiles_the_current_project_with_additional_settings_6929": "使用其他設定編譯目前的專案。", - "Completeness_6257": "完整性", - "Composite_projects_may_not_disable_declaration_emit_6304": "複合式專案可能未停用宣告發出。", - "Composite_projects_may_not_disable_incremental_compilation_6379": "複合專案可能不會停用累加編譯。", - "Computed_from_the_list_of_input_files_6911": "從輸入檔案清單計算", - "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算屬性必須是具有 --isolatedDeclarations 的數字或字串常值、變數或點狀運算式。", - "Computed_property_names_are_not_allowed_in_enums_1164": "列舉中不能有計算的屬性名稱。", - "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "無法使用 --isolatedDeclarations 推斷類別或物件常值上的計算屬性名稱。", - "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "具有字串值成員的列舉中不允許計算值。", - "Concatenate_and_emit_output_to_single_file_6001": "串連並發出輸出至單一檔案。", - "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析匯入時,除了解析程式特定預設值之外,還需要設定的條件。", - "Conflicts_are_in_this_file_6201": "此檔案中有衝突。", - "Consider_adding_a_declare_modifier_to_this_class_6506": "請考慮將 'declare' 修飾元加入此類別。", - "Construct_signature_return_types_0_and_1_are_incompatible_2203": "建構簽章傳回型別 '{0}' 與 '{1}' 不相容。", - "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少傳回型別註解的建構簽章,隱含有 'any' 傳回型別。", - "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "無引數建構簽章的傳回型別 '{0}' 與 '{1}' 不相容。", - "Constructor_implementation_is_missing_2390": "缺少建構函式實作。", - "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "類別 '{0}' 的建構函式為私用,並且只能在類別宣告內存取。", - "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "類別 '{0}' 的建構函式受到保護,並且只能在類別宣告內存取。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "在等位型別中使用建構函式類型標記法時,必須括以括弧。", - "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "在交集型別中使用建構函式類型標記法時,必須括以括弧。", - "Constructors_for_derived_classes_must_contain_a_super_call_2377": "衍生類別的建構函式必須包含 'super' 呼叫。", - "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含檔案,因此無法決定根目錄,而將略過 'node_modules' 中的查閱。", - "Containing_function_is_not_an_arrow_function_95128": "內含函式不是箭頭函式", - "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", - "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", - "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", - "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", - "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", - "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "控制用來偵測模組格式 JS 檔案的方法。", - "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "將類型 '{0}' 轉換為類型 '{1}' 可能會發生錯誤,原因是這兩個類型彼此並未充分重疊。如果是故意轉換的,請先將運算式轉換為 'unknown'。", - "Convert_0_to_1_in_0_95003": "將 '{0}' 轉換成 '{1} in {0}'", - "Convert_0_to_mapped_object_type_95055": "將 '{0}' 轉換為對應的物件類型", - "Convert_all_const_to_let_95102": "將所有 'const' 轉換為 'let'", - "Convert_all_constructor_functions_to_classes_95045": "將所有建構函式轉換為類別", - "Convert_all_invalid_characters_to_HTML_entity_code_95101": "將所有無效字元轉換為 HTML 實體代碼", - "Convert_all_re_exported_types_to_type_only_exports_1365": "將所有重新匯出的類型轉換為僅限類型的匯出", - "Convert_all_require_to_import_95048": "將所有 'require' 轉換至 'import'", - "Convert_all_to_async_functions_95066": "全部轉換為非同步函式", - "Convert_all_to_bigint_numeric_literals_95092": "全部轉換為 Bigint 數字常值", - "Convert_all_to_default_imports_95035": "全部轉換為預設匯入", - "Convert_all_type_literals_to_mapped_type_95021": "將所有類型常值轉換成相對應的類型", - "Convert_all_typedef_to_TypeScript_types_95177": "轉換所有 typedef 為 TypeScript 類型。", - "Convert_arrow_function_or_function_expression_95122": "轉換箭頭函式或函式運算式", - "Convert_const_to_let_95093": "將 'const' 轉換為 'let'", - "Convert_default_export_to_named_export_95061": "將預設匯出轉換為具名匯出", - "Convert_function_declaration_0_to_arrow_function_95106": "將函式宣告 '{0}' 轉換為箭號函式", - "Convert_function_expression_0_to_arrow_function_95105": "將函式運算式 '{0}' 轉換為箭號函式", - "Convert_function_to_an_ES2015_class_95001": "將函式轉換為 ES2015 類別", - "Convert_invalid_character_to_its_html_entity_code_95100": "將無效字元轉換為其 HTML 實體代碼", - "Convert_named_export_to_default_export_95062": "將具名匯出轉換為預設匯出", - "Convert_named_imports_to_default_import_95170": "將具名匯入轉換為預設匯入", - "Convert_named_imports_to_namespace_import_95057": "將具名匯入轉換為命名空間匯入", - "Convert_namespace_import_to_named_imports_95056": "將命名空間匯入轉換為具名匯入", - "Convert_overload_list_to_single_signature_95118": "將多載清單轉換成單一特徵標記", - "Convert_parameters_to_destructured_object_95075": "將參數轉換為解構的物件", - "Convert_require_to_import_95047": "將 'require' 轉換至 'import'", - "Convert_to_ES_module_95017": "轉換為 ES 模組", - "Convert_to_a_bigint_numeric_literal_95091": "轉換為 Bigint 數字常值", - "Convert_to_anonymous_function_95123": "轉換為匿名函式", - "Convert_to_arrow_function_95125": "轉換為箭頭函式", - "Convert_to_async_function_95065": "轉換為非同步函式", - "Convert_to_default_import_95013": "轉換為預設匯入", - "Convert_to_named_function_95124": "轉換為具名函式", - "Convert_to_optional_chain_expression_95139": "轉換為選擇性鏈結運算式", - "Convert_to_template_string_95096": "轉換為範本字串", - "Convert_to_type_only_export_1364": "轉換為僅限類型的匯出", - "Convert_typedef_to_TypeScript_type_95176": "轉換 typedef 為 TypeScript 類型。", - "Corrupted_locale_file_0_6051": "地區設定檔 {0} 已損毀。", - "Could_not_convert_to_anonymous_function_95153": "無法轉換成匿名函式", - "Could_not_convert_to_arrow_function_95151": "無法轉換成箭頭函式", - "Could_not_convert_to_named_function_95152": "無法轉換成具名函式", - "Could_not_determine_function_return_type_95150": "無法判斷函式傳回型別", - "Could_not_find_a_containing_arrow_function_95127": "找不到內含箭頭函式", - "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "找不到模組 '{0}' 的宣告檔案。'{1}' 隱含具有 'any' 類型。", - "Could_not_find_convertible_access_expression_95140": "找不到可轉換的存取運算式", - "Could_not_find_export_statement_95129": "找不到匯出陳述式", - "Could_not_find_import_clause_95131": "找不到匯入子句", - "Could_not_find_matching_access_expressions_95141": "找不到相符的存取運算式", - "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名稱 '{0}'。您是不是指 '{1}'?", - "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空間匯入或具名匯入", - "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要為其產生存取子的屬性", - "Could_not_find_variable_to_inline_95185": "找不到要內嵌的變數。", - "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "無法解析具有下列延伸模組的路徑 '{0}': {1}。", - "Could_not_write_file_0_Colon_1_5033": "無法編寫檔案 '{0}': {1}。", - "Create_source_map_files_for_emitted_JavaScript_files_6694": "建立發出 JavaScript 檔案的來源對應檔。", - "Create_sourcemaps_for_d_ts_files_6614": "為 d.ts 檔案建立 sourcemap。", - "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用建議設定在工作目錄中建立 tsconfig.json。", - "DIRECTORY_6038": "目錄", - "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字元類別中不允許小數點逸出序列和反向參考。", - "Decimals_with_leading_zeros_are_not_allowed_1489": "不允許前置為零的小數點。", - "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "宣告會讓另一個檔案中的宣告增加。這無法序列化。", - "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", - "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "此檔案發出的宣告需要保留此匯入,以進行增強。該情況不受 --isolatedDeclarations 支援。", - "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此檔案的宣告發出必須使用私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", - "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此檔案的宣告發出必須使用來自模組 '{1}' 的私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", - "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "此參數發出的宣告需要隱含地新增未定義值至其類型。此情況不受 --isolatedDeclarations 支援。", - "Declaration_expected_1146": "必須是宣告。", - "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣告名稱與內建全域識別碼 '{0}' 衝突。", - "Declaration_or_statement_expected_1128": "必須是宣告或陳述式。", - "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "必須是宣告或陳述式。這個 '=' 會跟著陳述式區塊,因此如果您想要撰寫解構指派,就可能需要在整個指派的前後加上括弧。", - "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "包含明確指派判斷提示的宣告也必須包含類型註釋。", - "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "包含初始設定式的宣告不得同時包含明確指派判斷提示。", - "Declare_a_private_field_named_0_90053": "宣告名為 '{0}' 的私人欄位。", - "Declare_method_0_90023": "宣告方法 '{0}'", - "Declare_private_method_0_90038": "宣告私人方法 '{0}'", - "Declare_private_property_0_90035": "宣告私人屬性 '{0}'", - "Declare_property_0_90016": "宣告屬性 '{0}'", - "Declare_static_method_0_90024": "宣告靜態方法 '{0}'", - "Declare_static_property_0_90027": "宣告靜態屬性 '{0}'", - "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "裝飾項目函式傳回類型 '{0}' 無法指派給類型 '{1}'。", - "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "裝飾項目函式傳回類型是 '{0}',但必須是 'void' 或 'any'。", - "Decorator_used_before_export_here_1486": "在此處「匯出」之前使用的裝飾項目。", - "Decorators_are_not_valid_here_1206": "裝飾項目在此處無效。", - "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "無法將裝飾項目套用至多個同名的 get/set 存取子。", - "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果裝飾項目也出現在 'export' 之前,就不能出現在 'export' 或 'export default' 後。", - "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "裝飾項目必須在屬性宣告的名稱和所有關鍵詞之前。", - "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", - "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "預設 catch 子句變數為 'unknown' 而非 'any'。", - "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模組的預設匯出具有或正在使用私用名稱 '{0}'。", - "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "無法使用 --isolatedDeclarations 推斷預設匯出。", - "Default_imports_are_not_allowed_in_a_deferred_import_18058": "延遲的匯入中不允許預設匯入。", - "Default_library_1424": "預設程式庫", - "Default_library_for_target_0_1425": "目標 '{0}' 的預設程式庫", - "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "只有當 '--module' 旗標設定為 'esnext' 或 'preserve' 時,才支援延遲的匯入。", - "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "下列識別碼的定義與其他檔案中的定義衝突: {0}", - "Delete_all_unused_declarations_95024": "刪除所有未使用的宣告", - "Delete_all_unused_imports_95147": "刪除所有未使用的匯入", - "Delete_all_unused_param_tags_95172": "刪除所有未使用的 '@param' 標籤", - "Delete_the_outputs_of_all_projects_6365": "刪除所有專案的輸出。", - "Delete_unused_param_tag_0_95171": "刪除未使用的 '@param' 標記 '{0}'", - "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[即將淘汰] 請改用 '--jsxFactory'。當目標為 'react' JSX 發出時,為 createElement 指定所叫用的物件", - "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[即將淘汰] 請改用 '--outFile'。 串連輸出並將其發出到單一檔案", - "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[即將淘汰] 請改用 '--skipLibCheck'。跳過預設程式庫宣告檔案的類型檢查。", - "Deprecated_setting_Use_outFile_instead_6677": "已淘汰的設定值。請改用 'outFile'。", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", - "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", - "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", - "Did_you_forget_to_use_await_2773": "忘了要使用 'await' 嗎?", - "Did_you_mean_0_1369": "您指 '{0}' 嗎?", - "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "您是要將 '{0}' 限制為類型 'new (...args: any[]) => {1}' 嗎?", - "Did_you_mean_to_call_this_expression_6212": "您是要呼叫此運算式嗎?", - "Did_you_mean_to_mark_this_function_as_async_1356": "您是要將此函式標記為 'async' 嗎?", - "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "要使用 ':' 嗎? 當包含的物件常值是解構模式的一部分時,'=' 就只能位於屬性名稱後面。", - "Did_you_mean_to_use_new_with_this_expression_6213": "您是要對此運算式使用 'new' 嗎?", - "Digit_expected_1124": "必須是數字。", - "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目錄 '{0}' 不存在,將會跳過其中所有查閱。", - "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "目錄 '{0}' 不包含在 package.js 範圍內。將不會解析匯入。", - "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "停用在發出的 JavaScript 檔案中新增 'use strict' 指示詞。", - "Disable_checking_for_this_file_90018": "停用此檔案的檢查", - "Disable_emitting_comments_6688": "停用發出註解。", - "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "停用其 JSDoc 註解中具有 '@internal' 的發出宣告。", - "Disable_emitting_files_from_a_compilation_6660": "停用從編譯發出檔案。", - "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "如果報告任何型別檢查錯誤,則停用發出的檔案。", - "Disable_erasing_const_enum_declarations_in_generated_code_6682": "停用在產生的程式碼中抹除 'const enum' 宣告。", - "Disable_error_reporting_for_unreachable_code_6603": "停用無法執行到的程式碼錯誤報告。", - "Disable_error_reporting_for_unused_labels_6604": "停用未使用標籤的錯誤報表。", - "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "停用完整類型檢查 (只回報重要剖析和發出錯誤訊息)。", - "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "停用在編譯輸出中產生自訂的協助程式函式,例如 '__extends'。", - "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "停用包括任何程式庫檔案,包括預設的 lib.d.ts。", - "Disable_loading_referenced_projects_6235": "停用載入參考的專案。", - "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "參考複合專案時,停用偏好的來源檔案而不是宣告檔案。", - "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "在建立物件常值期間停用多餘屬性錯誤報告。", - "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "停用將 symlinks 解析為其 realpath。這與節點中的相同旗標有關。", - "Disable_size_limitations_on_JavaScript_projects_6162": "停用 JavaScript 專案的大小限制。", - "Disable_solution_searching_for_this_project_6224": "停用此專案的解決方案搜尋。", - "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "停用函式類型中一般簽章的 Strict 檢查。", - "Disable_the_type_acquisition_for_JavaScript_projects_6625": "停用 JavaScript 專案的類型取得", - "Disable_truncating_types_in_error_messages_6663": "停用錯誤訊息中的截斷類型。", - "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "停用來源檔案,而非所參考專案中的宣告檔案。", - "Disable_wiping_the_console_in_watch_mode_6684": "停用在監看模式中抹除主控台。", - "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "透過查看專案中的檔案名,停用型別推斷的取得。", - "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "不允許 import'、'require' 或 '' 擴充 TypeScript 應該加入專案的檔案數目。", - "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允許相同檔案大小寫不一致的參考。", - "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "不要在編譯後的檔案清單中新增三道斜線的參考或匯入的模組。", - "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "不允許不屬於ECMAScript一部分的運行時間建構。", - "Do_not_emit_comments_to_output_6009": "請勿將註解發出到輸出。", - "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "請勿發出包含 '@internal' 註釋的程式碼宣告。", - "Do_not_emit_outputs_6010": "請勿發出輸出。", - "Do_not_emit_outputs_if_any_errors_were_reported_6008": "如果回報了任何錯誤,即不發出輸出。", - "Do_not_emit_use_strict_directives_in_module_output_6112": "請勿在模組輸出中發出 'use strict' 指示詞。", - "Do_not_erase_const_enum_declarations_in_generated_code_6007": "請勿清除產生之程式碼中的 const 列舉宣告。", - "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "不要在編譯後的輸出中產生自訂的協助程式函式,例如 '__extends'。", - "Do_not_include_the_default_library_file_lib_d_ts_6158": "不要包含預設程式庫檔案 (lib.d.ts)。", - "Do_not_print_diagnostics_6933": "Do not print diagnostics.", - "Do_not_report_errors_on_unreachable_code_6077": "請勿回報無法執行到之程式碼的錯誤。", - "Do_not_report_errors_on_unused_labels_6074": "請勿回報未使用之標籤的錯誤。", - "Do_not_resolve_the_real_path_of_symlinks_6013": "請勿解析符號連結的真實路徑。", - "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "請勿轉換或省略任何未標示為僅限類型的匯入或匯出,請確保其是以輸出檔案的格式並根據 'module' 設定所撰寫。", - "Do_not_truncate_error_messages_6165": "不要截斷錯誤訊息。", - "Duplicate_function_implementation_2393": "函式實作重複。", - "Duplicate_identifier_0_2300": "識別碼 '{0}' 重複。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在模組的最上層範圍中。", - "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在含有非同步函式模組的最上層範圍中。", - "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別碼 '{0}' 重複。在靜態初始設定式中發出 'super' 參考時,編譯器會保留名稱 '{1}'。", - "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別碼 '{0}' 重複。編譯器會使用宣告 '{1}' 支援非同步函式。", - "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "重複的識別碼 '{0}'。靜態與執行個體元素不得共用相同的私人名稱。", - "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別碼 'arguments'' 重複。編譯器會使用 'arguments' 來初始化剩餘參數。", - "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別碼 '_newTarget' 重複。編譯器使用變數宣告 '_newTarget' 擷取 'new.target' 中繼屬性參考。", - "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別碼 '_this' 重複。編譯器會使用變數宣告 '_this' 來擷取 'this' 參考。", - "Duplicate_index_signature_for_type_0_2374": "類型 '{0}' 的索引簽章重複。", - "Duplicate_label_0_1114": "標籤 '{0}' 重複。", - "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", - "Duplicate_property_0_2718": "屬性 '{0}' 重複。", - "Duplicate_regular_expression_flag_1500": "重複的規則運算式旗標。", - "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動態匯入的指定名稱必須屬於類型 'string',但這裡的類型為 '{0}'。", - "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "只有在 '--module' 旗標設定為 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'node18'、'node20' 或 'nodenext',才支援動態匯入。", - "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動態匯入只接受模組指定名稱和一系列選擇性屬性來做為引數", - "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "當 '--module' 選項設定為 'esnext'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve' 時,動態匯入只支援第二個引數。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "無法在 'verbatimModuleSyntax' 底下的 CommonJS 檔案中撰寫 ECMAScript 匯入和匯出。", - "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "無法在 'verbatimModuleSyntax' 底下的 CommonJS 檔案中撰寫 ECMAScript 匯入和匯出。請調整最近的 'package.json' 中的 'type' 欄位,將此檔案設為 ECMAScript 模組,或調整 TypeScript 中的 'verbatimModuleSyntax'、'module' 和 'moduleResolution' 設定。", - "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "當 'module' 設定為 'preserve' 時,CommonJS 模組中不允許 ECMAScript 模組語法。", - "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' 的每個宣告值不同,其中應該要有 '{2}',但只包含 '{3}'。", - "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "等位型別 '{0}' 的每個成員都有建構簽章,但這些簽章都互不相容。", - "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "等位型別 '{0}' 的每個成員都有簽章,但這些簽章都互不相容。", - "Editor_Support_6249": "編輯器支援", - "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "因為 '{0}' 類型的運算式無法用於索引類型 '{1}',所以項目隱含 'any' 類型。", - "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "因為索引運算式不屬於類型 'number',所以元素具有隱含 'any' 類型。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隱含地擁有 'any' 類型,因為類型 '{0}' 不具索引簽章。", - "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "因為類型 '{0}' 沒有索引簽章,所以項目隱含 'any' 類型。您是要呼叫 '{1}' 嗎?", - "Emit_6246": "發出", - "Emit_ECMAScript_standard_compliant_class_fields_6712": "發出 ECMAScript 標準相容類別欄位。", - "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在輸出檔的開頭發出 UTF-8 位元組順序標記 (BOM)。", - "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "發出單一檔案包含來源對應,而不要使用個別的檔案。", - "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "發出用於偵錯的編譯器執行 v8 CPU 設定檔。", - "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "發出其他 JavaScript,以輕鬆支援匯入 CommonJS 模組。這會啟用 'allowSyntheticDefaultImports' 進行類型相容性。", - "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而非 Set 發出類別欄位。", - "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "發出來源檔案中修飾式宣告的設計型別中繼資料。", - "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "針對反覆項目發出更符合規範,但具詳細資訊及較低效能 JavaScript。", - "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "使用單一檔案發出來源與來源對應。必須設定 '--inlineSourceMap' 或 '--sourceMap'。", - "Enable_all_strict_type_checking_options_6180": "啟用所有 Strict 類型檢查選項。", - "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "在 TypeScript 的輸出中啟用色彩及格式化,讓編譯器錯誤更容易閱讀。", - "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "啟用允許 TypeScript 專案搭配專案參考使用的條件約束。", - "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "啟用未在函式中明確傳回之 codepaths 的錯誤報吿。", - "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "啟用具有隱含 'any' 類型的運算式及宣告之錯誤報告。", - "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "啟用 switch 陳述式中 fallthrough 案例的錯誤報表。", - "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已完成型別檢查的 JavaScript 檔案中啟用錯誤報表。", - "Enable_error_reporting_when_local_variables_aren_t_read_6675": "當未讀取區域變數時,啟用錯誤報吿。", - "Enable_error_reporting_when_this_is_given_the_type_any_6668": "為 'this' 指定類型 'any' 時,啟用錯誤報表。", - "Enable_experimental_support_for_legacy_experimental_decorators_6630": "啟用舊版實驗性裝飾項目的實驗性支援。", - "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "啟用匯入具有任何延伸模組的檔案,並存在宣告檔案即可。", - "Enable_importing_json_files_6689": "啟用匯入 json 檔案。", - "Enable_lib_replacement_6808": "啟用連結庫取代。", - "Enable_project_compilation_6302": "啟用專案編譯", - "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "對函式啟用嚴格的 'bind'、'call' 及 'apply' 方法。", - "Enable_strict_checking_of_function_types_6186": "啟用嚴格檢查函式類型。", - "Enable_strict_checking_of_property_initialization_in_classes_6187": "啟用類別中屬性初始化的 strict 檢查。", - "Enable_strict_null_checks_6113": "啟用嚴格 null 檢查。", - "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在您的組態檔中啟用 'experimentalDecorators' 選項", - "Enable_the_jsx_flag_in_your_configuration_file_95088": "在您的組態檔中啟用 '--jsx' 旗標", - "Enable_tracing_of_the_name_resolution_process_6085": "啟用名稱解析流程的追蹤。", - "Enable_verbose_logging_6713": "啟用詳細資訊記錄。", - "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "透過為所有匯入建立命名空間物件,讓 CommonJS 和 ES 模組之間的產出有互通性。意指 'allowSyntheticDefaultImports'。", - "Enables_experimental_support_for_ES7_decorators_6065": "啟用 ES7 裝飾項目的實驗支援。", - "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "啟用實驗支援以發出裝飾項目類型的中繼資料。", - "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "對使用索引型別宣告的索引鍵強制使用索引存取子。", - "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "請確認衍生類別中的覆寫成員已標上 override 修飾元。", - "Ensure_that_casing_is_correct_in_imports_6637": "請確認 Imports 中的大小寫正確。", - "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "確保每個檔案都可安全地轉譯,而不依賴其他匯入。", - "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", - "Ensure_use_strict_is_always_emitted_6605": "確保永遠發出 'use strict'。", - "Entering_conditional_exports_6413": "正在進入條件式匯出。", - "Entry_point_for_implicit_type_library_0_1420": "隱含型別程式庫 '{0}' 的進入點", - "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "具有 packageId '{1}' 的隱含型別程式庫 '{0}' 進入點", - "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", - "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "具有 packageId '{1}' 且在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", - "Enum_0_used_before_its_declaration_2450": "列舉 '{0}' 的位置在其宣告之前。", - "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列舉宣告只能與命名空間或其他列舉宣告合併。", - "Enum_declarations_must_all_be_const_or_non_const_2473": "列舉宣告必須都是 const 或非 const。", - "Enum_member_expected_1132": "必須是列舉成員。", - "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "啟用 'isolatedModules' 時,跟隨非常值數值成員的列舉成員必須有初始設定式。", - "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列舉成員初始設定式必須是可計算,且不參考具有 --isolatedDeclarations 的外部符號。", - "Enum_member_must_have_initializer_1061": "列舉成員必須有初始設定式。", - "Enum_name_cannot_be_0_2431": "列舉名稱不得為 '{0}'。", - "Environment_Settings_6285": "環境設定", - "Errors_Files_6041": "錯誤檔案", - "Escape_sequence_0_is_not_allowed_1488": "不允許逸出序列 '{0}'。", - "Examples_Colon_0_6026": "範例: {0}", - "Excessive_complexity_comparing_types_0_and_1_2859": "過度複雜性比較類型 '{0}' 和 '{1}'。", - "Excessive_stack_depth_comparing_types_0_and_1_2321": "比較類型 '{0}' 與 '{1}' 的堆疊深度過深。", - "Exiting_conditional_exports_6416": "正在退出條件式匯出。", - "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "必須是 {0}-{1} 型別引數; 請提供有 '@ extends' 標記的這類型引數。", - "Expected_0_arguments_but_got_1_2554": "應有 {0} 個引數,但得到 {1} 個。", - "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "應為 {0} 個引數,但現有 {1} 個。是否忘記將型別引數中的 'void' 納入 'Promise' 中?", - "Expected_0_type_arguments_but_got_1_2558": "應有 {0} 個型別引數,但得到 {1} 個。", - "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "必須是 {0} 型別引數; 請提供有 '@ extends' 標記的這類引數。", - "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "需要 1 個引數,但得到 0。'new Promise()' 需要 JSDoc 提示,才能產生可以呼叫而不含引數的 'resolve'。", - "Expected_a_Unicode_property_name_1523": "必須是 Unicode 屬性名稱。", - "Expected_a_Unicode_property_name_or_value_1527": "必須是 Unicode 屬性名稱或值。", - "Expected_a_Unicode_property_value_1525": "必須是 Unicode 屬性值。", - "Expected_a_capturing_group_name_1514": "必須是擷取群組名稱。", - "Expected_a_class_set_operand_1520": "必須是類別集運算元。", - "Expected_at_least_0_arguments_but_got_1_2555": "至少應有 {0} 個引數,但得到 {1} 個。", - "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' 需要對應的 JSX 結尾標記。", - "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 片段必須有對應的結尾標記。", - "Expected_for_property_initializer_1442": "屬性初始設定式必須是 '='。", - "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "在 'package.json' 中 '{0}' 欄位的類型必須為 '{1}',但取得 '{2}'。", - "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明確指定的模組解析種類: '{0}'。", - "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 選項必須設定為 'es2016' 或更新版本,才可以對 'bigint' 值執行乘冪運算。", - "Export_0_from_module_1_90059": "從模組 '{1}' 匯出 '{0}'", - "Export_all_referenced_locals_90060": "匯出所有參考的本機", - "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "當目標為 ECMAScript 模組時,無法使用匯出指派。請考慮改用 'export default' 或其他模組格式。", - "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "當 '--module' 旗標為 'system' 時,不支援匯出指派。", - "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "匯出宣告與匯出的 '{0}' 宣告相衝突。", - "Export_declarations_are_not_permitted_in_a_namespace_1194": "在命名空間中不可使用匯出宣告。", - "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "在路徑 '{0}' 的 package.js 範圍中不存在匯出指定名稱 '{1}'。", - "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "匯出的類型別名 '{0}' 具有或使用私用名稱 '{1}'。", - "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "匯出的類型別名 '{0}' 具有或使用模組 {2} 中的私人名稱 '{1}'。", - "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "匯出的變數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "匯出的變數 '{0}' 具有或使用私用模組 {2} 中的名稱 '{1}'。", - "Exported_variable_0_has_or_is_using_private_name_1_4025": "匯出的變數 '{0}' 具有或使用私用名稱 '{1}'。", - "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模組增強指定中不允許匯出及匯出指派。", - "Expression_expected_1109": "必須是運算式。", - "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表達式必須包含在括弧內,才能做為裝飾項目使用。", - "Expression_or_comma_expected_1137": "必須是運算式或逗號。", - "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "運算式產生的元組類型太大而無法表示。", - "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "運算式產生的等位型別過於複雜而無法表示。", - "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "運算式會解析成 '_super',而編譯器會使用其來擷取基底類別參考。", - "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "運算式將解析成變數宣告 '_newTarget',而供編譯器用來擷取 'new.target' 中繼屬性參考。", - "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "運算式會解析成變數宣告 '_this',而編譯器會使用此宣告來擷取 'this' 參考 。", - "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "無法使用 --isolatedDeclarations 推斷運算式類型。", - "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "擴充子句不能包含具有 --isolatedDeclarations 的運算式。", - "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推斷類型 '{0}' 的 'Extends' 子句包含或使用了私人名稱 '{1}'。", - "Extract_base_class_to_variable_90064": "擷取基底類別至變數", - "Extract_binding_expressions_to_variable_90066": "將繫結運算式擷取至變數", - "Extract_constant_95006": "擷取常數", - "Extract_default_export_to_variable_90065": "擷取預設匯出至變數", - "Extract_function_95005": "擷取函式", - "Extract_to_0_in_1_95004": "擷取至 {1} 中的 {0}", - "Extract_to_0_in_1_scope_95008": "擷取至 {1} 範圍中的 {0}", - "Extract_to_0_in_enclosing_scope_95007": "擷取至封閉式範圍中的 {0}", - "Extract_to_interface_95090": "擷取至介面", - "Extract_to_type_alias_95078": "擷取至類型別名", - "Extract_to_typedef_95079": "擷取至 typedef", - "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "擷取至變數,並以 '{0} as typeof {0}' 取代", - "Extract_type_95077": "擷取類型", - "FILE_6035": "檔案", - "FILE_OR_DIRECTORY_6040": "檔案或目錄", - "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", - "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency '{0}'。", - "Failed_to_resolve_under_condition_0_6415": "在條件 '{0}' 下解析失敗。", - "Fallthrough_case_in_switch_7029": "參數中的 fallthrough 案例。", - "File_0_does_not_exist_6096": "檔案 '{0}' 不存在。", - "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根據之前快取的查閱,檔案 '{0}' 不存在。", - "File_0_exists_according_to_earlier_cached_lookups_6239": "根據之前快取的查閱,檔案 '{0}' 存在。", - "File_0_exists_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其做為名稱解析結果使用。", - "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "不支援檔案 '{0}' 的副檔名。支援的副檔名只有 {1}。", - "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "檔案 '{0}' 為 JavaScript 檔案。您是要啟用 'allowJs' 選項嗎?", - "File_0_is_not_a_module_2306": "檔案 '{0}' 不是模組。", - "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "檔案 '{0}' 未列於專案 '{1}' 的檔案清單內。專案必須列出所有檔案,或使用 'include' 模式。", - "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "檔案 '{0}' 不在 'rootDir' '{1}' 之下。'rootDir' 必須包含所有原始程式檔。", - "File_0_not_found_6053": "找不到檔案 '{0}'。", - "File_Layout_6284": "檔案配置", - "File_Management_6245": "檔案管理", - "File_appears_to_be_binary_1490": "檔案顯示為二進位。", - "File_change_detected_Starting_incremental_compilation_6032": "偵測到檔案變更。正在啟動累加編譯...", - "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "檔案是 CommonJS 模組,因為 '{0}' 沒有 \"type\" 欄位", - "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "檔案是 CommonJS 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", - "File_is_CommonJS_module_because_package_json_was_not_found_1461": "檔案是 CommonJS 模組,因為找不到 'package.json'", - "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "檔案是 ECMAScript 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", - "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "檔案為 CommonJS 模組; 其可轉換為 ES 模組。", - "File_is_default_library_for_target_specified_here_1426": "檔案是此處指定目標的預設程式庫。", - "File_is_entry_point_of_type_library_specified_here_1419": "檔案是此處指定型別程式庫的進入點。", - "File_is_included_via_import_here_1399": "檔案透過匯入加入此處。", - "File_is_included_via_library_reference_here_1406": "檔案透過程式庫參考加入此處。", - "File_is_included_via_reference_here_1401": "檔案透過參考加入此處。", - "File_is_included_via_type_library_reference_here_1404": "檔案透過型別程式庫參考加入此處。", - "File_is_library_specified_here_1423": "檔案是此處指定的程式庫。", - "File_is_matched_by_files_list_specified_here_1410": "檔案會依此處指定的 'files' 清單比對。", - "File_is_matched_by_include_pattern_specified_here_1408": "檔案會依此處指定的包含模式比對。", - "File_is_output_from_referenced_project_specified_here_1413": "檔案是此處指定的參考專案輸出。", - "File_is_output_of_project_reference_source_0_1428": "檔案是專案參考來源 '{0}' 的輸出", - "File_is_source_from_referenced_project_specified_here_1416": "檔案是此處指定參考專案的來源。", - "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "檔案名稱 '{0}' 與包含的檔案名稱 '{1}' 只差在大小寫。", - "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "檔案名稱 '{0}' 具有 '{1}' 延伸模組 - 改為查詢 '{2}'。", - "File_name_0_has_a_1_extension_stripping_it_6132": "檔案名稱 '{0}' 的副檔名為 '{1}'。正予以移除。", - "File_redirects_to_file_0_1429": "檔案會重新導向檔案 '{0}'", - "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", - "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "檔案規格不得包含出現在遞迴目錄萬用字元 ('**') 之後的父目錄 ('..'): '{0}'。", - "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "檔案規格不能以遞迴目錄萬用字元 ('**') 結尾: '{0}'。", - "Filters_results_from_the_include_option_6627": "從 `include` 選項篩選結果。", - "Fix_All_95205": "Fix All", - "Fix_all_detected_spelling_errors_95026": "修正偵測到的所有拼字錯誤", - "Fix_all_expressions_possibly_missing_await_95085": "修正所有可能缺少 'await' 的運算式", - "Fix_all_implicit_this_errors_95107": "修正所有隱含 'this' 的錯誤", - "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修正非同步函式所有不正確的傳回型別", - "Fix_all_with_type_only_imports_95182": "使用僅限類型匯入來修正所有問題", - "For_nodejs_Colon_6287": "針對 nodejs:", - "Found_0_errors_6217": "找到 {0} 個錯誤。", - "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 個錯誤。正在監看檔案變更。", - "Found_0_errors_in_1_files_6261": "在 {1} 檔案中發現 {0} 個錯誤。", - "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一個檔案中發現 {0} 個錯誤,開始位置: {1}", - "Found_1_error_6216": "找到 1 個錯誤。", - "Found_1_error_Watching_for_file_changes_6193": "找到 1 個錯誤。正在監看檔案變更。", - "Found_1_error_in_0_6259": "在 {0} 找到 1 個錯誤", - "Found_package_json_at_0_6099": "在 '{0}' 找到 'package.json'。", - "Found_peerDependency_0_with_1_version_6282": "找到版本為 '{1}' 的 peerDependency '{0}'。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。類別定義會自動進入 strict 模式。", - "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。模組會自動進入 strict 模式。", - "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少傳回型別註解的函式運算式隱含了 '{0}' 傳回型別。", - "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "遺漏函式實作,或函式實作未緊接在宣告之後。", - "Function_implementation_name_must_be_0_2389": "函式實作名稱必須是 '{0}'。", - "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "函式因為沒有傳回型別註解,並在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", - "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函式缺少結束 return 陳述式,且傳回類型不包括 'undefined'。", - "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函式必須有具備 --isolatedDeclarations 的明確傳回型別註解。", - "Function_not_implemented_95159": "未實作函式。", - "Function_overload_must_be_static_2387": "函式多載必須為靜態。", - "Function_overload_must_not_be_static_2388": "函式多載不可為靜態。", - "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在等位型別中使用函式類型標記法時,必須括以括弧。", - "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在交集型別中使用函式類型標記法時,必須括以括弧。", - "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少傳回型別註解的函式類型隱含 '{0}' 傳回型別。", - "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "包含主體的函式只能與屬於環境的類別合併。", - "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "從專案中的 TypeScript 和 JavaScript 檔案產生 .d.ts 檔案。", - "Generate_get_and_set_accessors_95046": "產生 'get' 與 'set' 存取子", - "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "為所有覆寫屬性產生 'get' 和 'set' 存取子", - "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", - "Generates_a_CPU_profile_6223": "產生 CPU 設定檔。", - "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "為每個相對應的 '.d.ts' 檔案產生 sourcemap。", - "Generates_an_event_trace_and_a_list_of_types_6237": "產生事件追蹤與類型清單。", - "Generates_corresponding_d_ts_file_6002": "產生對應的 '.d.ts' 檔案。", - "Generates_corresponding_map_file_6043": "產生對應的 '.map' 檔案。", - "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "產生器隱含的 yield 類型為 '{0}'。請考慮提供傳回型別註解。", - "Generators_are_not_allowed_in_an_ambient_context_1221": "環境內容中不允許產生器。", - "Generic_type_0_requires_1_type_argument_s_2314": "泛型類型 '{0}' 需要 {1} 個型別引數。", - "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型型別 '{0}' 需要介於 {1} 和 {2} 之間的型別引數。", - "Global_module_exports_may_only_appear_at_top_level_1316": "全域模組匯出只能顯示在最上層。", - "Global_module_exports_may_only_appear_in_declaration_files_1315": "全域模組匯出只能顯示在宣告檔案中。", - "Global_module_exports_may_only_appear_in_module_files_1314": "全域模組匯出只能顯示在模組檔案中。", - "Global_type_0_must_be_a_class_or_interface_type_2316": "全域類型 '{0}' 必須是類別或介面類型。", - "Global_type_0_must_have_1_type_parameter_s_2317": "全域類型 '{0}' 必須要有 {1} 個型別參數。", - "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "於 '--incremental' 與 '--watch' 中重新編譯時,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", - "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 'incremental' 與 'watch' 模式的專案中重新編譯,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", - "Hexadecimal_digit_expected_1125": "必須適十六進位數字。", - "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "需要識別碼。'{0}' 是模組的頂層保留字。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "必須是識別碼。'{0}' 在 strict 模式中為保留字。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "必須是識別碼。'{0}' 是 strict 模式中的保留字。類別定義會自動採用 strict 模式。", - "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "需要識別碼。'{0}' 是 strict 模式中的保留字。模組會自動採用 strict 模式。", - "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "必須為識別碼。'{0}' 為保留字,此處不可使用。", - "Identifier_expected_1003": "必須是識別碼。", - "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "必須有識別碼。'__esModule' 已保留為轉換 ECMAScript 模組時匯出的標記。", - "Identifier_or_string_literal_expected_1478": "需要識別碼或字串常值。", - "Identifier_string_literal_or_number_literal_expected_1496": "必須是識別碼、字串常值或數字常值。", - "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果「{0}」套件實際上公開了此模組,請考慮傳送提取要求以修改 「https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}」", - "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果 '{0}' 套件的確公開了此模組,請嘗試新增包含 `declare module '{1}';` 的宣告 (.d.ts) 檔案。", - "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", - "Ignore_this_error_message_90019": "略過此錯誤訊息", - "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用預設編譯器選項編譯指定的檔案。", - "Implement_all_inherited_abstract_classes_95040": "實作所有繼承的抽象類別", - "Implement_all_unimplemented_interfaces_95032": "實作所有未實作的介面", - "Implement_inherited_abstract_class_90007": "實作已繼承的抽象類別", - "Implement_interface_0_90006": "實作介面 '{0}'", - "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "匯出類別 '{0}' 的 Implements 子句具有或使用私用名稱 '{1}'。", - "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "在執行階段中無法將 'symbol' 隱含轉換為 'string'。請考慮將此運算式包裝在 'String(...)' 中。", - "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "匯入 '{0}' 會與此檔案中使用的全域值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", - "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "匯入 '{0}' 會與本機值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", - "Import_0_from_1_90013": "從 \"{1}\" 匯入 '{0}'", - "Import_assertion_values_must_be_string_literal_expressions_2837": "匯入判斷提示值必須是字串常值運算式。", - "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入判斷提示。", - "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve' 時,才支援匯入判斷提示。", - "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "匯入判斷提示不能與僅限類型的匯入或匯出搭配使用。", - "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "匯入宣告已由匯入屬性取代。使用 『with』 而非 'assert'。", - "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "當目標為 ECMAScript 模組時,無法使用匯入指派。請考慮改用 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' 或其他模組格式。", - "Import_attribute_values_must_be_string_literal_expressions_2858": "匯入屬性值必須是字串常值運算式。", - "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", - "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入屬性。", - "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve’ 時,才支援匯入屬性。", - "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "匯入屬性不能與僅限類型的匯入或匯出搭配使用。", - "Import_declaration_0_is_using_private_name_1_4000": "匯入宣告 '{0}' 使用私用名稱 '{1}'。", - "Import_declaration_conflicts_with_local_declaration_of_0_2440": "匯入宣告與 '{0}' 的區域宣告衝突。", - "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空間中的匯入宣告不得參考模組。", - "Import_emit_helpers_from_tslib_6139": "從 'tslib' 匯入發出協助程式。", - "Import_may_be_converted_to_a_default_import_80003": "匯入可轉換成預設匯入。", - "Import_name_cannot_be_0_2438": "匯入名稱不得為 '{0}'。", - "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "環境模組宣告中的匯入或匯出宣告,不得透過相對模組名稱參考模組。", - "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "在路徑 '{0}' 的 package.js 範圍中不存在匯入指定名稱 '{1}'。", - "Imported_via_0_from_file_1_1393": "透過 {0} 從檔案 '{1}' 匯入", - "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "透過 {0} 從檔案 '{1}' 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", - "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "透過 {0} 從檔案 '{1}' 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", - "Imported_via_0_from_file_1_with_packageId_2_1394": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入", - "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", - "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", - "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "當 'module' 設定為 '{0}' 時,匯入 JSON 檔案至 ECMAScript 模組需要 'type: \"json\"' 匯入屬性。", - "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模組增強指定中不允許匯入。請考慮將其移至封入外部模組。", - "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在環境列舉宣告中,成員初始設定式必須是常數運算式。", - "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在具有多個宣告的列舉中,只有一個宣告可以在其第一個列舉項目中省略初始設定式。", - "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含檔案的清單。這不支援 Glob 模式,與 `include` 相反。", - "Include_modules_imported_with_json_extension_6197": "包含匯入有 '.json' 延伸模組的模組", - "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在發出 JavaScript 內的 sourcemap 中包含原始程式碼。", - "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在發出的 JavaScript 中包含 sourcemap 檔案。", - "Includes_imports_of_types_referenced_by_0_90054": "包括 '{0}' 參考的類型匯入", - "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch、-w 會開始監看目前專案是否有檔案變更。設定之後,您便可以使用以下來設定監看式模式:", - "Incomplete_quantifier_Digit_expected_1505": "不完整的數量詞。必須是數字。", - "Index_signature_for_type_0_is_missing_in_type_1_2329": "類型 '{0}' 的索引簽章在類型 '{1}' 中遺失。", - "Index_signature_in_type_0_only_permits_reading_2542": "類型 '{0}' 中的索引簽章只允許讀取。", - "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合併宣告 '{0}' 中的個別宣告必須全部匯出或全在本機上。", - "Infer_all_types_from_usage_95023": "從用法推斷所有類型", - "Infer_function_return_type_95148": "推斷函式傳回型別", - "Infer_parameter_types_from_usage_95012": "從使用方式推斷參數類型", - "Infer_this_type_of_0_from_usage_95080": "從使用方式推斷 '{0}' 的 'this' 類型", - "Infer_type_of_0_from_usage_95011": "從使用方式推斷 '{0}' 的類型", - "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支援來自類別運算式的推斷。", - "Initialize_property_0_in_the_constructor_90020": "將建構函式中的屬性 '{0}' 初始化", - "Initialize_static_property_0_90021": "將靜態屬性 '{0}' 初始化", - "Initializer_for_property_0_2811": "屬性 '{0}' 的初始設定式", - "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "執行個體成員變數 '{0}' 的初始設定式不得參考建構函式中所宣告的識別碼 '{1}'。", - "Initializers_are_not_allowed_in_ambient_contexts_1039": "環境內容中不得有初始設定式。", - "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 專案並建立 tsconfig.json 檔案。", - "Inline_variable_95184": "內嵌變數", - "Insert_command_line_options_and_files_from_a_file_6030": "從檔案插入命令列選項與檔案。", - "Install_0_95014": "安裝 '{0}'", - "Install_all_missing_types_packages_95033": "安裝缺少的所有類型套件", - "Installing_types_for_0_95203": "Installing types for '{0}'", - "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", - "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", - "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "介面 '{0}' 不能同時擴充類型 '{1}' 和 '{2}'。", - "Interface_0_incorrectly_extends_interface_1_2430": "介面 '{0}' 不正確地擴充介面 '{1}'。", - "Interface_declaration_cannot_have_implements_clause_1176": "介面宣告不能有 'implements' 子句。", - "Interface_must_be_given_a_name_1438": "必須為介面指定名稱。", - "Interface_name_cannot_be_0_2427": "介面名稱不得為 '{0}'。", - "Interop_Constraints_6252": "Interop 條件約束", - "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "將選用屬性類型解譯為寫入,而非新增 'undefined'。", - "Invalid_character_1127": "無效的字元。", - "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "無效的匯入指定名稱 '{0}' 沒有可能的解決方法。", - "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "增強中的模組名稱無效。模組 '{0}' 於 '{1}' 解析至不具類型的模組,其無法擴增。", - "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "增強指定中的模組名稱無效,找不到模組 '{0}'。", - "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新運算式的選擇性鏈結無效。您想要呼叫 '{0}()' 嗎?", - "Invalid_reference_directive_syntax_1084": "無效的 'reference' 指示詞語法。", - "Invalid_syntax_in_decorator_1498": "裝飾項目中無效的語法。", - "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' 的使用無效。不能在類別靜態區塊內使用。", - "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' 的用法無效。模組會自動採用 strict 模式。", - "Invalid_use_of_0_in_strict_mode_1100": "在 strict 模式中使用 '{0}' 無效。", - "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' 的值無效。", - "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", - "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", - "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' 的值無效。'{0}' 不是有效的識別碼。", - "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "可能是未使用逗號分隔這兩個範本運算式,因而形成了附加標籤的範本運算式,導致無法叫用。", - "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素類型 '{0}' 不是有效的 JSX 元素。", - "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其執行個體類型 '{0}' 不是有效的 JSX 元素。", - "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其傳回型別 '{0}' 不是有效的 JSX 元素。", - "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其類型 '{0}' 不是有效的 JSX 元素類型。", - "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' 不符合 'extends {2}' 子句。", - "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc ''@{0}' 未連結到類別。", - "JSDoc_comment_95209": "JSDoc comment", - "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' 只能出現在特徵標記的最後一個參數中。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 標記的名稱為 '{0}',但沒有為該名稱的參數。", - "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 標籤的名稱為 '{0}',但沒有任何參數使用該名稱。如有陣列類型,則會與 'arguments' 相符。", - "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以轉換成 TypeScript 類型。", - "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 標記應具有類型註解,或者其後接著 '@property' 或 '@member' 標記。", - "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs 可以轉換成 TypeScript 類型。", - "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 類型只能在文件註解中使用。", - "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 類型可移為 TypeScript 類型。", - "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能將非空白的 'expression' 指派給 JSX 屬性。", - "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 元素 '{0}' 沒有對應的結尾標記。", - "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "因為 JSX 項目類別沒有 '{0}' 屬性 (property),所以不支援屬性 (attribute)。", - "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "因為沒有介面 'JSX.{0}',表示 JSX 項目隱含了類型 'any'。", - "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "因為全域類型 'JSX.Element' 不存在,所以 JSX 項目隱含有類型 'any'。", - "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 項目類型 '{0}' 沒有任何建構或呼叫簽章。", - "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 項目不得有多個同名的屬性。", - "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 運算式不可使用逗號運算子。您是要寫入陣列嗎?", - "JSX_expressions_must_have_one_parent_element_2657": "JSX 運算式必須具有一個父元素。", - "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段沒有對應的結尾標記。", - "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 屬性存取運算式不能包含 JSX 命名空間名稱", - "JSX_spread_child_must_be_an_array_type_2609": "JSX 擴張子系必須為陣列類型。", - "JavaScript_Support_6247": "JavaScript 支援", - "Jump_target_cannot_cross_function_boundary_1107": "跳躍目標不得跨越函式界限。", - "KIND_6034": "類型", - "Keywords_cannot_contain_escape_characters_1260": "關鍵字不可包含逸出字元。", - "LOCATION_6037": "位置", - "Language_and_Environment_6254": "語言及環境", - "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗號運算子左側未使用,而且沒有任何不良影響。", - "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定的程式庫 '{0}'", - "Library_referenced_via_0_from_file_1_1405": "透過 '{0}' 從檔案 '{1}' 參考的程式庫", - "Line_break_not_permitted_here_1142": "這裡不可使用分行符號。", - "Line_terminator_not_permitted_before_arrow_1200": "箭號前不得有行結束字元。", - "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "解析模組時要搜尋的檔案名尾碼清單。", - "List_of_folders_to_include_type_definitions_from_6161": "要包含之類型定義所屬資料夾的清單。", - "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "資料夾的清單。這些資料夾內所含的合併內容代表了專案在執行階段時的結果。", - "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在從根目錄 '{1}',候選位置 '{2}' 載入 '{0}'。", - "Loading_95202": "Loading", - "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型: {1}。", - "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型: {1}。", - "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", - "Log_paths_used_during_the_moduleResolution_process_6706": "在 'moduleResolution' 處理序期間使用的記錄檔路徑。", - "Longest_matching_prefix_for_0_is_1_6108": "符合 '{0}' 的前置詞最長為 '{1}'。", - "Looking_up_in_node_modules_folder_initial_location_0_6125": "目前正在 'node_modules' 資料夾中查詢,初始位置為 '{0}'。", - "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "在其建構函式的第一個陳述式中呼叫所有的 'super()'", - "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "僅讓 keyof 傳回字串,而不是單一字串、數字或符號。舊版選項。", - "Make_super_call_the_first_statement_in_the_constructor_90002": "使 'super()' 呼叫成為建構函式中的第一個陳述式", - "Mapped_object_type_implicitly_has_an_any_template_type_7039": "對應的物件類型隱含具有 'any' 範本類型。", - "Mark_array_literal_as_const_90070": "標記陣列常值為常數", - "Matched_0_condition_1_6403": "符合 '{0}' 條件 '{1}'。", - "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "依預設比對包含模式 '**/*'", - "Matched_by_include_pattern_0_in_1_1407": "依 '{1}' 中的包含模式 '{0}' 比對", - "Member_0_implicitly_has_an_1_type_7008": "成員 '{0}' 隱含了 '{1}' 類型。", - "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成員 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", - "Merge_conflict_marker_encountered_1185": "偵測到合併衝突標記。", - "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "合併宣告 '{0}' 不得包含預設匯出宣告。請考慮改為加入獨立型 'export default {0}' 宣告。", - "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "只有函式宣告、函式運算式或建構函式的主體中允許中繼屬性 '{0}'。", - "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "因為方法 '{0}' 已標記為抽象,所以不可具有實作。", - "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "匯出介面的方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", - "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "匯出介面的方法 '{0}' 具有或使用私用名稱 '{1}'。", - "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必須有具備 --isolatedDeclarations 的明確傳回型別註解。", - "Method_not_implemented_95158": "未實作方法。", - "Modifiers_cannot_appear_here_1184": "此處不得出現修飾元。", - "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模組 '{0}' 只能依預設使用 '{1}' 旗標匯入", - "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "無法使用此建構匯入模組 '{0}'。指定名稱只能解析成無法以 'require' 匯入的 ES 模組。請改為使用 ECMAScript 匯入。", - "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模組 '{0}' 區域性地宣告 '{1}',但卻將該模組匯出為 '{2}'。", - "Module_0_declares_1_locally_but_it_is_not_exported_2459": "模組 '{0}' 區域性地宣告 '{1}',但並未匯出該模組。", - "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "模組 '{0}' 不是類型,但在此處卻作為類型使用。您是指 'typeof import('{0}')' 嗎?", - "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "模組 '{0}' 未參考任何值,但在此用為值。", - "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "模組 {0} 已匯出名為 '{1}' 的成員。請考慮明確重新匯出項目以解決模稜兩可的情形。", - "Module_0_has_no_default_export_1192": "模組 '{0}' 沒有預設匯出。", - "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "模組 '{0}' 沒有預設匯出。您是要改用 'import { {1} } from {0}' 嗎?", - "Module_0_has_no_exported_member_1_2305": "模組 '{0}' 沒有匯出的成員 '{1}'。", - "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模組 '{0}' 沒有匯出的成員 '{1}'。您是要改用 'import {1} from {0}' 嗎?", - "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "同名的區域宣告隱藏了模組 '{0}'。", - "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模組 '{0}' 使用 'export =',因而無法以 'export *' 的方式使用。", - "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模組 '{0}' 在檔案 '{1}' 中已解析為本機宣告的環境模組。", - "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模組 '{0}' 已解析為 '{1}',但是尚未設定 '--allowArbitraryExtensions'。", - "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模組 '{0}' 已解析為 '{1}',但未設定 '--jsx'。", - "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模組 '{0}' 已解析為 '{1}',但未使用 '--resolveJsonModule'。", - "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模組宣告名稱只能使用 ' 或 \" 引用的字串。", - "Module_name_0_matched_pattern_1_6092": "模組名稱 '{0}',符合的模式 '{1}'。", - "Module_name_0_was_not_resolved_6090": "======== 模組名稱 '{0}' 未解析。========", - "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模組名稱 '{0}' 已成功解析為 '{1}'。========", - "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模組名稱 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}'。========", - "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模組解析種類,將使用 '{0}'。", - "Module_resolution_using_rootDirs_has_failed_6111": "使用 'rootDirs' 解析模組失敗。", - "Modules_6244": "模組", - "Move_labeled_tuple_element_modifiers_to_labels_95117": "將標記的元組元素修飾元移至標籤", - "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "將預設匯出中的運算式移動到變數,並在其中新增類型註釋。", - "Move_to_a_new_file_95049": "移至新檔", - "Move_to_file_95178": "移動至檔案", - "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允許多個連續的數字分隔符號。", - "Multiple_constructor_implementations_are_not_allowed_2392": "不允許多個建構函式實作。", - "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", - "NEWLINE_6061": "新行", - "Name_is_not_valid_95136": "名稱無效", - "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", - "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "只有以 'ES2018' 或更新版本為目標時,才可以使用具名擷取群組。", - "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "具有相同名稱的命名擷取群組必須互相排除。", - "Named_imports_are_not_allowed_in_a_deferred_import_18059": "延遲的匯出中不允許具名匯入。", - "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "當 'module' 設定為 '{0}' 時,不允許從 JSON 檔案具名匯入 ECMAScript 模組。", - "Named_property_0_of_types_1_and_2_are_not_identical_2319": "類型 '{1}' 及 '{2}' 的具名屬性 '{0}' 不一致。", - "Namespace_0_has_no_exported_member_1_2694": "命名空間 '{0}' 沒有匯出的成員 '{1}'。", - "Namespace_must_be_given_a_name_1437": "必須為命名空間指定名稱。", - "Namespace_name_cannot_be_0_2819": "命名空間名稱不得為 '{0}'。", - "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "啟用 '{0}' 時,在全域指令碼檔案中不允許命名空間。如果此檔案不是預定為全域指令碼,將 'moduleDetection' 設定為 'force',或新增空白的 'export {}' 陳述式。", - "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "裝飾項目和修飾元都無法套用至 'this' 參數。", - "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", - "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "沒有任何基底建構函式具有指定的類型引數數量。", - "No_constituent_of_type_0_is_callable_2755": "無法呼叫 '{0}' 類型的任何構件。", - "No_constituent_of_type_0_is_constructable_2759": "無法建構 '{0}' 類型的任何構件。", - "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在類型 '{1}' 中找不到任何具有 '{0}' 類型之參數的索引簽章。", - "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在設定檔 '{0}' 中找不到任何輸入。指定的 'include' 路徑為 '{1}','exclude' 路徑為 '{2}'。", - "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再支援。在早期版本中,手動設定讀取檔案的文字編碼方式。", - "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "沒有任何多載需要 {0} 引數,但有多載需要 {1} 或 {2} 引數。", - "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "沒有任何多載需要 {0} 類型引數,但有多載需要 {1} 或 {2} 類型引數。", - "No_overload_matches_this_call_2769": "沒有任何多載符合此呼叫。", - "No_type_could_be_extracted_from_this_type_node_95134": "無法從此類型節點擷取任何類型", - "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速記屬性 '{0}' 的範圍中不存在任何值。請宣告一個值或提供初始設定式。", - "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象類別 '{0}' 未實作從類別 '{2}' 繼承而來的抽象成員 '{1}'。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2}。", - "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2} 和 {3} 等。", - "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象類別運算式未實作從類別 '{1}' 繼承而來的抽象成員 '{0}'。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1}。", - "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1} 和 {2} 等。", - "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 Null 的判斷提示只可用於 TypeScript 檔案中。", - "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", - "Non_simple_parameter_declared_here_1348": "非簡易參數已宣告於此處。", - "Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。", - "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 類型的構件並非都可呼叫。", - "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 類型的構件並非都可構建。", - "Numbers_out_of_order_in_quantifier_1506": "數字在數量詞中失序。", - "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絕對值等於或大於 2^53 的數字常值過大,無法準確地表示為整數。", - "Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。", - "Object_is_of_type_unknown_2571": "物件的類型為 '未知'。", - "Object_is_possibly_null_2531": "物件可能為「null」。", - "Object_is_possibly_null_or_undefined_2533": "物件可能為「null」或「未定義」。", - "Object_is_possibly_undefined_2532": "物件可能為「未定義」。", - "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "物件常值只可指定已知的屬性,且類型 '{1}' 中沒有 '{0}'。", - "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "物件常值只會指定已知的屬性,但類型 '{1}' 中沒有 '{0}'。您是否想要寫入 '{2}'?", - "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "物件常值的屬性 '{0}' 隱含了 '{1}' 類型。", - "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "無法使用 --isolatedDeclarations 推斷包含速記屬性的物件。", - "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "無法使用 --isolatedDeclarations 推斷包含擴張作業的物件。", - "Octal_digit_expected_1178": "必須是八進位數字。", - "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字元類別中不允許八進位逸出序列和反向參考。如果要做為逸出序列,請改用語法 '{0}'。", - "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允許八進位逸出序列。請使用語法 '{0}'。", - "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允許八進位常值。請使用語法 '{0}'。", - "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' 的一個值是字串 '{2}',另一個值假設為未知的數值。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 陳述式中只可包含一個變數宣告。", - "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 陳述式只能包含一個變數宣告。", - "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "只有 void 函式可以使用 'new' 關鍵字進行呼叫。", - "Only_ambient_modules_can_use_quoted_names_1035": "只有環境模組可以使用括以引號的名稱。", - "Only_amd_and_system_modules_are_supported_alongside_0_6082": "只有 'amd' 與 'system' 模組連同受支援 --{0}。", - "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "僅常數陣列可以使用 --isolatedDeclarations 推斷。", - "Only_emit_d_ts_declaration_files_6014": "只發出 '.d.ts' 宣告檔案。", - "Only_output_d_ts_files_and_not_JavaScript_files_6623": "只輸出 d.ts 檔案,而不是 JavaScript 檔案。", - "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "只有基底類別之公開且受保護的方法,才可透過 'super' 關鍵字存取。", - "Operator_0_cannot_be_applied_to_type_1_2736": "無法將運算子 '{0}' 套用至類型 '{1}'。", - "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "無法將運算子 '{0}' 套用至類型 '{1}' 和 '{2}'。", - "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "運算子不得混合在字元類別中。改為將運算子包裝在巢狀類別中。", - "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在編輯時從多專案參考檢查選擇一個專案。", - "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "已移除選項 '{0}={1}'。請將該選項從您的設定中移除。", - "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "選項 '{0}={1}' 已被取代,將在 TypeScript {2} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{3}\"' 以沉默此錯誤。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'false' 或 'null'。", - "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'null'。", - "Option_0_can_only_be_specified_on_command_line_6266": "選項 '{0}' 只能在命令列中指定。", - "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "只有在已提供選項 '--inlineSourceMap' 或選項 '--sourceMap' 時,才可使用選項 '{0}'。", - "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有當 'moduleResolution' 設定為 'node16'、'nodenext' 或 'bundler' 時,才可以使用選項 '{0}'。", - "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "只有當 'module' 設定為 'preserve'、'commonjs' 或 'es2015' 或更新版本時,才能使用選項 '{0}'。", - "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "當選項 'jsx' 為 '{1}' 時,無法指定選項 '{0}'。", - "Option_0_cannot_be_specified_with_option_1_5053": "不得同時指定選項 '{0}' 與選項 '{1}'。", - "Option_0_cannot_be_specified_without_specifying_option_1_5052": "必須指定選項 '{1}' 才可指定選項 '{0}'。", - "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "指定選項 '{0}' 時,必須指定選項 '{1}' 或選項 '{2}'。", - "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "已移除選項 '{0}'。請將該選項從您的設定中移除。", - "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "選項 '{0}' 已被取代,將在 TypeScript {1} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{2}\"' 以沉默此錯誤。", - "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "選項 '{0}' 為多餘且不得與選項 '{1}'一起指定。", - "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", - "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "只有在設定 'noEmit'、'emitDeclarationOnly' 或 'rewriteRelativeImportExtensions' 其中一項時,才能使用 'allowImportingTsExtensions' 選項。", - "Option_build_must_be_the_first_command_line_argument_6369": "選項 '--build' 必須是第一個命令列引數。", - "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", - "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "只有在提供選項 '--module' 或是 'target' 為 'ES2015' 或更高項目時,才可使用選項 'isolatedModules'。", - "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "當選項 'module' 設定為 '{1}' 時,選項 'moduleResolution' 必須設定為 '{0}' (或保留為未指定)。", - "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "當選項 'moduleResolution' 設定為 '{1}' 時,選項 'module' 必須設定為 '{0}'。", - "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "啟用 '{0}' 時,無法停用選項 'preserveConstEnums'。", - "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "在命令列上,'project' 選項不得與原始程式檔並用。", - "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "當 'moduleResolution' 設定為 'classic' 時,不得指定 '--resolveJsonModule' 選項。", - "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "當 'module' 設定為 'none'、'system' 或 'umd' 時,不得指定 '--resolveJsonModule' 選項。", - "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "當 'module' 設定為 'UMD'、'AMD' 或 'System' 時,無法使用選項 'verbatimModuleSyntax'。", - "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", - "Options_0_and_1_cannot_be_combined_6370": "無法合併選項 '{0}' 與 '{1}'。", - "Options_Colon_6027": "選項:", - "Organize_Imports_95206": "Organize Imports", - "Other_Outputs_6291": "其他輸出", - "Output_Formatting_6256": "輸出格式", - "Output_compiler_performance_information_after_building_6615": "在組建後輸出編譯器效能資訊。", - "Output_directory_for_generated_declaration_files_6166": "所產生之宣告檔案的輸出目錄。", - "Output_file_0_has_not_been_built_from_source_file_1_6305": "輸出檔 '{0}' 並非從原始程式檔 '{1}' 建置。", - "Output_from_referenced_project_0_included_because_1_specified_1411": "因為指定了 '{1}',所以包含參考的專案 '{0}' 輸出", - "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 輸出", - "Output_more_detailed_compiler_performance_information_after_building_6632": "在組建後輸出更詳細的編譯器效能資訊。", - "Overload_0_of_1_2_gave_the_following_error_2772": "多載 {0} (共 {1}),'{2}',發生下列錯誤。", - "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "多載簽章必須全為抽象或非抽象。", - "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "多載簽章都必須是環境或非環境簽章。", - "Overload_signatures_must_all_be_exported_or_non_exported_2383": "多載簽章必須全部匯出或不匯出。", - "Overload_signatures_must_all_be_optional_or_required_2386": "多載簽章都必須是選擇性或必要簽章。", - "Overload_signatures_must_all_be_public_private_or_protected_2385": "多載簽章必須是公用、私用或受保護。", - "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "參數 '{0}' 不得參考在其之後宣告的識別碼 '{1}'。", - "Parameter_0_cannot_reference_itself_2372": "參數 '{0}' 不得參考自身。", - "Parameter_0_implicitly_has_an_1_type_7006": "參數 '{0}' 隱含了 '{1}' 類型。", - "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "參數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", - "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "參數 '{0}' 與參數 '{1}' 不在同一個位置。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "存取子的參數 '{0}' 具有 (或正在使用) 來自外部模組 '{2}' 的名稱 '{1}',但無法予以命名。", - "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "存取子的參數 '{0}' 具有 (或正在使用) 來自私人模組 '{2}' 的名稱 '{1}'。", - "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "存取子的參數 '{0}' 具有 (或正在使用) 私人名稱 '{1}'。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "匯出類別中建構函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "匯出類別中建構函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "匯出類別中建構函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "匯出函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "匯出函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "匯出函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "匯出介面的索引簽章參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "匯出介面的索引簽章參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "匯出介面中方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "匯出介面中方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "匯出類別中公用方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "匯出類別中公用方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "匯出類別中公用方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Parameter_cannot_have_question_mark_and_initializer_1015": "參數不得有問號及初始設定式。", - "Parameter_declaration_expected_1138": "必須是參數宣告。", - "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "參數具有名稱但沒有類型。您是指 '{0}: {1}' 嗎?", - "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "參數修飾元只可用於 TypeScript 檔案中。", - "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "參數必須有具備 --isolatedDeclarations 的明確類型註釋。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "匯出類別中公用 setter '{0}' 的參數類型具有或是正在使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "匯出類別中公用 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", - "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", - "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "在 strict 模式中進行剖析,並為每個來源檔案發出 \"use strict\"。", - "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json 中的部分 'files' 清單", - "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式 '{0}' 最多只可有一個 '*' 字元。", - "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "在此工作階段中無法使用 '--diagnostics ' 或 '--extendedDiagnostics ' 的效能計時。找不到 Web 效能 API 的原生實作。", - "Platform_specific_6912": "平台特定", - "Prefix_0_with_an_underscore_90025": "具有底線的前置詞 '{0}'", - "Prefix_all_incorrect_property_declarations_with_declare_95095": "在所有不正確屬性宣告的開頭放置 'declare'", - "Prefix_all_unused_declarations_with_where_possible_95025": "若可行,為所有未使用的宣告加上前置詞 '_'", - "Prefix_with_declare_95094": "以 'declare' 開頭", - "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "保留 JavaScript 輸出中未使用的匯入值,否則將予以移除。", - "Print_all_of_the_files_read_during_the_compilation_6653": "列印在編譯期間讀取的所有檔案。", - "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "列印在編譯期間讀取的檔案,包括其包含的原因。", - "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "列印檔案名稱,以及檔案屬於編譯的原因。", - "Print_names_of_files_part_of_the_compilation_6155": "列印編譯時檔案部分的名稱。", - "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "列印屬於編譯一部分的檔案名稱,然後停止處理。", - "Print_names_of_generated_files_part_of_the_compilation_6154": "列印編譯時所產生之檔案部分的名稱。", - "Print_the_compiler_s_version_6019": "列印編譯器的版本。", - "Print_the_final_configuration_instead_of_building_1350": "列印而非建置最終組態。", - "Print_the_names_of_emitted_files_after_a_compilation_6652": "在編譯後列印已發出檔案的名稱。", - "Print_this_message_6017": "列印這則訊息。", - "Private_accessor_was_defined_without_a_getter_2806": "私人存取子已在不使用 getter 的情況下定義。", - "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "私人欄位 '{0}' 必須在封閉類別中宣告。", - "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "變數宣告中不允許私人識別碼。", - "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允許私人識別碼位於類別主體外。", - "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "私人識別碼只能在類別主體中使用,且只能做為類別成員宣告、屬性存取或 'in' 運算式左側的一部分使用", - "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "只有當目標為 ECMAScript 2015 及更新版本時,才可使用私人識別碼。", - "Private_identifiers_cannot_be_used_as_parameters_18009": "私人識別碼不可用作為參數。", - "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", - "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "無法在型別參數上存取私人或受保護的成員 '{0}'。", - "Project_0_95204": "Project '{0}'", - "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以無法建置該專案", - "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "因為未建置專案 '{0}' 的相依性 '{1}',所以無法建置該專案", - "Project_0_is_being_forcibly_rebuilt_6388": "正在強制重建專案 '{0}'", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示檔案 '{2}' 曾經是編譯的根檔案,但已不再是。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 指出程式需要報告錯誤。", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "因為 buildinfo 檔案 '{1}' 指出某些變更並未發出,所以專案 '{0}' 已過期", - "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示 compilerOptions 中有變更", - "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", - "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", - "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", - "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "因為輸出 '{1}' 早於輸入 '{2}',所以專案 '{0}' 已過期", - "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "因為輸出檔案 '{1}' 不存在,所以專案 '{0}' 已過期", - "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "因為專案 '{0}' 的輸出使用版本 '{1}' 產生而成,與目前的版本 '{2}' 不同,所以該專案已過期", - "Project_0_is_up_to_date_6361": "專案 '{0}' 為最新狀態", - "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "因為最新的輸入 '{1}' 早於最舊的輸出 '{2}',所以專案 '{0}' 為最新狀態", - "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "專案 '{0}' 為最新狀態,但需要更新比輸入檔案還舊的輸出檔案時間戳記", - "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "專案 '{0}' 為最新狀態,且有來自其相依性的 .d.ts 檔案", - "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "專案參考不會形成循環圖。但偵測到循環: {0}", - "Projects_6255": "專案", - "Projects_in_this_build_Colon_0_6355": "此組建中的專案: {0}", - "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "只有以 ECMAScript 2015 及更新版本為目標時,才可使用具有 'accessor' 修飾詞的屬性。", - "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "屬性 '{0}' 已標記為抽象,因此不得有初始設定式。", - "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "屬性 '{0}' 來自索引簽章,因此必須使用 ['{0}'] 存取。", - "Property_0_does_not_exist_on_type_1_2339": "類型 '{1}' 沒有屬性 '{0}'。", - "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "類型 '{1}' 沒有屬性 '{0}'。您指的是 '{2}' 嗎?", - "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "屬性 '{0}' 不存在於類型 '{1}' 上。您要存取的是靜態成員 '{2}' 嗎?", - "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "類型 '{1}' 沒有屬性 '{0}'。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為 '{2}' 或更新版本。", - "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "屬性 '{0}' 不存在於類型 '{1}' 上。嘗試將 'lib' 編譯器選項變更為包含 'dom'。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "屬性 '{0}' 沒有初始設定式,且未在類別靜態區塊中明確指派。", - "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "屬性 '{0}' 沒有初始設定式,且未在建構函式中明確指派。", - "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "因為屬性 '{0}' 的 get 存取子沒有傳回類型註釋,致使該屬性意味著類型 'any'。", - "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "因為屬性 '{0}' 的 set 存取子沒有參數類型註釋,致使該屬性意味著類型 'any'。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 get 存取子的類型。", - "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 set 存取子的類型。", - "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "類型 '{1}' 中的屬性 '{0}' 無法指派給基底類型 '{2}' 中的相同屬性。", - "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "不得將類型 '{1}' 的屬性 '{0}' 指派給類型 '{2}'。", - "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "類型 '{1}' 中的屬性 '{0}' 是無法從類型 '{2}' 中存取的其他成員。", - "Property_0_is_declared_but_its_value_is_never_read_6138": "屬性 '{0}' 已宣告但從未讀取其值。", - "Property_0_is_incompatible_with_index_signature_2530": "屬性 '{0}' 和索引簽章不相容。", - "Property_0_is_missing_in_type_1_2324": "類型 '{1}' 遺漏屬性 '{0}'。", - "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "類型 '{1}' 缺少屬性 '{0}',但類型 '{2}' 必須有該屬性。", - "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "因為屬性 '{0}' 具有私人識別碼,所以無法在類別 '{1}' 外存取該屬性。", - "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "在類型 '{1}' 中,'{0}' 是選擇性屬性,但在類型 '{2}' 中則為必要屬性。", - "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 是私用屬性,只可從類別 '{1}' 中存取。", - "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "在類型 '{1}' 中,'{0}' 是私用屬性,但在類型 '{2}' 中不是。", - "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "屬性 '{0}' 已受到保護,只能透過類別 '{1}' 的執行個體加以存取。這是類別 '{2}' 的執行個體。", - "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 是受保護屬性,只可從類別 '{1}' 及其子類別中存取。", - "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 是受保護屬性,但類型 '{1}' 不是衍生自 '{2}' 的類別。", - "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "在類型 '{1}' 中,'{0}' 是受保護屬性,但在類型 '{2}' 中是公用屬性。", - "Property_0_is_used_before_being_assigned_2565": "屬性 '{0}' 已在指派之前使用。", - "Property_0_is_used_before_its_initialization_2729": "將屬性 '{0}' 初始化前已使用該屬性。", - "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "類型 '{1}' 可能不存在屬性 '{0}'。您指的是 '{2}' 嗎?", - "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 擴張屬性 (Attribute) 的屬性 (Property) '{0}' 不可指派給目標屬性 (Property)。", - "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "匯出之匿名類別類型的屬性 '{0}' 不可為私人或受保護的。", - "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "匯出介面的屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "匯出介面的屬性 '{0}' 具有或使用私用名稱 '{1}'。", - "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給 '{2}' 索引類型 '{3}'。", - "Property_0_was_also_declared_here_2733": "屬性 '{0}' 也已定義於此處。", - "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "屬性 '{0}' 將會覆寫 '{1}' 中的基底屬性。如果是故意覆寫的,請新增初始設定式。否則,請新增 'declare' 修飾元或移除多餘的宣告。", - "Property_assignment_expected_1136": "必須是屬性指派。", - "Property_destructuring_pattern_expected_1180": "必須是屬性解構模式。", - "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "屬性必須有具備 --isolatedDeclarations 的明確類型註釋。", - "Property_or_signature_expected_1131": "必須是屬性或簽章。", - "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "屬性值僅能為字串常值、數值常值、'true'、'false'、'null'、物件常值或陣列常值。", - "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "當目標為 'ES5' 時,為 'for-of'、擴張及解構中的可疊代物件提供完整的支援。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "匯出類別的公用方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", - "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "匯出類別的公用方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", - "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "匯出類別的公用方法 '{0}' 具有或使用私用名稱 '{1}'。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "匯出類別的公用屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "匯出類別的公用屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "匯出類別的公用屬性 '{0}' 具有或使用私用名稱 '{1}'。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "匯出類別的公用靜態方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", - "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "匯出類別的公用靜態方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", - "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "匯出類別的公用靜態方法 '{0}' 具有或使用私用名稱 '{1}'。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "匯出類別的公用靜態屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", - "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用名稱 '{1}'。", - "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "限定名稱 '{0}' 必須以 '@param {object} {1}' 開頭。", - "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "當函式參數未讀取時引發錯誤。", - "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "當運算式及宣告包含隱含的 'any' 類型時顯示錯誤。", - "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "對具有隱含 'any' 類型的 'this' 運算式引發錯誤。", - "Range_out_of_order_in_character_class_1517": "字元類別中的範圍失序。", - "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "啟用 '{0}' 時重新匯出類型需要使用 'export type'。", - "React_components_cannot_include_JSX_namespace_names_2639": "React 元件不得包含 JSX 命名空間名稱", - "Recommended_Options_6294": "建議選項", - "Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。", - "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "減少 TypeScript 自動載入的專案數目。", - "Referenced_project_0_may_not_disable_emit_6310": "參考的專案 '{0}' 不得停用發出。", - "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。", - "Referenced_via_0_from_file_1_1400": "透過 '{0}' 從檔案 '{1}' 參考", - "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。建議為匯入路徑新增副檔名。", - "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。您是指 '{0}' 嗎?", - "Remove_Unused_Imports_95207": "Remove Unused Imports", - "Remove_a_list_of_directories_from_the_watch_process_6628": "從監看處理序移除目錄清單。", - "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "從監視模式的處理移除檔案清單。", - "Remove_all_unnecessary_override_modifiers_95163": "移除所有不必要的 'override' 修飾元", - "Remove_all_unnecessary_uses_of_await_95087": "移除所有不必要的 'await' 使用方式", - "Remove_all_unreachable_code_95051": "移除所有無法連線的程式碼", - "Remove_all_unused_labels_95054": "移除所有未使用的標籤", - "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "從具有相關問題的所有箭號函式主體中移除大括號", - "Remove_braces_from_arrow_function_95060": "從箭號函式移除大括號", - "Remove_braces_from_arrow_function_body_95112": "從箭號函式主體中移除大括號", - "Remove_import_from_0_90005": "從 '{0}' 移除匯入", - "Remove_override_modifier_95161": "移除 'override' 修飾元", - "Remove_parentheses_95126": "移除括弧", - "Remove_template_tag_90011": "移除範本標籤", - "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "移除 TypeScript 語言伺服器中 JavaScript 檔案的總原始程式碼大小 20mb 上限。", - "Remove_type_from_import_declaration_from_0_90055": "從 \"{0}\" 移除匯入宣告中的 'type'", - "Remove_type_from_import_of_0_from_1_90056": "從 \"{1}\" 移除匯入 '{0}' 中的 'type'", - "Remove_type_parameters_90012": "移除型別參數", - "Remove_unnecessary_await_95086": "移除不必要的 'await'", - "Remove_unreachable_code_95050": "移除無法連線的程式碼", - "Remove_unused_declaration_for_Colon_0_90004": "移除下列項目未使用的宣告: '{0}'", - "Remove_unused_declarations_for_Colon_0_90041": "移除 '{0}' 未使用的宣告", - "Remove_unused_destructuring_declaration_90039": "移除未使用的解構宣告", - "Remove_unused_label_95053": "移除未使用的標籤", - "Remove_variable_statement_90010": "移除變數陳述式", - "Rename_param_tag_name_0_to_1_95173": "將 '@param' 標籤名稱 '{0}' 重新命名為'{1}'", - "Replace_0_with_Promise_1_90036": "將 '{0}' 取代為 'Promise<{1}>'", - "Replace_all_unused_infer_with_unknown_90031": "以 'unknown' 取代所有未使用的 'infer'", - "Replace_import_with_0_95015": "以 '{0}' 取代匯入。", - "Replace_infer_0_with_unknown_90030": "以 'unknown' 取代 'infer {0}'", - "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "當函式中的部分程式碼路徑並未傳回值時回報錯誤。", - "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "回報 switch 陳述式內 fallthrough 案例的錯誤。", - "Report_errors_in_js_files_8019": "報告 .js 檔案中的錯誤。", - "Report_errors_on_unused_locals_6134": "回報未使用之區域變數的錯誤。", - "Report_errors_on_unused_parameters_6135": "回報未使用之參數的錯誤。", - "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "匯出時需要足夠的註釋,讓其他工具可以簡單地產生宣告檔案。", - "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "需要來自索引簽章的未宣告屬性,才能使用元素存取。", - "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必要型別參數可能未遵循選擇性型別參數。", - "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "從位置 '{1}' 的快取中找到模組 '{0}' 的解析。", - "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "從位置 '{0}' 的快取記憶體找到類型參照指示詞 '{1}'。", - "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相對名稱失敗; 嘗試停用新式節點解析功能,以查看 npm 程式庫是否需要更新設定。", - "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相對名稱失敗; 嘗試使用 '--moduleResolution bundler' 查看專案是否可能需要更新設定。", - "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只將 'keyof' 解析為字串值的屬性名稱 (無任何數字或符號)。", - "Resolved_under_condition_0_6414": "已在條件 '{0}' 下解析。", - "Resolving_in_0_mode_with_conditions_1_6402": "正在以條件 {1} 在 {0} 模式中解析。", - "Resolving_module_0_from_1_6086": "======== 正在從 '{1}' 解析模組 '{0}'。========", - "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在解析與基底 URL '{1}' 相對的模組名稱 '{0}' - '{2}'。", - "Resolving_real_path_for_0_result_1_6130": "正在解析 '{0}' 的真實路徑,結果 '{1}'。", - "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}'。========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',根目錄 '{2}'。========", - "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',未設定根目錄。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,根目錄 '{1}'。========", - "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,未設定根目錄。 ========", - "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自訂 typeRoots 程式的類型參考指示詞,並跳過 'node_modules' 資料夾中的查詢。", - "Resolving_with_primary_search_path_0_6121": "正在解析主要搜尋路徑 '{0}'。", - "Rest_parameter_0_implicitly_has_an_any_type_7019": "剩餘參數 '{0}' 隱含了 'any[]' 類型。", - "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "其餘參數 '{0}' 隱含 'any[]' 類型,但可從使用方式推斷更適合的類型。", - "Rest_types_may_only_be_created_from_object_types_2700": "Rest 類型只能從物件類型建立。", - "Return_type_annotation_circularly_references_itself_2577": "傳回型別註解會循環參考自身。", - "Return_type_must_be_inferred_from_a_function_95149": "必須從函式推斷傳回型別", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "匯出介面中呼叫簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "匯出介面中呼叫簽章的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "匯出介面中建構函式簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "匯出介面中建構函式簽章的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "建構函式簽章的傳回類型必須能夠指派給類別的執行個體類型。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "匯出函式的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", - "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "匯出函式的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "匯出函式的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "匯出介面中索引簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "匯出介面中索引簽章的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "匯出介面中方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "匯出介面中方法的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用模組 {2} 中的名稱 '{1}'。", - "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "匯出類別中公用方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "匯出類別中公用方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "匯出類別中公用方法的傳回型別具有或使用私用名稱 '{0}'。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", - "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "匯出類別中公用靜態方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "匯出類別中公用靜態方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", - "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "匯出類別中公用靜態方法的傳回型別具有或使用私用名稱 '{0}'。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{3}'。", - "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{2}'。", - "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{3}'。", - "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{2}'。", - "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", - "Rewrite_all_as_indexed_access_types_95034": "將全部重寫為經過編製索引的存取類型", - "Rewrite_as_the_indexed_access_type_0_90026": "重寫為索引存取類型 '{0}'", - "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "將相對匯入路徑中的 '.ts'、'.tsx'、'.mts'、'.cts' 檔案副檔名重寫為輸出檔案中的 JavaScript 對應檔名。", - "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? 的右運算元無法連線,因為左運算元永遠不會是 nullish。", - "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "無法判斷根目錄,將略過主要搜尋路徑。", - "Root_file_specified_for_compilation_1427": "為編譯指定的根檔案", - "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", - "STRATEGY_6039": "策略", - "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "儲存 .tsbuildinfo 檔案,以允許對專案進行累加編譯。", - "Saw_non_matching_condition_0_6405": "儲存不相符條件 '{0}'。", - "Scoped_package_detected_looking_in_0_6182": "偵測到範圍套件,正於 '{0}' 尋找", - "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜尋所有上階 node_modules 目錄,以取得後援延伸模組: {0}。", - "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜尋所有上階 node_modules 目錄,以取得慣用延伸模組: {0}。", - "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "另請參閱 https://aka.ms/tsconfig/module", - "Selection_is_not_a_valid_statement_or_statements_95155": "選取項目非有效的一或多個陳述式", - "Selection_is_not_a_valid_type_node_95133": "選取範圍不是有效的類型節點", - "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "為發出的 JavaScript 設定 JavaScript 語言版本,並包含相容的程式庫宣告。", - "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "設定來自 TypeScript 的訊息語言。這不會影響發出。", - "Set_the_module_option_in_your_configuration_file_to_0_95099": "將組態檔中的 'module' 選項設定為 '{0}'", - "Set_the_newline_character_for_emitting_files_6659": "設定發出檔案的新行字元。", - "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", - "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", - "Set_the_target_option_in_your_configuration_file_to_0_95098": "將組態檔中的 'target' 選項設定為 '{0}'", - "Setters_cannot_return_a_value_2408": "setter 無法傳回值。", - "Show_all_compiler_options_6169": "顯示所有的編譯器選項。", - "Show_diagnostic_information_6149": "顯示診斷資訊。", - "Show_verbose_diagnostic_information_6150": "顯示詳細診斷資訊。", - "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "顯示將會建置 (或刪除 - 若是指定有 '--clean') 的內容", - "Signature_0_must_be_a_type_predicate_1224": "簽章 '{0}' 必須是型別述詞。", - "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "簽章宣告僅能在 TypeScript 檔案中使用。", - "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "上游專案發生錯誤時,略過建置下游專案。", - "Skip_type_checking_all_d_ts_files_6693": "略過所有 .d.ts 檔案的型別檢查。", - "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "略過 TypeScript 中包含 .d.ts 檔案的型別檢查。", - "Skip_type_checking_of_declaration_files_6012": "跳過宣告檔案的類型檢查。", - "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以跳過建置該專案", - "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "因為未建置專案 '{0}' 的相依性 '{1}',所以正在跳過該專案的組建", - "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳過看起來像絕對 URI 的模組 '{0}',目標檔案類型: {1}。", - "Sort_Imports_95208": "Sort Imports", - "Source_from_referenced_project_0_included_because_1_specified_1414": "因為指定了 '{1}',所以包含參考的專案 '{0}' 來源", - "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 來源", - "Source_has_0_element_s_but_target_allows_only_1_2619": "來源具有 {0} 個元素,但目標只允許 {1} 個。", - "Source_has_0_element_s_but_target_requires_1_2618": "來源有 {0} 個元素,但目標需要 {1} 個。", - "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", - "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", - "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "來源未針對目標中位於 {0} 的必要元素提供相符項目。", - "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "來源未針對目標中位於 {0} 的可變元素提供相符項目。", - "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目標版本。", - "Specify_JSX_code_generation_6080": "指定 JSX 程式碼產生。", - "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定將所有輸出組合成一個 JavaScript 檔案的檔案。如果 'declaration' 為 True,則也會指定組合所有 .d.ts 輸出的檔案。", - "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定符合編譯中要包含之檔案的 glob 模式清單。", - "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包含的語言服務外掛程式清單。", - "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一組描述目標執行階段環境的配套程式庫宣告檔案。", - "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一組將匯入重新對應至其他查閱位置的項目。", - "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定為專案指定路徑的物件陣列。用於專案參考。", - "Specify_an_output_folder_for_all_emitted_files_6678": "指定所有發出檔案的輸出檔案夾。", - "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定僅用於類型之匯入的發出/檢查行為。", - "Specify_file_to_store_incremental_compilation_information_6380": "指定要儲存累加編譯資訊的檔案", - "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 從指定的模組指定名稱查詢檔案的方式。", - "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少遞迴檔案監視功能之系統上如何監視目錄。", - "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 監看式模式的運作方式。", - "Specify_library_files_to_be_included_in_the_compilation_6079": "請指定要併入編譯中的程式庫檔案。", - "Specify_module_code_generation_6016": "指定模組程式碼產生。", - "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 'jsx: react-jsx*' 時,用來匯入 JSX Factory 函式的模組指定名稱。", - "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多個資料夾,其作用類似 './node_modules/@types'。", - "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定一或多個路徑或節點模組參考至繼承設定的基礎設定檔。", - "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用於自動擷取宣告檔案的選項。", - "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定當輪詢監看無法使用下列檔案系統事件建立時,加以建立的策略: 'FixedInterval' (預設)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。", - "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在未原生支援遞迴監看的平台上,監看目錄的策略: 'UseFsEvents' (預設)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。", - "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定監看檔案的策略: 'FixedPollingInterval' (預設)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。", - "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定要在以 React JSX 發出為目標時使用於片段的 JSX 片段參考,例如 'React.Fragment' 或 'Fragment'。", - "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "請指定要在以 'react' JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", - "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "請指定要在以 React JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", - "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "當指定以 'jsxFactory' 編譯器選項設定 'react' JSX 輸出的目標時,請指定要使用的 JSX 片段處理站函式,例如 'Fragment'。", - "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基礎目錄來解析非相對的模組名稱。", - "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定發出檔案時要用的行尾順序: 'CRLF' (DOS) 或 'LF' (UNIX)。", - "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定偵錯工具尋找 TypeScript 檔案的位置,而非原始檔位置。", - "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定偵錯工具尋找對應檔的位置,而非產生的位置。", - "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用來檢查來自 'node_modules' 之 JavaScript 檔案的資料夾深度上限。僅適用於 'allowJs'。", - "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定用於匯入 `jsx` 與 `jsxs` 工廠函式的模組指定名稱。例如,傳送表情符號", - "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定 'createElement' 叫用的物件。這僅適用於在以 'react' JSX 發出為目標時。", - "Specify_the_output_directory_for_generated_declaration_files_6613": "指定產生的宣告檔案的輸出目錄。", - "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "指定 .tsbuildinfo 累加編譯檔案的路徑。", - "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定輸入檔的根目錄。用以控制具有 --outDir 的輸出目錄結構。", - "Specify_the_root_folder_within_your_source_files_6690": "指定來源檔案內的根資料夾。", - "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定偵錯工具尋找參考原始程式碼的根路徑。", - "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的類型封裝名稱,而不在來源檔案中參考。", - "Specify_what_JSX_code_is_generated_6646": "指定要產生的 JSX 程式碼。", - "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定當系統用盡原生檔案監控程式時,監控程式應使用的方法。", - "Specify_what_module_code_is_generated_6657": "指定要產生的模組程式碼。", - "Split_all_invalid_type_only_imports_1367": "分割所有無效的僅限類型匯入", - "Split_into_two_separate_import_declarations_1366": "分割為兩個獨立的匯入宣告", - "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "只有當目標為 ECMAScript 5 及更高版本時,才可使用 'new' 運算式中的擴張運算子。", - "Spread_types_may_only_be_created_from_object_types_2698": "Spread 類型只能從物件類型建立。", - "Starting_compilation_in_watch_mode_6031": "在監看模式中開始編譯...", - "Statement_expected_1129": "必須是陳述式。", - "Statements_are_not_allowed_in_ambient_contexts_1036": "環境內容中不得有陳述式。", - "Static_members_cannot_reference_class_type_parameters_2302": "靜態成員不得參考類別類型參數。", - "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "靜態屬性 '{0}' 與建構函式 '{1}' 的內建屬性 'Function.{0}' 相衝突。", - "Stricter_Typechecking_Options_6292": "更嚴格的類型檢查選項", - "String_literal_expected_1141": "必須是字串常值。", - "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "當 '--module' 旗標設定為 'es2015' 或 'es2020' 時,不支援字串常值匯入和匯出名稱。", - "String_literal_with_double_quotes_expected_1327": "應有具雙引號的字串常值。", - "Style_Options_6293": "樣式選項", - "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用色彩及內容來設計錯誤與訊息的風格 (實驗)。", - "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "當有減號時,必須有子模式旗標。", - "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後續的屬性宣告必須具有相同的類型。屬性 '{0}' 的類型必須是 '{1}',但此處卻是類型 '{2}'。", - "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後續的變數宣告必須具有相同的類型。變數 '{0}' 的類型必須是 '{1}' 但卻是 '{2}'。", - "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式 '{1}' 的替代 '{0}' 類型不正確,必須為 'string',但得到 '{2}'。", - "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "模式 '{1}' 中的替代 '{0}' 最多可有一個 '*' 字元。", - "Substitutions_for_pattern_0_should_be_an_array_5063": "模式 '{0}' 的替代應為陣列。", - "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "模式 '{0}' 的替代項目不應為空陣列。", - "Successfully_created_a_tsconfig_json_file_6071": "已成功建立 tsconfig.json 檔案。", - "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "建構函式外部或建構函式內的巢狀函式中不允許 super 呼叫。", - "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", - "Suppress_excess_property_checks_for_object_literals_6072": "不對物件常值進行多餘的屬性檢查。", - "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "針對缺少索引簽章的索引物件隱藏 noImplicitAny 錯誤。", - "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "針對缺少索引簽章的物件編製索引時,隱藏 'noImplicitAny' 錯誤。", - "Switch_each_misused_0_to_1_95138": "將每個誤用的 '{0}' 切換成 '{1}'", - "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支援原生遞迴監視之平台上,同步呼叫回呼並更新目錄監控程式的狀態。", - "Syntax_Colon_0_6023": "語法: {0}", - "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "標籤 '{0}' 至少需要 '{1}' 個引數,但 JSX factory '{2}' 最多只提供 '{3}' 個。", - "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "選擇性鏈結中不允許已標記的範本運算式。", - "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目標只允許 {0} 個元素,但來源的元素可能較多。", - "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目標需要 {0} 個元素,但來源的元素可能較少。", - "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目標特徵標記提供的引數過少。應有 {0} 個或更多,但只取得 {1} 個。", - "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾元只可用於 TypeScript 檔案中。", - "The_0_operator_cannot_be_applied_to_type_symbol_2469": "無法將 '{0}' 運算子套用至類型 'symbol'。", - "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "布林類型不允許有 '{0}' 運算子。請考慮改用 '{1}'。", - "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同步迭代器的 '{0}' 屬性必須為方法。", - "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 '{0}' 屬性必須為方法。", - "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 類型可指派給極少數的其他類型。要改用 'any' 類型嗎?", - "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "無法同時設定 Unicode (u) 旗標和 Unicode Sets (v) 旗標。", - "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "在 ES5 中,箭號函式內無法參考 'arguments' 物件。建議使用標準函式運算式。", - "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "在 ES5 中,非同步函式或方法無法參考 'arguments' 物件。建議使用標準函式或方法。", - "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 陳述式的主體不能是空白陳述式。", - "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "對此實作的呼叫會成功,但多載的實作簽章未向外部顯示。", - "The_character_set_of_the_input_files_6163": "輸入檔的字元集。", - "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", - "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含的箭號函式會擷取 'this' 的全域值。", - "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "內含的函式或模組主體對控制流程分析而言過大。", - "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", - "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", - "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", - "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", - "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", - "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", - "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", - "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", - "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", - "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", - "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", - "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", - "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", - "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", - "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", - "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", - "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", - "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", - "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", - "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", - "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", - "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", - "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", - "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", - "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", - "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", - "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", - "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", - "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "目前的檔案是 CommonJS 模組,無法在最上層使用 'await'。", - "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "目前的檔案是 CommonJS 模組,其匯入將會產生 'require' 呼叫;不過,參考的檔案是 ECMAScript 模組,無法以 'require' 匯入。請考慮改為撰寫動態 'import(\"{0}\")' 呼叫。", - "The_current_host_does_not_support_the_0_option_5001": "目前的主機不支援 '{0}' 選項。", - "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "您可能要使用的 '{0}' 宣告定義於此處", - "The_declaration_was_marked_as_deprecated_here_2798": "該宣告在這裡標示為已淘汰。", - "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需類型來自屬性 '{0}',該屬性宣告於此處的類型 '{1}' 上", - "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需類型來自此簽章的傳回型別。", - "The_expected_type_comes_from_this_index_signature_6501": "所需類型來自此索引簽章。", - "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "匯出指派的運算式必須是環境內容中的識別碼或完整名稱。", - "The_file_is_in_the_program_because_Colon_1430": "檔案在程式中,因為:", - "The_files_list_in_config_file_0_is_empty_18002": "設定檔 '{0}' 中的 'files' 清單是空的。", - "The_first_export_default_is_here_2752": "第一個匯出預設位於此處。", - "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise 的 'then' 方法第一個參數必須為回撥。", - "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "全域類型 'JSX.{0}' 的屬性不得超過一個。", - "The_implementation_signature_is_declared_here_2750": "實作簽章宣告於此處。", - "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "將會組建至 CommonJS 輸出的檔案中不允許 'import.meta' 中繼屬性。", - "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "只有當 '--module' 選項為 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 時,才允許 'import.meta' 中繼屬性。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' 的推斷類型無法在沒有 '{1}' 參考的情況下命名。其可能非可攜式。必須有型別註解。", - "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", - "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' 的推斷型別參考了具有迴圈結構且不是可完整序列化的型別。必須有型別註解。", - "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' 的推斷型別參考了無法存取的 '{1}' 型別。必須有型別註解。", - "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此節點的推斷型別超過編譯器將序列化的長度上限。需要明確的型別註解。", - "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣告的初始設定式必須是具備 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", - "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣告的初始設定式必須是具備 '[Symbol.asyncDispose]()' 方法或 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", - "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "因為屬性 '{1}' 存在於多個部分,而且在某些部分為私人性質,所以交集 '{0}' 已縮減為 'never'。", - "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "因為屬性 '{1}' 在某些部分有衝突的類型,所以交集 '{0}' 已縮減為 'never'。", - "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' 關鍵字只可用於宣告編譯器提供的內建類型。", - "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", - "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "必須提供 'jsxFragmentFactory' 編譯器選項,才能使用具有 'jsxFactory' 編譯器選項的 JSX 片段。", - "The_last_overload_gave_the_following_error_2770": "最後一個多載出現下列錯誤。", - "The_last_overload_is_declared_here_2771": "最後一個多載宣告於此處。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 陳述式的左側不得為解構模式。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' 陳述式左側不可為 'using' 宣告。", - "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' 陳述式左側不可為 'await using' 宣告。", - "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 陳述式左側不得使用類型註釋。", - "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 陳述式的左側不可為選擇性屬性存取。", - "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 陳述式的左邊必須是變數或屬性存取。", - "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 陳述式的左側必須是類型 'string' 或 'any'。", - "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 陳述式的左側不得使用類型註釋。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 陳述式的左側不可為選擇性屬性存取。", - "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 陳述式的左側不可為 'async'。", - "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 陳述式的左邊必須是變數或屬性存取。", - "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術運算的左側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", - "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "指派運算式的左側不可為選擇性屬性存取。", - "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "指派運算式的左邊必須是變數或屬性存取。", - "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 運算式的左側必須可指派至右側 '[Symbol.hasInstance]' 方法的第一個引數。", - "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 運算式左側必須是類型 'any'、物件類型或型別參數。", - "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "對使用者顯示訊息時所使用的地區設定 (例如 'zh-tw')", - "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "在 node_modules 及載入 JavaScript 檔案下搜尋時的最大相依性深度。", - "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 運算子的運算元不可為私人識別碼。", - "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 運算子的運算元不可為唯讀屬性。", - "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 運算子的運算元必須為屬性參考。", - "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 運算子的運算元必須是非必須。", - "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "遞增或遞減運算子的運算元不可為選擇性屬性存取。", - "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "遞增或遞減運算子的運算元必須是變數或屬性存取。", - "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", - "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", - "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", - "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "剖析器需要找到 '{1}',以對應此處的 '{0}' 權杖。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "專案根目錄模棱兩可,但需要用以解決檔案 '{1}' 中的匯出對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", - "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "專案根目錄模稜兩可,但需要在檔案 '{1}' 中解析匯入對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", - "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "無法在此類別內的類型 '{1}' 上存取屬性 '{0}',原因是另一個拼字相同的私人識別碼已將其陰影。", - "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "參數裝飾項目函式的傳回型別必須是 'void' 或 'any'。", - "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "屬性裝飾項目函式的傳回型別必須是 'void' 或 'any'。", - "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同步函式的傳回型別必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同步函式或方法的傳回類型必須為全域 Promise 類型。", - "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同步函式或方法的傳回型別,必須為全域 Promise 類型。是否要寫入 'Promise<{0}>'?", - "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 陳述式的右方必須是類型 'any'、物件類型或型別參數,但此處為類型 '{0}'。", - "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術運算的右側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", - "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 運算式右側必須為 'any' 類型、類別、函式或其他可指派至 'Function' 介面型別的型別,或是具備 'Symbol.hasInstance' 方法的物件類型。", - "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 運算式右側不可為具現化運算式。", - "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 檔案的根值必須是物件。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目需要 {0} 個。", - "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目至少需要 {0} 個。", - "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' 的隱蔽宣告定義於此處", - "The_signature_0_of_1_is_deprecated_6387": "'{1}' 的特徵標記 '{0}' 已淘汰。", - "The_specified_path_does_not_exist_Colon_0_5058": "指定的路徑不存在: '{0}'。", - "The_tag_was_first_specified_here_8034": "此標籤第一次指定於此處。", - "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "物件其餘指派的目標不可為選擇性屬性存取。", - "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "物件剩餘指派的目標必須為變數或屬性存取。", - "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "類型 '{0}' 的 'this' 內容無法指派給方法之類型 '{1}' 的 'this'。", - "The_this_types_of_each_signature_are_incompatible_2685": "各個簽章的 'this' 類型不相容。", - "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "類型 '{0}' 為 'readonly',因此無法指派給可變動的類型 '{1}'。", - "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "[類型修飾元] 無法在 [匯出類型] 於其匯出陳述式上使用時,在命名的匯出上使用。", - "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "[類型修飾元] 無法在 [匯入類型] 於其匯入陳述式上使用時,在命名的匯入上使用。", - "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "無法將此節點的類型序列化,因為無法將其屬性 '{0}' 序列化。", - "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同步迭代器 '{0}()' 方法所傳回的類型,對具有 'value' 屬性的類型必須為 Promise。", - "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器 '{0}()' 方法所傳回的類型必須具有 'value' 屬性。", - "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' 的類型在這些類型之間不相容。", - "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' 所傳回的類型在這些類型之間不相容。", - "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", - "The_value_0_cannot_be_used_here_18050": "此處無法使用值 '{0}'。", - "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 陳述式的變數宣告不得有初始設定式。", - "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 陳述式的變數宣告不得有初始設定式。", - "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支援 'with' 陳述式。'with' 區塊中的所有符號都會有類型 'any'。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' 具有型別,不過在目前的 'moduleResolution' 設定下,無法解析此結果。建議更新為 'node16'、'nodenext' 或 'bundler'。", - "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' 具有型別,不過在採用 package.json \"exports\" 的狀態下,無法解析此結果。'{1}' 程式庫可能需要更新其 package.json 或輸入。", - "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此規則運算式中沒有名為 '{0}' 的擷取群組。", - "There_is_nothing_available_for_repetition_1507": "沒有可重複的內容。", - "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "此 JSX 標籤需要 '{0}' 在範圍內,但無法找到。", - "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "此 JSX 標籤需要模組路徑 '{0}' 存在,但無法找到。請確定您已安裝適當的套件類型。", - "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 標籤的 '{0}' 屬性只能有一個 '{1}' 類型的子系,但提供的子系卻有多個。", - "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 標籤的 '{0}' 屬性需要必須有多個子系的類型 '{1}',但僅提供的子系只有一個。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此反向參考參照的群組不存在。此規則運算式中沒有任何擷取群組。", - "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此反向參考參照的群組不存在。此規則運算式中只有 {0} 個擷取群組。", - "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二進位運算式一律不會是 nullish。是否缺少括弧?", - "This_character_cannot_be_escaped_in_a_regular_expression_1535": "此字元無法在規則運算式中逸出。", - "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比較似乎是無意的,因為類型 '{0}' 和 '{1}' 沒有重疊。", - "This_condition_will_always_return_0_2845": "此條件一律傳回 '{0}'。", - "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此條件一律會傳回 '{0}',因為 JavaScript 會依參照而非值比較物件。", - "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "因為此 '{0}' 一律會被定義,所以此條件一律傳回 True。", - "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "因為永遠會定義此函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?", - "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此建構函式可轉換為類別宣告。", - "This_expression_is_always_nullish_2871": "此運算式一律為 nullish.", - "This_expression_is_never_nullish_2881": "此運算式一律不會是 nullish。", - "This_expression_is_not_callable_2349": "無法呼叫此運算式。", - "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "因為此運算式為 'get' 存取子,所以無法呼叫。要在沒有 '()' 的情況下,使用該運算式嗎?", - "This_expression_is_not_constructable_2351": "無法建構此運算式。", - "This_file_already_has_a_default_export_95130": "此檔案已有預設匯出", - "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "重寫此匯入路徑並不安全,因為其解析到另一個專案,而專案輸出檔案之間的相對路徑與其輸入檔案之間的相對路徑不同。", - "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "這個匯入使用 '{0}' 副檔名來解析到輸入的 TypeScript 檔案,但在發出時不會重寫,因為其不是相對路徑。", - "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "此宣告正在增加中。請考慮將正在增加的宣告移至相同的檔案中。", - "This_kind_of_expression_is_always_falsy_2873": "此種運算式的值一律為 false。", - "This_kind_of_expression_is_always_truthy_2872": "此種運算式的值一律為 true。", - "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", - "This_may_be_converted_to_an_async_function_80006": "這可以轉換為非同步函式。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成員不能包含具有 'override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為包含此成員的類別 '{0}' 並未延伸另一個類別。", - "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為其名稱為動態。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "因為此成員並未在基底類別 '{0}' 中宣告,所以其不得具有 'override' 修飾元。", - "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成員不能具有 'override' 修飾元,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", - "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "因為此成員包含的類別 '{0}' 並未延伸其他類別,所以其不得具有 'override' 修飾元。", - "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "此成員的名稱為動態,因此不能有 『override』 修飾元。", - "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "此成員必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", - "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "因為此成員會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", - "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "因為此成員會覆寫基底類別 '{0}' 中宣告的抽象方法,所以其必須具有 'override' 修飾元。", - "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能以 ECMAScript 匯入/匯出來參考此模組,方法為開啟 '{0}' 旗標並參考其預設匯出。", - "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模組使用 'export =' 宣告,只能在使用 '{0}' 旗標時搭配預設匯入使用。", - "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "此作業可簡化。此班次與 `{0} {1} {2}` 完全相同。", - "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "由於缺少傳回型別註解,故此多載會隱含傳回 '{0}' 型別。", - "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此多載簽章與其實作簽章不相容。", - "This_parameter_is_not_allowed_with_use_strict_directive_1346": "不允許此參數搭配 'use strict' 指示詞使用。", - "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此參數屬性必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", - "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "因為此參數屬性會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", - "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "無法在子模式內切換此規則運算式旗標。", - "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "只有以 '{0}' 或更新版本作為目標時,才能使用規則運算式旗標。", - "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "此相對匯入路徑在重寫時是不安全的,因為其看起來像檔案名稱,但實際上解析為 \"{0}\"。", - "This_spread_always_overwrites_this_property_2785": "此展開會永遠覆寫此屬性。", - "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "啟用 'erasableSyntaxOnly' 時,不允許使用此語法。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此語法是保留在具有 mts 或 cts 副檔名的檔案中。新增尾端逗號或明確條件約束。", - "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此語法會保留在具有 mts 或 cts 副檔名的檔案中。請改用 `as` 運算式。", - "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此語法需要已匯入的協助程式,但找不到模組 '{0}'。", - "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此語法需要名為 '{1}' 的已匯入協助程式,但其不存在於 '{0}' 中。請考慮升級您的 '{0}' 版本。", - "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此語法需要名為 '{1}' 且具有 {2} 參數的匯入協助程式,其與 '{0}' 中的參數不相容。請考慮升級 '{0}' 的版本。", - "This_type_parameter_might_need_an_extends_0_constraint_2208": "此類型參數可能需要 'extends {0}' 限制式。", - "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "此 'import' 的使用方式無效。'import()' 呼叫可以寫入,但必須有括弧,而且不能有類型引數。", - "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "若要將此檔案轉換為 ECMAScript 模組,請將欄位 `{ \"type\": \"module\" }` 新增至 '{0}'。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或將欄位 `\"type\": \"module\"` 新增至 '{1}'。", - "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或使用 `{ \"type\": \"module\" }` 建立本機 package.json 檔案。", - "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要將此檔案轉換為 ECMAScript 模組,請建立具有 `{ \"type\": \"module\" }` 的本機 package.json 檔案。", - "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。", - "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "只有當 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',且 'target' 選項設為 'es2017' 或更高版本時,才能在最上層使用 'await using' 陳述式。", - "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 檔案中的最上層宣告必須以 'declare' 或 'export' 修飾元開頭。", - "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。", - "Trailing_comma_not_allowed_1009": "尾端不得為逗號。", - "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "以個別模組的形式轉換每個檔案的語言 (類似於 'ts.transpileModule')。", - "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "如有 `npm i --save-dev @types/{1}`,請嘗試使用,或新增包含 `declare module '{0}';` 的宣告 (.d.ts) 檔案", - "Trying_other_entries_in_rootDirs_6110": "正在嘗試 'rootDirs' 中的其他項目。", - "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在嘗試替代 '{0}',候選模組位置: '{1}'。", - "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長度為 '{1}' 的元組類型 '{0}' 在索引 '{2}' 沒有項目。", - "Tuple_type_arguments_circularly_reference_themselves_4110": "元組類型引數會循環參考自身。", - "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有使用 '--downlevelIteration' 旗標或 'es2015' 或更新版本的 '--target' 時,才能逐一查看類型 '{0}'。", - "Type_0_cannot_be_used_as_an_index_type_2538": "類型 '{0}' 無法作為索引類型。", - "Type_0_cannot_be_used_to_index_type_1_2536": "類型 '{0}' 無法用來為類型 '{1}' 編制索引。", - "Type_0_does_not_satisfy_the_constraint_1_2344": "類型 '{0}' 不符合條件約束 '{1}'。", - "Type_0_does_not_satisfy_the_expected_type_1_1360": "類型 '{0}' 不符合預期類型 '{1}'。", - "Type_0_has_no_call_signatures_2757": "類型 '{0}' 沒有任何呼叫簽章。", - "Type_0_has_no_construct_signatures_2761": "類型 '{0}' 沒有任何建構簽章。", - "Type_0_has_no_matching_index_signature_for_type_1_2537": "類型 '{0}' 沒有與類型 '{1}' 相符的索引簽章。", - "Type_0_has_no_properties_in_common_with_type_1_2559": "類型 '{0}' 與類型 '{1}' 沒有任何共通的屬性。", - "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "類型 '{0}' 沒有適用類型引數清單的簽章。", - "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "類型 '{0}' 為泛型型別,只能針對讀取編製索引。", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2}", - "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2},以及另外 {3} 個。", - "Type_0_is_not_a_constructor_function_type_2507": "類型 '{0}' 不是建構函式類型。", - "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "在 ES5 中,'{0}' 型別並非有效的非同步傳回型別,因為其不會參考與 Promise 相容的建構函式值。", - "Type_0_is_not_an_array_type_2461": "類型 '{0}' 不是陣列類型。", - "Type_0_is_not_an_array_type_or_a_string_type_2495": "類型 '{0}' 不是陣列類型或字串類型。", - "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "類型 '{0}' 不是陣列類型或字串類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", - "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "類型 '{0}' 不是陣列類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", - "Type_0_is_not_assignable_to_type_1_2322": "類型 '{0}' 不可指派給類型 '{1}'。", - "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "不得將類型 '{0}' 指派給類型 '{1}'。您指的是 '{2}' 嗎?", - "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "無法將類型 '{0}' 指派給類型 '{1}'。有兩種使用此名稱的不同類型存在,但彼此並不相關。", - "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "無法將型別 '{0}' 指派給型別 '{1}',如變異數註釋所隱含。", - "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "無法將類型 '{0}' 指派給計算之列舉成員值所需的 '{1}'。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標屬性的類型。", - "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標的類型。", - "Type_0_is_not_comparable_to_type_1_2678": "類型 '{0}' 無法和類型 '{1}' 比較。", - "Type_0_is_not_generic_2315": "'{0}' 不是泛型類型。", - "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "類型 '{0}' 可能代表基本值,但不允許做為 'in' 運算子的右運算元。", - "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "類型 '{0}' 必須具備會傳回非同步迭代器的 '[Symbol.asyncIterator]()' 方法。", - "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "類型 '{0}' 必須具備會傳回迭代器的 '[Symbol.iterator]()' 方法。", - "Type_0_provides_no_match_for_the_signature_1_2658": "類型 '{0}' 沒有符合特徵標記 '{1}' 的項目。", - "Type_0_recursively_references_itself_as_a_base_type_2310": "類型 '{0}' 將自己當做基底類型遞迴參考。", - "Type_Checking_6248": "類型檢查", - "Type_alias_0_circularly_references_itself_2456": "類型別名 '{0}' 會循環參考自己。", - "Type_alias_must_be_given_a_name_1439": "必須為類型別名指定名稱。", - "Type_alias_name_cannot_be_0_2457": "類型別名不得為 '{0}'。", - "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "類型別名只可用於 TypeScript 檔案中。", - "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "建構函式宣告不得有類型註釋。", - "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "型別註解只可用於 TypeScript 檔案中。", - "Type_argument_expected_1140": "必須是型別引數。", - "Type_argument_list_cannot_be_empty_1099": "型別引數清單不得為空白。", - "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "類型引數只可用於 TypeScript 檔案中。", - "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' 的類型引數會循環參考自身。", - "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "類型判斷提示運算式只可用於 TypeScript 檔案中。", - "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "來源中位於 {0} 的類型與目標中位於 {1} 的類型不相容。", - "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "來源中位於 {0} 到 {1} 的類型與目標中位於 {2} 的類型不相容。", - "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "型別如包含私人名稱 '{0}',則無法搭配 --isolatedDeclarations 使用。", - "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在編譯內的類型宣告檔案。", - "Type_expected_1110": "必須是類型。", - "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "輸入匯入判斷提示應該只有一個索引鍵 - 'resolution-mode' - 值為 'import' 或 'require'。", - "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "從 CommonJS 模組匯入 ECMAScript 模組的類型必須有 'resolution-mode' 屬性。", - "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "類型具現化過深,可能會有無限深度。", - "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "類型在其本身 'then' 方法的完成回撥中直接或間接受到參考。", - "Type_library_referenced_via_0_from_file_1_1402": "透過 '{0}' 從檔案 '{1}' 參考的型別程式庫", - "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "透過 '{0}' 從檔案 '{1}' (packageId 為 '{2}') 參考的型別程式庫", - "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", - "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "已計算屬性值的類型為 '{0}',其無法指派給類型 '{1}'。", - "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "執行個體成員變數 '{0}' 的類型不得參考建構函式中所宣告的識別碼 '{1}'。", - "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' 運算元的反覆項目類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", - "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "屬性 '{0}' 的類型在對應的類型 '{1}' 中會循環參考自己。", - "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "非同步產生器中的 'yield' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", - "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "從 CommonJS 模組進行僅限類型匯入 ECMAScript 模組時,必須有 'resolution-mode' 屬性。", - "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "類型源自此匯入。無法呼叫或建構命名空間樣式的匯入,而且可能會在執行階段導致失敗。請考慮改用預設匯入或於此處匯入 require。", - "Type_parameter_0_has_a_circular_constraint_2313": "類型參數 '{0}' 具有循環條件約束。", - "Type_parameter_0_has_a_circular_default_2716": "型別參數 '{0}' 包含循環的預設值。", - "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "匯出介面中呼叫簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "匯出介面中建構函式簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "匯出類別的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "匯出函式的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "匯出介面的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "已匯出對應物件類型的型別參數 '{0}' 正在使用私人名稱 '{1}'。", - "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "匯出類型別名的型別參數 '{0}' 具有或正在使用私人名稱 '{1}'。", - "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "匯出介面中方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "匯出類別中公用方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "匯出類別中公用靜態方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", - "Type_parameter_declaration_expected_1139": "必須是型別參數宣告。", - "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "型別參數宣告只可用於 TypeScript 檔案中。", - "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "型別參數預設只能參考先前宣告的型別參數。", - "Type_parameter_list_cannot_be_empty_1098": "型別參數清單不得為空白。", - "Type_parameter_name_cannot_be_0_2368": "型別參數名稱不得為 '{0}'。", - "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "建構函式宣告不得有類型參數。", - "Type_predicate_0_is_not_assignable_to_1_1226": "型別述詞 '{0}' 不可指派給 '{1}'。", - "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "類型產生的元組類型太大而無法表示。", - "Type_reference_directive_0_was_not_resolved_6120": "======== 類型參考指示詞 '{0}' 未解析。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',主要: {2}。========", - "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}',主要: {3}。========", - "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "類型滿足運算式只可用於 TypeScript 檔案。", - "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "類型不能出現在 JavaScript 檔案的匯出宣告中。", - "Types_have_separate_declarations_of_a_private_property_0_2442": "類型具有私用屬性 '{0}' 的個別宣告。", - "Types_of_construct_signatures_are_incompatible_2419": "建構簽章的類型不相容。", - "Types_of_parameters_0_and_1_are_incompatible_2328": "參數 '{0}' 和 '{1}' 的類型不相容。", - "Types_of_property_0_are_incompatible_2326": "屬性 '{0}' 的類型不相容。", - "Unable_to_open_file_0_6050": "無法開啟檔案 '{0}'。", - "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "無法解析以運算式形式呼叫之類別裝飾項目的簽章。", - "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "無法解析以運算式形式呼叫之方法裝飾項目的簽章。", - "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "無法解析以運算式形式呼叫之參數裝飾項目的簽章。", - "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "無法解析以運算式形式呼叫之屬性裝飾項目的簽章。", - "Undetermined_character_escape_1513": "未定字元逸出。", - "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "未預期的 '{0}'。您是要使用反斜線將其逸出嗎?", - "Unexpected_end_of_text_1126": "未預期的文字結尾。", - "Unexpected_keyword_or_identifier_1434": "未預期的關鍵字或識別碼。", - "Unexpected_token_1012": "未預期的語彙基元。", - "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "未預期的語彙基元。必須是建構函式、方法、存取子或屬性。", - "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "權杖錯誤。類型參數名稱不應有大括號。", - "Unexpected_token_Did_you_mean_or_gt_1382": "未預期的語彙基元。您是指 `{'>'}` 或 `>` 嗎?", - "Unexpected_token_Did_you_mean_or_rbrace_1381": "未預期的語彙基元。您是指 `{'}'}` 或 `}` 嗎?", - "Unexpected_token_expected_1179": "未預期的語彙基元。必須是 '{'。", - "Unicode_escape_sequence_cannot_appear_here_17021": "此處不可出現 Unicode 逸出序列。", - "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 逸出序列。", - "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 屬性值運算式。", - "Unknown_Unicode_property_name_1524": "未知的 Unicode 屬性名稱。", - "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 屬性名稱或值。", - "Unknown_Unicode_property_value_1526": "未知的 Unicode 屬性值。", - "Unknown_build_option_0_5072": "未知的組建選項 '{0}'。", - "Unknown_build_option_0_Did_you_mean_1_5077": "未知的組建選項 '{0}'。您是指 '{1}' 嗎?", - "Unknown_compiler_option_0_5023": "不明的編譯器選項 '{0}'。", - "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的編譯器選項 '{0}'。您是指 '{1}' 嗎?", - "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的關鍵字或識別碼。您是不是指 '{0}'?", - "Unknown_option_excludes_Did_you_mean_exclude_6114": "選項 'excludes' 未知。您是指 'exclude' 嗎?", - "Unknown_regular_expression_flag_1499": "未知的規則運算式旗標。", - "Unknown_type_acquisition_option_0_17010": "未知的類型取得選項 '{0}'。", - "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的類型擷取選項 '{0}'。您是指 '{1}' 嗎?", - "Unknown_watch_option_0_5078": "未知的監看選項 '{0}'。", - "Unknown_watch_option_0_Did_you_mean_1_5079": "未知的監看選項 '{0}'。您是指 '{1}' 嗎?", - "Unreachable_code_detected_7027": "偵測到無法執行到的程式碼。", - "Unterminated_Unicode_escape_sequence_1199": "未結束的 Unicode 逸出序列。", - "Unterminated_quoted_string_in_response_file_0_6045": "回應檔 '{0}' 中有未結束的括號字串。", - "Unterminated_regular_expression_literal_1161": "未結束的規則運算式常值。", - "Unterminated_string_literal_1002": "未結束的字串常值。", - "Unterminated_template_literal_1160": "未結束的樣板常值。", - "Untyped_function_calls_may_not_accept_type_arguments_2347": "不具類型的函式呼叫無法接受類型引數。", - "Unused_label_7028": "未使用的標籤。", - "Unused_ts_expect_error_directive_2578": "未使用的 '@ts-expect-error' 指示詞。", - "Update_import_from_0_90058": "從 \"{0}\" 更新匯入", - "Update_modifiers_of_0_90061": "更新 '{0}' 的修飾元", - "Updating_output_timestamps_of_project_0_6359": "正在更新專案 '{0}' 的輸出時間戳記...", - "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新專案 '{0}' 的未更變輸出時間戳記...", - "Use_0_95174": "使用 `{0}`。", - "Use_0_instead_5106": "請改用 '{0}'。", - "Use_Number_isNaN_in_all_conditions_95175": "在所有條件中都使用 'Number.isNaN'。", - "Use_element_access_for_0_95145": "對 '{0}' 使用元素存取", - "Use_element_access_for_all_undeclared_properties_95146": "對所有未宣告的屬性使用元素存取。", - "Use_import_type_95180": "請使用 'import type'", - "Use_synthetic_default_member_95016": "使用綜合 'default' 成員。", - "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析套件匯入時,請使用 package.json 'exports' 欄位。", - "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析匯入時,請使用 package.json 'imports' 欄位。", - "Use_type_0_95181": "請使用 'type {0}'", - "Using_0_subpath_1_with_target_2_6404": "使用 '{0}' 子路徑 '{1}' 與目標 '{2}'。", - "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "使用 JSX 片段需要片段中心 '{0}' 在範圍內,但無法找到。", - "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "只有在 ECMAScript 5 及更高版本中,才可在 'for...of' 陳述式中使用字串。", - "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build、-b 會讓 tsc 的行為較編譯器更像是建置協調器。這可用於觸發建置複合專案,您可以在以下位置深入了解: {0}", - "Using_compiler_options_of_project_reference_redirect_0_6215": "正在使用專案參考重新導向 '{0}' 的編譯器選項。", - "VERSION_6036": "版本", - "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "類型為 '{0}' 的值與類型 '{1}' 沒有任何共通的屬性。確定要呼叫嗎?", - "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "無法呼叫類型 '{0}' 的值。您要包含 'new' 嗎?", - "Variable_0_implicitly_has_an_1_type_7005": "變數 '{0}' 隱含有 '{1}' 類型。", - "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "變數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", - "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "變數 '{0}' 在某些位置隱含類型 '{1}',但可從使用方式推斷更適合的類型。", - "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "變數 '{0}' 在某些其類型無法判斷的位置隱含地擁有類型 '{1}'。", - "Variable_0_is_used_before_being_assigned_2454": "變數 '{0}' 已在指派之前使用。", - "Variable_declaration_expected_1134": "必須是變數宣告。", - "Variable_declaration_list_cannot_be_empty_1123": "變數宣告清單不得為空白。", - "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允許變數宣告。", - "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "變數必須有具備 --isolatedDeclarations 的明確型別註釋。", - "Variables_with_multiple_declarations_cannot_be_inlined_95186": "無法內嵌有多個宣告的變數。", - "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "來源中位於 {0} 的可變元素與目標中位於 {1} 的元素不相符。", - "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "只有物件、函式、建構函式和對應類型的類型別名才支援差異註釋。", - "Version_0_6029": "版本 {0}", - "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", - "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "請造訪 https://aka.ms/ts6 以取得移轉資訊。", - "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "瀏覽 https://aka.ms/tsconfig 以閱讀此檔案的詳細資訊", - "WATCH_OPTIONS_6918": "監看式選項", - "Watch_and_Build_Modes_6250": "觀看及建置模式", - "Watch_input_files_6005": "監看輸入檔。", - "Watch_option_0_requires_a_value_of_type_1_5080": "監看選項 '{0}' 需要 {1} 類型的值。", - "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "我們只能在此新增整個參數的類型,來寫入 '{0}' 的類型。", - "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "指派函式時,請檢查以確認參數,而且傳回值是子類型相容的。", - "When_type_checking_take_into_account_null_and_undefined_6699": "當型別檢查時,請將 'null' 和 'undefined' 納入考慮。", - "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否要將已過期的主控台輸出,維持在監看模式下,而非清除螢幕。", - "Wrap_all_invalid_characters_in_an_expression_container_95109": "將所有無效字元包裝在運算式容器中", - "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "將所有無效的裝飾項目運算式以括弧包住", - "Wrap_all_object_literal_with_parentheses_95116": "使用括弧括住所有物件常值", - "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "將所有無上層 JSX 包裝至 JSX 片段中", - "Wrap_in_JSX_fragment_95120": "包裝至 JSX 片段中", - "Wrap_in_parentheses_95194": "以括弧包住", - "Wrap_invalid_character_in_an_expression_container_95108": "包裝在運算式容器中的字元無效", - "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "使用括弧括住下列必須是物件常值的主體", - "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "您可以在以下位置了解所有編譯器選項: {0}", - "You_cannot_rename_a_module_via_a_global_import_8031": "您無法透過全域匯入重新命名模組。", - "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "您無法重新命名 'node_modules' 資料夾中定義的元素。", - "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "您無法重新命名其他 'node_modules' 資料夾中定義的元素。", - "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "您無法重新命名標準 TypeScript 程式庫中所定義的項目。", - "You_cannot_rename_this_element_8000": "您無法重新命名這個項目。", - "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' 在此只接受極少數的引數用為裝飾項目。要先呼叫此項目,然後再寫入 '@{0}()' 嗎?", - "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 和 '{1}' 索引簽章不相容。", - "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 與 '{1}' 作業無法在沒有括號的情況下同時使用。", - "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' 指定了兩次。將會覆寫名為 '{0}' 的屬性。", - "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型別以 '{0}' 作為結尾,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", - "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型別以 '{0}' 作為開頭,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", - "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能透過開啟 'esModuleInterop' 旗標並使用預設匯入來匯入 '{0}'。", - "_0_can_only_be_imported_by_using_a_default_import_2595": "只能使用預設匯入來匯入 '{0}'。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能使用 'require' 呼叫,或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", - "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 'require' 呼叫或預設匯入來匯入 '{0}'。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "只能使用 'import {1} = require({2})' 或預設匯入來匯入 '{0}'。", - "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "只能使用 'import {1} = require({2})',或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", - "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' 不能用作 JSX 元件。", - "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "因為 '{0}' 是使用 'export type' 匯出的,所以無法作為值使用。", - "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "因為 '{0}' 是使用 'import type' 匯入的,所以無法作為值使用。", - "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 元件不接受文字作為子項目。JSX 中的文字具有類型 'string',但 '{1}' 需要的類型為 '{2}'。", - "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' 可以使用與 '{1}' 無關的任意類型來具現化。", - "_0_declarations_can_only_be_declared_inside_a_block_1156": "只能在區塊內宣告 '{0}' 宣告。", - "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣告只可用於 TypeScript 檔案中。", - "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣告可能沒有繫結模式。", - "_0_declarations_must_be_initialized_1155": "必須初始化 '{0}' 宣告。", - "_0_expected_1005": "必須是 '{0}'。", - "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' 具有字串型別,但在啟用 'isolatedModules' 的狀態下,其語法必須是可辨識的字串語法。", - "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' 沒有任何名稱為 '{1}' 的已匯出成員。您是指 '{2}' 嗎?", - "_0_implementations_95200": "{0} implementations", - "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' 隱含 '{1}' 傳回型別,但可從使用方式推斷更適合的類型。", - "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' 因為沒有傳回型別註解,且在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", - "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' 因為沒有類型註釋,且在其本身的初始設定式中直接或間接參考了自己,所以隱含有類型 'any'。", - "_0_index_signatures_are_incompatible_2634": "'{0}' 索引簽章不相容。", - "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 索引類型 '{1}' 無法指派給 '{2}' 索引類型 '{3}'。", - "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' 為基元,但 '{1}' 為包裝函式物件。建議盡可能使用 '{0}'。", - "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' 為類型,無法匯入 JavaScript 檔案。在 JSDoc 類型註釋中使用 '{1}'。", - "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' 為型別,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", - "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' 是未使用的 '{1}' 重新命名。您是否想要使用它作為類型註釋?", - "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' 可指派給 '{1}' 類型的條件約束,但可能會將 '{1}' 以不同的條件約束 '{2}' 子類型來具現化。", - "_0_is_automatically_exported_here_18044": "'{0}' 會自動匯出到此處。", - "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' 已宣告但從未讀取其值。", - "_0_is_declared_but_never_used_6196": "宣告了 '{0}',但從未使用過。", - "_0_is_declared_here_2728": "'{0}' 宣告於此處。", - "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' 在類別 '{1}' 中定義為屬性,但在此處的 '{2}' 中卻覆寫為存取子。", - "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' 在類別 '{1}' 中定義為存取子,但在此處的 '{2}' 中卻覆寫為執行個體屬性。", - "_0_is_deprecated_6385": "'{0}' 已淘汰。", - "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", - "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' 對關鍵字 '{1}' 而言不是有效的中繼屬性。您是指 '{2}' 嗎?", - "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", - "_0_is_not_allowed_as_a_parameter_name_1390": "不允許 '{0}' 做為參數名稱。", - "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' 不能是變數宣告名稱。", - "_0_is_of_type_unknown_18046": "'{0}' 的類型為 'unknown'。", - "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", - "_0_is_possibly_null_18047": "'{0}' 可能是 'null'。", - "_0_is_possibly_null_or_undefined_18049": "'{0}' 可能為「null」或「未定義」。", - "_0_is_possibly_undefined_18048": "'{0}' 可能為「未定義」。", - "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' 在其本身的基底運算式中直接或間接受到參考。", - "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' 在其本身的類型註釋中直接或間接受到參考。", - "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "多次指定 '{0}',因此將會覆寫此使用方式。", - "_0_list_cannot_be_empty_1097": "'{0}' 清單不得為空白。", - "_0_modifier_already_seen_1030": "已有 '{0}' 修飾元。", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾元只能出現在類別、介面或型別別名的型別參數上", - "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾元只能出現在方法或類別,或是函式的型別參數中。", - "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "建構函式宣告不得有 '{0}' 修飾元。", - "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "模組或命名空間元素不能有 '{0}' 修飾元。", - "_0_modifier_cannot_appear_on_a_parameter_1090": "參數不得有 '{0}' 修飾元。", - "_0_modifier_cannot_appear_on_a_type_member_1070": "類型成員不能有 '{0}' 修飾元。", - "_0_modifier_cannot_appear_on_a_type_parameter_1273": "型別參數上不能出現 '{0}' 修飾元", - "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾元不可出現在 'using' 宣告中。", - "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾元不可出現在 'await using' 宣告中。", - "_0_modifier_cannot_appear_on_an_index_signature_1071": "索引簽章不能有 '{0}' 修飾元。", - "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "不得在此種類別項目中使用 '{0}' 修飾元。", - "_0_modifier_cannot_be_used_here_1042": "無法在此處使用 '{0}' 修飾元。", - "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "無法在環境內容中使用 '{0}' 修飾元。", - "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾元無法與 '{1}' 修飾元並用。", - "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾元不可搭配私人識別碼一起使用。", - "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾元必須在 '{1}' 修飾元之前。", - "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 後必須是以大括弧括住的 Unicode 屬性值運算式。", - "_0_needs_an_explicit_type_annotation_2782": "'{0}' 需要明確的型別註解。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' 只參考類型,但在這裡用作命名空間。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' 只會參考類型,但此處將其用為值。", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' 僅限於類型,但此處用為值。您要使用 '{1} in {0}' 嗎?", - "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "「{0}」僅指一種類型,但在此卻作為值使用。要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。", - "_0_references_95198": "{0} references", - "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' 指的是全域的 UMD,但目前的檔案為模組。請考慮改為新增匯入。", - "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' 為值,但在此處卻作為類型使用。您是否是指 'typeof {0}'?", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", - "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", - "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' 會解析為僅限型別的宣告,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", - "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", - "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須透過僅限型別的重新匯出作業重新匯出。", - "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' 應該在設定 json 檔案的 'compilerOptions' 物件內設定。", - "_0_tag_already_specified_1223": "已指定 '{0}' 標記。", - "_0_was_also_declared_here_6203": "'{0}' 也已宣告於此處。", - "_0_was_exported_here_1377": "'{0}' 已匯出到此處。", - "_0_was_imported_here_1376": "'{0}' 已匯入到此處。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "缺少傳回型別註解的 '{0}' 隱含了 '{1}' 傳回型別。", - "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少傳回型別註解的 '{0}' 隱含 '{1}' 產生類型。", - "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾元只能出現在類別宣告、方法宣告或屬性宣告。", - "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 修飾詞只能出現在屬性宣告。", - "and_here_6204": "及此處。", - "and_npm_install_D_types_Slashnode_6290": "和 npm 安裝 -D @types/node", - "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "在屬性初始化器或類別靜態初始化區塊中無法引用『arguments』。", - "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 處理具有 imports、exports、import.meta, jsx (具有 jsx: react-jsx) 的檔案,或以 esm 格式 (具有 module: node16+) 作為模組。", - "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 運算式無法在類別靜態區塊內使用。", - "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "當檔案為模組時,只允許 'await' 運算式位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", - "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "只允許在非同步函式中與模組的最上層使用 'await' 運算式。", - "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 運算式不得用於參數初始設定式。", - "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' 對此運算式的類型沒有作用。", - "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "環境內容中不允許使用 'await using' 宣告。", - "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "當檔案為模組時,僅能在檔案最上層使用 'await using' 陳述式,但此檔案沒有任何匯入或匯出。建議新增空白的 'export {}',讓此檔案成為模組。", - "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 陳述式僅能在非同步函式內,以及模組的最上層使用。", - "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 陳述式無法在類別靜態區塊內使用。", - "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 選項已設為 '{0}'。此值將用於解析非相對的模組名稱 '{1}'。", - "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 後必須是 ASCII 字母。", - "can_only_be_used_at_the_start_of_a_file_18026": "'#!' 只能用於檔案開頭。", - "case_or_default_expected_1130": "必須是 'case' 或 'default'。", - "catch_or_finally_expected_1472": "必須是 'catch' 或 'finally'。", - "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列舉成員初始設定式已評估為非有限值。", - "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列舉成員初始設定式已評估為不允許的值 'NaN'。", - "const_enum_member_initializers_must_be_constant_expressions_2474": "常數列舉成員初始設定式必須為常數運算式。", - "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列舉只可用於屬性或索引存取運算式中,或用於匯入宣告、匯出指派或類型查詢的右側。", - "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' 不能作為參數屬性名稱使用。", - "constructor_is_a_reserved_word_18012": "'#constructor' 為保留字。", - "default_Colon_6903": "預設:", - "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "不得在 strict 模式中對識別碼呼叫 'delete'。", - "export_Asterisk_does_not_re_export_a_default_1195": "'export *' 不會重新匯出預設匯出。", - "export_can_only_be_used_in_TypeScript_files_8003": "'export =' 只可用於 TypeScript 檔案中。", - "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' 修飾元無法套用至環境模組或模組增強指定,原因是這二者永遠會顯示。", - "extends_clause_already_seen_1172": "已經有 'extends' 子句。", - "extends_clause_must_precede_implements_clause_1173": "'extends' 子句必須在 'implements' 子句之前。", - "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "匯出類別 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", - "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "匯出類別的 'extends' 子句包含或使用了私人名稱 '{0}'。", - "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "匯出介面 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", - "false_unless_checkJs_is_set_6932": "'false',除非已設定 'checkJs'", - "false_unless_composite_is_set_6906": "`false`,除非已設定 `composite`", - "file_6025": "檔案", - "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "當檔案為模組時,只允許 'for await' 迴圈位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", - "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "只允許在非同步函式中與模組的最上層使用 'for await' 迴圈。", - "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。", - "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 和 'set' 存取子不可宣告 'this' 參數。", - "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定 `files`,則為 `[]`,否則為 `[\"**/*\"]`", - "implements_clause_already_seen_1175": "已經有 'implements' 子句。", - "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 子句只可用於 TypeScript 檔案中。", - "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' 只可用於 TypeScript 檔案中。", - "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "只允許在條件式類型的 'extends' 子句中使用 'infer' 宣告。", - "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 後必須是以角括弧括住的擷取群組名稱。", - "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' 或 'const' 宣告中不得使用 'let' 作為名稱。", - "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "目標缺少建構簽章的 'new' 運算式隱含了 'any' 類型。", - "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`,加上 `outDir` 的值 (如果有指定)。", - "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "如果 `module` 是 `nodenext`,則為 `nodenext`; 如果 `module` 是 `node16` 或 `node18`,則為 `node16`; 否則為 `bundler`。", - "one_of_Colon_6900": "以下其中一個:", - "one_or_more_Colon_6901": "以下一或多個:", - "options_6024": "選項", - "or_JSX_element_expected_1145": "必須是 '{' 或 JSX 元素。", - "or_expected_1144": "必須是 '{' 或 ';'。", - "package_json_does_not_have_a_0_field_6100": "'package.json' 沒有 '{0}' 欄位。", - "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' 沒有任何符合 '{0}' 版本的 'typesVersions' 項目。", - "package_json_had_a_falsy_0_field_6220": "'package.json' 具有假的 '{0}' 欄位。", - "package_json_has_0_field_1_that_references_2_6101": "'package.json' 有參考 '{2}' 的 '{0}' 欄位 '{1}'。", - "package_json_has_a_peerDependencies_field_6281": "'package.json' 具有 'peerDependencies' 欄位。", - "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' 具有 'typesVersions' 項目 '{0}',其非有效的 SemVer 範圍。", - "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' 具有符合編譯器版本 '{1}' 的 'typesVersions' 項目 '{0}',要尋找符合模組名稱 '{2}' 的模式。", - "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' 具有限定版本路徑對應的 'typesVersions' 欄位。", - "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.js 範圍 '{0}' 將指定名稱 '{1}' 明確對應到 Null。", - "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.js 範圍 '{0}' 對指定名稱 '{1}' 的目標具有無效類型", - "package_json_scope_0_has_no_imports_defined_6273": "package.js 範圍 '{0}' 沒有定義的匯入。", - "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 選項已指定,將尋找符合模組名稱 '{0}' 的模式。", - "q_is_only_available_inside_character_class_1511": "'\\q' 僅可在字元類別中使用。", - "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 後必須是字串 (可選擇以大括弧括住該字串)。", - "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾元只能出現在屬性宣告或索引簽章。", - "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 類型修飾元只可用於陣列與元組常值類型。", - "require_call_may_be_converted_to_an_import_80005": "'require' 呼叫可能會轉換為匯入。", - "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能針對僅限輸入的匯入設定 'resolution-mode'。", - "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' 是輸入匯入判斷提示唯一有效的索引鍵。", - "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode` 應該是 `require` 或 `import`。", - "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 選項已設定。該選項將用於解析相對的模組名稱 '{0}'。", - "super_can_only_be_referenced_in_a_derived_class_2335": "只有衍生類別中才可參考 'super'。", - "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "只有在衍生類別或物件常值運算式的成員中才可參考 'super'。", - "super_cannot_be_referenced_in_a_computed_property_name_2466": "計算的屬性名稱中不得參考 'super'。", - "super_cannot_be_referenced_in_constructor_arguments_2336": "建構函式引數中不得參考 'super'。", - "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "當選項 'target' 為 'ES2015' 或更高時,只有在物件常值運算式的成員中才允許 'super'。", - "super_may_not_use_type_arguments_2754": "'super' 不可以使用類型引數。", - "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "必須先呼叫 'super' 才能存取衍生類別建構函式中 'super' 的屬性。", - "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "必須先呼叫 'super' 才能存取衍生類別中建構函式的 'this'。", - "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' 之後必須接引數清單或成員存取。", - "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "只有在建構函式、成員函式或衍生類別的成員存取子中,才能存取 'super' 屬性。", - "this_cannot_be_referenced_in_a_computed_property_name_2465": "計算的屬性名稱中不得參考 'this'。", - "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "模組或命名空間主體中不得參考 'this'。", - "this_cannot_be_referenced_in_a_static_property_initializer_2334": "靜態屬性初始設定式中不得參考 'this'。", - "this_cannot_be_referenced_in_current_location_2332": "目前的位置中不得參考 'this'。", - "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "因為 'this' 沒有型別註解,所以隱含具有類型 'any'。", - "true_for_ES2022_and_above_including_ESNext_6930": "ES2022 及以上為 true,包括 ESNext。", - "true_if_composite_false_otherwise_6909": "如果為 `composite`,則為 `true`,否則為 `false`", - "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", - "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "當 'moduleResolution' 為 'node16'、'nodenext' 或 'bundler' 時,為 `true`; 否則為 `false`。", - "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 編譯器", - "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", - "type_Colon_6902": "輸入:", - "unique_symbol_types_are_not_allowed_here_1335": "這裡不允許 'unique symbol' 型別。", - "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "只有變數陳述式中的變數允許 'unique symbol' 型別。", - "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型別無法用在具有繫結名稱的變數宣告上。", - "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' 指示詞不可搭配非簡易參數清單使用。", - "use_strict_directive_used_here_1349": "'use strict' 指示詞已用於此處。", - "using_declarations_are_not_allowed_in_ambient_contexts_1545": "環境內容中不允許 'using' 宣告。", - "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", - "with_statements_are_not_allowed_in_an_async_function_block_1300": "非同步函式區塊中不允許 'with' 陳述式。", - "with_statements_are_not_allowed_in_strict_mode_1101": "不得在 strict 模式中使用 'with' 陳述式。", - "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "因為 'yield' 運算式包含的產生器缺少傳回型別註解,所以其隱含導致 'any' 類型。", - "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 運算式不得用於參數初始設定式。" -} \ No newline at end of file +{ + "1_implementation_95201": "1 implementation", + "1_reference_95199": "1 reference", + "4_unless_singleThreaded_is_passed_6937": "4, unless --singleThreaded is passed.", + "ALL_COMPILER_OPTIONS_6917": "所有編譯器選項", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾元無法與匯入宣告並用。", + "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 參數必須為第一個參數。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 標籤不能接在 '@typedef'、'@callback' 或 '@overload' 標籤後面", + "A_JSDoc_type_tag_on_a_function_must_have_a_signature_with_the_correct_number_of_arguments_8030": "A JSDoc '@type' tag on a function must have a signature with the correct number of arguments.", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 註解不能包含多個 '@type' 標籤。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "無法使用 'bigint' 常值做為屬性名稱。", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Bigint 常值不可使用指數標記法。", + "A_bigint_literal_must_be_an_integer_1353": "Bigint 常值必須為整數。", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "實作簽章中不得省略繫結模式參數。", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 陳述式只可在封入的反覆項目或 switch 陳述式內使用。", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 陳述式只可跳至封入之陳述式的標籤。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字元類別不得包含保留的雙標點符號。您是要使用反斜線將其逸出嗎?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字元類別範圍不得被另一個字元類別限制。", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "類別只能實作具有選擇性型別引數的識別碼/限定名稱。", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "類別只能使用靜態已知成員來實作物件類型或物件類型的交集。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "無法延伸基本類型的類別,例如 '{0}'。類別只能延伸可建構值。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "無法實作基本類型的類別,例如 '{0}'。該類別只能實作其他具名物件類型。", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不具 'default' 修飾元的類別宣告必須要有名稱。", + "A_class_member_cannot_have_the_0_keyword_1248": "類別成員不能含有 '{0}' 關鍵字。", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "計算的屬性名稱中不可有逗點運算式。", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算的屬性名稱不得參考其包含類型中的型別參數。", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "類別屬性宣告中的已計算屬性名稱必須具有簡單常值型別或 'unique symbol' 型別。", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法多載中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "常值型別中的計算屬性名稱,必須參考類型為常值型別或 'unique symbol' 類型的運算式。", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境內容中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "介面中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "計算的屬性名稱必須是 'string'、'number'、'symbol' 或 'any' 類型。", + "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355": "'const' 判斷提示只可套用至列舉成員、字串、數字、布林值、陣列或物件常值的參考。", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "若要存取常數列舉成員,必須透過字串常值。", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "環境內容中的 'const' 初始設定式必須為字串、數字常值或常值列舉參考。", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "當建構函式的類別擴充為 'null' 時,不得包含 'super' 呼叫。", + "A_constructor_cannot_have_a_this_parameter_2681": "建構函式不能含有 'this' 參數。", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 陳述式只可在封入的反覆項目陳述式內使用。", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 陳述式只可跳至封入之反覆項目陳述式的標籤。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "沒有 'import type' 就無法匯入宣告檔案。您是否想要改為匯入實作檔案 '{0}'?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不得在現有環境內容中使用 'declare' 修飾元。", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "一個裝飾項目只能裝飾一項方法實作,而不能多載。", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 子句在 'switch' 陳述式中不得出現一次以上。", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "預設匯出只能在 ECMAScript 樣式的模組中使用。", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "預設匯出必須位於檔案或模組宣告的最上層。", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此內容不允許明確的指派判斷提示 '!'。", + "A_destructuring_declaration_must_have_an_initializer_1182": "解構宣告中必須包含初始設定式。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "A_file_cannot_have_a_reference_to_itself_1006": "檔案不得參考自己。", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "會傳回 'never' 的功能不得具有可聯繫的端點。", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "透過 'new' 關鍵字呼叫的函式不能含有為 'viod' 的 'this' 類型。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'undefined'、'void' 也不是 'any',則必須傳回值。", + "A_generator_cannot_have_a_void_type_annotation_2505": "產生器不得有 'void' 類型註釋。", + "A_get_accessor_cannot_have_parameters_1054": "'get' 存取子不得有參數。", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 存取子必須至少要跟 setter 一樣可供存取", + "A_get_accessor_must_return_a_value_2378": "'get' 存取子必須傳回值。", + "A_label_is_not_allowed_here_1344": "A label is not allowed here.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "標記的元組元素已宣告為選用,並在名稱之後、冒號之前加上問號,而非加在類型之後。", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "標記的元組元素已宣告為待用,並在名稱之前加上「...」,而非加在類型之前。", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "對應型別不能宣告屬性或方法。", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列舉宣告中的成員初始設定式,不得參考在它之後宣告的成員,包括在其他列舉中所定義的成員。", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 類別必須具備建構函式,且該建構函式必須指定一個類型為 'any[]' 的 rest 參數。", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "從包含抽象建構簽章之類型變數所延伸的 mixin 類別也必須宣告為 'abstract'。", + "A_module_cannot_have_multiple_default_exports_2528": "一個模組不得有多個預設匯出。", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空間宣告的所在檔案位置,不得與其要合併的類別或函式不同。", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空間宣告的位置不得先於其要合併的類別或函式。", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空間宣告只允許在命名空間或模組的頂層。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不應該使用 'module' 關鍵字宣告 'namespace' 宣告。請改為使用 'namespace' 關鍵字。", + "A_non_dry_build_would_build_project_0_6357": "非 -dry 組建會建置專案 '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 組建會刪除下列檔案: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 DRY 組建將會更新專案 '{0}' 輸出的時間戳記", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只有函式或建構函式實作才可使用參數初始設定式。", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "無法使用剩餘參數宣告參數屬性。", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "建構函式實作中只可有一個參數屬性。", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "無法使用繫結模式宣告參數屬性。", + "A_promise_must_have_a_then_method_1059": "Promise 必須有 'then' 方法。", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "類型為 'unique symbol' 類型的類別屬性,必須為 'static' 和 'readonly'。", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "類型為 'unique symbol' 類型之介面或常值型別的屬性,必須是 'readonly'。", + "A_required_element_cannot_follow_an_optional_element_1257": "必要項目不可接在選擇性項目後面。", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必要參數不得接在選擇性參數之後。", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "剩餘項目不得包含繫結模式。", + "A_rest_element_cannot_follow_another_rest_element_1265": "REST 元素不能跟在另一個 REST 元素之後。", + "A_rest_element_cannot_have_a_property_name_2566": "REST 元素不得有屬性名稱。", + "A_rest_element_cannot_have_an_initializer_1186": "剩餘項目不得有初始設定式。", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest 項目必須保持在解構模式。", + "A_rest_element_type_must_be_an_array_type_2574": "其餘項目類型必須為陣列類型。", + "A_rest_parameter_cannot_be_optional_1047": "剩餘參數不得為選擇性參數。", + "A_rest_parameter_cannot_have_an_initializer_1048": "剩餘參數不得有初始設定式。", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "剩餘參數必須是參數清單中的最後一個參數。", + "A_rest_parameter_must_be_of_an_array_type_2370": "剩餘參數必須為陣列類型。", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "REST 參數或繫結模式的結尾不得為逗點。", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 陳述式只可在函式主體內使用。", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 陳述式無法在類別靜態區塊內使用。", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列由重新對應匯入到 'baseUrl' 之相對查詢位置的項目。", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 存取子不得有傳回型別註解。", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 存取子不得有選擇性參數。", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' 存取子不得有剩餘參數。", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 存取子只可有一個參數。", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 存取子參數不得有初始設定式。", + "A_source_phase_import_must_specify_a_local_binding_18111": "A source phase import must specify a local binding.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "擴張引數必須具有元組類型或傳遞給 REST 參數。", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' 呼叫必須是衍生類別 (包含初始化屬性、參數屬性或私人識別碼) 建構函式內的根等級陳述式。", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "當衍生類別包含已初始化的屬性、參數屬性或私人識別碼時,'super' 呼叫必須為建構函式中第一個參照 'super' 或 'this' 的陳述式。", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "以 'this' 為基礎的類型成立條件,和以參數為基礎的類型成立條件不相容。", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 類型只適用於類別或介面的非靜態成員。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中的值宣告不得使用最上層 'export' 修飾元。", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 檔案已定義於: '{0}'。", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元組成員不能同時為選用及待用。", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "元組類型無法以負值編製索引。", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "乘冪運算式左邊不允許類型宣告運算式。請考慮以括弧括住運算式。", + "A_type_literal_property_cannot_have_an_initializer_1247": "類型常值屬性不得有初始設定式。", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "僅限類型的匯入可以指定預設匯入或具名繫結,但不能同時指定兩者。", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "型別述詞不得參考剩餘參數。", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "型別述詞不得參考繫結模式的項目 '{0}'。", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "只有函式及方法的傳回型別位置才允許型別述詞。", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "類型述詞的類型必須可指派給其參數的類型。", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "啟用 'isolatedModules' 和 'emitDecoratorMetadata' 時,修飾簽章中參考的類型必須以 'import type' 或命名空間匯入來匯入。", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "型別為 'unique symbol' 型別的變數必須是 'const'。", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只有產生器主體才允許 'yield' 運算式。", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "無法透過 super 運算式存取類別 '{1}' 中的抽象方法 '{0}'。", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只可出現在抽象類別中。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象方法只可出現在抽象屬性中。", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "無法從建構函式存取類別 '{1}' 中的抽象屬性 '{0}'。", + "Accessibility_modifier_already_seen_1028": "已有存取範圍修飾元。", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "只有當目標為 ECMAScript 5 及更高版本時,才可使用存取子。", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "存取子必須兩者均為抽象或非抽象。", + "Add_0_to_unresolved_variable_90008": "對未解析的變數新增 '{0}.'", + "Add_a_return_statement_95111": "新增 return 陳述式", + "Add_a_return_type_to_the_function_declaration_9031": "新增傳回類型到函數宣告。", + "Add_a_return_type_to_the_function_expression_9030": "新增傳回類型到函數運算式。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "新增傳回類型至 get 存取子宣告。", + "Add_a_return_type_to_the_method_9034": "新增傳回類型至方法", + "Add_a_type_annotation_to_the_parameter_0_9028": "新增類型註釋至參數 {0}。", + "Add_a_type_annotation_to_the_property_0_9029": "新增類型註釋至屬性 {0}。", + "Add_a_type_annotation_to_the_variable_0_9027": "新增類型註釋至變數 {0}。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "將類型新增至集合存取子宣告的參數。", + "Add_all_missing_async_modifiers_95041": "新增缺少的所有 'async' 修飾元", + "Add_all_missing_attributes_95168": "新增所有遺失的屬性", + "Add_all_missing_call_parentheses_95068": "新增所有缺少的呼叫括號", + "Add_all_missing_function_declarations_95157": "新增所有缺少的函式宣告", + "Add_all_missing_imports_95064": "新增所有缺少的匯入", + "Add_all_missing_members_95022": "新增遺漏的所有成員", + "Add_all_missing_override_modifiers_95162": "新增所有缺少的 'override' 修飾元", + "Add_all_missing_parameters_95190": "新增所有遺失的參數", + "Add_all_missing_properties_95166": "新增所有遺失的屬性", + "Add_all_missing_return_statement_95114": "新增所有遺漏的 return 陳述式", + "Add_all_missing_super_calls_95039": "新增缺少的所有 super 呼叫", + "Add_all_missing_type_annotations_90067": "新增所有遺失的類型註釋", + "Add_all_optional_parameters_95193": "新增所有選用參數", + "Add_annotation_of_type_0_90062": "新增類型 '{0}' 的註釋", + "Add_async_modifier_to_containing_function_90029": "將 async 修飾元新增至包含的函式", + "Add_await_95083": "新增 'await'", + "Add_await_to_initializer_for_0_95084": "將 'await' 新增至 '{0}' 的初始設定式", + "Add_await_to_initializers_95089": "將 'await' 新增至初始設定式", + "Add_braces_to_arrow_function_95059": "將大括號新增至箭號函式", + "Add_const_to_all_unresolved_variables_95082": "將 'const' 新增至所有未解析的變數", + "Add_const_to_unresolved_variable_95081": "將 'const' 新增至未解析的變數", + "Add_definite_assignment_assertion_to_property_0_95020": "將明確指派判斷提示新增至屬性 '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "為所有未初始化的屬性新增明確的指派判斷提示", + "Add_export_to_make_this_file_into_a_module_95097": "新增 'export {}' 以將此檔案轉為模組", + "Add_extends_constraint_2211": "新增 'extends' 限制式。", + "Add_extends_constraint_to_all_type_parameters_2212": "將 'extends' 限制式新增至所有類型參數", + "Add_import_from_0_90057": "從 \"{0}\" 新增匯入", + "Add_index_signature_for_property_0_90017": "為屬性 '{0}' 新增索引簽章", + "Add_initializer_to_property_0_95019": "將初始設定式新增至屬性 '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式", + "Add_missing_attributes_95167": "新增遺失的屬性", + "Add_missing_call_parentheses_95067": "新增缺少的呼叫括號", + "Add_missing_comma_for_object_member_completion_0_95187": "為物件成員完成 '{0}' 新增遺漏的逗號。", + "Add_missing_enum_member_0_95063": "新增缺少的列舉成員 '{0}'", + "Add_missing_function_declaration_0_95156": "新增缺少的函式宣告 '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "將缺少的 'new' 運算子新增至所有呼叫", + "Add_missing_new_operator_to_call_95071": "缺少的 'new' 運算子新增至呼叫", + "Add_missing_parameter_to_0_95188": "新增遺失的參數至 '{0}'", + "Add_missing_parameters_to_0_95189": "新增遺失的參數至 '{0}'", + "Add_missing_properties_95165": "新增遺失的屬性", + "Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫", + "Add_missing_typeof_95052": "新增遺漏的 'typeof'", + "Add_names_to_all_parameters_without_names_95073": "將名稱新增至所有沒有名稱的參數", + "Add_optional_parameter_to_0_95191": "新增選用參數至 '{0}'", + "Add_optional_parameters_to_0_95192": "將選用參數新增至 '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "在箭號函式中新增或移除大括號", + "Add_override_modifier_95160": "新增 'override' 修飾元", + "Add_parameter_name_90034": "新增參數名稱", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞", + "Add_resolution_mode_import_attribute_95196": "新增 'resolution-mode' 匯入屬性", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "將 'resolution-mode' 匯入屬性新增至所有需要該屬性的僅限類型匯入", + "Add_return_type_0_90063": "新增傳回類型 '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "在此運算式中新增 satisfies 和類型判斷提示 (將 T 視為 T),使類型明確顯示。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "新增 satisfies 和具有 '{0}' 的內嵌類型判斷提示", + "Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'", + "Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引進行存取時,將 'undefined' 新增至類型。", + "Add_undefined_to_optional_property_type_95169": "將 'undefined' 新增至選擇性屬性類型", + "Add_undefined_type_to_all_uninitialized_properties_95029": "為所有未初始化的屬性新增未定義的類型", + "Add_undefined_type_to_property_0_95018": "將 'undefined' 類型新增至屬性 '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "新增非重疊類型的 'unknown' 轉換", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "將 'unknown' 新增至非重疊類型的所有轉換", + "Add_void_to_Promise_resolved_without_a_value_95143": "為已經解析但不具值的 Promise 新增 'void'", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "為已經解析但不具值的所有 Promise 新增 'void'", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "新增 tsconfig.json 檔案有助於組織同時包含 TypeScript 及 JavaScript 檔案的專案。若要深入了解,請前往 https://aka.ms/tsconfig。", + "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}' 的所有宣告都必須有相同的限制式。", + "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' 的所有宣告都必須有相同修飾元。", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' 的所有宣告都必須具有相同的類型參數。", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有宣告必須連續。", + "All_destructured_elements_are_unused_6198": "不會使用所有未經結構化的項目。", + "All_imports_in_import_declaration_are_unused_6192": "匯入宣告中的所有匯入皆未使用。", + "All_type_parameters_are_unused_6205": "未使用任何型別參數。", + "All_variables_are_unused_6199": "所有變數都未使用。", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "允許 JavaScript 檔案成為您程式的一部分。使用 'checkJs' 選項可從這些檔案取得錯誤。", + "Allow_accessing_UMD_globals_from_modules_6602": "允許從模組存取 UMD 全域。", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "當模組沒有預設匯出時,允許 'import x from y'。", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允許每個專案只從 tslib 匯入協助程式函式,而不是每個檔案都包含這些函式。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允許匯入包含 TypeScript 延伸模組。需要設定 '--moduleResolution bundler' 和 '--noEmit' 或 '--emitDeclarationOnly'。", + "Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。", + "Allow_loading_external_content_mapper_plugins_that_execute_code_during_compilation_6940": "Allow loading external content mapper plugins that execute code during compilation.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "在解析模組時,允許將多個資料夾視為一個資料夾。", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的檔案名稱 '{0}' 與檔案名稱 '{1}' 僅大小寫不同。", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "環境模組宣告不可指定相對模組名稱。", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "環境模組不得以巢狀方式置於其他模組或命名空間中。", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模組不能有多個名稱指派。", + "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象存取子無法實作。", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "協助工具修飾元不可搭配私人識別碼使用。", + "An_accessor_cannot_have_type_parameters_1094": "存取子不得有類型參數。", + "An_accessor_property_cannot_be_declared_optional_1276": "無法將 'accessor' 屬性宣告為選擇性。", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "環境模組宣告只可出現在檔案的最上層。", + "An_ambient_module_declaration_with_import_attributes_must_use_a_pattern_name_with_an_Asterisk_charac_1550": "An ambient module declaration with import attributes must use a pattern name with an '*' character.", + "An_argument_for_0_was_not_provided_6210": "未提供 '{0}' 的引數。", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供符合此繫結模式的引數。", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術運算元必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "An_arrow_function_cannot_have_a_this_parameter_2730": "箭號函式不可具有 'this' 參數。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或在 '--lib' 選項中包括 'ES2015'。", + "An_async_iterator_must_have_a_next_method_2519": "非同步迭代器必須有 'next()' 方法。", + "An_element_access_expression_should_take_an_argument_1011": "項目存取運算式應接受一個引數。", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "列舉成員不能以私人識別碼命名。", + "An_enum_member_cannot_have_a_numeric_name_2452": "列舉成員不得有數值名稱。", + "An_enum_member_name_must_be_followed_by_a_or_1357": "列舉成員名稱必須尾隨 ','、'=' 或 '}'。", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此資訊展開的版本,顯示所有可能的編譯器選項", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "匯出指派不得用於具有其他匯出項目的模組中。", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "命名空間中不可使用匯出指派。", + "An_export_assignment_cannot_have_modifiers_1120": "匯出指派不得有修飾元。", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "匯出指派必須位於檔案或模組宣告的最上層。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "匯出宣告只能在模組的頂層使用。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "匯出宣告只能在命名空間或模組的頂層使用。", + "An_export_declaration_cannot_have_modifiers_1193": "匯出宣告不得有修飾元。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考值,但 '{0}' 僅參考類型。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "啟用 'verbatimModuleSyntax' 時,'export default' 必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "啟用 'verbatimModuleSyntax' 時,'export default' 宣告必須參考值,但 '{0}' 僅參考類型。", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "無法對 'void' 類型的運算式測試真實性。", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "擴充的 Unicode 逸出值必須介於 0x0 與 0x10FFFF (不含) 之間。", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別碼或關鍵字不可直接接在數字常值後面。", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不得在環境內容中宣告實作。", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "匯入別名不能參考使用 'export type' 匯出的宣告。", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "匯入別名不能參考使用 'import type' 匯入的宣告。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "啟用 'verbatimModuleSyntax' 時,無法解析匯入別名為類型或僅類型的宣告。", + "An_import_alias_cannot_use_import_type_1392": "匯入別名不能使用 'import type'", + "An_import_attributes_property_cannot_be_optional_1556": "An import attributes property cannot be optional.", + "An_import_attributes_property_cannot_have_a_readonly_modifier_1558": "An import attributes property cannot have a 'readonly' modifier.", + "An_import_attributes_property_must_have_a_string_literal_or_identifier_name_1554": "An import attributes property must have a string literal or identifier name.", + "An_import_attributes_property_must_have_a_string_literal_type_annotation_1555": "An import attributes property must have a string literal type annotation.", + "An_import_attributes_property_must_have_a_type_annotation_1553": "An import attributes property must have a type annotation.", + "An_import_attributes_type_may_only_contain_property_signatures_1552": "An import attributes type may only contain property signatures.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "匯入宣告只能在模組的頂層使用。", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "匯入宣告只能在命名空間或模組的頂層使用。", + "An_import_declaration_cannot_have_modifiers_1191": "匯入宣告不得有修飾元。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "當 'allowImportingTsExtensions' 啟用時,匯入路徑只能以 '{0}' 延伸模組結尾。", + "An_index_signature_cannot_have_a_rest_parameter_1017": "索引簽章不得有剩餘參數。", + "An_index_signature_cannot_have_a_trailing_comma_1025": "索引簽章結尾不可有逗號。", + "An_index_signature_must_have_a_type_annotation_1021": "索引簽章必須有類型註釋。", + "An_index_signature_must_have_exactly_one_parameter_1096": "索引簽章只可有一個參數。", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "索引簽章參數不得有問號。", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引簽章參數不得有存取範圍修飾元。", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引簽章參數不得有初始設定式。", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引簽章參數必須有類型註釋。", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引簽章參數類型不能是常值型別或泛型型別。請考慮改用對應的物件類型。", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引簽章參數類型必須是 'string'、'number'、'symbol' 或範本文字類型。", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "具現化運算式後面不能接著屬性存取。", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "介面只能擴充具有選擇性型別引數的識別碼/限定名稱。", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "介面只能延伸物件類型或具有靜態已知成員的物件類型交集。", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "無法延伸基本類型的介面,例如 '{0}'。其只能延伸其他具名物件類型。", + "An_interface_property_cannot_have_an_initializer_1246": "介面屬性不得有初始設定式。", + "An_iterator_must_have_a_next_method_2489": "迭代器必須要有 'next()' 方法。", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "在 JSX 片段使用 @jsx pragma 時,必須有 @jsxFrag pragma。", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "物件常值不得有多個同名的 get/set 存取子。", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "物件常值不能有多個相同名稱的屬性。", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "物件常值不得有同名的屬性與存取子。", + "An_object_member_cannot_be_declared_optional_1162": "不得將物件成員宣告為選擇性。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "物件的 '[Symbol.hasInstance]' 方法必須傳回布林值,才能用於 『instanceof』 運算式的右側。", + "An_optional_chain_cannot_contain_private_identifiers_18030": "選擇性鏈結不能包含私人識別碼。", + "An_optional_element_cannot_follow_a_rest_element_1266": "選擇性元素不能跟在 REST 元素之後。", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器已陰影 'this' 的外部值。", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "不可將多載簽章宣告為產生器。", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘冪運算式左邊不允許具 '{0}' 運算子的一元運算式。請考慮以括弧括住運算式。", + "Annotate_everything_with_types_from_JSDoc_95043": "標註具備 JSDoc 之類型的所有項目 ", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "為命名空間中的屬性 expando 函式類型加上標註", + "Annotate_with_type_from_JSDoc_95009": "為來自 JSDoc 的類型標註", + "Another_export_default_is_here_2753": "其他匯出預設位於此處。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "只有在設定 Unicode 設定 (v) 旗標時,才能使用任何可能比對超過一個字元的 Unicode 屬性。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "在否定字元類別中,任何可能比對超過一個字元的專案都無效。", + "Are_you_missing_a_semicolon_2734": "缺少分號嗎?", + "Argument_expression_expected_1135": "必須是引數運算式。", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 選項的引數必須是: {1}。", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "動態匯入的引數不能是擴張元素。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "類型 '{0}' 的引數不可指派給類型 '{1}' 的參數。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "類型 '{0}' 的引數無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}' 的參數。請考慮將 'undefined' 新增到目標屬性的類型。", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供其餘參數 '{0}' 的引數。", + "Array_element_destructuring_pattern_expected_1181": "必須是陣列項目解構模式。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "具有擴張元素的陣列無法使用 --isolatedDeclarations 推斷。", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "判斷提示要求必須以明確的型別註解宣告呼叫目標中的每個名稱。", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "判斷提示要求呼叫目標必須為識別碼或限定名稱。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "在未宣告的情況下,--isolatedDeclarations 不支援指派屬性給函式。新增指派給此函式之屬性的明確宣告。", + "Asterisk_Slash_expected_1010": "必須是 '*/'。", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "至少一個存取子必須有具備 --isolatedDeclarations 的明確型別註釋。", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全域範圍的增強指定只能在外部模組宣告或環境模組宣告直接巢狀。", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "除非全域範圍的增強指定已顯示在環境內容中,否則應含有 'declare' 修飾元。", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "專案 '{0}' 中已啟用鍵入的自動探索。正在使用快取位置 '{2}' 執行模組 '{1}' 的額外解析傳遞。", + "BUILD_OPTIONS_6919": "建置選項", + "Backwards_Compatibility_6253": "回溯相容性", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底類別運算式無法參考類別型別參數。", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底建構函式傳回型別 '{0}' 不是物件類型或具有靜態已知成員的物件類型交集。", + "Base_constructors_must_all_have_the_same_return_type_2510": "基底建構函式的傳回型別必須全部相同。", + "Base_directory_to_resolve_non_absolute_module_names_6083": "要解析非絕對模組名稱的基底目錄。", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "當目標低於 ES2020 時,無法使用 BigInt 常值。", + "Binary_digit_expected_1177": "必須是二進位數字。", + "Binding_element_0_implicitly_has_an_1_type_7031": "繫結元素 '{0}' 隱含擁有 '{1}' 類型。", + "Binding_elements_with_initializers_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Binding elements with initializers can't be exported directly with --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "已在其宣告之前使用區塊範圍變數 '{0}'。", + "Build_a_composite_project_in_the_working_directory_6925": "在工作目錄中建置複合專案。", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "建置包括似乎已是最新狀態的所有專案。", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "若已過期,則建置一或多個專案及其相依性", + "Build_option_0_requires_a_value_of_type_1_5073": "組建選項 '{0}' 需要 {1} 類型的值。", + "Building_project_0_6358": "正在建置專案 '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "內建 iterators 會以 'undefined' 而非 'any' 的 'TReturn' 類型具現化。", + "COMMAND_LINE_FLAGS_6921": "命令列旗標", + "COMMON_COMMANDS_6916": "一般命令", + "COMMON_COMPILER_OPTIONS_6920": "一般編譯器選項", + "Call_decorator_expression_90028": "呼叫裝飾項目運算式", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼叫簽章傳回型別 '{0}' 與 '{1}' 不相容。", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少傳回型別註解的呼叫簽章隱含了 'any' 傳回型別。", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "無引數呼叫簽章的傳回型別 '{0}' 與 '{1}' 不相容。", + "Call_target_does_not_contain_any_signatures_2346": "呼叫目標未包含任何特徵標記。", + "Can_only_convert_logical_AND_access_chains_95142": "只可轉換邏輯 AND 存取鏈結", + "Can_only_convert_named_export_95164": "只能轉換具名匯出", + "Can_only_convert_property_with_modifier_95137": "只能轉換具有修飾元的屬性", + "Can_only_convert_string_concatenations_and_string_literals_95154": "只能轉換字串串連和字串常值", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "因為 '{0}' 是類型而非命名空間,所以無法存取 '{0}.{1}'。您要在 '{0}' 中使用 '{0}[\"{1}\"]' 擷取屬性 '{1}' 的類型嗎?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "啟用 '{1}' 時,無法從另一個不具備資格的檔案存取 '{0}'。請改用 '{2}'。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "啟用 '{0}' 時,無法存取環境連續列舉。", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "無法將 '{0}' 建構函式類型指派至 '{1}' 建構函式類型。", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "無法將抽象建構函式類型指派給非抽象建構函式類型。", + "Cannot_assign_to_0_because_it_is_a_class_2629": "無法指派至 '{0}',因為其為類別。", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "因為 '{0}' 為常數,所以無法指派至 '{0}'。", + "Cannot_assign_to_0_because_it_is_a_function_2630": "無法指派至 '{0}',因為其為函式。", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "無法指派至 '{0}',因為其為命名空間。", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "因為 '{0}' 為唯讀屬性,所以無法指派至 '{0}'。", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "無法指派至 '{0}',因為其為列舉。", + "Cannot_assign_to_0_because_it_is_an_import_2632": "無法指派至 '{0}',因為其為匯入。", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "無法指派至 '{0}',因為它不是變數。", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "無法指派給私人方法 '{0}'。私人方法無法寫入。", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "因為模組 '{0}' 會解析為非模組實體,所以無法加以增強。", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "無法使用值匯出擴充模組 '{0}',因為其會解析為非模組實體。", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "除非 '--module' 旗標為 'amd' 或 'system',否則無法使用選項 '{0}' 編譯模組。", + "Cannot_create_an_instance_of_an_abstract_class_2511": "無法建立抽象類別的執行個體。", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "因為值的迭代器 'next' 方法需要類型 '{1}',但所包含的產生器永遠會傳送 '{0}',所以無法將反覆項目委派給值。", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "無法匯出 '{0}'。只有區域宣告可以從模組匯出。", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "無法延伸類別 '{0}'。類別建構函式已標記為私用。", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "無法擴充介面 '{0}',您意指「實作」嗎?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "在目前的目錄中找不到 tsconfig.json 檔案: {0}。", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "在指定的目錄 '{0}' 中找不到 tsconfig.json 檔案。", + "Cannot_find_global_type_0_2318": "找不到全域類型 '{0}'。", + "Cannot_find_global_value_0_2468": "找不到全域值 '{0}'。", + "Cannot_find_lib_definition_for_0_2726": "找不到 '{0}' 的程式庫定義。", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到 '{0}' 的程式庫定義。您是指 '{1}' 嗎?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模組 '{0}'。建議使用 '--resolveJsonModule',匯入副檔名為 '.json' 的模組。", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模組 '{0}'。您是要將 'moduleResolution' 選項設為 'nodenext',或是要將別名新增至 'paths' 選項?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模組 '{0}' 或其對應的型別宣告。", + "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882": "找不到 '{0}' 副作用匯入的模組或類型宣告。", + "Cannot_find_name_0_2304": "找不到名稱 '{0}'。", + "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名稱 '{0}'。您指的是 '{1}' 嗎?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名稱 '{0}'。您要找的是此執行個體成員 'this.{0}' 嗎?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名稱 '{0}'。您要找的是此靜態成員 '{1}.{0}' 嗎?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名稱 '{0}'。您是否想要在非同步函數中寫入此專案?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為「{1}」或更新版本。", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為包含 'dom'。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`,然後將 'bun' 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱「{0}」。需要為測試執行器安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名稱「{0}」。需要為 jQuery 安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jquery`,然後將 `jquery` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名稱 '{0}'。需要安裝節點的型別定義嗎? 請嘗試 `npm i --save-dev @types/node`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名稱「{0}」。需要為節點安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/node`,然後將 `node` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_namespace_0_2503": "找不到命名空間 '{0}'。", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "找不到命名空間 '{0}'。您是不是指 '{1}'?", + "Cannot_find_parameter_0_1225": "找不到參數 '{0}'。", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到輸入檔的一般子目錄路徑。", + "Cannot_find_type_definition_file_for_0_2688": "找不到 '{0}' 的類型定義檔案。", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "無法匯入型別宣告檔案。請考慮匯入 '{0}' 而不是 '{1}'。", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "無法初始化區塊範圍宣告 '{1}' 之同一範圍中的外部範圍變數 '{0}'。", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "無法叫用可能為 'null' 的物件。", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "無法叫用可能為 'null' 或 'undefined' 的物件。", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "無法叫用可能為 'undefined' 的物件。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列解構永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列擴張永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "因為值的迭代器 'next' 方法需要類型 '{1}',但 for-of 永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_move_statements_to_the_selected_file_95183": "無法將陳述式移動至選取的檔案", + "Cannot_move_to_file_selected_file_is_invalid_95179": "無法移動至檔案,選取的檔案無效", + "Cannot_read_file_0_5083": "無法讀取檔案 '{0}'。", + "Cannot_read_file_0_Colon_1_5012": "無法讀取檔案 '{0}': {1}。", + "Cannot_redeclare_block_scoped_variable_0_2451": "無法重新宣告區塊範圍變數 '{0}'。", + "Cannot_redeclare_exported_variable_0_2323": "無法重新宣告匯出的變數 '{0}'。", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "無法在 Catch 子句中重新宣告識別碼 '{0}'。", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "無法在類型註釋中啟動函式呼叫。", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "除非有提供 '--jsx' 旗標,否則無法使用 JSX。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "啟用 '{0}' 時,無法在類型或僅類型命名空間上使用 'export import'。", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "當 '--module' 為 'none' 時,無法使用匯入、匯出或模組增強指定。", + "Cannot_use_namespace_0_as_a_type_2709": "不得使用命名空間 '{0}' 作為類型。", + "Cannot_use_namespace_0_as_a_value_2708": "不得使用命名空間 '{0}' 作為值。", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "在修飾類別的靜態屬性初始化運算式中,不能使用 'this'。", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "因為檔案 '{0}' 會覆寫所參考專案 '{1}' 產生的 '.tsbuildinfo' 檔案,所以無法寫入該檔案", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "無法寫入檔案 '{0}',原因是其會由多個輸入檔覆寫。", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "無法寫入檔案 '{0}',原因是其會覆寫輸入檔。", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 子句變數不得有初始設定式。", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 子句變數型別註解必須為 'any' 或 'unknown' (如有指定)。", + "Change_0_to_1_90014": "將 '{0}' 變更為 '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "將所有延伸介面變更為 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "將所有 jsdoc 樣式的類型變更為 TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "將所有 jsdoc 樣式的類型變更為 TypeScript (並為 null 類型新增 '| undefined')", + "Change_extends_to_implements_90003": "將 [延伸] 變更至 [實作]", + "Change_spelling_to_0_90022": "將拼字變更為 '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "檢查是否已宣告但未在建構函式中設定的類別屬性。", + "Check_side_effect_imports_6806": "檢查副作用匯入。", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "檢查 'bind'、'call' 和 'apply' 方法的引數是否與原始函式相符。", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "檢查 '{0}' 是否為 '{1}' - '{2}' 的最長相符前置詞。", + "Circular_definition_of_import_alias_0_2303": "匯入別名 '{0}' 的循環定義。", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析組態時偵測到循環性: {0}", + "Circularity_originates_in_type_at_this_location_2751": "循環源於此位置的類型。", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "類別 '{0}' 已定義執行個體成員存取子 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "類別 '{0}' 已定義執行個體成員函式 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員存取子。", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "類別 '{0}' 已定義執行個體成員屬性 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", + "Class_0_incorrectly_extends_base_class_1_2415": "類別 '{0}' 不正確地擴充基底類別 '{1}'。", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "類別 '{0}' 不當實作類別 '{1}'。您是否要擴充 '{1}',並繼承其成員以成為子類別?", + "Class_0_incorrectly_implements_interface_1_2420": "類別 '{0}' 不正確地實作介面 '{1}'。", + "Class_0_used_before_its_declaration_2449": "類別 '{0}' 的位置在其宣告之前。", + "Class_constructor_may_not_be_a_generator_1368": "類別建構函式可能不是產生器。", + "Class_constructor_may_not_be_an_accessor_1341": "類別建構函式可能不是存取子。", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "類別宣告無法為 '{0}' 實作多載清單。", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告不能有一個以上的 `@augments` 或 `@extends` 標籤。", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "類別裝飾項目無法與靜態私人識別碼一起使用。請考慮移除實驗性裝飾項目。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父類別所定義的類別欄位 '{0}' 無法透過超級在子類別中存取。", + "Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 和更新版本時,類別名稱不可為 'Object'。", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。", + "Classes_can_only_extend_a_single_class_1174": "類別只能擴充一個類別。", + "Classes_may_not_have_a_field_named_constructor_18006": "類別不能具有名為 'constructor' 的欄位。", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "會使用 JavaScript 的嚴格模式,評估包含在類別中的程式碼,其中不允許使用 '{0}'。如需詳細資訊,請參閱 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Strict_mode。", + "Command_line_Options_6171": "命令列選項", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "當路徑為專案組態檔或為 'tsconfig.json' 所在的資料夾時編譯專案。", + "Compiler_Diagnostics_6251": "編譯器診斷", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "編譯器選項 '{0}' 無法指定空字串。", + "Compiler_option_0_expects_an_argument_6044": "編譯器選項 '{0}' 必須要有一個引數。", + "Compiler_option_0_may_not_be_used_with_build_5094": "編譯器選項 '--{0}' 不能與 '--build' 一起使用。", + "Compiler_option_0_may_only_be_used_with_build_5093": "編譯器選項 '--{0}' 只能與 '--build' 一起使用。", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "'{1}' 值的編譯器選項 '{0}'不穩定。使用夜間 TypeScript 將此錯誤設為靜音。請嘗試使用 'npm install -D typescript@next' 更新。", + "Compiler_option_0_requires_a_value_of_type_1_5024": "編譯器選項 '{0}' 需要類型 {1} 的值。", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "降級發出私人識別碼時,編譯器會保留名稱 '{0}'。", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "編譯位於指定路徑的 TypeScript 專案。", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "編譯目前的專案 (工作目錄中的 tsconfig.json)。", + "Compiles_the_current_project_with_additional_settings_6929": "使用其他設定編譯目前的專案。", + "Completeness_6257": "完整性", + "Composite_projects_may_not_disable_declaration_emit_6304": "複合式專案可能未停用宣告發出。", + "Composite_projects_may_not_disable_incremental_compilation_6379": "複合專案可能不會停用累加編譯。", + "Computed_from_the_list_of_input_files_6911": "從輸入檔案清單計算", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算屬性必須是具有 --isolatedDeclarations 的數字或字串常值、變數或點狀運算式。", + "Computed_property_names_are_not_allowed_in_enums_1164": "列舉中不能有計算的屬性名稱。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "無法使用 --isolatedDeclarations 推斷類別或物件常值上的計算屬性名稱。", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "具有字串值成員的列舉中不允許計算值。", + "Concatenate_and_emit_output_to_single_file_6001": "串連並發出輸出至單一檔案。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析匯入時,除了解析程式特定預設值之外,還需要設定的條件。", + "Conflicts_are_in_this_file_6201": "此檔案中有衝突。", + "Consider_adding_a_declare_modifier_to_this_class_6506": "請考慮將 'declare' 修飾元加入此類別。", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "建構簽章傳回型別 '{0}' 與 '{1}' 不相容。", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少傳回型別註解的建構簽章,隱含有 'any' 傳回型別。", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "無引數建構簽章的傳回型別 '{0}' 與 '{1}' 不相容。", + "Constructor_implementation_is_missing_2390": "缺少建構函式實作。", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "類別 '{0}' 的建構函式為私用,並且只能在類別宣告內存取。", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "類別 '{0}' 的建構函式受到保護,並且只能在類別宣告內存取。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "在等位型別中使用建構函式類型標記法時,必須括以括弧。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "在交集型別中使用建構函式類型標記法時,必須括以括弧。", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "衍生類別的建構函式必須包含 'super' 呼叫。", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含檔案,因此無法決定根目錄,而將略過 'node_modules' 中的查閱。", + "Containing_function_is_not_an_arrow_function_95128": "內含函式不是箭頭函式", + "Content_mapper_file_extension_0_is_a_built_in_extension_and_cannot_be_registered_by_a_content_mapper_18066": "Content mapper file extension '{0}' is a built-in extension and cannot be registered by a content mapper.", + "Content_mapper_file_extension_0_is_registered_by_more_than_one_content_mapper_18067": "Content mapper file extension '{0}' is registered by more than one content mapper.", + "Content_mapper_file_extension_0_must_begin_with_a_18065": "Content mapper file extension '{0}' must begin with a '.'.", + "Content_mapper_supplemental_output_file_0_conflicts_with_an_existing_file_18096": "Content mapper supplemental output file '{0}' conflicts with an existing file.", + "Content_mappers_require_the_runExternalCode_command_line_flag_to_be_enabled_18068": "Content mappers require the '--runExternalCode' command line flag to be enabled.", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "控制用來偵測模組格式 JS 檔案的方法。", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "將類型 '{0}' 轉換為類型 '{1}' 可能會發生錯誤,原因是這兩個類型彼此並未充分重疊。如果是故意轉換的,請先將運算式轉換為 'unknown'。", + "Convert_0_to_1_in_0_95003": "將 '{0}' 轉換成 '{1} in {0}'", + "Convert_0_to_mapped_object_type_95055": "將 '{0}' 轉換為對應的物件類型", + "Convert_all_const_to_let_95102": "將所有 'const' 轉換為 'let'", + "Convert_all_constructor_functions_to_classes_95045": "將所有建構函式轉換為類別", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "將所有無效字元轉換為 HTML 實體代碼", + "Convert_all_re_exported_types_to_type_only_exports_1365": "將所有重新匯出的類型轉換為僅限類型的匯出", + "Convert_all_require_to_import_95048": "將所有 'require' 轉換至 'import'", + "Convert_all_to_async_functions_95066": "全部轉換為非同步函式", + "Convert_all_to_bigint_numeric_literals_95092": "全部轉換為 Bigint 數字常值", + "Convert_all_to_default_imports_95035": "全部轉換為預設匯入", + "Convert_all_type_literals_to_mapped_type_95021": "將所有類型常值轉換成相對應的類型", + "Convert_all_typedef_to_TypeScript_types_95177": "轉換所有 typedef 為 TypeScript 類型。", + "Convert_arrow_function_or_function_expression_95122": "轉換箭頭函式或函式運算式", + "Convert_const_to_let_95093": "將 'const' 轉換為 'let'", + "Convert_default_export_to_named_export_95061": "將預設匯出轉換為具名匯出", + "Convert_function_declaration_0_to_arrow_function_95106": "將函式宣告 '{0}' 轉換為箭號函式", + "Convert_function_expression_0_to_arrow_function_95105": "將函式運算式 '{0}' 轉換為箭號函式", + "Convert_function_to_an_ES2015_class_95001": "將函式轉換為 ES2015 類別", + "Convert_invalid_character_to_its_html_entity_code_95100": "將無效字元轉換為其 HTML 實體代碼", + "Convert_named_export_to_default_export_95062": "將具名匯出轉換為預設匯出", + "Convert_named_imports_to_default_import_95170": "將具名匯入轉換為預設匯入", + "Convert_named_imports_to_namespace_import_95057": "將具名匯入轉換為命名空間匯入", + "Convert_namespace_import_to_named_imports_95056": "將命名空間匯入轉換為具名匯入", + "Convert_overload_list_to_single_signature_95118": "將多載清單轉換成單一特徵標記", + "Convert_parameters_to_destructured_object_95075": "將參數轉換為解構的物件", + "Convert_require_to_import_95047": "將 'require' 轉換至 'import'", + "Convert_to_ES_module_95017": "轉換為 ES 模組", + "Convert_to_a_bigint_numeric_literal_95091": "轉換為 Bigint 數字常值", + "Convert_to_anonymous_function_95123": "轉換為匿名函式", + "Convert_to_arrow_function_95125": "轉換為箭頭函式", + "Convert_to_async_function_95065": "轉換為非同步函式", + "Convert_to_default_import_95013": "轉換為預設匯入", + "Convert_to_named_function_95124": "轉換為具名函式", + "Convert_to_optional_chain_expression_95139": "轉換為選擇性鏈結運算式", + "Convert_to_template_string_95096": "轉換為範本字串", + "Convert_to_type_only_export_1364": "轉換為僅限類型的匯出", + "Convert_typedef_to_TypeScript_type_95176": "轉換 typedef 為 TypeScript 類型。", + "Corrupted_locale_file_0_6051": "地區設定檔 {0} 已損毀。", + "Could_not_convert_to_anonymous_function_95153": "無法轉換成匿名函式", + "Could_not_convert_to_arrow_function_95151": "無法轉換成箭頭函式", + "Could_not_convert_to_named_function_95152": "無法轉換成具名函式", + "Could_not_determine_function_return_type_95150": "無法判斷函式傳回型別", + "Could_not_find_a_containing_arrow_function_95127": "找不到內含箭頭函式", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "找不到模組 '{0}' 的宣告檔案。'{1}' 隱含具有 'any' 類型。", + "Could_not_find_convertible_access_expression_95140": "找不到可轉換的存取運算式", + "Could_not_find_export_statement_95129": "找不到匯出陳述式", + "Could_not_find_import_clause_95131": "找不到匯入子句", + "Could_not_find_matching_access_expressions_95141": "找不到相符的存取運算式", + "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名稱 '{0}'。您是不是指 '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空間匯入或具名匯入", + "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要為其產生存取子的屬性", + "Could_not_find_variable_to_inline_95185": "找不到要內嵌的變數。", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "無法解析具有下列延伸模組的路徑 '{0}': {1}。", + "Could_not_write_file_0_Colon_1_5033": "無法編寫檔案 '{0}': {1}。", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "建立發出 JavaScript 檔案的來源對應檔。", + "Create_sourcemaps_for_d_ts_files_6614": "為 d.ts 檔案建立 sourcemap。", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用建議設定在工作目錄中建立 tsconfig.json。", + "DIRECTORY_6038": "目錄", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字元類別中不允許小數點逸出序列和反向參考。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "不允許前置為零的小數點。", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "宣告會讓另一個檔案中的宣告增加。這無法序列化。", + "Declaration_emit_elides_private_members_but_0_refers_to_a_private_member_Write_an_explicit_type_here_7080": "Declaration emit elides private members, but '{0}' refers to a private member. Write an explicit type here.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "此檔案發出的宣告需要保留此匯入,以進行增強。該情況不受 --isolatedDeclarations 支援。", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此檔案的宣告發出必須使用私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此檔案的宣告發出必須使用來自模組 '{1}' 的私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "此參數發出的宣告需要隱含地新增未定義值至其類型。此情況不受 --isolatedDeclarations 支援。", + "Declaration_expected_1146": "必須是宣告。", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣告名稱與內建全域識別碼 '{0}' 衝突。", + "Declaration_or_statement_expected_1128": "必須是宣告或陳述式。", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "必須是宣告或陳述式。這個 '=' 會跟著陳述式區塊,因此如果您想要撰寫解構指派,就可能需要在整個指派的前後加上括弧。", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "包含明確指派判斷提示的宣告也必須包含類型註釋。", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "包含初始設定式的宣告不得同時包含明確指派判斷提示。", + "Declare_a_private_field_named_0_90053": "宣告名為 '{0}' 的私人欄位。", + "Declare_method_0_90023": "宣告方法 '{0}'", + "Declare_private_method_0_90038": "宣告私人方法 '{0}'", + "Declare_private_property_0_90035": "宣告私人屬性 '{0}'", + "Declare_property_0_90016": "宣告屬性 '{0}'", + "Declare_static_method_0_90024": "宣告靜態方法 '{0}'", + "Declare_static_property_0_90027": "宣告靜態屬性 '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "裝飾項目函式傳回類型 '{0}' 無法指派給類型 '{1}'。", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "裝飾項目函式傳回類型是 '{0}',但必須是 'void' 或 'any'。", + "Decorator_used_before_export_here_1486": "在此處「匯出」之前使用的裝飾項目。", + "Decorators_are_not_valid_here_1206": "裝飾項目在此處無效。", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "無法將裝飾項目套用至多個同名的 get/set 存取子。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果裝飾項目也出現在 'export' 之前,就不能出現在 'export' 或 'export default' 後。", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "裝飾項目必須在屬性宣告的名稱和所有關鍵詞之前。", + "Deduplicate_packages_with_the_same_name_and_version_6939": "Deduplicate packages with the same name and version.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "預設 catch 子句變數為 'unknown' 而非 'any'。", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模組的預設匯出具有或正在使用私用名稱 '{0}'。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "無法使用 --isolatedDeclarations 推斷預設匯出。", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "延遲的匯入中不允許預設匯入。", + "Default_library_1424": "預設程式庫", + "Default_library_for_target_0_1425": "目標 '{0}' 的預設程式庫", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "只有當 '--module' 旗標設定為 'esnext' 或 'preserve' 時,才支援延遲的匯入。", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "下列識別碼的定義與其他檔案中的定義衝突: {0}", + "Delete_all_unused_declarations_95024": "刪除所有未使用的宣告", + "Delete_all_unused_imports_95147": "刪除所有未使用的匯入", + "Delete_all_unused_param_tags_95172": "刪除所有未使用的 '@param' 標籤", + "Delete_the_outputs_of_all_projects_6365": "刪除所有專案的輸出。", + "Delete_unused_param_tag_0_95171": "刪除未使用的 '@param' 標記 '{0}'", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[即將淘汰] 請改用 '--jsxFactory'。當目標為 'react' JSX 發出時,為 createElement 指定所叫用的物件", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[即將淘汰] 請改用 '--outFile'。 串連輸出並將其發出到單一檔案", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[即將淘汰] 請改用 '--skipLibCheck'。跳過預設程式庫宣告檔案的類型檢查。", + "Deprecated_setting_Use_outFile_instead_6677": "已淘汰的設定值。請改用 'outFile'。", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_range_18105": "Diagnostic directive {0} returned by the content mapper has an invalid range.", + "Diagnostic_directive_0_returned_by_the_content_mapper_has_an_invalid_unusedExpectDirectiveIndex_18110": "Diagnostic directive {0} returned by the content mapper has an invalid 'unusedExpectDirectiveIndex'.", + "Diagnostic_directive_0_returned_by_the_content_mapper_must_specify_unusedExpectDirectiveIndex_when_t_18107": "Diagnostic directive {0} returned by the content mapper must specify 'unusedExpectDirectiveIndex' when there is not exactly one 'unusedExpectDirectiveDiagnostics' entry.", + "Did_you_forget_to_use_await_2773": "忘了要使用 'await' 嗎?", + "Did_you_mean_0_1369": "您指 '{0}' 嗎?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "您是要將 '{0}' 限制為類型 'new (...args: any[]) => {1}' 嗎?", + "Did_you_mean_to_call_this_expression_6212": "您是要呼叫此運算式嗎?", + "Did_you_mean_to_mark_this_function_as_async_1356": "您是要將此函式標記為 'async' 嗎?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "要使用 ':' 嗎? 當包含的物件常值是解構模式的一部分時,'=' 就只能位於屬性名稱後面。", + "Did_you_mean_to_use_new_with_this_expression_6213": "您是要對此運算式使用 'new' 嗎?", + "Digit_expected_1124": "必須是數字。", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目錄 '{0}' 不存在,將會跳過其中所有查閱。", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "目錄 '{0}' 不包含在 package.js 範圍內。將不會解析匯入。", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "停用在發出的 JavaScript 檔案中新增 'use strict' 指示詞。", + "Disable_checking_for_this_file_90018": "停用此檔案的檢查", + "Disable_emitting_comments_6688": "停用發出註解。", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "停用其 JSDoc 註解中具有 '@internal' 的發出宣告。", + "Disable_emitting_files_from_a_compilation_6660": "停用從編譯發出檔案。", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "如果報告任何型別檢查錯誤,則停用發出的檔案。", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "停用在產生的程式碼中抹除 'const enum' 宣告。", + "Disable_error_reporting_for_unreachable_code_6603": "停用無法執行到的程式碼錯誤報告。", + "Disable_error_reporting_for_unused_labels_6604": "停用未使用標籤的錯誤報表。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "停用完整類型檢查 (只回報重要剖析和發出錯誤訊息)。", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "停用在編譯輸出中產生自訂的協助程式函式,例如 '__extends'。", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "停用包括任何程式庫檔案,包括預設的 lib.d.ts。", + "Disable_loading_referenced_projects_6235": "停用載入參考的專案。", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "參考複合專案時,停用偏好的來源檔案而不是宣告檔案。", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "在建立物件常值期間停用多餘屬性錯誤報告。", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "停用將 symlinks 解析為其 realpath。這與節點中的相同旗標有關。", + "Disable_size_limitations_on_JavaScript_projects_6162": "停用 JavaScript 專案的大小限制。", + "Disable_solution_searching_for_this_project_6224": "停用此專案的解決方案搜尋。", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "停用函式類型中一般簽章的 Strict 檢查。", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "停用 JavaScript 專案的類型取得", + "Disable_truncating_types_in_error_messages_6663": "停用錯誤訊息中的截斷類型。", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "停用來源檔案,而非所參考專案中的宣告檔案。", + "Disable_wiping_the_console_in_watch_mode_6684": "停用在監看模式中抹除主控台。", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "透過查看專案中的檔案名,停用型別推斷的取得。", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "不允許 import'、'require' 或 '' 擴充 TypeScript 應該加入專案的檔案數目。", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允許相同檔案大小寫不一致的參考。", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "不要在編譯後的檔案清單中新增三道斜線的參考或匯入的模組。", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "不允許不屬於ECMAScript一部分的運行時間建構。", + "Do_not_emit_comments_to_output_6009": "請勿將註解發出到輸出。", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "請勿發出包含 '@internal' 註釋的程式碼宣告。", + "Do_not_emit_outputs_6010": "請勿發出輸出。", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "如果回報了任何錯誤,即不發出輸出。", + "Do_not_emit_use_strict_directives_in_module_output_6112": "請勿在模組輸出中發出 'use strict' 指示詞。", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "請勿清除產生之程式碼中的 const 列舉宣告。", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "不要在編譯後的輸出中產生自訂的協助程式函式,例如 '__extends'。", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "不要包含預設程式庫檔案 (lib.d.ts)。", + "Do_not_print_diagnostics_6933": "Do not print diagnostics.", + "Do_not_report_errors_on_unreachable_code_6077": "請勿回報無法執行到之程式碼的錯誤。", + "Do_not_report_errors_on_unused_labels_6074": "請勿回報未使用之標籤的錯誤。", + "Do_not_resolve_the_real_path_of_symlinks_6013": "請勿解析符號連結的真實路徑。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "請勿轉換或省略任何未標示為僅限類型的匯入或匯出,請確保其是以輸出檔案的格式並根據 'module' 設定所撰寫。", + "Do_not_truncate_error_messages_6165": "不要截斷錯誤訊息。", + "Duplicate_function_implementation_2393": "函式實作重複。", + "Duplicate_identifier_0_2300": "識別碼 '{0}' 重複。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在模組的最上層範圍中。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在含有非同步函式模組的最上層範圍中。", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別碼 '{0}' 重複。在靜態初始設定式中發出 'super' 參考時,編譯器會保留名稱 '{1}'。", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別碼 '{0}' 重複。編譯器會使用宣告 '{1}' 支援非同步函式。", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "重複的識別碼 '{0}'。靜態與執行個體元素不得共用相同的私人名稱。", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別碼 'arguments'' 重複。編譯器會使用 'arguments' 來初始化剩餘參數。", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別碼 '_newTarget' 重複。編譯器使用變數宣告 '_newTarget' 擷取 'new.target' 中繼屬性參考。", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別碼 '_this' 重複。編譯器會使用變數宣告 '_this' 來擷取 'this' 參考。", + "Duplicate_index_signature_for_type_0_2374": "類型 '{0}' 的索引簽章重複。", + "Duplicate_label_0_1114": "標籤 '{0}' 重複。", + "Duplicate_named_capturing_groups_are_only_available_when_targeting_0_or_later_18063": "Duplicate named capturing groups are only available when targeting '{0}' or later.", + "Duplicate_property_0_2718": "屬性 '{0}' 重複。", + "Duplicate_regular_expression_flag_1500": "重複的規則運算式旗標。", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動態匯入的指定名稱必須屬於類型 'string',但這裡的類型為 '{0}'。", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "只有在 '--module' 旗標設定為 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'node18'、'node20' 或 'nodenext',才支援動態匯入。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動態匯入只接受模組指定名稱和一系列選擇性屬性來做為引數", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "當 '--module' 選項設定為 'esnext'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve' 時,動態匯入只支援第二個引數。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286": "無法在 'verbatimModuleSyntax' 底下的 CommonJS 檔案中撰寫 ECMAScript 匯入和匯出。", + "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295": "無法在 'verbatimModuleSyntax' 底下的 CommonJS 檔案中撰寫 ECMAScript 匯入和匯出。請調整最近的 'package.json' 中的 'type' 欄位,將此檔案設為 ECMAScript 模組,或調整 TypeScript 中的 'verbatimModuleSyntax'、'module' 和 'moduleResolution' 設定。", + "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "當 'module' 設定為 'preserve' 時,CommonJS 模組中不允許 ECMAScript 模組語法。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' 的每個宣告值不同,其中應該要有 '{2}',但只包含 '{3}'。", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "等位型別 '{0}' 的每個成員都有建構簽章,但這些簽章都互不相容。", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "等位型別 '{0}' 的每個成員都有簽章,但這些簽章都互不相容。", + "Editor_Support_6249": "編輯器支援", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "因為 '{0}' 類型的運算式無法用於索引類型 '{1}',所以項目隱含 'any' 類型。", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "因為索引運算式不屬於類型 'number',所以元素具有隱含 'any' 類型。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隱含地擁有 'any' 類型,因為類型 '{0}' 不具索引簽章。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "因為類型 '{0}' 沒有索引簽章,所以項目隱含 'any' 類型。您是要呼叫 '{1}' 嗎?", + "Emit_6246": "發出", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "發出 ECMAScript 標準相容類別欄位。", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在輸出檔的開頭發出 UTF-8 位元組順序標記 (BOM)。", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "發出單一檔案包含來源對應,而不要使用個別的檔案。", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "發出用於偵錯的編譯器執行 v8 CPU 設定檔。", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "發出其他 JavaScript,以輕鬆支援匯入 CommonJS 模組。這會啟用 'allowSyntheticDefaultImports' 進行類型相容性。", + "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而非 Set 發出類別欄位。", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "發出來源檔案中修飾式宣告的設計型別中繼資料。", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "針對反覆項目發出更符合規範,但具詳細資訊及較低效能 JavaScript。", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "使用單一檔案發出來源與來源對應。必須設定 '--inlineSourceMap' 或 '--sourceMap'。", + "Enable_all_strict_type_checking_options_6180": "啟用所有 Strict 類型檢查選項。", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "在 TypeScript 的輸出中啟用色彩及格式化,讓編譯器錯誤更容易閱讀。", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "啟用允許 TypeScript 專案搭配專案參考使用的條件約束。", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "啟用未在函式中明確傳回之 codepaths 的錯誤報吿。", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "啟用具有隱含 'any' 類型的運算式及宣告之錯誤報告。", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "啟用 switch 陳述式中 fallthrough 案例的錯誤報表。", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已完成型別檢查的 JavaScript 檔案中啟用錯誤報表。", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "當未讀取區域變數時,啟用錯誤報吿。", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "為 'this' 指定類型 'any' 時,啟用錯誤報表。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "啟用舊版實驗性裝飾項目的實驗性支援。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "啟用匯入具有任何延伸模組的檔案,並存在宣告檔案即可。", + "Enable_importing_json_files_6689": "啟用匯入 json 檔案。", + "Enable_lib_replacement_6808": "啟用連結庫取代。", + "Enable_project_compilation_6302": "啟用專案編譯", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "對函式啟用嚴格的 'bind'、'call' 及 'apply' 方法。", + "Enable_strict_checking_of_function_types_6186": "啟用嚴格檢查函式類型。", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "啟用類別中屬性初始化的 strict 檢查。", + "Enable_strict_null_checks_6113": "啟用嚴格 null 檢查。", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在您的組態檔中啟用 'experimentalDecorators' 選項", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "在您的組態檔中啟用 '--jsx' 旗標", + "Enable_tracing_of_the_name_resolution_process_6085": "啟用名稱解析流程的追蹤。", + "Enable_verbose_logging_6713": "啟用詳細資訊記錄。", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "透過為所有匯入建立命名空間物件,讓 CommonJS 和 ES 模組之間的產出有互通性。意指 'allowSyntheticDefaultImports'。", + "Enables_experimental_support_for_ES7_decorators_6065": "啟用 ES7 裝飾項目的實驗支援。", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "啟用實驗支援以發出裝飾項目類型的中繼資料。", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "對使用索引型別宣告的索引鍵強制使用索引存取子。", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "請確認衍生類別中的覆寫成員已標上 override 修飾元。", + "Ensure_that_casing_is_correct_in_imports_6637": "請確認 Imports 中的大小寫正確。", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "確保每個檔案都可安全地轉譯,而不依賴其他匯入。", + "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809": "Ensure types are ordered stably and deterministically across compilations.", + "Ensure_use_strict_is_always_emitted_6605": "確保永遠發出 'use strict'。", + "Entering_conditional_exports_6413": "正在進入條件式匯出。", + "Entry_point_for_implicit_type_library_0_1420": "隱含型別程式庫 '{0}' 的進入點", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "具有 packageId '{1}' 的隱含型別程式庫 '{0}' 進入點", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "具有 packageId '{1}' 且在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", + "Enum_0_used_before_its_declaration_2450": "列舉 '{0}' 的位置在其宣告之前。", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列舉宣告只能與命名空間或其他列舉宣告合併。", + "Enum_declarations_must_all_be_const_or_non_const_2473": "列舉宣告必須都是 const 或非 const。", + "Enum_member_expected_1132": "必須是列舉成員。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "啟用 'isolatedModules' 時,跟隨非常值數值成員的列舉成員必須有初始設定式。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列舉成員初始設定式必須是可計算,且不參考具有 --isolatedDeclarations 的外部符號。", + "Enum_member_must_have_initializer_1061": "列舉成員必須有初始設定式。", + "Enum_name_cannot_be_0_2431": "列舉名稱不得為 '{0}'。", + "Environment_Settings_6285": "環境設定", + "Errors_Files_6041": "錯誤檔案", + "Escape_sequence_0_is_not_allowed_1488": "不允許逸出序列 '{0}'。", + "Examples_Colon_0_6026": "範例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "過度複雜性比較類型 '{0}' 和 '{1}'。", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "比較類型 '{0}' 與 '{1}' 的堆疊深度過深。", + "Exiting_conditional_exports_6416": "正在退出條件式匯出。", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "必須是 {0}-{1} 型別引數; 請提供有 '@ extends' 標記的這類型引數。", + "Expected_0_arguments_but_got_1_2554": "應有 {0} 個引數,但得到 {1} 個。", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "應為 {0} 個引數,但現有 {1} 個。是否忘記將型別引數中的 'void' 納入 'Promise' 中?", + "Expected_0_type_arguments_but_got_1_2558": "應有 {0} 個型別引數,但得到 {1} 個。", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "必須是 {0} 型別引數; 請提供有 '@ extends' 標記的這類引數。", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "需要 1 個引數,但得到 0。'new Promise()' 需要 JSDoc 提示,才能產生可以呼叫而不含引數的 'resolve'。", + "Expected_a_Unicode_property_name_1523": "必須是 Unicode 屬性名稱。", + "Expected_a_Unicode_property_name_or_value_1527": "必須是 Unicode 屬性名稱或值。", + "Expected_a_Unicode_property_value_1525": "必須是 Unicode 屬性值。", + "Expected_a_capturing_group_name_1514": "必須是擷取群組名稱。", + "Expected_a_class_set_operand_1520": "必須是類別集運算元。", + "Expected_at_least_0_arguments_but_got_1_2555": "至少應有 {0} 個引數,但得到 {1} 個。", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' 需要對應的 JSX 結尾標記。", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 片段必須有對應的結尾標記。", + "Expected_for_property_initializer_1442": "屬性初始設定式必須是 '='。", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "在 'package.json' 中 '{0}' 欄位的類型必須為 '{1}',但取得 '{2}'。", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明確指定的模組解析種類: '{0}'。", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 選項必須設定為 'es2016' 或更新版本,才可以對 'bigint' 值執行乘冪運算。", + "Export_0_from_module_1_90059": "從模組 '{1}' 匯出 '{0}'", + "Export_all_referenced_locals_90060": "匯出所有參考的本機", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "當目標為 ECMAScript 模組時,無法使用匯出指派。請考慮改用 'export default' 或其他模組格式。", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "當 '--module' 旗標為 'system' 時,不支援匯出指派。", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "匯出宣告與匯出的 '{0}' 宣告相衝突。", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "在命名空間中不可使用匯出宣告。", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "在路徑 '{0}' 的 package.js 範圍中不存在匯出指定名稱 '{1}'。", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "匯出的類型別名 '{0}' 具有或使用私用名稱 '{1}'。", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "匯出的類型別名 '{0}' 具有或使用模組 {2} 中的私人名稱 '{1}'。", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "匯出的變數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "匯出的變數 '{0}' 具有或使用私用模組 {2} 中的名稱 '{1}'。", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "匯出的變數 '{0}' 具有或使用私用名稱 '{1}'。", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模組增強指定中不允許匯出及匯出指派。", + "Expression_expected_1109": "必須是運算式。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表達式必須包含在括弧內,才能做為裝飾項目使用。", + "Expression_or_comma_expected_1137": "必須是運算式或逗號。", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "運算式產生的元組類型太大而無法表示。", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "運算式產生的等位型別過於複雜而無法表示。", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "運算式會解析成 '_super',而編譯器會使用其來擷取基底類別參考。", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "運算式將解析成變數宣告 '_newTarget',而供編譯器用來擷取 'new.target' 中繼屬性參考。", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "運算式會解析成變數宣告 '_this',而編譯器會使用此宣告來擷取 'this' 參考 。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "無法使用 --isolatedDeclarations 推斷運算式類型。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "擴充子句不能包含具有 --isolatedDeclarations 的運算式。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推斷類型 '{0}' 的 'Extends' 子句包含或使用了私人名稱 '{1}'。", + "Extract_base_class_to_variable_90064": "擷取基底類別至變數", + "Extract_binding_expressions_to_variable_90066": "將繫結運算式擷取至變數", + "Extract_constant_95006": "擷取常數", + "Extract_default_export_to_variable_90065": "擷取預設匯出至變數", + "Extract_function_95005": "擷取函式", + "Extract_to_0_in_1_95004": "擷取至 {1} 中的 {0}", + "Extract_to_0_in_1_scope_95008": "擷取至 {1} 範圍中的 {0}", + "Extract_to_0_in_enclosing_scope_95007": "擷取至封閉式範圍中的 {0}", + "Extract_to_interface_95090": "擷取至介面", + "Extract_to_type_alias_95078": "擷取至類型別名", + "Extract_to_typedef_95079": "擷取至 typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "擷取至變數,並以 '{0} as typeof {0}' 取代", + "Extract_type_95077": "擷取類型", + "FILE_6035": "檔案", + "FILE_OR_DIRECTORY_6040": "檔案或目錄", + "Failed_to_delete_file_0_6353": "Failed to delete file '{0}'.", + "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency '{0}'。", + "Failed_to_resolve_under_condition_0_6415": "在條件 '{0}' 下解析失敗。", + "Fallthrough_case_in_switch_7029": "參數中的 fallthrough 案例。", + "File_0_does_not_exist_6096": "檔案 '{0}' 不存在。", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根據之前快取的查閱,檔案 '{0}' 不存在。", + "File_0_exists_according_to_earlier_cached_lookups_6239": "根據之前快取的查閱,檔案 '{0}' 存在。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其做為名稱解析結果使用。", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "不支援檔案 '{0}' 的副檔名。支援的副檔名只有 {1}。", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "檔案 '{0}' 為 JavaScript 檔案。您是要啟用 'allowJs' 選項嗎?", + "File_0_is_not_a_module_2306": "檔案 '{0}' 不是模組。", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "檔案 '{0}' 未列於專案 '{1}' 的檔案清單內。專案必須列出所有檔案,或使用 'include' 模式。", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "檔案 '{0}' 不在 'rootDir' '{1}' 之下。'rootDir' 必須包含所有原始程式檔。", + "File_0_not_found_6053": "找不到檔案 '{0}'。", + "File_Layout_6284": "檔案配置", + "File_Management_6245": "檔案管理", + "File_appears_to_be_binary_1490": "檔案顯示為二進位。", + "File_change_detected_Starting_incremental_compilation_6032": "偵測到檔案變更。正在啟動累加編譯...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "檔案是 CommonJS 模組,因為 '{0}' 沒有 \"type\" 欄位", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "檔案是 CommonJS 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "檔案是 CommonJS 模組,因為找不到 'package.json'", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "檔案是 ECMAScript 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "檔案為 CommonJS 模組; 其可轉換為 ES 模組。", + "File_is_default_library_for_target_specified_here_1426": "檔案是此處指定目標的預設程式庫。", + "File_is_entry_point_of_type_library_specified_here_1419": "檔案是此處指定型別程式庫的進入點。", + "File_is_included_via_import_here_1399": "檔案透過匯入加入此處。", + "File_is_included_via_library_reference_here_1406": "檔案透過程式庫參考加入此處。", + "File_is_included_via_reference_here_1401": "檔案透過參考加入此處。", + "File_is_included_via_type_library_reference_here_1404": "檔案透過型別程式庫參考加入此處。", + "File_is_library_specified_here_1423": "檔案是此處指定的程式庫。", + "File_is_matched_by_files_list_specified_here_1410": "檔案會依此處指定的 'files' 清單比對。", + "File_is_matched_by_include_pattern_specified_here_1408": "檔案會依此處指定的包含模式比對。", + "File_is_output_from_referenced_project_specified_here_1413": "檔案是此處指定的參考專案輸出。", + "File_is_output_of_project_reference_source_0_1428": "檔案是專案參考來源 '{0}' 的輸出", + "File_is_source_from_referenced_project_specified_here_1416": "檔案是此處指定參考專案的來源。", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "檔案名稱 '{0}' 與包含的檔案名稱 '{1}' 只差在大小寫。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "檔案名稱 '{0}' 具有 '{1}' 延伸模組 - 改為查詢 '{2}'。", + "File_name_0_has_a_1_extension_stripping_it_6132": "檔案名稱 '{0}' 的副檔名為 '{1}'。正予以移除。", + "File_redirects_to_file_0_1429": "檔案會重新導向檔案 '{0}'", + "File_rename_is_not_supported_by_the_editor_8040": "File rename is not supported by the editor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "檔案規格不得包含出現在遞迴目錄萬用字元 ('**') 之後的父目錄 ('..'): '{0}'。", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "檔案規格不能以遞迴目錄萬用字元 ('**') 結尾: '{0}'。", + "Filters_results_from_the_include_option_6627": "從 `include` 選項篩選結果。", + "Fix_All_95205": "Fix All", + "Fix_all_detected_spelling_errors_95026": "修正偵測到的所有拼字錯誤", + "Fix_all_expressions_possibly_missing_await_95085": "修正所有可能缺少 'await' 的運算式", + "Fix_all_implicit_this_errors_95107": "修正所有隱含 'this' 的錯誤", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修正非同步函式所有不正確的傳回型別", + "Fix_all_with_type_only_imports_95182": "使用僅限類型匯入來修正所有問題", + "For_nodejs_Colon_6287": "針對 nodejs:", + "Found_0_errors_6217": "找到 {0} 個錯誤。", + "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 個錯誤。正在監看檔案變更。", + "Found_0_errors_in_1_files_6261": "在 {1} 檔案中發現 {0} 個錯誤。", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一個檔案中發現 {0} 個錯誤,開始位置: {1}", + "Found_1_error_6216": "找到 1 個錯誤。", + "Found_1_error_Watching_for_file_changes_6193": "找到 1 個錯誤。正在監看檔案變更。", + "Found_1_error_in_0_6259": "在 {0} 找到 1 個錯誤", + "Found_package_json_at_0_6099": "在 '{0}' 找到 'package.json'。", + "Found_peerDependency_0_with_1_version_6282": "找到版本為 '{1}' 的 peerDependency '{0}'。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。類別定義會自動進入 strict 模式。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。模組會自動進入 strict 模式。", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少傳回型別註解的函式運算式隱含了 '{0}' 傳回型別。", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "遺漏函式實作,或函式實作未緊接在宣告之後。", + "Function_implementation_name_must_be_0_2389": "函式實作名稱必須是 '{0}'。", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "函式因為沒有傳回型別註解,並在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函式缺少結束 return 陳述式,且傳回類型不包括 'undefined'。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函式必須有具備 --isolatedDeclarations 的明確傳回型別註解。", + "Function_not_implemented_95159": "未實作函式。", + "Function_overload_must_be_static_2387": "函式多載必須為靜態。", + "Function_overload_must_not_be_static_2388": "函式多載不可為靜態。", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在等位型別中使用函式類型標記法時,必須括以括弧。", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在交集型別中使用函式類型標記法時,必須括以括弧。", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少傳回型別註解的函式類型隱含 '{0}' 傳回型別。", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "包含主體的函式只能與屬於環境的類別合併。", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "從專案中的 TypeScript 和 JavaScript 檔案產生 .d.ts 檔案。", + "Generate_get_and_set_accessors_95046": "產生 'get' 與 'set' 存取子", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "為所有覆寫屬性產生 'get' 和 'set' 存取子", + "Generate_pprof_CPU_Slashmemory_profiles_to_the_given_directory_6935": "Generate pprof CPU/memory profiles to the given directory.", + "Generates_a_CPU_profile_6223": "產生 CPU 設定檔。", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "為每個相對應的 '.d.ts' 檔案產生 sourcemap。", + "Generates_an_event_trace_and_a_list_of_types_6237": "產生事件追蹤與類型清單。", + "Generates_corresponding_d_ts_file_6002": "產生對應的 '.d.ts' 檔案。", + "Generates_corresponding_map_file_6043": "產生對應的 '.map' 檔案。", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "產生器隱含的 yield 類型為 '{0}'。請考慮提供傳回型別註解。", + "Generators_are_not_allowed_in_an_ambient_context_1221": "環境內容中不允許產生器。", + "Generic_type_0_requires_1_type_argument_s_2314": "泛型類型 '{0}' 需要 {1} 個型別引數。", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型型別 '{0}' 需要介於 {1} 和 {2} 之間的型別引數。", + "Global_module_exports_may_only_appear_at_top_level_1316": "全域模組匯出只能顯示在最上層。", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "全域模組匯出只能顯示在宣告檔案中。", + "Global_module_exports_may_only_appear_in_module_files_1314": "全域模組匯出只能顯示在模組檔案中。", + "Global_type_0_must_be_a_class_or_interface_type_2316": "全域類型 '{0}' 必須是類別或介面類型。", + "Global_type_0_must_have_1_type_parameter_s_2317": "全域類型 '{0}' 必須要有 {1} 個型別參數。", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "於 '--incremental' 與 '--watch' 中重新編譯時,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 'incremental' 與 'watch' 模式的專案中重新編譯,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", + "Hexadecimal_digit_expected_1125": "必須適十六進位數字。", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "需要識別碼。'{0}' 是模組的頂層保留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "必須是識別碼。'{0}' 在 strict 模式中為保留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "必須是識別碼。'{0}' 是 strict 模式中的保留字。類別定義會自動採用 strict 模式。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "需要識別碼。'{0}' 是 strict 模式中的保留字。模組會自動採用 strict 模式。", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "必須為識別碼。'{0}' 為保留字,此處不可使用。", + "Identifier_expected_1003": "必須是識別碼。", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "必須有識別碼。'__esModule' 已保留為轉換 ECMAScript 模組時匯出的標記。", + "Identifier_or_string_literal_expected_1478": "需要識別碼或字串常值。", + "Identifier_string_literal_or_number_literal_expected_1496": "必須是識別碼、字串常值或數字常值。", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果「{0}」套件實際上公開了此模組,請考慮傳送提取要求以修改 「https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}」", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果 '{0}' 套件的確公開了此模組,請嘗試新增包含 `declare module '{1}';` 的宣告 (.d.ts) 檔案。", + "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549": "Ignore the tsconfig found and build with commandline options and files.", + "Ignore_this_error_message_90019": "略過此錯誤訊息", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用預設編譯器選項編譯指定的檔案。", + "Implement_all_inherited_abstract_classes_95040": "實作所有繼承的抽象類別", + "Implement_all_unimplemented_interfaces_95032": "實作所有未實作的介面", + "Implement_inherited_abstract_class_90007": "實作已繼承的抽象類別", + "Implement_interface_0_90006": "實作介面 '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "匯出類別 '{0}' 的 Implements 子句具有或使用私用名稱 '{1}'。", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "在執行階段中無法將 'symbol' 隱含轉換為 'string'。請考慮將此運算式包裝在 'String(...)' 中。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "匯入 '{0}' 會與此檔案中使用的全域值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "匯入 '{0}' 會與本機值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", + "Import_0_from_1_90013": "從 \"{1}\" 匯入 '{0}'", + "Import_assertion_values_must_be_string_literal_expressions_2837": "匯入判斷提示值必須是字串常值運算式。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入判斷提示。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve' 時,才支援匯入判斷提示。", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "匯入判斷提示不能與僅限類型的匯入或匯出搭配使用。", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "匯入宣告已由匯入屬性取代。使用 『with』 而非 'assert'。", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "當目標為 ECMAScript 模組時,無法使用匯入指派。請考慮改用 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' 或其他模組格式。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "匯入屬性值必須是字串常值運算式。", + "Import_attributes_are_not_allowed_on_a_module_augmentation_1551": "Import attributes are not allowed on a module augmentation.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入屬性。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve’ 時,才支援匯入屬性。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "匯入屬性不能與僅限類型的匯入或匯出搭配使用。", + "Import_declaration_0_is_using_private_name_1_4000": "匯入宣告 '{0}' 使用私用名稱 '{1}'。", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "匯入宣告與 '{0}' 的區域宣告衝突。", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空間中的匯入宣告不得參考模組。", + "Import_emit_helpers_from_tslib_6139": "從 'tslib' 匯入發出協助程式。", + "Import_may_be_converted_to_a_default_import_80003": "匯入可轉換成預設匯入。", + "Import_name_cannot_be_0_2438": "匯入名稱不得為 '{0}'。", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "環境模組宣告中的匯入或匯出宣告,不得透過相對模組名稱參考模組。", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "在路徑 '{0}' 的 package.js 範圍中不存在匯入指定名稱 '{1}'。", + "Imported_via_0_from_file_1_1393": "透過 {0} 從檔案 '{1}' 匯入", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "透過 {0} 從檔案 '{1}' 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "透過 {0} 從檔案 '{1}' 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", + "Imported_via_0_from_file_1_with_packageId_2_1394": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "當 'module' 設定為 '{0}' 時,匯入 JSON 檔案至 ECMAScript 模組需要 'type: \"json\"' 匯入屬性。", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模組增強指定中不允許匯入。請考慮將其移至封入外部模組。", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在環境列舉宣告中,成員初始設定式必須是常數運算式。", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在具有多個宣告的列舉中,只有一個宣告可以在其第一個列舉項目中省略初始設定式。", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含檔案的清單。這不支援 Glob 模式,與 `include` 相反。", + "Include_modules_imported_with_json_extension_6197": "包含匯入有 '.json' 延伸模組的模組", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在發出 JavaScript 內的 sourcemap 中包含原始程式碼。", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在發出的 JavaScript 中包含 sourcemap 檔案。", + "Includes_imports_of_types_referenced_by_0_90054": "包括 '{0}' 參考的類型匯入", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch、-w 會開始監看目前專案是否有檔案變更。設定之後,您便可以使用以下來設定監看式模式:", + "Incomplete_quantifier_Digit_expected_1505": "不完整的數量詞。必須是數字。", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "類型 '{0}' 的索引簽章在類型 '{1}' 中遺失。", + "Index_signature_in_type_0_only_permits_reading_2542": "類型 '{0}' 中的索引簽章只允許讀取。", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合併宣告 '{0}' 中的個別宣告必須全部匯出或全在本機上。", + "Infer_all_types_from_usage_95023": "從用法推斷所有類型", + "Infer_function_return_type_95148": "推斷函式傳回型別", + "Infer_parameter_types_from_usage_95012": "從使用方式推斷參數類型", + "Infer_this_type_of_0_from_usage_95080": "從使用方式推斷 '{0}' 的 'this' 類型", + "Infer_type_of_0_from_usage_95011": "從使用方式推斷 '{0}' 的類型", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支援來自類別運算式的推斷。", + "Initialize_property_0_in_the_constructor_90020": "將建構函式中的屬性 '{0}' 初始化", + "Initialize_static_property_0_90021": "將靜態屬性 '{0}' 初始化", + "Initializer_for_property_0_2811": "屬性 '{0}' 的初始設定式", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "執行個體成員變數 '{0}' 的初始設定式不得參考建構函式中所宣告的識別碼 '{1}'。", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "環境內容中不得有初始設定式。", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 專案並建立 tsconfig.json 檔案。", + "Inline_variable_95184": "內嵌變數", + "Insert_command_line_options_and_files_from_a_file_6030": "從檔案插入命令列選項與檔案。", + "Install_0_95014": "安裝 '{0}'", + "Install_all_missing_types_packages_95033": "安裝缺少的所有類型套件", + "Installing_types_for_0_95203": "Installing types for '{0}'", + "Instantiations_of_the_following_types_appear_infinitely_circular_Colon_0_5115": "Instantiations of the following types appear infinitely circular: {0}.", + "Instantiations_of_type_0_appear_infinitely_circular_5114": "Instantiations of type '{0}' appear infinitely circular.", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "介面 '{0}' 不能同時擴充類型 '{1}' 和 '{2}'。", + "Interface_0_incorrectly_extends_interface_1_2430": "介面 '{0}' 不正確地擴充介面 '{1}'。", + "Interface_declaration_cannot_have_implements_clause_1176": "介面宣告不能有 'implements' 子句。", + "Interface_must_be_given_a_name_1438": "必須為介面指定名稱。", + "Interface_name_cannot_be_0_2427": "介面名稱不得為 '{0}'。", + "Interop_Constraints_6252": "Interop 條件約束", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "將選用屬性類型解譯為寫入,而非新增 'undefined'。", + "Invalid_character_1127": "無效的字元。", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "無效的匯入指定名稱 '{0}' 沒有可能的解決方法。", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "增強中的模組名稱無效。模組 '{0}' 於 '{1}' 解析至不具類型的模組,其無法擴增。", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "增強指定中的模組名稱無效,找不到模組 '{0}'。", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新運算式的選擇性鏈結無效。您想要呼叫 '{0}()' 嗎?", + "Invalid_reference_directive_syntax_1084": "無效的 'reference' 指示詞語法。", + "Invalid_syntax_in_decorator_1498": "裝飾項目中無效的語法。", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' 的使用無效。不能在類別靜態區塊內使用。", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' 的用法無效。模組會自動採用 strict 模式。", + "Invalid_use_of_0_in_strict_mode_1100": "在 strict 模式中使用 '{0}' 無效。", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' 的值無效。", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' 的值無效。'{0}' 不是有效的識別碼。", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "可能是未使用逗號分隔這兩個範本運算式,因而形成了附加標籤的範本運算式,導致無法叫用。", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素類型 '{0}' 不是有效的 JSX 元素。", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其執行個體類型 '{0}' 不是有效的 JSX 元素。", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其傳回型別 '{0}' 不是有效的 JSX 元素。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其類型 '{0}' 不是有效的 JSX 元素類型。", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' 不符合 'extends {2}' 子句。", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc ''@{0}' 未連結到類別。", + "JSDoc_comment_95209": "JSDoc comment", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' 只能出現在特徵標記的最後一個參數中。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 標記的名稱為 '{0}',但沒有為該名稱的參數。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 標籤的名稱為 '{0}',但沒有任何參數使用該名稱。如有陣列類型,則會與 'arguments' 相符。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以轉換成 TypeScript 類型。", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 標記應具有類型註解,或者其後接著 '@property' 或 '@member' 標記。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs 可以轉換成 TypeScript 類型。", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 類型只能在文件註解中使用。", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 類型可移為 TypeScript 類型。", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能將非空白的 'expression' 指派給 JSX 屬性。", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 元素 '{0}' 沒有對應的結尾標記。", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "因為 JSX 項目類別沒有 '{0}' 屬性 (property),所以不支援屬性 (attribute)。", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "因為沒有介面 'JSX.{0}',表示 JSX 項目隱含了類型 'any'。", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "因為全域類型 'JSX.Element' 不存在,所以 JSX 項目隱含有類型 'any'。", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 項目類型 '{0}' 沒有任何建構或呼叫簽章。", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 項目不得有多個同名的屬性。", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 運算式不可使用逗號運算子。您是要寫入陣列嗎?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX 運算式必須具有一個父元素。", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段沒有對應的結尾標記。", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 屬性存取運算式不能包含 JSX 命名空間名稱", + "JSX_spread_child_must_be_an_array_type_2609": "JSX 擴張子系必須為陣列類型。", + "JavaScript_Support_6247": "JavaScript 支援", + "Jump_target_cannot_cross_function_boundary_1107": "跳躍目標不得跨越函式界限。", + "KIND_6034": "類型", + "Keywords_cannot_contain_escape_characters_1260": "關鍵字不可包含逸出字元。", + "LOCATION_6037": "位置", + "Language_and_Environment_6254": "語言及環境", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗號運算子左側未使用,而且沒有任何不良影響。", + "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定的程式庫 '{0}'", + "Library_referenced_via_0_from_file_1_1405": "透過 '{0}' 從檔案 '{1}' 參考的程式庫", + "Line_break_not_permitted_here_1142": "這裡不可使用分行符號。", + "Line_terminator_not_permitted_before_arrow_1200": "箭號前不得有行結束字元。", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "解析模組時要搜尋的檔案名尾碼清單。", + "List_of_folders_to_include_type_definitions_from_6161": "要包含之類型定義所屬資料夾的清單。", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "資料夾的清單。這些資料夾內所含的合併內容代表了專案在執行階段時的結果。", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在從根目錄 '{1}',候選位置 '{2}' 載入 '{0}'。", + "Loading_95202": "Loading", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型: {1}。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型: {1}。", + "Locale_must_be_an_IETF_BCP_47_language_tag_Examples_Colon_0_1_6048": "Locale must be an IETF BCP 47 language tag. Examples: '{0}', '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "在 'moduleResolution' 處理序期間使用的記錄檔路徑。", + "Longest_matching_prefix_for_0_is_1_6108": "符合 '{0}' 的前置詞最長為 '{1}'。", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "目前正在 'node_modules' 資料夾中查詢,初始位置為 '{0}'。", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "在其建構函式的第一個陳述式中呼叫所有的 'super()'", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "僅讓 keyof 傳回字串,而不是單一字串、數字或符號。舊版選項。", + "Make_super_call_the_first_statement_in_the_constructor_90002": "使 'super()' 呼叫成為建構函式中的第一個陳述式", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "對應的物件類型隱含具有 'any' 範本類型。", + "Mark_array_literal_as_const_90070": "標記陣列常值為常數", + "Matched_0_condition_1_6403": "符合 '{0}' 條件 '{1}'。", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "依預設比對包含模式 '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "依 '{1}' 中的包含模式 '{0}' 比對", + "Member_0_implicitly_has_an_1_type_7008": "成員 '{0}' 隱含了 '{1}' 類型。", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成員 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Merge_conflict_marker_encountered_1185": "偵測到合併衝突標記。", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "合併宣告 '{0}' 不得包含預設匯出宣告。請考慮改為加入獨立型 'export default {0}' 宣告。", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "只有函式宣告、函式運算式或建構函式的主體中允許中繼屬性 '{0}'。", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "因為方法 '{0}' 已標記為抽象,所以不可具有實作。", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "匯出介面的方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "匯出介面的方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必須有具備 --isolatedDeclarations 的明確傳回型別註解。", + "Method_not_implemented_95158": "未實作方法。", + "Modifiers_cannot_appear_here_1184": "此處不得出現修飾元。", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模組 '{0}' 只能依預設使用 '{1}' 旗標匯入", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "無法使用此建構匯入模組 '{0}'。指定名稱只能解析成無法以 'require' 匯入的 ES 模組。請改為使用 ECMAScript 匯入。", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模組 '{0}' 區域性地宣告 '{1}',但卻將該模組匯出為 '{2}'。", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "模組 '{0}' 區域性地宣告 '{1}',但並未匯出該模組。", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "模組 '{0}' 不是類型,但在此處卻作為類型使用。您是指 'typeof import('{0}')' 嗎?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "模組 '{0}' 未參考任何值,但在此用為值。", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "模組 {0} 已匯出名為 '{1}' 的成員。請考慮明確重新匯出項目以解決模稜兩可的情形。", + "Module_0_has_no_default_export_1192": "模組 '{0}' 沒有預設匯出。", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "模組 '{0}' 沒有預設匯出。您是要改用 'import { {1} } from {0}' 嗎?", + "Module_0_has_no_exported_member_1_2305": "模組 '{0}' 沒有匯出的成員 '{1}'。", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模組 '{0}' 沒有匯出的成員 '{1}'。您是要改用 'import {1} from {0}' 嗎?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "同名的區域宣告隱藏了模組 '{0}'。", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模組 '{0}' 使用 'export =',因而無法以 'export *' 的方式使用。", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模組 '{0}' 在檔案 '{1}' 中已解析為本機宣告的環境模組。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模組 '{0}' 已解析為 '{1}',但是尚未設定 '--allowArbitraryExtensions'。", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模組 '{0}' 已解析為 '{1}',但未設定 '--jsx'。", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模組 '{0}' 已解析為 '{1}',但未使用 '--resolveJsonModule'。", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模組宣告名稱只能使用 ' 或 \" 引用的字串。", + "Module_name_0_matched_pattern_1_6092": "模組名稱 '{0}',符合的模式 '{1}'。", + "Module_name_0_was_not_resolved_6090": "======== 模組名稱 '{0}' 未解析。========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模組名稱 '{0}' 已成功解析為 '{1}'。========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模組名稱 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}'。========", + "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模組解析種類,將使用 '{0}'。", + "Module_resolution_using_rootDirs_has_failed_6111": "使用 'rootDirs' 解析模組失敗。", + "Modules_6244": "模組", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "將標記的元組元素修飾元移至標籤", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "將預設匯出中的運算式移動到變數,並在其中新增類型註釋。", + "Move_to_a_new_file_95049": "移至新檔", + "Move_to_file_95178": "移動至檔案", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允許多個連續的數字分隔符號。", + "Multiple_constructor_implementations_are_not_allowed_2392": "不允許多個建構函式實作。", + "Multiple_module_exports_assignments_cannot_be_serialized_for_declaration_emit_6424": "Multiple 'module.exports' assignments cannot be serialized for declaration emit.", + "NEWLINE_6061": "新行", + "Name_is_not_valid_95136": "名稱無效", + "Named_and_namespace_imports_are_not_allowed_in_a_source_phase_import_18112": "Named and namespace imports are not allowed in a source phase import.", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "只有以 'ES2018' 或更新版本為目標時,才可以使用具名擷取群組。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "具有相同名稱的命名擷取群組必須互相排除。", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "延遲的匯出中不允許具名匯入。", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "當 'module' 設定為 '{0}' 時,不允許從 JSON 檔案具名匯入 ECMAScript 模組。", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "類型 '{1}' 及 '{2}' 的具名屬性 '{0}' 不一致。", + "Namespace_0_has_no_exported_member_1_2694": "命名空間 '{0}' 沒有匯出的成員 '{1}'。", + "Namespace_must_be_given_a_name_1437": "必須為命名空間指定名稱。", + "Namespace_name_cannot_be_0_2819": "命名空間名稱不得為 '{0}'。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "啟用 '{0}' 時,在全域指令碼檔案中不允許命名空間。如果此檔案不是預定為全域指令碼,將 'moduleDetection' 設定為 'force',或新增空白的 'export {}' 陳述式。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "裝飾項目和修飾元都無法套用至 'this' 參數。", + "Nested_CommonJS_export_constructs_cannot_be_serialized_for_declaration_emit_6425": "Nested CommonJS export constructs cannot be serialized for declaration emit.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "沒有任何基底建構函式具有指定的類型引數數量。", + "No_constituent_of_type_0_is_callable_2755": "無法呼叫 '{0}' 類型的任何構件。", + "No_constituent_of_type_0_is_constructable_2759": "無法建構 '{0}' 類型的任何構件。", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在類型 '{1}' 中找不到任何具有 '{0}' 類型之參數的索引簽章。", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在設定檔 '{0}' 中找不到任何輸入。指定的 'include' 路徑為 '{1}','exclude' 路徑為 '{2}'。", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再支援。在早期版本中,手動設定讀取檔案的文字編碼方式。", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "沒有任何多載需要 {0} 引數,但有多載需要 {1} 或 {2} 引數。", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "沒有任何多載需要 {0} 類型引數,但有多載需要 {1} 或 {2} 類型引數。", + "No_overload_matches_this_call_2769": "沒有任何多載符合此呼叫。", + "No_type_could_be_extracted_from_this_type_node_95134": "無法從此類型節點擷取任何類型", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速記屬性 '{0}' 的範圍中不存在任何值。請宣告一個值或提供初始設定式。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象類別 '{0}' 未實作從類別 '{2}' 繼承而來的抽象成員 '{1}'。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2} 和 {3} 等。", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象類別運算式未實作從類別 '{1}' 繼承而來的抽象成員 '{0}'。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1} 和 {2} 等。", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 Null 的判斷提示只可用於 TypeScript 檔案中。", + "Non_relative_paths_are_not_allowed_Did_you_forget_a_leading_Slash_5090": "Non-relative paths are not allowed. Did you forget a leading './'?", + "Non_simple_parameter_declared_here_1348": "非簡易參數已宣告於此處。", + "Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。", + "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 類型的構件並非都可呼叫。", + "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 類型的構件並非都可構建。", + "Numbers_out_of_order_in_quantifier_1506": "數字在數量詞中失序。", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絕對值等於或大於 2^53 的數字常值過大,無法準確地表示為整數。", + "Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。", + "Object_is_of_type_unknown_2571": "物件的類型為 '未知'。", + "Object_is_possibly_null_2531": "物件可能為「null」。", + "Object_is_possibly_null_or_undefined_2533": "物件可能為「null」或「未定義」。", + "Object_is_possibly_undefined_2532": "物件可能為「未定義」。", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "物件常值只可指定已知的屬性,且類型 '{1}' 中沒有 '{0}'。", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "物件常值只會指定已知的屬性,但類型 '{1}' 中沒有 '{0}'。您是否想要寫入 '{2}'?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "物件常值的屬性 '{0}' 隱含了 '{1}' 類型。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "無法使用 --isolatedDeclarations 推斷包含速記屬性的物件。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "無法使用 --isolatedDeclarations 推斷包含擴張作業的物件。", + "Octal_digit_expected_1178": "必須是八進位數字。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字元類別中不允許八進位逸出序列和反向參考。如果要做為逸出序列,請改用語法 '{0}'。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允許八進位逸出序列。請使用語法 '{0}'。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允許八進位常值。請使用語法 '{0}'。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' 的一個值是字串 '{2}',另一個值假設為未知的數值。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 陳述式中只可包含一個變數宣告。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 陳述式只能包含一個變數宣告。", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "只有 void 函式可以使用 'new' 關鍵字進行呼叫。", + "Only_ambient_modules_can_use_quoted_names_1035": "只有環境模組可以使用括以引號的名稱。", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "只有 'amd' 與 'system' 模組連同受支援 --{0}。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "僅常數陣列可以使用 --isolatedDeclarations 推斷。", + "Only_emit_d_ts_declaration_files_6014": "只發出 '.d.ts' 宣告檔案。", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "只輸出 d.ts 檔案,而不是 JavaScript 檔案。", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "只有基底類別之公開且受保護的方法,才可透過 'super' 關鍵字存取。", + "Operator_0_cannot_be_applied_to_type_1_2736": "無法將運算子 '{0}' 套用至類型 '{1}'。", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "無法將運算子 '{0}' 套用至類型 '{1}' 和 '{2}'。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "運算子不得混合在字元類別中。改為將運算子包裝在巢狀類別中。", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在編輯時從多專案參考檢查選擇一個專案。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "已移除選項 '{0}={1}'。請將該選項從您的設定中移除。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "選項 '{0}={1}' 已被取代,將在 TypeScript {2} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{3}\"' 以沉默此錯誤。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'false' 或 'null'。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'null'。", + "Option_0_can_only_be_specified_on_command_line_6266": "選項 '{0}' 只能在命令列中指定。", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "只有在已提供選項 '--inlineSourceMap' 或選項 '--sourceMap' 時,才可使用選項 '{0}'。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有當 'moduleResolution' 設定為 'node16'、'nodenext' 或 'bundler' 時,才可以使用選項 '{0}'。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095": "只有當 'module' 設定為 'preserve'、'commonjs' 或 'es2015' 或更新版本時,才能使用選項 '{0}'。", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "當選項 'jsx' 為 '{1}' 時,無法指定選項 '{0}'。", + "Option_0_cannot_be_specified_with_option_1_5053": "不得同時指定選項 '{0}' 與選項 '{1}'。", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "必須指定選項 '{1}' 才可指定選項 '{0}'。", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "指定選項 '{0}' 時,必須指定選項 '{1}' 或選項 '{2}'。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "已移除選項 '{0}'。請將該選項從您的設定中移除。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "選項 '{0}' 已被取代,將在 TypeScript {1} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{2}\"' 以沉默此錯誤。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "選項 '{0}' 為多餘且不得與選項 '{1}'一起指定。", + "Option_0_requires_value_to_be_greater_than_1_5002": "Option '{0}' requires value to be greater than '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096": "只有在設定 'noEmit'、'emitDeclarationOnly' 或 'rewriteRelativeImportExtensions' 其中一項時,才能使用 'allowImportingTsExtensions' 選項。", + "Option_build_must_be_the_first_command_line_argument_6369": "選項 '--build' 必須是第一個命令列引數。", + "Option_incremental_is_only_valid_with_a_known_configuration_file_like_tsconfig_json_or_when_tsBuildI_5074": "Option '--incremental' is only valid with a known configuration file (like 'tsconfig.json') or when '--tsBuildInfoFile' is explicitly provided.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "只有在提供選項 '--module' 或是 'target' 為 'ES2015' 或更高項目時,才可使用選項 'isolatedModules'。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "當選項 'module' 設定為 '{1}' 時,選項 'moduleResolution' 必須設定為 '{0}' (或保留為未指定)。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "當選項 'moduleResolution' 設定為 '{1}' 時,選項 'module' 必須設定為 '{0}'。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "啟用 '{0}' 時,無法停用選項 'preserveConstEnums'。", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "在命令列上,'project' 選項不得與原始程式檔並用。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "當 'moduleResolution' 設定為 'classic' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "當 'module' 設定為 'none'、'system' 或 'umd' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "當 'module' 設定為 'UMD'、'AMD' 或 'System' 時,無法使用選項 'verbatimModuleSyntax'。", + "Optional_chaining_cannot_be_used_with_import_source_18114": "Optional chaining cannot be used with 'import.source'.", + "Options_0_and_1_cannot_be_combined_6370": "無法合併選項 '{0}' 與 '{1}'。", + "Options_Colon_6027": "選項:", + "Organize_Imports_95206": "Organize Imports", + "Other_Outputs_6291": "其他輸出", + "Output_Formatting_6256": "輸出格式", + "Output_compiler_performance_information_after_building_6615": "在組建後輸出編譯器效能資訊。", + "Output_directory_for_generated_declaration_files_6166": "所產生之宣告檔案的輸出目錄。", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "輸出檔 '{0}' 並非從原始程式檔 '{1}' 建置。", + "Output_from_referenced_project_0_included_because_1_specified_1411": "因為指定了 '{1}',所以包含參考的專案 '{0}' 輸出", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 輸出", + "Output_more_detailed_compiler_performance_information_after_building_6632": "在組建後輸出更詳細的編譯器效能資訊。", + "Overload_0_of_1_2_gave_the_following_error_2772": "多載 {0} (共 {1}),'{2}',發生下列錯誤。", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "多載簽章必須全為抽象或非抽象。", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "多載簽章都必須是環境或非環境簽章。", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "多載簽章必須全部匯出或不匯出。", + "Overload_signatures_must_all_be_optional_or_required_2386": "多載簽章都必須是選擇性或必要簽章。", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "多載簽章必須是公用、私用或受保護。", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "參數 '{0}' 不得參考在其之後宣告的識別碼 '{1}'。", + "Parameter_0_cannot_reference_itself_2372": "參數 '{0}' 不得參考自身。", + "Parameter_0_implicitly_has_an_1_type_7006": "參數 '{0}' 隱含了 '{1}' 類型。", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "參數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "參數 '{0}' 與參數 '{1}' 不在同一個位置。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "存取子的參數 '{0}' 具有 (或正在使用) 來自外部模組 '{2}' 的名稱 '{1}',但無法予以命名。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "存取子的參數 '{0}' 具有 (或正在使用) 來自私人模組 '{2}' 的名稱 '{1}'。", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "存取子的參數 '{0}' 具有 (或正在使用) 私人名稱 '{1}'。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "匯出類別中建構函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "匯出類別中建構函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "匯出類別中建構函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "匯出函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "匯出函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "匯出函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "匯出介面的索引簽章參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "匯出介面的索引簽章參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "匯出介面中方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "匯出介面中方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "匯出類別中公用方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "匯出類別中公用方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "匯出類別中公用方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_cannot_have_question_mark_and_initializer_1015": "參數不得有問號及初始設定式。", + "Parameter_declaration_expected_1138": "必須是參數宣告。", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "參數具有名稱但沒有類型。您是指 '{0}: {1}' 嗎?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "參數修飾元只可用於 TypeScript 檔案中。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "參數必須有具備 --isolatedDeclarations 的明確類型註釋。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "匯出類別中公用 setter '{0}' 的參數類型具有或是正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "匯出類別中公用 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "在 strict 模式中進行剖析,並為每個來源檔案發出 \"use strict\"。", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json 中的部分 'files' 清單", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式 '{0}' 最多只可有一個 '*' 字元。", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "在此工作階段中無法使用 '--diagnostics ' 或 '--extendedDiagnostics ' 的效能計時。找不到 Web 效能 API 的原生實作。", + "Platform_specific_6912": "平台特定", + "Prefix_0_with_an_underscore_90025": "具有底線的前置詞 '{0}'", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "在所有不正確屬性宣告的開頭放置 'declare'", + "Prefix_all_unused_declarations_with_where_possible_95025": "若可行,為所有未使用的宣告加上前置詞 '_'", + "Prefix_with_declare_95094": "以 'declare' 開頭", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "保留 JavaScript 輸出中未使用的匯入值,否則將予以移除。", + "Print_all_of_the_files_read_during_the_compilation_6653": "列印在編譯期間讀取的所有檔案。", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "列印在編譯期間讀取的檔案,包括其包含的原因。", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "列印檔案名稱,以及檔案屬於編譯的原因。", + "Print_names_of_files_part_of_the_compilation_6155": "列印編譯時檔案部分的名稱。", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "列印屬於編譯一部分的檔案名稱,然後停止處理。", + "Print_names_of_generated_files_part_of_the_compilation_6154": "列印編譯時所產生之檔案部分的名稱。", + "Print_the_compiler_s_version_6019": "列印編譯器的版本。", + "Print_the_final_configuration_instead_of_building_1350": "列印而非建置最終組態。", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "在編譯後列印已發出檔案的名稱。", + "Print_this_message_6017": "列印這則訊息。", + "Private_accessor_was_defined_without_a_getter_2806": "私人存取子已在不使用 getter 的情況下定義。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "私人欄位 '{0}' 必須在封閉類別中宣告。", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "變數宣告中不允許私人識別碼。", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允許私人識別碼位於類別主體外。", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "私人識別碼只能在類別主體中使用,且只能做為類別成員宣告、屬性存取或 'in' 運算式左側的一部分使用", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "只有當目標為 ECMAScript 2015 及更新版本時,才可使用私人識別碼。", + "Private_identifiers_cannot_be_used_as_parameters_18009": "私人識別碼不可用作為參數。", + "Private_identifiers_cannot_be_used_in_destructuring_patterns_18064": "Private identifiers cannot be used in destructuring patterns.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "無法在型別參數上存取私人或受保護的成員 '{0}'。", + "Project_0_95204": "Project '{0}'", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以無法建置該專案", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "因為未建置專案 '{0}' 的相依性 '{1}',所以無法建置該專案", + "Project_0_is_being_forcibly_rebuilt_6388": "正在強制重建專案 '{0}'", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示檔案 '{2}' 曾經是編譯的根檔案,但已不再是。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 指出程式需要報告錯誤。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "因為 buildinfo 檔案 '{1}' 指出某些變更並未發出,所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示 compilerOptions 中有變更", + "Project_0_is_out_of_date_because_config_file_does_not_exist_6401": "Project '{0}' is out of date because config file does not exist.", + "Project_0_is_out_of_date_because_input_1_does_not_exist_6420": "Project '{0}' is out of date because input '{1}' does not exist.", + "Project_0_is_out_of_date_because_it_has_errors_6423": "Project '{0}' is out of date because it has errors.", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "因為輸出 '{1}' 早於輸入 '{2}',所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "因為輸出檔案 '{1}' 不存在,所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "因為專案 '{0}' 的輸出使用版本 '{1}' 產生而成,與目前的版本 '{2}' 不同,所以該專案已過期", + "Project_0_is_up_to_date_6361": "專案 '{0}' 為最新狀態", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "因為最新的輸入 '{1}' 早於最舊的輸出 '{2}',所以專案 '{0}' 為最新狀態", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "專案 '{0}' 為最新狀態,但需要更新比輸入檔案還舊的輸出檔案時間戳記", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "專案 '{0}' 為最新狀態,且有來自其相依性的 .d.ts 檔案", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "專案參考不會形成循環圖。但偵測到循環: {0}", + "Projects_6255": "專案", + "Projects_in_this_build_Colon_0_6355": "此組建中的專案: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "只有以 ECMAScript 2015 及更新版本為目標時,才可使用具有 'accessor' 修飾詞的屬性。", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "屬性 '{0}' 已標記為抽象,因此不得有初始設定式。", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "屬性 '{0}' 來自索引簽章,因此必須使用 ['{0}'] 存取。", + "Property_0_does_not_exist_on_type_1_2339": "類型 '{1}' 沒有屬性 '{0}'。", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "類型 '{1}' 沒有屬性 '{0}'。您指的是 '{2}' 嗎?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "屬性 '{0}' 不存在於類型 '{1}' 上。您要存取的是靜態成員 '{2}' 嗎?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "類型 '{1}' 沒有屬性 '{0}'。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為 '{2}' 或更新版本。", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "屬性 '{0}' 不存在於類型 '{1}' 上。嘗試將 'lib' 編譯器選項變更為包含 'dom'。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "屬性 '{0}' 沒有初始設定式,且未在類別靜態區塊中明確指派。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "屬性 '{0}' 沒有初始設定式,且未在建構函式中明確指派。", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "因為屬性 '{0}' 的 get 存取子沒有傳回類型註釋,致使該屬性意味著類型 'any'。", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "因為屬性 '{0}' 的 set 存取子沒有參數類型註釋,致使該屬性意味著類型 'any'。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 get 存取子的類型。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 set 存取子的類型。", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "類型 '{1}' 中的屬性 '{0}' 無法指派給基底類型 '{2}' 中的相同屬性。", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "不得將類型 '{1}' 的屬性 '{0}' 指派給類型 '{2}'。", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "類型 '{1}' 中的屬性 '{0}' 是無法從類型 '{2}' 中存取的其他成員。", + "Property_0_is_declared_but_its_value_is_never_read_6138": "屬性 '{0}' 已宣告但從未讀取其值。", + "Property_0_is_incompatible_with_index_signature_2530": "屬性 '{0}' 和索引簽章不相容。", + "Property_0_is_missing_in_type_1_2324": "類型 '{1}' 遺漏屬性 '{0}'。", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "類型 '{1}' 缺少屬性 '{0}',但類型 '{2}' 必須有該屬性。", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "因為屬性 '{0}' 具有私人識別碼,所以無法在類別 '{1}' 外存取該屬性。", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "在類型 '{1}' 中,'{0}' 是選擇性屬性,但在類型 '{2}' 中則為必要屬性。", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 是私用屬性,只可從類別 '{1}' 中存取。", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "在類型 '{1}' 中,'{0}' 是私用屬性,但在類型 '{2}' 中不是。", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "屬性 '{0}' 已受到保護,只能透過類別 '{1}' 的執行個體加以存取。這是類別 '{2}' 的執行個體。", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 是受保護屬性,只可從類別 '{1}' 及其子類別中存取。", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 是受保護屬性,但類型 '{1}' 不是衍生自 '{2}' 的類別。", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "在類型 '{1}' 中,'{0}' 是受保護屬性,但在類型 '{2}' 中是公用屬性。", + "Property_0_is_used_before_being_assigned_2565": "屬性 '{0}' 已在指派之前使用。", + "Property_0_is_used_before_its_initialization_2729": "將屬性 '{0}' 初始化前已使用該屬性。", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "類型 '{1}' 可能不存在屬性 '{0}'。您指的是 '{2}' 嗎?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 擴張屬性 (Attribute) 的屬性 (Property) '{0}' 不可指派給目標屬性 (Property)。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "匯出之匿名類別類型的屬性 '{0}' 不可為私人或受保護的。", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "匯出介面的屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "匯出介面的屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給 '{2}' 索引類型 '{3}'。", + "Property_0_was_also_declared_here_2733": "屬性 '{0}' 也已定義於此處。", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "屬性 '{0}' 將會覆寫 '{1}' 中的基底屬性。如果是故意覆寫的,請新增初始設定式。否則,請新增 'declare' 修飾元或移除多餘的宣告。", + "Property_assignment_expected_1136": "必須是屬性指派。", + "Property_destructuring_pattern_expected_1180": "必須是屬性解構模式。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "屬性必須有具備 --isolatedDeclarations 的明確類型註釋。", + "Property_or_signature_expected_1131": "必須是屬性或簽章。", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "屬性值僅能為字串常值、數值常值、'true'、'false'、'null'、物件常值或陣列常值。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "當目標為 'ES5' 時,為 'for-of'、擴張及解構中的可疊代物件提供完整的支援。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "匯出類別的公用方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "匯出類別的公用方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "匯出類別的公用方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "匯出類別的公用屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "匯出類別的公用屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "匯出類別的公用屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "匯出類別的公用靜態方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "匯出類別的公用靜態方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "匯出類別的公用靜態方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "匯出類別的公用靜態屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "限定名稱 '{0}' 必須以 '@param {object} {1}' 開頭。", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "當函式參數未讀取時引發錯誤。", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "當運算式及宣告包含隱含的 'any' 類型時顯示錯誤。", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "對具有隱含 'any' 類型的 'this' 運算式引發錯誤。", + "Range_out_of_order_in_character_class_1517": "字元類別中的範圍失序。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "啟用 '{0}' 時重新匯出類型需要使用 'export type'。", + "React_components_cannot_include_JSX_namespace_names_2639": "React 元件不得包含 JSX 命名空間名稱", + "Recommended_Options_6294": "建議選項", + "Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "減少 TypeScript 自動載入的專案數目。", + "Referenced_project_0_may_not_disable_emit_6310": "參考的專案 '{0}' 不得停用發出。", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。", + "Referenced_via_0_from_file_1_1400": "透過 '{0}' 從檔案 '{1}' 參考", + "Regular_expression_pattern_modifiers_are_only_available_when_targeting_0_or_later_18062": "Regular expression pattern modifiers are only available when targeting '{0}' or later.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。建議為匯入路徑新增副檔名。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。您是指 '{0}' 嗎?", + "Remove_Unused_Imports_95207": "Remove Unused Imports", + "Remove_a_list_of_directories_from_the_watch_process_6628": "從監看處理序移除目錄清單。", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "從監視模式的處理移除檔案清單。", + "Remove_all_unnecessary_override_modifiers_95163": "移除所有不必要的 'override' 修飾元", + "Remove_all_unnecessary_uses_of_await_95087": "移除所有不必要的 'await' 使用方式", + "Remove_all_unreachable_code_95051": "移除所有無法連線的程式碼", + "Remove_all_unused_labels_95054": "移除所有未使用的標籤", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "從具有相關問題的所有箭號函式主體中移除大括號", + "Remove_braces_from_arrow_function_95060": "從箭號函式移除大括號", + "Remove_braces_from_arrow_function_body_95112": "從箭號函式主體中移除大括號", + "Remove_import_from_0_90005": "從 '{0}' 移除匯入", + "Remove_override_modifier_95161": "移除 'override' 修飾元", + "Remove_parentheses_95126": "移除括弧", + "Remove_template_tag_90011": "移除範本標籤", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "移除 TypeScript 語言伺服器中 JavaScript 檔案的總原始程式碼大小 20mb 上限。", + "Remove_type_from_import_declaration_from_0_90055": "從 \"{0}\" 移除匯入宣告中的 'type'", + "Remove_type_from_import_of_0_from_1_90056": "從 \"{1}\" 移除匯入 '{0}' 中的 'type'", + "Remove_type_parameters_90012": "移除型別參數", + "Remove_unnecessary_await_95086": "移除不必要的 'await'", + "Remove_unreachable_code_95050": "移除無法連線的程式碼", + "Remove_unused_declaration_for_Colon_0_90004": "移除下列項目未使用的宣告: '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "移除 '{0}' 未使用的宣告", + "Remove_unused_destructuring_declaration_90039": "移除未使用的解構宣告", + "Remove_unused_label_95053": "移除未使用的標籤", + "Remove_variable_statement_90010": "移除變數陳述式", + "Rename_param_tag_name_0_to_1_95173": "將 '@param' 標籤名稱 '{0}' 重新命名為'{1}'", + "Replace_0_with_Promise_1_90036": "將 '{0}' 取代為 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "以 'unknown' 取代所有未使用的 'infer'", + "Replace_import_with_0_95015": "以 '{0}' 取代匯入。", + "Replace_infer_0_with_unknown_90030": "以 'unknown' 取代 'infer {0}'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "當函式中的部分程式碼路徑並未傳回值時回報錯誤。", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "回報 switch 陳述式內 fallthrough 案例的錯誤。", + "Report_errors_in_js_files_8019": "報告 .js 檔案中的錯誤。", + "Report_errors_on_unused_locals_6134": "回報未使用之區域變數的錯誤。", + "Report_errors_on_unused_parameters_6135": "回報未使用之參數的錯誤。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "匯出時需要足夠的註釋,讓其他工具可以簡單地產生宣告檔案。", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "需要來自索引簽章的未宣告屬性,才能使用元素存取。", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必要型別參數可能未遵循選擇性型別參數。", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "從位置 '{1}' 的快取中找到模組 '{0}' 的解析。", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "從位置 '{0}' 的快取記憶體找到類型參照指示詞 '{1}'。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相對名稱失敗; 嘗試停用新式節點解析功能,以查看 npm 程式庫是否需要更新設定。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相對名稱失敗; 嘗試使用 '--moduleResolution bundler' 查看專案是否可能需要更新設定。", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只將 'keyof' 解析為字串值的屬性名稱 (無任何數字或符號)。", + "Resolved_under_condition_0_6414": "已在條件 '{0}' 下解析。", + "Resolving_in_0_mode_with_conditions_1_6402": "正在以條件 {1} 在 {0} 模式中解析。", + "Resolving_module_0_from_1_6086": "======== 正在從 '{1}' 解析模組 '{0}'。========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在解析與基底 URL '{1}' 相對的模組名稱 '{0}' - '{2}'。", + "Resolving_real_path_for_0_result_1_6130": "正在解析 '{0}' 的真實路徑,結果 '{1}'。", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}'。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',根目錄 '{2}'。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',未設定根目錄。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,根目錄 '{1}'。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,未設定根目錄。 ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自訂 typeRoots 程式的類型參考指示詞,並跳過 'node_modules' 資料夾中的查詢。", + "Resolving_with_primary_search_path_0_6121": "正在解析主要搜尋路徑 '{0}'。", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "剩餘參數 '{0}' 隱含了 'any[]' 類型。", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "其餘參數 '{0}' 隱含 'any[]' 類型,但可從使用方式推斷更適合的類型。", + "Rest_types_may_only_be_created_from_object_types_2700": "Rest 類型只能從物件類型建立。", + "Return_type_annotation_circularly_references_itself_2577": "傳回型別註解會循環參考自身。", + "Return_type_must_be_inferred_from_a_function_95149": "必須從函式推斷傳回型別", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "匯出介面中呼叫簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "匯出介面中呼叫簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "匯出介面中建構函式簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "匯出介面中建構函式簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "建構函式簽章的傳回類型必須能夠指派給類別的執行個體類型。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "匯出函式的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "匯出函式的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "匯出函式的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "匯出介面中索引簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "匯出介面中索引簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "匯出介面中方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "匯出介面中方法的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用模組 {2} 中的名稱 '{1}'。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "匯出類別中公用方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "匯出類別中公用方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "匯出類別中公用方法的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "匯出類別中公用靜態方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "匯出類別中公用靜態方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "匯出類別中公用靜態方法的傳回型別具有或使用私用名稱 '{0}'。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{3}'。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{2}'。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{3}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{2}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", + "Rewrite_all_as_indexed_access_types_95034": "將全部重寫為經過編製索引的存取類型", + "Rewrite_as_the_indexed_access_type_0_90026": "重寫為索引存取類型 '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "將相對匯入路徑中的 '.ts'、'.tsx'、'.mts'、'.cts' 檔案副檔名重寫為輸出檔案中的 JavaScript 對應檔名。", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? 的右運算元無法連線,因為左運算元永遠不會是 nullish。", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "無法判斷根目錄,將略過主要搜尋路徑。", + "Root_file_specified_for_compilation_1427": "為編譯指定的根檔案", + "Run_in_single_threaded_mode_6934": "Run in single threaded mode.", + "STRATEGY_6039": "策略", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "儲存 .tsbuildinfo 檔案,以允許對專案進行累加編譯。", + "Saw_non_matching_condition_0_6405": "儲存不相符條件 '{0}'。", + "Scoped_package_detected_looking_in_0_6182": "偵測到範圍套件,正於 '{0}' 尋找", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜尋所有上階 node_modules 目錄,以取得後援延伸模組: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜尋所有上階 node_modules 目錄,以取得慣用延伸模組: {0}。", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "另請參閱 https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "選取項目非有效的一或多個陳述式", + "Selection_is_not_a_valid_type_node_95133": "選取範圍不是有效的類型節點", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "為發出的 JavaScript 設定 JavaScript 語言版本,並包含相容的程式庫宣告。", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "設定來自 TypeScript 的訊息語言。這不會影響發出。", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "將組態檔中的 'module' 選項設定為 '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "設定發出檔案的新行字元。", + "Set_the_number_of_checkers_per_project_6936": "Set the number of checkers per project.", + "Set_the_number_of_projects_to_build_concurrently_6938": "Set the number of projects to build concurrently.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "將組態檔中的 'target' 選項設定為 '{0}'", + "Setters_cannot_return_a_value_2408": "setter 無法傳回值。", + "Show_all_compiler_options_6169": "顯示所有的編譯器選項。", + "Show_diagnostic_information_6149": "顯示診斷資訊。", + "Show_verbose_diagnostic_information_6150": "顯示詳細診斷資訊。", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "顯示將會建置 (或刪除 - 若是指定有 '--clean') 的內容", + "Signature_0_must_be_a_type_predicate_1224": "簽章 '{0}' 必須是型別述詞。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "簽章宣告僅能在 TypeScript 檔案中使用。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "上游專案發生錯誤時,略過建置下游專案。", + "Skip_type_checking_all_d_ts_files_6693": "略過所有 .d.ts 檔案的型別檢查。", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "略過 TypeScript 中包含 .d.ts 檔案的型別檢查。", + "Skip_type_checking_of_declaration_files_6012": "跳過宣告檔案的類型檢查。", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以跳過建置該專案", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "因為未建置專案 '{0}' 的相依性 '{1}',所以正在跳過該專案的組建", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳過看起來像絕對 URI 的模組 '{0}',目標檔案類型: {1}。", + "Sort_Imports_95208": "Sort Imports", + "Source_from_referenced_project_0_included_because_1_specified_1414": "因為指定了 '{1}',所以包含參考的專案 '{0}' 來源", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 來源", + "Source_has_0_element_s_but_target_allows_only_1_2619": "來源具有 {0} 個元素,但目標只允許 {1} 個。", + "Source_has_0_element_s_but_target_requires_1_2618": "來源有 {0} 個元素,但目標需要 {1} 個。", + "Source_phase_imports_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_18115": "Source phase imports are not allowed on statements that compile to CommonJS 'require' calls.", + "Source_phase_imports_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_18113": "Source phase imports are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "來源未針對目標中位於 {0} 的必要元素提供相符項目。", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "來源未針對目標中位於 {0} 的可變元素提供相符項目。", + "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目標版本。", + "Specify_JSX_code_generation_6080": "指定 JSX 程式碼產生。", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定將所有輸出組合成一個 JavaScript 檔案的檔案。如果 'declaration' 為 True,則也會指定組合所有 .d.ts 輸出的檔案。", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定符合編譯中要包含之檔案的 glob 模式清單。", + "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包含的語言服務外掛程式清單。", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一組描述目標執行階段環境的配套程式庫宣告檔案。", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一組將匯入重新對應至其他查閱位置的項目。", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定為專案指定路徑的物件陣列。用於專案參考。", + "Specify_an_output_folder_for_all_emitted_files_6678": "指定所有發出檔案的輸出檔案夾。", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定僅用於類型之匯入的發出/檢查行為。", + "Specify_file_to_store_incremental_compilation_information_6380": "指定要儲存累加編譯資訊的檔案", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 從指定的模組指定名稱查詢檔案的方式。", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少遞迴檔案監視功能之系統上如何監視目錄。", + "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 監看式模式的運作方式。", + "Specify_library_files_to_be_included_in_the_compilation_6079": "請指定要併入編譯中的程式庫檔案。", + "Specify_module_code_generation_6016": "指定模組程式碼產生。", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 'jsx: react-jsx*' 時,用來匯入 JSX Factory 函式的模組指定名稱。", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多個資料夾,其作用類似 './node_modules/@types'。", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定一或多個路徑或節點模組參考至繼承設定的基礎設定檔。", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用於自動擷取宣告檔案的選項。", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定當輪詢監看無法使用下列檔案系統事件建立時,加以建立的策略: 'FixedInterval' (預設)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在未原生支援遞迴監看的平台上,監看目錄的策略: 'UseFsEvents' (預設)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定監看檔案的策略: 'FixedPollingInterval' (預設)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定要在以 React JSX 發出為目標時使用於片段的 JSX 片段參考,例如 'React.Fragment' 或 'Fragment'。", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "請指定要在以 'react' JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "請指定要在以 React JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "當指定以 'jsxFactory' 編譯器選項設定 'react' JSX 輸出的目標時,請指定要使用的 JSX 片段處理站函式,例如 'Fragment'。", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基礎目錄來解析非相對的模組名稱。", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定發出檔案時要用的行尾順序: 'CRLF' (DOS) 或 'LF' (UNIX)。", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定偵錯工具尋找 TypeScript 檔案的位置,而非原始檔位置。", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定偵錯工具尋找對應檔的位置,而非產生的位置。", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用來檢查來自 'node_modules' 之 JavaScript 檔案的資料夾深度上限。僅適用於 'allowJs'。", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定用於匯入 `jsx` 與 `jsxs` 工廠函式的模組指定名稱。例如,傳送表情符號", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定 'createElement' 叫用的物件。這僅適用於在以 'react' JSX 發出為目標時。", + "Specify_the_output_directory_for_generated_declaration_files_6613": "指定產生的宣告檔案的輸出目錄。", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "指定 .tsbuildinfo 累加編譯檔案的路徑。", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定輸入檔的根目錄。用以控制具有 --outDir 的輸出目錄結構。", + "Specify_the_root_folder_within_your_source_files_6690": "指定來源檔案內的根資料夾。", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定偵錯工具尋找參考原始程式碼的根路徑。", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的類型封裝名稱,而不在來源檔案中參考。", + "Specify_what_JSX_code_is_generated_6646": "指定要產生的 JSX 程式碼。", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定當系統用盡原生檔案監控程式時,監控程式應使用的方法。", + "Specify_what_module_code_is_generated_6657": "指定要產生的模組程式碼。", + "Split_all_invalid_type_only_imports_1367": "分割所有無效的僅限類型匯入", + "Split_into_two_separate_import_declarations_1366": "分割為兩個獨立的匯入宣告", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "只有當目標為 ECMAScript 5 及更高版本時,才可使用 'new' 運算式中的擴張運算子。", + "Spread_types_may_only_be_created_from_object_types_2698": "Spread 類型只能從物件類型建立。", + "Starting_compilation_in_watch_mode_6031": "在監看模式中開始編譯...", + "Statement_expected_1129": "必須是陳述式。", + "Statements_are_not_allowed_in_ambient_contexts_1036": "環境內容中不得有陳述式。", + "Static_members_cannot_reference_class_type_parameters_2302": "靜態成員不得參考類別類型參數。", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "靜態屬性 '{0}' 與建構函式 '{1}' 的內建屬性 'Function.{0}' 相衝突。", + "Stricter_Typechecking_Options_6292": "更嚴格的類型檢查選項", + "String_literal_expected_1141": "必須是字串常值。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "當 '--module' 旗標設定為 'es2015' 或 'es2020' 時,不支援字串常值匯入和匯出名稱。", + "String_literal_with_double_quotes_expected_1327": "應有具雙引號的字串常值。", + "Style_Options_6293": "樣式選項", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用色彩及內容來設計錯誤與訊息的風格 (實驗)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "當有減號時,必須有子模式旗標。", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後續的屬性宣告必須具有相同的類型。屬性 '{0}' 的類型必須是 '{1}',但此處卻是類型 '{2}'。", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後續的變數宣告必須具有相同的類型。變數 '{0}' 的類型必須是 '{1}' 但卻是 '{2}'。", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式 '{1}' 的替代 '{0}' 類型不正確,必須為 'string',但得到 '{2}'。", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "模式 '{1}' 中的替代 '{0}' 最多可有一個 '*' 字元。", + "Substitutions_for_pattern_0_should_be_an_array_5063": "模式 '{0}' 的替代應為陣列。", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "模式 '{0}' 的替代項目不應為空陣列。", + "Successfully_created_a_tsconfig_json_file_6071": "已成功建立 tsconfig.json 檔案。", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "建構函式外部或建構函式內的巢狀函式中不允許 super 呼叫。", + "Supplemental_virtual_file_produced_by_the_content_mapper_for_file_0_18097": "Supplemental virtual file produced by the content mapper for file '{0}'.", + "Suppress_excess_property_checks_for_object_literals_6072": "不對物件常值進行多餘的屬性檢查。", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "針對缺少索引簽章的索引物件隱藏 noImplicitAny 錯誤。", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "針對缺少索引簽章的物件編製索引時,隱藏 'noImplicitAny' 錯誤。", + "Switch_each_misused_0_to_1_95138": "將每個誤用的 '{0}' 切換成 '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支援原生遞迴監視之平台上,同步呼叫回呼並更新目錄監控程式的狀態。", + "Syntax_Colon_0_6023": "語法: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "標籤 '{0}' 至少需要 '{1}' 個引數,但 JSX factory '{2}' 最多只提供 '{3}' 個。", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "選擇性鏈結中不允許已標記的範本運算式。", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目標只允許 {0} 個元素,但來源的元素可能較多。", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目標需要 {0} 個元素,但來源的元素可能較少。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目標特徵標記提供的引數過少。應有 {0} 個或更多,但只取得 {1} 個。", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾元只可用於 TypeScript 檔案中。", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "無法將 '{0}' 運算子套用至類型 'symbol'。", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "布林類型不允許有 '{0}' 運算子。請考慮改用 '{1}'。", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同步迭代器的 '{0}' 屬性必須為方法。", + "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 '{0}' 屬性必須為方法。", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 類型可指派給極少數的其他類型。要改用 'any' 類型嗎?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "無法同時設定 Unicode (u) 旗標和 Unicode Sets (v) 旗標。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "在 ES5 中,箭號函式內無法參考 'arguments' 物件。建議使用標準函式運算式。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "在 ES5 中,非同步函式或方法無法參考 'arguments' 物件。建議使用標準函式或方法。", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 陳述式的主體不能是空白陳述式。", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "對此實作的呼叫會成功,但多載的實作簽章未向外部顯示。", + "The_character_set_of_the_input_files_6163": "輸入檔的字元集。", + "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011": "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含的箭號函式會擷取 'this' 的全域值。", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "內含的函式或模組主體對控制流程分析而言過大。", + "The_content_mapper_0_could_not_be_initialized_18099": "The content mapper '{0}' could not be initialized.", + "The_content_mapper_0_did_not_provide_the_required_position_mappings_18071": "The content mapper '{0}' did not provide the required position mappings.", + "The_content_mapper_0_failed_1_times_and_will_not_be_used_18070": "The content mapper '{0}' failed {1} times and will not be used.", + "The_content_mapper_0_failed_to_transform_this_file_18069": "The content mapper '{0}' failed to transform this file.", + "The_content_mapper_0_produced_a_position_mapping_that_points_outside_the_original_content_original_o_18072": "The content mapper '{0}' produced a position mapping that points outside the original content (original offset {1}).", + "The_content_mapper_0_produced_a_position_mapping_with_an_invalid_kind_near_virtual_offset_1_18083": "The content mapper '{0}' produced a position mapping with an invalid kind (near virtual offset {1}).", + "The_content_mapper_0_produced_a_verbatim_mapping_that_does_not_match_the_original_content_virtual_of_18073": "The content mapper '{0}' produced a verbatim mapping that does not match the original content (virtual offset {1}, original offset {2}).", + "The_content_mapper_0_produced_invalid_mapping_features_near_original_offset_1_18082": "The content mapper '{0}' produced invalid mapping features near original offset {1}.", + "The_content_mapper_0_produced_overlapping_or_out_of_order_position_mappings_near_virtual_offset_1_18081": "The content mapper '{0}' produced overlapping or out-of-order position mappings (near virtual offset {1}).", + "The_content_mapper_command_0_could_not_be_started_Colon_1_18100": "The content mapper command '{0}' could not be started: {1}", + "The_content_mapper_diagnostic_source_0_is_reserved_by_TypeScript_18089": "The content mapper diagnostic source '{0}' is reserved by TypeScript.", + "The_content_mapper_diagnostic_source_must_not_be_empty_18088": "The content mapper diagnostic source must not be empty.", + "The_content_mapper_did_not_respond_to_the_initialize_request_within_0_seconds_18102": "The content mapper did not respond to the 'initialize' request within {0} seconds.", + "The_content_mapper_did_not_return_configIdentity_which_is_required_when_the_content_mapper_has_dynam_18092": "The content mapper did not return 'configIdentity', which is required when the content mapper has '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_package_0_could_not_be_resolved_18075": "The content mapper package '{0}' could not be resolved.", + "The_content_mapper_process_could_not_be_started_or_initialized_18084": "The content mapper process could not be started or initialized.", + "The_content_mapper_process_exited_before_responding_to_the_initialize_request_exit_code_0_18101": "The content mapper process exited before responding to the 'initialize' request (exit code {0}).", + "The_content_mapper_process_failed_while_handling_the_project_request_18091": "The content mapper process failed while handling the project request.", + "The_content_mapper_process_failed_while_handling_the_transform_request_18085": "The content mapper process failed while handling the transform request.", + "The_content_mapper_returned_a_diagnostic_directive_with_invalid_policy_0_18106": "The content mapper returned a diagnostic directive with invalid policy '{0}'.", + "The_content_mapper_returned_a_non_absolute_path_in_watchedFiles_18093": "The content mapper returned a non-absolute path in 'watchedFiles'.", + "The_content_mapper_returned_a_project_response_that_could_not_be_decoded_18090": "The content mapper returned a project response that could not be decoded.", + "The_content_mapper_returned_an_initialize_response_that_could_not_be_decoded_Colon_0_18103": "The content mapper returned an 'initialize' response that could not be decoded: {0}", + "The_content_mapper_returned_an_invalid_transform_response_18086": "The content mapper returned an invalid transform response.", + "The_content_mapper_returned_an_output_with_unsupported_virtual_extension_0_18098": "The content mapper returned an output with unsupported virtual extension '{0}'.", + "The_content_mapper_returned_configIdentity_which_is_only_allowed_when_it_declares_dynamicConfig_Colo_18094": "The content mapper returned 'configIdentity', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_returned_diagnostic_directives_with_overlapping_virtual_ranges_18108": "The content mapper returned diagnostic directives with overlapping virtual ranges.", + "The_content_mapper_returned_watchedFiles_which_is_only_allowed_when_it_declares_dynamicConfig_Colon__18095": "The content mapper returned 'watchedFiles', which is only allowed when it declares '\"dynamicConfig\": true' in its package.json.", + "The_content_mapper_s_initialize_request_failed_Colon_0_18104": "The content mapper's 'initialize' request failed: {0}", + "The_content_mapper_selected_unsupported_position_encoding_0_18087": "The content mapper selected unsupported position encoding '{0}'.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "目前的檔案是 CommonJS 模組,無法在最上層使用 'await'。", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "目前的檔案是 CommonJS 模組,其匯入將會產生 'require' 呼叫;不過,參考的檔案是 ECMAScript 模組,無法以 'require' 匯入。請考慮改為撰寫動態 'import(\"{0}\")' 呼叫。", + "The_current_host_does_not_support_the_0_option_5001": "目前的主機不支援 '{0}' 選項。", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "您可能要使用的 '{0}' 宣告定義於此處", + "The_declaration_was_marked_as_deprecated_here_2798": "該宣告在這裡標示為已淘汰。", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需類型來自屬性 '{0}',該屬性宣告於此處的類型 '{1}' 上", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需類型來自此簽章的傳回型別。", + "The_expected_type_comes_from_this_index_signature_6501": "所需類型來自此索引簽章。", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "匯出指派的運算式必須是環境內容中的識別碼或完整名稱。", + "The_file_is_in_the_program_because_Colon_1430": "檔案在程式中,因為:", + "The_files_list_in_config_file_0_is_empty_18002": "設定檔 '{0}' 中的 'files' 清單是空的。", + "The_first_export_default_is_here_2752": "第一個匯出預設位於此處。", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise 的 'then' 方法第一個參數必須為回撥。", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "全域類型 'JSX.{0}' 的屬性不得超過一個。", + "The_implementation_signature_is_declared_here_2750": "實作簽章宣告於此處。", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "將會組建至 CommonJS 輸出的檔案中不允許 'import.meta' 中繼屬性。", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "只有當 '--module' 選項為 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 時,才允許 'import.meta' 中繼屬性。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' 的推斷類型無法在沒有 '{1}' 參考的情況下命名。其可能非可攜式。必須有型別註解。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883": "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' 的推斷型別參考了具有迴圈結構且不是可完整序列化的型別。必須有型別註解。", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' 的推斷型別參考了無法存取的 '{1}' 型別。必須有型別註解。", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此節點的推斷型別超過編譯器將序列化的長度上限。需要明確的型別註解。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣告的初始設定式必須是具備 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣告的初始設定式必須是具備 '[Symbol.asyncDispose]()' 方法或 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "因為屬性 '{1}' 存在於多個部分,而且在某些部分為私人性質,所以交集 '{0}' 已縮減為 'never'。", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "因為屬性 '{1}' 在某些部分有衝突的類型,所以交集 '{0}' 已縮減為 'never'。", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' 關鍵字只可用於宣告編譯器提供的內建類型。", + "The_invalid_diagnostic_directive_is_in_supplemental_output_0_returned_by_the_content_mapper_18109": "The invalid diagnostic directive is in supplemental output {0} returned by the content mapper.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "必須提供 'jsxFragmentFactory' 編譯器選項,才能使用具有 'jsxFactory' 編譯器選項的 JSX 片段。", + "The_last_overload_gave_the_following_error_2770": "最後一個多載出現下列錯誤。", + "The_last_overload_is_declared_here_2771": "最後一個多載宣告於此處。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 陳述式的左側不得為解構模式。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' 陳述式左側不可為 'using' 宣告。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' 陳述式左側不可為 'await using' 宣告。", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 陳述式左側不得使用類型註釋。", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 陳述式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 陳述式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 陳述式的左側必須是類型 'string' 或 'any'。", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 陳述式的左側不得使用類型註釋。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 陳述式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 陳述式的左側不可為 'async'。", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 陳述式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術運算的左側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "指派運算式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "指派運算式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 運算式的左側必須可指派至右側 '[Symbol.hasInstance]' 方法的第一個引數。", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 運算式左側必須是類型 'any'、物件類型或型別參數。", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "對使用者顯示訊息時所使用的地區設定 (例如 'zh-tw')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "在 node_modules 及載入 JavaScript 檔案下搜尋時的最大相依性深度。", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 運算子的運算元不可為私人識別碼。", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 運算子的運算元不可為唯讀屬性。", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 運算子的運算元必須為屬性參考。", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 運算子的運算元必須是非必須。", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "遞增或遞減運算子的運算元不可為選擇性屬性存取。", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "遞增或遞減運算子的運算元必須是變數或屬性存取。", + "The_package_json_of_the_content_mapper_package_0_could_not_be_parsed_18076": "The 'package.json' of the content mapper package '{0}' could not be parsed.", + "The_package_json_of_the_content_mapper_package_0_does_not_declare_a_typescript_contentMapper_object_18078": "The 'package.json' of the content mapper package '{0}' does not declare a 'typescript.contentMapper' object.", + "The_package_json_of_the_content_mapper_package_0_does_not_specify_a_name_18077": "The 'package.json' of the content mapper package '{0}' does not specify a 'name'.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "剖析器需要找到 '{1}',以對應此處的 '{0}' 權杖。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "專案根目錄模棱兩可,但需要用以解決檔案 '{1}' 中的匯出對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "專案根目錄模稜兩可,但需要在檔案 '{1}' 中解析匯入對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "無法在此類別內的類型 '{1}' 上存取屬性 '{0}',原因是另一個拼字相同的私人識別碼已將其陰影。", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "參數裝飾項目函式的傳回型別必須是 'void' 或 'any'。", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "屬性裝飾項目函式的傳回型別必須是 'void' 或 'any'。", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同步函式的傳回型別必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同步函式或方法的傳回類型必須為全域 Promise 類型。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同步函式或方法的傳回型別,必須為全域 Promise 類型。是否要寫入 'Promise<{0}>'?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 陳述式的右方必須是類型 'any'、物件類型或型別參數,但此處為類型 '{0}'。", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術運算的右側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 運算式右側必須為 'any' 類型、類別、函式或其他可指派至 'Function' 介面型別的型別,或是具備 'Symbol.hasInstance' 方法的物件類型。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 運算式右側不可為具現化運算式。", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 檔案的根值必須是物件。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目需要 {0} 個。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目至少需要 {0} 個。", + "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' 的隱蔽宣告定義於此處", + "The_signature_0_of_1_is_deprecated_6387": "'{1}' 的特徵標記 '{0}' 已淘汰。", + "The_specified_path_does_not_exist_Colon_0_5058": "指定的路徑不存在: '{0}'。", + "The_tag_was_first_specified_here_8034": "此標籤第一次指定於此處。", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "物件其餘指派的目標不可為選擇性屬性存取。", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "物件剩餘指派的目標必須為變數或屬性存取。", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "類型 '{0}' 的 'this' 內容無法指派給方法之類型 '{1}' 的 'this'。", + "The_this_types_of_each_signature_are_incompatible_2685": "各個簽章的 'this' 類型不相容。", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "類型 '{0}' 為 'readonly',因此無法指派給可變動的類型 '{1}'。", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "[類型修飾元] 無法在 [匯出類型] 於其匯出陳述式上使用時,在命名的匯出上使用。", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "[類型修飾元] 無法在 [匯入類型] 於其匯入陳述式上使用時,在命名的匯入上使用。", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "無法將此節點的類型序列化,因為無法將其屬性 '{0}' 序列化。", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同步迭代器 '{0}()' 方法所傳回的類型,對具有 'value' 屬性的類型必須為 Promise。", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器 '{0}()' 方法所傳回的類型必須具有 'value' 屬性。", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' 的類型在這些類型之間不相容。", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' 所傳回的類型在這些類型之間不相容。", + "The_typescript_contentMapper_exec_of_the_content_mapper_package_0_must_be_a_non_empty_array_of_strin_18079": "The 'typescript.contentMapper.exec' of the content mapper package '{0}' must be a non-empty array of strings.", + "The_value_0_cannot_be_used_here_18050": "此處無法使用值 '{0}'。", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 陳述式的變數宣告不得有初始設定式。", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 陳述式的變數宣告不得有初始設定式。", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支援 'with' 陳述式。'with' 區塊中的所有符號都會有類型 'any'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' 具有型別,不過在目前的 'moduleResolution' 設定下,無法解析此結果。建議更新為 'node16'、'nodenext' 或 'bundler'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' 具有型別,不過在採用 package.json \"exports\" 的狀態下,無法解析此結果。'{1}' 程式庫可能需要更新其 package.json 或輸入。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此規則運算式中沒有名為 '{0}' 的擷取群組。", + "There_is_nothing_available_for_repetition_1507": "沒有可重複的內容。", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "此 JSX 標籤需要 '{0}' 在範圍內,但無法找到。", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "此 JSX 標籤需要模組路徑 '{0}' 存在,但無法找到。請確定您已安裝適當的套件類型。", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 標籤的 '{0}' 屬性只能有一個 '{1}' 類型的子系,但提供的子系卻有多個。", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 標籤的 '{0}' 屬性需要必須有多個子系的類型 '{1}',但僅提供的子系只有一個。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此反向參考參照的群組不存在。此規則運算式中沒有任何擷取群組。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此反向參考參照的群組不存在。此規則運算式中只有 {0} 個擷取群組。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二進位運算式一律不會是 nullish。是否缺少括弧?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "此字元無法在規則運算式中逸出。", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比較似乎是無意的,因為類型 '{0}' 和 '{1}' 沒有重疊。", + "This_condition_will_always_return_0_2845": "此條件一律傳回 '{0}'。", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此條件一律會傳回 '{0}',因為 JavaScript 會依參照而非值比較物件。", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "因為此 '{0}' 一律會被定義,所以此條件一律傳回 True。", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "因為永遠會定義此函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此建構函式可轉換為類別宣告。", + "This_expression_is_always_nullish_2871": "此運算式一律為 nullish.", + "This_expression_is_never_nullish_2881": "此運算式一律不會是 nullish。", + "This_expression_is_not_callable_2349": "無法呼叫此運算式。", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "因為此運算式為 'get' 存取子,所以無法呼叫。要在沒有 '()' 的情況下,使用該運算式嗎?", + "This_expression_is_not_constructable_2351": "無法建構此運算式。", + "This_file_already_has_a_default_export_95130": "此檔案已有預設匯出", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "重寫此匯入路徑並不安全,因為其解析到另一個專案,而專案輸出檔案之間的相對路徑與其輸入檔案之間的相對路徑不同。", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "這個匯入使用 '{0}' 副檔名來解析到輸入的 TypeScript 檔案,但在發出時不會重寫,因為其不是相對路徑。", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "此宣告正在增加中。請考慮將正在增加的宣告移至相同的檔案中。", + "This_kind_of_expression_is_always_falsy_2873": "此種運算式的值一律為 false。", + "This_kind_of_expression_is_always_truthy_2872": "此種運算式的值一律為 true。", + "This_location_is_in_virtual_code_produced_by_the_content_mapper_0_and_has_no_corresponding_location__18074": "This location is in virtual code produced by the content mapper '{0}' and has no corresponding location in the original file.", + "This_may_be_converted_to_an_async_function_80006": "這可以轉換為非同步函式。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成員不能包含具有 'override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為包含此成員的類別 '{0}' 並未延伸另一個類別。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為其名稱為動態。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "因為此成員並未在基底類別 '{0}' 中宣告,所以其不得具有 'override' 修飾元。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成員不能具有 'override' 修飾元,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "因為此成員包含的類別 '{0}' 並未延伸其他類別,所以其不得具有 'override' 修飾元。", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "此成員的名稱為動態,因此不能有 『override』 修飾元。", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "此成員必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "因為此成員會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "因為此成員會覆寫基底類別 '{0}' 中宣告的抽象方法,所以其必須具有 'override' 修飾元。", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能以 ECMAScript 匯入/匯出來參考此模組,方法為開啟 '{0}' 旗標並參考其預設匯出。", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模組使用 'export =' 宣告,只能在使用 '{0}' 旗標時搭配預設匯入使用。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "此作業可簡化。此班次與 `{0} {1} {2}` 完全相同。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "由於缺少傳回型別註解,故此多載會隱含傳回 '{0}' 型別。", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此多載簽章與其實作簽章不相容。", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "不允許此參數搭配 'use strict' 指示詞使用。", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此參數屬性必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "因為此參數屬性會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "無法在子模式內切換此規則運算式旗標。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "只有以 '{0}' 或更新版本作為目標時,才能使用規則運算式旗標。", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "此相對匯入路徑在重寫時是不安全的,因為其看起來像檔案名稱,但實際上解析為 \"{0}\"。", + "This_spread_always_overwrites_this_property_2785": "此展開會永遠覆寫此屬性。", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "啟用 'erasableSyntaxOnly' 時,不允許使用此語法。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此語法是保留在具有 mts 或 cts 副檔名的檔案中。新增尾端逗號或明確條件約束。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此語法會保留在具有 mts 或 cts 副檔名的檔案中。請改用 `as` 運算式。", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此語法需要已匯入的協助程式,但找不到模組 '{0}'。", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此語法需要名為 '{1}' 的已匯入協助程式,但其不存在於 '{0}' 中。請考慮升級您的 '{0}' 版本。", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此語法需要名為 '{1}' 且具有 {2} 參數的匯入協助程式,其與 '{0}' 中的參數不相容。請考慮升級 '{0}' 的版本。", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "此類型參數可能需要 'extends {0}' 限制式。", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "此 'import' 的使用方式無效。'import()' 呼叫可以寫入,但必須有括弧,而且不能有類型引數。", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "若要將此檔案轉換為 ECMAScript 模組,請將欄位 `{ \"type\": \"module\" }` 新增至 '{0}'。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或將欄位 `\"type\": \"module\"` 新增至 '{1}'。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或使用 `{ \"type\": \"module\" }` 建立本機 package.json 檔案。", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要將此檔案轉換為 ECMAScript 模組,請建立具有 `{ \"type\": \"module\" }` 的本機 package.json 檔案。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "只有當 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',且 'target' 選項設為 'es2017' 或更高版本時,才能在最上層使用 'await using' 陳述式。", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 檔案中的最上層宣告必須以 'declare' 或 'export' 修飾元開頭。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。", + "Trailing_comma_not_allowed_1009": "尾端不得為逗號。", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "以個別模組的形式轉換每個檔案的語言 (類似於 'ts.transpileModule')。", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "如有 `npm i --save-dev @types/{1}`,請嘗試使用,或新增包含 `declare module '{0}';` 的宣告 (.d.ts) 檔案", + "Trying_other_entries_in_rootDirs_6110": "正在嘗試 'rootDirs' 中的其他項目。", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在嘗試替代 '{0}',候選模組位置: '{1}'。", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長度為 '{1}' 的元組類型 '{0}' 在索引 '{2}' 沒有項目。", + "Tuple_type_arguments_circularly_reference_themselves_4110": "元組類型引數會循環參考自身。", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有使用 '--downlevelIteration' 旗標或 'es2015' 或更新版本的 '--target' 時,才能逐一查看類型 '{0}'。", + "Type_0_cannot_be_used_as_an_index_type_2538": "類型 '{0}' 無法作為索引類型。", + "Type_0_cannot_be_used_to_index_type_1_2536": "類型 '{0}' 無法用來為類型 '{1}' 編制索引。", + "Type_0_does_not_satisfy_the_constraint_1_2344": "類型 '{0}' 不符合條件約束 '{1}'。", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "類型 '{0}' 不符合預期類型 '{1}'。", + "Type_0_has_no_call_signatures_2757": "類型 '{0}' 沒有任何呼叫簽章。", + "Type_0_has_no_construct_signatures_2761": "類型 '{0}' 沒有任何建構簽章。", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "類型 '{0}' 沒有與類型 '{1}' 相符的索引簽章。", + "Type_0_has_no_properties_in_common_with_type_1_2559": "類型 '{0}' 與類型 '{1}' 沒有任何共通的屬性。", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "類型 '{0}' 沒有適用類型引數清單的簽章。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "類型 '{0}' 為泛型型別,只能針對讀取編製索引。", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2},以及另外 {3} 個。", + "Type_0_is_not_a_constructor_function_type_2507": "類型 '{0}' 不是建構函式類型。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "在 ES5 中,'{0}' 型別並非有效的非同步傳回型別,因為其不會參考與 Promise 相容的建構函式值。", + "Type_0_is_not_an_array_type_2461": "類型 '{0}' 不是陣列類型。", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "類型 '{0}' 不是陣列類型或字串類型。", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "類型 '{0}' 不是陣列類型或字串類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "類型 '{0}' 不是陣列類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_is_not_assignable_to_type_1_2322": "類型 '{0}' 不可指派給類型 '{1}'。", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "不得將類型 '{0}' 指派給類型 '{1}'。您指的是 '{2}' 嗎?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "無法將類型 '{0}' 指派給類型 '{1}'。有兩種使用此名稱的不同類型存在,但彼此並不相關。", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "無法將型別 '{0}' 指派給型別 '{1}',如變異數註釋所隱含。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "無法將類型 '{0}' 指派給計算之列舉成員值所需的 '{1}'。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標屬性的類型。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標的類型。", + "Type_0_is_not_comparable_to_type_1_2678": "類型 '{0}' 無法和類型 '{1}' 比較。", + "Type_0_is_not_generic_2315": "'{0}' 不是泛型類型。", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "類型 '{0}' 可能代表基本值,但不允許做為 'in' 運算子的右運算元。", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "類型 '{0}' 必須具備會傳回非同步迭代器的 '[Symbol.asyncIterator]()' 方法。", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "類型 '{0}' 必須具備會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_provides_no_match_for_the_signature_1_2658": "類型 '{0}' 沒有符合特徵標記 '{1}' 的項目。", + "Type_0_recursively_references_itself_as_a_base_type_2310": "類型 '{0}' 將自己當做基底類型遞迴參考。", + "Type_Checking_6248": "類型檢查", + "Type_alias_0_circularly_references_itself_2456": "類型別名 '{0}' 會循環參考自己。", + "Type_alias_must_be_given_a_name_1439": "必須為類型別名指定名稱。", + "Type_alias_name_cannot_be_0_2457": "類型別名不得為 '{0}'。", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "類型別名只可用於 TypeScript 檔案中。", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "建構函式宣告不得有類型註釋。", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "型別註解只可用於 TypeScript 檔案中。", + "Type_argument_expected_1140": "必須是型別引數。", + "Type_argument_list_cannot_be_empty_1099": "型別引數清單不得為空白。", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "類型引數只可用於 TypeScript 檔案中。", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' 的類型引數會循環參考自身。", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "類型判斷提示運算式只可用於 TypeScript 檔案中。", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "來源中位於 {0} 的類型與目標中位於 {1} 的類型不相容。", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "來源中位於 {0} 到 {1} 的類型與目標中位於 {2} 的類型不相容。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "型別如包含私人名稱 '{0}',則無法搭配 --isolatedDeclarations 使用。", + "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在編譯內的類型宣告檔案。", + "Type_expected_1110": "必須是類型。", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "輸入匯入判斷提示應該只有一個索引鍵 - 'resolution-mode' - 值為 'import' 或 'require'。", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "從 CommonJS 模組匯入 ECMAScript 模組的類型必須有 'resolution-mode' 屬性。", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "類型具現化過深,可能會有無限深度。", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "類型在其本身 'then' 方法的完成回撥中直接或間接受到參考。", + "Type_library_referenced_via_0_from_file_1_1402": "透過 '{0}' 從檔案 '{1}' 參考的型別程式庫", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "透過 '{0}' 從檔案 '{1}' (packageId 為 '{2}') 參考的型別程式庫", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "已計算屬性值的類型為 '{0}',其無法指派給類型 '{1}'。", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "執行個體成員變數 '{0}' 的類型不得參考建構函式中所宣告的識別碼 '{1}'。", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' 運算元的反覆項目類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "屬性 '{0}' 的類型在對應的類型 '{1}' 中會循環參考自己。", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "非同步產生器中的 'yield' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "從 CommonJS 模組進行僅限類型匯入 ECMAScript 模組時,必須有 'resolution-mode' 屬性。", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "類型源自此匯入。無法呼叫或建構命名空間樣式的匯入,而且可能會在執行階段導致失敗。請考慮改用預設匯入或於此處匯入 require。", + "Type_parameter_0_has_a_circular_constraint_2313": "類型參數 '{0}' 具有循環條件約束。", + "Type_parameter_0_has_a_circular_default_2716": "型別參數 '{0}' 包含循環的預設值。", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "匯出介面中呼叫簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "匯出介面中建構函式簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "匯出類別的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "匯出函式的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "匯出介面的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "已匯出對應物件類型的型別參數 '{0}' 正在使用私人名稱 '{1}'。", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "匯出類型別名的型別參數 '{0}' 具有或正在使用私人名稱 '{1}'。", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "匯出介面中方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "匯出類別中公用方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "匯出類別中公用靜態方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_declaration_expected_1139": "必須是型別參數宣告。", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "型別參數宣告只可用於 TypeScript 檔案中。", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "型別參數預設只能參考先前宣告的型別參數。", + "Type_parameter_list_cannot_be_empty_1098": "型別參數清單不得為空白。", + "Type_parameter_name_cannot_be_0_2368": "型別參數名稱不得為 '{0}'。", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "建構函式宣告不得有類型參數。", + "Type_predicate_0_is_not_assignable_to_1_1226": "型別述詞 '{0}' 不可指派給 '{1}'。", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "類型產生的元組類型太大而無法表示。", + "Type_reference_directive_0_was_not_resolved_6120": "======== 類型參考指示詞 '{0}' 未解析。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',主要: {2}。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}',主要: {3}。========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "類型滿足運算式只可用於 TypeScript 檔案。", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "類型不能出現在 JavaScript 檔案的匯出宣告中。", + "Types_have_separate_declarations_of_a_private_property_0_2442": "類型具有私用屬性 '{0}' 的個別宣告。", + "Types_of_construct_signatures_are_incompatible_2419": "建構簽章的類型不相容。", + "Types_of_parameters_0_and_1_are_incompatible_2328": "參數 '{0}' 和 '{1}' 的類型不相容。", + "Types_of_property_0_are_incompatible_2326": "屬性 '{0}' 的類型不相容。", + "Unable_to_open_file_0_6050": "無法開啟檔案 '{0}'。", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "無法解析以運算式形式呼叫之類別裝飾項目的簽章。", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "無法解析以運算式形式呼叫之方法裝飾項目的簽章。", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "無法解析以運算式形式呼叫之參數裝飾項目的簽章。", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "無法解析以運算式形式呼叫之屬性裝飾項目的簽章。", + "Undetermined_character_escape_1513": "未定字元逸出。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "未預期的 '{0}'。您是要使用反斜線將其逸出嗎?", + "Unexpected_end_of_text_1126": "未預期的文字結尾。", + "Unexpected_keyword_or_identifier_1434": "未預期的關鍵字或識別碼。", + "Unexpected_token_1012": "未預期的語彙基元。", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "未預期的語彙基元。必須是建構函式、方法、存取子或屬性。", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "權杖錯誤。類型參數名稱不應有大括號。", + "Unexpected_token_Did_you_mean_or_gt_1382": "未預期的語彙基元。您是指 `{'>'}` 或 `>` 嗎?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "未預期的語彙基元。您是指 `{'}'}` 或 `}` 嗎?", + "Unexpected_token_expected_1179": "未預期的語彙基元。必須是 '{'。", + "Unicode_escape_sequence_cannot_appear_here_17021": "此處不可出現 Unicode 逸出序列。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 逸出序列。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 屬性值運算式。", + "Unknown_Unicode_property_name_1524": "未知的 Unicode 屬性名稱。", + "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 屬性名稱或值。", + "Unknown_Unicode_property_value_1526": "未知的 Unicode 屬性值。", + "Unknown_build_option_0_5072": "未知的組建選項 '{0}'。", + "Unknown_build_option_0_Did_you_mean_1_5077": "未知的組建選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_compiler_option_0_5023": "不明的編譯器選項 '{0}'。", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的編譯器選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的關鍵字或識別碼。您是不是指 '{0}'?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "選項 'excludes' 未知。您是指 'exclude' 嗎?", + "Unknown_regular_expression_flag_1499": "未知的規則運算式旗標。", + "Unknown_type_acquisition_option_0_17010": "未知的類型取得選項 '{0}'。", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的類型擷取選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_watch_option_0_5078": "未知的監看選項 '{0}'。", + "Unknown_watch_option_0_Did_you_mean_1_5079": "未知的監看選項 '{0}'。您是指 '{1}' 嗎?", + "Unreachable_code_detected_7027": "偵測到無法執行到的程式碼。", + "Unterminated_Unicode_escape_sequence_1199": "未結束的 Unicode 逸出序列。", + "Unterminated_quoted_string_in_response_file_0_6045": "回應檔 '{0}' 中有未結束的括號字串。", + "Unterminated_regular_expression_literal_1161": "未結束的規則運算式常值。", + "Unterminated_string_literal_1002": "未結束的字串常值。", + "Unterminated_template_literal_1160": "未結束的樣板常值。", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "不具類型的函式呼叫無法接受類型引數。", + "Unused_label_7028": "未使用的標籤。", + "Unused_ts_expect_error_directive_2578": "未使用的 '@ts-expect-error' 指示詞。", + "Update_import_from_0_90058": "從 \"{0}\" 更新匯入", + "Update_modifiers_of_0_90061": "更新 '{0}' 的修飾元", + "Updating_output_timestamps_of_project_0_6359": "正在更新專案 '{0}' 的輸出時間戳記...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新專案 '{0}' 的未更變輸出時間戳記...", + "Use_0_95174": "使用 `{0}`。", + "Use_0_instead_5106": "請改用 '{0}'。", + "Use_Number_isNaN_in_all_conditions_95175": "在所有條件中都使用 'Number.isNaN'。", + "Use_element_access_for_0_95145": "對 '{0}' 使用元素存取", + "Use_element_access_for_all_undeclared_properties_95146": "對所有未宣告的屬性使用元素存取。", + "Use_import_type_95180": "請使用 'import type'", + "Use_synthetic_default_member_95016": "使用綜合 'default' 成員。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析套件匯入時,請使用 package.json 'exports' 欄位。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析匯入時,請使用 package.json 'imports' 欄位。", + "Use_type_0_95181": "請使用 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "使用 '{0}' 子路徑 '{1}' 與目標 '{2}'。", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "使用 JSX 片段需要片段中心 '{0}' 在範圍內,但無法找到。", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "只有在 ECMAScript 5 及更高版本中,才可在 'for...of' 陳述式中使用字串。", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build、-b 會讓 tsc 的行為較編譯器更像是建置協調器。這可用於觸發建置複合專案,您可以在以下位置深入了解: {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "正在使用專案參考重新導向 '{0}' 的編譯器選項。", + "VERSION_6036": "版本", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "類型為 '{0}' 的值與類型 '{1}' 沒有任何共通的屬性。確定要呼叫嗎?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "無法呼叫類型 '{0}' 的值。您要包含 'new' 嗎?", + "Variable_0_implicitly_has_an_1_type_7005": "變數 '{0}' 隱含有 '{1}' 類型。", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "變數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "變數 '{0}' 在某些位置隱含類型 '{1}',但可從使用方式推斷更適合的類型。", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "變數 '{0}' 在某些其類型無法判斷的位置隱含地擁有類型 '{1}'。", + "Variable_0_is_used_before_being_assigned_2454": "變數 '{0}' 已在指派之前使用。", + "Variable_declaration_expected_1134": "必須是變數宣告。", + "Variable_declaration_list_cannot_be_empty_1123": "變數宣告清單不得為空白。", + "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允許變數宣告。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "變數必須有具備 --isolatedDeclarations 的明確型別註釋。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "無法內嵌有多個宣告的變數。", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "來源中位於 {0} 的可變元素與目標中位於 {1} 的元素不相符。", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "只有物件、函式、建構函式和對應類型的類型別名才支援差異註釋。", + "Version_0_6029": "版本 {0}", + "Virtual_code_produced_by_the_content_mapper_0_has_problems_with_no_corresponding_location_in_this_fi_18080": "Virtual code produced by the content mapper '{0}' has problems with no corresponding location in this file.", + "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111": "請造訪 https://aka.ms/ts6 以取得移轉資訊。", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "瀏覽 https://aka.ms/tsconfig 以閱讀此檔案的詳細資訊", + "WATCH_OPTIONS_6918": "監看式選項", + "Watch_and_Build_Modes_6250": "觀看及建置模式", + "Watch_input_files_6005": "監看輸入檔。", + "Watch_option_0_requires_a_value_of_type_1_5080": "監看選項 '{0}' 需要 {1} 類型的值。", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "我們只能在此新增整個參數的類型,來寫入 '{0}' 的類型。", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "指派函式時,請檢查以確認參數,而且傳回值是子類型相容的。", + "When_type_checking_take_into_account_null_and_undefined_6699": "當型別檢查時,請將 'null' 和 'undefined' 納入考慮。", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否要將已過期的主控台輸出,維持在監看模式下,而非清除螢幕。", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "將所有無效字元包裝在運算式容器中", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "將所有無效的裝飾項目運算式以括弧包住", + "Wrap_all_object_literal_with_parentheses_95116": "使用括弧括住所有物件常值", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "將所有無上層 JSX 包裝至 JSX 片段中", + "Wrap_in_JSX_fragment_95120": "包裝至 JSX 片段中", + "Wrap_in_parentheses_95194": "以括弧包住", + "Wrap_invalid_character_in_an_expression_container_95108": "包裝在運算式容器中的字元無效", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "使用括弧括住下列必須是物件常值的主體", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "您可以在以下位置了解所有編譯器選項: {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "您無法透過全域匯入重新命名模組。", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "您無法重新命名 'node_modules' 資料夾中定義的元素。", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "您無法重新命名其他 'node_modules' 資料夾中定義的元素。", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "您無法重新命名標準 TypeScript 程式庫中所定義的項目。", + "You_cannot_rename_this_element_8000": "您無法重新命名這個項目。", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' 在此只接受極少數的引數用為裝飾項目。要先呼叫此項目,然後再寫入 '@{0}()' 嗎?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 和 '{1}' 索引簽章不相容。", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 與 '{1}' 作業無法在沒有括號的情況下同時使用。", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' 指定了兩次。將會覆寫名為 '{0}' 的屬性。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型別以 '{0}' 作為結尾,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型別以 '{0}' 作為開頭,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能透過開啟 'esModuleInterop' 旗標並使用預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_default_import_2595": "只能使用預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能使用 'require' 呼叫,或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 'require' 呼叫或預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "只能使用 'import {1} = require({2})' 或預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "只能使用 'import {1} = require({2})',或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' 不能用作 JSX 元件。", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "因為 '{0}' 是使用 'export type' 匯出的,所以無法作為值使用。", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "因為 '{0}' 是使用 'import type' 匯入的,所以無法作為值使用。", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 元件不接受文字作為子項目。JSX 中的文字具有類型 'string',但 '{1}' 需要的類型為 '{2}'。", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' 可以使用與 '{1}' 無關的任意類型來具現化。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "只能在區塊內宣告 '{0}' 宣告。", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣告只可用於 TypeScript 檔案中。", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣告可能沒有繫結模式。", + "_0_declarations_must_be_initialized_1155": "必須初始化 '{0}' 宣告。", + "_0_expected_1005": "必須是 '{0}'。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' 具有字串型別,但在啟用 'isolatedModules' 的狀態下,其語法必須是可辨識的字串語法。", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' 沒有任何名稱為 '{1}' 的已匯出成員。您是指 '{2}' 嗎?", + "_0_implementations_95200": "{0} implementations", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' 隱含 '{1}' 傳回型別,但可從使用方式推斷更適合的類型。", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' 因為沒有傳回型別註解,且在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' 因為沒有類型註釋,且在其本身的初始設定式中直接或間接參考了自己,所以隱含有類型 'any'。", + "_0_index_signatures_are_incompatible_2634": "'{0}' 索引簽章不相容。", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 索引類型 '{1}' 無法指派給 '{2}' 索引類型 '{3}'。", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' 為基元,但 '{1}' 為包裝函式物件。建議盡可能使用 '{0}'。", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' 為類型,無法匯入 JavaScript 檔案。在 JSDoc 類型註釋中使用 '{1}'。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' 為型別,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' 是未使用的 '{1}' 重新命名。您是否想要使用它作為類型註釋?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' 可指派給 '{1}' 類型的條件約束,但可能會將 '{1}' 以不同的條件約束 '{2}' 子類型來具現化。", + "_0_is_automatically_exported_here_18044": "'{0}' 會自動匯出到此處。", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' 已宣告但從未讀取其值。", + "_0_is_declared_but_never_used_6196": "宣告了 '{0}',但從未使用過。", + "_0_is_declared_here_2728": "'{0}' 宣告於此處。", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' 在類別 '{1}' 中定義為屬性,但在此處的 '{2}' 中卻覆寫為存取子。", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' 在類別 '{1}' 中定義為存取子,但在此處的 '{2}' 中卻覆寫為執行個體屬性。", + "_0_is_deprecated_6385": "'{0}' 已淘汰。", + "_0_is_not_a_valid_key_for_an_import_attributes_type_1557": "'{0}' is not a valid key for an import attributes type.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' 對關鍵字 '{1}' 而言不是有效的中繼屬性。您是指 '{2}' 嗎?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_defer_or_source_18061": "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta', 'defer', or 'source'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "不允許 '{0}' 做為參數名稱。", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' 不能是變數宣告名稱。", + "_0_is_of_type_unknown_18046": "'{0}' 的類型為 'unknown'。", + "_0_is_only_assignable_to_the_non_distributed_1_but_1_has_been_distributed_here_5113": "'{0}' is only assignable to the non-distributed '{1}', but '{1}' has been distributed here.", + "_0_is_possibly_null_18047": "'{0}' 可能是 'null'。", + "_0_is_possibly_null_or_undefined_18049": "'{0}' 可能為「null」或「未定義」。", + "_0_is_possibly_undefined_18048": "'{0}' 可能為「未定義」。", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' 在其本身的基底運算式中直接或間接受到參考。", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' 在其本身的類型註釋中直接或間接受到參考。", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "多次指定 '{0}',因此將會覆寫此使用方式。", + "_0_list_cannot_be_empty_1097": "'{0}' 清單不得為空白。", + "_0_modifier_already_seen_1030": "已有 '{0}' 修飾元。", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾元只能出現在類別、介面或型別別名的型別參數上", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾元只能出現在方法或類別,或是函式的型別參數中。", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "建構函式宣告不得有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "模組或命名空間元素不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_parameter_1090": "參數不得有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_type_member_1070": "類型成員不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "型別參數上不能出現 '{0}' 修飾元", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾元不可出現在 'using' 宣告中。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾元不可出現在 'await using' 宣告中。", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "索引簽章不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "不得在此種類別項目中使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_here_1042": "無法在此處使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "無法在環境內容中使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾元無法與 '{1}' 修飾元並用。", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾元不可搭配私人識別碼一起使用。", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾元必須在 '{1}' 修飾元之前。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 後必須是以大括弧括住的 Unicode 屬性值運算式。", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' 需要明確的型別註解。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' 只參考類型,但在這裡用作命名空間。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' 只會參考類型,但此處將其用為值。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' 僅限於類型,但此處用為值。您要使用 '{1} in {0}' 嗎?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "「{0}」僅指一種類型,但在此卻作為值使用。要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。", + "_0_references_95198": "{0} references", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' 指的是全域的 UMD,但目前的檔案為模組。請考慮改為新增匯入。", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' 為值,但在此處卻作為類型使用。您是否是指 'typeof {0}'?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' 會解析為僅限型別的宣告,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須透過僅限型別的重新匯出作業重新匯出。", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' 應該在設定 json 檔案的 'compilerOptions' 物件內設定。", + "_0_tag_already_specified_1223": "已指定 '{0}' 標記。", + "_0_was_also_declared_here_6203": "'{0}' 也已宣告於此處。", + "_0_was_exported_here_1377": "'{0}' 已匯出到此處。", + "_0_was_imported_here_1376": "'{0}' 已匯入到此處。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "缺少傳回型別註解的 '{0}' 隱含了 '{1}' 傳回型別。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少傳回型別註解的 '{0}' 隱含 '{1}' 產生類型。", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾元只能出現在類別宣告、方法宣告或屬性宣告。", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 修飾詞只能出現在屬性宣告。", + "and_here_6204": "及此處。", + "and_npm_install_D_types_Slashnode_6290": "和 npm 安裝 -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "在屬性初始化器或類別靜態初始化區塊中無法引用『arguments』。", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 處理具有 imports、exports、import.meta, jsx (具有 jsx: react-jsx) 的檔案,或以 esm 格式 (具有 module: node16+) 作為模組。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 運算式無法在類別靜態區塊內使用。", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "當檔案為模組時,只允許 'await' 運算式位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "只允許在非同步函式中與模組的最上層使用 'await' 運算式。", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 運算式不得用於參數初始設定式。", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' 對此運算式的類型沒有作用。", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "環境內容中不允許使用 'await using' 宣告。", + "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548": "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "當檔案為模組時,僅能在檔案最上層使用 'await using' 陳述式,但此檔案沒有任何匯入或匯出。建議新增空白的 'export {}',讓此檔案成為模組。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 陳述式僅能在非同步函式內,以及模組的最上層使用。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 陳述式無法在類別靜態區塊內使用。", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 選項已設為 '{0}'。此值將用於解析非相對的模組名稱 '{1}'。", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 後必須是 ASCII 字母。", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' 只能用於檔案開頭。", + "case_or_default_expected_1130": "必須是 'case' 或 'default'。", + "catch_or_finally_expected_1472": "必須是 'catch' 或 'finally'。", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列舉成員初始設定式已評估為非有限值。", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列舉成員初始設定式已評估為不允許的值 'NaN'。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "常數列舉成員初始設定式必須為常數運算式。", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列舉只可用於屬性或索引存取運算式中,或用於匯入宣告、匯出指派或類型查詢的右側。", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' 不能作為參數屬性名稱使用。", + "constructor_is_a_reserved_word_18012": "'#constructor' 為保留字。", + "default_Colon_6903": "預設:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "不得在 strict 模式中對識別碼呼叫 'delete'。", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' 不會重新匯出預設匯出。", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' 只可用於 TypeScript 檔案中。", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' 修飾元無法套用至環境模組或模組增強指定,原因是這二者永遠會顯示。", + "extends_clause_already_seen_1172": "已經有 'extends' 子句。", + "extends_clause_must_precede_implements_clause_1173": "'extends' 子句必須在 'implements' 子句之前。", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "匯出類別 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "匯出類別的 'extends' 子句包含或使用了私人名稱 '{0}'。", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "匯出介面 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", + "false_unless_checkJs_is_set_6932": "'false',除非已設定 'checkJs'", + "false_unless_composite_is_set_6906": "`false`,除非已設定 `composite`", + "file_6025": "檔案", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "當檔案為模組時,只允許 'for await' 迴圈位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "只允許在非同步函式中與模組的最上層使用 'for await' 迴圈。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 和 'set' 存取子不可宣告 'this' 參數。", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定 `files`,則為 `[]`,否則為 `[\"**/*\"]`", + "implements_clause_already_seen_1175": "已經有 'implements' 子句。", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 子句只可用於 TypeScript 檔案中。", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' 只可用於 TypeScript 檔案中。", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "只允許在條件式類型的 'extends' 子句中使用 'infer' 宣告。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 後必須是以角括弧括住的擷取群組名稱。", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' 或 'const' 宣告中不得使用 'let' 作為名稱。", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "目標缺少建構簽章的 'new' 運算式隱含了 'any' 類型。", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`,加上 `outDir` 的值 (如果有指定)。", + "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010": "如果 `module` 是 `nodenext`,則為 `nodenext`; 如果 `module` 是 `node16` 或 `node18`,則為 `node16`; 否則為 `bundler`。", + "one_of_Colon_6900": "以下其中一個:", + "one_or_more_Colon_6901": "以下一或多個:", + "options_6024": "選項", + "or_JSX_element_expected_1145": "必須是 '{' 或 JSX 元素。", + "or_expected_1144": "必須是 '{' 或 ';'。", + "package_json_does_not_have_a_0_field_6100": "'package.json' 沒有 '{0}' 欄位。", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' 沒有任何符合 '{0}' 版本的 'typesVersions' 項目。", + "package_json_had_a_falsy_0_field_6220": "'package.json' 具有假的 '{0}' 欄位。", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' 有參考 '{2}' 的 '{0}' 欄位 '{1}'。", + "package_json_has_a_peerDependencies_field_6281": "'package.json' 具有 'peerDependencies' 欄位。", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' 具有 'typesVersions' 項目 '{0}',其非有效的 SemVer 範圍。", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' 具有符合編譯器版本 '{1}' 的 'typesVersions' 項目 '{0}',要尋找符合模組名稱 '{2}' 的模式。", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' 具有限定版本路徑對應的 'typesVersions' 欄位。", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.js 範圍 '{0}' 將指定名稱 '{1}' 明確對應到 Null。", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.js 範圍 '{0}' 對指定名稱 '{1}' 的目標具有無效類型", + "package_json_scope_0_has_no_imports_defined_6273": "package.js 範圍 '{0}' 沒有定義的匯入。", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 選項已指定,將尋找符合模組名稱 '{0}' 的模式。", + "q_is_only_available_inside_character_class_1511": "'\\q' 僅可在字元類別中使用。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 後必須是字串 (可選擇以大括弧括住該字串)。", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾元只能出現在屬性宣告或索引簽章。", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 類型修飾元只可用於陣列與元組常值類型。", + "require_call_may_be_converted_to_an_import_80005": "'require' 呼叫可能會轉換為匯入。", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能針對僅限輸入的匯入設定 'resolution-mode'。", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' 是輸入匯入判斷提示唯一有效的索引鍵。", + "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode` 應該是 `require` 或 `import`。", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 選項已設定。該選項將用於解析相對的模組名稱 '{0}'。", + "super_can_only_be_referenced_in_a_derived_class_2335": "只有衍生類別中才可參考 'super'。", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "只有在衍生類別或物件常值運算式的成員中才可參考 'super'。", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "計算的屬性名稱中不得參考 'super'。", + "super_cannot_be_referenced_in_constructor_arguments_2336": "建構函式引數中不得參考 'super'。", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "當選項 'target' 為 'ES2015' 或更高時,只有在物件常值運算式的成員中才允許 'super'。", + "super_may_not_use_type_arguments_2754": "'super' 不可以使用類型引數。", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "必須先呼叫 'super' 才能存取衍生類別建構函式中 'super' 的屬性。", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "必須先呼叫 'super' 才能存取衍生類別中建構函式的 'this'。", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' 之後必須接引數清單或成員存取。", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "只有在建構函式、成員函式或衍生類別的成員存取子中,才能存取 'super' 屬性。", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "計算的屬性名稱中不得參考 'this'。", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "模組或命名空間主體中不得參考 'this'。", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "靜態屬性初始設定式中不得參考 'this'。", + "this_cannot_be_referenced_in_current_location_2332": "目前的位置中不得參考 'this'。", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "因為 'this' 沒有型別註解,所以隱含具有類型 'any'。", + "true_for_ES2022_and_above_including_ESNext_6930": "ES2022 及以上為 true,包括 ESNext。", + "true_if_composite_false_otherwise_6909": "如果為 `composite`,則為 `true`,否則為 `false`", + "true_unless_strict_is_false_6905": "`true`, unless `strict` is `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "當 'moduleResolution' 為 'node16'、'nodenext' 或 'bundler' 時,為 `true`; 否則為 `false`。", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 編譯器", + "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112": "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.", + "type_Colon_6902": "輸入:", + "unique_symbol_types_are_not_allowed_here_1335": "這裡不允許 'unique symbol' 型別。", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "只有變數陳述式中的變數允許 'unique symbol' 型別。", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型別無法用在具有繫結名稱的變數宣告上。", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' 指示詞不可搭配非簡易參數清單使用。", + "use_strict_directive_used_here_1349": "'use strict' 指示詞已用於此處。", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "環境內容中不允許 'using' 宣告。", + "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547": "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "非同步函式區塊中不允許 'with' 陳述式。", + "with_statements_are_not_allowed_in_strict_mode_1101": "不得在 strict 模式中使用 'with' 陳述式。", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "因為 'yield' 運算式包含的產生器缺少傳回型別註解,所以其隱含導致 'any' 類型。", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 運算式不得用於參數初始設定式。" +} diff --git a/tsc/internal/format/README.md b/tsc/internal/format/README.md index d1086eaa0b485..fe19d2886b599 100644 --- a/tsc/internal/format/README.md +++ b/tsc/internal/format/README.md @@ -1,26 +1,26 @@ -# How does TypeScript formatting work? - -To format code you need to have a formatting context and a `SourceFile`. The formatting context contains -all user settings like tab size, newline character, etc. - -The end result of formatting is represented by TextChange objects which hold the new string content, and -the text to replace it with. - -## Internals - -Most of the exposed APIs internally are `Format*` and they all set up and configure `FormatSpan` which could be considered the root call for formatting. Span in this case refers to the range of -the sourcefile which should be formatted. - -The formatSpan then uses a scanner (either with or without JSX support) which starts at the highest -node the covers the span of text and recurses down through the node's children. - -As it recurses, `processNode` is called on the children setting the indentation is decided and passed -through into each of that node's children. - -The meat of formatting decisions is made via `processPair`, the pair here being the current node and the previous node. `processPair` which mutates the formatting context to represent the current place in the scanner and requests a set of rules which can be applied to the items via `createRulesMap`. - -There are a lot of rules, which you can find in [rules.ts](./rules.ts) each one has a left and right reference to nodes or token ranges and note of what action should be applied by the formatter. - -### Where is this used? - -The formatter is used mainly from any language service operation that inserts or modifies code. The formatter is not exported publicly, and so all usage can only come through the language server. +# How does TypeScript formatting work? + +To format code you need to have a formatting context and a `SourceFile`. The formatting context contains +all user settings like tab size, newline character, etc. + +The end result of formatting is represented by TextChange objects which hold the new string content, and +the text to replace it with. + +## Internals + +Most of the exposed APIs internally are `Format*` and they all set up and configure `FormatSpan` which could be considered the root call for formatting. Span in this case refers to the range of +the sourcefile which should be formatted. + +The formatSpan then uses a scanner (either with or without JSX support) which starts at the highest +node the covers the span of text and recurses down through the node's children. + +As it recurses, `processNode` is called on the children setting the indentation is decided and passed +through into each of that node's children. + +The meat of formatting decisions is made via `processPair`, the pair here being the current node and the previous node. `processPair` which mutates the formatting context to represent the current place in the scanner and requests a set of rules which can be applied to the items via `createRulesMap`. + +There are a lot of rules, which you can find in [rules.ts](./rules.ts) each one has a left and right reference to nodes or token ranges and note of what action should be applied by the formatter. + +### Where is this used? + +The formatter is used mainly from any language service operation that inserts or modifies code. The formatter is not exported publicly, and so all usage can only come through the language server. diff --git a/tsc/internal/stringutil/_scripts/generate-unicode-data.mts b/tsc/internal/stringutil/_scripts/generate-unicode-data.mts index e24c8a5d7152b..d7ac500d64bb5 100644 --- a/tsc/internal/stringutil/_scripts/generate-unicode-data.mts +++ b/tsc/internal/stringutil/_scripts/generate-unicode-data.mts @@ -1,270 +1,270 @@ -#!/usr/bin/env node - -import { fileURLToPath } from "node:url"; -import * as path from "path"; -import { GeneratedFile } from "../../../../tools/scripts/gen/generatedFile.mts"; -import { - formatFiles, - parseGeneratorArgs, -} from "../../../../tools/scripts/gen/utils.mts"; - -// All Unicode data is sourced from a single version-pinned @unicode/unicode-* -// package so the generated tables are reproducible regardless of the Node.js -// runtime used to run `go generate`. Bumping this constant (and the matching -// devDependency in package.json) is the only step needed to move to a newer -// Unicode version. -const UNICODE_VERSION = "15.1.0"; -const PACKAGE = `@unicode/unicode-${UNICODE_VERSION}`; - -const scriptDir = import.meta.dirname; - -// A *unicode.RangeTable is split into 16-bit (BMP) and 32-bit (astral) ranges, -// each carrying a stride so arithmetic sequences (e.g. the alternating -// upper/lower letters that fill the casing tables) collapse to a single entry. -type RangeTable = { - r16: Range[]; - r32: Range[]; - latinOffset: number; -}; - -type Range = { - lo: number; - hi: number; - stride: number; -}; - -type SpecialCasingEntry = { - codePoint: number; - lower: number[]; - upper: number[]; - conditionalLower: number[]; - condition: string; -}; - -async function loadCodePoints(property: string): Promise { - const module = await import(`${PACKAGE}/${property}/code-points.js`); - return module.default as number[]; -} - -async function loadMapping(property: string): Promise> { - const module = await import(`${PACKAGE}/${property}/code-points.js`); - return module.default as Map; -} - -async function loadSimpleMapping(property: string): Promise> { - const module = await import(`${PACKAGE}/${property}/code-points.js`); - return module.default as Map; -} - -// Group a sorted, de-duplicated run of code points into ranges sharing a -// constant stride. The stride of each range is taken from the gap to the next -// code point, so it never includes a code point that is not in the set; this -// matches the invariants unicode.Is relies on. -function toStrideRanges(sorted: number[]): Range[] { - const ranges: Range[] = []; - let i = 0; - while (i < sorted.length) { - const lo = sorted[i]; - const stride = i + 1 < sorted.length ? sorted[i + 1] - sorted[i] : 1; - let hi = lo; - let j = i + 1; - while (j < sorted.length && sorted[j] === hi + stride) { - hi = sorted[j]; - j++; - } - ranges.push({ lo, hi, stride }); - i = j; - } - return ranges; -} - -// Compress a set of code points into a *unicode.RangeTable. BMP and astral code -// points are separated first so no range straddles the U+FFFF boundary between -// the R16 and R32 slices. -function toRangeTable(codePoints: Iterable): RangeTable { - const sorted = [...new Set(codePoints)].sort((a, b) => a - b); - const bmp = sorted.filter(cp => cp <= 0xFFFF); - const astral = sorted.filter(cp => cp > 0xFFFF); - const r16 = toStrideRanges(bmp); - const r32 = toStrideRanges(astral); - // unicode.Is fast-paths Latin-1 by linearly scanning the leading R16 entries - // whose Hi is within Latin-1 (U+00FF); LatinOffset records how many those are. - let latinOffset = 0; - while (latinOffset < r16.length && r16[latinOffset].hi <= 0xFF) { - latinOffset++; - } - return { r16, r32, latinOffset }; -} - -function goRuneLiteral(codePoint: number): string { - return `0x${codePoint.toString(16).toUpperCase()}`; -} - -function goStringLiteral(codePoints: number[]): string { - let text = '"'; - for (const codePoint of codePoints) { - if (codePoint <= 0xFFFF) { - text += `\\u${codePoint.toString(16).toUpperCase().padStart(4, "0")}`; - } - else { - text += `\\U${codePoint.toString(16).toUpperCase().padStart(8, "0")}`; - } - } - text += '"'; - return text; -} - -function renderRangeTable(name: string, table: RangeTable): string { - const r16 = table.r16.map(r => `\t\t{${goRuneLiteral(r.lo)}, ${goRuneLiteral(r.hi)}, ${r.stride}},`).join("\n"); - const r32 = table.r32.map(r => `\t\t{${goRuneLiteral(r.lo)}, ${goRuneLiteral(r.hi)}, ${r.stride}},`).join("\n"); - return `var ${name} = &unicode.RangeTable{ -\tR16: []unicode.Range16{ -${r16} -\t}, -\tR32: []unicode.Range32{ -${r32} -\t}, -\tLatinOffset: ${table.latinOffset}, -} -`; -} - -async function buildSpecialCasing(simpleLowercase: Map, simpleUppercase: Map): Promise { - // The unconditional, locale-insensitive multi-rune mappings. Each map keys a - // code point to its full lower/upper expansion (identity when unchanged). - const lowerMappings = await loadMapping("Special_Casing/Lowercase"); - const upperMappings = await loadMapping("Special_Casing/Uppercase"); - // toLowerCase emits the word-final sigma only in Final_Sigma context, so this - // mapping is tracked separately and applied by the Go caser when in context. - const finalSigmaMappings = await loadMapping("Special_Casing/Lowercase--Final_Sigma"); - - const entries: SpecialCasingEntry[] = []; - - const codePoints = new Set([...simpleLowercase.keys(), ...simpleUppercase.keys(), ...lowerMappings.keys(), ...upperMappings.keys()]); - for (const codePoint of codePoints) { - entries.push({ - codePoint, - lower: lowerMappings.get(codePoint) ?? [simpleLowercase.get(codePoint) ?? codePoint], - upper: upperMappings.get(codePoint) ?? [simpleUppercase.get(codePoint) ?? codePoint], - conditionalLower: [codePoint], - condition: "specialCasingConditionNone", - }); - } - - for (const [codePoint, lower] of finalSigmaMappings) { - const entry = entries.find(entry => entry.codePoint === codePoint); - if (entry === undefined) { - entries.push({ - codePoint, - lower: [simpleLowercase.get(codePoint) ?? codePoint], - upper: upperMappings.get(codePoint) ?? [simpleUppercase.get(codePoint) ?? codePoint], - conditionalLower: lower, - condition: "specialCasingConditionFinalSigma", - }); - } - else { - entry.conditionalLower = lower; - entry.condition = "specialCasingConditionFinalSigma"; - } - } - - entries.sort((a, b) => a.codePoint - b.codePoint); - return entries; -} - -function renderCaseFile(entries: SpecialCasingEntry[], casedTable: RangeTable, caseIgnorableTable: RangeTable): string { - const mappings = entries.map(entry => { - const conditionalLower = entry.condition === "specialCasingConditionFinalSigma" ? `, conditionalLower: ${goStringLiteral(entry.conditionalLower)}` : ""; - return `\t${goRuneLiteral(entry.codePoint)}: {lower: ${goStringLiteral(entry.lower)}, upper: ${goStringLiteral(entry.upper)}${conditionalLower}, condition: ${entry.condition}},`; - }).join("\n"); - - return `// Code generated by generate-unicode-data.mts. DO NOT EDIT. -// Derived from the ${PACKAGE} package (Unicode ${UNICODE_VERSION}). -// Includes only the locale-insensitive multi-rune mappings needed for ECMAScript -// default casing, plus the Final_Sigma context mapping. String.prototype.toLowerCase -// applies Final_Sigma, but Go's unicode package does not, so the caser applies it -// from this data when in context. Simple one-rune mappings are included here too -// so casing stays pinned to this Unicode version, rather than the Go toolchain's -// unicode tables. - -package stringutil - -import "unicode" - -type specialCasingCondition uint8 - -const ( -\tspecialCasingConditionNone specialCasingCondition = iota -\tspecialCasingConditionFinalSigma -) - -type specialCasingMapping struct { -\tlower string -\tupper string -\tconditionalLower string -\tcondition specialCasingCondition -} - -var specialCasingMappings = map[rune]specialCasingMapping{ -${mappings} -} - -${renderRangeTable("unicodeCasedRanges", casedTable)} -${renderRangeTable("unicodeCaseIgnorableRanges", caseIgnorableTable)} -`; -} - -function renderIdentifierFile(startTable: RangeTable, partTable: RangeTable): string { - return `// Code generated by generate-unicode-data.mts. DO NOT EDIT. -// Derived from the ${PACKAGE} package (Unicode ${UNICODE_VERSION}). -// Based on http://www.unicode.org/reports/tr31/ and -// https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords: -// unicodeESNextIdentifierStart corresponds to the ID_Start and Other_ID_Start property, and -// unicodeESNextIdentifierPart corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start. - -package stringutil - -import "unicode" - -${renderRangeTable("unicodeESNextIdentifierStart", startTable)} -${renderRangeTable("unicodeESNextIdentifierPart", partTable)} -`; -} - -export default async function generateUnicode(force = false, outDir = path.resolve(scriptDir, "..")) { - outDir = path.resolve(outDir); - const inputs = [ - import.meta.filename, - fileURLToPath(import.meta.resolve(`${PACKAGE}/package.json`)), - ]; - const caseOutput = new GeneratedFile(path.join(outDir, "js_case_generated.go"), inputs); - const identifierOutput = new GeneratedFile(path.join(outDir, "identifier_parts_generated.go"), inputs); - const generatedFiles = [caseOutput, identifierOutput]; - if (generatedFiles.every(file => file.isCurrent(force))) { - console.log("Unicode tables are up to date."); - return; - } - - for (const file of generatedFiles) file.invalidate(); - const simpleLowercase = await loadSimpleMapping("Simple_Case_Mapping/Lowercase"); - const simpleUppercase = await loadSimpleMapping("Simple_Case_Mapping/Uppercase"); - const entries = await buildSpecialCasing(simpleLowercase, simpleUppercase); - const casedTable = toRangeTable(await loadCodePoints("Binary_Property/Cased")); - const caseIgnorableTable = toRangeTable(await loadCodePoints("Binary_Property/Case_Ignorable")); - caseOutput.write(renderCaseFile(entries, casedTable, caseIgnorableTable)); - - const idStart = await loadCodePoints("Binary_Property/ID_Start"); - const idContinue = await loadCodePoints("Binary_Property/ID_Continue"); - // Other_ID_Start/Other_ID_Continue are already folded into ID_Start/ID_Continue. - const startTable = toRangeTable(idStart); - const partTable = toRangeTable([...idContinue, ...idStart]); - identifierOutput.write(renderIdentifierFile(startTable, partTable)); - await formatFiles(generatedFiles.map(file => file.fileName)); - for (const file of generatedFiles) file.markCurrent(); - console.log("Generated Unicode tables."); -} - -if (process.argv[1] === import.meta.filename) { - const { values, force } = parseGeneratorArgs({ outDir: { type: "string" } }); - await generateUnicode(force, values.outDir); -} +#!/usr/bin/env node + +import { fileURLToPath } from "node:url"; +import * as path from "path"; +import { GeneratedFile } from "../../../../tools/scripts/gen/generatedFile.mts"; +import { + formatFiles, + parseGeneratorArgs, +} from "../../../../tools/scripts/gen/utils.mts"; + +// All Unicode data is sourced from a single version-pinned @unicode/unicode-* +// package so the generated tables are reproducible regardless of the Node.js +// runtime used to run `go generate`. Bumping this constant (and the matching +// devDependency in package.json) is the only step needed to move to a newer +// Unicode version. +const UNICODE_VERSION = "15.1.0"; +const PACKAGE = `@unicode/unicode-${UNICODE_VERSION}`; + +const scriptDir = import.meta.dirname; + +// A *unicode.RangeTable is split into 16-bit (BMP) and 32-bit (astral) ranges, +// each carrying a stride so arithmetic sequences (e.g. the alternating +// upper/lower letters that fill the casing tables) collapse to a single entry. +type RangeTable = { + r16: Range[]; + r32: Range[]; + latinOffset: number; +}; + +type Range = { + lo: number; + hi: number; + stride: number; +}; + +type SpecialCasingEntry = { + codePoint: number; + lower: number[]; + upper: number[]; + conditionalLower: number[]; + condition: string; +}; + +async function loadCodePoints(property: string): Promise { + const module = await import(`${PACKAGE}/${property}/code-points.js`); + return module.default as number[]; +} + +async function loadMapping(property: string): Promise> { + const module = await import(`${PACKAGE}/${property}/code-points.js`); + return module.default as Map; +} + +async function loadSimpleMapping(property: string): Promise> { + const module = await import(`${PACKAGE}/${property}/code-points.js`); + return module.default as Map; +} + +// Group a sorted, de-duplicated run of code points into ranges sharing a +// constant stride. The stride of each range is taken from the gap to the next +// code point, so it never includes a code point that is not in the set; this +// matches the invariants unicode.Is relies on. +function toStrideRanges(sorted: number[]): Range[] { + const ranges: Range[] = []; + let i = 0; + while (i < sorted.length) { + const lo = sorted[i]; + const stride = i + 1 < sorted.length ? sorted[i + 1] - sorted[i] : 1; + let hi = lo; + let j = i + 1; + while (j < sorted.length && sorted[j] === hi + stride) { + hi = sorted[j]; + j++; + } + ranges.push({ lo, hi, stride }); + i = j; + } + return ranges; +} + +// Compress a set of code points into a *unicode.RangeTable. BMP and astral code +// points are separated first so no range straddles the U+FFFF boundary between +// the R16 and R32 slices. +function toRangeTable(codePoints: Iterable): RangeTable { + const sorted = [...new Set(codePoints)].sort((a, b) => a - b); + const bmp = sorted.filter(cp => cp <= 0xFFFF); + const astral = sorted.filter(cp => cp > 0xFFFF); + const r16 = toStrideRanges(bmp); + const r32 = toStrideRanges(astral); + // unicode.Is fast-paths Latin-1 by linearly scanning the leading R16 entries + // whose Hi is within Latin-1 (U+00FF); LatinOffset records how many those are. + let latinOffset = 0; + while (latinOffset < r16.length && r16[latinOffset].hi <= 0xFF) { + latinOffset++; + } + return { r16, r32, latinOffset }; +} + +function goRuneLiteral(codePoint: number): string { + return `0x${codePoint.toString(16).toUpperCase()}`; +} + +function goStringLiteral(codePoints: number[]): string { + let text = '"'; + for (const codePoint of codePoints) { + if (codePoint <= 0xFFFF) { + text += `\\u${codePoint.toString(16).toUpperCase().padStart(4, "0")}`; + } + else { + text += `\\U${codePoint.toString(16).toUpperCase().padStart(8, "0")}`; + } + } + text += '"'; + return text; +} + +function renderRangeTable(name: string, table: RangeTable): string { + const r16 = table.r16.map(r => `\t\t{${goRuneLiteral(r.lo)}, ${goRuneLiteral(r.hi)}, ${r.stride}},`).join("\n"); + const r32 = table.r32.map(r => `\t\t{${goRuneLiteral(r.lo)}, ${goRuneLiteral(r.hi)}, ${r.stride}},`).join("\n"); + return `var ${name} = &unicode.RangeTable{ +\tR16: []unicode.Range16{ +${r16} +\t}, +\tR32: []unicode.Range32{ +${r32} +\t}, +\tLatinOffset: ${table.latinOffset}, +} +`; +} + +async function buildSpecialCasing(simpleLowercase: Map, simpleUppercase: Map): Promise { + // The unconditional, locale-insensitive multi-rune mappings. Each map keys a + // code point to its full lower/upper expansion (identity when unchanged). + const lowerMappings = await loadMapping("Special_Casing/Lowercase"); + const upperMappings = await loadMapping("Special_Casing/Uppercase"); + // toLowerCase emits the word-final sigma only in Final_Sigma context, so this + // mapping is tracked separately and applied by the Go caser when in context. + const finalSigmaMappings = await loadMapping("Special_Casing/Lowercase--Final_Sigma"); + + const entries: SpecialCasingEntry[] = []; + + const codePoints = new Set([...simpleLowercase.keys(), ...simpleUppercase.keys(), ...lowerMappings.keys(), ...upperMappings.keys()]); + for (const codePoint of codePoints) { + entries.push({ + codePoint, + lower: lowerMappings.get(codePoint) ?? [simpleLowercase.get(codePoint) ?? codePoint], + upper: upperMappings.get(codePoint) ?? [simpleUppercase.get(codePoint) ?? codePoint], + conditionalLower: [codePoint], + condition: "specialCasingConditionNone", + }); + } + + for (const [codePoint, lower] of finalSigmaMappings) { + const entry = entries.find(entry => entry.codePoint === codePoint); + if (entry === undefined) { + entries.push({ + codePoint, + lower: [simpleLowercase.get(codePoint) ?? codePoint], + upper: upperMappings.get(codePoint) ?? [simpleUppercase.get(codePoint) ?? codePoint], + conditionalLower: lower, + condition: "specialCasingConditionFinalSigma", + }); + } + else { + entry.conditionalLower = lower; + entry.condition = "specialCasingConditionFinalSigma"; + } + } + + entries.sort((a, b) => a.codePoint - b.codePoint); + return entries; +} + +function renderCaseFile(entries: SpecialCasingEntry[], casedTable: RangeTable, caseIgnorableTable: RangeTable): string { + const mappings = entries.map(entry => { + const conditionalLower = entry.condition === "specialCasingConditionFinalSigma" ? `, conditionalLower: ${goStringLiteral(entry.conditionalLower)}` : ""; + return `\t${goRuneLiteral(entry.codePoint)}: {lower: ${goStringLiteral(entry.lower)}, upper: ${goStringLiteral(entry.upper)}${conditionalLower}, condition: ${entry.condition}},`; + }).join("\n"); + + return `// Code generated by generate-unicode-data.mts. DO NOT EDIT. +// Derived from the ${PACKAGE} package (Unicode ${UNICODE_VERSION}). +// Includes only the locale-insensitive multi-rune mappings needed for ECMAScript +// default casing, plus the Final_Sigma context mapping. String.prototype.toLowerCase +// applies Final_Sigma, but Go's unicode package does not, so the caser applies it +// from this data when in context. Simple one-rune mappings are included here too +// so casing stays pinned to this Unicode version, rather than the Go toolchain's +// unicode tables. + +package stringutil + +import "unicode" + +type specialCasingCondition uint8 + +const ( +\tspecialCasingConditionNone specialCasingCondition = iota +\tspecialCasingConditionFinalSigma +) + +type specialCasingMapping struct { +\tlower string +\tupper string +\tconditionalLower string +\tcondition specialCasingCondition +} + +var specialCasingMappings = map[rune]specialCasingMapping{ +${mappings} +} + +${renderRangeTable("unicodeCasedRanges", casedTable)} +${renderRangeTable("unicodeCaseIgnorableRanges", caseIgnorableTable)} +`; +} + +function renderIdentifierFile(startTable: RangeTable, partTable: RangeTable): string { + return `// Code generated by generate-unicode-data.mts. DO NOT EDIT. +// Derived from the ${PACKAGE} package (Unicode ${UNICODE_VERSION}). +// Based on http://www.unicode.org/reports/tr31/ and +// https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords: +// unicodeESNextIdentifierStart corresponds to the ID_Start and Other_ID_Start property, and +// unicodeESNextIdentifierPart corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start. + +package stringutil + +import "unicode" + +${renderRangeTable("unicodeESNextIdentifierStart", startTable)} +${renderRangeTable("unicodeESNextIdentifierPart", partTable)} +`; +} + +export default async function generateUnicode(force = false, outDir = path.resolve(scriptDir, "..")) { + outDir = path.resolve(outDir); + const inputs = [ + import.meta.filename, + fileURLToPath(import.meta.resolve(`${PACKAGE}/package.json`)), + ]; + const caseOutput = new GeneratedFile(path.join(outDir, "js_case_generated.go"), inputs); + const identifierOutput = new GeneratedFile(path.join(outDir, "identifier_parts_generated.go"), inputs); + const generatedFiles = [caseOutput, identifierOutput]; + if (generatedFiles.every(file => file.isCurrent(force))) { + console.log("Unicode tables are up to date."); + return; + } + + for (const file of generatedFiles) file.invalidate(); + const simpleLowercase = await loadSimpleMapping("Simple_Case_Mapping/Lowercase"); + const simpleUppercase = await loadSimpleMapping("Simple_Case_Mapping/Uppercase"); + const entries = await buildSpecialCasing(simpleLowercase, simpleUppercase); + const casedTable = toRangeTable(await loadCodePoints("Binary_Property/Cased")); + const caseIgnorableTable = toRangeTable(await loadCodePoints("Binary_Property/Case_Ignorable")); + caseOutput.write(renderCaseFile(entries, casedTable, caseIgnorableTable)); + + const idStart = await loadCodePoints("Binary_Property/ID_Start"); + const idContinue = await loadCodePoints("Binary_Property/ID_Continue"); + // Other_ID_Start/Other_ID_Continue are already folded into ID_Start/ID_Continue. + const startTable = toRangeTable(idStart); + const partTable = toRangeTable([...idContinue, ...idStart]); + identifierOutput.write(renderIdentifierFile(startTable, partTable)); + await formatFiles(generatedFiles.map(file => file.fileName)); + for (const file of generatedFiles) file.markCurrent(); + console.log("Generated Unicode tables."); +} + +if (process.argv[1] === import.meta.filename) { + const { values, force } = parseGeneratorArgs({ outDir: { type: "string" } }); + await generateUnicode(force, values.outDir); +} diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInPropDeclarationOfExportedDefaultClass1.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInPropDeclarationOfExportedDefaultClass1.callHierarchy.txt index 6c69e4ebcc8fb..4b905a586d10b 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInPropDeclarationOfExportedDefaultClass1.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInPropDeclarationOfExportedDefaultClass1.callHierarchy.txt @@ -3,21 +3,21 @@ ├ kind: method ├ file: bundled:///libs/lib.es5.d.ts ├ span: -│ ╭ bundled:///libs/lib.es5.d.ts:1341:5-1345:33 -│ │ 1341: /** +│ ╭ bundled:///libs/lib.es5.d.ts:1340:5-1344:33 +│ │ 1340: /** │ │ ^^^ -│ │ 1342: * Appends new elements to the end of an array, and returns the new length of the array. +│ │ 1341: * Appends new elements to the end of an array, and returns the new length of the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 1343: * @param items New elements to add to the array. +│ │ 1342: * @param items New elements to add to the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 1344: */ +│ │ 1343: */ │ │ ^^^^^^^ -│ │ 1345: push(...items: T[]): number; +│ │ 1344: push(...items: T[]): number; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es5.d.ts:1345:5-1345:9 -│ │ 1345: push(...items: T[]): number; +│ ╭ bundled:///libs/lib.es5.d.ts:1344:5-1344:9 +│ │ 1344: push(...items: T[]): number; │ │ ^^^^ │ ╰ ├ incoming: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsNoCrashArrayPush.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsNoCrashArrayPush.callHierarchy.txt index 3ef3de88af03b..843cc6712512f 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsNoCrashArrayPush.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsNoCrashArrayPush.callHierarchy.txt @@ -3,21 +3,21 @@ ├ kind: method ├ file: bundled:///libs/lib.es5.d.ts ├ span: -│ ╭ bundled:///libs/lib.es5.d.ts:1341:5-1345:33 -│ │ 1341: /** +│ ╭ bundled:///libs/lib.es5.d.ts:1340:5-1344:33 +│ │ 1340: /** │ │ ^^^ -│ │ 1342: * Appends new elements to the end of an array, and returns the new length of the array. +│ │ 1341: * Appends new elements to the end of an array, and returns the new length of the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 1343: * @param items New elements to add to the array. +│ │ 1342: * @param items New elements to add to the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 1344: */ +│ │ 1343: */ │ │ ^^^^^^^ -│ │ 1345: push(...items: T[]): number; +│ │ 1344: push(...items: T[]): number; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es5.d.ts:1345:5-1345:9 -│ │ 1345: push(...items: T[]): number; +│ ╭ bundled:///libs/lib.es5.d.ts:1344:5-1344:9 +│ │ 1344: push(...items: T[]): number; │ │ ^^^^ │ ╰ ├ incoming: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInExpressionComputedProperty.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInExpressionComputedProperty.callHierarchy.txt index 3b95dbe0f909a..f5bdb39565a17 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInExpressionComputedProperty.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInExpressionComputedProperty.callHierarchy.txt @@ -3,23 +3,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es2015.symbol.wellknown.d.ts ├ span: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:261:5-266:110 -│ │ 261: /** +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:260:5-265:110 +│ │ 260: /** │ │ ^^^ -│ │ 262: * Split a string into substrings using the specified separator and return them as an array. +│ │ 261: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 263: * @param splitter An object that can split a string. +│ │ 262: * @param splitter An object that can split a string. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 264: * @param limit A value used to limit the number of elements returned in the array. +│ │ 263: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 265: */ +│ │ 264: */ │ │ ^^^^^^^ -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:266:5-266:10 -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:265:5-265:10 +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: @@ -53,23 +53,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es5.d.ts ├ span: -│ ╭ bundled:///libs/lib.es5.d.ts:484:5-489:65 -│ │ 484: /** +│ ╭ bundled:///libs/lib.es5.d.ts:483:5-488:65 +│ │ 483: /** │ │ ^^^ -│ │ 485: * Split a string into substrings using the specified separator and return them as an array. +│ │ 484: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 486: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. +│ │ 485: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 487: * @param limit A value used to limit the number of elements returned in the array. +│ │ 486: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 488: */ +│ │ 487: */ │ │ ^^^^^^^ -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es5.d.ts:489:5-489:10 -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es5.d.ts:488:5-488:10 +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInIdentifierComputedProperty.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInIdentifierComputedProperty.callHierarchy.txt index b02a66022c82a..004eb1cb4a062 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInIdentifierComputedProperty.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInIdentifierComputedProperty.callHierarchy.txt @@ -3,23 +3,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es2015.symbol.wellknown.d.ts ├ span: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:261:5-266:110 -│ │ 261: /** +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:260:5-265:110 +│ │ 260: /** │ │ ^^^ -│ │ 262: * Split a string into substrings using the specified separator and return them as an array. +│ │ 261: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 263: * @param splitter An object that can split a string. +│ │ 262: * @param splitter An object that can split a string. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 264: * @param limit A value used to limit the number of elements returned in the array. +│ │ 263: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 265: */ +│ │ 264: */ │ │ ^^^^^^^ -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:266:5-266:10 -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:265:5-265:10 +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: @@ -53,23 +53,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es5.d.ts ├ span: -│ ╭ bundled:///libs/lib.es5.d.ts:484:5-489:65 -│ │ 484: /** +│ ╭ bundled:///libs/lib.es5.d.ts:483:5-488:65 +│ │ 483: /** │ │ ^^^ -│ │ 485: * Split a string into substrings using the specified separator and return them as an array. +│ │ 484: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 486: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. +│ │ 485: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 487: * @param limit A value used to limit the number of elements returned in the array. +│ │ 486: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 488: */ +│ │ 487: */ │ │ ^^^^^^^ -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es5.d.ts:489:5-489:10 -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es5.d.ts:488:5-488:10 +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInStringLiteralComputedProperty.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInStringLiteralComputedProperty.callHierarchy.txt index 0476ce888b3e6..10c14b301d3f0 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInStringLiteralComputedProperty.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyIncomingCallsObjectLiteralMethodInStringLiteralComputedProperty.callHierarchy.txt @@ -3,23 +3,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es2015.symbol.wellknown.d.ts ├ span: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:261:5-266:110 -│ │ 261: /** +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:260:5-265:110 +│ │ 260: /** │ │ ^^^ -│ │ 262: * Split a string into substrings using the specified separator and return them as an array. +│ │ 261: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 263: * @param splitter An object that can split a string. +│ │ 262: * @param splitter An object that can split a string. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 264: * @param limit A value used to limit the number of elements returned in the array. +│ │ 263: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 265: */ +│ │ 264: */ │ │ ^^^^^^^ -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:266:5-266:10 -│ │ 266: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es2015.symbol.wellknown.d.ts:265:5-265:10 +│ │ 265: split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: @@ -53,23 +53,23 @@ ├ kind: method ├ file: bundled:///libs/lib.es5.d.ts ├ span: -│ ╭ bundled:///libs/lib.es5.d.ts:484:5-489:65 -│ │ 484: /** +│ ╭ bundled:///libs/lib.es5.d.ts:483:5-488:65 +│ │ 483: /** │ │ ^^^ -│ │ 485: * Split a string into substrings using the specified separator and return them as an array. +│ │ 484: * Split a string into substrings using the specified separator and return them as an array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 486: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. +│ │ 485: * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 487: * @param limit A value used to limit the number of elements returned in the array. +│ │ 486: * @param limit A value used to limit the number of elements returned in the array. │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -│ │ 488: */ +│ │ 487: */ │ │ ^^^^^^^ -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ │ ╰ ├ selectionSpan: -│ ╭ bundled:///libs/lib.es5.d.ts:489:5-489:10 -│ │ 489: split(separator: string | RegExp, limit?: number): string[]; +│ ╭ bundled:///libs/lib.es5.d.ts:488:5-488:10 +│ │ 488: split(separator: string | RegExp, limit?: number): string[]; │ │ ^^^^^ │ ╰ ├ incoming: diff --git a/tsc/testdata/tests/cases/compiler/collisionCodeGenModuleWithUnicodeNames.ts b/tsc/testdata/tests/cases/compiler/collisionCodeGenModuleWithUnicodeNames.ts index da77af3092aa8..dea896864e5ca 100644 Binary files a/tsc/testdata/tests/cases/compiler/collisionCodeGenModuleWithUnicodeNames.ts and b/tsc/testdata/tests/cases/compiler/collisionCodeGenModuleWithUnicodeNames.ts differ diff --git a/tsc/testdata/tests/cases/compiler/instanceofOperator.ts b/tsc/testdata/tests/cases/compiler/instanceofOperator.ts index a399b9b200f28..f4f8263377bd9 100644 Binary files a/tsc/testdata/tests/cases/compiler/instanceofOperator.ts and b/tsc/testdata/tests/cases/compiler/instanceofOperator.ts differ diff --git a/tsc/testdata/tests/cases/compiler/promiseTest.ts b/tsc/testdata/tests/cases/compiler/promiseTest.ts index c1e14b37851db..897640b72424a 100644 Binary files a/tsc/testdata/tests/cases/compiler/promiseTest.ts and b/tsc/testdata/tests/cases/compiler/promiseTest.ts differ diff --git a/tsc/testdata/tests/cases/compiler/targetTypeBaseCalls.ts b/tsc/testdata/tests/cases/compiler/targetTypeBaseCalls.ts index 8c022dafc7158..6517de090ec09 100644 Binary files a/tsc/testdata/tests/cases/compiler/targetTypeBaseCalls.ts and b/tsc/testdata/tests/cases/compiler/targetTypeBaseCalls.ts differ diff --git a/tsc/testdata/tests/cases/compiler/unicodeIdentifierNames.ts b/tsc/testdata/tests/cases/compiler/unicodeIdentifierNames.ts index 246fa7481d728..7807c933af155 100644 Binary files a/tsc/testdata/tests/cases/compiler/unicodeIdentifierNames.ts and b/tsc/testdata/tests/cases/compiler/unicodeIdentifierNames.ts differ